{"version":3,"file":"jsts.js","sources":["../src/org/locationtech/jts/util/NumberUtil.js","../src/java/lang/Exception.js","../src/java/lang/IllegalArgumentException.js","../src/java/lang/Long.js","../src/java/lang/Double.js","../src/java/lang/Comparable.js","../src/java/lang/Cloneable.js","../src/java/util/Comparator.js","../src/java/io/Serializable.js","../src/java/lang/RuntimeException.js","../src/org/locationtech/jts/util/AssertionFailedException.js","../src/org/locationtech/jts/util/Assert.js","../src/org/locationtech/jts/geom/Coordinate.js","../src/org/locationtech/jts/geom/CoordinateXY.js","../src/org/locationtech/jts/geom/CoordinateXYM.js","../src/org/locationtech/jts/geom/CoordinateXYZM.js","../src/hasInterface.js","../src/java/util/Collection.js","../src/java/lang/IndexOutOfBoundsException.js","../src/java/util/List.js","../src/java/util/NoSuchElementException.js","../src/java/util/ArrayList.js","../src/org/locationtech/jts/geom/CoordinateList.js","../src/org/locationtech/jts/geom/CoordinateSequenceFilter.js","../src/org/locationtech/jts/geom/Envelope.js","../src/java/lang/StringBuffer.js","../src/java/lang/Integer.js","../src/java/lang/Character.js","../src/org/locationtech/jts/math/DD.js","../src/org/locationtech/jts/algorithm/CGAlgorithmsDD.js","../src/org/locationtech/jts/geom/CoordinateSequence.js","../src/org/locationtech/jts/algorithm/Orientation.js","../src/org/locationtech/jts/algorithm/Intersection.js","../src/java/lang/System.js","../src/org/locationtech/jts/math/MathUtil.js","../src/org/locationtech/jts/algorithm/Distance.js","../src/org/locationtech/jts/geom/CoordinateSequenceFactory.js","../src/org/locationtech/jts/geom/GeometryComponentFilter.js","../src/org/locationtech/jts/geom/Geometry.js","../src/org/locationtech/jts/geom/CoordinateFilter.js","../src/org/locationtech/jts/algorithm/Length.js","../src/org/locationtech/jts/geom/Lineal.js","../src/org/locationtech/jts/geom/CoordinateSequences.js","../src/java/lang/UnsupportedOperationException.js","../src/org/locationtech/jts/geom/Dimension.js","../src/org/locationtech/jts/geom/GeometryFilter.js","../src/org/locationtech/jts/geom/LineString.js","../src/org/locationtech/jts/geom/Puntal.js","../src/org/locationtech/jts/geom/Point.js","../src/org/locationtech/jts/algorithm/Area.js","../src/java/util/Arrays.js","../src/org/locationtech/jts/geom/Polygonal.js","../src/org/locationtech/jts/geom/Polygon.js","../src/java/util/Set.js","../src/java/util/SortedSet.js","../src/java/util/TreeSet.js","../src/org/locationtech/jts/geom/GeometryCollection.js","../src/org/locationtech/jts/geom/MultiPoint.js","../src/org/locationtech/jts/geom/LinearRing.js","../src/org/locationtech/jts/geom/Coordinates.js","../src/org/locationtech/jts/geom/CoordinateArrays.js","../src/java/lang/StringBuilder.js","../src/org/locationtech/jts/geom/impl/CoordinateArraySequence.js","../src/org/locationtech/jts/geom/impl/CoordinateArraySequenceFactory.js","../src/org/locationtech/jts/geom/MultiPolygon.js","../src/java/util/Map.js","../src/java/util/HashSet.js","../src/java/util/HashMap.js","../src/org/locationtech/jts/geom/PrecisionModel.js","../src/org/locationtech/jts/geom/MultiLineString.js","../src/org/locationtech/jts/geom/GeometryFactory.js","../src/org/locationtech/jts/io/WKTParser.js","../src/org/locationtech/jts/io/WKTWriter.js","../src/org/locationtech/jts/algorithm/LineIntersector.js","../src/org/locationtech/jts/algorithm/RobustLineIntersector.js","../src/org/locationtech/jts/geom/LineSegment.js","../src/org/locationtech/jts/geom/Location.js","../src/org/locationtech/jts/geom/IntersectionMatrix.js","../src/org/locationtech/jts/algorithm/Angle.js","../src/org/locationtech/jts/algorithm/NotRepresentableException.js","../src/org/locationtech/jts/algorithm/HCoordinate.js","../src/org/locationtech/jts/geom/Triangle.js","../src/org/locationtech/jts/geom/util/NoninvertibleTransformationException.js","../src/org/locationtech/jts/geom/util/AffineTransformation.js","../src/org/locationtech/jts/math/Matrix.js","../src/org/locationtech/jts/geom/util/AffineTransformationBuilder.js","../src/org/locationtech/jts/geom/util/AffineTransformationFactory.js","../src/org/locationtech/jts/geom/util/ComponentCoordinateExtracter.js","../src/org/locationtech/jts/geom/util/GeometryCollectionMapper.js","../src/org/locationtech/jts/geom/util/GeometryCombiner.js","../src/org/locationtech/jts/geom/util/GeometryEditor.js","../src/org/locationtech/jts/geom/util/GeometryExtracter.js","../src/org/locationtech/jts/geom/util/GeometryMapper.js","../src/org/locationtech/jts/geom/util/GeometryTransformer.js","../src/org/locationtech/jts/geom/util/LineStringExtracter.js","../src/org/locationtech/jts/geom/util/LinearComponentExtracter.js","../src/java/util/Collections.js","../src/org/locationtech/jts/geom/util/PointExtracter.js","../src/org/locationtech/jts/geom/util/PolygonExtracter.js","../src/org/locationtech/jts/geom/util/ShortCircuitedGeometryVisitor.js","../src/org/locationtech/jts/util/GeometricShapeFactory.js","../src/org/locationtech/jts/geom/util/SineStarFactory.js","../src/org/locationtech/jts/algorithm/distance/PointPairDistance.js","../src/org/locationtech/jts/algorithm/distance/DistanceToPoint.js","../src/org/locationtech/jts/algorithm/distance/DiscreteHausdorffDistance.js","../src/org/locationtech/jts/index/ItemVisitor.js","../src/org/locationtech/jts/algorithm/locate/PointOnGeometryLocator.js","../src/org/locationtech/jts/index/intervalrtree/IntervalRTreeNode.js","../src/org/locationtech/jts/index/intervalrtree/IntervalRTreeLeafNode.js","../src/org/locationtech/jts/index/intervalrtree/IntervalRTreeBranchNode.js","../src/org/locationtech/jts/index/intervalrtree/SortedPackedIntervalRTree.js","../src/org/locationtech/jts/index/ArrayListVisitor.js","../src/org/locationtech/jts/algorithm/RayCrossingCounter.js","../src/org/locationtech/jts/algorithm/locate/IndexedPointInAreaLocator.js","../src/org/locationtech/jts/algorithm/PointLocation.js","../src/java/util/Iterator.js","../src/org/locationtech/jts/geom/GeometryCollectionIterator.js","../src/org/locationtech/jts/algorithm/locate/SimplePointInAreaLocator.js","../src/org/locationtech/jts/algorithm/match/SimilarityMeasure.js","../src/org/locationtech/jts/algorithm/match/AreaSimilarityMeasure.js","../src/org/locationtech/jts/algorithm/match/HausdorffSimilarityMeasure.js","../src/org/locationtech/jts/algorithm/match/SimilarityMeasureCombiner.js","../src/org/locationtech/jts/algorithm/Centroid.js","../src/java/util/EmptyStackException.js","../src/java/util/Stack.js","../src/org/locationtech/jts/util/UniqueCoordinateArrayFilter.js","../src/org/locationtech/jts/algorithm/ConvexHull.js","../src/org/locationtech/jts/algorithm/InteriorPointArea.js","../src/org/locationtech/jts/algorithm/InteriorPointLine.js","../src/org/locationtech/jts/algorithm/InteriorPointPoint.js","../src/org/locationtech/jts/algorithm/BoundaryNodeRule.js","../src/org/locationtech/jts/algorithm/PointLocator.js","../src/org/locationtech/jts/algorithm/MinimumBoundingCircle.js","../src/org/locationtech/jts/algorithm/MinimumDiameter.js","../src/org/locationtech/jts/densify/Densifier.js","../src/org/locationtech/jts/geomgraph/Quadrant.js","../src/org/locationtech/jts/edgegraph/HalfEdge.js","../src/org/locationtech/jts/edgegraph/MarkHalfEdge.js","../src/org/locationtech/jts/edgegraph/EdgeGraph.js","../src/org/locationtech/jts/dissolve/DissolveHalfEdge.js","../src/org/locationtech/jts/dissolve/DissolveEdgeGraph.js","../src/org/locationtech/jts/dissolve/LineDissolver.js","../src/org/locationtech/jts/geomgraph/Position.js","../src/org/locationtech/jts/geomgraph/index/MonotoneChain.js","../src/org/locationtech/jts/geomgraph/index/SweepLineEvent.js","../src/org/locationtech/jts/geomgraph/index/EdgeSetIntersector.js","../src/org/locationtech/jts/geomgraph/index/SegmentIntersector.js","../src/org/locationtech/jts/geomgraph/index/SimpleMCSweepLineIntersector.js","../src/org/locationtech/jts/geomgraph/TopologyLocation.js","../src/org/locationtech/jts/geomgraph/Label.js","../src/org/locationtech/jts/geomgraph/EdgeIntersection.js","../src/java/util/SortedMap.js","../src/java/util/TreeMap.js","../src/org/locationtech/jts/geomgraph/EdgeIntersectionList.js","../src/org/locationtech/jts/util/IntArrayList.js","../src/org/locationtech/jts/geomgraph/index/MonotoneChainIndexer.js","../src/org/locationtech/jts/geomgraph/index/MonotoneChainEdge.js","../src/org/locationtech/jts/geomgraph/Depth.js","../src/org/locationtech/jts/geomgraph/GraphComponent.js","../src/org/locationtech/jts/geomgraph/Edge.js","../src/org/locationtech/jts/geomgraph/Node.js","../src/org/locationtech/jts/geomgraph/NodeMap.js","../src/org/locationtech/jts/geomgraph/EdgeEnd.js","../src/org/locationtech/jts/geom/TopologyException.js","../src/org/locationtech/jts/geomgraph/DirectedEdge.js","../src/org/locationtech/jts/geomgraph/NodeFactory.js","../src/org/locationtech/jts/geomgraph/PlanarGraph.js","../src/org/locationtech/jts/geomgraph/GeometryGraph.js","../src/org/locationtech/jts/index/kdtree/KdNodeVisitor.js","../src/org/locationtech/jts/index/kdtree/KdNode.js","../src/org/locationtech/jts/index/kdtree/KdTree.js","../src/org/locationtech/jts/index/quadtree/NodeBase.js","../src/org/locationtech/jts/index/quadtree/DoubleBits.js","../src/org/locationtech/jts/index/quadtree/Key.js","../src/org/locationtech/jts/index/quadtree/Node.js","../src/org/locationtech/jts/index/quadtree/IntervalSize.js","../src/org/locationtech/jts/index/quadtree/Root.js","../src/org/locationtech/jts/index/SpatialIndex.js","../src/org/locationtech/jts/index/quadtree/Quadtree.js","../src/org/locationtech/jts/index/strtree/Boundable.js","../src/org/locationtech/jts/index/strtree/ItemBoundable.js","../src/org/locationtech/jts/util/PriorityQueue.js","../src/org/locationtech/jts/index/strtree/AbstractNode.js","../src/org/locationtech/jts/index/strtree/EnvelopeDistance.js","../src/org/locationtech/jts/index/strtree/BoundablePair.js","../src/org/locationtech/jts/index/strtree/AbstractSTRtree.js","../src/org/locationtech/jts/index/strtree/ItemDistance.js","../src/org/locationtech/jts/index/strtree/STRtree.js","../src/org/locationtech/jts/io/GeoJSONParser.js","../src/org/locationtech/jts/io/GeoJSONReader.js","../src/org/locationtech/jts/io/GeoJSONWriter.js","../src/org/locationtech/jts/io/WKTReader.js","../src/org/locationtech/jts/io/OL3Parser.js","../src/org/locationtech/jts/noding/SegmentPointComparator.js","../src/org/locationtech/jts/noding/SegmentNode.js","../src/org/locationtech/jts/noding/SegmentNodeList.js","../src/org/locationtech/jts/noding/Octant.js","../src/org/locationtech/jts/noding/SegmentString.js","../src/org/locationtech/jts/noding/NodableSegmentString.js","../src/org/locationtech/jts/noding/NodedSegmentString.js","../src/org/locationtech/jts/index/chain/MonotoneChainOverlapAction.js","../src/org/locationtech/jts/index/chain/MonotoneChain.js","../src/org/locationtech/jts/index/chain/MonotoneChainBuilder.js","../src/org/locationtech/jts/noding/Noder.js","../src/org/locationtech/jts/noding/SinglePassNoder.js","../src/org/locationtech/jts/noding/MCIndexNoder.js","../src/org/locationtech/jts/noding/ScaledNoder.js","../src/org/locationtech/jts/operation/BoundaryOp.js","../src/org/locationtech/jts/operation/IsSimpleOp.js","../src/org/locationtech/jts/operation/buffer/BufferParameters.js","../src/org/locationtech/jts/operation/buffer/RightmostEdgeFinder.js","../src/java/util/LinkedList.js","../src/org/locationtech/jts/operation/buffer/BufferSubgraph.js","../src/org/locationtech/jts/geomgraph/EdgeRing.js","../src/org/locationtech/jts/operation/overlay/MinimalEdgeRing.js","../src/org/locationtech/jts/operation/overlay/MaximalEdgeRing.js","../src/org/locationtech/jts/operation/overlay/PolygonBuilder.js","../src/org/locationtech/jts/operation/buffer/BufferInputLineSimplifier.js","../src/org/locationtech/jts/operation/buffer/OffsetSegmentString.js","../src/org/locationtech/jts/operation/buffer/OffsetSegmentGenerator.js","../src/org/locationtech/jts/operation/buffer/OffsetCurveBuilder.js","../src/org/locationtech/jts/operation/buffer/SubgraphDepthLocater.js","../src/org/locationtech/jts/operation/buffer/OffsetCurveSetBuilder.js","../src/org/locationtech/jts/geomgraph/EdgeEndStar.js","../src/org/locationtech/jts/geomgraph/DirectedEdgeStar.js","../src/org/locationtech/jts/operation/overlay/OverlayNodeFactory.js","../src/org/locationtech/jts/noding/OrientedCoordinateArray.js","../src/org/locationtech/jts/geomgraph/EdgeList.js","../src/org/locationtech/jts/noding/SegmentIntersector.js","../src/org/locationtech/jts/noding/IntersectionAdder.js","../src/org/locationtech/jts/operation/buffer/BufferBuilder.js","../src/org/locationtech/jts/noding/NodingValidator.js","../src/org/locationtech/jts/noding/snapround/HotPixel.js","../src/org/locationtech/jts/index/chain/MonotoneChainSelectAction.js","../src/org/locationtech/jts/noding/snapround/MCIndexPointSnapper.js","../src/org/locationtech/jts/noding/InteriorIntersectionFinderAdder.js","../src/org/locationtech/jts/noding/snapround/MCIndexSnapRounder.js","../src/org/locationtech/jts/operation/buffer/BufferOp.js","../src/org/locationtech/jts/operation/distance/GeometryLocation.js","../src/org/locationtech/jts/operation/distance/ConnectedElementLocationFilter.js","../src/org/locationtech/jts/operation/distance/DistanceOp.js","../src/org/locationtech/jts/operation/linemerge/EdgeString.js","../src/org/locationtech/jts/planargraph/GraphComponent.js","../src/org/locationtech/jts/planargraph/DirectedEdge.js","../src/org/locationtech/jts/operation/linemerge/LineMergeDirectedEdge.js","../src/org/locationtech/jts/planargraph/Edge.js","../src/org/locationtech/jts/planargraph/DirectedEdgeStar.js","../src/org/locationtech/jts/planargraph/Node.js","../src/org/locationtech/jts/operation/linemerge/LineMergeEdge.js","../src/org/locationtech/jts/planargraph/NodeMap.js","../src/org/locationtech/jts/planargraph/PlanarGraph.js","../src/org/locationtech/jts/operation/linemerge/LineMergeGraph.js","../src/org/locationtech/jts/operation/linemerge/LineMerger.js","../src/org/locationtech/jts/planargraph/Subgraph.js","../src/org/locationtech/jts/planargraph/algorithm/ConnectedSubgraphFinder.js","../src/org/locationtech/jts/operation/linemerge/LineSequencer.js","../src/org/locationtech/jts/operation/overlay/snap/LineStringSnapper.js","../src/org/locationtech/jts/operation/overlay/snap/GeometrySnapper.js","../src/org/locationtech/jts/noding/BasicSegmentString.js","../src/org/locationtech/jts/noding/NodingIntersectionFinder.js","../src/org/locationtech/jts/noding/FastNodingValidator.js","../src/org/locationtech/jts/geomgraph/EdgeNodingValidator.js","../src/org/locationtech/jts/operation/overlay/LineBuilder.js","../src/org/locationtech/jts/operation/overlay/PointBuilder.js","../src/org/locationtech/jts/precision/CommonBits.js","../src/org/locationtech/jts/precision/CommonBitsRemover.js","../src/org/locationtech/jts/operation/overlay/snap/SnapOverlayOp.js","../src/org/locationtech/jts/operation/overlay/snap/SnapIfNeededOverlayOp.js","../src/org/locationtech/jts/operation/GeometryGraphOperation.js","../src/org/locationtech/jts/operation/overlay/OverlayOp.js","../src/org/locationtech/jts/operation/polygonize/PolygonizeDirectedEdge.js","../src/org/locationtech/jts/operation/polygonize/PolygonizeEdge.js","../src/org/locationtech/jts/operation/valid/ConnectedInteriorTester.js","../src/org/locationtech/jts/operation/relate/EdgeEndBuilder.js","../src/org/locationtech/jts/operation/relate/EdgeEndBundle.js","../src/org/locationtech/jts/operation/relate/EdgeEndBundleStar.js","../src/org/locationtech/jts/operation/relate/RelateNode.js","../src/org/locationtech/jts/operation/relate/RelateNodeFactory.js","../src/org/locationtech/jts/operation/relate/RelateNodeGraph.js","../src/org/locationtech/jts/operation/valid/ConsistentAreaTester.js","../src/org/locationtech/jts/operation/valid/IndexedNestedRingTester.js","../src/org/locationtech/jts/operation/valid/TopologyValidationError.js","../src/org/locationtech/jts/operation/valid/IsValidOp.js","../src/org/locationtech/jts/operation/polygonize/EdgeRing.js","../src/org/locationtech/jts/operation/polygonize/PolygonizeGraph.js","../src/org/locationtech/jts/operation/polygonize/HoleAssigner.js","../src/org/locationtech/jts/operation/polygonize/Polygonizer.js","../src/org/locationtech/jts/operation/relate/RelateComputer.js","../src/org/locationtech/jts/operation/predicate/RectangleContains.js","../src/org/locationtech/jts/algorithm/RectangleLineIntersector.js","../src/org/locationtech/jts/operation/predicate/RectangleIntersects.js","../src/org/locationtech/jts/operation/relate/RelateOp.js","../src/org/locationtech/jts/operation/union/PointGeometryUnion.js","../src/org/locationtech/jts/operation/union/InputExtracter.js","../src/org/locationtech/jts/operation/union/OverlapUnion.js","../src/org/locationtech/jts/operation/union/CascadedPolygonUnion.js","../src/org/locationtech/jts/operation/union/UnaryUnionOp.js","../src/org/locationtech/jts/precision/PrecisionReducerCoordinateOperation.js","../src/org/locationtech/jts/precision/GeometryPrecisionReducer.js","../src/org/locationtech/jts/simplify/DouglasPeuckerLineSimplifier.js","../src/org/locationtech/jts/simplify/DouglasPeuckerSimplifier.js","../src/org/locationtech/jts/simplify/TaggedLineSegment.js","../src/org/locationtech/jts/simplify/TaggedLineString.js","../src/org/locationtech/jts/simplify/LineSegmentIndex.js","../src/org/locationtech/jts/simplify/TaggedLineStringSimplifier.js","../src/org/locationtech/jts/simplify/TaggedLinesSimplifier.js","../src/org/locationtech/jts/simplify/TopologyPreservingSimplifier.js","../src/org/locationtech/jts/simplify/VWLineSimplifier.js","../src/org/locationtech/jts/simplify/VWSimplifier.js","../src/org/locationtech/jts/triangulate/SplitSegment.js","../src/org/locationtech/jts/triangulate/ConstraintSplitPointFinder.js","../src/org/locationtech/jts/triangulate/NonEncroachingSplitPointFinder.js","../src/org/locationtech/jts/triangulate/quadedge/TrianglePredicate.js","../src/org/locationtech/jts/triangulate/quadedge/Vertex.js","../src/org/locationtech/jts/triangulate/ConstraintVertex.js","../src/org/locationtech/jts/triangulate/quadedge/QuadEdge.js","../src/org/locationtech/jts/triangulate/IncrementalDelaunayTriangulator.js","../src/org/locationtech/jts/triangulate/quadedge/QuadEdgeLocator.js","../src/org/locationtech/jts/triangulate/quadedge/LastFoundQuadEdgeLocator.js","../src/org/locationtech/jts/triangulate/quadedge/LocateFailureException.js","../src/org/locationtech/jts/triangulate/quadedge/TriangleVisitor.js","../src/org/locationtech/jts/triangulate/quadedge/QuadEdgeSubdivision.js","../src/org/locationtech/jts/triangulate/Segment.js","../src/org/locationtech/jts/triangulate/ConstraintEnforcementException.js","../src/org/locationtech/jts/triangulate/ConformingDelaunayTriangulator.js","../src/org/locationtech/jts/triangulate/DelaunayTriangulationBuilder.js","../src/org/locationtech/jts/triangulate/ConformingDelaunayTriangulationBuilder.js","../src/org/locationtech/jts/triangulate/VoronoiDiagramBuilder.js","../src/org/locationtech/jts/linearref/LinearIterator.js","../src/org/locationtech/jts/linearref/LengthIndexOfPoint.js","../src/org/locationtech/jts/linearref/LinearLocation.js","../src/org/locationtech/jts/linearref/LocationIndexOfPoint.js","../src/org/locationtech/jts/linearref/LocationIndexOfLine.js","../src/org/locationtech/jts/linearref/LengthLocationMap.js","../src/org/locationtech/jts/linearref/LinearGeometryBuilder.js","../src/org/locationtech/jts/linearref/ExtractLineByLocation.js","../src/org/locationtech/jts/linearref/LengthIndexedLine.js","../src/org/locationtech/jts/linearref/LocationIndexedLine.js","../src/org/locationtech/jts/util/CollectionUtil.js","../src/org/locationtech/jts/util/CoordinateArrayFilter.js","../src/org/locationtech/jts/util/CoordinateCountFilter.js","../src/org/locationtech/jts/util/ObjectCounter.js","../src/java/io/PrintStream.js","../src/java/io/StringReader.js","../src/java/io/ByteArrayOutputStream.js","../src/java/io/IOException.js","../src/java/io/LineNumberReader.js","../src/org/locationtech/jts/util/StringUtil.js","../src/org/locationtech/jts/operation/union/UnionOp.js","../src/org/locationtech/jts/monkey.js","../src/jsts.js"],"sourcesContent":["export default class NumberUtil {\n static equalsWithTolerance(x1, x2, tolerance) {\n return Math.abs(x1 - x2) <= tolerance\n }\n}\n","export default class Exception extends Error {\n constructor(message) {\n super(message)\n this.name = Object.keys({ Exception })[0]\n }\n toString() {\n return this.message\n }\n}\n","import Exception from './Exception'\n\nexport default class IllegalArgumentException extends Exception {\n constructor(message) {\n super(message)\n this.name = Object.keys({ IllegalArgumentException })[0]\n }\n}\n","export default class Long {\n constructor(high, low) {\n this.low = low || 0\n this.high = high || 0\n }\n\n static toBinaryString(i) {\n let mask\n let result = ''\n for (mask = 0x80000000; mask > 0; mask >>>= 1)\n result += (i.high & mask) === mask ? '1' : '0'\n for (mask = 0x80000000; mask > 0; mask >>>= 1)\n result += (i.low & mask) === mask ? '1' : '0'\n return result\n }\n}\n","import Long from './Long'\n\nexport default function Double() { }\n\nDouble.NaN = NaN\nDouble.isNaN = n => Number.isNaN(n)\nDouble.isInfinite = n => !Number.isFinite(n)\nDouble.MAX_VALUE = Number.MAX_VALUE\n\nif (typeof Float64Array === 'function' &&\n typeof Int32Array === 'function')\n// Simple and fast conversion between double and long bits\n// using TypedArrays and ArrayViewBuffers.\n\n (function() {\n const EXP_BIT_MASK = 0x7ff00000\n const SIGNIF_BIT_MASK = 0xFFFFF\n const f64buf = new Float64Array(1)\n const i32buf = new Int32Array(f64buf.buffer)\n Double.doubleToLongBits = function(value) {\n f64buf[0] = value\n let low = i32buf[0] | 0\n let high = i32buf[1] | 0\n // Check for NaN based on values of bit fields, maximum\n // exponent and nonzero significand.\n if (((high & EXP_BIT_MASK) === EXP_BIT_MASK) &&\n ((high & SIGNIF_BIT_MASK) !== 0) &&\n (low !== 0)) {\n low = 0 | 0\n high = 0x7ff80000 | 0\n }\n return new Long(high, low)\n }\n Double.longBitsToDouble = function(bits) {\n i32buf[0] = bits.low\n i32buf[1] = bits.high\n return f64buf[0]\n }\n })()\nelse\n// More complex and slower fallback implementation using\n// math and the divide-by-two and multiply-by-two algorithms.\n\n (function() {\n const BIAS = 1023\n const log2 = Math.log2\n const floor = Math.floor\n const pow = Math.pow\n const MAX_REL_BITS_INTEGER = (function() {\n for (let i = 53; i > 0; i--) {\n const bits = pow(2, i) - 1\n if (floor(log2(bits)) + 1 === i) return bits\n }\n return 0\n })()\n Double.doubleToLongBits = function(value) {\n let x, y, f, bits, skip\n let sign, exp, high, low\n\n // Get the sign bit and absolute value.\n if (value < 0 || 1 / value === Number.NEGATIVE_INFINITY) {\n sign = (1 << 31)\n value = (-value)\n } else {\n sign = 0\n }\n\n // Handle some special values.\n if (value === 0) {\n // Handle zeros (+/-0).\n low = 0 | 0\n high = sign // exponent: 00..00, significand: 00..00\n return new Long(high, low)\n }\n\n if (value === Infinity) {\n // Handle infinity (only positive values for value possible).\n low = 0 | 0\n high = sign | 0x7ff00000 // exponent: 11..11, significand: 00..00\n return new Long(high, low)\n }\n\n if (value !== value) { // eslint-disable-line\n // Handle NaNs (boiled down to only one distinct NaN).\n low = 0 | 0\n high = 0x7ff80000 // exponent: 11..11, significand: 10..00\n return new Long(high, low)\n }\n\n // Preinitialize variables, that are not neccessarily set by\n // the algorithm.\n bits = 0\n low = 0 | 0\n\n // Get the (always positive) integer part of value.\n x = floor(value)\n\n // Process the integer part if it's greater than 1. Zero requires\n // no bits at all, 1 represents the implicit (hidden) leading bit,\n // which must not be written as well.\n if (x > 1)\n // If we can reliably determine the number of bits required for\n // the integer part,\n\n if (x <= MAX_REL_BITS_INTEGER) {\n // get the number of bits required to represent it minus 1\n bits = floor(log2(x)) /* + 1 - 1 */\n // and simply copy/shift the integer bits into low and high.\n // That's much faster than the divide-by-two algorithm (saves\n // up to ~60%).\n // We always need to mask out the most significant bit, which\n // is the implicit (aka hidden) bit.\n if (bits <= 20) {\n // The simple case in which the integer fits into the\n // lower 20 bits of the high word is worth to be handled\n // separately (saves ~25%).\n low = 0 | 0\n high = (x << (20 - bits)) & 0xfffff\n } else {\n // Here, the integer part is split into low and high.\n // Since its value may require more than 32 bits, we\n // cannot use bitwise operators (which implicitly cast\n // to Int32), but use arithmetic operators % and / to\n // get low and high parts. The uppper 20 bits go to high,\n // the remaining bits (in f) to low.\n f = bits - 20\n // Like (1 << f) but safe with even more than 32 bits.\n y = pow(2, f)\n low = (x % y) << (32 - f)\n high = (x / y) & 0xfffff\n }\n } else {\n // For greater values, we must use the much slower divide-by-two\n // algorithm. Bits are generated from right to left, that is from\n // least to most significant bit. For each bit, we left-shift both\n // low and high by one and carry bit #0 from high to #31 in low.\n // The next bit is then copied into bit #19 in high, the leftmost\n // bit of the double's significand.\n\n // Preserve x for later user, so work with f.\n f = x\n low = 0 | 0\n for (;;) {\n y = f / 2\n f = floor(y)\n if (f === 0)\n // We just found the most signigicant (1-)bit, which\n // is the implicit bit and so, not stored in the double\n // value. So, it's time to leave the loop.\n break\n\n // Count this bit, shift low and carry bit #0 from high.\n bits++\n low >>>= 1\n low |= (high & 0x1) << 31\n // Shift high.\n high >>>= 1\n if (y !== f)\n // Copy the new bit into bit #19 in high (only required if 1).\n high |= 0x80000\n }\n }\n\n // Bias the exponent.\n exp = bits + BIAS\n\n // If the integer part is zero, we've not yet seen the implicit\n // leading bit. Variable skip is later used while processing the\n // fractional part (if any).\n skip = (x === 0)\n\n // Get fraction only into x.\n x = value - x\n\n // If some significand bits are still left to be filled and\n // the fractional part is not zero, convert the fraction using\n // the multiply-by-2 algorithm.\n if (bits < 52 && x !== 0) {\n // Initialize 'buffer' f, into which newly created bits get\n // shifted from right to left.\n f = 0\n\n for (;;) {\n y = x * 2\n if (y >= 1) {\n // This is a new 1-bit. Add and count this bit, if not\n // prohibited by skip.\n x = y - 1\n if (!skip) {\n f <<= 1\n f |= 1\n bits++\n } else {\n // Otherwise, decrement the exponent and unset\n // skip, so that all following bits get written.\n exp--\n skip = false\n }\n } else {\n // This is a new 0-bit. Add and count this bit, if not\n // prohibited by skip.\n x = y\n if (!skip) {\n f <<= 1\n bits++\n } else if (--exp === 0) {\n // Otherwise we've just decremented the exponent. If the\n // biased exponent is zero now (-1023), we process a\n // subnormal number, which has no impled leading 1-bit.\n // So, count this 0-bit and unset skip to write out\n // all the following bits.\n bits++\n skip = false\n }\n }\n if (bits === 20) {\n // When 20 bits have been created in total, we're done with\n // the high word. Copy the bits from 'buffer' f into high\n // and reset 'buffer' f. Following bits will end up in the\n // low word.\n high |= f\n f = 0\n } else if (bits === 52) {\n // When 52 bits have been created in total, we're done with\n // low word as well. Copy the bits from 'buffer' f into low\n // and exit the loop.\n low |= f\n break\n }\n if (y === 1) {\n // When y is exactly 1, there is no remainder and the process\n // is complete (the number is finite). Copy the bits from\n // 'buffer' f into either low or high and exit the loop.\n if (bits < 20)\n high |= (f << (20 - bits))\n else if (bits < 52) low |= (f << (52 - bits))\n\n break\n }\n }\n }\n\n // Copy/shift the exponent and sign bits into the high word.\n high |= (exp << 20)\n high |= sign\n\n return new Long(high, low)\n }\n Double.longBitsToDouble = function(bits) {\n let i\n let x, exp, fract\n const high = bits.high\n const low = bits.low\n\n // Extract the sign.\n const sign = (high & (1 << 31)) ? -1 : 1\n\n // Extract the unbiased exponent.\n exp = ((high & 0x7ff00000) >> 20) - BIAS\n\n // Calculate the fraction from left to right. Start\n // off with the 20 lower bits from the high word.\n fract = 0\n x = (1 << 19)\n for (i = 1; i <= 20; i++) {\n if (high & x) fract += pow(2, -i)\n\n x >>>= 1\n }\n // Continue with all 32 bits from the low word.\n x = (1 << 31)\n for (i = 21; i <= 52; i++) {\n if (low & x) fract += pow(2, -i)\n\n x >>>= 1\n }\n\n // Handle special values.\n // Check for zero and subnormal values.\n if (exp === -BIAS) {\n if (fract === 0)\n // +/-1.0 * 0.0 => +/-0.0\n return sign * 0\n\n exp = -1022\n } else if (exp === BIAS + 1) { // Check for +/-Infinity or NaN.\n if (fract === 0)\n // +/-1.0 / 0.0 => +/-Infinity\n return sign / 0\n\n return NaN\n } else { // Nothing special? Seems to be a normal number.\n // Add the implicit leading bit (1*2^0).\n fract += 1\n }\n\n return sign * fract * pow(2, exp)\n }\n })()\n","export default function Comparable() {}\n","export default function Clonable() {}\n","export default function Comparator() {}\n","export default function Serializable() {}\n","import Exception from './Exception'\n\nexport default class RuntimeException extends Exception {\n constructor(message) {\n super(message)\n this.name = Object.keys({ RuntimeException })[0]\n }\n}\n","import RuntimeException from '../../../../java/lang/RuntimeException'\nexport default class AssertionFailedException extends RuntimeException {\n constructor() {\n super()\n AssertionFailedException.constructor_.apply(this, arguments)\n }\n static constructor_() {\n if (arguments.length === 0) {\n RuntimeException.constructor_.call(this)\n } else if (arguments.length === 1) {\n const message = arguments[0]\n RuntimeException.constructor_.call(this, message)\n }\n }\n}\n","import AssertionFailedException from './AssertionFailedException'\nexport default class Assert {\n static shouldNeverReachHere() {\n if (arguments.length === 0) {\n Assert.shouldNeverReachHere(null)\n } else if (arguments.length === 1) {\n const message = arguments[0]\n throw new AssertionFailedException('Should never reach here' + (message !== null ? ': ' + message : ''))\n }\n }\n static isTrue() {\n if (arguments.length === 1) {\n const assertion = arguments[0]\n Assert.isTrue(assertion, null)\n } else if (arguments.length === 2) {\n const assertion = arguments[0], message = arguments[1]\n if (!assertion) \n if (message === null) \n throw new AssertionFailedException()\n else \n throw new AssertionFailedException(message)\n \n \n }\n }\n static equals() {\n if (arguments.length === 2) {\n const expectedValue = arguments[0], actualValue = arguments[1]\n Assert.equals(expectedValue, actualValue, null)\n } else if (arguments.length === 3) {\n const expectedValue = arguments[0], actualValue = arguments[1], message = arguments[2]\n if (!actualValue.equals(expectedValue)) \n throw new AssertionFailedException('Expected ' + expectedValue + ' but encountered ' + actualValue + (message !== null ? ': ' + message : ''))\n \n }\n }\n}\n","import NumberUtil from '../util/NumberUtil'\nimport IllegalArgumentException from '../../../../java/lang/IllegalArgumentException'\nimport Double from '../../../../java/lang/Double'\nimport Comparable from '../../../../java/lang/Comparable'\nimport Cloneable from '../../../../java/lang/Cloneable'\nimport Comparator from '../../../../java/util/Comparator'\nimport Serializable from '../../../../java/io/Serializable'\nimport Assert from '../util/Assert'\n\nconst kBuf = new ArrayBuffer(8)\nconst kBufAsF64 = new Float64Array(kBuf)\nconst kBufAsI32 = new Int32Array(kBuf)\n\nexport default class Coordinate {\n constructor() {\n Coordinate.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this.x = null\n this.y = null\n this.z = null\n if (arguments.length === 0) {\n Coordinate.constructor_.call(this, 0.0, 0.0)\n } else if (arguments.length === 1) {\n const c = arguments[0]\n Coordinate.constructor_.call(this, c.x, c.y, c.getZ())\n } else if (arguments.length === 2) {\n const x = arguments[0], y = arguments[1]\n Coordinate.constructor_.call(this, x, y, Coordinate.NULL_ORDINATE)\n } else if (arguments.length === 3) {\n const x = arguments[0], y = arguments[1], z = arguments[2]\n this.x = x\n this.y = y\n this.z = z\n }\n }\n static hashCode(n) {\n kBufAsF64[0] = n\n return kBufAsI32[0] ^ kBufAsI32[1]\n }\n getM() {\n return Double.NaN\n }\n setOrdinate(ordinateIndex, value) {\n switch (ordinateIndex) {\n case Coordinate.X:\n this.x = value\n break\n case Coordinate.Y:\n this.y = value\n break\n case Coordinate.Z:\n this.setZ(value)\n break\n default:\n throw new IllegalArgumentException('Invalid ordinate index: ' + ordinateIndex)\n }\n }\n equals2D() {\n if (arguments.length === 1) {\n const other = arguments[0]\n if (this.x !== other.x) \n return false\n \n if (this.y !== other.y) \n return false\n \n return true\n } else if (arguments.length === 2) {\n const c = arguments[0], tolerance = arguments[1]\n if (!NumberUtil.equalsWithTolerance(this.x, c.x, tolerance)) \n return false\n \n if (!NumberUtil.equalsWithTolerance(this.y, c.y, tolerance)) \n return false\n \n return true\n }\n }\n setM(m) {\n throw new IllegalArgumentException('Invalid ordinate index: ' + Coordinate.M)\n }\n getZ() {\n return this.z\n }\n getOrdinate(ordinateIndex) {\n switch (ordinateIndex) {\n case Coordinate.X:\n return this.x\n case Coordinate.Y:\n return this.y\n case Coordinate.Z:\n return this.getZ()\n }\n throw new IllegalArgumentException('Invalid ordinate index: ' + ordinateIndex)\n }\n equals3D(other) {\n return this.x === other.x && this.y === other.y && (this.getZ() === other.getZ() || Double.isNaN(this.getZ()) && Double.isNaN(other.getZ()))\n }\n equals(other) {\n if (!(other instanceof Coordinate)) \n return false\n \n return this.equals2D(other)\n }\n equalInZ(c, tolerance) {\n return NumberUtil.equalsWithTolerance(this.getZ(), c.getZ(), tolerance)\n }\n setX(x) {\n this.x = x\n }\n compareTo(o) {\n const other = o\n if (this.x < other.x) return -1\n if (this.x > other.x) return 1\n if (this.y < other.y) return -1\n if (this.y > other.y) return 1\n return 0\n }\n getX() {\n return this.x\n }\n setZ(z) {\n this.z = z\n }\n clone() {\n try {\n const coord = null\n return coord\n } catch (e) {\n if (e instanceof CloneNotSupportedException) {\n Assert.shouldNeverReachHere('this shouldn\\'t happen because this class is Cloneable')\n return null\n } else {\n throw e\n }\n } finally {}\n }\n copy() {\n return new Coordinate(this)\n }\n toString() {\n return '(' + this.x + ', ' + this.y + ', ' + this.getZ() + ')'\n }\n distance3D(c) {\n const dx = this.x - c.x\n const dy = this.y - c.y\n const dz = this.getZ() - c.getZ()\n return Math.sqrt(dx * dx + dy * dy + dz * dz)\n }\n getY() {\n return this.y\n }\n setY(y) {\n this.y = y\n }\n distance(c) {\n const dx = this.x - c.x\n const dy = this.y - c.y\n return Math.sqrt(dx * dx + dy * dy)\n }\n hashCode() {\n let result = 17\n result = 37 * result + Coordinate.hashCode(this.x)\n result = 37 * result + Coordinate.hashCode(this.y)\n return result\n }\n setCoordinate(other) {\n this.x = other.x\n this.y = other.y\n this.z = other.getZ()\n }\n get interfaces_() {\n return [Comparable, Cloneable, Serializable]\n }\n}\nclass DimensionalComparator {\n constructor() {\n DimensionalComparator.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._dimensionsToTest = 2\n if (arguments.length === 0) {\n DimensionalComparator.constructor_.call(this, 2)\n } else if (arguments.length === 1) {\n const dimensionsToTest = arguments[0]\n if (dimensionsToTest !== 2 && dimensionsToTest !== 3) throw new IllegalArgumentException('only 2 or 3 dimensions may be specified')\n this._dimensionsToTest = dimensionsToTest\n }\n }\n static compare(a, b) {\n if (a < b) return -1\n if (a > b) return 1\n if (Double.isNaN(a)) {\n if (Double.isNaN(b)) return 0\n return -1\n }\n if (Double.isNaN(b)) return 1\n return 0\n }\n compare(c1, c2) {\n const compX = DimensionalComparator.compare(c1.x, c2.x)\n if (compX !== 0) return compX\n const compY = DimensionalComparator.compare(c1.y, c2.y)\n if (compY !== 0) return compY\n if (this._dimensionsToTest <= 2) return 0\n const compZ = DimensionalComparator.compare(c1.getZ(), c2.getZ())\n return compZ\n }\n get interfaces_() {\n return [Comparator]\n }\n}\nCoordinate.DimensionalComparator = DimensionalComparator\nCoordinate.NULL_ORDINATE = Double.NaN\nCoordinate.X = 0\nCoordinate.Y = 1\nCoordinate.Z = 2\nCoordinate.M = 3\n","import Coordinate from './Coordinate'\nimport IllegalArgumentException from '../../../../java/lang/IllegalArgumentException'\nexport default class CoordinateXY extends Coordinate {\n constructor() {\n super()\n CoordinateXY.constructor_.apply(this, arguments)\n }\n static constructor_() {\n if (arguments.length === 0) {\n Coordinate.constructor_.call(this)\n } else if (arguments.length === 1) {\n if (arguments[0] instanceof CoordinateXY) {\n const coord = arguments[0]\n Coordinate.constructor_.call(this, coord.x, coord.y)\n } else if (arguments[0] instanceof Coordinate) {\n const coord = arguments[0]\n Coordinate.constructor_.call(this, coord.x, coord.y)\n }\n } else if (arguments.length === 2) {\n const x = arguments[0], y = arguments[1]\n Coordinate.constructor_.call(this, x, y, Coordinate.NULL_ORDINATE)\n }\n }\n setOrdinate(ordinateIndex, value) {\n switch (ordinateIndex) {\n case CoordinateXY.X:\n this.x = value\n break\n case CoordinateXY.Y:\n this.y = value\n break\n default:\n throw new IllegalArgumentException('Invalid ordinate index: ' + ordinateIndex)\n }\n }\n getZ() {\n return Coordinate.NULL_ORDINATE\n }\n getOrdinate(ordinateIndex) {\n switch (ordinateIndex) {\n case CoordinateXY.X:\n return this.x\n case CoordinateXY.Y:\n return this.y\n }\n throw new IllegalArgumentException('Invalid ordinate index: ' + ordinateIndex)\n }\n setZ(z) {\n throw new IllegalArgumentException('CoordinateXY dimension 2 does not support z-ordinate')\n }\n copy() {\n return new CoordinateXY(this)\n }\n toString() {\n return '(' + this.x + ', ' + this.y + ')'\n }\n setCoordinate(other) {\n this.x = other.x\n this.y = other.y\n this.z = other.getZ()\n }\n}\nCoordinateXY.X = 0\nCoordinateXY.Y = 1\nCoordinateXY.Z = -1\nCoordinateXY.M = -1\n","import Coordinate from './Coordinate'\nimport IllegalArgumentException from '../../../../java/lang/IllegalArgumentException'\nexport default class CoordinateXYM extends Coordinate {\n constructor() {\n super()\n CoordinateXYM.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._m = null\n if (arguments.length === 0) {\n Coordinate.constructor_.call(this)\n this._m = 0.0\n } else if (arguments.length === 1) {\n if (arguments[0] instanceof CoordinateXYM) {\n const coord = arguments[0]\n Coordinate.constructor_.call(this, coord.x, coord.y)\n this._m = coord._m\n } else if (arguments[0] instanceof Coordinate) {\n const coord = arguments[0]\n Coordinate.constructor_.call(this, coord.x, coord.y)\n this._m = this.getM()\n }\n } else if (arguments.length === 3) {\n const x = arguments[0], y = arguments[1], m = arguments[2]\n Coordinate.constructor_.call(this, x, y, Coordinate.NULL_ORDINATE)\n this._m = m\n }\n }\n getM() {\n return this._m\n }\n setOrdinate(ordinateIndex, value) {\n switch (ordinateIndex) {\n case CoordinateXYM.X:\n this.x = value\n break\n case CoordinateXYM.Y:\n this.y = value\n break\n case CoordinateXYM.M:\n this._m = value\n break\n default:\n throw new IllegalArgumentException('Invalid ordinate index: ' + ordinateIndex)\n }\n }\n setM(m) {\n this._m = m\n }\n getZ() {\n return Coordinate.NULL_ORDINATE\n }\n getOrdinate(ordinateIndex) {\n switch (ordinateIndex) {\n case CoordinateXYM.X:\n return this.x\n case CoordinateXYM.Y:\n return this.y\n case CoordinateXYM.M:\n return this._m\n }\n throw new IllegalArgumentException('Invalid ordinate index: ' + ordinateIndex)\n }\n setZ(z) {\n throw new IllegalArgumentException('CoordinateXY dimension 2 does not support z-ordinate')\n }\n copy() {\n return new CoordinateXYM(this)\n }\n toString() {\n return '(' + this.x + ', ' + this.y + ' m=' + this.getM() + ')'\n }\n setCoordinate(other) {\n this.x = other.x\n this.y = other.y\n this.z = other.getZ()\n this._m = other.getM()\n }\n}\nCoordinateXYM.X = 0\nCoordinateXYM.Y = 1\nCoordinateXYM.Z = -1\nCoordinateXYM.M = 2\n","import Coordinate from './Coordinate'\nimport IllegalArgumentException from '../../../../java/lang/IllegalArgumentException'\nexport default class CoordinateXYZM extends Coordinate {\n constructor() {\n super()\n CoordinateXYZM.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._m = null\n if (arguments.length === 0) {\n Coordinate.constructor_.call(this)\n this._m = 0.0\n } else if (arguments.length === 1) {\n if (arguments[0] instanceof CoordinateXYZM) {\n const coord = arguments[0]\n Coordinate.constructor_.call(this, coord)\n this._m = coord._m\n } else if (arguments[0] instanceof Coordinate) {\n const coord = arguments[0]\n Coordinate.constructor_.call(this, coord)\n this._m = this.getM()\n }\n } else if (arguments.length === 4) {\n const x = arguments[0], y = arguments[1], z = arguments[2], m = arguments[3]\n Coordinate.constructor_.call(this, x, y, z)\n this._m = m\n }\n }\n getM() {\n return this._m\n }\n setOrdinate(ordinateIndex, value) {\n switch (ordinateIndex) {\n case Coordinate.X:\n this.x = value\n break\n case Coordinate.Y:\n this.y = value\n break\n case Coordinate.Z:\n this.z = value\n break\n case Coordinate.M:\n this._m = value\n break\n default:\n throw new IllegalArgumentException('Invalid ordinate index: ' + ordinateIndex)\n }\n }\n setM(m) {\n this._m = m\n }\n getOrdinate(ordinateIndex) {\n switch (ordinateIndex) {\n case Coordinate.X:\n return this.x\n case Coordinate.Y:\n return this.y\n case Coordinate.Z:\n return this.getZ()\n case Coordinate.M:\n return this.getM()\n }\n throw new IllegalArgumentException('Invalid ordinate index: ' + ordinateIndex)\n }\n copy() {\n return new CoordinateXYZM(this)\n }\n toString() {\n return '(' + this.x + ', ' + this.y + ', ' + this.getZ() + ' m=' + this.getM() + ')'\n }\n setCoordinate(other) {\n this.x = other.x\n this.y = other.y\n this.z = other.getZ()\n this._m = other.getM()\n }\n}\n","export default function(o, i) {\n return o.interfaces_ && o.interfaces_.indexOf(i) > -1\n}\n","/**\n * @see http://download.oracle.com/javase/6/docs/api/java/util/Collection.html\n */\nexport default class Collection {\n /**\n * Ensures that this collection contains the specified element (optional\n * operation).\n * @param {Object} e\n * @return {boolean}\n */\n add() { }\n /**\n * Appends all of the elements in the specified collection to the end of this\n * list, in the order that they are returned by the specified collection's\n * iterator (optional operation).\n * @param {javascript.util.Collection} c\n * @return {boolean}\n */\n addAll() { }\n /**\n * Returns true if this collection contains no elements.\n * @return {boolean}\n */\n isEmpty() { }\n /**\n * Returns an iterator over the elements in this collection.\n * @return {javascript.util.Iterator}\n */\n iterator() { }\n /**\n * Returns an iterator over the elements in this collection.\n * @return {number}\n */\n size() { }\n /**\n * Returns an array containing all of the elements in this collection.\n * @return {Array}\n */\n toArray() { }\n /**\n * Removes a single instance of the specified element from this collection if it\n * is present. (optional)\n * @param {Object} e\n * @return {boolean}\n */\n remove() { }\n}\n","import Exception from './Exception'\n\nexport default class IndexOutOfBoundsException extends Exception {\n constructor(message) {\n super(message)\n this.name = Object.keys({ IndexOutOfBoundsException })[0]\n } \n}","import Collection from './Collection'\n\n/**\n * @see http://download.oracle.com/javase/6/docs/api/java/util/List.html\n */\nexport default class List extends Collection {\n /**\n * Returns the element at the specified position in this list.\n * @param {number} index\n * @return {Object}\n */\n get() { }\n /**\n * Replaces the element at the specified position in this list with the\n * specified element (optional operation).\n * @param {number} index\n * @param {Object} e\n * @return {Object}\n */\n set() { }\n /**\n * Returns true if this collection contains no elements.\n * @return {boolean}\n */\n isEmpty() { }\n}\n","import Exception from '../lang/Exception'\n\nexport default class NoSuchElementException extends Exception {\n constructor(message) {\n super(message)\n this.name = Object.keys({ NoSuchElementException })[0]\n }\n}","import Collection from './Collection'\nimport IndexOutOfBoundsException from '../lang/IndexOutOfBoundsException'\nimport List from './List'\nimport NoSuchElementException from './NoSuchElementException'\n\n/**\n * @see http://download.oracle.com/javase/6/docs/api/java/util/ArrayList.html\n */\nexport default class ArrayList extends List {\n\n constructor(o) {\n super()\n this.array = []\n if (o instanceof Collection) this.addAll(o)\n }\n\n get interfaces_() {\n return [List, Collection]\n }\n\n ensureCapacity() { }\n\n add(e) {\n if (arguments.length === 1)\n this.array.push(e)\n else\n this.array.splice(arguments[0], 0, arguments[1])\n return true\n }\n\n clear() {\n this.array = []\n }\n\n addAll(c) {\n for (const e of c)\n this.array.push(e)\n }\n\n set(index, element) {\n const oldElement = this.array[index]\n this.array[index] = element\n return oldElement\n }\n\n iterator() {\n return new Iterator(this)\n }\n\n get(index) {\n if (index < 0 || index >= this.size())\n throw new IndexOutOfBoundsException()\n return this.array[index]\n }\n\n isEmpty() {\n return this.array.length === 0\n }\n\n sort(comparator) {\n if (comparator)\n this.array.sort((a, b) => comparator.compare(a, b))\n else this.array.sort()\n }\n\n size() {\n return this.array.length\n }\n\n toArray() {\n return this.array.slice()\n }\n\n remove(o) {\n for (let i = 0, len = this.array.length; i < len; i++)\n if (this.array[i] === o)\n return !!this.array.splice(i, 1)\n return false\n }\n\n [Symbol.iterator]() {\n return this.array.values()\n }\n}\n\nclass Iterator {\n constructor(arrayList) {\n this.arrayList = arrayList\n this.position = 0\n }\n\n next() {\n if (this.position === this.arrayList.size())\n throw new NoSuchElementException()\n return this.arrayList.get(this.position++)\n }\n\n hasNext() {\n return this.position < this.arrayList.size()\n }\n\n set(element) {\n return this.arrayList.set(this.position - 1, element)\n }\n\n remove() {\n this.arrayList.remove(this.arrayList.get(this.position))\n }\n}\n","import hasInterface from '../../../../hasInterface'\nimport Collection from '../../../../java/util/Collection'\nimport Coordinate from './Coordinate'\nimport ArrayList from '../../../../java/util/ArrayList'\nexport default class CoordinateList extends ArrayList {\n constructor() {\n super()\n CoordinateList.constructor_.apply(this, arguments)\n }\n static constructor_() {\n if (arguments.length === 0) {} else if (arguments.length === 1) {\n const coord = arguments[0]\n this.ensureCapacity(coord.length)\n this.add(coord, true)\n } else if (arguments.length === 2) {\n const coord = arguments[0], allowRepeated = arguments[1]\n this.ensureCapacity(coord.length)\n this.add(coord, allowRepeated)\n }\n }\n getCoordinate(i) {\n return this.get(i)\n }\n addAll() {\n if (arguments.length === 2 && (typeof arguments[1] === 'boolean' && hasInterface(arguments[0], Collection))) {\n const coll = arguments[0], allowRepeated = arguments[1]\n let isChanged = false\n for (let i = coll.iterator(); i.hasNext(); ) {\n this.add(i.next(), allowRepeated)\n isChanged = true\n }\n return isChanged\n } else {\n return super.addAll.apply(this, arguments)\n }\n }\n clone() {\n const clone = super.clone.call(this)\n for (let i = 0; i < this.size(); i++) \n clone.add(i, this.get(i).clone())\n \n return clone\n }\n toCoordinateArray() {\n if (arguments.length === 0) {\n return this.toArray(CoordinateList.coordArrayType)\n } else if (arguments.length === 1) {\n const isForward = arguments[0]\n if (isForward) \n return this.toArray(CoordinateList.coordArrayType)\n \n const size = this.size()\n const pts = new Array(size).fill(null)\n for (let i = 0; i < size; i++) \n pts[i] = this.get(size - i - 1)\n \n return pts\n }\n }\n add() {\n if (arguments.length === 1) {\n const coord = arguments[0]\n return super.add.call(this, coord)\n } else if (arguments.length === 2) {\n if (arguments[0] instanceof Array && typeof arguments[1] === 'boolean') {\n const coord = arguments[0], allowRepeated = arguments[1]\n this.add(coord, allowRepeated, true)\n return true\n } else if (arguments[0] instanceof Coordinate && typeof arguments[1] === 'boolean') {\n const coord = arguments[0], allowRepeated = arguments[1]\n if (!allowRepeated) \n if (this.size() >= 1) {\n const last = this.get(this.size() - 1)\n if (last.equals2D(coord)) return null\n }\n \n super.add.call(this, coord)\n } else if (arguments[0] instanceof Object && typeof arguments[1] === 'boolean') {\n const obj = arguments[0], allowRepeated = arguments[1]\n this.add(obj, allowRepeated)\n return true\n }\n } else if (arguments.length === 3) {\n if (typeof arguments[2] === 'boolean' && (arguments[0] instanceof Array && typeof arguments[1] === 'boolean')) {\n const coord = arguments[0], allowRepeated = arguments[1], direction = arguments[2]\n if (direction) \n for (let i = 0; i < coord.length; i++) \n this.add(coord[i], allowRepeated)\n \n else \n for (let i = coord.length - 1; i >= 0; i--) \n this.add(coord[i], allowRepeated)\n \n \n return true\n } else if (typeof arguments[2] === 'boolean' && (Number.isInteger(arguments[0]) && arguments[1] instanceof Coordinate)) {\n const i = arguments[0], coord = arguments[1], allowRepeated = arguments[2]\n if (!allowRepeated) {\n const size = this.size()\n if (size > 0) {\n if (i > 0) {\n const prev = this.get(i - 1)\n if (prev.equals2D(coord)) return null\n }\n if (i < size) {\n const next = this.get(i)\n if (next.equals2D(coord)) return null\n }\n }\n }\n super.add.call(this, i, coord)\n }\n } else if (arguments.length === 4) {\n const coord = arguments[0], allowRepeated = arguments[1], start = arguments[2], end = arguments[3]\n let inc = 1\n if (start > end) inc = -1\n for (let i = start; i !== end; i += inc) \n this.add(coord[i], allowRepeated)\n \n return true\n }\n }\n closeRing() {\n if (this.size() > 0) {\n const duplicate = this.get(0).copy()\n this.add(duplicate, false)\n }\n }\n}\nCoordinateList.coordArrayType = new Array(0).fill(null)\n","export default class CoordinateSequenceFilter {\n filter(seq, i) {}\n isDone() {}\n isGeometryChanged() {}\n}\n","import Coordinate from './Coordinate'\nimport Comparable from '../../../../java/lang/Comparable'\nimport Serializable from '../../../../java/io/Serializable'\nexport default class Envelope {\n constructor() {\n Envelope.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._minx = null\n this._maxx = null\n this._miny = null\n this._maxy = null\n if (arguments.length === 0) {\n this.init()\n } else if (arguments.length === 1) {\n if (arguments[0] instanceof Coordinate) {\n const p = arguments[0]\n this.init(p.x, p.x, p.y, p.y)\n } else if (arguments[0] instanceof Envelope) {\n const env = arguments[0]\n this.init(env)\n }\n } else if (arguments.length === 2) {\n const p1 = arguments[0], p2 = arguments[1]\n this.init(p1.x, p2.x, p1.y, p2.y)\n } else if (arguments.length === 4) {\n const x1 = arguments[0], x2 = arguments[1], y1 = arguments[2], y2 = arguments[3]\n this.init(x1, x2, y1, y2)\n }\n }\n static intersects() {\n if (arguments.length === 3) {\n const p1 = arguments[0], p2 = arguments[1], q = arguments[2]\n if (q.x >= (p1.x < p2.x ? p1.x : p2.x) && q.x <= (p1.x > p2.x ? p1.x : p2.x) && (q.y >= (p1.y < p2.y ? p1.y : p2.y) && q.y <= (p1.y > p2.y ? p1.y : p2.y))) \n return true\n \n return false\n } else if (arguments.length === 4) {\n const p1 = arguments[0], p2 = arguments[1], q1 = arguments[2], q2 = arguments[3]\n let minq = Math.min(q1.x, q2.x)\n let maxq = Math.max(q1.x, q2.x)\n let minp = Math.min(p1.x, p2.x)\n let maxp = Math.max(p1.x, p2.x)\n if (minp > maxq) return false\n if (maxp < minq) return false\n minq = Math.min(q1.y, q2.y)\n maxq = Math.max(q1.y, q2.y)\n minp = Math.min(p1.y, p2.y)\n maxp = Math.max(p1.y, p2.y)\n if (minp > maxq) return false\n if (maxp < minq) return false\n return true\n }\n }\n getArea() {\n return this.getWidth() * this.getHeight()\n }\n equals(other) {\n if (!(other instanceof Envelope)) \n return false\n \n const otherEnvelope = other\n if (this.isNull()) \n return otherEnvelope.isNull()\n \n return this._maxx === otherEnvelope.getMaxX() && this._maxy === otherEnvelope.getMaxY() && this._minx === otherEnvelope.getMinX() && this._miny === otherEnvelope.getMinY()\n }\n intersection(env) {\n if (this.isNull() || env.isNull() || !this.intersects(env)) return new Envelope()\n const intMinX = this._minx > env._minx ? this._minx : env._minx\n const intMinY = this._miny > env._miny ? this._miny : env._miny\n const intMaxX = this._maxx < env._maxx ? this._maxx : env._maxx\n const intMaxY = this._maxy < env._maxy ? this._maxy : env._maxy\n return new Envelope(intMinX, intMaxX, intMinY, intMaxY)\n }\n isNull() {\n return this._maxx < this._minx\n }\n getMaxX() {\n return this._maxx\n }\n covers() {\n if (arguments.length === 1) {\n if (arguments[0] instanceof Coordinate) {\n const p = arguments[0]\n return this.covers(p.x, p.y)\n } else if (arguments[0] instanceof Envelope) {\n const other = arguments[0]\n if (this.isNull() || other.isNull()) \n return false\n \n return other.getMinX() >= this._minx && other.getMaxX() <= this._maxx && other.getMinY() >= this._miny && other.getMaxY() <= this._maxy\n }\n } else if (arguments.length === 2) {\n const x = arguments[0], y = arguments[1]\n if (this.isNull()) return false\n return x >= this._minx && x <= this._maxx && y >= this._miny && y <= this._maxy\n }\n }\n intersects() {\n if (arguments.length === 1) {\n if (arguments[0] instanceof Envelope) {\n const other = arguments[0]\n if (this.isNull() || other.isNull()) \n return false\n \n return !(other._minx > this._maxx || other._maxx < this._minx || other._miny > this._maxy || other._maxy < this._miny)\n } else if (arguments[0] instanceof Coordinate) {\n const p = arguments[0]\n return this.intersects(p.x, p.y)\n }\n } else if (arguments.length === 2) {\n if (arguments[0] instanceof Coordinate && arguments[1] instanceof Coordinate) {\n const a = arguments[0], b = arguments[1]\n if (this.isNull()) \n return false\n \n const envminx = a.x < b.x ? a.x : b.x\n if (envminx > this._maxx) return false\n const envmaxx = a.x > b.x ? a.x : b.x\n if (envmaxx < this._minx) return false\n const envminy = a.y < b.y ? a.y : b.y\n if (envminy > this._maxy) return false\n const envmaxy = a.y > b.y ? a.y : b.y\n if (envmaxy < this._miny) return false\n return true\n } else if (typeof arguments[0] === 'number' && typeof arguments[1] === 'number') {\n const x = arguments[0], y = arguments[1]\n if (this.isNull()) return false\n return !(x > this._maxx || x < this._minx || y > this._maxy || y < this._miny)\n }\n }\n }\n getMinY() {\n return this._miny\n }\n getDiameter() {\n if (this.isNull()) \n return 0\n \n const w = this.getWidth()\n const h = this.getHeight()\n return Math.sqrt(w * w + h * h)\n }\n getMinX() {\n return this._minx\n }\n expandToInclude() {\n if (arguments.length === 1) {\n if (arguments[0] instanceof Coordinate) {\n const p = arguments[0]\n this.expandToInclude(p.x, p.y)\n } else if (arguments[0] instanceof Envelope) {\n const other = arguments[0]\n if (other.isNull()) \n return null\n \n if (this.isNull()) {\n this._minx = other.getMinX()\n this._maxx = other.getMaxX()\n this._miny = other.getMinY()\n this._maxy = other.getMaxY()\n } else {\n if (other._minx < this._minx) \n this._minx = other._minx\n \n if (other._maxx > this._maxx) \n this._maxx = other._maxx\n \n if (other._miny < this._miny) \n this._miny = other._miny\n \n if (other._maxy > this._maxy) \n this._maxy = other._maxy\n \n }\n }\n } else if (arguments.length === 2) {\n const x = arguments[0], y = arguments[1]\n if (this.isNull()) {\n this._minx = x\n this._maxx = x\n this._miny = y\n this._maxy = y\n } else {\n if (x < this._minx) \n this._minx = x\n \n if (x > this._maxx) \n this._maxx = x\n \n if (y < this._miny) \n this._miny = y\n \n if (y > this._maxy) \n this._maxy = y\n \n }\n }\n }\n minExtent() {\n if (this.isNull()) return 0.0\n const w = this.getWidth()\n const h = this.getHeight()\n if (w < h) return w\n return h\n }\n getWidth() {\n if (this.isNull()) \n return 0\n \n return this._maxx - this._minx\n }\n compareTo(o) {\n const env = o\n if (this.isNull()) {\n if (env.isNull()) return 0\n return -1\n } else {\n if (env.isNull()) return 1\n }\n if (this._minx < env._minx) return -1\n if (this._minx > env._minx) return 1\n if (this._miny < env._miny) return -1\n if (this._miny > env._miny) return 1\n if (this._maxx < env._maxx) return -1\n if (this._maxx > env._maxx) return 1\n if (this._maxy < env._maxy) return -1\n if (this._maxy > env._maxy) return 1\n return 0\n }\n translate(transX, transY) {\n if (this.isNull()) \n return null\n \n this.init(this.getMinX() + transX, this.getMaxX() + transX, this.getMinY() + transY, this.getMaxY() + transY)\n }\n copy() {\n return new Envelope(this)\n }\n toString() {\n return 'Env[' + this._minx + ' : ' + this._maxx + ', ' + this._miny + ' : ' + this._maxy + ']'\n }\n setToNull() {\n this._minx = 0\n this._maxx = -1\n this._miny = 0\n this._maxy = -1\n }\n disjoint(other) {\n if (this.isNull() || other.isNull()) \n return true\n \n return other._minx > this._maxx || other._maxx < this._minx || other._miny > this._maxy || other._maxy < this._miny\n }\n getHeight() {\n if (this.isNull()) \n return 0\n \n return this._maxy - this._miny\n }\n maxExtent() {\n if (this.isNull()) return 0.0\n const w = this.getWidth()\n const h = this.getHeight()\n if (w > h) return w\n return h\n }\n expandBy() {\n if (arguments.length === 1) {\n const distance = arguments[0]\n this.expandBy(distance, distance)\n } else if (arguments.length === 2) {\n const deltaX = arguments[0], deltaY = arguments[1]\n if (this.isNull()) return null\n this._minx -= deltaX\n this._maxx += deltaX\n this._miny -= deltaY\n this._maxy += deltaY\n if (this._minx > this._maxx || this._miny > this._maxy) this.setToNull()\n }\n }\n contains() {\n if (arguments.length === 1) {\n if (arguments[0] instanceof Envelope) {\n const other = arguments[0]\n return this.covers(other)\n } else if (arguments[0] instanceof Coordinate) {\n const p = arguments[0]\n return this.covers(p)\n }\n } else if (arguments.length === 2) {\n const x = arguments[0], y = arguments[1]\n return this.covers(x, y)\n }\n }\n centre() {\n if (this.isNull()) return null\n return new Coordinate((this.getMinX() + this.getMaxX()) / 2.0, (this.getMinY() + this.getMaxY()) / 2.0)\n }\n init() {\n if (arguments.length === 0) {\n this.setToNull()\n } else if (arguments.length === 1) {\n if (arguments[0] instanceof Coordinate) {\n const p = arguments[0]\n this.init(p.x, p.x, p.y, p.y)\n } else if (arguments[0] instanceof Envelope) {\n const env = arguments[0]\n this._minx = env._minx\n this._maxx = env._maxx\n this._miny = env._miny\n this._maxy = env._maxy\n }\n } else if (arguments.length === 2) {\n const p1 = arguments[0], p2 = arguments[1]\n this.init(p1.x, p2.x, p1.y, p2.y)\n } else if (arguments.length === 4) {\n const x1 = arguments[0], x2 = arguments[1], y1 = arguments[2], y2 = arguments[3]\n if (x1 < x2) {\n this._minx = x1\n this._maxx = x2\n } else {\n this._minx = x2\n this._maxx = x1\n }\n if (y1 < y2) {\n this._miny = y1\n this._maxy = y2\n } else {\n this._miny = y2\n this._maxy = y1\n }\n }\n }\n getMaxY() {\n return this._maxy\n }\n distance(env) {\n if (this.intersects(env)) return 0\n let dx = 0.0\n if (this._maxx < env._minx) dx = env._minx - this._maxx; else if (this._minx > env._maxx) dx = this._minx - env._maxx\n let dy = 0.0\n if (this._maxy < env._miny) dy = env._miny - this._maxy; else if (this._miny > env._maxy) dy = this._miny - env._maxy\n if (dx === 0.0) return dy\n if (dy === 0.0) return dx\n return Math.sqrt(dx * dx + dy * dy)\n }\n hashCode() {\n let result = 17\n result = 37 * result + Coordinate.hashCode(this._minx)\n result = 37 * result + Coordinate.hashCode(this._maxx)\n result = 37 * result + Coordinate.hashCode(this._miny)\n result = 37 * result + Coordinate.hashCode(this._maxy)\n return result\n }\n get interfaces_() {\n return [Comparable, Serializable]\n }\n}\n","export default class StringBuffer {\n constructor(str) {\n this.str = str\n }\n append(e) {\n this.str += e\n }\n setCharAt(i, c) {\n this.str = this.str.substr(0, i) + c + this.str.substr(i + 1)\n }\n toString() {\n return this.str\n }\n}","export default class Integer {\n constructor(value) {\n this.value = value\n }\n\n intValue() {\n return this.value\n }\n\n compareTo(o) {\n if (this.value < o)\n return -1\n if (this.value > o)\n return 1\n return 0\n }\n\n static compare(x, y) {\n if (x < y)\n return -1\n if (x > y)\n return 1\n return 0\n }\n\n static isNan(n) {\n return Number.isNaN(n)\n }\n\n static valueOf(value) {\n return new Integer(value)\n }\n}\n","export default class Character {\n static isWhitespace(c) {\n return ((c <= 32 && c >= 0) || c === 127)\n }\n\n static toUpperCase(c) {\n return c.toUpperCase()\n }\n}\n","import StringBuffer from '../../../../java/lang/StringBuffer'\nimport Double from '../../../../java/lang/Double'\nimport Integer from '../../../../java/lang/Integer'\nimport Character from '../../../../java/lang/Character'\nimport Comparable from '../../../../java/lang/Comparable'\nimport Cloneable from '../../../../java/lang/Cloneable'\nimport Serializable from '../../../../java/io/Serializable'\nexport default class DD {\n constructor() {\n DD.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._hi = 0.0\n this._lo = 0.0\n if (arguments.length === 0) {\n this.init(0.0)\n } else if (arguments.length === 1) {\n if (typeof arguments[0] === 'number') {\n const x = arguments[0]\n this.init(x)\n } else if (arguments[0] instanceof DD) {\n const dd = arguments[0]\n this.init(dd)\n } else if (typeof arguments[0] === 'string') {\n const str = arguments[0]\n DD.constructor_.call(this, DD.parse(str))\n }\n } else if (arguments.length === 2) {\n const hi = arguments[0], lo = arguments[1]\n this.init(hi, lo)\n }\n }\n static determinant() {\n if (typeof arguments[3] === 'number' && (typeof arguments[2] === 'number' && (typeof arguments[0] === 'number' && typeof arguments[1] === 'number'))) {\n const x1 = arguments[0], y1 = arguments[1], x2 = arguments[2], y2 = arguments[3]\n return DD.determinant(DD.valueOf(x1), DD.valueOf(y1), DD.valueOf(x2), DD.valueOf(y2))\n } else if (arguments[3] instanceof DD && (arguments[2] instanceof DD && (arguments[0] instanceof DD && arguments[1] instanceof DD))) {\n const x1 = arguments[0], y1 = arguments[1], x2 = arguments[2], y2 = arguments[3]\n const det = x1.multiply(y2).selfSubtract(y1.multiply(x2))\n return det\n }\n }\n static sqr(x) {\n return DD.valueOf(x).selfMultiply(x)\n }\n static valueOf() {\n if (typeof arguments[0] === 'string') {\n const str = arguments[0]\n return DD.parse(str)\n } else if (typeof arguments[0] === 'number') {\n const x = arguments[0]\n return new DD(x)\n }\n }\n static sqrt(x) {\n return DD.valueOf(x).sqrt()\n }\n static parse(str) {\n let i = 0\n const strlen = str.length\n while (Character.isWhitespace(str.charAt(i))) i++\n let isNegative = false\n if (i < strlen) {\n const signCh = str.charAt(i)\n if (signCh === '-' || signCh === '+') {\n i++\n if (signCh === '-') isNegative = true\n }\n }\n const val = new DD()\n let numDigits = 0\n let numBeforeDec = 0\n let exp = 0\n let hasDecimalChar = false\n while (true) {\n if (i >= strlen) break\n const ch = str.charAt(i)\n i++\n if (Character.isDigit(ch)) {\n const d = ch - '0'\n val.selfMultiply(DD.TEN)\n val.selfAdd(d)\n numDigits++\n continue\n }\n if (ch === '.') {\n numBeforeDec = numDigits\n hasDecimalChar = true\n continue\n }\n if (ch === 'e' || ch === 'E') {\n const expStr = str.substring(i)\n try {\n exp = Integer.parseInt(expStr)\n } catch (ex) {\n if (ex instanceof NumberFormatException) \n throw new NumberFormatException('Invalid exponent ' + expStr + ' in string ' + str)\n else throw ex\n } finally {}\n break\n }\n throw new NumberFormatException('Unexpected character \\'' + ch + '\\' at position ' + i + ' in string ' + str)\n }\n let val2 = val\n if (!hasDecimalChar) numBeforeDec = numDigits\n const numDecPlaces = numDigits - numBeforeDec - exp\n if (numDecPlaces === 0) {\n val2 = val\n } else if (numDecPlaces > 0) {\n const scale = DD.TEN.pow(numDecPlaces)\n val2 = val.divide(scale)\n } else if (numDecPlaces < 0) {\n const scale = DD.TEN.pow(-numDecPlaces)\n val2 = val.multiply(scale)\n }\n if (isNegative) \n return val2.negate()\n \n return val2\n }\n static createNaN() {\n return new DD(Double.NaN, Double.NaN)\n }\n static copy(dd) {\n return new DD(dd)\n }\n static magnitude(x) {\n const xAbs = Math.abs(x)\n const xLog10 = Math.log(xAbs) / Math.log(10)\n let xMag = Math.trunc(Math.floor(xLog10))\n const xApprox = Math.pow(10, xMag)\n if (xApprox * 10 <= xAbs) xMag += 1\n return xMag\n }\n static stringOfChar(ch, len) {\n const buf = new StringBuffer()\n for (let i = 0; i < len; i++) \n buf.append(ch)\n \n return buf.toString()\n }\n le(y) {\n return this._hi < y._hi || this._hi === y._hi && this._lo <= y._lo\n }\n extractSignificantDigits(insertDecimalPoint, magnitude) {\n let y = this.abs()\n let mag = DD.magnitude(y._hi)\n const scale = DD.TEN.pow(mag)\n y = y.divide(scale)\n if (y.gt(DD.TEN)) {\n y = y.divide(DD.TEN)\n mag += 1\n } else if (y.lt(DD.ONE)) {\n y = y.multiply(DD.TEN)\n mag -= 1\n }\n const decimalPointPos = mag + 1\n const buf = new StringBuffer()\n const numDigits = DD.MAX_PRINT_DIGITS - 1\n for (let i = 0; i <= numDigits; i++) {\n if (insertDecimalPoint && i === decimalPointPos) \n buf.append('.')\n \n const digit = Math.trunc(y._hi)\n if (digit < 0 || digit > 9) {}\n if (digit < 0) \n break\n \n let rebiasBy10 = false\n let digitChar = 0\n if (digit > 9) {\n rebiasBy10 = true\n digitChar = '9'\n } else {\n digitChar = '0' + digit\n }\n buf.append(digitChar)\n y = y.subtract(DD.valueOf(digit)).multiply(DD.TEN)\n if (rebiasBy10) y.selfAdd(DD.TEN)\n let continueExtractingDigits = true\n const remMag = DD.magnitude(y._hi)\n if (remMag < 0 && Math.abs(remMag) >= numDigits - i) continueExtractingDigits = false\n if (!continueExtractingDigits) break\n }\n magnitude[0] = mag\n return buf.toString()\n }\n sqr() {\n return this.multiply(this)\n }\n doubleValue() {\n return this._hi + this._lo\n }\n subtract() {\n if (arguments[0] instanceof DD) {\n const y = arguments[0]\n return this.add(y.negate())\n } else if (typeof arguments[0] === 'number') {\n const y = arguments[0]\n return this.add(-y)\n }\n }\n equals() {\n if (arguments.length === 1 && arguments[0] instanceof DD) {\n const y = arguments[0]\n return this._hi === y._hi && this._lo === y._lo\n }\n }\n isZero() {\n return this._hi === 0.0 && this._lo === 0.0\n }\n selfSubtract() {\n if (arguments[0] instanceof DD) {\n const y = arguments[0]\n if (this.isNaN()) return this\n return this.selfAdd(-y._hi, -y._lo)\n } else if (typeof arguments[0] === 'number') {\n const y = arguments[0]\n if (this.isNaN()) return this\n return this.selfAdd(-y, 0.0)\n }\n }\n getSpecialNumberString() {\n if (this.isZero()) return '0.0'\n if (this.isNaN()) return 'NaN '\n return null\n }\n min(x) {\n if (this.le(x)) \n return this\n else \n return x\n \n }\n selfDivide() {\n if (arguments.length === 1) {\n if (arguments[0] instanceof DD) {\n const y = arguments[0]\n return this.selfDivide(y._hi, y._lo)\n } else if (typeof arguments[0] === 'number') {\n const y = arguments[0]\n return this.selfDivide(y, 0.0)\n }\n } else if (arguments.length === 2) {\n const yhi = arguments[0], ylo = arguments[1]\n let hc = null, tc = null, hy = null, ty = null, C = null, c = null, U = null, u = null\n C = this._hi / yhi\n c = DD.SPLIT * C\n hc = c - C\n u = DD.SPLIT * yhi\n hc = c - hc\n tc = C - hc\n hy = u - yhi\n U = C * yhi\n hy = u - hy\n ty = yhi - hy\n u = hc * hy - U + hc * ty + tc * hy + tc * ty\n c = (this._hi - U - u + this._lo - C * ylo) / yhi\n u = C + c\n this._hi = u\n this._lo = C - u + c\n return this\n }\n }\n dump() {\n return 'DD<' + this._hi + ', ' + this._lo + '>'\n }\n divide() {\n if (arguments[0] instanceof DD) {\n const y = arguments[0]\n let hc = null, tc = null, hy = null, ty = null, C = null, c = null, U = null, u = null\n C = this._hi / y._hi\n c = DD.SPLIT * C\n hc = c - C\n u = DD.SPLIT * y._hi\n hc = c - hc\n tc = C - hc\n hy = u - y._hi\n U = C * y._hi\n hy = u - hy\n ty = y._hi - hy\n u = hc * hy - U + hc * ty + tc * hy + tc * ty\n c = (this._hi - U - u + this._lo - C * y._lo) / y._hi\n u = C + c\n const zhi = u\n const zlo = C - u + c\n return new DD(zhi, zlo)\n } else if (typeof arguments[0] === 'number') {\n const y = arguments[0]\n if (Double.isNaN(y)) return DD.createNaN()\n return DD.copy(this).selfDivide(y, 0.0)\n }\n }\n ge(y) {\n return this._hi > y._hi || this._hi === y._hi && this._lo >= y._lo\n }\n pow(exp) {\n if (exp === 0.0) return DD.valueOf(1.0)\n let r = new DD(this)\n let s = DD.valueOf(1.0)\n let n = Math.abs(exp)\n if (n > 1) \n while (n > 0) {\n if (n % 2 === 1) \n s.selfMultiply(r)\n \n n /= 2\n if (n > 0) r = r.sqr()\n }\n else \n s = r\n \n if (exp < 0) return s.reciprocal()\n return s\n }\n ceil() {\n if (this.isNaN()) return DD.NaN\n const fhi = Math.ceil(this._hi)\n let flo = 0.0\n if (fhi === this._hi) \n flo = Math.ceil(this._lo)\n \n return new DD(fhi, flo)\n }\n compareTo(o) {\n const other = o\n if (this._hi < other._hi) return -1\n if (this._hi > other._hi) return 1\n if (this._lo < other._lo) return -1\n if (this._lo > other._lo) return 1\n return 0\n }\n rint() {\n if (this.isNaN()) return this\n const plus5 = this.add(0.5)\n return plus5.floor()\n }\n setValue() {\n if (arguments[0] instanceof DD) {\n const value = arguments[0]\n this.init(value)\n return this\n } else if (typeof arguments[0] === 'number') {\n const value = arguments[0]\n this.init(value)\n return this\n }\n }\n max(x) {\n if (this.ge(x)) \n return this\n else \n return x\n \n }\n sqrt() {\n if (this.isZero()) return DD.valueOf(0.0)\n if (this.isNegative()) \n return DD.NaN\n \n const x = 1.0 / Math.sqrt(this._hi)\n const ax = this._hi * x\n const axdd = DD.valueOf(ax)\n const diffSq = this.subtract(axdd.sqr())\n const d2 = diffSq._hi * (x * 0.5)\n return axdd.add(d2)\n }\n selfAdd() {\n if (arguments.length === 1) {\n if (arguments[0] instanceof DD) {\n const y = arguments[0]\n return this.selfAdd(y._hi, y._lo)\n } else if (typeof arguments[0] === 'number') {\n const y = arguments[0]\n let H = null, h = null, S = null, s = null, e = null, f = null\n S = this._hi + y\n e = S - this._hi\n s = S - e\n s = y - e + (this._hi - s)\n f = s + this._lo\n H = S + f\n h = f + (S - H)\n this._hi = H + h\n this._lo = h + (H - this._hi)\n return this\n }\n } else if (arguments.length === 2) {\n const yhi = arguments[0], ylo = arguments[1]\n let H = null, h = null, T = null, t = null, S = null, s = null, e = null, f = null\n S = this._hi + yhi\n T = this._lo + ylo\n e = S - this._hi\n f = T - this._lo\n s = S - e\n t = T - f\n s = yhi - e + (this._hi - s)\n t = ylo - f + (this._lo - t)\n e = s + T\n H = S + e\n h = e + (S - H)\n e = t + h\n const zhi = H + e\n const zlo = e + (H - zhi)\n this._hi = zhi\n this._lo = zlo\n return this\n }\n }\n selfMultiply() {\n if (arguments.length === 1) {\n if (arguments[0] instanceof DD) {\n const y = arguments[0]\n return this.selfMultiply(y._hi, y._lo)\n } else if (typeof arguments[0] === 'number') {\n const y = arguments[0]\n return this.selfMultiply(y, 0.0)\n }\n } else if (arguments.length === 2) {\n const yhi = arguments[0], ylo = arguments[1]\n let hx = null, tx = null, hy = null, ty = null, C = null, c = null\n C = DD.SPLIT * this._hi\n hx = C - this._hi\n c = DD.SPLIT * yhi\n hx = C - hx\n tx = this._hi - hx\n hy = c - yhi\n C = this._hi * yhi\n hy = c - hy\n ty = yhi - hy\n c = hx * hy - C + hx * ty + tx * hy + tx * ty + (this._hi * ylo + this._lo * yhi)\n const zhi = C + c\n hx = C - zhi\n const zlo = c + hx\n this._hi = zhi\n this._lo = zlo\n return this\n }\n }\n selfSqr() {\n return this.selfMultiply(this)\n }\n floor() {\n if (this.isNaN()) return DD.NaN\n const fhi = Math.floor(this._hi)\n let flo = 0.0\n if (fhi === this._hi) \n flo = Math.floor(this._lo)\n \n return new DD(fhi, flo)\n }\n negate() {\n if (this.isNaN()) return this\n return new DD(-this._hi, -this._lo)\n }\n clone() {\n try {\n return null\n } catch (ex) {\n if (ex instanceof CloneNotSupportedException) \n return null\n else throw ex\n } finally {}\n }\n multiply() {\n if (arguments[0] instanceof DD) {\n const y = arguments[0]\n if (y.isNaN()) return DD.createNaN()\n return DD.copy(this).selfMultiply(y)\n } else if (typeof arguments[0] === 'number') {\n const y = arguments[0]\n if (Double.isNaN(y)) return DD.createNaN()\n return DD.copy(this).selfMultiply(y, 0.0)\n }\n }\n isNaN() {\n return Double.isNaN(this._hi)\n }\n intValue() {\n return Math.trunc(this._hi)\n }\n toString() {\n const mag = DD.magnitude(this._hi)\n if (mag >= -3 && mag <= 20) return this.toStandardNotation()\n return this.toSciNotation()\n }\n toStandardNotation() {\n const specialStr = this.getSpecialNumberString()\n if (specialStr !== null) return specialStr\n const magnitude = new Array(1).fill(null)\n const sigDigits = this.extractSignificantDigits(true, magnitude)\n const decimalPointPos = magnitude[0] + 1\n let num = sigDigits\n if (sigDigits.charAt(0) === '.') {\n num = '0' + sigDigits\n } else if (decimalPointPos < 0) {\n num = '0.' + DD.stringOfChar('0', -decimalPointPos) + sigDigits\n } else if (sigDigits.indexOf('.') === -1) {\n const numZeroes = decimalPointPos - sigDigits.length\n const zeroes = DD.stringOfChar('0', numZeroes)\n num = sigDigits + zeroes + '.0'\n }\n if (this.isNegative()) return '-' + num\n return num\n }\n reciprocal() {\n let hc = null, tc = null, hy = null, ty = null, C = null, c = null, U = null, u = null\n C = 1.0 / this._hi\n c = DD.SPLIT * C\n hc = c - C\n u = DD.SPLIT * this._hi\n hc = c - hc\n tc = C - hc\n hy = u - this._hi\n U = C * this._hi\n hy = u - hy\n ty = this._hi - hy\n u = hc * hy - U + hc * ty + tc * hy + tc * ty\n c = (1.0 - U - u - C * this._lo) / this._hi\n const zhi = C + c\n const zlo = C - zhi + c\n return new DD(zhi, zlo)\n }\n toSciNotation() {\n if (this.isZero()) return DD.SCI_NOT_ZERO\n const specialStr = this.getSpecialNumberString()\n if (specialStr !== null) return specialStr\n const magnitude = new Array(1).fill(null)\n const digits = this.extractSignificantDigits(false, magnitude)\n const expStr = DD.SCI_NOT_EXPONENT_CHAR + magnitude[0]\n if (digits.charAt(0) === '0') \n throw new IllegalStateException('Found leading zero: ' + digits)\n \n let trailingDigits = ''\n if (digits.length > 1) trailingDigits = digits.substring(1)\n const digitsWithDecimal = digits.charAt(0) + '.' + trailingDigits\n if (this.isNegative()) return '-' + digitsWithDecimal + expStr\n return digitsWithDecimal + expStr\n }\n abs() {\n if (this.isNaN()) return DD.NaN\n if (this.isNegative()) return this.negate()\n return new DD(this)\n }\n isPositive() {\n return this._hi > 0.0 || this._hi === 0.0 && this._lo > 0.0\n }\n lt(y) {\n return this._hi < y._hi || this._hi === y._hi && this._lo < y._lo\n }\n add() {\n if (arguments[0] instanceof DD) {\n const y = arguments[0]\n return DD.copy(this).selfAdd(y)\n } else if (typeof arguments[0] === 'number') {\n const y = arguments[0]\n return DD.copy(this).selfAdd(y)\n }\n }\n init() {\n if (arguments.length === 1) {\n if (typeof arguments[0] === 'number') {\n const x = arguments[0]\n this._hi = x\n this._lo = 0.0\n } else if (arguments[0] instanceof DD) {\n const dd = arguments[0]\n this._hi = dd._hi\n this._lo = dd._lo\n }\n } else if (arguments.length === 2) {\n const hi = arguments[0], lo = arguments[1]\n this._hi = hi\n this._lo = lo\n }\n }\n gt(y) {\n return this._hi > y._hi || this._hi === y._hi && this._lo > y._lo\n }\n isNegative() {\n return this._hi < 0.0 || this._hi === 0.0 && this._lo < 0.0\n }\n trunc() {\n if (this.isNaN()) return DD.NaN\n if (this.isPositive()) return this.floor(); else return this.ceil()\n }\n signum() {\n if (this._hi > 0) return 1\n if (this._hi < 0) return -1\n if (this._lo > 0) return 1\n if (this._lo < 0) return -1\n return 0\n }\n get interfaces_() {\n return [Serializable, Comparable, Cloneable]\n }\n}\nDD.PI = new DD(3.141592653589793116e+00, 1.224646799147353207e-16)\nDD.TWO_PI = new DD(6.283185307179586232e+00, 2.449293598294706414e-16)\nDD.PI_2 = new DD(1.570796326794896558e+00, 6.123233995736766036e-17)\nDD.E = new DD(2.718281828459045091e+00, 1.445646891729250158e-16)\nDD.NaN = new DD(Double.NaN, Double.NaN)\nDD.EPS = 1.23259516440783e-32\nDD.SPLIT = 134217729.0\nDD.MAX_PRINT_DIGITS = 32\nDD.TEN = DD.valueOf(10.0)\nDD.ONE = DD.valueOf(1.0)\nDD.SCI_NOT_EXPONENT_CHAR = 'E'\nDD.SCI_NOT_ZERO = '0.0E0'\n","import Coordinate from '../geom/Coordinate'\nimport Double from '../../../../java/lang/Double'\nimport DD from '../math/DD'\nexport default class CGAlgorithmsDD {\n static orientationIndex(p1, p2, q) {\n const index = CGAlgorithmsDD.orientationIndexFilter(p1, p2, q)\n if (index <= 1) return index\n const dx1 = DD.valueOf(p2.x).selfAdd(-p1.x)\n const dy1 = DD.valueOf(p2.y).selfAdd(-p1.y)\n const dx2 = DD.valueOf(q.x).selfAdd(-p2.x)\n const dy2 = DD.valueOf(q.y).selfAdd(-p2.y)\n return dx1.selfMultiply(dy2).selfSubtract(dy1.selfMultiply(dx2)).signum()\n }\n static signOfDet2x2() {\n if (arguments[3] instanceof DD && (arguments[2] instanceof DD && (arguments[0] instanceof DD && arguments[1] instanceof DD))) {\n const x1 = arguments[0], y1 = arguments[1], x2 = arguments[2], y2 = arguments[3]\n const det = x1.multiply(y2).selfSubtract(y1.multiply(x2))\n return det.signum()\n } else if (typeof arguments[3] === 'number' && (typeof arguments[2] === 'number' && (typeof arguments[0] === 'number' && typeof arguments[1] === 'number'))) {\n const dx1 = arguments[0], dy1 = arguments[1], dx2 = arguments[2], dy2 = arguments[3]\n const x1 = DD.valueOf(dx1)\n const y1 = DD.valueOf(dy1)\n const x2 = DD.valueOf(dx2)\n const y2 = DD.valueOf(dy2)\n const det = x1.multiply(y2).selfSubtract(y1.multiply(x2))\n return det.signum()\n }\n }\n static intersection(p1, p2, q1, q2) {\n const px = new DD(p1.y).selfSubtract(p2.y)\n const py = new DD(p2.x).selfSubtract(p1.x)\n const pw = new DD(p1.x).selfMultiply(p2.y).selfSubtract(new DD(p2.x).selfMultiply(p1.y))\n const qx = new DD(q1.y).selfSubtract(q2.y)\n const qy = new DD(q2.x).selfSubtract(q1.x)\n const qw = new DD(q1.x).selfMultiply(q2.y).selfSubtract(new DD(q2.x).selfMultiply(q1.y))\n const x = py.multiply(qw).selfSubtract(qy.multiply(pw))\n const y = qx.multiply(pw).selfSubtract(px.multiply(qw))\n const w = px.multiply(qy).selfSubtract(qx.multiply(py))\n const xInt = x.selfDivide(w).doubleValue()\n const yInt = y.selfDivide(w).doubleValue()\n if (Double.isNaN(xInt) || (Double.isInfinite(xInt) || Double.isNaN(yInt)) || Double.isInfinite(yInt)) \n return null\n \n return new Coordinate(xInt, yInt)\n }\n static orientationIndexFilter(pa, pb, pc) {\n let detsum = null\n const detleft = (pa.x - pc.x) * (pb.y - pc.y)\n const detright = (pa.y - pc.y) * (pb.x - pc.x)\n const det = detleft - detright\n if (detleft > 0.0) \n if (detright <= 0.0) \n return CGAlgorithmsDD.signum(det)\n else \n detsum = detleft + detright\n \n else if (detleft < 0.0) \n if (detright >= 0.0) \n return CGAlgorithmsDD.signum(det)\n else \n detsum = -detleft - detright\n \n else \n return CGAlgorithmsDD.signum(det)\n \n const errbound = CGAlgorithmsDD.DP_SAFE_EPSILON * detsum\n if (det >= errbound || -det >= errbound) \n return CGAlgorithmsDD.signum(det)\n \n return 2\n }\n static signum(x) {\n if (x > 0) return 1\n if (x < 0) return -1\n return 0\n }\n}\nCGAlgorithmsDD.DP_SAFE_EPSILON = 1e-15\n","import Double from '../../../../java/lang/Double'\nimport Cloneable from '../../../../java/lang/Cloneable'\nexport default class CoordinateSequence {\n getM(index) {\n if (this.hasM()) {\n const mIndex = this.getDimension() - this.getMeasures()\n return this.getOrdinate(index, mIndex)\n } else {\n return Double.NaN\n }\n }\n setOrdinate(index, ordinateIndex, value) {}\n getZ(index) {\n if (this.hasZ()) \n return this.getOrdinate(index, 2)\n else \n return Double.NaN\n \n }\n size() {}\n getOrdinate(index, ordinateIndex) {}\n getCoordinate() {\n if (arguments.length === 1) {\n const i = arguments[0]\n } else if (arguments.length === 2) {\n const index = arguments[0], coord = arguments[1]\n }\n }\n getCoordinateCopy(i) {}\n createCoordinate() {}\n getDimension() {}\n hasM() {\n return this.getMeasures() > 0\n }\n getX(index) {}\n hasZ() {\n return this.getDimension() - this.getMeasures() > 2\n }\n getMeasures() {\n return 0\n }\n expandEnvelope(env) {}\n copy() {}\n getY(index) {}\n toCoordinateArray() {}\n get interfaces_() {\n return [Cloneable]\n }\n}\nCoordinateSequence.X = 0\nCoordinateSequence.Y = 1\nCoordinateSequence.Z = 2\nCoordinateSequence.M = 3\n","import hasInterface from '../../../../hasInterface'\nimport IllegalArgumentException from '../../../../java/lang/IllegalArgumentException'\nimport CGAlgorithmsDD from './CGAlgorithmsDD'\nimport CoordinateSequence from '../geom/CoordinateSequence'\nexport default class Orientation {\n static index(p1, p2, q) {\n return CGAlgorithmsDD.orientationIndex(p1, p2, q)\n }\n static isCCW() {\n if (arguments[0] instanceof Array) {\n const ring = arguments[0]\n const nPts = ring.length - 1\n if (nPts < 3) throw new IllegalArgumentException('Ring has fewer than 4 points, so orientation cannot be determined')\n let hiPt = ring[0]\n let hiIndex = 0\n for (let i = 1; i <= nPts; i++) {\n const p = ring[i]\n if (p.y > hiPt.y) {\n hiPt = p\n hiIndex = i\n }\n }\n let iPrev = hiIndex\n do {\n iPrev = iPrev - 1\n if (iPrev < 0) iPrev = nPts\n } while (ring[iPrev].equals2D(hiPt) && iPrev !== hiIndex)\n let iNext = hiIndex\n do \n iNext = (iNext + 1) % nPts\n while (ring[iNext].equals2D(hiPt) && iNext !== hiIndex)\n const prev = ring[iPrev]\n const next = ring[iNext]\n if (prev.equals2D(hiPt) || next.equals2D(hiPt) || prev.equals2D(next)) return false\n const disc = Orientation.index(prev, hiPt, next)\n let isCCW = null\n if (disc === 0) \n isCCW = prev.x > next.x\n else \n isCCW = disc > 0\n \n return isCCW\n } else if (hasInterface(arguments[0], CoordinateSequence)) {\n const ring = arguments[0]\n const nPts = ring.size() - 1\n if (nPts < 3) throw new IllegalArgumentException('Ring has fewer than 4 points, so orientation cannot be determined')\n let hiPt = ring.getCoordinate(0)\n let hiIndex = 0\n for (let i = 1; i <= nPts; i++) {\n const p = ring.getCoordinate(i)\n if (p.y > hiPt.y) {\n hiPt = p\n hiIndex = i\n }\n }\n let prev = null\n let iPrev = hiIndex\n do {\n iPrev = iPrev - 1\n if (iPrev < 0) iPrev = nPts\n prev = ring.getCoordinate(iPrev)\n } while (prev.equals2D(hiPt) && iPrev !== hiIndex)\n let next = null\n let iNext = hiIndex\n do {\n iNext = (iNext + 1) % nPts\n next = ring.getCoordinate(iNext)\n } while (next.equals2D(hiPt) && iNext !== hiIndex)\n if (prev.equals2D(hiPt) || next.equals2D(hiPt) || prev.equals2D(next)) return false\n const disc = Orientation.index(prev, hiPt, next)\n let isCCW = null\n if (disc === 0) \n isCCW = prev.x > next.x\n else \n isCCW = disc > 0\n \n return isCCW\n }\n }\n}\nOrientation.CLOCKWISE = -1\nOrientation.RIGHT = Orientation.CLOCKWISE\nOrientation.COUNTERCLOCKWISE = 1\nOrientation.LEFT = Orientation.COUNTERCLOCKWISE\nOrientation.COLLINEAR = 0\nOrientation.STRAIGHT = Orientation.COLLINEAR\n","import Coordinate from '../geom/Coordinate'\nimport Double from '../../../../java/lang/Double'\nexport default class Intersection {\n static intersection(p1, p2, q1, q2) {\n const minX0 = p1.x < p2.x ? p1.x : p2.x\n const minY0 = p1.y < p2.y ? p1.y : p2.y\n const maxX0 = p1.x > p2.x ? p1.x : p2.x\n const maxY0 = p1.y > p2.y ? p1.y : p2.y\n const minX1 = q1.x < q2.x ? q1.x : q2.x\n const minY1 = q1.y < q2.y ? q1.y : q2.y\n const maxX1 = q1.x > q2.x ? q1.x : q2.x\n const maxY1 = q1.y > q2.y ? q1.y : q2.y\n const intMinX = minX0 > minX1 ? minX0 : minX1\n const intMaxX = maxX0 < maxX1 ? maxX0 : maxX1\n const intMinY = minY0 > minY1 ? minY0 : minY1\n const intMaxY = maxY0 < maxY1 ? maxY0 : maxY1\n const midx = (intMinX + intMaxX) / 2.0\n const midy = (intMinY + intMaxY) / 2.0\n const p1x = p1.x - midx\n const p1y = p1.y - midy\n const p2x = p2.x - midx\n const p2y = p2.y - midy\n const q1x = q1.x - midx\n const q1y = q1.y - midy\n const q2x = q2.x - midx\n const q2y = q2.y - midy\n const px = p1y - p2y\n const py = p2x - p1x\n const pw = p1x * p2y - p2x * p1y\n const qx = q1y - q2y\n const qy = q2x - q1x\n const qw = q1x * q2y - q2x * q1y\n const x = py * qw - qy * pw\n const y = qx * pw - px * qw\n const w = px * qy - qx * py\n const xInt = x / w\n const yInt = y / w\n if (Double.isNaN(xInt) || (Double.isInfinite(xInt) || Double.isNaN(yInt)) || Double.isInfinite(yInt)) \n return null\n \n return new Coordinate(xInt + midx, yInt + midy)\n }\n}\n","export default class System {\n static arraycopy(src, srcPos, dest, destPos, len) {\n let c = 0\n for (let i = srcPos; i < srcPos + len; i++) {\n dest[destPos + c] = src[i]\n c++\n }\n }\n\n static getProperty(name) {\n return {\n 'line.separator': '\\n'\n }[name]\n }\n}\n","import Double from '../../../../java/lang/Double'\nexport default class MathUtil {\n static log10(x) {\n const ln = Math.log(x)\n if (Double.isInfinite(ln)) return ln\n if (Double.isNaN(ln)) return ln\n return ln / MathUtil.LOG_10\n }\n static min(v1, v2, v3, v4) {\n let min = v1\n if (v2 < min) min = v2\n if (v3 < min) min = v3\n if (v4 < min) min = v4\n return min\n }\n static clamp() {\n if (typeof arguments[2] === 'number' && (typeof arguments[0] === 'number' && typeof arguments[1] === 'number')) {\n const x = arguments[0], min = arguments[1], max = arguments[2]\n if (x < min) return min\n if (x > max) return max\n return x\n } else if (Number.isInteger(arguments[2]) && (Number.isInteger(arguments[0]) && Number.isInteger(arguments[1]))) {\n const x = arguments[0], min = arguments[1], max = arguments[2]\n if (x < min) return min\n if (x > max) return max\n return x\n }\n }\n static wrap(index, max) {\n if (index < 0) \n return max - -index % max\n \n return index % max\n }\n static max() {\n if (arguments.length === 3) {\n const v1 = arguments[0], v2 = arguments[1], v3 = arguments[2]\n let max = v1\n if (v2 > max) max = v2\n if (v3 > max) max = v3\n return max\n } else if (arguments.length === 4) {\n const v1 = arguments[0], v2 = arguments[1], v3 = arguments[2], v4 = arguments[3]\n let max = v1\n if (v2 > max) max = v2\n if (v3 > max) max = v3\n if (v4 > max) max = v4\n return max\n }\n }\n static average(x1, x2) {\n return (x1 + x2) / 2.0\n }\n}\nMathUtil.LOG_10 = Math.log(10)\n","import IllegalArgumentException from '../../../../java/lang/IllegalArgumentException'\nimport MathUtil from '../math/MathUtil'\nimport Envelope from '../geom/Envelope'\nexport default class Distance {\n static segmentToSegment(A, B, C, D) {\n if (A.equals(B)) return Distance.pointToSegment(A, C, D)\n if (C.equals(D)) return Distance.pointToSegment(D, A, B)\n let noIntersection = false\n if (!Envelope.intersects(A, B, C, D)) {\n noIntersection = true\n } else {\n const denom = (B.x - A.x) * (D.y - C.y) - (B.y - A.y) * (D.x - C.x)\n if (denom === 0) {\n noIntersection = true\n } else {\n const r_num = (A.y - C.y) * (D.x - C.x) - (A.x - C.x) * (D.y - C.y)\n const s_num = (A.y - C.y) * (B.x - A.x) - (A.x - C.x) * (B.y - A.y)\n const s = s_num / denom\n const r = r_num / denom\n if (r < 0 || r > 1 || s < 0 || s > 1) \n noIntersection = true\n \n }\n }\n if (noIntersection) \n return MathUtil.min(Distance.pointToSegment(A, C, D), Distance.pointToSegment(B, C, D), Distance.pointToSegment(C, A, B), Distance.pointToSegment(D, A, B))\n \n return 0.0\n }\n static pointToSegment(p, A, B) {\n if (A.x === B.x && A.y === B.y) return p.distance(A)\n const len2 = (B.x - A.x) * (B.x - A.x) + (B.y - A.y) * (B.y - A.y)\n const r = ((p.x - A.x) * (B.x - A.x) + (p.y - A.y) * (B.y - A.y)) / len2\n if (r <= 0.0) return p.distance(A)\n if (r >= 1.0) return p.distance(B)\n const s = ((A.y - p.y) * (B.x - A.x) - (A.x - p.x) * (B.y - A.y)) / len2\n return Math.abs(s) * Math.sqrt(len2)\n }\n static pointToLinePerpendicular(p, A, B) {\n const len2 = (B.x - A.x) * (B.x - A.x) + (B.y - A.y) * (B.y - A.y)\n const s = ((A.y - p.y) * (B.x - A.x) - (A.x - p.x) * (B.y - A.y)) / len2\n return Math.abs(s) * Math.sqrt(len2)\n }\n static pointToSegmentString(p, line) {\n if (line.length === 0) throw new IllegalArgumentException('Line array must contain at least one vertex')\n let minDistance = p.distance(line[0])\n for (let i = 0; i < line.length - 1; i++) {\n const dist = Distance.pointToSegment(p, line[i], line[i + 1])\n if (dist < minDistance) \n minDistance = dist\n \n }\n return minDistance\n }\n}\n","import hasInterface from '../../../../hasInterface'\nimport CoordinateSequence from './CoordinateSequence'\nexport default class CoordinateSequenceFactory {\n create() {\n if (arguments.length === 1) {\n if (arguments[0] instanceof Array) {\n const coordinates = arguments[0]\n } else if (hasInterface(arguments[0], CoordinateSequence)) {\n const coordSeq = arguments[0]\n }\n } else if (arguments.length === 2) {\n const size = arguments[0], dimension = arguments[1]\n } else if (arguments.length === 3) {\n const size = arguments[0], dimension = arguments[1], measures = arguments[2]\n return this.create(size, dimension)\n }\n }\n}\n","export default class GeometryComponentFilter {\n filter(geom) {}\n}\n","import IllegalArgumentException from '../../../../java/lang/IllegalArgumentException'\nimport GeometryComponentFilter from './GeometryComponentFilter'\nimport Comparable from '../../../../java/lang/Comparable'\nimport Cloneable from '../../../../java/lang/Cloneable'\nimport Serializable from '../../../../java/io/Serializable'\nimport Envelope from './Envelope'\nexport default class Geometry {\n constructor() {\n Geometry.constructor_.apply(this, arguments)\n }\n\n isGeometryCollection() {\n return this.getTypeCode() === Geometry.TYPECODE_GEOMETRYCOLLECTION\n }\n\n getFactory() {\n return this._factory\n }\n\n getGeometryN(n) {\n return this\n }\n\n getArea() {\n return 0.0\n }\n\n isRectangle() {\n return false\n }\n\n equalsExact(other) {\n return this === other || this.equalsExact(other, 0)\n }\n\n geometryChanged() {\n this.apply(Geometry.geometryChangedFilter)\n }\n\n geometryChangedAction() {\n this._envelope = null\n }\n\n equalsNorm(g) {\n if (g === null) return false\n return this.norm().equalsExact(g.norm())\n }\n\n getLength() {\n return 0.0\n }\n\n getNumGeometries() {\n return 1\n }\n\n compareTo() {\n let other\n if (arguments.length === 1) {\n const o = arguments[0]\n other = o\n if (this.getTypeCode() !== other.getTypeCode()) return this.getTypeCode() - other.getTypeCode()\n\n if (this.isEmpty() && other.isEmpty()) return 0\n\n if (this.isEmpty()) return -1\n\n if (other.isEmpty()) return 1\n\n return this.compareToSameClass(o)\n } else if (arguments.length === 2) {\n const o = arguments[0]; const comp = arguments[1]\n other = o\n if (this.getTypeCode() !== other.getTypeCode()) return this.getTypeCode() - other.getTypeCode()\n\n if (this.isEmpty() && other.isEmpty()) return 0\n\n if (this.isEmpty()) return -1\n\n if (other.isEmpty()) return 1\n\n return this.compareToSameClass(o, comp)\n }\n }\n\n getUserData() {\n return this._userData\n }\n\n getSRID() {\n return this._SRID\n }\n\n getEnvelope() {\n return this.getFactory().toGeometry(this.getEnvelopeInternal())\n }\n\n checkNotGeometryCollection(g) {\n if (g.getTypeCode() === Geometry.TYPECODE_GEOMETRYCOLLECTION) throw new IllegalArgumentException('This method does not support GeometryCollection arguments')\n }\n\n equal(a, b, tolerance) {\n if (tolerance === 0) return a.equals(b)\n\n return a.distance(b) <= tolerance\n }\n\n norm() {\n const copy = this.copy()\n copy.normalize()\n return copy\n }\n\n reverse() {\n const res = this.reverseInternal()\n if (this.envelope != null) res.envelope = this.envelope.copy()\n\n res.setSRID(this.getSRID())\n return res\n }\n\n copy() {\n const copy = this.copyInternal()\n copy.envelope = this._envelope == null ? null : this._envelope.copy()\n copy._SRID = this._SRID\n copy._userData = this._userData\n return copy\n }\n\n getPrecisionModel() {\n return this._factory.getPrecisionModel()\n }\n\n getEnvelopeInternal() {\n if (this._envelope === null) this._envelope = this.computeEnvelopeInternal()\n\n return new Envelope(this._envelope)\n }\n\n setSRID(SRID) {\n this._SRID = SRID\n }\n\n setUserData(userData) {\n this._userData = userData\n }\n\n compare(a, b) {\n const i = a.iterator()\n const j = b.iterator()\n while (i.hasNext() && j.hasNext()) {\n const aElement = i.next()\n const bElement = j.next()\n const comparison = aElement.compareTo(bElement)\n if (comparison !== 0) return comparison\n }\n if (i.hasNext()) return 1\n\n if (j.hasNext()) return -1\n\n return 0\n }\n\n hashCode() {\n return this.getEnvelopeInternal().hashCode()\n }\n\n isEquivalentClass(other) {\n return this.getClass() === other.getClass()\n }\n\n isGeometryCollectionOrDerived() {\n if (this.getTypeCode() === Geometry.TYPECODE_GEOMETRYCOLLECTION || this.getTypeCode() === Geometry.TYPECODE_MULTIPOINT || this.getTypeCode() === Geometry.TYPECODE_MULTILINESTRING || this.getTypeCode() === Geometry.TYPECODE_MULTIPOLYGON) return true\n\n return false\n }\n\n get interfaces_() {\n return [Cloneable, Comparable, Serializable]\n }\n\n getClass() {\n return Geometry\n }\n\n static hasNonEmptyElements(geometries) {\n for (let i = 0; i < geometries.length; i++)\n if (!geometries[i].isEmpty()) return true\n\n return false\n }\n\n static hasNullElements(array) {\n for (let i = 0; i < array.length; i++)\n if (array[i] === null) return true\n\n return false\n }\n}\nGeometry.constructor_ = function(factory) {\n if (!factory) return\n this._envelope = null\n this._userData = null\n this._factory = factory\n this._SRID = factory.getSRID()\n}\nGeometry.TYPECODE_POINT = 0\nGeometry.TYPECODE_MULTIPOINT = 1\nGeometry.TYPECODE_LINESTRING = 2\nGeometry.TYPECODE_LINEARRING = 3\nGeometry.TYPECODE_MULTILINESTRING = 4\nGeometry.TYPECODE_POLYGON = 5\nGeometry.TYPECODE_MULTIPOLYGON = 6\nGeometry.TYPECODE_GEOMETRYCOLLECTION = 7\nGeometry.TYPENAME_POINT = 'Point'\nGeometry.TYPENAME_MULTIPOINT = 'MultiPoint'\nGeometry.TYPENAME_LINESTRING = 'LineString'\nGeometry.TYPENAME_LINEARRING = 'LinearRing'\nGeometry.TYPENAME_MULTILINESTRING = 'MultiLineString'\nGeometry.TYPENAME_POLYGON = 'Polygon'\nGeometry.TYPENAME_MULTIPOLYGON = 'MultiPolygon'\nGeometry.TYPENAME_GEOMETRYCOLLECTION = 'GeometryCollection'\nGeometry.geometryChangedFilter = {\n get interfaces_() {\n return [GeometryComponentFilter]\n },\n filter(geom) {\n geom.geometryChangedAction()\n }\n}\n","export default class CoordinateFilter {\n filter(coord) {}\n}\n","import Coordinate from '../geom/Coordinate'\nexport default class Length {\n static ofLine(pts) {\n const n = pts.size()\n if (n <= 1) return 0.0\n let len = 0.0\n const p = new Coordinate()\n pts.getCoordinate(0, p)\n let x0 = p.x\n let y0 = p.y\n for (let i = 1; i < n; i++) {\n pts.getCoordinate(i, p)\n const x1 = p.x\n const y1 = p.y\n const dx = x1 - x0\n const dy = y1 - y0\n len += Math.sqrt(dx * dx + dy * dy)\n x0 = x1\n y0 = y1\n }\n return len\n }\n}\n","export default class Lineal {}\n","import hasInterface from '../../../../hasInterface'\nimport Coordinate from './Coordinate'\nimport Double from '../../../../java/lang/Double'\nimport CoordinateSequence from './CoordinateSequence'\nexport default class CoordinateSequences {\n static copyCoord(src, srcPos, dest, destPos) {\n const minDim = Math.min(src.getDimension(), dest.getDimension())\n for (let dim = 0; dim < minDim; dim++) \n dest.setOrdinate(destPos, dim, src.getOrdinate(srcPos, dim))\n \n }\n static isRing(seq) {\n const n = seq.size()\n if (n === 0) return true\n if (n <= 3) return false\n return seq.getOrdinate(0, CoordinateSequence.X) === seq.getOrdinate(n - 1, CoordinateSequence.X) && seq.getOrdinate(0, CoordinateSequence.Y) === seq.getOrdinate(n - 1, CoordinateSequence.Y)\n }\n static scroll() {\n if (arguments.length === 2) {\n if (hasInterface(arguments[0], CoordinateSequence) && Number.isInteger(arguments[1])) {\n const seq = arguments[0], indexOfFirstCoordinate = arguments[1]\n CoordinateSequences.scroll(seq, indexOfFirstCoordinate, CoordinateSequences.isRing(seq))\n } else if (hasInterface(arguments[0], CoordinateSequence) && arguments[1] instanceof Coordinate) {\n const seq = arguments[0], firstCoordinate = arguments[1]\n const i = CoordinateSequences.indexOf(firstCoordinate, seq)\n if (i <= 0) return null\n CoordinateSequences.scroll(seq, i)\n }\n } else if (arguments.length === 3) {\n const seq = arguments[0], indexOfFirstCoordinate = arguments[1], ensureRing = arguments[2]\n const i = indexOfFirstCoordinate\n if (i <= 0) return null\n const copy = seq.copy()\n const last = ensureRing ? seq.size() - 1 : seq.size()\n for (let j = 0; j < last; j++) \n for (let k = 0; k < seq.getDimension(); k++) seq.setOrdinate(j, k, copy.getOrdinate((indexOfFirstCoordinate + j) % last, k))\n \n if (ensureRing) \n for (let k = 0; k < seq.getDimension(); k++) seq.setOrdinate(last, k, seq.getOrdinate(0, k))\n \n }\n }\n static isEqual(cs1, cs2) {\n const cs1Size = cs1.size()\n const cs2Size = cs2.size()\n if (cs1Size !== cs2Size) return false\n const dim = Math.min(cs1.getDimension(), cs2.getDimension())\n for (let i = 0; i < cs1Size; i++) \n for (let d = 0; d < dim; d++) {\n const v1 = cs1.getOrdinate(i, d)\n const v2 = cs2.getOrdinate(i, d)\n if (cs1.getOrdinate(i, d) === cs2.getOrdinate(i, d)) continue\n if (Double.isNaN(v1) && Double.isNaN(v2)) continue\n return false\n }\n \n return true\n }\n static minCoordinateIndex() {\n if (arguments.length === 1) {\n const seq = arguments[0]\n return CoordinateSequences.minCoordinateIndex(seq, 0, seq.size() - 1)\n } else if (arguments.length === 3) {\n const seq = arguments[0], from = arguments[1], to = arguments[2]\n let minCoordIndex = -1\n let minCoord = null\n for (let i = from; i <= to; i++) {\n const testCoord = seq.getCoordinate(i)\n if (minCoord === null || minCoord.compareTo(testCoord) > 0) {\n minCoord = testCoord\n minCoordIndex = i\n }\n }\n return minCoordIndex\n }\n }\n static extend(fact, seq, size) {\n const newseq = fact.create(size, seq.getDimension())\n const n = seq.size()\n CoordinateSequences.copy(seq, 0, newseq, 0, n)\n if (n > 0) \n for (let i = n; i < size; i++) CoordinateSequences.copy(seq, n - 1, newseq, i, 1)\n \n return newseq\n }\n static reverse(seq) {\n const last = seq.size() - 1\n const mid = Math.trunc(last / 2)\n for (let i = 0; i <= mid; i++) \n CoordinateSequences.swap(seq, i, last - i)\n \n }\n static swap(seq, i, j) {\n if (i === j) return null\n for (let dim = 0; dim < seq.getDimension(); dim++) {\n const tmp = seq.getOrdinate(i, dim)\n seq.setOrdinate(i, dim, seq.getOrdinate(j, dim))\n seq.setOrdinate(j, dim, tmp)\n }\n }\n static copy(src, srcPos, dest, destPos, length) {\n for (let i = 0; i < length; i++) \n CoordinateSequences.copyCoord(src, srcPos + i, dest, destPos + i)\n \n }\n static ensureValidRing(fact, seq) {\n const n = seq.size()\n if (n === 0) return seq\n if (n <= 3) return CoordinateSequences.createClosedRing(fact, seq, 4)\n const isClosed = seq.getOrdinate(0, CoordinateSequence.X) === seq.getOrdinate(n - 1, CoordinateSequence.X) && seq.getOrdinate(0, CoordinateSequence.Y) === seq.getOrdinate(n - 1, CoordinateSequence.Y)\n if (isClosed) return seq\n return CoordinateSequences.createClosedRing(fact, seq, n + 1)\n }\n static indexOf(coordinate, seq) {\n for (let i = 0; i < seq.size(); i++) \n if (coordinate.x === seq.getOrdinate(i, CoordinateSequence.X) && coordinate.y === seq.getOrdinate(i, CoordinateSequence.Y)) \n return i\n \n \n return -1\n }\n static createClosedRing(fact, seq, size) {\n const newseq = fact.create(size, seq.getDimension())\n const n = seq.size()\n CoordinateSequences.copy(seq, 0, newseq, 0, n)\n for (let i = n; i < size; i++) CoordinateSequences.copy(seq, 0, newseq, i, 1)\n return newseq\n }\n static minCoordinate(seq) {\n let minCoord = null\n for (let i = 0; i < seq.size(); i++) {\n const testCoord = seq.getCoordinate(i)\n if (minCoord === null || minCoord.compareTo(testCoord) > 0) \n minCoord = testCoord\n \n }\n return minCoord\n }\n}\n","import Exception from './Exception'\n\nexport default class UnsupportedOperationException extends Exception {\n constructor(message) {\n super(message)\n this.name = Object.keys({ UnsupportedOperationException })[0]\n }\n}\n","import IllegalArgumentException from '../../../../java/lang/IllegalArgumentException'\nimport Character from '../../../../java/lang/Character'\nexport default class Dimension {\n static toDimensionSymbol(dimensionValue) {\n switch (dimensionValue) {\n case Dimension.FALSE:\n return Dimension.SYM_FALSE\n case Dimension.TRUE:\n return Dimension.SYM_TRUE\n case Dimension.DONTCARE:\n return Dimension.SYM_DONTCARE\n case Dimension.P:\n return Dimension.SYM_P\n case Dimension.L:\n return Dimension.SYM_L\n case Dimension.A:\n return Dimension.SYM_A\n }\n throw new IllegalArgumentException('Unknown dimension value: ' + dimensionValue)\n }\n static toDimensionValue(dimensionSymbol) {\n switch (Character.toUpperCase(dimensionSymbol)) {\n case Dimension.SYM_FALSE:\n return Dimension.FALSE\n case Dimension.SYM_TRUE:\n return Dimension.TRUE\n case Dimension.SYM_DONTCARE:\n return Dimension.DONTCARE\n case Dimension.SYM_P:\n return Dimension.P\n case Dimension.SYM_L:\n return Dimension.L\n case Dimension.SYM_A:\n return Dimension.A\n }\n throw new IllegalArgumentException('Unknown dimension symbol: ' + dimensionSymbol)\n }\n}\nDimension.P = 0\nDimension.L = 1\nDimension.A = 2\nDimension.FALSE = -1\nDimension.TRUE = -2\nDimension.DONTCARE = -3\nDimension.SYM_FALSE = 'F'\nDimension.SYM_TRUE = 'T'\nDimension.SYM_DONTCARE = '*'\nDimension.SYM_P = '0'\nDimension.SYM_L = '1'\nDimension.SYM_A = '2'\n","export default class GeometryFilter {\n filter(geom) {}\n}\n","import Geometry from './Geometry'\nimport CoordinateFilter from './CoordinateFilter'\nimport hasInterface from '../../../../hasInterface'\nimport Length from '../algorithm/Length'\nimport IllegalArgumentException from '../../../../java/lang/IllegalArgumentException'\nimport Lineal from './Lineal'\nimport CoordinateSequences from './CoordinateSequences'\nimport GeometryComponentFilter from './GeometryComponentFilter'\nimport UnsupportedOperationException from '../../../../java/lang/UnsupportedOperationException'\nimport Dimension from './Dimension'\nimport GeometryFilter from './GeometryFilter'\nimport CoordinateSequenceFilter from './CoordinateSequenceFilter'\nimport Envelope from './Envelope'\nexport default class LineString extends Geometry {\n constructor() {\n super()\n LineString.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._points = null\n if (arguments.length === 0) {} else if (arguments.length === 2) {\n const points = arguments[0], factory = arguments[1]\n Geometry.constructor_.call(this, factory)\n this.init(points)\n }\n }\n computeEnvelopeInternal() {\n if (this.isEmpty()) \n return new Envelope()\n \n return this._points.expandEnvelope(new Envelope())\n }\n isRing() {\n return this.isClosed() && this.isSimple()\n }\n getCoordinates() {\n return this._points.toCoordinateArray()\n }\n copyInternal() {\n return new LineString(this._points.copy(), this._factory)\n }\n equalsExact() {\n if (arguments.length === 2 && (typeof arguments[1] === 'number' && arguments[0] instanceof Geometry)) {\n const other = arguments[0], tolerance = arguments[1]\n if (!this.isEquivalentClass(other)) \n return false\n \n const otherLineString = other\n if (this._points.size() !== otherLineString._points.size()) \n return false\n \n for (let i = 0; i < this._points.size(); i++) \n if (!this.equal(this._points.getCoordinate(i), otherLineString._points.getCoordinate(i), tolerance)) \n return false\n \n \n return true\n } else {\n return super.equalsExact.apply(this, arguments)\n }\n }\n normalize() {\n for (let i = 0; i < Math.trunc(this._points.size() / 2); i++) {\n const j = this._points.size() - 1 - i\n if (!this._points.getCoordinate(i).equals(this._points.getCoordinate(j))) {\n if (this._points.getCoordinate(i).compareTo(this._points.getCoordinate(j)) > 0) {\n const copy = this._points.copy()\n CoordinateSequences.reverse(copy)\n this._points = copy\n }\n return null\n }\n }\n }\n getCoordinate() {\n if (this.isEmpty()) return null\n return this._points.getCoordinate(0)\n }\n getBoundaryDimension() {\n if (this.isClosed()) \n return Dimension.FALSE\n \n return 0\n }\n isClosed() {\n if (this.isEmpty()) \n return false\n \n return this.getCoordinateN(0).equals2D(this.getCoordinateN(this.getNumPoints() - 1))\n }\n reverseInternal() {\n const seq = this._points.copy()\n CoordinateSequences.reverse(seq)\n return this.getFactory().createLineString(seq)\n }\n getEndPoint() {\n if (this.isEmpty()) \n return null\n \n return this.getPointN(this.getNumPoints() - 1)\n }\n getTypeCode() {\n return Geometry.TYPECODE_LINESTRING\n }\n getDimension() {\n return 1\n }\n getLength() {\n return Length.ofLine(this._points)\n }\n getNumPoints() {\n return this._points.size()\n }\n compareToSameClass() {\n if (arguments.length === 1) {\n const o = arguments[0]\n const line = o\n let i = 0\n let j = 0\n while (i < this._points.size() && j < line._points.size()) {\n const comparison = this._points.getCoordinate(i).compareTo(line._points.getCoordinate(j))\n if (comparison !== 0) \n return comparison\n \n i++\n j++\n }\n if (i < this._points.size()) \n return 1\n \n if (j < line._points.size()) \n return -1\n \n return 0\n } else if (arguments.length === 2) {\n const o = arguments[0], comp = arguments[1]\n const line = o\n return comp.compare(this._points, line._points)\n }\n }\n apply() {\n if (hasInterface(arguments[0], CoordinateFilter)) {\n const filter = arguments[0]\n for (let i = 0; i < this._points.size(); i++) \n filter.filter(this._points.getCoordinate(i))\n \n } else if (hasInterface(arguments[0], CoordinateSequenceFilter)) {\n const filter = arguments[0]\n if (this._points.size() === 0) return null\n for (let i = 0; i < this._points.size(); i++) {\n filter.filter(this._points, i)\n if (filter.isDone()) break\n }\n if (filter.isGeometryChanged()) this.geometryChanged()\n } else if (hasInterface(arguments[0], GeometryFilter)) {\n const filter = arguments[0]\n filter.filter(this)\n } else if (hasInterface(arguments[0], GeometryComponentFilter)) {\n const filter = arguments[0]\n filter.filter(this)\n }\n }\n getBoundary() {\n throw new UnsupportedOperationException()\n }\n isEquivalentClass(other) {\n return other instanceof LineString\n }\n getCoordinateN(n) {\n return this._points.getCoordinate(n)\n }\n getGeometryType() {\n return Geometry.TYPENAME_LINESTRING\n }\n getCoordinateSequence() {\n return this._points\n }\n isEmpty() {\n return this._points.size() === 0\n }\n init(points) {\n if (points === null) \n points = this.getFactory().getCoordinateSequenceFactory().create([])\n \n if (points.size() === 1) \n throw new IllegalArgumentException('Invalid number of points in LineString (found ' + points.size() + ' - must be 0 or >= 2)')\n \n this._points = points\n }\n isCoordinate(pt) {\n for (let i = 0; i < this._points.size(); i++) \n if (this._points.getCoordinate(i).equals(pt)) \n return true\n \n \n return false\n }\n getStartPoint() {\n if (this.isEmpty()) \n return null\n \n return this.getPointN(0)\n }\n getPointN(n) {\n return this.getFactory().createPoint(this._points.getCoordinate(n))\n }\n get interfaces_() {\n return [Lineal]\n }\n}\n","export default class Puntal {}\n","import Geometry from './Geometry'\nimport CoordinateFilter from './CoordinateFilter'\nimport hasInterface from '../../../../hasInterface'\nimport GeometryComponentFilter from './GeometryComponentFilter'\nimport Dimension from './Dimension'\nimport GeometryFilter from './GeometryFilter'\nimport CoordinateSequenceFilter from './CoordinateSequenceFilter'\nimport Puntal from './Puntal'\nimport Envelope from './Envelope'\nimport Assert from '../util/Assert'\nexport default class Point extends Geometry {\n constructor() {\n super()\n Point.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._coordinates = null\n const coordinates = arguments[0], factory = arguments[1]\n Geometry.constructor_.call(this, factory)\n this.init(coordinates)\n }\n computeEnvelopeInternal() {\n if (this.isEmpty()) \n return new Envelope()\n \n const env = new Envelope()\n env.expandToInclude(this._coordinates.getX(0), this._coordinates.getY(0))\n return env\n }\n getCoordinates() {\n return this.isEmpty() ? [] : [this.getCoordinate()]\n }\n copyInternal() {\n return new Point(this._coordinates.copy(), this._factory)\n }\n equalsExact() {\n if (arguments.length === 2 && (typeof arguments[1] === 'number' && arguments[0] instanceof Geometry)) {\n const other = arguments[0], tolerance = arguments[1]\n if (!this.isEquivalentClass(other)) \n return false\n \n if (this.isEmpty() && other.isEmpty()) \n return true\n \n if (this.isEmpty() !== other.isEmpty()) \n return false\n \n return this.equal(other.getCoordinate(), this.getCoordinate(), tolerance)\n } else {\n return super.equalsExact.apply(this, arguments)\n }\n }\n normalize() {}\n getCoordinate() {\n return this._coordinates.size() !== 0 ? this._coordinates.getCoordinate(0) : null\n }\n getBoundaryDimension() {\n return Dimension.FALSE\n }\n reverseInternal() {\n return this.getFactory().createPoint(this._coordinates.copy())\n }\n getTypeCode() {\n return Geometry.TYPECODE_POINT\n }\n getDimension() {\n return 0\n }\n getNumPoints() {\n return this.isEmpty() ? 0 : 1\n }\n getX() {\n if (this.getCoordinate() === null) \n throw new IllegalStateException('getX called on empty Point')\n \n return this.getCoordinate().x\n }\n compareToSameClass() {\n if (arguments.length === 1) {\n const other = arguments[0]\n const point = other\n return this.getCoordinate().compareTo(point.getCoordinate())\n } else if (arguments.length === 2) {\n const other = arguments[0], comp = arguments[1]\n const point = other\n return comp.compare(this._coordinates, point._coordinates)\n }\n }\n apply() {\n if (hasInterface(arguments[0], CoordinateFilter)) {\n const filter = arguments[0]\n if (this.isEmpty()) \n return null\n \n filter.filter(this.getCoordinate())\n } else if (hasInterface(arguments[0], CoordinateSequenceFilter)) {\n const filter = arguments[0]\n if (this.isEmpty()) return null\n filter.filter(this._coordinates, 0)\n if (filter.isGeometryChanged()) this.geometryChanged()\n } else if (hasInterface(arguments[0], GeometryFilter)) {\n const filter = arguments[0]\n filter.filter(this)\n } else if (hasInterface(arguments[0], GeometryComponentFilter)) {\n const filter = arguments[0]\n filter.filter(this)\n }\n }\n getBoundary() {\n return this.getFactory().createGeometryCollection()\n }\n getGeometryType() {\n return Geometry.TYPENAME_POINT\n }\n getCoordinateSequence() {\n return this._coordinates\n }\n getY() {\n if (this.getCoordinate() === null) \n throw new IllegalStateException('getY called on empty Point')\n \n return this.getCoordinate().y\n }\n isEmpty() {\n return this._coordinates.size() === 0\n }\n init(coordinates) {\n if (coordinates === null) \n coordinates = this.getFactory().getCoordinateSequenceFactory().create([])\n \n Assert.isTrue(coordinates.size() <= 1)\n this._coordinates = coordinates\n }\n isSimple() {\n return true\n }\n get interfaces_() {\n return [Puntal]\n }\n}\n","import hasInterface from '../../../../hasInterface'\nimport Coordinate from '../geom/Coordinate'\nimport CoordinateSequence from '../geom/CoordinateSequence'\nexport default class Area {\n static ofRing() {\n if (arguments[0] instanceof Array) {\n const ring = arguments[0]\n return Math.abs(Area.ofRingSigned(ring))\n } else if (hasInterface(arguments[0], CoordinateSequence)) {\n const ring = arguments[0]\n return Math.abs(Area.ofRingSigned(ring))\n }\n }\n static ofRingSigned() {\n if (arguments[0] instanceof Array) {\n const ring = arguments[0]\n if (ring.length < 3) return 0.0\n let sum = 0.0\n const x0 = ring[0].x\n for (let i = 1; i < ring.length - 1; i++) {\n const x = ring[i].x - x0\n const y1 = ring[i + 1].y\n const y2 = ring[i - 1].y\n sum += x * (y2 - y1)\n }\n return sum / 2.0\n } else if (hasInterface(arguments[0], CoordinateSequence)) {\n const ring = arguments[0]\n const n = ring.size()\n if (n < 3) return 0.0\n const p0 = new Coordinate()\n const p1 = new Coordinate()\n const p2 = new Coordinate()\n ring.getCoordinate(0, p1)\n ring.getCoordinate(1, p2)\n const x0 = p1.x\n p2.x -= x0\n let sum = 0.0\n for (let i = 1; i < n - 1; i++) {\n p0.y = p1.y\n p1.x = p2.x\n p1.y = p2.y\n ring.getCoordinate(i + 1, p2)\n p2.x -= x0\n sum += p1.x * (p0.y - p2.y)\n }\n return sum / 2.0\n }\n }\n}\n","import ArrayList from './ArrayList'\n\n/**\n * @see http://download.oracle.com/javase/6/docs/api/java/util/Arrays.html\n */\nexport default class Arrays {\n static sort() {\n const a = arguments[0]\n if (arguments.length === 1) {\n a.sort((a, b) => a.compareTo(b))\n } else if (arguments.length === 2) {\n a.sort((a, b) => arguments[1].compare(a, b))\n } else if (arguments.length === 3) {\n const t = a.slice(arguments[1], arguments[2])\n t.sort()\n const r = a.slice(0, arguments[1]).concat(t, a.slice(arguments[2], a.length))\n a.splice(0, a.length)\n for (const e of r)\n a.push(e)\n } else if (arguments.length === 4) {\n const t = a.slice(arguments[1], arguments[2])\n t.sort((a, b) => arguments[3].compare(a, b))\n const r = a.slice(0, arguments[1]).concat(t, a.slice(arguments[2], a.length))\n a.splice(0, a.length)\n for (const e of r)\n a.push(e)\n }\n }\n\n /**\n * @param {Array} array\n * @return {ArrayList}\n */\n static asList(array) {\n const arrayList = new ArrayList()\n for (const e of array)\n arrayList.add(e)\n return arrayList\n }\n\n static copyOf(original, newLength) {\n return original.slice(0, newLength)\n }\n}\n","export default class Polygonal {}\n","import Area from '../algorithm/Area'\nimport Geometry from './Geometry'\nimport Arrays from '../../../../java/util/Arrays'\nimport CoordinateFilter from './CoordinateFilter'\nimport hasInterface from '../../../../hasInterface'\nimport IllegalArgumentException from '../../../../java/lang/IllegalArgumentException'\nimport Orientation from '../algorithm/Orientation'\nimport CoordinateSequences from './CoordinateSequences'\nimport GeometryComponentFilter from './GeometryComponentFilter'\nimport Polygonal from './Polygonal'\nimport GeometryFilter from './GeometryFilter'\nimport CoordinateSequenceFilter from './CoordinateSequenceFilter'\nexport default class Polygon extends Geometry {\n constructor() {\n super()\n Polygon.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._shell = null\n this._holes = null\n let shell = arguments[0], holes = arguments[1], factory = arguments[2]\n Geometry.constructor_.call(this, factory)\n if (shell === null) \n shell = this.getFactory().createLinearRing()\n \n if (holes === null) \n holes = []\n \n if (Geometry.hasNullElements(holes)) \n throw new IllegalArgumentException('holes must not contain null elements')\n \n if (shell.isEmpty() && Geometry.hasNonEmptyElements(holes)) \n throw new IllegalArgumentException('shell is empty but holes are not')\n \n this._shell = shell\n this._holes = holes\n }\n computeEnvelopeInternal() {\n return this._shell.getEnvelopeInternal()\n }\n getCoordinates() {\n if (this.isEmpty()) \n return []\n \n const coordinates = new Array(this.getNumPoints()).fill(null)\n let k = -1\n const shellCoordinates = this._shell.getCoordinates()\n for (let x = 0; x < shellCoordinates.length; x++) {\n k++\n coordinates[k] = shellCoordinates[x]\n }\n for (let i = 0; i < this._holes.length; i++) {\n const childCoordinates = this._holes[i].getCoordinates()\n for (let j = 0; j < childCoordinates.length; j++) {\n k++\n coordinates[k] = childCoordinates[j]\n }\n }\n return coordinates\n }\n getArea() {\n let area = 0.0\n area += Area.ofRing(this._shell.getCoordinateSequence())\n for (let i = 0; i < this._holes.length; i++) \n area -= Area.ofRing(this._holes[i].getCoordinateSequence())\n \n return area\n }\n copyInternal() {\n const shellCopy = this._shell.copy()\n const holeCopies = new Array(this._holes.length).fill(null)\n for (let i = 0; i < this._holes.length; i++) \n holeCopies[i] = this._holes[i].copy()\n \n return new Polygon(shellCopy, holeCopies, this._factory)\n }\n isRectangle() {\n if (this.getNumInteriorRing() !== 0) return false\n if (this._shell === null) return false\n if (this._shell.getNumPoints() !== 5) return false\n const seq = this._shell.getCoordinateSequence()\n const env = this.getEnvelopeInternal()\n for (let i = 0; i < 5; i++) {\n const x = seq.getX(i)\n if (!(x === env.getMinX() || x === env.getMaxX())) return false\n const y = seq.getY(i)\n if (!(y === env.getMinY() || y === env.getMaxY())) return false\n }\n let prevX = seq.getX(0)\n let prevY = seq.getY(0)\n for (let i = 1; i <= 4; i++) {\n const x = seq.getX(i)\n const y = seq.getY(i)\n const xChanged = x !== prevX\n const yChanged = y !== prevY\n if (xChanged === yChanged) return false\n prevX = x\n prevY = y\n }\n return true\n }\n equalsExact() {\n if (arguments.length === 2 && (typeof arguments[1] === 'number' && arguments[0] instanceof Geometry)) {\n const other = arguments[0], tolerance = arguments[1]\n if (!this.isEquivalentClass(other)) \n return false\n \n const otherPolygon = other\n const thisShell = this._shell\n const otherPolygonShell = otherPolygon._shell\n if (!thisShell.equalsExact(otherPolygonShell, tolerance)) \n return false\n \n if (this._holes.length !== otherPolygon._holes.length) \n return false\n \n for (let i = 0; i < this._holes.length; i++) \n if (!this._holes[i].equalsExact(otherPolygon._holes[i], tolerance)) \n return false\n \n \n return true\n } else {\n return super.equalsExact.apply(this, arguments)\n }\n }\n normalize() {\n if (arguments.length === 0) {\n this._shell = this.normalized(this._shell, true)\n for (let i = 0; i < this._holes.length; i++) \n this._holes[i] = this.normalized(this._holes[i], false)\n \n Arrays.sort(this._holes)\n } else if (arguments.length === 2) {\n const ring = arguments[0], clockwise = arguments[1]\n if (ring.isEmpty()) \n return null\n \n const seq = ring.getCoordinateSequence()\n const minCoordinateIndex = CoordinateSequences.minCoordinateIndex(seq, 0, seq.size() - 2)\n CoordinateSequences.scroll(seq, minCoordinateIndex, true)\n if (Orientation.isCCW(seq) === clockwise) CoordinateSequences.reverse(seq)\n }\n }\n getCoordinate() {\n return this._shell.getCoordinate()\n }\n getNumInteriorRing() {\n return this._holes.length\n }\n getBoundaryDimension() {\n return 1\n }\n reverseInternal() {\n const shell = this.getExteriorRing().reverse()\n const holes = new Array(this.getNumInteriorRing()).fill(null)\n for (let i = 0; i < holes.length; i++) \n holes[i] = this.getInteriorRingN(i).reverse()\n \n return this.getFactory().createPolygon(shell, holes)\n }\n getTypeCode() {\n return Geometry.TYPECODE_POLYGON\n }\n getDimension() {\n return 2\n }\n getLength() {\n let len = 0.0\n len += this._shell.getLength()\n for (let i = 0; i < this._holes.length; i++) \n len += this._holes[i].getLength()\n \n return len\n }\n getNumPoints() {\n let numPoints = this._shell.getNumPoints()\n for (let i = 0; i < this._holes.length; i++) \n numPoints += this._holes[i].getNumPoints()\n \n return numPoints\n }\n convexHull() {\n return this.getExteriorRing().convexHull()\n }\n normalized(ring, clockwise) {\n const res = ring.copy()\n this.normalize(res, clockwise)\n return res\n }\n compareToSameClass() {\n if (arguments.length === 1) {\n const o = arguments[0]\n const thisShell = this._shell\n const otherShell = o._shell\n return thisShell.compareToSameClass(otherShell)\n } else if (arguments.length === 2) {\n const o = arguments[0], comp = arguments[1]\n const poly = o\n const thisShell = this._shell\n const otherShell = poly._shell\n const shellComp = thisShell.compareToSameClass(otherShell, comp)\n if (shellComp !== 0) return shellComp\n const nHole1 = this.getNumInteriorRing()\n const nHole2 = poly.getNumInteriorRing()\n let i = 0\n while (i < nHole1 && i < nHole2) {\n const thisHole = this.getInteriorRingN(i)\n const otherHole = poly.getInteriorRingN(i)\n const holeComp = thisHole.compareToSameClass(otherHole, comp)\n if (holeComp !== 0) return holeComp\n i++\n }\n if (i < nHole1) return 1\n if (i < nHole2) return -1\n return 0\n }\n }\n apply() {\n if (hasInterface(arguments[0], CoordinateFilter)) {\n const filter = arguments[0]\n this._shell.apply(filter)\n for (let i = 0; i < this._holes.length; i++) \n this._holes[i].apply(filter)\n \n } else if (hasInterface(arguments[0], CoordinateSequenceFilter)) {\n const filter = arguments[0]\n this._shell.apply(filter)\n if (!filter.isDone()) \n for (let i = 0; i < this._holes.length; i++) {\n this._holes[i].apply(filter)\n if (filter.isDone()) break\n }\n \n if (filter.isGeometryChanged()) this.geometryChanged()\n } else if (hasInterface(arguments[0], GeometryFilter)) {\n const filter = arguments[0]\n filter.filter(this)\n } else if (hasInterface(arguments[0], GeometryComponentFilter)) {\n const filter = arguments[0]\n filter.filter(this)\n this._shell.apply(filter)\n for (let i = 0; i < this._holes.length; i++) \n this._holes[i].apply(filter)\n \n }\n }\n getBoundary() {\n if (this.isEmpty()) \n return this.getFactory().createMultiLineString()\n \n const rings = new Array(this._holes.length + 1).fill(null)\n rings[0] = this._shell\n for (let i = 0; i < this._holes.length; i++) \n rings[i + 1] = this._holes[i]\n \n if (rings.length <= 1) return this.getFactory().createLinearRing(rings[0].getCoordinateSequence())\n return this.getFactory().createMultiLineString(rings)\n }\n getGeometryType() {\n return Geometry.TYPENAME_POLYGON\n }\n getExteriorRing() {\n return this._shell\n }\n isEmpty() {\n return this._shell.isEmpty()\n }\n getInteriorRingN(n) {\n return this._holes[n]\n }\n get interfaces_() {\n return [Polygonal]\n }\n}\n","import Collection from './Collection'\n\n/**\n * @see http://download.oracle.com/javase/6/docs/api/java/util/Set.html\n *\n * @extends {Collection}\n * @constructor\n * @private\n */\nexport default class Set extends Collection {\n /**\n * Returns true if this set contains the specified element. More formally,\n * returns true if and only if this set contains an element e such that (o==null ?\n * e==null : o.equals(e)).\n * @param {Object} e\n * @return {boolean}\n */\n contains() { }\n}\n","import Set from './Set'\n\n/**\n * @see http://download.oracle.com/javase/6/docs/api/java/util/SortedSet.html\n */\nexport default class SortedSet extends Set {}\n","import Collection from './Collection'\nimport NoSuchElementException from './NoSuchElementException'\nimport UnsupportedOperationException from '../lang/UnsupportedOperationException'\nimport SortedSet from './SortedSet'\n\n/**\n * @see http://download.oracle.com/javase/6/docs/api/java/util/TreeSet.html\n */\nexport default class TreeSet extends SortedSet {\n constructor(o) {\n super()\n this.array = []\n if (o instanceof Collection)\n this.addAll(o)\n }\n\n contains(o) {\n for (const e of this.array)\n if (e.compareTo(o) === 0)\n return true\n return false\n }\n\n add(o) {\n if (this.contains(o))\n return false\n for (let i = 0, len = this.array.length; i < len; i++) {\n const e = this.array[i]\n if (e.compareTo(o) === 1)\n return !!this.array.splice(i, 0, o)\n }\n this.array.push(o)\n return true\n }\n\n addAll(c) {\n for (const e of c)\n this.add(e)\n return true\n }\n\n remove() {\n throw new UnsupportedOperationException()\n }\n\n size() {\n return this.array.length\n }\n\n isEmpty() {\n return this.array.length === 0\n }\n\n toArray() {\n return this.array.slice()\n }\n\n iterator() {\n return new Iterator(this.array)\n }\n}\n\nclass Iterator {\n constructor(array) {\n this.array = array\n this.position = 0\n }\n\n next() {\n if (this.position === this.array.length)\n throw new NoSuchElementException()\n return this.array[this.position++]\n }\n\n hasNext() {\n return this.position < this.array.length\n }\n\n remove() {\n throw new UnsupportedOperationException()\n }\n}\n","import TreeSet from '../../../../java/util/TreeSet'\nimport Geometry from './Geometry'\nimport Arrays from '../../../../java/util/Arrays'\nimport CoordinateFilter from './CoordinateFilter'\nimport hasInterface from '../../../../hasInterface'\nimport IllegalArgumentException from '../../../../java/lang/IllegalArgumentException'\nimport GeometryComponentFilter from './GeometryComponentFilter'\nimport Dimension from './Dimension'\nimport ArrayList from '../../../../java/util/ArrayList'\nimport GeometryFilter from './GeometryFilter'\nimport CoordinateSequenceFilter from './CoordinateSequenceFilter'\nimport Envelope from './Envelope'\nimport Assert from '../util/Assert'\nexport default class GeometryCollection extends Geometry {\n constructor() {\n super()\n GeometryCollection.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._geometries = null\n if (arguments.length === 0) {} else if (arguments.length === 2) {\n let geometries = arguments[0], factory = arguments[1]\n Geometry.constructor_.call(this, factory)\n if (geometries === null) \n geometries = []\n \n if (Geometry.hasNullElements(geometries)) \n throw new IllegalArgumentException('geometries must not contain null elements')\n \n this._geometries = geometries\n }\n }\n computeEnvelopeInternal() {\n const envelope = new Envelope()\n for (let i = 0; i < this._geometries.length; i++) \n envelope.expandToInclude(this._geometries[i].getEnvelopeInternal())\n \n return envelope\n }\n getGeometryN(n) {\n return this._geometries[n]\n }\n getCoordinates() {\n const coordinates = new Array(this.getNumPoints()).fill(null)\n let k = -1\n for (let i = 0; i < this._geometries.length; i++) {\n const childCoordinates = this._geometries[i].getCoordinates()\n for (let j = 0; j < childCoordinates.length; j++) {\n k++\n coordinates[k] = childCoordinates[j]\n }\n }\n return coordinates\n }\n getArea() {\n let area = 0.0\n for (let i = 0; i < this._geometries.length; i++) \n area += this._geometries[i].getArea()\n \n return area\n }\n copyInternal() {\n const geometries = new Array(this._geometries.length).fill(null)\n for (let i = 0; i < geometries.length; i++) \n geometries[i] = this._geometries[i].copy()\n \n return new GeometryCollection(geometries, this._factory)\n }\n equalsExact() {\n if (arguments.length === 2 && (typeof arguments[1] === 'number' && arguments[0] instanceof Geometry)) {\n const other = arguments[0], tolerance = arguments[1]\n if (!this.isEquivalentClass(other)) \n return false\n \n const otherCollection = other\n if (this._geometries.length !== otherCollection._geometries.length) \n return false\n \n for (let i = 0; i < this._geometries.length; i++) \n if (!this._geometries[i].equalsExact(otherCollection._geometries[i], tolerance)) \n return false\n \n \n return true\n } else {\n return super.equalsExact.apply(this, arguments)\n }\n }\n normalize() {\n for (let i = 0; i < this._geometries.length; i++) \n this._geometries[i].normalize()\n \n Arrays.sort(this._geometries)\n }\n getCoordinate() {\n if (this.isEmpty()) return null\n return this._geometries[0].getCoordinate()\n }\n getBoundaryDimension() {\n let dimension = Dimension.FALSE\n for (let i = 0; i < this._geometries.length; i++) \n dimension = Math.max(dimension, this._geometries[i].getBoundaryDimension())\n \n return dimension\n }\n reverseInternal() {\n const numGeometries = this._geometries.length\n const reversed = new ArrayList(numGeometries)\n for (let i = 0; i < numGeometries; i++) \n reversed.add(this._geometries[i].reverse())\n \n return this.getFactory().buildGeometry(reversed)\n }\n getTypeCode() {\n return Geometry.TYPECODE_GEOMETRYCOLLECTION\n }\n getDimension() {\n let dimension = Dimension.FALSE\n for (let i = 0; i < this._geometries.length; i++) \n dimension = Math.max(dimension, this._geometries[i].getDimension())\n \n return dimension\n }\n getLength() {\n let sum = 0.0\n for (let i = 0; i < this._geometries.length; i++) \n sum += this._geometries[i].getLength()\n \n return sum\n }\n getNumPoints() {\n let numPoints = 0\n for (let i = 0; i < this._geometries.length; i++) \n numPoints += this._geometries[i].getNumPoints()\n \n return numPoints\n }\n getNumGeometries() {\n return this._geometries.length\n }\n compareToSameClass() {\n if (arguments.length === 1) {\n const o = arguments[0]\n const theseElements = new TreeSet(Arrays.asList(this._geometries))\n const otherElements = new TreeSet(Arrays.asList(o._geometries))\n return this.compare(theseElements, otherElements)\n } else if (arguments.length === 2) {\n const o = arguments[0], comp = arguments[1]\n const gc = o\n const n1 = this.getNumGeometries()\n const n2 = gc.getNumGeometries()\n let i = 0\n while (i < n1 && i < n2) {\n const thisGeom = this.getGeometryN(i)\n const otherGeom = gc.getGeometryN(i)\n const holeComp = thisGeom.compareToSameClass(otherGeom, comp)\n if (holeComp !== 0) return holeComp\n i++\n }\n if (i < n1) return 1\n if (i < n2) return -1\n return 0\n }\n }\n apply() {\n if (hasInterface(arguments[0], CoordinateFilter)) {\n const filter = arguments[0]\n for (let i = 0; i < this._geometries.length; i++) \n this._geometries[i].apply(filter)\n \n } else if (hasInterface(arguments[0], CoordinateSequenceFilter)) {\n const filter = arguments[0]\n if (this._geometries.length === 0) return null\n for (let i = 0; i < this._geometries.length; i++) {\n this._geometries[i].apply(filter)\n if (filter.isDone()) \n break\n \n }\n if (filter.isGeometryChanged()) this.geometryChanged()\n } else if (hasInterface(arguments[0], GeometryFilter)) {\n const filter = arguments[0]\n filter.filter(this)\n for (let i = 0; i < this._geometries.length; i++) \n this._geometries[i].apply(filter)\n \n } else if (hasInterface(arguments[0], GeometryComponentFilter)) {\n const filter = arguments[0]\n filter.filter(this)\n for (let i = 0; i < this._geometries.length; i++) \n this._geometries[i].apply(filter)\n \n }\n }\n getBoundary() {\n Geometry.checkNotGeometryCollection(this)\n Assert.shouldNeverReachHere()\n return null\n }\n getGeometryType() {\n return Geometry.TYPENAME_GEOMETRYCOLLECTION\n }\n isEmpty() {\n for (let i = 0; i < this._geometries.length; i++) \n if (!this._geometries[i].isEmpty()) \n return false\n \n \n return true\n }\n}\n","import Geometry from './Geometry'\nimport GeometryCollection from './GeometryCollection'\nimport Dimension from './Dimension'\nimport Puntal from './Puntal'\nexport default class MultiPoint extends GeometryCollection {\n constructor() {\n super()\n MultiPoint.constructor_.apply(this, arguments)\n }\n static constructor_() {\n const points = arguments[0], factory = arguments[1]\n GeometryCollection.constructor_.call(this, points, factory)\n }\n copyInternal() {\n const points = new Array(this._geometries.length).fill(null)\n for (let i = 0; i < points.length; i++) \n points[i] = this._geometries[i].copy()\n \n return new MultiPoint(points, this._factory)\n }\n isValid() {\n return true\n }\n equalsExact() {\n if (arguments.length === 2 && (typeof arguments[1] === 'number' && arguments[0] instanceof Geometry)) {\n const other = arguments[0], tolerance = arguments[1]\n if (!this.isEquivalentClass(other)) \n return false\n \n return super.equalsExact.call(this, other, tolerance)\n } else {\n return super.equalsExact.apply(this, arguments)\n }\n }\n getCoordinate() {\n if (arguments.length === 1 && Number.isInteger(arguments[0])) {\n const n = arguments[0]\n return this._geometries[n].getCoordinate()\n } else {\n return super.getCoordinate.apply(this, arguments)\n }\n }\n getBoundaryDimension() {\n return Dimension.FALSE\n }\n getTypeCode() {\n return Geometry.TYPECODE_MULTIPOINT\n }\n getDimension() {\n return 0\n }\n getBoundary() {\n return this.getFactory().createGeometryCollection()\n }\n getGeometryType() {\n return Geometry.TYPENAME_MULTIPOINT\n }\n get interfaces_() {\n return [Puntal]\n }\n}\n","import LineString from './LineString'\nimport Geometry from './Geometry'\nimport IllegalArgumentException from '../../../../java/lang/IllegalArgumentException'\nimport CoordinateSequences from './CoordinateSequences'\nimport Dimension from './Dimension'\nexport default class LinearRing extends LineString {\n constructor() {\n super()\n LinearRing.constructor_.apply(this, arguments)\n }\n static constructor_() {\n const points = arguments[0], factory = arguments[1]\n LineString.constructor_.call(this, points, factory)\n this.validateConstruction()\n }\n copyInternal() {\n return new LinearRing(this._points.copy(), this._factory)\n }\n getBoundaryDimension() {\n return Dimension.FALSE\n }\n isClosed() {\n if (this.isEmpty()) \n return true\n \n return super.isClosed.call(this)\n }\n reverseInternal() {\n const seq = this._points.copy()\n CoordinateSequences.reverse(seq)\n return this.getFactory().createLinearRing(seq)\n }\n getTypeCode() {\n return Geometry.TYPECODE_LINEARRING\n }\n validateConstruction() {\n if (!this.isEmpty() && !super.isClosed.call(this)) \n throw new IllegalArgumentException('Points of LinearRing do not form a closed linestring')\n \n if (this.getCoordinateSequence().size() >= 1 && this.getCoordinateSequence().size() < LinearRing.MINIMUM_VALID_SIZE) \n throw new IllegalArgumentException('Invalid number of points in LinearRing (found ' + this.getCoordinateSequence().size() + ' - must be 0 or >= 4)')\n \n }\n getGeometryType() {\n return Geometry.TYPENAME_LINEARRING\n }\n}\nLinearRing.MINIMUM_VALID_SIZE = 4\n","import CoordinateXY from './CoordinateXY'\nimport Coordinate from './Coordinate'\nimport CoordinateXYM from './CoordinateXYM'\nimport CoordinateXYZM from './CoordinateXYZM'\nexport default class Coordinates {\n static measures(coordinate) {\n if (coordinate instanceof CoordinateXY) \n return 0\n else if (coordinate instanceof CoordinateXYM) \n return 1\n else if (coordinate instanceof CoordinateXYZM) \n return 1\n else if (coordinate instanceof Coordinate) \n return 0\n \n return 0\n }\n static dimension(coordinate) {\n if (coordinate instanceof CoordinateXY) \n return 2\n else if (coordinate instanceof CoordinateXYM) \n return 3\n else if (coordinate instanceof CoordinateXYZM) \n return 4\n else if (coordinate instanceof Coordinate) \n return 3\n \n return 3\n }\n static create() {\n if (arguments.length === 1) {\n const dimension = arguments[0]\n return Coordinates.create(dimension, 0)\n } else if (arguments.length === 2) {\n const dimension = arguments[0], measures = arguments[1]\n if (dimension === 2) \n return new CoordinateXY()\n else if (dimension === 3 && measures === 0) \n return new Coordinate()\n else if (dimension === 3 && measures === 1) \n return new CoordinateXYM()\n else if (dimension === 4 && measures === 1) \n return new CoordinateXYZM()\n \n return new Coordinate()\n }\n }\n}\n","import CoordinateList from './CoordinateList'\nimport Coordinates from './Coordinates'\nimport MathUtil from '../math/MathUtil'\nimport System from '../../../../java/lang/System'\nimport Comparator from '../../../../java/util/Comparator'\nimport Envelope from './Envelope'\nexport default class CoordinateArrays {\n static isRing(pts) {\n if (pts.length < 4) return false\n if (!pts[0].equals2D(pts[pts.length - 1])) return false\n return true\n }\n static ptNotInList(testPts, pts) {\n for (let i = 0; i < testPts.length; i++) {\n const testPt = testPts[i]\n if (CoordinateArrays.indexOf(testPt, pts) < 0) return testPt\n }\n return null\n }\n static scroll(coordinates, firstCoordinate) {\n const i = CoordinateArrays.indexOf(firstCoordinate, coordinates)\n if (i < 0) return null\n const newCoordinates = new Array(coordinates.length).fill(null)\n System.arraycopy(coordinates, i, newCoordinates, 0, coordinates.length - i)\n System.arraycopy(coordinates, 0, newCoordinates, coordinates.length - i, i)\n System.arraycopy(newCoordinates, 0, coordinates, 0, coordinates.length)\n }\n static equals() {\n if (arguments.length === 2) {\n const coord1 = arguments[0], coord2 = arguments[1]\n if (coord1 === coord2) return true\n if (coord1 === null || coord2 === null) return false\n if (coord1.length !== coord2.length) return false\n for (let i = 0; i < coord1.length; i++) \n if (!coord1[i].equals(coord2[i])) return false\n \n return true\n } else if (arguments.length === 3) {\n const coord1 = arguments[0], coord2 = arguments[1], coordinateComparator = arguments[2]\n if (coord1 === coord2) return true\n if (coord1 === null || coord2 === null) return false\n if (coord1.length !== coord2.length) return false\n for (let i = 0; i < coord1.length; i++) \n if (coordinateComparator.compare(coord1[i], coord2[i]) !== 0) return false\n \n return true\n }\n }\n static intersection(coordinates, env) {\n const coordList = new CoordinateList()\n for (let i = 0; i < coordinates.length; i++) \n if (env.intersects(coordinates[i])) coordList.add(coordinates[i], true)\n \n return coordList.toCoordinateArray()\n }\n static measures(pts) {\n if (pts === null || pts.length === 0) \n return 0\n \n let measures = 0\n for (const coordinate of pts) \n measures = Math.max(measures, Coordinates.measures(coordinate))\n \n return measures\n }\n static hasRepeatedPoints(coord) {\n for (let i = 1; i < coord.length; i++) \n if (coord[i - 1].equals(coord[i])) \n return true\n \n \n return false\n }\n static removeRepeatedPoints(coord) {\n if (!CoordinateArrays.hasRepeatedPoints(coord)) return coord\n const coordList = new CoordinateList(coord, false)\n return coordList.toCoordinateArray()\n }\n static reverse(coord) {\n const last = coord.length - 1\n const mid = Math.trunc(last / 2)\n for (let i = 0; i <= mid; i++) {\n const tmp = coord[i]\n coord[i] = coord[last - i]\n coord[last - i] = tmp\n }\n }\n static removeNull(coord) {\n let nonNull = 0\n for (let i = 0; i < coord.length; i++) \n if (coord[i] !== null) nonNull++\n \n const newCoord = new Array(nonNull).fill(null)\n if (nonNull === 0) return newCoord\n let j = 0\n for (let i = 0; i < coord.length; i++) \n if (coord[i] !== null) newCoord[j++] = coord[i]\n \n return newCoord\n }\n static copyDeep() {\n if (arguments.length === 1) {\n const coordinates = arguments[0]\n const copy = new Array(coordinates.length).fill(null)\n for (let i = 0; i < coordinates.length; i++) \n copy[i] = coordinates[i].copy()\n \n return copy\n } else if (arguments.length === 5) {\n const src = arguments[0], srcStart = arguments[1], dest = arguments[2], destStart = arguments[3], length = arguments[4]\n for (let i = 0; i < length; i++) \n dest[destStart + i] = src[srcStart + i].copy()\n \n }\n }\n static isEqualReversed(pts1, pts2) {\n for (let i = 0; i < pts1.length; i++) {\n const p1 = pts1[i]\n const p2 = pts2[pts1.length - i - 1]\n if (p1.compareTo(p2) !== 0) return false\n }\n return true\n }\n static envelope(coordinates) {\n const env = new Envelope()\n for (let i = 0; i < coordinates.length; i++) \n env.expandToInclude(coordinates[i])\n \n return env\n }\n static toCoordinateArray(coordList) {\n return coordList.toArray(CoordinateArrays.coordArrayType)\n }\n static dimension(pts) {\n if (pts === null || pts.length === 0) \n return 3\n \n let dimension = 0\n for (const coordinate of pts) \n dimension = Math.max(dimension, Coordinates.dimension(coordinate))\n \n return dimension\n }\n static atLeastNCoordinatesOrNothing(n, c) {\n return c.length >= n ? c : []\n }\n static indexOf(coordinate, coordinates) {\n for (let i = 0; i < coordinates.length; i++) \n if (coordinate.equals(coordinates[i])) \n return i\n \n \n return -1\n }\n static increasingDirection(pts) {\n for (let i = 0; i < Math.trunc(pts.length / 2); i++) {\n const j = pts.length - 1 - i\n const comp = pts[i].compareTo(pts[j])\n if (comp !== 0) return comp\n }\n return 1\n }\n static compare(pts1, pts2) {\n let i = 0\n while (i < pts1.length && i < pts2.length) {\n const compare = pts1[i].compareTo(pts2[i])\n if (compare !== 0) return compare\n i++\n }\n if (i < pts2.length) return -1\n if (i < pts1.length) return 1\n return 0\n }\n static minCoordinate(coordinates) {\n let minCoord = null\n for (let i = 0; i < coordinates.length; i++) \n if (minCoord === null || minCoord.compareTo(coordinates[i]) > 0) \n minCoord = coordinates[i]\n \n \n return minCoord\n }\n static extract(pts, start, end) {\n start = MathUtil.clamp(start, 0, pts.length)\n end = MathUtil.clamp(end, -1, pts.length)\n let npts = end - start + 1\n if (end < 0) npts = 0\n if (start >= pts.length) npts = 0\n if (end < start) npts = 0\n const extractPts = new Array(npts).fill(null)\n if (npts === 0) return extractPts\n let iPts = 0\n for (let i = start; i <= end; i++) \n extractPts[iPts++] = pts[i]\n \n return extractPts\n }\n}\nclass ForwardComparator {\n compare(o1, o2) {\n const pts1 = o1\n const pts2 = o2\n return CoordinateArrays.compare(pts1, pts2)\n }\n get interfaces_() {\n return [Comparator]\n }\n}\nclass BidirectionalComparator {\n compare(o1, o2) {\n const pts1 = o1\n const pts2 = o2\n if (pts1.length < pts2.length) return -1\n if (pts1.length > pts2.length) return 1\n if (pts1.length === 0) return 0\n const forwardComp = CoordinateArrays.compare(pts1, pts2)\n const isEqualRev = CoordinateArrays.isEqualReversed(pts1, pts2)\n if (isEqualRev) return 0\n return forwardComp\n }\n OLDcompare(o1, o2) {\n const pts1 = o1\n const pts2 = o2\n if (pts1.length < pts2.length) return -1\n if (pts1.length > pts2.length) return 1\n if (pts1.length === 0) return 0\n const dir1 = CoordinateArrays.increasingDirection(pts1)\n const dir2 = CoordinateArrays.increasingDirection(pts2)\n let i1 = dir1 > 0 ? 0 : pts1.length - 1\n let i2 = dir2 > 0 ? 0 : pts1.length - 1\n for (let i = 0; i < pts1.length; i++) {\n const comparePt = pts1[i1].compareTo(pts2[i2])\n if (comparePt !== 0) return comparePt\n i1 += dir1\n i2 += dir2\n }\n return 0\n }\n get interfaces_() {\n return [Comparator]\n }\n}\nCoordinateArrays.ForwardComparator = ForwardComparator\nCoordinateArrays.BidirectionalComparator = BidirectionalComparator\nCoordinateArrays.coordArrayType = new Array(0).fill(null)\n","export default class StringBuilder {\n constructor(str) {\n this.str = str\n }\n append(e) {\n this.str += e\n }\n setCharAt(i, c) {\n this.str = this.str.substr(0, i) + c + this.str.substr(i + 1)\n }\n toString() {\n return this.str\n }\n}","import hasInterface from '../../../../../hasInterface'\nimport Coordinate from '../Coordinate'\nimport Double from '../../../../../java/lang/Double'\nimport Coordinates from '../Coordinates'\nimport CoordinateSequence from '../CoordinateSequence'\nimport CoordinateArrays from '../CoordinateArrays'\nimport Serializable from '../../../../../java/io/Serializable'\nimport StringBuilder from '../../../../../java/lang/StringBuilder'\nexport default class CoordinateArraySequence {\n constructor() {\n CoordinateArraySequence.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._dimension = 3\n this._measures = 0\n this._coordinates = null\n if (arguments.length === 1) {\n if (arguments[0] instanceof Array) {\n const coordinates = arguments[0]\n CoordinateArraySequence.constructor_.call(this, coordinates, CoordinateArrays.dimension(coordinates), CoordinateArrays.measures(coordinates))\n } else if (Number.isInteger(arguments[0])) {\n const size = arguments[0]\n this._coordinates = new Array(size).fill(null)\n for (let i = 0; i < size; i++) \n this._coordinates[i] = new Coordinate()\n \n } else if (hasInterface(arguments[0], CoordinateSequence)) {\n const coordSeq = arguments[0]\n if (coordSeq === null) {\n this._coordinates = new Array(0).fill(null)\n return null\n }\n this._dimension = coordSeq.getDimension()\n this._measures = coordSeq.getMeasures()\n this._coordinates = new Array(coordSeq.size()).fill(null)\n for (let i = 0; i < this._coordinates.length; i++) \n this._coordinates[i] = coordSeq.getCoordinateCopy(i)\n \n }\n } else if (arguments.length === 2) {\n if (arguments[0] instanceof Array && Number.isInteger(arguments[1])) {\n const coordinates = arguments[0], dimension = arguments[1]\n CoordinateArraySequence.constructor_.call(this, coordinates, dimension, CoordinateArrays.measures(coordinates))\n } else if (Number.isInteger(arguments[0]) && Number.isInteger(arguments[1])) {\n const size = arguments[0], dimension = arguments[1]\n this._coordinates = new Array(size).fill(null)\n this._dimension = dimension\n for (let i = 0; i < size; i++) \n this._coordinates[i] = Coordinates.create(dimension)\n \n }\n } else if (arguments.length === 3) {\n if (Number.isInteger(arguments[2]) && (arguments[0] instanceof Array && Number.isInteger(arguments[1]))) {\n const coordinates = arguments[0], dimension = arguments[1], measures = arguments[2]\n this._dimension = dimension\n this._measures = measures\n if (coordinates === null) \n this._coordinates = new Array(0).fill(null)\n else \n this._coordinates = coordinates\n \n } else if (Number.isInteger(arguments[2]) && (Number.isInteger(arguments[0]) && Number.isInteger(arguments[1]))) {\n const size = arguments[0], dimension = arguments[1], measures = arguments[2]\n this._coordinates = new Array(size).fill(null)\n this._dimension = dimension\n this._measures = measures\n for (let i = 0; i < size; i++) \n this._coordinates[i] = this.createCoordinate()\n \n }\n }\n }\n getM(index) {\n if (this.hasM()) \n return this._coordinates[index].getM()\n else \n return Double.NaN\n \n }\n setOrdinate(index, ordinateIndex, value) {\n switch (ordinateIndex) {\n case CoordinateSequence.X:\n this._coordinates[index].x = value\n break\n case CoordinateSequence.Y:\n this._coordinates[index].y = value\n break\n default:\n this._coordinates[index].setOrdinate(ordinateIndex, value)\n }\n }\n getZ(index) {\n if (this.hasZ()) \n return this._coordinates[index].getZ()\n else \n return Double.NaN\n \n }\n size() {\n return this._coordinates.length\n }\n getOrdinate(index, ordinateIndex) {\n switch (ordinateIndex) {\n case CoordinateSequence.X:\n return this._coordinates[index].x\n case CoordinateSequence.Y:\n return this._coordinates[index].y\n default:\n return this._coordinates[index].getOrdinate(ordinateIndex)\n }\n }\n getCoordinate() {\n if (arguments.length === 1) {\n const i = arguments[0]\n return this._coordinates[i]\n } else if (arguments.length === 2) {\n const index = arguments[0], coord = arguments[1]\n coord.setCoordinate(this._coordinates[index])\n }\n }\n getCoordinateCopy(i) {\n const copy = this.createCoordinate()\n copy.setCoordinate(this._coordinates[i])\n return copy\n }\n createCoordinate() {\n return Coordinates.create(this.getDimension(), this.getMeasures())\n }\n getDimension() {\n return this._dimension\n }\n getX(index) {\n return this._coordinates[index].x\n }\n getMeasures() {\n return this._measures\n }\n expandEnvelope(env) {\n for (let i = 0; i < this._coordinates.length; i++) \n env.expandToInclude(this._coordinates[i])\n \n return env\n }\n copy() {\n const cloneCoordinates = new Array(this.size()).fill(null)\n for (let i = 0; i < this._coordinates.length; i++) {\n const duplicate = this.createCoordinate()\n duplicate.setCoordinate(this._coordinates[i])\n cloneCoordinates[i] = duplicate\n }\n return new CoordinateArraySequence(cloneCoordinates, this._dimension, this._measures)\n }\n toString() {\n if (this._coordinates.length > 0) {\n const strBuilder = new StringBuilder(17 * this._coordinates.length)\n strBuilder.append('(')\n strBuilder.append(this._coordinates[0])\n for (let i = 1; i < this._coordinates.length; i++) {\n strBuilder.append(', ')\n strBuilder.append(this._coordinates[i])\n }\n strBuilder.append(')')\n return strBuilder.toString()\n } else {\n return '()'\n }\n }\n getY(index) {\n return this._coordinates[index].y\n }\n toCoordinateArray() {\n return this._coordinates\n }\n get interfaces_() {\n return [CoordinateSequence, Serializable]\n }\n}\n","import CoordinateSequenceFactory from '../CoordinateSequenceFactory'\nimport hasInterface from '../../../../../hasInterface'\nimport CoordinateArraySequence from './CoordinateArraySequence'\nimport CoordinateSequence from '../CoordinateSequence'\nimport Serializable from '../../../../../java/io/Serializable'\nexport default class CoordinateArraySequenceFactory {\n static instance() {\n return CoordinateArraySequenceFactory.instanceObject\n }\n readResolve() {\n return CoordinateArraySequenceFactory.instance()\n }\n create() {\n if (arguments.length === 1) {\n if (arguments[0] instanceof Array) {\n const coordinates = arguments[0]\n return new CoordinateArraySequence(coordinates)\n } else if (hasInterface(arguments[0], CoordinateSequence)) {\n const coordSeq = arguments[0]\n return new CoordinateArraySequence(coordSeq)\n }\n } else if (arguments.length === 2) {\n let size = arguments[0], dimension = arguments[1]\n if (dimension > 3) dimension = 3\n if (dimension < 2) dimension = 2\n return new CoordinateArraySequence(size, dimension)\n } else if (arguments.length === 3) {\n let size = arguments[0], dimension = arguments[1], measures = arguments[2]\n let spatial = dimension - measures\n if (measures > 1) \n measures = 1\n \n if (spatial > 3) \n spatial = 3\n \n if (spatial < 2) spatial = 2\n return new CoordinateArraySequence(size, spatial + measures, measures)\n }\n }\n get interfaces_() {\n return [CoordinateSequenceFactory, Serializable]\n }\n}\nCoordinateArraySequenceFactory.instanceObject = new CoordinateArraySequenceFactory()\n","import Geometry from './Geometry'\nimport GeometryCollection from './GeometryCollection'\nimport Polygonal from './Polygonal'\nimport ArrayList from '../../../../java/util/ArrayList'\nexport default class MultiPolygon extends GeometryCollection {\n constructor() {\n super()\n MultiPolygon.constructor_.apply(this, arguments)\n }\n static constructor_() {\n const polygons = arguments[0], factory = arguments[1]\n GeometryCollection.constructor_.call(this, polygons, factory)\n }\n copyInternal() {\n const polygons = new Array(this._geometries.length).fill(null)\n for (let i = 0; i < polygons.length; i++) \n polygons[i] = this._geometries[i].copy()\n \n return new MultiPolygon(polygons, this._factory)\n }\n equalsExact() {\n if (arguments.length === 2 && (typeof arguments[1] === 'number' && arguments[0] instanceof Geometry)) {\n const other = arguments[0], tolerance = arguments[1]\n if (!this.isEquivalentClass(other)) \n return false\n \n return super.equalsExact.call(this, other, tolerance)\n } else {\n return super.equalsExact.apply(this, arguments)\n }\n }\n getBoundaryDimension() {\n return 1\n }\n getTypeCode() {\n return Geometry.TYPECODE_MULTIPOLYGON\n }\n getDimension() {\n return 2\n }\n getBoundary() {\n if (this.isEmpty()) \n return this.getFactory().createMultiLineString()\n \n const allRings = new ArrayList()\n for (let i = 0; i < this._geometries.length; i++) {\n const polygon = this._geometries[i]\n const rings = polygon.getBoundary()\n for (let j = 0; j < rings.getNumGeometries(); j++) \n allRings.add(rings.getGeometryN(j))\n \n }\n const allRingsArray = new Array(allRings.size()).fill(null)\n return this.getFactory().createMultiLineString(allRings.toArray(allRingsArray))\n }\n getGeometryType() {\n return Geometry.TYPENAME_MULTIPOLYGON\n }\n get interfaces_() {\n return [Polygonal]\n }\n}\n","/**\n * @see http://download.oracle.com/javase/6/docs/api/java/util/Map.html\n */\nexport default class Map {\n /**\n * Returns the value to which the specified key is mapped, or null if this map\n * contains no mapping for the key.\n * @param {Object} key\n * @return {Object}\n */\n get() { }\n\n /**\n * Associates the specified value with the specified key in this map (optional\n * operation).\n * @param {Object} key\n * @param {Object} value\n * @return {Object}\n */\n put() { }\n\n /**\n * Returns the number of key-value mappings in this map.\n * @return {number}\n */\n size() { }\n\n /**\n * Returns a Collection view of the values contained in this map.\n * @return {javascript.util.Collection}\n */\n values() { }\n\n /**\n * Returns a {@link Set} view of the mappings contained in this map.\n * The set is backed by the map, so changes to the map are\n * reflected in the set, and vice-versa. If the map is modified\n * while an iteration over the set is in progress (except through\n * the iterator's own remove operation, or through the\n * setValue operation on a map entry returned by the\n * iterator) the results of the iteration are undefined. The set\n * supports element removal, which removes the corresponding\n * mapping from the map, via the Iterator.remove,\n * Set.remove, removeAll, retainAll and\n * clear operations. It does not support the\n * add or addAll operations.\n *\n * @return {Set} a set view of the mappings contained in this map\n */\n entrySet() { }\n}\n","import Collection from './Collection'\nimport NoSuchElementException from './NoSuchElementException'\nimport UnsupportedOperationException from '../lang/UnsupportedOperationException'\nimport Set from './Set'\n\n/**\n * @see http://docs.oracle.com/javase/6/docs/api/java/util/HashSet.html\n */\nexport default class HashSet extends Set {\n constructor(o) {\n super()\n this.map = new Map()\n if (o instanceof Collection)\n this.addAll(o)\n }\n\n contains(o) {\n const hashCode = o.hashCode ? o.hashCode() : o\n if (this.map.has(hashCode))\n return true\n return false\n }\n\n add(o) {\n const hashCode = o.hashCode ? o.hashCode() : o\n if (this.map.has(hashCode))\n return false\n return !!this.map.set(hashCode, o)\n }\n\n addAll(c) {\n for (const e of c)\n this.add(e)\n return true\n }\n\n remove() {\n throw new UnsupportedOperationException()\n }\n\n size() {\n return this.map.size\n }\n\n isEmpty() {\n return this.map.size === 0\n }\n\n toArray() {\n return Array.from(this.map.values())\n }\n\n iterator() {\n return new Iterator(this.map)\n }\n\n [Symbol.iterator]() {\n return this.map\n }\n}\n\nclass Iterator {\n constructor(map) {\n this.iterator = map.values()\n const { done, value } = this.iterator.next()\n this.done = done\n this.value = value\n }\n\n next() {\n if (this.done)\n throw new NoSuchElementException()\n const current = this.value\n const { done, value } = this.iterator.next()\n this.done = done\n this.value = value\n return current\n }\n\n hasNext() {\n return !this.done\n }\n\n remove() {\n throw new UnsupportedOperationException()\n }\n}\n","import ArrayList from './ArrayList'\nimport MapInterface from './Map'\nimport HashSet from './HashSet'\n\n/**\n * @see http://download.oracle.com/javase/6/docs/api/java/util/HashMap.html\n */\nexport default class HashMap extends MapInterface {\n constructor() {\n super()\n this.map = new Map()\n }\n\n get(key) {\n return this.map.get(key) || null\n }\n\n put(key, value) {\n this.map.set(key, value)\n return value\n }\n\n values() {\n const arrayList = new ArrayList()\n const it = this.map.values()\n let o = it.next()\n while (!o.done) {\n arrayList.add(o.value)\n o = it.next()\n }\n return arrayList\n }\n\n entrySet() {\n const hashSet = new HashSet()\n this.map.entries().forEach(entry => hashSet.add(entry))\n return hashSet\n }\n\n size() {\n return this.map.size()\n }\n}\n","import HashMap from '../../../../java/util/HashMap'\nimport Coordinate from './Coordinate'\nimport Double from '../../../../java/lang/Double'\nimport Integer from '../../../../java/lang/Integer'\nimport Comparable from '../../../../java/lang/Comparable'\nimport Serializable from '../../../../java/io/Serializable'\nexport default class PrecisionModel {\n constructor() {\n PrecisionModel.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._modelType = null\n this._scale = null\n if (arguments.length === 0) \n this._modelType = PrecisionModel.FLOATING\n else if (arguments.length === 1) \n if (arguments[0] instanceof Type) {\n const modelType = arguments[0]\n this._modelType = modelType\n if (modelType === PrecisionModel.FIXED) \n this.setScale(1.0)\n \n } else if (typeof arguments[0] === 'number') {\n const scale = arguments[0]\n this._modelType = PrecisionModel.FIXED\n this.setScale(scale)\n } else if (arguments[0] instanceof PrecisionModel) {\n const pm = arguments[0]\n this._modelType = pm._modelType\n this._scale = pm._scale\n }\n \n }\n static mostPrecise(pm1, pm2) {\n if (pm1.compareTo(pm2) >= 0) return pm1\n return pm2\n }\n equals(other) {\n if (!(other instanceof PrecisionModel)) \n return false\n \n const otherPrecisionModel = other\n return this._modelType === otherPrecisionModel._modelType && this._scale === otherPrecisionModel._scale\n }\n compareTo(o) {\n const other = o\n const sigDigits = this.getMaximumSignificantDigits()\n const otherSigDigits = other.getMaximumSignificantDigits()\n return Integer.compare(sigDigits, otherSigDigits)\n }\n getScale() {\n return this._scale\n }\n isFloating() {\n return this._modelType === PrecisionModel.FLOATING || this._modelType === PrecisionModel.FLOATING_SINGLE\n }\n getType() {\n return this._modelType\n }\n toString() {\n let description = 'UNKNOWN'\n if (this._modelType === PrecisionModel.FLOATING) \n description = 'Floating'\n else if (this._modelType === PrecisionModel.FLOATING_SINGLE) \n description = 'Floating-Single'\n else if (this._modelType === PrecisionModel.FIXED) \n description = 'Fixed (Scale=' + this.getScale() + ')'\n \n return description\n }\n makePrecise() {\n if (typeof arguments[0] === 'number') {\n const val = arguments[0]\n if (Double.isNaN(val)) return val\n if (this._modelType === PrecisionModel.FLOATING_SINGLE) {\n const floatSingleVal = val\n return floatSingleVal\n }\n if (this._modelType === PrecisionModel.FIXED) \n return Math.round(val * this._scale) / this._scale\n \n return val\n } else if (arguments[0] instanceof Coordinate) {\n const coord = arguments[0]\n if (this._modelType === PrecisionModel.FLOATING) return null\n coord.x = this.makePrecise(coord.x)\n coord.y = this.makePrecise(coord.y)\n }\n }\n getMaximumSignificantDigits() {\n let maxSigDigits = 16\n if (this._modelType === PrecisionModel.FLOATING) \n maxSigDigits = 16\n else if (this._modelType === PrecisionModel.FLOATING_SINGLE) \n maxSigDigits = 6\n else if (this._modelType === PrecisionModel.FIXED) \n maxSigDigits = 1 + Math.trunc(Math.ceil(Math.log(this.getScale()) / Math.log(10)))\n \n return maxSigDigits\n }\n setScale(scale) {\n this._scale = Math.abs(scale)\n }\n get interfaces_() {\n return [Serializable, Comparable]\n }\n}\nclass Type {\n constructor() {\n Type.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._name = null\n const name = arguments[0]\n this._name = name\n Type.nameToTypeMap.put(name, this)\n }\n readResolve() {\n return Type.nameToTypeMap.get(this._name)\n }\n toString() {\n return this._name\n }\n get interfaces_() {\n return [Serializable]\n }\n}\nType.nameToTypeMap = new HashMap()\nPrecisionModel.Type = Type\nPrecisionModel.FIXED = new Type('FIXED')\nPrecisionModel.FLOATING = new Type('FLOATING')\nPrecisionModel.FLOATING_SINGLE = new Type('FLOATING SINGLE')\nPrecisionModel.maximumPreciseValue = 9007199254740992.0\n","import Geometry from './Geometry'\nimport Lineal from './Lineal'\nimport GeometryCollection from './GeometryCollection'\nimport UnsupportedOperationException from '../../../../java/lang/UnsupportedOperationException'\nimport Dimension from './Dimension'\nexport default class MultiLineString extends GeometryCollection {\n constructor() {\n super()\n MultiLineString.constructor_.apply(this, arguments)\n }\n static constructor_() {\n const lineStrings = arguments[0], factory = arguments[1]\n GeometryCollection.constructor_.call(this, lineStrings, factory)\n }\n copyInternal() {\n const lineStrings = new Array(this._geometries.length).fill(null)\n for (let i = 0; i < lineStrings.length; i++) \n lineStrings[i] = this._geometries[i].copy()\n \n return new MultiLineString(lineStrings, this._factory)\n }\n equalsExact() {\n if (arguments.length === 2 && (typeof arguments[1] === 'number' && arguments[0] instanceof Geometry)) {\n const other = arguments[0], tolerance = arguments[1]\n if (!this.isEquivalentClass(other)) \n return false\n \n return super.equalsExact.call(this, other, tolerance)\n } else {\n return super.equalsExact.apply(this, arguments)\n }\n }\n getBoundaryDimension() {\n if (this.isClosed()) \n return Dimension.FALSE\n \n return 0\n }\n isClosed() {\n if (this.isEmpty()) \n return false\n \n for (let i = 0; i < this._geometries.length; i++) \n if (!this._geometries[i].isClosed()) \n return false\n \n \n return true\n }\n getTypeCode() {\n return Geometry.TYPECODE_MULTILINESTRING\n }\n getDimension() {\n return 1\n }\n getBoundary() {\n throw new UnsupportedOperationException()\n }\n getGeometryType() {\n return Geometry.TYPENAME_MULTILINESTRING\n }\n get interfaces_() {\n return [Lineal]\n }\n}\n","import CoordinateSequenceFactory from './CoordinateSequenceFactory'\nimport LineString from './LineString'\nimport hasInterface from '../../../../hasInterface'\nimport Coordinate from './Coordinate'\nimport IllegalArgumentException from '../../../../java/lang/IllegalArgumentException'\nimport Point from './Point'\nimport Polygon from './Polygon'\nimport MultiPoint from './MultiPoint'\nimport LinearRing from './LinearRing'\nimport CoordinateArraySequenceFactory from './impl/CoordinateArraySequenceFactory'\nimport MultiPolygon from './MultiPolygon'\nimport CoordinateSequences from './CoordinateSequences'\nimport CoordinateSequence from './CoordinateSequence'\nimport GeometryCollection from './GeometryCollection'\nimport PrecisionModel from './PrecisionModel'\nimport Serializable from '../../../../java/io/Serializable'\nimport Assert from '../util/Assert'\nimport MultiLineString from './MultiLineString'\nexport default class GeometryFactory {\n constructor() {\n GeometryFactory.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._precisionModel = null\n this._coordinateSequenceFactory = null\n this._SRID = null\n if (arguments.length === 0) {\n GeometryFactory.constructor_.call(this, new PrecisionModel(), 0)\n } else if (arguments.length === 1) {\n if (hasInterface(arguments[0], CoordinateSequenceFactory)) {\n const coordinateSequenceFactory = arguments[0]\n GeometryFactory.constructor_.call(this, new PrecisionModel(), 0, coordinateSequenceFactory)\n } else if (arguments[0] instanceof PrecisionModel) {\n const precisionModel = arguments[0]\n GeometryFactory.constructor_.call(this, precisionModel, 0, GeometryFactory.getDefaultCoordinateSequenceFactory())\n }\n } else if (arguments.length === 2) {\n const precisionModel = arguments[0], SRID = arguments[1]\n GeometryFactory.constructor_.call(this, precisionModel, SRID, GeometryFactory.getDefaultCoordinateSequenceFactory())\n } else if (arguments.length === 3) {\n const precisionModel = arguments[0], SRID = arguments[1], coordinateSequenceFactory = arguments[2]\n this._precisionModel = precisionModel\n this._coordinateSequenceFactory = coordinateSequenceFactory\n this._SRID = SRID\n }\n }\n static toMultiPolygonArray(multiPolygons) {\n const multiPolygonArray = new Array(multiPolygons.size()).fill(null)\n return multiPolygons.toArray(multiPolygonArray)\n }\n static toGeometryArray(geometries) {\n if (geometries === null) return null\n const geometryArray = new Array(geometries.size()).fill(null)\n return geometries.toArray(geometryArray)\n }\n static getDefaultCoordinateSequenceFactory() {\n return CoordinateArraySequenceFactory.instance()\n }\n static toMultiLineStringArray(multiLineStrings) {\n const multiLineStringArray = new Array(multiLineStrings.size()).fill(null)\n return multiLineStrings.toArray(multiLineStringArray)\n }\n static toLineStringArray(lineStrings) {\n const lineStringArray = new Array(lineStrings.size()).fill(null)\n return lineStrings.toArray(lineStringArray)\n }\n static toMultiPointArray(multiPoints) {\n const multiPointArray = new Array(multiPoints.size()).fill(null)\n return multiPoints.toArray(multiPointArray)\n }\n static toLinearRingArray(linearRings) {\n const linearRingArray = new Array(linearRings.size()).fill(null)\n return linearRings.toArray(linearRingArray)\n }\n static toPointArray(points) {\n const pointArray = new Array(points.size()).fill(null)\n return points.toArray(pointArray)\n }\n static toPolygonArray(polygons) {\n const polygonArray = new Array(polygons.size()).fill(null)\n return polygons.toArray(polygonArray)\n }\n static createPointFromInternalCoord(coord, exemplar) {\n exemplar.getPrecisionModel().makePrecise(coord)\n return exemplar.getFactory().createPoint(coord)\n }\n createEmpty(dimension) {\n switch (dimension) {\n case -1:\n return this.createGeometryCollection()\n case 0:\n return this.createPoint()\n case 1:\n return this.createLineString()\n case 2:\n return this.createPolygon()\n default:\n throw new IllegalArgumentException('Invalid dimension: ' + dimension)\n }\n }\n toGeometry(envelope) {\n if (envelope.isNull()) \n return this.createPoint()\n \n if (envelope.getMinX() === envelope.getMaxX() && envelope.getMinY() === envelope.getMaxY()) \n return this.createPoint(new Coordinate(envelope.getMinX(), envelope.getMinY()))\n \n if (envelope.getMinX() === envelope.getMaxX() || envelope.getMinY() === envelope.getMaxY()) \n return this.createLineString([new Coordinate(envelope.getMinX(), envelope.getMinY()), new Coordinate(envelope.getMaxX(), envelope.getMaxY())])\n \n return this.createPolygon(this.createLinearRing([new Coordinate(envelope.getMinX(), envelope.getMinY()), new Coordinate(envelope.getMinX(), envelope.getMaxY()), new Coordinate(envelope.getMaxX(), envelope.getMaxY()), new Coordinate(envelope.getMaxX(), envelope.getMinY()), new Coordinate(envelope.getMinX(), envelope.getMinY())]), null)\n }\n createLineString() {\n if (arguments.length === 0) \n return this.createLineString(this.getCoordinateSequenceFactory().create([]))\n else if (arguments.length === 1) \n if (arguments[0] instanceof Array) {\n const coordinates = arguments[0]\n return this.createLineString(coordinates !== null ? this.getCoordinateSequenceFactory().create(coordinates) : null)\n } else if (hasInterface(arguments[0], CoordinateSequence)) {\n const coordinates = arguments[0]\n return new LineString(coordinates, this)\n }\n \n }\n createMultiLineString() {\n if (arguments.length === 0) {\n return new MultiLineString(null, this)\n } else if (arguments.length === 1) {\n const lineStrings = arguments[0]\n return new MultiLineString(lineStrings, this)\n }\n }\n buildGeometry(geomList) {\n let geomType = null\n let isHeterogeneous = false\n let hasGeometryCollection = false\n for (let i = geomList.iterator(); i.hasNext(); ) {\n const geom = i.next()\n const partType = geom.getTypeCode()\n if (geomType === null) \n geomType = partType\n \n if (partType !== geomType) \n isHeterogeneous = true\n \n if (geom instanceof GeometryCollection) hasGeometryCollection = true\n }\n if (geomType === null) \n return this.createGeometryCollection()\n \n if (isHeterogeneous || hasGeometryCollection) \n return this.createGeometryCollection(GeometryFactory.toGeometryArray(geomList))\n \n const geom0 = geomList.iterator().next()\n const isCollection = geomList.size() > 1\n if (isCollection) {\n if (geom0 instanceof Polygon) \n return this.createMultiPolygon(GeometryFactory.toPolygonArray(geomList))\n else if (geom0 instanceof LineString) \n return this.createMultiLineString(GeometryFactory.toLineStringArray(geomList))\n else if (geom0 instanceof Point) \n return this.createMultiPoint(GeometryFactory.toPointArray(geomList))\n \n Assert.shouldNeverReachHere('Unhandled geometry type: ' + geom0.getGeometryType())\n }\n return geom0\n }\n createMultiPointFromCoords(coordinates) {\n return this.createMultiPoint(coordinates !== null ? this.getCoordinateSequenceFactory().create(coordinates) : null)\n }\n createPoint() {\n if (arguments.length === 0) \n return this.createPoint(this.getCoordinateSequenceFactory().create([]))\n else if (arguments.length === 1) \n if (arguments[0] instanceof Coordinate) {\n const coordinate = arguments[0]\n return this.createPoint(coordinate !== null ? this.getCoordinateSequenceFactory().create([coordinate]) : null)\n } else if (hasInterface(arguments[0], CoordinateSequence)) {\n const coordinates = arguments[0]\n return new Point(coordinates, this)\n }\n \n }\n getCoordinateSequenceFactory() {\n return this._coordinateSequenceFactory\n }\n createPolygon() {\n if (arguments.length === 0) {\n return this.createPolygon(null, null)\n } else if (arguments.length === 1) {\n if (hasInterface(arguments[0], CoordinateSequence)) {\n const shell = arguments[0]\n return this.createPolygon(this.createLinearRing(shell))\n } else if (arguments[0] instanceof Array) {\n const shell = arguments[0]\n return this.createPolygon(this.createLinearRing(shell))\n } else if (arguments[0] instanceof LinearRing) {\n const shell = arguments[0]\n return this.createPolygon(shell, null)\n }\n } else if (arguments.length === 2) {\n const shell = arguments[0], holes = arguments[1]\n return new Polygon(shell, holes, this)\n }\n }\n getSRID() {\n return this._SRID\n }\n createGeometryCollection() {\n if (arguments.length === 0) {\n return new GeometryCollection(null, this)\n } else if (arguments.length === 1) {\n const geometries = arguments[0]\n return new GeometryCollection(geometries, this)\n }\n }\n getPrecisionModel() {\n return this._precisionModel\n }\n createLinearRing() {\n if (arguments.length === 0) \n return this.createLinearRing(this.getCoordinateSequenceFactory().create([]))\n else if (arguments.length === 1) \n if (arguments[0] instanceof Array) {\n const coordinates = arguments[0]\n return this.createLinearRing(coordinates !== null ? this.getCoordinateSequenceFactory().create(coordinates) : null)\n } else if (hasInterface(arguments[0], CoordinateSequence)) {\n const coordinates = arguments[0]\n return new LinearRing(coordinates, this)\n }\n \n }\n createMultiPolygon() {\n if (arguments.length === 0) {\n return new MultiPolygon(null, this)\n } else if (arguments.length === 1) {\n const polygons = arguments[0]\n return new MultiPolygon(polygons, this)\n }\n }\n createMultiPoint() {\n if (arguments.length === 0) \n return new MultiPoint(null, this)\n else if (arguments.length === 1) \n if (arguments[0] instanceof Array) {\n const point = arguments[0]\n return new MultiPoint(point, this)\n } else if (hasInterface(arguments[0], CoordinateSequence)) {\n const coordinates = arguments[0]\n if (coordinates === null) \n return this.createMultiPoint(new Array(0).fill(null))\n \n const points = new Array(coordinates.size()).fill(null)\n for (let i = 0; i < coordinates.size(); i++) {\n const ptSeq = this.getCoordinateSequenceFactory().create(1, coordinates.getDimension(), coordinates.getMeasures())\n CoordinateSequences.copy(coordinates, i, ptSeq, 0, 1)\n points[i] = this.createPoint(ptSeq)\n }\n return this.createMultiPoint(points)\n }\n \n }\n get interfaces_() {\n return [Serializable]\n }\n}\n","import Coordinate from '../geom/Coordinate'\nimport GeometryFactory from '../geom/GeometryFactory'\n\n/**\n * The coordinate layout for geometries, indicating whether a 3rd or 4th z ('Z')\n * or measure ('M') coordinate is available. Supported values are `'XY'`,\n * `'XYZ'`, `'XYM'`, `'XYZM'`.\n * @enum {string}\n */\nconst GeometryLayout = {\n XY: 'XY',\n XYZ: 'XYZ',\n XYM: 'XYM',\n XYZM: 'XYZM',\n}\n\n/**\n * The geometry type. One of `'Point'`, `'LineString'`, `'LinearRing'`,\n * `'Polygon'`, `'MultiPoint'`, `'MultiLineString'`, `'MultiPolygon'`,\n * `'GeometryCollection'`, `'Circle'`.\n * @enum {string}\n */\nconst GeometryType = {\n POINT: 'Point',\n LINE_STRING: 'LineString',\n LINEAR_RING: 'LinearRing',\n POLYGON: 'Polygon',\n MULTI_POINT: 'MultiPoint',\n MULTI_LINE_STRING: 'MultiLineString',\n MULTI_POLYGON: 'MultiPolygon',\n GEOMETRY_COLLECTION: 'GeometryCollection',\n CIRCLE: 'Circle',\n}\n\n/**\n * @typedef {Object} Options\n * @property {boolean} [splitCollection=false] Whether to split GeometryCollections into\n * multiple features on reading.\n */\n\n/**\n * @typedef {Object} Token\n * @property {number} type\n * @property {number|string} [value]\n * @property {number} position\n */\n\n/**\n * @const\n * @type {string}\n */\nconst EMPTY = 'EMPTY'\n\n/**\n * @const\n * @type {string}\n */\nconst Z = 'Z'\n\n/**\n * @const\n * @type {string}\n */\nconst M = 'M'\n\n/**\n * @const\n * @type {string}\n */\nconst ZM = 'ZM'\n\n/**\n * @const\n * @enum {number}\n */\nconst TokenType = {\n TEXT: 1,\n LEFT_PAREN: 2,\n RIGHT_PAREN: 3,\n NUMBER: 4,\n COMMA: 5,\n EOF: 6,\n}\n\n/**\n * @const\n * @type {Object}\n */\nconst WKTGeometryType = {}\nfor (const type in GeometryType) \n WKTGeometryType[type] = GeometryType[type].toUpperCase()\n\n\n/**\n * Class to tokenize a WKT string.\n */\nclass Lexer {\n /**\n * @param {string} wkt WKT string.\n */\n constructor(wkt) {\n /**\n * @type {string}\n */\n this.wkt = wkt\n\n /**\n * @type {number}\n * @private\n */\n this.index_ = -1\n }\n\n /**\n * @param {string} c Character.\n * @return {boolean} Whether the character is alphabetic.\n * @private\n */\n isAlpha_(c) {\n return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')\n }\n\n /**\n * @param {string} c Character.\n * @param {boolean=} opt_decimal Whether the string number\n * contains a dot, i.e. is a decimal number.\n * @return {boolean} Whether the character is numeric.\n * @private\n */\n isNumeric_(c, opt_decimal) {\n const decimal = opt_decimal !== undefined ? opt_decimal : false\n return (c >= '0' && c <= '9') || (c == '.' && !decimal)\n }\n\n /**\n * @param {string} c Character.\n * @return {boolean} Whether the character is whitespace.\n * @private\n */\n isWhiteSpace_(c) {\n return c == ' ' || c == '\\t' || c == '\\r' || c == '\\n'\n }\n\n /**\n * @return {string} Next string character.\n * @private\n */\n nextChar_() {\n return this.wkt.charAt(++this.index_)\n }\n\n /**\n * Fetch and return the next token.\n * @return {!Token} Next string token.\n */\n nextToken() {\n const c = this.nextChar_()\n const position = this.index_\n /** @type {number|string} */\n let value = c\n let type\n\n if (c == '(') {\n type = TokenType.LEFT_PAREN\n } else if (c == ',') {\n type = TokenType.COMMA\n } else if (c == ')') {\n type = TokenType.RIGHT_PAREN\n } else if (this.isNumeric_(c) || c == '-') {\n type = TokenType.NUMBER\n value = this.readNumber_()\n } else if (this.isAlpha_(c)) {\n type = TokenType.TEXT\n value = this.readText_()\n } else if (this.isWhiteSpace_(c)) {\n return this.nextToken()\n } else if (c === '') {\n type = TokenType.EOF\n } else {\n throw new Error('Unexpected character: ' + c)\n }\n\n return { position: position, value: value, type: type }\n }\n\n /**\n * @return {number} Numeric token value.\n * @private\n */\n readNumber_() {\n let c\n const index = this.index_\n let decimal = false\n let scientificNotation = false\n do {\n if (c == '.') \n decimal = true\n else if (c == 'e' || c == 'E') \n scientificNotation = true\n \n c = this.nextChar_()\n } while (\n this.isNumeric_(c, decimal) ||\n // if we haven't detected a scientific number before, 'e' or 'E'\n // hint that we should continue to read\n (!scientificNotation && (c == 'e' || c == 'E')) ||\n // once we know that we have a scientific number, both '-' and '+'\n // are allowed\n (scientificNotation && (c == '-' || c == '+'))\n )\n return parseFloat(this.wkt.substring(index, this.index_--))\n }\n\n /**\n * @return {string} String token value.\n * @private\n */\n readText_() {\n let c\n const index = this.index_\n do \n c = this.nextChar_()\n while (this.isAlpha_(c))\n return this.wkt.substring(index, this.index_--).toUpperCase()\n }\n}\n\n/**\n * Class to parse the tokens from the WKT string.\n */\nclass Parser {\n /**\n * @param {Lexer} lexer The lexer.\n */\n constructor(lexer, factory) {\n /**\n * @type {Lexer}\n * @private\n */\n this.lexer_ = lexer\n\n /**\n * @type {Token}\n * @private\n */\n this.token_\n\n /**\n * @type {import(\"../geom/GeometryLayout.js\").default}\n * @private\n */\n this.layout_ = GeometryLayout.XY\n\n this.factory = factory\n }\n\n /**\n * Fetch the next token form the lexer and replace the active token.\n * @private\n */\n consume_() {\n this.token_ = this.lexer_.nextToken()\n }\n\n /**\n * Tests if the given type matches the type of the current token.\n * @param {TokenType} type Token type.\n * @return {boolean} Whether the token matches the given type.\n */\n isTokenType(type) {\n const isMatch = this.token_.type == type\n return isMatch\n }\n\n /**\n * If the given type matches the current token, consume it.\n * @param {TokenType} type Token type.\n * @return {boolean} Whether the token matches the given type.\n */\n match(type) {\n const isMatch = this.isTokenType(type)\n if (isMatch) \n this.consume_()\n \n return isMatch\n }\n\n /**\n * Try to parse the tokens provided by the lexer.\n * @return {import(\"../geom/Geometry.js\").default} The geometry.\n */\n parse() {\n this.consume_()\n const geometry = this.parseGeometry_()\n return geometry\n }\n\n /**\n * Try to parse the dimensional info.\n * @return {import(\"../geom/GeometryLayout.js\").default} The layout.\n * @private\n */\n parseGeometryLayout_() {\n let layout = GeometryLayout.XY\n const dimToken = this.token_\n if (this.isTokenType(TokenType.TEXT)) {\n const dimInfo = dimToken.value\n if (dimInfo === Z) \n layout = GeometryLayout.XYZ\n else if (dimInfo === M) \n layout = GeometryLayout.XYM\n else if (dimInfo === ZM) \n layout = GeometryLayout.XYZM\n \n if (layout !== GeometryLayout.XY) \n this.consume_()\n \n }\n return layout\n }\n\n /**\n * @return {!Array} A collection of geometries.\n * @private\n */\n parseGeometryCollectionText_() {\n if (this.match(TokenType.LEFT_PAREN)) {\n const geometries = []\n do \n geometries.push(this.parseGeometry_())\n while (this.match(TokenType.COMMA))\n if (this.match(TokenType.RIGHT_PAREN)) \n return geometries\n \n } else if (this.isEmptyGeometry_()) {\n return []\n }\n throw new Error(this.formatErrorMessage_())\n }\n\n /**\n * @return {Array} All values in a point.\n * @private\n */\n parsePointText_() {\n if (this.match(TokenType.LEFT_PAREN)) {\n const coordinates = this.parsePoint_()\n if (this.match(TokenType.RIGHT_PAREN)) \n return coordinates\n \n } else if (this.isEmptyGeometry_()) {\n return null\n }\n throw new Error(this.formatErrorMessage_())\n }\n\n /**\n * @return {!Array>} All points in a linestring.\n * @private\n */\n parseLineStringText_() {\n if (this.match(TokenType.LEFT_PAREN)) {\n const coordinates = this.parsePointList_()\n if (this.match(TokenType.RIGHT_PAREN)) \n return coordinates\n \n } else if (this.isEmptyGeometry_()) {\n return []\n }\n throw new Error(this.formatErrorMessage_())\n }\n\n /**\n * @return {!Array>>} All points in a polygon.\n * @private\n */\n parsePolygonText_() {\n if (this.match(TokenType.LEFT_PAREN)) {\n const coordinates = this.parseLineStringTextList_()\n if (this.match(TokenType.RIGHT_PAREN)) \n return coordinates\n \n } else if (this.isEmptyGeometry_()) {\n return []\n }\n throw new Error(this.formatErrorMessage_())\n }\n\n /**\n * @return {!Array>} All points in a multipoint.\n * @private\n */\n parseMultiPointText_() {\n if (this.match(TokenType.LEFT_PAREN)) {\n let coordinates\n if (this.token_.type == TokenType.LEFT_PAREN) \n coordinates = this.parsePointTextList_()\n else \n coordinates = this.parsePointList_()\n \n if (this.match(TokenType.RIGHT_PAREN)) \n return coordinates\n \n } else if (this.isEmptyGeometry_()) {\n return []\n }\n throw new Error(this.formatErrorMessage_())\n }\n\n /**\n * @return {!Array>>} All linestring points\n * in a multilinestring.\n * @private\n */\n parseMultiLineStringText_() {\n if (this.match(TokenType.LEFT_PAREN)) {\n const coordinates = this.parseLineStringTextList_()\n if (this.match(TokenType.RIGHT_PAREN)) \n return coordinates\n \n } else if (this.isEmptyGeometry_()) {\n return []\n }\n throw new Error(this.formatErrorMessage_())\n }\n\n /**\n * @return {!Array>>>} All polygon points in a multipolygon.\n * @private\n */\n parseMultiPolygonText_() {\n if (this.match(TokenType.LEFT_PAREN)) {\n const coordinates = this.parsePolygonTextList_()\n if (this.match(TokenType.RIGHT_PAREN)) \n return coordinates\n \n } else if (this.isEmptyGeometry_()) {\n return []\n }\n throw new Error(this.formatErrorMessage_())\n }\n\n /**\n * @return {!Array} A point.\n * @private\n */\n parsePoint_() {\n const coordinates = []\n const dimensions = this.layout_.length\n for (let i = 0; i < dimensions; ++i) {\n const token = this.token_\n if (this.match(TokenType.NUMBER)) \n coordinates.push(/** @type {number} */(token.value))\n else \n break\n \n }\n if (coordinates.length == dimensions) \n return coordinates\n \n throw new Error(this.formatErrorMessage_())\n }\n\n /**\n * @return {!Array>} An array of points.\n * @private\n */\n parsePointList_() {\n const coordinates = [this.parsePoint_()]\n while (this.match(TokenType.COMMA)) \n coordinates.push(this.parsePoint_())\n \n return coordinates\n }\n\n /**\n * @return {!Array>} An array of points.\n * @private\n */\n parsePointTextList_() {\n const coordinates = [this.parsePointText_()]\n while (this.match(TokenType.COMMA)) \n coordinates.push(this.parsePointText_())\n \n return coordinates\n }\n\n /**\n * @return {!Array>>} An array of points.\n * @private\n */\n parseLineStringTextList_() {\n const coordinates = [this.parseLineStringText_()]\n while (this.match(TokenType.COMMA)) \n coordinates.push(this.parseLineStringText_())\n \n return coordinates\n }\n\n /**\n * @return {!Array>>>} An array of points.\n * @private\n */\n parsePolygonTextList_() {\n const coordinates = [this.parsePolygonText_()]\n while (this.match(TokenType.COMMA)) \n coordinates.push(this.parsePolygonText_())\n \n return coordinates\n }\n\n /**\n * @return {boolean} Whether the token implies an empty geometry.\n * @private\n */\n isEmptyGeometry_() {\n const isEmpty =\n this.isTokenType(TokenType.TEXT) && this.token_.value == EMPTY\n if (isEmpty) \n this.consume_()\n \n return isEmpty\n }\n\n /**\n * Create an error message for an unexpected token error.\n * @return {string} Error message.\n * @private\n */\n formatErrorMessage_() {\n return (\n 'Unexpected `' +\n this.token_.value +\n '` at position ' +\n this.token_.position +\n ' in `' +\n this.lexer_.wkt +\n '`'\n )\n }\n\n /**\n * @return {!import(\"../geom/Geometry.js\").default} The geometry.\n * @private\n */\n parseGeometry_() {\n const factory = this.factory\n\n const o2c = ordinates => new Coordinate(...ordinates)\n const ca2p = coordinates => {\n const rings = coordinates.map(a => factory.createLinearRing(a.map(o2c)))\n if (rings.length > 1)\n return factory.createPolygon(rings[0], rings.slice(1))\n else\n return factory.createPolygon(rings[0])\n }\n\n const token = this.token_\n if (this.match(TokenType.TEXT)) {\n const geomType = token.value\n this.layout_ = this.parseGeometryLayout_()\n if (geomType == 'GEOMETRYCOLLECTION') {\n const geometries = this.parseGeometryCollectionText_()\n return factory.createGeometryCollection(geometries)\n } else {\n switch (geomType) {\n case 'POINT': {\n const ordinates = this.parsePointText_()\n if (!ordinates)\n return factory.createPoint()\n return factory.createPoint(new Coordinate(...ordinates))\n }\n case 'LINESTRING': {\n const coordinates = this.parseLineStringText_()\n const components = coordinates.map(o2c)\n return factory.createLineString(components)\n }\n case 'LINEARRING': {\n const coordinates = this.parseLineStringText_()\n const components = coordinates.map(o2c)\n return factory.createLinearRing(components)\n }\n case 'POLYGON': {\n const coordinates = this.parsePolygonText_()\n if (!coordinates || coordinates.length === 0)\n return factory.createPolygon()\n return ca2p(coordinates)\n }\n case 'MULTIPOINT': {\n const coordinates = this.parseMultiPointText_()\n if (!coordinates || coordinates.length === 0)\n return factory.createMultiPoint()\n const components = coordinates.map(o2c).map(c => factory.createPoint(c))\n return factory.createMultiPoint(components)\n }\n case 'MULTILINESTRING': {\n const coordinates = this.parseMultiLineStringText_()\n const components = coordinates.map(a => factory.createLineString(a.map(o2c)))\n return factory.createMultiLineString(components)\n }\n case 'MULTIPOLYGON': {\n const coordinates = this.parseMultiPolygonText_()\n if (!coordinates || coordinates.length === 0)\n return factory.createMultiPolygon()\n const polygons = coordinates.map(ca2p)\n return factory.createMultiPolygon(polygons)\n }\n default: {\n throw new Error('Invalid geometry type: ' + geomType)\n }\n }\n }\n }\n throw new Error(this.formatErrorMessage_())\n }\n}\n\n/**\n * @param {Point} geom Point geometry.\n * @return {string} Coordinates part of Point as WKT.\n */\nfunction encodePointGeometry(geom) {\n if (geom.isEmpty()) \n return ''\n const coordinate = geom.getCoordinate()\n const coordinates = [coordinate.x, coordinate.y]\n if (coordinate.z)\n coordinates.push(coordinate.z)\n if (coordinate.m)\n coordinates.push(coordinate.m)\n return coordinates.join(' ')\n}\n\n/**\n * @param {MultiPoint} geom MultiPoint geometry.\n * @return {string} Coordinates part of MultiPoint as WKT.\n */\nfunction encodeMultiPointGeometry(geom) {\n const array = []\n for (let i = 0, ii = geom.getNumGeometries(); i < ii; ++i) \n array.push('(' + encodePointGeometry(geom.getGeometryN(i)) + ')')\n \n return array.join(', ')\n}\n\n/**\n * @param {GeometryCollection} geom GeometryCollection geometry.\n * @return {string} Coordinates part of GeometryCollection as WKT.\n */\nfunction encodeGeometryCollectionGeometry(geom) {\n const array = []\n for (let i = 0, ii = geom.getNumGeometries(); i < ii; ++i) \n array.push(encode(geom.getGeometryN(i)))\n \n return array.join(', ')\n}\n\n/**\n * @param {LineString|import(\"../geom/LinearRing.js\").default} geom LineString geometry.\n * @return {string} Coordinates part of LineString as WKT.\n */\nfunction encodeLineStringGeometry(geom) {\n const coordinates = geom.getCoordinates()\n .map(c => [c.x, c.y])\n const array = []\n for (let i = 0, ii = coordinates.length; i < ii; ++i) \n array.push(coordinates[i].join(' '))\n \n return array.join(', ')\n}\n\n/**\n * @param {MultiLineString} geom MultiLineString geometry.\n * @return {string} Coordinates part of MultiLineString as WKT.\n */\nfunction encodeMultiLineStringGeometry(geom) {\n const array = []\n for (let i = 0, ii = geom.getNumGeometries(); i < ii; ++i) \n array.push('(' + encodeLineStringGeometry(geom.getGeometryN(i)) + ')')\n \n return array.join(', ')\n}\n\n/**\n * @param {Polygon} geom Polygon geometry.\n * @return {string} Coordinates part of Polygon as WKT.\n */\nfunction encodePolygonGeometry(geom) {\n const array = []\n array.push('(' + encodeLineStringGeometry(geom.getExteriorRing()) + ')')\n for (let i = 0, ii = geom.getNumInteriorRing(); i < ii; ++i) \n array.push('(' + encodeLineStringGeometry(geom.getInteriorRingN(i)) + ')')\n return array.join(', ')\n}\n\n/**\n * @param {MultiPolygon} geom MultiPolygon geometry.\n * @return {string} Coordinates part of MultiPolygon as WKT.\n */\nfunction encodeMultiPolygonGeometry(geom) {\n const array = []\n for (let i = 0, ii = geom.getNumGeometries(); i < ii; ++i) \n array.push('(' + encodePolygonGeometry(geom.getGeometryN(i)) + ')')\n \n return array.join(', ')\n}\n\n/**\n * @param {Geometry} geom Geometry geometry.\n * @return {string} Potential dimensional information for WKT type.\n */\nfunction encodeGeometryLayout(geom) {\n let dimInfo = ''\n if (geom.isEmpty())\n return dimInfo\n const c = geom.getCoordinate()\n if (c.z)\n dimInfo += Z\n if (c.m)\n dimInfo += M\n return dimInfo\n}\n\n/**\n * @const\n * @type {Object}\n */\nconst GeometryEncoder = {\n 'Point': encodePointGeometry,\n 'LineString': encodeLineStringGeometry,\n 'LinearRing': encodeLineStringGeometry,\n 'Polygon': encodePolygonGeometry,\n 'MultiPoint': encodeMultiPointGeometry,\n 'MultiLineString': encodeMultiLineStringGeometry,\n 'MultiPolygon': encodeMultiPolygonGeometry,\n 'GeometryCollection': encodeGeometryCollectionGeometry,\n}\n\n/**\n * Encode a geometry as WKT.\n * @param {!import(\"../geom/Geometry.js\").default} geom The geometry to encode.\n * @return {string} WKT string for the geometry.\n */\nfunction encode(geom) {\n let type = geom.getGeometryType()\n const geometryEncoder = GeometryEncoder[type]\n type = type.toUpperCase()\n const dimInfo = encodeGeometryLayout(geom)\n if (dimInfo.length > 0) \n type += ' ' + dimInfo\n if (geom.isEmpty()) \n return type + ' ' + EMPTY\n const enc = geometryEncoder(geom)\n return type + ' (' + enc + ')'\n}\n\n/**\n * Class for reading and writing Well-Known Text.\n *\n * NOTE: Adapted from OpenLayers.\n */\n\nexport default class WKTParser {\n /** Create a new parser for WKT\n *\n * @param {GeometryFactory} geometryFactory\n * @return An instance of WKTParser.\n * @private\n */\n constructor(geometryFactory) {\n this.geometryFactory = geometryFactory || new GeometryFactory()\n this.precisionModel = this.geometryFactory.getPrecisionModel()\n }\n\n /**\n * Deserialize a WKT string and return a geometry. Supports WKT for POINT,\n * MULTIPOINT, LINESTRING, LINEARRING, MULTILINESTRING, POLYGON, MULTIPOLYGON,\n * and GEOMETRYCOLLECTION.\n *\n * @param {String} wkt A WKT string.\n * @return {Geometry} A geometry instance.\n * @private\n */\n read(wkt) {\n const lexer = new Lexer(wkt)\n const parser = new Parser(lexer, this.geometryFactory)\n const geometry = parser.parse()\n return geometry\n }\n\n /**\n * Serialize a geometry into a WKT string.\n *\n * @param {Geometry} geometry A feature or array of features.\n * @return {String} The WKT string representation of the input geometries.\n * @private\n */\n write(geometry) {\n return encode(geometry)\n }\n}\n","/**\n * @module org/locationtech/jts/io/WKTWriter\n */\n\nimport WKTParser from './WKTParser'\n\n/**\n * Writes the Well-Known Text representation of a {@link Geometry}. The\n * Well-Known Text format is defined in the OGC Simple Features\n * Specification for SQL.\n *

\n * The WKTWriter outputs coordinates rounded to the precision\n * model. Only the maximum number of decimal places necessary to represent the\n * ordinates to the required precision will be output.\n *

\n * The SFS WKT spec does not define a special tag for {@link LinearRing}s.\n * Under the spec, rings are output as LINESTRINGs.\n */\nexport default class WKTWriter {\n /**\n * @param {GeometryFactory} geometryFactory\n */\n constructor(geometryFactory) {\n this.parser = new WKTParser(geometryFactory)\n }\n\n /**\n * Converts a Geometry to its Well-known Text representation.\n *\n * @param {Geometry} geometry a Geometry to process.\n * @return {string} a string (see the OpenGIS Simple\n * Features Specification).\n * @memberof module:org/locationtech/jts/io/WKTWriter#\n */\n write(geometry) {\n return this.parser.write(geometry)\n }\n\n /**\n * Generates the WKT for a LINESTRING specified by two\n * {@link Coordinate}s.\n *\n * @param p0 the first coordinate.\n * @param p1 the second coordinate.\n *\n * @return the WKT.\n * @private\n */\n static toLineString(p0, p1) {\n if (arguments.length !== 2) throw new Error('Not implemented')\n\n return 'LINESTRING ( ' + p0.x + ' ' + p0.y + ', ' + p1.x + ' ' + p1.y + ' )'\n }\n}\n","import WKTWriter from '../io/WKTWriter'\nimport Coordinate from '../geom/Coordinate'\nimport Assert from '../util/Assert'\nimport StringBuilder from '../../../../java/lang/StringBuilder'\nexport default class LineIntersector {\n constructor() {\n LineIntersector.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._result = null\n this._inputLines = Array(2).fill().map(() => Array(2))\n this._intPt = new Array(2).fill(null)\n this._intLineIndex = null\n this._isProper = null\n this._pa = null\n this._pb = null\n this._precisionModel = null\n this._intPt[0] = new Coordinate()\n this._intPt[1] = new Coordinate()\n this._pa = this._intPt[0]\n this._pb = this._intPt[1]\n this._result = 0\n }\n static computeEdgeDistance(p, p0, p1) {\n const dx = Math.abs(p1.x - p0.x)\n const dy = Math.abs(p1.y - p0.y)\n let dist = -1.0\n if (p.equals(p0)) {\n dist = 0.0\n } else if (p.equals(p1)) {\n if (dx > dy) dist = dx; else dist = dy\n } else {\n const pdx = Math.abs(p.x - p0.x)\n const pdy = Math.abs(p.y - p0.y)\n if (dx > dy) dist = pdx; else dist = pdy\n if (dist === 0.0 && !p.equals(p0)) \n dist = Math.max(pdx, pdy)\n \n }\n Assert.isTrue(!(dist === 0.0 && !p.equals(p0)), 'Bad distance calculation')\n return dist\n }\n static nonRobustComputeEdgeDistance(p, p1, p2) {\n const dx = p.x - p1.x\n const dy = p.y - p1.y\n const dist = Math.sqrt(dx * dx + dy * dy)\n Assert.isTrue(!(dist === 0.0 && !p.equals(p1)), 'Invalid distance calculation')\n return dist\n }\n getIndexAlongSegment(segmentIndex, intIndex) {\n this.computeIntLineIndex()\n return this._intLineIndex[segmentIndex][intIndex]\n }\n getTopologySummary() {\n const catBuilder = new StringBuilder()\n if (this.isEndPoint()) catBuilder.append(' endpoint')\n if (this._isProper) catBuilder.append(' proper')\n if (this.isCollinear()) catBuilder.append(' collinear')\n return catBuilder.toString()\n }\n computeIntersection(p1, p2, p3, p4) {\n this._inputLines[0][0] = p1\n this._inputLines[0][1] = p2\n this._inputLines[1][0] = p3\n this._inputLines[1][1] = p4\n this._result = this.computeIntersect(p1, p2, p3, p4)\n }\n getIntersectionNum() {\n return this._result\n }\n computeIntLineIndex() {\n if (arguments.length === 0) {\n if (this._intLineIndex === null) {\n this._intLineIndex = Array(2).fill().map(() => Array(2))\n this.computeIntLineIndex(0)\n this.computeIntLineIndex(1)\n }\n } else if (arguments.length === 1) {\n const segmentIndex = arguments[0]\n const dist0 = this.getEdgeDistance(segmentIndex, 0)\n const dist1 = this.getEdgeDistance(segmentIndex, 1)\n if (dist0 > dist1) {\n this._intLineIndex[segmentIndex][0] = 0\n this._intLineIndex[segmentIndex][1] = 1\n } else {\n this._intLineIndex[segmentIndex][0] = 1\n this._intLineIndex[segmentIndex][1] = 0\n }\n }\n }\n isProper() {\n return this.hasIntersection() && this._isProper\n }\n setPrecisionModel(precisionModel) {\n this._precisionModel = precisionModel\n }\n isInteriorIntersection() {\n if (arguments.length === 0) {\n if (this.isInteriorIntersection(0)) return true\n if (this.isInteriorIntersection(1)) return true\n return false\n } else if (arguments.length === 1) {\n const inputLineIndex = arguments[0]\n for (let i = 0; i < this._result; i++) \n if (!(this._intPt[i].equals2D(this._inputLines[inputLineIndex][0]) || this._intPt[i].equals2D(this._inputLines[inputLineIndex][1]))) \n return true\n \n \n return false\n }\n }\n getIntersection(intIndex) {\n return this._intPt[intIndex]\n }\n isEndPoint() {\n return this.hasIntersection() && !this._isProper\n }\n hasIntersection() {\n return this._result !== LineIntersector.NO_INTERSECTION\n }\n getEdgeDistance(segmentIndex, intIndex) {\n const dist = LineIntersector.computeEdgeDistance(this._intPt[intIndex], this._inputLines[segmentIndex][0], this._inputLines[segmentIndex][1])\n return dist\n }\n isCollinear() {\n return this._result === LineIntersector.COLLINEAR_INTERSECTION\n }\n toString() {\n return WKTWriter.toLineString(this._inputLines[0][0], this._inputLines[0][1]) + ' - ' + WKTWriter.toLineString(this._inputLines[1][0], this._inputLines[1][1]) + this.getTopologySummary()\n }\n getEndpoint(segmentIndex, ptIndex) {\n return this._inputLines[segmentIndex][ptIndex]\n }\n isIntersection(pt) {\n for (let i = 0; i < this._result; i++) \n if (this._intPt[i].equals2D(pt)) \n return true\n \n \n return false\n }\n getIntersectionAlongSegment(segmentIndex, intIndex) {\n this.computeIntLineIndex()\n return this._intPt[this._intLineIndex[segmentIndex][intIndex]]\n }\n}\nLineIntersector.DONT_INTERSECT = 0\nLineIntersector.DO_INTERSECT = 1\nLineIntersector.COLLINEAR = 2\nLineIntersector.NO_INTERSECTION = 0\nLineIntersector.POINT_INTERSECTION = 1\nLineIntersector.COLLINEAR_INTERSECTION = 2\n","import Coordinate from '../geom/Coordinate'\nimport Orientation from './Orientation'\nimport Intersection from './Intersection'\nimport CGAlgorithmsDD from './CGAlgorithmsDD'\nimport System from '../../../../java/lang/System'\nimport Envelope from '../geom/Envelope'\nimport Distance from './Distance'\nimport LineIntersector from './LineIntersector'\nexport default class RobustLineIntersector extends LineIntersector {\n constructor() {\n super()\n }\n static nearestEndpoint(p1, p2, q1, q2) {\n let nearestPt = p1\n let minDist = Distance.pointToSegment(p1, q1, q2)\n let dist = Distance.pointToSegment(p2, q1, q2)\n if (dist < minDist) {\n minDist = dist\n nearestPt = p2\n }\n dist = Distance.pointToSegment(q1, p1, p2)\n if (dist < minDist) {\n minDist = dist\n nearestPt = q1\n }\n dist = Distance.pointToSegment(q2, p1, p2)\n if (dist < minDist) {\n minDist = dist\n nearestPt = q2\n }\n return nearestPt\n }\n isInSegmentEnvelopes(intPt) {\n const env0 = new Envelope(this._inputLines[0][0], this._inputLines[0][1])\n const env1 = new Envelope(this._inputLines[1][0], this._inputLines[1][1])\n return env0.contains(intPt) && env1.contains(intPt)\n }\n computeIntersection() {\n if (arguments.length === 3) {\n const p = arguments[0], p1 = arguments[1], p2 = arguments[2]\n this._isProper = false\n if (Envelope.intersects(p1, p2, p)) \n if (Orientation.index(p1, p2, p) === 0 && Orientation.index(p2, p1, p) === 0) {\n this._isProper = true\n if (p.equals(p1) || p.equals(p2)) \n this._isProper = false\n \n this._result = LineIntersector.POINT_INTERSECTION\n return null\n }\n \n this._result = LineIntersector.NO_INTERSECTION\n } else {\n return super.computeIntersection.apply(this, arguments)\n }\n }\n intersection(p1, p2, q1, q2) {\n let intPt = this.intersectionSafe(p1, p2, q1, q2)\n if (!this.isInSegmentEnvelopes(intPt)) \n intPt = new Coordinate(RobustLineIntersector.nearestEndpoint(p1, p2, q1, q2))\n \n if (this._precisionModel !== null) \n this._precisionModel.makePrecise(intPt)\n \n return intPt\n }\n checkDD(p1, p2, q1, q2, intPt) {\n const intPtDD = CGAlgorithmsDD.intersection(p1, p2, q1, q2)\n const isIn = this.isInSegmentEnvelopes(intPtDD)\n System.out.println('DD in env = ' + isIn + ' --------------------- ' + intPtDD)\n if (intPt.distance(intPtDD) > 0.0001) \n System.out.println('Distance = ' + intPt.distance(intPtDD))\n \n }\n intersectionSafe(p1, p2, q1, q2) {\n let intPt = Intersection.intersection(p1, p2, q1, q2)\n if (intPt === null) intPt = RobustLineIntersector.nearestEndpoint(p1, p2, q1, q2)\n return intPt\n }\n computeCollinearIntersection(p1, p2, q1, q2) {\n const p1q1p2 = Envelope.intersects(p1, p2, q1)\n const p1q2p2 = Envelope.intersects(p1, p2, q2)\n const q1p1q2 = Envelope.intersects(q1, q2, p1)\n const q1p2q2 = Envelope.intersects(q1, q2, p2)\n if (p1q1p2 && p1q2p2) {\n this._intPt[0] = q1\n this._intPt[1] = q2\n return LineIntersector.COLLINEAR_INTERSECTION\n }\n if (q1p1q2 && q1p2q2) {\n this._intPt[0] = p1\n this._intPt[1] = p2\n return LineIntersector.COLLINEAR_INTERSECTION\n }\n if (p1q1p2 && q1p1q2) {\n this._intPt[0] = q1\n this._intPt[1] = p1\n return q1.equals(p1) && !p1q2p2 && !q1p2q2 ? LineIntersector.POINT_INTERSECTION : LineIntersector.COLLINEAR_INTERSECTION\n }\n if (p1q1p2 && q1p2q2) {\n this._intPt[0] = q1\n this._intPt[1] = p2\n return q1.equals(p2) && !p1q2p2 && !q1p1q2 ? LineIntersector.POINT_INTERSECTION : LineIntersector.COLLINEAR_INTERSECTION\n }\n if (p1q2p2 && q1p1q2) {\n this._intPt[0] = q2\n this._intPt[1] = p1\n return q2.equals(p1) && !p1q1p2 && !q1p2q2 ? LineIntersector.POINT_INTERSECTION : LineIntersector.COLLINEAR_INTERSECTION\n }\n if (p1q2p2 && q1p2q2) {\n this._intPt[0] = q2\n this._intPt[1] = p2\n return q2.equals(p2) && !p1q1p2 && !q1p1q2 ? LineIntersector.POINT_INTERSECTION : LineIntersector.COLLINEAR_INTERSECTION\n }\n return LineIntersector.NO_INTERSECTION\n }\n computeIntersect(p1, p2, q1, q2) {\n this._isProper = false\n if (!Envelope.intersects(p1, p2, q1, q2)) return LineIntersector.NO_INTERSECTION\n const Pq1 = Orientation.index(p1, p2, q1)\n const Pq2 = Orientation.index(p1, p2, q2)\n if (Pq1 > 0 && Pq2 > 0 || Pq1 < 0 && Pq2 < 0) \n return LineIntersector.NO_INTERSECTION\n \n const Qp1 = Orientation.index(q1, q2, p1)\n const Qp2 = Orientation.index(q1, q2, p2)\n if (Qp1 > 0 && Qp2 > 0 || Qp1 < 0 && Qp2 < 0) \n return LineIntersector.NO_INTERSECTION\n \n const collinear = Pq1 === 0 && Pq2 === 0 && Qp1 === 0 && Qp2 === 0\n if (collinear) \n return this.computeCollinearIntersection(p1, p2, q1, q2)\n \n if (Pq1 === 0 || Pq2 === 0 || Qp1 === 0 || Qp2 === 0) {\n this._isProper = false\n if (p1.equals2D(q1) || p1.equals2D(q2)) \n this._intPt[0] = p1\n else if (p2.equals2D(q1) || p2.equals2D(q2)) \n this._intPt[0] = p2\n else if (Pq1 === 0) \n this._intPt[0] = new Coordinate(q1)\n else if (Pq2 === 0) \n this._intPt[0] = new Coordinate(q2)\n else if (Qp1 === 0) \n this._intPt[0] = new Coordinate(p1)\n else if (Qp2 === 0) \n this._intPt[0] = new Coordinate(p2)\n \n } else {\n this._isProper = true\n this._intPt[0] = this.intersection(p1, p2, q1, q2)\n }\n return LineIntersector.POINT_INTERSECTION\n }\n}\n","import Coordinate from './Coordinate'\nimport Double from '../../../../java/lang/Double'\nimport Orientation from '../algorithm/Orientation'\nimport Intersection from '../algorithm/Intersection'\nimport Comparable from '../../../../java/lang/Comparable'\nimport RobustLineIntersector from '../algorithm/RobustLineIntersector'\nimport Serializable from '../../../../java/io/Serializable'\nimport Distance from '../algorithm/Distance'\nexport default class LineSegment {\n constructor() {\n LineSegment.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this.p0 = null\n this.p1 = null\n if (arguments.length === 0) {\n LineSegment.constructor_.call(this, new Coordinate(), new Coordinate())\n } else if (arguments.length === 1) {\n const ls = arguments[0]\n LineSegment.constructor_.call(this, ls.p0, ls.p1)\n } else if (arguments.length === 2) {\n const p0 = arguments[0], p1 = arguments[1]\n this.p0 = p0\n this.p1 = p1\n } else if (arguments.length === 4) {\n const x0 = arguments[0], y0 = arguments[1], x1 = arguments[2], y1 = arguments[3]\n LineSegment.constructor_.call(this, new Coordinate(x0, y0), new Coordinate(x1, y1))\n }\n }\n static midPoint(p0, p1) {\n return new Coordinate((p0.x + p1.x) / 2, (p0.y + p1.y) / 2)\n }\n minX() {\n return Math.min(this.p0.x, this.p1.x)\n }\n orientationIndex() {\n if (arguments[0] instanceof LineSegment) {\n const seg = arguments[0]\n const orient0 = Orientation.index(this.p0, this.p1, seg.p0)\n const orient1 = Orientation.index(this.p0, this.p1, seg.p1)\n if (orient0 >= 0 && orient1 >= 0) return Math.max(orient0, orient1)\n if (orient0 <= 0 && orient1 <= 0) return Math.max(orient0, orient1)\n return 0\n } else if (arguments[0] instanceof Coordinate) {\n const p = arguments[0]\n return Orientation.index(this.p0, this.p1, p)\n }\n }\n toGeometry(geomFactory) {\n return geomFactory.createLineString([this.p0, this.p1])\n }\n isVertical() {\n return this.p0.x === this.p1.x\n }\n equals(o) {\n if (!(o instanceof LineSegment)) \n return false\n \n const other = o\n return this.p0.equals(other.p0) && this.p1.equals(other.p1)\n }\n intersection(line) {\n const li = new RobustLineIntersector()\n li.computeIntersection(this.p0, this.p1, line.p0, line.p1)\n if (li.hasIntersection()) return li.getIntersection(0)\n return null\n }\n project() {\n if (arguments[0] instanceof Coordinate) {\n const p = arguments[0]\n if (p.equals(this.p0) || p.equals(this.p1)) return new Coordinate(p)\n const r = this.projectionFactor(p)\n const coord = new Coordinate()\n coord.x = this.p0.x + r * (this.p1.x - this.p0.x)\n coord.y = this.p0.y + r * (this.p1.y - this.p0.y)\n return coord\n } else if (arguments[0] instanceof LineSegment) {\n const seg = arguments[0]\n const pf0 = this.projectionFactor(seg.p0)\n const pf1 = this.projectionFactor(seg.p1)\n if (pf0 >= 1.0 && pf1 >= 1.0) return null\n if (pf0 <= 0.0 && pf1 <= 0.0) return null\n let newp0 = this.project(seg.p0)\n if (pf0 < 0.0) newp0 = this.p0\n if (pf0 > 1.0) newp0 = this.p1\n let newp1 = this.project(seg.p1)\n if (pf1 < 0.0) newp1 = this.p0\n if (pf1 > 1.0) newp1 = this.p1\n return new LineSegment(newp0, newp1)\n }\n }\n normalize() {\n if (this.p1.compareTo(this.p0) < 0) this.reverse()\n }\n angle() {\n return Math.atan2(this.p1.y - this.p0.y, this.p1.x - this.p0.x)\n }\n getCoordinate(i) {\n if (i === 0) return this.p0\n return this.p1\n }\n distancePerpendicular(p) {\n return Distance.pointToLinePerpendicular(p, this.p0, this.p1)\n }\n minY() {\n return Math.min(this.p0.y, this.p1.y)\n }\n midPoint() {\n return LineSegment.midPoint(this.p0, this.p1)\n }\n projectionFactor(p) {\n if (p.equals(this.p0)) return 0.0\n if (p.equals(this.p1)) return 1.0\n const dx = this.p1.x - this.p0.x\n const dy = this.p1.y - this.p0.y\n const len = dx * dx + dy * dy\n if (len <= 0.0) return Double.NaN\n const r = ((p.x - this.p0.x) * dx + (p.y - this.p0.y) * dy) / len\n return r\n }\n closestPoints(line) {\n const intPt = this.intersection(line)\n if (intPt !== null) \n return [intPt, intPt]\n \n const closestPt = new Array(2).fill(null)\n let minDistance = Double.MAX_VALUE\n let dist = null\n const close00 = this.closestPoint(line.p0)\n minDistance = close00.distance(line.p0)\n closestPt[0] = close00\n closestPt[1] = line.p0\n const close01 = this.closestPoint(line.p1)\n dist = close01.distance(line.p1)\n if (dist < minDistance) {\n minDistance = dist\n closestPt[0] = close01\n closestPt[1] = line.p1\n }\n const close10 = line.closestPoint(this.p0)\n dist = close10.distance(this.p0)\n if (dist < minDistance) {\n minDistance = dist\n closestPt[0] = this.p0\n closestPt[1] = close10\n }\n const close11 = line.closestPoint(this.p1)\n dist = close11.distance(this.p1)\n if (dist < minDistance) {\n minDistance = dist\n closestPt[0] = this.p1\n closestPt[1] = close11\n }\n return closestPt\n }\n closestPoint(p) {\n const factor = this.projectionFactor(p)\n if (factor > 0 && factor < 1) \n return this.project(p)\n \n const dist0 = this.p0.distance(p)\n const dist1 = this.p1.distance(p)\n if (dist0 < dist1) return this.p0\n return this.p1\n }\n maxX() {\n return Math.max(this.p0.x, this.p1.x)\n }\n getLength() {\n return this.p0.distance(this.p1)\n }\n compareTo(o) {\n const other = o\n const comp0 = this.p0.compareTo(other.p0)\n if (comp0 !== 0) return comp0\n return this.p1.compareTo(other.p1)\n }\n reverse() {\n const temp = this.p0\n this.p0 = this.p1\n this.p1 = temp\n }\n equalsTopo(other) {\n return this.p0.equals(other.p0) && this.p1.equals(other.p1) || this.p0.equals(other.p1) && this.p1.equals(other.p0)\n }\n lineIntersection(line) {\n const intPt = Intersection.intersection(this.p0, this.p1, line.p0, line.p1)\n return intPt\n }\n maxY() {\n return Math.max(this.p0.y, this.p1.y)\n }\n pointAlongOffset(segmentLengthFraction, offsetDistance) {\n const segx = this.p0.x + segmentLengthFraction * (this.p1.x - this.p0.x)\n const segy = this.p0.y + segmentLengthFraction * (this.p1.y - this.p0.y)\n const dx = this.p1.x - this.p0.x\n const dy = this.p1.y - this.p0.y\n const len = Math.sqrt(dx * dx + dy * dy)\n let ux = 0.0\n let uy = 0.0\n if (offsetDistance !== 0.0) {\n if (len <= 0.0) throw new IllegalStateException('Cannot compute offset from zero-length line segment')\n ux = offsetDistance * dx / len\n uy = offsetDistance * dy / len\n }\n const offsetx = segx - uy\n const offsety = segy + ux\n const coord = new Coordinate(offsetx, offsety)\n return coord\n }\n setCoordinates() {\n if (arguments.length === 1) {\n const ls = arguments[0]\n this.setCoordinates(ls.p0, ls.p1)\n } else if (arguments.length === 2) {\n const p0 = arguments[0], p1 = arguments[1]\n this.p0.x = p0.x\n this.p0.y = p0.y\n this.p1.x = p1.x\n this.p1.y = p1.y\n }\n }\n segmentFraction(inputPt) {\n let segFrac = this.projectionFactor(inputPt)\n if (segFrac < 0.0) segFrac = 0.0; else if (segFrac > 1.0 || Double.isNaN(segFrac)) segFrac = 1.0\n return segFrac\n }\n toString() {\n return 'LINESTRING( ' + this.p0.x + ' ' + this.p0.y + ', ' + this.p1.x + ' ' + this.p1.y + ')'\n }\n isHorizontal() {\n return this.p0.y === this.p1.y\n }\n reflect(p) {\n const A = this.p1.getY() - this.p0.getY()\n const B = this.p0.getX() - this.p1.getX()\n const C = this.p0.getY() * (this.p1.getX() - this.p0.getX()) - this.p0.getX() * (this.p1.getY() - this.p0.getY())\n const A2plusB2 = A * A + B * B\n const A2subB2 = A * A - B * B\n const x = p.getX()\n const y = p.getY()\n const rx = (-A2subB2 * x - 2 * A * B * y - 2 * A * C) / A2plusB2\n const ry = (A2subB2 * y - 2 * A * B * x - 2 * B * C) / A2plusB2\n return new Coordinate(rx, ry)\n }\n distance() {\n if (arguments[0] instanceof LineSegment) {\n const ls = arguments[0]\n return Distance.segmentToSegment(this.p0, this.p1, ls.p0, ls.p1)\n } else if (arguments[0] instanceof Coordinate) {\n const p = arguments[0]\n return Distance.pointToSegment(p, this.p0, this.p1)\n }\n }\n pointAlong(segmentLengthFraction) {\n const coord = new Coordinate()\n coord.x = this.p0.x + segmentLengthFraction * (this.p1.x - this.p0.x)\n coord.y = this.p0.y + segmentLengthFraction * (this.p1.y - this.p0.y)\n return coord\n }\n hashCode() {\n let bits0 = Double.doubleToLongBits(this.p0.x)\n bits0 ^= Double.doubleToLongBits(this.p0.y) * 31\n const hash0 = Math.trunc(bits0) ^ Math.trunc(bits0 >> 32)\n let bits1 = Double.doubleToLongBits(this.p1.x)\n bits1 ^= Double.doubleToLongBits(this.p1.y) * 31\n const hash1 = Math.trunc(bits1) ^ Math.trunc(bits1 >> 32)\n return hash0 ^ hash1\n }\n get interfaces_() {\n return [Comparable, Serializable]\n }\n}\n","import IllegalArgumentException from '../../../../java/lang/IllegalArgumentException'\nexport default class Location {\n static toLocationSymbol(locationValue) {\n switch (locationValue) {\n case Location.EXTERIOR:\n return 'e'\n case Location.BOUNDARY:\n return 'b'\n case Location.INTERIOR:\n return 'i'\n case Location.NONE:\n return '-'\n }\n throw new IllegalArgumentException('Unknown location value: ' + locationValue)\n }\n}\nLocation.INTERIOR = 0\nLocation.BOUNDARY = 1\nLocation.EXTERIOR = 2\nLocation.NONE = -1\n","import Location from './Location'\nimport IllegalArgumentException from '../../../../java/lang/IllegalArgumentException'\nimport Dimension from './Dimension'\nimport Cloneable from '../../../../java/lang/Cloneable'\nimport StringBuilder from '../../../../java/lang/StringBuilder'\nexport default class IntersectionMatrix {\n constructor() {\n IntersectionMatrix.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._matrix = null\n if (arguments.length === 0) {\n this._matrix = Array(3).fill().map(() => Array(3))\n this.setAll(Dimension.FALSE)\n } else if (arguments.length === 1) {\n if (typeof arguments[0] === 'string') {\n const elements = arguments[0]\n IntersectionMatrix.constructor_.call(this)\n this.set(elements)\n } else if (arguments[0] instanceof IntersectionMatrix) {\n const other = arguments[0]\n IntersectionMatrix.constructor_.call(this)\n this._matrix[Location.INTERIOR][Location.INTERIOR] = other._matrix[Location.INTERIOR][Location.INTERIOR]\n this._matrix[Location.INTERIOR][Location.BOUNDARY] = other._matrix[Location.INTERIOR][Location.BOUNDARY]\n this._matrix[Location.INTERIOR][Location.EXTERIOR] = other._matrix[Location.INTERIOR][Location.EXTERIOR]\n this._matrix[Location.BOUNDARY][Location.INTERIOR] = other._matrix[Location.BOUNDARY][Location.INTERIOR]\n this._matrix[Location.BOUNDARY][Location.BOUNDARY] = other._matrix[Location.BOUNDARY][Location.BOUNDARY]\n this._matrix[Location.BOUNDARY][Location.EXTERIOR] = other._matrix[Location.BOUNDARY][Location.EXTERIOR]\n this._matrix[Location.EXTERIOR][Location.INTERIOR] = other._matrix[Location.EXTERIOR][Location.INTERIOR]\n this._matrix[Location.EXTERIOR][Location.BOUNDARY] = other._matrix[Location.EXTERIOR][Location.BOUNDARY]\n this._matrix[Location.EXTERIOR][Location.EXTERIOR] = other._matrix[Location.EXTERIOR][Location.EXTERIOR]\n }\n }\n }\n static matches() {\n if (Number.isInteger(arguments[0]) && typeof arguments[1] === 'string') {\n const actualDimensionValue = arguments[0], requiredDimensionSymbol = arguments[1]\n if (requiredDimensionSymbol === Dimension.SYM_DONTCARE) \n return true\n \n if (requiredDimensionSymbol === Dimension.SYM_TRUE && (actualDimensionValue >= 0 || actualDimensionValue === Dimension.TRUE)) \n return true\n \n if (requiredDimensionSymbol === Dimension.SYM_FALSE && actualDimensionValue === Dimension.FALSE) \n return true\n \n if (requiredDimensionSymbol === Dimension.SYM_P && actualDimensionValue === Dimension.P) \n return true\n \n if (requiredDimensionSymbol === Dimension.SYM_L && actualDimensionValue === Dimension.L) \n return true\n \n if (requiredDimensionSymbol === Dimension.SYM_A && actualDimensionValue === Dimension.A) \n return true\n \n return false\n } else if (typeof arguments[0] === 'string' && typeof arguments[1] === 'string') {\n const actualDimensionSymbols = arguments[0], requiredDimensionSymbols = arguments[1]\n const m = new IntersectionMatrix(actualDimensionSymbols)\n return m.matches(requiredDimensionSymbols)\n }\n }\n static isTrue(actualDimensionValue) {\n if (actualDimensionValue >= 0 || actualDimensionValue === Dimension.TRUE) \n return true\n \n return false\n }\n isIntersects() {\n return !this.isDisjoint()\n }\n isCovers() {\n const hasPointInCommon = IntersectionMatrix.isTrue(this._matrix[Location.INTERIOR][Location.INTERIOR]) || IntersectionMatrix.isTrue(this._matrix[Location.INTERIOR][Location.BOUNDARY]) || IntersectionMatrix.isTrue(this._matrix[Location.BOUNDARY][Location.INTERIOR]) || IntersectionMatrix.isTrue(this._matrix[Location.BOUNDARY][Location.BOUNDARY])\n return hasPointInCommon && this._matrix[Location.EXTERIOR][Location.INTERIOR] === Dimension.FALSE && this._matrix[Location.EXTERIOR][Location.BOUNDARY] === Dimension.FALSE\n }\n isCoveredBy() {\n const hasPointInCommon = IntersectionMatrix.isTrue(this._matrix[Location.INTERIOR][Location.INTERIOR]) || IntersectionMatrix.isTrue(this._matrix[Location.INTERIOR][Location.BOUNDARY]) || IntersectionMatrix.isTrue(this._matrix[Location.BOUNDARY][Location.INTERIOR]) || IntersectionMatrix.isTrue(this._matrix[Location.BOUNDARY][Location.BOUNDARY])\n return hasPointInCommon && this._matrix[Location.INTERIOR][Location.EXTERIOR] === Dimension.FALSE && this._matrix[Location.BOUNDARY][Location.EXTERIOR] === Dimension.FALSE\n }\n set() {\n if (arguments.length === 1) {\n const dimensionSymbols = arguments[0]\n for (let i = 0; i < dimensionSymbols.length; i++) {\n const row = Math.trunc(i / 3)\n const col = i % 3\n this._matrix[row][col] = Dimension.toDimensionValue(dimensionSymbols.charAt(i))\n }\n } else if (arguments.length === 3) {\n const row = arguments[0], column = arguments[1], dimensionValue = arguments[2]\n this._matrix[row][column] = dimensionValue\n }\n }\n isContains() {\n return IntersectionMatrix.isTrue(this._matrix[Location.INTERIOR][Location.INTERIOR]) && this._matrix[Location.EXTERIOR][Location.INTERIOR] === Dimension.FALSE && this._matrix[Location.EXTERIOR][Location.BOUNDARY] === Dimension.FALSE\n }\n setAtLeast() {\n if (arguments.length === 1) {\n const minimumDimensionSymbols = arguments[0]\n for (let i = 0; i < minimumDimensionSymbols.length; i++) {\n const row = Math.trunc(i / 3)\n const col = i % 3\n this.setAtLeast(row, col, Dimension.toDimensionValue(minimumDimensionSymbols.charAt(i)))\n }\n } else if (arguments.length === 3) {\n const row = arguments[0], column = arguments[1], minimumDimensionValue = arguments[2]\n if (this._matrix[row][column] < minimumDimensionValue) \n this._matrix[row][column] = minimumDimensionValue\n \n }\n }\n setAtLeastIfValid(row, column, minimumDimensionValue) {\n if (row >= 0 && column >= 0) \n this.setAtLeast(row, column, minimumDimensionValue)\n \n }\n isWithin() {\n return IntersectionMatrix.isTrue(this._matrix[Location.INTERIOR][Location.INTERIOR]) && this._matrix[Location.INTERIOR][Location.EXTERIOR] === Dimension.FALSE && this._matrix[Location.BOUNDARY][Location.EXTERIOR] === Dimension.FALSE\n }\n isTouches(dimensionOfGeometryA, dimensionOfGeometryB) {\n if (dimensionOfGeometryA > dimensionOfGeometryB) \n return this.isTouches(dimensionOfGeometryB, dimensionOfGeometryA)\n \n if (dimensionOfGeometryA === Dimension.A && dimensionOfGeometryB === Dimension.A || dimensionOfGeometryA === Dimension.L && dimensionOfGeometryB === Dimension.L || dimensionOfGeometryA === Dimension.L && dimensionOfGeometryB === Dimension.A || dimensionOfGeometryA === Dimension.P && dimensionOfGeometryB === Dimension.A || dimensionOfGeometryA === Dimension.P && dimensionOfGeometryB === Dimension.L) \n return this._matrix[Location.INTERIOR][Location.INTERIOR] === Dimension.FALSE && (IntersectionMatrix.isTrue(this._matrix[Location.INTERIOR][Location.BOUNDARY]) || IntersectionMatrix.isTrue(this._matrix[Location.BOUNDARY][Location.INTERIOR]) || IntersectionMatrix.isTrue(this._matrix[Location.BOUNDARY][Location.BOUNDARY]))\n \n return false\n }\n isOverlaps(dimensionOfGeometryA, dimensionOfGeometryB) {\n if (dimensionOfGeometryA === Dimension.P && dimensionOfGeometryB === Dimension.P || dimensionOfGeometryA === Dimension.A && dimensionOfGeometryB === Dimension.A) \n return IntersectionMatrix.isTrue(this._matrix[Location.INTERIOR][Location.INTERIOR]) && IntersectionMatrix.isTrue(this._matrix[Location.INTERIOR][Location.EXTERIOR]) && IntersectionMatrix.isTrue(this._matrix[Location.EXTERIOR][Location.INTERIOR])\n \n if (dimensionOfGeometryA === Dimension.L && dimensionOfGeometryB === Dimension.L) \n return this._matrix[Location.INTERIOR][Location.INTERIOR] === 1 && IntersectionMatrix.isTrue(this._matrix[Location.INTERIOR][Location.EXTERIOR]) && IntersectionMatrix.isTrue(this._matrix[Location.EXTERIOR][Location.INTERIOR])\n \n return false\n }\n isEquals(dimensionOfGeometryA, dimensionOfGeometryB) {\n if (dimensionOfGeometryA !== dimensionOfGeometryB) \n return false\n \n return IntersectionMatrix.isTrue(this._matrix[Location.INTERIOR][Location.INTERIOR]) && this._matrix[Location.INTERIOR][Location.EXTERIOR] === Dimension.FALSE && this._matrix[Location.BOUNDARY][Location.EXTERIOR] === Dimension.FALSE && this._matrix[Location.EXTERIOR][Location.INTERIOR] === Dimension.FALSE && this._matrix[Location.EXTERIOR][Location.BOUNDARY] === Dimension.FALSE\n }\n toString() {\n const builder = new StringBuilder('123456789')\n for (let ai = 0; ai < 3; ai++) \n for (let bi = 0; bi < 3; bi++) \n builder.setCharAt(3 * ai + bi, Dimension.toDimensionSymbol(this._matrix[ai][bi]))\n \n \n return builder.toString()\n }\n setAll(dimensionValue) {\n for (let ai = 0; ai < 3; ai++) \n for (let bi = 0; bi < 3; bi++) \n this._matrix[ai][bi] = dimensionValue\n \n \n }\n get(row, column) {\n return this._matrix[row][column]\n }\n transpose() {\n let temp = this._matrix[1][0]\n this._matrix[1][0] = this._matrix[0][1]\n this._matrix[0][1] = temp\n temp = this._matrix[2][0]\n this._matrix[2][0] = this._matrix[0][2]\n this._matrix[0][2] = temp\n temp = this._matrix[2][1]\n this._matrix[2][1] = this._matrix[1][2]\n this._matrix[1][2] = temp\n return this\n }\n matches(requiredDimensionSymbols) {\n if (requiredDimensionSymbols.length !== 9) \n throw new IllegalArgumentException('Should be length 9: ' + requiredDimensionSymbols)\n \n for (let ai = 0; ai < 3; ai++) \n for (let bi = 0; bi < 3; bi++) \n if (!IntersectionMatrix.matches(this._matrix[ai][bi], requiredDimensionSymbols.charAt(3 * ai + bi))) \n return false\n \n \n \n return true\n }\n add(im) {\n for (let i = 0; i < 3; i++) \n for (let j = 0; j < 3; j++) \n this.setAtLeast(i, j, im.get(i, j))\n \n \n }\n isDisjoint() {\n return this._matrix[Location.INTERIOR][Location.INTERIOR] === Dimension.FALSE && this._matrix[Location.INTERIOR][Location.BOUNDARY] === Dimension.FALSE && this._matrix[Location.BOUNDARY][Location.INTERIOR] === Dimension.FALSE && this._matrix[Location.BOUNDARY][Location.BOUNDARY] === Dimension.FALSE\n }\n isCrosses(dimensionOfGeometryA, dimensionOfGeometryB) {\n if (dimensionOfGeometryA === Dimension.P && dimensionOfGeometryB === Dimension.L || dimensionOfGeometryA === Dimension.P && dimensionOfGeometryB === Dimension.A || dimensionOfGeometryA === Dimension.L && dimensionOfGeometryB === Dimension.A) \n return IntersectionMatrix.isTrue(this._matrix[Location.INTERIOR][Location.INTERIOR]) && IntersectionMatrix.isTrue(this._matrix[Location.INTERIOR][Location.EXTERIOR])\n \n if (dimensionOfGeometryA === Dimension.L && dimensionOfGeometryB === Dimension.P || dimensionOfGeometryA === Dimension.A && dimensionOfGeometryB === Dimension.P || dimensionOfGeometryA === Dimension.A && dimensionOfGeometryB === Dimension.L) \n return IntersectionMatrix.isTrue(this._matrix[Location.INTERIOR][Location.INTERIOR]) && IntersectionMatrix.isTrue(this._matrix[Location.EXTERIOR][Location.INTERIOR])\n \n if (dimensionOfGeometryA === Dimension.L && dimensionOfGeometryB === Dimension.L) \n return this._matrix[Location.INTERIOR][Location.INTERIOR] === 0\n \n return false\n }\n get interfaces_() {\n return [Cloneable]\n }\n}\n","import Orientation from './Orientation'\nexport default class Angle {\n static toDegrees(radians) {\n return radians * 180 / Math.PI\n }\n static normalize(angle) {\n while (angle > Math.PI) angle -= Angle.PI_TIMES_2\n while (angle <= -Math.PI) angle += Angle.PI_TIMES_2\n return angle\n }\n static angle() {\n if (arguments.length === 1) {\n const p = arguments[0]\n return Math.atan2(p.y, p.x)\n } else if (arguments.length === 2) {\n const p0 = arguments[0], p1 = arguments[1]\n const dx = p1.x - p0.x\n const dy = p1.y - p0.y\n return Math.atan2(dy, dx)\n }\n }\n static isAcute(p0, p1, p2) {\n const dx0 = p0.x - p1.x\n const dy0 = p0.y - p1.y\n const dx1 = p2.x - p1.x\n const dy1 = p2.y - p1.y\n const dotprod = dx0 * dx1 + dy0 * dy1\n return dotprod > 0\n }\n static isObtuse(p0, p1, p2) {\n const dx0 = p0.x - p1.x\n const dy0 = p0.y - p1.y\n const dx1 = p2.x - p1.x\n const dy1 = p2.y - p1.y\n const dotprod = dx0 * dx1 + dy0 * dy1\n return dotprod < 0\n }\n static interiorAngle(p0, p1, p2) {\n const anglePrev = Angle.angle(p1, p0)\n const angleNext = Angle.angle(p1, p2)\n return Math.abs(angleNext - anglePrev)\n }\n static normalizePositive(angle) {\n if (angle < 0.0) {\n while (angle < 0.0) angle += Angle.PI_TIMES_2\n if (angle >= Angle.PI_TIMES_2) angle = 0.0\n } else {\n while (angle >= Angle.PI_TIMES_2) angle -= Angle.PI_TIMES_2\n if (angle < 0.0) angle = 0.0\n }\n return angle\n }\n static angleBetween(tip1, tail, tip2) {\n const a1 = Angle.angle(tail, tip1)\n const a2 = Angle.angle(tail, tip2)\n return Angle.diff(a1, a2)\n }\n static diff(ang1, ang2) {\n let delAngle = null\n if (ang1 < ang2) \n delAngle = ang2 - ang1\n else \n delAngle = ang1 - ang2\n \n if (delAngle > Math.PI) \n delAngle = 2 * Math.PI - delAngle\n \n return delAngle\n }\n static toRadians(angleDegrees) {\n return angleDegrees * Math.PI / 180.0\n }\n static getTurn(ang1, ang2) {\n const crossproduct = Math.sin(ang2 - ang1)\n if (crossproduct > 0) \n return Angle.COUNTERCLOCKWISE\n \n if (crossproduct < 0) \n return Angle.CLOCKWISE\n \n return Angle.NONE\n }\n static angleBetweenOriented(tip1, tail, tip2) {\n const a1 = Angle.angle(tail, tip1)\n const a2 = Angle.angle(tail, tip2)\n const angDel = a2 - a1\n if (angDel <= -Math.PI) return angDel + Angle.PI_TIMES_2\n if (angDel > Math.PI) return angDel - Angle.PI_TIMES_2\n return angDel\n }\n}\nAngle.PI_TIMES_2 = 2.0 * Math.PI\nAngle.PI_OVER_2 = Math.PI / 2.0\nAngle.PI_OVER_4 = Math.PI / 4.0\nAngle.COUNTERCLOCKWISE = Orientation.COUNTERCLOCKWISE\nAngle.CLOCKWISE = Orientation.CLOCKWISE\nAngle.NONE = Orientation.COLLINEAR\n","import Exception from '../../../../java/lang/Exception'\nexport default class NotRepresentableException extends Exception {\n constructor() {\n super()\n NotRepresentableException.constructor_.apply(this, arguments)\n }\n static constructor_() {\n Exception.constructor_.call(this, 'Projective point not representable on the Cartesian plane.')\n }\n}\n","import NotRepresentableException from './NotRepresentableException'\nimport Coordinate from '../geom/Coordinate'\nimport Double from '../../../../java/lang/Double'\nexport default class HCoordinate {\n constructor() {\n HCoordinate.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this.x = null\n this.y = null\n this.w = null\n if (arguments.length === 0) {\n this.x = 0.0\n this.y = 0.0\n this.w = 1.0\n } else if (arguments.length === 1) {\n const p = arguments[0]\n this.x = p.x\n this.y = p.y\n this.w = 1.0\n } else if (arguments.length === 2) {\n if (typeof arguments[0] === 'number' && typeof arguments[1] === 'number') {\n const _x = arguments[0], _y = arguments[1]\n this.x = _x\n this.y = _y\n this.w = 1.0\n } else if (arguments[0] instanceof HCoordinate && arguments[1] instanceof HCoordinate) {\n const p1 = arguments[0], p2 = arguments[1]\n this.x = p1.y * p2.w - p2.y * p1.w\n this.y = p2.x * p1.w - p1.x * p2.w\n this.w = p1.x * p2.y - p2.x * p1.y\n } else if (arguments[0] instanceof Coordinate && arguments[1] instanceof Coordinate) {\n const p1 = arguments[0], p2 = arguments[1]\n this.x = p1.y - p2.y\n this.y = p2.x - p1.x\n this.w = p1.x * p2.y - p2.x * p1.y\n }\n } else if (arguments.length === 3) {\n const _x = arguments[0], _y = arguments[1], _w = arguments[2]\n this.x = _x\n this.y = _y\n this.w = _w\n } else if (arguments.length === 4) {\n const p1 = arguments[0], p2 = arguments[1], q1 = arguments[2], q2 = arguments[3]\n const px = p1.y - p2.y\n const py = p2.x - p1.x\n const pw = p1.x * p2.y - p2.x * p1.y\n const qx = q1.y - q2.y\n const qy = q2.x - q1.x\n const qw = q1.x * q2.y - q2.x * q1.y\n this.x = py * qw - qy * pw\n this.y = qx * pw - px * qw\n this.w = px * qy - qx * py\n }\n }\n getY() {\n const a = this.y / this.w\n if (Double.isNaN(a) || Double.isInfinite(a)) \n throw new NotRepresentableException()\n \n return a\n }\n getX() {\n const a = this.x / this.w\n if (Double.isNaN(a) || Double.isInfinite(a)) \n throw new NotRepresentableException()\n \n return a\n }\n getCoordinate() {\n const p = new Coordinate()\n p.x = this.getX()\n p.y = this.getY()\n return p\n }\n}\n","import Coordinate from './Coordinate'\nimport IllegalArgumentException from '../../../../java/lang/IllegalArgumentException'\nimport DD from '../math/DD'\nimport Angle from '../algorithm/Angle'\nimport HCoordinate from '../algorithm/HCoordinate'\nexport default class Triangle {\n constructor() {\n Triangle.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this.p0 = null\n this.p1 = null\n this.p2 = null\n const p0 = arguments[0], p1 = arguments[1], p2 = arguments[2]\n this.p0 = p0\n this.p1 = p1\n this.p2 = p2\n }\n static area(a, b, c) {\n return Math.abs(((c.x - a.x) * (b.y - a.y) - (b.x - a.x) * (c.y - a.y)) / 2)\n }\n static signedArea(a, b, c) {\n return ((c.x - a.x) * (b.y - a.y) - (b.x - a.x) * (c.y - a.y)) / 2\n }\n static det(m00, m01, m10, m11) {\n return m00 * m11 - m01 * m10\n }\n static interpolateZ(p, v0, v1, v2) {\n const x0 = v0.x\n const y0 = v0.y\n const a = v1.x - x0\n const b = v2.x - x0\n const c = v1.y - y0\n const d = v2.y - y0\n const det = a * d - b * c\n const dx = p.x - x0\n const dy = p.y - y0\n const t = (d * dx - b * dy) / det\n const u = (-c * dx + a * dy) / det\n const z = v0.getZ() + t * (v1.getZ() - v0.getZ()) + u * (v2.getZ() - v0.getZ())\n return z\n }\n static longestSideLength(a, b, c) {\n const lenAB = a.distance(b)\n const lenBC = b.distance(c)\n const lenCA = c.distance(a)\n let maxLen = lenAB\n if (lenBC > maxLen) maxLen = lenBC\n if (lenCA > maxLen) maxLen = lenCA\n return maxLen\n }\n static circumcentreDD(a, b, c) {\n const ax = DD.valueOf(a.x).subtract(c.x)\n const ay = DD.valueOf(a.y).subtract(c.y)\n const bx = DD.valueOf(b.x).subtract(c.x)\n const by = DD.valueOf(b.y).subtract(c.y)\n const denom = DD.determinant(ax, ay, bx, by).multiply(2)\n const asqr = ax.sqr().add(ay.sqr())\n const bsqr = bx.sqr().add(by.sqr())\n const numx = DD.determinant(ay, asqr, by, bsqr)\n const numy = DD.determinant(ax, asqr, bx, bsqr)\n const ccx = DD.valueOf(c.x).subtract(numx.divide(denom)).doubleValue()\n const ccy = DD.valueOf(c.y).add(numy.divide(denom)).doubleValue()\n return new Coordinate(ccx, ccy)\n }\n static isAcute(a, b, c) {\n if (!Angle.isAcute(a, b, c)) return false\n if (!Angle.isAcute(b, c, a)) return false\n if (!Angle.isAcute(c, a, b)) return false\n return true\n }\n static circumcentre(a, b, c) {\n const cx = c.x\n const cy = c.y\n const ax = a.x - cx\n const ay = a.y - cy\n const bx = b.x - cx\n const by = b.y - cy\n const denom = 2 * Triangle.det(ax, ay, bx, by)\n const numx = Triangle.det(ay, ax * ax + ay * ay, by, bx * bx + by * by)\n const numy = Triangle.det(ax, ax * ax + ay * ay, bx, bx * bx + by * by)\n const ccx = cx - numx / denom\n const ccy = cy + numy / denom\n return new Coordinate(ccx, ccy)\n }\n static perpendicularBisector(a, b) {\n const dx = b.x - a.x\n const dy = b.y - a.y\n const l1 = new HCoordinate(a.x + dx / 2.0, a.y + dy / 2.0, 1.0)\n const l2 = new HCoordinate(a.x - dy + dx / 2.0, a.y + dx + dy / 2.0, 1.0)\n return new HCoordinate(l1, l2)\n }\n static angleBisector(a, b, c) {\n const len0 = b.distance(a)\n const len2 = b.distance(c)\n const frac = len0 / (len0 + len2)\n const dx = c.x - a.x\n const dy = c.y - a.y\n const splitPt = new Coordinate(a.x + frac * dx, a.y + frac * dy)\n return splitPt\n }\n static area3D(a, b, c) {\n const ux = b.x - a.x\n const uy = b.y - a.y\n const uz = b.getZ() - a.getZ()\n const vx = c.x - a.x\n const vy = c.y - a.y\n const vz = c.getZ() - a.getZ()\n const crossx = uy * vz - uz * vy\n const crossy = uz * vx - ux * vz\n const crossz = ux * vy - uy * vx\n const absSq = crossx * crossx + crossy * crossy + crossz * crossz\n const area3D = Math.sqrt(absSq) / 2\n return area3D\n }\n static centroid(a, b, c) {\n const x = (a.x + b.x + c.x) / 3\n const y = (a.y + b.y + c.y) / 3\n return new Coordinate(x, y)\n }\n static inCentre(a, b, c) {\n const len0 = b.distance(c)\n const len1 = a.distance(c)\n const len2 = a.distance(b)\n const circum = len0 + len1 + len2\n const inCentreX = (len0 * a.x + len1 * b.x + len2 * c.x) / circum\n const inCentreY = (len0 * a.y + len1 * b.y + len2 * c.y) / circum\n return new Coordinate(inCentreX, inCentreY)\n }\n area() {\n return Triangle.area(this.p0, this.p1, this.p2)\n }\n signedArea() {\n return Triangle.signedArea(this.p0, this.p1, this.p2)\n }\n interpolateZ(p) {\n if (p === null) throw new IllegalArgumentException('Supplied point is null.')\n return Triangle.interpolateZ(p, this.p0, this.p1, this.p2)\n }\n longestSideLength() {\n return Triangle.longestSideLength(this.p0, this.p1, this.p2)\n }\n isAcute() {\n return Triangle.isAcute(this.p0, this.p1, this.p2)\n }\n circumcentre() {\n return Triangle.circumcentre(this.p0, this.p1, this.p2)\n }\n area3D() {\n return Triangle.area3D(this.p0, this.p1, this.p2)\n }\n centroid() {\n return Triangle.centroid(this.p0, this.p1, this.p2)\n }\n inCentre() {\n return Triangle.inCentre(this.p0, this.p1, this.p2)\n }\n}\n","import Exception from '../../../../../java/lang/Exception'\nexport default class NoninvertibleTransformationException extends Exception {\n constructor() {\n super()\n NoninvertibleTransformationException.constructor_.apply(this, arguments)\n }\n static constructor_() {\n if (arguments.length === 0) {\n Exception.constructor_.call(this)\n } else if (arguments.length === 1) {\n const msg = arguments[0]\n Exception.constructor_.call(this, msg)\n }\n }\n}\n","import NoninvertibleTransformationException from './NoninvertibleTransformationException'\nimport hasInterface from '../../../../../hasInterface'\nimport Coordinate from '../Coordinate'\nimport IllegalArgumentException from '../../../../../java/lang/IllegalArgumentException'\nimport Exception from '../../../../../java/lang/Exception'\nimport CoordinateSequence from '../CoordinateSequence'\nimport Cloneable from '../../../../../java/lang/Cloneable'\nimport CoordinateSequenceFilter from '../CoordinateSequenceFilter'\nimport Assert from '../../util/Assert'\nexport default class AffineTransformation {\n constructor() {\n AffineTransformation.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._m00 = null\n this._m01 = null\n this._m02 = null\n this._m10 = null\n this._m11 = null\n this._m12 = null\n if (arguments.length === 0) {\n this.setToIdentity()\n } else if (arguments.length === 1) {\n if (arguments[0] instanceof Array) {\n const matrix = arguments[0]\n this._m00 = matrix[0]\n this._m01 = matrix[1]\n this._m02 = matrix[2]\n this._m10 = matrix[3]\n this._m11 = matrix[4]\n this._m12 = matrix[5]\n } else if (arguments[0] instanceof AffineTransformation) {\n const trans = arguments[0]\n this.setTransformation(trans)\n }\n } else if (arguments.length === 6) {\n if (typeof arguments[5] === 'number' && (typeof arguments[4] === 'number' && (typeof arguments[3] === 'number' && (typeof arguments[2] === 'number' && (typeof arguments[0] === 'number' && typeof arguments[1] === 'number'))))) {\n const m00 = arguments[0], m01 = arguments[1], m02 = arguments[2], m10 = arguments[3], m11 = arguments[4], m12 = arguments[5]\n this.setTransformation(m00, m01, m02, m10, m11, m12)\n } else if (arguments[5] instanceof Coordinate && (arguments[4] instanceof Coordinate && (arguments[3] instanceof Coordinate && (arguments[2] instanceof Coordinate && (arguments[0] instanceof Coordinate && arguments[1] instanceof Coordinate))))) {\n const src0 = arguments[0], src1 = arguments[1], src2 = arguments[2], dest0 = arguments[3], dest1 = arguments[4], dest2 = arguments[5]\n }\n }\n }\n static translationInstance(x, y) {\n const trans = new AffineTransformation()\n trans.setToTranslation(x, y)\n return trans\n }\n static shearInstance(xShear, yShear) {\n const trans = new AffineTransformation()\n trans.setToShear(xShear, yShear)\n return trans\n }\n static reflectionInstance() {\n if (arguments.length === 2) {\n const x = arguments[0], y = arguments[1]\n const trans = new AffineTransformation()\n trans.setToReflection(x, y)\n return trans\n } else if (arguments.length === 4) {\n const x0 = arguments[0], y0 = arguments[1], x1 = arguments[2], y1 = arguments[3]\n const trans = new AffineTransformation()\n trans.setToReflection(x0, y0, x1, y1)\n return trans\n }\n }\n static rotationInstance() {\n if (arguments.length === 1) {\n const theta = arguments[0]\n return AffineTransformation.rotationInstance(Math.sin(theta), Math.cos(theta))\n } else if (arguments.length === 2) {\n const sinTheta = arguments[0], cosTheta = arguments[1]\n const trans = new AffineTransformation()\n trans.setToRotation(sinTheta, cosTheta)\n return trans\n } else if (arguments.length === 3) {\n const theta = arguments[0], x = arguments[1], y = arguments[2]\n return AffineTransformation.rotationInstance(Math.sin(theta), Math.cos(theta), x, y)\n } else if (arguments.length === 4) {\n const sinTheta = arguments[0], cosTheta = arguments[1], x = arguments[2], y = arguments[3]\n const trans = new AffineTransformation()\n trans.setToRotation(sinTheta, cosTheta, x, y)\n return trans\n }\n }\n static scaleInstance() {\n if (arguments.length === 2) {\n const xScale = arguments[0], yScale = arguments[1]\n const trans = new AffineTransformation()\n trans.setToScale(xScale, yScale)\n return trans\n } else if (arguments.length === 4) {\n const xScale = arguments[0], yScale = arguments[1], x = arguments[2], y = arguments[3]\n const trans = new AffineTransformation()\n trans.translate(-x, -y)\n trans.scale(xScale, yScale)\n trans.translate(x, y)\n return trans\n }\n }\n setToReflectionBasic(x0, y0, x1, y1) {\n if (x0 === x1 && y0 === y1) \n throw new IllegalArgumentException('Reflection line points must be distinct')\n \n const dx = x1 - x0\n const dy = y1 - y0\n const d = Math.sqrt(dx * dx + dy * dy)\n const sin = dy / d\n const cos = dx / d\n const cs2 = 2 * sin * cos\n const c2s2 = cos * cos - sin * sin\n this._m00 = c2s2\n this._m01 = cs2\n this._m02 = 0.0\n this._m10 = cs2\n this._m11 = -c2s2\n this._m12 = 0.0\n return this\n }\n getInverse() {\n const det = this.getDeterminant()\n if (det === 0) throw new NoninvertibleTransformationException('Transformation is non-invertible')\n const im00 = this._m11 / det\n const im10 = -this._m10 / det\n const im01 = -this._m01 / det\n const im11 = this._m00 / det\n const im02 = (this._m01 * this._m12 - this._m02 * this._m11) / det\n const im12 = (-this._m00 * this._m12 + this._m10 * this._m02) / det\n return new AffineTransformation(im00, im01, im02, im10, im11, im12)\n }\n compose(trans) {\n const mp00 = trans._m00 * this._m00 + trans._m01 * this._m10\n const mp01 = trans._m00 * this._m01 + trans._m01 * this._m11\n const mp02 = trans._m00 * this._m02 + trans._m01 * this._m12 + trans._m02\n const mp10 = trans._m10 * this._m00 + trans._m11 * this._m10\n const mp11 = trans._m10 * this._m01 + trans._m11 * this._m11\n const mp12 = trans._m10 * this._m02 + trans._m11 * this._m12 + trans._m12\n this._m00 = mp00\n this._m01 = mp01\n this._m02 = mp02\n this._m10 = mp10\n this._m11 = mp11\n this._m12 = mp12\n return this\n }\n equals(obj) {\n if (obj === null) return false\n if (!(obj instanceof AffineTransformation)) return false\n const trans = obj\n return this._m00 === trans._m00 && this._m01 === trans._m01 && this._m02 === trans._m02 && this._m10 === trans._m10 && this._m11 === trans._m11 && this._m12 === trans._m12\n }\n setToScale(xScale, yScale) {\n this._m00 = xScale\n this._m01 = 0.0\n this._m02 = 0.0\n this._m10 = 0.0\n this._m11 = yScale\n this._m12 = 0.0\n return this\n }\n isIdentity() {\n return this._m00 === 1 && this._m01 === 0 && this._m02 === 0 && this._m10 === 0 && this._m11 === 1 && this._m12 === 0\n }\n scale(xScale, yScale) {\n this.compose(AffineTransformation.scaleInstance(xScale, yScale))\n return this\n }\n setToIdentity() {\n this._m00 = 1.0\n this._m01 = 0.0\n this._m02 = 0.0\n this._m10 = 0.0\n this._m11 = 1.0\n this._m12 = 0.0\n return this\n }\n isGeometryChanged() {\n return true\n }\n setTransformation() {\n if (arguments.length === 1) {\n const trans = arguments[0]\n this._m00 = trans._m00\n this._m01 = trans._m01\n this._m02 = trans._m02\n this._m10 = trans._m10\n this._m11 = trans._m11\n this._m12 = trans._m12\n return this\n } else if (arguments.length === 6) {\n const m00 = arguments[0], m01 = arguments[1], m02 = arguments[2], m10 = arguments[3], m11 = arguments[4], m12 = arguments[5]\n this._m00 = m00\n this._m01 = m01\n this._m02 = m02\n this._m10 = m10\n this._m11 = m11\n this._m12 = m12\n return this\n }\n }\n setToRotation() {\n if (arguments.length === 1) {\n const theta = arguments[0]\n this.setToRotation(Math.sin(theta), Math.cos(theta))\n return this\n } else if (arguments.length === 2) {\n const sinTheta = arguments[0], cosTheta = arguments[1]\n this._m00 = cosTheta\n this._m01 = -sinTheta\n this._m02 = 0.0\n this._m10 = sinTheta\n this._m11 = cosTheta\n this._m12 = 0.0\n return this\n } else if (arguments.length === 3) {\n const theta = arguments[0], x = arguments[1], y = arguments[2]\n this.setToRotation(Math.sin(theta), Math.cos(theta), x, y)\n return this\n } else if (arguments.length === 4) {\n const sinTheta = arguments[0], cosTheta = arguments[1], x = arguments[2], y = arguments[3]\n this._m00 = cosTheta\n this._m01 = -sinTheta\n this._m02 = x - x * cosTheta + y * sinTheta\n this._m10 = sinTheta\n this._m11 = cosTheta\n this._m12 = y - x * sinTheta - y * cosTheta\n return this\n }\n }\n getMatrixEntries() {\n return [this._m00, this._m01, this._m02, this._m10, this._m11, this._m12]\n }\n filter(seq, i) {\n this.transform(seq, i)\n }\n rotate() {\n if (arguments.length === 1) {\n const theta = arguments[0]\n this.compose(AffineTransformation.rotationInstance(theta))\n return this\n } else if (arguments.length === 2) {\n const sinTheta = arguments[0], cosTheta = arguments[1]\n this.compose(AffineTransformation.rotationInstance(sinTheta, cosTheta))\n return this\n } else if (arguments.length === 3) {\n const theta = arguments[0], x = arguments[1], y = arguments[2]\n this.compose(AffineTransformation.rotationInstance(theta, x, y))\n return this\n } else if (arguments.length === 4) {\n const sinTheta = arguments[0], cosTheta = arguments[1], x = arguments[2], y = arguments[3]\n this.compose(AffineTransformation.rotationInstance(sinTheta, cosTheta, x, y))\n return this\n }\n }\n getDeterminant() {\n return this._m00 * this._m11 - this._m01 * this._m10\n }\n composeBefore(trans) {\n const mp00 = this._m00 * trans._m00 + this._m01 * trans._m10\n const mp01 = this._m00 * trans._m01 + this._m01 * trans._m11\n const mp02 = this._m00 * trans._m02 + this._m01 * trans._m12 + this._m02\n const mp10 = this._m10 * trans._m00 + this._m11 * trans._m10\n const mp11 = this._m10 * trans._m01 + this._m11 * trans._m11\n const mp12 = this._m10 * trans._m02 + this._m11 * trans._m12 + this._m12\n this._m00 = mp00\n this._m01 = mp01\n this._m02 = mp02\n this._m10 = mp10\n this._m11 = mp11\n this._m12 = mp12\n return this\n }\n setToShear(xShear, yShear) {\n this._m00 = 1.0\n this._m01 = xShear\n this._m02 = 0.0\n this._m10 = yShear\n this._m11 = 1.0\n this._m12 = 0.0\n return this\n }\n isDone() {\n return false\n }\n clone() {\n try {\n return null\n } catch (ex) {\n if (ex instanceof Exception) \n Assert.shouldNeverReachHere()\n else throw ex\n } finally {}\n return null\n }\n translate(x, y) {\n this.compose(AffineTransformation.translationInstance(x, y))\n return this\n }\n setToReflection() {\n if (arguments.length === 2) {\n const x = arguments[0], y = arguments[1]\n if (x === 0.0 && y === 0.0) \n throw new IllegalArgumentException('Reflection vector must be non-zero')\n \n if (x === y) {\n this._m00 = 0.0\n this._m01 = 1.0\n this._m02 = 0.0\n this._m10 = 1.0\n this._m11 = 0.0\n this._m12 = 0.0\n return this\n }\n const d = Math.sqrt(x * x + y * y)\n const sin = y / d\n const cos = x / d\n this.rotate(-sin, cos)\n this.scale(1, -1)\n this.rotate(sin, cos)\n return this\n } else if (arguments.length === 4) {\n const x0 = arguments[0], y0 = arguments[1], x1 = arguments[2], y1 = arguments[3]\n if (x0 === x1 && y0 === y1) \n throw new IllegalArgumentException('Reflection line points must be distinct')\n \n this.setToTranslation(-x0, -y0)\n const dx = x1 - x0\n const dy = y1 - y0\n const d = Math.sqrt(dx * dx + dy * dy)\n const sin = dy / d\n const cos = dx / d\n this.rotate(-sin, cos)\n this.scale(1, -1)\n this.rotate(sin, cos)\n this.translate(x0, y0)\n return this\n }\n }\n toString() {\n return 'AffineTransformation[[' + this._m00 + ', ' + this._m01 + ', ' + this._m02 + '], [' + this._m10 + ', ' + this._m11 + ', ' + this._m12 + ']]'\n }\n setToTranslation(dx, dy) {\n this._m00 = 1.0\n this._m01 = 0.0\n this._m02 = dx\n this._m10 = 0.0\n this._m11 = 1.0\n this._m12 = dy\n return this\n }\n shear(xShear, yShear) {\n this.compose(AffineTransformation.shearInstance(xShear, yShear))\n return this\n }\n transform() {\n if (arguments.length === 1) {\n const g = arguments[0]\n const g2 = g.copy()\n g2.apply(this)\n return g2\n } else if (arguments.length === 2) {\n if (arguments[0] instanceof Coordinate && arguments[1] instanceof Coordinate) {\n const src = arguments[0], dest = arguments[1]\n const xp = this._m00 * src.x + this._m01 * src.y + this._m02\n const yp = this._m10 * src.x + this._m11 * src.y + this._m12\n dest.x = xp\n dest.y = yp\n return dest\n } else if (hasInterface(arguments[0], CoordinateSequence) && Number.isInteger(arguments[1])) {\n const seq = arguments[0], i = arguments[1]\n const xp = this._m00 * seq.getOrdinate(i, 0) + this._m01 * seq.getOrdinate(i, 1) + this._m02\n const yp = this._m10 * seq.getOrdinate(i, 0) + this._m11 * seq.getOrdinate(i, 1) + this._m12\n seq.setOrdinate(i, 0, xp)\n seq.setOrdinate(i, 1, yp)\n }\n }\n }\n reflect() {\n if (arguments.length === 2) {\n const x = arguments[0], y = arguments[1]\n this.compose(AffineTransformation.reflectionInstance(x, y))\n return this\n } else if (arguments.length === 4) {\n const x0 = arguments[0], y0 = arguments[1], x1 = arguments[2], y1 = arguments[3]\n this.compose(AffineTransformation.reflectionInstance(x0, y0, x1, y1))\n return this\n }\n }\n get interfaces_() {\n return [Cloneable, CoordinateSequenceFilter]\n }\n}\n","import IllegalArgumentException from '../../../../java/lang/IllegalArgumentException'\nexport default class Matrix {\n static solve(a, b) {\n const n = b.length\n if (a.length !== n || a[0].length !== n) throw new IllegalArgumentException('Matrix A is incorrectly sized')\n for (let i = 0; i < n; i++) {\n let maxElementRow = i\n for (let j = i + 1; j < n; j++) if (Math.abs(a[j][i]) > Math.abs(a[maxElementRow][i])) maxElementRow = j\n if (a[maxElementRow][i] === 0.0) return null\n Matrix.swapRows(a, i, maxElementRow)\n Matrix.swapRows(b, i, maxElementRow)\n for (let j = i + 1; j < n; j++) {\n const rowFactor = a[j][i] / a[i][i]\n for (let k = n - 1; k >= i; k--) a[j][k] -= a[i][k] * rowFactor\n b[j] -= b[i] * rowFactor\n }\n }\n const solution = new Array(n).fill(null)\n for (let j = n - 1; j >= 0; j--) {\n let t = 0.0\n for (let k = j + 1; k < n; k++) t += a[j][k] * solution[k]\n solution[j] = (b[j] - t) / a[j][j]\n }\n return solution\n }\n static swapRows() {\n if (Number.isInteger(arguments[2]) && (arguments[0] instanceof Array && Number.isInteger(arguments[1]))) {\n const m = arguments[0], i = arguments[1], j = arguments[2]\n if (i === j) return null\n for (let col = 0; col < m[0].length; col++) {\n const temp = m[i][col]\n m[i][col] = m[j][col]\n m[j][col] = temp\n }\n } else if (Number.isInteger(arguments[2]) && (arguments[0] instanceof Array && Number.isInteger(arguments[1]))) {\n const m = arguments[0], i = arguments[1], j = arguments[2]\n if (i === j) return null\n const temp = m[i]\n m[i] = m[j]\n m[j] = temp\n }\n }\n}\n","import AffineTransformation from './AffineTransformation'\nimport Matrix from '../../math/Matrix'\nexport default class AffineTransformationBuilder {\n constructor() {\n AffineTransformationBuilder.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._src0 = null\n this._src1 = null\n this._src2 = null\n this._dest0 = null\n this._dest1 = null\n this._dest2 = null\n this._m00 = null\n this._m01 = null\n this._m02 = null\n this._m10 = null\n this._m11 = null\n this._m12 = null\n const src0 = arguments[0], src1 = arguments[1], src2 = arguments[2], dest0 = arguments[3], dest1 = arguments[4], dest2 = arguments[5]\n this._src0 = src0\n this._src1 = src1\n this._src2 = src2\n this._dest0 = dest0\n this._dest1 = dest1\n this._dest2 = dest2\n }\n solve(b) {\n const a = [[this._src0.x, this._src0.y, 1], [this._src1.x, this._src1.y, 1], [this._src2.x, this._src2.y, 1]]\n return Matrix.solve(a, b)\n }\n compute() {\n const bx = [this._dest0.x, this._dest1.x, this._dest2.x]\n const row0 = this.solve(bx)\n if (row0 === null) return false\n this._m00 = row0[0]\n this._m01 = row0[1]\n this._m02 = row0[2]\n const by = [this._dest0.y, this._dest1.y, this._dest2.y]\n const row1 = this.solve(by)\n if (row1 === null) return false\n this._m10 = row1[0]\n this._m11 = row1[1]\n this._m12 = row1[2]\n return true\n }\n getTransformation() {\n const isSolvable = this.compute()\n if (isSolvable) return new AffineTransformation(this._m00, this._m01, this._m02, this._m10, this._m11, this._m12)\n return null\n }\n}\n","import Coordinate from '../Coordinate'\nimport IllegalArgumentException from '../../../../../java/lang/IllegalArgumentException'\nimport AffineTransformation from './AffineTransformation'\nimport AffineTransformationBuilder from './AffineTransformationBuilder'\nimport Angle from '../../algorithm/Angle'\nexport default class AffineTransformationFactory {\n static createFromBaseLines(src0, src1, dest0, dest1) {\n const rotPt = new Coordinate(src0.x + dest1.x - dest0.x, src0.y + dest1.y - dest0.y)\n const ang = Angle.angleBetweenOriented(src1, src0, rotPt)\n const srcDist = src1.distance(src0)\n const destDist = dest1.distance(dest0)\n if (srcDist === 0.0) return new AffineTransformation()\n const scale = destDist / srcDist\n const trans = AffineTransformation.translationInstance(-src0.x, -src0.y)\n trans.rotate(ang)\n trans.scale(scale, scale)\n trans.translate(dest0.x, dest0.y)\n return trans\n }\n static createFromControlVectors() {\n if (arguments.length === 2) {\n if (arguments[0] instanceof Coordinate && arguments[1] instanceof Coordinate) {\n const src0 = arguments[0], dest0 = arguments[1]\n const dx = dest0.x - src0.x\n const dy = dest0.y - src0.y\n return AffineTransformation.translationInstance(dx, dy)\n } else if (arguments[0] instanceof Array && arguments[1] instanceof Array) {\n const src = arguments[0], dest = arguments[1]\n if (src.length !== dest.length) throw new IllegalArgumentException('Src and Dest arrays are not the same length')\n if (src.length <= 0) throw new IllegalArgumentException('Too few control points')\n if (src.length > 3) throw new IllegalArgumentException('Too many control points')\n if (src.length === 1) return AffineTransformationFactory.createFromControlVectors(src[0], dest[0])\n if (src.length === 2) return AffineTransformationFactory.createFromControlVectors(src[0], src[1], dest[0], dest[1])\n return AffineTransformationFactory.createFromControlVectors(src[0], src[1], src[2], dest[0], dest[1], dest[2])\n }\n } else if (arguments.length === 4) {\n const src0 = arguments[0], src1 = arguments[1], dest0 = arguments[2], dest1 = arguments[3]\n const rotPt = new Coordinate(dest1.x - dest0.x, dest1.y - dest0.y)\n const ang = Angle.angleBetweenOriented(src1, src0, rotPt)\n const srcDist = src1.distance(src0)\n const destDist = dest1.distance(dest0)\n if (srcDist === 0.0) return null\n const scale = destDist / srcDist\n const trans = AffineTransformation.translationInstance(-src0.x, -src0.y)\n trans.rotate(ang)\n trans.scale(scale, scale)\n trans.translate(dest0.x, dest0.y)\n return trans\n } else if (arguments.length === 6) {\n const src0 = arguments[0], src1 = arguments[1], src2 = arguments[2], dest0 = arguments[3], dest1 = arguments[4], dest2 = arguments[5]\n const builder = new AffineTransformationBuilder(src0, src1, src2, dest0, dest1, dest2)\n return builder.getTransformation()\n }\n }\n}\n","import LineString from '../LineString'\nimport Point from '../Point'\nimport GeometryComponentFilter from '../GeometryComponentFilter'\nimport ArrayList from '../../../../../java/util/ArrayList'\nexport default class ComponentCoordinateExtracter {\n constructor() {\n ComponentCoordinateExtracter.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._coords = null\n const coords = arguments[0]\n this._coords = coords\n }\n static getCoordinates(geom) {\n const coords = new ArrayList()\n geom.apply(new ComponentCoordinateExtracter(coords))\n return coords\n }\n filter(geom) {\n if (geom instanceof LineString || geom instanceof Point) this._coords.add(geom.getCoordinate())\n }\n get interfaces_() {\n return [GeometryComponentFilter]\n }\n}\n","import GeometryFactory from '../GeometryFactory'\nimport ArrayList from '../../../../../java/util/ArrayList'\nexport default class GeometryCollectionMapper {\n constructor() {\n GeometryCollectionMapper.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._mapOp = null\n const mapOp = arguments[0]\n this._mapOp = mapOp\n }\n static map(gc, op) {\n const mapper = new GeometryCollectionMapper(op)\n return mapper.map(gc)\n }\n map(gc) {\n const mapped = new ArrayList()\n for (let i = 0; i < gc.getNumGeometries(); i++) {\n const g = this._mapOp.map(gc.getGeometryN(i))\n if (!g.isEmpty()) mapped.add(g)\n }\n return gc.getFactory().createGeometryCollection(GeometryFactory.toGeometryArray(mapped))\n }\n}\n","import ArrayList from '../../../../../java/util/ArrayList'\nexport default class GeometryCombiner {\n constructor() {\n GeometryCombiner.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._geomFactory = null\n this._skipEmpty = false\n this._inputGeoms = null\n const geoms = arguments[0]\n this._geomFactory = GeometryCombiner.extractFactory(geoms)\n this._inputGeoms = geoms\n }\n static combine() {\n if (arguments.length === 1) {\n const geoms = arguments[0]\n const combiner = new GeometryCombiner(geoms)\n return combiner.combine()\n } else if (arguments.length === 2) {\n const g0 = arguments[0], g1 = arguments[1]\n const combiner = new GeometryCombiner(GeometryCombiner.createList(g0, g1))\n return combiner.combine()\n } else if (arguments.length === 3) {\n const g0 = arguments[0], g1 = arguments[1], g2 = arguments[2]\n const combiner = new GeometryCombiner(GeometryCombiner.createList(g0, g1, g2))\n return combiner.combine()\n }\n }\n static extractFactory(geoms) {\n if (geoms.isEmpty()) return null\n return geoms.iterator().next().getFactory()\n }\n static createList() {\n if (arguments.length === 2) {\n const obj0 = arguments[0], obj1 = arguments[1]\n const list = new ArrayList()\n list.add(obj0)\n list.add(obj1)\n return list\n } else if (arguments.length === 3) {\n const obj0 = arguments[0], obj1 = arguments[1], obj2 = arguments[2]\n const list = new ArrayList()\n list.add(obj0)\n list.add(obj1)\n list.add(obj2)\n return list\n }\n }\n extractElements(geom, elems) {\n if (geom === null) return null\n for (let i = 0; i < geom.getNumGeometries(); i++) {\n const elemGeom = geom.getGeometryN(i)\n if (this._skipEmpty && elemGeom.isEmpty()) continue\n elems.add(elemGeom)\n }\n }\n combine() {\n const elems = new ArrayList()\n for (let i = this._inputGeoms.iterator(); i.hasNext(); ) {\n const g = i.next()\n this.extractElements(g, elems)\n }\n if (elems.size() === 0) {\n if (this._geomFactory !== null) \n return this._geomFactory.createGeometryCollection()\n \n return null\n }\n return this._geomFactory.buildGeometry(elems)\n }\n}\n","import LineString from '../LineString'\nimport Geometry from '../Geometry'\nimport Point from '../Point'\nimport Polygon from '../Polygon'\nimport LinearRing from '../LinearRing'\nimport GeometryCollection from '../GeometryCollection'\nimport ArrayList from '../../../../../java/util/ArrayList'\nimport Assert from '../../util/Assert'\nexport default class GeometryEditor {\n constructor() {\n GeometryEditor.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._factory = null\n this._isUserDataCopied = false\n if (arguments.length === 0) {} else if (arguments.length === 1) {\n const factory = arguments[0]\n this._factory = factory\n }\n }\n setCopyUserData(isUserDataCopied) {\n this._isUserDataCopied = isUserDataCopied\n }\n edit(geometry, operation) {\n if (geometry === null) return null\n const result = this.editInternal(geometry, operation)\n if (this._isUserDataCopied) \n result.setUserData(geometry.getUserData())\n \n return result\n }\n editInternal(geometry, operation) {\n if (this._factory === null) this._factory = geometry.getFactory()\n if (geometry instanceof GeometryCollection) \n return this.editGeometryCollection(geometry, operation)\n \n if (geometry instanceof Polygon) \n return this.editPolygon(geometry, operation)\n \n if (geometry instanceof Point) \n return operation.edit(geometry, this._factory)\n \n if (geometry instanceof LineString) \n return operation.edit(geometry, this._factory)\n \n Assert.shouldNeverReachHere('Unsupported Geometry type: ' + geometry.getGeometryType())\n return null\n }\n editGeometryCollection(collection, operation) {\n const collectionForType = operation.edit(collection, this._factory)\n const geometries = new ArrayList()\n for (let i = 0; i < collectionForType.getNumGeometries(); i++) {\n const geometry = this.edit(collectionForType.getGeometryN(i), operation)\n if (geometry === null || geometry.isEmpty()) \n continue\n \n geometries.add(geometry)\n }\n if (collectionForType.getGeometryType() === Geometry.TYPENAME_MULTIPOINT) \n return this._factory.createMultiPoint(geometries.toArray([]))\n \n if (collectionForType.getGeometryType() === Geometry.TYPENAME_MULTILINESTRING) \n return this._factory.createMultiLineString(geometries.toArray([]))\n \n if (collectionForType.getGeometryType() === Geometry.TYPENAME_MULTIPOLYGON) \n return this._factory.createMultiPolygon(geometries.toArray([]))\n \n return this._factory.createGeometryCollection(geometries.toArray([]))\n }\n editPolygon(polygon, operation) {\n let newPolygon = operation.edit(polygon, this._factory)\n if (newPolygon === null) newPolygon = this._factory.createPolygon()\n if (newPolygon.isEmpty()) \n return newPolygon\n \n const shell = this.edit(newPolygon.getExteriorRing(), operation)\n if (shell === null || shell.isEmpty()) \n return this._factory.createPolygon()\n \n const holes = new ArrayList()\n for (let i = 0; i < newPolygon.getNumInteriorRing(); i++) {\n const hole = this.edit(newPolygon.getInteriorRingN(i), operation)\n if (hole === null || hole.isEmpty()) \n continue\n \n holes.add(hole)\n }\n return this._factory.createPolygon(shell, holes.toArray([]))\n }\n}\nfunction GeometryEditorOperation() {}\nGeometryEditor.GeometryEditorOperation = GeometryEditorOperation\nclass NoOpGeometryOperation {\n edit(geometry, factory) {\n return geometry\n }\n get interfaces_() {\n return [GeometryEditorOperation]\n }\n}\nclass CoordinateOperation {\n edit(geometry, factory) {\n const coordinates = this.edit(geometry.getCoordinates(), geometry)\n if (geometry instanceof LinearRing) \n if (coordinates === null) return factory.createLinearRing(); else return factory.createLinearRing(coordinates)\n \n if (geometry instanceof LineString) \n if (coordinates === null) return factory.createLineString(); else return factory.createLineString(coordinates)\n \n if (geometry instanceof Point) \n if (coordinates === null || coordinates.length === 0) return factory.createPoint(); else return factory.createPoint(coordinates[0])\n \n return geometry\n }\n get interfaces_() {\n return [GeometryEditorOperation]\n }\n}\nclass CoordinateSequenceOperation {\n edit(geometry, factory) {\n if (geometry instanceof LinearRing) \n return factory.createLinearRing(this.edit(geometry.getCoordinateSequence(), geometry))\n \n if (geometry instanceof LineString) \n return factory.createLineString(this.edit(geometry.getCoordinateSequence(), geometry))\n \n if (geometry instanceof Point) \n return factory.createPoint(this.edit(geometry.getCoordinateSequence(), geometry))\n \n return geometry\n }\n get interfaces_() {\n return [GeometryEditorOperation]\n }\n}\nGeometryEditor.NoOpGeometryOperation = NoOpGeometryOperation\nGeometryEditor.CoordinateOperation = CoordinateOperation\nGeometryEditor.CoordinateSequenceOperation = CoordinateSequenceOperation\n","import Geometry from '../Geometry'\nimport GeometryCollection from '../GeometryCollection'\nimport ArrayList from '../../../../../java/util/ArrayList'\nimport GeometryFilter from '../GeometryFilter'\nexport default class GeometryExtracter {\n constructor() {\n GeometryExtracter.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._geometryType = null\n this._comps = null\n const geometryType = arguments[0], comps = arguments[1]\n this._geometryType = geometryType\n this._comps = comps\n }\n static isOfType(geom, geometryType) {\n if (geom.getGeometryType() === geometryType) return true\n if (geometryType === Geometry.TYPENAME_LINESTRING && geom.getGeometryType() === Geometry.TYPENAME_LINEARRING) return true\n return false\n }\n static extract() {\n if (arguments.length === 2) {\n const geom = arguments[0], geometryType = arguments[1]\n return GeometryExtracter.extract(geom, geometryType, new ArrayList())\n } else if (arguments.length === 3) {\n const geom = arguments[0], geometryType = arguments[1], list = arguments[2]\n if (geom.getGeometryType() === geometryType) \n list.add(geom)\n else if (geom instanceof GeometryCollection) \n geom.apply(new GeometryExtracter(geometryType, list))\n \n return list\n }\n }\n filter(geom) {\n if (this._geometryType === null || GeometryExtracter.isOfType(geom, this._geometryType)) this._comps.add(geom)\n }\n get interfaces_() {\n return [GeometryFilter]\n }\n}\n","import Geometry from '../Geometry'\nimport hasInterface from '../../../../../hasInterface'\nimport Collection from '../../../../../java/util/Collection'\nimport ArrayList from '../../../../../java/util/ArrayList'\nexport default class GeometryMapper {\n static map() {\n if (arguments[0] instanceof Geometry && hasInterface(arguments[1], MapOp)) {\n const geom = arguments[0], op = arguments[1]\n const mapped = new ArrayList()\n for (let i = 0; i < geom.getNumGeometries(); i++) {\n const g = op.map(geom.getGeometryN(i))\n if (g !== null) mapped.add(g)\n }\n return geom.getFactory().buildGeometry(mapped)\n } else if (hasInterface(arguments[0], Collection) && hasInterface(arguments[1], MapOp)) {\n const geoms = arguments[0], op = arguments[1]\n const mapped = new ArrayList()\n for (let i = geoms.iterator(); i.hasNext(); ) {\n const g = i.next()\n const gr = op.map(g)\n if (gr !== null) mapped.add(gr)\n }\n return mapped\n }\n }\n}\nfunction MapOp() {}\nGeometryMapper.MapOp = MapOp\n","import LineString from '../LineString'\nimport GeometryFactory from '../GeometryFactory'\nimport IllegalArgumentException from '../../../../../java/lang/IllegalArgumentException'\nimport Point from '../Point'\nimport Polygon from '../Polygon'\nimport MultiPoint from '../MultiPoint'\nimport LinearRing from '../LinearRing'\nimport MultiPolygon from '../MultiPolygon'\nimport GeometryCollection from '../GeometryCollection'\nimport ArrayList from '../../../../../java/util/ArrayList'\nimport MultiLineString from '../MultiLineString'\nexport default class GeometryTransformer {\n constructor() {\n GeometryTransformer.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._inputGeom = null\n this._factory = null\n this._pruneEmptyGeometry = true\n this._preserveGeometryCollectionType = true\n this._preserveCollections = false\n this._preserveType = false\n }\n transformPoint(geom, parent) {\n return this._factory.createPoint(this.transformCoordinates(geom.getCoordinateSequence(), geom))\n }\n transformPolygon(geom, parent) {\n let isAllValidLinearRings = true\n const shell = this.transformLinearRing(geom.getExteriorRing(), geom)\n if (shell === null || !(shell instanceof LinearRing) || shell.isEmpty()) isAllValidLinearRings = false\n const holes = new ArrayList()\n for (let i = 0; i < geom.getNumInteriorRing(); i++) {\n const hole = this.transformLinearRing(geom.getInteriorRingN(i), geom)\n if (hole === null || hole.isEmpty()) \n continue\n \n if (!(hole instanceof LinearRing)) isAllValidLinearRings = false\n holes.add(hole)\n }\n if (isAllValidLinearRings) {\n return this._factory.createPolygon(shell, holes.toArray([]))\n } else {\n const components = new ArrayList()\n if (shell !== null) components.add(shell)\n components.addAll(holes)\n return this._factory.buildGeometry(components)\n }\n }\n createCoordinateSequence(coords) {\n return this._factory.getCoordinateSequenceFactory().create(coords)\n }\n getInputGeometry() {\n return this._inputGeom\n }\n transformMultiLineString(geom, parent) {\n const transGeomList = new ArrayList()\n for (let i = 0; i < geom.getNumGeometries(); i++) {\n const transformGeom = this.transformLineString(geom.getGeometryN(i), geom)\n if (transformGeom === null) continue\n if (transformGeom.isEmpty()) continue\n transGeomList.add(transformGeom)\n }\n return this._factory.buildGeometry(transGeomList)\n }\n transformCoordinates(coords, parent) {\n return this.copy(coords)\n }\n transformLineString(geom, parent) {\n return this._factory.createLineString(this.transformCoordinates(geom.getCoordinateSequence(), geom))\n }\n transformMultiPoint(geom, parent) {\n const transGeomList = new ArrayList()\n for (let i = 0; i < geom.getNumGeometries(); i++) {\n const transformGeom = this.transformPoint(geom.getGeometryN(i), geom)\n if (transformGeom === null) continue\n if (transformGeom.isEmpty()) continue\n transGeomList.add(transformGeom)\n }\n return this._factory.buildGeometry(transGeomList)\n }\n transformMultiPolygon(geom, parent) {\n const transGeomList = new ArrayList()\n for (let i = 0; i < geom.getNumGeometries(); i++) {\n const transformGeom = this.transformPolygon(geom.getGeometryN(i), geom)\n if (transformGeom === null) continue\n if (transformGeom.isEmpty()) continue\n transGeomList.add(transformGeom)\n }\n return this._factory.buildGeometry(transGeomList)\n }\n copy(seq) {\n return seq.copy()\n }\n transformGeometryCollection(geom, parent) {\n const transGeomList = new ArrayList()\n for (let i = 0; i < geom.getNumGeometries(); i++) {\n const transformGeom = this.transform(geom.getGeometryN(i))\n if (transformGeom === null) continue\n if (this._pruneEmptyGeometry && transformGeom.isEmpty()) continue\n transGeomList.add(transformGeom)\n }\n if (this._preserveGeometryCollectionType) return this._factory.createGeometryCollection(GeometryFactory.toGeometryArray(transGeomList))\n return this._factory.buildGeometry(transGeomList)\n }\n transform(inputGeom) {\n this._inputGeom = inputGeom\n this._factory = inputGeom.getFactory()\n if (inputGeom instanceof Point) return this.transformPoint(inputGeom, null)\n if (inputGeom instanceof MultiPoint) return this.transformMultiPoint(inputGeom, null)\n if (inputGeom instanceof LinearRing) return this.transformLinearRing(inputGeom, null)\n if (inputGeom instanceof LineString) return this.transformLineString(inputGeom, null)\n if (inputGeom instanceof MultiLineString) return this.transformMultiLineString(inputGeom, null)\n if (inputGeom instanceof Polygon) return this.transformPolygon(inputGeom, null)\n if (inputGeom instanceof MultiPolygon) return this.transformMultiPolygon(inputGeom, null)\n if (inputGeom instanceof GeometryCollection) return this.transformGeometryCollection(inputGeom, null)\n throw new IllegalArgumentException('Unknown Geometry subtype: ' + inputGeom.getGeometryType())\n }\n transformLinearRing(geom, parent) {\n const seq = this.transformCoordinates(geom.getCoordinateSequence(), geom)\n if (seq === null) return this._factory.createLinearRing(null)\n const seqSize = seq.size()\n if (seqSize > 0 && seqSize < 4 && !this._preserveType) return this._factory.createLineString(seq)\n return this._factory.createLinearRing(seq)\n }\n}\n","import LineString from '../LineString'\nimport GeometryCollection from '../GeometryCollection'\nimport ArrayList from '../../../../../java/util/ArrayList'\nimport GeometryFilter from '../GeometryFilter'\nexport default class LineStringExtracter {\n constructor() {\n LineStringExtracter.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._comps = null\n const comps = arguments[0]\n this._comps = comps\n }\n static getGeometry(geom) {\n return geom.getFactory().buildGeometry(LineStringExtracter.getLines(geom))\n }\n static getLines() {\n if (arguments.length === 1) {\n const geom = arguments[0]\n return LineStringExtracter.getLines(geom, new ArrayList())\n } else if (arguments.length === 2) {\n const geom = arguments[0], lines = arguments[1]\n if (geom instanceof LineString) \n lines.add(geom)\n else if (geom instanceof GeometryCollection) \n geom.apply(new LineStringExtracter(lines))\n \n return lines\n }\n }\n filter(geom) {\n if (geom instanceof LineString) this._comps.add(geom)\n }\n get interfaces_() {\n return [GeometryFilter]\n }\n}\n","import LineString from '../LineString'\nimport Geometry from '../Geometry'\nimport hasInterface from '../../../../../hasInterface'\nimport Collection from '../../../../../java/util/Collection'\nimport LinearRing from '../LinearRing'\nimport GeometryComponentFilter from '../GeometryComponentFilter'\nimport ArrayList from '../../../../../java/util/ArrayList'\nexport default class LinearComponentExtracter {\n constructor() {\n LinearComponentExtracter.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._lines = null\n this._isForcedToLineString = false\n if (arguments.length === 1) {\n const lines = arguments[0]\n this._lines = lines\n } else if (arguments.length === 2) {\n const lines = arguments[0], isForcedToLineString = arguments[1]\n this._lines = lines\n this._isForcedToLineString = isForcedToLineString\n }\n }\n static getGeometry() {\n if (arguments.length === 1) {\n const geom = arguments[0]\n return geom.getFactory().buildGeometry(LinearComponentExtracter.getLines(geom))\n } else if (arguments.length === 2) {\n const geom = arguments[0], forceToLineString = arguments[1]\n return geom.getFactory().buildGeometry(LinearComponentExtracter.getLines(geom, forceToLineString))\n }\n }\n static getLines() {\n if (arguments.length === 1) {\n const geom = arguments[0]\n return LinearComponentExtracter.getLines(geom, false)\n } else if (arguments.length === 2) {\n if (hasInterface(arguments[0], Collection) && hasInterface(arguments[1], Collection)) {\n const geoms = arguments[0], lines = arguments[1]\n for (let i = geoms.iterator(); i.hasNext(); ) {\n const g = i.next()\n LinearComponentExtracter.getLines(g, lines)\n }\n return lines\n } else if (arguments[0] instanceof Geometry && typeof arguments[1] === 'boolean') {\n const geom = arguments[0], forceToLineString = arguments[1]\n const lines = new ArrayList()\n geom.apply(new LinearComponentExtracter(lines, forceToLineString))\n return lines\n } else if (arguments[0] instanceof Geometry && hasInterface(arguments[1], Collection)) {\n const geom = arguments[0], lines = arguments[1]\n if (geom instanceof LineString) \n lines.add(geom)\n else \n geom.apply(new LinearComponentExtracter(lines))\n \n return lines\n }\n } else if (arguments.length === 3) {\n if (typeof arguments[2] === 'boolean' && (hasInterface(arguments[0], Collection) && hasInterface(arguments[1], Collection))) {\n const geoms = arguments[0], lines = arguments[1], forceToLineString = arguments[2]\n for (let i = geoms.iterator(); i.hasNext(); ) {\n const g = i.next()\n LinearComponentExtracter.getLines(g, lines, forceToLineString)\n }\n return lines\n } else if (typeof arguments[2] === 'boolean' && (arguments[0] instanceof Geometry && hasInterface(arguments[1], Collection))) {\n const geom = arguments[0], lines = arguments[1], forceToLineString = arguments[2]\n geom.apply(new LinearComponentExtracter(lines, forceToLineString))\n return lines\n }\n }\n }\n filter(geom) {\n if (this._isForcedToLineString && geom instanceof LinearRing) {\n const line = geom.getFactory().createLineString(geom.getCoordinateSequence())\n this._lines.add(line)\n return null\n }\n if (geom instanceof LineString) this._lines.add(geom)\n }\n setForceToLineString(isForcedToLineString) {\n this._isForcedToLineString = isForcedToLineString\n }\n get interfaces_() {\n return [GeometryComponentFilter]\n }\n}\n","import Arrays from './Arrays'\nimport ArrayList from './ArrayList'\n\nconst Collections = {\n reverseOrder: function() {\n return {\n compare(a, b) {\n return b.compareTo(a)\n }\n }\n },\n min: function(l) {\n Collections.sort(l)\n return l.get(0)\n },\n sort: function(l, c) {\n const a = l.toArray()\n if (c)\n Arrays.sort(a, c)\n else\n Arrays.sort(a)\n const i = l.iterator()\n for (let pos = 0, alen = a.length; pos < alen; pos++) {\n i.next()\n i.set(a[pos])\n }\n },\n singletonList: function(o) {\n const arrayList = new ArrayList()\n arrayList.add(o)\n return arrayList\n }\n}\n\nexport default Collections\n","import Point from '../Point'\nimport Collections from '../../../../../java/util/Collections'\nimport GeometryCollection from '../GeometryCollection'\nimport ArrayList from '../../../../../java/util/ArrayList'\nimport GeometryFilter from '../GeometryFilter'\nexport default class PointExtracter {\n constructor() {\n PointExtracter.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._pts = null\n const pts = arguments[0]\n this._pts = pts\n }\n static getPoints() {\n if (arguments.length === 1) {\n const geom = arguments[0]\n if (geom instanceof Point) \n return Collections.singletonList(geom)\n \n return PointExtracter.getPoints(geom, new ArrayList())\n } else if (arguments.length === 2) {\n const geom = arguments[0], list = arguments[1]\n if (geom instanceof Point) \n list.add(geom)\n else if (geom instanceof GeometryCollection) \n geom.apply(new PointExtracter(list))\n \n return list\n }\n }\n filter(geom) {\n if (geom instanceof Point) this._pts.add(geom)\n }\n get interfaces_() {\n return [GeometryFilter]\n }\n}\n","import Polygon from '../Polygon'\nimport GeometryCollection from '../GeometryCollection'\nimport ArrayList from '../../../../../java/util/ArrayList'\nimport GeometryFilter from '../GeometryFilter'\nexport default class PolygonExtracter {\n constructor() {\n PolygonExtracter.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._comps = null\n const comps = arguments[0]\n this._comps = comps\n }\n static getPolygons() {\n if (arguments.length === 1) {\n const geom = arguments[0]\n return PolygonExtracter.getPolygons(geom, new ArrayList())\n } else if (arguments.length === 2) {\n const geom = arguments[0], list = arguments[1]\n if (geom instanceof Polygon) \n list.add(geom)\n else if (geom instanceof GeometryCollection) \n geom.apply(new PolygonExtracter(list))\n \n return list\n }\n }\n filter(geom) {\n if (geom instanceof Polygon) this._comps.add(geom)\n }\n get interfaces_() {\n return [GeometryFilter]\n }\n}\n","import GeometryCollection from '../GeometryCollection'\nexport default class ShortCircuitedGeometryVisitor {\n constructor() {\n ShortCircuitedGeometryVisitor.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._isDone = false\n }\n applyTo(geom) {\n for (let i = 0; i < geom.getNumGeometries() && !this._isDone; i++) {\n const element = geom.getGeometryN(i)\n if (!(element instanceof GeometryCollection)) {\n this.visit(element)\n if (this.isDone()) {\n this._isDone = true\n return null\n }\n } else {\n this.applyTo(element)\n }\n }\n }\n}\n","import GeometryFactory from '../geom/GeometryFactory'\nimport Coordinate from '../geom/Coordinate'\nimport AffineTransformation from '../geom/util/AffineTransformation'\nimport Envelope from '../geom/Envelope'\nexport default class GeometricShapeFactory {\n constructor() {\n GeometricShapeFactory.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._geomFact = null\n this._precModel = null\n this._dim = new Dimensions()\n this._nPts = 100\n this._rotationAngle = 0.0\n if (arguments.length === 0) {\n GeometricShapeFactory.constructor_.call(this, new GeometryFactory())\n } else if (arguments.length === 1) {\n const geomFact = arguments[0]\n this._geomFact = geomFact\n this._precModel = geomFact.getPrecisionModel()\n }\n }\n createSupercircle(power) {\n const recipPow = 1.0 / power\n const radius = this._dim.getMinSize() / 2\n const centre = this._dim.getCentre()\n const r4 = Math.pow(radius, power)\n const y0 = radius\n const xyInt = Math.pow(r4 / 2, recipPow)\n const nSegsInOct = Math.trunc(this._nPts / 8)\n const totPts = nSegsInOct * 8 + 1\n const pts = new Array(totPts).fill(null)\n const xInc = xyInt / nSegsInOct\n for (let i = 0; i <= nSegsInOct; i++) {\n let x = 0.0\n let y = y0\n if (i !== 0) {\n x = xInc * i\n const x4 = Math.pow(x, power)\n y = Math.pow(r4 - x4, recipPow)\n }\n pts[i] = this.coordTrans(x, y, centre)\n pts[2 * nSegsInOct - i] = this.coordTrans(y, x, centre)\n pts[2 * nSegsInOct + i] = this.coordTrans(y, -x, centre)\n pts[4 * nSegsInOct - i] = this.coordTrans(x, -y, centre)\n pts[4 * nSegsInOct + i] = this.coordTrans(-x, -y, centre)\n pts[6 * nSegsInOct - i] = this.coordTrans(-y, -x, centre)\n pts[6 * nSegsInOct + i] = this.coordTrans(-y, x, centre)\n pts[8 * nSegsInOct - i] = this.coordTrans(-x, y, centre)\n }\n pts[pts.length - 1] = new Coordinate(pts[0])\n const ring = this._geomFact.createLinearRing(pts)\n const poly = this._geomFact.createPolygon(ring)\n return this.rotate(poly)\n }\n setNumPoints(nPts) {\n this._nPts = nPts\n }\n setBase(base) {\n this._dim.setBase(base)\n }\n setRotation(radians) {\n this._rotationAngle = radians\n }\n setWidth(width) {\n this._dim.setWidth(width)\n }\n createEllipse() {\n const env = this._dim.getEnvelope()\n const xRadius = env.getWidth() / 2.0\n const yRadius = env.getHeight() / 2.0\n const centreX = env.getMinX() + xRadius\n const centreY = env.getMinY() + yRadius\n const pts = new Array(this._nPts + 1).fill(null)\n let iPt = 0\n for (let i = 0; i < this._nPts; i++) {\n const ang = i * (2 * Math.PI / this._nPts)\n const x = xRadius * Math.cos(ang) + centreX\n const y = yRadius * Math.sin(ang) + centreY\n pts[iPt++] = this.coord(x, y)\n }\n pts[iPt] = new Coordinate(pts[0])\n const ring = this._geomFact.createLinearRing(pts)\n const poly = this._geomFact.createPolygon(ring)\n return this.rotate(poly)\n }\n coordTrans(x, y, trans) {\n return this.coord(x + trans.x, y + trans.y)\n }\n createSquircle() {\n return this.createSupercircle(4)\n }\n setEnvelope(env) {\n this._dim.setEnvelope(env)\n }\n setCentre(centre) {\n this._dim.setCentre(centre)\n }\n createArc(startAng, angExtent) {\n const env = this._dim.getEnvelope()\n const xRadius = env.getWidth() / 2.0\n const yRadius = env.getHeight() / 2.0\n const centreX = env.getMinX() + xRadius\n const centreY = env.getMinY() + yRadius\n let angSize = angExtent\n if (angSize <= 0.0 || angSize > 2 * Math.PI) angSize = 2 * Math.PI\n const angInc = angSize / (this._nPts - 1)\n const pts = new Array(this._nPts).fill(null)\n let iPt = 0\n for (let i = 0; i < this._nPts; i++) {\n const ang = startAng + i * angInc\n const x = xRadius * Math.cos(ang) + centreX\n const y = yRadius * Math.sin(ang) + centreY\n pts[iPt++] = this.coord(x, y)\n }\n const line = this._geomFact.createLineString(pts)\n return this.rotate(line)\n }\n rotate(geom) {\n if (this._rotationAngle !== 0.0) {\n const trans = AffineTransformation.rotationInstance(this._rotationAngle, this._dim.getCentre().x, this._dim.getCentre().y)\n geom.apply(trans)\n }\n return geom\n }\n coord(x, y) {\n const pt = new Coordinate(x, y)\n this._precModel.makePrecise(pt)\n return pt\n }\n createArcPolygon(startAng, angExtent) {\n const env = this._dim.getEnvelope()\n const xRadius = env.getWidth() / 2.0\n const yRadius = env.getHeight() / 2.0\n const centreX = env.getMinX() + xRadius\n const centreY = env.getMinY() + yRadius\n let angSize = angExtent\n if (angSize <= 0.0 || angSize > 2 * Math.PI) angSize = 2 * Math.PI\n const angInc = angSize / (this._nPts - 1)\n const pts = new Array(this._nPts + 2).fill(null)\n let iPt = 0\n pts[iPt++] = this.coord(centreX, centreY)\n for (let i = 0; i < this._nPts; i++) {\n const ang = startAng + angInc * i\n const x = xRadius * Math.cos(ang) + centreX\n const y = yRadius * Math.sin(ang) + centreY\n pts[iPt++] = this.coord(x, y)\n }\n pts[iPt++] = this.coord(centreX, centreY)\n const ring = this._geomFact.createLinearRing(pts)\n const poly = this._geomFact.createPolygon(ring)\n return this.rotate(poly)\n }\n createRectangle() {\n let i = null\n let ipt = 0\n let nSide = Math.trunc(this._nPts / 4)\n if (nSide < 1) nSide = 1\n const XsegLen = this._dim.getEnvelope().getWidth() / nSide\n const YsegLen = this._dim.getEnvelope().getHeight() / nSide\n const pts = new Array(4 * nSide + 1).fill(null)\n const env = this._dim.getEnvelope()\n for ((i = 0); i < nSide; i++) {\n const x = env.getMinX() + i * XsegLen\n const y = env.getMinY()\n pts[ipt++] = this.coord(x, y)\n }\n for ((i = 0); i < nSide; i++) {\n const x = env.getMaxX()\n const y = env.getMinY() + i * YsegLen\n pts[ipt++] = this.coord(x, y)\n }\n for ((i = 0); i < nSide; i++) {\n const x = env.getMaxX() - i * XsegLen\n const y = env.getMaxY()\n pts[ipt++] = this.coord(x, y)\n }\n for ((i = 0); i < nSide; i++) {\n const x = env.getMinX()\n const y = env.getMaxY() - i * YsegLen\n pts[ipt++] = this.coord(x, y)\n }\n pts[ipt++] = new Coordinate(pts[0])\n const ring = this._geomFact.createLinearRing(pts)\n const poly = this._geomFact.createPolygon(ring)\n return this.rotate(poly)\n }\n createCircle() {\n return this.createEllipse()\n }\n setHeight(height) {\n this._dim.setHeight(height)\n }\n setSize(size) {\n this._dim.setSize(size)\n }\n}\nclass Dimensions {\n constructor() {\n Dimensions.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this.base = null\n this.centre = null\n this.width = null\n this.height = null\n }\n setBase(base) {\n this.base = base\n }\n setWidth(width) {\n this.width = width\n }\n getBase() {\n return this.base\n }\n getWidth() {\n return this.width\n }\n setEnvelope(env) {\n this.width = env.getWidth()\n this.height = env.getHeight()\n this.base = new Coordinate(env.getMinX(), env.getMinY())\n this.centre = new Coordinate(env.centre())\n }\n setCentre(centre) {\n this.centre = centre\n }\n getMinSize() {\n return Math.min(this.width, this.height)\n }\n getEnvelope() {\n if (this.base !== null) \n return new Envelope(this.base.x, this.base.x + this.width, this.base.y, this.base.y + this.height)\n \n if (this.centre !== null) \n return new Envelope(this.centre.x - this.width / 2, this.centre.x + this.width / 2, this.centre.y - this.height / 2, this.centre.y + this.height / 2)\n \n return new Envelope(0, this.width, 0, this.height)\n }\n getCentre() {\n if (this.centre === null) \n this.centre = new Coordinate(this.base.x + this.width / 2, this.base.y + this.height / 2)\n \n return this.centre\n }\n getHeight() {\n return this.height\n }\n setHeight(height) {\n this.height = height\n }\n setSize(size) {\n this.height = size\n this.width = size\n }\n}\nGeometricShapeFactory.Dimensions = Dimensions\n","import Coordinate from '../Coordinate'\nimport GeometricShapeFactory from '../../util/GeometricShapeFactory'\nexport default class SineStarFactory extends GeometricShapeFactory {\n constructor() {\n super()\n SineStarFactory.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._numArms = 8\n this._armLengthRatio = 0.5\n if (arguments.length === 0) {\n GeometricShapeFactory.constructor_.call(this)\n } else if (arguments.length === 1) {\n const geomFact = arguments[0]\n GeometricShapeFactory.constructor_.call(this, geomFact)\n }\n }\n static create(origin, size, nPts, nArms, armLengthRatio) {\n const gsf = new SineStarFactory()\n gsf.setCentre(origin)\n gsf.setSize(size)\n gsf.setNumPoints(nPts)\n gsf.setArmLengthRatio(armLengthRatio)\n gsf.setNumArms(nArms)\n const poly = gsf.createSineStar()\n return poly\n }\n setNumArms(numArms) {\n this._numArms = numArms\n }\n setArmLengthRatio(armLengthRatio) {\n this._armLengthRatio = armLengthRatio\n }\n createSineStar() {\n const env = this._dim.getEnvelope()\n const radius = env.getWidth() / 2.0\n let armRatio = this._armLengthRatio\n if (armRatio < 0.0) armRatio = 0.0\n if (armRatio > 1.0) armRatio = 1.0\n const armMaxLen = armRatio * radius\n const insideRadius = (1 - armRatio) * radius\n const centreX = env.getMinX() + radius\n const centreY = env.getMinY() + radius\n const pts = new Array(this._nPts + 1).fill(null)\n let iPt = 0\n for (let i = 0; i < this._nPts; i++) {\n const ptArcFrac = i / this._nPts * this._numArms\n const armAngFrac = ptArcFrac - Math.floor(ptArcFrac)\n const armAng = 2 * Math.PI * armAngFrac\n const armLenFrac = (Math.cos(armAng) + 1.0) / 2.0\n const curveRadius = insideRadius + armMaxLen * armLenFrac\n const ang = i * (2 * Math.PI / this._nPts)\n const x = curveRadius * Math.cos(ang) + centreX\n const y = curveRadius * Math.sin(ang) + centreY\n pts[iPt++] = this.coord(x, y)\n }\n pts[iPt] = new Coordinate(pts[0])\n const ring = this._geomFact.createLinearRing(pts)\n const poly = this._geomFact.createPolygon(ring)\n return poly\n }\n}\n","import WKTWriter from '../../io/WKTWriter'\nimport Coordinate from '../../geom/Coordinate'\nimport Double from '../../../../../java/lang/Double'\nexport default class PointPairDistance {\n constructor() {\n PointPairDistance.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._pt = [new Coordinate(), new Coordinate()]\n this._distance = Double.NaN\n this._isNull = true\n }\n getCoordinates() {\n return this._pt\n }\n getCoordinate(i) {\n return this._pt[i]\n }\n setMinimum() {\n if (arguments.length === 1) {\n const ptDist = arguments[0]\n this.setMinimum(ptDist._pt[0], ptDist._pt[1])\n } else if (arguments.length === 2) {\n const p0 = arguments[0], p1 = arguments[1]\n if (this._isNull) {\n this.initialize(p0, p1)\n return null\n }\n const dist = p0.distance(p1)\n if (dist < this._distance) this.initialize(p0, p1, dist)\n }\n }\n initialize() {\n if (arguments.length === 0) {\n this._isNull = true\n } else if (arguments.length === 2) {\n const p0 = arguments[0], p1 = arguments[1]\n this._pt[0].setCoordinate(p0)\n this._pt[1].setCoordinate(p1)\n this._distance = p0.distance(p1)\n this._isNull = false\n } else if (arguments.length === 3) {\n const p0 = arguments[0], p1 = arguments[1], distance = arguments[2]\n this._pt[0].setCoordinate(p0)\n this._pt[1].setCoordinate(p1)\n this._distance = distance\n this._isNull = false\n }\n }\n toString() {\n return WKTWriter.toLineString(this._pt[0], this._pt[1])\n }\n getDistance() {\n return this._distance\n }\n setMaximum() {\n if (arguments.length === 1) {\n const ptDist = arguments[0]\n this.setMaximum(ptDist._pt[0], ptDist._pt[1])\n } else if (arguments.length === 2) {\n const p0 = arguments[0], p1 = arguments[1]\n if (this._isNull) {\n this.initialize(p0, p1)\n return null\n }\n const dist = p0.distance(p1)\n if (dist > this._distance) this.initialize(p0, p1, dist)\n }\n }\n}\n","import LineString from '../../geom/LineString'\nimport Geometry from '../../geom/Geometry'\nimport Coordinate from '../../geom/Coordinate'\nimport Polygon from '../../geom/Polygon'\nimport LineSegment from '../../geom/LineSegment'\nimport PointPairDistance from './PointPairDistance'\nimport GeometryCollection from '../../geom/GeometryCollection'\nexport default class DistanceToPoint {\n static computeDistance() {\n if (arguments[2] instanceof PointPairDistance && (arguments[0] instanceof LineString && arguments[1] instanceof Coordinate)) {\n const line = arguments[0], pt = arguments[1], ptDist = arguments[2]\n const tempSegment = new LineSegment()\n const coords = line.getCoordinates()\n for (let i = 0; i < coords.length - 1; i++) {\n tempSegment.setCoordinates(coords[i], coords[i + 1])\n const closestPt = tempSegment.closestPoint(pt)\n ptDist.setMinimum(closestPt, pt)\n }\n } else if (arguments[2] instanceof PointPairDistance && (arguments[0] instanceof Polygon && arguments[1] instanceof Coordinate)) {\n const poly = arguments[0], pt = arguments[1], ptDist = arguments[2]\n DistanceToPoint.computeDistance(poly.getExteriorRing(), pt, ptDist)\n for (let i = 0; i < poly.getNumInteriorRing(); i++) \n DistanceToPoint.computeDistance(poly.getInteriorRingN(i), pt, ptDist)\n \n } else if (arguments[2] instanceof PointPairDistance && (arguments[0] instanceof Geometry && arguments[1] instanceof Coordinate)) {\n const geom = arguments[0], pt = arguments[1], ptDist = arguments[2]\n if (geom instanceof LineString) {\n DistanceToPoint.computeDistance(geom, pt, ptDist)\n } else if (geom instanceof Polygon) {\n DistanceToPoint.computeDistance(geom, pt, ptDist)\n } else if (geom instanceof GeometryCollection) {\n const gc = geom\n for (let i = 0; i < gc.getNumGeometries(); i++) {\n const g = gc.getGeometryN(i)\n DistanceToPoint.computeDistance(g, pt, ptDist)\n }\n } else {\n ptDist.setMinimum(geom.getCoordinate(), pt)\n }\n } else if (arguments[2] instanceof PointPairDistance && (arguments[0] instanceof LineSegment && arguments[1] instanceof Coordinate)) {\n const segment = arguments[0], pt = arguments[1], ptDist = arguments[2]\n const closestPt = segment.closestPoint(pt)\n ptDist.setMinimum(closestPt, pt)\n }\n }\n}\n","import DistanceToPoint from './DistanceToPoint'\nimport CoordinateFilter from '../../geom/CoordinateFilter'\nimport Coordinate from '../../geom/Coordinate'\nimport IllegalArgumentException from '../../../../../java/lang/IllegalArgumentException'\nimport PointPairDistance from './PointPairDistance'\nimport CoordinateSequenceFilter from '../../geom/CoordinateSequenceFilter'\nexport default class DiscreteHausdorffDistance {\n constructor() {\n DiscreteHausdorffDistance.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._g0 = null\n this._g1 = null\n this._ptDist = new PointPairDistance()\n this._densifyFrac = 0.0\n const g0 = arguments[0], g1 = arguments[1]\n this._g0 = g0\n this._g1 = g1\n }\n static distance() {\n if (arguments.length === 2) {\n const g0 = arguments[0], g1 = arguments[1]\n const dist = new DiscreteHausdorffDistance(g0, g1)\n return dist.distance()\n } else if (arguments.length === 3) {\n const g0 = arguments[0], g1 = arguments[1], densifyFrac = arguments[2]\n const dist = new DiscreteHausdorffDistance(g0, g1)\n dist.setDensifyFraction(densifyFrac)\n return dist.distance()\n }\n }\n getCoordinates() {\n return this._ptDist.getCoordinates()\n }\n setDensifyFraction(densifyFrac) {\n if (densifyFrac > 1.0 || densifyFrac <= 0.0) throw new IllegalArgumentException('Fraction is not in range (0.0 - 1.0]')\n this._densifyFrac = densifyFrac\n }\n compute(g0, g1) {\n this.computeOrientedDistance(g0, g1, this._ptDist)\n this.computeOrientedDistance(g1, g0, this._ptDist)\n }\n distance() {\n this.compute(this._g0, this._g1)\n return this._ptDist.getDistance()\n }\n computeOrientedDistance(discreteGeom, geom, ptDist) {\n const distFilter = new MaxPointDistanceFilter(geom)\n discreteGeom.apply(distFilter)\n ptDist.setMaximum(distFilter.getMaxPointDistance())\n if (this._densifyFrac > 0) {\n const fracFilter = new MaxDensifiedByFractionDistanceFilter(geom, this._densifyFrac)\n discreteGeom.apply(fracFilter)\n ptDist.setMaximum(fracFilter.getMaxPointDistance())\n }\n }\n orientedDistance() {\n this.computeOrientedDistance(this._g0, this._g1, this._ptDist)\n return this._ptDist.getDistance()\n }\n}\nclass MaxPointDistanceFilter {\n constructor() {\n MaxPointDistanceFilter.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._maxPtDist = new PointPairDistance()\n this._minPtDist = new PointPairDistance()\n this._euclideanDist = new DistanceToPoint()\n this._geom = null\n const geom = arguments[0]\n this._geom = geom\n }\n filter(pt) {\n this._minPtDist.initialize()\n DistanceToPoint.computeDistance(this._geom, pt, this._minPtDist)\n this._maxPtDist.setMaximum(this._minPtDist)\n }\n getMaxPointDistance() {\n return this._maxPtDist\n }\n get interfaces_() {\n return [CoordinateFilter]\n }\n}\nclass MaxDensifiedByFractionDistanceFilter {\n constructor() {\n MaxDensifiedByFractionDistanceFilter.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._maxPtDist = new PointPairDistance()\n this._minPtDist = new PointPairDistance()\n this._geom = null\n this._numSubSegs = 0\n const geom = arguments[0], fraction = arguments[1]\n this._geom = geom\n this._numSubSegs = Math.trunc(Math.round(1.0 / fraction))\n }\n filter(seq, index) {\n if (index === 0) return null\n const p0 = seq.getCoordinate(index - 1)\n const p1 = seq.getCoordinate(index)\n const delx = (p1.x - p0.x) / this._numSubSegs\n const dely = (p1.y - p0.y) / this._numSubSegs\n for (let i = 0; i < this._numSubSegs; i++) {\n const x = p0.x + i * delx\n const y = p0.y + i * dely\n const pt = new Coordinate(x, y)\n this._minPtDist.initialize()\n DistanceToPoint.computeDistance(this._geom, pt, this._minPtDist)\n this._maxPtDist.setMaximum(this._minPtDist)\n }\n }\n isDone() {\n return false\n }\n isGeometryChanged() {\n return false\n }\n getMaxPointDistance() {\n return this._maxPtDist\n }\n get interfaces_() {\n return [CoordinateSequenceFilter]\n }\n}\nDiscreteHausdorffDistance.MaxPointDistanceFilter = MaxPointDistanceFilter\nDiscreteHausdorffDistance.MaxDensifiedByFractionDistanceFilter = MaxDensifiedByFractionDistanceFilter\n","export default class ItemVisitor {\n visitItem(item) {}\n}\n","export default class PointOnGeometryLocator {\n locate(p) {}\n}\n","import WKTWriter from '../../io/WKTWriter'\nimport Coordinate from '../../geom/Coordinate'\nimport Double from '../../../../../java/lang/Double'\nimport Comparator from '../../../../../java/util/Comparator'\nexport default class IntervalRTreeNode {\n constructor() {\n IntervalRTreeNode.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._min = Double.POSITIVE_INFINITY\n this._max = Double.NEGATIVE_INFINITY\n }\n getMin() {\n return this._min\n }\n intersects(queryMin, queryMax) {\n if (this._min > queryMax || this._max < queryMin) return false\n return true\n }\n getMax() {\n return this._max\n }\n toString() {\n return WKTWriter.toLineString(new Coordinate(this._min, 0), new Coordinate(this._max, 0))\n }\n}\nclass NodeComparator {\n compare(o1, o2) {\n const n1 = o1\n const n2 = o2\n const mid1 = (n1._min + n1._max) / 2\n const mid2 = (n2._min + n2._max) / 2\n if (mid1 < mid2) return -1\n if (mid1 > mid2) return 1\n return 0\n }\n get interfaces_() {\n return [Comparator]\n }\n}\nIntervalRTreeNode.NodeComparator = NodeComparator\n","import IntervalRTreeNode from './IntervalRTreeNode'\nexport default class IntervalRTreeLeafNode extends IntervalRTreeNode {\n constructor() {\n super()\n IntervalRTreeLeafNode.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._item = null\n const min = arguments[0], max = arguments[1], item = arguments[2]\n this._min = min\n this._max = max\n this._item = item\n }\n query(queryMin, queryMax, visitor) {\n if (!this.intersects(queryMin, queryMax)) return null\n visitor.visitItem(this._item)\n }\n}\n","import IntervalRTreeNode from './IntervalRTreeNode'\nexport default class IntervalRTreeBranchNode extends IntervalRTreeNode {\n constructor() {\n super()\n IntervalRTreeBranchNode.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._node1 = null\n this._node2 = null\n const n1 = arguments[0], n2 = arguments[1]\n this._node1 = n1\n this._node2 = n2\n this.buildExtent(this._node1, this._node2)\n }\n buildExtent(n1, n2) {\n this._min = Math.min(n1._min, n2._min)\n this._max = Math.max(n1._max, n2._max)\n }\n query(queryMin, queryMax, visitor) {\n if (!this.intersects(queryMin, queryMax)) \n return null\n \n if (this._node1 !== null) this._node1.query(queryMin, queryMax, visitor)\n if (this._node2 !== null) this._node2.query(queryMin, queryMax, visitor)\n }\n}\n","import WKTWriter from '../../io/WKTWriter'\nimport Coordinate from '../../geom/Coordinate'\nimport IntervalRTreeLeafNode from './IntervalRTreeLeafNode'\nimport IntervalRTreeNode from './IntervalRTreeNode'\nimport Collections from '../../../../../java/util/Collections'\nimport System from '../../../../../java/lang/System'\nimport ArrayList from '../../../../../java/util/ArrayList'\nimport IntervalRTreeBranchNode from './IntervalRTreeBranchNode'\nexport default class SortedPackedIntervalRTree {\n constructor() {\n SortedPackedIntervalRTree.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._leaves = new ArrayList()\n this._root = null\n this._level = 0\n }\n buildTree() {\n Collections.sort(this._leaves, new IntervalRTreeNode.NodeComparator())\n let src = this._leaves\n let temp = null\n let dest = new ArrayList()\n while (true) {\n this.buildLevel(src, dest)\n if (dest.size() === 1) return dest.get(0)\n temp = src\n src = dest\n dest = temp\n }\n }\n insert(min, max, item) {\n if (this._root !== null) throw new IllegalStateException('Index cannot be added to once it has been queried')\n this._leaves.add(new IntervalRTreeLeafNode(min, max, item))\n }\n query(min, max, visitor) {\n this.init()\n if (this._root === null) return null\n this._root.query(min, max, visitor)\n }\n buildRoot() {\n if (this._root !== null) return null\n this._root = this.buildTree()\n }\n printNode(node) {\n System.out.println(WKTWriter.toLineString(new Coordinate(node._min, this._level), new Coordinate(node._max, this._level)))\n }\n init() {\n if (this._root !== null) return null\n if (this._leaves.size() === 0) return null\n this.buildRoot()\n }\n buildLevel(src, dest) {\n this._level++\n dest.clear()\n for (let i = 0; i < src.size(); i += 2) {\n const n1 = src.get(i)\n const n2 = i + 1 < src.size() ? src.get(i) : null\n if (n2 === null) {\n dest.add(n1)\n } else {\n const node = new IntervalRTreeBranchNode(src.get(i), src.get(i + 1))\n dest.add(node)\n }\n }\n }\n}\n","import ItemVisitor from './ItemVisitor'\nimport ArrayList from '../../../../java/util/ArrayList'\nexport default class ArrayListVisitor {\n constructor() {\n ArrayListVisitor.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._items = new ArrayList()\n }\n visitItem(item) {\n this._items.add(item)\n }\n getItems() {\n return this._items\n }\n get interfaces_() {\n return [ItemVisitor]\n }\n}\n","import Location from '../geom/Location'\nimport hasInterface from '../../../../hasInterface'\nimport Coordinate from '../geom/Coordinate'\nimport Orientation from './Orientation'\nimport CoordinateSequence from '../geom/CoordinateSequence'\nexport default class RayCrossingCounter {\n constructor() {\n RayCrossingCounter.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._p = null\n this._crossingCount = 0\n this._isPointOnSegment = false\n const p = arguments[0]\n this._p = p\n }\n static locatePointInRing() {\n if (arguments[0] instanceof Coordinate && hasInterface(arguments[1], CoordinateSequence)) {\n const p = arguments[0], ring = arguments[1]\n const counter = new RayCrossingCounter(p)\n const p1 = new Coordinate()\n const p2 = new Coordinate()\n for (let i = 1; i < ring.size(); i++) {\n ring.getCoordinate(i, p1)\n ring.getCoordinate(i - 1, p2)\n counter.countSegment(p1, p2)\n if (counter.isOnSegment()) return counter.getLocation()\n }\n return counter.getLocation()\n } else if (arguments[0] instanceof Coordinate && arguments[1] instanceof Array) {\n const p = arguments[0], ring = arguments[1]\n const counter = new RayCrossingCounter(p)\n for (let i = 1; i < ring.length; i++) {\n const p1 = ring[i]\n const p2 = ring[i - 1]\n counter.countSegment(p1, p2)\n if (counter.isOnSegment()) return counter.getLocation()\n }\n return counter.getLocation()\n }\n }\n countSegment(p1, p2) {\n if (p1.x < this._p.x && p2.x < this._p.x) return null\n if (this._p.x === p2.x && this._p.y === p2.y) {\n this._isPointOnSegment = true\n return null\n }\n if (p1.y === this._p.y && p2.y === this._p.y) {\n let minx = p1.x\n let maxx = p2.x\n if (minx > maxx) {\n minx = p2.x\n maxx = p1.x\n }\n if (this._p.x >= minx && this._p.x <= maxx) \n this._isPointOnSegment = true\n \n return null\n }\n if (p1.y > this._p.y && p2.y <= this._p.y || p2.y > this._p.y && p1.y <= this._p.y) {\n let orient = Orientation.index(p1, p2, this._p)\n if (orient === Orientation.COLLINEAR) {\n this._isPointOnSegment = true\n return null\n }\n if (p2.y < p1.y) \n orient = -orient\n \n if (orient === Orientation.LEFT) \n this._crossingCount++\n \n }\n }\n isPointInPolygon() {\n return this.getLocation() !== Location.EXTERIOR\n }\n getLocation() {\n if (this._isPointOnSegment) return Location.BOUNDARY\n if (this._crossingCount % 2 === 1) \n return Location.INTERIOR\n \n return Location.EXTERIOR\n }\n isOnSegment() {\n return this._isPointOnSegment\n }\n}\n","import hasInterface from '../../../../../hasInterface'\nimport IllegalArgumentException from '../../../../../java/lang/IllegalArgumentException'\nimport ItemVisitor from '../../index/ItemVisitor'\nimport PointOnGeometryLocator from './PointOnGeometryLocator'\nimport LinearRing from '../../geom/LinearRing'\nimport SortedPackedIntervalRTree from '../../index/intervalrtree/SortedPackedIntervalRTree'\nimport LineSegment from '../../geom/LineSegment'\nimport Polygonal from '../../geom/Polygonal'\nimport ArrayList from '../../../../../java/util/ArrayList'\nimport LinearComponentExtracter from '../../geom/util/LinearComponentExtracter'\nimport ArrayListVisitor from '../../index/ArrayListVisitor'\nimport RayCrossingCounter from '../RayCrossingCounter'\nexport default class IndexedPointInAreaLocator {\n constructor() {\n IndexedPointInAreaLocator.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._geom = null\n this._index = null\n const g = arguments[0]\n if (!(hasInterface(g, Polygonal) || g instanceof LinearRing)) throw new IllegalArgumentException('Argument must be Polygonal or LinearRing')\n this._geom = g\n }\n locate(p) {\n if (this._index === null) {\n this._index = new IntervalIndexedGeometry(this._geom)\n this._geom = null\n }\n const rcc = new RayCrossingCounter(p)\n const visitor = new SegmentVisitor(rcc)\n this._index.query(p.y, p.y, visitor)\n return rcc.getLocation()\n }\n get interfaces_() {\n return [PointOnGeometryLocator]\n }\n}\nclass SegmentVisitor {\n constructor() {\n SegmentVisitor.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._counter = null\n const counter = arguments[0]\n this._counter = counter\n }\n visitItem(item) {\n const seg = item\n this._counter.countSegment(seg.getCoordinate(0), seg.getCoordinate(1))\n }\n get interfaces_() {\n return [ItemVisitor]\n }\n}\nclass IntervalIndexedGeometry {\n constructor() {\n IntervalIndexedGeometry.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._isEmpty = false\n this._index = new SortedPackedIntervalRTree()\n const geom = arguments[0]\n if (geom.isEmpty()) this._isEmpty = true; else this.init(geom)\n }\n init(geom) {\n const lines = LinearComponentExtracter.getLines(geom)\n for (let i = lines.iterator(); i.hasNext(); ) {\n const line = i.next()\n const pts = line.getCoordinates()\n this.addLine(pts)\n }\n }\n addLine(pts) {\n for (let i = 1; i < pts.length; i++) {\n const seg = new LineSegment(pts[i - 1], pts[i])\n const min = Math.min(seg.p0.y, seg.p1.y)\n const max = Math.max(seg.p0.y, seg.p1.y)\n this._index.insert(min, max, seg)\n }\n }\n query() {\n if (arguments.length === 2) {\n const min = arguments[0], max = arguments[1]\n if (this._isEmpty) return new ArrayList()\n const visitor = new ArrayListVisitor()\n this._index.query(min, max, visitor)\n return visitor.getItems()\n } else if (arguments.length === 3) {\n const min = arguments[0], max = arguments[1], visitor = arguments[2]\n if (this._isEmpty) return null\n this._index.query(min, max, visitor)\n }\n }\n}\nIndexedPointInAreaLocator.SegmentVisitor = SegmentVisitor\nIndexedPointInAreaLocator.IntervalIndexedGeometry = IntervalIndexedGeometry\n","import Location from '../geom/Location'\nimport hasInterface from '../../../../hasInterface'\nimport Coordinate from '../geom/Coordinate'\nimport CoordinateSequence from '../geom/CoordinateSequence'\nimport RobustLineIntersector from './RobustLineIntersector'\nimport RayCrossingCounter from './RayCrossingCounter'\nexport default class PointLocation {\n static isOnLine() {\n if (arguments[0] instanceof Coordinate && hasInterface(arguments[1], CoordinateSequence)) {\n const p = arguments[0], line = arguments[1]\n const lineIntersector = new RobustLineIntersector()\n const p0 = new Coordinate()\n const p1 = new Coordinate()\n const n = line.size()\n for (let i = 1; i < n; i++) {\n line.getCoordinate(i - 1, p0)\n line.getCoordinate(i, p1)\n lineIntersector.computeIntersection(p, p0, p1)\n if (lineIntersector.hasIntersection()) \n return true\n \n }\n return false\n } else if (arguments[0] instanceof Coordinate && arguments[1] instanceof Array) {\n const p = arguments[0], line = arguments[1]\n const lineIntersector = new RobustLineIntersector()\n for (let i = 1; i < line.length; i++) {\n const p0 = line[i - 1]\n const p1 = line[i]\n lineIntersector.computeIntersection(p, p0, p1)\n if (lineIntersector.hasIntersection()) \n return true\n \n }\n return false\n }\n }\n static locateInRing(p, ring) {\n return RayCrossingCounter.locatePointInRing(p, ring)\n }\n static isInRing(p, ring) {\n return PointLocation.locateInRing(p, ring) !== Location.EXTERIOR\n }\n}\n","/**\n * @see http://download.oracle.com/javase/6/docs/api/java/util/Iterator.html\n * @constructor\n * @private\n */\nexport default class Iterator {\n /**\n * Returns true if the iteration has more elements.\n * @return {boolean}\n */\n hasNext() {}\n\n /**\n * Returns the next element in the iteration.\n * @return {Object}\n */\n next() {}\n\n /**\n * Removes from the underlying collection the last element returned by the\n * iterator (optional operation).\n */\n remove() {}\n}\n","import Iterator from '../../../../java/util/Iterator'\nimport NoSuchElementException from '../../../../java/util/NoSuchElementException'\nimport GeometryCollection from './GeometryCollection'\nimport UnsupportedOperationException from '../../../../java/lang/UnsupportedOperationException'\nexport default class GeometryCollectionIterator {\n constructor() {\n GeometryCollectionIterator.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._parent = null\n this._atStart = null\n this._max = null\n this._index = null\n this._subcollectionIterator = null\n const parent = arguments[0]\n this._parent = parent\n this._atStart = true\n this._index = 0\n this._max = parent.getNumGeometries()\n }\n static isAtomic(geom) {\n return !(geom instanceof GeometryCollection)\n }\n next() {\n if (this._atStart) {\n this._atStart = false\n if (GeometryCollectionIterator.isAtomic(this._parent)) this._index++\n return this._parent\n }\n if (this._subcollectionIterator !== null) \n if (this._subcollectionIterator.hasNext()) \n return this._subcollectionIterator.next()\n else \n this._subcollectionIterator = null\n \n \n if (this._index >= this._max) \n throw new NoSuchElementException()\n \n const obj = this._parent.getGeometryN(this._index++)\n if (obj instanceof GeometryCollection) {\n this._subcollectionIterator = new GeometryCollectionIterator(obj)\n return this._subcollectionIterator.next()\n }\n return obj\n }\n remove() {\n throw new UnsupportedOperationException(this.getClass().getName())\n }\n hasNext() {\n if (this._atStart) \n return true\n \n if (this._subcollectionIterator !== null) {\n if (this._subcollectionIterator.hasNext()) \n return true\n \n this._subcollectionIterator = null\n }\n if (this._index >= this._max) \n return false\n \n return true\n }\n get interfaces_() {\n return [Iterator]\n }\n}\n","import Location from '../../geom/Location'\nimport Polygon from '../../geom/Polygon'\nimport PointLocation from '../PointLocation'\nimport PointOnGeometryLocator from './PointOnGeometryLocator'\nimport GeometryCollectionIterator from '../../geom/GeometryCollectionIterator'\nimport GeometryCollection from '../../geom/GeometryCollection'\nexport default class SimplePointInAreaLocator {\n constructor() {\n SimplePointInAreaLocator.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._geom = null\n const geom = arguments[0]\n this._geom = geom\n }\n static locatePointInPolygon(p, poly) {\n if (poly.isEmpty()) return Location.EXTERIOR\n const shell = poly.getExteriorRing()\n const shellLoc = SimplePointInAreaLocator.locatePointInRing(p, shell)\n if (shellLoc !== Location.INTERIOR) return shellLoc\n for (let i = 0; i < poly.getNumInteriorRing(); i++) {\n const hole = poly.getInteriorRingN(i)\n const holeLoc = SimplePointInAreaLocator.locatePointInRing(p, hole)\n if (holeLoc === Location.BOUNDARY) return Location.BOUNDARY\n if (holeLoc === Location.INTERIOR) return Location.EXTERIOR\n }\n return Location.INTERIOR\n }\n static locatePointInRing(p, ring) {\n if (!ring.getEnvelopeInternal().intersects(p)) return Location.EXTERIOR\n return PointLocation.locateInRing(p, ring.getCoordinates())\n }\n static containsPointInPolygon(p, poly) {\n return Location.EXTERIOR !== SimplePointInAreaLocator.locatePointInPolygon(p, poly)\n }\n static locateInGeometry(p, geom) {\n if (geom instanceof Polygon) \n return SimplePointInAreaLocator.locatePointInPolygon(p, geom)\n \n if (geom instanceof GeometryCollection) {\n const geomi = new GeometryCollectionIterator(geom)\n while (geomi.hasNext()) {\n const g2 = geomi.next()\n if (g2 !== geom) {\n const loc = SimplePointInAreaLocator.locateInGeometry(p, g2)\n if (loc !== Location.EXTERIOR) return loc\n }\n }\n }\n return Location.EXTERIOR\n }\n static isContained(p, geom) {\n return Location.EXTERIOR !== SimplePointInAreaLocator.locate(p, geom)\n }\n static locate(p, geom) {\n if (geom.isEmpty()) return Location.EXTERIOR\n if (!geom.getEnvelopeInternal().intersects(p)) return Location.EXTERIOR\n return SimplePointInAreaLocator.locateInGeometry(p, geom)\n }\n locate(p) {\n return SimplePointInAreaLocator.locate(p, this._geom)\n }\n get interfaces_() {\n return [PointOnGeometryLocator]\n }\n}\n","export default class SimilarityMeasure {\n measure(g1, g2) {}\n}\n","import SimilarityMeasure from './SimilarityMeasure'\nexport default class AreaSimilarityMeasure {\n measure(g1, g2) {\n const areaInt = g1.intersection(g2).getArea()\n const areaUnion = g1.union(g2).getArea()\n return areaInt / areaUnion\n }\n get interfaces_() {\n return [SimilarityMeasure]\n }\n}\n","import SimilarityMeasure from './SimilarityMeasure'\nimport Envelope from '../../geom/Envelope'\nimport DiscreteHausdorffDistance from '../distance/DiscreteHausdorffDistance'\nexport default class HausdorffSimilarityMeasure {\n static diagonalSize(env) {\n if (env.isNull()) return 0.0\n const width = env.getWidth()\n const hgt = env.getHeight()\n return Math.sqrt(width * width + hgt * hgt)\n }\n measure(g1, g2) {\n const distance = DiscreteHausdorffDistance.distance(g1, g2, HausdorffSimilarityMeasure.DENSIFY_FRACTION)\n const env = new Envelope(g1.getEnvelopeInternal())\n env.expandToInclude(g2.getEnvelopeInternal())\n const envSize = HausdorffSimilarityMeasure.diagonalSize(env)\n const measure = 1 - distance / envSize\n return measure\n }\n get interfaces_() {\n return [SimilarityMeasure]\n }\n}\nHausdorffSimilarityMeasure.DENSIFY_FRACTION = 0.25\n","export default class SimilarityMeasureCombiner {\n static combine(measure1, measure2) {\n return Math.min(measure1, measure2)\n }\n}\n","import LineString from '../geom/LineString'\nimport Geometry from '../geom/Geometry'\nimport Coordinate from '../geom/Coordinate'\nimport Point from '../geom/Point'\nimport Polygon from '../geom/Polygon'\nimport Orientation from './Orientation'\nimport GeometryCollection from '../geom/GeometryCollection'\nexport default class Centroid {\n constructor() {\n Centroid.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._areaBasePt = null\n this._triangleCent3 = new Coordinate()\n this._areasum2 = 0\n this._cg3 = new Coordinate()\n this._lineCentSum = new Coordinate()\n this._totalLength = 0.0\n this._ptCount = 0\n this._ptCentSum = new Coordinate()\n const geom = arguments[0]\n this._areaBasePt = null\n this.add(geom)\n }\n static area2(p1, p2, p3) {\n return (p2.x - p1.x) * (p3.y - p1.y) - (p3.x - p1.x) * (p2.y - p1.y)\n }\n static centroid3(p1, p2, p3, c) {\n c.x = p1.x + p2.x + p3.x\n c.y = p1.y + p2.y + p3.y\n return null\n }\n static getCentroid(geom) {\n const cent = new Centroid(geom)\n return cent.getCentroid()\n }\n setAreaBasePoint(basePt) {\n this._areaBasePt = basePt\n }\n addPoint(pt) {\n this._ptCount += 1\n this._ptCentSum.x += pt.x\n this._ptCentSum.y += pt.y\n }\n addLineSegments(pts) {\n let lineLen = 0.0\n for (let i = 0; i < pts.length - 1; i++) {\n const segmentLen = pts[i].distance(pts[i + 1])\n if (segmentLen === 0.0) continue\n lineLen += segmentLen\n const midx = (pts[i].x + pts[i + 1].x) / 2\n this._lineCentSum.x += segmentLen * midx\n const midy = (pts[i].y + pts[i + 1].y) / 2\n this._lineCentSum.y += segmentLen * midy\n }\n this._totalLength += lineLen\n if (lineLen === 0.0 && pts.length > 0) this.addPoint(pts[0])\n }\n addHole(pts) {\n const isPositiveArea = Orientation.isCCW(pts)\n for (let i = 0; i < pts.length - 1; i++) \n this.addTriangle(this._areaBasePt, pts[i], pts[i + 1], isPositiveArea)\n \n this.addLineSegments(pts)\n }\n getCentroid() {\n const cent = new Coordinate()\n if (Math.abs(this._areasum2) > 0.0) {\n cent.x = this._cg3.x / 3 / this._areasum2\n cent.y = this._cg3.y / 3 / this._areasum2\n } else if (this._totalLength > 0.0) {\n cent.x = this._lineCentSum.x / this._totalLength\n cent.y = this._lineCentSum.y / this._totalLength\n } else if (this._ptCount > 0) {\n cent.x = this._ptCentSum.x / this._ptCount\n cent.y = this._ptCentSum.y / this._ptCount\n } else {\n return null\n }\n return cent\n }\n addShell(pts) {\n if (pts.length > 0) this.setAreaBasePoint(pts[0])\n const isPositiveArea = !Orientation.isCCW(pts)\n for (let i = 0; i < pts.length - 1; i++) \n this.addTriangle(this._areaBasePt, pts[i], pts[i + 1], isPositiveArea)\n \n this.addLineSegments(pts)\n }\n addTriangle(p0, p1, p2, isPositiveArea) {\n const sign = isPositiveArea ? 1.0 : -1.0\n Centroid.centroid3(p0, p1, p2, this._triangleCent3)\n const area2 = Centroid.area2(p0, p1, p2)\n this._cg3.x += sign * area2 * this._triangleCent3.x\n this._cg3.y += sign * area2 * this._triangleCent3.y\n this._areasum2 += sign * area2\n }\n add() {\n if (arguments[0] instanceof Polygon) {\n const poly = arguments[0]\n this.addShell(poly.getExteriorRing().getCoordinates())\n for (let i = 0; i < poly.getNumInteriorRing(); i++) \n this.addHole(poly.getInteriorRingN(i).getCoordinates())\n \n } else if (arguments[0] instanceof Geometry) {\n const geom = arguments[0]\n if (geom.isEmpty()) return null\n if (geom instanceof Point) {\n this.addPoint(geom.getCoordinate())\n } else if (geom instanceof LineString) {\n this.addLineSegments(geom.getCoordinates())\n } else if (geom instanceof Polygon) {\n const poly = geom\n this.add(poly)\n } else if (geom instanceof GeometryCollection) {\n const gc = geom\n for (let i = 0; i < gc.getNumGeometries(); i++) \n this.add(gc.getGeometryN(i))\n \n }\n }\n }\n}\n","import Exception from '../lang/Exception'\n\nexport default class EmptyStackException extends Exception {\n constructor(message) {\n super(message)\n this.name = Object.keys({ EmptyStackException })[0]\n }\n}\n","import EmptyStackException from './EmptyStackException'\nimport IndexOutOfBoundsException from '../lang/IndexOutOfBoundsException'\nimport List from './List'\n\n/**\n * @see http://download.oracle.com/javase/6/docs/api/java/util/Stack.html\n */\nexport default class Stack extends List {\n constructor() {\n super()\n this.array = []\n }\n\n add(e) {\n this.array.push(e)\n return true\n }\n\n get(index) {\n if (index < 0 || index >= this.size())\n throw new IndexOutOfBoundsException()\n return this.array[index]\n }\n\n /**\n * Pushes an item onto the top of this stack.\n * @param {Object} e\n * @return {Object}\n */\n push(e) {\n this.array.push(e)\n return e\n }\n\n /**\n * Removes the object at the top of this stack and returns that object as the value of this function.\n * @return {Object}\n */\n pop() {\n if (this.array.length === 0)\n throw new EmptyStackException()\n return this.array.pop()\n }\n\n /**\n * Looks at the object at the top of this stack without removing it from the\n * stack.\n * @return {Object}\n */\n peek() {\n if (this.array.length === 0)\n throw new EmptyStackException()\n return this.array[this.array.length - 1]\n }\n\n /**\n * Tests if this stack is empty.\n * @return {boolean} true if and only if this stack contains no items; false\n * otherwise.\n */\n empty() {\n return this.array.length === 0\n }\n\n /**\n * @return {boolean}\n */\n isEmpty() {\n return this.empty()\n }\n\n /**\n * Returns the 1-based position where an object is on this stack. If the object\n * o occurs as an item in this stack, this method returns the distance from the\n * top of the stack of the occurrence nearest the top of the stack; the topmost\n * item on the stack is considered to be at distance 1. The equals method is\n * used to compare o to the items in this stack.\n *\n * NOTE: does not currently actually use equals. (=== is used)\n *\n * @param {Object} o\n * @return {number} the 1-based position from the top of the stack where the\n * object is located; the return value -1 indicates that the object is\n * not on the stack.\n */\n search(o) {\n return this.array.indexOf(o)\n }\n\n /**\n * @return {number}\n */\n size() {\n return this.array.length\n }\n\n /**\n * @return {Array}\n */\n toArray() {\n return this.array.slice()\n }\n}\n","import HashSet from '../../../../java/util/HashSet'\nimport CoordinateFilter from '../geom/CoordinateFilter'\nimport ArrayList from '../../../../java/util/ArrayList'\nexport default class UniqueCoordinateArrayFilter {\n constructor() {\n UniqueCoordinateArrayFilter.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._coordSet = new HashSet()\n this._list = new ArrayList()\n }\n static filterCoordinates(coords) {\n const filter = new UniqueCoordinateArrayFilter()\n for (let i = 0; i < coords.length; i++) \n filter.filter(coords[i])\n \n return filter.getCoordinates()\n }\n filter(coord) {\n if (this._coordSet.add(coord)) \n this._list.add(coord)\n \n }\n getCoordinates() {\n const coordinates = new Array(this._list.size()).fill(null)\n return this._list.toArray(coordinates)\n }\n get interfaces_() {\n return [CoordinateFilter]\n }\n}\n","import TreeSet from '../../../../java/util/TreeSet'\nimport CoordinateList from '../geom/CoordinateList'\nimport Arrays from '../../../../java/util/Arrays'\nimport PointLocation from './PointLocation'\nimport Stack from '../../../../java/util/Stack'\nimport Orientation from './Orientation'\nimport CoordinateArrays from '../geom/CoordinateArrays'\nimport ArrayList from '../../../../java/util/ArrayList'\nimport Comparator from '../../../../java/util/Comparator'\nimport UniqueCoordinateArrayFilter from '../util/UniqueCoordinateArrayFilter'\nimport Assert from '../util/Assert'\nexport default class ConvexHull {\n constructor() {\n ConvexHull.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._geomFactory = null\n this._inputPts = null\n if (arguments.length === 1) {\n const geometry = arguments[0]\n ConvexHull.constructor_.call(this, ConvexHull.extractCoordinates(geometry), geometry.getFactory())\n } else if (arguments.length === 2) {\n const pts = arguments[0], geomFactory = arguments[1]\n this._inputPts = UniqueCoordinateArrayFilter.filterCoordinates(pts)\n this._geomFactory = geomFactory\n }\n }\n static extractCoordinates(geom) {\n const filter = new UniqueCoordinateArrayFilter()\n geom.apply(filter)\n return filter.getCoordinates()\n }\n preSort(pts) {\n let t = null\n for (let i = 1; i < pts.length; i++) \n if (pts[i].y < pts[0].y || pts[i].y === pts[0].y && pts[i].x < pts[0].x) {\n t = pts[0]\n pts[0] = pts[i]\n pts[i] = t\n }\n \n Arrays.sort(pts, 1, pts.length, new RadialComparator(pts[0]))\n return pts\n }\n computeOctRing(inputPts) {\n const octPts = this.computeOctPts(inputPts)\n const coordList = new CoordinateList()\n coordList.add(octPts, false)\n if (coordList.size() < 3) \n return null\n \n coordList.closeRing()\n return coordList.toCoordinateArray()\n }\n lineOrPolygon(coordinates) {\n coordinates = this.cleanRing(coordinates)\n if (coordinates.length === 3) \n return this._geomFactory.createLineString([coordinates[0], coordinates[1]])\n \n const linearRing = this._geomFactory.createLinearRing(coordinates)\n return this._geomFactory.createPolygon(linearRing)\n }\n cleanRing(original) {\n Assert.equals(original[0], original[original.length - 1])\n const cleanedRing = new ArrayList()\n let previousDistinctCoordinate = null\n for (let i = 0; i <= original.length - 2; i++) {\n const currentCoordinate = original[i]\n const nextCoordinate = original[i + 1]\n if (currentCoordinate.equals(nextCoordinate)) \n continue\n \n if (previousDistinctCoordinate !== null && this.isBetween(previousDistinctCoordinate, currentCoordinate, nextCoordinate)) \n continue\n \n cleanedRing.add(currentCoordinate)\n previousDistinctCoordinate = currentCoordinate\n }\n cleanedRing.add(original[original.length - 1])\n const cleanedRingCoordinates = new Array(cleanedRing.size()).fill(null)\n return cleanedRing.toArray(cleanedRingCoordinates)\n }\n isBetween(c1, c2, c3) {\n if (Orientation.index(c1, c2, c3) !== 0) \n return false\n \n if (c1.x !== c3.x) {\n if (c1.x <= c2.x && c2.x <= c3.x) \n return true\n \n if (c3.x <= c2.x && c2.x <= c1.x) \n return true\n \n }\n if (c1.y !== c3.y) {\n if (c1.y <= c2.y && c2.y <= c3.y) \n return true\n \n if (c3.y <= c2.y && c2.y <= c1.y) \n return true\n \n }\n return false\n }\n reduce(inputPts) {\n const polyPts = this.computeOctRing(inputPts)\n if (polyPts === null) return inputPts\n const reducedSet = new TreeSet()\n for (let i = 0; i < polyPts.length; i++) \n reducedSet.add(polyPts[i])\n \n for (let i = 0; i < inputPts.length; i++) \n if (!PointLocation.isInRing(inputPts[i], polyPts)) \n reducedSet.add(inputPts[i])\n \n \n const reducedPts = CoordinateArrays.toCoordinateArray(reducedSet)\n if (reducedPts.length < 3) return this.padArray3(reducedPts)\n return reducedPts\n }\n getConvexHull() {\n if (this._inputPts.length === 0) \n return this._geomFactory.createGeometryCollection()\n \n if (this._inputPts.length === 1) \n return this._geomFactory.createPoint(this._inputPts[0])\n \n if (this._inputPts.length === 2) \n return this._geomFactory.createLineString(this._inputPts)\n \n let reducedPts = this._inputPts\n if (this._inputPts.length > 50) \n reducedPts = this.reduce(this._inputPts)\n \n const sortedPts = this.preSort(reducedPts)\n const cHS = this.grahamScan(sortedPts)\n const cH = this.toCoordinateArray(cHS)\n return this.lineOrPolygon(cH)\n }\n padArray3(pts) {\n const pad = new Array(3).fill(null)\n for (let i = 0; i < pad.length; i++) \n if (i < pts.length) \n pad[i] = pts[i]\n else pad[i] = pts[0]\n \n return pad\n }\n computeOctPts(inputPts) {\n const pts = new Array(8).fill(null)\n for (let j = 0; j < pts.length; j++) \n pts[j] = inputPts[0]\n \n for (let i = 1; i < inputPts.length; i++) {\n if (inputPts[i].x < pts[0].x) \n pts[0] = inputPts[i]\n \n if (inputPts[i].x - inputPts[i].y < pts[1].x - pts[1].y) \n pts[1] = inputPts[i]\n \n if (inputPts[i].y > pts[2].y) \n pts[2] = inputPts[i]\n \n if (inputPts[i].x + inputPts[i].y > pts[3].x + pts[3].y) \n pts[3] = inputPts[i]\n \n if (inputPts[i].x > pts[4].x) \n pts[4] = inputPts[i]\n \n if (inputPts[i].x - inputPts[i].y > pts[5].x - pts[5].y) \n pts[5] = inputPts[i]\n \n if (inputPts[i].y < pts[6].y) \n pts[6] = inputPts[i]\n \n if (inputPts[i].x + inputPts[i].y < pts[7].x + pts[7].y) \n pts[7] = inputPts[i]\n \n }\n return pts\n }\n toCoordinateArray(stack) {\n const coordinates = new Array(stack.size()).fill(null)\n for (let i = 0; i < stack.size(); i++) {\n const coordinate = stack.get(i)\n coordinates[i] = coordinate\n }\n return coordinates\n }\n grahamScan(c) {\n let p = null\n const ps = new Stack()\n ps.push(c[0])\n ps.push(c[1])\n ps.push(c[2])\n for (let i = 3; i < c.length; i++) {\n p = ps.pop()\n while (!ps.empty() && Orientation.index(ps.peek(), p, c[i]) > 0) \n p = ps.pop()\n \n ps.push(p)\n ps.push(c[i])\n }\n ps.push(c[0])\n return ps\n }\n}\nclass RadialComparator {\n constructor() {\n RadialComparator.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._origin = null\n const origin = arguments[0]\n this._origin = origin\n }\n static polarCompare(o, p, q) {\n const dxp = p.x - o.x\n const dyp = p.y - o.y\n const dxq = q.x - o.x\n const dyq = q.y - o.y\n const orient = Orientation.index(o, p, q)\n if (orient === Orientation.COUNTERCLOCKWISE) return 1\n if (orient === Orientation.CLOCKWISE) return -1\n const op = dxp * dxp + dyp * dyp\n const oq = dxq * dxq + dyq * dyq\n if (op < oq) \n return -1\n \n if (op > oq) \n return 1\n \n return 0\n }\n compare(o1, o2) {\n const p1 = o1\n const p2 = o2\n return RadialComparator.polarCompare(this._origin, p1, p2)\n }\n get interfaces_() {\n return [Comparator]\n }\n}\nConvexHull.RadialComparator = RadialComparator\n","import Coordinate from '../geom/Coordinate'\nimport Polygon from '../geom/Polygon'\nimport Double from '../../../../java/lang/Double'\nimport GeometryCollection from '../geom/GeometryCollection'\nimport ArrayList from '../../../../java/util/ArrayList'\nimport Comparator from '../../../../java/util/Comparator'\nimport Assert from '../util/Assert'\nexport default class InteriorPointArea {\n constructor() {\n InteriorPointArea.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._interiorPoint = null\n this._maxWidth = -1\n const g = arguments[0]\n this.process(g)\n }\n static getInteriorPoint(geom) {\n const intPt = new InteriorPointArea(geom)\n return intPt.getInteriorPoint()\n }\n static avg(a, b) {\n return (a + b) / 2.0\n }\n getInteriorPoint() {\n return this._interiorPoint\n }\n process(geom) {\n if (geom.isEmpty()) return null\n if (geom instanceof Polygon) {\n this.processPolygon(geom)\n } else if (geom instanceof GeometryCollection) {\n const gc = geom\n for (let i = 0; i < gc.getNumGeometries(); i++) \n this.process(gc.getGeometryN(i))\n \n }\n }\n processPolygon(polygon) {\n const intPtPoly = new InteriorPointPolygon(polygon)\n intPtPoly.process()\n const width = intPtPoly.getWidth()\n if (width > this._maxWidth) {\n this._maxWidth = width\n this._interiorPoint = intPtPoly.getInteriorPoint()\n }\n }\n}\nclass InteriorPointPolygon {\n constructor() {\n InteriorPointPolygon.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._polygon = null\n this._interiorPointY = null\n this._interiorSectionWidth = 0.0\n this._interiorPoint = null\n const polygon = arguments[0]\n this._polygon = polygon\n this._interiorPointY = ScanLineYOrdinateFinder.getScanLineY(polygon)\n }\n static isEdgeCrossingCounted(p0, p1, scanY) {\n const y0 = p0.getY()\n const y1 = p1.getY()\n if (y0 === y1) return false\n if (y0 === scanY && y1 < scanY) return false\n if (y1 === scanY && y0 < scanY) return false\n return true\n }\n static intersectsHorizontalLine() {\n if (arguments.length === 2) {\n const env = arguments[0], y = arguments[1]\n if (y < env.getMinY()) return false\n if (y > env.getMaxY()) return false\n return true\n } else if (arguments.length === 3) {\n const p0 = arguments[0], p1 = arguments[1], y = arguments[2]\n if (p0.getY() > y && p1.getY() > y) return false\n if (p0.getY() < y && p1.getY() < y) return false\n return true\n }\n }\n static intersection(p0, p1, Y) {\n const x0 = p0.getX()\n const x1 = p1.getX()\n if (x0 === x1) return x0\n const segDX = x1 - x0\n const segDY = p1.getY() - p0.getY()\n const m = segDY / segDX\n const x = x0 + (Y - p0.getY()) / m\n return x\n }\n findBestMidpoint(crossings) {\n if (crossings.size() === 0) return null\n Assert.isTrue(0 === crossings.size() % 2, 'Interior Point robustness failure: odd number of scanline crossings')\n crossings.sort(new DoubleComparator())\n for (let i = 0; i < crossings.size(); i += 2) {\n const x1 = crossings.get(i)\n const x2 = crossings.get(i + 1)\n const width = x2 - x1\n if (width > this._interiorSectionWidth) {\n this._interiorSectionWidth = width\n const interiorPointX = InteriorPointArea.avg(x1, x2)\n this._interiorPoint = new Coordinate(interiorPointX, this._interiorPointY)\n }\n }\n }\n process() {\n if (this._polygon.isEmpty()) return null\n this._interiorPoint = new Coordinate(this._polygon.getCoordinate())\n const crossings = new ArrayList()\n this.scanRing(this._polygon.getExteriorRing(), crossings)\n for (let i = 0; i < this._polygon.getNumInteriorRing(); i++) \n this.scanRing(this._polygon.getInteriorRingN(i), crossings)\n \n this.findBestMidpoint(crossings)\n }\n scanRing(ring, crossings) {\n if (!InteriorPointPolygon.intersectsHorizontalLine(ring.getEnvelopeInternal(), this._interiorPointY)) return null\n const seq = ring.getCoordinateSequence()\n for (let i = 1; i < seq.size(); i++) {\n const ptPrev = seq.getCoordinate(i - 1)\n const pt = seq.getCoordinate(i)\n this.addEdgeCrossing(ptPrev, pt, this._interiorPointY, crossings)\n }\n }\n getWidth() {\n return this._interiorSectionWidth\n }\n getInteriorPoint() {\n return this._interiorPoint\n }\n addEdgeCrossing(p0, p1, scanY, crossings) {\n if (!InteriorPointPolygon.intersectsHorizontalLine(p0, p1, scanY)) return null\n if (!InteriorPointPolygon.isEdgeCrossingCounted(p0, p1, scanY)) return null\n const xInt = InteriorPointPolygon.intersection(p0, p1, scanY)\n crossings.add(xInt)\n }\n}\nclass DoubleComparator {\n compare(v1, v2) {\n return v1 < v2 ? -1 : v1 > v2 ? +1 : 0\n }\n get interfaces_() {\n return [Comparator]\n }\n}\nInteriorPointPolygon.DoubleComparator = DoubleComparator\nclass ScanLineYOrdinateFinder {\n constructor() {\n ScanLineYOrdinateFinder.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._poly = null\n this._centreY = null\n this._hiY = Double.MAX_VALUE\n this._loY = -Double.MAX_VALUE\n const poly = arguments[0]\n this._poly = poly\n this._hiY = poly.getEnvelopeInternal().getMaxY()\n this._loY = poly.getEnvelopeInternal().getMinY()\n this._centreY = InteriorPointArea.avg(this._loY, this._hiY)\n }\n static getScanLineY(poly) {\n const finder = new ScanLineYOrdinateFinder(poly)\n return finder.getScanLineY()\n }\n updateInterval(y) {\n if (y <= this._centreY) {\n if (y > this._loY) this._loY = y\n } else if (y > this._centreY) {\n if (y < this._hiY) \n this._hiY = y\n \n }\n }\n getScanLineY() {\n this.process(this._poly.getExteriorRing())\n for (let i = 0; i < this._poly.getNumInteriorRing(); i++) \n this.process(this._poly.getInteriorRingN(i))\n \n const scanLineY = InteriorPointArea.avg(this._hiY, this._loY)\n return scanLineY\n }\n process(line) {\n const seq = line.getCoordinateSequence()\n for (let i = 0; i < seq.size(); i++) {\n const y = seq.getY(i)\n this.updateInterval(y)\n }\n }\n}\nInteriorPointArea.InteriorPointPolygon = InteriorPointPolygon\nInteriorPointArea.ScanLineYOrdinateFinder = ScanLineYOrdinateFinder\n","import LineString from '../geom/LineString'\nimport Geometry from '../geom/Geometry'\nimport Coordinate from '../geom/Coordinate'\nimport Double from '../../../../java/lang/Double'\nimport Centroid from './Centroid'\nimport GeometryCollection from '../geom/GeometryCollection'\nexport default class InteriorPointLine {\n constructor() {\n InteriorPointLine.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._centroid = null\n this._minDistance = Double.MAX_VALUE\n this._interiorPoint = null\n const g = arguments[0]\n if (g.isEmpty()) {\n this._centroid = null\n } else {\n this._centroid = Centroid.getCentroid(g)\n g.getPrecisionModel().makePrecise(this._centroid)\n }\n this.addInterior(g)\n if (this._interiorPoint === null) this.addEndpoints(g)\n }\n static getInteriorPoint(geom) {\n const intPt = new InteriorPointLine(geom)\n return intPt.getInteriorPoint()\n }\n addEndpoints() {\n if (arguments[0] instanceof Geometry) {\n const geom = arguments[0]\n if (geom instanceof LineString) {\n this.addEndpoints(geom.getCoordinates())\n } else if (geom instanceof GeometryCollection) {\n const gc = geom\n for (let i = 0; i < gc.getNumGeometries(); i++) \n this.addEndpoints(gc.getGeometryN(i))\n \n }\n } else if (arguments[0] instanceof Array) {\n const pts = arguments[0]\n this.add(pts[0])\n this.add(pts[pts.length - 1])\n }\n }\n getInteriorPoint() {\n return this._interiorPoint\n }\n addInterior() {\n if (arguments[0] instanceof Geometry) {\n const geom = arguments[0]\n if (geom instanceof LineString) {\n this.addInterior(geom.getCoordinates())\n } else if (geom instanceof GeometryCollection) {\n const gc = geom\n for (let i = 0; i < gc.getNumGeometries(); i++) \n this.addInterior(gc.getGeometryN(i))\n \n }\n } else if (arguments[0] instanceof Array) {\n const pts = arguments[0]\n for (let i = 1; i < pts.length - 1; i++) \n this.add(pts[i])\n \n }\n }\n add(point) {\n const dist = point.distance(this._centroid)\n if (dist < this._minDistance) {\n this._interiorPoint = new Coordinate(point)\n this._minDistance = dist\n }\n }\n}\n","import Geometry from '../geom/Geometry'\nimport Coordinate from '../geom/Coordinate'\nimport Point from '../geom/Point'\nimport Double from '../../../../java/lang/Double'\nimport Centroid from './Centroid'\nimport GeometryCollection from '../geom/GeometryCollection'\nexport default class InteriorPointPoint {\n constructor() {\n InteriorPointPoint.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._centroid = null\n this._minDistance = Double.MAX_VALUE\n this._interiorPoint = null\n const g = arguments[0]\n this._centroid = Centroid.getCentroid(g)\n this.add(g)\n }\n static getInteriorPoint(geom) {\n const intPt = new InteriorPointPoint(geom)\n return intPt.getInteriorPoint()\n }\n getInteriorPoint() {\n return this._interiorPoint\n }\n add() {\n if (arguments[0] instanceof Geometry) {\n const geom = arguments[0]\n if (geom instanceof Point) {\n this.add(geom.getCoordinate())\n } else if (geom instanceof GeometryCollection) {\n const gc = geom\n for (let i = 0; i < gc.getNumGeometries(); i++) \n this.add(gc.getGeometryN(i))\n \n }\n } else if (arguments[0] instanceof Coordinate) {\n const point = arguments[0]\n const dist = point.distance(this._centroid)\n if (dist < this._minDistance) {\n this._interiorPoint = new Coordinate(point)\n this._minDistance = dist\n }\n }\n }\n}\n","export default class BoundaryNodeRule {\n isInBoundary(boundaryCount) {}\n}\nclass Mod2BoundaryNodeRule {\n isInBoundary(boundaryCount) {\n return boundaryCount % 2 === 1\n }\n get interfaces_() {\n return [BoundaryNodeRule]\n }\n}\nclass EndPointBoundaryNodeRule {\n isInBoundary(boundaryCount) {\n return boundaryCount > 0\n }\n get interfaces_() {\n return [BoundaryNodeRule]\n }\n}\nclass MultiValentEndPointBoundaryNodeRule {\n isInBoundary(boundaryCount) {\n return boundaryCount > 1\n }\n get interfaces_() {\n return [BoundaryNodeRule]\n }\n}\nclass MonoValentEndPointBoundaryNodeRule {\n isInBoundary(boundaryCount) {\n return boundaryCount === 1\n }\n get interfaces_() {\n return [BoundaryNodeRule]\n }\n}\nBoundaryNodeRule.Mod2BoundaryNodeRule = Mod2BoundaryNodeRule\nBoundaryNodeRule.EndPointBoundaryNodeRule = EndPointBoundaryNodeRule\nBoundaryNodeRule.MultiValentEndPointBoundaryNodeRule = MultiValentEndPointBoundaryNodeRule\nBoundaryNodeRule.MonoValentEndPointBoundaryNodeRule = MonoValentEndPointBoundaryNodeRule\nBoundaryNodeRule.MOD2_BOUNDARY_RULE = new Mod2BoundaryNodeRule()\nBoundaryNodeRule.ENDPOINT_BOUNDARY_RULE = new EndPointBoundaryNodeRule()\nBoundaryNodeRule.MULTIVALENT_ENDPOINT_BOUNDARY_RULE = new MultiValentEndPointBoundaryNodeRule()\nBoundaryNodeRule.MONOVALENT_ENDPOINT_BOUNDARY_RULE = new MonoValentEndPointBoundaryNodeRule()\nBoundaryNodeRule.OGC_SFS_BOUNDARY_RULE = BoundaryNodeRule.MOD2_BOUNDARY_RULE\n","import Location from '../geom/Location'\nimport LineString from '../geom/LineString'\nimport IllegalArgumentException from '../../../../java/lang/IllegalArgumentException'\nimport Point from '../geom/Point'\nimport Polygon from '../geom/Polygon'\nimport PointLocation from './PointLocation'\nimport BoundaryNodeRule from './BoundaryNodeRule'\nimport MultiPolygon from '../geom/MultiPolygon'\nimport GeometryCollectionIterator from '../geom/GeometryCollectionIterator'\nimport GeometryCollection from '../geom/GeometryCollection'\nimport MultiLineString from '../geom/MultiLineString'\nexport default class PointLocator {\n constructor() {\n PointLocator.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._boundaryRule = BoundaryNodeRule.OGC_SFS_BOUNDARY_RULE\n this._isIn = null\n this._numBoundaries = null\n if (arguments.length === 0) {} else if (arguments.length === 1) {\n const boundaryRule = arguments[0]\n if (boundaryRule === null) throw new IllegalArgumentException('Rule must be non-null')\n this._boundaryRule = boundaryRule\n }\n }\n locateInPolygonRing(p, ring) {\n if (!ring.getEnvelopeInternal().intersects(p)) return Location.EXTERIOR\n return PointLocation.locateInRing(p, ring.getCoordinates())\n }\n intersects(p, geom) {\n return this.locate(p, geom) !== Location.EXTERIOR\n }\n updateLocationInfo(loc) {\n if (loc === Location.INTERIOR) this._isIn = true\n if (loc === Location.BOUNDARY) this._numBoundaries++\n }\n computeLocation(p, geom) {\n if (geom instanceof Point) \n this.updateLocationInfo(this.locateOnPoint(p, geom))\n \n if (geom instanceof LineString) {\n this.updateLocationInfo(this.locateOnLineString(p, geom))\n } else if (geom instanceof Polygon) {\n this.updateLocationInfo(this.locateInPolygon(p, geom))\n } else if (geom instanceof MultiLineString) {\n const ml = geom\n for (let i = 0; i < ml.getNumGeometries(); i++) {\n const l = ml.getGeometryN(i)\n this.updateLocationInfo(this.locateOnLineString(p, l))\n }\n } else if (geom instanceof MultiPolygon) {\n const mpoly = geom\n for (let i = 0; i < mpoly.getNumGeometries(); i++) {\n const poly = mpoly.getGeometryN(i)\n this.updateLocationInfo(this.locateInPolygon(p, poly))\n }\n } else if (geom instanceof GeometryCollection) {\n const geomi = new GeometryCollectionIterator(geom)\n while (geomi.hasNext()) {\n const g2 = geomi.next()\n if (g2 !== geom) this.computeLocation(p, g2)\n }\n }\n }\n locateOnPoint(p, pt) {\n const ptCoord = pt.getCoordinate()\n if (ptCoord.equals2D(p)) return Location.INTERIOR\n return Location.EXTERIOR\n }\n locateOnLineString(p, l) {\n if (!l.getEnvelopeInternal().intersects(p)) return Location.EXTERIOR\n const seq = l.getCoordinateSequence()\n if (!l.isClosed()) \n if (p.equals(seq.getCoordinate(0)) || p.equals(seq.getCoordinate(seq.size() - 1))) \n return Location.BOUNDARY\n \n \n if (PointLocation.isOnLine(p, seq)) \n return Location.INTERIOR\n \n return Location.EXTERIOR\n }\n locateInPolygon(p, poly) {\n if (poly.isEmpty()) return Location.EXTERIOR\n const shell = poly.getExteriorRing()\n const shellLoc = this.locateInPolygonRing(p, shell)\n if (shellLoc === Location.EXTERIOR) return Location.EXTERIOR\n if (shellLoc === Location.BOUNDARY) return Location.BOUNDARY\n for (let i = 0; i < poly.getNumInteriorRing(); i++) {\n const hole = poly.getInteriorRingN(i)\n const holeLoc = this.locateInPolygonRing(p, hole)\n if (holeLoc === Location.INTERIOR) return Location.EXTERIOR\n if (holeLoc === Location.BOUNDARY) return Location.BOUNDARY\n }\n return Location.INTERIOR\n }\n locate(p, geom) {\n if (geom.isEmpty()) return Location.EXTERIOR\n if (geom instanceof LineString) \n return this.locateOnLineString(p, geom)\n else if (geom instanceof Polygon) \n return this.locateInPolygon(p, geom)\n \n this._isIn = false\n this._numBoundaries = 0\n this.computeLocation(p, geom)\n if (this._boundaryRule.isInBoundary(this._numBoundaries)) return Location.BOUNDARY\n if (this._numBoundaries > 0 || this._isIn) return Location.INTERIOR\n return Location.EXTERIOR\n }\n}\n","import Coordinate from '../geom/Coordinate'\nimport Double from '../../../../java/lang/Double'\nimport CoordinateArrays from '../geom/CoordinateArrays'\nimport Angle from './Angle'\nimport Assert from '../util/Assert'\nimport Triangle from '../geom/Triangle'\nexport default class MinimumBoundingCircle {\n constructor() {\n MinimumBoundingCircle.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._input = null\n this._extremalPts = null\n this._centre = null\n this._radius = 0.0\n const geom = arguments[0]\n this._input = geom\n }\n static farthestPoints(pts) {\n const dist01 = pts[0].distance(pts[1])\n const dist12 = pts[1].distance(pts[2])\n const dist20 = pts[2].distance(pts[0])\n if (dist01 >= dist12 && dist01 >= dist20) \n return [pts[0], pts[1]]\n \n if (dist12 >= dist01 && dist12 >= dist20) \n return [pts[1], pts[2]]\n \n return [pts[2], pts[0]]\n }\n static pointWitMinAngleWithX(pts, P) {\n let minSin = Double.MAX_VALUE\n let minAngPt = null\n for (let i = 0; i < pts.length; i++) {\n const p = pts[i]\n if (p === P) continue\n const dx = p.x - P.x\n let dy = p.y - P.y\n if (dy < 0) dy = -dy\n const len = Math.sqrt(dx * dx + dy * dy)\n const sin = dy / len\n if (sin < minSin) {\n minSin = sin\n minAngPt = p\n }\n }\n return minAngPt\n }\n static lowestPoint(pts) {\n let min = pts[0]\n for (let i = 1; i < pts.length; i++) \n if (pts[i].y < min.y) min = pts[i]\n \n return min\n }\n static pointWithMinAngleWithSegment(pts, P, Q) {\n let minAng = Double.MAX_VALUE\n let minAngPt = null\n for (let i = 0; i < pts.length; i++) {\n const p = pts[i]\n if (p === P) continue\n if (p === Q) continue\n const ang = Angle.angleBetween(P, p, Q)\n if (ang < minAng) {\n minAng = ang\n minAngPt = p\n }\n }\n return minAngPt\n }\n getRadius() {\n this.compute()\n return this._radius\n }\n getDiameter() {\n this.compute()\n switch (this._extremalPts.length) {\n case 0:\n return this._input.getFactory().createLineString()\n case 1:\n return this._input.getFactory().createPoint(this._centre)\n }\n const p0 = this._extremalPts[0]\n const p1 = this._extremalPts[1]\n return this._input.getFactory().createLineString([p0, p1])\n }\n getExtremalPoints() {\n this.compute()\n return this._extremalPts\n }\n computeCirclePoints() {\n if (this._input.isEmpty()) {\n this._extremalPts = new Array(0).fill(null)\n return null\n }\n if (this._input.getNumPoints() === 1) {\n const pts = this._input.getCoordinates()\n this._extremalPts = [new Coordinate(pts[0])]\n return null\n }\n const convexHull = this._input.convexHull()\n const hullPts = convexHull.getCoordinates()\n let pts = hullPts\n if (hullPts[0].equals2D(hullPts[hullPts.length - 1])) {\n pts = new Array(hullPts.length - 1).fill(null)\n CoordinateArrays.copyDeep(hullPts, 0, pts, 0, hullPts.length - 1)\n }\n if (pts.length <= 2) {\n this._extremalPts = CoordinateArrays.copyDeep(pts)\n return null\n }\n let P = MinimumBoundingCircle.lowestPoint(pts)\n let Q = MinimumBoundingCircle.pointWitMinAngleWithX(pts, P)\n for (let i = 0; i < pts.length; i++) {\n const R = MinimumBoundingCircle.pointWithMinAngleWithSegment(pts, P, Q)\n if (Angle.isObtuse(P, R, Q)) {\n this._extremalPts = [new Coordinate(P), new Coordinate(Q)]\n return null\n }\n if (Angle.isObtuse(R, P, Q)) {\n P = R\n continue\n }\n if (Angle.isObtuse(R, Q, P)) {\n Q = R\n continue\n }\n this._extremalPts = [new Coordinate(P), new Coordinate(Q), new Coordinate(R)]\n return null\n }\n Assert.shouldNeverReachHere('Logic failure in Minimum Bounding Circle algorithm!')\n }\n compute() {\n if (this._extremalPts !== null) return null\n this.computeCirclePoints()\n this.computeCentre()\n if (this._centre !== null) this._radius = this._centre.distance(this._extremalPts[0])\n }\n getCircle() {\n this.compute()\n if (this._centre === null) return this._input.getFactory().createPolygon()\n const centrePoint = this._input.getFactory().createPoint(this._centre)\n if (this._radius === 0.0) return centrePoint\n return centrePoint.buffer(this._radius)\n }\n getCentre() {\n this.compute()\n return this._centre\n }\n getMaximumDiameter() {\n this.compute()\n switch (this._extremalPts.length) {\n case 0:\n return this._input.getFactory().createLineString()\n case 1:\n return this._input.getFactory().createPoint(this._centre)\n case 2:\n return this._input.getFactory().createLineString([this._extremalPts[0], this._extremalPts[1]])\n default:\n const maxDiameter = MinimumBoundingCircle.farthestPoints(this._extremalPts)\n return this._input.getFactory().createLineString(maxDiameter)\n }\n }\n computeCentre() {\n switch (this._extremalPts.length) {\n case 0:\n this._centre = null\n break\n case 1:\n this._centre = this._extremalPts[0]\n break\n case 2:\n this._centre = new Coordinate((this._extremalPts[0].x + this._extremalPts[1].x) / 2.0, (this._extremalPts[0].y + this._extremalPts[1].y) / 2.0)\n break\n case 3:\n this._centre = Triangle.circumcentre(this._extremalPts[0], this._extremalPts[1], this._extremalPts[2])\n break\n }\n }\n}\n","import Coordinate from '../geom/Coordinate'\nimport Polygon from '../geom/Polygon'\nimport Double from '../../../../java/lang/Double'\nimport LineSegment from '../geom/LineSegment'\nimport ConvexHull from './ConvexHull'\nexport default class MinimumDiameter {\n constructor() {\n MinimumDiameter.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._inputGeom = null\n this._isConvex = null\n this._convexHullPts = null\n this._minBaseSeg = new LineSegment()\n this._minWidthPt = null\n this._minPtIndex = null\n this._minWidth = 0.0\n if (arguments.length === 1) {\n const inputGeom = arguments[0]\n MinimumDiameter.constructor_.call(this, inputGeom, false)\n } else if (arguments.length === 2) {\n const inputGeom = arguments[0], isConvex = arguments[1]\n this._inputGeom = inputGeom\n this._isConvex = isConvex\n }\n }\n static nextIndex(pts, index) {\n index++\n if (index >= pts.length) index = 0\n return index\n }\n static computeC(a, b, p) {\n return a * p.y - b * p.x\n }\n static getMinimumDiameter(geom) {\n return new MinimumDiameter(geom).getDiameter()\n }\n static getMinimumRectangle(geom) {\n return new MinimumDiameter(geom).getMinimumRectangle()\n }\n static computeSegmentForLine(a, b, c) {\n let p0 = null\n let p1 = null\n if (Math.abs(b) > Math.abs(a)) {\n p0 = new Coordinate(0.0, c / b)\n p1 = new Coordinate(1.0, c / b - a / b)\n } else {\n p0 = new Coordinate(c / a, 0.0)\n p1 = new Coordinate(c / a - b / a, 1.0)\n }\n return new LineSegment(p0, p1)\n }\n getWidthCoordinate() {\n this.computeMinimumDiameter()\n return this._minWidthPt\n }\n getSupportingSegment() {\n this.computeMinimumDiameter()\n return this._inputGeom.getFactory().createLineString([this._minBaseSeg.p0, this._minBaseSeg.p1])\n }\n getDiameter() {\n this.computeMinimumDiameter()\n if (this._minWidthPt === null) return this._inputGeom.getFactory().createLineString()\n const basePt = this._minBaseSeg.project(this._minWidthPt)\n return this._inputGeom.getFactory().createLineString([basePt, this._minWidthPt])\n }\n computeWidthConvex(convexGeom) {\n if (convexGeom instanceof Polygon) this._convexHullPts = convexGeom.getExteriorRing().getCoordinates(); else this._convexHullPts = convexGeom.getCoordinates()\n if (this._convexHullPts.length === 0) {\n this._minWidth = 0.0\n this._minWidthPt = null\n this._minBaseSeg = null\n } else if (this._convexHullPts.length === 1) {\n this._minWidth = 0.0\n this._minWidthPt = this._convexHullPts[0]\n this._minBaseSeg.p0 = this._convexHullPts[0]\n this._minBaseSeg.p1 = this._convexHullPts[0]\n } else if (this._convexHullPts.length === 2 || this._convexHullPts.length === 3) {\n this._minWidth = 0.0\n this._minWidthPt = this._convexHullPts[0]\n this._minBaseSeg.p0 = this._convexHullPts[0]\n this._minBaseSeg.p1 = this._convexHullPts[1]\n } else {\n this.computeConvexRingMinDiameter(this._convexHullPts)\n }\n }\n computeConvexRingMinDiameter(pts) {\n this._minWidth = Double.MAX_VALUE\n let currMaxIndex = 1\n const seg = new LineSegment()\n for (let i = 0; i < pts.length - 1; i++) {\n seg.p0 = pts[i]\n seg.p1 = pts[i + 1]\n currMaxIndex = this.findMaxPerpDistance(pts, seg, currMaxIndex)\n }\n }\n computeMinimumDiameter() {\n if (this._minWidthPt !== null) return null\n if (this._isConvex) {\n this.computeWidthConvex(this._inputGeom)\n } else {\n const convexGeom = new ConvexHull(this._inputGeom).getConvexHull()\n this.computeWidthConvex(convexGeom)\n }\n }\n getLength() {\n this.computeMinimumDiameter()\n return this._minWidth\n }\n findMaxPerpDistance(pts, seg, startIndex) {\n let maxPerpDistance = seg.distancePerpendicular(pts[startIndex])\n let nextPerpDistance = maxPerpDistance\n let maxIndex = startIndex\n let nextIndex = maxIndex\n while (nextPerpDistance >= maxPerpDistance) {\n maxPerpDistance = nextPerpDistance\n maxIndex = nextIndex\n nextIndex = MinimumDiameter.nextIndex(pts, maxIndex)\n nextPerpDistance = seg.distancePerpendicular(pts[nextIndex])\n }\n if (maxPerpDistance < this._minWidth) {\n this._minPtIndex = maxIndex\n this._minWidth = maxPerpDistance\n this._minWidthPt = pts[this._minPtIndex]\n this._minBaseSeg = new LineSegment(seg)\n }\n return maxIndex\n }\n getMinimumRectangle() {\n this.computeMinimumDiameter()\n if (this._minWidth === 0.0) {\n if (this._minBaseSeg.p0.equals2D(this._minBaseSeg.p1)) \n return this._inputGeom.getFactory().createPoint(this._minBaseSeg.p0)\n \n return this._minBaseSeg.toGeometry(this._inputGeom.getFactory())\n }\n const dx = this._minBaseSeg.p1.x - this._minBaseSeg.p0.x\n const dy = this._minBaseSeg.p1.y - this._minBaseSeg.p0.y\n let minPara = Double.MAX_VALUE\n let maxPara = -Double.MAX_VALUE\n let minPerp = Double.MAX_VALUE\n let maxPerp = -Double.MAX_VALUE\n for (let i = 0; i < this._convexHullPts.length; i++) {\n const paraC = MinimumDiameter.computeC(dx, dy, this._convexHullPts[i])\n if (paraC > maxPara) maxPara = paraC\n if (paraC < minPara) minPara = paraC\n const perpC = MinimumDiameter.computeC(-dy, dx, this._convexHullPts[i])\n if (perpC > maxPerp) maxPerp = perpC\n if (perpC < minPerp) minPerp = perpC\n }\n const maxPerpLine = MinimumDiameter.computeSegmentForLine(-dx, -dy, maxPerp)\n const minPerpLine = MinimumDiameter.computeSegmentForLine(-dx, -dy, minPerp)\n const maxParaLine = MinimumDiameter.computeSegmentForLine(-dy, dx, maxPara)\n const minParaLine = MinimumDiameter.computeSegmentForLine(-dy, dx, minPara)\n const p0 = maxParaLine.lineIntersection(maxPerpLine)\n const p1 = minParaLine.lineIntersection(maxPerpLine)\n const p2 = minParaLine.lineIntersection(minPerpLine)\n const p3 = maxParaLine.lineIntersection(minPerpLine)\n const shell = this._inputGeom.getFactory().createLinearRing([p0, p1, p2, p3, p0])\n return this._inputGeom.getFactory().createPolygon(shell)\n }\n}\n","import LineString from '../geom/LineString'\nimport CoordinateList from '../geom/CoordinateList'\nimport GeometryTransformer from '../geom/util/GeometryTransformer'\nimport IllegalArgumentException from '../../../../java/lang/IllegalArgumentException'\nimport MultiPolygon from '../geom/MultiPolygon'\nimport LineSegment from '../geom/LineSegment'\nexport default class Densifier {\n constructor() {\n Densifier.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._inputGeom = null\n this._distanceTolerance = null\n const inputGeom = arguments[0]\n this._inputGeom = inputGeom\n }\n static densifyPoints(pts, distanceTolerance, precModel) {\n const seg = new LineSegment()\n const coordList = new CoordinateList()\n for (let i = 0; i < pts.length - 1; i++) {\n seg.p0 = pts[i]\n seg.p1 = pts[i + 1]\n coordList.add(seg.p0, false)\n const len = seg.getLength()\n const densifiedSegCount = Math.trunc(len / distanceTolerance) + 1\n if (densifiedSegCount > 1) {\n const densifiedSegLen = len / densifiedSegCount\n for (let j = 1; j < densifiedSegCount; j++) {\n const segFract = j * densifiedSegLen / len\n const p = seg.pointAlong(segFract)\n precModel.makePrecise(p)\n coordList.add(p, false)\n }\n }\n }\n coordList.add(pts[pts.length - 1], false)\n return coordList.toCoordinateArray()\n }\n static densify(geom, distanceTolerance) {\n const densifier = new Densifier(geom)\n densifier.setDistanceTolerance(distanceTolerance)\n return densifier.getResultGeometry()\n }\n getResultGeometry() {\n return new DensifyTransformer(this._distanceTolerance).transform(this._inputGeom)\n }\n setDistanceTolerance(distanceTolerance) {\n if (distanceTolerance <= 0.0) throw new IllegalArgumentException('Tolerance must be positive')\n this._distanceTolerance = distanceTolerance\n }\n}\nclass DensifyTransformer extends GeometryTransformer {\n constructor() {\n super()\n DensifyTransformer.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this.distanceTolerance = null\n const distanceTolerance = arguments[0]\n this.distanceTolerance = distanceTolerance\n }\n transformMultiPolygon(geom, parent) {\n const roughGeom = super.transformMultiPolygon.call(this, geom, parent)\n return this.createValidArea(roughGeom)\n }\n transformPolygon(geom, parent) {\n const roughGeom = super.transformPolygon.call(this, geom, parent)\n if (parent instanceof MultiPolygon) \n return roughGeom\n \n return this.createValidArea(roughGeom)\n }\n transformCoordinates(coords, parent) {\n const inputPts = coords.toCoordinateArray()\n let newPts = Densifier.densifyPoints(inputPts, this.distanceTolerance, parent.getPrecisionModel())\n if (parent instanceof LineString && newPts.length === 1) \n newPts = new Array(0).fill(null)\n \n return this._factory.getCoordinateSequenceFactory().create(newPts)\n }\n createValidArea(roughAreaGeom) {\n return roughAreaGeom.buffer(0.0)\n }\n}\nDensifier.DensifyTransformer = DensifyTransformer\n","import Coordinate from '../geom/Coordinate'\nimport IllegalArgumentException from '../../../../java/lang/IllegalArgumentException'\nexport default class Quadrant {\n static isNorthern(quad) {\n return quad === Quadrant.NE || quad === Quadrant.NW\n }\n static isOpposite(quad1, quad2) {\n if (quad1 === quad2) return false\n const diff = (quad1 - quad2 + 4) % 4\n if (diff === 2) return true\n return false\n }\n static commonHalfPlane(quad1, quad2) {\n if (quad1 === quad2) return quad1\n const diff = (quad1 - quad2 + 4) % 4\n if (diff === 2) return -1\n const min = quad1 < quad2 ? quad1 : quad2\n const max = quad1 > quad2 ? quad1 : quad2\n if (min === 0 && max === 3) return 3\n return min\n }\n static isInHalfPlane(quad, halfPlane) {\n if (halfPlane === Quadrant.SE) \n return quad === Quadrant.SE || quad === Quadrant.SW\n \n return quad === halfPlane || quad === halfPlane + 1\n }\n static quadrant() {\n if (typeof arguments[0] === 'number' && typeof arguments[1] === 'number') {\n const dx = arguments[0], dy = arguments[1]\n if (dx === 0.0 && dy === 0.0) throw new IllegalArgumentException('Cannot compute the quadrant for point ( ' + dx + ', ' + dy + ' )')\n if (dx >= 0.0) \n if (dy >= 0.0) return Quadrant.NE; else return Quadrant.SE\n else \n if (dy >= 0.0) return Quadrant.NW; else return Quadrant.SW\n \n } else if (arguments[0] instanceof Coordinate && arguments[1] instanceof Coordinate) {\n const p0 = arguments[0], p1 = arguments[1]\n if (p1.x === p0.x && p1.y === p0.y) throw new IllegalArgumentException('Cannot compute the quadrant for two identical points ' + p0)\n if (p1.x >= p0.x) \n if (p1.y >= p0.y) return Quadrant.NE; else return Quadrant.SE\n else \n if (p1.y >= p0.y) return Quadrant.NW; else return Quadrant.SW\n \n }\n }\n}\nQuadrant.NE = 0\nQuadrant.NW = 1\nQuadrant.SW = 2\nQuadrant.SE = 3\n","import WKTWriter from '../io/WKTWriter'\nimport Coordinate from '../geom/Coordinate'\nimport Orientation from '../algorithm/Orientation'\nimport Quadrant from '../geomgraph/Quadrant'\nimport Assert from '../util/Assert'\nimport StringBuilder from '../../../../java/lang/StringBuilder'\nexport default class HalfEdge {\n constructor() {\n HalfEdge.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._orig = null\n this._sym = null\n this._next = null\n const orig = arguments[0]\n this._orig = orig\n }\n static create(p0, p1) {\n const e0 = new HalfEdge(p0)\n const e1 = new HalfEdge(p1)\n e0.link(e1)\n return e0\n }\n find(dest) {\n let oNext = this\n do {\n if (oNext === null) return null\n if (oNext.dest().equals2D(dest)) return oNext\n oNext = oNext.oNext()\n } while (oNext !== this)\n return null\n }\n dest() {\n return this._sym._orig\n }\n isEdgesSorted() {\n const lowest = this.findLowest()\n let e = lowest\n do {\n const eNext = e.oNext()\n if (eNext === lowest) break\n const isSorted = eNext.compareTo(e) > 0\n if (!isSorted) \n return false\n \n e = eNext\n } while (e !== lowest)\n return true\n }\n oNext() {\n return this._sym._next\n }\n directionY() {\n return this.directionPt().getY() - this._orig.getY()\n }\n insert(eAdd) {\n if (this.oNext() === this) {\n this.insertAfter(eAdd)\n return null\n }\n const ePrev = this.insertionEdge(eAdd)\n ePrev.insertAfter(eAdd)\n }\n insertAfter(e) {\n Assert.equals(this._orig, e.orig())\n const save = this.oNext()\n this._sym.setNext(e)\n e.sym().setNext(save)\n }\n degree() {\n let degree = 0\n let e = this\n do {\n degree++\n e = e.oNext()\n } while (e !== this)\n return degree\n }\n equals() {\n if (arguments.length === 2 && (arguments[1] instanceof Coordinate && arguments[0] instanceof Coordinate)) {\n const p0 = arguments[0], p1 = arguments[1]\n return this._orig.equals2D(p0) && this._sym._orig.equals(p1)\n }\n }\n findLowest() {\n let lowest = this\n let e = this.oNext()\n do {\n if (e.compareTo(lowest) < 0) lowest = e\n e = e.oNext()\n } while (e !== this)\n return lowest\n }\n directionPt() {\n return this.dest()\n }\n sym() {\n return this._sym\n }\n prev() {\n return this._sym.next()._sym\n }\n compareAngularDirection(e) {\n const dx = this.directionX()\n const dy = this.directionY()\n const dx2 = e.directionX()\n const dy2 = e.directionY()\n if (dx === dx2 && dy === dy2) return 0\n const quadrant = Quadrant.quadrant(dx, dy)\n const quadrant2 = Quadrant.quadrant(dx2, dy2)\n if (quadrant > quadrant2) return 1\n if (quadrant < quadrant2) return -1\n const dir1 = this.directionPt()\n const dir2 = e.directionPt()\n return Orientation.index(e._orig, dir2, dir1)\n }\n prevNode() {\n let e = this\n while (e.degree() === 2) {\n e = e.prev()\n if (e === this) return null\n }\n return e\n }\n directionX() {\n return this.directionPt().getX() - this._orig.getX()\n }\n insertionEdge(eAdd) {\n let ePrev = this\n do {\n const eNext = ePrev.oNext()\n if (eNext.compareTo(ePrev) > 0 && eAdd.compareTo(ePrev) >= 0 && eAdd.compareTo(eNext) <= 0) \n return ePrev\n \n if (eNext.compareTo(ePrev) <= 0 && (eAdd.compareTo(eNext) <= 0 || eAdd.compareTo(ePrev) >= 0)) \n return ePrev\n \n ePrev = eNext\n } while (ePrev !== this)\n Assert.shouldNeverReachHere()\n return null\n }\n compareTo(obj) {\n const e = obj\n const comp = this.compareAngularDirection(e)\n return comp\n }\n toStringNode() {\n const orig = this.orig()\n const dest = this.dest()\n const sb = new StringBuilder()\n sb.append('Node( ' + WKTWriter.format(orig) + ' )' + '\\n')\n let e = this\n do {\n sb.append(' -> ' + e)\n sb.append('\\n')\n e = e.oNext()\n } while (e !== this)\n return sb.toString()\n }\n link(sym) {\n this.setSym(sym)\n sym.setSym(this)\n this.setNext(sym)\n sym.setNext(this)\n }\n next() {\n return this._next\n }\n setSym(e) {\n this._sym = e\n }\n orig() {\n return this._orig\n }\n toString() {\n return 'HE(' + this._orig.x + ' ' + this._orig.y + ', ' + this._sym._orig.x + ' ' + this._sym._orig.y + ')'\n }\n toStringNodeEdge() {\n return ' -> (' + WKTWriter.format(this.dest())\n }\n setNext(e) {\n this._next = e\n }\n}\n","import HalfEdge from './HalfEdge'\nexport default class MarkHalfEdge extends HalfEdge {\n constructor() {\n super()\n MarkHalfEdge.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._isMarked = false\n const orig = arguments[0]\n HalfEdge.constructor_.call(this, orig)\n }\n static setMarkBoth(e, isMarked) {\n e.setMark(isMarked)\n e.sym().setMark(isMarked)\n }\n static isMarked(e) {\n return e.isMarked()\n }\n static setMark(e, isMarked) {\n e.setMark(isMarked)\n }\n static markBoth(e) {\n e.mark()\n e.sym().mark()\n }\n static mark(e) {\n e.mark()\n }\n mark() {\n this._isMarked = true\n }\n setMark(isMarked) {\n this._isMarked = isMarked\n }\n isMarked() {\n return this._isMarked\n }\n}\n","import HashMap from '../../../../java/util/HashMap'\nimport HalfEdge from './HalfEdge'\nexport default class EdgeGraph {\n constructor() {\n EdgeGraph.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._vertexMap = new HashMap()\n }\n static isValidEdge(orig, dest) {\n const cmp = dest.compareTo(orig)\n return cmp !== 0\n }\n insert(orig, dest, eAdj) {\n const e = this.create(orig, dest)\n if (eAdj !== null) \n eAdj.insert(e)\n else \n this._vertexMap.put(orig, e)\n \n const eAdjDest = this._vertexMap.get(dest)\n if (eAdjDest !== null) \n eAdjDest.insert(e.sym())\n else \n this._vertexMap.put(dest, e.sym())\n \n return e\n }\n create(p0, p1) {\n const e0 = this.createEdge(p0)\n const e1 = this.createEdge(p1)\n e0.link(e1)\n return e0\n }\n createEdge(orig) {\n return new HalfEdge(orig)\n }\n addEdge(orig, dest) {\n if (!EdgeGraph.isValidEdge(orig, dest)) return null\n const eAdj = this._vertexMap.get(orig)\n let eSame = null\n if (eAdj !== null) \n eSame = eAdj.find(dest)\n \n if (eSame !== null) \n return eSame\n \n const e = this.insert(orig, dest, eAdj)\n return e\n }\n getVertexEdges() {\n return this._vertexMap.values()\n }\n findEdge(orig, dest) {\n const e = this._vertexMap.get(orig)\n if (e === null) return null\n return e.find(dest)\n }\n}\n","import MarkHalfEdge from '../edgegraph/MarkHalfEdge'\nexport default class DissolveHalfEdge extends MarkHalfEdge {\n constructor() {\n super()\n DissolveHalfEdge.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._isStart = false\n const orig = arguments[0]\n MarkHalfEdge.constructor_.call(this, orig)\n }\n setStart() {\n this._isStart = true\n }\n isStart() {\n return this._isStart\n }\n}\n","import EdgeGraph from '../edgegraph/EdgeGraph'\nimport DissolveHalfEdge from './DissolveHalfEdge'\nexport default class DissolveEdgeGraph extends EdgeGraph {\n constructor() {\n super()\n }\n createEdge(p0) {\n return new DissolveHalfEdge(p0)\n }\n}\n","import LineString from '../geom/LineString'\nimport CoordinateList from '../geom/CoordinateList'\nimport Geometry from '../geom/Geometry'\nimport hasInterface from '../../../../hasInterface'\nimport Collection from '../../../../java/util/Collection'\nimport Stack from '../../../../java/util/Stack'\nimport MarkHalfEdge from '../edgegraph/MarkHalfEdge'\nimport DissolveEdgeGraph from './DissolveEdgeGraph'\nimport GeometryComponentFilter from '../geom/GeometryComponentFilter'\nimport ArrayList from '../../../../java/util/ArrayList'\nexport default class LineDissolver {\n constructor() {\n LineDissolver.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._result = null\n this._factory = null\n this._graph = null\n this._lines = new ArrayList()\n this._nodeEdgeStack = new Stack()\n this._ringStartEdge = null\n this._graph = new DissolveEdgeGraph()\n }\n static dissolve(g) {\n const d = new LineDissolver()\n d.add(g)\n return d.getResult()\n }\n addLine(line) {\n this._lines.add(this._factory.createLineString(line.toCoordinateArray()))\n }\n updateRingStartEdge(e) {\n if (!e.isStart()) {\n e = e.sym()\n if (!e.isStart()) return null\n }\n if (this._ringStartEdge === null) {\n this._ringStartEdge = e\n return null\n }\n if (e.orig().compareTo(this._ringStartEdge.orig()) < 0) \n this._ringStartEdge = e\n \n }\n getResult() {\n if (this._result === null) this.computeResult()\n return this._result\n }\n process(e) {\n let eNode = e.prevNode()\n if (eNode === null) eNode = e\n this.stackEdges(eNode)\n this.buildLines()\n }\n buildRing(eStartRing) {\n const line = new CoordinateList()\n let e = eStartRing\n line.add(e.orig().copy(), false)\n while (e.sym().degree() === 2) {\n const eNext = e.next()\n if (eNext === eStartRing) break\n line.add(eNext.orig().copy(), false)\n e = eNext\n }\n line.add(e.dest().copy(), false)\n this.addLine(line)\n }\n buildLine(eStart) {\n const line = new CoordinateList()\n let e = eStart\n this._ringStartEdge = null\n MarkHalfEdge.markBoth(e)\n line.add(e.orig().copy(), false)\n while (e.sym().degree() === 2) {\n this.updateRingStartEdge(e)\n const eNext = e.next()\n if (eNext === eStart) {\n this.buildRing(this._ringStartEdge)\n return null\n }\n line.add(eNext.orig().copy(), false)\n e = eNext\n MarkHalfEdge.markBoth(e)\n }\n line.add(e.dest().clone(), false)\n this.stackEdges(e.sym())\n this.addLine(line)\n }\n stackEdges(node) {\n let e = node\n do {\n if (!MarkHalfEdge.isMarked(e)) this._nodeEdgeStack.add(e)\n e = e.oNext()\n } while (e !== node)\n }\n computeResult() {\n const edges = this._graph.getVertexEdges()\n for (let i = edges.iterator(); i.hasNext(); ) {\n const e = i.next()\n if (MarkHalfEdge.isMarked(e)) continue\n this.process(e)\n }\n this._result = this._factory.buildGeometry(this._lines)\n }\n buildLines() {\n while (!this._nodeEdgeStack.empty()) {\n const e = this._nodeEdgeStack.pop()\n if (MarkHalfEdge.isMarked(e)) continue\n this.buildLine(e)\n }\n }\n add() {\n if (arguments[0] instanceof Geometry) {\n const geometry = arguments[0]\n geometry.apply(new (class {\n get interfaces_() {\n return [GeometryComponentFilter]\n }\n filter(component) {\n if (component instanceof LineString) \n this.add(component)\n \n }\n })())\n } else if (hasInterface(arguments[0], Collection)) {\n const geometries = arguments[0]\n for (let i = geometries.iterator(); i.hasNext(); ) {\n const geometry = i.next()\n this.add(geometry)\n }\n } else if (arguments[0] instanceof LineString) {\n const lineString = arguments[0]\n if (this._factory === null) \n this._factory = lineString.getFactory()\n \n const seq = lineString.getCoordinateSequence()\n let doneStart = false\n for (let i = 1; i < seq.size(); i++) {\n const e = this._graph.addEdge(seq.getCoordinate(i - 1), seq.getCoordinate(i))\n if (e === null) continue\n if (!doneStart) {\n e.setStart()\n doneStart = true\n }\n }\n }\n }\n}\n","export default class Position {\n static opposite(position) {\n if (position === Position.LEFT) return Position.RIGHT\n if (position === Position.RIGHT) return Position.LEFT\n return position\n }\n}\nPosition.ON = 0\nPosition.LEFT = 1\nPosition.RIGHT = 2\n","export default class MonotoneChain {\n constructor() {\n MonotoneChain.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this.mce = null\n this.chainIndex = null\n const mce = arguments[0], chainIndex = arguments[1]\n this.mce = mce\n this.chainIndex = chainIndex\n }\n computeIntersections(mc, si) {\n this.mce.computeIntersectsForChain(this.chainIndex, mc.mce, mc.chainIndex, si)\n }\n}\n","import Comparable from '../../../../../java/lang/Comparable'\nexport default class SweepLineEvent {\n constructor() {\n SweepLineEvent.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._label = null\n this._xValue = null\n this._eventType = null\n this._insertEvent = null\n this._deleteEventIndex = null\n this._obj = null\n if (arguments.length === 2) {\n const x = arguments[0], insertEvent = arguments[1]\n this._eventType = SweepLineEvent.DELETE\n this._xValue = x\n this._insertEvent = insertEvent\n } else if (arguments.length === 3) {\n const label = arguments[0], x = arguments[1], obj = arguments[2]\n this._eventType = SweepLineEvent.INSERT\n this._label = label\n this._xValue = x\n this._obj = obj\n }\n }\n isDelete() {\n return this._eventType === SweepLineEvent.DELETE\n }\n setDeleteEventIndex(deleteEventIndex) {\n this._deleteEventIndex = deleteEventIndex\n }\n getObject() {\n return this._obj\n }\n compareTo(o) {\n const pe = o\n if (this._xValue < pe._xValue) return -1\n if (this._xValue > pe._xValue) return 1\n if (this._eventType < pe._eventType) return -1\n if (this._eventType > pe._eventType) return 1\n return 0\n }\n getInsertEvent() {\n return this._insertEvent\n }\n isInsert() {\n return this._eventType === SweepLineEvent.INSERT\n }\n isSameLabel(ev) {\n if (this._label === null) return false\n return this._label === ev._label\n }\n getDeleteEventIndex() {\n return this._deleteEventIndex\n }\n get interfaces_() {\n return [Comparable]\n }\n}\nSweepLineEvent.INSERT = 1\nSweepLineEvent.DELETE = 2\n","export default class EdgeSetIntersector {}\n","export default class SegmentIntersector {\n constructor() {\n SegmentIntersector.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._hasIntersection = false\n this._hasProper = false\n this._hasProperInterior = false\n this._properIntersectionPoint = null\n this._li = null\n this._includeProper = null\n this._recordIsolated = null\n this._isSelfIntersection = null\n this._numIntersections = 0\n this.numTests = 0\n this._bdyNodes = null\n this._isDone = false\n this._isDoneWhenProperInt = false\n const li = arguments[0], includeProper = arguments[1], recordIsolated = arguments[2]\n this._li = li\n this._includeProper = includeProper\n this._recordIsolated = recordIsolated\n }\n static isAdjacentSegments(i1, i2) {\n return Math.abs(i1 - i2) === 1\n }\n isTrivialIntersection(e0, segIndex0, e1, segIndex1) {\n if (e0 === e1) \n if (this._li.getIntersectionNum() === 1) {\n if (SegmentIntersector.isAdjacentSegments(segIndex0, segIndex1)) return true\n if (e0.isClosed()) {\n const maxSegIndex = e0.getNumPoints() - 1\n if (segIndex0 === 0 && segIndex1 === maxSegIndex || segIndex1 === 0 && segIndex0 === maxSegIndex) \n return true\n \n }\n }\n \n return false\n }\n getProperIntersectionPoint() {\n return this._properIntersectionPoint\n }\n setIsDoneIfProperInt(isDoneWhenProperInt) {\n this._isDoneWhenProperInt = isDoneWhenProperInt\n }\n hasProperInteriorIntersection() {\n return this._hasProperInterior\n }\n isBoundaryPointInternal(li, bdyNodes) {\n for (let i = bdyNodes.iterator(); i.hasNext(); ) {\n const node = i.next()\n const pt = node.getCoordinate()\n if (li.isIntersection(pt)) return true\n }\n return false\n }\n hasProperIntersection() {\n return this._hasProper\n }\n hasIntersection() {\n return this._hasIntersection\n }\n isDone() {\n return this._isDone\n }\n isBoundaryPoint(li, bdyNodes) {\n if (bdyNodes === null) return false\n if (this.isBoundaryPointInternal(li, bdyNodes[0])) return true\n if (this.isBoundaryPointInternal(li, bdyNodes[1])) return true\n return false\n }\n setBoundaryNodes(bdyNodes0, bdyNodes1) {\n this._bdyNodes = new Array(2).fill(null)\n this._bdyNodes[0] = bdyNodes0\n this._bdyNodes[1] = bdyNodes1\n }\n addIntersections(e0, segIndex0, e1, segIndex1) {\n if (e0 === e1 && segIndex0 === segIndex1) return null\n this.numTests++\n const p00 = e0.getCoordinates()[segIndex0]\n const p01 = e0.getCoordinates()[segIndex0 + 1]\n const p10 = e1.getCoordinates()[segIndex1]\n const p11 = e1.getCoordinates()[segIndex1 + 1]\n this._li.computeIntersection(p00, p01, p10, p11)\n if (this._li.hasIntersection()) {\n if (this._recordIsolated) {\n e0.setIsolated(false)\n e1.setIsolated(false)\n }\n this._numIntersections++\n if (!this.isTrivialIntersection(e0, segIndex0, e1, segIndex1)) {\n this._hasIntersection = true\n if (this._includeProper || !this._li.isProper()) {\n e0.addIntersections(this._li, segIndex0, 0)\n e1.addIntersections(this._li, segIndex1, 1)\n }\n if (this._li.isProper()) {\n this._properIntersectionPoint = this._li.getIntersection(0).copy()\n this._hasProper = true\n if (this._isDoneWhenProperInt) \n this._isDone = true\n \n if (!this.isBoundaryPoint(this._li, this._bdyNodes)) this._hasProperInterior = true\n }\n }\n }\n }\n}\n","import hasInterface from '../../../../../hasInterface'\nimport MonotoneChain from './MonotoneChain'\nimport SweepLineEvent from './SweepLineEvent'\nimport EdgeSetIntersector from './EdgeSetIntersector'\nimport Collections from '../../../../../java/util/Collections'\nimport SegmentIntersector from './SegmentIntersector'\nimport ArrayList from '../../../../../java/util/ArrayList'\nimport List from '../../../../../java/util/List'\nexport default class SimpleMCSweepLineIntersector extends EdgeSetIntersector {\n constructor() {\n super()\n SimpleMCSweepLineIntersector.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this.events = new ArrayList()\n this.nOverlaps = null\n }\n prepareEvents() {\n Collections.sort(this.events)\n for (let i = 0; i < this.events.size(); i++) {\n const ev = this.events.get(i)\n if (ev.isDelete()) \n ev.getInsertEvent().setDeleteEventIndex(i)\n \n }\n }\n computeIntersections() {\n if (arguments.length === 1) {\n const si = arguments[0]\n this.nOverlaps = 0\n this.prepareEvents()\n for (let i = 0; i < this.events.size(); i++) {\n const ev = this.events.get(i)\n if (ev.isInsert()) \n this.processOverlaps(i, ev.getDeleteEventIndex(), ev, si)\n \n if (si.isDone()) \n break\n \n }\n } else if (arguments.length === 3) {\n if (arguments[2] instanceof SegmentIntersector && (hasInterface(arguments[0], List) && hasInterface(arguments[1], List))) {\n const edges0 = arguments[0], edges1 = arguments[1], si = arguments[2]\n this.addEdges(edges0, edges0)\n this.addEdges(edges1, edges1)\n this.computeIntersections(si)\n } else if (typeof arguments[2] === 'boolean' && (hasInterface(arguments[0], List) && arguments[1] instanceof SegmentIntersector)) {\n const edges = arguments[0], si = arguments[1], testAllSegments = arguments[2]\n if (testAllSegments) this.addEdges(edges, null); else this.addEdges(edges)\n this.computeIntersections(si)\n }\n }\n }\n addEdge(edge, edgeSet) {\n const mce = edge.getMonotoneChainEdge()\n const startIndex = mce.getStartIndexes()\n for (let i = 0; i < startIndex.length - 1; i++) {\n const mc = new MonotoneChain(mce, i)\n const insertEvent = new SweepLineEvent(edgeSet, mce.getMinX(i), mc)\n this.events.add(insertEvent)\n this.events.add(new SweepLineEvent(mce.getMaxX(i), insertEvent))\n }\n }\n processOverlaps(start, end, ev0, si) {\n const mc0 = ev0.getObject()\n for (let i = start; i < end; i++) {\n const ev1 = this.events.get(i)\n if (ev1.isInsert()) {\n const mc1 = ev1.getObject()\n if (!ev0.isSameLabel(ev1)) {\n mc0.computeIntersections(mc1, si)\n this.nOverlaps++\n }\n }\n }\n }\n addEdges() {\n if (arguments.length === 1) {\n const edges = arguments[0]\n for (let i = edges.iterator(); i.hasNext(); ) {\n const edge = i.next()\n this.addEdge(edge, edge)\n }\n } else if (arguments.length === 2) {\n const edges = arguments[0], edgeSet = arguments[1]\n for (let i = edges.iterator(); i.hasNext(); ) {\n const edge = i.next()\n this.addEdge(edge, edgeSet)\n }\n }\n }\n}\n","import StringBuffer from '../../../../java/lang/StringBuffer'\nimport Location from '../geom/Location'\nimport Position from './Position'\nexport default class TopologyLocation {\n constructor() {\n TopologyLocation.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this.location = null\n if (arguments.length === 1) {\n if (arguments[0] instanceof Array) {\n const location = arguments[0]\n this.init(location.length)\n } else if (Number.isInteger(arguments[0])) {\n const on = arguments[0]\n this.init(1)\n this.location[Position.ON] = on\n } else if (arguments[0] instanceof TopologyLocation) {\n const gl = arguments[0]\n this.init(gl.location.length)\n if (gl !== null) \n for (let i = 0; i < this.location.length; i++) \n this.location[i] = gl.location[i]\n \n \n }\n } else if (arguments.length === 3) {\n const on = arguments[0], left = arguments[1], right = arguments[2]\n this.init(3)\n this.location[Position.ON] = on\n this.location[Position.LEFT] = left\n this.location[Position.RIGHT] = right\n }\n }\n setAllLocations(locValue) {\n for (let i = 0; i < this.location.length; i++) \n this.location[i] = locValue\n \n }\n isNull() {\n for (let i = 0; i < this.location.length; i++) \n if (this.location[i] !== Location.NONE) return false\n \n return true\n }\n setAllLocationsIfNull(locValue) {\n for (let i = 0; i < this.location.length; i++) \n if (this.location[i] === Location.NONE) this.location[i] = locValue\n \n }\n isLine() {\n return this.location.length === 1\n }\n merge(gl) {\n if (gl.location.length > this.location.length) {\n const newLoc = new Array(3).fill(null)\n newLoc[Position.ON] = this.location[Position.ON]\n newLoc[Position.LEFT] = Location.NONE\n newLoc[Position.RIGHT] = Location.NONE\n this.location = newLoc\n }\n for (let i = 0; i < this.location.length; i++) \n if (this.location[i] === Location.NONE && i < gl.location.length) this.location[i] = gl.location[i]\n \n }\n getLocations() {\n return this.location\n }\n flip() {\n if (this.location.length <= 1) return null\n const temp = this.location[Position.LEFT]\n this.location[Position.LEFT] = this.location[Position.RIGHT]\n this.location[Position.RIGHT] = temp\n }\n toString() {\n const buf = new StringBuffer()\n if (this.location.length > 1) buf.append(Location.toLocationSymbol(this.location[Position.LEFT]))\n buf.append(Location.toLocationSymbol(this.location[Position.ON]))\n if (this.location.length > 1) buf.append(Location.toLocationSymbol(this.location[Position.RIGHT]))\n return buf.toString()\n }\n setLocations(on, left, right) {\n this.location[Position.ON] = on\n this.location[Position.LEFT] = left\n this.location[Position.RIGHT] = right\n }\n get(posIndex) {\n if (posIndex < this.location.length) return this.location[posIndex]\n return Location.NONE\n }\n isArea() {\n return this.location.length > 1\n }\n isAnyNull() {\n for (let i = 0; i < this.location.length; i++) \n if (this.location[i] === Location.NONE) return true\n \n return false\n }\n setLocation() {\n if (arguments.length === 1) {\n const locValue = arguments[0]\n this.setLocation(Position.ON, locValue)\n } else if (arguments.length === 2) {\n const locIndex = arguments[0], locValue = arguments[1]\n this.location[locIndex] = locValue\n }\n }\n init(size) {\n this.location = new Array(size).fill(null)\n this.setAllLocations(Location.NONE)\n }\n isEqualOnSide(le, locIndex) {\n return this.location[locIndex] === le.location[locIndex]\n }\n allPositionsEqual(loc) {\n for (let i = 0; i < this.location.length; i++) \n if (this.location[i] !== loc) return false\n \n return true\n }\n}\n","import StringBuffer from '../../../../java/lang/StringBuffer'\nimport Location from '../geom/Location'\nimport Position from './Position'\nimport TopologyLocation from './TopologyLocation'\nexport default class Label {\n constructor() {\n Label.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this.elt = new Array(2).fill(null)\n if (arguments.length === 1) {\n if (Number.isInteger(arguments[0])) {\n const onLoc = arguments[0]\n this.elt[0] = new TopologyLocation(onLoc)\n this.elt[1] = new TopologyLocation(onLoc)\n } else if (arguments[0] instanceof Label) {\n const lbl = arguments[0]\n this.elt[0] = new TopologyLocation(lbl.elt[0])\n this.elt[1] = new TopologyLocation(lbl.elt[1])\n }\n } else if (arguments.length === 2) {\n const geomIndex = arguments[0], onLoc = arguments[1]\n this.elt[0] = new TopologyLocation(Location.NONE)\n this.elt[1] = new TopologyLocation(Location.NONE)\n this.elt[geomIndex].setLocation(onLoc)\n } else if (arguments.length === 3) {\n const onLoc = arguments[0], leftLoc = arguments[1], rightLoc = arguments[2]\n this.elt[0] = new TopologyLocation(onLoc, leftLoc, rightLoc)\n this.elt[1] = new TopologyLocation(onLoc, leftLoc, rightLoc)\n } else if (arguments.length === 4) {\n const geomIndex = arguments[0], onLoc = arguments[1], leftLoc = arguments[2], rightLoc = arguments[3]\n this.elt[0] = new TopologyLocation(Location.NONE, Location.NONE, Location.NONE)\n this.elt[1] = new TopologyLocation(Location.NONE, Location.NONE, Location.NONE)\n this.elt[geomIndex].setLocations(onLoc, leftLoc, rightLoc)\n }\n }\n static toLineLabel(label) {\n const lineLabel = new Label(Location.NONE)\n for (let i = 0; i < 2; i++) \n lineLabel.setLocation(i, label.getLocation(i))\n \n return lineLabel\n }\n getGeometryCount() {\n let count = 0\n if (!this.elt[0].isNull()) count++\n if (!this.elt[1].isNull()) count++\n return count\n }\n setAllLocations(geomIndex, location) {\n this.elt[geomIndex].setAllLocations(location)\n }\n isNull(geomIndex) {\n return this.elt[geomIndex].isNull()\n }\n setAllLocationsIfNull() {\n if (arguments.length === 1) {\n const location = arguments[0]\n this.setAllLocationsIfNull(0, location)\n this.setAllLocationsIfNull(1, location)\n } else if (arguments.length === 2) {\n const geomIndex = arguments[0], location = arguments[1]\n this.elt[geomIndex].setAllLocationsIfNull(location)\n }\n }\n isLine(geomIndex) {\n return this.elt[geomIndex].isLine()\n }\n merge(lbl) {\n for (let i = 0; i < 2; i++) \n if (this.elt[i] === null && lbl.elt[i] !== null) \n this.elt[i] = new TopologyLocation(lbl.elt[i])\n else \n this.elt[i].merge(lbl.elt[i])\n \n \n }\n flip() {\n this.elt[0].flip()\n this.elt[1].flip()\n }\n getLocation() {\n if (arguments.length === 1) {\n const geomIndex = arguments[0]\n return this.elt[geomIndex].get(Position.ON)\n } else if (arguments.length === 2) {\n const geomIndex = arguments[0], posIndex = arguments[1]\n return this.elt[geomIndex].get(posIndex)\n }\n }\n toString() {\n const buf = new StringBuffer()\n if (this.elt[0] !== null) {\n buf.append('A:')\n buf.append(this.elt[0].toString())\n }\n if (this.elt[1] !== null) {\n buf.append(' B:')\n buf.append(this.elt[1].toString())\n }\n return buf.toString()\n }\n isArea() {\n if (arguments.length === 0) {\n return this.elt[0].isArea() || this.elt[1].isArea()\n } else if (arguments.length === 1) {\n const geomIndex = arguments[0]\n return this.elt[geomIndex].isArea()\n }\n }\n isAnyNull(geomIndex) {\n return this.elt[geomIndex].isAnyNull()\n }\n setLocation() {\n if (arguments.length === 2) {\n const geomIndex = arguments[0], location = arguments[1]\n this.elt[geomIndex].setLocation(Position.ON, location)\n } else if (arguments.length === 3) {\n const geomIndex = arguments[0], posIndex = arguments[1], location = arguments[2]\n this.elt[geomIndex].setLocation(posIndex, location)\n }\n }\n isEqualOnSide(lbl, side) {\n return this.elt[0].isEqualOnSide(lbl.elt[0], side) && this.elt[1].isEqualOnSide(lbl.elt[1], side)\n }\n allPositionsEqual(geomIndex, loc) {\n return this.elt[geomIndex].allPositionsEqual(loc)\n }\n toLine(geomIndex) {\n if (this.elt[geomIndex].isArea()) this.elt[geomIndex] = new TopologyLocation(this.elt[geomIndex].location[0])\n }\n}\n","import Coordinate from '../geom/Coordinate'\nimport Comparable from '../../../../java/lang/Comparable'\nexport default class EdgeIntersection {\n constructor() {\n EdgeIntersection.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this.coord = null\n this.segmentIndex = null\n this.dist = null\n const coord = arguments[0], segmentIndex = arguments[1], dist = arguments[2]\n this.coord = new Coordinate(coord)\n this.segmentIndex = segmentIndex\n this.dist = dist\n }\n getSegmentIndex() {\n return this.segmentIndex\n }\n getCoordinate() {\n return this.coord\n }\n print(out) {\n out.print(this.coord)\n out.print(' seg # = ' + this.segmentIndex)\n out.println(' dist = ' + this.dist)\n }\n compareTo(obj) {\n const other = obj\n return this.compare(other.segmentIndex, other.dist)\n }\n isEndPoint(maxSegmentIndex) {\n if (this.segmentIndex === 0 && this.dist === 0.0) return true\n if (this.segmentIndex === maxSegmentIndex) return true\n return false\n }\n toString() {\n return this.coord + ' seg # = ' + this.segmentIndex + ' dist = ' + this.dist\n }\n getDistance() {\n return this.dist\n }\n compare(segmentIndex, dist) {\n if (this.segmentIndex < segmentIndex) return -1\n if (this.segmentIndex > segmentIndex) return 1\n if (this.dist < dist) return -1\n if (this.dist > dist) return 1\n return 0\n }\n get interfaces_() {\n return [Comparable]\n }\n}\n","import Map from './Map'\n\n/**\n * @see http://download.oracle.com/javase/6/docs/api/java/util/SortedMap.html\n */\nexport default class SortedMap extends Map {}\n","import ArrayList from './ArrayList'\nimport SortedMap from './SortedMap'\nimport HashSet from './HashSet'\n\nconst BLACK = 0\nconst RED = 1\n\nfunction colorOf(p) {\n return (p == null ? BLACK : p.color)\n}\nfunction parentOf(p) {\n return (p == null ? null : p.parent)\n}\nfunction setColor(p, c) {\n if (p !== null) p.color = c\n}\nfunction leftOf(p) {\n return (p == null ? null : p.left)\n}\nfunction rightOf(p) {\n return (p == null ? null : p.right)\n}\n\n/**\n * @see http://download.oracle.com/javase/6/docs/api/java/util/TreeMap.html\n */\nexport default class TreeMap extends SortedMap {\n constructor() {\n super()\n this.root_ = null\n this.size_ = 0\n }\n\n get(key) {\n let p = this.root_\n while (p !== null) {\n const cmp = key.compareTo(p.key)\n if (cmp < 0)\n p = p.left\n else if (cmp > 0)\n p = p.right\n else return p.value\n }\n return null\n }\n\n put(key, value) {\n if (this.root_ === null) {\n this.root_ = {\n key: key,\n value: value,\n left: null,\n right: null,\n parent: null,\n color: BLACK,\n getValue() {\n return this.value\n },\n getKey() {\n return this.key\n }\n }\n this.size_ = 1\n return null\n }\n let t = this.root_; let parent; let cmp\n do {\n parent = t\n cmp = key.compareTo(t.key)\n if (cmp < 0) {\n t = t.left\n } else if (cmp > 0) {\n t = t.right\n } else {\n const oldValue = t.value\n t.value = value\n return oldValue\n }\n } while (t !== null)\n const e = {\n key: key,\n left: null,\n right: null,\n value: value,\n parent: parent,\n color: BLACK,\n getValue() {\n return this.value\n },\n getKey() {\n return this.key\n }\n }\n if (cmp < 0)\n parent.left = e\n else parent.right = e\n\n this.fixAfterInsertion(e)\n this.size_++\n return null\n }\n\n /**\n * @param {Object} x\n */\n fixAfterInsertion(x) {\n let y\n x.color = RED\n while (x != null && x !== this.root_ && x.parent.color === RED)\n if (parentOf(x) === leftOf(parentOf(parentOf(x)))) {\n y = rightOf(parentOf(parentOf(x)))\n if (colorOf(y) === RED) {\n setColor(parentOf(x), BLACK)\n setColor(y, BLACK)\n setColor(parentOf(parentOf(x)), RED)\n x = parentOf(parentOf(x))\n } else {\n if (x === rightOf(parentOf(x))) {\n x = parentOf(x)\n this.rotateLeft(x)\n }\n setColor(parentOf(x), BLACK)\n setColor(parentOf(parentOf(x)), RED)\n this.rotateRight(parentOf(parentOf(x)))\n }\n } else {\n y = leftOf(parentOf(parentOf(x)))\n if (colorOf(y) === RED) {\n setColor(parentOf(x), BLACK)\n setColor(y, BLACK)\n setColor(parentOf(parentOf(x)), RED)\n x = parentOf(parentOf(x))\n } else {\n if (x === leftOf(parentOf(x))) {\n x = parentOf(x)\n this.rotateRight(x)\n }\n setColor(parentOf(x), BLACK)\n setColor(parentOf(parentOf(x)), RED)\n this.rotateLeft(parentOf(parentOf(x)))\n }\n }\n\n this.root_.color = BLACK\n }\n\n values() {\n const arrayList = new ArrayList()\n let p = this.getFirstEntry()\n if (p !== null) {\n arrayList.add(p.value)\n while ((p = TreeMap.successor(p)) !== null)\n arrayList.add(p.value)\n }\n return arrayList\n }\n\n entrySet() {\n const hashSet = new HashSet()\n let p = this.getFirstEntry()\n if (p !== null) {\n hashSet.add(p)\n while ((p = TreeMap.successor(p)) !== null)\n hashSet.add(p)\n }\n return hashSet\n }\n\n /**\n * @param {Object} p\n */\n rotateLeft(p) {\n if (p != null) {\n const r = p.right\n p.right = r.left\n if (r.left != null)\n r.left.parent = p\n r.parent = p.parent\n if (p.parent == null)\n this.root_ = r\n else if (p.parent.left === p)\n p.parent.left = r\n else\n p.parent.right = r\n r.left = p\n p.parent = r\n }\n }\n\n /**\n * @param {Object} p\n */\n rotateRight(p) {\n if (p != null) {\n const l = p.left\n p.left = l.right\n if (l.right != null)\n l.right.parent = p\n l.parent = p.parent\n if (p.parent == null)\n this.root_ = l\n else if (p.parent.right === p)\n p.parent.right = l\n else\n p.parent.left = l\n l.right = p\n p.parent = l\n }\n }\n\n /**\n * @return {Object}\n */\n getFirstEntry() {\n let p = this.root_\n if (p != null)\n while (p.left != null) p = p.left\n return p\n }\n\n /**\n * @param {Object} t\n * @return {Object}\n * @private\n */\n static successor(t) {\n let p\n if (t === null) {\n return null\n } else if (t.right !== null) {\n p = t.right\n while (p.left !== null)\n p = p.left\n return p\n } else {\n p = t.parent\n let ch = t\n while (p !== null && ch === p.right) {\n ch = p\n p = p.parent\n }\n return p\n }\n }\n\n size() {\n return this.size_\n }\n\n containsKey(key) {\n let p = this.root_\n while (p !== null) {\n const cmp = key.compareTo(p.key)\n if (cmp < 0)\n p = p.left\n else if (cmp > 0)\n p = p.right\n else return true\n }\n return false\n }\n}\n","import EdgeIntersection from './EdgeIntersection'\nimport Coordinate from '../geom/Coordinate'\nimport Label from './Label'\nimport Edge from './Edge'\nimport TreeMap from '../../../../java/util/TreeMap'\nexport default class EdgeIntersectionList {\n constructor() {\n EdgeIntersectionList.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._nodeMap = new TreeMap()\n this.edge = null\n const edge = arguments[0]\n this.edge = edge\n }\n print(out) {\n out.println('Intersections:')\n for (let it = this.iterator(); it.hasNext(); ) {\n const ei = it.next()\n ei.print(out)\n }\n }\n iterator() {\n return this._nodeMap.values().iterator()\n }\n addSplitEdges(edgeList) {\n this.addEndpoints()\n const it = this.iterator()\n let eiPrev = it.next()\n while (it.hasNext()) {\n const ei = it.next()\n const newEdge = this.createSplitEdge(eiPrev, ei)\n edgeList.add(newEdge)\n eiPrev = ei\n }\n }\n addEndpoints() {\n const maxSegIndex = this.edge.pts.length - 1\n this.add(this.edge.pts[0], 0, 0.0)\n this.add(this.edge.pts[maxSegIndex], maxSegIndex, 0.0)\n }\n createSplitEdge(ei0, ei1) {\n let npts = ei1.segmentIndex - ei0.segmentIndex + 2\n const lastSegStartPt = this.edge.pts[ei1.segmentIndex]\n const useIntPt1 = ei1.dist > 0.0 || !ei1.coord.equals2D(lastSegStartPt)\n if (!useIntPt1) \n npts--\n \n const pts = new Array(npts).fill(null)\n let ipt = 0\n pts[ipt++] = new Coordinate(ei0.coord)\n for (let i = ei0.segmentIndex + 1; i <= ei1.segmentIndex; i++) \n pts[ipt++] = this.edge.pts[i]\n \n if (useIntPt1) pts[ipt] = ei1.coord\n return new Edge(pts, new Label(this.edge._label))\n }\n add(intPt, segmentIndex, dist) {\n const eiNew = new EdgeIntersection(intPt, segmentIndex, dist)\n const ei = this._nodeMap.get(eiNew)\n if (ei !== null) \n return ei\n \n this._nodeMap.put(eiNew, eiNew)\n return eiNew\n }\n isIntersection(pt) {\n for (let it = this.iterator(); it.hasNext(); ) {\n const ei = it.next()\n if (ei.coord.equals(pt)) return true\n }\n return false\n }\n}\n","import Arrays from '../../../../java/util/Arrays'\nimport System from '../../../../java/lang/System'\nexport default class IntArrayList {\n constructor() {\n IntArrayList.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._data = null\n this._size = 0\n if (arguments.length === 0) {\n IntArrayList.constructor_.call(this, 10)\n } else if (arguments.length === 1) {\n const initialCapacity = arguments[0]\n this._data = new Array(initialCapacity).fill(null)\n }\n }\n size() {\n return this._size\n }\n addAll(values) {\n if (values === null) return null\n if (values.length === 0) return null\n this.ensureCapacity(this._size + values.length)\n System.arraycopy(values, 0, this._data, this._size, values.length)\n this._size += values.length\n }\n ensureCapacity(capacity) {\n if (capacity <= this._data.length) return null\n const newLength = Math.max(capacity, this._data.length * 2)\n this._data = Arrays.copyOf(this._data, newLength)\n }\n toArray() {\n const array = new Array(this._size).fill(null)\n System.arraycopy(this._data, 0, array, 0, this._size)\n return array\n }\n add(value) {\n this.ensureCapacity(this._size + 1)\n this._data[this._size] = value\n ++ this._size\n }\n}\n","import IntArrayList from '../../util/IntArrayList'\nimport ArrayList from '../../../../../java/util/ArrayList'\nimport Quadrant from '../Quadrant'\nexport default class MonotoneChainIndexer {\n static toIntArray(list) {\n const array = new Array(list.size()).fill(null)\n for (let i = 0; i < array.length; i++) \n array[i] = list.get(i).intValue()\n \n return array\n }\n getChainStartIndices(pts) {\n let start = 0\n const startIndexList = new IntArrayList(Math.trunc(pts.length / 2))\n startIndexList.add(start)\n do {\n const last = this.findChainEnd(pts, start)\n startIndexList.add(last)\n start = last\n } while (start < pts.length - 1)\n return startIndexList.toArray()\n }\n findChainEnd(pts, start) {\n const chainQuad = Quadrant.quadrant(pts[start], pts[start + 1])\n let last = start + 1\n while (last < pts.length) {\n const quad = Quadrant.quadrant(pts[last - 1], pts[last])\n if (quad !== chainQuad) break\n last++\n }\n return last - 1\n }\n OLDgetChainStartIndices(pts) {\n let start = 0\n const startIndexList = new ArrayList()\n startIndexList.add(start)\n do {\n const last = this.findChainEnd(pts, start)\n startIndexList.add(last)\n start = last\n } while (start < pts.length - 1)\n const startIndex = MonotoneChainIndexer.toIntArray(startIndexList)\n return startIndex\n }\n}\n","import MonotoneChainIndexer from './MonotoneChainIndexer'\nimport Envelope from '../../geom/Envelope'\nexport default class MonotoneChainEdge {\n constructor() {\n MonotoneChainEdge.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this.e = null\n this.pts = null\n this.startIndex = null\n const e = arguments[0]\n this.e = e\n this.pts = e.getCoordinates()\n const mcb = new MonotoneChainIndexer()\n this.startIndex = mcb.getChainStartIndices(this.pts)\n }\n getCoordinates() {\n return this.pts\n }\n getMaxX(chainIndex) {\n const x1 = this.pts[this.startIndex[chainIndex]].x\n const x2 = this.pts[this.startIndex[chainIndex + 1]].x\n return x1 > x2 ? x1 : x2\n }\n getMinX(chainIndex) {\n const x1 = this.pts[this.startIndex[chainIndex]].x\n const x2 = this.pts[this.startIndex[chainIndex + 1]].x\n return x1 < x2 ? x1 : x2\n }\n computeIntersectsForChain() {\n if (arguments.length === 4) {\n const chainIndex0 = arguments[0], mce = arguments[1], chainIndex1 = arguments[2], si = arguments[3]\n this.computeIntersectsForChain(this.startIndex[chainIndex0], this.startIndex[chainIndex0 + 1], mce, mce.startIndex[chainIndex1], mce.startIndex[chainIndex1 + 1], si)\n } else if (arguments.length === 6) {\n const start0 = arguments[0], end0 = arguments[1], mce = arguments[2], start1 = arguments[3], end1 = arguments[4], ei = arguments[5]\n if (end0 - start0 === 1 && end1 - start1 === 1) {\n ei.addIntersections(this.e, start0, mce.e, start1)\n return null\n }\n if (!this.overlaps(start0, end0, mce, start1, end1)) return null\n const mid0 = Math.trunc((start0 + end0) / 2)\n const mid1 = Math.trunc((start1 + end1) / 2)\n if (start0 < mid0) {\n if (start1 < mid1) this.computeIntersectsForChain(start0, mid0, mce, start1, mid1, ei)\n if (mid1 < end1) this.computeIntersectsForChain(start0, mid0, mce, mid1, end1, ei)\n }\n if (mid0 < end0) {\n if (start1 < mid1) this.computeIntersectsForChain(mid0, end0, mce, start1, mid1, ei)\n if (mid1 < end1) this.computeIntersectsForChain(mid0, end0, mce, mid1, end1, ei)\n }\n }\n }\n overlaps(start0, end0, mce, start1, end1) {\n return Envelope.intersects(this.pts[start0], this.pts[end0], mce.pts[start1], mce.pts[end1])\n }\n getStartIndexes() {\n return this.startIndex\n }\n computeIntersects(mce, si) {\n for (let i = 0; i < this.startIndex.length - 1; i++) \n for (let j = 0; j < mce.startIndex.length - 1; j++) \n this.computeIntersectsForChain(i, mce, j, si)\n \n \n }\n}\n","import Location from '../geom/Location'\nimport Position from './Position'\nexport default class Depth {\n constructor() {\n Depth.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._depth = Array(2).fill().map(() => Array(3))\n for (let i = 0; i < 2; i++) \n for (let j = 0; j < 3; j++) \n this._depth[i][j] = Depth.NULL_VALUE\n \n \n }\n static depthAtLocation(location) {\n if (location === Location.EXTERIOR) return 0\n if (location === Location.INTERIOR) return 1\n return Depth.NULL_VALUE\n }\n getDepth(geomIndex, posIndex) {\n return this._depth[geomIndex][posIndex]\n }\n setDepth(geomIndex, posIndex, depthValue) {\n this._depth[geomIndex][posIndex] = depthValue\n }\n isNull() {\n if (arguments.length === 0) {\n for (let i = 0; i < 2; i++) \n for (let j = 0; j < 3; j++) \n if (this._depth[i][j] !== Depth.NULL_VALUE) return false\n \n \n return true\n } else if (arguments.length === 1) {\n const geomIndex = arguments[0]\n return this._depth[geomIndex][1] === Depth.NULL_VALUE\n } else if (arguments.length === 2) {\n const geomIndex = arguments[0], posIndex = arguments[1]\n return this._depth[geomIndex][posIndex] === Depth.NULL_VALUE\n }\n }\n normalize() {\n for (let i = 0; i < 2; i++) \n if (!this.isNull(i)) {\n let minDepth = this._depth[i][1]\n if (this._depth[i][2] < minDepth) minDepth = this._depth[i][2]\n if (minDepth < 0) minDepth = 0\n for (let j = 1; j < 3; j++) {\n let newValue = 0\n if (this._depth[i][j] > minDepth) newValue = 1\n this._depth[i][j] = newValue\n }\n }\n \n }\n getDelta(geomIndex) {\n return this._depth[geomIndex][Position.RIGHT] - this._depth[geomIndex][Position.LEFT]\n }\n getLocation(geomIndex, posIndex) {\n if (this._depth[geomIndex][posIndex] <= 0) return Location.EXTERIOR\n return Location.INTERIOR\n }\n toString() {\n return 'A: ' + this._depth[0][1] + ',' + this._depth[0][2] + ' B: ' + this._depth[1][1] + ',' + this._depth[1][2]\n }\n add() {\n if (arguments.length === 1) {\n const lbl = arguments[0]\n for (let i = 0; i < 2; i++) \n for (let j = 1; j < 3; j++) {\n const loc = lbl.getLocation(i, j)\n if (loc === Location.EXTERIOR || loc === Location.INTERIOR) \n if (this.isNull(i, j)) \n this._depth[i][j] = Depth.depthAtLocation(loc)\n else this._depth[i][j] += Depth.depthAtLocation(loc)\n \n }\n \n } else if (arguments.length === 3) {\n const geomIndex = arguments[0], posIndex = arguments[1], location = arguments[2]\n if (location === Location.INTERIOR) this._depth[geomIndex][posIndex]++\n }\n }\n}\nDepth.NULL_VALUE = -1\n","import Assert from '../util/Assert'\nexport default class GraphComponent {\n constructor() {\n GraphComponent.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._label = null\n this._isInResult = false\n this._isCovered = false\n this._isCoveredSet = false\n this._isVisited = false\n if (arguments.length === 0) {} else if (arguments.length === 1) {\n const label = arguments[0]\n this._label = label\n }\n }\n setVisited(isVisited) {\n this._isVisited = isVisited\n }\n setInResult(isInResult) {\n this._isInResult = isInResult\n }\n isCovered() {\n return this._isCovered\n }\n isCoveredSet() {\n return this._isCoveredSet\n }\n setLabel(label) {\n this._label = label\n }\n getLabel() {\n return this._label\n }\n setCovered(isCovered) {\n this._isCovered = isCovered\n this._isCoveredSet = true\n }\n updateIM(im) {\n Assert.isTrue(this._label.getGeometryCount() >= 2, 'found partial label')\n this.computeIM(im)\n }\n isInResult() {\n return this._isInResult\n }\n isVisited() {\n return this._isVisited\n }\n}\n","import EdgeIntersectionList from './EdgeIntersectionList'\nimport IntersectionMatrix from '../geom/IntersectionMatrix'\nimport MonotoneChainEdge from './index/MonotoneChainEdge'\nimport Position from './Position'\nimport Coordinate from '../geom/Coordinate'\nimport Label from './Label'\nimport Envelope from '../geom/Envelope'\nimport StringBuilder from '../../../../java/lang/StringBuilder'\nimport Depth from './Depth'\nimport GraphComponent from './GraphComponent'\nexport default class Edge extends GraphComponent {\n constructor() {\n super()\n Edge.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this.pts = null\n this._env = null\n this.eiList = new EdgeIntersectionList(this)\n this._name = null\n this._mce = null\n this._isIsolated = true\n this._depth = new Depth()\n this._depthDelta = 0\n if (arguments.length === 1) {\n const pts = arguments[0]\n Edge.constructor_.call(this, pts, null)\n } else if (arguments.length === 2) {\n const pts = arguments[0], label = arguments[1]\n this.pts = pts\n this._label = label\n }\n }\n static updateIM() {\n if (arguments.length === 2 && (arguments[1] instanceof IntersectionMatrix && arguments[0] instanceof Label)) {\n const label = arguments[0], im = arguments[1]\n im.setAtLeastIfValid(label.getLocation(0, Position.ON), label.getLocation(1, Position.ON), 1)\n if (label.isArea()) {\n im.setAtLeastIfValid(label.getLocation(0, Position.LEFT), label.getLocation(1, Position.LEFT), 2)\n im.setAtLeastIfValid(label.getLocation(0, Position.RIGHT), label.getLocation(1, Position.RIGHT), 2)\n }\n } else {\n return super.updateIM.apply(this, arguments)\n }\n }\n getDepth() {\n return this._depth\n }\n getCollapsedEdge() {\n const newPts = new Array(2).fill(null)\n newPts[0] = this.pts[0]\n newPts[1] = this.pts[1]\n const newe = new Edge(newPts, Label.toLineLabel(this._label))\n return newe\n }\n isIsolated() {\n return this._isIsolated\n }\n getCoordinates() {\n return this.pts\n }\n setIsolated(isIsolated) {\n this._isIsolated = isIsolated\n }\n setName(name) {\n this._name = name\n }\n equals(o) {\n if (!(o instanceof Edge)) return false\n const e = o\n if (this.pts.length !== e.pts.length) return false\n let isEqualForward = true\n let isEqualReverse = true\n let iRev = this.pts.length\n for (let i = 0; i < this.pts.length; i++) {\n if (!this.pts[i].equals2D(e.pts[i])) \n isEqualForward = false\n \n if (!this.pts[i].equals2D(e.pts[-- iRev])) \n isEqualReverse = false\n \n if (!isEqualForward && !isEqualReverse) return false\n }\n return true\n }\n getCoordinate() {\n if (arguments.length === 0) {\n if (this.pts.length > 0) return this.pts[0]\n return null\n } else if (arguments.length === 1) {\n const i = arguments[0]\n return this.pts[i]\n }\n }\n print(out) {\n out.print('edge ' + this._name + ': ')\n out.print('LINESTRING (')\n for (let i = 0; i < this.pts.length; i++) {\n if (i > 0) out.print(',')\n out.print(this.pts[i].x + ' ' + this.pts[i].y)\n }\n out.print(') ' + this._label + ' ' + this._depthDelta)\n }\n computeIM(im) {\n Edge.updateIM(this._label, im)\n }\n isCollapsed() {\n if (!this._label.isArea()) return false\n if (this.pts.length !== 3) return false\n if (this.pts[0].equals(this.pts[2])) return true\n return false\n }\n isClosed() {\n return this.pts[0].equals(this.pts[this.pts.length - 1])\n }\n getMaximumSegmentIndex() {\n return this.pts.length - 1\n }\n getDepthDelta() {\n return this._depthDelta\n }\n getNumPoints() {\n return this.pts.length\n }\n printReverse(out) {\n out.print('edge ' + this._name + ': ')\n for (let i = this.pts.length - 1; i >= 0; i--) \n out.print(this.pts[i] + ' ')\n \n out.println('')\n }\n getMonotoneChainEdge() {\n if (this._mce === null) this._mce = new MonotoneChainEdge(this)\n return this._mce\n }\n getEnvelope() {\n if (this._env === null) {\n this._env = new Envelope()\n for (let i = 0; i < this.pts.length; i++) \n this._env.expandToInclude(this.pts[i])\n \n }\n return this._env\n }\n addIntersection(li, segmentIndex, geomIndex, intIndex) {\n const intPt = new Coordinate(li.getIntersection(intIndex))\n let normalizedSegmentIndex = segmentIndex\n let dist = li.getEdgeDistance(geomIndex, intIndex)\n const nextSegIndex = normalizedSegmentIndex + 1\n if (nextSegIndex < this.pts.length) {\n const nextPt = this.pts[nextSegIndex]\n if (intPt.equals2D(nextPt)) {\n normalizedSegmentIndex = nextSegIndex\n dist = 0.0\n }\n }\n const ei = this.eiList.add(intPt, normalizedSegmentIndex, dist)\n }\n toString() {\n const builder = new StringBuilder()\n builder.append('edge ' + this._name + ': ')\n builder.append('LINESTRING (')\n for (let i = 0; i < this.pts.length; i++) {\n if (i > 0) builder.append(',')\n builder.append(this.pts[i].x + ' ' + this.pts[i].y)\n }\n builder.append(') ' + this._label + ' ' + this._depthDelta)\n return builder.toString()\n }\n isPointwiseEqual(e) {\n if (this.pts.length !== e.pts.length) return false\n for (let i = 0; i < this.pts.length; i++) \n if (!this.pts[i].equals2D(e.pts[i])) \n return false\n \n \n return true\n }\n setDepthDelta(depthDelta) {\n this._depthDelta = depthDelta\n }\n getEdgeIntersectionList() {\n return this.eiList\n }\n addIntersections(li, segmentIndex, geomIndex) {\n for (let i = 0; i < li.getIntersectionNum(); i++) \n this.addIntersection(li, segmentIndex, geomIndex, i)\n \n }\n}\n","import Location from '../geom/Location'\nimport Label from './Label'\nimport GraphComponent from './GraphComponent'\nexport default class Node extends GraphComponent {\n constructor() {\n super()\n Node.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._coord = null\n this._edges = null\n const coord = arguments[0], edges = arguments[1]\n this._coord = coord\n this._edges = edges\n this._label = new Label(0, Location.NONE)\n }\n isIncidentEdgeInResult() {\n for (let it = this.getEdges().getEdges().iterator(); it.hasNext(); ) {\n const de = it.next()\n if (de.getEdge().isInResult()) return true\n }\n return false\n }\n isIsolated() {\n return this._label.getGeometryCount() === 1\n }\n getCoordinate() {\n return this._coord\n }\n print(out) {\n out.println('node ' + this._coord + ' lbl: ' + this._label)\n }\n computeIM(im) {}\n computeMergedLocation(label2, eltIndex) {\n let loc = Location.NONE\n loc = this._label.getLocation(eltIndex)\n if (!label2.isNull(eltIndex)) {\n const nLoc = label2.getLocation(eltIndex)\n if (loc !== Location.BOUNDARY) loc = nLoc\n }\n return loc\n }\n setLabel() {\n if (arguments.length === 2 && (Number.isInteger(arguments[1]) && Number.isInteger(arguments[0]))) {\n const argIndex = arguments[0], onLocation = arguments[1]\n if (this._label === null) \n this._label = new Label(argIndex, onLocation)\n else this._label.setLocation(argIndex, onLocation)\n } else {\n return super.setLabel.apply(this, arguments)\n }\n }\n getEdges() {\n return this._edges\n }\n mergeLabel() {\n if (arguments[0] instanceof Node) {\n const n = arguments[0]\n this.mergeLabel(n._label)\n } else if (arguments[0] instanceof Label) {\n const label2 = arguments[0]\n for (let i = 0; i < 2; i++) {\n const loc = this.computeMergedLocation(label2, i)\n const thisLoc = this._label.getLocation(i)\n if (thisLoc === Location.NONE) this._label.setLocation(i, loc)\n }\n }\n }\n add(e) {\n this._edges.insert(e)\n e.setNode(this)\n }\n setLabelBoundary(argIndex) {\n if (this._label === null) return null\n let loc = Location.NONE\n if (this._label !== null) loc = this._label.getLocation(argIndex)\n let newLoc = null\n switch (loc) {\n case Location.BOUNDARY:\n newLoc = Location.INTERIOR\n break\n case Location.INTERIOR:\n newLoc = Location.BOUNDARY\n break\n default:\n newLoc = Location.BOUNDARY\n break\n }\n this._label.setLocation(argIndex, newLoc)\n }\n}\n","import Location from '../geom/Location'\nimport Coordinate from '../geom/Coordinate'\nimport Node from './Node'\nimport ArrayList from '../../../../java/util/ArrayList'\nimport TreeMap from '../../../../java/util/TreeMap'\nexport default class NodeMap {\n constructor() {\n NodeMap.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this.nodeMap = new TreeMap()\n this.nodeFact = null\n const nodeFact = arguments[0]\n this.nodeFact = nodeFact\n }\n find(coord) {\n return this.nodeMap.get(coord)\n }\n addNode() {\n if (arguments[0] instanceof Coordinate) {\n const coord = arguments[0]\n let node = this.nodeMap.get(coord)\n if (node === null) {\n node = this.nodeFact.createNode(coord)\n this.nodeMap.put(coord, node)\n }\n return node\n } else if (arguments[0] instanceof Node) {\n const n = arguments[0]\n const node = this.nodeMap.get(n.getCoordinate())\n if (node === null) {\n this.nodeMap.put(n.getCoordinate(), n)\n return n\n }\n node.mergeLabel(n)\n return node\n }\n }\n print(out) {\n for (let it = this.iterator(); it.hasNext(); ) {\n const n = it.next()\n n.print(out)\n }\n }\n iterator() {\n return this.nodeMap.values().iterator()\n }\n values() {\n return this.nodeMap.values()\n }\n getBoundaryNodes(geomIndex) {\n const bdyNodes = new ArrayList()\n for (let i = this.iterator(); i.hasNext(); ) {\n const node = i.next()\n if (node.getLabel().getLocation(geomIndex) === Location.BOUNDARY) bdyNodes.add(node)\n }\n return bdyNodes\n }\n add(e) {\n const p = e.getCoordinate()\n const n = this.addNode(p)\n n.add(e)\n }\n}\n","import Orientation from '../algorithm/Orientation'\nimport Comparable from '../../../../java/lang/Comparable'\nimport Quadrant from './Quadrant'\nimport Assert from '../util/Assert'\nexport default class EdgeEnd {\n constructor() {\n EdgeEnd.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._edge = null\n this._label = null\n this._node = null\n this._p0 = null\n this._p1 = null\n this._dx = null\n this._dy = null\n this._quadrant = null\n if (arguments.length === 1) {\n const edge = arguments[0]\n this._edge = edge\n } else if (arguments.length === 3) {\n const edge = arguments[0], p0 = arguments[1], p1 = arguments[2]\n EdgeEnd.constructor_.call(this, edge, p0, p1, null)\n } else if (arguments.length === 4) {\n const edge = arguments[0], p0 = arguments[1], p1 = arguments[2], label = arguments[3]\n EdgeEnd.constructor_.call(this, edge)\n this.init(p0, p1)\n this._label = label\n }\n }\n compareDirection(e) {\n if (this._dx === e._dx && this._dy === e._dy) return 0\n if (this._quadrant > e._quadrant) return 1\n if (this._quadrant < e._quadrant) return -1\n return Orientation.index(e._p0, e._p1, this._p1)\n }\n getDy() {\n return this._dy\n }\n getCoordinate() {\n return this._p0\n }\n setNode(node) {\n this._node = node\n }\n print(out) {\n const angle = Math.atan2(this._dy, this._dx)\n const className = this.getClass().getName()\n const lastDotPos = className.lastIndexOf('.')\n const name = className.substring(lastDotPos + 1)\n out.print(' ' + name + ': ' + this._p0 + ' - ' + this._p1 + ' ' + this._quadrant + ':' + angle + ' ' + this._label)\n }\n compareTo(obj) {\n const e = obj\n return this.compareDirection(e)\n }\n getDirectedCoordinate() {\n return this._p1\n }\n getDx() {\n return this._dx\n }\n getLabel() {\n return this._label\n }\n getEdge() {\n return this._edge\n }\n getQuadrant() {\n return this._quadrant\n }\n getNode() {\n return this._node\n }\n toString() {\n const angle = Math.atan2(this._dy, this._dx)\n const className = this.getClass().getName()\n const lastDotPos = className.lastIndexOf('.')\n const name = className.substring(lastDotPos + 1)\n return ' ' + name + ': ' + this._p0 + ' - ' + this._p1 + ' ' + this._quadrant + ':' + angle + ' ' + this._label\n }\n computeLabel(boundaryNodeRule) {}\n init(p0, p1) {\n this._p0 = p0\n this._p1 = p1\n this._dx = p1.x - p0.x\n this._dy = p1.y - p0.y\n this._quadrant = Quadrant.quadrant(this._dx, this._dy)\n Assert.isTrue(!(this._dx === 0 && this._dy === 0), 'EdgeEnd with identical endpoints found')\n }\n get interfaces_() {\n return [Comparable]\n }\n}\n","import Coordinate from './Coordinate'\nimport RuntimeException from '../../../../java/lang/RuntimeException'\n\nexport default class TopologyException extends RuntimeException {\n constructor(msg, pt) {\n super(pt ? msg + ' [ ' + pt + ' ]' : msg)\n this.pt = pt ? new Coordinate(pt) : undefined\n this.name = Object.keys({ TopologyException })[0]\n }\n getCoordinate() {\n return this.pt\n }\n}\n","import Location from '../geom/Location'\nimport EdgeEnd from './EdgeEnd'\nimport Position from './Position'\nimport TopologyException from '../geom/TopologyException'\nimport Label from './Label'\nexport default class DirectedEdge extends EdgeEnd {\n constructor() {\n super()\n DirectedEdge.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._isForward = null\n this._isInResult = false\n this._isVisited = false\n this._sym = null\n this._next = null\n this._nextMin = null\n this._edgeRing = null\n this._minEdgeRing = null\n this._depth = [0, -999, -999]\n const edge = arguments[0], isForward = arguments[1]\n EdgeEnd.constructor_.call(this, edge)\n this._isForward = isForward\n if (isForward) {\n this.init(edge.getCoordinate(0), edge.getCoordinate(1))\n } else {\n const n = edge.getNumPoints() - 1\n this.init(edge.getCoordinate(n), edge.getCoordinate(n - 1))\n }\n this.computeDirectedLabel()\n }\n static depthFactor(currLocation, nextLocation) {\n if (currLocation === Location.EXTERIOR && nextLocation === Location.INTERIOR) return 1; else if (currLocation === Location.INTERIOR && nextLocation === Location.EXTERIOR) return -1\n return 0\n }\n getNextMin() {\n return this._nextMin\n }\n getDepth(position) {\n return this._depth[position]\n }\n setVisited(isVisited) {\n this._isVisited = isVisited\n }\n computeDirectedLabel() {\n this._label = new Label(this._edge.getLabel())\n if (!this._isForward) this._label.flip()\n }\n getNext() {\n return this._next\n }\n setDepth(position, depthVal) {\n if (this._depth[position] !== -999) \n if (this._depth[position] !== depthVal) throw new TopologyException('assigned depths do not match', this.getCoordinate())\n \n this._depth[position] = depthVal\n }\n isInteriorAreaEdge() {\n let isInteriorAreaEdge = true\n for (let i = 0; i < 2; i++) \n if (!(this._label.isArea(i) && this._label.getLocation(i, Position.LEFT) === Location.INTERIOR && this._label.getLocation(i, Position.RIGHT) === Location.INTERIOR)) \n isInteriorAreaEdge = false\n \n \n return isInteriorAreaEdge\n }\n setNextMin(nextMin) {\n this._nextMin = nextMin\n }\n print(out) {\n super.print.call(this, out)\n out.print(' ' + this._depth[Position.LEFT] + '/' + this._depth[Position.RIGHT])\n out.print(' (' + this.getDepthDelta() + ')')\n if (this._isInResult) out.print(' inResult')\n }\n setMinEdgeRing(minEdgeRing) {\n this._minEdgeRing = minEdgeRing\n }\n isLineEdge() {\n const isLine = this._label.isLine(0) || this._label.isLine(1)\n const isExteriorIfArea0 = !this._label.isArea(0) || this._label.allPositionsEqual(0, Location.EXTERIOR)\n const isExteriorIfArea1 = !this._label.isArea(1) || this._label.allPositionsEqual(1, Location.EXTERIOR)\n return isLine && isExteriorIfArea0 && isExteriorIfArea1\n }\n setEdgeRing(edgeRing) {\n this._edgeRing = edgeRing\n }\n getMinEdgeRing() {\n return this._minEdgeRing\n }\n getDepthDelta() {\n let depthDelta = this._edge.getDepthDelta()\n if (!this._isForward) depthDelta = -depthDelta\n return depthDelta\n }\n setInResult(isInResult) {\n this._isInResult = isInResult\n }\n getSym() {\n return this._sym\n }\n isForward() {\n return this._isForward\n }\n getEdge() {\n return this._edge\n }\n printEdge(out) {\n this.print(out)\n out.print(' ')\n if (this._isForward) this._edge.print(out); else this._edge.printReverse(out)\n }\n setSym(de) {\n this._sym = de\n }\n setVisitedEdge(isVisited) {\n this.setVisited(isVisited)\n this._sym.setVisited(isVisited)\n }\n setEdgeDepths(position, depth) {\n let depthDelta = this.getEdge().getDepthDelta()\n if (!this._isForward) depthDelta = -depthDelta\n let directionFactor = 1\n if (position === Position.LEFT) directionFactor = -1\n const oppositePos = Position.opposite(position)\n const delta = depthDelta * directionFactor\n const oppositeDepth = depth + delta\n this.setDepth(position, depth)\n this.setDepth(oppositePos, oppositeDepth)\n }\n getEdgeRing() {\n return this._edgeRing\n }\n isInResult() {\n return this._isInResult\n }\n setNext(next) {\n this._next = next\n }\n isVisited() {\n return this._isVisited\n }\n}\n","import Node from './Node'\nexport default class NodeFactory {\n createNode(coord) {\n return new Node(coord, null)\n }\n}\n","import Location from '../geom/Location'\nimport Coordinate from '../geom/Coordinate'\nimport Node from './Node'\nimport NodeMap from './NodeMap'\nimport Orientation from '../algorithm/Orientation'\nimport DirectedEdge from './DirectedEdge'\nimport System from '../../../../java/lang/System'\nimport ArrayList from '../../../../java/util/ArrayList'\nimport Quadrant from './Quadrant'\nimport NodeFactory from './NodeFactory'\nexport default class PlanarGraph {\n constructor() {\n PlanarGraph.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._edges = new ArrayList()\n this._nodes = null\n this._edgeEndList = new ArrayList()\n if (arguments.length === 0) {\n this._nodes = new NodeMap(new NodeFactory())\n } else if (arguments.length === 1) {\n const nodeFact = arguments[0]\n this._nodes = new NodeMap(nodeFact)\n }\n }\n static linkResultDirectedEdges(nodes) {\n for (let nodeit = nodes.iterator(); nodeit.hasNext(); ) {\n const node = nodeit.next()\n node.getEdges().linkResultDirectedEdges()\n }\n }\n printEdges(out) {\n out.println('Edges:')\n for (let i = 0; i < this._edges.size(); i++) {\n out.println('edge ' + i + ':')\n const e = this._edges.get(i)\n e.print(out)\n e.eiList.print(out)\n }\n }\n find(coord) {\n return this._nodes.find(coord)\n }\n addNode() {\n if (arguments[0] instanceof Node) {\n const node = arguments[0]\n return this._nodes.addNode(node)\n } else if (arguments[0] instanceof Coordinate) {\n const coord = arguments[0]\n return this._nodes.addNode(coord)\n }\n }\n getNodeIterator() {\n return this._nodes.iterator()\n }\n linkResultDirectedEdges() {\n for (let nodeit = this._nodes.iterator(); nodeit.hasNext(); ) {\n const node = nodeit.next()\n node.getEdges().linkResultDirectedEdges()\n }\n }\n debugPrintln(o) {\n System.out.println(o)\n }\n isBoundaryNode(geomIndex, coord) {\n const node = this._nodes.find(coord)\n if (node === null) return false\n const label = node.getLabel()\n if (label !== null && label.getLocation(geomIndex) === Location.BOUNDARY) return true\n return false\n }\n linkAllDirectedEdges() {\n for (let nodeit = this._nodes.iterator(); nodeit.hasNext(); ) {\n const node = nodeit.next()\n node.getEdges().linkAllDirectedEdges()\n }\n }\n matchInSameDirection(p0, p1, ep0, ep1) {\n if (!p0.equals(ep0)) return false\n if (Orientation.index(p0, p1, ep1) === Orientation.COLLINEAR && Quadrant.quadrant(p0, p1) === Quadrant.quadrant(ep0, ep1)) return true\n return false\n }\n getEdgeEnds() {\n return this._edgeEndList\n }\n debugPrint(o) {\n System.out.print(o)\n }\n getEdgeIterator() {\n return this._edges.iterator()\n }\n findEdgeInSameDirection(p0, p1) {\n for (let i = 0; i < this._edges.size(); i++) {\n const e = this._edges.get(i)\n const eCoord = e.getCoordinates()\n if (this.matchInSameDirection(p0, p1, eCoord[0], eCoord[1])) return e\n if (this.matchInSameDirection(p0, p1, eCoord[eCoord.length - 1], eCoord[eCoord.length - 2])) return e\n }\n return null\n }\n insertEdge(e) {\n this._edges.add(e)\n }\n findEdgeEnd(e) {\n for (let i = this.getEdgeEnds().iterator(); i.hasNext(); ) {\n const ee = i.next()\n if (ee.getEdge() === e) return ee\n }\n return null\n }\n addEdges(edgesToAdd) {\n for (let it = edgesToAdd.iterator(); it.hasNext(); ) {\n const e = it.next()\n this._edges.add(e)\n const de1 = new DirectedEdge(e, true)\n const de2 = new DirectedEdge(e, false)\n de1.setSym(de2)\n de2.setSym(de1)\n this.add(de1)\n this.add(de2)\n }\n }\n add(e) {\n this._nodes.add(e)\n this._edgeEndList.add(e)\n }\n getNodes() {\n return this._nodes.values()\n }\n findEdge(p0, p1) {\n for (let i = 0; i < this._edges.size(); i++) {\n const e = this._edges.get(i)\n const eCoord = e.getCoordinates()\n if (p0.equals(eCoord[0]) && p1.equals(eCoord[1])) return e\n }\n return null\n }\n}\n","import PointLocator from '../algorithm/PointLocator'\nimport Location from '../geom/Location'\nimport LineString from '../geom/LineString'\nimport HashMap from '../../../../java/util/HashMap'\nimport Geometry from '../geom/Geometry'\nimport hasInterface from '../../../../hasInterface'\nimport Position from './Position'\nimport Coordinate from '../geom/Coordinate'\nimport Point from '../geom/Point'\nimport Polygon from '../geom/Polygon'\nimport MultiPoint from '../geom/MultiPoint'\nimport SimpleMCSweepLineIntersector from './index/SimpleMCSweepLineIntersector'\nimport LinearRing from '../geom/LinearRing'\nimport BoundaryNodeRule from '../algorithm/BoundaryNodeRule'\nimport Orientation from '../algorithm/Orientation'\nimport SegmentIntersector from './index/SegmentIntersector'\nimport MultiPolygon from '../geom/MultiPolygon'\nimport Label from './Label'\nimport GeometryCollection from '../geom/GeometryCollection'\nimport UnsupportedOperationException from '../../../../java/lang/UnsupportedOperationException'\nimport CoordinateArrays from '../geom/CoordinateArrays'\nimport Polygonal from '../geom/Polygonal'\nimport IndexedPointInAreaLocator from '../algorithm/locate/IndexedPointInAreaLocator'\nimport Assert from '../util/Assert'\nimport Edge from './Edge'\nimport MultiLineString from '../geom/MultiLineString'\nimport PlanarGraph from './PlanarGraph'\nexport default class GeometryGraph extends PlanarGraph {\n constructor() {\n super()\n GeometryGraph.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._parentGeom = null\n this._lineEdgeMap = new HashMap()\n this._boundaryNodeRule = null\n this._useBoundaryDeterminationRule = true\n this._argIndex = null\n this._boundaryNodes = null\n this._hasTooFewPoints = false\n this._invalidPoint = null\n this._areaPtLocator = null\n this._ptLocator = new PointLocator()\n if (arguments.length === 2) {\n const argIndex = arguments[0], parentGeom = arguments[1]\n GeometryGraph.constructor_.call(this, argIndex, parentGeom, BoundaryNodeRule.OGC_SFS_BOUNDARY_RULE)\n } else if (arguments.length === 3) {\n const argIndex = arguments[0], parentGeom = arguments[1], boundaryNodeRule = arguments[2]\n this._argIndex = argIndex\n this._parentGeom = parentGeom\n this._boundaryNodeRule = boundaryNodeRule\n if (parentGeom !== null) \n this.add(parentGeom)\n \n }\n }\n static determineBoundary(boundaryNodeRule, boundaryCount) {\n return boundaryNodeRule.isInBoundary(boundaryCount) ? Location.BOUNDARY : Location.INTERIOR\n }\n insertBoundaryPoint(argIndex, coord) {\n const n = this._nodes.addNode(coord)\n const lbl = n.getLabel()\n let boundaryCount = 1\n let loc = Location.NONE\n loc = lbl.getLocation(argIndex, Position.ON)\n if (loc === Location.BOUNDARY) boundaryCount++\n const newLoc = GeometryGraph.determineBoundary(this._boundaryNodeRule, boundaryCount)\n lbl.setLocation(argIndex, newLoc)\n }\n computeSelfNodes() {\n if (arguments.length === 2) {\n const li = arguments[0], computeRingSelfNodes = arguments[1]\n return this.computeSelfNodes(li, computeRingSelfNodes, false)\n } else if (arguments.length === 3) {\n const li = arguments[0], computeRingSelfNodes = arguments[1], isDoneIfProperInt = arguments[2]\n const si = new SegmentIntersector(li, true, false)\n si.setIsDoneIfProperInt(isDoneIfProperInt)\n const esi = this.createEdgeSetIntersector()\n const isRings = this._parentGeom instanceof LinearRing || this._parentGeom instanceof Polygon || this._parentGeom instanceof MultiPolygon\n const computeAllSegments = computeRingSelfNodes || !isRings\n esi.computeIntersections(this._edges, si, computeAllSegments)\n this.addSelfIntersectionNodes(this._argIndex)\n return si\n }\n }\n computeSplitEdges(edgelist) {\n for (let i = this._edges.iterator(); i.hasNext(); ) {\n const e = i.next()\n e.eiList.addSplitEdges(edgelist)\n }\n }\n computeEdgeIntersections(g, li, includeProper) {\n const si = new SegmentIntersector(li, includeProper, true)\n si.setBoundaryNodes(this.getBoundaryNodes(), g.getBoundaryNodes())\n const esi = this.createEdgeSetIntersector()\n esi.computeIntersections(this._edges, g._edges, si)\n return si\n }\n getGeometry() {\n return this._parentGeom\n }\n getBoundaryNodeRule() {\n return this._boundaryNodeRule\n }\n hasTooFewPoints() {\n return this._hasTooFewPoints\n }\n addPoint() {\n if (arguments[0] instanceof Point) {\n const p = arguments[0]\n const coord = p.getCoordinate()\n this.insertPoint(this._argIndex, coord, Location.INTERIOR)\n } else if (arguments[0] instanceof Coordinate) {\n const pt = arguments[0]\n this.insertPoint(this._argIndex, pt, Location.INTERIOR)\n }\n }\n addPolygon(p) {\n this.addPolygonRing(p.getExteriorRing(), Location.EXTERIOR, Location.INTERIOR)\n for (let i = 0; i < p.getNumInteriorRing(); i++) {\n const hole = p.getInteriorRingN(i)\n this.addPolygonRing(hole, Location.INTERIOR, Location.EXTERIOR)\n }\n }\n addEdge(e) {\n this.insertEdge(e)\n const coord = e.getCoordinates()\n this.insertPoint(this._argIndex, coord[0], Location.BOUNDARY)\n this.insertPoint(this._argIndex, coord[coord.length - 1], Location.BOUNDARY)\n }\n addLineString(line) {\n const coord = CoordinateArrays.removeRepeatedPoints(line.getCoordinates())\n if (coord.length < 2) {\n this._hasTooFewPoints = true\n this._invalidPoint = coord[0]\n return null\n }\n const e = new Edge(coord, new Label(this._argIndex, Location.INTERIOR))\n this._lineEdgeMap.put(line, e)\n this.insertEdge(e)\n Assert.isTrue(coord.length >= 2, 'found LineString with single point')\n this.insertBoundaryPoint(this._argIndex, coord[0])\n this.insertBoundaryPoint(this._argIndex, coord[coord.length - 1])\n }\n getInvalidPoint() {\n return this._invalidPoint\n }\n getBoundaryPoints() {\n const coll = this.getBoundaryNodes()\n const pts = new Array(coll.size()).fill(null)\n let i = 0\n for (let it = coll.iterator(); it.hasNext(); ) {\n const node = it.next()\n pts[i++] = node.getCoordinate().copy()\n }\n return pts\n }\n getBoundaryNodes() {\n if (this._boundaryNodes === null) this._boundaryNodes = this._nodes.getBoundaryNodes(this._argIndex)\n return this._boundaryNodes\n }\n addSelfIntersectionNode(argIndex, coord, loc) {\n if (this.isBoundaryNode(argIndex, coord)) return null\n if (loc === Location.BOUNDARY && this._useBoundaryDeterminationRule) this.insertBoundaryPoint(argIndex, coord); else this.insertPoint(argIndex, coord, loc)\n }\n addPolygonRing(lr, cwLeft, cwRight) {\n if (lr.isEmpty()) return null\n const coord = CoordinateArrays.removeRepeatedPoints(lr.getCoordinates())\n if (coord.length < 4) {\n this._hasTooFewPoints = true\n this._invalidPoint = coord[0]\n return null\n }\n let left = cwLeft\n let right = cwRight\n if (Orientation.isCCW(coord)) {\n left = cwRight\n right = cwLeft\n }\n const e = new Edge(coord, new Label(this._argIndex, Location.BOUNDARY, left, right))\n this._lineEdgeMap.put(lr, e)\n this.insertEdge(e)\n this.insertPoint(this._argIndex, coord[0], Location.BOUNDARY)\n }\n insertPoint(argIndex, coord, onLocation) {\n const n = this._nodes.addNode(coord)\n const lbl = n.getLabel()\n if (lbl === null) \n n._label = new Label(argIndex, onLocation)\n else lbl.setLocation(argIndex, onLocation)\n }\n createEdgeSetIntersector() {\n return new SimpleMCSweepLineIntersector()\n }\n addSelfIntersectionNodes(argIndex) {\n for (let i = this._edges.iterator(); i.hasNext(); ) {\n const e = i.next()\n const eLoc = e.getLabel().getLocation(argIndex)\n for (let eiIt = e.eiList.iterator(); eiIt.hasNext(); ) {\n const ei = eiIt.next()\n this.addSelfIntersectionNode(argIndex, ei.coord, eLoc)\n }\n }\n }\n add() {\n if (arguments.length === 1 && arguments[0] instanceof Geometry) {\n const g = arguments[0]\n if (g.isEmpty()) return null\n if (g instanceof MultiPolygon) this._useBoundaryDeterminationRule = false\n if (g instanceof Polygon) this.addPolygon(g); else if (g instanceof LineString) this.addLineString(g); else if (g instanceof Point) this.addPoint(g); else if (g instanceof MultiPoint) this.addCollection(g); else if (g instanceof MultiLineString) this.addCollection(g); else if (g instanceof MultiPolygon) this.addCollection(g); else if (g instanceof GeometryCollection) this.addCollection(g); else throw new UnsupportedOperationException(g.getGeometryType())\n } else {\n return super.add.apply(this, arguments)\n }\n }\n addCollection(gc) {\n for (let i = 0; i < gc.getNumGeometries(); i++) {\n const g = gc.getGeometryN(i)\n this.add(g)\n }\n }\n locate(pt) {\n if (hasInterface(this._parentGeom, Polygonal) && this._parentGeom.getNumGeometries() > 50) {\n if (this._areaPtLocator === null) \n this._areaPtLocator = new IndexedPointInAreaLocator(this._parentGeom)\n \n return this._areaPtLocator.locate(pt)\n }\n return this._ptLocator.locate(pt, this._parentGeom)\n }\n findEdge() {\n if (arguments.length === 1 && arguments[0] instanceof LineString) {\n const line = arguments[0]\n return this._lineEdgeMap.get(line)\n } else {\n return super.findEdge.apply(this, arguments)\n }\n }\n}\n","export default class KdNodeVisitor {\n visit(node) {}\n}\n","import Coordinate from '../../geom/Coordinate'\nexport default class KdNode {\n constructor() {\n KdNode.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._p = null\n this._data = null\n this._left = null\n this._right = null\n this._count = null\n if (arguments.length === 2) {\n const p = arguments[0], data = arguments[1]\n this._p = new Coordinate(p)\n this._left = null\n this._right = null\n this._count = 1\n this._data = data\n } else if (arguments.length === 3) {\n const _x = arguments[0], _y = arguments[1], data = arguments[2]\n this._p = new Coordinate(_x, _y)\n this._left = null\n this._right = null\n this._count = 1\n this._data = data\n }\n }\n isRepeated() {\n return this._count > 1\n }\n getRight() {\n return this._right\n }\n getCoordinate() {\n return this._p\n }\n setLeft(_left) {\n this._left = _left\n }\n getX() {\n return this._p.x\n }\n getData() {\n return this._data\n }\n getCount() {\n return this._count\n }\n getLeft() {\n return this._left\n }\n getY() {\n return this._p.y\n }\n increment() {\n this._count = this._count + 1\n }\n setRight(_right) {\n this._right = _right\n }\n}\n","import CoordinateList from '../../geom/CoordinateList'\nimport hasInterface from '../../../../../hasInterface'\nimport ArrayList from '../../../../../java/util/ArrayList'\nimport KdNodeVisitor from './KdNodeVisitor'\nimport Envelope from '../../geom/Envelope'\nimport List from '../../../../../java/util/List'\nimport KdNode from './KdNode'\nexport default class KdTree {\n constructor() {\n KdTree.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._root = null\n this._numberOfNodes = null\n this._tolerance = null\n if (arguments.length === 0) {\n KdTree.constructor_.call(this, 0.0)\n } else if (arguments.length === 1) {\n const tolerance = arguments[0]\n this._tolerance = tolerance\n }\n }\n static toCoordinates() {\n if (arguments.length === 1) {\n const kdnodes = arguments[0]\n return KdTree.toCoordinates(kdnodes, false)\n } else if (arguments.length === 2) {\n const kdnodes = arguments[0], includeRepeated = arguments[1]\n const coord = new CoordinateList()\n for (let it = kdnodes.iterator(); it.hasNext(); ) {\n const node = it.next()\n const count = includeRepeated ? node.getCount() : 1\n for (let i = 0; i < count; i++) \n coord.add(node.getCoordinate(), true)\n \n }\n return coord.toCoordinateArray()\n }\n }\n insert() {\n if (arguments.length === 1) {\n const p = arguments[0]\n return this.insert(p, null)\n } else if (arguments.length === 2) {\n const p = arguments[0], data = arguments[1]\n if (this._root === null) {\n this._root = new KdNode(p, data)\n return this._root\n }\n if (this._tolerance > 0) {\n const matchNode = this.findBestMatchNode(p)\n if (matchNode !== null) {\n matchNode.increment()\n return matchNode\n }\n }\n return this.insertExact(p, data)\n }\n }\n query() {\n if (arguments.length === 1) {\n const queryEnv = arguments[0]\n const result = new ArrayList()\n this.query(queryEnv, result)\n return result\n } else if (arguments.length === 2) {\n if (arguments[0] instanceof Envelope && hasInterface(arguments[1], List)) {\n const queryEnv = arguments[0], result = arguments[1]\n this.queryNode(this._root, queryEnv, true, new (class {\n get interfaces_() {\n return [KdNodeVisitor]\n }\n visit(node) {\n result.add(node)\n }\n })())\n } else if (arguments[0] instanceof Envelope && hasInterface(arguments[1], KdNodeVisitor)) {\n const queryEnv = arguments[0], visitor = arguments[1]\n this.queryNode(this._root, queryEnv, true, visitor)\n }\n }\n }\n queryNode(currentNode, queryEnv, odd, visitor) {\n if (currentNode === null) return null\n let min = null\n let max = null\n let discriminant = null\n if (odd) {\n min = queryEnv.getMinX()\n max = queryEnv.getMaxX()\n discriminant = currentNode.getX()\n } else {\n min = queryEnv.getMinY()\n max = queryEnv.getMaxY()\n discriminant = currentNode.getY()\n }\n const searchLeft = min < discriminant\n const searchRight = discriminant <= max\n if (searchLeft) \n this.queryNode(currentNode.getLeft(), queryEnv, !odd, visitor)\n \n if (queryEnv.contains(currentNode.getCoordinate())) \n visitor.visit(currentNode)\n \n if (searchRight) \n this.queryNode(currentNode.getRight(), queryEnv, !odd, visitor)\n \n }\n findBestMatchNode(p) {\n const visitor = new BestMatchVisitor(p, this._tolerance)\n this.query(visitor.queryEnvelope(), visitor)\n return visitor.getNode()\n }\n isEmpty() {\n if (this._root === null) return true\n return false\n }\n insertExact(p, data) {\n let currentNode = this._root\n let leafNode = this._root\n let isOddLevel = true\n let isLessThan = true\n while (currentNode !== null) {\n if (currentNode !== null) {\n const isInTolerance = p.distance(currentNode.getCoordinate()) <= this._tolerance\n if (isInTolerance) {\n currentNode.increment()\n return currentNode\n }\n }\n if (isOddLevel) \n isLessThan = p.x < currentNode.getX()\n else \n isLessThan = p.y < currentNode.getY()\n \n leafNode = currentNode\n if (isLessThan) \n currentNode = currentNode.getLeft()\n else \n currentNode = currentNode.getRight()\n \n isOddLevel = !isOddLevel\n }\n this._numberOfNodes = this._numberOfNodes + 1\n const node = new KdNode(p, data)\n if (isLessThan) \n leafNode.setLeft(node)\n else \n leafNode.setRight(node)\n \n return node\n }\n}\nclass BestMatchVisitor {\n constructor() {\n BestMatchVisitor.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._tolerance = null\n this._matchNode = null\n this._matchDist = 0.0\n this._p = null\n const p = arguments[0], tolerance = arguments[1]\n this._p = p\n this._tolerance = tolerance\n }\n visit(node) {\n const dist = this._p.distance(node.getCoordinate())\n const isInTolerance = dist <= this._tolerance\n if (!isInTolerance) return null\n let update = false\n if (this._matchNode === null || dist < this._matchDist || this._matchNode !== null && dist === this._matchDist && node.getCoordinate().compareTo(this._matchNode.getCoordinate()) < 1) update = true\n if (update) {\n this._matchNode = node\n this._matchDist = dist\n }\n }\n queryEnvelope() {\n const queryEnv = new Envelope(this._p)\n queryEnv.expandBy(this._tolerance)\n return queryEnv\n }\n getNode() {\n return this._matchNode\n }\n get interfaces_() {\n return [KdNodeVisitor]\n }\n}\nKdTree.BestMatchVisitor = BestMatchVisitor\n","import ArrayList from '../../../../../java/util/ArrayList'\nimport Serializable from '../../../../../java/io/Serializable'\nexport default class NodeBase {\n constructor() {\n NodeBase.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._items = new ArrayList()\n this._subnode = new Array(4).fill(null)\n }\n static getSubnodeIndex(env, centrex, centrey) {\n let subnodeIndex = -1\n if (env.getMinX() >= centrex) {\n if (env.getMinY() >= centrey) subnodeIndex = 3\n if (env.getMaxY() <= centrey) subnodeIndex = 1\n }\n if (env.getMaxX() <= centrex) {\n if (env.getMinY() >= centrey) subnodeIndex = 2\n if (env.getMaxY() <= centrey) subnodeIndex = 0\n }\n return subnodeIndex\n }\n hasChildren() {\n for (let i = 0; i < 4; i++) \n if (this._subnode[i] !== null) return true\n \n return false\n }\n isPrunable() {\n return !(this.hasChildren() || this.hasItems())\n }\n addAllItems(resultItems) {\n resultItems.addAll(this._items)\n for (let i = 0; i < 4; i++) \n if (this._subnode[i] !== null) \n this._subnode[i].addAllItems(resultItems)\n \n \n return resultItems\n }\n getNodeCount() {\n let subSize = 0\n for (let i = 0; i < 4; i++) \n if (this._subnode[i] !== null) \n subSize += this._subnode[i].size()\n \n \n return subSize + 1\n }\n size() {\n let subSize = 0\n for (let i = 0; i < 4; i++) \n if (this._subnode[i] !== null) \n subSize += this._subnode[i].size()\n \n \n return subSize + this._items.size()\n }\n addAllItemsFromOverlapping(searchEnv, resultItems) {\n if (!this.isSearchMatch(searchEnv)) return null\n resultItems.addAll(this._items)\n for (let i = 0; i < 4; i++) \n if (this._subnode[i] !== null) \n this._subnode[i].addAllItemsFromOverlapping(searchEnv, resultItems)\n \n \n }\n visitItems(searchEnv, visitor) {\n for (let i = this._items.iterator(); i.hasNext(); ) \n visitor.visitItem(i.next())\n \n }\n hasItems() {\n return !this._items.isEmpty()\n }\n remove(itemEnv, item) {\n if (!this.isSearchMatch(itemEnv)) return false\n let found = false\n for (let i = 0; i < 4; i++) \n if (this._subnode[i] !== null) {\n found = this._subnode[i].remove(itemEnv, item)\n if (found) {\n if (this._subnode[i].isPrunable()) this._subnode[i] = null\n break\n }\n }\n \n if (found) return found\n found = this._items.remove(item)\n return found\n }\n visit(searchEnv, visitor) {\n if (!this.isSearchMatch(searchEnv)) return null\n this.visitItems(searchEnv, visitor)\n for (let i = 0; i < 4; i++) \n if (this._subnode[i] !== null) \n this._subnode[i].visit(searchEnv, visitor)\n \n \n }\n getItems() {\n return this._items\n }\n depth() {\n let maxSubDepth = 0\n for (let i = 0; i < 4; i++) \n if (this._subnode[i] !== null) {\n const sqd = this._subnode[i].depth()\n if (sqd > maxSubDepth) maxSubDepth = sqd\n }\n \n return maxSubDepth + 1\n }\n isEmpty() {\n let isEmpty = true\n if (!this._items.isEmpty()) isEmpty = false; else \n for (let i = 0; i < 4; i++) \n if (this._subnode[i] !== null) \n if (!this._subnode[i].isEmpty()) {\n isEmpty = false\n break\n }\n \n \n \n return isEmpty\n }\n add(item) {\n this._items.add(item)\n }\n get interfaces_() {\n return [Serializable]\n }\n}\n","export default function DoubleBits() { }\nDoubleBits.exponent = function(d) {\n return CVTFWD(64, d) - 1023\n}\nDoubleBits.powerOf2 = function(exp) {\n return Math.pow(2, exp)\n}\n\n/**\n * Calculates the exponent of the bit-pattern for a number. Uses code from:\n * http://www.merlyn.demon.co.uk/js-exact.htm\n *\n * @param {Number}\n * NumW 32 or 64 to denote the number of bits.\n * @param {Number}\n * Qty the number to calculate the bit pattern for.\n * @return {Number} The integer value of the exponent.\n * @private\n */\nfunction CVTFWD(NumW, Qty) {\n let Sign\n let Expo\n let Mant\n let Bin\n const Inf = {\n 32: {\n d: 0x7F,\n c: 0x80,\n b: 0,\n a: 0\n },\n 64: {\n d: 0x7FF0,\n c: 0,\n b: 0,\n a: 0\n }\n }\n const ExW = {\n 32: 8,\n 64: 11\n }[NumW]\n\n if (!Bin) {\n Sign = Qty < 0 || 1 / Qty < 0 // OK for +-0\n if (!isFinite(Qty)) {\n Bin = Inf[NumW]\n if (Sign) Bin.d += 1 << (NumW / 4 - 1)\n\n Expo = Math.pow(2, ExW) - 1\n Mant = 0\n }\n }\n\n if (!Bin) {\n Expo = {\n 32: 127,\n 64: 1023\n }[NumW]\n Mant = Math.abs(Qty)\n while (Mant >= 2) {\n Expo++\n Mant /= 2\n }\n while (Mant < 1 && Expo > 0) {\n Expo--\n Mant *= 2\n }\n if (Expo <= 0) Mant /= 2\n\n if (NumW === 32 && Expo > 254) {\n Bin = {\n d: Sign ? 0xFF : 0x7F,\n c: 0x80,\n b: 0,\n a: 0\n }\n Expo = Math.pow(2, ExW) - 1\n Mant = 0\n }\n }\n\n return Expo\n}\n","import Coordinate from '../../geom/Coordinate'\nimport DoubleBits from './DoubleBits'\nimport Envelope from '../../geom/Envelope'\nexport default class Key {\n constructor() {\n Key.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._pt = new Coordinate()\n this._level = 0\n this._env = null\n const itemEnv = arguments[0]\n this.computeKey(itemEnv)\n }\n static computeQuadLevel(env) {\n const dx = env.getWidth()\n const dy = env.getHeight()\n const dMax = dx > dy ? dx : dy\n const level = DoubleBits.exponent(dMax) + 1\n return level\n }\n getLevel() {\n return this._level\n }\n computeKey() {\n if (arguments.length === 1) {\n const itemEnv = arguments[0]\n this._level = Key.computeQuadLevel(itemEnv)\n this._env = new Envelope()\n this.computeKey(this._level, itemEnv)\n while (!this._env.contains(itemEnv)) {\n this._level += 1\n this.computeKey(this._level, itemEnv)\n }\n } else if (arguments.length === 2) {\n const level = arguments[0], itemEnv = arguments[1]\n const quadSize = DoubleBits.powerOf2(level)\n this._pt.x = Math.floor(itemEnv.getMinX() / quadSize) * quadSize\n this._pt.y = Math.floor(itemEnv.getMinY() / quadSize) * quadSize\n this._env.init(this._pt.x, this._pt.x + quadSize, this._pt.y, this._pt.y + quadSize)\n }\n }\n getEnvelope() {\n return this._env\n }\n getCentre() {\n return new Coordinate((this._env.getMinX() + this._env.getMaxX()) / 2, (this._env.getMinY() + this._env.getMaxY()) / 2)\n }\n getPoint() {\n return this._pt\n }\n}\n","import NodeBase from './NodeBase'\nimport Envelope from '../../geom/Envelope'\nimport Assert from '../../util/Assert'\nimport Key from './Key'\nexport default class Node extends NodeBase {\n constructor() {\n super()\n Node.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._env = null\n this._centrex = null\n this._centrey = null\n this._level = null\n const env = arguments[0], level = arguments[1]\n this._env = env\n this._level = level\n this._centrex = (env.getMinX() + env.getMaxX()) / 2\n this._centrey = (env.getMinY() + env.getMaxY()) / 2\n }\n static createNode(env) {\n const key = new Key(env)\n const node = new Node(key.getEnvelope(), key.getLevel())\n return node\n }\n static createExpanded(node, addEnv) {\n const expandEnv = new Envelope(addEnv)\n if (node !== null) expandEnv.expandToInclude(node._env)\n const largerNode = Node.createNode(expandEnv)\n if (node !== null) largerNode.insertNode(node)\n return largerNode\n }\n find(searchEnv) {\n const subnodeIndex = NodeBase.getSubnodeIndex(searchEnv, this._centrex, this._centrey)\n if (subnodeIndex === -1) return this\n if (this._subnode[subnodeIndex] !== null) {\n const node = this._subnode[subnodeIndex]\n return node.find(searchEnv)\n }\n return this\n }\n isSearchMatch(searchEnv) {\n if (searchEnv === null) return false\n return this._env.intersects(searchEnv)\n }\n getSubnode(index) {\n if (this._subnode[index] === null) \n this._subnode[index] = this.createSubnode(index)\n \n return this._subnode[index]\n }\n getEnvelope() {\n return this._env\n }\n getNode(searchEnv) {\n const subnodeIndex = NodeBase.getSubnodeIndex(searchEnv, this._centrex, this._centrey)\n if (subnodeIndex !== -1) {\n const node = this.getSubnode(subnodeIndex)\n return node.getNode(searchEnv)\n } else {\n return this\n }\n }\n createSubnode(index) {\n let minx = 0.0\n let maxx = 0.0\n let miny = 0.0\n let maxy = 0.0\n switch (index) {\n case 0:\n minx = this._env.getMinX()\n maxx = this._centrex\n miny = this._env.getMinY()\n maxy = this._centrey\n break\n case 1:\n minx = this._centrex\n maxx = this._env.getMaxX()\n miny = this._env.getMinY()\n maxy = this._centrey\n break\n case 2:\n minx = this._env.getMinX()\n maxx = this._centrex\n miny = this._centrey\n maxy = this._env.getMaxY()\n break\n case 3:\n minx = this._centrex\n maxx = this._env.getMaxX()\n miny = this._centrey\n maxy = this._env.getMaxY()\n break\n }\n const sqEnv = new Envelope(minx, maxx, miny, maxy)\n const node = new Node(sqEnv, this._level - 1)\n return node\n }\n insertNode(node) {\n Assert.isTrue(this._env === null || this._env.contains(node._env))\n const index = NodeBase.getSubnodeIndex(node._env, this._centrex, this._centrey)\n if (node._level === this._level - 1) {\n this._subnode[index] = node\n } else {\n const childNode = this.createSubnode(index)\n childNode.insertNode(node)\n this._subnode[index] = childNode\n }\n }\n}\n","import DoubleBits from './DoubleBits'\nexport default class IntervalSize {\n static isZeroWidth(min, max) {\n const width = max - min\n if (width === 0.0) return true\n const maxAbs = Math.max(Math.abs(min), Math.abs(max))\n const scaledInterval = width / maxAbs\n const level = DoubleBits.exponent(scaledInterval)\n return level <= IntervalSize.MIN_BINARY_EXPONENT\n }\n}\nIntervalSize.MIN_BINARY_EXPONENT = -50\n","import Coordinate from '../../geom/Coordinate'\nimport NodeBase from './NodeBase'\nimport Node from './Node'\nimport IntervalSize from './IntervalSize'\nimport Assert from '../../util/Assert'\nexport default class Root extends NodeBase {\n constructor() {\n super()\n }\n insert(itemEnv, item) {\n const index = NodeBase.getSubnodeIndex(itemEnv, Root.origin.x, Root.origin.y)\n if (index === -1) {\n this.add(item)\n return null\n }\n const node = this._subnode[index]\n if (node === null || !node.getEnvelope().contains(itemEnv)) {\n const largerNode = Node.createExpanded(node, itemEnv)\n this._subnode[index] = largerNode\n }\n this.insertContained(this._subnode[index], itemEnv, item)\n }\n isSearchMatch(searchEnv) {\n return true\n }\n insertContained(tree, itemEnv, item) {\n Assert.isTrue(tree.getEnvelope().contains(itemEnv))\n const isZeroX = IntervalSize.isZeroWidth(itemEnv.getMinX(), itemEnv.getMaxX())\n const isZeroY = IntervalSize.isZeroWidth(itemEnv.getMinY(), itemEnv.getMaxY())\n let node = null\n if (isZeroX || isZeroY) node = tree.find(itemEnv); else node = tree.getNode(itemEnv)\n node.add(item)\n }\n}\nRoot.origin = new Coordinate(0.0, 0.0)\n","export default class SpatialIndex {\n insert(itemEnv, item) {}\n remove(itemEnv, item) {}\n query() {\n if (arguments.length === 1) {\n const searchEnv = arguments[0]\n } else if (arguments.length === 2) {\n const searchEnv = arguments[0], visitor = arguments[1]\n }\n }\n}\n","import Root from './Root'\nimport SpatialIndex from '../SpatialIndex'\nimport ArrayList from '../../../../../java/util/ArrayList'\nimport ArrayListVisitor from '../ArrayListVisitor'\nimport Serializable from '../../../../../java/io/Serializable'\nimport Envelope from '../../geom/Envelope'\nexport default class Quadtree {\n constructor() {\n Quadtree.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._root = null\n this._minExtent = 1.0\n this._root = new Root()\n }\n static ensureExtent(itemEnv, minExtent) {\n let minx = itemEnv.getMinX()\n let maxx = itemEnv.getMaxX()\n let miny = itemEnv.getMinY()\n let maxy = itemEnv.getMaxY()\n if (minx !== maxx && miny !== maxy) return itemEnv\n if (minx === maxx) {\n minx = minx - minExtent / 2.0\n maxx = maxx + minExtent / 2.0\n }\n if (miny === maxy) {\n miny = miny - minExtent / 2.0\n maxy = maxy + minExtent / 2.0\n }\n return new Envelope(minx, maxx, miny, maxy)\n }\n size() {\n if (this._root !== null) return this._root.size()\n return 0\n }\n insert(itemEnv, item) {\n this.collectStats(itemEnv)\n const insertEnv = Quadtree.ensureExtent(itemEnv, this._minExtent)\n this._root.insert(insertEnv, item)\n }\n query() {\n if (arguments.length === 1) {\n const searchEnv = arguments[0]\n const visitor = new ArrayListVisitor()\n this.query(searchEnv, visitor)\n return visitor.getItems()\n } else if (arguments.length === 2) {\n const searchEnv = arguments[0], visitor = arguments[1]\n this._root.visit(searchEnv, visitor)\n }\n }\n queryAll() {\n const foundItems = new ArrayList()\n this._root.addAllItems(foundItems)\n return foundItems\n }\n remove(itemEnv, item) {\n const posEnv = Quadtree.ensureExtent(itemEnv, this._minExtent)\n return this._root.remove(posEnv, item)\n }\n collectStats(itemEnv) {\n const delX = itemEnv.getWidth()\n if (delX < this._minExtent && delX > 0.0) this._minExtent = delX\n const delY = itemEnv.getHeight()\n if (delY < this._minExtent && delY > 0.0) this._minExtent = delY\n }\n depth() {\n if (this._root !== null) return this._root.depth()\n return 0\n }\n isEmpty() {\n if (this._root === null) return true\n return this._root.isEmpty()\n }\n get interfaces_() {\n return [SpatialIndex, Serializable]\n }\n}\n","export default class Boundable {\n getBounds() {}\n}\n","import Boundable from './Boundable'\nimport Serializable from '../../../../../java/io/Serializable'\nexport default class ItemBoundable {\n constructor() {\n ItemBoundable.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._bounds = null\n this._item = null\n const bounds = arguments[0], item = arguments[1]\n this._bounds = bounds\n this._item = item\n }\n getItem() {\n return this._item\n }\n getBounds() {\n return this._bounds\n }\n get interfaces_() {\n return [Boundable, Serializable]\n }\n}\n","import ArrayList from '../../../../java/util/ArrayList'\nexport default class PriorityQueue {\n constructor() {\n PriorityQueue.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._size = null\n this._items = null\n this._size = 0\n this._items = new ArrayList()\n this._items.add(null)\n }\n poll() {\n if (this.isEmpty()) return null\n const minItem = this._items.get(1)\n this._items.set(1, this._items.get(this._size))\n this._size -= 1\n this.reorder(1)\n return minItem\n }\n size() {\n return this._size\n }\n reorder(hole) {\n let child = null\n const tmp = this._items.get(hole)\n for (; hole * 2 <= this._size; hole = child) {\n child = hole * 2\n if (child !== this._size && this._items.get(child + 1).compareTo(this._items.get(child)) < 0) child++\n if (this._items.get(child).compareTo(tmp) < 0) this._items.set(hole, this._items.get(child)); else break\n }\n this._items.set(hole, tmp)\n }\n clear() {\n this._size = 0\n this._items.clear()\n }\n peek() {\n if (this.isEmpty()) return null\n const minItem = this._items.get(1)\n return minItem\n }\n isEmpty() {\n return this._size === 0\n }\n add(x) {\n this._items.add(null)\n this._size += 1\n let hole = this._size\n this._items.set(0, x)\n for (; x.compareTo(this._items.get(Math.trunc(hole / 2))) < 0; hole /= 2) \n this._items.set(hole, this._items.get(Math.trunc(hole / 2)))\n \n this._items.set(hole, x)\n }\n}\n","import Boundable from './Boundable'\nimport ArrayList from '../../../../../java/util/ArrayList'\nimport Serializable from '../../../../../java/io/Serializable'\nimport Assert from '../../util/Assert'\nexport default class AbstractNode {\n constructor() {\n AbstractNode.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._childBoundables = new ArrayList()\n this._bounds = null\n this._level = null\n if (arguments.length === 0) {} else if (arguments.length === 1) {\n const level = arguments[0]\n this._level = level\n }\n }\n getLevel() {\n return this._level\n }\n size() {\n return this._childBoundables.size()\n }\n getChildBoundables() {\n return this._childBoundables\n }\n addChildBoundable(childBoundable) {\n Assert.isTrue(this._bounds === null)\n this._childBoundables.add(childBoundable)\n }\n isEmpty() {\n return this._childBoundables.isEmpty()\n }\n getBounds() {\n if (this._bounds === null) \n this._bounds = this.computeBounds()\n \n return this._bounds\n }\n get interfaces_() {\n return [Boundable, Serializable]\n }\n}\n","export default class EnvelopeDistance {\n static maxDistance(ax1, ay1, ax2, ay2, bx1, by1, bx2, by2) {\n let dist = EnvelopeDistance.distance(ax1, ay1, bx1, by1)\n dist = Math.max(dist, EnvelopeDistance.distance(ax1, ay1, bx2, by2))\n dist = Math.max(dist, EnvelopeDistance.distance(ax2, ay2, bx1, by1))\n dist = Math.max(dist, EnvelopeDistance.distance(ax2, ay2, bx2, by2))\n return dist\n }\n static distance(x1, y1, x2, y2) {\n const dx = x2 - x1\n const dy = y2 - y1\n return Math.sqrt(dx * dx + dy * dy)\n }\n static maximumDistance(env1, env2) {\n const minx = Math.min(env1.getMinX(), env2.getMinX())\n const miny = Math.min(env1.getMinY(), env2.getMinY())\n const maxx = Math.max(env1.getMaxX(), env2.getMaxX())\n const maxy = Math.max(env1.getMaxY(), env2.getMaxY())\n return EnvelopeDistance.distance(minx, miny, maxx, maxy)\n }\n static minMaxDistance(a, b) {\n const aminx = a.getMinX()\n const aminy = a.getMinY()\n const amaxx = a.getMaxX()\n const amaxy = a.getMaxY()\n const bminx = b.getMinX()\n const bminy = b.getMinY()\n const bmaxx = b.getMaxX()\n const bmaxy = b.getMaxY()\n let dist = EnvelopeDistance.maxDistance(aminx, aminy, aminx, amaxy, bminx, bminy, bminx, bmaxy)\n dist = Math.min(dist, EnvelopeDistance.maxDistance(aminx, aminy, aminx, amaxy, bminx, bminy, bmaxx, bminy))\n dist = Math.min(dist, EnvelopeDistance.maxDistance(aminx, aminy, aminx, amaxy, bmaxx, bmaxy, bminx, bmaxy))\n dist = Math.min(dist, EnvelopeDistance.maxDistance(aminx, aminy, aminx, amaxy, bmaxx, bmaxy, bmaxx, bminy))\n dist = Math.min(dist, EnvelopeDistance.maxDistance(aminx, aminy, amaxx, aminy, bminx, bminy, bminx, bmaxy))\n dist = Math.min(dist, EnvelopeDistance.maxDistance(aminx, aminy, amaxx, aminy, bminx, bminy, bmaxx, bminy))\n dist = Math.min(dist, EnvelopeDistance.maxDistance(aminx, aminy, amaxx, aminy, bmaxx, bmaxy, bminx, bmaxy))\n dist = Math.min(dist, EnvelopeDistance.maxDistance(aminx, aminy, amaxx, aminy, bmaxx, bmaxy, bmaxx, bminy))\n dist = Math.min(dist, EnvelopeDistance.maxDistance(amaxx, amaxy, aminx, amaxy, bminx, bminy, bminx, bmaxy))\n dist = Math.min(dist, EnvelopeDistance.maxDistance(amaxx, amaxy, aminx, amaxy, bminx, bminy, bmaxx, bminy))\n dist = Math.min(dist, EnvelopeDistance.maxDistance(amaxx, amaxy, aminx, amaxy, bmaxx, bmaxy, bminx, bmaxy))\n dist = Math.min(dist, EnvelopeDistance.maxDistance(amaxx, amaxy, aminx, amaxy, bmaxx, bmaxy, bmaxx, bminy))\n dist = Math.min(dist, EnvelopeDistance.maxDistance(amaxx, amaxy, amaxx, aminy, bminx, bminy, bminx, bmaxy))\n dist = Math.min(dist, EnvelopeDistance.maxDistance(amaxx, amaxy, amaxx, aminy, bminx, bminy, bmaxx, bminy))\n dist = Math.min(dist, EnvelopeDistance.maxDistance(amaxx, amaxy, amaxx, aminy, bmaxx, bmaxy, bminx, bmaxy))\n dist = Math.min(dist, EnvelopeDistance.maxDistance(amaxx, amaxy, amaxx, aminy, bmaxx, bmaxy, bmaxx, bminy))\n return dist\n }\n}\n","import IllegalArgumentException from '../../../../../java/lang/IllegalArgumentException'\nimport AbstractNode from './AbstractNode'\nimport EnvelopeDistance from './EnvelopeDistance'\nimport Comparable from '../../../../../java/lang/Comparable'\nexport default class BoundablePair {\n constructor() {\n BoundablePair.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._boundable1 = null\n this._boundable2 = null\n this._distance = null\n this._itemDistance = null\n const boundable1 = arguments[0], boundable2 = arguments[1], itemDistance = arguments[2]\n this._boundable1 = boundable1\n this._boundable2 = boundable2\n this._itemDistance = itemDistance\n this._distance = this.distance()\n }\n static area(b) {\n return b.getBounds().getArea()\n }\n static isComposite(item) {\n return item instanceof AbstractNode\n }\n maximumDistance() {\n return EnvelopeDistance.maximumDistance(this._boundable1.getBounds(), this._boundable2.getBounds())\n }\n expandToQueue(priQ, minDistance) {\n const isComp1 = BoundablePair.isComposite(this._boundable1)\n const isComp2 = BoundablePair.isComposite(this._boundable2)\n if (isComp1 && isComp2) {\n if (BoundablePair.area(this._boundable1) > BoundablePair.area(this._boundable2)) {\n this.expand(this._boundable1, this._boundable2, false, priQ, minDistance)\n return null\n } else {\n this.expand(this._boundable2, this._boundable1, true, priQ, minDistance)\n return null\n }\n } else if (isComp1) {\n this.expand(this._boundable1, this._boundable2, false, priQ, minDistance)\n return null\n } else if (isComp2) {\n this.expand(this._boundable2, this._boundable1, true, priQ, minDistance)\n return null\n }\n throw new IllegalArgumentException('neither boundable is composite')\n }\n isLeaves() {\n return !(BoundablePair.isComposite(this._boundable1) || BoundablePair.isComposite(this._boundable2))\n }\n compareTo(o) {\n const nd = o\n if (this._distance < nd._distance) return -1\n if (this._distance > nd._distance) return 1\n return 0\n }\n expand(bndComposite, bndOther, isFlipped, priQ, minDistance) {\n const children = bndComposite.getChildBoundables()\n for (let i = children.iterator(); i.hasNext(); ) {\n const child = i.next()\n let bp = null\n if (isFlipped) \n bp = new BoundablePair(bndOther, child, this._itemDistance)\n else \n bp = new BoundablePair(child, bndOther, this._itemDistance)\n \n if (bp.getDistance() < minDistance) \n priQ.add(bp)\n \n }\n }\n getBoundable(i) {\n if (i === 0) return this._boundable1\n return this._boundable2\n }\n getDistance() {\n return this._distance\n }\n distance() {\n if (this.isLeaves()) \n return this._itemDistance.distance(this._boundable1, this._boundable2)\n \n return this._boundable1.getBounds().distance(this._boundable2.getBounds())\n }\n get interfaces_() {\n return [Comparable]\n }\n}\n","import ItemBoundable from './ItemBoundable'\nimport hasInterface from '../../../../../hasInterface'\nimport ItemVisitor from '../ItemVisitor'\nimport AbstractNode from './AbstractNode'\nimport Collections from '../../../../../java/util/Collections'\nimport ArrayList from '../../../../../java/util/ArrayList'\nimport Serializable from '../../../../../java/io/Serializable'\nimport Assert from '../../util/Assert'\nimport List from '../../../../../java/util/List'\nexport default class AbstractSTRtree {\n constructor() {\n AbstractSTRtree.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._root = null\n this._built = false\n this._itemBoundables = new ArrayList()\n this._nodeCapacity = null\n if (arguments.length === 0) {\n AbstractSTRtree.constructor_.call(this, AbstractSTRtree.DEFAULT_NODE_CAPACITY)\n } else if (arguments.length === 1) {\n const nodeCapacity = arguments[0]\n Assert.isTrue(nodeCapacity > 1, 'Node capacity must be greater than 1')\n this._nodeCapacity = nodeCapacity\n }\n }\n static compareDoubles(a, b) {\n return a > b ? 1 : a < b ? -1 : 0\n }\n queryInternal() {\n if (hasInterface(arguments[2], ItemVisitor) && (arguments[0] instanceof Object && arguments[1] instanceof AbstractNode)) {\n const searchBounds = arguments[0], node = arguments[1], visitor = arguments[2]\n const childBoundables = node.getChildBoundables()\n for (let i = 0; i < childBoundables.size(); i++) {\n const childBoundable = childBoundables.get(i)\n if (!this.getIntersectsOp().intersects(childBoundable.getBounds(), searchBounds)) \n continue\n \n if (childBoundable instanceof AbstractNode) \n this.queryInternal(searchBounds, childBoundable, visitor)\n else if (childBoundable instanceof ItemBoundable) \n visitor.visitItem(childBoundable.getItem())\n else \n Assert.shouldNeverReachHere()\n \n }\n } else if (hasInterface(arguments[2], List) && (arguments[0] instanceof Object && arguments[1] instanceof AbstractNode)) {\n const searchBounds = arguments[0], node = arguments[1], matches = arguments[2]\n const childBoundables = node.getChildBoundables()\n for (let i = 0; i < childBoundables.size(); i++) {\n const childBoundable = childBoundables.get(i)\n if (!this.getIntersectsOp().intersects(childBoundable.getBounds(), searchBounds)) \n continue\n \n if (childBoundable instanceof AbstractNode) \n this.queryInternal(searchBounds, childBoundable, matches)\n else if (childBoundable instanceof ItemBoundable) \n matches.add(childBoundable.getItem())\n else \n Assert.shouldNeverReachHere()\n \n }\n }\n }\n getNodeCapacity() {\n return this._nodeCapacity\n }\n lastNode(nodes) {\n return nodes.get(nodes.size() - 1)\n }\n size() {\n if (arguments.length === 0) {\n if (this.isEmpty()) \n return 0\n \n this.build()\n return this.size(this._root)\n } else if (arguments.length === 1) {\n const node = arguments[0]\n let size = 0\n for (let i = node.getChildBoundables().iterator(); i.hasNext(); ) {\n const childBoundable = i.next()\n if (childBoundable instanceof AbstractNode) \n size += this.size(childBoundable)\n else if (childBoundable instanceof ItemBoundable) \n size += 1\n \n }\n return size\n }\n }\n removeItem(node, item) {\n let childToRemove = null\n for (let i = node.getChildBoundables().iterator(); i.hasNext(); ) {\n const childBoundable = i.next()\n if (childBoundable instanceof ItemBoundable) \n if (childBoundable.getItem() === item) childToRemove = childBoundable\n \n }\n if (childToRemove !== null) {\n node.getChildBoundables().remove(childToRemove)\n return true\n }\n return false\n }\n itemsTree() {\n if (arguments.length === 0) {\n this.build()\n const valuesTree = this.itemsTree(this._root)\n if (valuesTree === null) return new ArrayList()\n return valuesTree\n } else if (arguments.length === 1) {\n const node = arguments[0]\n const valuesTreeForNode = new ArrayList()\n for (let i = node.getChildBoundables().iterator(); i.hasNext(); ) {\n const childBoundable = i.next()\n if (childBoundable instanceof AbstractNode) {\n const valuesTreeForChild = this.itemsTree(childBoundable)\n if (valuesTreeForChild !== null) valuesTreeForNode.add(valuesTreeForChild)\n } else if (childBoundable instanceof ItemBoundable) {\n valuesTreeForNode.add(childBoundable.getItem())\n } else {\n Assert.shouldNeverReachHere()\n }\n }\n if (valuesTreeForNode.size() <= 0) return null\n return valuesTreeForNode\n }\n }\n insert(bounds, item) {\n Assert.isTrue(!this._built, 'Cannot insert items into an STR packed R-tree after it has been built.')\n this._itemBoundables.add(new ItemBoundable(bounds, item))\n }\n boundablesAtLevel() {\n if (arguments.length === 1) {\n const level = arguments[0]\n const boundables = new ArrayList()\n this.boundablesAtLevel(level, this._root, boundables)\n return boundables\n } else if (arguments.length === 3) {\n const level = arguments[0], top = arguments[1], boundables = arguments[2]\n Assert.isTrue(level > -2)\n if (top.getLevel() === level) {\n boundables.add(top)\n return null\n }\n for (let i = top.getChildBoundables().iterator(); i.hasNext(); ) {\n const boundable = i.next()\n if (boundable instanceof AbstractNode) {\n this.boundablesAtLevel(level, boundable, boundables)\n } else {\n Assert.isTrue(boundable instanceof ItemBoundable)\n if (level === -1) \n boundables.add(boundable)\n \n }\n }\n return null\n }\n }\n query() {\n if (arguments.length === 1) {\n const searchBounds = arguments[0]\n this.build()\n const matches = new ArrayList()\n if (this.isEmpty()) \n return matches\n \n if (this.getIntersectsOp().intersects(this._root.getBounds(), searchBounds)) \n this.queryInternal(searchBounds, this._root, matches)\n \n return matches\n } else if (arguments.length === 2) {\n const searchBounds = arguments[0], visitor = arguments[1]\n this.build()\n if (this.isEmpty()) \n return null\n \n if (this.getIntersectsOp().intersects(this._root.getBounds(), searchBounds)) \n this.queryInternal(searchBounds, this._root, visitor)\n \n }\n }\n build() {\n if (this._built) return null\n this._root = this._itemBoundables.isEmpty() ? this.createNode(0) : this.createHigherLevels(this._itemBoundables, -1)\n this._itemBoundables = null\n this._built = true\n }\n getRoot() {\n this.build()\n return this._root\n }\n remove() {\n if (arguments.length === 2) {\n const searchBounds = arguments[0], item = arguments[1]\n this.build()\n if (this.getIntersectsOp().intersects(this._root.getBounds(), searchBounds)) \n return this.remove(searchBounds, this._root, item)\n \n return false\n } else if (arguments.length === 3) {\n const searchBounds = arguments[0], node = arguments[1], item = arguments[2]\n let found = this.removeItem(node, item)\n if (found) return true\n let childToPrune = null\n for (let i = node.getChildBoundables().iterator(); i.hasNext(); ) {\n const childBoundable = i.next()\n if (!this.getIntersectsOp().intersects(childBoundable.getBounds(), searchBounds)) \n continue\n \n if (childBoundable instanceof AbstractNode) {\n found = this.remove(searchBounds, childBoundable, item)\n if (found) {\n childToPrune = childBoundable\n break\n }\n }\n }\n if (childToPrune !== null) \n if (childToPrune.getChildBoundables().isEmpty()) \n node.getChildBoundables().remove(childToPrune)\n \n \n return found\n }\n }\n createHigherLevels(boundablesOfALevel, level) {\n Assert.isTrue(!boundablesOfALevel.isEmpty())\n const parentBoundables = this.createParentBoundables(boundablesOfALevel, level + 1)\n if (parentBoundables.size() === 1) \n return parentBoundables.get(0)\n \n return this.createHigherLevels(parentBoundables, level + 1)\n }\n depth() {\n if (arguments.length === 0) {\n if (this.isEmpty()) \n return 0\n \n this.build()\n return this.depth(this._root)\n } else if (arguments.length === 1) {\n const node = arguments[0]\n let maxChildDepth = 0\n for (let i = node.getChildBoundables().iterator(); i.hasNext(); ) {\n const childBoundable = i.next()\n if (childBoundable instanceof AbstractNode) {\n const childDepth = this.depth(childBoundable)\n if (childDepth > maxChildDepth) maxChildDepth = childDepth\n }\n }\n return maxChildDepth + 1\n }\n }\n createParentBoundables(childBoundables, newLevel) {\n Assert.isTrue(!childBoundables.isEmpty())\n const parentBoundables = new ArrayList()\n parentBoundables.add(this.createNode(newLevel))\n const sortedChildBoundables = new ArrayList(childBoundables)\n Collections.sort(sortedChildBoundables, this.getComparator())\n for (let i = sortedChildBoundables.iterator(); i.hasNext(); ) {\n const childBoundable = i.next()\n if (this.lastNode(parentBoundables).getChildBoundables().size() === this.getNodeCapacity()) \n parentBoundables.add(this.createNode(newLevel))\n \n this.lastNode(parentBoundables).addChildBoundable(childBoundable)\n }\n return parentBoundables\n }\n isEmpty() {\n if (!this._built) return this._itemBoundables.isEmpty()\n return this._root.isEmpty()\n }\n get interfaces_() {\n return [Serializable]\n }\n}\nfunction IntersectsOp() {}\nAbstractSTRtree.IntersectsOp = IntersectsOp\nAbstractSTRtree.DEFAULT_NODE_CAPACITY = 10\n","export default class ItemDistance {\n distance(item1, item2) {}\n}\n","import ItemBoundable from './ItemBoundable'\nimport PriorityQueue from '../../util/PriorityQueue'\nimport hasInterface from '../../../../../hasInterface'\nimport SpatialIndex from '../SpatialIndex'\nimport AbstractNode from './AbstractNode'\nimport Double from '../../../../../java/lang/Double'\nimport Collections from '../../../../../java/util/Collections'\nimport BoundablePair from './BoundablePair'\nimport ArrayList from '../../../../../java/util/ArrayList'\nimport Comparator from '../../../../../java/util/Comparator'\nimport Serializable from '../../../../../java/io/Serializable'\nimport Envelope from '../../geom/Envelope'\nimport Assert from '../../util/Assert'\nimport AbstractSTRtree from './AbstractSTRtree'\nimport ItemDistance from './ItemDistance'\nexport default class STRtree extends AbstractSTRtree {\n constructor() {\n super()\n STRtree.constructor_.apply(this, arguments)\n }\n static constructor_() {\n if (arguments.length === 0) {\n STRtree.constructor_.call(this, STRtree.DEFAULT_NODE_CAPACITY)\n } else if (arguments.length === 1) {\n const nodeCapacity = arguments[0]\n AbstractSTRtree.constructor_.call(this, nodeCapacity)\n }\n }\n static centreX(e) {\n return STRtree.avg(e.getMinX(), e.getMaxX())\n }\n static avg(a, b) {\n return (a + b) / 2\n }\n static getItems(kNearestNeighbors) {\n const items = new Array(kNearestNeighbors.size()).fill(null)\n let count = 0\n while (!kNearestNeighbors.isEmpty()) {\n const bp = kNearestNeighbors.poll()\n items[count] = bp.getBoundable(0).getItem()\n count++\n }\n return items\n }\n static centreY(e) {\n return STRtree.avg(e.getMinY(), e.getMaxY())\n }\n createParentBoundablesFromVerticalSlices(verticalSlices, newLevel) {\n Assert.isTrue(verticalSlices.length > 0)\n const parentBoundables = new ArrayList()\n for (let i = 0; i < verticalSlices.length; i++) \n parentBoundables.addAll(this.createParentBoundablesFromVerticalSlice(verticalSlices[i], newLevel))\n \n return parentBoundables\n }\n nearestNeighbourK() {\n if (arguments.length === 2) {\n const initBndPair = arguments[0], k = arguments[1]\n return this.nearestNeighbourK(initBndPair, Double.POSITIVE_INFINITY, k)\n } else if (arguments.length === 3) {\n const initBndPair = arguments[0], maxDistance = arguments[1], k = arguments[2]\n let distanceLowerBound = maxDistance\n const priQ = new PriorityQueue()\n priQ.add(initBndPair)\n const kNearestNeighbors = new PriorityQueue()\n while (!priQ.isEmpty() && distanceLowerBound >= 0.0) {\n const bndPair = priQ.poll()\n const pairDistance = bndPair.getDistance()\n if (pairDistance >= distanceLowerBound) \n break\n \n if (bndPair.isLeaves()) \n if (kNearestNeighbors.size() < k) {\n kNearestNeighbors.add(bndPair)\n } else {\n const bp1 = kNearestNeighbors.peek()\n if (bp1.getDistance() > pairDistance) {\n kNearestNeighbors.poll()\n kNearestNeighbors.add(bndPair)\n }\n const bp2 = kNearestNeighbors.peek()\n distanceLowerBound = bp2.getDistance()\n }\n else \n bndPair.expandToQueue(priQ, distanceLowerBound)\n \n }\n return STRtree.getItems(kNearestNeighbors)\n }\n }\n createNode(level) {\n return new STRtreeNode(level)\n }\n size() {\n if (arguments.length === 0) \n return super.size.call(this)\n else return super.size.apply(this, arguments)\n }\n insert() {\n if (arguments.length === 2 && (arguments[1] instanceof Object && arguments[0] instanceof Envelope)) {\n const itemEnv = arguments[0], item = arguments[1]\n if (itemEnv.isNull()) \n return null\n \n super.insert.call(this, itemEnv, item)\n } else {\n return super.insert.apply(this, arguments)\n }\n }\n getIntersectsOp() {\n return STRtree.intersectsOp\n }\n verticalSlices(childBoundables, sliceCount) {\n const sliceCapacity = Math.trunc(Math.ceil(childBoundables.size() / sliceCount))\n const slices = new Array(sliceCount).fill(null)\n const i = childBoundables.iterator()\n for (let j = 0; j < sliceCount; j++) {\n slices[j] = new ArrayList()\n let boundablesAddedToSlice = 0\n while (i.hasNext() && boundablesAddedToSlice < sliceCapacity) {\n const childBoundable = i.next()\n slices[j].add(childBoundable)\n boundablesAddedToSlice++\n }\n }\n return slices\n }\n query() {\n if (arguments.length === 1) {\n const searchEnv = arguments[0]\n return super.query.call(this, searchEnv)\n } else if (arguments.length === 2) {\n const searchEnv = arguments[0], visitor = arguments[1]\n super.query.call(this, searchEnv, visitor)\n }\n }\n getComparator() {\n return STRtree.yComparator\n }\n createParentBoundablesFromVerticalSlice(childBoundables, newLevel) {\n return super.createParentBoundables.call(this, childBoundables, newLevel)\n }\n remove() {\n if (arguments.length === 2 && (arguments[1] instanceof Object && arguments[0] instanceof Envelope)) {\n const itemEnv = arguments[0], item = arguments[1]\n return super.remove.call(this, itemEnv, item)\n } else {\n return super.remove.apply(this, arguments)\n }\n }\n depth() {\n if (arguments.length === 0) \n return super.depth.call(this)\n else return super.depth.apply(this, arguments)\n }\n createParentBoundables(childBoundables, newLevel) {\n Assert.isTrue(!childBoundables.isEmpty())\n const minLeafCount = Math.trunc(Math.ceil(childBoundables.size() / this.getNodeCapacity()))\n const sortedChildBoundables = new ArrayList(childBoundables)\n Collections.sort(sortedChildBoundables, STRtree.xComparator)\n const verticalSlices = this.verticalSlices(sortedChildBoundables, Math.trunc(Math.ceil(Math.sqrt(minLeafCount))))\n return this.createParentBoundablesFromVerticalSlices(verticalSlices, newLevel)\n }\n nearestNeighbour() {\n if (arguments.length === 1) {\n if (hasInterface(arguments[0], ItemDistance)) {\n const itemDist = arguments[0]\n if (this.isEmpty()) return null\n const bp = new BoundablePair(this.getRoot(), this.getRoot(), itemDist)\n return this.nearestNeighbour(bp)\n } else if (arguments[0] instanceof BoundablePair) {\n const initBndPair = arguments[0]\n let distanceLowerBound = Double.POSITIVE_INFINITY\n let minPair = null\n const priQ = new PriorityQueue()\n priQ.add(initBndPair)\n while (!priQ.isEmpty() && distanceLowerBound > 0.0) {\n const bndPair = priQ.poll()\n const pairDistance = bndPair.getDistance()\n if (pairDistance >= distanceLowerBound) break\n if (bndPair.isLeaves()) {\n distanceLowerBound = pairDistance\n minPair = bndPair\n } else {\n bndPair.expandToQueue(priQ, distanceLowerBound)\n }\n }\n if (minPair === null) return null\n return [minPair.getBoundable(0).getItem(), minPair.getBoundable(1).getItem()]\n }\n } else if (arguments.length === 2) {\n const tree = arguments[0], itemDist = arguments[1]\n if (this.isEmpty() || tree.isEmpty()) return null\n const bp = new BoundablePair(this.getRoot(), tree.getRoot(), itemDist)\n return this.nearestNeighbour(bp)\n } else if (arguments.length === 3) {\n const env = arguments[0], item = arguments[1], itemDist = arguments[2]\n const bnd = new ItemBoundable(env, item)\n const bp = new BoundablePair(this.getRoot(), bnd, itemDist)\n return this.nearestNeighbour(bp)[0]\n } else if (arguments.length === 4) {\n const env = arguments[0], item = arguments[1], itemDist = arguments[2], k = arguments[3]\n const bnd = new ItemBoundable(env, item)\n const bp = new BoundablePair(this.getRoot(), bnd, itemDist)\n return this.nearestNeighbourK(bp, k)\n }\n }\n isWithinDistance() {\n if (arguments.length === 2) {\n const initBndPair = arguments[0], maxDistance = arguments[1]\n let distanceUpperBound = Double.POSITIVE_INFINITY\n const priQ = new PriorityQueue()\n priQ.add(initBndPair)\n while (!priQ.isEmpty()) {\n const bndPair = priQ.poll()\n const pairDistance = bndPair.getDistance()\n if (pairDistance > maxDistance) return false\n if (bndPair.maximumDistance() <= maxDistance) return true\n if (bndPair.isLeaves()) {\n distanceUpperBound = pairDistance\n if (distanceUpperBound <= maxDistance) return true\n } else {\n bndPair.expandToQueue(priQ, distanceUpperBound)\n }\n }\n return false\n } else if (arguments.length === 3) {\n const tree = arguments[0], itemDist = arguments[1], maxDistance = arguments[2]\n const bp = new BoundablePair(this.getRoot(), tree.getRoot(), itemDist)\n return this.isWithinDistance(bp, maxDistance)\n }\n }\n get interfaces_() {\n return [SpatialIndex, Serializable]\n }\n}\nclass STRtreeNode extends AbstractNode {\n constructor() {\n super()\n STRtreeNode.constructor_.apply(this, arguments)\n }\n static constructor_() {\n const level = arguments[0]\n AbstractNode.constructor_.call(this, level)\n }\n computeBounds() {\n let bounds = null\n for (let i = this.getChildBoundables().iterator(); i.hasNext(); ) {\n const childBoundable = i.next()\n if (bounds === null) \n bounds = new Envelope(childBoundable.getBounds())\n else \n bounds.expandToInclude(childBoundable.getBounds())\n \n }\n return bounds\n }\n}\nSTRtree.STRtreeNode = STRtreeNode\nSTRtree.xComparator = new (class {\n get interfaces_() {\n return [Comparator]\n }\n compare(o1, o2) {\n return AbstractSTRtree.compareDoubles(STRtree.centreX(o1.getBounds()), STRtree.centreX(o2.getBounds()))\n }\n})()\nSTRtree.yComparator = new (class {\n get interfaces_() {\n return [Comparator]\n }\n compare(o1, o2) {\n return AbstractSTRtree.compareDoubles(STRtree.centreY(o1.getBounds()), STRtree.centreY(o2.getBounds()))\n }\n})()\nSTRtree.intersectsOp = new (class {\n get interfaces_() {\n return [IntersectsOp]\n }\n intersects(aBounds, bBounds) {\n return aBounds.intersects(bBounds)\n }\n})()\nSTRtree.DEFAULT_NODE_CAPACITY = 10\n","import Coordinate from '../geom/Coordinate'\nimport GeometryFactory from '../geom/GeometryFactory'\n\nconst geometryTypes = ['Point', 'MultiPoint', 'LineString', 'MultiLineString', 'Polygon', 'MultiPolygon']\n\n/**\n * Class for reading and writing Well-Known Text.Create a new parser for GeoJSON\n * NOTE: Adapted from OpenLayers 2.11 implementation.\n */\n\n/**\n * Create a new parser for GeoJSON\n *\n * @param {GeometryFactory} geometryFactory\n * @return An instance of GeoJsonParser.\n * @constructor\n * @private\n */\nexport default class GeoJSONParser {\n constructor(geometryFactory) {\n this.geometryFactory = geometryFactory || new GeometryFactory()\n }\n\n /**\n * Deserialize a GeoJSON object and return the Geometry or Feature(Collection) with JSTS Geometries\n *\n * @param {}\n * A GeoJSON object.\n * @return {} A Geometry instance or object representing a Feature(Collection) with Geometry instances.\n * @private\n */\n read(json) {\n let obj\n if (typeof json === 'string')\n obj = JSON.parse(json)\n else obj = json\n\n const type = obj.type\n\n if (!parse[type]) throw new Error('Unknown GeoJSON type: ' + obj.type)\n\n if (geometryTypes.indexOf(type) !== -1)\n return parse[type].call(this, obj.coordinates)\n else if (type === 'GeometryCollection') return parse[type].call(this, obj.geometries)\n\n // feature or feature collection\n return parse[type].call(this, obj)\n }\n\n /**\n * Serialize a Geometry object into GeoJSON\n *\n * @param {Geometry}\n * geometry A Geometry or array of Geometries.\n * @return {Object} A GeoJSON object represting the input Geometry/Geometries.\n * @private\n */\n write(geometry) {\n const type = geometry.getGeometryType()\n\n if (!extract[type]) throw new Error('Geometry is not supported')\n\n return extract[type].call(this, geometry)\n }\n}\n\nconst parse = {\n /**\n * Parse a GeoJSON Feature object\n *\n * @param {Object}\n * obj Object to parse.\n *\n * @return {Object} Feature with geometry/bbox converted to JSTS Geometries.\n */\n Feature: function(obj) {\n const feature = {}\n\n for (const key in obj) feature[key] = obj[key]\n\n if (obj.geometry) {\n const type = obj.geometry.type\n if (!parse[type]) throw new Error('Unknown GeoJSON type: ' + obj.type)\n feature.geometry = this.read(obj.geometry)\n }\n\n if (obj.bbox) feature.bbox = parse.bbox.call(this, obj.bbox)\n\n return feature\n },\n\n /**\n * Parse a GeoJSON FeatureCollection object\n *\n * @param {Object}\n * obj Object to parse.\n *\n * @return {Object} FeatureCollection with geometry/bbox converted to JSTS Geometries.\n */\n FeatureCollection: function(obj) {\n const featureCollection = {}\n\n if (obj.features) {\n featureCollection.features = []\n\n for (let i = 0; i < obj.features.length; ++i) featureCollection.features.push(this.read(obj.features[i]))\n }\n\n if (obj.bbox) featureCollection.bbox = this.parse.bbox.call(this, obj.bbox)\n\n return featureCollection\n },\n\n /**\n * Convert the ordinates in an array to an array of Coordinates\n *\n * @param {Array}\n * array Array with {Number}s.\n *\n * @return {Array} Array with Coordinates.\n */\n coordinates: function(array) {\n const coordinates = []\n for (let i = 0; i < array.length; ++i) {\n const sub = array[i]\n coordinates.push(new Coordinate(sub[0], sub[1]))\n }\n return coordinates\n },\n\n /**\n * Convert the bbox to a LinearRing\n *\n * @param {Array}\n * array Array with [xMin, yMin, xMax, yMax].\n *\n * @return {Array} Array with Coordinates.\n */\n bbox: function(array) {\n return this.geometryFactory.createLinearRing([\n new Coordinate(array[0], array[1]),\n new Coordinate(array[2], array[1]),\n new Coordinate(array[2], array[3]),\n new Coordinate(array[0], array[3]),\n new Coordinate(array[0], array[1])\n ])\n },\n\n /**\n * Convert an Array with ordinates to a Point\n *\n * @param {Array}\n * array Array with ordinates.\n *\n * @return {Point} Point.\n */\n Point: function(array) {\n const coordinate = new Coordinate(...array)\n return this.geometryFactory.createPoint(coordinate)\n },\n\n /**\n * Convert an Array with coordinates to a MultiPoint\n *\n * @param {Array}\n * array Array with coordinates.\n *\n * @return {MultiPoint} MultiPoint.\n */\n MultiPoint: function(array) {\n const points = []\n for (let i = 0; i < array.length; ++i) points.push(parse.Point.call(this, array[i]))\n return this.geometryFactory.createMultiPoint(points)\n },\n\n /**\n * Convert an Array with coordinates to a LineString\n *\n * @param {Array}\n * array Array with coordinates.\n *\n * @return {LineString} LineString.\n */\n LineString: function(array) {\n const coordinates = parse.coordinates.call(this, array)\n return this.geometryFactory.createLineString(coordinates)\n },\n\n /**\n * Convert an Array with coordinates to a MultiLineString\n *\n * @param {Array}\n * array Array with coordinates.\n *\n * @return {MultiLineString} MultiLineString.\n */\n MultiLineString: function(array) {\n const lineStrings = []\n for (let i = 0; i < array.length; ++i) lineStrings.push(parse.LineString.call(this, array[i]))\n return this.geometryFactory.createMultiLineString(lineStrings)\n },\n\n /**\n * Convert an Array to a Polygon\n *\n * @param {Array}\n * array Array with shell and holes.\n *\n * @return {Polygon} Polygon.\n */\n Polygon: function(array) {\n const shellCoordinates = parse.coordinates.call(this, array[0])\n const shell = this.geometryFactory.createLinearRing(shellCoordinates)\n const holes = []\n for (let i = 1; i < array.length; ++i) {\n const hole = array[i]\n const coordinates = parse.coordinates.call(this, hole)\n const linearRing = this.geometryFactory.createLinearRing(coordinates)\n holes.push(linearRing)\n }\n return this.geometryFactory.createPolygon(shell, holes)\n },\n\n /**\n * Convert an Array to a MultiPolygon\n *\n * @param {Array}\n * array Array of arrays with shell and rings.\n *\n * @return {MultiPolygon} MultiPolygon.\n */\n MultiPolygon: function(array) {\n const polygons = []\n for (let i = 0; i < array.length; ++i) {\n const polygon = array[i]\n polygons.push(parse.Polygon.call(this, polygon))\n }\n return this.geometryFactory.createMultiPolygon(polygons)\n },\n\n /**\n * Convert an Array to a GeometryCollection\n *\n * @param {Array}\n * array Array of GeoJSON geometries.\n *\n * @return {GeometryCollection} GeometryCollection.\n */\n GeometryCollection: function(array) {\n const geometries = []\n for (let i = 0; i < array.length; ++i) {\n const geometry = array[i]\n geometries.push(this.read(geometry))\n }\n return this.geometryFactory.createGeometryCollection(geometries)\n }\n}\n\nconst extract = {\n /**\n * Convert a Coordinate to an Array\n *\n * @param {Coordinate}\n * coordinate Coordinate to convert.\n *\n * @return {Array} Array of ordinates.\n */\n coordinate: function(coordinate) {\n const a = [coordinate.x, coordinate.y]\n if (coordinate.z)\n a.push(coordinate.z)\n if (coordinate.m)\n a.push(coordinate.m)\n return a\n },\n\n /**\n * Convert a Point to a GeoJSON object\n *\n * @param {Point}\n * point Point to convert.\n *\n * @return {Array} Array of 2 ordinates (paired to a coordinate).\n */\n Point: function(point) {\n const array = extract.coordinate.call(this, point.getCoordinate())\n return {\n type: 'Point',\n coordinates: array\n }\n },\n\n /**\n * Convert a MultiPoint to a GeoJSON object\n *\n * @param {MultiPoint}\n * multipoint MultiPoint to convert.\n *\n * @return {Array} Array of coordinates.\n */\n MultiPoint: function(multipoint) {\n const array = []\n for (let i = 0; i < multipoint._geometries.length; ++i) {\n const point = multipoint._geometries[i]\n const geoJson = extract.Point.call(this, point)\n array.push(geoJson.coordinates)\n }\n return {\n type: 'MultiPoint',\n coordinates: array\n }\n },\n\n /**\n * Convert a LineString to a GeoJSON object\n *\n * @param {LineString}\n * linestring LineString to convert.\n *\n * @return {Array} Array of coordinates.\n */\n LineString: function(linestring) {\n const array = []\n const coordinates = linestring.getCoordinates()\n for (let i = 0; i < coordinates.length; ++i) {\n const coordinate = coordinates[i]\n array.push(extract.coordinate.call(this, coordinate))\n }\n return {\n type: 'LineString',\n coordinates: array\n }\n },\n\n /**\n * Convert a MultiLineString to a GeoJSON object\n *\n * @param {MultiLineString}\n * multilinestring MultiLineString to convert.\n *\n * @return {Array} Array of Array of coordinates.\n */\n MultiLineString: function(multilinestring) {\n const array = []\n for (let i = 0; i < multilinestring._geometries.length; ++i) {\n const linestring = multilinestring._geometries[i]\n const geoJson = extract.LineString.call(this, linestring)\n array.push(geoJson.coordinates)\n }\n return {\n type: 'MultiLineString',\n coordinates: array\n }\n },\n\n /**\n * Convert a Polygon to a GeoJSON object\n *\n * @param {Polygon}\n * polygon Polygon to convert.\n *\n * @return {Array} Array with shell, holes.\n */\n Polygon: function(polygon) {\n const array = []\n const shellGeoJson = extract.LineString.call(this, polygon._shell)\n array.push(shellGeoJson.coordinates)\n for (let i = 0; i < polygon._holes.length; ++i) {\n const hole = polygon._holes[i]\n const holeGeoJson = extract.LineString.call(this, hole)\n array.push(holeGeoJson.coordinates)\n }\n return {\n type: 'Polygon',\n coordinates: array\n }\n },\n\n /**\n * Convert a MultiPolygon to a GeoJSON object\n *\n * @param {MultiPolygon}\n * multipolygon MultiPolygon to convert.\n *\n * @return {Array} Array of polygons.\n */\n MultiPolygon: function(multipolygon) {\n const array = []\n for (let i = 0; i < multipolygon._geometries.length; ++i) {\n const polygon = multipolygon._geometries[i]\n const geoJson = extract.Polygon.call(this, polygon)\n array.push(geoJson.coordinates)\n }\n return {\n type: 'MultiPolygon',\n coordinates: array\n }\n },\n\n /**\n * Convert a GeometryCollection to a GeoJSON object\n *\n * @param {GeometryCollection}\n * collection GeometryCollection to convert.\n *\n * @return {Array} Array of geometries.\n */\n GeometryCollection: function(collection) {\n const array = []\n for (let i = 0; i < collection._geometries.length; ++i) {\n const geometry = collection._geometries[i]\n const type = geometry.getGeometryType()\n array.push(extract[type].call(this, geometry))\n }\n return {\n type: 'GeometryCollection',\n geometries: array\n }\n }\n}\n","/**\n * @module org/locationtech/jts/io/GeoJSONReader\n */\n\nimport GeometryFactory from '../geom/GeometryFactory'\nimport GeoJSONParser from './GeoJSONParser'\n\n/**\n * Converts a geometry in GeoJSON to a {@link Geometry}.\n */\nexport default class GeoJSONReader {\n /**\n * A GeoJSONReader is parameterized by a GeometryFactory,\n * to allow it to create Geometry objects of the appropriate\n * implementation. In particular, the GeometryFactory determines\n * the PrecisionModel and SRID that is used.\n *\n * @param {GeometryFactory} geometryFactory\n */\n constructor(geometryFactory) {\n this.parser = new GeoJSONParser(geometryFactory || new GeometryFactory())\n }\n\n /**\n * Reads a GeoJSON representation of a {@link Geometry}\n *\n * Will also parse GeoJSON Features/FeatureCollections as custom objects.\n *\n * @param {Object|String} geoJson a GeoJSON Object or String.\n * @return {Geometry|Object} a Geometry or Feature/FeatureCollection representation.\n * @memberof module:org/locationtech/jts/io/GeoJSONReader#\n */\n read(geoJson) {\n const geometry = this.parser.read(geoJson)\n return geometry\n }\n}\n","/**\n * @module org/locationtech/jts/io/GeoJSONWriter\n */\n\nimport GeoJSONParser from './GeoJSONParser'\n\n/**\n * Writes the GeoJSON representation of a {@link Geometry}. The\n * The GeoJSON format is defined here.\n */\nexport default class GeoJSONWriter {\n /**\n * The GeoJSONWriter outputs coordinates rounded to the precision\n * model. Only the maximum number of decimal places necessary to represent the\n * ordinates to the required precision will be output.\n *\n * @param {GeometryFactory} geometryFactory\n * @constructor\n */\n constructor() {\n this.parser = new GeoJSONParser(this.geometryFactory)\n }\n\n /**\n * Converts a Geometry to its GeoJSON representation.\n *\n * @param {Geometry}\n * geometry a Geometry to process.\n * @return {Object} The GeoJSON representation of the Geometry.\n * @memberof module:org/locationtech/jts/io/GeoJSONWriter#\n */\n write(geometry) {\n return this.parser.write(geometry)\n }\n}\n","/**\n * @module org/locationtech/jts/io/WKTReader\n */\n\nimport GeometryFactory from '../geom/GeometryFactory'\nimport WKTParser from './WKTParser'\n\n/**\n * Converts a geometry in Well-Known Text format to a {@link Geometry}.\n *

\n * WKTReader supports extracting Geometry objects\n * from either {@link Reader}s or {@link String}s. This allows it to function\n * as a parser to read Geometry objects from text blocks embedded\n * in other data formats (e.g. XML).\n */\n\nexport default class WKTReader {\n /**\n * A WKTReader is parameterized by a GeometryFactory,\n * to allow it to create Geometry objects of the appropriate\n * implementation. In particular, the GeometryFactory determines\n * the PrecisionModel and SRID that is used.\n * @param {GeometryFactory} geometryFactory\n */\n constructor(geometryFactory) {\n this.parser = new WKTParser(geometryFactory || new GeometryFactory())\n }\n\n /**\n * Reads a Well-Known Text representation of a {@link Geometry}\n *\n * @param {string}\n * wkt a string (see the OpenGIS Simple Features\n * Specification).\n * @return {Geometry} a Geometry read from\n * string.\n * @memberof module:org/locationtech/jts/io/WKTReader#\n */\n read(wkt) {\n return this.parser.read(wkt)\n }\n}\n","/* eslint-disable no-undef */\n\n/**\n * @module org/locationtech/jts/io/OL3Parser\n */\n\nimport Coordinate from '../geom/Coordinate'\nimport GeometryFactory from '../geom/GeometryFactory'\n\nfunction p2c(p) {\n return [p.x, p.y]\n}\n\nexport default class OL3Parser {\n /**\n * OpenLayers Geometry parser and writer\n * @param {GeometryFactory} geometryFactory\n * @param {ol} olReference\n */\n constructor(geometryFactory, olReference) {\n this.geometryFactory = geometryFactory || new GeometryFactory()\n this.ol = olReference || (typeof ol !== 'undefined' && ol)\n }\n\n /**\n * Inject OpenLayers geom classes\n */\n inject(Point, LineString, LinearRing, Polygon, MultiPoint, MultiLineString, MultiPolygon, GeometryCollection) {\n this.ol = {\n geom: {\n Point, LineString, LinearRing, Polygon, MultiPoint, MultiLineString, MultiPolygon, GeometryCollection\n }\n }\n }\n\n /**\n * @param geometry {ol.geom.Geometry}\n * @return {Geometry}\n * @memberof module:org/locationtech/jts/io/OL3Parser#\n */\n read(geometry) {\n const ol = this.ol\n if (geometry instanceof ol.geom.Point)\n return this.convertFromPoint(geometry)\n else if (geometry instanceof ol.geom.LineString)\n return this.convertFromLineString(geometry)\n else if (geometry instanceof ol.geom.LinearRing)\n return this.convertFromLinearRing(geometry)\n else if (geometry instanceof ol.geom.Polygon)\n return this.convertFromPolygon(geometry)\n else if (geometry instanceof ol.geom.MultiPoint)\n return this.convertFromMultiPoint(geometry)\n else if (geometry instanceof ol.geom.MultiLineString)\n return this.convertFromMultiLineString(geometry)\n else if (geometry instanceof ol.geom.MultiPolygon)\n return this.convertFromMultiPolygon(geometry)\n else if (geometry instanceof ol.geom.GeometryCollection) return this.convertFromCollection(geometry)\n }\n\n convertFromPoint(point) {\n const coordinates = point.getCoordinates()\n return this.geometryFactory.createPoint(new Coordinate(coordinates[0], coordinates[1]))\n }\n\n convertFromLineString(lineString) {\n return this.geometryFactory.createLineString(lineString.getCoordinates().map(function(coordinates) {\n return new Coordinate(coordinates[0], coordinates[1])\n }))\n }\n\n convertFromLinearRing(linearRing) {\n return this.geometryFactory.createLinearRing(linearRing.getCoordinates().map(function(coordinates) {\n return new Coordinate(coordinates[0], coordinates[1])\n }))\n }\n\n convertFromPolygon(polygon) {\n const linearRings = polygon.getLinearRings()\n let shell = null\n const holes = []\n for (let i = 0; i < linearRings.length; i++) {\n const linearRing = this.convertFromLinearRing(linearRings[i])\n if (i === 0)\n shell = linearRing\n else holes.push(linearRing)\n }\n return this.geometryFactory.createPolygon(shell, holes)\n }\n\n convertFromMultiPoint(multiPoint) {\n const points = multiPoint.getPoints().map(function(point) {\n return this.convertFromPoint(point)\n }, this)\n return this.geometryFactory.createMultiPoint(points)\n }\n\n convertFromMultiLineString(multiLineString) {\n const lineStrings = multiLineString.getLineStrings().map(function(lineString) {\n return this.convertFromLineString(lineString)\n }, this)\n return this.geometryFactory.createMultiLineString(lineStrings)\n }\n\n convertFromMultiPolygon(multiPolygon) {\n const polygons = multiPolygon.getPolygons().map(function(polygon) {\n return this.convertFromPolygon(polygon)\n }, this)\n return this.geometryFactory.createMultiPolygon(polygons)\n }\n\n convertFromCollection(collection) {\n const geometries = collection.getGeometries().map(function(geometry) {\n return this.read(geometry)\n }, this)\n return this.geometryFactory.createGeometryCollection(geometries)\n }\n\n /**\n * @param geometry\n * {Geometry}\n * @return {ol.geom.Geometry}\n * @memberof module:org/locationtech/jts/io/OL3Parser#\n */\n write(geometry) {\n if (geometry.getGeometryType() === 'Point')\n return this.convertToPoint(geometry.getCoordinate())\n else if (geometry.getGeometryType() === 'LineString')\n return this.convertToLineString(geometry)\n else if (geometry.getGeometryType() === 'LinearRing')\n return this.convertToLinearRing(geometry)\n else if (geometry.getGeometryType() === 'Polygon')\n return this.convertToPolygon(geometry)\n else if (geometry.getGeometryType() === 'MultiPoint')\n return this.convertToMultiPoint(geometry)\n else if (geometry.getGeometryType() === 'MultiLineString')\n return this.convertToMultiLineString(geometry)\n else if (geometry.getGeometryType() === 'MultiPolygon')\n return this.convertToMultiPolygon(geometry)\n else if (geometry.getGeometryType() === 'GeometryCollection') return this.convertToCollection(geometry)\n }\n\n convertToPoint(coordinate) {\n return new this.ol.geom.Point([coordinate.x, coordinate.y])\n }\n\n convertToLineString(lineString) {\n const points = lineString._points._coordinates.map(p2c)\n return new this.ol.geom.LineString(points)\n }\n\n convertToLinearRing(linearRing) {\n const points = linearRing._points._coordinates.map(p2c)\n return new this.ol.geom.LinearRing(points)\n }\n\n convertToPolygon(polygon) {\n const rings = [polygon._shell._points._coordinates.map(p2c)]\n for (let i = 0; i < polygon._holes.length; i++) rings.push(polygon._holes[i]._points._coordinates.map(p2c))\n\n return new this.ol.geom.Polygon(rings)\n }\n\n convertToMultiPoint(multiPoint) {\n return new this.ol.geom.MultiPoint(multiPoint.getCoordinates().map(p2c))\n }\n\n convertToMultiLineString(multiLineString) {\n const lineStrings = []\n for (let i = 0; i < multiLineString._geometries.length; i++) lineStrings.push(this.convertToLineString(multiLineString._geometries[i]).getCoordinates())\n\n return new this.ol.geom.MultiLineString(lineStrings)\n }\n\n convertToMultiPolygon(multiPolygon) {\n const polygons = []\n for (let i = 0; i < multiPolygon._geometries.length; i++) polygons.push(this.convertToPolygon(multiPolygon._geometries[i]).getCoordinates())\n\n return new this.ol.geom.MultiPolygon(polygons)\n }\n\n convertToCollection(geometryCollection) {\n const geometries = []\n for (let i = 0; i < geometryCollection._geometries.length; i++) {\n const geometry = geometryCollection._geometries[i]\n geometries.push(this.write(geometry))\n }\n return new this.ol.geom.GeometryCollection(geometries)\n }\n}\n","import Assert from '../util/Assert'\nexport default class SegmentPointComparator {\n static relativeSign(x0, x1) {\n if (x0 < x1) return -1\n if (x0 > x1) return 1\n return 0\n }\n static compare(octant, p0, p1) {\n if (p0.equals2D(p1)) return 0\n const xSign = SegmentPointComparator.relativeSign(p0.x, p1.x)\n const ySign = SegmentPointComparator.relativeSign(p0.y, p1.y)\n switch (octant) {\n case 0:\n return SegmentPointComparator.compareValue(xSign, ySign)\n case 1:\n return SegmentPointComparator.compareValue(ySign, xSign)\n case 2:\n return SegmentPointComparator.compareValue(ySign, -xSign)\n case 3:\n return SegmentPointComparator.compareValue(-xSign, ySign)\n case 4:\n return SegmentPointComparator.compareValue(-xSign, -ySign)\n case 5:\n return SegmentPointComparator.compareValue(-ySign, -xSign)\n case 6:\n return SegmentPointComparator.compareValue(-ySign, xSign)\n case 7:\n return SegmentPointComparator.compareValue(xSign, -ySign)\n }\n Assert.shouldNeverReachHere('invalid octant value')\n return 0\n }\n static compareValue(compareSign0, compareSign1) {\n if (compareSign0 < 0) return -1\n if (compareSign0 > 0) return 1\n if (compareSign1 < 0) return -1\n if (compareSign1 > 0) return 1\n return 0\n }\n}\n","import Coordinate from '../geom/Coordinate'\nimport SegmentPointComparator from './SegmentPointComparator'\nimport Comparable from '../../../../java/lang/Comparable'\nexport default class SegmentNode {\n constructor() {\n SegmentNode.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._segString = null\n this.coord = null\n this.segmentIndex = null\n this._segmentOctant = null\n this._isInterior = null\n const segString = arguments[0], coord = arguments[1], segmentIndex = arguments[2], segmentOctant = arguments[3]\n this._segString = segString\n this.coord = new Coordinate(coord)\n this.segmentIndex = segmentIndex\n this._segmentOctant = segmentOctant\n this._isInterior = !coord.equals2D(segString.getCoordinate(segmentIndex))\n }\n getCoordinate() {\n return this.coord\n }\n print(out) {\n out.print(this.coord)\n out.print(' seg # = ' + this.segmentIndex)\n }\n compareTo(obj) {\n const other = obj\n if (this.segmentIndex < other.segmentIndex) return -1\n if (this.segmentIndex > other.segmentIndex) return 1\n if (this.coord.equals2D(other.coord)) return 0\n if (!this._isInterior) return -1\n if (!other._isInterior) return 1\n return SegmentPointComparator.compare(this._segmentOctant, this.coord, other.coord)\n }\n isEndPoint(maxSegmentIndex) {\n if (this.segmentIndex === 0 && !this._isInterior) return true\n if (this.segmentIndex === maxSegmentIndex) return true\n return false\n }\n toString() {\n return this.segmentIndex + ':' + this.coord.toString()\n }\n isInterior() {\n return this._isInterior\n }\n get interfaces_() {\n return [Comparable]\n }\n}\n","import CoordinateList from '../geom/CoordinateList'\nimport SegmentNode from './SegmentNode'\nimport Iterator from '../../../../java/util/Iterator'\nimport Coordinate from '../geom/Coordinate'\nimport NodedSegmentString from './NodedSegmentString'\nimport Integer from '../../../../java/lang/Integer'\nimport UnsupportedOperationException from '../../../../java/lang/UnsupportedOperationException'\nimport ArrayList from '../../../../java/util/ArrayList'\nimport RuntimeException from '../../../../java/lang/RuntimeException'\nimport Assert from '../util/Assert'\nimport TreeMap from '../../../../java/util/TreeMap'\nexport default class SegmentNodeList {\n constructor() {\n SegmentNodeList.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._nodeMap = new TreeMap()\n this._edge = null\n const edge = arguments[0]\n this._edge = edge\n }\n getSplitCoordinates() {\n const coordList = new CoordinateList()\n this.addEndpoints()\n const it = this.iterator()\n let eiPrev = it.next()\n while (it.hasNext()) {\n const ei = it.next()\n this.addEdgeCoordinates(eiPrev, ei, coordList)\n eiPrev = ei\n }\n return coordList.toCoordinateArray()\n }\n addCollapsedNodes() {\n const collapsedVertexIndexes = new ArrayList()\n this.findCollapsesFromInsertedNodes(collapsedVertexIndexes)\n this.findCollapsesFromExistingVertices(collapsedVertexIndexes)\n for (let it = collapsedVertexIndexes.iterator(); it.hasNext(); ) {\n const vertexIndex = it.next().intValue()\n this.add(this._edge.getCoordinate(vertexIndex), vertexIndex)\n }\n }\n createSplitEdgePts(ei0, ei1) {\n let npts = ei1.segmentIndex - ei0.segmentIndex + 2\n if (npts === 2) return [new Coordinate(ei0.coord), new Coordinate(ei1.coord)]\n const lastSegStartPt = this._edge.getCoordinate(ei1.segmentIndex)\n const useIntPt1 = ei1.isInterior() || !ei1.coord.equals2D(lastSegStartPt)\n if (!useIntPt1) \n npts--\n \n const pts = new Array(npts).fill(null)\n let ipt = 0\n pts[ipt++] = new Coordinate(ei0.coord)\n for (let i = ei0.segmentIndex + 1; i <= ei1.segmentIndex; i++) \n pts[ipt++] = this._edge.getCoordinate(i)\n \n if (useIntPt1) pts[ipt] = new Coordinate(ei1.coord)\n return pts\n }\n print(out) {\n out.println('Intersections:')\n for (let it = this.iterator(); it.hasNext(); ) {\n const ei = it.next()\n ei.print(out)\n }\n }\n findCollapsesFromExistingVertices(collapsedVertexIndexes) {\n for (let i = 0; i < this._edge.size() - 2; i++) {\n const p0 = this._edge.getCoordinate(i)\n const p1 = this._edge.getCoordinate(i + 1)\n const p2 = this._edge.getCoordinate(i + 2)\n if (p0.equals2D(p2)) \n collapsedVertexIndexes.add(Integer.valueOf(i + 1))\n \n }\n }\n addEdgeCoordinates(ei0, ei1, coordList) {\n const pts = this.createSplitEdgePts(ei0, ei1)\n coordList.add(pts, false)\n }\n iterator() {\n return this._nodeMap.values().iterator()\n }\n addSplitEdges(edgeList) {\n this.addEndpoints()\n this.addCollapsedNodes()\n const it = this.iterator()\n let eiPrev = it.next()\n while (it.hasNext()) {\n const ei = it.next()\n const newEdge = this.createSplitEdge(eiPrev, ei)\n edgeList.add(newEdge)\n eiPrev = ei\n }\n }\n findCollapseIndex(ei0, ei1, collapsedVertexIndex) {\n if (!ei0.coord.equals2D(ei1.coord)) return false\n let numVerticesBetween = ei1.segmentIndex - ei0.segmentIndex\n if (!ei1.isInterior()) \n numVerticesBetween--\n \n if (numVerticesBetween === 1) {\n collapsedVertexIndex[0] = ei0.segmentIndex + 1\n return true\n }\n return false\n }\n findCollapsesFromInsertedNodes(collapsedVertexIndexes) {\n const collapsedVertexIndex = new Array(1).fill(null)\n const it = this.iterator()\n let eiPrev = it.next()\n while (it.hasNext()) {\n const ei = it.next()\n const isCollapsed = this.findCollapseIndex(eiPrev, ei, collapsedVertexIndex)\n if (isCollapsed) collapsedVertexIndexes.add(Integer.valueOf(collapsedVertexIndex[0]))\n eiPrev = ei\n }\n }\n getEdge() {\n return this._edge\n }\n addEndpoints() {\n const maxSegIndex = this._edge.size() - 1\n this.add(this._edge.getCoordinate(0), 0)\n this.add(this._edge.getCoordinate(maxSegIndex), maxSegIndex)\n }\n createSplitEdge(ei0, ei1) {\n const pts = this.createSplitEdgePts(ei0, ei1)\n return new NodedSegmentString(pts, this._edge.getData())\n }\n add(intPt, segmentIndex) {\n const eiNew = new SegmentNode(this._edge, intPt, segmentIndex, this._edge.getSegmentOctant(segmentIndex))\n const ei = this._nodeMap.get(eiNew)\n if (ei !== null) {\n Assert.isTrue(ei.coord.equals2D(intPt), 'Found equal nodes with different coordinates')\n return ei\n }\n this._nodeMap.put(eiNew, eiNew)\n return eiNew\n }\n checkSplitEdgesCorrectness(splitEdges) {\n const edgePts = this._edge.getCoordinates()\n const split0 = splitEdges.get(0)\n const pt0 = split0.getCoordinate(0)\n if (!pt0.equals2D(edgePts[0])) throw new RuntimeException('bad split edge start point at ' + pt0)\n const splitn = splitEdges.get(splitEdges.size() - 1)\n const splitnPts = splitn.getCoordinates()\n const ptn = splitnPts[splitnPts.length - 1]\n if (!ptn.equals2D(edgePts[edgePts.length - 1])) throw new RuntimeException('bad split edge end point at ' + ptn)\n }\n}\nclass NodeVertexIterator {\n constructor() {\n NodeVertexIterator.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._nodeList = null\n this._edge = null\n this._nodeIt = null\n this._currNode = null\n this._nextNode = null\n this._currSegIndex = 0\n const nodeList = arguments[0]\n this._nodeList = nodeList\n this._edge = nodeList.getEdge()\n this._nodeIt = nodeList.iterator()\n this.readNextNode()\n }\n next() {\n if (this._currNode === null) {\n this._currNode = this._nextNode\n this._currSegIndex = this._currNode.segmentIndex\n this.readNextNode()\n return this._currNode\n }\n if (this._nextNode === null) return null\n if (this._nextNode.segmentIndex === this._currNode.segmentIndex) {\n this._currNode = this._nextNode\n this._currSegIndex = this._currNode.segmentIndex\n this.readNextNode()\n return this._currNode\n }\n if (this._nextNode.segmentIndex > this._currNode.segmentIndex) {}\n return null\n }\n remove() {\n throw new UnsupportedOperationException(this.getClass().getName())\n }\n hasNext() {\n if (this._nextNode === null) return false\n return true\n }\n readNextNode() {\n if (this._nodeIt.hasNext()) this._nextNode = this._nodeIt.next(); else this._nextNode = null\n }\n get interfaces_() {\n return [Iterator]\n }\n}\n","import Coordinate from '../geom/Coordinate'\nimport IllegalArgumentException from '../../../../java/lang/IllegalArgumentException'\nexport default class Octant {\n static octant() {\n if (typeof arguments[0] === 'number' && typeof arguments[1] === 'number') {\n const dx = arguments[0], dy = arguments[1]\n if (dx === 0.0 && dy === 0.0) throw new IllegalArgumentException('Cannot compute the octant for point ( ' + dx + ', ' + dy + ' )')\n const adx = Math.abs(dx)\n const ady = Math.abs(dy)\n if (dx >= 0) \n if (dy >= 0) \n if (adx >= ady) return 0; else return 1\n else \n if (adx >= ady) return 7; else return 6\n \n else \n if (dy >= 0) \n if (adx >= ady) return 3; else return 2\n else \n if (adx >= ady) return 4; else return 5\n \n \n } else if (arguments[0] instanceof Coordinate && arguments[1] instanceof Coordinate) {\n const p0 = arguments[0], p1 = arguments[1]\n const dx = p1.x - p0.x\n const dy = p1.y - p0.y\n if (dx === 0.0 && dy === 0.0) throw new IllegalArgumentException('Cannot compute the octant for two identical points ' + p0)\n return Octant.octant(dx, dy)\n }\n }\n}\n","export default class SegmentString {\n getCoordinates() {}\n size() {}\n getCoordinate(i) {}\n isClosed() {}\n setData(data) {}\n getData() {}\n}\n","import SegmentString from './SegmentString'\nexport default class NodableSegmentString {\n addIntersection(intPt, segmentIndex) {}\n get interfaces_() {\n return [SegmentString]\n }\n}\n","import SegmentNodeList from './SegmentNodeList'\nimport WKTWriter from '../io/WKTWriter'\nimport CoordinateArraySequence from '../geom/impl/CoordinateArraySequence'\nimport Coordinate from '../geom/Coordinate'\nimport Octant from './Octant'\nimport ArrayList from '../../../../java/util/ArrayList'\nimport NodableSegmentString from './NodableSegmentString'\nexport default class NodedSegmentString {\n constructor() {\n NodedSegmentString.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._nodeList = new SegmentNodeList(this)\n this._pts = null\n this._data = null\n const pts = arguments[0], data = arguments[1]\n this._pts = pts\n this._data = data\n }\n static getNodedSubstrings() {\n if (arguments.length === 1) {\n const segStrings = arguments[0]\n const resultEdgelist = new ArrayList()\n NodedSegmentString.getNodedSubstrings(segStrings, resultEdgelist)\n return resultEdgelist\n } else if (arguments.length === 2) {\n const segStrings = arguments[0], resultEdgelist = arguments[1]\n for (let i = segStrings.iterator(); i.hasNext(); ) {\n const ss = i.next()\n ss.getNodeList().addSplitEdges(resultEdgelist)\n }\n }\n }\n getCoordinates() {\n return this._pts\n }\n size() {\n return this._pts.length\n }\n getCoordinate(i) {\n return this._pts[i]\n }\n isClosed() {\n return this._pts[0].equals(this._pts[this._pts.length - 1])\n }\n getSegmentOctant(index) {\n if (index === this._pts.length - 1) return -1\n return this.safeOctant(this.getCoordinate(index), this.getCoordinate(index + 1))\n }\n setData(data) {\n this._data = data\n }\n safeOctant(p0, p1) {\n if (p0.equals2D(p1)) return 0\n return Octant.octant(p0, p1)\n }\n getData() {\n return this._data\n }\n addIntersection() {\n if (arguments.length === 2) {\n const intPt = arguments[0], segmentIndex = arguments[1]\n this.addIntersectionNode(intPt, segmentIndex)\n } else if (arguments.length === 4) {\n const li = arguments[0], segmentIndex = arguments[1], geomIndex = arguments[2], intIndex = arguments[3]\n const intPt = new Coordinate(li.getIntersection(intIndex))\n this.addIntersection(intPt, segmentIndex)\n }\n }\n toString() {\n return WKTWriter.toLineString(new CoordinateArraySequence(this._pts))\n }\n getNodeList() {\n return this._nodeList\n }\n addIntersectionNode(intPt, segmentIndex) {\n let normalizedSegmentIndex = segmentIndex\n const nextSegIndex = normalizedSegmentIndex + 1\n if (nextSegIndex < this._pts.length) {\n const nextPt = this._pts[nextSegIndex]\n if (intPt.equals2D(nextPt)) \n normalizedSegmentIndex = nextSegIndex\n \n }\n const ei = this._nodeList.add(intPt, normalizedSegmentIndex)\n return ei\n }\n addIntersections(li, segmentIndex, geomIndex) {\n for (let i = 0; i < li.getIntersectionNum(); i++) \n this.addIntersection(li, segmentIndex, geomIndex, i)\n \n }\n get interfaces_() {\n return [NodableSegmentString]\n }\n}\n","import LineSegment from '../../geom/LineSegment'\nexport default class MonotoneChainOverlapAction {\n constructor() {\n MonotoneChainOverlapAction.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._overlapSeg1 = new LineSegment()\n this._overlapSeg2 = new LineSegment()\n }\n overlap() {\n if (arguments.length === 2) {\n const seg1 = arguments[0], seg2 = arguments[1]\n } else if (arguments.length === 4) {\n const mc1 = arguments[0], start1 = arguments[1], mc2 = arguments[2], start2 = arguments[3]\n mc1.getLineSegment(start1, this._overlapSeg1)\n mc2.getLineSegment(start2, this._overlapSeg2)\n this.overlap(this._overlapSeg1, this._overlapSeg2)\n }\n }\n}\n","import Envelope from '../../geom/Envelope'\nexport default class MonotoneChain {\n constructor() {\n MonotoneChain.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._pts = null\n this._start = null\n this._end = null\n this._env = null\n this._context = null\n this._id = null\n const pts = arguments[0], start = arguments[1], end = arguments[2], context = arguments[3]\n this._pts = pts\n this._start = start\n this._end = end\n this._context = context\n }\n getLineSegment(index, ls) {\n ls.p0 = this._pts[index]\n ls.p1 = this._pts[index + 1]\n }\n computeSelect(searchEnv, start0, end0, mcs) {\n const p0 = this._pts[start0]\n const p1 = this._pts[end0]\n if (end0 - start0 === 1) {\n mcs.select(this, start0)\n return null\n }\n if (!searchEnv.intersects(p0, p1)) return null\n const mid = Math.trunc((start0 + end0) / 2)\n if (start0 < mid) \n this.computeSelect(searchEnv, start0, mid, mcs)\n \n if (mid < end0) \n this.computeSelect(searchEnv, mid, end0, mcs)\n \n }\n getCoordinates() {\n const coord = new Array(this._end - this._start + 1).fill(null)\n let index = 0\n for (let i = this._start; i <= this._end; i++) \n coord[index++] = this._pts[i]\n \n return coord\n }\n computeOverlaps() {\n if (arguments.length === 2) {\n const mc = arguments[0], mco = arguments[1]\n this.computeOverlaps(this._start, this._end, mc, mc._start, mc._end, mco)\n } else if (arguments.length === 6) {\n const start0 = arguments[0], end0 = arguments[1], mc = arguments[2], start1 = arguments[3], end1 = arguments[4], mco = arguments[5]\n if (end0 - start0 === 1 && end1 - start1 === 1) {\n mco.overlap(this, start0, mc, start1)\n return null\n }\n if (!this.overlaps(start0, end0, mc, start1, end1)) return null\n const mid0 = Math.trunc((start0 + end0) / 2)\n const mid1 = Math.trunc((start1 + end1) / 2)\n if (start0 < mid0) {\n if (start1 < mid1) this.computeOverlaps(start0, mid0, mc, start1, mid1, mco)\n if (mid1 < end1) this.computeOverlaps(start0, mid0, mc, mid1, end1, mco)\n }\n if (mid0 < end0) {\n if (start1 < mid1) this.computeOverlaps(mid0, end0, mc, start1, mid1, mco)\n if (mid1 < end1) this.computeOverlaps(mid0, end0, mc, mid1, end1, mco)\n }\n }\n }\n setId(id) {\n this._id = id\n }\n select(searchEnv, mcs) {\n this.computeSelect(searchEnv, this._start, this._end, mcs)\n }\n getEnvelope() {\n if (this._env === null) {\n const p0 = this._pts[this._start]\n const p1 = this._pts[this._end]\n this._env = new Envelope(p0, p1)\n }\n return this._env\n }\n overlaps(start0, end0, mc, start1, end1) {\n return Envelope.intersects(this._pts[start0], this._pts[end0], mc._pts[start1], mc._pts[end1])\n }\n getEndIndex() {\n return this._end\n }\n getStartIndex() {\n return this._start\n }\n getContext() {\n return this._context\n }\n getId() {\n return this._id\n }\n}\n","import MonotoneChain from './MonotoneChain'\nimport ArrayList from '../../../../../java/util/ArrayList'\nimport Quadrant from '../../geomgraph/Quadrant'\nexport default class MonotoneChainBuilder {\n static findChainEnd(pts, start) {\n let safeStart = start\n while (safeStart < pts.length - 1 && pts[safeStart].equals2D(pts[safeStart + 1])) \n safeStart++\n \n if (safeStart >= pts.length - 1) \n return pts.length - 1\n \n const chainQuad = Quadrant.quadrant(pts[safeStart], pts[safeStart + 1])\n let last = start + 1\n while (last < pts.length) {\n if (!pts[last - 1].equals2D(pts[last])) {\n const quad = Quadrant.quadrant(pts[last - 1], pts[last])\n if (quad !== chainQuad) break\n }\n last++\n }\n return last - 1\n }\n static getChains() {\n if (arguments.length === 1) {\n const pts = arguments[0]\n return MonotoneChainBuilder.getChains(pts, null)\n } else if (arguments.length === 2) {\n const pts = arguments[0], context = arguments[1]\n const mcList = new ArrayList()\n let chainStart = 0\n do {\n const chainEnd = MonotoneChainBuilder.findChainEnd(pts, chainStart)\n const mc = new MonotoneChain(pts, chainStart, chainEnd, context)\n mcList.add(mc)\n chainStart = chainEnd\n } while (chainStart < pts.length - 1)\n return mcList\n }\n }\n}\n","export default class Noder {\n computeNodes(segStrings) {}\n getNodedSubstrings() {}\n}\n","import Noder from './Noder'\nexport default class SinglePassNoder {\n constructor() {\n SinglePassNoder.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._segInt = null\n if (arguments.length === 0) {} else if (arguments.length === 1) {\n const segInt = arguments[0]\n this.setSegmentIntersector(segInt)\n }\n }\n setSegmentIntersector(segInt) {\n this._segInt = segInt\n }\n get interfaces_() {\n return [Noder]\n }\n}\n","import STRtree from '../index/strtree/STRtree'\nimport NodedSegmentString from './NodedSegmentString'\nimport MonotoneChainOverlapAction from '../index/chain/MonotoneChainOverlapAction'\nimport MonotoneChainBuilder from '../index/chain/MonotoneChainBuilder'\nimport ArrayList from '../../../../java/util/ArrayList'\nimport SinglePassNoder from './SinglePassNoder'\nexport default class MCIndexNoder extends SinglePassNoder {\n constructor() {\n super()\n MCIndexNoder.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._monoChains = new ArrayList()\n this._index = new STRtree()\n this._idCounter = 0\n this._nodedSegStrings = null\n this._nOverlaps = 0\n if (arguments.length === 0) {} else if (arguments.length === 1) {\n const si = arguments[0]\n SinglePassNoder.constructor_.call(this, si)\n }\n }\n getMonotoneChains() {\n return this._monoChains\n }\n getNodedSubstrings() {\n return NodedSegmentString.getNodedSubstrings(this._nodedSegStrings)\n }\n getIndex() {\n return this._index\n }\n add(segStr) {\n const segChains = MonotoneChainBuilder.getChains(segStr.getCoordinates(), segStr)\n for (let i = segChains.iterator(); i.hasNext(); ) {\n const mc = i.next()\n mc.setId(this._idCounter++)\n this._index.insert(mc.getEnvelope(), mc)\n this._monoChains.add(mc)\n }\n }\n computeNodes(inputSegStrings) {\n this._nodedSegStrings = inputSegStrings\n for (let i = inputSegStrings.iterator(); i.hasNext(); ) \n this.add(i.next())\n \n this.intersectChains()\n }\n intersectChains() {\n const overlapAction = new SegmentOverlapAction(this._segInt)\n for (let i = this._monoChains.iterator(); i.hasNext(); ) {\n const queryChain = i.next()\n const overlapChains = this._index.query(queryChain.getEnvelope())\n for (let j = overlapChains.iterator(); j.hasNext(); ) {\n const testChain = j.next()\n if (testChain.getId() > queryChain.getId()) {\n queryChain.computeOverlaps(testChain, overlapAction)\n this._nOverlaps++\n }\n if (this._segInt.isDone()) return null\n }\n }\n }\n}\nclass SegmentOverlapAction extends MonotoneChainOverlapAction {\n constructor() {\n super()\n SegmentOverlapAction.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._si = null\n const si = arguments[0]\n this._si = si\n }\n overlap() {\n if (arguments.length === 4) {\n const mc1 = arguments[0], start1 = arguments[1], mc2 = arguments[2], start2 = arguments[3]\n const ss1 = mc1.getContext()\n const ss2 = mc2.getContext()\n this._si.processIntersections(ss1, start1, ss2, start2)\n } else {\n return super.overlap.apply(this, arguments)\n }\n }\n}\nMCIndexNoder.SegmentOverlapAction = SegmentOverlapAction\n","import hasInterface from '../../../../hasInterface'\nimport Collection from '../../../../java/util/Collection'\nimport Noder from './Noder'\nimport Coordinate from '../geom/Coordinate'\nimport NodedSegmentString from './NodedSegmentString'\nimport System from '../../../../java/lang/System'\nimport CoordinateArrays from '../geom/CoordinateArrays'\nimport ArrayList from '../../../../java/util/ArrayList'\nexport default class ScaledNoder {\n constructor() {\n ScaledNoder.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._noder = null\n this._scaleFactor = null\n this._offsetX = null\n this._offsetY = null\n this._isScaled = false\n if (arguments.length === 2) {\n const noder = arguments[0], scaleFactor = arguments[1]\n ScaledNoder.constructor_.call(this, noder, scaleFactor, 0, 0)\n } else if (arguments.length === 4) {\n const noder = arguments[0], scaleFactor = arguments[1], offsetX = arguments[2], offsetY = arguments[3]\n this._noder = noder\n this._scaleFactor = scaleFactor\n this._isScaled = !this.isIntegerPrecision()\n }\n }\n rescale() {\n if (hasInterface(arguments[0], Collection)) {\n const segStrings = arguments[0]\n for (let i = segStrings.iterator(); i.hasNext(); ) {\n const ss = i.next()\n this.rescale(ss.getCoordinates())\n }\n } else if (arguments[0] instanceof Array) {\n const pts = arguments[0]\n for (let i = 0; i < pts.length; i++) {\n pts[i].x = pts[i].x / this._scaleFactor + this._offsetX\n pts[i].y = pts[i].y / this._scaleFactor + this._offsetY\n }\n if (pts.length === 2 && pts[0].equals2D(pts[1])) \n System.out.println(pts)\n \n }\n }\n scale() {\n if (hasInterface(arguments[0], Collection)) {\n const segStrings = arguments[0]\n const nodedSegmentStrings = new ArrayList(segStrings.size())\n for (let i = segStrings.iterator(); i.hasNext(); ) {\n const ss = i.next()\n nodedSegmentStrings.add(new NodedSegmentString(this.scale(ss.getCoordinates()), ss.getData()))\n }\n return nodedSegmentStrings\n } else if (arguments[0] instanceof Array) {\n const pts = arguments[0]\n const roundPts = new Array(pts.length).fill(null)\n for (let i = 0; i < pts.length; i++) \n roundPts[i] = new Coordinate(Math.round((pts[i].x - this._offsetX) * this._scaleFactor), Math.round((pts[i].y - this._offsetY) * this._scaleFactor), pts[i].getZ())\n \n const roundPtsNoDup = CoordinateArrays.removeRepeatedPoints(roundPts)\n return roundPtsNoDup\n }\n }\n isIntegerPrecision() {\n return this._scaleFactor === 1.0\n }\n getNodedSubstrings() {\n const splitSS = this._noder.getNodedSubstrings()\n if (this._isScaled) this.rescale(splitSS)\n return splitSS\n }\n computeNodes(inputSegStrings) {\n let intSegStrings = inputSegStrings\n if (this._isScaled) intSegStrings = this.scale(inputSegStrings)\n this._noder.computeNodes(intSegStrings)\n }\n get interfaces_() {\n return [Noder]\n }\n}\n","import LineString from '../geom/LineString'\nimport BoundaryNodeRule from '../algorithm/BoundaryNodeRule'\nimport CoordinateArrays from '../geom/CoordinateArrays'\nimport ArrayList from '../../../../java/util/ArrayList'\nimport TreeMap from '../../../../java/util/TreeMap'\nimport MultiLineString from '../geom/MultiLineString'\nexport default class BoundaryOp {\n constructor() {\n BoundaryOp.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._geom = null\n this._geomFact = null\n this._bnRule = null\n this._endpointMap = null\n if (arguments.length === 1) {\n const geom = arguments[0]\n BoundaryOp.constructor_.call(this, geom, BoundaryNodeRule.MOD2_BOUNDARY_RULE)\n } else if (arguments.length === 2) {\n const geom = arguments[0], bnRule = arguments[1]\n this._geom = geom\n this._geomFact = geom.getFactory()\n this._bnRule = bnRule\n }\n }\n static getBoundary() {\n if (arguments.length === 1) {\n const g = arguments[0]\n const bop = new BoundaryOp(g)\n return bop.getBoundary()\n } else if (arguments.length === 2) {\n const g = arguments[0], bnRule = arguments[1]\n const bop = new BoundaryOp(g, bnRule)\n return bop.getBoundary()\n }\n }\n boundaryMultiLineString(mLine) {\n if (this._geom.isEmpty()) \n return this.getEmptyMultiPoint()\n \n const bdyPts = this.computeBoundaryCoordinates(mLine)\n if (bdyPts.length === 1) \n return this._geomFact.createPoint(bdyPts[0])\n \n return this._geomFact.createMultiPointFromCoords(bdyPts)\n }\n getBoundary() {\n if (this._geom instanceof LineString) return this.boundaryLineString(this._geom)\n if (this._geom instanceof MultiLineString) return this.boundaryMultiLineString(this._geom)\n return this._geom.getBoundary()\n }\n boundaryLineString(line) {\n if (this._geom.isEmpty()) \n return this.getEmptyMultiPoint()\n \n if (line.isClosed()) {\n const closedEndpointOnBoundary = this._bnRule.isInBoundary(2)\n if (closedEndpointOnBoundary) \n return line.getStartPoint()\n else \n return this._geomFact.createMultiPoint()\n \n }\n return this._geomFact.createMultiPoint([line.getStartPoint(), line.getEndPoint()])\n }\n getEmptyMultiPoint() {\n return this._geomFact.createMultiPoint()\n }\n computeBoundaryCoordinates(mLine) {\n const bdyPts = new ArrayList()\n this._endpointMap = new TreeMap()\n for (let i = 0; i < mLine.getNumGeometries(); i++) {\n const line = mLine.getGeometryN(i)\n if (line.getNumPoints() === 0) continue\n this.addEndpoint(line.getCoordinateN(0))\n this.addEndpoint(line.getCoordinateN(line.getNumPoints() - 1))\n }\n for (let it = this._endpointMap.entrySet().iterator(); it.hasNext(); ) {\n const entry = it.next()\n const counter = entry.getValue()\n const valence = counter.count\n if (this._bnRule.isInBoundary(valence)) \n bdyPts.add(entry.getKey())\n \n }\n return CoordinateArrays.toCoordinateArray(bdyPts)\n }\n addEndpoint(pt) {\n let counter = this._endpointMap.get(pt)\n if (counter === null) {\n counter = new Counter()\n this._endpointMap.put(pt, counter)\n }\n counter.count++\n }\n}\nclass Counter {\n constructor() {\n Counter.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this.count = null\n }\n}\n","import TreeSet from '../../../../java/util/TreeSet'\nimport LineString from '../geom/LineString'\nimport hasInterface from '../../../../hasInterface'\nimport MultiPoint from '../geom/MultiPoint'\nimport GeometryGraph from '../geomgraph/GeometryGraph'\nimport GeometryCollection from '../geom/GeometryCollection'\nimport Polygonal from '../geom/Polygonal'\nimport RobustLineIntersector from '../algorithm/RobustLineIntersector'\nimport LinearComponentExtracter from '../geom/util/LinearComponentExtracter'\nimport TreeMap from '../../../../java/util/TreeMap'\nimport MultiLineString from '../geom/MultiLineString'\nexport default class IsSimpleOp {\n constructor() {\n IsSimpleOp.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._inputGeom = null\n this._isClosedEndpointsInInterior = true\n this._nonSimpleLocation = null\n if (arguments.length === 1) {\n const geom = arguments[0]\n this._inputGeom = geom\n } else if (arguments.length === 2) {\n const geom = arguments[0], boundaryNodeRule = arguments[1]\n this._inputGeom = geom\n this._isClosedEndpointsInInterior = !boundaryNodeRule.isInBoundary(2)\n }\n }\n static isSimple() {\n if (arguments.length === 1) {\n const geom = arguments[0]\n const op = new IsSimpleOp(geom)\n return op.isSimple()\n } else if (arguments.length === 2) {\n const geom = arguments[0], boundaryNodeRule = arguments[1]\n const op = new IsSimpleOp(geom, boundaryNodeRule)\n return op.isSimple()\n }\n }\n isSimpleMultiPoint(mp) {\n if (mp.isEmpty()) return true\n const points = new TreeSet()\n for (let i = 0; i < mp.getNumGeometries(); i++) {\n const pt = mp.getGeometryN(i)\n const p = pt.getCoordinate()\n if (points.contains(p)) {\n this._nonSimpleLocation = p\n return false\n }\n points.add(p)\n }\n return true\n }\n isSimplePolygonal(geom) {\n const rings = LinearComponentExtracter.getLines(geom)\n for (let i = rings.iterator(); i.hasNext(); ) {\n const ring = i.next()\n if (!this.isSimpleLinearGeometry(ring)) return false\n }\n return true\n }\n hasClosedEndpointIntersection(graph) {\n const endPoints = new TreeMap()\n for (let i = graph.getEdgeIterator(); i.hasNext(); ) {\n const e = i.next()\n const isClosed = e.isClosed()\n const p0 = e.getCoordinate(0)\n this.addEndpoint(endPoints, p0, isClosed)\n const p1 = e.getCoordinate(e.getNumPoints() - 1)\n this.addEndpoint(endPoints, p1, isClosed)\n }\n for (let i = endPoints.values().iterator(); i.hasNext(); ) {\n const eiInfo = i.next()\n if (eiInfo.isClosed && eiInfo.degree !== 2) {\n this._nonSimpleLocation = eiInfo.getCoordinate()\n return true\n }\n }\n return false\n }\n getNonSimpleLocation() {\n return this._nonSimpleLocation\n }\n isSimpleLinearGeometry(geom) {\n if (geom.isEmpty()) return true\n const graph = new GeometryGraph(0, geom)\n const li = new RobustLineIntersector()\n const si = graph.computeSelfNodes(li, true)\n if (!si.hasIntersection()) return true\n if (si.hasProperIntersection()) {\n this._nonSimpleLocation = si.getProperIntersectionPoint()\n return false\n }\n if (this.hasNonEndpointIntersection(graph)) return false\n if (this._isClosedEndpointsInInterior) \n if (this.hasClosedEndpointIntersection(graph)) return false\n \n return true\n }\n hasNonEndpointIntersection(graph) {\n for (let i = graph.getEdgeIterator(); i.hasNext(); ) {\n const e = i.next()\n const maxSegmentIndex = e.getMaximumSegmentIndex()\n for (let eiIt = e.getEdgeIntersectionList().iterator(); eiIt.hasNext(); ) {\n const ei = eiIt.next()\n if (!ei.isEndPoint(maxSegmentIndex)) {\n this._nonSimpleLocation = ei.getCoordinate()\n return true\n }\n }\n }\n return false\n }\n addEndpoint(endPoints, p, isClosed) {\n let eiInfo = endPoints.get(p)\n if (eiInfo === null) {\n eiInfo = new EndpointInfo(p)\n endPoints.put(p, eiInfo)\n }\n eiInfo.addEndpoint(isClosed)\n }\n computeSimple(geom) {\n this._nonSimpleLocation = null\n if (geom.isEmpty()) return true\n if (geom instanceof LineString) return this.isSimpleLinearGeometry(geom)\n if (geom instanceof MultiLineString) return this.isSimpleLinearGeometry(geom)\n if (geom instanceof MultiPoint) return this.isSimpleMultiPoint(geom)\n if (hasInterface(geom, Polygonal)) return this.isSimplePolygonal(geom)\n if (geom instanceof GeometryCollection) return this.isSimpleGeometryCollection(geom)\n return true\n }\n isSimple() {\n this._nonSimpleLocation = null\n return this.computeSimple(this._inputGeom)\n }\n isSimpleGeometryCollection(geom) {\n for (let i = 0; i < geom.getNumGeometries(); i++) {\n const comp = geom.getGeometryN(i)\n if (!this.computeSimple(comp)) return false\n }\n return true\n }\n}\nclass EndpointInfo {\n constructor() {\n EndpointInfo.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this.pt = null\n this.isClosed = null\n this.degree = null\n const pt = arguments[0]\n this.pt = pt\n this.isClosed = false\n this.degree = 0\n }\n addEndpoint(isClosed) {\n this.degree++\n this.isClosed |= isClosed\n }\n getCoordinate() {\n return this.pt\n }\n}\nIsSimpleOp.EndpointInfo = EndpointInfo\n","export default class BufferParameters {\n constructor() {\n BufferParameters.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._quadrantSegments = BufferParameters.DEFAULT_QUADRANT_SEGMENTS\n this._endCapStyle = BufferParameters.CAP_ROUND\n this._joinStyle = BufferParameters.JOIN_ROUND\n this._mitreLimit = BufferParameters.DEFAULT_MITRE_LIMIT\n this._isSingleSided = false\n this._simplifyFactor = BufferParameters.DEFAULT_SIMPLIFY_FACTOR\n if (arguments.length === 0) {} else if (arguments.length === 1) {\n const quadrantSegments = arguments[0]\n this.setQuadrantSegments(quadrantSegments)\n } else if (arguments.length === 2) {\n const quadrantSegments = arguments[0], endCapStyle = arguments[1]\n this.setQuadrantSegments(quadrantSegments)\n this.setEndCapStyle(endCapStyle)\n } else if (arguments.length === 4) {\n const quadrantSegments = arguments[0], endCapStyle = arguments[1], joinStyle = arguments[2], mitreLimit = arguments[3]\n this.setQuadrantSegments(quadrantSegments)\n this.setEndCapStyle(endCapStyle)\n this.setJoinStyle(joinStyle)\n this.setMitreLimit(mitreLimit)\n }\n }\n static bufferDistanceError(quadSegs) {\n const alpha = Math.PI / 2.0 / quadSegs\n return 1 - Math.cos(alpha / 2.0)\n }\n getEndCapStyle() {\n return this._endCapStyle\n }\n isSingleSided() {\n return this._isSingleSided\n }\n setQuadrantSegments(quadSegs) {\n this._quadrantSegments = quadSegs\n if (this._quadrantSegments === 0) this._joinStyle = BufferParameters.JOIN_BEVEL\n if (this._quadrantSegments < 0) {\n this._joinStyle = BufferParameters.JOIN_MITRE\n this._mitreLimit = Math.abs(this._quadrantSegments)\n }\n if (quadSegs <= 0) \n this._quadrantSegments = 1\n \n if (this._joinStyle !== BufferParameters.JOIN_ROUND) \n this._quadrantSegments = BufferParameters.DEFAULT_QUADRANT_SEGMENTS\n \n }\n getJoinStyle() {\n return this._joinStyle\n }\n setJoinStyle(joinStyle) {\n this._joinStyle = joinStyle\n }\n setSimplifyFactor(simplifyFactor) {\n this._simplifyFactor = simplifyFactor < 0 ? 0 : simplifyFactor\n }\n getSimplifyFactor() {\n return this._simplifyFactor\n }\n getQuadrantSegments() {\n return this._quadrantSegments\n }\n setEndCapStyle(endCapStyle) {\n this._endCapStyle = endCapStyle\n }\n getMitreLimit() {\n return this._mitreLimit\n }\n setMitreLimit(mitreLimit) {\n this._mitreLimit = mitreLimit\n }\n setSingleSided(isSingleSided) {\n this._isSingleSided = isSingleSided\n }\n}\nBufferParameters.CAP_ROUND = 1\nBufferParameters.CAP_FLAT = 2\nBufferParameters.CAP_SQUARE = 3\nBufferParameters.JOIN_ROUND = 1\nBufferParameters.JOIN_MITRE = 2\nBufferParameters.JOIN_BEVEL = 3\nBufferParameters.DEFAULT_QUADRANT_SEGMENTS = 8\nBufferParameters.DEFAULT_MITRE_LIMIT = 5.0\nBufferParameters.DEFAULT_SIMPLIFY_FACTOR = 0.01\n","import Position from '../../geomgraph/Position'\nimport Orientation from '../../algorithm/Orientation'\nimport Assert from '../../util/Assert'\nexport default class RightmostEdgeFinder {\n constructor() {\n RightmostEdgeFinder.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._minIndex = -1\n this._minCoord = null\n this._minDe = null\n this._orientedDe = null\n }\n getCoordinate() {\n return this._minCoord\n }\n getRightmostSide(de, index) {\n let side = this.getRightmostSideOfSegment(de, index)\n if (side < 0) side = this.getRightmostSideOfSegment(de, index - 1)\n if (side < 0) {\n this._minCoord = null\n this.checkForRightmostCoordinate(de)\n }\n return side\n }\n findRightmostEdgeAtVertex() {\n const pts = this._minDe.getEdge().getCoordinates()\n Assert.isTrue(this._minIndex > 0 && this._minIndex < pts.length, 'rightmost point expected to be interior vertex of edge')\n const pPrev = pts[this._minIndex - 1]\n const pNext = pts[this._minIndex + 1]\n const orientation = Orientation.index(this._minCoord, pNext, pPrev)\n let usePrev = false\n if (pPrev.y < this._minCoord.y && pNext.y < this._minCoord.y && orientation === Orientation.COUNTERCLOCKWISE) \n usePrev = true\n else if (pPrev.y > this._minCoord.y && pNext.y > this._minCoord.y && orientation === Orientation.CLOCKWISE) \n usePrev = true\n \n if (usePrev) \n this._minIndex = this._minIndex - 1\n \n }\n getRightmostSideOfSegment(de, i) {\n const e = de.getEdge()\n const coord = e.getCoordinates()\n if (i < 0 || i + 1 >= coord.length) return -1\n if (coord[i].y === coord[i + 1].y) return -1\n let pos = Position.LEFT\n if (coord[i].y < coord[i + 1].y) pos = Position.RIGHT\n return pos\n }\n getEdge() {\n return this._orientedDe\n }\n checkForRightmostCoordinate(de) {\n const coord = de.getEdge().getCoordinates()\n for (let i = 0; i < coord.length - 1; i++) \n if (this._minCoord === null || coord[i].x > this._minCoord.x) {\n this._minDe = de\n this._minIndex = i\n this._minCoord = coord[i]\n }\n \n }\n findRightmostEdgeAtNode() {\n const node = this._minDe.getNode()\n const star = node.getEdges()\n this._minDe = star.getRightmostEdge()\n if (!this._minDe.isForward()) {\n this._minDe = this._minDe.getSym()\n this._minIndex = this._minDe.getEdge().getCoordinates().length - 1\n }\n }\n findEdge(dirEdgeList) {\n for (let i = dirEdgeList.iterator(); i.hasNext(); ) {\n const de = i.next()\n if (!de.isForward()) continue\n this.checkForRightmostCoordinate(de)\n }\n Assert.isTrue(this._minIndex !== 0 || this._minCoord.equals(this._minDe.getCoordinate()), 'inconsistency in rightmost processing')\n if (this._minIndex === 0) \n this.findRightmostEdgeAtNode()\n else \n this.findRightmostEdgeAtVertex()\n \n this._orientedDe = this._minDe\n const rightmostSide = this.getRightmostSide(this._minDe, this._minIndex)\n if (rightmostSide === Position.LEFT) \n this._orientedDe = this._minDe.getSym()\n \n }\n}\n","export default class LinkedList {\n constructor() {\n this.array = []\n }\n\n addLast(e) {\n this.array.push(e)\n }\n\n removeFirst() {\n return this.array.shift()\n }\n\n isEmpty() {\n return this.array.length === 0\n }\n}\n","import HashSet from '../../../../../java/util/HashSet'\nimport Position from '../../geomgraph/Position'\nimport Stack from '../../../../../java/util/Stack'\nimport RightmostEdgeFinder from './RightmostEdgeFinder'\nimport TopologyException from '../../geom/TopologyException'\nimport LinkedList from '../../../../../java/util/LinkedList'\nimport Comparable from '../../../../../java/lang/Comparable'\nimport ArrayList from '../../../../../java/util/ArrayList'\nimport Envelope from '../../geom/Envelope'\nexport default class BufferSubgraph {\n constructor() {\n BufferSubgraph.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._finder = null\n this._dirEdgeList = new ArrayList()\n this._nodes = new ArrayList()\n this._rightMostCoord = null\n this._env = null\n this._finder = new RightmostEdgeFinder()\n }\n clearVisitedEdges() {\n for (let it = this._dirEdgeList.iterator(); it.hasNext(); ) {\n const de = it.next()\n de.setVisited(false)\n }\n }\n getRightmostCoordinate() {\n return this._rightMostCoord\n }\n computeNodeDepth(n) {\n let startEdge = null\n for (let i = n.getEdges().iterator(); i.hasNext(); ) {\n const de = i.next()\n if (de.isVisited() || de.getSym().isVisited()) {\n startEdge = de\n break\n }\n }\n if (startEdge === null) throw new TopologyException('unable to find edge to compute depths at ' + n.getCoordinate())\n n.getEdges().computeDepths(startEdge)\n for (let i = n.getEdges().iterator(); i.hasNext(); ) {\n const de = i.next()\n de.setVisited(true)\n this.copySymDepths(de)\n }\n }\n computeDepth(outsideDepth) {\n this.clearVisitedEdges()\n const de = this._finder.getEdge()\n const n = de.getNode()\n const label = de.getLabel()\n de.setEdgeDepths(Position.RIGHT, outsideDepth)\n this.copySymDepths(de)\n this.computeDepths(de)\n }\n create(node) {\n this.addReachable(node)\n this._finder.findEdge(this._dirEdgeList)\n this._rightMostCoord = this._finder.getCoordinate()\n }\n findResultEdges() {\n for (let it = this._dirEdgeList.iterator(); it.hasNext(); ) {\n const de = it.next()\n if (de.getDepth(Position.RIGHT) >= 1 && de.getDepth(Position.LEFT) <= 0 && !de.isInteriorAreaEdge()) \n de.setInResult(true)\n \n }\n }\n computeDepths(startEdge) {\n const nodesVisited = new HashSet()\n const nodeQueue = new LinkedList()\n const startNode = startEdge.getNode()\n nodeQueue.addLast(startNode)\n nodesVisited.add(startNode)\n startEdge.setVisited(true)\n while (!nodeQueue.isEmpty()) {\n const n = nodeQueue.removeFirst()\n nodesVisited.add(n)\n this.computeNodeDepth(n)\n for (let i = n.getEdges().iterator(); i.hasNext(); ) {\n const de = i.next()\n const sym = de.getSym()\n if (sym.isVisited()) continue\n const adjNode = sym.getNode()\n if (!nodesVisited.contains(adjNode)) {\n nodeQueue.addLast(adjNode)\n nodesVisited.add(adjNode)\n }\n }\n }\n }\n compareTo(o) {\n const graph = o\n if (this._rightMostCoord.x < graph._rightMostCoord.x) \n return -1\n \n if (this._rightMostCoord.x > graph._rightMostCoord.x) \n return 1\n \n return 0\n }\n getEnvelope() {\n if (this._env === null) {\n const edgeEnv = new Envelope()\n for (let it = this._dirEdgeList.iterator(); it.hasNext(); ) {\n const dirEdge = it.next()\n const pts = dirEdge.getEdge().getCoordinates()\n for (let i = 0; i < pts.length - 1; i++) \n edgeEnv.expandToInclude(pts[i])\n \n }\n this._env = edgeEnv\n }\n return this._env\n }\n addReachable(startNode) {\n const nodeStack = new Stack()\n nodeStack.add(startNode)\n while (!nodeStack.empty()) {\n const node = nodeStack.pop()\n this.add(node, nodeStack)\n }\n }\n copySymDepths(de) {\n const sym = de.getSym()\n sym.setDepth(Position.LEFT, de.getDepth(Position.RIGHT))\n sym.setDepth(Position.RIGHT, de.getDepth(Position.LEFT))\n }\n add(node, nodeStack) {\n node.setVisited(true)\n this._nodes.add(node)\n for (let i = node.getEdges().iterator(); i.hasNext(); ) {\n const de = i.next()\n this._dirEdgeList.add(de)\n const sym = de.getSym()\n const symNode = sym.getNode()\n if (!symNode.isVisited()) nodeStack.push(symNode)\n }\n }\n getNodes() {\n return this._nodes\n }\n getDirectedEdges() {\n return this._dirEdgeList\n }\n get interfaces_() {\n return [Comparable]\n }\n}\n","import Location from '../geom/Location'\nimport Position from './Position'\nimport PointLocation from '../algorithm/PointLocation'\nimport TopologyException from '../geom/TopologyException'\nimport Orientation from '../algorithm/Orientation'\nimport Label from './Label'\nimport ArrayList from '../../../../java/util/ArrayList'\nimport Assert from '../util/Assert'\nexport default class EdgeRing {\n constructor() {\n EdgeRing.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._startDe = null\n this._maxNodeDegree = -1\n this._edges = new ArrayList()\n this._pts = new ArrayList()\n this._label = new Label(Location.NONE)\n this._ring = null\n this._isHole = null\n this._shell = null\n this._holes = new ArrayList()\n this._geometryFactory = null\n if (arguments.length === 0) {} else if (arguments.length === 2) {\n const start = arguments[0], geometryFactory = arguments[1]\n this._geometryFactory = geometryFactory\n this.computePoints(start)\n this.computeRing()\n }\n }\n computeRing() {\n if (this._ring !== null) return null\n const coord = new Array(this._pts.size()).fill(null)\n for (let i = 0; i < this._pts.size(); i++) \n coord[i] = this._pts.get(i)\n \n this._ring = this._geometryFactory.createLinearRing(coord)\n this._isHole = Orientation.isCCW(this._ring.getCoordinates())\n }\n isIsolated() {\n return this._label.getGeometryCount() === 1\n }\n computePoints(start) {\n this._startDe = start\n let de = start\n let isFirstEdge = true\n do {\n if (de === null) throw new TopologyException('Found null DirectedEdge')\n if (de.getEdgeRing() === this) throw new TopologyException('Directed Edge visited twice during ring-building at ' + de.getCoordinate())\n this._edges.add(de)\n const label = de.getLabel()\n Assert.isTrue(label.isArea())\n this.mergeLabel(label)\n this.addPoints(de.getEdge(), de.isForward(), isFirstEdge)\n isFirstEdge = false\n this.setEdgeRing(de, this)\n de = this.getNext(de)\n } while (de !== this._startDe)\n }\n getLinearRing() {\n return this._ring\n }\n getCoordinate(i) {\n return this._pts.get(i)\n }\n computeMaxNodeDegree() {\n this._maxNodeDegree = 0\n let de = this._startDe\n do {\n const node = de.getNode()\n const degree = node.getEdges().getOutgoingDegree(this)\n if (degree > this._maxNodeDegree) this._maxNodeDegree = degree\n de = this.getNext(de)\n } while (de !== this._startDe)\n this._maxNodeDegree *= 2\n }\n addPoints(edge, isForward, isFirstEdge) {\n const edgePts = edge.getCoordinates()\n if (isForward) {\n let startIndex = 1\n if (isFirstEdge) startIndex = 0\n for (let i = startIndex; i < edgePts.length; i++) \n this._pts.add(edgePts[i])\n \n } else {\n let startIndex = edgePts.length - 2\n if (isFirstEdge) startIndex = edgePts.length - 1\n for (let i = startIndex; i >= 0; i--) \n this._pts.add(edgePts[i])\n \n }\n }\n isHole() {\n return this._isHole\n }\n setInResult() {\n let de = this._startDe\n do {\n de.getEdge().setInResult(true)\n de = de.getNext()\n } while (de !== this._startDe)\n }\n containsPoint(p) {\n const shell = this.getLinearRing()\n const env = shell.getEnvelopeInternal()\n if (!env.contains(p)) return false\n if (!PointLocation.isInRing(p, shell.getCoordinates())) return false\n for (let i = this._holes.iterator(); i.hasNext(); ) {\n const hole = i.next()\n if (hole.containsPoint(p)) return false\n }\n return true\n }\n addHole(ring) {\n this._holes.add(ring)\n }\n isShell() {\n return this._shell === null\n }\n getLabel() {\n return this._label\n }\n getEdges() {\n return this._edges\n }\n getMaxNodeDegree() {\n if (this._maxNodeDegree < 0) this.computeMaxNodeDegree()\n return this._maxNodeDegree\n }\n getShell() {\n return this._shell\n }\n mergeLabel() {\n if (arguments.length === 1) {\n const deLabel = arguments[0]\n this.mergeLabel(deLabel, 0)\n this.mergeLabel(deLabel, 1)\n } else if (arguments.length === 2) {\n const deLabel = arguments[0], geomIndex = arguments[1]\n const loc = deLabel.getLocation(geomIndex, Position.RIGHT)\n if (loc === Location.NONE) return null\n if (this._label.getLocation(geomIndex) === Location.NONE) {\n this._label.setLocation(geomIndex, loc)\n return null\n }\n }\n }\n setShell(shell) {\n this._shell = shell\n if (shell !== null) shell.addHole(this)\n }\n toPolygon(geometryFactory) {\n const holeLR = new Array(this._holes.size()).fill(null)\n for (let i = 0; i < this._holes.size(); i++) \n holeLR[i] = this._holes.get(i).getLinearRing()\n \n const poly = geometryFactory.createPolygon(this.getLinearRing(), holeLR)\n return poly\n }\n}\n","import EdgeRing from '../../geomgraph/EdgeRing'\nexport default class MinimalEdgeRing extends EdgeRing {\n constructor() {\n super()\n MinimalEdgeRing.constructor_.apply(this, arguments)\n }\n static constructor_() {\n const start = arguments[0], geometryFactory = arguments[1]\n EdgeRing.constructor_.call(this, start, geometryFactory)\n }\n setEdgeRing(de, er) {\n de.setMinEdgeRing(er)\n }\n getNext(de) {\n return de.getNextMin()\n }\n}\n","import MinimalEdgeRing from './MinimalEdgeRing'\nimport EdgeRing from '../../geomgraph/EdgeRing'\nimport ArrayList from '../../../../../java/util/ArrayList'\nexport default class MaximalEdgeRing extends EdgeRing {\n constructor() {\n super()\n MaximalEdgeRing.constructor_.apply(this, arguments)\n }\n static constructor_() {\n const start = arguments[0], geometryFactory = arguments[1]\n EdgeRing.constructor_.call(this, start, geometryFactory)\n }\n buildMinimalRings() {\n const minEdgeRings = new ArrayList()\n let de = this._startDe\n do {\n if (de.getMinEdgeRing() === null) {\n const minEr = new MinimalEdgeRing(de, this._geometryFactory)\n minEdgeRings.add(minEr)\n }\n de = de.getNext()\n } while (de !== this._startDe)\n return minEdgeRings\n }\n setEdgeRing(de, er) {\n de.setEdgeRing(er)\n }\n linkDirectedEdgesForMinimalEdgeRings() {\n let de = this._startDe\n do {\n const node = de.getNode()\n node.getEdges().linkMinimalDirectedEdges(this)\n de = de.getNext()\n } while (de !== this._startDe)\n }\n getNext(de) {\n return de.getNext()\n }\n}\n","import PointLocation from '../../algorithm/PointLocation'\nimport TopologyException from '../../geom/TopologyException'\nimport MaximalEdgeRing from './MaximalEdgeRing'\nimport CoordinateArrays from '../../geom/CoordinateArrays'\nimport ArrayList from '../../../../../java/util/ArrayList'\nimport Assert from '../../util/Assert'\nimport PlanarGraph from '../../geomgraph/PlanarGraph'\nexport default class PolygonBuilder {\n constructor() {\n PolygonBuilder.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._geometryFactory = null\n this._shellList = new ArrayList()\n const geometryFactory = arguments[0]\n this._geometryFactory = geometryFactory\n }\n static findEdgeRingContaining(testEr, shellList) {\n const testRing = testEr.getLinearRing()\n const testEnv = testRing.getEnvelopeInternal()\n let testPt = testRing.getCoordinateN(0)\n let minShell = null\n let minShellEnv = null\n for (let it = shellList.iterator(); it.hasNext(); ) {\n const tryShell = it.next()\n const tryShellRing = tryShell.getLinearRing()\n const tryShellEnv = tryShellRing.getEnvelopeInternal()\n if (tryShellEnv.equals(testEnv)) continue\n if (!tryShellEnv.contains(testEnv)) continue\n testPt = CoordinateArrays.ptNotInList(testRing.getCoordinates(), tryShellRing.getCoordinates())\n let isContained = false\n if (PointLocation.isInRing(testPt, tryShellRing.getCoordinates())) isContained = true\n if (isContained) \n if (minShell === null || minShellEnv.contains(tryShellEnv)) {\n minShell = tryShell\n minShellEnv = minShell.getLinearRing().getEnvelopeInternal()\n }\n \n }\n return minShell\n }\n sortShellsAndHoles(edgeRings, shellList, freeHoleList) {\n for (let it = edgeRings.iterator(); it.hasNext(); ) {\n const er = it.next()\n if (er.isHole()) \n freeHoleList.add(er)\n else \n shellList.add(er)\n \n }\n }\n computePolygons(shellList) {\n const resultPolyList = new ArrayList()\n for (let it = shellList.iterator(); it.hasNext(); ) {\n const er = it.next()\n const poly = er.toPolygon(this._geometryFactory)\n resultPolyList.add(poly)\n }\n return resultPolyList\n }\n placeFreeHoles(shellList, freeHoleList) {\n for (let it = freeHoleList.iterator(); it.hasNext(); ) {\n const hole = it.next()\n if (hole.getShell() === null) {\n const shell = PolygonBuilder.findEdgeRingContaining(hole, shellList)\n if (shell === null) throw new TopologyException('unable to assign hole to a shell', hole.getCoordinate(0))\n hole.setShell(shell)\n }\n }\n }\n buildMinimalEdgeRings(maxEdgeRings, shellList, freeHoleList) {\n const edgeRings = new ArrayList()\n for (let it = maxEdgeRings.iterator(); it.hasNext(); ) {\n const er = it.next()\n if (er.getMaxNodeDegree() > 2) {\n er.linkDirectedEdgesForMinimalEdgeRings()\n const minEdgeRings = er.buildMinimalRings()\n const shell = this.findShell(minEdgeRings)\n if (shell !== null) {\n this.placePolygonHoles(shell, minEdgeRings)\n shellList.add(shell)\n } else {\n freeHoleList.addAll(minEdgeRings)\n }\n } else {\n edgeRings.add(er)\n }\n }\n return edgeRings\n }\n buildMaximalEdgeRings(dirEdges) {\n const maxEdgeRings = new ArrayList()\n for (let it = dirEdges.iterator(); it.hasNext(); ) {\n const de = it.next()\n if (de.isInResult() && de.getLabel().isArea()) \n if (de.getEdgeRing() === null) {\n const er = new MaximalEdgeRing(de, this._geometryFactory)\n maxEdgeRings.add(er)\n er.setInResult()\n }\n \n }\n return maxEdgeRings\n }\n placePolygonHoles(shell, minEdgeRings) {\n for (let it = minEdgeRings.iterator(); it.hasNext(); ) {\n const er = it.next()\n if (er.isHole()) \n er.setShell(shell)\n \n }\n }\n getPolygons() {\n const resultPolyList = this.computePolygons(this._shellList)\n return resultPolyList\n }\n findShell(minEdgeRings) {\n let shellCount = 0\n let shell = null\n for (let it = minEdgeRings.iterator(); it.hasNext(); ) {\n const er = it.next()\n if (!er.isHole()) {\n shell = er\n shellCount++\n }\n }\n Assert.isTrue(shellCount <= 1, 'found two shells in MinimalEdgeRing list')\n return shell\n }\n add() {\n if (arguments.length === 1) {\n const graph = arguments[0]\n this.add(graph.getEdgeEnds(), graph.getNodes())\n } else if (arguments.length === 2) {\n const dirEdges = arguments[0], nodes = arguments[1]\n PlanarGraph.linkResultDirectedEdges(nodes)\n const maxEdgeRings = this.buildMaximalEdgeRings(dirEdges)\n const freeHoleList = new ArrayList()\n const edgeRings = this.buildMinimalEdgeRings(maxEdgeRings, this._shellList, freeHoleList)\n this.sortShellsAndHoles(edgeRings, this._shellList, freeHoleList)\n this.placeFreeHoles(this._shellList, freeHoleList)\n }\n }\n}\n","import CoordinateList from '../../geom/CoordinateList'\nimport Orientation from '../../algorithm/Orientation'\nimport Distance from '../../algorithm/Distance'\nexport default class BufferInputLineSimplifier {\n constructor() {\n BufferInputLineSimplifier.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._inputLine = null\n this._distanceTol = null\n this._isDeleted = null\n this._angleOrientation = Orientation.COUNTERCLOCKWISE\n const inputLine = arguments[0]\n this._inputLine = inputLine\n }\n static simplify(inputLine, distanceTol) {\n const simp = new BufferInputLineSimplifier(inputLine)\n return simp.simplify(distanceTol)\n }\n isDeletable(i0, i1, i2, distanceTol) {\n const p0 = this._inputLine[i0]\n const p1 = this._inputLine[i1]\n const p2 = this._inputLine[i2]\n if (!this.isConcave(p0, p1, p2)) return false\n if (!this.isShallow(p0, p1, p2, distanceTol)) return false\n return this.isShallowSampled(p0, p1, i0, i2, distanceTol)\n }\n deleteShallowConcavities() {\n let index = 1\n let midIndex = this.findNextNonDeletedIndex(index)\n let lastIndex = this.findNextNonDeletedIndex(midIndex)\n let isChanged = false\n while (lastIndex < this._inputLine.length) {\n let isMiddleVertexDeleted = false\n if (this.isDeletable(index, midIndex, lastIndex, this._distanceTol)) {\n this._isDeleted[midIndex] = BufferInputLineSimplifier.DELETE\n isMiddleVertexDeleted = true\n isChanged = true\n }\n if (isMiddleVertexDeleted) index = lastIndex; else index = midIndex\n midIndex = this.findNextNonDeletedIndex(index)\n lastIndex = this.findNextNonDeletedIndex(midIndex)\n }\n return isChanged\n }\n isShallowConcavity(p0, p1, p2, distanceTol) {\n const orientation = Orientation.index(p0, p1, p2)\n const isAngleToSimplify = orientation === this._angleOrientation\n if (!isAngleToSimplify) return false\n const dist = Distance.pointToSegment(p1, p0, p2)\n return dist < distanceTol\n }\n isShallowSampled(p0, p2, i0, i2, distanceTol) {\n let inc = Math.trunc((i2 - i0) / BufferInputLineSimplifier.NUM_PTS_TO_CHECK)\n if (inc <= 0) inc = 1\n for (let i = i0; i < i2; i += inc) \n if (!this.isShallow(p0, p2, this._inputLine[i], distanceTol)) return false\n \n return true\n }\n isConcave(p0, p1, p2) {\n const orientation = Orientation.index(p0, p1, p2)\n const isConcave = orientation === this._angleOrientation\n return isConcave\n }\n simplify(distanceTol) {\n this._distanceTol = Math.abs(distanceTol)\n if (distanceTol < 0) this._angleOrientation = Orientation.CLOCKWISE\n this._isDeleted = new Array(this._inputLine.length).fill(null)\n let isChanged = false\n do \n isChanged = this.deleteShallowConcavities()\n while (isChanged)\n return this.collapseLine()\n }\n findNextNonDeletedIndex(index) {\n let next = index + 1\n while (next < this._inputLine.length && this._isDeleted[next] === BufferInputLineSimplifier.DELETE) next++\n return next\n }\n isShallow(p0, p1, p2, distanceTol) {\n const dist = Distance.pointToSegment(p1, p0, p2)\n return dist < distanceTol\n }\n collapseLine() {\n const coordList = new CoordinateList()\n for (let i = 0; i < this._inputLine.length; i++) \n if (this._isDeleted[i] !== BufferInputLineSimplifier.DELETE) coordList.add(this._inputLine[i])\n \n return coordList.toCoordinateArray()\n }\n}\nBufferInputLineSimplifier.INIT = 0\nBufferInputLineSimplifier.DELETE = 1\nBufferInputLineSimplifier.KEEP = 1\nBufferInputLineSimplifier.NUM_PTS_TO_CHECK = 10\n","import GeometryFactory from '../../geom/GeometryFactory'\nimport Coordinate from '../../geom/Coordinate'\nimport ArrayList from '../../../../../java/util/ArrayList'\nexport default class OffsetSegmentString {\n constructor() {\n OffsetSegmentString.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._ptList = null\n this._precisionModel = null\n this._minimimVertexDistance = 0.0\n this._ptList = new ArrayList()\n }\n getCoordinates() {\n const coord = this._ptList.toArray(OffsetSegmentString.COORDINATE_ARRAY_TYPE)\n return coord\n }\n setPrecisionModel(precisionModel) {\n this._precisionModel = precisionModel\n }\n addPt(pt) {\n const bufPt = new Coordinate(pt)\n this._precisionModel.makePrecise(bufPt)\n if (this.isRedundant(bufPt)) return null\n this._ptList.add(bufPt)\n }\n reverse() {}\n addPts(pt, isForward) {\n if (isForward) \n for (let i = 0; i < pt.length; i++) \n this.addPt(pt[i])\n \n else \n for (let i = pt.length - 1; i >= 0; i--) \n this.addPt(pt[i])\n \n \n }\n isRedundant(pt) {\n if (this._ptList.size() < 1) return false\n const lastPt = this._ptList.get(this._ptList.size() - 1)\n const ptDist = pt.distance(lastPt)\n if (ptDist < this._minimimVertexDistance) return true\n return false\n }\n toString() {\n const fact = new GeometryFactory()\n const line = fact.createLineString(this.getCoordinates())\n return line.toString()\n }\n closeRing() {\n if (this._ptList.size() < 1) return null\n const startPt = new Coordinate(this._ptList.get(0))\n const lastPt = this._ptList.get(this._ptList.size() - 1)\n if (startPt.equals(lastPt)) return null\n this._ptList.add(startPt)\n }\n setMinimumVertexDistance(minimimVertexDistance) {\n this._minimimVertexDistance = minimimVertexDistance\n }\n}\nOffsetSegmentString.COORDINATE_ARRAY_TYPE = new Array(0).fill(null)\n","import BufferParameters from './BufferParameters'\nimport Position from '../../geomgraph/Position'\nimport Coordinate from '../../geom/Coordinate'\nimport Orientation from '../../algorithm/Orientation'\nimport Intersection from '../../algorithm/Intersection'\nimport OffsetSegmentString from './OffsetSegmentString'\nimport LineSegment from '../../geom/LineSegment'\nimport Angle from '../../algorithm/Angle'\nimport RobustLineIntersector from '../../algorithm/RobustLineIntersector'\nexport default class OffsetSegmentGenerator {\n constructor() {\n OffsetSegmentGenerator.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._maxCurveSegmentError = 0.0\n this._filletAngleQuantum = null\n this._closingSegLengthFactor = 1\n this._segList = null\n this._distance = 0.0\n this._precisionModel = null\n this._bufParams = null\n this._li = null\n this._s0 = null\n this._s1 = null\n this._s2 = null\n this._seg0 = new LineSegment()\n this._seg1 = new LineSegment()\n this._offset0 = new LineSegment()\n this._offset1 = new LineSegment()\n this._side = 0\n this._hasNarrowConcaveAngle = false\n const precisionModel = arguments[0], bufParams = arguments[1], distance = arguments[2]\n this._precisionModel = precisionModel\n this._bufParams = bufParams\n this._li = new RobustLineIntersector()\n this._filletAngleQuantum = Math.PI / 2.0 / bufParams.getQuadrantSegments()\n if (bufParams.getQuadrantSegments() >= 8 && bufParams.getJoinStyle() === BufferParameters.JOIN_ROUND) this._closingSegLengthFactor = OffsetSegmentGenerator.MAX_CLOSING_SEG_LEN_FACTOR\n this.init(distance)\n }\n addNextSegment(p, addStartPoint) {\n this._s0 = this._s1\n this._s1 = this._s2\n this._s2 = p\n this._seg0.setCoordinates(this._s0, this._s1)\n this.computeOffsetSegment(this._seg0, this._side, this._distance, this._offset0)\n this._seg1.setCoordinates(this._s1, this._s2)\n this.computeOffsetSegment(this._seg1, this._side, this._distance, this._offset1)\n if (this._s1.equals(this._s2)) return null\n const orientation = Orientation.index(this._s0, this._s1, this._s2)\n const outsideTurn = orientation === Orientation.CLOCKWISE && this._side === Position.LEFT || orientation === Orientation.COUNTERCLOCKWISE && this._side === Position.RIGHT\n if (orientation === 0) \n this.addCollinear(addStartPoint)\n else if (outsideTurn) \n this.addOutsideTurn(orientation, addStartPoint)\n else \n this.addInsideTurn(orientation, addStartPoint)\n \n }\n addLineEndCap(p0, p1) {\n const seg = new LineSegment(p0, p1)\n const offsetL = new LineSegment()\n this.computeOffsetSegment(seg, Position.LEFT, this._distance, offsetL)\n const offsetR = new LineSegment()\n this.computeOffsetSegment(seg, Position.RIGHT, this._distance, offsetR)\n const dx = p1.x - p0.x\n const dy = p1.y - p0.y\n const angle = Math.atan2(dy, dx)\n switch (this._bufParams.getEndCapStyle()) {\n case BufferParameters.CAP_ROUND:\n this._segList.addPt(offsetL.p1)\n this.addDirectedFillet(p1, angle + Math.PI / 2, angle - Math.PI / 2, Orientation.CLOCKWISE, this._distance)\n this._segList.addPt(offsetR.p1)\n break\n case BufferParameters.CAP_FLAT:\n this._segList.addPt(offsetL.p1)\n this._segList.addPt(offsetR.p1)\n break\n case BufferParameters.CAP_SQUARE:\n const squareCapSideOffset = new Coordinate()\n squareCapSideOffset.x = Math.abs(this._distance) * Math.cos(angle)\n squareCapSideOffset.y = Math.abs(this._distance) * Math.sin(angle)\n const squareCapLOffset = new Coordinate(offsetL.p1.x + squareCapSideOffset.x, offsetL.p1.y + squareCapSideOffset.y)\n const squareCapROffset = new Coordinate(offsetR.p1.x + squareCapSideOffset.x, offsetR.p1.y + squareCapSideOffset.y)\n this._segList.addPt(squareCapLOffset)\n this._segList.addPt(squareCapROffset)\n break\n }\n }\n getCoordinates() {\n const pts = this._segList.getCoordinates()\n return pts\n }\n addMitreJoin(p, offset0, offset1, distance) {\n const intPt = Intersection.intersection(offset0.p0, offset0.p1, offset1.p0, offset1.p1)\n if (intPt !== null) {\n const mitreRatio = distance <= 0.0 ? 1.0 : intPt.distance(p) / Math.abs(distance)\n if (mitreRatio <= this._bufParams.getMitreLimit()) {\n this._segList.addPt(intPt)\n return null\n }\n }\n this.addLimitedMitreJoin(offset0, offset1, distance, this._bufParams.getMitreLimit())\n }\n addOutsideTurn(orientation, addStartPoint) {\n if (this._offset0.p1.distance(this._offset1.p0) < this._distance * OffsetSegmentGenerator.OFFSET_SEGMENT_SEPARATION_FACTOR) {\n this._segList.addPt(this._offset0.p1)\n return null\n }\n if (this._bufParams.getJoinStyle() === BufferParameters.JOIN_MITRE) {\n this.addMitreJoin(this._s1, this._offset0, this._offset1, this._distance)\n } else if (this._bufParams.getJoinStyle() === BufferParameters.JOIN_BEVEL) {\n this.addBevelJoin(this._offset0, this._offset1)\n } else {\n if (addStartPoint) this._segList.addPt(this._offset0.p1)\n this.addCornerFillet(this._s1, this._offset0.p1, this._offset1.p0, orientation, this._distance)\n this._segList.addPt(this._offset1.p0)\n }\n }\n createSquare(p) {\n this._segList.addPt(new Coordinate(p.x + this._distance, p.y + this._distance))\n this._segList.addPt(new Coordinate(p.x + this._distance, p.y - this._distance))\n this._segList.addPt(new Coordinate(p.x - this._distance, p.y - this._distance))\n this._segList.addPt(new Coordinate(p.x - this._distance, p.y + this._distance))\n this._segList.closeRing()\n }\n addSegments(pt, isForward) {\n this._segList.addPts(pt, isForward)\n }\n addFirstSegment() {\n this._segList.addPt(this._offset1.p0)\n }\n addCornerFillet(p, p0, p1, direction, radius) {\n const dx0 = p0.x - p.x\n const dy0 = p0.y - p.y\n let startAngle = Math.atan2(dy0, dx0)\n const dx1 = p1.x - p.x\n const dy1 = p1.y - p.y\n const endAngle = Math.atan2(dy1, dx1)\n if (direction === Orientation.CLOCKWISE) {\n if (startAngle <= endAngle) startAngle += 2.0 * Math.PI\n } else {\n if (startAngle >= endAngle) startAngle -= 2.0 * Math.PI\n }\n this._segList.addPt(p0)\n this.addDirectedFillet(p, startAngle, endAngle, direction, radius)\n this._segList.addPt(p1)\n }\n addLastSegment() {\n this._segList.addPt(this._offset1.p1)\n }\n initSideSegments(s1, s2, side) {\n this._s1 = s1\n this._s2 = s2\n this._side = side\n this._seg1.setCoordinates(s1, s2)\n this.computeOffsetSegment(this._seg1, side, this._distance, this._offset1)\n }\n addLimitedMitreJoin(offset0, offset1, distance, mitreLimit) {\n const basePt = this._seg0.p1\n const ang0 = Angle.angle(basePt, this._seg0.p0)\n const angDiff = Angle.angleBetweenOriented(this._seg0.p0, basePt, this._seg1.p1)\n const angDiffHalf = angDiff / 2\n const midAng = Angle.normalize(ang0 + angDiffHalf)\n const mitreMidAng = Angle.normalize(midAng + Math.PI)\n const mitreDist = mitreLimit * distance\n const bevelDelta = mitreDist * Math.abs(Math.sin(angDiffHalf))\n const bevelHalfLen = distance - bevelDelta\n const bevelMidX = basePt.x + mitreDist * Math.cos(mitreMidAng)\n const bevelMidY = basePt.y + mitreDist * Math.sin(mitreMidAng)\n const bevelMidPt = new Coordinate(bevelMidX, bevelMidY)\n const mitreMidLine = new LineSegment(basePt, bevelMidPt)\n const bevelEndLeft = mitreMidLine.pointAlongOffset(1.0, bevelHalfLen)\n const bevelEndRight = mitreMidLine.pointAlongOffset(1.0, -bevelHalfLen)\n if (this._side === Position.LEFT) {\n this._segList.addPt(bevelEndLeft)\n this._segList.addPt(bevelEndRight)\n } else {\n this._segList.addPt(bevelEndRight)\n this._segList.addPt(bevelEndLeft)\n }\n }\n addDirectedFillet(p, startAngle, endAngle, direction, radius) {\n const directionFactor = direction === Orientation.CLOCKWISE ? -1 : 1\n const totalAngle = Math.abs(startAngle - endAngle)\n const nSegs = Math.trunc(totalAngle / this._filletAngleQuantum + 0.5)\n if (nSegs < 1) return null\n const angleInc = totalAngle / nSegs\n const pt = new Coordinate()\n for (let i = 0; i < nSegs; i++) {\n const angle = startAngle + directionFactor * i * angleInc\n pt.x = p.x + radius * Math.cos(angle)\n pt.y = p.y + radius * Math.sin(angle)\n this._segList.addPt(pt)\n }\n }\n computeOffsetSegment(seg, side, distance, offset) {\n const sideSign = side === Position.LEFT ? 1 : -1\n const dx = seg.p1.x - seg.p0.x\n const dy = seg.p1.y - seg.p0.y\n const len = Math.sqrt(dx * dx + dy * dy)\n const ux = sideSign * distance * dx / len\n const uy = sideSign * distance * dy / len\n offset.p0.x = seg.p0.x - uy\n offset.p0.y = seg.p0.y + ux\n offset.p1.x = seg.p1.x - uy\n offset.p1.y = seg.p1.y + ux\n }\n addInsideTurn(orientation, addStartPoint) {\n this._li.computeIntersection(this._offset0.p0, this._offset0.p1, this._offset1.p0, this._offset1.p1)\n if (this._li.hasIntersection()) {\n this._segList.addPt(this._li.getIntersection(0))\n } else {\n this._hasNarrowConcaveAngle = true\n if (this._offset0.p1.distance(this._offset1.p0) < this._distance * OffsetSegmentGenerator.INSIDE_TURN_VERTEX_SNAP_DISTANCE_FACTOR) {\n this._segList.addPt(this._offset0.p1)\n } else {\n this._segList.addPt(this._offset0.p1)\n if (this._closingSegLengthFactor > 0) {\n const mid0 = new Coordinate((this._closingSegLengthFactor * this._offset0.p1.x + this._s1.x) / (this._closingSegLengthFactor + 1), (this._closingSegLengthFactor * this._offset0.p1.y + this._s1.y) / (this._closingSegLengthFactor + 1))\n this._segList.addPt(mid0)\n const mid1 = new Coordinate((this._closingSegLengthFactor * this._offset1.p0.x + this._s1.x) / (this._closingSegLengthFactor + 1), (this._closingSegLengthFactor * this._offset1.p0.y + this._s1.y) / (this._closingSegLengthFactor + 1))\n this._segList.addPt(mid1)\n } else {\n this._segList.addPt(this._s1)\n }\n this._segList.addPt(this._offset1.p0)\n }\n }\n }\n createCircle(p) {\n const pt = new Coordinate(p.x + this._distance, p.y)\n this._segList.addPt(pt)\n this.addDirectedFillet(p, 0.0, 2.0 * Math.PI, -1, this._distance)\n this._segList.closeRing()\n }\n addBevelJoin(offset0, offset1) {\n this._segList.addPt(offset0.p1)\n this._segList.addPt(offset1.p0)\n }\n init(distance) {\n this._distance = distance\n this._maxCurveSegmentError = distance * (1 - Math.cos(this._filletAngleQuantum / 2.0))\n this._segList = new OffsetSegmentString()\n this._segList.setPrecisionModel(this._precisionModel)\n this._segList.setMinimumVertexDistance(distance * OffsetSegmentGenerator.CURVE_VERTEX_SNAP_DISTANCE_FACTOR)\n }\n addCollinear(addStartPoint) {\n this._li.computeIntersection(this._s0, this._s1, this._s1, this._s2)\n const numInt = this._li.getIntersectionNum()\n if (numInt >= 2) \n if (this._bufParams.getJoinStyle() === BufferParameters.JOIN_BEVEL || this._bufParams.getJoinStyle() === BufferParameters.JOIN_MITRE) {\n if (addStartPoint) this._segList.addPt(this._offset0.p1)\n this._segList.addPt(this._offset1.p0)\n } else {\n this.addCornerFillet(this._s1, this._offset0.p1, this._offset1.p0, Orientation.CLOCKWISE, this._distance)\n }\n \n }\n closeRing() {\n this._segList.closeRing()\n }\n hasNarrowConcaveAngle() {\n return this._hasNarrowConcaveAngle\n }\n}\nOffsetSegmentGenerator.OFFSET_SEGMENT_SEPARATION_FACTOR = 1.0E-3\nOffsetSegmentGenerator.INSIDE_TURN_VERTEX_SNAP_DISTANCE_FACTOR = 1.0E-3\nOffsetSegmentGenerator.CURVE_VERTEX_SNAP_DISTANCE_FACTOR = 1.0E-6\nOffsetSegmentGenerator.MAX_CLOSING_SEG_LEN_FACTOR = 80\n","import BufferParameters from './BufferParameters'\nimport Position from '../../geomgraph/Position'\nimport Coordinate from '../../geom/Coordinate'\nimport BufferInputLineSimplifier from './BufferInputLineSimplifier'\nimport CoordinateArrays from '../../geom/CoordinateArrays'\nimport OffsetSegmentGenerator from './OffsetSegmentGenerator'\nexport default class OffsetCurveBuilder {\n constructor() {\n OffsetCurveBuilder.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._distance = 0.0\n this._precisionModel = null\n this._bufParams = null\n const precisionModel = arguments[0], bufParams = arguments[1]\n this._precisionModel = precisionModel\n this._bufParams = bufParams\n }\n static copyCoordinates(pts) {\n const copy = new Array(pts.length).fill(null)\n for (let i = 0; i < copy.length; i++) \n copy[i] = new Coordinate(pts[i])\n \n return copy\n }\n getOffsetCurve(inputPts, distance) {\n this._distance = distance\n if (distance === 0.0) return null\n const isRightSide = distance < 0.0\n const posDistance = Math.abs(distance)\n const segGen = this.getSegGen(posDistance)\n if (inputPts.length <= 1) \n this.computePointCurve(inputPts[0], segGen)\n else \n this.computeOffsetCurve(inputPts, isRightSide, segGen)\n \n const curvePts = segGen.getCoordinates()\n if (isRightSide) CoordinateArrays.reverse(curvePts)\n return curvePts\n }\n computeSingleSidedBufferCurve(inputPts, isRightSide, segGen) {\n const distTol = this.simplifyTolerance(this._distance)\n if (isRightSide) {\n segGen.addSegments(inputPts, true)\n const simp2 = BufferInputLineSimplifier.simplify(inputPts, -distTol)\n const n2 = simp2.length - 1\n segGen.initSideSegments(simp2[n2], simp2[n2 - 1], Position.LEFT)\n segGen.addFirstSegment()\n for (let i = n2 - 2; i >= 0; i--) \n segGen.addNextSegment(simp2[i], true)\n \n } else {\n segGen.addSegments(inputPts, false)\n const simp1 = BufferInputLineSimplifier.simplify(inputPts, distTol)\n const n1 = simp1.length - 1\n segGen.initSideSegments(simp1[0], simp1[1], Position.LEFT)\n segGen.addFirstSegment()\n for (let i = 2; i <= n1; i++) \n segGen.addNextSegment(simp1[i], true)\n \n }\n segGen.addLastSegment()\n segGen.closeRing()\n }\n computeRingBufferCurve(inputPts, side, segGen) {\n let distTol = this.simplifyTolerance(this._distance)\n if (side === Position.RIGHT) distTol = -distTol\n const simp = BufferInputLineSimplifier.simplify(inputPts, distTol)\n const n = simp.length - 1\n segGen.initSideSegments(simp[n - 1], simp[0], side)\n for (let i = 1; i <= n; i++) {\n const addStartPoint = i !== 1\n segGen.addNextSegment(simp[i], addStartPoint)\n }\n segGen.closeRing()\n }\n computeLineBufferCurve(inputPts, segGen) {\n const distTol = this.simplifyTolerance(this._distance)\n const simp1 = BufferInputLineSimplifier.simplify(inputPts, distTol)\n const n1 = simp1.length - 1\n segGen.initSideSegments(simp1[0], simp1[1], Position.LEFT)\n for (let i = 2; i <= n1; i++) \n segGen.addNextSegment(simp1[i], true)\n \n segGen.addLastSegment()\n segGen.addLineEndCap(simp1[n1 - 1], simp1[n1])\n const simp2 = BufferInputLineSimplifier.simplify(inputPts, -distTol)\n const n2 = simp2.length - 1\n segGen.initSideSegments(simp2[n2], simp2[n2 - 1], Position.LEFT)\n for (let i = n2 - 2; i >= 0; i--) \n segGen.addNextSegment(simp2[i], true)\n \n segGen.addLastSegment()\n segGen.addLineEndCap(simp2[1], simp2[0])\n segGen.closeRing()\n }\n computePointCurve(pt, segGen) {\n switch (this._bufParams.getEndCapStyle()) {\n case BufferParameters.CAP_ROUND:\n segGen.createCircle(pt)\n break\n case BufferParameters.CAP_SQUARE:\n segGen.createSquare(pt)\n break\n }\n }\n getLineCurve(inputPts, distance) {\n this._distance = distance\n if (this.isLineOffsetEmpty(distance)) return null\n const posDistance = Math.abs(distance)\n const segGen = this.getSegGen(posDistance)\n if (inputPts.length <= 1) {\n this.computePointCurve(inputPts[0], segGen)\n } else \n if (this._bufParams.isSingleSided()) {\n const isRightSide = distance < 0.0\n this.computeSingleSidedBufferCurve(inputPts, isRightSide, segGen)\n } else {\n this.computeLineBufferCurve(inputPts, segGen)\n }\n \n const lineCoord = segGen.getCoordinates()\n return lineCoord\n }\n getBufferParameters() {\n return this._bufParams\n }\n simplifyTolerance(bufDistance) {\n return bufDistance * this._bufParams.getSimplifyFactor()\n }\n getRingCurve(inputPts, side, distance) {\n this._distance = distance\n if (inputPts.length <= 2) return this.getLineCurve(inputPts, distance)\n if (distance === 0.0) \n return OffsetCurveBuilder.copyCoordinates(inputPts)\n \n const segGen = this.getSegGen(distance)\n this.computeRingBufferCurve(inputPts, side, segGen)\n return segGen.getCoordinates()\n }\n computeOffsetCurve(inputPts, isRightSide, segGen) {\n const distTol = this.simplifyTolerance(this._distance)\n if (isRightSide) {\n const simp2 = BufferInputLineSimplifier.simplify(inputPts, -distTol)\n const n2 = simp2.length - 1\n segGen.initSideSegments(simp2[n2], simp2[n2 - 1], Position.LEFT)\n segGen.addFirstSegment()\n for (let i = n2 - 2; i >= 0; i--) \n segGen.addNextSegment(simp2[i], true)\n \n } else {\n const simp1 = BufferInputLineSimplifier.simplify(inputPts, distTol)\n const n1 = simp1.length - 1\n segGen.initSideSegments(simp1[0], simp1[1], Position.LEFT)\n segGen.addFirstSegment()\n for (let i = 2; i <= n1; i++) \n segGen.addNextSegment(simp1[i], true)\n \n }\n segGen.addLastSegment()\n }\n isLineOffsetEmpty(distance) {\n if (distance === 0.0) return true\n if (distance < 0.0 && !this._bufParams.isSingleSided()) return true\n return false\n }\n getSegGen(distance) {\n return new OffsetSegmentGenerator(this._precisionModel, this._bufParams, distance)\n }\n}\n","import hasInterface from '../../../../../hasInterface'\nimport Position from '../../geomgraph/Position'\nimport Coordinate from '../../geom/Coordinate'\nimport Orientation from '../../algorithm/Orientation'\nimport Collections from '../../../../../java/util/Collections'\nimport DirectedEdge from '../../geomgraph/DirectedEdge'\nimport LineSegment from '../../geom/LineSegment'\nimport Comparable from '../../../../../java/lang/Comparable'\nimport ArrayList from '../../../../../java/util/ArrayList'\nimport List from '../../../../../java/util/List'\nexport default class SubgraphDepthLocater {\n constructor() {\n SubgraphDepthLocater.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._subgraphs = null\n this._seg = new LineSegment()\n const subgraphs = arguments[0]\n this._subgraphs = subgraphs\n }\n findStabbedSegments() {\n if (arguments.length === 1) {\n const stabbingRayLeftPt = arguments[0]\n const stabbedSegments = new ArrayList()\n for (let i = this._subgraphs.iterator(); i.hasNext(); ) {\n const bsg = i.next()\n const env = bsg.getEnvelope()\n if (stabbingRayLeftPt.y < env.getMinY() || stabbingRayLeftPt.y > env.getMaxY()) continue\n this.findStabbedSegments(stabbingRayLeftPt, bsg.getDirectedEdges(), stabbedSegments)\n }\n return stabbedSegments\n } else if (arguments.length === 3) {\n if (hasInterface(arguments[2], List) && (arguments[0] instanceof Coordinate && arguments[1] instanceof DirectedEdge)) {\n const stabbingRayLeftPt = arguments[0], dirEdge = arguments[1], stabbedSegments = arguments[2]\n const pts = dirEdge.getEdge().getCoordinates()\n for (let i = 0; i < pts.length - 1; i++) {\n this._seg.p0 = pts[i]\n this._seg.p1 = pts[i + 1]\n if (this._seg.p0.y > this._seg.p1.y) this._seg.reverse()\n const maxx = Math.max(this._seg.p0.x, this._seg.p1.x)\n if (maxx < stabbingRayLeftPt.x) continue\n if (this._seg.isHorizontal()) continue\n if (stabbingRayLeftPt.y < this._seg.p0.y || stabbingRayLeftPt.y > this._seg.p1.y) continue\n if (Orientation.index(this._seg.p0, this._seg.p1, stabbingRayLeftPt) === Orientation.RIGHT) continue\n let depth = dirEdge.getDepth(Position.LEFT)\n if (!this._seg.p0.equals(pts[i])) depth = dirEdge.getDepth(Position.RIGHT)\n const ds = new DepthSegment(this._seg, depth)\n stabbedSegments.add(ds)\n }\n } else if (hasInterface(arguments[2], List) && (arguments[0] instanceof Coordinate && hasInterface(arguments[1], List))) {\n const stabbingRayLeftPt = arguments[0], dirEdges = arguments[1], stabbedSegments = arguments[2]\n for (let i = dirEdges.iterator(); i.hasNext(); ) {\n const de = i.next()\n if (!de.isForward()) continue\n this.findStabbedSegments(stabbingRayLeftPt, de, stabbedSegments)\n }\n }\n }\n }\n getDepth(p) {\n const stabbedSegments = this.findStabbedSegments(p)\n if (stabbedSegments.size() === 0) return 0\n const ds = Collections.min(stabbedSegments)\n return ds._leftDepth\n }\n}\nclass DepthSegment {\n constructor() {\n DepthSegment.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._upwardSeg = null\n this._leftDepth = null\n const seg = arguments[0], depth = arguments[1]\n this._upwardSeg = new LineSegment(seg)\n this._leftDepth = depth\n }\n compareTo(obj) {\n const other = obj\n if (this._upwardSeg.minX() >= other._upwardSeg.maxX()) return 1\n if (this._upwardSeg.maxX() <= other._upwardSeg.minX()) return -1\n let orientIndex = this._upwardSeg.orientationIndex(other._upwardSeg)\n if (orientIndex !== 0) return orientIndex\n orientIndex = -1 * other._upwardSeg.orientationIndex(this._upwardSeg)\n if (orientIndex !== 0) return orientIndex\n return this._upwardSeg.compareTo(other._upwardSeg)\n }\n compareX(seg0, seg1) {\n const compare0 = seg0.p0.compareTo(seg1.p0)\n if (compare0 !== 0) return compare0\n return seg0.p1.compareTo(seg1.p1)\n }\n toString() {\n return this._upwardSeg.toString()\n }\n get interfaces_() {\n return [Comparable]\n }\n}\nSubgraphDepthLocater.DepthSegment = DepthSegment\n","import Location from '../../geom/Location'\nimport LineString from '../../geom/LineString'\nimport Position from '../../geomgraph/Position'\nimport Point from '../../geom/Point'\nimport NodedSegmentString from '../../noding/NodedSegmentString'\nimport Polygon from '../../geom/Polygon'\nimport MultiPoint from '../../geom/MultiPoint'\nimport LinearRing from '../../geom/LinearRing'\nimport Orientation from '../../algorithm/Orientation'\nimport MultiPolygon from '../../geom/MultiPolygon'\nimport Label from '../../geomgraph/Label'\nimport GeometryCollection from '../../geom/GeometryCollection'\nimport UnsupportedOperationException from '../../../../../java/lang/UnsupportedOperationException'\nimport CoordinateArrays from '../../geom/CoordinateArrays'\nimport ArrayList from '../../../../../java/util/ArrayList'\nimport Distance from '../../algorithm/Distance'\nimport MultiLineString from '../../geom/MultiLineString'\nimport Triangle from '../../geom/Triangle'\nexport default class OffsetCurveSetBuilder {\n constructor() {\n OffsetCurveSetBuilder.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._inputGeom = null\n this._distance = null\n this._curveBuilder = null\n this._curveList = new ArrayList()\n const inputGeom = arguments[0], distance = arguments[1], curveBuilder = arguments[2]\n this._inputGeom = inputGeom\n this._distance = distance\n this._curveBuilder = curveBuilder\n }\n addRingSide(coord, offsetDistance, side, cwLeftLoc, cwRightLoc) {\n if (offsetDistance === 0.0 && coord.length < LinearRing.MINIMUM_VALID_SIZE) return null\n let leftLoc = cwLeftLoc\n let rightLoc = cwRightLoc\n if (coord.length >= LinearRing.MINIMUM_VALID_SIZE && Orientation.isCCW(coord)) {\n leftLoc = cwRightLoc\n rightLoc = cwLeftLoc\n side = Position.opposite(side)\n }\n const curve = this._curveBuilder.getRingCurve(coord, side, offsetDistance)\n this.addCurve(curve, leftLoc, rightLoc)\n }\n addRingBothSides(coord, distance) {\n this.addRingSide(coord, distance, Position.LEFT, Location.EXTERIOR, Location.INTERIOR)\n this.addRingSide(coord, distance, Position.RIGHT, Location.INTERIOR, Location.EXTERIOR)\n }\n addPoint(p) {\n if (this._distance <= 0.0) return null\n const coord = p.getCoordinates()\n const curve = this._curveBuilder.getLineCurve(coord, this._distance)\n this.addCurve(curve, Location.EXTERIOR, Location.INTERIOR)\n }\n addPolygon(p) {\n let offsetDistance = this._distance\n let offsetSide = Position.LEFT\n if (this._distance < 0.0) {\n offsetDistance = -this._distance\n offsetSide = Position.RIGHT\n }\n const shell = p.getExteriorRing()\n const shellCoord = CoordinateArrays.removeRepeatedPoints(shell.getCoordinates())\n if (this._distance < 0.0 && this.isErodedCompletely(shell, this._distance)) return null\n if (this._distance <= 0.0 && shellCoord.length < 3) return null\n this.addRingSide(shellCoord, offsetDistance, offsetSide, Location.EXTERIOR, Location.INTERIOR)\n for (let i = 0; i < p.getNumInteriorRing(); i++) {\n const hole = p.getInteriorRingN(i)\n const holeCoord = CoordinateArrays.removeRepeatedPoints(hole.getCoordinates())\n if (this._distance > 0.0 && this.isErodedCompletely(hole, -this._distance)) continue\n this.addRingSide(holeCoord, offsetDistance, Position.opposite(offsetSide), Location.INTERIOR, Location.EXTERIOR)\n }\n }\n isTriangleErodedCompletely(triangleCoord, bufferDistance) {\n const tri = new Triangle(triangleCoord[0], triangleCoord[1], triangleCoord[2])\n const inCentre = tri.inCentre()\n const distToCentre = Distance.pointToSegment(inCentre, tri.p0, tri.p1)\n return distToCentre < Math.abs(bufferDistance)\n }\n addLineString(line) {\n if (this._curveBuilder.isLineOffsetEmpty(this._distance)) return null\n const coord = CoordinateArrays.removeRepeatedPoints(line.getCoordinates())\n if (CoordinateArrays.isRing(coord) && !this._curveBuilder.getBufferParameters().isSingleSided()) {\n this.addRingBothSides(coord, this._distance)\n } else {\n const curve = this._curveBuilder.getLineCurve(coord, this._distance)\n this.addCurve(curve, Location.EXTERIOR, Location.INTERIOR)\n }\n }\n addCurve(coord, leftLoc, rightLoc) {\n if (coord === null || coord.length < 2) return null\n const e = new NodedSegmentString(coord, new Label(0, Location.BOUNDARY, leftLoc, rightLoc))\n this._curveList.add(e)\n }\n getCurves() {\n this.add(this._inputGeom)\n return this._curveList\n }\n add(g) {\n if (g.isEmpty()) return null\n if (g instanceof Polygon) this.addPolygon(g); else if (g instanceof LineString) this.addLineString(g); else if (g instanceof Point) this.addPoint(g); else if (g instanceof MultiPoint) this.addCollection(g); else if (g instanceof MultiLineString) this.addCollection(g); else if (g instanceof MultiPolygon) this.addCollection(g); else if (g instanceof GeometryCollection) this.addCollection(g); else throw new UnsupportedOperationException(g.getGeometryType())\n }\n isErodedCompletely(ring, bufferDistance) {\n const ringCoord = ring.getCoordinates()\n if (ringCoord.length < 4) return bufferDistance < 0\n if (ringCoord.length === 4) return this.isTriangleErodedCompletely(ringCoord, bufferDistance)\n const env = ring.getEnvelopeInternal()\n const envMinDimension = Math.min(env.getHeight(), env.getWidth())\n if (bufferDistance < 0.0 && 2 * Math.abs(bufferDistance) > envMinDimension) return true\n return false\n }\n addCollection(gc) {\n for (let i = 0; i < gc.getNumGeometries(); i++) {\n const g = gc.getGeometryN(i)\n this.add(g)\n }\n }\n}\n","import StringBuffer from '../../../../java/lang/StringBuffer'\nimport Location from '../geom/Location'\nimport Position from './Position'\nimport TopologyException from '../geom/TopologyException'\nimport System from '../../../../java/lang/System'\nimport SimplePointInAreaLocator from '../algorithm/locate/SimplePointInAreaLocator'\nimport ArrayList from '../../../../java/util/ArrayList'\nimport Assert from '../util/Assert'\nimport TreeMap from '../../../../java/util/TreeMap'\nexport default class EdgeEndStar {\n constructor() {\n EdgeEndStar.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._edgeMap = new TreeMap()\n this._edgeList = null\n this._ptInAreaLocation = [Location.NONE, Location.NONE]\n }\n getNextCW(ee) {\n this.getEdges()\n const i = this._edgeList.indexOf(ee)\n let iNextCW = i - 1\n if (i === 0) iNextCW = this._edgeList.size() - 1\n return this._edgeList.get(iNextCW)\n }\n propagateSideLabels(geomIndex) {\n let startLoc = Location.NONE\n for (let it = this.iterator(); it.hasNext(); ) {\n const e = it.next()\n const label = e.getLabel()\n if (label.isArea(geomIndex) && label.getLocation(geomIndex, Position.LEFT) !== Location.NONE) startLoc = label.getLocation(geomIndex, Position.LEFT)\n }\n if (startLoc === Location.NONE) return null\n let currLoc = startLoc\n for (let it = this.iterator(); it.hasNext(); ) {\n const e = it.next()\n const label = e.getLabel()\n if (label.getLocation(geomIndex, Position.ON) === Location.NONE) label.setLocation(geomIndex, Position.ON, currLoc)\n if (label.isArea(geomIndex)) {\n const leftLoc = label.getLocation(geomIndex, Position.LEFT)\n const rightLoc = label.getLocation(geomIndex, Position.RIGHT)\n if (rightLoc !== Location.NONE) {\n if (rightLoc !== currLoc) throw new TopologyException('side location conflict', e.getCoordinate())\n if (leftLoc === Location.NONE) \n Assert.shouldNeverReachHere('found single null side (at ' + e.getCoordinate() + ')')\n \n currLoc = leftLoc\n } else {\n Assert.isTrue(label.getLocation(geomIndex, Position.LEFT) === Location.NONE, 'found single null side')\n label.setLocation(geomIndex, Position.RIGHT, currLoc)\n label.setLocation(geomIndex, Position.LEFT, currLoc)\n }\n }\n }\n }\n getCoordinate() {\n const it = this.iterator()\n if (!it.hasNext()) return null\n const e = it.next()\n return e.getCoordinate()\n }\n print(out) {\n System.out.println('EdgeEndStar: ' + this.getCoordinate())\n for (let it = this.iterator(); it.hasNext(); ) {\n const e = it.next()\n e.print(out)\n }\n }\n isAreaLabelsConsistent(geomGraph) {\n this.computeEdgeEndLabels(geomGraph.getBoundaryNodeRule())\n return this.checkAreaLabelsConsistent(0)\n }\n checkAreaLabelsConsistent(geomIndex) {\n const edges = this.getEdges()\n if (edges.size() <= 0) return true\n const lastEdgeIndex = edges.size() - 1\n const startLabel = edges.get(lastEdgeIndex).getLabel()\n const startLoc = startLabel.getLocation(geomIndex, Position.LEFT)\n Assert.isTrue(startLoc !== Location.NONE, 'Found unlabelled area edge')\n let currLoc = startLoc\n for (let it = this.iterator(); it.hasNext(); ) {\n const e = it.next()\n const label = e.getLabel()\n Assert.isTrue(label.isArea(geomIndex), 'Found non-area edge')\n const leftLoc = label.getLocation(geomIndex, Position.LEFT)\n const rightLoc = label.getLocation(geomIndex, Position.RIGHT)\n if (leftLoc === rightLoc) \n return false\n \n if (rightLoc !== currLoc) \n return false\n \n currLoc = leftLoc\n }\n return true\n }\n findIndex(eSearch) {\n this.iterator()\n for (let i = 0; i < this._edgeList.size(); i++) {\n const e = this._edgeList.get(i)\n if (e === eSearch) return i\n }\n return -1\n }\n iterator() {\n return this.getEdges().iterator()\n }\n getEdges() {\n if (this._edgeList === null) \n this._edgeList = new ArrayList(this._edgeMap.values())\n \n return this._edgeList\n }\n getLocation(geomIndex, p, geom) {\n if (this._ptInAreaLocation[geomIndex] === Location.NONE) \n this._ptInAreaLocation[geomIndex] = SimplePointInAreaLocator.locate(p, geom[geomIndex].getGeometry())\n \n return this._ptInAreaLocation[geomIndex]\n }\n toString() {\n const buf = new StringBuffer()\n buf.append('EdgeEndStar: ' + this.getCoordinate())\n buf.append('\\n')\n for (let it = this.iterator(); it.hasNext(); ) {\n const e = it.next()\n buf.append(e)\n buf.append('\\n')\n }\n return buf.toString()\n }\n computeEdgeEndLabels(boundaryNodeRule) {\n for (let it = this.iterator(); it.hasNext(); ) {\n const ee = it.next()\n ee.computeLabel(boundaryNodeRule)\n }\n }\n computeLabelling(geomGraph) {\n this.computeEdgeEndLabels(geomGraph[0].getBoundaryNodeRule())\n this.propagateSideLabels(0)\n this.propagateSideLabels(1)\n const hasDimensionalCollapseEdge = [false, false]\n for (let it = this.iterator(); it.hasNext(); ) {\n const e = it.next()\n const label = e.getLabel()\n for (let geomi = 0; geomi < 2; geomi++) \n if (label.isLine(geomi) && label.getLocation(geomi) === Location.BOUNDARY) hasDimensionalCollapseEdge[geomi] = true\n \n }\n for (let it = this.iterator(); it.hasNext(); ) {\n const e = it.next()\n const label = e.getLabel()\n for (let geomi = 0; geomi < 2; geomi++) \n if (label.isAnyNull(geomi)) {\n let loc = Location.NONE\n if (hasDimensionalCollapseEdge[geomi]) {\n loc = Location.EXTERIOR\n } else {\n const p = e.getCoordinate()\n loc = this.getLocation(geomi, p, geomGraph)\n }\n label.setAllLocationsIfNull(geomi, loc)\n }\n \n }\n }\n getDegree() {\n return this._edgeMap.size()\n }\n insertEdgeEnd(e, obj) {\n this._edgeMap.put(e, obj)\n this._edgeList = null\n }\n}\n","import Location from '../geom/Location'\nimport Position from './Position'\nimport TopologyException from '../geom/TopologyException'\nimport EdgeEndStar from './EdgeEndStar'\nimport System from '../../../../java/lang/System'\nimport Label from './Label'\nimport ArrayList from '../../../../java/util/ArrayList'\nimport Quadrant from './Quadrant'\nimport Assert from '../util/Assert'\nexport default class DirectedEdgeStar extends EdgeEndStar {\n constructor() {\n super()\n DirectedEdgeStar.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._resultAreaEdgeList = null\n this._label = null\n this._SCANNING_FOR_INCOMING = 1\n this._LINKING_TO_OUTGOING = 2\n }\n linkResultDirectedEdges() {\n this.getResultAreaEdges()\n let firstOut = null\n let incoming = null\n let state = this._SCANNING_FOR_INCOMING\n for (let i = 0; i < this._resultAreaEdgeList.size(); i++) {\n const nextOut = this._resultAreaEdgeList.get(i)\n const nextIn = nextOut.getSym()\n if (!nextOut.getLabel().isArea()) continue\n if (firstOut === null && nextOut.isInResult()) firstOut = nextOut\n switch (state) {\n case this._SCANNING_FOR_INCOMING:\n if (!nextIn.isInResult()) continue\n incoming = nextIn\n state = this._LINKING_TO_OUTGOING\n break\n case this._LINKING_TO_OUTGOING:\n if (!nextOut.isInResult()) continue\n incoming.setNext(nextOut)\n state = this._SCANNING_FOR_INCOMING\n break\n }\n }\n if (state === this._LINKING_TO_OUTGOING) {\n if (firstOut === null) throw new TopologyException('no outgoing dirEdge found', this.getCoordinate())\n Assert.isTrue(firstOut.isInResult(), 'unable to link last incoming dirEdge')\n incoming.setNext(firstOut)\n }\n }\n insert(ee) {\n const de = ee\n this.insertEdgeEnd(de, de)\n }\n getRightmostEdge() {\n const edges = this.getEdges()\n const size = edges.size()\n if (size < 1) return null\n const de0 = edges.get(0)\n if (size === 1) return de0\n const deLast = edges.get(size - 1)\n const quad0 = de0.getQuadrant()\n const quad1 = deLast.getQuadrant()\n if (Quadrant.isNorthern(quad0) && Quadrant.isNorthern(quad1)) {\n return de0\n } else if (!Quadrant.isNorthern(quad0) && !Quadrant.isNorthern(quad1)) {\n return deLast\n } else {\n const nonHorizontalEdge = null\n if (de0.getDy() !== 0) return de0; else if (deLast.getDy() !== 0) return deLast\n }\n Assert.shouldNeverReachHere('found two horizontal edges incident on node')\n return null\n }\n print(out) {\n System.out.println('DirectedEdgeStar: ' + this.getCoordinate())\n for (let it = this.iterator(); it.hasNext(); ) {\n const de = it.next()\n out.print('out ')\n de.print(out)\n out.println()\n out.print('in ')\n de.getSym().print(out)\n out.println()\n }\n }\n getResultAreaEdges() {\n if (this._resultAreaEdgeList !== null) return this._resultAreaEdgeList\n this._resultAreaEdgeList = new ArrayList()\n for (let it = this.iterator(); it.hasNext(); ) {\n const de = it.next()\n if (de.isInResult() || de.getSym().isInResult()) this._resultAreaEdgeList.add(de)\n }\n return this._resultAreaEdgeList\n }\n updateLabelling(nodeLabel) {\n for (let it = this.iterator(); it.hasNext(); ) {\n const de = it.next()\n const label = de.getLabel()\n label.setAllLocationsIfNull(0, nodeLabel.getLocation(0))\n label.setAllLocationsIfNull(1, nodeLabel.getLocation(1))\n }\n }\n linkAllDirectedEdges() {\n this.getEdges()\n let prevOut = null\n let firstIn = null\n for (let i = this._edgeList.size() - 1; i >= 0; i--) {\n const nextOut = this._edgeList.get(i)\n const nextIn = nextOut.getSym()\n if (firstIn === null) firstIn = nextIn\n if (prevOut !== null) nextIn.setNext(prevOut)\n prevOut = nextOut\n }\n firstIn.setNext(prevOut)\n }\n computeDepths() {\n if (arguments.length === 1) {\n const de = arguments[0]\n const edgeIndex = this.findIndex(de)\n const startDepth = de.getDepth(Position.LEFT)\n const targetLastDepth = de.getDepth(Position.RIGHT)\n const nextDepth = this.computeDepths(edgeIndex + 1, this._edgeList.size(), startDepth)\n const lastDepth = this.computeDepths(0, edgeIndex, nextDepth)\n if (lastDepth !== targetLastDepth) throw new TopologyException('depth mismatch at ' + de.getCoordinate())\n } else if (arguments.length === 3) {\n const startIndex = arguments[0], endIndex = arguments[1], startDepth = arguments[2]\n let currDepth = startDepth\n for (let i = startIndex; i < endIndex; i++) {\n const nextDe = this._edgeList.get(i)\n nextDe.setEdgeDepths(Position.RIGHT, currDepth)\n currDepth = nextDe.getDepth(Position.LEFT)\n }\n return currDepth\n }\n }\n mergeSymLabels() {\n for (let it = this.iterator(); it.hasNext(); ) {\n const de = it.next()\n const label = de.getLabel()\n label.merge(de.getSym().getLabel())\n }\n }\n linkMinimalDirectedEdges(er) {\n let firstOut = null\n let incoming = null\n let state = this._SCANNING_FOR_INCOMING\n for (let i = this._resultAreaEdgeList.size() - 1; i >= 0; i--) {\n const nextOut = this._resultAreaEdgeList.get(i)\n const nextIn = nextOut.getSym()\n if (firstOut === null && nextOut.getEdgeRing() === er) firstOut = nextOut\n switch (state) {\n case this._SCANNING_FOR_INCOMING:\n if (nextIn.getEdgeRing() !== er) continue\n incoming = nextIn\n state = this._LINKING_TO_OUTGOING\n break\n case this._LINKING_TO_OUTGOING:\n if (nextOut.getEdgeRing() !== er) continue\n incoming.setNextMin(nextOut)\n state = this._SCANNING_FOR_INCOMING\n break\n }\n }\n if (state === this._LINKING_TO_OUTGOING) {\n Assert.isTrue(firstOut !== null, 'found null for first outgoing dirEdge')\n Assert.isTrue(firstOut.getEdgeRing() === er, 'unable to link last incoming dirEdge')\n incoming.setNextMin(firstOut)\n }\n }\n getOutgoingDegree() {\n if (arguments.length === 0) {\n let degree = 0\n for (let it = this.iterator(); it.hasNext(); ) {\n const de = it.next()\n if (de.isInResult()) degree++\n }\n return degree\n } else if (arguments.length === 1) {\n const er = arguments[0]\n let degree = 0\n for (let it = this.iterator(); it.hasNext(); ) {\n const de = it.next()\n if (de.getEdgeRing() === er) degree++\n }\n return degree\n }\n }\n getLabel() {\n return this._label\n }\n findCoveredLineEdges() {\n let startLoc = Location.NONE\n for (let it = this.iterator(); it.hasNext(); ) {\n const nextOut = it.next()\n const nextIn = nextOut.getSym()\n if (!nextOut.isLineEdge()) {\n if (nextOut.isInResult()) {\n startLoc = Location.INTERIOR\n break\n }\n if (nextIn.isInResult()) {\n startLoc = Location.EXTERIOR\n break\n }\n }\n }\n if (startLoc === Location.NONE) return null\n let currLoc = startLoc\n for (let it = this.iterator(); it.hasNext(); ) {\n const nextOut = it.next()\n const nextIn = nextOut.getSym()\n if (nextOut.isLineEdge()) {\n nextOut.getEdge().setCovered(currLoc === Location.INTERIOR)\n } else {\n if (nextOut.isInResult()) currLoc = Location.EXTERIOR\n if (nextIn.isInResult()) currLoc = Location.INTERIOR\n }\n }\n }\n computeLabelling(geom) {\n super.computeLabelling.call(this, geom)\n this._label = new Label(Location.NONE)\n for (let it = this.iterator(); it.hasNext(); ) {\n const ee = it.next()\n const e = ee.getEdge()\n const eLabel = e.getLabel()\n for (let i = 0; i < 2; i++) {\n const eLoc = eLabel.getLocation(i)\n if (eLoc === Location.INTERIOR || eLoc === Location.BOUNDARY) this._label.setLocation(i, Location.INTERIOR)\n }\n }\n }\n}\n","import DirectedEdgeStar from '../../geomgraph/DirectedEdgeStar'\nimport Node from '../../geomgraph/Node'\nimport NodeFactory from '../../geomgraph/NodeFactory'\nexport default class OverlayNodeFactory extends NodeFactory {\n constructor() {\n super()\n }\n createNode(coord) {\n return new Node(coord, new DirectedEdgeStar())\n }\n}\n","import Comparable from '../../../../java/lang/Comparable'\nimport CoordinateArrays from '../geom/CoordinateArrays'\nexport default class OrientedCoordinateArray {\n constructor() {\n OrientedCoordinateArray.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._pts = null\n this._orientation = null\n const pts = arguments[0]\n this._pts = pts\n this._orientation = OrientedCoordinateArray.orientation(pts)\n }\n static orientation(pts) {\n return CoordinateArrays.increasingDirection(pts) === 1\n }\n static compareOriented(pts1, orientation1, pts2, orientation2) {\n const dir1 = orientation1 ? 1 : -1\n const dir2 = orientation2 ? 1 : -1\n const limit1 = orientation1 ? pts1.length : -1\n const limit2 = orientation2 ? pts2.length : -1\n let i1 = orientation1 ? 0 : pts1.length - 1\n let i2 = orientation2 ? 0 : pts2.length - 1\n while (true) {\n const compPt = pts1[i1].compareTo(pts2[i2])\n if (compPt !== 0) return compPt\n i1 += dir1\n i2 += dir2\n const done1 = i1 === limit1\n const done2 = i2 === limit2\n if (done1 && !done2) return -1\n if (!done1 && done2) return 1\n if (done1 && done2) return 0\n }\n }\n compareTo(o1) {\n const oca = o1\n const comp = OrientedCoordinateArray.compareOriented(this._pts, this._orientation, oca._pts, oca._orientation)\n return comp\n }\n get interfaces_() {\n return [Comparable]\n }\n}\n","import OrientedCoordinateArray from '../noding/OrientedCoordinateArray'\nimport ArrayList from '../../../../java/util/ArrayList'\nimport TreeMap from '../../../../java/util/TreeMap'\nexport default class EdgeList {\n constructor() {\n EdgeList.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._edges = new ArrayList()\n this._ocaMap = new TreeMap()\n }\n print(out) {\n out.print('MULTILINESTRING ( ')\n for (let j = 0; j < this._edges.size(); j++) {\n const e = this._edges.get(j)\n if (j > 0) out.print(',')\n out.print('(')\n const pts = e.getCoordinates()\n for (let i = 0; i < pts.length; i++) {\n if (i > 0) out.print(',')\n out.print(pts[i].x + ' ' + pts[i].y)\n }\n out.println(')')\n }\n out.print(') ')\n }\n addAll(edgeColl) {\n for (let i = edgeColl.iterator(); i.hasNext(); ) \n this.add(i.next())\n \n }\n findEdgeIndex(e) {\n for (let i = 0; i < this._edges.size(); i++) \n if (this._edges.get(i).equals(e)) return i\n \n return -1\n }\n iterator() {\n return this._edges.iterator()\n }\n getEdges() {\n return this._edges\n }\n get(i) {\n return this._edges.get(i)\n }\n findEqualEdge(e) {\n const oca = new OrientedCoordinateArray(e.getCoordinates())\n const matchEdge = this._ocaMap.get(oca)\n return matchEdge\n }\n add(e) {\n this._edges.add(e)\n const oca = new OrientedCoordinateArray(e.getCoordinates())\n this._ocaMap.put(oca, e)\n }\n}\n","export default class SegmentIntersector {\n processIntersections(e0, segIndex0, e1, segIndex1) {}\n isDone() {}\n}\n","import SegmentIntersector from './SegmentIntersector'\nexport default class IntersectionAdder {\n constructor() {\n IntersectionAdder.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._hasIntersection = false\n this._hasProper = false\n this._hasProperInterior = false\n this._hasInterior = false\n this._properIntersectionPoint = null\n this._li = null\n this._isSelfIntersection = null\n this.numIntersections = 0\n this.numInteriorIntersections = 0\n this.numProperIntersections = 0\n this.numTests = 0\n const li = arguments[0]\n this._li = li\n }\n static isAdjacentSegments(i1, i2) {\n return Math.abs(i1 - i2) === 1\n }\n isTrivialIntersection(e0, segIndex0, e1, segIndex1) {\n if (e0 === e1) \n if (this._li.getIntersectionNum() === 1) {\n if (IntersectionAdder.isAdjacentSegments(segIndex0, segIndex1)) return true\n if (e0.isClosed()) {\n const maxSegIndex = e0.size() - 1\n if (segIndex0 === 0 && segIndex1 === maxSegIndex || segIndex1 === 0 && segIndex0 === maxSegIndex) \n return true\n \n }\n }\n \n return false\n }\n getProperIntersectionPoint() {\n return this._properIntersectionPoint\n }\n hasProperInteriorIntersection() {\n return this._hasProperInterior\n }\n getLineIntersector() {\n return this._li\n }\n hasProperIntersection() {\n return this._hasProper\n }\n processIntersections(e0, segIndex0, e1, segIndex1) {\n if (e0 === e1 && segIndex0 === segIndex1) return null\n this.numTests++\n const p00 = e0.getCoordinates()[segIndex0]\n const p01 = e0.getCoordinates()[segIndex0 + 1]\n const p10 = e1.getCoordinates()[segIndex1]\n const p11 = e1.getCoordinates()[segIndex1 + 1]\n this._li.computeIntersection(p00, p01, p10, p11)\n if (this._li.hasIntersection()) {\n this.numIntersections++\n if (this._li.isInteriorIntersection()) {\n this.numInteriorIntersections++\n this._hasInterior = true\n }\n if (!this.isTrivialIntersection(e0, segIndex0, e1, segIndex1)) {\n this._hasIntersection = true\n e0.addIntersections(this._li, segIndex0, 0)\n e1.addIntersections(this._li, segIndex1, 1)\n if (this._li.isProper()) {\n this.numProperIntersections++\n this._hasProper = true\n this._hasProperInterior = true\n }\n }\n }\n }\n hasIntersection() {\n return this._hasIntersection\n }\n isDone() {\n return false\n }\n hasInteriorIntersection() {\n return this._hasInterior\n }\n get interfaces_() {\n return [SegmentIntersector]\n }\n}\n","import Location from '../../geom/Location'\nimport BufferSubgraph from './BufferSubgraph'\nimport PolygonBuilder from '../overlay/PolygonBuilder'\nimport GeometryFactory from '../../geom/GeometryFactory'\nimport Position from '../../geomgraph/Position'\nimport MCIndexNoder from '../../noding/MCIndexNoder'\nimport OffsetCurveBuilder from './OffsetCurveBuilder'\nimport Collections from '../../../../../java/util/Collections'\nimport SubgraphDepthLocater from './SubgraphDepthLocater'\nimport OffsetCurveSetBuilder from './OffsetCurveSetBuilder'\nimport Label from '../../geomgraph/Label'\nimport OverlayNodeFactory from '../overlay/OverlayNodeFactory'\nimport EdgeList from '../../geomgraph/EdgeList'\nimport ArrayList from '../../../../../java/util/ArrayList'\nimport RobustLineIntersector from '../../algorithm/RobustLineIntersector'\nimport IntersectionAdder from '../../noding/IntersectionAdder'\nimport Edge from '../../geomgraph/Edge'\nimport PlanarGraph from '../../geomgraph/PlanarGraph'\nexport default class BufferBuilder {\n constructor() {\n BufferBuilder.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._bufParams = null\n this._workingPrecisionModel = null\n this._workingNoder = null\n this._geomFact = null\n this._graph = null\n this._edgeList = new EdgeList()\n const bufParams = arguments[0]\n this._bufParams = bufParams\n }\n static depthDelta(label) {\n const lLoc = label.getLocation(0, Position.LEFT)\n const rLoc = label.getLocation(0, Position.RIGHT)\n if (lLoc === Location.INTERIOR && rLoc === Location.EXTERIOR) return 1; else if (lLoc === Location.EXTERIOR && rLoc === Location.INTERIOR) return -1\n return 0\n }\n static convertSegStrings(it) {\n const fact = new GeometryFactory()\n const lines = new ArrayList()\n while (it.hasNext()) {\n const ss = it.next()\n const line = fact.createLineString(ss.getCoordinates())\n lines.add(line)\n }\n return fact.buildGeometry(lines)\n }\n setWorkingPrecisionModel(pm) {\n this._workingPrecisionModel = pm\n }\n insertUniqueEdge(e) {\n const existingEdge = this._edgeList.findEqualEdge(e)\n if (existingEdge !== null) {\n const existingLabel = existingEdge.getLabel()\n let labelToMerge = e.getLabel()\n if (!existingEdge.isPointwiseEqual(e)) {\n labelToMerge = new Label(e.getLabel())\n labelToMerge.flip()\n }\n existingLabel.merge(labelToMerge)\n const mergeDelta = BufferBuilder.depthDelta(labelToMerge)\n const existingDelta = existingEdge.getDepthDelta()\n const newDelta = existingDelta + mergeDelta\n existingEdge.setDepthDelta(newDelta)\n } else {\n this._edgeList.add(e)\n e.setDepthDelta(BufferBuilder.depthDelta(e.getLabel()))\n }\n }\n buildSubgraphs(subgraphList, polyBuilder) {\n const processedGraphs = new ArrayList()\n for (let i = subgraphList.iterator(); i.hasNext(); ) {\n const subgraph = i.next()\n const p = subgraph.getRightmostCoordinate()\n const locater = new SubgraphDepthLocater(processedGraphs)\n const outsideDepth = locater.getDepth(p)\n subgraph.computeDepth(outsideDepth)\n subgraph.findResultEdges()\n processedGraphs.add(subgraph)\n polyBuilder.add(subgraph.getDirectedEdges(), subgraph.getNodes())\n }\n }\n createSubgraphs(graph) {\n const subgraphList = new ArrayList()\n for (let i = graph.getNodes().iterator(); i.hasNext(); ) {\n const node = i.next()\n if (!node.isVisited()) {\n const subgraph = new BufferSubgraph()\n subgraph.create(node)\n subgraphList.add(subgraph)\n }\n }\n Collections.sort(subgraphList, Collections.reverseOrder())\n return subgraphList\n }\n createEmptyResultGeometry() {\n const emptyGeom = this._geomFact.createPolygon()\n return emptyGeom\n }\n getNoder(precisionModel) {\n if (this._workingNoder !== null) return this._workingNoder\n const noder = new MCIndexNoder()\n const li = new RobustLineIntersector()\n li.setPrecisionModel(precisionModel)\n noder.setSegmentIntersector(new IntersectionAdder(li))\n return noder\n }\n buffer(g, distance) {\n let precisionModel = this._workingPrecisionModel\n if (precisionModel === null) precisionModel = g.getPrecisionModel()\n this._geomFact = g.getFactory()\n const curveBuilder = new OffsetCurveBuilder(precisionModel, this._bufParams)\n const curveSetBuilder = new OffsetCurveSetBuilder(g, distance, curveBuilder)\n const bufferSegStrList = curveSetBuilder.getCurves()\n if (bufferSegStrList.size() <= 0) \n return this.createEmptyResultGeometry()\n \n this.computeNodedEdges(bufferSegStrList, precisionModel)\n this._graph = new PlanarGraph(new OverlayNodeFactory())\n this._graph.addEdges(this._edgeList.getEdges())\n const subgraphList = this.createSubgraphs(this._graph)\n const polyBuilder = new PolygonBuilder(this._geomFact)\n this.buildSubgraphs(subgraphList, polyBuilder)\n const resultPolyList = polyBuilder.getPolygons()\n if (resultPolyList.size() <= 0) \n return this.createEmptyResultGeometry()\n \n const resultGeom = this._geomFact.buildGeometry(resultPolyList)\n return resultGeom\n }\n computeNodedEdges(bufferSegStrList, precisionModel) {\n const noder = this.getNoder(precisionModel)\n noder.computeNodes(bufferSegStrList)\n const nodedSegStrings = noder.getNodedSubstrings()\n for (let i = nodedSegStrings.iterator(); i.hasNext(); ) {\n const segStr = i.next()\n const pts = segStr.getCoordinates()\n if (pts.length === 2 && pts[0].equals2D(pts[1])) continue\n const oldLabel = segStr.getData()\n const edge = new Edge(segStr.getCoordinates(), new Label(oldLabel))\n this.insertUniqueEdge(edge)\n }\n }\n setNoder(noder) {\n this._workingNoder = noder\n }\n}\n","import GeometryFactory from '../geom/GeometryFactory'\nimport RobustLineIntersector from '../algorithm/RobustLineIntersector'\nimport RuntimeException from '../../../../java/lang/RuntimeException'\nexport default class NodingValidator {\n constructor() {\n NodingValidator.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._li = new RobustLineIntersector()\n this._segStrings = null\n const segStrings = arguments[0]\n this._segStrings = segStrings\n }\n checkEndPtVertexIntersections() {\n if (arguments.length === 0) {\n for (let i = this._segStrings.iterator(); i.hasNext(); ) {\n const ss = i.next()\n const pts = ss.getCoordinates()\n this.checkEndPtVertexIntersections(pts[0], this._segStrings)\n this.checkEndPtVertexIntersections(pts[pts.length - 1], this._segStrings)\n }\n } else if (arguments.length === 2) {\n const testPt = arguments[0], segStrings = arguments[1]\n for (let i = segStrings.iterator(); i.hasNext(); ) {\n const ss = i.next()\n const pts = ss.getCoordinates()\n for (let j = 1; j < pts.length - 1; j++) \n if (pts[j].equals(testPt)) throw new RuntimeException('found endpt/interior pt intersection at index ' + j + ' :pt ' + testPt)\n \n }\n }\n }\n checkInteriorIntersections() {\n if (arguments.length === 0) {\n for (let i = this._segStrings.iterator(); i.hasNext(); ) {\n const ss0 = i.next()\n for (let j = this._segStrings.iterator(); j.hasNext(); ) {\n const ss1 = j.next()\n this.checkInteriorIntersections(ss0, ss1)\n }\n }\n } else if (arguments.length === 2) {\n const ss0 = arguments[0], ss1 = arguments[1]\n const pts0 = ss0.getCoordinates()\n const pts1 = ss1.getCoordinates()\n for (let i0 = 0; i0 < pts0.length - 1; i0++) \n for (let i1 = 0; i1 < pts1.length - 1; i1++) \n this.checkInteriorIntersections(ss0, i0, ss1, i1)\n \n \n } else if (arguments.length === 4) {\n const e0 = arguments[0], segIndex0 = arguments[1], e1 = arguments[2], segIndex1 = arguments[3]\n if (e0 === e1 && segIndex0 === segIndex1) return null\n const p00 = e0.getCoordinates()[segIndex0]\n const p01 = e0.getCoordinates()[segIndex0 + 1]\n const p10 = e1.getCoordinates()[segIndex1]\n const p11 = e1.getCoordinates()[segIndex1 + 1]\n this._li.computeIntersection(p00, p01, p10, p11)\n if (this._li.hasIntersection()) \n if (this._li.isProper() || this.hasInteriorIntersection(this._li, p00, p01) || this.hasInteriorIntersection(this._li, p10, p11)) \n throw new RuntimeException('found non-noded intersection at ' + p00 + '-' + p01 + ' and ' + p10 + '-' + p11)\n \n \n }\n }\n checkValid() {\n this.checkEndPtVertexIntersections()\n this.checkInteriorIntersections()\n this.checkCollapses()\n }\n checkCollapses() {\n if (arguments.length === 0) {\n for (let i = this._segStrings.iterator(); i.hasNext(); ) {\n const ss = i.next()\n this.checkCollapses(ss)\n }\n } else if (arguments.length === 1) {\n const ss = arguments[0]\n const pts = ss.getCoordinates()\n for (let i = 0; i < pts.length - 2; i++) \n this.checkCollapse(pts[i], pts[i + 1], pts[i + 2])\n \n }\n }\n hasInteriorIntersection(li, p0, p1) {\n for (let i = 0; i < li.getIntersectionNum(); i++) {\n const intPt = li.getIntersection(i)\n if (!(intPt.equals(p0) || intPt.equals(p1))) return true\n }\n return false\n }\n checkCollapse(p0, p1, p2) {\n if (p0.equals(p2)) throw new RuntimeException('found non-noded collapse at ' + NodingValidator.fact.createLineString([p0, p1, p2]))\n }\n}\nNodingValidator.fact = new GeometryFactory()\n","import Coordinate from '../../geom/Coordinate'\nimport IllegalArgumentException from '../../../../../java/lang/IllegalArgumentException'\nimport Envelope from '../../geom/Envelope'\nimport Assert from '../../util/Assert'\nexport default class HotPixel {\n constructor() {\n HotPixel.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._li = null\n this._pt = null\n this._originalPt = null\n this._ptScaled = null\n this._p0Scaled = null\n this._p1Scaled = null\n this._scaleFactor = null\n this._minx = null\n this._maxx = null\n this._miny = null\n this._maxy = null\n this._corner = new Array(4).fill(null)\n this._safeEnv = null\n const pt = arguments[0], scaleFactor = arguments[1], li = arguments[2]\n this._originalPt = pt\n this._pt = pt\n this._scaleFactor = scaleFactor\n this._li = li\n if (scaleFactor <= 0) throw new IllegalArgumentException('Scale factor must be non-zero')\n if (scaleFactor !== 1.0) {\n this._pt = new Coordinate(this.scale(pt.x), this.scale(pt.y))\n this._p0Scaled = new Coordinate()\n this._p1Scaled = new Coordinate()\n }\n this.initCorners(this._pt)\n }\n intersectsScaled(p0, p1) {\n const segMinx = Math.min(p0.x, p1.x)\n const segMaxx = Math.max(p0.x, p1.x)\n const segMiny = Math.min(p0.y, p1.y)\n const segMaxy = Math.max(p0.y, p1.y)\n const isOutsidePixelEnv = this._maxx < segMinx || this._minx > segMaxx || this._maxy < segMiny || this._miny > segMaxy\n if (isOutsidePixelEnv) return false\n const intersects = this.intersectsToleranceSquare(p0, p1)\n Assert.isTrue(!(isOutsidePixelEnv && intersects), 'Found bad envelope test')\n return intersects\n }\n initCorners(pt) {\n const tolerance = 0.5\n this._minx = pt.x - tolerance\n this._maxx = pt.x + tolerance\n this._miny = pt.y - tolerance\n this._maxy = pt.y + tolerance\n this._corner[0] = new Coordinate(this._maxx, this._maxy)\n this._corner[1] = new Coordinate(this._minx, this._maxy)\n this._corner[2] = new Coordinate(this._minx, this._miny)\n this._corner[3] = new Coordinate(this._maxx, this._miny)\n }\n intersects(p0, p1) {\n if (this._scaleFactor === 1.0) return this.intersectsScaled(p0, p1)\n this.copyScaled(p0, this._p0Scaled)\n this.copyScaled(p1, this._p1Scaled)\n return this.intersectsScaled(this._p0Scaled, this._p1Scaled)\n }\n scale(val) {\n return Math.round(val * this._scaleFactor)\n }\n getCoordinate() {\n return this._originalPt\n }\n copyScaled(p, pScaled) {\n pScaled.x = this.scale(p.x)\n pScaled.y = this.scale(p.y)\n }\n getSafeEnvelope() {\n if (this._safeEnv === null) {\n const safeTolerance = HotPixel.SAFE_ENV_EXPANSION_FACTOR / this._scaleFactor\n this._safeEnv = new Envelope(this._originalPt.x - safeTolerance, this._originalPt.x + safeTolerance, this._originalPt.y - safeTolerance, this._originalPt.y + safeTolerance)\n }\n return this._safeEnv\n }\n intersectsPixelClosure(p0, p1) {\n this._li.computeIntersection(p0, p1, this._corner[0], this._corner[1])\n if (this._li.hasIntersection()) return true\n this._li.computeIntersection(p0, p1, this._corner[1], this._corner[2])\n if (this._li.hasIntersection()) return true\n this._li.computeIntersection(p0, p1, this._corner[2], this._corner[3])\n if (this._li.hasIntersection()) return true\n this._li.computeIntersection(p0, p1, this._corner[3], this._corner[0])\n if (this._li.hasIntersection()) return true\n return false\n }\n intersectsToleranceSquare(p0, p1) {\n let intersectsLeft = false\n let intersectsBottom = false\n this._li.computeIntersection(p0, p1, this._corner[0], this._corner[1])\n if (this._li.isProper()) return true\n this._li.computeIntersection(p0, p1, this._corner[1], this._corner[2])\n if (this._li.isProper()) return true\n if (this._li.hasIntersection()) intersectsLeft = true\n this._li.computeIntersection(p0, p1, this._corner[2], this._corner[3])\n if (this._li.isProper()) return true\n if (this._li.hasIntersection()) intersectsBottom = true\n this._li.computeIntersection(p0, p1, this._corner[3], this._corner[0])\n if (this._li.isProper()) return true\n if (intersectsLeft && intersectsBottom) return true\n if (p0.equals(this._pt)) return true\n if (p1.equals(this._pt)) return true\n return false\n }\n addSnappedNode(segStr, segIndex) {\n const p0 = segStr.getCoordinate(segIndex)\n const p1 = segStr.getCoordinate(segIndex + 1)\n if (this.intersects(p0, p1)) {\n segStr.addIntersection(this.getCoordinate(), segIndex)\n return true\n }\n return false\n }\n}\nHotPixel.SAFE_ENV_EXPANSION_FACTOR = 0.75\n","import LineSegment from '../../geom/LineSegment'\nexport default class MonotoneChainSelectAction {\n constructor() {\n MonotoneChainSelectAction.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this.selectedSegment = new LineSegment()\n }\n select() {\n if (arguments.length === 1) {\n const seg = arguments[0]\n } else if (arguments.length === 2) {\n const mc = arguments[0], startIndex = arguments[1]\n mc.getLineSegment(startIndex, this.selectedSegment)\n this.select(this.selectedSegment)\n }\n }\n}\n","import MonotoneChainSelectAction from '../../index/chain/MonotoneChainSelectAction'\nimport MonotoneChain from '../../index/chain/MonotoneChain'\nimport ItemVisitor from '../../index/ItemVisitor'\nexport default class MCIndexPointSnapper {\n constructor() {\n MCIndexPointSnapper.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._index = null\n const index = arguments[0]\n this._index = index\n }\n snap() {\n if (arguments.length === 1) {\n const hotPixel = arguments[0]\n return this.snap(hotPixel, null, -1)\n } else if (arguments.length === 3) {\n const hotPixel = arguments[0], parentEdge = arguments[1], hotPixelVertexIndex = arguments[2]\n const pixelEnv = hotPixel.getSafeEnvelope()\n const hotPixelSnapAction = new HotPixelSnapAction(hotPixel, parentEdge, hotPixelVertexIndex)\n this._index.query(pixelEnv, new (class {\n get interfaces_() {\n return [ItemVisitor]\n }\n visitItem(item) {\n const testChain = item\n testChain.select(pixelEnv, hotPixelSnapAction)\n }\n })())\n return hotPixelSnapAction.isNodeAdded()\n }\n }\n}\nclass HotPixelSnapAction extends MonotoneChainSelectAction {\n constructor() {\n super()\n HotPixelSnapAction.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._hotPixel = null\n this._parentEdge = null\n this._hotPixelVertexIndex = null\n this._isNodeAdded = false\n const hotPixel = arguments[0], parentEdge = arguments[1], hotPixelVertexIndex = arguments[2]\n this._hotPixel = hotPixel\n this._parentEdge = parentEdge\n this._hotPixelVertexIndex = hotPixelVertexIndex\n }\n isNodeAdded() {\n return this._isNodeAdded\n }\n select() {\n if (arguments.length === 2 && (Number.isInteger(arguments[1]) && arguments[0] instanceof MonotoneChain)) {\n const mc = arguments[0], startIndex = arguments[1]\n const ss = mc.getContext()\n if (this._parentEdge === ss) \n if (startIndex === this._hotPixelVertexIndex || startIndex + 1 === this._hotPixelVertexIndex) return null\n \n this._isNodeAdded |= this._hotPixel.addSnappedNode(ss, startIndex)\n } else {\n return super.select.apply(this, arguments)\n }\n }\n}\nMCIndexPointSnapper.HotPixelSnapAction = HotPixelSnapAction\n","import SegmentIntersector from './SegmentIntersector'\nimport ArrayList from '../../../../java/util/ArrayList'\nexport default class InteriorIntersectionFinderAdder {\n constructor() {\n InteriorIntersectionFinderAdder.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._li = null\n this._interiorIntersections = null\n const li = arguments[0]\n this._li = li\n this._interiorIntersections = new ArrayList()\n }\n processIntersections(e0, segIndex0, e1, segIndex1) {\n if (e0 === e1 && segIndex0 === segIndex1) return null\n const p00 = e0.getCoordinates()[segIndex0]\n const p01 = e0.getCoordinates()[segIndex0 + 1]\n const p10 = e1.getCoordinates()[segIndex1]\n const p11 = e1.getCoordinates()[segIndex1 + 1]\n this._li.computeIntersection(p00, p01, p10, p11)\n if (this._li.hasIntersection()) \n if (this._li.isInteriorIntersection()) {\n for (let intIndex = 0; intIndex < this._li.getIntersectionNum(); intIndex++) \n this._interiorIntersections.add(this._li.getIntersection(intIndex))\n \n e0.addIntersections(this._li, segIndex0, 0)\n e1.addIntersections(this._li, segIndex1, 1)\n }\n \n }\n isDone() {\n return false\n }\n getInteriorIntersections() {\n return this._interiorIntersections\n }\n get interfaces_() {\n return [SegmentIntersector]\n }\n}\n","import NodingValidator from '../NodingValidator'\nimport hasInterface from '../../../../../hasInterface'\nimport Collection from '../../../../../java/util/Collection'\nimport Noder from '../Noder'\nimport MCIndexNoder from '../MCIndexNoder'\nimport NodedSegmentString from '../NodedSegmentString'\nimport HotPixel from './HotPixel'\nimport Exception from '../../../../../java/lang/Exception'\nimport MCIndexPointSnapper from './MCIndexPointSnapper'\nimport RobustLineIntersector from '../../algorithm/RobustLineIntersector'\nimport InteriorIntersectionFinderAdder from '../InteriorIntersectionFinderAdder'\nexport default class MCIndexSnapRounder {\n constructor() {\n MCIndexSnapRounder.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._pm = null\n this._li = null\n this._scaleFactor = null\n this._noder = null\n this._pointSnapper = null\n this._nodedSegStrings = null\n const pm = arguments[0]\n this._pm = pm\n this._li = new RobustLineIntersector()\n this._li.setPrecisionModel(pm)\n this._scaleFactor = pm.getScale()\n }\n checkCorrectness(inputSegmentStrings) {\n const resultSegStrings = NodedSegmentString.getNodedSubstrings(inputSegmentStrings)\n const nv = new NodingValidator(resultSegStrings)\n try {\n nv.checkValid()\n } catch (ex) {\n if (ex instanceof Exception) \n ex.printStackTrace()\n else throw ex\n } finally {}\n }\n getNodedSubstrings() {\n return NodedSegmentString.getNodedSubstrings(this._nodedSegStrings)\n }\n snapRound(segStrings, li) {\n const intersections = this.findInteriorIntersections(segStrings, li)\n this.computeIntersectionSnaps(intersections)\n this.computeVertexSnaps(segStrings)\n }\n findInteriorIntersections(segStrings, li) {\n const intFinderAdder = new InteriorIntersectionFinderAdder(li)\n this._noder.setSegmentIntersector(intFinderAdder)\n this._noder.computeNodes(segStrings)\n return intFinderAdder.getInteriorIntersections()\n }\n computeVertexSnaps() {\n if (hasInterface(arguments[0], Collection)) {\n const edges = arguments[0]\n for (let i0 = edges.iterator(); i0.hasNext(); ) {\n const edge0 = i0.next()\n this.computeVertexSnaps(edge0)\n }\n } else if (arguments[0] instanceof NodedSegmentString) {\n const e = arguments[0]\n const pts0 = e.getCoordinates()\n for (let i = 0; i < pts0.length; i++) {\n const hotPixel = new HotPixel(pts0[i], this._scaleFactor, this._li)\n const isNodeAdded = this._pointSnapper.snap(hotPixel, e, i)\n if (isNodeAdded) \n e.addIntersection(pts0[i], i)\n \n }\n }\n }\n computeNodes(inputSegmentStrings) {\n this._nodedSegStrings = inputSegmentStrings\n this._noder = new MCIndexNoder()\n this._pointSnapper = new MCIndexPointSnapper(this._noder.getIndex())\n this.snapRound(inputSegmentStrings, this._li)\n }\n computeIntersectionSnaps(snapPts) {\n for (let it = snapPts.iterator(); it.hasNext(); ) {\n const snapPt = it.next()\n const hotPixel = new HotPixel(snapPt, this._scaleFactor, this._li)\n this._pointSnapper.snap(hotPixel)\n }\n }\n get interfaces_() {\n return [Noder]\n }\n}\n","import BufferParameters from './BufferParameters'\nimport Geometry from '../../geom/Geometry'\nimport BufferBuilder from './BufferBuilder'\nimport ScaledNoder from '../../noding/ScaledNoder'\nimport TopologyException from '../../geom/TopologyException'\nimport MathUtil from '../../math/MathUtil'\nimport PrecisionModel from '../../geom/PrecisionModel'\nimport RuntimeException from '../../../../../java/lang/RuntimeException'\nimport MCIndexSnapRounder from '../../noding/snapround/MCIndexSnapRounder'\nexport default class BufferOp {\n constructor() {\n BufferOp.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._argGeom = null\n this._distance = null\n this._bufParams = new BufferParameters()\n this._resultGeometry = null\n this._saveException = null\n if (arguments.length === 1) {\n const g = arguments[0]\n this._argGeom = g\n } else if (arguments.length === 2) {\n const g = arguments[0], bufParams = arguments[1]\n this._argGeom = g\n this._bufParams = bufParams\n }\n }\n static bufferOp() {\n if (arguments.length === 2) {\n const g = arguments[0], distance = arguments[1]\n const gBuf = new BufferOp(g)\n const geomBuf = gBuf.getResultGeometry(distance)\n return geomBuf\n } else if (arguments.length === 3) {\n if (Number.isInteger(arguments[2]) && (arguments[0] instanceof Geometry && typeof arguments[1] === 'number')) {\n const g = arguments[0], distance = arguments[1], quadrantSegments = arguments[2]\n const bufOp = new BufferOp(g)\n bufOp.setQuadrantSegments(quadrantSegments)\n const geomBuf = bufOp.getResultGeometry(distance)\n return geomBuf\n } else if (arguments[2] instanceof BufferParameters && (arguments[0] instanceof Geometry && typeof arguments[1] === 'number')) {\n const g = arguments[0], distance = arguments[1], params = arguments[2]\n const bufOp = new BufferOp(g, params)\n const geomBuf = bufOp.getResultGeometry(distance)\n return geomBuf\n }\n } else if (arguments.length === 4) {\n const g = arguments[0], distance = arguments[1], quadrantSegments = arguments[2], endCapStyle = arguments[3]\n const bufOp = new BufferOp(g)\n bufOp.setQuadrantSegments(quadrantSegments)\n bufOp.setEndCapStyle(endCapStyle)\n const geomBuf = bufOp.getResultGeometry(distance)\n return geomBuf\n }\n }\n static precisionScaleFactor(g, distance, maxPrecisionDigits) {\n const env = g.getEnvelopeInternal()\n const envMax = MathUtil.max(Math.abs(env.getMaxX()), Math.abs(env.getMaxY()), Math.abs(env.getMinX()), Math.abs(env.getMinY()))\n const expandByDistance = distance > 0.0 ? distance : 0.0\n const bufEnvMax = envMax + 2 * expandByDistance\n const bufEnvPrecisionDigits = Math.trunc(Math.log(bufEnvMax) / Math.log(10) + 1.0)\n const minUnitLog10 = maxPrecisionDigits - bufEnvPrecisionDigits\n const scaleFactor = Math.pow(10.0, minUnitLog10)\n return scaleFactor\n }\n bufferFixedPrecision(fixedPM) {\n const noder = new ScaledNoder(new MCIndexSnapRounder(new PrecisionModel(1.0)), fixedPM.getScale())\n const bufBuilder = new BufferBuilder(this._bufParams)\n bufBuilder.setWorkingPrecisionModel(fixedPM)\n bufBuilder.setNoder(noder)\n this._resultGeometry = bufBuilder.buffer(this._argGeom, this._distance)\n }\n bufferReducedPrecision() {\n if (arguments.length === 0) {\n for (let precDigits = BufferOp.MAX_PRECISION_DIGITS; precDigits >= 0; precDigits--) {\n try {\n this.bufferReducedPrecision(precDigits)\n } catch (ex) {\n if (ex instanceof TopologyException) \n this._saveException = ex\n else throw ex\n } finally {}\n if (this._resultGeometry !== null) return null\n }\n throw this._saveException\n } else if (arguments.length === 1) {\n const precisionDigits = arguments[0]\n const sizeBasedScaleFactor = BufferOp.precisionScaleFactor(this._argGeom, this._distance, precisionDigits)\n const fixedPM = new PrecisionModel(sizeBasedScaleFactor)\n this.bufferFixedPrecision(fixedPM)\n }\n }\n computeGeometry() {\n this.bufferOriginalPrecision()\n if (this._resultGeometry !== null) return null\n const argPM = this._argGeom.getFactory().getPrecisionModel()\n if (argPM.getType() === PrecisionModel.FIXED) this.bufferFixedPrecision(argPM); else this.bufferReducedPrecision()\n }\n setQuadrantSegments(quadrantSegments) {\n this._bufParams.setQuadrantSegments(quadrantSegments)\n }\n bufferOriginalPrecision() {\n try {\n const bufBuilder = new BufferBuilder(this._bufParams)\n this._resultGeometry = bufBuilder.buffer(this._argGeom, this._distance)\n } catch (ex) {\n if (ex instanceof RuntimeException) \n this._saveException = ex\n else throw ex\n } finally {}\n }\n getResultGeometry(distance) {\n this._distance = distance\n this.computeGeometry()\n return this._resultGeometry\n }\n setEndCapStyle(endCapStyle) {\n this._bufParams.setEndCapStyle(endCapStyle)\n }\n}\nBufferOp.CAP_ROUND = BufferParameters.CAP_ROUND\nBufferOp.CAP_BUTT = BufferParameters.CAP_FLAT\nBufferOp.CAP_FLAT = BufferParameters.CAP_FLAT\nBufferOp.CAP_SQUARE = BufferParameters.CAP_SQUARE\nBufferOp.MAX_PRECISION_DIGITS = 12\n","import WKTWriter from '../../io/WKTWriter'\nexport default class GeometryLocation {\n constructor() {\n GeometryLocation.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._component = null\n this._segIndex = null\n this._pt = null\n if (arguments.length === 2) {\n const component = arguments[0], pt = arguments[1]\n GeometryLocation.constructor_.call(this, component, GeometryLocation.INSIDE_AREA, pt)\n } else if (arguments.length === 3) {\n const component = arguments[0], segIndex = arguments[1], pt = arguments[2]\n this._component = component\n this._segIndex = segIndex\n this._pt = pt\n }\n }\n getSegmentIndex() {\n return this._segIndex\n }\n getCoordinate() {\n return this._pt\n }\n isInsideArea() {\n return this._segIndex === GeometryLocation.INSIDE_AREA\n }\n toString() {\n return this._component.getGeometryType() + '[' + this._segIndex + ']' + '-' + WKTWriter.toPoint(this._pt)\n }\n getGeometryComponent() {\n return this._component\n }\n}\nGeometryLocation.INSIDE_AREA = -1\n","import LineString from '../../geom/LineString'\nimport Point from '../../geom/Point'\nimport Polygon from '../../geom/Polygon'\nimport GeometryLocation from './GeometryLocation'\nimport ArrayList from '../../../../../java/util/ArrayList'\nimport GeometryFilter from '../../geom/GeometryFilter'\nexport default class ConnectedElementLocationFilter {\n constructor() {\n ConnectedElementLocationFilter.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._locations = null\n const locations = arguments[0]\n this._locations = locations\n }\n static getLocations(geom) {\n const locations = new ArrayList()\n geom.apply(new ConnectedElementLocationFilter(locations))\n return locations\n }\n filter(geom) {\n if (geom.isEmpty()) return null\n if (geom instanceof Point || geom instanceof LineString || geom instanceof Polygon) this._locations.add(new GeometryLocation(geom, 0, geom.getCoordinate()))\n }\n get interfaces_() {\n return [GeometryFilter]\n }\n}\n","import PointLocator from '../../algorithm/PointLocator'\nimport PolygonExtracter from '../../geom/util/PolygonExtracter'\nimport Location from '../../geom/Location'\nimport LineString from '../../geom/LineString'\nimport hasInterface from '../../../../../hasInterface'\nimport IllegalArgumentException from '../../../../../java/lang/IllegalArgumentException'\nimport Point from '../../geom/Point'\nimport Polygon from '../../geom/Polygon'\nimport GeometryLocation from './GeometryLocation'\nimport Double from '../../../../../java/lang/Double'\nimport PointExtracter from '../../geom/util/PointExtracter'\nimport ConnectedElementLocationFilter from './ConnectedElementLocationFilter'\nimport LineSegment from '../../geom/LineSegment'\nimport LinearComponentExtracter from '../../geom/util/LinearComponentExtracter'\nimport Envelope from '../../geom/Envelope'\nimport List from '../../../../../java/util/List'\nimport Distance from '../../algorithm/Distance'\nexport default class DistanceOp {\n constructor() {\n DistanceOp.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._geom = null\n this._terminateDistance = 0.0\n this._ptLocator = new PointLocator()\n this._minDistanceLocation = null\n this._minDistance = Double.MAX_VALUE\n if (arguments.length === 2) {\n const g0 = arguments[0], g1 = arguments[1]\n DistanceOp.constructor_.call(this, g0, g1, 0.0)\n } else if (arguments.length === 3) {\n const g0 = arguments[0], g1 = arguments[1], terminateDistance = arguments[2]\n this._geom = new Array(2).fill(null)\n this._geom[0] = g0\n this._geom[1] = g1\n this._terminateDistance = terminateDistance\n }\n }\n static distance(g0, g1) {\n const distOp = new DistanceOp(g0, g1)\n return distOp.distance()\n }\n static isWithinDistance(g0, g1, distance) {\n const envDist = g0.getEnvelopeInternal().distance(g1.getEnvelopeInternal())\n if (envDist > distance) return false\n const distOp = new DistanceOp(g0, g1, distance)\n return distOp.distance() <= distance\n }\n static nearestPoints(g0, g1) {\n const distOp = new DistanceOp(g0, g1)\n return distOp.nearestPoints()\n }\n computeContainmentDistance() {\n if (arguments.length === 0) {\n const locPtPoly = new Array(2).fill(null)\n this.computeContainmentDistance(0, locPtPoly)\n if (this._minDistance <= this._terminateDistance) return null\n this.computeContainmentDistance(1, locPtPoly)\n } else if (arguments.length === 2) {\n const polyGeomIndex = arguments[0], locPtPoly = arguments[1]\n const polyGeom = this._geom[polyGeomIndex]\n if (polyGeom.getDimension() < 2) return null\n const locationsIndex = 1 - polyGeomIndex\n const polys = PolygonExtracter.getPolygons(polyGeom)\n if (polys.size() > 0) {\n const insideLocs = ConnectedElementLocationFilter.getLocations(this._geom[locationsIndex])\n this.computeContainmentDistance(insideLocs, polys, locPtPoly)\n if (this._minDistance <= this._terminateDistance) {\n this._minDistanceLocation[locationsIndex] = locPtPoly[0]\n this._minDistanceLocation[polyGeomIndex] = locPtPoly[1]\n return null\n }\n }\n } else if (arguments.length === 3) {\n if (arguments[2] instanceof Array && (hasInterface(arguments[0], List) && hasInterface(arguments[1], List))) {\n const locs = arguments[0], polys = arguments[1], locPtPoly = arguments[2]\n for (let i = 0; i < locs.size(); i++) {\n const loc = locs.get(i)\n for (let j = 0; j < polys.size(); j++) {\n this.computeContainmentDistance(loc, polys.get(j), locPtPoly)\n if (this._minDistance <= this._terminateDistance) return null\n }\n }\n } else if (arguments[2] instanceof Array && (arguments[0] instanceof GeometryLocation && arguments[1] instanceof Polygon)) {\n const ptLoc = arguments[0], poly = arguments[1], locPtPoly = arguments[2]\n const pt = ptLoc.getCoordinate()\n if (Location.EXTERIOR !== this._ptLocator.locate(pt, poly)) {\n this._minDistance = 0.0\n locPtPoly[0] = ptLoc\n locPtPoly[1] = new GeometryLocation(poly, pt)\n \n return null\n }\n }\n }\n }\n computeMinDistanceLinesPoints(lines, points, locGeom) {\n for (let i = 0; i < lines.size(); i++) {\n const line = lines.get(i)\n for (let j = 0; j < points.size(); j++) {\n const pt = points.get(j)\n this.computeMinDistance(line, pt, locGeom)\n if (this._minDistance <= this._terminateDistance) return null\n }\n }\n }\n computeFacetDistance() {\n const locGeom = new Array(2).fill(null)\n const lines0 = LinearComponentExtracter.getLines(this._geom[0])\n const lines1 = LinearComponentExtracter.getLines(this._geom[1])\n const pts0 = PointExtracter.getPoints(this._geom[0])\n const pts1 = PointExtracter.getPoints(this._geom[1])\n this.computeMinDistanceLines(lines0, lines1, locGeom)\n this.updateMinDistance(locGeom, false)\n if (this._minDistance <= this._terminateDistance) return null\n locGeom[0] = null\n locGeom[1] = null\n this.computeMinDistanceLinesPoints(lines0, pts1, locGeom)\n this.updateMinDistance(locGeom, false)\n if (this._minDistance <= this._terminateDistance) return null\n locGeom[0] = null\n locGeom[1] = null\n this.computeMinDistanceLinesPoints(lines1, pts0, locGeom)\n this.updateMinDistance(locGeom, true)\n if (this._minDistance <= this._terminateDistance) return null\n locGeom[0] = null\n locGeom[1] = null\n this.computeMinDistancePoints(pts0, pts1, locGeom)\n this.updateMinDistance(locGeom, false)\n }\n nearestLocations() {\n this.computeMinDistance()\n return this._minDistanceLocation\n }\n updateMinDistance(locGeom, flip) {\n if (locGeom[0] === null) return null\n if (flip) {\n this._minDistanceLocation[0] = locGeom[1]\n this._minDistanceLocation[1] = locGeom[0]\n } else {\n this._minDistanceLocation[0] = locGeom[0]\n this._minDistanceLocation[1] = locGeom[1]\n }\n }\n nearestPoints() {\n this.computeMinDistance()\n const nearestPts = [this._minDistanceLocation[0].getCoordinate(), this._minDistanceLocation[1].getCoordinate()]\n return nearestPts\n }\n computeMinDistance() {\n if (arguments.length === 0) {\n if (this._minDistanceLocation !== null) return null\n this._minDistanceLocation = new Array(2).fill(null)\n this.computeContainmentDistance()\n if (this._minDistance <= this._terminateDistance) return null\n this.computeFacetDistance()\n } else if (arguments.length === 3) {\n if (arguments[2] instanceof Array && (arguments[0] instanceof LineString && arguments[1] instanceof Point)) {\n const line = arguments[0], pt = arguments[1], locGeom = arguments[2]\n if (line.getEnvelopeInternal().distance(pt.getEnvelopeInternal()) > this._minDistance) return null\n const coord0 = line.getCoordinates()\n const coord = pt.getCoordinate()\n for (let i = 0; i < coord0.length - 1; i++) {\n const dist = Distance.pointToSegment(coord, coord0[i], coord0[i + 1])\n if (dist < this._minDistance) {\n this._minDistance = dist\n const seg = new LineSegment(coord0[i], coord0[i + 1])\n const segClosestPoint = seg.closestPoint(coord)\n locGeom[0] = new GeometryLocation(line, i, segClosestPoint)\n locGeom[1] = new GeometryLocation(pt, 0, coord)\n }\n if (this._minDistance <= this._terminateDistance) return null\n }\n } else if (arguments[2] instanceof Array && (arguments[0] instanceof LineString && arguments[1] instanceof LineString)) {\n const line0 = arguments[0], line1 = arguments[1], locGeom = arguments[2]\n if (line0.getEnvelopeInternal().distance(line1.getEnvelopeInternal()) > this._minDistance) return null\n const coord0 = line0.getCoordinates()\n const coord1 = line1.getCoordinates()\n for (let i = 0; i < coord0.length - 1; i++) {\n const segEnv0 = new Envelope(coord0[i], coord0[i + 1])\n if (segEnv0.distance(line1.getEnvelopeInternal()) > this._minDistance) continue\n for (let j = 0; j < coord1.length - 1; j++) {\n const segEnv1 = new Envelope(coord1[j], coord1[j + 1])\n if (segEnv0.distance(segEnv1) > this._minDistance) continue\n const dist = Distance.segmentToSegment(coord0[i], coord0[i + 1], coord1[j], coord1[j + 1])\n if (dist < this._minDistance) {\n this._minDistance = dist\n const seg0 = new LineSegment(coord0[i], coord0[i + 1])\n const seg1 = new LineSegment(coord1[j], coord1[j + 1])\n const closestPt = seg0.closestPoints(seg1)\n locGeom[0] = new GeometryLocation(line0, i, closestPt[0])\n locGeom[1] = new GeometryLocation(line1, j, closestPt[1])\n }\n if (this._minDistance <= this._terminateDistance) return null\n }\n }\n }\n }\n }\n computeMinDistancePoints(points0, points1, locGeom) {\n for (let i = 0; i < points0.size(); i++) {\n const pt0 = points0.get(i)\n for (let j = 0; j < points1.size(); j++) {\n const pt1 = points1.get(j)\n const dist = pt0.getCoordinate().distance(pt1.getCoordinate())\n if (dist < this._minDistance) {\n this._minDistance = dist\n locGeom[0] = new GeometryLocation(pt0, 0, pt0.getCoordinate())\n locGeom[1] = new GeometryLocation(pt1, 0, pt1.getCoordinate())\n }\n if (this._minDistance <= this._terminateDistance) return null\n }\n }\n }\n distance() {\n if (this._geom[0] === null || this._geom[1] === null) throw new IllegalArgumentException('null geometries are not supported')\n if (this._geom[0].isEmpty() || this._geom[1].isEmpty()) return 0.0\n this.computeMinDistance()\n return this._minDistance\n }\n computeMinDistanceLines(lines0, lines1, locGeom) {\n for (let i = 0; i < lines0.size(); i++) {\n const line0 = lines0.get(i)\n for (let j = 0; j < lines1.size(); j++) {\n const line1 = lines1.get(j)\n this.computeMinDistance(line0, line1, locGeom)\n if (this._minDistance <= this._terminateDistance) return null\n }\n }\n }\n}\n","import CoordinateList from '../../geom/CoordinateList'\nimport CoordinateArrays from '../../geom/CoordinateArrays'\nimport ArrayList from '../../../../../java/util/ArrayList'\nexport default class EdgeString {\n constructor() {\n EdgeString.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._factory = null\n this._directedEdges = new ArrayList()\n this._coordinates = null\n const factory = arguments[0]\n this._factory = factory\n }\n getCoordinates() {\n if (this._coordinates === null) {\n let forwardDirectedEdges = 0\n let reverseDirectedEdges = 0\n const coordinateList = new CoordinateList()\n for (let i = this._directedEdges.iterator(); i.hasNext(); ) {\n const directedEdge = i.next()\n if (directedEdge.getEdgeDirection()) \n forwardDirectedEdges++\n else \n reverseDirectedEdges++\n \n coordinateList.add(directedEdge.getEdge().getLine().getCoordinates(), false, directedEdge.getEdgeDirection())\n }\n this._coordinates = coordinateList.toCoordinateArray()\n if (reverseDirectedEdges > forwardDirectedEdges) \n CoordinateArrays.reverse(this._coordinates)\n \n }\n return this._coordinates\n }\n toLineString() {\n return this._factory.createLineString(this.getCoordinates())\n }\n add(directedEdge) {\n this._directedEdges.add(directedEdge)\n }\n}\n","export default class GraphComponent {\n constructor() {\n GraphComponent.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._isMarked = false\n this._isVisited = false\n this._data = null\n }\n static getComponentWithVisitedState(i, visitedState) {\n while (i.hasNext()) {\n const comp = i.next()\n if (comp.isVisited() === visitedState) return comp\n }\n return null\n }\n static setVisited(i, visited) {\n while (i.hasNext()) {\n const comp = i.next()\n comp.setVisited(visited)\n }\n }\n static setMarked(i, marked) {\n while (i.hasNext()) {\n const comp = i.next()\n comp.setMarked(marked)\n }\n }\n setVisited(isVisited) {\n this._isVisited = isVisited\n }\n isMarked() {\n return this._isMarked\n }\n setData(data) {\n this._data = data\n }\n getData() {\n return this._data\n }\n setMarked(isMarked) {\n this._isMarked = isMarked\n }\n getContext() {\n return this._data\n }\n isVisited() {\n return this._isVisited\n }\n setContext(data) {\n this._data = data\n }\n}\n","import Orientation from '../algorithm/Orientation'\nimport Comparable from '../../../../java/lang/Comparable'\nimport ArrayList from '../../../../java/util/ArrayList'\nimport Quadrant from '../geomgraph/Quadrant'\nimport GraphComponent from './GraphComponent'\nexport default class DirectedEdge extends GraphComponent {\n constructor() {\n super()\n DirectedEdge.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._parentEdge = null\n this._from = null\n this._to = null\n this._p0 = null\n this._p1 = null\n this._sym = null\n this._edgeDirection = null\n this._quadrant = null\n this._angle = null\n if (arguments.length === 0) {} else if (arguments.length === 4) {\n const from = arguments[0], to = arguments[1], directionPt = arguments[2], edgeDirection = arguments[3]\n this._from = from\n this._to = to\n this._edgeDirection = edgeDirection\n this._p0 = from.getCoordinate()\n this._p1 = directionPt\n const dx = this._p1.x - this._p0.x\n const dy = this._p1.y - this._p0.y\n this._quadrant = Quadrant.quadrant(dx, dy)\n this._angle = Math.atan2(dy, dx)\n }\n }\n static toEdges(dirEdges) {\n const edges = new ArrayList()\n for (let i = dirEdges.iterator(); i.hasNext(); ) \n edges.add(i.next()._parentEdge)\n \n return edges\n }\n isRemoved() {\n return this._parentEdge === null\n }\n compareDirection(e) {\n if (this._quadrant > e._quadrant) return 1\n if (this._quadrant < e._quadrant) return -1\n return Orientation.index(e._p0, e._p1, this._p1)\n }\n getCoordinate() {\n return this._from.getCoordinate()\n }\n print(out) {\n const className = this.getClass().getName()\n const lastDotPos = className.lastIndexOf('.')\n const name = className.substring(lastDotPos + 1)\n out.print(' ' + name + ': ' + this._p0 + ' - ' + this._p1 + ' ' + this._quadrant + ':' + this._angle)\n }\n getDirectionPt() {\n return this._p1\n }\n getAngle() {\n return this._angle\n }\n compareTo(obj) {\n const de = obj\n return this.compareDirection(de)\n }\n getFromNode() {\n return this._from\n }\n getSym() {\n return this._sym\n }\n setEdge(parentEdge) {\n this._parentEdge = parentEdge\n }\n remove() {\n this._sym = null\n this._parentEdge = null\n }\n getEdge() {\n return this._parentEdge\n }\n getQuadrant() {\n return this._quadrant\n }\n setSym(sym) {\n this._sym = sym\n }\n getToNode() {\n return this._to\n }\n getEdgeDirection() {\n return this._edgeDirection\n }\n get interfaces_() {\n return [Comparable]\n }\n}\n","import DirectedEdge from '../../planargraph/DirectedEdge'\nimport Assert from '../../util/Assert'\nexport default class LineMergeDirectedEdge extends DirectedEdge {\n constructor() {\n super()\n LineMergeDirectedEdge.constructor_.apply(this, arguments)\n }\n static constructor_() {\n const from = arguments[0], to = arguments[1], directionPt = arguments[2], edgeDirection = arguments[3]\n DirectedEdge.constructor_.call(this, from, to, directionPt, edgeDirection)\n }\n getNext() {\n if (this.getToNode().getDegree() !== 2) \n return null\n \n if (this.getToNode().getOutEdges().getEdges().get(0) === this.getSym()) \n return this.getToNode().getOutEdges().getEdges().get(1)\n \n Assert.isTrue(this.getToNode().getOutEdges().getEdges().get(1) === this.getSym())\n return this.getToNode().getOutEdges().getEdges().get(0)\n }\n}\n","import Node from './Node'\nimport GraphComponent from './GraphComponent'\nexport default class Edge extends GraphComponent {\n constructor() {\n super()\n Edge.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._dirEdge = null\n if (arguments.length === 0) {} else if (arguments.length === 2) {\n const de0 = arguments[0], de1 = arguments[1]\n this.setDirectedEdges(de0, de1)\n }\n }\n isRemoved() {\n return this._dirEdge === null\n }\n setDirectedEdges(de0, de1) {\n this._dirEdge = [de0, de1]\n de0.setEdge(this)\n de1.setEdge(this)\n de0.setSym(de1)\n de1.setSym(de0)\n de0.getFromNode().addOutEdge(de0)\n de1.getFromNode().addOutEdge(de1)\n }\n getDirEdge() {\n if (Number.isInteger(arguments[0])) {\n const i = arguments[0]\n return this._dirEdge[i]\n } else if (arguments[0] instanceof Node) {\n const fromNode = arguments[0]\n if (this._dirEdge[0].getFromNode() === fromNode) return this._dirEdge[0]\n if (this._dirEdge[1].getFromNode() === fromNode) return this._dirEdge[1]\n return null\n }\n }\n remove() {\n this._dirEdge = null\n }\n getOppositeNode(node) {\n if (this._dirEdge[0].getFromNode() === node) return this._dirEdge[0].getToNode()\n if (this._dirEdge[1].getFromNode() === node) return this._dirEdge[1].getToNode()\n return null\n }\n}\n","import Collections from '../../../../java/util/Collections'\nimport DirectedEdge from './DirectedEdge'\nimport ArrayList from '../../../../java/util/ArrayList'\nimport Edge from './Edge'\nexport default class DirectedEdgeStar {\n constructor() {\n DirectedEdgeStar.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._outEdges = new ArrayList()\n this._sorted = false\n }\n getNextEdge(dirEdge) {\n const i = this.getIndex(dirEdge)\n return this._outEdges.get(this.getIndex(i + 1))\n }\n getCoordinate() {\n const it = this.iterator()\n if (!it.hasNext()) return null\n const e = it.next()\n return e.getCoordinate()\n }\n iterator() {\n this.sortEdges()\n return this._outEdges.iterator()\n }\n sortEdges() {\n if (!this._sorted) {\n Collections.sort(this._outEdges)\n this._sorted = true\n }\n }\n remove(de) {\n this._outEdges.remove(de)\n }\n getEdges() {\n this.sortEdges()\n return this._outEdges\n }\n getNextCWEdge(dirEdge) {\n const i = this.getIndex(dirEdge)\n return this._outEdges.get(this.getIndex(i - 1))\n }\n getIndex() {\n if (arguments[0] instanceof Edge) {\n const edge = arguments[0]\n this.sortEdges()\n for (let i = 0; i < this._outEdges.size(); i++) {\n const de = this._outEdges.get(i)\n if (de.getEdge() === edge) return i\n }\n return -1\n } else if (arguments[0] instanceof DirectedEdge) {\n const dirEdge = arguments[0]\n this.sortEdges()\n for (let i = 0; i < this._outEdges.size(); i++) {\n const de = this._outEdges.get(i)\n if (de === dirEdge) return i\n }\n return -1\n } else if (Number.isInteger(arguments[0])) {\n const i = arguments[0]\n let modi = i % this._outEdges.size()\n if (modi < 0) modi += this._outEdges.size()\n return modi\n }\n }\n add(de) {\n this._outEdges.add(de)\n this._sorted = false\n }\n getDegree() {\n return this._outEdges.size()\n }\n}\n","import DirectedEdgeStar from './DirectedEdgeStar'\nimport HashSet from '../../../../java/util/HashSet'\nimport DirectedEdge from './DirectedEdge'\nimport GraphComponent from './GraphComponent'\nexport default class Node extends GraphComponent {\n constructor() {\n super()\n Node.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._pt = null\n this._deStar = null\n if (arguments.length === 1) {\n const pt = arguments[0]\n Node.constructor_.call(this, pt, new DirectedEdgeStar())\n } else if (arguments.length === 2) {\n const pt = arguments[0], deStar = arguments[1]\n this._pt = pt\n this._deStar = deStar\n }\n }\n static getEdgesBetween(node0, node1) {\n const edges0 = DirectedEdge.toEdges(node0.getOutEdges().getEdges())\n const commonEdges = new HashSet(edges0)\n const edges1 = DirectedEdge.toEdges(node1.getOutEdges().getEdges())\n commonEdges.retainAll(edges1)\n return commonEdges\n }\n isRemoved() {\n return this._pt === null\n }\n addOutEdge(de) {\n this._deStar.add(de)\n }\n getCoordinate() {\n return this._pt\n }\n getOutEdges() {\n return this._deStar\n }\n remove() {\n if (arguments.length === 0) {\n this._pt = null\n } else if (arguments.length === 1) {\n const de = arguments[0]\n this._deStar.remove(de)\n }\n }\n getIndex(edge) {\n return this._deStar.getIndex(edge)\n }\n getDegree() {\n return this._deStar.getDegree()\n }\n}\n","import Edge from '../../planargraph/Edge'\nexport default class LineMergeEdge extends Edge {\n constructor() {\n super()\n LineMergeEdge.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._line = null\n const line = arguments[0]\n this._line = line\n }\n getLine() {\n return this._line\n }\n}\n","import TreeMap from '../../../../java/util/TreeMap'\nexport default class NodeMap {\n constructor() {\n NodeMap.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._nodeMap = new TreeMap()\n }\n find(coord) {\n return this._nodeMap.get(coord)\n }\n iterator() {\n return this._nodeMap.values().iterator()\n }\n remove(pt) {\n return this._nodeMap.remove(pt)\n }\n values() {\n return this._nodeMap.values()\n }\n add(n) {\n this._nodeMap.put(n.getCoordinate(), n)\n return n\n }\n}\n","import HashSet from '../../../../java/util/HashSet'\nimport Node from './Node'\nimport NodeMap from './NodeMap'\nimport DirectedEdge from './DirectedEdge'\nimport ArrayList from '../../../../java/util/ArrayList'\nimport Edge from './Edge'\nexport default class PlanarGraph {\n constructor() {\n PlanarGraph.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._edges = new HashSet()\n this._dirEdges = new HashSet()\n this._nodeMap = new NodeMap()\n }\n findNodesOfDegree(degree) {\n const nodesFound = new ArrayList()\n for (let i = this.nodeIterator(); i.hasNext(); ) {\n const node = i.next()\n if (node.getDegree() === degree) nodesFound.add(node)\n }\n return nodesFound\n }\n dirEdgeIterator() {\n return this._dirEdges.iterator()\n }\n edgeIterator() {\n return this._edges.iterator()\n }\n remove() {\n if (arguments[0] instanceof Edge) {\n const edge = arguments[0]\n this.remove(edge.getDirEdge(0))\n this.remove(edge.getDirEdge(1))\n this._edges.remove(edge)\n edge.remove()\n } else if (arguments[0] instanceof DirectedEdge) {\n const de = arguments[0]\n const sym = de.getSym()\n if (sym !== null) sym.setSym(null)\n de.getFromNode().remove(de)\n de.remove()\n this._dirEdges.remove(de)\n } else if (arguments[0] instanceof Node) {\n const node = arguments[0]\n const outEdges = node.getOutEdges().getEdges()\n for (let i = outEdges.iterator(); i.hasNext(); ) {\n const de = i.next()\n const sym = de.getSym()\n if (sym !== null) this.remove(sym)\n this._dirEdges.remove(de)\n const edge = de.getEdge()\n if (edge !== null) \n this._edges.remove(edge)\n \n }\n this._nodeMap.remove(node.getCoordinate())\n node.remove()\n }\n }\n findNode(pt) {\n return this._nodeMap.find(pt)\n }\n getEdges() {\n return this._edges\n }\n nodeIterator() {\n return this._nodeMap.iterator()\n }\n contains() {\n if (arguments[0] instanceof Edge) {\n const e = arguments[0]\n return this._edges.contains(e)\n } else if (arguments[0] instanceof DirectedEdge) {\n const de = arguments[0]\n return this._dirEdges.contains(de)\n }\n }\n add() {\n if (arguments[0] instanceof Node) {\n const node = arguments[0]\n this._nodeMap.add(node)\n } else if (arguments[0] instanceof Edge) {\n const edge = arguments[0]\n this._edges.add(edge)\n this.add(edge.getDirEdge(0))\n this.add(edge.getDirEdge(1))\n } else if (arguments[0] instanceof DirectedEdge) {\n const dirEdge = arguments[0]\n this._dirEdges.add(dirEdge)\n }\n }\n getNodes() {\n return this._nodeMap.values()\n }\n}\n","import LineMergeDirectedEdge from './LineMergeDirectedEdge'\nimport Node from '../../planargraph/Node'\nimport CoordinateArrays from '../../geom/CoordinateArrays'\nimport LineMergeEdge from './LineMergeEdge'\nimport PlanarGraph from '../../planargraph/PlanarGraph'\nexport default class LineMergeGraph extends PlanarGraph {\n constructor() {\n super()\n }\n addEdge(lineString) {\n if (lineString.isEmpty()) \n return null\n \n const coordinates = CoordinateArrays.removeRepeatedPoints(lineString.getCoordinates())\n if (coordinates.length <= 1) return null\n const startCoordinate = coordinates[0]\n const endCoordinate = coordinates[coordinates.length - 1]\n const startNode = this.getNode(startCoordinate)\n const endNode = this.getNode(endCoordinate)\n const directedEdge0 = new LineMergeDirectedEdge(startNode, endNode, coordinates[1], true)\n const directedEdge1 = new LineMergeDirectedEdge(endNode, startNode, coordinates[coordinates.length - 2], false)\n const edge = new LineMergeEdge(lineString)\n edge.setDirectedEdges(directedEdge0, directedEdge1)\n this.add(edge)\n }\n getNode(coordinate) {\n let node = this.findNode(coordinate)\n if (node === null) {\n node = new Node(coordinate)\n this.add(node)\n }\n return node\n }\n}\n","import LineString from '../../geom/LineString'\nimport Geometry from '../../geom/Geometry'\nimport hasInterface from '../../../../../hasInterface'\nimport Collection from '../../../../../java/util/Collection'\nimport EdgeString from './EdgeString'\nimport LineMergeGraph from './LineMergeGraph'\nimport ArrayList from '../../../../../java/util/ArrayList'\nimport Assert from '../../util/Assert'\nimport GraphComponent from '../../planargraph/GraphComponent'\nexport default class LineMerger {\n constructor() {\n LineMerger.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._graph = new LineMergeGraph()\n this._mergedLineStrings = null\n this._factory = null\n this._edgeStrings = null\n }\n buildEdgeStringsForUnprocessedNodes() {\n for (let i = this._graph.getNodes().iterator(); i.hasNext(); ) {\n const node = i.next()\n if (!node.isMarked()) {\n Assert.isTrue(node.getDegree() === 2)\n this.buildEdgeStringsStartingAt(node)\n node.setMarked(true)\n }\n }\n }\n buildEdgeStringsForNonDegree2Nodes() {\n for (let i = this._graph.getNodes().iterator(); i.hasNext(); ) {\n const node = i.next()\n if (node.getDegree() !== 2) {\n this.buildEdgeStringsStartingAt(node)\n node.setMarked(true)\n }\n }\n }\n buildEdgeStringsForObviousStartNodes() {\n this.buildEdgeStringsForNonDegree2Nodes()\n }\n getMergedLineStrings() {\n this.merge()\n return this._mergedLineStrings\n }\n buildEdgeStringsStartingAt(node) {\n for (let i = node.getOutEdges().iterator(); i.hasNext(); ) {\n const directedEdge = i.next()\n if (directedEdge.getEdge().isMarked()) \n continue\n \n this._edgeStrings.add(this.buildEdgeStringStartingWith(directedEdge))\n }\n }\n merge() {\n if (this._mergedLineStrings !== null) \n return null\n \n GraphComponent.setMarked(this._graph.nodeIterator(), false)\n GraphComponent.setMarked(this._graph.edgeIterator(), false)\n this._edgeStrings = new ArrayList()\n this.buildEdgeStringsForObviousStartNodes()\n this.buildEdgeStringsForIsolatedLoops()\n this._mergedLineStrings = new ArrayList()\n for (let i = this._edgeStrings.iterator(); i.hasNext(); ) {\n const edgeString = i.next()\n this._mergedLineStrings.add(edgeString.toLineString())\n }\n }\n addLineString(lineString) {\n if (this._factory === null) \n this._factory = lineString.getFactory()\n \n this._graph.addEdge(lineString)\n }\n buildEdgeStringStartingWith(start) {\n const edgeString = new EdgeString(this._factory)\n let current = start\n do {\n edgeString.add(current)\n current.getEdge().setMarked(true)\n current = current.getNext()\n } while (current !== null && current !== start)\n return edgeString\n }\n add() {\n if (arguments[0] instanceof Geometry) {\n const geometry = arguments[0]\n for (let i = 0; i < geometry.getNumGeometries(); i++) {\n const component = geometry.getGeometryN(i)\n if (component instanceof LineString) \n this.addLineString(component)\n \n }\n \n } else if (hasInterface(arguments[0], Collection)) {\n const geometries = arguments[0]\n this._mergedLineStrings = null\n for (let i = geometries.iterator(); i.hasNext(); ) {\n const geometry = i.next()\n this.add(geometry)\n }\n }\n }\n buildEdgeStringsForIsolatedLoops() {\n this.buildEdgeStringsForUnprocessedNodes()\n }\n}\n","import HashSet from '../../../../java/util/HashSet'\nimport NodeMap from './NodeMap'\nimport ArrayList from '../../../../java/util/ArrayList'\nexport default class Subgraph {\n constructor() {\n Subgraph.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._parentGraph = null\n this._edges = new HashSet()\n this._dirEdges = new ArrayList()\n this._nodeMap = new NodeMap()\n const parentGraph = arguments[0]\n this._parentGraph = parentGraph\n }\n dirEdgeIterator() {\n return this._dirEdges.iterator()\n }\n edgeIterator() {\n return this._edges.iterator()\n }\n getParent() {\n return this._parentGraph\n }\n nodeIterator() {\n return this._nodeMap.iterator()\n }\n contains(e) {\n return this._edges.contains(e)\n }\n add(e) {\n if (this._edges.contains(e)) return null\n this._edges.add(e)\n this._dirEdges.add(e.getDirEdge(0))\n this._dirEdges.add(e.getDirEdge(1))\n this._nodeMap.add(e.getDirEdge(0).getFromNode())\n this._nodeMap.add(e.getDirEdge(1).getFromNode())\n }\n}\n","import Stack from '../../../../../java/util/Stack'\nimport Subgraph from '../Subgraph'\nimport ArrayList from '../../../../../java/util/ArrayList'\nimport GraphComponent from '../GraphComponent'\nexport default class ConnectedSubgraphFinder {\n constructor() {\n ConnectedSubgraphFinder.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._graph = null\n const graph = arguments[0]\n this._graph = graph\n }\n addReachable(startNode, subgraph) {\n const nodeStack = new Stack()\n nodeStack.add(startNode)\n while (!nodeStack.empty()) {\n const node = nodeStack.pop()\n this.addEdges(node, nodeStack, subgraph)\n }\n }\n findSubgraph(node) {\n const subgraph = new Subgraph(this._graph)\n this.addReachable(node, subgraph)\n return subgraph\n }\n getConnectedSubgraphs() {\n const subgraphs = new ArrayList()\n GraphComponent.setVisited(this._graph.nodeIterator(), false)\n for (let i = this._graph.edgeIterator(); i.hasNext(); ) {\n const e = i.next()\n const node = e.getDirEdge(0).getFromNode()\n if (!node.isVisited()) \n subgraphs.add(this.findSubgraph(node))\n \n }\n return subgraphs\n }\n addEdges(node, nodeStack, subgraph) {\n node.setVisited(true)\n for (let i = node.getOutEdges().iterator(); i.hasNext(); ) {\n const de = i.next()\n subgraph.add(de.getEdge())\n const toNode = de.getToNode()\n if (!toNode.isVisited()) nodeStack.push(toNode)\n }\n }\n}\n","import TreeSet from '../../../../../java/util/TreeSet'\nimport LineString from '../../geom/LineString'\nimport Geometry from '../../geom/Geometry'\nimport hasInterface from '../../../../../hasInterface'\nimport GeometryFactory from '../../geom/GeometryFactory'\nimport Collection from '../../../../../java/util/Collection'\nimport Coordinate from '../../geom/Coordinate'\nimport Integer from '../../../../../java/lang/Integer'\nimport LineMergeGraph from './LineMergeGraph'\nimport LinkedList from '../../../../../java/util/LinkedList'\nimport GeometryComponentFilter from '../../geom/GeometryComponentFilter'\nimport ArrayList from '../../../../../java/util/ArrayList'\nimport ConnectedSubgraphFinder from '../../planargraph/algorithm/ConnectedSubgraphFinder'\nimport Assert from '../../util/Assert'\nimport MultiLineString from '../../geom/MultiLineString'\nimport GraphComponent from '../../planargraph/GraphComponent'\nexport default class LineSequencer {\n constructor() {\n LineSequencer.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._graph = new LineMergeGraph()\n this._factory = new GeometryFactory()\n this._lineCount = 0\n this._isRun = false\n this._sequencedGeometry = null\n this._isSequenceable = false\n }\n static findUnvisitedBestOrientedDE(node) {\n let wellOrientedDE = null\n let unvisitedDE = null\n for (let i = node.getOutEdges().iterator(); i.hasNext(); ) {\n const de = i.next()\n if (!de.getEdge().isVisited()) {\n unvisitedDE = de\n if (de.getEdgeDirection()) wellOrientedDE = de\n }\n }\n if (wellOrientedDE !== null) return wellOrientedDE\n return unvisitedDE\n }\n static findLowestDegreeNode(graph) {\n let minDegree = Integer.MAX_VALUE\n let minDegreeNode = null\n for (let i = graph.nodeIterator(); i.hasNext(); ) {\n const node = i.next()\n if (minDegreeNode === null || node.getDegree() < minDegree) {\n minDegree = node.getDegree()\n minDegreeNode = node\n }\n }\n return minDegreeNode\n }\n static isSequenced(geom) {\n if (!(geom instanceof MultiLineString)) \n return true\n \n const mls = geom\n const prevSubgraphNodes = new TreeSet()\n let lastNode = null\n const currNodes = new ArrayList()\n for (let i = 0; i < mls.getNumGeometries(); i++) {\n const line = mls.getGeometryN(i)\n const startNode = line.getCoordinateN(0)\n const endNode = line.getCoordinateN(line.getNumPoints() - 1)\n if (prevSubgraphNodes.contains(startNode)) return false\n if (prevSubgraphNodes.contains(endNode)) return false\n if (lastNode !== null) \n if (!startNode.equals(lastNode)) {\n prevSubgraphNodes.addAll(currNodes)\n currNodes.clear()\n }\n \n currNodes.add(startNode)\n currNodes.add(endNode)\n lastNode = endNode\n }\n return true\n }\n static reverse(line) {\n const pts = line.getCoordinates()\n const revPts = new Array(pts.length).fill(null)\n const len = pts.length\n for (let i = 0; i < len; i++) \n revPts[len - 1 - i] = new Coordinate(pts[i])\n \n return line.getFactory().createLineString(revPts)\n }\n static sequence(geom) {\n const sequencer = new LineSequencer()\n sequencer.add(geom)\n return sequencer.getSequencedLineStrings()\n }\n addLine(lineString) {\n if (this._factory === null) \n this._factory = lineString.getFactory()\n \n this._graph.addEdge(lineString)\n this._lineCount++\n }\n hasSequence(graph) {\n let oddDegreeCount = 0\n for (let i = graph.nodeIterator(); i.hasNext(); ) {\n const node = i.next()\n if (node.getDegree() % 2 === 1) oddDegreeCount++\n }\n return oddDegreeCount <= 2\n }\n computeSequence() {\n if (this._isRun) \n return null\n \n this._isRun = true\n const sequences = this.findSequences()\n if (sequences === null) return null\n this._sequencedGeometry = this.buildSequencedGeometry(sequences)\n this._isSequenceable = true\n const finalLineCount = this._sequencedGeometry.getNumGeometries()\n Assert.isTrue(this._lineCount === finalLineCount, 'Lines were missing from result')\n Assert.isTrue(this._sequencedGeometry instanceof LineString || this._sequencedGeometry instanceof MultiLineString, 'Result is not lineal')\n }\n findSequences() {\n const sequences = new ArrayList()\n const csFinder = new ConnectedSubgraphFinder(this._graph)\n const subgraphs = csFinder.getConnectedSubgraphs()\n for (let i = subgraphs.iterator(); i.hasNext(); ) {\n const subgraph = i.next()\n if (this.hasSequence(subgraph)) {\n const seq = this.findSequence(subgraph)\n sequences.add(seq)\n } else {\n return null\n }\n }\n return sequences\n }\n addReverseSubpath(de, lit, expectedClosed) {\n const endNode = de.getToNode()\n let fromNode = null\n while (true) {\n lit.add(de.getSym())\n de.getEdge().setVisited(true)\n fromNode = de.getFromNode()\n const unvisitedOutDE = LineSequencer.findUnvisitedBestOrientedDE(fromNode)\n if (unvisitedOutDE === null) break\n de = unvisitedOutDE.getSym()\n }\n if (expectedClosed) \n Assert.isTrue(fromNode === endNode, 'path not contiguous')\n \n }\n findSequence(graph) {\n GraphComponent.setVisited(graph.edgeIterator(), false)\n const startNode = LineSequencer.findLowestDegreeNode(graph)\n const startDE = startNode.getOutEdges().iterator().next()\n const startDESym = startDE.getSym()\n const seq = new LinkedList()\n const lit = seq.listIterator()\n this.addReverseSubpath(startDESym, lit, false)\n while (lit.hasPrevious()) {\n const prev = lit.previous()\n const unvisitedOutDE = LineSequencer.findUnvisitedBestOrientedDE(prev.getFromNode())\n if (unvisitedOutDE !== null) this.addReverseSubpath(unvisitedOutDE.getSym(), lit, true)\n }\n const orientedSeq = this.orient(seq)\n return orientedSeq\n }\n reverse(seq) {\n const newSeq = new LinkedList()\n for (let i = seq.iterator(); i.hasNext(); ) {\n const de = i.next()\n newSeq.addFirst(de.getSym())\n }\n return newSeq\n }\n orient(seq) {\n const startEdge = seq.get(0)\n const endEdge = seq.get(seq.size() - 1)\n const startNode = startEdge.getFromNode()\n const endNode = endEdge.getToNode()\n let flipSeq = false\n const hasDegree1Node = startNode.getDegree() === 1 || endNode.getDegree() === 1\n if (hasDegree1Node) {\n let hasObviousStartNode = false\n if (endEdge.getToNode().getDegree() === 1 && endEdge.getEdgeDirection() === false) {\n hasObviousStartNode = true\n flipSeq = true\n }\n if (startEdge.getFromNode().getDegree() === 1 && startEdge.getEdgeDirection() === true) {\n hasObviousStartNode = true\n flipSeq = false\n }\n if (!hasObviousStartNode) \n if (startEdge.getFromNode().getDegree() === 1) flipSeq = true\n \n }\n if (flipSeq) return this.reverse(seq)\n return seq\n }\n buildSequencedGeometry(sequences) {\n const lines = new ArrayList()\n for (let i1 = sequences.iterator(); i1.hasNext(); ) {\n const seq = i1.next()\n for (let i2 = seq.iterator(); i2.hasNext(); ) {\n const de = i2.next()\n const e = de.getEdge()\n const line = e.getLine()\n let lineToAdd = line\n if (!de.getEdgeDirection() && !line.isClosed()) lineToAdd = LineSequencer.reverse(line)\n lines.add(lineToAdd)\n }\n }\n if (lines.size() === 0) return this._factory.createMultiLineString(new Array(0).fill(null))\n return this._factory.buildGeometry(lines)\n }\n getSequencedLineStrings() {\n this.computeSequence()\n return this._sequencedGeometry\n }\n isSequenceable() {\n this.computeSequence()\n return this._isSequenceable\n }\n add() {\n if (hasInterface(arguments[0], Collection)) {\n const geometries = arguments[0]\n for (let i = geometries.iterator(); i.hasNext(); ) {\n const geometry = i.next()\n this.add(geometry)\n }\n } else if (arguments[0] instanceof Geometry) {\n const geometry = arguments[0]\n geometry.apply(new (class {\n get interfaces_() {\n return [GeometryComponentFilter]\n }\n filter(component) {\n if (component instanceof LineString) \n this.addLine(component)\n \n }\n })())\n }\n }\n}\n","import LineString from '../../../geom/LineString'\nimport CoordinateList from '../../../geom/CoordinateList'\nimport Coordinate from '../../../geom/Coordinate'\nimport Double from '../../../../../../java/lang/Double'\nimport LineSegment from '../../../geom/LineSegment'\nexport default class LineStringSnapper {\n constructor() {\n LineStringSnapper.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._snapTolerance = 0.0\n this._srcPts = null\n this._seg = new LineSegment()\n this._allowSnappingToSourceVertices = false\n this._isClosed = false\n if (arguments[0] instanceof LineString && typeof arguments[1] === 'number') {\n const srcLine = arguments[0], snapTolerance = arguments[1]\n LineStringSnapper.constructor_.call(this, srcLine.getCoordinates(), snapTolerance)\n } else if (arguments[0] instanceof Array && typeof arguments[1] === 'number') {\n const srcPts = arguments[0], snapTolerance = arguments[1]\n this._srcPts = srcPts\n this._isClosed = LineStringSnapper.isClosed(srcPts)\n this._snapTolerance = snapTolerance\n }\n }\n static isClosed(pts) {\n if (pts.length <= 1) return false\n return pts[0].equals2D(pts[pts.length - 1])\n }\n snapVertices(srcCoords, snapPts) {\n const end = this._isClosed ? srcCoords.size() - 1 : srcCoords.size()\n for (let i = 0; i < end; i++) {\n const srcPt = srcCoords.get(i)\n const snapVert = this.findSnapForVertex(srcPt, snapPts)\n if (snapVert !== null) {\n srcCoords.set(i, new Coordinate(snapVert))\n if (i === 0 && this._isClosed) srcCoords.set(srcCoords.size() - 1, new Coordinate(snapVert))\n }\n }\n }\n findSnapForVertex(pt, snapPts) {\n for (let i = 0; i < snapPts.length; i++) {\n if (pt.equals2D(snapPts[i])) return null\n if (pt.distance(snapPts[i]) < this._snapTolerance) return snapPts[i]\n }\n return null\n }\n snapTo(snapPts) {\n const coordList = new CoordinateList(this._srcPts)\n this.snapVertices(coordList, snapPts)\n this.snapSegments(coordList, snapPts)\n const newPts = coordList.toCoordinateArray()\n return newPts\n }\n snapSegments(srcCoords, snapPts) {\n if (snapPts.length === 0) return null\n let distinctPtCount = snapPts.length\n if (snapPts[0].equals2D(snapPts[snapPts.length - 1])) distinctPtCount = snapPts.length - 1\n for (let i = 0; i < distinctPtCount; i++) {\n const snapPt = snapPts[i]\n const index = this.findSegmentIndexToSnap(snapPt, srcCoords)\n if (index >= 0) \n srcCoords.add(index + 1, new Coordinate(snapPt), false)\n \n }\n }\n findSegmentIndexToSnap(snapPt, srcCoords) {\n let minDist = Double.MAX_VALUE\n let snapIndex = -1\n for (let i = 0; i < srcCoords.size() - 1; i++) {\n this._seg.p0 = srcCoords.get(i)\n this._seg.p1 = srcCoords.get(i + 1)\n if (this._seg.p0.equals2D(snapPt) || this._seg.p1.equals2D(snapPt)) \n if (this._allowSnappingToSourceVertices) continue; else return -1\n \n const dist = this._seg.distance(snapPt)\n if (dist < this._snapTolerance && dist < minDist) {\n minDist = dist\n snapIndex = i\n }\n }\n return snapIndex\n }\n setAllowSnappingToSourceVertices(allowSnappingToSourceVertices) {\n this._allowSnappingToSourceVertices = allowSnappingToSourceVertices\n }\n}\n","import TreeSet from '../../../../../../java/util/TreeSet'\nimport GeometryTransformer from '../../../geom/util/GeometryTransformer'\nimport hasInterface from '../../../../../../hasInterface'\nimport Double from '../../../../../../java/lang/Double'\nimport LineStringSnapper from './LineStringSnapper'\nimport PrecisionModel from '../../../geom/PrecisionModel'\nimport Polygonal from '../../../geom/Polygonal'\nexport default class GeometrySnapper {\n constructor() {\n GeometrySnapper.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._srcGeom = null\n const srcGeom = arguments[0]\n this._srcGeom = srcGeom\n }\n static snap(g0, g1, snapTolerance) {\n const snapGeom = new Array(2).fill(null)\n const snapper0 = new GeometrySnapper(g0)\n snapGeom[0] = snapper0.snapTo(g1, snapTolerance)\n const snapper1 = new GeometrySnapper(g1)\n snapGeom[1] = snapper1.snapTo(snapGeom[0], snapTolerance)\n return snapGeom\n }\n static computeOverlaySnapTolerance() {\n if (arguments.length === 1) {\n const g = arguments[0]\n let snapTolerance = GeometrySnapper.computeSizeBasedSnapTolerance(g)\n const pm = g.getPrecisionModel()\n if (pm.getType() === PrecisionModel.FIXED) {\n const fixedSnapTol = 1 / pm.getScale() * 2 / 1.415\n if (fixedSnapTol > snapTolerance) snapTolerance = fixedSnapTol\n }\n return snapTolerance\n } else if (arguments.length === 2) {\n const g0 = arguments[0], g1 = arguments[1]\n return Math.min(GeometrySnapper.computeOverlaySnapTolerance(g0), GeometrySnapper.computeOverlaySnapTolerance(g1))\n }\n }\n static computeSizeBasedSnapTolerance(g) {\n const env = g.getEnvelopeInternal()\n const minDimension = Math.min(env.getHeight(), env.getWidth())\n const snapTol = minDimension * GeometrySnapper.SNAP_PRECISION_FACTOR\n return snapTol\n }\n static snapToSelf(geom, snapTolerance, cleanResult) {\n const snapper0 = new GeometrySnapper(geom)\n return snapper0.snapToSelf(snapTolerance, cleanResult)\n }\n snapTo(snapGeom, snapTolerance) {\n const snapPts = this.extractTargetCoordinates(snapGeom)\n const snapTrans = new SnapTransformer(snapTolerance, snapPts)\n return snapTrans.transform(this._srcGeom)\n }\n snapToSelf(snapTolerance, cleanResult) {\n const snapPts = this.extractTargetCoordinates(this._srcGeom)\n const snapTrans = new SnapTransformer(snapTolerance, snapPts, true)\n const snappedGeom = snapTrans.transform(this._srcGeom)\n let result = snappedGeom\n if (cleanResult && hasInterface(result, Polygonal)) \n result = snappedGeom.buffer(0)\n \n return result\n }\n computeSnapTolerance(ringPts) {\n const minSegLen = this.computeMinimumSegmentLength(ringPts)\n const snapTol = minSegLen / 10\n return snapTol\n }\n extractTargetCoordinates(g) {\n const ptSet = new TreeSet()\n const pts = g.getCoordinates()\n for (let i = 0; i < pts.length; i++) \n ptSet.add(pts[i])\n \n return ptSet.toArray(new Array(0).fill(null))\n }\n computeMinimumSegmentLength(pts) {\n let minSegLen = Double.MAX_VALUE\n for (let i = 0; i < pts.length - 1; i++) {\n const segLen = pts[i].distance(pts[i + 1])\n if (segLen < minSegLen) minSegLen = segLen\n }\n return minSegLen\n }\n}\nGeometrySnapper.SNAP_PRECISION_FACTOR = 1e-9\nclass SnapTransformer extends GeometryTransformer {\n constructor() {\n super()\n SnapTransformer.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._snapTolerance = null\n this._snapPts = null\n this._isSelfSnap = false\n if (arguments.length === 2) {\n const snapTolerance = arguments[0], snapPts = arguments[1]\n this._snapTolerance = snapTolerance\n this._snapPts = snapPts\n } else if (arguments.length === 3) {\n const snapTolerance = arguments[0], snapPts = arguments[1], isSelfSnap = arguments[2]\n this._snapTolerance = snapTolerance\n this._snapPts = snapPts\n this._isSelfSnap = isSelfSnap\n }\n }\n snapLine(srcPts, snapPts) {\n const snapper = new LineStringSnapper(srcPts, this._snapTolerance)\n snapper.setAllowSnappingToSourceVertices(this._isSelfSnap)\n return snapper.snapTo(snapPts)\n }\n transformCoordinates(coords, parent) {\n const srcPts = coords.toCoordinateArray()\n const newPts = this.snapLine(srcPts, this._snapPts)\n return this._factory.getCoordinateSequenceFactory().create(newPts)\n }\n}\n","import WKTWriter from '../io/WKTWriter'\nimport CoordinateArraySequence from '../geom/impl/CoordinateArraySequence'\nimport Octant from './Octant'\nimport SegmentString from './SegmentString'\nexport default class BasicSegmentString {\n constructor() {\n BasicSegmentString.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._pts = null\n this._data = null\n const pts = arguments[0], data = arguments[1]\n this._pts = pts\n this._data = data\n }\n getCoordinates() {\n return this._pts\n }\n size() {\n return this._pts.length\n }\n getCoordinate(i) {\n return this._pts[i]\n }\n isClosed() {\n return this._pts[0].equals(this._pts[this._pts.length - 1])\n }\n getSegmentOctant(index) {\n if (index === this._pts.length - 1) return -1\n return Octant.octant(this.getCoordinate(index), this.getCoordinate(index + 1))\n }\n setData(data) {\n this._data = data\n }\n getData() {\n return this._data\n }\n toString() {\n return WKTWriter.toLineString(new CoordinateArraySequence(this._pts))\n }\n get interfaces_() {\n return [SegmentString]\n }\n}\n","import SegmentIntersector from './SegmentIntersector'\nimport ArrayList from '../../../../java/util/ArrayList'\nexport default class NodingIntersectionFinder {\n constructor() {\n NodingIntersectionFinder.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._findAllIntersections = false\n this._isCheckEndSegmentsOnly = false\n this._keepIntersections = true\n this._isInteriorIntersectionsOnly = false\n this._li = null\n this._interiorIntersection = null\n this._intSegments = null\n this._intersections = new ArrayList()\n this._intersectionCount = 0\n const li = arguments[0]\n this._li = li\n this._interiorIntersection = null\n }\n static createAllIntersectionsFinder(li) {\n const finder = new NodingIntersectionFinder(li)\n finder.setFindAllIntersections(true)\n return finder\n }\n static isInteriorVertexIntersection() {\n if (arguments.length === 4) {\n const p0 = arguments[0], p1 = arguments[1], isEnd0 = arguments[2], isEnd1 = arguments[3]\n if (isEnd0 && isEnd1) return false\n if (p0.equals2D(p1)) \n return true\n \n return false\n } else if (arguments.length === 8) {\n const p00 = arguments[0], p01 = arguments[1], p10 = arguments[2], p11 = arguments[3], isEnd00 = arguments[4], isEnd01 = arguments[5], isEnd10 = arguments[6], isEnd11 = arguments[7]\n if (NodingIntersectionFinder.isInteriorVertexIntersection(p00, p10, isEnd00, isEnd10)) return true\n if (NodingIntersectionFinder.isInteriorVertexIntersection(p00, p11, isEnd00, isEnd11)) return true\n if (NodingIntersectionFinder.isInteriorVertexIntersection(p01, p10, isEnd01, isEnd10)) return true\n if (NodingIntersectionFinder.isInteriorVertexIntersection(p01, p11, isEnd01, isEnd11)) return true\n return false\n }\n }\n static createInteriorIntersectionCounter(li) {\n const finder = new NodingIntersectionFinder(li)\n finder.setInteriorIntersectionsOnly(true)\n finder.setFindAllIntersections(true)\n finder.setKeepIntersections(false)\n return finder\n }\n static createIntersectionCounter(li) {\n const finder = new NodingIntersectionFinder(li)\n finder.setFindAllIntersections(true)\n finder.setKeepIntersections(false)\n return finder\n }\n static isEndSegment(segStr, index) {\n if (index === 0) return true\n if (index >= segStr.size() - 2) return true\n return false\n }\n static createAnyIntersectionFinder(li) {\n return new NodingIntersectionFinder(li)\n }\n static createInteriorIntersectionsFinder(li) {\n const finder = new NodingIntersectionFinder(li)\n finder.setFindAllIntersections(true)\n finder.setInteriorIntersectionsOnly(true)\n return finder\n }\n setCheckEndSegmentsOnly(isCheckEndSegmentsOnly) {\n this._isCheckEndSegmentsOnly = isCheckEndSegmentsOnly\n }\n getIntersectionSegments() {\n return this._intSegments\n }\n count() {\n return this._intersectionCount\n }\n getIntersections() {\n return this._intersections\n }\n setFindAllIntersections(findAllIntersections) {\n this._findAllIntersections = findAllIntersections\n }\n setKeepIntersections(keepIntersections) {\n this._keepIntersections = keepIntersections\n }\n getIntersection() {\n return this._interiorIntersection\n }\n processIntersections(e0, segIndex0, e1, segIndex1) {\n if (!this._findAllIntersections && this.hasIntersection()) return null\n const isSameSegString = e0 === e1\n const isSameSegment = isSameSegString && segIndex0 === segIndex1\n if (isSameSegment) return null\n if (this._isCheckEndSegmentsOnly) {\n const isEndSegPresent = NodingIntersectionFinder.isEndSegment(e0, segIndex0) || NodingIntersectionFinder.isEndSegment(e1, segIndex1)\n if (!isEndSegPresent) return null\n }\n const p00 = e0.getCoordinate(segIndex0)\n const p01 = e0.getCoordinate(segIndex0 + 1)\n const p10 = e1.getCoordinate(segIndex1)\n const p11 = e1.getCoordinate(segIndex1 + 1)\n const isEnd00 = segIndex0 === 0\n const isEnd01 = segIndex0 + 2 === e0.size()\n const isEnd10 = segIndex1 === 0\n const isEnd11 = segIndex1 + 2 === e1.size()\n this._li.computeIntersection(p00, p01, p10, p11)\n const isInteriorInt = this._li.hasIntersection() && this._li.isInteriorIntersection()\n let isInteriorVertexInt = false\n if (!this._isInteriorIntersectionsOnly) {\n const isAdjacentSegment = isSameSegString && Math.abs(segIndex1 - segIndex0) <= 1\n isInteriorVertexInt = !isAdjacentSegment && NodingIntersectionFinder.isInteriorVertexIntersection(p00, p01, p10, p11, isEnd00, isEnd01, isEnd10, isEnd11)\n }\n if (isInteriorInt || isInteriorVertexInt) {\n this._intSegments = new Array(4).fill(null)\n this._intSegments[0] = p00\n this._intSegments[1] = p01\n this._intSegments[2] = p10\n this._intSegments[3] = p11\n this._interiorIntersection = this._li.getIntersection(0)\n if (this._keepIntersections) this._intersections.add(this._interiorIntersection)\n this._intersectionCount++\n }\n }\n hasIntersection() {\n return this._interiorIntersection !== null\n }\n isDone() {\n if (this._findAllIntersections) return false\n return this._interiorIntersection !== null\n }\n setInteriorIntersectionsOnly(isInteriorIntersectionsOnly) {\n this._isInteriorIntersectionsOnly = isInteriorIntersectionsOnly\n }\n get interfaces_() {\n return [SegmentIntersector]\n }\n}\n","import WKTWriter from '../io/WKTWriter'\nimport MCIndexNoder from './MCIndexNoder'\nimport TopologyException from '../geom/TopologyException'\nimport RobustLineIntersector from '../algorithm/RobustLineIntersector'\nimport NodingIntersectionFinder from './NodingIntersectionFinder'\nexport default class FastNodingValidator {\n constructor() {\n FastNodingValidator.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._li = new RobustLineIntersector()\n this._segStrings = null\n this._findAllIntersections = false\n this._segInt = null\n this._isValid = true\n const segStrings = arguments[0]\n this._segStrings = segStrings\n }\n static computeIntersections(segStrings) {\n const nv = new FastNodingValidator(segStrings)\n nv.setFindAllIntersections(true)\n nv.isValid()\n return nv.getIntersections()\n }\n execute() {\n if (this._segInt !== null) return null\n this.checkInteriorIntersections()\n }\n getIntersections() {\n return this._segInt.getIntersections()\n }\n isValid() {\n this.execute()\n return this._isValid\n }\n setFindAllIntersections(findAllIntersections) {\n this._findAllIntersections = findAllIntersections\n }\n checkInteriorIntersections() {\n this._isValid = true\n this._segInt = new NodingIntersectionFinder(this._li)\n this._segInt.setFindAllIntersections(this._findAllIntersections)\n const noder = new MCIndexNoder()\n noder.setSegmentIntersector(this._segInt)\n noder.computeNodes(this._segStrings)\n if (this._segInt.hasIntersection()) {\n this._isValid = false\n return null\n }\n }\n checkValid() {\n this.execute()\n if (!this._isValid) throw new TopologyException(this.getErrorMessage(), this._segInt.getIntersection())\n }\n getErrorMessage() {\n if (this._isValid) return 'no intersections found'\n const intSegs = this._segInt.getIntersectionSegments()\n return 'found non-noded intersection between ' + WKTWriter.toLineString(intSegs[0], intSegs[1]) + ' and ' + WKTWriter.toLineString(intSegs[2], intSegs[3])\n }\n}\n","import BasicSegmentString from '../noding/BasicSegmentString'\nimport FastNodingValidator from '../noding/FastNodingValidator'\nimport ArrayList from '../../../../java/util/ArrayList'\nexport default class EdgeNodingValidator {\n constructor() {\n EdgeNodingValidator.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._nv = null\n const edges = arguments[0]\n this._nv = new FastNodingValidator(EdgeNodingValidator.toSegmentStrings(edges))\n }\n static toSegmentStrings(edges) {\n const segStrings = new ArrayList()\n for (let i = edges.iterator(); i.hasNext(); ) {\n const e = i.next()\n segStrings.add(new BasicSegmentString(e.getCoordinates(), e))\n }\n return segStrings\n }\n static checkValid(edges) {\n const validator = new EdgeNodingValidator(edges)\n validator.checkValid()\n }\n checkValid() {\n this._nv.checkValid()\n }\n}\n","import ArrayList from '../../../../../java/util/ArrayList'\nimport Assert from '../../util/Assert'\nimport OverlayOp from './OverlayOp'\nexport default class LineBuilder {\n constructor() {\n LineBuilder.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._op = null\n this._geometryFactory = null\n this._ptLocator = null\n this._lineEdgesList = new ArrayList()\n this._resultLineList = new ArrayList()\n const op = arguments[0], geometryFactory = arguments[1], ptLocator = arguments[2]\n this._op = op\n this._geometryFactory = geometryFactory\n this._ptLocator = ptLocator\n }\n collectLines(opCode) {\n for (let it = this._op.getGraph().getEdgeEnds().iterator(); it.hasNext(); ) {\n const de = it.next()\n this.collectLineEdge(de, opCode, this._lineEdgesList)\n this.collectBoundaryTouchEdge(de, opCode, this._lineEdgesList)\n }\n }\n labelIsolatedLine(e, targetIndex) {\n const loc = this._ptLocator.locate(e.getCoordinate(), this._op.getArgGeometry(targetIndex))\n e.getLabel().setLocation(targetIndex, loc)\n }\n build(opCode) {\n this.findCoveredLineEdges()\n this.collectLines(opCode)\n this.buildLines(opCode)\n return this._resultLineList\n }\n collectLineEdge(de, opCode, edges) {\n const label = de.getLabel()\n const e = de.getEdge()\n if (de.isLineEdge()) \n if (!de.isVisited() && OverlayOp.isResultOfOp(label, opCode) && !e.isCovered()) {\n edges.add(e)\n de.setVisitedEdge(true)\n }\n \n }\n findCoveredLineEdges() {\n for (let nodeit = this._op.getGraph().getNodes().iterator(); nodeit.hasNext(); ) {\n const node = nodeit.next()\n node.getEdges().findCoveredLineEdges()\n }\n for (let it = this._op.getGraph().getEdgeEnds().iterator(); it.hasNext(); ) {\n const de = it.next()\n const e = de.getEdge()\n if (de.isLineEdge() && !e.isCoveredSet()) {\n const isCovered = this._op.isCoveredByA(de.getCoordinate())\n e.setCovered(isCovered)\n }\n }\n }\n labelIsolatedLines(edgesList) {\n for (let it = edgesList.iterator(); it.hasNext(); ) {\n const e = it.next()\n const label = e.getLabel()\n if (e.isIsolated()) \n if (label.isNull(0)) this.labelIsolatedLine(e, 0); else this.labelIsolatedLine(e, 1)\n \n }\n }\n buildLines(opCode) {\n for (let it = this._lineEdgesList.iterator(); it.hasNext(); ) {\n const e = it.next()\n const line = this._geometryFactory.createLineString(e.getCoordinates())\n this._resultLineList.add(line)\n e.setInResult(true)\n }\n }\n collectBoundaryTouchEdge(de, opCode, edges) {\n const label = de.getLabel()\n if (de.isLineEdge()) return null\n if (de.isVisited()) return null\n if (de.isInteriorAreaEdge()) return null\n if (de.getEdge().isInResult()) return null\n Assert.isTrue(!(de.isInResult() || de.getSym().isInResult()) || !de.getEdge().isInResult())\n if (OverlayOp.isResultOfOp(label, opCode) && opCode === OverlayOp.INTERSECTION) {\n edges.add(de.getEdge())\n de.setVisitedEdge(true)\n }\n }\n}\n","import ArrayList from '../../../../../java/util/ArrayList'\nimport OverlayOp from './OverlayOp'\nexport default class PointBuilder {\n constructor() {\n PointBuilder.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._op = null\n this._geometryFactory = null\n this._resultPointList = new ArrayList()\n const op = arguments[0], geometryFactory = arguments[1], ptLocator = arguments[2]\n this._op = op\n this._geometryFactory = geometryFactory\n }\n filterCoveredNodeToPoint(n) {\n const coord = n.getCoordinate()\n if (!this._op.isCoveredByLA(coord)) {\n const pt = this._geometryFactory.createPoint(coord)\n this._resultPointList.add(pt)\n }\n }\n extractNonCoveredResultNodes(opCode) {\n for (let nodeit = this._op.getGraph().getNodes().iterator(); nodeit.hasNext(); ) {\n const n = nodeit.next()\n if (n.isInResult()) continue\n if (n.isIncidentEdgeInResult()) continue\n if (n.getEdges().getDegree() === 0 || opCode === OverlayOp.INTERSECTION) {\n const label = n.getLabel()\n if (OverlayOp.isResultOfOp(label, opCode)) \n this.filterCoveredNodeToPoint(n)\n \n }\n }\n }\n build(opCode) {\n this.extractNonCoveredResultNodes(opCode)\n return this._resultPointList\n }\n}\n","import Double from '../../../../java/lang/Double'\nimport Long from '../../../../java/lang/Long'\nexport default class CommonBits {\n constructor() {\n this._isFirst = true\n this._commonMantissaBitsCount = 53\n this._commonBits = new Long()\n this._commonSignExp = null\n }\n\n getCommon() {\n return Double.longBitsToDouble(this._commonBits)\n }\n\n add(num) {\n const numBits = Double.doubleToLongBits(num)\n if (this._isFirst) {\n this._commonBits = numBits\n this._commonSignExp = CommonBits.signExpBits(this._commonBits)\n this._isFirst = false\n return null\n }\n const numSignExp = CommonBits.signExpBits(numBits)\n if (numSignExp !== this._commonSignExp) {\n this._commonBits.high = 0 | 0\n this._commonBits.low = 0 | 0\n return null\n }\n this._commonMantissaBitsCount = CommonBits.numCommonMostSigMantissaBits(this._commonBits, numBits)\n this._commonBits = CommonBits.zeroLowerBits(this._commonBits, 64 - (12 + this._commonMantissaBitsCount))\n }\n\n toString() {\n if (arguments.length === 1) {\n const bits = arguments[0]\n const x = Double.longBitsToDouble(bits)\n const numStr = Long.toBinaryString(bits)\n const padStr = '0000000000000000000000000000000000000000000000000000000000000000' + numStr\n const bitStr = padStr.substring(padStr.length - 64)\n const str = bitStr.substring(0, 1) + ' ' + bitStr.substring(1, 12) + '(exp) ' + bitStr.substring(12) + ' [ ' + x + ' ]'\n return str\n }\n }\n\n getClass() {\n return CommonBits\n }\n\n get interfaces_() {\n return []\n }\n\n static getBit(bits, i) {\n const mask = (1 << (i % 32))\n if (i < 32) return (bits.low & mask) !== 0 ? 1 : 0\n\n return (bits.high & mask) !== 0 ? 1 : 0\n }\n\n static signExpBits(num) {\n return num.high >>> 20\n }\n\n static zeroLowerBits(bits, nBits) {\n let prop = 'low'\n if (nBits > 32) {\n bits.low = 0 | 0\n nBits %= 32\n prop = 'high'\n }\n if (nBits > 0) {\n const mask = (nBits < 32) ? (~((1 << nBits) - 1)) : 0\n bits[prop] &= mask\n }\n return bits\n }\n\n static numCommonMostSigMantissaBits(num1, num2) {\n let count = 0\n for (let i = 52; i >= 0; i--) {\n if (CommonBits.getBit(num1, i) !== CommonBits.getBit(num2, i)) return count\n count++\n }\n return 52\n }\n}\n","import CommonBits from './CommonBits'\nimport CoordinateFilter from '../geom/CoordinateFilter'\nimport Coordinate from '../geom/Coordinate'\nimport CoordinateSequenceFilter from '../geom/CoordinateSequenceFilter'\nexport default class CommonBitsRemover {\n constructor() {\n CommonBitsRemover.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._commonCoord = null\n this._ccFilter = new CommonCoordinateFilter()\n }\n addCommonBits(geom) {\n const trans = new Translater(this._commonCoord)\n geom.apply(trans)\n geom.geometryChanged()\n }\n removeCommonBits(geom) {\n if (this._commonCoord.x === 0.0 && this._commonCoord.y === 0.0) return geom\n const invCoord = new Coordinate(this._commonCoord)\n invCoord.x = -invCoord.x\n invCoord.y = -invCoord.y\n const trans = new Translater(invCoord)\n geom.apply(trans)\n geom.geometryChanged()\n return geom\n }\n getCommonCoordinate() {\n return this._commonCoord\n }\n add(geom) {\n geom.apply(this._ccFilter)\n this._commonCoord = this._ccFilter.getCommonCoordinate()\n }\n}\nclass CommonCoordinateFilter {\n constructor() {\n CommonCoordinateFilter.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._commonBitsX = new CommonBits()\n this._commonBitsY = new CommonBits()\n }\n filter(coord) {\n this._commonBitsX.add(coord.x)\n this._commonBitsY.add(coord.y)\n }\n getCommonCoordinate() {\n return new Coordinate(this._commonBitsX.getCommon(), this._commonBitsY.getCommon())\n }\n get interfaces_() {\n return [CoordinateFilter]\n }\n}\nclass Translater {\n constructor() {\n Translater.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this.trans = null\n const trans = arguments[0]\n this.trans = trans\n }\n filter(seq, i) {\n const xp = seq.getOrdinate(i, 0) + this.trans.x\n const yp = seq.getOrdinate(i, 1) + this.trans.y\n seq.setOrdinate(i, 0, xp)\n seq.setOrdinate(i, 1, yp)\n }\n isDone() {\n return false\n }\n isGeometryChanged() {\n return true\n }\n get interfaces_() {\n return [CoordinateSequenceFilter]\n }\n}\nCommonBitsRemover.CommonCoordinateFilter = CommonCoordinateFilter\nCommonBitsRemover.Translater = Translater\n","import GeometrySnapper from './GeometrySnapper'\nimport System from '../../../../../../java/lang/System'\nimport CommonBitsRemover from '../../../precision/CommonBitsRemover'\nimport OverlayOp from '../OverlayOp'\nexport default class SnapOverlayOp {\n constructor() {\n SnapOverlayOp.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._geom = new Array(2).fill(null)\n this._snapTolerance = null\n this._cbr = null\n const g1 = arguments[0], g2 = arguments[1]\n this._geom[0] = g1\n this._geom[1] = g2\n this.computeSnapTolerance()\n }\n static overlayOp(g0, g1, opCode) {\n const op = new SnapOverlayOp(g0, g1)\n return op.getResultGeometry(opCode)\n }\n static union(g0, g1) {\n return SnapOverlayOp.overlayOp(g0, g1, OverlayOp.UNION)\n }\n static intersection(g0, g1) {\n return SnapOverlayOp.overlayOp(g0, g1, OverlayOp.INTERSECTION)\n }\n static symDifference(g0, g1) {\n return SnapOverlayOp.overlayOp(g0, g1, OverlayOp.SYMDIFFERENCE)\n }\n static difference(g0, g1) {\n return SnapOverlayOp.overlayOp(g0, g1, OverlayOp.DIFFERENCE)\n }\n selfSnap(geom) {\n const snapper0 = new GeometrySnapper(geom)\n const snapGeom = snapper0.snapTo(geom, this._snapTolerance)\n return snapGeom\n }\n removeCommonBits(geom) {\n this._cbr = new CommonBitsRemover()\n this._cbr.add(geom[0])\n this._cbr.add(geom[1])\n const remGeom = new Array(2).fill(null)\n remGeom[0] = this._cbr.removeCommonBits(geom[0].copy())\n remGeom[1] = this._cbr.removeCommonBits(geom[1].copy())\n return remGeom\n }\n prepareResult(geom) {\n this._cbr.addCommonBits(geom)\n return geom\n }\n getResultGeometry(opCode) {\n const prepGeom = this.snap(this._geom)\n const result = OverlayOp.overlayOp(prepGeom[0], prepGeom[1], opCode)\n return this.prepareResult(result)\n }\n checkValid(g) {\n if (!g.isValid()) \n System.out.println('Snapped geometry is invalid')\n \n }\n computeSnapTolerance() {\n this._snapTolerance = GeometrySnapper.computeOverlaySnapTolerance(this._geom[0], this._geom[1])\n }\n snap(geom) {\n const remGeom = this.removeCommonBits(geom)\n const snapGeom = GeometrySnapper.snap(remGeom[0], remGeom[1], this._snapTolerance)\n return snapGeom\n }\n}\n","import SnapOverlayOp from './SnapOverlayOp'\nimport RuntimeException from '../../../../../../java/lang/RuntimeException'\nimport OverlayOp from '../OverlayOp'\nexport default class SnapIfNeededOverlayOp {\n constructor() {\n SnapIfNeededOverlayOp.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._geom = new Array(2).fill(null)\n const g1 = arguments[0], g2 = arguments[1]\n this._geom[0] = g1\n this._geom[1] = g2\n }\n static overlayOp(g0, g1, opCode) {\n const op = new SnapIfNeededOverlayOp(g0, g1)\n return op.getResultGeometry(opCode)\n }\n static union(g0, g1) {\n return SnapIfNeededOverlayOp.overlayOp(g0, g1, OverlayOp.UNION)\n }\n static intersection(g0, g1) {\n return SnapIfNeededOverlayOp.overlayOp(g0, g1, OverlayOp.INTERSECTION)\n }\n static symDifference(g0, g1) {\n return SnapIfNeededOverlayOp.overlayOp(g0, g1, OverlayOp.SYMDIFFERENCE)\n }\n static difference(g0, g1) {\n return SnapIfNeededOverlayOp.overlayOp(g0, g1, OverlayOp.DIFFERENCE)\n }\n getResultGeometry(opCode) {\n let result = null\n let isSuccess = false\n let savedException = null\n try {\n result = OverlayOp.overlayOp(this._geom[0], this._geom[1], opCode)\n const isValid = true\n if (isValid) isSuccess = true\n } catch (ex) {\n if (ex instanceof RuntimeException) \n savedException = ex\n else throw ex\n } finally {}\n if (!isSuccess) \n try {\n result = SnapOverlayOp.overlayOp(this._geom[0], this._geom[1], opCode)\n } catch (ex) {\n if (ex instanceof RuntimeException) \n throw savedException\n else throw ex\n } finally {}\n \n return result\n }\n}\n","import BoundaryNodeRule from '../algorithm/BoundaryNodeRule'\nimport GeometryGraph from '../geomgraph/GeometryGraph'\nimport RobustLineIntersector from '../algorithm/RobustLineIntersector'\nexport default class GeometryGraphOperation {\n constructor() {\n GeometryGraphOperation.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._li = new RobustLineIntersector()\n this._resultPrecisionModel = null\n this._arg = null\n if (arguments.length === 1) {\n const g0 = arguments[0]\n this.setComputationPrecision(g0.getPrecisionModel())\n this._arg = new Array(1).fill(null)\n this._arg[0] = new GeometryGraph(0, g0)\n \n } else if (arguments.length === 2) {\n const g0 = arguments[0], g1 = arguments[1]\n GeometryGraphOperation.constructor_.call(this, g0, g1, BoundaryNodeRule.OGC_SFS_BOUNDARY_RULE)\n } else if (arguments.length === 3) {\n const g0 = arguments[0], g1 = arguments[1], boundaryNodeRule = arguments[2]\n if (g0.getPrecisionModel().compareTo(g1.getPrecisionModel()) >= 0) this.setComputationPrecision(g0.getPrecisionModel()); else this.setComputationPrecision(g1.getPrecisionModel())\n this._arg = new Array(2).fill(null)\n this._arg[0] = new GeometryGraph(0, g0, boundaryNodeRule)\n this._arg[1] = new GeometryGraph(1, g1, boundaryNodeRule)\n }\n }\n getArgGeometry(i) {\n return this._arg[i].getGeometry()\n }\n setComputationPrecision(pm) {\n this._resultPrecisionModel = pm\n this._li.setPrecisionModel(this._resultPrecisionModel)\n }\n}\n","import PointLocator from '../../algorithm/PointLocator'\nimport Location from '../../geom/Location'\nimport EdgeNodingValidator from '../../geomgraph/EdgeNodingValidator'\nimport GeometryCollectionMapper from '../../geom/util/GeometryCollectionMapper'\nimport PolygonBuilder from './PolygonBuilder'\nimport Position from '../../geomgraph/Position'\nimport IllegalArgumentException from '../../../../../java/lang/IllegalArgumentException'\nimport LineBuilder from './LineBuilder'\nimport PointBuilder from './PointBuilder'\nimport SnapIfNeededOverlayOp from './snap/SnapIfNeededOverlayOp'\nimport Label from '../../geomgraph/Label'\nimport OverlayNodeFactory from './OverlayNodeFactory'\nimport GeometryGraphOperation from '../GeometryGraphOperation'\nimport EdgeList from '../../geomgraph/EdgeList'\nimport ArrayList from '../../../../../java/util/ArrayList'\nimport Assert from '../../util/Assert'\nimport PlanarGraph from '../../geomgraph/PlanarGraph'\nexport default class OverlayOp extends GeometryGraphOperation {\n constructor() {\n super()\n OverlayOp.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._ptLocator = new PointLocator()\n this._geomFact = null\n this._resultGeom = null\n this._graph = null\n this._edgeList = new EdgeList()\n this._resultPolyList = new ArrayList()\n this._resultLineList = new ArrayList()\n this._resultPointList = new ArrayList()\n const g0 = arguments[0], g1 = arguments[1]\n GeometryGraphOperation.constructor_.call(this, g0, g1)\n this._graph = new PlanarGraph(new OverlayNodeFactory())\n this._geomFact = g0.getFactory()\n }\n static overlayOp(geom0, geom1, opCode) {\n const gov = new OverlayOp(geom0, geom1)\n const geomOv = gov.getResultGeometry(opCode)\n return geomOv\n }\n static union(geom, other) {\n if (geom.isEmpty() || other.isEmpty()) {\n if (geom.isEmpty() && other.isEmpty()) return OverlayOp.createEmptyResult(OverlayOp.UNION, geom, other, geom.getFactory())\n if (geom.isEmpty()) return other.copy()\n if (other.isEmpty()) return geom.copy()\n }\n if (geom.isGeometryCollection() || other.isGeometryCollection()) throw new IllegalArgumentException('This method does not support GeometryCollection arguments')\n return SnapIfNeededOverlayOp.overlayOp(geom, other, OverlayOp.UNION)\n }\n static intersection(geom, other) {\n if (geom.isEmpty() || other.isEmpty()) return OverlayOp.createEmptyResult(OverlayOp.INTERSECTION, geom, other, geom.getFactory())\n if (geom.isGeometryCollection()) {\n const g2 = other\n return GeometryCollectionMapper.map(geom, new (class {\n get interfaces_() {\n return [MapOp]\n }\n map(g) {\n return OverlayOp.intersection(g, g2)\n }\n })())\n }\n return SnapIfNeededOverlayOp.overlayOp(geom, other, OverlayOp.INTERSECTION)\n }\n static symDifference(geom, other) {\n if (geom.isEmpty() || other.isEmpty()) {\n if (geom.isEmpty() && other.isEmpty()) return OverlayOp.createEmptyResult(OverlayOp.SYMDIFFERENCE, geom, other, geom.getFactory())\n if (geom.isEmpty()) return other.copy()\n if (other.isEmpty()) return geom.copy()\n }\n if (geom.isGeometryCollection() || other.isGeometryCollection()) throw new IllegalArgumentException('This method does not support GeometryCollection arguments')\n return SnapIfNeededOverlayOp.overlayOp(geom, other, OverlayOp.SYMDIFFERENCE)\n }\n static resultDimension(opCode, g0, g1) {\n const dim0 = g0.getDimension()\n const dim1 = g1.getDimension()\n let resultDimension = -1\n switch (opCode) {\n case OverlayOp.INTERSECTION:\n resultDimension = Math.min(dim0, dim1)\n break\n case OverlayOp.UNION:\n resultDimension = Math.max(dim0, dim1)\n break\n case OverlayOp.DIFFERENCE:\n resultDimension = dim0\n break\n case OverlayOp.SYMDIFFERENCE:\n resultDimension = Math.max(dim0, dim1)\n break\n }\n return resultDimension\n }\n static createEmptyResult(overlayOpCode, a, b, geomFact) {\n let result = null\n const resultDim = OverlayOp.resultDimension(overlayOpCode, a, b)\n return result = geomFact.createEmpty(resultDim)\n }\n static difference(geom, other) {\n if (geom.isEmpty()) return OverlayOp.createEmptyResult(OverlayOp.DIFFERENCE, geom, other, geom.getFactory())\n if (other.isEmpty()) return geom.copy()\n if (geom.isGeometryCollection() || other.isGeometryCollection()) throw new IllegalArgumentException('This method does not support GeometryCollection arguments')\n return SnapIfNeededOverlayOp.overlayOp(geom, other, OverlayOp.DIFFERENCE)\n }\n static isResultOfOp() {\n if (arguments.length === 2) {\n const label = arguments[0], opCode = arguments[1]\n const loc0 = label.getLocation(0)\n const loc1 = label.getLocation(1)\n return OverlayOp.isResultOfOp(loc0, loc1, opCode)\n } else if (arguments.length === 3) {\n let loc0 = arguments[0], loc1 = arguments[1], overlayOpCode = arguments[2]\n if (loc0 === Location.BOUNDARY) loc0 = Location.INTERIOR\n if (loc1 === Location.BOUNDARY) loc1 = Location.INTERIOR\n switch (overlayOpCode) {\n case OverlayOp.INTERSECTION:\n return loc0 === Location.INTERIOR && loc1 === Location.INTERIOR\n case OverlayOp.UNION:\n return loc0 === Location.INTERIOR || loc1 === Location.INTERIOR\n case OverlayOp.DIFFERENCE:\n return loc0 === Location.INTERIOR && loc1 !== Location.INTERIOR\n case OverlayOp.SYMDIFFERENCE:\n return loc0 === Location.INTERIOR && loc1 !== Location.INTERIOR || loc0 !== Location.INTERIOR && loc1 === Location.INTERIOR\n }\n return false\n }\n }\n insertUniqueEdge(e) {\n const existingEdge = this._edgeList.findEqualEdge(e)\n if (existingEdge !== null) {\n const existingLabel = existingEdge.getLabel()\n let labelToMerge = e.getLabel()\n if (!existingEdge.isPointwiseEqual(e)) {\n labelToMerge = new Label(e.getLabel())\n labelToMerge.flip()\n }\n const depth = existingEdge.getDepth()\n if (depth.isNull()) \n depth.add(existingLabel)\n \n depth.add(labelToMerge)\n existingLabel.merge(labelToMerge)\n } else {\n this._edgeList.add(e)\n }\n }\n getGraph() {\n return this._graph\n }\n cancelDuplicateResultEdges() {\n for (let it = this._graph.getEdgeEnds().iterator(); it.hasNext(); ) {\n const de = it.next()\n const sym = de.getSym()\n if (de.isInResult() && sym.isInResult()) {\n de.setInResult(false)\n sym.setInResult(false)\n }\n }\n }\n isCoveredByLA(coord) {\n if (this.isCovered(coord, this._resultLineList)) return true\n if (this.isCovered(coord, this._resultPolyList)) return true\n return false\n }\n computeGeometry(resultPointList, resultLineList, resultPolyList, opcode) {\n const geomList = new ArrayList()\n geomList.addAll(resultPointList)\n geomList.addAll(resultLineList)\n geomList.addAll(resultPolyList)\n if (geomList.isEmpty()) return OverlayOp.createEmptyResult(opcode, this._arg[0].getGeometry(), this._arg[1].getGeometry(), this._geomFact)\n return this._geomFact.buildGeometry(geomList)\n }\n mergeSymLabels() {\n for (let nodeit = this._graph.getNodes().iterator(); nodeit.hasNext(); ) {\n const node = nodeit.next()\n node.getEdges().mergeSymLabels()\n }\n }\n isCovered(coord, geomList) {\n for (let it = geomList.iterator(); it.hasNext(); ) {\n const geom = it.next()\n const loc = this._ptLocator.locate(coord, geom)\n if (loc !== Location.EXTERIOR) return true\n }\n return false\n }\n replaceCollapsedEdges() {\n const newEdges = new ArrayList()\n for (let it = this._edgeList.iterator(); it.hasNext(); ) {\n const e = it.next()\n if (e.isCollapsed()) {\n it.remove()\n newEdges.add(e.getCollapsedEdge())\n }\n }\n this._edgeList.addAll(newEdges)\n }\n updateNodeLabelling() {\n for (let nodeit = this._graph.getNodes().iterator(); nodeit.hasNext(); ) {\n const node = nodeit.next()\n const lbl = node.getEdges().getLabel()\n node.getLabel().merge(lbl)\n }\n }\n getResultGeometry(overlayOpCode) {\n this.computeOverlay(overlayOpCode)\n return this._resultGeom\n }\n insertUniqueEdges(edges) {\n for (let i = edges.iterator(); i.hasNext(); ) {\n const e = i.next()\n this.insertUniqueEdge(e)\n }\n }\n computeOverlay(opCode) {\n this.copyPoints(0)\n this.copyPoints(1)\n this._arg[0].computeSelfNodes(this._li, false)\n this._arg[1].computeSelfNodes(this._li, false)\n this._arg[0].computeEdgeIntersections(this._arg[1], this._li, true)\n const baseSplitEdges = new ArrayList()\n this._arg[0].computeSplitEdges(baseSplitEdges)\n this._arg[1].computeSplitEdges(baseSplitEdges)\n const splitEdges = baseSplitEdges\n this.insertUniqueEdges(baseSplitEdges)\n this.computeLabelsFromDepths()\n this.replaceCollapsedEdges()\n EdgeNodingValidator.checkValid(this._edgeList.getEdges())\n this._graph.addEdges(this._edgeList.getEdges())\n this.computeLabelling()\n this.labelIncompleteNodes()\n this.findResultAreaEdges(opCode)\n this.cancelDuplicateResultEdges()\n const polyBuilder = new PolygonBuilder(this._geomFact)\n polyBuilder.add(this._graph)\n this._resultPolyList = polyBuilder.getPolygons()\n const lineBuilder = new LineBuilder(this, this._geomFact, this._ptLocator)\n this._resultLineList = lineBuilder.build(opCode)\n const pointBuilder = new PointBuilder(this, this._geomFact, this._ptLocator)\n this._resultPointList = pointBuilder.build(opCode)\n this._resultGeom = this.computeGeometry(this._resultPointList, this._resultLineList, this._resultPolyList, opCode)\n }\n labelIncompleteNode(n, targetIndex) {\n const loc = this._ptLocator.locate(n.getCoordinate(), this._arg[targetIndex].getGeometry())\n n.getLabel().setLocation(targetIndex, loc)\n }\n copyPoints(argIndex) {\n for (let i = this._arg[argIndex].getNodeIterator(); i.hasNext(); ) {\n const graphNode = i.next()\n const newNode = this._graph.addNode(graphNode.getCoordinate())\n newNode.setLabel(argIndex, graphNode.getLabel().getLocation(argIndex))\n }\n }\n findResultAreaEdges(opCode) {\n for (let it = this._graph.getEdgeEnds().iterator(); it.hasNext(); ) {\n const de = it.next()\n const label = de.getLabel()\n if (label.isArea() && !de.isInteriorAreaEdge() && OverlayOp.isResultOfOp(label.getLocation(0, Position.RIGHT), label.getLocation(1, Position.RIGHT), opCode)) \n de.setInResult(true)\n \n }\n }\n computeLabelsFromDepths() {\n for (let it = this._edgeList.iterator(); it.hasNext(); ) {\n const e = it.next()\n const lbl = e.getLabel()\n const depth = e.getDepth()\n if (!depth.isNull()) {\n depth.normalize()\n for (let i = 0; i < 2; i++) \n if (!lbl.isNull(i) && lbl.isArea() && !depth.isNull(i)) \n if (depth.getDelta(i) === 0) {\n lbl.toLine(i)\n } else {\n Assert.isTrue(!depth.isNull(i, Position.LEFT), 'depth of LEFT side has not been initialized')\n lbl.setLocation(i, Position.LEFT, depth.getLocation(i, Position.LEFT))\n Assert.isTrue(!depth.isNull(i, Position.RIGHT), 'depth of RIGHT side has not been initialized')\n lbl.setLocation(i, Position.RIGHT, depth.getLocation(i, Position.RIGHT))\n }\n \n \n }\n }\n }\n computeLabelling() {\n for (let nodeit = this._graph.getNodes().iterator(); nodeit.hasNext(); ) {\n const node = nodeit.next()\n node.getEdges().computeLabelling(this._arg)\n }\n this.mergeSymLabels()\n this.updateNodeLabelling()\n }\n labelIncompleteNodes() {\n for (let ni = this._graph.getNodes().iterator(); ni.hasNext(); ) {\n const n = ni.next()\n const label = n.getLabel()\n if (n.isIsolated()) \n if (label.isNull(0)) this.labelIncompleteNode(n, 0); else this.labelIncompleteNode(n, 1)\n \n n.getEdges().updateLabelling(label)\n }\n }\n isCoveredByA(coord) {\n if (this.isCovered(coord, this._resultPolyList)) return true\n return false\n }\n}\nOverlayOp.INTERSECTION = 1\nOverlayOp.UNION = 2\nOverlayOp.DIFFERENCE = 3\nOverlayOp.SYMDIFFERENCE = 4\n","import DirectedEdge from '../../planargraph/DirectedEdge'\nexport default class PolygonizeDirectedEdge extends DirectedEdge {\n constructor() {\n super()\n PolygonizeDirectedEdge.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._edgeRing = null\n this._next = null\n this._label = -1\n const from = arguments[0], to = arguments[1], directionPt = arguments[2], edgeDirection = arguments[3]\n DirectedEdge.constructor_.call(this, from, to, directionPt, edgeDirection)\n }\n getNext() {\n return this._next\n }\n isInRing() {\n return this._edgeRing !== null\n }\n setRing(edgeRing) {\n this._edgeRing = edgeRing\n }\n setLabel(label) {\n this._label = label\n }\n getLabel() {\n return this._label\n }\n setNext(next) {\n this._next = next\n }\n getRing() {\n return this._edgeRing\n }\n}\n","import Edge from '../../planargraph/Edge'\nexport default class PolygonizeEdge extends Edge {\n constructor() {\n super()\n PolygonizeEdge.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._line = null\n const line = arguments[0]\n this._line = line\n }\n getLine() {\n return this._line\n }\n}\n","import Location from '../../geom/Location'\nimport GeometryFactory from '../../geom/GeometryFactory'\nimport Position from '../../geomgraph/Position'\nimport Polygon from '../../geom/Polygon'\nimport MultiPolygon from '../../geom/MultiPolygon'\nimport MaximalEdgeRing from '../overlay/MaximalEdgeRing'\nimport OverlayNodeFactory from '../overlay/OverlayNodeFactory'\nimport ArrayList from '../../../../../java/util/ArrayList'\nimport Assert from '../../util/Assert'\nimport PlanarGraph from '../../geomgraph/PlanarGraph'\nexport default class ConnectedInteriorTester {\n constructor() {\n ConnectedInteriorTester.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._geometryFactory = new GeometryFactory()\n this._geomGraph = null\n this._disconnectedRingcoord = null\n const geomGraph = arguments[0]\n this._geomGraph = geomGraph\n }\n static findDifferentPoint(coord, pt) {\n for (let i = 0; i < coord.length; i++) \n if (!coord[i].equals(pt)) return coord[i]\n \n return null\n }\n visitInteriorRing(ring, graph) {\n if (ring.isEmpty()) return null\n const pts = ring.getCoordinates()\n const pt0 = pts[0]\n const pt1 = ConnectedInteriorTester.findDifferentPoint(pts, pt0)\n const e = graph.findEdgeInSameDirection(pt0, pt1)\n const de = graph.findEdgeEnd(e)\n let intDe = null\n if (de.getLabel().getLocation(0, Position.RIGHT) === Location.INTERIOR) \n intDe = de\n else if (de.getSym().getLabel().getLocation(0, Position.RIGHT) === Location.INTERIOR) \n intDe = de.getSym()\n \n Assert.isTrue(intDe !== null, 'unable to find dirEdge with Interior on RHS')\n this.visitLinkedDirectedEdges(intDe)\n }\n visitShellInteriors(g, graph) {\n if (g instanceof Polygon) {\n const p = g\n this.visitInteriorRing(p.getExteriorRing(), graph)\n }\n if (g instanceof MultiPolygon) {\n const mp = g\n for (let i = 0; i < mp.getNumGeometries(); i++) {\n const p = mp.getGeometryN(i)\n this.visitInteriorRing(p.getExteriorRing(), graph)\n }\n }\n }\n getCoordinate() {\n return this._disconnectedRingcoord\n }\n setInteriorEdgesInResult(graph) {\n for (let it = graph.getEdgeEnds().iterator(); it.hasNext(); ) {\n const de = it.next()\n if (de.getLabel().getLocation(0, Position.RIGHT) === Location.INTERIOR) \n de.setInResult(true)\n \n }\n }\n visitLinkedDirectedEdges(start) {\n const startDe = start\n let de = start\n do {\n Assert.isTrue(de !== null, 'found null Directed Edge')\n de.setVisited(true)\n de = de.getNext()\n } while (de !== startDe)\n }\n buildEdgeRings(dirEdges) {\n const edgeRings = new ArrayList()\n for (let it = dirEdges.iterator(); it.hasNext(); ) {\n const de = it.next()\n if (de.isInResult() && de.getEdgeRing() === null) {\n const er = new MaximalEdgeRing(de, this._geometryFactory)\n er.linkDirectedEdgesForMinimalEdgeRings()\n const minEdgeRings = er.buildMinimalRings()\n edgeRings.addAll(minEdgeRings)\n }\n }\n return edgeRings\n }\n hasUnvisitedShellEdge(edgeRings) {\n for (let i = 0; i < edgeRings.size(); i++) {\n const er = edgeRings.get(i)\n if (er.isHole()) continue\n const edges = er.getEdges()\n let de = edges.get(0)\n if (de.getLabel().getLocation(0, Position.RIGHT) !== Location.INTERIOR) continue\n for (let j = 0; j < edges.size(); j++) {\n de = edges.get(j)\n if (!de.isVisited()) {\n this._disconnectedRingcoord = de.getCoordinate()\n return true\n }\n }\n }\n return false\n }\n isInteriorsConnected() {\n const splitEdges = new ArrayList()\n this._geomGraph.computeSplitEdges(splitEdges)\n const graph = new PlanarGraph(new OverlayNodeFactory())\n graph.addEdges(splitEdges)\n this.setInteriorEdgesInResult(graph)\n graph.linkResultDirectedEdges()\n const edgeRings = this.buildEdgeRings(graph.getEdgeEnds())\n this.visitShellInteriors(this._geomGraph.getGeometry(), graph)\n return !this.hasUnvisitedShellEdge(edgeRings)\n }\n}\n","import EdgeEnd from '../../geomgraph/EdgeEnd'\nimport Label from '../../geomgraph/Label'\nimport ArrayList from '../../../../../java/util/ArrayList'\nexport default class EdgeEndBuilder {\n createEdgeEndForNext(edge, l, eiCurr, eiNext) {\n const iNext = eiCurr.segmentIndex + 1\n if (iNext >= edge.getNumPoints() && eiNext === null) return null\n let pNext = edge.getCoordinate(iNext)\n if (eiNext !== null && eiNext.segmentIndex === eiCurr.segmentIndex) pNext = eiNext.coord\n const e = new EdgeEnd(edge, eiCurr.coord, pNext, new Label(edge.getLabel()))\n l.add(e)\n }\n createEdgeEndForPrev(edge, l, eiCurr, eiPrev) {\n let iPrev = eiCurr.segmentIndex\n if (eiCurr.dist === 0.0) {\n if (iPrev === 0) return null\n iPrev--\n }\n let pPrev = edge.getCoordinate(iPrev)\n if (eiPrev !== null && eiPrev.segmentIndex >= iPrev) pPrev = eiPrev.coord\n const label = new Label(edge.getLabel())\n label.flip()\n const e = new EdgeEnd(edge, eiCurr.coord, pPrev, label)\n l.add(e)\n }\n computeEdgeEnds() {\n if (arguments.length === 1) {\n const edges = arguments[0]\n const l = new ArrayList()\n for (let i = edges; i.hasNext(); ) {\n const e = i.next()\n this.computeEdgeEnds(e, l)\n }\n return l\n } else if (arguments.length === 2) {\n const edge = arguments[0], l = arguments[1]\n const eiList = edge.getEdgeIntersectionList()\n eiList.addEndpoints()\n const it = eiList.iterator()\n let eiPrev = null\n let eiCurr = null\n if (!it.hasNext()) return null\n let eiNext = it.next()\n do {\n eiPrev = eiCurr\n eiCurr = eiNext\n eiNext = null\n if (it.hasNext()) eiNext = it.next()\n if (eiCurr !== null) {\n this.createEdgeEndForPrev(edge, l, eiCurr, eiPrev)\n this.createEdgeEndForNext(edge, l, eiCurr, eiNext)\n }\n } while (eiCurr !== null)\n }\n }\n}\n","import Location from '../../geom/Location'\nimport EdgeEnd from '../../geomgraph/EdgeEnd'\nimport Position from '../../geomgraph/Position'\nimport GeometryGraph from '../../geomgraph/GeometryGraph'\nimport Label from '../../geomgraph/Label'\nimport ArrayList from '../../../../../java/util/ArrayList'\nimport Edge from '../../geomgraph/Edge'\nexport default class EdgeEndBundle extends EdgeEnd {\n constructor() {\n super()\n EdgeEndBundle.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._edgeEnds = new ArrayList()\n if (arguments.length === 1) {\n const e = arguments[0]\n EdgeEndBundle.constructor_.call(this, null, e)\n } else if (arguments.length === 2) {\n const boundaryNodeRule = arguments[0], e = arguments[1]\n EdgeEnd.constructor_.call(this, e.getEdge(), e.getCoordinate(), e.getDirectedCoordinate(), new Label(e.getLabel()))\n this.insert(e)\n }\n }\n insert(e) {\n this._edgeEnds.add(e)\n }\n print(out) {\n out.println('EdgeEndBundle--> Label: ' + this._label)\n for (let it = this.iterator(); it.hasNext(); ) {\n const ee = it.next()\n ee.print(out)\n out.println()\n }\n }\n iterator() {\n return this._edgeEnds.iterator()\n }\n getEdgeEnds() {\n return this._edgeEnds\n }\n computeLabelOn(geomIndex, boundaryNodeRule) {\n let boundaryCount = 0\n let foundInterior = false\n for (let it = this.iterator(); it.hasNext(); ) {\n const e = it.next()\n const loc = e.getLabel().getLocation(geomIndex)\n if (loc === Location.BOUNDARY) boundaryCount++\n if (loc === Location.INTERIOR) foundInterior = true\n }\n let loc = Location.NONE\n if (foundInterior) loc = Location.INTERIOR\n if (boundaryCount > 0) \n loc = GeometryGraph.determineBoundary(boundaryNodeRule, boundaryCount)\n \n this._label.setLocation(geomIndex, loc)\n }\n computeLabelSide(geomIndex, side) {\n for (let it = this.iterator(); it.hasNext(); ) {\n const e = it.next()\n if (e.getLabel().isArea()) {\n const loc = e.getLabel().getLocation(geomIndex, side)\n if (loc === Location.INTERIOR) {\n this._label.setLocation(geomIndex, side, Location.INTERIOR)\n return null\n } else if (loc === Location.EXTERIOR) {\n this._label.setLocation(geomIndex, side, Location.EXTERIOR)\n }\n }\n }\n }\n getLabel() {\n return this._label\n }\n computeLabelSides(geomIndex) {\n this.computeLabelSide(geomIndex, Position.LEFT)\n this.computeLabelSide(geomIndex, Position.RIGHT)\n }\n updateIM(im) {\n Edge.updateIM(this._label, im)\n }\n computeLabel(boundaryNodeRule) {\n let isArea = false\n for (let it = this.iterator(); it.hasNext(); ) {\n const e = it.next()\n if (e.getLabel().isArea()) isArea = true\n }\n if (isArea) this._label = new Label(Location.NONE, Location.NONE, Location.NONE); else this._label = new Label(Location.NONE)\n for (let i = 0; i < 2; i++) {\n this.computeLabelOn(i, boundaryNodeRule)\n if (isArea) this.computeLabelSides(i)\n }\n }\n}\n","import EdgeEndStar from '../../geomgraph/EdgeEndStar'\nimport EdgeEndBundle from './EdgeEndBundle'\nexport default class EdgeEndBundleStar extends EdgeEndStar {\n constructor() {\n super()\n }\n updateIM(im) {\n for (let it = this.iterator(); it.hasNext(); ) {\n const esb = it.next()\n esb.updateIM(im)\n }\n }\n insert(e) {\n let eb = this._edgeMap.get(e)\n if (eb === null) {\n eb = new EdgeEndBundle(e)\n this.insertEdgeEnd(e, eb)\n } else {\n eb.insert(e)\n }\n }\n}\n","import Node from '../../geomgraph/Node'\nexport default class RelateNode extends Node {\n constructor() {\n super()\n RelateNode.constructor_.apply(this, arguments)\n }\n static constructor_() {\n const coord = arguments[0], edges = arguments[1]\n Node.constructor_.call(this, coord, edges)\n }\n updateIMFromEdges(im) {\n this._edges.updateIM(im)\n }\n computeIM(im) {\n im.setAtLeastIfValid(this._label.getLocation(0), this._label.getLocation(1), 0)\n }\n}\n","import EdgeEndBundleStar from './EdgeEndBundleStar'\nimport RelateNode from './RelateNode'\nimport NodeFactory from '../../geomgraph/NodeFactory'\nexport default class RelateNodeFactory extends NodeFactory {\n constructor() {\n super()\n }\n createNode(coord) {\n return new RelateNode(coord, new EdgeEndBundleStar())\n }\n}\n","import Location from '../../geom/Location'\nimport EdgeEndBuilder from './EdgeEndBuilder'\nimport NodeMap from '../../geomgraph/NodeMap'\nimport RelateNodeFactory from './RelateNodeFactory'\nexport default class RelateNodeGraph {\n constructor() {\n RelateNodeGraph.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._nodes = new NodeMap(new RelateNodeFactory())\n }\n insertEdgeEnds(ee) {\n for (let i = ee.iterator(); i.hasNext(); ) {\n const e = i.next()\n this._nodes.add(e)\n }\n }\n getNodeIterator() {\n return this._nodes.iterator()\n }\n copyNodesAndLabels(geomGraph, argIndex) {\n for (let nodeIt = geomGraph.getNodeIterator(); nodeIt.hasNext(); ) {\n const graphNode = nodeIt.next()\n const newNode = this._nodes.addNode(graphNode.getCoordinate())\n newNode.setLabel(argIndex, graphNode.getLabel().getLocation(argIndex))\n }\n }\n build(geomGraph) {\n this.computeIntersectionNodes(geomGraph, 0)\n this.copyNodesAndLabels(geomGraph, 0)\n const eeBuilder = new EdgeEndBuilder()\n const eeList = eeBuilder.computeEdgeEnds(geomGraph.getEdgeIterator())\n this.insertEdgeEnds(eeList)\n }\n computeIntersectionNodes(geomGraph, argIndex) {\n for (let edgeIt = geomGraph.getEdgeIterator(); edgeIt.hasNext(); ) {\n const e = edgeIt.next()\n const eLoc = e.getLabel().getLocation(argIndex)\n for (let eiIt = e.getEdgeIntersectionList().iterator(); eiIt.hasNext(); ) {\n const ei = eiIt.next()\n const n = this._nodes.addNode(ei.coord)\n if (eLoc === Location.BOUNDARY) n.setLabelBoundary(argIndex); else \n if (n.getLabel().isNull(argIndex)) n.setLabel(argIndex, Location.INTERIOR)\n \n }\n }\n }\n}\n","import RelateNodeGraph from '../relate/RelateNodeGraph'\nimport RobustLineIntersector from '../../algorithm/RobustLineIntersector'\nexport default class ConsistentAreaTester {\n constructor() {\n ConsistentAreaTester.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._li = new RobustLineIntersector()\n this._geomGraph = null\n this._nodeGraph = new RelateNodeGraph()\n this._invalidPoint = null\n const geomGraph = arguments[0]\n this._geomGraph = geomGraph\n }\n isNodeEdgeAreaLabelsConsistent() {\n for (let nodeIt = this._nodeGraph.getNodeIterator(); nodeIt.hasNext(); ) {\n const node = nodeIt.next()\n if (!node.getEdges().isAreaLabelsConsistent(this._geomGraph)) {\n this._invalidPoint = node.getCoordinate().copy()\n return false\n }\n }\n return true\n }\n getInvalidPoint() {\n return this._invalidPoint\n }\n hasDuplicateRings() {\n for (let nodeIt = this._nodeGraph.getNodeIterator(); nodeIt.hasNext(); ) {\n const node = nodeIt.next()\n for (let i = node.getEdges().iterator(); i.hasNext(); ) {\n const eeb = i.next()\n if (eeb.getEdgeEnds().size() > 1) {\n this._invalidPoint = eeb.getEdge().getCoordinate(0)\n return true\n }\n }\n }\n return false\n }\n isNodeConsistentArea() {\n const intersector = this._geomGraph.computeSelfNodes(this._li, true, true)\n if (intersector.hasProperIntersection()) {\n this._invalidPoint = intersector.getProperIntersectionPoint()\n return false\n }\n this._nodeGraph.build(this._geomGraph)\n return this.isNodeEdgeAreaLabelsConsistent()\n }\n}\n","import STRtree from '../../index/strtree/STRtree'\nimport IsValidOp from './IsValidOp'\nimport PointLocation from '../../algorithm/PointLocation'\nimport ArrayList from '../../../../../java/util/ArrayList'\nimport Envelope from '../../geom/Envelope'\nexport default class IndexedNestedRingTester {\n constructor() {\n IndexedNestedRingTester.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._graph = null\n this._rings = new ArrayList()\n this._totalEnv = new Envelope()\n this._index = null\n this._nestedPt = null\n const graph = arguments[0]\n this._graph = graph\n }\n buildIndex() {\n this._index = new STRtree()\n for (let i = 0; i < this._rings.size(); i++) {\n const ring = this._rings.get(i)\n const env = ring.getEnvelopeInternal()\n this._index.insert(env, ring)\n }\n }\n getNestedPoint() {\n return this._nestedPt\n }\n isNonNested() {\n this.buildIndex()\n for (let i = 0; i < this._rings.size(); i++) {\n const innerRing = this._rings.get(i)\n const innerRingPts = innerRing.getCoordinates()\n const results = this._index.query(innerRing.getEnvelopeInternal())\n for (let j = 0; j < results.size(); j++) {\n const searchRing = results.get(j)\n const searchRingPts = searchRing.getCoordinates()\n if (innerRing === searchRing) continue\n if (!innerRing.getEnvelopeInternal().intersects(searchRing.getEnvelopeInternal())) continue\n const innerRingPt = IsValidOp.findPtNotNode(innerRingPts, searchRing, this._graph)\n if (innerRingPt === null) continue\n const isInside = PointLocation.isInRing(innerRingPt, searchRingPts)\n if (isInside) {\n this._nestedPt = innerRingPt\n return false\n }\n }\n }\n return true\n }\n add(ring) {\n this._rings.add(ring)\n this._totalEnv.expandToInclude(ring.getEnvelopeInternal())\n }\n}\n","export default class TopologyValidationError {\n constructor() {\n TopologyValidationError.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._errorType = null\n this._pt = null\n if (arguments.length === 1) {\n const errorType = arguments[0]\n TopologyValidationError.constructor_.call(this, errorType, null)\n } else if (arguments.length === 2) {\n const errorType = arguments[0], pt = arguments[1]\n this._errorType = errorType\n if (pt !== null) this._pt = pt.copy()\n }\n }\n getErrorType() {\n return this._errorType\n }\n getMessage() {\n return TopologyValidationError.errMsg[this._errorType]\n }\n getCoordinate() {\n return this._pt\n }\n toString() {\n let locStr = ''\n if (this._pt !== null) locStr = ' at or near point ' + this._pt\n return this.getMessage() + locStr\n }\n}\nTopologyValidationError.ERROR = 0\nTopologyValidationError.REPEATED_POINT = 1\nTopologyValidationError.HOLE_OUTSIDE_SHELL = 2\nTopologyValidationError.NESTED_HOLES = 3\nTopologyValidationError.DISCONNECTED_INTERIOR = 4\nTopologyValidationError.SELF_INTERSECTION = 5\nTopologyValidationError.RING_SELF_INTERSECTION = 6\nTopologyValidationError.NESTED_SHELLS = 7\nTopologyValidationError.DUPLICATE_RINGS = 8\nTopologyValidationError.TOO_FEW_POINTS = 9\nTopologyValidationError.INVALID_COORDINATE = 10\nTopologyValidationError.RING_NOT_CLOSED = 11\nTopologyValidationError.errMsg = ['Topology Validation Error', 'Repeated Point', 'Hole lies outside shell', 'Holes are nested', 'Interior is disconnected', 'Self-intersection', 'Ring Self-intersection', 'Nested shells', 'Duplicate Rings', 'Too few distinct points in geometry component', 'Invalid Coordinate', 'Ring is not closed']\n","import Location from '../../geom/Location'\nimport TreeSet from '../../../../../java/util/TreeSet'\nimport LineString from '../../geom/LineString'\nimport Geometry from '../../geom/Geometry'\nimport ConnectedInteriorTester from './ConnectedInteriorTester'\nimport Coordinate from '../../geom/Coordinate'\nimport Point from '../../geom/Point'\nimport Polygon from '../../geom/Polygon'\nimport MultiPoint from '../../geom/MultiPoint'\nimport PointLocation from '../../algorithm/PointLocation'\nimport LinearRing from '../../geom/LinearRing'\nimport Double from '../../../../../java/lang/Double'\nimport GeometryGraph from '../../geomgraph/GeometryGraph'\nimport MultiPolygon from '../../geom/MultiPolygon'\nimport ConsistentAreaTester from './ConsistentAreaTester'\nimport GeometryCollection from '../../geom/GeometryCollection'\nimport UnsupportedOperationException from '../../../../../java/lang/UnsupportedOperationException'\nimport IndexedNestedRingTester from './IndexedNestedRingTester'\nimport RobustLineIntersector from '../../algorithm/RobustLineIntersector'\nimport TopologyValidationError from './TopologyValidationError'\nimport IndexedPointInAreaLocator from '../../algorithm/locate/IndexedPointInAreaLocator'\nimport Assert from '../../util/Assert'\nexport default class IsValidOp {\n constructor() {\n IsValidOp.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._parentGeometry = null\n this._isSelfTouchingRingFormingHoleValid = false\n this._validErr = null\n const parentGeometry = arguments[0]\n this._parentGeometry = parentGeometry\n }\n static findPtNotNode(testCoords, searchRing, graph) {\n const searchEdge = graph.findEdge(searchRing)\n const eiList = searchEdge.getEdgeIntersectionList()\n for (let i = 0; i < testCoords.length; i++) {\n const pt = testCoords[i]\n if (!eiList.isIntersection(pt)) return pt\n }\n return null\n }\n static isValid() {\n if (arguments[0] instanceof Geometry) {\n const geom = arguments[0]\n const isValidOp = new IsValidOp(geom)\n return isValidOp.isValid()\n } else if (arguments[0] instanceof Coordinate) {\n const coord = arguments[0]\n if (Double.isNaN(coord.x)) return false\n if (Double.isInfinite(coord.x)) return false\n if (Double.isNaN(coord.y)) return false\n if (Double.isInfinite(coord.y)) return false\n return true\n }\n }\n checkInvalidCoordinates() {\n if (arguments[0] instanceof Array) {\n const coords = arguments[0]\n for (let i = 0; i < coords.length; i++) \n if (!IsValidOp.isValid(coords[i])) {\n this._validErr = new TopologyValidationError(TopologyValidationError.INVALID_COORDINATE, coords[i])\n return null\n }\n \n } else if (arguments[0] instanceof Polygon) {\n const poly = arguments[0]\n this.checkInvalidCoordinates(poly.getExteriorRing().getCoordinates())\n if (this._validErr !== null) return null\n for (let i = 0; i < poly.getNumInteriorRing(); i++) {\n this.checkInvalidCoordinates(poly.getInteriorRingN(i).getCoordinates())\n if (this._validErr !== null) return null\n }\n }\n }\n checkHolesNotNested(p, graph) {\n if (p.getNumInteriorRing() <= 0) return null\n const nestedTester = new IndexedNestedRingTester(graph)\n for (let i = 0; i < p.getNumInteriorRing(); i++) {\n const innerHole = p.getInteriorRingN(i)\n if (innerHole.isEmpty()) continue\n nestedTester.add(innerHole)\n }\n const isNonNested = nestedTester.isNonNested()\n if (!isNonNested) \n this._validErr = new TopologyValidationError(TopologyValidationError.NESTED_HOLES, nestedTester.getNestedPoint())\n \n }\n checkConsistentArea(graph) {\n const cat = new ConsistentAreaTester(graph)\n const isValidArea = cat.isNodeConsistentArea()\n if (!isValidArea) {\n this._validErr = new TopologyValidationError(TopologyValidationError.SELF_INTERSECTION, cat.getInvalidPoint())\n return null\n }\n if (cat.hasDuplicateRings()) \n this._validErr = new TopologyValidationError(TopologyValidationError.DUPLICATE_RINGS, cat.getInvalidPoint())\n \n }\n isValid() {\n this.checkValid(this._parentGeometry)\n return this._validErr === null\n }\n checkShellInsideHole(shell, hole, graph) {\n const shellPts = shell.getCoordinates()\n const holePts = hole.getCoordinates()\n const shellPt = IsValidOp.findPtNotNode(shellPts, hole, graph)\n if (shellPt !== null) {\n const insideHole = PointLocation.isInRing(shellPt, holePts)\n if (!insideHole) \n return shellPt\n \n }\n const holePt = IsValidOp.findPtNotNode(holePts, shell, graph)\n if (holePt !== null) {\n const insideShell = PointLocation.isInRing(holePt, shellPts)\n if (insideShell) \n return holePt\n \n return null\n }\n Assert.shouldNeverReachHere('points in shell and hole appear to be equal')\n return null\n }\n checkNoSelfIntersectingRings(graph) {\n for (let i = graph.getEdgeIterator(); i.hasNext(); ) {\n const e = i.next()\n this.checkNoSelfIntersectingRing(e.getEdgeIntersectionList())\n if (this._validErr !== null) return null\n }\n }\n checkConnectedInteriors(graph) {\n const cit = new ConnectedInteriorTester(graph)\n if (!cit.isInteriorsConnected()) this._validErr = new TopologyValidationError(TopologyValidationError.DISCONNECTED_INTERIOR, cit.getCoordinate())\n }\n checkNoSelfIntersectingRing(eiList) {\n const nodeSet = new TreeSet()\n let isFirst = true\n for (let i = eiList.iterator(); i.hasNext(); ) {\n const ei = i.next()\n if (isFirst) {\n isFirst = false\n continue\n }\n if (nodeSet.contains(ei.coord)) {\n this._validErr = new TopologyValidationError(TopologyValidationError.RING_SELF_INTERSECTION, ei.coord)\n return null\n } else {\n nodeSet.add(ei.coord)\n }\n }\n }\n checkHolesInShell(p, graph) {\n if (p.getNumInteriorRing() <= 0) return null\n const shell = p.getExteriorRing()\n const isShellEmpty = shell.isEmpty()\n const pir = new IndexedPointInAreaLocator(shell)\n for (let i = 0; i < p.getNumInteriorRing(); i++) {\n const hole = p.getInteriorRingN(i)\n let holePt = null\n if (hole.isEmpty()) continue\n holePt = IsValidOp.findPtNotNode(hole.getCoordinates(), shell, graph)\n if (holePt === null) return null\n const outside = isShellEmpty || Location.EXTERIOR === pir.locate(holePt)\n if (outside) {\n this._validErr = new TopologyValidationError(TopologyValidationError.HOLE_OUTSIDE_SHELL, holePt)\n return null\n }\n }\n }\n checkTooFewPoints(graph) {\n if (graph.hasTooFewPoints()) {\n this._validErr = new TopologyValidationError(TopologyValidationError.TOO_FEW_POINTS, graph.getInvalidPoint())\n return null\n }\n }\n getValidationError() {\n this.checkValid(this._parentGeometry)\n return this._validErr\n }\n checkValid() {\n if (arguments[0] instanceof Point) {\n const g = arguments[0]\n this.checkInvalidCoordinates(g.getCoordinates())\n } else if (arguments[0] instanceof MultiPoint) {\n const g = arguments[0]\n this.checkInvalidCoordinates(g.getCoordinates())\n } else if (arguments[0] instanceof LinearRing) {\n const g = arguments[0]\n this.checkInvalidCoordinates(g.getCoordinates())\n if (this._validErr !== null) return null\n this.checkClosedRing(g)\n if (this._validErr !== null) return null\n const graph = new GeometryGraph(0, g)\n this.checkTooFewPoints(graph)\n if (this._validErr !== null) return null\n const li = new RobustLineIntersector()\n graph.computeSelfNodes(li, true, true)\n this.checkNoSelfIntersectingRings(graph)\n } else if (arguments[0] instanceof LineString) {\n const g = arguments[0]\n this.checkInvalidCoordinates(g.getCoordinates())\n if (this._validErr !== null) return null\n const graph = new GeometryGraph(0, g)\n this.checkTooFewPoints(graph)\n } else if (arguments[0] instanceof Polygon) {\n const g = arguments[0]\n this.checkInvalidCoordinates(g)\n if (this._validErr !== null) return null\n this.checkClosedRings(g)\n if (this._validErr !== null) return null\n const graph = new GeometryGraph(0, g)\n this.checkTooFewPoints(graph)\n if (this._validErr !== null) return null\n this.checkConsistentArea(graph)\n if (this._validErr !== null) return null\n if (!this._isSelfTouchingRingFormingHoleValid) {\n this.checkNoSelfIntersectingRings(graph)\n if (this._validErr !== null) return null\n }\n this.checkHolesInShell(g, graph)\n if (this._validErr !== null) return null\n this.checkHolesNotNested(g, graph)\n if (this._validErr !== null) return null\n this.checkConnectedInteriors(graph)\n } else if (arguments[0] instanceof MultiPolygon) {\n const g = arguments[0]\n for (let i = 0; i < g.getNumGeometries(); i++) {\n const p = g.getGeometryN(i)\n this.checkInvalidCoordinates(p)\n if (this._validErr !== null) return null\n this.checkClosedRings(p)\n if (this._validErr !== null) return null\n }\n const graph = new GeometryGraph(0, g)\n this.checkTooFewPoints(graph)\n if (this._validErr !== null) return null\n this.checkConsistentArea(graph)\n if (this._validErr !== null) return null\n if (!this._isSelfTouchingRingFormingHoleValid) {\n this.checkNoSelfIntersectingRings(graph)\n if (this._validErr !== null) return null\n }\n for (let i = 0; i < g.getNumGeometries(); i++) {\n const p = g.getGeometryN(i)\n this.checkHolesInShell(p, graph)\n if (this._validErr !== null) return null\n }\n for (let i = 0; i < g.getNumGeometries(); i++) {\n const p = g.getGeometryN(i)\n this.checkHolesNotNested(p, graph)\n if (this._validErr !== null) return null\n }\n this.checkShellsNotNested(g, graph)\n if (this._validErr !== null) return null\n this.checkConnectedInteriors(graph)\n } else if (arguments[0] instanceof GeometryCollection) {\n const gc = arguments[0]\n for (let i = 0; i < gc.getNumGeometries(); i++) {\n const g = gc.getGeometryN(i)\n this.checkValid(g)\n if (this._validErr !== null) return null\n }\n } else if (arguments[0] instanceof Geometry) {\n const g = arguments[0]\n this._validErr = null\n if (g.isEmpty()) return null\n if (g instanceof Point) this.checkValid(g); else if (g instanceof MultiPoint) this.checkValid(g); else if (g instanceof LinearRing) this.checkValid(g); else if (g instanceof LineString) this.checkValid(g); else if (g instanceof Polygon) this.checkValid(g); else if (g instanceof MultiPolygon) this.checkValid(g); else if (g instanceof GeometryCollection) this.checkValid(g); else throw new UnsupportedOperationException(g.getGeometryType())\n }\n }\n setSelfTouchingRingFormingHoleValid(isValid) {\n this._isSelfTouchingRingFormingHoleValid = isValid\n }\n checkShellNotNested(shell, p, graph) {\n const shellPts = shell.getCoordinates()\n const polyShell = p.getExteriorRing()\n if (polyShell.isEmpty()) return null\n const polyPts = polyShell.getCoordinates()\n const shellPt = IsValidOp.findPtNotNode(shellPts, polyShell, graph)\n if (shellPt === null) return null\n const insidePolyShell = PointLocation.isInRing(shellPt, polyPts)\n if (!insidePolyShell) return null\n if (p.getNumInteriorRing() <= 0) {\n this._validErr = new TopologyValidationError(TopologyValidationError.NESTED_SHELLS, shellPt)\n return null\n }\n let badNestedPt = null\n for (let i = 0; i < p.getNumInteriorRing(); i++) {\n const hole = p.getInteriorRingN(i)\n badNestedPt = this.checkShellInsideHole(shell, hole, graph)\n if (badNestedPt === null) return null\n }\n this._validErr = new TopologyValidationError(TopologyValidationError.NESTED_SHELLS, badNestedPt)\n }\n checkClosedRings(poly) {\n this.checkClosedRing(poly.getExteriorRing())\n if (this._validErr !== null) return null\n for (let i = 0; i < poly.getNumInteriorRing(); i++) {\n this.checkClosedRing(poly.getInteriorRingN(i))\n if (this._validErr !== null) return null\n }\n }\n checkClosedRing(ring) {\n if (ring.isEmpty()) return null\n if (!ring.isClosed()) {\n let pt = null\n if (ring.getNumPoints() >= 1) pt = ring.getCoordinateN(0)\n this._validErr = new TopologyValidationError(TopologyValidationError.RING_NOT_CLOSED, pt)\n }\n }\n checkShellsNotNested(mp, graph) {\n for (let i = 0; i < mp.getNumGeometries(); i++) {\n const p = mp.getGeometryN(i)\n const shell = p.getExteriorRing()\n for (let j = 0; j < mp.getNumGeometries(); j++) {\n if (i === j) continue\n const p2 = mp.getGeometryN(j)\n this.checkShellNotNested(shell, p2, graph)\n if (this._validErr !== null) return null\n }\n }\n }\n}\n","import Location from '../../geom/Location'\nimport CoordinateList from '../../geom/CoordinateList'\nimport WKTWriter from '../../io/WKTWriter'\nimport CoordinateArraySequence from '../../geom/impl/CoordinateArraySequence'\nimport IsValidOp from '../valid/IsValidOp'\nimport LinearRing from '../../geom/LinearRing'\nimport Exception from '../../../../../java/lang/Exception'\nimport Orientation from '../../algorithm/Orientation'\nimport System from '../../../../../java/lang/System'\nimport CoordinateArrays from '../../geom/CoordinateArrays'\nimport ArrayList from '../../../../../java/util/ArrayList'\nimport Comparator from '../../../../../java/util/Comparator'\nimport IndexedPointInAreaLocator from '../../algorithm/locate/IndexedPointInAreaLocator'\nimport Assert from '../../util/Assert'\nexport default class EdgeRing {\n constructor() {\n EdgeRing.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._factory = null\n this._deList = new ArrayList()\n this._lowestEdge = null\n this._ring = null\n this._locator = null\n this._ringPts = null\n this._holes = null\n this._shell = null\n this._isHole = null\n this._isProcessed = false\n this._isIncludedSet = false\n this._isIncluded = false\n const factory = arguments[0]\n this._factory = factory\n }\n static findDirEdgesInRing(startDE) {\n let de = startDE\n const edges = new ArrayList()\n do {\n edges.add(de)\n de = de.getNext()\n Assert.isTrue(de !== null, 'found null DE in ring')\n Assert.isTrue(de === startDE || !de.isInRing(), 'found DE already in ring')\n } while (de !== startDE)\n return edges\n }\n static addEdge(coords, isForward, coordList) {\n if (isForward) \n for (let i = 0; i < coords.length; i++) \n coordList.add(coords[i], false)\n \n else \n for (let i = coords.length - 1; i >= 0; i--) \n coordList.add(coords[i], false)\n \n \n }\n static findEdgeRingContaining(testEr, erList) {\n const testRing = testEr.getRing()\n const testEnv = testRing.getEnvelopeInternal()\n let testPt = testRing.getCoordinateN(0)\n let minRing = null\n let minRingEnv = null\n for (let it = erList.iterator(); it.hasNext(); ) {\n const tryEdgeRing = it.next()\n const tryRing = tryEdgeRing.getRing()\n const tryShellEnv = tryRing.getEnvelopeInternal()\n if (tryShellEnv.equals(testEnv)) continue\n if (!tryShellEnv.contains(testEnv)) continue\n testPt = CoordinateArrays.ptNotInList(testRing.getCoordinates(), tryEdgeRing.getCoordinates())\n const isContained = tryEdgeRing.isInRing(testPt)\n if (isContained) \n if (minRing === null || minRingEnv.contains(tryShellEnv)) {\n minRing = tryEdgeRing\n minRingEnv = minRing.getRing().getEnvelopeInternal()\n }\n \n }\n return minRing\n }\n isIncluded() {\n return this._isIncluded\n }\n getCoordinates() {\n if (this._ringPts === null) {\n const coordList = new CoordinateList()\n for (let i = this._deList.iterator(); i.hasNext(); ) {\n const de = i.next()\n const edge = de.getEdge()\n EdgeRing.addEdge(edge.getLine().getCoordinates(), de.getEdgeDirection(), coordList)\n }\n this._ringPts = coordList.toCoordinateArray()\n }\n return this._ringPts\n }\n isIncludedSet() {\n return this._isIncludedSet\n }\n isValid() {\n this.getCoordinates()\n if (this._ringPts.length <= 3) return false\n this.getRing()\n return IsValidOp.isValid(this._ring)\n }\n build(startDE) {\n let de = startDE\n do {\n this.add(de)\n de.setRing(this)\n de = de.getNext()\n Assert.isTrue(de !== null, 'found null DE in ring')\n Assert.isTrue(de === startDE || !de.isInRing(), 'found DE already in ring')\n } while (de !== startDE)\n }\n isInRing(pt) {\n return Location.EXTERIOR !== this.getLocator().locate(pt)\n }\n isOuterHole() {\n if (!this._isHole) return false\n return !this.hasShell()\n }\n getPolygon() {\n let holeLR = null\n if (this._holes !== null) {\n holeLR = new Array(this._holes.size()).fill(null)\n for (let i = 0; i < this._holes.size(); i++) \n holeLR[i] = this._holes.get(i)\n \n }\n const poly = this._factory.createPolygon(this._ring, holeLR)\n return poly\n }\n isHole() {\n return this._isHole\n }\n isProcessed() {\n return this._isProcessed\n }\n addHole() {\n if (arguments[0] instanceof LinearRing) {\n const hole = arguments[0]\n if (this._holes === null) this._holes = new ArrayList()\n this._holes.add(hole)\n } else if (arguments[0] instanceof EdgeRing) {\n const holeER = arguments[0]\n holeER.setShell(this)\n const hole = holeER.getRing()\n if (this._holes === null) this._holes = new ArrayList()\n this._holes.add(hole)\n }\n }\n setIncluded(isIncluded) {\n this._isIncluded = isIncluded\n this._isIncludedSet = true\n }\n getOuterHole() {\n if (this.isHole()) return null\n for (let i = 0; i < this._deList.size(); i++) {\n const de = this._deList.get(i)\n const adjRing = de.getSym().getRing()\n if (adjRing.isOuterHole()) return adjRing\n }\n return null\n }\n computeHole() {\n const ring = this.getRing()\n this._isHole = Orientation.isCCW(ring.getCoordinates())\n }\n hasShell() {\n return this._shell !== null\n }\n isOuterShell() {\n return this.getOuterHole() !== null\n }\n getLineString() {\n this.getCoordinates()\n return this._factory.createLineString(this._ringPts)\n }\n toString() {\n return WKTWriter.toLineString(new CoordinateArraySequence(this.getCoordinates()))\n }\n getLocator() {\n if (this._locator === null) \n this._locator = new IndexedPointInAreaLocator(this.getRing())\n \n return this._locator\n }\n getShell() {\n if (this.isHole()) return this._shell\n return this\n }\n add(de) {\n this._deList.add(de)\n }\n getRing() {\n if (this._ring !== null) return this._ring\n this.getCoordinates()\n if (this._ringPts.length < 3) System.out.println(this._ringPts)\n try {\n this._ring = this._factory.createLinearRing(this._ringPts)\n } catch (ex) {\n if (ex instanceof Exception) \n System.out.println(this._ringPts)\n else throw ex\n } finally {}\n return this._ring\n }\n updateIncluded() {\n if (this.isHole()) return null\n for (let i = 0; i < this._deList.size(); i++) {\n const de = this._deList.get(i)\n const adjShell = de.getSym().getRing().getShell()\n if (adjShell !== null && adjShell.isIncludedSet()) {\n this.setIncluded(!adjShell.isIncluded())\n return null\n }\n }\n }\n setShell(shell) {\n this._shell = shell\n }\n setProcessed(isProcessed) {\n this._isProcessed = isProcessed\n }\n}\nclass EnvelopeComparator {\n compare(obj0, obj1) {\n const r0 = obj0\n const r1 = obj1\n return r0.getRing().getEnvelope().compareTo(r1.getRing().getEnvelope())\n }\n get interfaces_() {\n return [Comparator]\n }\n}\nEdgeRing.EnvelopeComparator = EnvelopeComparator\n","import PolygonizeDirectedEdge from './PolygonizeDirectedEdge'\nimport HashSet from '../../../../../java/util/HashSet'\nimport Stack from '../../../../../java/util/Stack'\nimport Node from '../../planargraph/Node'\nimport PolygonizeEdge from './PolygonizeEdge'\nimport EdgeRing from './EdgeRing'\nimport CoordinateArrays from '../../geom/CoordinateArrays'\nimport ArrayList from '../../../../../java/util/ArrayList'\nimport Assert from '../../util/Assert'\nimport PlanarGraph from '../../planargraph/PlanarGraph'\nexport default class PolygonizeGraph extends PlanarGraph {\n constructor() {\n super()\n PolygonizeGraph.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._factory = null\n const factory = arguments[0]\n this._factory = factory\n }\n static findLabeledEdgeRings(dirEdges) {\n const edgeRingStarts = new ArrayList()\n let currLabel = 1\n for (let i = dirEdges.iterator(); i.hasNext(); ) {\n const de = i.next()\n if (de.isMarked()) continue\n if (de.getLabel() >= 0) continue\n edgeRingStarts.add(de)\n const edges = EdgeRing.findDirEdgesInRing(de)\n PolygonizeGraph.label(edges, currLabel)\n currLabel++\n }\n return edgeRingStarts\n }\n static getDegreeNonDeleted(node) {\n const edges = node.getOutEdges().getEdges()\n let degree = 0\n for (let i = edges.iterator(); i.hasNext(); ) {\n const de = i.next()\n if (!de.isMarked()) degree++\n }\n return degree\n }\n static deleteAllEdges(node) {\n const edges = node.getOutEdges().getEdges()\n for (let i = edges.iterator(); i.hasNext(); ) {\n const de = i.next()\n de.setMarked(true)\n const sym = de.getSym()\n if (sym !== null) sym.setMarked(true)\n }\n }\n static label(dirEdges, label) {\n for (let i = dirEdges.iterator(); i.hasNext(); ) {\n const de = i.next()\n de.setLabel(label)\n }\n }\n static computeNextCWEdges(node) {\n const deStar = node.getOutEdges()\n let startDE = null\n let prevDE = null\n for (let i = deStar.getEdges().iterator(); i.hasNext(); ) {\n const outDE = i.next()\n if (outDE.isMarked()) continue\n if (startDE === null) startDE = outDE\n if (prevDE !== null) {\n const sym = prevDE.getSym()\n sym.setNext(outDE)\n }\n prevDE = outDE\n }\n if (prevDE !== null) {\n const sym = prevDE.getSym()\n sym.setNext(startDE)\n }\n }\n static computeNextCCWEdges(node, label) {\n const deStar = node.getOutEdges()\n let firstOutDE = null\n let prevInDE = null\n const edges = deStar.getEdges()\n for (let i = edges.size() - 1; i >= 0; i--) {\n const de = edges.get(i)\n const sym = de.getSym()\n let outDE = null\n if (de.getLabel() === label) outDE = de\n let inDE = null\n if (sym.getLabel() === label) inDE = sym\n if (outDE === null && inDE === null) continue\n if (inDE !== null) \n prevInDE = inDE\n \n if (outDE !== null) {\n if (prevInDE !== null) {\n prevInDE.setNext(outDE)\n prevInDE = null\n }\n if (firstOutDE === null) firstOutDE = outDE\n }\n }\n if (prevInDE !== null) {\n Assert.isTrue(firstOutDE !== null)\n prevInDE.setNext(firstOutDE)\n }\n }\n static getDegree(node, label) {\n const edges = node.getOutEdges().getEdges()\n let degree = 0\n for (let i = edges.iterator(); i.hasNext(); ) {\n const de = i.next()\n if (de.getLabel() === label) degree++\n }\n return degree\n }\n static findIntersectionNodes(startDE, label) {\n let de = startDE\n let intNodes = null\n do {\n const node = de.getFromNode()\n if (PolygonizeGraph.getDegree(node, label) > 1) {\n if (intNodes === null) intNodes = new ArrayList()\n intNodes.add(node)\n }\n de = de.getNext()\n Assert.isTrue(de !== null, 'found null DE in ring')\n Assert.isTrue(de === startDE || !de.isInRing(), 'found DE already in ring')\n } while (de !== startDE)\n return intNodes\n }\n findEdgeRing(startDE) {\n const er = new EdgeRing(this._factory)\n er.build(startDE)\n return er\n }\n computeDepthParity() {\n if (arguments.length === 0) {\n while (true) {\n const de = null\n if (de === null) return null\n this.computeDepthParity(de)\n }\n } else if (arguments.length === 1) {\n const de = arguments[0]\n }\n }\n computeNextCWEdges() {\n for (let iNode = this.nodeIterator(); iNode.hasNext(); ) {\n const node = iNode.next()\n PolygonizeGraph.computeNextCWEdges(node)\n }\n }\n addEdge(line) {\n if (line.isEmpty()) \n return null\n \n const linePts = CoordinateArrays.removeRepeatedPoints(line.getCoordinates())\n if (linePts.length < 2) \n return null\n \n const startPt = linePts[0]\n const endPt = linePts[linePts.length - 1]\n const nStart = this.getNode(startPt)\n const nEnd = this.getNode(endPt)\n const de0 = new PolygonizeDirectedEdge(nStart, nEnd, linePts[1], true)\n const de1 = new PolygonizeDirectedEdge(nEnd, nStart, linePts[linePts.length - 2], false)\n const edge = new PolygonizeEdge(line)\n edge.setDirectedEdges(de0, de1)\n this.add(edge)\n }\n deleteCutEdges() {\n this.computeNextCWEdges()\n PolygonizeGraph.findLabeledEdgeRings(this._dirEdges)\n const cutLines = new ArrayList()\n for (let i = this._dirEdges.iterator(); i.hasNext(); ) {\n const de = i.next()\n if (de.isMarked()) continue\n const sym = de.getSym()\n if (de.getLabel() === sym.getLabel()) {\n de.setMarked(true)\n sym.setMarked(true)\n const e = de.getEdge()\n cutLines.add(e.getLine())\n }\n }\n return cutLines\n }\n getEdgeRings() {\n this.computeNextCWEdges()\n PolygonizeGraph.label(this._dirEdges, -1)\n const maximalRings = PolygonizeGraph.findLabeledEdgeRings(this._dirEdges)\n this.convertMaximalToMinimalEdgeRings(maximalRings)\n const edgeRingList = new ArrayList()\n for (let i = this._dirEdges.iterator(); i.hasNext(); ) {\n const de = i.next()\n if (de.isMarked()) continue\n if (de.isInRing()) continue\n const er = this.findEdgeRing(de)\n edgeRingList.add(er)\n }\n return edgeRingList\n }\n getNode(pt) {\n let node = this.findNode(pt)\n if (node === null) {\n node = new Node(pt)\n this.add(node)\n }\n return node\n }\n convertMaximalToMinimalEdgeRings(ringEdges) {\n for (let i = ringEdges.iterator(); i.hasNext(); ) {\n const de = i.next()\n const label = de.getLabel()\n const intNodes = PolygonizeGraph.findIntersectionNodes(de, label)\n if (intNodes === null) continue\n for (let iNode = intNodes.iterator(); iNode.hasNext(); ) {\n const node = iNode.next()\n PolygonizeGraph.computeNextCCWEdges(node, label)\n }\n }\n }\n deleteDangles() {\n const nodesToRemove = this.findNodesOfDegree(1)\n const dangleLines = new HashSet()\n const nodeStack = new Stack()\n for (let i = nodesToRemove.iterator(); i.hasNext(); ) \n nodeStack.push(i.next())\n \n while (!nodeStack.isEmpty()) {\n const node = nodeStack.pop()\n PolygonizeGraph.deleteAllEdges(node)\n const nodeOutEdges = node.getOutEdges().getEdges()\n for (let i = nodeOutEdges.iterator(); i.hasNext(); ) {\n const de = i.next()\n de.setMarked(true)\n const sym = de.getSym()\n if (sym !== null) sym.setMarked(true)\n const e = de.getEdge()\n dangleLines.add(e.getLine())\n const toNode = de.getToNode()\n if (PolygonizeGraph.getDegreeNonDeleted(toNode) === 1) nodeStack.push(toNode)\n }\n }\n return dangleLines\n }\n}\n","import STRtree from '../../index/strtree/STRtree'\nimport EdgeRing from './EdgeRing'\nexport default class HoleAssigner {\n constructor() {\n HoleAssigner.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._shells = null\n this._shellIndex = null\n const shells = arguments[0]\n this._shells = shells\n this.buildIndex()\n }\n static assignHolesToShells(holes, shells) {\n const assigner = new HoleAssigner(shells)\n assigner.assignHolesToShells(holes)\n }\n assignHolesToShells(holeList) {\n for (let i = holeList.iterator(); i.hasNext(); ) {\n const holeER = i.next()\n this.assignHoleToShell(holeER)\n }\n }\n buildIndex() {\n this._shellIndex = new STRtree()\n for (const shell of this._shells) \n this._shellIndex.insert(shell.getRing().getEnvelopeInternal(), shell)\n \n }\n queryOverlappingShells(ringEnv) {\n return this._shellIndex.query(ringEnv)\n }\n findShellContaining(testEr) {\n const testEnv = testEr.getRing().getEnvelopeInternal()\n const candidateShells = this.queryOverlappingShells(testEnv)\n return EdgeRing.findEdgeRingContaining(testEr, candidateShells)\n }\n assignHoleToShell(holeER) {\n const shell = this.findShellContaining(holeER)\n if (shell !== null) \n shell.addHole(holeER)\n \n }\n}\n","import LineString from '../../geom/LineString'\nimport Geometry from '../../geom/Geometry'\nimport PolygonizeGraph from './PolygonizeGraph'\nimport hasInterface from '../../../../../hasInterface'\nimport GeometryFactory from '../../geom/GeometryFactory'\nimport Collection from '../../../../../java/util/Collection'\nimport Collections from '../../../../../java/util/Collections'\nimport EdgeRing from './EdgeRing'\nimport GeometryComponentFilter from '../../geom/GeometryComponentFilter'\nimport ArrayList from '../../../../../java/util/ArrayList'\nimport HoleAssigner from './HoleAssigner'\nexport default class Polygonizer {\n constructor() {\n Polygonizer.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._lineStringAdder = new LineStringAdder(this)\n this._graph = null\n this._dangles = new ArrayList()\n this._cutEdges = new ArrayList()\n this._invalidRingLines = new ArrayList()\n this._holeList = null\n this._shellList = null\n this._polyList = null\n this._isCheckingRingsValid = true\n this._extractOnlyPolygonal = null\n this._geomFactory = null\n if (arguments.length === 0) {\n Polygonizer.constructor_.call(this, false)\n } else if (arguments.length === 1) {\n const extractOnlyPolygonal = arguments[0]\n this._extractOnlyPolygonal = extractOnlyPolygonal\n }\n }\n static extractPolygons(shellList, includeAll) {\n const polyList = new ArrayList()\n for (let i = shellList.iterator(); i.hasNext(); ) {\n const er = i.next()\n if (includeAll || er.isIncluded()) \n polyList.add(er.getPolygon())\n \n }\n return polyList\n }\n static findOuterShells(shellList) {\n for (let i = shellList.iterator(); i.hasNext(); ) {\n const er = i.next()\n const outerHoleER = er.getOuterHole()\n if (outerHoleER !== null && !outerHoleER.isProcessed()) {\n er.setIncluded(true)\n outerHoleER.setProcessed(true)\n }\n }\n }\n static findDisjointShells(shellList) {\n Polygonizer.findOuterShells(shellList)\n let isMoreToScan = null\n do {\n isMoreToScan = false\n for (let i = shellList.iterator(); i.hasNext(); ) {\n const er = i.next()\n if (er.isIncludedSet()) continue\n er.updateIncluded()\n if (!er.isIncludedSet()) \n isMoreToScan = true\n \n }\n } while (isMoreToScan)\n }\n getGeometry() {\n if (this._geomFactory === null) this._geomFactory = new GeometryFactory()\n this.polygonize()\n if (this._extractOnlyPolygonal) \n return this._geomFactory.buildGeometry(this._polyList)\n \n return this._geomFactory.createGeometryCollection(GeometryFactory.toGeometryArray(this._polyList))\n }\n getInvalidRingLines() {\n this.polygonize()\n return this._invalidRingLines\n }\n findValidRings(edgeRingList, validEdgeRingList, invalidRingList) {\n for (let i = edgeRingList.iterator(); i.hasNext(); ) {\n const er = i.next()\n if (er.isValid()) validEdgeRingList.add(er); else invalidRingList.add(er.getLineString())\n }\n }\n polygonize() {\n if (this._polyList !== null) return null\n this._polyList = new ArrayList()\n if (this._graph === null) return null\n this._dangles = this._graph.deleteDangles()\n this._cutEdges = this._graph.deleteCutEdges()\n const edgeRingList = this._graph.getEdgeRings()\n let validEdgeRingList = new ArrayList()\n this._invalidRingLines = new ArrayList()\n if (this._isCheckingRingsValid) \n this.findValidRings(edgeRingList, validEdgeRingList, this._invalidRingLines)\n else \n validEdgeRingList = edgeRingList\n \n this.findShellsAndHoles(validEdgeRingList)\n HoleAssigner.assignHolesToShells(this._holeList, this._shellList)\n Collections.sort(this._shellList, new EdgeRing.EnvelopeComparator())\n let includeAll = true\n if (this._extractOnlyPolygonal) {\n Polygonizer.findDisjointShells(this._shellList)\n includeAll = false\n }\n this._polyList = Polygonizer.extractPolygons(this._shellList, includeAll)\n }\n getDangles() {\n this.polygonize()\n return this._dangles\n }\n getCutEdges() {\n this.polygonize()\n return this._cutEdges\n }\n getPolygons() {\n this.polygonize()\n return this._polyList\n }\n add() {\n if (hasInterface(arguments[0], Collection)) {\n const geomList = arguments[0]\n for (let i = geomList.iterator(); i.hasNext(); ) {\n const geometry = i.next()\n this.add(geometry)\n }\n } else if (arguments[0] instanceof LineString) {\n const line = arguments[0]\n this._geomFactory = line.getFactory()\n if (this._graph === null) this._graph = new PolygonizeGraph(this._geomFactory)\n this._graph.addEdge(line)\n } else if (arguments[0] instanceof Geometry) {\n const g = arguments[0]\n g.apply(this._lineStringAdder)\n }\n }\n setCheckRingsValid(isCheckingRingsValid) {\n this._isCheckingRingsValid = isCheckingRingsValid\n }\n findShellsAndHoles(edgeRingList) {\n this._holeList = new ArrayList()\n this._shellList = new ArrayList()\n for (let i = edgeRingList.iterator(); i.hasNext(); ) {\n const er = i.next()\n er.computeHole()\n if (er.isHole()) this._holeList.add(er); else this._shellList.add(er)\n }\n }\n}\nclass LineStringAdder {\n constructor() {\n LineStringAdder.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this.p = null\n const p = arguments[0]\n this.p = p\n }\n filter(g) {\n if (g instanceof LineString) this.p.add(g)\n }\n get interfaces_() {\n return [GeometryComponentFilter]\n }\n}\nPolygonizer.LineStringAdder = LineStringAdder\n","import PointLocator from '../../algorithm/PointLocator'\nimport Location from '../../geom/Location'\nimport IntersectionMatrix from '../../geom/IntersectionMatrix'\nimport EdgeEndBuilder from './EdgeEndBuilder'\nimport NodeMap from '../../geomgraph/NodeMap'\nimport RelateNodeFactory from './RelateNodeFactory'\nimport ArrayList from '../../../../../java/util/ArrayList'\nimport RobustLineIntersector from '../../algorithm/RobustLineIntersector'\nimport Assert from '../../util/Assert'\nexport default class RelateComputer {\n constructor() {\n RelateComputer.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._li = new RobustLineIntersector()\n this._ptLocator = new PointLocator()\n this._arg = null\n this._nodes = new NodeMap(new RelateNodeFactory())\n this._im = null\n this._isolatedEdges = new ArrayList()\n this._invalidPoint = null\n const arg = arguments[0]\n this._arg = arg\n }\n insertEdgeEnds(ee) {\n for (let i = ee.iterator(); i.hasNext(); ) {\n const e = i.next()\n this._nodes.add(e)\n }\n }\n computeProperIntersectionIM(intersector, im) {\n const dimA = this._arg[0].getGeometry().getDimension()\n const dimB = this._arg[1].getGeometry().getDimension()\n const hasProper = intersector.hasProperIntersection()\n const hasProperInterior = intersector.hasProperInteriorIntersection()\n if (dimA === 2 && dimB === 2) {\n if (hasProper) im.setAtLeast('212101212')\n } else if (dimA === 2 && dimB === 1) {\n if (hasProper) im.setAtLeast('FFF0FFFF2')\n if (hasProperInterior) im.setAtLeast('1FFFFF1FF')\n } else if (dimA === 1 && dimB === 2) {\n if (hasProper) im.setAtLeast('F0FFFFFF2')\n if (hasProperInterior) im.setAtLeast('1F1FFFFFF')\n } else if (dimA === 1 && dimB === 1) {\n if (hasProperInterior) im.setAtLeast('0FFFFFFFF')\n }\n }\n labelIsolatedEdges(thisIndex, targetIndex) {\n for (let ei = this._arg[thisIndex].getEdgeIterator(); ei.hasNext(); ) {\n const e = ei.next()\n if (e.isIsolated()) {\n this.labelIsolatedEdge(e, targetIndex, this._arg[targetIndex].getGeometry())\n this._isolatedEdges.add(e)\n }\n }\n }\n labelIsolatedEdge(e, targetIndex, target) {\n if (target.getDimension() > 0) {\n const loc = this._ptLocator.locate(e.getCoordinate(), target)\n e.getLabel().setAllLocations(targetIndex, loc)\n } else {\n e.getLabel().setAllLocations(targetIndex, Location.EXTERIOR)\n }\n }\n computeIM() {\n const im = new IntersectionMatrix()\n im.set(Location.EXTERIOR, Location.EXTERIOR, 2)\n if (!this._arg[0].getGeometry().getEnvelopeInternal().intersects(this._arg[1].getGeometry().getEnvelopeInternal())) {\n this.computeDisjointIM(im)\n return im\n }\n this._arg[0].computeSelfNodes(this._li, false)\n this._arg[1].computeSelfNodes(this._li, false)\n const intersector = this._arg[0].computeEdgeIntersections(this._arg[1], this._li, false)\n this.computeIntersectionNodes(0)\n this.computeIntersectionNodes(1)\n this.copyNodesAndLabels(0)\n this.copyNodesAndLabels(1)\n this.labelIsolatedNodes()\n this.computeProperIntersectionIM(intersector, im)\n const eeBuilder = new EdgeEndBuilder()\n const ee0 = eeBuilder.computeEdgeEnds(this._arg[0].getEdgeIterator())\n this.insertEdgeEnds(ee0)\n const ee1 = eeBuilder.computeEdgeEnds(this._arg[1].getEdgeIterator())\n this.insertEdgeEnds(ee1)\n this.labelNodeEdges()\n this.labelIsolatedEdges(0, 1)\n this.labelIsolatedEdges(1, 0)\n this.updateIM(im)\n return im\n }\n labelNodeEdges() {\n for (let ni = this._nodes.iterator(); ni.hasNext(); ) {\n const node = ni.next()\n node.getEdges().computeLabelling(this._arg)\n }\n }\n copyNodesAndLabels(argIndex) {\n for (let i = this._arg[argIndex].getNodeIterator(); i.hasNext(); ) {\n const graphNode = i.next()\n const newNode = this._nodes.addNode(graphNode.getCoordinate())\n newNode.setLabel(argIndex, graphNode.getLabel().getLocation(argIndex))\n }\n }\n labelIntersectionNodes(argIndex) {\n for (let i = this._arg[argIndex].getEdgeIterator(); i.hasNext(); ) {\n const e = i.next()\n const eLoc = e.getLabel().getLocation(argIndex)\n for (let eiIt = e.getEdgeIntersectionList().iterator(); eiIt.hasNext(); ) {\n const ei = eiIt.next()\n const n = this._nodes.find(ei.coord)\n if (n.getLabel().isNull(argIndex)) \n if (eLoc === Location.BOUNDARY) n.setLabelBoundary(argIndex); else n.setLabel(argIndex, Location.INTERIOR)\n \n }\n }\n }\n labelIsolatedNode(n, targetIndex) {\n const loc = this._ptLocator.locate(n.getCoordinate(), this._arg[targetIndex].getGeometry())\n n.getLabel().setAllLocations(targetIndex, loc)\n }\n computeIntersectionNodes(argIndex) {\n for (let i = this._arg[argIndex].getEdgeIterator(); i.hasNext(); ) {\n const e = i.next()\n const eLoc = e.getLabel().getLocation(argIndex)\n for (let eiIt = e.getEdgeIntersectionList().iterator(); eiIt.hasNext(); ) {\n const ei = eiIt.next()\n const n = this._nodes.addNode(ei.coord)\n if (eLoc === Location.BOUNDARY) n.setLabelBoundary(argIndex); else \n if (n.getLabel().isNull(argIndex)) n.setLabel(argIndex, Location.INTERIOR)\n \n }\n }\n }\n labelIsolatedNodes() {\n for (let ni = this._nodes.iterator(); ni.hasNext(); ) {\n const n = ni.next()\n const label = n.getLabel()\n Assert.isTrue(label.getGeometryCount() > 0, 'node with empty label found')\n if (n.isIsolated()) \n if (label.isNull(0)) this.labelIsolatedNode(n, 0); else this.labelIsolatedNode(n, 1)\n \n }\n }\n updateIM(im) {\n for (let ei = this._isolatedEdges.iterator(); ei.hasNext(); ) {\n const e = ei.next()\n e.updateIM(im)\n }\n for (let ni = this._nodes.iterator(); ni.hasNext(); ) {\n const node = ni.next()\n node.updateIM(im)\n node.updateIMFromEdges(im)\n }\n }\n computeDisjointIM(im) {\n const ga = this._arg[0].getGeometry()\n if (!ga.isEmpty()) {\n im.set(Location.INTERIOR, Location.EXTERIOR, ga.getDimension())\n im.set(Location.BOUNDARY, Location.EXTERIOR, ga.getBoundaryDimension())\n }\n const gb = this._arg[1].getGeometry()\n if (!gb.isEmpty()) {\n im.set(Location.EXTERIOR, Location.INTERIOR, gb.getDimension())\n im.set(Location.EXTERIOR, Location.BOUNDARY, gb.getBoundaryDimension())\n }\n }\n}\n","import LineString from '../../geom/LineString'\nimport Coordinate from '../../geom/Coordinate'\nimport Point from '../../geom/Point'\nimport Polygon from '../../geom/Polygon'\nexport default class RectangleContains {\n constructor() {\n RectangleContains.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._rectEnv = null\n const rectangle = arguments[0]\n this._rectEnv = rectangle.getEnvelopeInternal()\n }\n static contains(rectangle, b) {\n const rc = new RectangleContains(rectangle)\n return rc.contains(b)\n }\n isContainedInBoundary(geom) {\n if (geom instanceof Polygon) return false\n if (geom instanceof Point) return this.isPointContainedInBoundary(geom)\n if (geom instanceof LineString) return this.isLineStringContainedInBoundary(geom)\n for (let i = 0; i < geom.getNumGeometries(); i++) {\n const comp = geom.getGeometryN(i)\n if (!this.isContainedInBoundary(comp)) return false\n }\n return true\n }\n isLineSegmentContainedInBoundary(p0, p1) {\n if (p0.equals(p1)) return this.isPointContainedInBoundary(p0)\n if (p0.x === p1.x) {\n if (p0.x === this._rectEnv.getMinX() || p0.x === this._rectEnv.getMaxX()) return true\n } else if (p0.y === p1.y) {\n if (p0.y === this._rectEnv.getMinY() || p0.y === this._rectEnv.getMaxY()) return true\n }\n return false\n }\n isLineStringContainedInBoundary(line) {\n const seq = line.getCoordinateSequence()\n const p0 = new Coordinate()\n const p1 = new Coordinate()\n for (let i = 0; i < seq.size() - 1; i++) {\n seq.getCoordinate(i, p0)\n seq.getCoordinate(i + 1, p1)\n if (!this.isLineSegmentContainedInBoundary(p0, p1)) return false\n }\n return true\n }\n isPointContainedInBoundary() {\n if (arguments[0] instanceof Point) {\n const point = arguments[0]\n return this.isPointContainedInBoundary(point.getCoordinate())\n } else if (arguments[0] instanceof Coordinate) {\n const pt = arguments[0]\n return pt.x === this._rectEnv.getMinX() || pt.x === this._rectEnv.getMaxX() || pt.y === this._rectEnv.getMinY() || pt.y === this._rectEnv.getMaxY()\n }\n }\n contains(geom) {\n if (!this._rectEnv.contains(geom.getEnvelopeInternal())) return false\n if (this.isContainedInBoundary(geom)) return false\n return true\n }\n}\n","import Coordinate from '../geom/Coordinate'\nimport RobustLineIntersector from './RobustLineIntersector'\nimport Envelope from '../geom/Envelope'\nexport default class RectangleLineIntersector {\n constructor() {\n RectangleLineIntersector.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._li = new RobustLineIntersector()\n this._rectEnv = null\n this._diagUp0 = null\n this._diagUp1 = null\n this._diagDown0 = null\n this._diagDown1 = null\n const rectEnv = arguments[0]\n this._rectEnv = rectEnv\n this._diagUp0 = new Coordinate(rectEnv.getMinX(), rectEnv.getMinY())\n this._diagUp1 = new Coordinate(rectEnv.getMaxX(), rectEnv.getMaxY())\n this._diagDown0 = new Coordinate(rectEnv.getMinX(), rectEnv.getMaxY())\n this._diagDown1 = new Coordinate(rectEnv.getMaxX(), rectEnv.getMinY())\n }\n intersects(p0, p1) {\n const segEnv = new Envelope(p0, p1)\n if (!this._rectEnv.intersects(segEnv)) return false\n if (this._rectEnv.intersects(p0)) return true\n if (this._rectEnv.intersects(p1)) return true\n if (p0.compareTo(p1) > 0) {\n const tmp = p0\n p0 = p1\n p1 = tmp\n }\n let isSegUpwards = false\n if (p1.y > p0.y) isSegUpwards = true\n if (isSegUpwards) \n this._li.computeIntersection(p0, p1, this._diagDown0, this._diagDown1)\n else \n this._li.computeIntersection(p0, p1, this._diagUp0, this._diagUp1)\n \n if (this._li.hasIntersection()) return true\n return false\n }\n}\n","import Coordinate from '../../geom/Coordinate'\nimport Polygon from '../../geom/Polygon'\nimport RectangleLineIntersector from '../../algorithm/RectangleLineIntersector'\nimport ShortCircuitedGeometryVisitor from '../../geom/util/ShortCircuitedGeometryVisitor'\nimport SimplePointInAreaLocator from '../../algorithm/locate/SimplePointInAreaLocator'\nimport LinearComponentExtracter from '../../geom/util/LinearComponentExtracter'\nexport default class RectangleIntersects {\n constructor() {\n RectangleIntersects.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._rectangle = null\n this._rectEnv = null\n const rectangle = arguments[0]\n this._rectangle = rectangle\n this._rectEnv = rectangle.getEnvelopeInternal()\n }\n static intersects(rectangle, b) {\n const rp = new RectangleIntersects(rectangle)\n return rp.intersects(b)\n }\n intersects(geom) {\n if (!this._rectEnv.intersects(geom.getEnvelopeInternal())) return false\n const visitor = new EnvelopeIntersectsVisitor(this._rectEnv)\n visitor.applyTo(geom)\n if (visitor.intersects()) return true\n const ecpVisitor = new GeometryContainsPointVisitor(this._rectangle)\n ecpVisitor.applyTo(geom)\n if (ecpVisitor.containsPoint()) return true\n const riVisitor = new RectangleIntersectsSegmentVisitor(this._rectangle)\n riVisitor.applyTo(geom)\n if (riVisitor.intersects()) return true\n return false\n }\n}\nclass EnvelopeIntersectsVisitor extends ShortCircuitedGeometryVisitor {\n constructor() {\n super()\n EnvelopeIntersectsVisitor.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._rectEnv = null\n this._intersects = false\n const rectEnv = arguments[0]\n this._rectEnv = rectEnv\n }\n isDone() {\n return this._intersects === true\n }\n visit(element) {\n const elementEnv = element.getEnvelopeInternal()\n if (!this._rectEnv.intersects(elementEnv)) \n return null\n \n if (this._rectEnv.contains(elementEnv)) {\n this._intersects = true\n return null\n }\n if (elementEnv.getMinX() >= this._rectEnv.getMinX() && elementEnv.getMaxX() <= this._rectEnv.getMaxX()) {\n this._intersects = true\n return null\n }\n if (elementEnv.getMinY() >= this._rectEnv.getMinY() && elementEnv.getMaxY() <= this._rectEnv.getMaxY()) {\n this._intersects = true\n return null\n }\n }\n intersects() {\n return this._intersects\n }\n}\nclass GeometryContainsPointVisitor extends ShortCircuitedGeometryVisitor {\n constructor() {\n super()\n GeometryContainsPointVisitor.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._rectSeq = null\n this._rectEnv = null\n this._containsPoint = false\n const rectangle = arguments[0]\n this._rectSeq = rectangle.getExteriorRing().getCoordinateSequence()\n this._rectEnv = rectangle.getEnvelopeInternal()\n }\n isDone() {\n return this._containsPoint === true\n }\n visit(geom) {\n if (!(geom instanceof Polygon)) return null\n const elementEnv = geom.getEnvelopeInternal()\n if (!this._rectEnv.intersects(elementEnv)) return null\n const rectPt = new Coordinate()\n for (let i = 0; i < 4; i++) {\n this._rectSeq.getCoordinate(i, rectPt)\n if (!elementEnv.contains(rectPt)) continue\n if (SimplePointInAreaLocator.containsPointInPolygon(rectPt, geom)) {\n this._containsPoint = true\n return null\n }\n }\n }\n containsPoint() {\n return this._containsPoint\n }\n}\nclass RectangleIntersectsSegmentVisitor extends ShortCircuitedGeometryVisitor {\n constructor() {\n super()\n RectangleIntersectsSegmentVisitor.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._rectEnv = null\n this._rectIntersector = null\n this._hasIntersection = false\n this._p0 = new Coordinate()\n this._p1 = new Coordinate()\n const rectangle = arguments[0]\n this._rectEnv = rectangle.getEnvelopeInternal()\n this._rectIntersector = new RectangleLineIntersector(this._rectEnv)\n }\n intersects() {\n return this._hasIntersection\n }\n isDone() {\n return this._hasIntersection === true\n }\n visit(geom) {\n const elementEnv = geom.getEnvelopeInternal()\n if (!this._rectEnv.intersects(elementEnv)) return null\n const lines = LinearComponentExtracter.getLines(geom)\n this.checkIntersectionWithLineStrings(lines)\n }\n checkIntersectionWithLineStrings(lines) {\n for (let i = lines.iterator(); i.hasNext(); ) {\n const testLine = i.next()\n this.checkIntersectionWithSegments(testLine)\n if (this._hasIntersection) return null\n }\n }\n checkIntersectionWithSegments(testLine) {\n const seq1 = testLine.getCoordinateSequence()\n for (let j = 1; j < seq1.size(); j++) {\n seq1.getCoordinate(j - 1, this._p0)\n seq1.getCoordinate(j, this._p1)\n if (this._rectIntersector.intersects(this._p0, this._p1)) {\n this._hasIntersection = true\n return null\n }\n }\n }\n}\n","import RelateComputer from './RelateComputer'\nimport GeometryGraphOperation from '../GeometryGraphOperation'\nimport RectangleContains from '../predicate/RectangleContains'\nimport RectangleIntersects from '../predicate/RectangleIntersects'\nexport default class RelateOp extends GeometryGraphOperation {\n constructor() {\n super()\n RelateOp.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._relate = null\n if (arguments.length === 2) {\n const g0 = arguments[0], g1 = arguments[1]\n GeometryGraphOperation.constructor_.call(this, g0, g1)\n this._relate = new RelateComputer(this._arg)\n } else if (arguments.length === 3) {\n const g0 = arguments[0], g1 = arguments[1], boundaryNodeRule = arguments[2]\n GeometryGraphOperation.constructor_.call(this, g0, g1, boundaryNodeRule)\n this._relate = new RelateComputer(this._arg)\n }\n }\n static covers(g1, g2) {\n if (g2.getDimension() === 2 && g1.getDimension() < 2) \n return false\n \n if (g2.getDimension() === 1 && g1.getDimension() < 1 && g2.getLength() > 0.0) \n return false\n \n if (!g1.getEnvelopeInternal().covers(g2.getEnvelopeInternal())) return false\n if (g1.isRectangle()) \n return true\n \n return new RelateOp(g1, g2).getIntersectionMatrix().isCovers()\n }\n static intersects(g1, g2) {\n if (!g1.getEnvelopeInternal().intersects(g2.getEnvelopeInternal())) return false\n if (g1.isRectangle()) \n return RectangleIntersects.intersects(g1, g2)\n \n if (g2.isRectangle()) \n return RectangleIntersects.intersects(g2, g1)\n \n if (g1.isGeometryCollection() || g2.isGeometryCollection()) {\n const r = false\n for (let i = 0; i < g1.getNumGeometries(); i++) \n for (let j = 0; j < g2.getNumGeometries(); j++) \n if (g1.getGeometryN(i).intersects(g2.getGeometryN(j))) \n return true\n \n \n \n return false\n }\n return new RelateOp(g1, g2).getIntersectionMatrix().isIntersects()\n }\n static touches(g1, g2) {\n if (!g1.getEnvelopeInternal().intersects(g2.getEnvelopeInternal())) return false\n return new RelateOp(g1, g2).getIntersectionMatrix().isTouches(g1.getDimension(), g2.getDimension())\n }\n static equalsTopo(g1, g2) {\n if (!g1.getEnvelopeInternal().equals(g2.getEnvelopeInternal())) return false\n return RelateOp.relate(g1, g2).isEquals(g1.getDimension(), g2.getDimension())\n }\n static relate() {\n if (arguments.length === 2) {\n const a = arguments[0], b = arguments[1]\n const relOp = new RelateOp(a, b)\n const im = relOp.getIntersectionMatrix()\n return im\n } else if (arguments.length === 3) {\n const a = arguments[0], b = arguments[1], boundaryNodeRule = arguments[2]\n const relOp = new RelateOp(a, b, boundaryNodeRule)\n const im = relOp.getIntersectionMatrix()\n return im\n }\n }\n static overlaps(g1, g2) {\n if (!g1.getEnvelopeInternal().intersects(g2.getEnvelopeInternal())) return false\n return new RelateOp(g1, g2).getIntersectionMatrix().isOverlaps(g1.getDimension(), g2.getDimension())\n }\n static crosses(g1, g2) {\n if (!g1.getEnvelopeInternal().intersects(g2.getEnvelopeInternal())) return false\n return new RelateOp(g1, g2).getIntersectionMatrix().isCrosses(g1.getDimension(), g2.getDimension())\n }\n static contains(g1, g2) {\n if (g2.getDimension() === 2 && g1.getDimension() < 2) \n return false\n \n if (g2.getDimension() === 1 && g1.getDimension() < 1 && g2.getLength() > 0.0) \n return false\n \n if (!g1.getEnvelopeInternal().contains(g2.getEnvelopeInternal())) return false\n if (g1.isRectangle()) \n return RectangleContains.contains(g1, g2)\n \n return new RelateOp(g1, g2).getIntersectionMatrix().isContains()\n }\n getIntersectionMatrix() {\n return this._relate.computeIM()\n }\n}\n","import PointLocator from '../../algorithm/PointLocator'\nimport Location from '../../geom/Location'\nimport TreeSet from '../../../../../java/util/TreeSet'\nimport GeometryCombiner from '../../geom/util/GeometryCombiner'\nimport CoordinateArrays from '../../geom/CoordinateArrays'\nexport default class PointGeometryUnion {\n constructor() {\n PointGeometryUnion.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._pointGeom = null\n this._otherGeom = null\n this._geomFact = null\n const pointGeom = arguments[0], otherGeom = arguments[1]\n this._pointGeom = pointGeom\n this._otherGeom = otherGeom\n this._geomFact = otherGeom.getFactory()\n }\n static union(pointGeom, otherGeom) {\n const unioner = new PointGeometryUnion(pointGeom, otherGeom)\n return unioner.union()\n }\n union() {\n const locater = new PointLocator()\n const exteriorCoords = new TreeSet()\n for (let i = 0; i < this._pointGeom.getNumGeometries(); i++) {\n const point = this._pointGeom.getGeometryN(i)\n const coord = point.getCoordinate()\n const loc = locater.locate(coord, this._otherGeom)\n if (loc === Location.EXTERIOR) exteriorCoords.add(coord)\n }\n if (exteriorCoords.size() === 0) return this._otherGeom\n let ptComp = null\n const coords = CoordinateArrays.toCoordinateArray(exteriorCoords)\n if (coords.length === 1) \n ptComp = this._geomFact.createPoint(coords[0])\n else \n ptComp = this._geomFact.createMultiPointFromCoords(coords)\n \n return GeometryCombiner.combine(ptComp, this._otherGeom)\n }\n}\n","import LineString from '../../geom/LineString'\nimport Geometry from '../../geom/Geometry'\nimport hasInterface from '../../../../../hasInterface'\nimport Collection from '../../../../../java/util/Collection'\nimport Point from '../../geom/Point'\nimport Polygon from '../../geom/Polygon'\nimport GeometryCollection from '../../geom/GeometryCollection'\nimport Dimension from '../../geom/Dimension'\nimport ArrayList from '../../../../../java/util/ArrayList'\nimport GeometryFilter from '../../geom/GeometryFilter'\nimport Assert from '../../util/Assert'\nexport default class InputExtracter {\n constructor() {\n InputExtracter.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._geomFactory = null\n this._polygons = new ArrayList()\n this._lines = new ArrayList()\n this._points = new ArrayList()\n this._dimension = Dimension.FALSE\n }\n static extract() {\n if (hasInterface(arguments[0], Collection)) {\n const geoms = arguments[0]\n const extracter = new InputExtracter()\n extracter.add(geoms)\n return extracter\n } else if (arguments[0] instanceof Geometry) {\n const geom = arguments[0]\n const extracter = new InputExtracter()\n extracter.add(geom)\n return extracter\n }\n }\n getFactory() {\n return this._geomFactory\n }\n recordDimension(dim) {\n if (dim > this._dimension) this._dimension = dim\n }\n getDimension() {\n return this._dimension\n }\n filter(geom) {\n this.recordDimension(geom.getDimension())\n if (geom instanceof GeometryCollection) \n return null\n \n if (geom.isEmpty()) return null\n if (geom instanceof Polygon) {\n this._polygons.add(geom)\n return null\n } else if (geom instanceof LineString) {\n this._lines.add(geom)\n return null\n } else if (geom instanceof Point) {\n this._points.add(geom)\n return null\n }\n Assert.shouldNeverReachHere('Unhandled geometry type: ' + geom.getGeometryType())\n }\n getExtract(dim) {\n switch (dim) {\n case 0:\n return this._points\n case 1:\n return this._lines\n case 2:\n return this._polygons\n }\n Assert.shouldNeverReachHere('Invalid dimension: ' + dim)\n return null\n }\n isEmpty() {\n return this._polygons.isEmpty() && this._lines.isEmpty() && this._points.isEmpty()\n }\n add() {\n if (hasInterface(arguments[0], Collection)) {\n const geoms = arguments[0]\n for (const geom of geoms) \n this.add(geom)\n \n } else if (arguments[0] instanceof Geometry) {\n const geom = arguments[0]\n if (this._geomFactory === null) this._geomFactory = geom.getFactory()\n geom.apply(this)\n }\n }\n get interfaces_() {\n return [GeometryFilter]\n }\n}\n","import HashSet from '../../../../../java/util/HashSet'\nimport TopologyException from '../../geom/TopologyException'\nimport GeometryCombiner from '../../geom/util/GeometryCombiner'\nimport LineSegment from '../../geom/LineSegment'\nimport ArrayList from '../../../../../java/util/ArrayList'\nimport CoordinateSequenceFilter from '../../geom/CoordinateSequenceFilter'\nexport default class OverlapUnion {\n constructor() {\n OverlapUnion.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._geomFactory = null\n this._g0 = null\n this._g1 = null\n this._isUnionSafe = null\n const g0 = arguments[0], g1 = arguments[1]\n this._g0 = g0\n this._g1 = g1\n this._geomFactory = g0.getFactory()\n }\n static containsProperly() {\n if (arguments.length === 2) {\n const env = arguments[0], p = arguments[1]\n if (env.isNull()) return false\n return p.getX() > env.getMinX() && p.getX() < env.getMaxX() && p.getY() > env.getMinY() && p.getY() < env.getMaxY()\n } else if (arguments.length === 3) {\n const env = arguments[0], p0 = arguments[1], p1 = arguments[2]\n return OverlapUnion.containsProperly(env, p0) && OverlapUnion.containsProperly(env, p1)\n }\n }\n static union(g0, g1) {\n const union = new OverlapUnion(g0, g1)\n return union.union()\n }\n static intersects(env, p0, p1) {\n return env.intersects(p0) || env.intersects(p1)\n }\n static overlapEnvelope(g0, g1) {\n const g0Env = g0.getEnvelopeInternal()\n const g1Env = g1.getEnvelopeInternal()\n const overlapEnv = g0Env.intersection(g1Env)\n return overlapEnv\n }\n static extractBorderSegments(geom, env, segs) {\n geom.apply(new (class {\n get interfaces_() {\n return [CoordinateSequenceFilter]\n }\n filter(seq, i) {\n if (i <= 0) return null\n const p0 = seq.getCoordinate(i - 1)\n const p1 = seq.getCoordinate(i)\n const isBorder = OverlapUnion.intersects(env, p0, p1) && !OverlapUnion.containsProperly(env, p0, p1)\n if (isBorder) {\n const seg = new LineSegment(p0, p1)\n segs.add(seg)\n }\n }\n isDone() {\n return false\n }\n isGeometryChanged() {\n return false\n }\n })())\n }\n static unionBuffer(g0, g1) {\n const factory = g0.getFactory()\n const gColl = factory.createGeometryCollection([g0, g1])\n const union = gColl.buffer(0.0)\n return union\n }\n isBorderSegmentsSame(result, env) {\n const segsBefore = this.extractBorderSegments(this._g0, this._g1, env)\n const segsAfter = new ArrayList()\n OverlapUnion.extractBorderSegments(result, env, segsAfter)\n return this.isEqual(segsBefore, segsAfter)\n }\n extractByEnvelope(env, geom, disjointGeoms) {\n const intersectingGeoms = new ArrayList()\n for (let i = 0; i < geom.getNumGeometries(); i++) {\n const elem = geom.getGeometryN(i)\n if (elem.getEnvelopeInternal().intersects(env)) {\n intersectingGeoms.add(elem)\n } else {\n const copy = elem.copy()\n disjointGeoms.add(copy)\n }\n }\n return this._geomFactory.buildGeometry(intersectingGeoms)\n }\n isEqual(segs0, segs1) {\n if (segs0.size() !== segs1.size()) return false\n const segIndex = new HashSet(segs0)\n for (const seg of segs1) \n if (!segIndex.contains(seg)) \n return false\n \n \n return true\n }\n union() {\n const overlapEnv = OverlapUnion.overlapEnvelope(this._g0, this._g1)\n if (overlapEnv.isNull()) {\n const g0Copy = this._g0.copy()\n const g1Copy = this._g1.copy()\n return GeometryCombiner.combine(g0Copy, g1Copy)\n }\n const disjointPolys = new ArrayList()\n const g0Overlap = this.extractByEnvelope(overlapEnv, this._g0, disjointPolys)\n const g1Overlap = this.extractByEnvelope(overlapEnv, this._g1, disjointPolys)\n const unionGeom = this.unionFull(g0Overlap, g1Overlap)\n let result = null\n this._isUnionSafe = this.isBorderSegmentsSame(unionGeom, overlapEnv)\n if (!this._isUnionSafe) \n result = this.unionFull(this._g0, this._g1)\n else \n result = this.combine(unionGeom, disjointPolys)\n \n return result\n }\n combine(unionGeom, disjointPolys) {\n if (disjointPolys.size() <= 0) return unionGeom\n disjointPolys.add(unionGeom)\n const result = GeometryCombiner.combine(disjointPolys)\n return result\n }\n unionFull(geom0, geom1) {\n try {\n return geom0.union(geom1)\n } catch (ex) {\n if (ex instanceof TopologyException) \n return OverlapUnion.unionBuffer(geom0, geom1)\n else throw ex\n } finally {}\n }\n extractBorderSegments(geom0, geom1, env) {\n const segs = new ArrayList()\n OverlapUnion.extractBorderSegments(geom0, env, segs)\n if (geom1 !== null) OverlapUnion.extractBorderSegments(geom1, env, segs)\n return segs\n }\n isUnionOptimized() {\n return this._isUnionSafe\n }\n}\n","import PolygonExtracter from '../../geom/util/PolygonExtracter'\nimport OverlapUnion from './OverlapUnion'\nimport STRtree from '../../index/strtree/STRtree'\nimport Geometry from '../../geom/Geometry'\nimport hasInterface from '../../../../../hasInterface'\nimport GeometryFactory from '../../geom/GeometryFactory'\nimport Polygonal from '../../geom/Polygonal'\nimport ArrayList from '../../../../../java/util/ArrayList'\nimport List from '../../../../../java/util/List'\nexport default class CascadedPolygonUnion {\n constructor() {\n CascadedPolygonUnion.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._inputPolys = null\n this._geomFactory = null\n const polys = arguments[0]\n this._inputPolys = polys\n if (this._inputPolys === null) this._inputPolys = new ArrayList()\n }\n static restrictToPolygons(g) {\n if (hasInterface(g, Polygonal)) \n return g\n \n const polygons = PolygonExtracter.getPolygons(g)\n if (polygons.size() === 1) return polygons.get(0)\n return g.getFactory().createMultiPolygon(GeometryFactory.toPolygonArray(polygons))\n }\n static getGeometry(list, index) {\n if (index >= list.size()) return null\n return list.get(index)\n }\n static union(polys) {\n const op = new CascadedPolygonUnion(polys)\n return op.union()\n }\n reduceToGeometries(geomTree) {\n const geoms = new ArrayList()\n for (let i = geomTree.iterator(); i.hasNext(); ) {\n const o = i.next()\n let geom = null\n if (hasInterface(o, List)) \n geom = this.unionTree(o)\n else if (o instanceof Geometry) \n geom = o\n \n geoms.add(geom)\n }\n return geoms\n }\n union() {\n if (this._inputPolys === null) throw new IllegalStateException('union() method cannot be called twice')\n if (this._inputPolys.isEmpty()) return null\n this._geomFactory = this._inputPolys.iterator().next().getFactory()\n const index = new STRtree(CascadedPolygonUnion.STRTREE_NODE_CAPACITY)\n for (let i = this._inputPolys.iterator(); i.hasNext(); ) {\n const item = i.next()\n index.insert(item.getEnvelopeInternal(), item)\n }\n this._inputPolys = null\n const itemTree = index.itemsTree()\n const unionAll = this.unionTree(itemTree)\n return unionAll\n }\n binaryUnion() {\n if (arguments.length === 1) {\n const geoms = arguments[0]\n return this.binaryUnion(geoms, 0, geoms.size())\n } else if (arguments.length === 3) {\n const geoms = arguments[0], start = arguments[1], end = arguments[2]\n if (end - start <= 1) {\n const g0 = CascadedPolygonUnion.getGeometry(geoms, start)\n return this.unionSafe(g0, null)\n } else if (end - start === 2) {\n return this.unionSafe(CascadedPolygonUnion.getGeometry(geoms, start), CascadedPolygonUnion.getGeometry(geoms, start + 1))\n } else {\n const mid = Math.trunc((end + start) / 2)\n const g0 = this.binaryUnion(geoms, start, mid)\n const g1 = this.binaryUnion(geoms, mid, end)\n return this.unionSafe(g0, g1)\n }\n }\n }\n repeatedUnion(geoms) {\n let union = null\n for (let i = geoms.iterator(); i.hasNext(); ) {\n const g = i.next()\n if (union === null) union = g.copy(); else union = union.union(g)\n }\n return union\n }\n unionSafe(g0, g1) {\n if (g0 === null && g1 === null) return null\n if (g0 === null) return g1.copy()\n if (g1 === null) return g0.copy()\n return this.unionActual(g0, g1)\n }\n unionActual(g0, g1) {\n const union = OverlapUnion.union(g0, g1)\n \n return CascadedPolygonUnion.restrictToPolygons(union)\n }\n unionTree(geomTree) {\n const geoms = this.reduceToGeometries(geomTree)\n const union = this.binaryUnion(geoms)\n return union\n }\n bufferUnion() {\n if (arguments.length === 1) {\n const geoms = arguments[0]\n const factory = geoms.get(0).getFactory()\n const gColl = factory.buildGeometry(geoms)\n const unionAll = gColl.buffer(0.0)\n return unionAll\n } else if (arguments.length === 2) {\n const g0 = arguments[0], g1 = arguments[1]\n const factory = g0.getFactory()\n const gColl = factory.createGeometryCollection([g0, g1])\n const unionAll = gColl.buffer(0.0)\n return unionAll\n }\n }\n}\nCascadedPolygonUnion.STRTREE_NODE_CAPACITY = 4\n","import Geometry from '../../geom/Geometry'\nimport PointGeometryUnion from './PointGeometryUnion'\nimport hasInterface from '../../../../../hasInterface'\nimport Collection from '../../../../../java/util/Collection'\nimport SnapIfNeededOverlayOp from '../overlay/snap/SnapIfNeededOverlayOp'\nimport InputExtracter from './InputExtracter'\nimport OverlayOp from '../overlay/OverlayOp'\nimport CascadedPolygonUnion from './CascadedPolygonUnion'\nexport default class UnaryUnionOp {\n constructor() {\n UnaryUnionOp.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._geomFact = null\n this._extracter = null\n if (arguments.length === 1) {\n if (hasInterface(arguments[0], Collection)) {\n const geoms = arguments[0]\n this.extract(geoms)\n } else if (arguments[0] instanceof Geometry) {\n const geom = arguments[0]\n this.extract(geom)\n }\n } else if (arguments.length === 2) {\n const geoms = arguments[0], geomFact = arguments[1]\n this._geomFact = geomFact\n this.extract(geoms)\n }\n }\n static union() {\n if (arguments.length === 1) {\n if (hasInterface(arguments[0], Collection)) {\n const geoms = arguments[0]\n const op = new UnaryUnionOp(geoms)\n return op.union()\n } else if (arguments[0] instanceof Geometry) {\n const geom = arguments[0]\n const op = new UnaryUnionOp(geom)\n return op.union()\n }\n } else if (arguments.length === 2) {\n const geoms = arguments[0], geomFact = arguments[1]\n const op = new UnaryUnionOp(geoms, geomFact)\n return op.union()\n }\n }\n unionNoOpt(g0) {\n const empty = this._geomFact.createPoint()\n return SnapIfNeededOverlayOp.overlayOp(g0, empty, OverlayOp.UNION)\n }\n unionWithNull(g0, g1) {\n if (g0 === null && g1 === null) return null\n if (g1 === null) return g0\n if (g0 === null) return g1\n return g0.union(g1)\n }\n extract() {\n if (hasInterface(arguments[0], Collection)) {\n const geoms = arguments[0]\n this._extracter = InputExtracter.extract(geoms)\n } else if (arguments[0] instanceof Geometry) {\n const geom = arguments[0]\n this._extracter = InputExtracter.extract(geom)\n }\n }\n union() {\n if (this._geomFact === null) this._geomFact = this._extracter.getFactory()\n if (this._geomFact === null) \n return null\n \n if (this._extracter.isEmpty()) \n return this._geomFact.createEmpty(this._extracter.getDimension())\n \n const points = this._extracter.getExtract(0)\n const lines = this._extracter.getExtract(1)\n const polygons = this._extracter.getExtract(2)\n let unionPoints = null\n if (points.size() > 0) {\n const ptGeom = this._geomFact.buildGeometry(points)\n unionPoints = this.unionNoOpt(ptGeom)\n }\n let unionLines = null\n if (lines.size() > 0) {\n const lineGeom = this._geomFact.buildGeometry(lines)\n unionLines = this.unionNoOpt(lineGeom)\n }\n let unionPolygons = null\n if (polygons.size() > 0) \n unionPolygons = CascadedPolygonUnion.union(polygons)\n \n const unionLA = this.unionWithNull(unionLines, unionPolygons)\n let union = null\n if (unionPoints === null) union = unionLA; else if (unionLA === null) union = unionPoints; else union = PointGeometryUnion.union(unionPoints, unionLA)\n if (union === null) return this._geomFact.createGeometryCollection()\n return union\n }\n}\n","import LineString from '../geom/LineString'\nimport CoordinateList from '../geom/CoordinateList'\nimport Geometry from '../geom/Geometry'\nimport Coordinate from '../geom/Coordinate'\nimport GeometryEditor from '../geom/util/GeometryEditor'\nimport LinearRing from '../geom/LinearRing'\nexport default class PrecisionReducerCoordinateOperation extends GeometryEditor.CoordinateOperation {\n constructor() {\n super()\n PrecisionReducerCoordinateOperation.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._targetPM = null\n this._removeCollapsed = true\n const targetPM = arguments[0], removeCollapsed = arguments[1]\n this._targetPM = targetPM\n this._removeCollapsed = removeCollapsed\n }\n edit() {\n if (arguments.length === 2 && (arguments[1] instanceof Geometry && arguments[0] instanceof Array)) {\n const coordinates = arguments[0], geom = arguments[1]\n if (coordinates.length === 0) return null\n const reducedCoords = new Array(coordinates.length).fill(null)\n for (let i = 0; i < coordinates.length; i++) {\n const coord = new Coordinate(coordinates[i])\n this._targetPM.makePrecise(coord)\n reducedCoords[i] = coord\n }\n const noRepeatedCoordList = new CoordinateList(reducedCoords, false)\n const noRepeatedCoords = noRepeatedCoordList.toCoordinateArray()\n let minLength = 0\n if (geom instanceof LineString) minLength = 2\n if (geom instanceof LinearRing) minLength = 4\n let collapsedCoords = reducedCoords\n if (this._removeCollapsed) collapsedCoords = null\n if (noRepeatedCoords.length < minLength) \n return collapsedCoords\n \n return noRepeatedCoords\n } else {\n return super.edit.apply(this, arguments)\n }\n }\n}\n","import hasInterface from '../../../../hasInterface'\nimport GeometryFactory from '../geom/GeometryFactory'\nimport IsValidOp from '../operation/valid/IsValidOp'\nimport GeometryEditor from '../geom/util/GeometryEditor'\nimport BufferOp from '../operation/buffer/BufferOp'\nimport Polygonal from '../geom/Polygonal'\nimport PrecisionReducerCoordinateOperation from './PrecisionReducerCoordinateOperation'\nexport default class GeometryPrecisionReducer {\n constructor() {\n GeometryPrecisionReducer.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._targetPM = null\n this._removeCollapsed = true\n this._changePrecisionModel = false\n this._isPointwise = false\n const pm = arguments[0]\n this._targetPM = pm\n }\n static reduce(g, precModel) {\n const reducer = new GeometryPrecisionReducer(precModel)\n return reducer.reduce(g)\n }\n static reducePointwise(g, precModel) {\n const reducer = new GeometryPrecisionReducer(precModel)\n reducer.setPointwise(true)\n return reducer.reduce(g)\n }\n fixPolygonalTopology(geom) {\n let geomToBuffer = geom\n if (!this._changePrecisionModel) \n geomToBuffer = this.changePM(geom, this._targetPM)\n \n const bufGeom = BufferOp.bufferOp(geomToBuffer, 0)\n return bufGeom\n }\n reducePointwise(geom) {\n let geomEdit = null\n if (this._changePrecisionModel) {\n const newFactory = this.createFactory(geom.getFactory(), this._targetPM)\n geomEdit = new GeometryEditor(newFactory)\n } else {\n geomEdit = new GeometryEditor()\n }\n let finalRemoveCollapsed = this._removeCollapsed\n if (geom.getDimension() >= 2) finalRemoveCollapsed = true\n const reduceGeom = geomEdit.edit(geom, new PrecisionReducerCoordinateOperation(this._targetPM, finalRemoveCollapsed))\n return reduceGeom\n }\n changePM(geom, newPM) {\n const geomEditor = this.createEditor(geom.getFactory(), newPM)\n return geomEditor.edit(geom, new GeometryEditor.NoOpGeometryOperation())\n }\n setRemoveCollapsedComponents(removeCollapsed) {\n this._removeCollapsed = removeCollapsed\n }\n createFactory(inputFactory, pm) {\n const newFactory = new GeometryFactory(pm, inputFactory.getSRID(), inputFactory.getCoordinateSequenceFactory())\n return newFactory\n }\n setChangePrecisionModel(changePrecisionModel) {\n this._changePrecisionModel = changePrecisionModel\n }\n reduce(geom) {\n const reducePW = this.reducePointwise(geom)\n if (this._isPointwise) return reducePW\n if (!hasInterface(reducePW, Polygonal)) return reducePW\n if (IsValidOp.isValid(reducePW)) return reducePW\n return this.fixPolygonalTopology(reducePW)\n }\n setPointwise(isPointwise) {\n this._isPointwise = isPointwise\n }\n createEditor(geomFactory, newPM) {\n if (geomFactory.getPrecisionModel() === newPM) return new GeometryEditor()\n const newFactory = this.createFactory(geomFactory, newPM)\n const geomEdit = new GeometryEditor(newFactory)\n return geomEdit\n }\n}\n","import CoordinateList from '../geom/CoordinateList'\nimport Coordinate from '../geom/Coordinate'\nimport LineSegment from '../geom/LineSegment'\nexport default class DouglasPeuckerLineSimplifier {\n constructor() {\n DouglasPeuckerLineSimplifier.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._pts = null\n this._usePt = null\n this._distanceTolerance = null\n this._seg = new LineSegment()\n const pts = arguments[0]\n this._pts = pts\n }\n static simplify(pts, distanceTolerance) {\n const simp = new DouglasPeuckerLineSimplifier(pts)\n simp.setDistanceTolerance(distanceTolerance)\n return simp.simplify()\n }\n simplifySection(i, j) {\n if (i + 1 === j) \n return null\n \n this._seg.p0 = this._pts[i]\n this._seg.p1 = this._pts[j]\n let maxDistance = -1.0\n let maxIndex = i\n for (let k = i + 1; k < j; k++) {\n const distance = this._seg.distance(this._pts[k])\n if (distance > maxDistance) {\n maxDistance = distance\n maxIndex = k\n }\n }\n if (maxDistance <= this._distanceTolerance) {\n for (let k = i + 1; k < j; k++) \n this._usePt[k] = false\n \n } else {\n this.simplifySection(i, maxIndex)\n this.simplifySection(maxIndex, j)\n }\n }\n setDistanceTolerance(distanceTolerance) {\n this._distanceTolerance = distanceTolerance\n }\n simplify() {\n this._usePt = new Array(this._pts.length).fill(null)\n for (let i = 0; i < this._pts.length; i++) \n this._usePt[i] = true\n \n this.simplifySection(0, this._pts.length - 1)\n const coordList = new CoordinateList()\n for (let i = 0; i < this._pts.length; i++) \n if (this._usePt[i]) coordList.add(new Coordinate(this._pts[i]))\n \n return coordList.toCoordinateArray()\n }\n}\n","import DouglasPeuckerLineSimplifier from './DouglasPeuckerLineSimplifier'\nimport GeometryTransformer from '../geom/util/GeometryTransformer'\nimport IllegalArgumentException from '../../../../java/lang/IllegalArgumentException'\nimport Polygon from '../geom/Polygon'\nimport LinearRing from '../geom/LinearRing'\nimport MultiPolygon from '../geom/MultiPolygon'\nexport default class DouglasPeuckerSimplifier {\n constructor() {\n DouglasPeuckerSimplifier.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._inputGeom = null\n this._distanceTolerance = null\n this._isEnsureValidTopology = true\n const inputGeom = arguments[0]\n this._inputGeom = inputGeom\n }\n static simplify(geom, distanceTolerance) {\n const tss = new DouglasPeuckerSimplifier(geom)\n tss.setDistanceTolerance(distanceTolerance)\n return tss.getResultGeometry()\n }\n setEnsureValid(isEnsureValidTopology) {\n this._isEnsureValidTopology = isEnsureValidTopology\n }\n getResultGeometry() {\n if (this._inputGeom.isEmpty()) return this._inputGeom.copy()\n return new DPTransformer(this._isEnsureValidTopology, this._distanceTolerance).transform(this._inputGeom)\n }\n setDistanceTolerance(distanceTolerance) {\n if (distanceTolerance < 0.0) throw new IllegalArgumentException('Tolerance must be non-negative')\n this._distanceTolerance = distanceTolerance\n }\n}\nclass DPTransformer extends GeometryTransformer {\n constructor() {\n super()\n DPTransformer.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._isEnsureValidTopology = true\n this._distanceTolerance = null\n const isEnsureValidTopology = arguments[0], distanceTolerance = arguments[1]\n this._isEnsureValidTopology = isEnsureValidTopology\n this._distanceTolerance = distanceTolerance\n }\n transformPolygon(geom, parent) {\n if (geom.isEmpty()) return null\n const rawGeom = super.transformPolygon.call(this, geom, parent)\n if (parent instanceof MultiPolygon) \n return rawGeom\n \n return this.createValidArea(rawGeom)\n }\n createValidArea(rawAreaGeom) {\n if (this._isEnsureValidTopology) return rawAreaGeom.buffer(0.0)\n return rawAreaGeom\n }\n transformCoordinates(coords, parent) {\n const inputPts = coords.toCoordinateArray()\n let newPts = null\n if (inputPts.length === 0) \n newPts = new Array(0).fill(null)\n else \n newPts = DouglasPeuckerLineSimplifier.simplify(inputPts, this._distanceTolerance)\n \n return this._factory.getCoordinateSequenceFactory().create(newPts)\n }\n transformMultiPolygon(geom, parent) {\n const rawGeom = super.transformMultiPolygon.call(this, geom, parent)\n return this.createValidArea(rawGeom)\n }\n transformLinearRing(geom, parent) {\n const removeDegenerateRings = parent instanceof Polygon\n const simpResult = super.transformLinearRing.call(this, geom, parent)\n if (removeDegenerateRings && !(simpResult instanceof LinearRing)) return null\n \n return simpResult\n }\n}\nDouglasPeuckerSimplifier.DPTransformer = DPTransformer\n","import LineSegment from '../geom/LineSegment'\nexport default class TaggedLineSegment extends LineSegment {\n constructor() {\n super()\n TaggedLineSegment.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._parent = null\n this._index = null\n if (arguments.length === 2) {\n const p0 = arguments[0], p1 = arguments[1]\n TaggedLineSegment.constructor_.call(this, p0, p1, null, -1)\n } else if (arguments.length === 4) {\n const p0 = arguments[0], p1 = arguments[1], parent = arguments[2], index = arguments[3]\n LineSegment.constructor_.call(this, p0, p1)\n this._parent = parent\n this._index = index\n }\n }\n getIndex() {\n return this._index\n }\n getParent() {\n return this._parent\n }\n}\n","import TaggedLineSegment from './TaggedLineSegment'\nimport ArrayList from '../../../../java/util/ArrayList'\nexport default class TaggedLineString {\n constructor() {\n TaggedLineString.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._parentLine = null\n this._segs = null\n this._resultSegs = new ArrayList()\n this._minimumSize = null\n if (arguments.length === 1) {\n const parentLine = arguments[0]\n TaggedLineString.constructor_.call(this, parentLine, 2)\n } else if (arguments.length === 2) {\n const parentLine = arguments[0], minimumSize = arguments[1]\n this._parentLine = parentLine\n this._minimumSize = minimumSize\n this.init()\n }\n }\n static extractCoordinates(segs) {\n const pts = new Array(segs.size() + 1).fill(null)\n let seg = null\n for (let i = 0; i < segs.size(); i++) {\n seg = segs.get(i)\n pts[i] = seg.p0\n }\n pts[pts.length - 1] = seg.p1\n return pts\n }\n addToResult(seg) {\n this._resultSegs.add(seg)\n }\n asLineString() {\n return this._parentLine.getFactory().createLineString(TaggedLineString.extractCoordinates(this._resultSegs))\n }\n getResultSize() {\n const resultSegsSize = this._resultSegs.size()\n return resultSegsSize === 0 ? 0 : resultSegsSize + 1\n }\n getParent() {\n return this._parentLine\n }\n getSegment(i) {\n return this._segs[i]\n }\n getParentCoordinates() {\n return this._parentLine.getCoordinates()\n }\n getMinimumSize() {\n return this._minimumSize\n }\n asLinearRing() {\n return this._parentLine.getFactory().createLinearRing(TaggedLineString.extractCoordinates(this._resultSegs))\n }\n getSegments() {\n return this._segs\n }\n init() {\n const pts = this._parentLine.getCoordinates()\n this._segs = new Array(pts.length - 1).fill(null)\n for (let i = 0; i < pts.length - 1; i++) {\n const seg = new TaggedLineSegment(pts[i], pts[i + 1], this._parentLine, i)\n this._segs[i] = seg\n }\n }\n getResultCoordinates() {\n return TaggedLineString.extractCoordinates(this._resultSegs)\n }\n}\n","import Quadtree from '../index/quadtree/Quadtree'\nimport ItemVisitor from '../index/ItemVisitor'\nimport LineSegment from '../geom/LineSegment'\nimport ArrayList from '../../../../java/util/ArrayList'\nimport Envelope from '../geom/Envelope'\nimport TaggedLineString from './TaggedLineString'\nexport default class LineSegmentIndex {\n constructor() {\n LineSegmentIndex.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._index = new Quadtree()\n }\n remove(seg) {\n this._index.remove(new Envelope(seg.p0, seg.p1), seg)\n }\n add() {\n if (arguments[0] instanceof TaggedLineString) {\n const line = arguments[0]\n const segs = line.getSegments()\n for (let i = 0; i < segs.length; i++) {\n const seg = segs[i]\n this.add(seg)\n }\n } else if (arguments[0] instanceof LineSegment) {\n const seg = arguments[0]\n this._index.insert(new Envelope(seg.p0, seg.p1), seg)\n }\n }\n query(querySeg) {\n const env = new Envelope(querySeg.p0, querySeg.p1)\n const visitor = new LineSegmentVisitor(querySeg)\n this._index.query(env, visitor)\n const itemsFound = visitor.getItems()\n return itemsFound\n }\n}\nclass LineSegmentVisitor {\n constructor() {\n LineSegmentVisitor.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._querySeg = null\n this._items = new ArrayList()\n const querySeg = arguments[0]\n this._querySeg = querySeg\n }\n visitItem(item) {\n const seg = item\n if (Envelope.intersects(seg.p0, seg.p1, this._querySeg.p0, this._querySeg.p1)) this._items.add(item)\n }\n getItems() {\n return this._items\n }\n get interfaces_() {\n return [ItemVisitor]\n }\n}\n","import LineSegment from '../geom/LineSegment'\nimport LineSegmentIndex from './LineSegmentIndex'\nimport RobustLineIntersector from '../algorithm/RobustLineIntersector'\nexport default class TaggedLineStringSimplifier {\n constructor() {\n TaggedLineStringSimplifier.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._li = new RobustLineIntersector()\n this._inputIndex = new LineSegmentIndex()\n this._outputIndex = new LineSegmentIndex()\n this._line = null\n this._linePts = null\n this._distanceTolerance = 0.0\n const inputIndex = arguments[0], outputIndex = arguments[1]\n this._inputIndex = inputIndex\n this._outputIndex = outputIndex\n }\n static isInLineSection(line, sectionIndex, seg) {\n if (seg.getParent() !== line.getParent()) return false\n const segIndex = seg.getIndex()\n if (segIndex >= sectionIndex[0] && segIndex < sectionIndex[1]) return true\n return false\n }\n flatten(start, end) {\n const p0 = this._linePts[start]\n const p1 = this._linePts[end]\n const newSeg = new LineSegment(p0, p1)\n this.remove(this._line, start, end)\n this._outputIndex.add(newSeg)\n return newSeg\n }\n hasBadIntersection(parentLine, sectionIndex, candidateSeg) {\n if (this.hasBadOutputIntersection(candidateSeg)) return true\n if (this.hasBadInputIntersection(parentLine, sectionIndex, candidateSeg)) return true\n return false\n }\n setDistanceTolerance(distanceTolerance) {\n this._distanceTolerance = distanceTolerance\n }\n simplifySection(i, j, depth) {\n depth += 1\n const sectionIndex = new Array(2).fill(null)\n if (i + 1 === j) {\n const newSeg = this._line.getSegment(i)\n this._line.addToResult(newSeg)\n return null\n }\n let isValidToSimplify = true\n if (this._line.getResultSize() < this._line.getMinimumSize()) {\n const worstCaseSize = depth + 1\n if (worstCaseSize < this._line.getMinimumSize()) isValidToSimplify = false\n }\n const distance = new Array(1).fill(null)\n const furthestPtIndex = this.findFurthestPoint(this._linePts, i, j, distance)\n if (distance[0] > this._distanceTolerance) isValidToSimplify = false\n const candidateSeg = new LineSegment()\n candidateSeg.p0 = this._linePts[i]\n candidateSeg.p1 = this._linePts[j]\n sectionIndex[0] = i\n sectionIndex[1] = j\n if (this.hasBadIntersection(this._line, sectionIndex, candidateSeg)) isValidToSimplify = false\n if (isValidToSimplify) {\n const newSeg = this.flatten(i, j)\n this._line.addToResult(newSeg)\n return null\n }\n this.simplifySection(i, furthestPtIndex, depth)\n this.simplifySection(furthestPtIndex, j, depth)\n }\n hasBadOutputIntersection(candidateSeg) {\n const querySegs = this._outputIndex.query(candidateSeg)\n for (let i = querySegs.iterator(); i.hasNext(); ) {\n const querySeg = i.next()\n if (this.hasInteriorIntersection(querySeg, candidateSeg)) \n return true\n \n }\n return false\n }\n findFurthestPoint(pts, i, j, maxDistance) {\n const seg = new LineSegment()\n seg.p0 = pts[i]\n seg.p1 = pts[j]\n let maxDist = -1.0\n let maxIndex = i\n for (let k = i + 1; k < j; k++) {\n const midPt = pts[k]\n const distance = seg.distance(midPt)\n if (distance > maxDist) {\n maxDist = distance\n maxIndex = k\n }\n }\n maxDistance[0] = maxDist\n return maxIndex\n }\n simplify(line) {\n this._line = line\n this._linePts = line.getParentCoordinates()\n this.simplifySection(0, this._linePts.length - 1, 0)\n }\n remove(line, start, end) {\n for (let i = start; i < end; i++) {\n const seg = line.getSegment(i)\n this._inputIndex.remove(seg)\n }\n }\n hasInteriorIntersection(seg0, seg1) {\n this._li.computeIntersection(seg0.p0, seg0.p1, seg1.p0, seg1.p1)\n return this._li.isInteriorIntersection()\n }\n hasBadInputIntersection(parentLine, sectionIndex, candidateSeg) {\n const querySegs = this._inputIndex.query(candidateSeg)\n for (let i = querySegs.iterator(); i.hasNext(); ) {\n const querySeg = i.next()\n if (this.hasInteriorIntersection(querySeg, candidateSeg)) {\n if (TaggedLineStringSimplifier.isInLineSection(parentLine, sectionIndex, querySeg)) continue\n return true\n }\n }\n return false\n }\n}\n","import TaggedLineStringSimplifier from './TaggedLineStringSimplifier'\nimport LineSegmentIndex from './LineSegmentIndex'\nexport default class TaggedLinesSimplifier {\n constructor() {\n TaggedLinesSimplifier.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._inputIndex = new LineSegmentIndex()\n this._outputIndex = new LineSegmentIndex()\n this._distanceTolerance = 0.0\n }\n setDistanceTolerance(distanceTolerance) {\n this._distanceTolerance = distanceTolerance\n }\n simplify(taggedLines) {\n for (let i = taggedLines.iterator(); i.hasNext(); ) \n this._inputIndex.add(i.next())\n \n for (let i = taggedLines.iterator(); i.hasNext(); ) {\n const tlss = new TaggedLineStringSimplifier(this._inputIndex, this._outputIndex)\n tlss.setDistanceTolerance(this._distanceTolerance)\n tlss.simplify(i.next())\n }\n }\n}\n","import LineString from '../geom/LineString'\nimport HashMap from '../../../../java/util/HashMap'\nimport GeometryTransformer from '../geom/util/GeometryTransformer'\nimport TaggedLinesSimplifier from './TaggedLinesSimplifier'\nimport IllegalArgumentException from '../../../../java/lang/IllegalArgumentException'\nimport GeometryComponentFilter from '../geom/GeometryComponentFilter'\nimport TaggedLineString from './TaggedLineString'\nexport default class TopologyPreservingSimplifier {\n constructor() {\n TopologyPreservingSimplifier.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._inputGeom = null\n this._lineSimplifier = new TaggedLinesSimplifier()\n this._linestringMap = null\n const inputGeom = arguments[0]\n this._inputGeom = inputGeom\n }\n static simplify(geom, distanceTolerance) {\n const tss = new TopologyPreservingSimplifier(geom)\n tss.setDistanceTolerance(distanceTolerance)\n return tss.getResultGeometry()\n }\n getResultGeometry() {\n if (this._inputGeom.isEmpty()) return this._inputGeom.copy()\n this._linestringMap = new HashMap()\n this._inputGeom.apply(new LineStringMapBuilderFilter(this))\n this._lineSimplifier.simplify(this._linestringMap.values())\n const result = new LineStringTransformer(this._linestringMap).transform(this._inputGeom)\n return result\n }\n setDistanceTolerance(distanceTolerance) {\n if (distanceTolerance < 0.0) throw new IllegalArgumentException('Tolerance must be non-negative')\n this._lineSimplifier.setDistanceTolerance(distanceTolerance)\n }\n}\nclass LineStringTransformer extends GeometryTransformer {\n constructor() {\n super()\n LineStringTransformer.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._linestringMap = null\n const linestringMap = arguments[0]\n this._linestringMap = linestringMap\n }\n transformCoordinates(coords, parent) {\n if (coords.size() === 0) return null\n if (parent instanceof LineString) {\n const taggedLine = this._linestringMap.get(parent)\n return this.createCoordinateSequence(taggedLine.getResultCoordinates())\n }\n return super.transformCoordinates.call(this, coords, parent)\n }\n}\nclass LineStringMapBuilderFilter {\n constructor() {\n LineStringMapBuilderFilter.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this.tps = null\n const tps = arguments[0]\n this.tps = tps\n }\n filter(geom) {\n if (geom instanceof LineString) {\n const line = geom\n if (line.isEmpty()) return null\n const minSize = line.isClosed() ? 4 : 2\n const taggedLine = new TaggedLineString(line, minSize)\n this.tps._linestringMap.put(line, taggedLine)\n }\n }\n get interfaces_() {\n return [GeometryComponentFilter]\n }\n}\nTopologyPreservingSimplifier.LineStringTransformer = LineStringTransformer\nTopologyPreservingSimplifier.LineStringMapBuilderFilter = LineStringMapBuilderFilter\n","import CoordinateList from '../geom/CoordinateList'\nimport Coordinate from '../geom/Coordinate'\nimport Double from '../../../../java/lang/Double'\nimport Triangle from '../geom/Triangle'\nexport default class VWLineSimplifier {\n constructor() {\n VWLineSimplifier.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._pts = null\n this._tolerance = null\n const pts = arguments[0], distanceTolerance = arguments[1]\n this._pts = pts\n this._tolerance = distanceTolerance * distanceTolerance\n }\n static simplify(pts, distanceTolerance) {\n const simp = new VWLineSimplifier(pts, distanceTolerance)\n return simp.simplify()\n }\n simplifyVertex(vwLine) {\n let curr = vwLine\n let minArea = curr.getArea()\n let minVertex = null\n while (curr !== null) {\n const area = curr.getArea()\n if (area < minArea) {\n minArea = area\n minVertex = curr\n }\n curr = curr._next\n }\n if (minVertex !== null && minArea < this._tolerance) \n minVertex.remove()\n \n if (!vwLine.isLive()) return -1\n return minArea\n }\n simplify() {\n const vwLine = VWVertex.buildLine(this._pts)\n let minArea = this._tolerance\n do \n minArea = this.simplifyVertex(vwLine)\n while (minArea < this._tolerance)\n const simp = vwLine.getCoordinates()\n if (simp.length < 2) \n return [simp[0], new Coordinate(simp[0])]\n \n return simp\n }\n}\nclass VWVertex {\n constructor() {\n VWVertex.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._pt = null\n this._prev = null\n this._next = null\n this._area = VWVertex.MAX_AREA\n this._isLive = true\n const pt = arguments[0]\n this._pt = pt\n }\n static buildLine(pts) {\n let first = null\n let prev = null\n for (let i = 0; i < pts.length; i++) {\n const v = new VWVertex(pts[i])\n if (first === null) first = v\n v.setPrev(prev)\n if (prev !== null) {\n prev.setNext(v)\n prev.updateArea()\n }\n prev = v\n }\n return first\n }\n getCoordinates() {\n const coords = new CoordinateList()\n let curr = this\n do {\n coords.add(curr._pt, false)\n curr = curr._next\n } while (curr !== null)\n return coords.toCoordinateArray()\n }\n getArea() {\n return this._area\n }\n updateArea() {\n if (this._prev === null || this._next === null) {\n this._area = VWVertex.MAX_AREA\n return null\n }\n this._area = Math.abs(Triangle.area(this._prev._pt, this._pt, this._next._pt))\n }\n remove() {\n const tmpPrev = this._prev\n const tmpNext = this._next\n let result = null\n if (this._prev !== null) {\n this._prev.setNext(tmpNext)\n this._prev.updateArea()\n result = this._prev\n }\n if (this._next !== null) {\n this._next.setPrev(tmpPrev)\n this._next.updateArea()\n if (result === null) result = this._next\n }\n this._isLive = false\n return result\n }\n isLive() {\n return this._isLive\n }\n setPrev(prev) {\n this._prev = prev\n }\n setNext(next) {\n this._next = next\n }\n}\nVWVertex.MAX_AREA = Double.MAX_VALUE\nVWLineSimplifier.VWVertex = VWVertex\n","import GeometryTransformer from '../geom/util/GeometryTransformer'\nimport VWLineSimplifier from './VWLineSimplifier'\nimport IllegalArgumentException from '../../../../java/lang/IllegalArgumentException'\nimport Polygon from '../geom/Polygon'\nimport LinearRing from '../geom/LinearRing'\nimport MultiPolygon from '../geom/MultiPolygon'\nexport default class VWSimplifier {\n constructor() {\n VWSimplifier.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._inputGeom = null\n this._distanceTolerance = null\n this._isEnsureValidTopology = true\n const inputGeom = arguments[0]\n this._inputGeom = inputGeom\n }\n static simplify(geom, distanceTolerance) {\n const simp = new VWSimplifier(geom)\n simp.setDistanceTolerance(distanceTolerance)\n return simp.getResultGeometry()\n }\n setEnsureValid(isEnsureValidTopology) {\n this._isEnsureValidTopology = isEnsureValidTopology\n }\n getResultGeometry() {\n if (this._inputGeom.isEmpty()) return this._inputGeom.copy()\n return new VWTransformer(this._isEnsureValidTopology, this._distanceTolerance).transform(this._inputGeom)\n }\n setDistanceTolerance(distanceTolerance) {\n if (distanceTolerance < 0.0) throw new IllegalArgumentException('Tolerance must be non-negative')\n this._distanceTolerance = distanceTolerance\n }\n}\nclass VWTransformer extends GeometryTransformer {\n constructor() {\n super()\n VWTransformer.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._isEnsureValidTopology = true\n this._distanceTolerance = null\n const isEnsureValidTopology = arguments[0], distanceTolerance = arguments[1]\n this._isEnsureValidTopology = isEnsureValidTopology\n this._distanceTolerance = distanceTolerance\n }\n transformPolygon(geom, parent) {\n if (geom.isEmpty()) return null\n const rawGeom = super.transformPolygon.call(this, geom, parent)\n if (parent instanceof MultiPolygon) \n return rawGeom\n \n return this.createValidArea(rawGeom)\n }\n createValidArea(rawAreaGeom) {\n if (this._isEnsureValidTopology) return rawAreaGeom.buffer(0.0)\n return rawAreaGeom\n }\n transformCoordinates(coords, parent) {\n const inputPts = coords.toCoordinateArray()\n let newPts = null\n if (inputPts.length === 0) \n newPts = new Array(0).fill(null)\n else \n newPts = VWLineSimplifier.simplify(inputPts, this._distanceTolerance)\n \n return this._factory.getCoordinateSequenceFactory().create(newPts)\n }\n transformMultiPolygon(geom, parent) {\n const rawGeom = super.transformMultiPolygon.call(this, geom, parent)\n return this.createValidArea(rawGeom)\n }\n transformLinearRing(geom, parent) {\n const removeDegenerateRings = parent instanceof Polygon\n const simpResult = super.transformLinearRing.call(this, geom, parent)\n if (removeDegenerateRings && !(simpResult instanceof LinearRing)) return null\n \n return simpResult\n }\n}\nVWSimplifier.VWTransformer = VWTransformer\n","import Coordinate from '../geom/Coordinate'\nexport default class SplitSegment {\n constructor() {\n SplitSegment.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._seg = null\n this._segLen = null\n this._splitPt = null\n this._minimumLen = 0.0\n const seg = arguments[0]\n this._seg = seg\n this._segLen = seg.getLength()\n }\n static pointAlongReverse(seg, segmentLengthFraction) {\n const coord = new Coordinate()\n coord.x = seg.p1.x - segmentLengthFraction * (seg.p1.x - seg.p0.x)\n coord.y = seg.p1.y - segmentLengthFraction * (seg.p1.y - seg.p0.y)\n return coord\n }\n splitAt() {\n if (arguments.length === 1) {\n const pt = arguments[0]\n const minFrac = this._minimumLen / this._segLen\n if (pt.distance(this._seg.p0) < this._minimumLen) {\n this._splitPt = this._seg.pointAlong(minFrac)\n return null\n }\n if (pt.distance(this._seg.p1) < this._minimumLen) {\n this._splitPt = SplitSegment.pointAlongReverse(this._seg, minFrac)\n return null\n }\n this._splitPt = pt\n } else if (arguments.length === 2) {\n const length = arguments[0], endPt = arguments[1]\n const actualLen = this.getConstrainedLength(length)\n const frac = actualLen / this._segLen\n if (endPt.equals2D(this._seg.p0)) this._splitPt = this._seg.pointAlong(frac); else this._splitPt = SplitSegment.pointAlongReverse(this._seg, frac)\n }\n }\n setMinimumLength(minLen) {\n this._minimumLen = minLen\n }\n getConstrainedLength(len) {\n if (len < this._minimumLen) return this._minimumLen\n return len\n }\n getSplitPoint() {\n return this._splitPt\n }\n}\n","export default class ConstraintSplitPointFinder {\n findSplitPoint(seg, encroachPt) {}\n}\n","import SplitSegment from './SplitSegment'\nimport ConstraintSplitPointFinder from './ConstraintSplitPointFinder'\nexport default class NonEncroachingSplitPointFinder {\n static projectedSplitPoint(seg, encroachPt) {\n const lineSeg = seg.getLineSegment()\n const projPt = lineSeg.project(encroachPt)\n return projPt\n }\n findSplitPoint(seg, encroachPt) {\n const lineSeg = seg.getLineSegment()\n const segLen = lineSeg.getLength()\n const midPtLen = segLen / 2\n const splitSeg = new SplitSegment(lineSeg)\n const projPt = NonEncroachingSplitPointFinder.projectedSplitPoint(seg, encroachPt)\n const nonEncroachDiam = projPt.distance(encroachPt) * 2 * 0.8\n let maxSplitLen = nonEncroachDiam\n if (maxSplitLen > midPtLen) \n maxSplitLen = midPtLen\n \n splitSeg.setMinimumLength(maxSplitLen)\n splitSeg.splitAt(projPt)\n return splitSeg.getSplitPoint()\n }\n get interfaces_() {\n return [ConstraintSplitPointFinder]\n }\n}\n","import WKTWriter from '../../io/WKTWriter'\nimport CoordinateArraySequence from '../../geom/impl/CoordinateArraySequence'\nimport DD from '../../math/DD'\nimport System from '../../../../../java/lang/System'\nimport Triangle from '../../geom/Triangle'\nexport default class TrianglePredicate {\n static triArea(a, b, c) {\n return (b.x - a.x) * (c.y - a.y) - (b.y - a.y) * (c.x - a.x)\n }\n static isInCircleDDNormalized(a, b, c, p) {\n const adx = DD.valueOf(a.x).selfSubtract(p.x)\n const ady = DD.valueOf(a.y).selfSubtract(p.y)\n const bdx = DD.valueOf(b.x).selfSubtract(p.x)\n const bdy = DD.valueOf(b.y).selfSubtract(p.y)\n const cdx = DD.valueOf(c.x).selfSubtract(p.x)\n const cdy = DD.valueOf(c.y).selfSubtract(p.y)\n const abdet = adx.multiply(bdy).selfSubtract(bdx.multiply(ady))\n const bcdet = bdx.multiply(cdy).selfSubtract(cdx.multiply(bdy))\n const cadet = cdx.multiply(ady).selfSubtract(adx.multiply(cdy))\n const alift = adx.multiply(adx).selfAdd(ady.multiply(ady))\n const blift = bdx.multiply(bdx).selfAdd(bdy.multiply(bdy))\n const clift = cdx.multiply(cdx).selfAdd(cdy.multiply(cdy))\n const sum = alift.selfMultiply(bcdet).selfAdd(blift.selfMultiply(cadet)).selfAdd(clift.selfMultiply(abdet))\n const isInCircle = sum.doubleValue() > 0\n return isInCircle\n }\n static checkRobustInCircle(a, b, c, p) {\n const nonRobustInCircle = TrianglePredicate.isInCircleNonRobust(a, b, c, p)\n const isInCircleDD = TrianglePredicate.isInCircleDDSlow(a, b, c, p)\n const isInCircleCC = TrianglePredicate.isInCircleCC(a, b, c, p)\n const circumCentre = Triangle.circumcentre(a, b, c)\n System.out.println('p radius diff a = ' + Math.abs(p.distance(circumCentre) - a.distance(circumCentre)) / a.distance(circumCentre))\n if (nonRobustInCircle !== isInCircleDD || nonRobustInCircle !== isInCircleCC) {\n System.out.println('inCircle robustness failure (double result = ' + nonRobustInCircle + ', DD result = ' + isInCircleDD + ', CC result = ' + isInCircleCC + ')')\n System.out.println(WKTWriter.toLineString(new CoordinateArraySequence([a, b, c, p])))\n System.out.println('Circumcentre = ' + WKTWriter.toPoint(circumCentre) + ' radius = ' + a.distance(circumCentre))\n System.out.println('p radius diff a = ' + Math.abs(p.distance(circumCentre) / a.distance(circumCentre) - 1))\n System.out.println('p radius diff b = ' + Math.abs(p.distance(circumCentre) / b.distance(circumCentre) - 1))\n System.out.println('p radius diff c = ' + Math.abs(p.distance(circumCentre) / c.distance(circumCentre) - 1))\n System.out.println()\n }\n }\n static isInCircleDDFast(a, b, c, p) {\n const aTerm = DD.sqr(a.x).selfAdd(DD.sqr(a.y)).selfMultiply(TrianglePredicate.triAreaDDFast(b, c, p))\n const bTerm = DD.sqr(b.x).selfAdd(DD.sqr(b.y)).selfMultiply(TrianglePredicate.triAreaDDFast(a, c, p))\n const cTerm = DD.sqr(c.x).selfAdd(DD.sqr(c.y)).selfMultiply(TrianglePredicate.triAreaDDFast(a, b, p))\n const pTerm = DD.sqr(p.x).selfAdd(DD.sqr(p.y)).selfMultiply(TrianglePredicate.triAreaDDFast(a, b, c))\n const sum = aTerm.selfSubtract(bTerm).selfAdd(cTerm).selfSubtract(pTerm)\n const isInCircle = sum.doubleValue() > 0\n return isInCircle\n }\n static isInCircleCC(a, b, c, p) {\n const cc = Triangle.circumcentre(a, b, c)\n const ccRadius = a.distance(cc)\n const pRadiusDiff = p.distance(cc) - ccRadius\n return pRadiusDiff <= 0\n }\n static isInCircleNormalized(a, b, c, p) {\n const adx = a.x - p.x\n const ady = a.y - p.y\n const bdx = b.x - p.x\n const bdy = b.y - p.y\n const cdx = c.x - p.x\n const cdy = c.y - p.y\n const abdet = adx * bdy - bdx * ady\n const bcdet = bdx * cdy - cdx * bdy\n const cadet = cdx * ady - adx * cdy\n const alift = adx * adx + ady * ady\n const blift = bdx * bdx + bdy * bdy\n const clift = cdx * cdx + cdy * cdy\n const disc = alift * bcdet + blift * cadet + clift * abdet\n return disc > 0\n }\n static isInCircleDDSlow(a, b, c, p) {\n const px = DD.valueOf(p.x)\n const py = DD.valueOf(p.y)\n const ax = DD.valueOf(a.x)\n const ay = DD.valueOf(a.y)\n const bx = DD.valueOf(b.x)\n const by = DD.valueOf(b.y)\n const cx = DD.valueOf(c.x)\n const cy = DD.valueOf(c.y)\n const aTerm = ax.multiply(ax).add(ay.multiply(ay)).multiply(TrianglePredicate.triAreaDDSlow(bx, by, cx, cy, px, py))\n const bTerm = bx.multiply(bx).add(by.multiply(by)).multiply(TrianglePredicate.triAreaDDSlow(ax, ay, cx, cy, px, py))\n const cTerm = cx.multiply(cx).add(cy.multiply(cy)).multiply(TrianglePredicate.triAreaDDSlow(ax, ay, bx, by, px, py))\n const pTerm = px.multiply(px).add(py.multiply(py)).multiply(TrianglePredicate.triAreaDDSlow(ax, ay, bx, by, cx, cy))\n const sum = aTerm.subtract(bTerm).add(cTerm).subtract(pTerm)\n const isInCircle = sum.doubleValue() > 0\n return isInCircle\n }\n static isInCircleNonRobust(a, b, c, p) {\n const isInCircle = (a.x * a.x + a.y * a.y) * TrianglePredicate.triArea(b, c, p) - (b.x * b.x + b.y * b.y) * TrianglePredicate.triArea(a, c, p) + (c.x * c.x + c.y * c.y) * TrianglePredicate.triArea(a, b, p) - (p.x * p.x + p.y * p.y) * TrianglePredicate.triArea(a, b, c) > 0\n return isInCircle\n }\n static isInCircleRobust(a, b, c, p) {\n return TrianglePredicate.isInCircleNormalized(a, b, c, p)\n }\n static triAreaDDSlow(ax, ay, bx, by, cx, cy) {\n return bx.subtract(ax).multiply(cy.subtract(ay)).subtract(by.subtract(ay).multiply(cx.subtract(ax)))\n }\n static triAreaDDFast(a, b, c) {\n const t1 = DD.valueOf(b.x).selfSubtract(a.x).selfMultiply(DD.valueOf(c.y).selfSubtract(a.y))\n const t2 = DD.valueOf(b.y).selfSubtract(a.y).selfMultiply(DD.valueOf(c.x).selfSubtract(a.x))\n return t1.selfSubtract(t2)\n }\n}\n","import NotRepresentableException from '../../algorithm/NotRepresentableException'\nimport Coordinate from '../../geom/Coordinate'\nimport TrianglePredicate from './TrianglePredicate'\nimport System from '../../../../../java/lang/System'\nimport HCoordinate from '../../algorithm/HCoordinate'\nexport default class Vertex {\n constructor() {\n Vertex.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._p = null\n if (arguments.length === 1) {\n const _p = arguments[0]\n this._p = new Coordinate(_p)\n } else if (arguments.length === 2) {\n const _x = arguments[0], _y = arguments[1]\n this._p = new Coordinate(_x, _y)\n } else if (arguments.length === 3) {\n const _x = arguments[0], _y = arguments[1], _z = arguments[2]\n this._p = new Coordinate(_x, _y, _z)\n }\n }\n static interpolateZ() {\n if (arguments.length === 3) {\n const p = arguments[0], p0 = arguments[1], p1 = arguments[2]\n const segLen = p0.distance(p1)\n const ptLen = p.distance(p0)\n const dz = p1.getZ() - p0.getZ()\n const pz = p0.getZ() + dz * (ptLen / segLen)\n return pz\n } else if (arguments.length === 4) {\n const p = arguments[0], v0 = arguments[1], v1 = arguments[2], v2 = arguments[3]\n const x0 = v0.x\n const y0 = v0.y\n const a = v1.x - x0\n const b = v2.x - x0\n const c = v1.y - y0\n const d = v2.y - y0\n const det = a * d - b * c\n const dx = p.x - x0\n const dy = p.y - y0\n const t = (d * dx - b * dy) / det\n const u = (-c * dx + a * dy) / det\n const z = v0.getZ() + t * (v1.getZ() - v0.getZ()) + u * (v2.getZ() - v0.getZ())\n return z\n }\n }\n circleCenter(b, c) {\n const a = new Vertex(this.getX(), this.getY())\n const cab = this.bisector(a, b)\n const cbc = this.bisector(b, c)\n const hcc = new HCoordinate(cab, cbc)\n let cc = null\n try {\n cc = new Vertex(hcc.getX(), hcc.getY())\n } catch (nre) {\n if (nre instanceof NotRepresentableException) {\n System.err.println('a: ' + a + ' b: ' + b + ' c: ' + c)\n System.err.println(nre)\n } else {\n throw nre\n }\n } finally {}\n return cc\n }\n dot(v) {\n return this._p.x * v.getX() + this._p.y * v.getY()\n }\n magn() {\n return Math.sqrt(this._p.x * this._p.x + this._p.y * this._p.y)\n }\n getZ() {\n return this._p.getZ()\n }\n bisector(a, b) {\n const dx = b.getX() - a.getX()\n const dy = b.getY() - a.getY()\n const l1 = new HCoordinate(a.getX() + dx / 2.0, a.getY() + dy / 2.0, 1.0)\n const l2 = new HCoordinate(a.getX() - dy + dx / 2.0, a.getY() + dx + dy / 2.0, 1.0)\n return new HCoordinate(l1, l2)\n }\n equals() {\n if (arguments.length === 1) {\n const _x = arguments[0]\n if (this._p.x === _x.getX() && this._p.y === _x.getY()) \n return true\n else \n return false\n \n } else if (arguments.length === 2) {\n const _x = arguments[0], tolerance = arguments[1]\n if (this._p.distance(_x.getCoordinate()) < tolerance) \n return true\n else \n return false\n \n }\n }\n getCoordinate() {\n return this._p\n }\n isInCircle(a, b, c) {\n return TrianglePredicate.isInCircleRobust(a._p, b._p, c._p, this._p)\n }\n interpolateZValue(v0, v1, v2) {\n const x0 = v0.getX()\n const y0 = v0.getY()\n const a = v1.getX() - x0\n const b = v2.getX() - x0\n const c = v1.getY() - y0\n const d = v2.getY() - y0\n const det = a * d - b * c\n const dx = this.getX() - x0\n const dy = this.getY() - y0\n const t = (d * dx - b * dy) / det\n const u = (-c * dx + a * dy) / det\n const z = v0.getZ() + t * (v1.getZ() - v0.getZ()) + u * (v2.getZ() - v0.getZ())\n return z\n }\n midPoint(a) {\n const xm = (this._p.x + a.getX()) / 2.0\n const ym = (this._p.y + a.getY()) / 2.0\n const zm = (this._p.getZ() + a.getZ()) / 2.0\n return new Vertex(xm, ym, zm)\n }\n rightOf(e) {\n return this.isCCW(e.dest(), e.orig())\n }\n isCCW(b, c) {\n return (b._p.x - this._p.x) * (c._p.y - this._p.y) - (b._p.y - this._p.y) * (c._p.x - this._p.x) > 0\n }\n getX() {\n return this._p.x\n }\n crossProduct(v) {\n return this._p.x * v.getY() - this._p.y * v.getX()\n }\n setZ(_z) {\n this._p.setZ(_z)\n }\n times(c) {\n return new Vertex(c * this._p.x, c * this._p.y)\n }\n cross() {\n return new Vertex(this._p.y, -this._p.x)\n }\n leftOf(e) {\n return this.isCCW(e.orig(), e.dest())\n }\n toString() {\n return 'POINT (' + this._p.x + ' ' + this._p.y + ')'\n }\n sub(v) {\n return new Vertex(this._p.x - v.getX(), this._p.y - v.getY())\n }\n getY() {\n return this._p.y\n }\n classify(p0, p1) {\n const p2 = this\n const a = p1.sub(p0)\n const b = p2.sub(p0)\n const sa = a.crossProduct(b)\n if (sa > 0.0) return Vertex.LEFT\n if (sa < 0.0) return Vertex.RIGHT\n if (a.getX() * b.getX() < 0.0 || a.getY() * b.getY() < 0.0) return Vertex.BEHIND\n if (a.magn() < b.magn()) return Vertex.BEYOND\n if (p0.equals(p2)) return Vertex.ORIGIN\n if (p1.equals(p2)) return Vertex.DESTINATION\n return Vertex.BETWEEN\n }\n sum(v) {\n return new Vertex(this._p.x + v.getX(), this._p.y + v.getY())\n }\n distance(v1, v2) {\n return Math.sqrt(Math.pow(v2.getX() - v1.getX(), 2.0) + Math.pow(v2.getY() - v1.getY(), 2.0))\n }\n circumRadiusRatio(b, c) {\n const x = this.circleCenter(b, c)\n const radius = this.distance(x, b)\n let edgeLength = this.distance(this, b)\n let el = this.distance(b, c)\n if (el < edgeLength) \n edgeLength = el\n \n el = this.distance(c, this)\n if (el < edgeLength) \n edgeLength = el\n \n return radius / edgeLength\n }\n}\nVertex.LEFT = 0\nVertex.RIGHT = 1\nVertex.BEYOND = 2\nVertex.BEHIND = 3\nVertex.BETWEEN = 4\nVertex.ORIGIN = 5\nVertex.DESTINATION = 6\n","import Vertex from './quadedge/Vertex'\nexport default class ConstraintVertex extends Vertex {\n constructor() {\n super()\n ConstraintVertex.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._isOnConstraint = null\n this._constraint = null\n const p = arguments[0]\n Vertex.constructor_.call(this, p)\n }\n getConstraint() {\n return this._constraint\n }\n setOnConstraint(isOnConstraint) {\n this._isOnConstraint = isOnConstraint\n }\n merge(other) {\n if (other._isOnConstraint) {\n this._isOnConstraint = true\n this._constraint = other._constraint\n }\n }\n isOnConstraint() {\n return this._isOnConstraint\n }\n setConstraint(constraint) {\n this._isOnConstraint = true\n this._constraint = constraint\n }\n}\n","import WKTWriter from '../../io/WKTWriter'\nimport LineSegment from '../../geom/LineSegment'\nexport default class QuadEdge {\n constructor() {\n QuadEdge.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._rot = null\n this._vertex = null\n this._next = null\n this._data = null\n }\n static makeEdge(o, d) {\n const q0 = new QuadEdge()\n const q1 = new QuadEdge()\n const q2 = new QuadEdge()\n const q3 = new QuadEdge()\n q0._rot = q1\n q1._rot = q2\n q2._rot = q3\n q3._rot = q0\n q0.setNext(q0)\n q1.setNext(q3)\n q2.setNext(q2)\n q3.setNext(q1)\n const base = q0\n base.setOrig(o)\n base.setDest(d)\n return base\n }\n static swap(e) {\n const a = e.oPrev()\n const b = e.sym().oPrev()\n QuadEdge.splice(e, a)\n QuadEdge.splice(e.sym(), b)\n QuadEdge.splice(e, a.lNext())\n QuadEdge.splice(e.sym(), b.lNext())\n e.setOrig(a.dest())\n e.setDest(b.dest())\n }\n static splice(a, b) {\n const alpha = a.oNext().rot()\n const beta = b.oNext().rot()\n const t1 = b.oNext()\n const t2 = a.oNext()\n const t3 = beta.oNext()\n const t4 = alpha.oNext()\n a.setNext(t1)\n b.setNext(t2)\n alpha.setNext(t3)\n beta.setNext(t4)\n }\n static connect(a, b) {\n const e = QuadEdge.makeEdge(a.dest(), b.orig())\n QuadEdge.splice(e, a.lNext())\n QuadEdge.splice(e.sym(), b)\n return e\n }\n equalsNonOriented(qe) {\n if (this.equalsOriented(qe)) return true\n if (this.equalsOriented(qe.sym())) return true\n return false\n }\n toLineSegment() {\n return new LineSegment(this._vertex.getCoordinate(), this.dest().getCoordinate())\n }\n dest() {\n return this.sym().orig()\n }\n oNext() {\n return this._next\n }\n equalsOriented(qe) {\n if (this.orig().getCoordinate().equals2D(qe.orig().getCoordinate()) && this.dest().getCoordinate().equals2D(qe.dest().getCoordinate())) return true\n return false\n }\n dNext() {\n return this.sym().oNext().sym()\n }\n lPrev() {\n return this._next.sym()\n }\n rPrev() {\n return this.sym().oNext()\n }\n rot() {\n return this._rot\n }\n oPrev() {\n return this._rot._next._rot\n }\n sym() {\n return this._rot._rot\n }\n setOrig(o) {\n this._vertex = o\n }\n lNext() {\n return this.invRot().oNext().rot()\n }\n getLength() {\n return this.orig().getCoordinate().distance(this.dest().getCoordinate())\n }\n invRot() {\n return this._rot.sym()\n }\n setDest(d) {\n this.sym().setOrig(d)\n }\n setData(data) {\n this._data = data\n }\n getData() {\n return this._data\n }\n delete() {\n this._rot = null\n }\n orig() {\n return this._vertex\n }\n rNext() {\n return this._rot._next.invRot()\n }\n toString() {\n const p0 = this._vertex.getCoordinate()\n const p1 = this.dest().getCoordinate()\n return WKTWriter.toLineString(p0, p1)\n }\n isLive() {\n return this._rot !== null\n }\n getPrimary() {\n if (this.orig().getCoordinate().compareTo(this.dest().getCoordinate()) <= 0) return this; else return this.sym()\n }\n dPrev() {\n return this.invRot().oNext().invRot()\n }\n setNext(next) {\n this._next = next\n }\n}\n","import QuadEdge from './quadedge/QuadEdge'\nexport default class IncrementalDelaunayTriangulator {\n constructor() {\n IncrementalDelaunayTriangulator.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._subdiv = null\n this._isUsingTolerance = false\n const subdiv = arguments[0]\n this._subdiv = subdiv\n this._isUsingTolerance = subdiv.getTolerance() > 0.0\n }\n insertSite(v) {\n let e = this._subdiv.locate(v)\n if (this._subdiv.isVertexOfEdge(e, v)) {\n return e\n } else if (this._subdiv.isOnEdge(e, v.getCoordinate())) {\n e = e.oPrev()\n this._subdiv.delete(e.oNext())\n }\n let base = this._subdiv.makeEdge(e.orig(), v)\n QuadEdge.splice(base, e)\n const startEdge = base\n do {\n base = this._subdiv.connect(e, base.sym())\n e = base.oPrev()\n } while (e.lNext() !== startEdge)\n do {\n const t = e.oPrev()\n if (t.dest().rightOf(e) && v.isInCircle(e.orig(), t.dest(), e.dest())) {\n QuadEdge.swap(e)\n e = e.oPrev()\n } else if (e.oNext() === startEdge) {\n return base\n } else {\n e = e.oNext().lPrev()\n }\n } while (true)\n }\n insertSites(vertices) {\n for (let i = vertices.iterator(); i.hasNext(); ) {\n const v = i.next()\n this.insertSite(v)\n }\n }\n}\n","export default class QuadEdgeLocator {\n locate(v) {}\n}\n","import QuadEdgeLocator from './QuadEdgeLocator'\nexport default class LastFoundQuadEdgeLocator {\n constructor() {\n LastFoundQuadEdgeLocator.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._subdiv = null\n this._lastEdge = null\n const subdiv = arguments[0]\n this._subdiv = subdiv\n this.init()\n }\n init() {\n this._lastEdge = this.findEdge()\n }\n locate(v) {\n if (!this._lastEdge.isLive()) \n this.init()\n \n const e = this._subdiv.locateFromEdge(v, this._lastEdge)\n this._lastEdge = e\n return e\n }\n findEdge() {\n const edges = this._subdiv.getEdges()\n return edges.iterator().next()\n }\n get interfaces_() {\n return [QuadEdgeLocator]\n }\n}\n","import LineSegment from '../../geom/LineSegment'\nimport RuntimeException from '../../../../../java/lang/RuntimeException'\nexport default class LocateFailureException extends RuntimeException {\n constructor() {\n super()\n LocateFailureException.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._seg = null\n if (arguments.length === 1) {\n if (typeof arguments[0] === 'string') {\n const msg = arguments[0]\n RuntimeException.constructor_.call(this, msg)\n } else if (arguments[0] instanceof LineSegment) {\n const seg = arguments[0]\n RuntimeException.constructor_.call(this, 'Locate failed to converge (at edge: ' + seg + '). Possible causes include invalid Subdivision topology or very close sites')\n this._seg = new LineSegment(seg)\n }\n } else if (arguments.length === 2) {\n const msg = arguments[0], seg = arguments[1]\n RuntimeException.constructor_.call(this, LocateFailureException.msgWithSpatial(msg, seg))\n this._seg = new LineSegment(seg)\n }\n }\n static msgWithSpatial(msg, seg) {\n if (seg !== null) return msg + ' [ ' + seg + ' ]'\n return msg\n }\n getSegment() {\n return this._seg\n }\n}\n","export default class TriangleVisitor {\n visit(triEdges) {}\n}\n","import QuadEdge from './QuadEdge'\nimport CoordinateList from '../../geom/CoordinateList'\nimport HashSet from '../../../../../java/util/HashSet'\nimport WKTWriter from '../../io/WKTWriter'\nimport GeometryFactory from '../../geom/GeometryFactory'\nimport Coordinate from '../../geom/Coordinate'\nimport IllegalArgumentException from '../../../../../java/lang/IllegalArgumentException'\nimport Stack from '../../../../../java/util/Stack'\nimport LastFoundQuadEdgeLocator from './LastFoundQuadEdgeLocator'\nimport LocateFailureException from './LocateFailureException'\nimport Vertex from './Vertex'\nimport System from '../../../../../java/lang/System'\nimport LineSegment from '../../geom/LineSegment'\nimport ArrayList from '../../../../../java/util/ArrayList'\nimport Envelope from '../../geom/Envelope'\nimport Triangle from '../../geom/Triangle'\nimport TriangleVisitor from './TriangleVisitor'\nexport default class QuadEdgeSubdivision {\n constructor() {\n QuadEdgeSubdivision.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._visitedKey = 0\n this._quadEdges = new ArrayList()\n this._startingEdge = null\n this._tolerance = null\n this._edgeCoincidenceTolerance = null\n this._frameVertex = new Array(3).fill(null)\n this._frameEnv = null\n this._locator = null\n this._seg = new LineSegment()\n this._triEdges = new Array(3).fill(null)\n const env = arguments[0], tolerance = arguments[1]\n this._tolerance = tolerance\n this._edgeCoincidenceTolerance = tolerance / QuadEdgeSubdivision.EDGE_COINCIDENCE_TOL_FACTOR\n this.createFrame(env)\n this._startingEdge = this.initSubdiv()\n this._locator = new LastFoundQuadEdgeLocator(this)\n }\n static getTriangleEdges(startQE, triEdge) {\n triEdge[0] = startQE\n triEdge[1] = triEdge[0].lNext()\n triEdge[2] = triEdge[1].lNext()\n if (triEdge[2].lNext() !== triEdge[0]) throw new IllegalArgumentException('Edges do not form a triangle')\n }\n getTriangleVertices(includeFrame) {\n const visitor = new TriangleVertexListVisitor()\n this.visitTriangles(visitor, includeFrame)\n return visitor.getTriangleVertices()\n }\n isFrameVertex(v) {\n if (v.equals(this._frameVertex[0])) return true\n if (v.equals(this._frameVertex[1])) return true\n if (v.equals(this._frameVertex[2])) return true\n return false\n }\n isVertexOfEdge(e, v) {\n if (v.equals(e.orig(), this._tolerance) || v.equals(e.dest(), this._tolerance)) \n return true\n \n return false\n }\n connect(a, b) {\n const q = QuadEdge.connect(a, b)\n this._quadEdges.add(q)\n return q\n }\n getVoronoiCellPolygon(qe, geomFact) {\n const cellPts = new ArrayList()\n const startQE = qe\n do {\n const cc = qe.rot().orig().getCoordinate()\n cellPts.add(cc)\n qe = qe.oPrev()\n } while (qe !== startQE)\n const coordList = new CoordinateList()\n coordList.addAll(cellPts, false)\n coordList.closeRing()\n if (coordList.size() < 4) {\n System.out.println(coordList)\n coordList.add(coordList.get(coordList.size() - 1), true)\n }\n const pts = coordList.toCoordinateArray()\n const cellPoly = geomFact.createPolygon(geomFact.createLinearRing(pts))\n const v = startQE.orig()\n cellPoly.setUserData(v.getCoordinate())\n return cellPoly\n }\n setLocator(locator) {\n this._locator = locator\n }\n initSubdiv() {\n const ea = this.makeEdge(this._frameVertex[0], this._frameVertex[1])\n const eb = this.makeEdge(this._frameVertex[1], this._frameVertex[2])\n QuadEdge.splice(ea.sym(), eb)\n const ec = this.makeEdge(this._frameVertex[2], this._frameVertex[0])\n QuadEdge.splice(eb.sym(), ec)\n QuadEdge.splice(ec.sym(), ea)\n return ea\n }\n isFrameBorderEdge(e) {\n const leftTri = new Array(3).fill(null)\n QuadEdgeSubdivision.getTriangleEdges(e, leftTri)\n const rightTri = new Array(3).fill(null)\n QuadEdgeSubdivision.getTriangleEdges(e.sym(), rightTri)\n const vLeftTriOther = e.lNext().dest()\n if (this.isFrameVertex(vLeftTriOther)) return true\n const vRightTriOther = e.sym().lNext().dest()\n if (this.isFrameVertex(vRightTriOther)) return true\n return false\n }\n makeEdge(o, d) {\n const q = QuadEdge.makeEdge(o, d)\n this._quadEdges.add(q)\n return q\n }\n visitTriangles(triVisitor, includeFrame) {\n this._visitedKey++\n const edgeStack = new Stack()\n edgeStack.push(this._startingEdge)\n const visitedEdges = new HashSet()\n while (!edgeStack.empty()) {\n const edge = edgeStack.pop()\n if (!visitedEdges.contains(edge)) {\n const triEdges = this.fetchTriangleToVisit(edge, edgeStack, includeFrame, visitedEdges)\n if (triEdges !== null) triVisitor.visit(triEdges)\n }\n }\n }\n isFrameEdge(e) {\n if (this.isFrameVertex(e.orig()) || this.isFrameVertex(e.dest())) return true\n return false\n }\n isOnEdge(e, p) {\n this._seg.setCoordinates(e.orig().getCoordinate(), e.dest().getCoordinate())\n const dist = this._seg.distance(p)\n return dist < this._edgeCoincidenceTolerance\n }\n getEnvelope() {\n return new Envelope(this._frameEnv)\n }\n createFrame(env) {\n const deltaX = env.getWidth()\n const deltaY = env.getHeight()\n let offset = 0.0\n if (deltaX > deltaY) \n offset = deltaX * 10.0\n else \n offset = deltaY * 10.0\n \n this._frameVertex[0] = new Vertex((env.getMaxX() + env.getMinX()) / 2.0, env.getMaxY() + offset)\n this._frameVertex[1] = new Vertex(env.getMinX() - offset, env.getMinY() - offset)\n this._frameVertex[2] = new Vertex(env.getMaxX() + offset, env.getMinY() - offset)\n this._frameEnv = new Envelope(this._frameVertex[0].getCoordinate(), this._frameVertex[1].getCoordinate())\n this._frameEnv.expandToInclude(this._frameVertex[2].getCoordinate())\n }\n getTriangleCoordinates(includeFrame) {\n const visitor = new TriangleCoordinatesVisitor()\n this.visitTriangles(visitor, includeFrame)\n return visitor.getTriangles()\n }\n getVertices(includeFrame) {\n const vertices = new HashSet()\n for (let i = this._quadEdges.iterator(); i.hasNext(); ) {\n const qe = i.next()\n const v = qe.orig()\n if (includeFrame || !this.isFrameVertex(v)) vertices.add(v)\n const vd = qe.dest()\n if (includeFrame || !this.isFrameVertex(vd)) vertices.add(vd)\n }\n return vertices\n }\n fetchTriangleToVisit(edge, edgeStack, includeFrame, visitedEdges) {\n let curr = edge\n let edgeCount = 0\n let isFrame = false\n do {\n this._triEdges[edgeCount] = curr\n if (this.isFrameEdge(curr)) isFrame = true\n const sym = curr.sym()\n if (!visitedEdges.contains(sym)) edgeStack.push(sym)\n visitedEdges.add(curr)\n edgeCount++\n curr = curr.lNext()\n } while (curr !== edge)\n if (isFrame && !includeFrame) return null\n return this._triEdges\n }\n getEdges() {\n if (arguments.length === 0) {\n return this._quadEdges\n } else if (arguments.length === 1) {\n const geomFact = arguments[0]\n const quadEdges = this.getPrimaryEdges(false)\n const edges = new Array(quadEdges.size()).fill(null)\n let i = 0\n for (let it = quadEdges.iterator(); it.hasNext(); ) {\n const qe = it.next()\n edges[i++] = geomFact.createLineString([qe.orig().getCoordinate(), qe.dest().getCoordinate()])\n }\n return geomFact.createMultiLineString(edges)\n }\n }\n getVertexUniqueEdges(includeFrame) {\n const edges = new ArrayList()\n const visitedVertices = new HashSet()\n for (let i = this._quadEdges.iterator(); i.hasNext(); ) {\n const qe = i.next()\n const v = qe.orig()\n if (!visitedVertices.contains(v)) {\n visitedVertices.add(v)\n if (includeFrame || !this.isFrameVertex(v)) \n edges.add(qe)\n \n }\n const qd = qe.sym()\n const vd = qd.orig()\n if (!visitedVertices.contains(vd)) {\n visitedVertices.add(vd)\n if (includeFrame || !this.isFrameVertex(vd)) \n edges.add(qd)\n \n }\n }\n return edges\n }\n getTriangleEdges(includeFrame) {\n const visitor = new TriangleEdgesListVisitor()\n this.visitTriangles(visitor, includeFrame)\n return visitor.getTriangleEdges()\n }\n getPrimaryEdges(includeFrame) {\n this._visitedKey++\n const edges = new ArrayList()\n const edgeStack = new Stack()\n edgeStack.push(this._startingEdge)\n const visitedEdges = new HashSet()\n while (!edgeStack.empty()) {\n const edge = edgeStack.pop()\n if (!visitedEdges.contains(edge)) {\n const priQE = edge.getPrimary()\n if (includeFrame || !this.isFrameEdge(priQE)) edges.add(priQE)\n edgeStack.push(edge.oNext())\n edgeStack.push(edge.sym().oNext())\n visitedEdges.add(edge)\n visitedEdges.add(edge.sym())\n }\n }\n return edges\n }\n delete(e) {\n QuadEdge.splice(e, e.oPrev())\n QuadEdge.splice(e.sym(), e.sym().oPrev())\n const eSym = e.sym()\n const eRot = e.rot()\n const eRotSym = e.rot().sym()\n this._quadEdges.remove(e)\n this._quadEdges.remove(eSym)\n this._quadEdges.remove(eRot)\n this._quadEdges.remove(eRotSym)\n e.delete()\n eSym.delete()\n eRot.delete()\n eRotSym.delete()\n }\n locateFromEdge(v, startEdge) {\n let iter = 0\n const maxIter = this._quadEdges.size()\n let e = startEdge\n while (true) {\n iter++\n if (iter > maxIter) \n throw new LocateFailureException(e.toLineSegment())\n \n if (v.equals(e.orig()) || v.equals(e.dest())) \n break\n else if (v.rightOf(e)) \n e = e.sym()\n else if (!v.rightOf(e.oNext())) \n e = e.oNext()\n else if (!v.rightOf(e.dPrev())) \n e = e.dPrev()\n else \n break\n \n }\n return e\n }\n getTolerance() {\n return this._tolerance\n }\n getVoronoiCellPolygons(geomFact) {\n this.visitTriangles(new TriangleCircumcentreVisitor(), true)\n const cells = new ArrayList()\n const edges = this.getVertexUniqueEdges(false)\n for (let i = edges.iterator(); i.hasNext(); ) {\n const qe = i.next()\n cells.add(this.getVoronoiCellPolygon(qe, geomFact))\n }\n return cells\n }\n getVoronoiDiagram(geomFact) {\n const vorCells = this.getVoronoiCellPolygons(geomFact)\n return geomFact.createGeometryCollection(GeometryFactory.toGeometryArray(vorCells))\n }\n getTriangles(geomFact) {\n const triPtsList = this.getTriangleCoordinates(false)\n const tris = new Array(triPtsList.size()).fill(null)\n let i = 0\n for (let it = triPtsList.iterator(); it.hasNext(); ) {\n const triPt = it.next()\n tris[i++] = geomFact.createPolygon(geomFact.createLinearRing(triPt))\n }\n return geomFact.createGeometryCollection(tris)\n }\n insertSite(v) {\n let e = this.locate(v)\n if (v.equals(e.orig(), this._tolerance) || v.equals(e.dest(), this._tolerance)) \n return e\n \n let base = this.makeEdge(e.orig(), v)\n QuadEdge.splice(base, e)\n const startEdge = base\n do {\n base = this.connect(e, base.sym())\n e = base.oPrev()\n } while (e.lNext() !== startEdge)\n return startEdge\n }\n locate() {\n if (arguments.length === 1) {\n if (arguments[0] instanceof Vertex) {\n const v = arguments[0]\n return this._locator.locate(v)\n } else if (arguments[0] instanceof Coordinate) {\n const p = arguments[0]\n return this._locator.locate(new Vertex(p))\n }\n } else if (arguments.length === 2) {\n const p0 = arguments[0], p1 = arguments[1]\n const e = this._locator.locate(new Vertex(p0))\n if (e === null) return null\n let base = e\n if (e.dest().getCoordinate().equals2D(p0)) base = e.sym()\n let locEdge = base\n do {\n if (locEdge.dest().getCoordinate().equals2D(p1)) return locEdge\n locEdge = locEdge.oNext()\n } while (locEdge !== base)\n return null\n }\n }\n}\nclass TriangleCircumcentreVisitor {\n visit(triEdges) {\n const a = triEdges[0].orig().getCoordinate()\n const b = triEdges[1].orig().getCoordinate()\n const c = triEdges[2].orig().getCoordinate()\n const cc = Triangle.circumcentreDD(a, b, c)\n const ccVertex = new Vertex(cc)\n for (let i = 0; i < 3; i++) \n triEdges[i].rot().setOrig(ccVertex)\n \n }\n get interfaces_() {\n return [TriangleVisitor]\n }\n}\nclass TriangleEdgesListVisitor {\n constructor() {\n TriangleEdgesListVisitor.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._triList = new ArrayList()\n }\n getTriangleEdges() {\n return this._triList\n }\n visit(triEdges) {\n this._triList.add(triEdges)\n }\n get interfaces_() {\n return [TriangleVisitor]\n }\n}\nclass TriangleVertexListVisitor {\n constructor() {\n TriangleVertexListVisitor.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._triList = new ArrayList()\n }\n visit(triEdges) {\n this._triList.add([triEdges[0].orig(), triEdges[1].orig(), triEdges[2].orig()])\n }\n getTriangleVertices() {\n return this._triList\n }\n get interfaces_() {\n return [TriangleVisitor]\n }\n}\nclass TriangleCoordinatesVisitor {\n constructor() {\n TriangleCoordinatesVisitor.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._coordList = new CoordinateList()\n this._triCoords = new ArrayList()\n }\n checkTriangleSize(pts) {\n let loc = ''\n if (pts.length >= 2) loc = WKTWriter.toLineString(pts[0], pts[1]); else \n if (pts.length >= 1) loc = WKTWriter.toPoint(pts[0])\n \n }\n visit(triEdges) {\n this._coordList.clear()\n for (let i = 0; i < 3; i++) {\n const v = triEdges[i].orig()\n this._coordList.add(v.getCoordinate())\n }\n if (this._coordList.size() > 0) {\n this._coordList.closeRing()\n const pts = this._coordList.toCoordinateArray()\n if (pts.length !== 4) \n return null\n \n this._triCoords.add(pts)\n }\n }\n getTriangles() {\n return this._triCoords\n }\n get interfaces_() {\n return [TriangleVisitor]\n }\n}\nQuadEdgeSubdivision.TriangleCircumcentreVisitor = TriangleCircumcentreVisitor\nQuadEdgeSubdivision.TriangleEdgesListVisitor = TriangleEdgesListVisitor\nQuadEdgeSubdivision.TriangleVertexListVisitor = TriangleVertexListVisitor\nQuadEdgeSubdivision.TriangleCoordinatesVisitor = TriangleCoordinatesVisitor\nQuadEdgeSubdivision.EDGE_COINCIDENCE_TOL_FACTOR = 1000\n","import Coordinate from '../geom/Coordinate'\nimport LineSegment from '../geom/LineSegment'\nexport default class Segment {\n constructor() {\n Segment.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._ls = null\n this._data = null\n if (arguments.length === 2) {\n const p0 = arguments[0], p1 = arguments[1]\n this._ls = new LineSegment(p0, p1)\n } else if (arguments.length === 3) {\n const p0 = arguments[0], p1 = arguments[1], data = arguments[2]\n this._ls = new LineSegment(p0, p1)\n this._data = data\n } else if (arguments.length === 6) {\n const x1 = arguments[0], y1 = arguments[1], z1 = arguments[2], x2 = arguments[3], y2 = arguments[4], z2 = arguments[5]\n Segment.constructor_.call(this, new Coordinate(x1, y1, z1), new Coordinate(x2, y2, z2))\n } else if (arguments.length === 7) {\n const x1 = arguments[0], y1 = arguments[1], z1 = arguments[2], x2 = arguments[3], y2 = arguments[4], z2 = arguments[5], data = arguments[6]\n Segment.constructor_.call(this, new Coordinate(x1, y1, z1), new Coordinate(x2, y2, z2), data)\n }\n }\n getLineSegment() {\n return this._ls\n }\n getEndZ() {\n const p = this._ls.getCoordinate(1)\n return p.getZ()\n }\n getStartZ() {\n const p = this._ls.getCoordinate(0)\n return p.getZ()\n }\n intersection(s) {\n return this._ls.intersection(s.getLineSegment())\n }\n getStart() {\n return this._ls.getCoordinate(0)\n }\n getEnd() {\n return this._ls.getCoordinate(1)\n }\n getEndY() {\n const p = this._ls.getCoordinate(1)\n return p.y\n }\n getStartX() {\n const p = this._ls.getCoordinate(0)\n return p.x\n }\n equalsTopo(s) {\n return this._ls.equalsTopo(s.getLineSegment())\n }\n getStartY() {\n const p = this._ls.getCoordinate(0)\n return p.y\n }\n setData(data) {\n this._data = data\n }\n getData() {\n return this._data\n }\n getEndX() {\n const p = this._ls.getCoordinate(1)\n return p.x\n }\n toString() {\n return this._ls.toString()\n }\n}\n","import WKTWriter from '../io/WKTWriter'\nimport Coordinate from '../geom/Coordinate'\nimport RuntimeException from '../../../../java/lang/RuntimeException'\nexport default class ConstraintEnforcementException extends RuntimeException {\n constructor() {\n super()\n ConstraintEnforcementException.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._pt = null\n if (arguments.length === 1) {\n const msg = arguments[0]\n RuntimeException.constructor_.call(this, msg)\n } else if (arguments.length === 2) {\n const msg = arguments[0], pt = arguments[1]\n RuntimeException.constructor_.call(this, ConstraintEnforcementException.msgWithCoord(msg, pt))\n this._pt = new Coordinate(pt)\n }\n }\n static msgWithCoord(msg, pt) {\n if (pt !== null) return msg + ' [ ' + WKTWriter.toPoint(pt) + ' ]'\n return msg\n }\n getCoordinate() {\n return this._pt\n }\n}\n","import GeometryFactory from '../geom/GeometryFactory'\nimport NonEncroachingSplitPointFinder from './NonEncroachingSplitPointFinder'\nimport ConstraintVertex from './ConstraintVertex'\nimport Coordinate from '../geom/Coordinate'\nimport IncrementalDelaunayTriangulator from './IncrementalDelaunayTriangulator'\nimport QuadEdgeSubdivision from './quadedge/QuadEdgeSubdivision'\nimport Double from '../../../../java/lang/Double'\nimport LastFoundQuadEdgeLocator from './quadedge/LastFoundQuadEdgeLocator'\nimport Segment from './Segment'\nimport ConvexHull from '../algorithm/ConvexHull'\nimport KdTree from '../index/kdtree/KdTree'\nimport ArrayList from '../../../../java/util/ArrayList'\nimport ConstraintEnforcementException from './ConstraintEnforcementException'\nimport Envelope from '../geom/Envelope'\nexport default class ConformingDelaunayTriangulator {\n constructor() {\n ConformingDelaunayTriangulator.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._initialVertices = null\n this._segVertices = null\n this._segments = new ArrayList()\n this._subdiv = null\n this._incDel = null\n this._convexHull = null\n this._splitFinder = new NonEncroachingSplitPointFinder()\n this._kdt = null\n this._vertexFactory = null\n this._computeAreaEnv = null\n this._splitPt = null\n this._tolerance = null\n const initialVertices = arguments[0], tolerance = arguments[1]\n this._initialVertices = new ArrayList(initialVertices)\n this._tolerance = tolerance\n this._kdt = new KdTree(tolerance)\n }\n static computeVertexEnvelope(vertices) {\n const env = new Envelope()\n for (let i = vertices.iterator(); i.hasNext(); ) {\n const v = i.next()\n env.expandToInclude(v.getCoordinate())\n }\n return env\n }\n getInitialVertices() {\n return this._initialVertices\n }\n getKDT() {\n return this._kdt\n }\n enforceConstraints() {\n this.addConstraintVertices()\n let count = 0\n let splits = 0\n do {\n splits = this.enforceGabriel(this._segments)\n count++\n } while (splits > 0 && count < ConformingDelaunayTriangulator.MAX_SPLIT_ITER)\n if (count === ConformingDelaunayTriangulator.MAX_SPLIT_ITER) \n throw new ConstraintEnforcementException('Too many splitting iterations while enforcing constraints. Last split point was at: ', this._splitPt)\n \n }\n insertSites(vertices) {\n for (let i = vertices.iterator(); i.hasNext(); ) {\n const v = i.next()\n this.insertSite(v)\n }\n }\n getVertexFactory() {\n return this._vertexFactory\n }\n getPointArray() {\n const pts = new Array(this._initialVertices.size() + this._segVertices.size()).fill(null)\n let index = 0\n for (let i = this._initialVertices.iterator(); i.hasNext(); ) {\n const v = i.next()\n pts[index++] = v.getCoordinate()\n }\n for (let i2 = this._segVertices.iterator(); i2.hasNext(); ) {\n const v = i2.next()\n pts[index++] = v.getCoordinate()\n }\n return pts\n }\n setConstraints(segments, segVertices) {\n this._segments = segments\n this._segVertices = segVertices\n }\n computeConvexHull() {\n const fact = new GeometryFactory()\n const coords = this.getPointArray()\n const hull = new ConvexHull(coords, fact)\n this._convexHull = hull.getConvexHull()\n }\n addConstraintVertices() {\n this.computeConvexHull()\n this.insertSites(this._segVertices)\n }\n findNonGabrielPoint(seg) {\n const p = seg.getStart()\n const q = seg.getEnd()\n const midPt = new Coordinate((p.x + q.x) / 2.0, (p.y + q.y) / 2.0)\n const segRadius = p.distance(midPt)\n const env = new Envelope(midPt)\n env.expandBy(segRadius)\n const result = this._kdt.query(env)\n let closestNonGabriel = null\n let minDist = Double.MAX_VALUE\n for (let i = result.iterator(); i.hasNext(); ) {\n const nextNode = i.next()\n const testPt = nextNode.getCoordinate()\n if (testPt.equals2D(p) || testPt.equals2D(q)) continue\n const testRadius = midPt.distance(testPt)\n if (testRadius < segRadius) {\n const testDist = testRadius\n if (closestNonGabriel === null || testDist < minDist) {\n closestNonGabriel = testPt\n minDist = testDist\n }\n }\n }\n return closestNonGabriel\n }\n getConstraintSegments() {\n return this._segments\n }\n setSplitPointFinder(splitFinder) {\n this._splitFinder = splitFinder\n }\n getConvexHull() {\n return this._convexHull\n }\n getTolerance() {\n return this._tolerance\n }\n enforceGabriel(segsToInsert) {\n const newSegments = new ArrayList()\n let splits = 0\n const segsToRemove = new ArrayList()\n for (let i = segsToInsert.iterator(); i.hasNext(); ) {\n const seg = i.next()\n const encroachPt = this.findNonGabrielPoint(seg)\n if (encroachPt === null) continue\n this._splitPt = this._splitFinder.findSplitPoint(seg, encroachPt)\n const splitVertex = this.createVertex(this._splitPt, seg)\n const insertedVertex = this.insertSite(splitVertex)\n if (!insertedVertex.getCoordinate().equals2D(this._splitPt)) {}\n const s1 = new Segment(seg.getStartX(), seg.getStartY(), seg.getStartZ(), splitVertex.getX(), splitVertex.getY(), splitVertex.getZ(), seg.getData())\n const s2 = new Segment(splitVertex.getX(), splitVertex.getY(), splitVertex.getZ(), seg.getEndX(), seg.getEndY(), seg.getEndZ(), seg.getData())\n newSegments.add(s1)\n newSegments.add(s2)\n segsToRemove.add(seg)\n splits = splits + 1\n }\n segsToInsert.removeAll(segsToRemove)\n segsToInsert.addAll(newSegments)\n return splits\n }\n createVertex() {\n if (arguments.length === 1) {\n const p = arguments[0]\n let v = null\n if (this._vertexFactory !== null) v = this._vertexFactory.createVertex(p, null); else v = new ConstraintVertex(p)\n return v\n } else if (arguments.length === 2) {\n const p = arguments[0], seg = arguments[1]\n let v = null\n if (this._vertexFactory !== null) v = this._vertexFactory.createVertex(p, seg); else v = new ConstraintVertex(p)\n v.setOnConstraint(true)\n return v\n }\n }\n getSubdivision() {\n return this._subdiv\n }\n computeBoundingBox() {\n const vertexEnv = ConformingDelaunayTriangulator.computeVertexEnvelope(this._initialVertices)\n const segEnv = ConformingDelaunayTriangulator.computeVertexEnvelope(this._segVertices)\n const allPointsEnv = new Envelope(vertexEnv)\n allPointsEnv.expandToInclude(segEnv)\n const deltaX = allPointsEnv.getWidth() * 0.2\n const deltaY = allPointsEnv.getHeight() * 0.2\n const delta = Math.max(deltaX, deltaY)\n this._computeAreaEnv = new Envelope(allPointsEnv)\n this._computeAreaEnv.expandBy(delta)\n }\n setVertexFactory(vertexFactory) {\n this._vertexFactory = vertexFactory\n }\n formInitialDelaunay() {\n this.computeBoundingBox()\n this._subdiv = new QuadEdgeSubdivision(this._computeAreaEnv, this._tolerance)\n this._subdiv.setLocator(new LastFoundQuadEdgeLocator(this._subdiv))\n this._incDel = new IncrementalDelaunayTriangulator(this._subdiv)\n this.insertSites(this._initialVertices)\n }\n insertSite() {\n if (arguments[0] instanceof ConstraintVertex) {\n const v = arguments[0]\n const kdnode = this._kdt.insert(v.getCoordinate(), v)\n if (!kdnode.isRepeated()) {\n this._incDel.insertSite(v)\n } else {\n const snappedV = kdnode.getData()\n snappedV.merge(v)\n return snappedV\n }\n return v\n } else if (arguments[0] instanceof Coordinate) {\n const p = arguments[0]\n this.insertSite(this.createVertex(p))\n }\n }\n}\nConformingDelaunayTriangulator.MAX_SPLIT_ITER = 99\n","import CoordinateList from '../geom/CoordinateList'\nimport Geometry from '../geom/Geometry'\nimport Arrays from '../../../../java/util/Arrays'\nimport hasInterface from '../../../../hasInterface'\nimport Collection from '../../../../java/util/Collection'\nimport IncrementalDelaunayTriangulator from './IncrementalDelaunayTriangulator'\nimport QuadEdgeSubdivision from './quadedge/QuadEdgeSubdivision'\nimport Vertex from './quadedge/Vertex'\nimport CoordinateArrays from '../geom/CoordinateArrays'\nimport ArrayList from '../../../../java/util/ArrayList'\nimport Envelope from '../geom/Envelope'\nexport default class DelaunayTriangulationBuilder {\n constructor() {\n DelaunayTriangulationBuilder.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._siteCoords = null\n this._tolerance = 0.0\n this._subdiv = null\n }\n static extractUniqueCoordinates(geom) {\n if (geom === null) return new CoordinateList()\n const coords = geom.getCoordinates()\n return DelaunayTriangulationBuilder.unique(coords)\n }\n static envelope(coords) {\n const env = new Envelope()\n for (let i = coords.iterator(); i.hasNext(); ) {\n const coord = i.next()\n env.expandToInclude(coord)\n }\n return env\n }\n static unique(coords) {\n const coordsCopy = CoordinateArrays.copyDeep(coords)\n Arrays.sort(coordsCopy)\n const coordList = new CoordinateList(coordsCopy, false)\n return coordList\n }\n static toVertices(coords) {\n const verts = new ArrayList()\n for (let i = coords.iterator(); i.hasNext(); ) {\n const coord = i.next()\n verts.add(new Vertex(coord))\n }\n return verts\n }\n create() {\n if (this._subdiv !== null) return null\n const siteEnv = DelaunayTriangulationBuilder.envelope(this._siteCoords)\n const vertices = DelaunayTriangulationBuilder.toVertices(this._siteCoords)\n this._subdiv = new QuadEdgeSubdivision(siteEnv, this._tolerance)\n const triangulator = new IncrementalDelaunayTriangulator(this._subdiv)\n triangulator.insertSites(vertices)\n }\n setTolerance(tolerance) {\n this._tolerance = tolerance\n }\n setSites() {\n if (arguments[0] instanceof Geometry) {\n const geom = arguments[0]\n this._siteCoords = DelaunayTriangulationBuilder.extractUniqueCoordinates(geom)\n } else if (hasInterface(arguments[0], Collection)) {\n const coords = arguments[0]\n this._siteCoords = DelaunayTriangulationBuilder.unique(CoordinateArrays.toCoordinateArray(coords))\n }\n }\n getEdges(geomFact) {\n this.create()\n return this._subdiv.getEdges(geomFact)\n }\n getSubdivision() {\n this.create()\n return this._subdiv\n }\n getTriangles(geomFact) {\n this.create()\n return this._subdiv.getTriangles(geomFact)\n }\n}\n","import ConformingDelaunayTriangulator from './ConformingDelaunayTriangulator'\nimport ConstraintVertex from './ConstraintVertex'\nimport DelaunayTriangulationBuilder from './DelaunayTriangulationBuilder'\nimport Segment from './Segment'\nimport ArrayList from '../../../../java/util/ArrayList'\nimport LinearComponentExtracter from '../geom/util/LinearComponentExtracter'\nimport TreeMap from '../../../../java/util/TreeMap'\nexport default class ConformingDelaunayTriangulationBuilder {\n constructor() {\n ConformingDelaunayTriangulationBuilder.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._siteCoords = null\n this._constraintLines = null\n this._tolerance = 0.0\n this._subdiv = null\n this._constraintVertexMap = new TreeMap()\n }\n static createConstraintSegments() {\n if (arguments.length === 1) {\n const geom = arguments[0]\n const lines = LinearComponentExtracter.getLines(geom)\n const constraintSegs = new ArrayList()\n for (let i = lines.iterator(); i.hasNext(); ) {\n const line = i.next()\n ConformingDelaunayTriangulationBuilder.createConstraintSegments(line, constraintSegs)\n }\n return constraintSegs\n } else if (arguments.length === 2) {\n const line = arguments[0], constraintSegs = arguments[1]\n const coords = line.getCoordinates()\n for (let i = 1; i < coords.length; i++) \n constraintSegs.add(new Segment(coords[i - 1], coords[i]))\n \n }\n }\n createSiteVertices(coords) {\n const verts = new ArrayList()\n for (let i = coords.iterator(); i.hasNext(); ) {\n const coord = i.next()\n if (this._constraintVertexMap.containsKey(coord)) continue\n verts.add(new ConstraintVertex(coord))\n }\n return verts\n }\n create() {\n if (this._subdiv !== null) return null\n const siteEnv = DelaunayTriangulationBuilder.envelope(this._siteCoords)\n let segments = new ArrayList()\n if (this._constraintLines !== null) {\n siteEnv.expandToInclude(this._constraintLines.getEnvelopeInternal())\n this.createVertices(this._constraintLines)\n segments = ConformingDelaunayTriangulationBuilder.createConstraintSegments(this._constraintLines)\n }\n const sites = this.createSiteVertices(this._siteCoords)\n const cdt = new ConformingDelaunayTriangulator(sites, this._tolerance)\n cdt.setConstraints(segments, new ArrayList(this._constraintVertexMap.values()))\n cdt.formInitialDelaunay()\n cdt.enforceConstraints()\n this._subdiv = cdt.getSubdivision()\n }\n setTolerance(tolerance) {\n this._tolerance = tolerance\n }\n setConstraints(constraintLines) {\n this._constraintLines = constraintLines\n }\n setSites(geom) {\n this._siteCoords = DelaunayTriangulationBuilder.extractUniqueCoordinates(geom)\n }\n getEdges(geomFact) {\n this.create()\n return this._subdiv.getEdges(geomFact)\n }\n getSubdivision() {\n this.create()\n return this._subdiv\n }\n getTriangles(geomFact) {\n this.create()\n return this._subdiv.getTriangles(geomFact)\n }\n createVertices(geom) {\n const coords = geom.getCoordinates()\n for (let i = 0; i < coords.length; i++) {\n const v = new ConstraintVertex(coords[i])\n this._constraintVertexMap.put(coords[i], v)\n }\n }\n}\n","import Geometry from '../geom/Geometry'\nimport hasInterface from '../../../../hasInterface'\nimport GeometryFactory from '../geom/GeometryFactory'\nimport Collection from '../../../../java/util/Collection'\nimport IncrementalDelaunayTriangulator from './IncrementalDelaunayTriangulator'\nimport QuadEdgeSubdivision from './quadedge/QuadEdgeSubdivision'\nimport DelaunayTriangulationBuilder from './DelaunayTriangulationBuilder'\nimport CoordinateArrays from '../geom/CoordinateArrays'\nimport ArrayList from '../../../../java/util/ArrayList'\nimport OverlayOp from '../operation/overlay/OverlayOp'\nexport default class VoronoiDiagramBuilder {\n constructor() {\n VoronoiDiagramBuilder.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._siteCoords = null\n this._tolerance = 0.0\n this._subdiv = null\n this._clipEnv = null\n this._diagramEnv = null\n }\n static clipGeometryCollection(geom, clipEnv) {\n const clipPoly = geom.getFactory().toGeometry(clipEnv)\n const clipped = new ArrayList()\n for (let i = 0; i < geom.getNumGeometries(); i++) {\n const g = geom.getGeometryN(i)\n let result = null\n if (clipEnv.contains(g.getEnvelopeInternal())) {\n result = g\n } else if (clipEnv.intersects(g.getEnvelopeInternal())) {\n result = OverlayOp.intersection(clipPoly, g)\n result.setUserData(g.getUserData())\n }\n if (result !== null && !result.isEmpty()) \n clipped.add(result)\n \n }\n return geom.getFactory().createGeometryCollection(GeometryFactory.toGeometryArray(clipped))\n }\n create() {\n if (this._subdiv !== null) return null\n const siteEnv = DelaunayTriangulationBuilder.envelope(this._siteCoords)\n this._diagramEnv = this._clipEnv\n if (this._diagramEnv === null) {\n this._diagramEnv = siteEnv\n const expandBy = this._diagramEnv.getDiameter()\n this._diagramEnv.expandBy(expandBy)\n }\n const vertices = DelaunayTriangulationBuilder.toVertices(this._siteCoords)\n this._subdiv = new QuadEdgeSubdivision(siteEnv, this._tolerance)\n const triangulator = new IncrementalDelaunayTriangulator(this._subdiv)\n triangulator.insertSites(vertices)\n }\n getDiagram(geomFact) {\n this.create()\n const polys = this._subdiv.getVoronoiDiagram(geomFact)\n return VoronoiDiagramBuilder.clipGeometryCollection(polys, this._diagramEnv)\n }\n setTolerance(tolerance) {\n this._tolerance = tolerance\n }\n setSites() {\n if (arguments[0] instanceof Geometry) {\n const geom = arguments[0]\n this._siteCoords = DelaunayTriangulationBuilder.extractUniqueCoordinates(geom)\n } else if (hasInterface(arguments[0], Collection)) {\n const coords = arguments[0]\n this._siteCoords = DelaunayTriangulationBuilder.unique(CoordinateArrays.toCoordinateArray(coords))\n }\n }\n setClipEnvelope(clipEnv) {\n this._clipEnv = clipEnv\n }\n getSubdivision() {\n this.create()\n return this._subdiv\n }\n}\n","import hasInterface from '../../../../hasInterface'\nimport IllegalArgumentException from '../../../../java/lang/IllegalArgumentException'\nimport Lineal from '../geom/Lineal'\nexport default class LinearIterator {\n constructor() {\n LinearIterator.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._linearGeom = null\n this._numLines = null\n this._currentLine = null\n this._componentIndex = 0\n this._vertexIndex = 0\n if (arguments.length === 1) {\n const linear = arguments[0]\n LinearIterator.constructor_.call(this, linear, 0, 0)\n } else if (arguments.length === 2) {\n const linear = arguments[0], start = arguments[1]\n LinearIterator.constructor_.call(this, linear, start.getComponentIndex(), LinearIterator.segmentEndVertexIndex(start))\n } else if (arguments.length === 3) {\n const linearGeom = arguments[0], componentIndex = arguments[1], vertexIndex = arguments[2]\n if (!hasInterface(linearGeom, Lineal)) throw new IllegalArgumentException('Lineal geometry is required')\n this._linearGeom = linearGeom\n this._numLines = linearGeom.getNumGeometries()\n this._componentIndex = componentIndex\n this._vertexIndex = vertexIndex\n this.loadCurrentLine()\n }\n }\n static segmentEndVertexIndex(loc) {\n if (loc.getSegmentFraction() > 0.0) return loc.getSegmentIndex() + 1\n return loc.getSegmentIndex()\n }\n getComponentIndex() {\n return this._componentIndex\n }\n getLine() {\n return this._currentLine\n }\n getVertexIndex() {\n return this._vertexIndex\n }\n getSegmentEnd() {\n if (this._vertexIndex < this.getLine().getNumPoints() - 1) return this._currentLine.getCoordinateN(this._vertexIndex + 1)\n return null\n }\n next() {\n if (!this.hasNext()) return null\n this._vertexIndex++\n if (this._vertexIndex >= this._currentLine.getNumPoints()) {\n this._componentIndex++\n this.loadCurrentLine()\n this._vertexIndex = 0\n }\n }\n loadCurrentLine() {\n if (this._componentIndex >= this._numLines) {\n this._currentLine = null\n return null\n }\n this._currentLine = this._linearGeom.getGeometryN(this._componentIndex)\n }\n getSegmentStart() {\n return this._currentLine.getCoordinateN(this._vertexIndex)\n }\n isEndOfLine() {\n if (this._componentIndex >= this._numLines) return false\n if (this._vertexIndex < this._currentLine.getNumPoints() - 1) return false\n return true\n }\n hasNext() {\n if (this._componentIndex >= this._numLines) return false\n if (this._componentIndex === this._numLines - 1 && this._vertexIndex >= this._currentLine.getNumPoints()) return false\n return true\n }\n}\n","import LinearIterator from './LinearIterator'\nimport Double from '../../../../java/lang/Double'\nimport LineSegment from '../geom/LineSegment'\nimport Assert from '../util/Assert'\nexport default class LengthIndexOfPoint {\n constructor() {\n LengthIndexOfPoint.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._linearGeom = null\n const linearGeom = arguments[0]\n this._linearGeom = linearGeom\n }\n static indexOf(linearGeom, inputPt) {\n const locater = new LengthIndexOfPoint(linearGeom)\n return locater.indexOf(inputPt)\n }\n static indexOfAfter(linearGeom, inputPt, minIndex) {\n const locater = new LengthIndexOfPoint(linearGeom)\n return locater.indexOfAfter(inputPt, minIndex)\n }\n indexOf(inputPt) {\n return this.indexOfFromStart(inputPt, -1.0)\n }\n indexOfFromStart(inputPt, minIndex) {\n let minDistance = Double.MAX_VALUE\n let ptMeasure = minIndex\n let segmentStartMeasure = 0.0\n const seg = new LineSegment()\n const it = new LinearIterator(this._linearGeom)\n while (it.hasNext()) {\n if (!it.isEndOfLine()) {\n seg.p0 = it.getSegmentStart()\n seg.p1 = it.getSegmentEnd()\n const segDistance = seg.distance(inputPt)\n const segMeasureToPt = this.segmentNearestMeasure(seg, inputPt, segmentStartMeasure)\n if (segDistance < minDistance && segMeasureToPt > minIndex) {\n ptMeasure = segMeasureToPt\n minDistance = segDistance\n }\n segmentStartMeasure += seg.getLength()\n }\n it.next()\n }\n return ptMeasure\n }\n indexOfAfter(inputPt, minIndex) {\n if (minIndex < 0.0) return this.indexOf(inputPt)\n const endIndex = this._linearGeom.getLength()\n if (endIndex < minIndex) return endIndex\n const closestAfter = this.indexOfFromStart(inputPt, minIndex)\n Assert.isTrue(closestAfter >= minIndex, 'computed index is before specified minimum index')\n return closestAfter\n }\n segmentNearestMeasure(seg, inputPt, segmentStartMeasure) {\n const projFactor = seg.projectionFactor(inputPt)\n if (projFactor <= 0.0) return segmentStartMeasure\n if (projFactor <= 1.0) return segmentStartMeasure + projFactor * seg.getLength()\n return segmentStartMeasure + seg.getLength()\n }\n}\n","import Coordinate from '../geom/Coordinate'\nimport LineSegment from '../geom/LineSegment'\nimport Comparable from '../../../../java/lang/Comparable'\nexport default class LinearLocation {\n constructor() {\n LinearLocation.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._componentIndex = 0\n this._segmentIndex = 0\n this._segmentFraction = 0.0\n if (arguments.length === 0) {} else if (arguments.length === 1) {\n const loc = arguments[0]\n this._componentIndex = loc._componentIndex\n this._segmentIndex = loc._segmentIndex\n this._segmentFraction = loc._segmentFraction\n } else if (arguments.length === 2) {\n const segmentIndex = arguments[0], segmentFraction = arguments[1]\n LinearLocation.constructor_.call(this, 0, segmentIndex, segmentFraction)\n } else if (arguments.length === 3) {\n const componentIndex = arguments[0], segmentIndex = arguments[1], segmentFraction = arguments[2]\n this._componentIndex = componentIndex\n this._segmentIndex = segmentIndex\n this._segmentFraction = segmentFraction\n this.normalize()\n } else if (arguments.length === 4) {\n const componentIndex = arguments[0], segmentIndex = arguments[1], segmentFraction = arguments[2], doNormalize = arguments[3]\n this._componentIndex = componentIndex\n this._segmentIndex = segmentIndex\n this._segmentFraction = segmentFraction\n if (doNormalize) this.normalize()\n }\n }\n static getEndLocation(linear) {\n const loc = new LinearLocation()\n loc.setToEnd(linear)\n return loc\n }\n static pointAlongSegmentByFraction(p0, p1, frac) {\n if (frac <= 0.0) return p0\n if (frac >= 1.0) return p1\n const x = (p1.x - p0.x) * frac + p0.x\n const y = (p1.y - p0.y) * frac + p0.y\n const z = (p1.getZ() - p0.getZ()) * frac + p0.getZ()\n return new Coordinate(x, y, z)\n }\n static compareLocationValues(componentIndex0, segmentIndex0, segmentFraction0, componentIndex1, segmentIndex1, segmentFraction1) {\n if (componentIndex0 < componentIndex1) return -1\n if (componentIndex0 > componentIndex1) return 1\n if (segmentIndex0 < segmentIndex1) return -1\n if (segmentIndex0 > segmentIndex1) return 1\n if (segmentFraction0 < segmentFraction1) return -1\n if (segmentFraction0 > segmentFraction1) return 1\n return 0\n }\n static numSegments(line) {\n const npts = line.getNumPoints()\n if (npts <= 1) return 0\n return npts - 1\n }\n getSegmentIndex() {\n return this._segmentIndex\n }\n getComponentIndex() {\n return this._componentIndex\n }\n isEndpoint(linearGeom) {\n const lineComp = linearGeom.getGeometryN(this._componentIndex)\n const nseg = LinearLocation.numSegments(lineComp)\n return this._segmentIndex >= nseg || this._segmentIndex === nseg - 1 && this._segmentFraction >= 1.0\n }\n isValid(linearGeom) {\n if (this._componentIndex < 0 || this._componentIndex >= linearGeom.getNumGeometries()) return false\n const lineComp = linearGeom.getGeometryN(this._componentIndex)\n if (this._segmentIndex < 0 || this._segmentIndex > lineComp.getNumPoints()) return false\n if (this._segmentIndex === lineComp.getNumPoints() && this._segmentFraction !== 0.0) return false\n if (this._segmentFraction < 0.0 || this._segmentFraction > 1.0) return false\n return true\n }\n normalize() {\n if (this._segmentFraction < 0.0) \n this._segmentFraction = 0.0\n \n if (this._segmentFraction > 1.0) \n this._segmentFraction = 1.0\n \n if (this._componentIndex < 0) {\n this._componentIndex = 0\n this._segmentIndex = 0\n this._segmentFraction = 0.0\n }\n if (this._segmentIndex < 0) {\n this._segmentIndex = 0\n this._segmentFraction = 0.0\n }\n if (this._segmentFraction === 1.0) {\n this._segmentFraction = 0.0\n this._segmentIndex += 1\n }\n }\n toLowest(linearGeom) {\n const lineComp = linearGeom.getGeometryN(this._componentIndex)\n const nseg = LinearLocation.numSegments(lineComp)\n if (this._segmentIndex < nseg) return this\n return new LinearLocation(this._componentIndex, nseg - 1, 1.0, false)\n }\n getCoordinate(linearGeom) {\n const lineComp = linearGeom.getGeometryN(this._componentIndex)\n const p0 = lineComp.getCoordinateN(this._segmentIndex)\n if (this._segmentIndex >= LinearLocation.numSegments(lineComp)) return p0\n const p1 = lineComp.getCoordinateN(this._segmentIndex + 1)\n return LinearLocation.pointAlongSegmentByFraction(p0, p1, this._segmentFraction)\n }\n getSegmentFraction() {\n return this._segmentFraction\n }\n getSegment(linearGeom) {\n const lineComp = linearGeom.getGeometryN(this._componentIndex)\n const p0 = lineComp.getCoordinateN(this._segmentIndex)\n if (this._segmentIndex >= LinearLocation.numSegments(lineComp)) {\n const prev = lineComp.getCoordinateN(lineComp.getNumPoints() - 2)\n return new LineSegment(prev, p0)\n }\n const p1 = lineComp.getCoordinateN(this._segmentIndex + 1)\n return new LineSegment(p0, p1)\n }\n clamp(linear) {\n if (this._componentIndex >= linear.getNumGeometries()) {\n this.setToEnd(linear)\n return null\n }\n if (this._segmentIndex >= linear.getNumPoints()) {\n const line = linear.getGeometryN(this._componentIndex)\n this._segmentIndex = LinearLocation.numSegments(line)\n this._segmentFraction = 1.0\n }\n }\n setToEnd(linear) {\n this._componentIndex = linear.getNumGeometries() - 1\n const lastLine = linear.getGeometryN(this._componentIndex)\n this._segmentIndex = LinearLocation.numSegments(lastLine)\n this._segmentFraction = 0.0\n }\n compareTo(o) {\n const other = o\n if (this._componentIndex < other._componentIndex) return -1\n if (this._componentIndex > other._componentIndex) return 1\n if (this._segmentIndex < other._segmentIndex) return -1\n if (this._segmentIndex > other._segmentIndex) return 1\n if (this._segmentFraction < other._segmentFraction) return -1\n if (this._segmentFraction > other._segmentFraction) return 1\n return 0\n }\n copy() {\n return new LinearLocation(this._componentIndex, this._segmentIndex, this._segmentFraction)\n }\n toString() {\n return 'LinearLoc[' + this._componentIndex + ', ' + this._segmentIndex + ', ' + this._segmentFraction + ']'\n }\n isOnSameSegment(loc) {\n if (this._componentIndex !== loc._componentIndex) return false\n if (this._segmentIndex === loc._segmentIndex) return true\n if (loc._segmentIndex - this._segmentIndex === 1 && loc._segmentFraction === 0.0) return true\n if (this._segmentIndex - loc._segmentIndex === 1 && this._segmentFraction === 0.0) return true\n return false\n }\n snapToVertex(linearGeom, minDistance) {\n if (this._segmentFraction <= 0.0 || this._segmentFraction >= 1.0) return null\n const segLen = this.getSegmentLength(linearGeom)\n const lenToStart = this._segmentFraction * segLen\n const lenToEnd = segLen - lenToStart\n if (lenToStart <= lenToEnd && lenToStart < minDistance) \n this._segmentFraction = 0.0\n else if (lenToEnd <= lenToStart && lenToEnd < minDistance) \n this._segmentFraction = 1.0\n \n }\n compareLocationValues(componentIndex1, segmentIndex1, segmentFraction1) {\n if (this._componentIndex < componentIndex1) return -1\n if (this._componentIndex > componentIndex1) return 1\n if (this._segmentIndex < segmentIndex1) return -1\n if (this._segmentIndex > segmentIndex1) return 1\n if (this._segmentFraction < segmentFraction1) return -1\n if (this._segmentFraction > segmentFraction1) return 1\n return 0\n }\n getSegmentLength(linearGeom) {\n const lineComp = linearGeom.getGeometryN(this._componentIndex)\n let segIndex = this._segmentIndex\n if (this._segmentIndex >= LinearLocation.numSegments(lineComp)) segIndex = lineComp.getNumPoints() - 2\n const p0 = lineComp.getCoordinateN(segIndex)\n const p1 = lineComp.getCoordinateN(segIndex + 1)\n return p0.distance(p1)\n }\n isVertex() {\n return this._segmentFraction <= 0.0 || this._segmentFraction >= 1.0\n }\n get interfaces_() {\n return [Comparable]\n }\n}\n","import LinearIterator from './LinearIterator'\nimport LinearLocation from './LinearLocation'\nimport Double from '../../../../java/lang/Double'\nimport LineSegment from '../geom/LineSegment'\nimport Assert from '../util/Assert'\nexport default class LocationIndexOfPoint {\n constructor() {\n LocationIndexOfPoint.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._linearGeom = null\n const linearGeom = arguments[0]\n this._linearGeom = linearGeom\n }\n static indexOf(linearGeom, inputPt) {\n const locater = new LocationIndexOfPoint(linearGeom)\n return locater.indexOf(inputPt)\n }\n static indexOfAfter(linearGeom, inputPt, minIndex) {\n const locater = new LocationIndexOfPoint(linearGeom)\n return locater.indexOfAfter(inputPt, minIndex)\n }\n indexOf(inputPt) {\n return this.indexOfFromStart(inputPt, null)\n }\n indexOfFromStart(inputPt, minIndex) {\n let minDistance = Double.MAX_VALUE\n let minComponentIndex = 0\n let minSegmentIndex = 0\n let minFrac = -1.0\n const seg = new LineSegment()\n for (let it = new LinearIterator(this._linearGeom); it.hasNext(); it.next()) \n if (!it.isEndOfLine()) {\n seg.p0 = it.getSegmentStart()\n seg.p1 = it.getSegmentEnd()\n const segDistance = seg.distance(inputPt)\n const segFrac = seg.segmentFraction(inputPt)\n const candidateComponentIndex = it.getComponentIndex()\n const candidateSegmentIndex = it.getVertexIndex()\n if (segDistance < minDistance) \n if (minIndex === null || minIndex.compareLocationValues(candidateComponentIndex, candidateSegmentIndex, segFrac) < 0) {\n minComponentIndex = candidateComponentIndex\n minSegmentIndex = candidateSegmentIndex\n minFrac = segFrac\n minDistance = segDistance\n }\n \n }\n \n if (minDistance === Double.MAX_VALUE) \n return new LinearLocation(minIndex)\n \n const loc = new LinearLocation(minComponentIndex, minSegmentIndex, minFrac)\n return loc\n }\n indexOfAfter(inputPt, minIndex) {\n if (minIndex === null) return this.indexOf(inputPt)\n const endLoc = LinearLocation.getEndLocation(this._linearGeom)\n if (endLoc.compareTo(minIndex) <= 0) return endLoc\n const closestAfter = this.indexOfFromStart(inputPt, minIndex)\n Assert.isTrue(closestAfter.compareTo(minIndex) >= 0, 'computed location is before specified minimum location')\n return closestAfter\n }\n}\n","import LocationIndexOfPoint from './LocationIndexOfPoint'\nexport default class LocationIndexOfLine {\n constructor() {\n LocationIndexOfLine.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._linearGeom = null\n const linearGeom = arguments[0]\n this._linearGeom = linearGeom\n }\n static indicesOf(linearGeom, subLine) {\n const locater = new LocationIndexOfLine(linearGeom)\n return locater.indicesOf(subLine)\n }\n indicesOf(subLine) {\n const startPt = subLine.getGeometryN(0).getCoordinateN(0)\n const lastLine = subLine.getGeometryN(subLine.getNumGeometries() - 1)\n const endPt = lastLine.getCoordinateN(lastLine.getNumPoints() - 1)\n const locPt = new LocationIndexOfPoint(this._linearGeom)\n const subLineLoc = new Array(2).fill(null)\n subLineLoc[0] = locPt.indexOf(startPt)\n if (subLine.getLength() === 0.0) \n subLineLoc[1] = subLineLoc[0].copy()\n else \n subLineLoc[1] = locPt.indexOfAfter(endPt, subLineLoc[0])\n \n return subLineLoc\n }\n}\n","import LinearIterator from './LinearIterator'\nimport LinearLocation from './LinearLocation'\nexport default class LengthLocationMap {\n constructor() {\n LengthLocationMap.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._linearGeom = null\n const linearGeom = arguments[0]\n this._linearGeom = linearGeom\n }\n static getLength(linearGeom, loc) {\n const locater = new LengthLocationMap(linearGeom)\n return locater.getLength(loc)\n }\n static getLocation() {\n if (arguments.length === 2) {\n const linearGeom = arguments[0], length = arguments[1]\n const locater = new LengthLocationMap(linearGeom)\n return locater.getLocation(length)\n } else if (arguments.length === 3) {\n const linearGeom = arguments[0], length = arguments[1], resolveLower = arguments[2]\n const locater = new LengthLocationMap(linearGeom)\n return locater.getLocation(length, resolveLower)\n }\n }\n getLength(loc) {\n let totalLength = 0.0\n const it = new LinearIterator(this._linearGeom)\n while (it.hasNext()) {\n if (!it.isEndOfLine()) {\n const p0 = it.getSegmentStart()\n const p1 = it.getSegmentEnd()\n const segLen = p1.distance(p0)\n if (loc.getComponentIndex() === it.getComponentIndex() && loc.getSegmentIndex() === it.getVertexIndex()) \n return totalLength + segLen * loc.getSegmentFraction()\n \n totalLength += segLen\n }\n it.next()\n }\n return totalLength\n }\n resolveHigher(loc) {\n if (!loc.isEndpoint(this._linearGeom)) return loc\n let compIndex = loc.getComponentIndex()\n if (compIndex >= this._linearGeom.getNumGeometries() - 1) return loc\n do \n compIndex++\n while (compIndex < this._linearGeom.getNumGeometries() - 1 && this._linearGeom.getGeometryN(compIndex).getLength() === 0)\n return new LinearLocation(compIndex, 0, 0.0)\n }\n getLocation() {\n if (arguments.length === 1) {\n const length = arguments[0]\n return this.getLocation(length, true)\n } else if (arguments.length === 2) {\n const length = arguments[0], resolveLower = arguments[1]\n let forwardLength = length\n if (length < 0.0) {\n const lineLen = this._linearGeom.getLength()\n forwardLength = lineLen + length\n }\n const loc = this.getLocationForward(forwardLength)\n if (resolveLower) \n return loc\n \n return this.resolveHigher(loc)\n }\n }\n getLocationForward(length) {\n if (length <= 0.0) return new LinearLocation()\n let totalLength = 0.0\n const it = new LinearIterator(this._linearGeom)\n while (it.hasNext()) {\n if (it.isEndOfLine()) {\n if (totalLength === length) {\n const compIndex = it.getComponentIndex()\n const segIndex = it.getVertexIndex()\n return new LinearLocation(compIndex, segIndex, 0.0)\n }\n } else {\n const p0 = it.getSegmentStart()\n const p1 = it.getSegmentEnd()\n const segLen = p1.distance(p0)\n if (totalLength + segLen > length) {\n const frac = (length - totalLength) / segLen\n const compIndex = it.getComponentIndex()\n const segIndex = it.getVertexIndex()\n return new LinearLocation(compIndex, segIndex, frac)\n }\n totalLength += segLen\n }\n it.next()\n }\n return LinearLocation.getEndLocation(this._linearGeom)\n }\n}\n","import CoordinateList from '../geom/CoordinateList'\nimport IllegalArgumentException from '../../../../java/lang/IllegalArgumentException'\nimport ArrayList from '../../../../java/util/ArrayList'\nexport default class LinearGeometryBuilder {\n constructor() {\n LinearGeometryBuilder.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._geomFact = null\n this._lines = new ArrayList()\n this._coordList = null\n this._ignoreInvalidLines = false\n this._fixInvalidLines = false\n this._lastPt = null\n const geomFact = arguments[0]\n this._geomFact = geomFact\n }\n getGeometry() {\n this.endLine()\n return this._geomFact.buildGeometry(this._lines)\n }\n getLastCoordinate() {\n return this._lastPt\n }\n endLine() {\n if (this._coordList === null) \n return null\n \n if (this._ignoreInvalidLines && this._coordList.size() < 2) {\n this._coordList = null\n return null\n }\n const rawPts = this._coordList.toCoordinateArray()\n let pts = rawPts\n if (this._fixInvalidLines) pts = this.validCoordinateSequence(rawPts)\n this._coordList = null\n let line = null\n try {\n line = this._geomFact.createLineString(pts)\n } catch (ex) {\n if (ex instanceof IllegalArgumentException) {\n if (!this._ignoreInvalidLines) throw ex\n } else {\n throw ex\n }\n } finally {}\n if (line !== null) this._lines.add(line)\n }\n setFixInvalidLines(fixInvalidLines) {\n this._fixInvalidLines = fixInvalidLines\n }\n add() {\n if (arguments.length === 1) {\n const pt = arguments[0]\n this.add(pt, true)\n } else if (arguments.length === 2) {\n const pt = arguments[0], allowRepeatedPoints = arguments[1]\n if (this._coordList === null) this._coordList = new CoordinateList()\n this._coordList.add(pt, allowRepeatedPoints)\n this._lastPt = pt\n }\n }\n setIgnoreInvalidLines(ignoreInvalidLines) {\n this._ignoreInvalidLines = ignoreInvalidLines\n }\n validCoordinateSequence(pts) {\n if (pts.length >= 2) return pts\n const validPts = [pts[0], pts[0]]\n return validPts\n }\n}\n","import CoordinateList from '../geom/CoordinateList'\nimport hasInterface from '../../../../hasInterface'\nimport LinearIterator from './LinearIterator'\nimport Lineal from '../geom/Lineal'\nimport Assert from '../util/Assert'\nimport LinearGeometryBuilder from './LinearGeometryBuilder'\nexport default class ExtractLineByLocation {\n constructor() {\n ExtractLineByLocation.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._line = null\n const line = arguments[0]\n this._line = line\n }\n static extract(line, start, end) {\n const ls = new ExtractLineByLocation(line)\n return ls.extract(start, end)\n }\n computeLinear(start, end) {\n const builder = new LinearGeometryBuilder(this._line.getFactory())\n builder.setFixInvalidLines(true)\n if (!start.isVertex()) builder.add(start.getCoordinate(this._line))\n for (let it = new LinearIterator(this._line, start); it.hasNext(); it.next()) {\n if (end.compareLocationValues(it.getComponentIndex(), it.getVertexIndex(), 0.0) < 0) break\n const pt = it.getSegmentStart()\n builder.add(pt)\n if (it.isEndOfLine()) builder.endLine()\n }\n if (!end.isVertex()) builder.add(end.getCoordinate(this._line))\n return builder.getGeometry()\n }\n computeLine(start, end) {\n const coordinates = this._line.getCoordinates()\n const newCoordinates = new CoordinateList()\n let startSegmentIndex = start.getSegmentIndex()\n if (start.getSegmentFraction() > 0.0) startSegmentIndex += 1\n let lastSegmentIndex = end.getSegmentIndex()\n if (end.getSegmentFraction() === 1.0) lastSegmentIndex += 1\n if (lastSegmentIndex >= coordinates.length) lastSegmentIndex = coordinates.length - 1\n if (!start.isVertex()) newCoordinates.add(start.getCoordinate(this._line))\n for (let i = startSegmentIndex; i <= lastSegmentIndex; i++) \n newCoordinates.add(coordinates[i])\n \n if (!end.isVertex()) newCoordinates.add(end.getCoordinate(this._line))\n if (newCoordinates.size() <= 0) newCoordinates.add(start.getCoordinate(this._line))\n let newCoordinateArray = newCoordinates.toCoordinateArray()\n if (newCoordinateArray.length <= 1) \n newCoordinateArray = [newCoordinateArray[0], newCoordinateArray[0]]\n \n return this._line.getFactory().createLineString(newCoordinateArray)\n }\n extract(start, end) {\n if (end.compareTo(start) < 0) \n return this.reverse(this.computeLinear(end, start))\n \n return this.computeLinear(start, end)\n }\n reverse(linear) {\n if (hasInterface(linear, Lineal)) return linear.reverse()\n Assert.shouldNeverReachHere('non-linear geometry encountered')\n return null\n }\n}\n","import LengthIndexOfPoint from './LengthIndexOfPoint'\nimport LocationIndexOfLine from './LocationIndexOfLine'\nimport LengthLocationMap from './LengthLocationMap'\nimport ExtractLineByLocation from './ExtractLineByLocation'\nexport default class LengthIndexedLine {\n constructor() {\n LengthIndexedLine.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._linearGeom = null\n const linearGeom = arguments[0]\n this._linearGeom = linearGeom\n }\n clampIndex(index) {\n const posIndex = this.positiveIndex(index)\n const startIndex = this.getStartIndex()\n if (posIndex < startIndex) return startIndex\n const endIndex = this.getEndIndex()\n if (posIndex > endIndex) return endIndex\n return posIndex\n }\n locationOf() {\n if (arguments.length === 1) {\n const index = arguments[0]\n return LengthLocationMap.getLocation(this._linearGeom, index)\n } else if (arguments.length === 2) {\n const index = arguments[0], resolveLower = arguments[1]\n return LengthLocationMap.getLocation(this._linearGeom, index, resolveLower)\n }\n }\n project(pt) {\n return LengthIndexOfPoint.indexOf(this._linearGeom, pt)\n }\n positiveIndex(index) {\n if (index >= 0.0) return index\n return this._linearGeom.getLength() + index\n }\n extractPoint() {\n if (arguments.length === 1) {\n const index = arguments[0]\n const loc = LengthLocationMap.getLocation(this._linearGeom, index)\n return loc.getCoordinate(this._linearGeom)\n } else if (arguments.length === 2) {\n const index = arguments[0], offsetDistance = arguments[1]\n const loc = LengthLocationMap.getLocation(this._linearGeom, index)\n const locLow = loc.toLowest(this._linearGeom)\n return locLow.getSegment(this._linearGeom).pointAlongOffset(locLow.getSegmentFraction(), offsetDistance)\n }\n }\n isValidIndex(index) {\n return index >= this.getStartIndex() && index <= this.getEndIndex()\n }\n getEndIndex() {\n return this._linearGeom.getLength()\n }\n getStartIndex() {\n return 0.0\n }\n indexOfAfter(pt, minIndex) {\n return LengthIndexOfPoint.indexOfAfter(this._linearGeom, pt, minIndex)\n }\n extractLine(startIndex, endIndex) {\n const startIndex2 = this.clampIndex(startIndex)\n const endIndex2 = this.clampIndex(endIndex)\n const resolveStartLower = startIndex2 === endIndex2\n const startLoc = this.locationOf(startIndex2, resolveStartLower)\n const endLoc = this.locationOf(endIndex2)\n return ExtractLineByLocation.extract(this._linearGeom, startLoc, endLoc)\n }\n indexOf(pt) {\n return LengthIndexOfPoint.indexOf(this._linearGeom, pt)\n }\n indicesOf(subLine) {\n const locIndex = LocationIndexOfLine.indicesOf(this._linearGeom, subLine)\n const index = [LengthLocationMap.getLength(this._linearGeom, locIndex[0]), LengthLocationMap.getLength(this._linearGeom, locIndex[1])]\n return index\n }\n}\n","import LineString from '../geom/LineString'\nimport IllegalArgumentException from '../../../../java/lang/IllegalArgumentException'\nimport LinearLocation from './LinearLocation'\nimport LocationIndexOfPoint from './LocationIndexOfPoint'\nimport LocationIndexOfLine from './LocationIndexOfLine'\nimport ExtractLineByLocation from './ExtractLineByLocation'\nimport MultiLineString from '../geom/MultiLineString'\nexport default class LocationIndexedLine {\n constructor() {\n LocationIndexedLine.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._linearGeom = null\n const linearGeom = arguments[0]\n this._linearGeom = linearGeom\n this.checkGeometryType()\n }\n clampIndex(index) {\n const loc = index.copy()\n loc.clamp(this._linearGeom)\n return loc\n }\n project(pt) {\n return LocationIndexOfPoint.indexOf(this._linearGeom, pt)\n }\n checkGeometryType() {\n if (!(this._linearGeom instanceof LineString || this._linearGeom instanceof MultiLineString)) throw new IllegalArgumentException('Input geometry must be linear')\n }\n extractPoint() {\n if (arguments.length === 1) {\n const index = arguments[0]\n return index.getCoordinate(this._linearGeom)\n } else if (arguments.length === 2) {\n const index = arguments[0], offsetDistance = arguments[1]\n const indexLow = index.toLowest(this._linearGeom)\n return indexLow.getSegment(this._linearGeom).pointAlongOffset(indexLow.getSegmentFraction(), offsetDistance)\n }\n }\n isValidIndex(index) {\n return index.isValid(this._linearGeom)\n }\n getEndIndex() {\n return LinearLocation.getEndLocation(this._linearGeom)\n }\n getStartIndex() {\n return new LinearLocation()\n }\n indexOfAfter(pt, minIndex) {\n return LocationIndexOfPoint.indexOfAfter(this._linearGeom, pt, minIndex)\n }\n extractLine(startIndex, endIndex) {\n return ExtractLineByLocation.extract(this._linearGeom, startIndex, endIndex)\n }\n indexOf(pt) {\n return LocationIndexOfPoint.indexOf(this._linearGeom, pt)\n }\n indicesOf(subLine) {\n return LocationIndexOfLine.indicesOf(this._linearGeom, subLine)\n }\n}\n","import ArrayList from '../../../../java/util/ArrayList'\nexport default class CollectionUtil {\n static transform(coll, func) {\n const result = new ArrayList()\n for (let i = coll.iterator(); i.hasNext(); ) \n result.add(func.execute(i.next()))\n \n return result\n }\n static select(collection, func) {\n const result = new ArrayList()\n for (let i = collection.iterator(); i.hasNext(); ) {\n const item = i.next()\n if (Boolean.TRUE.equals(func.execute(item))) \n result.add(item)\n \n }\n return result\n }\n static apply(coll, func) {\n for (let i = coll.iterator(); i.hasNext(); ) \n func.execute(i.next())\n \n }\n}\nfunction Function() {}\nCollectionUtil.Function = Function\n","import CoordinateFilter from '../geom/CoordinateFilter'\nexport default class CoordinateArrayFilter {\n constructor() {\n CoordinateArrayFilter.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this.pts = null\n this.n = 0\n const size = arguments[0]\n this.pts = new Array(size).fill(null)\n }\n filter(coord) {\n this.pts[this.n++] = coord\n }\n getCoordinates() {\n return this.pts\n }\n get interfaces_() {\n return [CoordinateFilter]\n }\n}\n","import CoordinateFilter from '../geom/CoordinateFilter'\nexport default class CoordinateCountFilter {\n constructor() {\n CoordinateCountFilter.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._n = 0\n }\n filter(coord) {\n this._n++\n }\n getCount() {\n return this._n\n }\n get interfaces_() {\n return [CoordinateFilter]\n }\n}\n","import HashMap from '../../../../java/util/HashMap'\nexport default class ObjectCounter {\n constructor() {\n ObjectCounter.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this._counts = new HashMap()\n }\n count(o) {\n const counter = this._counts.get(o)\n if (counter === null) return 0; else return counter.count()\n }\n add(o) {\n const counter = this._counts.get(o)\n if (counter === null) this._counts.put(o, new Counter(1)); else counter.increment()\n }\n}\nclass Counter {\n constructor() {\n Counter.constructor_.apply(this, arguments)\n }\n static constructor_() {\n this.count = 0\n if (arguments.length === 0) {} else if (arguments.length === 1) {\n const count = arguments[0]\n this.count = count\n }\n }\n count() {\n return this.count\n }\n increment() {\n this.count++\n }\n}\nObjectCounter.Counter = Counter\n","export default function PrintStream() {}\n","export default function StringReader() {}\n","export default function ByteArrayOutputStream() {}\n","import Exception from '../lang/Exception'\n\nexport default class IOException extends Exception { }","export default function LineNumberReader() {}\n","import PrintStream from '../../../../java/io/PrintStream'\nimport StringReader from '../../../../java/io/StringReader'\nimport System from '../../../../java/lang/System'\nimport ArrayList from '../../../../java/util/ArrayList'\nimport ByteArrayOutputStream from '../../../../java/io/ByteArrayOutputStream'\nimport Assert from './Assert'\nimport IOException from '../../../../java/io/IOException'\nimport LineNumberReader from '../../../../java/io/LineNumberReader'\nexport default class StringUtil {\n static chars(c, n) {\n const ch = new Array(n).fill(null)\n for (let i = 0; i < n; i++) \n ch[i] = c\n \n return new String(ch)\n }\n static getStackTrace() {\n if (arguments.length === 1) {\n const t = arguments[0]\n const os = new ByteArrayOutputStream()\n const ps = new PrintStream(os)\n t.printStackTrace(ps)\n return os.toString()\n } else if (arguments.length === 2) {\n const t = arguments[0], depth = arguments[1]\n let stackTrace = ''\n const stringReader = new StringReader(StringUtil.getStackTrace(t))\n const lineNumberReader = new LineNumberReader(stringReader)\n for (let i = 0; i < depth; i++) \n try {\n stackTrace += lineNumberReader.readLine() + StringUtil.NEWLINE\n } catch (e) {\n if (e instanceof IOException) \n Assert.shouldNeverReachHere()\n else throw e\n } finally {}\n \n return stackTrace\n }\n }\n static spaces(n) {\n return StringUtil.chars(' ', n)\n }\n static split(s, separator) {\n const separatorlen = separator.length\n const tokenList = new ArrayList()\n let tmpString = '' + s\n let pos = tmpString.indexOf(separator)\n while (pos >= 0) {\n const token = tmpString.substring(0, pos)\n tokenList.add(token)\n tmpString = tmpString.substring(pos + separatorlen)\n pos = tmpString.indexOf(separator)\n }\n if (tmpString.length > 0) tokenList.add(tmpString)\n const res = new Array(tokenList.size()).fill(null)\n for (let i = 0; i < res.length; i++) \n res[i] = tokenList.get(i)\n \n return res\n }\n}\nStringUtil.NEWLINE = System.getProperty('line.separator')\n","import SnapIfNeededOverlayOp from '../overlay/snap/SnapIfNeededOverlayOp'\nimport OverlayOp from '../overlay/OverlayOp'\nexport default class UnionOp {\n get interfaces_() {\n return []\n }\n\n getClass() {\n return UnionOp\n }\n\n static union(g, other) {\n if (g.isEmpty() || other.isEmpty()) {\n if (g.isEmpty() && other.isEmpty()) return OverlayOp.createEmptyResult(OverlayOp.UNION, g, other, g.getFactory())\n if (g.isEmpty()) return other.copy()\n if (other.isEmpty()) return g.copy()\n }\n g.checkNotGeometryCollection(g)\n g.checkNotGeometryCollection(other)\n return SnapIfNeededOverlayOp.overlayOp(g, other, OverlayOp.UNION)\n }\n}\n","import WKTWriter from './io/WKTWriter'\nimport IsValidOp from './operation/valid/IsValidOp'\nimport InteriorPointArea from './algorithm/InteriorPointArea'\nimport UnaryUnionOp from './operation/union/UnaryUnionOp'\nimport UnionOp from './operation/union/UnionOp'\nimport InteriorPointLine from './algorithm/InteriorPointLine'\nimport IsSimpleOp from './operation/IsSimpleOp'\nimport BufferOp from './operation/buffer/BufferOp'\nimport ConvexHull from './algorithm/ConvexHull'\nimport Centroid from './algorithm/Centroid'\nimport RelateOp from './operation/relate/RelateOp'\nimport InteriorPointPoint from './algorithm/InteriorPointPoint'\nimport DistanceOp from './operation/distance/DistanceOp'\nimport OverlayOp from './operation/overlay/OverlayOp'\nimport BoundaryOp from './operation/BoundaryOp'\nimport Geometry from './geom/Geometry'\nimport LineString from './geom/LineString'\nimport MultiLineString from './geom/MultiLineString'\n\nLineString.prototype.getBoundary = function() {\n return BoundaryOp.getBoundary(this)\n}\n\nMultiLineString.prototype.getBoundary = function() {\n return BoundaryOp.getBoundary(this)\n}\n\nGeometry.prototype.equalsTopo = function(g) {\n return RelateOp.equalsTopo(this, g)\n}\nGeometry.prototype.equals = function(g) {\n if (g === null) return false\n return RelateOp.equalsTopo(this, g)\n}\nGeometry.prototype.union = function() {\n if (arguments.length === 0) {\n return UnaryUnionOp.union(this)\n } else if (arguments.length === 1) {\n const other = arguments[0]\n return UnionOp.union(this, other)\n }\n}\nGeometry.prototype.isValid = function() {\n return IsValidOp.isValid(this)\n}\nGeometry.prototype.intersection = function(other) {\n return OverlayOp.intersection(this, other)\n}\nGeometry.prototype.covers = function(g) {\n return RelateOp.covers(this, g)\n}\nGeometry.prototype.coveredBy = function(g) {\n return RelateOp.covers(g, this)\n}\nGeometry.prototype.touches = function(g) {\n return RelateOp.touches(this, g)\n}\nGeometry.prototype.intersects = function(g) {\n return RelateOp.intersects(this, g)\n}\nGeometry.prototype.within = function(g) {\n return RelateOp.contains(g, this)\n}\nGeometry.prototype.overlaps = function(g) {\n return RelateOp.overlaps(this, g)\n}\nGeometry.prototype.disjoint = function(g) {\n return RelateOp.disjoint(this, g)\n}\nGeometry.prototype.crosses = function(g) {\n return RelateOp.crosses(this, g)\n}\nGeometry.prototype.buffer = function() {\n if (arguments.length === 1) {\n const distance = arguments[0]\n return BufferOp.bufferOp(this, distance)\n } else if (arguments.length === 2) {\n const distance = arguments[0]; const quadrantSegments = arguments[1]\n return BufferOp.bufferOp(this, distance, quadrantSegments)\n } else if (arguments.length === 3) {\n const distance = arguments[0]; const quadrantSegments = arguments[1]; const endCapStyle = arguments[2]\n return BufferOp.bufferOp(this, distance, quadrantSegments, endCapStyle)\n }\n}\nGeometry.prototype.convexHull = function() {\n return new ConvexHull(this).getConvexHull()\n}\nGeometry.prototype.relate = function() {\n if (arguments.length === 1) {\n const geometry = arguments[0]\n return RelateOp.relate(this, geometry)\n } else if (arguments.length === 2) {\n const geometry = arguments[0]; const intersectionPattern = arguments[1]\n return RelateOp.relate(this, geometry).matches(intersectionPattern)\n }\n}\nGeometry.prototype.getCentroid = function() {\n if (this.isEmpty()) return this._factory.createPoint()\n const centPt = Centroid.getCentroid(this)\n return this.createPointFromInternalCoord(centPt, this)\n}\nGeometry.prototype.getInteriorPoint = function() {\n if (this.isEmpty()) return this._factory.createPoint()\n let intPt = null\n const dim = this.getDimension()\n if (dim === 0)\n intPt = new InteriorPointPoint(this)\n else if (dim === 1)\n intPt = new InteriorPointLine(this)\n else intPt = new InteriorPointArea(this)\n\n const interiorPt = intPt.getInteriorPoint()\n return this.createPointFromInternalCoord(interiorPt, this)\n}\nGeometry.prototype.symDifference = function(other) {\n return OverlayOp.symDifference(this, other)\n}\nGeometry.prototype.createPointFromInternalCoord = function(coord, exemplar) {\n exemplar.getPrecisionModel().makePrecise(coord)\n return exemplar.getFactory().createPoint(coord)\n}\nGeometry.prototype.toText = function() {\n const writer = new WKTWriter()\n return writer.write(this)\n}\nGeometry.prototype.toString = function() {\n this.toText()\n}\nGeometry.prototype.contains = function(g) {\n return RelateOp.contains(this, g)\n}\nGeometry.prototype.difference = function(other) {\n return OverlayOp.difference(this, other)\n}\nGeometry.prototype.isSimple = function() {\n const op = new IsSimpleOp(this)\n return op.isSimple()\n}\nGeometry.prototype.isWithinDistance = function(geom, distance) {\n const envDist = this.getEnvelopeInternal().distance(geom.getEnvelopeInternal())\n if (envDist > distance) return false\n return DistanceOp.isWithinDistance(this, geom, distance)\n}\nGeometry.prototype.distance = function(g) {\n return DistanceOp.distance(this, g)\n}\n","import * as geom from './org/locationtech/jts/geom'\nimport * as algorithm from './org/locationtech/jts/algorithm'\nimport * as densify from './org/locationtech/jts/densify'\nimport * as dissolve from './org/locationtech/jts/dissolve'\nimport * as geomgraph from './org/locationtech/jts/geomgraph'\nimport * as index from './org/locationtech/jts/index'\nimport * as io from './org/locationtech/jts/io'\nimport * as noding from './org/locationtech/jts/noding'\nimport * as operation from './org/locationtech/jts/operation'\nimport * as precision from './org/locationtech/jts/precision'\nimport * as simplify from './org/locationtech/jts/simplify'\nimport * as triangulate from './org/locationtech/jts/triangulate'\nimport * as linearref from './org/locationtech/jts/linearref'\nimport * as util from './org/locationtech/jts/util'\n\nimport './org/locationtech/jts/monkey'\n\nconst version = 'npm_package_version (git_hash)'\nexport {\n version,\n algorithm,\n densify,\n dissolve,\n geom,\n geomgraph,\n index,\n io,\n noding,\n operation,\n precision,\n simplify,\n triangulate,\n linearref,\n util\n}\n"],"names":["NumberUtil","equalsWithTolerance","x1","x2","tolerance","Math","abs","Exception","Error","constructor","message","name","Object","keys","toString","IllegalArgumentException","Long","high","low","toBinaryString","i","mask","result","Double","NaN","isNaN","n","Number","isInfinite","isFinite","MAX_VALUE","Float64Array","Int32Array","EXP_BIT_MASK","SIGNIF_BIT_MASK","f64buf","i32buf","buffer","doubleToLongBits","value","longBitsToDouble","bits","BIAS","log2","floor","pow","MAX_REL_BITS_INTEGER","x","y","f","skip","sign","exp","NEGATIVE_INFINITY","Infinity","fract","Comparable","Clonable","Comparator","Serializable","RuntimeException","AssertionFailedException","constructor_","apply","arguments","length","call","Assert","shouldNeverReachHere","isTrue","assertion","equals","expectedValue","actualValue","kBuf","ArrayBuffer","kBufAsF64","kBufAsI32","Coordinate","z","c","getZ","NULL_ORDINATE","hashCode","getM","setOrdinate","ordinateIndex","X","Y","Z","setZ","equals2D","other","setM","m","M","getOrdinate","equals3D","equalInZ","setX","compareTo","o","getX","clone","coord","e","CloneNotSupportedException","copy","distance3D","dx","dy","dz","sqrt","getY","setY","distance","setCoordinate","interfaces_","Cloneable","DimensionalComparator","_dimensionsToTest","dimensionsToTest","compare","a","b","c1","c2","compX","compY","compZ","CoordinateXY","CoordinateXYM","_m","CoordinateXYZM","indexOf","Collection","add","addAll","isEmpty","iterator","size","toArray","remove","IndexOutOfBoundsException","List","get","set","NoSuchElementException","ArrayList","array","ensureCapacity","push","splice","clear","index","element","oldElement","Iterator","sort","comparator","slice","len","Symbol","values","arrayList","position","next","hasNext","CoordinateList","allowRepeated","getCoordinate","hasInterface","coll","isChanged","toCoordinateArray","coordArrayType","isForward","pts","Array","fill","last","obj","direction","isInteger","prev","start","end","inc","closeRing","duplicate","CoordinateSequenceFilter","filter","seq","isDone","isGeometryChanged","Envelope","_minx","_maxx","_miny","_maxy","init","p","env","p1","p2","y1","y2","intersects","q","q1","q2","minq","min","maxq","max","minp","maxp","getArea","getWidth","getHeight","otherEnvelope","isNull","getMaxX","getMaxY","getMinX","getMinY","intersection","intMinX","intMinY","intMaxX","intMaxY","covers","envminx","envmaxx","envminy","envmaxy","getDiameter","w","h","expandToInclude","minExtent","translate","transX","transY","setToNull","disjoint","maxExtent","expandBy","deltaX","deltaY","contains","centre","StringBuffer","str","append","setCharAt","substr","Integer","intValue","isNan","valueOf","Character","isWhitespace","toUpperCase","DD","_hi","_lo","dd","parse","hi","lo","determinant","det","multiply","selfSubtract","sqr","selfMultiply","strlen","charAt","isNegative","signCh","val","numDigits","numBeforeDec","hasDecimalChar","ch","isDigit","d","TEN","selfAdd","expStr","substring","parseInt","ex","NumberFormatException","val2","numDecPlaces","scale","divide","negate","createNaN","magnitude","xAbs","xLog10","log","xMag","trunc","xApprox","stringOfChar","buf","le","extractSignificantDigits","insertDecimalPoint","mag","gt","lt","ONE","decimalPointPos","MAX_PRINT_DIGITS","digit","rebiasBy10","digitChar","subtract","continueExtractingDigits","remMag","doubleValue","isZero","getSpecialNumberString","selfDivide","yhi","ylo","hc","tc","hy","ty","C","U","u","SPLIT","dump","zhi","zlo","ge","r","s","reciprocal","ceil","fhi","flo","rint","plus5","setValue","ax","axdd","diffSq","d2","H","S","T","t","hx","tx","selfSqr","toStandardNotation","toSciNotation","specialStr","sigDigits","num","numZeroes","zeroes","SCI_NOT_ZERO","digits","SCI_NOT_EXPONENT_CHAR","IllegalStateException","trailingDigits","digitsWithDecimal","isPositive","signum","PI","TWO_PI","PI_2","E","EPS","CGAlgorithmsDD","orientationIndex","orientationIndexFilter","dx1","dy1","dx2","dy2","signOfDet2x2","px","py","pw","qx","qy","qw","xInt","yInt","pa","pb","pc","detsum","detleft","detright","errbound","DP_SAFE_EPSILON","CoordinateSequence","hasM","mIndex","getDimension","getMeasures","hasZ","getCoordinateCopy","createCoordinate","expandEnvelope","Orientation","isCCW","ring","nPts","hiPt","hiIndex","iPrev","iNext","disc","CLOCKWISE","RIGHT","COUNTERCLOCKWISE","LEFT","COLLINEAR","STRAIGHT","Intersection","minX0","minY0","maxX0","maxY0","minX1","minY1","maxX1","maxY1","midx","midy","p1x","p1y","p2x","p2y","q1x","q1y","q2x","q2y","System","arraycopy","src","srcPos","dest","destPos","getProperty","MathUtil","log10","ln","LOG_10","v1","v2","v3","v4","clamp","wrap","average","Distance","segmentToSegment","A","B","D","pointToSegment","noIntersection","denom","r_num","s_num","len2","pointToLinePerpendicular","pointToSegmentString","line","minDistance","dist","CoordinateSequenceFactory","create","dimension","GeometryComponentFilter","geom","Geometry","isGeometryCollection","getTypeCode","TYPECODE_GEOMETRYCOLLECTION","getFactory","_factory","getGeometryN","isRectangle","equalsExact","geometryChanged","geometryChangedFilter","geometryChangedAction","_envelope","equalsNorm","g","norm","getLength","getNumGeometries","compareToSameClass","comp","getUserData","_userData","getSRID","_SRID","getEnvelope","toGeometry","getEnvelopeInternal","checkNotGeometryCollection","equal","normalize","reverse","res","reverseInternal","envelope","setSRID","copyInternal","getPrecisionModel","computeEnvelopeInternal","SRID","setUserData","userData","j","aElement","bElement","comparison","isEquivalentClass","getClass","isGeometryCollectionOrDerived","TYPECODE_MULTIPOINT","TYPECODE_MULTILINESTRING","TYPECODE_MULTIPOLYGON","hasNonEmptyElements","geometries","hasNullElements","factory","TYPECODE_POINT","TYPECODE_LINESTRING","TYPECODE_LINEARRING","TYPECODE_POLYGON","TYPENAME_POINT","TYPENAME_MULTIPOINT","TYPENAME_LINESTRING","TYPENAME_LINEARRING","TYPENAME_MULTILINESTRING","TYPENAME_POLYGON","TYPENAME_MULTIPOLYGON","TYPENAME_GEOMETRYCOLLECTION","CoordinateFilter","Length","ofLine","x0","y0","Lineal","CoordinateSequences","copyCoord","minDim","dim","isRing","scroll","indexOfFirstCoordinate","firstCoordinate","ensureRing","k","isEqual","cs1","cs2","cs1Size","cs2Size","minCoordinateIndex","from","to","minCoordIndex","minCoord","testCoord","extend","fact","newseq","mid","swap","tmp","ensureValidRing","createClosedRing","isClosed","coordinate","minCoordinate","UnsupportedOperationException","Dimension","toDimensionSymbol","dimensionValue","FALSE","SYM_FALSE","TRUE","SYM_TRUE","DONTCARE","SYM_DONTCARE","P","SYM_P","L","SYM_L","SYM_A","toDimensionValue","dimensionSymbol","GeometryFilter","LineString","_points","points","isSimple","getCoordinates","otherLineString","getBoundaryDimension","getCoordinateN","getNumPoints","createLineString","getEndPoint","getPointN","getBoundary","getGeometryType","getCoordinateSequence","getCoordinateSequenceFactory","isCoordinate","pt","getStartPoint","createPoint","Puntal","Point","_coordinates","coordinates","point","createGeometryCollection","Area","ofRing","ofRingSigned","sum","p0","Arrays","concat","asList","copyOf","original","newLength","Polygonal","Polygon","_shell","_holes","shell","holes","createLinearRing","shellCoordinates","childCoordinates","area","shellCopy","holeCopies","getNumInteriorRing","prevX","prevY","xChanged","yChanged","otherPolygon","thisShell","otherPolygonShell","normalized","clockwise","getExteriorRing","getInteriorRingN","createPolygon","numPoints","convexHull","otherShell","poly","shellComp","nHole1","nHole2","thisHole","otherHole","holeComp","createMultiLineString","rings","Set","SortedSet","TreeSet","GeometryCollection","_geometries","otherCollection","numGeometries","reversed","buildGeometry","theseElements","otherElements","gc","n1","n2","thisGeom","otherGeom","MultiPoint","isValid","LinearRing","validateConstruction","MINIMUM_VALID_SIZE","Coordinates","measures","CoordinateArrays","ptNotInList","testPts","testPt","newCoordinates","coord1","coord2","coordinateComparator","coordList","hasRepeatedPoints","removeRepeatedPoints","removeNull","nonNull","newCoord","copyDeep","srcStart","destStart","isEqualReversed","pts1","pts2","atLeastNCoordinatesOrNothing","increasingDirection","extract","npts","extractPts","iPts","ForwardComparator","o1","o2","BidirectionalComparator","forwardComp","isEqualRev","OLDcompare","dir1","dir2","i1","i2","comparePt","StringBuilder","CoordinateArraySequence","_dimension","_measures","coordSeq","cloneCoordinates","strBuilder","CoordinateArraySequenceFactory","instance","instanceObject","readResolve","spatial","MultiPolygon","polygons","allRings","polygon","allRingsArray","Map","put","entrySet","HashSet","map","has","done","current","HashMap","MapInterface","key","it","hashSet","entries","forEach","entry","PrecisionModel","_modelType","_scale","FLOATING","Type","modelType","FIXED","setScale","pm","mostPrecise","pm1","pm2","otherPrecisionModel","getMaximumSignificantDigits","otherSigDigits","getScale","isFloating","FLOATING_SINGLE","getType","description","makePrecise","floatSingleVal","round","maxSigDigits","_name","nameToTypeMap","maximumPreciseValue","MultiLineString","lineStrings","GeometryFactory","_precisionModel","_coordinateSequenceFactory","coordinateSequenceFactory","precisionModel","getDefaultCoordinateSequenceFactory","toMultiPolygonArray","multiPolygons","multiPolygonArray","toGeometryArray","geometryArray","toMultiLineStringArray","multiLineStrings","multiLineStringArray","toLineStringArray","lineStringArray","toMultiPointArray","multiPoints","multiPointArray","toLinearRingArray","linearRings","linearRingArray","toPointArray","pointArray","toPolygonArray","polygonArray","createPointFromInternalCoord","exemplar","createEmpty","geomList","geomType","isHeterogeneous","hasGeometryCollection","partType","geom0","isCollection","createMultiPolygon","createMultiPoint","createMultiPointFromCoords","ptSeq","GeometryLayout","XY","XYZ","XYM","XYZM","GeometryType","POINT","LINE_STRING","LINEAR_RING","POLYGON","MULTI_POINT","MULTI_LINE_STRING","MULTI_POLYGON","GEOMETRY_COLLECTION","CIRCLE","EMPTY","ZM","TokenType","TEXT","LEFT_PAREN","RIGHT_PAREN","NUMBER","COMMA","EOF","WKTGeometryType","type","Lexer","wkt","index_","isAlpha_","isNumeric_","opt_decimal","decimal","undefined","isWhiteSpace_","nextChar_","nextToken","readNumber_","readText_","scientificNotation","parseFloat","Parser","lexer","lexer_","token_","layout_","consume_","isTokenType","isMatch","match","geometry","parseGeometry_","parseGeometryLayout_","layout","dimToken","dimInfo","parseGeometryCollectionText_","isEmptyGeometry_","formatErrorMessage_","parsePointText_","parsePoint_","parseLineStringText_","parsePointList_","parsePolygonText_","parseLineStringTextList_","parseMultiPointText_","parsePointTextList_","parseMultiLineStringText_","parseMultiPolygonText_","parsePolygonTextList_","dimensions","token","o2c","ordinates","ca2p","components","encodePointGeometry","join","encodeMultiPointGeometry","ii","encodeGeometryCollectionGeometry","encode","encodeLineStringGeometry","encodeMultiLineStringGeometry","encodePolygonGeometry","encodeMultiPolygonGeometry","encodeGeometryLayout","GeometryEncoder","geometryEncoder","enc","WKTParser","geometryFactory","read","parser","write","WKTWriter","toLineString","LineIntersector","_result","_inputLines","_intPt","_intLineIndex","_isProper","_pa","_pb","computeEdgeDistance","pdx","pdy","nonRobustComputeEdgeDistance","getIndexAlongSegment","segmentIndex","intIndex","computeIntLineIndex","getTopologySummary","catBuilder","isEndPoint","isCollinear","computeIntersection","p3","p4","computeIntersect","getIntersectionNum","dist0","getEdgeDistance","dist1","isProper","hasIntersection","setPrecisionModel","isInteriorIntersection","inputLineIndex","getIntersection","NO_INTERSECTION","COLLINEAR_INTERSECTION","getEndpoint","ptIndex","isIntersection","getIntersectionAlongSegment","DONT_INTERSECT","DO_INTERSECT","POINT_INTERSECTION","RobustLineIntersector","nearestEndpoint","nearestPt","minDist","isInSegmentEnvelopes","intPt","env0","env1","intersectionSafe","checkDD","intPtDD","isIn","out","println","computeCollinearIntersection","p1q1p2","p1q2p2","q1p1q2","q1p2q2","Pq1","Pq2","Qp1","Qp2","collinear","LineSegment","ls","midPoint","minX","seg","orient0","orient1","geomFactory","isVertical","li","project","projectionFactor","pf0","pf1","newp0","newp1","angle","atan2","distancePerpendicular","minY","closestPoints","closestPt","close00","closestPoint","close01","close10","close11","factor","maxX","comp0","temp","equalsTopo","lineIntersection","maxY","pointAlongOffset","segmentLengthFraction","offsetDistance","segx","segy","ux","uy","offsetx","offsety","setCoordinates","segmentFraction","inputPt","segFrac","isHorizontal","reflect","A2plusB2","A2subB2","rx","ry","pointAlong","bits0","hash0","bits1","hash1","Location","toLocationSymbol","locationValue","EXTERIOR","BOUNDARY","INTERIOR","NONE","IntersectionMatrix","_matrix","setAll","elements","matches","actualDimensionValue","requiredDimensionSymbol","actualDimensionSymbols","requiredDimensionSymbols","isIntersects","isDisjoint","isCovers","hasPointInCommon","isCoveredBy","dimensionSymbols","row","col","column","isContains","setAtLeast","minimumDimensionSymbols","minimumDimensionValue","setAtLeastIfValid","isWithin","isTouches","dimensionOfGeometryA","dimensionOfGeometryB","isOverlaps","isEquals","builder","ai","bi","transpose","im","isCrosses","Angle","toDegrees","radians","PI_TIMES_2","isAcute","dx0","dy0","dotprod","isObtuse","interiorAngle","anglePrev","angleNext","normalizePositive","angleBetween","tip1","tail","tip2","a1","a2","diff","ang1","ang2","delAngle","toRadians","angleDegrees","getTurn","crossproduct","sin","angleBetweenOriented","angDel","PI_OVER_2","PI_OVER_4","NotRepresentableException","HCoordinate","_x","_y","_w","Triangle","signedArea","m00","m01","m10","m11","interpolateZ","v0","longestSideLength","lenAB","lenBC","lenCA","maxLen","circumcentreDD","ay","bx","by","asqr","bsqr","numx","numy","ccx","ccy","circumcentre","cx","cy","perpendicularBisector","l1","l2","angleBisector","len0","frac","splitPt","area3D","uz","vx","vy","vz","crossx","crossy","crossz","absSq","centroid","inCentre","len1","circum","inCentreX","inCentreY","NoninvertibleTransformationException","msg","AffineTransformation","_m00","_m01","_m02","_m10","_m11","_m12","setToIdentity","matrix","trans","setTransformation","m02","m12","translationInstance","setToTranslation","shearInstance","xShear","yShear","setToShear","reflectionInstance","setToReflection","rotationInstance","theta","cos","sinTheta","cosTheta","setToRotation","scaleInstance","xScale","yScale","setToScale","setToReflectionBasic","c2s2","getInverse","getDeterminant","im00","im10","im01","im11","im02","im12","compose","mp00","mp01","mp02","mp10","mp11","mp12","isIdentity","getMatrixEntries","transform","rotate","composeBefore","shear","g2","xp","yp","Matrix","solve","maxElementRow","swapRows","rowFactor","solution","AffineTransformationBuilder","_src0","_src1","_src2","_dest0","_dest1","_dest2","src0","src1","src2","dest0","dest1","dest2","compute","row0","row1","getTransformation","isSolvable","AffineTransformationFactory","createFromBaseLines","rotPt","ang","srcDist","destDist","createFromControlVectors","ComponentCoordinateExtracter","_coords","coords","GeometryCollectionMapper","_mapOp","mapOp","op","mapper","mapped","GeometryCombiner","_geomFactory","_skipEmpty","_inputGeoms","geoms","extractFactory","combine","combiner","g0","g1","createList","obj0","obj1","list","obj2","extractElements","elems","elemGeom","GeometryEditor","_isUserDataCopied","setCopyUserData","isUserDataCopied","edit","operation","editInternal","editGeometryCollection","editPolygon","collection","collectionForType","newPolygon","hole","GeometryEditorOperation","NoOpGeometryOperation","CoordinateOperation","CoordinateSequenceOperation","GeometryExtracter","_geometryType","_comps","geometryType","comps","isOfType","GeometryMapper","MapOp","gr","GeometryTransformer","_inputGeom","_pruneEmptyGeometry","_preserveGeometryCollectionType","_preserveCollections","_preserveType","transformPoint","parent","transformCoordinates","transformPolygon","isAllValidLinearRings","transformLinearRing","createCoordinateSequence","getInputGeometry","transformMultiLineString","transGeomList","transformGeom","transformLineString","transformMultiPoint","transformMultiPolygon","transformGeometryCollection","inputGeom","seqSize","LineStringExtracter","getGeometry","getLines","lines","LinearComponentExtracter","_lines","_isForcedToLineString","isForcedToLineString","forceToLineString","setForceToLineString","Collections","reverseOrder","l","pos","alen","singletonList","PointExtracter","_pts","getPoints","PolygonExtracter","getPolygons","ShortCircuitedGeometryVisitor","_isDone","applyTo","visit","GeometricShapeFactory","_geomFact","_precModel","_dim","Dimensions","_nPts","_rotationAngle","geomFact","createSupercircle","power","recipPow","radius","getMinSize","getCentre","r4","xyInt","nSegsInOct","totPts","xInc","x4","coordTrans","setNumPoints","setBase","base","setRotation","setWidth","width","createEllipse","xRadius","yRadius","centreX","centreY","iPt","createSquircle","setEnvelope","setCentre","createArc","startAng","angExtent","angSize","angInc","createArcPolygon","createRectangle","ipt","nSide","XsegLen","YsegLen","createCircle","setHeight","height","setSize","getBase","SineStarFactory","_numArms","_armLengthRatio","origin","nArms","armLengthRatio","gsf","setArmLengthRatio","setNumArms","createSineStar","numArms","armRatio","armMaxLen","insideRadius","ptArcFrac","armAngFrac","armAng","armLenFrac","curveRadius","PointPairDistance","_pt","_distance","_isNull","setMinimum","ptDist","initialize","getDistance","setMaximum","DistanceToPoint","computeDistance","tempSegment","segment","DiscreteHausdorffDistance","_g0","_g1","_ptDist","_densifyFrac","densifyFrac","setDensifyFraction","computeOrientedDistance","discreteGeom","distFilter","MaxPointDistanceFilter","getMaxPointDistance","fracFilter","MaxDensifiedByFractionDistanceFilter","orientedDistance","_maxPtDist","_minPtDist","_euclideanDist","_geom","_numSubSegs","fraction","delx","dely","ItemVisitor","visitItem","item","PointOnGeometryLocator","locate","IntervalRTreeNode","_min","POSITIVE_INFINITY","_max","getMin","queryMin","queryMax","getMax","NodeComparator","mid1","mid2","IntervalRTreeLeafNode","_item","query","visitor","IntervalRTreeBranchNode","_node1","_node2","buildExtent","SortedPackedIntervalRTree","_leaves","_root","_level","buildTree","buildLevel","insert","buildRoot","printNode","node","ArrayListVisitor","_items","getItems","RayCrossingCounter","_p","_crossingCount","_isPointOnSegment","locatePointInRing","counter","countSegment","isOnSegment","getLocation","minx","maxx","orient","isPointInPolygon","IndexedPointInAreaLocator","_index","IntervalIndexedGeometry","rcc","SegmentVisitor","_counter","_isEmpty","addLine","PointLocation","isOnLine","lineIntersector","locateInRing","isInRing","GeometryCollectionIterator","_parent","_atStart","_subcollectionIterator","isAtomic","getName","SimplePointInAreaLocator","locatePointInPolygon","shellLoc","holeLoc","containsPointInPolygon","locateInGeometry","geomi","loc","isContained","SimilarityMeasure","measure","AreaSimilarityMeasure","areaInt","areaUnion","union","HausdorffSimilarityMeasure","diagonalSize","hgt","DENSIFY_FRACTION","envSize","SimilarityMeasureCombiner","measure1","measure2","Centroid","_areaBasePt","_triangleCent3","_areasum2","_cg3","_lineCentSum","_totalLength","_ptCount","_ptCentSum","area2","centroid3","getCentroid","cent","setAreaBasePoint","basePt","addPoint","addLineSegments","lineLen","segmentLen","addHole","isPositiveArea","addTriangle","addShell","EmptyStackException","Stack","pop","peek","empty","search","UniqueCoordinateArrayFilter","_coordSet","_list","filterCoordinates","ConvexHull","_inputPts","extractCoordinates","preSort","RadialComparator","computeOctRing","inputPts","octPts","computeOctPts","lineOrPolygon","cleanRing","linearRing","cleanedRing","previousDistinctCoordinate","currentCoordinate","nextCoordinate","isBetween","cleanedRingCoordinates","c3","reduce","polyPts","reducedSet","reducedPts","padArray3","getConvexHull","sortedPts","cHS","grahamScan","cH","pad","stack","ps","_origin","polarCompare","dxp","dyp","dxq","dyq","oq","InteriorPointArea","_interiorPoint","_maxWidth","process","getInteriorPoint","avg","processPolygon","intPtPoly","InteriorPointPolygon","_polygon","_interiorPointY","_interiorSectionWidth","ScanLineYOrdinateFinder","getScanLineY","isEdgeCrossingCounted","scanY","intersectsHorizontalLine","segDX","segDY","findBestMidpoint","crossings","DoubleComparator","interiorPointX","scanRing","ptPrev","addEdgeCrossing","_poly","_centreY","_hiY","_loY","finder","updateInterval","scanLineY","InteriorPointLine","_centroid","_minDistance","addInterior","addEndpoints","InteriorPointPoint","BoundaryNodeRule","isInBoundary","boundaryCount","Mod2BoundaryNodeRule","EndPointBoundaryNodeRule","MultiValentEndPointBoundaryNodeRule","MonoValentEndPointBoundaryNodeRule","MOD2_BOUNDARY_RULE","ENDPOINT_BOUNDARY_RULE","MULTIVALENT_ENDPOINT_BOUNDARY_RULE","MONOVALENT_ENDPOINT_BOUNDARY_RULE","OGC_SFS_BOUNDARY_RULE","PointLocator","_boundaryRule","_isIn","_numBoundaries","boundaryRule","locateInPolygonRing","updateLocationInfo","computeLocation","locateOnPoint","locateOnLineString","locateInPolygon","ml","mpoly","ptCoord","MinimumBoundingCircle","_input","_extremalPts","_centre","_radius","farthestPoints","dist01","dist12","dist20","pointWitMinAngleWithX","minSin","minAngPt","lowestPoint","pointWithMinAngleWithSegment","Q","minAng","getRadius","getExtremalPoints","computeCirclePoints","hullPts","R","computeCentre","getCircle","centrePoint","getMaximumDiameter","maxDiameter","MinimumDiameter","_isConvex","_convexHullPts","_minBaseSeg","_minWidthPt","_minPtIndex","_minWidth","isConvex","nextIndex","computeC","getMinimumDiameter","getMinimumRectangle","computeSegmentForLine","getWidthCoordinate","computeMinimumDiameter","getSupportingSegment","computeWidthConvex","convexGeom","computeConvexRingMinDiameter","currMaxIndex","findMaxPerpDistance","startIndex","maxPerpDistance","nextPerpDistance","maxIndex","minPara","maxPara","minPerp","maxPerp","paraC","perpC","maxPerpLine","minPerpLine","maxParaLine","minParaLine","Densifier","_distanceTolerance","densifyPoints","distanceTolerance","precModel","densifiedSegCount","densifiedSegLen","segFract","densify","densifier","setDistanceTolerance","getResultGeometry","DensifyTransformer","roughGeom","createValidArea","newPts","roughAreaGeom","Quadrant","isNorthern","quad","NE","NW","isOpposite","quad1","quad2","commonHalfPlane","isInHalfPlane","halfPlane","SE","SW","quadrant","HalfEdge","_orig","_sym","_next","orig","e0","e1","link","find","oNext","isEdgesSorted","lowest","findLowest","eNext","isSorted","directionY","directionPt","eAdd","insertAfter","ePrev","insertionEdge","save","setNext","sym","degree","compareAngularDirection","directionX","quadrant2","prevNode","toStringNode","sb","format","setSym","toStringNodeEdge","MarkHalfEdge","_isMarked","setMarkBoth","isMarked","setMark","markBoth","mark","EdgeGraph","_vertexMap","isValidEdge","cmp","eAdj","eAdjDest","createEdge","addEdge","eSame","getVertexEdges","findEdge","DissolveHalfEdge","_isStart","setStart","isStart","DissolveEdgeGraph","LineDissolver","_graph","_nodeEdgeStack","_ringStartEdge","dissolve","getResult","updateRingStartEdge","computeResult","eNode","stackEdges","buildLines","buildRing","eStartRing","buildLine","eStart","edges","component","lineString","doneStart","Position","opposite","ON","MonotoneChain","mce","chainIndex","computeIntersections","mc","si","computeIntersectsForChain","SweepLineEvent","_label","_xValue","_eventType","_insertEvent","_deleteEventIndex","_obj","insertEvent","DELETE","label","INSERT","isDelete","setDeleteEventIndex","deleteEventIndex","getObject","pe","getInsertEvent","isInsert","isSameLabel","ev","getDeleteEventIndex","EdgeSetIntersector","SegmentIntersector","_hasIntersection","_hasProper","_hasProperInterior","_properIntersectionPoint","_li","_includeProper","_recordIsolated","_isSelfIntersection","_numIntersections","numTests","_bdyNodes","_isDoneWhenProperInt","includeProper","recordIsolated","isAdjacentSegments","isTrivialIntersection","segIndex0","segIndex1","maxSegIndex","getProperIntersectionPoint","setIsDoneIfProperInt","isDoneWhenProperInt","hasProperInteriorIntersection","isBoundaryPointInternal","bdyNodes","hasProperIntersection","isBoundaryPoint","setBoundaryNodes","bdyNodes0","bdyNodes1","addIntersections","p00","p01","p10","p11","setIsolated","SimpleMCSweepLineIntersector","events","nOverlaps","prepareEvents","processOverlaps","edges0","edges1","addEdges","testAllSegments","edge","edgeSet","getMonotoneChainEdge","getStartIndexes","ev0","mc0","ev1","mc1","TopologyLocation","location","on","gl","left","right","setAllLocations","locValue","setAllLocationsIfNull","isLine","merge","newLoc","getLocations","flip","setLocations","posIndex","isArea","isAnyNull","setLocation","locIndex","isEqualOnSide","allPositionsEqual","Label","elt","onLoc","lbl","geomIndex","leftLoc","rightLoc","toLineLabel","lineLabel","getGeometryCount","count","side","toLine","EdgeIntersection","getSegmentIndex","print","maxSegmentIndex","SortedMap","BLACK","RED","colorOf","color","parentOf","setColor","leftOf","rightOf","TreeMap","root_","size_","getValue","getKey","oldValue","fixAfterInsertion","rotateLeft","rotateRight","getFirstEntry","successor","containsKey","EdgeIntersectionList","_nodeMap","ei","addSplitEdges","edgeList","eiPrev","newEdge","createSplitEdge","ei0","ei1","lastSegStartPt","useIntPt1","Edge","eiNew","IntArrayList","_data","_size","initialCapacity","capacity","MonotoneChainIndexer","toIntArray","getChainStartIndices","startIndexList","findChainEnd","chainQuad","OLDgetChainStartIndices","MonotoneChainEdge","mcb","chainIndex0","chainIndex1","start0","end0","start1","end1","overlaps","mid0","computeIntersects","Depth","_depth","NULL_VALUE","depthAtLocation","getDepth","setDepth","depthValue","minDepth","newValue","getDelta","GraphComponent","_isInResult","_isCovered","_isCoveredSet","_isVisited","setVisited","isVisited","setInResult","isInResult","isCovered","isCoveredSet","setLabel","getLabel","setCovered","updateIM","computeIM","_env","eiList","_mce","_isIsolated","_depthDelta","getCollapsedEdge","newe","isIsolated","setName","isEqualForward","isEqualReverse","iRev","isCollapsed","getMaximumSegmentIndex","getDepthDelta","printReverse","addIntersection","normalizedSegmentIndex","nextSegIndex","nextPt","isPointwiseEqual","setDepthDelta","depthDelta","getEdgeIntersectionList","Node","_coord","_edges","isIncidentEdgeInResult","getEdges","de","getEdge","computeMergedLocation","label2","eltIndex","nLoc","argIndex","onLocation","mergeLabel","thisLoc","setNode","setLabelBoundary","NodeMap","nodeMap","nodeFact","addNode","createNode","getBoundaryNodes","EdgeEnd","_edge","_node","_p0","_p1","_dx","_dy","_quadrant","compareDirection","getDy","className","lastDotPos","lastIndexOf","getDirectedCoordinate","getDx","getQuadrant","getNode","computeLabel","boundaryNodeRule","TopologyException","DirectedEdge","_isForward","_nextMin","_edgeRing","_minEdgeRing","computeDirectedLabel","depthFactor","currLocation","nextLocation","getNextMin","getNext","depthVal","isInteriorAreaEdge","setNextMin","nextMin","setMinEdgeRing","minEdgeRing","isLineEdge","isExteriorIfArea0","isExteriorIfArea1","setEdgeRing","edgeRing","getMinEdgeRing","getSym","printEdge","setVisitedEdge","setEdgeDepths","depth","directionFactor","oppositePos","delta","oppositeDepth","getEdgeRing","NodeFactory","PlanarGraph","_nodes","_edgeEndList","linkResultDirectedEdges","nodes","nodeit","printEdges","getNodeIterator","debugPrintln","isBoundaryNode","linkAllDirectedEdges","matchInSameDirection","ep0","ep1","getEdgeEnds","debugPrint","getEdgeIterator","findEdgeInSameDirection","eCoord","insertEdge","findEdgeEnd","ee","edgesToAdd","de1","de2","getNodes","GeometryGraph","_parentGeom","_lineEdgeMap","_boundaryNodeRule","_useBoundaryDeterminationRule","_argIndex","_boundaryNodes","_hasTooFewPoints","_invalidPoint","_areaPtLocator","_ptLocator","parentGeom","determineBoundary","insertBoundaryPoint","computeSelfNodes","computeRingSelfNodes","isDoneIfProperInt","esi","createEdgeSetIntersector","isRings","computeAllSegments","addSelfIntersectionNodes","computeSplitEdges","edgelist","computeEdgeIntersections","getBoundaryNodeRule","hasTooFewPoints","insertPoint","addPolygon","addPolygonRing","addLineString","getInvalidPoint","getBoundaryPoints","addSelfIntersectionNode","lr","cwLeft","cwRight","eLoc","eiIt","addCollection","KdNodeVisitor","KdNode","_left","_right","_count","data","isRepeated","getRight","setLeft","getData","getCount","getLeft","increment","setRight","KdTree","_numberOfNodes","_tolerance","toCoordinates","kdnodes","includeRepeated","matchNode","findBestMatchNode","insertExact","queryEnv","queryNode","currentNode","odd","discriminant","searchLeft","searchRight","BestMatchVisitor","queryEnvelope","leafNode","isOddLevel","isLessThan","isInTolerance","_matchNode","_matchDist","update","NodeBase","_subnode","getSubnodeIndex","centrex","centrey","subnodeIndex","hasChildren","isPrunable","hasItems","addAllItems","resultItems","getNodeCount","subSize","addAllItemsFromOverlapping","searchEnv","isSearchMatch","visitItems","itemEnv","found","maxSubDepth","sqd","DoubleBits","exponent","CVTFWD","powerOf2","NumW","Qty","Sign","Expo","Mant","Bin","Inf","ExW","Key","computeKey","computeQuadLevel","dMax","level","getLevel","quadSize","getPoint","_centrex","_centrey","createExpanded","addEnv","expandEnv","largerNode","insertNode","getSubnode","createSubnode","miny","maxy","sqEnv","childNode","IntervalSize","isZeroWidth","maxAbs","scaledInterval","MIN_BINARY_EXPONENT","Root","insertContained","tree","isZeroX","isZeroY","SpatialIndex","Quadtree","_minExtent","ensureExtent","collectStats","insertEnv","queryAll","foundItems","posEnv","delX","delY","Boundable","getBounds","ItemBoundable","_bounds","bounds","getItem","PriorityQueue","poll","minItem","reorder","child","AbstractNode","_childBoundables","getChildBoundables","addChildBoundable","childBoundable","computeBounds","EnvelopeDistance","maxDistance","ax1","ay1","ax2","ay2","bx1","by1","bx2","by2","maximumDistance","env2","minMaxDistance","aminx","aminy","amaxx","amaxy","bminx","bminy","bmaxx","bmaxy","BoundablePair","_boundable1","_boundable2","_itemDistance","boundable1","boundable2","itemDistance","isComposite","expandToQueue","priQ","isComp1","isComp2","expand","isLeaves","nd","bndComposite","bndOther","isFlipped","children","bp","getBoundable","AbstractSTRtree","_built","_itemBoundables","_nodeCapacity","DEFAULT_NODE_CAPACITY","nodeCapacity","compareDoubles","queryInternal","searchBounds","childBoundables","getIntersectsOp","getNodeCapacity","lastNode","build","removeItem","childToRemove","itemsTree","valuesTree","valuesTreeForNode","valuesTreeForChild","boundablesAtLevel","boundables","top","boundable","createHigherLevels","getRoot","childToPrune","boundablesOfALevel","parentBoundables","createParentBoundables","maxChildDepth","childDepth","newLevel","sortedChildBoundables","getComparator","IntersectsOp","ItemDistance","item1","item2","STRtree","kNearestNeighbors","items","createParentBoundablesFromVerticalSlices","verticalSlices","createParentBoundablesFromVerticalSlice","nearestNeighbourK","initBndPair","distanceLowerBound","bndPair","pairDistance","bp1","bp2","STRtreeNode","intersectsOp","sliceCount","sliceCapacity","slices","boundablesAddedToSlice","yComparator","minLeafCount","xComparator","nearestNeighbour","itemDist","minPair","bnd","isWithinDistance","distanceUpperBound","aBounds","bBounds","geometryTypes","GeoJSONParser","json","JSON","Feature","feature","bbox","FeatureCollection","featureCollection","features","sub","multipoint","geoJson","linestring","multilinestring","shellGeoJson","holeGeoJson","multipolygon","GeoJSONReader","GeoJSONWriter","WKTReader","p2c","OL3Parser","olReference","ol","inject","convertFromPoint","convertFromLineString","convertFromLinearRing","convertFromPolygon","convertFromMultiPoint","convertFromMultiLineString","convertFromMultiPolygon","convertFromCollection","getLinearRings","multiPoint","multiLineString","getLineStrings","multiPolygon","getGeometries","convertToPoint","convertToLineString","convertToLinearRing","convertToPolygon","convertToMultiPoint","convertToMultiLineString","convertToMultiPolygon","convertToCollection","geometryCollection","SegmentPointComparator","relativeSign","octant","xSign","ySign","compareValue","compareSign0","compareSign1","SegmentNode","_segString","_segmentOctant","_isInterior","segString","segmentOctant","isInterior","SegmentNodeList","getSplitCoordinates","addEdgeCoordinates","addCollapsedNodes","collapsedVertexIndexes","findCollapsesFromInsertedNodes","findCollapsesFromExistingVertices","vertexIndex","createSplitEdgePts","findCollapseIndex","collapsedVertexIndex","numVerticesBetween","NodedSegmentString","getSegmentOctant","checkSplitEdgesCorrectness","splitEdges","edgePts","split0","pt0","splitn","splitnPts","ptn","Octant","adx","ady","SegmentString","setData","NodableSegmentString","_nodeList","getNodedSubstrings","segStrings","resultEdgelist","ss","getNodeList","safeOctant","addIntersectionNode","MonotoneChainOverlapAction","_overlapSeg1","_overlapSeg2","overlap","mc2","start2","getLineSegment","_start","_end","_context","_id","context","computeSelect","mcs","select","computeOverlaps","mco","setId","id","getEndIndex","getStartIndex","getContext","getId","MonotoneChainBuilder","safeStart","getChains","mcList","chainStart","chainEnd","Noder","computeNodes","SinglePassNoder","_segInt","segInt","setSegmentIntersector","MCIndexNoder","_monoChains","_idCounter","_nodedSegStrings","_nOverlaps","getMonotoneChains","getIndex","segStr","segChains","inputSegStrings","intersectChains","overlapAction","SegmentOverlapAction","queryChain","overlapChains","testChain","_si","ss1","ss2","processIntersections","ScaledNoder","_noder","_scaleFactor","_offsetX","_offsetY","_isScaled","noder","scaleFactor","isIntegerPrecision","rescale","nodedSegmentStrings","roundPts","roundPtsNoDup","splitSS","intSegStrings","BoundaryOp","_bnRule","_endpointMap","bnRule","bop","boundaryMultiLineString","mLine","getEmptyMultiPoint","bdyPts","computeBoundaryCoordinates","boundaryLineString","closedEndpointOnBoundary","addEndpoint","valence","Counter","IsSimpleOp","_isClosedEndpointsInInterior","_nonSimpleLocation","isSimpleMultiPoint","mp","isSimplePolygonal","isSimpleLinearGeometry","hasClosedEndpointIntersection","graph","endPoints","eiInfo","getNonSimpleLocation","hasNonEndpointIntersection","EndpointInfo","computeSimple","isSimpleGeometryCollection","BufferParameters","_quadrantSegments","DEFAULT_QUADRANT_SEGMENTS","_endCapStyle","CAP_ROUND","_joinStyle","JOIN_ROUND","_mitreLimit","DEFAULT_MITRE_LIMIT","_isSingleSided","_simplifyFactor","DEFAULT_SIMPLIFY_FACTOR","quadrantSegments","setQuadrantSegments","endCapStyle","setEndCapStyle","joinStyle","mitreLimit","setJoinStyle","setMitreLimit","bufferDistanceError","quadSegs","alpha","getEndCapStyle","isSingleSided","JOIN_BEVEL","JOIN_MITRE","getJoinStyle","setSimplifyFactor","simplifyFactor","getSimplifyFactor","getQuadrantSegments","getMitreLimit","setSingleSided","CAP_FLAT","CAP_SQUARE","RightmostEdgeFinder","_minIndex","_minCoord","_minDe","_orientedDe","getRightmostSide","getRightmostSideOfSegment","checkForRightmostCoordinate","findRightmostEdgeAtVertex","pPrev","pNext","orientation","usePrev","findRightmostEdgeAtNode","star","getRightmostEdge","dirEdgeList","rightmostSide","LinkedList","addLast","removeFirst","shift","BufferSubgraph","_finder","_dirEdgeList","_rightMostCoord","clearVisitedEdges","getRightmostCoordinate","computeNodeDepth","startEdge","computeDepths","copySymDepths","computeDepth","outsideDepth","addReachable","findResultEdges","nodesVisited","nodeQueue","startNode","adjNode","edgeEnv","dirEdge","nodeStack","symNode","getDirectedEdges","EdgeRing","_startDe","_maxNodeDegree","_ring","_isHole","_geometryFactory","computePoints","computeRing","isFirstEdge","addPoints","getLinearRing","computeMaxNodeDegree","getOutgoingDegree","isHole","containsPoint","isShell","getMaxNodeDegree","getShell","deLabel","setShell","toPolygon","holeLR","MinimalEdgeRing","er","MaximalEdgeRing","buildMinimalRings","minEdgeRings","minEr","linkDirectedEdgesForMinimalEdgeRings","linkMinimalDirectedEdges","PolygonBuilder","_shellList","findEdgeRingContaining","testEr","shellList","testRing","testEnv","minShell","minShellEnv","tryShell","tryShellRing","tryShellEnv","sortShellsAndHoles","edgeRings","freeHoleList","computePolygons","resultPolyList","placeFreeHoles","buildMinimalEdgeRings","maxEdgeRings","findShell","placePolygonHoles","buildMaximalEdgeRings","dirEdges","shellCount","BufferInputLineSimplifier","_inputLine","_distanceTol","_isDeleted","_angleOrientation","inputLine","simplify","distanceTol","simp","isDeletable","i0","isConcave","isShallow","isShallowSampled","deleteShallowConcavities","midIndex","findNextNonDeletedIndex","lastIndex","isMiddleVertexDeleted","isShallowConcavity","isAngleToSimplify","NUM_PTS_TO_CHECK","collapseLine","INIT","KEEP","OffsetSegmentString","_ptList","_minimimVertexDistance","COORDINATE_ARRAY_TYPE","addPt","bufPt","isRedundant","addPts","lastPt","startPt","setMinimumVertexDistance","minimimVertexDistance","OffsetSegmentGenerator","_maxCurveSegmentError","_filletAngleQuantum","_closingSegLengthFactor","_segList","_bufParams","_s0","_s1","_s2","_seg0","_seg1","_offset0","_offset1","_side","_hasNarrowConcaveAngle","bufParams","MAX_CLOSING_SEG_LEN_FACTOR","addNextSegment","addStartPoint","computeOffsetSegment","outsideTurn","addCollinear","addOutsideTurn","addInsideTurn","addLineEndCap","offsetL","offsetR","addDirectedFillet","squareCapSideOffset","squareCapLOffset","squareCapROffset","addMitreJoin","offset0","offset1","mitreRatio","addLimitedMitreJoin","OFFSET_SEGMENT_SEPARATION_FACTOR","addBevelJoin","addCornerFillet","createSquare","addSegments","addFirstSegment","startAngle","endAngle","addLastSegment","initSideSegments","s1","s2","ang0","angDiff","angDiffHalf","midAng","mitreMidAng","mitreDist","bevelDelta","bevelHalfLen","bevelMidX","bevelMidY","bevelMidPt","mitreMidLine","bevelEndLeft","bevelEndRight","totalAngle","nSegs","angleInc","offset","sideSign","INSIDE_TURN_VERTEX_SNAP_DISTANCE_FACTOR","CURVE_VERTEX_SNAP_DISTANCE_FACTOR","numInt","hasNarrowConcaveAngle","OffsetCurveBuilder","copyCoordinates","getOffsetCurve","isRightSide","posDistance","segGen","getSegGen","computePointCurve","computeOffsetCurve","curvePts","computeSingleSidedBufferCurve","distTol","simplifyTolerance","simp2","simp1","computeRingBufferCurve","computeLineBufferCurve","getLineCurve","isLineOffsetEmpty","lineCoord","getBufferParameters","bufDistance","getRingCurve","SubgraphDepthLocater","_subgraphs","_seg","subgraphs","findStabbedSegments","stabbingRayLeftPt","stabbedSegments","bsg","ds","DepthSegment","_leftDepth","_upwardSeg","orientIndex","compareX","seg0","seg1","compare0","OffsetCurveSetBuilder","_curveBuilder","_curveList","curveBuilder","addRingSide","cwLeftLoc","cwRightLoc","curve","addCurve","addRingBothSides","offsetSide","shellCoord","isErodedCompletely","holeCoord","isTriangleErodedCompletely","triangleCoord","bufferDistance","tri","distToCentre","getCurves","ringCoord","envMinDimension","EdgeEndStar","_edgeMap","_edgeList","_ptInAreaLocation","getNextCW","iNextCW","propagateSideLabels","startLoc","currLoc","isAreaLabelsConsistent","geomGraph","computeEdgeEndLabels","checkAreaLabelsConsistent","lastEdgeIndex","startLabel","findIndex","eSearch","computeLabelling","hasDimensionalCollapseEdge","getDegree","insertEdgeEnd","DirectedEdgeStar","_resultAreaEdgeList","_SCANNING_FOR_INCOMING","_LINKING_TO_OUTGOING","getResultAreaEdges","firstOut","incoming","state","nextOut","nextIn","de0","deLast","quad0","updateLabelling","nodeLabel","prevOut","firstIn","edgeIndex","startDepth","targetLastDepth","nextDepth","lastDepth","endIndex","currDepth","nextDe","mergeSymLabels","findCoveredLineEdges","eLabel","OverlayNodeFactory","OrientedCoordinateArray","_orientation","compareOriented","orientation1","orientation2","limit1","limit2","compPt","done1","done2","oca","EdgeList","_ocaMap","edgeColl","findEdgeIndex","findEqualEdge","matchEdge","IntersectionAdder","_hasInterior","numIntersections","numInteriorIntersections","numProperIntersections","getLineIntersector","hasInteriorIntersection","BufferBuilder","_workingPrecisionModel","_workingNoder","lLoc","rLoc","convertSegStrings","setWorkingPrecisionModel","insertUniqueEdge","existingEdge","existingLabel","labelToMerge","mergeDelta","existingDelta","newDelta","buildSubgraphs","subgraphList","polyBuilder","processedGraphs","subgraph","locater","createSubgraphs","createEmptyResultGeometry","emptyGeom","getNoder","curveSetBuilder","bufferSegStrList","computeNodedEdges","resultGeom","nodedSegStrings","oldLabel","setNoder","NodingValidator","_segStrings","checkEndPtVertexIntersections","checkInteriorIntersections","ss0","pts0","checkValid","checkCollapses","checkCollapse","HotPixel","_originalPt","_ptScaled","_p0Scaled","_p1Scaled","_corner","_safeEnv","initCorners","intersectsScaled","segMinx","segMaxx","segMiny","segMaxy","isOutsidePixelEnv","intersectsToleranceSquare","copyScaled","pScaled","getSafeEnvelope","safeTolerance","SAFE_ENV_EXPANSION_FACTOR","intersectsPixelClosure","intersectsLeft","intersectsBottom","addSnappedNode","segIndex","MonotoneChainSelectAction","selectedSegment","MCIndexPointSnapper","snap","hotPixel","parentEdge","hotPixelVertexIndex","pixelEnv","hotPixelSnapAction","HotPixelSnapAction","isNodeAdded","_hotPixel","_parentEdge","_hotPixelVertexIndex","_isNodeAdded","InteriorIntersectionFinderAdder","_interiorIntersections","getInteriorIntersections","MCIndexSnapRounder","_pm","_pointSnapper","checkCorrectness","inputSegmentStrings","resultSegStrings","nv","printStackTrace","snapRound","intersections","findInteriorIntersections","computeIntersectionSnaps","computeVertexSnaps","intFinderAdder","edge0","snapPts","snapPt","BufferOp","_argGeom","_resultGeometry","_saveException","bufferOp","gBuf","geomBuf","bufOp","params","precisionScaleFactor","maxPrecisionDigits","envMax","expandByDistance","bufEnvMax","bufEnvPrecisionDigits","minUnitLog10","bufferFixedPrecision","fixedPM","bufBuilder","bufferReducedPrecision","precDigits","MAX_PRECISION_DIGITS","precisionDigits","sizeBasedScaleFactor","computeGeometry","bufferOriginalPrecision","argPM","CAP_BUTT","GeometryLocation","_component","_segIndex","INSIDE_AREA","isInsideArea","toPoint","getGeometryComponent","ConnectedElementLocationFilter","_locations","locations","DistanceOp","_terminateDistance","_minDistanceLocation","terminateDistance","distOp","envDist","nearestPoints","computeContainmentDistance","locPtPoly","polyGeomIndex","polyGeom","locationsIndex","polys","insideLocs","locs","ptLoc","computeMinDistanceLinesPoints","locGeom","computeMinDistance","computeFacetDistance","lines0","lines1","computeMinDistanceLines","updateMinDistance","computeMinDistancePoints","nearestLocations","nearestPts","coord0","segClosestPoint","line0","line1","segEnv0","segEnv1","points0","points1","pt1","EdgeString","_directedEdges","forwardDirectedEdges","reverseDirectedEdges","coordinateList","directedEdge","getEdgeDirection","getLine","getComponentWithVisitedState","visitedState","visited","setMarked","marked","setContext","_from","_to","_edgeDirection","_angle","edgeDirection","toEdges","isRemoved","getDirectionPt","getAngle","getFromNode","setEdge","getToNode","LineMergeDirectedEdge","getOutEdges","_dirEdge","setDirectedEdges","addOutEdge","getDirEdge","fromNode","getOppositeNode","_outEdges","_sorted","getNextEdge","sortEdges","getNextCWEdge","modi","_deStar","deStar","getEdgesBetween","node0","node1","commonEdges","retainAll","LineMergeEdge","_line","_dirEdges","findNodesOfDegree","nodesFound","nodeIterator","dirEdgeIterator","edgeIterator","outEdges","findNode","LineMergeGraph","startCoordinate","endCoordinate","endNode","directedEdge0","directedEdge1","LineMerger","_mergedLineStrings","_edgeStrings","buildEdgeStringsForUnprocessedNodes","buildEdgeStringsStartingAt","buildEdgeStringsForNonDegree2Nodes","buildEdgeStringsForObviousStartNodes","getMergedLineStrings","buildEdgeStringStartingWith","buildEdgeStringsForIsolatedLoops","edgeString","Subgraph","_parentGraph","parentGraph","getParent","ConnectedSubgraphFinder","findSubgraph","getConnectedSubgraphs","toNode","LineSequencer","_lineCount","_isRun","_sequencedGeometry","_isSequenceable","findUnvisitedBestOrientedDE","wellOrientedDE","unvisitedDE","findLowestDegreeNode","minDegree","minDegreeNode","isSequenced","mls","prevSubgraphNodes","currNodes","revPts","sequence","sequencer","getSequencedLineStrings","hasSequence","oddDegreeCount","computeSequence","sequences","findSequences","buildSequencedGeometry","finalLineCount","csFinder","findSequence","addReverseSubpath","lit","expectedClosed","unvisitedOutDE","startDE","startDESym","listIterator","hasPrevious","previous","orientedSeq","newSeq","addFirst","endEdge","flipSeq","hasDegree1Node","hasObviousStartNode","lineToAdd","isSequenceable","LineStringSnapper","_snapTolerance","_srcPts","_allowSnappingToSourceVertices","_isClosed","srcLine","snapTolerance","srcPts","snapVertices","srcCoords","srcPt","snapVert","findSnapForVertex","snapTo","snapSegments","distinctPtCount","findSegmentIndexToSnap","snapIndex","setAllowSnappingToSourceVertices","allowSnappingToSourceVertices","GeometrySnapper","_srcGeom","srcGeom","snapGeom","snapper0","snapper1","computeOverlaySnapTolerance","computeSizeBasedSnapTolerance","fixedSnapTol","minDimension","snapTol","SNAP_PRECISION_FACTOR","snapToSelf","cleanResult","extractTargetCoordinates","snapTrans","SnapTransformer","snappedGeom","computeSnapTolerance","ringPts","minSegLen","computeMinimumSegmentLength","ptSet","segLen","_snapPts","_isSelfSnap","isSelfSnap","snapLine","snapper","BasicSegmentString","NodingIntersectionFinder","_findAllIntersections","_isCheckEndSegmentsOnly","_keepIntersections","_isInteriorIntersectionsOnly","_interiorIntersection","_intSegments","_intersections","_intersectionCount","createAllIntersectionsFinder","setFindAllIntersections","isInteriorVertexIntersection","isEnd0","isEnd1","isEnd00","isEnd01","isEnd10","isEnd11","createInteriorIntersectionCounter","setInteriorIntersectionsOnly","setKeepIntersections","createIntersectionCounter","isEndSegment","createAnyIntersectionFinder","createInteriorIntersectionsFinder","setCheckEndSegmentsOnly","isCheckEndSegmentsOnly","getIntersectionSegments","getIntersections","findAllIntersections","keepIntersections","isSameSegString","isSameSegment","isEndSegPresent","isInteriorInt","isInteriorVertexInt","isAdjacentSegment","isInteriorIntersectionsOnly","FastNodingValidator","_isValid","execute","getErrorMessage","intSegs","EdgeNodingValidator","_nv","toSegmentStrings","validator","LineBuilder","_op","_lineEdgesList","_resultLineList","ptLocator","collectLines","opCode","getGraph","collectLineEdge","collectBoundaryTouchEdge","labelIsolatedLine","targetIndex","getArgGeometry","OverlayOp","isResultOfOp","isCoveredByA","labelIsolatedLines","edgesList","INTERSECTION","PointBuilder","_resultPointList","filterCoveredNodeToPoint","isCoveredByLA","extractNonCoveredResultNodes","CommonBits","_isFirst","_commonMantissaBitsCount","_commonBits","_commonSignExp","getCommon","numBits","signExpBits","numSignExp","numCommonMostSigMantissaBits","zeroLowerBits","numStr","padStr","bitStr","getBit","nBits","prop","num1","num2","CommonBitsRemover","_commonCoord","_ccFilter","CommonCoordinateFilter","addCommonBits","Translater","removeCommonBits","invCoord","getCommonCoordinate","_commonBitsX","_commonBitsY","SnapOverlayOp","_cbr","overlayOp","UNION","symDifference","SYMDIFFERENCE","difference","DIFFERENCE","selfSnap","remGeom","prepareResult","prepGeom","SnapIfNeededOverlayOp","isSuccess","savedException","GeometryGraphOperation","_resultPrecisionModel","_arg","setComputationPrecision","_resultGeom","_resultPolyList","geom1","gov","geomOv","createEmptyResult","resultDimension","dim0","dim1","overlayOpCode","resultDim","loc0","loc1","cancelDuplicateResultEdges","resultPointList","resultLineList","opcode","replaceCollapsedEdges","newEdges","updateNodeLabelling","computeOverlay","insertUniqueEdges","copyPoints","baseSplitEdges","computeLabelsFromDepths","labelIncompleteNodes","findResultAreaEdges","lineBuilder","pointBuilder","labelIncompleteNode","graphNode","newNode","ni","PolygonizeDirectedEdge","setRing","getRing","PolygonizeEdge","ConnectedInteriorTester","_geomGraph","_disconnectedRingcoord","findDifferentPoint","visitInteriorRing","intDe","visitLinkedDirectedEdges","visitShellInteriors","setInteriorEdgesInResult","startDe","buildEdgeRings","hasUnvisitedShellEdge","isInteriorsConnected","EdgeEndBuilder","createEdgeEndForNext","eiCurr","eiNext","createEdgeEndForPrev","computeEdgeEnds","EdgeEndBundle","_edgeEnds","computeLabelOn","foundInterior","computeLabelSide","computeLabelSides","EdgeEndBundleStar","esb","eb","RelateNode","updateIMFromEdges","RelateNodeFactory","RelateNodeGraph","insertEdgeEnds","copyNodesAndLabels","nodeIt","computeIntersectionNodes","eeBuilder","eeList","edgeIt","ConsistentAreaTester","_nodeGraph","isNodeEdgeAreaLabelsConsistent","hasDuplicateRings","eeb","isNodeConsistentArea","intersector","IndexedNestedRingTester","_rings","_totalEnv","_nestedPt","buildIndex","getNestedPoint","isNonNested","innerRing","innerRingPts","results","searchRing","searchRingPts","innerRingPt","IsValidOp","findPtNotNode","isInside","TopologyValidationError","_errorType","errorType","getErrorType","getMessage","errMsg","locStr","ERROR","REPEATED_POINT","HOLE_OUTSIDE_SHELL","NESTED_HOLES","DISCONNECTED_INTERIOR","SELF_INTERSECTION","RING_SELF_INTERSECTION","NESTED_SHELLS","DUPLICATE_RINGS","TOO_FEW_POINTS","INVALID_COORDINATE","RING_NOT_CLOSED","_parentGeometry","_isSelfTouchingRingFormingHoleValid","_validErr","parentGeometry","testCoords","searchEdge","isValidOp","checkInvalidCoordinates","checkHolesNotNested","nestedTester","innerHole","checkConsistentArea","cat","isValidArea","checkShellInsideHole","shellPts","holePts","shellPt","insideHole","holePt","insideShell","checkNoSelfIntersectingRings","checkNoSelfIntersectingRing","checkConnectedInteriors","cit","nodeSet","isFirst","checkHolesInShell","isShellEmpty","pir","outside","checkTooFewPoints","getValidationError","checkClosedRing","checkClosedRings","checkShellsNotNested","setSelfTouchingRingFormingHoleValid","checkShellNotNested","polyShell","insidePolyShell","badNestedPt","_deList","_lowestEdge","_locator","_ringPts","_isProcessed","_isIncludedSet","_isIncluded","findDirEdgesInRing","erList","minRing","minRingEnv","tryEdgeRing","tryRing","isIncluded","isIncludedSet","getLocator","isOuterHole","hasShell","getPolygon","isProcessed","holeER","setIncluded","getOuterHole","adjRing","computeHole","isOuterShell","getLineString","updateIncluded","adjShell","setProcessed","EnvelopeComparator","r0","r1","PolygonizeGraph","findLabeledEdgeRings","edgeRingStarts","currLabel","getDegreeNonDeleted","deleteAllEdges","computeNextCWEdges","prevDE","outDE","computeNextCCWEdges","firstOutDE","prevInDE","inDE","findIntersectionNodes","intNodes","findEdgeRing","computeDepthParity","iNode","linePts","endPt","nStart","nEnd","deleteCutEdges","cutLines","getEdgeRings","maximalRings","convertMaximalToMinimalEdgeRings","edgeRingList","ringEdges","deleteDangles","nodesToRemove","dangleLines","nodeOutEdges","HoleAssigner","_shells","_shellIndex","shells","assignHolesToShells","assigner","holeList","assignHoleToShell","queryOverlappingShells","ringEnv","findShellContaining","candidateShells","Polygonizer","_lineStringAdder","LineStringAdder","_dangles","_cutEdges","_invalidRingLines","_holeList","_polyList","_isCheckingRingsValid","_extractOnlyPolygonal","extractOnlyPolygonal","extractPolygons","includeAll","polyList","findOuterShells","outerHoleER","findDisjointShells","isMoreToScan","polygonize","getInvalidRingLines","findValidRings","validEdgeRingList","invalidRingList","findShellsAndHoles","getDangles","getCutEdges","setCheckRingsValid","isCheckingRingsValid","RelateComputer","_im","_isolatedEdges","arg","computeProperIntersectionIM","dimA","dimB","hasProper","hasProperInterior","labelIsolatedEdges","thisIndex","labelIsolatedEdge","target","computeDisjointIM","labelIsolatedNodes","ee0","ee1","labelNodeEdges","labelIntersectionNodes","labelIsolatedNode","ga","gb","RectangleContains","_rectEnv","rectangle","rc","isContainedInBoundary","isPointContainedInBoundary","isLineStringContainedInBoundary","isLineSegmentContainedInBoundary","RectangleLineIntersector","_diagUp0","_diagUp1","_diagDown0","_diagDown1","rectEnv","segEnv","isSegUpwards","RectangleIntersects","_rectangle","rp","EnvelopeIntersectsVisitor","ecpVisitor","GeometryContainsPointVisitor","riVisitor","RectangleIntersectsSegmentVisitor","_intersects","elementEnv","_rectSeq","_containsPoint","rectPt","_rectIntersector","checkIntersectionWithLineStrings","testLine","checkIntersectionWithSegments","seq1","RelateOp","_relate","getIntersectionMatrix","touches","relate","relOp","crosses","PointGeometryUnion","_pointGeom","_otherGeom","pointGeom","unioner","exteriorCoords","ptComp","InputExtracter","_polygons","extracter","recordDimension","getExtract","OverlapUnion","_isUnionSafe","containsProperly","overlapEnvelope","g0Env","g1Env","overlapEnv","extractBorderSegments","segs","isBorder","unionBuffer","gColl","isBorderSegmentsSame","segsBefore","segsAfter","extractByEnvelope","disjointGeoms","intersectingGeoms","elem","segs0","segs1","g0Copy","g1Copy","disjointPolys","g0Overlap","g1Overlap","unionGeom","unionFull","isUnionOptimized","CascadedPolygonUnion","_inputPolys","restrictToPolygons","reduceToGeometries","geomTree","unionTree","STRTREE_NODE_CAPACITY","itemTree","unionAll","binaryUnion","unionSafe","repeatedUnion","unionActual","bufferUnion","UnaryUnionOp","_extracter","unionNoOpt","unionWithNull","unionPoints","ptGeom","unionLines","lineGeom","unionPolygons","unionLA","PrecisionReducerCoordinateOperation","_targetPM","_removeCollapsed","targetPM","removeCollapsed","reducedCoords","noRepeatedCoordList","noRepeatedCoords","minLength","collapsedCoords","GeometryPrecisionReducer","_changePrecisionModel","_isPointwise","reducer","reducePointwise","setPointwise","fixPolygonalTopology","geomToBuffer","changePM","bufGeom","geomEdit","newFactory","createFactory","finalRemoveCollapsed","reduceGeom","newPM","geomEditor","createEditor","setRemoveCollapsedComponents","inputFactory","setChangePrecisionModel","changePrecisionModel","reducePW","isPointwise","DouglasPeuckerLineSimplifier","_usePt","simplifySection","DouglasPeuckerSimplifier","_isEnsureValidTopology","tss","setEnsureValid","isEnsureValidTopology","DPTransformer","rawGeom","rawAreaGeom","removeDegenerateRings","simpResult","TaggedLineSegment","TaggedLineString","_parentLine","_segs","_resultSegs","_minimumSize","parentLine","minimumSize","addToResult","asLineString","getResultSize","resultSegsSize","getSegment","getParentCoordinates","getMinimumSize","asLinearRing","getSegments","getResultCoordinates","LineSegmentIndex","querySeg","LineSegmentVisitor","itemsFound","_querySeg","TaggedLineStringSimplifier","_inputIndex","_outputIndex","_linePts","inputIndex","outputIndex","isInLineSection","sectionIndex","flatten","newSeg","hasBadIntersection","candidateSeg","hasBadOutputIntersection","hasBadInputIntersection","isValidToSimplify","worstCaseSize","furthestPtIndex","findFurthestPoint","querySegs","maxDist","midPt","TaggedLinesSimplifier","taggedLines","tlss","TopologyPreservingSimplifier","_lineSimplifier","_linestringMap","LineStringMapBuilderFilter","LineStringTransformer","linestringMap","taggedLine","tps","minSize","VWLineSimplifier","simplifyVertex","vwLine","curr","minArea","minVertex","isLive","VWVertex","_prev","_area","MAX_AREA","_isLive","first","v","setPrev","updateArea","tmpPrev","tmpNext","VWSimplifier","VWTransformer","SplitSegment","_segLen","_splitPt","_minimumLen","pointAlongReverse","splitAt","minFrac","actualLen","getConstrainedLength","setMinimumLength","minLen","getSplitPoint","ConstraintSplitPointFinder","findSplitPoint","encroachPt","NonEncroachingSplitPointFinder","projectedSplitPoint","lineSeg","projPt","midPtLen","splitSeg","nonEncroachDiam","maxSplitLen","TrianglePredicate","triArea","isInCircleDDNormalized","bdx","bdy","cdx","cdy","abdet","bcdet","cadet","alift","blift","clift","isInCircle","checkRobustInCircle","nonRobustInCircle","isInCircleNonRobust","isInCircleDD","isInCircleDDSlow","isInCircleCC","circumCentre","isInCircleDDFast","aTerm","triAreaDDFast","bTerm","cTerm","pTerm","cc","ccRadius","pRadiusDiff","isInCircleNormalized","triAreaDDSlow","isInCircleRobust","t1","t2","Vertex","_z","ptLen","pz","circleCenter","cab","bisector","cbc","hcc","nre","err","dot","magn","interpolateZValue","xm","ym","zm","crossProduct","times","cross","classify","sa","BEHIND","BEYOND","ORIGIN","DESTINATION","BETWEEN","circumRadiusRatio","edgeLength","el","ConstraintVertex","_isOnConstraint","_constraint","getConstraint","setOnConstraint","isOnConstraint","setConstraint","constraint","QuadEdge","_rot","_vertex","makeEdge","q0","q3","setOrig","setDest","oPrev","lNext","rot","beta","t3","t4","connect","equalsNonOriented","qe","equalsOriented","toLineSegment","dNext","lPrev","rPrev","invRot","delete","rNext","getPrimary","dPrev","IncrementalDelaunayTriangulator","_subdiv","_isUsingTolerance","subdiv","getTolerance","insertSite","isVertexOfEdge","isOnEdge","insertSites","vertices","QuadEdgeLocator","LastFoundQuadEdgeLocator","_lastEdge","locateFromEdge","LocateFailureException","msgWithSpatial","TriangleVisitor","triEdges","QuadEdgeSubdivision","_visitedKey","_quadEdges","_startingEdge","_edgeCoincidenceTolerance","_frameVertex","_frameEnv","_triEdges","EDGE_COINCIDENCE_TOL_FACTOR","createFrame","initSubdiv","getTriangleEdges","startQE","triEdge","getTriangleVertices","includeFrame","TriangleVertexListVisitor","visitTriangles","isFrameVertex","getVoronoiCellPolygon","cellPts","cellPoly","setLocator","locator","ea","ec","isFrameBorderEdge","leftTri","rightTri","vLeftTriOther","vRightTriOther","triVisitor","edgeStack","visitedEdges","fetchTriangleToVisit","isFrameEdge","getTriangleCoordinates","TriangleCoordinatesVisitor","getTriangles","getVertices","vd","edgeCount","isFrame","quadEdges","getPrimaryEdges","getVertexUniqueEdges","visitedVertices","qd","TriangleEdgesListVisitor","priQE","eSym","eRot","eRotSym","iter","maxIter","getVoronoiCellPolygons","TriangleCircumcentreVisitor","cells","getVoronoiDiagram","vorCells","triPtsList","tris","triPt","locEdge","ccVertex","_triList","_coordList","_triCoords","checkTriangleSize","Segment","_ls","z1","z2","getEndZ","getStartZ","getStart","getEnd","getEndY","getStartX","getStartY","getEndX","ConstraintEnforcementException","msgWithCoord","ConformingDelaunayTriangulator","_initialVertices","_segVertices","_segments","_incDel","_convexHull","_splitFinder","_kdt","_vertexFactory","_computeAreaEnv","initialVertices","computeVertexEnvelope","getInitialVertices","getKDT","enforceConstraints","addConstraintVertices","splits","enforceGabriel","MAX_SPLIT_ITER","getVertexFactory","getPointArray","setConstraints","segments","segVertices","computeConvexHull","hull","findNonGabrielPoint","segRadius","closestNonGabriel","nextNode","testRadius","testDist","getConstraintSegments","setSplitPointFinder","splitFinder","segsToInsert","newSegments","segsToRemove","splitVertex","createVertex","insertedVertex","removeAll","getSubdivision","computeBoundingBox","vertexEnv","allPointsEnv","setVertexFactory","vertexFactory","formInitialDelaunay","kdnode","snappedV","DelaunayTriangulationBuilder","_siteCoords","extractUniqueCoordinates","unique","coordsCopy","toVertices","verts","siteEnv","triangulator","setTolerance","setSites","ConformingDelaunayTriangulationBuilder","_constraintLines","_constraintVertexMap","createConstraintSegments","constraintSegs","createSiteVertices","createVertices","sites","cdt","constraintLines","VoronoiDiagramBuilder","_clipEnv","_diagramEnv","clipGeometryCollection","clipEnv","clipPoly","clipped","getDiagram","setClipEnvelope","LinearIterator","_linearGeom","_numLines","_currentLine","_componentIndex","_vertexIndex","linear","getComponentIndex","segmentEndVertexIndex","linearGeom","componentIndex","loadCurrentLine","getSegmentFraction","getVertexIndex","getSegmentEnd","getSegmentStart","isEndOfLine","LengthIndexOfPoint","indexOfAfter","minIndex","indexOfFromStart","ptMeasure","segmentStartMeasure","segDistance","segMeasureToPt","segmentNearestMeasure","closestAfter","projFactor","LinearLocation","_segmentIndex","_segmentFraction","doNormalize","getEndLocation","setToEnd","pointAlongSegmentByFraction","compareLocationValues","componentIndex0","segmentIndex0","segmentFraction0","componentIndex1","segmentIndex1","segmentFraction1","numSegments","isEndpoint","lineComp","nseg","toLowest","lastLine","isOnSameSegment","snapToVertex","getSegmentLength","lenToStart","lenToEnd","isVertex","LocationIndexOfPoint","minComponentIndex","minSegmentIndex","candidateComponentIndex","candidateSegmentIndex","endLoc","LocationIndexOfLine","indicesOf","subLine","locPt","subLineLoc","LengthLocationMap","resolveLower","totalLength","resolveHigher","compIndex","forwardLength","getLocationForward","LinearGeometryBuilder","_ignoreInvalidLines","_fixInvalidLines","_lastPt","endLine","getLastCoordinate","rawPts","validCoordinateSequence","setFixInvalidLines","fixInvalidLines","allowRepeatedPoints","setIgnoreInvalidLines","ignoreInvalidLines","validPts","ExtractLineByLocation","computeLinear","computeLine","startSegmentIndex","lastSegmentIndex","newCoordinateArray","LengthIndexedLine","clampIndex","positiveIndex","locationOf","extractPoint","locLow","isValidIndex","extractLine","startIndex2","endIndex2","resolveStartLower","LocationIndexedLine","checkGeometryType","indexLow","CollectionUtil","func","Boolean","Function","CoordinateArrayFilter","CoordinateCountFilter","_n","ObjectCounter","_counts","PrintStream","StringReader","ByteArrayOutputStream","IOException","LineNumberReader","StringUtil","chars","String","getStackTrace","os","stackTrace","stringReader","lineNumberReader","readLine","NEWLINE","spaces","split","separator","separatorlen","tokenList","tmpString","UnionOp","prototype","coveredBy","within","intersectionPattern","centPt","interiorPt","toText","writer","version"],"mappings":";;;;;;;;;;;;;EAAe,MAAMA,UAAN,CAAiB;EAC9B,SAAOC,mBAAP,CAA2BC,EAA3B,EAA+BC,EAA/B,EAAmCC,SAAnC,EAA8C;EAC5C,WAAOC,IAAI,CAACC,GAAL,CAASJ,EAAE,GAAGC,EAAd,KAAqBC,SAA5B;EACD;;EAH6B;;ECAjB,MAAMG,SAAN,SAAwBC,KAAxB,CAA8B;EAC3CC,EAAAA,WAAW,CAACC,OAAD,EAAU;EACnB,UAAMA,OAAN;EACA,SAAKC,IAAL,GAAYC,MAAM,CAACC,IAAP,CAAY;EAAEN,MAAAA;EAAF,KAAZ,EAA2B,CAA3B,CAAZ;EACD;;EACDO,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAKJ,OAAZ;EACD;;EAP0C;;ECE9B,MAAMK,wBAAN,SAAuCR,SAAvC,CAAiD;EAC9DE,EAAAA,WAAW,CAACC,OAAD,EAAU;EACnB,UAAMA,OAAN;EACA,SAAKC,IAAL,GAAYC,MAAM,CAACC,IAAP,CAAY;EAAEE,MAAAA;EAAF,KAAZ,EAA0C,CAA1C,CAAZ;EACD;;EAJ6D;;ECFjD,MAAMC,IAAN,CAAW;EACxBP,EAAAA,WAAW,CAACQ,IAAD,EAAOC,GAAP,EAAY;EACrB,SAAKA,GAAL,GAAWA,GAAG,IAAI,CAAlB;EACA,SAAKD,IAAL,GAAYA,IAAI,IAAI,CAApB;EACD;;EAED,SAAOE,cAAP,CAAsBC,CAAtB,EAAyB;EACvB,QAAIC,IAAJ;EACA,QAAIC,MAAM,GAAG,EAAb;;EACA,SAAKD,IAAI,GAAG,UAAZ,EAAwBA,IAAI,GAAG,CAA/B,EAAkCA,IAAI,MAAM,CAA5C,EACEC,MAAM,IAAI,CAACF,CAAC,CAACH,IAAF,GAASI,IAAV,MAAoBA,IAApB,GAA2B,GAA3B,GAAiC,GAA3C;;EACF,SAAKA,IAAI,GAAG,UAAZ,EAAwBA,IAAI,GAAG,CAA/B,EAAkCA,IAAI,MAAM,CAA5C,EACEC,MAAM,IAAI,CAACF,CAAC,CAACF,GAAF,GAAQG,IAAT,MAAmBA,IAAnB,GAA0B,GAA1B,GAAgC,GAA1C;;EACF,WAAOC,MAAP;EACD;;EAduB;;ECEX,SAASC,MAAT,GAAkB;EAEjCA,MAAM,CAACC,GAAP,GAAaA,GAAb;;EACAD,MAAM,CAACE,KAAP,GAAeC,CAAC,IAAIC,MAAM,CAACF,KAAP,CAAaC,CAAb,CAApB;;EACAH,MAAM,CAACK,UAAP,GAAoBF,CAAC,IAAI,CAACC,MAAM,CAACE,QAAP,CAAgBH,CAAhB,CAA1B;;EACAH,MAAM,CAACO,SAAP,GAAmBH,MAAM,CAACG,SAA1B;EAEA,IAAI,OAAOC,YAAP,KAAwB,UAAxB,IACF,OAAOC,UAAP,KAAsB,UADxB;EAGA;EAEE,GAAC,YAAW;EACV,UAAMC,YAAY,GAAG,UAArB;EACA,UAAMC,eAAe,GAAG,OAAxB;EACA,UAAMC,MAAM,GAAG,IAAIJ,YAAJ,CAAiB,CAAjB,CAAf;EACA,UAAMK,MAAM,GAAG,IAAIJ,UAAJ,CAAeG,MAAM,CAACE,MAAtB,CAAf;;EACAd,IAAAA,MAAM,CAACe,gBAAP,GAA0B,UAASC,KAAT,EAAgB;EACxCJ,MAAAA,MAAM,CAAC,CAAD,CAAN,GAAYI,KAAZ;EACA,UAAIrB,GAAG,GAAGkB,MAAM,CAAC,CAAD,CAAN,GAAY,CAAtB;EACA,UAAInB,IAAI,GAAGmB,MAAM,CAAC,CAAD,CAAN,GAAY,CAAvB,CAHwC;EAKxC;;EACA,UAAK,CAACnB,IAAI,GAAGgB,YAAR,MAA0BA,YAA3B,IACD,CAAChB,IAAI,GAAGiB,eAAR,MAA6B,CAD5B,IAEDhB,GAAG,KAAK,CAFX,EAEe;EACbA,QAAAA,GAAG,GAAG,IAAI,CAAV;EACAD,QAAAA,IAAI,GAAG,aAAa,CAApB;EACD;;EACD,aAAO,IAAID,IAAJ,CAASC,IAAT,EAAeC,GAAf,CAAP;EACD,KAbD;;EAcAK,IAAAA,MAAM,CAACiB,gBAAP,GAA0B,UAASC,IAAT,EAAe;EACvCL,MAAAA,MAAM,CAAC,CAAD,CAAN,GAAYK,IAAI,CAACvB,GAAjB;EACAkB,MAAAA,MAAM,CAAC,CAAD,CAAN,GAAYK,IAAI,CAACxB,IAAjB;EACA,aAAOkB,MAAM,CAAC,CAAD,CAAb;EACD,KAJD;EAKD,GAxBD,IALF;EAgCA;EAEE,GAAC,YAAW;EACV,UAAMO,IAAI,GAAG,IAAb;EACA,UAAMC,IAAI,GAAGtC,IAAI,CAACsC,IAAlB;EACA,UAAMC,KAAK,GAAGvC,IAAI,CAACuC,KAAnB;EACA,UAAMC,GAAG,GAAGxC,IAAI,CAACwC,GAAjB;;EACA,UAAMC,oBAAoB,GAAI,YAAW;EACvC,WAAK,IAAI1B,CAAC,GAAG,EAAb,EAAiBA,CAAC,GAAG,CAArB,EAAwBA,CAAC,EAAzB,EAA6B;EAC3B,cAAMqB,IAAI,GAAGI,GAAG,CAAC,CAAD,EAAIzB,CAAJ,CAAH,GAAY,CAAzB;EACA,YAAIwB,KAAK,CAACD,IAAI,CAACF,IAAD,CAAL,CAAL,GAAoB,CAApB,KAA0BrB,CAA9B,EAAiC,OAAOqB,IAAP;EAClC;;EACD,aAAO,CAAP;EACD,KAN4B,EAA7B;;EAOAlB,IAAAA,MAAM,CAACe,gBAAP,GAA0B,UAASC,KAAT,EAAgB;EACxC,UAAIQ,CAAJ,EAAOC,CAAP,EAAUC,CAAV,EAAaR,IAAb,EAAmBS,IAAnB;EACA,UAAIC,IAAJ,EAAUC,GAAV,EAAenC,IAAf,EAAqBC,GAArB,CAFwC;;EAKxC,UAAIqB,KAAK,GAAG,CAAR,IAAa,IAAIA,KAAJ,KAAcZ,MAAM,CAAC0B,iBAAtC,EAAyD;EACvDF,QAAAA,IAAI,GAAI,KAAK,EAAb;EACAZ,QAAAA,KAAK,GAAI,CAACA,KAAV;EACD,OAHD,MAGO;EACLY,QAAAA,IAAI,GAAG,CAAP;EACD,OAVuC;;;EAaxC,UAAIZ,KAAK,KAAK,CAAd,EAAiB;EACf;EACArB,QAAAA,GAAG,GAAG,IAAI,CAAV;EACAD,QAAAA,IAAI,GAAGkC,IAAP,CAHe;;EAIf,eAAO,IAAInC,IAAJ,CAASC,IAAT,EAAeC,GAAf,CAAP;EACD;;EAED,UAAIqB,KAAK,KAAKe,QAAd,EAAwB;EACtB;EACApC,QAAAA,GAAG,GAAG,IAAI,CAAV;EACAD,QAAAA,IAAI,GAAGkC,IAAI,GAAG,UAAd,CAHsB;;EAItB,eAAO,IAAInC,IAAJ,CAASC,IAAT,EAAeC,GAAf,CAAP;EACD;;EAED,UAAIqB,KAAK,KAAKA,KAAd,EAAqB;EAAE;EACrB;EACArB,QAAAA,GAAG,GAAG,IAAI,CAAV;EACAD,QAAAA,IAAI,GAAG,UAAP,CAHmB;;EAInB,eAAO,IAAID,IAAJ,CAASC,IAAT,EAAeC,GAAf,CAAP;EACD,OAhCuC;EAmCxC;;;EACAuB,MAAAA,IAAI,GAAG,CAAP;EACAvB,MAAAA,GAAG,GAAG,IAAI,CAAV,CArCwC;;EAwCxC6B,MAAAA,CAAC,GAAGH,KAAK,CAACL,KAAD,CAAT,CAxCwC;EA2CxC;EACA;;EACA,UAAIQ,CAAC,GAAG,CAAR;EAEA;EAEE,YAAIA,CAAC,IAAID,oBAAT,EAA+B;EAC7B;EACAL,UAAAA,IAAI,GAAGG,KAAK,CAACD,IAAI,CAACI,CAAD,CAAL,CAAZ;EAAsB;EACtB;EACA;EACA;EACA;EACA;;EACA,cAAIN,IAAI,IAAI,EAAZ,EAAgB;EACd;EACA;EACA;EACAvB,YAAAA,GAAG,GAAG,IAAI,CAAV;EACAD,YAAAA,IAAI,GAAI8B,CAAC,IAAK,KAAKN,IAAZ,GAAqB,OAA5B;EACD,WAND,MAMO;EACL;EACA;EACA;EACA;EACA;EACA;EACAQ,YAAAA,CAAC,GAAGR,IAAI,GAAG,EAAX,CAPK;;EASLO,YAAAA,CAAC,GAAGH,GAAG,CAAC,CAAD,EAAII,CAAJ,CAAP;EACA/B,YAAAA,GAAG,GAAI6B,CAAC,GAAGC,CAAL,IAAY,KAAKC,CAAvB;EACAhC,YAAAA,IAAI,GAAI8B,CAAC,GAAGC,CAAL,GAAU,OAAjB;EACD;EACF,SA3BD,MA2BO;EACL;EACA;EACA;EACA;EACA;EACA;EAEA;EACAC,UAAAA,CAAC,GAAGF,CAAJ;EACA7B,UAAAA,GAAG,GAAG,IAAI,CAAV;;EACA,mBAAS;EACP8B,YAAAA,CAAC,GAAGC,CAAC,GAAG,CAAR;EACAA,YAAAA,CAAC,GAAGL,KAAK,CAACI,CAAD,CAAT;EACA,gBAAIC,CAAC,KAAK,CAAV;EAEA;EACA;EACE,oBAPK;;EAUPR,YAAAA,IAAI;EACJvB,YAAAA,GAAG,MAAM,CAAT;EACAA,YAAAA,GAAG,IAAI,CAACD,IAAI,GAAG,GAAR,KAAgB,EAAvB,CAZO;;EAcPA,YAAAA,IAAI,MAAM,CAAV;EACA,gBAAI+B,CAAC,KAAKC,CAAV;EAEEhC,cAAAA,IAAI,IAAI,OAAR;EACH;EACF,SA1GqC;;EA6GxCmC,MAAAA,GAAG,GAAGX,IAAI,GAAGC,IAAb,CA7GwC;EAgHxC;EACA;;EACAQ,MAAAA,IAAI,GAAIH,CAAC,KAAK,CAAd,CAlHwC;;EAqHxCA,MAAAA,CAAC,GAAGR,KAAK,GAAGQ,CAAZ,CArHwC;EAwHxC;EACA;;EACA,UAAIN,IAAI,GAAG,EAAP,IAAaM,CAAC,KAAK,CAAvB,EAA0B;EACxB;EACA;EACAE,QAAAA,CAAC,GAAG,CAAJ;;EAEA,iBAAS;EACPD,UAAAA,CAAC,GAAGD,CAAC,GAAG,CAAR;;EACA,cAAIC,CAAC,IAAI,CAAT,EAAY;EACV;EACA;EACAD,YAAAA,CAAC,GAAGC,CAAC,GAAG,CAAR;;EACA,gBAAI,CAACE,IAAL,EAAW;EACTD,cAAAA,CAAC,KAAK,CAAN;EACAA,cAAAA,CAAC,IAAI,CAAL;EACAR,cAAAA,IAAI;EACL,aAJD,MAIO;EACL;EACA;EACAW,cAAAA,GAAG;EACHF,cAAAA,IAAI,GAAG,KAAP;EACD;EACF,WAdD,MAcO;EACL;EACA;EACAH,YAAAA,CAAC,GAAGC,CAAJ;;EACA,gBAAI,CAACE,IAAL,EAAW;EACTD,cAAAA,CAAC,KAAK,CAAN;EACAR,cAAAA,IAAI;EACL,aAHD,MAGO,IAAI,EAAEW,GAAF,KAAU,CAAd,EAAiB;EACtB;EACA;EACA;EACA;EACA;EACAX,cAAAA,IAAI;EACJS,cAAAA,IAAI,GAAG,KAAP;EACD;EACF;;EACD,cAAIT,IAAI,KAAK,EAAb,EAAiB;EACf;EACA;EACA;EACA;EACAxB,YAAAA,IAAI,IAAIgC,CAAR;EACAA,YAAAA,CAAC,GAAG,CAAJ;EACD,WAPD,MAOO,IAAIR,IAAI,KAAK,EAAb,EAAiB;EACtB;EACA;EACA;EACAvB,YAAAA,GAAG,IAAI+B,CAAP;EACA;EACD;;EACD,cAAID,CAAC,KAAK,CAAV,EAAa;EACX;EACA;EACA;EACA,gBAAIP,IAAI,GAAG,EAAX,EACExB,IAAI,IAAKgC,CAAC,IAAK,KAAKR,IAApB,CADF,KAEK,IAAIA,IAAI,GAAG,EAAX,EAAevB,GAAG,IAAK+B,CAAC,IAAK,KAAKR,IAAnB;EAEpB;EACD;EACF;EACF,OAzLuC;;;EA4LxCxB,MAAAA,IAAI,IAAKmC,GAAG,IAAI,EAAhB;EACAnC,MAAAA,IAAI,IAAIkC,IAAR;EAEA,aAAO,IAAInC,IAAJ,CAASC,IAAT,EAAeC,GAAf,CAAP;EACD,KAhMD;;EAiMAK,IAAAA,MAAM,CAACiB,gBAAP,GAA0B,UAASC,IAAT,EAAe;EACvC,UAAIrB,CAAJ;EACA,UAAI2B,CAAJ,EAAOK,GAAP,EAAYG,KAAZ;EACA,YAAMtC,IAAI,GAAGwB,IAAI,CAACxB,IAAlB;EACA,YAAMC,GAAG,GAAGuB,IAAI,CAACvB,GAAjB,CAJuC;;EAOvC,YAAMiC,IAAI,GAAIlC,IAAI,GAAI,KAAK,EAAd,GAAqB,CAAC,CAAtB,GAA0B,CAAvC,CAPuC;;EAUvCmC,MAAAA,GAAG,GAAG,CAAC,CAACnC,IAAI,GAAG,UAAR,KAAuB,EAAxB,IAA8ByB,IAApC,CAVuC;EAavC;;EACAa,MAAAA,KAAK,GAAG,CAAR;EACAR,MAAAA,CAAC,GAAI,KAAK,EAAV;;EACA,WAAK3B,CAAC,GAAG,CAAT,EAAYA,CAAC,IAAI,EAAjB,EAAqBA,CAAC,EAAtB,EAA0B;EACxB,YAAIH,IAAI,GAAG8B,CAAX,EAAcQ,KAAK,IAAIV,GAAG,CAAC,CAAD,EAAI,CAACzB,CAAL,CAAZ;EAEd2B,QAAAA,CAAC,MAAM,CAAP;EACD,OApBsC;;;EAsBvCA,MAAAA,CAAC,GAAI,KAAK,EAAV;;EACA,WAAK3B,CAAC,GAAG,EAAT,EAAaA,CAAC,IAAI,EAAlB,EAAsBA,CAAC,EAAvB,EAA2B;EACzB,YAAIF,GAAG,GAAG6B,CAAV,EAAaQ,KAAK,IAAIV,GAAG,CAAC,CAAD,EAAI,CAACzB,CAAL,CAAZ;EAEb2B,QAAAA,CAAC,MAAM,CAAP;EACD,OA3BsC;EA8BvC;;;EACA,UAAIK,GAAG,KAAK,CAACV,IAAb,EAAmB;EACjB,YAAIa,KAAK,KAAK,CAAd;EAEE,iBAAOJ,IAAI,GAAG,CAAd;EAEFC,QAAAA,GAAG,GAAG,CAAC,IAAP;EACD,OAND,MAMO,IAAIA,GAAG,KAAKV,IAAI,GAAG,CAAnB,EAAsB;EAAE;EAC7B,YAAIa,KAAK,KAAK,CAAd;EAEE,iBAAOJ,IAAI,GAAG,CAAd;EAEF,eAAO3B,GAAP;EACD,OANM,MAMA;EAAE;EACP;EACA+B,QAAAA,KAAK,IAAI,CAAT;EACD;;EAED,aAAOJ,IAAI,GAAGI,KAAP,GAAeV,GAAG,CAAC,CAAD,EAAIO,GAAJ,CAAzB;EACD,KAjDD;EAkDD,GA/PD;;EC3Ca,SAASI,UAAT,GAAsB;;ECAtB,SAASC,QAAT,GAAoB;;ECApB,SAASC,UAAT,GAAsB;;ECAtB,SAASC,YAAT,GAAwB;;ECExB,MAAMC,gBAAN,SAA+BrD,SAA/B,CAAyC;EACtDE,EAAAA,WAAW,CAACC,OAAD,EAAU;EACnB,UAAMA,OAAN;EACA,SAAKC,IAAL,GAAYC,MAAM,CAACC,IAAP,CAAY;EAAE+C,MAAAA;EAAF,KAAZ,EAAkC,CAAlC,CAAZ;EACD;;EAJqD;;ECDzC,MAAMC,wBAAN,SAAuCD,gBAAvC,CAAwD;EACrEnD,EAAAA,WAAW,GAAG;EACZ;EACAoD,IAAAA,wBAAwB,CAACC,YAAzB,CAAsCC,KAAtC,CAA4C,IAA5C,EAAkDC,SAAlD;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,QAAIE,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1BL,MAAAA,gBAAgB,CAACE,YAAjB,CAA8BI,IAA9B,CAAmC,IAAnC;EACD,KAFD,MAEO,IAAIF,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMvD,OAAO,GAAGsD,SAAS,CAAC,CAAD,CAAzB;EACAJ,MAAAA,gBAAgB,CAACE,YAAjB,CAA8BI,IAA9B,CAAmC,IAAnC,EAAyCxD,OAAzC;EACD;EACF;;EAZoE;;ECAxD,MAAMyD,MAAN,CAAa;EAC1B,SAAOC,oBAAP,GAA8B;EAC5B,QAAIJ,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1BE,MAAAA,MAAM,CAACC,oBAAP,CAA4B,IAA5B;EACD,KAFD,MAEO,IAAIJ,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMvD,OAAO,GAAGsD,SAAS,CAAC,CAAD,CAAzB;EACA,YAAM,IAAIH,wBAAJ,CAA6B,6BAA6BnD,OAAO,KAAK,IAAZ,GAAmB,OAAOA,OAA1B,GAAoC,EAAjE,CAA7B,CAAN;EACD;EACF;;EACD,SAAO2D,MAAP,GAAgB;EACd,QAAIL,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMK,SAAS,GAAGN,SAAS,CAAC,CAAD,CAA3B;EACAG,MAAAA,MAAM,CAACE,MAAP,CAAcC,SAAd,EAAyB,IAAzB;EACD,KAHD,MAGO,IAAIN,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMK,SAAS,GAAGN,SAAS,CAAC,CAAD,CAA3B;EAAA,YAAgCtD,OAAO,GAAGsD,SAAS,CAAC,CAAD,CAAnD;EACA,UAAI,CAACM,SAAL,EACE,IAAI5D,OAAO,KAAK,IAAhB,EACE,MAAM,IAAImD,wBAAJ,EAAN,CADF,KAGE,MAAM,IAAIA,wBAAJ,CAA6BnD,OAA7B,CAAN;EAGL;EACF;;EACD,SAAO6D,MAAP,GAAgB;EACd,QAAIP,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMO,aAAa,GAAGR,SAAS,CAAC,CAAD,CAA/B;EAAA,YAAoCS,WAAW,GAAGT,SAAS,CAAC,CAAD,CAA3D;EACAG,MAAAA,MAAM,CAACI,MAAP,CAAcC,aAAd,EAA6BC,WAA7B,EAA0C,IAA1C;EACD,KAHD,MAGO,IAAIT,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMO,aAAa,GAAGR,SAAS,CAAC,CAAD,CAA/B;EAAA,YAAoCS,WAAW,GAAGT,SAAS,CAAC,CAAD,CAA3D;EAAA,YAAgEtD,OAAO,GAAGsD,SAAS,CAAC,CAAD,CAAnF;EACA,UAAI,CAACS,WAAW,CAACF,MAAZ,CAAmBC,aAAnB,CAAL,EACE,MAAM,IAAIX,wBAAJ,CAA6B,cAAcW,aAAd,GAA8B,mBAA9B,GAAoDC,WAApD,IAAmE/D,OAAO,KAAK,IAAZ,GAAmB,OAAOA,OAA1B,GAAoC,EAAvG,CAA7B,CAAN;EAEH;EACF;;EAlCyB;;ECQ5B,MAAMgE,IAAI,GAAG,IAAIC,WAAJ,CAAgB,CAAhB,CAAb;EACA,MAAMC,SAAS,GAAG,IAAI7C,YAAJ,CAAiB2C,IAAjB,CAAlB;EACA,MAAMG,SAAS,GAAG,IAAI7C,UAAJ,CAAe0C,IAAf,CAAlB;EAEe,MAAMI,UAAN,CAAiB;EAC9BrE,EAAAA,WAAW,GAAG;EACZqE,IAAAA,UAAU,CAAChB,YAAX,CAAwBC,KAAxB,CAA8B,IAA9B,EAAoCC,SAApC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKf,CAAL,GAAS,IAAT;EACA,SAAKC,CAAL,GAAS,IAAT;EACA,SAAK+B,CAAL,GAAS,IAAT;;EACA,QAAIf,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1Ba,MAAAA,UAAU,CAAChB,YAAX,CAAwBI,IAAxB,CAA6B,IAA7B,EAAmC,GAAnC,EAAwC,GAAxC;EACD,KAFD,MAEO,IAAIF,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMe,CAAC,GAAGhB,SAAS,CAAC,CAAD,CAAnB;EACAc,MAAAA,UAAU,CAAChB,YAAX,CAAwBI,IAAxB,CAA6B,IAA7B,EAAmCc,CAAC,CAACjC,CAArC,EAAwCiC,CAAC,CAAChC,CAA1C,EAA6CgC,CAAC,CAACC,IAAF,EAA7C;EACD,KAHM,MAGA,IAAIjB,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMlB,CAAC,GAAGiB,SAAS,CAAC,CAAD,CAAnB;EAAA,YAAwBhB,CAAC,GAAGgB,SAAS,CAAC,CAAD,CAArC;EACAc,MAAAA,UAAU,CAAChB,YAAX,CAAwBI,IAAxB,CAA6B,IAA7B,EAAmCnB,CAAnC,EAAsCC,CAAtC,EAAyC8B,UAAU,CAACI,aAApD;EACD,KAHM,MAGA,IAAIlB,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMlB,CAAC,GAAGiB,SAAS,CAAC,CAAD,CAAnB;EAAA,YAAwBhB,CAAC,GAAGgB,SAAS,CAAC,CAAD,CAArC;EAAA,YAA0Ce,CAAC,GAAGf,SAAS,CAAC,CAAD,CAAvD;EACA,WAAKjB,CAAL,GAASA,CAAT;EACA,WAAKC,CAAL,GAASA,CAAT;EACA,WAAK+B,CAAL,GAASA,CAAT;EACD;EACF;;EACD,SAAOI,QAAP,CAAgBzD,CAAhB,EAAmB;EACjBkD,IAAAA,SAAS,CAAC,CAAD,CAAT,GAAelD,CAAf;EACA,WAAOmD,SAAS,CAAC,CAAD,CAAT,GAAeA,SAAS,CAAC,CAAD,CAA/B;EACD;;EACDO,EAAAA,IAAI,GAAG;EACL,WAAO7D,MAAM,CAACC,GAAd;EACD;;EACD6D,EAAAA,WAAW,CAACC,aAAD,EAAgB/C,KAAhB,EAAuB;EAChC,YAAQ+C,aAAR;EACA,WAAKR,UAAU,CAACS,CAAhB;EACE,aAAKxC,CAAL,GAASR,KAAT;EACA;;EACF,WAAKuC,UAAU,CAACU,CAAhB;EACE,aAAKxC,CAAL,GAAST,KAAT;EACA;;EACF,WAAKuC,UAAU,CAACW,CAAhB;EACE,aAAKC,IAAL,CAAUnD,KAAV;EACA;;EACF;EACE,cAAM,IAAIxB,wBAAJ,CAA6B,6BAA6BuE,aAA1D,CAAN;EAXF;EAaD;;EACDK,EAAAA,QAAQ,GAAG;EACT,QAAI3B,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAM2B,KAAK,GAAG5B,SAAS,CAAC,CAAD,CAAvB;EACA,UAAI,KAAKjB,CAAL,KAAW6C,KAAK,CAAC7C,CAArB,EACE,OAAO,KAAP;EAEF,UAAI,KAAKC,CAAL,KAAW4C,KAAK,CAAC5C,CAArB,EACE,OAAO,KAAP;EAEF,aAAO,IAAP;EACD,KATD,MASO,IAAIgB,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMe,CAAC,GAAGhB,SAAS,CAAC,CAAD,CAAnB;EAAA,YAAwB5D,SAAS,GAAG4D,SAAS,CAAC,CAAD,CAA7C;EACA,UAAI,CAAChE,UAAU,CAACC,mBAAX,CAA+B,KAAK8C,CAApC,EAAuCiC,CAAC,CAACjC,CAAzC,EAA4C3C,SAA5C,CAAL,EACE,OAAO,KAAP;EAEF,UAAI,CAACJ,UAAU,CAACC,mBAAX,CAA+B,KAAK+C,CAApC,EAAuCgC,CAAC,CAAChC,CAAzC,EAA4C5C,SAA5C,CAAL,EACE,OAAO,KAAP;EAEF,aAAO,IAAP;EACD;EACF;;EACDyF,EAAAA,IAAI,CAACC,CAAD,EAAI;EACN,UAAM,IAAI/E,wBAAJ,CAA6B,6BAA6B+D,UAAU,CAACiB,CAArE,CAAN;EACD;;EACDd,EAAAA,IAAI,GAAG;EACL,WAAO,KAAKF,CAAZ;EACD;;EACDiB,EAAAA,WAAW,CAACV,aAAD,EAAgB;EACzB,YAAQA,aAAR;EACA,WAAKR,UAAU,CAACS,CAAhB;EACE,eAAO,KAAKxC,CAAZ;;EACF,WAAK+B,UAAU,CAACU,CAAhB;EACE,eAAO,KAAKxC,CAAZ;;EACF,WAAK8B,UAAU,CAACW,CAAhB;EACE,eAAO,KAAKR,IAAL,EAAP;EANF;;EAQA,UAAM,IAAIlE,wBAAJ,CAA6B,6BAA6BuE,aAA1D,CAAN;EACD;;EACDW,EAAAA,QAAQ,CAACL,KAAD,EAAQ;EACd,WAAO,KAAK7C,CAAL,KAAW6C,KAAK,CAAC7C,CAAjB,IAAsB,KAAKC,CAAL,KAAW4C,KAAK,CAAC5C,CAAvC,KAA6C,KAAKiC,IAAL,OAAgBW,KAAK,CAACX,IAAN,EAAhB,IAAgC1D,MAAM,CAACE,KAAP,CAAa,KAAKwD,IAAL,EAAb,KAA6B1D,MAAM,CAACE,KAAP,CAAamE,KAAK,CAACX,IAAN,EAAb,CAA1G,CAAP;EACD;;EACDV,EAAAA,MAAM,CAACqB,KAAD,EAAQ;EACZ,QAAI,EAAEA,KAAK,YAAYd,UAAnB,CAAJ,EACE,OAAO,KAAP;EAEF,WAAO,KAAKa,QAAL,CAAcC,KAAd,CAAP;EACD;;EACDM,EAAAA,QAAQ,CAAClB,CAAD,EAAI5E,SAAJ,EAAe;EACrB,WAAOJ,UAAU,CAACC,mBAAX,CAA+B,KAAKgF,IAAL,EAA/B,EAA4CD,CAAC,CAACC,IAAF,EAA5C,EAAsD7E,SAAtD,CAAP;EACD;;EACD+F,EAAAA,IAAI,CAACpD,CAAD,EAAI;EACN,SAAKA,CAAL,GAASA,CAAT;EACD;;EACDqD,EAAAA,SAAS,CAACC,CAAD,EAAI;EACX,UAAMT,KAAK,GAAGS,CAAd;EACA,QAAI,KAAKtD,CAAL,GAAS6C,KAAK,CAAC7C,CAAnB,EAAsB,OAAO,CAAC,CAAR;EACtB,QAAI,KAAKA,CAAL,GAAS6C,KAAK,CAAC7C,CAAnB,EAAsB,OAAO,CAAP;EACtB,QAAI,KAAKC,CAAL,GAAS4C,KAAK,CAAC5C,CAAnB,EAAsB,OAAO,CAAC,CAAR;EACtB,QAAI,KAAKA,CAAL,GAAS4C,KAAK,CAAC5C,CAAnB,EAAsB,OAAO,CAAP;EACtB,WAAO,CAAP;EACD;;EACDsD,EAAAA,IAAI,GAAG;EACL,WAAO,KAAKvD,CAAZ;EACD;;EACD2C,EAAAA,IAAI,CAACX,CAAD,EAAI;EACN,SAAKA,CAAL,GAASA,CAAT;EACD;;EACDwB,EAAAA,KAAK,GAAG;EACN,QAAI;EACF,YAAMC,KAAK,GAAG,IAAd;EACA,aAAOA,KAAP;EACD,KAHD,CAGE,OAAOC,CAAP,EAAU;EACV,UAAIA,CAAC,YAAYC,0BAAjB,EAA6C;EAC3CvC,QAAAA,MAAM,CAACC,oBAAP,CAA4B,wDAA5B;EACA,eAAO,IAAP;EACD,OAHD,MAGO;EACL,cAAMqC,CAAN;EACD;EACF,KAVD,SAUU;EACX;;EACDE,EAAAA,IAAI,GAAG;EACL,WAAO,IAAI7B,UAAJ,CAAe,IAAf,CAAP;EACD;;EACDhE,EAAAA,QAAQ,GAAG;EACT,WAAO,MAAM,KAAKiC,CAAX,GAAe,IAAf,GAAsB,KAAKC,CAA3B,GAA+B,IAA/B,GAAsC,KAAKiC,IAAL,EAAtC,GAAoD,GAA3D;EACD;;EACD2B,EAAAA,UAAU,CAAC5B,CAAD,EAAI;EACZ,UAAM6B,EAAE,GAAG,KAAK9D,CAAL,GAASiC,CAAC,CAACjC,CAAtB;EACA,UAAM+D,EAAE,GAAG,KAAK9D,CAAL,GAASgC,CAAC,CAAChC,CAAtB;EACA,UAAM+D,EAAE,GAAG,KAAK9B,IAAL,KAAcD,CAAC,CAACC,IAAF,EAAzB;EACA,WAAO5E,IAAI,CAAC2G,IAAL,CAAUH,EAAE,GAAGA,EAAL,GAAUC,EAAE,GAAGA,EAAf,GAAoBC,EAAE,GAAGA,EAAnC,CAAP;EACD;;EACDE,EAAAA,IAAI,GAAG;EACL,WAAO,KAAKjE,CAAZ;EACD;;EACDkE,EAAAA,IAAI,CAAClE,CAAD,EAAI;EACN,SAAKA,CAAL,GAASA,CAAT;EACD;;EACDmE,EAAAA,QAAQ,CAACnC,CAAD,EAAI;EACV,UAAM6B,EAAE,GAAG,KAAK9D,CAAL,GAASiC,CAAC,CAACjC,CAAtB;EACA,UAAM+D,EAAE,GAAG,KAAK9D,CAAL,GAASgC,CAAC,CAAChC,CAAtB;EACA,WAAO3C,IAAI,CAAC2G,IAAL,CAAUH,EAAE,GAAGA,EAAL,GAAUC,EAAE,GAAGA,EAAzB,CAAP;EACD;;EACD3B,EAAAA,QAAQ,GAAG;EACT,QAAI7D,MAAM,GAAG,EAAb;EACAA,IAAAA,MAAM,GAAG,KAAKA,MAAL,GAAcwD,UAAU,CAACK,QAAX,CAAoB,KAAKpC,CAAzB,CAAvB;EACAzB,IAAAA,MAAM,GAAG,KAAKA,MAAL,GAAcwD,UAAU,CAACK,QAAX,CAAoB,KAAKnC,CAAzB,CAAvB;EACA,WAAO1B,MAAP;EACD;;EACD8F,EAAAA,aAAa,CAACxB,KAAD,EAAQ;EACnB,SAAK7C,CAAL,GAAS6C,KAAK,CAAC7C,CAAf;EACA,SAAKC,CAAL,GAAS4C,KAAK,CAAC5C,CAAf;EACA,SAAK+B,CAAL,GAASa,KAAK,CAACX,IAAN,EAAT;EACD;;EACD,MAAIoC,WAAJ,GAAkB;EAChB,WAAO,CAAC7D,UAAD,EAAa8D,QAAb,EAAwB3D,YAAxB,CAAP;EACD;;EAjK6B;;EAmKhC,MAAM4D,qBAAN,CAA4B;EAC1B9G,EAAAA,WAAW,GAAG;EACZ8G,IAAAA,qBAAqB,CAACzD,YAAtB,CAAmCC,KAAnC,CAAyC,IAAzC,EAA+CC,SAA/C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK0D,iBAAL,GAAyB,CAAzB;;EACA,QAAIxD,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1BsD,MAAAA,qBAAqB,CAACzD,YAAtB,CAAmCI,IAAnC,CAAwC,IAAxC,EAA8C,CAA9C;EACD,KAFD,MAEO,IAAIF,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMwD,gBAAgB,GAAGzD,SAAS,CAAC,CAAD,CAAlC;EACA,UAAIyD,gBAAgB,KAAK,CAArB,IAA0BA,gBAAgB,KAAK,CAAnD,EAAsD,MAAM,IAAI1G,wBAAJ,CAA6B,yCAA7B,CAAN;EACtD,WAAKyG,iBAAL,GAAyBC,gBAAzB;EACD;EACF;;EACD,SAAOC,OAAP,CAAeC,CAAf,EAAkBC,CAAlB,EAAqB;EACnB,QAAID,CAAC,GAAGC,CAAR,EAAW,OAAO,CAAC,CAAR;EACX,QAAID,CAAC,GAAGC,CAAR,EAAW,OAAO,CAAP;;EACX,QAAIrG,MAAM,CAACE,KAAP,CAAakG,CAAb,CAAJ,EAAqB;EACnB,UAAIpG,MAAM,CAACE,KAAP,CAAamG,CAAb,CAAJ,EAAqB,OAAO,CAAP;EACrB,aAAO,CAAC,CAAR;EACD;;EACD,QAAIrG,MAAM,CAACE,KAAP,CAAamG,CAAb,CAAJ,EAAqB,OAAO,CAAP;EACrB,WAAO,CAAP;EACD;;EACDF,EAAAA,OAAO,CAACG,EAAD,EAAKC,EAAL,EAAS;EACd,UAAMC,KAAK,GAAGR,qBAAqB,CAACG,OAAtB,CAA8BG,EAAE,CAAC9E,CAAjC,EAAoC+E,EAAE,CAAC/E,CAAvC,CAAd;EACA,QAAIgF,KAAK,KAAK,CAAd,EAAiB,OAAOA,KAAP;EACjB,UAAMC,KAAK,GAAGT,qBAAqB,CAACG,OAAtB,CAA8BG,EAAE,CAAC7E,CAAjC,EAAoC8E,EAAE,CAAC9E,CAAvC,CAAd;EACA,QAAIgF,KAAK,KAAK,CAAd,EAAiB,OAAOA,KAAP;EACjB,QAAI,KAAKR,iBAAL,IAA0B,CAA9B,EAAiC,OAAO,CAAP;EACjC,UAAMS,KAAK,GAAGV,qBAAqB,CAACG,OAAtB,CAA8BG,EAAE,CAAC5C,IAAH,EAA9B,EAAyC6C,EAAE,CAAC7C,IAAH,EAAzC,CAAd;EACA,WAAOgD,KAAP;EACD;;EACD,MAAIZ,WAAJ,GAAkB;EAChB,WAAO,CAAC3D,UAAD,CAAP;EACD;;EAnCyB;;EAqC5BoB,UAAU,CAACyC,qBAAX,GAAmCA,qBAAnC;EACAzC,UAAU,CAACI,aAAX,GAA2B3D,MAAM,CAACC,GAAlC;EACAsD,UAAU,CAACS,CAAX,GAAe,CAAf;EACAT,UAAU,CAACU,CAAX,GAAe,CAAf;EACAV,UAAU,CAACW,CAAX,GAAe,CAAf;EACAX,UAAU,CAACiB,CAAX,GAAe,CAAf;;ECxNe,MAAMmC,YAAN,SAA2BpD,UAA3B,CAAsC;EACnDrE,EAAAA,WAAW,GAAG;EACZ;EACAyH,IAAAA,YAAY,CAACpE,YAAb,CAA0BC,KAA1B,CAAgC,IAAhC,EAAsCC,SAAtC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,QAAIE,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1Ba,MAAAA,UAAU,CAAChB,YAAX,CAAwBI,IAAxB,CAA6B,IAA7B;EACD,KAFD,MAEO,IAAIF,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,UAAID,SAAS,CAAC,CAAD,CAAT,YAAwBkE,YAA5B,EAA0C;EACxC,cAAM1B,KAAK,GAAGxC,SAAS,CAAC,CAAD,CAAvB;EACAc,QAAAA,UAAU,CAAChB,YAAX,CAAwBI,IAAxB,CAA6B,IAA7B,EAAmCsC,KAAK,CAACzD,CAAzC,EAA4CyD,KAAK,CAACxD,CAAlD;EACD,OAHD,MAGO,IAAIgB,SAAS,CAAC,CAAD,CAAT,YAAwBc,UAA5B,EAAwC;EAC7C,cAAM0B,KAAK,GAAGxC,SAAS,CAAC,CAAD,CAAvB;EACAc,QAAAA,UAAU,CAAChB,YAAX,CAAwBI,IAAxB,CAA6B,IAA7B,EAAmCsC,KAAK,CAACzD,CAAzC,EAA4CyD,KAAK,CAACxD,CAAlD;EACD;EACF,KARM,MAQA,IAAIgB,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMlB,CAAC,GAAGiB,SAAS,CAAC,CAAD,CAAnB;EAAA,YAAwBhB,CAAC,GAAGgB,SAAS,CAAC,CAAD,CAArC;EACAc,MAAAA,UAAU,CAAChB,YAAX,CAAwBI,IAAxB,CAA6B,IAA7B,EAAmCnB,CAAnC,EAAsCC,CAAtC,EAAyC8B,UAAU,CAACI,aAApD;EACD;EACF;;EACDG,EAAAA,WAAW,CAACC,aAAD,EAAgB/C,KAAhB,EAAuB;EAChC,YAAQ+C,aAAR;EACA,WAAK4C,YAAY,CAAC3C,CAAlB;EACE,aAAKxC,CAAL,GAASR,KAAT;EACA;;EACF,WAAK2F,YAAY,CAAC1C,CAAlB;EACE,aAAKxC,CAAL,GAAST,KAAT;EACA;;EACF;EACE,cAAM,IAAIxB,wBAAJ,CAA6B,6BAA6BuE,aAA1D,CAAN;EARF;EAUD;;EACDL,EAAAA,IAAI,GAAG;EACL,WAAOH,UAAU,CAACI,aAAlB;EACD;;EACDc,EAAAA,WAAW,CAACV,aAAD,EAAgB;EACzB,YAAQA,aAAR;EACA,WAAK4C,YAAY,CAAC3C,CAAlB;EACE,eAAO,KAAKxC,CAAZ;;EACF,WAAKmF,YAAY,CAAC1C,CAAlB;EACE,eAAO,KAAKxC,CAAZ;EAJF;;EAMA,UAAM,IAAIjC,wBAAJ,CAA6B,6BAA6BuE,aAA1D,CAAN;EACD;;EACDI,EAAAA,IAAI,CAACX,CAAD,EAAI;EACN,UAAM,IAAIhE,wBAAJ,CAA6B,sDAA7B,CAAN;EACD;;EACD4F,EAAAA,IAAI,GAAG;EACL,WAAO,IAAIuB,YAAJ,CAAiB,IAAjB,CAAP;EACD;;EACDpH,EAAAA,QAAQ,GAAG;EACT,WAAO,MAAM,KAAKiC,CAAX,GAAe,IAAf,GAAsB,KAAKC,CAA3B,GAA+B,GAAtC;EACD;;EACDoE,EAAAA,aAAa,CAACxB,KAAD,EAAQ;EACnB,SAAK7C,CAAL,GAAS6C,KAAK,CAAC7C,CAAf;EACA,SAAKC,CAAL,GAAS4C,KAAK,CAAC5C,CAAf;EACA,SAAK+B,CAAL,GAASa,KAAK,CAACX,IAAN,EAAT;EACD;;EA1DkD;EA4DrDiD,YAAY,CAAC3C,CAAb,GAAiB,CAAjB;EACA2C,YAAY,CAAC1C,CAAb,GAAiB,CAAjB;EACA0C,YAAY,CAACzC,CAAb,GAAiB,CAAC,CAAlB;EACAyC,YAAY,CAACnC,CAAb,GAAiB,CAAC,CAAlB;;EC/De,MAAMoC,aAAN,SAA4BrD,UAA5B,CAAuC;EACpDrE,EAAAA,WAAW,GAAG;EACZ;EACA0H,IAAAA,aAAa,CAACrE,YAAd,CAA2BC,KAA3B,CAAiC,IAAjC,EAAuCC,SAAvC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKsE,EAAL,GAAU,IAAV;;EACA,QAAIpE,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1Ba,MAAAA,UAAU,CAAChB,YAAX,CAAwBI,IAAxB,CAA6B,IAA7B;EACA,WAAKkE,EAAL,GAAU,GAAV;EACD,KAHD,MAGO,IAAIpE,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,UAAID,SAAS,CAAC,CAAD,CAAT,YAAwBmE,aAA5B,EAA2C;EACzC,cAAM3B,KAAK,GAAGxC,SAAS,CAAC,CAAD,CAAvB;EACAc,QAAAA,UAAU,CAAChB,YAAX,CAAwBI,IAAxB,CAA6B,IAA7B,EAAmCsC,KAAK,CAACzD,CAAzC,EAA4CyD,KAAK,CAACxD,CAAlD;EACA,aAAKoF,EAAL,GAAU5B,KAAK,CAAC4B,EAAhB;EACD,OAJD,MAIO,IAAIpE,SAAS,CAAC,CAAD,CAAT,YAAwBc,UAA5B,EAAwC;EAC7C,cAAM0B,KAAK,GAAGxC,SAAS,CAAC,CAAD,CAAvB;EACAc,QAAAA,UAAU,CAAChB,YAAX,CAAwBI,IAAxB,CAA6B,IAA7B,EAAmCsC,KAAK,CAACzD,CAAzC,EAA4CyD,KAAK,CAACxD,CAAlD;EACA,aAAKoF,EAAL,GAAU,KAAKhD,IAAL,EAAV;EACD;EACF,KAVM,MAUA,IAAIpB,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMlB,CAAC,GAAGiB,SAAS,CAAC,CAAD,CAAnB;EAAA,YAAwBhB,CAAC,GAAGgB,SAAS,CAAC,CAAD,CAArC;EAAA,YAA0C8B,CAAC,GAAG9B,SAAS,CAAC,CAAD,CAAvD;EACAc,MAAAA,UAAU,CAAChB,YAAX,CAAwBI,IAAxB,CAA6B,IAA7B,EAAmCnB,CAAnC,EAAsCC,CAAtC,EAAyC8B,UAAU,CAACI,aAApD;EACA,WAAKkD,EAAL,GAAUtC,CAAV;EACD;EACF;;EACDV,EAAAA,IAAI,GAAG;EACL,WAAO,KAAKgD,EAAZ;EACD;;EACD/C,EAAAA,WAAW,CAACC,aAAD,EAAgB/C,KAAhB,EAAuB;EAChC,YAAQ+C,aAAR;EACA,WAAK6C,aAAa,CAAC5C,CAAnB;EACE,aAAKxC,CAAL,GAASR,KAAT;EACA;;EACF,WAAK4F,aAAa,CAAC3C,CAAnB;EACE,aAAKxC,CAAL,GAAST,KAAT;EACA;;EACF,WAAK4F,aAAa,CAACpC,CAAnB;EACE,aAAKqC,EAAL,GAAU7F,KAAV;EACA;;EACF;EACE,cAAM,IAAIxB,wBAAJ,CAA6B,6BAA6BuE,aAA1D,CAAN;EAXF;EAaD;;EACDO,EAAAA,IAAI,CAACC,CAAD,EAAI;EACN,SAAKsC,EAAL,GAAUtC,CAAV;EACD;;EACDb,EAAAA,IAAI,GAAG;EACL,WAAOH,UAAU,CAACI,aAAlB;EACD;;EACDc,EAAAA,WAAW,CAACV,aAAD,EAAgB;EACzB,YAAQA,aAAR;EACA,WAAK6C,aAAa,CAAC5C,CAAnB;EACE,eAAO,KAAKxC,CAAZ;;EACF,WAAKoF,aAAa,CAAC3C,CAAnB;EACE,eAAO,KAAKxC,CAAZ;;EACF,WAAKmF,aAAa,CAACpC,CAAnB;EACE,eAAO,KAAKqC,EAAZ;EANF;;EAQA,UAAM,IAAIrH,wBAAJ,CAA6B,6BAA6BuE,aAA1D,CAAN;EACD;;EACDI,EAAAA,IAAI,CAACX,CAAD,EAAI;EACN,UAAM,IAAIhE,wBAAJ,CAA6B,sDAA7B,CAAN;EACD;;EACD4F,EAAAA,IAAI,GAAG;EACL,WAAO,IAAIwB,aAAJ,CAAkB,IAAlB,CAAP;EACD;;EACDrH,EAAAA,QAAQ,GAAG;EACT,WAAO,MAAM,KAAKiC,CAAX,GAAe,IAAf,GAAsB,KAAKC,CAA3B,GAA+B,KAA/B,GAAuC,KAAKoC,IAAL,EAAvC,GAAqD,GAA5D;EACD;;EACDgC,EAAAA,aAAa,CAACxB,KAAD,EAAQ;EACnB,SAAK7C,CAAL,GAAS6C,KAAK,CAAC7C,CAAf;EACA,SAAKC,CAAL,GAAS4C,KAAK,CAAC5C,CAAf;EACA,SAAK+B,CAAL,GAASa,KAAK,CAACX,IAAN,EAAT;EACA,SAAKmD,EAAL,GAAUxC,KAAK,CAACR,IAAN,EAAV;EACD;;EA3EmD;EA6EtD+C,aAAa,CAAC5C,CAAd,GAAkB,CAAlB;EACA4C,aAAa,CAAC3C,CAAd,GAAkB,CAAlB;EACA2C,aAAa,CAAC1C,CAAd,GAAkB,CAAC,CAAnB;EACA0C,aAAa,CAACpC,CAAd,GAAkB,CAAlB;;EChFe,MAAMsC,cAAN,SAA6BvD,UAA7B,CAAwC;EACrDrE,EAAAA,WAAW,GAAG;EACZ;EACA4H,IAAAA,cAAc,CAACvE,YAAf,CAA4BC,KAA5B,CAAkC,IAAlC,EAAwCC,SAAxC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKsE,EAAL,GAAU,IAAV;;EACA,QAAIpE,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1Ba,MAAAA,UAAU,CAAChB,YAAX,CAAwBI,IAAxB,CAA6B,IAA7B;EACA,WAAKkE,EAAL,GAAU,GAAV;EACD,KAHD,MAGO,IAAIpE,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,UAAID,SAAS,CAAC,CAAD,CAAT,YAAwBqE,cAA5B,EAA4C;EAC1C,cAAM7B,KAAK,GAAGxC,SAAS,CAAC,CAAD,CAAvB;EACAc,QAAAA,UAAU,CAAChB,YAAX,CAAwBI,IAAxB,CAA6B,IAA7B,EAAmCsC,KAAnC;EACA,aAAK4B,EAAL,GAAU5B,KAAK,CAAC4B,EAAhB;EACD,OAJD,MAIO,IAAIpE,SAAS,CAAC,CAAD,CAAT,YAAwBc,UAA5B,EAAwC;EAC7C,cAAM0B,KAAK,GAAGxC,SAAS,CAAC,CAAD,CAAvB;EACAc,QAAAA,UAAU,CAAChB,YAAX,CAAwBI,IAAxB,CAA6B,IAA7B,EAAmCsC,KAAnC;EACA,aAAK4B,EAAL,GAAU,KAAKhD,IAAL,EAAV;EACD;EACF,KAVM,MAUA,IAAIpB,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMlB,CAAC,GAAGiB,SAAS,CAAC,CAAD,CAAnB;EAAA,YAAwBhB,CAAC,GAAGgB,SAAS,CAAC,CAAD,CAArC;EAAA,YAA0Ce,CAAC,GAAGf,SAAS,CAAC,CAAD,CAAvD;EAAA,YAA4D8B,CAAC,GAAG9B,SAAS,CAAC,CAAD,CAAzE;EACAc,MAAAA,UAAU,CAAChB,YAAX,CAAwBI,IAAxB,CAA6B,IAA7B,EAAmCnB,CAAnC,EAAsCC,CAAtC,EAAyC+B,CAAzC;EACA,WAAKqD,EAAL,GAAUtC,CAAV;EACD;EACF;;EACDV,EAAAA,IAAI,GAAG;EACL,WAAO,KAAKgD,EAAZ;EACD;;EACD/C,EAAAA,WAAW,CAACC,aAAD,EAAgB/C,KAAhB,EAAuB;EAChC,YAAQ+C,aAAR;EACA,WAAKR,UAAU,CAACS,CAAhB;EACE,aAAKxC,CAAL,GAASR,KAAT;EACA;;EACF,WAAKuC,UAAU,CAACU,CAAhB;EACE,aAAKxC,CAAL,GAAST,KAAT;EACA;;EACF,WAAKuC,UAAU,CAACW,CAAhB;EACE,aAAKV,CAAL,GAASxC,KAAT;EACA;;EACF,WAAKuC,UAAU,CAACiB,CAAhB;EACE,aAAKqC,EAAL,GAAU7F,KAAV;EACA;;EACF;EACE,cAAM,IAAIxB,wBAAJ,CAA6B,6BAA6BuE,aAA1D,CAAN;EAdF;EAgBD;;EACDO,EAAAA,IAAI,CAACC,CAAD,EAAI;EACN,SAAKsC,EAAL,GAAUtC,CAAV;EACD;;EACDE,EAAAA,WAAW,CAACV,aAAD,EAAgB;EACzB,YAAQA,aAAR;EACA,WAAKR,UAAU,CAACS,CAAhB;EACE,eAAO,KAAKxC,CAAZ;;EACF,WAAK+B,UAAU,CAACU,CAAhB;EACE,eAAO,KAAKxC,CAAZ;;EACF,WAAK8B,UAAU,CAACW,CAAhB;EACE,eAAO,KAAKR,IAAL,EAAP;;EACF,WAAKH,UAAU,CAACiB,CAAhB;EACE,eAAO,KAAKX,IAAL,EAAP;EARF;;EAUA,UAAM,IAAIrE,wBAAJ,CAA6B,6BAA6BuE,aAA1D,CAAN;EACD;;EACDqB,EAAAA,IAAI,GAAG;EACL,WAAO,IAAI0B,cAAJ,CAAmB,IAAnB,CAAP;EACD;;EACDvH,EAAAA,QAAQ,GAAG;EACT,WAAO,MAAM,KAAKiC,CAAX,GAAe,IAAf,GAAsB,KAAKC,CAA3B,GAA+B,IAA/B,GAAsC,KAAKiC,IAAL,EAAtC,GAAoD,KAApD,GAA4D,KAAKG,IAAL,EAA5D,GAA0E,GAAjF;EACD;;EACDgC,EAAAA,aAAa,CAACxB,KAAD,EAAQ;EACnB,SAAK7C,CAAL,GAAS6C,KAAK,CAAC7C,CAAf;EACA,SAAKC,CAAL,GAAS4C,KAAK,CAAC5C,CAAf;EACA,SAAK+B,CAAL,GAASa,KAAK,CAACX,IAAN,EAAT;EACA,SAAKmD,EAAL,GAAUxC,KAAK,CAACR,IAAN,EAAV;EACD;;EA1EoD;;ECFxC,uBAASiB,CAAT,EAAYjF,CAAZ,EAAe;EAC5B,SAAOiF,CAAC,CAACgB,WAAF,IAAiBhB,CAAC,CAACgB,WAAF,CAAciB,OAAd,CAAsBlH,CAAtB,IAA2B,CAAC,CAApD;EACD;;ECFD;EACA;EACA;EACe,MAAMmH,UAAN,CAAiB;EAC9B;EACF;EACA;EACA;EACA;EACA;EACEC,EAAAA,GAAG,GAAG;EACN;EACF;EACA;EACA;EACA;EACA;EACA;;;EACEC,EAAAA,MAAM,GAAG;EACT;EACF;EACA;EACA;;;EACEC,EAAAA,OAAO,GAAG;EACV;EACF;EACA;EACA;;;EACEC,EAAAA,QAAQ,GAAG;EACX;EACF;EACA;EACA;;;EACEC,EAAAA,IAAI,GAAG;EACP;EACF;EACA;EACA;;;EACEC,EAAAA,OAAO,GAAG;EACV;EACF;EACA;EACA;EACA;EACA;;;EACEC,EAAAA,MAAM,GAAG;;EA1CqB;;ECDjB,MAAMC,yBAAN,SAAwCxI,SAAxC,CAAkD;EAC/DE,EAAAA,WAAW,CAACC,OAAD,EAAU;EACnB,UAAMA,OAAN;EACA,SAAKC,IAAL,GAAYC,MAAM,CAACC,IAAP,CAAY;EAAEkI,MAAAA;EAAF,KAAZ,EAA2C,CAA3C,CAAZ;EACD;;EAJ8D;;ECAjE;EACA;EACA;;EACe,MAAMC,IAAN,SAAmBT,UAAnB,CAA8B;EAC3C;EACF;EACA;EACA;EACA;EACEU,EAAAA,GAAG,GAAG;EACN;EACF;EACA;EACA;EACA;EACA;EACA;;;EACEC,EAAAA,GAAG,GAAG;EACN;EACF;EACA;EACA;;;EACER,EAAAA,OAAO,GAAG;;EAnBiC;;ECH9B,MAAMS,sBAAN,SAAqC5I,SAArC,CAA+C;EAC5DE,EAAAA,WAAW,CAACC,OAAD,EAAU;EACnB,UAAMA,OAAN;EACA,SAAKC,IAAL,GAAYC,MAAM,CAACC,IAAP,CAAY;EAAEsI,MAAAA;EAAF,KAAZ,EAAwC,CAAxC,CAAZ;EACD;;EAJ2D;;ECG9D;EACA;EACA;;EACe,MAAMC,SAAN,SAAwBJ,IAAxB,CAA6B;EAE1CvI,EAAAA,WAAW,CAAC4F,CAAD,EAAI;EACb;EACA,SAAKgD,KAAL,GAAa,EAAb;EACA,QAAIhD,CAAC,YAAYkC,UAAjB,EAA6B,KAAKE,MAAL,CAAYpC,CAAZ;EAC9B;;EAED,MAAIgB,WAAJ,GAAkB;EAChB,WAAO,CAAC2B,IAAD,EAAOT,UAAP,CAAP;EACD;;EAEDe,EAAAA,cAAc,GAAG;;EAEjBd,EAAAA,GAAG,CAAC/B,CAAD,EAAI;EACL,QAAIzC,SAAS,CAACC,MAAV,KAAqB,CAAzB,EACE,KAAKoF,KAAL,CAAWE,IAAX,CAAgB9C,CAAhB,EADF,KAGE,KAAK4C,KAAL,CAAWG,MAAX,CAAkBxF,SAAS,CAAC,CAAD,CAA3B,EAAgC,CAAhC,EAAmCA,SAAS,CAAC,CAAD,CAA5C;EACF,WAAO,IAAP;EACD;;EAEDyF,EAAAA,KAAK,GAAG;EACN,SAAKJ,KAAL,GAAa,EAAb;EACD;;EAEDZ,EAAAA,MAAM,CAACzD,CAAD,EAAI;EACR,SAAK,MAAMyB,CAAX,IAAgBzB,CAAhB,EACE,KAAKqE,KAAL,CAAWE,IAAX,CAAgB9C,CAAhB;EACH;;EAEDyC,EAAAA,GAAG,CAACQ,KAAD,EAAQC,OAAR,EAAiB;EAClB,UAAMC,UAAU,GAAG,KAAKP,KAAL,CAAWK,KAAX,CAAnB;EACA,SAAKL,KAAL,CAAWK,KAAX,IAAoBC,OAApB;EACA,WAAOC,UAAP;EACD;;EAEDjB,EAAAA,QAAQ,GAAG;EACT,WAAO,IAAIkB,QAAJ,CAAa,IAAb,CAAP;EACD;;EAEDZ,EAAAA,GAAG,CAACS,KAAD,EAAQ;EACT,QAAIA,KAAK,GAAG,CAAR,IAAaA,KAAK,IAAI,KAAKd,IAAL,EAA1B,EACE,MAAM,IAAIG,yBAAJ,EAAN;EACF,WAAO,KAAKM,KAAL,CAAWK,KAAX,CAAP;EACD;;EAEDhB,EAAAA,OAAO,GAAG;EACR,WAAO,KAAKW,KAAL,CAAWpF,MAAX,KAAsB,CAA7B;EACD;;EAED6F,EAAAA,IAAI,CAACC,UAAD,EAAa;EACf,QAAIA,UAAJ,EACE,KAAKV,KAAL,CAAWS,IAAX,CAAgB,CAACnC,CAAD,EAAIC,CAAJ,KAAUmC,UAAU,CAACrC,OAAX,CAAmBC,CAAnB,EAAsBC,CAAtB,CAA1B,EADF,KAEK,KAAKyB,KAAL,CAAWS,IAAX;EACN;;EAEDlB,EAAAA,IAAI,GAAG;EACL,WAAO,KAAKS,KAAL,CAAWpF,MAAlB;EACD;;EAED4E,EAAAA,OAAO,GAAG;EACR,WAAO,KAAKQ,KAAL,CAAWW,KAAX,EAAP;EACD;;EAEDlB,EAAAA,MAAM,CAACzC,CAAD,EAAI;EACR,SAAK,IAAIjF,CAAC,GAAG,CAAR,EAAW6I,GAAG,GAAG,KAAKZ,KAAL,CAAWpF,MAAjC,EAAyC7C,CAAC,GAAG6I,GAA7C,EAAkD7I,CAAC,EAAnD,EACE,IAAI,KAAKiI,KAAL,CAAWjI,CAAX,MAAkBiF,CAAtB,EACE,OAAO,CAAC,CAAC,KAAKgD,KAAL,CAAWG,MAAX,CAAkBpI,CAAlB,EAAqB,CAArB,CAAT;;EACJ,WAAO,KAAP;EACD;;EAED,GAAC8I,MAAM,CAACvB,QAAR,IAAoB;EAClB,WAAO,KAAKU,KAAL,CAAWc,MAAX,EAAP;EACD;;EA1EyC;;EA6E5C,MAAMN,QAAN,CAAe;EACbpJ,EAAAA,WAAW,CAAC2J,SAAD,EAAY;EACrB,SAAKA,SAAL,GAAiBA,SAAjB;EACA,SAAKC,QAAL,GAAgB,CAAhB;EACD;;EAEDC,EAAAA,IAAI,GAAG;EACL,QAAI,KAAKD,QAAL,KAAkB,KAAKD,SAAL,CAAexB,IAAf,EAAtB,EACE,MAAM,IAAIO,sBAAJ,EAAN;EACF,WAAO,KAAKiB,SAAL,CAAenB,GAAf,CAAmB,KAAKoB,QAAL,EAAnB,CAAP;EACD;;EAEDE,EAAAA,OAAO,GAAG;EACR,WAAO,KAAKF,QAAL,GAAgB,KAAKD,SAAL,CAAexB,IAAf,EAAvB;EACD;;EAEDM,EAAAA,GAAG,CAACS,OAAD,EAAU;EACX,WAAO,KAAKS,SAAL,CAAelB,GAAf,CAAmB,KAAKmB,QAAL,GAAgB,CAAnC,EAAsCV,OAAtC,CAAP;EACD;;EAEDb,EAAAA,MAAM,GAAG;EACP,SAAKsB,SAAL,CAAetB,MAAf,CAAsB,KAAKsB,SAAL,CAAenB,GAAf,CAAmB,KAAKoB,QAAxB,CAAtB;EACD;;EAtBY;;ECjFA,MAAMG,cAAN,SAA6BpB,SAA7B,CAAuC;EACpD3I,EAAAA,WAAW,GAAG;EACZ;EACA+J,IAAAA,cAAc,CAAC1G,YAAf,CAA4BC,KAA5B,CAAkC,IAAlC,EAAwCC,SAAxC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,QAAIE,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B,CAA5B,MAAoC,IAAID,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC9D,YAAMuC,KAAK,GAAGxC,SAAS,CAAC,CAAD,CAAvB;EACA,WAAKsF,cAAL,CAAoB9C,KAAK,CAACvC,MAA1B;EACA,WAAKuE,GAAL,CAAShC,KAAT,EAAgB,IAAhB;EACD,KAJmC,MAI7B,IAAIxC,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMuC,KAAK,GAAGxC,SAAS,CAAC,CAAD,CAAvB;EAAA,YAA4ByG,aAAa,GAAGzG,SAAS,CAAC,CAAD,CAArD;EACA,WAAKsF,cAAL,CAAoB9C,KAAK,CAACvC,MAA1B;EACA,WAAKuE,GAAL,CAAShC,KAAT,EAAgBiE,aAAhB;EACD;EACF;;EACDC,EAAAA,aAAa,CAACtJ,CAAD,EAAI;EACf,WAAO,KAAK6H,GAAL,CAAS7H,CAAT,CAAP;EACD;;EACDqH,EAAAA,MAAM,GAAG;EACP,QAAIzE,SAAS,CAACC,MAAV,KAAqB,CAArB,IAA2B,OAAOD,SAAS,CAAC,CAAD,CAAhB,KAAwB,SAAxB,IAAqC2G,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAeuE,UAAf,CAAhF,EAA6G;EAC3G,YAAMqC,IAAI,GAAG5G,SAAS,CAAC,CAAD,CAAtB;EAAA,YAA2ByG,aAAa,GAAGzG,SAAS,CAAC,CAAD,CAApD;EACA,UAAI6G,SAAS,GAAG,KAAhB;;EACA,WAAK,IAAIzJ,CAAC,GAAGwJ,IAAI,CAACjC,QAAL,EAAb,EAA8BvH,CAAC,CAACmJ,OAAF,EAA9B,GAA6C;EAC3C,aAAK/B,GAAL,CAASpH,CAAC,CAACkJ,IAAF,EAAT,EAAmBG,aAAnB;EACAI,QAAAA,SAAS,GAAG,IAAZ;EACD;;EACD,aAAOA,SAAP;EACD,KARD,MAQO;EACL,aAAO,MAAMpC,MAAN,CAAa1E,KAAb,CAAmB,IAAnB,EAAyBC,SAAzB,CAAP;EACD;EACF;;EACDuC,EAAAA,KAAK,GAAG;EACN,UAAMA,KAAK,GAAG,MAAMA,KAAN,CAAYrC,IAAZ,CAAiB,IAAjB,CAAd;;EACA,SAAK,IAAI9C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKwH,IAAL,EAApB,EAAiCxH,CAAC,EAAlC,EACEmF,KAAK,CAACiC,GAAN,CAAUpH,CAAV,EAAa,KAAK6H,GAAL,CAAS7H,CAAT,EAAYmF,KAAZ,EAAb;;EAEF,WAAOA,KAAP;EACD;;EACDuE,EAAAA,iBAAiB,GAAG;EAClB,QAAI9G,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,aAAO,KAAK4E,OAAL,CAAa2B,cAAc,CAACO,cAA5B,CAAP;EACD,KAFD,MAEO,IAAI/G,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAM+G,SAAS,GAAGhH,SAAS,CAAC,CAAD,CAA3B;EACA,UAAIgH,SAAJ,EACE,OAAO,KAAKnC,OAAL,CAAa2B,cAAc,CAACO,cAA5B,CAAP;EAEF,YAAMnC,IAAI,GAAG,KAAKA,IAAL,EAAb;EACA,YAAMqC,GAAG,GAAG,IAAIC,KAAJ,CAAUtC,IAAV,EAAgBuC,IAAhB,CAAqB,IAArB,CAAZ;;EACA,WAAK,IAAI/J,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGwH,IAApB,EAA0BxH,CAAC,EAA3B,EACE6J,GAAG,CAAC7J,CAAD,CAAH,GAAS,KAAK6H,GAAL,CAASL,IAAI,GAAGxH,CAAP,GAAW,CAApB,CAAT;;EAEF,aAAO6J,GAAP;EACD;EACF;;EACDzC,EAAAA,GAAG,GAAG;EACJ,QAAIxE,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMuC,KAAK,GAAGxC,SAAS,CAAC,CAAD,CAAvB;EACA,aAAO,MAAMwE,GAAN,CAAUtE,IAAV,CAAe,IAAf,EAAqBsC,KAArB,CAAP;EACD,KAHD,MAGO,IAAIxC,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,UAAID,SAAS,CAAC,CAAD,CAAT,YAAwBkH,KAAxB,IAAiC,OAAOlH,SAAS,CAAC,CAAD,CAAhB,KAAwB,SAA7D,EAAwE;EACtE,cAAMwC,KAAK,GAAGxC,SAAS,CAAC,CAAD,CAAvB;EAAA,cAA4ByG,aAAa,GAAGzG,SAAS,CAAC,CAAD,CAArD;EACA,aAAKwE,GAAL,CAAShC,KAAT,EAAgBiE,aAAhB,EAA+B,IAA/B;EACA,eAAO,IAAP;EACD,OAJD,MAIO,IAAIzG,SAAS,CAAC,CAAD,CAAT,YAAwBc,UAAxB,IAAsC,OAAOd,SAAS,CAAC,CAAD,CAAhB,KAAwB,SAAlE,EAA6E;EAClF,cAAMwC,KAAK,GAAGxC,SAAS,CAAC,CAAD,CAAvB;EAAA,cAA4ByG,aAAa,GAAGzG,SAAS,CAAC,CAAD,CAArD;EACA,YAAI,CAACyG,aAAL,EACE,IAAI,KAAK7B,IAAL,MAAe,CAAnB,EAAsB;EACpB,gBAAMwC,IAAI,GAAG,KAAKnC,GAAL,CAAS,KAAKL,IAAL,KAAc,CAAvB,CAAb;EACA,cAAIwC,IAAI,CAACzF,QAAL,CAAca,KAAd,CAAJ,EAA0B,OAAO,IAAP;EAC3B;EAEH,cAAMgC,GAAN,CAAUtE,IAAV,CAAe,IAAf,EAAqBsC,KAArB;EACD,OATM,MASA,IAAIxC,SAAS,CAAC,CAAD,CAAT,YAAwBpD,MAAxB,IAAkC,OAAOoD,SAAS,CAAC,CAAD,CAAhB,KAAwB,SAA9D,EAAyE;EAC9E,cAAMqH,GAAG,GAAGrH,SAAS,CAAC,CAAD,CAArB;EAAA,cAA0ByG,aAAa,GAAGzG,SAAS,CAAC,CAAD,CAAnD;EACA,aAAKwE,GAAL,CAAS6C,GAAT,EAAcZ,aAAd;EACA,eAAO,IAAP;EACD;EACF,KAnBM,MAmBA,IAAIzG,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,UAAI,OAAOD,SAAS,CAAC,CAAD,CAAhB,KAAwB,SAAxB,IAAsCA,SAAS,CAAC,CAAD,CAAT,YAAwBkH,KAAxB,IAAiC,OAAOlH,SAAS,CAAC,CAAD,CAAhB,KAAwB,SAAnG,EAA+G;EAC7G,cAAMwC,KAAK,GAAGxC,SAAS,CAAC,CAAD,CAAvB;EAAA,cAA4ByG,aAAa,GAAGzG,SAAS,CAAC,CAAD,CAArD;EAAA,cAA0DsH,SAAS,GAAGtH,SAAS,CAAC,CAAD,CAA/E;EACA,YAAIsH,SAAJ,EACE,KAAK,IAAIlK,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGoF,KAAK,CAACvC,MAA1B,EAAkC7C,CAAC,EAAnC,EACE,KAAKoH,GAAL,CAAShC,KAAK,CAACpF,CAAD,CAAd,EAAmBqJ,aAAnB,EAFJ,KAKE,KAAK,IAAIrJ,CAAC,GAAGoF,KAAK,CAACvC,MAAN,GAAe,CAA5B,EAA+B7C,CAAC,IAAI,CAApC,EAAuCA,CAAC,EAAxC,EACE,KAAKoH,GAAL,CAAShC,KAAK,CAACpF,CAAD,CAAd,EAAmBqJ,aAAnB;EAGJ,eAAO,IAAP;EACD,OAZD,MAYO,IAAI,OAAOzG,SAAS,CAAC,CAAD,CAAhB,KAAwB,SAAxB,IAAsCrC,MAAM,CAAC4J,SAAP,CAAiBvH,SAAS,CAAC,CAAD,CAA1B,KAAkCA,SAAS,CAAC,CAAD,CAAT,YAAwBc,UAApG,EAAiH;EACtH,cAAM1D,CAAC,GAAG4C,SAAS,CAAC,CAAD,CAAnB;EAAA,cAAwBwC,KAAK,GAAGxC,SAAS,CAAC,CAAD,CAAzC;EAAA,cAA8CyG,aAAa,GAAGzG,SAAS,CAAC,CAAD,CAAvE;;EACA,YAAI,CAACyG,aAAL,EAAoB;EAClB,gBAAM7B,IAAI,GAAG,KAAKA,IAAL,EAAb;;EACA,cAAIA,IAAI,GAAG,CAAX,EAAc;EACZ,gBAAIxH,CAAC,GAAG,CAAR,EAAW;EACT,oBAAMoK,IAAI,GAAG,KAAKvC,GAAL,CAAS7H,CAAC,GAAG,CAAb,CAAb;EACA,kBAAIoK,IAAI,CAAC7F,QAAL,CAAca,KAAd,CAAJ,EAA0B,OAAO,IAAP;EAC3B;;EACD,gBAAIpF,CAAC,GAAGwH,IAAR,EAAc;EACZ,oBAAM0B,IAAI,GAAG,KAAKrB,GAAL,CAAS7H,CAAT,CAAb;EACA,kBAAIkJ,IAAI,CAAC3E,QAAL,CAAca,KAAd,CAAJ,EAA0B,OAAO,IAAP;EAC3B;EACF;EACF;;EACD,cAAMgC,GAAN,CAAUtE,IAAV,CAAe,IAAf,EAAqB9C,CAArB,EAAwBoF,KAAxB;EACD;EACF,KA9BM,MA8BA,IAAIxC,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMuC,KAAK,GAAGxC,SAAS,CAAC,CAAD,CAAvB;EAAA,YAA4ByG,aAAa,GAAGzG,SAAS,CAAC,CAAD,CAArD;EAAA,YAA0DyH,KAAK,GAAGzH,SAAS,CAAC,CAAD,CAA3E;EAAA,YAAgF0H,GAAG,GAAG1H,SAAS,CAAC,CAAD,CAA/F;EACA,UAAI2H,GAAG,GAAG,CAAV;EACA,UAAIF,KAAK,GAAGC,GAAZ,EAAiBC,GAAG,GAAG,CAAC,CAAP;;EACjB,WAAK,IAAIvK,CAAC,GAAGqK,KAAb,EAAoBrK,CAAC,KAAKsK,GAA1B,EAA+BtK,CAAC,IAAIuK,GAApC,EACE,KAAKnD,GAAL,CAAShC,KAAK,CAACpF,CAAD,CAAd,EAAmBqJ,aAAnB;;EAEF,aAAO,IAAP;EACD;EACF;;EACDmB,EAAAA,SAAS,GAAG;EACV,QAAI,KAAKhD,IAAL,KAAc,CAAlB,EAAqB;EACnB,YAAMiD,SAAS,GAAG,KAAK5C,GAAL,CAAS,CAAT,EAAYtC,IAAZ,EAAlB;EACA,WAAK6B,GAAL,CAASqD,SAAT,EAAoB,KAApB;EACD;EACF;;EA3HmD;EA6HtDrB,cAAc,CAACO,cAAf,GAAgC,IAAIG,KAAJ,CAAU,CAAV,EAAaC,IAAb,CAAkB,IAAlB,CAAhC;;ECjIe,MAAMW,wBAAN,CAA+B;EAC5CC,EAAAA,MAAM,CAACC,GAAD,EAAM5K,CAAN,EAAS;;EACf6K,EAAAA,MAAM,GAAG;;EACTC,EAAAA,iBAAiB,GAAG;;EAHwB;;ECG/B,MAAMC,QAAN,CAAe;EAC5B1L,EAAAA,WAAW,GAAG;EACZ0L,IAAAA,QAAQ,CAACrI,YAAT,CAAsBC,KAAtB,CAA4B,IAA5B,EAAkCC,SAAlC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKsI,KAAL,GAAa,IAAb;EACA,SAAKC,KAAL,GAAa,IAAb;EACA,SAAKC,KAAL,GAAa,IAAb;EACA,SAAKC,KAAL,GAAa,IAAb;;EACA,QAAIvI,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,WAAKuI,IAAL;EACD,KAFD,MAEO,IAAIxI,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,UAAID,SAAS,CAAC,CAAD,CAAT,YAAwBc,UAA5B,EAAwC;EACtC,cAAM2H,CAAC,GAAGzI,SAAS,CAAC,CAAD,CAAnB;EACA,aAAKwI,IAAL,CAAUC,CAAC,CAAC1J,CAAZ,EAAe0J,CAAC,CAAC1J,CAAjB,EAAoB0J,CAAC,CAACzJ,CAAtB,EAAyByJ,CAAC,CAACzJ,CAA3B;EACD,OAHD,MAGO,IAAIgB,SAAS,CAAC,CAAD,CAAT,YAAwBmI,QAA5B,EAAsC;EAC3C,cAAMO,GAAG,GAAG1I,SAAS,CAAC,CAAD,CAArB;EACA,aAAKwI,IAAL,CAAUE,GAAV;EACD;EACF,KARM,MAQA,IAAI1I,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAM0I,EAAE,GAAG3I,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyB4I,EAAE,GAAG5I,SAAS,CAAC,CAAD,CAAvC;EACA,WAAKwI,IAAL,CAAUG,EAAE,CAAC5J,CAAb,EAAgB6J,EAAE,CAAC7J,CAAnB,EAAsB4J,EAAE,CAAC3J,CAAzB,EAA4B4J,EAAE,CAAC5J,CAA/B;EACD,KAHM,MAGA,IAAIgB,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAM/D,EAAE,GAAG8D,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyB7D,EAAE,GAAG6D,SAAS,CAAC,CAAD,CAAvC;EAAA,YAA4C6I,EAAE,GAAG7I,SAAS,CAAC,CAAD,CAA1D;EAAA,YAA+D8I,EAAE,GAAG9I,SAAS,CAAC,CAAD,CAA7E;EACA,WAAKwI,IAAL,CAAUtM,EAAV,EAAcC,EAAd,EAAkB0M,EAAlB,EAAsBC,EAAtB;EACD;EACF;;EACD,SAAOC,UAAP,GAAoB;EAClB,QAAI/I,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAM0I,EAAE,GAAG3I,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyB4I,EAAE,GAAG5I,SAAS,CAAC,CAAD,CAAvC;EAAA,YAA4CgJ,CAAC,GAAGhJ,SAAS,CAAC,CAAD,CAAzD;EACA,UAAIgJ,CAAC,CAACjK,CAAF,KAAQ4J,EAAE,CAAC5J,CAAH,GAAO6J,EAAE,CAAC7J,CAAV,GAAc4J,EAAE,CAAC5J,CAAjB,GAAqB6J,EAAE,CAAC7J,CAAhC,KAAsCiK,CAAC,CAACjK,CAAF,KAAQ4J,EAAE,CAAC5J,CAAH,GAAO6J,EAAE,CAAC7J,CAAV,GAAc4J,EAAE,CAAC5J,CAAjB,GAAqB6J,EAAE,CAAC7J,CAAhC,CAAtC,IAA6EiK,CAAC,CAAChK,CAAF,KAAQ2J,EAAE,CAAC3J,CAAH,GAAO4J,EAAE,CAAC5J,CAAV,GAAc2J,EAAE,CAAC3J,CAAjB,GAAqB4J,EAAE,CAAC5J,CAAhC,KAAsCgK,CAAC,CAAChK,CAAF,KAAQ2J,EAAE,CAAC3J,CAAH,GAAO4J,EAAE,CAAC5J,CAAV,GAAc2J,EAAE,CAAC3J,CAAjB,GAAqB4J,EAAE,CAAC5J,CAAhC,CAAvH,EACE,OAAO,IAAP;EAEF,aAAO,KAAP;EACD,KAND,MAMO,IAAIgB,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAM0I,EAAE,GAAG3I,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyB4I,EAAE,GAAG5I,SAAS,CAAC,CAAD,CAAvC;EAAA,YAA4CiJ,EAAE,GAAGjJ,SAAS,CAAC,CAAD,CAA1D;EAAA,YAA+DkJ,EAAE,GAAGlJ,SAAS,CAAC,CAAD,CAA7E;EACA,UAAImJ,IAAI,GAAG9M,IAAI,CAAC+M,GAAL,CAASH,EAAE,CAAClK,CAAZ,EAAemK,EAAE,CAACnK,CAAlB,CAAX;EACA,UAAIsK,IAAI,GAAGhN,IAAI,CAACiN,GAAL,CAASL,EAAE,CAAClK,CAAZ,EAAemK,EAAE,CAACnK,CAAlB,CAAX;EACA,UAAIwK,IAAI,GAAGlN,IAAI,CAAC+M,GAAL,CAAST,EAAE,CAAC5J,CAAZ,EAAe6J,EAAE,CAAC7J,CAAlB,CAAX;EACA,UAAIyK,IAAI,GAAGnN,IAAI,CAACiN,GAAL,CAASX,EAAE,CAAC5J,CAAZ,EAAe6J,EAAE,CAAC7J,CAAlB,CAAX;EACA,UAAIwK,IAAI,GAAGF,IAAX,EAAiB,OAAO,KAAP;EACjB,UAAIG,IAAI,GAAGL,IAAX,EAAiB,OAAO,KAAP;EACjBA,MAAAA,IAAI,GAAG9M,IAAI,CAAC+M,GAAL,CAASH,EAAE,CAACjK,CAAZ,EAAekK,EAAE,CAAClK,CAAlB,CAAP;EACAqK,MAAAA,IAAI,GAAGhN,IAAI,CAACiN,GAAL,CAASL,EAAE,CAACjK,CAAZ,EAAekK,EAAE,CAAClK,CAAlB,CAAP;EACAuK,MAAAA,IAAI,GAAGlN,IAAI,CAAC+M,GAAL,CAAST,EAAE,CAAC3J,CAAZ,EAAe4J,EAAE,CAAC5J,CAAlB,CAAP;EACAwK,MAAAA,IAAI,GAAGnN,IAAI,CAACiN,GAAL,CAASX,EAAE,CAAC3J,CAAZ,EAAe4J,EAAE,CAAC5J,CAAlB,CAAP;EACA,UAAIuK,IAAI,GAAGF,IAAX,EAAiB,OAAO,KAAP;EACjB,UAAIG,IAAI,GAAGL,IAAX,EAAiB,OAAO,KAAP;EACjB,aAAO,IAAP;EACD;EACF;;EACDM,EAAAA,OAAO,GAAG;EACR,WAAO,KAAKC,QAAL,KAAkB,KAAKC,SAAL,EAAzB;EACD;;EACDpJ,EAAAA,MAAM,CAACqB,KAAD,EAAQ;EACZ,QAAI,EAAEA,KAAK,YAAYuG,QAAnB,CAAJ,EACE,OAAO,KAAP;EAEF,UAAMyB,aAAa,GAAGhI,KAAtB;EACA,QAAI,KAAKiI,MAAL,EAAJ,EACE,OAAOD,aAAa,CAACC,MAAd,EAAP;EAEF,WAAO,KAAKxB,KAAL,KAAeuB,aAAa,CAACE,OAAd,EAAf,IAA0C,KAAKvB,KAAL,KAAeqB,aAAa,CAACG,OAAd,EAAzD,IAAoF,KAAK3B,KAAL,KAAewB,aAAa,CAACI,OAAd,EAAnG,IAA8H,KAAK1B,KAAL,KAAesB,aAAa,CAACK,OAAd,EAApJ;EACD;;EACDC,EAAAA,YAAY,CAACxB,GAAD,EAAM;EAChB,QAAI,KAAKmB,MAAL,MAAiBnB,GAAG,CAACmB,MAAJ,EAAjB,IAAiC,CAAC,KAAKd,UAAL,CAAgBL,GAAhB,CAAtC,EAA4D,OAAO,IAAIP,QAAJ,EAAP;EAC5D,UAAMgC,OAAO,GAAG,KAAK/B,KAAL,GAAaM,GAAG,CAACN,KAAjB,GAAyB,KAAKA,KAA9B,GAAsCM,GAAG,CAACN,KAA1D;EACA,UAAMgC,OAAO,GAAG,KAAK9B,KAAL,GAAaI,GAAG,CAACJ,KAAjB,GAAyB,KAAKA,KAA9B,GAAsCI,GAAG,CAACJ,KAA1D;EACA,UAAM+B,OAAO,GAAG,KAAKhC,KAAL,GAAaK,GAAG,CAACL,KAAjB,GAAyB,KAAKA,KAA9B,GAAsCK,GAAG,CAACL,KAA1D;EACA,UAAMiC,OAAO,GAAG,KAAK/B,KAAL,GAAaG,GAAG,CAACH,KAAjB,GAAyB,KAAKA,KAA9B,GAAsCG,GAAG,CAACH,KAA1D;EACA,WAAO,IAAIJ,QAAJ,CAAagC,OAAb,EAAsBE,OAAtB,EAA+BD,OAA/B,EAAwCE,OAAxC,CAAP;EACD;;EACDT,EAAAA,MAAM,GAAG;EACP,WAAO,KAAKxB,KAAL,GAAa,KAAKD,KAAzB;EACD;;EACD0B,EAAAA,OAAO,GAAG;EACR,WAAO,KAAKzB,KAAZ;EACD;;EACDkC,EAAAA,MAAM,GAAG;EACP,QAAIvK,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,UAAID,SAAS,CAAC,CAAD,CAAT,YAAwBc,UAA5B,EAAwC;EACtC,cAAM2H,CAAC,GAAGzI,SAAS,CAAC,CAAD,CAAnB;EACA,eAAO,KAAKuK,MAAL,CAAY9B,CAAC,CAAC1J,CAAd,EAAiB0J,CAAC,CAACzJ,CAAnB,CAAP;EACD,OAHD,MAGO,IAAIgB,SAAS,CAAC,CAAD,CAAT,YAAwBmI,QAA5B,EAAsC;EAC3C,cAAMvG,KAAK,GAAG5B,SAAS,CAAC,CAAD,CAAvB;EACA,YAAI,KAAK6J,MAAL,MAAiBjI,KAAK,CAACiI,MAAN,EAArB,EACE,OAAO,KAAP;EAEF,eAAOjI,KAAK,CAACoI,OAAN,MAAmB,KAAK5B,KAAxB,IAAiCxG,KAAK,CAACkI,OAAN,MAAmB,KAAKzB,KAAzD,IAAkEzG,KAAK,CAACqI,OAAN,MAAmB,KAAK3B,KAA1F,IAAmG1G,KAAK,CAACmI,OAAN,MAAmB,KAAKxB,KAAlI;EACD;EACF,KAXD,MAWO,IAAIvI,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMlB,CAAC,GAAGiB,SAAS,CAAC,CAAD,CAAnB;EAAA,YAAwBhB,CAAC,GAAGgB,SAAS,CAAC,CAAD,CAArC;EACA,UAAI,KAAK6J,MAAL,EAAJ,EAAmB,OAAO,KAAP;EACnB,aAAO9K,CAAC,IAAI,KAAKqJ,KAAV,IAAmBrJ,CAAC,IAAI,KAAKsJ,KAA7B,IAAsCrJ,CAAC,IAAI,KAAKsJ,KAAhD,IAAyDtJ,CAAC,IAAI,KAAKuJ,KAA1E;EACD;EACF;;EACDQ,EAAAA,UAAU,GAAG;EACX,QAAI/I,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,UAAID,SAAS,CAAC,CAAD,CAAT,YAAwBmI,QAA5B,EAAsC;EACpC,cAAMvG,KAAK,GAAG5B,SAAS,CAAC,CAAD,CAAvB;EACA,YAAI,KAAK6J,MAAL,MAAiBjI,KAAK,CAACiI,MAAN,EAArB,EACE,OAAO,KAAP;EAEF,eAAO,EAAEjI,KAAK,CAACwG,KAAN,GAAc,KAAKC,KAAnB,IAA4BzG,KAAK,CAACyG,KAAN,GAAc,KAAKD,KAA/C,IAAwDxG,KAAK,CAAC0G,KAAN,GAAc,KAAKC,KAA3E,IAAoF3G,KAAK,CAAC2G,KAAN,GAAc,KAAKD,KAAzG,CAAP;EACD,OAND,MAMO,IAAItI,SAAS,CAAC,CAAD,CAAT,YAAwBc,UAA5B,EAAwC;EAC7C,cAAM2H,CAAC,GAAGzI,SAAS,CAAC,CAAD,CAAnB;EACA,eAAO,KAAK+I,UAAL,CAAgBN,CAAC,CAAC1J,CAAlB,EAAqB0J,CAAC,CAACzJ,CAAvB,CAAP;EACD;EACF,KAXD,MAWO,IAAIgB,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,UAAID,SAAS,CAAC,CAAD,CAAT,YAAwBc,UAAxB,IAAsCd,SAAS,CAAC,CAAD,CAAT,YAAwBc,UAAlE,EAA8E;EAC5E,cAAM6C,CAAC,GAAG3D,SAAS,CAAC,CAAD,CAAnB;EAAA,cAAwB4D,CAAC,GAAG5D,SAAS,CAAC,CAAD,CAArC;EACA,YAAI,KAAK6J,MAAL,EAAJ,EACE,OAAO,KAAP;EAEF,cAAMW,OAAO,GAAG7G,CAAC,CAAC5E,CAAF,GAAM6E,CAAC,CAAC7E,CAAR,GAAY4E,CAAC,CAAC5E,CAAd,GAAkB6E,CAAC,CAAC7E,CAApC;EACA,YAAIyL,OAAO,GAAG,KAAKnC,KAAnB,EAA0B,OAAO,KAAP;EAC1B,cAAMoC,OAAO,GAAG9G,CAAC,CAAC5E,CAAF,GAAM6E,CAAC,CAAC7E,CAAR,GAAY4E,CAAC,CAAC5E,CAAd,GAAkB6E,CAAC,CAAC7E,CAApC;EACA,YAAI0L,OAAO,GAAG,KAAKrC,KAAnB,EAA0B,OAAO,KAAP;EAC1B,cAAMsC,OAAO,GAAG/G,CAAC,CAAC3E,CAAF,GAAM4E,CAAC,CAAC5E,CAAR,GAAY2E,CAAC,CAAC3E,CAAd,GAAkB4E,CAAC,CAAC5E,CAApC;EACA,YAAI0L,OAAO,GAAG,KAAKnC,KAAnB,EAA0B,OAAO,KAAP;EAC1B,cAAMoC,OAAO,GAAGhH,CAAC,CAAC3E,CAAF,GAAM4E,CAAC,CAAC5E,CAAR,GAAY2E,CAAC,CAAC3E,CAAd,GAAkB4E,CAAC,CAAC5E,CAApC;EACA,YAAI2L,OAAO,GAAG,KAAKrC,KAAnB,EAA0B,OAAO,KAAP;EAC1B,eAAO,IAAP;EACD,OAdD,MAcO,IAAI,OAAOtI,SAAS,CAAC,CAAD,CAAhB,KAAwB,QAAxB,IAAoC,OAAOA,SAAS,CAAC,CAAD,CAAhB,KAAwB,QAAhE,EAA0E;EAC/E,cAAMjB,CAAC,GAAGiB,SAAS,CAAC,CAAD,CAAnB;EAAA,cAAwBhB,CAAC,GAAGgB,SAAS,CAAC,CAAD,CAArC;EACA,YAAI,KAAK6J,MAAL,EAAJ,EAAmB,OAAO,KAAP;EACnB,eAAO,EAAE9K,CAAC,GAAG,KAAKsJ,KAAT,IAAkBtJ,CAAC,GAAG,KAAKqJ,KAA3B,IAAoCpJ,CAAC,GAAG,KAAKuJ,KAA7C,IAAsDvJ,CAAC,GAAG,KAAKsJ,KAAjE,CAAP;EACD;EACF;EACF;;EACD2B,EAAAA,OAAO,GAAG;EACR,WAAO,KAAK3B,KAAZ;EACD;;EACDsC,EAAAA,WAAW,GAAG;EACZ,QAAI,KAAKf,MAAL,EAAJ,EACE,OAAO,CAAP;EAEF,UAAMgB,CAAC,GAAG,KAAKnB,QAAL,EAAV;EACA,UAAMoB,CAAC,GAAG,KAAKnB,SAAL,EAAV;EACA,WAAOtN,IAAI,CAAC2G,IAAL,CAAU6H,CAAC,GAAGA,CAAJ,GAAQC,CAAC,GAAGA,CAAtB,CAAP;EACD;;EACDd,EAAAA,OAAO,GAAG;EACR,WAAO,KAAK5B,KAAZ;EACD;;EACD2C,EAAAA,eAAe,GAAG;EAChB,QAAI/K,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,UAAID,SAAS,CAAC,CAAD,CAAT,YAAwBc,UAA5B,EAAwC;EACtC,cAAM2H,CAAC,GAAGzI,SAAS,CAAC,CAAD,CAAnB;EACA,aAAK+K,eAAL,CAAqBtC,CAAC,CAAC1J,CAAvB,EAA0B0J,CAAC,CAACzJ,CAA5B;EACD,OAHD,MAGO,IAAIgB,SAAS,CAAC,CAAD,CAAT,YAAwBmI,QAA5B,EAAsC;EAC3C,cAAMvG,KAAK,GAAG5B,SAAS,CAAC,CAAD,CAAvB;EACA,YAAI4B,KAAK,CAACiI,MAAN,EAAJ,EACE,OAAO,IAAP;;EAEF,YAAI,KAAKA,MAAL,EAAJ,EAAmB;EACjB,eAAKzB,KAAL,GAAaxG,KAAK,CAACoI,OAAN,EAAb;EACA,eAAK3B,KAAL,GAAazG,KAAK,CAACkI,OAAN,EAAb;EACA,eAAKxB,KAAL,GAAa1G,KAAK,CAACqI,OAAN,EAAb;EACA,eAAK1B,KAAL,GAAa3G,KAAK,CAACmI,OAAN,EAAb;EACD,SALD,MAKO;EACL,cAAInI,KAAK,CAACwG,KAAN,GAAc,KAAKA,KAAvB,EACE,KAAKA,KAAL,GAAaxG,KAAK,CAACwG,KAAnB;EAEF,cAAIxG,KAAK,CAACyG,KAAN,GAAc,KAAKA,KAAvB,EACE,KAAKA,KAAL,GAAazG,KAAK,CAACyG,KAAnB;EAEF,cAAIzG,KAAK,CAAC0G,KAAN,GAAc,KAAKA,KAAvB,EACE,KAAKA,KAAL,GAAa1G,KAAK,CAAC0G,KAAnB;EAEF,cAAI1G,KAAK,CAAC2G,KAAN,GAAc,KAAKA,KAAvB,EACE,KAAKA,KAAL,GAAa3G,KAAK,CAAC2G,KAAnB;EAEH;EACF;EACF,KA7BD,MA6BO,IAAIvI,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMlB,CAAC,GAAGiB,SAAS,CAAC,CAAD,CAAnB;EAAA,YAAwBhB,CAAC,GAAGgB,SAAS,CAAC,CAAD,CAArC;;EACA,UAAI,KAAK6J,MAAL,EAAJ,EAAmB;EACjB,aAAKzB,KAAL,GAAarJ,CAAb;EACA,aAAKsJ,KAAL,GAAatJ,CAAb;EACA,aAAKuJ,KAAL,GAAatJ,CAAb;EACA,aAAKuJ,KAAL,GAAavJ,CAAb;EACD,OALD,MAKO;EACL,YAAID,CAAC,GAAG,KAAKqJ,KAAb,EACE,KAAKA,KAAL,GAAarJ,CAAb;EAEF,YAAIA,CAAC,GAAG,KAAKsJ,KAAb,EACE,KAAKA,KAAL,GAAatJ,CAAb;EAEF,YAAIC,CAAC,GAAG,KAAKsJ,KAAb,EACE,KAAKA,KAAL,GAAatJ,CAAb;EAEF,YAAIA,CAAC,GAAG,KAAKuJ,KAAb,EACE,KAAKA,KAAL,GAAavJ,CAAb;EAEH;EACF;EACF;;EACDgM,EAAAA,SAAS,GAAG;EACV,QAAI,KAAKnB,MAAL,EAAJ,EAAmB,OAAO,GAAP;EACnB,UAAMgB,CAAC,GAAG,KAAKnB,QAAL,EAAV;EACA,UAAMoB,CAAC,GAAG,KAAKnB,SAAL,EAAV;EACA,QAAIkB,CAAC,GAAGC,CAAR,EAAW,OAAOD,CAAP;EACX,WAAOC,CAAP;EACD;;EACDpB,EAAAA,QAAQ,GAAG;EACT,QAAI,KAAKG,MAAL,EAAJ,EACE,OAAO,CAAP;EAEF,WAAO,KAAKxB,KAAL,GAAa,KAAKD,KAAzB;EACD;;EACDhG,EAAAA,SAAS,CAACC,CAAD,EAAI;EACX,UAAMqG,GAAG,GAAGrG,CAAZ;;EACA,QAAI,KAAKwH,MAAL,EAAJ,EAAmB;EACjB,UAAInB,GAAG,CAACmB,MAAJ,EAAJ,EAAkB,OAAO,CAAP;EAClB,aAAO,CAAC,CAAR;EACD,KAHD,MAGO;EACL,UAAInB,GAAG,CAACmB,MAAJ,EAAJ,EAAkB,OAAO,CAAP;EACnB;;EACD,QAAI,KAAKzB,KAAL,GAAaM,GAAG,CAACN,KAArB,EAA4B,OAAO,CAAC,CAAR;EAC5B,QAAI,KAAKA,KAAL,GAAaM,GAAG,CAACN,KAArB,EAA4B,OAAO,CAAP;EAC5B,QAAI,KAAKE,KAAL,GAAaI,GAAG,CAACJ,KAArB,EAA4B,OAAO,CAAC,CAAR;EAC5B,QAAI,KAAKA,KAAL,GAAaI,GAAG,CAACJ,KAArB,EAA4B,OAAO,CAAP;EAC5B,QAAI,KAAKD,KAAL,GAAaK,GAAG,CAACL,KAArB,EAA4B,OAAO,CAAC,CAAR;EAC5B,QAAI,KAAKA,KAAL,GAAaK,GAAG,CAACL,KAArB,EAA4B,OAAO,CAAP;EAC5B,QAAI,KAAKE,KAAL,GAAaG,GAAG,CAACH,KAArB,EAA4B,OAAO,CAAC,CAAR;EAC5B,QAAI,KAAKA,KAAL,GAAaG,GAAG,CAACH,KAArB,EAA4B,OAAO,CAAP;EAC5B,WAAO,CAAP;EACD;;EACD0C,EAAAA,SAAS,CAACC,MAAD,EAASC,MAAT,EAAiB;EACxB,QAAI,KAAKtB,MAAL,EAAJ,EACE,OAAO,IAAP;EAEF,SAAKrB,IAAL,CAAU,KAAKwB,OAAL,KAAiBkB,MAA3B,EAAmC,KAAKpB,OAAL,KAAiBoB,MAApD,EAA4D,KAAKjB,OAAL,KAAiBkB,MAA7E,EAAqF,KAAKpB,OAAL,KAAiBoB,MAAtG;EACD;;EACDxI,EAAAA,IAAI,GAAG;EACL,WAAO,IAAIwF,QAAJ,CAAa,IAAb,CAAP;EACD;;EACDrL,EAAAA,QAAQ,GAAG;EACT,WAAO,SAAS,KAAKsL,KAAd,GAAsB,KAAtB,GAA8B,KAAKC,KAAnC,GAA2C,IAA3C,GAAkD,KAAKC,KAAvD,GAA+D,KAA/D,GAAuE,KAAKC,KAA5E,GAAoF,GAA3F;EACD;;EACD6C,EAAAA,SAAS,GAAG;EACV,SAAKhD,KAAL,GAAa,CAAb;EACA,SAAKC,KAAL,GAAa,CAAC,CAAd;EACA,SAAKC,KAAL,GAAa,CAAb;EACA,SAAKC,KAAL,GAAa,CAAC,CAAd;EACD;;EACD8C,EAAAA,QAAQ,CAACzJ,KAAD,EAAQ;EACd,QAAI,KAAKiI,MAAL,MAAiBjI,KAAK,CAACiI,MAAN,EAArB,EACE,OAAO,IAAP;EAEF,WAAOjI,KAAK,CAACwG,KAAN,GAAc,KAAKC,KAAnB,IAA4BzG,KAAK,CAACyG,KAAN,GAAc,KAAKD,KAA/C,IAAwDxG,KAAK,CAAC0G,KAAN,GAAc,KAAKC,KAA3E,IAAoF3G,KAAK,CAAC2G,KAAN,GAAc,KAAKD,KAA9G;EACD;;EACDqB,EAAAA,SAAS,GAAG;EACV,QAAI,KAAKE,MAAL,EAAJ,EACE,OAAO,CAAP;EAEF,WAAO,KAAKtB,KAAL,GAAa,KAAKD,KAAzB;EACD;;EACDgD,EAAAA,SAAS,GAAG;EACV,QAAI,KAAKzB,MAAL,EAAJ,EAAmB,OAAO,GAAP;EACnB,UAAMgB,CAAC,GAAG,KAAKnB,QAAL,EAAV;EACA,UAAMoB,CAAC,GAAG,KAAKnB,SAAL,EAAV;EACA,QAAIkB,CAAC,GAAGC,CAAR,EAAW,OAAOD,CAAP;EACX,WAAOC,CAAP;EACD;;EACDS,EAAAA,QAAQ,GAAG;EACT,QAAIvL,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMkD,QAAQ,GAAGnD,SAAS,CAAC,CAAD,CAA1B;EACA,WAAKuL,QAAL,CAAcpI,QAAd,EAAwBA,QAAxB;EACD,KAHD,MAGO,IAAInD,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMuL,MAAM,GAAGxL,SAAS,CAAC,CAAD,CAAxB;EAAA,YAA6ByL,MAAM,GAAGzL,SAAS,CAAC,CAAD,CAA/C;EACA,UAAI,KAAK6J,MAAL,EAAJ,EAAmB,OAAO,IAAP;EACnB,WAAKzB,KAAL,IAAcoD,MAAd;EACA,WAAKnD,KAAL,IAAcmD,MAAd;EACA,WAAKlD,KAAL,IAAcmD,MAAd;EACA,WAAKlD,KAAL,IAAckD,MAAd;EACA,UAAI,KAAKrD,KAAL,GAAa,KAAKC,KAAlB,IAA2B,KAAKC,KAAL,GAAa,KAAKC,KAAjD,EAAwD,KAAK6C,SAAL;EACzD;EACF;;EACDM,EAAAA,QAAQ,GAAG;EACT,QAAI1L,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,UAAID,SAAS,CAAC,CAAD,CAAT,YAAwBmI,QAA5B,EAAsC;EACpC,cAAMvG,KAAK,GAAG5B,SAAS,CAAC,CAAD,CAAvB;EACA,eAAO,KAAKuK,MAAL,CAAY3I,KAAZ,CAAP;EACD,OAHD,MAGO,IAAI5B,SAAS,CAAC,CAAD,CAAT,YAAwBc,UAA5B,EAAwC;EAC7C,cAAM2H,CAAC,GAAGzI,SAAS,CAAC,CAAD,CAAnB;EACA,eAAO,KAAKuK,MAAL,CAAY9B,CAAZ,CAAP;EACD;EACF,KARD,MAQO,IAAIzI,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMlB,CAAC,GAAGiB,SAAS,CAAC,CAAD,CAAnB;EAAA,YAAwBhB,CAAC,GAAGgB,SAAS,CAAC,CAAD,CAArC;EACA,aAAO,KAAKuK,MAAL,CAAYxL,CAAZ,EAAeC,CAAf,CAAP;EACD;EACF;;EACD2M,EAAAA,MAAM,GAAG;EACP,QAAI,KAAK9B,MAAL,EAAJ,EAAmB,OAAO,IAAP;EACnB,WAAO,IAAI/I,UAAJ,CAAe,CAAC,KAAKkJ,OAAL,KAAiB,KAAKF,OAAL,EAAlB,IAAoC,GAAnD,EAAwD,CAAC,KAAKG,OAAL,KAAiB,KAAKF,OAAL,EAAlB,IAAoC,GAA5F,CAAP;EACD;;EACDvB,EAAAA,IAAI,GAAG;EACL,QAAIxI,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,WAAKmL,SAAL;EACD,KAFD,MAEO,IAAIpL,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,UAAID,SAAS,CAAC,CAAD,CAAT,YAAwBc,UAA5B,EAAwC;EACtC,cAAM2H,CAAC,GAAGzI,SAAS,CAAC,CAAD,CAAnB;EACA,aAAKwI,IAAL,CAAUC,CAAC,CAAC1J,CAAZ,EAAe0J,CAAC,CAAC1J,CAAjB,EAAoB0J,CAAC,CAACzJ,CAAtB,EAAyByJ,CAAC,CAACzJ,CAA3B;EACD,OAHD,MAGO,IAAIgB,SAAS,CAAC,CAAD,CAAT,YAAwBmI,QAA5B,EAAsC;EAC3C,cAAMO,GAAG,GAAG1I,SAAS,CAAC,CAAD,CAArB;EACA,aAAKoI,KAAL,GAAaM,GAAG,CAACN,KAAjB;EACA,aAAKC,KAAL,GAAaK,GAAG,CAACL,KAAjB;EACA,aAAKC,KAAL,GAAaI,GAAG,CAACJ,KAAjB;EACA,aAAKC,KAAL,GAAaG,GAAG,CAACH,KAAjB;EACD;EACF,KAXM,MAWA,IAAIvI,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAM0I,EAAE,GAAG3I,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyB4I,EAAE,GAAG5I,SAAS,CAAC,CAAD,CAAvC;EACA,WAAKwI,IAAL,CAAUG,EAAE,CAAC5J,CAAb,EAAgB6J,EAAE,CAAC7J,CAAnB,EAAsB4J,EAAE,CAAC3J,CAAzB,EAA4B4J,EAAE,CAAC5J,CAA/B;EACD,KAHM,MAGA,IAAIgB,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAM/D,EAAE,GAAG8D,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyB7D,EAAE,GAAG6D,SAAS,CAAC,CAAD,CAAvC;EAAA,YAA4C6I,EAAE,GAAG7I,SAAS,CAAC,CAAD,CAA1D;EAAA,YAA+D8I,EAAE,GAAG9I,SAAS,CAAC,CAAD,CAA7E;;EACA,UAAI9D,EAAE,GAAGC,EAAT,EAAa;EACX,aAAKiM,KAAL,GAAalM,EAAb;EACA,aAAKmM,KAAL,GAAalM,EAAb;EACD,OAHD,MAGO;EACL,aAAKiM,KAAL,GAAajM,EAAb;EACA,aAAKkM,KAAL,GAAanM,EAAb;EACD;;EACD,UAAI2M,EAAE,GAAGC,EAAT,EAAa;EACX,aAAKR,KAAL,GAAaO,EAAb;EACA,aAAKN,KAAL,GAAaO,EAAb;EACD,OAHD,MAGO;EACL,aAAKR,KAAL,GAAaQ,EAAb;EACA,aAAKP,KAAL,GAAaM,EAAb;EACD;EACF;EACF;;EACDkB,EAAAA,OAAO,GAAG;EACR,WAAO,KAAKxB,KAAZ;EACD;;EACDpF,EAAAA,QAAQ,CAACuF,GAAD,EAAM;EACZ,QAAI,KAAKK,UAAL,CAAgBL,GAAhB,CAAJ,EAA0B,OAAO,CAAP;EAC1B,QAAI7F,EAAE,GAAG,GAAT;EACA,QAAI,KAAKwF,KAAL,GAAaK,GAAG,CAACN,KAArB,EAA4BvF,EAAE,GAAG6F,GAAG,CAACN,KAAJ,GAAY,KAAKC,KAAtB,CAA5B,KAA8D,IAAI,KAAKD,KAAL,GAAaM,GAAG,CAACL,KAArB,EAA4BxF,EAAE,GAAG,KAAKuF,KAAL,GAAaM,GAAG,CAACL,KAAtB;EAC1F,QAAIvF,EAAE,GAAG,GAAT;EACA,QAAI,KAAKyF,KAAL,GAAaG,GAAG,CAACJ,KAArB,EAA4BxF,EAAE,GAAG4F,GAAG,CAACJ,KAAJ,GAAY,KAAKC,KAAtB,CAA5B,KAA8D,IAAI,KAAKD,KAAL,GAAaI,GAAG,CAACH,KAArB,EAA4BzF,EAAE,GAAG,KAAKwF,KAAL,GAAaI,GAAG,CAACH,KAAtB;EAC1F,QAAI1F,EAAE,KAAK,GAAX,EAAgB,OAAOC,EAAP;EAChB,QAAIA,EAAE,KAAK,GAAX,EAAgB,OAAOD,EAAP;EAChB,WAAOxG,IAAI,CAAC2G,IAAL,CAAUH,EAAE,GAAGA,EAAL,GAAUC,EAAE,GAAGA,EAAzB,CAAP;EACD;;EACD3B,EAAAA,QAAQ,GAAG;EACT,QAAI7D,MAAM,GAAG,EAAb;EACAA,IAAAA,MAAM,GAAG,KAAKA,MAAL,GAAcwD,UAAU,CAACK,QAAX,CAAoB,KAAKiH,KAAzB,CAAvB;EACA9K,IAAAA,MAAM,GAAG,KAAKA,MAAL,GAAcwD,UAAU,CAACK,QAAX,CAAoB,KAAKkH,KAAzB,CAAvB;EACA/K,IAAAA,MAAM,GAAG,KAAKA,MAAL,GAAcwD,UAAU,CAACK,QAAX,CAAoB,KAAKmH,KAAzB,CAAvB;EACAhL,IAAAA,MAAM,GAAG,KAAKA,MAAL,GAAcwD,UAAU,CAACK,QAAX,CAAoB,KAAKoH,KAAzB,CAAvB;EACA,WAAOjL,MAAP;EACD;;EACD,MAAI+F,WAAJ,GAAkB;EAChB,WAAO,CAAC7D,UAAD,EAAaG,YAAb,CAAP;EACD;;EAnW2B;;ECHf,MAAMiM,YAAN,CAAmB;EAChCnP,EAAAA,WAAW,CAACoP,GAAD,EAAM;EACf,SAAKA,GAAL,GAAWA,GAAX;EACD;;EACDC,EAAAA,MAAM,CAACrJ,CAAD,EAAI;EACR,SAAKoJ,GAAL,IAAYpJ,CAAZ;EACD;;EACDsJ,EAAAA,SAAS,CAAC3O,CAAD,EAAI4D,CAAJ,EAAO;EACd,SAAK6K,GAAL,GAAW,KAAKA,GAAL,CAASG,MAAT,CAAgB,CAAhB,EAAmB5O,CAAnB,IAAwB4D,CAAxB,GAA4B,KAAK6K,GAAL,CAASG,MAAT,CAAgB5O,CAAC,GAAG,CAApB,CAAvC;EACD;;EACDN,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAK+O,GAAZ;EACD;;EAZ+B;;ECAnB,MAAMI,OAAN,CAAc;EAC3BxP,EAAAA,WAAW,CAAC8B,KAAD,EAAQ;EACjB,SAAKA,KAAL,GAAaA,KAAb;EACD;;EAED2N,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAK3N,KAAZ;EACD;;EAED6D,EAAAA,SAAS,CAACC,CAAD,EAAI;EACX,QAAI,KAAK9D,KAAL,GAAa8D,CAAjB,EACE,OAAO,CAAC,CAAR;EACF,QAAI,KAAK9D,KAAL,GAAa8D,CAAjB,EACE,OAAO,CAAP;EACF,WAAO,CAAP;EACD;;EAED,SAAOqB,OAAP,CAAe3E,CAAf,EAAkBC,CAAlB,EAAqB;EACnB,QAAID,CAAC,GAAGC,CAAR,EACE,OAAO,CAAC,CAAR;EACF,QAAID,CAAC,GAAGC,CAAR,EACE,OAAO,CAAP;EACF,WAAO,CAAP;EACD;;EAED,SAAOmN,KAAP,CAAazO,CAAb,EAAgB;EACd,WAAOC,MAAM,CAACF,KAAP,CAAaC,CAAb,CAAP;EACD;;EAED,SAAO0O,OAAP,CAAe7N,KAAf,EAAsB;EACpB,WAAO,IAAI0N,OAAJ,CAAY1N,KAAZ,CAAP;EACD;;EA/B0B;;ECAd,MAAM8N,SAAN,CAAgB;EAC7B,SAAOC,YAAP,CAAoBtL,CAApB,EAAuB;EACrB,WAASA,CAAC,IAAI,EAAL,IAAWA,CAAC,IAAI,CAAjB,IAAuBA,CAAC,KAAK,GAArC;EACD;;EAED,SAAOuL,WAAP,CAAmBvL,CAAnB,EAAsB;EACpB,WAAOA,CAAC,CAACuL,WAAF,EAAP;EACD;;EAP4B;;ECOhB,MAAMC,EAAN,CAAS;EACtB/P,EAAAA,WAAW,GAAG;EACZ+P,IAAAA,EAAE,CAAC1M,YAAH,CAAgBC,KAAhB,CAAsB,IAAtB,EAA4BC,SAA5B;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK2M,GAAL,GAAW,GAAX;EACA,SAAKC,GAAL,GAAW,GAAX;;EACA,QAAI1M,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,WAAKuI,IAAL,CAAU,GAAV;EACD,KAFD,MAEO,IAAIxI,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,UAAI,OAAOD,SAAS,CAAC,CAAD,CAAhB,KAAwB,QAA5B,EAAsC;EACpC,cAAMjB,CAAC,GAAGiB,SAAS,CAAC,CAAD,CAAnB;EACA,aAAKwI,IAAL,CAAUzJ,CAAV;EACD,OAHD,MAGO,IAAIiB,SAAS,CAAC,CAAD,CAAT,YAAwBwM,EAA5B,EAAgC;EACrC,cAAMG,EAAE,GAAG3M,SAAS,CAAC,CAAD,CAApB;EACA,aAAKwI,IAAL,CAAUmE,EAAV;EACD,OAHM,MAGA,IAAI,OAAO3M,SAAS,CAAC,CAAD,CAAhB,KAAwB,QAA5B,EAAsC;EAC3C,cAAM6L,GAAG,GAAG7L,SAAS,CAAC,CAAD,CAArB;EACAwM,QAAAA,EAAE,CAAC1M,YAAH,CAAgBI,IAAhB,CAAqB,IAArB,EAA2BsM,EAAE,CAACI,KAAH,CAASf,GAAT,CAA3B;EACD;EACF,KAXM,MAWA,IAAI7L,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAM4M,EAAE,GAAG7M,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyB8M,EAAE,GAAG9M,SAAS,CAAC,CAAD,CAAvC;EACA,WAAKwI,IAAL,CAAUqE,EAAV,EAAcC,EAAd;EACD;EACF;;EACD,SAAOC,WAAP,GAAqB;EACnB,QAAI,OAAO/M,SAAS,CAAC,CAAD,CAAhB,KAAwB,QAAxB,IAAqC,OAAOA,SAAS,CAAC,CAAD,CAAhB,KAAwB,QAAxB,IAAqC,OAAOA,SAAS,CAAC,CAAD,CAAhB,KAAwB,QAAxB,IAAoC,OAAOA,SAAS,CAAC,CAAD,CAAhB,KAAwB,QAA1I,EAAsJ;EACpJ,YAAM9D,EAAE,GAAG8D,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyB6I,EAAE,GAAG7I,SAAS,CAAC,CAAD,CAAvC;EAAA,YAA4C7D,EAAE,GAAG6D,SAAS,CAAC,CAAD,CAA1D;EAAA,YAA+D8I,EAAE,GAAG9I,SAAS,CAAC,CAAD,CAA7E;EACA,aAAOwM,EAAE,CAACO,WAAH,CAAeP,EAAE,CAACJ,OAAH,CAAWlQ,EAAX,CAAf,EAA+BsQ,EAAE,CAACJ,OAAH,CAAWvD,EAAX,CAA/B,EAA+C2D,EAAE,CAACJ,OAAH,CAAWjQ,EAAX,CAA/C,EAA+DqQ,EAAE,CAACJ,OAAH,CAAWtD,EAAX,CAA/D,CAAP;EACD,KAHD,MAGO,IAAI9I,SAAS,CAAC,CAAD,CAAT,YAAwBwM,EAAxB,IAA+BxM,SAAS,CAAC,CAAD,CAAT,YAAwBwM,EAAxB,IAA+BxM,SAAS,CAAC,CAAD,CAAT,YAAwBwM,EAAxB,IAA8BxM,SAAS,CAAC,CAAD,CAAT,YAAwBwM,EAAxH,EAA8H;EACnI,YAAMtQ,EAAE,GAAG8D,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyB6I,EAAE,GAAG7I,SAAS,CAAC,CAAD,CAAvC;EAAA,YAA4C7D,EAAE,GAAG6D,SAAS,CAAC,CAAD,CAA1D;EAAA,YAA+D8I,EAAE,GAAG9I,SAAS,CAAC,CAAD,CAA7E;EACA,YAAMgN,GAAG,GAAG9Q,EAAE,CAAC+Q,QAAH,CAAYnE,EAAZ,EAAgBoE,YAAhB,CAA6BrE,EAAE,CAACoE,QAAH,CAAY9Q,EAAZ,CAA7B,CAAZ;EACA,aAAO6Q,GAAP;EACD;EACF;;EACD,SAAOG,GAAP,CAAWpO,CAAX,EAAc;EACZ,WAAOyN,EAAE,CAACJ,OAAH,CAAWrN,CAAX,EAAcqO,YAAd,CAA2BrO,CAA3B,CAAP;EACD;;EACD,SAAOqN,OAAP,GAAiB;EACf,QAAI,OAAOpM,SAAS,CAAC,CAAD,CAAhB,KAAwB,QAA5B,EAAsC;EACpC,YAAM6L,GAAG,GAAG7L,SAAS,CAAC,CAAD,CAArB;EACA,aAAOwM,EAAE,CAACI,KAAH,CAASf,GAAT,CAAP;EACD,KAHD,MAGO,IAAI,OAAO7L,SAAS,CAAC,CAAD,CAAhB,KAAwB,QAA5B,EAAsC;EAC3C,YAAMjB,CAAC,GAAGiB,SAAS,CAAC,CAAD,CAAnB;EACA,aAAO,IAAIwM,EAAJ,CAAOzN,CAAP,CAAP;EACD;EACF;;EACD,SAAOiE,IAAP,CAAYjE,CAAZ,EAAe;EACb,WAAOyN,EAAE,CAACJ,OAAH,CAAWrN,CAAX,EAAciE,IAAd,EAAP;EACD;;EACD,SAAO4J,KAAP,CAAaf,GAAb,EAAkB;EAChB,QAAIzO,CAAC,GAAG,CAAR;EACA,UAAMiQ,MAAM,GAAGxB,GAAG,CAAC5L,MAAnB;;EACA,WAAOoM,SAAS,CAACC,YAAV,CAAuBT,GAAG,CAACyB,MAAJ,CAAWlQ,CAAX,CAAvB,CAAP,EAA8CA,CAAC;;EAC/C,QAAImQ,UAAU,GAAG,KAAjB;;EACA,QAAInQ,CAAC,GAAGiQ,MAAR,EAAgB;EACd,YAAMG,MAAM,GAAG3B,GAAG,CAACyB,MAAJ,CAAWlQ,CAAX,CAAf;;EACA,UAAIoQ,MAAM,KAAK,GAAX,IAAkBA,MAAM,KAAK,GAAjC,EAAsC;EACpCpQ,QAAAA,CAAC;EACD,YAAIoQ,MAAM,KAAK,GAAf,EAAoBD,UAAU,GAAG,IAAb;EACrB;EACF;;EACD,UAAME,GAAG,GAAG,IAAIjB,EAAJ,EAAZ;EACA,QAAIkB,SAAS,GAAG,CAAhB;EACA,QAAIC,YAAY,GAAG,CAAnB;EACA,QAAIvO,GAAG,GAAG,CAAV;EACA,QAAIwO,cAAc,GAAG,KAArB;;EACA,WAAO,IAAP,EAAa;EACX,UAAIxQ,CAAC,IAAIiQ,MAAT,EAAiB;EACjB,YAAMQ,EAAE,GAAGhC,GAAG,CAACyB,MAAJ,CAAWlQ,CAAX,CAAX;EACAA,MAAAA,CAAC;;EACD,UAAIiP,SAAS,CAACyB,OAAV,CAAkBD,EAAlB,CAAJ,EAA2B;EACzB,cAAME,CAAC,GAAGF,EAAE,GAAG,GAAf;EACAJ,QAAAA,GAAG,CAACL,YAAJ,CAAiBZ,EAAE,CAACwB,GAApB;EACAP,QAAAA,GAAG,CAACQ,OAAJ,CAAYF,CAAZ;EACAL,QAAAA,SAAS;EACT;EACD;;EACD,UAAIG,EAAE,KAAK,GAAX,EAAgB;EACdF,QAAAA,YAAY,GAAGD,SAAf;EACAE,QAAAA,cAAc,GAAG,IAAjB;EACA;EACD;;EACD,UAAIC,EAAE,KAAK,GAAP,IAAcA,EAAE,KAAK,GAAzB,EAA8B;EAC5B,cAAMK,MAAM,GAAGrC,GAAG,CAACsC,SAAJ,CAAc/Q,CAAd,CAAf;;EACA,YAAI;EACFgC,UAAAA,GAAG,GAAG6M,OAAO,CAACmC,QAAR,CAAiBF,MAAjB,CAAN;EACD,SAFD,CAEE,OAAOG,EAAP,EAAW;EACX,cAAIA,EAAE,YAAYC,qBAAlB,EACE,MAAM,IAAIA,qBAAJ,CAA0B,sBAAsBJ,MAAtB,GAA+B,aAA/B,GAA+CrC,GAAzE,CAAN,CADF,KAEK,MAAMwC,EAAN;EACN,SAND,SAMU;;EACV;EACD;;EACD,YAAM,IAAIC,qBAAJ,CAA0B,4BAA4BT,EAA5B,GAAiC,iBAAjC,GAAqDzQ,CAArD,GAAyD,aAAzD,GAAyEyO,GAAnG,CAAN;EACD;;EACD,QAAI0C,IAAI,GAAGd,GAAX;EACA,QAAI,CAACG,cAAL,EAAqBD,YAAY,GAAGD,SAAf;EACrB,UAAMc,YAAY,GAAGd,SAAS,GAAGC,YAAZ,GAA2BvO,GAAhD;;EACA,QAAIoP,YAAY,KAAK,CAArB,EAAwB;EACtBD,MAAAA,IAAI,GAAGd,GAAP;EACD,KAFD,MAEO,IAAIe,YAAY,GAAG,CAAnB,EAAsB;EAC3B,YAAMC,KAAK,GAAGjC,EAAE,CAACwB,GAAH,CAAOnP,GAAP,CAAW2P,YAAX,CAAd;EACAD,MAAAA,IAAI,GAAGd,GAAG,CAACiB,MAAJ,CAAWD,KAAX,CAAP;EACD,KAHM,MAGA,IAAID,YAAY,GAAG,CAAnB,EAAsB;EAC3B,YAAMC,KAAK,GAAGjC,EAAE,CAACwB,GAAH,CAAOnP,GAAP,CAAW,CAAC2P,YAAZ,CAAd;EACAD,MAAAA,IAAI,GAAGd,GAAG,CAACR,QAAJ,CAAawB,KAAb,CAAP;EACD;;EACD,QAAIlB,UAAJ,EACE,OAAOgB,IAAI,CAACI,MAAL,EAAP;EAEF,WAAOJ,IAAP;EACD;;EACD,SAAOK,SAAP,GAAmB;EACjB,WAAO,IAAIpC,EAAJ,CAAOjP,MAAM,CAACC,GAAd,EAAmBD,MAAM,CAACC,GAA1B,CAAP;EACD;;EACD,SAAOmF,IAAP,CAAYgK,EAAZ,EAAgB;EACd,WAAO,IAAIH,EAAJ,CAAOG,EAAP,CAAP;EACD;;EACD,SAAOkC,SAAP,CAAiB9P,CAAjB,EAAoB;EAClB,UAAM+P,IAAI,GAAGzS,IAAI,CAACC,GAAL,CAASyC,CAAT,CAAb;EACA,UAAMgQ,MAAM,GAAG1S,IAAI,CAAC2S,GAAL,CAASF,IAAT,IAAiBzS,IAAI,CAAC2S,GAAL,CAAS,EAAT,CAAhC;EACA,QAAIC,IAAI,GAAG5S,IAAI,CAAC6S,KAAL,CAAW7S,IAAI,CAACuC,KAAL,CAAWmQ,MAAX,CAAX,CAAX;EACA,UAAMI,OAAO,GAAG9S,IAAI,CAACwC,GAAL,CAAS,EAAT,EAAaoQ,IAAb,CAAhB;EACA,QAAIE,OAAO,GAAG,EAAV,IAAgBL,IAApB,EAA0BG,IAAI,IAAI,CAAR;EAC1B,WAAOA,IAAP;EACD;;EACD,SAAOG,YAAP,CAAoBvB,EAApB,EAAwB5H,GAAxB,EAA6B;EAC3B,UAAMoJ,GAAG,GAAG,IAAIzD,YAAJ,EAAZ;;EACA,SAAK,IAAIxO,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6I,GAApB,EAAyB7I,CAAC,EAA1B,EACEiS,GAAG,CAACvD,MAAJ,CAAW+B,EAAX;;EAEF,WAAOwB,GAAG,CAACvS,QAAJ,EAAP;EACD;;EACDwS,EAAAA,EAAE,CAACtQ,CAAD,EAAI;EACJ,WAAO,KAAKyN,GAAL,GAAWzN,CAAC,CAACyN,GAAb,IAAoB,KAAKA,GAAL,KAAazN,CAAC,CAACyN,GAAf,IAAsB,KAAKC,GAAL,IAAY1N,CAAC,CAAC0N,GAA/D;EACD;;EACD6C,EAAAA,wBAAwB,CAACC,kBAAD,EAAqBX,SAArB,EAAgC;EACtD,QAAI7P,CAAC,GAAG,KAAK1C,GAAL,EAAR;EACA,QAAImT,GAAG,GAAGjD,EAAE,CAACqC,SAAH,CAAa7P,CAAC,CAACyN,GAAf,CAAV;EACA,UAAMgC,KAAK,GAAGjC,EAAE,CAACwB,GAAH,CAAOnP,GAAP,CAAW4Q,GAAX,CAAd;EACAzQ,IAAAA,CAAC,GAAGA,CAAC,CAAC0P,MAAF,CAASD,KAAT,CAAJ;;EACA,QAAIzP,CAAC,CAAC0Q,EAAF,CAAKlD,EAAE,CAACwB,GAAR,CAAJ,EAAkB;EAChBhP,MAAAA,CAAC,GAAGA,CAAC,CAAC0P,MAAF,CAASlC,EAAE,CAACwB,GAAZ,CAAJ;EACAyB,MAAAA,GAAG,IAAI,CAAP;EACD,KAHD,MAGO,IAAIzQ,CAAC,CAAC2Q,EAAF,CAAKnD,EAAE,CAACoD,GAAR,CAAJ,EAAkB;EACvB5Q,MAAAA,CAAC,GAAGA,CAAC,CAACiO,QAAF,CAAWT,EAAE,CAACwB,GAAd,CAAJ;EACAyB,MAAAA,GAAG,IAAI,CAAP;EACD;;EACD,UAAMI,eAAe,GAAGJ,GAAG,GAAG,CAA9B;EACA,UAAMJ,GAAG,GAAG,IAAIzD,YAAJ,EAAZ;EACA,UAAM8B,SAAS,GAAGlB,EAAE,CAACsD,gBAAH,GAAsB,CAAxC;;EACA,SAAK,IAAI1S,CAAC,GAAG,CAAb,EAAgBA,CAAC,IAAIsQ,SAArB,EAAgCtQ,CAAC,EAAjC,EAAqC;EACnC,UAAIoS,kBAAkB,IAAIpS,CAAC,KAAKyS,eAAhC,EACER,GAAG,CAACvD,MAAJ,CAAW,GAAX;EAEF,YAAMiE,KAAK,GAAG1T,IAAI,CAAC6S,KAAL,CAAWlQ,CAAC,CAACyN,GAAb,CAAd;;EAEA,UAAIsD,KAAK,GAAG,CAAZ,EACE;EAEF,UAAIC,UAAU,GAAG,KAAjB;EACA,UAAIC,SAAS,GAAG,CAAhB;;EACA,UAAIF,KAAK,GAAG,CAAZ,EAAe;EACbC,QAAAA,UAAU,GAAG,IAAb;EACAC,QAAAA,SAAS,GAAG,GAAZ;EACD,OAHD,MAGO;EACLA,QAAAA,SAAS,GAAG,MAAMF,KAAlB;EACD;;EACDV,MAAAA,GAAG,CAACvD,MAAJ,CAAWmE,SAAX;EACAjR,MAAAA,CAAC,GAAGA,CAAC,CAACkR,QAAF,CAAW1D,EAAE,CAACJ,OAAH,CAAW2D,KAAX,CAAX,EAA8B9C,QAA9B,CAAuCT,EAAE,CAACwB,GAA1C,CAAJ;EACA,UAAIgC,UAAJ,EAAgBhR,CAAC,CAACiP,OAAF,CAAUzB,EAAE,CAACwB,GAAb;EAChB,UAAImC,wBAAwB,GAAG,IAA/B;EACA,YAAMC,MAAM,GAAG5D,EAAE,CAACqC,SAAH,CAAa7P,CAAC,CAACyN,GAAf,CAAf;EACA,UAAI2D,MAAM,GAAG,CAAT,IAAc/T,IAAI,CAACC,GAAL,CAAS8T,MAAT,KAAoB1C,SAAS,GAAGtQ,CAAlD,EAAqD+S,wBAAwB,GAAG,KAA3B;EACrD,UAAI,CAACA,wBAAL,EAA+B;EAChC;;EACDtB,IAAAA,SAAS,CAAC,CAAD,CAAT,GAAeY,GAAf;EACA,WAAOJ,GAAG,CAACvS,QAAJ,EAAP;EACD;;EACDqQ,EAAAA,GAAG,GAAG;EACJ,WAAO,KAAKF,QAAL,CAAc,IAAd,CAAP;EACD;;EACDoD,EAAAA,WAAW,GAAG;EACZ,WAAO,KAAK5D,GAAL,GAAW,KAAKC,GAAvB;EACD;;EACDwD,EAAAA,QAAQ,GAAG;EACT,QAAIlQ,SAAS,CAAC,CAAD,CAAT,YAAwBwM,EAA5B,EAAgC;EAC9B,YAAMxN,CAAC,GAAGgB,SAAS,CAAC,CAAD,CAAnB;EACA,aAAO,KAAKwE,GAAL,CAASxF,CAAC,CAAC2P,MAAF,EAAT,CAAP;EACD,KAHD,MAGO,IAAI,OAAO3O,SAAS,CAAC,CAAD,CAAhB,KAAwB,QAA5B,EAAsC;EAC3C,YAAMhB,CAAC,GAAGgB,SAAS,CAAC,CAAD,CAAnB;EACA,aAAO,KAAKwE,GAAL,CAAS,CAACxF,CAAV,CAAP;EACD;EACF;;EACDuB,EAAAA,MAAM,GAAG;EACP,QAAIP,SAAS,CAACC,MAAV,KAAqB,CAArB,IAA0BD,SAAS,CAAC,CAAD,CAAT,YAAwBwM,EAAtD,EAA0D;EACxD,YAAMxN,CAAC,GAAGgB,SAAS,CAAC,CAAD,CAAnB;EACA,aAAO,KAAKyM,GAAL,KAAazN,CAAC,CAACyN,GAAf,IAAsB,KAAKC,GAAL,KAAa1N,CAAC,CAAC0N,GAA5C;EACD;EACF;;EACD4D,EAAAA,MAAM,GAAG;EACP,WAAO,KAAK7D,GAAL,KAAa,GAAb,IAAoB,KAAKC,GAAL,KAAa,GAAxC;EACD;;EACDQ,EAAAA,YAAY,GAAG;EACb,QAAIlN,SAAS,CAAC,CAAD,CAAT,YAAwBwM,EAA5B,EAAgC;EAC9B,YAAMxN,CAAC,GAAGgB,SAAS,CAAC,CAAD,CAAnB;EACA,UAAI,KAAKvC,KAAL,EAAJ,EAAkB,OAAO,IAAP;EAClB,aAAO,KAAKwQ,OAAL,CAAa,CAACjP,CAAC,CAACyN,GAAhB,EAAqB,CAACzN,CAAC,CAAC0N,GAAxB,CAAP;EACD,KAJD,MAIO,IAAI,OAAO1M,SAAS,CAAC,CAAD,CAAhB,KAAwB,QAA5B,EAAsC;EAC3C,YAAMhB,CAAC,GAAGgB,SAAS,CAAC,CAAD,CAAnB;EACA,UAAI,KAAKvC,KAAL,EAAJ,EAAkB,OAAO,IAAP;EAClB,aAAO,KAAKwQ,OAAL,CAAa,CAACjP,CAAd,EAAiB,GAAjB,CAAP;EACD;EACF;;EACDuR,EAAAA,sBAAsB,GAAG;EACvB,QAAI,KAAKD,MAAL,EAAJ,EAAmB,OAAO,KAAP;EACnB,QAAI,KAAK7S,KAAL,EAAJ,EAAkB,OAAO,MAAP;EAClB,WAAO,IAAP;EACD;;EACD2L,EAAAA,GAAG,CAACrK,CAAD,EAAI;EACL,QAAI,KAAKuQ,EAAL,CAAQvQ,CAAR,CAAJ,EACE,OAAO,IAAP,CADF,KAGE,OAAOA,CAAP;EAEH;;EACDyR,EAAAA,UAAU,GAAG;EACX,QAAIxQ,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,UAAID,SAAS,CAAC,CAAD,CAAT,YAAwBwM,EAA5B,EAAgC;EAC9B,cAAMxN,CAAC,GAAGgB,SAAS,CAAC,CAAD,CAAnB;EACA,eAAO,KAAKwQ,UAAL,CAAgBxR,CAAC,CAACyN,GAAlB,EAAuBzN,CAAC,CAAC0N,GAAzB,CAAP;EACD,OAHD,MAGO,IAAI,OAAO1M,SAAS,CAAC,CAAD,CAAhB,KAAwB,QAA5B,EAAsC;EAC3C,cAAMhB,CAAC,GAAGgB,SAAS,CAAC,CAAD,CAAnB;EACA,eAAO,KAAKwQ,UAAL,CAAgBxR,CAAhB,EAAmB,GAAnB,CAAP;EACD;EACF,KARD,MAQO,IAAIgB,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMwQ,GAAG,GAAGzQ,SAAS,CAAC,CAAD,CAArB;EAAA,YAA0B0Q,GAAG,GAAG1Q,SAAS,CAAC,CAAD,CAAzC;EACA,UAAI2Q,EAAE,GAAG,IAAT;EAAA,UAAeC,EAAE,GAAG,IAApB;EAAA,UAA0BC,EAAE,GAAG,IAA/B;EAAA,UAAqCC,EAAE,GAAG,IAA1C;EAAA,UAAgDC,CAAC,GAAG,IAApD;EAAA,UAA0D/P,CAAC,GAAG,IAA9D;EAAA,UAAoEgQ,CAAC,GAAG,IAAxE;EAAA,UAA8EC,CAAC,GAAG,IAAlF;EACAF,MAAAA,CAAC,GAAG,KAAKtE,GAAL,GAAWgE,GAAf;EACAzP,MAAAA,CAAC,GAAGwL,EAAE,CAAC0E,KAAH,GAAWH,CAAf;EACAJ,MAAAA,EAAE,GAAG3P,CAAC,GAAG+P,CAAT;EACAE,MAAAA,CAAC,GAAGzE,EAAE,CAAC0E,KAAH,GAAWT,GAAf;EACAE,MAAAA,EAAE,GAAG3P,CAAC,GAAG2P,EAAT;EACAC,MAAAA,EAAE,GAAGG,CAAC,GAAGJ,EAAT;EACAE,MAAAA,EAAE,GAAGI,CAAC,GAAGR,GAAT;EACAO,MAAAA,CAAC,GAAGD,CAAC,GAAGN,GAAR;EACAI,MAAAA,EAAE,GAAGI,CAAC,GAAGJ,EAAT;EACAC,MAAAA,EAAE,GAAGL,GAAG,GAAGI,EAAX;EACAI,MAAAA,CAAC,GAAGN,EAAE,GAAGE,EAAL,GAAUG,CAAV,GAAcL,EAAE,GAAGG,EAAnB,GAAwBF,EAAE,GAAGC,EAA7B,GAAkCD,EAAE,GAAGE,EAA3C;EACA9P,MAAAA,CAAC,GAAG,CAAC,KAAKyL,GAAL,GAAWuE,CAAX,GAAeC,CAAf,GAAmB,KAAKvE,GAAxB,GAA8BqE,CAAC,GAAGL,GAAnC,IAA0CD,GAA9C;EACAQ,MAAAA,CAAC,GAAGF,CAAC,GAAG/P,CAAR;EACA,WAAKyL,GAAL,GAAWwE,CAAX;EACA,WAAKvE,GAAL,GAAWqE,CAAC,GAAGE,CAAJ,GAAQjQ,CAAnB;EACA,aAAO,IAAP;EACD;EACF;;EACDmQ,EAAAA,IAAI,GAAG;EACL,WAAO,QAAQ,KAAK1E,GAAb,GAAmB,IAAnB,GAA0B,KAAKC,GAA/B,GAAqC,GAA5C;EACD;;EACDgC,EAAAA,MAAM,GAAG;EACP,QAAI1O,SAAS,CAAC,CAAD,CAAT,YAAwBwM,EAA5B,EAAgC;EAC9B,YAAMxN,CAAC,GAAGgB,SAAS,CAAC,CAAD,CAAnB;EACA,UAAI2Q,EAAE,GAAG,IAAT;EAAA,UAAeC,EAAE,GAAG,IAApB;EAAA,UAA0BC,EAAE,GAAG,IAA/B;EAAA,UAAqCC,EAAE,GAAG,IAA1C;EAAA,UAAgDC,CAAC,GAAG,IAApD;EAAA,UAA0D/P,CAAC,GAAG,IAA9D;EAAA,UAAoEgQ,CAAC,GAAG,IAAxE;EAAA,UAA8EC,CAAC,GAAG,IAAlF;EACAF,MAAAA,CAAC,GAAG,KAAKtE,GAAL,GAAWzN,CAAC,CAACyN,GAAjB;EACAzL,MAAAA,CAAC,GAAGwL,EAAE,CAAC0E,KAAH,GAAWH,CAAf;EACAJ,MAAAA,EAAE,GAAG3P,CAAC,GAAG+P,CAAT;EACAE,MAAAA,CAAC,GAAGzE,EAAE,CAAC0E,KAAH,GAAWlS,CAAC,CAACyN,GAAjB;EACAkE,MAAAA,EAAE,GAAG3P,CAAC,GAAG2P,EAAT;EACAC,MAAAA,EAAE,GAAGG,CAAC,GAAGJ,EAAT;EACAE,MAAAA,EAAE,GAAGI,CAAC,GAAGjS,CAAC,CAACyN,GAAX;EACAuE,MAAAA,CAAC,GAAGD,CAAC,GAAG/R,CAAC,CAACyN,GAAV;EACAoE,MAAAA,EAAE,GAAGI,CAAC,GAAGJ,EAAT;EACAC,MAAAA,EAAE,GAAG9R,CAAC,CAACyN,GAAF,GAAQoE,EAAb;EACAI,MAAAA,CAAC,GAAGN,EAAE,GAAGE,EAAL,GAAUG,CAAV,GAAcL,EAAE,GAAGG,EAAnB,GAAwBF,EAAE,GAAGC,EAA7B,GAAkCD,EAAE,GAAGE,EAA3C;EACA9P,MAAAA,CAAC,GAAG,CAAC,KAAKyL,GAAL,GAAWuE,CAAX,GAAeC,CAAf,GAAmB,KAAKvE,GAAxB,GAA8BqE,CAAC,GAAG/R,CAAC,CAAC0N,GAArC,IAA4C1N,CAAC,CAACyN,GAAlD;EACAwE,MAAAA,CAAC,GAAGF,CAAC,GAAG/P,CAAR;EACA,YAAMoQ,GAAG,GAAGH,CAAZ;EACA,YAAMI,GAAG,GAAGN,CAAC,GAAGE,CAAJ,GAAQjQ,CAApB;EACA,aAAO,IAAIwL,EAAJ,CAAO4E,GAAP,EAAYC,GAAZ,CAAP;EACD,KAnBD,MAmBO,IAAI,OAAOrR,SAAS,CAAC,CAAD,CAAhB,KAAwB,QAA5B,EAAsC;EAC3C,YAAMhB,CAAC,GAAGgB,SAAS,CAAC,CAAD,CAAnB;EACA,UAAIzC,MAAM,CAACE,KAAP,CAAauB,CAAb,CAAJ,EAAqB,OAAOwN,EAAE,CAACoC,SAAH,EAAP;EACrB,aAAOpC,EAAE,CAAC7J,IAAH,CAAQ,IAAR,EAAc6N,UAAd,CAAyBxR,CAAzB,EAA4B,GAA5B,CAAP;EACD;EACF;;EACDsS,EAAAA,EAAE,CAACtS,CAAD,EAAI;EACJ,WAAO,KAAKyN,GAAL,GAAWzN,CAAC,CAACyN,GAAb,IAAoB,KAAKA,GAAL,KAAazN,CAAC,CAACyN,GAAf,IAAsB,KAAKC,GAAL,IAAY1N,CAAC,CAAC0N,GAA/D;EACD;;EACD7N,EAAAA,GAAG,CAACO,GAAD,EAAM;EACP,QAAIA,GAAG,KAAK,GAAZ,EAAiB,OAAOoN,EAAE,CAACJ,OAAH,CAAW,GAAX,CAAP;EACjB,QAAImF,CAAC,GAAG,IAAI/E,EAAJ,CAAO,IAAP,CAAR;EACA,QAAIgF,CAAC,GAAGhF,EAAE,CAACJ,OAAH,CAAW,GAAX,CAAR;EACA,QAAI1O,CAAC,GAAGrB,IAAI,CAACC,GAAL,CAAS8C,GAAT,CAAR;EACA,QAAI1B,CAAC,GAAG,CAAR,EACE,OAAOA,CAAC,GAAG,CAAX,EAAc;EACZ,UAAIA,CAAC,GAAG,CAAJ,KAAU,CAAd,EACE8T,CAAC,CAACpE,YAAF,CAAemE,CAAf;EAEF7T,MAAAA,CAAC,IAAI,CAAL;EACA,UAAIA,CAAC,GAAG,CAAR,EAAW6T,CAAC,GAAGA,CAAC,CAACpE,GAAF,EAAJ;EACZ,KAPH,MASEqE,CAAC,GAAGD,CAAJ;EAEF,QAAInS,GAAG,GAAG,CAAV,EAAa,OAAOoS,CAAC,CAACC,UAAF,EAAP;EACb,WAAOD,CAAP;EACD;;EACDE,EAAAA,IAAI,GAAG;EACL,QAAI,KAAKjU,KAAL,EAAJ,EAAkB,OAAO+O,EAAE,CAAChP,GAAV;EAClB,UAAMmU,GAAG,GAAGtV,IAAI,CAACqV,IAAL,CAAU,KAAKjF,GAAf,CAAZ;EACA,QAAImF,GAAG,GAAG,GAAV;EACA,QAAID,GAAG,KAAK,KAAKlF,GAAjB,EACEmF,GAAG,GAAGvV,IAAI,CAACqV,IAAL,CAAU,KAAKhF,GAAf,CAAN;EAEF,WAAO,IAAIF,EAAJ,CAAOmF,GAAP,EAAYC,GAAZ,CAAP;EACD;;EACDxP,EAAAA,SAAS,CAACC,CAAD,EAAI;EACX,UAAMT,KAAK,GAAGS,CAAd;EACA,QAAI,KAAKoK,GAAL,GAAW7K,KAAK,CAAC6K,GAArB,EAA0B,OAAO,CAAC,CAAR;EAC1B,QAAI,KAAKA,GAAL,GAAW7K,KAAK,CAAC6K,GAArB,EAA0B,OAAO,CAAP;EAC1B,QAAI,KAAKC,GAAL,GAAW9K,KAAK,CAAC8K,GAArB,EAA0B,OAAO,CAAC,CAAR;EAC1B,QAAI,KAAKA,GAAL,GAAW9K,KAAK,CAAC8K,GAArB,EAA0B,OAAO,CAAP;EAC1B,WAAO,CAAP;EACD;;EACDmF,EAAAA,IAAI,GAAG;EACL,QAAI,KAAKpU,KAAL,EAAJ,EAAkB,OAAO,IAAP;EAClB,UAAMqU,KAAK,GAAG,KAAKtN,GAAL,CAAS,GAAT,CAAd;EACA,WAAOsN,KAAK,CAAClT,KAAN,EAAP;EACD;;EACDmT,EAAAA,QAAQ,GAAG;EACT,QAAI/R,SAAS,CAAC,CAAD,CAAT,YAAwBwM,EAA5B,EAAgC;EAC9B,YAAMjO,KAAK,GAAGyB,SAAS,CAAC,CAAD,CAAvB;EACA,WAAKwI,IAAL,CAAUjK,KAAV;EACA,aAAO,IAAP;EACD,KAJD,MAIO,IAAI,OAAOyB,SAAS,CAAC,CAAD,CAAhB,KAAwB,QAA5B,EAAsC;EAC3C,YAAMzB,KAAK,GAAGyB,SAAS,CAAC,CAAD,CAAvB;EACA,WAAKwI,IAAL,CAAUjK,KAAV;EACA,aAAO,IAAP;EACD;EACF;;EACD+K,EAAAA,GAAG,CAACvK,CAAD,EAAI;EACL,QAAI,KAAKuS,EAAL,CAAQvS,CAAR,CAAJ,EACE,OAAO,IAAP,CADF,KAGE,OAAOA,CAAP;EAEH;;EACDiE,EAAAA,IAAI,GAAG;EACL,QAAI,KAAKsN,MAAL,EAAJ,EAAmB,OAAO9D,EAAE,CAACJ,OAAH,CAAW,GAAX,CAAP;EACnB,QAAI,KAAKmB,UAAL,EAAJ,EACE,OAAOf,EAAE,CAAChP,GAAV;EAEF,UAAMuB,CAAC,GAAG,MAAM1C,IAAI,CAAC2G,IAAL,CAAU,KAAKyJ,GAAf,CAAhB;EACA,UAAMuF,EAAE,GAAG,KAAKvF,GAAL,GAAW1N,CAAtB;EACA,UAAMkT,IAAI,GAAGzF,EAAE,CAACJ,OAAH,CAAW4F,EAAX,CAAb;EACA,UAAME,MAAM,GAAG,KAAKhC,QAAL,CAAc+B,IAAI,CAAC9E,GAAL,EAAd,CAAf;EACA,UAAMgF,EAAE,GAAGD,MAAM,CAACzF,GAAP,IAAc1N,CAAC,GAAG,GAAlB,CAAX;EACA,WAAOkT,IAAI,CAACzN,GAAL,CAAS2N,EAAT,CAAP;EACD;;EACDlE,EAAAA,OAAO,GAAG;EACR,QAAIjO,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,UAAID,SAAS,CAAC,CAAD,CAAT,YAAwBwM,EAA5B,EAAgC;EAC9B,cAAMxN,CAAC,GAAGgB,SAAS,CAAC,CAAD,CAAnB;EACA,eAAO,KAAKiO,OAAL,CAAajP,CAAC,CAACyN,GAAf,EAAoBzN,CAAC,CAAC0N,GAAtB,CAAP;EACD,OAHD,MAGO,IAAI,OAAO1M,SAAS,CAAC,CAAD,CAAhB,KAAwB,QAA5B,EAAsC;EAC3C,cAAMhB,CAAC,GAAGgB,SAAS,CAAC,CAAD,CAAnB;EACA,YAAIoS,CAAC,GAAG,IAAR;EAAA,YAActH,CAAC,GAAG,IAAlB;EAAA,YAAwBuH,CAAC,GAAG,IAA5B;EAAA,YAAkCb,CAAC,GAAG,IAAtC;EAAA,YAA4C/O,CAAC,GAAG,IAAhD;EAAA,YAAsDxD,CAAC,GAAG,IAA1D;EACAoT,QAAAA,CAAC,GAAG,KAAK5F,GAAL,GAAWzN,CAAf;EACAyD,QAAAA,CAAC,GAAG4P,CAAC,GAAG,KAAK5F,GAAb;EACA+E,QAAAA,CAAC,GAAGa,CAAC,GAAG5P,CAAR;EACA+O,QAAAA,CAAC,GAAGxS,CAAC,GAAGyD,CAAJ,IAAS,KAAKgK,GAAL,GAAW+E,CAApB,CAAJ;EACAvS,QAAAA,CAAC,GAAGuS,CAAC,GAAG,KAAK9E,GAAb;EACA0F,QAAAA,CAAC,GAAGC,CAAC,GAAGpT,CAAR;EACA6L,QAAAA,CAAC,GAAG7L,CAAC,IAAIoT,CAAC,GAAGD,CAAR,CAAL;EACA,aAAK3F,GAAL,GAAW2F,CAAC,GAAGtH,CAAf;EACA,aAAK4B,GAAL,GAAW5B,CAAC,IAAIsH,CAAC,GAAG,KAAK3F,GAAb,CAAZ;EACA,eAAO,IAAP;EACD;EACF,KAlBD,MAkBO,IAAIzM,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMwQ,GAAG,GAAGzQ,SAAS,CAAC,CAAD,CAArB;EAAA,YAA0B0Q,GAAG,GAAG1Q,SAAS,CAAC,CAAD,CAAzC;EACA,UAAIoS,CAAC,GAAG,IAAR;EAAA,UAActH,CAAC,GAAG,IAAlB;EAAA,UAAwBwH,CAAC,GAAG,IAA5B;EAAA,UAAkCC,CAAC,GAAG,IAAtC;EAAA,UAA4CF,CAAC,GAAG,IAAhD;EAAA,UAAsDb,CAAC,GAAG,IAA1D;EAAA,UAAgE/O,CAAC,GAAG,IAApE;EAAA,UAA0ExD,CAAC,GAAG,IAA9E;EACAoT,MAAAA,CAAC,GAAG,KAAK5F,GAAL,GAAWgE,GAAf;EACA6B,MAAAA,CAAC,GAAG,KAAK5F,GAAL,GAAWgE,GAAf;EACAjO,MAAAA,CAAC,GAAG4P,CAAC,GAAG,KAAK5F,GAAb;EACAxN,MAAAA,CAAC,GAAGqT,CAAC,GAAG,KAAK5F,GAAb;EACA8E,MAAAA,CAAC,GAAGa,CAAC,GAAG5P,CAAR;EACA8P,MAAAA,CAAC,GAAGD,CAAC,GAAGrT,CAAR;EACAuS,MAAAA,CAAC,GAAGf,GAAG,GAAGhO,CAAN,IAAW,KAAKgK,GAAL,GAAW+E,CAAtB,CAAJ;EACAe,MAAAA,CAAC,GAAG7B,GAAG,GAAGzR,CAAN,IAAW,KAAKyN,GAAL,GAAW6F,CAAtB,CAAJ;EACA9P,MAAAA,CAAC,GAAG+O,CAAC,GAAGc,CAAR;EACAF,MAAAA,CAAC,GAAGC,CAAC,GAAG5P,CAAR;EACAqI,MAAAA,CAAC,GAAGrI,CAAC,IAAI4P,CAAC,GAAGD,CAAR,CAAL;EACA3P,MAAAA,CAAC,GAAG8P,CAAC,GAAGzH,CAAR;EACA,YAAMsG,GAAG,GAAGgB,CAAC,GAAG3P,CAAhB;EACA,YAAM4O,GAAG,GAAG5O,CAAC,IAAI2P,CAAC,GAAGhB,GAAR,CAAb;EACA,WAAK3E,GAAL,GAAW2E,GAAX;EACA,WAAK1E,GAAL,GAAW2E,GAAX;EACA,aAAO,IAAP;EACD;EACF;;EACDjE,EAAAA,YAAY,GAAG;EACb,QAAIpN,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,UAAID,SAAS,CAAC,CAAD,CAAT,YAAwBwM,EAA5B,EAAgC;EAC9B,cAAMxN,CAAC,GAAGgB,SAAS,CAAC,CAAD,CAAnB;EACA,eAAO,KAAKoN,YAAL,CAAkBpO,CAAC,CAACyN,GAApB,EAAyBzN,CAAC,CAAC0N,GAA3B,CAAP;EACD,OAHD,MAGO,IAAI,OAAO1M,SAAS,CAAC,CAAD,CAAhB,KAAwB,QAA5B,EAAsC;EAC3C,cAAMhB,CAAC,GAAGgB,SAAS,CAAC,CAAD,CAAnB;EACA,eAAO,KAAKoN,YAAL,CAAkBpO,CAAlB,EAAqB,GAArB,CAAP;EACD;EACF,KARD,MAQO,IAAIgB,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMwQ,GAAG,GAAGzQ,SAAS,CAAC,CAAD,CAArB;EAAA,YAA0B0Q,GAAG,GAAG1Q,SAAS,CAAC,CAAD,CAAzC;EACA,UAAIwS,EAAE,GAAG,IAAT;EAAA,UAAeC,EAAE,GAAG,IAApB;EAAA,UAA0B5B,EAAE,GAAG,IAA/B;EAAA,UAAqCC,EAAE,GAAG,IAA1C;EAAA,UAAgDC,CAAC,GAAG,IAApD;EAAA,UAA0D/P,CAAC,GAAG,IAA9D;EACA+P,MAAAA,CAAC,GAAGvE,EAAE,CAAC0E,KAAH,GAAW,KAAKzE,GAApB;EACA+F,MAAAA,EAAE,GAAGzB,CAAC,GAAG,KAAKtE,GAAd;EACAzL,MAAAA,CAAC,GAAGwL,EAAE,CAAC0E,KAAH,GAAWT,GAAf;EACA+B,MAAAA,EAAE,GAAGzB,CAAC,GAAGyB,EAAT;EACAC,MAAAA,EAAE,GAAG,KAAKhG,GAAL,GAAW+F,EAAhB;EACA3B,MAAAA,EAAE,GAAG7P,CAAC,GAAGyP,GAAT;EACAM,MAAAA,CAAC,GAAG,KAAKtE,GAAL,GAAWgE,GAAf;EACAI,MAAAA,EAAE,GAAG7P,CAAC,GAAG6P,EAAT;EACAC,MAAAA,EAAE,GAAGL,GAAG,GAAGI,EAAX;EACA7P,MAAAA,CAAC,GAAGwR,EAAE,GAAG3B,EAAL,GAAUE,CAAV,GAAcyB,EAAE,GAAG1B,EAAnB,GAAwB2B,EAAE,GAAG5B,EAA7B,GAAkC4B,EAAE,GAAG3B,EAAvC,IAA6C,KAAKrE,GAAL,GAAWiE,GAAX,GAAiB,KAAKhE,GAAL,GAAW+D,GAAzE,CAAJ;EACA,YAAMW,GAAG,GAAGL,CAAC,GAAG/P,CAAhB;EACAwR,MAAAA,EAAE,GAAGzB,CAAC,GAAGK,GAAT;EACA,YAAMC,GAAG,GAAGrQ,CAAC,GAAGwR,EAAhB;EACA,WAAK/F,GAAL,GAAW2E,GAAX;EACA,WAAK1E,GAAL,GAAW2E,GAAX;EACA,aAAO,IAAP;EACD;EACF;;EACDqB,EAAAA,OAAO,GAAG;EACR,WAAO,KAAKtF,YAAL,CAAkB,IAAlB,CAAP;EACD;;EACDxO,EAAAA,KAAK,GAAG;EACN,QAAI,KAAKnB,KAAL,EAAJ,EAAkB,OAAO+O,EAAE,CAAChP,GAAV;EAClB,UAAMmU,GAAG,GAAGtV,IAAI,CAACuC,KAAL,CAAW,KAAK6N,GAAhB,CAAZ;EACA,QAAImF,GAAG,GAAG,GAAV;EACA,QAAID,GAAG,KAAK,KAAKlF,GAAjB,EACEmF,GAAG,GAAGvV,IAAI,CAACuC,KAAL,CAAW,KAAK8N,GAAhB,CAAN;EAEF,WAAO,IAAIF,EAAJ,CAAOmF,GAAP,EAAYC,GAAZ,CAAP;EACD;;EACDjD,EAAAA,MAAM,GAAG;EACP,QAAI,KAAKlR,KAAL,EAAJ,EAAkB,OAAO,IAAP;EAClB,WAAO,IAAI+O,EAAJ,CAAO,CAAC,KAAKC,GAAb,EAAkB,CAAC,KAAKC,GAAxB,CAAP;EACD;;EACDnK,EAAAA,KAAK,GAAG;EACN,QAAI;EACF,aAAO,IAAP;EACD,KAFD,CAEE,OAAO8L,EAAP,EAAW;EACX,UAAIA,EAAE,YAAY3L,0BAAlB,EACE,OAAO,IAAP,CADF,KAEK,MAAM2L,EAAN;EACN,KAND,SAMU;EACX;;EACDpB,EAAAA,QAAQ,GAAG;EACT,QAAIjN,SAAS,CAAC,CAAD,CAAT,YAAwBwM,EAA5B,EAAgC;EAC9B,YAAMxN,CAAC,GAAGgB,SAAS,CAAC,CAAD,CAAnB;EACA,UAAIhB,CAAC,CAACvB,KAAF,EAAJ,EAAe,OAAO+O,EAAE,CAACoC,SAAH,EAAP;EACf,aAAOpC,EAAE,CAAC7J,IAAH,CAAQ,IAAR,EAAcyK,YAAd,CAA2BpO,CAA3B,CAAP;EACD,KAJD,MAIO,IAAI,OAAOgB,SAAS,CAAC,CAAD,CAAhB,KAAwB,QAA5B,EAAsC;EAC3C,YAAMhB,CAAC,GAAGgB,SAAS,CAAC,CAAD,CAAnB;EACA,UAAIzC,MAAM,CAACE,KAAP,CAAauB,CAAb,CAAJ,EAAqB,OAAOwN,EAAE,CAACoC,SAAH,EAAP;EACrB,aAAOpC,EAAE,CAAC7J,IAAH,CAAQ,IAAR,EAAcyK,YAAd,CAA2BpO,CAA3B,EAA8B,GAA9B,CAAP;EACD;EACF;;EACDvB,EAAAA,KAAK,GAAG;EACN,WAAOF,MAAM,CAACE,KAAP,CAAa,KAAKgP,GAAlB,CAAP;EACD;;EACDP,EAAAA,QAAQ,GAAG;EACT,WAAO7P,IAAI,CAAC6S,KAAL,CAAW,KAAKzC,GAAhB,CAAP;EACD;;EACD3P,EAAAA,QAAQ,GAAG;EACT,UAAM2S,GAAG,GAAGjD,EAAE,CAACqC,SAAH,CAAa,KAAKpC,GAAlB,CAAZ;EACA,QAAIgD,GAAG,IAAI,CAAC,CAAR,IAAaA,GAAG,IAAI,EAAxB,EAA4B,OAAO,KAAKkD,kBAAL,EAAP;EAC5B,WAAO,KAAKC,aAAL,EAAP;EACD;;EACDD,EAAAA,kBAAkB,GAAG;EACnB,UAAME,UAAU,GAAG,KAAKtC,sBAAL,EAAnB;EACA,QAAIsC,UAAU,KAAK,IAAnB,EAAyB,OAAOA,UAAP;EACzB,UAAMhE,SAAS,GAAG,IAAI3H,KAAJ,CAAU,CAAV,EAAaC,IAAb,CAAkB,IAAlB,CAAlB;EACA,UAAM2L,SAAS,GAAG,KAAKvD,wBAAL,CAA8B,IAA9B,EAAoCV,SAApC,CAAlB;EACA,UAAMgB,eAAe,GAAGhB,SAAS,CAAC,CAAD,CAAT,GAAe,CAAvC;EACA,QAAIkE,GAAG,GAAGD,SAAV;;EACA,QAAIA,SAAS,CAACxF,MAAV,CAAiB,CAAjB,MAAwB,GAA5B,EAAiC;EAC/ByF,MAAAA,GAAG,GAAG,MAAMD,SAAZ;EACD,KAFD,MAEO,IAAIjD,eAAe,GAAG,CAAtB,EAAyB;EAC9BkD,MAAAA,GAAG,GAAG,OAAOvG,EAAE,CAAC4C,YAAH,CAAgB,GAAhB,EAAqB,CAACS,eAAtB,CAAP,GAAgDiD,SAAtD;EACD,KAFM,MAEA,IAAIA,SAAS,CAACxO,OAAV,CAAkB,GAAlB,MAA2B,CAAC,CAAhC,EAAmC;EACxC,YAAM0O,SAAS,GAAGnD,eAAe,GAAGiD,SAAS,CAAC7S,MAA9C;EACA,YAAMgT,MAAM,GAAGzG,EAAE,CAAC4C,YAAH,CAAgB,GAAhB,EAAqB4D,SAArB,CAAf;EACAD,MAAAA,GAAG,GAAGD,SAAS,GAAGG,MAAZ,GAAqB,IAA3B;EACD;;EACD,QAAI,KAAK1F,UAAL,EAAJ,EAAuB,OAAO,MAAMwF,GAAb;EACvB,WAAOA,GAAP;EACD;;EACDtB,EAAAA,UAAU,GAAG;EACX,QAAId,EAAE,GAAG,IAAT;EAAA,QAAeC,EAAE,GAAG,IAApB;EAAA,QAA0BC,EAAE,GAAG,IAA/B;EAAA,QAAqCC,EAAE,GAAG,IAA1C;EAAA,QAAgDC,CAAC,GAAG,IAApD;EAAA,QAA0D/P,CAAC,GAAG,IAA9D;EAAA,QAAoEgQ,CAAC,GAAG,IAAxE;EAAA,QAA8EC,CAAC,GAAG,IAAlF;EACAF,IAAAA,CAAC,GAAG,MAAM,KAAKtE,GAAf;EACAzL,IAAAA,CAAC,GAAGwL,EAAE,CAAC0E,KAAH,GAAWH,CAAf;EACAJ,IAAAA,EAAE,GAAG3P,CAAC,GAAG+P,CAAT;EACAE,IAAAA,CAAC,GAAGzE,EAAE,CAAC0E,KAAH,GAAW,KAAKzE,GAApB;EACAkE,IAAAA,EAAE,GAAG3P,CAAC,GAAG2P,EAAT;EACAC,IAAAA,EAAE,GAAGG,CAAC,GAAGJ,EAAT;EACAE,IAAAA,EAAE,GAAGI,CAAC,GAAG,KAAKxE,GAAd;EACAuE,IAAAA,CAAC,GAAGD,CAAC,GAAG,KAAKtE,GAAb;EACAoE,IAAAA,EAAE,GAAGI,CAAC,GAAGJ,EAAT;EACAC,IAAAA,EAAE,GAAG,KAAKrE,GAAL,GAAWoE,EAAhB;EACAI,IAAAA,CAAC,GAAGN,EAAE,GAAGE,EAAL,GAAUG,CAAV,GAAcL,EAAE,GAAGG,EAAnB,GAAwBF,EAAE,GAAGC,EAA7B,GAAkCD,EAAE,GAAGE,EAA3C;EACA9P,IAAAA,CAAC,GAAG,CAAC,MAAMgQ,CAAN,GAAUC,CAAV,GAAcF,CAAC,GAAG,KAAKrE,GAAxB,IAA+B,KAAKD,GAAxC;EACA,UAAM2E,GAAG,GAAGL,CAAC,GAAG/P,CAAhB;EACA,UAAMqQ,GAAG,GAAGN,CAAC,GAAGK,GAAJ,GAAUpQ,CAAtB;EACA,WAAO,IAAIwL,EAAJ,CAAO4E,GAAP,EAAYC,GAAZ,CAAP;EACD;;EACDuB,EAAAA,aAAa,GAAG;EACd,QAAI,KAAKtC,MAAL,EAAJ,EAAmB,OAAO9D,EAAE,CAAC0G,YAAV;EACnB,UAAML,UAAU,GAAG,KAAKtC,sBAAL,EAAnB;EACA,QAAIsC,UAAU,KAAK,IAAnB,EAAyB,OAAOA,UAAP;EACzB,UAAMhE,SAAS,GAAG,IAAI3H,KAAJ,CAAU,CAAV,EAAaC,IAAb,CAAkB,IAAlB,CAAlB;EACA,UAAMgM,MAAM,GAAG,KAAK5D,wBAAL,CAA8B,KAA9B,EAAqCV,SAArC,CAAf;EACA,UAAMX,MAAM,GAAG1B,EAAE,CAAC4G,qBAAH,GAA2BvE,SAAS,CAAC,CAAD,CAAnD;EACA,QAAIsE,MAAM,CAAC7F,MAAP,CAAc,CAAd,MAAqB,GAAzB,EACE,MAAM,IAAI+F,qBAAJ,CAA0B,yBAAyBF,MAAnD,CAAN;EAEF,QAAIG,cAAc,GAAG,EAArB;EACA,QAAIH,MAAM,CAAClT,MAAP,GAAgB,CAApB,EAAuBqT,cAAc,GAAGH,MAAM,CAAChF,SAAP,CAAiB,CAAjB,CAAjB;EACvB,UAAMoF,iBAAiB,GAAGJ,MAAM,CAAC7F,MAAP,CAAc,CAAd,IAAmB,GAAnB,GAAyBgG,cAAnD;EACA,QAAI,KAAK/F,UAAL,EAAJ,EAAuB,OAAO,MAAMgG,iBAAN,GAA0BrF,MAAjC;EACvB,WAAOqF,iBAAiB,GAAGrF,MAA3B;EACD;;EACD5R,EAAAA,GAAG,GAAG;EACJ,QAAI,KAAKmB,KAAL,EAAJ,EAAkB,OAAO+O,EAAE,CAAChP,GAAV;EAClB,QAAI,KAAK+P,UAAL,EAAJ,EAAuB,OAAO,KAAKoB,MAAL,EAAP;EACvB,WAAO,IAAInC,EAAJ,CAAO,IAAP,CAAP;EACD;;EACDgH,EAAAA,UAAU,GAAG;EACX,WAAO,KAAK/G,GAAL,GAAW,GAAX,IAAkB,KAAKA,GAAL,KAAa,GAAb,IAAoB,KAAKC,GAAL,GAAW,GAAxD;EACD;;EACDiD,EAAAA,EAAE,CAAC3Q,CAAD,EAAI;EACJ,WAAO,KAAKyN,GAAL,GAAWzN,CAAC,CAACyN,GAAb,IAAoB,KAAKA,GAAL,KAAazN,CAAC,CAACyN,GAAf,IAAsB,KAAKC,GAAL,GAAW1N,CAAC,CAAC0N,GAA9D;EACD;;EACDlI,EAAAA,GAAG,GAAG;EACJ,QAAIxE,SAAS,CAAC,CAAD,CAAT,YAAwBwM,EAA5B,EAAgC;EAC9B,YAAMxN,CAAC,GAAGgB,SAAS,CAAC,CAAD,CAAnB;EACA,aAAOwM,EAAE,CAAC7J,IAAH,CAAQ,IAAR,EAAcsL,OAAd,CAAsBjP,CAAtB,CAAP;EACD,KAHD,MAGO,IAAI,OAAOgB,SAAS,CAAC,CAAD,CAAhB,KAAwB,QAA5B,EAAsC;EAC3C,YAAMhB,CAAC,GAAGgB,SAAS,CAAC,CAAD,CAAnB;EACA,aAAOwM,EAAE,CAAC7J,IAAH,CAAQ,IAAR,EAAcsL,OAAd,CAAsBjP,CAAtB,CAAP;EACD;EACF;;EACDwJ,EAAAA,IAAI,GAAG;EACL,QAAIxI,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,UAAI,OAAOD,SAAS,CAAC,CAAD,CAAhB,KAAwB,QAA5B,EAAsC;EACpC,cAAMjB,CAAC,GAAGiB,SAAS,CAAC,CAAD,CAAnB;EACA,aAAKyM,GAAL,GAAW1N,CAAX;EACA,aAAK2N,GAAL,GAAW,GAAX;EACD,OAJD,MAIO,IAAI1M,SAAS,CAAC,CAAD,CAAT,YAAwBwM,EAA5B,EAAgC;EACrC,cAAMG,EAAE,GAAG3M,SAAS,CAAC,CAAD,CAApB;EACA,aAAKyM,GAAL,GAAWE,EAAE,CAACF,GAAd;EACA,aAAKC,GAAL,GAAWC,EAAE,CAACD,GAAd;EACD;EACF,KAVD,MAUO,IAAI1M,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAM4M,EAAE,GAAG7M,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyB8M,EAAE,GAAG9M,SAAS,CAAC,CAAD,CAAvC;EACA,WAAKyM,GAAL,GAAWI,EAAX;EACA,WAAKH,GAAL,GAAWI,EAAX;EACD;EACF;;EACD4C,EAAAA,EAAE,CAAC1Q,CAAD,EAAI;EACJ,WAAO,KAAKyN,GAAL,GAAWzN,CAAC,CAACyN,GAAb,IAAoB,KAAKA,GAAL,KAAazN,CAAC,CAACyN,GAAf,IAAsB,KAAKC,GAAL,GAAW1N,CAAC,CAAC0N,GAA9D;EACD;;EACDa,EAAAA,UAAU,GAAG;EACX,WAAO,KAAKd,GAAL,GAAW,GAAX,IAAkB,KAAKA,GAAL,KAAa,GAAb,IAAoB,KAAKC,GAAL,GAAW,GAAxD;EACD;;EACDwC,EAAAA,KAAK,GAAG;EACN,QAAI,KAAKzR,KAAL,EAAJ,EAAkB,OAAO+O,EAAE,CAAChP,GAAV;EAClB,QAAI,KAAKgW,UAAL,EAAJ,EAAuB,OAAO,KAAK5U,KAAL,EAAP,CAAvB,KAAiD,OAAO,KAAK8S,IAAL,EAAP;EAClD;;EACD+B,EAAAA,MAAM,GAAG;EACP,QAAI,KAAKhH,GAAL,GAAW,CAAf,EAAkB,OAAO,CAAP;EAClB,QAAI,KAAKA,GAAL,GAAW,CAAf,EAAkB,OAAO,CAAC,CAAR;EAClB,QAAI,KAAKC,GAAL,GAAW,CAAf,EAAkB,OAAO,CAAP;EAClB,QAAI,KAAKA,GAAL,GAAW,CAAf,EAAkB,OAAO,CAAC,CAAR;EAClB,WAAO,CAAP;EACD;;EACD,MAAIrJ,WAAJ,GAAkB;EAChB,WAAO,CAAC1D,YAAD,EAAeH,UAAf,EAA2B8D,QAA3B,CAAP;EACD;;EA3kBqB;EA6kBxBkJ,EAAE,CAACkH,EAAH,GAAQ,IAAIlH,EAAJ,CAAO,wBAAP,EAAiC,wBAAjC,CAAR;EACAA,EAAE,CAACmH,MAAH,GAAY,IAAInH,EAAJ,CAAO,wBAAP,EAAiC,wBAAjC,CAAZ;EACAA,EAAE,CAACoH,IAAH,GAAU,IAAIpH,EAAJ,CAAO,wBAAP,EAAiC,wBAAjC,CAAV;EACAA,EAAE,CAACqH,CAAH,GAAO,IAAIrH,EAAJ,CAAO,wBAAP,EAAiC,wBAAjC,CAAP;EACAA,EAAE,CAAChP,GAAH,GAAS,IAAIgP,EAAJ,CAAOjP,MAAM,CAACC,GAAd,EAAmBD,MAAM,CAACC,GAA1B,CAAT;EACAgP,EAAE,CAACsH,GAAH,GAAS,oBAAT;EACAtH,EAAE,CAAC0E,KAAH,GAAW,WAAX;EACA1E,EAAE,CAACsD,gBAAH,GAAsB,EAAtB;EACAtD,EAAE,CAACwB,GAAH,GAASxB,EAAE,CAACJ,OAAH,CAAW,IAAX,CAAT;EACAI,EAAE,CAACoD,GAAH,GAASpD,EAAE,CAACJ,OAAH,CAAW,GAAX,CAAT;EACAI,EAAE,CAAC4G,qBAAH,GAA2B,GAA3B;EACA5G,EAAE,CAAC0G,YAAH,GAAkB,OAAlB;;EC5lBe,MAAMa,cAAN,CAAqB;EAClC,SAAOC,gBAAP,CAAwBrL,EAAxB,EAA4BC,EAA5B,EAAgCI,CAAhC,EAAmC;EACjC,UAAMtD,KAAK,GAAGqO,cAAc,CAACE,sBAAf,CAAsCtL,EAAtC,EAA0CC,EAA1C,EAA8CI,CAA9C,CAAd;EACA,QAAItD,KAAK,IAAI,CAAb,EAAgB,OAAOA,KAAP;EAChB,UAAMwO,GAAG,GAAG1H,EAAE,CAACJ,OAAH,CAAWxD,EAAE,CAAC7J,CAAd,EAAiBkP,OAAjB,CAAyB,CAACtF,EAAE,CAAC5J,CAA7B,CAAZ;EACA,UAAMoV,GAAG,GAAG3H,EAAE,CAACJ,OAAH,CAAWxD,EAAE,CAAC5J,CAAd,EAAiBiP,OAAjB,CAAyB,CAACtF,EAAE,CAAC3J,CAA7B,CAAZ;EACA,UAAMoV,GAAG,GAAG5H,EAAE,CAACJ,OAAH,CAAWpD,CAAC,CAACjK,CAAb,EAAgBkP,OAAhB,CAAwB,CAACrF,EAAE,CAAC7J,CAA5B,CAAZ;EACA,UAAMsV,GAAG,GAAG7H,EAAE,CAACJ,OAAH,CAAWpD,CAAC,CAAChK,CAAb,EAAgBiP,OAAhB,CAAwB,CAACrF,EAAE,CAAC5J,CAA5B,CAAZ;EACA,WAAOkV,GAAG,CAAC9G,YAAJ,CAAiBiH,GAAjB,EAAsBnH,YAAtB,CAAmCiH,GAAG,CAAC/G,YAAJ,CAAiBgH,GAAjB,CAAnC,EAA0DX,MAA1D,EAAP;EACD;;EACD,SAAOa,YAAP,GAAsB;EACpB,QAAItU,SAAS,CAAC,CAAD,CAAT,YAAwBwM,EAAxB,IAA+BxM,SAAS,CAAC,CAAD,CAAT,YAAwBwM,EAAxB,IAA+BxM,SAAS,CAAC,CAAD,CAAT,YAAwBwM,EAAxB,IAA8BxM,SAAS,CAAC,CAAD,CAAT,YAAwBwM,EAAxH,EAA8H;EAC5H,YAAMtQ,EAAE,GAAG8D,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyB6I,EAAE,GAAG7I,SAAS,CAAC,CAAD,CAAvC;EAAA,YAA4C7D,EAAE,GAAG6D,SAAS,CAAC,CAAD,CAA1D;EAAA,YAA+D8I,EAAE,GAAG9I,SAAS,CAAC,CAAD,CAA7E;EACA,YAAMgN,GAAG,GAAG9Q,EAAE,CAAC+Q,QAAH,CAAYnE,EAAZ,EAAgBoE,YAAhB,CAA6BrE,EAAE,CAACoE,QAAH,CAAY9Q,EAAZ,CAA7B,CAAZ;EACA,aAAO6Q,GAAG,CAACyG,MAAJ,EAAP;EACD,KAJD,MAIO,IAAI,OAAOzT,SAAS,CAAC,CAAD,CAAhB,KAAwB,QAAxB,IAAqC,OAAOA,SAAS,CAAC,CAAD,CAAhB,KAAwB,QAAxB,IAAqC,OAAOA,SAAS,CAAC,CAAD,CAAhB,KAAwB,QAAxB,IAAoC,OAAOA,SAAS,CAAC,CAAD,CAAhB,KAAwB,QAA1I,EAAsJ;EAC3J,YAAMkU,GAAG,GAAGlU,SAAS,CAAC,CAAD,CAArB;EAAA,YAA0BmU,GAAG,GAAGnU,SAAS,CAAC,CAAD,CAAzC;EAAA,YAA8CoU,GAAG,GAAGpU,SAAS,CAAC,CAAD,CAA7D;EAAA,YAAkEqU,GAAG,GAAGrU,SAAS,CAAC,CAAD,CAAjF;EACA,YAAM9D,EAAE,GAAGsQ,EAAE,CAACJ,OAAH,CAAW8H,GAAX,CAAX;EACA,YAAMrL,EAAE,GAAG2D,EAAE,CAACJ,OAAH,CAAW+H,GAAX,CAAX;EACA,YAAMhY,EAAE,GAAGqQ,EAAE,CAACJ,OAAH,CAAWgI,GAAX,CAAX;EACA,YAAMtL,EAAE,GAAG0D,EAAE,CAACJ,OAAH,CAAWiI,GAAX,CAAX;EACA,YAAMrH,GAAG,GAAG9Q,EAAE,CAAC+Q,QAAH,CAAYnE,EAAZ,EAAgBoE,YAAhB,CAA6BrE,EAAE,CAACoE,QAAH,CAAY9Q,EAAZ,CAA7B,CAAZ;EACA,aAAO6Q,GAAG,CAACyG,MAAJ,EAAP;EACD;EACF;;EACD,SAAOvJ,YAAP,CAAoBvB,EAApB,EAAwBC,EAAxB,EAA4BK,EAA5B,EAAgCC,EAAhC,EAAoC;EAClC,UAAMqL,EAAE,GAAG,IAAI/H,EAAJ,CAAO7D,EAAE,CAAC3J,CAAV,EAAakO,YAAb,CAA0BtE,EAAE,CAAC5J,CAA7B,CAAX;EACA,UAAMwV,EAAE,GAAG,IAAIhI,EAAJ,CAAO5D,EAAE,CAAC7J,CAAV,EAAamO,YAAb,CAA0BvE,EAAE,CAAC5J,CAA7B,CAAX;EACA,UAAM0V,EAAE,GAAG,IAAIjI,EAAJ,CAAO7D,EAAE,CAAC5J,CAAV,EAAaqO,YAAb,CAA0BxE,EAAE,CAAC5J,CAA7B,EAAgCkO,YAAhC,CAA6C,IAAIV,EAAJ,CAAO5D,EAAE,CAAC7J,CAAV,EAAaqO,YAAb,CAA0BzE,EAAE,CAAC3J,CAA7B,CAA7C,CAAX;EACA,UAAM0V,EAAE,GAAG,IAAIlI,EAAJ,CAAOvD,EAAE,CAACjK,CAAV,EAAakO,YAAb,CAA0BhE,EAAE,CAAClK,CAA7B,CAAX;EACA,UAAM2V,EAAE,GAAG,IAAInI,EAAJ,CAAOtD,EAAE,CAACnK,CAAV,EAAamO,YAAb,CAA0BjE,EAAE,CAAClK,CAA7B,CAAX;EACA,UAAM6V,EAAE,GAAG,IAAIpI,EAAJ,CAAOvD,EAAE,CAAClK,CAAV,EAAaqO,YAAb,CAA0BlE,EAAE,CAAClK,CAA7B,EAAgCkO,YAAhC,CAA6C,IAAIV,EAAJ,CAAOtD,EAAE,CAACnK,CAAV,EAAaqO,YAAb,CAA0BnE,EAAE,CAACjK,CAA7B,CAA7C,CAAX;EACA,UAAMD,CAAC,GAAGyV,EAAE,CAACvH,QAAH,CAAY2H,EAAZ,EAAgB1H,YAAhB,CAA6ByH,EAAE,CAAC1H,QAAH,CAAYwH,EAAZ,CAA7B,CAAV;EACA,UAAMzV,CAAC,GAAG0V,EAAE,CAACzH,QAAH,CAAYwH,EAAZ,EAAgBvH,YAAhB,CAA6BqH,EAAE,CAACtH,QAAH,CAAY2H,EAAZ,CAA7B,CAAV;EACA,UAAM/J,CAAC,GAAG0J,EAAE,CAACtH,QAAH,CAAY0H,EAAZ,EAAgBzH,YAAhB,CAA6BwH,EAAE,CAACzH,QAAH,CAAYuH,EAAZ,CAA7B,CAAV;EACA,UAAMK,IAAI,GAAG9V,CAAC,CAACyR,UAAF,CAAa3F,CAAb,EAAgBwF,WAAhB,EAAb;EACA,UAAMyE,IAAI,GAAG9V,CAAC,CAACwR,UAAF,CAAa3F,CAAb,EAAgBwF,WAAhB,EAAb;EACA,QAAI9S,MAAM,CAACE,KAAP,CAAaoX,IAAb,KAAuBtX,MAAM,CAACK,UAAP,CAAkBiX,IAAlB,KAA2BtX,MAAM,CAACE,KAAP,CAAaqX,IAAb,CAAlD,IAAyEvX,MAAM,CAACK,UAAP,CAAkBkX,IAAlB,CAA7E,EACE,OAAO,IAAP;EAEF,WAAO,IAAIhU,UAAJ,CAAe+T,IAAf,EAAqBC,IAArB,CAAP;EACD;;EACD,SAAOb,sBAAP,CAA8Bc,EAA9B,EAAkCC,EAAlC,EAAsCC,EAAtC,EAA0C;EACxC,QAAIC,MAAM,GAAG,IAAb;EACA,UAAMC,OAAO,GAAG,CAACJ,EAAE,CAAChW,CAAH,GAAOkW,EAAE,CAAClW,CAAX,KAAiBiW,EAAE,CAAChW,CAAH,GAAOiW,EAAE,CAACjW,CAA3B,CAAhB;EACA,UAAMoW,QAAQ,GAAG,CAACL,EAAE,CAAC/V,CAAH,GAAOiW,EAAE,CAACjW,CAAX,KAAiBgW,EAAE,CAACjW,CAAH,GAAOkW,EAAE,CAAClW,CAA3B,CAAjB;EACA,UAAMiO,GAAG,GAAGmI,OAAO,GAAGC,QAAtB;EACA,QAAID,OAAO,GAAG,GAAd;EACE,UAAIC,QAAQ,IAAI,GAAhB,EACE,OAAOrB,cAAc,CAACN,MAAf,CAAsBzG,GAAtB,CAAP,CADF,KAGEkI,MAAM,GAAGC,OAAO,GAAGC,QAAnB;EAJJ,WAMK,IAAID,OAAO,GAAG,GAAd;EACH,UAAIC,QAAQ,IAAI,GAAhB,EACE,OAAOrB,cAAc,CAACN,MAAf,CAAsBzG,GAAtB,CAAP,CADF,KAGEkI,MAAM,GAAG,CAACC,OAAD,GAAWC,QAApB;EAJC,WAOH,OAAOrB,cAAc,CAACN,MAAf,CAAsBzG,GAAtB,CAAP;EAEF,UAAMqI,QAAQ,GAAGtB,cAAc,CAACuB,eAAf,GAAiCJ,MAAlD;EACA,QAAIlI,GAAG,IAAIqI,QAAP,IAAmB,CAACrI,GAAD,IAAQqI,QAA/B,EACE,OAAOtB,cAAc,CAACN,MAAf,CAAsBzG,GAAtB,CAAP;EAEF,WAAO,CAAP;EACD;;EACD,SAAOyG,MAAP,CAAc1U,CAAd,EAAiB;EACf,QAAIA,CAAC,GAAG,CAAR,EAAW,OAAO,CAAP;EACX,QAAIA,CAAC,GAAG,CAAR,EAAW,OAAO,CAAC,CAAR;EACX,WAAO,CAAP;EACD;;EAxEiC;EA0EpCgV,cAAc,CAACuB,eAAf,GAAiC,KAAjC;;EC3Ee,MAAMC,kBAAN,CAAyB;EACtCnU,EAAAA,IAAI,CAACsE,KAAD,EAAQ;EACV,QAAI,KAAK8P,IAAL,EAAJ,EAAiB;EACf,YAAMC,MAAM,GAAG,KAAKC,YAAL,KAAsB,KAAKC,WAAL,EAArC;EACA,aAAO,KAAK3T,WAAL,CAAiB0D,KAAjB,EAAwB+P,MAAxB,CAAP;EACD,KAHD,MAGO;EACL,aAAOlY,MAAM,CAACC,GAAd;EACD;EACF;;EACD6D,EAAAA,WAAW,CAACqE,KAAD,EAAQpE,aAAR,EAAuB/C,KAAvB,EAA8B;;EACzC0C,EAAAA,IAAI,CAACyE,KAAD,EAAQ;EACV,QAAI,KAAKkQ,IAAL,EAAJ,EACE,OAAO,KAAK5T,WAAL,CAAiB0D,KAAjB,EAAwB,CAAxB,CAAP,CADF,KAGE,OAAOnI,MAAM,CAACC,GAAd;EAEH;;EACDoH,EAAAA,IAAI,GAAG;;EACP5C,EAAAA,WAAW,CAAC0D,KAAD,EAAQpE,aAAR,EAAuB;;EAClCoF,EAAAA,aAAa,GAAG;EAMf;;EACDmP,EAAAA,iBAAiB,CAACzY,CAAD,EAAI;;EACrB0Y,EAAAA,gBAAgB,GAAG;;EACnBJ,EAAAA,YAAY,GAAG;;EACfF,EAAAA,IAAI,GAAG;EACL,WAAO,KAAKG,WAAL,KAAqB,CAA5B;EACD;;EACDrT,EAAAA,IAAI,CAACoD,KAAD,EAAQ;;EACZkQ,EAAAA,IAAI,GAAG;EACL,WAAO,KAAKF,YAAL,KAAsB,KAAKC,WAAL,EAAtB,GAA2C,CAAlD;EACD;;EACDA,EAAAA,WAAW,GAAG;EACZ,WAAO,CAAP;EACD;;EACDI,EAAAA,cAAc,CAACrN,GAAD,EAAM;;EACpB/F,EAAAA,IAAI,GAAG;;EACPM,EAAAA,IAAI,CAACyC,KAAD,EAAQ;;EACZoB,EAAAA,iBAAiB,GAAG;;EACpB,MAAIzD,WAAJ,GAAkB;EAChB,WAAO,CAACC,QAAD,CAAP;EACD;;EA7CqC;EA+CxCiS,kBAAkB,CAAChU,CAAnB,GAAuB,CAAvB;EACAgU,kBAAkB,CAAC/T,CAAnB,GAAuB,CAAvB;EACA+T,kBAAkB,CAAC9T,CAAnB,GAAuB,CAAvB;EACA8T,kBAAkB,CAACxT,CAAnB,GAAuB,CAAvB;;EChDe,MAAMiU,WAAN,CAAkB;EAC/B,SAAOtQ,KAAP,CAAaiD,EAAb,EAAiBC,EAAjB,EAAqBI,CAArB,EAAwB;EACtB,WAAO+K,cAAc,CAACC,gBAAf,CAAgCrL,EAAhC,EAAoCC,EAApC,EAAwCI,CAAxC,CAAP;EACD;;EACD,SAAOiN,KAAP,GAAe;EACb,QAAIjW,SAAS,CAAC,CAAD,CAAT,YAAwBkH,KAA5B,EAAmC;EACjC,YAAMgP,IAAI,GAAGlW,SAAS,CAAC,CAAD,CAAtB;EACA,YAAMmW,IAAI,GAAGD,IAAI,CAACjW,MAAL,GAAc,CAA3B;EACA,UAAIkW,IAAI,GAAG,CAAX,EAAc,MAAM,IAAIpZ,wBAAJ,CAA6B,mEAA7B,CAAN;EACd,UAAIqZ,IAAI,GAAGF,IAAI,CAAC,CAAD,CAAf;EACA,UAAIG,OAAO,GAAG,CAAd;;EACA,WAAK,IAAIjZ,CAAC,GAAG,CAAb,EAAgBA,CAAC,IAAI+Y,IAArB,EAA2B/Y,CAAC,EAA5B,EAAgC;EAC9B,cAAMqL,CAAC,GAAGyN,IAAI,CAAC9Y,CAAD,CAAd;;EACA,YAAIqL,CAAC,CAACzJ,CAAF,GAAMoX,IAAI,CAACpX,CAAf,EAAkB;EAChBoX,UAAAA,IAAI,GAAG3N,CAAP;EACA4N,UAAAA,OAAO,GAAGjZ,CAAV;EACD;EACF;;EACD,UAAIkZ,KAAK,GAAGD,OAAZ;;EACA,SAAG;EACDC,QAAAA,KAAK,GAAGA,KAAK,GAAG,CAAhB;EACA,YAAIA,KAAK,GAAG,CAAZ,EAAeA,KAAK,GAAGH,IAAR;EAChB,OAHD,QAGSD,IAAI,CAACI,KAAD,CAAJ,CAAY3U,QAAZ,CAAqByU,IAArB,KAA8BE,KAAK,KAAKD,OAHjD;;EAIA,UAAIE,KAAK,GAAGF,OAAZ;;EACA,SACEE,KAAK,GAAG,CAACA,KAAK,GAAG,CAAT,IAAcJ,IAAtB,CADF,QAEOD,IAAI,CAACK,KAAD,CAAJ,CAAY5U,QAAZ,CAAqByU,IAArB,KAA8BG,KAAK,KAAKF,OAF/C;;EAGA,YAAM7O,IAAI,GAAG0O,IAAI,CAACI,KAAD,CAAjB;EACA,YAAMhQ,IAAI,GAAG4P,IAAI,CAACK,KAAD,CAAjB;EACA,UAAI/O,IAAI,CAAC7F,QAAL,CAAcyU,IAAd,KAAuB9P,IAAI,CAAC3E,QAAL,CAAcyU,IAAd,CAAvB,IAA8C5O,IAAI,CAAC7F,QAAL,CAAc2E,IAAd,CAAlD,EAAuE,OAAO,KAAP;EACvE,YAAMkQ,IAAI,GAAGR,WAAW,CAACtQ,KAAZ,CAAkB8B,IAAlB,EAAwB4O,IAAxB,EAA8B9P,IAA9B,CAAb;EACA,UAAI2P,KAAK,GAAG,IAAZ;EACA,UAAIO,IAAI,KAAK,CAAb,EACEP,KAAK,GAAGzO,IAAI,CAACzI,CAAL,GAASuH,IAAI,CAACvH,CAAtB,CADF,KAGEkX,KAAK,GAAGO,IAAI,GAAG,CAAf;EAEF,aAAOP,KAAP;EACD,KAjCD,MAiCO,IAAItP,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAeuV,kBAAf,CAAhB,EAAoD;EACzD,YAAMW,IAAI,GAAGlW,SAAS,CAAC,CAAD,CAAtB;EACA,YAAMmW,IAAI,GAAGD,IAAI,CAACtR,IAAL,KAAc,CAA3B;EACA,UAAIuR,IAAI,GAAG,CAAX,EAAc,MAAM,IAAIpZ,wBAAJ,CAA6B,mEAA7B,CAAN;EACd,UAAIqZ,IAAI,GAAGF,IAAI,CAACxP,aAAL,CAAmB,CAAnB,CAAX;EACA,UAAI2P,OAAO,GAAG,CAAd;;EACA,WAAK,IAAIjZ,CAAC,GAAG,CAAb,EAAgBA,CAAC,IAAI+Y,IAArB,EAA2B/Y,CAAC,EAA5B,EAAgC;EAC9B,cAAMqL,CAAC,GAAGyN,IAAI,CAACxP,aAAL,CAAmBtJ,CAAnB,CAAV;;EACA,YAAIqL,CAAC,CAACzJ,CAAF,GAAMoX,IAAI,CAACpX,CAAf,EAAkB;EAChBoX,UAAAA,IAAI,GAAG3N,CAAP;EACA4N,UAAAA,OAAO,GAAGjZ,CAAV;EACD;EACF;;EACD,UAAIoK,IAAI,GAAG,IAAX;EACA,UAAI8O,KAAK,GAAGD,OAAZ;;EACA,SAAG;EACDC,QAAAA,KAAK,GAAGA,KAAK,GAAG,CAAhB;EACA,YAAIA,KAAK,GAAG,CAAZ,EAAeA,KAAK,GAAGH,IAAR;EACf3O,QAAAA,IAAI,GAAG0O,IAAI,CAACxP,aAAL,CAAmB4P,KAAnB,CAAP;EACD,OAJD,QAIS9O,IAAI,CAAC7F,QAAL,CAAcyU,IAAd,KAAuBE,KAAK,KAAKD,OAJ1C;;EAKA,UAAI/P,IAAI,GAAG,IAAX;EACA,UAAIiQ,KAAK,GAAGF,OAAZ;;EACA,SAAG;EACDE,QAAAA,KAAK,GAAG,CAACA,KAAK,GAAG,CAAT,IAAcJ,IAAtB;EACA7P,QAAAA,IAAI,GAAG4P,IAAI,CAACxP,aAAL,CAAmB6P,KAAnB,CAAP;EACD,OAHD,QAGSjQ,IAAI,CAAC3E,QAAL,CAAcyU,IAAd,KAAuBG,KAAK,KAAKF,OAH1C;;EAIA,UAAI7O,IAAI,CAAC7F,QAAL,CAAcyU,IAAd,KAAuB9P,IAAI,CAAC3E,QAAL,CAAcyU,IAAd,CAAvB,IAA8C5O,IAAI,CAAC7F,QAAL,CAAc2E,IAAd,CAAlD,EAAuE,OAAO,KAAP;EACvE,YAAMkQ,IAAI,GAAGR,WAAW,CAACtQ,KAAZ,CAAkB8B,IAAlB,EAAwB4O,IAAxB,EAA8B9P,IAA9B,CAAb;EACA,UAAI2P,KAAK,GAAG,IAAZ;EACA,UAAIO,IAAI,KAAK,CAAb,EACEP,KAAK,GAAGzO,IAAI,CAACzI,CAAL,GAASuH,IAAI,CAACvH,CAAtB,CADF,KAGEkX,KAAK,GAAGO,IAAI,GAAG,CAAf;EAEF,aAAOP,KAAP;EACD;EACF;;EA1E8B;EA4EjCD,WAAW,CAACS,SAAZ,GAAwB,CAAC,CAAzB;EACAT,WAAW,CAACU,KAAZ,GAAoBV,WAAW,CAACS,SAAhC;EACAT,WAAW,CAACW,gBAAZ,GAA+B,CAA/B;EACAX,WAAW,CAACY,IAAZ,GAAmBZ,WAAW,CAACW,gBAA/B;EACAX,WAAW,CAACa,SAAZ,GAAwB,CAAxB;EACAb,WAAW,CAACc,QAAZ,GAAuBd,WAAW,CAACa,SAAnC;;ECnFe,MAAME,YAAN,CAAmB;EAChC,SAAO7M,YAAP,CAAoBvB,EAApB,EAAwBC,EAAxB,EAA4BK,EAA5B,EAAgCC,EAAhC,EAAoC;EAClC,UAAM8N,KAAK,GAAGrO,EAAE,CAAC5J,CAAH,GAAO6J,EAAE,CAAC7J,CAAV,GAAc4J,EAAE,CAAC5J,CAAjB,GAAqB6J,EAAE,CAAC7J,CAAtC;EACA,UAAMkY,KAAK,GAAGtO,EAAE,CAAC3J,CAAH,GAAO4J,EAAE,CAAC5J,CAAV,GAAc2J,EAAE,CAAC3J,CAAjB,GAAqB4J,EAAE,CAAC5J,CAAtC;EACA,UAAMkY,KAAK,GAAGvO,EAAE,CAAC5J,CAAH,GAAO6J,EAAE,CAAC7J,CAAV,GAAc4J,EAAE,CAAC5J,CAAjB,GAAqB6J,EAAE,CAAC7J,CAAtC;EACA,UAAMoY,KAAK,GAAGxO,EAAE,CAAC3J,CAAH,GAAO4J,EAAE,CAAC5J,CAAV,GAAc2J,EAAE,CAAC3J,CAAjB,GAAqB4J,EAAE,CAAC5J,CAAtC;EACA,UAAMoY,KAAK,GAAGnO,EAAE,CAAClK,CAAH,GAAOmK,EAAE,CAACnK,CAAV,GAAckK,EAAE,CAAClK,CAAjB,GAAqBmK,EAAE,CAACnK,CAAtC;EACA,UAAMsY,KAAK,GAAGpO,EAAE,CAACjK,CAAH,GAAOkK,EAAE,CAAClK,CAAV,GAAciK,EAAE,CAACjK,CAAjB,GAAqBkK,EAAE,CAAClK,CAAtC;EACA,UAAMsY,KAAK,GAAGrO,EAAE,CAAClK,CAAH,GAAOmK,EAAE,CAACnK,CAAV,GAAckK,EAAE,CAAClK,CAAjB,GAAqBmK,EAAE,CAACnK,CAAtC;EACA,UAAMwY,KAAK,GAAGtO,EAAE,CAACjK,CAAH,GAAOkK,EAAE,CAAClK,CAAV,GAAciK,EAAE,CAACjK,CAAjB,GAAqBkK,EAAE,CAAClK,CAAtC;EACA,UAAMmL,OAAO,GAAG6M,KAAK,GAAGI,KAAR,GAAgBJ,KAAhB,GAAwBI,KAAxC;EACA,UAAM/M,OAAO,GAAG6M,KAAK,GAAGI,KAAR,GAAgBJ,KAAhB,GAAwBI,KAAxC;EACA,UAAMlN,OAAO,GAAG6M,KAAK,GAAGI,KAAR,GAAgBJ,KAAhB,GAAwBI,KAAxC;EACA,UAAM/M,OAAO,GAAG6M,KAAK,GAAGI,KAAR,GAAgBJ,KAAhB,GAAwBI,KAAxC;EACA,UAAMC,IAAI,GAAG,CAACrN,OAAO,GAAGE,OAAX,IAAsB,GAAnC;EACA,UAAMoN,IAAI,GAAG,CAACrN,OAAO,GAAGE,OAAX,IAAsB,GAAnC;EACA,UAAMoN,GAAG,GAAG/O,EAAE,CAAC5J,CAAH,GAAOyY,IAAnB;EACA,UAAMG,GAAG,GAAGhP,EAAE,CAAC3J,CAAH,GAAOyY,IAAnB;EACA,UAAMG,GAAG,GAAGhP,EAAE,CAAC7J,CAAH,GAAOyY,IAAnB;EACA,UAAMK,GAAG,GAAGjP,EAAE,CAAC5J,CAAH,GAAOyY,IAAnB;EACA,UAAMK,GAAG,GAAG7O,EAAE,CAAClK,CAAH,GAAOyY,IAAnB;EACA,UAAMO,GAAG,GAAG9O,EAAE,CAACjK,CAAH,GAAOyY,IAAnB;EACA,UAAMO,GAAG,GAAG9O,EAAE,CAACnK,CAAH,GAAOyY,IAAnB;EACA,UAAMS,GAAG,GAAG/O,EAAE,CAAClK,CAAH,GAAOyY,IAAnB;EACA,UAAMlD,EAAE,GAAGoD,GAAG,GAAGE,GAAjB;EACA,UAAMrD,EAAE,GAAGoD,GAAG,GAAGF,GAAjB;EACA,UAAMjD,EAAE,GAAGiD,GAAG,GAAGG,GAAN,GAAYD,GAAG,GAAGD,GAA7B;EACA,UAAMjD,EAAE,GAAGqD,GAAG,GAAGE,GAAjB;EACA,UAAMtD,EAAE,GAAGqD,GAAG,GAAGF,GAAjB;EACA,UAAMlD,EAAE,GAAGkD,GAAG,GAAGG,GAAN,GAAYD,GAAG,GAAGD,GAA7B;EACA,UAAMhZ,CAAC,GAAGyV,EAAE,GAAGI,EAAL,GAAUD,EAAE,GAAGF,EAAzB;EACA,UAAMzV,CAAC,GAAG0V,EAAE,GAAGD,EAAL,GAAUF,EAAE,GAAGK,EAAzB;EACA,UAAM/J,CAAC,GAAG0J,EAAE,GAAGI,EAAL,GAAUD,EAAE,GAAGF,EAAzB;EACA,UAAMK,IAAI,GAAG9V,CAAC,GAAG8L,CAAjB;EACA,UAAMiK,IAAI,GAAG9V,CAAC,GAAG6L,CAAjB;EACA,QAAItN,MAAM,CAACE,KAAP,CAAaoX,IAAb,KAAuBtX,MAAM,CAACK,UAAP,CAAkBiX,IAAlB,KAA2BtX,MAAM,CAACE,KAAP,CAAaqX,IAAb,CAAlD,IAAyEvX,MAAM,CAACK,UAAP,CAAkBkX,IAAlB,CAA7E,EACE,OAAO,IAAP;EAEF,WAAO,IAAIhU,UAAJ,CAAe+T,IAAI,GAAG2C,IAAtB,EAA4B1C,IAAI,GAAG2C,IAAnC,CAAP;EACD;;EAvC+B;;ECFnB,MAAMS,MAAN,CAAa;EAC1B,SAAOC,SAAP,CAAiBC,GAAjB,EAAsBC,MAAtB,EAA8BC,IAA9B,EAAoCC,OAApC,EAA6CtS,GAA7C,EAAkD;EAChD,QAAIjF,CAAC,GAAG,CAAR;;EACA,SAAK,IAAI5D,CAAC,GAAGib,MAAb,EAAqBjb,CAAC,GAAGib,MAAM,GAAGpS,GAAlC,EAAuC7I,CAAC,EAAxC,EAA4C;EAC1Ckb,MAAAA,IAAI,CAACC,OAAO,GAAGvX,CAAX,CAAJ,GAAoBoX,GAAG,CAAChb,CAAD,CAAvB;EACA4D,MAAAA,CAAC;EACF;EACF;;EAED,SAAOwX,WAAP,CAAmB7b,IAAnB,EAAyB;EACvB,WAAO;EACL,wBAAkB;EADb,MAELA,IAFK,CAAP;EAGD;;EAbyB;;ECCb,MAAM8b,QAAN,CAAe;EAC5B,SAAOC,KAAP,CAAa3Z,CAAb,EAAgB;EACd,UAAM4Z,EAAE,GAAGtc,IAAI,CAAC2S,GAAL,CAASjQ,CAAT,CAAX;EACA,QAAIxB,MAAM,CAACK,UAAP,CAAkB+a,EAAlB,CAAJ,EAA2B,OAAOA,EAAP;EAC3B,QAAIpb,MAAM,CAACE,KAAP,CAAakb,EAAb,CAAJ,EAAsB,OAAOA,EAAP;EACtB,WAAOA,EAAE,GAAGF,QAAQ,CAACG,MAArB;EACD;;EACD,SAAOxP,GAAP,CAAWyP,EAAX,EAAeC,EAAf,EAAmBC,EAAnB,EAAuBC,EAAvB,EAA2B;EACzB,QAAI5P,GAAG,GAAGyP,EAAV;EACA,QAAIC,EAAE,GAAG1P,GAAT,EAAcA,GAAG,GAAG0P,EAAN;EACd,QAAIC,EAAE,GAAG3P,GAAT,EAAcA,GAAG,GAAG2P,EAAN;EACd,QAAIC,EAAE,GAAG5P,GAAT,EAAcA,GAAG,GAAG4P,EAAN;EACd,WAAO5P,GAAP;EACD;;EACD,SAAO6P,KAAP,GAAe;EACb,QAAI,OAAOjZ,SAAS,CAAC,CAAD,CAAhB,KAAwB,QAAxB,IAAqC,OAAOA,SAAS,CAAC,CAAD,CAAhB,KAAwB,QAAxB,IAAoC,OAAOA,SAAS,CAAC,CAAD,CAAhB,KAAwB,QAArG,EAAgH;EAC9G,YAAMjB,CAAC,GAAGiB,SAAS,CAAC,CAAD,CAAnB;EAAA,YAAwBoJ,GAAG,GAAGpJ,SAAS,CAAC,CAAD,CAAvC;EAAA,YAA4CsJ,GAAG,GAAGtJ,SAAS,CAAC,CAAD,CAA3D;EACA,UAAIjB,CAAC,GAAGqK,GAAR,EAAa,OAAOA,GAAP;EACb,UAAIrK,CAAC,GAAGuK,GAAR,EAAa,OAAOA,GAAP;EACb,aAAOvK,CAAP;EACD,KALD,MAKO,IAAIpB,MAAM,CAAC4J,SAAP,CAAiBvH,SAAS,CAAC,CAAD,CAA1B,KAAmCrC,MAAM,CAAC4J,SAAP,CAAiBvH,SAAS,CAAC,CAAD,CAA1B,KAAkCrC,MAAM,CAAC4J,SAAP,CAAiBvH,SAAS,CAAC,CAAD,CAA1B,CAAzE,EAA0G;EAC/G,YAAMjB,CAAC,GAAGiB,SAAS,CAAC,CAAD,CAAnB;EAAA,YAAwBoJ,GAAG,GAAGpJ,SAAS,CAAC,CAAD,CAAvC;EAAA,YAA4CsJ,GAAG,GAAGtJ,SAAS,CAAC,CAAD,CAA3D;EACA,UAAIjB,CAAC,GAAGqK,GAAR,EAAa,OAAOA,GAAP;EACb,UAAIrK,CAAC,GAAGuK,GAAR,EAAa,OAAOA,GAAP;EACb,aAAOvK,CAAP;EACD;EACF;;EACD,SAAOma,IAAP,CAAYxT,KAAZ,EAAmB4D,GAAnB,EAAwB;EACtB,QAAI5D,KAAK,GAAG,CAAZ,EACE,OAAO4D,GAAG,GAAG,CAAC5D,KAAD,GAAS4D,GAAtB;EAEF,WAAO5D,KAAK,GAAG4D,GAAf;EACD;;EACD,SAAOA,GAAP,GAAa;EACX,QAAItJ,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAM4Y,EAAE,GAAG7Y,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyB8Y,EAAE,GAAG9Y,SAAS,CAAC,CAAD,CAAvC;EAAA,YAA4C+Y,EAAE,GAAG/Y,SAAS,CAAC,CAAD,CAA1D;EACA,UAAIsJ,GAAG,GAAGuP,EAAV;EACA,UAAIC,EAAE,GAAGxP,GAAT,EAAcA,GAAG,GAAGwP,EAAN;EACd,UAAIC,EAAE,GAAGzP,GAAT,EAAcA,GAAG,GAAGyP,EAAN;EACd,aAAOzP,GAAP;EACD,KAND,MAMO,IAAItJ,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAM4Y,EAAE,GAAG7Y,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyB8Y,EAAE,GAAG9Y,SAAS,CAAC,CAAD,CAAvC;EAAA,YAA4C+Y,EAAE,GAAG/Y,SAAS,CAAC,CAAD,CAA1D;EAAA,YAA+DgZ,EAAE,GAAGhZ,SAAS,CAAC,CAAD,CAA7E;EACA,UAAIsJ,GAAG,GAAGuP,EAAV;EACA,UAAIC,EAAE,GAAGxP,GAAT,EAAcA,GAAG,GAAGwP,EAAN;EACd,UAAIC,EAAE,GAAGzP,GAAT,EAAcA,GAAG,GAAGyP,EAAN;EACd,UAAIC,EAAE,GAAG1P,GAAT,EAAcA,GAAG,GAAG0P,EAAN;EACd,aAAO1P,GAAP;EACD;EACF;;EACD,SAAO6P,OAAP,CAAejd,EAAf,EAAmBC,EAAnB,EAAuB;EACrB,WAAO,CAACD,EAAE,GAAGC,EAAN,IAAY,GAAnB;EACD;;EAnD2B;EAqD9Bsc,QAAQ,CAACG,MAAT,GAAkBvc,IAAI,CAAC2S,GAAL,CAAS,EAAT,CAAlB;;ECnDe,MAAMoK,QAAN,CAAe;EAC5B,SAAOC,gBAAP,CAAwBC,CAAxB,EAA2BC,CAA3B,EAA8BxI,CAA9B,EAAiCyI,CAAjC,EAAoC;EAClC,QAAIF,CAAC,CAAC/Y,MAAF,CAASgZ,CAAT,CAAJ,EAAiB,OAAOH,QAAQ,CAACK,cAAT,CAAwBH,CAAxB,EAA2BvI,CAA3B,EAA8ByI,CAA9B,CAAP;EACjB,QAAIzI,CAAC,CAACxQ,MAAF,CAASiZ,CAAT,CAAJ,EAAiB,OAAOJ,QAAQ,CAACK,cAAT,CAAwBD,CAAxB,EAA2BF,CAA3B,EAA8BC,CAA9B,CAAP;EACjB,QAAIG,cAAc,GAAG,KAArB;;EACA,QAAI,CAACvR,QAAQ,CAACY,UAAT,CAAoBuQ,CAApB,EAAuBC,CAAvB,EAA0BxI,CAA1B,EAA6ByI,CAA7B,CAAL,EAAsC;EACpCE,MAAAA,cAAc,GAAG,IAAjB;EACD,KAFD,MAEO;EACL,YAAMC,KAAK,GAAG,CAACJ,CAAC,CAACxa,CAAF,GAAMua,CAAC,CAACva,CAAT,KAAeya,CAAC,CAACxa,CAAF,GAAM+R,CAAC,CAAC/R,CAAvB,IAA4B,CAACua,CAAC,CAACva,CAAF,GAAMsa,CAAC,CAACta,CAAT,KAAewa,CAAC,CAACza,CAAF,GAAMgS,CAAC,CAAChS,CAAvB,CAA1C;;EACA,UAAI4a,KAAK,KAAK,CAAd,EAAiB;EACfD,QAAAA,cAAc,GAAG,IAAjB;EACD,OAFD,MAEO;EACL,cAAME,KAAK,GAAG,CAACN,CAAC,CAACta,CAAF,GAAM+R,CAAC,CAAC/R,CAAT,KAAewa,CAAC,CAACza,CAAF,GAAMgS,CAAC,CAAChS,CAAvB,IAA4B,CAACua,CAAC,CAACva,CAAF,GAAMgS,CAAC,CAAChS,CAAT,KAAeya,CAAC,CAACxa,CAAF,GAAM+R,CAAC,CAAC/R,CAAvB,CAA1C;EACA,cAAM6a,KAAK,GAAG,CAACP,CAAC,CAACta,CAAF,GAAM+R,CAAC,CAAC/R,CAAT,KAAeua,CAAC,CAACxa,CAAF,GAAMua,CAAC,CAACva,CAAvB,IAA4B,CAACua,CAAC,CAACva,CAAF,GAAMgS,CAAC,CAAChS,CAAT,KAAewa,CAAC,CAACva,CAAF,GAAMsa,CAAC,CAACta,CAAvB,CAA1C;EACA,cAAMwS,CAAC,GAAGqI,KAAK,GAAGF,KAAlB;EACA,cAAMpI,CAAC,GAAGqI,KAAK,GAAGD,KAAlB;EACA,YAAIpI,CAAC,GAAG,CAAJ,IAASA,CAAC,GAAG,CAAb,IAAkBC,CAAC,GAAG,CAAtB,IAA2BA,CAAC,GAAG,CAAnC,EACEkI,cAAc,GAAG,IAAjB;EAEH;EACF;;EACD,QAAIA,cAAJ,EACE,OAAOjB,QAAQ,CAACrP,GAAT,CAAagQ,QAAQ,CAACK,cAAT,CAAwBH,CAAxB,EAA2BvI,CAA3B,EAA8ByI,CAA9B,CAAb,EAA+CJ,QAAQ,CAACK,cAAT,CAAwBF,CAAxB,EAA2BxI,CAA3B,EAA8ByI,CAA9B,CAA/C,EAAiFJ,QAAQ,CAACK,cAAT,CAAwB1I,CAAxB,EAA2BuI,CAA3B,EAA8BC,CAA9B,CAAjF,EAAmHH,QAAQ,CAACK,cAAT,CAAwBD,CAAxB,EAA2BF,CAA3B,EAA8BC,CAA9B,CAAnH,CAAP;EAEF,WAAO,GAAP;EACD;;EACD,SAAOE,cAAP,CAAsBhR,CAAtB,EAAyB6Q,CAAzB,EAA4BC,CAA5B,EAA+B;EAC7B,QAAID,CAAC,CAACva,CAAF,KAAQwa,CAAC,CAACxa,CAAV,IAAeua,CAAC,CAACta,CAAF,KAAQua,CAAC,CAACva,CAA7B,EAAgC,OAAOyJ,CAAC,CAACtF,QAAF,CAAWmW,CAAX,CAAP;EAChC,UAAMQ,IAAI,GAAG,CAACP,CAAC,CAACxa,CAAF,GAAMua,CAAC,CAACva,CAAT,KAAewa,CAAC,CAACxa,CAAF,GAAMua,CAAC,CAACva,CAAvB,IAA4B,CAACwa,CAAC,CAACva,CAAF,GAAMsa,CAAC,CAACta,CAAT,KAAeua,CAAC,CAACva,CAAF,GAAMsa,CAAC,CAACta,CAAvB,CAAzC;EACA,UAAMuS,CAAC,GAAG,CAAC,CAAC9I,CAAC,CAAC1J,CAAF,GAAMua,CAAC,CAACva,CAAT,KAAewa,CAAC,CAACxa,CAAF,GAAMua,CAAC,CAACva,CAAvB,IAA4B,CAAC0J,CAAC,CAACzJ,CAAF,GAAMsa,CAAC,CAACta,CAAT,KAAeua,CAAC,CAACva,CAAF,GAAMsa,CAAC,CAACta,CAAvB,CAA7B,IAA0D8a,IAApE;EACA,QAAIvI,CAAC,IAAI,GAAT,EAAc,OAAO9I,CAAC,CAACtF,QAAF,CAAWmW,CAAX,CAAP;EACd,QAAI/H,CAAC,IAAI,GAAT,EAAc,OAAO9I,CAAC,CAACtF,QAAF,CAAWoW,CAAX,CAAP;EACd,UAAM/H,CAAC,GAAG,CAAC,CAAC8H,CAAC,CAACta,CAAF,GAAMyJ,CAAC,CAACzJ,CAAT,KAAeua,CAAC,CAACxa,CAAF,GAAMua,CAAC,CAACva,CAAvB,IAA4B,CAACua,CAAC,CAACva,CAAF,GAAM0J,CAAC,CAAC1J,CAAT,KAAewa,CAAC,CAACva,CAAF,GAAMsa,CAAC,CAACta,CAAvB,CAA7B,IAA0D8a,IAApE;EACA,WAAOzd,IAAI,CAACC,GAAL,CAASkV,CAAT,IAAcnV,IAAI,CAAC2G,IAAL,CAAU8W,IAAV,CAArB;EACD;;EACD,SAAOC,wBAAP,CAAgCtR,CAAhC,EAAmC6Q,CAAnC,EAAsCC,CAAtC,EAAyC;EACvC,UAAMO,IAAI,GAAG,CAACP,CAAC,CAACxa,CAAF,GAAMua,CAAC,CAACva,CAAT,KAAewa,CAAC,CAACxa,CAAF,GAAMua,CAAC,CAACva,CAAvB,IAA4B,CAACwa,CAAC,CAACva,CAAF,GAAMsa,CAAC,CAACta,CAAT,KAAeua,CAAC,CAACva,CAAF,GAAMsa,CAAC,CAACta,CAAvB,CAAzC;EACA,UAAMwS,CAAC,GAAG,CAAC,CAAC8H,CAAC,CAACta,CAAF,GAAMyJ,CAAC,CAACzJ,CAAT,KAAeua,CAAC,CAACxa,CAAF,GAAMua,CAAC,CAACva,CAAvB,IAA4B,CAACua,CAAC,CAACva,CAAF,GAAM0J,CAAC,CAAC1J,CAAT,KAAewa,CAAC,CAACva,CAAF,GAAMsa,CAAC,CAACta,CAAvB,CAA7B,IAA0D8a,IAApE;EACA,WAAOzd,IAAI,CAACC,GAAL,CAASkV,CAAT,IAAcnV,IAAI,CAAC2G,IAAL,CAAU8W,IAAV,CAArB;EACD;;EACD,SAAOE,oBAAP,CAA4BvR,CAA5B,EAA+BwR,IAA/B,EAAqC;EACnC,QAAIA,IAAI,CAACha,MAAL,KAAgB,CAApB,EAAuB,MAAM,IAAIlD,wBAAJ,CAA6B,6CAA7B,CAAN;EACvB,QAAImd,WAAW,GAAGzR,CAAC,CAACtF,QAAF,CAAW8W,IAAI,CAAC,CAAD,CAAf,CAAlB;;EACA,SAAK,IAAI7c,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6c,IAAI,CAACha,MAAL,GAAc,CAAlC,EAAqC7C,CAAC,EAAtC,EAA0C;EACxC,YAAM+c,IAAI,GAAGf,QAAQ,CAACK,cAAT,CAAwBhR,CAAxB,EAA2BwR,IAAI,CAAC7c,CAAD,CAA/B,EAAoC6c,IAAI,CAAC7c,CAAC,GAAG,CAAL,CAAxC,CAAb;EACA,UAAI+c,IAAI,GAAGD,WAAX,EACEA,WAAW,GAAGC,IAAd;EAEH;;EACD,WAAOD,WAAP;EACD;;EAlD2B;;ECDf,MAAME,yBAAN,CAAgC;EAC7CC,EAAAA,MAAM,GAAG;EACP,QAAIra,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,UAAID,SAAS,CAAC,CAAD,CAAT,YAAwBkH,KAA5B,EAAmC,CAAnC,MAEO,IAAIP,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAeuV,kBAAf,CAAhB,EAAoD;EAG5D,KAND,MAMO,IAAIvV,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B,CAA5B,MAEA,IAAID,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAM2E,IAAI,GAAG5E,SAAS,CAAC,CAAD,CAAtB;EAAA,YAA2Bsa,SAAS,GAAGta,SAAS,CAAC,CAAD,CAAhD;EACA,aAAO,KAAKqa,MAAL,CAAYzV,IAAZ,EAAkB0V,SAAlB,CAAP;EACD;EACF;;EAd4C;;ECFhC,MAAMC,uBAAN,CAA8B;EAC3CxS,EAAAA,MAAM,CAACyS,IAAD,EAAO;;EAD8B;;ECM9B,MAAMC,QAAN,CAAe;EAC5Bhe,EAAAA,WAAW,GAAG;EACZge,IAAAA,QAAQ,CAAC3a,YAAT,CAAsBC,KAAtB,CAA4B,IAA5B,EAAkCC,SAAlC;EACD;;EAED0a,EAAAA,oBAAoB,GAAG;EACrB,WAAO,KAAKC,WAAL,OAAuBF,QAAQ,CAACG,2BAAvC;EACD;;EAEDC,EAAAA,UAAU,GAAG;EACX,WAAO,KAAKC,QAAZ;EACD;;EAEDC,EAAAA,YAAY,CAACrd,CAAD,EAAI;EACd,WAAO,IAAP;EACD;;EAED+L,EAAAA,OAAO,GAAG;EACR,WAAO,GAAP;EACD;;EAEDuR,EAAAA,WAAW,GAAG;EACZ,WAAO,KAAP;EACD;;EAEDC,EAAAA,WAAW,CAACrZ,KAAD,EAAQ;EACjB,WAAO,SAASA,KAAT,IAAkB,KAAKqZ,WAAL,CAAiBrZ,KAAjB,EAAwB,CAAxB,CAAzB;EACD;;EAEDsZ,EAAAA,eAAe,GAAG;EAChB,SAAKnb,KAAL,CAAW0a,QAAQ,CAACU,qBAApB;EACD;;EAEDC,EAAAA,qBAAqB,GAAG;EACtB,SAAKC,SAAL,GAAiB,IAAjB;EACD;;EAEDC,EAAAA,UAAU,CAACC,CAAD,EAAI;EACZ,QAAIA,CAAC,KAAK,IAAV,EAAgB,OAAO,KAAP;EAChB,WAAO,KAAKC,IAAL,GAAYP,WAAZ,CAAwBM,CAAC,CAACC,IAAF,EAAxB,CAAP;EACD;;EAEDC,EAAAA,SAAS,GAAG;EACV,WAAO,GAAP;EACD;;EAEDC,EAAAA,gBAAgB,GAAG;EACjB,WAAO,CAAP;EACD;;EAEDtZ,EAAAA,SAAS,GAAG;EACV,QAAIR,KAAJ;;EACA,QAAI5B,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMoC,CAAC,GAAGrC,SAAS,CAAC,CAAD,CAAnB;EACA4B,MAAAA,KAAK,GAAGS,CAAR;EACA,UAAI,KAAKsY,WAAL,OAAuB/Y,KAAK,CAAC+Y,WAAN,EAA3B,EAAgD,OAAO,KAAKA,WAAL,KAAqB/Y,KAAK,CAAC+Y,WAAN,EAA5B;EAEhD,UAAI,KAAKjW,OAAL,MAAkB9C,KAAK,CAAC8C,OAAN,EAAtB,EAAuC,OAAO,CAAP;EAEvC,UAAI,KAAKA,OAAL,EAAJ,EAAoB,OAAO,CAAC,CAAR;EAEpB,UAAI9C,KAAK,CAAC8C,OAAN,EAAJ,EAAqB,OAAO,CAAP;EAErB,aAAO,KAAKiX,kBAAL,CAAwBtZ,CAAxB,CAAP;EACD,KAZD,MAYO,IAAIrC,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMoC,CAAC,GAAGrC,SAAS,CAAC,CAAD,CAAnB;EAAwB,YAAM4b,IAAI,GAAG5b,SAAS,CAAC,CAAD,CAAtB;EACxB4B,MAAAA,KAAK,GAAGS,CAAR;EACA,UAAI,KAAKsY,WAAL,OAAuB/Y,KAAK,CAAC+Y,WAAN,EAA3B,EAAgD,OAAO,KAAKA,WAAL,KAAqB/Y,KAAK,CAAC+Y,WAAN,EAA5B;EAEhD,UAAI,KAAKjW,OAAL,MAAkB9C,KAAK,CAAC8C,OAAN,EAAtB,EAAuC,OAAO,CAAP;EAEvC,UAAI,KAAKA,OAAL,EAAJ,EAAoB,OAAO,CAAC,CAAR;EAEpB,UAAI9C,KAAK,CAAC8C,OAAN,EAAJ,EAAqB,OAAO,CAAP;EAErB,aAAO,KAAKiX,kBAAL,CAAwBtZ,CAAxB,EAA2BuZ,IAA3B,CAAP;EACD;EACF;;EAEDC,EAAAA,WAAW,GAAG;EACZ,WAAO,KAAKC,SAAZ;EACD;;EAEDC,EAAAA,OAAO,GAAG;EACR,WAAO,KAAKC,KAAZ;EACD;;EAEDC,EAAAA,WAAW,GAAG;EACZ,WAAO,KAAKpB,UAAL,GAAkBqB,UAAlB,CAA6B,KAAKC,mBAAL,EAA7B,CAAP;EACD;;EAEDC,EAAAA,0BAA0B,CAACb,CAAD,EAAI;EAC5B,QAAIA,CAAC,CAACZ,WAAF,OAAoBF,QAAQ,CAACG,2BAAjC,EAA8D,MAAM,IAAI7d,wBAAJ,CAA6B,2DAA7B,CAAN;EAC/D;;EAEDsf,EAAAA,KAAK,CAAC1Y,CAAD,EAAIC,CAAJ,EAAOxH,SAAP,EAAkB;EACrB,QAAIA,SAAS,KAAK,CAAlB,EAAqB,OAAOuH,CAAC,CAACpD,MAAF,CAASqD,CAAT,CAAP;EAErB,WAAOD,CAAC,CAACR,QAAF,CAAWS,CAAX,KAAiBxH,SAAxB;EACD;;EAEDof,EAAAA,IAAI,GAAG;EACL,UAAM7Y,IAAI,GAAG,KAAKA,IAAL,EAAb;EACAA,IAAAA,IAAI,CAAC2Z,SAAL;EACA,WAAO3Z,IAAP;EACD;;EAED4Z,EAAAA,OAAO,GAAG;EACR,UAAMC,GAAG,GAAG,KAAKC,eAAL,EAAZ;EACA,QAAI,KAAKC,QAAL,IAAiB,IAArB,EAA2BF,GAAG,CAACE,QAAJ,GAAe,KAAKA,QAAL,CAAc/Z,IAAd,EAAf;EAE3B6Z,IAAAA,GAAG,CAACG,OAAJ,CAAY,KAAKZ,OAAL,EAAZ;EACA,WAAOS,GAAP;EACD;;EAED7Z,EAAAA,IAAI,GAAG;EACL,UAAMA,IAAI,GAAG,KAAKia,YAAL,EAAb;EACAja,IAAAA,IAAI,CAAC+Z,QAAL,GAAgB,KAAKrB,SAAL,IAAkB,IAAlB,GAAyB,IAAzB,GAAgC,KAAKA,SAAL,CAAe1Y,IAAf,EAAhD;EACAA,IAAAA,IAAI,CAACqZ,KAAL,GAAa,KAAKA,KAAlB;EACArZ,IAAAA,IAAI,CAACmZ,SAAL,GAAiB,KAAKA,SAAtB;EACA,WAAOnZ,IAAP;EACD;;EAEDka,EAAAA,iBAAiB,GAAG;EAClB,WAAO,KAAK/B,QAAL,CAAc+B,iBAAd,EAAP;EACD;;EAEDV,EAAAA,mBAAmB,GAAG;EACpB,QAAI,KAAKd,SAAL,KAAmB,IAAvB,EAA6B,KAAKA,SAAL,GAAiB,KAAKyB,uBAAL,EAAjB;EAE7B,WAAO,IAAI3U,QAAJ,CAAa,KAAKkT,SAAlB,CAAP;EACD;;EAEDsB,EAAAA,OAAO,CAACI,IAAD,EAAO;EACZ,SAAKf,KAAL,GAAae,IAAb;EACD;;EAEDC,EAAAA,WAAW,CAACC,QAAD,EAAW;EACpB,SAAKnB,SAAL,GAAiBmB,QAAjB;EACD;;EAEDvZ,EAAAA,OAAO,CAACC,CAAD,EAAIC,CAAJ,EAAO;EACZ,UAAMxG,CAAC,GAAGuG,CAAC,CAACgB,QAAF,EAAV;EACA,UAAMuY,CAAC,GAAGtZ,CAAC,CAACe,QAAF,EAAV;;EACA,WAAOvH,CAAC,CAACmJ,OAAF,MAAe2W,CAAC,CAAC3W,OAAF,EAAtB,EAAmC;EACjC,YAAM4W,QAAQ,GAAG/f,CAAC,CAACkJ,IAAF,EAAjB;EACA,YAAM8W,QAAQ,GAAGF,CAAC,CAAC5W,IAAF,EAAjB;EACA,YAAM+W,UAAU,GAAGF,QAAQ,CAAC/a,SAAT,CAAmBgb,QAAnB,CAAnB;EACA,UAAIC,UAAU,KAAK,CAAnB,EAAsB,OAAOA,UAAP;EACvB;;EACD,QAAIjgB,CAAC,CAACmJ,OAAF,EAAJ,EAAiB,OAAO,CAAP;EAEjB,QAAI2W,CAAC,CAAC3W,OAAF,EAAJ,EAAiB,OAAO,CAAC,CAAR;EAEjB,WAAO,CAAP;EACD;;EAEDpF,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAKgb,mBAAL,GAA2Bhb,QAA3B,EAAP;EACD;;EAEDmc,EAAAA,iBAAiB,CAAC1b,KAAD,EAAQ;EACvB,WAAO,KAAK2b,QAAL,OAAoB3b,KAAK,CAAC2b,QAAN,EAA3B;EACD;;EAEDC,EAAAA,6BAA6B,GAAG;EAC9B,QAAI,KAAK7C,WAAL,OAAuBF,QAAQ,CAACG,2BAAhC,IAA+D,KAAKD,WAAL,OAAuBF,QAAQ,CAACgD,mBAA/F,IAAsH,KAAK9C,WAAL,OAAuBF,QAAQ,CAACiD,wBAAtJ,IAAkL,KAAK/C,WAAL,OAAuBF,QAAQ,CAACkD,qBAAtN,EAA6O,OAAO,IAAP;EAE7O,WAAO,KAAP;EACD;;EAED,MAAIta,WAAJ,GAAkB;EAChB,WAAO,CAACC,QAAD,EAAY9D,UAAZ,EAAwBG,YAAxB,CAAP;EACD;;EAED4d,EAAAA,QAAQ,GAAG;EACT,WAAO9C,QAAP;EACD;;EAED,SAAOmD,mBAAP,CAA2BC,UAA3B,EAAuC;EACrC,SAAK,IAAIzgB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGygB,UAAU,CAAC5d,MAA/B,EAAuC7C,CAAC,EAAxC,EACE,IAAI,CAACygB,UAAU,CAACzgB,CAAD,CAAV,CAAcsH,OAAd,EAAL,EAA8B,OAAO,IAAP;;EAEhC,WAAO,KAAP;EACD;;EAED,SAAOoZ,eAAP,CAAuBzY,KAAvB,EAA8B;EAC5B,SAAK,IAAIjI,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiI,KAAK,CAACpF,MAA1B,EAAkC7C,CAAC,EAAnC,EACE,IAAIiI,KAAK,CAACjI,CAAD,CAAL,KAAa,IAAjB,EAAuB,OAAO,IAAP;;EAEzB,WAAO,KAAP;EACD;;EA/L2B;;EAiM9Bqd,QAAQ,CAAC3a,YAAT,GAAwB,UAASie,OAAT,EAAkB;EACxC,MAAI,CAACA,OAAL,EAAc;EACd,OAAK1C,SAAL,GAAiB,IAAjB;EACA,OAAKS,SAAL,GAAiB,IAAjB;EACA,OAAKhB,QAAL,GAAgBiD,OAAhB;EACA,OAAK/B,KAAL,GAAa+B,OAAO,CAAChC,OAAR,EAAb;EACD,CAND;;EAOAtB,QAAQ,CAACuD,cAAT,GAA0B,CAA1B;EACAvD,QAAQ,CAACgD,mBAAT,GAA+B,CAA/B;EACAhD,QAAQ,CAACwD,mBAAT,GAA+B,CAA/B;EACAxD,QAAQ,CAACyD,mBAAT,GAA+B,CAA/B;EACAzD,QAAQ,CAACiD,wBAAT,GAAoC,CAApC;EACAjD,QAAQ,CAAC0D,gBAAT,GAA4B,CAA5B;EACA1D,QAAQ,CAACkD,qBAAT,GAAiC,CAAjC;EACAlD,QAAQ,CAACG,2BAAT,GAAuC,CAAvC;EACAH,QAAQ,CAAC2D,cAAT,GAA0B,OAA1B;EACA3D,QAAQ,CAAC4D,mBAAT,GAA+B,YAA/B;EACA5D,QAAQ,CAAC6D,mBAAT,GAA+B,YAA/B;EACA7D,QAAQ,CAAC8D,mBAAT,GAA+B,YAA/B;EACA9D,QAAQ,CAAC+D,wBAAT,GAAoC,iBAApC;EACA/D,QAAQ,CAACgE,gBAAT,GAA4B,SAA5B;EACAhE,QAAQ,CAACiE,qBAAT,GAAiC,cAAjC;EACAjE,QAAQ,CAACkE,2BAAT,GAAuC,oBAAvC;EACAlE,QAAQ,CAACU,qBAAT,GAAiC;EAC/B,MAAI9X,WAAJ,GAAkB;EAChB,WAAO,CAACkX,uBAAD,CAAP;EACD,GAH8B;;EAI/BxS,EAAAA,MAAM,CAACyS,IAAD,EAAO;EACXA,IAAAA,IAAI,CAACY,qBAAL;EACD;;EAN8B,CAAjC;;EC9Ne,MAAMwD,gBAAN,CAAuB;EACpC7W,EAAAA,MAAM,CAACvF,KAAD,EAAQ;;EADsB;;ECCvB,MAAMqc,MAAN,CAAa;EAC1B,SAAOC,MAAP,CAAc7X,GAAd,EAAmB;EACjB,UAAMvJ,CAAC,GAAGuJ,GAAG,CAACrC,IAAJ,EAAV;EACA,QAAIlH,CAAC,IAAI,CAAT,EAAY,OAAO,GAAP;EACZ,QAAIuI,GAAG,GAAG,GAAV;EACA,UAAMwC,CAAC,GAAG,IAAI3H,UAAJ,EAAV;EACAmG,IAAAA,GAAG,CAACP,aAAJ,CAAkB,CAAlB,EAAqB+B,CAArB;EACA,QAAIsW,EAAE,GAAGtW,CAAC,CAAC1J,CAAX;EACA,QAAIigB,EAAE,GAAGvW,CAAC,CAACzJ,CAAX;;EACA,SAAK,IAAI5B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGM,CAApB,EAAuBN,CAAC,EAAxB,EAA4B;EAC1B6J,MAAAA,GAAG,CAACP,aAAJ,CAAkBtJ,CAAlB,EAAqBqL,CAArB;EACA,YAAMvM,EAAE,GAAGuM,CAAC,CAAC1J,CAAb;EACA,YAAM8J,EAAE,GAAGJ,CAAC,CAACzJ,CAAb;EACA,YAAM6D,EAAE,GAAG3G,EAAE,GAAG6iB,EAAhB;EACA,YAAMjc,EAAE,GAAG+F,EAAE,GAAGmW,EAAhB;EACA/Y,MAAAA,GAAG,IAAI5J,IAAI,CAAC2G,IAAL,CAAUH,EAAE,GAAGA,EAAL,GAAUC,EAAE,GAAGA,EAAzB,CAAP;EACAic,MAAAA,EAAE,GAAG7iB,EAAL;EACA8iB,MAAAA,EAAE,GAAGnW,EAAL;EACD;;EACD,WAAO5C,GAAP;EACD;;EApByB;;ECDb,MAAMgZ,MAAN,CAAa;;ECIb,MAAMC,mBAAN,CAA0B;EACvC,SAAOC,SAAP,CAAiB/G,GAAjB,EAAsBC,MAAtB,EAA8BC,IAA9B,EAAoCC,OAApC,EAA6C;EAC3C,UAAM6G,MAAM,GAAG/iB,IAAI,CAAC+M,GAAL,CAASgP,GAAG,CAAC1C,YAAJ,EAAT,EAA6B4C,IAAI,CAAC5C,YAAL,EAA7B,CAAf;;EACA,SAAK,IAAI2J,GAAG,GAAG,CAAf,EAAkBA,GAAG,GAAGD,MAAxB,EAAgCC,GAAG,EAAnC,EACE/G,IAAI,CAACjX,WAAL,CAAiBkX,OAAjB,EAA0B8G,GAA1B,EAA+BjH,GAAG,CAACpW,WAAJ,CAAgBqW,MAAhB,EAAwBgH,GAAxB,CAA/B;EAEH;;EACD,SAAOC,MAAP,CAActX,GAAd,EAAmB;EACjB,UAAMtK,CAAC,GAAGsK,GAAG,CAACpD,IAAJ,EAAV;EACA,QAAIlH,CAAC,KAAK,CAAV,EAAa,OAAO,IAAP;EACb,QAAIA,CAAC,IAAI,CAAT,EAAY,OAAO,KAAP;EACZ,WAAOsK,GAAG,CAAChG,WAAJ,CAAgB,CAAhB,EAAmBuT,kBAAkB,CAAChU,CAAtC,MAA6CyG,GAAG,CAAChG,WAAJ,CAAgBtE,CAAC,GAAG,CAApB,EAAuB6X,kBAAkB,CAAChU,CAA1C,CAA7C,IAA6FyG,GAAG,CAAChG,WAAJ,CAAgB,CAAhB,EAAmBuT,kBAAkB,CAAC/T,CAAtC,MAA6CwG,GAAG,CAAChG,WAAJ,CAAgBtE,CAAC,GAAG,CAApB,EAAuB6X,kBAAkB,CAAC/T,CAA1C,CAAjJ;EACD;;EACD,SAAO+d,MAAP,GAAgB;EACd,QAAIvf,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,UAAI0G,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAeuV,kBAAf,CAAZ,IAAkD5X,MAAM,CAAC4J,SAAP,CAAiBvH,SAAS,CAAC,CAAD,CAA1B,CAAtD,EAAsF;EACpF,cAAMgI,GAAG,GAAGhI,SAAS,CAAC,CAAD,CAArB;EAAA,cAA0Bwf,sBAAsB,GAAGxf,SAAS,CAAC,CAAD,CAA5D;EACAkf,QAAAA,mBAAmB,CAACK,MAApB,CAA2BvX,GAA3B,EAAgCwX,sBAAhC,EAAwDN,mBAAmB,CAACI,MAApB,CAA2BtX,GAA3B,CAAxD;EACD,OAHD,MAGO,IAAIrB,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAeuV,kBAAf,CAAZ,IAAkDvV,SAAS,CAAC,CAAD,CAAT,YAAwBc,UAA9E,EAA0F;EAC/F,cAAMkH,GAAG,GAAGhI,SAAS,CAAC,CAAD,CAArB;EAAA,cAA0Byf,eAAe,GAAGzf,SAAS,CAAC,CAAD,CAArD;EACA,cAAM5C,CAAC,GAAG8hB,mBAAmB,CAAC5a,OAApB,CAA4Bmb,eAA5B,EAA6CzX,GAA7C,CAAV;EACA,YAAI5K,CAAC,IAAI,CAAT,EAAY,OAAO,IAAP;EACZ8hB,QAAAA,mBAAmB,CAACK,MAApB,CAA2BvX,GAA3B,EAAgC5K,CAAhC;EACD;EACF,KAVD,MAUO,IAAI4C,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAM+H,GAAG,GAAGhI,SAAS,CAAC,CAAD,CAArB;EAAA,YAA0Bwf,sBAAsB,GAAGxf,SAAS,CAAC,CAAD,CAA5D;EAAA,YAAiE0f,UAAU,GAAG1f,SAAS,CAAC,CAAD,CAAvF;EACA,YAAM5C,CAAC,GAAGoiB,sBAAV;EACA,UAAIpiB,CAAC,IAAI,CAAT,EAAY,OAAO,IAAP;EACZ,YAAMuF,IAAI,GAAGqF,GAAG,CAACrF,IAAJ,EAAb;EACA,YAAMyE,IAAI,GAAGsY,UAAU,GAAG1X,GAAG,CAACpD,IAAJ,KAAa,CAAhB,GAAoBoD,GAAG,CAACpD,IAAJ,EAA3C;;EACA,WAAK,IAAIsY,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG9V,IAApB,EAA0B8V,CAAC,EAA3B,EACE,KAAK,IAAIyC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG3X,GAAG,CAAC0N,YAAJ,EAApB,EAAwCiK,CAAC,EAAzC,EAA6C3X,GAAG,CAAC3G,WAAJ,CAAgB6b,CAAhB,EAAmByC,CAAnB,EAAsBhd,IAAI,CAACX,WAAL,CAAiB,CAACwd,sBAAsB,GAAGtC,CAA1B,IAA+B9V,IAAhD,EAAsDuY,CAAtD,CAAtB;;EAE/C,UAAID,UAAJ,EACE,KAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG3X,GAAG,CAAC0N,YAAJ,EAApB,EAAwCiK,CAAC,EAAzC,EAA6C3X,GAAG,CAAC3G,WAAJ,CAAgB+F,IAAhB,EAAsBuY,CAAtB,EAAyB3X,GAAG,CAAChG,WAAJ,CAAgB,CAAhB,EAAmB2d,CAAnB,CAAzB;EAEhD;EACF;;EACD,SAAOC,OAAP,CAAeC,GAAf,EAAoBC,GAApB,EAAyB;EACvB,UAAMC,OAAO,GAAGF,GAAG,CAACjb,IAAJ,EAAhB;EACA,UAAMob,OAAO,GAAGF,GAAG,CAAClb,IAAJ,EAAhB;EACA,QAAImb,OAAO,KAAKC,OAAhB,EAAyB,OAAO,KAAP;EACzB,UAAMX,GAAG,GAAGhjB,IAAI,CAAC+M,GAAL,CAASyW,GAAG,CAACnK,YAAJ,EAAT,EAA6BoK,GAAG,CAACpK,YAAJ,EAA7B,CAAZ;;EACA,SAAK,IAAItY,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG2iB,OAApB,EAA6B3iB,CAAC,EAA9B,EACE,KAAK,IAAI2Q,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsR,GAApB,EAAyBtR,CAAC,EAA1B,EAA8B;EAC5B,YAAM8K,EAAE,GAAGgH,GAAG,CAAC7d,WAAJ,CAAgB5E,CAAhB,EAAmB2Q,CAAnB,CAAX;EACA,YAAM+K,EAAE,GAAGgH,GAAG,CAAC9d,WAAJ,CAAgB5E,CAAhB,EAAmB2Q,CAAnB,CAAX;EACA,UAAI8R,GAAG,CAAC7d,WAAJ,CAAgB5E,CAAhB,EAAmB2Q,CAAnB,MAA0B+R,GAAG,CAAC9d,WAAJ,CAAgB5E,CAAhB,EAAmB2Q,CAAnB,CAA9B,EAAqD;EACrD,UAAIxQ,MAAM,CAACE,KAAP,CAAaob,EAAb,KAAoBtb,MAAM,CAACE,KAAP,CAAaqb,EAAb,CAAxB,EAA0C;EAC1C,aAAO,KAAP;EACD;;EAEH,WAAO,IAAP;EACD;;EACD,SAAOmH,kBAAP,GAA4B;EAC1B,QAAIjgB,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAM+H,GAAG,GAAGhI,SAAS,CAAC,CAAD,CAArB;EACA,aAAOkf,mBAAmB,CAACe,kBAApB,CAAuCjY,GAAvC,EAA4C,CAA5C,EAA+CA,GAAG,CAACpD,IAAJ,KAAa,CAA5D,CAAP;EACD,KAHD,MAGO,IAAI5E,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAM+H,GAAG,GAAGhI,SAAS,CAAC,CAAD,CAArB;EAAA,YAA0BkgB,IAAI,GAAGlgB,SAAS,CAAC,CAAD,CAA1C;EAAA,YAA+CmgB,EAAE,GAAGngB,SAAS,CAAC,CAAD,CAA7D;EACA,UAAIogB,aAAa,GAAG,CAAC,CAArB;EACA,UAAIC,QAAQ,GAAG,IAAf;;EACA,WAAK,IAAIjjB,CAAC,GAAG8iB,IAAb,EAAmB9iB,CAAC,IAAI+iB,EAAxB,EAA4B/iB,CAAC,EAA7B,EAAiC;EAC/B,cAAMkjB,SAAS,GAAGtY,GAAG,CAACtB,aAAJ,CAAkBtJ,CAAlB,CAAlB;;EACA,YAAIijB,QAAQ,KAAK,IAAb,IAAqBA,QAAQ,CAACje,SAAT,CAAmBke,SAAnB,IAAgC,CAAzD,EAA4D;EAC1DD,UAAAA,QAAQ,GAAGC,SAAX;EACAF,UAAAA,aAAa,GAAGhjB,CAAhB;EACD;EACF;;EACD,aAAOgjB,aAAP;EACD;EACF;;EACD,SAAOG,MAAP,CAAcC,IAAd,EAAoBxY,GAApB,EAAyBpD,IAAzB,EAA+B;EAC7B,UAAM6b,MAAM,GAAGD,IAAI,CAACnG,MAAL,CAAYzV,IAAZ,EAAkBoD,GAAG,CAAC0N,YAAJ,EAAlB,CAAf;EACA,UAAMhY,CAAC,GAAGsK,GAAG,CAACpD,IAAJ,EAAV;EACAsa,IAAAA,mBAAmB,CAACvc,IAApB,CAAyBqF,GAAzB,EAA8B,CAA9B,EAAiCyY,MAAjC,EAAyC,CAAzC,EAA4C/iB,CAA5C;EACA,QAAIA,CAAC,GAAG,CAAR,EACE,KAAK,IAAIN,CAAC,GAAGM,CAAb,EAAgBN,CAAC,GAAGwH,IAApB,EAA0BxH,CAAC,EAA3B,EAA+B8hB,mBAAmB,CAACvc,IAApB,CAAyBqF,GAAzB,EAA8BtK,CAAC,GAAG,CAAlC,EAAqC+iB,MAArC,EAA6CrjB,CAA7C,EAAgD,CAAhD;EAEjC,WAAOqjB,MAAP;EACD;;EACD,SAAOlE,OAAP,CAAevU,GAAf,EAAoB;EAClB,UAAMZ,IAAI,GAAGY,GAAG,CAACpD,IAAJ,KAAa,CAA1B;EACA,UAAM8b,GAAG,GAAGrkB,IAAI,CAAC6S,KAAL,CAAW9H,IAAI,GAAG,CAAlB,CAAZ;;EACA,SAAK,IAAIhK,CAAC,GAAG,CAAb,EAAgBA,CAAC,IAAIsjB,GAArB,EAA0BtjB,CAAC,EAA3B,EACE8hB,mBAAmB,CAACyB,IAApB,CAAyB3Y,GAAzB,EAA8B5K,CAA9B,EAAiCgK,IAAI,GAAGhK,CAAxC;EAEH;;EACD,SAAOujB,IAAP,CAAY3Y,GAAZ,EAAiB5K,CAAjB,EAAoB8f,CAApB,EAAuB;EACrB,QAAI9f,CAAC,KAAK8f,CAAV,EAAa,OAAO,IAAP;;EACb,SAAK,IAAImC,GAAG,GAAG,CAAf,EAAkBA,GAAG,GAAGrX,GAAG,CAAC0N,YAAJ,EAAxB,EAA4C2J,GAAG,EAA/C,EAAmD;EACjD,YAAMuB,GAAG,GAAG5Y,GAAG,CAAChG,WAAJ,CAAgB5E,CAAhB,EAAmBiiB,GAAnB,CAAZ;EACArX,MAAAA,GAAG,CAAC3G,WAAJ,CAAgBjE,CAAhB,EAAmBiiB,GAAnB,EAAwBrX,GAAG,CAAChG,WAAJ,CAAgBkb,CAAhB,EAAmBmC,GAAnB,CAAxB;EACArX,MAAAA,GAAG,CAAC3G,WAAJ,CAAgB6b,CAAhB,EAAmBmC,GAAnB,EAAwBuB,GAAxB;EACD;EACF;;EACD,SAAOje,IAAP,CAAYyV,GAAZ,EAAiBC,MAAjB,EAAyBC,IAAzB,EAA+BC,OAA/B,EAAwCtY,MAAxC,EAAgD;EAC9C,SAAK,IAAI7C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6C,MAApB,EAA4B7C,CAAC,EAA7B,EACE8hB,mBAAmB,CAACC,SAApB,CAA8B/G,GAA9B,EAAmCC,MAAM,GAAGjb,CAA5C,EAA+Ckb,IAA/C,EAAqDC,OAAO,GAAGnb,CAA/D;EAEH;;EACD,SAAOyjB,eAAP,CAAuBL,IAAvB,EAA6BxY,GAA7B,EAAkC;EAChC,UAAMtK,CAAC,GAAGsK,GAAG,CAACpD,IAAJ,EAAV;EACA,QAAIlH,CAAC,KAAK,CAAV,EAAa,OAAOsK,GAAP;EACb,QAAItK,CAAC,IAAI,CAAT,EAAY,OAAOwhB,mBAAmB,CAAC4B,gBAApB,CAAqCN,IAArC,EAA2CxY,GAA3C,EAAgD,CAAhD,CAAP;EACZ,UAAM+Y,QAAQ,GAAG/Y,GAAG,CAAChG,WAAJ,CAAgB,CAAhB,EAAmBuT,kBAAkB,CAAChU,CAAtC,MAA6CyG,GAAG,CAAChG,WAAJ,CAAgBtE,CAAC,GAAG,CAApB,EAAuB6X,kBAAkB,CAAChU,CAA1C,CAA7C,IAA6FyG,GAAG,CAAChG,WAAJ,CAAgB,CAAhB,EAAmBuT,kBAAkB,CAAC/T,CAAtC,MAA6CwG,GAAG,CAAChG,WAAJ,CAAgBtE,CAAC,GAAG,CAApB,EAAuB6X,kBAAkB,CAAC/T,CAA1C,CAA3J;EACA,QAAIuf,QAAJ,EAAc,OAAO/Y,GAAP;EACd,WAAOkX,mBAAmB,CAAC4B,gBAApB,CAAqCN,IAArC,EAA2CxY,GAA3C,EAAgDtK,CAAC,GAAG,CAApD,CAAP;EACD;;EACD,SAAO4G,OAAP,CAAe0c,UAAf,EAA2BhZ,GAA3B,EAAgC;EAC9B,SAAK,IAAI5K,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG4K,GAAG,CAACpD,IAAJ,EAApB,EAAgCxH,CAAC,EAAjC,EACE,IAAI4jB,UAAU,CAACjiB,CAAX,KAAiBiJ,GAAG,CAAChG,WAAJ,CAAgB5E,CAAhB,EAAmBmY,kBAAkB,CAAChU,CAAtC,CAAjB,IAA6Dyf,UAAU,CAAChiB,CAAX,KAAiBgJ,GAAG,CAAChG,WAAJ,CAAgB5E,CAAhB,EAAmBmY,kBAAkB,CAAC/T,CAAtC,CAAlF,EACE,OAAOpE,CAAP;;EAGJ,WAAO,CAAC,CAAR;EACD;;EACD,SAAO0jB,gBAAP,CAAwBN,IAAxB,EAA8BxY,GAA9B,EAAmCpD,IAAnC,EAAyC;EACvC,UAAM6b,MAAM,GAAGD,IAAI,CAACnG,MAAL,CAAYzV,IAAZ,EAAkBoD,GAAG,CAAC0N,YAAJ,EAAlB,CAAf;EACA,UAAMhY,CAAC,GAAGsK,GAAG,CAACpD,IAAJ,EAAV;EACAsa,IAAAA,mBAAmB,CAACvc,IAApB,CAAyBqF,GAAzB,EAA8B,CAA9B,EAAiCyY,MAAjC,EAAyC,CAAzC,EAA4C/iB,CAA5C;;EACA,SAAK,IAAIN,CAAC,GAAGM,CAAb,EAAgBN,CAAC,GAAGwH,IAApB,EAA0BxH,CAAC,EAA3B,EAA+B8hB,mBAAmB,CAACvc,IAApB,CAAyBqF,GAAzB,EAA8B,CAA9B,EAAiCyY,MAAjC,EAAyCrjB,CAAzC,EAA4C,CAA5C;;EAC/B,WAAOqjB,MAAP;EACD;;EACD,SAAOQ,aAAP,CAAqBjZ,GAArB,EAA0B;EACxB,QAAIqY,QAAQ,GAAG,IAAf;;EACA,SAAK,IAAIjjB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG4K,GAAG,CAACpD,IAAJ,EAApB,EAAgCxH,CAAC,EAAjC,EAAqC;EACnC,YAAMkjB,SAAS,GAAGtY,GAAG,CAACtB,aAAJ,CAAkBtJ,CAAlB,CAAlB;EACA,UAAIijB,QAAQ,KAAK,IAAb,IAAqBA,QAAQ,CAACje,SAAT,CAAmBke,SAAnB,IAAgC,CAAzD,EACED,QAAQ,GAAGC,SAAX;EAEH;;EACD,WAAOD,QAAP;EACD;;EArIsC;;ECF1B,MAAMa,6BAAN,SAA4C3kB,SAA5C,CAAsD;EACnEE,EAAAA,WAAW,CAACC,OAAD,EAAU;EACnB,UAAMA,OAAN;EACA,SAAKC,IAAL,GAAYC,MAAM,CAACC,IAAP,CAAY;EAAEqkB,MAAAA;EAAF,KAAZ,EAA+C,CAA/C,CAAZ;EACD;;EAJkE;;ECAtD,MAAMC,SAAN,CAAgB;EAC7B,SAAOC,iBAAP,CAAyBC,cAAzB,EAAyC;EACvC,YAAQA,cAAR;EACA,WAAKF,SAAS,CAACG,KAAf;EACE,eAAOH,SAAS,CAACI,SAAjB;;EACF,WAAKJ,SAAS,CAACK,IAAf;EACE,eAAOL,SAAS,CAACM,QAAjB;;EACF,WAAKN,SAAS,CAACO,QAAf;EACE,eAAOP,SAAS,CAACQ,YAAjB;;EACF,WAAKR,SAAS,CAACS,CAAf;EACE,eAAOT,SAAS,CAACU,KAAjB;;EACF,WAAKV,SAAS,CAACW,CAAf;EACE,eAAOX,SAAS,CAACY,KAAjB;;EACF,WAAKZ,SAAS,CAAC7H,CAAf;EACE,eAAO6H,SAAS,CAACa,KAAjB;EAZF;;EAcA,UAAM,IAAIjlB,wBAAJ,CAA6B,8BAA8BskB,cAA3D,CAAN;EACD;;EACD,SAAOY,gBAAP,CAAwBC,eAAxB,EAAyC;EACvC,YAAQ7V,SAAS,CAACE,WAAV,CAAsB2V,eAAtB,CAAR;EACA,WAAKf,SAAS,CAACI,SAAf;EACE,eAAOJ,SAAS,CAACG,KAAjB;;EACF,WAAKH,SAAS,CAACM,QAAf;EACE,eAAON,SAAS,CAACK,IAAjB;;EACF,WAAKL,SAAS,CAACQ,YAAf;EACE,eAAOR,SAAS,CAACO,QAAjB;;EACF,WAAKP,SAAS,CAACU,KAAf;EACE,eAAOV,SAAS,CAACS,CAAjB;;EACF,WAAKT,SAAS,CAACY,KAAf;EACE,eAAOZ,SAAS,CAACW,CAAjB;;EACF,WAAKX,SAAS,CAACa,KAAf;EACE,eAAOb,SAAS,CAAC7H,CAAjB;EAZF;;EAcA,UAAM,IAAIvc,wBAAJ,CAA6B,+BAA+BmlB,eAA5D,CAAN;EACD;;EAlC4B;EAoC/Bf,SAAS,CAACS,CAAV,GAAc,CAAd;EACAT,SAAS,CAACW,CAAV,GAAc,CAAd;EACAX,SAAS,CAAC7H,CAAV,GAAc,CAAd;EACA6H,SAAS,CAACG,KAAV,GAAkB,CAAC,CAAnB;EACAH,SAAS,CAACK,IAAV,GAAiB,CAAC,CAAlB;EACAL,SAAS,CAACO,QAAV,GAAqB,CAAC,CAAtB;EACAP,SAAS,CAACI,SAAV,GAAsB,GAAtB;EACAJ,SAAS,CAACM,QAAV,GAAqB,GAArB;EACAN,SAAS,CAACQ,YAAV,GAAyB,GAAzB;EACAR,SAAS,CAACU,KAAV,GAAkB,GAAlB;EACAV,SAAS,CAACY,KAAV,GAAkB,GAAlB;EACAZ,SAAS,CAACa,KAAV,GAAkB,GAAlB;;ECjDe,MAAMG,cAAN,CAAqB;EAClCpa,EAAAA,MAAM,CAACyS,IAAD,EAAO;;EADqB;;ECarB,MAAM4H,UAAN,SAAyB3H,QAAzB,CAAkC;EAC/Che,EAAAA,WAAW,GAAG;EACZ;EACA2lB,IAAAA,UAAU,CAACtiB,YAAX,CAAwBC,KAAxB,CAA8B,IAA9B,EAAoCC,SAApC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKuiB,OAAL,GAAe,IAAf;;EACA,QAAIriB,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B,CAA5B,MAAoC,IAAID,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC9D,YAAMqiB,MAAM,GAAGtiB,SAAS,CAAC,CAAD,CAAxB;EAAA,YAA6B+d,OAAO,GAAG/d,SAAS,CAAC,CAAD,CAAhD;EACAya,MAAAA,QAAQ,CAAC3a,YAAT,CAAsBI,IAAtB,CAA2B,IAA3B,EAAiC6d,OAAjC;EACA,WAAKvV,IAAL,CAAU8Z,MAAV;EACD;EACF;;EACDxF,EAAAA,uBAAuB,GAAG;EACxB,QAAI,KAAKpY,OAAL,EAAJ,EACE,OAAO,IAAIyD,QAAJ,EAAP;EAEF,WAAO,KAAKka,OAAL,CAAatM,cAAb,CAA4B,IAAI5N,QAAJ,EAA5B,CAAP;EACD;;EACDmX,EAAAA,MAAM,GAAG;EACP,WAAO,KAAKyB,QAAL,MAAmB,KAAKwB,QAAL,EAA1B;EACD;;EACDC,EAAAA,cAAc,GAAG;EACf,WAAO,KAAKH,OAAL,CAAavb,iBAAb,EAAP;EACD;;EACD8V,EAAAA,YAAY,GAAG;EACb,WAAO,IAAIwF,UAAJ,CAAe,KAAKC,OAAL,CAAa1f,IAAb,EAAf,EAAoC,KAAKmY,QAAzC,CAAP;EACD;;EACDG,EAAAA,WAAW,GAAG;EACZ,QAAIjb,SAAS,CAACC,MAAV,KAAqB,CAArB,IAA2B,OAAOD,SAAS,CAAC,CAAD,CAAhB,KAAwB,QAAxB,IAAoCA,SAAS,CAAC,CAAD,CAAT,YAAwBya,QAA3F,EAAsG;EACpG,YAAM7Y,KAAK,GAAG5B,SAAS,CAAC,CAAD,CAAvB;EAAA,YAA4B5D,SAAS,GAAG4D,SAAS,CAAC,CAAD,CAAjD;EACA,UAAI,CAAC,KAAKsd,iBAAL,CAAuB1b,KAAvB,CAAL,EACE,OAAO,KAAP;EAEF,YAAM6gB,eAAe,GAAG7gB,KAAxB;EACA,UAAI,KAAKygB,OAAL,CAAazd,IAAb,OAAwB6d,eAAe,CAACJ,OAAhB,CAAwBzd,IAAxB,EAA5B,EACE,OAAO,KAAP;;EAEF,WAAK,IAAIxH,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKilB,OAAL,CAAazd,IAAb,EAApB,EAAyCxH,CAAC,EAA1C,EACE,IAAI,CAAC,KAAKif,KAAL,CAAW,KAAKgG,OAAL,CAAa3b,aAAb,CAA2BtJ,CAA3B,CAAX,EAA0CqlB,eAAe,CAACJ,OAAhB,CAAwB3b,aAAxB,CAAsCtJ,CAAtC,CAA1C,EAAoFhB,SAApF,CAAL,EACE,OAAO,KAAP;;EAGJ,aAAO,IAAP;EACD,KAfD,MAeO;EACL,aAAO,MAAM6e,WAAN,CAAkBlb,KAAlB,CAAwB,IAAxB,EAA8BC,SAA9B,CAAP;EACD;EACF;;EACDsc,EAAAA,SAAS,GAAG;EACV,SAAK,IAAIlf,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGf,IAAI,CAAC6S,KAAL,CAAW,KAAKmT,OAAL,CAAazd,IAAb,KAAsB,CAAjC,CAApB,EAAyDxH,CAAC,EAA1D,EAA8D;EAC5D,YAAM8f,CAAC,GAAG,KAAKmF,OAAL,CAAazd,IAAb,KAAsB,CAAtB,GAA0BxH,CAApC;;EACA,UAAI,CAAC,KAAKilB,OAAL,CAAa3b,aAAb,CAA2BtJ,CAA3B,EAA8BmD,MAA9B,CAAqC,KAAK8hB,OAAL,CAAa3b,aAAb,CAA2BwW,CAA3B,CAArC,CAAL,EAA0E;EACxE,YAAI,KAAKmF,OAAL,CAAa3b,aAAb,CAA2BtJ,CAA3B,EAA8BgF,SAA9B,CAAwC,KAAKigB,OAAL,CAAa3b,aAAb,CAA2BwW,CAA3B,CAAxC,IAAyE,CAA7E,EAAgF;EAC9E,gBAAMva,IAAI,GAAG,KAAK0f,OAAL,CAAa1f,IAAb,EAAb;;EACAuc,UAAAA,mBAAmB,CAAC3C,OAApB,CAA4B5Z,IAA5B;EACA,eAAK0f,OAAL,GAAe1f,IAAf;EACD;;EACD,eAAO,IAAP;EACD;EACF;EACF;;EACD+D,EAAAA,aAAa,GAAG;EACd,QAAI,KAAKhC,OAAL,EAAJ,EAAoB,OAAO,IAAP;EACpB,WAAO,KAAK2d,OAAL,CAAa3b,aAAb,CAA2B,CAA3B,CAAP;EACD;;EACDgc,EAAAA,oBAAoB,GAAG;EACrB,QAAI,KAAK3B,QAAL,EAAJ,EACE,OAAOI,SAAS,CAACG,KAAjB;EAEF,WAAO,CAAP;EACD;;EACDP,EAAAA,QAAQ,GAAG;EACT,QAAI,KAAKrc,OAAL,EAAJ,EACE,OAAO,KAAP;EAEF,WAAO,KAAKie,cAAL,CAAoB,CAApB,EAAuBhhB,QAAvB,CAAgC,KAAKghB,cAAL,CAAoB,KAAKC,YAAL,KAAsB,CAA1C,CAAhC,CAAP;EACD;;EACDnG,EAAAA,eAAe,GAAG;EAChB,UAAMzU,GAAG,GAAG,KAAKqa,OAAL,CAAa1f,IAAb,EAAZ;;EACAuc,IAAAA,mBAAmB,CAAC3C,OAApB,CAA4BvU,GAA5B;EACA,WAAO,KAAK6S,UAAL,GAAkBgI,gBAAlB,CAAmC7a,GAAnC,CAAP;EACD;;EACD8a,EAAAA,WAAW,GAAG;EACZ,QAAI,KAAKpe,OAAL,EAAJ,EACE,OAAO,IAAP;EAEF,WAAO,KAAKqe,SAAL,CAAe,KAAKH,YAAL,KAAsB,CAArC,CAAP;EACD;;EACDjI,EAAAA,WAAW,GAAG;EACZ,WAAOF,QAAQ,CAACwD,mBAAhB;EACD;;EACDvI,EAAAA,YAAY,GAAG;EACb,WAAO,CAAP;EACD;;EACD+F,EAAAA,SAAS,GAAG;EACV,WAAOoD,MAAM,CAACC,MAAP,CAAc,KAAKuD,OAAnB,CAAP;EACD;;EACDO,EAAAA,YAAY,GAAG;EACb,WAAO,KAAKP,OAAL,CAAazd,IAAb,EAAP;EACD;;EACD+W,EAAAA,kBAAkB,GAAG;EACnB,QAAI3b,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMoC,CAAC,GAAGrC,SAAS,CAAC,CAAD,CAAnB;EACA,YAAMia,IAAI,GAAG5X,CAAb;EACA,UAAIjF,CAAC,GAAG,CAAR;EACA,UAAI8f,CAAC,GAAG,CAAR;;EACA,aAAO9f,CAAC,GAAG,KAAKilB,OAAL,CAAazd,IAAb,EAAJ,IAA2BsY,CAAC,GAAGjD,IAAI,CAACoI,OAAL,CAAazd,IAAb,EAAtC,EAA2D;EACzD,cAAMyY,UAAU,GAAG,KAAKgF,OAAL,CAAa3b,aAAb,CAA2BtJ,CAA3B,EAA8BgF,SAA9B,CAAwC6X,IAAI,CAACoI,OAAL,CAAa3b,aAAb,CAA2BwW,CAA3B,CAAxC,CAAnB;;EACA,YAAIG,UAAU,KAAK,CAAnB,EACE,OAAOA,UAAP;EAEFjgB,QAAAA,CAAC;EACD8f,QAAAA,CAAC;EACF;;EACD,UAAI9f,CAAC,GAAG,KAAKilB,OAAL,CAAazd,IAAb,EAAR,EACE,OAAO,CAAP;EAEF,UAAIsY,CAAC,GAAGjD,IAAI,CAACoI,OAAL,CAAazd,IAAb,EAAR,EACE,OAAO,CAAC,CAAR;EAEF,aAAO,CAAP;EACD,KApBD,MAoBO,IAAI5E,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMoC,CAAC,GAAGrC,SAAS,CAAC,CAAD,CAAnB;EAAA,YAAwB4b,IAAI,GAAG5b,SAAS,CAAC,CAAD,CAAxC;EACA,YAAMia,IAAI,GAAG5X,CAAb;EACA,aAAOuZ,IAAI,CAAClY,OAAL,CAAa,KAAK2e,OAAlB,EAA2BpI,IAAI,CAACoI,OAAhC,CAAP;EACD;EACF;;EACDtiB,EAAAA,KAAK,GAAG;EACN,QAAI4G,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAe4e,gBAAf,CAAhB,EAAkD;EAChD,YAAM7W,MAAM,GAAG/H,SAAS,CAAC,CAAD,CAAxB;;EACA,WAAK,IAAI5C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKilB,OAAL,CAAazd,IAAb,EAApB,EAAyCxH,CAAC,EAA1C,EACE2K,MAAM,CAACA,MAAP,CAAc,KAAKsa,OAAL,CAAa3b,aAAb,CAA2BtJ,CAA3B,CAAd;EAEH,KALD,MAKO,IAAIuJ,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAe8H,wBAAf,CAAhB,EAA0D;EAC/D,YAAMC,MAAM,GAAG/H,SAAS,CAAC,CAAD,CAAxB;EACA,UAAI,KAAKqiB,OAAL,CAAazd,IAAb,OAAwB,CAA5B,EAA+B,OAAO,IAAP;;EAC/B,WAAK,IAAIxH,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKilB,OAAL,CAAazd,IAAb,EAApB,EAAyCxH,CAAC,EAA1C,EAA8C;EAC5C2K,QAAAA,MAAM,CAACA,MAAP,CAAc,KAAKsa,OAAnB,EAA4BjlB,CAA5B;EACA,YAAI2K,MAAM,CAACE,MAAP,EAAJ,EAAqB;EACtB;;EACD,UAAIF,MAAM,CAACG,iBAAP,EAAJ,EAAgC,KAAKgT,eAAL;EACjC,KARM,MAQA,IAAIvU,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAemiB,cAAf,CAAhB,EAAgD;EACrD,YAAMpa,MAAM,GAAG/H,SAAS,CAAC,CAAD,CAAxB;EACA+H,MAAAA,MAAM,CAACA,MAAP,CAAc,IAAd;EACD,KAHM,MAGA,IAAIpB,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAeua,uBAAf,CAAhB,EAAyD;EAC9D,YAAMxS,MAAM,GAAG/H,SAAS,CAAC,CAAD,CAAxB;EACA+H,MAAAA,MAAM,CAACA,MAAP,CAAc,IAAd;EACD;EACF;;EACDib,EAAAA,WAAW,GAAG;EACZ,UAAM,IAAI9B,6BAAJ,EAAN;EACD;;EACD5D,EAAAA,iBAAiB,CAAC1b,KAAD,EAAQ;EACvB,WAAOA,KAAK,YAAYwgB,UAAxB;EACD;;EACDO,EAAAA,cAAc,CAACjlB,CAAD,EAAI;EAChB,WAAO,KAAK2kB,OAAL,CAAa3b,aAAb,CAA2BhJ,CAA3B,CAAP;EACD;;EACDulB,EAAAA,eAAe,GAAG;EAChB,WAAOxI,QAAQ,CAAC6D,mBAAhB;EACD;;EACD4E,EAAAA,qBAAqB,GAAG;EACtB,WAAO,KAAKb,OAAZ;EACD;;EACD3d,EAAAA,OAAO,GAAG;EACR,WAAO,KAAK2d,OAAL,CAAazd,IAAb,OAAwB,CAA/B;EACD;;EACD4D,EAAAA,IAAI,CAAC8Z,MAAD,EAAS;EACX,QAAIA,MAAM,KAAK,IAAf,EACEA,MAAM,GAAG,KAAKzH,UAAL,GAAkBsI,4BAAlB,GAAiD9I,MAAjD,CAAwD,EAAxD,CAAT;EAEF,QAAIiI,MAAM,CAAC1d,IAAP,OAAkB,CAAtB,EACE,MAAM,IAAI7H,wBAAJ,CAA6B,mDAAmDulB,MAAM,CAAC1d,IAAP,EAAnD,GAAmE,uBAAhG,CAAN;EAEF,SAAKyd,OAAL,GAAeC,MAAf;EACD;;EACDc,EAAAA,YAAY,CAACC,EAAD,EAAK;EACf,SAAK,IAAIjmB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKilB,OAAL,CAAazd,IAAb,EAApB,EAAyCxH,CAAC,EAA1C,EACE,IAAI,KAAKilB,OAAL,CAAa3b,aAAb,CAA2BtJ,CAA3B,EAA8BmD,MAA9B,CAAqC8iB,EAArC,CAAJ,EACE,OAAO,IAAP;;EAGJ,WAAO,KAAP;EACD;;EACDC,EAAAA,aAAa,GAAG;EACd,QAAI,KAAK5e,OAAL,EAAJ,EACE,OAAO,IAAP;EAEF,WAAO,KAAKqe,SAAL,CAAe,CAAf,CAAP;EACD;;EACDA,EAAAA,SAAS,CAACrlB,CAAD,EAAI;EACX,WAAO,KAAKmd,UAAL,GAAkB0I,WAAlB,CAA8B,KAAKlB,OAAL,CAAa3b,aAAb,CAA2BhJ,CAA3B,CAA9B,CAAP;EACD;;EACD,MAAI2F,WAAJ,GAAkB;EAChB,WAAO,CAAC4b,MAAD,CAAP;EACD;;EAnM8C;;ECblC,MAAMuE,MAAN,CAAa;;ECUb,MAAMC,KAAN,SAAoBhJ,QAApB,CAA6B;EAC1Che,EAAAA,WAAW,GAAG;EACZ;EACAgnB,IAAAA,KAAK,CAAC3jB,YAAN,CAAmBC,KAAnB,CAAyB,IAAzB,EAA+BC,SAA/B;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK4jB,YAAL,GAAoB,IAApB;EACA,UAAMC,WAAW,GAAG3jB,SAAS,CAAC,CAAD,CAA7B;EAAA,UAAkC+d,OAAO,GAAG/d,SAAS,CAAC,CAAD,CAArD;EACAya,IAAAA,QAAQ,CAAC3a,YAAT,CAAsBI,IAAtB,CAA2B,IAA3B,EAAiC6d,OAAjC;EACA,SAAKvV,IAAL,CAAUmb,WAAV;EACD;;EACD7G,EAAAA,uBAAuB,GAAG;EACxB,QAAI,KAAKpY,OAAL,EAAJ,EACE,OAAO,IAAIyD,QAAJ,EAAP;EAEF,UAAMO,GAAG,GAAG,IAAIP,QAAJ,EAAZ;EACAO,IAAAA,GAAG,CAACqC,eAAJ,CAAoB,KAAK2Y,YAAL,CAAkBphB,IAAlB,CAAuB,CAAvB,CAApB,EAA+C,KAAKohB,YAAL,CAAkBzgB,IAAlB,CAAuB,CAAvB,CAA/C;EACA,WAAOyF,GAAP;EACD;;EACD8Z,EAAAA,cAAc,GAAG;EACf,WAAO,KAAK9d,OAAL,KAAiB,EAAjB,GAAsB,CAAC,KAAKgC,aAAL,EAAD,CAA7B;EACD;;EACDkW,EAAAA,YAAY,GAAG;EACb,WAAO,IAAI6G,KAAJ,CAAU,KAAKC,YAAL,CAAkB/gB,IAAlB,EAAV,EAAoC,KAAKmY,QAAzC,CAAP;EACD;;EACDG,EAAAA,WAAW,GAAG;EACZ,QAAIjb,SAAS,CAACC,MAAV,KAAqB,CAArB,IAA2B,OAAOD,SAAS,CAAC,CAAD,CAAhB,KAAwB,QAAxB,IAAoCA,SAAS,CAAC,CAAD,CAAT,YAAwBya,QAA3F,EAAsG;EACpG,YAAM7Y,KAAK,GAAG5B,SAAS,CAAC,CAAD,CAAvB;EAAA,YAA4B5D,SAAS,GAAG4D,SAAS,CAAC,CAAD,CAAjD;EACA,UAAI,CAAC,KAAKsd,iBAAL,CAAuB1b,KAAvB,CAAL,EACE,OAAO,KAAP;EAEF,UAAI,KAAK8C,OAAL,MAAkB9C,KAAK,CAAC8C,OAAN,EAAtB,EACE,OAAO,IAAP;EAEF,UAAI,KAAKA,OAAL,OAAmB9C,KAAK,CAAC8C,OAAN,EAAvB,EACE,OAAO,KAAP;EAEF,aAAO,KAAK2X,KAAL,CAAWza,KAAK,CAAC8E,aAAN,EAAX,EAAkC,KAAKA,aAAL,EAAlC,EAAwDtK,SAAxD,CAAP;EACD,KAZD,MAYO;EACL,aAAO,MAAM6e,WAAN,CAAkBlb,KAAlB,CAAwB,IAAxB,EAA8BC,SAA9B,CAAP;EACD;EACF;;EACDsc,EAAAA,SAAS,GAAG;;EACZ5V,EAAAA,aAAa,GAAG;EACd,WAAO,KAAKgd,YAAL,CAAkB9e,IAAlB,OAA6B,CAA7B,GAAiC,KAAK8e,YAAL,CAAkBhd,aAAlB,CAAgC,CAAhC,CAAjC,GAAsE,IAA7E;EACD;;EACDgc,EAAAA,oBAAoB,GAAG;EACrB,WAAOvB,SAAS,CAACG,KAAjB;EACD;;EACD7E,EAAAA,eAAe,GAAG;EAChB,WAAO,KAAK5B,UAAL,GAAkB0I,WAAlB,CAA8B,KAAKG,YAAL,CAAkB/gB,IAAlB,EAA9B,CAAP;EACD;;EACDgY,EAAAA,WAAW,GAAG;EACZ,WAAOF,QAAQ,CAACuD,cAAhB;EACD;;EACDtI,EAAAA,YAAY,GAAG;EACb,WAAO,CAAP;EACD;;EACDkN,EAAAA,YAAY,GAAG;EACb,WAAO,KAAKle,OAAL,KAAiB,CAAjB,GAAqB,CAA5B;EACD;;EACDpC,EAAAA,IAAI,GAAG;EACL,QAAI,KAAKoE,aAAL,OAAyB,IAA7B,EACE,MAAM,IAAI2M,qBAAJ,CAA0B,4BAA1B,CAAN;EAEF,WAAO,KAAK3M,aAAL,GAAqB3H,CAA5B;EACD;;EACD4c,EAAAA,kBAAkB,GAAG;EACnB,QAAI3b,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAM2B,KAAK,GAAG5B,SAAS,CAAC,CAAD,CAAvB;EACA,YAAM4jB,KAAK,GAAGhiB,KAAd;EACA,aAAO,KAAK8E,aAAL,GAAqBtE,SAArB,CAA+BwhB,KAAK,CAACld,aAAN,EAA/B,CAAP;EACD,KAJD,MAIO,IAAI1G,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAM2B,KAAK,GAAG5B,SAAS,CAAC,CAAD,CAAvB;EAAA,YAA4B4b,IAAI,GAAG5b,SAAS,CAAC,CAAD,CAA5C;EACA,YAAM4jB,KAAK,GAAGhiB,KAAd;EACA,aAAOga,IAAI,CAAClY,OAAL,CAAa,KAAKggB,YAAlB,EAAgCE,KAAK,CAACF,YAAtC,CAAP;EACD;EACF;;EACD3jB,EAAAA,KAAK,GAAG;EACN,QAAI4G,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAe4e,gBAAf,CAAhB,EAAkD;EAChD,YAAM7W,MAAM,GAAG/H,SAAS,CAAC,CAAD,CAAxB;EACA,UAAI,KAAK0E,OAAL,EAAJ,EACE,OAAO,IAAP;EAEFqD,MAAAA,MAAM,CAACA,MAAP,CAAc,KAAKrB,aAAL,EAAd;EACD,KAND,MAMO,IAAIC,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAe8H,wBAAf,CAAhB,EAA0D;EAC/D,YAAMC,MAAM,GAAG/H,SAAS,CAAC,CAAD,CAAxB;EACA,UAAI,KAAK0E,OAAL,EAAJ,EAAoB,OAAO,IAAP;EACpBqD,MAAAA,MAAM,CAACA,MAAP,CAAc,KAAK2b,YAAnB,EAAiC,CAAjC;EACA,UAAI3b,MAAM,CAACG,iBAAP,EAAJ,EAAgC,KAAKgT,eAAL;EACjC,KALM,MAKA,IAAIvU,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAemiB,cAAf,CAAhB,EAAgD;EACrD,YAAMpa,MAAM,GAAG/H,SAAS,CAAC,CAAD,CAAxB;EACA+H,MAAAA,MAAM,CAACA,MAAP,CAAc,IAAd;EACD,KAHM,MAGA,IAAIpB,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAeua,uBAAf,CAAhB,EAAyD;EAC9D,YAAMxS,MAAM,GAAG/H,SAAS,CAAC,CAAD,CAAxB;EACA+H,MAAAA,MAAM,CAACA,MAAP,CAAc,IAAd;EACD;EACF;;EACDib,EAAAA,WAAW,GAAG;EACZ,WAAO,KAAKnI,UAAL,GAAkBgJ,wBAAlB,EAAP;EACD;;EACDZ,EAAAA,eAAe,GAAG;EAChB,WAAOxI,QAAQ,CAAC2D,cAAhB;EACD;;EACD8E,EAAAA,qBAAqB,GAAG;EACtB,WAAO,KAAKQ,YAAZ;EACD;;EACDzgB,EAAAA,IAAI,GAAG;EACL,QAAI,KAAKyD,aAAL,OAAyB,IAA7B,EACE,MAAM,IAAI2M,qBAAJ,CAA0B,4BAA1B,CAAN;EAEF,WAAO,KAAK3M,aAAL,GAAqB1H,CAA5B;EACD;;EACD0F,EAAAA,OAAO,GAAG;EACR,WAAO,KAAKgf,YAAL,CAAkB9e,IAAlB,OAA6B,CAApC;EACD;;EACD4D,EAAAA,IAAI,CAACmb,WAAD,EAAc;EAChB,QAAIA,WAAW,KAAK,IAApB,EACEA,WAAW,GAAG,KAAK9I,UAAL,GAAkBsI,4BAAlB,GAAiD9I,MAAjD,CAAwD,EAAxD,CAAd;EAEFla,IAAAA,MAAM,CAACE,MAAP,CAAcsjB,WAAW,CAAC/e,IAAZ,MAAsB,CAApC;EACA,SAAK8e,YAAL,GAAoBC,WAApB;EACD;;EACDpB,EAAAA,QAAQ,GAAG;EACT,WAAO,IAAP;EACD;;EACD,MAAIlf,WAAJ,GAAkB;EAChB,WAAO,CAACmgB,MAAD,CAAP;EACD;;EAhIyC;;ECP7B,MAAMM,IAAN,CAAW;EACxB,SAAOC,MAAP,GAAgB;EACd,QAAI/jB,SAAS,CAAC,CAAD,CAAT,YAAwBkH,KAA5B,EAAmC;EACjC,YAAMgP,IAAI,GAAGlW,SAAS,CAAC,CAAD,CAAtB;EACA,aAAO3D,IAAI,CAACC,GAAL,CAASwnB,IAAI,CAACE,YAAL,CAAkB9N,IAAlB,CAAT,CAAP;EACD,KAHD,MAGO,IAAIvP,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAeuV,kBAAf,CAAhB,EAAoD;EACzD,YAAMW,IAAI,GAAGlW,SAAS,CAAC,CAAD,CAAtB;EACA,aAAO3D,IAAI,CAACC,GAAL,CAASwnB,IAAI,CAACE,YAAL,CAAkB9N,IAAlB,CAAT,CAAP;EACD;EACF;;EACD,SAAO8N,YAAP,GAAsB;EACpB,QAAIhkB,SAAS,CAAC,CAAD,CAAT,YAAwBkH,KAA5B,EAAmC;EACjC,YAAMgP,IAAI,GAAGlW,SAAS,CAAC,CAAD,CAAtB;EACA,UAAIkW,IAAI,CAACjW,MAAL,GAAc,CAAlB,EAAqB,OAAO,GAAP;EACrB,UAAIgkB,GAAG,GAAG,GAAV;EACA,YAAMlF,EAAE,GAAG7I,IAAI,CAAC,CAAD,CAAJ,CAAQnX,CAAnB;;EACA,WAAK,IAAI3B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG8Y,IAAI,CAACjW,MAAL,GAAc,CAAlC,EAAqC7C,CAAC,EAAtC,EAA0C;EACxC,cAAM2B,CAAC,GAAGmX,IAAI,CAAC9Y,CAAD,CAAJ,CAAQ2B,CAAR,GAAYggB,EAAtB;EACA,cAAMlW,EAAE,GAAGqN,IAAI,CAAC9Y,CAAC,GAAG,CAAL,CAAJ,CAAY4B,CAAvB;EACA,cAAM8J,EAAE,GAAGoN,IAAI,CAAC9Y,CAAC,GAAG,CAAL,CAAJ,CAAY4B,CAAvB;EACAilB,QAAAA,GAAG,IAAIllB,CAAC,IAAI+J,EAAE,GAAGD,EAAT,CAAR;EACD;;EACD,aAAOob,GAAG,GAAG,GAAb;EACD,KAZD,MAYO,IAAItd,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAeuV,kBAAf,CAAhB,EAAoD;EACzD,YAAMW,IAAI,GAAGlW,SAAS,CAAC,CAAD,CAAtB;EACA,YAAMtC,CAAC,GAAGwY,IAAI,CAACtR,IAAL,EAAV;EACA,UAAIlH,CAAC,GAAG,CAAR,EAAW,OAAO,GAAP;EACX,YAAMwmB,EAAE,GAAG,IAAIpjB,UAAJ,EAAX;EACA,YAAM6H,EAAE,GAAG,IAAI7H,UAAJ,EAAX;EACA,YAAM8H,EAAE,GAAG,IAAI9H,UAAJ,EAAX;EACAoV,MAAAA,IAAI,CAACxP,aAAL,CAAmB,CAAnB,EAAsBiC,EAAtB;EACAuN,MAAAA,IAAI,CAACxP,aAAL,CAAmB,CAAnB,EAAsBkC,EAAtB;EACA,YAAMmW,EAAE,GAAGpW,EAAE,CAAC5J,CAAd;EACA6J,MAAAA,EAAE,CAAC7J,CAAH,IAAQggB,EAAR;EACA,UAAIkF,GAAG,GAAG,GAAV;;EACA,WAAK,IAAI7mB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGM,CAAC,GAAG,CAAxB,EAA2BN,CAAC,EAA5B,EAAgC;EAC9B8mB,QAAAA,EAAE,CAACllB,CAAH,GAAO2J,EAAE,CAAC3J,CAAV;EACA2J,QAAAA,EAAE,CAAC5J,CAAH,GAAO6J,EAAE,CAAC7J,CAAV;EACA4J,QAAAA,EAAE,CAAC3J,CAAH,GAAO4J,EAAE,CAAC5J,CAAV;EACAkX,QAAAA,IAAI,CAACxP,aAAL,CAAmBtJ,CAAC,GAAG,CAAvB,EAA0BwL,EAA1B;EACAA,QAAAA,EAAE,CAAC7J,CAAH,IAAQggB,EAAR;EACAkF,QAAAA,GAAG,IAAItb,EAAE,CAAC5J,CAAH,IAAQmlB,EAAE,CAACllB,CAAH,GAAO4J,EAAE,CAAC5J,CAAlB,CAAP;EACD;;EACD,aAAOilB,GAAG,GAAG,GAAb;EACD;EACF;;EA7CuB;;ECD1B;EACA;EACA;;EACe,MAAME,MAAN,CAAa;EAC1B,SAAOre,IAAP,GAAc;EACZ,UAAMnC,CAAC,GAAG3D,SAAS,CAAC,CAAD,CAAnB;;EACA,QAAIA,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B0D,MAAAA,CAAC,CAACmC,IAAF,CAAO,CAACnC,CAAD,EAAIC,CAAJ,KAAUD,CAAC,CAACvB,SAAF,CAAYwB,CAAZ,CAAjB;EACD,KAFD,MAEO,IAAI5D,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC0D,MAAAA,CAAC,CAACmC,IAAF,CAAO,CAACnC,CAAD,EAAIC,CAAJ,KAAU5D,SAAS,CAAC,CAAD,CAAT,CAAa0D,OAAb,CAAqBC,CAArB,EAAwBC,CAAxB,CAAjB;EACD,KAFM,MAEA,IAAI5D,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMsS,CAAC,GAAG5O,CAAC,CAACqC,KAAF,CAAQhG,SAAS,CAAC,CAAD,CAAjB,EAAsBA,SAAS,CAAC,CAAD,CAA/B,CAAV;EACAuS,MAAAA,CAAC,CAACzM,IAAF;EACA,YAAMyL,CAAC,GAAG5N,CAAC,CAACqC,KAAF,CAAQ,CAAR,EAAWhG,SAAS,CAAC,CAAD,CAApB,EAAyBokB,MAAzB,CAAgC7R,CAAhC,EAAmC5O,CAAC,CAACqC,KAAF,CAAQhG,SAAS,CAAC,CAAD,CAAjB,EAAsB2D,CAAC,CAAC1D,MAAxB,CAAnC,CAAV;EACA0D,MAAAA,CAAC,CAAC6B,MAAF,CAAS,CAAT,EAAY7B,CAAC,CAAC1D,MAAd;;EACA,WAAK,MAAMwC,CAAX,IAAgB8O,CAAhB,EACE5N,CAAC,CAAC4B,IAAF,CAAO9C,CAAP;EACH,KAPM,MAOA,IAAIzC,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMsS,CAAC,GAAG5O,CAAC,CAACqC,KAAF,CAAQhG,SAAS,CAAC,CAAD,CAAjB,EAAsBA,SAAS,CAAC,CAAD,CAA/B,CAAV;EACAuS,MAAAA,CAAC,CAACzM,IAAF,CAAO,CAACnC,CAAD,EAAIC,CAAJ,KAAU5D,SAAS,CAAC,CAAD,CAAT,CAAa0D,OAAb,CAAqBC,CAArB,EAAwBC,CAAxB,CAAjB;EACA,YAAM2N,CAAC,GAAG5N,CAAC,CAACqC,KAAF,CAAQ,CAAR,EAAWhG,SAAS,CAAC,CAAD,CAApB,EAAyBokB,MAAzB,CAAgC7R,CAAhC,EAAmC5O,CAAC,CAACqC,KAAF,CAAQhG,SAAS,CAAC,CAAD,CAAjB,EAAsB2D,CAAC,CAAC1D,MAAxB,CAAnC,CAAV;EACA0D,MAAAA,CAAC,CAAC6B,MAAF,CAAS,CAAT,EAAY7B,CAAC,CAAC1D,MAAd;;EACA,WAAK,MAAMwC,CAAX,IAAgB8O,CAAhB,EACE5N,CAAC,CAAC4B,IAAF,CAAO9C,CAAP;EACH;EACF;EAED;EACF;EACA;EACA;;;EACE,SAAO4hB,MAAP,CAAchf,KAAd,EAAqB;EACnB,UAAMe,SAAS,GAAG,IAAIhB,SAAJ,EAAlB;;EACA,SAAK,MAAM3C,CAAX,IAAgB4C,KAAhB,EACEe,SAAS,CAAC5B,GAAV,CAAc/B,CAAd;;EACF,WAAO2D,SAAP;EACD;;EAED,SAAOke,MAAP,CAAcC,QAAd,EAAwBC,SAAxB,EAAmC;EACjC,WAAOD,QAAQ,CAACve,KAAT,CAAe,CAAf,EAAkBwe,SAAlB,CAAP;EACD;;EArCyB;;ECLb,MAAMC,SAAN,CAAgB;;ECYhB,MAAMC,OAAN,SAAsBjK,QAAtB,CAA+B;EAC5Che,EAAAA,WAAW,GAAG;EACZ;EACAioB,IAAAA,OAAO,CAAC5kB,YAAR,CAAqBC,KAArB,CAA2B,IAA3B,EAAiCC,SAAjC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK6kB,MAAL,GAAc,IAAd;EACA,SAAKC,MAAL,GAAc,IAAd;EACA,QAAIC,KAAK,GAAG7kB,SAAS,CAAC,CAAD,CAArB;EAAA,QAA0B8kB,KAAK,GAAG9kB,SAAS,CAAC,CAAD,CAA3C;EAAA,QAAgD+d,OAAO,GAAG/d,SAAS,CAAC,CAAD,CAAnE;EACAya,IAAAA,QAAQ,CAAC3a,YAAT,CAAsBI,IAAtB,CAA2B,IAA3B,EAAiC6d,OAAjC;EACA,QAAI8G,KAAK,KAAK,IAAd,EACEA,KAAK,GAAG,KAAKhK,UAAL,GAAkBkK,gBAAlB,EAAR;EAEF,QAAID,KAAK,KAAK,IAAd,EACEA,KAAK,GAAG,EAAR;EAEF,QAAIrK,QAAQ,CAACqD,eAAT,CAAyBgH,KAAzB,CAAJ,EACE,MAAM,IAAI/nB,wBAAJ,CAA6B,sCAA7B,CAAN;EAEF,QAAI8nB,KAAK,CAACngB,OAAN,MAAmB+V,QAAQ,CAACmD,mBAAT,CAA6BkH,KAA7B,CAAvB,EACE,MAAM,IAAI/nB,wBAAJ,CAA6B,kCAA7B,CAAN;EAEF,SAAK4nB,MAAL,GAAcE,KAAd;EACA,SAAKD,MAAL,GAAcE,KAAd;EACD;;EACDhI,EAAAA,uBAAuB,GAAG;EACxB,WAAO,KAAK6H,MAAL,CAAYxI,mBAAZ,EAAP;EACD;;EACDqG,EAAAA,cAAc,GAAG;EACf,QAAI,KAAK9d,OAAL,EAAJ,EACE,OAAO,EAAP;EAEF,UAAMif,WAAW,GAAG,IAAIzc,KAAJ,CAAU,KAAK0b,YAAL,EAAV,EAA+Bzb,IAA/B,CAAoC,IAApC,CAApB;EACA,QAAIwY,CAAC,GAAG,CAAC,CAAT;;EACA,UAAMqF,gBAAgB,GAAG,KAAKL,MAAL,CAAYnC,cAAZ,EAAzB;;EACA,SAAK,IAAIzjB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGimB,gBAAgB,CAAC/kB,MAArC,EAA6ClB,CAAC,EAA9C,EAAkD;EAChD4gB,MAAAA,CAAC;EACDgE,MAAAA,WAAW,CAAChE,CAAD,CAAX,GAAiBqF,gBAAgB,CAACjmB,CAAD,CAAjC;EACD;;EACD,SAAK,IAAI3B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKwnB,MAAL,CAAY3kB,MAAhC,EAAwC7C,CAAC,EAAzC,EAA6C;EAC3C,YAAM6nB,gBAAgB,GAAG,KAAKL,MAAL,CAAYxnB,CAAZ,EAAeolB,cAAf,EAAzB;;EACA,WAAK,IAAItF,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG+H,gBAAgB,CAAChlB,MAArC,EAA6Cid,CAAC,EAA9C,EAAkD;EAChDyC,QAAAA,CAAC;EACDgE,QAAAA,WAAW,CAAChE,CAAD,CAAX,GAAiBsF,gBAAgB,CAAC/H,CAAD,CAAjC;EACD;EACF;;EACD,WAAOyG,WAAP;EACD;;EACDla,EAAAA,OAAO,GAAG;EACR,QAAIyb,IAAI,GAAG,GAAX;EACAA,IAAAA,IAAI,IAAIpB,IAAI,CAACC,MAAL,CAAY,KAAKY,MAAL,CAAYzB,qBAAZ,EAAZ,CAAR;;EACA,SAAK,IAAI9lB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKwnB,MAAL,CAAY3kB,MAAhC,EAAwC7C,CAAC,EAAzC,EACE8nB,IAAI,IAAIpB,IAAI,CAACC,MAAL,CAAY,KAAKa,MAAL,CAAYxnB,CAAZ,EAAe8lB,qBAAf,EAAZ,CAAR;;EAEF,WAAOgC,IAAP;EACD;;EACDtI,EAAAA,YAAY,GAAG;EACb,UAAMuI,SAAS,GAAG,KAAKR,MAAL,CAAYhiB,IAAZ,EAAlB;;EACA,UAAMyiB,UAAU,GAAG,IAAIle,KAAJ,CAAU,KAAK0d,MAAL,CAAY3kB,MAAtB,EAA8BkH,IAA9B,CAAmC,IAAnC,CAAnB;;EACA,SAAK,IAAI/J,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKwnB,MAAL,CAAY3kB,MAAhC,EAAwC7C,CAAC,EAAzC,EACEgoB,UAAU,CAAChoB,CAAD,CAAV,GAAgB,KAAKwnB,MAAL,CAAYxnB,CAAZ,EAAeuF,IAAf,EAAhB;;EAEF,WAAO,IAAI+hB,OAAJ,CAAYS,SAAZ,EAAuBC,UAAvB,EAAmC,KAAKtK,QAAxC,CAAP;EACD;;EACDE,EAAAA,WAAW,GAAG;EACZ,QAAI,KAAKqK,kBAAL,OAA8B,CAAlC,EAAqC,OAAO,KAAP;EACrC,QAAI,KAAKV,MAAL,KAAgB,IAApB,EAA0B,OAAO,KAAP;EAC1B,QAAI,KAAKA,MAAL,CAAY/B,YAAZ,OAA+B,CAAnC,EAAsC,OAAO,KAAP;;EACtC,UAAM5a,GAAG,GAAG,KAAK2c,MAAL,CAAYzB,qBAAZ,EAAZ;;EACA,UAAMxa,GAAG,GAAG,KAAKyT,mBAAL,EAAZ;;EACA,SAAK,IAAI/e,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,CAApB,EAAuBA,CAAC,EAAxB,EAA4B;EAC1B,YAAM2B,CAAC,GAAGiJ,GAAG,CAAC1F,IAAJ,CAASlF,CAAT,CAAV;EACA,UAAI,EAAE2B,CAAC,KAAK2J,GAAG,CAACsB,OAAJ,EAAN,IAAuBjL,CAAC,KAAK2J,GAAG,CAACoB,OAAJ,EAA/B,CAAJ,EAAmD,OAAO,KAAP;EACnD,YAAM9K,CAAC,GAAGgJ,GAAG,CAAC/E,IAAJ,CAAS7F,CAAT,CAAV;EACA,UAAI,EAAE4B,CAAC,KAAK0J,GAAG,CAACuB,OAAJ,EAAN,IAAuBjL,CAAC,KAAK0J,GAAG,CAACqB,OAAJ,EAA/B,CAAJ,EAAmD,OAAO,KAAP;EACpD;;EACD,QAAIub,KAAK,GAAGtd,GAAG,CAAC1F,IAAJ,CAAS,CAAT,CAAZ;EACA,QAAIijB,KAAK,GAAGvd,GAAG,CAAC/E,IAAJ,CAAS,CAAT,CAAZ;;EACA,SAAK,IAAI7F,CAAC,GAAG,CAAb,EAAgBA,CAAC,IAAI,CAArB,EAAwBA,CAAC,EAAzB,EAA6B;EAC3B,YAAM2B,CAAC,GAAGiJ,GAAG,CAAC1F,IAAJ,CAASlF,CAAT,CAAV;EACA,YAAM4B,CAAC,GAAGgJ,GAAG,CAAC/E,IAAJ,CAAS7F,CAAT,CAAV;EACA,YAAMooB,QAAQ,GAAGzmB,CAAC,KAAKumB,KAAvB;EACA,YAAMG,QAAQ,GAAGzmB,CAAC,KAAKumB,KAAvB;EACA,UAAIC,QAAQ,KAAKC,QAAjB,EAA2B,OAAO,KAAP;EAC3BH,MAAAA,KAAK,GAAGvmB,CAAR;EACAwmB,MAAAA,KAAK,GAAGvmB,CAAR;EACD;;EACD,WAAO,IAAP;EACD;;EACDic,EAAAA,WAAW,GAAG;EACZ,QAAIjb,SAAS,CAACC,MAAV,KAAqB,CAArB,IAA2B,OAAOD,SAAS,CAAC,CAAD,CAAhB,KAAwB,QAAxB,IAAoCA,SAAS,CAAC,CAAD,CAAT,YAAwBya,QAA3F,EAAsG;EACpG,YAAM7Y,KAAK,GAAG5B,SAAS,CAAC,CAAD,CAAvB;EAAA,YAA4B5D,SAAS,GAAG4D,SAAS,CAAC,CAAD,CAAjD;EACA,UAAI,CAAC,KAAKsd,iBAAL,CAAuB1b,KAAvB,CAAL,EACE,OAAO,KAAP;EAEF,YAAM8jB,YAAY,GAAG9jB,KAArB;EACA,YAAM+jB,SAAS,GAAG,KAAKhB,MAAvB;EACA,YAAMiB,iBAAiB,GAAGF,YAAY,CAACf,MAAvC;EACA,UAAI,CAACgB,SAAS,CAAC1K,WAAV,CAAsB2K,iBAAtB,EAAyCxpB,SAAzC,CAAL,EACE,OAAO,KAAP;EAEF,UAAI,KAAKwoB,MAAL,CAAY3kB,MAAZ,KAAuBylB,YAAY,CAACd,MAAb,CAAoB3kB,MAA/C,EACE,OAAO,KAAP;;EAEF,WAAK,IAAI7C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKwnB,MAAL,CAAY3kB,MAAhC,EAAwC7C,CAAC,EAAzC,EACE,IAAI,CAAC,KAAKwnB,MAAL,CAAYxnB,CAAZ,EAAe6d,WAAf,CAA2ByK,YAAY,CAACd,MAAb,CAAoBxnB,CAApB,CAA3B,EAAmDhB,SAAnD,CAAL,EACE,OAAO,KAAP;;EAGJ,aAAO,IAAP;EACD,KApBD,MAoBO;EACL,aAAO,MAAM6e,WAAN,CAAkBlb,KAAlB,CAAwB,IAAxB,EAA8BC,SAA9B,CAAP;EACD;EACF;;EACDsc,EAAAA,SAAS,GAAG;EACV,QAAItc,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,WAAK0kB,MAAL,GAAc,KAAKkB,UAAL,CAAgB,KAAKlB,MAArB,EAA6B,IAA7B,CAAd;;EACA,WAAK,IAAIvnB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKwnB,MAAL,CAAY3kB,MAAhC,EAAwC7C,CAAC,EAAzC,EACE,KAAKwnB,MAAL,CAAYxnB,CAAZ,IAAiB,KAAKyoB,UAAL,CAAgB,KAAKjB,MAAL,CAAYxnB,CAAZ,CAAhB,EAAgC,KAAhC,CAAjB;;EAEF+mB,MAAAA,MAAM,CAACre,IAAP,CAAY,KAAK8e,MAAjB;EACD,KAND,MAMO,IAAI5kB,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMiW,IAAI,GAAGlW,SAAS,CAAC,CAAD,CAAtB;EAAA,YAA2B8lB,SAAS,GAAG9lB,SAAS,CAAC,CAAD,CAAhD;EACA,UAAIkW,IAAI,CAACxR,OAAL,EAAJ,EACE,OAAO,IAAP;EAEF,YAAMsD,GAAG,GAAGkO,IAAI,CAACgN,qBAAL,EAAZ;EACA,YAAMjD,kBAAkB,GAAGf,mBAAmB,CAACe,kBAApB,CAAuCjY,GAAvC,EAA4C,CAA5C,EAA+CA,GAAG,CAACpD,IAAJ,KAAa,CAA5D,CAA3B;EACAsa,MAAAA,mBAAmB,CAACK,MAApB,CAA2BvX,GAA3B,EAAgCiY,kBAAhC,EAAoD,IAApD;EACA,UAAIjK,WAAW,CAACC,KAAZ,CAAkBjO,GAAlB,MAA2B8d,SAA/B,EAA0C5G,mBAAmB,CAAC3C,OAApB,CAA4BvU,GAA5B;EAC3C;EACF;;EACDtB,EAAAA,aAAa,GAAG;EACd,WAAO,KAAKie,MAAL,CAAYje,aAAZ,EAAP;EACD;;EACD2e,EAAAA,kBAAkB,GAAG;EACnB,WAAO,KAAKT,MAAL,CAAY3kB,MAAnB;EACD;;EACDyiB,EAAAA,oBAAoB,GAAG;EACrB,WAAO,CAAP;EACD;;EACDjG,EAAAA,eAAe,GAAG;EAChB,UAAMoI,KAAK,GAAG,KAAKkB,eAAL,GAAuBxJ,OAAvB,EAAd;EACA,UAAMuI,KAAK,GAAG,IAAI5d,KAAJ,CAAU,KAAKme,kBAAL,EAAV,EAAqCle,IAArC,CAA0C,IAA1C,CAAd;;EACA,SAAK,IAAI/J,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG0nB,KAAK,CAAC7kB,MAA1B,EAAkC7C,CAAC,EAAnC,EACE0nB,KAAK,CAAC1nB,CAAD,CAAL,GAAW,KAAK4oB,gBAAL,CAAsB5oB,CAAtB,EAAyBmf,OAAzB,EAAX;;EAEF,WAAO,KAAK1B,UAAL,GAAkBoL,aAAlB,CAAgCpB,KAAhC,EAAuCC,KAAvC,CAAP;EACD;;EACDnK,EAAAA,WAAW,GAAG;EACZ,WAAOF,QAAQ,CAAC0D,gBAAhB;EACD;;EACDzI,EAAAA,YAAY,GAAG;EACb,WAAO,CAAP;EACD;;EACD+F,EAAAA,SAAS,GAAG;EACV,QAAIxV,GAAG,GAAG,GAAV;EACAA,IAAAA,GAAG,IAAI,KAAK0e,MAAL,CAAYlJ,SAAZ,EAAP;;EACA,SAAK,IAAIre,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKwnB,MAAL,CAAY3kB,MAAhC,EAAwC7C,CAAC,EAAzC,EACE6I,GAAG,IAAI,KAAK2e,MAAL,CAAYxnB,CAAZ,EAAeqe,SAAf,EAAP;;EAEF,WAAOxV,GAAP;EACD;;EACD2c,EAAAA,YAAY,GAAG;EACb,QAAIsD,SAAS,GAAG,KAAKvB,MAAL,CAAY/B,YAAZ,EAAhB;;EACA,SAAK,IAAIxlB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKwnB,MAAL,CAAY3kB,MAAhC,EAAwC7C,CAAC,EAAzC,EACE8oB,SAAS,IAAI,KAAKtB,MAAL,CAAYxnB,CAAZ,EAAewlB,YAAf,EAAb;;EAEF,WAAOsD,SAAP;EACD;;EACDC,EAAAA,UAAU,GAAG;EACX,WAAO,KAAKJ,eAAL,GAAuBI,UAAvB,EAAP;EACD;;EACDN,EAAAA,UAAU,CAAC3P,IAAD,EAAO4P,SAAP,EAAkB;EAC1B,UAAMtJ,GAAG,GAAGtG,IAAI,CAACvT,IAAL,EAAZ;EACA,SAAK2Z,SAAL,CAAeE,GAAf,EAAoBsJ,SAApB;EACA,WAAOtJ,GAAP;EACD;;EACDb,EAAAA,kBAAkB,GAAG;EACnB,QAAI3b,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMoC,CAAC,GAAGrC,SAAS,CAAC,CAAD,CAAnB;EACA,YAAM2lB,SAAS,GAAG,KAAKhB,MAAvB;EACA,YAAMyB,UAAU,GAAG/jB,CAAC,CAACsiB,MAArB;EACA,aAAOgB,SAAS,CAAChK,kBAAV,CAA6ByK,UAA7B,CAAP;EACD,KALD,MAKO,IAAIpmB,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMoC,CAAC,GAAGrC,SAAS,CAAC,CAAD,CAAnB;EAAA,YAAwB4b,IAAI,GAAG5b,SAAS,CAAC,CAAD,CAAxC;EACA,YAAMqmB,IAAI,GAAGhkB,CAAb;EACA,YAAMsjB,SAAS,GAAG,KAAKhB,MAAvB;EACA,YAAMyB,UAAU,GAAGC,IAAI,CAAC1B,MAAxB;EACA,YAAM2B,SAAS,GAAGX,SAAS,CAAChK,kBAAV,CAA6ByK,UAA7B,EAAyCxK,IAAzC,CAAlB;EACA,UAAI0K,SAAS,KAAK,CAAlB,EAAqB,OAAOA,SAAP;EACrB,YAAMC,MAAM,GAAG,KAAKlB,kBAAL,EAAf;EACA,YAAMmB,MAAM,GAAGH,IAAI,CAAChB,kBAAL,EAAf;EACA,UAAIjoB,CAAC,GAAG,CAAR;;EACA,aAAOA,CAAC,GAAGmpB,MAAJ,IAAcnpB,CAAC,GAAGopB,MAAzB,EAAiC;EAC/B,cAAMC,QAAQ,GAAG,KAAKT,gBAAL,CAAsB5oB,CAAtB,CAAjB;EACA,cAAMspB,SAAS,GAAGL,IAAI,CAACL,gBAAL,CAAsB5oB,CAAtB,CAAlB;EACA,cAAMupB,QAAQ,GAAGF,QAAQ,CAAC9K,kBAAT,CAA4B+K,SAA5B,EAAuC9K,IAAvC,CAAjB;EACA,YAAI+K,QAAQ,KAAK,CAAjB,EAAoB,OAAOA,QAAP;EACpBvpB,QAAAA,CAAC;EACF;;EACD,UAAIA,CAAC,GAAGmpB,MAAR,EAAgB,OAAO,CAAP;EAChB,UAAInpB,CAAC,GAAGopB,MAAR,EAAgB,OAAO,CAAC,CAAR;EAChB,aAAO,CAAP;EACD;EACF;;EACDzmB,EAAAA,KAAK,GAAG;EACN,QAAI4G,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAe4e,gBAAf,CAAhB,EAAkD;EAChD,YAAM7W,MAAM,GAAG/H,SAAS,CAAC,CAAD,CAAxB;;EACA,WAAK2kB,MAAL,CAAY5kB,KAAZ,CAAkBgI,MAAlB;;EACA,WAAK,IAAI3K,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKwnB,MAAL,CAAY3kB,MAAhC,EAAwC7C,CAAC,EAAzC,EACE,KAAKwnB,MAAL,CAAYxnB,CAAZ,EAAe2C,KAAf,CAAqBgI,MAArB;EAEH,KAND,MAMO,IAAIpB,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAe8H,wBAAf,CAAhB,EAA0D;EAC/D,YAAMC,MAAM,GAAG/H,SAAS,CAAC,CAAD,CAAxB;;EACA,WAAK2kB,MAAL,CAAY5kB,KAAZ,CAAkBgI,MAAlB;;EACA,UAAI,CAACA,MAAM,CAACE,MAAP,EAAL,EACE,KAAK,IAAI7K,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKwnB,MAAL,CAAY3kB,MAAhC,EAAwC7C,CAAC,EAAzC,EAA6C;EAC3C,aAAKwnB,MAAL,CAAYxnB,CAAZ,EAAe2C,KAAf,CAAqBgI,MAArB;;EACA,YAAIA,MAAM,CAACE,MAAP,EAAJ,EAAqB;EACtB;EAEH,UAAIF,MAAM,CAACG,iBAAP,EAAJ,EAAgC,KAAKgT,eAAL;EACjC,KAVM,MAUA,IAAIvU,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAemiB,cAAf,CAAhB,EAAgD;EACrD,YAAMpa,MAAM,GAAG/H,SAAS,CAAC,CAAD,CAAxB;EACA+H,MAAAA,MAAM,CAACA,MAAP,CAAc,IAAd;EACD,KAHM,MAGA,IAAIpB,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAeua,uBAAf,CAAhB,EAAyD;EAC9D,YAAMxS,MAAM,GAAG/H,SAAS,CAAC,CAAD,CAAxB;EACA+H,MAAAA,MAAM,CAACA,MAAP,CAAc,IAAd;;EACA,WAAK4c,MAAL,CAAY5kB,KAAZ,CAAkBgI,MAAlB;;EACA,WAAK,IAAI3K,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKwnB,MAAL,CAAY3kB,MAAhC,EAAwC7C,CAAC,EAAzC,EACE,KAAKwnB,MAAL,CAAYxnB,CAAZ,EAAe2C,KAAf,CAAqBgI,MAArB;EAEH;EACF;;EACDib,EAAAA,WAAW,GAAG;EACZ,QAAI,KAAKte,OAAL,EAAJ,EACE,OAAO,KAAKmW,UAAL,GAAkB+L,qBAAlB,EAAP;EAEF,UAAMC,KAAK,GAAG,IAAI3f,KAAJ,CAAU,KAAK0d,MAAL,CAAY3kB,MAAZ,GAAqB,CAA/B,EAAkCkH,IAAlC,CAAuC,IAAvC,CAAd;EACA0f,IAAAA,KAAK,CAAC,CAAD,CAAL,GAAW,KAAKlC,MAAhB;;EACA,SAAK,IAAIvnB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKwnB,MAAL,CAAY3kB,MAAhC,EAAwC7C,CAAC,EAAzC,EACEypB,KAAK,CAACzpB,CAAC,GAAG,CAAL,CAAL,GAAe,KAAKwnB,MAAL,CAAYxnB,CAAZ,CAAf;;EAEF,QAAIypB,KAAK,CAAC5mB,MAAN,IAAgB,CAApB,EAAuB,OAAO,KAAK4a,UAAL,GAAkBkK,gBAAlB,CAAmC8B,KAAK,CAAC,CAAD,CAAL,CAAS3D,qBAAT,EAAnC,CAAP;EACvB,WAAO,KAAKrI,UAAL,GAAkB+L,qBAAlB,CAAwCC,KAAxC,CAAP;EACD;;EACD5D,EAAAA,eAAe,GAAG;EAChB,WAAOxI,QAAQ,CAACgE,gBAAhB;EACD;;EACDsH,EAAAA,eAAe,GAAG;EAChB,WAAO,KAAKpB,MAAZ;EACD;;EACDjgB,EAAAA,OAAO,GAAG;EACR,WAAO,KAAKigB,MAAL,CAAYjgB,OAAZ,EAAP;EACD;;EACDshB,EAAAA,gBAAgB,CAACtoB,CAAD,EAAI;EAClB,WAAO,KAAKknB,MAAL,CAAYlnB,CAAZ,CAAP;EACD;;EACD,MAAI2F,WAAJ,GAAkB;EAChB,WAAO,CAACohB,SAAD,CAAP;EACD;;EArQ2C;;ECV9C;EACA;EACA;EACA;EACA;EACA;EACA;;EACe,MAAMqC,GAAN,SAAkBviB,UAAlB,CAA6B;EAC1C;EACF;EACA;EACA;EACA;EACA;EACA;EACEmH,EAAAA,QAAQ,GAAG;;EAR+B;;ECP5C;EACA;EACA;;EACe,MAAMqb,SAAN,SAAwBD,GAAxB,CAA4B;;ECA3C;EACA;EACA;;EACe,MAAME,OAAN,SAAsBD,SAAtB,CAAgC;EAC7CtqB,EAAAA,WAAW,CAAC4F,CAAD,EAAI;EACb;EACA,SAAKgD,KAAL,GAAa,EAAb;EACA,QAAIhD,CAAC,YAAYkC,UAAjB,EACE,KAAKE,MAAL,CAAYpC,CAAZ;EACH;;EAEDqJ,EAAAA,QAAQ,CAACrJ,CAAD,EAAI;EACV,SAAK,MAAMI,CAAX,IAAgB,KAAK4C,KAArB,EACE,IAAI5C,CAAC,CAACL,SAAF,CAAYC,CAAZ,MAAmB,CAAvB,EACE,OAAO,IAAP;;EACJ,WAAO,KAAP;EACD;;EAEDmC,EAAAA,GAAG,CAACnC,CAAD,EAAI;EACL,QAAI,KAAKqJ,QAAL,CAAcrJ,CAAd,CAAJ,EACE,OAAO,KAAP;;EACF,SAAK,IAAIjF,CAAC,GAAG,CAAR,EAAW6I,GAAG,GAAG,KAAKZ,KAAL,CAAWpF,MAAjC,EAAyC7C,CAAC,GAAG6I,GAA7C,EAAkD7I,CAAC,EAAnD,EAAuD;EACrD,YAAMqF,CAAC,GAAG,KAAK4C,KAAL,CAAWjI,CAAX,CAAV;EACA,UAAIqF,CAAC,CAACL,SAAF,CAAYC,CAAZ,MAAmB,CAAvB,EACE,OAAO,CAAC,CAAC,KAAKgD,KAAL,CAAWG,MAAX,CAAkBpI,CAAlB,EAAqB,CAArB,EAAwBiF,CAAxB,CAAT;EACH;;EACD,SAAKgD,KAAL,CAAWE,IAAX,CAAgBlD,CAAhB;EACA,WAAO,IAAP;EACD;;EAEDoC,EAAAA,MAAM,CAACzD,CAAD,EAAI;EACR,SAAK,MAAMyB,CAAX,IAAgBzB,CAAhB,EACE,KAAKwD,GAAL,CAAS/B,CAAT;;EACF,WAAO,IAAP;EACD;;EAEDqC,EAAAA,MAAM,GAAG;EACP,UAAM,IAAIoc,6BAAJ,EAAN;EACD;;EAEDtc,EAAAA,IAAI,GAAG;EACL,WAAO,KAAKS,KAAL,CAAWpF,MAAlB;EACD;;EAEDyE,EAAAA,OAAO,GAAG;EACR,WAAO,KAAKW,KAAL,CAAWpF,MAAX,KAAsB,CAA7B;EACD;;EAED4E,EAAAA,OAAO,GAAG;EACR,WAAO,KAAKQ,KAAL,CAAWW,KAAX,EAAP;EACD;;EAEDrB,EAAAA,QAAQ,GAAG;EACT,WAAO,IAAIkB,UAAJ,CAAa,KAAKR,KAAlB,CAAP;EACD;;EAnD4C;;EAsD/C,MAAMQ,UAAN,CAAe;EACbpJ,EAAAA,WAAW,CAAC4I,KAAD,EAAQ;EACjB,SAAKA,KAAL,GAAaA,KAAb;EACA,SAAKgB,QAAL,GAAgB,CAAhB;EACD;;EAEDC,EAAAA,IAAI,GAAG;EACL,QAAI,KAAKD,QAAL,KAAkB,KAAKhB,KAAL,CAAWpF,MAAjC,EACE,MAAM,IAAIkF,sBAAJ,EAAN;EACF,WAAO,KAAKE,KAAL,CAAW,KAAKgB,QAAL,EAAX,CAAP;EACD;;EAEDE,EAAAA,OAAO,GAAG;EACR,WAAO,KAAKF,QAAL,GAAgB,KAAKhB,KAAL,CAAWpF,MAAlC;EACD;;EAED6E,EAAAA,MAAM,GAAG;EACP,UAAM,IAAIoc,6BAAJ,EAAN;EACD;;EAlBY;;ECjDA,MAAM+F,kBAAN,SAAiCxM,QAAjC,CAA0C;EACvDhe,EAAAA,WAAW,GAAG;EACZ;EACAwqB,IAAAA,kBAAkB,CAACnnB,YAAnB,CAAgCC,KAAhC,CAAsC,IAAtC,EAA4CC,SAA5C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKonB,WAAL,GAAmB,IAAnB;;EACA,QAAIlnB,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B,CAA5B,MAAoC,IAAID,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC9D,UAAI4d,UAAU,GAAG7d,SAAS,CAAC,CAAD,CAA1B;EAAA,UAA+B+d,OAAO,GAAG/d,SAAS,CAAC,CAAD,CAAlD;EACAya,MAAAA,QAAQ,CAAC3a,YAAT,CAAsBI,IAAtB,CAA2B,IAA3B,EAAiC6d,OAAjC;EACA,UAAIF,UAAU,KAAK,IAAnB,EACEA,UAAU,GAAG,EAAb;EAEF,UAAIpD,QAAQ,CAACqD,eAAT,CAAyBD,UAAzB,CAAJ,EACE,MAAM,IAAI9gB,wBAAJ,CAA6B,2CAA7B,CAAN;EAEF,WAAKmqB,WAAL,GAAmBrJ,UAAnB;EACD;EACF;;EACDf,EAAAA,uBAAuB,GAAG;EACxB,UAAMJ,QAAQ,GAAG,IAAIvU,QAAJ,EAAjB;;EACA,SAAK,IAAI/K,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK8pB,WAAL,CAAiBjnB,MAArC,EAA6C7C,CAAC,EAA9C,EACEsf,QAAQ,CAAC3R,eAAT,CAAyB,KAAKmc,WAAL,CAAiB9pB,CAAjB,EAAoB+e,mBAApB,EAAzB;;EAEF,WAAOO,QAAP;EACD;;EACD3B,EAAAA,YAAY,CAACrd,CAAD,EAAI;EACd,WAAO,KAAKwpB,WAAL,CAAiBxpB,CAAjB,CAAP;EACD;;EACD8kB,EAAAA,cAAc,GAAG;EACf,UAAMmB,WAAW,GAAG,IAAIzc,KAAJ,CAAU,KAAK0b,YAAL,EAAV,EAA+Bzb,IAA/B,CAAoC,IAApC,CAApB;EACA,QAAIwY,CAAC,GAAG,CAAC,CAAT;;EACA,SAAK,IAAIviB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK8pB,WAAL,CAAiBjnB,MAArC,EAA6C7C,CAAC,EAA9C,EAAkD;EAChD,YAAM6nB,gBAAgB,GAAG,KAAKiC,WAAL,CAAiB9pB,CAAjB,EAAoBolB,cAApB,EAAzB;;EACA,WAAK,IAAItF,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG+H,gBAAgB,CAAChlB,MAArC,EAA6Cid,CAAC,EAA9C,EAAkD;EAChDyC,QAAAA,CAAC;EACDgE,QAAAA,WAAW,CAAChE,CAAD,CAAX,GAAiBsF,gBAAgB,CAAC/H,CAAD,CAAjC;EACD;EACF;;EACD,WAAOyG,WAAP;EACD;;EACDla,EAAAA,OAAO,GAAG;EACR,QAAIyb,IAAI,GAAG,GAAX;;EACA,SAAK,IAAI9nB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK8pB,WAAL,CAAiBjnB,MAArC,EAA6C7C,CAAC,EAA9C,EACE8nB,IAAI,IAAI,KAAKgC,WAAL,CAAiB9pB,CAAjB,EAAoBqM,OAApB,EAAR;;EAEF,WAAOyb,IAAP;EACD;;EACDtI,EAAAA,YAAY,GAAG;EACb,UAAMiB,UAAU,GAAG,IAAI3W,KAAJ,CAAU,KAAKggB,WAAL,CAAiBjnB,MAA3B,EAAmCkH,IAAnC,CAAwC,IAAxC,CAAnB;;EACA,SAAK,IAAI/J,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGygB,UAAU,CAAC5d,MAA/B,EAAuC7C,CAAC,EAAxC,EACEygB,UAAU,CAACzgB,CAAD,CAAV,GAAgB,KAAK8pB,WAAL,CAAiB9pB,CAAjB,EAAoBuF,IAApB,EAAhB;;EAEF,WAAO,IAAIskB,kBAAJ,CAAuBpJ,UAAvB,EAAmC,KAAK/C,QAAxC,CAAP;EACD;;EACDG,EAAAA,WAAW,GAAG;EACZ,QAAIjb,SAAS,CAACC,MAAV,KAAqB,CAArB,IAA2B,OAAOD,SAAS,CAAC,CAAD,CAAhB,KAAwB,QAAxB,IAAoCA,SAAS,CAAC,CAAD,CAAT,YAAwBya,QAA3F,EAAsG;EACpG,YAAM7Y,KAAK,GAAG5B,SAAS,CAAC,CAAD,CAAvB;EAAA,YAA4B5D,SAAS,GAAG4D,SAAS,CAAC,CAAD,CAAjD;EACA,UAAI,CAAC,KAAKsd,iBAAL,CAAuB1b,KAAvB,CAAL,EACE,OAAO,KAAP;EAEF,YAAMulB,eAAe,GAAGvlB,KAAxB;EACA,UAAI,KAAKslB,WAAL,CAAiBjnB,MAAjB,KAA4BknB,eAAe,CAACD,WAAhB,CAA4BjnB,MAA5D,EACE,OAAO,KAAP;;EAEF,WAAK,IAAI7C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK8pB,WAAL,CAAiBjnB,MAArC,EAA6C7C,CAAC,EAA9C,EACE,IAAI,CAAC,KAAK8pB,WAAL,CAAiB9pB,CAAjB,EAAoB6d,WAApB,CAAgCkM,eAAe,CAACD,WAAhB,CAA4B9pB,CAA5B,CAAhC,EAAgEhB,SAAhE,CAAL,EACE,OAAO,KAAP;;EAGJ,aAAO,IAAP;EACD,KAfD,MAeO;EACL,aAAO,MAAM6e,WAAN,CAAkBlb,KAAlB,CAAwB,IAAxB,EAA8BC,SAA9B,CAAP;EACD;EACF;;EACDsc,EAAAA,SAAS,GAAG;EACV,SAAK,IAAIlf,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK8pB,WAAL,CAAiBjnB,MAArC,EAA6C7C,CAAC,EAA9C,EACE,KAAK8pB,WAAL,CAAiB9pB,CAAjB,EAAoBkf,SAApB;;EAEF6H,IAAAA,MAAM,CAACre,IAAP,CAAY,KAAKohB,WAAjB;EACD;;EACDxgB,EAAAA,aAAa,GAAG;EACd,QAAI,KAAKhC,OAAL,EAAJ,EAAoB,OAAO,IAAP;EACpB,WAAO,KAAKwiB,WAAL,CAAiB,CAAjB,EAAoBxgB,aAApB,EAAP;EACD;;EACDgc,EAAAA,oBAAoB,GAAG;EACrB,QAAIpI,SAAS,GAAG6G,SAAS,CAACG,KAA1B;;EACA,SAAK,IAAIlkB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK8pB,WAAL,CAAiBjnB,MAArC,EAA6C7C,CAAC,EAA9C,EACEkd,SAAS,GAAGje,IAAI,CAACiN,GAAL,CAASgR,SAAT,EAAoB,KAAK4M,WAAL,CAAiB9pB,CAAjB,EAAoBslB,oBAApB,EAApB,CAAZ;;EAEF,WAAOpI,SAAP;EACD;;EACDmC,EAAAA,eAAe,GAAG;EAChB,UAAM2K,aAAa,GAAG,KAAKF,WAAL,CAAiBjnB,MAAvC;EACA,UAAMonB,QAAQ,GAAG,IAAIjiB,SAAJ,CAAcgiB,aAAd,CAAjB;;EACA,SAAK,IAAIhqB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGgqB,aAApB,EAAmChqB,CAAC,EAApC,EACEiqB,QAAQ,CAAC7iB,GAAT,CAAa,KAAK0iB,WAAL,CAAiB9pB,CAAjB,EAAoBmf,OAApB,EAAb;;EAEF,WAAO,KAAK1B,UAAL,GAAkByM,aAAlB,CAAgCD,QAAhC,CAAP;EACD;;EACD1M,EAAAA,WAAW,GAAG;EACZ,WAAOF,QAAQ,CAACG,2BAAhB;EACD;;EACDlF,EAAAA,YAAY,GAAG;EACb,QAAI4E,SAAS,GAAG6G,SAAS,CAACG,KAA1B;;EACA,SAAK,IAAIlkB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK8pB,WAAL,CAAiBjnB,MAArC,EAA6C7C,CAAC,EAA9C,EACEkd,SAAS,GAAGje,IAAI,CAACiN,GAAL,CAASgR,SAAT,EAAoB,KAAK4M,WAAL,CAAiB9pB,CAAjB,EAAoBsY,YAApB,EAApB,CAAZ;;EAEF,WAAO4E,SAAP;EACD;;EACDmB,EAAAA,SAAS,GAAG;EACV,QAAIwI,GAAG,GAAG,GAAV;;EACA,SAAK,IAAI7mB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK8pB,WAAL,CAAiBjnB,MAArC,EAA6C7C,CAAC,EAA9C,EACE6mB,GAAG,IAAI,KAAKiD,WAAL,CAAiB9pB,CAAjB,EAAoBqe,SAApB,EAAP;;EAEF,WAAOwI,GAAP;EACD;;EACDrB,EAAAA,YAAY,GAAG;EACb,QAAIsD,SAAS,GAAG,CAAhB;;EACA,SAAK,IAAI9oB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK8pB,WAAL,CAAiBjnB,MAArC,EAA6C7C,CAAC,EAA9C,EACE8oB,SAAS,IAAI,KAAKgB,WAAL,CAAiB9pB,CAAjB,EAAoBwlB,YAApB,EAAb;;EAEF,WAAOsD,SAAP;EACD;;EACDxK,EAAAA,gBAAgB,GAAG;EACjB,WAAO,KAAKwL,WAAL,CAAiBjnB,MAAxB;EACD;;EACD0b,EAAAA,kBAAkB,GAAG;EACnB,QAAI3b,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMoC,CAAC,GAAGrC,SAAS,CAAC,CAAD,CAAnB;EACA,YAAMunB,aAAa,GAAG,IAAIP,OAAJ,CAAY7C,MAAM,CAACE,MAAP,CAAc,KAAK6C,WAAnB,CAAZ,CAAtB;EACA,YAAMM,aAAa,GAAG,IAAIR,OAAJ,CAAY7C,MAAM,CAACE,MAAP,CAAchiB,CAAC,CAAC6kB,WAAhB,CAAZ,CAAtB;EACA,aAAO,KAAKxjB,OAAL,CAAa6jB,aAAb,EAA4BC,aAA5B,CAAP;EACD,KALD,MAKO,IAAIxnB,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMoC,CAAC,GAAGrC,SAAS,CAAC,CAAD,CAAnB;EAAA,YAAwB4b,IAAI,GAAG5b,SAAS,CAAC,CAAD,CAAxC;EACA,YAAMynB,EAAE,GAAGplB,CAAX;EACA,YAAMqlB,EAAE,GAAG,KAAKhM,gBAAL,EAAX;EACA,YAAMiM,EAAE,GAAGF,EAAE,CAAC/L,gBAAH,EAAX;EACA,UAAIte,CAAC,GAAG,CAAR;;EACA,aAAOA,CAAC,GAAGsqB,EAAJ,IAAUtqB,CAAC,GAAGuqB,EAArB,EAAyB;EACvB,cAAMC,QAAQ,GAAG,KAAK7M,YAAL,CAAkB3d,CAAlB,CAAjB;EACA,cAAMyqB,SAAS,GAAGJ,EAAE,CAAC1M,YAAH,CAAgB3d,CAAhB,CAAlB;EACA,cAAMupB,QAAQ,GAAGiB,QAAQ,CAACjM,kBAAT,CAA4BkM,SAA5B,EAAuCjM,IAAvC,CAAjB;EACA,YAAI+K,QAAQ,KAAK,CAAjB,EAAoB,OAAOA,QAAP;EACpBvpB,QAAAA,CAAC;EACF;;EACD,UAAIA,CAAC,GAAGsqB,EAAR,EAAY,OAAO,CAAP;EACZ,UAAItqB,CAAC,GAAGuqB,EAAR,EAAY,OAAO,CAAC,CAAR;EACZ,aAAO,CAAP;EACD;EACF;;EACD5nB,EAAAA,KAAK,GAAG;EACN,QAAI4G,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAe4e,gBAAf,CAAhB,EAAkD;EAChD,YAAM7W,MAAM,GAAG/H,SAAS,CAAC,CAAD,CAAxB;;EACA,WAAK,IAAI5C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK8pB,WAAL,CAAiBjnB,MAArC,EAA6C7C,CAAC,EAA9C,EACE,KAAK8pB,WAAL,CAAiB9pB,CAAjB,EAAoB2C,KAApB,CAA0BgI,MAA1B;EAEH,KALD,MAKO,IAAIpB,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAe8H,wBAAf,CAAhB,EAA0D;EAC/D,YAAMC,MAAM,GAAG/H,SAAS,CAAC,CAAD,CAAxB;EACA,UAAI,KAAKknB,WAAL,CAAiBjnB,MAAjB,KAA4B,CAAhC,EAAmC,OAAO,IAAP;;EACnC,WAAK,IAAI7C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK8pB,WAAL,CAAiBjnB,MAArC,EAA6C7C,CAAC,EAA9C,EAAkD;EAChD,aAAK8pB,WAAL,CAAiB9pB,CAAjB,EAAoB2C,KAApB,CAA0BgI,MAA1B;;EACA,YAAIA,MAAM,CAACE,MAAP,EAAJ,EACE;EAEH;;EACD,UAAIF,MAAM,CAACG,iBAAP,EAAJ,EAAgC,KAAKgT,eAAL;EACjC,KAVM,MAUA,IAAIvU,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAemiB,cAAf,CAAhB,EAAgD;EACrD,YAAMpa,MAAM,GAAG/H,SAAS,CAAC,CAAD,CAAxB;EACA+H,MAAAA,MAAM,CAACA,MAAP,CAAc,IAAd;;EACA,WAAK,IAAI3K,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK8pB,WAAL,CAAiBjnB,MAArC,EAA6C7C,CAAC,EAA9C,EACE,KAAK8pB,WAAL,CAAiB9pB,CAAjB,EAAoB2C,KAApB,CAA0BgI,MAA1B;EAEH,KANM,MAMA,IAAIpB,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAeua,uBAAf,CAAhB,EAAyD;EAC9D,YAAMxS,MAAM,GAAG/H,SAAS,CAAC,CAAD,CAAxB;EACA+H,MAAAA,MAAM,CAACA,MAAP,CAAc,IAAd;;EACA,WAAK,IAAI3K,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK8pB,WAAL,CAAiBjnB,MAArC,EAA6C7C,CAAC,EAA9C,EACE,KAAK8pB,WAAL,CAAiB9pB,CAAjB,EAAoB2C,KAApB,CAA0BgI,MAA1B;EAEH;EACF;;EACDib,EAAAA,WAAW,GAAG;EACZvI,IAAAA,QAAQ,CAAC2B,0BAAT,CAAoC,IAApC;EACAjc,IAAAA,MAAM,CAACC,oBAAP;EACA,WAAO,IAAP;EACD;;EACD6iB,EAAAA,eAAe,GAAG;EAChB,WAAOxI,QAAQ,CAACkE,2BAAhB;EACD;;EACDja,EAAAA,OAAO,GAAG;EACR,SAAK,IAAItH,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK8pB,WAAL,CAAiBjnB,MAArC,EAA6C7C,CAAC,EAA9C,EACE,IAAI,CAAC,KAAK8pB,WAAL,CAAiB9pB,CAAjB,EAAoBsH,OAApB,EAAL,EACE,OAAO,KAAP;;EAGJ,WAAO,IAAP;EACD;;EApMsD;;ECT1C,MAAMojB,UAAN,SAAyBb,kBAAzB,CAA4C;EACzDxqB,EAAAA,WAAW,GAAG;EACZ;EACAqrB,IAAAA,UAAU,CAAChoB,YAAX,CAAwBC,KAAxB,CAA8B,IAA9B,EAAoCC,SAApC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,UAAMwiB,MAAM,GAAGtiB,SAAS,CAAC,CAAD,CAAxB;EAAA,UAA6B+d,OAAO,GAAG/d,SAAS,CAAC,CAAD,CAAhD;EACAinB,IAAAA,kBAAkB,CAACnnB,YAAnB,CAAgCI,IAAhC,CAAqC,IAArC,EAA2CoiB,MAA3C,EAAmDvE,OAAnD;EACD;;EACDnB,EAAAA,YAAY,GAAG;EACb,UAAM0F,MAAM,GAAG,IAAIpb,KAAJ,CAAU,KAAKggB,WAAL,CAAiBjnB,MAA3B,EAAmCkH,IAAnC,CAAwC,IAAxC,CAAf;;EACA,SAAK,IAAI/J,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGklB,MAAM,CAACriB,MAA3B,EAAmC7C,CAAC,EAApC,EACEklB,MAAM,CAACllB,CAAD,CAAN,GAAY,KAAK8pB,WAAL,CAAiB9pB,CAAjB,EAAoBuF,IAApB,EAAZ;;EAEF,WAAO,IAAImlB,UAAJ,CAAexF,MAAf,EAAuB,KAAKxH,QAA5B,CAAP;EACD;;EACDiN,EAAAA,OAAO,GAAG;EACR,WAAO,IAAP;EACD;;EACD9M,EAAAA,WAAW,GAAG;EACZ,QAAIjb,SAAS,CAACC,MAAV,KAAqB,CAArB,IAA2B,OAAOD,SAAS,CAAC,CAAD,CAAhB,KAAwB,QAAxB,IAAoCA,SAAS,CAAC,CAAD,CAAT,YAAwBya,QAA3F,EAAsG;EACpG,YAAM7Y,KAAK,GAAG5B,SAAS,CAAC,CAAD,CAAvB;EAAA,YAA4B5D,SAAS,GAAG4D,SAAS,CAAC,CAAD,CAAjD;EACA,UAAI,CAAC,KAAKsd,iBAAL,CAAuB1b,KAAvB,CAAL,EACE,OAAO,KAAP;EAEF,aAAO,MAAMqZ,WAAN,CAAkB/a,IAAlB,CAAuB,IAAvB,EAA6B0B,KAA7B,EAAoCxF,SAApC,CAAP;EACD,KAND,MAMO;EACL,aAAO,MAAM6e,WAAN,CAAkBlb,KAAlB,CAAwB,IAAxB,EAA8BC,SAA9B,CAAP;EACD;EACF;;EACD0G,EAAAA,aAAa,GAAG;EACd,QAAI1G,SAAS,CAACC,MAAV,KAAqB,CAArB,IAA0BtC,MAAM,CAAC4J,SAAP,CAAiBvH,SAAS,CAAC,CAAD,CAA1B,CAA9B,EAA8D;EAC5D,YAAMtC,CAAC,GAAGsC,SAAS,CAAC,CAAD,CAAnB;EACA,aAAO,KAAKknB,WAAL,CAAiBxpB,CAAjB,EAAoBgJ,aAApB,EAAP;EACD,KAHD,MAGO;EACL,aAAO,MAAMA,aAAN,CAAoB3G,KAApB,CAA0B,IAA1B,EAAgCC,SAAhC,CAAP;EACD;EACF;;EACD0iB,EAAAA,oBAAoB,GAAG;EACrB,WAAOvB,SAAS,CAACG,KAAjB;EACD;;EACD3G,EAAAA,WAAW,GAAG;EACZ,WAAOF,QAAQ,CAACgD,mBAAhB;EACD;;EACD/H,EAAAA,YAAY,GAAG;EACb,WAAO,CAAP;EACD;;EACDsN,EAAAA,WAAW,GAAG;EACZ,WAAO,KAAKnI,UAAL,GAAkBgJ,wBAAlB,EAAP;EACD;;EACDZ,EAAAA,eAAe,GAAG;EAChB,WAAOxI,QAAQ,CAAC4D,mBAAhB;EACD;;EACD,MAAIhb,WAAJ,GAAkB;EAChB,WAAO,CAACmgB,MAAD,CAAP;EACD;;EAvDwD;;ECC5C,MAAMwE,UAAN,SAAyB5F,UAAzB,CAAoC;EACjD3lB,EAAAA,WAAW,GAAG;EACZ;EACAurB,IAAAA,UAAU,CAACloB,YAAX,CAAwBC,KAAxB,CAA8B,IAA9B,EAAoCC,SAApC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,UAAMwiB,MAAM,GAAGtiB,SAAS,CAAC,CAAD,CAAxB;EAAA,UAA6B+d,OAAO,GAAG/d,SAAS,CAAC,CAAD,CAAhD;EACAoiB,IAAAA,UAAU,CAACtiB,YAAX,CAAwBI,IAAxB,CAA6B,IAA7B,EAAmCoiB,MAAnC,EAA2CvE,OAA3C;EACA,SAAKkK,oBAAL;EACD;;EACDrL,EAAAA,YAAY,GAAG;EACb,WAAO,IAAIoL,UAAJ,CAAe,KAAK3F,OAAL,CAAa1f,IAAb,EAAf,EAAoC,KAAKmY,QAAzC,CAAP;EACD;;EACD4H,EAAAA,oBAAoB,GAAG;EACrB,WAAOvB,SAAS,CAACG,KAAjB;EACD;;EACDP,EAAAA,QAAQ,GAAG;EACT,QAAI,KAAKrc,OAAL,EAAJ,EACE,OAAO,IAAP;EAEF,WAAO,MAAMqc,QAAN,CAAe7gB,IAAf,CAAoB,IAApB,CAAP;EACD;;EACDuc,EAAAA,eAAe,GAAG;EAChB,UAAMzU,GAAG,GAAG,KAAKqa,OAAL,CAAa1f,IAAb,EAAZ;;EACAuc,IAAAA,mBAAmB,CAAC3C,OAApB,CAA4BvU,GAA5B;EACA,WAAO,KAAK6S,UAAL,GAAkBkK,gBAAlB,CAAmC/c,GAAnC,CAAP;EACD;;EACD2S,EAAAA,WAAW,GAAG;EACZ,WAAOF,QAAQ,CAACyD,mBAAhB;EACD;;EACD+J,EAAAA,oBAAoB,GAAG;EACrB,QAAI,CAAC,KAAKvjB,OAAL,EAAD,IAAmB,CAAC,MAAMqc,QAAN,CAAe7gB,IAAf,CAAoB,IAApB,CAAxB,EACE,MAAM,IAAInD,wBAAJ,CAA6B,sDAA7B,CAAN;EAEF,QAAI,KAAKmmB,qBAAL,GAA6Bte,IAA7B,MAAuC,CAAvC,IAA4C,KAAKse,qBAAL,GAA6Bte,IAA7B,KAAsCojB,UAAU,CAACE,kBAAjG,EACE,MAAM,IAAInrB,wBAAJ,CAA6B,mDAAmD,KAAKmmB,qBAAL,GAA6Bte,IAA7B,EAAnD,GAAyF,uBAAtH,CAAN;EAEH;;EACDqe,EAAAA,eAAe,GAAG;EAChB,WAAOxI,QAAQ,CAAC8D,mBAAhB;EACD;;EAxCgD;EA0CnDyJ,UAAU,CAACE,kBAAX,GAAgC,CAAhC;;EC3Ce,MAAMC,WAAN,CAAkB;EAC/B,SAAOC,QAAP,CAAgBpH,UAAhB,EAA4B;EAC1B,QAAIA,UAAU,YAAY9c,YAA1B,EACE,OAAO,CAAP,CADF,KAEK,IAAI8c,UAAU,YAAY7c,aAA1B,EACH,OAAO,CAAP,CADG,KAEA,IAAI6c,UAAU,YAAY3c,cAA1B,EACH,OAAO,CAAP,CADG,KAEA,IAAI2c,UAAU,YAAYlgB,UAA1B,EACH,OAAO,CAAP;EAEF,WAAO,CAAP;EACD;;EACD,SAAOwZ,SAAP,CAAiB0G,UAAjB,EAA6B;EAC3B,QAAIA,UAAU,YAAY9c,YAA1B,EACE,OAAO,CAAP,CADF,KAEK,IAAI8c,UAAU,YAAY7c,aAA1B,EACH,OAAO,CAAP,CADG,KAEA,IAAI6c,UAAU,YAAY3c,cAA1B,EACH,OAAO,CAAP,CADG,KAEA,IAAI2c,UAAU,YAAYlgB,UAA1B,EACH,OAAO,CAAP;EAEF,WAAO,CAAP;EACD;;EACD,SAAOuZ,MAAP,GAAgB;EACd,QAAIra,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMqa,SAAS,GAAGta,SAAS,CAAC,CAAD,CAA3B;EACA,aAAOmoB,WAAW,CAAC9N,MAAZ,CAAmBC,SAAnB,EAA8B,CAA9B,CAAP;EACD,KAHD,MAGO,IAAIta,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMqa,SAAS,GAAGta,SAAS,CAAC,CAAD,CAA3B;EAAA,YAAgCooB,QAAQ,GAAGpoB,SAAS,CAAC,CAAD,CAApD;EACA,UAAIsa,SAAS,KAAK,CAAlB,EACE,OAAO,IAAIpW,YAAJ,EAAP,CADF,KAEK,IAAIoW,SAAS,KAAK,CAAd,IAAmB8N,QAAQ,KAAK,CAApC,EACH,OAAO,IAAItnB,UAAJ,EAAP,CADG,KAEA,IAAIwZ,SAAS,KAAK,CAAd,IAAmB8N,QAAQ,KAAK,CAApC,EACH,OAAO,IAAIjkB,aAAJ,EAAP,CADG,KAEA,IAAImW,SAAS,KAAK,CAAd,IAAmB8N,QAAQ,KAAK,CAApC,EACH,OAAO,IAAI/jB,cAAJ,EAAP;EAEF,aAAO,IAAIvD,UAAJ,EAAP;EACD;EACF;;EA1C8B;;ECElB,MAAMunB,gBAAN,CAAuB;EACpC,SAAO/I,MAAP,CAAcrY,GAAd,EAAmB;EACjB,QAAIA,GAAG,CAAChH,MAAJ,GAAa,CAAjB,EAAoB,OAAO,KAAP;EACpB,QAAI,CAACgH,GAAG,CAAC,CAAD,CAAH,CAAOtF,QAAP,CAAgBsF,GAAG,CAACA,GAAG,CAAChH,MAAJ,GAAa,CAAd,CAAnB,CAAL,EAA2C,OAAO,KAAP;EAC3C,WAAO,IAAP;EACD;;EACD,SAAOqoB,WAAP,CAAmBC,OAAnB,EAA4BthB,GAA5B,EAAiC;EAC/B,SAAK,IAAI7J,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGmrB,OAAO,CAACtoB,MAA5B,EAAoC7C,CAAC,EAArC,EAAyC;EACvC,YAAMorB,MAAM,GAAGD,OAAO,CAACnrB,CAAD,CAAtB;EACA,UAAIirB,gBAAgB,CAAC/jB,OAAjB,CAAyBkkB,MAAzB,EAAiCvhB,GAAjC,IAAwC,CAA5C,EAA+C,OAAOuhB,MAAP;EAChD;;EACD,WAAO,IAAP;EACD;;EACD,SAAOjJ,MAAP,CAAcoE,WAAd,EAA2BlE,eAA3B,EAA4C;EAC1C,UAAMriB,CAAC,GAAGirB,gBAAgB,CAAC/jB,OAAjB,CAAyBmb,eAAzB,EAA0CkE,WAA1C,CAAV;EACA,QAAIvmB,CAAC,GAAG,CAAR,EAAW,OAAO,IAAP;EACX,UAAMqrB,cAAc,GAAG,IAAIvhB,KAAJ,CAAUyc,WAAW,CAAC1jB,MAAtB,EAA8BkH,IAA9B,CAAmC,IAAnC,CAAvB;EACA+Q,IAAAA,MAAM,CAACC,SAAP,CAAiBwL,WAAjB,EAA8BvmB,CAA9B,EAAiCqrB,cAAjC,EAAiD,CAAjD,EAAoD9E,WAAW,CAAC1jB,MAAZ,GAAqB7C,CAAzE;EACA8a,IAAAA,MAAM,CAACC,SAAP,CAAiBwL,WAAjB,EAA8B,CAA9B,EAAiC8E,cAAjC,EAAiD9E,WAAW,CAAC1jB,MAAZ,GAAqB7C,CAAtE,EAAyEA,CAAzE;EACA8a,IAAAA,MAAM,CAACC,SAAP,CAAiBsQ,cAAjB,EAAiC,CAAjC,EAAoC9E,WAApC,EAAiD,CAAjD,EAAoDA,WAAW,CAAC1jB,MAAhE;EACD;;EACD,SAAOM,MAAP,GAAgB;EACd,QAAIP,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMyoB,MAAM,GAAG1oB,SAAS,CAAC,CAAD,CAAxB;EAAA,YAA6B2oB,MAAM,GAAG3oB,SAAS,CAAC,CAAD,CAA/C;EACA,UAAI0oB,MAAM,KAAKC,MAAf,EAAuB,OAAO,IAAP;EACvB,UAAID,MAAM,KAAK,IAAX,IAAmBC,MAAM,KAAK,IAAlC,EAAwC,OAAO,KAAP;EACxC,UAAID,MAAM,CAACzoB,MAAP,KAAkB0oB,MAAM,CAAC1oB,MAA7B,EAAqC,OAAO,KAAP;;EACrC,WAAK,IAAI7C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsrB,MAAM,CAACzoB,MAA3B,EAAmC7C,CAAC,EAApC,EACE,IAAI,CAACsrB,MAAM,CAACtrB,CAAD,CAAN,CAAUmD,MAAV,CAAiBooB,MAAM,CAACvrB,CAAD,CAAvB,CAAL,EAAkC,OAAO,KAAP;;EAEpC,aAAO,IAAP;EACD,KATD,MASO,IAAI4C,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMyoB,MAAM,GAAG1oB,SAAS,CAAC,CAAD,CAAxB;EAAA,YAA6B2oB,MAAM,GAAG3oB,SAAS,CAAC,CAAD,CAA/C;EAAA,YAAoD4oB,oBAAoB,GAAG5oB,SAAS,CAAC,CAAD,CAApF;EACA,UAAI0oB,MAAM,KAAKC,MAAf,EAAuB,OAAO,IAAP;EACvB,UAAID,MAAM,KAAK,IAAX,IAAmBC,MAAM,KAAK,IAAlC,EAAwC,OAAO,KAAP;EACxC,UAAID,MAAM,CAACzoB,MAAP,KAAkB0oB,MAAM,CAAC1oB,MAA7B,EAAqC,OAAO,KAAP;;EACrC,WAAK,IAAI7C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsrB,MAAM,CAACzoB,MAA3B,EAAmC7C,CAAC,EAApC,EACE,IAAIwrB,oBAAoB,CAACllB,OAArB,CAA6BglB,MAAM,CAACtrB,CAAD,CAAnC,EAAwCurB,MAAM,CAACvrB,CAAD,CAA9C,MAAuD,CAA3D,EAA8D,OAAO,KAAP;;EAEhE,aAAO,IAAP;EACD;EACF;;EACD,SAAO8M,YAAP,CAAoByZ,WAApB,EAAiCjb,GAAjC,EAAsC;EACpC,UAAMmgB,SAAS,GAAG,IAAIriB,cAAJ,EAAlB;;EACA,SAAK,IAAIpJ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGumB,WAAW,CAAC1jB,MAAhC,EAAwC7C,CAAC,EAAzC,EACE,IAAIsL,GAAG,CAACK,UAAJ,CAAe4a,WAAW,CAACvmB,CAAD,CAA1B,CAAJ,EAAoCyrB,SAAS,CAACrkB,GAAV,CAAcmf,WAAW,CAACvmB,CAAD,CAAzB,EAA8B,IAA9B;;EAEtC,WAAOyrB,SAAS,CAAC/hB,iBAAV,EAAP;EACD;;EACD,SAAOshB,QAAP,CAAgBnhB,GAAhB,EAAqB;EACnB,QAAIA,GAAG,KAAK,IAAR,IAAgBA,GAAG,CAAChH,MAAJ,KAAe,CAAnC,EACE,OAAO,CAAP;EAEF,QAAImoB,QAAQ,GAAG,CAAf;;EACA,SAAK,MAAMpH,UAAX,IAAyB/Z,GAAzB,EACEmhB,QAAQ,GAAG/rB,IAAI,CAACiN,GAAL,CAAS8e,QAAT,EAAmBD,WAAW,CAACC,QAAZ,CAAqBpH,UAArB,CAAnB,CAAX;;EAEF,WAAOoH,QAAP;EACD;;EACD,SAAOU,iBAAP,CAAyBtmB,KAAzB,EAAgC;EAC9B,SAAK,IAAIpF,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGoF,KAAK,CAACvC,MAA1B,EAAkC7C,CAAC,EAAnC,EACE,IAAIoF,KAAK,CAACpF,CAAC,GAAG,CAAL,CAAL,CAAamD,MAAb,CAAoBiC,KAAK,CAACpF,CAAD,CAAzB,CAAJ,EACE,OAAO,IAAP;;EAGJ,WAAO,KAAP;EACD;;EACD,SAAO2rB,oBAAP,CAA4BvmB,KAA5B,EAAmC;EACjC,QAAI,CAAC6lB,gBAAgB,CAACS,iBAAjB,CAAmCtmB,KAAnC,CAAL,EAAgD,OAAOA,KAAP;EAChD,UAAMqmB,SAAS,GAAG,IAAIriB,cAAJ,CAAmBhE,KAAnB,EAA0B,KAA1B,CAAlB;EACA,WAAOqmB,SAAS,CAAC/hB,iBAAV,EAAP;EACD;;EACD,SAAOyV,OAAP,CAAe/Z,KAAf,EAAsB;EACpB,UAAM4E,IAAI,GAAG5E,KAAK,CAACvC,MAAN,GAAe,CAA5B;EACA,UAAMygB,GAAG,GAAGrkB,IAAI,CAAC6S,KAAL,CAAW9H,IAAI,GAAG,CAAlB,CAAZ;;EACA,SAAK,IAAIhK,CAAC,GAAG,CAAb,EAAgBA,CAAC,IAAIsjB,GAArB,EAA0BtjB,CAAC,EAA3B,EAA+B;EAC7B,YAAMwjB,GAAG,GAAGpe,KAAK,CAACpF,CAAD,CAAjB;EACAoF,MAAAA,KAAK,CAACpF,CAAD,CAAL,GAAWoF,KAAK,CAAC4E,IAAI,GAAGhK,CAAR,CAAhB;EACAoF,MAAAA,KAAK,CAAC4E,IAAI,GAAGhK,CAAR,CAAL,GAAkBwjB,GAAlB;EACD;EACF;;EACD,SAAOoI,UAAP,CAAkBxmB,KAAlB,EAAyB;EACvB,QAAIymB,OAAO,GAAG,CAAd;;EACA,SAAK,IAAI7rB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGoF,KAAK,CAACvC,MAA1B,EAAkC7C,CAAC,EAAnC,EACE,IAAIoF,KAAK,CAACpF,CAAD,CAAL,KAAa,IAAjB,EAAuB6rB,OAAO;;EAEhC,UAAMC,QAAQ,GAAG,IAAIhiB,KAAJ,CAAU+hB,OAAV,EAAmB9hB,IAAnB,CAAwB,IAAxB,CAAjB;EACA,QAAI8hB,OAAO,KAAK,CAAhB,EAAmB,OAAOC,QAAP;EACnB,QAAIhM,CAAC,GAAG,CAAR;;EACA,SAAK,IAAI9f,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGoF,KAAK,CAACvC,MAA1B,EAAkC7C,CAAC,EAAnC,EACE,IAAIoF,KAAK,CAACpF,CAAD,CAAL,KAAa,IAAjB,EAAuB8rB,QAAQ,CAAChM,CAAC,EAAF,CAAR,GAAgB1a,KAAK,CAACpF,CAAD,CAArB;;EAEzB,WAAO8rB,QAAP;EACD;;EACD,SAAOC,QAAP,GAAkB;EAChB,QAAInpB,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAM0jB,WAAW,GAAG3jB,SAAS,CAAC,CAAD,CAA7B;EACA,YAAM2C,IAAI,GAAG,IAAIuE,KAAJ,CAAUyc,WAAW,CAAC1jB,MAAtB,EAA8BkH,IAA9B,CAAmC,IAAnC,CAAb;;EACA,WAAK,IAAI/J,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGumB,WAAW,CAAC1jB,MAAhC,EAAwC7C,CAAC,EAAzC,EACEuF,IAAI,CAACvF,CAAD,CAAJ,GAAUumB,WAAW,CAACvmB,CAAD,CAAX,CAAeuF,IAAf,EAAV;;EAEF,aAAOA,IAAP;EACD,KAPD,MAOO,IAAI3C,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMmY,GAAG,GAAGpY,SAAS,CAAC,CAAD,CAArB;EAAA,YAA0BopB,QAAQ,GAAGppB,SAAS,CAAC,CAAD,CAA9C;EAAA,YAAmDsY,IAAI,GAAGtY,SAAS,CAAC,CAAD,CAAnE;EAAA,YAAwEqpB,SAAS,GAAGrpB,SAAS,CAAC,CAAD,CAA7F;EAAA,YAAkGC,MAAM,GAAGD,SAAS,CAAC,CAAD,CAApH;;EACA,WAAK,IAAI5C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6C,MAApB,EAA4B7C,CAAC,EAA7B,EACEkb,IAAI,CAAC+Q,SAAS,GAAGjsB,CAAb,CAAJ,GAAsBgb,GAAG,CAACgR,QAAQ,GAAGhsB,CAAZ,CAAH,CAAkBuF,IAAlB,EAAtB;EAEH;EACF;;EACD,SAAO2mB,eAAP,CAAuBC,IAAvB,EAA6BC,IAA7B,EAAmC;EACjC,SAAK,IAAIpsB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGmsB,IAAI,CAACtpB,MAAzB,EAAiC7C,CAAC,EAAlC,EAAsC;EACpC,YAAMuL,EAAE,GAAG4gB,IAAI,CAACnsB,CAAD,CAAf;EACA,YAAMwL,EAAE,GAAG4gB,IAAI,CAACD,IAAI,CAACtpB,MAAL,GAAc7C,CAAd,GAAkB,CAAnB,CAAf;EACA,UAAIuL,EAAE,CAACvG,SAAH,CAAawG,EAAb,MAAqB,CAAzB,EAA4B,OAAO,KAAP;EAC7B;;EACD,WAAO,IAAP;EACD;;EACD,SAAO8T,QAAP,CAAgBiH,WAAhB,EAA6B;EAC3B,UAAMjb,GAAG,GAAG,IAAIP,QAAJ,EAAZ;;EACA,SAAK,IAAI/K,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGumB,WAAW,CAAC1jB,MAAhC,EAAwC7C,CAAC,EAAzC,EACEsL,GAAG,CAACqC,eAAJ,CAAoB4Y,WAAW,CAACvmB,CAAD,CAA/B;;EAEF,WAAOsL,GAAP;EACD;;EACD,SAAO5B,iBAAP,CAAyB+hB,SAAzB,EAAoC;EAClC,WAAOA,SAAS,CAAChkB,OAAV,CAAkBwjB,gBAAgB,CAACthB,cAAnC,CAAP;EACD;;EACD,SAAOuT,SAAP,CAAiBrT,GAAjB,EAAsB;EACpB,QAAIA,GAAG,KAAK,IAAR,IAAgBA,GAAG,CAAChH,MAAJ,KAAe,CAAnC,EACE,OAAO,CAAP;EAEF,QAAIqa,SAAS,GAAG,CAAhB;;EACA,SAAK,MAAM0G,UAAX,IAAyB/Z,GAAzB,EACEqT,SAAS,GAAGje,IAAI,CAACiN,GAAL,CAASgR,SAAT,EAAoB6N,WAAW,CAAC7N,SAAZ,CAAsB0G,UAAtB,CAApB,CAAZ;;EAEF,WAAO1G,SAAP;EACD;;EACD,SAAOmP,4BAAP,CAAoC/rB,CAApC,EAAuCsD,CAAvC,EAA0C;EACxC,WAAOA,CAAC,CAACf,MAAF,IAAYvC,CAAZ,GAAgBsD,CAAhB,GAAoB,EAA3B;EACD;;EACD,SAAOsD,OAAP,CAAe0c,UAAf,EAA2B2C,WAA3B,EAAwC;EACtC,SAAK,IAAIvmB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGumB,WAAW,CAAC1jB,MAAhC,EAAwC7C,CAAC,EAAzC,EACE,IAAI4jB,UAAU,CAACzgB,MAAX,CAAkBojB,WAAW,CAACvmB,CAAD,CAA7B,CAAJ,EACE,OAAOA,CAAP;;EAGJ,WAAO,CAAC,CAAR;EACD;;EACD,SAAOssB,mBAAP,CAA2BziB,GAA3B,EAAgC;EAC9B,SAAK,IAAI7J,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGf,IAAI,CAAC6S,KAAL,CAAWjI,GAAG,CAAChH,MAAJ,GAAa,CAAxB,CAApB,EAAgD7C,CAAC,EAAjD,EAAqD;EACnD,YAAM8f,CAAC,GAAGjW,GAAG,CAAChH,MAAJ,GAAa,CAAb,GAAiB7C,CAA3B;EACA,YAAMwe,IAAI,GAAG3U,GAAG,CAAC7J,CAAD,CAAH,CAAOgF,SAAP,CAAiB6E,GAAG,CAACiW,CAAD,CAApB,CAAb;EACA,UAAItB,IAAI,KAAK,CAAb,EAAgB,OAAOA,IAAP;EACjB;;EACD,WAAO,CAAP;EACD;;EACD,SAAOlY,OAAP,CAAe6lB,IAAf,EAAqBC,IAArB,EAA2B;EACzB,QAAIpsB,CAAC,GAAG,CAAR;;EACA,WAAOA,CAAC,GAAGmsB,IAAI,CAACtpB,MAAT,IAAmB7C,CAAC,GAAGosB,IAAI,CAACvpB,MAAnC,EAA2C;EACzC,YAAMyD,OAAO,GAAG6lB,IAAI,CAACnsB,CAAD,CAAJ,CAAQgF,SAAR,CAAkBonB,IAAI,CAACpsB,CAAD,CAAtB,CAAhB;EACA,UAAIsG,OAAO,KAAK,CAAhB,EAAmB,OAAOA,OAAP;EACnBtG,MAAAA,CAAC;EACF;;EACD,QAAIA,CAAC,GAAGosB,IAAI,CAACvpB,MAAb,EAAqB,OAAO,CAAC,CAAR;EACrB,QAAI7C,CAAC,GAAGmsB,IAAI,CAACtpB,MAAb,EAAqB,OAAO,CAAP;EACrB,WAAO,CAAP;EACD;;EACD,SAAOghB,aAAP,CAAqB0C,WAArB,EAAkC;EAChC,QAAItD,QAAQ,GAAG,IAAf;;EACA,SAAK,IAAIjjB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGumB,WAAW,CAAC1jB,MAAhC,EAAwC7C,CAAC,EAAzC,EACE,IAAIijB,QAAQ,KAAK,IAAb,IAAqBA,QAAQ,CAACje,SAAT,CAAmBuhB,WAAW,CAACvmB,CAAD,CAA9B,IAAqC,CAA9D,EACEijB,QAAQ,GAAGsD,WAAW,CAACvmB,CAAD,CAAtB;;EAGJ,WAAOijB,QAAP;EACD;;EACD,SAAOsJ,OAAP,CAAe1iB,GAAf,EAAoBQ,KAApB,EAA2BC,GAA3B,EAAgC;EAC9BD,IAAAA,KAAK,GAAGgR,QAAQ,CAACQ,KAAT,CAAexR,KAAf,EAAsB,CAAtB,EAAyBR,GAAG,CAAChH,MAA7B,CAAR;EACAyH,IAAAA,GAAG,GAAG+Q,QAAQ,CAACQ,KAAT,CAAevR,GAAf,EAAoB,CAAC,CAArB,EAAwBT,GAAG,CAAChH,MAA5B,CAAN;EACA,QAAI2pB,IAAI,GAAGliB,GAAG,GAAGD,KAAN,GAAc,CAAzB;EACA,QAAIC,GAAG,GAAG,CAAV,EAAakiB,IAAI,GAAG,CAAP;EACb,QAAIniB,KAAK,IAAIR,GAAG,CAAChH,MAAjB,EAAyB2pB,IAAI,GAAG,CAAP;EACzB,QAAIliB,GAAG,GAAGD,KAAV,EAAiBmiB,IAAI,GAAG,CAAP;EACjB,UAAMC,UAAU,GAAG,IAAI3iB,KAAJ,CAAU0iB,IAAV,EAAgBziB,IAAhB,CAAqB,IAArB,CAAnB;EACA,QAAIyiB,IAAI,KAAK,CAAb,EAAgB,OAAOC,UAAP;EAChB,QAAIC,IAAI,GAAG,CAAX;;EACA,SAAK,IAAI1sB,CAAC,GAAGqK,KAAb,EAAoBrK,CAAC,IAAIsK,GAAzB,EAA8BtK,CAAC,EAA/B,EACEysB,UAAU,CAACC,IAAI,EAAL,CAAV,GAAqB7iB,GAAG,CAAC7J,CAAD,CAAxB;;EAEF,WAAOysB,UAAP;EACD;;EA9LmC;;EAgMtC,MAAME,iBAAN,CAAwB;EACtBrmB,EAAAA,OAAO,CAACsmB,EAAD,EAAKC,EAAL,EAAS;EACd,UAAMV,IAAI,GAAGS,EAAb;EACA,UAAMR,IAAI,GAAGS,EAAb;EACA,WAAO5B,gBAAgB,CAAC3kB,OAAjB,CAAyB6lB,IAAzB,EAA+BC,IAA/B,CAAP;EACD;;EACD,MAAInmB,WAAJ,GAAkB;EAChB,WAAO,CAAC3D,UAAD,CAAP;EACD;;EARqB;;EAUxB,MAAMwqB,uBAAN,CAA8B;EAC5BxmB,EAAAA,OAAO,CAACsmB,EAAD,EAAKC,EAAL,EAAS;EACd,UAAMV,IAAI,GAAGS,EAAb;EACA,UAAMR,IAAI,GAAGS,EAAb;EACA,QAAIV,IAAI,CAACtpB,MAAL,GAAcupB,IAAI,CAACvpB,MAAvB,EAA+B,OAAO,CAAC,CAAR;EAC/B,QAAIspB,IAAI,CAACtpB,MAAL,GAAcupB,IAAI,CAACvpB,MAAvB,EAA+B,OAAO,CAAP;EAC/B,QAAIspB,IAAI,CAACtpB,MAAL,KAAgB,CAApB,EAAuB,OAAO,CAAP;EACvB,UAAMkqB,WAAW,GAAG9B,gBAAgB,CAAC3kB,OAAjB,CAAyB6lB,IAAzB,EAA+BC,IAA/B,CAApB;EACA,UAAMY,UAAU,GAAG/B,gBAAgB,CAACiB,eAAjB,CAAiCC,IAAjC,EAAuCC,IAAvC,CAAnB;EACA,QAAIY,UAAJ,EAAgB,OAAO,CAAP;EAChB,WAAOD,WAAP;EACD;;EACDE,EAAAA,UAAU,CAACL,EAAD,EAAKC,EAAL,EAAS;EACjB,UAAMV,IAAI,GAAGS,EAAb;EACA,UAAMR,IAAI,GAAGS,EAAb;EACA,QAAIV,IAAI,CAACtpB,MAAL,GAAcupB,IAAI,CAACvpB,MAAvB,EAA+B,OAAO,CAAC,CAAR;EAC/B,QAAIspB,IAAI,CAACtpB,MAAL,GAAcupB,IAAI,CAACvpB,MAAvB,EAA+B,OAAO,CAAP;EAC/B,QAAIspB,IAAI,CAACtpB,MAAL,KAAgB,CAApB,EAAuB,OAAO,CAAP;EACvB,UAAMqqB,IAAI,GAAGjC,gBAAgB,CAACqB,mBAAjB,CAAqCH,IAArC,CAAb;EACA,UAAMgB,IAAI,GAAGlC,gBAAgB,CAACqB,mBAAjB,CAAqCF,IAArC,CAAb;EACA,QAAIgB,EAAE,GAAGF,IAAI,GAAG,CAAP,GAAW,CAAX,GAAef,IAAI,CAACtpB,MAAL,GAAc,CAAtC;EACA,QAAIwqB,EAAE,GAAGF,IAAI,GAAG,CAAP,GAAW,CAAX,GAAehB,IAAI,CAACtpB,MAAL,GAAc,CAAtC;;EACA,SAAK,IAAI7C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGmsB,IAAI,CAACtpB,MAAzB,EAAiC7C,CAAC,EAAlC,EAAsC;EACpC,YAAMstB,SAAS,GAAGnB,IAAI,CAACiB,EAAD,CAAJ,CAASpoB,SAAT,CAAmBonB,IAAI,CAACiB,EAAD,CAAvB,CAAlB;EACA,UAAIC,SAAS,KAAK,CAAlB,EAAqB,OAAOA,SAAP;EACrBF,MAAAA,EAAE,IAAIF,IAAN;EACAG,MAAAA,EAAE,IAAIF,IAAN;EACD;;EACD,WAAO,CAAP;EACD;;EACD,MAAIlnB,WAAJ,GAAkB;EAChB,WAAO,CAAC3D,UAAD,CAAP;EACD;;EAhC2B;;EAkC9B2oB,gBAAgB,CAAC0B,iBAAjB,GAAqCA,iBAArC;EACA1B,gBAAgB,CAAC6B,uBAAjB,GAA2CA,uBAA3C;EACA7B,gBAAgB,CAACthB,cAAjB,GAAkC,IAAIG,KAAJ,CAAU,CAAV,EAAaC,IAAb,CAAkB,IAAlB,CAAlC;;ECpPe,MAAMwjB,aAAN,CAAoB;EACjCluB,EAAAA,WAAW,CAACoP,GAAD,EAAM;EACf,SAAKA,GAAL,GAAWA,GAAX;EACD;;EACDC,EAAAA,MAAM,CAACrJ,CAAD,EAAI;EACR,SAAKoJ,GAAL,IAAYpJ,CAAZ;EACD;;EACDsJ,EAAAA,SAAS,CAAC3O,CAAD,EAAI4D,CAAJ,EAAO;EACd,SAAK6K,GAAL,GAAW,KAAKA,GAAL,CAASG,MAAT,CAAgB,CAAhB,EAAmB5O,CAAnB,IAAwB4D,CAAxB,GAA4B,KAAK6K,GAAL,CAASG,MAAT,CAAgB5O,CAAC,GAAG,CAApB,CAAvC;EACD;;EACDN,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAK+O,GAAZ;EACD;;EAZgC;;ECQpB,MAAM+e,uBAAN,CAA8B;EAC3CnuB,EAAAA,WAAW,GAAG;EACZmuB,IAAAA,uBAAuB,CAAC9qB,YAAxB,CAAqCC,KAArC,CAA2C,IAA3C,EAAiDC,SAAjD;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK+qB,UAAL,GAAkB,CAAlB;EACA,SAAKC,SAAL,GAAiB,CAAjB;EACA,SAAKpH,YAAL,GAAoB,IAApB;;EACA,QAAI1jB,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,UAAID,SAAS,CAAC,CAAD,CAAT,YAAwBkH,KAA5B,EAAmC;EACjC,cAAMyc,WAAW,GAAG3jB,SAAS,CAAC,CAAD,CAA7B;EACA4qB,QAAAA,uBAAuB,CAAC9qB,YAAxB,CAAqCI,IAArC,CAA0C,IAA1C,EAAgDyjB,WAAhD,EAA6D0E,gBAAgB,CAAC/N,SAAjB,CAA2BqJ,WAA3B,CAA7D,EAAsG0E,gBAAgB,CAACD,QAAjB,CAA0BzE,WAA1B,CAAtG;EACD,OAHD,MAGO,IAAIhmB,MAAM,CAAC4J,SAAP,CAAiBvH,SAAS,CAAC,CAAD,CAA1B,CAAJ,EAAoC;EACzC,cAAM4E,IAAI,GAAG5E,SAAS,CAAC,CAAD,CAAtB;EACA,aAAK0jB,YAAL,GAAoB,IAAIxc,KAAJ,CAAUtC,IAAV,EAAgBuC,IAAhB,CAAqB,IAArB,CAApB;;EACA,aAAK,IAAI/J,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGwH,IAApB,EAA0BxH,CAAC,EAA3B,EACE,KAAKsmB,YAAL,CAAkBtmB,CAAlB,IAAuB,IAAI0D,UAAJ,EAAvB;EAEH,OANM,MAMA,IAAI6F,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAeuV,kBAAf,CAAhB,EAAoD;EACzD,cAAMwV,QAAQ,GAAG/qB,SAAS,CAAC,CAAD,CAA1B;;EACA,YAAI+qB,QAAQ,KAAK,IAAjB,EAAuB;EACrB,eAAKrH,YAAL,GAAoB,IAAIxc,KAAJ,CAAU,CAAV,EAAaC,IAAb,CAAkB,IAAlB,CAApB;EACA,iBAAO,IAAP;EACD;;EACD,aAAK0jB,UAAL,GAAkBE,QAAQ,CAACrV,YAAT,EAAlB;EACA,aAAKoV,SAAL,GAAiBC,QAAQ,CAACpV,WAAT,EAAjB;EACA,aAAK+N,YAAL,GAAoB,IAAIxc,KAAJ,CAAU6jB,QAAQ,CAACnmB,IAAT,EAAV,EAA2BuC,IAA3B,CAAgC,IAAhC,CAApB;;EACA,aAAK,IAAI/J,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKsmB,YAAL,CAAkBzjB,MAAtC,EAA8C7C,CAAC,EAA/C,EACE,KAAKsmB,YAAL,CAAkBtmB,CAAlB,IAAuB2tB,QAAQ,CAAClV,iBAAT,CAA2BzY,CAA3B,CAAvB;EAEH;EACF,KAvBD,MAuBO,IAAI4C,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,UAAID,SAAS,CAAC,CAAD,CAAT,YAAwBkH,KAAxB,IAAiCvJ,MAAM,CAAC4J,SAAP,CAAiBvH,SAAS,CAAC,CAAD,CAA1B,CAArC,EAAqE;EACnE,cAAM2jB,WAAW,GAAG3jB,SAAS,CAAC,CAAD,CAA7B;EAAA,cAAkCsa,SAAS,GAAGta,SAAS,CAAC,CAAD,CAAvD;EACA4qB,QAAAA,uBAAuB,CAAC9qB,YAAxB,CAAqCI,IAArC,CAA0C,IAA1C,EAAgDyjB,WAAhD,EAA6DrJ,SAA7D,EAAwE+N,gBAAgB,CAACD,QAAjB,CAA0BzE,WAA1B,CAAxE;EACD,OAHD,MAGO,IAAIhmB,MAAM,CAAC4J,SAAP,CAAiBvH,SAAS,CAAC,CAAD,CAA1B,KAAkCrC,MAAM,CAAC4J,SAAP,CAAiBvH,SAAS,CAAC,CAAD,CAA1B,CAAtC,EAAsE;EAC3E,cAAM4E,IAAI,GAAG5E,SAAS,CAAC,CAAD,CAAtB;EAAA,cAA2Bsa,SAAS,GAAGta,SAAS,CAAC,CAAD,CAAhD;EACA,aAAK0jB,YAAL,GAAoB,IAAIxc,KAAJ,CAAUtC,IAAV,EAAgBuC,IAAhB,CAAqB,IAArB,CAApB;EACA,aAAK0jB,UAAL,GAAkBvQ,SAAlB;;EACA,aAAK,IAAIld,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGwH,IAApB,EAA0BxH,CAAC,EAA3B,EACE,KAAKsmB,YAAL,CAAkBtmB,CAAlB,IAAuB+qB,WAAW,CAAC9N,MAAZ,CAAmBC,SAAnB,CAAvB;EAEH;EACF,KAZM,MAYA,IAAIta,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,UAAItC,MAAM,CAAC4J,SAAP,CAAiBvH,SAAS,CAAC,CAAD,CAA1B,KAAmCA,SAAS,CAAC,CAAD,CAAT,YAAwBkH,KAAxB,IAAiCvJ,MAAM,CAAC4J,SAAP,CAAiBvH,SAAS,CAAC,CAAD,CAA1B,CAAxE,EAAyG;EACvG,cAAM2jB,WAAW,GAAG3jB,SAAS,CAAC,CAAD,CAA7B;EAAA,cAAkCsa,SAAS,GAAGta,SAAS,CAAC,CAAD,CAAvD;EAAA,cAA4DooB,QAAQ,GAAGpoB,SAAS,CAAC,CAAD,CAAhF;EACA,aAAK6qB,UAAL,GAAkBvQ,SAAlB;EACA,aAAKwQ,SAAL,GAAiB1C,QAAjB;EACA,YAAIzE,WAAW,KAAK,IAApB,EACE,KAAKD,YAAL,GAAoB,IAAIxc,KAAJ,CAAU,CAAV,EAAaC,IAAb,CAAkB,IAAlB,CAApB,CADF,KAGE,KAAKuc,YAAL,GAAoBC,WAApB;EAEH,OATD,MASO,IAAIhmB,MAAM,CAAC4J,SAAP,CAAiBvH,SAAS,CAAC,CAAD,CAA1B,KAAmCrC,MAAM,CAAC4J,SAAP,CAAiBvH,SAAS,CAAC,CAAD,CAA1B,KAAkCrC,MAAM,CAAC4J,SAAP,CAAiBvH,SAAS,CAAC,CAAD,CAA1B,CAAzE,EAA0G;EAC/G,cAAM4E,IAAI,GAAG5E,SAAS,CAAC,CAAD,CAAtB;EAAA,cAA2Bsa,SAAS,GAAGta,SAAS,CAAC,CAAD,CAAhD;EAAA,cAAqDooB,QAAQ,GAAGpoB,SAAS,CAAC,CAAD,CAAzE;EACA,aAAK0jB,YAAL,GAAoB,IAAIxc,KAAJ,CAAUtC,IAAV,EAAgBuC,IAAhB,CAAqB,IAArB,CAApB;EACA,aAAK0jB,UAAL,GAAkBvQ,SAAlB;EACA,aAAKwQ,SAAL,GAAiB1C,QAAjB;;EACA,aAAK,IAAIhrB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGwH,IAApB,EAA0BxH,CAAC,EAA3B,EACE,KAAKsmB,YAAL,CAAkBtmB,CAAlB,IAAuB,KAAK0Y,gBAAL,EAAvB;EAEH;EACF;EACF;;EACD1U,EAAAA,IAAI,CAACsE,KAAD,EAAQ;EACV,QAAI,KAAK8P,IAAL,EAAJ,EACE,OAAO,KAAKkO,YAAL,CAAkBhe,KAAlB,EAAyBtE,IAAzB,EAAP,CADF,KAGE,OAAO7D,MAAM,CAACC,GAAd;EAEH;;EACD6D,EAAAA,WAAW,CAACqE,KAAD,EAAQpE,aAAR,EAAuB/C,KAAvB,EAA8B;EACvC,YAAQ+C,aAAR;EACA,WAAKiU,kBAAkB,CAAChU,CAAxB;EACE,aAAKmiB,YAAL,CAAkBhe,KAAlB,EAAyB3G,CAAzB,GAA6BR,KAA7B;EACA;;EACF,WAAKgX,kBAAkB,CAAC/T,CAAxB;EACE,aAAKkiB,YAAL,CAAkBhe,KAAlB,EAAyB1G,CAAzB,GAA6BT,KAA7B;EACA;;EACF;EACE,aAAKmlB,YAAL,CAAkBhe,KAAlB,EAAyBrE,WAAzB,CAAqCC,aAArC,EAAoD/C,KAApD;;EARF;EAUD;;EACD0C,EAAAA,IAAI,CAACyE,KAAD,EAAQ;EACV,QAAI,KAAKkQ,IAAL,EAAJ,EACE,OAAO,KAAK8N,YAAL,CAAkBhe,KAAlB,EAAyBzE,IAAzB,EAAP,CADF,KAGE,OAAO1D,MAAM,CAACC,GAAd;EAEH;;EACDoH,EAAAA,IAAI,GAAG;EACL,WAAO,KAAK8e,YAAL,CAAkBzjB,MAAzB;EACD;;EACD+B,EAAAA,WAAW,CAAC0D,KAAD,EAAQpE,aAAR,EAAuB;EAChC,YAAQA,aAAR;EACA,WAAKiU,kBAAkB,CAAChU,CAAxB;EACE,eAAO,KAAKmiB,YAAL,CAAkBhe,KAAlB,EAAyB3G,CAAhC;;EACF,WAAKwW,kBAAkB,CAAC/T,CAAxB;EACE,eAAO,KAAKkiB,YAAL,CAAkBhe,KAAlB,EAAyB1G,CAAhC;;EACF;EACE,eAAO,KAAK0kB,YAAL,CAAkBhe,KAAlB,EAAyB1D,WAAzB,CAAqCV,aAArC,CAAP;EANF;EAQD;;EACDoF,EAAAA,aAAa,GAAG;EACd,QAAI1G,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAM7C,CAAC,GAAG4C,SAAS,CAAC,CAAD,CAAnB;EACA,aAAO,KAAK0jB,YAAL,CAAkBtmB,CAAlB,CAAP;EACD,KAHD,MAGO,IAAI4C,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMyF,KAAK,GAAG1F,SAAS,CAAC,CAAD,CAAvB;EAAA,YAA4BwC,KAAK,GAAGxC,SAAS,CAAC,CAAD,CAA7C;EACAwC,MAAAA,KAAK,CAACY,aAAN,CAAoB,KAAKsgB,YAAL,CAAkBhe,KAAlB,CAApB;EACD;EACF;;EACDmQ,EAAAA,iBAAiB,CAACzY,CAAD,EAAI;EACnB,UAAMuF,IAAI,GAAG,KAAKmT,gBAAL,EAAb;EACAnT,IAAAA,IAAI,CAACS,aAAL,CAAmB,KAAKsgB,YAAL,CAAkBtmB,CAAlB,CAAnB;EACA,WAAOuF,IAAP;EACD;;EACDmT,EAAAA,gBAAgB,GAAG;EACjB,WAAOqS,WAAW,CAAC9N,MAAZ,CAAmB,KAAK3E,YAAL,EAAnB,EAAwC,KAAKC,WAAL,EAAxC,CAAP;EACD;;EACDD,EAAAA,YAAY,GAAG;EACb,WAAO,KAAKmV,UAAZ;EACD;;EACDvoB,EAAAA,IAAI,CAACoD,KAAD,EAAQ;EACV,WAAO,KAAKge,YAAL,CAAkBhe,KAAlB,EAAyB3G,CAAhC;EACD;;EACD4W,EAAAA,WAAW,GAAG;EACZ,WAAO,KAAKmV,SAAZ;EACD;;EACD/U,EAAAA,cAAc,CAACrN,GAAD,EAAM;EAClB,SAAK,IAAItL,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKsmB,YAAL,CAAkBzjB,MAAtC,EAA8C7C,CAAC,EAA/C,EACEsL,GAAG,CAACqC,eAAJ,CAAoB,KAAK2Y,YAAL,CAAkBtmB,CAAlB,CAApB;;EAEF,WAAOsL,GAAP;EACD;;EACD/F,EAAAA,IAAI,GAAG;EACL,UAAMqoB,gBAAgB,GAAG,IAAI9jB,KAAJ,CAAU,KAAKtC,IAAL,EAAV,EAAuBuC,IAAvB,CAA4B,IAA5B,CAAzB;;EACA,SAAK,IAAI/J,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKsmB,YAAL,CAAkBzjB,MAAtC,EAA8C7C,CAAC,EAA/C,EAAmD;EACjD,YAAMyK,SAAS,GAAG,KAAKiO,gBAAL,EAAlB;EACAjO,MAAAA,SAAS,CAACzE,aAAV,CAAwB,KAAKsgB,YAAL,CAAkBtmB,CAAlB,CAAxB;EACA4tB,MAAAA,gBAAgB,CAAC5tB,CAAD,CAAhB,GAAsByK,SAAtB;EACD;;EACD,WAAO,IAAI+iB,uBAAJ,CAA4BI,gBAA5B,EAA8C,KAAKH,UAAnD,EAA+D,KAAKC,SAApE,CAAP;EACD;;EACDhuB,EAAAA,QAAQ,GAAG;EACT,QAAI,KAAK4mB,YAAL,CAAkBzjB,MAAlB,GAA2B,CAA/B,EAAkC;EAChC,YAAMgrB,UAAU,GAAG,IAAIN,aAAJ,CAAkB,KAAK,KAAKjH,YAAL,CAAkBzjB,MAAzC,CAAnB;EACAgrB,MAAAA,UAAU,CAACnf,MAAX,CAAkB,GAAlB;EACAmf,MAAAA,UAAU,CAACnf,MAAX,CAAkB,KAAK4X,YAAL,CAAkB,CAAlB,CAAlB;;EACA,WAAK,IAAItmB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKsmB,YAAL,CAAkBzjB,MAAtC,EAA8C7C,CAAC,EAA/C,EAAmD;EACjD6tB,QAAAA,UAAU,CAACnf,MAAX,CAAkB,IAAlB;EACAmf,QAAAA,UAAU,CAACnf,MAAX,CAAkB,KAAK4X,YAAL,CAAkBtmB,CAAlB,CAAlB;EACD;;EACD6tB,MAAAA,UAAU,CAACnf,MAAX,CAAkB,GAAlB;EACA,aAAOmf,UAAU,CAACnuB,QAAX,EAAP;EACD,KAVD,MAUO;EACL,aAAO,IAAP;EACD;EACF;;EACDmG,EAAAA,IAAI,CAACyC,KAAD,EAAQ;EACV,WAAO,KAAKge,YAAL,CAAkBhe,KAAlB,EAAyB1G,CAAhC;EACD;;EACD8H,EAAAA,iBAAiB,GAAG;EAClB,WAAO,KAAK4c,YAAZ;EACD;;EACD,MAAIrgB,WAAJ,GAAkB;EAChB,WAAO,CAACkS,kBAAD,EAAqB5V,YAArB,CAAP;EACD;;EAvK0C;;ECH9B,MAAMurB,8BAAN,CAAqC;EAClD,SAAOC,QAAP,GAAkB;EAChB,WAAOD,8BAA8B,CAACE,cAAtC;EACD;;EACDC,EAAAA,WAAW,GAAG;EACZ,WAAOH,8BAA8B,CAACC,QAA/B,EAAP;EACD;;EACD9Q,EAAAA,MAAM,GAAG;EACP,QAAIra,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,UAAID,SAAS,CAAC,CAAD,CAAT,YAAwBkH,KAA5B,EAAmC;EACjC,cAAMyc,WAAW,GAAG3jB,SAAS,CAAC,CAAD,CAA7B;EACA,eAAO,IAAI4qB,uBAAJ,CAA4BjH,WAA5B,CAAP;EACD,OAHD,MAGO,IAAIhd,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAeuV,kBAAf,CAAhB,EAAoD;EACzD,cAAMwV,QAAQ,GAAG/qB,SAAS,CAAC,CAAD,CAA1B;EACA,eAAO,IAAI4qB,uBAAJ,CAA4BG,QAA5B,CAAP;EACD;EACF,KARD,MAQO,IAAI/qB,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,UAAI2E,IAAI,GAAG5E,SAAS,CAAC,CAAD,CAApB;EAAA,UAAyBsa,SAAS,GAAGta,SAAS,CAAC,CAAD,CAA9C;EACA,UAAIsa,SAAS,GAAG,CAAhB,EAAmBA,SAAS,GAAG,CAAZ;EACnB,UAAIA,SAAS,GAAG,CAAhB,EAAmBA,SAAS,GAAG,CAAZ;EACnB,aAAO,IAAIsQ,uBAAJ,CAA4BhmB,IAA5B,EAAkC0V,SAAlC,CAAP;EACD,KALM,MAKA,IAAIta,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,UAAI2E,IAAI,GAAG5E,SAAS,CAAC,CAAD,CAApB;EAAA,UAAyBsa,SAAS,GAAGta,SAAS,CAAC,CAAD,CAA9C;EAAA,UAAmDooB,QAAQ,GAAGpoB,SAAS,CAAC,CAAD,CAAvE;EACA,UAAIsrB,OAAO,GAAGhR,SAAS,GAAG8N,QAA1B;EACA,UAAIA,QAAQ,GAAG,CAAf,EACEA,QAAQ,GAAG,CAAX;EAEF,UAAIkD,OAAO,GAAG,CAAd,EACEA,OAAO,GAAG,CAAV;EAEF,UAAIA,OAAO,GAAG,CAAd,EAAiBA,OAAO,GAAG,CAAV;EACjB,aAAO,IAAIV,uBAAJ,CAA4BhmB,IAA5B,EAAkC0mB,OAAO,GAAGlD,QAA5C,EAAsDA,QAAtD,CAAP;EACD;EACF;;EACD,MAAI/kB,WAAJ,GAAkB;EAChB,WAAO,CAAC+W,yBAAD,EAA4Bza,YAA5B,CAAP;EACD;;EApCiD;EAsCpDurB,8BAA8B,CAACE,cAA/B,GAAgD,IAAIF,8BAAJ,EAAhD;;ECvCe,MAAMK,YAAN,SAA2BtE,kBAA3B,CAA8C;EAC3DxqB,EAAAA,WAAW,GAAG;EACZ;EACA8uB,IAAAA,YAAY,CAACzrB,YAAb,CAA0BC,KAA1B,CAAgC,IAAhC,EAAsCC,SAAtC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,UAAM0rB,QAAQ,GAAGxrB,SAAS,CAAC,CAAD,CAA1B;EAAA,UAA+B+d,OAAO,GAAG/d,SAAS,CAAC,CAAD,CAAlD;EACAinB,IAAAA,kBAAkB,CAACnnB,YAAnB,CAAgCI,IAAhC,CAAqC,IAArC,EAA2CsrB,QAA3C,EAAqDzN,OAArD;EACD;;EACDnB,EAAAA,YAAY,GAAG;EACb,UAAM4O,QAAQ,GAAG,IAAItkB,KAAJ,CAAU,KAAKggB,WAAL,CAAiBjnB,MAA3B,EAAmCkH,IAAnC,CAAwC,IAAxC,CAAjB;;EACA,SAAK,IAAI/J,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGouB,QAAQ,CAACvrB,MAA7B,EAAqC7C,CAAC,EAAtC,EACEouB,QAAQ,CAACpuB,CAAD,CAAR,GAAc,KAAK8pB,WAAL,CAAiB9pB,CAAjB,EAAoBuF,IAApB,EAAd;;EAEF,WAAO,IAAI4oB,YAAJ,CAAiBC,QAAjB,EAA2B,KAAK1Q,QAAhC,CAAP;EACD;;EACDG,EAAAA,WAAW,GAAG;EACZ,QAAIjb,SAAS,CAACC,MAAV,KAAqB,CAArB,IAA2B,OAAOD,SAAS,CAAC,CAAD,CAAhB,KAAwB,QAAxB,IAAoCA,SAAS,CAAC,CAAD,CAAT,YAAwBya,QAA3F,EAAsG;EACpG,YAAM7Y,KAAK,GAAG5B,SAAS,CAAC,CAAD,CAAvB;EAAA,YAA4B5D,SAAS,GAAG4D,SAAS,CAAC,CAAD,CAAjD;EACA,UAAI,CAAC,KAAKsd,iBAAL,CAAuB1b,KAAvB,CAAL,EACE,OAAO,KAAP;EAEF,aAAO,MAAMqZ,WAAN,CAAkB/a,IAAlB,CAAuB,IAAvB,EAA6B0B,KAA7B,EAAoCxF,SAApC,CAAP;EACD,KAND,MAMO;EACL,aAAO,MAAM6e,WAAN,CAAkBlb,KAAlB,CAAwB,IAAxB,EAA8BC,SAA9B,CAAP;EACD;EACF;;EACD0iB,EAAAA,oBAAoB,GAAG;EACrB,WAAO,CAAP;EACD;;EACD/H,EAAAA,WAAW,GAAG;EACZ,WAAOF,QAAQ,CAACkD,qBAAhB;EACD;;EACDjI,EAAAA,YAAY,GAAG;EACb,WAAO,CAAP;EACD;;EACDsN,EAAAA,WAAW,GAAG;EACZ,QAAI,KAAKte,OAAL,EAAJ,EACE,OAAO,KAAKmW,UAAL,GAAkB+L,qBAAlB,EAAP;EAEF,UAAM6E,QAAQ,GAAG,IAAIrmB,SAAJ,EAAjB;;EACA,SAAK,IAAIhI,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK8pB,WAAL,CAAiBjnB,MAArC,EAA6C7C,CAAC,EAA9C,EAAkD;EAChD,YAAMsuB,OAAO,GAAG,KAAKxE,WAAL,CAAiB9pB,CAAjB,CAAhB;EACA,YAAMypB,KAAK,GAAG6E,OAAO,CAAC1I,WAAR,EAAd;;EACA,WAAK,IAAI9F,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG2J,KAAK,CAACnL,gBAAN,EAApB,EAA8CwB,CAAC,EAA/C,EACEuO,QAAQ,CAACjnB,GAAT,CAAaqiB,KAAK,CAAC9L,YAAN,CAAmBmC,CAAnB,CAAb;EAEH;;EACD,UAAMyO,aAAa,GAAG,IAAIzkB,KAAJ,CAAUukB,QAAQ,CAAC7mB,IAAT,EAAV,EAA2BuC,IAA3B,CAAgC,IAAhC,CAAtB;EACA,WAAO,KAAK0T,UAAL,GAAkB+L,qBAAlB,CAAwC6E,QAAQ,CAAC5mB,OAAT,CAAiB8mB,aAAjB,CAAxC,CAAP;EACD;;EACD1I,EAAAA,eAAe,GAAG;EAChB,WAAOxI,QAAQ,CAACiE,qBAAhB;EACD;;EACD,MAAIrb,WAAJ,GAAkB;EAChB,WAAO,CAACohB,SAAD,CAAP;EACD;;EAxD0D;;ECJ7D;EACA;EACA;EACe,MAAMmH,KAAN,CAAU;EACvB;EACF;EACA;EACA;EACA;EACA;EACE3mB,EAAAA,GAAG,GAAG;EAEN;EACF;EACA;EACA;EACA;EACA;EACA;;;EACE4mB,EAAAA,GAAG,GAAG;EAEN;EACF;EACA;EACA;;;EACEjnB,EAAAA,IAAI,GAAG;EAEP;EACF;EACA;EACA;;;EACEuB,EAAAA,MAAM,GAAG;EAET;EACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;EACE2lB,EAAAA,QAAQ,GAAG;;EA9CY;;ECEzB;EACA;EACA;;EACe,MAAMC,OAAN,SAAsBjF,GAAtB,CAA0B;EACvCrqB,EAAAA,WAAW,CAAC4F,CAAD,EAAI;EACb;EACA,SAAK2pB,GAAL,GAAW,IAAIJ,GAAJ,EAAX;EACA,QAAIvpB,CAAC,YAAYkC,UAAjB,EACE,KAAKE,MAAL,CAAYpC,CAAZ;EACH;;EAEDqJ,EAAAA,QAAQ,CAACrJ,CAAD,EAAI;EACV,UAAMlB,QAAQ,GAAGkB,CAAC,CAAClB,QAAF,GAAakB,CAAC,CAAClB,QAAF,EAAb,GAA4BkB,CAA7C;EACA,QAAI,KAAK2pB,GAAL,CAASC,GAAT,CAAa9qB,QAAb,CAAJ,EACE,OAAO,IAAP;EACF,WAAO,KAAP;EACD;;EAEDqD,EAAAA,GAAG,CAACnC,CAAD,EAAI;EACL,UAAMlB,QAAQ,GAAGkB,CAAC,CAAClB,QAAF,GAAakB,CAAC,CAAClB,QAAF,EAAb,GAA4BkB,CAA7C;EACA,QAAI,KAAK2pB,GAAL,CAASC,GAAT,CAAa9qB,QAAb,CAAJ,EACE,OAAO,KAAP;EACF,WAAO,CAAC,CAAC,KAAK6qB,GAAL,CAAS9mB,GAAT,CAAa/D,QAAb,EAAuBkB,CAAvB,CAAT;EACD;;EAEDoC,EAAAA,MAAM,CAACzD,CAAD,EAAI;EACR,SAAK,MAAMyB,CAAX,IAAgBzB,CAAhB,EACE,KAAKwD,GAAL,CAAS/B,CAAT;;EACF,WAAO,IAAP;EACD;;EAEDqC,EAAAA,MAAM,GAAG;EACP,UAAM,IAAIoc,6BAAJ,EAAN;EACD;;EAEDtc,EAAAA,IAAI,GAAG;EACL,WAAO,KAAKonB,GAAL,CAASpnB,IAAhB;EACD;;EAEDF,EAAAA,OAAO,GAAG;EACR,WAAO,KAAKsnB,GAAL,CAASpnB,IAAT,KAAkB,CAAzB;EACD;;EAEDC,EAAAA,OAAO,GAAG;EACR,WAAOqC,KAAK,CAACgZ,IAAN,CAAW,KAAK8L,GAAL,CAAS7lB,MAAT,EAAX,CAAP;EACD;;EAEDxB,EAAAA,QAAQ,GAAG;EACT,WAAO,IAAIkB,UAAJ,CAAa,KAAKmmB,GAAlB,CAAP;EACD;;EAED,GAAC9lB,MAAM,CAACvB,QAAR,IAAoB;EAClB,WAAO,KAAKqnB,GAAZ;EACD;;EAlDsC;;EAqDzC,MAAMnmB,UAAN,CAAe;EACbpJ,EAAAA,WAAW,CAACuvB,GAAD,EAAM;EACf,SAAKrnB,QAAL,GAAgBqnB,GAAG,CAAC7lB,MAAJ,EAAhB;EACA,UAAM;EAAE+lB,MAAAA,IAAF;EAAQ3tB,MAAAA;EAAR,QAAkB,KAAKoG,QAAL,CAAc2B,IAAd,EAAxB;EACA,SAAK4lB,IAAL,GAAYA,IAAZ;EACA,SAAK3tB,KAAL,GAAaA,KAAb;EACD;;EAED+H,EAAAA,IAAI,GAAG;EACL,QAAI,KAAK4lB,IAAT,EACE,MAAM,IAAI/mB,sBAAJ,EAAN;EACF,UAAMgnB,OAAO,GAAG,KAAK5tB,KAArB;EACA,UAAM;EAAE2tB,MAAAA,IAAF;EAAQ3tB,MAAAA;EAAR,QAAkB,KAAKoG,QAAL,CAAc2B,IAAd,EAAxB;EACA,SAAK4lB,IAAL,GAAYA,IAAZ;EACA,SAAK3tB,KAAL,GAAaA,KAAb;EACA,WAAO4tB,OAAP;EACD;;EAED5lB,EAAAA,OAAO,GAAG;EACR,WAAO,CAAC,KAAK2lB,IAAb;EACD;;EAEDpnB,EAAAA,MAAM,GAAG;EACP,UAAM,IAAIoc,6BAAJ,EAAN;EACD;;EAxBY;;ECzDf;EACA;EACA;;EACe,MAAMkL,OAAN,SAAsBC,KAAtB,CAAmC;EAChD5vB,EAAAA,WAAW,GAAG;EACZ;EACA,SAAKuvB,GAAL,GAAW,IAAIJ,GAAJ,EAAX;EACD;;EAED3mB,EAAAA,GAAG,CAACqnB,GAAD,EAAM;EACP,WAAO,KAAKN,GAAL,CAAS/mB,GAAT,CAAaqnB,GAAb,KAAqB,IAA5B;EACD;;EAEDT,EAAAA,GAAG,CAACS,GAAD,EAAM/tB,KAAN,EAAa;EACd,SAAKytB,GAAL,CAAS9mB,GAAT,CAAaonB,GAAb,EAAkB/tB,KAAlB;EACA,WAAOA,KAAP;EACD;;EAED4H,EAAAA,MAAM,GAAG;EACP,UAAMC,SAAS,GAAG,IAAIhB,SAAJ,EAAlB;EACA,UAAMmnB,EAAE,GAAG,KAAKP,GAAL,CAAS7lB,MAAT,EAAX;EACA,QAAI9D,CAAC,GAAGkqB,EAAE,CAACjmB,IAAH,EAAR;;EACA,WAAO,CAACjE,CAAC,CAAC6pB,IAAV,EAAgB;EACd9lB,MAAAA,SAAS,CAAC5B,GAAV,CAAcnC,CAAC,CAAC9D,KAAhB;EACA8D,MAAAA,CAAC,GAAGkqB,EAAE,CAACjmB,IAAH,EAAJ;EACD;;EACD,WAAOF,SAAP;EACD;;EAED0lB,EAAAA,QAAQ,GAAG;EACT,UAAMU,OAAO,GAAG,IAAIT,OAAJ,EAAhB;EACA,SAAKC,GAAL,CAASS,OAAT,GAAmBC,OAAnB,CAA2BC,KAAK,IAAIH,OAAO,CAAChoB,GAAR,CAAYmoB,KAAZ,CAApC;EACA,WAAOH,OAAP;EACD;;EAED5nB,EAAAA,IAAI,GAAG;EACL,WAAO,KAAKonB,GAAL,CAASpnB,IAAT,EAAP;EACD;;EAlC+C;;ECDnC,MAAMgoB,cAAN,CAAqB;EAClCnwB,EAAAA,WAAW,GAAG;EACZmwB,IAAAA,cAAc,CAAC9sB,YAAf,CAA4BC,KAA5B,CAAkC,IAAlC,EAAwCC,SAAxC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK+sB,UAAL,GAAkB,IAAlB;EACA,SAAKC,MAAL,GAAc,IAAd;EACA,QAAI9sB,SAAS,CAACC,MAAV,KAAqB,CAAzB,EACE,KAAK4sB,UAAL,GAAkBD,cAAc,CAACG,QAAjC,CADF,KAEK,IAAI/sB,SAAS,CAACC,MAAV,KAAqB,CAAzB,EACH,IAAID,SAAS,CAAC,CAAD,CAAT,YAAwBgtB,IAA5B,EAAkC;EAChC,YAAMC,SAAS,GAAGjtB,SAAS,CAAC,CAAD,CAA3B;EACA,WAAK6sB,UAAL,GAAkBI,SAAlB;EACA,UAAIA,SAAS,KAAKL,cAAc,CAACM,KAAjC,EACE,KAAKC,QAAL,CAAc,GAAd;EAEH,KAND,MAMO,IAAI,OAAOntB,SAAS,CAAC,CAAD,CAAhB,KAAwB,QAA5B,EAAsC;EAC3C,YAAMyO,KAAK,GAAGzO,SAAS,CAAC,CAAD,CAAvB;EACA,WAAK6sB,UAAL,GAAkBD,cAAc,CAACM,KAAjC;EACA,WAAKC,QAAL,CAAc1e,KAAd;EACD,KAJM,MAIA,IAAIzO,SAAS,CAAC,CAAD,CAAT,YAAwB4sB,cAA5B,EAA4C;EACjD,YAAMQ,EAAE,GAAGptB,SAAS,CAAC,CAAD,CAApB;EACA,WAAK6sB,UAAL,GAAkBO,EAAE,CAACP,UAArB;EACA,WAAKC,MAAL,GAAcM,EAAE,CAACN,MAAjB;EACD;EAEJ;;EACD,SAAOO,WAAP,CAAmBC,GAAnB,EAAwBC,GAAxB,EAA6B;EAC3B,QAAID,GAAG,CAAClrB,SAAJ,CAAcmrB,GAAd,KAAsB,CAA1B,EAA6B,OAAOD,GAAP;EAC7B,WAAOC,GAAP;EACD;;EACDhtB,EAAAA,MAAM,CAACqB,KAAD,EAAQ;EACZ,QAAI,EAAEA,KAAK,YAAYgrB,cAAnB,CAAJ,EACE,OAAO,KAAP;EAEF,UAAMY,mBAAmB,GAAG5rB,KAA5B;EACA,WAAO,KAAKirB,UAAL,KAAoBW,mBAAmB,CAACX,UAAxC,IAAsD,KAAKC,MAAL,KAAgBU,mBAAmB,CAACV,MAAjG;EACD;;EACD1qB,EAAAA,SAAS,CAACC,CAAD,EAAI;EACX,UAAMT,KAAK,GAAGS,CAAd;EACA,UAAMyQ,SAAS,GAAG,KAAK2a,2BAAL,EAAlB;EACA,UAAMC,cAAc,GAAG9rB,KAAK,CAAC6rB,2BAAN,EAAvB;EACA,WAAOxhB,OAAO,CAACvI,OAAR,CAAgBoP,SAAhB,EAA2B4a,cAA3B,CAAP;EACD;;EACDC,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAKb,MAAZ;EACD;;EACDc,EAAAA,UAAU,GAAG;EACX,WAAO,KAAKf,UAAL,KAAoBD,cAAc,CAACG,QAAnC,IAA+C,KAAKF,UAAL,KAAoBD,cAAc,CAACiB,eAAzF;EACD;;EACDC,EAAAA,OAAO,GAAG;EACR,WAAO,KAAKjB,UAAZ;EACD;;EACD/vB,EAAAA,QAAQ,GAAG;EACT,QAAIixB,WAAW,GAAG,SAAlB;EACA,QAAI,KAAKlB,UAAL,KAAoBD,cAAc,CAACG,QAAvC,EACEgB,WAAW,GAAG,UAAd,CADF,KAEK,IAAI,KAAKlB,UAAL,KAAoBD,cAAc,CAACiB,eAAvC,EACHE,WAAW,GAAG,iBAAd,CADG,KAEA,IAAI,KAAKlB,UAAL,KAAoBD,cAAc,CAACM,KAAvC,EACHa,WAAW,GAAG,kBAAkB,KAAKJ,QAAL,EAAlB,GAAoC,GAAlD;EAEF,WAAOI,WAAP;EACD;;EACDC,EAAAA,WAAW,GAAG;EACZ,QAAI,OAAOhuB,SAAS,CAAC,CAAD,CAAhB,KAAwB,QAA5B,EAAsC;EACpC,YAAMyN,GAAG,GAAGzN,SAAS,CAAC,CAAD,CAArB;EACA,UAAIzC,MAAM,CAACE,KAAP,CAAagQ,GAAb,CAAJ,EAAuB,OAAOA,GAAP;;EACvB,UAAI,KAAKof,UAAL,KAAoBD,cAAc,CAACiB,eAAvC,EAAwD;EACtD,cAAMI,cAAc,GAAGxgB,GAAvB;EACA,eAAOwgB,cAAP;EACD;;EACD,UAAI,KAAKpB,UAAL,KAAoBD,cAAc,CAACM,KAAvC,EACE,OAAO7wB,IAAI,CAAC6xB,KAAL,CAAWzgB,GAAG,GAAG,KAAKqf,MAAtB,IAAgC,KAAKA,MAA5C;EAEF,aAAOrf,GAAP;EACD,KAXD,MAWO,IAAIzN,SAAS,CAAC,CAAD,CAAT,YAAwBc,UAA5B,EAAwC;EAC7C,YAAM0B,KAAK,GAAGxC,SAAS,CAAC,CAAD,CAAvB;EACA,UAAI,KAAK6sB,UAAL,KAAoBD,cAAc,CAACG,QAAvC,EAAiD,OAAO,IAAP;EACjDvqB,MAAAA,KAAK,CAACzD,CAAN,GAAU,KAAKivB,WAAL,CAAiBxrB,KAAK,CAACzD,CAAvB,CAAV;EACAyD,MAAAA,KAAK,CAACxD,CAAN,GAAU,KAAKgvB,WAAL,CAAiBxrB,KAAK,CAACxD,CAAvB,CAAV;EACD;EACF;;EACDyuB,EAAAA,2BAA2B,GAAG;EAC5B,QAAIU,YAAY,GAAG,EAAnB;EACA,QAAI,KAAKtB,UAAL,KAAoBD,cAAc,CAACG,QAAvC,EACEoB,YAAY,GAAG,EAAf,CADF,KAEK,IAAI,KAAKtB,UAAL,KAAoBD,cAAc,CAACiB,eAAvC,EACHM,YAAY,GAAG,CAAf,CADG,KAEA,IAAI,KAAKtB,UAAL,KAAoBD,cAAc,CAACM,KAAvC,EACHiB,YAAY,GAAG,IAAI9xB,IAAI,CAAC6S,KAAL,CAAW7S,IAAI,CAACqV,IAAL,CAAUrV,IAAI,CAAC2S,GAAL,CAAS,KAAK2e,QAAL,EAAT,IAA4BtxB,IAAI,CAAC2S,GAAL,CAAS,EAAT,CAAtC,CAAX,CAAnB;EAEF,WAAOmf,YAAP;EACD;;EACDhB,EAAAA,QAAQ,CAAC1e,KAAD,EAAQ;EACd,SAAKqe,MAAL,GAAczwB,IAAI,CAACC,GAAL,CAASmS,KAAT,CAAd;EACD;;EACD,MAAIpL,WAAJ,GAAkB;EAChB,WAAO,CAAC1D,YAAD,EAAeH,UAAf,CAAP;EACD;;EAnGiC;;EAqGpC,MAAMwtB,IAAN,CAAW;EACTvwB,EAAAA,WAAW,GAAG;EACZuwB,IAAAA,IAAI,CAACltB,YAAL,CAAkBC,KAAlB,CAAwB,IAAxB,EAA8BC,SAA9B;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKsuB,KAAL,GAAa,IAAb;EACA,UAAMzxB,IAAI,GAAGqD,SAAS,CAAC,CAAD,CAAtB;EACA,SAAKouB,KAAL,GAAazxB,IAAb;EACAqwB,IAAAA,IAAI,CAACqB,aAAL,CAAmBxC,GAAnB,CAAuBlvB,IAAvB,EAA6B,IAA7B;EACD;;EACD0uB,EAAAA,WAAW,GAAG;EACZ,WAAO2B,IAAI,CAACqB,aAAL,CAAmBppB,GAAnB,CAAuB,KAAKmpB,KAA5B,CAAP;EACD;;EACDtxB,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAKsxB,KAAZ;EACD;;EACD,MAAI/qB,WAAJ,GAAkB;EAChB,WAAO,CAAC1D,YAAD,CAAP;EACD;;EAlBQ;;EAoBXqtB,IAAI,CAACqB,aAAL,GAAqB,IAAIjC,OAAJ,EAArB;EACAQ,cAAc,CAACI,IAAf,GAAsBA,IAAtB;EACAJ,cAAc,CAACM,KAAf,GAAuB,IAAIF,IAAJ,CAAS,OAAT,CAAvB;EACAJ,cAAc,CAACG,QAAf,GAA0B,IAAIC,IAAJ,CAAS,UAAT,CAA1B;EACAJ,cAAc,CAACiB,eAAf,GAAiC,IAAIb,IAAJ,CAAS,iBAAT,CAAjC;EACAJ,cAAc,CAAC0B,mBAAf,GAAqC,kBAArC;;EC/He,MAAMC,eAAN,SAA8BtH,kBAA9B,CAAiD;EAC9DxqB,EAAAA,WAAW,GAAG;EACZ;EACA8xB,IAAAA,eAAe,CAACzuB,YAAhB,CAA6BC,KAA7B,CAAmC,IAAnC,EAAyCC,SAAzC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,UAAM0uB,WAAW,GAAGxuB,SAAS,CAAC,CAAD,CAA7B;EAAA,UAAkC+d,OAAO,GAAG/d,SAAS,CAAC,CAAD,CAArD;EACAinB,IAAAA,kBAAkB,CAACnnB,YAAnB,CAAgCI,IAAhC,CAAqC,IAArC,EAA2CsuB,WAA3C,EAAwDzQ,OAAxD;EACD;;EACDnB,EAAAA,YAAY,GAAG;EACb,UAAM4R,WAAW,GAAG,IAAItnB,KAAJ,CAAU,KAAKggB,WAAL,CAAiBjnB,MAA3B,EAAmCkH,IAAnC,CAAwC,IAAxC,CAApB;;EACA,SAAK,IAAI/J,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGoxB,WAAW,CAACvuB,MAAhC,EAAwC7C,CAAC,EAAzC,EACEoxB,WAAW,CAACpxB,CAAD,CAAX,GAAiB,KAAK8pB,WAAL,CAAiB9pB,CAAjB,EAAoBuF,IAApB,EAAjB;;EAEF,WAAO,IAAI4rB,eAAJ,CAAoBC,WAApB,EAAiC,KAAK1T,QAAtC,CAAP;EACD;;EACDG,EAAAA,WAAW,GAAG;EACZ,QAAIjb,SAAS,CAACC,MAAV,KAAqB,CAArB,IAA2B,OAAOD,SAAS,CAAC,CAAD,CAAhB,KAAwB,QAAxB,IAAoCA,SAAS,CAAC,CAAD,CAAT,YAAwBya,QAA3F,EAAsG;EACpG,YAAM7Y,KAAK,GAAG5B,SAAS,CAAC,CAAD,CAAvB;EAAA,YAA4B5D,SAAS,GAAG4D,SAAS,CAAC,CAAD,CAAjD;EACA,UAAI,CAAC,KAAKsd,iBAAL,CAAuB1b,KAAvB,CAAL,EACE,OAAO,KAAP;EAEF,aAAO,MAAMqZ,WAAN,CAAkB/a,IAAlB,CAAuB,IAAvB,EAA6B0B,KAA7B,EAAoCxF,SAApC,CAAP;EACD,KAND,MAMO;EACL,aAAO,MAAM6e,WAAN,CAAkBlb,KAAlB,CAAwB,IAAxB,EAA8BC,SAA9B,CAAP;EACD;EACF;;EACD0iB,EAAAA,oBAAoB,GAAG;EACrB,QAAI,KAAK3B,QAAL,EAAJ,EACE,OAAOI,SAAS,CAACG,KAAjB;EAEF,WAAO,CAAP;EACD;;EACDP,EAAAA,QAAQ,GAAG;EACT,QAAI,KAAKrc,OAAL,EAAJ,EACE,OAAO,KAAP;;EAEF,SAAK,IAAItH,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK8pB,WAAL,CAAiBjnB,MAArC,EAA6C7C,CAAC,EAA9C,EACE,IAAI,CAAC,KAAK8pB,WAAL,CAAiB9pB,CAAjB,EAAoB2jB,QAApB,EAAL,EACE,OAAO,KAAP;;EAGJ,WAAO,IAAP;EACD;;EACDpG,EAAAA,WAAW,GAAG;EACZ,WAAOF,QAAQ,CAACiD,wBAAhB;EACD;;EACDhI,EAAAA,YAAY,GAAG;EACb,WAAO,CAAP;EACD;;EACDsN,EAAAA,WAAW,GAAG;EACZ,UAAM,IAAI9B,6BAAJ,EAAN;EACD;;EACD+B,EAAAA,eAAe,GAAG;EAChB,WAAOxI,QAAQ,CAAC+D,wBAAhB;EACD;;EACD,MAAInb,WAAJ,GAAkB;EAChB,WAAO,CAAC4b,MAAD,CAAP;EACD;;EA1D6D;;ECajD,MAAMwP,eAAN,CAAsB;EACnChyB,EAAAA,WAAW,GAAG;EACZgyB,IAAAA,eAAe,CAAC3uB,YAAhB,CAA6BC,KAA7B,CAAmC,IAAnC,EAAyCC,SAAzC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK4uB,eAAL,GAAuB,IAAvB;EACA,SAAKC,0BAAL,GAAkC,IAAlC;EACA,SAAK3S,KAAL,GAAa,IAAb;;EACA,QAAIhc,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1BwuB,MAAAA,eAAe,CAAC3uB,YAAhB,CAA6BI,IAA7B,CAAkC,IAAlC,EAAwC,IAAI0sB,cAAJ,EAAxC,EAA8D,CAA9D;EACD,KAFD,MAEO,IAAI5sB,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,UAAI0G,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAeoa,yBAAf,CAAhB,EAA2D;EACzD,cAAMwU,yBAAyB,GAAG5uB,SAAS,CAAC,CAAD,CAA3C;EACAyuB,QAAAA,eAAe,CAAC3uB,YAAhB,CAA6BI,IAA7B,CAAkC,IAAlC,EAAwC,IAAI0sB,cAAJ,EAAxC,EAA8D,CAA9D,EAAiEgC,yBAAjE;EACD,OAHD,MAGO,IAAI5uB,SAAS,CAAC,CAAD,CAAT,YAAwB4sB,cAA5B,EAA4C;EACjD,cAAMiC,cAAc,GAAG7uB,SAAS,CAAC,CAAD,CAAhC;EACAyuB,QAAAA,eAAe,CAAC3uB,YAAhB,CAA6BI,IAA7B,CAAkC,IAAlC,EAAwC2uB,cAAxC,EAAwD,CAAxD,EAA2DJ,eAAe,CAACK,mCAAhB,EAA3D;EACD;EACF,KARM,MAQA,IAAI9uB,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAM4uB,cAAc,GAAG7uB,SAAS,CAAC,CAAD,CAAhC;EAAA,YAAqC+c,IAAI,GAAG/c,SAAS,CAAC,CAAD,CAArD;EACAyuB,MAAAA,eAAe,CAAC3uB,YAAhB,CAA6BI,IAA7B,CAAkC,IAAlC,EAAwC2uB,cAAxC,EAAwD9R,IAAxD,EAA8D0R,eAAe,CAACK,mCAAhB,EAA9D;EACD,KAHM,MAGA,IAAI9uB,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAM4uB,cAAc,GAAG7uB,SAAS,CAAC,CAAD,CAAhC;EAAA,YAAqC+c,IAAI,GAAG/c,SAAS,CAAC,CAAD,CAArD;EAAA,YAA0D4uB,yBAAyB,GAAG5uB,SAAS,CAAC,CAAD,CAA/F;EACA,WAAK0uB,eAAL,GAAuBG,cAAvB;EACA,WAAKF,0BAAL,GAAkCC,yBAAlC;EACA,WAAK5S,KAAL,GAAae,IAAb;EACD;EACF;;EACD,SAAOgS,mBAAP,CAA2BC,aAA3B,EAA0C;EACxC,UAAMC,iBAAiB,GAAG,IAAI/nB,KAAJ,CAAU8nB,aAAa,CAACpqB,IAAd,EAAV,EAAgCuC,IAAhC,CAAqC,IAArC,CAA1B;EACA,WAAO6nB,aAAa,CAACnqB,OAAd,CAAsBoqB,iBAAtB,CAAP;EACD;;EACD,SAAOC,eAAP,CAAuBrR,UAAvB,EAAmC;EACjC,QAAIA,UAAU,KAAK,IAAnB,EAAyB,OAAO,IAAP;EACzB,UAAMsR,aAAa,GAAG,IAAIjoB,KAAJ,CAAU2W,UAAU,CAACjZ,IAAX,EAAV,EAA6BuC,IAA7B,CAAkC,IAAlC,CAAtB;EACA,WAAO0W,UAAU,CAAChZ,OAAX,CAAmBsqB,aAAnB,CAAP;EACD;;EACD,SAAOL,mCAAP,GAA6C;EAC3C,WAAO5D,8BAA8B,CAACC,QAA/B,EAAP;EACD;;EACD,SAAOiE,sBAAP,CAA8BC,gBAA9B,EAAgD;EAC9C,UAAMC,oBAAoB,GAAG,IAAIpoB,KAAJ,CAAUmoB,gBAAgB,CAACzqB,IAAjB,EAAV,EAAmCuC,IAAnC,CAAwC,IAAxC,CAA7B;EACA,WAAOkoB,gBAAgB,CAACxqB,OAAjB,CAAyByqB,oBAAzB,CAAP;EACD;;EACD,SAAOC,iBAAP,CAAyBf,WAAzB,EAAsC;EACpC,UAAMgB,eAAe,GAAG,IAAItoB,KAAJ,CAAUsnB,WAAW,CAAC5pB,IAAZ,EAAV,EAA8BuC,IAA9B,CAAmC,IAAnC,CAAxB;EACA,WAAOqnB,WAAW,CAAC3pB,OAAZ,CAAoB2qB,eAApB,CAAP;EACD;;EACD,SAAOC,iBAAP,CAAyBC,WAAzB,EAAsC;EACpC,UAAMC,eAAe,GAAG,IAAIzoB,KAAJ,CAAUwoB,WAAW,CAAC9qB,IAAZ,EAAV,EAA8BuC,IAA9B,CAAmC,IAAnC,CAAxB;EACA,WAAOuoB,WAAW,CAAC7qB,OAAZ,CAAoB8qB,eAApB,CAAP;EACD;;EACD,SAAOC,iBAAP,CAAyBC,WAAzB,EAAsC;EACpC,UAAMC,eAAe,GAAG,IAAI5oB,KAAJ,CAAU2oB,WAAW,CAACjrB,IAAZ,EAAV,EAA8BuC,IAA9B,CAAmC,IAAnC,CAAxB;EACA,WAAO0oB,WAAW,CAAChrB,OAAZ,CAAoBirB,eAApB,CAAP;EACD;;EACD,SAAOC,YAAP,CAAoBzN,MAApB,EAA4B;EAC1B,UAAM0N,UAAU,GAAG,IAAI9oB,KAAJ,CAAUob,MAAM,CAAC1d,IAAP,EAAV,EAAyBuC,IAAzB,CAA8B,IAA9B,CAAnB;EACA,WAAOmb,MAAM,CAACzd,OAAP,CAAemrB,UAAf,CAAP;EACD;;EACD,SAAOC,cAAP,CAAsBzE,QAAtB,EAAgC;EAC9B,UAAM0E,YAAY,GAAG,IAAIhpB,KAAJ,CAAUskB,QAAQ,CAAC5mB,IAAT,EAAV,EAA2BuC,IAA3B,CAAgC,IAAhC,CAArB;EACA,WAAOqkB,QAAQ,CAAC3mB,OAAT,CAAiBqrB,YAAjB,CAAP;EACD;;EACD,SAAOC,4BAAP,CAAoC3tB,KAApC,EAA2C4tB,QAA3C,EAAqD;EACnDA,IAAAA,QAAQ,CAACvT,iBAAT,GAA6BmR,WAA7B,CAAyCxrB,KAAzC;EACA,WAAO4tB,QAAQ,CAACvV,UAAT,GAAsB0I,WAAtB,CAAkC/gB,KAAlC,CAAP;EACD;;EACD6tB,EAAAA,WAAW,CAAC/V,SAAD,EAAY;EACrB,YAAQA,SAAR;EACA,WAAK,CAAC,CAAN;EACE,eAAO,KAAKuJ,wBAAL,EAAP;;EACF,WAAK,CAAL;EACE,eAAO,KAAKN,WAAL,EAAP;;EACF,WAAK,CAAL;EACE,eAAO,KAAKV,gBAAL,EAAP;;EACF,WAAK,CAAL;EACE,eAAO,KAAKoD,aAAL,EAAP;;EACF;EACE,cAAM,IAAIlpB,wBAAJ,CAA6B,wBAAwBud,SAArD,CAAN;EAVF;EAYD;;EACD4B,EAAAA,UAAU,CAACQ,QAAD,EAAW;EACnB,QAAIA,QAAQ,CAAC7S,MAAT,EAAJ,EACE,OAAO,KAAK0Z,WAAL,EAAP;EAEF,QAAI7G,QAAQ,CAAC1S,OAAT,OAAuB0S,QAAQ,CAAC5S,OAAT,EAAvB,IAA6C4S,QAAQ,CAACzS,OAAT,OAAuByS,QAAQ,CAAC3S,OAAT,EAAxE,EACE,OAAO,KAAKwZ,WAAL,CAAiB,IAAIziB,UAAJ,CAAe4b,QAAQ,CAAC1S,OAAT,EAAf,EAAmC0S,QAAQ,CAACzS,OAAT,EAAnC,CAAjB,CAAP;EAEF,QAAIyS,QAAQ,CAAC1S,OAAT,OAAuB0S,QAAQ,CAAC5S,OAAT,EAAvB,IAA6C4S,QAAQ,CAACzS,OAAT,OAAuByS,QAAQ,CAAC3S,OAAT,EAAxE,EACE,OAAO,KAAK8Y,gBAAL,CAAsB,CAAC,IAAI/hB,UAAJ,CAAe4b,QAAQ,CAAC1S,OAAT,EAAf,EAAmC0S,QAAQ,CAACzS,OAAT,EAAnC,CAAD,EAAyD,IAAInJ,UAAJ,CAAe4b,QAAQ,CAAC5S,OAAT,EAAf,EAAmC4S,QAAQ,CAAC3S,OAAT,EAAnC,CAAzD,CAAtB,CAAP;EAEF,WAAO,KAAKkc,aAAL,CAAmB,KAAKlB,gBAAL,CAAsB,CAAC,IAAIjkB,UAAJ,CAAe4b,QAAQ,CAAC1S,OAAT,EAAf,EAAmC0S,QAAQ,CAACzS,OAAT,EAAnC,CAAD,EAAyD,IAAInJ,UAAJ,CAAe4b,QAAQ,CAAC1S,OAAT,EAAf,EAAmC0S,QAAQ,CAAC3S,OAAT,EAAnC,CAAzD,EAAiH,IAAIjJ,UAAJ,CAAe4b,QAAQ,CAAC5S,OAAT,EAAf,EAAmC4S,QAAQ,CAAC3S,OAAT,EAAnC,CAAjH,EAAyK,IAAIjJ,UAAJ,CAAe4b,QAAQ,CAAC5S,OAAT,EAAf,EAAmC4S,QAAQ,CAACzS,OAAT,EAAnC,CAAzK,EAAiO,IAAInJ,UAAJ,CAAe4b,QAAQ,CAAC1S,OAAT,EAAf,EAAmC0S,QAAQ,CAACzS,OAAT,EAAnC,CAAjO,CAAtB,CAAnB,EAAoU,IAApU,CAAP;EACD;;EACD4Y,EAAAA,gBAAgB,GAAG;EACjB,QAAI7iB,SAAS,CAACC,MAAV,KAAqB,CAAzB,EACE,OAAO,KAAK4iB,gBAAL,CAAsB,KAAKM,4BAAL,GAAoC9I,MAApC,CAA2C,EAA3C,CAAtB,CAAP,CADF,KAEK,IAAIra,SAAS,CAACC,MAAV,KAAqB,CAAzB,EACH,IAAID,SAAS,CAAC,CAAD,CAAT,YAAwBkH,KAA5B,EAAmC;EACjC,YAAMyc,WAAW,GAAG3jB,SAAS,CAAC,CAAD,CAA7B;EACA,aAAO,KAAK6iB,gBAAL,CAAsBc,WAAW,KAAK,IAAhB,GAAuB,KAAKR,4BAAL,GAAoC9I,MAApC,CAA2CsJ,WAA3C,CAAvB,GAAiF,IAAvG,CAAP;EACD,KAHD,MAGO,IAAIhd,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAeuV,kBAAf,CAAhB,EAAoD;EACzD,YAAMoO,WAAW,GAAG3jB,SAAS,CAAC,CAAD,CAA7B;EACA,aAAO,IAAIoiB,UAAJ,CAAeuB,WAAf,EAA4B,IAA5B,CAAP;EACD;EAEJ;;EACDiD,EAAAA,qBAAqB,GAAG;EACtB,QAAI5mB,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,aAAO,IAAIsuB,eAAJ,CAAoB,IAApB,EAA0B,IAA1B,CAAP;EACD,KAFD,MAEO,IAAIvuB,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMuuB,WAAW,GAAGxuB,SAAS,CAAC,CAAD,CAA7B;EACA,aAAO,IAAIuuB,eAAJ,CAAoBC,WAApB,EAAiC,IAAjC,CAAP;EACD;EACF;;EACDlH,EAAAA,aAAa,CAACgJ,QAAD,EAAW;EACtB,QAAIC,QAAQ,GAAG,IAAf;EACA,QAAIC,eAAe,GAAG,KAAtB;EACA,QAAIC,qBAAqB,GAAG,KAA5B;;EACA,SAAK,IAAIrzB,CAAC,GAAGkzB,QAAQ,CAAC3rB,QAAT,EAAb,EAAkCvH,CAAC,CAACmJ,OAAF,EAAlC,GAAiD;EAC/C,YAAMiU,IAAI,GAAGpd,CAAC,CAACkJ,IAAF,EAAb;EACA,YAAMoqB,QAAQ,GAAGlW,IAAI,CAACG,WAAL,EAAjB;EACA,UAAI4V,QAAQ,KAAK,IAAjB,EACEA,QAAQ,GAAGG,QAAX;EAEF,UAAIA,QAAQ,KAAKH,QAAjB,EACEC,eAAe,GAAG,IAAlB;EAEF,UAAIhW,IAAI,YAAYyM,kBAApB,EAAwCwJ,qBAAqB,GAAG,IAAxB;EACzC;;EACD,QAAIF,QAAQ,KAAK,IAAjB,EACE,OAAO,KAAK1M,wBAAL,EAAP;EAEF,QAAI2M,eAAe,IAAIC,qBAAvB,EACE,OAAO,KAAK5M,wBAAL,CAA8B4K,eAAe,CAACS,eAAhB,CAAgCoB,QAAhC,CAA9B,CAAP;EAEF,UAAMK,KAAK,GAAGL,QAAQ,CAAC3rB,QAAT,GAAoB2B,IAApB,EAAd;EACA,UAAMsqB,YAAY,GAAGN,QAAQ,CAAC1rB,IAAT,KAAkB,CAAvC;;EACA,QAAIgsB,YAAJ,EAAkB;EAChB,UAAID,KAAK,YAAYjM,OAArB,EACE,OAAO,KAAKmM,kBAAL,CAAwBpC,eAAe,CAACwB,cAAhB,CAA+BK,QAA/B,CAAxB,CAAP,CADF,KAEK,IAAIK,KAAK,YAAYvO,UAArB,EACH,OAAO,KAAKwE,qBAAL,CAA2B6H,eAAe,CAACc,iBAAhB,CAAkCe,QAAlC,CAA3B,CAAP,CADG,KAEA,IAAIK,KAAK,YAAYlN,KAArB,EACH,OAAO,KAAKqN,gBAAL,CAAsBrC,eAAe,CAACsB,YAAhB,CAA6BO,QAA7B,CAAtB,CAAP;EAEFnwB,MAAAA,MAAM,CAACC,oBAAP,CAA4B,8BAA8BuwB,KAAK,CAAC1N,eAAN,EAA1D;EACD;;EACD,WAAO0N,KAAP;EACD;;EACDI,EAAAA,0BAA0B,CAACpN,WAAD,EAAc;EACtC,WAAO,KAAKmN,gBAAL,CAAsBnN,WAAW,KAAK,IAAhB,GAAuB,KAAKR,4BAAL,GAAoC9I,MAApC,CAA2CsJ,WAA3C,CAAvB,GAAiF,IAAvG,CAAP;EACD;;EACDJ,EAAAA,WAAW,GAAG;EACZ,QAAIvjB,SAAS,CAACC,MAAV,KAAqB,CAAzB,EACE,OAAO,KAAKsjB,WAAL,CAAiB,KAAKJ,4BAAL,GAAoC9I,MAApC,CAA2C,EAA3C,CAAjB,CAAP,CADF,KAEK,IAAIra,SAAS,CAACC,MAAV,KAAqB,CAAzB,EACH,IAAID,SAAS,CAAC,CAAD,CAAT,YAAwBc,UAA5B,EAAwC;EACtC,YAAMkgB,UAAU,GAAGhhB,SAAS,CAAC,CAAD,CAA5B;EACA,aAAO,KAAKujB,WAAL,CAAiBvC,UAAU,KAAK,IAAf,GAAsB,KAAKmC,4BAAL,GAAoC9I,MAApC,CAA2C,CAAC2G,UAAD,CAA3C,CAAtB,GAAiF,IAAlG,CAAP;EACD,KAHD,MAGO,IAAIra,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAeuV,kBAAf,CAAhB,EAAoD;EACzD,YAAMoO,WAAW,GAAG3jB,SAAS,CAAC,CAAD,CAA7B;EACA,aAAO,IAAIyjB,KAAJ,CAAUE,WAAV,EAAuB,IAAvB,CAAP;EACD;EAEJ;;EACDR,EAAAA,4BAA4B,GAAG;EAC7B,WAAO,KAAKwL,0BAAZ;EACD;;EACD1I,EAAAA,aAAa,GAAG;EACd,QAAIjmB,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,aAAO,KAAKgmB,aAAL,CAAmB,IAAnB,EAAyB,IAAzB,CAAP;EACD,KAFD,MAEO,IAAIjmB,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,UAAI0G,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAeuV,kBAAf,CAAhB,EAAoD;EAClD,cAAMsP,KAAK,GAAG7kB,SAAS,CAAC,CAAD,CAAvB;EACA,eAAO,KAAKimB,aAAL,CAAmB,KAAKlB,gBAAL,CAAsBF,KAAtB,CAAnB,CAAP;EACD,OAHD,MAGO,IAAI7kB,SAAS,CAAC,CAAD,CAAT,YAAwBkH,KAA5B,EAAmC;EACxC,cAAM2d,KAAK,GAAG7kB,SAAS,CAAC,CAAD,CAAvB;EACA,eAAO,KAAKimB,aAAL,CAAmB,KAAKlB,gBAAL,CAAsBF,KAAtB,CAAnB,CAAP;EACD,OAHM,MAGA,IAAI7kB,SAAS,CAAC,CAAD,CAAT,YAAwBgoB,UAA5B,EAAwC;EAC7C,cAAMnD,KAAK,GAAG7kB,SAAS,CAAC,CAAD,CAAvB;EACA,eAAO,KAAKimB,aAAL,CAAmBpB,KAAnB,EAA0B,IAA1B,CAAP;EACD;EACF,KAXM,MAWA,IAAI7kB,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAM4kB,KAAK,GAAG7kB,SAAS,CAAC,CAAD,CAAvB;EAAA,YAA4B8kB,KAAK,GAAG9kB,SAAS,CAAC,CAAD,CAA7C;EACA,aAAO,IAAI0kB,OAAJ,CAAYG,KAAZ,EAAmBC,KAAnB,EAA0B,IAA1B,CAAP;EACD;EACF;;EACD/I,EAAAA,OAAO,GAAG;EACR,WAAO,KAAKC,KAAZ;EACD;;EACD6H,EAAAA,wBAAwB,GAAG;EACzB,QAAI7jB,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,aAAO,IAAIgnB,kBAAJ,CAAuB,IAAvB,EAA6B,IAA7B,CAAP;EACD,KAFD,MAEO,IAAIjnB,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAM4d,UAAU,GAAG7d,SAAS,CAAC,CAAD,CAA5B;EACA,aAAO,IAAIinB,kBAAJ,CAAuBpJ,UAAvB,EAAmC,IAAnC,CAAP;EACD;EACF;;EACDhB,EAAAA,iBAAiB,GAAG;EAClB,WAAO,KAAK6R,eAAZ;EACD;;EACD3J,EAAAA,gBAAgB,GAAG;EACjB,QAAI/kB,SAAS,CAACC,MAAV,KAAqB,CAAzB,EACE,OAAO,KAAK8kB,gBAAL,CAAsB,KAAK5B,4BAAL,GAAoC9I,MAApC,CAA2C,EAA3C,CAAtB,CAAP,CADF,KAEK,IAAIra,SAAS,CAACC,MAAV,KAAqB,CAAzB,EACH,IAAID,SAAS,CAAC,CAAD,CAAT,YAAwBkH,KAA5B,EAAmC;EACjC,YAAMyc,WAAW,GAAG3jB,SAAS,CAAC,CAAD,CAA7B;EACA,aAAO,KAAK+kB,gBAAL,CAAsBpB,WAAW,KAAK,IAAhB,GAAuB,KAAKR,4BAAL,GAAoC9I,MAApC,CAA2CsJ,WAA3C,CAAvB,GAAiF,IAAvG,CAAP;EACD,KAHD,MAGO,IAAIhd,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAeuV,kBAAf,CAAhB,EAAoD;EACzD,YAAMoO,WAAW,GAAG3jB,SAAS,CAAC,CAAD,CAA7B;EACA,aAAO,IAAIgoB,UAAJ,CAAerE,WAAf,EAA4B,IAA5B,CAAP;EACD;EAEJ;;EACDkN,EAAAA,kBAAkB,GAAG;EACnB,QAAI7wB,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,aAAO,IAAIsrB,YAAJ,CAAiB,IAAjB,EAAuB,IAAvB,CAAP;EACD,KAFD,MAEO,IAAIvrB,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMurB,QAAQ,GAAGxrB,SAAS,CAAC,CAAD,CAA1B;EACA,aAAO,IAAIurB,YAAJ,CAAiBC,QAAjB,EAA2B,IAA3B,CAAP;EACD;EACF;;EACDsF,EAAAA,gBAAgB,GAAG;EACjB,QAAI9wB,SAAS,CAACC,MAAV,KAAqB,CAAzB,EACE,OAAO,IAAI6nB,UAAJ,CAAe,IAAf,EAAqB,IAArB,CAAP,CADF,KAEK,IAAI9nB,SAAS,CAACC,MAAV,KAAqB,CAAzB,EACH,IAAID,SAAS,CAAC,CAAD,CAAT,YAAwBkH,KAA5B,EAAmC;EACjC,YAAM0c,KAAK,GAAG5jB,SAAS,CAAC,CAAD,CAAvB;EACA,aAAO,IAAI8nB,UAAJ,CAAelE,KAAf,EAAsB,IAAtB,CAAP;EACD,KAHD,MAGO,IAAIjd,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAeuV,kBAAf,CAAhB,EAAoD;EACzD,YAAMoO,WAAW,GAAG3jB,SAAS,CAAC,CAAD,CAA7B;EACA,UAAI2jB,WAAW,KAAK,IAApB,EACE,OAAO,KAAKmN,gBAAL,CAAsB,IAAI5pB,KAAJ,CAAU,CAAV,EAAaC,IAAb,CAAkB,IAAlB,CAAtB,CAAP;EAEF,YAAMmb,MAAM,GAAG,IAAIpb,KAAJ,CAAUyc,WAAW,CAAC/e,IAAZ,EAAV,EAA8BuC,IAA9B,CAAmC,IAAnC,CAAf;;EACA,WAAK,IAAI/J,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGumB,WAAW,CAAC/e,IAAZ,EAApB,EAAwCxH,CAAC,EAAzC,EAA6C;EAC3C,cAAM4zB,KAAK,GAAG,KAAK7N,4BAAL,GAAoC9I,MAApC,CAA2C,CAA3C,EAA8CsJ,WAAW,CAACjO,YAAZ,EAA9C,EAA0EiO,WAAW,CAAChO,WAAZ,EAA1E,CAAd;EACAuJ,QAAAA,mBAAmB,CAACvc,IAApB,CAAyBghB,WAAzB,EAAsCvmB,CAAtC,EAAyC4zB,KAAzC,EAAgD,CAAhD,EAAmD,CAAnD;EACA1O,QAAAA,MAAM,CAACllB,CAAD,CAAN,GAAY,KAAKmmB,WAAL,CAAiByN,KAAjB,CAAZ;EACD;;EACD,aAAO,KAAKF,gBAAL,CAAsBxO,MAAtB,CAAP;EACD;EAEJ;;EACD,MAAIjf,WAAJ,GAAkB;EAChB,WAAO,CAAC1D,YAAD,CAAP;EACD;;EAvPkC;;ECfrC;EACA;EACA;EACA;EACA;EACA;;EACA,MAAMsxB,cAAc,GAAG;EACrBC,EAAAA,EAAE,EAAE,IADiB;EAErBC,EAAAA,GAAG,EAAE,KAFgB;EAGrBC,EAAAA,GAAG,EAAE,KAHgB;EAIrBC,EAAAA,IAAI,EAAE;EAJe,CAAvB;EAOA;EACA;EACA;EACA;EACA;EACA;;EACA,MAAMC,YAAY,GAAG;EACnBC,EAAAA,KAAK,EAAE,OADY;EAEnBC,EAAAA,WAAW,EAAE,YAFM;EAGnBC,EAAAA,WAAW,EAAE,YAHM;EAInBC,EAAAA,OAAO,EAAE,SAJU;EAKnBC,EAAAA,WAAW,EAAE,YALM;EAMnBC,EAAAA,iBAAiB,EAAE,iBANA;EAOnBC,EAAAA,aAAa,EAAE,cAPI;EAQnBC,EAAAA,mBAAmB,EAAE,oBARF;EASnBC,EAAAA,MAAM,EAAE;EATW,CAArB;EAYA;EACA;EACA;EACA;EACA;;EAEA;EACA;EACA;EACA;EACA;EACA;;EAEA;EACA;EACA;EACA;;EACA,MAAMC,KAAK,GAAG,OAAd;EAEA;EACA;EACA;EACA;;EACA,MAAMvwB,CAAC,GAAG,GAAV;EAEA;EACA;EACA;EACA;;EACA,MAAMM,CAAC,GAAG,GAAV;EAEA;EACA;EACA;EACA;;EACA,MAAMkwB,EAAE,GAAG,IAAX;EAEA;EACA;EACA;EACA;;EACA,MAAMC,SAAS,GAAG;EAChBC,EAAAA,IAAI,EAAE,CADU;EAEhBC,EAAAA,UAAU,EAAE,CAFI;EAGhBC,EAAAA,WAAW,EAAE,CAHG;EAIhBC,EAAAA,MAAM,EAAE,CAJQ;EAKhBC,EAAAA,KAAK,EAAE,CALS;EAMhBC,EAAAA,GAAG,EAAE;EANW,CAAlB;EASA;EACA;EACA;EACA;;EACA,MAAMC,eAAe,GAAG,EAAxB;;EACA,KAAK,MAAMC,IAAX,IAAmBpB,YAAnB,EACEmB,eAAe,CAACC,IAAD,CAAf,GAAwBpB,YAAY,CAACoB,IAAD,CAAZ,CAAmBnmB,WAAnB,EAAxB;EAGF;EACA;EACA;;;EACA,MAAMomB,KAAN,CAAY;EACV;EACF;EACA;EACEl2B,EAAAA,WAAW,CAACm2B,GAAD,EAAM;EACf;EACJ;EACA;EACI,SAAKA,GAAL,GAAWA,GAAX;EAEA;EACJ;EACA;EACA;;EACI,SAAKC,MAAL,GAAc,CAAC,CAAf;EACD;EAED;EACF;EACA;EACA;EACA;;;EACEC,EAAAA,QAAQ,CAAC9xB,CAAD,EAAI;EACV,WAAQA,CAAC,IAAI,GAAL,IAAYA,CAAC,IAAI,GAAlB,IAA2BA,CAAC,IAAI,GAAL,IAAYA,CAAC,IAAI,GAAnD;EACD;EAED;EACF;EACA;EACA;EACA;EACA;EACA;;;EACE+xB,EAAAA,UAAU,CAAC/xB,CAAD,EAAIgyB,WAAJ,EAAiB;EACzB,UAAMC,OAAO,GAAGD,WAAW,KAAKE,SAAhB,GAA4BF,WAA5B,GAA0C,KAA1D;EACA,WAAQhyB,CAAC,IAAI,GAAL,IAAYA,CAAC,IAAI,GAAlB,IAA2BA,CAAC,IAAI,GAAL,IAAY,CAACiyB,OAA/C;EACD;EAED;EACF;EACA;EACA;EACA;;;EACEE,EAAAA,aAAa,CAACnyB,CAAD,EAAI;EACf,WAAOA,CAAC,IAAI,GAAL,IAAYA,CAAC,IAAI,IAAjB,IAAyBA,CAAC,IAAI,IAA9B,IAAsCA,CAAC,IAAI,IAAlD;EACD;EAED;EACF;EACA;EACA;;;EACEoyB,EAAAA,SAAS,GAAG;EACV,WAAO,KAAKR,GAAL,CAAStlB,MAAT,CAAgB,EAAE,KAAKulB,MAAvB,CAAP;EACD;EAED;EACF;EACA;EACA;;;EACEQ,EAAAA,SAAS,GAAG;EACV,UAAMryB,CAAC,GAAG,KAAKoyB,SAAL,EAAV;EACA,UAAM/sB,QAAQ,GAAG,KAAKwsB,MAAtB;EACA;;EACA,QAAIt0B,KAAK,GAAGyC,CAAZ;EACA,QAAI0xB,IAAJ;;EAEA,QAAI1xB,CAAC,IAAI,GAAT,EAAc;EACZ0xB,MAAAA,IAAI,GAAGR,SAAS,CAACE,UAAjB;EACD,KAFD,MAEO,IAAIpxB,CAAC,IAAI,GAAT,EAAc;EACnB0xB,MAAAA,IAAI,GAAGR,SAAS,CAACK,KAAjB;EACD,KAFM,MAEA,IAAIvxB,CAAC,IAAI,GAAT,EAAc;EACnB0xB,MAAAA,IAAI,GAAGR,SAAS,CAACG,WAAjB;EACD,KAFM,MAEA,IAAI,KAAKU,UAAL,CAAgB/xB,CAAhB,KAAsBA,CAAC,IAAI,GAA/B,EAAoC;EACzC0xB,MAAAA,IAAI,GAAGR,SAAS,CAACI,MAAjB;EACA/zB,MAAAA,KAAK,GAAG,KAAK+0B,WAAL,EAAR;EACD,KAHM,MAGA,IAAI,KAAKR,QAAL,CAAc9xB,CAAd,CAAJ,EAAsB;EAC3B0xB,MAAAA,IAAI,GAAGR,SAAS,CAACC,IAAjB;EACA5zB,MAAAA,KAAK,GAAG,KAAKg1B,SAAL,EAAR;EACD,KAHM,MAGA,IAAI,KAAKJ,aAAL,CAAmBnyB,CAAnB,CAAJ,EAA2B;EAChC,aAAO,KAAKqyB,SAAL,EAAP;EACD,KAFM,MAEA,IAAIryB,CAAC,KAAK,EAAV,EAAc;EACnB0xB,MAAAA,IAAI,GAAGR,SAAS,CAACM,GAAjB;EACD,KAFM,MAEA;EACL,YAAM,IAAIh2B,KAAJ,CAAU,2BAA2BwE,CAArC,CAAN;EACD;;EAED,WAAO;EAAEqF,MAAAA,QAAQ,EAAEA,QAAZ;EAAsB9H,MAAAA,KAAK,EAAEA,KAA7B;EAAoCm0B,MAAAA,IAAI,EAAEA;EAA1C,KAAP;EACD;EAED;EACF;EACA;EACA;;;EACEY,EAAAA,WAAW,GAAG;EACZ,QAAItyB,CAAJ;EACA,UAAM0E,KAAK,GAAG,KAAKmtB,MAAnB;EACA,QAAII,OAAO,GAAG,KAAd;EACA,QAAIO,kBAAkB,GAAG,KAAzB;;EACA,OAAG;EACD,UAAIxyB,CAAC,IAAI,GAAT,EACEiyB,OAAO,GAAG,IAAV,CADF,KAEK,IAAIjyB,CAAC,IAAI,GAAL,IAAYA,CAAC,IAAI,GAArB,EACHwyB,kBAAkB,GAAG,IAArB;EAEFxyB,MAAAA,CAAC,GAAG,KAAKoyB,SAAL,EAAJ;EACD,KAPD,QAQE,KAAKL,UAAL,CAAgB/xB,CAAhB,EAAmBiyB,OAAnB;EAEA;EACC,KAACO,kBAAD,KAAwBxyB,CAAC,IAAI,GAAL,IAAYA,CAAC,IAAI,GAAzC,CAHD;EAKA;EACCwyB,IAAAA,kBAAkB,KAAKxyB,CAAC,IAAI,GAAL,IAAYA,CAAC,IAAI,GAAtB,CAdrB;;EAgBA,WAAOyyB,UAAU,CAAC,KAAKb,GAAL,CAASzkB,SAAT,CAAmBzI,KAAnB,EAA0B,KAAKmtB,MAAL,EAA1B,CAAD,CAAjB;EACD;EAED;EACF;EACA;EACA;;;EACEU,EAAAA,SAAS,GAAG;EACV,QAAIvyB,CAAJ;EACA,UAAM0E,KAAK,GAAG,KAAKmtB,MAAnB;;EACA,OACE7xB,CAAC,GAAG,KAAKoyB,SAAL,EAAJ,CADF,QAEO,KAAKN,QAAL,CAAc9xB,CAAd,CAFP;;EAGA,WAAO,KAAK4xB,GAAL,CAASzkB,SAAT,CAAmBzI,KAAnB,EAA0B,KAAKmtB,MAAL,EAA1B,EAAyCtmB,WAAzC,EAAP;EACD;;EAhIS;EAmIZ;EACA;EACA;;;EACA,MAAMmnB,MAAN,CAAa;EACX;EACF;EACA;EACEj3B,EAAAA,WAAW,CAACk3B,KAAD,EAAQ5V,OAAR,EAAiB;EAC1B;EACJ;EACA;EACA;EACI,SAAK6V,MAAL,GAAcD,KAAd;EAEA;EACJ;EACA;EACA;;EACI,SAAKE,MAAL;EAEA;EACJ;EACA;EACA;;EACI,SAAKC,OAAL,GAAe7C,cAAc,CAACC,EAA9B;EAEA,SAAKnT,OAAL,GAAeA,OAAf;EACD;EAED;EACF;EACA;EACA;;;EACEgW,EAAAA,QAAQ,GAAG;EACT,SAAKF,MAAL,GAAc,KAAKD,MAAL,CAAYP,SAAZ,EAAd;EACD;EAED;EACF;EACA;EACA;EACA;;;EACEW,EAAAA,WAAW,CAACtB,IAAD,EAAO;EAChB,UAAMuB,OAAO,GAAG,KAAKJ,MAAL,CAAYnB,IAAZ,IAAoBA,IAApC;EACA,WAAOuB,OAAP;EACD;EAED;EACF;EACA;EACA;EACA;;;EACEC,EAAAA,KAAK,CAACxB,IAAD,EAAO;EACV,UAAMuB,OAAO,GAAG,KAAKD,WAAL,CAAiBtB,IAAjB,CAAhB;EACA,QAAIuB,OAAJ,EACE,KAAKF,QAAL;EAEF,WAAOE,OAAP;EACD;EAED;EACF;EACA;EACA;;;EACErnB,EAAAA,KAAK,GAAG;EACN,SAAKmnB,QAAL;EACA,UAAMI,QAAQ,GAAG,KAAKC,cAAL,EAAjB;EACA,WAAOD,QAAP;EACD;EAED;EACF;EACA;EACA;EACA;;;EACEE,EAAAA,oBAAoB,GAAG;EACrB,QAAIC,MAAM,GAAGrD,cAAc,CAACC,EAA5B;EACA,UAAMqD,QAAQ,GAAG,KAAKV,MAAtB;;EACA,QAAI,KAAKG,WAAL,CAAiB9B,SAAS,CAACC,IAA3B,CAAJ,EAAsC;EACpC,YAAMqC,OAAO,GAAGD,QAAQ,CAACh2B,KAAzB;EACA,UAAIi2B,OAAO,KAAK/yB,CAAhB,EACE6yB,MAAM,GAAGrD,cAAc,CAACE,GAAxB,CADF,KAEK,IAAIqD,OAAO,KAAKzyB,CAAhB,EACHuyB,MAAM,GAAGrD,cAAc,CAACG,GAAxB,CADG,KAEA,IAAIoD,OAAO,KAAKvC,EAAhB,EACHqC,MAAM,GAAGrD,cAAc,CAACI,IAAxB;EAEF,UAAIiD,MAAM,KAAKrD,cAAc,CAACC,EAA9B,EACE,KAAK6C,QAAL;EAEH;;EACD,WAAOO,MAAP;EACD;EAED;EACF;EACA;EACA;;;EACEG,EAAAA,4BAA4B,GAAG;EAC7B,QAAI,KAAKP,KAAL,CAAWhC,SAAS,CAACE,UAArB,CAAJ,EAAsC;EACpC,YAAMvU,UAAU,GAAG,EAAnB;;EACA,SACEA,UAAU,CAACtY,IAAX,CAAgB,KAAK6uB,cAAL,EAAhB,EADF,QAEO,KAAKF,KAAL,CAAWhC,SAAS,CAACK,KAArB,CAFP;;EAGA,UAAI,KAAK2B,KAAL,CAAWhC,SAAS,CAACG,WAArB,CAAJ,EACE,OAAOxU,UAAP;EAEH,KARD,MAQO,IAAI,KAAK6W,gBAAL,EAAJ,EAA6B;EAClC,aAAO,EAAP;EACD;;EACD,UAAM,IAAIl4B,KAAJ,CAAU,KAAKm4B,mBAAL,EAAV,CAAN;EACD;EAED;EACF;EACA;EACA;;;EACEC,EAAAA,eAAe,GAAG;EAChB,QAAI,KAAKV,KAAL,CAAWhC,SAAS,CAACE,UAArB,CAAJ,EAAsC;EACpC,YAAMzO,WAAW,GAAG,KAAKkR,WAAL,EAApB;EACA,UAAI,KAAKX,KAAL,CAAWhC,SAAS,CAACG,WAArB,CAAJ,EACE,OAAO1O,WAAP;EAEH,KALD,MAKO,IAAI,KAAK+Q,gBAAL,EAAJ,EAA6B;EAClC,aAAO,IAAP;EACD;;EACD,UAAM,IAAIl4B,KAAJ,CAAU,KAAKm4B,mBAAL,EAAV,CAAN;EACD;EAED;EACF;EACA;EACA;;;EACEG,EAAAA,oBAAoB,GAAG;EACrB,QAAI,KAAKZ,KAAL,CAAWhC,SAAS,CAACE,UAArB,CAAJ,EAAsC;EACpC,YAAMzO,WAAW,GAAG,KAAKoR,eAAL,EAApB;EACA,UAAI,KAAKb,KAAL,CAAWhC,SAAS,CAACG,WAArB,CAAJ,EACE,OAAO1O,WAAP;EAEH,KALD,MAKO,IAAI,KAAK+Q,gBAAL,EAAJ,EAA6B;EAClC,aAAO,EAAP;EACD;;EACD,UAAM,IAAIl4B,KAAJ,CAAU,KAAKm4B,mBAAL,EAAV,CAAN;EACD;EAED;EACF;EACA;EACA;;;EACEK,EAAAA,iBAAiB,GAAG;EAClB,QAAI,KAAKd,KAAL,CAAWhC,SAAS,CAACE,UAArB,CAAJ,EAAsC;EACpC,YAAMzO,WAAW,GAAG,KAAKsR,wBAAL,EAApB;EACA,UAAI,KAAKf,KAAL,CAAWhC,SAAS,CAACG,WAArB,CAAJ,EACE,OAAO1O,WAAP;EAEH,KALD,MAKO,IAAI,KAAK+Q,gBAAL,EAAJ,EAA6B;EAClC,aAAO,EAAP;EACD;;EACD,UAAM,IAAIl4B,KAAJ,CAAU,KAAKm4B,mBAAL,EAAV,CAAN;EACD;EAED;EACF;EACA;EACA;;;EACEO,EAAAA,oBAAoB,GAAG;EACrB,QAAI,KAAKhB,KAAL,CAAWhC,SAAS,CAACE,UAArB,CAAJ,EAAsC;EACpC,UAAIzO,WAAJ;EACA,UAAI,KAAKkQ,MAAL,CAAYnB,IAAZ,IAAoBR,SAAS,CAACE,UAAlC,EACEzO,WAAW,GAAG,KAAKwR,mBAAL,EAAd,CADF,KAGExR,WAAW,GAAG,KAAKoR,eAAL,EAAd;EAEF,UAAI,KAAKb,KAAL,CAAWhC,SAAS,CAACG,WAArB,CAAJ,EACE,OAAO1O,WAAP;EAEH,KAVD,MAUO,IAAI,KAAK+Q,gBAAL,EAAJ,EAA6B;EAClC,aAAO,EAAP;EACD;;EACD,UAAM,IAAIl4B,KAAJ,CAAU,KAAKm4B,mBAAL,EAAV,CAAN;EACD;EAED;EACF;EACA;EACA;EACA;;;EACES,EAAAA,yBAAyB,GAAG;EAC1B,QAAI,KAAKlB,KAAL,CAAWhC,SAAS,CAACE,UAArB,CAAJ,EAAsC;EACpC,YAAMzO,WAAW,GAAG,KAAKsR,wBAAL,EAApB;EACA,UAAI,KAAKf,KAAL,CAAWhC,SAAS,CAACG,WAArB,CAAJ,EACE,OAAO1O,WAAP;EAEH,KALD,MAKO,IAAI,KAAK+Q,gBAAL,EAAJ,EAA6B;EAClC,aAAO,EAAP;EACD;;EACD,UAAM,IAAIl4B,KAAJ,CAAU,KAAKm4B,mBAAL,EAAV,CAAN;EACD;EAED;EACF;EACA;EACA;;;EACEU,EAAAA,sBAAsB,GAAG;EACvB,QAAI,KAAKnB,KAAL,CAAWhC,SAAS,CAACE,UAArB,CAAJ,EAAsC;EACpC,YAAMzO,WAAW,GAAG,KAAK2R,qBAAL,EAApB;EACA,UAAI,KAAKpB,KAAL,CAAWhC,SAAS,CAACG,WAArB,CAAJ,EACE,OAAO1O,WAAP;EAEH,KALD,MAKO,IAAI,KAAK+Q,gBAAL,EAAJ,EAA6B;EAClC,aAAO,EAAP;EACD;;EACD,UAAM,IAAIl4B,KAAJ,CAAU,KAAKm4B,mBAAL,EAAV,CAAN;EACD;EAED;EACF;EACA;EACA;;;EACEE,EAAAA,WAAW,GAAG;EACZ,UAAMlR,WAAW,GAAG,EAApB;EACA,UAAM4R,UAAU,GAAG,KAAKzB,OAAL,CAAa7zB,MAAhC;;EACA,SAAK,IAAI7C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGm4B,UAApB,EAAgC,EAAEn4B,CAAlC,EAAqC;EACnC,YAAMo4B,KAAK,GAAG,KAAK3B,MAAnB;EACA,UAAI,KAAKK,KAAL,CAAWhC,SAAS,CAACI,MAArB,CAAJ,EACE3O,WAAW,CAACpe,IAAZ;EAAiB;EAAsBiwB,MAAAA,KAAK,CAACj3B,KAA7C,EADF,KAGE;EAEH;;EACD,QAAIolB,WAAW,CAAC1jB,MAAZ,IAAsBs1B,UAA1B,EACE,OAAO5R,WAAP;EAEF,UAAM,IAAInnB,KAAJ,CAAU,KAAKm4B,mBAAL,EAAV,CAAN;EACD;EAED;EACF;EACA;EACA;;;EACEI,EAAAA,eAAe,GAAG;EAChB,UAAMpR,WAAW,GAAG,CAAC,KAAKkR,WAAL,EAAD,CAApB;;EACA,WAAO,KAAKX,KAAL,CAAWhC,SAAS,CAACK,KAArB,CAAP,EACE5O,WAAW,CAACpe,IAAZ,CAAiB,KAAKsvB,WAAL,EAAjB;;EAEF,WAAOlR,WAAP;EACD;EAED;EACF;EACA;EACA;;;EACEwR,EAAAA,mBAAmB,GAAG;EACpB,UAAMxR,WAAW,GAAG,CAAC,KAAKiR,eAAL,EAAD,CAApB;;EACA,WAAO,KAAKV,KAAL,CAAWhC,SAAS,CAACK,KAArB,CAAP,EACE5O,WAAW,CAACpe,IAAZ,CAAiB,KAAKqvB,eAAL,EAAjB;;EAEF,WAAOjR,WAAP;EACD;EAED;EACF;EACA;EACA;;;EACEsR,EAAAA,wBAAwB,GAAG;EACzB,UAAMtR,WAAW,GAAG,CAAC,KAAKmR,oBAAL,EAAD,CAApB;;EACA,WAAO,KAAKZ,KAAL,CAAWhC,SAAS,CAACK,KAArB,CAAP,EACE5O,WAAW,CAACpe,IAAZ,CAAiB,KAAKuvB,oBAAL,EAAjB;;EAEF,WAAOnR,WAAP;EACD;EAED;EACF;EACA;EACA;;;EACE2R,EAAAA,qBAAqB,GAAG;EACtB,UAAM3R,WAAW,GAAG,CAAC,KAAKqR,iBAAL,EAAD,CAApB;;EACA,WAAO,KAAKd,KAAL,CAAWhC,SAAS,CAACK,KAArB,CAAP,EACE5O,WAAW,CAACpe,IAAZ,CAAiB,KAAKyvB,iBAAL,EAAjB;;EAEF,WAAOrR,WAAP;EACD;EAED;EACF;EACA;EACA;;;EACE+Q,EAAAA,gBAAgB,GAAG;EACjB,UAAMhwB,OAAO,GACX,KAAKsvB,WAAL,CAAiB9B,SAAS,CAACC,IAA3B,KAAoC,KAAK0B,MAAL,CAAYt1B,KAAZ,IAAqByzB,KAD3D;EAEA,QAAIttB,OAAJ,EACE,KAAKqvB,QAAL;EAEF,WAAOrvB,OAAP;EACD;EAED;EACF;EACA;EACA;EACA;;;EACEiwB,EAAAA,mBAAmB,GAAG;EACpB,WACE,iBACA,KAAKd,MAAL,CAAYt1B,KADZ,GAEA,gBAFA,GAGA,KAAKs1B,MAAL,CAAYxtB,QAHZ,GAIA,OAJA,GAKA,KAAKutB,MAAL,CAAYhB,GALZ,GAMA,GAPF;EASD;EAED;EACF;EACA;EACA;;;EACEwB,EAAAA,cAAc,GAAG;EACf,UAAMrW,OAAO,GAAG,KAAKA,OAArB;;EAEA,UAAM0X,GAAG,GAAGC,SAAS,IAAI,IAAI50B,UAAJ,CAAe,GAAG40B,SAAlB,CAAzB;;EACA,UAAMC,IAAI,GAAGhS,WAAW,IAAI;EAC1B,YAAMkD,KAAK,GAAGlD,WAAW,CAACqI,GAAZ,CAAgBroB,CAAC,IAAIoa,OAAO,CAACgH,gBAAR,CAAyBphB,CAAC,CAACqoB,GAAF,CAAMyJ,GAAN,CAAzB,CAArB,CAAd;EACA,UAAI5O,KAAK,CAAC5mB,MAAN,GAAe,CAAnB,EACE,OAAO8d,OAAO,CAACkI,aAAR,CAAsBY,KAAK,CAAC,CAAD,CAA3B,EAAgCA,KAAK,CAAC7gB,KAAN,CAAY,CAAZ,CAAhC,CAAP,CADF,KAGE,OAAO+X,OAAO,CAACkI,aAAR,CAAsBY,KAAK,CAAC,CAAD,CAA3B,CAAP;EACH,KAND;;EAQA,UAAM2O,KAAK,GAAG,KAAK3B,MAAnB;;EACA,QAAI,KAAKK,KAAL,CAAWhC,SAAS,CAACC,IAArB,CAAJ,EAAgC;EAC9B,YAAM5B,QAAQ,GAAGiF,KAAK,CAACj3B,KAAvB;EACA,WAAKu1B,OAAL,GAAe,KAAKO,oBAAL,EAAf;;EACA,UAAI9D,QAAQ,IAAI,oBAAhB,EAAsC;EACpC,cAAM1S,UAAU,GAAG,KAAK4W,4BAAL,EAAnB;EACA,eAAO1W,OAAO,CAAC8F,wBAAR,CAAiChG,UAAjC,CAAP;EACD,OAHD,MAGO;EACL,gBAAQ0S,QAAR;EACA,eAAK,OAAL;EAAc;EACZ,oBAAMmF,SAAS,GAAG,KAAKd,eAAL,EAAlB;EACA,kBAAI,CAACc,SAAL,EACE,OAAO3X,OAAO,CAACwF,WAAR,EAAP;EACF,qBAAOxF,OAAO,CAACwF,WAAR,CAAoB,IAAIziB,UAAJ,CAAe,GAAG40B,SAAlB,CAApB,CAAP;EACD;;EACD,eAAK,YAAL;EAAmB;EACjB,oBAAM/R,WAAW,GAAG,KAAKmR,oBAAL,EAApB;EACA,oBAAMc,UAAU,GAAGjS,WAAW,CAACqI,GAAZ,CAAgByJ,GAAhB,CAAnB;EACA,qBAAO1X,OAAO,CAAC8E,gBAAR,CAAyB+S,UAAzB,CAAP;EACD;;EACD,eAAK,YAAL;EAAmB;EACjB,oBAAMjS,WAAW,GAAG,KAAKmR,oBAAL,EAApB;EACA,oBAAMc,UAAU,GAAGjS,WAAW,CAACqI,GAAZ,CAAgByJ,GAAhB,CAAnB;EACA,qBAAO1X,OAAO,CAACgH,gBAAR,CAAyB6Q,UAAzB,CAAP;EACD;;EACD,eAAK,SAAL;EAAgB;EACd,oBAAMjS,WAAW,GAAG,KAAKqR,iBAAL,EAApB;EACA,kBAAI,CAACrR,WAAD,IAAgBA,WAAW,CAAC1jB,MAAZ,KAAuB,CAA3C,EACE,OAAO8d,OAAO,CAACkI,aAAR,EAAP;EACF,qBAAO0P,IAAI,CAAChS,WAAD,CAAX;EACD;;EACD,eAAK,YAAL;EAAmB;EACjB,oBAAMA,WAAW,GAAG,KAAKuR,oBAAL,EAApB;EACA,kBAAI,CAACvR,WAAD,IAAgBA,WAAW,CAAC1jB,MAAZ,KAAuB,CAA3C,EACE,OAAO8d,OAAO,CAAC+S,gBAAR,EAAP;EACF,oBAAM8E,UAAU,GAAGjS,WAAW,CAACqI,GAAZ,CAAgByJ,GAAhB,EAAqBzJ,GAArB,CAAyBhrB,CAAC,IAAI+c,OAAO,CAACwF,WAAR,CAAoBviB,CAApB,CAA9B,CAAnB;EACA,qBAAO+c,OAAO,CAAC+S,gBAAR,CAAyB8E,UAAzB,CAAP;EACD;;EACD,eAAK,iBAAL;EAAwB;EACtB,oBAAMjS,WAAW,GAAG,KAAKyR,yBAAL,EAApB;EACA,oBAAMQ,UAAU,GAAGjS,WAAW,CAACqI,GAAZ,CAAgBroB,CAAC,IAAIoa,OAAO,CAAC8E,gBAAR,CAAyBlf,CAAC,CAACqoB,GAAF,CAAMyJ,GAAN,CAAzB,CAArB,CAAnB;EACA,qBAAO1X,OAAO,CAAC6I,qBAAR,CAA8BgP,UAA9B,CAAP;EACD;;EACD,eAAK,cAAL;EAAqB;EACnB,oBAAMjS,WAAW,GAAG,KAAK0R,sBAAL,EAApB;EACA,kBAAI,CAAC1R,WAAD,IAAgBA,WAAW,CAAC1jB,MAAZ,KAAuB,CAA3C,EACE,OAAO8d,OAAO,CAAC8S,kBAAR,EAAP;EACF,oBAAMrF,QAAQ,GAAG7H,WAAW,CAACqI,GAAZ,CAAgB2J,IAAhB,CAAjB;EACA,qBAAO5X,OAAO,CAAC8S,kBAAR,CAA2BrF,QAA3B,CAAP;EACD;;EACD;EAAS;EACP,oBAAM,IAAIhvB,KAAJ,CAAU,4BAA4B+zB,QAAtC,CAAN;EACD;EA5CD;EA8CD;EACF;;EACD,UAAM,IAAI/zB,KAAJ,CAAU,KAAKm4B,mBAAL,EAAV,CAAN;EACD;;EAhYU;EAmYb;EACA;EACA;EACA;;;EACA,SAASkB,mBAAT,CAA6Brb,IAA7B,EAAmC;EACjC,MAAIA,IAAI,CAAC9V,OAAL,EAAJ,EACE,OAAO,EAAP;EACF,QAAMsc,UAAU,GAAGxG,IAAI,CAAC9T,aAAL,EAAnB;EACA,QAAMid,WAAW,GAAG,CAAC3C,UAAU,CAACjiB,CAAZ,EAAeiiB,UAAU,CAAChiB,CAA1B,CAApB;EACA,MAAIgiB,UAAU,CAACjgB,CAAf,EACE4iB,WAAW,CAACpe,IAAZ,CAAiByb,UAAU,CAACjgB,CAA5B;EACF,MAAIigB,UAAU,CAAClf,CAAf,EACE6hB,WAAW,CAACpe,IAAZ,CAAiByb,UAAU,CAAClf,CAA5B;EACF,SAAO6hB,WAAW,CAACmS,IAAZ,CAAiB,GAAjB,CAAP;EACD;EAED;EACA;EACA;EACA;;;EACA,SAASC,wBAAT,CAAkCvb,IAAlC,EAAwC;EACtC,QAAMnV,KAAK,GAAG,EAAd;;EACA,OAAK,IAAIjI,CAAC,GAAG,CAAR,EAAW44B,EAAE,GAAGxb,IAAI,CAACkB,gBAAL,EAArB,EAA8Cte,CAAC,GAAG44B,EAAlD,EAAsD,EAAE54B,CAAxD,EACEiI,KAAK,CAACE,IAAN,CAAW,MAAMswB,mBAAmB,CAACrb,IAAI,CAACO,YAAL,CAAkB3d,CAAlB,CAAD,CAAzB,GAAkD,GAA7D;;EAEF,SAAOiI,KAAK,CAACywB,IAAN,CAAW,IAAX,CAAP;EACD;EAED;EACA;EACA;EACA;;;EACA,SAASG,gCAAT,CAA0Czb,IAA1C,EAAgD;EAC9C,QAAMnV,KAAK,GAAG,EAAd;;EACA,OAAK,IAAIjI,CAAC,GAAG,CAAR,EAAW44B,EAAE,GAAGxb,IAAI,CAACkB,gBAAL,EAArB,EAA8Cte,CAAC,GAAG44B,EAAlD,EAAsD,EAAE54B,CAAxD,EACEiI,KAAK,CAACE,IAAN,CAAW2wB,MAAM,CAAC1b,IAAI,CAACO,YAAL,CAAkB3d,CAAlB,CAAD,CAAjB;;EAEF,SAAOiI,KAAK,CAACywB,IAAN,CAAW,IAAX,CAAP;EACD;EAED;EACA;EACA;EACA;;;EACA,SAASK,wBAAT,CAAkC3b,IAAlC,EAAwC;EACtC,QAAMmJ,WAAW,GAAGnJ,IAAI,CAACgI,cAAL,GACjBwJ,GADiB,CACbhrB,CAAC,IAAI,CAACA,CAAC,CAACjC,CAAH,EAAMiC,CAAC,CAAChC,CAAR,CADQ,CAApB;EAEA,QAAMqG,KAAK,GAAG,EAAd;;EACA,OAAK,IAAIjI,CAAC,GAAG,CAAR,EAAW44B,EAAE,GAAGrS,WAAW,CAAC1jB,MAAjC,EAAyC7C,CAAC,GAAG44B,EAA7C,EAAiD,EAAE54B,CAAnD,EACEiI,KAAK,CAACE,IAAN,CAAWoe,WAAW,CAACvmB,CAAD,CAAX,CAAe04B,IAAf,CAAoB,GAApB,CAAX;;EAEF,SAAOzwB,KAAK,CAACywB,IAAN,CAAW,IAAX,CAAP;EACD;EAED;EACA;EACA;EACA;;;EACA,SAASM,6BAAT,CAAuC5b,IAAvC,EAA6C;EAC3C,QAAMnV,KAAK,GAAG,EAAd;;EACA,OAAK,IAAIjI,CAAC,GAAG,CAAR,EAAW44B,EAAE,GAAGxb,IAAI,CAACkB,gBAAL,EAArB,EAA8Cte,CAAC,GAAG44B,EAAlD,EAAsD,EAAE54B,CAAxD,EACEiI,KAAK,CAACE,IAAN,CAAW,MAAM4wB,wBAAwB,CAAC3b,IAAI,CAACO,YAAL,CAAkB3d,CAAlB,CAAD,CAA9B,GAAuD,GAAlE;;EAEF,SAAOiI,KAAK,CAACywB,IAAN,CAAW,IAAX,CAAP;EACD;EAED;EACA;EACA;EACA;;;EACA,SAASO,qBAAT,CAA+B7b,IAA/B,EAAqC;EACnC,QAAMnV,KAAK,GAAG,EAAd;EACAA,EAAAA,KAAK,CAACE,IAAN,CAAW,MAAM4wB,wBAAwB,CAAC3b,IAAI,CAACuL,eAAL,EAAD,CAA9B,GAAyD,GAApE;;EACA,OAAK,IAAI3oB,CAAC,GAAG,CAAR,EAAW44B,EAAE,GAAGxb,IAAI,CAAC6K,kBAAL,EAArB,EAAgDjoB,CAAC,GAAG44B,EAApD,EAAwD,EAAE54B,CAA1D,EACEiI,KAAK,CAACE,IAAN,CAAW,MAAM4wB,wBAAwB,CAAC3b,IAAI,CAACwL,gBAAL,CAAsB5oB,CAAtB,CAAD,CAA9B,GAA2D,GAAtE;;EACF,SAAOiI,KAAK,CAACywB,IAAN,CAAW,IAAX,CAAP;EACD;EAED;EACA;EACA;EACA;;;EACA,SAASQ,0BAAT,CAAoC9b,IAApC,EAA0C;EACxC,QAAMnV,KAAK,GAAG,EAAd;;EACA,OAAK,IAAIjI,CAAC,GAAG,CAAR,EAAW44B,EAAE,GAAGxb,IAAI,CAACkB,gBAAL,EAArB,EAA8Cte,CAAC,GAAG44B,EAAlD,EAAsD,EAAE54B,CAAxD,EACEiI,KAAK,CAACE,IAAN,CAAW,MAAM8wB,qBAAqB,CAAC7b,IAAI,CAACO,YAAL,CAAkB3d,CAAlB,CAAD,CAA3B,GAAoD,GAA/D;;EAEF,SAAOiI,KAAK,CAACywB,IAAN,CAAW,IAAX,CAAP;EACD;EAED;EACA;EACA;EACA;;;EACA,SAASS,oBAAT,CAA8B/b,IAA9B,EAAoC;EAClC,MAAIga,OAAO,GAAG,EAAd;EACA,MAAIha,IAAI,CAAC9V,OAAL,EAAJ,EACE,OAAO8vB,OAAP;EACF,QAAMxzB,CAAC,GAAGwZ,IAAI,CAAC9T,aAAL,EAAV;EACA,MAAI1F,CAAC,CAACD,CAAN,EACEyzB,OAAO,IAAI/yB,CAAX;EACF,MAAIT,CAAC,CAACc,CAAN,EACE0yB,OAAO,IAAIzyB,CAAX;EACF,SAAOyyB,OAAP;EACD;EAED;EACA;EACA;EACA;;;EACA,MAAMgC,eAAe,GAAG;EACtB,WAASX,mBADa;EAEtB,gBAAcM,wBAFQ;EAGtB,gBAAcA,wBAHQ;EAItB,aAAWE,qBAJW;EAKtB,gBAAcN,wBALQ;EAMtB,qBAAmBK,6BANG;EAOtB,kBAAgBE,0BAPM;EAQtB,wBAAsBL;EARA,CAAxB;EAWA;EACA;EACA;EACA;EACA;;EACA,SAASC,MAAT,CAAgB1b,IAAhB,EAAsB;EACpB,MAAIkY,IAAI,GAAGlY,IAAI,CAACyI,eAAL,EAAX;EACA,QAAMwT,eAAe,GAAGD,eAAe,CAAC9D,IAAD,CAAvC;EACAA,EAAAA,IAAI,GAAGA,IAAI,CAACnmB,WAAL,EAAP;EACA,QAAMioB,OAAO,GAAG+B,oBAAoB,CAAC/b,IAAD,CAApC;EACA,MAAIga,OAAO,CAACv0B,MAAR,GAAiB,CAArB,EACEyyB,IAAI,IAAI,MAAM8B,OAAd;EACF,MAAIha,IAAI,CAAC9V,OAAL,EAAJ,EACE,OAAOguB,IAAI,GAAG,GAAP,GAAaV,KAApB;EACF,QAAM0E,GAAG,GAAGD,eAAe,CAACjc,IAAD,CAA3B;EACA,SAAOkY,IAAI,GAAG,IAAP,GAAcgE,GAAd,GAAoB,GAA3B;EACD;EAED;EACA;EACA;EACA;EACA;;;EAEe,MAAMC,SAAN,CAAgB;EAC7B;EACF;EACA;EACA;EACA;EACA;EACEl6B,EAAAA,WAAW,CAACm6B,eAAD,EAAkB;EAC3B,SAAKA,eAAL,GAAuBA,eAAe,IAAI,IAAInI,eAAJ,EAA1C;EACA,SAAKI,cAAL,GAAsB,KAAK+H,eAAL,CAAqB/Z,iBAArB,EAAtB;EACD;EAED;EACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;EACEga,EAAAA,IAAI,CAACjE,GAAD,EAAM;EACR,UAAMe,KAAK,GAAG,IAAIhB,KAAJ,CAAUC,GAAV,CAAd;EACA,UAAMkE,MAAM,GAAG,IAAIpD,MAAJ,CAAWC,KAAX,EAAkB,KAAKiD,eAAvB,CAAf;EACA,UAAMzC,QAAQ,GAAG2C,MAAM,CAAClqB,KAAP,EAAjB;EACA,WAAOunB,QAAP;EACD;EAED;EACF;EACA;EACA;EACA;EACA;EACA;;;EACE4C,EAAAA,KAAK,CAAC5C,QAAD,EAAW;EACd,WAAO+B,MAAM,CAAC/B,QAAD,CAAb;EACD;;EArC4B;;EC1vB/B;EACA;EACA;EAIA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EACe,MAAM6C,SAAN,CAAgB;EAC7B;EACF;EACA;EACEv6B,EAAAA,WAAW,CAACm6B,eAAD,EAAkB;EAC3B,SAAKE,MAAL,GAAc,IAAIH,SAAJ,CAAcC,eAAd,CAAd;EACD;EAED;EACF;EACA;EACA;EACA;EACA;EACA;EACA;;;EACEG,EAAAA,KAAK,CAAC5C,QAAD,EAAW;EACd,WAAO,KAAK2C,MAAL,CAAYC,KAAZ,CAAkB5C,QAAlB,CAAP;EACD;EAED;EACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;EACE,SAAO8C,YAAP,CAAoB/S,EAApB,EAAwBvb,EAAxB,EAA4B;EAC1B,QAAI3I,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B,MAAM,IAAIzD,KAAJ,CAAU,iBAAV,CAAN;EAE5B,WAAO,kBAAkB0nB,EAAE,CAACnlB,CAArB,GAAyB,GAAzB,GAA+BmlB,EAAE,CAACllB,CAAlC,GAAsC,IAAtC,GAA6C2J,EAAE,CAAC5J,CAAhD,GAAoD,GAApD,GAA0D4J,EAAE,CAAC3J,CAA7D,GAAiE,IAAxE;EACD;;EAlC4B;;ECfhB,MAAMk4B,eAAN,CAAsB;EACnCz6B,EAAAA,WAAW,GAAG;EACZy6B,IAAAA,eAAe,CAACp3B,YAAhB,CAA6BC,KAA7B,CAAmC,IAAnC,EAAyCC,SAAzC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKq3B,OAAL,GAAe,IAAf;EACA,SAAKC,WAAL,GAAmBlwB,KAAK,CAAC,CAAD,CAAL,CAASC,IAAT,GAAgB6kB,GAAhB,CAAoB,MAAM9kB,KAAK,CAAC,CAAD,CAA/B,CAAnB;EACA,SAAKmwB,MAAL,GAAc,IAAInwB,KAAJ,CAAU,CAAV,EAAaC,IAAb,CAAkB,IAAlB,CAAd;EACA,SAAKmwB,aAAL,GAAqB,IAArB;EACA,SAAKC,SAAL,GAAiB,IAAjB;EACA,SAAKC,GAAL,GAAW,IAAX;EACA,SAAKC,GAAL,GAAW,IAAX;EACA,SAAK/I,eAAL,GAAuB,IAAvB;EACA,SAAK2I,MAAL,CAAY,CAAZ,IAAiB,IAAIv2B,UAAJ,EAAjB;EACA,SAAKu2B,MAAL,CAAY,CAAZ,IAAiB,IAAIv2B,UAAJ,EAAjB;EACA,SAAK02B,GAAL,GAAW,KAAKH,MAAL,CAAY,CAAZ,CAAX;EACA,SAAKI,GAAL,GAAW,KAAKJ,MAAL,CAAY,CAAZ,CAAX;EACA,SAAKF,OAAL,GAAe,CAAf;EACD;;EACD,SAAOO,mBAAP,CAA2BjvB,CAA3B,EAA8Byb,EAA9B,EAAkCvb,EAAlC,EAAsC;EACpC,UAAM9F,EAAE,GAAGxG,IAAI,CAACC,GAAL,CAASqM,EAAE,CAAC5J,CAAH,GAAOmlB,EAAE,CAACnlB,CAAnB,CAAX;EACA,UAAM+D,EAAE,GAAGzG,IAAI,CAACC,GAAL,CAASqM,EAAE,CAAC3J,CAAH,GAAOklB,EAAE,CAACllB,CAAnB,CAAX;EACA,QAAImb,IAAI,GAAG,CAAC,GAAZ;;EACA,QAAI1R,CAAC,CAAClI,MAAF,CAAS2jB,EAAT,CAAJ,EAAkB;EAChB/J,MAAAA,IAAI,GAAG,GAAP;EACD,KAFD,MAEO,IAAI1R,CAAC,CAAClI,MAAF,CAASoI,EAAT,CAAJ,EAAkB;EACvB,UAAI9F,EAAE,GAAGC,EAAT,EAAaqX,IAAI,GAAGtX,EAAP,CAAb,KAA6BsX,IAAI,GAAGrX,EAAP;EAC9B,KAFM,MAEA;EACL,YAAM60B,GAAG,GAAGt7B,IAAI,CAACC,GAAL,CAASmM,CAAC,CAAC1J,CAAF,GAAMmlB,EAAE,CAACnlB,CAAlB,CAAZ;EACA,YAAM64B,GAAG,GAAGv7B,IAAI,CAACC,GAAL,CAASmM,CAAC,CAACzJ,CAAF,GAAMklB,EAAE,CAACllB,CAAlB,CAAZ;EACA,UAAI6D,EAAE,GAAGC,EAAT,EAAaqX,IAAI,GAAGwd,GAAP,CAAb,KAA8Bxd,IAAI,GAAGyd,GAAP;EAC9B,UAAIzd,IAAI,KAAK,GAAT,IAAgB,CAAC1R,CAAC,CAAClI,MAAF,CAAS2jB,EAAT,CAArB,EACE/J,IAAI,GAAG9d,IAAI,CAACiN,GAAL,CAASquB,GAAT,EAAcC,GAAd,CAAP;EAEH;;EACDz3B,IAAAA,MAAM,CAACE,MAAP,CAAc,EAAE8Z,IAAI,KAAK,GAAT,IAAgB,CAAC1R,CAAC,CAAClI,MAAF,CAAS2jB,EAAT,CAAnB,CAAd,EAAgD,0BAAhD;EACA,WAAO/J,IAAP;EACD;;EACD,SAAO0d,4BAAP,CAAoCpvB,CAApC,EAAuCE,EAAvC,EAA2CC,EAA3C,EAA+C;EAC7C,UAAM/F,EAAE,GAAG4F,CAAC,CAAC1J,CAAF,GAAM4J,EAAE,CAAC5J,CAApB;EACA,UAAM+D,EAAE,GAAG2F,CAAC,CAACzJ,CAAF,GAAM2J,EAAE,CAAC3J,CAApB;EACA,UAAMmb,IAAI,GAAG9d,IAAI,CAAC2G,IAAL,CAAUH,EAAE,GAAGA,EAAL,GAAUC,EAAE,GAAGA,EAAzB,CAAb;EACA3C,IAAAA,MAAM,CAACE,MAAP,CAAc,EAAE8Z,IAAI,KAAK,GAAT,IAAgB,CAAC1R,CAAC,CAAClI,MAAF,CAASoI,EAAT,CAAnB,CAAd,EAAgD,8BAAhD;EACA,WAAOwR,IAAP;EACD;;EACD2d,EAAAA,oBAAoB,CAACC,YAAD,EAAeC,QAAf,EAAyB;EAC3C,SAAKC,mBAAL;EACA,WAAO,KAAKX,aAAL,CAAmBS,YAAnB,EAAiCC,QAAjC,CAAP;EACD;;EACDE,EAAAA,kBAAkB,GAAG;EACnB,UAAMC,UAAU,GAAG,IAAIxN,aAAJ,EAAnB;EACA,QAAI,KAAKyN,UAAL,EAAJ,EAAuBD,UAAU,CAACrsB,MAAX,CAAkB,WAAlB;EACvB,QAAI,KAAKyrB,SAAT,EAAoBY,UAAU,CAACrsB,MAAX,CAAkB,SAAlB;EACpB,QAAI,KAAKusB,WAAL,EAAJ,EAAwBF,UAAU,CAACrsB,MAAX,CAAkB,YAAlB;EACxB,WAAOqsB,UAAU,CAACr7B,QAAX,EAAP;EACD;;EACDw7B,EAAAA,mBAAmB,CAAC3vB,EAAD,EAAKC,EAAL,EAAS2vB,EAAT,EAAaC,EAAb,EAAiB;EAClC,SAAKpB,WAAL,CAAiB,CAAjB,EAAoB,CAApB,IAAyBzuB,EAAzB;EACA,SAAKyuB,WAAL,CAAiB,CAAjB,EAAoB,CAApB,IAAyBxuB,EAAzB;EACA,SAAKwuB,WAAL,CAAiB,CAAjB,EAAoB,CAApB,IAAyBmB,EAAzB;EACA,SAAKnB,WAAL,CAAiB,CAAjB,EAAoB,CAApB,IAAyBoB,EAAzB;EACA,SAAKrB,OAAL,GAAe,KAAKsB,gBAAL,CAAsB9vB,EAAtB,EAA0BC,EAA1B,EAA8B2vB,EAA9B,EAAkCC,EAAlC,CAAf;EACD;;EACDE,EAAAA,kBAAkB,GAAG;EACnB,WAAO,KAAKvB,OAAZ;EACD;;EACDc,EAAAA,mBAAmB,GAAG;EACpB,QAAIj4B,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,UAAI,KAAKq3B,aAAL,KAAuB,IAA3B,EAAiC;EAC/B,aAAKA,aAAL,GAAqBpwB,KAAK,CAAC,CAAD,CAAL,CAASC,IAAT,GAAgB6kB,GAAhB,CAAoB,MAAM9kB,KAAK,CAAC,CAAD,CAA/B,CAArB;EACA,aAAK+wB,mBAAL,CAAyB,CAAzB;EACA,aAAKA,mBAAL,CAAyB,CAAzB;EACD;EACF,KAND,MAMO,IAAIj4B,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAM83B,YAAY,GAAG/3B,SAAS,CAAC,CAAD,CAA9B;EACA,YAAM24B,KAAK,GAAG,KAAKC,eAAL,CAAqBb,YAArB,EAAmC,CAAnC,CAAd;EACA,YAAMc,KAAK,GAAG,KAAKD,eAAL,CAAqBb,YAArB,EAAmC,CAAnC,CAAd;;EACA,UAAIY,KAAK,GAAGE,KAAZ,EAAmB;EACjB,aAAKvB,aAAL,CAAmBS,YAAnB,EAAiC,CAAjC,IAAsC,CAAtC;EACA,aAAKT,aAAL,CAAmBS,YAAnB,EAAiC,CAAjC,IAAsC,CAAtC;EACD,OAHD,MAGO;EACL,aAAKT,aAAL,CAAmBS,YAAnB,EAAiC,CAAjC,IAAsC,CAAtC;EACA,aAAKT,aAAL,CAAmBS,YAAnB,EAAiC,CAAjC,IAAsC,CAAtC;EACD;EACF;EACF;;EACDe,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAKC,eAAL,MAA0B,KAAKxB,SAAtC;EACD;;EACDyB,EAAAA,iBAAiB,CAACnK,cAAD,EAAiB;EAChC,SAAKH,eAAL,GAAuBG,cAAvB;EACD;;EACDoK,EAAAA,sBAAsB,GAAG;EACvB,QAAIj5B,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,UAAI,KAAKg5B,sBAAL,CAA4B,CAA5B,CAAJ,EAAoC,OAAO,IAAP;EACpC,UAAI,KAAKA,sBAAL,CAA4B,CAA5B,CAAJ,EAAoC,OAAO,IAAP;EACpC,aAAO,KAAP;EACD,KAJD,MAIO,IAAIj5B,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMi5B,cAAc,GAAGl5B,SAAS,CAAC,CAAD,CAAhC;;EACA,WAAK,IAAI5C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK+5B,OAAzB,EAAkC/5B,CAAC,EAAnC,EACE,IAAI,EAAE,KAAKi6B,MAAL,CAAYj6B,CAAZ,EAAeuE,QAAf,CAAwB,KAAKy1B,WAAL,CAAiB8B,cAAjB,EAAiC,CAAjC,CAAxB,KAAgE,KAAK7B,MAAL,CAAYj6B,CAAZ,EAAeuE,QAAf,CAAwB,KAAKy1B,WAAL,CAAiB8B,cAAjB,EAAiC,CAAjC,CAAxB,CAAlE,CAAJ,EACE,OAAO,IAAP;;EAGJ,aAAO,KAAP;EACD;EACF;;EACDC,EAAAA,eAAe,CAACnB,QAAD,EAAW;EACxB,WAAO,KAAKX,MAAL,CAAYW,QAAZ,CAAP;EACD;;EACDI,EAAAA,UAAU,GAAG;EACX,WAAO,KAAKW,eAAL,MAA0B,CAAC,KAAKxB,SAAvC;EACD;;EACDwB,EAAAA,eAAe,GAAG;EAChB,WAAO,KAAK5B,OAAL,KAAiBD,eAAe,CAACkC,eAAxC;EACD;;EACDR,EAAAA,eAAe,CAACb,YAAD,EAAeC,QAAf,EAAyB;EACtC,UAAM7d,IAAI,GAAG+c,eAAe,CAACQ,mBAAhB,CAAoC,KAAKL,MAAL,CAAYW,QAAZ,CAApC,EAA2D,KAAKZ,WAAL,CAAiBW,YAAjB,EAA+B,CAA/B,CAA3D,EAA8F,KAAKX,WAAL,CAAiBW,YAAjB,EAA+B,CAA/B,CAA9F,CAAb;EACA,WAAO5d,IAAP;EACD;;EACDke,EAAAA,WAAW,GAAG;EACZ,WAAO,KAAKlB,OAAL,KAAiBD,eAAe,CAACmC,sBAAxC;EACD;;EACDv8B,EAAAA,QAAQ,GAAG;EACT,WAAOk6B,SAAS,CAACC,YAAV,CAAuB,KAAKG,WAAL,CAAiB,CAAjB,EAAoB,CAApB,CAAvB,EAA+C,KAAKA,WAAL,CAAiB,CAAjB,EAAoB,CAApB,CAA/C,IAAyE,KAAzE,GAAiFJ,SAAS,CAACC,YAAV,CAAuB,KAAKG,WAAL,CAAiB,CAAjB,EAAoB,CAApB,CAAvB,EAA+C,KAAKA,WAAL,CAAiB,CAAjB,EAAoB,CAApB,CAA/C,CAAjF,GAA0J,KAAKc,kBAAL,EAAjK;EACD;;EACDoB,EAAAA,WAAW,CAACvB,YAAD,EAAewB,OAAf,EAAwB;EACjC,WAAO,KAAKnC,WAAL,CAAiBW,YAAjB,EAA+BwB,OAA/B,CAAP;EACD;;EACDC,EAAAA,cAAc,CAACnW,EAAD,EAAK;EACjB,SAAK,IAAIjmB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK+5B,OAAzB,EAAkC/5B,CAAC,EAAnC,EACE,IAAI,KAAKi6B,MAAL,CAAYj6B,CAAZ,EAAeuE,QAAf,CAAwB0hB,EAAxB,CAAJ,EACE,OAAO,IAAP;;EAGJ,WAAO,KAAP;EACD;;EACDoW,EAAAA,2BAA2B,CAAC1B,YAAD,EAAeC,QAAf,EAAyB;EAClD,SAAKC,mBAAL;EACA,WAAO,KAAKZ,MAAL,CAAY,KAAKC,aAAL,CAAmBS,YAAnB,EAAiCC,QAAjC,CAAZ,CAAP;EACD;;EA5IkC;EA8IrCd,eAAe,CAACwC,cAAhB,GAAiC,CAAjC;EACAxC,eAAe,CAACyC,YAAhB,GAA+B,CAA/B;EACAzC,eAAe,CAACrgB,SAAhB,GAA4B,CAA5B;EACAqgB,eAAe,CAACkC,eAAhB,GAAkC,CAAlC;EACAlC,eAAe,CAAC0C,kBAAhB,GAAqC,CAArC;EACA1C,eAAe,CAACmC,sBAAhB,GAAyC,CAAzC;;EC/Ie,MAAMQ,qBAAN,SAAoC3C,eAApC,CAAoD;EACjEz6B,EAAAA,WAAW,GAAG;EACZ;EACD;;EACD,SAAOq9B,eAAP,CAAuBnxB,EAAvB,EAA2BC,EAA3B,EAA+BK,EAA/B,EAAmCC,EAAnC,EAAuC;EACrC,QAAI6wB,SAAS,GAAGpxB,EAAhB;EACA,QAAIqxB,OAAO,GAAG5gB,QAAQ,CAACK,cAAT,CAAwB9Q,EAAxB,EAA4BM,EAA5B,EAAgCC,EAAhC,CAAd;EACA,QAAIiR,IAAI,GAAGf,QAAQ,CAACK,cAAT,CAAwB7Q,EAAxB,EAA4BK,EAA5B,EAAgCC,EAAhC,CAAX;;EACA,QAAIiR,IAAI,GAAG6f,OAAX,EAAoB;EAClBA,MAAAA,OAAO,GAAG7f,IAAV;EACA4f,MAAAA,SAAS,GAAGnxB,EAAZ;EACD;;EACDuR,IAAAA,IAAI,GAAGf,QAAQ,CAACK,cAAT,CAAwBxQ,EAAxB,EAA4BN,EAA5B,EAAgCC,EAAhC,CAAP;;EACA,QAAIuR,IAAI,GAAG6f,OAAX,EAAoB;EAClBA,MAAAA,OAAO,GAAG7f,IAAV;EACA4f,MAAAA,SAAS,GAAG9wB,EAAZ;EACD;;EACDkR,IAAAA,IAAI,GAAGf,QAAQ,CAACK,cAAT,CAAwBvQ,EAAxB,EAA4BP,EAA5B,EAAgCC,EAAhC,CAAP;;EACA,QAAIuR,IAAI,GAAG6f,OAAX,EAAoB;EAClBA,MAAAA,OAAO,GAAG7f,IAAV;EACA4f,MAAAA,SAAS,GAAG7wB,EAAZ;EACD;;EACD,WAAO6wB,SAAP;EACD;;EACDE,EAAAA,oBAAoB,CAACC,KAAD,EAAQ;EAC1B,UAAMC,IAAI,GAAG,IAAIhyB,QAAJ,CAAa,KAAKivB,WAAL,CAAiB,CAAjB,EAAoB,CAApB,CAAb,EAAqC,KAAKA,WAAL,CAAiB,CAAjB,EAAoB,CAApB,CAArC,CAAb;EACA,UAAMgD,IAAI,GAAG,IAAIjyB,QAAJ,CAAa,KAAKivB,WAAL,CAAiB,CAAjB,EAAoB,CAApB,CAAb,EAAqC,KAAKA,WAAL,CAAiB,CAAjB,EAAoB,CAApB,CAArC,CAAb;EACA,WAAO+C,IAAI,CAACzuB,QAAL,CAAcwuB,KAAd,KAAwBE,IAAI,CAAC1uB,QAAL,CAAcwuB,KAAd,CAA/B;EACD;;EACD5B,EAAAA,mBAAmB,GAAG;EACpB,QAAIt4B,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMwI,CAAC,GAAGzI,SAAS,CAAC,CAAD,CAAnB;EAAA,YAAwB2I,EAAE,GAAG3I,SAAS,CAAC,CAAD,CAAtC;EAAA,YAA2C4I,EAAE,GAAG5I,SAAS,CAAC,CAAD,CAAzD;EACA,WAAKu3B,SAAL,GAAiB,KAAjB;EACA,UAAIpvB,QAAQ,CAACY,UAAT,CAAoBJ,EAApB,EAAwBC,EAAxB,EAA4BH,CAA5B,CAAJ,EACE,IAAIuN,WAAW,CAACtQ,KAAZ,CAAkBiD,EAAlB,EAAsBC,EAAtB,EAA0BH,CAA1B,MAAiC,CAAjC,IAAsCuN,WAAW,CAACtQ,KAAZ,CAAkBkD,EAAlB,EAAsBD,EAAtB,EAA0BF,CAA1B,MAAiC,CAA3E,EAA8E;EAC5E,aAAK8uB,SAAL,GAAiB,IAAjB;EACA,YAAI9uB,CAAC,CAAClI,MAAF,CAASoI,EAAT,KAAgBF,CAAC,CAAClI,MAAF,CAASqI,EAAT,CAApB,EACE,KAAK2uB,SAAL,GAAiB,KAAjB;EAEF,aAAKJ,OAAL,GAAeD,eAAe,CAAC0C,kBAA/B;EACA,eAAO,IAAP;EACD;EAEH,WAAKzC,OAAL,GAAeD,eAAe,CAACkC,eAA/B;EACD,KAdD,MAcO;EACL,aAAO,MAAMd,mBAAN,CAA0Bv4B,KAA1B,CAAgC,IAAhC,EAAsCC,SAAtC,CAAP;EACD;EACF;;EACDkK,EAAAA,YAAY,CAACvB,EAAD,EAAKC,EAAL,EAASK,EAAT,EAAaC,EAAb,EAAiB;EAC3B,QAAIgxB,KAAK,GAAG,KAAKG,gBAAL,CAAsB1xB,EAAtB,EAA0BC,EAA1B,EAA8BK,EAA9B,EAAkCC,EAAlC,CAAZ;EACA,QAAI,CAAC,KAAK+wB,oBAAL,CAA0BC,KAA1B,CAAL,EACEA,KAAK,GAAG,IAAIp5B,UAAJ,CAAe+4B,qBAAqB,CAACC,eAAtB,CAAsCnxB,EAAtC,EAA0CC,EAA1C,EAA8CK,EAA9C,EAAkDC,EAAlD,CAAf,CAAR;EAEF,QAAI,KAAKwlB,eAAL,KAAyB,IAA7B,EACE,KAAKA,eAAL,CAAqBV,WAArB,CAAiCkM,KAAjC;EAEF,WAAOA,KAAP;EACD;;EACDI,EAAAA,OAAO,CAAC3xB,EAAD,EAAKC,EAAL,EAASK,EAAT,EAAaC,EAAb,EAAiBgxB,KAAjB,EAAwB;EAC7B,UAAMK,OAAO,GAAGxmB,cAAc,CAAC7J,YAAf,CAA4BvB,EAA5B,EAAgCC,EAAhC,EAAoCK,EAApC,EAAwCC,EAAxC,CAAhB;EACA,UAAMsxB,IAAI,GAAG,KAAKP,oBAAL,CAA0BM,OAA1B,CAAb;EACAriB,IAAAA,MAAM,CAACuiB,GAAP,CAAWC,OAAX,CAAmB,iBAAiBF,IAAjB,GAAwB,0BAAxB,GAAqDD,OAAxE;EACA,QAAIL,KAAK,CAAC/2B,QAAN,CAAeo3B,OAAf,IAA0B,MAA9B,EACEriB,MAAM,CAACuiB,GAAP,CAAWC,OAAX,CAAmB,gBAAgBR,KAAK,CAAC/2B,QAAN,CAAeo3B,OAAf,CAAnC;EAEH;;EACDF,EAAAA,gBAAgB,CAAC1xB,EAAD,EAAKC,EAAL,EAASK,EAAT,EAAaC,EAAb,EAAiB;EAC/B,QAAIgxB,KAAK,GAAGnjB,YAAY,CAAC7M,YAAb,CAA0BvB,EAA1B,EAA8BC,EAA9B,EAAkCK,EAAlC,EAAsCC,EAAtC,CAAZ;EACA,QAAIgxB,KAAK,KAAK,IAAd,EAAoBA,KAAK,GAAGL,qBAAqB,CAACC,eAAtB,CAAsCnxB,EAAtC,EAA0CC,EAA1C,EAA8CK,EAA9C,EAAkDC,EAAlD,CAAR;EACpB,WAAOgxB,KAAP;EACD;;EACDS,EAAAA,4BAA4B,CAAChyB,EAAD,EAAKC,EAAL,EAASK,EAAT,EAAaC,EAAb,EAAiB;EAC3C,UAAM0xB,MAAM,GAAGzyB,QAAQ,CAACY,UAAT,CAAoBJ,EAApB,EAAwBC,EAAxB,EAA4BK,EAA5B,CAAf;EACA,UAAM4xB,MAAM,GAAG1yB,QAAQ,CAACY,UAAT,CAAoBJ,EAApB,EAAwBC,EAAxB,EAA4BM,EAA5B,CAAf;EACA,UAAM4xB,MAAM,GAAG3yB,QAAQ,CAACY,UAAT,CAAoBE,EAApB,EAAwBC,EAAxB,EAA4BP,EAA5B,CAAf;EACA,UAAMoyB,MAAM,GAAG5yB,QAAQ,CAACY,UAAT,CAAoBE,EAApB,EAAwBC,EAAxB,EAA4BN,EAA5B,CAAf;;EACA,QAAIgyB,MAAM,IAAIC,MAAd,EAAsB;EACpB,WAAKxD,MAAL,CAAY,CAAZ,IAAiBpuB,EAAjB;EACA,WAAKouB,MAAL,CAAY,CAAZ,IAAiBnuB,EAAjB;EACA,aAAOguB,eAAe,CAACmC,sBAAvB;EACD;;EACD,QAAIyB,MAAM,IAAIC,MAAd,EAAsB;EACpB,WAAK1D,MAAL,CAAY,CAAZ,IAAiB1uB,EAAjB;EACA,WAAK0uB,MAAL,CAAY,CAAZ,IAAiBzuB,EAAjB;EACA,aAAOsuB,eAAe,CAACmC,sBAAvB;EACD;;EACD,QAAIuB,MAAM,IAAIE,MAAd,EAAsB;EACpB,WAAKzD,MAAL,CAAY,CAAZ,IAAiBpuB,EAAjB;EACA,WAAKouB,MAAL,CAAY,CAAZ,IAAiB1uB,EAAjB;EACA,aAAOM,EAAE,CAAC1I,MAAH,CAAUoI,EAAV,KAAiB,CAACkyB,MAAlB,IAA4B,CAACE,MAA7B,GAAsC7D,eAAe,CAAC0C,kBAAtD,GAA2E1C,eAAe,CAACmC,sBAAlG;EACD;;EACD,QAAIuB,MAAM,IAAIG,MAAd,EAAsB;EACpB,WAAK1D,MAAL,CAAY,CAAZ,IAAiBpuB,EAAjB;EACA,WAAKouB,MAAL,CAAY,CAAZ,IAAiBzuB,EAAjB;EACA,aAAOK,EAAE,CAAC1I,MAAH,CAAUqI,EAAV,KAAiB,CAACiyB,MAAlB,IAA4B,CAACC,MAA7B,GAAsC5D,eAAe,CAAC0C,kBAAtD,GAA2E1C,eAAe,CAACmC,sBAAlG;EACD;;EACD,QAAIwB,MAAM,IAAIC,MAAd,EAAsB;EACpB,WAAKzD,MAAL,CAAY,CAAZ,IAAiBnuB,EAAjB;EACA,WAAKmuB,MAAL,CAAY,CAAZ,IAAiB1uB,EAAjB;EACA,aAAOO,EAAE,CAAC3I,MAAH,CAAUoI,EAAV,KAAiB,CAACiyB,MAAlB,IAA4B,CAACG,MAA7B,GAAsC7D,eAAe,CAAC0C,kBAAtD,GAA2E1C,eAAe,CAACmC,sBAAlG;EACD;;EACD,QAAIwB,MAAM,IAAIE,MAAd,EAAsB;EACpB,WAAK1D,MAAL,CAAY,CAAZ,IAAiBnuB,EAAjB;EACA,WAAKmuB,MAAL,CAAY,CAAZ,IAAiBzuB,EAAjB;EACA,aAAOM,EAAE,CAAC3I,MAAH,CAAUqI,EAAV,KAAiB,CAACgyB,MAAlB,IAA4B,CAACE,MAA7B,GAAsC5D,eAAe,CAAC0C,kBAAtD,GAA2E1C,eAAe,CAACmC,sBAAlG;EACD;;EACD,WAAOnC,eAAe,CAACkC,eAAvB;EACD;;EACDX,EAAAA,gBAAgB,CAAC9vB,EAAD,EAAKC,EAAL,EAASK,EAAT,EAAaC,EAAb,EAAiB;EAC/B,SAAKquB,SAAL,GAAiB,KAAjB;EACA,QAAI,CAACpvB,QAAQ,CAACY,UAAT,CAAoBJ,EAApB,EAAwBC,EAAxB,EAA4BK,EAA5B,EAAgCC,EAAhC,CAAL,EAA0C,OAAOguB,eAAe,CAACkC,eAAvB;EAC1C,UAAM4B,GAAG,GAAGhlB,WAAW,CAACtQ,KAAZ,CAAkBiD,EAAlB,EAAsBC,EAAtB,EAA0BK,EAA1B,CAAZ;EACA,UAAMgyB,GAAG,GAAGjlB,WAAW,CAACtQ,KAAZ,CAAkBiD,EAAlB,EAAsBC,EAAtB,EAA0BM,EAA1B,CAAZ;EACA,QAAI8xB,GAAG,GAAG,CAAN,IAAWC,GAAG,GAAG,CAAjB,IAAsBD,GAAG,GAAG,CAAN,IAAWC,GAAG,GAAG,CAA3C,EACE,OAAO/D,eAAe,CAACkC,eAAvB;EAEF,UAAM8B,GAAG,GAAGllB,WAAW,CAACtQ,KAAZ,CAAkBuD,EAAlB,EAAsBC,EAAtB,EAA0BP,EAA1B,CAAZ;EACA,UAAMwyB,GAAG,GAAGnlB,WAAW,CAACtQ,KAAZ,CAAkBuD,EAAlB,EAAsBC,EAAtB,EAA0BN,EAA1B,CAAZ;EACA,QAAIsyB,GAAG,GAAG,CAAN,IAAWC,GAAG,GAAG,CAAjB,IAAsBD,GAAG,GAAG,CAAN,IAAWC,GAAG,GAAG,CAA3C,EACE,OAAOjE,eAAe,CAACkC,eAAvB;EAEF,UAAMgC,SAAS,GAAGJ,GAAG,KAAK,CAAR,IAAaC,GAAG,KAAK,CAArB,IAA0BC,GAAG,KAAK,CAAlC,IAAuCC,GAAG,KAAK,CAAjE;EACA,QAAIC,SAAJ,EACE,OAAO,KAAKT,4BAAL,CAAkChyB,EAAlC,EAAsCC,EAAtC,EAA0CK,EAA1C,EAA8CC,EAA9C,CAAP;;EAEF,QAAI8xB,GAAG,KAAK,CAAR,IAAaC,GAAG,KAAK,CAArB,IAA0BC,GAAG,KAAK,CAAlC,IAAuCC,GAAG,KAAK,CAAnD,EAAsD;EACpD,WAAK5D,SAAL,GAAiB,KAAjB;EACA,UAAI5uB,EAAE,CAAChH,QAAH,CAAYsH,EAAZ,KAAmBN,EAAE,CAAChH,QAAH,CAAYuH,EAAZ,CAAvB,EACE,KAAKmuB,MAAL,CAAY,CAAZ,IAAiB1uB,EAAjB,CADF,KAEK,IAAIC,EAAE,CAACjH,QAAH,CAAYsH,EAAZ,KAAmBL,EAAE,CAACjH,QAAH,CAAYuH,EAAZ,CAAvB,EACH,KAAKmuB,MAAL,CAAY,CAAZ,IAAiBzuB,EAAjB,CADG,KAEA,IAAIoyB,GAAG,KAAK,CAAZ,EACH,KAAK3D,MAAL,CAAY,CAAZ,IAAiB,IAAIv2B,UAAJ,CAAemI,EAAf,CAAjB,CADG,KAEA,IAAIgyB,GAAG,KAAK,CAAZ,EACH,KAAK5D,MAAL,CAAY,CAAZ,IAAiB,IAAIv2B,UAAJ,CAAeoI,EAAf,CAAjB,CADG,KAEA,IAAIgyB,GAAG,KAAK,CAAZ,EACH,KAAK7D,MAAL,CAAY,CAAZ,IAAiB,IAAIv2B,UAAJ,CAAe6H,EAAf,CAAjB,CADG,KAEA,IAAIwyB,GAAG,KAAK,CAAZ,EACH,KAAK9D,MAAL,CAAY,CAAZ,IAAiB,IAAIv2B,UAAJ,CAAe8H,EAAf,CAAjB;EAEH,KAfD,MAeO;EACL,WAAK2uB,SAAL,GAAiB,IAAjB;EACA,WAAKF,MAAL,CAAY,CAAZ,IAAiB,KAAKntB,YAAL,CAAkBvB,EAAlB,EAAsBC,EAAtB,EAA0BK,EAA1B,EAA8BC,EAA9B,CAAjB;EACD;;EACD,WAAOguB,eAAe,CAAC0C,kBAAvB;EACD;;EAjJgE;;ECApD,MAAMyB,WAAN,CAAkB;EAC/B5+B,EAAAA,WAAW,GAAG;EACZ4+B,IAAAA,WAAW,CAACv7B,YAAZ,CAAyBC,KAAzB,CAA+B,IAA/B,EAAqCC,SAArC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKokB,EAAL,GAAU,IAAV;EACA,SAAKvb,EAAL,GAAU,IAAV;;EACA,QAAI3I,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1Bo7B,MAAAA,WAAW,CAACv7B,YAAZ,CAAyBI,IAAzB,CAA8B,IAA9B,EAAoC,IAAIY,UAAJ,EAApC,EAAsD,IAAIA,UAAJ,EAAtD;EACD,KAFD,MAEO,IAAId,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMq7B,EAAE,GAAGt7B,SAAS,CAAC,CAAD,CAApB;EACAq7B,MAAAA,WAAW,CAACv7B,YAAZ,CAAyBI,IAAzB,CAA8B,IAA9B,EAAoCo7B,EAAE,CAACpX,EAAvC,EAA2CoX,EAAE,CAAC3yB,EAA9C;EACD,KAHM,MAGA,IAAI3I,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMikB,EAAE,GAAGlkB,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyB2I,EAAE,GAAG3I,SAAS,CAAC,CAAD,CAAvC;EACA,WAAKkkB,EAAL,GAAUA,EAAV;EACA,WAAKvb,EAAL,GAAUA,EAAV;EACD,KAJM,MAIA,IAAI3I,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAM8e,EAAE,GAAG/e,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyBgf,EAAE,GAAGhf,SAAS,CAAC,CAAD,CAAvC;EAAA,YAA4C9D,EAAE,GAAG8D,SAAS,CAAC,CAAD,CAA1D;EAAA,YAA+D6I,EAAE,GAAG7I,SAAS,CAAC,CAAD,CAA7E;EACAq7B,MAAAA,WAAW,CAACv7B,YAAZ,CAAyBI,IAAzB,CAA8B,IAA9B,EAAoC,IAAIY,UAAJ,CAAeie,EAAf,EAAmBC,EAAnB,CAApC,EAA4D,IAAIle,UAAJ,CAAe5E,EAAf,EAAmB2M,EAAnB,CAA5D;EACD;EACF;;EACD,SAAO0yB,QAAP,CAAgBrX,EAAhB,EAAoBvb,EAApB,EAAwB;EACtB,WAAO,IAAI7H,UAAJ,CAAe,CAACojB,EAAE,CAACnlB,CAAH,GAAO4J,EAAE,CAAC5J,CAAX,IAAgB,CAA/B,EAAkC,CAACmlB,EAAE,CAACllB,CAAH,GAAO2J,EAAE,CAAC3J,CAAX,IAAgB,CAAlD,CAAP;EACD;;EACDw8B,EAAAA,IAAI,GAAG;EACL,WAAOn/B,IAAI,CAAC+M,GAAL,CAAS,KAAK8a,EAAL,CAAQnlB,CAAjB,EAAoB,KAAK4J,EAAL,CAAQ5J,CAA5B,CAAP;EACD;;EACDiV,EAAAA,gBAAgB,GAAG;EACjB,QAAIhU,SAAS,CAAC,CAAD,CAAT,YAAwBq7B,WAA5B,EAAyC;EACvC,YAAMI,GAAG,GAAGz7B,SAAS,CAAC,CAAD,CAArB;EACA,YAAM07B,OAAO,GAAG1lB,WAAW,CAACtQ,KAAZ,CAAkB,KAAKwe,EAAvB,EAA2B,KAAKvb,EAAhC,EAAoC8yB,GAAG,CAACvX,EAAxC,CAAhB;EACA,YAAMyX,OAAO,GAAG3lB,WAAW,CAACtQ,KAAZ,CAAkB,KAAKwe,EAAvB,EAA2B,KAAKvb,EAAhC,EAAoC8yB,GAAG,CAAC9yB,EAAxC,CAAhB;EACA,UAAI+yB,OAAO,IAAI,CAAX,IAAgBC,OAAO,IAAI,CAA/B,EAAkC,OAAOt/B,IAAI,CAACiN,GAAL,CAASoyB,OAAT,EAAkBC,OAAlB,CAAP;EAClC,UAAID,OAAO,IAAI,CAAX,IAAgBC,OAAO,IAAI,CAA/B,EAAkC,OAAOt/B,IAAI,CAACiN,GAAL,CAASoyB,OAAT,EAAkBC,OAAlB,CAAP;EAClC,aAAO,CAAP;EACD,KAPD,MAOO,IAAI37B,SAAS,CAAC,CAAD,CAAT,YAAwBc,UAA5B,EAAwC;EAC7C,YAAM2H,CAAC,GAAGzI,SAAS,CAAC,CAAD,CAAnB;EACA,aAAOgW,WAAW,CAACtQ,KAAZ,CAAkB,KAAKwe,EAAvB,EAA2B,KAAKvb,EAAhC,EAAoCF,CAApC,CAAP;EACD;EACF;;EACDyT,EAAAA,UAAU,CAAC0f,WAAD,EAAc;EACtB,WAAOA,WAAW,CAAC/Y,gBAAZ,CAA6B,CAAC,KAAKqB,EAAN,EAAU,KAAKvb,EAAf,CAA7B,CAAP;EACD;;EACDkzB,EAAAA,UAAU,GAAG;EACX,WAAO,KAAK3X,EAAL,CAAQnlB,CAAR,KAAc,KAAK4J,EAAL,CAAQ5J,CAA7B;EACD;;EACDwB,EAAAA,MAAM,CAAC8B,CAAD,EAAI;EACR,QAAI,EAAEA,CAAC,YAAYg5B,WAAf,CAAJ,EACE,OAAO,KAAP;EAEF,UAAMz5B,KAAK,GAAGS,CAAd;EACA,WAAO,KAAK6hB,EAAL,CAAQ3jB,MAAR,CAAeqB,KAAK,CAACsiB,EAArB,KAA4B,KAAKvb,EAAL,CAAQpI,MAAR,CAAeqB,KAAK,CAAC+G,EAArB,CAAnC;EACD;;EACDuB,EAAAA,YAAY,CAAC+P,IAAD,EAAO;EACjB,UAAM6hB,EAAE,GAAG,IAAIjC,qBAAJ,EAAX;EACAiC,IAAAA,EAAE,CAACxD,mBAAH,CAAuB,KAAKpU,EAA5B,EAAgC,KAAKvb,EAArC,EAAyCsR,IAAI,CAACiK,EAA9C,EAAkDjK,IAAI,CAACtR,EAAvD;EACA,QAAImzB,EAAE,CAAC/C,eAAH,EAAJ,EAA0B,OAAO+C,EAAE,CAAC3C,eAAH,CAAmB,CAAnB,CAAP;EAC1B,WAAO,IAAP;EACD;;EACD4C,EAAAA,OAAO,GAAG;EACR,QAAI/7B,SAAS,CAAC,CAAD,CAAT,YAAwBc,UAA5B,EAAwC;EACtC,YAAM2H,CAAC,GAAGzI,SAAS,CAAC,CAAD,CAAnB;EACA,UAAIyI,CAAC,CAAClI,MAAF,CAAS,KAAK2jB,EAAd,KAAqBzb,CAAC,CAAClI,MAAF,CAAS,KAAKoI,EAAd,CAAzB,EAA4C,OAAO,IAAI7H,UAAJ,CAAe2H,CAAf,CAAP;EAC5C,YAAM8I,CAAC,GAAG,KAAKyqB,gBAAL,CAAsBvzB,CAAtB,CAAV;EACA,YAAMjG,KAAK,GAAG,IAAI1B,UAAJ,EAAd;EACA0B,MAAAA,KAAK,CAACzD,CAAN,GAAU,KAAKmlB,EAAL,CAAQnlB,CAAR,GAAYwS,CAAC,IAAI,KAAK5I,EAAL,CAAQ5J,CAAR,GAAY,KAAKmlB,EAAL,CAAQnlB,CAAxB,CAAvB;EACAyD,MAAAA,KAAK,CAACxD,CAAN,GAAU,KAAKklB,EAAL,CAAQllB,CAAR,GAAYuS,CAAC,IAAI,KAAK5I,EAAL,CAAQ3J,CAAR,GAAY,KAAKklB,EAAL,CAAQllB,CAAxB,CAAvB;EACA,aAAOwD,KAAP;EACD,KARD,MAQO,IAAIxC,SAAS,CAAC,CAAD,CAAT,YAAwBq7B,WAA5B,EAAyC;EAC9C,YAAMI,GAAG,GAAGz7B,SAAS,CAAC,CAAD,CAArB;EACA,YAAMi8B,GAAG,GAAG,KAAKD,gBAAL,CAAsBP,GAAG,CAACvX,EAA1B,CAAZ;EACA,YAAMgY,GAAG,GAAG,KAAKF,gBAAL,CAAsBP,GAAG,CAAC9yB,EAA1B,CAAZ;EACA,UAAIszB,GAAG,IAAI,GAAP,IAAcC,GAAG,IAAI,GAAzB,EAA8B,OAAO,IAAP;EAC9B,UAAID,GAAG,IAAI,GAAP,IAAcC,GAAG,IAAI,GAAzB,EAA8B,OAAO,IAAP;EAC9B,UAAIC,KAAK,GAAG,KAAKJ,OAAL,CAAaN,GAAG,CAACvX,EAAjB,CAAZ;EACA,UAAI+X,GAAG,GAAG,GAAV,EAAeE,KAAK,GAAG,KAAKjY,EAAb;EACf,UAAI+X,GAAG,GAAG,GAAV,EAAeE,KAAK,GAAG,KAAKxzB,EAAb;EACf,UAAIyzB,KAAK,GAAG,KAAKL,OAAL,CAAaN,GAAG,CAAC9yB,EAAjB,CAAZ;EACA,UAAIuzB,GAAG,GAAG,GAAV,EAAeE,KAAK,GAAG,KAAKlY,EAAb;EACf,UAAIgY,GAAG,GAAG,GAAV,EAAeE,KAAK,GAAG,KAAKzzB,EAAb;EACf,aAAO,IAAI0yB,WAAJ,CAAgBc,KAAhB,EAAuBC,KAAvB,CAAP;EACD;EACF;;EACD9f,EAAAA,SAAS,GAAG;EACV,QAAI,KAAK3T,EAAL,CAAQvG,SAAR,CAAkB,KAAK8hB,EAAvB,IAA6B,CAAjC,EAAoC,KAAK3H,OAAL;EACrC;;EACD8f,EAAAA,KAAK,GAAG;EACN,WAAOhgC,IAAI,CAACigC,KAAL,CAAW,KAAK3zB,EAAL,CAAQ3J,CAAR,GAAY,KAAKklB,EAAL,CAAQllB,CAA/B,EAAkC,KAAK2J,EAAL,CAAQ5J,CAAR,GAAY,KAAKmlB,EAAL,CAAQnlB,CAAtD,CAAP;EACD;;EACD2H,EAAAA,aAAa,CAACtJ,CAAD,EAAI;EACf,QAAIA,CAAC,KAAK,CAAV,EAAa,OAAO,KAAK8mB,EAAZ;EACb,WAAO,KAAKvb,EAAZ;EACD;;EACD4zB,EAAAA,qBAAqB,CAAC9zB,CAAD,EAAI;EACvB,WAAO2Q,QAAQ,CAACW,wBAAT,CAAkCtR,CAAlC,EAAqC,KAAKyb,EAA1C,EAA8C,KAAKvb,EAAnD,CAAP;EACD;;EACD6zB,EAAAA,IAAI,GAAG;EACL,WAAOngC,IAAI,CAAC+M,GAAL,CAAS,KAAK8a,EAAL,CAAQllB,CAAjB,EAAoB,KAAK2J,EAAL,CAAQ3J,CAA5B,CAAP;EACD;;EACDu8B,EAAAA,QAAQ,GAAG;EACT,WAAOF,WAAW,CAACE,QAAZ,CAAqB,KAAKrX,EAA1B,EAA8B,KAAKvb,EAAnC,CAAP;EACD;;EACDqzB,EAAAA,gBAAgB,CAACvzB,CAAD,EAAI;EAClB,QAAIA,CAAC,CAAClI,MAAF,CAAS,KAAK2jB,EAAd,CAAJ,EAAuB,OAAO,GAAP;EACvB,QAAIzb,CAAC,CAAClI,MAAF,CAAS,KAAKoI,EAAd,CAAJ,EAAuB,OAAO,GAAP;EACvB,UAAM9F,EAAE,GAAG,KAAK8F,EAAL,CAAQ5J,CAAR,GAAY,KAAKmlB,EAAL,CAAQnlB,CAA/B;EACA,UAAM+D,EAAE,GAAG,KAAK6F,EAAL,CAAQ3J,CAAR,GAAY,KAAKklB,EAAL,CAAQllB,CAA/B;EACA,UAAMiH,GAAG,GAAGpD,EAAE,GAAGA,EAAL,GAAUC,EAAE,GAAGA,EAA3B;EACA,QAAImD,GAAG,IAAI,GAAX,EAAgB,OAAO1I,MAAM,CAACC,GAAd;EAChB,UAAM+T,CAAC,GAAG,CAAC,CAAC9I,CAAC,CAAC1J,CAAF,GAAM,KAAKmlB,EAAL,CAAQnlB,CAAf,IAAoB8D,EAApB,GAAyB,CAAC4F,CAAC,CAACzJ,CAAF,GAAM,KAAKklB,EAAL,CAAQllB,CAAf,IAAoB8D,EAA9C,IAAoDmD,GAA9D;EACA,WAAOsL,CAAP;EACD;;EACDkrB,EAAAA,aAAa,CAACxiB,IAAD,EAAO;EAClB,UAAMigB,KAAK,GAAG,KAAKhwB,YAAL,CAAkB+P,IAAlB,CAAd;EACA,QAAIigB,KAAK,KAAK,IAAd,EACE,OAAO,CAACA,KAAD,EAAQA,KAAR,CAAP;EAEF,UAAMwC,SAAS,GAAG,IAAIx1B,KAAJ,CAAU,CAAV,EAAaC,IAAb,CAAkB,IAAlB,CAAlB;EACA,QAAI+S,WAAW,GAAG3c,MAAM,CAACO,SAAzB;EACA,QAAIqc,IAAI,GAAG,IAAX;EACA,UAAMwiB,OAAO,GAAG,KAAKC,YAAL,CAAkB3iB,IAAI,CAACiK,EAAvB,CAAhB;EACAhK,IAAAA,WAAW,GAAGyiB,OAAO,CAACx5B,QAAR,CAAiB8W,IAAI,CAACiK,EAAtB,CAAd;EACAwY,IAAAA,SAAS,CAAC,CAAD,CAAT,GAAeC,OAAf;EACAD,IAAAA,SAAS,CAAC,CAAD,CAAT,GAAeziB,IAAI,CAACiK,EAApB;EACA,UAAM2Y,OAAO,GAAG,KAAKD,YAAL,CAAkB3iB,IAAI,CAACtR,EAAvB,CAAhB;EACAwR,IAAAA,IAAI,GAAG0iB,OAAO,CAAC15B,QAAR,CAAiB8W,IAAI,CAACtR,EAAtB,CAAP;;EACA,QAAIwR,IAAI,GAAGD,WAAX,EAAwB;EACtBA,MAAAA,WAAW,GAAGC,IAAd;EACAuiB,MAAAA,SAAS,CAAC,CAAD,CAAT,GAAeG,OAAf;EACAH,MAAAA,SAAS,CAAC,CAAD,CAAT,GAAeziB,IAAI,CAACtR,EAApB;EACD;;EACD,UAAMm0B,OAAO,GAAG7iB,IAAI,CAAC2iB,YAAL,CAAkB,KAAK1Y,EAAvB,CAAhB;EACA/J,IAAAA,IAAI,GAAG2iB,OAAO,CAAC35B,QAAR,CAAiB,KAAK+gB,EAAtB,CAAP;;EACA,QAAI/J,IAAI,GAAGD,WAAX,EAAwB;EACtBA,MAAAA,WAAW,GAAGC,IAAd;EACAuiB,MAAAA,SAAS,CAAC,CAAD,CAAT,GAAe,KAAKxY,EAApB;EACAwY,MAAAA,SAAS,CAAC,CAAD,CAAT,GAAeI,OAAf;EACD;;EACD,UAAMC,OAAO,GAAG9iB,IAAI,CAAC2iB,YAAL,CAAkB,KAAKj0B,EAAvB,CAAhB;EACAwR,IAAAA,IAAI,GAAG4iB,OAAO,CAAC55B,QAAR,CAAiB,KAAKwF,EAAtB,CAAP;;EACA,QAAIwR,IAAI,GAAGD,WAAX,EAAwB;EACtBA,MAAAA,WAAW,GAAGC,IAAd;EACAuiB,MAAAA,SAAS,CAAC,CAAD,CAAT,GAAe,KAAK/zB,EAApB;EACA+zB,MAAAA,SAAS,CAAC,CAAD,CAAT,GAAeK,OAAf;EACD;;EACD,WAAOL,SAAP;EACD;;EACDE,EAAAA,YAAY,CAACn0B,CAAD,EAAI;EACd,UAAMu0B,MAAM,GAAG,KAAKhB,gBAAL,CAAsBvzB,CAAtB,CAAf;EACA,QAAIu0B,MAAM,GAAG,CAAT,IAAcA,MAAM,GAAG,CAA3B,EACE,OAAO,KAAKjB,OAAL,CAAatzB,CAAb,CAAP;EAEF,UAAMkwB,KAAK,GAAG,KAAKzU,EAAL,CAAQ/gB,QAAR,CAAiBsF,CAAjB,CAAd;EACA,UAAMowB,KAAK,GAAG,KAAKlwB,EAAL,CAAQxF,QAAR,CAAiBsF,CAAjB,CAAd;EACA,QAAIkwB,KAAK,GAAGE,KAAZ,EAAmB,OAAO,KAAK3U,EAAZ;EACnB,WAAO,KAAKvb,EAAZ;EACD;;EACDs0B,EAAAA,IAAI,GAAG;EACL,WAAO5gC,IAAI,CAACiN,GAAL,CAAS,KAAK4a,EAAL,CAAQnlB,CAAjB,EAAoB,KAAK4J,EAAL,CAAQ5J,CAA5B,CAAP;EACD;;EACD0c,EAAAA,SAAS,GAAG;EACV,WAAO,KAAKyI,EAAL,CAAQ/gB,QAAR,CAAiB,KAAKwF,EAAtB,CAAP;EACD;;EACDvG,EAAAA,SAAS,CAACC,CAAD,EAAI;EACX,UAAMT,KAAK,GAAGS,CAAd;EACA,UAAM66B,KAAK,GAAG,KAAKhZ,EAAL,CAAQ9hB,SAAR,CAAkBR,KAAK,CAACsiB,EAAxB,CAAd;EACA,QAAIgZ,KAAK,KAAK,CAAd,EAAiB,OAAOA,KAAP;EACjB,WAAO,KAAKv0B,EAAL,CAAQvG,SAAR,CAAkBR,KAAK,CAAC+G,EAAxB,CAAP;EACD;;EACD4T,EAAAA,OAAO,GAAG;EACR,UAAM4gB,IAAI,GAAG,KAAKjZ,EAAlB;EACA,SAAKA,EAAL,GAAU,KAAKvb,EAAf;EACA,SAAKA,EAAL,GAAUw0B,IAAV;EACD;;EACDC,EAAAA,UAAU,CAACx7B,KAAD,EAAQ;EAChB,WAAO,KAAKsiB,EAAL,CAAQ3jB,MAAR,CAAeqB,KAAK,CAACsiB,EAArB,KAA4B,KAAKvb,EAAL,CAAQpI,MAAR,CAAeqB,KAAK,CAAC+G,EAArB,CAA5B,IAAwD,KAAKub,EAAL,CAAQ3jB,MAAR,CAAeqB,KAAK,CAAC+G,EAArB,KAA4B,KAAKA,EAAL,CAAQpI,MAAR,CAAeqB,KAAK,CAACsiB,EAArB,CAA3F;EACD;;EACDmZ,EAAAA,gBAAgB,CAACpjB,IAAD,EAAO;EACrB,UAAMigB,KAAK,GAAGnjB,YAAY,CAAC7M,YAAb,CAA0B,KAAKga,EAA/B,EAAmC,KAAKvb,EAAxC,EAA4CsR,IAAI,CAACiK,EAAjD,EAAqDjK,IAAI,CAACtR,EAA1D,CAAd;EACA,WAAOuxB,KAAP;EACD;;EACDoD,EAAAA,IAAI,GAAG;EACL,WAAOjhC,IAAI,CAACiN,GAAL,CAAS,KAAK4a,EAAL,CAAQllB,CAAjB,EAAoB,KAAK2J,EAAL,CAAQ3J,CAA5B,CAAP;EACD;;EACDu+B,EAAAA,gBAAgB,CAACC,qBAAD,EAAwBC,cAAxB,EAAwC;EACtD,UAAMC,IAAI,GAAG,KAAKxZ,EAAL,CAAQnlB,CAAR,GAAYy+B,qBAAqB,IAAI,KAAK70B,EAAL,CAAQ5J,CAAR,GAAY,KAAKmlB,EAAL,CAAQnlB,CAAxB,CAA9C;EACA,UAAM4+B,IAAI,GAAG,KAAKzZ,EAAL,CAAQllB,CAAR,GAAYw+B,qBAAqB,IAAI,KAAK70B,EAAL,CAAQ3J,CAAR,GAAY,KAAKklB,EAAL,CAAQllB,CAAxB,CAA9C;EACA,UAAM6D,EAAE,GAAG,KAAK8F,EAAL,CAAQ5J,CAAR,GAAY,KAAKmlB,EAAL,CAAQnlB,CAA/B;EACA,UAAM+D,EAAE,GAAG,KAAK6F,EAAL,CAAQ3J,CAAR,GAAY,KAAKklB,EAAL,CAAQllB,CAA/B;EACA,UAAMiH,GAAG,GAAG5J,IAAI,CAAC2G,IAAL,CAAUH,EAAE,GAAGA,EAAL,GAAUC,EAAE,GAAGA,EAAzB,CAAZ;EACA,QAAI86B,EAAE,GAAG,GAAT;EACA,QAAIC,EAAE,GAAG,GAAT;;EACA,QAAIJ,cAAc,KAAK,GAAvB,EAA4B;EAC1B,UAAIx3B,GAAG,IAAI,GAAX,EAAgB,MAAM,IAAIoN,qBAAJ,CAA0B,qDAA1B,CAAN;EAChBuqB,MAAAA,EAAE,GAAGH,cAAc,GAAG56B,EAAjB,GAAsBoD,GAA3B;EACA43B,MAAAA,EAAE,GAAGJ,cAAc,GAAG36B,EAAjB,GAAsBmD,GAA3B;EACD;;EACD,UAAM63B,OAAO,GAAGJ,IAAI,GAAGG,EAAvB;EACA,UAAME,OAAO,GAAGJ,IAAI,GAAGC,EAAvB;EACA,UAAMp7B,KAAK,GAAG,IAAI1B,UAAJ,CAAeg9B,OAAf,EAAwBC,OAAxB,CAAd;EACA,WAAOv7B,KAAP;EACD;;EACDw7B,EAAAA,cAAc,GAAG;EACf,QAAIh+B,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMq7B,EAAE,GAAGt7B,SAAS,CAAC,CAAD,CAApB;EACA,WAAKg+B,cAAL,CAAoB1C,EAAE,CAACpX,EAAvB,EAA2BoX,EAAE,CAAC3yB,EAA9B;EACD,KAHD,MAGO,IAAI3I,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMikB,EAAE,GAAGlkB,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyB2I,EAAE,GAAG3I,SAAS,CAAC,CAAD,CAAvC;EACA,WAAKkkB,EAAL,CAAQnlB,CAAR,GAAYmlB,EAAE,CAACnlB,CAAf;EACA,WAAKmlB,EAAL,CAAQllB,CAAR,GAAYklB,EAAE,CAACllB,CAAf;EACA,WAAK2J,EAAL,CAAQ5J,CAAR,GAAY4J,EAAE,CAAC5J,CAAf;EACA,WAAK4J,EAAL,CAAQ3J,CAAR,GAAY2J,EAAE,CAAC3J,CAAf;EACD;EACF;;EACDi/B,EAAAA,eAAe,CAACC,OAAD,EAAU;EACvB,QAAIC,OAAO,GAAG,KAAKnC,gBAAL,CAAsBkC,OAAtB,CAAd;EACA,QAAIC,OAAO,GAAG,GAAd,EAAmBA,OAAO,GAAG,GAAV,CAAnB,KAAuC,IAAIA,OAAO,GAAG,GAAV,IAAiB5gC,MAAM,CAACE,KAAP,CAAa0gC,OAAb,CAArB,EAA4CA,OAAO,GAAG,GAAV;EACnF,WAAOA,OAAP;EACD;;EACDrhC,EAAAA,QAAQ,GAAG;EACT,WAAO,iBAAiB,KAAKonB,EAAL,CAAQnlB,CAAzB,GAA6B,GAA7B,GAAmC,KAAKmlB,EAAL,CAAQllB,CAA3C,GAA+C,IAA/C,GAAsD,KAAK2J,EAAL,CAAQ5J,CAA9D,GAAkE,GAAlE,GAAwE,KAAK4J,EAAL,CAAQ3J,CAAhF,GAAoF,GAA3F;EACD;;EACDo/B,EAAAA,YAAY,GAAG;EACb,WAAO,KAAKla,EAAL,CAAQllB,CAAR,KAAc,KAAK2J,EAAL,CAAQ3J,CAA7B;EACD;;EACDq/B,EAAAA,OAAO,CAAC51B,CAAD,EAAI;EACT,UAAM6Q,CAAC,GAAG,KAAK3Q,EAAL,CAAQ1F,IAAR,KAAiB,KAAKihB,EAAL,CAAQjhB,IAAR,EAA3B;EACA,UAAMsW,CAAC,GAAG,KAAK2K,EAAL,CAAQ5hB,IAAR,KAAiB,KAAKqG,EAAL,CAAQrG,IAAR,EAA3B;EACA,UAAMyO,CAAC,GAAG,KAAKmT,EAAL,CAAQjhB,IAAR,MAAkB,KAAK0F,EAAL,CAAQrG,IAAR,KAAiB,KAAK4hB,EAAL,CAAQ5hB,IAAR,EAAnC,IAAqD,KAAK4hB,EAAL,CAAQ5hB,IAAR,MAAkB,KAAKqG,EAAL,CAAQ1F,IAAR,KAAiB,KAAKihB,EAAL,CAAQjhB,IAAR,EAAnC,CAA/D;EACA,UAAMq7B,QAAQ,GAAGhlB,CAAC,GAAGA,CAAJ,GAAQC,CAAC,GAAGA,CAA7B;EACA,UAAMglB,OAAO,GAAGjlB,CAAC,GAAGA,CAAJ,GAAQC,CAAC,GAAGA,CAA5B;EACA,UAAMxa,CAAC,GAAG0J,CAAC,CAACnG,IAAF,EAAV;EACA,UAAMtD,CAAC,GAAGyJ,CAAC,CAACxF,IAAF,EAAV;EACA,UAAMu7B,EAAE,GAAG,CAAC,CAACD,OAAD,GAAWx/B,CAAX,GAAe,IAAIua,CAAJ,GAAQC,CAAR,GAAYva,CAA3B,GAA+B,IAAIsa,CAAJ,GAAQvI,CAAxC,IAA6CutB,QAAxD;EACA,UAAMG,EAAE,GAAG,CAACF,OAAO,GAAGv/B,CAAV,GAAc,IAAIsa,CAAJ,GAAQC,CAAR,GAAYxa,CAA1B,GAA8B,IAAIwa,CAAJ,GAAQxI,CAAvC,IAA4CutB,QAAvD;EACA,WAAO,IAAIx9B,UAAJ,CAAe09B,EAAf,EAAmBC,EAAnB,CAAP;EACD;;EACDt7B,EAAAA,QAAQ,GAAG;EACT,QAAInD,SAAS,CAAC,CAAD,CAAT,YAAwBq7B,WAA5B,EAAyC;EACvC,YAAMC,EAAE,GAAGt7B,SAAS,CAAC,CAAD,CAApB;EACA,aAAOoZ,QAAQ,CAACC,gBAAT,CAA0B,KAAK6K,EAA/B,EAAmC,KAAKvb,EAAxC,EAA4C2yB,EAAE,CAACpX,EAA/C,EAAmDoX,EAAE,CAAC3yB,EAAtD,CAAP;EACD,KAHD,MAGO,IAAI3I,SAAS,CAAC,CAAD,CAAT,YAAwBc,UAA5B,EAAwC;EAC7C,YAAM2H,CAAC,GAAGzI,SAAS,CAAC,CAAD,CAAnB;EACA,aAAOoZ,QAAQ,CAACK,cAAT,CAAwBhR,CAAxB,EAA2B,KAAKyb,EAAhC,EAAoC,KAAKvb,EAAzC,CAAP;EACD;EACF;;EACD+1B,EAAAA,UAAU,CAAClB,qBAAD,EAAwB;EAChC,UAAMh7B,KAAK,GAAG,IAAI1B,UAAJ,EAAd;EACA0B,IAAAA,KAAK,CAACzD,CAAN,GAAU,KAAKmlB,EAAL,CAAQnlB,CAAR,GAAYy+B,qBAAqB,IAAI,KAAK70B,EAAL,CAAQ5J,CAAR,GAAY,KAAKmlB,EAAL,CAAQnlB,CAAxB,CAA3C;EACAyD,IAAAA,KAAK,CAACxD,CAAN,GAAU,KAAKklB,EAAL,CAAQllB,CAAR,GAAYw+B,qBAAqB,IAAI,KAAK70B,EAAL,CAAQ3J,CAAR,GAAY,KAAKklB,EAAL,CAAQllB,CAAxB,CAA3C;EACA,WAAOwD,KAAP;EACD;;EACDrB,EAAAA,QAAQ,GAAG;EACT,QAAIw9B,KAAK,GAAGphC,MAAM,CAACe,gBAAP,CAAwB,KAAK4lB,EAAL,CAAQnlB,CAAhC,CAAZ;EACA4/B,IAAAA,KAAK,IAAIphC,MAAM,CAACe,gBAAP,CAAwB,KAAK4lB,EAAL,CAAQllB,CAAhC,IAAqC,EAA9C;EACA,UAAM4/B,KAAK,GAAGviC,IAAI,CAAC6S,KAAL,CAAWyvB,KAAX,IAAoBtiC,IAAI,CAAC6S,KAAL,CAAWyvB,KAAK,IAAI,EAApB,CAAlC;EACA,QAAIE,KAAK,GAAGthC,MAAM,CAACe,gBAAP,CAAwB,KAAKqK,EAAL,CAAQ5J,CAAhC,CAAZ;EACA8/B,IAAAA,KAAK,IAAIthC,MAAM,CAACe,gBAAP,CAAwB,KAAKqK,EAAL,CAAQ3J,CAAhC,IAAqC,EAA9C;EACA,UAAM8/B,KAAK,GAAGziC,IAAI,CAAC6S,KAAL,CAAW2vB,KAAX,IAAoBxiC,IAAI,CAAC6S,KAAL,CAAW2vB,KAAK,IAAI,EAApB,CAAlC;EACA,WAAOD,KAAK,GAAGE,KAAf;EACD;;EACD,MAAIz7B,WAAJ,GAAkB;EAChB,WAAO,CAAC7D,UAAD,EAAaG,YAAb,CAAP;EACD;;EAvQ8B;;ECPlB,MAAMo/B,QAAN,CAAe;EAC5B,SAAOC,gBAAP,CAAwBC,aAAxB,EAAuC;EACrC,YAAQA,aAAR;EACA,WAAKF,QAAQ,CAACG,QAAd;EACE,eAAO,GAAP;;EACF,WAAKH,QAAQ,CAACI,QAAd;EACE,eAAO,GAAP;;EACF,WAAKJ,QAAQ,CAACK,QAAd;EACE,eAAO,GAAP;;EACF,WAAKL,QAAQ,CAACM,IAAd;EACE,eAAO,GAAP;EARF;;EAUA,UAAM,IAAItiC,wBAAJ,CAA6B,6BAA6BkiC,aAA1D,CAAN;EACD;;EAb2B;EAe9BF,QAAQ,CAACK,QAAT,GAAoB,CAApB;EACAL,QAAQ,CAACI,QAAT,GAAoB,CAApB;EACAJ,QAAQ,CAACG,QAAT,GAAoB,CAApB;EACAH,QAAQ,CAACM,IAAT,GAAgB,CAAC,CAAjB;;ECde,MAAMC,kBAAN,CAAyB;EACtC7iC,EAAAA,WAAW,GAAG;EACZ6iC,IAAAA,kBAAkB,CAACx/B,YAAnB,CAAgCC,KAAhC,CAAsC,IAAtC,EAA4CC,SAA5C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKy/B,OAAL,GAAe,IAAf;;EACA,QAAIv/B,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,WAAKs/B,OAAL,GAAer4B,KAAK,CAAC,CAAD,CAAL,CAASC,IAAT,GAAgB6kB,GAAhB,CAAoB,MAAM9kB,KAAK,CAAC,CAAD,CAA/B,CAAf;EACA,WAAKs4B,MAAL,CAAYre,SAAS,CAACG,KAAtB;EACD,KAHD,MAGO,IAAIthB,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,UAAI,OAAOD,SAAS,CAAC,CAAD,CAAhB,KAAwB,QAA5B,EAAsC;EACpC,cAAMy/B,QAAQ,GAAGz/B,SAAS,CAAC,CAAD,CAA1B;EACAs/B,QAAAA,kBAAkB,CAACx/B,YAAnB,CAAgCI,IAAhC,CAAqC,IAArC;EACA,aAAKgF,GAAL,CAASu6B,QAAT;EACD,OAJD,MAIO,IAAIz/B,SAAS,CAAC,CAAD,CAAT,YAAwBs/B,kBAA5B,EAAgD;EACrD,cAAM19B,KAAK,GAAG5B,SAAS,CAAC,CAAD,CAAvB;EACAs/B,QAAAA,kBAAkB,CAACx/B,YAAnB,CAAgCI,IAAhC,CAAqC,IAArC;EACA,aAAKq/B,OAAL,CAAaR,QAAQ,CAACK,QAAtB,EAAgCL,QAAQ,CAACK,QAAzC,IAAqDx9B,KAAK,CAAC29B,OAAN,CAAcR,QAAQ,CAACK,QAAvB,EAAiCL,QAAQ,CAACK,QAA1C,CAArD;EACA,aAAKG,OAAL,CAAaR,QAAQ,CAACK,QAAtB,EAAgCL,QAAQ,CAACI,QAAzC,IAAqDv9B,KAAK,CAAC29B,OAAN,CAAcR,QAAQ,CAACK,QAAvB,EAAiCL,QAAQ,CAACI,QAA1C,CAArD;EACA,aAAKI,OAAL,CAAaR,QAAQ,CAACK,QAAtB,EAAgCL,QAAQ,CAACG,QAAzC,IAAqDt9B,KAAK,CAAC29B,OAAN,CAAcR,QAAQ,CAACK,QAAvB,EAAiCL,QAAQ,CAACG,QAA1C,CAArD;EACA,aAAKK,OAAL,CAAaR,QAAQ,CAACI,QAAtB,EAAgCJ,QAAQ,CAACK,QAAzC,IAAqDx9B,KAAK,CAAC29B,OAAN,CAAcR,QAAQ,CAACI,QAAvB,EAAiCJ,QAAQ,CAACK,QAA1C,CAArD;EACA,aAAKG,OAAL,CAAaR,QAAQ,CAACI,QAAtB,EAAgCJ,QAAQ,CAACI,QAAzC,IAAqDv9B,KAAK,CAAC29B,OAAN,CAAcR,QAAQ,CAACI,QAAvB,EAAiCJ,QAAQ,CAACI,QAA1C,CAArD;EACA,aAAKI,OAAL,CAAaR,QAAQ,CAACI,QAAtB,EAAgCJ,QAAQ,CAACG,QAAzC,IAAqDt9B,KAAK,CAAC29B,OAAN,CAAcR,QAAQ,CAACI,QAAvB,EAAiCJ,QAAQ,CAACG,QAA1C,CAArD;EACA,aAAKK,OAAL,CAAaR,QAAQ,CAACG,QAAtB,EAAgCH,QAAQ,CAACK,QAAzC,IAAqDx9B,KAAK,CAAC29B,OAAN,CAAcR,QAAQ,CAACG,QAAvB,EAAiCH,QAAQ,CAACK,QAA1C,CAArD;EACA,aAAKG,OAAL,CAAaR,QAAQ,CAACG,QAAtB,EAAgCH,QAAQ,CAACI,QAAzC,IAAqDv9B,KAAK,CAAC29B,OAAN,CAAcR,QAAQ,CAACG,QAAvB,EAAiCH,QAAQ,CAACI,QAA1C,CAArD;EACA,aAAKI,OAAL,CAAaR,QAAQ,CAACG,QAAtB,EAAgCH,QAAQ,CAACG,QAAzC,IAAqDt9B,KAAK,CAAC29B,OAAN,CAAcR,QAAQ,CAACG,QAAvB,EAAiCH,QAAQ,CAACG,QAA1C,CAArD;EACD;EACF;EACF;;EACD,SAAOQ,OAAP,GAAiB;EACf,QAAI/hC,MAAM,CAAC4J,SAAP,CAAiBvH,SAAS,CAAC,CAAD,CAA1B,KAAkC,OAAOA,SAAS,CAAC,CAAD,CAAhB,KAAwB,QAA9D,EAAwE;EACtE,YAAM2/B,oBAAoB,GAAG3/B,SAAS,CAAC,CAAD,CAAtC;EAAA,YAA2C4/B,uBAAuB,GAAG5/B,SAAS,CAAC,CAAD,CAA9E;EACA,UAAI4/B,uBAAuB,KAAKze,SAAS,CAACQ,YAA1C,EACE,OAAO,IAAP;EAEF,UAAIie,uBAAuB,KAAKze,SAAS,CAACM,QAAtC,KAAmDke,oBAAoB,IAAI,CAAxB,IAA6BA,oBAAoB,KAAKxe,SAAS,CAACK,IAAnH,CAAJ,EACE,OAAO,IAAP;EAEF,UAAIoe,uBAAuB,KAAKze,SAAS,CAACI,SAAtC,IAAmDoe,oBAAoB,KAAKxe,SAAS,CAACG,KAA1F,EACE,OAAO,IAAP;EAEF,UAAIse,uBAAuB,KAAKze,SAAS,CAACU,KAAtC,IAA+C8d,oBAAoB,KAAKxe,SAAS,CAACS,CAAtF,EACE,OAAO,IAAP;EAEF,UAAIge,uBAAuB,KAAKze,SAAS,CAACY,KAAtC,IAA+C4d,oBAAoB,KAAKxe,SAAS,CAACW,CAAtF,EACE,OAAO,IAAP;EAEF,UAAI8d,uBAAuB,KAAKze,SAAS,CAACa,KAAtC,IAA+C2d,oBAAoB,KAAKxe,SAAS,CAAC7H,CAAtF,EACE,OAAO,IAAP;EAEF,aAAO,KAAP;EACD,KArBD,MAqBO,IAAI,OAAOtZ,SAAS,CAAC,CAAD,CAAhB,KAAwB,QAAxB,IAAoC,OAAOA,SAAS,CAAC,CAAD,CAAhB,KAAwB,QAAhE,EAA0E;EAC/E,YAAM6/B,sBAAsB,GAAG7/B,SAAS,CAAC,CAAD,CAAxC;EAAA,YAA6C8/B,wBAAwB,GAAG9/B,SAAS,CAAC,CAAD,CAAjF;EACA,YAAM8B,CAAC,GAAG,IAAIw9B,kBAAJ,CAAuBO,sBAAvB,CAAV;EACA,aAAO/9B,CAAC,CAAC49B,OAAF,CAAUI,wBAAV,CAAP;EACD;EACF;;EACD,SAAOz/B,MAAP,CAAcs/B,oBAAd,EAAoC;EAClC,QAAIA,oBAAoB,IAAI,CAAxB,IAA6BA,oBAAoB,KAAKxe,SAAS,CAACK,IAApE,EACE,OAAO,IAAP;EAEF,WAAO,KAAP;EACD;;EACDue,EAAAA,YAAY,GAAG;EACb,WAAO,CAAC,KAAKC,UAAL,EAAR;EACD;;EACDC,EAAAA,QAAQ,GAAG;EACT,UAAMC,gBAAgB,GAAGZ,kBAAkB,CAACj/B,MAAnB,CAA0B,KAAKk/B,OAAL,CAAaR,QAAQ,CAACK,QAAtB,EAAgCL,QAAQ,CAACK,QAAzC,CAA1B,KAAiFE,kBAAkB,CAACj/B,MAAnB,CAA0B,KAAKk/B,OAAL,CAAaR,QAAQ,CAACK,QAAtB,EAAgCL,QAAQ,CAACI,QAAzC,CAA1B,CAAjF,IAAkKG,kBAAkB,CAACj/B,MAAnB,CAA0B,KAAKk/B,OAAL,CAAaR,QAAQ,CAACI,QAAtB,EAAgCJ,QAAQ,CAACK,QAAzC,CAA1B,CAAlK,IAAmPE,kBAAkB,CAACj/B,MAAnB,CAA0B,KAAKk/B,OAAL,CAAaR,QAAQ,CAACI,QAAtB,EAAgCJ,QAAQ,CAACI,QAAzC,CAA1B,CAA5Q;EACA,WAAOe,gBAAgB,IAAI,KAAKX,OAAL,CAAaR,QAAQ,CAACG,QAAtB,EAAgCH,QAAQ,CAACK,QAAzC,MAAuDje,SAAS,CAACG,KAArF,IAA8F,KAAKie,OAAL,CAAaR,QAAQ,CAACG,QAAtB,EAAgCH,QAAQ,CAACI,QAAzC,MAAuDhe,SAAS,CAACG,KAAtK;EACD;;EACD6e,EAAAA,WAAW,GAAG;EACZ,UAAMD,gBAAgB,GAAGZ,kBAAkB,CAACj/B,MAAnB,CAA0B,KAAKk/B,OAAL,CAAaR,QAAQ,CAACK,QAAtB,EAAgCL,QAAQ,CAACK,QAAzC,CAA1B,KAAiFE,kBAAkB,CAACj/B,MAAnB,CAA0B,KAAKk/B,OAAL,CAAaR,QAAQ,CAACK,QAAtB,EAAgCL,QAAQ,CAACI,QAAzC,CAA1B,CAAjF,IAAkKG,kBAAkB,CAACj/B,MAAnB,CAA0B,KAAKk/B,OAAL,CAAaR,QAAQ,CAACI,QAAtB,EAAgCJ,QAAQ,CAACK,QAAzC,CAA1B,CAAlK,IAAmPE,kBAAkB,CAACj/B,MAAnB,CAA0B,KAAKk/B,OAAL,CAAaR,QAAQ,CAACI,QAAtB,EAAgCJ,QAAQ,CAACI,QAAzC,CAA1B,CAA5Q;EACA,WAAOe,gBAAgB,IAAI,KAAKX,OAAL,CAAaR,QAAQ,CAACK,QAAtB,EAAgCL,QAAQ,CAACG,QAAzC,MAAuD/d,SAAS,CAACG,KAArF,IAA8F,KAAKie,OAAL,CAAaR,QAAQ,CAACI,QAAtB,EAAgCJ,QAAQ,CAACG,QAAzC,MAAuD/d,SAAS,CAACG,KAAtK;EACD;;EACDpc,EAAAA,GAAG,GAAG;EACJ,QAAIlF,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMmgC,gBAAgB,GAAGpgC,SAAS,CAAC,CAAD,CAAlC;;EACA,WAAK,IAAI5C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGgjC,gBAAgB,CAACngC,MAArC,EAA6C7C,CAAC,EAA9C,EAAkD;EAChD,cAAMijC,GAAG,GAAGhkC,IAAI,CAAC6S,KAAL,CAAW9R,CAAC,GAAG,CAAf,CAAZ;EACA,cAAMkjC,GAAG,GAAGljC,CAAC,GAAG,CAAhB;EACA,aAAKmiC,OAAL,CAAac,GAAb,EAAkBC,GAAlB,IAAyBnf,SAAS,CAACc,gBAAV,CAA2Bme,gBAAgB,CAAC9yB,MAAjB,CAAwBlQ,CAAxB,CAA3B,CAAzB;EACD;EACF,KAPD,MAOO,IAAI4C,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMogC,GAAG,GAAGrgC,SAAS,CAAC,CAAD,CAArB;EAAA,YAA0BugC,MAAM,GAAGvgC,SAAS,CAAC,CAAD,CAA5C;EAAA,YAAiDqhB,cAAc,GAAGrhB,SAAS,CAAC,CAAD,CAA3E;EACA,WAAKu/B,OAAL,CAAac,GAAb,EAAkBE,MAAlB,IAA4Blf,cAA5B;EACD;EACF;;EACDmf,EAAAA,UAAU,GAAG;EACX,WAAOlB,kBAAkB,CAACj/B,MAAnB,CAA0B,KAAKk/B,OAAL,CAAaR,QAAQ,CAACK,QAAtB,EAAgCL,QAAQ,CAACK,QAAzC,CAA1B,KAAiF,KAAKG,OAAL,CAAaR,QAAQ,CAACG,QAAtB,EAAgCH,QAAQ,CAACK,QAAzC,MAAuDje,SAAS,CAACG,KAAlJ,IAA2J,KAAKie,OAAL,CAAaR,QAAQ,CAACG,QAAtB,EAAgCH,QAAQ,CAACI,QAAzC,MAAuDhe,SAAS,CAACG,KAAnO;EACD;;EACDmf,EAAAA,UAAU,GAAG;EACX,QAAIzgC,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMygC,uBAAuB,GAAG1gC,SAAS,CAAC,CAAD,CAAzC;;EACA,WAAK,IAAI5C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsjC,uBAAuB,CAACzgC,MAA5C,EAAoD7C,CAAC,EAArD,EAAyD;EACvD,cAAMijC,GAAG,GAAGhkC,IAAI,CAAC6S,KAAL,CAAW9R,CAAC,GAAG,CAAf,CAAZ;EACA,cAAMkjC,GAAG,GAAGljC,CAAC,GAAG,CAAhB;EACA,aAAKqjC,UAAL,CAAgBJ,GAAhB,EAAqBC,GAArB,EAA0Bnf,SAAS,CAACc,gBAAV,CAA2Bye,uBAAuB,CAACpzB,MAAxB,CAA+BlQ,CAA/B,CAA3B,CAA1B;EACD;EACF,KAPD,MAOO,IAAI4C,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMogC,GAAG,GAAGrgC,SAAS,CAAC,CAAD,CAArB;EAAA,YAA0BugC,MAAM,GAAGvgC,SAAS,CAAC,CAAD,CAA5C;EAAA,YAAiD2gC,qBAAqB,GAAG3gC,SAAS,CAAC,CAAD,CAAlF;EACA,UAAI,KAAKu/B,OAAL,CAAac,GAAb,EAAkBE,MAAlB,IAA4BI,qBAAhC,EACE,KAAKpB,OAAL,CAAac,GAAb,EAAkBE,MAAlB,IAA4BI,qBAA5B;EAEH;EACF;;EACDC,EAAAA,iBAAiB,CAACP,GAAD,EAAME,MAAN,EAAcI,qBAAd,EAAqC;EACpD,QAAIN,GAAG,IAAI,CAAP,IAAYE,MAAM,IAAI,CAA1B,EACE,KAAKE,UAAL,CAAgBJ,GAAhB,EAAqBE,MAArB,EAA6BI,qBAA7B;EAEH;;EACDE,EAAAA,QAAQ,GAAG;EACT,WAAOvB,kBAAkB,CAACj/B,MAAnB,CAA0B,KAAKk/B,OAAL,CAAaR,QAAQ,CAACK,QAAtB,EAAgCL,QAAQ,CAACK,QAAzC,CAA1B,KAAiF,KAAKG,OAAL,CAAaR,QAAQ,CAACK,QAAtB,EAAgCL,QAAQ,CAACG,QAAzC,MAAuD/d,SAAS,CAACG,KAAlJ,IAA2J,KAAKie,OAAL,CAAaR,QAAQ,CAACI,QAAtB,EAAgCJ,QAAQ,CAACG,QAAzC,MAAuD/d,SAAS,CAACG,KAAnO;EACD;;EACDwf,EAAAA,SAAS,CAACC,oBAAD,EAAuBC,oBAAvB,EAA6C;EACpD,QAAID,oBAAoB,GAAGC,oBAA3B,EACE,OAAO,KAAKF,SAAL,CAAeE,oBAAf,EAAqCD,oBAArC,CAAP;EAEF,QAAIA,oBAAoB,KAAK5f,SAAS,CAAC7H,CAAnC,IAAwC0nB,oBAAoB,KAAK7f,SAAS,CAAC7H,CAA3E,IAAgFynB,oBAAoB,KAAK5f,SAAS,CAACW,CAAnC,IAAwCkf,oBAAoB,KAAK7f,SAAS,CAACW,CAA3J,IAAgKif,oBAAoB,KAAK5f,SAAS,CAACW,CAAnC,IAAwCkf,oBAAoB,KAAK7f,SAAS,CAAC7H,CAA3O,IAAgPynB,oBAAoB,KAAK5f,SAAS,CAACS,CAAnC,IAAwCof,oBAAoB,KAAK7f,SAAS,CAAC7H,CAA3T,IAAgUynB,oBAAoB,KAAK5f,SAAS,CAACS,CAAnC,IAAwCof,oBAAoB,KAAK7f,SAAS,CAACW,CAA/Y,EACE,OAAO,KAAKyd,OAAL,CAAaR,QAAQ,CAACK,QAAtB,EAAgCL,QAAQ,CAACK,QAAzC,MAAuDje,SAAS,CAACG,KAAjE,KAA2Ege,kBAAkB,CAACj/B,MAAnB,CAA0B,KAAKk/B,OAAL,CAAaR,QAAQ,CAACK,QAAtB,EAAgCL,QAAQ,CAACI,QAAzC,CAA1B,KAAiFG,kBAAkB,CAACj/B,MAAnB,CAA0B,KAAKk/B,OAAL,CAAaR,QAAQ,CAACI,QAAtB,EAAgCJ,QAAQ,CAACK,QAAzC,CAA1B,CAAjF,IAAkKE,kBAAkB,CAACj/B,MAAnB,CAA0B,KAAKk/B,OAAL,CAAaR,QAAQ,CAACI,QAAtB,EAAgCJ,QAAQ,CAACI,QAAzC,CAA1B,CAA7O,CAAP;EAEF,WAAO,KAAP;EACD;;EACD8B,EAAAA,UAAU,CAACF,oBAAD,EAAuBC,oBAAvB,EAA6C;EACrD,QAAID,oBAAoB,KAAK5f,SAAS,CAACS,CAAnC,IAAwCof,oBAAoB,KAAK7f,SAAS,CAACS,CAA3E,IAAgFmf,oBAAoB,KAAK5f,SAAS,CAAC7H,CAAnC,IAAwC0nB,oBAAoB,KAAK7f,SAAS,CAAC7H,CAA/J,EACE,OAAOgmB,kBAAkB,CAACj/B,MAAnB,CAA0B,KAAKk/B,OAAL,CAAaR,QAAQ,CAACK,QAAtB,EAAgCL,QAAQ,CAACK,QAAzC,CAA1B,KAAiFE,kBAAkB,CAACj/B,MAAnB,CAA0B,KAAKk/B,OAAL,CAAaR,QAAQ,CAACK,QAAtB,EAAgCL,QAAQ,CAACG,QAAzC,CAA1B,CAAjF,IAAkKI,kBAAkB,CAACj/B,MAAnB,CAA0B,KAAKk/B,OAAL,CAAaR,QAAQ,CAACG,QAAtB,EAAgCH,QAAQ,CAACK,QAAzC,CAA1B,CAAzK;EAEF,QAAI2B,oBAAoB,KAAK5f,SAAS,CAACW,CAAnC,IAAwCkf,oBAAoB,KAAK7f,SAAS,CAACW,CAA/E,EACE,OAAO,KAAKyd,OAAL,CAAaR,QAAQ,CAACK,QAAtB,EAAgCL,QAAQ,CAACK,QAAzC,MAAuD,CAAvD,IAA4DE,kBAAkB,CAACj/B,MAAnB,CAA0B,KAAKk/B,OAAL,CAAaR,QAAQ,CAACK,QAAtB,EAAgCL,QAAQ,CAACG,QAAzC,CAA1B,CAA5D,IAA6II,kBAAkB,CAACj/B,MAAnB,CAA0B,KAAKk/B,OAAL,CAAaR,QAAQ,CAACG,QAAtB,EAAgCH,QAAQ,CAACK,QAAzC,CAA1B,CAApJ;EAEF,WAAO,KAAP;EACD;;EACD8B,EAAAA,QAAQ,CAACH,oBAAD,EAAuBC,oBAAvB,EAA6C;EACnD,QAAID,oBAAoB,KAAKC,oBAA7B,EACE,OAAO,KAAP;EAEF,WAAO1B,kBAAkB,CAACj/B,MAAnB,CAA0B,KAAKk/B,OAAL,CAAaR,QAAQ,CAACK,QAAtB,EAAgCL,QAAQ,CAACK,QAAzC,CAA1B,KAAiF,KAAKG,OAAL,CAAaR,QAAQ,CAACK,QAAtB,EAAgCL,QAAQ,CAACG,QAAzC,MAAuD/d,SAAS,CAACG,KAAlJ,IAA2J,KAAKie,OAAL,CAAaR,QAAQ,CAACI,QAAtB,EAAgCJ,QAAQ,CAACG,QAAzC,MAAuD/d,SAAS,CAACG,KAA5N,IAAqO,KAAKie,OAAL,CAAaR,QAAQ,CAACG,QAAtB,EAAgCH,QAAQ,CAACK,QAAzC,MAAuDje,SAAS,CAACG,KAAtS,IAA+S,KAAKie,OAAL,CAAaR,QAAQ,CAACG,QAAtB,EAAgCH,QAAQ,CAACI,QAAzC,MAAuDhe,SAAS,CAACG,KAAvX;EACD;;EACDxkB,EAAAA,QAAQ,GAAG;EACT,UAAMqkC,OAAO,GAAG,IAAIxW,aAAJ,CAAkB,WAAlB,CAAhB;;EACA,SAAK,IAAIyW,EAAE,GAAG,CAAd,EAAiBA,EAAE,GAAG,CAAtB,EAAyBA,EAAE,EAA3B,EACE,KAAK,IAAIC,EAAE,GAAG,CAAd,EAAiBA,EAAE,GAAG,CAAtB,EAAyBA,EAAE,EAA3B,EACEF,OAAO,CAACp1B,SAAR,CAAkB,IAAIq1B,EAAJ,GAASC,EAA3B,EAA+BlgB,SAAS,CAACC,iBAAV,CAA4B,KAAKme,OAAL,CAAa6B,EAAb,EAAiBC,EAAjB,CAA5B,CAA/B;;EAGJ,WAAOF,OAAO,CAACrkC,QAAR,EAAP;EACD;;EACD0iC,EAAAA,MAAM,CAACne,cAAD,EAAiB;EACrB,SAAK,IAAI+f,EAAE,GAAG,CAAd,EAAiBA,EAAE,GAAG,CAAtB,EAAyBA,EAAE,EAA3B,EACE,KAAK,IAAIC,EAAE,GAAG,CAAd,EAAiBA,EAAE,GAAG,CAAtB,EAAyBA,EAAE,EAA3B,EACE,KAAK9B,OAAL,CAAa6B,EAAb,EAAiBC,EAAjB,IAAuBhgB,cAAvB;EAGL;;EACDpc,EAAAA,GAAG,CAACo7B,GAAD,EAAME,MAAN,EAAc;EACf,WAAO,KAAKhB,OAAL,CAAac,GAAb,EAAkBE,MAAlB,CAAP;EACD;;EACDe,EAAAA,SAAS,GAAG;EACV,QAAInE,IAAI,GAAG,KAAKoC,OAAL,CAAa,CAAb,EAAgB,CAAhB,CAAX;EACA,SAAKA,OAAL,CAAa,CAAb,EAAgB,CAAhB,IAAqB,KAAKA,OAAL,CAAa,CAAb,EAAgB,CAAhB,CAArB;EACA,SAAKA,OAAL,CAAa,CAAb,EAAgB,CAAhB,IAAqBpC,IAArB;EACAA,IAAAA,IAAI,GAAG,KAAKoC,OAAL,CAAa,CAAb,EAAgB,CAAhB,CAAP;EACA,SAAKA,OAAL,CAAa,CAAb,EAAgB,CAAhB,IAAqB,KAAKA,OAAL,CAAa,CAAb,EAAgB,CAAhB,CAArB;EACA,SAAKA,OAAL,CAAa,CAAb,EAAgB,CAAhB,IAAqBpC,IAArB;EACAA,IAAAA,IAAI,GAAG,KAAKoC,OAAL,CAAa,CAAb,EAAgB,CAAhB,CAAP;EACA,SAAKA,OAAL,CAAa,CAAb,EAAgB,CAAhB,IAAqB,KAAKA,OAAL,CAAa,CAAb,EAAgB,CAAhB,CAArB;EACA,SAAKA,OAAL,CAAa,CAAb,EAAgB,CAAhB,IAAqBpC,IAArB;EACA,WAAO,IAAP;EACD;;EACDuC,EAAAA,OAAO,CAACI,wBAAD,EAA2B;EAChC,QAAIA,wBAAwB,CAAC7/B,MAAzB,KAAoC,CAAxC,EACE,MAAM,IAAIlD,wBAAJ,CAA6B,yBAAyB+iC,wBAAtD,CAAN;;EAEF,SAAK,IAAIsB,EAAE,GAAG,CAAd,EAAiBA,EAAE,GAAG,CAAtB,EAAyBA,EAAE,EAA3B,EACE,KAAK,IAAIC,EAAE,GAAG,CAAd,EAAiBA,EAAE,GAAG,CAAtB,EAAyBA,EAAE,EAA3B,EACE,IAAI,CAAC/B,kBAAkB,CAACI,OAAnB,CAA2B,KAAKH,OAAL,CAAa6B,EAAb,EAAiBC,EAAjB,CAA3B,EAAiDvB,wBAAwB,CAACxyB,MAAzB,CAAgC,IAAI8zB,EAAJ,GAASC,EAAzC,CAAjD,CAAL,EACE,OAAO,KAAP;;EAIN,WAAO,IAAP;EACD;;EACD78B,EAAAA,GAAG,CAAC+8B,EAAD,EAAK;EACN,SAAK,IAAInkC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,CAApB,EAAuBA,CAAC,EAAxB,EACE,KAAK,IAAI8f,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,CAApB,EAAuBA,CAAC,EAAxB,EACE,KAAKujB,UAAL,CAAgBrjC,CAAhB,EAAmB8f,CAAnB,EAAsBqkB,EAAE,CAACt8B,GAAH,CAAO7H,CAAP,EAAU8f,CAAV,CAAtB;EAGL;;EACD8iB,EAAAA,UAAU,GAAG;EACX,WAAO,KAAKT,OAAL,CAAaR,QAAQ,CAACK,QAAtB,EAAgCL,QAAQ,CAACK,QAAzC,MAAuDje,SAAS,CAACG,KAAjE,IAA0E,KAAKie,OAAL,CAAaR,QAAQ,CAACK,QAAtB,EAAgCL,QAAQ,CAACI,QAAzC,MAAuDhe,SAAS,CAACG,KAA3I,IAAoJ,KAAKie,OAAL,CAAaR,QAAQ,CAACI,QAAtB,EAAgCJ,QAAQ,CAACK,QAAzC,MAAuDje,SAAS,CAACG,KAArN,IAA8N,KAAKie,OAAL,CAAaR,QAAQ,CAACI,QAAtB,EAAgCJ,QAAQ,CAACI,QAAzC,MAAuDhe,SAAS,CAACG,KAAtS;EACD;;EACDkgB,EAAAA,SAAS,CAACT,oBAAD,EAAuBC,oBAAvB,EAA6C;EACpD,QAAID,oBAAoB,KAAK5f,SAAS,CAACS,CAAnC,IAAwCof,oBAAoB,KAAK7f,SAAS,CAACW,CAA3E,IAAgFif,oBAAoB,KAAK5f,SAAS,CAACS,CAAnC,IAAwCof,oBAAoB,KAAK7f,SAAS,CAAC7H,CAA3J,IAAgKynB,oBAAoB,KAAK5f,SAAS,CAACW,CAAnC,IAAwCkf,oBAAoB,KAAK7f,SAAS,CAAC7H,CAA/O,EACE,OAAOgmB,kBAAkB,CAACj/B,MAAnB,CAA0B,KAAKk/B,OAAL,CAAaR,QAAQ,CAACK,QAAtB,EAAgCL,QAAQ,CAACK,QAAzC,CAA1B,KAAiFE,kBAAkB,CAACj/B,MAAnB,CAA0B,KAAKk/B,OAAL,CAAaR,QAAQ,CAACK,QAAtB,EAAgCL,QAAQ,CAACG,QAAzC,CAA1B,CAAxF;EAEF,QAAI6B,oBAAoB,KAAK5f,SAAS,CAACW,CAAnC,IAAwCkf,oBAAoB,KAAK7f,SAAS,CAACS,CAA3E,IAAgFmf,oBAAoB,KAAK5f,SAAS,CAAC7H,CAAnC,IAAwC0nB,oBAAoB,KAAK7f,SAAS,CAACS,CAA3J,IAAgKmf,oBAAoB,KAAK5f,SAAS,CAAC7H,CAAnC,IAAwC0nB,oBAAoB,KAAK7f,SAAS,CAACW,CAA/O,EACE,OAAOwd,kBAAkB,CAACj/B,MAAnB,CAA0B,KAAKk/B,OAAL,CAAaR,QAAQ,CAACK,QAAtB,EAAgCL,QAAQ,CAACK,QAAzC,CAA1B,KAAiFE,kBAAkB,CAACj/B,MAAnB,CAA0B,KAAKk/B,OAAL,CAAaR,QAAQ,CAACG,QAAtB,EAAgCH,QAAQ,CAACK,QAAzC,CAA1B,CAAxF;EAEF,QAAI2B,oBAAoB,KAAK5f,SAAS,CAACW,CAAnC,IAAwCkf,oBAAoB,KAAK7f,SAAS,CAACW,CAA/E,EACE,OAAO,KAAKyd,OAAL,CAAaR,QAAQ,CAACK,QAAtB,EAAgCL,QAAQ,CAACK,QAAzC,MAAuD,CAA9D;EAEF,WAAO,KAAP;EACD;;EACD,MAAI/7B,WAAJ,GAAkB;EAChB,WAAO,CAACC,QAAD,CAAP;EACD;;EA7MqC;;ECJzB,MAAMm+B,KAAN,CAAY;EACzB,SAAOC,SAAP,CAAiBC,OAAjB,EAA0B;EACxB,WAAOA,OAAO,GAAG,GAAV,GAAgBtlC,IAAI,CAACqX,EAA5B;EACD;;EACD,SAAO4I,SAAP,CAAiB+f,KAAjB,EAAwB;EACtB,WAAOA,KAAK,GAAGhgC,IAAI,CAACqX,EAApB,EAAwB2oB,KAAK,IAAIoF,KAAK,CAACG,UAAf;;EACxB,WAAOvF,KAAK,IAAI,CAAChgC,IAAI,CAACqX,EAAtB,EAA0B2oB,KAAK,IAAIoF,KAAK,CAACG,UAAf;;EAC1B,WAAOvF,KAAP;EACD;;EACD,SAAOA,KAAP,GAAe;EACb,QAAIr8B,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMwI,CAAC,GAAGzI,SAAS,CAAC,CAAD,CAAnB;EACA,aAAO3D,IAAI,CAACigC,KAAL,CAAW7zB,CAAC,CAACzJ,CAAb,EAAgByJ,CAAC,CAAC1J,CAAlB,CAAP;EACD,KAHD,MAGO,IAAIiB,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMikB,EAAE,GAAGlkB,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyB2I,EAAE,GAAG3I,SAAS,CAAC,CAAD,CAAvC;EACA,YAAM6C,EAAE,GAAG8F,EAAE,CAAC5J,CAAH,GAAOmlB,EAAE,CAACnlB,CAArB;EACA,YAAM+D,EAAE,GAAG6F,EAAE,CAAC3J,CAAH,GAAOklB,EAAE,CAACllB,CAArB;EACA,aAAO3C,IAAI,CAACigC,KAAL,CAAWx5B,EAAX,EAAeD,EAAf,CAAP;EACD;EACF;;EACD,SAAOg/B,OAAP,CAAe3d,EAAf,EAAmBvb,EAAnB,EAAuBC,EAAvB,EAA2B;EACzB,UAAMk5B,GAAG,GAAG5d,EAAE,CAACnlB,CAAH,GAAO4J,EAAE,CAAC5J,CAAtB;EACA,UAAMgjC,GAAG,GAAG7d,EAAE,CAACllB,CAAH,GAAO2J,EAAE,CAAC3J,CAAtB;EACA,UAAMkV,GAAG,GAAGtL,EAAE,CAAC7J,CAAH,GAAO4J,EAAE,CAAC5J,CAAtB;EACA,UAAMoV,GAAG,GAAGvL,EAAE,CAAC5J,CAAH,GAAO2J,EAAE,CAAC3J,CAAtB;EACA,UAAMgjC,OAAO,GAAGF,GAAG,GAAG5tB,GAAN,GAAY6tB,GAAG,GAAG5tB,GAAlC;EACA,WAAO6tB,OAAO,GAAG,CAAjB;EACD;;EACD,SAAOC,QAAP,CAAgB/d,EAAhB,EAAoBvb,EAApB,EAAwBC,EAAxB,EAA4B;EAC1B,UAAMk5B,GAAG,GAAG5d,EAAE,CAACnlB,CAAH,GAAO4J,EAAE,CAAC5J,CAAtB;EACA,UAAMgjC,GAAG,GAAG7d,EAAE,CAACllB,CAAH,GAAO2J,EAAE,CAAC3J,CAAtB;EACA,UAAMkV,GAAG,GAAGtL,EAAE,CAAC7J,CAAH,GAAO4J,EAAE,CAAC5J,CAAtB;EACA,UAAMoV,GAAG,GAAGvL,EAAE,CAAC5J,CAAH,GAAO2J,EAAE,CAAC3J,CAAtB;EACA,UAAMgjC,OAAO,GAAGF,GAAG,GAAG5tB,GAAN,GAAY6tB,GAAG,GAAG5tB,GAAlC;EACA,WAAO6tB,OAAO,GAAG,CAAjB;EACD;;EACD,SAAOE,aAAP,CAAqBhe,EAArB,EAAyBvb,EAAzB,EAA6BC,EAA7B,EAAiC;EAC/B,UAAMu5B,SAAS,GAAGV,KAAK,CAACpF,KAAN,CAAY1zB,EAAZ,EAAgBub,EAAhB,CAAlB;EACA,UAAMke,SAAS,GAAGX,KAAK,CAACpF,KAAN,CAAY1zB,EAAZ,EAAgBC,EAAhB,CAAlB;EACA,WAAOvM,IAAI,CAACC,GAAL,CAAS8lC,SAAS,GAAGD,SAArB,CAAP;EACD;;EACD,SAAOE,iBAAP,CAAyBhG,KAAzB,EAAgC;EAC9B,QAAIA,KAAK,GAAG,GAAZ,EAAiB;EACf,aAAOA,KAAK,GAAG,GAAf,EAAoBA,KAAK,IAAIoF,KAAK,CAACG,UAAf;;EACpB,UAAIvF,KAAK,IAAIoF,KAAK,CAACG,UAAnB,EAA+BvF,KAAK,GAAG,GAAR;EAChC,KAHD,MAGO;EACL,aAAOA,KAAK,IAAIoF,KAAK,CAACG,UAAtB,EAAkCvF,KAAK,IAAIoF,KAAK,CAACG,UAAf;;EAClC,UAAIvF,KAAK,GAAG,GAAZ,EAAiBA,KAAK,GAAG,GAAR;EAClB;;EACD,WAAOA,KAAP;EACD;;EACD,SAAOiG,YAAP,CAAoBC,IAApB,EAA0BC,IAA1B,EAAgCC,IAAhC,EAAsC;EACpC,UAAMC,EAAE,GAAGjB,KAAK,CAACpF,KAAN,CAAYmG,IAAZ,EAAkBD,IAAlB,CAAX;EACA,UAAMI,EAAE,GAAGlB,KAAK,CAACpF,KAAN,CAAYmG,IAAZ,EAAkBC,IAAlB,CAAX;EACA,WAAOhB,KAAK,CAACmB,IAAN,CAAWF,EAAX,EAAeC,EAAf,CAAP;EACD;;EACD,SAAOC,IAAP,CAAYC,IAAZ,EAAkBC,IAAlB,EAAwB;EACtB,QAAIC,QAAQ,GAAG,IAAf;EACA,QAAIF,IAAI,GAAGC,IAAX,EACEC,QAAQ,GAAGD,IAAI,GAAGD,IAAlB,CADF,KAGEE,QAAQ,GAAGF,IAAI,GAAGC,IAAlB;EAEF,QAAIC,QAAQ,GAAG1mC,IAAI,CAACqX,EAApB,EACEqvB,QAAQ,GAAG,IAAI1mC,IAAI,CAACqX,EAAT,GAAcqvB,QAAzB;EAEF,WAAOA,QAAP;EACD;;EACD,SAAOC,SAAP,CAAiBC,YAAjB,EAA+B;EAC7B,WAAOA,YAAY,GAAG5mC,IAAI,CAACqX,EAApB,GAAyB,KAAhC;EACD;;EACD,SAAOwvB,OAAP,CAAeL,IAAf,EAAqBC,IAArB,EAA2B;EACzB,UAAMK,YAAY,GAAG9mC,IAAI,CAAC+mC,GAAL,CAASN,IAAI,GAAGD,IAAhB,CAArB;EACA,QAAIM,YAAY,GAAG,CAAnB,EACE,OAAO1B,KAAK,CAAC9qB,gBAAb;EAEF,QAAIwsB,YAAY,GAAG,CAAnB,EACE,OAAO1B,KAAK,CAAChrB,SAAb;EAEF,WAAOgrB,KAAK,CAACpC,IAAb;EACD;;EACD,SAAOgE,oBAAP,CAA4Bd,IAA5B,EAAkCC,IAAlC,EAAwCC,IAAxC,EAA8C;EAC5C,UAAMC,EAAE,GAAGjB,KAAK,CAACpF,KAAN,CAAYmG,IAAZ,EAAkBD,IAAlB,CAAX;EACA,UAAMI,EAAE,GAAGlB,KAAK,CAACpF,KAAN,CAAYmG,IAAZ,EAAkBC,IAAlB,CAAX;EACA,UAAMa,MAAM,GAAGX,EAAE,GAAGD,EAApB;EACA,QAAIY,MAAM,IAAI,CAACjnC,IAAI,CAACqX,EAApB,EAAwB,OAAO4vB,MAAM,GAAG7B,KAAK,CAACG,UAAtB;EACxB,QAAI0B,MAAM,GAAGjnC,IAAI,CAACqX,EAAlB,EAAsB,OAAO4vB,MAAM,GAAG7B,KAAK,CAACG,UAAtB;EACtB,WAAO0B,MAAP;EACD;;EAxFwB;EA0F3B7B,KAAK,CAACG,UAAN,GAAmB,MAAMvlC,IAAI,CAACqX,EAA9B;EACA+tB,KAAK,CAAC8B,SAAN,GAAkBlnC,IAAI,CAACqX,EAAL,GAAU,GAA5B;EACA+tB,KAAK,CAAC+B,SAAN,GAAkBnnC,IAAI,CAACqX,EAAL,GAAU,GAA5B;EACA+tB,KAAK,CAAC9qB,gBAAN,GAAyBX,WAAW,CAACW,gBAArC;EACA8qB,KAAK,CAAChrB,SAAN,GAAkBT,WAAW,CAACS,SAA9B;EACAgrB,KAAK,CAACpC,IAAN,GAAarpB,WAAW,CAACa,SAAzB;;EC/Fe,MAAM4sB,yBAAN,SAAwClnC,SAAxC,CAAkD;EAC/DE,EAAAA,WAAW,GAAG;EACZ;EACAgnC,IAAAA,yBAAyB,CAAC3jC,YAA1B,CAAuCC,KAAvC,CAA6C,IAA7C,EAAmDC,SAAnD;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpBvD,IAAAA,SAAS,CAACuD,YAAV,CAAuBI,IAAvB,CAA4B,IAA5B,EAAkC,4DAAlC;EACD;;EAP8D;;ECElD,MAAMwjC,WAAN,CAAkB;EAC/BjnC,EAAAA,WAAW,GAAG;EACZinC,IAAAA,WAAW,CAAC5jC,YAAZ,CAAyBC,KAAzB,CAA+B,IAA/B,EAAqCC,SAArC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKf,CAAL,GAAS,IAAT;EACA,SAAKC,CAAL,GAAS,IAAT;EACA,SAAK6L,CAAL,GAAS,IAAT;;EACA,QAAI7K,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,WAAKlB,CAAL,GAAS,GAAT;EACA,WAAKC,CAAL,GAAS,GAAT;EACA,WAAK6L,CAAL,GAAS,GAAT;EACD,KAJD,MAIO,IAAI7K,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMwI,CAAC,GAAGzI,SAAS,CAAC,CAAD,CAAnB;EACA,WAAKjB,CAAL,GAAS0J,CAAC,CAAC1J,CAAX;EACA,WAAKC,CAAL,GAASyJ,CAAC,CAACzJ,CAAX;EACA,WAAK6L,CAAL,GAAS,GAAT;EACD,KALM,MAKA,IAAI7K,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,UAAI,OAAOD,SAAS,CAAC,CAAD,CAAhB,KAAwB,QAAxB,IAAoC,OAAOA,SAAS,CAAC,CAAD,CAAhB,KAAwB,QAAhE,EAA0E;EACxE,cAAM2jC,EAAE,GAAG3jC,SAAS,CAAC,CAAD,CAApB;EAAA,cAAyB4jC,EAAE,GAAG5jC,SAAS,CAAC,CAAD,CAAvC;EACA,aAAKjB,CAAL,GAAS4kC,EAAT;EACA,aAAK3kC,CAAL,GAAS4kC,EAAT;EACA,aAAK/4B,CAAL,GAAS,GAAT;EACD,OALD,MAKO,IAAI7K,SAAS,CAAC,CAAD,CAAT,YAAwB0jC,WAAxB,IAAuC1jC,SAAS,CAAC,CAAD,CAAT,YAAwB0jC,WAAnE,EAAgF;EACrF,cAAM/6B,EAAE,GAAG3I,SAAS,CAAC,CAAD,CAApB;EAAA,cAAyB4I,EAAE,GAAG5I,SAAS,CAAC,CAAD,CAAvC;EACA,aAAKjB,CAAL,GAAS4J,EAAE,CAAC3J,CAAH,GAAO4J,EAAE,CAACiC,CAAV,GAAcjC,EAAE,CAAC5J,CAAH,GAAO2J,EAAE,CAACkC,CAAjC;EACA,aAAK7L,CAAL,GAAS4J,EAAE,CAAC7J,CAAH,GAAO4J,EAAE,CAACkC,CAAV,GAAclC,EAAE,CAAC5J,CAAH,GAAO6J,EAAE,CAACiC,CAAjC;EACA,aAAKA,CAAL,GAASlC,EAAE,CAAC5J,CAAH,GAAO6J,EAAE,CAAC5J,CAAV,GAAc4J,EAAE,CAAC7J,CAAH,GAAO4J,EAAE,CAAC3J,CAAjC;EACD,OALM,MAKA,IAAIgB,SAAS,CAAC,CAAD,CAAT,YAAwBc,UAAxB,IAAsCd,SAAS,CAAC,CAAD,CAAT,YAAwBc,UAAlE,EAA8E;EACnF,cAAM6H,EAAE,GAAG3I,SAAS,CAAC,CAAD,CAApB;EAAA,cAAyB4I,EAAE,GAAG5I,SAAS,CAAC,CAAD,CAAvC;EACA,aAAKjB,CAAL,GAAS4J,EAAE,CAAC3J,CAAH,GAAO4J,EAAE,CAAC5J,CAAnB;EACA,aAAKA,CAAL,GAAS4J,EAAE,CAAC7J,CAAH,GAAO4J,EAAE,CAAC5J,CAAnB;EACA,aAAK8L,CAAL,GAASlC,EAAE,CAAC5J,CAAH,GAAO6J,EAAE,CAAC5J,CAAV,GAAc4J,EAAE,CAAC7J,CAAH,GAAO4J,EAAE,CAAC3J,CAAjC;EACD;EACF,KAjBM,MAiBA,IAAIgB,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAM0jC,EAAE,GAAG3jC,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyB4jC,EAAE,GAAG5jC,SAAS,CAAC,CAAD,CAAvC;EAAA,YAA4C6jC,EAAE,GAAG7jC,SAAS,CAAC,CAAD,CAA1D;EACA,WAAKjB,CAAL,GAAS4kC,EAAT;EACA,WAAK3kC,CAAL,GAAS4kC,EAAT;EACA,WAAK/4B,CAAL,GAASg5B,EAAT;EACD,KALM,MAKA,IAAI7jC,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAM0I,EAAE,GAAG3I,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyB4I,EAAE,GAAG5I,SAAS,CAAC,CAAD,CAAvC;EAAA,YAA4CiJ,EAAE,GAAGjJ,SAAS,CAAC,CAAD,CAA1D;EAAA,YAA+DkJ,EAAE,GAAGlJ,SAAS,CAAC,CAAD,CAA7E;EACA,YAAMuU,EAAE,GAAG5L,EAAE,CAAC3J,CAAH,GAAO4J,EAAE,CAAC5J,CAArB;EACA,YAAMwV,EAAE,GAAG5L,EAAE,CAAC7J,CAAH,GAAO4J,EAAE,CAAC5J,CAArB;EACA,YAAM0V,EAAE,GAAG9L,EAAE,CAAC5J,CAAH,GAAO6J,EAAE,CAAC5J,CAAV,GAAc4J,EAAE,CAAC7J,CAAH,GAAO4J,EAAE,CAAC3J,CAAnC;EACA,YAAM0V,EAAE,GAAGzL,EAAE,CAACjK,CAAH,GAAOkK,EAAE,CAAClK,CAArB;EACA,YAAM2V,EAAE,GAAGzL,EAAE,CAACnK,CAAH,GAAOkK,EAAE,CAAClK,CAArB;EACA,YAAM6V,EAAE,GAAG3L,EAAE,CAAClK,CAAH,GAAOmK,EAAE,CAAClK,CAAV,GAAckK,EAAE,CAACnK,CAAH,GAAOkK,EAAE,CAACjK,CAAnC;EACA,WAAKD,CAAL,GAASyV,EAAE,GAAGI,EAAL,GAAUD,EAAE,GAAGF,EAAxB;EACA,WAAKzV,CAAL,GAAS0V,EAAE,GAAGD,EAAL,GAAUF,EAAE,GAAGK,EAAxB;EACA,WAAK/J,CAAL,GAAS0J,EAAE,GAAGI,EAAL,GAAUD,EAAE,GAAGF,EAAxB;EACD;EACF;;EACDvR,EAAAA,IAAI,GAAG;EACL,UAAMU,CAAC,GAAG,KAAK3E,CAAL,GAAS,KAAK6L,CAAxB;EACA,QAAItN,MAAM,CAACE,KAAP,CAAakG,CAAb,KAAmBpG,MAAM,CAACK,UAAP,CAAkB+F,CAAlB,CAAvB,EACE,MAAM,IAAI8/B,yBAAJ,EAAN;EAEF,WAAO9/B,CAAP;EACD;;EACDrB,EAAAA,IAAI,GAAG;EACL,UAAMqB,CAAC,GAAG,KAAK5E,CAAL,GAAS,KAAK8L,CAAxB;EACA,QAAItN,MAAM,CAACE,KAAP,CAAakG,CAAb,KAAmBpG,MAAM,CAACK,UAAP,CAAkB+F,CAAlB,CAAvB,EACE,MAAM,IAAI8/B,yBAAJ,EAAN;EAEF,WAAO9/B,CAAP;EACD;;EACD+C,EAAAA,aAAa,GAAG;EACd,UAAM+B,CAAC,GAAG,IAAI3H,UAAJ,EAAV;EACA2H,IAAAA,CAAC,CAAC1J,CAAF,GAAM,KAAKuD,IAAL,EAAN;EACAmG,IAAAA,CAAC,CAACzJ,CAAF,GAAM,KAAKiE,IAAL,EAAN;EACA,WAAOwF,CAAP;EACD;;EAvE8B;;ECElB,MAAMq7B,QAAN,CAAe;EAC5BrnC,EAAAA,WAAW,GAAG;EACZqnC,IAAAA,QAAQ,CAAChkC,YAAT,CAAsBC,KAAtB,CAA4B,IAA5B,EAAkCC,SAAlC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKokB,EAAL,GAAU,IAAV;EACA,SAAKvb,EAAL,GAAU,IAAV;EACA,SAAKC,EAAL,GAAU,IAAV;EACA,UAAMsb,EAAE,GAAGlkB,SAAS,CAAC,CAAD,CAApB;EAAA,UAAyB2I,EAAE,GAAG3I,SAAS,CAAC,CAAD,CAAvC;EAAA,UAA4C4I,EAAE,GAAG5I,SAAS,CAAC,CAAD,CAA1D;EACA,SAAKkkB,EAAL,GAAUA,EAAV;EACA,SAAKvb,EAAL,GAAUA,EAAV;EACA,SAAKC,EAAL,GAAUA,EAAV;EACD;;EACD,SAAOsc,IAAP,CAAYvhB,CAAZ,EAAeC,CAAf,EAAkB5C,CAAlB,EAAqB;EACnB,WAAO3E,IAAI,CAACC,GAAL,CAAS,CAAC,CAAC0E,CAAC,CAACjC,CAAF,GAAM4E,CAAC,CAAC5E,CAAT,KAAe6E,CAAC,CAAC5E,CAAF,GAAM2E,CAAC,CAAC3E,CAAvB,IAA4B,CAAC4E,CAAC,CAAC7E,CAAF,GAAM4E,CAAC,CAAC5E,CAAT,KAAeiC,CAAC,CAAChC,CAAF,GAAM2E,CAAC,CAAC3E,CAAvB,CAA7B,IAA0D,CAAnE,CAAP;EACD;;EACD,SAAO+kC,UAAP,CAAkBpgC,CAAlB,EAAqBC,CAArB,EAAwB5C,CAAxB,EAA2B;EACzB,WAAO,CAAC,CAACA,CAAC,CAACjC,CAAF,GAAM4E,CAAC,CAAC5E,CAAT,KAAe6E,CAAC,CAAC5E,CAAF,GAAM2E,CAAC,CAAC3E,CAAvB,IAA4B,CAAC4E,CAAC,CAAC7E,CAAF,GAAM4E,CAAC,CAAC5E,CAAT,KAAeiC,CAAC,CAAChC,CAAF,GAAM2E,CAAC,CAAC3E,CAAvB,CAA7B,IAA0D,CAAjE;EACD;;EACD,SAAOgO,GAAP,CAAWg3B,GAAX,EAAgBC,GAAhB,EAAqBC,GAArB,EAA0BC,GAA1B,EAA+B;EAC7B,WAAOH,GAAG,GAAGG,GAAN,GAAYF,GAAG,GAAGC,GAAzB;EACD;;EACD,SAAOE,YAAP,CAAoB37B,CAApB,EAAuB47B,EAAvB,EAA2BxrB,EAA3B,EAA+BC,EAA/B,EAAmC;EACjC,UAAMiG,EAAE,GAAGslB,EAAE,CAACtlC,CAAd;EACA,UAAMigB,EAAE,GAAGqlB,EAAE,CAACrlC,CAAd;EACA,UAAM2E,CAAC,GAAGkV,EAAE,CAAC9Z,CAAH,GAAOggB,EAAjB;EACA,UAAMnb,CAAC,GAAGkV,EAAE,CAAC/Z,CAAH,GAAOggB,EAAjB;EACA,UAAM/d,CAAC,GAAG6X,EAAE,CAAC7Z,CAAH,GAAOggB,EAAjB;EACA,UAAMjR,CAAC,GAAG+K,EAAE,CAAC9Z,CAAH,GAAOggB,EAAjB;EACA,UAAMhS,GAAG,GAAGrJ,CAAC,GAAGoK,CAAJ,GAAQnK,CAAC,GAAG5C,CAAxB;EACA,UAAM6B,EAAE,GAAG4F,CAAC,CAAC1J,CAAF,GAAMggB,EAAjB;EACA,UAAMjc,EAAE,GAAG2F,CAAC,CAACzJ,CAAF,GAAMggB,EAAjB;EACA,UAAMzM,CAAC,GAAG,CAACxE,CAAC,GAAGlL,EAAJ,GAASe,CAAC,GAAGd,EAAd,IAAoBkK,GAA9B;EACA,UAAMiE,CAAC,GAAG,CAAC,CAACjQ,CAAD,GAAK6B,EAAL,GAAUc,CAAC,GAAGb,EAAf,IAAqBkK,GAA/B;EACA,UAAMjM,CAAC,GAAGsjC,EAAE,CAACpjC,IAAH,KAAYsR,CAAC,IAAIsG,EAAE,CAAC5X,IAAH,KAAYojC,EAAE,CAACpjC,IAAH,EAAhB,CAAb,GAA0CgQ,CAAC,IAAI6H,EAAE,CAAC7X,IAAH,KAAYojC,EAAE,CAACpjC,IAAH,EAAhB,CAArD;EACA,WAAOF,CAAP;EACD;;EACD,SAAOujC,iBAAP,CAAyB3gC,CAAzB,EAA4BC,CAA5B,EAA+B5C,CAA/B,EAAkC;EAChC,UAAMujC,KAAK,GAAG5gC,CAAC,CAACR,QAAF,CAAWS,CAAX,CAAd;EACA,UAAM4gC,KAAK,GAAG5gC,CAAC,CAACT,QAAF,CAAWnC,CAAX,CAAd;EACA,UAAMyjC,KAAK,GAAGzjC,CAAC,CAACmC,QAAF,CAAWQ,CAAX,CAAd;EACA,QAAI+gC,MAAM,GAAGH,KAAb;EACA,QAAIC,KAAK,GAAGE,MAAZ,EAAoBA,MAAM,GAAGF,KAAT;EACpB,QAAIC,KAAK,GAAGC,MAAZ,EAAoBA,MAAM,GAAGD,KAAT;EACpB,WAAOC,MAAP;EACD;;EACD,SAAOC,cAAP,CAAsBhhC,CAAtB,EAAyBC,CAAzB,EAA4B5C,CAA5B,EAA+B;EAC7B,UAAMgR,EAAE,GAAGxF,EAAE,CAACJ,OAAH,CAAWzI,CAAC,CAAC5E,CAAb,EAAgBmR,QAAhB,CAAyBlP,CAAC,CAACjC,CAA3B,CAAX;EACA,UAAM6lC,EAAE,GAAGp4B,EAAE,CAACJ,OAAH,CAAWzI,CAAC,CAAC3E,CAAb,EAAgBkR,QAAhB,CAAyBlP,CAAC,CAAChC,CAA3B,CAAX;EACA,UAAM6lC,EAAE,GAAGr4B,EAAE,CAACJ,OAAH,CAAWxI,CAAC,CAAC7E,CAAb,EAAgBmR,QAAhB,CAAyBlP,CAAC,CAACjC,CAA3B,CAAX;EACA,UAAM+lC,EAAE,GAAGt4B,EAAE,CAACJ,OAAH,CAAWxI,CAAC,CAAC5E,CAAb,EAAgBkR,QAAhB,CAAyBlP,CAAC,CAAChC,CAA3B,CAAX;EACA,UAAM2a,KAAK,GAAGnN,EAAE,CAACO,WAAH,CAAeiF,EAAf,EAAmB4yB,EAAnB,EAAuBC,EAAvB,EAA2BC,EAA3B,EAA+B73B,QAA/B,CAAwC,CAAxC,CAAd;EACA,UAAM83B,IAAI,GAAG/yB,EAAE,CAAC7E,GAAH,GAAS3I,GAAT,CAAaogC,EAAE,CAACz3B,GAAH,EAAb,CAAb;EACA,UAAM63B,IAAI,GAAGH,EAAE,CAAC13B,GAAH,GAAS3I,GAAT,CAAasgC,EAAE,CAAC33B,GAAH,EAAb,CAAb;EACA,UAAM83B,IAAI,GAAGz4B,EAAE,CAACO,WAAH,CAAe63B,EAAf,EAAmBG,IAAnB,EAAyBD,EAAzB,EAA6BE,IAA7B,CAAb;EACA,UAAME,IAAI,GAAG14B,EAAE,CAACO,WAAH,CAAeiF,EAAf,EAAmB+yB,IAAnB,EAAyBF,EAAzB,EAA6BG,IAA7B,CAAb;EACA,UAAMG,GAAG,GAAG34B,EAAE,CAACJ,OAAH,CAAWpL,CAAC,CAACjC,CAAb,EAAgBmR,QAAhB,CAAyB+0B,IAAI,CAACv2B,MAAL,CAAYiL,KAAZ,CAAzB,EAA6CtJ,WAA7C,EAAZ;EACA,UAAM+0B,GAAG,GAAG54B,EAAE,CAACJ,OAAH,CAAWpL,CAAC,CAAChC,CAAb,EAAgBwF,GAAhB,CAAoB0gC,IAAI,CAACx2B,MAAL,CAAYiL,KAAZ,CAApB,EAAwCtJ,WAAxC,EAAZ;EACA,WAAO,IAAIvP,UAAJ,CAAeqkC,GAAf,EAAoBC,GAApB,CAAP;EACD;;EACD,SAAOvD,OAAP,CAAel+B,CAAf,EAAkBC,CAAlB,EAAqB5C,CAArB,EAAwB;EACtB,QAAI,CAACygC,KAAK,CAACI,OAAN,CAAcl+B,CAAd,EAAiBC,CAAjB,EAAoB5C,CAApB,CAAL,EAA6B,OAAO,KAAP;EAC7B,QAAI,CAACygC,KAAK,CAACI,OAAN,CAAcj+B,CAAd,EAAiB5C,CAAjB,EAAoB2C,CAApB,CAAL,EAA6B,OAAO,KAAP;EAC7B,QAAI,CAAC89B,KAAK,CAACI,OAAN,CAAc7gC,CAAd,EAAiB2C,CAAjB,EAAoBC,CAApB,CAAL,EAA6B,OAAO,KAAP;EAC7B,WAAO,IAAP;EACD;;EACD,SAAOyhC,YAAP,CAAoB1hC,CAApB,EAAuBC,CAAvB,EAA0B5C,CAA1B,EAA6B;EAC3B,UAAMskC,EAAE,GAAGtkC,CAAC,CAACjC,CAAb;EACA,UAAMwmC,EAAE,GAAGvkC,CAAC,CAAChC,CAAb;EACA,UAAMgT,EAAE,GAAGrO,CAAC,CAAC5E,CAAF,GAAMumC,EAAjB;EACA,UAAMV,EAAE,GAAGjhC,CAAC,CAAC3E,CAAF,GAAMumC,EAAjB;EACA,UAAMV,EAAE,GAAGjhC,CAAC,CAAC7E,CAAF,GAAMumC,EAAjB;EACA,UAAMR,EAAE,GAAGlhC,CAAC,CAAC5E,CAAF,GAAMumC,EAAjB;EACA,UAAM5rB,KAAK,GAAG,IAAImqB,QAAQ,CAAC92B,GAAT,CAAagF,EAAb,EAAiB4yB,EAAjB,EAAqBC,EAArB,EAAyBC,EAAzB,CAAlB;EACA,UAAMG,IAAI,GAAGnB,QAAQ,CAAC92B,GAAT,CAAa43B,EAAb,EAAiB5yB,EAAE,GAAGA,EAAL,GAAU4yB,EAAE,GAAGA,EAAhC,EAAoCE,EAApC,EAAwCD,EAAE,GAAGA,EAAL,GAAUC,EAAE,GAAGA,EAAvD,CAAb;EACA,UAAMI,IAAI,GAAGpB,QAAQ,CAAC92B,GAAT,CAAagF,EAAb,EAAiBA,EAAE,GAAGA,EAAL,GAAU4yB,EAAE,GAAGA,EAAhC,EAAoCC,EAApC,EAAwCA,EAAE,GAAGA,EAAL,GAAUC,EAAE,GAAGA,EAAvD,CAAb;EACA,UAAMK,GAAG,GAAGG,EAAE,GAAGL,IAAI,GAAGtrB,KAAxB;EACA,UAAMyrB,GAAG,GAAGG,EAAE,GAAGL,IAAI,GAAGvrB,KAAxB;EACA,WAAO,IAAI7Y,UAAJ,CAAeqkC,GAAf,EAAoBC,GAApB,CAAP;EACD;;EACD,SAAOI,qBAAP,CAA6B7hC,CAA7B,EAAgCC,CAAhC,EAAmC;EACjC,UAAMf,EAAE,GAAGe,CAAC,CAAC7E,CAAF,GAAM4E,CAAC,CAAC5E,CAAnB;EACA,UAAM+D,EAAE,GAAGc,CAAC,CAAC5E,CAAF,GAAM2E,CAAC,CAAC3E,CAAnB;EACA,UAAMymC,EAAE,GAAG,IAAI/B,WAAJ,CAAgB//B,CAAC,CAAC5E,CAAF,GAAM8D,EAAE,GAAG,GAA3B,EAAgCc,CAAC,CAAC3E,CAAF,GAAM8D,EAAE,GAAG,GAA3C,EAAgD,GAAhD,CAAX;EACA,UAAM4iC,EAAE,GAAG,IAAIhC,WAAJ,CAAgB//B,CAAC,CAAC5E,CAAF,GAAM+D,EAAN,GAAWD,EAAE,GAAG,GAAhC,EAAqCc,CAAC,CAAC3E,CAAF,GAAM6D,EAAN,GAAWC,EAAE,GAAG,GAArD,EAA0D,GAA1D,CAAX;EACA,WAAO,IAAI4gC,WAAJ,CAAgB+B,EAAhB,EAAoBC,EAApB,CAAP;EACD;;EACD,SAAOC,aAAP,CAAqBhiC,CAArB,EAAwBC,CAAxB,EAA2B5C,CAA3B,EAA8B;EAC5B,UAAM4kC,IAAI,GAAGhiC,CAAC,CAACT,QAAF,CAAWQ,CAAX,CAAb;EACA,UAAMmW,IAAI,GAAGlW,CAAC,CAACT,QAAF,CAAWnC,CAAX,CAAb;EACA,UAAM6kC,IAAI,GAAGD,IAAI,IAAIA,IAAI,GAAG9rB,IAAX,CAAjB;EACA,UAAMjX,EAAE,GAAG7B,CAAC,CAACjC,CAAF,GAAM4E,CAAC,CAAC5E,CAAnB;EACA,UAAM+D,EAAE,GAAG9B,CAAC,CAAChC,CAAF,GAAM2E,CAAC,CAAC3E,CAAnB;EACA,UAAM8mC,OAAO,GAAG,IAAIhlC,UAAJ,CAAe6C,CAAC,CAAC5E,CAAF,GAAM8mC,IAAI,GAAGhjC,EAA5B,EAAgCc,CAAC,CAAC3E,CAAF,GAAM6mC,IAAI,GAAG/iC,EAA7C,CAAhB;EACA,WAAOgjC,OAAP;EACD;;EACD,SAAOC,MAAP,CAAcpiC,CAAd,EAAiBC,CAAjB,EAAoB5C,CAApB,EAAuB;EACrB,UAAM48B,EAAE,GAAGh6B,CAAC,CAAC7E,CAAF,GAAM4E,CAAC,CAAC5E,CAAnB;EACA,UAAM8+B,EAAE,GAAGj6B,CAAC,CAAC5E,CAAF,GAAM2E,CAAC,CAAC3E,CAAnB;EACA,UAAMgnC,EAAE,GAAGpiC,CAAC,CAAC3C,IAAF,KAAW0C,CAAC,CAAC1C,IAAF,EAAtB;EACA,UAAMglC,EAAE,GAAGjlC,CAAC,CAACjC,CAAF,GAAM4E,CAAC,CAAC5E,CAAnB;EACA,UAAMmnC,EAAE,GAAGllC,CAAC,CAAChC,CAAF,GAAM2E,CAAC,CAAC3E,CAAnB;EACA,UAAMmnC,EAAE,GAAGnlC,CAAC,CAACC,IAAF,KAAW0C,CAAC,CAAC1C,IAAF,EAAtB;EACA,UAAMmlC,MAAM,GAAGvI,EAAE,GAAGsI,EAAL,GAAUH,EAAE,GAAGE,EAA9B;EACA,UAAMG,MAAM,GAAGL,EAAE,GAAGC,EAAL,GAAUrI,EAAE,GAAGuI,EAA9B;EACA,UAAMG,MAAM,GAAG1I,EAAE,GAAGsI,EAAL,GAAUrI,EAAE,GAAGoI,EAA9B;EACA,UAAMM,KAAK,GAAGH,MAAM,GAAGA,MAAT,GAAkBC,MAAM,GAAGA,MAA3B,GAAoCC,MAAM,GAAGA,MAA3D;EACA,UAAMP,MAAM,GAAG1pC,IAAI,CAAC2G,IAAL,CAAUujC,KAAV,IAAmB,CAAlC;EACA,WAAOR,MAAP;EACD;;EACD,SAAOS,QAAP,CAAgB7iC,CAAhB,EAAmBC,CAAnB,EAAsB5C,CAAtB,EAAyB;EACvB,UAAMjC,CAAC,GAAG,CAAC4E,CAAC,CAAC5E,CAAF,GAAM6E,CAAC,CAAC7E,CAAR,GAAYiC,CAAC,CAACjC,CAAf,IAAoB,CAA9B;EACA,UAAMC,CAAC,GAAG,CAAC2E,CAAC,CAAC3E,CAAF,GAAM4E,CAAC,CAAC5E,CAAR,GAAYgC,CAAC,CAAChC,CAAf,IAAoB,CAA9B;EACA,WAAO,IAAI8B,UAAJ,CAAe/B,CAAf,EAAkBC,CAAlB,CAAP;EACD;;EACD,SAAOynC,QAAP,CAAgB9iC,CAAhB,EAAmBC,CAAnB,EAAsB5C,CAAtB,EAAyB;EACvB,UAAM4kC,IAAI,GAAGhiC,CAAC,CAACT,QAAF,CAAWnC,CAAX,CAAb;EACA,UAAM0lC,IAAI,GAAG/iC,CAAC,CAACR,QAAF,CAAWnC,CAAX,CAAb;EACA,UAAM8Y,IAAI,GAAGnW,CAAC,CAACR,QAAF,CAAWS,CAAX,CAAb;EACA,UAAM+iC,MAAM,GAAGf,IAAI,GAAGc,IAAP,GAAc5sB,IAA7B;EACA,UAAM8sB,SAAS,GAAG,CAAChB,IAAI,GAAGjiC,CAAC,CAAC5E,CAAT,GAAa2nC,IAAI,GAAG9iC,CAAC,CAAC7E,CAAtB,GAA0B+a,IAAI,GAAG9Y,CAAC,CAACjC,CAApC,IAAyC4nC,MAA3D;EACA,UAAME,SAAS,GAAG,CAACjB,IAAI,GAAGjiC,CAAC,CAAC3E,CAAT,GAAa0nC,IAAI,GAAG9iC,CAAC,CAAC5E,CAAtB,GAA0B8a,IAAI,GAAG9Y,CAAC,CAAChC,CAApC,IAAyC2nC,MAA3D;EACA,WAAO,IAAI7lC,UAAJ,CAAe8lC,SAAf,EAA0BC,SAA1B,CAAP;EACD;;EACD3hB,EAAAA,IAAI,GAAG;EACL,WAAO4e,QAAQ,CAAC5e,IAAT,CAAc,KAAKhB,EAAnB,EAAuB,KAAKvb,EAA5B,EAAgC,KAAKC,EAArC,CAAP;EACD;;EACDm7B,EAAAA,UAAU,GAAG;EACX,WAAOD,QAAQ,CAACC,UAAT,CAAoB,KAAK7f,EAAzB,EAA6B,KAAKvb,EAAlC,EAAsC,KAAKC,EAA3C,CAAP;EACD;;EACDw7B,EAAAA,YAAY,CAAC37B,CAAD,EAAI;EACd,QAAIA,CAAC,KAAK,IAAV,EAAgB,MAAM,IAAI1L,wBAAJ,CAA6B,yBAA7B,CAAN;EAChB,WAAO+mC,QAAQ,CAACM,YAAT,CAAsB37B,CAAtB,EAAyB,KAAKyb,EAA9B,EAAkC,KAAKvb,EAAvC,EAA2C,KAAKC,EAAhD,CAAP;EACD;;EACD07B,EAAAA,iBAAiB,GAAG;EAClB,WAAOR,QAAQ,CAACQ,iBAAT,CAA2B,KAAKpgB,EAAhC,EAAoC,KAAKvb,EAAzC,EAA6C,KAAKC,EAAlD,CAAP;EACD;;EACDi5B,EAAAA,OAAO,GAAG;EACR,WAAOiC,QAAQ,CAACjC,OAAT,CAAiB,KAAK3d,EAAtB,EAA0B,KAAKvb,EAA/B,EAAmC,KAAKC,EAAxC,CAAP;EACD;;EACDy8B,EAAAA,YAAY,GAAG;EACb,WAAOvB,QAAQ,CAACuB,YAAT,CAAsB,KAAKnhB,EAA3B,EAA+B,KAAKvb,EAApC,EAAwC,KAAKC,EAA7C,CAAP;EACD;;EACDm9B,EAAAA,MAAM,GAAG;EACP,WAAOjC,QAAQ,CAACiC,MAAT,CAAgB,KAAK7hB,EAArB,EAAyB,KAAKvb,EAA9B,EAAkC,KAAKC,EAAvC,CAAP;EACD;;EACD49B,EAAAA,QAAQ,GAAG;EACT,WAAO1C,QAAQ,CAAC0C,QAAT,CAAkB,KAAKtiB,EAAvB,EAA2B,KAAKvb,EAAhC,EAAoC,KAAKC,EAAzC,CAAP;EACD;;EACD69B,EAAAA,QAAQ,GAAG;EACT,WAAO3C,QAAQ,CAAC2C,QAAT,CAAkB,KAAKviB,EAAvB,EAA2B,KAAKvb,EAAhC,EAAoC,KAAKC,EAAzC,CAAP;EACD;;EAvJ2B;;ECJf,MAAMk+B,oCAAN,SAAmDvqC,SAAnD,CAA6D;EAC1EE,EAAAA,WAAW,GAAG;EACZ;EACAqqC,IAAAA,oCAAoC,CAAChnC,YAArC,CAAkDC,KAAlD,CAAwD,IAAxD,EAA8DC,SAA9D;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,QAAIE,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B1D,MAAAA,SAAS,CAACuD,YAAV,CAAuBI,IAAvB,CAA4B,IAA5B;EACD,KAFD,MAEO,IAAIF,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAM8mC,GAAG,GAAG/mC,SAAS,CAAC,CAAD,CAArB;EACAzD,MAAAA,SAAS,CAACuD,YAAV,CAAuBI,IAAvB,CAA4B,IAA5B,EAAkC6mC,GAAlC;EACD;EACF;;EAZyE;;ECQ7D,MAAMC,oBAAN,CAA2B;EACxCvqC,EAAAA,WAAW,GAAG;EACZuqC,IAAAA,oBAAoB,CAAClnC,YAArB,CAAkCC,KAAlC,CAAwC,IAAxC,EAA8CC,SAA9C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKmnC,IAAL,GAAY,IAAZ;EACA,SAAKC,IAAL,GAAY,IAAZ;EACA,SAAKC,IAAL,GAAY,IAAZ;EACA,SAAKC,IAAL,GAAY,IAAZ;EACA,SAAKC,IAAL,GAAY,IAAZ;EACA,SAAKC,IAAL,GAAY,IAAZ;;EACA,QAAItnC,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,WAAKsnC,aAAL;EACD,KAFD,MAEO,IAAIvnC,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,UAAID,SAAS,CAAC,CAAD,CAAT,YAAwBkH,KAA5B,EAAmC;EACjC,cAAMsgC,MAAM,GAAGxnC,SAAS,CAAC,CAAD,CAAxB;EACA,aAAKinC,IAAL,GAAYO,MAAM,CAAC,CAAD,CAAlB;EACA,aAAKN,IAAL,GAAYM,MAAM,CAAC,CAAD,CAAlB;EACA,aAAKL,IAAL,GAAYK,MAAM,CAAC,CAAD,CAAlB;EACA,aAAKJ,IAAL,GAAYI,MAAM,CAAC,CAAD,CAAlB;EACA,aAAKH,IAAL,GAAYG,MAAM,CAAC,CAAD,CAAlB;EACA,aAAKF,IAAL,GAAYE,MAAM,CAAC,CAAD,CAAlB;EACD,OARD,MAQO,IAAIxnC,SAAS,CAAC,CAAD,CAAT,YAAwBgnC,oBAA5B,EAAkD;EACvD,cAAMS,KAAK,GAAGznC,SAAS,CAAC,CAAD,CAAvB;EACA,aAAK0nC,iBAAL,CAAuBD,KAAvB;EACD;EACF,KAbM,MAaA,IAAIznC,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,UAAI,OAAOD,SAAS,CAAC,CAAD,CAAhB,KAAwB,QAAxB,IAAqC,OAAOA,SAAS,CAAC,CAAD,CAAhB,KAAwB,QAAxB,IAAqC,OAAOA,SAAS,CAAC,CAAD,CAAhB,KAAwB,QAAxB,IAAqC,OAAOA,SAAS,CAAC,CAAD,CAAhB,KAAwB,QAAxB,IAAqC,OAAOA,SAAS,CAAC,CAAD,CAAhB,KAAwB,QAAxB,IAAoC,OAAOA,SAAS,CAAC,CAAD,CAAhB,KAAwB,QAApN,EAAkO;EAChO,cAAMgkC,GAAG,GAAGhkC,SAAS,CAAC,CAAD,CAArB;EAAA,cAA0BikC,GAAG,GAAGjkC,SAAS,CAAC,CAAD,CAAzC;EAAA,cAA8C2nC,GAAG,GAAG3nC,SAAS,CAAC,CAAD,CAA7D;EAAA,cAAkEkkC,GAAG,GAAGlkC,SAAS,CAAC,CAAD,CAAjF;EAAA,cAAsFmkC,GAAG,GAAGnkC,SAAS,CAAC,CAAD,CAArG;EAAA,cAA0G4nC,GAAG,GAAG5nC,SAAS,CAAC,CAAD,CAAzH;EACA,aAAK0nC,iBAAL,CAAuB1D,GAAvB,EAA4BC,GAA5B,EAAiC0D,GAAjC,EAAsCzD,GAAtC,EAA2CC,GAA3C,EAAgDyD,GAAhD;EACD;EAGF;EACF;;EACD,SAAOC,mBAAP,CAA2B9oC,CAA3B,EAA8BC,CAA9B,EAAiC;EAC/B,UAAMyoC,KAAK,GAAG,IAAIT,oBAAJ,EAAd;EACAS,IAAAA,KAAK,CAACK,gBAAN,CAAuB/oC,CAAvB,EAA0BC,CAA1B;EACA,WAAOyoC,KAAP;EACD;;EACD,SAAOM,aAAP,CAAqBC,MAArB,EAA6BC,MAA7B,EAAqC;EACnC,UAAMR,KAAK,GAAG,IAAIT,oBAAJ,EAAd;EACAS,IAAAA,KAAK,CAACS,UAAN,CAAiBF,MAAjB,EAAyBC,MAAzB;EACA,WAAOR,KAAP;EACD;;EACD,SAAOU,kBAAP,GAA4B;EAC1B,QAAInoC,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMlB,CAAC,GAAGiB,SAAS,CAAC,CAAD,CAAnB;EAAA,YAAwBhB,CAAC,GAAGgB,SAAS,CAAC,CAAD,CAArC;EACA,YAAMynC,KAAK,GAAG,IAAIT,oBAAJ,EAAd;EACAS,MAAAA,KAAK,CAACW,eAAN,CAAsBrpC,CAAtB,EAAyBC,CAAzB;EACA,aAAOyoC,KAAP;EACD,KALD,MAKO,IAAIznC,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAM8e,EAAE,GAAG/e,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyBgf,EAAE,GAAGhf,SAAS,CAAC,CAAD,CAAvC;EAAA,YAA4C9D,EAAE,GAAG8D,SAAS,CAAC,CAAD,CAA1D;EAAA,YAA+D6I,EAAE,GAAG7I,SAAS,CAAC,CAAD,CAA7E;EACA,YAAMynC,KAAK,GAAG,IAAIT,oBAAJ,EAAd;EACAS,MAAAA,KAAK,CAACW,eAAN,CAAsBrpB,EAAtB,EAA0BC,EAA1B,EAA8B9iB,EAA9B,EAAkC2M,EAAlC;EACA,aAAO4+B,KAAP;EACD;EACF;;EACD,SAAOY,gBAAP,GAA0B;EACxB,QAAIroC,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMqoC,KAAK,GAAGtoC,SAAS,CAAC,CAAD,CAAvB;EACA,aAAOgnC,oBAAoB,CAACqB,gBAArB,CAAsChsC,IAAI,CAAC+mC,GAAL,CAASkF,KAAT,CAAtC,EAAuDjsC,IAAI,CAACksC,GAAL,CAASD,KAAT,CAAvD,CAAP;EACD,KAHD,MAGO,IAAItoC,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMuoC,QAAQ,GAAGxoC,SAAS,CAAC,CAAD,CAA1B;EAAA,YAA+ByoC,QAAQ,GAAGzoC,SAAS,CAAC,CAAD,CAAnD;EACA,YAAMynC,KAAK,GAAG,IAAIT,oBAAJ,EAAd;EACAS,MAAAA,KAAK,CAACiB,aAAN,CAAoBF,QAApB,EAA8BC,QAA9B;EACA,aAAOhB,KAAP;EACD,KALM,MAKA,IAAIznC,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMqoC,KAAK,GAAGtoC,SAAS,CAAC,CAAD,CAAvB;EAAA,YAA4BjB,CAAC,GAAGiB,SAAS,CAAC,CAAD,CAAzC;EAAA,YAA8ChB,CAAC,GAAGgB,SAAS,CAAC,CAAD,CAA3D;EACA,aAAOgnC,oBAAoB,CAACqB,gBAArB,CAAsChsC,IAAI,CAAC+mC,GAAL,CAASkF,KAAT,CAAtC,EAAuDjsC,IAAI,CAACksC,GAAL,CAASD,KAAT,CAAvD,EAAwEvpC,CAAxE,EAA2EC,CAA3E,CAAP;EACD,KAHM,MAGA,IAAIgB,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMuoC,QAAQ,GAAGxoC,SAAS,CAAC,CAAD,CAA1B;EAAA,YAA+ByoC,QAAQ,GAAGzoC,SAAS,CAAC,CAAD,CAAnD;EAAA,YAAwDjB,CAAC,GAAGiB,SAAS,CAAC,CAAD,CAArE;EAAA,YAA0EhB,CAAC,GAAGgB,SAAS,CAAC,CAAD,CAAvF;EACA,YAAMynC,KAAK,GAAG,IAAIT,oBAAJ,EAAd;EACAS,MAAAA,KAAK,CAACiB,aAAN,CAAoBF,QAApB,EAA8BC,QAA9B,EAAwC1pC,CAAxC,EAA2CC,CAA3C;EACA,aAAOyoC,KAAP;EACD;EACF;;EACD,SAAOkB,aAAP,GAAuB;EACrB,QAAI3oC,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAM2oC,MAAM,GAAG5oC,SAAS,CAAC,CAAD,CAAxB;EAAA,YAA6B6oC,MAAM,GAAG7oC,SAAS,CAAC,CAAD,CAA/C;EACA,YAAMynC,KAAK,GAAG,IAAIT,oBAAJ,EAAd;EACAS,MAAAA,KAAK,CAACqB,UAAN,CAAiBF,MAAjB,EAAyBC,MAAzB;EACA,aAAOpB,KAAP;EACD,KALD,MAKO,IAAIznC,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAM2oC,MAAM,GAAG5oC,SAAS,CAAC,CAAD,CAAxB;EAAA,YAA6B6oC,MAAM,GAAG7oC,SAAS,CAAC,CAAD,CAA/C;EAAA,YAAoDjB,CAAC,GAAGiB,SAAS,CAAC,CAAD,CAAjE;EAAA,YAAsEhB,CAAC,GAAGgB,SAAS,CAAC,CAAD,CAAnF;EACA,YAAMynC,KAAK,GAAG,IAAIT,oBAAJ,EAAd;EACAS,MAAAA,KAAK,CAACx8B,SAAN,CAAgB,CAAClM,CAAjB,EAAoB,CAACC,CAArB;EACAyoC,MAAAA,KAAK,CAACh5B,KAAN,CAAYm6B,MAAZ,EAAoBC,MAApB;EACApB,MAAAA,KAAK,CAACx8B,SAAN,CAAgBlM,CAAhB,EAAmBC,CAAnB;EACA,aAAOyoC,KAAP;EACD;EACF;;EACDsB,EAAAA,oBAAoB,CAAChqB,EAAD,EAAKC,EAAL,EAAS9iB,EAAT,EAAa2M,EAAb,EAAiB;EACnC,QAAIkW,EAAE,KAAK7iB,EAAP,IAAa8iB,EAAE,KAAKnW,EAAxB,EACE,MAAM,IAAI9L,wBAAJ,CAA6B,yCAA7B,CAAN;EAEF,UAAM8F,EAAE,GAAG3G,EAAE,GAAG6iB,EAAhB;EACA,UAAMjc,EAAE,GAAG+F,EAAE,GAAGmW,EAAhB;EACA,UAAMjR,CAAC,GAAG1R,IAAI,CAAC2G,IAAL,CAAUH,EAAE,GAAGA,EAAL,GAAUC,EAAE,GAAGA,EAAzB,CAAV;EACA,UAAMsgC,GAAG,GAAGtgC,EAAE,GAAGiL,CAAjB;EACA,UAAMw6B,GAAG,GAAG1lC,EAAE,GAAGkL,CAAjB;EACA,UAAM+R,GAAG,GAAG,IAAIsjB,GAAJ,GAAUmF,GAAtB;EACA,UAAMS,IAAI,GAAGT,GAAG,GAAGA,GAAN,GAAYnF,GAAG,GAAGA,GAA/B;EACA,SAAK6D,IAAL,GAAY+B,IAAZ;EACA,SAAK9B,IAAL,GAAYpnB,GAAZ;EACA,SAAKqnB,IAAL,GAAY,GAAZ;EACA,SAAKC,IAAL,GAAYtnB,GAAZ;EACA,SAAKunB,IAAL,GAAY,CAAC2B,IAAb;EACA,SAAK1B,IAAL,GAAY,GAAZ;EACA,WAAO,IAAP;EACD;;EACD2B,EAAAA,UAAU,GAAG;EACX,UAAMj8B,GAAG,GAAG,KAAKk8B,cAAL,EAAZ;EACA,QAAIl8B,GAAG,KAAK,CAAZ,EAAe,MAAM,IAAI85B,oCAAJ,CAAyC,kCAAzC,CAAN;EACf,UAAMqC,IAAI,GAAG,KAAK9B,IAAL,GAAYr6B,GAAzB;EACA,UAAMo8B,IAAI,GAAG,CAAC,KAAKhC,IAAN,GAAap6B,GAA1B;EACA,UAAMq8B,IAAI,GAAG,CAAC,KAAKnC,IAAN,GAAal6B,GAA1B;EACA,UAAMs8B,IAAI,GAAG,KAAKrC,IAAL,GAAYj6B,GAAzB;EACA,UAAMu8B,IAAI,GAAG,CAAC,KAAKrC,IAAL,GAAY,KAAKI,IAAjB,GAAwB,KAAKH,IAAL,GAAY,KAAKE,IAA1C,IAAkDr6B,GAA/D;EACA,UAAMw8B,IAAI,GAAG,CAAC,CAAC,KAAKvC,IAAN,GAAa,KAAKK,IAAlB,GAAyB,KAAKF,IAAL,GAAY,KAAKD,IAA3C,IAAmDn6B,GAAhE;EACA,WAAO,IAAIg6B,oBAAJ,CAAyBmC,IAAzB,EAA+BE,IAA/B,EAAqCE,IAArC,EAA2CH,IAA3C,EAAiDE,IAAjD,EAAuDE,IAAvD,CAAP;EACD;;EACDC,EAAAA,OAAO,CAAChC,KAAD,EAAQ;EACb,UAAMiC,IAAI,GAAGjC,KAAK,CAACR,IAAN,GAAa,KAAKA,IAAlB,GAAyBQ,KAAK,CAACP,IAAN,GAAa,KAAKE,IAAxD;EACA,UAAMuC,IAAI,GAAGlC,KAAK,CAACR,IAAN,GAAa,KAAKC,IAAlB,GAAyBO,KAAK,CAACP,IAAN,GAAa,KAAKG,IAAxD;EACA,UAAMuC,IAAI,GAAGnC,KAAK,CAACR,IAAN,GAAa,KAAKE,IAAlB,GAAyBM,KAAK,CAACP,IAAN,GAAa,KAAKI,IAA3C,GAAkDG,KAAK,CAACN,IAArE;EACA,UAAM0C,IAAI,GAAGpC,KAAK,CAACL,IAAN,GAAa,KAAKH,IAAlB,GAAyBQ,KAAK,CAACJ,IAAN,GAAa,KAAKD,IAAxD;EACA,UAAM0C,IAAI,GAAGrC,KAAK,CAACL,IAAN,GAAa,KAAKF,IAAlB,GAAyBO,KAAK,CAACJ,IAAN,GAAa,KAAKA,IAAxD;EACA,UAAM0C,IAAI,GAAGtC,KAAK,CAACL,IAAN,GAAa,KAAKD,IAAlB,GAAyBM,KAAK,CAACJ,IAAN,GAAa,KAAKC,IAA3C,GAAkDG,KAAK,CAACH,IAArE;EACA,SAAKL,IAAL,GAAYyC,IAAZ;EACA,SAAKxC,IAAL,GAAYyC,IAAZ;EACA,SAAKxC,IAAL,GAAYyC,IAAZ;EACA,SAAKxC,IAAL,GAAYyC,IAAZ;EACA,SAAKxC,IAAL,GAAYyC,IAAZ;EACA,SAAKxC,IAAL,GAAYyC,IAAZ;EACA,WAAO,IAAP;EACD;;EACDxpC,EAAAA,MAAM,CAAC8G,GAAD,EAAM;EACV,QAAIA,GAAG,KAAK,IAAZ,EAAkB,OAAO,KAAP;EAClB,QAAI,EAAEA,GAAG,YAAY2/B,oBAAjB,CAAJ,EAA4C,OAAO,KAAP;EAC5C,UAAMS,KAAK,GAAGpgC,GAAd;EACA,WAAO,KAAK4/B,IAAL,KAAcQ,KAAK,CAACR,IAApB,IAA4B,KAAKC,IAAL,KAAcO,KAAK,CAACP,IAAhD,IAAwD,KAAKC,IAAL,KAAcM,KAAK,CAACN,IAA5E,IAAoF,KAAKC,IAAL,KAAcK,KAAK,CAACL,IAAxG,IAAgH,KAAKC,IAAL,KAAcI,KAAK,CAACJ,IAApI,IAA4I,KAAKC,IAAL,KAAcG,KAAK,CAACH,IAAvK;EACD;;EACDwB,EAAAA,UAAU,CAACF,MAAD,EAASC,MAAT,EAAiB;EACzB,SAAK5B,IAAL,GAAY2B,MAAZ;EACA,SAAK1B,IAAL,GAAY,GAAZ;EACA,SAAKC,IAAL,GAAY,GAAZ;EACA,SAAKC,IAAL,GAAY,GAAZ;EACA,SAAKC,IAAL,GAAYwB,MAAZ;EACA,SAAKvB,IAAL,GAAY,GAAZ;EACA,WAAO,IAAP;EACD;;EACD0C,EAAAA,UAAU,GAAG;EACX,WAAO,KAAK/C,IAAL,KAAc,CAAd,IAAmB,KAAKC,IAAL,KAAc,CAAjC,IAAsC,KAAKC,IAAL,KAAc,CAApD,IAAyD,KAAKC,IAAL,KAAc,CAAvE,IAA4E,KAAKC,IAAL,KAAc,CAA1F,IAA+F,KAAKC,IAAL,KAAc,CAApH;EACD;;EACD74B,EAAAA,KAAK,CAACm6B,MAAD,EAASC,MAAT,EAAiB;EACpB,SAAKY,OAAL,CAAazC,oBAAoB,CAAC2B,aAArB,CAAmCC,MAAnC,EAA2CC,MAA3C,CAAb;EACA,WAAO,IAAP;EACD;;EACDtB,EAAAA,aAAa,GAAG;EACd,SAAKN,IAAL,GAAY,GAAZ;EACA,SAAKC,IAAL,GAAY,GAAZ;EACA,SAAKC,IAAL,GAAY,GAAZ;EACA,SAAKC,IAAL,GAAY,GAAZ;EACA,SAAKC,IAAL,GAAY,GAAZ;EACA,SAAKC,IAAL,GAAY,GAAZ;EACA,WAAO,IAAP;EACD;;EACDp/B,EAAAA,iBAAiB,GAAG;EAClB,WAAO,IAAP;EACD;;EACDw/B,EAAAA,iBAAiB,GAAG;EAClB,QAAI1nC,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMwnC,KAAK,GAAGznC,SAAS,CAAC,CAAD,CAAvB;EACA,WAAKinC,IAAL,GAAYQ,KAAK,CAACR,IAAlB;EACA,WAAKC,IAAL,GAAYO,KAAK,CAACP,IAAlB;EACA,WAAKC,IAAL,GAAYM,KAAK,CAACN,IAAlB;EACA,WAAKC,IAAL,GAAYK,KAAK,CAACL,IAAlB;EACA,WAAKC,IAAL,GAAYI,KAAK,CAACJ,IAAlB;EACA,WAAKC,IAAL,GAAYG,KAAK,CAACH,IAAlB;EACA,aAAO,IAAP;EACD,KATD,MASO,IAAItnC,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAM+jC,GAAG,GAAGhkC,SAAS,CAAC,CAAD,CAArB;EAAA,YAA0BikC,GAAG,GAAGjkC,SAAS,CAAC,CAAD,CAAzC;EAAA,YAA8C2nC,GAAG,GAAG3nC,SAAS,CAAC,CAAD,CAA7D;EAAA,YAAkEkkC,GAAG,GAAGlkC,SAAS,CAAC,CAAD,CAAjF;EAAA,YAAsFmkC,GAAG,GAAGnkC,SAAS,CAAC,CAAD,CAArG;EAAA,YAA0G4nC,GAAG,GAAG5nC,SAAS,CAAC,CAAD,CAAzH;EACA,WAAKinC,IAAL,GAAYjD,GAAZ;EACA,WAAKkD,IAAL,GAAYjD,GAAZ;EACA,WAAKkD,IAAL,GAAYQ,GAAZ;EACA,WAAKP,IAAL,GAAYlD,GAAZ;EACA,WAAKmD,IAAL,GAAYlD,GAAZ;EACA,WAAKmD,IAAL,GAAYM,GAAZ;EACA,aAAO,IAAP;EACD;EACF;;EACDc,EAAAA,aAAa,GAAG;EACd,QAAI1oC,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMqoC,KAAK,GAAGtoC,SAAS,CAAC,CAAD,CAAvB;EACA,WAAK0oC,aAAL,CAAmBrsC,IAAI,CAAC+mC,GAAL,CAASkF,KAAT,CAAnB,EAAoCjsC,IAAI,CAACksC,GAAL,CAASD,KAAT,CAApC;EACA,aAAO,IAAP;EACD,KAJD,MAIO,IAAItoC,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMuoC,QAAQ,GAAGxoC,SAAS,CAAC,CAAD,CAA1B;EAAA,YAA+ByoC,QAAQ,GAAGzoC,SAAS,CAAC,CAAD,CAAnD;EACA,WAAKinC,IAAL,GAAYwB,QAAZ;EACA,WAAKvB,IAAL,GAAY,CAACsB,QAAb;EACA,WAAKrB,IAAL,GAAY,GAAZ;EACA,WAAKC,IAAL,GAAYoB,QAAZ;EACA,WAAKnB,IAAL,GAAYoB,QAAZ;EACA,WAAKnB,IAAL,GAAY,GAAZ;EACA,aAAO,IAAP;EACD,KATM,MASA,IAAItnC,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMqoC,KAAK,GAAGtoC,SAAS,CAAC,CAAD,CAAvB;EAAA,YAA4BjB,CAAC,GAAGiB,SAAS,CAAC,CAAD,CAAzC;EAAA,YAA8ChB,CAAC,GAAGgB,SAAS,CAAC,CAAD,CAA3D;EACA,WAAK0oC,aAAL,CAAmBrsC,IAAI,CAAC+mC,GAAL,CAASkF,KAAT,CAAnB,EAAoCjsC,IAAI,CAACksC,GAAL,CAASD,KAAT,CAApC,EAAqDvpC,CAArD,EAAwDC,CAAxD;EACA,aAAO,IAAP;EACD,KAJM,MAIA,IAAIgB,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMuoC,QAAQ,GAAGxoC,SAAS,CAAC,CAAD,CAA1B;EAAA,YAA+ByoC,QAAQ,GAAGzoC,SAAS,CAAC,CAAD,CAAnD;EAAA,YAAwDjB,CAAC,GAAGiB,SAAS,CAAC,CAAD,CAArE;EAAA,YAA0EhB,CAAC,GAAGgB,SAAS,CAAC,CAAD,CAAvF;EACA,WAAKinC,IAAL,GAAYwB,QAAZ;EACA,WAAKvB,IAAL,GAAY,CAACsB,QAAb;EACA,WAAKrB,IAAL,GAAYpoC,CAAC,GAAGA,CAAC,GAAG0pC,QAAR,GAAmBzpC,CAAC,GAAGwpC,QAAnC;EACA,WAAKpB,IAAL,GAAYoB,QAAZ;EACA,WAAKnB,IAAL,GAAYoB,QAAZ;EACA,WAAKnB,IAAL,GAAYtoC,CAAC,GAAGD,CAAC,GAAGypC,QAAR,GAAmBxpC,CAAC,GAAGypC,QAAnC;EACA,aAAO,IAAP;EACD;EACF;;EACDwB,EAAAA,gBAAgB,GAAG;EACjB,WAAO,CAAC,KAAKhD,IAAN,EAAY,KAAKC,IAAjB,EAAuB,KAAKC,IAA5B,EAAkC,KAAKC,IAAvC,EAA6C,KAAKC,IAAlD,EAAwD,KAAKC,IAA7D,CAAP;EACD;;EACDv/B,EAAAA,MAAM,CAACC,GAAD,EAAM5K,CAAN,EAAS;EACb,SAAK8sC,SAAL,CAAeliC,GAAf,EAAoB5K,CAApB;EACD;;EACD+sC,EAAAA,MAAM,GAAG;EACP,QAAInqC,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMqoC,KAAK,GAAGtoC,SAAS,CAAC,CAAD,CAAvB;EACA,WAAKypC,OAAL,CAAazC,oBAAoB,CAACqB,gBAArB,CAAsCC,KAAtC,CAAb;EACA,aAAO,IAAP;EACD,KAJD,MAIO,IAAItoC,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMuoC,QAAQ,GAAGxoC,SAAS,CAAC,CAAD,CAA1B;EAAA,YAA+ByoC,QAAQ,GAAGzoC,SAAS,CAAC,CAAD,CAAnD;EACA,WAAKypC,OAAL,CAAazC,oBAAoB,CAACqB,gBAArB,CAAsCG,QAAtC,EAAgDC,QAAhD,CAAb;EACA,aAAO,IAAP;EACD,KAJM,MAIA,IAAIzoC,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMqoC,KAAK,GAAGtoC,SAAS,CAAC,CAAD,CAAvB;EAAA,YAA4BjB,CAAC,GAAGiB,SAAS,CAAC,CAAD,CAAzC;EAAA,YAA8ChB,CAAC,GAAGgB,SAAS,CAAC,CAAD,CAA3D;EACA,WAAKypC,OAAL,CAAazC,oBAAoB,CAACqB,gBAArB,CAAsCC,KAAtC,EAA6CvpC,CAA7C,EAAgDC,CAAhD,CAAb;EACA,aAAO,IAAP;EACD,KAJM,MAIA,IAAIgB,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMuoC,QAAQ,GAAGxoC,SAAS,CAAC,CAAD,CAA1B;EAAA,YAA+ByoC,QAAQ,GAAGzoC,SAAS,CAAC,CAAD,CAAnD;EAAA,YAAwDjB,CAAC,GAAGiB,SAAS,CAAC,CAAD,CAArE;EAAA,YAA0EhB,CAAC,GAAGgB,SAAS,CAAC,CAAD,CAAvF;EACA,WAAKypC,OAAL,CAAazC,oBAAoB,CAACqB,gBAArB,CAAsCG,QAAtC,EAAgDC,QAAhD,EAA0D1pC,CAA1D,EAA6DC,CAA7D,CAAb;EACA,aAAO,IAAP;EACD;EACF;;EACDkqC,EAAAA,cAAc,GAAG;EACf,WAAO,KAAKjC,IAAL,GAAY,KAAKI,IAAjB,GAAwB,KAAKH,IAAL,GAAY,KAAKE,IAAhD;EACD;;EACDgD,EAAAA,aAAa,CAAC3C,KAAD,EAAQ;EACnB,UAAMiC,IAAI,GAAG,KAAKzC,IAAL,GAAYQ,KAAK,CAACR,IAAlB,GAAyB,KAAKC,IAAL,GAAYO,KAAK,CAACL,IAAxD;EACA,UAAMuC,IAAI,GAAG,KAAK1C,IAAL,GAAYQ,KAAK,CAACP,IAAlB,GAAyB,KAAKA,IAAL,GAAYO,KAAK,CAACJ,IAAxD;EACA,UAAMuC,IAAI,GAAG,KAAK3C,IAAL,GAAYQ,KAAK,CAACN,IAAlB,GAAyB,KAAKD,IAAL,GAAYO,KAAK,CAACH,IAA3C,GAAkD,KAAKH,IAApE;EACA,UAAM0C,IAAI,GAAG,KAAKzC,IAAL,GAAYK,KAAK,CAACR,IAAlB,GAAyB,KAAKI,IAAL,GAAYI,KAAK,CAACL,IAAxD;EACA,UAAM0C,IAAI,GAAG,KAAK1C,IAAL,GAAYK,KAAK,CAACP,IAAlB,GAAyB,KAAKG,IAAL,GAAYI,KAAK,CAACJ,IAAxD;EACA,UAAM0C,IAAI,GAAG,KAAK3C,IAAL,GAAYK,KAAK,CAACN,IAAlB,GAAyB,KAAKE,IAAL,GAAYI,KAAK,CAACH,IAA3C,GAAkD,KAAKA,IAApE;EACA,SAAKL,IAAL,GAAYyC,IAAZ;EACA,SAAKxC,IAAL,GAAYyC,IAAZ;EACA,SAAKxC,IAAL,GAAYyC,IAAZ;EACA,SAAKxC,IAAL,GAAYyC,IAAZ;EACA,SAAKxC,IAAL,GAAYyC,IAAZ;EACA,SAAKxC,IAAL,GAAYyC,IAAZ;EACA,WAAO,IAAP;EACD;;EACD7B,EAAAA,UAAU,CAACF,MAAD,EAASC,MAAT,EAAiB;EACzB,SAAKhB,IAAL,GAAY,GAAZ;EACA,SAAKC,IAAL,GAAYc,MAAZ;EACA,SAAKb,IAAL,GAAY,GAAZ;EACA,SAAKC,IAAL,GAAYa,MAAZ;EACA,SAAKZ,IAAL,GAAY,GAAZ;EACA,SAAKC,IAAL,GAAY,GAAZ;EACA,WAAO,IAAP;EACD;;EACDr/B,EAAAA,MAAM,GAAG;EACP,WAAO,KAAP;EACD;;EACD1F,EAAAA,KAAK,GAAG;EACN,QAAI;EACF,aAAO,IAAP;EACD,KAFD,CAEE,OAAO8L,EAAP,EAAW;EACX,UAAIA,EAAE,YAAY9R,SAAlB,EACE4D,MAAM,CAACC,oBAAP,GADF,KAEK,MAAMiO,EAAN;EACN,KAND,SAMU;;EACV,WAAO,IAAP;EACD;;EACDpD,EAAAA,SAAS,CAAClM,CAAD,EAAIC,CAAJ,EAAO;EACd,SAAKyqC,OAAL,CAAazC,oBAAoB,CAACa,mBAArB,CAAyC9oC,CAAzC,EAA4CC,CAA5C,CAAb;EACA,WAAO,IAAP;EACD;;EACDopC,EAAAA,eAAe,GAAG;EAChB,QAAIpoC,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMlB,CAAC,GAAGiB,SAAS,CAAC,CAAD,CAAnB;EAAA,YAAwBhB,CAAC,GAAGgB,SAAS,CAAC,CAAD,CAArC;EACA,UAAIjB,CAAC,KAAK,GAAN,IAAaC,CAAC,KAAK,GAAvB,EACE,MAAM,IAAIjC,wBAAJ,CAA6B,oCAA7B,CAAN;;EAEF,UAAIgC,CAAC,KAAKC,CAAV,EAAa;EACX,aAAKioC,IAAL,GAAY,GAAZ;EACA,aAAKC,IAAL,GAAY,GAAZ;EACA,aAAKC,IAAL,GAAY,GAAZ;EACA,aAAKC,IAAL,GAAY,GAAZ;EACA,aAAKC,IAAL,GAAY,GAAZ;EACA,aAAKC,IAAL,GAAY,GAAZ;EACA,eAAO,IAAP;EACD;;EACD,YAAMv5B,CAAC,GAAG1R,IAAI,CAAC2G,IAAL,CAAUjE,CAAC,GAAGA,CAAJ,GAAQC,CAAC,GAAGA,CAAtB,CAAV;EACA,YAAMokC,GAAG,GAAGpkC,CAAC,GAAG+O,CAAhB;EACA,YAAMw6B,GAAG,GAAGxpC,CAAC,GAAGgP,CAAhB;EACA,WAAKo8B,MAAL,CAAY,CAAC/G,GAAb,EAAkBmF,GAAlB;EACA,WAAK95B,KAAL,CAAW,CAAX,EAAc,CAAC,CAAf;EACA,WAAK07B,MAAL,CAAY/G,GAAZ,EAAiBmF,GAAjB;EACA,aAAO,IAAP;EACD,KArBD,MAqBO,IAAIvoC,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAM8e,EAAE,GAAG/e,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyBgf,EAAE,GAAGhf,SAAS,CAAC,CAAD,CAAvC;EAAA,YAA4C9D,EAAE,GAAG8D,SAAS,CAAC,CAAD,CAA1D;EAAA,YAA+D6I,EAAE,GAAG7I,SAAS,CAAC,CAAD,CAA7E;EACA,UAAI+e,EAAE,KAAK7iB,EAAP,IAAa8iB,EAAE,KAAKnW,EAAxB,EACE,MAAM,IAAI9L,wBAAJ,CAA6B,yCAA7B,CAAN;EAEF,WAAK+qC,gBAAL,CAAsB,CAAC/oB,EAAvB,EAA2B,CAACC,EAA5B;EACA,YAAMnc,EAAE,GAAG3G,EAAE,GAAG6iB,EAAhB;EACA,YAAMjc,EAAE,GAAG+F,EAAE,GAAGmW,EAAhB;EACA,YAAMjR,CAAC,GAAG1R,IAAI,CAAC2G,IAAL,CAAUH,EAAE,GAAGA,EAAL,GAAUC,EAAE,GAAGA,EAAzB,CAAV;EACA,YAAMsgC,GAAG,GAAGtgC,EAAE,GAAGiL,CAAjB;EACA,YAAMw6B,GAAG,GAAG1lC,EAAE,GAAGkL,CAAjB;EACA,WAAKo8B,MAAL,CAAY,CAAC/G,GAAb,EAAkBmF,GAAlB;EACA,WAAK95B,KAAL,CAAW,CAAX,EAAc,CAAC,CAAf;EACA,WAAK07B,MAAL,CAAY/G,GAAZ,EAAiBmF,GAAjB;EACA,WAAKt9B,SAAL,CAAe8T,EAAf,EAAmBC,EAAnB;EACA,aAAO,IAAP;EACD;EACF;;EACDliB,EAAAA,QAAQ,GAAG;EACT,WAAO,2BAA2B,KAAKmqC,IAAhC,GAAuC,IAAvC,GAA8C,KAAKC,IAAnD,GAA0D,IAA1D,GAAiE,KAAKC,IAAtE,GAA6E,MAA7E,GAAsF,KAAKC,IAA3F,GAAkG,IAAlG,GAAyG,KAAKC,IAA9G,GAAqH,IAArH,GAA4H,KAAKC,IAAjI,GAAwI,IAA/I;EACD;;EACDQ,EAAAA,gBAAgB,CAACjlC,EAAD,EAAKC,EAAL,EAAS;EACvB,SAAKmkC,IAAL,GAAY,GAAZ;EACA,SAAKC,IAAL,GAAY,GAAZ;EACA,SAAKC,IAAL,GAAYtkC,EAAZ;EACA,SAAKukC,IAAL,GAAY,GAAZ;EACA,SAAKC,IAAL,GAAY,GAAZ;EACA,SAAKC,IAAL,GAAYxkC,EAAZ;EACA,WAAO,IAAP;EACD;;EACDunC,EAAAA,KAAK,CAACrC,MAAD,EAASC,MAAT,EAAiB;EACpB,SAAKwB,OAAL,CAAazC,oBAAoB,CAACe,aAArB,CAAmCC,MAAnC,EAA2CC,MAA3C,CAAb;EACA,WAAO,IAAP;EACD;;EACDiC,EAAAA,SAAS,GAAG;EACV,QAAIlqC,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMsb,CAAC,GAAGvb,SAAS,CAAC,CAAD,CAAnB;EACA,YAAMsqC,EAAE,GAAG/uB,CAAC,CAAC5Y,IAAF,EAAX;EACA2nC,MAAAA,EAAE,CAACvqC,KAAH,CAAS,IAAT;EACA,aAAOuqC,EAAP;EACD,KALD,MAKO,IAAItqC,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,UAAID,SAAS,CAAC,CAAD,CAAT,YAAwBc,UAAxB,IAAsCd,SAAS,CAAC,CAAD,CAAT,YAAwBc,UAAlE,EAA8E;EAC5E,cAAMsX,GAAG,GAAGpY,SAAS,CAAC,CAAD,CAArB;EAAA,cAA0BsY,IAAI,GAAGtY,SAAS,CAAC,CAAD,CAA1C;EACA,cAAMuqC,EAAE,GAAG,KAAKtD,IAAL,GAAY7uB,GAAG,CAACrZ,CAAhB,GAAoB,KAAKmoC,IAAL,GAAY9uB,GAAG,CAACpZ,CAApC,GAAwC,KAAKmoC,IAAxD;EACA,cAAMqD,EAAE,GAAG,KAAKpD,IAAL,GAAYhvB,GAAG,CAACrZ,CAAhB,GAAoB,KAAKsoC,IAAL,GAAYjvB,GAAG,CAACpZ,CAApC,GAAwC,KAAKsoC,IAAxD;EACAhvB,QAAAA,IAAI,CAACvZ,CAAL,GAASwrC,EAAT;EACAjyB,QAAAA,IAAI,CAACtZ,CAAL,GAASwrC,EAAT;EACA,eAAOlyB,IAAP;EACD,OAPD,MAOO,IAAI3R,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAeuV,kBAAf,CAAZ,IAAkD5X,MAAM,CAAC4J,SAAP,CAAiBvH,SAAS,CAAC,CAAD,CAA1B,CAAtD,EAAsF;EAC3F,cAAMgI,GAAG,GAAGhI,SAAS,CAAC,CAAD,CAArB;EAAA,cAA0B5C,CAAC,GAAG4C,SAAS,CAAC,CAAD,CAAvC;;EACA,cAAMuqC,EAAE,GAAG,KAAKtD,IAAL,GAAYj/B,GAAG,CAAChG,WAAJ,CAAgB5E,CAAhB,EAAmB,CAAnB,CAAZ,GAAoC,KAAK8pC,IAAL,GAAYl/B,GAAG,CAAChG,WAAJ,CAAgB5E,CAAhB,EAAmB,CAAnB,CAAhD,GAAwE,KAAK+pC,IAAxF;;EACA,cAAMqD,EAAE,GAAG,KAAKpD,IAAL,GAAYp/B,GAAG,CAAChG,WAAJ,CAAgB5E,CAAhB,EAAmB,CAAnB,CAAZ,GAAoC,KAAKiqC,IAAL,GAAYr/B,GAAG,CAAChG,WAAJ,CAAgB5E,CAAhB,EAAmB,CAAnB,CAAhD,GAAwE,KAAKkqC,IAAxF;;EACAt/B,QAAAA,GAAG,CAAC3G,WAAJ,CAAgBjE,CAAhB,EAAmB,CAAnB,EAAsBmtC,EAAtB;EACAviC,QAAAA,GAAG,CAAC3G,WAAJ,CAAgBjE,CAAhB,EAAmB,CAAnB,EAAsBotC,EAAtB;EACD;EACF;EACF;;EACDnM,EAAAA,OAAO,GAAG;EACR,QAAIr+B,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMlB,CAAC,GAAGiB,SAAS,CAAC,CAAD,CAAnB;EAAA,YAAwBhB,CAAC,GAAGgB,SAAS,CAAC,CAAD,CAArC;EACA,WAAKypC,OAAL,CAAazC,oBAAoB,CAACmB,kBAArB,CAAwCppC,CAAxC,EAA2CC,CAA3C,CAAb;EACA,aAAO,IAAP;EACD,KAJD,MAIO,IAAIgB,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAM8e,EAAE,GAAG/e,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyBgf,EAAE,GAAGhf,SAAS,CAAC,CAAD,CAAvC;EAAA,YAA4C9D,EAAE,GAAG8D,SAAS,CAAC,CAAD,CAA1D;EAAA,YAA+D6I,EAAE,GAAG7I,SAAS,CAAC,CAAD,CAA7E;EACA,WAAKypC,OAAL,CAAazC,oBAAoB,CAACmB,kBAArB,CAAwCppB,EAAxC,EAA4CC,EAA5C,EAAgD9iB,EAAhD,EAAoD2M,EAApD,CAAb;EACA,aAAO,IAAP;EACD;EACF;;EACD,MAAIxF,WAAJ,GAAkB;EAChB,WAAO,CAACC,QAAD,EAAYwE,wBAAZ,CAAP;EACD;;EA9XuC;;ECR3B,MAAM2iC,MAAN,CAAa;EAC1B,SAAOC,KAAP,CAAa/mC,CAAb,EAAgBC,CAAhB,EAAmB;EACjB,UAAMlG,CAAC,GAAGkG,CAAC,CAAC3D,MAAZ;EACA,QAAI0D,CAAC,CAAC1D,MAAF,KAAavC,CAAb,IAAkBiG,CAAC,CAAC,CAAD,CAAD,CAAK1D,MAAL,KAAgBvC,CAAtC,EAAyC,MAAM,IAAIX,wBAAJ,CAA6B,+BAA7B,CAAN;;EACzC,SAAK,IAAIK,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGM,CAApB,EAAuBN,CAAC,EAAxB,EAA4B;EAC1B,UAAIutC,aAAa,GAAGvtC,CAApB;;EACA,WAAK,IAAI8f,CAAC,GAAG9f,CAAC,GAAG,CAAjB,EAAoB8f,CAAC,GAAGxf,CAAxB,EAA2Bwf,CAAC,EAA5B,EAAgC,IAAI7gB,IAAI,CAACC,GAAL,CAASqH,CAAC,CAACuZ,CAAD,CAAD,CAAK9f,CAAL,CAAT,IAAoBf,IAAI,CAACC,GAAL,CAASqH,CAAC,CAACgnC,aAAD,CAAD,CAAiBvtC,CAAjB,CAAT,CAAxB,EAAuDutC,aAAa,GAAGztB,CAAhB;;EACvF,UAAIvZ,CAAC,CAACgnC,aAAD,CAAD,CAAiBvtC,CAAjB,MAAwB,GAA5B,EAAiC,OAAO,IAAP;EACjCqtC,MAAAA,MAAM,CAACG,QAAP,CAAgBjnC,CAAhB,EAAmBvG,CAAnB,EAAsButC,aAAtB;EACAF,MAAAA,MAAM,CAACG,QAAP,CAAgBhnC,CAAhB,EAAmBxG,CAAnB,EAAsButC,aAAtB;;EACA,WAAK,IAAIztB,CAAC,GAAG9f,CAAC,GAAG,CAAjB,EAAoB8f,CAAC,GAAGxf,CAAxB,EAA2Bwf,CAAC,EAA5B,EAAgC;EAC9B,cAAM2tB,SAAS,GAAGlnC,CAAC,CAACuZ,CAAD,CAAD,CAAK9f,CAAL,IAAUuG,CAAC,CAACvG,CAAD,CAAD,CAAKA,CAAL,CAA5B;;EACA,aAAK,IAAIuiB,CAAC,GAAGjiB,CAAC,GAAG,CAAjB,EAAoBiiB,CAAC,IAAIviB,CAAzB,EAA4BuiB,CAAC,EAA7B,EAAiChc,CAAC,CAACuZ,CAAD,CAAD,CAAKyC,CAAL,KAAWhc,CAAC,CAACvG,CAAD,CAAD,CAAKuiB,CAAL,IAAUkrB,SAArB;;EACjCjnC,QAAAA,CAAC,CAACsZ,CAAD,CAAD,IAAQtZ,CAAC,CAACxG,CAAD,CAAD,GAAOytC,SAAf;EACD;EACF;;EACD,UAAMC,QAAQ,GAAG,IAAI5jC,KAAJ,CAAUxJ,CAAV,EAAayJ,IAAb,CAAkB,IAAlB,CAAjB;;EACA,SAAK,IAAI+V,CAAC,GAAGxf,CAAC,GAAG,CAAjB,EAAoBwf,CAAC,IAAI,CAAzB,EAA4BA,CAAC,EAA7B,EAAiC;EAC/B,UAAI3K,CAAC,GAAG,GAAR;;EACA,WAAK,IAAIoN,CAAC,GAAGzC,CAAC,GAAG,CAAjB,EAAoByC,CAAC,GAAGjiB,CAAxB,EAA2BiiB,CAAC,EAA5B,EAAgCpN,CAAC,IAAI5O,CAAC,CAACuZ,CAAD,CAAD,CAAKyC,CAAL,IAAUmrB,QAAQ,CAACnrB,CAAD,CAAvB;;EAChCmrB,MAAAA,QAAQ,CAAC5tB,CAAD,CAAR,GAAc,CAACtZ,CAAC,CAACsZ,CAAD,CAAD,GAAO3K,CAAR,IAAa5O,CAAC,CAACuZ,CAAD,CAAD,CAAKA,CAAL,CAA3B;EACD;;EACD,WAAO4tB,QAAP;EACD;;EACD,SAAOF,QAAP,GAAkB;EAChB,QAAIjtC,MAAM,CAAC4J,SAAP,CAAiBvH,SAAS,CAAC,CAAD,CAA1B,KAAmCA,SAAS,CAAC,CAAD,CAAT,YAAwBkH,KAAxB,IAAiCvJ,MAAM,CAAC4J,SAAP,CAAiBvH,SAAS,CAAC,CAAD,CAA1B,CAAxE,EAAyG;EACvG,YAAM8B,CAAC,GAAG9B,SAAS,CAAC,CAAD,CAAnB;EAAA,YAAwB5C,CAAC,GAAG4C,SAAS,CAAC,CAAD,CAArC;EAAA,YAA0Ckd,CAAC,GAAGld,SAAS,CAAC,CAAD,CAAvD;EACA,UAAI5C,CAAC,KAAK8f,CAAV,EAAa,OAAO,IAAP;;EACb,WAAK,IAAIojB,GAAG,GAAG,CAAf,EAAkBA,GAAG,GAAGx+B,CAAC,CAAC,CAAD,CAAD,CAAK7B,MAA7B,EAAqCqgC,GAAG,EAAxC,EAA4C;EAC1C,cAAMnD,IAAI,GAAGr7B,CAAC,CAAC1E,CAAD,CAAD,CAAKkjC,GAAL,CAAb;EACAx+B,QAAAA,CAAC,CAAC1E,CAAD,CAAD,CAAKkjC,GAAL,IAAYx+B,CAAC,CAACob,CAAD,CAAD,CAAKojB,GAAL,CAAZ;EACAx+B,QAAAA,CAAC,CAACob,CAAD,CAAD,CAAKojB,GAAL,IAAYnD,IAAZ;EACD;EACF,KARD,MAQO,IAAIx/B,MAAM,CAAC4J,SAAP,CAAiBvH,SAAS,CAAC,CAAD,CAA1B,KAAmCA,SAAS,CAAC,CAAD,CAAT,YAAwBkH,KAAxB,IAAiCvJ,MAAM,CAAC4J,SAAP,CAAiBvH,SAAS,CAAC,CAAD,CAA1B,CAAxE,EAAyG;EAC9G,YAAM8B,CAAC,GAAG9B,SAAS,CAAC,CAAD,CAAnB;EAAA,YAAwB5C,CAAC,GAAG4C,SAAS,CAAC,CAAD,CAArC;EAAA,YAA0Ckd,CAAC,GAAGld,SAAS,CAAC,CAAD,CAAvD;EACA,UAAI5C,CAAC,KAAK8f,CAAV,EAAa,OAAO,IAAP;EACb,YAAMigB,IAAI,GAAGr7B,CAAC,CAAC1E,CAAD,CAAd;EACA0E,MAAAA,CAAC,CAAC1E,CAAD,CAAD,GAAO0E,CAAC,CAACob,CAAD,CAAR;EACApb,MAAAA,CAAC,CAACob,CAAD,CAAD,GAAOigB,IAAP;EACD;EACF;;EAxCyB;;ECCb,MAAM4N,2BAAN,CAAkC;EAC/CtuC,EAAAA,WAAW,GAAG;EACZsuC,IAAAA,2BAA2B,CAACjrC,YAA5B,CAAyCC,KAAzC,CAA+C,IAA/C,EAAqDC,SAArD;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKkrC,KAAL,GAAa,IAAb;EACA,SAAKC,KAAL,GAAa,IAAb;EACA,SAAKC,KAAL,GAAa,IAAb;EACA,SAAKC,MAAL,GAAc,IAAd;EACA,SAAKC,MAAL,GAAc,IAAd;EACA,SAAKC,MAAL,GAAc,IAAd;EACA,SAAKpE,IAAL,GAAY,IAAZ;EACA,SAAKC,IAAL,GAAY,IAAZ;EACA,SAAKC,IAAL,GAAY,IAAZ;EACA,SAAKC,IAAL,GAAY,IAAZ;EACA,SAAKC,IAAL,GAAY,IAAZ;EACA,SAAKC,IAAL,GAAY,IAAZ;EACA,UAAMgE,IAAI,GAAGtrC,SAAS,CAAC,CAAD,CAAtB;EAAA,UAA2BurC,IAAI,GAAGvrC,SAAS,CAAC,CAAD,CAA3C;EAAA,UAAgDwrC,IAAI,GAAGxrC,SAAS,CAAC,CAAD,CAAhE;EAAA,UAAqEyrC,KAAK,GAAGzrC,SAAS,CAAC,CAAD,CAAtF;EAAA,UAA2F0rC,KAAK,GAAG1rC,SAAS,CAAC,CAAD,CAA5G;EAAA,UAAiH2rC,KAAK,GAAG3rC,SAAS,CAAC,CAAD,CAAlI;EACA,SAAKgrC,KAAL,GAAaM,IAAb;EACA,SAAKL,KAAL,GAAaM,IAAb;EACA,SAAKL,KAAL,GAAaM,IAAb;EACA,SAAKL,MAAL,GAAcM,KAAd;EACA,SAAKL,MAAL,GAAcM,KAAd;EACA,SAAKL,MAAL,GAAcM,KAAd;EACD;;EACDjB,EAAAA,KAAK,CAAC9mC,CAAD,EAAI;EACP,UAAMD,CAAC,GAAG,CAAC,CAAC,KAAKqnC,KAAL,CAAWjsC,CAAZ,EAAe,KAAKisC,KAAL,CAAWhsC,CAA1B,EAA6B,CAA7B,CAAD,EAAkC,CAAC,KAAKisC,KAAL,CAAWlsC,CAAZ,EAAe,KAAKksC,KAAL,CAAWjsC,CAA1B,EAA6B,CAA7B,CAAlC,EAAmE,CAAC,KAAKksC,KAAL,CAAWnsC,CAAZ,EAAe,KAAKmsC,KAAL,CAAWlsC,CAA1B,EAA6B,CAA7B,CAAnE,CAAV;EACA,WAAOyrC,MAAM,CAACC,KAAP,CAAa/mC,CAAb,EAAgBC,CAAhB,CAAP;EACD;;EACDgoC,EAAAA,OAAO,GAAG;EACR,UAAM/G,EAAE,GAAG,CAAC,KAAKsG,MAAL,CAAYpsC,CAAb,EAAgB,KAAKqsC,MAAL,CAAYrsC,CAA5B,EAA+B,KAAKssC,MAAL,CAAYtsC,CAA3C,CAAX;EACA,UAAM8sC,IAAI,GAAG,KAAKnB,KAAL,CAAW7F,EAAX,CAAb;EACA,QAAIgH,IAAI,KAAK,IAAb,EAAmB,OAAO,KAAP;EACnB,SAAK5E,IAAL,GAAY4E,IAAI,CAAC,CAAD,CAAhB;EACA,SAAK3E,IAAL,GAAY2E,IAAI,CAAC,CAAD,CAAhB;EACA,SAAK1E,IAAL,GAAY0E,IAAI,CAAC,CAAD,CAAhB;EACA,UAAM/G,EAAE,GAAG,CAAC,KAAKqG,MAAL,CAAYnsC,CAAb,EAAgB,KAAKosC,MAAL,CAAYpsC,CAA5B,EAA+B,KAAKqsC,MAAL,CAAYrsC,CAA3C,CAAX;EACA,UAAM8sC,IAAI,GAAG,KAAKpB,KAAL,CAAW5F,EAAX,CAAb;EACA,QAAIgH,IAAI,KAAK,IAAb,EAAmB,OAAO,KAAP;EACnB,SAAK1E,IAAL,GAAY0E,IAAI,CAAC,CAAD,CAAhB;EACA,SAAKzE,IAAL,GAAYyE,IAAI,CAAC,CAAD,CAAhB;EACA,SAAKxE,IAAL,GAAYwE,IAAI,CAAC,CAAD,CAAhB;EACA,WAAO,IAAP;EACD;;EACDC,EAAAA,iBAAiB,GAAG;EAClB,UAAMC,UAAU,GAAG,KAAKJ,OAAL,EAAnB;EACA,QAAII,UAAJ,EAAgB,OAAO,IAAIhF,oBAAJ,CAAyB,KAAKC,IAA9B,EAAoC,KAAKC,IAAzC,EAA+C,KAAKC,IAApD,EAA0D,KAAKC,IAA/D,EAAqE,KAAKC,IAA1E,EAAgF,KAAKC,IAArF,CAAP;EAChB,WAAO,IAAP;EACD;;EAhD8C;;ECGlC,MAAM2E,2BAAN,CAAkC;EAC/C,SAAOC,mBAAP,CAA2BZ,IAA3B,EAAiCC,IAAjC,EAAuCE,KAAvC,EAA8CC,KAA9C,EAAqD;EACnD,UAAMS,KAAK,GAAG,IAAIrrC,UAAJ,CAAewqC,IAAI,CAACvsC,CAAL,GAAS2sC,KAAK,CAAC3sC,CAAf,GAAmB0sC,KAAK,CAAC1sC,CAAxC,EAA2CusC,IAAI,CAACtsC,CAAL,GAAS0sC,KAAK,CAAC1sC,CAAf,GAAmBysC,KAAK,CAACzsC,CAApE,CAAd;EACA,UAAMotC,GAAG,GAAG3K,KAAK,CAAC4B,oBAAN,CAA2BkI,IAA3B,EAAiCD,IAAjC,EAAuCa,KAAvC,CAAZ;EACA,UAAME,OAAO,GAAGd,IAAI,CAACpoC,QAAL,CAAcmoC,IAAd,CAAhB;EACA,UAAMgB,QAAQ,GAAGZ,KAAK,CAACvoC,QAAN,CAAesoC,KAAf,CAAjB;EACA,QAAIY,OAAO,KAAK,GAAhB,EAAqB,OAAO,IAAIrF,oBAAJ,EAAP;EACrB,UAAMv4B,KAAK,GAAG69B,QAAQ,GAAGD,OAAzB;EACA,UAAM5E,KAAK,GAAGT,oBAAoB,CAACa,mBAArB,CAAyC,CAACyD,IAAI,CAACvsC,CAA/C,EAAkD,CAACusC,IAAI,CAACtsC,CAAxD,CAAd;EACAyoC,IAAAA,KAAK,CAAC0C,MAAN,CAAaiC,GAAb;EACA3E,IAAAA,KAAK,CAACh5B,KAAN,CAAYA,KAAZ,EAAmBA,KAAnB;EACAg5B,IAAAA,KAAK,CAACx8B,SAAN,CAAgBwgC,KAAK,CAAC1sC,CAAtB,EAAyB0sC,KAAK,CAACzsC,CAA/B;EACA,WAAOyoC,KAAP;EACD;;EACD,SAAO8E,wBAAP,GAAkC;EAChC,QAAIvsC,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,UAAID,SAAS,CAAC,CAAD,CAAT,YAAwBc,UAAxB,IAAsCd,SAAS,CAAC,CAAD,CAAT,YAAwBc,UAAlE,EAA8E;EAC5E,cAAMwqC,IAAI,GAAGtrC,SAAS,CAAC,CAAD,CAAtB;EAAA,cAA2ByrC,KAAK,GAAGzrC,SAAS,CAAC,CAAD,CAA5C;EACA,cAAM6C,EAAE,GAAG4oC,KAAK,CAAC1sC,CAAN,GAAUusC,IAAI,CAACvsC,CAA1B;EACA,cAAM+D,EAAE,GAAG2oC,KAAK,CAACzsC,CAAN,GAAUssC,IAAI,CAACtsC,CAA1B;EACA,eAAOgoC,oBAAoB,CAACa,mBAArB,CAAyChlC,EAAzC,EAA6CC,EAA7C,CAAP;EACD,OALD,MAKO,IAAI9C,SAAS,CAAC,CAAD,CAAT,YAAwBkH,KAAxB,IAAiClH,SAAS,CAAC,CAAD,CAAT,YAAwBkH,KAA7D,EAAoE;EACzE,cAAMkR,GAAG,GAAGpY,SAAS,CAAC,CAAD,CAArB;EAAA,cAA0BsY,IAAI,GAAGtY,SAAS,CAAC,CAAD,CAA1C;EACA,YAAIoY,GAAG,CAACnY,MAAJ,KAAeqY,IAAI,CAACrY,MAAxB,EAAgC,MAAM,IAAIlD,wBAAJ,CAA6B,6CAA7B,CAAN;EAChC,YAAIqb,GAAG,CAACnY,MAAJ,IAAc,CAAlB,EAAqB,MAAM,IAAIlD,wBAAJ,CAA6B,wBAA7B,CAAN;EACrB,YAAIqb,GAAG,CAACnY,MAAJ,GAAa,CAAjB,EAAoB,MAAM,IAAIlD,wBAAJ,CAA6B,yBAA7B,CAAN;EACpB,YAAIqb,GAAG,CAACnY,MAAJ,KAAe,CAAnB,EAAsB,OAAOgsC,2BAA2B,CAACM,wBAA5B,CAAqDn0B,GAAG,CAAC,CAAD,CAAxD,EAA6DE,IAAI,CAAC,CAAD,CAAjE,CAAP;EACtB,YAAIF,GAAG,CAACnY,MAAJ,KAAe,CAAnB,EAAsB,OAAOgsC,2BAA2B,CAACM,wBAA5B,CAAqDn0B,GAAG,CAAC,CAAD,CAAxD,EAA6DA,GAAG,CAAC,CAAD,CAAhE,EAAqEE,IAAI,CAAC,CAAD,CAAzE,EAA8EA,IAAI,CAAC,CAAD,CAAlF,CAAP;EACtB,eAAO2zB,2BAA2B,CAACM,wBAA5B,CAAqDn0B,GAAG,CAAC,CAAD,CAAxD,EAA6DA,GAAG,CAAC,CAAD,CAAhE,EAAqEA,GAAG,CAAC,CAAD,CAAxE,EAA6EE,IAAI,CAAC,CAAD,CAAjF,EAAsFA,IAAI,CAAC,CAAD,CAA1F,EAA+FA,IAAI,CAAC,CAAD,CAAnG,CAAP;EACD;EACF,KAfD,MAeO,IAAItY,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMqrC,IAAI,GAAGtrC,SAAS,CAAC,CAAD,CAAtB;EAAA,YAA2BurC,IAAI,GAAGvrC,SAAS,CAAC,CAAD,CAA3C;EAAA,YAAgDyrC,KAAK,GAAGzrC,SAAS,CAAC,CAAD,CAAjE;EAAA,YAAsE0rC,KAAK,GAAG1rC,SAAS,CAAC,CAAD,CAAvF;EACA,YAAMmsC,KAAK,GAAG,IAAIrrC,UAAJ,CAAe4qC,KAAK,CAAC3sC,CAAN,GAAU0sC,KAAK,CAAC1sC,CAA/B,EAAkC2sC,KAAK,CAAC1sC,CAAN,GAAUysC,KAAK,CAACzsC,CAAlD,CAAd;EACA,YAAMotC,GAAG,GAAG3K,KAAK,CAAC4B,oBAAN,CAA2BkI,IAA3B,EAAiCD,IAAjC,EAAuCa,KAAvC,CAAZ;EACA,YAAME,OAAO,GAAGd,IAAI,CAACpoC,QAAL,CAAcmoC,IAAd,CAAhB;EACA,YAAMgB,QAAQ,GAAGZ,KAAK,CAACvoC,QAAN,CAAesoC,KAAf,CAAjB;EACA,UAAIY,OAAO,KAAK,GAAhB,EAAqB,OAAO,IAAP;EACrB,YAAM59B,KAAK,GAAG69B,QAAQ,GAAGD,OAAzB;EACA,YAAM5E,KAAK,GAAGT,oBAAoB,CAACa,mBAArB,CAAyC,CAACyD,IAAI,CAACvsC,CAA/C,EAAkD,CAACusC,IAAI,CAACtsC,CAAxD,CAAd;EACAyoC,MAAAA,KAAK,CAAC0C,MAAN,CAAaiC,GAAb;EACA3E,MAAAA,KAAK,CAACh5B,KAAN,CAAYA,KAAZ,EAAmBA,KAAnB;EACAg5B,MAAAA,KAAK,CAACx8B,SAAN,CAAgBwgC,KAAK,CAAC1sC,CAAtB,EAAyB0sC,KAAK,CAACzsC,CAA/B;EACA,aAAOyoC,KAAP;EACD,KAbM,MAaA,IAAIznC,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMqrC,IAAI,GAAGtrC,SAAS,CAAC,CAAD,CAAtB;EAAA,YAA2BurC,IAAI,GAAGvrC,SAAS,CAAC,CAAD,CAA3C;EAAA,YAAgDwrC,IAAI,GAAGxrC,SAAS,CAAC,CAAD,CAAhE;EAAA,YAAqEyrC,KAAK,GAAGzrC,SAAS,CAAC,CAAD,CAAtF;EAAA,YAA2F0rC,KAAK,GAAG1rC,SAAS,CAAC,CAAD,CAA5G;EAAA,YAAiH2rC,KAAK,GAAG3rC,SAAS,CAAC,CAAD,CAAlI;EACA,YAAMmhC,OAAO,GAAG,IAAI4J,2BAAJ,CAAgCO,IAAhC,EAAsCC,IAAtC,EAA4CC,IAA5C,EAAkDC,KAAlD,EAAyDC,KAAzD,EAAgEC,KAAhE,CAAhB;EACA,aAAOxK,OAAO,CAAC4K,iBAAR,EAAP;EACD;EACF;;EAhD8C;;ECDlC,MAAMS,4BAAN,CAAmC;EAChD/vC,EAAAA,WAAW,GAAG;EACZ+vC,IAAAA,4BAA4B,CAAC1sC,YAA7B,CAA0CC,KAA1C,CAAgD,IAAhD,EAAsDC,SAAtD;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK2sC,OAAL,GAAe,IAAf;EACA,UAAMC,MAAM,GAAG1sC,SAAS,CAAC,CAAD,CAAxB;EACA,SAAKysC,OAAL,GAAeC,MAAf;EACD;;EACD,SAAOlqB,cAAP,CAAsBhI,IAAtB,EAA4B;EAC1B,UAAMkyB,MAAM,GAAG,IAAItnC,SAAJ,EAAf;EACAoV,IAAAA,IAAI,CAACza,KAAL,CAAW,IAAIysC,4BAAJ,CAAiCE,MAAjC,CAAX;EACA,WAAOA,MAAP;EACD;;EACD3kC,EAAAA,MAAM,CAACyS,IAAD,EAAO;EACX,QAAIA,IAAI,YAAY4H,UAAhB,IAA8B5H,IAAI,YAAYiJ,KAAlD,EAAyD,KAAKgpB,OAAL,CAAajoC,GAAb,CAAiBgW,IAAI,CAAC9T,aAAL,EAAjB;EAC1D;;EACD,MAAIrD,WAAJ,GAAkB;EAChB,WAAO,CAACkX,uBAAD,CAAP;EACD;;EAnB+C;;ECFnC,MAAMoyB,wBAAN,CAA+B;EAC5ClwC,EAAAA,WAAW,GAAG;EACZkwC,IAAAA,wBAAwB,CAAC7sC,YAAzB,CAAsCC,KAAtC,CAA4C,IAA5C,EAAkDC,SAAlD;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK8sC,MAAL,GAAc,IAAd;EACA,UAAMC,KAAK,GAAG7sC,SAAS,CAAC,CAAD,CAAvB;EACA,SAAK4sC,MAAL,GAAcC,KAAd;EACD;;EACD,SAAO7gB,GAAP,CAAWvE,EAAX,EAAeqlB,EAAf,EAAmB;EACjB,UAAMC,MAAM,GAAG,IAAIJ,wBAAJ,CAA6BG,EAA7B,CAAf;EACA,WAAOC,MAAM,CAAC/gB,GAAP,CAAWvE,EAAX,CAAP;EACD;;EACDuE,EAAAA,GAAG,CAACvE,EAAD,EAAK;EACN,UAAMulB,MAAM,GAAG,IAAI5nC,SAAJ,EAAf;;EACA,SAAK,IAAIhI,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqqB,EAAE,CAAC/L,gBAAH,EAApB,EAA2Cte,CAAC,EAA5C,EAAgD;EAC9C,YAAMme,CAAC,GAAG,KAAKqxB,MAAL,CAAY5gB,GAAZ,CAAgBvE,EAAE,CAAC1M,YAAH,CAAgB3d,CAAhB,CAAhB,CAAV;;EACA,UAAI,CAACme,CAAC,CAAC7W,OAAF,EAAL,EAAkBsoC,MAAM,CAACxoC,GAAP,CAAW+W,CAAX;EACnB;;EACD,WAAOkM,EAAE,CAAC5M,UAAH,GAAgBgJ,wBAAhB,CAAyC4K,eAAe,CAACS,eAAhB,CAAgC8d,MAAhC,CAAzC,CAAP;EACD;;EApB2C;;ECD/B,MAAMC,gBAAN,CAAuB;EACpCxwC,EAAAA,WAAW,GAAG;EACZwwC,IAAAA,gBAAgB,CAACntC,YAAjB,CAA8BC,KAA9B,CAAoC,IAApC,EAA0CC,SAA1C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKotC,YAAL,GAAoB,IAApB;EACA,SAAKC,UAAL,GAAkB,KAAlB;EACA,SAAKC,WAAL,GAAmB,IAAnB;EACA,UAAMC,KAAK,GAAGrtC,SAAS,CAAC,CAAD,CAAvB;EACA,SAAKktC,YAAL,GAAoBD,gBAAgB,CAACK,cAAjB,CAAgCD,KAAhC,CAApB;EACA,SAAKD,WAAL,GAAmBC,KAAnB;EACD;;EACD,SAAOE,OAAP,GAAiB;EACf,QAAIvtC,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMotC,KAAK,GAAGrtC,SAAS,CAAC,CAAD,CAAvB;EACA,YAAMwtC,QAAQ,GAAG,IAAIP,gBAAJ,CAAqBI,KAArB,CAAjB;EACA,aAAOG,QAAQ,CAACD,OAAT,EAAP;EACD,KAJD,MAIO,IAAIvtC,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMwtC,EAAE,GAAGztC,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyB0tC,EAAE,GAAG1tC,SAAS,CAAC,CAAD,CAAvC;EACA,YAAMwtC,QAAQ,GAAG,IAAIP,gBAAJ,CAAqBA,gBAAgB,CAACU,UAAjB,CAA4BF,EAA5B,EAAgCC,EAAhC,CAArB,CAAjB;EACA,aAAOF,QAAQ,CAACD,OAAT,EAAP;EACD,KAJM,MAIA,IAAIvtC,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMwtC,EAAE,GAAGztC,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyB0tC,EAAE,GAAG1tC,SAAS,CAAC,CAAD,CAAvC;EAAA,YAA4CsqC,EAAE,GAAGtqC,SAAS,CAAC,CAAD,CAA1D;EACA,YAAMwtC,QAAQ,GAAG,IAAIP,gBAAJ,CAAqBA,gBAAgB,CAACU,UAAjB,CAA4BF,EAA5B,EAAgCC,EAAhC,EAAoCpD,EAApC,CAArB,CAAjB;EACA,aAAOkD,QAAQ,CAACD,OAAT,EAAP;EACD;EACF;;EACD,SAAOD,cAAP,CAAsBD,KAAtB,EAA6B;EAC3B,QAAIA,KAAK,CAAC3oC,OAAN,EAAJ,EAAqB,OAAO,IAAP;EACrB,WAAO2oC,KAAK,CAAC1oC,QAAN,GAAiB2B,IAAjB,GAAwBuU,UAAxB,EAAP;EACD;;EACD,SAAO8yB,UAAP,GAAoB;EAClB,QAAI3tC,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAM2tC,IAAI,GAAG5tC,SAAS,CAAC,CAAD,CAAtB;EAAA,YAA2B6tC,IAAI,GAAG7tC,SAAS,CAAC,CAAD,CAA3C;EACA,YAAM8tC,IAAI,GAAG,IAAI1oC,SAAJ,EAAb;EACA0oC,MAAAA,IAAI,CAACtpC,GAAL,CAASopC,IAAT;EACAE,MAAAA,IAAI,CAACtpC,GAAL,CAASqpC,IAAT;EACA,aAAOC,IAAP;EACD,KAND,MAMO,IAAI9tC,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAM2tC,IAAI,GAAG5tC,SAAS,CAAC,CAAD,CAAtB;EAAA,YAA2B6tC,IAAI,GAAG7tC,SAAS,CAAC,CAAD,CAA3C;EAAA,YAAgD+tC,IAAI,GAAG/tC,SAAS,CAAC,CAAD,CAAhE;EACA,YAAM8tC,IAAI,GAAG,IAAI1oC,SAAJ,EAAb;EACA0oC,MAAAA,IAAI,CAACtpC,GAAL,CAASopC,IAAT;EACAE,MAAAA,IAAI,CAACtpC,GAAL,CAASqpC,IAAT;EACAC,MAAAA,IAAI,CAACtpC,GAAL,CAASupC,IAAT;EACA,aAAOD,IAAP;EACD;EACF;;EACDE,EAAAA,eAAe,CAACxzB,IAAD,EAAOyzB,KAAP,EAAc;EAC3B,QAAIzzB,IAAI,KAAK,IAAb,EAAmB,OAAO,IAAP;;EACnB,SAAK,IAAIpd,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGod,IAAI,CAACkB,gBAAL,EAApB,EAA6Cte,CAAC,EAA9C,EAAkD;EAChD,YAAM8wC,QAAQ,GAAG1zB,IAAI,CAACO,YAAL,CAAkB3d,CAAlB,CAAjB;EACA,UAAI,KAAK+vC,UAAL,IAAmBe,QAAQ,CAACxpC,OAAT,EAAvB,EAA2C;EAC3CupC,MAAAA,KAAK,CAACzpC,GAAN,CAAU0pC,QAAV;EACD;EACF;;EACDX,EAAAA,OAAO,GAAG;EACR,UAAMU,KAAK,GAAG,IAAI7oC,SAAJ,EAAd;;EACA,SAAK,IAAIhI,CAAC,GAAG,KAAKgwC,WAAL,CAAiBzoC,QAAjB,EAAb,EAA0CvH,CAAC,CAACmJ,OAAF,EAA1C,GAAyD;EACvD,YAAMgV,CAAC,GAAGne,CAAC,CAACkJ,IAAF,EAAV;EACA,WAAK0nC,eAAL,CAAqBzyB,CAArB,EAAwB0yB,KAAxB;EACD;;EACD,QAAIA,KAAK,CAACrpC,IAAN,OAAiB,CAArB,EAAwB;EACtB,UAAI,KAAKsoC,YAAL,KAAsB,IAA1B,EACE,OAAO,KAAKA,YAAL,CAAkBrpB,wBAAlB,EAAP;EAEF,aAAO,IAAP;EACD;;EACD,WAAO,KAAKqpB,YAAL,CAAkB5lB,aAAlB,CAAgC2mB,KAAhC,CAAP;EACD;;EApEmC;;ECOvB,MAAME,cAAN,CAAqB;EAClC1xC,EAAAA,WAAW,GAAG;EACZ0xC,IAAAA,cAAc,CAACruC,YAAf,CAA4BC,KAA5B,CAAkC,IAAlC,EAAwCC,SAAxC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKgb,QAAL,GAAgB,IAAhB;EACA,SAAKszB,iBAAL,GAAyB,KAAzB;;EACA,QAAIpuC,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B,CAA5B,MAAoC,IAAID,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC9D,YAAM8d,OAAO,GAAG/d,SAAS,CAAC,CAAD,CAAzB;EACA,WAAK8a,QAAL,GAAgBiD,OAAhB;EACD;EACF;;EACDswB,EAAAA,eAAe,CAACC,gBAAD,EAAmB;EAChC,SAAKF,iBAAL,GAAyBE,gBAAzB;EACD;;EACDC,EAAAA,IAAI,CAACpa,QAAD,EAAWqa,SAAX,EAAsB;EACxB,QAAIra,QAAQ,KAAK,IAAjB,EAAuB,OAAO,IAAP;EACvB,UAAM72B,MAAM,GAAG,KAAKmxC,YAAL,CAAkBta,QAAlB,EAA4Bqa,SAA5B,CAAf;EACA,QAAI,KAAKJ,iBAAT,EACE9wC,MAAM,CAAC0f,WAAP,CAAmBmX,QAAQ,CAACtY,WAAT,EAAnB;EAEF,WAAOve,MAAP;EACD;;EACDmxC,EAAAA,YAAY,CAACta,QAAD,EAAWqa,SAAX,EAAsB;EAChC,QAAI,KAAK1zB,QAAL,KAAkB,IAAtB,EAA4B,KAAKA,QAAL,GAAgBqZ,QAAQ,CAACtZ,UAAT,EAAhB;EAC5B,QAAIsZ,QAAQ,YAAYlN,kBAAxB,EACE,OAAO,KAAKynB,sBAAL,CAA4Bva,QAA5B,EAAsCqa,SAAtC,CAAP;EAEF,QAAIra,QAAQ,YAAYzP,OAAxB,EACE,OAAO,KAAKiqB,WAAL,CAAiBxa,QAAjB,EAA2Bqa,SAA3B,CAAP;EAEF,QAAIra,QAAQ,YAAY1Q,KAAxB,EACE,OAAO+qB,SAAS,CAACD,IAAV,CAAepa,QAAf,EAAyB,KAAKrZ,QAA9B,CAAP;EAEF,QAAIqZ,QAAQ,YAAY/R,UAAxB,EACE,OAAOosB,SAAS,CAACD,IAAV,CAAepa,QAAf,EAAyB,KAAKrZ,QAA9B,CAAP;EAEF3a,IAAAA,MAAM,CAACC,oBAAP,CAA4B,gCAAgC+zB,QAAQ,CAAClR,eAAT,EAA5D;EACA,WAAO,IAAP;EACD;;EACDyrB,EAAAA,sBAAsB,CAACE,UAAD,EAAaJ,SAAb,EAAwB;EAC5C,UAAMK,iBAAiB,GAAGL,SAAS,CAACD,IAAV,CAAeK,UAAf,EAA2B,KAAK9zB,QAAhC,CAA1B;EACA,UAAM+C,UAAU,GAAG,IAAIzY,SAAJ,EAAnB;;EACA,SAAK,IAAIhI,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyxC,iBAAiB,CAACnzB,gBAAlB,EAApB,EAA0Dte,CAAC,EAA3D,EAA+D;EAC7D,YAAM+2B,QAAQ,GAAG,KAAKoa,IAAL,CAAUM,iBAAiB,CAAC9zB,YAAlB,CAA+B3d,CAA/B,CAAV,EAA6CoxC,SAA7C,CAAjB;EACA,UAAIra,QAAQ,KAAK,IAAb,IAAqBA,QAAQ,CAACzvB,OAAT,EAAzB,EACE;EAEFmZ,MAAAA,UAAU,CAACrZ,GAAX,CAAe2vB,QAAf;EACD;;EACD,QAAI0a,iBAAiB,CAAC5rB,eAAlB,OAAwCxI,QAAQ,CAAC4D,mBAArD,EACE,OAAO,KAAKvD,QAAL,CAAcgW,gBAAd,CAA+BjT,UAAU,CAAChZ,OAAX,CAAmB,EAAnB,CAA/B,CAAP;EAEF,QAAIgqC,iBAAiB,CAAC5rB,eAAlB,OAAwCxI,QAAQ,CAAC+D,wBAArD,EACE,OAAO,KAAK1D,QAAL,CAAc8L,qBAAd,CAAoC/I,UAAU,CAAChZ,OAAX,CAAmB,EAAnB,CAApC,CAAP;EAEF,QAAIgqC,iBAAiB,CAAC5rB,eAAlB,OAAwCxI,QAAQ,CAACiE,qBAArD,EACE,OAAO,KAAK5D,QAAL,CAAc+V,kBAAd,CAAiChT,UAAU,CAAChZ,OAAX,CAAmB,EAAnB,CAAjC,CAAP;EAEF,WAAO,KAAKiW,QAAL,CAAc+I,wBAAd,CAAuChG,UAAU,CAAChZ,OAAX,CAAmB,EAAnB,CAAvC,CAAP;EACD;;EACD8pC,EAAAA,WAAW,CAACjjB,OAAD,EAAU8iB,SAAV,EAAqB;EAC9B,QAAIM,UAAU,GAAGN,SAAS,CAACD,IAAV,CAAe7iB,OAAf,EAAwB,KAAK5Q,QAA7B,CAAjB;EACA,QAAIg0B,UAAU,KAAK,IAAnB,EAAyBA,UAAU,GAAG,KAAKh0B,QAAL,CAAcmL,aAAd,EAAb;EACzB,QAAI6oB,UAAU,CAACpqC,OAAX,EAAJ,EACE,OAAOoqC,UAAP;EAEF,UAAMjqB,KAAK,GAAG,KAAK0pB,IAAL,CAAUO,UAAU,CAAC/oB,eAAX,EAAV,EAAwCyoB,SAAxC,CAAd;EACA,QAAI3pB,KAAK,KAAK,IAAV,IAAkBA,KAAK,CAACngB,OAAN,EAAtB,EACE,OAAO,KAAKoW,QAAL,CAAcmL,aAAd,EAAP;EAEF,UAAMnB,KAAK,GAAG,IAAI1f,SAAJ,EAAd;;EACA,SAAK,IAAIhI,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG0xC,UAAU,CAACzpB,kBAAX,EAApB,EAAqDjoB,CAAC,EAAtD,EAA0D;EACxD,YAAM2xC,IAAI,GAAG,KAAKR,IAAL,CAAUO,UAAU,CAAC9oB,gBAAX,CAA4B5oB,CAA5B,CAAV,EAA0CoxC,SAA1C,CAAb;EACA,UAAIO,IAAI,KAAK,IAAT,IAAiBA,IAAI,CAACrqC,OAAL,EAArB,EACE;EAEFogB,MAAAA,KAAK,CAACtgB,GAAN,CAAUuqC,IAAV;EACD;;EACD,WAAO,KAAKj0B,QAAL,CAAcmL,aAAd,CAA4BpB,KAA5B,EAAmCC,KAAK,CAACjgB,OAAN,CAAc,EAAd,CAAnC,CAAP;EACD;;EAhFiC;;EAkFpC,SAASmqC,uBAAT,GAAmC;;EACnCb,cAAc,CAACa,uBAAf,GAAyCA,uBAAzC;;EACA,MAAMC,qBAAN,CAA4B;EAC1BV,EAAAA,IAAI,CAACpa,QAAD,EAAWpW,OAAX,EAAoB;EACtB,WAAOoW,QAAP;EACD;;EACD,MAAI9wB,WAAJ,GAAkB;EAChB,WAAO,CAAC2rC,uBAAD,CAAP;EACD;;EANyB;;EAQ5B,MAAME,mBAAN,CAA0B;EACxBX,EAAAA,IAAI,CAACpa,QAAD,EAAWpW,OAAX,EAAoB;EACtB,UAAM4F,WAAW,GAAG,KAAK4qB,IAAL,CAAUpa,QAAQ,CAAC3R,cAAT,EAAV,EAAqC2R,QAArC,CAApB;EACA,QAAIA,QAAQ,YAAYnM,UAAxB,EACE,IAAIrE,WAAW,KAAK,IAApB,EAA0B,OAAO5F,OAAO,CAACgH,gBAAR,EAAP,CAA1B,KAAkE,OAAOhH,OAAO,CAACgH,gBAAR,CAAyBpB,WAAzB,CAAP;EAEpE,QAAIwQ,QAAQ,YAAY/R,UAAxB,EACE,IAAIuB,WAAW,KAAK,IAApB,EAA0B,OAAO5F,OAAO,CAAC8E,gBAAR,EAAP,CAA1B,KAAkE,OAAO9E,OAAO,CAAC8E,gBAAR,CAAyBc,WAAzB,CAAP;EAEpE,QAAIwQ,QAAQ,YAAY1Q,KAAxB,EACE,IAAIE,WAAW,KAAK,IAAhB,IAAwBA,WAAW,CAAC1jB,MAAZ,KAAuB,CAAnD,EAAsD,OAAO8d,OAAO,CAACwF,WAAR,EAAP,CAAtD,KAAyF,OAAOxF,OAAO,CAACwF,WAAR,CAAoBI,WAAW,CAAC,CAAD,CAA/B,CAAP;EAE3F,WAAOwQ,QAAP;EACD;;EACD,MAAI9wB,WAAJ,GAAkB;EAChB,WAAO,CAAC2rC,uBAAD,CAAP;EACD;;EAhBuB;;EAkB1B,MAAMG,2BAAN,CAAkC;EAChCZ,EAAAA,IAAI,CAACpa,QAAD,EAAWpW,OAAX,EAAoB;EACtB,QAAIoW,QAAQ,YAAYnM,UAAxB,EACE,OAAOjK,OAAO,CAACgH,gBAAR,CAAyB,KAAKwpB,IAAL,CAAUpa,QAAQ,CAACjR,qBAAT,EAAV,EAA4CiR,QAA5C,CAAzB,CAAP;EAEF,QAAIA,QAAQ,YAAY/R,UAAxB,EACE,OAAOrE,OAAO,CAAC8E,gBAAR,CAAyB,KAAK0rB,IAAL,CAAUpa,QAAQ,CAACjR,qBAAT,EAAV,EAA4CiR,QAA5C,CAAzB,CAAP;EAEF,QAAIA,QAAQ,YAAY1Q,KAAxB,EACE,OAAO1F,OAAO,CAACwF,WAAR,CAAoB,KAAKgrB,IAAL,CAAUpa,QAAQ,CAACjR,qBAAT,EAAV,EAA4CiR,QAA5C,CAApB,CAAP;EAEF,WAAOA,QAAP;EACD;;EACD,MAAI9wB,WAAJ,GAAkB;EAChB,WAAO,CAAC2rC,uBAAD,CAAP;EACD;;EAf+B;;EAiBlCb,cAAc,CAACc,qBAAf,GAAuCA,qBAAvC;EACAd,cAAc,CAACe,mBAAf,GAAqCA,mBAArC;EACAf,cAAc,CAACgB,2BAAf,GAA6CA,2BAA7C;;ECrIe,MAAMC,iBAAN,CAAwB;EACrC3yC,EAAAA,WAAW,GAAG;EACZ2yC,IAAAA,iBAAiB,CAACtvC,YAAlB,CAA+BC,KAA/B,CAAqC,IAArC,EAA2CC,SAA3C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKuvC,aAAL,GAAqB,IAArB;EACA,SAAKC,MAAL,GAAc,IAAd;EACA,UAAMC,YAAY,GAAGvvC,SAAS,CAAC,CAAD,CAA9B;EAAA,UAAmCwvC,KAAK,GAAGxvC,SAAS,CAAC,CAAD,CAApD;EACA,SAAKqvC,aAAL,GAAqBE,YAArB;EACA,SAAKD,MAAL,GAAcE,KAAd;EACD;;EACD,SAAOC,QAAP,CAAgBj1B,IAAhB,EAAsB+0B,YAAtB,EAAoC;EAClC,QAAI/0B,IAAI,CAACyI,eAAL,OAA2BssB,YAA/B,EAA6C,OAAO,IAAP;EAC7C,QAAIA,YAAY,KAAK90B,QAAQ,CAAC6D,mBAA1B,IAAiD9D,IAAI,CAACyI,eAAL,OAA2BxI,QAAQ,CAAC8D,mBAAzF,EAA8G,OAAO,IAAP;EAC9G,WAAO,KAAP;EACD;;EACD,SAAOoL,OAAP,GAAiB;EACf,QAAI3pB,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMua,IAAI,GAAGxa,SAAS,CAAC,CAAD,CAAtB;EAAA,YAA2BuvC,YAAY,GAAGvvC,SAAS,CAAC,CAAD,CAAnD;EACA,aAAOovC,iBAAiB,CAACzlB,OAAlB,CAA0BnP,IAA1B,EAAgC+0B,YAAhC,EAA8C,IAAInqC,SAAJ,EAA9C,CAAP;EACD,KAHD,MAGO,IAAIpF,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMua,IAAI,GAAGxa,SAAS,CAAC,CAAD,CAAtB;EAAA,YAA2BuvC,YAAY,GAAGvvC,SAAS,CAAC,CAAD,CAAnD;EAAA,YAAwD8tC,IAAI,GAAG9tC,SAAS,CAAC,CAAD,CAAxE;EACA,UAAIwa,IAAI,CAACyI,eAAL,OAA2BssB,YAA/B,EACEzB,IAAI,CAACtpC,GAAL,CAASgW,IAAT,EADF,KAEK,IAAIA,IAAI,YAAYyM,kBAApB,EACHzM,IAAI,CAACza,KAAL,CAAW,IAAIqvC,iBAAJ,CAAsBG,YAAtB,EAAoCzB,IAApC,CAAX;EAEF,aAAOA,IAAP;EACD;EACF;;EACD/lC,EAAAA,MAAM,CAACyS,IAAD,EAAO;EACX,QAAI,KAAK60B,aAAL,KAAuB,IAAvB,IAA+BD,iBAAiB,CAACK,QAAlB,CAA2Bj1B,IAA3B,EAAiC,KAAK60B,aAAtC,CAAnC,EAAyF,KAAKC,MAAL,CAAY9qC,GAAZ,CAAgBgW,IAAhB;EAC1F;;EACD,MAAInX,WAAJ,GAAkB;EAChB,WAAO,CAAC8e,cAAD,CAAP;EACD;;EAnCoC;;ECAxB,MAAMutB,cAAN,CAAqB;EAClC,SAAO1jB,GAAP,GAAa;EACX,QAAIhsB,SAAS,CAAC,CAAD,CAAT,YAAwBya,QAAxB,IAAoC9T,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAe2vC,OAAf,CAApD,EAA2E;EACzE,YAAMn1B,IAAI,GAAGxa,SAAS,CAAC,CAAD,CAAtB;EAAA,YAA2B8sC,EAAE,GAAG9sC,SAAS,CAAC,CAAD,CAAzC;EACA,YAAMgtC,MAAM,GAAG,IAAI5nC,SAAJ,EAAf;;EACA,WAAK,IAAIhI,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGod,IAAI,CAACkB,gBAAL,EAApB,EAA6Cte,CAAC,EAA9C,EAAkD;EAChD,cAAMme,CAAC,GAAGuxB,EAAE,CAAC9gB,GAAH,CAAOxR,IAAI,CAACO,YAAL,CAAkB3d,CAAlB,CAAP,CAAV;EACA,YAAIme,CAAC,KAAK,IAAV,EAAgByxB,MAAM,CAACxoC,GAAP,CAAW+W,CAAX;EACjB;;EACD,aAAOf,IAAI,CAACK,UAAL,GAAkByM,aAAlB,CAAgC0lB,MAAhC,CAAP;EACD,KARD,MAQO,IAAIrmC,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAeuE,UAAf,CAAZ,IAA0CoC,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAe2vC,OAAf,CAA1D,EAAiF;EACtF,YAAMtC,KAAK,GAAGrtC,SAAS,CAAC,CAAD,CAAvB;EAAA,YAA4B8sC,EAAE,GAAG9sC,SAAS,CAAC,CAAD,CAA1C;EACA,YAAMgtC,MAAM,GAAG,IAAI5nC,SAAJ,EAAf;;EACA,WAAK,IAAIhI,CAAC,GAAGiwC,KAAK,CAAC1oC,QAAN,EAAb,EAA+BvH,CAAC,CAACmJ,OAAF,EAA/B,GAA8C;EAC5C,cAAMgV,CAAC,GAAGne,CAAC,CAACkJ,IAAF,EAAV;EACA,cAAMspC,EAAE,GAAG9C,EAAE,CAAC9gB,GAAH,CAAOzQ,CAAP,CAAX;EACA,YAAIq0B,EAAE,KAAK,IAAX,EAAiB5C,MAAM,CAACxoC,GAAP,CAAWorC,EAAX;EAClB;;EACD,aAAO5C,MAAP;EACD;EACF;;EApBiC;;EAsBpC,SAAS2C,OAAT,GAAiB;;EACjBD,cAAc,CAACC,KAAf,GAAuBA,OAAvB;;EChBe,MAAME,mBAAN,CAA0B;EACvCpzC,EAAAA,WAAW,GAAG;EACZozC,IAAAA,mBAAmB,CAAC/vC,YAApB,CAAiCC,KAAjC,CAAuC,IAAvC,EAA6CC,SAA7C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKgwC,UAAL,GAAkB,IAAlB;EACA,SAAKh1B,QAAL,GAAgB,IAAhB;EACA,SAAKi1B,mBAAL,GAA2B,IAA3B;EACA,SAAKC,+BAAL,GAAuC,IAAvC;EACA,SAAKC,oBAAL,GAA4B,KAA5B;EACA,SAAKC,aAAL,GAAqB,KAArB;EACD;;EACDC,EAAAA,cAAc,CAAC31B,IAAD,EAAO41B,MAAP,EAAe;EAC3B,WAAO,KAAKt1B,QAAL,CAAcyI,WAAd,CAA0B,KAAK8sB,oBAAL,CAA0B71B,IAAI,CAAC0I,qBAAL,EAA1B,EAAwD1I,IAAxD,CAA1B,CAAP;EACD;;EACD81B,EAAAA,gBAAgB,CAAC91B,IAAD,EAAO41B,MAAP,EAAe;EAC7B,QAAIG,qBAAqB,GAAG,IAA5B;EACA,UAAM1rB,KAAK,GAAG,KAAK2rB,mBAAL,CAAyBh2B,IAAI,CAACuL,eAAL,EAAzB,EAAiDvL,IAAjD,CAAd;EACA,QAAIqK,KAAK,KAAK,IAAV,IAAkB,EAAEA,KAAK,YAAYmD,UAAnB,CAAlB,IAAoDnD,KAAK,CAACngB,OAAN,EAAxD,EAAyE6rC,qBAAqB,GAAG,KAAxB;EACzE,UAAMzrB,KAAK,GAAG,IAAI1f,SAAJ,EAAd;;EACA,SAAK,IAAIhI,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGod,IAAI,CAAC6K,kBAAL,EAApB,EAA+CjoB,CAAC,EAAhD,EAAoD;EAClD,YAAM2xC,IAAI,GAAG,KAAKyB,mBAAL,CAAyBh2B,IAAI,CAACwL,gBAAL,CAAsB5oB,CAAtB,CAAzB,EAAmDod,IAAnD,CAAb;EACA,UAAIu0B,IAAI,KAAK,IAAT,IAAiBA,IAAI,CAACrqC,OAAL,EAArB,EACE;EAEF,UAAI,EAAEqqC,IAAI,YAAY/mB,UAAlB,CAAJ,EAAmCuoB,qBAAqB,GAAG,KAAxB;EACnCzrB,MAAAA,KAAK,CAACtgB,GAAN,CAAUuqC,IAAV;EACD;;EACD,QAAIwB,qBAAJ,EAA2B;EACzB,aAAO,KAAKz1B,QAAL,CAAcmL,aAAd,CAA4BpB,KAA5B,EAAmCC,KAAK,CAACjgB,OAAN,CAAc,EAAd,CAAnC,CAAP;EACD,KAFD,MAEO;EACL,YAAM+wB,UAAU,GAAG,IAAIxwB,SAAJ,EAAnB;EACA,UAAIyf,KAAK,KAAK,IAAd,EAAoB+Q,UAAU,CAACpxB,GAAX,CAAeqgB,KAAf;EACpB+Q,MAAAA,UAAU,CAACnxB,MAAX,CAAkBqgB,KAAlB;EACA,aAAO,KAAKhK,QAAL,CAAcwM,aAAd,CAA4BsO,UAA5B,CAAP;EACD;EACF;;EACD6a,EAAAA,wBAAwB,CAAC/D,MAAD,EAAS;EAC/B,WAAO,KAAK5xB,QAAL,CAAcqI,4BAAd,GAA6C9I,MAA7C,CAAoDqyB,MAApD,CAAP;EACD;;EACDgE,EAAAA,gBAAgB,GAAG;EACjB,WAAO,KAAKZ,UAAZ;EACD;;EACDa,EAAAA,wBAAwB,CAACn2B,IAAD,EAAO41B,MAAP,EAAe;EACrC,UAAMQ,aAAa,GAAG,IAAIxrC,SAAJ,EAAtB;;EACA,SAAK,IAAIhI,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGod,IAAI,CAACkB,gBAAL,EAApB,EAA6Cte,CAAC,EAA9C,EAAkD;EAChD,YAAMyzC,aAAa,GAAG,KAAKC,mBAAL,CAAyBt2B,IAAI,CAACO,YAAL,CAAkB3d,CAAlB,CAAzB,EAA+Cod,IAA/C,CAAtB;EACA,UAAIq2B,aAAa,KAAK,IAAtB,EAA4B;EAC5B,UAAIA,aAAa,CAACnsC,OAAd,EAAJ,EAA6B;EAC7BksC,MAAAA,aAAa,CAACpsC,GAAd,CAAkBqsC,aAAlB;EACD;;EACD,WAAO,KAAK/1B,QAAL,CAAcwM,aAAd,CAA4BspB,aAA5B,CAAP;EACD;;EACDP,EAAAA,oBAAoB,CAAC3D,MAAD,EAAS0D,MAAT,EAAiB;EACnC,WAAO,KAAKztC,IAAL,CAAU+pC,MAAV,CAAP;EACD;;EACDoE,EAAAA,mBAAmB,CAACt2B,IAAD,EAAO41B,MAAP,EAAe;EAChC,WAAO,KAAKt1B,QAAL,CAAc+H,gBAAd,CAA+B,KAAKwtB,oBAAL,CAA0B71B,IAAI,CAAC0I,qBAAL,EAA1B,EAAwD1I,IAAxD,CAA/B,CAAP;EACD;;EACDu2B,EAAAA,mBAAmB,CAACv2B,IAAD,EAAO41B,MAAP,EAAe;EAChC,UAAMQ,aAAa,GAAG,IAAIxrC,SAAJ,EAAtB;;EACA,SAAK,IAAIhI,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGod,IAAI,CAACkB,gBAAL,EAApB,EAA6Cte,CAAC,EAA9C,EAAkD;EAChD,YAAMyzC,aAAa,GAAG,KAAKV,cAAL,CAAoB31B,IAAI,CAACO,YAAL,CAAkB3d,CAAlB,CAApB,EAA0Cod,IAA1C,CAAtB;EACA,UAAIq2B,aAAa,KAAK,IAAtB,EAA4B;EAC5B,UAAIA,aAAa,CAACnsC,OAAd,EAAJ,EAA6B;EAC7BksC,MAAAA,aAAa,CAACpsC,GAAd,CAAkBqsC,aAAlB;EACD;;EACD,WAAO,KAAK/1B,QAAL,CAAcwM,aAAd,CAA4BspB,aAA5B,CAAP;EACD;;EACDI,EAAAA,qBAAqB,CAACx2B,IAAD,EAAO41B,MAAP,EAAe;EAClC,UAAMQ,aAAa,GAAG,IAAIxrC,SAAJ,EAAtB;;EACA,SAAK,IAAIhI,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGod,IAAI,CAACkB,gBAAL,EAApB,EAA6Cte,CAAC,EAA9C,EAAkD;EAChD,YAAMyzC,aAAa,GAAG,KAAKP,gBAAL,CAAsB91B,IAAI,CAACO,YAAL,CAAkB3d,CAAlB,CAAtB,EAA4Cod,IAA5C,CAAtB;EACA,UAAIq2B,aAAa,KAAK,IAAtB,EAA4B;EAC5B,UAAIA,aAAa,CAACnsC,OAAd,EAAJ,EAA6B;EAC7BksC,MAAAA,aAAa,CAACpsC,GAAd,CAAkBqsC,aAAlB;EACD;;EACD,WAAO,KAAK/1B,QAAL,CAAcwM,aAAd,CAA4BspB,aAA5B,CAAP;EACD;;EACDjuC,EAAAA,IAAI,CAACqF,GAAD,EAAM;EACR,WAAOA,GAAG,CAACrF,IAAJ,EAAP;EACD;;EACDsuC,EAAAA,2BAA2B,CAACz2B,IAAD,EAAO41B,MAAP,EAAe;EACxC,UAAMQ,aAAa,GAAG,IAAIxrC,SAAJ,EAAtB;;EACA,SAAK,IAAIhI,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGod,IAAI,CAACkB,gBAAL,EAApB,EAA6Cte,CAAC,EAA9C,EAAkD;EAChD,YAAMyzC,aAAa,GAAG,KAAK3G,SAAL,CAAe1vB,IAAI,CAACO,YAAL,CAAkB3d,CAAlB,CAAf,CAAtB;EACA,UAAIyzC,aAAa,KAAK,IAAtB,EAA4B;EAC5B,UAAI,KAAKd,mBAAL,IAA4Bc,aAAa,CAACnsC,OAAd,EAAhC,EAAyD;EACzDksC,MAAAA,aAAa,CAACpsC,GAAd,CAAkBqsC,aAAlB;EACD;;EACD,QAAI,KAAKb,+BAAT,EAA0C,OAAO,KAAKl1B,QAAL,CAAc+I,wBAAd,CAAuC4K,eAAe,CAACS,eAAhB,CAAgC0hB,aAAhC,CAAvC,CAAP;EAC1C,WAAO,KAAK91B,QAAL,CAAcwM,aAAd,CAA4BspB,aAA5B,CAAP;EACD;;EACD1G,EAAAA,SAAS,CAACgH,SAAD,EAAY;EACnB,SAAKpB,UAAL,GAAkBoB,SAAlB;EACA,SAAKp2B,QAAL,GAAgBo2B,SAAS,CAACr2B,UAAV,EAAhB;EACA,QAAIq2B,SAAS,YAAYztB,KAAzB,EAAgC,OAAO,KAAK0sB,cAAL,CAAoBe,SAApB,EAA+B,IAA/B,CAAP;EAChC,QAAIA,SAAS,YAAYppB,UAAzB,EAAqC,OAAO,KAAKipB,mBAAL,CAAyBG,SAAzB,EAAoC,IAApC,CAAP;EACrC,QAAIA,SAAS,YAAYlpB,UAAzB,EAAqC,OAAO,KAAKwoB,mBAAL,CAAyBU,SAAzB,EAAoC,IAApC,CAAP;EACrC,QAAIA,SAAS,YAAY9uB,UAAzB,EAAqC,OAAO,KAAK0uB,mBAAL,CAAyBI,SAAzB,EAAoC,IAApC,CAAP;EACrC,QAAIA,SAAS,YAAY3iB,eAAzB,EAA0C,OAAO,KAAKoiB,wBAAL,CAA8BO,SAA9B,EAAyC,IAAzC,CAAP;EAC1C,QAAIA,SAAS,YAAYxsB,OAAzB,EAAkC,OAAO,KAAK4rB,gBAAL,CAAsBY,SAAtB,EAAiC,IAAjC,CAAP;EAClC,QAAIA,SAAS,YAAY3lB,YAAzB,EAAuC,OAAO,KAAKylB,qBAAL,CAA2BE,SAA3B,EAAsC,IAAtC,CAAP;EACvC,QAAIA,SAAS,YAAYjqB,kBAAzB,EAA6C,OAAO,KAAKgqB,2BAAL,CAAiCC,SAAjC,EAA4C,IAA5C,CAAP;EAC7C,UAAM,IAAIn0C,wBAAJ,CAA6B,+BAA+Bm0C,SAAS,CAACjuB,eAAV,EAA5D,CAAN;EACD;;EACDutB,EAAAA,mBAAmB,CAACh2B,IAAD,EAAO41B,MAAP,EAAe;EAChC,UAAMpoC,GAAG,GAAG,KAAKqoC,oBAAL,CAA0B71B,IAAI,CAAC0I,qBAAL,EAA1B,EAAwD1I,IAAxD,CAAZ;EACA,QAAIxS,GAAG,KAAK,IAAZ,EAAkB,OAAO,KAAK8S,QAAL,CAAciK,gBAAd,CAA+B,IAA/B,CAAP;EAClB,UAAMosB,OAAO,GAAGnpC,GAAG,CAACpD,IAAJ,EAAhB;EACA,QAAIusC,OAAO,GAAG,CAAV,IAAeA,OAAO,GAAG,CAAzB,IAA8B,CAAC,KAAKjB,aAAxC,EAAuD,OAAO,KAAKp1B,QAAL,CAAc+H,gBAAd,CAA+B7a,GAA/B,CAAP;EACvD,WAAO,KAAK8S,QAAL,CAAciK,gBAAd,CAA+B/c,GAA/B,CAAP;EACD;;EAhHsC;;ECP1B,MAAMopC,mBAAN,CAA0B;EACvC30C,EAAAA,WAAW,GAAG;EACZ20C,IAAAA,mBAAmB,CAACtxC,YAApB,CAAiCC,KAAjC,CAAuC,IAAvC,EAA6CC,SAA7C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKwvC,MAAL,GAAc,IAAd;EACA,UAAME,KAAK,GAAGxvC,SAAS,CAAC,CAAD,CAAvB;EACA,SAAKsvC,MAAL,GAAcE,KAAd;EACD;;EACD,SAAO6B,WAAP,CAAmB72B,IAAnB,EAAyB;EACvB,WAAOA,IAAI,CAACK,UAAL,GAAkByM,aAAlB,CAAgC8pB,mBAAmB,CAACE,QAApB,CAA6B92B,IAA7B,CAAhC,CAAP;EACD;;EACD,SAAO82B,QAAP,GAAkB;EAChB,QAAItxC,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMua,IAAI,GAAGxa,SAAS,CAAC,CAAD,CAAtB;EACA,aAAOoxC,mBAAmB,CAACE,QAApB,CAA6B92B,IAA7B,EAAmC,IAAIpV,SAAJ,EAAnC,CAAP;EACD,KAHD,MAGO,IAAIpF,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMua,IAAI,GAAGxa,SAAS,CAAC,CAAD,CAAtB;EAAA,YAA2BuxC,KAAK,GAAGvxC,SAAS,CAAC,CAAD,CAA5C;EACA,UAAIwa,IAAI,YAAY4H,UAApB,EACEmvB,KAAK,CAAC/sC,GAAN,CAAUgW,IAAV,EADF,KAEK,IAAIA,IAAI,YAAYyM,kBAApB,EACHzM,IAAI,CAACza,KAAL,CAAW,IAAIqxC,mBAAJ,CAAwBG,KAAxB,CAAX;EAEF,aAAOA,KAAP;EACD;EACF;;EACDxpC,EAAAA,MAAM,CAACyS,IAAD,EAAO;EACX,QAAIA,IAAI,YAAY4H,UAApB,EAAgC,KAAKktB,MAAL,CAAY9qC,GAAZ,CAAgBgW,IAAhB;EACjC;;EACD,MAAInX,WAAJ,GAAkB;EAChB,WAAO,CAAC8e,cAAD,CAAP;EACD;;EA/BsC;;ECG1B,MAAMqvB,wBAAN,CAA+B;EAC5C/0C,EAAAA,WAAW,GAAG;EACZ+0C,IAAAA,wBAAwB,CAAC1xC,YAAzB,CAAsCC,KAAtC,CAA4C,IAA5C,EAAkDC,SAAlD;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK2xC,MAAL,GAAc,IAAd;EACA,SAAKC,qBAAL,GAA6B,KAA7B;;EACA,QAAI1xC,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMsxC,KAAK,GAAGvxC,SAAS,CAAC,CAAD,CAAvB;EACA,WAAKyxC,MAAL,GAAcF,KAAd;EACD,KAHD,MAGO,IAAIvxC,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMsxC,KAAK,GAAGvxC,SAAS,CAAC,CAAD,CAAvB;EAAA,YAA4B2xC,oBAAoB,GAAG3xC,SAAS,CAAC,CAAD,CAA5D;EACA,WAAKyxC,MAAL,GAAcF,KAAd;EACA,WAAKG,qBAAL,GAA6BC,oBAA7B;EACD;EACF;;EACD,SAAON,WAAP,GAAqB;EACnB,QAAIrxC,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMua,IAAI,GAAGxa,SAAS,CAAC,CAAD,CAAtB;EACA,aAAOwa,IAAI,CAACK,UAAL,GAAkByM,aAAlB,CAAgCkqB,wBAAwB,CAACF,QAAzB,CAAkC92B,IAAlC,CAAhC,CAAP;EACD,KAHD,MAGO,IAAIxa,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMua,IAAI,GAAGxa,SAAS,CAAC,CAAD,CAAtB;EAAA,YAA2B4xC,iBAAiB,GAAG5xC,SAAS,CAAC,CAAD,CAAxD;EACA,aAAOwa,IAAI,CAACK,UAAL,GAAkByM,aAAlB,CAAgCkqB,wBAAwB,CAACF,QAAzB,CAAkC92B,IAAlC,EAAwCo3B,iBAAxC,CAAhC,CAAP;EACD;EACF;;EACD,SAAON,QAAP,GAAkB;EAChB,QAAItxC,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMua,IAAI,GAAGxa,SAAS,CAAC,CAAD,CAAtB;EACA,aAAOwxC,wBAAwB,CAACF,QAAzB,CAAkC92B,IAAlC,EAAwC,KAAxC,CAAP;EACD,KAHD,MAGO,IAAIxa,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,UAAI0G,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAeuE,UAAf,CAAZ,IAA0CoC,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAeuE,UAAf,CAA1D,EAAsF;EACpF,cAAM8oC,KAAK,GAAGrtC,SAAS,CAAC,CAAD,CAAvB;EAAA,cAA4BuxC,KAAK,GAAGvxC,SAAS,CAAC,CAAD,CAA7C;;EACA,aAAK,IAAI5C,CAAC,GAAGiwC,KAAK,CAAC1oC,QAAN,EAAb,EAA+BvH,CAAC,CAACmJ,OAAF,EAA/B,GAA8C;EAC5C,gBAAMgV,CAAC,GAAGne,CAAC,CAACkJ,IAAF,EAAV;EACAkrC,UAAAA,wBAAwB,CAACF,QAAzB,CAAkC/1B,CAAlC,EAAqCg2B,KAArC;EACD;;EACD,eAAOA,KAAP;EACD,OAPD,MAOO,IAAIvxC,SAAS,CAAC,CAAD,CAAT,YAAwBya,QAAxB,IAAoC,OAAOza,SAAS,CAAC,CAAD,CAAhB,KAAwB,SAAhE,EAA2E;EAChF,cAAMwa,IAAI,GAAGxa,SAAS,CAAC,CAAD,CAAtB;EAAA,cAA2B4xC,iBAAiB,GAAG5xC,SAAS,CAAC,CAAD,CAAxD;EACA,cAAMuxC,KAAK,GAAG,IAAInsC,SAAJ,EAAd;EACAoV,QAAAA,IAAI,CAACza,KAAL,CAAW,IAAIyxC,wBAAJ,CAA6BD,KAA7B,EAAoCK,iBAApC,CAAX;EACA,eAAOL,KAAP;EACD,OALM,MAKA,IAAIvxC,SAAS,CAAC,CAAD,CAAT,YAAwBya,QAAxB,IAAoC9T,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAeuE,UAAf,CAApD,EAAgF;EACrF,cAAMiW,IAAI,GAAGxa,SAAS,CAAC,CAAD,CAAtB;EAAA,cAA2BuxC,KAAK,GAAGvxC,SAAS,CAAC,CAAD,CAA5C;EACA,YAAIwa,IAAI,YAAY4H,UAApB,EACEmvB,KAAK,CAAC/sC,GAAN,CAAUgW,IAAV,EADF,KAGEA,IAAI,CAACza,KAAL,CAAW,IAAIyxC,wBAAJ,CAA6BD,KAA7B,CAAX;EAEF,eAAOA,KAAP;EACD;EACF,KAtBM,MAsBA,IAAIvxC,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,UAAI,OAAOD,SAAS,CAAC,CAAD,CAAhB,KAAwB,SAAxB,IAAsC2G,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAeuE,UAAf,CAAZ,IAA0CoC,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAeuE,UAAf,CAAhG,EAA6H;EAC3H,cAAM8oC,KAAK,GAAGrtC,SAAS,CAAC,CAAD,CAAvB;EAAA,cAA4BuxC,KAAK,GAAGvxC,SAAS,CAAC,CAAD,CAA7C;EAAA,cAAkD4xC,iBAAiB,GAAG5xC,SAAS,CAAC,CAAD,CAA/E;;EACA,aAAK,IAAI5C,CAAC,GAAGiwC,KAAK,CAAC1oC,QAAN,EAAb,EAA+BvH,CAAC,CAACmJ,OAAF,EAA/B,GAA8C;EAC5C,gBAAMgV,CAAC,GAAGne,CAAC,CAACkJ,IAAF,EAAV;EACAkrC,UAAAA,wBAAwB,CAACF,QAAzB,CAAkC/1B,CAAlC,EAAqCg2B,KAArC,EAA4CK,iBAA5C;EACD;;EACD,eAAOL,KAAP;EACD,OAPD,MAOO,IAAI,OAAOvxC,SAAS,CAAC,CAAD,CAAhB,KAAwB,SAAxB,IAAsCA,SAAS,CAAC,CAAD,CAAT,YAAwBya,QAAxB,IAAoC9T,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAeuE,UAAf,CAA1F,EAAuH;EAC5H,cAAMiW,IAAI,GAAGxa,SAAS,CAAC,CAAD,CAAtB;EAAA,cAA2BuxC,KAAK,GAAGvxC,SAAS,CAAC,CAAD,CAA5C;EAAA,cAAiD4xC,iBAAiB,GAAG5xC,SAAS,CAAC,CAAD,CAA9E;EACAwa,QAAAA,IAAI,CAACza,KAAL,CAAW,IAAIyxC,wBAAJ,CAA6BD,KAA7B,EAAoCK,iBAApC,CAAX;EACA,eAAOL,KAAP;EACD;EACF;EACF;;EACDxpC,EAAAA,MAAM,CAACyS,IAAD,EAAO;EACX,QAAI,KAAKk3B,qBAAL,IAA8Bl3B,IAAI,YAAYwN,UAAlD,EAA8D;EAC5D,YAAM/N,IAAI,GAAGO,IAAI,CAACK,UAAL,GAAkBgI,gBAAlB,CAAmCrI,IAAI,CAAC0I,qBAAL,EAAnC,CAAb;;EACA,WAAKuuB,MAAL,CAAYjtC,GAAZ,CAAgByV,IAAhB;;EACA,aAAO,IAAP;EACD;;EACD,QAAIO,IAAI,YAAY4H,UAApB,EAAgC,KAAKqvB,MAAL,CAAYjtC,GAAZ,CAAgBgW,IAAhB;EACjC;;EACDq3B,EAAAA,oBAAoB,CAACF,oBAAD,EAAuB;EACzC,SAAKD,qBAAL,GAA6BC,oBAA7B;EACD;;EACD,MAAItuC,WAAJ,GAAkB;EAChB,WAAO,CAACkX,uBAAD,CAAP;EACD;;EA/E2C;;ECJ9C,MAAMu3B,WAAW,GAAG;EAClBC,EAAAA,YAAY,EAAE,YAAW;EACvB,WAAO;EACLruC,MAAAA,OAAO,CAACC,CAAD,EAAIC,CAAJ,EAAO;EACZ,eAAOA,CAAC,CAACxB,SAAF,CAAYuB,CAAZ,CAAP;EACD;;EAHI,KAAP;EAKD,GAPiB;EAQlByF,EAAAA,GAAG,EAAE,UAAS4oC,CAAT,EAAY;EACfF,IAAAA,WAAW,CAAChsC,IAAZ,CAAiBksC,CAAjB;EACA,WAAOA,CAAC,CAAC/sC,GAAF,CAAM,CAAN,CAAP;EACD,GAXiB;EAYlBa,EAAAA,IAAI,EAAE,UAASksC,CAAT,EAAYhxC,CAAZ,EAAe;EACnB,UAAM2C,CAAC,GAAGquC,CAAC,CAACntC,OAAF,EAAV;EACA,QAAI7D,CAAJ,EACEmjB,MAAM,CAACre,IAAP,CAAYnC,CAAZ,EAAe3C,CAAf,EADF,KAGEmjB,MAAM,CAACre,IAAP,CAAYnC,CAAZ;EACF,UAAMvG,CAAC,GAAG40C,CAAC,CAACrtC,QAAF,EAAV;;EACA,SAAK,IAAIstC,GAAG,GAAG,CAAV,EAAaC,IAAI,GAAGvuC,CAAC,CAAC1D,MAA3B,EAAmCgyC,GAAG,GAAGC,IAAzC,EAA+CD,GAAG,EAAlD,EAAsD;EACpD70C,MAAAA,CAAC,CAACkJ,IAAF;EACAlJ,MAAAA,CAAC,CAAC8H,GAAF,CAAMvB,CAAC,CAACsuC,GAAD,CAAP;EACD;EACF,GAvBiB;EAwBlBE,EAAAA,aAAa,EAAE,UAAS9vC,CAAT,EAAY;EACzB,UAAM+D,SAAS,GAAG,IAAIhB,SAAJ,EAAlB;EACAgB,IAAAA,SAAS,CAAC5B,GAAV,CAAcnC,CAAd;EACA,WAAO+D,SAAP;EACD;EA5BiB,CAApB;;ECEe,MAAMgsC,cAAN,CAAqB;EAClC31C,EAAAA,WAAW,GAAG;EACZ21C,IAAAA,cAAc,CAACtyC,YAAf,CAA4BC,KAA5B,CAAkC,IAAlC,EAAwCC,SAAxC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKuyC,IAAL,GAAY,IAAZ;EACA,UAAMprC,GAAG,GAAGjH,SAAS,CAAC,CAAD,CAArB;EACA,SAAKqyC,IAAL,GAAYprC,GAAZ;EACD;;EACD,SAAOqrC,SAAP,GAAmB;EACjB,QAAItyC,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMua,IAAI,GAAGxa,SAAS,CAAC,CAAD,CAAtB;EACA,UAAIwa,IAAI,YAAYiJ,KAApB,EACE,OAAOquB,WAAW,CAACK,aAAZ,CAA0B33B,IAA1B,CAAP;EAEF,aAAO43B,cAAc,CAACE,SAAf,CAAyB93B,IAAzB,EAA+B,IAAIpV,SAAJ,EAA/B,CAAP;EACD,KAND,MAMO,IAAIpF,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMua,IAAI,GAAGxa,SAAS,CAAC,CAAD,CAAtB;EAAA,YAA2B8tC,IAAI,GAAG9tC,SAAS,CAAC,CAAD,CAA3C;EACA,UAAIwa,IAAI,YAAYiJ,KAApB,EACEqqB,IAAI,CAACtpC,GAAL,CAASgW,IAAT,EADF,KAEK,IAAIA,IAAI,YAAYyM,kBAApB,EACHzM,IAAI,CAACza,KAAL,CAAW,IAAIqyC,cAAJ,CAAmBtE,IAAnB,CAAX;EAEF,aAAOA,IAAP;EACD;EACF;;EACD/lC,EAAAA,MAAM,CAACyS,IAAD,EAAO;EACX,QAAIA,IAAI,YAAYiJ,KAApB,EAA2B,KAAK4uB,IAAL,CAAU7tC,GAAV,CAAcgW,IAAd;EAC5B;;EACD,MAAInX,WAAJ,GAAkB;EAChB,WAAO,CAAC8e,cAAD,CAAP;EACD;;EA/BiC;;ECDrB,MAAMowB,gBAAN,CAAuB;EACpC91C,EAAAA,WAAW,GAAG;EACZ81C,IAAAA,gBAAgB,CAACzyC,YAAjB,CAA8BC,KAA9B,CAAoC,IAApC,EAA0CC,SAA1C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKwvC,MAAL,GAAc,IAAd;EACA,UAAME,KAAK,GAAGxvC,SAAS,CAAC,CAAD,CAAvB;EACA,SAAKsvC,MAAL,GAAcE,KAAd;EACD;;EACD,SAAOgD,WAAP,GAAqB;EACnB,QAAIxyC,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMua,IAAI,GAAGxa,SAAS,CAAC,CAAD,CAAtB;EACA,aAAOuyC,gBAAgB,CAACC,WAAjB,CAA6Bh4B,IAA7B,EAAmC,IAAIpV,SAAJ,EAAnC,CAAP;EACD,KAHD,MAGO,IAAIpF,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMua,IAAI,GAAGxa,SAAS,CAAC,CAAD,CAAtB;EAAA,YAA2B8tC,IAAI,GAAG9tC,SAAS,CAAC,CAAD,CAA3C;EACA,UAAIwa,IAAI,YAAYkK,OAApB,EACEopB,IAAI,CAACtpC,GAAL,CAASgW,IAAT,EADF,KAEK,IAAIA,IAAI,YAAYyM,kBAApB,EACHzM,IAAI,CAACza,KAAL,CAAW,IAAIwyC,gBAAJ,CAAqBzE,IAArB,CAAX;EAEF,aAAOA,IAAP;EACD;EACF;;EACD/lC,EAAAA,MAAM,CAACyS,IAAD,EAAO;EACX,QAAIA,IAAI,YAAYkK,OAApB,EAA6B,KAAK4qB,MAAL,CAAY9qC,GAAZ,CAAgBgW,IAAhB;EAC9B;;EACD,MAAInX,WAAJ,GAAkB;EAChB,WAAO,CAAC8e,cAAD,CAAP;EACD;;EA5BmC;;ECHvB,MAAMswB,6BAAN,CAAoC;EACjDh2C,EAAAA,WAAW,GAAG;EACZg2C,IAAAA,6BAA6B,CAAC3yC,YAA9B,CAA2CC,KAA3C,CAAiD,IAAjD,EAAuDC,SAAvD;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK4yC,OAAL,GAAe,KAAf;EACD;;EACDC,EAAAA,OAAO,CAACn4B,IAAD,EAAO;EACZ,SAAK,IAAIpd,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGod,IAAI,CAACkB,gBAAL,EAAJ,IAA+B,CAAC,KAAKg3B,OAArD,EAA8Dt1C,CAAC,EAA/D,EAAmE;EACjE,YAAMuI,OAAO,GAAG6U,IAAI,CAACO,YAAL,CAAkB3d,CAAlB,CAAhB;;EACA,UAAI,EAAEuI,OAAO,YAAYshB,kBAArB,CAAJ,EAA8C;EAC5C,aAAK2rB,KAAL,CAAWjtC,OAAX;;EACA,YAAI,KAAKsC,MAAL,EAAJ,EAAmB;EACjB,eAAKyqC,OAAL,GAAe,IAAf;EACA,iBAAO,IAAP;EACD;EACF,OAND,MAMO;EACL,aAAKC,OAAL,CAAahtC,OAAb;EACD;EACF;EACF;;EApBgD;;ECGpC,MAAMktC,qBAAN,CAA4B;EACzCp2C,EAAAA,WAAW,GAAG;EACZo2C,IAAAA,qBAAqB,CAAC/yC,YAAtB,CAAmCC,KAAnC,CAAyC,IAAzC,EAA+CC,SAA/C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKgzC,SAAL,GAAiB,IAAjB;EACA,SAAKC,UAAL,GAAkB,IAAlB;EACA,SAAKC,IAAL,GAAY,IAAIC,UAAJ,EAAZ;EACA,SAAKC,KAAL,GAAa,GAAb;EACA,SAAKC,cAAL,GAAsB,GAAtB;;EACA,QAAInzC,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B4yC,MAAAA,qBAAqB,CAAC/yC,YAAtB,CAAmCI,IAAnC,CAAwC,IAAxC,EAA8C,IAAIuuB,eAAJ,EAA9C;EACD,KAFD,MAEO,IAAIzuB,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMmzC,QAAQ,GAAGpzC,SAAS,CAAC,CAAD,CAA1B;EACA,WAAK8yC,SAAL,GAAiBM,QAAjB;EACA,WAAKL,UAAL,GAAkBK,QAAQ,CAACv2B,iBAAT,EAAlB;EACD;EACF;;EACDw2B,EAAAA,iBAAiB,CAACC,KAAD,EAAQ;EACvB,UAAMC,QAAQ,GAAG,MAAMD,KAAvB;EACA,UAAME,MAAM,GAAG,KAAKR,IAAL,CAAUS,UAAV,KAAyB,CAAxC;;EACA,UAAM9nC,MAAM,GAAG,KAAKqnC,IAAL,CAAUU,SAAV,EAAf;;EACA,UAAMC,EAAE,GAAGt3C,IAAI,CAACwC,GAAL,CAAS20C,MAAT,EAAiBF,KAAjB,CAAX;EACA,UAAMt0B,EAAE,GAAGw0B,MAAX;EACA,UAAMI,KAAK,GAAGv3C,IAAI,CAACwC,GAAL,CAAS80C,EAAE,GAAG,CAAd,EAAiBJ,QAAjB,CAAd;EACA,UAAMM,UAAU,GAAGx3C,IAAI,CAAC6S,KAAL,CAAW,KAAKgkC,KAAL,GAAa,CAAxB,CAAnB;EACA,UAAMY,MAAM,GAAGD,UAAU,GAAG,CAAb,GAAiB,CAAhC;EACA,UAAM5sC,GAAG,GAAG,IAAIC,KAAJ,CAAU4sC,MAAV,EAAkB3sC,IAAlB,CAAuB,IAAvB,CAAZ;EACA,UAAM4sC,IAAI,GAAGH,KAAK,GAAGC,UAArB;;EACA,SAAK,IAAIz2C,CAAC,GAAG,CAAb,EAAgBA,CAAC,IAAIy2C,UAArB,EAAiCz2C,CAAC,EAAlC,EAAsC;EACpC,UAAI2B,CAAC,GAAG,GAAR;EACA,UAAIC,CAAC,GAAGggB,EAAR;;EACA,UAAI5hB,CAAC,KAAK,CAAV,EAAa;EACX2B,QAAAA,CAAC,GAAGg1C,IAAI,GAAG32C,CAAX;EACA,cAAM42C,EAAE,GAAG33C,IAAI,CAACwC,GAAL,CAASE,CAAT,EAAYu0C,KAAZ,CAAX;EACAt0C,QAAAA,CAAC,GAAG3C,IAAI,CAACwC,GAAL,CAAS80C,EAAE,GAAGK,EAAd,EAAkBT,QAAlB,CAAJ;EACD;;EACDtsC,MAAAA,GAAG,CAAC7J,CAAD,CAAH,GAAS,KAAK62C,UAAL,CAAgBl1C,CAAhB,EAAmBC,CAAnB,EAAsB2M,MAAtB,CAAT;EACA1E,MAAAA,GAAG,CAAC,IAAI4sC,UAAJ,GAAiBz2C,CAAlB,CAAH,GAA0B,KAAK62C,UAAL,CAAgBj1C,CAAhB,EAAmBD,CAAnB,EAAsB4M,MAAtB,CAA1B;EACA1E,MAAAA,GAAG,CAAC,IAAI4sC,UAAJ,GAAiBz2C,CAAlB,CAAH,GAA0B,KAAK62C,UAAL,CAAgBj1C,CAAhB,EAAmB,CAACD,CAApB,EAAuB4M,MAAvB,CAA1B;EACA1E,MAAAA,GAAG,CAAC,IAAI4sC,UAAJ,GAAiBz2C,CAAlB,CAAH,GAA0B,KAAK62C,UAAL,CAAgBl1C,CAAhB,EAAmB,CAACC,CAApB,EAAuB2M,MAAvB,CAA1B;EACA1E,MAAAA,GAAG,CAAC,IAAI4sC,UAAJ,GAAiBz2C,CAAlB,CAAH,GAA0B,KAAK62C,UAAL,CAAgB,CAACl1C,CAAjB,EAAoB,CAACC,CAArB,EAAwB2M,MAAxB,CAA1B;EACA1E,MAAAA,GAAG,CAAC,IAAI4sC,UAAJ,GAAiBz2C,CAAlB,CAAH,GAA0B,KAAK62C,UAAL,CAAgB,CAACj1C,CAAjB,EAAoB,CAACD,CAArB,EAAwB4M,MAAxB,CAA1B;EACA1E,MAAAA,GAAG,CAAC,IAAI4sC,UAAJ,GAAiBz2C,CAAlB,CAAH,GAA0B,KAAK62C,UAAL,CAAgB,CAACj1C,CAAjB,EAAoBD,CAApB,EAAuB4M,MAAvB,CAA1B;EACA1E,MAAAA,GAAG,CAAC,IAAI4sC,UAAJ,GAAiBz2C,CAAlB,CAAH,GAA0B,KAAK62C,UAAL,CAAgB,CAACl1C,CAAjB,EAAoBC,CAApB,EAAuB2M,MAAvB,CAA1B;EACD;;EACD1E,IAAAA,GAAG,CAACA,GAAG,CAAChH,MAAJ,GAAa,CAAd,CAAH,GAAsB,IAAIa,UAAJ,CAAemG,GAAG,CAAC,CAAD,CAAlB,CAAtB;;EACA,UAAMiP,IAAI,GAAG,KAAK48B,SAAL,CAAe/tB,gBAAf,CAAgC9d,GAAhC,CAAb;;EACA,UAAMof,IAAI,GAAG,KAAKysB,SAAL,CAAe7sB,aAAf,CAA6B/P,IAA7B,CAAb;;EACA,WAAO,KAAKi0B,MAAL,CAAY9jB,IAAZ,CAAP;EACD;;EACD6tB,EAAAA,YAAY,CAAC/9B,IAAD,EAAO;EACjB,SAAK+8B,KAAL,GAAa/8B,IAAb;EACD;;EACDg+B,EAAAA,OAAO,CAACC,IAAD,EAAO;EACZ,SAAKpB,IAAL,CAAUmB,OAAV,CAAkBC,IAAlB;EACD;;EACDC,EAAAA,WAAW,CAAC1S,OAAD,EAAU;EACnB,SAAKwR,cAAL,GAAsBxR,OAAtB;EACD;;EACD2S,EAAAA,QAAQ,CAACC,KAAD,EAAQ;EACd,SAAKvB,IAAL,CAAUsB,QAAV,CAAmBC,KAAnB;EACD;;EACDC,EAAAA,aAAa,GAAG;EACd,UAAM9rC,GAAG,GAAG,KAAKsqC,IAAL,CAAU/2B,WAAV,EAAZ;;EACA,UAAMw4B,OAAO,GAAG/rC,GAAG,CAACgB,QAAJ,KAAiB,GAAjC;EACA,UAAMgrC,OAAO,GAAGhsC,GAAG,CAACiB,SAAJ,KAAkB,GAAlC;EACA,UAAMgrC,OAAO,GAAGjsC,GAAG,CAACsB,OAAJ,KAAgByqC,OAAhC;EACA,UAAMG,OAAO,GAAGlsC,GAAG,CAACuB,OAAJ,KAAgByqC,OAAhC;EACA,UAAMztC,GAAG,GAAG,IAAIC,KAAJ,CAAU,KAAKgsC,KAAL,GAAa,CAAvB,EAA0B/rC,IAA1B,CAA+B,IAA/B,CAAZ;EACA,QAAI0tC,GAAG,GAAG,CAAV;;EACA,SAAK,IAAIz3C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK81C,KAAzB,EAAgC91C,CAAC,EAAjC,EAAqC;EACnC,YAAMgvC,GAAG,GAAGhvC,CAAC,IAAI,IAAIf,IAAI,CAACqX,EAAT,GAAc,KAAKw/B,KAAvB,CAAb;EACA,YAAMn0C,CAAC,GAAG01C,OAAO,GAAGp4C,IAAI,CAACksC,GAAL,CAAS6D,GAAT,CAAV,GAA0BuI,OAApC;EACA,YAAM31C,CAAC,GAAG01C,OAAO,GAAGr4C,IAAI,CAAC+mC,GAAL,CAASgJ,GAAT,CAAV,GAA0BwI,OAApC;EACA3tC,MAAAA,GAAG,CAAC4tC,GAAG,EAAJ,CAAH,GAAa,KAAKryC,KAAL,CAAWzD,CAAX,EAAcC,CAAd,CAAb;EACD;;EACDiI,IAAAA,GAAG,CAAC4tC,GAAD,CAAH,GAAW,IAAI/zC,UAAJ,CAAemG,GAAG,CAAC,CAAD,CAAlB,CAAX;;EACA,UAAMiP,IAAI,GAAG,KAAK48B,SAAL,CAAe/tB,gBAAf,CAAgC9d,GAAhC,CAAb;;EACA,UAAMof,IAAI,GAAG,KAAKysB,SAAL,CAAe7sB,aAAf,CAA6B/P,IAA7B,CAAb;;EACA,WAAO,KAAKi0B,MAAL,CAAY9jB,IAAZ,CAAP;EACD;;EACD4tB,EAAAA,UAAU,CAACl1C,CAAD,EAAIC,CAAJ,EAAOyoC,KAAP,EAAc;EACtB,WAAO,KAAKjlC,KAAL,CAAWzD,CAAC,GAAG0oC,KAAK,CAAC1oC,CAArB,EAAwBC,CAAC,GAAGyoC,KAAK,CAACzoC,CAAlC,CAAP;EACD;;EACD81C,EAAAA,cAAc,GAAG;EACf,WAAO,KAAKzB,iBAAL,CAAuB,CAAvB,CAAP;EACD;;EACD0B,EAAAA,WAAW,CAACrsC,GAAD,EAAM;EACf,SAAKsqC,IAAL,CAAU+B,WAAV,CAAsBrsC,GAAtB;EACD;;EACDssC,EAAAA,SAAS,CAACrpC,MAAD,EAAS;EAChB,SAAKqnC,IAAL,CAAUgC,SAAV,CAAoBrpC,MAApB;EACD;;EACDspC,EAAAA,SAAS,CAACC,QAAD,EAAWC,SAAX,EAAsB;EAC7B,UAAMzsC,GAAG,GAAG,KAAKsqC,IAAL,CAAU/2B,WAAV,EAAZ;;EACA,UAAMw4B,OAAO,GAAG/rC,GAAG,CAACgB,QAAJ,KAAiB,GAAjC;EACA,UAAMgrC,OAAO,GAAGhsC,GAAG,CAACiB,SAAJ,KAAkB,GAAlC;EACA,UAAMgrC,OAAO,GAAGjsC,GAAG,CAACsB,OAAJ,KAAgByqC,OAAhC;EACA,UAAMG,OAAO,GAAGlsC,GAAG,CAACuB,OAAJ,KAAgByqC,OAAhC;EACA,QAAIU,OAAO,GAAGD,SAAd;EACA,QAAIC,OAAO,IAAI,GAAX,IAAkBA,OAAO,GAAG,IAAI/4C,IAAI,CAACqX,EAAzC,EAA6C0hC,OAAO,GAAG,IAAI/4C,IAAI,CAACqX,EAAnB;EAC7C,UAAM2hC,MAAM,GAAGD,OAAO,IAAI,KAAKlC,KAAL,GAAa,CAAjB,CAAtB;EACA,UAAMjsC,GAAG,GAAG,IAAIC,KAAJ,CAAU,KAAKgsC,KAAf,EAAsB/rC,IAAtB,CAA2B,IAA3B,CAAZ;EACA,QAAI0tC,GAAG,GAAG,CAAV;;EACA,SAAK,IAAIz3C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK81C,KAAzB,EAAgC91C,CAAC,EAAjC,EAAqC;EACnC,YAAMgvC,GAAG,GAAG8I,QAAQ,GAAG93C,CAAC,GAAGi4C,MAA3B;EACA,YAAMt2C,CAAC,GAAG01C,OAAO,GAAGp4C,IAAI,CAACksC,GAAL,CAAS6D,GAAT,CAAV,GAA0BuI,OAApC;EACA,YAAM31C,CAAC,GAAG01C,OAAO,GAAGr4C,IAAI,CAAC+mC,GAAL,CAASgJ,GAAT,CAAV,GAA0BwI,OAApC;EACA3tC,MAAAA,GAAG,CAAC4tC,GAAG,EAAJ,CAAH,GAAa,KAAKryC,KAAL,CAAWzD,CAAX,EAAcC,CAAd,CAAb;EACD;;EACD,UAAMib,IAAI,GAAG,KAAK64B,SAAL,CAAejwB,gBAAf,CAAgC5b,GAAhC,CAAb;;EACA,WAAO,KAAKkjC,MAAL,CAAYlwB,IAAZ,CAAP;EACD;;EACDkwB,EAAAA,MAAM,CAAC3vB,IAAD,EAAO;EACX,QAAI,KAAK24B,cAAL,KAAwB,GAA5B,EAAiC;EAC/B,YAAM1L,KAAK,GAAGT,oBAAoB,CAACqB,gBAArB,CAAsC,KAAK8K,cAA3C,EAA2D,KAAKH,IAAL,CAAUU,SAAV,GAAsB30C,CAAjF,EAAoF,KAAKi0C,IAAL,CAAUU,SAAV,GAAsB10C,CAA1G,CAAd;EACAwb,MAAAA,IAAI,CAACza,KAAL,CAAW0nC,KAAX;EACD;;EACD,WAAOjtB,IAAP;EACD;;EACDhY,EAAAA,KAAK,CAACzD,CAAD,EAAIC,CAAJ,EAAO;EACV,UAAMqkB,EAAE,GAAG,IAAIviB,UAAJ,CAAe/B,CAAf,EAAkBC,CAAlB,CAAX;;EACA,SAAK+zC,UAAL,CAAgB/kB,WAAhB,CAA4B3K,EAA5B;;EACA,WAAOA,EAAP;EACD;;EACDiyB,EAAAA,gBAAgB,CAACJ,QAAD,EAAWC,SAAX,EAAsB;EACpC,UAAMzsC,GAAG,GAAG,KAAKsqC,IAAL,CAAU/2B,WAAV,EAAZ;;EACA,UAAMw4B,OAAO,GAAG/rC,GAAG,CAACgB,QAAJ,KAAiB,GAAjC;EACA,UAAMgrC,OAAO,GAAGhsC,GAAG,CAACiB,SAAJ,KAAkB,GAAlC;EACA,UAAMgrC,OAAO,GAAGjsC,GAAG,CAACsB,OAAJ,KAAgByqC,OAAhC;EACA,UAAMG,OAAO,GAAGlsC,GAAG,CAACuB,OAAJ,KAAgByqC,OAAhC;EACA,QAAIU,OAAO,GAAGD,SAAd;EACA,QAAIC,OAAO,IAAI,GAAX,IAAkBA,OAAO,GAAG,IAAI/4C,IAAI,CAACqX,EAAzC,EAA6C0hC,OAAO,GAAG,IAAI/4C,IAAI,CAACqX,EAAnB;EAC7C,UAAM2hC,MAAM,GAAGD,OAAO,IAAI,KAAKlC,KAAL,GAAa,CAAjB,CAAtB;EACA,UAAMjsC,GAAG,GAAG,IAAIC,KAAJ,CAAU,KAAKgsC,KAAL,GAAa,CAAvB,EAA0B/rC,IAA1B,CAA+B,IAA/B,CAAZ;EACA,QAAI0tC,GAAG,GAAG,CAAV;EACA5tC,IAAAA,GAAG,CAAC4tC,GAAG,EAAJ,CAAH,GAAa,KAAKryC,KAAL,CAAWmyC,OAAX,EAAoBC,OAApB,CAAb;;EACA,SAAK,IAAIx3C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK81C,KAAzB,EAAgC91C,CAAC,EAAjC,EAAqC;EACnC,YAAMgvC,GAAG,GAAG8I,QAAQ,GAAGG,MAAM,GAAGj4C,CAAhC;EACA,YAAM2B,CAAC,GAAG01C,OAAO,GAAGp4C,IAAI,CAACksC,GAAL,CAAS6D,GAAT,CAAV,GAA0BuI,OAApC;EACA,YAAM31C,CAAC,GAAG01C,OAAO,GAAGr4C,IAAI,CAAC+mC,GAAL,CAASgJ,GAAT,CAAV,GAA0BwI,OAApC;EACA3tC,MAAAA,GAAG,CAAC4tC,GAAG,EAAJ,CAAH,GAAa,KAAKryC,KAAL,CAAWzD,CAAX,EAAcC,CAAd,CAAb;EACD;;EACDiI,IAAAA,GAAG,CAAC4tC,GAAG,EAAJ,CAAH,GAAa,KAAKryC,KAAL,CAAWmyC,OAAX,EAAoBC,OAApB,CAAb;;EACA,UAAM1+B,IAAI,GAAG,KAAK48B,SAAL,CAAe/tB,gBAAf,CAAgC9d,GAAhC,CAAb;;EACA,UAAMof,IAAI,GAAG,KAAKysB,SAAL,CAAe7sB,aAAf,CAA6B/P,IAA7B,CAAb;;EACA,WAAO,KAAKi0B,MAAL,CAAY9jB,IAAZ,CAAP;EACD;;EACDkvB,EAAAA,eAAe,GAAG;EAChB,QAAIn4C,CAAC,GAAG,IAAR;EACA,QAAIo4C,GAAG,GAAG,CAAV;EACA,QAAIC,KAAK,GAAGp5C,IAAI,CAAC6S,KAAL,CAAW,KAAKgkC,KAAL,GAAa,CAAxB,CAAZ;EACA,QAAIuC,KAAK,GAAG,CAAZ,EAAeA,KAAK,GAAG,CAAR;EACf,UAAMC,OAAO,GAAG,KAAK1C,IAAL,CAAU/2B,WAAV,GAAwBvS,QAAxB,KAAqC+rC,KAArD;EACA,UAAME,OAAO,GAAG,KAAK3C,IAAL,CAAU/2B,WAAV,GAAwBtS,SAAxB,KAAsC8rC,KAAtD;EACA,UAAMxuC,GAAG,GAAG,IAAIC,KAAJ,CAAU,IAAIuuC,KAAJ,GAAY,CAAtB,EAAyBtuC,IAAzB,CAA8B,IAA9B,CAAZ;;EACA,UAAMuB,GAAG,GAAG,KAAKsqC,IAAL,CAAU/2B,WAAV,EAAZ;;EACA,SAAM7e,CAAC,GAAG,CAAV,EAAcA,CAAC,GAAGq4C,KAAlB,EAAyBr4C,CAAC,EAA1B,EAA8B;EAC5B,YAAM2B,CAAC,GAAG2J,GAAG,CAACsB,OAAJ,KAAgB5M,CAAC,GAAGs4C,OAA9B;EACA,YAAM12C,CAAC,GAAG0J,GAAG,CAACuB,OAAJ,EAAV;EACAhD,MAAAA,GAAG,CAACuuC,GAAG,EAAJ,CAAH,GAAa,KAAKhzC,KAAL,CAAWzD,CAAX,EAAcC,CAAd,CAAb;EACD;;EACD,SAAM5B,CAAC,GAAG,CAAV,EAAcA,CAAC,GAAGq4C,KAAlB,EAAyBr4C,CAAC,EAA1B,EAA8B;EAC5B,YAAM2B,CAAC,GAAG2J,GAAG,CAACoB,OAAJ,EAAV;EACA,YAAM9K,CAAC,GAAG0J,GAAG,CAACuB,OAAJ,KAAgB7M,CAAC,GAAGu4C,OAA9B;EACA1uC,MAAAA,GAAG,CAACuuC,GAAG,EAAJ,CAAH,GAAa,KAAKhzC,KAAL,CAAWzD,CAAX,EAAcC,CAAd,CAAb;EACD;;EACD,SAAM5B,CAAC,GAAG,CAAV,EAAcA,CAAC,GAAGq4C,KAAlB,EAAyBr4C,CAAC,EAA1B,EAA8B;EAC5B,YAAM2B,CAAC,GAAG2J,GAAG,CAACoB,OAAJ,KAAgB1M,CAAC,GAAGs4C,OAA9B;EACA,YAAM12C,CAAC,GAAG0J,GAAG,CAACqB,OAAJ,EAAV;EACA9C,MAAAA,GAAG,CAACuuC,GAAG,EAAJ,CAAH,GAAa,KAAKhzC,KAAL,CAAWzD,CAAX,EAAcC,CAAd,CAAb;EACD;;EACD,SAAM5B,CAAC,GAAG,CAAV,EAAcA,CAAC,GAAGq4C,KAAlB,EAAyBr4C,CAAC,EAA1B,EAA8B;EAC5B,YAAM2B,CAAC,GAAG2J,GAAG,CAACsB,OAAJ,EAAV;EACA,YAAMhL,CAAC,GAAG0J,GAAG,CAACqB,OAAJ,KAAgB3M,CAAC,GAAGu4C,OAA9B;EACA1uC,MAAAA,GAAG,CAACuuC,GAAG,EAAJ,CAAH,GAAa,KAAKhzC,KAAL,CAAWzD,CAAX,EAAcC,CAAd,CAAb;EACD;;EACDiI,IAAAA,GAAG,CAACuuC,GAAG,EAAJ,CAAH,GAAa,IAAI10C,UAAJ,CAAemG,GAAG,CAAC,CAAD,CAAlB,CAAb;;EACA,UAAMiP,IAAI,GAAG,KAAK48B,SAAL,CAAe/tB,gBAAf,CAAgC9d,GAAhC,CAAb;;EACA,UAAMof,IAAI,GAAG,KAAKysB,SAAL,CAAe7sB,aAAf,CAA6B/P,IAA7B,CAAb;;EACA,WAAO,KAAKi0B,MAAL,CAAY9jB,IAAZ,CAAP;EACD;;EACDuvB,EAAAA,YAAY,GAAG;EACb,WAAO,KAAKpB,aAAL,EAAP;EACD;;EACDqB,EAAAA,SAAS,CAACC,MAAD,EAAS;EAChB,SAAK9C,IAAL,CAAU6C,SAAV,CAAoBC,MAApB;EACD;;EACDC,EAAAA,OAAO,CAACnxC,IAAD,EAAO;EACZ,SAAKouC,IAAL,CAAU+C,OAAV,CAAkBnxC,IAAlB;EACD;;EA/LwC;;EAiM3C,MAAMquC,UAAN,CAAiB;EACfx2C,EAAAA,WAAW,GAAG;EACZw2C,IAAAA,UAAU,CAACnzC,YAAX,CAAwBC,KAAxB,CAA8B,IAA9B,EAAoCC,SAApC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKs0C,IAAL,GAAY,IAAZ;EACA,SAAKzoC,MAAL,GAAc,IAAd;EACA,SAAK4oC,KAAL,GAAa,IAAb;EACA,SAAKuB,MAAL,GAAc,IAAd;EACD;;EACD3B,EAAAA,OAAO,CAACC,IAAD,EAAO;EACZ,SAAKA,IAAL,GAAYA,IAAZ;EACD;;EACDE,EAAAA,QAAQ,CAACC,KAAD,EAAQ;EACd,SAAKA,KAAL,GAAaA,KAAb;EACD;;EACDyB,EAAAA,OAAO,GAAG;EACR,WAAO,KAAK5B,IAAZ;EACD;;EACD1qC,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAK6qC,KAAZ;EACD;;EACDQ,EAAAA,WAAW,CAACrsC,GAAD,EAAM;EACf,SAAK6rC,KAAL,GAAa7rC,GAAG,CAACgB,QAAJ,EAAb;EACA,SAAKosC,MAAL,GAAcptC,GAAG,CAACiB,SAAJ,EAAd;EACA,SAAKyqC,IAAL,GAAY,IAAItzC,UAAJ,CAAe4H,GAAG,CAACsB,OAAJ,EAAf,EAA8BtB,GAAG,CAACuB,OAAJ,EAA9B,CAAZ;EACA,SAAK0B,MAAL,GAAc,IAAI7K,UAAJ,CAAe4H,GAAG,CAACiD,MAAJ,EAAf,CAAd;EACD;;EACDqpC,EAAAA,SAAS,CAACrpC,MAAD,EAAS;EAChB,SAAKA,MAAL,GAAcA,MAAd;EACD;;EACD8nC,EAAAA,UAAU,GAAG;EACX,WAAOp3C,IAAI,CAAC+M,GAAL,CAAS,KAAKmrC,KAAd,EAAqB,KAAKuB,MAA1B,CAAP;EACD;;EACD75B,EAAAA,WAAW,GAAG;EACZ,QAAI,KAAKm4B,IAAL,KAAc,IAAlB,EACE,OAAO,IAAIjsC,QAAJ,CAAa,KAAKisC,IAAL,CAAUr1C,CAAvB,EAA0B,KAAKq1C,IAAL,CAAUr1C,CAAV,GAAc,KAAKw1C,KAA7C,EAAoD,KAAKH,IAAL,CAAUp1C,CAA9D,EAAiE,KAAKo1C,IAAL,CAAUp1C,CAAV,GAAc,KAAK82C,MAApF,CAAP;EAEF,QAAI,KAAKnqC,MAAL,KAAgB,IAApB,EACE,OAAO,IAAIxD,QAAJ,CAAa,KAAKwD,MAAL,CAAY5M,CAAZ,GAAgB,KAAKw1C,KAAL,GAAa,CAA1C,EAA6C,KAAK5oC,MAAL,CAAY5M,CAAZ,GAAgB,KAAKw1C,KAAL,GAAa,CAA1E,EAA6E,KAAK5oC,MAAL,CAAY3M,CAAZ,GAAgB,KAAK82C,MAAL,GAAc,CAA3G,EAA8G,KAAKnqC,MAAL,CAAY3M,CAAZ,GAAgB,KAAK82C,MAAL,GAAc,CAA5I,CAAP;EAEF,WAAO,IAAI3tC,QAAJ,CAAa,CAAb,EAAgB,KAAKosC,KAArB,EAA4B,CAA5B,EAA+B,KAAKuB,MAApC,CAAP;EACD;;EACDpC,EAAAA,SAAS,GAAG;EACV,QAAI,KAAK/nC,MAAL,KAAgB,IAApB,EACE,KAAKA,MAAL,GAAc,IAAI7K,UAAJ,CAAe,KAAKszC,IAAL,CAAUr1C,CAAV,GAAc,KAAKw1C,KAAL,GAAa,CAA1C,EAA6C,KAAKH,IAAL,CAAUp1C,CAAV,GAAc,KAAK82C,MAAL,GAAc,CAAzE,CAAd;EAEF,WAAO,KAAKnqC,MAAZ;EACD;;EACDhC,EAAAA,SAAS,GAAG;EACV,WAAO,KAAKmsC,MAAZ;EACD;;EACDD,EAAAA,SAAS,CAACC,MAAD,EAAS;EAChB,SAAKA,MAAL,GAAcA,MAAd;EACD;;EACDC,EAAAA,OAAO,CAACnxC,IAAD,EAAO;EACZ,SAAKkxC,MAAL,GAAclxC,IAAd;EACA,SAAK2vC,KAAL,GAAa3vC,IAAb;EACD;;EA1Dc;;EA4DjBiuC,qBAAqB,CAACI,UAAtB,GAAmCA,UAAnC;;EC/Pe,MAAMgD,eAAN,SAA8BpD,qBAA9B,CAAoD;EACjEp2C,EAAAA,WAAW,GAAG;EACZ;EACAw5C,IAAAA,eAAe,CAACn2C,YAAhB,CAA6BC,KAA7B,CAAmC,IAAnC,EAAyCC,SAAzC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKo2C,QAAL,GAAgB,CAAhB;EACA,SAAKC,eAAL,GAAuB,GAAvB;;EACA,QAAIn2C,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B4yC,MAAAA,qBAAqB,CAAC/yC,YAAtB,CAAmCI,IAAnC,CAAwC,IAAxC;EACD,KAFD,MAEO,IAAIF,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMmzC,QAAQ,GAAGpzC,SAAS,CAAC,CAAD,CAA1B;EACA6yC,MAAAA,qBAAqB,CAAC/yC,YAAtB,CAAmCI,IAAnC,CAAwC,IAAxC,EAA8CkzC,QAA9C;EACD;EACF;;EACD,SAAO/4B,MAAP,CAAc+7B,MAAd,EAAsBxxC,IAAtB,EAA4BuR,IAA5B,EAAkCkgC,KAAlC,EAAyCC,cAAzC,EAAyD;EACvD,UAAMC,GAAG,GAAG,IAAIN,eAAJ,EAAZ;EACAM,IAAAA,GAAG,CAACvB,SAAJ,CAAcoB,MAAd;EACAG,IAAAA,GAAG,CAACR,OAAJ,CAAYnxC,IAAZ;EACA2xC,IAAAA,GAAG,CAACrC,YAAJ,CAAiB/9B,IAAjB;EACAogC,IAAAA,GAAG,CAACC,iBAAJ,CAAsBF,cAAtB;EACAC,IAAAA,GAAG,CAACE,UAAJ,CAAeJ,KAAf;EACA,UAAMhwB,IAAI,GAAGkwB,GAAG,CAACG,cAAJ,EAAb;EACA,WAAOrwB,IAAP;EACD;;EACDowB,EAAAA,UAAU,CAACE,OAAD,EAAU;EAClB,SAAKT,QAAL,GAAgBS,OAAhB;EACD;;EACDH,EAAAA,iBAAiB,CAACF,cAAD,EAAiB;EAChC,SAAKH,eAAL,GAAuBG,cAAvB;EACD;;EACDI,EAAAA,cAAc,GAAG;EACf,UAAMhuC,GAAG,GAAG,KAAKsqC,IAAL,CAAU/2B,WAAV,EAAZ;;EACA,UAAMu3B,MAAM,GAAG9qC,GAAG,CAACgB,QAAJ,KAAiB,GAAhC;EACA,QAAIktC,QAAQ,GAAG,KAAKT,eAApB;EACA,QAAIS,QAAQ,GAAG,GAAf,EAAoBA,QAAQ,GAAG,GAAX;EACpB,QAAIA,QAAQ,GAAG,GAAf,EAAoBA,QAAQ,GAAG,GAAX;EACpB,UAAMC,SAAS,GAAGD,QAAQ,GAAGpD,MAA7B;EACA,UAAMsD,YAAY,GAAG,CAAC,IAAIF,QAAL,IAAiBpD,MAAtC;EACA,UAAMmB,OAAO,GAAGjsC,GAAG,CAACsB,OAAJ,KAAgBwpC,MAAhC;EACA,UAAMoB,OAAO,GAAGlsC,GAAG,CAACuB,OAAJ,KAAgBupC,MAAhC;EACA,UAAMvsC,GAAG,GAAG,IAAIC,KAAJ,CAAU,KAAKgsC,KAAL,GAAa,CAAvB,EAA0B/rC,IAA1B,CAA+B,IAA/B,CAAZ;EACA,QAAI0tC,GAAG,GAAG,CAAV;;EACA,SAAK,IAAIz3C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK81C,KAAzB,EAAgC91C,CAAC,EAAjC,EAAqC;EACnC,YAAM25C,SAAS,GAAG35C,CAAC,GAAG,KAAK81C,KAAT,GAAiB,KAAKgD,QAAxC;EACA,YAAMc,UAAU,GAAGD,SAAS,GAAG16C,IAAI,CAACuC,KAAL,CAAWm4C,SAAX,CAA/B;EACA,YAAME,MAAM,GAAG,IAAI56C,IAAI,CAACqX,EAAT,GAAcsjC,UAA7B;EACA,YAAME,UAAU,GAAG,CAAC76C,IAAI,CAACksC,GAAL,CAAS0O,MAAT,IAAmB,GAApB,IAA2B,GAA9C;EACA,YAAME,WAAW,GAAGL,YAAY,GAAGD,SAAS,GAAGK,UAA/C;EACA,YAAM9K,GAAG,GAAGhvC,CAAC,IAAI,IAAIf,IAAI,CAACqX,EAAT,GAAc,KAAKw/B,KAAvB,CAAb;EACA,YAAMn0C,CAAC,GAAGo4C,WAAW,GAAG96C,IAAI,CAACksC,GAAL,CAAS6D,GAAT,CAAd,GAA8BuI,OAAxC;EACA,YAAM31C,CAAC,GAAGm4C,WAAW,GAAG96C,IAAI,CAAC+mC,GAAL,CAASgJ,GAAT,CAAd,GAA8BwI,OAAxC;EACA3tC,MAAAA,GAAG,CAAC4tC,GAAG,EAAJ,CAAH,GAAa,KAAKryC,KAAL,CAAWzD,CAAX,EAAcC,CAAd,CAAb;EACD;;EACDiI,IAAAA,GAAG,CAAC4tC,GAAD,CAAH,GAAW,IAAI/zC,UAAJ,CAAemG,GAAG,CAAC,CAAD,CAAlB,CAAX;;EACA,UAAMiP,IAAI,GAAG,KAAK48B,SAAL,CAAe/tB,gBAAf,CAAgC9d,GAAhC,CAAb;;EACA,UAAMof,IAAI,GAAG,KAAKysB,SAAL,CAAe7sB,aAAf,CAA6B/P,IAA7B,CAAb;;EACA,WAAOmQ,IAAP;EACD;;EA1DgE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ECCpD,MAAM+wB,iBAAN,CAAwB;EACrC36C,EAAAA,WAAW,GAAG;EACZ26C,IAAAA,iBAAiB,CAACt3C,YAAlB,CAA+BC,KAA/B,CAAqC,IAArC,EAA2CC,SAA3C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKu3C,GAAL,GAAW,CAAC,IAAIv2C,UAAJ,EAAD,EAAmB,IAAIA,UAAJ,EAAnB,CAAX;EACA,SAAKw2C,SAAL,GAAiB/5C,MAAM,CAACC,GAAxB;EACA,SAAK+5C,OAAL,GAAe,IAAf;EACD;;EACD/0B,EAAAA,cAAc,GAAG;EACf,WAAO,KAAK60B,GAAZ;EACD;;EACD3wC,EAAAA,aAAa,CAACtJ,CAAD,EAAI;EACf,WAAO,KAAKi6C,GAAL,CAASj6C,CAAT,CAAP;EACD;;EACDo6C,EAAAA,UAAU,GAAG;EACX,QAAIx3C,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMw3C,MAAM,GAAGz3C,SAAS,CAAC,CAAD,CAAxB;EACA,WAAKw3C,UAAL,CAAgBC,MAAM,CAACJ,GAAP,CAAW,CAAX,CAAhB,EAA+BI,MAAM,CAACJ,GAAP,CAAW,CAAX,CAA/B;EACD,KAHD,MAGO,IAAIr3C,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMikB,EAAE,GAAGlkB,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyB2I,EAAE,GAAG3I,SAAS,CAAC,CAAD,CAAvC;;EACA,UAAI,KAAKu3C,OAAT,EAAkB;EAChB,aAAKG,UAAL,CAAgBxzB,EAAhB,EAAoBvb,EAApB;EACA,eAAO,IAAP;EACD;;EACD,YAAMwR,IAAI,GAAG+J,EAAE,CAAC/gB,QAAH,CAAYwF,EAAZ,CAAb;EACA,UAAIwR,IAAI,GAAG,KAAKm9B,SAAhB,EAA2B,KAAKI,UAAL,CAAgBxzB,EAAhB,EAAoBvb,EAApB,EAAwBwR,IAAxB;EAC5B;EACF;;EACDu9B,EAAAA,UAAU,GAAG;EACX,QAAI13C,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,WAAKs3C,OAAL,GAAe,IAAf;EACD,KAFD,MAEO,IAAIv3C,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMikB,EAAE,GAAGlkB,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyB2I,EAAE,GAAG3I,SAAS,CAAC,CAAD,CAAvC;;EACA,WAAKq3C,GAAL,CAAS,CAAT,EAAYj0C,aAAZ,CAA0B8gB,EAA1B;;EACA,WAAKmzB,GAAL,CAAS,CAAT,EAAYj0C,aAAZ,CAA0BuF,EAA1B;;EACA,WAAK2uC,SAAL,GAAiBpzB,EAAE,CAAC/gB,QAAH,CAAYwF,EAAZ,CAAjB;EACA,WAAK4uC,OAAL,GAAe,KAAf;EACD,KANM,MAMA,IAAIv3C,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMikB,EAAE,GAAGlkB,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyB2I,EAAE,GAAG3I,SAAS,CAAC,CAAD,CAAvC;EAAA,YAA4CmD,QAAQ,GAAGnD,SAAS,CAAC,CAAD,CAAhE;;EACA,WAAKq3C,GAAL,CAAS,CAAT,EAAYj0C,aAAZ,CAA0B8gB,EAA1B;;EACA,WAAKmzB,GAAL,CAAS,CAAT,EAAYj0C,aAAZ,CAA0BuF,EAA1B;;EACA,WAAK2uC,SAAL,GAAiBn0C,QAAjB;EACA,WAAKo0C,OAAL,GAAe,KAAf;EACD;EACF;;EACDz6C,EAAAA,QAAQ,GAAG;EACT,WAAOk6B,SAAS,CAACC,YAAV,CAAuB,KAAKogB,GAAL,CAAS,CAAT,CAAvB,EAAoC,KAAKA,GAAL,CAAS,CAAT,CAApC,CAAP;EACD;;EACDM,EAAAA,WAAW,GAAG;EACZ,WAAO,KAAKL,SAAZ;EACD;;EACDM,EAAAA,UAAU,GAAG;EACX,QAAI53C,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMw3C,MAAM,GAAGz3C,SAAS,CAAC,CAAD,CAAxB;EACA,WAAK43C,UAAL,CAAgBH,MAAM,CAACJ,GAAP,CAAW,CAAX,CAAhB,EAA+BI,MAAM,CAACJ,GAAP,CAAW,CAAX,CAA/B;EACD,KAHD,MAGO,IAAIr3C,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMikB,EAAE,GAAGlkB,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyB2I,EAAE,GAAG3I,SAAS,CAAC,CAAD,CAAvC;;EACA,UAAI,KAAKu3C,OAAT,EAAkB;EAChB,aAAKG,UAAL,CAAgBxzB,EAAhB,EAAoBvb,EAApB;EACA,eAAO,IAAP;EACD;;EACD,YAAMwR,IAAI,GAAG+J,EAAE,CAAC/gB,QAAH,CAAYwF,EAAZ,CAAb;EACA,UAAIwR,IAAI,GAAG,KAAKm9B,SAAhB,EAA2B,KAAKI,UAAL,CAAgBxzB,EAAhB,EAAoBvb,EAApB,EAAwBwR,IAAxB;EAC5B;EACF;;EAjEoC;;ECIxB,MAAM09B,eAAN,CAAsB;EACnC,SAAOC,eAAP,GAAyB;EACvB,QAAI93C,SAAS,CAAC,CAAD,CAAT,YAAwBo3C,iBAAxB,IAA8Cp3C,SAAS,CAAC,CAAD,CAAT,YAAwBoiB,UAAxB,IAAsCpiB,SAAS,CAAC,CAAD,CAAT,YAAwBc,UAAhH,EAA6H;EAC3H,YAAMmZ,IAAI,GAAGja,SAAS,CAAC,CAAD,CAAtB;EAAA,YAA2BqjB,EAAE,GAAGrjB,SAAS,CAAC,CAAD,CAAzC;EAAA,YAA8Cy3C,MAAM,GAAGz3C,SAAS,CAAC,CAAD,CAAhE;EACA,YAAM+3C,WAAW,GAAG,IAAI1c,WAAJ,EAApB;EACA,YAAMqR,MAAM,GAAGzyB,IAAI,CAACuI,cAAL,EAAf;;EACA,WAAK,IAAIplB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsvC,MAAM,CAACzsC,MAAP,GAAgB,CAApC,EAAuC7C,CAAC,EAAxC,EAA4C;EAC1C26C,QAAAA,WAAW,CAAC/Z,cAAZ,CAA2B0O,MAAM,CAACtvC,CAAD,CAAjC,EAAsCsvC,MAAM,CAACtvC,CAAC,GAAG,CAAL,CAA5C;EACA,cAAMs/B,SAAS,GAAGqb,WAAW,CAACnb,YAAZ,CAAyBvZ,EAAzB,CAAlB;EACAo0B,QAAAA,MAAM,CAACD,UAAP,CAAkB9a,SAAlB,EAA6BrZ,EAA7B;EACD;EACF,KATD,MASO,IAAIrjB,SAAS,CAAC,CAAD,CAAT,YAAwBo3C,iBAAxB,IAA8Cp3C,SAAS,CAAC,CAAD,CAAT,YAAwB0kB,OAAxB,IAAmC1kB,SAAS,CAAC,CAAD,CAAT,YAAwBc,UAA7G,EAA0H;EAC/H,YAAMulB,IAAI,GAAGrmB,SAAS,CAAC,CAAD,CAAtB;EAAA,YAA2BqjB,EAAE,GAAGrjB,SAAS,CAAC,CAAD,CAAzC;EAAA,YAA8Cy3C,MAAM,GAAGz3C,SAAS,CAAC,CAAD,CAAhE;EACA63C,MAAAA,eAAe,CAACC,eAAhB,CAAgCzxB,IAAI,CAACN,eAAL,EAAhC,EAAwD1C,EAAxD,EAA4Do0B,MAA5D;;EACA,WAAK,IAAIr6C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGipB,IAAI,CAAChB,kBAAL,EAApB,EAA+CjoB,CAAC,EAAhD,EACEy6C,eAAe,CAACC,eAAhB,CAAgCzxB,IAAI,CAACL,gBAAL,CAAsB5oB,CAAtB,CAAhC,EAA0DimB,EAA1D,EAA8Do0B,MAA9D;EAEH,KANM,MAMA,IAAIz3C,SAAS,CAAC,CAAD,CAAT,YAAwBo3C,iBAAxB,IAA8Cp3C,SAAS,CAAC,CAAD,CAAT,YAAwBya,QAAxB,IAAoCza,SAAS,CAAC,CAAD,CAAT,YAAwBc,UAA9G,EAA2H;EAChI,YAAM0Z,IAAI,GAAGxa,SAAS,CAAC,CAAD,CAAtB;EAAA,YAA2BqjB,EAAE,GAAGrjB,SAAS,CAAC,CAAD,CAAzC;EAAA,YAA8Cy3C,MAAM,GAAGz3C,SAAS,CAAC,CAAD,CAAhE;;EACA,UAAIwa,IAAI,YAAY4H,UAApB,EAAgC;EAC9By1B,QAAAA,eAAe,CAACC,eAAhB,CAAgCt9B,IAAhC,EAAsC6I,EAAtC,EAA0Co0B,MAA1C;EACD,OAFD,MAEO,IAAIj9B,IAAI,YAAYkK,OAApB,EAA6B;EAClCmzB,QAAAA,eAAe,CAACC,eAAhB,CAAgCt9B,IAAhC,EAAsC6I,EAAtC,EAA0Co0B,MAA1C;EACD,OAFM,MAEA,IAAIj9B,IAAI,YAAYyM,kBAApB,EAAwC;EAC7C,cAAMQ,EAAE,GAAGjN,IAAX;;EACA,aAAK,IAAIpd,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqqB,EAAE,CAAC/L,gBAAH,EAApB,EAA2Cte,CAAC,EAA5C,EAAgD;EAC9C,gBAAMme,CAAC,GAAGkM,EAAE,CAAC1M,YAAH,CAAgB3d,CAAhB,CAAV;EACAy6C,UAAAA,eAAe,CAACC,eAAhB,CAAgCv8B,CAAhC,EAAmC8H,EAAnC,EAAuCo0B,MAAvC;EACD;EACF,OANM,MAMA;EACLA,QAAAA,MAAM,CAACD,UAAP,CAAkBh9B,IAAI,CAAC9T,aAAL,EAAlB,EAAwC2c,EAAxC;EACD;EACF,KAfM,MAeA,IAAIrjB,SAAS,CAAC,CAAD,CAAT,YAAwBo3C,iBAAxB,IAA8Cp3C,SAAS,CAAC,CAAD,CAAT,YAAwBq7B,WAAxB,IAAuCr7B,SAAS,CAAC,CAAD,CAAT,YAAwBc,UAAjH,EAA8H;EACnI,YAAMk3C,OAAO,GAAGh4C,SAAS,CAAC,CAAD,CAAzB;EAAA,YAA8BqjB,EAAE,GAAGrjB,SAAS,CAAC,CAAD,CAA5C;EAAA,YAAiDy3C,MAAM,GAAGz3C,SAAS,CAAC,CAAD,CAAnE;EACA,YAAM08B,SAAS,GAAGsb,OAAO,CAACpb,YAAR,CAAqBvZ,EAArB,CAAlB;EACAo0B,MAAAA,MAAM,CAACD,UAAP,CAAkB9a,SAAlB,EAA6BrZ,EAA7B;EACD;EACF;;EArCkC;;ECDtB,MAAM40B,yBAAN,CAAgC;EAC7Cx7C,EAAAA,WAAW,GAAG;EACZw7C,IAAAA,yBAAyB,CAACn4C,YAA1B,CAAuCC,KAAvC,CAA6C,IAA7C,EAAmDC,SAAnD;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKo4C,GAAL,GAAW,IAAX;EACA,SAAKC,GAAL,GAAW,IAAX;EACA,SAAKC,OAAL,GAAe,IAAIhB,iBAAJ,EAAf;EACA,SAAKiB,YAAL,GAAoB,GAApB;EACA,UAAM5K,EAAE,GAAGztC,SAAS,CAAC,CAAD,CAApB;EAAA,UAAyB0tC,EAAE,GAAG1tC,SAAS,CAAC,CAAD,CAAvC;EACA,SAAKk4C,GAAL,GAAWzK,EAAX;EACA,SAAK0K,GAAL,GAAWzK,EAAX;EACD;;EACD,SAAOvqC,QAAP,GAAkB;EAChB,QAAInD,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMwtC,EAAE,GAAGztC,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyB0tC,EAAE,GAAG1tC,SAAS,CAAC,CAAD,CAAvC;EACA,YAAMma,IAAI,GAAG,IAAI89B,yBAAJ,CAA8BxK,EAA9B,EAAkCC,EAAlC,CAAb;EACA,aAAOvzB,IAAI,CAAChX,QAAL,EAAP;EACD,KAJD,MAIO,IAAInD,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMwtC,EAAE,GAAGztC,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyB0tC,EAAE,GAAG1tC,SAAS,CAAC,CAAD,CAAvC;EAAA,YAA4Cs4C,WAAW,GAAGt4C,SAAS,CAAC,CAAD,CAAnE;EACA,YAAMma,IAAI,GAAG,IAAI89B,yBAAJ,CAA8BxK,EAA9B,EAAkCC,EAAlC,CAAb;EACAvzB,MAAAA,IAAI,CAACo+B,kBAAL,CAAwBD,WAAxB;EACA,aAAOn+B,IAAI,CAAChX,QAAL,EAAP;EACD;EACF;;EACDqf,EAAAA,cAAc,GAAG;EACf,WAAO,KAAK41B,OAAL,CAAa51B,cAAb,EAAP;EACD;;EACD+1B,EAAAA,kBAAkB,CAACD,WAAD,EAAc;EAC9B,QAAIA,WAAW,GAAG,GAAd,IAAqBA,WAAW,IAAI,GAAxC,EAA6C,MAAM,IAAIv7C,wBAAJ,CAA6B,sCAA7B,CAAN;EAC7C,SAAKs7C,YAAL,GAAoBC,WAApB;EACD;;EACD1M,EAAAA,OAAO,CAAC6B,EAAD,EAAKC,EAAL,EAAS;EACd,SAAK8K,uBAAL,CAA6B/K,EAA7B,EAAiCC,EAAjC,EAAqC,KAAK0K,OAA1C;EACA,SAAKI,uBAAL,CAA6B9K,EAA7B,EAAiCD,EAAjC,EAAqC,KAAK2K,OAA1C;EACD;;EACDj1C,EAAAA,QAAQ,GAAG;EACT,SAAKyoC,OAAL,CAAa,KAAKsM,GAAlB,EAAuB,KAAKC,GAA5B;EACA,WAAO,KAAKC,OAAL,CAAaT,WAAb,EAAP;EACD;;EACDa,EAAAA,uBAAuB,CAACC,YAAD,EAAej+B,IAAf,EAAqBi9B,MAArB,EAA6B;EAClD,UAAMiB,UAAU,GAAG,IAAIC,sBAAJ,CAA2Bn+B,IAA3B,CAAnB;EACAi+B,IAAAA,YAAY,CAAC14C,KAAb,CAAmB24C,UAAnB;EACAjB,IAAAA,MAAM,CAACG,UAAP,CAAkBc,UAAU,CAACE,mBAAX,EAAlB;;EACA,QAAI,KAAKP,YAAL,GAAoB,CAAxB,EAA2B;EACzB,YAAMQ,UAAU,GAAG,IAAIC,oCAAJ,CAAyCt+B,IAAzC,EAA+C,KAAK69B,YAApD,CAAnB;EACAI,MAAAA,YAAY,CAAC14C,KAAb,CAAmB84C,UAAnB;EACApB,MAAAA,MAAM,CAACG,UAAP,CAAkBiB,UAAU,CAACD,mBAAX,EAAlB;EACD;EACF;;EACDG,EAAAA,gBAAgB,GAAG;EACjB,SAAKP,uBAAL,CAA6B,KAAKN,GAAlC,EAAuC,KAAKC,GAA5C,EAAiD,KAAKC,OAAtD;EACA,WAAO,KAAKA,OAAL,CAAaT,WAAb,EAAP;EACD;;EArD4C;;EAuD/C,MAAMgB,sBAAN,CAA6B;EAC3Bl8C,EAAAA,WAAW,GAAG;EACZk8C,IAAAA,sBAAsB,CAAC74C,YAAvB,CAAoCC,KAApC,CAA0C,IAA1C,EAAgDC,SAAhD;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKk5C,UAAL,GAAkB,IAAI5B,iBAAJ,EAAlB;EACA,SAAK6B,UAAL,GAAkB,IAAI7B,iBAAJ,EAAlB;EACA,SAAK8B,cAAL,GAAsB,IAAIrB,eAAJ,EAAtB;EACA,SAAKsB,KAAL,GAAa,IAAb;EACA,UAAM3+B,IAAI,GAAGxa,SAAS,CAAC,CAAD,CAAtB;EACA,SAAKm5C,KAAL,GAAa3+B,IAAb;EACD;;EACDzS,EAAAA,MAAM,CAACsb,EAAD,EAAK;EACT,SAAK41B,UAAL,CAAgBvB,UAAhB;;EACAG,IAAAA,eAAe,CAACC,eAAhB,CAAgC,KAAKqB,KAArC,EAA4C91B,EAA5C,EAAgD,KAAK41B,UAArD;;EACA,SAAKD,UAAL,CAAgBpB,UAAhB,CAA2B,KAAKqB,UAAhC;EACD;;EACDL,EAAAA,mBAAmB,GAAG;EACpB,WAAO,KAAKI,UAAZ;EACD;;EACD,MAAI31C,WAAJ,GAAkB;EAChB,WAAO,CAACub,gBAAD,CAAP;EACD;;EAtB0B;;EAwB7B,MAAMk6B,oCAAN,CAA2C;EACzCr8C,EAAAA,WAAW,GAAG;EACZq8C,IAAAA,oCAAoC,CAACh5C,YAArC,CAAkDC,KAAlD,CAAwD,IAAxD,EAA8DC,SAA9D;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKk5C,UAAL,GAAkB,IAAI5B,iBAAJ,EAAlB;EACA,SAAK6B,UAAL,GAAkB,IAAI7B,iBAAJ,EAAlB;EACA,SAAK+B,KAAL,GAAa,IAAb;EACA,SAAKC,WAAL,GAAmB,CAAnB;EACA,UAAM5+B,IAAI,GAAGxa,SAAS,CAAC,CAAD,CAAtB;EAAA,UAA2Bq5C,QAAQ,GAAGr5C,SAAS,CAAC,CAAD,CAA/C;EACA,SAAKm5C,KAAL,GAAa3+B,IAAb;EACA,SAAK4+B,WAAL,GAAmB/8C,IAAI,CAAC6S,KAAL,CAAW7S,IAAI,CAAC6xB,KAAL,CAAW,MAAMmrB,QAAjB,CAAX,CAAnB;EACD;;EACDtxC,EAAAA,MAAM,CAACC,GAAD,EAAMtC,KAAN,EAAa;EACjB,QAAIA,KAAK,KAAK,CAAd,EAAiB,OAAO,IAAP;EACjB,UAAMwe,EAAE,GAAGlc,GAAG,CAACtB,aAAJ,CAAkBhB,KAAK,GAAG,CAA1B,CAAX;EACA,UAAMiD,EAAE,GAAGX,GAAG,CAACtB,aAAJ,CAAkBhB,KAAlB,CAAX;EACA,UAAM4zC,IAAI,GAAG,CAAC3wC,EAAE,CAAC5J,CAAH,GAAOmlB,EAAE,CAACnlB,CAAX,IAAgB,KAAKq6C,WAAlC;EACA,UAAMG,IAAI,GAAG,CAAC5wC,EAAE,CAAC3J,CAAH,GAAOklB,EAAE,CAACllB,CAAX,IAAgB,KAAKo6C,WAAlC;;EACA,SAAK,IAAIh8C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKg8C,WAAzB,EAAsCh8C,CAAC,EAAvC,EAA2C;EACzC,YAAM2B,CAAC,GAAGmlB,EAAE,CAACnlB,CAAH,GAAO3B,CAAC,GAAGk8C,IAArB;EACA,YAAMt6C,CAAC,GAAGklB,EAAE,CAACllB,CAAH,GAAO5B,CAAC,GAAGm8C,IAArB;EACA,YAAMl2B,EAAE,GAAG,IAAIviB,UAAJ,CAAe/B,CAAf,EAAkBC,CAAlB,CAAX;;EACA,WAAKi6C,UAAL,CAAgBvB,UAAhB;;EACAG,MAAAA,eAAe,CAACC,eAAhB,CAAgC,KAAKqB,KAArC,EAA4C91B,EAA5C,EAAgD,KAAK41B,UAArD;;EACA,WAAKD,UAAL,CAAgBpB,UAAhB,CAA2B,KAAKqB,UAAhC;EACD;EACF;;EACDhxC,EAAAA,MAAM,GAAG;EACP,WAAO,KAAP;EACD;;EACDC,EAAAA,iBAAiB,GAAG;EAClB,WAAO,KAAP;EACD;;EACD0wC,EAAAA,mBAAmB,GAAG;EACpB,WAAO,KAAKI,UAAZ;EACD;;EACD,MAAI31C,WAAJ,GAAkB;EAChB,WAAO,CAACyE,wBAAD,CAAP;EACD;;EAvCwC;;EAyC3CmwC,yBAAyB,CAACU,sBAA1B,GAAmDA,sBAAnD;EACAV,yBAAyB,CAACa,oCAA1B,GAAiEA,oCAAjE;;;;;;;;;EC/He,MAAMU,WAAN,CAAkB;EAC/BC,EAAAA,SAAS,CAACC,IAAD,EAAO;;EADe;;ECAlB,MAAMC,sBAAN,CAA6B;EAC1CC,EAAAA,MAAM,CAACnxC,CAAD,EAAI;;EADgC;;ECI7B,MAAMoxC,iBAAN,CAAwB;EACrCp9C,EAAAA,WAAW,GAAG;EACZo9C,IAAAA,iBAAiB,CAAC/5C,YAAlB,CAA+BC,KAA/B,CAAqC,IAArC,EAA2CC,SAA3C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKg6C,IAAL,GAAYv8C,MAAM,CAACw8C,iBAAnB;EACA,SAAKC,IAAL,GAAYz8C,MAAM,CAAC8B,iBAAnB;EACD;;EACD46C,EAAAA,MAAM,GAAG;EACP,WAAO,KAAKH,IAAZ;EACD;;EACD/wC,EAAAA,UAAU,CAACmxC,QAAD,EAAWC,QAAX,EAAqB;EAC7B,QAAI,KAAKL,IAAL,GAAYK,QAAZ,IAAwB,KAAKH,IAAL,GAAYE,QAAxC,EAAkD,OAAO,KAAP;EAClD,WAAO,IAAP;EACD;;EACDE,EAAAA,MAAM,GAAG;EACP,WAAO,KAAKJ,IAAZ;EACD;;EACDl9C,EAAAA,QAAQ,GAAG;EACT,WAAOk6B,SAAS,CAACC,YAAV,CAAuB,IAAIn2B,UAAJ,CAAe,KAAKg5C,IAApB,EAA0B,CAA1B,CAAvB,EAAqD,IAAIh5C,UAAJ,CAAe,KAAKk5C,IAApB,EAA0B,CAA1B,CAArD,CAAP;EACD;;EApBoC;;EAsBvC,MAAMK,cAAN,CAAqB;EACnB32C,EAAAA,OAAO,CAACsmB,EAAD,EAAKC,EAAL,EAAS;EACd,UAAMvC,EAAE,GAAGsC,EAAX;EACA,UAAMrC,EAAE,GAAGsC,EAAX;EACA,UAAMqwB,IAAI,GAAG,CAAC5yB,EAAE,CAACoyB,IAAH,GAAUpyB,EAAE,CAACsyB,IAAd,IAAsB,CAAnC;EACA,UAAMO,IAAI,GAAG,CAAC5yB,EAAE,CAACmyB,IAAH,GAAUnyB,EAAE,CAACqyB,IAAd,IAAsB,CAAnC;EACA,QAAIM,IAAI,GAAGC,IAAX,EAAiB,OAAO,CAAC,CAAR;EACjB,QAAID,IAAI,GAAGC,IAAX,EAAiB,OAAO,CAAP;EACjB,WAAO,CAAP;EACD;;EACD,MAAIl3C,WAAJ,GAAkB;EAChB,WAAO,CAAC3D,UAAD,CAAP;EACD;;EAZkB;;EAcrBm6C,iBAAiB,CAACQ,cAAlB,GAAmCA,cAAnC;;ECvCe,MAAMG,qBAAN,SAAoCX,iBAApC,CAAsD;EACnEp9C,EAAAA,WAAW,GAAG;EACZ;EACA+9C,IAAAA,qBAAqB,CAAC16C,YAAtB,CAAmCC,KAAnC,CAAyC,IAAzC,EAA+CC,SAA/C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK26C,KAAL,GAAa,IAAb;EACA,UAAMrxC,GAAG,GAAGpJ,SAAS,CAAC,CAAD,CAArB;EAAA,UAA0BsJ,GAAG,GAAGtJ,SAAS,CAAC,CAAD,CAAzC;EAAA,UAA8C05C,IAAI,GAAG15C,SAAS,CAAC,CAAD,CAA9D;EACA,SAAK85C,IAAL,GAAY1wC,GAAZ;EACA,SAAK4wC,IAAL,GAAY1wC,GAAZ;EACA,SAAKmxC,KAAL,GAAaf,IAAb;EACD;;EACDgB,EAAAA,KAAK,CAACR,QAAD,EAAWC,QAAX,EAAqBQ,OAArB,EAA8B;EACjC,QAAI,CAAC,KAAK5xC,UAAL,CAAgBmxC,QAAhB,EAA0BC,QAA1B,CAAL,EAA0C,OAAO,IAAP;EAC1CQ,IAAAA,OAAO,CAAClB,SAAR,CAAkB,KAAKgB,KAAvB;EACD;;EAfkE;;ECAtD,MAAMG,uBAAN,SAAsCf,iBAAtC,CAAwD;EACrEp9C,EAAAA,WAAW,GAAG;EACZ;EACAm+C,IAAAA,uBAAuB,CAAC96C,YAAxB,CAAqCC,KAArC,CAA2C,IAA3C,EAAiDC,SAAjD;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK+6C,MAAL,GAAc,IAAd;EACA,SAAKC,MAAL,GAAc,IAAd;EACA,UAAMpzB,EAAE,GAAG1nB,SAAS,CAAC,CAAD,CAApB;EAAA,UAAyB2nB,EAAE,GAAG3nB,SAAS,CAAC,CAAD,CAAvC;EACA,SAAK66C,MAAL,GAAcnzB,EAAd;EACA,SAAKozB,MAAL,GAAcnzB,EAAd;EACA,SAAKozB,WAAL,CAAiB,KAAKF,MAAtB,EAA8B,KAAKC,MAAnC;EACD;;EACDC,EAAAA,WAAW,CAACrzB,EAAD,EAAKC,EAAL,EAAS;EAClB,SAAKmyB,IAAL,GAAYz9C,IAAI,CAAC+M,GAAL,CAASse,EAAE,CAACoyB,IAAZ,EAAkBnyB,EAAE,CAACmyB,IAArB,CAAZ;EACA,SAAKE,IAAL,GAAY39C,IAAI,CAACiN,GAAL,CAASoe,EAAE,CAACsyB,IAAZ,EAAkBryB,EAAE,CAACqyB,IAArB,CAAZ;EACD;;EACDU,EAAAA,KAAK,CAACR,QAAD,EAAWC,QAAX,EAAqBQ,OAArB,EAA8B;EACjC,QAAI,CAAC,KAAK5xC,UAAL,CAAgBmxC,QAAhB,EAA0BC,QAA1B,CAAL,EACE,OAAO,IAAP;EAEF,QAAI,KAAKU,MAAL,KAAgB,IAApB,EAA0B,KAAKA,MAAL,CAAYH,KAAZ,CAAkBR,QAAlB,EAA4BC,QAA5B,EAAsCQ,OAAtC;EAC1B,QAAI,KAAKG,MAAL,KAAgB,IAApB,EAA0B,KAAKA,MAAL,CAAYJ,KAAZ,CAAkBR,QAAlB,EAA4BC,QAA5B,EAAsCQ,OAAtC;EAC3B;;EAvBoE;;ECOxD,MAAMK,yBAAN,CAAgC;EAC7Cv+C,EAAAA,WAAW,GAAG;EACZu+C,IAAAA,yBAAyB,CAACl7C,YAA1B,CAAuCC,KAAvC,CAA6C,IAA7C,EAAmDC,SAAnD;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKm7C,OAAL,GAAe,IAAI71C,SAAJ,EAAf;EACA,SAAK81C,KAAL,GAAa,IAAb;EACA,SAAKC,MAAL,GAAc,CAAd;EACD;;EACDC,EAAAA,SAAS,GAAG;EACVtJ,IAAAA,WAAW,CAAChsC,IAAZ,CAAiB,KAAKm1C,OAAtB,EAA+B,IAAIpB,iBAAiB,CAACQ,cAAtB,EAA/B;EACA,QAAIjiC,GAAG,GAAG,KAAK6iC,OAAf;EACA,QAAI9d,IAAI,GAAG,IAAX;EACA,QAAI7kB,IAAI,GAAG,IAAIlT,SAAJ,EAAX;;EACA,WAAO,IAAP,EAAa;EACX,WAAKi2C,UAAL,CAAgBjjC,GAAhB,EAAqBE,IAArB;EACA,UAAIA,IAAI,CAAC1T,IAAL,OAAgB,CAApB,EAAuB,OAAO0T,IAAI,CAACrT,GAAL,CAAS,CAAT,CAAP;EACvBk4B,MAAAA,IAAI,GAAG/kB,GAAP;EACAA,MAAAA,GAAG,GAAGE,IAAN;EACAA,MAAAA,IAAI,GAAG6kB,IAAP;EACD;EACF;;EACDme,EAAAA,MAAM,CAAClyC,GAAD,EAAME,GAAN,EAAWowC,IAAX,EAAiB;EACrB,QAAI,KAAKwB,KAAL,KAAe,IAAnB,EAAyB,MAAM,IAAI7nC,qBAAJ,CAA0B,mDAA1B,CAAN;;EACzB,SAAK4nC,OAAL,CAAaz2C,GAAb,CAAiB,IAAIg2C,qBAAJ,CAA0BpxC,GAA1B,EAA+BE,GAA/B,EAAoCowC,IAApC,CAAjB;EACD;;EACDgB,EAAAA,KAAK,CAACtxC,GAAD,EAAME,GAAN,EAAWqxC,OAAX,EAAoB;EACvB,SAAKnyC,IAAL;EACA,QAAI,KAAK0yC,KAAL,KAAe,IAAnB,EAAyB,OAAO,IAAP;;EACzB,SAAKA,KAAL,CAAWR,KAAX,CAAiBtxC,GAAjB,EAAsBE,GAAtB,EAA2BqxC,OAA3B;EACD;;EACDY,EAAAA,SAAS,GAAG;EACV,QAAI,KAAKL,KAAL,KAAe,IAAnB,EAAyB,OAAO,IAAP;EACzB,SAAKA,KAAL,GAAa,KAAKE,SAAL,EAAb;EACD;;EACDI,EAAAA,SAAS,CAACC,IAAD,EAAO;EACdvjC,IAAAA,MAAM,CAACuiB,GAAP,CAAWC,OAAX,CAAmB1D,SAAS,CAACC,YAAV,CAAuB,IAAIn2B,UAAJ,CAAe26C,IAAI,CAAC3B,IAApB,EAA0B,KAAKqB,MAA/B,CAAvB,EAA+D,IAAIr6C,UAAJ,CAAe26C,IAAI,CAACzB,IAApB,EAA0B,KAAKmB,MAA/B,CAA/D,CAAnB;EACD;;EACD3yC,EAAAA,IAAI,GAAG;EACL,QAAI,KAAK0yC,KAAL,KAAe,IAAnB,EAAyB,OAAO,IAAP;EACzB,QAAI,KAAKD,OAAL,CAAar2C,IAAb,OAAwB,CAA5B,EAA+B,OAAO,IAAP;EAC/B,SAAK22C,SAAL;EACD;;EACDF,EAAAA,UAAU,CAACjjC,GAAD,EAAME,IAAN,EAAY;EACpB,SAAK6iC,MAAL;EACA7iC,IAAAA,IAAI,CAAC7S,KAAL;;EACA,SAAK,IAAIrI,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGgb,GAAG,CAACxT,IAAJ,EAApB,EAAgCxH,CAAC,IAAI,CAArC,EAAwC;EACtC,YAAMsqB,EAAE,GAAGtP,GAAG,CAACnT,GAAJ,CAAQ7H,CAAR,CAAX;EACA,YAAMuqB,EAAE,GAAGvqB,CAAC,GAAG,CAAJ,GAAQgb,GAAG,CAACxT,IAAJ,EAAR,GAAqBwT,GAAG,CAACnT,GAAJ,CAAQ7H,CAAR,CAArB,GAAkC,IAA7C;;EACA,UAAIuqB,EAAE,KAAK,IAAX,EAAiB;EACfrP,QAAAA,IAAI,CAAC9T,GAAL,CAASkjB,EAAT;EACD,OAFD,MAEO;EACL,cAAM+zB,IAAI,GAAG,IAAIb,uBAAJ,CAA4BxiC,GAAG,CAACnT,GAAJ,CAAQ7H,CAAR,CAA5B,EAAwCgb,GAAG,CAACnT,GAAJ,CAAQ7H,CAAC,GAAG,CAAZ,CAAxC,CAAb;EACAkb,QAAAA,IAAI,CAAC9T,GAAL,CAASi3C,IAAT;EACD;EACF;EACF;;EAxD4C;;ECNhC,MAAMC,gBAAN,CAAuB;EACpCj/C,EAAAA,WAAW,GAAG;EACZi/C,IAAAA,gBAAgB,CAAC57C,YAAjB,CAA8BC,KAA9B,CAAoC,IAApC,EAA0CC,SAA1C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK67C,MAAL,GAAc,IAAIv2C,SAAJ,EAAd;EACD;;EACDq0C,EAAAA,SAAS,CAACC,IAAD,EAAO;EACd,SAAKiC,MAAL,CAAYn3C,GAAZ,CAAgBk1C,IAAhB;EACD;;EACDkC,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAKD,MAAZ;EACD;;EACD,MAAIt4C,WAAJ,GAAkB;EAChB,WAAO,CAACm2C,WAAD,CAAP;EACD;;EAfmC;;ECGvB,MAAMqC,kBAAN,CAAyB;EACtCp/C,EAAAA,WAAW,GAAG;EACZo/C,IAAAA,kBAAkB,CAAC/7C,YAAnB,CAAgCC,KAAhC,CAAsC,IAAtC,EAA4CC,SAA5C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKg8C,EAAL,GAAU,IAAV;EACA,SAAKC,cAAL,GAAsB,CAAtB;EACA,SAAKC,iBAAL,GAAyB,KAAzB;EACA,UAAMvzC,CAAC,GAAGzI,SAAS,CAAC,CAAD,CAAnB;EACA,SAAK87C,EAAL,GAAUrzC,CAAV;EACD;;EACD,SAAOwzC,iBAAP,GAA2B;EACzB,QAAIj8C,SAAS,CAAC,CAAD,CAAT,YAAwBc,UAAxB,IAAsC6F,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAeuV,kBAAf,CAAtD,EAA0F;EACxF,YAAM9M,CAAC,GAAGzI,SAAS,CAAC,CAAD,CAAnB;EAAA,YAAwBkW,IAAI,GAAGlW,SAAS,CAAC,CAAD,CAAxC;EACA,YAAMk8C,OAAO,GAAG,IAAIL,kBAAJ,CAAuBpzC,CAAvB,CAAhB;EACA,YAAME,EAAE,GAAG,IAAI7H,UAAJ,EAAX;EACA,YAAM8H,EAAE,GAAG,IAAI9H,UAAJ,EAAX;;EACA,WAAK,IAAI1D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG8Y,IAAI,CAACtR,IAAL,EAApB,EAAiCxH,CAAC,EAAlC,EAAsC;EACpC8Y,QAAAA,IAAI,CAACxP,aAAL,CAAmBtJ,CAAnB,EAAsBuL,EAAtB;EACAuN,QAAAA,IAAI,CAACxP,aAAL,CAAmBtJ,CAAC,GAAG,CAAvB,EAA0BwL,EAA1B;EACAszC,QAAAA,OAAO,CAACC,YAAR,CAAqBxzC,EAArB,EAAyBC,EAAzB;EACA,YAAIszC,OAAO,CAACE,WAAR,EAAJ,EAA2B,OAAOF,OAAO,CAACG,WAAR,EAAP;EAC5B;;EACD,aAAOH,OAAO,CAACG,WAAR,EAAP;EACD,KAZD,MAYO,IAAIr8C,SAAS,CAAC,CAAD,CAAT,YAAwBc,UAAxB,IAAsCd,SAAS,CAAC,CAAD,CAAT,YAAwBkH,KAAlE,EAAyE;EAC9E,YAAMuB,CAAC,GAAGzI,SAAS,CAAC,CAAD,CAAnB;EAAA,YAAwBkW,IAAI,GAAGlW,SAAS,CAAC,CAAD,CAAxC;EACA,YAAMk8C,OAAO,GAAG,IAAIL,kBAAJ,CAAuBpzC,CAAvB,CAAhB;;EACA,WAAK,IAAIrL,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG8Y,IAAI,CAACjW,MAAzB,EAAiC7C,CAAC,EAAlC,EAAsC;EACpC,cAAMuL,EAAE,GAAGuN,IAAI,CAAC9Y,CAAD,CAAf;EACA,cAAMwL,EAAE,GAAGsN,IAAI,CAAC9Y,CAAC,GAAG,CAAL,CAAf;EACA8+C,QAAAA,OAAO,CAACC,YAAR,CAAqBxzC,EAArB,EAAyBC,EAAzB;EACA,YAAIszC,OAAO,CAACE,WAAR,EAAJ,EAA2B,OAAOF,OAAO,CAACG,WAAR,EAAP;EAC5B;;EACD,aAAOH,OAAO,CAACG,WAAR,EAAP;EACD;EACF;;EACDF,EAAAA,YAAY,CAACxzC,EAAD,EAAKC,EAAL,EAAS;EACnB,QAAID,EAAE,CAAC5J,CAAH,GAAO,KAAK+8C,EAAL,CAAQ/8C,CAAf,IAAoB6J,EAAE,CAAC7J,CAAH,GAAO,KAAK+8C,EAAL,CAAQ/8C,CAAvC,EAA0C,OAAO,IAAP;;EAC1C,QAAI,KAAK+8C,EAAL,CAAQ/8C,CAAR,KAAc6J,EAAE,CAAC7J,CAAjB,IAAsB,KAAK+8C,EAAL,CAAQ98C,CAAR,KAAc4J,EAAE,CAAC5J,CAA3C,EAA8C;EAC5C,WAAKg9C,iBAAL,GAAyB,IAAzB;EACA,aAAO,IAAP;EACD;;EACD,QAAIrzC,EAAE,CAAC3J,CAAH,KAAS,KAAK88C,EAAL,CAAQ98C,CAAjB,IAAsB4J,EAAE,CAAC5J,CAAH,KAAS,KAAK88C,EAAL,CAAQ98C,CAA3C,EAA8C;EAC5C,UAAIs9C,IAAI,GAAG3zC,EAAE,CAAC5J,CAAd;EACA,UAAIw9C,IAAI,GAAG3zC,EAAE,CAAC7J,CAAd;;EACA,UAAIu9C,IAAI,GAAGC,IAAX,EAAiB;EACfD,QAAAA,IAAI,GAAG1zC,EAAE,CAAC7J,CAAV;EACAw9C,QAAAA,IAAI,GAAG5zC,EAAE,CAAC5J,CAAV;EACD;;EACD,UAAI,KAAK+8C,EAAL,CAAQ/8C,CAAR,IAAau9C,IAAb,IAAqB,KAAKR,EAAL,CAAQ/8C,CAAR,IAAaw9C,IAAtC,EACE,KAAKP,iBAAL,GAAyB,IAAzB;EAEF,aAAO,IAAP;EACD;;EACD,QAAIrzC,EAAE,CAAC3J,CAAH,GAAO,KAAK88C,EAAL,CAAQ98C,CAAf,IAAoB4J,EAAE,CAAC5J,CAAH,IAAQ,KAAK88C,EAAL,CAAQ98C,CAApC,IAAyC4J,EAAE,CAAC5J,CAAH,GAAO,KAAK88C,EAAL,CAAQ98C,CAAf,IAAoB2J,EAAE,CAAC3J,CAAH,IAAQ,KAAK88C,EAAL,CAAQ98C,CAAjF,EAAoF;EAClF,UAAIw9C,MAAM,GAAGxmC,WAAW,CAACtQ,KAAZ,CAAkBiD,EAAlB,EAAsBC,EAAtB,EAA0B,KAAKkzC,EAA/B,CAAb;;EACA,UAAIU,MAAM,KAAKxmC,WAAW,CAACa,SAA3B,EAAsC;EACpC,aAAKmlC,iBAAL,GAAyB,IAAzB;EACA,eAAO,IAAP;EACD;;EACD,UAAIpzC,EAAE,CAAC5J,CAAH,GAAO2J,EAAE,CAAC3J,CAAd,EACEw9C,MAAM,GAAG,CAACA,MAAV;EAEF,UAAIA,MAAM,KAAKxmC,WAAW,CAACY,IAA3B,EACE,KAAKmlC,cAAL;EAEH;EACF;;EACDU,EAAAA,gBAAgB,GAAG;EACjB,WAAO,KAAKJ,WAAL,OAAuBtd,QAAQ,CAACG,QAAvC;EACD;;EACDmd,EAAAA,WAAW,GAAG;EACZ,QAAI,KAAKL,iBAAT,EAA4B,OAAOjd,QAAQ,CAACI,QAAhB;EAC5B,QAAI,KAAK4c,cAAL,GAAsB,CAAtB,KAA4B,CAAhC,EACE,OAAOhd,QAAQ,CAACK,QAAhB;EAEF,WAAOL,QAAQ,CAACG,QAAhB;EACD;;EACDkd,EAAAA,WAAW,GAAG;EACZ,WAAO,KAAKJ,iBAAZ;EACD;;EAhFqC;;ECOzB,MAAMU,yBAAN,CAAgC;EAC7CjgD,EAAAA,WAAW,GAAG;EACZigD,IAAAA,yBAAyB,CAAC58C,YAA1B,CAAuCC,KAAvC,CAA6C,IAA7C,EAAmDC,SAAnD;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKq5C,KAAL,GAAa,IAAb;EACA,SAAKwD,MAAL,GAAc,IAAd;EACA,UAAMphC,CAAC,GAAGvb,SAAS,CAAC,CAAD,CAAnB;EACA,QAAI,EAAE2G,YAAY,CAAC4U,CAAD,EAAIkJ,SAAJ,CAAZ,IAA8BlJ,CAAC,YAAYyM,UAA7C,CAAJ,EAA8D,MAAM,IAAIjrB,wBAAJ,CAA6B,0CAA7B,CAAN;EAC9D,SAAKo8C,KAAL,GAAa59B,CAAb;EACD;;EACDq+B,EAAAA,MAAM,CAACnxC,CAAD,EAAI;EACR,QAAI,KAAKk0C,MAAL,KAAgB,IAApB,EAA0B;EACxB,WAAKA,MAAL,GAAc,IAAIC,uBAAJ,CAA4B,KAAKzD,KAAjC,CAAd;EACA,WAAKA,KAAL,GAAa,IAAb;EACD;;EACD,UAAM0D,GAAG,GAAG,IAAIhB,kBAAJ,CAAuBpzC,CAAvB,CAAZ;EACA,UAAMkyC,OAAO,GAAG,IAAImC,cAAJ,CAAmBD,GAAnB,CAAhB;;EACA,SAAKF,MAAL,CAAYjC,KAAZ,CAAkBjyC,CAAC,CAACzJ,CAApB,EAAuByJ,CAAC,CAACzJ,CAAzB,EAA4B27C,OAA5B;;EACA,WAAOkC,GAAG,CAACR,WAAJ,EAAP;EACD;;EACD,MAAIh5C,WAAJ,GAAkB;EAChB,WAAO,CAACs2C,sBAAD,CAAP;EACD;;EAvB4C;;EAyB/C,MAAMmD,cAAN,CAAqB;EACnBrgD,EAAAA,WAAW,GAAG;EACZqgD,IAAAA,cAAc,CAACh9C,YAAf,CAA4BC,KAA5B,CAAkC,IAAlC,EAAwCC,SAAxC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKi9C,QAAL,GAAgB,IAAhB;EACA,UAAMb,OAAO,GAAGl8C,SAAS,CAAC,CAAD,CAAzB;EACA,SAAK+8C,QAAL,GAAgBb,OAAhB;EACD;;EACDzC,EAAAA,SAAS,CAACC,IAAD,EAAO;EACd,UAAMje,GAAG,GAAGie,IAAZ;;EACA,SAAKqD,QAAL,CAAcZ,YAAd,CAA2B1gB,GAAG,CAAC/0B,aAAJ,CAAkB,CAAlB,CAA3B,EAAiD+0B,GAAG,CAAC/0B,aAAJ,CAAkB,CAAlB,CAAjD;EACD;;EACD,MAAIrD,WAAJ,GAAkB;EAChB,WAAO,CAACm2C,WAAD,CAAP;EACD;;EAfkB;;EAiBrB,MAAMoD,uBAAN,CAA8B;EAC5BngD,EAAAA,WAAW,GAAG;EACZmgD,IAAAA,uBAAuB,CAAC98C,YAAxB,CAAqCC,KAArC,CAA2C,IAA3C,EAAiDC,SAAjD;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKk9C,QAAL,GAAgB,KAAhB;EACA,SAAKL,MAAL,GAAc,IAAI3B,yBAAJ,EAAd;EACA,UAAMxgC,IAAI,GAAGxa,SAAS,CAAC,CAAD,CAAtB;EACA,QAAIwa,IAAI,CAAC9V,OAAL,EAAJ,EAAoB,KAAKs4C,QAAL,GAAgB,IAAhB,CAApB,KAA+C,KAAKx0C,IAAL,CAAUgS,IAAV;EAChD;;EACDhS,EAAAA,IAAI,CAACgS,IAAD,EAAO;EACT,UAAM+2B,KAAK,GAAGC,wBAAwB,CAACF,QAAzB,CAAkC92B,IAAlC,CAAd;;EACA,SAAK,IAAIpd,CAAC,GAAGm0C,KAAK,CAAC5sC,QAAN,EAAb,EAA+BvH,CAAC,CAACmJ,OAAF,EAA/B,GAA8C;EAC5C,YAAM0T,IAAI,GAAG7c,CAAC,CAACkJ,IAAF,EAAb;EACA,YAAMW,GAAG,GAAGgT,IAAI,CAACuI,cAAL,EAAZ;EACA,WAAKy6B,OAAL,CAAah2C,GAAb;EACD;EACF;;EACDg2C,EAAAA,OAAO,CAACh2C,GAAD,EAAM;EACX,SAAK,IAAI7J,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6J,GAAG,CAAChH,MAAxB,EAAgC7C,CAAC,EAAjC,EAAqC;EACnC,YAAMq+B,GAAG,GAAG,IAAIJ,WAAJ,CAAgBp0B,GAAG,CAAC7J,CAAC,GAAG,CAAL,CAAnB,EAA4B6J,GAAG,CAAC7J,CAAD,CAA/B,CAAZ;EACA,YAAMgM,GAAG,GAAG/M,IAAI,CAAC+M,GAAL,CAASqyB,GAAG,CAACvX,EAAJ,CAAOllB,CAAhB,EAAmBy8B,GAAG,CAAC9yB,EAAJ,CAAO3J,CAA1B,CAAZ;EACA,YAAMsK,GAAG,GAAGjN,IAAI,CAACiN,GAAL,CAASmyB,GAAG,CAACvX,EAAJ,CAAOllB,CAAhB,EAAmBy8B,GAAG,CAAC9yB,EAAJ,CAAO3J,CAA1B,CAAZ;;EACA,WAAK29C,MAAL,CAAYrB,MAAZ,CAAmBlyC,GAAnB,EAAwBE,GAAxB,EAA6BmyB,GAA7B;EACD;EACF;;EACDif,EAAAA,KAAK,GAAG;EACN,QAAI16C,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMmJ,GAAG,GAAGpJ,SAAS,CAAC,CAAD,CAArB;EAAA,YAA0BsJ,GAAG,GAAGtJ,SAAS,CAAC,CAAD,CAAzC;EACA,UAAI,KAAKg9C,QAAT,EAAmB,OAAO,IAAI53C,SAAJ,EAAP;EACnB,YAAMu1C,OAAO,GAAG,IAAIe,gBAAJ,EAAhB;;EACA,WAAKiB,MAAL,CAAYjC,KAAZ,CAAkBtxC,GAAlB,EAAuBE,GAAvB,EAA4BqxC,OAA5B;;EACA,aAAOA,OAAO,CAACiB,QAAR,EAAP;EACD,KAND,MAMO,IAAI57C,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMmJ,GAAG,GAAGpJ,SAAS,CAAC,CAAD,CAArB;EAAA,YAA0BsJ,GAAG,GAAGtJ,SAAS,CAAC,CAAD,CAAzC;EAAA,YAA8C26C,OAAO,GAAG36C,SAAS,CAAC,CAAD,CAAjE;EACA,UAAI,KAAKg9C,QAAT,EAAmB,OAAO,IAAP;;EACnB,WAAKL,MAAL,CAAYjC,KAAZ,CAAkBtxC,GAAlB,EAAuBE,GAAvB,EAA4BqxC,OAA5B;EACD;EACF;;EAtC2B;;EAwC9B+B,yBAAyB,CAACI,cAA1B,GAA2CA,cAA3C;EACAJ,yBAAyB,CAACE,uBAA1B,GAAoDA,uBAApD;;ECzFe,MAAMM,aAAN,CAAoB;EACjC,SAAOC,QAAP,GAAkB;EAChB,QAAIn9C,SAAS,CAAC,CAAD,CAAT,YAAwBc,UAAxB,IAAsC6F,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAeuV,kBAAf,CAAtD,EAA0F;EACxF,YAAM9M,CAAC,GAAGzI,SAAS,CAAC,CAAD,CAAnB;EAAA,YAAwBia,IAAI,GAAGja,SAAS,CAAC,CAAD,CAAxC;EACA,YAAMo9C,eAAe,GAAG,IAAIvjB,qBAAJ,EAAxB;EACA,YAAM3V,EAAE,GAAG,IAAIpjB,UAAJ,EAAX;EACA,YAAM6H,EAAE,GAAG,IAAI7H,UAAJ,EAAX;EACA,YAAMpD,CAAC,GAAGuc,IAAI,CAACrV,IAAL,EAAV;;EACA,WAAK,IAAIxH,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGM,CAApB,EAAuBN,CAAC,EAAxB,EAA4B;EAC1B6c,QAAAA,IAAI,CAACvT,aAAL,CAAmBtJ,CAAC,GAAG,CAAvB,EAA0B8mB,EAA1B;EACAjK,QAAAA,IAAI,CAACvT,aAAL,CAAmBtJ,CAAnB,EAAsBuL,EAAtB;EACAy0C,QAAAA,eAAe,CAAC9kB,mBAAhB,CAAoC7vB,CAApC,EAAuCyb,EAAvC,EAA2Cvb,EAA3C;EACA,YAAIy0C,eAAe,CAACrkB,eAAhB,EAAJ,EACE,OAAO,IAAP;EAEH;;EACD,aAAO,KAAP;EACD,KAfD,MAeO,IAAI/4B,SAAS,CAAC,CAAD,CAAT,YAAwBc,UAAxB,IAAsCd,SAAS,CAAC,CAAD,CAAT,YAAwBkH,KAAlE,EAAyE;EAC9E,YAAMuB,CAAC,GAAGzI,SAAS,CAAC,CAAD,CAAnB;EAAA,YAAwBia,IAAI,GAAGja,SAAS,CAAC,CAAD,CAAxC;EACA,YAAMo9C,eAAe,GAAG,IAAIvjB,qBAAJ,EAAxB;;EACA,WAAK,IAAIz8B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6c,IAAI,CAACha,MAAzB,EAAiC7C,CAAC,EAAlC,EAAsC;EACpC,cAAM8mB,EAAE,GAAGjK,IAAI,CAAC7c,CAAC,GAAG,CAAL,CAAf;EACA,cAAMuL,EAAE,GAAGsR,IAAI,CAAC7c,CAAD,CAAf;EACAggD,QAAAA,eAAe,CAAC9kB,mBAAhB,CAAoC7vB,CAApC,EAAuCyb,EAAvC,EAA2Cvb,EAA3C;EACA,YAAIy0C,eAAe,CAACrkB,eAAhB,EAAJ,EACE,OAAO,IAAP;EAEH;;EACD,aAAO,KAAP;EACD;EACF;;EACD,SAAOskB,YAAP,CAAoB50C,CAApB,EAAuByN,IAAvB,EAA6B;EAC3B,WAAO2lC,kBAAkB,CAACI,iBAAnB,CAAqCxzC,CAArC,EAAwCyN,IAAxC,CAAP;EACD;;EACD,SAAOonC,QAAP,CAAgB70C,CAAhB,EAAmByN,IAAnB,EAAyB;EACvB,WAAOgnC,aAAa,CAACG,YAAd,CAA2B50C,CAA3B,EAA8ByN,IAA9B,MAAwC6oB,QAAQ,CAACG,QAAxD;EACD;;EApCgC;;ECNnC;EACA;EACA;EACA;EACA;EACe,MAAMr5B,UAAN,CAAe;EAC5B;EACF;EACA;EACA;EACEU,EAAAA,OAAO,GAAG;EAEV;EACF;EACA;EACA;;;EACED,EAAAA,IAAI,GAAG;EAEP;EACF;EACA;EACA;;;EACExB,EAAAA,MAAM,GAAG;;EAjBmB;;ECDf,MAAMy4C,0BAAN,CAAiC;EAC9C9gD,EAAAA,WAAW,GAAG;EACZ8gD,IAAAA,0BAA0B,CAACz9C,YAA3B,CAAwCC,KAAxC,CAA8C,IAA9C,EAAoDC,SAApD;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK09C,OAAL,GAAe,IAAf;EACA,SAAKC,QAAL,GAAgB,IAAhB;EACA,SAAKzD,IAAL,GAAY,IAAZ;EACA,SAAK2C,MAAL,GAAc,IAAd;EACA,SAAKe,sBAAL,GAA8B,IAA9B;EACA,UAAMtN,MAAM,GAAGpwC,SAAS,CAAC,CAAD,CAAxB;EACA,SAAKw9C,OAAL,GAAepN,MAAf;EACA,SAAKqN,QAAL,GAAgB,IAAhB;EACA,SAAKd,MAAL,GAAc,CAAd;EACA,SAAK3C,IAAL,GAAY5J,MAAM,CAAC10B,gBAAP,EAAZ;EACD;;EACD,SAAOiiC,QAAP,CAAgBnjC,IAAhB,EAAsB;EACpB,WAAO,EAAEA,IAAI,YAAYyM,kBAAlB,CAAP;EACD;;EACD3gB,EAAAA,IAAI,GAAG;EACL,QAAI,KAAKm3C,QAAT,EAAmB;EACjB,WAAKA,QAAL,GAAgB,KAAhB;EACA,UAAIF,0BAA0B,CAACI,QAA3B,CAAoC,KAAKH,OAAzC,CAAJ,EAAuD,KAAKb,MAAL;EACvD,aAAO,KAAKa,OAAZ;EACD;;EACD,QAAI,KAAKE,sBAAL,KAAgC,IAApC,EACE,IAAI,KAAKA,sBAAL,CAA4Bn3C,OAA5B,EAAJ,EACE,OAAO,KAAKm3C,sBAAL,CAA4Bp3C,IAA5B,EAAP,CADF,KAGE,KAAKo3C,sBAAL,GAA8B,IAA9B;EAGJ,QAAI,KAAKf,MAAL,IAAe,KAAK3C,IAAxB,EACE,MAAM,IAAI70C,sBAAJ,EAAN;;EAEF,UAAMkC,GAAG,GAAG,KAAKm2C,OAAL,CAAaziC,YAAb,CAA0B,KAAK4hC,MAAL,EAA1B,CAAZ;;EACA,QAAIt1C,GAAG,YAAY4f,kBAAnB,EAAuC;EACrC,WAAKy2B,sBAAL,GAA8B,IAAIH,0BAAJ,CAA+Bl2C,GAA/B,CAA9B;EACA,aAAO,KAAKq2C,sBAAL,CAA4Bp3C,IAA5B,EAAP;EACD;;EACD,WAAOe,GAAP;EACD;;EACDvC,EAAAA,MAAM,GAAG;EACP,UAAM,IAAIoc,6BAAJ,CAAkC,KAAK3D,QAAL,GAAgBqgC,OAAhB,EAAlC,CAAN;EACD;;EACDr3C,EAAAA,OAAO,GAAG;EACR,QAAI,KAAKk3C,QAAT,EACE,OAAO,IAAP;;EAEF,QAAI,KAAKC,sBAAL,KAAgC,IAApC,EAA0C;EACxC,UAAI,KAAKA,sBAAL,CAA4Bn3C,OAA5B,EAAJ,EACE,OAAO,IAAP;EAEF,WAAKm3C,sBAAL,GAA8B,IAA9B;EACD;;EACD,QAAI,KAAKf,MAAL,IAAe,KAAK3C,IAAxB,EACE,OAAO,KAAP;EAEF,WAAO,IAAP;EACD;;EACD,MAAI32C,WAAJ,GAAkB;EAChB,WAAO,CAACwC,UAAD,CAAP;EACD;;EA9D6C;;ECEjC,MAAMg4C,wBAAN,CAA+B;EAC5CphD,EAAAA,WAAW,GAAG;EACZohD,IAAAA,wBAAwB,CAAC/9C,YAAzB,CAAsCC,KAAtC,CAA4C,IAA5C,EAAkDC,SAAlD;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKq5C,KAAL,GAAa,IAAb;EACA,UAAM3+B,IAAI,GAAGxa,SAAS,CAAC,CAAD,CAAtB;EACA,SAAKm5C,KAAL,GAAa3+B,IAAb;EACD;;EACD,SAAOsjC,oBAAP,CAA4Br1C,CAA5B,EAA+B4d,IAA/B,EAAqC;EACnC,QAAIA,IAAI,CAAC3hB,OAAL,EAAJ,EAAoB,OAAOq6B,QAAQ,CAACG,QAAhB;EACpB,UAAMra,KAAK,GAAGwB,IAAI,CAACN,eAAL,EAAd;EACA,UAAMg4B,QAAQ,GAAGF,wBAAwB,CAAC5B,iBAAzB,CAA2CxzC,CAA3C,EAA8Coc,KAA9C,CAAjB;EACA,QAAIk5B,QAAQ,KAAKhf,QAAQ,CAACK,QAA1B,EAAoC,OAAO2e,QAAP;;EACpC,SAAK,IAAI3gD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGipB,IAAI,CAAChB,kBAAL,EAApB,EAA+CjoB,CAAC,EAAhD,EAAoD;EAClD,YAAM2xC,IAAI,GAAG1oB,IAAI,CAACL,gBAAL,CAAsB5oB,CAAtB,CAAb;EACA,YAAM4gD,OAAO,GAAGH,wBAAwB,CAAC5B,iBAAzB,CAA2CxzC,CAA3C,EAA8CsmC,IAA9C,CAAhB;EACA,UAAIiP,OAAO,KAAKjf,QAAQ,CAACI,QAAzB,EAAmC,OAAOJ,QAAQ,CAACI,QAAhB;EACnC,UAAI6e,OAAO,KAAKjf,QAAQ,CAACK,QAAzB,EAAmC,OAAOL,QAAQ,CAACG,QAAhB;EACpC;;EACD,WAAOH,QAAQ,CAACK,QAAhB;EACD;;EACD,SAAO6c,iBAAP,CAAyBxzC,CAAzB,EAA4ByN,IAA5B,EAAkC;EAChC,QAAI,CAACA,IAAI,CAACiG,mBAAL,GAA2BpT,UAA3B,CAAsCN,CAAtC,CAAL,EAA+C,OAAOs2B,QAAQ,CAACG,QAAhB;EAC/C,WAAOge,aAAa,CAACG,YAAd,CAA2B50C,CAA3B,EAA8ByN,IAAI,CAACsM,cAAL,EAA9B,CAAP;EACD;;EACD,SAAOy7B,sBAAP,CAA8Bx1C,CAA9B,EAAiC4d,IAAjC,EAAuC;EACrC,WAAO0Y,QAAQ,CAACG,QAAT,KAAsB2e,wBAAwB,CAACC,oBAAzB,CAA8Cr1C,CAA9C,EAAiD4d,IAAjD,CAA7B;EACD;;EACD,SAAO63B,gBAAP,CAAwBz1C,CAAxB,EAA2B+R,IAA3B,EAAiC;EAC/B,QAAIA,IAAI,YAAYkK,OAApB,EACE,OAAOm5B,wBAAwB,CAACC,oBAAzB,CAA8Cr1C,CAA9C,EAAiD+R,IAAjD,CAAP;;EAEF,QAAIA,IAAI,YAAYyM,kBAApB,EAAwC;EACtC,YAAMk3B,KAAK,GAAG,IAAIZ,0BAAJ,CAA+B/iC,IAA/B,CAAd;;EACA,aAAO2jC,KAAK,CAAC53C,OAAN,EAAP,EAAwB;EACtB,cAAM+jC,EAAE,GAAG6T,KAAK,CAAC73C,IAAN,EAAX;;EACA,YAAIgkC,EAAE,KAAK9vB,IAAX,EAAiB;EACf,gBAAM4jC,GAAG,GAAGP,wBAAwB,CAACK,gBAAzB,CAA0Cz1C,CAA1C,EAA6C6hC,EAA7C,CAAZ;EACA,cAAI8T,GAAG,KAAKrf,QAAQ,CAACG,QAArB,EAA+B,OAAOkf,GAAP;EAChC;EACF;EACF;;EACD,WAAOrf,QAAQ,CAACG,QAAhB;EACD;;EACD,SAAOmf,WAAP,CAAmB51C,CAAnB,EAAsB+R,IAAtB,EAA4B;EAC1B,WAAOukB,QAAQ,CAACG,QAAT,KAAsB2e,wBAAwB,CAACjE,MAAzB,CAAgCnxC,CAAhC,EAAmC+R,IAAnC,CAA7B;EACD;;EACD,SAAOo/B,MAAP,CAAcnxC,CAAd,EAAiB+R,IAAjB,EAAuB;EACrB,QAAIA,IAAI,CAAC9V,OAAL,EAAJ,EAAoB,OAAOq6B,QAAQ,CAACG,QAAhB;EACpB,QAAI,CAAC1kB,IAAI,CAAC2B,mBAAL,GAA2BpT,UAA3B,CAAsCN,CAAtC,CAAL,EAA+C,OAAOs2B,QAAQ,CAACG,QAAhB;EAC/C,WAAO2e,wBAAwB,CAACK,gBAAzB,CAA0Cz1C,CAA1C,EAA6C+R,IAA7C,CAAP;EACD;;EACDo/B,EAAAA,MAAM,CAACnxC,CAAD,EAAI;EACR,WAAOo1C,wBAAwB,CAACjE,MAAzB,CAAgCnxC,CAAhC,EAAmC,KAAK0wC,KAAxC,CAAP;EACD;;EACD,MAAI91C,WAAJ,GAAkB;EAChB,WAAO,CAACs2C,sBAAD,CAAP;EACD;;EA1D2C;;;;;;;;;ECN/B,MAAM2E,iBAAN,CAAwB;EACrCC,EAAAA,OAAO,CAAC7Q,EAAD,EAAKpD,EAAL,EAAS;;EADqB;;ECCxB,MAAMkU,qBAAN,CAA4B;EACzCD,EAAAA,OAAO,CAAC7Q,EAAD,EAAKpD,EAAL,EAAS;EACd,UAAMmU,OAAO,GAAG/Q,EAAE,CAACxjC,YAAH,CAAgBogC,EAAhB,EAAoB7gC,OAApB,EAAhB;EACA,UAAMi1C,SAAS,GAAGhR,EAAE,CAACiR,KAAH,CAASrU,EAAT,EAAa7gC,OAAb,EAAlB;EACA,WAAOg1C,OAAO,GAAGC,SAAjB;EACD;;EACD,MAAIr7C,WAAJ,GAAkB;EAChB,WAAO,CAACi7C,iBAAD,CAAP;EACD;;EARwC;;ECE5B,MAAMM,0BAAN,CAAiC;EAC9C,SAAOC,YAAP,CAAoBn2C,GAApB,EAAyB;EACvB,QAAIA,GAAG,CAACmB,MAAJ,EAAJ,EAAkB,OAAO,GAAP;EAClB,UAAM0qC,KAAK,GAAG7rC,GAAG,CAACgB,QAAJ,EAAd;EACA,UAAMo1C,GAAG,GAAGp2C,GAAG,CAACiB,SAAJ,EAAZ;EACA,WAAOtN,IAAI,CAAC2G,IAAL,CAAUuxC,KAAK,GAAGA,KAAR,GAAgBuK,GAAG,GAAGA,GAAhC,CAAP;EACD;;EACDP,EAAAA,OAAO,CAAC7Q,EAAD,EAAKpD,EAAL,EAAS;EACd,UAAMnnC,QAAQ,GAAG80C,yBAAyB,CAAC90C,QAA1B,CAAmCuqC,EAAnC,EAAuCpD,EAAvC,EAA2CsU,0BAA0B,CAACG,gBAAtE,CAAjB;EACA,UAAMr2C,GAAG,GAAG,IAAIP,QAAJ,CAAaulC,EAAE,CAACvxB,mBAAH,EAAb,CAAZ;EACAzT,IAAAA,GAAG,CAACqC,eAAJ,CAAoBu/B,EAAE,CAACnuB,mBAAH,EAApB;EACA,UAAM6iC,OAAO,GAAGJ,0BAA0B,CAACC,YAA3B,CAAwCn2C,GAAxC,CAAhB;EACA,UAAM61C,OAAO,GAAG,IAAIp7C,QAAQ,GAAG67C,OAA/B;EACA,WAAOT,OAAP;EACD;;EACD,MAAIl7C,WAAJ,GAAkB;EAChB,WAAO,CAACi7C,iBAAD,CAAP;EACD;;EAjB6C;EAmBhDM,0BAA0B,CAACG,gBAA3B,GAA8C,IAA9C;;ECtBe,MAAME,yBAAN,CAAgC;EAC7C,SAAO1R,OAAP,CAAe2R,QAAf,EAAyBC,QAAzB,EAAmC;EACjC,WAAO9iD,IAAI,CAAC+M,GAAL,CAAS81C,QAAT,EAAmBC,QAAnB,CAAP;EACD;;EAH4C;;;;;;;;;;ECOhC,MAAMC,QAAN,CAAe;EAC5B3iD,EAAAA,WAAW,GAAG;EACZ2iD,IAAAA,QAAQ,CAACt/C,YAAT,CAAsBC,KAAtB,CAA4B,IAA5B,EAAkCC,SAAlC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKu/C,WAAL,GAAmB,IAAnB;EACA,SAAKC,cAAL,GAAsB,IAAIx+C,UAAJ,EAAtB;EACA,SAAKy+C,SAAL,GAAiB,CAAjB;EACA,SAAKC,IAAL,GAAY,IAAI1+C,UAAJ,EAAZ;EACA,SAAK2+C,YAAL,GAAoB,IAAI3+C,UAAJ,EAApB;EACA,SAAK4+C,YAAL,GAAoB,GAApB;EACA,SAAKC,QAAL,GAAgB,CAAhB;EACA,SAAKC,UAAL,GAAkB,IAAI9+C,UAAJ,EAAlB;EACA,UAAM0Z,IAAI,GAAGxa,SAAS,CAAC,CAAD,CAAtB;EACA,SAAKq/C,WAAL,GAAmB,IAAnB;EACA,SAAK76C,GAAL,CAASgW,IAAT;EACD;;EACD,SAAOqlC,KAAP,CAAal3C,EAAb,EAAiBC,EAAjB,EAAqB2vB,EAArB,EAAyB;EACvB,WAAO,CAAC3vB,EAAE,CAAC7J,CAAH,GAAO4J,EAAE,CAAC5J,CAAX,KAAiBw5B,EAAE,CAACv5B,CAAH,GAAO2J,EAAE,CAAC3J,CAA3B,IAAgC,CAACu5B,EAAE,CAACx5B,CAAH,GAAO4J,EAAE,CAAC5J,CAAX,KAAiB6J,EAAE,CAAC5J,CAAH,GAAO2J,EAAE,CAAC3J,CAA3B,CAAvC;EACD;;EACD,SAAO8gD,SAAP,CAAiBn3C,EAAjB,EAAqBC,EAArB,EAAyB2vB,EAAzB,EAA6Bv3B,CAA7B,EAAgC;EAC9BA,IAAAA,CAAC,CAACjC,CAAF,GAAM4J,EAAE,CAAC5J,CAAH,GAAO6J,EAAE,CAAC7J,CAAV,GAAcw5B,EAAE,CAACx5B,CAAvB;EACAiC,IAAAA,CAAC,CAAChC,CAAF,GAAM2J,EAAE,CAAC3J,CAAH,GAAO4J,EAAE,CAAC5J,CAAV,GAAcu5B,EAAE,CAACv5B,CAAvB;EACA,WAAO,IAAP;EACD;;EACD,SAAO+gD,WAAP,CAAmBvlC,IAAnB,EAAyB;EACvB,UAAMwlC,IAAI,GAAG,IAAIZ,QAAJ,CAAa5kC,IAAb,CAAb;EACA,WAAOwlC,IAAI,CAACD,WAAL,EAAP;EACD;;EACDE,EAAAA,gBAAgB,CAACC,MAAD,EAAS;EACvB,SAAKb,WAAL,GAAmBa,MAAnB;EACD;;EACDC,EAAAA,QAAQ,CAAC98B,EAAD,EAAK;EACX,SAAKs8B,QAAL,IAAiB,CAAjB;EACA,SAAKC,UAAL,CAAgB7gD,CAAhB,IAAqBskB,EAAE,CAACtkB,CAAxB;EACA,SAAK6gD,UAAL,CAAgB5gD,CAAhB,IAAqBqkB,EAAE,CAACrkB,CAAxB;EACD;;EACDohD,EAAAA,eAAe,CAACn5C,GAAD,EAAM;EACnB,QAAIo5C,OAAO,GAAG,GAAd;;EACA,SAAK,IAAIjjD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6J,GAAG,CAAChH,MAAJ,GAAa,CAAjC,EAAoC7C,CAAC,EAArC,EAAyC;EACvC,YAAMkjD,UAAU,GAAGr5C,GAAG,CAAC7J,CAAD,CAAH,CAAO+F,QAAP,CAAgB8D,GAAG,CAAC7J,CAAC,GAAG,CAAL,CAAnB,CAAnB;EACA,UAAIkjD,UAAU,KAAK,GAAnB,EAAwB;EACxBD,MAAAA,OAAO,IAAIC,UAAX;EACA,YAAM9oC,IAAI,GAAG,CAACvQ,GAAG,CAAC7J,CAAD,CAAH,CAAO2B,CAAP,GAAWkI,GAAG,CAAC7J,CAAC,GAAG,CAAL,CAAH,CAAW2B,CAAvB,IAA4B,CAAzC;EACA,WAAK0gD,YAAL,CAAkB1gD,CAAlB,IAAuBuhD,UAAU,GAAG9oC,IAApC;EACA,YAAMC,IAAI,GAAG,CAACxQ,GAAG,CAAC7J,CAAD,CAAH,CAAO4B,CAAP,GAAWiI,GAAG,CAAC7J,CAAC,GAAG,CAAL,CAAH,CAAW4B,CAAvB,IAA4B,CAAzC;EACA,WAAKygD,YAAL,CAAkBzgD,CAAlB,IAAuBshD,UAAU,GAAG7oC,IAApC;EACD;;EACD,SAAKioC,YAAL,IAAqBW,OAArB;EACA,QAAIA,OAAO,KAAK,GAAZ,IAAmBp5C,GAAG,CAAChH,MAAJ,GAAa,CAApC,EAAuC,KAAKkgD,QAAL,CAAcl5C,GAAG,CAAC,CAAD,CAAjB;EACxC;;EACDs5C,EAAAA,OAAO,CAACt5C,GAAD,EAAM;EACX,UAAMu5C,cAAc,GAAGxqC,WAAW,CAACC,KAAZ,CAAkBhP,GAAlB,CAAvB;;EACA,SAAK,IAAI7J,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6J,GAAG,CAAChH,MAAJ,GAAa,CAAjC,EAAoC7C,CAAC,EAArC,EACE,KAAKqjD,WAAL,CAAiB,KAAKpB,WAAtB,EAAmCp4C,GAAG,CAAC7J,CAAD,CAAtC,EAA2C6J,GAAG,CAAC7J,CAAC,GAAG,CAAL,CAA9C,EAAuDojD,cAAvD;;EAEF,SAAKJ,eAAL,CAAqBn5C,GAArB;EACD;;EACD84C,EAAAA,WAAW,GAAG;EACZ,UAAMC,IAAI,GAAG,IAAIl/C,UAAJ,EAAb;;EACA,QAAIzE,IAAI,CAACC,GAAL,CAAS,KAAKijD,SAAd,IAA2B,GAA/B,EAAoC;EAClCS,MAAAA,IAAI,CAACjhD,CAAL,GAAS,KAAKygD,IAAL,CAAUzgD,CAAV,GAAc,CAAd,GAAkB,KAAKwgD,SAAhC;EACAS,MAAAA,IAAI,CAAChhD,CAAL,GAAS,KAAKwgD,IAAL,CAAUxgD,CAAV,GAAc,CAAd,GAAkB,KAAKugD,SAAhC;EACD,KAHD,MAGO,IAAI,KAAKG,YAAL,GAAoB,GAAxB,EAA6B;EAClCM,MAAAA,IAAI,CAACjhD,CAAL,GAAS,KAAK0gD,YAAL,CAAkB1gD,CAAlB,GAAsB,KAAK2gD,YAApC;EACAM,MAAAA,IAAI,CAAChhD,CAAL,GAAS,KAAKygD,YAAL,CAAkBzgD,CAAlB,GAAsB,KAAK0gD,YAApC;EACD,KAHM,MAGA,IAAI,KAAKC,QAAL,GAAgB,CAApB,EAAuB;EAC5BK,MAAAA,IAAI,CAACjhD,CAAL,GAAS,KAAK6gD,UAAL,CAAgB7gD,CAAhB,GAAoB,KAAK4gD,QAAlC;EACAK,MAAAA,IAAI,CAAChhD,CAAL,GAAS,KAAK4gD,UAAL,CAAgB5gD,CAAhB,GAAoB,KAAK2gD,QAAlC;EACD,KAHM,MAGA;EACL,aAAO,IAAP;EACD;;EACD,WAAOK,IAAP;EACD;;EACDU,EAAAA,QAAQ,CAACz5C,GAAD,EAAM;EACZ,QAAIA,GAAG,CAAChH,MAAJ,GAAa,CAAjB,EAAoB,KAAKggD,gBAAL,CAAsBh5C,GAAG,CAAC,CAAD,CAAzB;EACpB,UAAMu5C,cAAc,GAAG,CAACxqC,WAAW,CAACC,KAAZ,CAAkBhP,GAAlB,CAAxB;;EACA,SAAK,IAAI7J,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6J,GAAG,CAAChH,MAAJ,GAAa,CAAjC,EAAoC7C,CAAC,EAArC,EACE,KAAKqjD,WAAL,CAAiB,KAAKpB,WAAtB,EAAmCp4C,GAAG,CAAC7J,CAAD,CAAtC,EAA2C6J,GAAG,CAAC7J,CAAC,GAAG,CAAL,CAA9C,EAAuDojD,cAAvD;;EAEF,SAAKJ,eAAL,CAAqBn5C,GAArB;EACD;;EACDw5C,EAAAA,WAAW,CAACv8B,EAAD,EAAKvb,EAAL,EAASC,EAAT,EAAa43C,cAAb,EAA6B;EACtC,UAAMrhD,IAAI,GAAGqhD,cAAc,GAAG,GAAH,GAAS,CAAC,GAArC;EACApB,IAAAA,QAAQ,CAACU,SAAT,CAAmB57B,EAAnB,EAAuBvb,EAAvB,EAA2BC,EAA3B,EAA+B,KAAK02C,cAApC;EACA,UAAMO,KAAK,GAAGT,QAAQ,CAACS,KAAT,CAAe37B,EAAf,EAAmBvb,EAAnB,EAAuBC,EAAvB,CAAd;EACA,SAAK42C,IAAL,CAAUzgD,CAAV,IAAeI,IAAI,GAAG0gD,KAAP,GAAe,KAAKP,cAAL,CAAoBvgD,CAAlD;EACA,SAAKygD,IAAL,CAAUxgD,CAAV,IAAeG,IAAI,GAAG0gD,KAAP,GAAe,KAAKP,cAAL,CAAoBtgD,CAAlD;EACA,SAAKugD,SAAL,IAAkBpgD,IAAI,GAAG0gD,KAAzB;EACD;;EACDr7C,EAAAA,GAAG,GAAG;EACJ,QAAIxE,SAAS,CAAC,CAAD,CAAT,YAAwB0kB,OAA5B,EAAqC;EACnC,YAAM2B,IAAI,GAAGrmB,SAAS,CAAC,CAAD,CAAtB;EACA,WAAK0gD,QAAL,CAAcr6B,IAAI,CAACN,eAAL,GAAuBvD,cAAvB,EAAd;;EACA,WAAK,IAAIplB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGipB,IAAI,CAAChB,kBAAL,EAApB,EAA+CjoB,CAAC,EAAhD,EACE,KAAKmjD,OAAL,CAAal6B,IAAI,CAACL,gBAAL,CAAsB5oB,CAAtB,EAAyBolB,cAAzB,EAAb;EAEH,KAND,MAMO,IAAIxiB,SAAS,CAAC,CAAD,CAAT,YAAwBya,QAA5B,EAAsC;EAC3C,YAAMD,IAAI,GAAGxa,SAAS,CAAC,CAAD,CAAtB;EACA,UAAIwa,IAAI,CAAC9V,OAAL,EAAJ,EAAoB,OAAO,IAAP;;EACpB,UAAI8V,IAAI,YAAYiJ,KAApB,EAA2B;EACzB,aAAK08B,QAAL,CAAc3lC,IAAI,CAAC9T,aAAL,EAAd;EACD,OAFD,MAEO,IAAI8T,IAAI,YAAY4H,UAApB,EAAgC;EACrC,aAAKg+B,eAAL,CAAqB5lC,IAAI,CAACgI,cAAL,EAArB;EACD,OAFM,MAEA,IAAIhI,IAAI,YAAYkK,OAApB,EAA6B;EAClC,cAAM2B,IAAI,GAAG7L,IAAb;EACA,aAAKhW,GAAL,CAAS6hB,IAAT;EACD,OAHM,MAGA,IAAI7L,IAAI,YAAYyM,kBAApB,EAAwC;EAC7C,cAAMQ,EAAE,GAAGjN,IAAX;;EACA,aAAK,IAAIpd,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqqB,EAAE,CAAC/L,gBAAH,EAApB,EAA2Cte,CAAC,EAA5C,EACE,KAAKoH,GAAL,CAASijB,EAAE,CAAC1M,YAAH,CAAgB3d,CAAhB,CAAT;EAEH;EACF;EACF;;EAlH2B;;ECLf,MAAMujD,mBAAN,SAAkCpkD,SAAlC,CAA4C;EACzDE,EAAAA,WAAW,CAACC,OAAD,EAAU;EACnB,UAAMA,OAAN;EACA,SAAKC,IAAL,GAAYC,MAAM,CAACC,IAAP,CAAY;EAAE8jD,MAAAA;EAAF,KAAZ,EAAqC,CAArC,CAAZ;EACD;;EAJwD;;ECE3D;EACA;EACA;;EACe,MAAMC,KAAN,SAAoB57C,IAApB,CAAyB;EACtCvI,EAAAA,WAAW,GAAG;EACZ;EACA,SAAK4I,KAAL,GAAa,EAAb;EACD;;EAEDb,EAAAA,GAAG,CAAC/B,CAAD,EAAI;EACL,SAAK4C,KAAL,CAAWE,IAAX,CAAgB9C,CAAhB;EACA,WAAO,IAAP;EACD;;EAEDwC,EAAAA,GAAG,CAACS,KAAD,EAAQ;EACT,QAAIA,KAAK,GAAG,CAAR,IAAaA,KAAK,IAAI,KAAKd,IAAL,EAA1B,EACE,MAAM,IAAIG,yBAAJ,EAAN;EACF,WAAO,KAAKM,KAAL,CAAWK,KAAX,CAAP;EACD;EAED;EACF;EACA;EACA;EACA;;;EACEH,EAAAA,IAAI,CAAC9C,CAAD,EAAI;EACN,SAAK4C,KAAL,CAAWE,IAAX,CAAgB9C,CAAhB;EACA,WAAOA,CAAP;EACD;EAED;EACF;EACA;EACA;;;EACEo+C,EAAAA,GAAG,GAAG;EACJ,QAAI,KAAKx7C,KAAL,CAAWpF,MAAX,KAAsB,CAA1B,EACE,MAAM,IAAI0gD,mBAAJ,EAAN;EACF,WAAO,KAAKt7C,KAAL,CAAWw7C,GAAX,EAAP;EACD;EAED;EACF;EACA;EACA;EACA;;;EACEC,EAAAA,IAAI,GAAG;EACL,QAAI,KAAKz7C,KAAL,CAAWpF,MAAX,KAAsB,CAA1B,EACE,MAAM,IAAI0gD,mBAAJ,EAAN;EACF,WAAO,KAAKt7C,KAAL,CAAW,KAAKA,KAAL,CAAWpF,MAAX,GAAoB,CAA/B,CAAP;EACD;EAED;EACF;EACA;EACA;EACA;;;EACE8gD,EAAAA,KAAK,GAAG;EACN,WAAO,KAAK17C,KAAL,CAAWpF,MAAX,KAAsB,CAA7B;EACD;EAED;EACF;EACA;;;EACEyE,EAAAA,OAAO,GAAG;EACR,WAAO,KAAKq8C,KAAL,EAAP;EACD;EAED;EACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;EACEC,EAAAA,MAAM,CAAC3+C,CAAD,EAAI;EACR,WAAO,KAAKgD,KAAL,CAAWf,OAAX,CAAmBjC,CAAnB,CAAP;EACD;EAED;EACF;EACA;;;EACEuC,EAAAA,IAAI,GAAG;EACL,WAAO,KAAKS,KAAL,CAAWpF,MAAlB;EACD;EAED;EACF;EACA;;;EACE4E,EAAAA,OAAO,GAAG;EACR,WAAO,KAAKQ,KAAL,CAAWW,KAAX,EAAP;EACD;;EA9FqC;;ECJzB,MAAMi7C,2BAAN,CAAkC;EAC/CxkD,EAAAA,WAAW,GAAG;EACZwkD,IAAAA,2BAA2B,CAACnhD,YAA5B,CAAyCC,KAAzC,CAA+C,IAA/C,EAAqDC,SAArD;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKohD,SAAL,GAAiB,IAAIn1B,OAAJ,EAAjB;EACA,SAAKo1B,KAAL,GAAa,IAAI/7C,SAAJ,EAAb;EACD;;EACD,SAAOg8C,iBAAP,CAAyB1U,MAAzB,EAAiC;EAC/B,UAAM3kC,MAAM,GAAG,IAAIk5C,2BAAJ,EAAf;;EACA,SAAK,IAAI7jD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsvC,MAAM,CAACzsC,MAA3B,EAAmC7C,CAAC,EAApC,EACE2K,MAAM,CAACA,MAAP,CAAc2kC,MAAM,CAACtvC,CAAD,CAApB;;EAEF,WAAO2K,MAAM,CAACya,cAAP,EAAP;EACD;;EACDza,EAAAA,MAAM,CAACvF,KAAD,EAAQ;EACZ,QAAI,KAAK0+C,SAAL,CAAe18C,GAAf,CAAmBhC,KAAnB,CAAJ,EACE,KAAK2+C,KAAL,CAAW38C,GAAX,CAAehC,KAAf;EAEH;;EACDggB,EAAAA,cAAc,GAAG;EACf,UAAMmB,WAAW,GAAG,IAAIzc,KAAJ,CAAU,KAAKi6C,KAAL,CAAWv8C,IAAX,EAAV,EAA6BuC,IAA7B,CAAkC,IAAlC,CAApB;EACA,WAAO,KAAKg6C,KAAL,CAAWt8C,OAAX,CAAmB8e,WAAnB,CAAP;EACD;;EACD,MAAItgB,WAAJ,GAAkB;EAChB,WAAO,CAACub,gBAAD,CAAP;EACD;;EA1B8C;;ECQlC,MAAMyiC,UAAN,CAAiB;EAC9B5kD,EAAAA,WAAW,GAAG;EACZ4kD,IAAAA,UAAU,CAACvhD,YAAX,CAAwBC,KAAxB,CAA8B,IAA9B,EAAoCC,SAApC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKotC,YAAL,GAAoB,IAApB;EACA,SAAKoU,SAAL,GAAiB,IAAjB;;EACA,QAAIthD,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMk0B,QAAQ,GAAGn0B,SAAS,CAAC,CAAD,CAA1B;EACAqhD,MAAAA,UAAU,CAACvhD,YAAX,CAAwBI,IAAxB,CAA6B,IAA7B,EAAmCmhD,UAAU,CAACE,kBAAX,CAA8BptB,QAA9B,CAAnC,EAA4EA,QAAQ,CAACtZ,UAAT,EAA5E;EACD,KAHD,MAGO,IAAI7a,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMgH,GAAG,GAAGjH,SAAS,CAAC,CAAD,CAArB;EAAA,YAA0B47B,WAAW,GAAG57B,SAAS,CAAC,CAAD,CAAjD;EACA,WAAKshD,SAAL,GAAiBL,2BAA2B,CAACG,iBAA5B,CAA8Cn6C,GAA9C,CAAjB;EACA,WAAKimC,YAAL,GAAoBtR,WAApB;EACD;EACF;;EACD,SAAO2lB,kBAAP,CAA0B/mC,IAA1B,EAAgC;EAC9B,UAAMzS,MAAM,GAAG,IAAIk5C,2BAAJ,EAAf;EACAzmC,IAAAA,IAAI,CAACza,KAAL,CAAWgI,MAAX;EACA,WAAOA,MAAM,CAACya,cAAP,EAAP;EACD;;EACDg/B,EAAAA,OAAO,CAACv6C,GAAD,EAAM;EACX,QAAIsL,CAAC,GAAG,IAAR;;EACA,SAAK,IAAInV,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6J,GAAG,CAAChH,MAAxB,EAAgC7C,CAAC,EAAjC,EACE,IAAI6J,GAAG,CAAC7J,CAAD,CAAH,CAAO4B,CAAP,GAAWiI,GAAG,CAAC,CAAD,CAAH,CAAOjI,CAAlB,IAAuBiI,GAAG,CAAC7J,CAAD,CAAH,CAAO4B,CAAP,KAAaiI,GAAG,CAAC,CAAD,CAAH,CAAOjI,CAApB,IAAyBiI,GAAG,CAAC7J,CAAD,CAAH,CAAO2B,CAAP,GAAWkI,GAAG,CAAC,CAAD,CAAH,CAAOlI,CAAtE,EAAyE;EACvEwT,MAAAA,CAAC,GAAGtL,GAAG,CAAC,CAAD,CAAP;EACAA,MAAAA,GAAG,CAAC,CAAD,CAAH,GAASA,GAAG,CAAC7J,CAAD,CAAZ;EACA6J,MAAAA,GAAG,CAAC7J,CAAD,CAAH,GAASmV,CAAT;EACD;;EAEH4R,IAAAA,MAAM,CAACre,IAAP,CAAYmB,GAAZ,EAAiB,CAAjB,EAAoBA,GAAG,CAAChH,MAAxB,EAAgC,IAAIwhD,gBAAJ,CAAqBx6C,GAAG,CAAC,CAAD,CAAxB,CAAhC;EACA,WAAOA,GAAP;EACD;;EACDy6C,EAAAA,cAAc,CAACC,QAAD,EAAW;EACvB,UAAMC,MAAM,GAAG,KAAKC,aAAL,CAAmBF,QAAnB,CAAf;EACA,UAAM94B,SAAS,GAAG,IAAIriB,cAAJ,EAAlB;EACAqiB,IAAAA,SAAS,CAACrkB,GAAV,CAAco9C,MAAd,EAAsB,KAAtB;EACA,QAAI/4B,SAAS,CAACjkB,IAAV,KAAmB,CAAvB,EACE,OAAO,IAAP;EAEFikB,IAAAA,SAAS,CAACjhB,SAAV;EACA,WAAOihB,SAAS,CAAC/hB,iBAAV,EAAP;EACD;;EACDg7C,EAAAA,aAAa,CAACn+B,WAAD,EAAc;EACzBA,IAAAA,WAAW,GAAG,KAAKo+B,SAAL,CAAep+B,WAAf,CAAd;EACA,QAAIA,WAAW,CAAC1jB,MAAZ,KAAuB,CAA3B,EACE,OAAO,KAAKitC,YAAL,CAAkBrqB,gBAAlB,CAAmC,CAACc,WAAW,CAAC,CAAD,CAAZ,EAAiBA,WAAW,CAAC,CAAD,CAA5B,CAAnC,CAAP;;EAEF,UAAMq+B,UAAU,GAAG,KAAK9U,YAAL,CAAkBnoB,gBAAlB,CAAmCpB,WAAnC,CAAnB;;EACA,WAAO,KAAKupB,YAAL,CAAkBjnB,aAAlB,CAAgC+7B,UAAhC,CAAP;EACD;;EACDD,EAAAA,SAAS,CAACx9B,QAAD,EAAW;EAClBpkB,IAAAA,MAAM,CAACI,MAAP,CAAcgkB,QAAQ,CAAC,CAAD,CAAtB,EAA2BA,QAAQ,CAACA,QAAQ,CAACtkB,MAAT,GAAkB,CAAnB,CAAnC;EACA,UAAMgiD,WAAW,GAAG,IAAI78C,SAAJ,EAApB;EACA,QAAI88C,0BAA0B,GAAG,IAAjC;;EACA,SAAK,IAAI9kD,CAAC,GAAG,CAAb,EAAgBA,CAAC,IAAImnB,QAAQ,CAACtkB,MAAT,GAAkB,CAAvC,EAA0C7C,CAAC,EAA3C,EAA+C;EAC7C,YAAM+kD,iBAAiB,GAAG59B,QAAQ,CAACnnB,CAAD,CAAlC;EACA,YAAMglD,cAAc,GAAG79B,QAAQ,CAACnnB,CAAC,GAAG,CAAL,CAA/B;EACA,UAAI+kD,iBAAiB,CAAC5hD,MAAlB,CAAyB6hD,cAAzB,CAAJ,EACE;EAEF,UAAIF,0BAA0B,KAAK,IAA/B,IAAuC,KAAKG,SAAL,CAAeH,0BAAf,EAA2CC,iBAA3C,EAA8DC,cAA9D,CAA3C,EACE;EAEFH,MAAAA,WAAW,CAACz9C,GAAZ,CAAgB29C,iBAAhB;EACAD,MAAAA,0BAA0B,GAAGC,iBAA7B;EACD;;EACDF,IAAAA,WAAW,CAACz9C,GAAZ,CAAgB+f,QAAQ,CAACA,QAAQ,CAACtkB,MAAT,GAAkB,CAAnB,CAAxB;EACA,UAAMqiD,sBAAsB,GAAG,IAAIp7C,KAAJ,CAAU+6C,WAAW,CAACr9C,IAAZ,EAAV,EAA8BuC,IAA9B,CAAmC,IAAnC,CAA/B;EACA,WAAO86C,WAAW,CAACp9C,OAAZ,CAAoBy9C,sBAApB,CAAP;EACD;;EACDD,EAAAA,SAAS,CAACx+C,EAAD,EAAKC,EAAL,EAASy+C,EAAT,EAAa;EACpB,QAAIvsC,WAAW,CAACtQ,KAAZ,CAAkB7B,EAAlB,EAAsBC,EAAtB,EAA0By+C,EAA1B,MAAkC,CAAtC,EACE,OAAO,KAAP;;EAEF,QAAI1+C,EAAE,CAAC9E,CAAH,KAASwjD,EAAE,CAACxjD,CAAhB,EAAmB;EACjB,UAAI8E,EAAE,CAAC9E,CAAH,IAAQ+E,EAAE,CAAC/E,CAAX,IAAgB+E,EAAE,CAAC/E,CAAH,IAAQwjD,EAAE,CAACxjD,CAA/B,EACE,OAAO,IAAP;EAEF,UAAIwjD,EAAE,CAACxjD,CAAH,IAAQ+E,EAAE,CAAC/E,CAAX,IAAgB+E,EAAE,CAAC/E,CAAH,IAAQ8E,EAAE,CAAC9E,CAA/B,EACE,OAAO,IAAP;EAEH;;EACD,QAAI8E,EAAE,CAAC7E,CAAH,KAASujD,EAAE,CAACvjD,CAAhB,EAAmB;EACjB,UAAI6E,EAAE,CAAC7E,CAAH,IAAQ8E,EAAE,CAAC9E,CAAX,IAAgB8E,EAAE,CAAC9E,CAAH,IAAQujD,EAAE,CAACvjD,CAA/B,EACE,OAAO,IAAP;EAEF,UAAIujD,EAAE,CAACvjD,CAAH,IAAQ8E,EAAE,CAAC9E,CAAX,IAAgB8E,EAAE,CAAC9E,CAAH,IAAQ6E,EAAE,CAAC7E,CAA/B,EACE,OAAO,IAAP;EAEH;;EACD,WAAO,KAAP;EACD;;EACDwjD,EAAAA,MAAM,CAACb,QAAD,EAAW;EACf,UAAMc,OAAO,GAAG,KAAKf,cAAL,CAAoBC,QAApB,CAAhB;EACA,QAAIc,OAAO,KAAK,IAAhB,EAAsB,OAAOd,QAAP;EACtB,UAAMe,UAAU,GAAG,IAAI17B,OAAJ,EAAnB;;EACA,SAAK,IAAI5pB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqlD,OAAO,CAACxiD,MAA5B,EAAoC7C,CAAC,EAArC,EACEslD,UAAU,CAACl+C,GAAX,CAAei+C,OAAO,CAACrlD,CAAD,CAAtB;;EAEF,SAAK,IAAIA,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGukD,QAAQ,CAAC1hD,MAA7B,EAAqC7C,CAAC,EAAtC,EACE,IAAI,CAAC8/C,aAAa,CAACI,QAAd,CAAuBqE,QAAQ,CAACvkD,CAAD,CAA/B,EAAoCqlD,OAApC,CAAL,EACEC,UAAU,CAACl+C,GAAX,CAAem9C,QAAQ,CAACvkD,CAAD,CAAvB;;EAGJ,UAAMulD,UAAU,GAAGt6B,gBAAgB,CAACvhB,iBAAjB,CAAmC47C,UAAnC,CAAnB;EACA,QAAIC,UAAU,CAAC1iD,MAAX,GAAoB,CAAxB,EAA2B,OAAO,KAAK2iD,SAAL,CAAeD,UAAf,CAAP;EAC3B,WAAOA,UAAP;EACD;;EACDE,EAAAA,aAAa,GAAG;EACd,QAAI,KAAKvB,SAAL,CAAerhD,MAAf,KAA0B,CAA9B,EACE,OAAO,KAAKitC,YAAL,CAAkBrpB,wBAAlB,EAAP;EAEF,QAAI,KAAKy9B,SAAL,CAAerhD,MAAf,KAA0B,CAA9B,EACE,OAAO,KAAKitC,YAAL,CAAkB3pB,WAAlB,CAA8B,KAAK+9B,SAAL,CAAe,CAAf,CAA9B,CAAP;EAEF,QAAI,KAAKA,SAAL,CAAerhD,MAAf,KAA0B,CAA9B,EACE,OAAO,KAAKitC,YAAL,CAAkBrqB,gBAAlB,CAAmC,KAAKy+B,SAAxC,CAAP;EAEF,QAAIqB,UAAU,GAAG,KAAKrB,SAAtB;EACA,QAAI,KAAKA,SAAL,CAAerhD,MAAf,GAAwB,EAA5B,EACE0iD,UAAU,GAAG,KAAKH,MAAL,CAAY,KAAKlB,SAAjB,CAAb;EAEF,UAAMwB,SAAS,GAAG,KAAKtB,OAAL,CAAamB,UAAb,CAAlB;EACA,UAAMI,GAAG,GAAG,KAAKC,UAAL,CAAgBF,SAAhB,CAAZ;EACA,UAAMG,EAAE,GAAG,KAAKn8C,iBAAL,CAAuBi8C,GAAvB,CAAX;EACA,WAAO,KAAKjB,aAAL,CAAmBmB,EAAnB,CAAP;EACD;;EACDL,EAAAA,SAAS,CAAC37C,GAAD,EAAM;EACb,UAAMi8C,GAAG,GAAG,IAAIh8C,KAAJ,CAAU,CAAV,EAAaC,IAAb,CAAkB,IAAlB,CAAZ;;EACA,SAAK,IAAI/J,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG8lD,GAAG,CAACjjD,MAAxB,EAAgC7C,CAAC,EAAjC,EACE,IAAIA,CAAC,GAAG6J,GAAG,CAAChH,MAAZ,EACEijD,GAAG,CAAC9lD,CAAD,CAAH,GAAS6J,GAAG,CAAC7J,CAAD,CAAZ,CADF,KAEK8lD,GAAG,CAAC9lD,CAAD,CAAH,GAAS6J,GAAG,CAAC,CAAD,CAAZ;;EAEP,WAAOi8C,GAAP;EACD;;EACDrB,EAAAA,aAAa,CAACF,QAAD,EAAW;EACtB,UAAM16C,GAAG,GAAG,IAAIC,KAAJ,CAAU,CAAV,EAAaC,IAAb,CAAkB,IAAlB,CAAZ;;EACA,SAAK,IAAI+V,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGjW,GAAG,CAAChH,MAAxB,EAAgCid,CAAC,EAAjC,EACEjW,GAAG,CAACiW,CAAD,CAAH,GAASykC,QAAQ,CAAC,CAAD,CAAjB;;EAEF,SAAK,IAAIvkD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGukD,QAAQ,CAAC1hD,MAA7B,EAAqC7C,CAAC,EAAtC,EAA0C;EACxC,UAAIukD,QAAQ,CAACvkD,CAAD,CAAR,CAAY2B,CAAZ,GAAgBkI,GAAG,CAAC,CAAD,CAAH,CAAOlI,CAA3B,EACEkI,GAAG,CAAC,CAAD,CAAH,GAAS06C,QAAQ,CAACvkD,CAAD,CAAjB;EAEF,UAAIukD,QAAQ,CAACvkD,CAAD,CAAR,CAAY2B,CAAZ,GAAgB4iD,QAAQ,CAACvkD,CAAD,CAAR,CAAY4B,CAA5B,GAAgCiI,GAAG,CAAC,CAAD,CAAH,CAAOlI,CAAP,GAAWkI,GAAG,CAAC,CAAD,CAAH,CAAOjI,CAAtD,EACEiI,GAAG,CAAC,CAAD,CAAH,GAAS06C,QAAQ,CAACvkD,CAAD,CAAjB;EAEF,UAAIukD,QAAQ,CAACvkD,CAAD,CAAR,CAAY4B,CAAZ,GAAgBiI,GAAG,CAAC,CAAD,CAAH,CAAOjI,CAA3B,EACEiI,GAAG,CAAC,CAAD,CAAH,GAAS06C,QAAQ,CAACvkD,CAAD,CAAjB;EAEF,UAAIukD,QAAQ,CAACvkD,CAAD,CAAR,CAAY2B,CAAZ,GAAgB4iD,QAAQ,CAACvkD,CAAD,CAAR,CAAY4B,CAA5B,GAAgCiI,GAAG,CAAC,CAAD,CAAH,CAAOlI,CAAP,GAAWkI,GAAG,CAAC,CAAD,CAAH,CAAOjI,CAAtD,EACEiI,GAAG,CAAC,CAAD,CAAH,GAAS06C,QAAQ,CAACvkD,CAAD,CAAjB;EAEF,UAAIukD,QAAQ,CAACvkD,CAAD,CAAR,CAAY2B,CAAZ,GAAgBkI,GAAG,CAAC,CAAD,CAAH,CAAOlI,CAA3B,EACEkI,GAAG,CAAC,CAAD,CAAH,GAAS06C,QAAQ,CAACvkD,CAAD,CAAjB;EAEF,UAAIukD,QAAQ,CAACvkD,CAAD,CAAR,CAAY2B,CAAZ,GAAgB4iD,QAAQ,CAACvkD,CAAD,CAAR,CAAY4B,CAA5B,GAAgCiI,GAAG,CAAC,CAAD,CAAH,CAAOlI,CAAP,GAAWkI,GAAG,CAAC,CAAD,CAAH,CAAOjI,CAAtD,EACEiI,GAAG,CAAC,CAAD,CAAH,GAAS06C,QAAQ,CAACvkD,CAAD,CAAjB;EAEF,UAAIukD,QAAQ,CAACvkD,CAAD,CAAR,CAAY4B,CAAZ,GAAgBiI,GAAG,CAAC,CAAD,CAAH,CAAOjI,CAA3B,EACEiI,GAAG,CAAC,CAAD,CAAH,GAAS06C,QAAQ,CAACvkD,CAAD,CAAjB;EAEF,UAAIukD,QAAQ,CAACvkD,CAAD,CAAR,CAAY2B,CAAZ,GAAgB4iD,QAAQ,CAACvkD,CAAD,CAAR,CAAY4B,CAA5B,GAAgCiI,GAAG,CAAC,CAAD,CAAH,CAAOlI,CAAP,GAAWkI,GAAG,CAAC,CAAD,CAAH,CAAOjI,CAAtD,EACEiI,GAAG,CAAC,CAAD,CAAH,GAAS06C,QAAQ,CAACvkD,CAAD,CAAjB;EAEH;;EACD,WAAO6J,GAAP;EACD;;EACDH,EAAAA,iBAAiB,CAACq8C,KAAD,EAAQ;EACvB,UAAMx/B,WAAW,GAAG,IAAIzc,KAAJ,CAAUi8C,KAAK,CAACv+C,IAAN,EAAV,EAAwBuC,IAAxB,CAA6B,IAA7B,CAApB;;EACA,SAAK,IAAI/J,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG+lD,KAAK,CAACv+C,IAAN,EAApB,EAAkCxH,CAAC,EAAnC,EAAuC;EACrC,YAAM4jB,UAAU,GAAGmiC,KAAK,CAACl+C,GAAN,CAAU7H,CAAV,CAAnB;EACAumB,MAAAA,WAAW,CAACvmB,CAAD,CAAX,GAAiB4jB,UAAjB;EACD;;EACD,WAAO2C,WAAP;EACD;;EACDq/B,EAAAA,UAAU,CAAChiD,CAAD,EAAI;EACZ,QAAIyH,CAAC,GAAG,IAAR;EACA,UAAM26C,EAAE,GAAG,IAAIxC,KAAJ,EAAX;EACAwC,IAAAA,EAAE,CAAC79C,IAAH,CAAQvE,CAAC,CAAC,CAAD,CAAT;EACAoiD,IAAAA,EAAE,CAAC79C,IAAH,CAAQvE,CAAC,CAAC,CAAD,CAAT;EACAoiD,IAAAA,EAAE,CAAC79C,IAAH,CAAQvE,CAAC,CAAC,CAAD,CAAT;;EACA,SAAK,IAAI5D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG4D,CAAC,CAACf,MAAtB,EAA8B7C,CAAC,EAA/B,EAAmC;EACjCqL,MAAAA,CAAC,GAAG26C,EAAE,CAACvC,GAAH,EAAJ;;EACA,aAAO,CAACuC,EAAE,CAACrC,KAAH,EAAD,IAAe/qC,WAAW,CAACtQ,KAAZ,CAAkB09C,EAAE,CAACtC,IAAH,EAAlB,EAA6Br4C,CAA7B,EAAgCzH,CAAC,CAAC5D,CAAD,CAAjC,IAAwC,CAA9D,EACEqL,CAAC,GAAG26C,EAAE,CAACvC,GAAH,EAAJ;;EAEFuC,MAAAA,EAAE,CAAC79C,IAAH,CAAQkD,CAAR;EACA26C,MAAAA,EAAE,CAAC79C,IAAH,CAAQvE,CAAC,CAAC5D,CAAD,CAAT;EACD;;EACDgmD,IAAAA,EAAE,CAAC79C,IAAH,CAAQvE,CAAC,CAAC,CAAD,CAAT;EACA,WAAOoiD,EAAP;EACD;;EAlM6B;;EAoMhC,MAAM3B,gBAAN,CAAuB;EACrBhlD,EAAAA,WAAW,GAAG;EACZglD,IAAAA,gBAAgB,CAAC3hD,YAAjB,CAA8BC,KAA9B,CAAoC,IAApC,EAA0CC,SAA1C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKujD,OAAL,GAAe,IAAf;EACA,UAAMjN,MAAM,GAAGp2C,SAAS,CAAC,CAAD,CAAxB;EACA,SAAKqjD,OAAL,GAAejN,MAAf;EACD;;EACD,SAAOkN,YAAP,CAAoBjhD,CAApB,EAAuBoG,CAAvB,EAA0BO,CAA1B,EAA6B;EAC3B,UAAMu6C,GAAG,GAAG96C,CAAC,CAAC1J,CAAF,GAAMsD,CAAC,CAACtD,CAApB;EACA,UAAMykD,GAAG,GAAG/6C,CAAC,CAACzJ,CAAF,GAAMqD,CAAC,CAACrD,CAApB;EACA,UAAMykD,GAAG,GAAGz6C,CAAC,CAACjK,CAAF,GAAMsD,CAAC,CAACtD,CAApB;EACA,UAAM2kD,GAAG,GAAG16C,CAAC,CAAChK,CAAF,GAAMqD,CAAC,CAACrD,CAApB;EACA,UAAMw9C,MAAM,GAAGxmC,WAAW,CAACtQ,KAAZ,CAAkBrD,CAAlB,EAAqBoG,CAArB,EAAwBO,CAAxB,CAAf;EACA,QAAIwzC,MAAM,KAAKxmC,WAAW,CAACW,gBAA3B,EAA6C,OAAO,CAAP;EAC7C,QAAI6lC,MAAM,KAAKxmC,WAAW,CAACS,SAA3B,EAAsC,OAAO,CAAC,CAAR;EACtC,UAAMq2B,EAAE,GAAGyW,GAAG,GAAGA,GAAN,GAAYC,GAAG,GAAGA,GAA7B;EACA,UAAMG,EAAE,GAAGF,GAAG,GAAGA,GAAN,GAAYC,GAAG,GAAGA,GAA7B;EACA,QAAI5W,EAAE,GAAG6W,EAAT,EACE,OAAO,CAAC,CAAR;EAEF,QAAI7W,EAAE,GAAG6W,EAAT,EACE,OAAO,CAAP;EAEF,WAAO,CAAP;EACD;;EACDjgD,EAAAA,OAAO,CAACsmB,EAAD,EAAKC,EAAL,EAAS;EACd,UAAMthB,EAAE,GAAGqhB,EAAX;EACA,UAAMphB,EAAE,GAAGqhB,EAAX;EACA,WAAOw3B,gBAAgB,CAAC6B,YAAjB,CAA8B,KAAKD,OAAnC,EAA4C16C,EAA5C,EAAgDC,EAAhD,CAAP;EACD;;EACD,MAAIvF,WAAJ,GAAkB;EAChB,WAAO,CAAC3D,UAAD,CAAP;EACD;;EAlCoB;;EAoCvB2hD,UAAU,CAACI,gBAAX,GAA8BA,gBAA9B;;EC5Oe,MAAMmC,iBAAN,CAAwB;EACrCnnD,EAAAA,WAAW,GAAG;EACZmnD,IAAAA,iBAAiB,CAAC9jD,YAAlB,CAA+BC,KAA/B,CAAqC,IAArC,EAA2CC,SAA3C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK+jD,cAAL,GAAsB,IAAtB;EACA,SAAKC,SAAL,GAAiB,CAAC,CAAlB;EACA,UAAMvoC,CAAC,GAAGvb,SAAS,CAAC,CAAD,CAAnB;EACA,SAAK+jD,OAAL,CAAaxoC,CAAb;EACD;;EACD,SAAOyoC,gBAAP,CAAwBxpC,IAAxB,EAA8B;EAC5B,UAAM0f,KAAK,GAAG,IAAI0pB,iBAAJ,CAAsBppC,IAAtB,CAAd;EACA,WAAO0f,KAAK,CAAC8pB,gBAAN,EAAP;EACD;;EACD,SAAOC,GAAP,CAAWtgD,CAAX,EAAcC,CAAd,EAAiB;EACf,WAAO,CAACD,CAAC,GAAGC,CAAL,IAAU,GAAjB;EACD;;EACDogD,EAAAA,gBAAgB,GAAG;EACjB,WAAO,KAAKH,cAAZ;EACD;;EACDE,EAAAA,OAAO,CAACvpC,IAAD,EAAO;EACZ,QAAIA,IAAI,CAAC9V,OAAL,EAAJ,EAAoB,OAAO,IAAP;;EACpB,QAAI8V,IAAI,YAAYkK,OAApB,EAA6B;EAC3B,WAAKw/B,cAAL,CAAoB1pC,IAApB;EACD,KAFD,MAEO,IAAIA,IAAI,YAAYyM,kBAApB,EAAwC;EAC7C,YAAMQ,EAAE,GAAGjN,IAAX;;EACA,WAAK,IAAIpd,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqqB,EAAE,CAAC/L,gBAAH,EAApB,EAA2Cte,CAAC,EAA5C,EACE,KAAK2mD,OAAL,CAAat8B,EAAE,CAAC1M,YAAH,CAAgB3d,CAAhB,CAAb;EAEH;EACF;;EACD8mD,EAAAA,cAAc,CAACx4B,OAAD,EAAU;EACtB,UAAMy4B,SAAS,GAAG,IAAIC,oBAAJ,CAAyB14B,OAAzB,CAAlB;EACAy4B,IAAAA,SAAS,CAACJ,OAAV;EACA,UAAMxP,KAAK,GAAG4P,SAAS,CAACz6C,QAAV,EAAd;;EACA,QAAI6qC,KAAK,GAAG,KAAKuP,SAAjB,EAA4B;EAC1B,WAAKA,SAAL,GAAiBvP,KAAjB;EACA,WAAKsP,cAAL,GAAsBM,SAAS,CAACH,gBAAV,EAAtB;EACD;EACF;;EAvCoC;;EAyCvC,MAAMI,oBAAN,CAA2B;EACzB3nD,EAAAA,WAAW,GAAG;EACZ2nD,IAAAA,oBAAoB,CAACtkD,YAArB,CAAkCC,KAAlC,CAAwC,IAAxC,EAA8CC,SAA9C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKukD,QAAL,GAAgB,IAAhB;EACA,SAAKC,eAAL,GAAuB,IAAvB;EACA,SAAKC,qBAAL,GAA6B,GAA7B;EACA,SAAKV,cAAL,GAAsB,IAAtB;EACA,UAAMn4B,OAAO,GAAG1rB,SAAS,CAAC,CAAD,CAAzB;EACA,SAAKqkD,QAAL,GAAgB34B,OAAhB;EACA,SAAK44B,eAAL,GAAuBE,uBAAuB,CAACC,YAAxB,CAAqC/4B,OAArC,CAAvB;EACD;;EACD,SAAOg5B,qBAAP,CAA6BxgC,EAA7B,EAAiCvb,EAAjC,EAAqCg8C,KAArC,EAA4C;EAC1C,UAAM3lC,EAAE,GAAGkF,EAAE,CAACjhB,IAAH,EAAX;EACA,UAAM4F,EAAE,GAAGF,EAAE,CAAC1F,IAAH,EAAX;EACA,QAAI+b,EAAE,KAAKnW,EAAX,EAAe,OAAO,KAAP;EACf,QAAImW,EAAE,KAAK2lC,KAAP,IAAgB97C,EAAE,GAAG87C,KAAzB,EAAgC,OAAO,KAAP;EAChC,QAAI97C,EAAE,KAAK87C,KAAP,IAAgB3lC,EAAE,GAAG2lC,KAAzB,EAAgC,OAAO,KAAP;EAChC,WAAO,IAAP;EACD;;EACD,SAAOC,wBAAP,GAAkC;EAChC,QAAI5kD,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMyI,GAAG,GAAG1I,SAAS,CAAC,CAAD,CAArB;EAAA,YAA0BhB,CAAC,GAAGgB,SAAS,CAAC,CAAD,CAAvC;EACA,UAAIhB,CAAC,GAAG0J,GAAG,CAACuB,OAAJ,EAAR,EAAuB,OAAO,KAAP;EACvB,UAAIjL,CAAC,GAAG0J,GAAG,CAACqB,OAAJ,EAAR,EAAuB,OAAO,KAAP;EACvB,aAAO,IAAP;EACD,KALD,MAKO,IAAI/J,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMikB,EAAE,GAAGlkB,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyB2I,EAAE,GAAG3I,SAAS,CAAC,CAAD,CAAvC;EAAA,YAA4ChB,CAAC,GAAGgB,SAAS,CAAC,CAAD,CAAzD;EACA,UAAIkkB,EAAE,CAACjhB,IAAH,KAAYjE,CAAZ,IAAiB2J,EAAE,CAAC1F,IAAH,KAAYjE,CAAjC,EAAoC,OAAO,KAAP;EACpC,UAAIklB,EAAE,CAACjhB,IAAH,KAAYjE,CAAZ,IAAiB2J,EAAE,CAAC1F,IAAH,KAAYjE,CAAjC,EAAoC,OAAO,KAAP;EACpC,aAAO,IAAP;EACD;EACF;;EACD,SAAOkL,YAAP,CAAoBga,EAApB,EAAwBvb,EAAxB,EAA4BnH,CAA5B,EAA+B;EAC7B,UAAMud,EAAE,GAAGmF,EAAE,CAAC5hB,IAAH,EAAX;EACA,UAAMpG,EAAE,GAAGyM,EAAE,CAACrG,IAAH,EAAX;EACA,QAAIyc,EAAE,KAAK7iB,EAAX,EAAe,OAAO6iB,EAAP;EACf,UAAM8lC,KAAK,GAAG3oD,EAAE,GAAG6iB,EAAnB;EACA,UAAM+lC,KAAK,GAAGn8C,EAAE,CAAC1F,IAAH,KAAYihB,EAAE,CAACjhB,IAAH,EAA1B;EACA,UAAMnB,CAAC,GAAGgjD,KAAK,GAAGD,KAAlB;EACA,UAAM9lD,CAAC,GAAGggB,EAAE,GAAG,CAACvd,CAAC,GAAG0iB,EAAE,CAACjhB,IAAH,EAAL,IAAkBnB,CAAjC;EACA,WAAO/C,CAAP;EACD;;EACDgmD,EAAAA,gBAAgB,CAACC,SAAD,EAAY;EAC1B,QAAIA,SAAS,CAACpgD,IAAV,OAAqB,CAAzB,EAA4B,OAAO,IAAP;EAC5BzE,IAAAA,MAAM,CAACE,MAAP,CAAc,MAAM2kD,SAAS,CAACpgD,IAAV,KAAmB,CAAvC,EAA0C,qEAA1C;EACAogD,IAAAA,SAAS,CAACl/C,IAAV,CAAe,IAAIm/C,gBAAJ,EAAf;;EACA,SAAK,IAAI7nD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG4nD,SAAS,CAACpgD,IAAV,EAApB,EAAsCxH,CAAC,IAAI,CAA3C,EAA8C;EAC5C,YAAMlB,EAAE,GAAG8oD,SAAS,CAAC//C,GAAV,CAAc7H,CAAd,CAAX;EACA,YAAMjB,EAAE,GAAG6oD,SAAS,CAAC//C,GAAV,CAAc7H,CAAC,GAAG,CAAlB,CAAX;EACA,YAAMm3C,KAAK,GAAGp4C,EAAE,GAAGD,EAAnB;;EACA,UAAIq4C,KAAK,GAAG,KAAKgQ,qBAAjB,EAAwC;EACtC,aAAKA,qBAAL,GAA6BhQ,KAA7B;EACA,cAAM2Q,cAAc,GAAGtB,iBAAiB,CAACK,GAAlB,CAAsB/nD,EAAtB,EAA0BC,EAA1B,CAAvB;EACA,aAAK0nD,cAAL,GAAsB,IAAI/iD,UAAJ,CAAeokD,cAAf,EAA+B,KAAKZ,eAApC,CAAtB;EACD;EACF;EACF;;EACDP,EAAAA,OAAO,GAAG;EACR,QAAI,KAAKM,QAAL,CAAc3/C,OAAd,EAAJ,EAA6B,OAAO,IAAP;EAC7B,SAAKm/C,cAAL,GAAsB,IAAI/iD,UAAJ,CAAe,KAAKujD,QAAL,CAAc39C,aAAd,EAAf,CAAtB;EACA,UAAMs+C,SAAS,GAAG,IAAI5/C,SAAJ,EAAlB;EACA,SAAK+/C,QAAL,CAAc,KAAKd,QAAL,CAAct+B,eAAd,EAAd,EAA+Ci/B,SAA/C;;EACA,SAAK,IAAI5nD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKinD,QAAL,CAAch/B,kBAAd,EAApB,EAAwDjoB,CAAC,EAAzD,EACE,KAAK+nD,QAAL,CAAc,KAAKd,QAAL,CAAcr+B,gBAAd,CAA+B5oB,CAA/B,CAAd,EAAiD4nD,SAAjD;;EAEF,SAAKD,gBAAL,CAAsBC,SAAtB;EACD;;EACDG,EAAAA,QAAQ,CAACjvC,IAAD,EAAO8uC,SAAP,EAAkB;EACxB,QAAI,CAACZ,oBAAoB,CAACQ,wBAArB,CAA8C1uC,IAAI,CAACiG,mBAAL,EAA9C,EAA0E,KAAKmoC,eAA/E,CAAL,EAAsG,OAAO,IAAP;EACtG,UAAMt8C,GAAG,GAAGkO,IAAI,CAACgN,qBAAL,EAAZ;;EACA,SAAK,IAAI9lB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG4K,GAAG,CAACpD,IAAJ,EAApB,EAAgCxH,CAAC,EAAjC,EAAqC;EACnC,YAAMgoD,MAAM,GAAGp9C,GAAG,CAACtB,aAAJ,CAAkBtJ,CAAC,GAAG,CAAtB,CAAf;EACA,YAAMimB,EAAE,GAAGrb,GAAG,CAACtB,aAAJ,CAAkBtJ,CAAlB,CAAX;EACA,WAAKioD,eAAL,CAAqBD,MAArB,EAA6B/hC,EAA7B,EAAiC,KAAKihC,eAAtC,EAAuDU,SAAvD;EACD;EACF;;EACDt7C,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAK66C,qBAAZ;EACD;;EACDP,EAAAA,gBAAgB,GAAG;EACjB,WAAO,KAAKH,cAAZ;EACD;;EACDwB,EAAAA,eAAe,CAACnhC,EAAD,EAAKvb,EAAL,EAASg8C,KAAT,EAAgBK,SAAhB,EAA2B;EACxC,QAAI,CAACZ,oBAAoB,CAACQ,wBAArB,CAA8C1gC,EAA9C,EAAkDvb,EAAlD,EAAsDg8C,KAAtD,CAAL,EAAmE,OAAO,IAAP;EACnE,QAAI,CAACP,oBAAoB,CAACM,qBAArB,CAA2CxgC,EAA3C,EAA+Cvb,EAA/C,EAAmDg8C,KAAnD,CAAL,EAAgE,OAAO,IAAP;EAChE,UAAM9vC,IAAI,GAAGuvC,oBAAoB,CAACl6C,YAArB,CAAkCga,EAAlC,EAAsCvb,EAAtC,EAA0Cg8C,KAA1C,CAAb;EACAK,IAAAA,SAAS,CAACxgD,GAAV,CAAcqQ,IAAd;EACD;;EAzFwB;;EA2F3B,MAAMowC,gBAAN,CAAuB;EACrBvhD,EAAAA,OAAO,CAACmV,EAAD,EAAKC,EAAL,EAAS;EACd,WAAOD,EAAE,GAAGC,EAAL,GAAU,CAAC,CAAX,GAAeD,EAAE,GAAGC,EAAL,GAAU,CAAC,CAAX,GAAe,CAArC;EACD;;EACD,MAAIzV,WAAJ,GAAkB;EAChB,WAAO,CAAC3D,UAAD,CAAP;EACD;;EANoB;;EAQvB0kD,oBAAoB,CAACa,gBAArB,GAAwCA,gBAAxC;;EACA,MAAMT,uBAAN,CAA8B;EAC5B/nD,EAAAA,WAAW,GAAG;EACZ+nD,IAAAA,uBAAuB,CAAC1kD,YAAxB,CAAqCC,KAArC,CAA2C,IAA3C,EAAiDC,SAAjD;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKwlD,KAAL,GAAa,IAAb;EACA,SAAKC,QAAL,GAAgB,IAAhB;EACA,SAAKC,IAAL,GAAYjoD,MAAM,CAACO,SAAnB;EACA,SAAK2nD,IAAL,GAAY,CAACloD,MAAM,CAACO,SAApB;EACA,UAAMuoB,IAAI,GAAGrmB,SAAS,CAAC,CAAD,CAAtB;EACA,SAAKslD,KAAL,GAAaj/B,IAAb;EACA,SAAKm/B,IAAL,GAAYn/B,IAAI,CAAClK,mBAAL,GAA2BpS,OAA3B,EAAZ;EACA,SAAK07C,IAAL,GAAYp/B,IAAI,CAAClK,mBAAL,GAA2BlS,OAA3B,EAAZ;EACA,SAAKs7C,QAAL,GAAgB3B,iBAAiB,CAACK,GAAlB,CAAsB,KAAKwB,IAA3B,EAAiC,KAAKD,IAAtC,CAAhB;EACD;;EACD,SAAOf,YAAP,CAAoBp+B,IAApB,EAA0B;EACxB,UAAMq/B,MAAM,GAAG,IAAIlB,uBAAJ,CAA4Bn+B,IAA5B,CAAf;EACA,WAAOq/B,MAAM,CAACjB,YAAP,EAAP;EACD;;EACDkB,EAAAA,cAAc,CAAC3mD,CAAD,EAAI;EAChB,QAAIA,CAAC,IAAI,KAAKumD,QAAd,EAAwB;EACtB,UAAIvmD,CAAC,GAAG,KAAKymD,IAAb,EAAmB,KAAKA,IAAL,GAAYzmD,CAAZ;EACpB,KAFD,MAEO,IAAIA,CAAC,GAAG,KAAKumD,QAAb,EAAuB;EAC5B,UAAIvmD,CAAC,GAAG,KAAKwmD,IAAb,EACE,KAAKA,IAAL,GAAYxmD,CAAZ;EAEH;EACF;;EACDylD,EAAAA,YAAY,GAAG;EACb,SAAKV,OAAL,CAAa,KAAKuB,KAAL,CAAWv/B,eAAX,EAAb;;EACA,SAAK,IAAI3oB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKkoD,KAAL,CAAWjgC,kBAAX,EAApB,EAAqDjoB,CAAC,EAAtD,EACE,KAAK2mD,OAAL,CAAa,KAAKuB,KAAL,CAAWt/B,gBAAX,CAA4B5oB,CAA5B,CAAb;;EAEF,UAAMwoD,SAAS,GAAGhC,iBAAiB,CAACK,GAAlB,CAAsB,KAAKuB,IAA3B,EAAiC,KAAKC,IAAtC,CAAlB;EACA,WAAOG,SAAP;EACD;;EACD7B,EAAAA,OAAO,CAAC9pC,IAAD,EAAO;EACZ,UAAMjS,GAAG,GAAGiS,IAAI,CAACiJ,qBAAL,EAAZ;;EACA,SAAK,IAAI9lB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG4K,GAAG,CAACpD,IAAJ,EAApB,EAAgCxH,CAAC,EAAjC,EAAqC;EACnC,YAAM4B,CAAC,GAAGgJ,GAAG,CAAC/E,IAAJ,CAAS7F,CAAT,CAAV;EACA,WAAKuoD,cAAL,CAAoB3mD,CAApB;EACD;EACF;;EA1C2B;;EA4C9B4kD,iBAAiB,CAACQ,oBAAlB,GAAyCA,oBAAzC;EACAR,iBAAiB,CAACY,uBAAlB,GAA4CA,uBAA5C;;EC3Le,MAAMqB,iBAAN,CAAwB;EACrCppD,EAAAA,WAAW,GAAG;EACZopD,IAAAA,iBAAiB,CAAC/lD,YAAlB,CAA+BC,KAA/B,CAAqC,IAArC,EAA2CC,SAA3C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKgmD,SAAL,GAAiB,IAAjB;EACA,SAAKC,YAAL,GAAoBxoD,MAAM,CAACO,SAA3B;EACA,SAAK+lD,cAAL,GAAsB,IAAtB;EACA,UAAMtoC,CAAC,GAAGvb,SAAS,CAAC,CAAD,CAAnB;;EACA,QAAIub,CAAC,CAAC7W,OAAF,EAAJ,EAAiB;EACf,WAAKohD,SAAL,GAAiB,IAAjB;EACD,KAFD,MAEO;EACL,WAAKA,SAAL,GAAiB1G,QAAQ,CAACW,WAAT,CAAqBxkC,CAArB,CAAjB;EACAA,MAAAA,CAAC,CAACsB,iBAAF,GAAsBmR,WAAtB,CAAkC,KAAK83B,SAAvC;EACD;;EACD,SAAKE,WAAL,CAAiBzqC,CAAjB;EACA,QAAI,KAAKsoC,cAAL,KAAwB,IAA5B,EAAkC,KAAKoC,YAAL,CAAkB1qC,CAAlB;EACnC;;EACD,SAAOyoC,gBAAP,CAAwBxpC,IAAxB,EAA8B;EAC5B,UAAM0f,KAAK,GAAG,IAAI2rB,iBAAJ,CAAsBrrC,IAAtB,CAAd;EACA,WAAO0f,KAAK,CAAC8pB,gBAAN,EAAP;EACD;;EACDiC,EAAAA,YAAY,GAAG;EACb,QAAIjmD,SAAS,CAAC,CAAD,CAAT,YAAwBya,QAA5B,EAAsC;EACpC,YAAMD,IAAI,GAAGxa,SAAS,CAAC,CAAD,CAAtB;;EACA,UAAIwa,IAAI,YAAY4H,UAApB,EAAgC;EAC9B,aAAK6jC,YAAL,CAAkBzrC,IAAI,CAACgI,cAAL,EAAlB;EACD,OAFD,MAEO,IAAIhI,IAAI,YAAYyM,kBAApB,EAAwC;EAC7C,cAAMQ,EAAE,GAAGjN,IAAX;;EACA,aAAK,IAAIpd,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqqB,EAAE,CAAC/L,gBAAH,EAApB,EAA2Cte,CAAC,EAA5C,EACE,KAAK6oD,YAAL,CAAkBx+B,EAAE,CAAC1M,YAAH,CAAgB3d,CAAhB,CAAlB;EAEH;EACF,KAVD,MAUO,IAAI4C,SAAS,CAAC,CAAD,CAAT,YAAwBkH,KAA5B,EAAmC;EACxC,YAAMD,GAAG,GAAGjH,SAAS,CAAC,CAAD,CAArB;EACA,WAAKwE,GAAL,CAASyC,GAAG,CAAC,CAAD,CAAZ;EACA,WAAKzC,GAAL,CAASyC,GAAG,CAACA,GAAG,CAAChH,MAAJ,GAAa,CAAd,CAAZ;EACD;EACF;;EACD+jD,EAAAA,gBAAgB,GAAG;EACjB,WAAO,KAAKH,cAAZ;EACD;;EACDmC,EAAAA,WAAW,GAAG;EACZ,QAAIhmD,SAAS,CAAC,CAAD,CAAT,YAAwBya,QAA5B,EAAsC;EACpC,YAAMD,IAAI,GAAGxa,SAAS,CAAC,CAAD,CAAtB;;EACA,UAAIwa,IAAI,YAAY4H,UAApB,EAAgC;EAC9B,aAAK4jC,WAAL,CAAiBxrC,IAAI,CAACgI,cAAL,EAAjB;EACD,OAFD,MAEO,IAAIhI,IAAI,YAAYyM,kBAApB,EAAwC;EAC7C,cAAMQ,EAAE,GAAGjN,IAAX;;EACA,aAAK,IAAIpd,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqqB,EAAE,CAAC/L,gBAAH,EAApB,EAA2Cte,CAAC,EAA5C,EACE,KAAK4oD,WAAL,CAAiBv+B,EAAE,CAAC1M,YAAH,CAAgB3d,CAAhB,CAAjB;EAEH;EACF,KAVD,MAUO,IAAI4C,SAAS,CAAC,CAAD,CAAT,YAAwBkH,KAA5B,EAAmC;EACxC,YAAMD,GAAG,GAAGjH,SAAS,CAAC,CAAD,CAArB;;EACA,WAAK,IAAI5C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6J,GAAG,CAAChH,MAAJ,GAAa,CAAjC,EAAoC7C,CAAC,EAArC,EACE,KAAKoH,GAAL,CAASyC,GAAG,CAAC7J,CAAD,CAAZ;EAEH;EACF;;EACDoH,EAAAA,GAAG,CAACof,KAAD,EAAQ;EACT,UAAMzJ,IAAI,GAAGyJ,KAAK,CAACzgB,QAAN,CAAe,KAAK2iD,SAApB,CAAb;;EACA,QAAI3rC,IAAI,GAAG,KAAK4rC,YAAhB,EAA8B;EAC5B,WAAKlC,cAAL,GAAsB,IAAI/iD,UAAJ,CAAe8iB,KAAf,CAAtB;EACA,WAAKmiC,YAAL,GAAoB5rC,IAApB;EACD;EACF;;EAlEoC;;ECAxB,MAAM+rC,kBAAN,CAAyB;EACtCzpD,EAAAA,WAAW,GAAG;EACZypD,IAAAA,kBAAkB,CAACpmD,YAAnB,CAAgCC,KAAhC,CAAsC,IAAtC,EAA4CC,SAA5C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKgmD,SAAL,GAAiB,IAAjB;EACA,SAAKC,YAAL,GAAoBxoD,MAAM,CAACO,SAA3B;EACA,SAAK+lD,cAAL,GAAsB,IAAtB;EACA,UAAMtoC,CAAC,GAAGvb,SAAS,CAAC,CAAD,CAAnB;EACA,SAAK8lD,SAAL,GAAiB1G,QAAQ,CAACW,WAAT,CAAqBxkC,CAArB,CAAjB;EACA,SAAK/W,GAAL,CAAS+W,CAAT;EACD;;EACD,SAAOyoC,gBAAP,CAAwBxpC,IAAxB,EAA8B;EAC5B,UAAM0f,KAAK,GAAG,IAAIgsB,kBAAJ,CAAuB1rC,IAAvB,CAAd;EACA,WAAO0f,KAAK,CAAC8pB,gBAAN,EAAP;EACD;;EACDA,EAAAA,gBAAgB,GAAG;EACjB,WAAO,KAAKH,cAAZ;EACD;;EACDr/C,EAAAA,GAAG,GAAG;EACJ,QAAIxE,SAAS,CAAC,CAAD,CAAT,YAAwBya,QAA5B,EAAsC;EACpC,YAAMD,IAAI,GAAGxa,SAAS,CAAC,CAAD,CAAtB;;EACA,UAAIwa,IAAI,YAAYiJ,KAApB,EAA2B;EACzB,aAAKjf,GAAL,CAASgW,IAAI,CAAC9T,aAAL,EAAT;EACD,OAFD,MAEO,IAAI8T,IAAI,YAAYyM,kBAApB,EAAwC;EAC7C,cAAMQ,EAAE,GAAGjN,IAAX;;EACA,aAAK,IAAIpd,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqqB,EAAE,CAAC/L,gBAAH,EAApB,EAA2Cte,CAAC,EAA5C,EACE,KAAKoH,GAAL,CAASijB,EAAE,CAAC1M,YAAH,CAAgB3d,CAAhB,CAAT;EAEH;EACF,KAVD,MAUO,IAAI4C,SAAS,CAAC,CAAD,CAAT,YAAwBc,UAA5B,EAAwC;EAC7C,YAAM8iB,KAAK,GAAG5jB,SAAS,CAAC,CAAD,CAAvB;EACA,YAAMma,IAAI,GAAGyJ,KAAK,CAACzgB,QAAN,CAAe,KAAK2iD,SAApB,CAAb;;EACA,UAAI3rC,IAAI,GAAG,KAAK4rC,YAAhB,EAA8B;EAC5B,aAAKlC,cAAL,GAAsB,IAAI/iD,UAAJ,CAAe8iB,KAAf,CAAtB;EACA,aAAKmiC,YAAL,GAAoB5rC,IAApB;EACD;EACF;EACF;;EAtCqC;;ECNzB,MAAMgsC,gBAAN,CAAuB;EACpCC,EAAAA,YAAY,CAACC,aAAD,EAAgB;;EADQ;;EAGtC,MAAMC,oBAAN,CAA2B;EACzBF,EAAAA,YAAY,CAACC,aAAD,EAAgB;EAC1B,WAAOA,aAAa,GAAG,CAAhB,KAAsB,CAA7B;EACD;;EACD,MAAIhjD,WAAJ,GAAkB;EAChB,WAAO,CAAC8iD,gBAAD,CAAP;EACD;;EANwB;;EAQ3B,MAAMI,wBAAN,CAA+B;EAC7BH,EAAAA,YAAY,CAACC,aAAD,EAAgB;EAC1B,WAAOA,aAAa,GAAG,CAAvB;EACD;;EACD,MAAIhjD,WAAJ,GAAkB;EAChB,WAAO,CAAC8iD,gBAAD,CAAP;EACD;;EAN4B;;EAQ/B,MAAMK,mCAAN,CAA0C;EACxCJ,EAAAA,YAAY,CAACC,aAAD,EAAgB;EAC1B,WAAOA,aAAa,GAAG,CAAvB;EACD;;EACD,MAAIhjD,WAAJ,GAAkB;EAChB,WAAO,CAAC8iD,gBAAD,CAAP;EACD;;EANuC;;EAQ1C,MAAMM,kCAAN,CAAyC;EACvCL,EAAAA,YAAY,CAACC,aAAD,EAAgB;EAC1B,WAAOA,aAAa,KAAK,CAAzB;EACD;;EACD,MAAIhjD,WAAJ,GAAkB;EAChB,WAAO,CAAC8iD,gBAAD,CAAP;EACD;;EANsC;;EAQzCA,gBAAgB,CAACG,oBAAjB,GAAwCA,oBAAxC;EACAH,gBAAgB,CAACI,wBAAjB,GAA4CA,wBAA5C;EACAJ,gBAAgB,CAACK,mCAAjB,GAAuDA,mCAAvD;EACAL,gBAAgB,CAACM,kCAAjB,GAAsDA,kCAAtD;EACAN,gBAAgB,CAACO,kBAAjB,GAAsC,IAAIJ,oBAAJ,EAAtC;EACAH,gBAAgB,CAACQ,sBAAjB,GAA0C,IAAIJ,wBAAJ,EAA1C;EACAJ,gBAAgB,CAACS,kCAAjB,GAAsD,IAAIJ,mCAAJ,EAAtD;EACAL,gBAAgB,CAACU,iCAAjB,GAAqD,IAAIJ,kCAAJ,EAArD;EACAN,gBAAgB,CAACW,qBAAjB,GAAyCX,gBAAgB,CAACO,kBAA1D;;EChCe,MAAMK,YAAN,CAAmB;EAChCtqD,EAAAA,WAAW,GAAG;EACZsqD,IAAAA,YAAY,CAACjnD,YAAb,CAA0BC,KAA1B,CAAgC,IAAhC,EAAsCC,SAAtC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKknD,aAAL,GAAqBb,gBAAgB,CAACW,qBAAtC;EACA,SAAKG,KAAL,GAAa,IAAb;EACA,SAAKC,cAAL,GAAsB,IAAtB;;EACA,QAAIlnD,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B,CAA5B,MAAoC,IAAID,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC9D,YAAMknD,YAAY,GAAGnnD,SAAS,CAAC,CAAD,CAA9B;EACA,UAAImnD,YAAY,KAAK,IAArB,EAA2B,MAAM,IAAIpqD,wBAAJ,CAA6B,uBAA7B,CAAN;EAC3B,WAAKiqD,aAAL,GAAqBG,YAArB;EACD;EACF;;EACDC,EAAAA,mBAAmB,CAAC3+C,CAAD,EAAIyN,IAAJ,EAAU;EAC3B,QAAI,CAACA,IAAI,CAACiG,mBAAL,GAA2BpT,UAA3B,CAAsCN,CAAtC,CAAL,EAA+C,OAAOs2B,QAAQ,CAACG,QAAhB;EAC/C,WAAOge,aAAa,CAACG,YAAd,CAA2B50C,CAA3B,EAA8ByN,IAAI,CAACsM,cAAL,EAA9B,CAAP;EACD;;EACDzZ,EAAAA,UAAU,CAACN,CAAD,EAAI+R,IAAJ,EAAU;EAClB,WAAO,KAAKo/B,MAAL,CAAYnxC,CAAZ,EAAe+R,IAAf,MAAyBukB,QAAQ,CAACG,QAAzC;EACD;;EACDmoB,EAAAA,kBAAkB,CAACjJ,GAAD,EAAM;EACtB,QAAIA,GAAG,KAAKrf,QAAQ,CAACK,QAArB,EAA+B,KAAK6nB,KAAL,GAAa,IAAb;EAC/B,QAAI7I,GAAG,KAAKrf,QAAQ,CAACI,QAArB,EAA+B,KAAK+nB,cAAL;EAChC;;EACDI,EAAAA,eAAe,CAAC7+C,CAAD,EAAI+R,IAAJ,EAAU;EACvB,QAAIA,IAAI,YAAYiJ,KAApB,EACE,KAAK4jC,kBAAL,CAAwB,KAAKE,aAAL,CAAmB9+C,CAAnB,EAAsB+R,IAAtB,CAAxB;;EAEF,QAAIA,IAAI,YAAY4H,UAApB,EAAgC;EAC9B,WAAKilC,kBAAL,CAAwB,KAAKG,kBAAL,CAAwB/+C,CAAxB,EAA2B+R,IAA3B,CAAxB;EACD,KAFD,MAEO,IAAIA,IAAI,YAAYkK,OAApB,EAA6B;EAClC,WAAK2iC,kBAAL,CAAwB,KAAKI,eAAL,CAAqBh/C,CAArB,EAAwB+R,IAAxB,CAAxB;EACD,KAFM,MAEA,IAAIA,IAAI,YAAY+T,eAApB,EAAqC;EAC1C,YAAMm5B,EAAE,GAAGltC,IAAX;;EACA,WAAK,IAAIpd,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsqD,EAAE,CAAChsC,gBAAH,EAApB,EAA2Cte,CAAC,EAA5C,EAAgD;EAC9C,cAAM40C,CAAC,GAAG0V,EAAE,CAAC3sC,YAAH,CAAgB3d,CAAhB,CAAV;EACA,aAAKiqD,kBAAL,CAAwB,KAAKG,kBAAL,CAAwB/+C,CAAxB,EAA2BupC,CAA3B,CAAxB;EACD;EACF,KANM,MAMA,IAAIx3B,IAAI,YAAY+Q,YAApB,EAAkC;EACvC,YAAMo8B,KAAK,GAAGntC,IAAd;;EACA,WAAK,IAAIpd,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGuqD,KAAK,CAACjsC,gBAAN,EAApB,EAA8Cte,CAAC,EAA/C,EAAmD;EACjD,cAAMipB,IAAI,GAAGshC,KAAK,CAAC5sC,YAAN,CAAmB3d,CAAnB,CAAb;EACA,aAAKiqD,kBAAL,CAAwB,KAAKI,eAAL,CAAqBh/C,CAArB,EAAwB4d,IAAxB,CAAxB;EACD;EACF,KANM,MAMA,IAAI7L,IAAI,YAAYyM,kBAApB,EAAwC;EAC7C,YAAMk3B,KAAK,GAAG,IAAIZ,0BAAJ,CAA+B/iC,IAA/B,CAAd;;EACA,aAAO2jC,KAAK,CAAC53C,OAAN,EAAP,EAAwB;EACtB,cAAM+jC,EAAE,GAAG6T,KAAK,CAAC73C,IAAN,EAAX;EACA,YAAIgkC,EAAE,KAAK9vB,IAAX,EAAiB,KAAK8sC,eAAL,CAAqB7+C,CAArB,EAAwB6hC,EAAxB;EAClB;EACF;EACF;;EACDid,EAAAA,aAAa,CAAC9+C,CAAD,EAAI4a,EAAJ,EAAQ;EACnB,UAAMukC,OAAO,GAAGvkC,EAAE,CAAC3c,aAAH,EAAhB;EACA,QAAIkhD,OAAO,CAACjmD,QAAR,CAAiB8G,CAAjB,CAAJ,EAAyB,OAAOs2B,QAAQ,CAACK,QAAhB;EACzB,WAAOL,QAAQ,CAACG,QAAhB;EACD;;EACDsoB,EAAAA,kBAAkB,CAAC/+C,CAAD,EAAIupC,CAAJ,EAAO;EACvB,QAAI,CAACA,CAAC,CAAC71B,mBAAF,GAAwBpT,UAAxB,CAAmCN,CAAnC,CAAL,EAA4C,OAAOs2B,QAAQ,CAACG,QAAhB;EAC5C,UAAMl3B,GAAG,GAAGgqC,CAAC,CAAC9uB,qBAAF,EAAZ;EACA,QAAI,CAAC8uB,CAAC,CAACjxB,QAAF,EAAL,EACE,IAAItY,CAAC,CAAClI,MAAF,CAASyH,GAAG,CAACtB,aAAJ,CAAkB,CAAlB,CAAT,KAAkC+B,CAAC,CAAClI,MAAF,CAASyH,GAAG,CAACtB,aAAJ,CAAkBsB,GAAG,CAACpD,IAAJ,KAAa,CAA/B,CAAT,CAAtC,EACE,OAAOm6B,QAAQ,CAACI,QAAhB;EAGJ,QAAI+d,aAAa,CAACC,QAAd,CAAuB10C,CAAvB,EAA0BT,GAA1B,CAAJ,EACE,OAAO+2B,QAAQ,CAACK,QAAhB;EAEF,WAAOL,QAAQ,CAACG,QAAhB;EACD;;EACDuoB,EAAAA,eAAe,CAACh/C,CAAD,EAAI4d,IAAJ,EAAU;EACvB,QAAIA,IAAI,CAAC3hB,OAAL,EAAJ,EAAoB,OAAOq6B,QAAQ,CAACG,QAAhB;EACpB,UAAMra,KAAK,GAAGwB,IAAI,CAACN,eAAL,EAAd;EACA,UAAMg4B,QAAQ,GAAG,KAAKqJ,mBAAL,CAAyB3+C,CAAzB,EAA4Boc,KAA5B,CAAjB;EACA,QAAIk5B,QAAQ,KAAKhf,QAAQ,CAACG,QAA1B,EAAoC,OAAOH,QAAQ,CAACG,QAAhB;EACpC,QAAI6e,QAAQ,KAAKhf,QAAQ,CAACI,QAA1B,EAAoC,OAAOJ,QAAQ,CAACI,QAAhB;;EACpC,SAAK,IAAI/hC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGipB,IAAI,CAAChB,kBAAL,EAApB,EAA+CjoB,CAAC,EAAhD,EAAoD;EAClD,YAAM2xC,IAAI,GAAG1oB,IAAI,CAACL,gBAAL,CAAsB5oB,CAAtB,CAAb;EACA,YAAM4gD,OAAO,GAAG,KAAKoJ,mBAAL,CAAyB3+C,CAAzB,EAA4BsmC,IAA5B,CAAhB;EACA,UAAIiP,OAAO,KAAKjf,QAAQ,CAACK,QAAzB,EAAmC,OAAOL,QAAQ,CAACG,QAAhB;EACnC,UAAI8e,OAAO,KAAKjf,QAAQ,CAACI,QAAzB,EAAmC,OAAOJ,QAAQ,CAACI,QAAhB;EACpC;;EACD,WAAOJ,QAAQ,CAACK,QAAhB;EACD;;EACDwa,EAAAA,MAAM,CAACnxC,CAAD,EAAI+R,IAAJ,EAAU;EACd,QAAIA,IAAI,CAAC9V,OAAL,EAAJ,EAAoB,OAAOq6B,QAAQ,CAACG,QAAhB;EACpB,QAAI1kB,IAAI,YAAY4H,UAApB,EACE,OAAO,KAAKolC,kBAAL,CAAwB/+C,CAAxB,EAA2B+R,IAA3B,CAAP,CADF,KAEK,IAAIA,IAAI,YAAYkK,OAApB,EACH,OAAO,KAAK+iC,eAAL,CAAqBh/C,CAArB,EAAwB+R,IAAxB,CAAP;EAEF,SAAKysC,KAAL,GAAa,KAAb;EACA,SAAKC,cAAL,GAAsB,CAAtB;EACA,SAAKI,eAAL,CAAqB7+C,CAArB,EAAwB+R,IAAxB;EACA,QAAI,KAAKwsC,aAAL,CAAmBZ,YAAnB,CAAgC,KAAKc,cAArC,CAAJ,EAA0D,OAAOnoB,QAAQ,CAACI,QAAhB;EAC1D,QAAI,KAAK+nB,cAAL,GAAsB,CAAtB,IAA2B,KAAKD,KAApC,EAA2C,OAAOloB,QAAQ,CAACK,QAAhB;EAC3C,WAAOL,QAAQ,CAACG,QAAhB;EACD;;EAlG+B;;ECLnB,MAAM2oB,qBAAN,CAA4B;EACzCprD,EAAAA,WAAW,GAAG;EACZorD,IAAAA,qBAAqB,CAAC/nD,YAAtB,CAAmCC,KAAnC,CAAyC,IAAzC,EAA+CC,SAA/C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKgoD,MAAL,GAAc,IAAd;EACA,SAAKC,YAAL,GAAoB,IAApB;EACA,SAAKC,OAAL,GAAe,IAAf;EACA,SAAKC,OAAL,GAAe,GAAf;EACA,UAAMztC,IAAI,GAAGxa,SAAS,CAAC,CAAD,CAAtB;EACA,SAAK8nD,MAAL,GAActtC,IAAd;EACD;;EACD,SAAO0tC,cAAP,CAAsBjhD,GAAtB,EAA2B;EACzB,UAAMkhD,MAAM,GAAGlhD,GAAG,CAAC,CAAD,CAAH,CAAO9D,QAAP,CAAgB8D,GAAG,CAAC,CAAD,CAAnB,CAAf;EACA,UAAMmhD,MAAM,GAAGnhD,GAAG,CAAC,CAAD,CAAH,CAAO9D,QAAP,CAAgB8D,GAAG,CAAC,CAAD,CAAnB,CAAf;EACA,UAAMohD,MAAM,GAAGphD,GAAG,CAAC,CAAD,CAAH,CAAO9D,QAAP,CAAgB8D,GAAG,CAAC,CAAD,CAAnB,CAAf;EACA,QAAIkhD,MAAM,IAAIC,MAAV,IAAoBD,MAAM,IAAIE,MAAlC,EACE,OAAO,CAACphD,GAAG,CAAC,CAAD,CAAJ,EAASA,GAAG,CAAC,CAAD,CAAZ,CAAP;EAEF,QAAImhD,MAAM,IAAID,MAAV,IAAoBC,MAAM,IAAIC,MAAlC,EACE,OAAO,CAACphD,GAAG,CAAC,CAAD,CAAJ,EAASA,GAAG,CAAC,CAAD,CAAZ,CAAP;EAEF,WAAO,CAACA,GAAG,CAAC,CAAD,CAAJ,EAASA,GAAG,CAAC,CAAD,CAAZ,CAAP;EACD;;EACD,SAAOqhD,qBAAP,CAA6BrhD,GAA7B,EAAkC2a,CAAlC,EAAqC;EACnC,QAAI2mC,MAAM,GAAGhrD,MAAM,CAACO,SAApB;EACA,QAAI0qD,QAAQ,GAAG,IAAf;;EACA,SAAK,IAAIprD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6J,GAAG,CAAChH,MAAxB,EAAgC7C,CAAC,EAAjC,EAAqC;EACnC,YAAMqL,CAAC,GAAGxB,GAAG,CAAC7J,CAAD,CAAb;EACA,UAAIqL,CAAC,KAAKmZ,CAAV,EAAa;EACb,YAAM/e,EAAE,GAAG4F,CAAC,CAAC1J,CAAF,GAAM6iB,CAAC,CAAC7iB,CAAnB;EACA,UAAI+D,EAAE,GAAG2F,CAAC,CAACzJ,CAAF,GAAM4iB,CAAC,CAAC5iB,CAAjB;EACA,UAAI8D,EAAE,GAAG,CAAT,EAAYA,EAAE,GAAG,CAACA,EAAN;EACZ,YAAMmD,GAAG,GAAG5J,IAAI,CAAC2G,IAAL,CAAUH,EAAE,GAAGA,EAAL,GAAUC,EAAE,GAAGA,EAAzB,CAAZ;EACA,YAAMsgC,GAAG,GAAGtgC,EAAE,GAAGmD,GAAjB;;EACA,UAAIm9B,GAAG,GAAGmlB,MAAV,EAAkB;EAChBA,QAAAA,MAAM,GAAGnlB,GAAT;EACAolB,QAAAA,QAAQ,GAAG//C,CAAX;EACD;EACF;;EACD,WAAO+/C,QAAP;EACD;;EACD,SAAOC,WAAP,CAAmBxhD,GAAnB,EAAwB;EACtB,QAAImC,GAAG,GAAGnC,GAAG,CAAC,CAAD,CAAb;;EACA,SAAK,IAAI7J,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6J,GAAG,CAAChH,MAAxB,EAAgC7C,CAAC,EAAjC,EACE,IAAI6J,GAAG,CAAC7J,CAAD,CAAH,CAAO4B,CAAP,GAAWoK,GAAG,CAACpK,CAAnB,EAAsBoK,GAAG,GAAGnC,GAAG,CAAC7J,CAAD,CAAT;;EAExB,WAAOgM,GAAP;EACD;;EACD,SAAOs/C,4BAAP,CAAoCzhD,GAApC,EAAyC2a,CAAzC,EAA4C+mC,CAA5C,EAA+C;EAC7C,QAAIC,MAAM,GAAGrrD,MAAM,CAACO,SAApB;EACA,QAAI0qD,QAAQ,GAAG,IAAf;;EACA,SAAK,IAAIprD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6J,GAAG,CAAChH,MAAxB,EAAgC7C,CAAC,EAAjC,EAAqC;EACnC,YAAMqL,CAAC,GAAGxB,GAAG,CAAC7J,CAAD,CAAb;EACA,UAAIqL,CAAC,KAAKmZ,CAAV,EAAa;EACb,UAAInZ,CAAC,KAAKkgD,CAAV,EAAa;EACb,YAAMvc,GAAG,GAAG3K,KAAK,CAACa,YAAN,CAAmB1gB,CAAnB,EAAsBnZ,CAAtB,EAAyBkgD,CAAzB,CAAZ;;EACA,UAAIvc,GAAG,GAAGwc,MAAV,EAAkB;EAChBA,QAAAA,MAAM,GAAGxc,GAAT;EACAoc,QAAAA,QAAQ,GAAG//C,CAAX;EACD;EACF;;EACD,WAAO+/C,QAAP;EACD;;EACDK,EAAAA,SAAS,GAAG;EACV,SAAKjd,OAAL;EACA,WAAO,KAAKqc,OAAZ;EACD;;EACDr9C,EAAAA,WAAW,GAAG;EACZ,SAAKghC,OAAL;;EACA,YAAQ,KAAKmc,YAAL,CAAkB9nD,MAA1B;EACA,WAAK,CAAL;EACE,eAAO,KAAK6nD,MAAL,CAAYjtC,UAAZ,GAAyBgI,gBAAzB,EAAP;;EACF,WAAK,CAAL;EACE,eAAO,KAAKilC,MAAL,CAAYjtC,UAAZ,GAAyB0I,WAAzB,CAAqC,KAAKykC,OAA1C,CAAP;EAJF;;EAMA,UAAM9jC,EAAE,GAAG,KAAK6jC,YAAL,CAAkB,CAAlB,CAAX;EACA,UAAMp/C,EAAE,GAAG,KAAKo/C,YAAL,CAAkB,CAAlB,CAAX;EACA,WAAO,KAAKD,MAAL,CAAYjtC,UAAZ,GAAyBgI,gBAAzB,CAA0C,CAACqB,EAAD,EAAKvb,EAAL,CAA1C,CAAP;EACD;;EACDmgD,EAAAA,iBAAiB,GAAG;EAClB,SAAKld,OAAL;EACA,WAAO,KAAKmc,YAAZ;EACD;;EACDgB,EAAAA,mBAAmB,GAAG;EACpB,QAAI,KAAKjB,MAAL,CAAYpjD,OAAZ,EAAJ,EAA2B;EACzB,WAAKqjD,YAAL,GAAoB,IAAI7gD,KAAJ,CAAU,CAAV,EAAaC,IAAb,CAAkB,IAAlB,CAApB;EACA,aAAO,IAAP;EACD;;EACD,QAAI,KAAK2gD,MAAL,CAAYllC,YAAZ,OAA+B,CAAnC,EAAsC;EACpC,YAAM3b,GAAG,GAAG,KAAK6gD,MAAL,CAAYtlC,cAAZ,EAAZ;;EACA,WAAKulC,YAAL,GAAoB,CAAC,IAAIjnD,UAAJ,CAAemG,GAAG,CAAC,CAAD,CAAlB,CAAD,CAApB;EACA,aAAO,IAAP;EACD;;EACD,UAAMkf,UAAU,GAAG,KAAK2hC,MAAL,CAAY3hC,UAAZ,EAAnB;;EACA,UAAM6iC,OAAO,GAAG7iC,UAAU,CAAC3D,cAAX,EAAhB;EACA,QAAIvb,GAAG,GAAG+hD,OAAV;;EACA,QAAIA,OAAO,CAAC,CAAD,CAAP,CAAWrnD,QAAX,CAAoBqnD,OAAO,CAACA,OAAO,CAAC/oD,MAAR,GAAiB,CAAlB,CAA3B,CAAJ,EAAsD;EACpDgH,MAAAA,GAAG,GAAG,IAAIC,KAAJ,CAAU8hD,OAAO,CAAC/oD,MAAR,GAAiB,CAA3B,EAA8BkH,IAA9B,CAAmC,IAAnC,CAAN;EACAkhB,MAAAA,gBAAgB,CAACc,QAAjB,CAA0B6/B,OAA1B,EAAmC,CAAnC,EAAsC/hD,GAAtC,EAA2C,CAA3C,EAA8C+hD,OAAO,CAAC/oD,MAAR,GAAiB,CAA/D;EACD;;EACD,QAAIgH,GAAG,CAAChH,MAAJ,IAAc,CAAlB,EAAqB;EACnB,WAAK8nD,YAAL,GAAoB1/B,gBAAgB,CAACc,QAAjB,CAA0BliB,GAA1B,CAApB;EACA,aAAO,IAAP;EACD;;EACD,QAAI2a,CAAC,GAAGimC,qBAAqB,CAACY,WAAtB,CAAkCxhD,GAAlC,CAAR;EACA,QAAI0hD,CAAC,GAAGd,qBAAqB,CAACS,qBAAtB,CAA4CrhD,GAA5C,EAAiD2a,CAAjD,CAAR;;EACA,SAAK,IAAIxkB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6J,GAAG,CAAChH,MAAxB,EAAgC7C,CAAC,EAAjC,EAAqC;EACnC,YAAM6rD,CAAC,GAAGpB,qBAAqB,CAACa,4BAAtB,CAAmDzhD,GAAnD,EAAwD2a,CAAxD,EAA2D+mC,CAA3D,CAAV;;EACA,UAAIlnB,KAAK,CAACQ,QAAN,CAAergB,CAAf,EAAkBqnC,CAAlB,EAAqBN,CAArB,CAAJ,EAA6B;EAC3B,aAAKZ,YAAL,GAAoB,CAAC,IAAIjnD,UAAJ,CAAe8gB,CAAf,CAAD,EAAoB,IAAI9gB,UAAJ,CAAe6nD,CAAf,CAApB,CAApB;EACA,eAAO,IAAP;EACD;;EACD,UAAIlnB,KAAK,CAACQ,QAAN,CAAegnB,CAAf,EAAkBrnC,CAAlB,EAAqB+mC,CAArB,CAAJ,EAA6B;EAC3B/mC,QAAAA,CAAC,GAAGqnC,CAAJ;EACA;EACD;;EACD,UAAIxnB,KAAK,CAACQ,QAAN,CAAegnB,CAAf,EAAkBN,CAAlB,EAAqB/mC,CAArB,CAAJ,EAA6B;EAC3B+mC,QAAAA,CAAC,GAAGM,CAAJ;EACA;EACD;;EACD,WAAKlB,YAAL,GAAoB,CAAC,IAAIjnD,UAAJ,CAAe8gB,CAAf,CAAD,EAAoB,IAAI9gB,UAAJ,CAAe6nD,CAAf,CAApB,EAAuC,IAAI7nD,UAAJ,CAAemoD,CAAf,CAAvC,CAApB;EACA,aAAO,IAAP;EACD;;EACD9oD,IAAAA,MAAM,CAACC,oBAAP,CAA4B,qDAA5B;EACD;;EACDwrC,EAAAA,OAAO,GAAG;EACR,QAAI,KAAKmc,YAAL,KAAsB,IAA1B,EAAgC,OAAO,IAAP;EAChC,SAAKgB,mBAAL;EACA,SAAKG,aAAL;EACA,QAAI,KAAKlB,OAAL,KAAiB,IAArB,EAA2B,KAAKC,OAAL,GAAe,KAAKD,OAAL,CAAa7kD,QAAb,CAAsB,KAAK4kD,YAAL,CAAkB,CAAlB,CAAtB,CAAf;EAC5B;;EACDoB,EAAAA,SAAS,GAAG;EACV,SAAKvd,OAAL;EACA,QAAI,KAAKoc,OAAL,KAAiB,IAArB,EAA2B,OAAO,KAAKF,MAAL,CAAYjtC,UAAZ,GAAyBoL,aAAzB,EAAP;;EAC3B,UAAMmjC,WAAW,GAAG,KAAKtB,MAAL,CAAYjtC,UAAZ,GAAyB0I,WAAzB,CAAqC,KAAKykC,OAA1C,CAApB;;EACA,QAAI,KAAKC,OAAL,KAAiB,GAArB,EAA0B,OAAOmB,WAAP;EAC1B,WAAOA,WAAW,CAAC/qD,MAAZ,CAAmB,KAAK4pD,OAAxB,CAAP;EACD;;EACDvU,EAAAA,SAAS,GAAG;EACV,SAAK9H,OAAL;EACA,WAAO,KAAKoc,OAAZ;EACD;;EACDqB,EAAAA,kBAAkB,GAAG;EACnB,SAAKzd,OAAL;;EACA,YAAQ,KAAKmc,YAAL,CAAkB9nD,MAA1B;EACA,WAAK,CAAL;EACE,eAAO,KAAK6nD,MAAL,CAAYjtC,UAAZ,GAAyBgI,gBAAzB,EAAP;;EACF,WAAK,CAAL;EACE,eAAO,KAAKilC,MAAL,CAAYjtC,UAAZ,GAAyB0I,WAAzB,CAAqC,KAAKykC,OAA1C,CAAP;;EACF,WAAK,CAAL;EACE,eAAO,KAAKF,MAAL,CAAYjtC,UAAZ,GAAyBgI,gBAAzB,CAA0C,CAAC,KAAKklC,YAAL,CAAkB,CAAlB,CAAD,EAAuB,KAAKA,YAAL,CAAkB,CAAlB,CAAvB,CAA1C,CAAP;;EACF;EACE,cAAMuB,WAAW,GAAGzB,qBAAqB,CAACK,cAAtB,CAAqC,KAAKH,YAA1C,CAApB;EACA,eAAO,KAAKD,MAAL,CAAYjtC,UAAZ,GAAyBgI,gBAAzB,CAA0CymC,WAA1C,CAAP;EATF;EAWD;;EACDJ,EAAAA,aAAa,GAAG;EACd,YAAQ,KAAKnB,YAAL,CAAkB9nD,MAA1B;EACA,WAAK,CAAL;EACE,aAAK+nD,OAAL,GAAe,IAAf;EACA;;EACF,WAAK,CAAL;EACE,aAAKA,OAAL,GAAe,KAAKD,YAAL,CAAkB,CAAlB,CAAf;EACA;;EACF,WAAK,CAAL;EACE,aAAKC,OAAL,GAAe,IAAIlnD,UAAJ,CAAe,CAAC,KAAKinD,YAAL,CAAkB,CAAlB,EAAqBhpD,CAArB,GAAyB,KAAKgpD,YAAL,CAAkB,CAAlB,EAAqBhpD,CAA/C,IAAoD,GAAnE,EAAwE,CAAC,KAAKgpD,YAAL,CAAkB,CAAlB,EAAqB/oD,CAArB,GAAyB,KAAK+oD,YAAL,CAAkB,CAAlB,EAAqB/oD,CAA/C,IAAoD,GAA5H,CAAf;EACA;;EACF,WAAK,CAAL;EACE,aAAKgpD,OAAL,GAAelkB,QAAQ,CAACuB,YAAT,CAAsB,KAAK0iB,YAAL,CAAkB,CAAlB,CAAtB,EAA4C,KAAKA,YAAL,CAAkB,CAAlB,CAA5C,EAAkE,KAAKA,YAAL,CAAkB,CAAlB,CAAlE,CAAf;EACA;EAZF;EAcD;;EA5KwC;;ECD5B,MAAMwB,eAAN,CAAsB;EACnC9sD,EAAAA,WAAW,GAAG;EACZ8sD,IAAAA,eAAe,CAACzpD,YAAhB,CAA6BC,KAA7B,CAAmC,IAAnC,EAAyCC,SAAzC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKgwC,UAAL,GAAkB,IAAlB;EACA,SAAK0Z,SAAL,GAAiB,IAAjB;EACA,SAAKC,cAAL,GAAsB,IAAtB;EACA,SAAKC,WAAL,GAAmB,IAAIruB,WAAJ,EAAnB;EACA,SAAKsuB,WAAL,GAAmB,IAAnB;EACA,SAAKC,WAAL,GAAmB,IAAnB;EACA,SAAKC,SAAL,GAAiB,GAAjB;;EACA,QAAI7pD,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMixC,SAAS,GAAGlxC,SAAS,CAAC,CAAD,CAA3B;EACAupD,MAAAA,eAAe,CAACzpD,YAAhB,CAA6BI,IAA7B,CAAkC,IAAlC,EAAwCgxC,SAAxC,EAAmD,KAAnD;EACD,KAHD,MAGO,IAAIlxC,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMixC,SAAS,GAAGlxC,SAAS,CAAC,CAAD,CAA3B;EAAA,YAAgC8pD,QAAQ,GAAG9pD,SAAS,CAAC,CAAD,CAApD;EACA,WAAK8vC,UAAL,GAAkBoB,SAAlB;EACA,WAAKsY,SAAL,GAAiBM,QAAjB;EACD;EACF;;EACD,SAAOC,SAAP,CAAiB9iD,GAAjB,EAAsBvB,KAAtB,EAA6B;EAC3BA,IAAAA,KAAK;EACL,QAAIA,KAAK,IAAIuB,GAAG,CAAChH,MAAjB,EAAyByF,KAAK,GAAG,CAAR;EACzB,WAAOA,KAAP;EACD;;EACD,SAAOskD,QAAP,CAAgBrmD,CAAhB,EAAmBC,CAAnB,EAAsB6E,CAAtB,EAAyB;EACvB,WAAO9E,CAAC,GAAG8E,CAAC,CAACzJ,CAAN,GAAU4E,CAAC,GAAG6E,CAAC,CAAC1J,CAAvB;EACD;;EACD,SAAOkrD,kBAAP,CAA0BzvC,IAA1B,EAAgC;EAC9B,WAAO,IAAI+uC,eAAJ,CAAoB/uC,IAApB,EAA0B5P,WAA1B,EAAP;EACD;;EACD,SAAOs/C,mBAAP,CAA2B1vC,IAA3B,EAAiC;EAC/B,WAAO,IAAI+uC,eAAJ,CAAoB/uC,IAApB,EAA0B0vC,mBAA1B,EAAP;EACD;;EACD,SAAOC,qBAAP,CAA6BxmD,CAA7B,EAAgCC,CAAhC,EAAmC5C,CAAnC,EAAsC;EACpC,QAAIkjB,EAAE,GAAG,IAAT;EACA,QAAIvb,EAAE,GAAG,IAAT;;EACA,QAAItM,IAAI,CAACC,GAAL,CAASsH,CAAT,IAAcvH,IAAI,CAACC,GAAL,CAASqH,CAAT,CAAlB,EAA+B;EAC7BugB,MAAAA,EAAE,GAAG,IAAIpjB,UAAJ,CAAe,GAAf,EAAoBE,CAAC,GAAG4C,CAAxB,CAAL;EACA+E,MAAAA,EAAE,GAAG,IAAI7H,UAAJ,CAAe,GAAf,EAAoBE,CAAC,GAAG4C,CAAJ,GAAQD,CAAC,GAAGC,CAAhC,CAAL;EACD,KAHD,MAGO;EACLsgB,MAAAA,EAAE,GAAG,IAAIpjB,UAAJ,CAAeE,CAAC,GAAG2C,CAAnB,EAAsB,GAAtB,CAAL;EACAgF,MAAAA,EAAE,GAAG,IAAI7H,UAAJ,CAAeE,CAAC,GAAG2C,CAAJ,GAAQC,CAAC,GAAGD,CAA3B,EAA8B,GAA9B,CAAL;EACD;;EACD,WAAO,IAAI03B,WAAJ,CAAgBnX,EAAhB,EAAoBvb,EAApB,CAAP;EACD;;EACDyhD,EAAAA,kBAAkB,GAAG;EACnB,SAAKC,sBAAL;EACA,WAAO,KAAKV,WAAZ;EACD;;EACDW,EAAAA,oBAAoB,GAAG;EACrB,SAAKD,sBAAL;EACA,WAAO,KAAKva,UAAL,CAAgBj1B,UAAhB,GAA6BgI,gBAA7B,CAA8C,CAAC,KAAK6mC,WAAL,CAAiBxlC,EAAlB,EAAsB,KAAKwlC,WAAL,CAAiB/gD,EAAvC,CAA9C,CAAP;EACD;;EACDiC,EAAAA,WAAW,GAAG;EACZ,SAAKy/C,sBAAL;EACA,QAAI,KAAKV,WAAL,KAAqB,IAAzB,EAA+B,OAAO,KAAK7Z,UAAL,CAAgBj1B,UAAhB,GAA6BgI,gBAA7B,EAAP;;EAC/B,UAAMq9B,MAAM,GAAG,KAAKwJ,WAAL,CAAiB3tB,OAAjB,CAAyB,KAAK4tB,WAA9B,CAAf;;EACA,WAAO,KAAK7Z,UAAL,CAAgBj1B,UAAhB,GAA6BgI,gBAA7B,CAA8C,CAACq9B,MAAD,EAAS,KAAKyJ,WAAd,CAA9C,CAAP;EACD;;EACDY,EAAAA,kBAAkB,CAACC,UAAD,EAAa;EAC7B,QAAIA,UAAU,YAAY9lC,OAA1B,EAAmC,KAAK+kC,cAAL,GAAsBe,UAAU,CAACzkC,eAAX,GAA6BvD,cAA7B,EAAtB,CAAnC,KAA6G,KAAKinC,cAAL,GAAsBe,UAAU,CAAChoC,cAAX,EAAtB;;EAC7G,QAAI,KAAKinC,cAAL,CAAoBxpD,MAApB,KAA+B,CAAnC,EAAsC;EACpC,WAAK4pD,SAAL,GAAiB,GAAjB;EACA,WAAKF,WAAL,GAAmB,IAAnB;EACA,WAAKD,WAAL,GAAmB,IAAnB;EACD,KAJD,MAIO,IAAI,KAAKD,cAAL,CAAoBxpD,MAApB,KAA+B,CAAnC,EAAsC;EAC3C,WAAK4pD,SAAL,GAAiB,GAAjB;EACA,WAAKF,WAAL,GAAmB,KAAKF,cAAL,CAAoB,CAApB,CAAnB;EACA,WAAKC,WAAL,CAAiBxlC,EAAjB,GAAsB,KAAKulC,cAAL,CAAoB,CAApB,CAAtB;EACA,WAAKC,WAAL,CAAiB/gD,EAAjB,GAAsB,KAAK8gD,cAAL,CAAoB,CAApB,CAAtB;EACD,KALM,MAKA,IAAI,KAAKA,cAAL,CAAoBxpD,MAApB,KAA+B,CAA/B,IAAoC,KAAKwpD,cAAL,CAAoBxpD,MAApB,KAA+B,CAAvE,EAA0E;EAC/E,WAAK4pD,SAAL,GAAiB,GAAjB;EACA,WAAKF,WAAL,GAAmB,KAAKF,cAAL,CAAoB,CAApB,CAAnB;EACA,WAAKC,WAAL,CAAiBxlC,EAAjB,GAAsB,KAAKulC,cAAL,CAAoB,CAApB,CAAtB;EACA,WAAKC,WAAL,CAAiB/gD,EAAjB,GAAsB,KAAK8gD,cAAL,CAAoB,CAApB,CAAtB;EACD,KALM,MAKA;EACL,WAAKgB,4BAAL,CAAkC,KAAKhB,cAAvC;EACD;EACF;;EACDgB,EAAAA,4BAA4B,CAACxjD,GAAD,EAAM;EAChC,SAAK4iD,SAAL,GAAiBtsD,MAAM,CAACO,SAAxB;EACA,QAAI4sD,YAAY,GAAG,CAAnB;EACA,UAAMjvB,GAAG,GAAG,IAAIJ,WAAJ,EAAZ;;EACA,SAAK,IAAIj+B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6J,GAAG,CAAChH,MAAJ,GAAa,CAAjC,EAAoC7C,CAAC,EAArC,EAAyC;EACvCq+B,MAAAA,GAAG,CAACvX,EAAJ,GAASjd,GAAG,CAAC7J,CAAD,CAAZ;EACAq+B,MAAAA,GAAG,CAAC9yB,EAAJ,GAAS1B,GAAG,CAAC7J,CAAC,GAAG,CAAL,CAAZ;EACAstD,MAAAA,YAAY,GAAG,KAAKC,mBAAL,CAAyB1jD,GAAzB,EAA8Bw0B,GAA9B,EAAmCivB,YAAnC,CAAf;EACD;EACF;;EACDL,EAAAA,sBAAsB,GAAG;EACvB,QAAI,KAAKV,WAAL,KAAqB,IAAzB,EAA+B,OAAO,IAAP;;EAC/B,QAAI,KAAKH,SAAT,EAAoB;EAClB,WAAKe,kBAAL,CAAwB,KAAKza,UAA7B;EACD,KAFD,MAEO;EACL,YAAM0a,UAAU,GAAG,IAAInJ,UAAJ,CAAe,KAAKvR,UAApB,EAAgC+S,aAAhC,EAAnB;EACA,WAAK0H,kBAAL,CAAwBC,UAAxB;EACD;EACF;;EACD/uC,EAAAA,SAAS,GAAG;EACV,SAAK4uC,sBAAL;EACA,WAAO,KAAKR,SAAZ;EACD;;EACDc,EAAAA,mBAAmB,CAAC1jD,GAAD,EAAMw0B,GAAN,EAAWmvB,UAAX,EAAuB;EACxC,QAAIC,eAAe,GAAGpvB,GAAG,CAACc,qBAAJ,CAA0Bt1B,GAAG,CAAC2jD,UAAD,CAA7B,CAAtB;EACA,QAAIE,gBAAgB,GAAGD,eAAvB;EACA,QAAIE,QAAQ,GAAGH,UAAf;EACA,QAAIb,SAAS,GAAGgB,QAAhB;;EACA,WAAOD,gBAAgB,IAAID,eAA3B,EAA4C;EAC1CA,MAAAA,eAAe,GAAGC,gBAAlB;EACAC,MAAAA,QAAQ,GAAGhB,SAAX;EACAA,MAAAA,SAAS,GAAGR,eAAe,CAACQ,SAAhB,CAA0B9iD,GAA1B,EAA+B8jD,QAA/B,CAAZ;EACAD,MAAAA,gBAAgB,GAAGrvB,GAAG,CAACc,qBAAJ,CAA0Bt1B,GAAG,CAAC8iD,SAAD,CAA7B,CAAnB;EACD;;EACD,QAAIc,eAAe,GAAG,KAAKhB,SAA3B,EAAsC;EACpC,WAAKD,WAAL,GAAmBmB,QAAnB;EACA,WAAKlB,SAAL,GAAiBgB,eAAjB;EACA,WAAKlB,WAAL,GAAmB1iD,GAAG,CAAC,KAAK2iD,WAAN,CAAtB;EACA,WAAKF,WAAL,GAAmB,IAAIruB,WAAJ,CAAgBI,GAAhB,CAAnB;EACD;;EACD,WAAOsvB,QAAP;EACD;;EACDb,EAAAA,mBAAmB,GAAG;EACpB,SAAKG,sBAAL;;EACA,QAAI,KAAKR,SAAL,KAAmB,GAAvB,EAA4B;EAC1B,UAAI,KAAKH,WAAL,CAAiBxlC,EAAjB,CAAoBviB,QAApB,CAA6B,KAAK+nD,WAAL,CAAiB/gD,EAA9C,CAAJ,EACE,OAAO,KAAKmnC,UAAL,CAAgBj1B,UAAhB,GAA6B0I,WAA7B,CAAyC,KAAKmmC,WAAL,CAAiBxlC,EAA1D,CAAP;EAEF,aAAO,KAAKwlC,WAAL,CAAiBxtC,UAAjB,CAA4B,KAAK4zB,UAAL,CAAgBj1B,UAAhB,EAA5B,CAAP;EACD;;EACD,UAAMhY,EAAE,GAAG,KAAK6mD,WAAL,CAAiB/gD,EAAjB,CAAoB5J,CAApB,GAAwB,KAAK2qD,WAAL,CAAiBxlC,EAAjB,CAAoBnlB,CAAvD;EACA,UAAM+D,EAAE,GAAG,KAAK4mD,WAAL,CAAiB/gD,EAAjB,CAAoB3J,CAApB,GAAwB,KAAK0qD,WAAL,CAAiBxlC,EAAjB,CAAoBllB,CAAvD;EACA,QAAIgsD,OAAO,GAAGztD,MAAM,CAACO,SAArB;EACA,QAAImtD,OAAO,GAAG,CAAC1tD,MAAM,CAACO,SAAtB;EACA,QAAIotD,OAAO,GAAG3tD,MAAM,CAACO,SAArB;EACA,QAAIqtD,OAAO,GAAG,CAAC5tD,MAAM,CAACO,SAAtB;;EACA,SAAK,IAAIV,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKqsD,cAAL,CAAoBxpD,MAAxC,EAAgD7C,CAAC,EAAjD,EAAqD;EACnD,YAAMguD,KAAK,GAAG7B,eAAe,CAACS,QAAhB,CAAyBnnD,EAAzB,EAA6BC,EAA7B,EAAiC,KAAK2mD,cAAL,CAAoBrsD,CAApB,CAAjC,CAAd;EACA,UAAIguD,KAAK,GAAGH,OAAZ,EAAqBA,OAAO,GAAGG,KAAV;EACrB,UAAIA,KAAK,GAAGJ,OAAZ,EAAqBA,OAAO,GAAGI,KAAV;EACrB,YAAMC,KAAK,GAAG9B,eAAe,CAACS,QAAhB,CAAyB,CAAClnD,EAA1B,EAA8BD,EAA9B,EAAkC,KAAK4mD,cAAL,CAAoBrsD,CAApB,CAAlC,CAAd;EACA,UAAIiuD,KAAK,GAAGF,OAAZ,EAAqBA,OAAO,GAAGE,KAAV;EACrB,UAAIA,KAAK,GAAGH,OAAZ,EAAqBA,OAAO,GAAGG,KAAV;EACtB;;EACD,UAAMC,WAAW,GAAG/B,eAAe,CAACY,qBAAhB,CAAsC,CAACtnD,EAAvC,EAA2C,CAACC,EAA5C,EAAgDqoD,OAAhD,CAApB;EACA,UAAMI,WAAW,GAAGhC,eAAe,CAACY,qBAAhB,CAAsC,CAACtnD,EAAvC,EAA2C,CAACC,EAA5C,EAAgDooD,OAAhD,CAApB;EACA,UAAMM,WAAW,GAAGjC,eAAe,CAACY,qBAAhB,CAAsC,CAACrnD,EAAvC,EAA2CD,EAA3C,EAA+CooD,OAA/C,CAApB;EACA,UAAMQ,WAAW,GAAGlC,eAAe,CAACY,qBAAhB,CAAsC,CAACrnD,EAAvC,EAA2CD,EAA3C,EAA+CmoD,OAA/C,CAApB;EACA,UAAM9mC,EAAE,GAAGsnC,WAAW,CAACnuB,gBAAZ,CAA6BiuB,WAA7B,CAAX;EACA,UAAM3iD,EAAE,GAAG8iD,WAAW,CAACpuB,gBAAZ,CAA6BiuB,WAA7B,CAAX;EACA,UAAM1iD,EAAE,GAAG6iD,WAAW,CAACpuB,gBAAZ,CAA6BkuB,WAA7B,CAAX;EACA,UAAMhzB,EAAE,GAAGizB,WAAW,CAACnuB,gBAAZ,CAA6BkuB,WAA7B,CAAX;;EACA,UAAM1mC,KAAK,GAAG,KAAKirB,UAAL,CAAgBj1B,UAAhB,GAA6BkK,gBAA7B,CAA8C,CAACb,EAAD,EAAKvb,EAAL,EAASC,EAAT,EAAa2vB,EAAb,EAAiBrU,EAAjB,CAA9C,CAAd;;EACA,WAAO,KAAK4rB,UAAL,CAAgBj1B,UAAhB,GAA6BoL,aAA7B,CAA2CpB,KAA3C,CAAP;EACD;;EA3JkC;;;;;;;;;;;;;;;;;;;;;;;;ECCtB,MAAM6mC,SAAN,CAAgB;EAC7BjvD,EAAAA,WAAW,GAAG;EACZivD,IAAAA,SAAS,CAAC5rD,YAAV,CAAuBC,KAAvB,CAA6B,IAA7B,EAAmCC,SAAnC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKgwC,UAAL,GAAkB,IAAlB;EACA,SAAK6b,kBAAL,GAA0B,IAA1B;EACA,UAAMza,SAAS,GAAGlxC,SAAS,CAAC,CAAD,CAA3B;EACA,SAAK8vC,UAAL,GAAkBoB,SAAlB;EACD;;EACD,SAAO0a,aAAP,CAAqB3kD,GAArB,EAA0B4kD,iBAA1B,EAA6CC,SAA7C,EAAwD;EACtD,UAAMrwB,GAAG,GAAG,IAAIJ,WAAJ,EAAZ;EACA,UAAMxS,SAAS,GAAG,IAAIriB,cAAJ,EAAlB;;EACA,SAAK,IAAIpJ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6J,GAAG,CAAChH,MAAJ,GAAa,CAAjC,EAAoC7C,CAAC,EAArC,EAAyC;EACvCq+B,MAAAA,GAAG,CAACvX,EAAJ,GAASjd,GAAG,CAAC7J,CAAD,CAAZ;EACAq+B,MAAAA,GAAG,CAAC9yB,EAAJ,GAAS1B,GAAG,CAAC7J,CAAC,GAAG,CAAL,CAAZ;EACAyrB,MAAAA,SAAS,CAACrkB,GAAV,CAAci3B,GAAG,CAACvX,EAAlB,EAAsB,KAAtB;EACA,YAAMje,GAAG,GAAGw1B,GAAG,CAAChgB,SAAJ,EAAZ;EACA,YAAMswC,iBAAiB,GAAG1vD,IAAI,CAAC6S,KAAL,CAAWjJ,GAAG,GAAG4lD,iBAAjB,IAAsC,CAAhE;;EACA,UAAIE,iBAAiB,GAAG,CAAxB,EAA2B;EACzB,cAAMC,eAAe,GAAG/lD,GAAG,GAAG8lD,iBAA9B;;EACA,aAAK,IAAI7uC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6uC,iBAApB,EAAuC7uC,CAAC,EAAxC,EAA4C;EAC1C,gBAAM+uC,QAAQ,GAAG/uC,CAAC,GAAG8uC,eAAJ,GAAsB/lD,GAAvC;EACA,gBAAMwC,CAAC,GAAGgzB,GAAG,CAACiD,UAAJ,CAAeutB,QAAf,CAAV;EACAH,UAAAA,SAAS,CAAC99B,WAAV,CAAsBvlB,CAAtB;EACAogB,UAAAA,SAAS,CAACrkB,GAAV,CAAciE,CAAd,EAAiB,KAAjB;EACD;EACF;EACF;;EACDogB,IAAAA,SAAS,CAACrkB,GAAV,CAAcyC,GAAG,CAACA,GAAG,CAAChH,MAAJ,GAAa,CAAd,CAAjB,EAAmC,KAAnC;EACA,WAAO4oB,SAAS,CAAC/hB,iBAAV,EAAP;EACD;;EACD,SAAOolD,OAAP,CAAe1xC,IAAf,EAAqBqxC,iBAArB,EAAwC;EACtC,UAAMM,SAAS,GAAG,IAAIT,SAAJ,CAAclxC,IAAd,CAAlB;EACA2xC,IAAAA,SAAS,CAACC,oBAAV,CAA+BP,iBAA/B;EACA,WAAOM,SAAS,CAACE,iBAAV,EAAP;EACD;;EACDA,EAAAA,iBAAiB,GAAG;EAClB,WAAO,IAAIC,kBAAJ,CAAuB,KAAKX,kBAA5B,EAAgDzhB,SAAhD,CAA0D,KAAK4F,UAA/D,CAAP;EACD;;EACDsc,EAAAA,oBAAoB,CAACP,iBAAD,EAAoB;EACtC,QAAIA,iBAAiB,IAAI,GAAzB,EAA8B,MAAM,IAAI9uD,wBAAJ,CAA6B,4BAA7B,CAAN;EAC9B,SAAK4uD,kBAAL,GAA0BE,iBAA1B;EACD;;EA3C4B;;EA6C/B,MAAMS,kBAAN,SAAiCzc,mBAAjC,CAAqD;EACnDpzC,EAAAA,WAAW,GAAG;EACZ;EACA6vD,IAAAA,kBAAkB,CAACxsD,YAAnB,CAAgCC,KAAhC,CAAsC,IAAtC,EAA4CC,SAA5C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK+rD,iBAAL,GAAyB,IAAzB;EACA,UAAMA,iBAAiB,GAAG7rD,SAAS,CAAC,CAAD,CAAnC;EACA,SAAK6rD,iBAAL,GAAyBA,iBAAzB;EACD;;EACD7a,EAAAA,qBAAqB,CAACx2B,IAAD,EAAO41B,MAAP,EAAe;EAClC,UAAMmc,SAAS,GAAG,MAAMvb,qBAAN,CAA4B9wC,IAA5B,CAAiC,IAAjC,EAAuCsa,IAAvC,EAA6C41B,MAA7C,CAAlB;EACA,WAAO,KAAKoc,eAAL,CAAqBD,SAArB,CAAP;EACD;;EACDjc,EAAAA,gBAAgB,CAAC91B,IAAD,EAAO41B,MAAP,EAAe;EAC7B,UAAMmc,SAAS,GAAG,MAAMjc,gBAAN,CAAuBpwC,IAAvB,CAA4B,IAA5B,EAAkCsa,IAAlC,EAAwC41B,MAAxC,CAAlB;EACA,QAAIA,MAAM,YAAY7kB,YAAtB,EACE,OAAOghC,SAAP;EAEF,WAAO,KAAKC,eAAL,CAAqBD,SAArB,CAAP;EACD;;EACDlc,EAAAA,oBAAoB,CAAC3D,MAAD,EAAS0D,MAAT,EAAiB;EACnC,UAAMuR,QAAQ,GAAGjV,MAAM,CAAC5lC,iBAAP,EAAjB;EACA,QAAI2lD,MAAM,GAAGf,SAAS,CAACE,aAAV,CAAwBjK,QAAxB,EAAkC,KAAKkK,iBAAvC,EAA0Dzb,MAAM,CAACvzB,iBAAP,EAA1D,CAAb;EACA,QAAIuzB,MAAM,YAAYhuB,UAAlB,IAAgCqqC,MAAM,CAACxsD,MAAP,KAAkB,CAAtD,EACEwsD,MAAM,GAAG,IAAIvlD,KAAJ,CAAU,CAAV,EAAaC,IAAb,CAAkB,IAAlB,CAAT;EAEF,WAAO,KAAK2T,QAAL,CAAcqI,4BAAd,GAA6C9I,MAA7C,CAAoDoyC,MAApD,CAAP;EACD;;EACDD,EAAAA,eAAe,CAACE,aAAD,EAAgB;EAC7B,WAAOA,aAAa,CAACruD,MAAd,CAAqB,GAArB,CAAP;EACD;;EA/BkD;;EAiCrDqtD,SAAS,CAACY,kBAAV,GAA+BA,kBAA/B;;;;;;;EClFe,MAAMK,QAAN,CAAe;EAC5B,SAAOC,UAAP,CAAkBC,IAAlB,EAAwB;EACtB,WAAOA,IAAI,KAAKF,QAAQ,CAACG,EAAlB,IAAwBD,IAAI,KAAKF,QAAQ,CAACI,EAAjD;EACD;;EACD,SAAOC,UAAP,CAAkBC,KAAlB,EAAyBC,KAAzB,EAAgC;EAC9B,QAAID,KAAK,KAAKC,KAAd,EAAqB,OAAO,KAAP;EACrB,UAAMtqB,IAAI,GAAG,CAACqqB,KAAK,GAAGC,KAAR,GAAgB,CAAjB,IAAsB,CAAnC;EACA,QAAItqB,IAAI,KAAK,CAAb,EAAgB,OAAO,IAAP;EAChB,WAAO,KAAP;EACD;;EACD,SAAOuqB,eAAP,CAAuBF,KAAvB,EAA8BC,KAA9B,EAAqC;EACnC,QAAID,KAAK,KAAKC,KAAd,EAAqB,OAAOD,KAAP;EACrB,UAAMrqB,IAAI,GAAG,CAACqqB,KAAK,GAAGC,KAAR,GAAgB,CAAjB,IAAsB,CAAnC;EACA,QAAItqB,IAAI,KAAK,CAAb,EAAgB,OAAO,CAAC,CAAR;EAChB,UAAMx5B,GAAG,GAAG6jD,KAAK,GAAGC,KAAR,GAAgBD,KAAhB,GAAwBC,KAApC;EACA,UAAM5jD,GAAG,GAAG2jD,KAAK,GAAGC,KAAR,GAAgBD,KAAhB,GAAwBC,KAApC;EACA,QAAI9jD,GAAG,KAAK,CAAR,IAAaE,GAAG,KAAK,CAAzB,EAA4B,OAAO,CAAP;EAC5B,WAAOF,GAAP;EACD;;EACD,SAAOgkD,aAAP,CAAqBP,IAArB,EAA2BQ,SAA3B,EAAsC;EACpC,QAAIA,SAAS,KAAKV,QAAQ,CAACW,EAA3B,EACE,OAAOT,IAAI,KAAKF,QAAQ,CAACW,EAAlB,IAAwBT,IAAI,KAAKF,QAAQ,CAACY,EAAjD;EAEF,WAAOV,IAAI,KAAKQ,SAAT,IAAsBR,IAAI,KAAKQ,SAAS,GAAG,CAAlD;EACD;;EACD,SAAOG,QAAP,GAAkB;EAChB,QAAI,OAAOxtD,SAAS,CAAC,CAAD,CAAhB,KAAwB,QAAxB,IAAoC,OAAOA,SAAS,CAAC,CAAD,CAAhB,KAAwB,QAAhE,EAA0E;EACxE,YAAM6C,EAAE,GAAG7C,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyB8C,EAAE,GAAG9C,SAAS,CAAC,CAAD,CAAvC;EACA,UAAI6C,EAAE,KAAK,GAAP,IAAcC,EAAE,KAAK,GAAzB,EAA8B,MAAM,IAAI/F,wBAAJ,CAA6B,6CAA6C8F,EAA7C,GAAkD,IAAlD,GAAyDC,EAAzD,GAA8D,IAA3F,CAAN;EAC9B,UAAID,EAAE,IAAI,GAAV;EACE,YAAIC,EAAE,IAAI,GAAV,EAAe,OAAO6pD,QAAQ,CAACG,EAAhB,CAAf,KAAwC,OAAOH,QAAQ,CAACW,EAAhB;EAD1C,aAGA,IAAIxqD,EAAE,IAAI,GAAV,EAAe,OAAO6pD,QAAQ,CAACI,EAAhB,CAAf,KAAwC,OAAOJ,QAAQ,CAACY,EAAhB;EAEzC,KARD,MAQO,IAAIvtD,SAAS,CAAC,CAAD,CAAT,YAAwBc,UAAxB,IAAsCd,SAAS,CAAC,CAAD,CAAT,YAAwBc,UAAlE,EAA8E;EACnF,YAAMojB,EAAE,GAAGlkB,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyB2I,EAAE,GAAG3I,SAAS,CAAC,CAAD,CAAvC;EACA,UAAI2I,EAAE,CAAC5J,CAAH,KAASmlB,EAAE,CAACnlB,CAAZ,IAAiB4J,EAAE,CAAC3J,CAAH,KAASklB,EAAE,CAACllB,CAAjC,EAAoC,MAAM,IAAIjC,wBAAJ,CAA6B,0DAA0DmnB,EAAvF,CAAN;EACpC,UAAIvb,EAAE,CAAC5J,CAAH,IAAQmlB,EAAE,CAACnlB,CAAf;EACE,YAAI4J,EAAE,CAAC3J,CAAH,IAAQklB,EAAE,CAACllB,CAAf,EAAkB,OAAO2tD,QAAQ,CAACG,EAAhB,CAAlB,KAA2C,OAAOH,QAAQ,CAACW,EAAhB;EAD7C,aAGA,IAAI3kD,EAAE,CAAC3J,CAAH,IAAQklB,EAAE,CAACllB,CAAf,EAAkB,OAAO2tD,QAAQ,CAACI,EAAhB,CAAlB,KAA2C,OAAOJ,QAAQ,CAACY,EAAhB;EAE5C;EACF;;EA3C2B;EA6C9BZ,QAAQ,CAACG,EAAT,GAAc,CAAd;EACAH,QAAQ,CAACI,EAAT,GAAc,CAAd;EACAJ,QAAQ,CAACY,EAAT,GAAc,CAAd;EACAZ,QAAQ,CAACW,EAAT,GAAc,CAAd;;EC5Ce,MAAMG,QAAN,CAAe;EAC5BhxD,EAAAA,WAAW,GAAG;EACZgxD,IAAAA,QAAQ,CAAC3tD,YAAT,CAAsBC,KAAtB,CAA4B,IAA5B,EAAkCC,SAAlC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK4tD,KAAL,GAAa,IAAb;EACA,SAAKC,IAAL,GAAY,IAAZ;EACA,SAAKC,KAAL,GAAa,IAAb;EACA,UAAMC,IAAI,GAAG7tD,SAAS,CAAC,CAAD,CAAtB;EACA,SAAK0tD,KAAL,GAAaG,IAAb;EACD;;EACD,SAAOxzC,MAAP,CAAc6J,EAAd,EAAkBvb,EAAlB,EAAsB;EACpB,UAAMmlD,EAAE,GAAG,IAAIL,QAAJ,CAAavpC,EAAb,CAAX;EACA,UAAM6pC,EAAE,GAAG,IAAIN,QAAJ,CAAa9kD,EAAb,CAAX;EACAmlD,IAAAA,EAAE,CAACE,IAAH,CAAQD,EAAR;EACA,WAAOD,EAAP;EACD;;EACDG,EAAAA,IAAI,CAAC31C,IAAD,EAAO;EACT,QAAI41C,KAAK,GAAG,IAAZ;;EACA,OAAG;EACD,UAAIA,KAAK,KAAK,IAAd,EAAoB,OAAO,IAAP;EACpB,UAAIA,KAAK,CAAC51C,IAAN,GAAa3W,QAAb,CAAsB2W,IAAtB,CAAJ,EAAiC,OAAO41C,KAAP;EACjCA,MAAAA,KAAK,GAAGA,KAAK,CAACA,KAAN,EAAR;EACD,KAJD,QAISA,KAAK,KAAK,IAJnB;;EAKA,WAAO,IAAP;EACD;;EACD51C,EAAAA,IAAI,GAAG;EACL,WAAO,KAAKq1C,IAAL,CAAUD,KAAjB;EACD;;EACDS,EAAAA,aAAa,GAAG;EACd,UAAMC,MAAM,GAAG,KAAKC,UAAL,EAAf;EACA,QAAI5rD,CAAC,GAAG2rD,MAAR;;EACA,OAAG;EACD,YAAME,KAAK,GAAG7rD,CAAC,CAACyrD,KAAF,EAAd;EACA,UAAII,KAAK,KAAKF,MAAd,EAAsB;EACtB,YAAMG,QAAQ,GAAGD,KAAK,CAAClsD,SAAN,CAAgBK,CAAhB,IAAqB,CAAtC;EACA,UAAI,CAAC8rD,QAAL,EACE,OAAO,KAAP;EAEF9rD,MAAAA,CAAC,GAAG6rD,KAAJ;EACD,KARD,QAQS7rD,CAAC,KAAK2rD,MARf;;EASA,WAAO,IAAP;EACD;;EACDF,EAAAA,KAAK,GAAG;EACN,WAAO,KAAKP,IAAL,CAAUC,KAAjB;EACD;;EACDY,EAAAA,UAAU,GAAG;EACX,WAAO,KAAKC,WAAL,GAAmBxrD,IAAnB,KAA4B,KAAKyqD,KAAL,CAAWzqD,IAAX,EAAnC;EACD;;EACDq4C,EAAAA,MAAM,CAACoT,IAAD,EAAO;EACX,QAAI,KAAKR,KAAL,OAAiB,IAArB,EAA2B;EACzB,WAAKS,WAAL,CAAiBD,IAAjB;EACA,aAAO,IAAP;EACD;;EACD,UAAME,KAAK,GAAG,KAAKC,aAAL,CAAmBH,IAAnB,CAAd;EACAE,IAAAA,KAAK,CAACD,WAAN,CAAkBD,IAAlB;EACD;;EACDC,EAAAA,WAAW,CAAClsD,CAAD,EAAI;EACbtC,IAAAA,MAAM,CAACI,MAAP,CAAc,KAAKmtD,KAAnB,EAA0BjrD,CAAC,CAACorD,IAAF,EAA1B;EACA,UAAMiB,IAAI,GAAG,KAAKZ,KAAL,EAAb;;EACA,SAAKP,IAAL,CAAUoB,OAAV,CAAkBtsD,CAAlB;;EACAA,IAAAA,CAAC,CAACusD,GAAF,GAAQD,OAAR,CAAgBD,IAAhB;EACD;;EACDG,EAAAA,MAAM,GAAG;EACP,QAAIA,MAAM,GAAG,CAAb;EACA,QAAIxsD,CAAC,GAAG,IAAR;;EACA,OAAG;EACDwsD,MAAAA,MAAM;EACNxsD,MAAAA,CAAC,GAAGA,CAAC,CAACyrD,KAAF,EAAJ;EACD,KAHD,QAGSzrD,CAAC,KAAK,IAHf;;EAIA,WAAOwsD,MAAP;EACD;;EACD1uD,EAAAA,MAAM,GAAG;EACP,QAAIP,SAAS,CAACC,MAAV,KAAqB,CAArB,IAA2BD,SAAS,CAAC,CAAD,CAAT,YAAwBc,UAAxB,IAAsCd,SAAS,CAAC,CAAD,CAAT,YAAwBc,UAA7F,EAA0G;EACxG,YAAMojB,EAAE,GAAGlkB,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyB2I,EAAE,GAAG3I,SAAS,CAAC,CAAD,CAAvC;EACA,aAAO,KAAK0tD,KAAL,CAAW/rD,QAAX,CAAoBuiB,EAApB,KAA2B,KAAKypC,IAAL,CAAUD,KAAV,CAAgBntD,MAAhB,CAAuBoI,EAAvB,CAAlC;EACD;EACF;;EACD0lD,EAAAA,UAAU,GAAG;EACX,QAAID,MAAM,GAAG,IAAb;EACA,QAAI3rD,CAAC,GAAG,KAAKyrD,KAAL,EAAR;;EACA,OAAG;EACD,UAAIzrD,CAAC,CAACL,SAAF,CAAYgsD,MAAZ,IAAsB,CAA1B,EAA6BA,MAAM,GAAG3rD,CAAT;EAC7BA,MAAAA,CAAC,GAAGA,CAAC,CAACyrD,KAAF,EAAJ;EACD,KAHD,QAGSzrD,CAAC,KAAK,IAHf;;EAIA,WAAO2rD,MAAP;EACD;;EACDK,EAAAA,WAAW,GAAG;EACZ,WAAO,KAAKn2C,IAAL,EAAP;EACD;;EACD02C,EAAAA,GAAG,GAAG;EACJ,WAAO,KAAKrB,IAAZ;EACD;;EACDnmD,EAAAA,IAAI,GAAG;EACL,WAAO,KAAKmmD,IAAL,CAAUrnD,IAAV,GAAiBqnD,IAAxB;EACD;;EACDuB,EAAAA,uBAAuB,CAACzsD,CAAD,EAAI;EACzB,UAAMI,EAAE,GAAG,KAAKssD,UAAL,EAAX;EACA,UAAMrsD,EAAE,GAAG,KAAK0rD,UAAL,EAAX;EACA,UAAMp6C,GAAG,GAAG3R,CAAC,CAAC0sD,UAAF,EAAZ;EACA,UAAM96C,GAAG,GAAG5R,CAAC,CAAC+rD,UAAF,EAAZ;EACA,QAAI3rD,EAAE,KAAKuR,GAAP,IAActR,EAAE,KAAKuR,GAAzB,EAA8B,OAAO,CAAP;EAC9B,UAAMm5C,QAAQ,GAAGb,QAAQ,CAACa,QAAT,CAAkB3qD,EAAlB,EAAsBC,EAAtB,CAAjB;EACA,UAAMssD,SAAS,GAAGzC,QAAQ,CAACa,QAAT,CAAkBp5C,GAAlB,EAAuBC,GAAvB,CAAlB;EACA,QAAIm5C,QAAQ,GAAG4B,SAAf,EAA0B,OAAO,CAAP;EAC1B,QAAI5B,QAAQ,GAAG4B,SAAf,EAA0B,OAAO,CAAC,CAAR;EAC1B,UAAM9kC,IAAI,GAAG,KAAKmkC,WAAL,EAAb;EACA,UAAMlkC,IAAI,GAAG9nB,CAAC,CAACgsD,WAAF,EAAb;EACA,WAAOz4C,WAAW,CAACtQ,KAAZ,CAAkBjD,CAAC,CAACirD,KAApB,EAA2BnjC,IAA3B,EAAiCD,IAAjC,CAAP;EACD;;EACD+kC,EAAAA,QAAQ,GAAG;EACT,QAAI5sD,CAAC,GAAG,IAAR;;EACA,WAAOA,CAAC,CAACwsD,MAAF,OAAe,CAAtB,EAAyB;EACvBxsD,MAAAA,CAAC,GAAGA,CAAC,CAAC+E,IAAF,EAAJ;EACA,UAAI/E,CAAC,KAAK,IAAV,EAAgB,OAAO,IAAP;EACjB;;EACD,WAAOA,CAAP;EACD;;EACD0sD,EAAAA,UAAU,GAAG;EACX,WAAO,KAAKV,WAAL,GAAmBnsD,IAAnB,KAA4B,KAAKorD,KAAL,CAAWprD,IAAX,EAAnC;EACD;;EACDusD,EAAAA,aAAa,CAACH,IAAD,EAAO;EAClB,QAAIE,KAAK,GAAG,IAAZ;;EACA,OAAG;EACD,YAAMN,KAAK,GAAGM,KAAK,CAACV,KAAN,EAAd;EACA,UAAII,KAAK,CAAClsD,SAAN,CAAgBwsD,KAAhB,IAAyB,CAAzB,IAA8BF,IAAI,CAACtsD,SAAL,CAAewsD,KAAf,KAAyB,CAAvD,IAA4DF,IAAI,CAACtsD,SAAL,CAAeksD,KAAf,KAAyB,CAAzF,EACE,OAAOM,KAAP;EAEF,UAAIN,KAAK,CAAClsD,SAAN,CAAgBwsD,KAAhB,KAA0B,CAA1B,KAAgCF,IAAI,CAACtsD,SAAL,CAAeksD,KAAf,KAAyB,CAAzB,IAA8BI,IAAI,CAACtsD,SAAL,CAAewsD,KAAf,KAAyB,CAAvF,CAAJ,EACE,OAAOA,KAAP;EAEFA,MAAAA,KAAK,GAAGN,KAAR;EACD,KATD,QASSM,KAAK,KAAK,IATnB;;EAUAzuD,IAAAA,MAAM,CAACC,oBAAP;EACA,WAAO,IAAP;EACD;;EACDgC,EAAAA,SAAS,CAACiF,GAAD,EAAM;EACb,UAAM5E,CAAC,GAAG4E,GAAV;EACA,UAAMuU,IAAI,GAAG,KAAKszC,uBAAL,CAA6BzsD,CAA7B,CAAb;EACA,WAAOmZ,IAAP;EACD;;EACD0zC,EAAAA,YAAY,GAAG;EACb,UAAMzB,IAAI,GAAG,KAAKA,IAAL,EAAb;EACA,UAAMv1C,IAAI,GAAG,KAAKA,IAAL,EAAb;EACA,UAAMi3C,EAAE,GAAG,IAAI5kC,aAAJ,EAAX;EACA4kC,IAAAA,EAAE,CAACzjD,MAAH,CAAU,WAAWkrB,SAAS,CAACw4B,MAAV,CAAiB3B,IAAjB,CAAX,GAAoC,IAApC,GAA2C,IAArD;EACA,QAAIprD,CAAC,GAAG,IAAR;;EACA,OAAG;EACD8sD,MAAAA,EAAE,CAACzjD,MAAH,CAAU,UAAUrJ,CAApB;EACA8sD,MAAAA,EAAE,CAACzjD,MAAH,CAAU,IAAV;EACArJ,MAAAA,CAAC,GAAGA,CAAC,CAACyrD,KAAF,EAAJ;EACD,KAJD,QAISzrD,CAAC,KAAK,IAJf;;EAKA,WAAO8sD,EAAE,CAACzyD,QAAH,EAAP;EACD;;EACDkxD,EAAAA,IAAI,CAACgB,GAAD,EAAM;EACR,SAAKS,MAAL,CAAYT,GAAZ;EACAA,IAAAA,GAAG,CAACS,MAAJ,CAAW,IAAX;EACA,SAAKV,OAAL,CAAaC,GAAb;EACAA,IAAAA,GAAG,CAACD,OAAJ,CAAY,IAAZ;EACD;;EACDzoD,EAAAA,IAAI,GAAG;EACL,WAAO,KAAKsnD,KAAZ;EACD;;EACD6B,EAAAA,MAAM,CAAChtD,CAAD,EAAI;EACR,SAAKkrD,IAAL,GAAYlrD,CAAZ;EACD;;EACDorD,EAAAA,IAAI,GAAG;EACL,WAAO,KAAKH,KAAZ;EACD;;EACD5wD,EAAAA,QAAQ,GAAG;EACT,WAAO,QAAQ,KAAK4wD,KAAL,CAAW3uD,CAAnB,GAAuB,GAAvB,GAA6B,KAAK2uD,KAAL,CAAW1uD,CAAxC,GAA4C,IAA5C,GAAmD,KAAK2uD,IAAL,CAAUD,KAAV,CAAgB3uD,CAAnE,GAAuE,GAAvE,GAA6E,KAAK4uD,IAAL,CAAUD,KAAV,CAAgB1uD,CAA7F,GAAiG,GAAxG;EACD;;EACD0wD,EAAAA,gBAAgB,GAAG;EACjB,WAAO,WAAW14B,SAAS,CAACw4B,MAAV,CAAiB,KAAKl3C,IAAL,EAAjB,CAAlB;EACD;;EACDy2C,EAAAA,OAAO,CAACtsD,CAAD,EAAI;EACT,SAAKmrD,KAAL,GAAanrD,CAAb;EACD;;EAjL2B;;ECLf,MAAMktD,YAAN,SAA2BlC,QAA3B,CAAoC;EACjDhxD,EAAAA,WAAW,GAAG;EACZ;EACAkzD,IAAAA,YAAY,CAAC7vD,YAAb,CAA0BC,KAA1B,CAAgC,IAAhC,EAAsCC,SAAtC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK8vD,SAAL,GAAiB,KAAjB;EACA,UAAM/B,IAAI,GAAG7tD,SAAS,CAAC,CAAD,CAAtB;EACAytD,IAAAA,QAAQ,CAAC3tD,YAAT,CAAsBI,IAAtB,CAA2B,IAA3B,EAAiC2tD,IAAjC;EACD;;EACD,SAAOgC,WAAP,CAAmBptD,CAAnB,EAAsBqtD,QAAtB,EAAgC;EAC9BrtD,IAAAA,CAAC,CAACstD,OAAF,CAAUD,QAAV;EACArtD,IAAAA,CAAC,CAACusD,GAAF,GAAQe,OAAR,CAAgBD,QAAhB;EACD;;EACD,SAAOA,QAAP,CAAgBrtD,CAAhB,EAAmB;EACjB,WAAOA,CAAC,CAACqtD,QAAF,EAAP;EACD;;EACD,SAAOC,OAAP,CAAettD,CAAf,EAAkBqtD,QAAlB,EAA4B;EAC1BrtD,IAAAA,CAAC,CAACstD,OAAF,CAAUD,QAAV;EACD;;EACD,SAAOE,QAAP,CAAgBvtD,CAAhB,EAAmB;EACjBA,IAAAA,CAAC,CAACwtD,IAAF;EACAxtD,IAAAA,CAAC,CAACusD,GAAF,GAAQiB,IAAR;EACD;;EACD,SAAOA,IAAP,CAAYxtD,CAAZ,EAAe;EACbA,IAAAA,CAAC,CAACwtD,IAAF;EACD;;EACDA,EAAAA,IAAI,GAAG;EACL,SAAKL,SAAL,GAAiB,IAAjB;EACD;;EACDG,EAAAA,OAAO,CAACD,QAAD,EAAW;EAChB,SAAKF,SAAL,GAAiBE,QAAjB;EACD;;EACDA,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAKF,SAAZ;EACD;;EAnCgD;;ECCpC,MAAMM,SAAN,CAAgB;EAC7BzzD,EAAAA,WAAW,GAAG;EACZyzD,IAAAA,SAAS,CAACpwD,YAAV,CAAuBC,KAAvB,CAA6B,IAA7B,EAAmCC,SAAnC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKqwD,UAAL,GAAkB,IAAI/jC,OAAJ,EAAlB;EACD;;EACD,SAAOgkC,WAAP,CAAmBvC,IAAnB,EAAyBv1C,IAAzB,EAA+B;EAC7B,UAAM+3C,GAAG,GAAG/3C,IAAI,CAAClW,SAAL,CAAeyrD,IAAf,CAAZ;EACA,WAAOwC,GAAG,KAAK,CAAf;EACD;;EACD/U,EAAAA,MAAM,CAACuS,IAAD,EAAOv1C,IAAP,EAAag4C,IAAb,EAAmB;EACvB,UAAM7tD,CAAC,GAAG,KAAK4X,MAAL,CAAYwzC,IAAZ,EAAkBv1C,IAAlB,CAAV;EACA,QAAIg4C,IAAI,KAAK,IAAb,EACEA,IAAI,CAAChV,MAAL,CAAY74C,CAAZ,EADF,KAGE,KAAK0tD,UAAL,CAAgBtkC,GAAhB,CAAoBgiC,IAApB,EAA0BprD,CAA1B;;EAEF,UAAM8tD,QAAQ,GAAG,KAAKJ,UAAL,CAAgBlrD,GAAhB,CAAoBqT,IAApB,CAAjB;;EACA,QAAIi4C,QAAQ,KAAK,IAAjB,EACEA,QAAQ,CAACjV,MAAT,CAAgB74C,CAAC,CAACusD,GAAF,EAAhB,EADF,KAGE,KAAKmB,UAAL,CAAgBtkC,GAAhB,CAAoBvT,IAApB,EAA0B7V,CAAC,CAACusD,GAAF,EAA1B;EAEF,WAAOvsD,CAAP;EACD;;EACD4X,EAAAA,MAAM,CAAC6J,EAAD,EAAKvb,EAAL,EAAS;EACb,UAAMmlD,EAAE,GAAG,KAAK0C,UAAL,CAAgBtsC,EAAhB,CAAX;EACA,UAAM6pC,EAAE,GAAG,KAAKyC,UAAL,CAAgB7nD,EAAhB,CAAX;EACAmlD,IAAAA,EAAE,CAACE,IAAH,CAAQD,EAAR;EACA,WAAOD,EAAP;EACD;;EACD0C,EAAAA,UAAU,CAAC3C,IAAD,EAAO;EACf,WAAO,IAAIJ,QAAJ,CAAaI,IAAb,CAAP;EACD;;EACD4C,EAAAA,OAAO,CAAC5C,IAAD,EAAOv1C,IAAP,EAAa;EAClB,QAAI,CAAC43C,SAAS,CAACE,WAAV,CAAsBvC,IAAtB,EAA4Bv1C,IAA5B,CAAL,EAAwC,OAAO,IAAP;;EACxC,UAAMg4C,IAAI,GAAG,KAAKH,UAAL,CAAgBlrD,GAAhB,CAAoB4oD,IAApB,CAAb;;EACA,QAAI6C,KAAK,GAAG,IAAZ;EACA,QAAIJ,IAAI,KAAK,IAAb,EACEI,KAAK,GAAGJ,IAAI,CAACrC,IAAL,CAAU31C,IAAV,CAAR;EAEF,QAAIo4C,KAAK,KAAK,IAAd,EACE,OAAOA,KAAP;EAEF,UAAMjuD,CAAC,GAAG,KAAK64C,MAAL,CAAYuS,IAAZ,EAAkBv1C,IAAlB,EAAwBg4C,IAAxB,CAAV;EACA,WAAO7tD,CAAP;EACD;;EACDkuD,EAAAA,cAAc,GAAG;EACf,WAAO,KAAKR,UAAL,CAAgBhqD,MAAhB,EAAP;EACD;;EACDyqD,EAAAA,QAAQ,CAAC/C,IAAD,EAAOv1C,IAAP,EAAa;EACnB,UAAM7V,CAAC,GAAG,KAAK0tD,UAAL,CAAgBlrD,GAAhB,CAAoB4oD,IAApB,CAAV;;EACA,QAAIprD,CAAC,KAAK,IAAV,EAAgB,OAAO,IAAP;EAChB,WAAOA,CAAC,CAACwrD,IAAF,CAAO31C,IAAP,CAAP;EACD;;EAvD4B;;ECDhB,MAAMu4C,gBAAN,SAA+BlB,YAA/B,CAA4C;EACzDlzD,EAAAA,WAAW,GAAG;EACZ;EACAo0D,IAAAA,gBAAgB,CAAC/wD,YAAjB,CAA8BC,KAA9B,CAAoC,IAApC,EAA0CC,SAA1C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKgxD,QAAL,GAAgB,KAAhB;EACA,UAAMjD,IAAI,GAAG7tD,SAAS,CAAC,CAAD,CAAtB;EACA2vD,IAAAA,YAAY,CAAC7vD,YAAb,CAA0BI,IAA1B,CAA+B,IAA/B,EAAqC2tD,IAArC;EACD;;EACDkD,EAAAA,QAAQ,GAAG;EACT,SAAKD,QAAL,GAAgB,IAAhB;EACD;;EACDE,EAAAA,OAAO,GAAG;EACR,WAAO,KAAKF,QAAZ;EACD;;EAfwD;;ECC5C,MAAMG,iBAAN,SAAgCf,SAAhC,CAA0C;EACvDzzD,EAAAA,WAAW,GAAG;EACZ;EACD;;EACD+zD,EAAAA,UAAU,CAACtsC,EAAD,EAAK;EACb,WAAO,IAAI2sC,gBAAJ,CAAqB3sC,EAArB,CAAP;EACD;;EANsD;;ECQ1C,MAAMgtC,aAAN,CAAoB;EACjCz0D,EAAAA,WAAW,GAAG;EACZy0D,IAAAA,aAAa,CAACpxD,YAAd,CAA2BC,KAA3B,CAAiC,IAAjC,EAAuCC,SAAvC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKq3B,OAAL,GAAe,IAAf;EACA,SAAKrc,QAAL,GAAgB,IAAhB;EACA,SAAKq2C,MAAL,GAAc,IAAd;EACA,SAAK1f,MAAL,GAAc,IAAIrsC,SAAJ,EAAd;EACA,SAAKgsD,cAAL,GAAsB,IAAIxQ,KAAJ,EAAtB;EACA,SAAKyQ,cAAL,GAAsB,IAAtB;EACA,SAAKF,MAAL,GAAc,IAAIF,iBAAJ,EAAd;EACD;;EACD,SAAOK,QAAP,CAAgB/1C,CAAhB,EAAmB;EACjB,UAAMxN,CAAC,GAAG,IAAImjD,aAAJ,EAAV;EACAnjD,IAAAA,CAAC,CAACvJ,GAAF,CAAM+W,CAAN;EACA,WAAOxN,CAAC,CAACwjD,SAAF,EAAP;EACD;;EACDtU,EAAAA,OAAO,CAAChjC,IAAD,EAAO;EACZ,SAAKw3B,MAAL,CAAYjtC,GAAZ,CAAgB,KAAKsW,QAAL,CAAc+H,gBAAd,CAA+B5I,IAAI,CAACnT,iBAAL,EAA/B,CAAhB;EACD;;EACD0qD,EAAAA,mBAAmB,CAAC/uD,CAAD,EAAI;EACrB,QAAI,CAACA,CAAC,CAACuuD,OAAF,EAAL,EAAkB;EAChBvuD,MAAAA,CAAC,GAAGA,CAAC,CAACusD,GAAF,EAAJ;EACA,UAAI,CAACvsD,CAAC,CAACuuD,OAAF,EAAL,EAAkB,OAAO,IAAP;EACnB;;EACD,QAAI,KAAKK,cAAL,KAAwB,IAA5B,EAAkC;EAChC,WAAKA,cAAL,GAAsB5uD,CAAtB;EACA,aAAO,IAAP;EACD;;EACD,QAAIA,CAAC,CAACorD,IAAF,GAASzrD,SAAT,CAAmB,KAAKivD,cAAL,CAAoBxD,IAApB,EAAnB,IAAiD,CAArD,EACE,KAAKwD,cAAL,GAAsB5uD,CAAtB;EAEH;;EACD8uD,EAAAA,SAAS,GAAG;EACV,QAAI,KAAKp6B,OAAL,KAAiB,IAArB,EAA2B,KAAKs6B,aAAL;EAC3B,WAAO,KAAKt6B,OAAZ;EACD;;EACD4sB,EAAAA,OAAO,CAACthD,CAAD,EAAI;EACT,QAAIivD,KAAK,GAAGjvD,CAAC,CAAC4sD,QAAF,EAAZ;EACA,QAAIqC,KAAK,KAAK,IAAd,EAAoBA,KAAK,GAAGjvD,CAAR;EACpB,SAAKkvD,UAAL,CAAgBD,KAAhB;EACA,SAAKE,UAAL;EACD;;EACDC,EAAAA,SAAS,CAACC,UAAD,EAAa;EACpB,UAAM73C,IAAI,GAAG,IAAIzT,cAAJ,EAAb;EACA,QAAI/D,CAAC,GAAGqvD,UAAR;EACA73C,IAAAA,IAAI,CAACzV,GAAL,CAAS/B,CAAC,CAACorD,IAAF,GAASlrD,IAAT,EAAT,EAA0B,KAA1B;;EACA,WAAOF,CAAC,CAACusD,GAAF,GAAQC,MAAR,OAAqB,CAA5B,EAA+B;EAC7B,YAAMX,KAAK,GAAG7rD,CAAC,CAAC6D,IAAF,EAAd;EACA,UAAIgoD,KAAK,KAAKwD,UAAd,EAA0B;EAC1B73C,MAAAA,IAAI,CAACzV,GAAL,CAAS8pD,KAAK,CAACT,IAAN,GAAalrD,IAAb,EAAT,EAA8B,KAA9B;EACAF,MAAAA,CAAC,GAAG6rD,KAAJ;EACD;;EACDr0C,IAAAA,IAAI,CAACzV,GAAL,CAAS/B,CAAC,CAAC6V,IAAF,GAAS3V,IAAT,EAAT,EAA0B,KAA1B;EACA,SAAKs6C,OAAL,CAAahjC,IAAb;EACD;;EACD83C,EAAAA,SAAS,CAACC,MAAD,EAAS;EAChB,UAAM/3C,IAAI,GAAG,IAAIzT,cAAJ,EAAb;EACA,QAAI/D,CAAC,GAAGuvD,MAAR;EACA,SAAKX,cAAL,GAAsB,IAAtB;EACA1B,IAAAA,YAAY,CAACK,QAAb,CAAsBvtD,CAAtB;EACAwX,IAAAA,IAAI,CAACzV,GAAL,CAAS/B,CAAC,CAACorD,IAAF,GAASlrD,IAAT,EAAT,EAA0B,KAA1B;;EACA,WAAOF,CAAC,CAACusD,GAAF,GAAQC,MAAR,OAAqB,CAA5B,EAA+B;EAC7B,WAAKuC,mBAAL,CAAyB/uD,CAAzB;EACA,YAAM6rD,KAAK,GAAG7rD,CAAC,CAAC6D,IAAF,EAAd;;EACA,UAAIgoD,KAAK,KAAK0D,MAAd,EAAsB;EACpB,aAAKH,SAAL,CAAe,KAAKR,cAApB;EACA,eAAO,IAAP;EACD;;EACDp3C,MAAAA,IAAI,CAACzV,GAAL,CAAS8pD,KAAK,CAACT,IAAN,GAAalrD,IAAb,EAAT,EAA8B,KAA9B;EACAF,MAAAA,CAAC,GAAG6rD,KAAJ;EACAqB,MAAAA,YAAY,CAACK,QAAb,CAAsBvtD,CAAtB;EACD;;EACDwX,IAAAA,IAAI,CAACzV,GAAL,CAAS/B,CAAC,CAAC6V,IAAF,GAAS/V,KAAT,EAAT,EAA2B,KAA3B;EACA,SAAKovD,UAAL,CAAgBlvD,CAAC,CAACusD,GAAF,EAAhB;EACA,SAAK/R,OAAL,CAAahjC,IAAb;EACD;;EACD03C,EAAAA,UAAU,CAAClW,IAAD,EAAO;EACf,QAAIh5C,CAAC,GAAGg5C,IAAR;;EACA,OAAG;EACD,UAAI,CAACkU,YAAY,CAACG,QAAb,CAAsBrtD,CAAtB,CAAL,EAA+B,KAAK2uD,cAAL,CAAoB5sD,GAApB,CAAwB/B,CAAxB;EAC/BA,MAAAA,CAAC,GAAGA,CAAC,CAACyrD,KAAF,EAAJ;EACD,KAHD,QAGSzrD,CAAC,KAAKg5C,IAHf;EAID;;EACDgW,EAAAA,aAAa,GAAG;EACd,UAAMQ,KAAK,GAAG,KAAKd,MAAL,CAAYR,cAAZ,EAAd;;EACA,SAAK,IAAIvzD,CAAC,GAAG60D,KAAK,CAACttD,QAAN,EAAb,EAA+BvH,CAAC,CAACmJ,OAAF,EAA/B,GAA8C;EAC5C,YAAM9D,CAAC,GAAGrF,CAAC,CAACkJ,IAAF,EAAV;EACA,UAAIqpD,YAAY,CAACG,QAAb,CAAsBrtD,CAAtB,CAAJ,EAA8B;EAC9B,WAAKshD,OAAL,CAAathD,CAAb;EACD;;EACD,SAAK00B,OAAL,GAAe,KAAKrc,QAAL,CAAcwM,aAAd,CAA4B,KAAKmqB,MAAjC,CAAf;EACD;;EACDmgB,EAAAA,UAAU,GAAG;EACX,WAAO,CAAC,KAAKR,cAAL,CAAoBrQ,KAApB,EAAR,EAAqC;EACnC,YAAMt+C,CAAC,GAAG,KAAK2uD,cAAL,CAAoBvQ,GAApB,EAAV;;EACA,UAAI8O,YAAY,CAACG,QAAb,CAAsBrtD,CAAtB,CAAJ,EAA8B;EAC9B,WAAKsvD,SAAL,CAAetvD,CAAf;EACD;EACF;;EACD+B,EAAAA,GAAG,GAAG;EACJ,QAAIxE,SAAS,CAAC,CAAD,CAAT,YAAwBya,QAA5B,EAAsC;EACpC,YAAM0Z,QAAQ,GAAGn0B,SAAS,CAAC,CAAD,CAA1B;EACAm0B,MAAAA,QAAQ,CAACp0B,KAAT,CAAe,IAAK,MAAM;EACxB,YAAIsD,WAAJ,GAAkB;EAChB,iBAAO,CAACkX,uBAAD,CAAP;EACD;;EACDxS,QAAAA,MAAM,CAACmqD,SAAD,EAAY;EAChB,cAAIA,SAAS,YAAY9vC,UAAzB,EACE,KAAK5d,GAAL,CAAS0tD,SAAT;EAEH;;EARuB,OAAX,EAAf;EAUD,KAZD,MAYO,IAAIvrD,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAeuE,UAAf,CAAhB,EAA4C;EACjD,YAAMsZ,UAAU,GAAG7d,SAAS,CAAC,CAAD,CAA5B;;EACA,WAAK,IAAI5C,CAAC,GAAGygB,UAAU,CAAClZ,QAAX,EAAb,EAAoCvH,CAAC,CAACmJ,OAAF,EAApC,GAAmD;EACjD,cAAM4tB,QAAQ,GAAG/2B,CAAC,CAACkJ,IAAF,EAAjB;EACA,aAAK9B,GAAL,CAAS2vB,QAAT;EACD;EACF,KANM,MAMA,IAAIn0B,SAAS,CAAC,CAAD,CAAT,YAAwBoiB,UAA5B,EAAwC;EAC7C,YAAM+vC,UAAU,GAAGnyD,SAAS,CAAC,CAAD,CAA5B;EACA,UAAI,KAAK8a,QAAL,KAAkB,IAAtB,EACE,KAAKA,QAAL,GAAgBq3C,UAAU,CAACt3C,UAAX,EAAhB;EAEF,YAAM7S,GAAG,GAAGmqD,UAAU,CAACjvC,qBAAX,EAAZ;EACA,UAAIkvC,SAAS,GAAG,KAAhB;;EACA,WAAK,IAAIh1D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG4K,GAAG,CAACpD,IAAJ,EAApB,EAAgCxH,CAAC,EAAjC,EAAqC;EACnC,cAAMqF,CAAC,GAAG,KAAK0uD,MAAL,CAAYV,OAAZ,CAAoBzoD,GAAG,CAACtB,aAAJ,CAAkBtJ,CAAC,GAAG,CAAtB,CAApB,EAA8C4K,GAAG,CAACtB,aAAJ,CAAkBtJ,CAAlB,CAA9C,CAAV;;EACA,YAAIqF,CAAC,KAAK,IAAV,EAAgB;;EAChB,YAAI,CAAC2vD,SAAL,EAAgB;EACd3vD,UAAAA,CAAC,CAACsuD,QAAF;EACAqB,UAAAA,SAAS,GAAG,IAAZ;EACD;EACF;EACF;EACF;;EAxIgC;;;;;;;ECVpB,MAAMC,QAAN,CAAe;EAC5B,SAAOC,QAAP,CAAgBjsD,QAAhB,EAA0B;EACxB,QAAIA,QAAQ,KAAKgsD,QAAQ,CAACz7C,IAA1B,EAAgC,OAAOy7C,QAAQ,CAAC37C,KAAhB;EAChC,QAAIrQ,QAAQ,KAAKgsD,QAAQ,CAAC37C,KAA1B,EAAiC,OAAO27C,QAAQ,CAACz7C,IAAhB;EACjC,WAAOvQ,QAAP;EACD;;EAL2B;EAO9BgsD,QAAQ,CAACE,EAAT,GAAc,CAAd;EACAF,QAAQ,CAACz7C,IAAT,GAAgB,CAAhB;EACAy7C,QAAQ,CAAC37C,KAAT,GAAiB,CAAjB;;ECTe,MAAM87C,aAAN,CAAoB;EACjC/1D,EAAAA,WAAW,GAAG;EACZ+1D,IAAAA,aAAa,CAAC1yD,YAAd,CAA2BC,KAA3B,CAAiC,IAAjC,EAAuCC,SAAvC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK2yD,GAAL,GAAW,IAAX;EACA,SAAKC,UAAL,GAAkB,IAAlB;EACA,UAAMD,GAAG,GAAGzyD,SAAS,CAAC,CAAD,CAArB;EAAA,UAA0B0yD,UAAU,GAAG1yD,SAAS,CAAC,CAAD,CAAhD;EACA,SAAKyyD,GAAL,GAAWA,GAAX;EACA,SAAKC,UAAL,GAAkBA,UAAlB;EACD;;EACDC,EAAAA,oBAAoB,CAACC,EAAD,EAAKC,EAAL,EAAS;EAC3B,SAAKJ,GAAL,CAASK,yBAAT,CAAmC,KAAKJ,UAAxC,EAAoDE,EAAE,CAACH,GAAvD,EAA4DG,EAAE,CAACF,UAA/D,EAA2EG,EAA3E;EACD;;EAbgC;;ECCpB,MAAME,cAAN,CAAqB;EAClCt2D,EAAAA,WAAW,GAAG;EACZs2D,IAAAA,cAAc,CAACjzD,YAAf,CAA4BC,KAA5B,CAAkC,IAAlC,EAAwCC,SAAxC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKkzD,MAAL,GAAc,IAAd;EACA,SAAKC,OAAL,GAAe,IAAf;EACA,SAAKC,UAAL,GAAkB,IAAlB;EACA,SAAKC,YAAL,GAAoB,IAApB;EACA,SAAKC,iBAAL,GAAyB,IAAzB;EACA,SAAKC,IAAL,GAAY,IAAZ;;EACA,QAAIrzD,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMlB,CAAC,GAAGiB,SAAS,CAAC,CAAD,CAAnB;EAAA,YAAwBszD,WAAW,GAAGtzD,SAAS,CAAC,CAAD,CAA/C;EACA,WAAKkzD,UAAL,GAAkBH,cAAc,CAACQ,MAAjC;EACA,WAAKN,OAAL,GAAel0D,CAAf;EACA,WAAKo0D,YAAL,GAAoBG,WAApB;EACD,KALD,MAKO,IAAItzD,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMuzD,KAAK,GAAGxzD,SAAS,CAAC,CAAD,CAAvB;EAAA,YAA4BjB,CAAC,GAAGiB,SAAS,CAAC,CAAD,CAAzC;EAAA,YAA8CqH,GAAG,GAAGrH,SAAS,CAAC,CAAD,CAA7D;EACA,WAAKkzD,UAAL,GAAkBH,cAAc,CAACU,MAAjC;EACA,WAAKT,MAAL,GAAcQ,KAAd;EACA,WAAKP,OAAL,GAAel0D,CAAf;EACA,WAAKs0D,IAAL,GAAYhsD,GAAZ;EACD;EACF;;EACDqsD,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAKR,UAAL,KAAoBH,cAAc,CAACQ,MAA1C;EACD;;EACDI,EAAAA,mBAAmB,CAACC,gBAAD,EAAmB;EACpC,SAAKR,iBAAL,GAAyBQ,gBAAzB;EACD;;EACDC,EAAAA,SAAS,GAAG;EACV,WAAO,KAAKR,IAAZ;EACD;;EACDjxD,EAAAA,SAAS,CAACC,CAAD,EAAI;EACX,UAAMyxD,EAAE,GAAGzxD,CAAX;EACA,QAAI,KAAK4wD,OAAL,GAAea,EAAE,CAACb,OAAtB,EAA+B,OAAO,CAAC,CAAR;EAC/B,QAAI,KAAKA,OAAL,GAAea,EAAE,CAACb,OAAtB,EAA+B,OAAO,CAAP;EAC/B,QAAI,KAAKC,UAAL,GAAkBY,EAAE,CAACZ,UAAzB,EAAqC,OAAO,CAAC,CAAR;EACrC,QAAI,KAAKA,UAAL,GAAkBY,EAAE,CAACZ,UAAzB,EAAqC,OAAO,CAAP;EACrC,WAAO,CAAP;EACD;;EACDa,EAAAA,cAAc,GAAG;EACf,WAAO,KAAKZ,YAAZ;EACD;;EACDa,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAKd,UAAL,KAAoBH,cAAc,CAACU,MAA1C;EACD;;EACDQ,EAAAA,WAAW,CAACC,EAAD,EAAK;EACd,QAAI,KAAKlB,MAAL,KAAgB,IAApB,EAA0B,OAAO,KAAP;EAC1B,WAAO,KAAKA,MAAL,KAAgBkB,EAAE,CAAClB,MAA1B;EACD;;EACDmB,EAAAA,mBAAmB,GAAG;EACpB,WAAO,KAAKf,iBAAZ;EACD;;EACD,MAAI/vD,WAAJ,GAAkB;EAChB,WAAO,CAAC7D,UAAD,CAAP;EACD;;EAxDiC;EA0DpCuzD,cAAc,CAACU,MAAf,GAAwB,CAAxB;EACAV,cAAc,CAACQ,MAAf,GAAwB,CAAxB;;EC5De,MAAMa,kBAAN,CAAyB;;ECAzB,MAAMC,kBAAN,CAAyB;EACtC53D,EAAAA,WAAW,GAAG;EACZ43D,IAAAA,kBAAkB,CAACv0D,YAAnB,CAAgCC,KAAhC,CAAsC,IAAtC,EAA4CC,SAA5C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKw0D,gBAAL,GAAwB,KAAxB;EACA,SAAKC,UAAL,GAAkB,KAAlB;EACA,SAAKC,kBAAL,GAA0B,KAA1B;EACA,SAAKC,wBAAL,GAAgC,IAAhC;EACA,SAAKC,GAAL,GAAW,IAAX;EACA,SAAKC,cAAL,GAAsB,IAAtB;EACA,SAAKC,eAAL,GAAuB,IAAvB;EACA,SAAKC,mBAAL,GAA2B,IAA3B;EACA,SAAKC,iBAAL,GAAyB,CAAzB;EACA,SAAKC,QAAL,GAAgB,CAAhB;EACA,SAAKC,SAAL,GAAiB,IAAjB;EACA,SAAKtiB,OAAL,GAAe,KAAf;EACA,SAAKuiB,oBAAL,GAA4B,KAA5B;EACA,UAAMn5B,EAAE,GAAG97B,SAAS,CAAC,CAAD,CAApB;EAAA,UAAyBk1D,aAAa,GAAGl1D,SAAS,CAAC,CAAD,CAAlD;EAAA,UAAuDm1D,cAAc,GAAGn1D,SAAS,CAAC,CAAD,CAAjF;EACA,SAAK00D,GAAL,GAAW54B,EAAX;EACA,SAAK64B,cAAL,GAAsBO,aAAtB;EACA,SAAKN,eAAL,GAAuBO,cAAvB;EACD;;EACD,SAAOC,kBAAP,CAA0B5qC,EAA1B,EAA8BC,EAA9B,EAAkC;EAChC,WAAOpuB,IAAI,CAACC,GAAL,CAASkuB,EAAE,GAAGC,EAAd,MAAsB,CAA7B;EACD;;EACD4qC,EAAAA,qBAAqB,CAACvH,EAAD,EAAKwH,SAAL,EAAgBvH,EAAhB,EAAoBwH,SAApB,EAA+B;EAClD,QAAIzH,EAAE,KAAKC,EAAX,EACE,IAAI,KAAK2G,GAAL,CAASh8B,kBAAT,OAAkC,CAAtC,EAAyC;EACvC,UAAI27B,kBAAkB,CAACe,kBAAnB,CAAsCE,SAAtC,EAAiDC,SAAjD,CAAJ,EAAiE,OAAO,IAAP;;EACjE,UAAIzH,EAAE,CAAC/sC,QAAH,EAAJ,EAAmB;EACjB,cAAMy0C,WAAW,GAAG1H,EAAE,CAAClrC,YAAH,KAAoB,CAAxC;EACA,YAAI0yC,SAAS,KAAK,CAAd,IAAmBC,SAAS,KAAKC,WAAjC,IAAgDD,SAAS,KAAK,CAAd,IAAmBD,SAAS,KAAKE,WAArF,EACE,OAAO,IAAP;EAEH;EACF;EAEH,WAAO,KAAP;EACD;;EACDC,EAAAA,0BAA0B,GAAG;EAC3B,WAAO,KAAKhB,wBAAZ;EACD;;EACDiB,EAAAA,oBAAoB,CAACC,mBAAD,EAAsB;EACxC,SAAKV,oBAAL,GAA4BU,mBAA5B;EACD;;EACDC,EAAAA,6BAA6B,GAAG;EAC9B,WAAO,KAAKpB,kBAAZ;EACD;;EACDqB,EAAAA,uBAAuB,CAAC/5B,EAAD,EAAKg6B,QAAL,EAAe;EACpC,SAAK,IAAI14D,CAAC,GAAG04D,QAAQ,CAACnxD,QAAT,EAAb,EAAkCvH,CAAC,CAACmJ,OAAF,EAAlC,GAAiD;EAC/C,YAAMk1C,IAAI,GAAGr+C,CAAC,CAACkJ,IAAF,EAAb;EACA,YAAM+c,EAAE,GAAGo4B,IAAI,CAAC/0C,aAAL,EAAX;EACA,UAAIo1B,EAAE,CAACtC,cAAH,CAAkBnW,EAAlB,CAAJ,EAA2B,OAAO,IAAP;EAC5B;;EACD,WAAO,KAAP;EACD;;EACD0yC,EAAAA,qBAAqB,GAAG;EACtB,WAAO,KAAKxB,UAAZ;EACD;;EACDx7B,EAAAA,eAAe,GAAG;EAChB,WAAO,KAAKu7B,gBAAZ;EACD;;EACDrsD,EAAAA,MAAM,GAAG;EACP,WAAO,KAAKyqC,OAAZ;EACD;;EACDsjB,EAAAA,eAAe,CAACl6B,EAAD,EAAKg6B,QAAL,EAAe;EAC5B,QAAIA,QAAQ,KAAK,IAAjB,EAAuB,OAAO,KAAP;EACvB,QAAI,KAAKD,uBAAL,CAA6B/5B,EAA7B,EAAiCg6B,QAAQ,CAAC,CAAD,CAAzC,CAAJ,EAAmD,OAAO,IAAP;EACnD,QAAI,KAAKD,uBAAL,CAA6B/5B,EAA7B,EAAiCg6B,QAAQ,CAAC,CAAD,CAAzC,CAAJ,EAAmD,OAAO,IAAP;EACnD,WAAO,KAAP;EACD;;EACDG,EAAAA,gBAAgB,CAACC,SAAD,EAAYC,SAAZ,EAAuB;EACrC,SAAKnB,SAAL,GAAiB,IAAI9tD,KAAJ,CAAU,CAAV,EAAaC,IAAb,CAAkB,IAAlB,CAAjB;EACA,SAAK6tD,SAAL,CAAe,CAAf,IAAoBkB,SAApB;EACA,SAAKlB,SAAL,CAAe,CAAf,IAAoBmB,SAApB;EACD;;EACDC,EAAAA,gBAAgB,CAACtI,EAAD,EAAKwH,SAAL,EAAgBvH,EAAhB,EAAoBwH,SAApB,EAA+B;EAC7C,QAAIzH,EAAE,KAAKC,EAAP,IAAauH,SAAS,KAAKC,SAA/B,EAA0C,OAAO,IAAP;EAC1C,SAAKR,QAAL;EACA,UAAMsB,GAAG,GAAGvI,EAAE,CAACtrC,cAAH,GAAoB8yC,SAApB,CAAZ;EACA,UAAMgB,GAAG,GAAGxI,EAAE,CAACtrC,cAAH,GAAoB8yC,SAAS,GAAG,CAAhC,CAAZ;EACA,UAAMiB,GAAG,GAAGxI,EAAE,CAACvrC,cAAH,GAAoB+yC,SAApB,CAAZ;EACA,UAAMiB,GAAG,GAAGzI,EAAE,CAACvrC,cAAH,GAAoB+yC,SAAS,GAAG,CAAhC,CAAZ;;EACA,SAAKb,GAAL,CAASp8B,mBAAT,CAA6B+9B,GAA7B,EAAkCC,GAAlC,EAAuCC,GAAvC,EAA4CC,GAA5C;;EACA,QAAI,KAAK9B,GAAL,CAAS37B,eAAT,EAAJ,EAAgC;EAC9B,UAAI,KAAK67B,eAAT,EAA0B;EACxB9G,QAAAA,EAAE,CAAC2I,WAAH,CAAe,KAAf;EACA1I,QAAAA,EAAE,CAAC0I,WAAH,CAAe,KAAf;EACD;;EACD,WAAK3B,iBAAL;;EACA,UAAI,CAAC,KAAKO,qBAAL,CAA2BvH,EAA3B,EAA+BwH,SAA/B,EAA0CvH,EAA1C,EAA8CwH,SAA9C,CAAL,EAA+D;EAC7D,aAAKjB,gBAAL,GAAwB,IAAxB;;EACA,YAAI,KAAKK,cAAL,IAAuB,CAAC,KAAKD,GAAL,CAAS57B,QAAT,EAA5B,EAAiD;EAC/Cg1B,UAAAA,EAAE,CAACsI,gBAAH,CAAoB,KAAK1B,GAAzB,EAA8BY,SAA9B,EAAyC,CAAzC;EACAvH,UAAAA,EAAE,CAACqI,gBAAH,CAAoB,KAAK1B,GAAzB,EAA8Ba,SAA9B,EAAyC,CAAzC;EACD;;EACD,YAAI,KAAKb,GAAL,CAAS57B,QAAT,EAAJ,EAAyB;EACvB,eAAK27B,wBAAL,GAAgC,KAAKC,GAAL,CAASv7B,eAAT,CAAyB,CAAzB,EAA4Bx2B,IAA5B,EAAhC;EACA,eAAK4xD,UAAL,GAAkB,IAAlB;EACA,cAAI,KAAKU,oBAAT,EACE,KAAKviB,OAAL,GAAe,IAAf;EAEF,cAAI,CAAC,KAAKsjB,eAAL,CAAqB,KAAKtB,GAA1B,EAA+B,KAAKM,SAApC,CAAL,EAAqD,KAAKR,kBAAL,GAA0B,IAA1B;EACtD;EACF;EACF;EACF;;EA3GqC;;ECQzB,MAAMkC,4BAAN,SAA2CtC,kBAA3C,CAA8D;EAC3E33D,EAAAA,WAAW,GAAG;EACZ;EACAi6D,IAAAA,4BAA4B,CAAC52D,YAA7B,CAA0CC,KAA1C,CAAgD,IAAhD,EAAsDC,SAAtD;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK62D,MAAL,GAAc,IAAIvxD,SAAJ,EAAd;EACA,SAAKwxD,SAAL,GAAiB,IAAjB;EACD;;EACDC,EAAAA,aAAa,GAAG;EACd/kB,IAAAA,WAAW,CAAChsC,IAAZ,CAAiB,KAAK6wD,MAAtB;;EACA,SAAK,IAAIv5D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKu5D,MAAL,CAAY/xD,IAAZ,EAApB,EAAwCxH,CAAC,EAAzC,EAA6C;EAC3C,YAAM82D,EAAE,GAAG,KAAKyC,MAAL,CAAY1xD,GAAZ,CAAgB7H,CAAhB,CAAX;EACA,UAAI82D,EAAE,CAACR,QAAH,EAAJ,EACEQ,EAAE,CAACH,cAAH,GAAoBJ,mBAApB,CAAwCv2D,CAAxC;EAEH;EACF;;EACDu1D,EAAAA,oBAAoB,GAAG;EACrB,QAAI3yD,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAM4yD,EAAE,GAAG7yD,SAAS,CAAC,CAAD,CAApB;EACA,WAAK42D,SAAL,GAAiB,CAAjB;EACA,WAAKC,aAAL;;EACA,WAAK,IAAIz5D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKu5D,MAAL,CAAY/xD,IAAZ,EAApB,EAAwCxH,CAAC,EAAzC,EAA6C;EAC3C,cAAM82D,EAAE,GAAG,KAAKyC,MAAL,CAAY1xD,GAAZ,CAAgB7H,CAAhB,CAAX;EACA,YAAI82D,EAAE,CAACF,QAAH,EAAJ,EACE,KAAK8C,eAAL,CAAqB15D,CAArB,EAAwB82D,EAAE,CAACC,mBAAH,EAAxB,EAAkDD,EAAlD,EAAsDrB,EAAtD;EAEF,YAAIA,EAAE,CAAC5qD,MAAH,EAAJ,EACE;EAEH;EACF,KAbD,MAaO,IAAIjI,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,UAAID,SAAS,CAAC,CAAD,CAAT,YAAwBq0D,kBAAxB,IAA+C1tD,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAegF,IAAf,CAAZ,IAAoC2B,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAegF,IAAf,CAAnG,EAA0H;EACxH,cAAM+xD,MAAM,GAAG/2D,SAAS,CAAC,CAAD,CAAxB;EAAA,cAA6Bg3D,MAAM,GAAGh3D,SAAS,CAAC,CAAD,CAA/C;EAAA,cAAoD6yD,EAAE,GAAG7yD,SAAS,CAAC,CAAD,CAAlE;EACA,aAAKi3D,QAAL,CAAcF,MAAd,EAAsBA,MAAtB;EACA,aAAKE,QAAL,CAAcD,MAAd,EAAsBA,MAAtB;EACA,aAAKrE,oBAAL,CAA0BE,EAA1B;EACD,OALD,MAKO,IAAI,OAAO7yD,SAAS,CAAC,CAAD,CAAhB,KAAwB,SAAxB,IAAsC2G,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAegF,IAAf,CAAZ,IAAoChF,SAAS,CAAC,CAAD,CAAT,YAAwBq0D,kBAAtG,EAA2H;EAChI,cAAMpC,KAAK,GAAGjyD,SAAS,CAAC,CAAD,CAAvB;EAAA,cAA4B6yD,EAAE,GAAG7yD,SAAS,CAAC,CAAD,CAA1C;EAAA,cAA+Ck3D,eAAe,GAAGl3D,SAAS,CAAC,CAAD,CAA1E;EACA,YAAIk3D,eAAJ,EAAqB,KAAKD,QAAL,CAAchF,KAAd,EAAqB,IAArB,EAArB,KAAsD,KAAKgF,QAAL,CAAchF,KAAd;EACtD,aAAKU,oBAAL,CAA0BE,EAA1B;EACD;EACF;EACF;;EACDpC,EAAAA,OAAO,CAAC0G,IAAD,EAAOC,OAAP,EAAgB;EACrB,UAAM3E,GAAG,GAAG0E,IAAI,CAACE,oBAAL,EAAZ;EACA,UAAMzM,UAAU,GAAG6H,GAAG,CAAC6E,eAAJ,EAAnB;;EACA,SAAK,IAAIl6D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGwtD,UAAU,CAAC3qD,MAAX,GAAoB,CAAxC,EAA2C7C,CAAC,EAA5C,EAAgD;EAC9C,YAAMw1D,EAAE,GAAG,IAAIJ,aAAJ,CAAkBC,GAAlB,EAAuBr1D,CAAvB,CAAX;EACA,YAAMk2D,WAAW,GAAG,IAAIP,cAAJ,CAAmBqE,OAAnB,EAA4B3E,GAAG,CAACzoD,OAAJ,CAAY5M,CAAZ,CAA5B,EAA4Cw1D,EAA5C,CAApB;EACA,WAAK+D,MAAL,CAAYnyD,GAAZ,CAAgB8uD,WAAhB;EACA,WAAKqD,MAAL,CAAYnyD,GAAZ,CAAgB,IAAIuuD,cAAJ,CAAmBN,GAAG,CAAC3oD,OAAJ,CAAY1M,CAAZ,CAAnB,EAAmCk2D,WAAnC,CAAhB;EACD;EACF;;EACDwD,EAAAA,eAAe,CAACrvD,KAAD,EAAQC,GAAR,EAAa6vD,GAAb,EAAkB1E,EAAlB,EAAsB;EACnC,UAAM2E,GAAG,GAAGD,GAAG,CAAC1D,SAAJ,EAAZ;;EACA,SAAK,IAAIz2D,CAAC,GAAGqK,KAAb,EAAoBrK,CAAC,GAAGsK,GAAxB,EAA6BtK,CAAC,EAA9B,EAAkC;EAChC,YAAMq6D,GAAG,GAAG,KAAKd,MAAL,CAAY1xD,GAAZ,CAAgB7H,CAAhB,CAAZ;;EACA,UAAIq6D,GAAG,CAACzD,QAAJ,EAAJ,EAAoB;EAClB,cAAM0D,GAAG,GAAGD,GAAG,CAAC5D,SAAJ,EAAZ;;EACA,YAAI,CAAC0D,GAAG,CAACtD,WAAJ,CAAgBwD,GAAhB,CAAL,EAA2B;EACzBD,UAAAA,GAAG,CAAC7E,oBAAJ,CAAyB+E,GAAzB,EAA8B7E,EAA9B;EACA,eAAK+D,SAAL;EACD;EACF;EACF;EACF;;EACDK,EAAAA,QAAQ,GAAG;EACT,QAAIj3D,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMgyD,KAAK,GAAGjyD,SAAS,CAAC,CAAD,CAAvB;;EACA,WAAK,IAAI5C,CAAC,GAAG60D,KAAK,CAACttD,QAAN,EAAb,EAA+BvH,CAAC,CAACmJ,OAAF,EAA/B,GAA8C;EAC5C,cAAM4wD,IAAI,GAAG/5D,CAAC,CAACkJ,IAAF,EAAb;EACA,aAAKmqD,OAAL,CAAa0G,IAAb,EAAmBA,IAAnB;EACD;EACF,KAND,MAMO,IAAIn3D,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMgyD,KAAK,GAAGjyD,SAAS,CAAC,CAAD,CAAvB;EAAA,YAA4Bo3D,OAAO,GAAGp3D,SAAS,CAAC,CAAD,CAA/C;;EACA,WAAK,IAAI5C,CAAC,GAAG60D,KAAK,CAACttD,QAAN,EAAb,EAA+BvH,CAAC,CAACmJ,OAAF,EAA/B,GAA8C;EAC5C,cAAM4wD,IAAI,GAAG/5D,CAAC,CAACkJ,IAAF,EAAb;EACA,aAAKmqD,OAAL,CAAa0G,IAAb,EAAmBC,OAAnB;EACD;EACF;EACF;;EAlF0E;;ECL9D,MAAMO,gBAAN,CAAuB;EACpCl7D,EAAAA,WAAW,GAAG;EACZk7D,IAAAA,gBAAgB,CAAC73D,YAAjB,CAA8BC,KAA9B,CAAoC,IAApC,EAA0CC,SAA1C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK83D,QAAL,GAAgB,IAAhB;;EACA,QAAI53D,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,UAAID,SAAS,CAAC,CAAD,CAAT,YAAwBkH,KAA5B,EAAmC;EACjC,cAAM0wD,QAAQ,GAAG53D,SAAS,CAAC,CAAD,CAA1B;EACA,aAAKwI,IAAL,CAAUovD,QAAQ,CAAC33D,MAAnB;EACD,OAHD,MAGO,IAAItC,MAAM,CAAC4J,SAAP,CAAiBvH,SAAS,CAAC,CAAD,CAA1B,CAAJ,EAAoC;EACzC,cAAM63D,EAAE,GAAG73D,SAAS,CAAC,CAAD,CAApB;EACA,aAAKwI,IAAL,CAAU,CAAV;EACA,aAAKovD,QAAL,CAAcvF,QAAQ,CAACE,EAAvB,IAA6BsF,EAA7B;EACD,OAJM,MAIA,IAAI73D,SAAS,CAAC,CAAD,CAAT,YAAwB23D,gBAA5B,EAA8C;EACnD,cAAMG,EAAE,GAAG93D,SAAS,CAAC,CAAD,CAApB;EACA,aAAKwI,IAAL,CAAUsvD,EAAE,CAACF,QAAH,CAAY33D,MAAtB;EACA,YAAI63D,EAAE,KAAK,IAAX,EACE,KAAK,IAAI16D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKw6D,QAAL,CAAc33D,MAAlC,EAA0C7C,CAAC,EAA3C,EACE,KAAKw6D,QAAL,CAAcx6D,CAAd,IAAmB06D,EAAE,CAACF,QAAH,CAAYx6D,CAAZ,CAAnB;EAGL;EACF,KAjBD,MAiBO,IAAI4C,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAM43D,EAAE,GAAG73D,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyB+3D,IAAI,GAAG/3D,SAAS,CAAC,CAAD,CAAzC;EAAA,YAA8Cg4D,KAAK,GAAGh4D,SAAS,CAAC,CAAD,CAA/D;EACA,WAAKwI,IAAL,CAAU,CAAV;EACA,WAAKovD,QAAL,CAAcvF,QAAQ,CAACE,EAAvB,IAA6BsF,EAA7B;EACA,WAAKD,QAAL,CAAcvF,QAAQ,CAACz7C,IAAvB,IAA+BmhD,IAA/B;EACA,WAAKH,QAAL,CAAcvF,QAAQ,CAAC37C,KAAvB,IAAgCshD,KAAhC;EACD;EACF;;EACDC,EAAAA,eAAe,CAACC,QAAD,EAAW;EACxB,SAAK,IAAI96D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKw6D,QAAL,CAAc33D,MAAlC,EAA0C7C,CAAC,EAA3C,EACE,KAAKw6D,QAAL,CAAcx6D,CAAd,IAAmB86D,QAAnB;EAEH;;EACDruD,EAAAA,MAAM,GAAG;EACP,SAAK,IAAIzM,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKw6D,QAAL,CAAc33D,MAAlC,EAA0C7C,CAAC,EAA3C,EACE,IAAI,KAAKw6D,QAAL,CAAcx6D,CAAd,MAAqB2hC,QAAQ,CAACM,IAAlC,EAAwC,OAAO,KAAP;;EAE1C,WAAO,IAAP;EACD;;EACD84B,EAAAA,qBAAqB,CAACD,QAAD,EAAW;EAC9B,SAAK,IAAI96D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKw6D,QAAL,CAAc33D,MAAlC,EAA0C7C,CAAC,EAA3C,EACE,IAAI,KAAKw6D,QAAL,CAAcx6D,CAAd,MAAqB2hC,QAAQ,CAACM,IAAlC,EAAwC,KAAKu4B,QAAL,CAAcx6D,CAAd,IAAmB86D,QAAnB;EAE3C;;EACDE,EAAAA,MAAM,GAAG;EACP,WAAO,KAAKR,QAAL,CAAc33D,MAAd,KAAyB,CAAhC;EACD;;EACDo4D,EAAAA,KAAK,CAACP,EAAD,EAAK;EACR,QAAIA,EAAE,CAACF,QAAH,CAAY33D,MAAZ,GAAqB,KAAK23D,QAAL,CAAc33D,MAAvC,EAA+C;EAC7C,YAAMq4D,MAAM,GAAG,IAAIpxD,KAAJ,CAAU,CAAV,EAAaC,IAAb,CAAkB,IAAlB,CAAf;EACAmxD,MAAAA,MAAM,CAACjG,QAAQ,CAACE,EAAV,CAAN,GAAsB,KAAKqF,QAAL,CAAcvF,QAAQ,CAACE,EAAvB,CAAtB;EACA+F,MAAAA,MAAM,CAACjG,QAAQ,CAACz7C,IAAV,CAAN,GAAwBmoB,QAAQ,CAACM,IAAjC;EACAi5B,MAAAA,MAAM,CAACjG,QAAQ,CAAC37C,KAAV,CAAN,GAAyBqoB,QAAQ,CAACM,IAAlC;EACA,WAAKu4B,QAAL,GAAgBU,MAAhB;EACD;;EACD,SAAK,IAAIl7D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKw6D,QAAL,CAAc33D,MAAlC,EAA0C7C,CAAC,EAA3C,EACE,IAAI,KAAKw6D,QAAL,CAAcx6D,CAAd,MAAqB2hC,QAAQ,CAACM,IAA9B,IAAsCjiC,CAAC,GAAG06D,EAAE,CAACF,QAAH,CAAY33D,MAA1D,EAAkE,KAAK23D,QAAL,CAAcx6D,CAAd,IAAmB06D,EAAE,CAACF,QAAH,CAAYx6D,CAAZ,CAAnB;EAErE;;EACDm7D,EAAAA,YAAY,GAAG;EACb,WAAO,KAAKX,QAAZ;EACD;;EACDY,EAAAA,IAAI,GAAG;EACL,QAAI,KAAKZ,QAAL,CAAc33D,MAAd,IAAwB,CAA5B,EAA+B,OAAO,IAAP;EAC/B,UAAMk9B,IAAI,GAAG,KAAKy6B,QAAL,CAAcvF,QAAQ,CAACz7C,IAAvB,CAAb;EACA,SAAKghD,QAAL,CAAcvF,QAAQ,CAACz7C,IAAvB,IAA+B,KAAKghD,QAAL,CAAcvF,QAAQ,CAAC37C,KAAvB,CAA/B;EACA,SAAKkhD,QAAL,CAAcvF,QAAQ,CAAC37C,KAAvB,IAAgCymB,IAAhC;EACD;;EACDrgC,EAAAA,QAAQ,GAAG;EACT,UAAMuS,GAAG,GAAG,IAAIzD,YAAJ,EAAZ;EACA,QAAI,KAAKgsD,QAAL,CAAc33D,MAAd,GAAuB,CAA3B,EAA8BoP,GAAG,CAACvD,MAAJ,CAAWizB,QAAQ,CAACC,gBAAT,CAA0B,KAAK44B,QAAL,CAAcvF,QAAQ,CAACz7C,IAAvB,CAA1B,CAAX;EAC9BvH,IAAAA,GAAG,CAACvD,MAAJ,CAAWizB,QAAQ,CAACC,gBAAT,CAA0B,KAAK44B,QAAL,CAAcvF,QAAQ,CAACE,EAAvB,CAA1B,CAAX;EACA,QAAI,KAAKqF,QAAL,CAAc33D,MAAd,GAAuB,CAA3B,EAA8BoP,GAAG,CAACvD,MAAJ,CAAWizB,QAAQ,CAACC,gBAAT,CAA0B,KAAK44B,QAAL,CAAcvF,QAAQ,CAAC37C,KAAvB,CAA1B,CAAX;EAC9B,WAAOrH,GAAG,CAACvS,QAAJ,EAAP;EACD;;EACD27D,EAAAA,YAAY,CAACZ,EAAD,EAAKE,IAAL,EAAWC,KAAX,EAAkB;EAC5B,SAAKJ,QAAL,CAAcvF,QAAQ,CAACE,EAAvB,IAA6BsF,EAA7B;EACA,SAAKD,QAAL,CAAcvF,QAAQ,CAACz7C,IAAvB,IAA+BmhD,IAA/B;EACA,SAAKH,QAAL,CAAcvF,QAAQ,CAAC37C,KAAvB,IAAgCshD,KAAhC;EACD;;EACD/yD,EAAAA,GAAG,CAACyzD,QAAD,EAAW;EACZ,QAAIA,QAAQ,GAAG,KAAKd,QAAL,CAAc33D,MAA7B,EAAqC,OAAO,KAAK23D,QAAL,CAAcc,QAAd,CAAP;EACrC,WAAO35B,QAAQ,CAACM,IAAhB;EACD;;EACDs5B,EAAAA,MAAM,GAAG;EACP,WAAO,KAAKf,QAAL,CAAc33D,MAAd,GAAuB,CAA9B;EACD;;EACD24D,EAAAA,SAAS,GAAG;EACV,SAAK,IAAIx7D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKw6D,QAAL,CAAc33D,MAAlC,EAA0C7C,CAAC,EAA3C,EACE,IAAI,KAAKw6D,QAAL,CAAcx6D,CAAd,MAAqB2hC,QAAQ,CAACM,IAAlC,EAAwC,OAAO,IAAP;;EAE1C,WAAO,KAAP;EACD;;EACDw5B,EAAAA,WAAW,GAAG;EACZ,QAAI74D,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMi4D,QAAQ,GAAGl4D,SAAS,CAAC,CAAD,CAA1B;EACA,WAAK64D,WAAL,CAAiBxG,QAAQ,CAACE,EAA1B,EAA8B2F,QAA9B;EACD,KAHD,MAGO,IAAIl4D,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAM64D,QAAQ,GAAG94D,SAAS,CAAC,CAAD,CAA1B;EAAA,YAA+Bk4D,QAAQ,GAAGl4D,SAAS,CAAC,CAAD,CAAnD;EACA,WAAK43D,QAAL,CAAckB,QAAd,IAA0BZ,QAA1B;EACD;EACF;;EACD1vD,EAAAA,IAAI,CAAC5D,IAAD,EAAO;EACT,SAAKgzD,QAAL,GAAgB,IAAI1wD,KAAJ,CAAUtC,IAAV,EAAgBuC,IAAhB,CAAqB,IAArB,CAAhB;EACA,SAAK8wD,eAAL,CAAqBl5B,QAAQ,CAACM,IAA9B;EACD;;EACD05B,EAAAA,aAAa,CAACzpD,EAAD,EAAKwpD,QAAL,EAAe;EAC1B,WAAO,KAAKlB,QAAL,CAAckB,QAAd,MAA4BxpD,EAAE,CAACsoD,QAAH,CAAYkB,QAAZ,CAAnC;EACD;;EACDE,EAAAA,iBAAiB,CAAC5a,GAAD,EAAM;EACrB,SAAK,IAAIhhD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKw6D,QAAL,CAAc33D,MAAlC,EAA0C7C,CAAC,EAA3C,EACE,IAAI,KAAKw6D,QAAL,CAAcx6D,CAAd,MAAqBghD,GAAzB,EAA8B,OAAO,KAAP;;EAEhC,WAAO,IAAP;EACD;;EArHmC;;ECCvB,MAAM6a,KAAN,CAAY;EACzBx8D,EAAAA,WAAW,GAAG;EACZw8D,IAAAA,KAAK,CAACn5D,YAAN,CAAmBC,KAAnB,CAAyB,IAAzB,EAA+BC,SAA/B;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKo5D,GAAL,GAAW,IAAIhyD,KAAJ,CAAU,CAAV,EAAaC,IAAb,CAAkB,IAAlB,CAAX;;EACA,QAAInH,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,UAAItC,MAAM,CAAC4J,SAAP,CAAiBvH,SAAS,CAAC,CAAD,CAA1B,CAAJ,EAAoC;EAClC,cAAMm5D,KAAK,GAAGn5D,SAAS,CAAC,CAAD,CAAvB;EACA,aAAKk5D,GAAL,CAAS,CAAT,IAAc,IAAIvB,gBAAJ,CAAqBwB,KAArB,CAAd;EACA,aAAKD,GAAL,CAAS,CAAT,IAAc,IAAIvB,gBAAJ,CAAqBwB,KAArB,CAAd;EACD,OAJD,MAIO,IAAIn5D,SAAS,CAAC,CAAD,CAAT,YAAwBi5D,KAA5B,EAAmC;EACxC,cAAMG,GAAG,GAAGp5D,SAAS,CAAC,CAAD,CAArB;EACA,aAAKk5D,GAAL,CAAS,CAAT,IAAc,IAAIvB,gBAAJ,CAAqByB,GAAG,CAACF,GAAJ,CAAQ,CAAR,CAArB,CAAd;EACA,aAAKA,GAAL,CAAS,CAAT,IAAc,IAAIvB,gBAAJ,CAAqByB,GAAG,CAACF,GAAJ,CAAQ,CAAR,CAArB,CAAd;EACD;EACF,KAVD,MAUO,IAAIl5D,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMo5D,SAAS,GAAGr5D,SAAS,CAAC,CAAD,CAA3B;EAAA,YAAgCm5D,KAAK,GAAGn5D,SAAS,CAAC,CAAD,CAAjD;EACA,WAAKk5D,GAAL,CAAS,CAAT,IAAc,IAAIvB,gBAAJ,CAAqB54B,QAAQ,CAACM,IAA9B,CAAd;EACA,WAAK65B,GAAL,CAAS,CAAT,IAAc,IAAIvB,gBAAJ,CAAqB54B,QAAQ,CAACM,IAA9B,CAAd;EACA,WAAK65B,GAAL,CAASG,SAAT,EAAoBR,WAApB,CAAgCM,KAAhC;EACD,KALM,MAKA,IAAIn5D,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMk5D,KAAK,GAAGn5D,SAAS,CAAC,CAAD,CAAvB;EAAA,YAA4Bs5D,OAAO,GAAGt5D,SAAS,CAAC,CAAD,CAA/C;EAAA,YAAoDu5D,QAAQ,GAAGv5D,SAAS,CAAC,CAAD,CAAxE;EACA,WAAKk5D,GAAL,CAAS,CAAT,IAAc,IAAIvB,gBAAJ,CAAqBwB,KAArB,EAA4BG,OAA5B,EAAqCC,QAArC,CAAd;EACA,WAAKL,GAAL,CAAS,CAAT,IAAc,IAAIvB,gBAAJ,CAAqBwB,KAArB,EAA4BG,OAA5B,EAAqCC,QAArC,CAAd;EACD,KAJM,MAIA,IAAIv5D,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMo5D,SAAS,GAAGr5D,SAAS,CAAC,CAAD,CAA3B;EAAA,YAAgCm5D,KAAK,GAAGn5D,SAAS,CAAC,CAAD,CAAjD;EAAA,YAAsDs5D,OAAO,GAAGt5D,SAAS,CAAC,CAAD,CAAzE;EAAA,YAA8Eu5D,QAAQ,GAAGv5D,SAAS,CAAC,CAAD,CAAlG;EACA,WAAKk5D,GAAL,CAAS,CAAT,IAAc,IAAIvB,gBAAJ,CAAqB54B,QAAQ,CAACM,IAA9B,EAAoCN,QAAQ,CAACM,IAA7C,EAAmDN,QAAQ,CAACM,IAA5D,CAAd;EACA,WAAK65B,GAAL,CAAS,CAAT,IAAc,IAAIvB,gBAAJ,CAAqB54B,QAAQ,CAACM,IAA9B,EAAoCN,QAAQ,CAACM,IAA7C,EAAmDN,QAAQ,CAACM,IAA5D,CAAd;EACA,WAAK65B,GAAL,CAASG,SAAT,EAAoBZ,YAApB,CAAiCU,KAAjC,EAAwCG,OAAxC,EAAiDC,QAAjD;EACD;EACF;;EACD,SAAOC,WAAP,CAAmBhG,KAAnB,EAA0B;EACxB,UAAMiG,SAAS,GAAG,IAAIR,KAAJ,CAAUl6B,QAAQ,CAACM,IAAnB,CAAlB;;EACA,SAAK,IAAIjiC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,CAApB,EAAuBA,CAAC,EAAxB,EACEq8D,SAAS,CAACZ,WAAV,CAAsBz7D,CAAtB,EAAyBo2D,KAAK,CAACnX,WAAN,CAAkBj/C,CAAlB,CAAzB;;EAEF,WAAOq8D,SAAP;EACD;;EACDC,EAAAA,gBAAgB,GAAG;EACjB,QAAIC,KAAK,GAAG,CAAZ;EACA,QAAI,CAAC,KAAKT,GAAL,CAAS,CAAT,EAAYrvD,MAAZ,EAAL,EAA2B8vD,KAAK;EAChC,QAAI,CAAC,KAAKT,GAAL,CAAS,CAAT,EAAYrvD,MAAZ,EAAL,EAA2B8vD,KAAK;EAChC,WAAOA,KAAP;EACD;;EACD1B,EAAAA,eAAe,CAACoB,SAAD,EAAYzB,QAAZ,EAAsB;EACnC,SAAKsB,GAAL,CAASG,SAAT,EAAoBpB,eAApB,CAAoCL,QAApC;EACD;;EACD/tD,EAAAA,MAAM,CAACwvD,SAAD,EAAY;EAChB,WAAO,KAAKH,GAAL,CAASG,SAAT,EAAoBxvD,MAApB,EAAP;EACD;;EACDsuD,EAAAA,qBAAqB,GAAG;EACtB,QAAIn4D,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAM23D,QAAQ,GAAG53D,SAAS,CAAC,CAAD,CAA1B;EACA,WAAKm4D,qBAAL,CAA2B,CAA3B,EAA8BP,QAA9B;EACA,WAAKO,qBAAL,CAA2B,CAA3B,EAA8BP,QAA9B;EACD,KAJD,MAIO,IAAI53D,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMo5D,SAAS,GAAGr5D,SAAS,CAAC,CAAD,CAA3B;EAAA,YAAgC43D,QAAQ,GAAG53D,SAAS,CAAC,CAAD,CAApD;EACA,WAAKk5D,GAAL,CAASG,SAAT,EAAoBlB,qBAApB,CAA0CP,QAA1C;EACD;EACF;;EACDQ,EAAAA,MAAM,CAACiB,SAAD,EAAY;EAChB,WAAO,KAAKH,GAAL,CAASG,SAAT,EAAoBjB,MAApB,EAAP;EACD;;EACDC,EAAAA,KAAK,CAACe,GAAD,EAAM;EACT,SAAK,IAAIh8D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,CAApB,EAAuBA,CAAC,EAAxB,EACE,IAAI,KAAK87D,GAAL,CAAS97D,CAAT,MAAgB,IAAhB,IAAwBg8D,GAAG,CAACF,GAAJ,CAAQ97D,CAAR,MAAe,IAA3C,EACE,KAAK87D,GAAL,CAAS97D,CAAT,IAAc,IAAIu6D,gBAAJ,CAAqByB,GAAG,CAACF,GAAJ,CAAQ97D,CAAR,CAArB,CAAd,CADF,KAGE,KAAK87D,GAAL,CAAS97D,CAAT,EAAYi7D,KAAZ,CAAkBe,GAAG,CAACF,GAAJ,CAAQ97D,CAAR,CAAlB;EAGL;;EACDo7D,EAAAA,IAAI,GAAG;EACL,SAAKU,GAAL,CAAS,CAAT,EAAYV,IAAZ;EACA,SAAKU,GAAL,CAAS,CAAT,EAAYV,IAAZ;EACD;;EACDnc,EAAAA,WAAW,GAAG;EACZ,QAAIr8C,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMo5D,SAAS,GAAGr5D,SAAS,CAAC,CAAD,CAA3B;EACA,aAAO,KAAKk5D,GAAL,CAASG,SAAT,EAAoBp0D,GAApB,CAAwBotD,QAAQ,CAACE,EAAjC,CAAP;EACD,KAHD,MAGO,IAAIvyD,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMo5D,SAAS,GAAGr5D,SAAS,CAAC,CAAD,CAA3B;EAAA,YAAgC04D,QAAQ,GAAG14D,SAAS,CAAC,CAAD,CAApD;EACA,aAAO,KAAKk5D,GAAL,CAASG,SAAT,EAAoBp0D,GAApB,CAAwByzD,QAAxB,CAAP;EACD;EACF;;EACD57D,EAAAA,QAAQ,GAAG;EACT,UAAMuS,GAAG,GAAG,IAAIzD,YAAJ,EAAZ;;EACA,QAAI,KAAKstD,GAAL,CAAS,CAAT,MAAgB,IAApB,EAA0B;EACxB7pD,MAAAA,GAAG,CAACvD,MAAJ,CAAW,IAAX;EACAuD,MAAAA,GAAG,CAACvD,MAAJ,CAAW,KAAKotD,GAAL,CAAS,CAAT,EAAYp8D,QAAZ,EAAX;EACD;;EACD,QAAI,KAAKo8D,GAAL,CAAS,CAAT,MAAgB,IAApB,EAA0B;EACxB7pD,MAAAA,GAAG,CAACvD,MAAJ,CAAW,KAAX;EACAuD,MAAAA,GAAG,CAACvD,MAAJ,CAAW,KAAKotD,GAAL,CAAS,CAAT,EAAYp8D,QAAZ,EAAX;EACD;;EACD,WAAOuS,GAAG,CAACvS,QAAJ,EAAP;EACD;;EACD67D,EAAAA,MAAM,GAAG;EACP,QAAI34D,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,aAAO,KAAKi5D,GAAL,CAAS,CAAT,EAAYP,MAAZ,MAAwB,KAAKO,GAAL,CAAS,CAAT,EAAYP,MAAZ,EAA/B;EACD,KAFD,MAEO,IAAI34D,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMo5D,SAAS,GAAGr5D,SAAS,CAAC,CAAD,CAA3B;EACA,aAAO,KAAKk5D,GAAL,CAASG,SAAT,EAAoBV,MAApB,EAAP;EACD;EACF;;EACDC,EAAAA,SAAS,CAACS,SAAD,EAAY;EACnB,WAAO,KAAKH,GAAL,CAASG,SAAT,EAAoBT,SAApB,EAAP;EACD;;EACDC,EAAAA,WAAW,GAAG;EACZ,QAAI74D,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMo5D,SAAS,GAAGr5D,SAAS,CAAC,CAAD,CAA3B;EAAA,YAAgC43D,QAAQ,GAAG53D,SAAS,CAAC,CAAD,CAApD;EACA,WAAKk5D,GAAL,CAASG,SAAT,EAAoBR,WAApB,CAAgCxG,QAAQ,CAACE,EAAzC,EAA6CqF,QAA7C;EACD,KAHD,MAGO,IAAI53D,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMo5D,SAAS,GAAGr5D,SAAS,CAAC,CAAD,CAA3B;EAAA,YAAgC04D,QAAQ,GAAG14D,SAAS,CAAC,CAAD,CAApD;EAAA,YAAyD43D,QAAQ,GAAG53D,SAAS,CAAC,CAAD,CAA7E;EACA,WAAKk5D,GAAL,CAASG,SAAT,EAAoBR,WAApB,CAAgCH,QAAhC,EAA0Cd,QAA1C;EACD;EACF;;EACDmB,EAAAA,aAAa,CAACK,GAAD,EAAMQ,IAAN,EAAY;EACvB,WAAO,KAAKV,GAAL,CAAS,CAAT,EAAYH,aAAZ,CAA0BK,GAAG,CAACF,GAAJ,CAAQ,CAAR,CAA1B,EAAsCU,IAAtC,KAA+C,KAAKV,GAAL,CAAS,CAAT,EAAYH,aAAZ,CAA0BK,GAAG,CAACF,GAAJ,CAAQ,CAAR,CAA1B,EAAsCU,IAAtC,CAAtD;EACD;;EACDZ,EAAAA,iBAAiB,CAACK,SAAD,EAAYjb,GAAZ,EAAiB;EAChC,WAAO,KAAK8a,GAAL,CAASG,SAAT,EAAoBL,iBAApB,CAAsC5a,GAAtC,CAAP;EACD;;EACDyb,EAAAA,MAAM,CAACR,SAAD,EAAY;EAChB,QAAI,KAAKH,GAAL,CAASG,SAAT,EAAoBV,MAApB,EAAJ,EAAkC,KAAKO,GAAL,CAASG,SAAT,IAAsB,IAAI1B,gBAAJ,CAAqB,KAAKuB,GAAL,CAASG,SAAT,EAAoBzB,QAApB,CAA6B,CAA7B,CAArB,CAAtB;EACnC;;EA9HwB;;ECFZ,MAAMkC,gBAAN,CAAuB;EACpCr9D,EAAAA,WAAW,GAAG;EACZq9D,IAAAA,gBAAgB,CAACh6D,YAAjB,CAA8BC,KAA9B,CAAoC,IAApC,EAA0CC,SAA1C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK0C,KAAL,GAAa,IAAb;EACA,SAAKu1B,YAAL,GAAoB,IAApB;EACA,SAAK5d,IAAL,GAAY,IAAZ;EACA,UAAM3X,KAAK,GAAGxC,SAAS,CAAC,CAAD,CAAvB;EAAA,UAA4B+3B,YAAY,GAAG/3B,SAAS,CAAC,CAAD,CAApD;EAAA,UAAyDma,IAAI,GAAGna,SAAS,CAAC,CAAD,CAAzE;EACA,SAAKwC,KAAL,GAAa,IAAI1B,UAAJ,CAAe0B,KAAf,CAAb;EACA,SAAKu1B,YAAL,GAAoBA,YAApB;EACA,SAAK5d,IAAL,GAAYA,IAAZ;EACD;;EACD4/C,EAAAA,eAAe,GAAG;EAChB,WAAO,KAAKhiC,YAAZ;EACD;;EACDrxB,EAAAA,aAAa,GAAG;EACd,WAAO,KAAKlE,KAAZ;EACD;;EACDw3D,EAAAA,KAAK,CAACv/B,GAAD,EAAM;EACTA,IAAAA,GAAG,CAACu/B,KAAJ,CAAU,KAAKx3D,KAAf;EACAi4B,IAAAA,GAAG,CAACu/B,KAAJ,CAAU,cAAc,KAAKjiC,YAA7B;EACA0C,IAAAA,GAAG,CAACC,OAAJ,CAAY,aAAa,KAAKvgB,IAA9B;EACD;;EACD/X,EAAAA,SAAS,CAACiF,GAAD,EAAM;EACb,UAAMzF,KAAK,GAAGyF,GAAd;EACA,WAAO,KAAK3D,OAAL,CAAa9B,KAAK,CAACm2B,YAAnB,EAAiCn2B,KAAK,CAACuY,IAAvC,CAAP;EACD;;EACDie,EAAAA,UAAU,CAAC6hC,eAAD,EAAkB;EAC1B,QAAI,KAAKliC,YAAL,KAAsB,CAAtB,IAA2B,KAAK5d,IAAL,KAAc,GAA7C,EAAkD,OAAO,IAAP;EAClD,QAAI,KAAK4d,YAAL,KAAsBkiC,eAA1B,EAA2C,OAAO,IAAP;EAC3C,WAAO,KAAP;EACD;;EACDn9D,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAK0F,KAAL,GAAa,WAAb,GAA2B,KAAKu1B,YAAhC,GAA+C,UAA/C,GAA4D,KAAK5d,IAAxE;EACD;;EACDw9B,EAAAA,WAAW,GAAG;EACZ,WAAO,KAAKx9B,IAAZ;EACD;;EACDzW,EAAAA,OAAO,CAACq0B,YAAD,EAAe5d,IAAf,EAAqB;EAC1B,QAAI,KAAK4d,YAAL,GAAoBA,YAAxB,EAAsC,OAAO,CAAC,CAAR;EACtC,QAAI,KAAKA,YAAL,GAAoBA,YAAxB,EAAsC,OAAO,CAAP;EACtC,QAAI,KAAK5d,IAAL,GAAYA,IAAhB,EAAsB,OAAO,CAAC,CAAR;EACtB,QAAI,KAAKA,IAAL,GAAYA,IAAhB,EAAsB,OAAO,CAAP;EACtB,WAAO,CAAP;EACD;;EACD,MAAI9W,WAAJ,GAAkB;EAChB,WAAO,CAAC7D,UAAD,CAAP;EACD;;EAhDmC;;ECAtC;EACA;EACA;;EACe,MAAM06D,SAAN,SAAwBtuC,KAAxB,CAA4B;;ECD3C,MAAMuuC,KAAK,GAAG,CAAd;EACA,MAAMC,GAAG,GAAG,CAAZ;;EAEA,SAASC,OAAT,CAAiB5xD,CAAjB,EAAoB;EAClB,SAAQA,CAAC,IAAI,IAAL,GAAY0xD,KAAZ,GAAoB1xD,CAAC,CAAC6xD,KAA9B;EACD;;EACD,SAASC,QAAT,CAAkB9xD,CAAlB,EAAqB;EACnB,SAAQA,CAAC,IAAI,IAAL,GAAY,IAAZ,GAAmBA,CAAC,CAAC2nC,MAA7B;EACD;;EACD,SAASoqB,QAAT,CAAkB/xD,CAAlB,EAAqBzH,CAArB,EAAwB;EACtB,MAAIyH,CAAC,KAAK,IAAV,EAAgBA,CAAC,CAAC6xD,KAAF,GAAUt5D,CAAV;EACjB;;EACD,SAASy5D,MAAT,CAAgBhyD,CAAhB,EAAmB;EACjB,SAAQA,CAAC,IAAI,IAAL,GAAY,IAAZ,GAAmBA,CAAC,CAACsvD,IAA7B;EACD;;EACD,SAAS2C,OAAT,CAAiBjyD,CAAjB,EAAoB;EAClB,SAAQA,CAAC,IAAI,IAAL,GAAY,IAAZ,GAAmBA,CAAC,CAACuvD,KAA7B;EACD;EAED;EACA;EACA;;;EACe,MAAM2C,OAAN,SAAsBT,SAAtB,CAAgC;EAC7Cz9D,EAAAA,WAAW,GAAG;EACZ;EACA,SAAKm+D,KAAL,GAAa,IAAb;EACA,SAAKC,KAAL,GAAa,CAAb;EACD;;EAED51D,EAAAA,GAAG,CAACqnB,GAAD,EAAM;EACP,QAAI7jB,CAAC,GAAG,KAAKmyD,KAAb;;EACA,WAAOnyD,CAAC,KAAK,IAAb,EAAmB;EACjB,YAAM4nD,GAAG,GAAG/jC,GAAG,CAAClqB,SAAJ,CAAcqG,CAAC,CAAC6jB,GAAhB,CAAZ;EACA,UAAI+jC,GAAG,GAAG,CAAV,EACE5nD,CAAC,GAAGA,CAAC,CAACsvD,IAAN,CADF,KAEK,IAAI1H,GAAG,GAAG,CAAV,EACH5nD,CAAC,GAAGA,CAAC,CAACuvD,KAAN,CADG,KAEA,OAAOvvD,CAAC,CAAClK,KAAT;EACN;;EACD,WAAO,IAAP;EACD;;EAEDstB,EAAAA,GAAG,CAACS,GAAD,EAAM/tB,KAAN,EAAa;EACd,QAAI,KAAKq8D,KAAL,KAAe,IAAnB,EAAyB;EACvB,WAAKA,KAAL,GAAa;EACXtuC,QAAAA,GAAG,EAAEA,GADM;EAEX/tB,QAAAA,KAAK,EAAEA,KAFI;EAGXw5D,QAAAA,IAAI,EAAE,IAHK;EAIXC,QAAAA,KAAK,EAAE,IAJI;EAKX5nB,QAAAA,MAAM,EAAE,IALG;EAMXkqB,QAAAA,KAAK,EAAEH,KANI;;EAOXW,QAAAA,QAAQ,GAAG;EACT,iBAAO,KAAKv8D,KAAZ;EACD,SATU;;EAUXw8D,QAAAA,MAAM,GAAG;EACP,iBAAO,KAAKzuC,GAAZ;EACD;;EAZU,OAAb;EAcA,WAAKuuC,KAAL,GAAa,CAAb;EACA,aAAO,IAAP;EACD;;EACD,QAAItoD,CAAC,GAAG,KAAKqoD,KAAb;EAAoB,QAAIxqB,MAAJ;EAAY,QAAIigB,GAAJ;;EAChC,OAAG;EACDjgB,MAAAA,MAAM,GAAG79B,CAAT;EACA89C,MAAAA,GAAG,GAAG/jC,GAAG,CAAClqB,SAAJ,CAAcmQ,CAAC,CAAC+Z,GAAhB,CAAN;;EACA,UAAI+jC,GAAG,GAAG,CAAV,EAAa;EACX99C,QAAAA,CAAC,GAAGA,CAAC,CAACwlD,IAAN;EACD,OAFD,MAEO,IAAI1H,GAAG,GAAG,CAAV,EAAa;EAClB99C,QAAAA,CAAC,GAAGA,CAAC,CAACylD,KAAN;EACD,OAFM,MAEA;EACL,cAAMgD,QAAQ,GAAGzoD,CAAC,CAAChU,KAAnB;EACAgU,QAAAA,CAAC,CAAChU,KAAF,GAAUA,KAAV;EACA,eAAOy8D,QAAP;EACD;EACF,KAZD,QAYSzoD,CAAC,KAAK,IAZf;;EAaA,UAAM9P,CAAC,GAAG;EACR6pB,MAAAA,GAAG,EAAEA,GADG;EAERyrC,MAAAA,IAAI,EAAE,IAFE;EAGRC,MAAAA,KAAK,EAAE,IAHC;EAIRz5D,MAAAA,KAAK,EAAEA,KAJC;EAKR6xC,MAAAA,MAAM,EAAEA,MALA;EAMRkqB,MAAAA,KAAK,EAAEH,KANC;;EAORW,MAAAA,QAAQ,GAAG;EACT,eAAO,KAAKv8D,KAAZ;EACD,OATO;;EAURw8D,MAAAA,MAAM,GAAG;EACP,eAAO,KAAKzuC,GAAZ;EACD;;EAZO,KAAV;EAcA,QAAI+jC,GAAG,GAAG,CAAV,EACEjgB,MAAM,CAAC2nB,IAAP,GAAct1D,CAAd,CADF,KAEK2tC,MAAM,CAAC4nB,KAAP,GAAev1D,CAAf;EAEL,SAAKw4D,iBAAL,CAAuBx4D,CAAvB;EACA,SAAKo4D,KAAL;EACA,WAAO,IAAP;EACD;EAED;EACF;EACA;;;EACEI,EAAAA,iBAAiB,CAACl8D,CAAD,EAAI;EACnB,QAAIC,CAAJ;EACAD,IAAAA,CAAC,CAACu7D,KAAF,GAAUF,GAAV;;EACA,WAAOr7D,CAAC,IAAI,IAAL,IAAaA,CAAC,KAAK,KAAK67D,KAAxB,IAAiC77D,CAAC,CAACqxC,MAAF,CAASkqB,KAAT,KAAmBF,GAA3D,EACE,IAAIG,QAAQ,CAACx7D,CAAD,CAAR,KAAgB07D,MAAM,CAACF,QAAQ,CAACA,QAAQ,CAACx7D,CAAD,CAAT,CAAT,CAA1B,EAAmD;EACjDC,MAAAA,CAAC,GAAG07D,OAAO,CAACH,QAAQ,CAACA,QAAQ,CAACx7D,CAAD,CAAT,CAAT,CAAX;;EACA,UAAIs7D,OAAO,CAACr7D,CAAD,CAAP,KAAeo7D,GAAnB,EAAwB;EACtBI,QAAAA,QAAQ,CAACD,QAAQ,CAACx7D,CAAD,CAAT,EAAco7D,KAAd,CAAR;EACAK,QAAAA,QAAQ,CAACx7D,CAAD,EAAIm7D,KAAJ,CAAR;EACAK,QAAAA,QAAQ,CAACD,QAAQ,CAACA,QAAQ,CAACx7D,CAAD,CAAT,CAAT,EAAwBq7D,GAAxB,CAAR;EACAr7D,QAAAA,CAAC,GAAGw7D,QAAQ,CAACA,QAAQ,CAACx7D,CAAD,CAAT,CAAZ;EACD,OALD,MAKO;EACL,YAAIA,CAAC,KAAK27D,OAAO,CAACH,QAAQ,CAACx7D,CAAD,CAAT,CAAjB,EAAgC;EAC9BA,UAAAA,CAAC,GAAGw7D,QAAQ,CAACx7D,CAAD,CAAZ;EACA,eAAKm8D,UAAL,CAAgBn8D,CAAhB;EACD;;EACDy7D,QAAAA,QAAQ,CAACD,QAAQ,CAACx7D,CAAD,CAAT,EAAco7D,KAAd,CAAR;EACAK,QAAAA,QAAQ,CAACD,QAAQ,CAACA,QAAQ,CAACx7D,CAAD,CAAT,CAAT,EAAwBq7D,GAAxB,CAAR;EACA,aAAKe,WAAL,CAAiBZ,QAAQ,CAACA,QAAQ,CAACx7D,CAAD,CAAT,CAAzB;EACD;EACF,KAhBD,MAgBO;EACLC,MAAAA,CAAC,GAAGy7D,MAAM,CAACF,QAAQ,CAACA,QAAQ,CAACx7D,CAAD,CAAT,CAAT,CAAV;;EACA,UAAIs7D,OAAO,CAACr7D,CAAD,CAAP,KAAeo7D,GAAnB,EAAwB;EACtBI,QAAAA,QAAQ,CAACD,QAAQ,CAACx7D,CAAD,CAAT,EAAco7D,KAAd,CAAR;EACAK,QAAAA,QAAQ,CAACx7D,CAAD,EAAIm7D,KAAJ,CAAR;EACAK,QAAAA,QAAQ,CAACD,QAAQ,CAACA,QAAQ,CAACx7D,CAAD,CAAT,CAAT,EAAwBq7D,GAAxB,CAAR;EACAr7D,QAAAA,CAAC,GAAGw7D,QAAQ,CAACA,QAAQ,CAACx7D,CAAD,CAAT,CAAZ;EACD,OALD,MAKO;EACL,YAAIA,CAAC,KAAK07D,MAAM,CAACF,QAAQ,CAACx7D,CAAD,CAAT,CAAhB,EAA+B;EAC7BA,UAAAA,CAAC,GAAGw7D,QAAQ,CAACx7D,CAAD,CAAZ;EACA,eAAKo8D,WAAL,CAAiBp8D,CAAjB;EACD;;EACDy7D,QAAAA,QAAQ,CAACD,QAAQ,CAACx7D,CAAD,CAAT,EAAco7D,KAAd,CAAR;EACAK,QAAAA,QAAQ,CAACD,QAAQ,CAACA,QAAQ,CAACx7D,CAAD,CAAT,CAAT,EAAwBq7D,GAAxB,CAAR;EACA,aAAKc,UAAL,CAAgBX,QAAQ,CAACA,QAAQ,CAACx7D,CAAD,CAAT,CAAxB;EACD;EACF;;EAEH,SAAK67D,KAAL,CAAWN,KAAX,GAAmBH,KAAnB;EACD;;EAEDh0D,EAAAA,MAAM,GAAG;EACP,UAAMC,SAAS,GAAG,IAAIhB,SAAJ,EAAlB;EACA,QAAIqD,CAAC,GAAG,KAAK2yD,aAAL,EAAR;;EACA,QAAI3yD,CAAC,KAAK,IAAV,EAAgB;EACdrC,MAAAA,SAAS,CAAC5B,GAAV,CAAciE,CAAC,CAAClK,KAAhB;;EACA,aAAO,CAACkK,CAAC,GAAGkyD,OAAO,CAACU,SAAR,CAAkB5yD,CAAlB,CAAL,MAA+B,IAAtC,EACErC,SAAS,CAAC5B,GAAV,CAAciE,CAAC,CAAClK,KAAhB;EACH;;EACD,WAAO6H,SAAP;EACD;;EAED0lB,EAAAA,QAAQ,GAAG;EACT,UAAMU,OAAO,GAAG,IAAIT,OAAJ,EAAhB;EACA,QAAItjB,CAAC,GAAG,KAAK2yD,aAAL,EAAR;;EACA,QAAI3yD,CAAC,KAAK,IAAV,EAAgB;EACd+jB,MAAAA,OAAO,CAAChoB,GAAR,CAAYiE,CAAZ;;EACA,aAAO,CAACA,CAAC,GAAGkyD,OAAO,CAACU,SAAR,CAAkB5yD,CAAlB,CAAL,MAA+B,IAAtC,EACE+jB,OAAO,CAAChoB,GAAR,CAAYiE,CAAZ;EACH;;EACD,WAAO+jB,OAAP;EACD;EAED;EACF;EACA;;;EACE0uC,EAAAA,UAAU,CAACzyD,CAAD,EAAI;EACZ,QAAIA,CAAC,IAAI,IAAT,EAAe;EACb,YAAM8I,CAAC,GAAG9I,CAAC,CAACuvD,KAAZ;EACAvvD,MAAAA,CAAC,CAACuvD,KAAF,GAAUzmD,CAAC,CAACwmD,IAAZ;EACA,UAAIxmD,CAAC,CAACwmD,IAAF,IAAU,IAAd,EACExmD,CAAC,CAACwmD,IAAF,CAAO3nB,MAAP,GAAgB3nC,CAAhB;EACF8I,MAAAA,CAAC,CAAC6+B,MAAF,GAAW3nC,CAAC,CAAC2nC,MAAb;EACA,UAAI3nC,CAAC,CAAC2nC,MAAF,IAAY,IAAhB,EACE,KAAKwqB,KAAL,GAAarpD,CAAb,CADF,KAEK,IAAI9I,CAAC,CAAC2nC,MAAF,CAAS2nB,IAAT,KAAkBtvD,CAAtB,EACHA,CAAC,CAAC2nC,MAAF,CAAS2nB,IAAT,GAAgBxmD,CAAhB,CADG,KAGH9I,CAAC,CAAC2nC,MAAF,CAAS4nB,KAAT,GAAiBzmD,CAAjB;EACFA,MAAAA,CAAC,CAACwmD,IAAF,GAAStvD,CAAT;EACAA,MAAAA,CAAC,CAAC2nC,MAAF,GAAW7+B,CAAX;EACD;EACF;EAED;EACF;EACA;;;EACE4pD,EAAAA,WAAW,CAAC1yD,CAAD,EAAI;EACb,QAAIA,CAAC,IAAI,IAAT,EAAe;EACb,YAAMupC,CAAC,GAAGvpC,CAAC,CAACsvD,IAAZ;EACAtvD,MAAAA,CAAC,CAACsvD,IAAF,GAAS/lB,CAAC,CAACgmB,KAAX;EACA,UAAIhmB,CAAC,CAACgmB,KAAF,IAAW,IAAf,EACEhmB,CAAC,CAACgmB,KAAF,CAAQ5nB,MAAR,GAAiB3nC,CAAjB;EACFupC,MAAAA,CAAC,CAAC5B,MAAF,GAAW3nC,CAAC,CAAC2nC,MAAb;EACA,UAAI3nC,CAAC,CAAC2nC,MAAF,IAAY,IAAhB,EACE,KAAKwqB,KAAL,GAAa5oB,CAAb,CADF,KAEK,IAAIvpC,CAAC,CAAC2nC,MAAF,CAAS4nB,KAAT,KAAmBvvD,CAAvB,EACHA,CAAC,CAAC2nC,MAAF,CAAS4nB,KAAT,GAAiBhmB,CAAjB,CADG,KAGHvpC,CAAC,CAAC2nC,MAAF,CAAS2nB,IAAT,GAAgB/lB,CAAhB;EACFA,MAAAA,CAAC,CAACgmB,KAAF,GAAUvvD,CAAV;EACAA,MAAAA,CAAC,CAAC2nC,MAAF,GAAW4B,CAAX;EACD;EACF;EAED;EACF;EACA;;;EACEopB,EAAAA,aAAa,GAAG;EACd,QAAI3yD,CAAC,GAAG,KAAKmyD,KAAb;EACA,QAAInyD,CAAC,IAAI,IAAT,EACE,OAAOA,CAAC,CAACsvD,IAAF,IAAU,IAAjB,EAAuBtvD,CAAC,GAAGA,CAAC,CAACsvD,IAAN;EACzB,WAAOtvD,CAAP;EACD;EAED;EACF;EACA;EACA;EACA;;;EACE,SAAO4yD,SAAP,CAAiB9oD,CAAjB,EAAoB;EAClB,QAAI9J,CAAJ;;EACA,QAAI8J,CAAC,KAAK,IAAV,EAAgB;EACd,aAAO,IAAP;EACD,KAFD,MAEO,IAAIA,CAAC,CAACylD,KAAF,KAAY,IAAhB,EAAsB;EAC3BvvD,MAAAA,CAAC,GAAG8J,CAAC,CAACylD,KAAN;;EACA,aAAOvvD,CAAC,CAACsvD,IAAF,KAAW,IAAlB,EACEtvD,CAAC,GAAGA,CAAC,CAACsvD,IAAN;;EACF,aAAOtvD,CAAP;EACD,KALM,MAKA;EACLA,MAAAA,CAAC,GAAG8J,CAAC,CAAC69B,MAAN;EACA,UAAIviC,EAAE,GAAG0E,CAAT;;EACA,aAAO9J,CAAC,KAAK,IAAN,IAAcoF,EAAE,KAAKpF,CAAC,CAACuvD,KAA9B,EAAqC;EACnCnqD,QAAAA,EAAE,GAAGpF,CAAL;EACAA,QAAAA,CAAC,GAAGA,CAAC,CAAC2nC,MAAN;EACD;;EACD,aAAO3nC,CAAP;EACD;EACF;;EAED7D,EAAAA,IAAI,GAAG;EACL,WAAO,KAAKi2D,KAAZ;EACD;;EAEDS,EAAAA,WAAW,CAAChvC,GAAD,EAAM;EACf,QAAI7jB,CAAC,GAAG,KAAKmyD,KAAb;;EACA,WAAOnyD,CAAC,KAAK,IAAb,EAAmB;EACjB,YAAM4nD,GAAG,GAAG/jC,GAAG,CAAClqB,SAAJ,CAAcqG,CAAC,CAAC6jB,GAAhB,CAAZ;EACA,UAAI+jC,GAAG,GAAG,CAAV,EACE5nD,CAAC,GAAGA,CAAC,CAACsvD,IAAN,CADF,KAEK,IAAI1H,GAAG,GAAG,CAAV,EACH5nD,CAAC,GAAGA,CAAC,CAACuvD,KAAN,CADG,KAEA,OAAO,IAAP;EACN;;EACD,WAAO,KAAP;EACD;;EA1O4C;;ECrBhC,MAAMuD,oBAAN,CAA2B;EACxC9+D,EAAAA,WAAW,GAAG;EACZ8+D,IAAAA,oBAAoB,CAACz7D,YAArB,CAAkCC,KAAlC,CAAwC,IAAxC,EAA8CC,SAA9C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK07D,QAAL,GAAgB,IAAIb,OAAJ,EAAhB;EACA,SAAKxD,IAAL,GAAY,IAAZ;EACA,UAAMA,IAAI,GAAGn3D,SAAS,CAAC,CAAD,CAAtB;EACA,SAAKm3D,IAAL,GAAYA,IAAZ;EACD;;EACD6C,EAAAA,KAAK,CAACv/B,GAAD,EAAM;EACTA,IAAAA,GAAG,CAACC,OAAJ,CAAY,gBAAZ;;EACA,SAAK,IAAInO,EAAE,GAAG,KAAK5nB,QAAL,EAAd,EAA+B4nB,EAAE,CAAChmB,OAAH,EAA/B,GAA+C;EAC7C,YAAMk1D,EAAE,GAAGlvC,EAAE,CAACjmB,IAAH,EAAX;EACAm1D,MAAAA,EAAE,CAACzB,KAAH,CAASv/B,GAAT;EACD;EACF;;EACD91B,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAK62D,QAAL,CAAcr1D,MAAd,GAAuBxB,QAAvB,EAAP;EACD;;EACD+2D,EAAAA,aAAa,CAACC,QAAD,EAAW;EACtB,SAAK1V,YAAL;EACA,UAAM15B,EAAE,GAAG,KAAK5nB,QAAL,EAAX;EACA,QAAIi3D,MAAM,GAAGrvC,EAAE,CAACjmB,IAAH,EAAb;;EACA,WAAOimB,EAAE,CAAChmB,OAAH,EAAP,EAAqB;EACnB,YAAMk1D,EAAE,GAAGlvC,EAAE,CAACjmB,IAAH,EAAX;EACA,YAAMu1D,OAAO,GAAG,KAAKC,eAAL,CAAqBF,MAArB,EAA6BH,EAA7B,CAAhB;EACAE,MAAAA,QAAQ,CAACn3D,GAAT,CAAaq3D,OAAb;EACAD,MAAAA,MAAM,GAAGH,EAAT;EACD;EACF;;EACDxV,EAAAA,YAAY,GAAG;EACb,UAAMuP,WAAW,GAAG,KAAK2B,IAAL,CAAUlwD,GAAV,CAAchH,MAAd,GAAuB,CAA3C;EACA,SAAKuE,GAAL,CAAS,KAAK2yD,IAAL,CAAUlwD,GAAV,CAAc,CAAd,CAAT,EAA2B,CAA3B,EAA8B,GAA9B;EACA,SAAKzC,GAAL,CAAS,KAAK2yD,IAAL,CAAUlwD,GAAV,CAAcuuD,WAAd,CAAT,EAAqCA,WAArC,EAAkD,GAAlD;EACD;;EACDsG,EAAAA,eAAe,CAACC,GAAD,EAAMC,GAAN,EAAW;EACxB,QAAIpyC,IAAI,GAAGoyC,GAAG,CAACjkC,YAAJ,GAAmBgkC,GAAG,CAAChkC,YAAvB,GAAsC,CAAjD;EACA,UAAMkkC,cAAc,GAAG,KAAK9E,IAAL,CAAUlwD,GAAV,CAAc+0D,GAAG,CAACjkC,YAAlB,CAAvB;EACA,UAAMmkC,SAAS,GAAGF,GAAG,CAAC7hD,IAAJ,GAAW,GAAX,IAAkB,CAAC6hD,GAAG,CAACx5D,KAAJ,CAAUb,QAAV,CAAmBs6D,cAAnB,CAArC;EACA,QAAI,CAACC,SAAL,EACEtyC,IAAI;EAEN,UAAM3iB,GAAG,GAAG,IAAIC,KAAJ,CAAU0iB,IAAV,EAAgBziB,IAAhB,CAAqB,IAArB,CAAZ;EACA,QAAIquC,GAAG,GAAG,CAAV;EACAvuC,IAAAA,GAAG,CAACuuC,GAAG,EAAJ,CAAH,GAAa,IAAI10C,UAAJ,CAAei7D,GAAG,CAACv5D,KAAnB,CAAb;;EACA,SAAK,IAAIpF,CAAC,GAAG2+D,GAAG,CAAChkC,YAAJ,GAAmB,CAAhC,EAAmC36B,CAAC,IAAI4+D,GAAG,CAACjkC,YAA5C,EAA0D36B,CAAC,EAA3D,EACE6J,GAAG,CAACuuC,GAAG,EAAJ,CAAH,GAAa,KAAK2hB,IAAL,CAAUlwD,GAAV,CAAc7J,CAAd,CAAb;;EAEF,QAAI8+D,SAAJ,EAAej1D,GAAG,CAACuuC,GAAD,CAAH,GAAWwmB,GAAG,CAACx5D,KAAf;EACf,WAAO,IAAI25D,IAAJ,CAASl1D,GAAT,EAAc,IAAIgyD,KAAJ,CAAU,KAAK9B,IAAL,CAAUnE,MAApB,CAAd,CAAP;EACD;;EACDxuD,EAAAA,GAAG,CAAC01B,KAAD,EAAQnC,YAAR,EAAsB5d,IAAtB,EAA4B;EAC7B,UAAMiiD,KAAK,GAAG,IAAItC,gBAAJ,CAAqB5/B,KAArB,EAA4BnC,YAA5B,EAA0C5d,IAA1C,CAAd;;EACA,UAAMshD,EAAE,GAAG,KAAKD,QAAL,CAAcv2D,GAAd,CAAkBm3D,KAAlB,CAAX;;EACA,QAAIX,EAAE,KAAK,IAAX,EACE,OAAOA,EAAP;;EAEF,SAAKD,QAAL,CAAc3vC,GAAd,CAAkBuwC,KAAlB,EAAyBA,KAAzB;;EACA,WAAOA,KAAP;EACD;;EACD5iC,EAAAA,cAAc,CAACnW,EAAD,EAAK;EACjB,SAAK,IAAIkJ,EAAE,GAAG,KAAK5nB,QAAL,EAAd,EAA+B4nB,EAAE,CAAChmB,OAAH,EAA/B,GAA+C;EAC7C,YAAMk1D,EAAE,GAAGlvC,EAAE,CAACjmB,IAAH,EAAX;EACA,UAAIm1D,EAAE,CAACj5D,KAAH,CAASjC,MAAT,CAAgB8iB,EAAhB,CAAJ,EAAyB,OAAO,IAAP;EAC1B;;EACD,WAAO,KAAP;EACD;;EAnEuC;;ECH3B,MAAMg5C,YAAN,CAAmB;EAChC5/D,EAAAA,WAAW,GAAG;EACZ4/D,IAAAA,YAAY,CAACv8D,YAAb,CAA0BC,KAA1B,CAAgC,IAAhC,EAAsCC,SAAtC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKw8D,KAAL,GAAa,IAAb;EACA,SAAKC,KAAL,GAAa,CAAb;;EACA,QAAIv8D,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1Bo8D,MAAAA,YAAY,CAACv8D,YAAb,CAA0BI,IAA1B,CAA+B,IAA/B,EAAqC,EAArC;EACD,KAFD,MAEO,IAAIF,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMu8D,eAAe,GAAGx8D,SAAS,CAAC,CAAD,CAAjC;EACA,WAAKs8D,KAAL,GAAa,IAAIp1D,KAAJ,CAAUs1D,eAAV,EAA2Br1D,IAA3B,CAAgC,IAAhC,CAAb;EACD;EACF;;EACDvC,EAAAA,IAAI,GAAG;EACL,WAAO,KAAK23D,KAAZ;EACD;;EACD93D,EAAAA,MAAM,CAAC0B,MAAD,EAAS;EACb,QAAIA,MAAM,KAAK,IAAf,EAAqB,OAAO,IAAP;EACrB,QAAIA,MAAM,CAAClG,MAAP,KAAkB,CAAtB,EAAyB,OAAO,IAAP;EACzB,SAAKqF,cAAL,CAAoB,KAAKi3D,KAAL,GAAap2D,MAAM,CAAClG,MAAxC;EACAiY,IAAAA,MAAM,CAACC,SAAP,CAAiBhS,MAAjB,EAAyB,CAAzB,EAA4B,KAAKm2D,KAAjC,EAAwC,KAAKC,KAA7C,EAAoDp2D,MAAM,CAAClG,MAA3D;EACA,SAAKs8D,KAAL,IAAcp2D,MAAM,CAAClG,MAArB;EACD;;EACDqF,EAAAA,cAAc,CAACm3D,QAAD,EAAW;EACvB,QAAIA,QAAQ,IAAI,KAAKH,KAAL,CAAWr8D,MAA3B,EAAmC,OAAO,IAAP;EACnC,UAAMukB,SAAS,GAAGnoB,IAAI,CAACiN,GAAL,CAASmzD,QAAT,EAAmB,KAAKH,KAAL,CAAWr8D,MAAX,GAAoB,CAAvC,CAAlB;EACA,SAAKq8D,KAAL,GAAan4C,MAAM,CAACG,MAAP,CAAc,KAAKg4C,KAAnB,EAA0B93C,SAA1B,CAAb;EACD;;EACD3f,EAAAA,OAAO,GAAG;EACR,UAAMQ,KAAK,GAAG,IAAI6B,KAAJ,CAAU,KAAKq1D,KAAf,EAAsBp1D,IAAtB,CAA2B,IAA3B,CAAd;EACA+Q,IAAAA,MAAM,CAACC,SAAP,CAAiB,KAAKmkD,KAAtB,EAA6B,CAA7B,EAAgCj3D,KAAhC,EAAuC,CAAvC,EAA0C,KAAKk3D,KAA/C;EACA,WAAOl3D,KAAP;EACD;;EACDb,EAAAA,GAAG,CAACjG,KAAD,EAAQ;EACT,SAAK+G,cAAL,CAAoB,KAAKi3D,KAAL,GAAa,CAAjC;EACA,SAAKD,KAAL,CAAW,KAAKC,KAAhB,IAAyBh+D,KAAzB;EACA,MAAG,KAAKg+D,KAAR;EACD;;EAtC+B;;ECCnB,MAAMG,oBAAN,CAA2B;EACxC,SAAOC,UAAP,CAAkB7uB,IAAlB,EAAwB;EACtB,UAAMzoC,KAAK,GAAG,IAAI6B,KAAJ,CAAU4mC,IAAI,CAAClpC,IAAL,EAAV,EAAuBuC,IAAvB,CAA4B,IAA5B,CAAd;;EACA,SAAK,IAAI/J,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiI,KAAK,CAACpF,MAA1B,EAAkC7C,CAAC,EAAnC,EACEiI,KAAK,CAACjI,CAAD,CAAL,GAAW0wC,IAAI,CAAC7oC,GAAL,CAAS7H,CAAT,EAAY8O,QAAZ,EAAX;;EAEF,WAAO7G,KAAP;EACD;;EACDu3D,EAAAA,oBAAoB,CAAC31D,GAAD,EAAM;EACxB,QAAIQ,KAAK,GAAG,CAAZ;EACA,UAAMo1D,cAAc,GAAG,IAAIR,YAAJ,CAAiBhgE,IAAI,CAAC6S,KAAL,CAAWjI,GAAG,CAAChH,MAAJ,GAAa,CAAxB,CAAjB,CAAvB;EACA48D,IAAAA,cAAc,CAACr4D,GAAf,CAAmBiD,KAAnB;;EACA,OAAG;EACD,YAAML,IAAI,GAAG,KAAK01D,YAAL,CAAkB71D,GAAlB,EAAuBQ,KAAvB,CAAb;EACAo1D,MAAAA,cAAc,CAACr4D,GAAf,CAAmB4C,IAAnB;EACAK,MAAAA,KAAK,GAAGL,IAAR;EACD,KAJD,QAISK,KAAK,GAAGR,GAAG,CAAChH,MAAJ,GAAa,CAJ9B;;EAKA,WAAO48D,cAAc,CAACh4D,OAAf,EAAP;EACD;;EACDi4D,EAAAA,YAAY,CAAC71D,GAAD,EAAMQ,KAAN,EAAa;EACvB,UAAMs1D,SAAS,GAAGpQ,QAAQ,CAACa,QAAT,CAAkBvmD,GAAG,CAACQ,KAAD,CAArB,EAA8BR,GAAG,CAACQ,KAAK,GAAG,CAAT,CAAjC,CAAlB;EACA,QAAIL,IAAI,GAAGK,KAAK,GAAG,CAAnB;;EACA,WAAOL,IAAI,GAAGH,GAAG,CAAChH,MAAlB,EAA0B;EACxB,YAAM4sD,IAAI,GAAGF,QAAQ,CAACa,QAAT,CAAkBvmD,GAAG,CAACG,IAAI,GAAG,CAAR,CAArB,EAAiCH,GAAG,CAACG,IAAD,CAApC,CAAb;EACA,UAAIylD,IAAI,KAAKkQ,SAAb,EAAwB;EACxB31D,MAAAA,IAAI;EACL;;EACD,WAAOA,IAAI,GAAG,CAAd;EACD;;EACD41D,EAAAA,uBAAuB,CAAC/1D,GAAD,EAAM;EAC3B,QAAIQ,KAAK,GAAG,CAAZ;EACA,UAAMo1D,cAAc,GAAG,IAAIz3D,SAAJ,EAAvB;EACAy3D,IAAAA,cAAc,CAACr4D,GAAf,CAAmBiD,KAAnB;;EACA,OAAG;EACD,YAAML,IAAI,GAAG,KAAK01D,YAAL,CAAkB71D,GAAlB,EAAuBQ,KAAvB,CAAb;EACAo1D,MAAAA,cAAc,CAACr4D,GAAf,CAAmB4C,IAAnB;EACAK,MAAAA,KAAK,GAAGL,IAAR;EACD,KAJD,QAISK,KAAK,GAAGR,GAAG,CAAChH,MAAJ,GAAa,CAJ9B;;EAKA,UAAM2qD,UAAU,GAAG8R,oBAAoB,CAACC,UAArB,CAAgCE,cAAhC,CAAnB;EACA,WAAOjS,UAAP;EACD;;EAxCuC;;ECD3B,MAAMqS,iBAAN,CAAwB;EACrCxgE,EAAAA,WAAW,GAAG;EACZwgE,IAAAA,iBAAiB,CAACn9D,YAAlB,CAA+BC,KAA/B,CAAqC,IAArC,EAA2CC,SAA3C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK2C,CAAL,GAAS,IAAT;EACA,SAAKwE,GAAL,GAAW,IAAX;EACA,SAAK2jD,UAAL,GAAkB,IAAlB;EACA,UAAMnoD,CAAC,GAAGzC,SAAS,CAAC,CAAD,CAAnB;EACA,SAAKyC,CAAL,GAASA,CAAT;EACA,SAAKwE,GAAL,GAAWxE,CAAC,CAAC+f,cAAF,EAAX;EACA,UAAM06C,GAAG,GAAG,IAAIR,oBAAJ,EAAZ;EACA,SAAK9R,UAAL,GAAkBsS,GAAG,CAACN,oBAAJ,CAAyB,KAAK31D,GAA9B,CAAlB;EACD;;EACDub,EAAAA,cAAc,GAAG;EACf,WAAO,KAAKvb,GAAZ;EACD;;EACD6C,EAAAA,OAAO,CAAC4oD,UAAD,EAAa;EAClB,UAAMx2D,EAAE,GAAG,KAAK+K,GAAL,CAAS,KAAK2jD,UAAL,CAAgB8H,UAAhB,CAAT,EAAsC3zD,CAAjD;EACA,UAAM5C,EAAE,GAAG,KAAK8K,GAAL,CAAS,KAAK2jD,UAAL,CAAgB8H,UAAU,GAAG,CAA7B,CAAT,EAA0C3zD,CAArD;EACA,WAAO7C,EAAE,GAAGC,EAAL,GAAUD,EAAV,GAAeC,EAAtB;EACD;;EACD6N,EAAAA,OAAO,CAAC0oD,UAAD,EAAa;EAClB,UAAMx2D,EAAE,GAAG,KAAK+K,GAAL,CAAS,KAAK2jD,UAAL,CAAgB8H,UAAhB,CAAT,EAAsC3zD,CAAjD;EACA,UAAM5C,EAAE,GAAG,KAAK8K,GAAL,CAAS,KAAK2jD,UAAL,CAAgB8H,UAAU,GAAG,CAA7B,CAAT,EAA0C3zD,CAArD;EACA,WAAO7C,EAAE,GAAGC,EAAL,GAAUD,EAAV,GAAeC,EAAtB;EACD;;EACD22D,EAAAA,yBAAyB,GAAG;EAC1B,QAAI9yD,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMk9D,WAAW,GAAGn9D,SAAS,CAAC,CAAD,CAA7B;EAAA,YAAkCyyD,GAAG,GAAGzyD,SAAS,CAAC,CAAD,CAAjD;EAAA,YAAsDo9D,WAAW,GAAGp9D,SAAS,CAAC,CAAD,CAA7E;EAAA,YAAkF6yD,EAAE,GAAG7yD,SAAS,CAAC,CAAD,CAAhG;EACA,WAAK8yD,yBAAL,CAA+B,KAAKlI,UAAL,CAAgBuS,WAAhB,CAA/B,EAA6D,KAAKvS,UAAL,CAAgBuS,WAAW,GAAG,CAA9B,CAA7D,EAA+F1K,GAA/F,EAAoGA,GAAG,CAAC7H,UAAJ,CAAewS,WAAf,CAApG,EAAiI3K,GAAG,CAAC7H,UAAJ,CAAewS,WAAW,GAAG,CAA7B,CAAjI,EAAkKvK,EAAlK;EACD,KAHD,MAGO,IAAI7yD,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMo9D,MAAM,GAAGr9D,SAAS,CAAC,CAAD,CAAxB;EAAA,YAA6Bs9D,IAAI,GAAGt9D,SAAS,CAAC,CAAD,CAA7C;EAAA,YAAkDyyD,GAAG,GAAGzyD,SAAS,CAAC,CAAD,CAAjE;EAAA,YAAsEu9D,MAAM,GAAGv9D,SAAS,CAAC,CAAD,CAAxF;EAAA,YAA6Fw9D,IAAI,GAAGx9D,SAAS,CAAC,CAAD,CAA7G;EAAA,YAAkHy7D,EAAE,GAAGz7D,SAAS,CAAC,CAAD,CAAhI;;EACA,UAAIs9D,IAAI,GAAGD,MAAP,KAAkB,CAAlB,IAAuBG,IAAI,GAAGD,MAAP,KAAkB,CAA7C,EAAgD;EAC9C9B,QAAAA,EAAE,CAACrF,gBAAH,CAAoB,KAAK3zD,CAAzB,EAA4B46D,MAA5B,EAAoC5K,GAAG,CAAChwD,CAAxC,EAA2C86D,MAA3C;EACA,eAAO,IAAP;EACD;;EACD,UAAI,CAAC,KAAKE,QAAL,CAAcJ,MAAd,EAAsBC,IAAtB,EAA4B7K,GAA5B,EAAiC8K,MAAjC,EAAyCC,IAAzC,CAAL,EAAqD,OAAO,IAAP;EACrD,YAAME,IAAI,GAAGrhE,IAAI,CAAC6S,KAAL,CAAW,CAACmuD,MAAM,GAAGC,IAAV,IAAkB,CAA7B,CAAb;EACA,YAAMhjB,IAAI,GAAGj+C,IAAI,CAAC6S,KAAL,CAAW,CAACquD,MAAM,GAAGC,IAAV,IAAkB,CAA7B,CAAb;;EACA,UAAIH,MAAM,GAAGK,IAAb,EAAmB;EACjB,YAAIH,MAAM,GAAGjjB,IAAb,EAAmB,KAAKwY,yBAAL,CAA+BuK,MAA/B,EAAuCK,IAAvC,EAA6CjL,GAA7C,EAAkD8K,MAAlD,EAA0DjjB,IAA1D,EAAgEmhB,EAAhE;EACnB,YAAInhB,IAAI,GAAGkjB,IAAX,EAAiB,KAAK1K,yBAAL,CAA+BuK,MAA/B,EAAuCK,IAAvC,EAA6CjL,GAA7C,EAAkDnY,IAAlD,EAAwDkjB,IAAxD,EAA8D/B,EAA9D;EAClB;;EACD,UAAIiC,IAAI,GAAGJ,IAAX,EAAiB;EACf,YAAIC,MAAM,GAAGjjB,IAAb,EAAmB,KAAKwY,yBAAL,CAA+B4K,IAA/B,EAAqCJ,IAArC,EAA2C7K,GAA3C,EAAgD8K,MAAhD,EAAwDjjB,IAAxD,EAA8DmhB,EAA9D;EACnB,YAAInhB,IAAI,GAAGkjB,IAAX,EAAiB,KAAK1K,yBAAL,CAA+B4K,IAA/B,EAAqCJ,IAArC,EAA2C7K,GAA3C,EAAgDnY,IAAhD,EAAsDkjB,IAAtD,EAA4D/B,EAA5D;EAClB;EACF;EACF;;EACDgC,EAAAA,QAAQ,CAACJ,MAAD,EAASC,IAAT,EAAe7K,GAAf,EAAoB8K,MAApB,EAA4BC,IAA5B,EAAkC;EACxC,WAAOr1D,QAAQ,CAACY,UAAT,CAAoB,KAAK9B,GAAL,CAASo2D,MAAT,CAApB,EAAsC,KAAKp2D,GAAL,CAASq2D,IAAT,CAAtC,EAAsD7K,GAAG,CAACxrD,GAAJ,CAAQs2D,MAAR,CAAtD,EAAuE9K,GAAG,CAACxrD,GAAJ,CAAQu2D,IAAR,CAAvE,CAAP;EACD;;EACDlG,EAAAA,eAAe,GAAG;EAChB,WAAO,KAAK1M,UAAZ;EACD;;EACD+S,EAAAA,iBAAiB,CAAClL,GAAD,EAAMI,EAAN,EAAU;EACzB,SAAK,IAAIz1D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKwtD,UAAL,CAAgB3qD,MAAhB,GAAyB,CAA7C,EAAgD7C,CAAC,EAAjD,EACE,KAAK,IAAI8f,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGu1C,GAAG,CAAC7H,UAAJ,CAAe3qD,MAAf,GAAwB,CAA5C,EAA+Cid,CAAC,EAAhD,EACE,KAAK41C,yBAAL,CAA+B11D,CAA/B,EAAkCq1D,GAAlC,EAAuCv1C,CAAvC,EAA0C21C,EAA1C;EAGL;;EA9DoC;;ECAxB,MAAM+K,KAAN,CAAY;EACzBnhE,EAAAA,WAAW,GAAG;EACZmhE,IAAAA,KAAK,CAAC99D,YAAN,CAAmBC,KAAnB,CAAyB,IAAzB,EAA+BC,SAA/B;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK+9D,MAAL,GAAc32D,KAAK,CAAC,CAAD,CAAL,CAASC,IAAT,GAAgB6kB,GAAhB,CAAoB,MAAM9kB,KAAK,CAAC,CAAD,CAA/B,CAAd;;EACA,SAAK,IAAI9J,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,CAApB,EAAuBA,CAAC,EAAxB,EACE,KAAK,IAAI8f,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,CAApB,EAAuBA,CAAC,EAAxB,EACE,KAAK2gD,MAAL,CAAYzgE,CAAZ,EAAe8f,CAAf,IAAoB0gD,KAAK,CAACE,UAA1B;EAGL;;EACD,SAAOC,eAAP,CAAuBnG,QAAvB,EAAiC;EAC/B,QAAIA,QAAQ,KAAK74B,QAAQ,CAACG,QAA1B,EAAoC,OAAO,CAAP;EACpC,QAAI04B,QAAQ,KAAK74B,QAAQ,CAACK,QAA1B,EAAoC,OAAO,CAAP;EACpC,WAAOw+B,KAAK,CAACE,UAAb;EACD;;EACDE,EAAAA,QAAQ,CAAC3E,SAAD,EAAYX,QAAZ,EAAsB;EAC5B,WAAO,KAAKmF,MAAL,CAAYxE,SAAZ,EAAuBX,QAAvB,CAAP;EACD;;EACDuF,EAAAA,QAAQ,CAAC5E,SAAD,EAAYX,QAAZ,EAAsBwF,UAAtB,EAAkC;EACxC,SAAKL,MAAL,CAAYxE,SAAZ,EAAuBX,QAAvB,IAAmCwF,UAAnC;EACD;;EACDr0D,EAAAA,MAAM,GAAG;EACP,QAAI7J,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,WAAK,IAAI7C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,CAApB,EAAuBA,CAAC,EAAxB,EACE,KAAK,IAAI8f,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,CAApB,EAAuBA,CAAC,EAAxB,EACE,IAAI,KAAK2gD,MAAL,CAAYzgE,CAAZ,EAAe8f,CAAf,MAAsB0gD,KAAK,CAACE,UAAhC,EAA4C,OAAO,KAAP;;EAGhD,aAAO,IAAP;EACD,KAPD,MAOO,IAAI99D,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMo5D,SAAS,GAAGr5D,SAAS,CAAC,CAAD,CAA3B;EACA,aAAO,KAAK69D,MAAL,CAAYxE,SAAZ,EAAuB,CAAvB,MAA8BuE,KAAK,CAACE,UAA3C;EACD,KAHM,MAGA,IAAI99D,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMo5D,SAAS,GAAGr5D,SAAS,CAAC,CAAD,CAA3B;EAAA,YAAgC04D,QAAQ,GAAG14D,SAAS,CAAC,CAAD,CAApD;EACA,aAAO,KAAK69D,MAAL,CAAYxE,SAAZ,EAAuBX,QAAvB,MAAqCkF,KAAK,CAACE,UAAlD;EACD;EACF;;EACDxhD,EAAAA,SAAS,GAAG;EACV,SAAK,IAAIlf,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,CAApB,EAAuBA,CAAC,EAAxB,EACE,IAAI,CAAC,KAAKyM,MAAL,CAAYzM,CAAZ,CAAL,EAAqB;EACnB,UAAI+gE,QAAQ,GAAG,KAAKN,MAAL,CAAYzgE,CAAZ,EAAe,CAAf,CAAf;EACA,UAAI,KAAKygE,MAAL,CAAYzgE,CAAZ,EAAe,CAAf,IAAoB+gE,QAAxB,EAAkCA,QAAQ,GAAG,KAAKN,MAAL,CAAYzgE,CAAZ,EAAe,CAAf,CAAX;EAClC,UAAI+gE,QAAQ,GAAG,CAAf,EAAkBA,QAAQ,GAAG,CAAX;;EAClB,WAAK,IAAIjhD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,CAApB,EAAuBA,CAAC,EAAxB,EAA4B;EAC1B,YAAIkhD,QAAQ,GAAG,CAAf;EACA,YAAI,KAAKP,MAAL,CAAYzgE,CAAZ,EAAe8f,CAAf,IAAoBihD,QAAxB,EAAkCC,QAAQ,GAAG,CAAX;EAClC,aAAKP,MAAL,CAAYzgE,CAAZ,EAAe8f,CAAf,IAAoBkhD,QAApB;EACD;EACF;EAEJ;;EACDC,EAAAA,QAAQ,CAAChF,SAAD,EAAY;EAClB,WAAO,KAAKwE,MAAL,CAAYxE,SAAZ,EAAuBhH,QAAQ,CAAC37C,KAAhC,IAAyC,KAAKmnD,MAAL,CAAYxE,SAAZ,EAAuBhH,QAAQ,CAACz7C,IAAhC,CAAhD;EACD;;EACDylC,EAAAA,WAAW,CAACgd,SAAD,EAAYX,QAAZ,EAAsB;EAC/B,QAAI,KAAKmF,MAAL,CAAYxE,SAAZ,EAAuBX,QAAvB,KAAoC,CAAxC,EAA2C,OAAO35B,QAAQ,CAACG,QAAhB;EAC3C,WAAOH,QAAQ,CAACK,QAAhB;EACD;;EACDtiC,EAAAA,QAAQ,GAAG;EACT,WAAO,QAAQ,KAAK+gE,MAAL,CAAY,CAAZ,EAAe,CAAf,CAAR,GAA4B,GAA5B,GAAkC,KAAKA,MAAL,CAAY,CAAZ,EAAe,CAAf,CAAlC,GAAsD,MAAtD,GAA+D,KAAKA,MAAL,CAAY,CAAZ,EAAe,CAAf,CAA/D,GAAmF,GAAnF,GAAyF,KAAKA,MAAL,CAAY,CAAZ,EAAe,CAAf,CAAhG;EACD;;EACDr5D,EAAAA,GAAG,GAAG;EACJ,QAAIxE,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMm5D,GAAG,GAAGp5D,SAAS,CAAC,CAAD,CAArB;;EACA,WAAK,IAAI5C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,CAApB,EAAuBA,CAAC,EAAxB,EACE,KAAK,IAAI8f,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,CAApB,EAAuBA,CAAC,EAAxB,EAA4B;EAC1B,cAAMkhC,GAAG,GAAGgb,GAAG,CAAC/c,WAAJ,CAAgBj/C,CAAhB,EAAmB8f,CAAnB,CAAZ;EACA,YAAIkhC,GAAG,KAAKrf,QAAQ,CAACG,QAAjB,IAA6Bkf,GAAG,KAAKrf,QAAQ,CAACK,QAAlD,EACE,IAAI,KAAKv1B,MAAL,CAAYzM,CAAZ,EAAe8f,CAAf,CAAJ,EACE,KAAK2gD,MAAL,CAAYzgE,CAAZ,EAAe8f,CAAf,IAAoB0gD,KAAK,CAACG,eAAN,CAAsB3f,GAAtB,CAApB,CADF,KAEK,KAAKyf,MAAL,CAAYzgE,CAAZ,EAAe8f,CAAf,KAAqB0gD,KAAK,CAACG,eAAN,CAAsB3f,GAAtB,CAArB;EAER;EAEJ,KAZD,MAYO,IAAIp+C,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMo5D,SAAS,GAAGr5D,SAAS,CAAC,CAAD,CAA3B;EAAA,YAAgC04D,QAAQ,GAAG14D,SAAS,CAAC,CAAD,CAApD;EAAA,YAAyD43D,QAAQ,GAAG53D,SAAS,CAAC,CAAD,CAA7E;EACA,UAAI43D,QAAQ,KAAK74B,QAAQ,CAACK,QAA1B,EAAoC,KAAKy+B,MAAL,CAAYxE,SAAZ,EAAuBX,QAAvB;EACrC;EACF;;EAhFwB;EAkF3BkF,KAAK,CAACE,UAAN,GAAmB,CAAC,CAApB;;ECnFe,MAAMQ,cAAN,CAAqB;EAClC7hE,EAAAA,WAAW,GAAG;EACZ6hE,IAAAA,cAAc,CAACx+D,YAAf,CAA4BC,KAA5B,CAAkC,IAAlC,EAAwCC,SAAxC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKkzD,MAAL,GAAc,IAAd;EACA,SAAKuL,WAAL,GAAmB,KAAnB;EACA,SAAKC,UAAL,GAAkB,KAAlB;EACA,SAAKC,aAAL,GAAqB,KAArB;EACA,SAAKC,UAAL,GAAkB,KAAlB;;EACA,QAAI1+D,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B,CAA5B,MAAoC,IAAID,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC9D,YAAMuzD,KAAK,GAAGxzD,SAAS,CAAC,CAAD,CAAvB;EACA,WAAKgzD,MAAL,GAAcQ,KAAd;EACD;EACF;;EACDmL,EAAAA,UAAU,CAACC,SAAD,EAAY;EACpB,SAAKF,UAAL,GAAkBE,SAAlB;EACD;;EACDC,EAAAA,WAAW,CAACC,UAAD,EAAa;EACtB,SAAKP,WAAL,GAAmBO,UAAnB;EACD;;EACDC,EAAAA,SAAS,GAAG;EACV,WAAO,KAAKP,UAAZ;EACD;;EACDQ,EAAAA,YAAY,GAAG;EACb,WAAO,KAAKP,aAAZ;EACD;;EACDQ,EAAAA,QAAQ,CAACzL,KAAD,EAAQ;EACd,SAAKR,MAAL,GAAcQ,KAAd;EACD;;EACD0L,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAKlM,MAAZ;EACD;;EACDmM,EAAAA,UAAU,CAACJ,SAAD,EAAY;EACpB,SAAKP,UAAL,GAAkBO,SAAlB;EACA,SAAKN,aAAL,GAAqB,IAArB;EACD;;EACDW,EAAAA,QAAQ,CAAC79B,EAAD,EAAK;EACXphC,IAAAA,MAAM,CAACE,MAAP,CAAc,KAAK2yD,MAAL,CAAY0G,gBAAZ,MAAkC,CAAhD,EAAmD,qBAAnD;EACA,SAAK2F,SAAL,CAAe99B,EAAf;EACD;;EACDu9B,EAAAA,UAAU,GAAG;EACX,WAAO,KAAKP,WAAZ;EACD;;EACDK,EAAAA,SAAS,GAAG;EACV,WAAO,KAAKF,UAAZ;EACD;;EA9CiC;;ECSrB,MAAMvC,IAAN,SAAmBmC,cAAnB,CAAkC;EAC/C7hE,EAAAA,WAAW,GAAG;EACZ;EACA0/D,IAAAA,IAAI,CAACr8D,YAAL,CAAkBC,KAAlB,CAAwB,IAAxB,EAA8BC,SAA9B;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKmH,GAAL,GAAW,IAAX;EACA,SAAKq4D,IAAL,GAAY,IAAZ;EACA,SAAKC,MAAL,GAAc,IAAIhE,oBAAJ,CAAyB,IAAzB,CAAd;EACA,SAAKntC,KAAL,GAAa,IAAb;EACA,SAAKoxC,IAAL,GAAY,IAAZ;EACA,SAAKC,WAAL,GAAmB,IAAnB;EACA,SAAK5B,MAAL,GAAc,IAAID,KAAJ,EAAd;EACA,SAAK8B,WAAL,GAAmB,CAAnB;;EACA,QAAI1/D,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMgH,GAAG,GAAGjH,SAAS,CAAC,CAAD,CAArB;EACAm8D,MAAAA,IAAI,CAACr8D,YAAL,CAAkBI,IAAlB,CAAuB,IAAvB,EAA6B+G,GAA7B,EAAkC,IAAlC;EACD,KAHD,MAGO,IAAIjH,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMgH,GAAG,GAAGjH,SAAS,CAAC,CAAD,CAArB;EAAA,YAA0BwzD,KAAK,GAAGxzD,SAAS,CAAC,CAAD,CAA3C;EACA,WAAKiH,GAAL,GAAWA,GAAX;EACA,WAAK+rD,MAAL,GAAcQ,KAAd;EACD;EACF;;EACD,SAAO4L,QAAP,GAAkB;EAChB,QAAIp/D,SAAS,CAACC,MAAV,KAAqB,CAArB,IAA2BD,SAAS,CAAC,CAAD,CAAT,YAAwBs/B,kBAAxB,IAA8Ct/B,SAAS,CAAC,CAAD,CAAT,YAAwBi5D,KAArG,EAA6G;EAC3G,YAAMzF,KAAK,GAAGxzD,SAAS,CAAC,CAAD,CAAvB;EAAA,YAA4BuhC,EAAE,GAAGvhC,SAAS,CAAC,CAAD,CAA1C;EACAuhC,MAAAA,EAAE,CAACX,iBAAH,CAAqB4yB,KAAK,CAACnX,WAAN,CAAkB,CAAlB,EAAqBgW,QAAQ,CAACE,EAA9B,CAArB,EAAwDiB,KAAK,CAACnX,WAAN,CAAkB,CAAlB,EAAqBgW,QAAQ,CAACE,EAA9B,CAAxD,EAA2F,CAA3F;;EACA,UAAIiB,KAAK,CAACmF,MAAN,EAAJ,EAAoB;EAClBp3B,QAAAA,EAAE,CAACX,iBAAH,CAAqB4yB,KAAK,CAACnX,WAAN,CAAkB,CAAlB,EAAqBgW,QAAQ,CAACz7C,IAA9B,CAArB,EAA0D48C,KAAK,CAACnX,WAAN,CAAkB,CAAlB,EAAqBgW,QAAQ,CAACz7C,IAA9B,CAA1D,EAA+F,CAA/F;EACA2qB,QAAAA,EAAE,CAACX,iBAAH,CAAqB4yB,KAAK,CAACnX,WAAN,CAAkB,CAAlB,EAAqBgW,QAAQ,CAAC37C,KAA9B,CAArB,EAA2D88C,KAAK,CAACnX,WAAN,CAAkB,CAAlB,EAAqBgW,QAAQ,CAAC37C,KAA9B,CAA3D,EAAiG,CAAjG;EACD;EACF,KAPD,MAOO;EACL,aAAO,MAAM0oD,QAAN,CAAer/D,KAAf,CAAqB,IAArB,EAA2BC,SAA3B,CAAP;EACD;EACF;;EACDg+D,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAKH,MAAZ;EACD;;EACD8B,EAAAA,gBAAgB,GAAG;EACjB,UAAMlT,MAAM,GAAG,IAAIvlD,KAAJ,CAAU,CAAV,EAAaC,IAAb,CAAkB,IAAlB,CAAf;EACAslD,IAAAA,MAAM,CAAC,CAAD,CAAN,GAAY,KAAKxlD,GAAL,CAAS,CAAT,CAAZ;EACAwlD,IAAAA,MAAM,CAAC,CAAD,CAAN,GAAY,KAAKxlD,GAAL,CAAS,CAAT,CAAZ;EACA,UAAM24D,IAAI,GAAG,IAAIzD,IAAJ,CAAS1P,MAAT,EAAiBwM,KAAK,CAACO,WAAN,CAAkB,KAAKxG,MAAvB,CAAjB,CAAb;EACA,WAAO4M,IAAP;EACD;;EACDC,EAAAA,UAAU,GAAG;EACX,WAAO,KAAKJ,WAAZ;EACD;;EACDj9C,EAAAA,cAAc,GAAG;EACf,WAAO,KAAKvb,GAAZ;EACD;;EACDwvD,EAAAA,WAAW,CAACoJ,UAAD,EAAa;EACtB,SAAKJ,WAAL,GAAmBI,UAAnB;EACD;;EACDC,EAAAA,OAAO,CAACnjE,IAAD,EAAO;EACZ,SAAKyxB,KAAL,GAAazxB,IAAb;EACD;;EACD4D,EAAAA,MAAM,CAAC8B,CAAD,EAAI;EACR,QAAI,EAAEA,CAAC,YAAY85D,IAAf,CAAJ,EAA0B,OAAO,KAAP;EAC1B,UAAM15D,CAAC,GAAGJ,CAAV;EACA,QAAI,KAAK4E,GAAL,CAAShH,MAAT,KAAoBwC,CAAC,CAACwE,GAAF,CAAMhH,MAA9B,EAAsC,OAAO,KAAP;EACtC,QAAI8/D,cAAc,GAAG,IAArB;EACA,QAAIC,cAAc,GAAG,IAArB;EACA,QAAIC,IAAI,GAAG,KAAKh5D,GAAL,CAAShH,MAApB;;EACA,SAAK,IAAI7C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6J,GAAL,CAAShH,MAA7B,EAAqC7C,CAAC,EAAtC,EAA0C;EACxC,UAAI,CAAC,KAAK6J,GAAL,CAAS7J,CAAT,EAAYuE,QAAZ,CAAqBc,CAAC,CAACwE,GAAF,CAAM7J,CAAN,CAArB,CAAL,EACE2iE,cAAc,GAAG,KAAjB;EAEF,UAAI,CAAC,KAAK94D,GAAL,CAAS7J,CAAT,EAAYuE,QAAZ,CAAqBc,CAAC,CAACwE,GAAF,CAAM,EAAGg5D,IAAT,CAArB,CAAL,EACED,cAAc,GAAG,KAAjB;EAEF,UAAI,CAACD,cAAD,IAAmB,CAACC,cAAxB,EAAwC,OAAO,KAAP;EACzC;;EACD,WAAO,IAAP;EACD;;EACDt5D,EAAAA,aAAa,GAAG;EACd,QAAI1G,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,UAAI,KAAKgH,GAAL,CAAShH,MAAT,GAAkB,CAAtB,EAAyB,OAAO,KAAKgH,GAAL,CAAS,CAAT,CAAP;EACzB,aAAO,IAAP;EACD,KAHD,MAGO,IAAIjH,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAM7C,CAAC,GAAG4C,SAAS,CAAC,CAAD,CAAnB;EACA,aAAO,KAAKiH,GAAL,CAAS7J,CAAT,CAAP;EACD;EACF;;EACD48D,EAAAA,KAAK,CAACv/B,GAAD,EAAM;EACTA,IAAAA,GAAG,CAACu/B,KAAJ,CAAU,UAAU,KAAK5rC,KAAf,GAAuB,IAAjC;EACAqM,IAAAA,GAAG,CAACu/B,KAAJ,CAAU,cAAV;;EACA,SAAK,IAAI58D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6J,GAAL,CAAShH,MAA7B,EAAqC7C,CAAC,EAAtC,EAA0C;EACxC,UAAIA,CAAC,GAAG,CAAR,EAAWq9B,GAAG,CAACu/B,KAAJ,CAAU,GAAV;EACXv/B,MAAAA,GAAG,CAACu/B,KAAJ,CAAU,KAAK/yD,GAAL,CAAS7J,CAAT,EAAY2B,CAAZ,GAAgB,GAAhB,GAAsB,KAAKkI,GAAL,CAAS7J,CAAT,EAAY4B,CAA5C;EACD;;EACDy7B,IAAAA,GAAG,CAACu/B,KAAJ,CAAU,QAAQ,KAAKhH,MAAb,GAAsB,GAAtB,GAA4B,KAAK0M,WAA3C;EACD;;EACDL,EAAAA,SAAS,CAAC99B,EAAD,EAAK;EACZ46B,IAAAA,IAAI,CAACiD,QAAL,CAAc,KAAKpM,MAAnB,EAA2BzxB,EAA3B;EACD;;EACD2+B,EAAAA,WAAW,GAAG;EACZ,QAAI,CAAC,KAAKlN,MAAL,CAAY2F,MAAZ,EAAL,EAA2B,OAAO,KAAP;EAC3B,QAAI,KAAK1xD,GAAL,CAAShH,MAAT,KAAoB,CAAxB,EAA2B,OAAO,KAAP;EAC3B,QAAI,KAAKgH,GAAL,CAAS,CAAT,EAAY1G,MAAZ,CAAmB,KAAK0G,GAAL,CAAS,CAAT,CAAnB,CAAJ,EAAqC,OAAO,IAAP;EACrC,WAAO,KAAP;EACD;;EACD8Z,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAK9Z,GAAL,CAAS,CAAT,EAAY1G,MAAZ,CAAmB,KAAK0G,GAAL,CAAS,KAAKA,GAAL,CAAShH,MAAT,GAAkB,CAA3B,CAAnB,CAAP;EACD;;EACDkgE,EAAAA,sBAAsB,GAAG;EACvB,WAAO,KAAKl5D,GAAL,CAAShH,MAAT,GAAkB,CAAzB;EACD;;EACDmgE,EAAAA,aAAa,GAAG;EACd,WAAO,KAAKV,WAAZ;EACD;;EACD98C,EAAAA,YAAY,GAAG;EACb,WAAO,KAAK3b,GAAL,CAAShH,MAAhB;EACD;;EACDogE,EAAAA,YAAY,CAAC5lC,GAAD,EAAM;EAChBA,IAAAA,GAAG,CAACu/B,KAAJ,CAAU,UAAU,KAAK5rC,KAAf,GAAuB,IAAjC;;EACA,SAAK,IAAIhxB,CAAC,GAAG,KAAK6J,GAAL,CAAShH,MAAT,GAAkB,CAA/B,EAAkC7C,CAAC,IAAI,CAAvC,EAA0CA,CAAC,EAA3C,EACEq9B,GAAG,CAACu/B,KAAJ,CAAU,KAAK/yD,GAAL,CAAS7J,CAAT,IAAc,GAAxB;;EAEFq9B,IAAAA,GAAG,CAACC,OAAJ,CAAY,EAAZ;EACD;;EACD28B,EAAAA,oBAAoB,GAAG;EACrB,QAAI,KAAKmI,IAAL,KAAc,IAAlB,EAAwB,KAAKA,IAAL,GAAY,IAAIvC,iBAAJ,CAAsB,IAAtB,CAAZ;EACxB,WAAO,KAAKuC,IAAZ;EACD;;EACDvjD,EAAAA,WAAW,GAAG;EACZ,QAAI,KAAKqjD,IAAL,KAAc,IAAlB,EAAwB;EACtB,WAAKA,IAAL,GAAY,IAAIn3D,QAAJ,EAAZ;;EACA,WAAK,IAAI/K,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6J,GAAL,CAAShH,MAA7B,EAAqC7C,CAAC,EAAtC,EACE,KAAKkiE,IAAL,CAAUv0D,eAAV,CAA0B,KAAK9D,GAAL,CAAS7J,CAAT,CAA1B;EAEH;;EACD,WAAO,KAAKkiE,IAAZ;EACD;;EACDgB,EAAAA,eAAe,CAACxkC,EAAD,EAAK/D,YAAL,EAAmBshC,SAAnB,EAA8BrhC,QAA9B,EAAwC;EACrD,UAAMkC,KAAK,GAAG,IAAIp5B,UAAJ,CAAeg7B,EAAE,CAAC3C,eAAH,CAAmBnB,QAAnB,CAAf,CAAd;EACA,QAAIuoC,sBAAsB,GAAGxoC,YAA7B;EACA,QAAI5d,IAAI,GAAG2hB,EAAE,CAAClD,eAAH,CAAmBygC,SAAnB,EAA8BrhC,QAA9B,CAAX;EACA,UAAMwoC,YAAY,GAAGD,sBAAsB,GAAG,CAA9C;;EACA,QAAIC,YAAY,GAAG,KAAKv5D,GAAL,CAAShH,MAA5B,EAAoC;EAClC,YAAMwgE,MAAM,GAAG,KAAKx5D,GAAL,CAASu5D,YAAT,CAAf;;EACA,UAAItmC,KAAK,CAACv4B,QAAN,CAAe8+D,MAAf,CAAJ,EAA4B;EAC1BF,QAAAA,sBAAsB,GAAGC,YAAzB;EACArmD,QAAAA,IAAI,GAAG,GAAP;EACD;EACF;;EACD,UAAMshD,EAAE,GAAG,KAAK8D,MAAL,CAAY/6D,GAAZ,CAAgB01B,KAAhB,EAAuBqmC,sBAAvB,EAA+CpmD,IAA/C,CAAX;EACD;;EACDrd,EAAAA,QAAQ,GAAG;EACT,UAAMqkC,OAAO,GAAG,IAAIxW,aAAJ,EAAhB;EACAwW,IAAAA,OAAO,CAACr1B,MAAR,CAAe,UAAU,KAAKsiB,KAAf,GAAuB,IAAtC;EACA+S,IAAAA,OAAO,CAACr1B,MAAR,CAAe,cAAf;;EACA,SAAK,IAAI1O,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6J,GAAL,CAAShH,MAA7B,EAAqC7C,CAAC,EAAtC,EAA0C;EACxC,UAAIA,CAAC,GAAG,CAAR,EAAW+jC,OAAO,CAACr1B,MAAR,CAAe,GAAf;EACXq1B,MAAAA,OAAO,CAACr1B,MAAR,CAAe,KAAK7E,GAAL,CAAS7J,CAAT,EAAY2B,CAAZ,GAAgB,GAAhB,GAAsB,KAAKkI,GAAL,CAAS7J,CAAT,EAAY4B,CAAjD;EACD;;EACDmiC,IAAAA,OAAO,CAACr1B,MAAR,CAAe,QAAQ,KAAKknD,MAAb,GAAsB,GAAtB,GAA4B,KAAK0M,WAAhD;EACA,WAAOv+B,OAAO,CAACrkC,QAAR,EAAP;EACD;;EACD4jE,EAAAA,gBAAgB,CAACj+D,CAAD,EAAI;EAClB,QAAI,KAAKwE,GAAL,CAAShH,MAAT,KAAoBwC,CAAC,CAACwE,GAAF,CAAMhH,MAA9B,EAAsC,OAAO,KAAP;;EACtC,SAAK,IAAI7C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6J,GAAL,CAAShH,MAA7B,EAAqC7C,CAAC,EAAtC,EACE,IAAI,CAAC,KAAK6J,GAAL,CAAS7J,CAAT,EAAYuE,QAAZ,CAAqBc,CAAC,CAACwE,GAAF,CAAM7J,CAAN,CAArB,CAAL,EACE,OAAO,KAAP;;EAGJ,WAAO,IAAP;EACD;;EACDujE,EAAAA,aAAa,CAACC,UAAD,EAAa;EACxB,SAAKlB,WAAL,GAAmBkB,UAAnB;EACD;;EACDC,EAAAA,uBAAuB,GAAG;EACxB,WAAO,KAAKtB,MAAZ;EACD;;EACDnJ,EAAAA,gBAAgB,CAACt6B,EAAD,EAAK/D,YAAL,EAAmBshC,SAAnB,EAA8B;EAC5C,SAAK,IAAIj8D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG0+B,EAAE,CAACpD,kBAAH,EAApB,EAA6Ct7B,CAAC,EAA9C,EACE,KAAKkjE,eAAL,CAAqBxkC,EAArB,EAAyB/D,YAAzB,EAAuCshC,SAAvC,EAAkDj8D,CAAlD;EAEH;;EAlL8C;;ECPlC,MAAM0jE,IAAN,SAAmBxC,cAAnB,CAAkC;EAC/C7hE,EAAAA,WAAW,GAAG;EACZ;EACAqkE,IAAAA,IAAI,CAAChhE,YAAL,CAAkBC,KAAlB,CAAwB,IAAxB,EAA8BC,SAA9B;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKihE,MAAL,GAAc,IAAd;EACA,SAAKC,MAAL,GAAc,IAAd;EACA,UAAMx+D,KAAK,GAAGxC,SAAS,CAAC,CAAD,CAAvB;EAAA,UAA4BiyD,KAAK,GAAGjyD,SAAS,CAAC,CAAD,CAA7C;EACA,SAAK+gE,MAAL,GAAcv+D,KAAd;EACA,SAAKw+D,MAAL,GAAc/O,KAAd;EACA,SAAKe,MAAL,GAAc,IAAIiG,KAAJ,CAAU,CAAV,EAAal6B,QAAQ,CAACM,IAAtB,CAAd;EACD;;EACD4hC,EAAAA,sBAAsB,GAAG;EACvB,SAAK,IAAI10C,EAAE,GAAG,KAAK20C,QAAL,GAAgBA,QAAhB,GAA2Bv8D,QAA3B,EAAd,EAAqD4nB,EAAE,CAAChmB,OAAH,EAArD,GAAqE;EACnE,YAAM46D,EAAE,GAAG50C,EAAE,CAACjmB,IAAH,EAAX;EACA,UAAI66D,EAAE,CAACC,OAAH,GAAatC,UAAb,EAAJ,EAA+B,OAAO,IAAP;EAChC;;EACD,WAAO,KAAP;EACD;;EACDe,EAAAA,UAAU,GAAG;EACX,WAAO,KAAK7M,MAAL,CAAY0G,gBAAZ,OAAmC,CAA1C;EACD;;EACDhzD,EAAAA,aAAa,GAAG;EACd,WAAO,KAAKq6D,MAAZ;EACD;;EACD/G,EAAAA,KAAK,CAACv/B,GAAD,EAAM;EACTA,IAAAA,GAAG,CAACC,OAAJ,CAAY,UAAU,KAAKqmC,MAAf,GAAwB,QAAxB,GAAmC,KAAK/N,MAApD;EACD;;EACDqM,EAAAA,SAAS,CAAC99B,EAAD,EAAK;;EACd8/B,EAAAA,qBAAqB,CAACC,MAAD,EAASC,QAAT,EAAmB;EACtC,QAAInjB,GAAG,GAAGrf,QAAQ,CAACM,IAAnB;EACA+e,IAAAA,GAAG,GAAG,KAAK4U,MAAL,CAAY3W,WAAZ,CAAwBklB,QAAxB,CAAN;;EACA,QAAI,CAACD,MAAM,CAACz3D,MAAP,CAAc03D,QAAd,CAAL,EAA8B;EAC5B,YAAMC,IAAI,GAAGF,MAAM,CAACjlB,WAAP,CAAmBklB,QAAnB,CAAb;EACA,UAAInjB,GAAG,KAAKrf,QAAQ,CAACI,QAArB,EAA+Bif,GAAG,GAAGojB,IAAN;EAChC;;EACD,WAAOpjB,GAAP;EACD;;EACD6gB,EAAAA,QAAQ,GAAG;EACT,QAAIj/D,SAAS,CAACC,MAAV,KAAqB,CAArB,IAA2BtC,MAAM,CAAC4J,SAAP,CAAiBvH,SAAS,CAAC,CAAD,CAA1B,KAAkCrC,MAAM,CAAC4J,SAAP,CAAiBvH,SAAS,CAAC,CAAD,CAA1B,CAAjE,EAAkG;EAChG,YAAMyhE,QAAQ,GAAGzhE,SAAS,CAAC,CAAD,CAA1B;EAAA,YAA+B0hE,UAAU,GAAG1hE,SAAS,CAAC,CAAD,CAArD;EACA,UAAI,KAAKgzD,MAAL,KAAgB,IAApB,EACE,KAAKA,MAAL,GAAc,IAAIiG,KAAJ,CAAUwI,QAAV,EAAoBC,UAApB,CAAd,CADF,KAEK,KAAK1O,MAAL,CAAY6F,WAAZ,CAAwB4I,QAAxB,EAAkCC,UAAlC;EACN,KALD,MAKO;EACL,aAAO,MAAMzC,QAAN,CAAel/D,KAAf,CAAqB,IAArB,EAA2BC,SAA3B,CAAP;EACD;EACF;;EACDkhE,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAKF,MAAZ;EACD;;EACDW,EAAAA,UAAU,GAAG;EACX,QAAI3hE,SAAS,CAAC,CAAD,CAAT,YAAwB8gE,IAA5B,EAAkC;EAChC,YAAMpjE,CAAC,GAAGsC,SAAS,CAAC,CAAD,CAAnB;EACA,WAAK2hE,UAAL,CAAgBjkE,CAAC,CAACs1D,MAAlB;EACD,KAHD,MAGO,IAAIhzD,SAAS,CAAC,CAAD,CAAT,YAAwBi5D,KAA5B,EAAmC;EACxC,YAAMqI,MAAM,GAAGthE,SAAS,CAAC,CAAD,CAAxB;;EACA,WAAK,IAAI5C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,CAApB,EAAuBA,CAAC,EAAxB,EAA4B;EAC1B,cAAMghD,GAAG,GAAG,KAAKijB,qBAAL,CAA2BC,MAA3B,EAAmClkE,CAAnC,CAAZ;;EACA,cAAMwkE,OAAO,GAAG,KAAK5O,MAAL,CAAY3W,WAAZ,CAAwBj/C,CAAxB,CAAhB;;EACA,YAAIwkE,OAAO,KAAK7iC,QAAQ,CAACM,IAAzB,EAA+B,KAAK2zB,MAAL,CAAY6F,WAAZ,CAAwBz7D,CAAxB,EAA2BghD,GAA3B;EAChC;EACF;EACF;;EACD55C,EAAAA,GAAG,CAAC/B,CAAD,EAAI;EACL,SAAKu+D,MAAL,CAAY1lB,MAAZ,CAAmB74C,CAAnB;;EACAA,IAAAA,CAAC,CAACo/D,OAAF,CAAU,IAAV;EACD;;EACDC,EAAAA,gBAAgB,CAACL,QAAD,EAAW;EACzB,QAAI,KAAKzO,MAAL,KAAgB,IAApB,EAA0B,OAAO,IAAP;EAC1B,QAAI5U,GAAG,GAAGrf,QAAQ,CAACM,IAAnB;EACA,QAAI,KAAK2zB,MAAL,KAAgB,IAApB,EAA0B5U,GAAG,GAAG,KAAK4U,MAAL,CAAY3W,WAAZ,CAAwBolB,QAAxB,CAAN;EAC1B,QAAInJ,MAAM,GAAG,IAAb;;EACA,YAAQla,GAAR;EACA,WAAKrf,QAAQ,CAACI,QAAd;EACEm5B,QAAAA,MAAM,GAAGv5B,QAAQ,CAACK,QAAlB;EACA;;EACF,WAAKL,QAAQ,CAACK,QAAd;EACEk5B,QAAAA,MAAM,GAAGv5B,QAAQ,CAACI,QAAlB;EACA;;EACF;EACEm5B,QAAAA,MAAM,GAAGv5B,QAAQ,CAACI,QAAlB;EACA;EATF;;EAWA,SAAK6zB,MAAL,CAAY6F,WAAZ,CAAwB4I,QAAxB,EAAkCnJ,MAAlC;EACD;;EAtF8C;;ECElC,MAAMyJ,OAAN,CAAc;EAC3BtlE,EAAAA,WAAW,GAAG;EACZslE,IAAAA,OAAO,CAACjiE,YAAR,CAAqBC,KAArB,CAA2B,IAA3B,EAAiCC,SAAjC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKkiE,OAAL,GAAe,IAAIrH,OAAJ,EAAf;EACA,SAAKsH,QAAL,GAAgB,IAAhB;EACA,UAAMA,QAAQ,GAAGjiE,SAAS,CAAC,CAAD,CAA1B;EACA,SAAKiiE,QAAL,GAAgBA,QAAhB;EACD;;EACDhU,EAAAA,IAAI,CAACzrD,KAAD,EAAQ;EACV,WAAO,KAAKw/D,OAAL,CAAa/8D,GAAb,CAAiBzC,KAAjB,CAAP;EACD;;EACD0/D,EAAAA,OAAO,GAAG;EACR,QAAIliE,SAAS,CAAC,CAAD,CAAT,YAAwBc,UAA5B,EAAwC;EACtC,YAAM0B,KAAK,GAAGxC,SAAS,CAAC,CAAD,CAAvB;EACA,UAAIy7C,IAAI,GAAG,KAAKumB,OAAL,CAAa/8D,GAAb,CAAiBzC,KAAjB,CAAX;;EACA,UAAIi5C,IAAI,KAAK,IAAb,EAAmB;EACjBA,QAAAA,IAAI,GAAG,KAAKwmB,QAAL,CAAcE,UAAd,CAAyB3/D,KAAzB,CAAP;EACA,aAAKw/D,OAAL,CAAan2C,GAAb,CAAiBrpB,KAAjB,EAAwBi5C,IAAxB;EACD;;EACD,aAAOA,IAAP;EACD,KARD,MAQO,IAAIz7C,SAAS,CAAC,CAAD,CAAT,YAAwB8gE,IAA5B,EAAkC;EACvC,YAAMpjE,CAAC,GAAGsC,SAAS,CAAC,CAAD,CAAnB;EACA,YAAMy7C,IAAI,GAAG,KAAKumB,OAAL,CAAa/8D,GAAb,CAAiBvH,CAAC,CAACgJ,aAAF,EAAjB,CAAb;;EACA,UAAI+0C,IAAI,KAAK,IAAb,EAAmB;EACjB,aAAKumB,OAAL,CAAan2C,GAAb,CAAiBnuB,CAAC,CAACgJ,aAAF,EAAjB,EAAoChJ,CAApC;EACA,eAAOA,CAAP;EACD;;EACD+9C,MAAAA,IAAI,CAACkmB,UAAL,CAAgBjkE,CAAhB;EACA,aAAO+9C,IAAP;EACD;EACF;;EACDue,EAAAA,KAAK,CAACv/B,GAAD,EAAM;EACT,SAAK,IAAIlO,EAAE,GAAG,KAAK5nB,QAAL,EAAd,EAA+B4nB,EAAE,CAAChmB,OAAH,EAA/B,GAA+C;EAC7C,YAAM7I,CAAC,GAAG6uB,EAAE,CAACjmB,IAAH,EAAV;EACA5I,MAAAA,CAAC,CAACs8D,KAAF,CAAQv/B,GAAR;EACD;EACF;;EACD91B,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAKq9D,OAAL,CAAa77D,MAAb,GAAsBxB,QAAtB,EAAP;EACD;;EACDwB,EAAAA,MAAM,GAAG;EACP,WAAO,KAAK67D,OAAL,CAAa77D,MAAb,EAAP;EACD;;EACDi8D,EAAAA,gBAAgB,CAAC/I,SAAD,EAAY;EAC1B,UAAMvD,QAAQ,GAAG,IAAI1wD,SAAJ,EAAjB;;EACA,SAAK,IAAIhI,CAAC,GAAG,KAAKuH,QAAL,EAAb,EAA8BvH,CAAC,CAACmJ,OAAF,EAA9B,GAA6C;EAC3C,YAAMk1C,IAAI,GAAGr+C,CAAC,CAACkJ,IAAF,EAAb;EACA,UAAIm1C,IAAI,CAACyjB,QAAL,GAAgB7iB,WAAhB,CAA4Bgd,SAA5B,MAA2Ct6B,QAAQ,CAACI,QAAxD,EAAkE22B,QAAQ,CAACtxD,GAAT,CAAai3C,IAAb;EACnE;;EACD,WAAOqa,QAAP;EACD;;EACDtxD,EAAAA,GAAG,CAAC/B,CAAD,EAAI;EACL,UAAMgG,CAAC,GAAGhG,CAAC,CAACiE,aAAF,EAAV;EACA,UAAMhJ,CAAC,GAAG,KAAKwkE,OAAL,CAAaz5D,CAAb,CAAV;EACA/K,IAAAA,CAAC,CAAC8G,GAAF,CAAM/B,CAAN;EACD;;EAzD0B;;ECDd,MAAM4/D,OAAN,CAAc;EAC3B5lE,EAAAA,WAAW,GAAG;EACZ4lE,IAAAA,OAAO,CAACviE,YAAR,CAAqBC,KAArB,CAA2B,IAA3B,EAAiCC,SAAjC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKwiE,KAAL,GAAa,IAAb;EACA,SAAKtP,MAAL,GAAc,IAAd;EACA,SAAKuP,KAAL,GAAa,IAAb;EACA,SAAKC,GAAL,GAAW,IAAX;EACA,SAAKC,GAAL,GAAW,IAAX;EACA,SAAKC,GAAL,GAAW,IAAX;EACA,SAAKC,GAAL,GAAW,IAAX;EACA,SAAKC,SAAL,GAAiB,IAAjB;;EACA,QAAI5iE,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMk3D,IAAI,GAAGn3D,SAAS,CAAC,CAAD,CAAtB;EACA,WAAKsiE,KAAL,GAAanL,IAAb;EACD,KAHD,MAGO,IAAIn3D,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMk3D,IAAI,GAAGn3D,SAAS,CAAC,CAAD,CAAtB;EAAA,YAA2BkkB,EAAE,GAAGlkB,SAAS,CAAC,CAAD,CAAzC;EAAA,YAA8C2I,EAAE,GAAG3I,SAAS,CAAC,CAAD,CAA5D;EACAqiE,MAAAA,OAAO,CAACviE,YAAR,CAAqBI,IAArB,CAA0B,IAA1B,EAAgCi3D,IAAhC,EAAsCjzC,EAAtC,EAA0Cvb,EAA1C,EAA8C,IAA9C;EACD,KAHM,MAGA,IAAI3I,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMk3D,IAAI,GAAGn3D,SAAS,CAAC,CAAD,CAAtB;EAAA,YAA2BkkB,EAAE,GAAGlkB,SAAS,CAAC,CAAD,CAAzC;EAAA,YAA8C2I,EAAE,GAAG3I,SAAS,CAAC,CAAD,CAA5D;EAAA,YAAiEwzD,KAAK,GAAGxzD,SAAS,CAAC,CAAD,CAAlF;EACAqiE,MAAAA,OAAO,CAACviE,YAAR,CAAqBI,IAArB,CAA0B,IAA1B,EAAgCi3D,IAAhC;EACA,WAAK3uD,IAAL,CAAU0b,EAAV,EAAcvb,EAAd;EACA,WAAKqqD,MAAL,GAAcQ,KAAd;EACD;EACF;;EACDqP,EAAAA,gBAAgB,CAACpgE,CAAD,EAAI;EAClB,QAAI,KAAKigE,GAAL,KAAajgE,CAAC,CAACigE,GAAf,IAAsB,KAAKC,GAAL,KAAalgE,CAAC,CAACkgE,GAAzC,EAA8C,OAAO,CAAP;EAC9C,QAAI,KAAKC,SAAL,GAAiBngE,CAAC,CAACmgE,SAAvB,EAAkC,OAAO,CAAP;EAClC,QAAI,KAAKA,SAAL,GAAiBngE,CAAC,CAACmgE,SAAvB,EAAkC,OAAO,CAAC,CAAR;EAClC,WAAO5sD,WAAW,CAACtQ,KAAZ,CAAkBjD,CAAC,CAAC+/D,GAApB,EAAyB//D,CAAC,CAACggE,GAA3B,EAAgC,KAAKA,GAArC,CAAP;EACD;;EACDK,EAAAA,KAAK,GAAG;EACN,WAAO,KAAKH,GAAZ;EACD;;EACDj8D,EAAAA,aAAa,GAAG;EACd,WAAO,KAAK87D,GAAZ;EACD;;EACDX,EAAAA,OAAO,CAACpmB,IAAD,EAAO;EACZ,SAAK8mB,KAAL,GAAa9mB,IAAb;EACD;;EACDue,EAAAA,KAAK,CAACv/B,GAAD,EAAM;EACT,UAAM4B,KAAK,GAAGhgC,IAAI,CAACigC,KAAL,CAAW,KAAKqmC,GAAhB,EAAqB,KAAKD,GAA1B,CAAd;EACA,UAAMK,SAAS,GAAG,KAAKxlD,QAAL,GAAgBqgC,OAAhB,EAAlB;EACA,UAAMolB,UAAU,GAAGD,SAAS,CAACE,WAAV,CAAsB,GAAtB,CAAnB;EACA,UAAMtmE,IAAI,GAAGomE,SAAS,CAAC50D,SAAV,CAAoB60D,UAAU,GAAG,CAAjC,CAAb;EACAvoC,IAAAA,GAAG,CAACu/B,KAAJ,CAAU,OAAOr9D,IAAP,GAAc,IAAd,GAAqB,KAAK6lE,GAA1B,GAAgC,KAAhC,GAAwC,KAAKC,GAA7C,GAAmD,GAAnD,GAAyD,KAAKG,SAA9D,GAA0E,GAA1E,GAAgFvmC,KAAhF,GAAwF,KAAxF,GAAgG,KAAK22B,MAA/G;EACD;;EACD5wD,EAAAA,SAAS,CAACiF,GAAD,EAAM;EACb,UAAM5E,CAAC,GAAG4E,GAAV;EACA,WAAO,KAAKw7D,gBAAL,CAAsBpgE,CAAtB,CAAP;EACD;;EACDygE,EAAAA,qBAAqB,GAAG;EACtB,WAAO,KAAKT,GAAZ;EACD;;EACDU,EAAAA,KAAK,GAAG;EACN,WAAO,KAAKT,GAAZ;EACD;;EACDxD,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAKlM,MAAZ;EACD;;EACDoO,EAAAA,OAAO,GAAG;EACR,WAAO,KAAKkB,KAAZ;EACD;;EACDc,EAAAA,WAAW,GAAG;EACZ,WAAO,KAAKR,SAAZ;EACD;;EACDS,EAAAA,OAAO,GAAG;EACR,WAAO,KAAKd,KAAZ;EACD;;EACDzlE,EAAAA,QAAQ,GAAG;EACT,UAAMu/B,KAAK,GAAGhgC,IAAI,CAACigC,KAAL,CAAW,KAAKqmC,GAAhB,EAAqB,KAAKD,GAA1B,CAAd;EACA,UAAMK,SAAS,GAAG,KAAKxlD,QAAL,GAAgBqgC,OAAhB,EAAlB;EACA,UAAMolB,UAAU,GAAGD,SAAS,CAACE,WAAV,CAAsB,GAAtB,CAAnB;EACA,UAAMtmE,IAAI,GAAGomE,SAAS,CAAC50D,SAAV,CAAoB60D,UAAU,GAAG,CAAjC,CAAb;EACA,WAAO,OAAOrmE,IAAP,GAAc,IAAd,GAAqB,KAAK6lE,GAA1B,GAAgC,KAAhC,GAAwC,KAAKC,GAA7C,GAAmD,GAAnD,GAAyD,KAAKG,SAA9D,GAA0E,GAA1E,GAAgFvmC,KAAhF,GAAwF,KAAxF,GAAgG,KAAK22B,MAA5G;EACD;;EACDsQ,EAAAA,YAAY,CAACC,gBAAD,EAAmB;;EAC/B/6D,EAAAA,IAAI,CAAC0b,EAAD,EAAKvb,EAAL,EAAS;EACX,SAAK65D,GAAL,GAAWt+C,EAAX;EACA,SAAKu+C,GAAL,GAAW95D,EAAX;EACA,SAAK+5D,GAAL,GAAW/5D,EAAE,CAAC5J,CAAH,GAAOmlB,EAAE,CAACnlB,CAArB;EACA,SAAK4jE,GAAL,GAAWh6D,EAAE,CAAC3J,CAAH,GAAOklB,EAAE,CAACllB,CAArB;EACA,SAAK4jE,SAAL,GAAiBjW,QAAQ,CAACa,QAAT,CAAkB,KAAKkV,GAAvB,EAA4B,KAAKC,GAAjC,CAAjB;EACAxiE,IAAAA,MAAM,CAACE,MAAP,CAAc,EAAE,KAAKqiE,GAAL,KAAa,CAAb,IAAkB,KAAKC,GAAL,KAAa,CAAjC,CAAd,EAAmD,wCAAnD;EACD;;EACD,MAAIt/D,WAAJ,GAAkB;EAChB,WAAO,CAAC7D,UAAD,CAAP;EACD;;EAxF0B;;ECDd,MAAMgkE,iBAAN,SAAgC5jE,gBAAhC,CAAiD;EAC9DnD,EAAAA,WAAW,CAACsqC,GAAD,EAAM1jB,EAAN,EAAU;EACnB,UAAMA,EAAE,GAAG0jB,GAAG,GAAG,KAAN,GAAc1jB,EAAd,GAAmB,IAAtB,GAA6B0jB,GAArC;EACA,SAAK1jB,EAAL,GAAUA,EAAE,GAAG,IAAIviB,UAAJ,CAAeuiB,EAAf,CAAH,GAAwB6P,SAApC;EACA,SAAKv2B,IAAL,GAAYC,MAAM,CAACC,IAAP,CAAY;EAAE2mE,MAAAA;EAAF,KAAZ,EAAmC,CAAnC,CAAZ;EACD;;EACD98D,EAAAA,aAAa,GAAG;EACd,WAAO,KAAK2c,EAAZ;EACD;;EAR6D;;ECEjD,MAAMogD,YAAN,SAA2BpB,OAA3B,CAAmC;EAChD5lE,EAAAA,WAAW,GAAG;EACZ;EACAgnE,IAAAA,YAAY,CAAC3jE,YAAb,CAA0BC,KAA1B,CAAgC,IAAhC,EAAsCC,SAAtC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK4jE,UAAL,GAAkB,IAAlB;EACA,SAAKnF,WAAL,GAAmB,KAAnB;EACA,SAAKG,UAAL,GAAkB,KAAlB;EACA,SAAK/Q,IAAL,GAAY,IAAZ;EACA,SAAKC,KAAL,GAAa,IAAb;EACA,SAAK+V,QAAL,GAAgB,IAAhB;EACA,SAAKC,SAAL,GAAiB,IAAjB;EACA,SAAKC,YAAL,GAAoB,IAApB;EACA,SAAKhG,MAAL,GAAc,CAAC,CAAD,EAAI,CAAC,GAAL,EAAU,CAAC,GAAX,CAAd;EACA,UAAM1G,IAAI,GAAGn3D,SAAS,CAAC,CAAD,CAAtB;EAAA,UAA2BgH,SAAS,GAAGhH,SAAS,CAAC,CAAD,CAAhD;EACAqiE,IAAAA,OAAO,CAACviE,YAAR,CAAqBI,IAArB,CAA0B,IAA1B,EAAgCi3D,IAAhC;EACA,SAAKuM,UAAL,GAAkB18D,SAAlB;;EACA,QAAIA,SAAJ,EAAe;EACb,WAAKwB,IAAL,CAAU2uD,IAAI,CAACzwD,aAAL,CAAmB,CAAnB,CAAV,EAAiCywD,IAAI,CAACzwD,aAAL,CAAmB,CAAnB,CAAjC;EACD,KAFD,MAEO;EACL,YAAMhJ,CAAC,GAAGy5D,IAAI,CAACv0C,YAAL,KAAsB,CAAhC;EACA,WAAKpa,IAAL,CAAU2uD,IAAI,CAACzwD,aAAL,CAAmBhJ,CAAnB,CAAV,EAAiCy5D,IAAI,CAACzwD,aAAL,CAAmBhJ,CAAC,GAAG,CAAvB,CAAjC;EACD;;EACD,SAAKomE,oBAAL;EACD;;EACD,SAAOC,WAAP,CAAmBC,YAAnB,EAAiCC,YAAjC,EAA+C;EAC7C,QAAID,YAAY,KAAKjlC,QAAQ,CAACG,QAA1B,IAAsC+kC,YAAY,KAAKllC,QAAQ,CAACK,QAApE,EAA8E,OAAO,CAAP,CAA9E,KAA6F,IAAI4kC,YAAY,KAAKjlC,QAAQ,CAACK,QAA1B,IAAsC6kC,YAAY,KAAKllC,QAAQ,CAACG,QAApE,EAA8E,OAAO,CAAC,CAAR;EAC3K,WAAO,CAAP;EACD;;EACDglC,EAAAA,UAAU,GAAG;EACX,WAAO,KAAKP,QAAZ;EACD;;EACD3F,EAAAA,QAAQ,CAAC33D,QAAD,EAAW;EACjB,WAAO,KAAKw3D,MAAL,CAAYx3D,QAAZ,CAAP;EACD;;EACDs4D,EAAAA,UAAU,CAACC,SAAD,EAAY;EACpB,SAAKF,UAAL,GAAkBE,SAAlB;EACD;;EACDkF,EAAAA,oBAAoB,GAAG;EACrB,SAAK9Q,MAAL,GAAc,IAAIiG,KAAJ,CAAU,KAAKqJ,KAAL,CAAWpD,QAAX,EAAV,CAAd;EACA,QAAI,CAAC,KAAKwE,UAAV,EAAsB,KAAK1Q,MAAL,CAAYwF,IAAZ;EACvB;;EACD2L,EAAAA,OAAO,GAAG;EACR,WAAO,KAAKvW,KAAZ;EACD;;EACDqQ,EAAAA,QAAQ,CAAC53D,QAAD,EAAW+9D,QAAX,EAAqB;EAC3B,QAAI,KAAKvG,MAAL,CAAYx3D,QAAZ,MAA0B,CAAC,GAA/B,EACE,IAAI,KAAKw3D,MAAL,CAAYx3D,QAAZ,MAA0B+9D,QAA9B,EAAwC,MAAM,IAAIZ,iBAAJ,CAAsB,8BAAtB,EAAsD,KAAK98D,aAAL,EAAtD,CAAN;EAE1C,SAAKm3D,MAAL,CAAYx3D,QAAZ,IAAwB+9D,QAAxB;EACD;;EACDC,EAAAA,kBAAkB,GAAG;EACnB,QAAIA,kBAAkB,GAAG,IAAzB;;EACA,SAAK,IAAIjnE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,CAApB,EAAuBA,CAAC,EAAxB,EACE,IAAI,EAAE,KAAK41D,MAAL,CAAY2F,MAAZ,CAAmBv7D,CAAnB,KAAyB,KAAK41D,MAAL,CAAY3W,WAAZ,CAAwBj/C,CAAxB,EAA2Bi1D,QAAQ,CAACz7C,IAApC,MAA8CmoB,QAAQ,CAACK,QAAhF,IAA4F,KAAK4zB,MAAL,CAAY3W,WAAZ,CAAwBj/C,CAAxB,EAA2Bi1D,QAAQ,CAAC37C,KAApC,MAA+CqoB,QAAQ,CAACK,QAAtJ,CAAJ,EACEilC,kBAAkB,GAAG,KAArB;;EAGJ,WAAOA,kBAAP;EACD;;EACDC,EAAAA,UAAU,CAACC,OAAD,EAAU;EAClB,SAAKZ,QAAL,GAAgBY,OAAhB;EACD;;EACDvK,EAAAA,KAAK,CAACv/B,GAAD,EAAM;EACT,UAAMu/B,KAAN,CAAY95D,IAAZ,CAAiB,IAAjB,EAAuBu6B,GAAvB;EACAA,IAAAA,GAAG,CAACu/B,KAAJ,CAAU,MAAM,KAAK6D,MAAL,CAAYxL,QAAQ,CAACz7C,IAArB,CAAN,GAAmC,GAAnC,GAAyC,KAAKinD,MAAL,CAAYxL,QAAQ,CAAC37C,KAArB,CAAnD;EACA+jB,IAAAA,GAAG,CAACu/B,KAAJ,CAAU,OAAO,KAAKoG,aAAL,EAAP,GAA8B,GAAxC;EACA,QAAI,KAAK7B,WAAT,EAAsB9jC,GAAG,CAACu/B,KAAJ,CAAU,WAAV;EACvB;;EACDwK,EAAAA,cAAc,CAACC,WAAD,EAAc;EAC1B,SAAKZ,YAAL,GAAoBY,WAApB;EACD;;EACDC,EAAAA,UAAU,GAAG;EACX,UAAMtM,MAAM,GAAG,KAAKpF,MAAL,CAAYoF,MAAZ,CAAmB,CAAnB,KAAyB,KAAKpF,MAAL,CAAYoF,MAAZ,CAAmB,CAAnB,CAAxC;;EACA,UAAMuM,iBAAiB,GAAG,CAAC,KAAK3R,MAAL,CAAY2F,MAAZ,CAAmB,CAAnB,CAAD,IAA0B,KAAK3F,MAAL,CAAYgG,iBAAZ,CAA8B,CAA9B,EAAiCj6B,QAAQ,CAACG,QAA1C,CAApD;;EACA,UAAM0lC,iBAAiB,GAAG,CAAC,KAAK5R,MAAL,CAAY2F,MAAZ,CAAmB,CAAnB,CAAD,IAA0B,KAAK3F,MAAL,CAAYgG,iBAAZ,CAA8B,CAA9B,EAAiCj6B,QAAQ,CAACG,QAA1C,CAApD;;EACA,WAAOk5B,MAAM,IAAIuM,iBAAV,IAA+BC,iBAAtC;EACD;;EACDC,EAAAA,WAAW,CAACC,QAAD,EAAW;EACpB,SAAKlB,SAAL,GAAiBkB,QAAjB;EACD;;EACDC,EAAAA,cAAc,GAAG;EACf,WAAO,KAAKlB,YAAZ;EACD;;EACDzD,EAAAA,aAAa,GAAG;EACd,QAAIQ,UAAU,GAAG,KAAK0B,KAAL,CAAWlC,aAAX,EAAjB;;EACA,QAAI,CAAC,KAAKsD,UAAV,EAAsB9C,UAAU,GAAG,CAACA,UAAd;EACtB,WAAOA,UAAP;EACD;;EACD/B,EAAAA,WAAW,CAACC,UAAD,EAAa;EACtB,SAAKP,WAAL,GAAmBO,UAAnB;EACD;;EACDkG,EAAAA,MAAM,GAAG;EACP,WAAO,KAAKrX,IAAZ;EACD;;EACD3mD,EAAAA,SAAS,GAAG;EACV,WAAO,KAAK08D,UAAZ;EACD;;EACDtC,EAAAA,OAAO,GAAG;EACR,WAAO,KAAKkB,KAAZ;EACD;;EACD2C,EAAAA,SAAS,CAACxqC,GAAD,EAAM;EACb,SAAKu/B,KAAL,CAAWv/B,GAAX;EACAA,IAAAA,GAAG,CAACu/B,KAAJ,CAAU,GAAV;EACA,QAAI,KAAK0J,UAAT,EAAqB,KAAKpB,KAAL,CAAWtI,KAAX,CAAiBv/B,GAAjB,EAArB,KAAiD,KAAK6nC,KAAL,CAAWjC,YAAX,CAAwB5lC,GAAxB;EAClD;;EACDg1B,EAAAA,MAAM,CAAC0R,EAAD,EAAK;EACT,SAAKxT,IAAL,GAAYwT,EAAZ;EACD;;EACD+D,EAAAA,cAAc,CAACtG,SAAD,EAAY;EACxB,SAAKD,UAAL,CAAgBC,SAAhB;;EACA,SAAKjR,IAAL,CAAUgR,UAAV,CAAqBC,SAArB;EACD;;EACDuG,EAAAA,aAAa,CAAC9+D,QAAD,EAAW++D,KAAX,EAAkB;EAC7B,QAAIxE,UAAU,GAAG,KAAKQ,OAAL,GAAehB,aAAf,EAAjB;EACA,QAAI,CAAC,KAAKsD,UAAV,EAAsB9C,UAAU,GAAG,CAACA,UAAd;EACtB,QAAIyE,eAAe,GAAG,CAAtB;EACA,QAAIh/D,QAAQ,KAAKgsD,QAAQ,CAACz7C,IAA1B,EAAgCyuD,eAAe,GAAG,CAAC,CAAnB;EAChC,UAAMC,WAAW,GAAGjT,QAAQ,CAACC,QAAT,CAAkBjsD,QAAlB,CAApB;EACA,UAAMk/D,KAAK,GAAG3E,UAAU,GAAGyE,eAA3B;EACA,UAAMG,aAAa,GAAGJ,KAAK,GAAGG,KAA9B;EACA,SAAKtH,QAAL,CAAc53D,QAAd,EAAwB++D,KAAxB;EACA,SAAKnH,QAAL,CAAcqH,WAAd,EAA2BE,aAA3B;EACD;;EACDC,EAAAA,WAAW,GAAG;EACZ,WAAO,KAAK7B,SAAZ;EACD;;EACD9E,EAAAA,UAAU,GAAG;EACX,WAAO,KAAKP,WAAZ;EACD;;EACDxP,EAAAA,OAAO,CAACzoD,IAAD,EAAO;EACZ,SAAKsnD,KAAL,GAAatnD,IAAb;EACD;;EACDs4D,EAAAA,SAAS,GAAG;EACV,WAAO,KAAKF,UAAZ;EACD;;EAxI+C;;ECJnC,MAAMgH,WAAN,CAAkB;EAC/BvD,EAAAA,UAAU,CAAC3/D,KAAD,EAAQ;EAChB,WAAO,IAAIs+D,IAAJ,CAASt+D,KAAT,EAAgB,IAAhB,CAAP;EACD;;EAH8B;;ECSlB,MAAMmjE,WAAN,CAAkB;EAC/BlpE,EAAAA,WAAW,GAAG;EACZkpE,IAAAA,WAAW,CAAC7lE,YAAZ,CAAyBC,KAAzB,CAA+B,IAA/B,EAAqCC,SAArC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKkhE,MAAL,GAAc,IAAI57D,SAAJ,EAAd;EACA,SAAKwgE,MAAL,GAAc,IAAd;EACA,SAAKC,YAAL,GAAoB,IAAIzgE,SAAJ,EAApB;;EACA,QAAIpF,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,WAAK2lE,MAAL,GAAc,IAAI7D,OAAJ,CAAY,IAAI2D,WAAJ,EAAZ,CAAd;EACD,KAFD,MAEO,IAAI1lE,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMgiE,QAAQ,GAAGjiE,SAAS,CAAC,CAAD,CAA1B;EACA,WAAK4lE,MAAL,GAAc,IAAI7D,OAAJ,CAAYE,QAAZ,CAAd;EACD;EACF;;EACD,SAAO6D,uBAAP,CAA+BC,KAA/B,EAAsC;EACpC,SAAK,IAAIC,MAAM,GAAGD,KAAK,CAACphE,QAAN,EAAlB,EAAoCqhE,MAAM,CAACz/D,OAAP,EAApC,GAAwD;EACtD,YAAMk1C,IAAI,GAAGuqB,MAAM,CAAC1/D,IAAP,EAAb;EACAm1C,MAAAA,IAAI,CAACylB,QAAL,GAAgB4E,uBAAhB;EACD;EACF;;EACDG,EAAAA,UAAU,CAACxrC,GAAD,EAAM;EACdA,IAAAA,GAAG,CAACC,OAAJ,CAAY,QAAZ;;EACA,SAAK,IAAIt9B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK4jE,MAAL,CAAYp8D,IAAZ,EAApB,EAAwCxH,CAAC,EAAzC,EAA6C;EAC3Cq9B,MAAAA,GAAG,CAACC,OAAJ,CAAY,UAAUt9B,CAAV,GAAc,GAA1B;;EACA,YAAMqF,CAAC,GAAG,KAAKu+D,MAAL,CAAY/7D,GAAZ,CAAgB7H,CAAhB,CAAV;;EACAqF,MAAAA,CAAC,CAACu3D,KAAF,CAAQv/B,GAAR;EACAh4B,MAAAA,CAAC,CAAC88D,MAAF,CAASvF,KAAT,CAAev/B,GAAf;EACD;EACF;;EACDwzB,EAAAA,IAAI,CAACzrD,KAAD,EAAQ;EACV,WAAO,KAAKojE,MAAL,CAAY3X,IAAZ,CAAiBzrD,KAAjB,CAAP;EACD;;EACD0/D,EAAAA,OAAO,GAAG;EACR,QAAIliE,SAAS,CAAC,CAAD,CAAT,YAAwB8gE,IAA5B,EAAkC;EAChC,YAAMrlB,IAAI,GAAGz7C,SAAS,CAAC,CAAD,CAAtB;EACA,aAAO,KAAK4lE,MAAL,CAAY1D,OAAZ,CAAoBzmB,IAApB,CAAP;EACD,KAHD,MAGO,IAAIz7C,SAAS,CAAC,CAAD,CAAT,YAAwBc,UAA5B,EAAwC;EAC7C,YAAM0B,KAAK,GAAGxC,SAAS,CAAC,CAAD,CAAvB;EACA,aAAO,KAAK4lE,MAAL,CAAY1D,OAAZ,CAAoB1/D,KAApB,CAAP;EACD;EACF;;EACD0jE,EAAAA,eAAe,GAAG;EAChB,WAAO,KAAKN,MAAL,CAAYjhE,QAAZ,EAAP;EACD;;EACDmhE,EAAAA,uBAAuB,GAAG;EACxB,SAAK,IAAIE,MAAM,GAAG,KAAKJ,MAAL,CAAYjhE,QAAZ,EAAlB,EAA0CqhE,MAAM,CAACz/D,OAAP,EAA1C,GAA8D;EAC5D,YAAMk1C,IAAI,GAAGuqB,MAAM,CAAC1/D,IAAP,EAAb;EACAm1C,MAAAA,IAAI,CAACylB,QAAL,GAAgB4E,uBAAhB;EACD;EACF;;EACDK,EAAAA,YAAY,CAAC9jE,CAAD,EAAI;EACd6V,IAAAA,MAAM,CAACuiB,GAAP,CAAWC,OAAX,CAAmBr4B,CAAnB;EACD;;EACD+jE,EAAAA,cAAc,CAAC/M,SAAD,EAAY72D,KAAZ,EAAmB;EAC/B,UAAMi5C,IAAI,GAAG,KAAKmqB,MAAL,CAAY3X,IAAZ,CAAiBzrD,KAAjB,CAAb;;EACA,QAAIi5C,IAAI,KAAK,IAAb,EAAmB,OAAO,KAAP;EACnB,UAAM+X,KAAK,GAAG/X,IAAI,CAACyjB,QAAL,EAAd;EACA,QAAI1L,KAAK,KAAK,IAAV,IAAkBA,KAAK,CAACnX,WAAN,CAAkBgd,SAAlB,MAAiCt6B,QAAQ,CAACI,QAAhE,EAA0E,OAAO,IAAP;EAC1E,WAAO,KAAP;EACD;;EACDknC,EAAAA,oBAAoB,GAAG;EACrB,SAAK,IAAIL,MAAM,GAAG,KAAKJ,MAAL,CAAYjhE,QAAZ,EAAlB,EAA0CqhE,MAAM,CAACz/D,OAAP,EAA1C,GAA8D;EAC5D,YAAMk1C,IAAI,GAAGuqB,MAAM,CAAC1/D,IAAP,EAAb;EACAm1C,MAAAA,IAAI,CAACylB,QAAL,GAAgBmF,oBAAhB;EACD;EACF;;EACDC,EAAAA,oBAAoB,CAACpiD,EAAD,EAAKvb,EAAL,EAAS49D,GAAT,EAAcC,GAAd,EAAmB;EACrC,QAAI,CAACtiD,EAAE,CAAC3jB,MAAH,CAAUgmE,GAAV,CAAL,EAAqB,OAAO,KAAP;EACrB,QAAIvwD,WAAW,CAACtQ,KAAZ,CAAkBwe,EAAlB,EAAsBvb,EAAtB,EAA0B69D,GAA1B,MAAmCxwD,WAAW,CAACa,SAA/C,IAA4D81C,QAAQ,CAACa,QAAT,CAAkBtpC,EAAlB,EAAsBvb,EAAtB,MAA8BgkD,QAAQ,CAACa,QAAT,CAAkB+Y,GAAlB,EAAuBC,GAAvB,CAA9F,EAA2H,OAAO,IAAP;EAC3H,WAAO,KAAP;EACD;;EACDC,EAAAA,WAAW,GAAG;EACZ,WAAO,KAAKZ,YAAZ;EACD;;EACDa,EAAAA,UAAU,CAACrkE,CAAD,EAAI;EACZ6V,IAAAA,MAAM,CAACuiB,GAAP,CAAWu/B,KAAX,CAAiB33D,CAAjB;EACD;;EACDskE,EAAAA,eAAe,GAAG;EAChB,WAAO,KAAK3F,MAAL,CAAYr8D,QAAZ,EAAP;EACD;;EACDiiE,EAAAA,uBAAuB,CAAC1iD,EAAD,EAAKvb,EAAL,EAAS;EAC9B,SAAK,IAAIvL,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK4jE,MAAL,CAAYp8D,IAAZ,EAApB,EAAwCxH,CAAC,EAAzC,EAA6C;EAC3C,YAAMqF,CAAC,GAAG,KAAKu+D,MAAL,CAAY/7D,GAAZ,CAAgB7H,CAAhB,CAAV;;EACA,YAAMypE,MAAM,GAAGpkE,CAAC,CAAC+f,cAAF,EAAf;EACA,UAAI,KAAK8jD,oBAAL,CAA0BpiD,EAA1B,EAA8Bvb,EAA9B,EAAkCk+D,MAAM,CAAC,CAAD,CAAxC,EAA6CA,MAAM,CAAC,CAAD,CAAnD,CAAJ,EAA6D,OAAOpkE,CAAP;EAC7D,UAAI,KAAK6jE,oBAAL,CAA0BpiD,EAA1B,EAA8Bvb,EAA9B,EAAkCk+D,MAAM,CAACA,MAAM,CAAC5mE,MAAP,GAAgB,CAAjB,CAAxC,EAA6D4mE,MAAM,CAACA,MAAM,CAAC5mE,MAAP,GAAgB,CAAjB,CAAnE,CAAJ,EAA6F,OAAOwC,CAAP;EAC9F;;EACD,WAAO,IAAP;EACD;;EACDqkE,EAAAA,UAAU,CAACrkE,CAAD,EAAI;EACZ,SAAKu+D,MAAL,CAAYx8D,GAAZ,CAAgB/B,CAAhB;EACD;;EACDskE,EAAAA,WAAW,CAACtkE,CAAD,EAAI;EACb,SAAK,IAAIrF,CAAC,GAAG,KAAKqpE,WAAL,GAAmB9hE,QAAnB,EAAb,EAA4CvH,CAAC,CAACmJ,OAAF,EAA5C,GAA2D;EACzD,YAAMygE,EAAE,GAAG5pE,CAAC,CAACkJ,IAAF,EAAX;EACA,UAAI0gE,EAAE,CAAC5F,OAAH,OAAiB3+D,CAArB,EAAwB,OAAOukE,EAAP;EACzB;;EACD,WAAO,IAAP;EACD;;EACD/P,EAAAA,QAAQ,CAACgQ,UAAD,EAAa;EACnB,SAAK,IAAI16C,EAAE,GAAG06C,UAAU,CAACtiE,QAAX,EAAd,EAAqC4nB,EAAE,CAAChmB,OAAH,EAArC,GAAqD;EACnD,YAAM9D,CAAC,GAAG8pB,EAAE,CAACjmB,IAAH,EAAV;;EACA,WAAK06D,MAAL,CAAYx8D,GAAZ,CAAgB/B,CAAhB;;EACA,YAAMykE,GAAG,GAAG,IAAIzD,YAAJ,CAAiBhhE,CAAjB,EAAoB,IAApB,CAAZ;EACA,YAAM0kE,GAAG,GAAG,IAAI1D,YAAJ,CAAiBhhE,CAAjB,EAAoB,KAApB,CAAZ;EACAykE,MAAAA,GAAG,CAACzX,MAAJ,CAAW0X,GAAX;EACAA,MAAAA,GAAG,CAAC1X,MAAJ,CAAWyX,GAAX;EACA,WAAK1iE,GAAL,CAAS0iE,GAAT;EACA,WAAK1iE,GAAL,CAAS2iE,GAAT;EACD;EACF;;EACD3iE,EAAAA,GAAG,CAAC/B,CAAD,EAAI;EACL,SAAKmjE,MAAL,CAAYphE,GAAZ,CAAgB/B,CAAhB;;EACA,SAAKojE,YAAL,CAAkBrhE,GAAlB,CAAsB/B,CAAtB;EACD;;EACD2kE,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAKxB,MAAL,CAAYz/D,MAAZ,EAAP;EACD;;EACDyqD,EAAAA,QAAQ,CAAC1sC,EAAD,EAAKvb,EAAL,EAAS;EACf,SAAK,IAAIvL,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK4jE,MAAL,CAAYp8D,IAAZ,EAApB,EAAwCxH,CAAC,EAAzC,EAA6C;EAC3C,YAAMqF,CAAC,GAAG,KAAKu+D,MAAL,CAAY/7D,GAAZ,CAAgB7H,CAAhB,CAAV;;EACA,YAAMypE,MAAM,GAAGpkE,CAAC,CAAC+f,cAAF,EAAf;EACA,UAAI0B,EAAE,CAAC3jB,MAAH,CAAUsmE,MAAM,CAAC,CAAD,CAAhB,KAAwBl+D,EAAE,CAACpI,MAAH,CAAUsmE,MAAM,CAAC,CAAD,CAAhB,CAA5B,EAAkD,OAAOpkE,CAAP;EACnD;;EACD,WAAO,IAAP;EACD;;EA9H8B;;ECiBlB,MAAM4kE,aAAN,SAA4B1B,WAA5B,CAAwC;EACrDlpE,EAAAA,WAAW,GAAG;EACZ;EACA4qE,IAAAA,aAAa,CAACvnE,YAAd,CAA2BC,KAA3B,CAAiC,IAAjC,EAAuCC,SAAvC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKwnE,WAAL,GAAmB,IAAnB;EACA,SAAKC,YAAL,GAAoB,IAAIn7C,OAAJ,EAApB;EACA,SAAKo7C,iBAAL,GAAyB,IAAzB;EACA,SAAKC,6BAAL,GAAqC,IAArC;EACA,SAAKC,SAAL,GAAiB,IAAjB;EACA,SAAKC,cAAL,GAAsB,IAAtB;EACA,SAAKC,gBAAL,GAAwB,KAAxB;EACA,SAAKC,aAAL,GAAqB,IAArB;EACA,SAAKC,cAAL,GAAsB,IAAtB;EACA,SAAKC,UAAL,GAAkB,IAAIhhB,YAAJ,EAAlB;;EACA,QAAI/mD,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMwhE,QAAQ,GAAGzhE,SAAS,CAAC,CAAD,CAA1B;EAAA,YAA+BgoE,UAAU,GAAGhoE,SAAS,CAAC,CAAD,CAArD;EACAqnE,MAAAA,aAAa,CAACvnE,YAAd,CAA2BI,IAA3B,CAAgC,IAAhC,EAAsCuhE,QAAtC,EAAgDuG,UAAhD,EAA4D7hB,gBAAgB,CAACW,qBAA7E;EACD,KAHD,MAGO,IAAI9mD,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMwhE,QAAQ,GAAGzhE,SAAS,CAAC,CAAD,CAA1B;EAAA,YAA+BgoE,UAAU,GAAGhoE,SAAS,CAAC,CAAD,CAArD;EAAA,YAA0DujE,gBAAgB,GAAGvjE,SAAS,CAAC,CAAD,CAAtF;EACA,WAAK0nE,SAAL,GAAiBjG,QAAjB;EACA,WAAK6F,WAAL,GAAmBU,UAAnB;EACA,WAAKR,iBAAL,GAAyBjE,gBAAzB;EACA,UAAIyE,UAAU,KAAK,IAAnB,EACE,KAAKxjE,GAAL,CAASwjE,UAAT;EAEH;EACF;;EACD,SAAOC,iBAAP,CAAyB1E,gBAAzB,EAA2Cld,aAA3C,EAA0D;EACxD,WAAOkd,gBAAgB,CAACnd,YAAjB,CAA8BC,aAA9B,IAA+CtnB,QAAQ,CAACI,QAAxD,GAAmEJ,QAAQ,CAACK,QAAnF;EACD;;EACD8oC,EAAAA,mBAAmB,CAACzG,QAAD,EAAWj/D,KAAX,EAAkB;EACnC,UAAM9E,CAAC,GAAG,KAAKkoE,MAAL,CAAY1D,OAAZ,CAAoB1/D,KAApB,CAAV;;EACA,UAAM42D,GAAG,GAAG17D,CAAC,CAACwhE,QAAF,EAAZ;EACA,QAAI7Y,aAAa,GAAG,CAApB;EACA,QAAIjI,GAAG,GAAGrf,QAAQ,CAACM,IAAnB;EACA+e,IAAAA,GAAG,GAAGgb,GAAG,CAAC/c,WAAJ,CAAgBolB,QAAhB,EAA0BpP,QAAQ,CAACE,EAAnC,CAAN;EACA,QAAInU,GAAG,KAAKrf,QAAQ,CAACI,QAArB,EAA+BknB,aAAa;EAC5C,UAAMiS,MAAM,GAAG+O,aAAa,CAACY,iBAAd,CAAgC,KAAKT,iBAArC,EAAwDnhB,aAAxD,CAAf;EACA+S,IAAAA,GAAG,CAACP,WAAJ,CAAgB4I,QAAhB,EAA0BnJ,MAA1B;EACD;;EACD6P,EAAAA,gBAAgB,GAAG;EACjB,QAAInoE,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAM67B,EAAE,GAAG97B,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyBooE,oBAAoB,GAAGpoE,SAAS,CAAC,CAAD,CAAzD;EACA,aAAO,KAAKmoE,gBAAL,CAAsBrsC,EAAtB,EAA0BssC,oBAA1B,EAAgD,KAAhD,CAAP;EACD,KAHD,MAGO,IAAIpoE,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAM67B,EAAE,GAAG97B,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyBooE,oBAAoB,GAAGpoE,SAAS,CAAC,CAAD,CAAzD;EAAA,YAA8DqoE,iBAAiB,GAAGroE,SAAS,CAAC,CAAD,CAA3F;EACA,YAAM6yD,EAAE,GAAG,IAAIwB,kBAAJ,CAAuBv4B,EAAvB,EAA2B,IAA3B,EAAiC,KAAjC,CAAX;EACA+2B,MAAAA,EAAE,CAAC6C,oBAAH,CAAwB2S,iBAAxB;EACA,YAAMC,GAAG,GAAG,KAAKC,wBAAL,EAAZ;EACA,YAAMC,OAAO,GAAG,KAAKlB,WAAL,YAA4Bt/C,UAA5B,IAA0C,KAAKs/C,WAAL,YAA4B5iD,OAAtE,IAAiF,KAAK4iD,WAAL,YAA4B/7C,YAA7H;EACA,YAAMk9C,kBAAkB,GAAGL,oBAAoB,IAAI,CAACI,OAApD;EACAF,MAAAA,GAAG,CAAC3V,oBAAJ,CAAyB,KAAKqO,MAA9B,EAAsCnO,EAAtC,EAA0C4V,kBAA1C;EACA,WAAKC,wBAAL,CAA8B,KAAKhB,SAAnC;EACA,aAAO7U,EAAP;EACD;EACF;;EACD8V,EAAAA,iBAAiB,CAACC,QAAD,EAAW;EAC1B,SAAK,IAAIxrE,CAAC,GAAG,KAAK4jE,MAAL,CAAYr8D,QAAZ,EAAb,EAAqCvH,CAAC,CAACmJ,OAAF,EAArC,GAAoD;EAClD,YAAM9D,CAAC,GAAGrF,CAAC,CAACkJ,IAAF,EAAV;EACA7D,MAAAA,CAAC,CAAC88D,MAAF,CAAS7D,aAAT,CAAuBkN,QAAvB;EACD;EACF;;EACDC,EAAAA,wBAAwB,CAACttD,CAAD,EAAIugB,EAAJ,EAAQo5B,aAAR,EAAuB;EAC7C,UAAMrC,EAAE,GAAG,IAAIwB,kBAAJ,CAAuBv4B,EAAvB,EAA2Bo5B,aAA3B,EAA0C,IAA1C,CAAX;EACArC,IAAAA,EAAE,CAACoD,gBAAH,CAAoB,KAAKmM,gBAAL,EAApB,EAA6C7mD,CAAC,CAAC6mD,gBAAF,EAA7C;EACA,UAAMkG,GAAG,GAAG,KAAKC,wBAAL,EAAZ;EACAD,IAAAA,GAAG,CAAC3V,oBAAJ,CAAyB,KAAKqO,MAA9B,EAAsCzlD,CAAC,CAACylD,MAAxC,EAAgDnO,EAAhD;EACA,WAAOA,EAAP;EACD;;EACDxhB,EAAAA,WAAW,GAAG;EACZ,WAAO,KAAKi2B,WAAZ;EACD;;EACDwB,EAAAA,mBAAmB,GAAG;EACpB,WAAO,KAAKtB,iBAAZ;EACD;;EACDuB,EAAAA,eAAe,GAAG;EAChB,WAAO,KAAKnB,gBAAZ;EACD;;EACDznB,EAAAA,QAAQ,GAAG;EACT,QAAIngD,SAAS,CAAC,CAAD,CAAT,YAAwByjB,KAA5B,EAAmC;EACjC,YAAMhb,CAAC,GAAGzI,SAAS,CAAC,CAAD,CAAnB;EACA,YAAMwC,KAAK,GAAGiG,CAAC,CAAC/B,aAAF,EAAd;EACA,WAAKsiE,WAAL,CAAiB,KAAKtB,SAAtB,EAAiCllE,KAAjC,EAAwCu8B,QAAQ,CAACK,QAAjD;EACD,KAJD,MAIO,IAAIp/B,SAAS,CAAC,CAAD,CAAT,YAAwBc,UAA5B,EAAwC;EAC7C,YAAMuiB,EAAE,GAAGrjB,SAAS,CAAC,CAAD,CAApB;EACA,WAAKgpE,WAAL,CAAiB,KAAKtB,SAAtB,EAAiCrkD,EAAjC,EAAqC0b,QAAQ,CAACK,QAA9C;EACD;EACF;;EACD6pC,EAAAA,UAAU,CAACxgE,CAAD,EAAI;EACZ,SAAKygE,cAAL,CAAoBzgE,CAAC,CAACsd,eAAF,EAApB,EAAyCgZ,QAAQ,CAACG,QAAlD,EAA4DH,QAAQ,CAACK,QAArE;;EACA,SAAK,IAAIhiC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqL,CAAC,CAAC4c,kBAAF,EAApB,EAA4CjoB,CAAC,EAA7C,EAAiD;EAC/C,YAAM2xC,IAAI,GAAGtmC,CAAC,CAACud,gBAAF,CAAmB5oB,CAAnB,CAAb;EACA,WAAK8rE,cAAL,CAAoBn6B,IAApB,EAA0BhQ,QAAQ,CAACK,QAAnC,EAA6CL,QAAQ,CAACG,QAAtD;EACD;EACF;;EACDuxB,EAAAA,OAAO,CAAChuD,CAAD,EAAI;EACT,SAAKqkE,UAAL,CAAgBrkE,CAAhB;EACA,UAAMD,KAAK,GAAGC,CAAC,CAAC+f,cAAF,EAAd;EACA,SAAKwmD,WAAL,CAAiB,KAAKtB,SAAtB,EAAiCllE,KAAK,CAAC,CAAD,CAAtC,EAA2Cu8B,QAAQ,CAACI,QAApD;EACA,SAAK6pC,WAAL,CAAiB,KAAKtB,SAAtB,EAAiCllE,KAAK,CAACA,KAAK,CAACvC,MAAN,GAAe,CAAhB,CAAtC,EAA0D8+B,QAAQ,CAACI,QAAnE;EACD;;EACDgqC,EAAAA,aAAa,CAAClvD,IAAD,EAAO;EAClB,UAAMzX,KAAK,GAAG6lB,gBAAgB,CAACU,oBAAjB,CAAsC9O,IAAI,CAACuI,cAAL,EAAtC,CAAd;;EACA,QAAIhgB,KAAK,CAACvC,MAAN,GAAe,CAAnB,EAAsB;EACpB,WAAK2nE,gBAAL,GAAwB,IAAxB;EACA,WAAKC,aAAL,GAAqBrlE,KAAK,CAAC,CAAD,CAA1B;EACA,aAAO,IAAP;EACD;;EACD,UAAMC,CAAC,GAAG,IAAI05D,IAAJ,CAAS35D,KAAT,EAAgB,IAAIy2D,KAAJ,CAAU,KAAKyO,SAAf,EAA0B3oC,QAAQ,CAACK,QAAnC,CAAhB,CAAV;;EACA,SAAKmoC,YAAL,CAAkB17C,GAAlB,CAAsB5R,IAAtB,EAA4BxX,CAA5B;;EACA,SAAKqkE,UAAL,CAAgBrkE,CAAhB;EACAtC,IAAAA,MAAM,CAACE,MAAP,CAAcmC,KAAK,CAACvC,MAAN,IAAgB,CAA9B,EAAiC,oCAAjC;EACA,SAAKioE,mBAAL,CAAyB,KAAKR,SAA9B,EAAyCllE,KAAK,CAAC,CAAD,CAA9C;EACA,SAAK0lE,mBAAL,CAAyB,KAAKR,SAA9B,EAAyCllE,KAAK,CAACA,KAAK,CAACvC,MAAN,GAAe,CAAhB,CAA9C;EACD;;EACDmpE,EAAAA,eAAe,GAAG;EAChB,WAAO,KAAKvB,aAAZ;EACD;;EACDwB,EAAAA,iBAAiB,GAAG;EAClB,UAAMziE,IAAI,GAAG,KAAKw7D,gBAAL,EAAb;EACA,UAAMn7D,GAAG,GAAG,IAAIC,KAAJ,CAAUN,IAAI,CAAChC,IAAL,EAAV,EAAuBuC,IAAvB,CAA4B,IAA5B,CAAZ;EACA,QAAI/J,CAAC,GAAG,CAAR;;EACA,SAAK,IAAImvB,EAAE,GAAG3lB,IAAI,CAACjC,QAAL,EAAd,EAA+B4nB,EAAE,CAAChmB,OAAH,EAA/B,GAA+C;EAC7C,YAAMk1C,IAAI,GAAGlvB,EAAE,CAACjmB,IAAH,EAAb;EACAW,MAAAA,GAAG,CAAC7J,CAAC,EAAF,CAAH,GAAWq+C,IAAI,CAAC/0C,aAAL,GAAqB/D,IAArB,EAAX;EACD;;EACD,WAAOsE,GAAP;EACD;;EACDm7D,EAAAA,gBAAgB,GAAG;EACjB,QAAI,KAAKuF,cAAL,KAAwB,IAA5B,EAAkC,KAAKA,cAAL,GAAsB,KAAK/B,MAAL,CAAYxD,gBAAZ,CAA6B,KAAKsF,SAAlC,CAAtB;EAClC,WAAO,KAAKC,cAAZ;EACD;;EACD2B,EAAAA,uBAAuB,CAAC7H,QAAD,EAAWj/D,KAAX,EAAkB47C,GAAlB,EAAuB;EAC5C,QAAI,KAAKgoB,cAAL,CAAoB3E,QAApB,EAA8Bj/D,KAA9B,CAAJ,EAA0C,OAAO,IAAP;EAC1C,QAAI47C,GAAG,KAAKrf,QAAQ,CAACI,QAAjB,IAA6B,KAAKsoC,6BAAtC,EAAqE,KAAKS,mBAAL,CAAyBzG,QAAzB,EAAmCj/D,KAAnC,EAArE,KAAqH,KAAKwmE,WAAL,CAAiBvH,QAAjB,EAA2Bj/D,KAA3B,EAAkC47C,GAAlC;EACtH;;EACD8qB,EAAAA,cAAc,CAACK,EAAD,EAAKC,MAAL,EAAaC,OAAb,EAAsB;EAClC,QAAIF,EAAE,CAAC7kE,OAAH,EAAJ,EAAkB,OAAO,IAAP;EAClB,UAAMlC,KAAK,GAAG6lB,gBAAgB,CAACU,oBAAjB,CAAsCwgD,EAAE,CAAC/mD,cAAH,EAAtC,CAAd;;EACA,QAAIhgB,KAAK,CAACvC,MAAN,GAAe,CAAnB,EAAsB;EACpB,WAAK2nE,gBAAL,GAAwB,IAAxB;EACA,WAAKC,aAAL,GAAqBrlE,KAAK,CAAC,CAAD,CAA1B;EACA,aAAO,IAAP;EACD;;EACD,QAAIu1D,IAAI,GAAGyR,MAAX;EACA,QAAIxR,KAAK,GAAGyR,OAAZ;;EACA,QAAIzzD,WAAW,CAACC,KAAZ,CAAkBzT,KAAlB,CAAJ,EAA8B;EAC5Bu1D,MAAAA,IAAI,GAAG0R,OAAP;EACAzR,MAAAA,KAAK,GAAGwR,MAAR;EACD;;EACD,UAAM/mE,CAAC,GAAG,IAAI05D,IAAJ,CAAS35D,KAAT,EAAgB,IAAIy2D,KAAJ,CAAU,KAAKyO,SAAf,EAA0B3oC,QAAQ,CAACI,QAAnC,EAA6C44B,IAA7C,EAAmDC,KAAnD,CAAhB,CAAV;;EACA,SAAKuP,YAAL,CAAkB17C,GAAlB,CAAsB09C,EAAtB,EAA0B9mE,CAA1B;;EACA,SAAKqkE,UAAL,CAAgBrkE,CAAhB;EACA,SAAKumE,WAAL,CAAiB,KAAKtB,SAAtB,EAAiCllE,KAAK,CAAC,CAAD,CAAtC,EAA2Cu8B,QAAQ,CAACI,QAApD;EACD;;EACD6pC,EAAAA,WAAW,CAACvH,QAAD,EAAWj/D,KAAX,EAAkBk/D,UAAlB,EAA8B;EACvC,UAAMhkE,CAAC,GAAG,KAAKkoE,MAAL,CAAY1D,OAAZ,CAAoB1/D,KAApB,CAAV;;EACA,UAAM42D,GAAG,GAAG17D,CAAC,CAACwhE,QAAF,EAAZ;EACA,QAAI9F,GAAG,KAAK,IAAZ,EACE17D,CAAC,CAACs1D,MAAF,GAAW,IAAIiG,KAAJ,CAAUwI,QAAV,EAAoBC,UAApB,CAAX,CADF,KAEKtI,GAAG,CAACP,WAAJ,CAAgB4I,QAAhB,EAA0BC,UAA1B;EACN;;EACD6G,EAAAA,wBAAwB,GAAG;EACzB,WAAO,IAAI7R,4BAAJ,EAAP;EACD;;EACDgS,EAAAA,wBAAwB,CAACjH,QAAD,EAAW;EACjC,SAAK,IAAIrkE,CAAC,GAAG,KAAK4jE,MAAL,CAAYr8D,QAAZ,EAAb,EAAqCvH,CAAC,CAACmJ,OAAF,EAArC,GAAoD;EAClD,YAAM9D,CAAC,GAAGrF,CAAC,CAACkJ,IAAF,EAAV;EACA,YAAMojE,IAAI,GAAGjnE,CAAC,CAACy8D,QAAF,GAAa7iB,WAAb,CAAyBolB,QAAzB,CAAb;;EACA,WAAK,IAAIkI,IAAI,GAAGlnE,CAAC,CAAC88D,MAAF,CAAS56D,QAAT,EAAhB,EAAqCglE,IAAI,CAACpjE,OAAL,EAArC,GAAuD;EACrD,cAAMk1D,EAAE,GAAGkO,IAAI,CAACrjE,IAAL,EAAX;EACA,aAAKgjE,uBAAL,CAA6B7H,QAA7B,EAAuChG,EAAE,CAACj5D,KAA1C,EAAiDknE,IAAjD;EACD;EACF;EACF;;EACDllE,EAAAA,GAAG,GAAG;EACJ,QAAIxE,SAAS,CAACC,MAAV,KAAqB,CAArB,IAA0BD,SAAS,CAAC,CAAD,CAAT,YAAwBya,QAAtD,EAAgE;EAC9D,YAAMc,CAAC,GAAGvb,SAAS,CAAC,CAAD,CAAnB;EACA,UAAIub,CAAC,CAAC7W,OAAF,EAAJ,EAAiB,OAAO,IAAP;EACjB,UAAI6W,CAAC,YAAYgQ,YAAjB,EAA+B,KAAKk8C,6BAAL,GAAqC,KAArC;EAC/B,UAAIlsD,CAAC,YAAYmJ,OAAjB,EAA0B,KAAKukD,UAAL,CAAgB1tD,CAAhB,EAA1B,KAAmD,IAAIA,CAAC,YAAY6G,UAAjB,EAA6B,KAAK+mD,aAAL,CAAmB5tD,CAAnB,EAA7B,KAAyD,IAAIA,CAAC,YAAYkI,KAAjB,EAAwB,KAAK08B,QAAL,CAAc5kC,CAAd,EAAxB,KAA+C,IAAIA,CAAC,YAAYuM,UAAjB,EAA6B,KAAK8hD,aAAL,CAAmBruD,CAAnB,EAA7B,KAAyD,IAAIA,CAAC,YAAYgT,eAAjB,EAAkC,KAAKq7C,aAAL,CAAmBruD,CAAnB,EAAlC,KAA8D,IAAIA,CAAC,YAAYgQ,YAAjB,EAA+B,KAAKq+C,aAAL,CAAmBruD,CAAnB,EAA/B,KAA2D,IAAIA,CAAC,YAAY0L,kBAAjB,EAAqC,KAAK2iD,aAAL,CAAmBruD,CAAnB,EAArC,KAAiE,MAAM,IAAI2F,6BAAJ,CAAkC3F,CAAC,CAAC0H,eAAF,EAAlC,CAAN;EAC/Y,KALD,MAKO;EACL,aAAO,MAAMze,GAAN,CAAUzE,KAAV,CAAgB,IAAhB,EAAsBC,SAAtB,CAAP;EACD;EACF;;EACD4pE,EAAAA,aAAa,CAACniD,EAAD,EAAK;EAChB,SAAK,IAAIrqB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqqB,EAAE,CAAC/L,gBAAH,EAApB,EAA2Cte,CAAC,EAA5C,EAAgD;EAC9C,YAAMme,CAAC,GAAGkM,EAAE,CAAC1M,YAAH,CAAgB3d,CAAhB,CAAV;EACA,WAAKoH,GAAL,CAAS+W,CAAT;EACD;EACF;;EACDq+B,EAAAA,MAAM,CAACv2B,EAAD,EAAK;EACT,QAAI1c,YAAY,CAAC,KAAK2gE,WAAN,EAAmB7iD,SAAnB,CAAZ,IAA6C,KAAK6iD,WAAL,CAAiB5rD,gBAAjB,KAAsC,EAAvF,EAA2F;EACzF,UAAI,KAAKosD,cAAL,KAAwB,IAA5B,EACE,KAAKA,cAAL,GAAsB,IAAIprB,yBAAJ,CAA8B,KAAK4qB,WAAnC,CAAtB;EAEF,aAAO,KAAKQ,cAAL,CAAoBluB,MAApB,CAA2Bv2B,EAA3B,CAAP;EACD;;EACD,WAAO,KAAK0kD,UAAL,CAAgBnuB,MAAhB,CAAuBv2B,EAAvB,EAA2B,KAAKikD,WAAhC,CAAP;EACD;;EACD1W,EAAAA,QAAQ,GAAG;EACT,QAAI5wD,SAAS,CAACC,MAAV,KAAqB,CAArB,IAA0BD,SAAS,CAAC,CAAD,CAAT,YAAwBoiB,UAAtD,EAAkE;EAChE,YAAMnI,IAAI,GAAGja,SAAS,CAAC,CAAD,CAAtB;EACA,aAAO,KAAKunE,YAAL,CAAkBtiE,GAAlB,CAAsBgV,IAAtB,CAAP;EACD,KAHD,MAGO;EACL,aAAO,MAAM22C,QAAN,CAAe7wD,KAAf,CAAqB,IAArB,EAA2BC,SAA3B,CAAP;EACD;EACF;;EAjNoD;;;;;;;EC3BxC,MAAM6pE,aAAN,CAAoB;EACjCj3B,EAAAA,KAAK,CAAC6I,IAAD,EAAO;;EADqB;;ECCpB,MAAMquB,MAAN,CAAa;EAC1BrtE,EAAAA,WAAW,GAAG;EACZqtE,IAAAA,MAAM,CAAChqE,YAAP,CAAoBC,KAApB,CAA0B,IAA1B,EAAgCC,SAAhC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKg8C,EAAL,GAAU,IAAV;EACA,SAAKwgB,KAAL,GAAa,IAAb;EACA,SAAKyN,KAAL,GAAa,IAAb;EACA,SAAKC,MAAL,GAAc,IAAd;EACA,SAAKC,MAAL,GAAc,IAAd;;EACA,QAAIjqE,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMwI,CAAC,GAAGzI,SAAS,CAAC,CAAD,CAAnB;EAAA,YAAwBkqE,IAAI,GAAGlqE,SAAS,CAAC,CAAD,CAAxC;EACA,WAAK87C,EAAL,GAAU,IAAIh7C,UAAJ,CAAe2H,CAAf,CAAV;EACA,WAAKshE,KAAL,GAAa,IAAb;EACA,WAAKC,MAAL,GAAc,IAAd;EACA,WAAKC,MAAL,GAAc,CAAd;EACA,WAAK3N,KAAL,GAAa4N,IAAb;EACD,KAPD,MAOO,IAAIlqE,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAM0jC,EAAE,GAAG3jC,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyB4jC,EAAE,GAAG5jC,SAAS,CAAC,CAAD,CAAvC;EAAA,YAA4CkqE,IAAI,GAAGlqE,SAAS,CAAC,CAAD,CAA5D;EACA,WAAK87C,EAAL,GAAU,IAAIh7C,UAAJ,CAAe6iC,EAAf,EAAmBC,EAAnB,CAAV;EACA,WAAKmmC,KAAL,GAAa,IAAb;EACA,WAAKC,MAAL,GAAc,IAAd;EACA,WAAKC,MAAL,GAAc,CAAd;EACA,WAAK3N,KAAL,GAAa4N,IAAb;EACD;EACF;;EACDC,EAAAA,UAAU,GAAG;EACX,WAAO,KAAKF,MAAL,GAAc,CAArB;EACD;;EACDG,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAKJ,MAAZ;EACD;;EACDtjE,EAAAA,aAAa,GAAG;EACd,WAAO,KAAKo1C,EAAZ;EACD;;EACDuuB,EAAAA,OAAO,CAACN,KAAD,EAAQ;EACb,SAAKA,KAAL,GAAaA,KAAb;EACD;;EACDznE,EAAAA,IAAI,GAAG;EACL,WAAO,KAAKw5C,EAAL,CAAQ/8C,CAAf;EACD;;EACDurE,EAAAA,OAAO,GAAG;EACR,WAAO,KAAKhO,KAAZ;EACD;;EACDiO,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAKN,MAAZ;EACD;;EACDO,EAAAA,OAAO,GAAG;EACR,WAAO,KAAKT,KAAZ;EACD;;EACD9mE,EAAAA,IAAI,GAAG;EACL,WAAO,KAAK64C,EAAL,CAAQ98C,CAAf;EACD;;EACDyrE,EAAAA,SAAS,GAAG;EACV,SAAKR,MAAL,GAAc,KAAKA,MAAL,GAAc,CAA5B;EACD;;EACDS,EAAAA,QAAQ,CAACV,MAAD,EAAS;EACf,SAAKA,MAAL,GAAcA,MAAd;EACD;;EA1DyB;;ECMb,MAAMW,MAAN,CAAa;EAC1BluE,EAAAA,WAAW,GAAG;EACZkuE,IAAAA,MAAM,CAAC7qE,YAAP,CAAoBC,KAApB,CAA0B,IAA1B,EAAgCC,SAAhC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKo7C,KAAL,GAAa,IAAb;EACA,SAAK0vB,cAAL,GAAsB,IAAtB;EACA,SAAKC,UAAL,GAAkB,IAAlB;;EACA,QAAI7qE,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B0qE,MAAAA,MAAM,CAAC7qE,YAAP,CAAoBI,IAApB,CAAyB,IAAzB,EAA+B,GAA/B;EACD,KAFD,MAEO,IAAIF,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAM7D,SAAS,GAAG4D,SAAS,CAAC,CAAD,CAA3B;EACA,WAAK6qE,UAAL,GAAkBzuE,SAAlB;EACD;EACF;;EACD,SAAO0uE,aAAP,GAAuB;EACrB,QAAI9qE,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAM8qE,OAAO,GAAG/qE,SAAS,CAAC,CAAD,CAAzB;EACA,aAAO2qE,MAAM,CAACG,aAAP,CAAqBC,OAArB,EAA8B,KAA9B,CAAP;EACD,KAHD,MAGO,IAAI/qE,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAM8qE,OAAO,GAAG/qE,SAAS,CAAC,CAAD,CAAzB;EAAA,YAA8BgrE,eAAe,GAAGhrE,SAAS,CAAC,CAAD,CAAzD;EACA,YAAMwC,KAAK,GAAG,IAAIgE,cAAJ,EAAd;;EACA,WAAK,IAAI+lB,EAAE,GAAGw+C,OAAO,CAACpmE,QAAR,EAAd,EAAkC4nB,EAAE,CAAChmB,OAAH,EAAlC,GAAkD;EAChD,cAAMk1C,IAAI,GAAGlvB,EAAE,CAACjmB,IAAH,EAAb;EACA,cAAMqzD,KAAK,GAAGqR,eAAe,GAAGvvB,IAAI,CAAC8uB,QAAL,EAAH,GAAqB,CAAlD;;EACA,aAAK,IAAIntE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGu8D,KAApB,EAA2Bv8D,CAAC,EAA5B,EACEoF,KAAK,CAACgC,GAAN,CAAUi3C,IAAI,CAAC/0C,aAAL,EAAV,EAAgC,IAAhC;EAEH;;EACD,aAAOlE,KAAK,CAACsE,iBAAN,EAAP;EACD;EACF;;EACDw0C,EAAAA,MAAM,GAAG;EACP,QAAIt7C,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMwI,CAAC,GAAGzI,SAAS,CAAC,CAAD,CAAnB;EACA,aAAO,KAAKs7C,MAAL,CAAY7yC,CAAZ,EAAe,IAAf,CAAP;EACD,KAHD,MAGO,IAAIzI,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMwI,CAAC,GAAGzI,SAAS,CAAC,CAAD,CAAnB;EAAA,YAAwBkqE,IAAI,GAAGlqE,SAAS,CAAC,CAAD,CAAxC;;EACA,UAAI,KAAKk7C,KAAL,KAAe,IAAnB,EAAyB;EACvB,aAAKA,KAAL,GAAa,IAAI4uB,MAAJ,CAAWrhE,CAAX,EAAcyhE,IAAd,CAAb;EACA,eAAO,KAAKhvB,KAAZ;EACD;;EACD,UAAI,KAAK2vB,UAAL,GAAkB,CAAtB,EAAyB;EACvB,cAAMI,SAAS,GAAG,KAAKC,iBAAL,CAAuBziE,CAAvB,CAAlB;;EACA,YAAIwiE,SAAS,KAAK,IAAlB,EAAwB;EACtBA,UAAAA,SAAS,CAACR,SAAV;EACA,iBAAOQ,SAAP;EACD;EACF;;EACD,aAAO,KAAKE,WAAL,CAAiB1iE,CAAjB,EAAoByhE,IAApB,CAAP;EACD;EACF;;EACDxvB,EAAAA,KAAK,GAAG;EACN,QAAI16C,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMmrE,QAAQ,GAAGprE,SAAS,CAAC,CAAD,CAA1B;EACA,YAAM1C,MAAM,GAAG,IAAI8H,SAAJ,EAAf;EACA,WAAKs1C,KAAL,CAAW0wB,QAAX,EAAqB9tE,MAArB;EACA,aAAOA,MAAP;EACD,KALD,MAKO,IAAI0C,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,UAAID,SAAS,CAAC,CAAD,CAAT,YAAwBmI,QAAxB,IAAoCxB,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAegF,IAAf,CAApD,EAA0E;EACxE,cAAMomE,QAAQ,GAAGprE,SAAS,CAAC,CAAD,CAA1B;EAAA,cAA+B1C,MAAM,GAAG0C,SAAS,CAAC,CAAD,CAAjD;EACA,aAAKqrE,SAAL,CAAe,KAAKnwB,KAApB,EAA2BkwB,QAA3B,EAAqC,IAArC,EAA2C,IAAK,MAAM;EACpD,cAAI/nE,WAAJ,GAAkB;EAChB,mBAAO,CAACwmE,aAAD,CAAP;EACD;;EACDj3B,UAAAA,KAAK,CAAC6I,IAAD,EAAO;EACVn+C,YAAAA,MAAM,CAACkH,GAAP,CAAWi3C,IAAX;EACD;;EANmD,SAAX,EAA3C;EAQD,OAVD,MAUO,IAAIz7C,SAAS,CAAC,CAAD,CAAT,YAAwBmI,QAAxB,IAAoCxB,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAe6pE,aAAf,CAApD,EAAmF;EACxF,cAAMuB,QAAQ,GAAGprE,SAAS,CAAC,CAAD,CAA1B;EAAA,cAA+B26C,OAAO,GAAG36C,SAAS,CAAC,CAAD,CAAlD;EACA,aAAKqrE,SAAL,CAAe,KAAKnwB,KAApB,EAA2BkwB,QAA3B,EAAqC,IAArC,EAA2CzwB,OAA3C;EACD;EACF;EACF;;EACD0wB,EAAAA,SAAS,CAACC,WAAD,EAAcF,QAAd,EAAwBG,GAAxB,EAA6B5wB,OAA7B,EAAsC;EAC7C,QAAI2wB,WAAW,KAAK,IAApB,EAA0B,OAAO,IAAP;EAC1B,QAAIliE,GAAG,GAAG,IAAV;EACA,QAAIE,GAAG,GAAG,IAAV;EACA,QAAIkiE,YAAY,GAAG,IAAnB;;EACA,QAAID,GAAJ,EAAS;EACPniE,MAAAA,GAAG,GAAGgiE,QAAQ,CAACphE,OAAT,EAAN;EACAV,MAAAA,GAAG,GAAG8hE,QAAQ,CAACthE,OAAT,EAAN;EACA0hE,MAAAA,YAAY,GAAGF,WAAW,CAAChpE,IAAZ,EAAf;EACD,KAJD,MAIO;EACL8G,MAAAA,GAAG,GAAGgiE,QAAQ,CAACnhE,OAAT,EAAN;EACAX,MAAAA,GAAG,GAAG8hE,QAAQ,CAACrhE,OAAT,EAAN;EACAyhE,MAAAA,YAAY,GAAGF,WAAW,CAACroE,IAAZ,EAAf;EACD;;EACD,UAAMwoE,UAAU,GAAGriE,GAAG,GAAGoiE,YAAzB;EACA,UAAME,WAAW,GAAGF,YAAY,IAAIliE,GAApC;EACA,QAAImiE,UAAJ,EACE,KAAKJ,SAAL,CAAeC,WAAW,CAACd,OAAZ,EAAf,EAAsCY,QAAtC,EAAgD,CAACG,GAAjD,EAAsD5wB,OAAtD;EAEF,QAAIywB,QAAQ,CAAC1/D,QAAT,CAAkB4/D,WAAW,CAAC5kE,aAAZ,EAAlB,CAAJ,EACEi0C,OAAO,CAAC/H,KAAR,CAAc04B,WAAd;EAEF,QAAII,WAAJ,EACE,KAAKL,SAAL,CAAeC,WAAW,CAAClB,QAAZ,EAAf,EAAuCgB,QAAvC,EAAiD,CAACG,GAAlD,EAAuD5wB,OAAvD;EAEH;;EACDuwB,EAAAA,iBAAiB,CAACziE,CAAD,EAAI;EACnB,UAAMkyC,OAAO,GAAG,IAAIgxB,gBAAJ,CAAqBljE,CAArB,EAAwB,KAAKoiE,UAA7B,CAAhB;EACA,SAAKnwB,KAAL,CAAWC,OAAO,CAACixB,aAAR,EAAX,EAAoCjxB,OAApC;EACA,WAAOA,OAAO,CAAC0oB,OAAR,EAAP;EACD;;EACD3+D,EAAAA,OAAO,GAAG;EACR,QAAI,KAAKw2C,KAAL,KAAe,IAAnB,EAAyB,OAAO,IAAP;EACzB,WAAO,KAAP;EACD;;EACDiwB,EAAAA,WAAW,CAAC1iE,CAAD,EAAIyhE,IAAJ,EAAU;EACnB,QAAIoB,WAAW,GAAG,KAAKpwB,KAAvB;EACA,QAAI2wB,QAAQ,GAAG,KAAK3wB,KAApB;EACA,QAAI4wB,UAAU,GAAG,IAAjB;EACA,QAAIC,UAAU,GAAG,IAAjB;;EACA,WAAOT,WAAW,KAAK,IAAvB,EAA6B;EAC3B,UAAIA,WAAW,KAAK,IAApB,EAA0B;EACxB,cAAMU,aAAa,GAAGvjE,CAAC,CAACtF,QAAF,CAAWmoE,WAAW,CAAC5kE,aAAZ,EAAX,KAA2C,KAAKmkE,UAAtE;;EACA,YAAImB,aAAJ,EAAmB;EACjBV,UAAAA,WAAW,CAACb,SAAZ;EACA,iBAAOa,WAAP;EACD;EACF;;EACD,UAAIQ,UAAJ,EACEC,UAAU,GAAGtjE,CAAC,CAAC1J,CAAF,GAAMusE,WAAW,CAAChpE,IAAZ,EAAnB,CADF,KAGEypE,UAAU,GAAGtjE,CAAC,CAACzJ,CAAF,GAAMssE,WAAW,CAACroE,IAAZ,EAAnB;EAEF4oE,MAAAA,QAAQ,GAAGP,WAAX;EACA,UAAIS,UAAJ,EACET,WAAW,GAAGA,WAAW,CAACd,OAAZ,EAAd,CADF,KAGEc,WAAW,GAAGA,WAAW,CAAClB,QAAZ,EAAd;EAEF0B,MAAAA,UAAU,GAAG,CAACA,UAAd;EACD;;EACD,SAAKlB,cAAL,GAAsB,KAAKA,cAAL,GAAsB,CAA5C;EACA,UAAMnvB,IAAI,GAAG,IAAIquB,MAAJ,CAAWrhE,CAAX,EAAcyhE,IAAd,CAAb;EACA,QAAI6B,UAAJ,EACEF,QAAQ,CAACxB,OAAT,CAAiB5uB,IAAjB,EADF,KAGEowB,QAAQ,CAACnB,QAAT,CAAkBjvB,IAAlB;EAEF,WAAOA,IAAP;EACD;;EAhJyB;;EAkJ5B,MAAMkwB,gBAAN,CAAuB;EACrBlvE,EAAAA,WAAW,GAAG;EACZkvE,IAAAA,gBAAgB,CAAC7rE,YAAjB,CAA8BC,KAA9B,CAAoC,IAApC,EAA0CC,SAA1C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK+qE,UAAL,GAAkB,IAAlB;EACA,SAAKoB,UAAL,GAAkB,IAAlB;EACA,SAAKC,UAAL,GAAkB,GAAlB;EACA,SAAKpwB,EAAL,GAAU,IAAV;EACA,UAAMrzC,CAAC,GAAGzI,SAAS,CAAC,CAAD,CAAnB;EAAA,UAAwB5D,SAAS,GAAG4D,SAAS,CAAC,CAAD,CAA7C;EACA,SAAK87C,EAAL,GAAUrzC,CAAV;EACA,SAAKoiE,UAAL,GAAkBzuE,SAAlB;EACD;;EACDw2C,EAAAA,KAAK,CAAC6I,IAAD,EAAO;EACV,UAAMthC,IAAI,GAAG,KAAK2hC,EAAL,CAAQ34C,QAAR,CAAiBs4C,IAAI,CAAC/0C,aAAL,EAAjB,CAAb;;EACA,UAAMslE,aAAa,GAAG7xD,IAAI,IAAI,KAAK0wD,UAAnC;EACA,QAAI,CAACmB,aAAL,EAAoB,OAAO,IAAP;EACpB,QAAIG,MAAM,GAAG,KAAb;EACA,QAAI,KAAKF,UAAL,KAAoB,IAApB,IAA4B9xD,IAAI,GAAG,KAAK+xD,UAAxC,IAAsD,KAAKD,UAAL,KAAoB,IAApB,IAA4B9xD,IAAI,KAAK,KAAK+xD,UAA1C,IAAwDzwB,IAAI,CAAC/0C,aAAL,GAAqBtE,SAArB,CAA+B,KAAK6pE,UAAL,CAAgBvlE,aAAhB,EAA/B,IAAkE,CAApL,EAAuLylE,MAAM,GAAG,IAAT;;EACvL,QAAIA,MAAJ,EAAY;EACV,WAAKF,UAAL,GAAkBxwB,IAAlB;EACA,WAAKywB,UAAL,GAAkB/xD,IAAlB;EACD;EACF;;EACDyxD,EAAAA,aAAa,GAAG;EACd,UAAMR,QAAQ,GAAG,IAAIjjE,QAAJ,CAAa,KAAK2zC,EAAlB,CAAjB;EACAsvB,IAAAA,QAAQ,CAAC7/D,QAAT,CAAkB,KAAKs/D,UAAvB;EACA,WAAOO,QAAP;EACD;;EACD/H,EAAAA,OAAO,GAAG;EACR,WAAO,KAAK4I,UAAZ;EACD;;EACD,MAAI5oE,WAAJ,GAAkB;EAChB,WAAO,CAACwmE,aAAD,CAAP;EACD;;EAlCoB;;EAoCvBc,MAAM,CAACgB,gBAAP,GAA0BA,gBAA1B;;;;;;;EC3Le,MAAMS,QAAN,CAAe;EAC5B3vE,EAAAA,WAAW,GAAG;EACZ2vE,IAAAA,QAAQ,CAACtsE,YAAT,CAAsBC,KAAtB,CAA4B,IAA5B,EAAkCC,SAAlC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK67C,MAAL,GAAc,IAAIv2C,SAAJ,EAAd;EACA,SAAKinE,QAAL,GAAgB,IAAInlE,KAAJ,CAAU,CAAV,EAAaC,IAAb,CAAkB,IAAlB,CAAhB;EACD;;EACD,SAAOmlE,eAAP,CAAuB5jE,GAAvB,EAA4B6jE,OAA5B,EAAqCC,OAArC,EAA8C;EAC5C,QAAIC,YAAY,GAAG,CAAC,CAApB;;EACA,QAAI/jE,GAAG,CAACsB,OAAJ,MAAiBuiE,OAArB,EAA8B;EAC5B,UAAI7jE,GAAG,CAACuB,OAAJ,MAAiBuiE,OAArB,EAA8BC,YAAY,GAAG,CAAf;EAC9B,UAAI/jE,GAAG,CAACqB,OAAJ,MAAiByiE,OAArB,EAA8BC,YAAY,GAAG,CAAf;EAC/B;;EACD,QAAI/jE,GAAG,CAACoB,OAAJ,MAAiByiE,OAArB,EAA8B;EAC5B,UAAI7jE,GAAG,CAACuB,OAAJ,MAAiBuiE,OAArB,EAA8BC,YAAY,GAAG,CAAf;EAC9B,UAAI/jE,GAAG,CAACqB,OAAJ,MAAiByiE,OAArB,EAA8BC,YAAY,GAAG,CAAf;EAC/B;;EACD,WAAOA,YAAP;EACD;;EACDC,EAAAA,WAAW,GAAG;EACZ,SAAK,IAAItvE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,CAApB,EAAuBA,CAAC,EAAxB,EACE,IAAI,KAAKivE,QAAL,CAAcjvE,CAAd,MAAqB,IAAzB,EAA+B,OAAO,IAAP;;EAEjC,WAAO,KAAP;EACD;;EACDuvE,EAAAA,UAAU,GAAG;EACX,WAAO,EAAE,KAAKD,WAAL,MAAsB,KAAKE,QAAL,EAAxB,CAAP;EACD;;EACDC,EAAAA,WAAW,CAACC,WAAD,EAAc;EACvBA,IAAAA,WAAW,CAACroE,MAAZ,CAAmB,KAAKk3C,MAAxB;;EACA,SAAK,IAAIv+C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,CAApB,EAAuBA,CAAC,EAAxB,EACE,IAAI,KAAKivE,QAAL,CAAcjvE,CAAd,MAAqB,IAAzB,EACE,KAAKivE,QAAL,CAAcjvE,CAAd,EAAiByvE,WAAjB,CAA6BC,WAA7B;;EAGJ,WAAOA,WAAP;EACD;;EACDC,EAAAA,YAAY,GAAG;EACb,QAAIC,OAAO,GAAG,CAAd;;EACA,SAAK,IAAI5vE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,CAApB,EAAuBA,CAAC,EAAxB,EACE,IAAI,KAAKivE,QAAL,CAAcjvE,CAAd,MAAqB,IAAzB,EACE4vE,OAAO,IAAI,KAAKX,QAAL,CAAcjvE,CAAd,EAAiBwH,IAAjB,EAAX;;EAGJ,WAAOooE,OAAO,GAAG,CAAjB;EACD;;EACDpoE,EAAAA,IAAI,GAAG;EACL,QAAIooE,OAAO,GAAG,CAAd;;EACA,SAAK,IAAI5vE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,CAApB,EAAuBA,CAAC,EAAxB,EACE,IAAI,KAAKivE,QAAL,CAAcjvE,CAAd,MAAqB,IAAzB,EACE4vE,OAAO,IAAI,KAAKX,QAAL,CAAcjvE,CAAd,EAAiBwH,IAAjB,EAAX;;EAGJ,WAAOooE,OAAO,GAAG,KAAKrxB,MAAL,CAAY/2C,IAAZ,EAAjB;EACD;;EACDqoE,EAAAA,0BAA0B,CAACC,SAAD,EAAYJ,WAAZ,EAAyB;EACjD,QAAI,CAAC,KAAKK,aAAL,CAAmBD,SAAnB,CAAL,EAAoC,OAAO,IAAP;EACpCJ,IAAAA,WAAW,CAACroE,MAAZ,CAAmB,KAAKk3C,MAAxB;;EACA,SAAK,IAAIv+C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,CAApB,EAAuBA,CAAC,EAAxB,EACE,IAAI,KAAKivE,QAAL,CAAcjvE,CAAd,MAAqB,IAAzB,EACE,KAAKivE,QAAL,CAAcjvE,CAAd,EAAiB6vE,0BAAjB,CAA4CC,SAA5C,EAAuDJ,WAAvD;EAGL;;EACDM,EAAAA,UAAU,CAACF,SAAD,EAAYvyB,OAAZ,EAAqB;EAC7B,SAAK,IAAIv9C,CAAC,GAAG,KAAKu+C,MAAL,CAAYh3C,QAAZ,EAAb,EAAqCvH,CAAC,CAACmJ,OAAF,EAArC,GACEo0C,OAAO,CAAClB,SAAR,CAAkBr8C,CAAC,CAACkJ,IAAF,EAAlB;EAEH;;EACDsmE,EAAAA,QAAQ,GAAG;EACT,WAAO,CAAC,KAAKjxB,MAAL,CAAYj3C,OAAZ,EAAR;EACD;;EACDI,EAAAA,MAAM,CAACuoE,OAAD,EAAU3zB,IAAV,EAAgB;EACpB,QAAI,CAAC,KAAKyzB,aAAL,CAAmBE,OAAnB,CAAL,EAAkC,OAAO,KAAP;EAClC,QAAIC,KAAK,GAAG,KAAZ;;EACA,SAAK,IAAIlwE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,CAApB,EAAuBA,CAAC,EAAxB,EACE,IAAI,KAAKivE,QAAL,CAAcjvE,CAAd,MAAqB,IAAzB,EAA+B;EAC7BkwE,MAAAA,KAAK,GAAG,KAAKjB,QAAL,CAAcjvE,CAAd,EAAiB0H,MAAjB,CAAwBuoE,OAAxB,EAAiC3zB,IAAjC,CAAR;;EACA,UAAI4zB,KAAJ,EAAW;EACT,YAAI,KAAKjB,QAAL,CAAcjvE,CAAd,EAAiBuvE,UAAjB,EAAJ,EAAmC,KAAKN,QAAL,CAAcjvE,CAAd,IAAmB,IAAnB;EACnC;EACD;EACF;;EAEH,QAAIkwE,KAAJ,EAAW,OAAOA,KAAP;EACXA,IAAAA,KAAK,GAAG,KAAK3xB,MAAL,CAAY72C,MAAZ,CAAmB40C,IAAnB,CAAR;EACA,WAAO4zB,KAAP;EACD;;EACD16B,EAAAA,KAAK,CAACs6B,SAAD,EAAYvyB,OAAZ,EAAqB;EACxB,QAAI,CAAC,KAAKwyB,aAAL,CAAmBD,SAAnB,CAAL,EAAoC,OAAO,IAAP;EACpC,SAAKE,UAAL,CAAgBF,SAAhB,EAA2BvyB,OAA3B;;EACA,SAAK,IAAIv9C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,CAApB,EAAuBA,CAAC,EAAxB,EACE,IAAI,KAAKivE,QAAL,CAAcjvE,CAAd,MAAqB,IAAzB,EACE,KAAKivE,QAAL,CAAcjvE,CAAd,EAAiBw1C,KAAjB,CAAuBs6B,SAAvB,EAAkCvyB,OAAlC;EAGL;;EACDiB,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAKD,MAAZ;EACD;;EACDypB,EAAAA,KAAK,GAAG;EACN,QAAImI,WAAW,GAAG,CAAlB;;EACA,SAAK,IAAInwE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,CAApB,EAAuBA,CAAC,EAAxB,EACE,IAAI,KAAKivE,QAAL,CAAcjvE,CAAd,MAAqB,IAAzB,EAA+B;EAC7B,YAAMowE,GAAG,GAAG,KAAKnB,QAAL,CAAcjvE,CAAd,EAAiBgoE,KAAjB,EAAZ;;EACA,UAAIoI,GAAG,GAAGD,WAAV,EAAuBA,WAAW,GAAGC,GAAd;EACxB;;EAEH,WAAOD,WAAW,GAAG,CAArB;EACD;;EACD7oE,EAAAA,OAAO,GAAG;EACR,QAAIA,OAAO,GAAG,IAAd;EACA,QAAI,CAAC,KAAKi3C,MAAL,CAAYj3C,OAAZ,EAAL,EAA4BA,OAAO,GAAG,KAAV,CAA5B,KACE,KAAK,IAAItH,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,CAApB,EAAuBA,CAAC,EAAxB,EACE,IAAI,KAAKivE,QAAL,CAAcjvE,CAAd,MAAqB,IAAzB,EACE,IAAI,CAAC,KAAKivE,QAAL,CAAcjvE,CAAd,EAAiBsH,OAAjB,EAAL,EAAiC;EAC/BA,MAAAA,OAAO,GAAG,KAAV;EACA;EACD;EAIP,WAAOA,OAAP;EACD;;EACDF,EAAAA,GAAG,CAACk1C,IAAD,EAAO;EACR,SAAKiC,MAAL,CAAYn3C,GAAZ,CAAgBk1C,IAAhB;EACD;;EACD,MAAIr2C,WAAJ,GAAkB;EAChB,WAAO,CAAC1D,YAAD,CAAP;EACD;;EAlI2B;;ECFf,SAAS8tE,UAAT,GAAsB;;EACrCA,UAAU,CAACC,QAAX,GAAsB,UAAS3/D,CAAT,EAAY;EAChC,SAAO4/D,MAAM,CAAC,EAAD,EAAK5/D,CAAL,CAAN,GAAgB,IAAvB;EACD,CAFD;;EAGA0/D,UAAU,CAACG,QAAX,GAAsB,UAASxuE,GAAT,EAAc;EAClC,SAAO/C,IAAI,CAACwC,GAAL,CAAS,CAAT,EAAYO,GAAZ,CAAP;EACD,CAFD;EAIA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;EACA,SAASuuE,MAAT,CAAgBE,IAAhB,EAAsBC,GAAtB,EAA2B;EACzB,MAAIC,IAAJ;EACA,MAAIC,IAAJ;EACA,MAAIC,IAAJ;EACA,MAAIC,GAAJ;EACA,QAAMC,GAAG,GAAG;EACV,QAAI;EACFpgE,MAAAA,CAAC,EAAE,IADD;EAEF/M,MAAAA,CAAC,EAAE,IAFD;EAGF4C,MAAAA,CAAC,EAAE,CAHD;EAIFD,MAAAA,CAAC,EAAE;EAJD,KADM;EAOV,QAAI;EACFoK,MAAAA,CAAC,EAAE,MADD;EAEF/M,MAAAA,CAAC,EAAE,CAFD;EAGF4C,MAAAA,CAAC,EAAE,CAHD;EAIFD,MAAAA,CAAC,EAAE;EAJD;EAPM,GAAZ;EAcA,QAAMyqE,GAAG,GAAG;EACV,QAAI,CADM;EAEV,QAAI;EAFM,IAGVP,IAHU,CAAZ;;EAKA,MAAI,CAACK,GAAL,EAAU;EACRH,IAAAA,IAAI,GAAGD,GAAG,GAAG,CAAN,IAAW,IAAIA,GAAJ,GAAU,CAA5B,CADQ;;EAER,QAAI,CAACjwE,QAAQ,CAACiwE,GAAD,CAAb,EAAoB;EAClBI,MAAAA,GAAG,GAAGC,GAAG,CAACN,IAAD,CAAT;EACA,UAAIE,IAAJ,EAAUG,GAAG,CAACngE,CAAJ,IAAS,KAAM8/D,IAAI,GAAG,CAAP,GAAW,CAA1B;EAEVG,MAAAA,IAAI,GAAG3xE,IAAI,CAACwC,GAAL,CAAS,CAAT,EAAYuvE,GAAZ,IAAmB,CAA1B;EACAH,MAAAA,IAAI,GAAG,CAAP;EACD;EACF;;EAED,MAAI,CAACC,GAAL,EAAU;EACRF,IAAAA,IAAI,GAAG;EACL,UAAI,GADC;EAEL,UAAI;EAFC,MAGLH,IAHK,CAAP;EAIAI,IAAAA,IAAI,GAAG5xE,IAAI,CAACC,GAAL,CAASwxE,GAAT,CAAP;;EACA,WAAOG,IAAI,IAAI,CAAf,EAAkB;EAChBD,MAAAA,IAAI;EACJC,MAAAA,IAAI,IAAI,CAAR;EACD;;EACD,WAAOA,IAAI,GAAG,CAAP,IAAYD,IAAI,GAAG,CAA1B,EAA6B;EAC3BA,MAAAA,IAAI;EACJC,MAAAA,IAAI,IAAI,CAAR;EACD;;EACD,QAAID,IAAI,IAAI,CAAZ,EAAeC,IAAI,IAAI,CAAR;;EAEf,QAAIJ,IAAI,KAAK,EAAT,IAAeG,IAAI,GAAG,GAA1B,EAA+B;EAC7BE,MAAAA,GAAG,GAAG;EACJngE,QAAAA,CAAC,EAAEggE,IAAI,GAAG,IAAH,GAAU,IADb;EAEJ/sE,QAAAA,CAAC,EAAE,IAFC;EAGJ4C,QAAAA,CAAC,EAAE,CAHC;EAIJD,QAAAA,CAAC,EAAE;EAJC,OAAN;EAMAqqE,MAAAA,IAAI,GAAG3xE,IAAI,CAACwC,GAAL,CAAS,CAAT,EAAYuvE,GAAZ,IAAmB,CAA1B;EACAH,MAAAA,IAAI,GAAG,CAAP;EACD;EACF;;EAED,SAAOD,IAAP;EACD;;EChFc,MAAMK,GAAN,CAAU;EACvB5xE,EAAAA,WAAW,GAAG;EACZ4xE,IAAAA,GAAG,CAACvuE,YAAJ,CAAiBC,KAAjB,CAAuB,IAAvB,EAA6BC,SAA7B;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKu3C,GAAL,GAAW,IAAIv2C,UAAJ,EAAX;EACA,SAAKq6C,MAAL,GAAc,CAAd;EACA,SAAKmkB,IAAL,GAAY,IAAZ;EACA,UAAM+N,OAAO,GAAGrtE,SAAS,CAAC,CAAD,CAAzB;EACA,SAAKsuE,UAAL,CAAgBjB,OAAhB;EACD;;EACD,SAAOkB,gBAAP,CAAwB7lE,GAAxB,EAA6B;EAC3B,UAAM7F,EAAE,GAAG6F,GAAG,CAACgB,QAAJ,EAAX;EACA,UAAM5G,EAAE,GAAG4F,GAAG,CAACiB,SAAJ,EAAX;EACA,UAAM6kE,IAAI,GAAG3rE,EAAE,GAAGC,EAAL,GAAUD,EAAV,GAAeC,EAA5B;EACA,UAAM2rE,KAAK,GAAGhB,UAAU,CAACC,QAAX,CAAoBc,IAApB,IAA4B,CAA1C;EACA,WAAOC,KAAP;EACD;;EACDC,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAKvzB,MAAZ;EACD;;EACDmzB,EAAAA,UAAU,GAAG;EACX,QAAItuE,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMotE,OAAO,GAAGrtE,SAAS,CAAC,CAAD,CAAzB;EACA,WAAKm7C,MAAL,GAAckzB,GAAG,CAACE,gBAAJ,CAAqBlB,OAArB,CAAd;EACA,WAAK/N,IAAL,GAAY,IAAIn3D,QAAJ,EAAZ;EACA,WAAKmmE,UAAL,CAAgB,KAAKnzB,MAArB,EAA6BkyB,OAA7B;;EACA,aAAO,CAAC,KAAK/N,IAAL,CAAU5zD,QAAV,CAAmB2hE,OAAnB,CAAR,EAAqC;EACnC,aAAKlyB,MAAL,IAAe,CAAf;EACA,aAAKmzB,UAAL,CAAgB,KAAKnzB,MAArB,EAA6BkyB,OAA7B;EACD;EACF,KATD,MASO,IAAIrtE,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMwuE,KAAK,GAAGzuE,SAAS,CAAC,CAAD,CAAvB;EAAA,YAA4BqtE,OAAO,GAAGrtE,SAAS,CAAC,CAAD,CAA/C;EACA,YAAM2uE,QAAQ,GAAGlB,UAAU,CAACG,QAAX,CAAoBa,KAApB,CAAjB;EACA,WAAKp3B,GAAL,CAASt4C,CAAT,GAAa1C,IAAI,CAACuC,KAAL,CAAWyuE,OAAO,CAACrjE,OAAR,KAAoB2kE,QAA/B,IAA2CA,QAAxD;EACA,WAAKt3B,GAAL,CAASr4C,CAAT,GAAa3C,IAAI,CAACuC,KAAL,CAAWyuE,OAAO,CAACpjE,OAAR,KAAoB0kE,QAA/B,IAA2CA,QAAxD;;EACA,WAAKrP,IAAL,CAAU92D,IAAV,CAAe,KAAK6uC,GAAL,CAASt4C,CAAxB,EAA2B,KAAKs4C,GAAL,CAASt4C,CAAT,GAAa4vE,QAAxC,EAAkD,KAAKt3B,GAAL,CAASr4C,CAA3D,EAA8D,KAAKq4C,GAAL,CAASr4C,CAAT,GAAa2vE,QAA3E;EACD;EACF;;EACD1yD,EAAAA,WAAW,GAAG;EACZ,WAAO,KAAKqjD,IAAZ;EACD;;EACD5rB,EAAAA,SAAS,GAAG;EACV,WAAO,IAAI5yC,UAAJ,CAAe,CAAC,KAAKw+D,IAAL,CAAUt1D,OAAV,KAAsB,KAAKs1D,IAAL,CAAUx1D,OAAV,EAAvB,IAA8C,CAA7D,EAAgE,CAAC,KAAKw1D,IAAL,CAAUr1D,OAAV,KAAsB,KAAKq1D,IAAL,CAAUv1D,OAAV,EAAvB,IAA8C,CAA9G,CAAP;EACD;;EACD6kE,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAKv3B,GAAZ;EACD;;EA/CsB;;ECCV,MAAMypB,MAAN,SAAmBsL,QAAnB,CAA4B;EACzC3vE,EAAAA,WAAW,GAAG;EACZ;EACAqkE,IAAAA,MAAI,CAAChhE,YAAL,CAAkBC,KAAlB,CAAwB,IAAxB,EAA8BC,SAA9B;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKw/D,IAAL,GAAY,IAAZ;EACA,SAAKuP,QAAL,GAAgB,IAAhB;EACA,SAAKC,QAAL,GAAgB,IAAhB;EACA,SAAK3zB,MAAL,GAAc,IAAd;EACA,UAAMzyC,GAAG,GAAG1I,SAAS,CAAC,CAAD,CAArB;EAAA,UAA0ByuE,KAAK,GAAGzuE,SAAS,CAAC,CAAD,CAA3C;EACA,SAAKs/D,IAAL,GAAY52D,GAAZ;EACA,SAAKyyC,MAAL,GAAcszB,KAAd;EACA,SAAKI,QAAL,GAAgB,CAACnmE,GAAG,CAACsB,OAAJ,KAAgBtB,GAAG,CAACoB,OAAJ,EAAjB,IAAkC,CAAlD;EACA,SAAKglE,QAAL,GAAgB,CAACpmE,GAAG,CAACuB,OAAJ,KAAgBvB,GAAG,CAACqB,OAAJ,EAAjB,IAAkC,CAAlD;EACD;;EACD,SAAOo4D,UAAP,CAAkBz5D,GAAlB,EAAuB;EACrB,UAAM4jB,GAAG,GAAG,IAAI+hD,GAAJ,CAAQ3lE,GAAR,CAAZ;EACA,UAAM+yC,IAAI,GAAG,IAAIqlB,MAAJ,CAASx0C,GAAG,CAACrQ,WAAJ,EAAT,EAA4BqQ,GAAG,CAACoiD,QAAJ,EAA5B,CAAb;EACA,WAAOjzB,IAAP;EACD;;EACD,SAAOszB,cAAP,CAAsBtzB,IAAtB,EAA4BuzB,MAA5B,EAAoC;EAClC,UAAMC,SAAS,GAAG,IAAI9mE,QAAJ,CAAa6mE,MAAb,CAAlB;EACA,QAAIvzB,IAAI,KAAK,IAAb,EAAmBwzB,SAAS,CAAClkE,eAAV,CAA0B0wC,IAAI,CAAC6jB,IAA/B;EACnB,UAAM4P,UAAU,GAAGpO,MAAI,CAACqB,UAAL,CAAgB8M,SAAhB,CAAnB;EACA,QAAIxzB,IAAI,KAAK,IAAb,EAAmByzB,UAAU,CAACC,UAAX,CAAsB1zB,IAAtB;EACnB,WAAOyzB,UAAP;EACD;;EACDjhB,EAAAA,IAAI,CAACif,SAAD,EAAY;EACd,UAAMT,YAAY,GAAGL,QAAQ,CAACE,eAAT,CAAyBY,SAAzB,EAAoC,KAAK2B,QAAzC,EAAmD,KAAKC,QAAxD,CAArB;EACA,QAAIrC,YAAY,KAAK,CAAC,CAAtB,EAAyB,OAAO,IAAP;;EACzB,QAAI,KAAKJ,QAAL,CAAcI,YAAd,MAAgC,IAApC,EAA0C;EACxC,YAAMhxB,IAAI,GAAG,KAAK4wB,QAAL,CAAcI,YAAd,CAAb;EACA,aAAOhxB,IAAI,CAACwS,IAAL,CAAUif,SAAV,CAAP;EACD;;EACD,WAAO,IAAP;EACD;;EACDC,EAAAA,aAAa,CAACD,SAAD,EAAY;EACvB,QAAIA,SAAS,KAAK,IAAlB,EAAwB,OAAO,KAAP;EACxB,WAAO,KAAK5N,IAAL,CAAUv2D,UAAV,CAAqBmkE,SAArB,CAAP;EACD;;EACDkC,EAAAA,UAAU,CAAC1pE,KAAD,EAAQ;EAChB,QAAI,KAAK2mE,QAAL,CAAc3mE,KAAd,MAAyB,IAA7B,EACE,KAAK2mE,QAAL,CAAc3mE,KAAd,IAAuB,KAAK2pE,aAAL,CAAmB3pE,KAAnB,CAAvB;EAEF,WAAO,KAAK2mE,QAAL,CAAc3mE,KAAd,CAAP;EACD;;EACDuW,EAAAA,WAAW,GAAG;EACZ,WAAO,KAAKqjD,IAAZ;EACD;;EACD+D,EAAAA,OAAO,CAAC6J,SAAD,EAAY;EACjB,UAAMT,YAAY,GAAGL,QAAQ,CAACE,eAAT,CAAyBY,SAAzB,EAAoC,KAAK2B,QAAzC,EAAmD,KAAKC,QAAxD,CAArB;;EACA,QAAIrC,YAAY,KAAK,CAAC,CAAtB,EAAyB;EACvB,YAAMhxB,IAAI,GAAG,KAAK2zB,UAAL,CAAgB3C,YAAhB,CAAb;EACA,aAAOhxB,IAAI,CAAC4nB,OAAL,CAAa6J,SAAb,CAAP;EACD,KAHD,MAGO;EACL,aAAO,IAAP;EACD;EACF;;EACDmC,EAAAA,aAAa,CAAC3pE,KAAD,EAAQ;EACnB,QAAI42C,IAAI,GAAG,GAAX;EACA,QAAIC,IAAI,GAAG,GAAX;EACA,QAAI+yB,IAAI,GAAG,GAAX;EACA,QAAIC,IAAI,GAAG,GAAX;;EACA,YAAQ7pE,KAAR;EACA,WAAK,CAAL;EACE42C,QAAAA,IAAI,GAAG,KAAKgjB,IAAL,CAAUt1D,OAAV,EAAP;EACAuyC,QAAAA,IAAI,GAAG,KAAKsyB,QAAZ;EACAS,QAAAA,IAAI,GAAG,KAAKhQ,IAAL,CAAUr1D,OAAV,EAAP;EACAslE,QAAAA,IAAI,GAAG,KAAKT,QAAZ;EACA;;EACF,WAAK,CAAL;EACExyB,QAAAA,IAAI,GAAG,KAAKuyB,QAAZ;EACAtyB,QAAAA,IAAI,GAAG,KAAK+iB,IAAL,CAAUx1D,OAAV,EAAP;EACAwlE,QAAAA,IAAI,GAAG,KAAKhQ,IAAL,CAAUr1D,OAAV,EAAP;EACAslE,QAAAA,IAAI,GAAG,KAAKT,QAAZ;EACA;;EACF,WAAK,CAAL;EACExyB,QAAAA,IAAI,GAAG,KAAKgjB,IAAL,CAAUt1D,OAAV,EAAP;EACAuyC,QAAAA,IAAI,GAAG,KAAKsyB,QAAZ;EACAS,QAAAA,IAAI,GAAG,KAAKR,QAAZ;EACAS,QAAAA,IAAI,GAAG,KAAKjQ,IAAL,CAAUv1D,OAAV,EAAP;EACA;;EACF,WAAK,CAAL;EACEuyC,QAAAA,IAAI,GAAG,KAAKuyB,QAAZ;EACAtyB,QAAAA,IAAI,GAAG,KAAK+iB,IAAL,CAAUx1D,OAAV,EAAP;EACAwlE,QAAAA,IAAI,GAAG,KAAKR,QAAZ;EACAS,QAAAA,IAAI,GAAG,KAAKjQ,IAAL,CAAUv1D,OAAV,EAAP;EACA;EAxBF;;EA0BA,UAAMylE,KAAK,GAAG,IAAIrnE,QAAJ,CAAam0C,IAAb,EAAmBC,IAAnB,EAAyB+yB,IAAzB,EAA+BC,IAA/B,CAAd;EACA,UAAM9zB,IAAI,GAAG,IAAIqlB,MAAJ,CAAS0O,KAAT,EAAgB,KAAKr0B,MAAL,GAAc,CAA9B,CAAb;EACA,WAAOM,IAAP;EACD;;EACD0zB,EAAAA,UAAU,CAAC1zB,IAAD,EAAO;EACft7C,IAAAA,MAAM,CAACE,MAAP,CAAc,KAAKi/D,IAAL,KAAc,IAAd,IAAsB,KAAKA,IAAL,CAAU5zD,QAAV,CAAmB+vC,IAAI,CAAC6jB,IAAxB,CAApC;EACA,UAAM55D,KAAK,GAAG0mE,QAAQ,CAACE,eAAT,CAAyB7wB,IAAI,CAAC6jB,IAA9B,EAAoC,KAAKuP,QAAzC,EAAmD,KAAKC,QAAxD,CAAd;;EACA,QAAIrzB,IAAI,CAACN,MAAL,KAAgB,KAAKA,MAAL,GAAc,CAAlC,EAAqC;EACnC,WAAKkxB,QAAL,CAAc3mE,KAAd,IAAuB+1C,IAAvB;EACD,KAFD,MAEO;EACL,YAAMg0B,SAAS,GAAG,KAAKJ,aAAL,CAAmB3pE,KAAnB,CAAlB;EACA+pE,MAAAA,SAAS,CAACN,UAAV,CAAqB1zB,IAArB;EACA,WAAK4wB,QAAL,CAAc3mE,KAAd,IAAuB+pE,SAAvB;EACD;EACF;;EAxGwC;;ECH5B,MAAMC,YAAN,CAAmB;EAChC,SAAOC,WAAP,CAAmBvmE,GAAnB,EAAwBE,GAAxB,EAA6B;EAC3B,UAAMirC,KAAK,GAAGjrC,GAAG,GAAGF,GAApB;EACA,QAAImrC,KAAK,KAAK,GAAd,EAAmB,OAAO,IAAP;EACnB,UAAMq7B,MAAM,GAAGvzE,IAAI,CAACiN,GAAL,CAASjN,IAAI,CAACC,GAAL,CAAS8M,GAAT,CAAT,EAAwB/M,IAAI,CAACC,GAAL,CAASgN,GAAT,CAAxB,CAAf;EACA,UAAMumE,cAAc,GAAGt7B,KAAK,GAAGq7B,MAA/B;EACA,UAAMnB,KAAK,GAAGhB,UAAU,CAACC,QAAX,CAAoBmC,cAApB,CAAd;EACA,WAAOpB,KAAK,IAAIiB,YAAY,CAACI,mBAA7B;EACD;;EAR+B;EAUlCJ,YAAY,CAACI,mBAAb,GAAmC,CAAC,EAApC;;ECNe,MAAMC,IAAN,SAAmB3D,QAAnB,CAA4B;EACzC3vE,EAAAA,WAAW,GAAG;EACZ;EACD;;EACD6+C,EAAAA,MAAM,CAAC+xB,OAAD,EAAU3zB,IAAV,EAAgB;EACpB,UAAMh0C,KAAK,GAAG0mE,QAAQ,CAACE,eAAT,CAAyBe,OAAzB,EAAkC0C,IAAI,CAAC35B,MAAL,CAAYr3C,CAA9C,EAAiDgxE,IAAI,CAAC35B,MAAL,CAAYp3C,CAA7D,CAAd;;EACA,QAAI0G,KAAK,KAAK,CAAC,CAAf,EAAkB;EAChB,WAAKlB,GAAL,CAASk1C,IAAT;EACA,aAAO,IAAP;EACD;;EACD,UAAM+B,IAAI,GAAG,KAAK4wB,QAAL,CAAc3mE,KAAd,CAAb;;EACA,QAAI+1C,IAAI,KAAK,IAAT,IAAiB,CAACA,IAAI,CAACx/B,WAAL,GAAmBvQ,QAAnB,CAA4B2hE,OAA5B,CAAtB,EAA4D;EAC1D,YAAM6B,UAAU,GAAGpO,MAAI,CAACiO,cAAL,CAAoBtzB,IAApB,EAA0B4xB,OAA1B,CAAnB;EACA,WAAKhB,QAAL,CAAc3mE,KAAd,IAAuBwpE,UAAvB;EACD;;EACD,SAAKc,eAAL,CAAqB,KAAK3D,QAAL,CAAc3mE,KAAd,CAArB,EAA2C2nE,OAA3C,EAAoD3zB,IAApD;EACD;;EACDyzB,EAAAA,aAAa,CAACD,SAAD,EAAY;EACvB,WAAO,IAAP;EACD;;EACD8C,EAAAA,eAAe,CAACC,IAAD,EAAO5C,OAAP,EAAgB3zB,IAAhB,EAAsB;EACnCv5C,IAAAA,MAAM,CAACE,MAAP,CAAc4vE,IAAI,CAACh0D,WAAL,GAAmBvQ,QAAnB,CAA4B2hE,OAA5B,CAAd;EACA,UAAM6C,OAAO,GAAGR,YAAY,CAACC,WAAb,CAAyBtC,OAAO,CAACrjE,OAAR,EAAzB,EAA4CqjE,OAAO,CAACvjE,OAAR,EAA5C,CAAhB;EACA,UAAMqmE,OAAO,GAAGT,YAAY,CAACC,WAAb,CAAyBtC,OAAO,CAACpjE,OAAR,EAAzB,EAA4CojE,OAAO,CAACtjE,OAAR,EAA5C,CAAhB;EACA,QAAI0xC,IAAI,GAAG,IAAX;EACA,QAAIy0B,OAAO,IAAIC,OAAf,EAAwB10B,IAAI,GAAGw0B,IAAI,CAAChiB,IAAL,CAAUof,OAAV,CAAP,CAAxB,KAAwD5xB,IAAI,GAAGw0B,IAAI,CAAC5M,OAAL,CAAagK,OAAb,CAAP;EACxD5xB,IAAAA,IAAI,CAACj3C,GAAL,CAASk1C,IAAT;EACD;;EA3BwC;EA6B3Cq2B,IAAI,CAAC35B,MAAL,GAAc,IAAIt1C,UAAJ,CAAe,GAAf,EAAoB,GAApB,CAAd;;EClCe,MAAMsvE,YAAN,CAAmB;EAChC90B,EAAAA,MAAM,CAAC+xB,OAAD,EAAU3zB,IAAV,EAAgB;;EACtB50C,EAAAA,MAAM,CAACuoE,OAAD,EAAU3zB,IAAV,EAAgB;;EACtBgB,EAAAA,KAAK,GAAG;EAMP;;EAT+B;;ECMnB,MAAM21B,QAAN,CAAe;EAC5B5zE,EAAAA,WAAW,GAAG;EACZ4zE,IAAAA,QAAQ,CAACvwE,YAAT,CAAsBC,KAAtB,CAA4B,IAA5B,EAAkCC,SAAlC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKo7C,KAAL,GAAa,IAAb;EACA,SAAKo1B,UAAL,GAAkB,GAAlB;EACA,SAAKp1B,KAAL,GAAa,IAAI60B,IAAJ,EAAb;EACD;;EACD,SAAOQ,YAAP,CAAoBlD,OAApB,EAA6BriE,SAA7B,EAAwC;EACtC,QAAIsxC,IAAI,GAAG+wB,OAAO,CAACrjE,OAAR,EAAX;EACA,QAAIuyC,IAAI,GAAG8wB,OAAO,CAACvjE,OAAR,EAAX;EACA,QAAIwlE,IAAI,GAAGjC,OAAO,CAACpjE,OAAR,EAAX;EACA,QAAIslE,IAAI,GAAGlC,OAAO,CAACtjE,OAAR,EAAX;EACA,QAAIuyC,IAAI,KAAKC,IAAT,IAAiB+yB,IAAI,KAAKC,IAA9B,EAAoC,OAAOlC,OAAP;;EACpC,QAAI/wB,IAAI,KAAKC,IAAb,EAAmB;EACjBD,MAAAA,IAAI,GAAGA,IAAI,GAAGtxC,SAAS,GAAG,GAA1B;EACAuxC,MAAAA,IAAI,GAAGA,IAAI,GAAGvxC,SAAS,GAAG,GAA1B;EACD;;EACD,QAAIskE,IAAI,KAAKC,IAAb,EAAmB;EACjBD,MAAAA,IAAI,GAAGA,IAAI,GAAGtkE,SAAS,GAAG,GAA1B;EACAukE,MAAAA,IAAI,GAAGA,IAAI,GAAGvkE,SAAS,GAAG,GAA1B;EACD;;EACD,WAAO,IAAI7C,QAAJ,CAAam0C,IAAb,EAAmBC,IAAnB,EAAyB+yB,IAAzB,EAA+BC,IAA/B,CAAP;EACD;;EACD3qE,EAAAA,IAAI,GAAG;EACL,QAAI,KAAKs2C,KAAL,KAAe,IAAnB,EAAyB,OAAO,KAAKA,KAAL,CAAWt2C,IAAX,EAAP;EACzB,WAAO,CAAP;EACD;;EACD02C,EAAAA,MAAM,CAAC+xB,OAAD,EAAU3zB,IAAV,EAAgB;EACpB,SAAK82B,YAAL,CAAkBnD,OAAlB;EACA,UAAMoD,SAAS,GAAGJ,QAAQ,CAACE,YAAT,CAAsBlD,OAAtB,EAA+B,KAAKiD,UAApC,CAAlB;;EACA,SAAKp1B,KAAL,CAAWI,MAAX,CAAkBm1B,SAAlB,EAA6B/2B,IAA7B;EACD;;EACDgB,EAAAA,KAAK,GAAG;EACN,QAAI16C,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMitE,SAAS,GAAGltE,SAAS,CAAC,CAAD,CAA3B;EACA,YAAM26C,OAAO,GAAG,IAAIe,gBAAJ,EAAhB;EACA,WAAKhB,KAAL,CAAWwyB,SAAX,EAAsBvyB,OAAtB;EACA,aAAOA,OAAO,CAACiB,QAAR,EAAP;EACD,KALD,MAKO,IAAI57C,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMitE,SAAS,GAAGltE,SAAS,CAAC,CAAD,CAA3B;EAAA,YAAgC26C,OAAO,GAAG36C,SAAS,CAAC,CAAD,CAAnD;;EACA,WAAKk7C,KAAL,CAAWtI,KAAX,CAAiBs6B,SAAjB,EAA4BvyB,OAA5B;EACD;EACF;;EACD+1B,EAAAA,QAAQ,GAAG;EACT,UAAMC,UAAU,GAAG,IAAIvrE,SAAJ,EAAnB;;EACA,SAAK81C,KAAL,CAAW2xB,WAAX,CAAuB8D,UAAvB;;EACA,WAAOA,UAAP;EACD;;EACD7rE,EAAAA,MAAM,CAACuoE,OAAD,EAAU3zB,IAAV,EAAgB;EACpB,UAAMk3B,MAAM,GAAGP,QAAQ,CAACE,YAAT,CAAsBlD,OAAtB,EAA+B,KAAKiD,UAApC,CAAf;EACA,WAAO,KAAKp1B,KAAL,CAAWp2C,MAAX,CAAkB8rE,MAAlB,EAA0Bl3B,IAA1B,CAAP;EACD;;EACD82B,EAAAA,YAAY,CAACnD,OAAD,EAAU;EACpB,UAAMwD,IAAI,GAAGxD,OAAO,CAAC3jE,QAAR,EAAb;EACA,QAAImnE,IAAI,GAAG,KAAKP,UAAZ,IAA0BO,IAAI,GAAG,GAArC,EAA0C,KAAKP,UAAL,GAAkBO,IAAlB;EAC1C,UAAMC,IAAI,GAAGzD,OAAO,CAAC1jE,SAAR,EAAb;EACA,QAAImnE,IAAI,GAAG,KAAKR,UAAZ,IAA0BQ,IAAI,GAAG,GAArC,EAA0C,KAAKR,UAAL,GAAkBQ,IAAlB;EAC3C;;EACD1L,EAAAA,KAAK,GAAG;EACN,QAAI,KAAKlqB,KAAL,KAAe,IAAnB,EAAyB,OAAO,KAAKA,KAAL,CAAWkqB,KAAX,EAAP;EACzB,WAAO,CAAP;EACD;;EACD1gE,EAAAA,OAAO,GAAG;EACR,QAAI,KAAKw2C,KAAL,KAAe,IAAnB,EAAyB,OAAO,IAAP;EACzB,WAAO,KAAKA,KAAL,CAAWx2C,OAAX,EAAP;EACD;;EACD,MAAIrB,WAAJ,GAAkB;EAChB,WAAO,CAAC+sE,YAAD,EAAezwE,YAAf,CAAP;EACD;;EAtE2B;;;;;;;ECNf,MAAMoxE,SAAN,CAAgB;EAC7BC,EAAAA,SAAS,GAAG;;EADiB;;ECEhB,MAAMC,aAAN,CAAoB;EACjCx0E,EAAAA,WAAW,GAAG;EACZw0E,IAAAA,aAAa,CAACnxE,YAAd,CAA2BC,KAA3B,CAAiC,IAAjC,EAAuCC,SAAvC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKoxE,OAAL,GAAe,IAAf;EACA,SAAKz2B,KAAL,GAAa,IAAb;EACA,UAAM02B,MAAM,GAAGnxE,SAAS,CAAC,CAAD,CAAxB;EAAA,UAA6B05C,IAAI,GAAG15C,SAAS,CAAC,CAAD,CAA7C;EACA,SAAKkxE,OAAL,GAAeC,MAAf;EACA,SAAK12B,KAAL,GAAaf,IAAb;EACD;;EACD03B,EAAAA,OAAO,GAAG;EACR,WAAO,KAAK32B,KAAZ;EACD;;EACDu2B,EAAAA,SAAS,GAAG;EACV,WAAO,KAAKE,OAAZ;EACD;;EACD,MAAI7tE,WAAJ,GAAkB;EAChB,WAAO,CAAC0tE,SAAD,EAAYpxE,YAAZ,CAAP;EACD;;EAnBgC;;ECDpB,MAAM0xE,aAAN,CAAoB;EACjC50E,EAAAA,WAAW,GAAG;EACZ40E,IAAAA,aAAa,CAACvxE,YAAd,CAA2BC,KAA3B,CAAiC,IAAjC,EAAuCC,SAAvC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKy8D,KAAL,GAAa,IAAb;EACA,SAAK5gB,MAAL,GAAc,IAAd;EACA,SAAK4gB,KAAL,GAAa,CAAb;EACA,SAAK5gB,MAAL,GAAc,IAAIv2C,SAAJ,EAAd;;EACA,SAAKu2C,MAAL,CAAYn3C,GAAZ,CAAgB,IAAhB;EACD;;EACD8sE,EAAAA,IAAI,GAAG;EACL,QAAI,KAAK5sE,OAAL,EAAJ,EAAoB,OAAO,IAAP;;EACpB,UAAM6sE,OAAO,GAAG,KAAK51B,MAAL,CAAY12C,GAAZ,CAAgB,CAAhB,CAAhB;;EACA,SAAK02C,MAAL,CAAYz2C,GAAZ,CAAgB,CAAhB,EAAmB,KAAKy2C,MAAL,CAAY12C,GAAZ,CAAgB,KAAKs3D,KAArB,CAAnB;;EACA,SAAKA,KAAL,IAAc,CAAd;EACA,SAAKiV,OAAL,CAAa,CAAb;EACA,WAAOD,OAAP;EACD;;EACD3sE,EAAAA,IAAI,GAAG;EACL,WAAO,KAAK23D,KAAZ;EACD;;EACDiV,EAAAA,OAAO,CAACziC,IAAD,EAAO;EACZ,QAAI0iC,KAAK,GAAG,IAAZ;;EACA,UAAM7wD,GAAG,GAAG,KAAK+6B,MAAL,CAAY12C,GAAZ,CAAgB8pC,IAAhB,CAAZ;;EACA,WAAOA,IAAI,GAAG,CAAP,IAAY,KAAKwtB,KAAxB,EAA+BxtB,IAAI,GAAG0iC,KAAtC,EAA6C;EAC3CA,MAAAA,KAAK,GAAG1iC,IAAI,GAAG,CAAf;EACA,UAAI0iC,KAAK,KAAK,KAAKlV,KAAf,IAAwB,KAAK5gB,MAAL,CAAY12C,GAAZ,CAAgBwsE,KAAK,GAAG,CAAxB,EAA2BrvE,SAA3B,CAAqC,KAAKu5C,MAAL,CAAY12C,GAAZ,CAAgBwsE,KAAhB,CAArC,IAA+D,CAA3F,EAA8FA,KAAK;EACnG,UAAI,KAAK91B,MAAL,CAAY12C,GAAZ,CAAgBwsE,KAAhB,EAAuBrvE,SAAvB,CAAiCwe,GAAjC,IAAwC,CAA5C,EAA+C,KAAK+6B,MAAL,CAAYz2C,GAAZ,CAAgB6pC,IAAhB,EAAsB,KAAK4M,MAAL,CAAY12C,GAAZ,CAAgBwsE,KAAhB,CAAtB,EAA/C,KAAmG;EACpG;;EACD,SAAK91B,MAAL,CAAYz2C,GAAZ,CAAgB6pC,IAAhB,EAAsBnuB,GAAtB;EACD;;EACDnb,EAAAA,KAAK,GAAG;EACN,SAAK82D,KAAL,GAAa,CAAb;;EACA,SAAK5gB,MAAL,CAAYl2C,KAAZ;EACD;;EACDq7C,EAAAA,IAAI,GAAG;EACL,QAAI,KAAKp8C,OAAL,EAAJ,EAAoB,OAAO,IAAP;;EACpB,UAAM6sE,OAAO,GAAG,KAAK51B,MAAL,CAAY12C,GAAZ,CAAgB,CAAhB,CAAhB;;EACA,WAAOssE,OAAP;EACD;;EACD7sE,EAAAA,OAAO,GAAG;EACR,WAAO,KAAK63D,KAAL,KAAe,CAAtB;EACD;;EACD/3D,EAAAA,GAAG,CAACzF,CAAD,EAAI;EACL,SAAK48C,MAAL,CAAYn3C,GAAZ,CAAgB,IAAhB;;EACA,SAAK+3D,KAAL,IAAc,CAAd;EACA,QAAIxtB,IAAI,GAAG,KAAKwtB,KAAhB;;EACA,SAAK5gB,MAAL,CAAYz2C,GAAZ,CAAgB,CAAhB,EAAmBnG,CAAnB;;EACA,WAAOA,CAAC,CAACqD,SAAF,CAAY,KAAKu5C,MAAL,CAAY12C,GAAZ,CAAgB5I,IAAI,CAAC6S,KAAL,CAAW6/B,IAAI,GAAG,CAAlB,CAAhB,CAAZ,IAAqD,CAA5D,EAA+DA,IAAI,IAAI,CAAvE,EACE,KAAK4M,MAAL,CAAYz2C,GAAZ,CAAgB6pC,IAAhB,EAAsB,KAAK4M,MAAL,CAAY12C,GAAZ,CAAgB5I,IAAI,CAAC6S,KAAL,CAAW6/B,IAAI,GAAG,CAAlB,CAAhB,CAAtB;;EAEF,SAAK4M,MAAL,CAAYz2C,GAAZ,CAAgB6pC,IAAhB,EAAsBhwC,CAAtB;EACD;;EArDgC;;ECGpB,MAAM2yE,YAAN,CAAmB;EAChCj1E,EAAAA,WAAW,GAAG;EACZi1E,IAAAA,YAAY,CAAC5xE,YAAb,CAA0BC,KAA1B,CAAgC,IAAhC,EAAsCC,SAAtC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK6xE,gBAAL,GAAwB,IAAIvsE,SAAJ,EAAxB;EACA,SAAK8rE,OAAL,GAAe,IAAf;EACA,SAAK/1B,MAAL,GAAc,IAAd;;EACA,QAAIn7C,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B,CAA5B,MAAoC,IAAID,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC9D,YAAMwuE,KAAK,GAAGzuE,SAAS,CAAC,CAAD,CAAvB;EACA,WAAKm7C,MAAL,GAAcszB,KAAd;EACD;EACF;;EACDC,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAKvzB,MAAZ;EACD;;EACDv2C,EAAAA,IAAI,GAAG;EACL,WAAO,KAAK+sE,gBAAL,CAAsB/sE,IAAtB,EAAP;EACD;;EACDgtE,EAAAA,kBAAkB,GAAG;EACnB,WAAO,KAAKD,gBAAZ;EACD;;EACDE,EAAAA,iBAAiB,CAACC,cAAD,EAAiB;EAChC3xE,IAAAA,MAAM,CAACE,MAAP,CAAc,KAAK6wE,OAAL,KAAiB,IAA/B;;EACA,SAAKS,gBAAL,CAAsBntE,GAAtB,CAA0BstE,cAA1B;EACD;;EACDptE,EAAAA,OAAO,GAAG;EACR,WAAO,KAAKitE,gBAAL,CAAsBjtE,OAAtB,EAAP;EACD;;EACDssE,EAAAA,SAAS,GAAG;EACV,QAAI,KAAKE,OAAL,KAAiB,IAArB,EACE,KAAKA,OAAL,GAAe,KAAKa,aAAL,EAAf;EAEF,WAAO,KAAKb,OAAZ;EACD;;EACD,MAAI7tE,WAAJ,GAAkB;EAChB,WAAO,CAAC0tE,SAAD,EAAYpxE,YAAZ,CAAP;EACD;;EArC+B;;ECJnB,MAAMqyE,gBAAN,CAAuB;EACpC,SAAOC,WAAP,CAAmBC,GAAnB,EAAwBC,GAAxB,EAA6BC,GAA7B,EAAkCC,GAAlC,EAAuCC,GAAvC,EAA4CC,GAA5C,EAAiDC,GAAjD,EAAsDC,GAAtD,EAA2D;EACzD,QAAIt4D,IAAI,GAAG63D,gBAAgB,CAAC7uE,QAAjB,CAA0B+uE,GAA1B,EAA+BC,GAA/B,EAAoCG,GAApC,EAAyCC,GAAzC,CAAX;EACAp4D,IAAAA,IAAI,GAAG9d,IAAI,CAACiN,GAAL,CAAS6Q,IAAT,EAAe63D,gBAAgB,CAAC7uE,QAAjB,CAA0B+uE,GAA1B,EAA+BC,GAA/B,EAAoCK,GAApC,EAAyCC,GAAzC,CAAf,CAAP;EACAt4D,IAAAA,IAAI,GAAG9d,IAAI,CAACiN,GAAL,CAAS6Q,IAAT,EAAe63D,gBAAgB,CAAC7uE,QAAjB,CAA0BivE,GAA1B,EAA+BC,GAA/B,EAAoCC,GAApC,EAAyCC,GAAzC,CAAf,CAAP;EACAp4D,IAAAA,IAAI,GAAG9d,IAAI,CAACiN,GAAL,CAAS6Q,IAAT,EAAe63D,gBAAgB,CAAC7uE,QAAjB,CAA0BivE,GAA1B,EAA+BC,GAA/B,EAAoCG,GAApC,EAAyCC,GAAzC,CAAf,CAAP;EACA,WAAOt4D,IAAP;EACD;;EACD,SAAOhX,QAAP,CAAgBjH,EAAhB,EAAoB2M,EAApB,EAAwB1M,EAAxB,EAA4B2M,EAA5B,EAAgC;EAC9B,UAAMjG,EAAE,GAAG1G,EAAE,GAAGD,EAAhB;EACA,UAAM4G,EAAE,GAAGgG,EAAE,GAAGD,EAAhB;EACA,WAAOxM,IAAI,CAAC2G,IAAL,CAAUH,EAAE,GAAGA,EAAL,GAAUC,EAAE,GAAGA,EAAzB,CAAP;EACD;;EACD,SAAO4vE,eAAP,CAAuBt4C,IAAvB,EAA6Bu4C,IAA7B,EAAmC;EACjC,UAAMr2B,IAAI,GAAGjgD,IAAI,CAAC+M,GAAL,CAASgxB,IAAI,CAACpwB,OAAL,EAAT,EAAyB2oE,IAAI,CAAC3oE,OAAL,EAAzB,CAAb;EACA,UAAMslE,IAAI,GAAGjzE,IAAI,CAAC+M,GAAL,CAASgxB,IAAI,CAACnwB,OAAL,EAAT,EAAyB0oE,IAAI,CAAC1oE,OAAL,EAAzB,CAAb;EACA,UAAMsyC,IAAI,GAAGlgD,IAAI,CAACiN,GAAL,CAAS8wB,IAAI,CAACtwB,OAAL,EAAT,EAAyB6oE,IAAI,CAAC7oE,OAAL,EAAzB,CAAb;EACA,UAAMylE,IAAI,GAAGlzE,IAAI,CAACiN,GAAL,CAAS8wB,IAAI,CAACrwB,OAAL,EAAT,EAAyB4oE,IAAI,CAAC5oE,OAAL,EAAzB,CAAb;EACA,WAAOioE,gBAAgB,CAAC7uE,QAAjB,CAA0Bm5C,IAA1B,EAAgCgzB,IAAhC,EAAsC/yB,IAAtC,EAA4CgzB,IAA5C,CAAP;EACD;;EACD,SAAOqD,cAAP,CAAsBjvE,CAAtB,EAAyBC,CAAzB,EAA4B;EAC1B,UAAMivE,KAAK,GAAGlvE,CAAC,CAACqG,OAAF,EAAd;EACA,UAAM8oE,KAAK,GAAGnvE,CAAC,CAACsG,OAAF,EAAd;EACA,UAAM8oE,KAAK,GAAGpvE,CAAC,CAACmG,OAAF,EAAd;EACA,UAAMkpE,KAAK,GAAGrvE,CAAC,CAACoG,OAAF,EAAd;EACA,UAAMkpE,KAAK,GAAGrvE,CAAC,CAACoG,OAAF,EAAd;EACA,UAAMkpE,KAAK,GAAGtvE,CAAC,CAACqG,OAAF,EAAd;EACA,UAAMkpE,KAAK,GAAGvvE,CAAC,CAACkG,OAAF,EAAd;EACA,UAAMspE,KAAK,GAAGxvE,CAAC,CAACmG,OAAF,EAAd;EACA,QAAIoQ,IAAI,GAAG63D,gBAAgB,CAACC,WAAjB,CAA6BY,KAA7B,EAAoCC,KAApC,EAA2CD,KAA3C,EAAkDG,KAAlD,EAAyDC,KAAzD,EAAgEC,KAAhE,EAAuED,KAAvE,EAA8EG,KAA9E,CAAX;EACAj5D,IAAAA,IAAI,GAAG9d,IAAI,CAAC+M,GAAL,CAAS+Q,IAAT,EAAe63D,gBAAgB,CAACC,WAAjB,CAA6BY,KAA7B,EAAoCC,KAApC,EAA2CD,KAA3C,EAAkDG,KAAlD,EAAyDC,KAAzD,EAAgEC,KAAhE,EAAuEC,KAAvE,EAA8ED,KAA9E,CAAf,CAAP;EACA/4D,IAAAA,IAAI,GAAG9d,IAAI,CAAC+M,GAAL,CAAS+Q,IAAT,EAAe63D,gBAAgB,CAACC,WAAjB,CAA6BY,KAA7B,EAAoCC,KAApC,EAA2CD,KAA3C,EAAkDG,KAAlD,EAAyDG,KAAzD,EAAgEC,KAAhE,EAAuEH,KAAvE,EAA8EG,KAA9E,CAAf,CAAP;EACAj5D,IAAAA,IAAI,GAAG9d,IAAI,CAAC+M,GAAL,CAAS+Q,IAAT,EAAe63D,gBAAgB,CAACC,WAAjB,CAA6BY,KAA7B,EAAoCC,KAApC,EAA2CD,KAA3C,EAAkDG,KAAlD,EAAyDG,KAAzD,EAAgEC,KAAhE,EAAuED,KAAvE,EAA8ED,KAA9E,CAAf,CAAP;EACA/4D,IAAAA,IAAI,GAAG9d,IAAI,CAAC+M,GAAL,CAAS+Q,IAAT,EAAe63D,gBAAgB,CAACC,WAAjB,CAA6BY,KAA7B,EAAoCC,KAApC,EAA2CC,KAA3C,EAAkDD,KAAlD,EAAyDG,KAAzD,EAAgEC,KAAhE,EAAuED,KAAvE,EAA8EG,KAA9E,CAAf,CAAP;EACAj5D,IAAAA,IAAI,GAAG9d,IAAI,CAAC+M,GAAL,CAAS+Q,IAAT,EAAe63D,gBAAgB,CAACC,WAAjB,CAA6BY,KAA7B,EAAoCC,KAApC,EAA2CC,KAA3C,EAAkDD,KAAlD,EAAyDG,KAAzD,EAAgEC,KAAhE,EAAuEC,KAAvE,EAA8ED,KAA9E,CAAf,CAAP;EACA/4D,IAAAA,IAAI,GAAG9d,IAAI,CAAC+M,GAAL,CAAS+Q,IAAT,EAAe63D,gBAAgB,CAACC,WAAjB,CAA6BY,KAA7B,EAAoCC,KAApC,EAA2CC,KAA3C,EAAkDD,KAAlD,EAAyDK,KAAzD,EAAgEC,KAAhE,EAAuEH,KAAvE,EAA8EG,KAA9E,CAAf,CAAP;EACAj5D,IAAAA,IAAI,GAAG9d,IAAI,CAAC+M,GAAL,CAAS+Q,IAAT,EAAe63D,gBAAgB,CAACC,WAAjB,CAA6BY,KAA7B,EAAoCC,KAApC,EAA2CC,KAA3C,EAAkDD,KAAlD,EAAyDK,KAAzD,EAAgEC,KAAhE,EAAuED,KAAvE,EAA8ED,KAA9E,CAAf,CAAP;EACA/4D,IAAAA,IAAI,GAAG9d,IAAI,CAAC+M,GAAL,CAAS+Q,IAAT,EAAe63D,gBAAgB,CAACC,WAAjB,CAA6Bc,KAA7B,EAAoCC,KAApC,EAA2CH,KAA3C,EAAkDG,KAAlD,EAAyDC,KAAzD,EAAgEC,KAAhE,EAAuED,KAAvE,EAA8EG,KAA9E,CAAf,CAAP;EACAj5D,IAAAA,IAAI,GAAG9d,IAAI,CAAC+M,GAAL,CAAS+Q,IAAT,EAAe63D,gBAAgB,CAACC,WAAjB,CAA6Bc,KAA7B,EAAoCC,KAApC,EAA2CH,KAA3C,EAAkDG,KAAlD,EAAyDC,KAAzD,EAAgEC,KAAhE,EAAuEC,KAAvE,EAA8ED,KAA9E,CAAf,CAAP;EACA/4D,IAAAA,IAAI,GAAG9d,IAAI,CAAC+M,GAAL,CAAS+Q,IAAT,EAAe63D,gBAAgB,CAACC,WAAjB,CAA6Bc,KAA7B,EAAoCC,KAApC,EAA2CH,KAA3C,EAAkDG,KAAlD,EAAyDG,KAAzD,EAAgEC,KAAhE,EAAuEH,KAAvE,EAA8EG,KAA9E,CAAf,CAAP;EACAj5D,IAAAA,IAAI,GAAG9d,IAAI,CAAC+M,GAAL,CAAS+Q,IAAT,EAAe63D,gBAAgB,CAACC,WAAjB,CAA6Bc,KAA7B,EAAoCC,KAApC,EAA2CH,KAA3C,EAAkDG,KAAlD,EAAyDG,KAAzD,EAAgEC,KAAhE,EAAuED,KAAvE,EAA8ED,KAA9E,CAAf,CAAP;EACA/4D,IAAAA,IAAI,GAAG9d,IAAI,CAAC+M,GAAL,CAAS+Q,IAAT,EAAe63D,gBAAgB,CAACC,WAAjB,CAA6Bc,KAA7B,EAAoCC,KAApC,EAA2CD,KAA3C,EAAkDD,KAAlD,EAAyDG,KAAzD,EAAgEC,KAAhE,EAAuED,KAAvE,EAA8EG,KAA9E,CAAf,CAAP;EACAj5D,IAAAA,IAAI,GAAG9d,IAAI,CAAC+M,GAAL,CAAS+Q,IAAT,EAAe63D,gBAAgB,CAACC,WAAjB,CAA6Bc,KAA7B,EAAoCC,KAApC,EAA2CD,KAA3C,EAAkDD,KAAlD,EAAyDG,KAAzD,EAAgEC,KAAhE,EAAuEC,KAAvE,EAA8ED,KAA9E,CAAf,CAAP;EACA/4D,IAAAA,IAAI,GAAG9d,IAAI,CAAC+M,GAAL,CAAS+Q,IAAT,EAAe63D,gBAAgB,CAACC,WAAjB,CAA6Bc,KAA7B,EAAoCC,KAApC,EAA2CD,KAA3C,EAAkDD,KAAlD,EAAyDK,KAAzD,EAAgEC,KAAhE,EAAuEH,KAAvE,EAA8EG,KAA9E,CAAf,CAAP;EACAj5D,IAAAA,IAAI,GAAG9d,IAAI,CAAC+M,GAAL,CAAS+Q,IAAT,EAAe63D,gBAAgB,CAACC,WAAjB,CAA6Bc,KAA7B,EAAoCC,KAApC,EAA2CD,KAA3C,EAAkDD,KAAlD,EAAyDK,KAAzD,EAAgEC,KAAhE,EAAuED,KAAvE,EAA8ED,KAA9E,CAAf,CAAP;EACA,WAAO/4D,IAAP;EACD;;EA9CmC;;ECIvB,MAAMk5D,aAAN,CAAoB;EACjC52E,EAAAA,WAAW,GAAG;EACZ42E,IAAAA,aAAa,CAACvzE,YAAd,CAA2BC,KAA3B,CAAiC,IAAjC,EAAuCC,SAAvC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKwzE,WAAL,GAAmB,IAAnB;EACA,SAAKC,WAAL,GAAmB,IAAnB;EACA,SAAKj8B,SAAL,GAAiB,IAAjB;EACA,SAAKk8B,aAAL,GAAqB,IAArB;EACA,UAAMC,UAAU,GAAGzzE,SAAS,CAAC,CAAD,CAA5B;EAAA,UAAiC0zE,UAAU,GAAG1zE,SAAS,CAAC,CAAD,CAAvD;EAAA,UAA4D2zE,YAAY,GAAG3zE,SAAS,CAAC,CAAD,CAApF;EACA,SAAKszE,WAAL,GAAmBG,UAAnB;EACA,SAAKF,WAAL,GAAmBG,UAAnB;EACA,SAAKF,aAAL,GAAqBG,YAArB;EACA,SAAKr8B,SAAL,GAAiB,KAAKn0C,QAAL,EAAjB;EACD;;EACD,SAAO+hB,IAAP,CAAYthB,CAAZ,EAAe;EACb,WAAOA,CAAC,CAACotE,SAAF,GAAcvnE,OAAd,EAAP;EACD;;EACD,SAAOmqE,WAAP,CAAmBl6B,IAAnB,EAAyB;EACvB,WAAOA,IAAI,YAAYg4B,YAAvB;EACD;;EACDgB,EAAAA,eAAe,GAAG;EAChB,WAAOV,gBAAgB,CAACU,eAAjB,CAAiC,KAAKY,WAAL,CAAiBtC,SAAjB,EAAjC,EAA+D,KAAKuC,WAAL,CAAiBvC,SAAjB,EAA/D,CAAP;EACD;;EACD6C,EAAAA,aAAa,CAACC,IAAD,EAAO55D,WAAP,EAAoB;EAC/B,UAAM65D,OAAO,GAAGV,aAAa,CAACO,WAAd,CAA0B,KAAKN,WAA/B,CAAhB;EACA,UAAMU,OAAO,GAAGX,aAAa,CAACO,WAAd,CAA0B,KAAKL,WAA/B,CAAhB;;EACA,QAAIQ,OAAO,IAAIC,OAAf,EAAwB;EACtB,UAAIX,aAAa,CAACnuD,IAAd,CAAmB,KAAKouD,WAAxB,IAAuCD,aAAa,CAACnuD,IAAd,CAAmB,KAAKquD,WAAxB,CAA3C,EAAiF;EAC/E,aAAKU,MAAL,CAAY,KAAKX,WAAjB,EAA8B,KAAKC,WAAnC,EAAgD,KAAhD,EAAuDO,IAAvD,EAA6D55D,WAA7D;EACA,eAAO,IAAP;EACD,OAHD,MAGO;EACL,aAAK+5D,MAAL,CAAY,KAAKV,WAAjB,EAA8B,KAAKD,WAAnC,EAAgD,IAAhD,EAAsDQ,IAAtD,EAA4D55D,WAA5D;EACA,eAAO,IAAP;EACD;EACF,KARD,MAQO,IAAI65D,OAAJ,EAAa;EAClB,WAAKE,MAAL,CAAY,KAAKX,WAAjB,EAA8B,KAAKC,WAAnC,EAAgD,KAAhD,EAAuDO,IAAvD,EAA6D55D,WAA7D;EACA,aAAO,IAAP;EACD,KAHM,MAGA,IAAI85D,OAAJ,EAAa;EAClB,WAAKC,MAAL,CAAY,KAAKV,WAAjB,EAA8B,KAAKD,WAAnC,EAAgD,IAAhD,EAAsDQ,IAAtD,EAA4D55D,WAA5D;EACA,aAAO,IAAP;EACD;;EACD,UAAM,IAAInd,wBAAJ,CAA6B,gCAA7B,CAAN;EACD;;EACDm3E,EAAAA,QAAQ,GAAG;EACT,WAAO,EAAEb,aAAa,CAACO,WAAd,CAA0B,KAAKN,WAA/B,KAA+CD,aAAa,CAACO,WAAd,CAA0B,KAAKL,WAA/B,CAAjD,CAAP;EACD;;EACDnxE,EAAAA,SAAS,CAACC,CAAD,EAAI;EACX,UAAM8xE,EAAE,GAAG9xE,CAAX;EACA,QAAI,KAAKi1C,SAAL,GAAiB68B,EAAE,CAAC78B,SAAxB,EAAmC,OAAO,CAAC,CAAR;EACnC,QAAI,KAAKA,SAAL,GAAiB68B,EAAE,CAAC78B,SAAxB,EAAmC,OAAO,CAAP;EACnC,WAAO,CAAP;EACD;;EACD28B,EAAAA,MAAM,CAACG,YAAD,EAAeC,QAAf,EAAyBC,SAAzB,EAAoCR,IAApC,EAA0C55D,WAA1C,EAAuD;EAC3D,UAAMq6D,QAAQ,GAAGH,YAAY,CAACxC,kBAAb,EAAjB;;EACA,SAAK,IAAIx0E,CAAC,GAAGm3E,QAAQ,CAAC5vE,QAAT,EAAb,EAAkCvH,CAAC,CAACmJ,OAAF,EAAlC,GAAiD;EAC/C,YAAMkrE,KAAK,GAAGr0E,CAAC,CAACkJ,IAAF,EAAd;EACA,UAAIkuE,EAAE,GAAG,IAAT;EACA,UAAIF,SAAJ,EACEE,EAAE,GAAG,IAAInB,aAAJ,CAAkBgB,QAAlB,EAA4B5C,KAA5B,EAAmC,KAAK+B,aAAxC,CAAL,CADF,KAGEgB,EAAE,GAAG,IAAInB,aAAJ,CAAkB5B,KAAlB,EAAyB4C,QAAzB,EAAmC,KAAKb,aAAxC,CAAL;EAEF,UAAIgB,EAAE,CAAC78B,WAAH,KAAmBz9B,WAAvB,EACE45D,IAAI,CAACtvE,GAAL,CAASgwE,EAAT;EAEH;EACF;;EACDC,EAAAA,YAAY,CAACr3E,CAAD,EAAI;EACd,QAAIA,CAAC,KAAK,CAAV,EAAa,OAAO,KAAKk2E,WAAZ;EACb,WAAO,KAAKC,WAAZ;EACD;;EACD57B,EAAAA,WAAW,GAAG;EACZ,WAAO,KAAKL,SAAZ;EACD;;EACDn0C,EAAAA,QAAQ,GAAG;EACT,QAAI,KAAK+wE,QAAL,EAAJ,EACE,OAAO,KAAKV,aAAL,CAAmBrwE,QAAnB,CAA4B,KAAKmwE,WAAjC,EAA8C,KAAKC,WAAnD,CAAP;EAEF,WAAO,KAAKD,WAAL,CAAiBtC,SAAjB,GAA6B7tE,QAA7B,CAAsC,KAAKowE,WAAL,CAAiBvC,SAAjB,EAAtC,CAAP;EACD;;EACD,MAAI3tE,WAAJ,GAAkB;EAChB,WAAO,CAAC7D,UAAD,CAAP;EACD;;EAnFgC;;ECKpB,MAAMk1E,eAAN,CAAsB;EACnCj4E,EAAAA,WAAW,GAAG;EACZi4E,IAAAA,eAAe,CAAC50E,YAAhB,CAA6BC,KAA7B,CAAmC,IAAnC,EAAyCC,SAAzC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKo7C,KAAL,GAAa,IAAb;EACA,SAAKy5B,MAAL,GAAc,KAAd;EACA,SAAKC,eAAL,GAAuB,IAAIxvE,SAAJ,EAAvB;EACA,SAAKyvE,aAAL,GAAqB,IAArB;;EACA,QAAI70E,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1By0E,MAAAA,eAAe,CAAC50E,YAAhB,CAA6BI,IAA7B,CAAkC,IAAlC,EAAwCw0E,eAAe,CAACI,qBAAxD;EACD,KAFD,MAEO,IAAI90E,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAM80E,YAAY,GAAG/0E,SAAS,CAAC,CAAD,CAA9B;EACAG,MAAAA,MAAM,CAACE,MAAP,CAAc00E,YAAY,GAAG,CAA7B,EAAgC,sCAAhC;EACA,WAAKF,aAAL,GAAqBE,YAArB;EACD;EACF;;EACD,SAAOC,cAAP,CAAsBrxE,CAAtB,EAAyBC,CAAzB,EAA4B;EAC1B,WAAOD,CAAC,GAAGC,CAAJ,GAAQ,CAAR,GAAYD,CAAC,GAAGC,CAAJ,GAAQ,CAAC,CAAT,GAAa,CAAhC;EACD;;EACDqxE,EAAAA,aAAa,GAAG;EACd,QAAItuE,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAew5C,WAAf,CAAZ,IAA4Cx5C,SAAS,CAAC,CAAD,CAAT,YAAwBpD,MAAxB,IAAkCoD,SAAS,CAAC,CAAD,CAAT,YAAwB0xE,YAA1G,EAAyH;EACvH,YAAMwD,YAAY,GAAGl1E,SAAS,CAAC,CAAD,CAA9B;EAAA,YAAmCy7C,IAAI,GAAGz7C,SAAS,CAAC,CAAD,CAAnD;EAAA,YAAwD26C,OAAO,GAAG36C,SAAS,CAAC,CAAD,CAA3E;EACA,YAAMm1E,eAAe,GAAG15B,IAAI,CAACm2B,kBAAL,EAAxB;;EACA,WAAK,IAAIx0E,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG+3E,eAAe,CAACvwE,IAAhB,EAApB,EAA4CxH,CAAC,EAA7C,EAAiD;EAC/C,cAAM00E,cAAc,GAAGqD,eAAe,CAAClwE,GAAhB,CAAoB7H,CAApB,CAAvB;EACA,YAAI,CAAC,KAAKg4E,eAAL,GAAuBrsE,UAAvB,CAAkC+oE,cAAc,CAACd,SAAf,EAAlC,EAA8DkE,YAA9D,CAAL,EACE;EAEF,YAAIpD,cAAc,YAAYJ,YAA9B,EACE,KAAKuD,aAAL,CAAmBC,YAAnB,EAAiCpD,cAAjC,EAAiDn3B,OAAjD,EADF,KAEK,IAAIm3B,cAAc,YAAYb,aAA9B,EACHt2B,OAAO,CAAClB,SAAR,CAAkBq4B,cAAc,CAACV,OAAf,EAAlB,EADG,KAGHjxE,MAAM,CAACC,oBAAP;EAEH;EACF,KAhBD,MAgBO,IAAIuG,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAegF,IAAf,CAAZ,IAAqChF,SAAS,CAAC,CAAD,CAAT,YAAwBpD,MAAxB,IAAkCoD,SAAS,CAAC,CAAD,CAAT,YAAwB0xE,YAAnG,EAAkH;EACvH,YAAMwD,YAAY,GAAGl1E,SAAS,CAAC,CAAD,CAA9B;EAAA,YAAmCy7C,IAAI,GAAGz7C,SAAS,CAAC,CAAD,CAAnD;EAAA,YAAwD0/B,OAAO,GAAG1/B,SAAS,CAAC,CAAD,CAA3E;EACA,YAAMm1E,eAAe,GAAG15B,IAAI,CAACm2B,kBAAL,EAAxB;;EACA,WAAK,IAAIx0E,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG+3E,eAAe,CAACvwE,IAAhB,EAApB,EAA4CxH,CAAC,EAA7C,EAAiD;EAC/C,cAAM00E,cAAc,GAAGqD,eAAe,CAAClwE,GAAhB,CAAoB7H,CAApB,CAAvB;EACA,YAAI,CAAC,KAAKg4E,eAAL,GAAuBrsE,UAAvB,CAAkC+oE,cAAc,CAACd,SAAf,EAAlC,EAA8DkE,YAA9D,CAAL,EACE;EAEF,YAAIpD,cAAc,YAAYJ,YAA9B,EACE,KAAKuD,aAAL,CAAmBC,YAAnB,EAAiCpD,cAAjC,EAAiDpyC,OAAjD,EADF,KAEK,IAAIoyC,cAAc,YAAYb,aAA9B,EACHvxC,OAAO,CAACl7B,GAAR,CAAYstE,cAAc,CAACV,OAAf,EAAZ,EADG,KAGHjxE,MAAM,CAACC,oBAAP;EAEH;EACF;EACF;;EACDi1E,EAAAA,eAAe,GAAG;EAChB,WAAO,KAAKR,aAAZ;EACD;;EACDS,EAAAA,QAAQ,CAACvP,KAAD,EAAQ;EACd,WAAOA,KAAK,CAAC9gE,GAAN,CAAU8gE,KAAK,CAACnhE,IAAN,KAAe,CAAzB,CAAP;EACD;;EACDA,EAAAA,IAAI,GAAG;EACL,QAAI5E,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,UAAI,KAAKyE,OAAL,EAAJ,EACE,OAAO,CAAP;EAEF,WAAK6wE,KAAL;EACA,aAAO,KAAK3wE,IAAL,CAAU,KAAKs2C,KAAf,CAAP;EACD,KAND,MAMO,IAAIl7C,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMw7C,IAAI,GAAGz7C,SAAS,CAAC,CAAD,CAAtB;EACA,UAAI4E,IAAI,GAAG,CAAX;;EACA,WAAK,IAAIxH,CAAC,GAAGq+C,IAAI,CAACm2B,kBAAL,GAA0BjtE,QAA1B,EAAb,EAAmDvH,CAAC,CAACmJ,OAAF,EAAnD,GAAkE;EAChE,cAAMurE,cAAc,GAAG10E,CAAC,CAACkJ,IAAF,EAAvB;EACA,YAAIwrE,cAAc,YAAYJ,YAA9B,EACE9sE,IAAI,IAAI,KAAKA,IAAL,CAAUktE,cAAV,CAAR,CADF,KAEK,IAAIA,cAAc,YAAYb,aAA9B,EACHrsE,IAAI,IAAI,CAAR;EAEH;;EACD,aAAOA,IAAP;EACD;EACF;;EACD4wE,EAAAA,UAAU,CAAC/5B,IAAD,EAAO/B,IAAP,EAAa;EACrB,QAAI+7B,aAAa,GAAG,IAApB;;EACA,SAAK,IAAIr4E,CAAC,GAAGq+C,IAAI,CAACm2B,kBAAL,GAA0BjtE,QAA1B,EAAb,EAAmDvH,CAAC,CAACmJ,OAAF,EAAnD,GAAkE;EAChE,YAAMurE,cAAc,GAAG10E,CAAC,CAACkJ,IAAF,EAAvB;EACA,UAAIwrE,cAAc,YAAYb,aAA9B,EACE,IAAIa,cAAc,CAACV,OAAf,OAA6B13B,IAAjC,EAAuC+7B,aAAa,GAAG3D,cAAhB;EAE1C;;EACD,QAAI2D,aAAa,KAAK,IAAtB,EAA4B;EAC1Bh6B,MAAAA,IAAI,CAACm2B,kBAAL,GAA0B9sE,MAA1B,CAAiC2wE,aAAjC;EACA,aAAO,IAAP;EACD;;EACD,WAAO,KAAP;EACD;;EACDC,EAAAA,SAAS,GAAG;EACV,QAAI11E,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,WAAKs1E,KAAL;EACA,YAAMI,UAAU,GAAG,KAAKD,SAAL,CAAe,KAAKx6B,KAApB,CAAnB;EACA,UAAIy6B,UAAU,KAAK,IAAnB,EAAyB,OAAO,IAAIvwE,SAAJ,EAAP;EACzB,aAAOuwE,UAAP;EACD,KALD,MAKO,IAAI31E,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMw7C,IAAI,GAAGz7C,SAAS,CAAC,CAAD,CAAtB;EACA,YAAM41E,iBAAiB,GAAG,IAAIxwE,SAAJ,EAA1B;;EACA,WAAK,IAAIhI,CAAC,GAAGq+C,IAAI,CAACm2B,kBAAL,GAA0BjtE,QAA1B,EAAb,EAAmDvH,CAAC,CAACmJ,OAAF,EAAnD,GAAkE;EAChE,cAAMurE,cAAc,GAAG10E,CAAC,CAACkJ,IAAF,EAAvB;;EACA,YAAIwrE,cAAc,YAAYJ,YAA9B,EAA4C;EAC1C,gBAAMmE,kBAAkB,GAAG,KAAKH,SAAL,CAAe5D,cAAf,CAA3B;EACA,cAAI+D,kBAAkB,KAAK,IAA3B,EAAiCD,iBAAiB,CAACpxE,GAAlB,CAAsBqxE,kBAAtB;EAClC,SAHD,MAGO,IAAI/D,cAAc,YAAYb,aAA9B,EAA6C;EAClD2E,UAAAA,iBAAiB,CAACpxE,GAAlB,CAAsBstE,cAAc,CAACV,OAAf,EAAtB;EACD,SAFM,MAEA;EACLjxE,UAAAA,MAAM,CAACC,oBAAP;EACD;EACF;;EACD,UAAIw1E,iBAAiB,CAAChxE,IAAlB,MAA4B,CAAhC,EAAmC,OAAO,IAAP;EACnC,aAAOgxE,iBAAP;EACD;EACF;;EACDt6B,EAAAA,MAAM,CAAC61B,MAAD,EAASz3B,IAAT,EAAe;EACnBv5C,IAAAA,MAAM,CAACE,MAAP,CAAc,CAAC,KAAKs0E,MAApB,EAA4B,wEAA5B;;EACA,SAAKC,eAAL,CAAqBpwE,GAArB,CAAyB,IAAIysE,aAAJ,CAAkBE,MAAlB,EAA0Bz3B,IAA1B,CAAzB;EACD;;EACDo8B,EAAAA,iBAAiB,GAAG;EAClB,QAAI91E,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMwuE,KAAK,GAAGzuE,SAAS,CAAC,CAAD,CAAvB;EACA,YAAM+1E,UAAU,GAAG,IAAI3wE,SAAJ,EAAnB;EACA,WAAK0wE,iBAAL,CAAuBrH,KAAvB,EAA8B,KAAKvzB,KAAnC,EAA0C66B,UAA1C;EACA,aAAOA,UAAP;EACD,KALD,MAKO,IAAI/1E,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMwuE,KAAK,GAAGzuE,SAAS,CAAC,CAAD,CAAvB;EAAA,YAA4Bg2E,GAAG,GAAGh2E,SAAS,CAAC,CAAD,CAA3C;EAAA,YAAgD+1E,UAAU,GAAG/1E,SAAS,CAAC,CAAD,CAAtE;EACAG,MAAAA,MAAM,CAACE,MAAP,CAAcouE,KAAK,GAAG,CAAC,CAAvB;;EACA,UAAIuH,GAAG,CAACtH,QAAJ,OAAmBD,KAAvB,EAA8B;EAC5BsH,QAAAA,UAAU,CAACvxE,GAAX,CAAewxE,GAAf;EACA,eAAO,IAAP;EACD;;EACD,WAAK,IAAI54E,CAAC,GAAG44E,GAAG,CAACpE,kBAAJ,GAAyBjtE,QAAzB,EAAb,EAAkDvH,CAAC,CAACmJ,OAAF,EAAlD,GAAiE;EAC/D,cAAM0vE,SAAS,GAAG74E,CAAC,CAACkJ,IAAF,EAAlB;;EACA,YAAI2vE,SAAS,YAAYvE,YAAzB,EAAuC;EACrC,eAAKoE,iBAAL,CAAuBrH,KAAvB,EAA8BwH,SAA9B,EAAyCF,UAAzC;EACD,SAFD,MAEO;EACL51E,UAAAA,MAAM,CAACE,MAAP,CAAc41E,SAAS,YAAYhF,aAAnC;EACA,cAAIxC,KAAK,KAAK,CAAC,CAAf,EACEsH,UAAU,CAACvxE,GAAX,CAAeyxE,SAAf;EAEH;EACF;;EACD,aAAO,IAAP;EACD;EACF;;EACDv7B,EAAAA,KAAK,GAAG;EACN,QAAI16C,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMi1E,YAAY,GAAGl1E,SAAS,CAAC,CAAD,CAA9B;EACA,WAAKu1E,KAAL;EACA,YAAM71C,OAAO,GAAG,IAAIt6B,SAAJ,EAAhB;EACA,UAAI,KAAKV,OAAL,EAAJ,EACE,OAAOg7B,OAAP;EAEF,UAAI,KAAK01C,eAAL,GAAuBrsE,UAAvB,CAAkC,KAAKmyC,KAAL,CAAW81B,SAAX,EAAlC,EAA0DkE,YAA1D,CAAJ,EACE,KAAKD,aAAL,CAAmBC,YAAnB,EAAiC,KAAKh6B,KAAtC,EAA6Cxb,OAA7C;EAEF,aAAOA,OAAP;EACD,KAXD,MAWO,IAAI1/B,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMi1E,YAAY,GAAGl1E,SAAS,CAAC,CAAD,CAA9B;EAAA,YAAmC26C,OAAO,GAAG36C,SAAS,CAAC,CAAD,CAAtD;EACA,WAAKu1E,KAAL;EACA,UAAI,KAAK7wE,OAAL,EAAJ,EACE,OAAO,IAAP;EAEF,UAAI,KAAK0wE,eAAL,GAAuBrsE,UAAvB,CAAkC,KAAKmyC,KAAL,CAAW81B,SAAX,EAAlC,EAA0DkE,YAA1D,CAAJ,EACE,KAAKD,aAAL,CAAmBC,YAAnB,EAAiC,KAAKh6B,KAAtC,EAA6CP,OAA7C;EAEH;EACF;;EACD46B,EAAAA,KAAK,GAAG;EACN,QAAI,KAAKZ,MAAT,EAAiB,OAAO,IAAP;EACjB,SAAKz5B,KAAL,GAAa,KAAK05B,eAAL,CAAqBlwE,OAArB,KAAiC,KAAKy9D,UAAL,CAAgB,CAAhB,CAAjC,GAAsD,KAAK+T,kBAAL,CAAwB,KAAKtB,eAA7B,EAA8C,CAAC,CAA/C,CAAnE;EACA,SAAKA,eAAL,GAAuB,IAAvB;EACA,SAAKD,MAAL,GAAc,IAAd;EACD;;EACDwB,EAAAA,OAAO,GAAG;EACR,SAAKZ,KAAL;EACA,WAAO,KAAKr6B,KAAZ;EACD;;EACDp2C,EAAAA,MAAM,GAAG;EACP,QAAI9E,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMi1E,YAAY,GAAGl1E,SAAS,CAAC,CAAD,CAA9B;EAAA,YAAmC05C,IAAI,GAAG15C,SAAS,CAAC,CAAD,CAAnD;EACA,WAAKu1E,KAAL;EACA,UAAI,KAAKH,eAAL,GAAuBrsE,UAAvB,CAAkC,KAAKmyC,KAAL,CAAW81B,SAAX,EAAlC,EAA0DkE,YAA1D,CAAJ,EACE,OAAO,KAAKpwE,MAAL,CAAYowE,YAAZ,EAA0B,KAAKh6B,KAA/B,EAAsCxB,IAAtC,CAAP;EAEF,aAAO,KAAP;EACD,KAPD,MAOO,IAAI15C,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMi1E,YAAY,GAAGl1E,SAAS,CAAC,CAAD,CAA9B;EAAA,YAAmCy7C,IAAI,GAAGz7C,SAAS,CAAC,CAAD,CAAnD;EAAA,YAAwD05C,IAAI,GAAG15C,SAAS,CAAC,CAAD,CAAxE;EACA,UAAIstE,KAAK,GAAG,KAAKkI,UAAL,CAAgB/5B,IAAhB,EAAsB/B,IAAtB,CAAZ;EACA,UAAI4zB,KAAJ,EAAW,OAAO,IAAP;EACX,UAAI8I,YAAY,GAAG,IAAnB;;EACA,WAAK,IAAIh5E,CAAC,GAAGq+C,IAAI,CAACm2B,kBAAL,GAA0BjtE,QAA1B,EAAb,EAAmDvH,CAAC,CAACmJ,OAAF,EAAnD,GAAkE;EAChE,cAAMurE,cAAc,GAAG10E,CAAC,CAACkJ,IAAF,EAAvB;EACA,YAAI,CAAC,KAAK8uE,eAAL,GAAuBrsE,UAAvB,CAAkC+oE,cAAc,CAACd,SAAf,EAAlC,EAA8DkE,YAA9D,CAAL,EACE;;EAEF,YAAIpD,cAAc,YAAYJ,YAA9B,EAA4C;EAC1CpE,UAAAA,KAAK,GAAG,KAAKxoE,MAAL,CAAYowE,YAAZ,EAA0BpD,cAA1B,EAA0Cp4B,IAA1C,CAAR;;EACA,cAAI4zB,KAAJ,EAAW;EACT8I,YAAAA,YAAY,GAAGtE,cAAf;EACA;EACD;EACF;EACF;;EACD,UAAIsE,YAAY,KAAK,IAArB,EACE,IAAIA,YAAY,CAACxE,kBAAb,GAAkCltE,OAAlC,EAAJ,EACE+2C,IAAI,CAACm2B,kBAAL,GAA0B9sE,MAA1B,CAAiCsxE,YAAjC;EAGJ,aAAO9I,KAAP;EACD;EACF;;EACD4I,EAAAA,kBAAkB,CAACG,kBAAD,EAAqB5H,KAArB,EAA4B;EAC5CtuE,IAAAA,MAAM,CAACE,MAAP,CAAc,CAACg2E,kBAAkB,CAAC3xE,OAAnB,EAAf;EACA,UAAM4xE,gBAAgB,GAAG,KAAKC,sBAAL,CAA4BF,kBAA5B,EAAgD5H,KAAK,GAAG,CAAxD,CAAzB;EACA,QAAI6H,gBAAgB,CAAC1xE,IAAjB,OAA4B,CAAhC,EACE,OAAO0xE,gBAAgB,CAACrxE,GAAjB,CAAqB,CAArB,CAAP;EAEF,WAAO,KAAKixE,kBAAL,CAAwBI,gBAAxB,EAA0C7H,KAAK,GAAG,CAAlD,CAAP;EACD;;EACDrJ,EAAAA,KAAK,GAAG;EACN,QAAIplE,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,UAAI,KAAKyE,OAAL,EAAJ,EACE,OAAO,CAAP;EAEF,WAAK6wE,KAAL;EACA,aAAO,KAAKnQ,KAAL,CAAW,KAAKlqB,KAAhB,CAAP;EACD,KAND,MAMO,IAAIl7C,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMw7C,IAAI,GAAGz7C,SAAS,CAAC,CAAD,CAAtB;EACA,UAAIw2E,aAAa,GAAG,CAApB;;EACA,WAAK,IAAIp5E,CAAC,GAAGq+C,IAAI,CAACm2B,kBAAL,GAA0BjtE,QAA1B,EAAb,EAAmDvH,CAAC,CAACmJ,OAAF,EAAnD,GAAkE;EAChE,cAAMurE,cAAc,GAAG10E,CAAC,CAACkJ,IAAF,EAAvB;;EACA,YAAIwrE,cAAc,YAAYJ,YAA9B,EAA4C;EAC1C,gBAAM+E,UAAU,GAAG,KAAKrR,KAAL,CAAW0M,cAAX,CAAnB;EACA,cAAI2E,UAAU,GAAGD,aAAjB,EAAgCA,aAAa,GAAGC,UAAhB;EACjC;EACF;;EACD,aAAOD,aAAa,GAAG,CAAvB;EACD;EACF;;EACDD,EAAAA,sBAAsB,CAACpB,eAAD,EAAkBuB,QAAlB,EAA4B;EAChDv2E,IAAAA,MAAM,CAACE,MAAP,CAAc,CAAC80E,eAAe,CAACzwE,OAAhB,EAAf;EACA,UAAM4xE,gBAAgB,GAAG,IAAIlxE,SAAJ,EAAzB;EACAkxE,IAAAA,gBAAgB,CAAC9xE,GAAjB,CAAqB,KAAK29D,UAAL,CAAgBuU,QAAhB,CAArB;EACA,UAAMC,qBAAqB,GAAG,IAAIvxE,SAAJ,CAAc+vE,eAAd,CAA9B;EACArjC,IAAAA,WAAW,CAAChsC,IAAZ,CAAiB6wE,qBAAjB,EAAwC,KAAKC,aAAL,EAAxC;;EACA,SAAK,IAAIx5E,CAAC,GAAGu5E,qBAAqB,CAAChyE,QAAtB,EAAb,EAA+CvH,CAAC,CAACmJ,OAAF,EAA/C,GAA8D;EAC5D,YAAMurE,cAAc,GAAG10E,CAAC,CAACkJ,IAAF,EAAvB;EACA,UAAI,KAAKgvE,QAAL,CAAcgB,gBAAd,EAAgC1E,kBAAhC,GAAqDhtE,IAArD,OAAgE,KAAKywE,eAAL,EAApE,EACEiB,gBAAgB,CAAC9xE,GAAjB,CAAqB,KAAK29D,UAAL,CAAgBuU,QAAhB,CAArB;EAEF,WAAKpB,QAAL,CAAcgB,gBAAd,EAAgCzE,iBAAhC,CAAkDC,cAAlD;EACD;;EACD,WAAOwE,gBAAP;EACD;;EACD5xE,EAAAA,OAAO,GAAG;EACR,QAAI,CAAC,KAAKiwE,MAAV,EAAkB,OAAO,KAAKC,eAAL,CAAqBlwE,OAArB,EAAP;EAClB,WAAO,KAAKw2C,KAAL,CAAWx2C,OAAX,EAAP;EACD;;EACD,MAAIrB,WAAJ,GAAkB;EAChB,WAAO,CAAC1D,YAAD,CAAP;EACD;;EA3QkC;;EA6QrC,SAASk3E,cAAT,GAAwB;;EACxBnC,eAAe,CAACmC,YAAhB,GAA+BA,cAA/B;EACAnC,eAAe,CAACI,qBAAhB,GAAwC,EAAxC;;ECxRe,MAAMgC,YAAN,CAAmB;EAChC3zE,EAAAA,QAAQ,CAAC4zE,KAAD,EAAQC,KAAR,EAAe;;EADS;;ECenB,MAAMC,OAAN,SAAsBvC,eAAtB,CAAsC;EACnDj4E,EAAAA,WAAW,GAAG;EACZ;EACAw6E,IAAAA,OAAO,CAACn3E,YAAR,CAAqBC,KAArB,CAA2B,IAA3B,EAAiCC,SAAjC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,QAAIE,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1Bg3E,MAAAA,OAAO,CAACn3E,YAAR,CAAqBI,IAArB,CAA0B,IAA1B,EAAgC+2E,OAAO,CAACnC,qBAAxC;EACD,KAFD,MAEO,IAAI90E,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAM80E,YAAY,GAAG/0E,SAAS,CAAC,CAAD,CAA9B;EACA00E,MAAAA,eAAe,CAAC50E,YAAhB,CAA6BI,IAA7B,CAAkC,IAAlC,EAAwC60E,YAAxC;EACD;EACF;;EACD,SAAOpgC,OAAP,CAAelyC,CAAf,EAAkB;EAChB,WAAOw0E,OAAO,CAAChzB,GAAR,CAAYxhD,CAAC,CAACuH,OAAF,EAAZ,EAAyBvH,CAAC,CAACqH,OAAF,EAAzB,CAAP;EACD;;EACD,SAAOm6C,GAAP,CAAWtgD,CAAX,EAAcC,CAAd,EAAiB;EACf,WAAO,CAACD,CAAC,GAAGC,CAAL,IAAU,CAAjB;EACD;;EACD,SAAOg4C,QAAP,CAAgBs7B,iBAAhB,EAAmC;EACjC,UAAMC,KAAK,GAAG,IAAIjwE,KAAJ,CAAUgwE,iBAAiB,CAACtyE,IAAlB,EAAV,EAAoCuC,IAApC,CAAyC,IAAzC,CAAd;EACA,QAAIwyD,KAAK,GAAG,CAAZ;;EACA,WAAO,CAACud,iBAAiB,CAACxyE,OAAlB,EAAR,EAAqC;EACnC,YAAM8vE,EAAE,GAAG0C,iBAAiB,CAAC5F,IAAlB,EAAX;EACA6F,MAAAA,KAAK,CAACxd,KAAD,CAAL,GAAe6a,EAAE,CAACC,YAAH,CAAgB,CAAhB,EAAmBrD,OAAnB,EAAf;EACAzX,MAAAA,KAAK;EACN;;EACD,WAAOwd,KAAP;EACD;;EACD,SAAOviC,OAAP,CAAenyC,CAAf,EAAkB;EAChB,WAAOw0E,OAAO,CAAChzB,GAAR,CAAYxhD,CAAC,CAACwH,OAAF,EAAZ,EAAyBxH,CAAC,CAACsH,OAAF,EAAzB,CAAP;EACD;;EACDqtE,EAAAA,wCAAwC,CAACC,cAAD,EAAiBX,QAAjB,EAA2B;EACjEv2E,IAAAA,MAAM,CAACE,MAAP,CAAcg3E,cAAc,CAACp3E,MAAf,GAAwB,CAAtC;EACA,UAAMq2E,gBAAgB,GAAG,IAAIlxE,SAAJ,EAAzB;;EACA,SAAK,IAAIhI,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGi6E,cAAc,CAACp3E,MAAnC,EAA2C7C,CAAC,EAA5C,EACEk5E,gBAAgB,CAAC7xE,MAAjB,CAAwB,KAAK6yE,uCAAL,CAA6CD,cAAc,CAACj6E,CAAD,CAA3D,EAAgEs5E,QAAhE,CAAxB;;EAEF,WAAOJ,gBAAP;EACD;;EACDiB,EAAAA,iBAAiB,GAAG;EAClB,QAAIv3E,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMu3E,WAAW,GAAGx3E,SAAS,CAAC,CAAD,CAA7B;EAAA,YAAkC2f,CAAC,GAAG3f,SAAS,CAAC,CAAD,CAA/C;EACA,aAAO,KAAKu3E,iBAAL,CAAuBC,WAAvB,EAAoCj6E,MAAM,CAACw8C,iBAA3C,EAA8Dp6B,CAA9D,CAAP;EACD,KAHD,MAGO,IAAI3f,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMu3E,WAAW,GAAGx3E,SAAS,CAAC,CAAD,CAA7B;EAAA,YAAkCiyE,WAAW,GAAGjyE,SAAS,CAAC,CAAD,CAAzD;EAAA,YAA8D2f,CAAC,GAAG3f,SAAS,CAAC,CAAD,CAA3E;EACA,UAAIy3E,kBAAkB,GAAGxF,WAAzB;EACA,YAAM6B,IAAI,GAAG,IAAIzC,aAAJ,EAAb;EACAyC,MAAAA,IAAI,CAACtvE,GAAL,CAASgzE,WAAT;EACA,YAAMN,iBAAiB,GAAG,IAAI7F,aAAJ,EAA1B;;EACA,aAAO,CAACyC,IAAI,CAACpvE,OAAL,EAAD,IAAmB+yE,kBAAkB,IAAI,GAAhD,EAAqD;EACnD,cAAMC,OAAO,GAAG5D,IAAI,CAACxC,IAAL,EAAhB;EACA,cAAMqG,YAAY,GAAGD,OAAO,CAAC//B,WAAR,EAArB;EACA,YAAIggC,YAAY,IAAIF,kBAApB,EACE;EAEF,YAAIC,OAAO,CAACxD,QAAR,EAAJ;EACE,cAAIgD,iBAAiB,CAACtyE,IAAlB,KAA2B+a,CAA/B,EAAkC;EAChCu3D,YAAAA,iBAAiB,CAAC1yE,GAAlB,CAAsBkzE,OAAtB;EACD,WAFD,MAEO;EACL,kBAAME,GAAG,GAAGV,iBAAiB,CAACp2B,IAAlB,EAAZ;;EACA,gBAAI82B,GAAG,CAACjgC,WAAJ,KAAoBggC,YAAxB,EAAsC;EACpCT,cAAAA,iBAAiB,CAAC5F,IAAlB;EACA4F,cAAAA,iBAAiB,CAAC1yE,GAAlB,CAAsBkzE,OAAtB;EACD;;EACD,kBAAMG,GAAG,GAAGX,iBAAiB,CAACp2B,IAAlB,EAAZ;EACA22B,YAAAA,kBAAkB,GAAGI,GAAG,CAAClgC,WAAJ,EAArB;EACD;EAXH,eAaE+/B,OAAO,CAAC7D,aAAR,CAAsBC,IAAtB,EAA4B2D,kBAA5B;EAEH;;EACD,aAAOR,OAAO,CAACr7B,QAAR,CAAiBs7B,iBAAjB,CAAP;EACD;EACF;;EACD/U,EAAAA,UAAU,CAACsM,KAAD,EAAQ;EAChB,WAAO,IAAIqJ,WAAJ,CAAgBrJ,KAAhB,CAAP;EACD;;EACD7pE,EAAAA,IAAI,GAAG;EACL,QAAI5E,SAAS,CAACC,MAAV,KAAqB,CAAzB,EACE,OAAO,MAAM2E,IAAN,CAAW1E,IAAX,CAAgB,IAAhB,CAAP,CADF,KAEK,OAAO,MAAM0E,IAAN,CAAW7E,KAAX,CAAiB,IAAjB,EAAuBC,SAAvB,CAAP;EACN;;EACDs7C,EAAAA,MAAM,GAAG;EACP,QAAIt7C,SAAS,CAACC,MAAV,KAAqB,CAArB,IAA2BD,SAAS,CAAC,CAAD,CAAT,YAAwBpD,MAAxB,IAAkCoD,SAAS,CAAC,CAAD,CAAT,YAAwBmI,QAAzF,EAAoG;EAClG,YAAMklE,OAAO,GAAGrtE,SAAS,CAAC,CAAD,CAAzB;EAAA,YAA8B05C,IAAI,GAAG15C,SAAS,CAAC,CAAD,CAA9C;EACA,UAAIqtE,OAAO,CAACxjE,MAAR,EAAJ,EACE,OAAO,IAAP;EAEF,YAAMyxC,MAAN,CAAap7C,IAAb,CAAkB,IAAlB,EAAwBmtE,OAAxB,EAAiC3zB,IAAjC;EACD,KAND,MAMO;EACL,aAAO,MAAM4B,MAAN,CAAav7C,KAAb,CAAmB,IAAnB,EAAyBC,SAAzB,CAAP;EACD;EACF;;EACDo1E,EAAAA,eAAe,GAAG;EAChB,WAAO6B,OAAO,CAACc,YAAf;EACD;;EACDV,EAAAA,cAAc,CAAClC,eAAD,EAAkB6C,UAAlB,EAA8B;EAC1C,UAAMC,aAAa,GAAG57E,IAAI,CAAC6S,KAAL,CAAW7S,IAAI,CAACqV,IAAL,CAAUyjE,eAAe,CAACvwE,IAAhB,KAAyBozE,UAAnC,CAAX,CAAtB;EACA,UAAME,MAAM,GAAG,IAAIhxE,KAAJ,CAAU8wE,UAAV,EAAsB7wE,IAAtB,CAA2B,IAA3B,CAAf;EACA,UAAM/J,CAAC,GAAG+3E,eAAe,CAACxwE,QAAhB,EAAV;;EACA,SAAK,IAAIuY,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG86D,UAApB,EAAgC96D,CAAC,EAAjC,EAAqC;EACnCg7D,MAAAA,MAAM,CAACh7D,CAAD,CAAN,GAAY,IAAI9X,SAAJ,EAAZ;EACA,UAAI+yE,sBAAsB,GAAG,CAA7B;;EACA,aAAO/6E,CAAC,CAACmJ,OAAF,MAAe4xE,sBAAsB,GAAGF,aAA/C,EAA8D;EAC5D,cAAMnG,cAAc,GAAG10E,CAAC,CAACkJ,IAAF,EAAvB;EACA4xE,QAAAA,MAAM,CAACh7D,CAAD,CAAN,CAAU1Y,GAAV,CAAcstE,cAAd;EACAqG,QAAAA,sBAAsB;EACvB;EACF;;EACD,WAAOD,MAAP;EACD;;EACDx9B,EAAAA,KAAK,GAAG;EACN,QAAI16C,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMitE,SAAS,GAAGltE,SAAS,CAAC,CAAD,CAA3B;EACA,aAAO,MAAM06C,KAAN,CAAYx6C,IAAZ,CAAiB,IAAjB,EAAuBgtE,SAAvB,CAAP;EACD,KAHD,MAGO,IAAIltE,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMitE,SAAS,GAAGltE,SAAS,CAAC,CAAD,CAA3B;EAAA,YAAgC26C,OAAO,GAAG36C,SAAS,CAAC,CAAD,CAAnD;EACA,YAAM06C,KAAN,CAAYx6C,IAAZ,CAAiB,IAAjB,EAAuBgtE,SAAvB,EAAkCvyB,OAAlC;EACD;EACF;;EACDi8B,EAAAA,aAAa,GAAG;EACd,WAAOK,OAAO,CAACmB,WAAf;EACD;;EACDd,EAAAA,uCAAuC,CAACnC,eAAD,EAAkBuB,QAAlB,EAA4B;EACjE,WAAO,MAAMH,sBAAN,CAA6Br2E,IAA7B,CAAkC,IAAlC,EAAwCi1E,eAAxC,EAAyDuB,QAAzD,CAAP;EACD;;EACD5xE,EAAAA,MAAM,GAAG;EACP,QAAI9E,SAAS,CAACC,MAAV,KAAqB,CAArB,IAA2BD,SAAS,CAAC,CAAD,CAAT,YAAwBpD,MAAxB,IAAkCoD,SAAS,CAAC,CAAD,CAAT,YAAwBmI,QAAzF,EAAoG;EAClG,YAAMklE,OAAO,GAAGrtE,SAAS,CAAC,CAAD,CAAzB;EAAA,YAA8B05C,IAAI,GAAG15C,SAAS,CAAC,CAAD,CAA9C;EACA,aAAO,MAAM8E,MAAN,CAAa5E,IAAb,CAAkB,IAAlB,EAAwBmtE,OAAxB,EAAiC3zB,IAAjC,CAAP;EACD,KAHD,MAGO;EACL,aAAO,MAAM50C,MAAN,CAAa/E,KAAb,CAAmB,IAAnB,EAAyBC,SAAzB,CAAP;EACD;EACF;;EACDolE,EAAAA,KAAK,GAAG;EACN,QAAIplE,SAAS,CAACC,MAAV,KAAqB,CAAzB,EACE,OAAO,MAAMmlE,KAAN,CAAYllE,IAAZ,CAAiB,IAAjB,CAAP,CADF,KAEK,OAAO,MAAMklE,KAAN,CAAYrlE,KAAZ,CAAkB,IAAlB,EAAwBC,SAAxB,CAAP;EACN;;EACDu2E,EAAAA,sBAAsB,CAACpB,eAAD,EAAkBuB,QAAlB,EAA4B;EAChDv2E,IAAAA,MAAM,CAACE,MAAP,CAAc,CAAC80E,eAAe,CAACzwE,OAAhB,EAAf;EACA,UAAM2zE,YAAY,GAAGh8E,IAAI,CAAC6S,KAAL,CAAW7S,IAAI,CAACqV,IAAL,CAAUyjE,eAAe,CAACvwE,IAAhB,KAAyB,KAAKywE,eAAL,EAAnC,CAAX,CAArB;EACA,UAAMsB,qBAAqB,GAAG,IAAIvxE,SAAJ,CAAc+vE,eAAd,CAA9B;EACArjC,IAAAA,WAAW,CAAChsC,IAAZ,CAAiB6wE,qBAAjB,EAAwCM,OAAO,CAACqB,WAAhD;EACA,UAAMjB,cAAc,GAAG,KAAKA,cAAL,CAAoBV,qBAApB,EAA2Ct6E,IAAI,CAAC6S,KAAL,CAAW7S,IAAI,CAACqV,IAAL,CAAUrV,IAAI,CAAC2G,IAAL,CAAUq1E,YAAV,CAAV,CAAX,CAA3C,CAAvB;EACA,WAAO,KAAKjB,wCAAL,CAA8CC,cAA9C,EAA8DX,QAA9D,CAAP;EACD;;EACD6B,EAAAA,gBAAgB,GAAG;EACjB,QAAIv4E,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,UAAI0G,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAe82E,YAAf,CAAhB,EAA8C;EAC5C,cAAM0B,QAAQ,GAAGx4E,SAAS,CAAC,CAAD,CAA1B;EACA,YAAI,KAAK0E,OAAL,EAAJ,EAAoB,OAAO,IAAP;EACpB,cAAM8vE,EAAE,GAAG,IAAInB,aAAJ,CAAkB,KAAK8C,OAAL,EAAlB,EAAkC,KAAKA,OAAL,EAAlC,EAAkDqC,QAAlD,CAAX;EACA,eAAO,KAAKD,gBAAL,CAAsB/D,EAAtB,CAAP;EACD,OALD,MAKO,IAAIx0E,SAAS,CAAC,CAAD,CAAT,YAAwBqzE,aAA5B,EAA2C;EAChD,cAAMmE,WAAW,GAAGx3E,SAAS,CAAC,CAAD,CAA7B;EACA,YAAIy3E,kBAAkB,GAAGl6E,MAAM,CAACw8C,iBAAhC;EACA,YAAI0+B,OAAO,GAAG,IAAd;EACA,cAAM3E,IAAI,GAAG,IAAIzC,aAAJ,EAAb;EACAyC,QAAAA,IAAI,CAACtvE,GAAL,CAASgzE,WAAT;;EACA,eAAO,CAAC1D,IAAI,CAACpvE,OAAL,EAAD,IAAmB+yE,kBAAkB,GAAG,GAA/C,EAAoD;EAClD,gBAAMC,OAAO,GAAG5D,IAAI,CAACxC,IAAL,EAAhB;EACA,gBAAMqG,YAAY,GAAGD,OAAO,CAAC//B,WAAR,EAArB;EACA,cAAIggC,YAAY,IAAIF,kBAApB,EAAwC;;EACxC,cAAIC,OAAO,CAACxD,QAAR,EAAJ,EAAwB;EACtBuD,YAAAA,kBAAkB,GAAGE,YAArB;EACAc,YAAAA,OAAO,GAAGf,OAAV;EACD,WAHD,MAGO;EACLA,YAAAA,OAAO,CAAC7D,aAAR,CAAsBC,IAAtB,EAA4B2D,kBAA5B;EACD;EACF;;EACD,YAAIgB,OAAO,KAAK,IAAhB,EAAsB,OAAO,IAAP;EACtB,eAAO,CAACA,OAAO,CAAChE,YAAR,CAAqB,CAArB,EAAwBrD,OAAxB,EAAD,EAAoCqH,OAAO,CAAChE,YAAR,CAAqB,CAArB,EAAwBrD,OAAxB,EAApC,CAAP;EACD;EACF,KA1BD,MA0BO,IAAIpxE,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMgwE,IAAI,GAAGjwE,SAAS,CAAC,CAAD,CAAtB;EAAA,YAA2Bw4E,QAAQ,GAAGx4E,SAAS,CAAC,CAAD,CAA/C;EACA,UAAI,KAAK0E,OAAL,MAAkBurE,IAAI,CAACvrE,OAAL,EAAtB,EAAsC,OAAO,IAAP;EACtC,YAAM8vE,EAAE,GAAG,IAAInB,aAAJ,CAAkB,KAAK8C,OAAL,EAAlB,EAAkClG,IAAI,CAACkG,OAAL,EAAlC,EAAkDqC,QAAlD,CAAX;EACA,aAAO,KAAKD,gBAAL,CAAsB/D,EAAtB,CAAP;EACD,KALM,MAKA,IAAIx0E,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMyI,GAAG,GAAG1I,SAAS,CAAC,CAAD,CAArB;EAAA,YAA0B05C,IAAI,GAAG15C,SAAS,CAAC,CAAD,CAA1C;EAAA,YAA+Cw4E,QAAQ,GAAGx4E,SAAS,CAAC,CAAD,CAAnE;EACA,YAAM04E,GAAG,GAAG,IAAIzH,aAAJ,CAAkBvoE,GAAlB,EAAuBgxC,IAAvB,CAAZ;EACA,YAAM86B,EAAE,GAAG,IAAInB,aAAJ,CAAkB,KAAK8C,OAAL,EAAlB,EAAkCuC,GAAlC,EAAuCF,QAAvC,CAAX;EACA,aAAO,KAAKD,gBAAL,CAAsB/D,EAAtB,EAA0B,CAA1B,CAAP;EACD,KALM,MAKA,IAAIx0E,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMyI,GAAG,GAAG1I,SAAS,CAAC,CAAD,CAArB;EAAA,YAA0B05C,IAAI,GAAG15C,SAAS,CAAC,CAAD,CAA1C;EAAA,YAA+Cw4E,QAAQ,GAAGx4E,SAAS,CAAC,CAAD,CAAnE;EAAA,YAAwE2f,CAAC,GAAG3f,SAAS,CAAC,CAAD,CAArF;EACA,YAAM04E,GAAG,GAAG,IAAIzH,aAAJ,CAAkBvoE,GAAlB,EAAuBgxC,IAAvB,CAAZ;EACA,YAAM86B,EAAE,GAAG,IAAInB,aAAJ,CAAkB,KAAK8C,OAAL,EAAlB,EAAkCuC,GAAlC,EAAuCF,QAAvC,CAAX;EACA,aAAO,KAAKjB,iBAAL,CAAuB/C,EAAvB,EAA2B70D,CAA3B,CAAP;EACD;EACF;;EACDg5D,EAAAA,gBAAgB,GAAG;EACjB,QAAI34E,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMu3E,WAAW,GAAGx3E,SAAS,CAAC,CAAD,CAA7B;EAAA,YAAkCiyE,WAAW,GAAGjyE,SAAS,CAAC,CAAD,CAAzD;EACA,UAAI44E,kBAAkB,GAAGr7E,MAAM,CAACw8C,iBAAhC;EACA,YAAM+5B,IAAI,GAAG,IAAIzC,aAAJ,EAAb;EACAyC,MAAAA,IAAI,CAACtvE,GAAL,CAASgzE,WAAT;;EACA,aAAO,CAAC1D,IAAI,CAACpvE,OAAL,EAAR,EAAwB;EACtB,cAAMgzE,OAAO,GAAG5D,IAAI,CAACxC,IAAL,EAAhB;EACA,cAAMqG,YAAY,GAAGD,OAAO,CAAC//B,WAAR,EAArB;EACA,YAAIggC,YAAY,GAAG1F,WAAnB,EAAgC,OAAO,KAAP;EAChC,YAAIyF,OAAO,CAAChF,eAAR,MAA6BT,WAAjC,EAA8C,OAAO,IAAP;;EAC9C,YAAIyF,OAAO,CAACxD,QAAR,EAAJ,EAAwB;EACtB0E,UAAAA,kBAAkB,GAAGjB,YAArB;EACA,cAAIiB,kBAAkB,IAAI3G,WAA1B,EAAuC,OAAO,IAAP;EACxC,SAHD,MAGO;EACLyF,UAAAA,OAAO,CAAC7D,aAAR,CAAsBC,IAAtB,EAA4B8E,kBAA5B;EACD;EACF;;EACD,aAAO,KAAP;EACD,KAlBD,MAkBO,IAAI54E,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMgwE,IAAI,GAAGjwE,SAAS,CAAC,CAAD,CAAtB;EAAA,YAA2Bw4E,QAAQ,GAAGx4E,SAAS,CAAC,CAAD,CAA/C;EAAA,YAAoDiyE,WAAW,GAAGjyE,SAAS,CAAC,CAAD,CAA3E;EACA,YAAMw0E,EAAE,GAAG,IAAInB,aAAJ,CAAkB,KAAK8C,OAAL,EAAlB,EAAkClG,IAAI,CAACkG,OAAL,EAAlC,EAAkDqC,QAAlD,CAAX;EACA,aAAO,KAAKG,gBAAL,CAAsBnE,EAAtB,EAA0BvC,WAA1B,CAAP;EACD;EACF;;EACD,MAAI5uE,WAAJ,GAAkB;EAChB,WAAO,CAAC+sE,YAAD,EAAezwE,YAAf,CAAP;EACD;;EA3NkD;;EA6NrD,MAAMm4E,WAAN,SAA0BpG,YAA1B,CAAuC;EACrCj1E,EAAAA,WAAW,GAAG;EACZ;EACAq7E,IAAAA,WAAW,CAACh4E,YAAZ,CAAyBC,KAAzB,CAA+B,IAA/B,EAAqCC,SAArC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,UAAM2uE,KAAK,GAAGzuE,SAAS,CAAC,CAAD,CAAvB;EACA0xE,IAAAA,YAAY,CAAC5xE,YAAb,CAA0BI,IAA1B,CAA+B,IAA/B,EAAqCuuE,KAArC;EACD;;EACDsD,EAAAA,aAAa,GAAG;EACd,QAAIZ,MAAM,GAAG,IAAb;;EACA,SAAK,IAAI/zE,CAAC,GAAG,KAAKw0E,kBAAL,GAA0BjtE,QAA1B,EAAb,EAAmDvH,CAAC,CAACmJ,OAAF,EAAnD,GAAkE;EAChE,YAAMurE,cAAc,GAAG10E,CAAC,CAACkJ,IAAF,EAAvB;EACA,UAAI6qE,MAAM,KAAK,IAAf,EACEA,MAAM,GAAG,IAAIhpE,QAAJ,CAAa2pE,cAAc,CAACd,SAAf,EAAb,CAAT,CADF,KAGEG,MAAM,CAACpmE,eAAP,CAAuB+mE,cAAc,CAACd,SAAf,EAAvB;EAEH;;EACD,WAAOG,MAAP;EACD;;EApBoC;;EAsBvC8F,OAAO,CAACa,WAAR,GAAsBA,WAAtB;EACAb,OAAO,CAACqB,WAAR,GAAsB,IAAK,MAAM;EAC/B,MAAIj1E,WAAJ,GAAkB;EAChB,WAAO,CAAC3D,UAAD,CAAP;EACD;;EACDgE,EAAAA,OAAO,CAACsmB,EAAD,EAAKC,EAAL,EAAS;EACd,WAAOyqD,eAAe,CAACM,cAAhB,CAA+BiC,OAAO,CAACtiC,OAAR,CAAgB3qB,EAAE,CAACgnD,SAAH,EAAhB,CAA/B,EAAgEiG,OAAO,CAACtiC,OAAR,CAAgB1qB,EAAE,CAAC+mD,SAAH,EAAhB,CAAhE,CAAP;EACD;;EAN8B,CAAX,EAAtB;EAQAiG,OAAO,CAACmB,WAAR,GAAsB,IAAK,MAAM;EAC/B,MAAI/0E,WAAJ,GAAkB;EAChB,WAAO,CAAC3D,UAAD,CAAP;EACD;;EACDgE,EAAAA,OAAO,CAACsmB,EAAD,EAAKC,EAAL,EAAS;EACd,WAAOyqD,eAAe,CAACM,cAAhB,CAA+BiC,OAAO,CAACriC,OAAR,CAAgB5qB,EAAE,CAACgnD,SAAH,EAAhB,CAA/B,EAAgEiG,OAAO,CAACriC,OAAR,CAAgB3qB,EAAE,CAAC+mD,SAAH,EAAhB,CAAhE,CAAP;EACD;;EAN8B,CAAX,EAAtB;EAQAiG,OAAO,CAACc,YAAR,GAAuB,IAAK,MAAM;EAChC,MAAI10E,WAAJ,GAAkB;EAChB,WAAO,CAACwzE,YAAD,CAAP;EACD;;EACD9tE,EAAAA,UAAU,CAAC8vE,OAAD,EAAUC,OAAV,EAAmB;EAC3B,WAAOD,OAAO,CAAC9vE,UAAR,CAAmB+vE,OAAnB,CAAP;EACD;;EAN+B,CAAX,EAAvB;EAQA7B,OAAO,CAACnC,qBAAR,GAAgC,EAAhC;;;;;;;;;;;;;;ECxRA,MAAMiE,aAAa,GAAG,CAAC,OAAD,EAAU,YAAV,EAAwB,YAAxB,EAAsC,iBAAtC,EAAyD,SAAzD,EAAoE,cAApE,CAAtB;EAEA;EACA;EACA;EACA;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EACe,MAAMC,aAAN,CAAoB;EACjCv8E,EAAAA,WAAW,CAACm6B,eAAD,EAAkB;EAC3B,SAAKA,eAAL,GAAuBA,eAAe,IAAI,IAAInI,eAAJ,EAA1C;EACD;EAED;EACF;EACA;EACA;EACA;EACA;EACA;EACA;;;EACEoI,EAAAA,IAAI,CAACoiD,IAAD,EAAO;EACT,QAAI5xE,GAAJ;EACA,QAAI,OAAO4xE,IAAP,KAAgB,QAApB,EACE5xE,GAAG,GAAG6xE,IAAI,CAACtsE,KAAL,CAAWqsE,IAAX,CAAN,CADF,KAEK5xE,GAAG,GAAG4xE,IAAN;EAEL,UAAMvmD,IAAI,GAAGrrB,GAAG,CAACqrB,IAAjB;EAEA,QAAI,CAAC9lB,KAAK,CAAC8lB,IAAD,CAAV,EAAkB,MAAM,IAAIl2B,KAAJ,CAAU,2BAA2B6K,GAAG,CAACqrB,IAAzC,CAAN;EAElB,QAAIqmD,aAAa,CAACz0E,OAAd,CAAsBouB,IAAtB,MAAgC,CAAC,CAArC,EACE,OAAO9lB,KAAK,CAAC8lB,IAAD,CAAL,CAAYxyB,IAAZ,CAAiB,IAAjB,EAAuBmH,GAAG,CAACsc,WAA3B,CAAP,CADF,KAEK,IAAI+O,IAAI,KAAK,oBAAb,EAAmC,OAAO9lB,KAAK,CAAC8lB,IAAD,CAAL,CAAYxyB,IAAZ,CAAiB,IAAjB,EAAuBmH,GAAG,CAACwW,UAA3B,CAAP,CAZ/B;;EAeT,WAAOjR,KAAK,CAAC8lB,IAAD,CAAL,CAAYxyB,IAAZ,CAAiB,IAAjB,EAAuBmH,GAAvB,CAAP;EACD;EAED;EACF;EACA;EACA;EACA;EACA;EACA;EACA;;;EACE0vB,EAAAA,KAAK,CAAC5C,QAAD,EAAW;EACd,UAAMzB,IAAI,GAAGyB,QAAQ,CAAClR,eAAT,EAAb;EAEA,QAAI,CAAC0G,OAAO,CAAC+I,IAAD,CAAZ,EAAoB,MAAM,IAAIl2B,KAAJ,CAAU,2BAAV,CAAN;EAEpB,WAAOmtB,OAAO,CAAC+I,IAAD,CAAP,CAAcxyB,IAAd,CAAmB,IAAnB,EAAyBi0B,QAAzB,CAAP;EACD;;EA7CgC;EAgDnC,MAAMvnB,KAAK,GAAG;EACZ;EACF;EACA;EACA;EACA;EACA;EACA;EACA;EACEusE,EAAAA,OAAO,EAAE,UAAS9xE,GAAT,EAAc;EACrB,UAAM+xE,OAAO,GAAG,EAAhB;;EAEA,SAAK,MAAM9sD,GAAX,IAAkBjlB,GAAlB,EAAuB+xE,OAAO,CAAC9sD,GAAD,CAAP,GAAejlB,GAAG,CAACilB,GAAD,CAAlB;;EAEvB,QAAIjlB,GAAG,CAAC8sB,QAAR,EAAkB;EAChB,YAAMzB,IAAI,GAAGrrB,GAAG,CAAC8sB,QAAJ,CAAazB,IAA1B;EACA,UAAI,CAAC9lB,KAAK,CAAC8lB,IAAD,CAAV,EAAkB,MAAM,IAAIl2B,KAAJ,CAAU,2BAA2B6K,GAAG,CAACqrB,IAAzC,CAAN;EAClB0mD,MAAAA,OAAO,CAACjlD,QAAR,GAAmB,KAAK0C,IAAL,CAAUxvB,GAAG,CAAC8sB,QAAd,CAAnB;EACD;;EAED,QAAI9sB,GAAG,CAACgyE,IAAR,EAAcD,OAAO,CAACC,IAAR,GAAezsE,KAAK,CAACysE,IAAN,CAAWn5E,IAAX,CAAgB,IAAhB,EAAsBmH,GAAG,CAACgyE,IAA1B,CAAf;EAEd,WAAOD,OAAP;EACD,GAvBW;;EAyBZ;EACF;EACA;EACA;EACA;EACA;EACA;EACA;EACEE,EAAAA,iBAAiB,EAAE,UAASjyE,GAAT,EAAc;EAC/B,UAAMkyE,iBAAiB,GAAG,EAA1B;;EAEA,QAAIlyE,GAAG,CAACmyE,QAAR,EAAkB;EAChBD,MAAAA,iBAAiB,CAACC,QAAlB,GAA6B,EAA7B;;EAEA,WAAK,IAAIp8E,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiK,GAAG,CAACmyE,QAAJ,CAAav5E,MAAjC,EAAyC,EAAE7C,CAA3C,EAA8Cm8E,iBAAiB,CAACC,QAAlB,CAA2Bj0E,IAA3B,CAAgC,KAAKsxB,IAAL,CAAUxvB,GAAG,CAACmyE,QAAJ,CAAap8E,CAAb,CAAV,CAAhC;EAC/C;;EAED,QAAIiK,GAAG,CAACgyE,IAAR,EAAcE,iBAAiB,CAACF,IAAlB,GAAyB,KAAKzsE,KAAL,CAAWysE,IAAX,CAAgBn5E,IAAhB,CAAqB,IAArB,EAA2BmH,GAAG,CAACgyE,IAA/B,CAAzB;EAEd,WAAOE,iBAAP;EACD,GA7CW;;EA+CZ;EACF;EACA;EACA;EACA;EACA;EACA;EACA;EACE51D,EAAAA,WAAW,EAAE,UAASte,KAAT,EAAgB;EAC3B,UAAMse,WAAW,GAAG,EAApB;;EACA,SAAK,IAAIvmB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiI,KAAK,CAACpF,MAA1B,EAAkC,EAAE7C,CAApC,EAAuC;EACrC,YAAMq8E,GAAG,GAAGp0E,KAAK,CAACjI,CAAD,CAAjB;EACAumB,MAAAA,WAAW,CAACpe,IAAZ,CAAiB,IAAIzE,UAAJ,CAAe24E,GAAG,CAAC,CAAD,CAAlB,EAAuBA,GAAG,CAAC,CAAD,CAA1B,CAAjB;EACD;;EACD,WAAO91D,WAAP;EACD,GA9DW;;EAgEZ;EACF;EACA;EACA;EACA;EACA;EACA;EACA;EACE01D,EAAAA,IAAI,EAAE,UAASh0E,KAAT,EAAgB;EACpB,WAAO,KAAKuxB,eAAL,CAAqB7R,gBAArB,CAAsC,CAC3C,IAAIjkB,UAAJ,CAAeuE,KAAK,CAAC,CAAD,CAApB,EAAyBA,KAAK,CAAC,CAAD,CAA9B,CAD2C,EAE3C,IAAIvE,UAAJ,CAAeuE,KAAK,CAAC,CAAD,CAApB,EAAyBA,KAAK,CAAC,CAAD,CAA9B,CAF2C,EAG3C,IAAIvE,UAAJ,CAAeuE,KAAK,CAAC,CAAD,CAApB,EAAyBA,KAAK,CAAC,CAAD,CAA9B,CAH2C,EAI3C,IAAIvE,UAAJ,CAAeuE,KAAK,CAAC,CAAD,CAApB,EAAyBA,KAAK,CAAC,CAAD,CAA9B,CAJ2C,EAK3C,IAAIvE,UAAJ,CAAeuE,KAAK,CAAC,CAAD,CAApB,EAAyBA,KAAK,CAAC,CAAD,CAA9B,CAL2C,CAAtC,CAAP;EAOD,GAhFW;;EAkFZ;EACF;EACA;EACA;EACA;EACA;EACA;EACA;EACEoe,EAAAA,KAAK,EAAE,UAASpe,KAAT,EAAgB;EACrB,UAAM2b,UAAU,GAAG,IAAIlgB,UAAJ,CAAe,GAAGuE,KAAlB,CAAnB;EACA,WAAO,KAAKuxB,eAAL,CAAqBrT,WAArB,CAAiCvC,UAAjC,CAAP;EACD,GA7FW;;EA+FZ;EACF;EACA;EACA;EACA;EACA;EACA;EACA;EACE8G,EAAAA,UAAU,EAAE,UAASziB,KAAT,EAAgB;EAC1B,UAAMid,MAAM,GAAG,EAAf;;EACA,SAAK,IAAIllB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiI,KAAK,CAACpF,MAA1B,EAAkC,EAAE7C,CAApC,EAAuCklB,MAAM,CAAC/c,IAAP,CAAYqH,KAAK,CAAC6W,KAAN,CAAYvjB,IAAZ,CAAiB,IAAjB,EAAuBmF,KAAK,CAACjI,CAAD,CAA5B,CAAZ;;EACvC,WAAO,KAAKw5B,eAAL,CAAqB9F,gBAArB,CAAsCxO,MAAtC,CAAP;EACD,GA3GW;;EA6GZ;EACF;EACA;EACA;EACA;EACA;EACA;EACA;EACEF,EAAAA,UAAU,EAAE,UAAS/c,KAAT,EAAgB;EAC1B,UAAMse,WAAW,GAAG/W,KAAK,CAAC+W,WAAN,CAAkBzjB,IAAlB,CAAuB,IAAvB,EAA6BmF,KAA7B,CAApB;EACA,WAAO,KAAKuxB,eAAL,CAAqB/T,gBAArB,CAAsCc,WAAtC,CAAP;EACD,GAxHW;;EA0HZ;EACF;EACA;EACA;EACA;EACA;EACA;EACA;EACE4K,EAAAA,eAAe,EAAE,UAASlpB,KAAT,EAAgB;EAC/B,UAAMmpB,WAAW,GAAG,EAApB;;EACA,SAAK,IAAIpxB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiI,KAAK,CAACpF,MAA1B,EAAkC,EAAE7C,CAApC,EAAuCoxB,WAAW,CAACjpB,IAAZ,CAAiBqH,KAAK,CAACwV,UAAN,CAAiBliB,IAAjB,CAAsB,IAAtB,EAA4BmF,KAAK,CAACjI,CAAD,CAAjC,CAAjB;;EACvC,WAAO,KAAKw5B,eAAL,CAAqBhQ,qBAArB,CAA2C4H,WAA3C,CAAP;EACD,GAtIW;;EAwIZ;EACF;EACA;EACA;EACA;EACA;EACA;EACA;EACE9J,EAAAA,OAAO,EAAE,UAASrf,KAAT,EAAgB;EACvB,UAAM2f,gBAAgB,GAAGpY,KAAK,CAAC+W,WAAN,CAAkBzjB,IAAlB,CAAuB,IAAvB,EAA6BmF,KAAK,CAAC,CAAD,CAAlC,CAAzB;EACA,UAAMwf,KAAK,GAAG,KAAK+R,eAAL,CAAqB7R,gBAArB,CAAsCC,gBAAtC,CAAd;EACA,UAAMF,KAAK,GAAG,EAAd;;EACA,SAAK,IAAI1nB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiI,KAAK,CAACpF,MAA1B,EAAkC,EAAE7C,CAApC,EAAuC;EACrC,YAAM2xC,IAAI,GAAG1pC,KAAK,CAACjI,CAAD,CAAlB;EACA,YAAMumB,WAAW,GAAG/W,KAAK,CAAC+W,WAAN,CAAkBzjB,IAAlB,CAAuB,IAAvB,EAA6B6uC,IAA7B,CAApB;EACA,YAAMiT,UAAU,GAAG,KAAKprB,eAAL,CAAqB7R,gBAArB,CAAsCpB,WAAtC,CAAnB;EACAmB,MAAAA,KAAK,CAACvf,IAAN,CAAWy8C,UAAX;EACD;;EACD,WAAO,KAAKprB,eAAL,CAAqB3Q,aAArB,CAAmCpB,KAAnC,EAA0CC,KAA1C,CAAP;EACD,GA3JW;;EA6JZ;EACF;EACA;EACA;EACA;EACA;EACA;EACA;EACEyG,EAAAA,YAAY,EAAE,UAASlmB,KAAT,EAAgB;EAC5B,UAAMmmB,QAAQ,GAAG,EAAjB;;EACA,SAAK,IAAIpuB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiI,KAAK,CAACpF,MAA1B,EAAkC,EAAE7C,CAApC,EAAuC;EACrC,YAAMsuB,OAAO,GAAGrmB,KAAK,CAACjI,CAAD,CAArB;EACAouB,MAAAA,QAAQ,CAACjmB,IAAT,CAAcqH,KAAK,CAAC8X,OAAN,CAAcxkB,IAAd,CAAmB,IAAnB,EAAyBwrB,OAAzB,CAAd;EACD;;EACD,WAAO,KAAKkL,eAAL,CAAqB/F,kBAArB,CAAwCrF,QAAxC,CAAP;EACD,GA5KW;;EA8KZ;EACF;EACA;EACA;EACA;EACA;EACA;EACA;EACEvE,EAAAA,kBAAkB,EAAE,UAAS5hB,KAAT,EAAgB;EAClC,UAAMwY,UAAU,GAAG,EAAnB;;EACA,SAAK,IAAIzgB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiI,KAAK,CAACpF,MAA1B,EAAkC,EAAE7C,CAApC,EAAuC;EACrC,YAAM+2B,QAAQ,GAAG9uB,KAAK,CAACjI,CAAD,CAAtB;EACAygB,MAAAA,UAAU,CAACtY,IAAX,CAAgB,KAAKsxB,IAAL,CAAU1C,QAAV,CAAhB;EACD;;EACD,WAAO,KAAKyC,eAAL,CAAqB/S,wBAArB,CAA8ChG,UAA9C,CAAP;EACD;EA7LW,CAAd;EAgMA,MAAM8L,OAAO,GAAG;EACd;EACF;EACA;EACA;EACA;EACA;EACA;EACA;EACE3I,EAAAA,UAAU,EAAE,UAASA,UAAT,EAAqB;EAC/B,UAAMrd,CAAC,GAAG,CAACqd,UAAU,CAACjiB,CAAZ,EAAeiiB,UAAU,CAAChiB,CAA1B,CAAV;EACA,QAAIgiB,UAAU,CAACjgB,CAAf,EACE4C,CAAC,CAAC4B,IAAF,CAAOyb,UAAU,CAACjgB,CAAlB;EACF,QAAIigB,UAAU,CAAClf,CAAf,EACE6B,CAAC,CAAC4B,IAAF,CAAOyb,UAAU,CAAClf,CAAlB;EACF,WAAO6B,CAAP;EACD,GAhBa;;EAkBd;EACF;EACA;EACA;EACA;EACA;EACA;EACA;EACE8f,EAAAA,KAAK,EAAE,UAASG,KAAT,EAAgB;EACrB,UAAMve,KAAK,GAAGskB,OAAO,CAAC3I,UAAR,CAAmB9gB,IAAnB,CAAwB,IAAxB,EAA8B0jB,KAAK,CAACld,aAAN,EAA9B,CAAd;EACA,WAAO;EACLgsB,MAAAA,IAAI,EAAE,OADD;EAEL/O,MAAAA,WAAW,EAAEte;EAFR,KAAP;EAID,GAhCa;;EAkCd;EACF;EACA;EACA;EACA;EACA;EACA;EACA;EACEyiB,EAAAA,UAAU,EAAE,UAAS4xD,UAAT,EAAqB;EAC/B,UAAMr0E,KAAK,GAAG,EAAd;;EACA,SAAK,IAAIjI,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGs8E,UAAU,CAACxyD,WAAX,CAAuBjnB,MAA3C,EAAmD,EAAE7C,CAArD,EAAwD;EACtD,YAAMwmB,KAAK,GAAG81D,UAAU,CAACxyD,WAAX,CAAuB9pB,CAAvB,CAAd;EACA,YAAMu8E,OAAO,GAAGhwD,OAAO,CAAClG,KAAR,CAAcvjB,IAAd,CAAmB,IAAnB,EAAyB0jB,KAAzB,CAAhB;EACAve,MAAAA,KAAK,CAACE,IAAN,CAAWo0E,OAAO,CAACh2D,WAAnB;EACD;;EACD,WAAO;EACL+O,MAAAA,IAAI,EAAE,YADD;EAEL/O,MAAAA,WAAW,EAAEte;EAFR,KAAP;EAID,GArDa;;EAuDd;EACF;EACA;EACA;EACA;EACA;EACA;EACA;EACE+c,EAAAA,UAAU,EAAE,UAASw3D,UAAT,EAAqB;EAC/B,UAAMv0E,KAAK,GAAG,EAAd;EACA,UAAMse,WAAW,GAAGi2D,UAAU,CAACp3D,cAAX,EAApB;;EACA,SAAK,IAAIplB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGumB,WAAW,CAAC1jB,MAAhC,EAAwC,EAAE7C,CAA1C,EAA6C;EAC3C,YAAM4jB,UAAU,GAAG2C,WAAW,CAACvmB,CAAD,CAA9B;EACAiI,MAAAA,KAAK,CAACE,IAAN,CAAWokB,OAAO,CAAC3I,UAAR,CAAmB9gB,IAAnB,CAAwB,IAAxB,EAA8B8gB,UAA9B,CAAX;EACD;;EACD,WAAO;EACL0R,MAAAA,IAAI,EAAE,YADD;EAEL/O,MAAAA,WAAW,EAAEte;EAFR,KAAP;EAID,GA1Ea;;EA4Ed;EACF;EACA;EACA;EACA;EACA;EACA;EACA;EACEkpB,EAAAA,eAAe,EAAE,UAASsrD,eAAT,EAA0B;EACzC,UAAMx0E,KAAK,GAAG,EAAd;;EACA,SAAK,IAAIjI,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGy8E,eAAe,CAAC3yD,WAAhB,CAA4BjnB,MAAhD,EAAwD,EAAE7C,CAA1D,EAA6D;EAC3D,YAAMw8E,UAAU,GAAGC,eAAe,CAAC3yD,WAAhB,CAA4B9pB,CAA5B,CAAnB;EACA,YAAMu8E,OAAO,GAAGhwD,OAAO,CAACvH,UAAR,CAAmBliB,IAAnB,CAAwB,IAAxB,EAA8B05E,UAA9B,CAAhB;EACAv0E,MAAAA,KAAK,CAACE,IAAN,CAAWo0E,OAAO,CAACh2D,WAAnB;EACD;;EACD,WAAO;EACL+O,MAAAA,IAAI,EAAE,iBADD;EAEL/O,MAAAA,WAAW,EAAEte;EAFR,KAAP;EAID,GA/Fa;;EAiGd;EACF;EACA;EACA;EACA;EACA;EACA;EACA;EACEqf,EAAAA,OAAO,EAAE,UAASgH,OAAT,EAAkB;EACzB,UAAMrmB,KAAK,GAAG,EAAd;EACA,UAAMy0E,YAAY,GAAGnwD,OAAO,CAACvH,UAAR,CAAmBliB,IAAnB,CAAwB,IAAxB,EAA8BwrB,OAAO,CAAC/G,MAAtC,CAArB;EACAtf,IAAAA,KAAK,CAACE,IAAN,CAAWu0E,YAAY,CAACn2D,WAAxB;;EACA,SAAK,IAAIvmB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsuB,OAAO,CAAC9G,MAAR,CAAe3kB,MAAnC,EAA2C,EAAE7C,CAA7C,EAAgD;EAC9C,YAAM2xC,IAAI,GAAGrjB,OAAO,CAAC9G,MAAR,CAAexnB,CAAf,CAAb;EACA,YAAM28E,WAAW,GAAGpwD,OAAO,CAACvH,UAAR,CAAmBliB,IAAnB,CAAwB,IAAxB,EAA8B6uC,IAA9B,CAApB;EACA1pC,MAAAA,KAAK,CAACE,IAAN,CAAWw0E,WAAW,CAACp2D,WAAvB;EACD;;EACD,WAAO;EACL+O,MAAAA,IAAI,EAAE,SADD;EAEL/O,MAAAA,WAAW,EAAEte;EAFR,KAAP;EAID,GAtHa;;EAwHd;EACF;EACA;EACA;EACA;EACA;EACA;EACA;EACEkmB,EAAAA,YAAY,EAAE,UAASyuD,YAAT,EAAuB;EACnC,UAAM30E,KAAK,GAAG,EAAd;;EACA,SAAK,IAAIjI,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG48E,YAAY,CAAC9yD,WAAb,CAAyBjnB,MAA7C,EAAqD,EAAE7C,CAAvD,EAA0D;EACxD,YAAMsuB,OAAO,GAAGsuD,YAAY,CAAC9yD,WAAb,CAAyB9pB,CAAzB,CAAhB;EACA,YAAMu8E,OAAO,GAAGhwD,OAAO,CAACjF,OAAR,CAAgBxkB,IAAhB,CAAqB,IAArB,EAA2BwrB,OAA3B,CAAhB;EACArmB,MAAAA,KAAK,CAACE,IAAN,CAAWo0E,OAAO,CAACh2D,WAAnB;EACD;;EACD,WAAO;EACL+O,MAAAA,IAAI,EAAE,cADD;EAEL/O,MAAAA,WAAW,EAAEte;EAFR,KAAP;EAID,GA3Ia;;EA6Id;EACF;EACA;EACA;EACA;EACA;EACA;EACA;EACE4hB,EAAAA,kBAAkB,EAAE,UAAS2nB,UAAT,EAAqB;EACvC,UAAMvpC,KAAK,GAAG,EAAd;;EACA,SAAK,IAAIjI,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGwxC,UAAU,CAAC1nB,WAAX,CAAuBjnB,MAA3C,EAAmD,EAAE7C,CAArD,EAAwD;EACtD,YAAM+2B,QAAQ,GAAGya,UAAU,CAAC1nB,WAAX,CAAuB9pB,CAAvB,CAAjB;EACA,YAAMs1B,IAAI,GAAGyB,QAAQ,CAAClR,eAAT,EAAb;EACA5d,MAAAA,KAAK,CAACE,IAAN,CAAWokB,OAAO,CAAC+I,IAAD,CAAP,CAAcxyB,IAAd,CAAmB,IAAnB,EAAyBi0B,QAAzB,CAAX;EACD;;EACD,WAAO;EACLzB,MAAAA,IAAI,EAAE,oBADD;EAEL7U,MAAAA,UAAU,EAAExY;EAFP,KAAP;EAID;EAhKa,CAAhB;;EClQA;EACA;EACA;EAKA;EACA;EACA;;EACe,MAAM40E,aAAN,CAAoB;EACjC;EACF;EACA;EACA;EACA;EACA;EACA;EACA;EACEx9E,EAAAA,WAAW,CAACm6B,eAAD,EAAkB;EAC3B,SAAKE,MAAL,GAAc,IAAIkiD,aAAJ,CAAkBpiD,eAAe,IAAI,IAAInI,eAAJ,EAArC,CAAd;EACD;EAED;EACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;EACEoI,EAAAA,IAAI,CAAC8iD,OAAD,EAAU;EACZ,UAAMxlD,QAAQ,GAAG,KAAK2C,MAAL,CAAYD,IAAZ,CAAiB8iD,OAAjB,CAAjB;EACA,WAAOxlD,QAAP;EACD;;EAzBgC;;ECVnC;EACA;EACA;EAIA;EACA;EACA;EACA;EACA;;EACe,MAAM+lD,aAAN,CAAoB;EACjC;EACF;EACA;EACA;EACA;EACA;EACA;EACA;EACEz9E,EAAAA,WAAW,GAAG;EACZ,SAAKq6B,MAAL,GAAc,IAAIkiD,aAAJ,CAAkB,KAAKpiD,eAAvB,CAAd;EACD;EAED;EACF;EACA;EACA;EACA;EACA;EACA;EACA;;;EACEG,EAAAA,KAAK,CAAC5C,QAAD,EAAW;EACd,WAAO,KAAK2C,MAAL,CAAYC,KAAZ,CAAkB5C,QAAlB,CAAP;EACD;;EAvBgC;;ECXnC;EACA;EACA;EAKA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEe,MAAMgmD,SAAN,CAAgB;EAC7B;EACF;EACA;EACA;EACA;EACA;EACA;EACE19E,EAAAA,WAAW,CAACm6B,eAAD,EAAkB;EAC3B,SAAKE,MAAL,GAAc,IAAIH,SAAJ,CAAcC,eAAe,IAAI,IAAInI,eAAJ,EAAjC,CAAd;EACD;EAED;EACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;EACEoI,EAAAA,IAAI,CAACjE,GAAD,EAAM;EACR,WAAO,KAAKkE,MAAL,CAAYD,IAAZ,CAAiBjE,GAAjB,CAAP;EACD;;EAxB4B;;EChB/B;;EASA,SAASwnD,GAAT,CAAa3xE,CAAb,EAAgB;EACd,SAAO,CAACA,CAAC,CAAC1J,CAAH,EAAM0J,CAAC,CAACzJ,CAAR,CAAP;EACD;;EAEc,MAAMq7E,SAAN,CAAgB;EAC7B;EACF;EACA;EACA;EACA;EACE59E,EAAAA,WAAW,CAACm6B,eAAD,EAAkB0jD,WAAlB,EAA+B;EACxC,SAAK1jD,eAAL,GAAuBA,eAAe,IAAI,IAAInI,eAAJ,EAA1C;EACA,SAAK8rD,EAAL,GAAUD,WAAW,IAAK,OAAOC,EAAP,KAAc,WAAd,IAA6BA,EAAvD;EACD;EAED;EACF;EACA;;;EACEC,EAAAA,MAAM,CAAC/2D,KAAD,EAAQrB,UAAR,EAAoB4F,UAApB,EAAgCtD,OAAhC,EAAyCoD,UAAzC,EAAqDyG,eAArD,EAAsEhD,YAAtE,EAAoFtE,kBAApF,EAAwG;EAC5G,SAAKszD,EAAL,GAAU;EACR//D,MAAAA,IAAI,EAAE;EACJiJ,QAAAA,KADI;EACGrB,QAAAA,UADH;EACe4F,QAAAA,UADf;EAC2BtD,QAAAA,OAD3B;EACoCoD,QAAAA,UADpC;EACgDyG,QAAAA,eADhD;EACiEhD,QAAAA,YADjE;EAC+EtE,QAAAA;EAD/E;EADE,KAAV;EAKD;EAED;EACF;EACA;EACA;EACA;;;EACE4P,EAAAA,IAAI,CAAC1C,QAAD,EAAW;EACb,UAAMomD,EAAE,GAAG,KAAKA,EAAhB;EACA,QAAIpmD,QAAQ,YAAYomD,EAAE,CAAC//D,IAAH,CAAQiJ,KAAhC,EACE,OAAO,KAAKg3D,gBAAL,CAAsBtmD,QAAtB,CAAP,CADF,KAEK,IAAIA,QAAQ,YAAYomD,EAAE,CAAC//D,IAAH,CAAQ4H,UAAhC,EACH,OAAO,KAAKs4D,qBAAL,CAA2BvmD,QAA3B,CAAP,CADG,KAEA,IAAIA,QAAQ,YAAYomD,EAAE,CAAC//D,IAAH,CAAQwN,UAAhC,EACH,OAAO,KAAK2yD,qBAAL,CAA2BxmD,QAA3B,CAAP,CADG,KAEA,IAAIA,QAAQ,YAAYomD,EAAE,CAAC//D,IAAH,CAAQkK,OAAhC,EACH,OAAO,KAAKk2D,kBAAL,CAAwBzmD,QAAxB,CAAP,CADG,KAEA,IAAIA,QAAQ,YAAYomD,EAAE,CAAC//D,IAAH,CAAQsN,UAAhC,EACH,OAAO,KAAK+yD,qBAAL,CAA2B1mD,QAA3B,CAAP,CADG,KAEA,IAAIA,QAAQ,YAAYomD,EAAE,CAAC//D,IAAH,CAAQ+T,eAAhC,EACH,OAAO,KAAKusD,0BAAL,CAAgC3mD,QAAhC,CAAP,CADG,KAEA,IAAIA,QAAQ,YAAYomD,EAAE,CAAC//D,IAAH,CAAQ+Q,YAAhC,EACH,OAAO,KAAKwvD,uBAAL,CAA6B5mD,QAA7B,CAAP,CADG,KAEA,IAAIA,QAAQ,YAAYomD,EAAE,CAAC//D,IAAH,CAAQyM,kBAAhC,EAAoD,OAAO,KAAK+zD,qBAAL,CAA2B7mD,QAA3B,CAAP;EAC1D;;EAEDsmD,EAAAA,gBAAgB,CAAC72D,KAAD,EAAQ;EACtB,UAAMD,WAAW,GAAGC,KAAK,CAACpB,cAAN,EAApB;EACA,WAAO,KAAKoU,eAAL,CAAqBrT,WAArB,CAAiC,IAAIziB,UAAJ,CAAe6iB,WAAW,CAAC,CAAD,CAA1B,EAA+BA,WAAW,CAAC,CAAD,CAA1C,CAAjC,CAAP;EACD;;EAED+2D,EAAAA,qBAAqB,CAACvoB,UAAD,EAAa;EAChC,WAAO,KAAKv7B,eAAL,CAAqB/T,gBAArB,CAAsCsvC,UAAU,CAAC3vC,cAAX,GAA4BwJ,GAA5B,CAAgC,UAASrI,WAAT,EAAsB;EACjG,aAAO,IAAI7iB,UAAJ,CAAe6iB,WAAW,CAAC,CAAD,CAA1B,EAA+BA,WAAW,CAAC,CAAD,CAA1C,CAAP;EACD,KAF4C,CAAtC,CAAP;EAGD;;EAEDg3D,EAAAA,qBAAqB,CAAC34B,UAAD,EAAa;EAChC,WAAO,KAAKprB,eAAL,CAAqB7R,gBAArB,CAAsCi9B,UAAU,CAACx/B,cAAX,GAA4BwJ,GAA5B,CAAgC,UAASrI,WAAT,EAAsB;EACjG,aAAO,IAAI7iB,UAAJ,CAAe6iB,WAAW,CAAC,CAAD,CAA1B,EAA+BA,WAAW,CAAC,CAAD,CAA1C,CAAP;EACD,KAF4C,CAAtC,CAAP;EAGD;;EAEDi3D,EAAAA,kBAAkB,CAAClvD,OAAD,EAAU;EAC1B,UAAMmE,WAAW,GAAGnE,OAAO,CAACuvD,cAAR,EAApB;EACA,QAAIp2D,KAAK,GAAG,IAAZ;EACA,UAAMC,KAAK,GAAG,EAAd;;EACA,SAAK,IAAI1nB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyyB,WAAW,CAAC5vB,MAAhC,EAAwC7C,CAAC,EAAzC,EAA6C;EAC3C,YAAM4kD,UAAU,GAAG,KAAK24B,qBAAL,CAA2B9qD,WAAW,CAACzyB,CAAD,CAAtC,CAAnB;EACA,UAAIA,CAAC,KAAK,CAAV,EACEynB,KAAK,GAAGm9B,UAAR,CADF,KAEKl9B,KAAK,CAACvf,IAAN,CAAWy8C,UAAX;EACN;;EACD,WAAO,KAAKprB,eAAL,CAAqB3Q,aAArB,CAAmCpB,KAAnC,EAA0CC,KAA1C,CAAP;EACD;;EAED+1D,EAAAA,qBAAqB,CAACK,UAAD,EAAa;EAChC,UAAM54D,MAAM,GAAG44D,UAAU,CAAC5oC,SAAX,GAAuBtmB,GAAvB,CAA2B,UAASpI,KAAT,EAAgB;EACxD,aAAO,KAAK62D,gBAAL,CAAsB72D,KAAtB,CAAP;EACD,KAFc,EAEZ,IAFY,CAAf;EAGA,WAAO,KAAKgT,eAAL,CAAqB9F,gBAArB,CAAsCxO,MAAtC,CAAP;EACD;;EAEDw4D,EAAAA,0BAA0B,CAACK,eAAD,EAAkB;EAC1C,UAAM3sD,WAAW,GAAG2sD,eAAe,CAACC,cAAhB,GAAiCpvD,GAAjC,CAAqC,UAASmmC,UAAT,EAAqB;EAC5E,aAAO,KAAKuoB,qBAAL,CAA2BvoB,UAA3B,CAAP;EACD,KAFmB,EAEjB,IAFiB,CAApB;EAGA,WAAO,KAAKv7B,eAAL,CAAqBhQ,qBAArB,CAA2C4H,WAA3C,CAAP;EACD;;EAEDusD,EAAAA,uBAAuB,CAACM,YAAD,EAAe;EACpC,UAAM7vD,QAAQ,GAAG6vD,YAAY,CAAC7oC,WAAb,GAA2BxmB,GAA3B,CAA+B,UAASN,OAAT,EAAkB;EAChE,aAAO,KAAKkvD,kBAAL,CAAwBlvD,OAAxB,CAAP;EACD,KAFgB,EAEd,IAFc,CAAjB;EAGA,WAAO,KAAKkL,eAAL,CAAqB/F,kBAArB,CAAwCrF,QAAxC,CAAP;EACD;;EAEDwvD,EAAAA,qBAAqB,CAACpsC,UAAD,EAAa;EAChC,UAAM/wB,UAAU,GAAG+wB,UAAU,CAAC0sC,aAAX,GAA2BtvD,GAA3B,CAA+B,UAASmI,QAAT,EAAmB;EACnE,aAAO,KAAK0C,IAAL,CAAU1C,QAAV,CAAP;EACD,KAFkB,EAEhB,IAFgB,CAAnB;EAGA,WAAO,KAAKyC,eAAL,CAAqB/S,wBAArB,CAA8ChG,UAA9C,CAAP;EACD;EAED;EACF;EACA;EACA;EACA;EACA;;;EACEkZ,EAAAA,KAAK,CAAC5C,QAAD,EAAW;EACd,QAAIA,QAAQ,CAAClR,eAAT,OAA+B,OAAnC,EACE,OAAO,KAAKs4D,cAAL,CAAoBpnD,QAAQ,CAACztB,aAAT,EAApB,CAAP,CADF,KAEK,IAAIytB,QAAQ,CAAClR,eAAT,OAA+B,YAAnC,EACH,OAAO,KAAKu4D,mBAAL,CAAyBrnD,QAAzB,CAAP,CADG,KAEA,IAAIA,QAAQ,CAAClR,eAAT,OAA+B,YAAnC,EACH,OAAO,KAAKw4D,mBAAL,CAAyBtnD,QAAzB,CAAP,CADG,KAEA,IAAIA,QAAQ,CAAClR,eAAT,OAA+B,SAAnC,EACH,OAAO,KAAKy4D,gBAAL,CAAsBvnD,QAAtB,CAAP,CADG,KAEA,IAAIA,QAAQ,CAAClR,eAAT,OAA+B,YAAnC,EACH,OAAO,KAAK04D,mBAAL,CAAyBxnD,QAAzB,CAAP,CADG,KAEA,IAAIA,QAAQ,CAAClR,eAAT,OAA+B,iBAAnC,EACH,OAAO,KAAK24D,wBAAL,CAA8BznD,QAA9B,CAAP,CADG,KAEA,IAAIA,QAAQ,CAAClR,eAAT,OAA+B,cAAnC,EACH,OAAO,KAAK44D,qBAAL,CAA2B1nD,QAA3B,CAAP,CADG,KAEA,IAAIA,QAAQ,CAAClR,eAAT,OAA+B,oBAAnC,EAAyD,OAAO,KAAK64D,mBAAL,CAAyB3nD,QAAzB,CAAP;EAC/D;;EAEDonD,EAAAA,cAAc,CAACv6D,UAAD,EAAa;EACzB,WAAO,IAAI,KAAKu5D,EAAL,CAAQ//D,IAAR,CAAaiJ,KAAjB,CAAuB,CAACzC,UAAU,CAACjiB,CAAZ,EAAeiiB,UAAU,CAAChiB,CAA1B,CAAvB,CAAP;EACD;;EAEDw8E,EAAAA,mBAAmB,CAACrpB,UAAD,EAAa;EAC9B,UAAM7vC,MAAM,GAAG6vC,UAAU,CAAC9vC,OAAX,CAAmBqB,YAAnB,CAAgCsI,GAAhC,CAAoCouD,GAApC,CAAf;;EACA,WAAO,IAAI,KAAKG,EAAL,CAAQ//D,IAAR,CAAa4H,UAAjB,CAA4BE,MAA5B,CAAP;EACD;;EAEDm5D,EAAAA,mBAAmB,CAACz5B,UAAD,EAAa;EAC9B,UAAM1/B,MAAM,GAAG0/B,UAAU,CAAC3/B,OAAX,CAAmBqB,YAAnB,CAAgCsI,GAAhC,CAAoCouD,GAApC,CAAf;;EACA,WAAO,IAAI,KAAKG,EAAL,CAAQ//D,IAAR,CAAawN,UAAjB,CAA4B1F,MAA5B,CAAP;EACD;;EAEDo5D,EAAAA,gBAAgB,CAAChwD,OAAD,EAAU;EACxB,UAAM7E,KAAK,GAAG,CAAC6E,OAAO,CAAC/G,MAAR,CAAetC,OAAf,CAAuBqB,YAAvB,CAAoCsI,GAApC,CAAwCouD,GAAxC,CAAD,CAAd;;EACA,SAAK,IAAIh9E,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsuB,OAAO,CAAC9G,MAAR,CAAe3kB,MAAnC,EAA2C7C,CAAC,EAA5C,EAAgDypB,KAAK,CAACthB,IAAN,CAAWmmB,OAAO,CAAC9G,MAAR,CAAexnB,CAAf,EAAkBilB,OAAlB,CAA0BqB,YAA1B,CAAuCsI,GAAvC,CAA2CouD,GAA3C,CAAX;;EAEhD,WAAO,IAAI,KAAKG,EAAL,CAAQ//D,IAAR,CAAakK,OAAjB,CAAyBmC,KAAzB,CAAP;EACD;;EAED80D,EAAAA,mBAAmB,CAACT,UAAD,EAAa;EAC9B,WAAO,IAAI,KAAKX,EAAL,CAAQ//D,IAAR,CAAasN,UAAjB,CAA4BozD,UAAU,CAAC14D,cAAX,GAA4BwJ,GAA5B,CAAgCouD,GAAhC,CAA5B,CAAP;EACD;;EAEDwB,EAAAA,wBAAwB,CAACT,eAAD,EAAkB;EACxC,UAAM3sD,WAAW,GAAG,EAApB;;EACA,SAAK,IAAIpxB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG+9E,eAAe,CAACj0D,WAAhB,CAA4BjnB,MAAhD,EAAwD7C,CAAC,EAAzD,EAA6DoxB,WAAW,CAACjpB,IAAZ,CAAiB,KAAKi2E,mBAAL,CAAyBL,eAAe,CAACj0D,WAAhB,CAA4B9pB,CAA5B,CAAzB,EAAyDolB,cAAzD,EAAjB;;EAE7D,WAAO,IAAI,KAAK+3D,EAAL,CAAQ//D,IAAR,CAAa+T,eAAjB,CAAiCC,WAAjC,CAAP;EACD;;EAEDqtD,EAAAA,qBAAqB,CAACR,YAAD,EAAe;EAClC,UAAM7vD,QAAQ,GAAG,EAAjB;;EACA,SAAK,IAAIpuB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGi+E,YAAY,CAACn0D,WAAb,CAAyBjnB,MAA7C,EAAqD7C,CAAC,EAAtD,EAA0DouB,QAAQ,CAACjmB,IAAT,CAAc,KAAKm2E,gBAAL,CAAsBL,YAAY,CAACn0D,WAAb,CAAyB9pB,CAAzB,CAAtB,EAAmDolB,cAAnD,EAAd;;EAE1D,WAAO,IAAI,KAAK+3D,EAAL,CAAQ//D,IAAR,CAAa+Q,YAAjB,CAA8BC,QAA9B,CAAP;EACD;;EAEDswD,EAAAA,mBAAmB,CAACC,kBAAD,EAAqB;EACtC,UAAMl+D,UAAU,GAAG,EAAnB;;EACA,SAAK,IAAIzgB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG2+E,kBAAkB,CAAC70D,WAAnB,CAA+BjnB,MAAnD,EAA2D7C,CAAC,EAA5D,EAAgE;EAC9D,YAAM+2B,QAAQ,GAAG4nD,kBAAkB,CAAC70D,WAAnB,CAA+B9pB,CAA/B,CAAjB;EACAygB,MAAAA,UAAU,CAACtY,IAAX,CAAgB,KAAKwxB,KAAL,CAAW5C,QAAX,CAAhB;EACD;;EACD,WAAO,IAAI,KAAKomD,EAAL,CAAQ//D,IAAR,CAAayM,kBAAjB,CAAoCpJ,UAApC,CAAP;EACD;;EA9K4B;;;;;;;;;;;ECZhB,MAAMm+D,sBAAN,CAA6B;EAC1C,SAAOC,YAAP,CAAoBl9D,EAApB,EAAwB7iB,EAAxB,EAA4B;EAC1B,QAAI6iB,EAAE,GAAG7iB,EAAT,EAAa,OAAO,CAAC,CAAR;EACb,QAAI6iB,EAAE,GAAG7iB,EAAT,EAAa,OAAO,CAAP;EACb,WAAO,CAAP;EACD;;EACD,SAAOwH,OAAP,CAAew4E,MAAf,EAAuBh4D,EAAvB,EAA2Bvb,EAA3B,EAA+B;EAC7B,QAAIub,EAAE,CAACviB,QAAH,CAAYgH,EAAZ,CAAJ,EAAqB,OAAO,CAAP;EACrB,UAAMwzE,KAAK,GAAGH,sBAAsB,CAACC,YAAvB,CAAoC/3D,EAAE,CAACnlB,CAAvC,EAA0C4J,EAAE,CAAC5J,CAA7C,CAAd;EACA,UAAMq9E,KAAK,GAAGJ,sBAAsB,CAACC,YAAvB,CAAoC/3D,EAAE,CAACllB,CAAvC,EAA0C2J,EAAE,CAAC3J,CAA7C,CAAd;;EACA,YAAQk9E,MAAR;EACA,WAAK,CAAL;EACE,eAAOF,sBAAsB,CAACK,YAAvB,CAAoCF,KAApC,EAA2CC,KAA3C,CAAP;;EACF,WAAK,CAAL;EACE,eAAOJ,sBAAsB,CAACK,YAAvB,CAAoCD,KAApC,EAA2CD,KAA3C,CAAP;;EACF,WAAK,CAAL;EACE,eAAOH,sBAAsB,CAACK,YAAvB,CAAoCD,KAApC,EAA2C,CAACD,KAA5C,CAAP;;EACF,WAAK,CAAL;EACE,eAAOH,sBAAsB,CAACK,YAAvB,CAAoC,CAACF,KAArC,EAA4CC,KAA5C,CAAP;;EACF,WAAK,CAAL;EACE,eAAOJ,sBAAsB,CAACK,YAAvB,CAAoC,CAACF,KAArC,EAA4C,CAACC,KAA7C,CAAP;;EACF,WAAK,CAAL;EACE,eAAOJ,sBAAsB,CAACK,YAAvB,CAAoC,CAACD,KAArC,EAA4C,CAACD,KAA7C,CAAP;;EACF,WAAK,CAAL;EACE,eAAOH,sBAAsB,CAACK,YAAvB,CAAoC,CAACD,KAArC,EAA4CD,KAA5C,CAAP;;EACF,WAAK,CAAL;EACE,eAAOH,sBAAsB,CAACK,YAAvB,CAAoCF,KAApC,EAA2C,CAACC,KAA5C,CAAP;EAhBF;;EAkBAj8E,IAAAA,MAAM,CAACC,oBAAP,CAA4B,sBAA5B;EACA,WAAO,CAAP;EACD;;EACD,SAAOi8E,YAAP,CAAoBC,YAApB,EAAkCC,YAAlC,EAAgD;EAC9C,QAAID,YAAY,GAAG,CAAnB,EAAsB,OAAO,CAAC,CAAR;EACtB,QAAIA,YAAY,GAAG,CAAnB,EAAsB,OAAO,CAAP;EACtB,QAAIC,YAAY,GAAG,CAAnB,EAAsB,OAAO,CAAC,CAAR;EACtB,QAAIA,YAAY,GAAG,CAAnB,EAAsB,OAAO,CAAP;EACtB,WAAO,CAAP;EACD;;EArCyC;;ECE7B,MAAMC,WAAN,CAAkB;EAC/B//E,EAAAA,WAAW,GAAG;EACZ+/E,IAAAA,WAAW,CAAC18E,YAAZ,CAAyBC,KAAzB,CAA+B,IAA/B,EAAqCC,SAArC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK28E,UAAL,GAAkB,IAAlB;EACA,SAAKj6E,KAAL,GAAa,IAAb;EACA,SAAKu1B,YAAL,GAAoB,IAApB;EACA,SAAK2kD,cAAL,GAAsB,IAAtB;EACA,SAAKC,WAAL,GAAmB,IAAnB;EACA,UAAMC,SAAS,GAAG58E,SAAS,CAAC,CAAD,CAA3B;EAAA,UAAgCwC,KAAK,GAAGxC,SAAS,CAAC,CAAD,CAAjD;EAAA,UAAsD+3B,YAAY,GAAG/3B,SAAS,CAAC,CAAD,CAA9E;EAAA,UAAmF68E,aAAa,GAAG78E,SAAS,CAAC,CAAD,CAA5G;EACA,SAAKy8E,UAAL,GAAkBG,SAAlB;EACA,SAAKp6E,KAAL,GAAa,IAAI1B,UAAJ,CAAe0B,KAAf,CAAb;EACA,SAAKu1B,YAAL,GAAoBA,YAApB;EACA,SAAK2kD,cAAL,GAAsBG,aAAtB;EACA,SAAKF,WAAL,GAAmB,CAACn6E,KAAK,CAACb,QAAN,CAAei7E,SAAS,CAACl2E,aAAV,CAAwBqxB,YAAxB,CAAf,CAApB;EACD;;EACDrxB,EAAAA,aAAa,GAAG;EACd,WAAO,KAAKlE,KAAZ;EACD;;EACDw3D,EAAAA,KAAK,CAACv/B,GAAD,EAAM;EACTA,IAAAA,GAAG,CAACu/B,KAAJ,CAAU,KAAKx3D,KAAf;EACAi4B,IAAAA,GAAG,CAACu/B,KAAJ,CAAU,cAAc,KAAKjiC,YAA7B;EACD;;EACD31B,EAAAA,SAAS,CAACiF,GAAD,EAAM;EACb,UAAMzF,KAAK,GAAGyF,GAAd;EACA,QAAI,KAAK0wB,YAAL,GAAoBn2B,KAAK,CAACm2B,YAA9B,EAA4C,OAAO,CAAC,CAAR;EAC5C,QAAI,KAAKA,YAAL,GAAoBn2B,KAAK,CAACm2B,YAA9B,EAA4C,OAAO,CAAP;EAC5C,QAAI,KAAKv1B,KAAL,CAAWb,QAAX,CAAoBC,KAAK,CAACY,KAA1B,CAAJ,EAAsC,OAAO,CAAP;EACtC,QAAI,CAAC,KAAKm6E,WAAV,EAAuB,OAAO,CAAC,CAAR;EACvB,QAAI,CAAC/6E,KAAK,CAAC+6E,WAAX,EAAwB,OAAO,CAAP;EACxB,WAAOX,sBAAsB,CAACt4E,OAAvB,CAA+B,KAAKg5E,cAApC,EAAoD,KAAKl6E,KAAzD,EAAgEZ,KAAK,CAACY,KAAtE,CAAP;EACD;;EACD41B,EAAAA,UAAU,CAAC6hC,eAAD,EAAkB;EAC1B,QAAI,KAAKliC,YAAL,KAAsB,CAAtB,IAA2B,CAAC,KAAK4kD,WAArC,EAAkD,OAAO,IAAP;EAClD,QAAI,KAAK5kD,YAAL,KAAsBkiC,eAA1B,EAA2C,OAAO,IAAP;EAC3C,WAAO,KAAP;EACD;;EACDn9D,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAKi7B,YAAL,GAAoB,GAApB,GAA0B,KAAKv1B,KAAL,CAAW1F,QAAX,EAAjC;EACD;;EACDggF,EAAAA,UAAU,GAAG;EACX,WAAO,KAAKH,WAAZ;EACD;;EACD,MAAIt5E,WAAJ,GAAkB;EAChB,WAAO,CAAC7D,UAAD,CAAP;EACD;;EA9C8B;;ECQlB,MAAMu9E,eAAN,CAAsB;EACnCtgF,EAAAA,WAAW,GAAG;EACZsgF,IAAAA,eAAe,CAACj9E,YAAhB,CAA6BC,KAA7B,CAAmC,IAAnC,EAAyCC,SAAzC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK07D,QAAL,GAAgB,IAAIb,OAAJ,EAAhB;EACA,SAAK2H,KAAL,GAAa,IAAb;EACA,UAAMnL,IAAI,GAAGn3D,SAAS,CAAC,CAAD,CAAtB;EACA,SAAKsiE,KAAL,GAAanL,IAAb;EACD;;EACD6lB,EAAAA,mBAAmB,GAAG;EACpB,UAAMn0D,SAAS,GAAG,IAAIriB,cAAJ,EAAlB;EACA,SAAKy/C,YAAL;EACA,UAAM15B,EAAE,GAAG,KAAK5nB,QAAL,EAAX;EACA,QAAIi3D,MAAM,GAAGrvC,EAAE,CAACjmB,IAAH,EAAb;;EACA,WAAOimB,EAAE,CAAChmB,OAAH,EAAP,EAAqB;EACnB,YAAMk1D,EAAE,GAAGlvC,EAAE,CAACjmB,IAAH,EAAX;EACA,WAAK22E,kBAAL,CAAwBrhB,MAAxB,EAAgCH,EAAhC,EAAoC5yC,SAApC;EACA+yC,MAAAA,MAAM,GAAGH,EAAT;EACD;;EACD,WAAO5yC,SAAS,CAAC/hB,iBAAV,EAAP;EACD;;EACDo2E,EAAAA,iBAAiB,GAAG;EAClB,UAAMC,sBAAsB,GAAG,IAAI/3E,SAAJ,EAA/B;EACA,SAAKg4E,8BAAL,CAAoCD,sBAApC;EACA,SAAKE,iCAAL,CAAuCF,sBAAvC;;EACA,SAAK,IAAI5wD,EAAE,GAAG4wD,sBAAsB,CAACx4E,QAAvB,EAAd,EAAiD4nB,EAAE,CAAChmB,OAAH,EAAjD,GAAiE;EAC/D,YAAM+2E,WAAW,GAAG/wD,EAAE,CAACjmB,IAAH,GAAU4F,QAAV,EAApB;EACA,WAAK1H,GAAL,CAAS,KAAK89D,KAAL,CAAW57D,aAAX,CAAyB42E,WAAzB,CAAT,EAAgDA,WAAhD;EACD;EACF;;EACDC,EAAAA,kBAAkB,CAACxhB,GAAD,EAAMC,GAAN,EAAW;EAC3B,QAAIpyC,IAAI,GAAGoyC,GAAG,CAACjkC,YAAJ,GAAmBgkC,GAAG,CAAChkC,YAAvB,GAAsC,CAAjD;EACA,QAAInO,IAAI,KAAK,CAAb,EAAgB,OAAO,CAAC,IAAI9oB,UAAJ,CAAei7D,GAAG,CAACv5D,KAAnB,CAAD,EAA4B,IAAI1B,UAAJ,CAAek7D,GAAG,CAACx5D,KAAnB,CAA5B,CAAP;;EAChB,UAAMy5D,cAAc,GAAG,KAAKqG,KAAL,CAAW57D,aAAX,CAAyBs1D,GAAG,CAACjkC,YAA7B,CAAvB;;EACA,UAAMmkC,SAAS,GAAGF,GAAG,CAAC8gB,UAAJ,MAAoB,CAAC9gB,GAAG,CAACx5D,KAAJ,CAAUb,QAAV,CAAmBs6D,cAAnB,CAAvC;EACA,QAAI,CAACC,SAAL,EACEtyC,IAAI;EAEN,UAAM3iB,GAAG,GAAG,IAAIC,KAAJ,CAAU0iB,IAAV,EAAgBziB,IAAhB,CAAqB,IAArB,CAAZ;EACA,QAAIquC,GAAG,GAAG,CAAV;EACAvuC,IAAAA,GAAG,CAACuuC,GAAG,EAAJ,CAAH,GAAa,IAAI10C,UAAJ,CAAei7D,GAAG,CAACv5D,KAAnB,CAAb;;EACA,SAAK,IAAIpF,CAAC,GAAG2+D,GAAG,CAAChkC,YAAJ,GAAmB,CAAhC,EAAmC36B,CAAC,IAAI4+D,GAAG,CAACjkC,YAA5C,EAA0D36B,CAAC,EAA3D,EACE6J,GAAG,CAACuuC,GAAG,EAAJ,CAAH,GAAa,KAAK8sB,KAAL,CAAW57D,aAAX,CAAyBtJ,CAAzB,CAAb;;EAEF,QAAI8+D,SAAJ,EAAej1D,GAAG,CAACuuC,GAAD,CAAH,GAAW,IAAI10C,UAAJ,CAAek7D,GAAG,CAACx5D,KAAnB,CAAX;EACf,WAAOyE,GAAP;EACD;;EACD+yD,EAAAA,KAAK,CAACv/B,GAAD,EAAM;EACTA,IAAAA,GAAG,CAACC,OAAJ,CAAY,gBAAZ;;EACA,SAAK,IAAInO,EAAE,GAAG,KAAK5nB,QAAL,EAAd,EAA+B4nB,EAAE,CAAChmB,OAAH,EAA/B,GAA+C;EAC7C,YAAMk1D,EAAE,GAAGlvC,EAAE,CAACjmB,IAAH,EAAX;EACAm1D,MAAAA,EAAE,CAACzB,KAAH,CAASv/B,GAAT;EACD;EACF;;EACD4iD,EAAAA,iCAAiC,CAACF,sBAAD,EAAyB;EACxD,SAAK,IAAI//E,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKklE,KAAL,CAAW19D,IAAX,KAAoB,CAAxC,EAA2CxH,CAAC,EAA5C,EAAgD;EAC9C,YAAM8mB,EAAE,GAAG,KAAKo+C,KAAL,CAAW57D,aAAX,CAAyBtJ,CAAzB,CAAX;;EACA,YAAMuL,EAAE,GAAG,KAAK25D,KAAL,CAAW57D,aAAX,CAAyBtJ,CAAC,GAAG,CAA7B,CAAX;;EACA,YAAMwL,EAAE,GAAG,KAAK05D,KAAL,CAAW57D,aAAX,CAAyBtJ,CAAC,GAAG,CAA7B,CAAX;;EACA,UAAI8mB,EAAE,CAACviB,QAAH,CAAYiH,EAAZ,CAAJ,EACEu0E,sBAAsB,CAAC34E,GAAvB,CAA2ByH,OAAO,CAACG,OAAR,CAAgBhP,CAAC,GAAG,CAApB,CAA3B;EAEH;EACF;;EACD6/E,EAAAA,kBAAkB,CAAClhB,GAAD,EAAMC,GAAN,EAAWnzC,SAAX,EAAsB;EACtC,UAAM5hB,GAAG,GAAG,KAAKs2E,kBAAL,CAAwBxhB,GAAxB,EAA6BC,GAA7B,CAAZ;EACAnzC,IAAAA,SAAS,CAACrkB,GAAV,CAAcyC,GAAd,EAAmB,KAAnB;EACD;;EACDtC,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAK62D,QAAL,CAAcr1D,MAAd,GAAuBxB,QAAvB,EAAP;EACD;;EACD+2D,EAAAA,aAAa,CAACC,QAAD,EAAW;EACtB,SAAK1V,YAAL;EACA,SAAKi3B,iBAAL;EACA,UAAM3wD,EAAE,GAAG,KAAK5nB,QAAL,EAAX;EACA,QAAIi3D,MAAM,GAAGrvC,EAAE,CAACjmB,IAAH,EAAb;;EACA,WAAOimB,EAAE,CAAChmB,OAAH,EAAP,EAAqB;EACnB,YAAMk1D,EAAE,GAAGlvC,EAAE,CAACjmB,IAAH,EAAX;EACA,YAAMu1D,OAAO,GAAG,KAAKC,eAAL,CAAqBF,MAArB,EAA6BH,EAA7B,CAAhB;EACAE,MAAAA,QAAQ,CAACn3D,GAAT,CAAaq3D,OAAb;EACAD,MAAAA,MAAM,GAAGH,EAAT;EACD;EACF;;EACD+hB,EAAAA,iBAAiB,CAACzhB,GAAD,EAAMC,GAAN,EAAWyhB,oBAAX,EAAiC;EAChD,QAAI,CAAC1hB,GAAG,CAACv5D,KAAJ,CAAUb,QAAV,CAAmBq6D,GAAG,CAACx5D,KAAvB,CAAL,EAAoC,OAAO,KAAP;EACpC,QAAIk7E,kBAAkB,GAAG1hB,GAAG,CAACjkC,YAAJ,GAAmBgkC,GAAG,CAAChkC,YAAhD;EACA,QAAI,CAACikC,GAAG,CAAC8gB,UAAJ,EAAL,EACEY,kBAAkB;;EAEpB,QAAIA,kBAAkB,KAAK,CAA3B,EAA8B;EAC5BD,MAAAA,oBAAoB,CAAC,CAAD,CAApB,GAA0B1hB,GAAG,CAAChkC,YAAJ,GAAmB,CAA7C;EACA,aAAO,IAAP;EACD;;EACD,WAAO,KAAP;EACD;;EACDqlD,EAAAA,8BAA8B,CAACD,sBAAD,EAAyB;EACrD,UAAMM,oBAAoB,GAAG,IAAIv2E,KAAJ,CAAU,CAAV,EAAaC,IAAb,CAAkB,IAAlB,CAA7B;EACA,UAAMolB,EAAE,GAAG,KAAK5nB,QAAL,EAAX;EACA,QAAIi3D,MAAM,GAAGrvC,EAAE,CAACjmB,IAAH,EAAb;;EACA,WAAOimB,EAAE,CAAChmB,OAAH,EAAP,EAAqB;EACnB,YAAMk1D,EAAE,GAAGlvC,EAAE,CAACjmB,IAAH,EAAX;EACA,YAAM45D,WAAW,GAAG,KAAKsd,iBAAL,CAAuB5hB,MAAvB,EAA+BH,EAA/B,EAAmCgiB,oBAAnC,CAApB;EACA,UAAIvd,WAAJ,EAAiBid,sBAAsB,CAAC34E,GAAvB,CAA2ByH,OAAO,CAACG,OAAR,CAAgBqxE,oBAAoB,CAAC,CAAD,CAApC,CAA3B;EACjB7hB,MAAAA,MAAM,GAAGH,EAAT;EACD;EACF;;EACD2F,EAAAA,OAAO,GAAG;EACR,WAAO,KAAKkB,KAAZ;EACD;;EACDrc,EAAAA,YAAY,GAAG;EACb,UAAMuP,WAAW,GAAG,KAAK8M,KAAL,CAAW19D,IAAX,KAAoB,CAAxC;EACA,SAAKJ,GAAL,CAAS,KAAK89D,KAAL,CAAW57D,aAAX,CAAyB,CAAzB,CAAT,EAAsC,CAAtC;EACA,SAAKlC,GAAL,CAAS,KAAK89D,KAAL,CAAW57D,aAAX,CAAyB8uD,WAAzB,CAAT,EAAgDA,WAAhD;EACD;;EACDsG,EAAAA,eAAe,CAACC,GAAD,EAAMC,GAAN,EAAW;EACxB,UAAM/0D,GAAG,GAAG,KAAKs2E,kBAAL,CAAwBxhB,GAAxB,EAA6BC,GAA7B,CAAZ;EACA,WAAO,IAAI2hB,kBAAJ,CAAuB12E,GAAvB,EAA4B,KAAKq7D,KAAL,CAAWgI,OAAX,EAA5B,CAAP;EACD;;EACD9lE,EAAAA,GAAG,CAAC01B,KAAD,EAAQnC,YAAR,EAAsB;EACvB,UAAMqkC,KAAK,GAAG,IAAIogB,WAAJ,CAAgB,KAAKla,KAArB,EAA4BpoC,KAA5B,EAAmCnC,YAAnC,EAAiD,KAAKuqC,KAAL,CAAWsb,gBAAX,CAA4B7lD,YAA5B,CAAjD,CAAd;;EACA,UAAM0jC,EAAE,GAAG,KAAKD,QAAL,CAAcv2D,GAAd,CAAkBm3D,KAAlB,CAAX;;EACA,QAAIX,EAAE,KAAK,IAAX,EAAiB;EACft7D,MAAAA,MAAM,CAACE,MAAP,CAAco7D,EAAE,CAACj5D,KAAH,CAASb,QAAT,CAAkBu4B,KAAlB,CAAd,EAAwC,8CAAxC;EACA,aAAOuhC,EAAP;EACD;;EACD,SAAKD,QAAL,CAAc3vC,GAAd,CAAkBuwC,KAAlB,EAAyBA,KAAzB;;EACA,WAAOA,KAAP;EACD;;EACDyhB,EAAAA,0BAA0B,CAACC,UAAD,EAAa;EACrC,UAAMC,OAAO,GAAG,KAAKzb,KAAL,CAAW9/C,cAAX,EAAhB;;EACA,UAAMw7D,MAAM,GAAGF,UAAU,CAAC74E,GAAX,CAAe,CAAf,CAAf;EACA,UAAMg5E,GAAG,GAAGD,MAAM,CAACt3E,aAAP,CAAqB,CAArB,CAAZ;EACA,QAAI,CAACu3E,GAAG,CAACt8E,QAAJ,CAAao8E,OAAO,CAAC,CAAD,CAApB,CAAL,EAA+B,MAAM,IAAIn+E,gBAAJ,CAAqB,mCAAmCq+E,GAAxD,CAAN;EAC/B,UAAMC,MAAM,GAAGJ,UAAU,CAAC74E,GAAX,CAAe64E,UAAU,CAACl5E,IAAX,KAAoB,CAAnC,CAAf;EACA,UAAMu5E,SAAS,GAAGD,MAAM,CAAC17D,cAAP,EAAlB;EACA,UAAM47D,GAAG,GAAGD,SAAS,CAACA,SAAS,CAACl+E,MAAV,GAAmB,CAApB,CAArB;EACA,QAAI,CAACm+E,GAAG,CAACz8E,QAAJ,CAAao8E,OAAO,CAACA,OAAO,CAAC99E,MAAR,GAAiB,CAAlB,CAApB,CAAL,EAAgD,MAAM,IAAIL,gBAAJ,CAAqB,iCAAiCw+E,GAAtD,CAAN;EACjD;;EA1IkC;;ECTtB,MAAMC,MAAN,CAAa;EAC1B,SAAOnC,MAAP,GAAgB;EACd,QAAI,OAAOl8E,SAAS,CAAC,CAAD,CAAhB,KAAwB,QAAxB,IAAoC,OAAOA,SAAS,CAAC,CAAD,CAAhB,KAAwB,QAAhE,EAA0E;EACxE,YAAM6C,EAAE,GAAG7C,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyB8C,EAAE,GAAG9C,SAAS,CAAC,CAAD,CAAvC;EACA,UAAI6C,EAAE,KAAK,GAAP,IAAcC,EAAE,KAAK,GAAzB,EAA8B,MAAM,IAAI/F,wBAAJ,CAA6B,2CAA2C8F,EAA3C,GAAgD,IAAhD,GAAuDC,EAAvD,GAA4D,IAAzF,CAAN;EAC9B,YAAMw7E,GAAG,GAAGjiF,IAAI,CAACC,GAAL,CAASuG,EAAT,CAAZ;EACA,YAAM07E,GAAG,GAAGliF,IAAI,CAACC,GAAL,CAASwG,EAAT,CAAZ;EACA,UAAID,EAAE,IAAI,CAAV;EACE,YAAIC,EAAE,IAAI,CAAV;EACE,cAAIw7E,GAAG,IAAIC,GAAX,EAAgB,OAAO,CAAP,CAAhB,KAA+B,OAAO,CAAP;EADjC,eAGA,IAAID,GAAG,IAAIC,GAAX,EAAgB,OAAO,CAAP,CAAhB,KAA+B,OAAO,CAAP;EAJjC,aAOA,IAAIz7E,EAAE,IAAI,CAAV;EACE,YAAIw7E,GAAG,IAAIC,GAAX,EAAgB,OAAO,CAAP,CAAhB,KAA+B,OAAO,CAAP;EADjC,aAGA,IAAID,GAAG,IAAIC,GAAX,EAAgB,OAAO,CAAP,CAAhB,KAA+B,OAAO,CAAP;EAGhC,KAlBD,MAkBO,IAAIv+E,SAAS,CAAC,CAAD,CAAT,YAAwBc,UAAxB,IAAsCd,SAAS,CAAC,CAAD,CAAT,YAAwBc,UAAlE,EAA8E;EACnF,YAAMojB,EAAE,GAAGlkB,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyB2I,EAAE,GAAG3I,SAAS,CAAC,CAAD,CAAvC;EACA,YAAM6C,EAAE,GAAG8F,EAAE,CAAC5J,CAAH,GAAOmlB,EAAE,CAACnlB,CAArB;EACA,YAAM+D,EAAE,GAAG6F,EAAE,CAAC3J,CAAH,GAAOklB,EAAE,CAACllB,CAArB;EACA,UAAI6D,EAAE,KAAK,GAAP,IAAcC,EAAE,KAAK,GAAzB,EAA8B,MAAM,IAAI/F,wBAAJ,CAA6B,wDAAwDmnB,EAArF,CAAN;EAC9B,aAAOm6D,MAAM,CAACnC,MAAP,CAAcr5E,EAAd,EAAkBC,EAAlB,CAAP;EACD;EACF;;EA3ByB;;ECFb,MAAM07E,aAAN,CAAoB;EACjCh8D,EAAAA,cAAc,GAAG;;EACjB5d,EAAAA,IAAI,GAAG;;EACP8B,EAAAA,aAAa,CAACtJ,CAAD,EAAI;;EACjB2jB,EAAAA,QAAQ,GAAG;;EACX09D,EAAAA,OAAO,CAACvU,IAAD,EAAO;;EACdI,EAAAA,OAAO,GAAG;;EANuB;;ECCpB,MAAMoU,oBAAN,CAA2B;EACxCpe,EAAAA,eAAe,CAACpmC,KAAD,EAAQnC,YAAR,EAAsB;;EACrC,MAAI10B,WAAJ,GAAkB;EAChB,WAAO,CAACm7E,aAAD,CAAP;EACD;;EAJuC;;ECM3B,MAAMb,kBAAN,CAAyB;EACtClhF,EAAAA,WAAW,GAAG;EACZkhF,IAAAA,kBAAkB,CAAC79E,YAAnB,CAAgCC,KAAhC,CAAsC,IAAtC,EAA4CC,SAA5C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK6+E,SAAL,GAAiB,IAAI5B,eAAJ,CAAoB,IAApB,CAAjB;EACA,SAAK1qC,IAAL,GAAY,IAAZ;EACA,SAAKiqB,KAAL,GAAa,IAAb;EACA,UAAMr1D,GAAG,GAAGjH,SAAS,CAAC,CAAD,CAArB;EAAA,UAA0BkqE,IAAI,GAAGlqE,SAAS,CAAC,CAAD,CAA1C;EACA,SAAKqyC,IAAL,GAAYprC,GAAZ;EACA,SAAKq1D,KAAL,GAAa4N,IAAb;EACD;;EACD,SAAO0U,kBAAP,GAA4B;EAC1B,QAAI5+E,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAM4+E,UAAU,GAAG7+E,SAAS,CAAC,CAAD,CAA5B;EACA,YAAM8+E,cAAc,GAAG,IAAI15E,SAAJ,EAAvB;EACAu4E,MAAAA,kBAAkB,CAACiB,kBAAnB,CAAsCC,UAAtC,EAAkDC,cAAlD;EACA,aAAOA,cAAP;EACD,KALD,MAKO,IAAI9+E,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAM4+E,UAAU,GAAG7+E,SAAS,CAAC,CAAD,CAA5B;EAAA,YAAiC8+E,cAAc,GAAG9+E,SAAS,CAAC,CAAD,CAA3D;;EACA,WAAK,IAAI5C,CAAC,GAAGyhF,UAAU,CAACl6E,QAAX,EAAb,EAAoCvH,CAAC,CAACmJ,OAAF,EAApC,GAAmD;EACjD,cAAMw4E,EAAE,GAAG3hF,CAAC,CAACkJ,IAAF,EAAX;EACAy4E,QAAAA,EAAE,CAACC,WAAH,GAAiBtjB,aAAjB,CAA+BojB,cAA/B;EACD;EACF;EACF;;EACDt8D,EAAAA,cAAc,GAAG;EACf,WAAO,KAAK6vB,IAAZ;EACD;;EACDztC,EAAAA,IAAI,GAAG;EACL,WAAO,KAAKytC,IAAL,CAAUpyC,MAAjB;EACD;;EACDyG,EAAAA,aAAa,CAACtJ,CAAD,EAAI;EACf,WAAO,KAAKi1C,IAAL,CAAUj1C,CAAV,CAAP;EACD;;EACD2jB,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAKsxB,IAAL,CAAU,CAAV,EAAa9xC,MAAb,CAAoB,KAAK8xC,IAAL,CAAU,KAAKA,IAAL,CAAUpyC,MAAV,GAAmB,CAA7B,CAApB,CAAP;EACD;;EACD29E,EAAAA,gBAAgB,CAACl4E,KAAD,EAAQ;EACtB,QAAIA,KAAK,KAAK,KAAK2sC,IAAL,CAAUpyC,MAAV,GAAmB,CAAjC,EAAoC,OAAO,CAAC,CAAR;EACpC,WAAO,KAAKg/E,UAAL,CAAgB,KAAKv4E,aAAL,CAAmBhB,KAAnB,CAAhB,EAA2C,KAAKgB,aAAL,CAAmBhB,KAAK,GAAG,CAA3B,CAA3C,CAAP;EACD;;EACD+4E,EAAAA,OAAO,CAACvU,IAAD,EAAO;EACZ,SAAK5N,KAAL,GAAa4N,IAAb;EACD;;EACD+U,EAAAA,UAAU,CAAC/6D,EAAD,EAAKvb,EAAL,EAAS;EACjB,QAAIub,EAAE,CAACviB,QAAH,CAAYgH,EAAZ,CAAJ,EAAqB,OAAO,CAAP;EACrB,WAAO01E,MAAM,CAACnC,MAAP,CAAch4D,EAAd,EAAkBvb,EAAlB,CAAP;EACD;;EACD2hE,EAAAA,OAAO,GAAG;EACR,WAAO,KAAKhO,KAAZ;EACD;;EACDgE,EAAAA,eAAe,GAAG;EAChB,QAAItgE,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMi6B,KAAK,GAAGl6B,SAAS,CAAC,CAAD,CAAvB;EAAA,YAA4B+3B,YAAY,GAAG/3B,SAAS,CAAC,CAAD,CAApD;EACA,WAAKk/E,mBAAL,CAAyBhlD,KAAzB,EAAgCnC,YAAhC;EACD,KAHD,MAGO,IAAI/3B,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAM67B,EAAE,GAAG97B,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyB+3B,YAAY,GAAG/3B,SAAS,CAAC,CAAD,CAAjD;EAAA,YAAgFg4B,QAAQ,GAAGh4B,SAAS,CAAC,CAAD;EACpG,YAAMk6B,KAAK,GAAG,IAAIp5B,UAAJ,CAAeg7B,EAAE,CAAC3C,eAAH,CAAmBnB,QAAnB,CAAf,CAAd;EACA,WAAKsoC,eAAL,CAAqBpmC,KAArB,EAA4BnC,YAA5B;EACD;EACF;;EACDj7B,EAAAA,QAAQ,GAAG;EACT,WAAOk6B,SAAS,CAACC,YAAV,CAAuB,IAAIrM,uBAAJ,CAA4B,KAAKynB,IAAjC,CAAvB,CAAP;EACD;;EACD2sC,EAAAA,WAAW,GAAG;EACZ,WAAO,KAAKL,SAAZ;EACD;;EACDO,EAAAA,mBAAmB,CAAChlD,KAAD,EAAQnC,YAAR,EAAsB;EACvC,QAAIwoC,sBAAsB,GAAGxoC,YAA7B;EACA,UAAMyoC,YAAY,GAAGD,sBAAsB,GAAG,CAA9C;;EACA,QAAIC,YAAY,GAAG,KAAKnuB,IAAL,CAAUpyC,MAA7B,EAAqC;EACnC,YAAMwgE,MAAM,GAAG,KAAKpuB,IAAL,CAAUmuB,YAAV,CAAf;EACA,UAAItmC,KAAK,CAACv4B,QAAN,CAAe8+D,MAAf,CAAJ,EACEF,sBAAsB,GAAGC,YAAzB;EAEH;;EACD,UAAM/E,EAAE,GAAG,KAAKkjB,SAAL,CAAen6E,GAAf,CAAmB01B,KAAnB,EAA0BqmC,sBAA1B,CAAX;;EACA,WAAO9E,EAAP;EACD;;EACDrF,EAAAA,gBAAgB,CAACt6B,EAAD,EAAK/D,YAAL,EAAmBshC,SAAnB,EAA8B;EAC5C,SAAK,IAAIj8D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG0+B,EAAE,CAACpD,kBAAH,EAApB,EAA6Ct7B,CAAC,EAA9C,EACE,KAAKkjE,eAAL,CAAqBxkC,EAArB,EAAyB/D,YAAzB,EAAuCshC,SAAvC,EAAkDj8D,CAAlD;EAEH;;EACD,MAAIiG,WAAJ,GAAkB;EAChB,WAAO,CAACq7E,oBAAD,CAAP;EACD;;EAvFqC;;ECNzB,MAAMS,0BAAN,CAAiC;EAC9C1iF,EAAAA,WAAW,GAAG;EACZ0iF,IAAAA,0BAA0B,CAACr/E,YAA3B,CAAwCC,KAAxC,CAA8C,IAA9C,EAAoDC,SAApD;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKs/E,YAAL,GAAoB,IAAI/jD,WAAJ,EAApB;EACA,SAAKgkD,YAAL,GAAoB,IAAIhkD,WAAJ,EAApB;EACD;;EACDikD,EAAAA,OAAO,GAAG;EACR,QAAIt/E,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B,CAA5B,MAEO,IAAID,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMy3D,GAAG,GAAG13D,SAAS,CAAC,CAAD,CAArB;EAAA,YAA0Bu9D,MAAM,GAAGv9D,SAAS,CAAC,CAAD,CAA5C;EAAA,YAAiDu/E,GAAG,GAAGv/E,SAAS,CAAC,CAAD,CAAhE;EAAA,YAAqEw/E,MAAM,GAAGx/E,SAAS,CAAC,CAAD,CAAvF;EACA03D,MAAAA,GAAG,CAAC+nB,cAAJ,CAAmBliB,MAAnB,EAA2B,KAAK6hB,YAAhC;EACAG,MAAAA,GAAG,CAACE,cAAJ,CAAmBD,MAAnB,EAA2B,KAAKH,YAAhC;EACA,WAAKC,OAAL,CAAa,KAAKF,YAAlB,EAAgC,KAAKC,YAArC;EACD;EACF;;EAjB6C;;ECAjC,MAAM7sB,eAAN,CAAoB;EACjC/1D,EAAAA,WAAW,GAAG;EACZ+1D,IAAAA,eAAa,CAAC1yD,YAAd,CAA2BC,KAA3B,CAAiC,IAAjC,EAAuCC,SAAvC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKuyC,IAAL,GAAY,IAAZ;EACA,SAAKqtC,MAAL,GAAc,IAAd;EACA,SAAKC,IAAL,GAAY,IAAZ;EACA,SAAKrgB,IAAL,GAAY,IAAZ;EACA,SAAKsgB,QAAL,GAAgB,IAAhB;EACA,SAAKC,GAAL,GAAW,IAAX;EACA,UAAM54E,GAAG,GAAGjH,SAAS,CAAC,CAAD,CAArB;EAAA,UAA0ByH,KAAK,GAAGzH,SAAS,CAAC,CAAD,CAA3C;EAAA,UAAgD0H,GAAG,GAAG1H,SAAS,CAAC,CAAD,CAA/D;EAAA,UAAoE8/E,OAAO,GAAG9/E,SAAS,CAAC,CAAD,CAAvF;EACA,SAAKqyC,IAAL,GAAYprC,GAAZ;EACA,SAAKy4E,MAAL,GAAcj4E,KAAd;EACA,SAAKk4E,IAAL,GAAYj4E,GAAZ;EACA,SAAKk4E,QAAL,GAAgBE,OAAhB;EACD;;EACDL,EAAAA,cAAc,CAAC/5E,KAAD,EAAQ41B,EAAR,EAAY;EACxBA,IAAAA,EAAE,CAACpX,EAAH,GAAQ,KAAKmuB,IAAL,CAAU3sC,KAAV,CAAR;EACA41B,IAAAA,EAAE,CAAC3yB,EAAH,GAAQ,KAAK0pC,IAAL,CAAU3sC,KAAK,GAAG,CAAlB,CAAR;EACD;;EACDq6E,EAAAA,aAAa,CAAC7S,SAAD,EAAY7P,MAAZ,EAAoBC,IAApB,EAA0B0iB,GAA1B,EAA+B;EAC1C,UAAM97D,EAAE,GAAG,KAAKmuB,IAAL,CAAUgrB,MAAV,CAAX;EACA,UAAM10D,EAAE,GAAG,KAAK0pC,IAAL,CAAUirB,IAAV,CAAX;;EACA,QAAIA,IAAI,GAAGD,MAAP,KAAkB,CAAtB,EAAyB;EACvB2iB,MAAAA,GAAG,CAACC,MAAJ,CAAW,IAAX,EAAiB5iB,MAAjB;EACA,aAAO,IAAP;EACD;;EACD,QAAI,CAAC6P,SAAS,CAACnkE,UAAV,CAAqBmb,EAArB,EAAyBvb,EAAzB,CAAL,EAAmC,OAAO,IAAP;EACnC,UAAM+X,GAAG,GAAGrkB,IAAI,CAAC6S,KAAL,CAAW,CAACmuD,MAAM,GAAGC,IAAV,IAAkB,CAA7B,CAAZ;EACA,QAAID,MAAM,GAAG38C,GAAb,EACE,KAAKq/D,aAAL,CAAmB7S,SAAnB,EAA8B7P,MAA9B,EAAsC38C,GAAtC,EAA2Cs/D,GAA3C;EAEF,QAAIt/D,GAAG,GAAG48C,IAAV,EACE,KAAKyiB,aAAL,CAAmB7S,SAAnB,EAA8BxsD,GAA9B,EAAmC48C,IAAnC,EAAyC0iB,GAAzC;EAEH;;EACDx9D,EAAAA,cAAc,GAAG;EACf,UAAMhgB,KAAK,GAAG,IAAI0E,KAAJ,CAAU,KAAKy4E,IAAL,GAAY,KAAKD,MAAjB,GAA0B,CAApC,EAAuCv4E,IAAvC,CAA4C,IAA5C,CAAd;EACA,QAAIzB,KAAK,GAAG,CAAZ;;EACA,SAAK,IAAItI,CAAC,GAAG,KAAKsiF,MAAlB,EAA0BtiF,CAAC,IAAI,KAAKuiF,IAApC,EAA0CviF,CAAC,EAA3C,EACEoF,KAAK,CAACkD,KAAK,EAAN,CAAL,GAAiB,KAAK2sC,IAAL,CAAUj1C,CAAV,CAAjB;;EAEF,WAAOoF,KAAP;EACD;;EACD09E,EAAAA,eAAe,GAAG;EAChB,QAAIlgF,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAM2yD,EAAE,GAAG5yD,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyBmgF,GAAG,GAAGngF,SAAS,CAAC,CAAD,CAAxC;EACA,WAAKkgF,eAAL,CAAqB,KAAKR,MAA1B,EAAkC,KAAKC,IAAvC,EAA6C/sB,EAA7C,EAAiDA,EAAE,CAAC8sB,MAApD,EAA4D9sB,EAAE,CAAC+sB,IAA/D,EAAqEQ,GAArE;EACD,KAHD,MAGO,IAAIngF,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMo9D,MAAM,GAAGr9D,SAAS,CAAC,CAAD,CAAxB;EAAA,YAA6Bs9D,IAAI,GAAGt9D,SAAS,CAAC,CAAD,CAA7C;EAAA,YAAkD4yD,EAAE,GAAG5yD,SAAS,CAAC,CAAD,CAAhE;EAAA,YAAqEu9D,MAAM,GAAGv9D,SAAS,CAAC,CAAD,CAAvF;EAAA,YAA4Fw9D,IAAI,GAAGx9D,SAAS,CAAC,CAAD,CAA5G;EAAA,YAAiHmgF,GAAG,GAAGngF,SAAS,CAAC,CAAD,CAAhI;;EACA,UAAIs9D,IAAI,GAAGD,MAAP,KAAkB,CAAlB,IAAuBG,IAAI,GAAGD,MAAP,KAAkB,CAA7C,EAAgD;EAC9C4iB,QAAAA,GAAG,CAACb,OAAJ,CAAY,IAAZ,EAAkBjiB,MAAlB,EAA0BzK,EAA1B,EAA8B2K,MAA9B;EACA,eAAO,IAAP;EACD;;EACD,UAAI,CAAC,KAAKE,QAAL,CAAcJ,MAAd,EAAsBC,IAAtB,EAA4B1K,EAA5B,EAAgC2K,MAAhC,EAAwCC,IAAxC,CAAL,EAAoD,OAAO,IAAP;EACpD,YAAME,IAAI,GAAGrhE,IAAI,CAAC6S,KAAL,CAAW,CAACmuD,MAAM,GAAGC,IAAV,IAAkB,CAA7B,CAAb;EACA,YAAMhjB,IAAI,GAAGj+C,IAAI,CAAC6S,KAAL,CAAW,CAACquD,MAAM,GAAGC,IAAV,IAAkB,CAA7B,CAAb;;EACA,UAAIH,MAAM,GAAGK,IAAb,EAAmB;EACjB,YAAIH,MAAM,GAAGjjB,IAAb,EAAmB,KAAK4lC,eAAL,CAAqB7iB,MAArB,EAA6BK,IAA7B,EAAmC9K,EAAnC,EAAuC2K,MAAvC,EAA+CjjB,IAA/C,EAAqD6lC,GAArD;EACnB,YAAI7lC,IAAI,GAAGkjB,IAAX,EAAiB,KAAK0iB,eAAL,CAAqB7iB,MAArB,EAA6BK,IAA7B,EAAmC9K,EAAnC,EAAuCtY,IAAvC,EAA6CkjB,IAA7C,EAAmD2iB,GAAnD;EAClB;;EACD,UAAIziB,IAAI,GAAGJ,IAAX,EAAiB;EACf,YAAIC,MAAM,GAAGjjB,IAAb,EAAmB,KAAK4lC,eAAL,CAAqBxiB,IAArB,EAA2BJ,IAA3B,EAAiC1K,EAAjC,EAAqC2K,MAArC,EAA6CjjB,IAA7C,EAAmD6lC,GAAnD;EACnB,YAAI7lC,IAAI,GAAGkjB,IAAX,EAAiB,KAAK0iB,eAAL,CAAqBxiB,IAArB,EAA2BJ,IAA3B,EAAiC1K,EAAjC,EAAqCtY,IAArC,EAA2CkjB,IAA3C,EAAiD2iB,GAAjD;EAClB;EACF;EACF;;EACDC,EAAAA,KAAK,CAACC,EAAD,EAAK;EACR,SAAKR,GAAL,GAAWQ,EAAX;EACD;;EACDJ,EAAAA,MAAM,CAAC/S,SAAD,EAAY8S,GAAZ,EAAiB;EACrB,SAAKD,aAAL,CAAmB7S,SAAnB,EAA8B,KAAKwS,MAAnC,EAA2C,KAAKC,IAAhD,EAAsDK,GAAtD;EACD;;EACD/jE,EAAAA,WAAW,GAAG;EACZ,QAAI,KAAKqjD,IAAL,KAAc,IAAlB,EAAwB;EACtB,YAAMp7C,EAAE,GAAG,KAAKmuB,IAAL,CAAU,KAAKqtC,MAAf,CAAX;EACA,YAAM/2E,EAAE,GAAG,KAAK0pC,IAAL,CAAU,KAAKstC,IAAf,CAAX;EACA,WAAKrgB,IAAL,GAAY,IAAIn3D,QAAJ,CAAa+b,EAAb,EAAiBvb,EAAjB,CAAZ;EACD;;EACD,WAAO,KAAK22D,IAAZ;EACD;;EACD7B,EAAAA,QAAQ,CAACJ,MAAD,EAASC,IAAT,EAAe1K,EAAf,EAAmB2K,MAAnB,EAA2BC,IAA3B,EAAiC;EACvC,WAAOr1D,QAAQ,CAACY,UAAT,CAAoB,KAAKspC,IAAL,CAAUgrB,MAAV,CAApB,EAAuC,KAAKhrB,IAAL,CAAUirB,IAAV,CAAvC,EAAwD1K,EAAE,CAACvgB,IAAH,CAAQkrB,MAAR,CAAxD,EAAyE3K,EAAE,CAACvgB,IAAH,CAAQmrB,IAAR,CAAzE,CAAP;EACD;;EACD8iB,EAAAA,WAAW,GAAG;EACZ,WAAO,KAAKX,IAAZ;EACD;;EACDY,EAAAA,aAAa,GAAG;EACd,WAAO,KAAKb,MAAZ;EACD;;EACDc,EAAAA,UAAU,GAAG;EACX,WAAO,KAAKZ,QAAZ;EACD;;EACDa,EAAAA,KAAK,GAAG;EACN,WAAO,KAAKZ,GAAZ;EACD;;EAhGgC;;ECEpB,MAAMa,oBAAN,CAA2B;EACxC,SAAO5jB,YAAP,CAAoB71D,GAApB,EAAyBQ,KAAzB,EAAgC;EAC9B,QAAIk5E,SAAS,GAAGl5E,KAAhB;;EACA,WAAOk5E,SAAS,GAAG15E,GAAG,CAAChH,MAAJ,GAAa,CAAzB,IAA8BgH,GAAG,CAAC05E,SAAD,CAAH,CAAeh/E,QAAf,CAAwBsF,GAAG,CAAC05E,SAAS,GAAG,CAAb,CAA3B,CAArC,EACEA,SAAS;;EAEX,QAAIA,SAAS,IAAI15E,GAAG,CAAChH,MAAJ,GAAa,CAA9B,EACE,OAAOgH,GAAG,CAAChH,MAAJ,GAAa,CAApB;EAEF,UAAM88D,SAAS,GAAGpQ,QAAQ,CAACa,QAAT,CAAkBvmD,GAAG,CAAC05E,SAAD,CAArB,EAAkC15E,GAAG,CAAC05E,SAAS,GAAG,CAAb,CAArC,CAAlB;EACA,QAAIv5E,IAAI,GAAGK,KAAK,GAAG,CAAnB;;EACA,WAAOL,IAAI,GAAGH,GAAG,CAAChH,MAAlB,EAA0B;EACxB,UAAI,CAACgH,GAAG,CAACG,IAAI,GAAG,CAAR,CAAH,CAAczF,QAAd,CAAuBsF,GAAG,CAACG,IAAD,CAA1B,CAAL,EAAwC;EACtC,cAAMylD,IAAI,GAAGF,QAAQ,CAACa,QAAT,CAAkBvmD,GAAG,CAACG,IAAI,GAAG,CAAR,CAArB,EAAiCH,GAAG,CAACG,IAAD,CAApC,CAAb;EACA,YAAIylD,IAAI,KAAKkQ,SAAb,EAAwB;EACzB;;EACD31D,MAAAA,IAAI;EACL;;EACD,WAAOA,IAAI,GAAG,CAAd;EACD;;EACD,SAAOw5E,SAAP,GAAmB;EACjB,QAAI5gF,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMgH,GAAG,GAAGjH,SAAS,CAAC,CAAD,CAArB;EACA,aAAO0gF,oBAAoB,CAACE,SAArB,CAA+B35E,GAA/B,EAAoC,IAApC,CAAP;EACD,KAHD,MAGO,IAAIjH,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMgH,GAAG,GAAGjH,SAAS,CAAC,CAAD,CAArB;EAAA,YAA0B8/E,OAAO,GAAG9/E,SAAS,CAAC,CAAD,CAA7C;EACA,YAAM6gF,MAAM,GAAG,IAAIz7E,SAAJ,EAAf;EACA,UAAI07E,UAAU,GAAG,CAAjB;;EACA,SAAG;EACD,cAAMC,QAAQ,GAAGL,oBAAoB,CAAC5jB,YAArB,CAAkC71D,GAAlC,EAAuC65E,UAAvC,CAAjB;EACA,cAAMluB,EAAE,GAAG,IAAIJ,eAAJ,CAAkBvrD,GAAlB,EAAuB65E,UAAvB,EAAmCC,QAAnC,EAA6CjB,OAA7C,CAAX;EACAe,QAAAA,MAAM,CAACr8E,GAAP,CAAWouD,EAAX;EACAkuB,QAAAA,UAAU,GAAGC,QAAb;EACD,OALD,QAKSD,UAAU,GAAG75E,GAAG,CAAChH,MAAJ,GAAa,CALnC;;EAMA,aAAO4gF,MAAP;EACD;EACF;;EApCuC;;ECH3B,MAAMG,KAAN,CAAY;EACzBC,EAAAA,YAAY,CAACpC,UAAD,EAAa;;EACzBD,EAAAA,kBAAkB,GAAG;;EAFI;;ECCZ,MAAMsC,eAAN,CAAsB;EACnCzkF,EAAAA,WAAW,GAAG;EACZykF,IAAAA,eAAe,CAACphF,YAAhB,CAA6BC,KAA7B,CAAmC,IAAnC,EAAyCC,SAAzC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKqhF,OAAL,GAAe,IAAf;;EACA,QAAInhF,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B,CAA5B,MAAoC,IAAID,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC9D,YAAMmhF,MAAM,GAAGphF,SAAS,CAAC,CAAD,CAAxB;EACA,WAAKqhF,qBAAL,CAA2BD,MAA3B;EACD;EACF;;EACDC,EAAAA,qBAAqB,CAACD,MAAD,EAAS;EAC5B,SAAKD,OAAL,GAAeC,MAAf;EACD;;EACD,MAAI/9E,WAAJ,GAAkB;EAChB,WAAO,CAAC29E,KAAD,CAAP;EACD;;EAhBkC;;ECKtB,MAAMM,YAAN,SAA2BJ,eAA3B,CAA2C;EACxDzkF,EAAAA,WAAW,GAAG;EACZ;EACA6kF,IAAAA,YAAY,CAACxhF,YAAb,CAA0BC,KAA1B,CAAgC,IAAhC,EAAsCC,SAAtC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKyhF,WAAL,GAAmB,IAAIn8E,SAAJ,EAAnB;EACA,SAAKu3C,MAAL,GAAc,IAAIs6B,OAAJ,EAAd;EACA,SAAKuK,UAAL,GAAkB,CAAlB;EACA,SAAKC,gBAAL,GAAwB,IAAxB;EACA,SAAKC,UAAL,GAAkB,CAAlB;;EACA,QAAI1hF,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B,CAA5B,MAAoC,IAAID,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC9D,YAAM4yD,EAAE,GAAG7yD,SAAS,CAAC,CAAD,CAApB;EACAkhF,MAAAA,eAAe,CAACphF,YAAhB,CAA6BI,IAA7B,CAAkC,IAAlC,EAAwC2yD,EAAxC;EACD;EACF;;EACD8uB,EAAAA,iBAAiB,GAAG;EAClB,WAAO,KAAKJ,WAAZ;EACD;;EACD3C,EAAAA,kBAAkB,GAAG;EACnB,WAAOjB,kBAAkB,CAACiB,kBAAnB,CAAsC,KAAK6C,gBAA3C,CAAP;EACD;;EACDG,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAKjlC,MAAZ;EACD;;EACDn4C,EAAAA,GAAG,CAACq9E,MAAD,EAAS;EACV,UAAMC,SAAS,GAAGpB,oBAAoB,CAACE,SAArB,CAA+BiB,MAAM,CAACr/D,cAAP,EAA/B,EAAwDq/D,MAAxD,CAAlB;;EACA,SAAK,IAAIzkF,CAAC,GAAG0kF,SAAS,CAACn9E,QAAV,EAAb,EAAmCvH,CAAC,CAACmJ,OAAF,EAAnC,GAAkD;EAChD,YAAMqsD,EAAE,GAAGx1D,CAAC,CAACkJ,IAAF,EAAX;EACAssD,MAAAA,EAAE,CAACwtB,KAAH,CAAS,KAAKoB,UAAL,EAAT;;EACA,WAAK7kC,MAAL,CAAYrB,MAAZ,CAAmBsX,EAAE,CAAC32C,WAAH,EAAnB,EAAqC22C,EAArC;;EACA,WAAK2uB,WAAL,CAAiB/8E,GAAjB,CAAqBouD,EAArB;EACD;EACF;;EACDquB,EAAAA,YAAY,CAACc,eAAD,EAAkB;EAC5B,SAAKN,gBAAL,GAAwBM,eAAxB;;EACA,SAAK,IAAI3kF,CAAC,GAAG2kF,eAAe,CAACp9E,QAAhB,EAAb,EAAyCvH,CAAC,CAACmJ,OAAF,EAAzC,GACE,KAAK/B,GAAL,CAASpH,CAAC,CAACkJ,IAAF,EAAT;;EAEF,SAAK07E,eAAL;EACD;;EACDA,EAAAA,eAAe,GAAG;EAChB,UAAMC,aAAa,GAAG,IAAIC,oBAAJ,CAAyB,KAAKf,OAA9B,CAAtB;;EACA,SAAK,IAAI/jF,CAAC,GAAG,KAAKmkF,WAAL,CAAiB58E,QAAjB,EAAb,EAA0CvH,CAAC,CAACmJ,OAAF,EAA1C,GAAyD;EACvD,YAAM47E,UAAU,GAAG/kF,CAAC,CAACkJ,IAAF,EAAnB;;EACA,YAAM87E,aAAa,GAAG,KAAKzlC,MAAL,CAAYjC,KAAZ,CAAkBynC,UAAU,CAAClmE,WAAX,EAAlB,CAAtB;;EACA,WAAK,IAAIiB,CAAC,GAAGklE,aAAa,CAACz9E,QAAd,EAAb,EAAuCuY,CAAC,CAAC3W,OAAF,EAAvC,GAAsD;EACpD,cAAM87E,SAAS,GAAGnlE,CAAC,CAAC5W,IAAF,EAAlB;;EACA,YAAI+7E,SAAS,CAAC5B,KAAV,KAAoB0B,UAAU,CAAC1B,KAAX,EAAxB,EAA4C;EAC1C0B,UAAAA,UAAU,CAACjC,eAAX,CAA2BmC,SAA3B,EAAsCJ,aAAtC;EACA,eAAKP,UAAL;EACD;;EACD,YAAI,KAAKP,OAAL,CAAal5E,MAAb,EAAJ,EAA2B,OAAO,IAAP;EAC5B;EACF;EACF;;EAvDuD;;EAyD1D,MAAMi6E,oBAAN,SAAmC/C,0BAAnC,CAA8D;EAC5D1iF,EAAAA,WAAW,GAAG;EACZ;EACAylF,IAAAA,oBAAoB,CAACpiF,YAArB,CAAkCC,KAAlC,CAAwC,IAAxC,EAA8CC,SAA9C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKwiF,GAAL,GAAW,IAAX;EACA,UAAMzvB,EAAE,GAAG7yD,SAAS,CAAC,CAAD,CAApB;EACA,SAAKsiF,GAAL,GAAWzvB,EAAX;EACD;;EACDysB,EAAAA,OAAO,GAAG;EACR,QAAIt/E,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMy3D,GAAG,GAAG13D,SAAS,CAAC,CAAD,CAArB;EAAA,YAA0Bu9D,MAAM,GAAGv9D,SAAS,CAAC,CAAD,CAA5C;EAAA,YAAiDu/E,GAAG,GAAGv/E,SAAS,CAAC,CAAD,CAAhE;EAAA,YAAqEw/E,MAAM,GAAGx/E,SAAS,CAAC,CAAD,CAAvF;EACA,YAAMuiF,GAAG,GAAG7qB,GAAG,CAAC8oB,UAAJ,EAAZ;EACA,YAAMgC,GAAG,GAAGjD,GAAG,CAACiB,UAAJ,EAAZ;;EACA,WAAK8B,GAAL,CAASG,oBAAT,CAA8BF,GAA9B,EAAmChlB,MAAnC,EAA2CilB,GAA3C,EAAgDhD,MAAhD;EACD,KALD,MAKO;EACL,aAAO,MAAMF,OAAN,CAAcv/E,KAAd,CAAoB,IAApB,EAA0BC,SAA1B,CAAP;EACD;EACF;;EAnB2D;;EAqB9DshF,YAAY,CAACY,oBAAb,GAAoCA,oBAApC;;EC5Ee,MAAMQ,WAAN,CAAkB;EAC/BjmF,EAAAA,WAAW,GAAG;EACZimF,IAAAA,WAAW,CAAC5iF,YAAZ,CAAyBC,KAAzB,CAA+B,IAA/B,EAAqCC,SAArC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK6iF,MAAL,GAAc,IAAd;EACA,SAAKC,YAAL,GAAoB,IAApB;EACA,SAAKC,QAAL,GAAgB,IAAhB;EACA,SAAKC,QAAL,GAAgB,IAAhB;EACA,SAAKC,SAAL,GAAiB,KAAjB;;EACA,QAAI/iF,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAM+iF,KAAK,GAAGhjF,SAAS,CAAC,CAAD,CAAvB;EAAA,YAA4BijF,WAAW,GAAGjjF,SAAS,CAAC,CAAD,CAAnD;EACA0iF,MAAAA,WAAW,CAAC5iF,YAAZ,CAAyBI,IAAzB,CAA8B,IAA9B,EAAoC8iF,KAApC,EAA2CC,WAA3C,EAAwD,CAAxD,EAA2D,CAA3D;EACD,KAHD,MAGO,IAAIjjF,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAM+iF,KAAK,GAAGhjF,SAAS,CAAC,CAAD,CAAvB;EAAA,YAA4BijF,WAAW,GAAGjjF,SAAS,CAAC,CAAD,CAAnD;EACA,WAAK2iF,MAAL,GAAcK,KAAd;EACA,WAAKJ,YAAL,GAAoBK,WAApB;EACA,WAAKF,SAAL,GAAiB,CAAC,KAAKG,kBAAL,EAAlB;EACD;EACF;;EACDC,EAAAA,OAAO,GAAG;EACR,QAAIx8E,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAeuE,UAAf,CAAhB,EAA4C;EAC1C,YAAMs6E,UAAU,GAAG7+E,SAAS,CAAC,CAAD,CAA5B;;EACA,WAAK,IAAI5C,CAAC,GAAGyhF,UAAU,CAACl6E,QAAX,EAAb,EAAoCvH,CAAC,CAACmJ,OAAF,EAApC,GAAmD;EACjD,cAAMw4E,EAAE,GAAG3hF,CAAC,CAACkJ,IAAF,EAAX;EACA,aAAK68E,OAAL,CAAapE,EAAE,CAACv8D,cAAH,EAAb;EACD;EACF,KAND,MAMO,IAAIxiB,SAAS,CAAC,CAAD,CAAT,YAAwBkH,KAA5B,EAAmC;EACxC,YAAMD,GAAG,GAAGjH,SAAS,CAAC,CAAD,CAArB;;EACA,WAAK,IAAI5C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6J,GAAG,CAAChH,MAAxB,EAAgC7C,CAAC,EAAjC,EAAqC;EACnC6J,QAAAA,GAAG,CAAC7J,CAAD,CAAH,CAAO2B,CAAP,GAAWkI,GAAG,CAAC7J,CAAD,CAAH,CAAO2B,CAAP,GAAW,KAAK6jF,YAAhB,GAA+B,KAAKC,QAA/C;EACA57E,QAAAA,GAAG,CAAC7J,CAAD,CAAH,CAAO4B,CAAP,GAAWiI,GAAG,CAAC7J,CAAD,CAAH,CAAO4B,CAAP,GAAW,KAAK4jF,YAAhB,GAA+B,KAAKE,QAA/C;EACD;;EACD,UAAI77E,GAAG,CAAChH,MAAJ,KAAe,CAAf,IAAoBgH,GAAG,CAAC,CAAD,CAAH,CAAOtF,QAAP,CAAgBsF,GAAG,CAAC,CAAD,CAAnB,CAAxB,EACEiR,MAAM,CAACuiB,GAAP,CAAWC,OAAX,CAAmBzzB,GAAnB;EAEH;EACF;;EACDwH,EAAAA,KAAK,GAAG;EACN,QAAI9H,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAeuE,UAAf,CAAhB,EAA4C;EAC1C,YAAMs6E,UAAU,GAAG7+E,SAAS,CAAC,CAAD,CAA5B;EACA,YAAMojF,mBAAmB,GAAG,IAAIh+E,SAAJ,CAAcy5E,UAAU,CAACj6E,IAAX,EAAd,CAA5B;;EACA,WAAK,IAAIxH,CAAC,GAAGyhF,UAAU,CAACl6E,QAAX,EAAb,EAAoCvH,CAAC,CAACmJ,OAAF,EAApC,GAAmD;EACjD,cAAMw4E,EAAE,GAAG3hF,CAAC,CAACkJ,IAAF,EAAX;EACA88E,QAAAA,mBAAmB,CAAC5+E,GAApB,CAAwB,IAAIm5E,kBAAJ,CAAuB,KAAKlvE,KAAL,CAAWswE,EAAE,CAACv8D,cAAH,EAAX,CAAvB,EAAwDu8D,EAAE,CAACzU,OAAH,EAAxD,CAAxB;EACD;;EACD,aAAO8Y,mBAAP;EACD,KARD,MAQO,IAAIpjF,SAAS,CAAC,CAAD,CAAT,YAAwBkH,KAA5B,EAAmC;EACxC,YAAMD,GAAG,GAAGjH,SAAS,CAAC,CAAD,CAArB;EACA,YAAMqjF,QAAQ,GAAG,IAAIn8E,KAAJ,CAAUD,GAAG,CAAChH,MAAd,EAAsBkH,IAAtB,CAA2B,IAA3B,CAAjB;;EACA,WAAK,IAAI/J,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6J,GAAG,CAAChH,MAAxB,EAAgC7C,CAAC,EAAjC,EACEimF,QAAQ,CAACjmF,CAAD,CAAR,GAAc,IAAI0D,UAAJ,CAAezE,IAAI,CAAC6xB,KAAL,CAAW,CAACjnB,GAAG,CAAC7J,CAAD,CAAH,CAAO2B,CAAP,GAAW,KAAK8jF,QAAjB,IAA6B,KAAKD,YAA7C,CAAf,EAA2EvmF,IAAI,CAAC6xB,KAAL,CAAW,CAACjnB,GAAG,CAAC7J,CAAD,CAAH,CAAO4B,CAAP,GAAW,KAAK8jF,QAAjB,IAA6B,KAAKF,YAA7C,CAA3E,EAAuI37E,GAAG,CAAC7J,CAAD,CAAH,CAAO6D,IAAP,EAAvI,CAAd;;EAEF,YAAMqiF,aAAa,GAAGj7D,gBAAgB,CAACU,oBAAjB,CAAsCs6D,QAAtC,CAAtB;EACA,aAAOC,aAAP;EACD;EACF;;EACDJ,EAAAA,kBAAkB,GAAG;EACnB,WAAO,KAAKN,YAAL,KAAsB,GAA7B;EACD;;EACDhE,EAAAA,kBAAkB,GAAG;EACnB,UAAM2E,OAAO,GAAG,KAAKZ,MAAL,CAAY/D,kBAAZ,EAAhB;;EACA,QAAI,KAAKmE,SAAT,EAAoB,KAAKI,OAAL,CAAaI,OAAb;EACpB,WAAOA,OAAP;EACD;;EACDtC,EAAAA,YAAY,CAACc,eAAD,EAAkB;EAC5B,QAAIyB,aAAa,GAAGzB,eAApB;EACA,QAAI,KAAKgB,SAAT,EAAoBS,aAAa,GAAG,KAAK/0E,KAAL,CAAWszE,eAAX,CAAhB;;EACpB,SAAKY,MAAL,CAAY1B,YAAZ,CAAyBuC,aAAzB;EACD;;EACD,MAAIngF,WAAJ,GAAkB;EAChB,WAAO,CAAC29E,KAAD,CAAP;EACD;;EAxE8B;;;;;;;;;ECFlB,MAAMyC,UAAN,CAAiB;EAC9BhnF,EAAAA,WAAW,GAAG;EACZgnF,IAAAA,UAAU,CAAC3jF,YAAX,CAAwBC,KAAxB,CAA8B,IAA9B,EAAoCC,SAApC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKq5C,KAAL,GAAa,IAAb;EACA,SAAKrG,SAAL,GAAiB,IAAjB;EACA,SAAK4wC,OAAL,GAAe,IAAf;EACA,SAAKC,YAAL,GAAoB,IAApB;;EACA,QAAI3jF,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMua,IAAI,GAAGxa,SAAS,CAAC,CAAD,CAAtB;EACAyjF,MAAAA,UAAU,CAAC3jF,YAAX,CAAwBI,IAAxB,CAA6B,IAA7B,EAAmCsa,IAAnC,EAAyC2rC,gBAAgB,CAACO,kBAA1D;EACD,KAHD,MAGO,IAAI1mD,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMua,IAAI,GAAGxa,SAAS,CAAC,CAAD,CAAtB;EAAA,YAA2B4jF,MAAM,GAAG5jF,SAAS,CAAC,CAAD,CAA7C;EACA,WAAKm5C,KAAL,GAAa3+B,IAAb;EACA,WAAKs4B,SAAL,GAAiBt4B,IAAI,CAACK,UAAL,EAAjB;EACA,WAAK6oE,OAAL,GAAeE,MAAf;EACD;EACF;;EACD,SAAO5gE,WAAP,GAAqB;EACnB,QAAIhjB,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMsb,CAAC,GAAGvb,SAAS,CAAC,CAAD,CAAnB;EACA,YAAM6jF,GAAG,GAAG,IAAIJ,UAAJ,CAAeloE,CAAf,CAAZ;EACA,aAAOsoE,GAAG,CAAC7gE,WAAJ,EAAP;EACD,KAJD,MAIO,IAAIhjB,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMsb,CAAC,GAAGvb,SAAS,CAAC,CAAD,CAAnB;EAAA,YAAwB4jF,MAAM,GAAG5jF,SAAS,CAAC,CAAD,CAA1C;EACA,YAAM6jF,GAAG,GAAG,IAAIJ,UAAJ,CAAeloE,CAAf,EAAkBqoE,MAAlB,CAAZ;EACA,aAAOC,GAAG,CAAC7gE,WAAJ,EAAP;EACD;EACF;;EACD8gE,EAAAA,uBAAuB,CAACC,KAAD,EAAQ;EAC7B,QAAI,KAAK5qC,KAAL,CAAWz0C,OAAX,EAAJ,EACE,OAAO,KAAKs/E,kBAAL,EAAP;EAEF,UAAMC,MAAM,GAAG,KAAKC,0BAAL,CAAgCH,KAAhC,CAAf;EACA,QAAIE,MAAM,CAAChkF,MAAP,KAAkB,CAAtB,EACE,OAAO,KAAK6yC,SAAL,CAAevvB,WAAf,CAA2B0gE,MAAM,CAAC,CAAD,CAAjC,CAAP;EAEF,WAAO,KAAKnxC,SAAL,CAAe/hB,0BAAf,CAA0CkzD,MAA1C,CAAP;EACD;;EACDjhE,EAAAA,WAAW,GAAG;EACZ,QAAI,KAAKm2B,KAAL,YAAsB/2B,UAA1B,EAAsC,OAAO,KAAK+hE,kBAAL,CAAwB,KAAKhrC,KAA7B,CAAP;EACtC,QAAI,KAAKA,KAAL,YAAsB5qB,eAA1B,EAA2C,OAAO,KAAKu1D,uBAAL,CAA6B,KAAK3qC,KAAlC,CAAP;EAC3C,WAAO,KAAKA,KAAL,CAAWn2B,WAAX,EAAP;EACD;;EACDmhE,EAAAA,kBAAkB,CAAClqE,IAAD,EAAO;EACvB,QAAI,KAAKk/B,KAAL,CAAWz0C,OAAX,EAAJ,EACE,OAAO,KAAKs/E,kBAAL,EAAP;;EAEF,QAAI/pE,IAAI,CAAC8G,QAAL,EAAJ,EAAqB;EACnB,YAAMqjE,wBAAwB,GAAG,KAAKV,OAAL,CAAat9B,YAAb,CAA0B,CAA1B,CAAjC;;EACA,UAAIg+B,wBAAJ,EACE,OAAOnqE,IAAI,CAACqJ,aAAL,EAAP,CADF,KAGE,OAAO,KAAKwvB,SAAL,CAAehiB,gBAAf,EAAP;EAEH;;EACD,WAAO,KAAKgiB,SAAL,CAAehiB,gBAAf,CAAgC,CAAC7W,IAAI,CAACqJ,aAAL,EAAD,EAAuBrJ,IAAI,CAAC6I,WAAL,EAAvB,CAAhC,CAAP;EACD;;EACDkhE,EAAAA,kBAAkB,GAAG;EACnB,WAAO,KAAKlxC,SAAL,CAAehiB,gBAAf,EAAP;EACD;;EACDozD,EAAAA,0BAA0B,CAACH,KAAD,EAAQ;EAChC,UAAME,MAAM,GAAG,IAAI7+E,SAAJ,EAAf;EACA,SAAKu+E,YAAL,GAAoB,IAAIhpB,OAAJ,EAApB;;EACA,SAAK,IAAIv9D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG2mF,KAAK,CAACroE,gBAAN,EAApB,EAA8Cte,CAAC,EAA/C,EAAmD;EACjD,YAAM6c,IAAI,GAAG8pE,KAAK,CAAChpE,YAAN,CAAmB3d,CAAnB,CAAb;EACA,UAAI6c,IAAI,CAAC2I,YAAL,OAAwB,CAA5B,EAA+B;EAC/B,WAAKyhE,WAAL,CAAiBpqE,IAAI,CAAC0I,cAAL,CAAoB,CAApB,CAAjB;EACA,WAAK0hE,WAAL,CAAiBpqE,IAAI,CAAC0I,cAAL,CAAoB1I,IAAI,CAAC2I,YAAL,KAAsB,CAA1C,CAAjB;EACD;;EACD,SAAK,IAAI2J,EAAE,GAAG,KAAKo3D,YAAL,CAAkB73D,QAAlB,GAA6BnnB,QAA7B,EAAd,EAAuD4nB,EAAE,CAAChmB,OAAH,EAAvD,GAAuE;EACrE,YAAMomB,KAAK,GAAGJ,EAAE,CAACjmB,IAAH,EAAd;EACA,YAAM41C,OAAO,GAAGvvB,KAAK,CAACmuC,QAAN,EAAhB;EACA,YAAMwpB,OAAO,GAAGpoC,OAAO,CAACyd,KAAxB;EACA,UAAI,KAAK+pB,OAAL,CAAat9B,YAAb,CAA0Bk+B,OAA1B,CAAJ,EACEL,MAAM,CAACz/E,GAAP,CAAWmoB,KAAK,CAACouC,MAAN,EAAX;EAEH;;EACD,WAAO1yC,gBAAgB,CAACvhB,iBAAjB,CAAmCm9E,MAAnC,CAAP;EACD;;EACDI,EAAAA,WAAW,CAAChhE,EAAD,EAAK;EACd,QAAI64B,OAAO,GAAG,KAAKynC,YAAL,CAAkB1+E,GAAlB,CAAsBoe,EAAtB,CAAd;;EACA,QAAI64B,OAAO,KAAK,IAAhB,EAAsB;EACpBA,MAAAA,OAAO,GAAG,IAAIqoC,OAAJ,EAAV;;EACA,WAAKZ,YAAL,CAAkB93D,GAAlB,CAAsBxI,EAAtB,EAA0B64B,OAA1B;EACD;;EACDA,IAAAA,OAAO,CAACyd,KAAR;EACD;;EAxF6B;;EA0FhC,MAAM4qB,OAAN,CAAc;EACZ9nF,EAAAA,WAAW,GAAG;EACZ8nF,IAAAA,OAAO,CAACzkF,YAAR,CAAqBC,KAArB,CAA2B,IAA3B,EAAiCC,SAAjC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK65D,KAAL,GAAa,IAAb;EACD;;EANW;;ECrFC,MAAM6qB,UAAN,CAAiB;EAC9B/nF,EAAAA,WAAW,GAAG;EACZ+nF,IAAAA,UAAU,CAAC1kF,YAAX,CAAwBC,KAAxB,CAA8B,IAA9B,EAAoCC,SAApC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKgwC,UAAL,GAAkB,IAAlB;EACA,SAAK20C,4BAAL,GAAoC,IAApC;EACA,SAAKC,kBAAL,GAA0B,IAA1B;;EACA,QAAI1kF,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMua,IAAI,GAAGxa,SAAS,CAAC,CAAD,CAAtB;EACA,WAAK8vC,UAAL,GAAkBt1B,IAAlB;EACD,KAHD,MAGO,IAAIxa,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMua,IAAI,GAAGxa,SAAS,CAAC,CAAD,CAAtB;EAAA,YAA2BujE,gBAAgB,GAAGvjE,SAAS,CAAC,CAAD,CAAvD;EACA,WAAK8vC,UAAL,GAAkBt1B,IAAlB;EACA,WAAKiqE,4BAAL,GAAoC,CAAClhB,gBAAgB,CAACnd,YAAjB,CAA8B,CAA9B,CAArC;EACD;EACF;;EACD,SAAO7jC,QAAP,GAAkB;EAChB,QAAIviB,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMua,IAAI,GAAGxa,SAAS,CAAC,CAAD,CAAtB;EACA,YAAM8sC,EAAE,GAAG,IAAI03C,UAAJ,CAAehqE,IAAf,CAAX;EACA,aAAOsyB,EAAE,CAACvqB,QAAH,EAAP;EACD,KAJD,MAIO,IAAIviB,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMua,IAAI,GAAGxa,SAAS,CAAC,CAAD,CAAtB;EAAA,YAA2BujE,gBAAgB,GAAGvjE,SAAS,CAAC,CAAD,CAAvD;EACA,YAAM8sC,EAAE,GAAG,IAAI03C,UAAJ,CAAehqE,IAAf,EAAqB+oD,gBAArB,CAAX;EACA,aAAOz2B,EAAE,CAACvqB,QAAH,EAAP;EACD;EACF;;EACDoiE,EAAAA,kBAAkB,CAACC,EAAD,EAAK;EACrB,QAAIA,EAAE,CAAClgF,OAAH,EAAJ,EAAkB,OAAO,IAAP;EAClB,UAAM4d,MAAM,GAAG,IAAI0E,OAAJ,EAAf;;EACA,SAAK,IAAI5pB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGwnF,EAAE,CAAClpE,gBAAH,EAApB,EAA2Cte,CAAC,EAA5C,EAAgD;EAC9C,YAAMimB,EAAE,GAAGuhE,EAAE,CAAC7pE,YAAH,CAAgB3d,CAAhB,CAAX;EACA,YAAMqL,CAAC,GAAG4a,EAAE,CAAC3c,aAAH,EAAV;;EACA,UAAI4b,MAAM,CAAC5W,QAAP,CAAgBjD,CAAhB,CAAJ,EAAwB;EACtB,aAAKi8E,kBAAL,GAA0Bj8E,CAA1B;EACA,eAAO,KAAP;EACD;;EACD6Z,MAAAA,MAAM,CAAC9d,GAAP,CAAWiE,CAAX;EACD;;EACD,WAAO,IAAP;EACD;;EACDo8E,EAAAA,iBAAiB,CAACrqE,IAAD,EAAO;EACtB,UAAMqM,KAAK,GAAG2qB,wBAAwB,CAACF,QAAzB,CAAkC92B,IAAlC,CAAd;;EACA,SAAK,IAAIpd,CAAC,GAAGypB,KAAK,CAACliB,QAAN,EAAb,EAA+BvH,CAAC,CAACmJ,OAAF,EAA/B,GAA8C;EAC5C,YAAM2P,IAAI,GAAG9Y,CAAC,CAACkJ,IAAF,EAAb;EACA,UAAI,CAAC,KAAKw+E,sBAAL,CAA4B5uE,IAA5B,CAAL,EAAwC,OAAO,KAAP;EACzC;;EACD,WAAO,IAAP;EACD;;EACD6uE,EAAAA,6BAA6B,CAACC,KAAD,EAAQ;EACnC,UAAMC,SAAS,GAAG,IAAItqB,OAAJ,EAAlB;;EACA,SAAK,IAAIv9D,CAAC,GAAG4nF,KAAK,CAACre,eAAN,EAAb,EAAsCvpE,CAAC,CAACmJ,OAAF,EAAtC,GAAqD;EACnD,YAAM9D,CAAC,GAAGrF,CAAC,CAACkJ,IAAF,EAAV;EACA,YAAMya,QAAQ,GAAGte,CAAC,CAACse,QAAF,EAAjB;EACA,YAAMmD,EAAE,GAAGzhB,CAAC,CAACiE,aAAF,CAAgB,CAAhB,CAAX;EACA,WAAK29E,WAAL,CAAiBY,SAAjB,EAA4B/gE,EAA5B,EAAgCnD,QAAhC;EACA,YAAMpY,EAAE,GAAGlG,CAAC,CAACiE,aAAF,CAAgBjE,CAAC,CAACmgB,YAAF,KAAmB,CAAnC,CAAX;EACA,WAAKyhE,WAAL,CAAiBY,SAAjB,EAA4Bt8E,EAA5B,EAAgCoY,QAAhC;EACD;;EACD,SAAK,IAAI3jB,CAAC,GAAG6nF,SAAS,CAAC9+E,MAAV,GAAmBxB,QAAnB,EAAb,EAA4CvH,CAAC,CAACmJ,OAAF,EAA5C,GAA2D;EACzD,YAAM2+E,MAAM,GAAG9nF,CAAC,CAACkJ,IAAF,EAAf;;EACA,UAAI4+E,MAAM,CAACnkE,QAAP,IAAmBmkE,MAAM,CAACj2B,MAAP,KAAkB,CAAzC,EAA4C;EAC1C,aAAKy1B,kBAAL,GAA0BQ,MAAM,CAACx+E,aAAP,EAA1B;EACA,eAAO,IAAP;EACD;EACF;;EACD,WAAO,KAAP;EACD;;EACDy+E,EAAAA,oBAAoB,GAAG;EACrB,WAAO,KAAKT,kBAAZ;EACD;;EACDI,EAAAA,sBAAsB,CAACtqE,IAAD,EAAO;EAC3B,QAAIA,IAAI,CAAC9V,OAAL,EAAJ,EAAoB,OAAO,IAAP;EACpB,UAAMsgF,KAAK,GAAG,IAAI3d,aAAJ,CAAkB,CAAlB,EAAqB7sD,IAArB,CAAd;EACA,UAAMshB,EAAE,GAAG,IAAIjC,qBAAJ,EAAX;EACA,UAAMg5B,EAAE,GAAGmyB,KAAK,CAAC7c,gBAAN,CAAuBrsC,EAAvB,EAA2B,IAA3B,CAAX;EACA,QAAI,CAAC+2B,EAAE,CAAC95B,eAAH,EAAL,EAA2B,OAAO,IAAP;;EAC3B,QAAI85B,EAAE,CAACkD,qBAAH,EAAJ,EAAgC;EAC9B,WAAK2uB,kBAAL,GAA0B7xB,EAAE,CAAC4C,0BAAH,EAA1B;EACA,aAAO,KAAP;EACD;;EACD,QAAI,KAAK2vB,0BAAL,CAAgCJ,KAAhC,CAAJ,EAA4C,OAAO,KAAP;EAC5C,QAAI,KAAKP,4BAAT,EACE,IAAI,KAAKM,6BAAL,CAAmCC,KAAnC,CAAJ,EAA+C,OAAO,KAAP;EAEjD,WAAO,IAAP;EACD;;EACDI,EAAAA,0BAA0B,CAACJ,KAAD,EAAQ;EAChC,SAAK,IAAI5nF,CAAC,GAAG4nF,KAAK,CAACre,eAAN,EAAb,EAAsCvpE,CAAC,CAACmJ,OAAF,EAAtC,GAAqD;EACnD,YAAM9D,CAAC,GAAGrF,CAAC,CAACkJ,IAAF,EAAV;EACA,YAAM2zD,eAAe,GAAGx3D,CAAC,CAAC09D,sBAAF,EAAxB;;EACA,WAAK,IAAIwJ,IAAI,GAAGlnE,CAAC,CAACo+D,uBAAF,GAA4Bl8D,QAA5B,EAAhB,EAAwDglE,IAAI,CAACpjE,OAAL,EAAxD,GAA0E;EACxE,cAAMk1D,EAAE,GAAGkO,IAAI,CAACrjE,IAAL,EAAX;;EACA,YAAI,CAACm1D,EAAE,CAACrjC,UAAH,CAAc6hC,eAAd,CAAL,EAAqC;EACnC,eAAKyqB,kBAAL,GAA0BjpB,EAAE,CAAC/0D,aAAH,EAA1B;EACA,iBAAO,IAAP;EACD;EACF;EACF;;EACD,WAAO,KAAP;EACD;;EACD29E,EAAAA,WAAW,CAACY,SAAD,EAAYx8E,CAAZ,EAAesY,QAAf,EAAyB;EAClC,QAAImkE,MAAM,GAAGD,SAAS,CAAChgF,GAAV,CAAcwD,CAAd,CAAb;;EACA,QAAIy8E,MAAM,KAAK,IAAf,EAAqB;EACnBA,MAAAA,MAAM,GAAG,IAAIG,YAAJ,CAAiB58E,CAAjB,CAAT;EACAw8E,MAAAA,SAAS,CAACp5D,GAAV,CAAcpjB,CAAd,EAAiBy8E,MAAjB;EACD;;EACDA,IAAAA,MAAM,CAACb,WAAP,CAAmBtjE,QAAnB;EACD;;EACDukE,EAAAA,aAAa,CAAC9qE,IAAD,EAAO;EAClB,SAAKkqE,kBAAL,GAA0B,IAA1B;EACA,QAAIlqE,IAAI,CAAC9V,OAAL,EAAJ,EAAoB,OAAO,IAAP;EACpB,QAAI8V,IAAI,YAAY4H,UAApB,EAAgC,OAAO,KAAK0iE,sBAAL,CAA4BtqE,IAA5B,CAAP;EAChC,QAAIA,IAAI,YAAY+T,eAApB,EAAqC,OAAO,KAAKu2D,sBAAL,CAA4BtqE,IAA5B,CAAP;EACrC,QAAIA,IAAI,YAAYsN,UAApB,EAAgC,OAAO,KAAK68D,kBAAL,CAAwBnqE,IAAxB,CAAP;EAChC,QAAI7T,YAAY,CAAC6T,IAAD,EAAOiK,SAAP,CAAhB,EAAmC,OAAO,KAAKogE,iBAAL,CAAuBrqE,IAAvB,CAAP;EACnC,QAAIA,IAAI,YAAYyM,kBAApB,EAAwC,OAAO,KAAKs+D,0BAAL,CAAgC/qE,IAAhC,CAAP;EACxC,WAAO,IAAP;EACD;;EACD+H,EAAAA,QAAQ,GAAG;EACT,SAAKmiE,kBAAL,GAA0B,IAA1B;EACA,WAAO,KAAKY,aAAL,CAAmB,KAAKx1C,UAAxB,CAAP;EACD;;EACDy1C,EAAAA,0BAA0B,CAAC/qE,IAAD,EAAO;EAC/B,SAAK,IAAIpd,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGod,IAAI,CAACkB,gBAAL,EAApB,EAA6Cte,CAAC,EAA9C,EAAkD;EAChD,YAAMwe,IAAI,GAAGpB,IAAI,CAACO,YAAL,CAAkB3d,CAAlB,CAAb;EACA,UAAI,CAAC,KAAKkoF,aAAL,CAAmB1pE,IAAnB,CAAL,EAA+B,OAAO,KAAP;EAChC;;EACD,WAAO,IAAP;EACD;;EAlI6B;;EAoIhC,MAAMypE,YAAN,CAAmB;EACjB5oF,EAAAA,WAAW,GAAG;EACZ4oF,IAAAA,YAAY,CAACvlF,YAAb,CAA0BC,KAA1B,CAAgC,IAAhC,EAAsCC,SAAtC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKujB,EAAL,GAAU,IAAV;EACA,SAAKtC,QAAL,GAAgB,IAAhB;EACA,SAAKkuC,MAAL,GAAc,IAAd;EACA,UAAM5rC,EAAE,GAAGrjB,SAAS,CAAC,CAAD,CAApB;EACA,SAAKqjB,EAAL,GAAUA,EAAV;EACA,SAAKtC,QAAL,GAAgB,KAAhB;EACA,SAAKkuC,MAAL,GAAc,CAAd;EACD;;EACDo1B,EAAAA,WAAW,CAACtjE,QAAD,EAAW;EACpB,SAAKkuC,MAAL;EACA,SAAKluC,QAAL,IAAiBA,QAAjB;EACD;;EACDra,EAAAA,aAAa,GAAG;EACd,WAAO,KAAK2c,EAAZ;EACD;;EAnBgB;;EAqBnBmhE,UAAU,CAACa,YAAX,GAA0BA,YAA1B;;ECpKe,MAAMG,gBAAN,CAAuB;EACpC/oF,EAAAA,WAAW,GAAG;EACZ+oF,IAAAA,gBAAgB,CAAC1lF,YAAjB,CAA8BC,KAA9B,CAAoC,IAApC,EAA0CC,SAA1C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK2lF,iBAAL,GAAyBD,gBAAgB,CAACE,yBAA1C;EACA,SAAKC,YAAL,GAAoBH,gBAAgB,CAACI,SAArC;EACA,SAAKC,UAAL,GAAkBL,gBAAgB,CAACM,UAAnC;EACA,SAAKC,WAAL,GAAmBP,gBAAgB,CAACQ,mBAApC;EACA,SAAKC,cAAL,GAAsB,KAAtB;EACA,SAAKC,eAAL,GAAuBV,gBAAgB,CAACW,uBAAxC;;EACA,QAAInmF,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B,CAA5B,MAAoC,IAAID,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC9D,YAAMmmF,gBAAgB,GAAGpmF,SAAS,CAAC,CAAD,CAAlC;EACA,WAAKqmF,mBAAL,CAAyBD,gBAAzB;EACD,KAHmC,MAG7B,IAAIpmF,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMmmF,gBAAgB,GAAGpmF,SAAS,CAAC,CAAD,CAAlC;EAAA,YAAuCsmF,WAAW,GAAGtmF,SAAS,CAAC,CAAD,CAA9D;EACA,WAAKqmF,mBAAL,CAAyBD,gBAAzB;EACA,WAAKG,cAAL,CAAoBD,WAApB;EACD,KAJM,MAIA,IAAItmF,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMmmF,gBAAgB,GAAGpmF,SAAS,CAAC,CAAD,CAAlC;EAAA,YAAuCsmF,WAAW,GAAGtmF,SAAS,CAAC,CAAD,CAA9D;EAAA,YAAmEwmF,SAAS,GAAGxmF,SAAS,CAAC,CAAD,CAAxF;EAAA,YAA6FymF,UAAU,GAAGzmF,SAAS,CAAC,CAAD,CAAnH;EACA,WAAKqmF,mBAAL,CAAyBD,gBAAzB;EACA,WAAKG,cAAL,CAAoBD,WAApB;EACA,WAAKI,YAAL,CAAkBF,SAAlB;EACA,WAAKG,aAAL,CAAmBF,UAAnB;EACD;EACF;;EACD,SAAOG,mBAAP,CAA2BC,QAA3B,EAAqC;EACnC,UAAMC,KAAK,GAAGzqF,IAAI,CAACqX,EAAL,GAAU,GAAV,GAAgBmzE,QAA9B;EACA,WAAO,IAAIxqF,IAAI,CAACksC,GAAL,CAASu+C,KAAK,GAAG,GAAjB,CAAX;EACD;;EACDC,EAAAA,cAAc,GAAG;EACf,WAAO,KAAKpB,YAAZ;EACD;;EACDqB,EAAAA,aAAa,GAAG;EACd,WAAO,KAAKf,cAAZ;EACD;;EACDI,EAAAA,mBAAmB,CAACQ,QAAD,EAAW;EAC5B,SAAKpB,iBAAL,GAAyBoB,QAAzB;EACA,QAAI,KAAKpB,iBAAL,KAA2B,CAA/B,EAAkC,KAAKI,UAAL,GAAkBL,gBAAgB,CAACyB,UAAnC;;EAClC,QAAI,KAAKxB,iBAAL,GAAyB,CAA7B,EAAgC;EAC9B,WAAKI,UAAL,GAAkBL,gBAAgB,CAAC0B,UAAnC;EACA,WAAKnB,WAAL,GAAmB1pF,IAAI,CAACC,GAAL,CAAS,KAAKmpF,iBAAd,CAAnB;EACD;;EACD,QAAIoB,QAAQ,IAAI,CAAhB,EACE,KAAKpB,iBAAL,GAAyB,CAAzB;EAEF,QAAI,KAAKI,UAAL,KAAoBL,gBAAgB,CAACM,UAAzC,EACE,KAAKL,iBAAL,GAAyBD,gBAAgB,CAACE,yBAA1C;EAEH;;EACDyB,EAAAA,YAAY,GAAG;EACb,WAAO,KAAKtB,UAAZ;EACD;;EACDa,EAAAA,YAAY,CAACF,SAAD,EAAY;EACtB,SAAKX,UAAL,GAAkBW,SAAlB;EACD;;EACDY,EAAAA,iBAAiB,CAACC,cAAD,EAAiB;EAChC,SAAKnB,eAAL,GAAuBmB,cAAc,GAAG,CAAjB,GAAqB,CAArB,GAAyBA,cAAhD;EACD;;EACDC,EAAAA,iBAAiB,GAAG;EAClB,WAAO,KAAKpB,eAAZ;EACD;;EACDqB,EAAAA,mBAAmB,GAAG;EACpB,WAAO,KAAK9B,iBAAZ;EACD;;EACDc,EAAAA,cAAc,CAACD,WAAD,EAAc;EAC1B,SAAKX,YAAL,GAAoBW,WAApB;EACD;;EACDkB,EAAAA,aAAa,GAAG;EACd,WAAO,KAAKzB,WAAZ;EACD;;EACDY,EAAAA,aAAa,CAACF,UAAD,EAAa;EACxB,SAAKV,WAAL,GAAmBU,UAAnB;EACD;;EACDgB,EAAAA,cAAc,CAACT,aAAD,EAAgB;EAC5B,SAAKf,cAAL,GAAsBe,aAAtB;EACD;;EA5EmC;EA8EtCxB,gBAAgB,CAACI,SAAjB,GAA6B,CAA7B;EACAJ,gBAAgB,CAACkC,QAAjB,GAA4B,CAA5B;EACAlC,gBAAgB,CAACmC,UAAjB,GAA8B,CAA9B;EACAnC,gBAAgB,CAACM,UAAjB,GAA8B,CAA9B;EACAN,gBAAgB,CAAC0B,UAAjB,GAA8B,CAA9B;EACA1B,gBAAgB,CAACyB,UAAjB,GAA8B,CAA9B;EACAzB,gBAAgB,CAACE,yBAAjB,GAA6C,CAA7C;EACAF,gBAAgB,CAACQ,mBAAjB,GAAuC,GAAvC;EACAR,gBAAgB,CAACW,uBAAjB,GAA2C,IAA3C;;ECnFe,MAAMyB,mBAAN,CAA0B;EACvCnrF,EAAAA,WAAW,GAAG;EACZmrF,IAAAA,mBAAmB,CAAC9nF,YAApB,CAAiCC,KAAjC,CAAuC,IAAvC,EAA6CC,SAA7C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK+nF,SAAL,GAAiB,CAAC,CAAlB;EACA,SAAKC,SAAL,GAAiB,IAAjB;EACA,SAAKC,MAAL,GAAc,IAAd;EACA,SAAKC,WAAL,GAAmB,IAAnB;EACD;;EACDthF,EAAAA,aAAa,GAAG;EACd,WAAO,KAAKohF,SAAZ;EACD;;EACDG,EAAAA,gBAAgB,CAAC9mB,EAAD,EAAKz7D,KAAL,EAAY;EAC1B,QAAIk0D,IAAI,GAAG,KAAKsuB,yBAAL,CAA+B/mB,EAA/B,EAAmCz7D,KAAnC,CAAX;EACA,QAAIk0D,IAAI,GAAG,CAAX,EAAcA,IAAI,GAAG,KAAKsuB,yBAAL,CAA+B/mB,EAA/B,EAAmCz7D,KAAK,GAAG,CAA3C,CAAP;;EACd,QAAIk0D,IAAI,GAAG,CAAX,EAAc;EACZ,WAAKkuB,SAAL,GAAiB,IAAjB;EACA,WAAKK,2BAAL,CAAiChnB,EAAjC;EACD;;EACD,WAAOvH,IAAP;EACD;;EACDwuB,EAAAA,yBAAyB,GAAG;EAC1B,UAAMnhF,GAAG,GAAG,KAAK8gF,MAAL,CAAY3mB,OAAZ,GAAsB5+C,cAAtB,EAAZ;;EACAriB,IAAAA,MAAM,CAACE,MAAP,CAAc,KAAKwnF,SAAL,GAAiB,CAAjB,IAAsB,KAAKA,SAAL,GAAiB5gF,GAAG,CAAChH,MAAzD,EAAiE,wDAAjE;EACA,UAAMooF,KAAK,GAAGphF,GAAG,CAAC,KAAK4gF,SAAL,GAAiB,CAAlB,CAAjB;EACA,UAAMS,KAAK,GAAGrhF,GAAG,CAAC,KAAK4gF,SAAL,GAAiB,CAAlB,CAAjB;EACA,UAAMU,WAAW,GAAGvyE,WAAW,CAACtQ,KAAZ,CAAkB,KAAKoiF,SAAvB,EAAkCQ,KAAlC,EAAyCD,KAAzC,CAApB;EACA,QAAIG,OAAO,GAAG,KAAd;EACA,QAAIH,KAAK,CAACrpF,CAAN,GAAU,KAAK8oF,SAAL,CAAe9oF,CAAzB,IAA8BspF,KAAK,CAACtpF,CAAN,GAAU,KAAK8oF,SAAL,CAAe9oF,CAAvD,IAA4DupF,WAAW,KAAKvyE,WAAW,CAACW,gBAA5F,EACE6xE,OAAO,GAAG,IAAV,CADF,KAEK,IAAIH,KAAK,CAACrpF,CAAN,GAAU,KAAK8oF,SAAL,CAAe9oF,CAAzB,IAA8BspF,KAAK,CAACtpF,CAAN,GAAU,KAAK8oF,SAAL,CAAe9oF,CAAvD,IAA4DupF,WAAW,KAAKvyE,WAAW,CAACS,SAA5F,EACH+xE,OAAO,GAAG,IAAV;EAEF,QAAIA,OAAJ,EACE,KAAKX,SAAL,GAAiB,KAAKA,SAAL,GAAiB,CAAlC;EAEH;;EACDK,EAAAA,yBAAyB,CAAC/mB,EAAD,EAAK/jE,CAAL,EAAQ;EAC/B,UAAMqF,CAAC,GAAG0+D,EAAE,CAACC,OAAH,EAAV;EACA,UAAM5+D,KAAK,GAAGC,CAAC,CAAC+f,cAAF,EAAd;EACA,QAAIplB,CAAC,GAAG,CAAJ,IAASA,CAAC,GAAG,CAAJ,IAASoF,KAAK,CAACvC,MAA5B,EAAoC,OAAO,CAAC,CAAR;EACpC,QAAIuC,KAAK,CAACpF,CAAD,CAAL,CAAS4B,CAAT,KAAewD,KAAK,CAACpF,CAAC,GAAG,CAAL,CAAL,CAAa4B,CAAhC,EAAmC,OAAO,CAAC,CAAR;EACnC,QAAIizC,GAAG,GAAGogB,QAAQ,CAACz7C,IAAnB;EACA,QAAIpU,KAAK,CAACpF,CAAD,CAAL,CAAS4B,CAAT,GAAawD,KAAK,CAACpF,CAAC,GAAG,CAAL,CAAL,CAAa4B,CAA9B,EAAiCizC,GAAG,GAAGogB,QAAQ,CAAC37C,KAAf;EACjC,WAAOu7B,GAAP;EACD;;EACDmvB,EAAAA,OAAO,GAAG;EACR,WAAO,KAAK4mB,WAAZ;EACD;;EACDG,EAAAA,2BAA2B,CAAChnB,EAAD,EAAK;EAC9B,UAAM3+D,KAAK,GAAG2+D,EAAE,CAACC,OAAH,GAAa5+C,cAAb,EAAd;;EACA,SAAK,IAAIplB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGoF,KAAK,CAACvC,MAAN,GAAe,CAAnC,EAAsC7C,CAAC,EAAvC,EACE,IAAI,KAAK0qF,SAAL,KAAmB,IAAnB,IAA2BtlF,KAAK,CAACpF,CAAD,CAAL,CAAS2B,CAAT,GAAa,KAAK+oF,SAAL,CAAe/oF,CAA3D,EAA8D;EAC5D,WAAKgpF,MAAL,GAAc5mB,EAAd;EACA,WAAK0mB,SAAL,GAAiBzqF,CAAjB;EACA,WAAK0qF,SAAL,GAAiBtlF,KAAK,CAACpF,CAAD,CAAtB;EACD;EAEJ;;EACDqrF,EAAAA,uBAAuB,GAAG;EACxB,UAAMhtC,IAAI,GAAG,KAAKssC,MAAL,CAAY1kB,OAAZ,EAAb;;EACA,UAAMqlB,IAAI,GAAGjtC,IAAI,CAACylB,QAAL,EAAb;EACA,SAAK6mB,MAAL,GAAcW,IAAI,CAACC,gBAAL,EAAd;;EACA,QAAI,CAAC,KAAKZ,MAAL,CAAY/gF,SAAZ,EAAL,EAA8B;EAC5B,WAAK+gF,MAAL,GAAc,KAAKA,MAAL,CAAY/iB,MAAZ,EAAd;EACA,WAAK6iB,SAAL,GAAiB,KAAKE,MAAL,CAAY3mB,OAAZ,GAAsB5+C,cAAtB,GAAuCviB,MAAvC,GAAgD,CAAjE;EACD;EACF;;EACD2wD,EAAAA,QAAQ,CAACg4B,WAAD,EAAc;EACpB,SAAK,IAAIxrF,CAAC,GAAGwrF,WAAW,CAACjkF,QAAZ,EAAb,EAAqCvH,CAAC,CAACmJ,OAAF,EAArC,GAAoD;EAClD,YAAM46D,EAAE,GAAG/jE,CAAC,CAACkJ,IAAF,EAAX;EACA,UAAI,CAAC66D,EAAE,CAACn6D,SAAH,EAAL,EAAqB;EACrB,WAAKmhF,2BAAL,CAAiChnB,EAAjC;EACD;;EACDhhE,IAAAA,MAAM,CAACE,MAAP,CAAc,KAAKwnF,SAAL,KAAmB,CAAnB,IAAwB,KAAKC,SAAL,CAAevnF,MAAf,CAAsB,KAAKwnF,MAAL,CAAYrhF,aAAZ,EAAtB,CAAtC,EAA0F,uCAA1F;EACA,QAAI,KAAKmhF,SAAL,KAAmB,CAAvB,EACE,KAAKY,uBAAL,GADF,KAGE,KAAKL,yBAAL;EAEF,SAAKJ,WAAL,GAAmB,KAAKD,MAAxB;EACA,UAAMc,aAAa,GAAG,KAAKZ,gBAAL,CAAsB,KAAKF,MAA3B,EAAmC,KAAKF,SAAxC,CAAtB;EACA,QAAIgB,aAAa,KAAKx2B,QAAQ,CAACz7C,IAA/B,EACE,KAAKoxE,WAAL,GAAmB,KAAKD,MAAL,CAAY/iB,MAAZ,EAAnB;EAEH;;EAtFsC;;ECH1B,MAAM8jB,UAAN,CAAiB;EAC9BrsF,EAAAA,WAAW,GAAG;EACZ,SAAK4I,KAAL,GAAa,EAAb;EACD;;EAED0jF,EAAAA,OAAO,CAACtmF,CAAD,EAAI;EACT,SAAK4C,KAAL,CAAWE,IAAX,CAAgB9C,CAAhB;EACD;;EAEDumF,EAAAA,WAAW,GAAG;EACZ,WAAO,KAAK3jF,KAAL,CAAW4jF,KAAX,EAAP;EACD;;EAEDvkF,EAAAA,OAAO,GAAG;EACR,WAAO,KAAKW,KAAL,CAAWpF,MAAX,KAAsB,CAA7B;EACD;;EAf6B;;ECSjB,MAAMipF,cAAN,CAAqB;EAClCzsF,EAAAA,WAAW,GAAG;EACZysF,IAAAA,cAAc,CAACppF,YAAf,CAA4BC,KAA5B,CAAkC,IAAlC,EAAwCC,SAAxC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKqpF,OAAL,GAAe,IAAf;EACA,SAAKC,YAAL,GAAoB,IAAIhkF,SAAJ,EAApB;EACA,SAAKwgE,MAAL,GAAc,IAAIxgE,SAAJ,EAAd;EACA,SAAKikF,eAAL,GAAuB,IAAvB;EACA,SAAK/pB,IAAL,GAAY,IAAZ;EACA,SAAK6pB,OAAL,GAAe,IAAIvB,mBAAJ,EAAf;EACD;;EACD0B,EAAAA,iBAAiB,GAAG;EAClB,SAAK,IAAI/8D,EAAE,GAAG,KAAK68D,YAAL,CAAkBzkF,QAAlB,EAAd,EAA4C4nB,EAAE,CAAChmB,OAAH,EAA5C,GAA4D;EAC1D,YAAM46D,EAAE,GAAG50C,EAAE,CAACjmB,IAAH,EAAX;EACA66D,MAAAA,EAAE,CAACxC,UAAH,CAAc,KAAd;EACD;EACF;;EACD4qB,EAAAA,sBAAsB,GAAG;EACvB,WAAO,KAAKF,eAAZ;EACD;;EACDG,EAAAA,gBAAgB,CAAC9rF,CAAD,EAAI;EAClB,QAAI+rF,SAAS,GAAG,IAAhB;;EACA,SAAK,IAAIrsF,CAAC,GAAGM,CAAC,CAACwjE,QAAF,GAAav8D,QAAb,EAAb,EAAsCvH,CAAC,CAACmJ,OAAF,EAAtC,GAAqD;EACnD,YAAM46D,EAAE,GAAG/jE,CAAC,CAACkJ,IAAF,EAAX;;EACA,UAAI66D,EAAE,CAACvC,SAAH,MAAkBuC,EAAE,CAAC6D,MAAH,GAAYpG,SAAZ,EAAtB,EAA+C;EAC7C6qB,QAAAA,SAAS,GAAGtoB,EAAZ;EACA;EACD;EACF;;EACD,QAAIsoB,SAAS,KAAK,IAAlB,EAAwB,MAAM,IAAIjmB,iBAAJ,CAAsB,8CAA8C9lE,CAAC,CAACgJ,aAAF,EAApE,CAAN;EACxBhJ,IAAAA,CAAC,CAACwjE,QAAF,GAAawoB,aAAb,CAA2BD,SAA3B;;EACA,SAAK,IAAIrsF,CAAC,GAAGM,CAAC,CAACwjE,QAAF,GAAav8D,QAAb,EAAb,EAAsCvH,CAAC,CAACmJ,OAAF,EAAtC,GAAqD;EACnD,YAAM46D,EAAE,GAAG/jE,CAAC,CAACkJ,IAAF,EAAX;EACA66D,MAAAA,EAAE,CAACxC,UAAH,CAAc,IAAd;EACA,WAAKgrB,aAAL,CAAmBxoB,EAAnB;EACD;EACF;;EACDyoB,EAAAA,YAAY,CAACC,YAAD,EAAe;EACzB,SAAKP,iBAAL;;EACA,UAAMnoB,EAAE,GAAG,KAAKgoB,OAAL,CAAa/nB,OAAb,EAAX;;EACA,UAAM1jE,CAAC,GAAGyjE,EAAE,CAACkC,OAAH,EAAV;EACA,UAAM7P,KAAK,GAAG2N,EAAE,CAACjC,QAAH,EAAd;EACAiC,IAAAA,EAAE,CAACgE,aAAH,CAAiB9S,QAAQ,CAAC37C,KAA1B,EAAiCmzE,YAAjC;EACA,SAAKF,aAAL,CAAmBxoB,EAAnB;EACA,SAAKuoB,aAAL,CAAmBvoB,EAAnB;EACD;;EACD9mD,EAAAA,MAAM,CAACohC,IAAD,EAAO;EACX,SAAKquC,YAAL,CAAkBruC,IAAlB;;EACA,SAAK0tC,OAAL,CAAav4B,QAAb,CAAsB,KAAKw4B,YAA3B;;EACA,SAAKC,eAAL,GAAuB,KAAKF,OAAL,CAAaziF,aAAb,EAAvB;EACD;;EACDqjF,EAAAA,eAAe,GAAG;EAChB,SAAK,IAAIx9D,EAAE,GAAG,KAAK68D,YAAL,CAAkBzkF,QAAlB,EAAd,EAA4C4nB,EAAE,CAAChmB,OAAH,EAA5C,GAA4D;EAC1D,YAAM46D,EAAE,GAAG50C,EAAE,CAACjmB,IAAH,EAAX;EACA,UAAI66D,EAAE,CAACnD,QAAH,CAAY3L,QAAQ,CAAC37C,KAArB,KAA+B,CAA/B,IAAoCyqD,EAAE,CAACnD,QAAH,CAAY3L,QAAQ,CAACz7C,IAArB,KAA8B,CAAlE,IAAuE,CAACuqD,EAAE,CAACkD,kBAAH,EAA5E,EACElD,EAAE,CAACtC,WAAH,CAAe,IAAf;EAEH;EACF;;EACD6qB,EAAAA,aAAa,CAACD,SAAD,EAAY;EACvB,UAAMO,YAAY,GAAG,IAAIj+D,OAAJ,EAArB;EACA,UAAMk+D,SAAS,GAAG,IAAInB,UAAJ,EAAlB;EACA,UAAMoB,SAAS,GAAGT,SAAS,CAACpmB,OAAV,EAAlB;EACA4mB,IAAAA,SAAS,CAAClB,OAAV,CAAkBmB,SAAlB;EACAF,IAAAA,YAAY,CAACxlF,GAAb,CAAiB0lF,SAAjB;EACAT,IAAAA,SAAS,CAAC9qB,UAAV,CAAqB,IAArB;;EACA,WAAO,CAACsrB,SAAS,CAACvlF,OAAV,EAAR,EAA6B;EAC3B,YAAMhH,CAAC,GAAGusF,SAAS,CAACjB,WAAV,EAAV;EACAgB,MAAAA,YAAY,CAACxlF,GAAb,CAAiB9G,CAAjB;EACA,WAAK8rF,gBAAL,CAAsB9rF,CAAtB;;EACA,WAAK,IAAIN,CAAC,GAAGM,CAAC,CAACwjE,QAAF,GAAav8D,QAAb,EAAb,EAAsCvH,CAAC,CAACmJ,OAAF,EAAtC,GAAqD;EACnD,cAAM46D,EAAE,GAAG/jE,CAAC,CAACkJ,IAAF,EAAX;EACA,cAAM0oD,GAAG,GAAGmS,EAAE,CAAC6D,MAAH,EAAZ;EACA,YAAIhW,GAAG,CAAC4P,SAAJ,EAAJ,EAAqB;EACrB,cAAMurB,OAAO,GAAGn7B,GAAG,CAACqU,OAAJ,EAAhB;;EACA,YAAI,CAAC2mB,YAAY,CAACt+E,QAAb,CAAsBy+E,OAAtB,CAAL,EAAqC;EACnCF,UAAAA,SAAS,CAAClB,OAAV,CAAkBoB,OAAlB;EACAH,UAAAA,YAAY,CAACxlF,GAAb,CAAiB2lF,OAAjB;EACD;EACF;EACF;EACF;;EACD/nF,EAAAA,SAAS,CAACC,CAAD,EAAI;EACX,UAAM2iF,KAAK,GAAG3iF,CAAd;EACA,QAAI,KAAKgnF,eAAL,CAAqBtqF,CAArB,GAAyBimF,KAAK,CAACqE,eAAN,CAAsBtqF,CAAnD,EACE,OAAO,CAAC,CAAR;EAEF,QAAI,KAAKsqF,eAAL,CAAqBtqF,CAArB,GAAyBimF,KAAK,CAACqE,eAAN,CAAsBtqF,CAAnD,EACE,OAAO,CAAP;EAEF,WAAO,CAAP;EACD;;EACDkd,EAAAA,WAAW,GAAG;EACZ,QAAI,KAAKqjD,IAAL,KAAc,IAAlB,EAAwB;EACtB,YAAM8qB,OAAO,GAAG,IAAIjiF,QAAJ,EAAhB;;EACA,WAAK,IAAIokB,EAAE,GAAG,KAAK68D,YAAL,CAAkBzkF,QAAlB,EAAd,EAA4C4nB,EAAE,CAAChmB,OAAH,EAA5C,GAA4D;EAC1D,cAAM8jF,OAAO,GAAG99D,EAAE,CAACjmB,IAAH,EAAhB;EACA,cAAMW,GAAG,GAAGojF,OAAO,CAACjpB,OAAR,GAAkB5+C,cAAlB,EAAZ;;EACA,aAAK,IAAIplB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6J,GAAG,CAAChH,MAAJ,GAAa,CAAjC,EAAoC7C,CAAC,EAArC,EACEgtF,OAAO,CAACr/E,eAAR,CAAwB9D,GAAG,CAAC7J,CAAD,CAA3B;EAEH;;EACD,WAAKkiE,IAAL,GAAY8qB,OAAZ;EACD;;EACD,WAAO,KAAK9qB,IAAZ;EACD;;EACDwqB,EAAAA,YAAY,CAACI,SAAD,EAAY;EACtB,UAAMI,SAAS,GAAG,IAAI1pC,KAAJ,EAAlB;EACA0pC,IAAAA,SAAS,CAAC9lF,GAAV,CAAc0lF,SAAd;;EACA,WAAO,CAACI,SAAS,CAACvpC,KAAV,EAAR,EAA2B;EACzB,YAAMtF,IAAI,GAAG6uC,SAAS,CAACzpC,GAAV,EAAb;EACA,WAAKr8C,GAAL,CAASi3C,IAAT,EAAe6uC,SAAf;EACD;EACF;;EACDX,EAAAA,aAAa,CAACxoB,EAAD,EAAK;EAChB,UAAMnS,GAAG,GAAGmS,EAAE,CAAC6D,MAAH,EAAZ;EACAhW,IAAAA,GAAG,CAACiP,QAAJ,CAAa5L,QAAQ,CAACz7C,IAAtB,EAA4BuqD,EAAE,CAACnD,QAAH,CAAY3L,QAAQ,CAAC37C,KAArB,CAA5B;EACAs4C,IAAAA,GAAG,CAACiP,QAAJ,CAAa5L,QAAQ,CAAC37C,KAAtB,EAA6ByqD,EAAE,CAACnD,QAAH,CAAY3L,QAAQ,CAACz7C,IAArB,CAA7B;EACD;;EACDpS,EAAAA,GAAG,CAACi3C,IAAD,EAAO6uC,SAAP,EAAkB;EACnB7uC,IAAAA,IAAI,CAACkjB,UAAL,CAAgB,IAAhB;;EACA,SAAKiH,MAAL,CAAYphE,GAAZ,CAAgBi3C,IAAhB;;EACA,SAAK,IAAIr+C,CAAC,GAAGq+C,IAAI,CAACylB,QAAL,GAAgBv8D,QAAhB,EAAb,EAAyCvH,CAAC,CAACmJ,OAAF,EAAzC,GAAwD;EACtD,YAAM46D,EAAE,GAAG/jE,CAAC,CAACkJ,IAAF,EAAX;;EACA,WAAK8iF,YAAL,CAAkB5kF,GAAlB,CAAsB28D,EAAtB;;EACA,YAAMnS,GAAG,GAAGmS,EAAE,CAAC6D,MAAH,EAAZ;EACA,YAAMulB,OAAO,GAAGv7B,GAAG,CAACqU,OAAJ,EAAhB;EACA,UAAI,CAACknB,OAAO,CAAC3rB,SAAR,EAAL,EAA0B0rB,SAAS,CAAC/kF,IAAV,CAAeglF,OAAf;EAC3B;EACF;;EACDnjB,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAKxB,MAAZ;EACD;;EACD4kB,EAAAA,gBAAgB,GAAG;EACjB,WAAO,KAAKpB,YAAZ;EACD;;EACD,MAAI/lF,WAAJ,GAAkB;EAChB,WAAO,CAAC7D,UAAD,CAAP;EACD;;EA3IiC;;ECDrB,MAAMirF,QAAN,CAAe;EAC5BhuF,EAAAA,WAAW,GAAG;EACZguF,IAAAA,QAAQ,CAAC3qF,YAAT,CAAsBC,KAAtB,CAA4B,IAA5B,EAAkCC,SAAlC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK4qF,QAAL,GAAgB,IAAhB;EACA,SAAKC,cAAL,GAAsB,CAAC,CAAvB;EACA,SAAK3pB,MAAL,GAAc,IAAI57D,SAAJ,EAAd;EACA,SAAKitC,IAAL,GAAY,IAAIjtC,SAAJ,EAAZ;EACA,SAAK4tD,MAAL,GAAc,IAAIiG,KAAJ,CAAUl6B,QAAQ,CAACM,IAAnB,CAAd;EACA,SAAKurD,KAAL,GAAa,IAAb;EACA,SAAKC,OAAL,GAAe,IAAf;EACA,SAAKlmE,MAAL,GAAc,IAAd;EACA,SAAKC,MAAL,GAAc,IAAIxf,SAAJ,EAAd;EACA,SAAK0lF,gBAAL,GAAwB,IAAxB;;EACA,QAAI9qF,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B,CAA5B,MAAoC,IAAID,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC9D,YAAMwH,KAAK,GAAGzH,SAAS,CAAC,CAAD,CAAvB;EAAA,YAA4B42B,eAAe,GAAG52B,SAAS,CAAC,CAAD,CAAvD;EACA,WAAK8qF,gBAAL,GAAwBl0D,eAAxB;EACA,WAAKm0D,aAAL,CAAmBtjF,KAAnB;EACA,WAAKujF,WAAL;EACD;EACF;;EACDA,EAAAA,WAAW,GAAG;EACZ,QAAI,KAAKJ,KAAL,KAAe,IAAnB,EAAyB,OAAO,IAAP;EACzB,UAAMpoF,KAAK,GAAG,IAAI0E,KAAJ,CAAU,KAAKmrC,IAAL,CAAUztC,IAAV,EAAV,EAA4BuC,IAA5B,CAAiC,IAAjC,CAAd;;EACA,SAAK,IAAI/J,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKi1C,IAAL,CAAUztC,IAAV,EAApB,EAAsCxH,CAAC,EAAvC,EACEoF,KAAK,CAACpF,CAAD,CAAL,GAAW,KAAKi1C,IAAL,CAAUptC,GAAV,CAAc7H,CAAd,CAAX;;EAEF,SAAKwtF,KAAL,GAAa,KAAKE,gBAAL,CAAsB/lE,gBAAtB,CAAuCviB,KAAvC,CAAb;EACA,SAAKqoF,OAAL,GAAe70E,WAAW,CAACC,KAAZ,CAAkB,KAAK20E,KAAL,CAAWpoE,cAAX,EAAlB,CAAf;EACD;;EACDq9C,EAAAA,UAAU,GAAG;EACX,WAAO,KAAK7M,MAAL,CAAY0G,gBAAZ,OAAmC,CAA1C;EACD;;EACDqxB,EAAAA,aAAa,CAACtjF,KAAD,EAAQ;EACnB,SAAKijF,QAAL,GAAgBjjF,KAAhB;EACA,QAAI05D,EAAE,GAAG15D,KAAT;EACA,QAAIwjF,WAAW,GAAG,IAAlB;;EACA,OAAG;EACD,UAAI9pB,EAAE,KAAK,IAAX,EAAiB,MAAM,IAAIqC,iBAAJ,CAAsB,yBAAtB,CAAN;EACjB,UAAIrC,EAAE,CAACsE,WAAH,OAAqB,IAAzB,EAA+B,MAAM,IAAIjC,iBAAJ,CAAsB,yDAAyDrC,EAAE,CAACz6D,aAAH,EAA/E,CAAN;;EAC/B,WAAKs6D,MAAL,CAAYx8D,GAAZ,CAAgB28D,EAAhB;;EACA,YAAM3N,KAAK,GAAG2N,EAAE,CAACjC,QAAH,EAAd;EACA/+D,MAAAA,MAAM,CAACE,MAAP,CAAcmzD,KAAK,CAACmF,MAAN,EAAd;EACA,WAAKgJ,UAAL,CAAgBnO,KAAhB;EACA,WAAK03B,SAAL,CAAe/pB,EAAE,CAACC,OAAH,EAAf,EAA6BD,EAAE,CAACn6D,SAAH,EAA7B,EAA6CikF,WAA7C;EACAA,MAAAA,WAAW,GAAG,KAAd;EACA,WAAKpmB,WAAL,CAAiB1D,EAAjB,EAAqB,IAArB;EACAA,MAAAA,EAAE,GAAG,KAAKgD,OAAL,CAAahD,EAAb,CAAL;EACD,KAXD,QAWSA,EAAE,KAAK,KAAKupB,QAXrB;EAYD;;EACDS,EAAAA,aAAa,GAAG;EACd,WAAO,KAAKP,KAAZ;EACD;;EACDlkF,EAAAA,aAAa,CAACtJ,CAAD,EAAI;EACf,WAAO,KAAKi1C,IAAL,CAAUptC,GAAV,CAAc7H,CAAd,CAAP;EACD;;EACDguF,EAAAA,oBAAoB,GAAG;EACrB,SAAKT,cAAL,GAAsB,CAAtB;EACA,QAAIxpB,EAAE,GAAG,KAAKupB,QAAd;;EACA,OAAG;EACD,YAAMjvC,IAAI,GAAG0lB,EAAE,CAACkC,OAAH,EAAb;EACA,YAAMpU,MAAM,GAAGxT,IAAI,CAACylB,QAAL,GAAgBmqB,iBAAhB,CAAkC,IAAlC,CAAf;EACA,UAAIp8B,MAAM,GAAG,KAAK07B,cAAlB,EAAkC,KAAKA,cAAL,GAAsB17B,MAAtB;EAClCkS,MAAAA,EAAE,GAAG,KAAKgD,OAAL,CAAahD,EAAb,CAAL;EACD,KALD,QAKSA,EAAE,KAAK,KAAKupB,QALrB;;EAMA,SAAKC,cAAL,IAAuB,CAAvB;EACD;;EACDO,EAAAA,SAAS,CAAC/zB,IAAD,EAAOnwD,SAAP,EAAkBikF,WAAlB,EAA+B;EACtC,UAAMlN,OAAO,GAAG5mB,IAAI,CAAC30C,cAAL,EAAhB;;EACA,QAAIxb,SAAJ,EAAe;EACb,UAAI4jD,UAAU,GAAG,CAAjB;EACA,UAAIqgC,WAAJ,EAAiBrgC,UAAU,GAAG,CAAb;;EACjB,WAAK,IAAIxtD,CAAC,GAAGwtD,UAAb,EAAyBxtD,CAAC,GAAG2gF,OAAO,CAAC99E,MAArC,EAA6C7C,CAAC,EAA9C,EACE,KAAKi1C,IAAL,CAAU7tC,GAAV,CAAcu5E,OAAO,CAAC3gF,CAAD,CAArB;EAEH,KAND,MAMO;EACL,UAAIwtD,UAAU,GAAGmzB,OAAO,CAAC99E,MAAR,GAAiB,CAAlC;EACA,UAAIgrF,WAAJ,EAAiBrgC,UAAU,GAAGmzB,OAAO,CAAC99E,MAAR,GAAiB,CAA9B;;EACjB,WAAK,IAAI7C,CAAC,GAAGwtD,UAAb,EAAyBxtD,CAAC,IAAI,CAA9B,EAAiCA,CAAC,EAAlC,EACE,KAAKi1C,IAAL,CAAU7tC,GAAV,CAAcu5E,OAAO,CAAC3gF,CAAD,CAArB;EAEH;EACF;;EACDkuF,EAAAA,MAAM,GAAG;EACP,WAAO,KAAKT,OAAZ;EACD;;EACDhsB,EAAAA,WAAW,GAAG;EACZ,QAAIsC,EAAE,GAAG,KAAKupB,QAAd;;EACA,OAAG;EACDvpB,MAAAA,EAAE,CAACC,OAAH,GAAavC,WAAb,CAAyB,IAAzB;EACAsC,MAAAA,EAAE,GAAGA,EAAE,CAACgD,OAAH,EAAL;EACD,KAHD,QAGShD,EAAE,KAAK,KAAKupB,QAHrB;EAID;;EACDa,EAAAA,aAAa,CAAC9iF,CAAD,EAAI;EACf,UAAMoc,KAAK,GAAG,KAAKsmE,aAAL,EAAd;EACA,UAAMziF,GAAG,GAAGmc,KAAK,CAAC1I,mBAAN,EAAZ;EACA,QAAI,CAACzT,GAAG,CAACgD,QAAJ,CAAajD,CAAb,CAAL,EAAsB,OAAO,KAAP;EACtB,QAAI,CAACy0C,aAAa,CAACI,QAAd,CAAuB70C,CAAvB,EAA0Boc,KAAK,CAACrC,cAAN,EAA1B,CAAL,EAAwD,OAAO,KAAP;;EACxD,SAAK,IAAIplB,CAAC,GAAG,KAAKwnB,MAAL,CAAYjgB,QAAZ,EAAb,EAAqCvH,CAAC,CAACmJ,OAAF,EAArC,GAAoD;EAClD,YAAMwoC,IAAI,GAAG3xC,CAAC,CAACkJ,IAAF,EAAb;EACA,UAAIyoC,IAAI,CAACw8C,aAAL,CAAmB9iF,CAAnB,CAAJ,EAA2B,OAAO,KAAP;EAC5B;;EACD,WAAO,IAAP;EACD;;EACD83C,EAAAA,OAAO,CAACrqC,IAAD,EAAO;EACZ,SAAK0O,MAAL,CAAYpgB,GAAZ,CAAgB0R,IAAhB;EACD;;EACDs1E,EAAAA,OAAO,GAAG;EACR,WAAO,KAAK7mE,MAAL,KAAgB,IAAvB;EACD;;EACDu6C,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAKlM,MAAZ;EACD;;EACDkO,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAKF,MAAZ;EACD;;EACDyqB,EAAAA,gBAAgB,GAAG;EACjB,QAAI,KAAKd,cAAL,GAAsB,CAA1B,EAA6B,KAAKS,oBAAL;EAC7B,WAAO,KAAKT,cAAZ;EACD;;EACDe,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAK/mE,MAAZ;EACD;;EACDg9C,EAAAA,UAAU,GAAG;EACX,QAAI3hE,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAM0rF,OAAO,GAAG3rF,SAAS,CAAC,CAAD,CAAzB;EACA,WAAK2hE,UAAL,CAAgBgqB,OAAhB,EAAyB,CAAzB;EACA,WAAKhqB,UAAL,CAAgBgqB,OAAhB,EAAyB,CAAzB;EACD,KAJD,MAIO,IAAI3rF,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAM0rF,OAAO,GAAG3rF,SAAS,CAAC,CAAD,CAAzB;EAAA,YAA8Bq5D,SAAS,GAAGr5D,SAAS,CAAC,CAAD,CAAnD;EACA,YAAMo+C,GAAG,GAAGutC,OAAO,CAACtvC,WAAR,CAAoBgd,SAApB,EAA+BhH,QAAQ,CAAC37C,KAAxC,CAAZ;EACA,UAAI0nC,GAAG,KAAKrf,QAAQ,CAACM,IAArB,EAA2B,OAAO,IAAP;;EAC3B,UAAI,KAAK2zB,MAAL,CAAY3W,WAAZ,CAAwBgd,SAAxB,MAAuCt6B,QAAQ,CAACM,IAApD,EAA0D;EACxD,aAAK2zB,MAAL,CAAY6F,WAAZ,CAAwBQ,SAAxB,EAAmCjb,GAAnC;;EACA,eAAO,IAAP;EACD;EACF;EACF;;EACDwtC,EAAAA,QAAQ,CAAC/mE,KAAD,EAAQ;EACd,SAAKF,MAAL,GAAcE,KAAd;EACA,QAAIA,KAAK,KAAK,IAAd,EAAoBA,KAAK,CAAC07B,OAAN,CAAc,IAAd;EACrB;;EACDsrC,EAAAA,SAAS,CAACj1D,eAAD,EAAkB;EACzB,UAAMk1D,MAAM,GAAG,IAAI5kF,KAAJ,CAAU,KAAK0d,MAAL,CAAYhgB,IAAZ,EAAV,EAA8BuC,IAA9B,CAAmC,IAAnC,CAAf;;EACA,SAAK,IAAI/J,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKwnB,MAAL,CAAYhgB,IAAZ,EAApB,EAAwCxH,CAAC,EAAzC,EACE0uF,MAAM,CAAC1uF,CAAD,CAAN,GAAY,KAAKwnB,MAAL,CAAY3f,GAAZ,CAAgB7H,CAAhB,EAAmB+tF,aAAnB,EAAZ;;EAEF,UAAM9kE,IAAI,GAAGuQ,eAAe,CAAC3Q,aAAhB,CAA8B,KAAKklE,aAAL,EAA9B,EAAoDW,MAApD,CAAb;EACA,WAAOzlE,IAAP;EACD;;EAtJ2B;;ECPf,MAAM0lE,eAAN,SAA8BtB,QAA9B,CAAuC;EACpDhuF,EAAAA,WAAW,GAAG;EACZ;EACAsvF,IAAAA,eAAe,CAACjsF,YAAhB,CAA6BC,KAA7B,CAAmC,IAAnC,EAAyCC,SAAzC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,UAAM2H,KAAK,GAAGzH,SAAS,CAAC,CAAD,CAAvB;EAAA,UAA4B42B,eAAe,GAAG52B,SAAS,CAAC,CAAD,CAAvD;EACAyqF,IAAAA,QAAQ,CAAC3qF,YAAT,CAAsBI,IAAtB,CAA2B,IAA3B,EAAiCuH,KAAjC,EAAwCmvB,eAAxC;EACD;;EACDiuC,EAAAA,WAAW,CAAC1D,EAAD,EAAK6qB,EAAL,EAAS;EAClB7qB,IAAAA,EAAE,CAACqD,cAAH,CAAkBwnB,EAAlB;EACD;;EACD7nB,EAAAA,OAAO,CAAChD,EAAD,EAAK;EACV,WAAOA,EAAE,CAAC+C,UAAH,EAAP;EACD;;EAdmD;;ECEvC,MAAM+nB,eAAN,SAA8BxB,QAA9B,CAAuC;EACpDhuF,EAAAA,WAAW,GAAG;EACZ;EACAwvF,IAAAA,eAAe,CAACnsF,YAAhB,CAA6BC,KAA7B,CAAmC,IAAnC,EAAyCC,SAAzC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,UAAM2H,KAAK,GAAGzH,SAAS,CAAC,CAAD,CAAvB;EAAA,UAA4B42B,eAAe,GAAG52B,SAAS,CAAC,CAAD,CAAvD;EACAyqF,IAAAA,QAAQ,CAAC3qF,YAAT,CAAsBI,IAAtB,CAA2B,IAA3B,EAAiCuH,KAAjC,EAAwCmvB,eAAxC;EACD;;EACDs1D,EAAAA,iBAAiB,GAAG;EAClB,UAAMC,YAAY,GAAG,IAAI/mF,SAAJ,EAArB;EACA,QAAI+7D,EAAE,GAAG,KAAKupB,QAAd;;EACA,OAAG;EACD,UAAIvpB,EAAE,CAAC4D,cAAH,OAAwB,IAA5B,EAAkC;EAChC,cAAMqnB,KAAK,GAAG,IAAIL,eAAJ,CAAoB5qB,EAApB,EAAwB,KAAK2pB,gBAA7B,CAAd;EACAqB,QAAAA,YAAY,CAAC3nF,GAAb,CAAiB4nF,KAAjB;EACD;;EACDjrB,MAAAA,EAAE,GAAGA,EAAE,CAACgD,OAAH,EAAL;EACD,KAND,QAMShD,EAAE,KAAK,KAAKupB,QANrB;;EAOA,WAAOyB,YAAP;EACD;;EACDtnB,EAAAA,WAAW,CAAC1D,EAAD,EAAK6qB,EAAL,EAAS;EAClB7qB,IAAAA,EAAE,CAAC0D,WAAH,CAAemnB,EAAf;EACD;;EACDK,EAAAA,oCAAoC,GAAG;EACrC,QAAIlrB,EAAE,GAAG,KAAKupB,QAAd;;EACA,OAAG;EACD,YAAMjvC,IAAI,GAAG0lB,EAAE,CAACkC,OAAH,EAAb;EACA5nB,MAAAA,IAAI,CAACylB,QAAL,GAAgBorB,wBAAhB,CAAyC,IAAzC;EACAnrB,MAAAA,EAAE,GAAGA,EAAE,CAACgD,OAAH,EAAL;EACD,KAJD,QAIShD,EAAE,KAAK,KAAKupB,QAJrB;EAKD;;EACDvmB,EAAAA,OAAO,CAAChD,EAAD,EAAK;EACV,WAAOA,EAAE,CAACgD,OAAH,EAAP;EACD;;EAlCmD;;ECIvC,MAAMooB,cAAN,CAAqB;EAClC9vF,EAAAA,WAAW,GAAG;EACZ8vF,IAAAA,cAAc,CAACzsF,YAAf,CAA4BC,KAA5B,CAAkC,IAAlC,EAAwCC,SAAxC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKgrF,gBAAL,GAAwB,IAAxB;EACA,SAAK0B,UAAL,GAAkB,IAAIpnF,SAAJ,EAAlB;EACA,UAAMwxB,eAAe,GAAG52B,SAAS,CAAC,CAAD,CAAjC;EACA,SAAK8qF,gBAAL,GAAwBl0D,eAAxB;EACD;;EACD,SAAO61D,sBAAP,CAA8BC,MAA9B,EAAsCC,SAAtC,EAAiD;EAC/C,UAAMC,QAAQ,GAAGF,MAAM,CAACvB,aAAP,EAAjB;EACA,UAAM0B,OAAO,GAAGD,QAAQ,CAACzwE,mBAAT,EAAhB;EACA,QAAIqM,MAAM,GAAGokE,QAAQ,CAACjqE,cAAT,CAAwB,CAAxB,CAAb;EACA,QAAImqE,QAAQ,GAAG,IAAf;EACA,QAAIC,WAAW,GAAG,IAAlB;;EACA,SAAK,IAAIxgE,EAAE,GAAGogE,SAAS,CAAChoF,QAAV,EAAd,EAAoC4nB,EAAE,CAAChmB,OAAH,EAApC,GAAoD;EAClD,YAAMymF,QAAQ,GAAGzgE,EAAE,CAACjmB,IAAH,EAAjB;EACA,YAAM2mF,YAAY,GAAGD,QAAQ,CAAC7B,aAAT,EAArB;EACA,YAAM+B,WAAW,GAAGD,YAAY,CAAC9wE,mBAAb,EAApB;EACA,UAAI+wE,WAAW,CAAC3sF,MAAZ,CAAmBssF,OAAnB,CAAJ,EAAiC;EACjC,UAAI,CAACK,WAAW,CAACxhF,QAAZ,CAAqBmhF,OAArB,CAAL,EAAoC;EACpCrkE,MAAAA,MAAM,GAAGH,gBAAgB,CAACC,WAAjB,CAA6BskE,QAAQ,CAACpqE,cAAT,EAA7B,EAAwDyqE,YAAY,CAACzqE,cAAb,EAAxD,CAAT;EACA,UAAI67B,WAAW,GAAG,KAAlB;EACA,UAAInB,aAAa,CAACI,QAAd,CAAuB90B,MAAvB,EAA+BykE,YAAY,CAACzqE,cAAb,EAA/B,CAAJ,EAAmE67B,WAAW,GAAG,IAAd;EACnE,UAAIA,WAAJ,EACE,IAAIyuC,QAAQ,KAAK,IAAb,IAAqBC,WAAW,CAACrhF,QAAZ,CAAqBwhF,WAArB,CAAzB,EAA4D;EAC1DJ,QAAAA,QAAQ,GAAGE,QAAX;EACAD,QAAAA,WAAW,GAAGD,QAAQ,CAAC3B,aAAT,GAAyBhvE,mBAAzB,EAAd;EACD;EAEJ;;EACD,WAAO2wE,QAAP;EACD;;EACDK,EAAAA,kBAAkB,CAACC,SAAD,EAAYT,SAAZ,EAAuBU,YAAvB,EAAqC;EACrD,SAAK,IAAI9gE,EAAE,GAAG6gE,SAAS,CAACzoF,QAAV,EAAd,EAAoC4nB,EAAE,CAAChmB,OAAH,EAApC,GAAoD;EAClD,YAAMylF,EAAE,GAAGz/D,EAAE,CAACjmB,IAAH,EAAX;EACA,UAAI0lF,EAAE,CAACV,MAAH,EAAJ,EACE+B,YAAY,CAAC7oF,GAAb,CAAiBwnF,EAAjB,EADF,KAGEW,SAAS,CAACnoF,GAAV,CAAcwnF,EAAd;EAEH;EACF;;EACDsB,EAAAA,eAAe,CAACX,SAAD,EAAY;EACzB,UAAMY,cAAc,GAAG,IAAInoF,SAAJ,EAAvB;;EACA,SAAK,IAAImnB,EAAE,GAAGogE,SAAS,CAAChoF,QAAV,EAAd,EAAoC4nB,EAAE,CAAChmB,OAAH,EAApC,GAAoD;EAClD,YAAMylF,EAAE,GAAGz/D,EAAE,CAACjmB,IAAH,EAAX;EACA,YAAM+f,IAAI,GAAG2lE,EAAE,CAACH,SAAH,CAAa,KAAKf,gBAAlB,CAAb;EACAyC,MAAAA,cAAc,CAAC/oF,GAAf,CAAmB6hB,IAAnB;EACD;;EACD,WAAOknE,cAAP;EACD;;EACDC,EAAAA,cAAc,CAACb,SAAD,EAAYU,YAAZ,EAA0B;EACtC,SAAK,IAAI9gE,EAAE,GAAG8gE,YAAY,CAAC1oF,QAAb,EAAd,EAAuC4nB,EAAE,CAAChmB,OAAH,EAAvC,GAAuD;EACrD,YAAMwoC,IAAI,GAAGxiB,EAAE,CAACjmB,IAAH,EAAb;;EACA,UAAIyoC,IAAI,CAAC28C,QAAL,OAAoB,IAAxB,EAA8B;EAC5B,cAAM7mE,KAAK,GAAG0nE,cAAc,CAACE,sBAAf,CAAsC19C,IAAtC,EAA4C49C,SAA5C,CAAd;EACA,YAAI9nE,KAAK,KAAK,IAAd,EAAoB,MAAM,IAAI2+C,iBAAJ,CAAsB,kCAAtB,EAA0Dz0B,IAAI,CAACroC,aAAL,CAAmB,CAAnB,CAA1D,CAAN;EACpBqoC,QAAAA,IAAI,CAAC68C,QAAL,CAAc/mE,KAAd;EACD;EACF;EACF;;EACD4oE,EAAAA,qBAAqB,CAACC,YAAD,EAAef,SAAf,EAA0BU,YAA1B,EAAwC;EAC3D,UAAMD,SAAS,GAAG,IAAIhoF,SAAJ,EAAlB;;EACA,SAAK,IAAImnB,EAAE,GAAGmhE,YAAY,CAAC/oF,QAAb,EAAd,EAAuC4nB,EAAE,CAAChmB,OAAH,EAAvC,GAAuD;EACrD,YAAMylF,EAAE,GAAGz/D,EAAE,CAACjmB,IAAH,EAAX;;EACA,UAAI0lF,EAAE,CAACP,gBAAH,KAAwB,CAA5B,EAA+B;EAC7BO,QAAAA,EAAE,CAACK,oCAAH;EACA,cAAMF,YAAY,GAAGH,EAAE,CAACE,iBAAH,EAArB;EACA,cAAMrnE,KAAK,GAAG,KAAK8oE,SAAL,CAAexB,YAAf,CAAd;;EACA,YAAItnE,KAAK,KAAK,IAAd,EAAoB;EAClB,eAAK+oE,iBAAL,CAAuB/oE,KAAvB,EAA8BsnE,YAA9B;EACAQ,UAAAA,SAAS,CAACnoF,GAAV,CAAcqgB,KAAd;EACD,SAHD,MAGO;EACLwoE,UAAAA,YAAY,CAAC5oF,MAAb,CAAoB0nF,YAApB;EACD;EACF,OAVD,MAUO;EACLiB,QAAAA,SAAS,CAAC5oF,GAAV,CAAcwnF,EAAd;EACD;EACF;;EACD,WAAOoB,SAAP;EACD;;EACDS,EAAAA,qBAAqB,CAACC,QAAD,EAAW;EAC9B,UAAMJ,YAAY,GAAG,IAAItoF,SAAJ,EAArB;;EACA,SAAK,IAAImnB,EAAE,GAAGuhE,QAAQ,CAACnpF,QAAT,EAAd,EAAmC4nB,EAAE,CAAChmB,OAAH,EAAnC,GAAmD;EACjD,YAAM46D,EAAE,GAAG50C,EAAE,CAACjmB,IAAH,EAAX;EACA,UAAI66D,EAAE,CAACrC,UAAH,MAAmBqC,EAAE,CAACjC,QAAH,GAAcvG,MAAd,EAAvB,EACE,IAAIwI,EAAE,CAACsE,WAAH,OAAqB,IAAzB,EAA+B;EAC7B,cAAMumB,EAAE,GAAG,IAAIC,eAAJ,CAAoB9qB,EAApB,EAAwB,KAAK2pB,gBAA7B,CAAX;EACA4C,QAAAA,YAAY,CAAClpF,GAAb,CAAiBwnF,EAAjB;EACAA,QAAAA,EAAE,CAACntB,WAAH;EACD;EAEJ;;EACD,WAAO6uB,YAAP;EACD;;EACDE,EAAAA,iBAAiB,CAAC/oE,KAAD,EAAQsnE,YAAR,EAAsB;EACrC,SAAK,IAAI5/D,EAAE,GAAG4/D,YAAY,CAACxnF,QAAb,EAAd,EAAuC4nB,EAAE,CAAChmB,OAAH,EAAvC,GAAuD;EACrD,YAAMylF,EAAE,GAAGz/D,EAAE,CAACjmB,IAAH,EAAX;EACA,UAAI0lF,EAAE,CAACV,MAAH,EAAJ,EACEU,EAAE,CAACJ,QAAH,CAAY/mE,KAAZ;EAEH;EACF;;EACD2tB,EAAAA,WAAW,GAAG;EACZ,UAAM+6C,cAAc,GAAG,KAAKD,eAAL,CAAqB,KAAKd,UAA1B,CAAvB;EACA,WAAOe,cAAP;EACD;;EACDI,EAAAA,SAAS,CAACxB,YAAD,EAAe;EACtB,QAAI4B,UAAU,GAAG,CAAjB;EACA,QAAIlpE,KAAK,GAAG,IAAZ;;EACA,SAAK,IAAI0H,EAAE,GAAG4/D,YAAY,CAACxnF,QAAb,EAAd,EAAuC4nB,EAAE,CAAChmB,OAAH,EAAvC,GAAuD;EACrD,YAAMylF,EAAE,GAAGz/D,EAAE,CAACjmB,IAAH,EAAX;;EACA,UAAI,CAAC0lF,EAAE,CAACV,MAAH,EAAL,EAAkB;EAChBzmE,QAAAA,KAAK,GAAGmnE,EAAR;EACA+B,QAAAA,UAAU;EACX;EACF;;EACD5tF,IAAAA,MAAM,CAACE,MAAP,CAAc0tF,UAAU,IAAI,CAA5B,EAA+B,0CAA/B;EACA,WAAOlpE,KAAP;EACD;;EACDrgB,EAAAA,GAAG,GAAG;EACJ,QAAIxE,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAM+kF,KAAK,GAAGhlF,SAAS,CAAC,CAAD,CAAvB;EACA,WAAKwE,GAAL,CAASwgF,KAAK,CAACve,WAAN,EAAT,EAA8Bue,KAAK,CAAC5d,QAAN,EAA9B;EACD,KAHD,MAGO,IAAIpnE,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAM6tF,QAAQ,GAAG9tF,SAAS,CAAC,CAAD,CAA1B;EAAA,YAA+B+lE,KAAK,GAAG/lE,SAAS,CAAC,CAAD,CAAhD;EACA2lE,MAAAA,WAAW,CAACG,uBAAZ,CAAoCC,KAApC;EACA,YAAM2nB,YAAY,GAAG,KAAKG,qBAAL,CAA2BC,QAA3B,CAArB;EACA,YAAMT,YAAY,GAAG,IAAIjoF,SAAJ,EAArB;EACA,YAAMgoF,SAAS,GAAG,KAAKK,qBAAL,CAA2BC,YAA3B,EAAyC,KAAKlB,UAA9C,EAA0Da,YAA1D,CAAlB;EACA,WAAKF,kBAAL,CAAwBC,SAAxB,EAAmC,KAAKZ,UAAxC,EAAoDa,YAApD;EACA,WAAKG,cAAL,CAAoB,KAAKhB,UAAzB,EAAqCa,YAArC;EACD;EACF;;EAvIiC;;ECJrB,MAAMW,yBAAN,CAAgC;EAC7CvxF,EAAAA,WAAW,GAAG;EACZuxF,IAAAA,yBAAyB,CAACluF,YAA1B,CAAuCC,KAAvC,CAA6C,IAA7C,EAAmDC,SAAnD;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKmuF,UAAL,GAAkB,IAAlB;EACA,SAAKC,YAAL,GAAoB,IAApB;EACA,SAAKC,UAAL,GAAkB,IAAlB;EACA,SAAKC,iBAAL,GAAyBp4E,WAAW,CAACW,gBAArC;EACA,UAAM03E,SAAS,GAAGruF,SAAS,CAAC,CAAD,CAA3B;EACA,SAAKiuF,UAAL,GAAkBI,SAAlB;EACD;;EACD,SAAOC,QAAP,CAAgBD,SAAhB,EAA2BE,WAA3B,EAAwC;EACtC,UAAMC,IAAI,GAAG,IAAIR,yBAAJ,CAA8BK,SAA9B,CAAb;EACA,WAAOG,IAAI,CAACF,QAAL,CAAcC,WAAd,CAAP;EACD;;EACDE,EAAAA,WAAW,CAACC,EAAD,EAAKlkE,EAAL,EAASC,EAAT,EAAa8jE,WAAb,EAA0B;EACnC,UAAMrqE,EAAE,GAAG,KAAK+pE,UAAL,CAAgBS,EAAhB,CAAX;EACA,UAAM/lF,EAAE,GAAG,KAAKslF,UAAL,CAAgBzjE,EAAhB,CAAX;EACA,UAAM5hB,EAAE,GAAG,KAAKqlF,UAAL,CAAgBxjE,EAAhB,CAAX;EACA,QAAI,CAAC,KAAKkkE,SAAL,CAAezqE,EAAf,EAAmBvb,EAAnB,EAAuBC,EAAvB,CAAL,EAAiC,OAAO,KAAP;EACjC,QAAI,CAAC,KAAKgmF,SAAL,CAAe1qE,EAAf,EAAmBvb,EAAnB,EAAuBC,EAAvB,EAA2B2lF,WAA3B,CAAL,EAA8C,OAAO,KAAP;EAC9C,WAAO,KAAKM,gBAAL,CAAsB3qE,EAAtB,EAA0Bvb,EAA1B,EAA8B+lF,EAA9B,EAAkCjkE,EAAlC,EAAsC8jE,WAAtC,CAAP;EACD;;EACDO,EAAAA,wBAAwB,GAAG;EACzB,QAAIppF,KAAK,GAAG,CAAZ;EACA,QAAIqpF,QAAQ,GAAG,KAAKC,uBAAL,CAA6BtpF,KAA7B,CAAf;EACA,QAAIupF,SAAS,GAAG,KAAKD,uBAAL,CAA6BD,QAA7B,CAAhB;EACA,QAAIloF,SAAS,GAAG,KAAhB;;EACA,WAAOooF,SAAS,GAAG,KAAKhB,UAAL,CAAgBhuF,MAAnC,EAA2C;EACzC,UAAIivF,qBAAqB,GAAG,KAA5B;;EACA,UAAI,KAAKT,WAAL,CAAiB/oF,KAAjB,EAAwBqpF,QAAxB,EAAkCE,SAAlC,EAA6C,KAAKf,YAAlD,CAAJ,EAAqE;EACnE,aAAKC,UAAL,CAAgBY,QAAhB,IAA4Bf,yBAAyB,CAACz6B,MAAtD;EACA27B,QAAAA,qBAAqB,GAAG,IAAxB;EACAroF,QAAAA,SAAS,GAAG,IAAZ;EACD;;EACD,UAAIqoF,qBAAJ,EAA2BxpF,KAAK,GAAGupF,SAAR,CAA3B,KAAmDvpF,KAAK,GAAGqpF,QAAR;EACnDA,MAAAA,QAAQ,GAAG,KAAKC,uBAAL,CAA6BtpF,KAA7B,CAAX;EACAupF,MAAAA,SAAS,GAAG,KAAKD,uBAAL,CAA6BD,QAA7B,CAAZ;EACD;;EACD,WAAOloF,SAAP;EACD;;EACDsoF,EAAAA,kBAAkB,CAACjrE,EAAD,EAAKvb,EAAL,EAASC,EAAT,EAAa2lF,WAAb,EAA0B;EAC1C,UAAMhG,WAAW,GAAGvyE,WAAW,CAACtQ,KAAZ,CAAkBwe,EAAlB,EAAsBvb,EAAtB,EAA0BC,EAA1B,CAApB;EACA,UAAMwmF,iBAAiB,GAAG7G,WAAW,KAAK,KAAK6F,iBAA/C;EACA,QAAI,CAACgB,iBAAL,EAAwB,OAAO,KAAP;EACxB,UAAMj1E,IAAI,GAAGf,QAAQ,CAACK,cAAT,CAAwB9Q,EAAxB,EAA4Bub,EAA5B,EAAgCtb,EAAhC,CAAb;EACA,WAAOuR,IAAI,GAAGo0E,WAAd;EACD;;EACDM,EAAAA,gBAAgB,CAAC3qE,EAAD,EAAKtb,EAAL,EAAS8lF,EAAT,EAAajkE,EAAb,EAAiB8jE,WAAjB,EAA8B;EAC5C,QAAI5mF,GAAG,GAAGtL,IAAI,CAAC6S,KAAL,CAAW,CAACub,EAAE,GAAGikE,EAAN,IAAYV,yBAAyB,CAACqB,gBAAjD,CAAV;EACA,QAAI1nF,GAAG,IAAI,CAAX,EAAcA,GAAG,GAAG,CAAN;;EACd,SAAK,IAAIvK,CAAC,GAAGsxF,EAAb,EAAiBtxF,CAAC,GAAGqtB,EAArB,EAAyBrtB,CAAC,IAAIuK,GAA9B,EACE,IAAI,CAAC,KAAKinF,SAAL,CAAe1qE,EAAf,EAAmBtb,EAAnB,EAAuB,KAAKqlF,UAAL,CAAgB7wF,CAAhB,CAAvB,EAA2CmxF,WAA3C,CAAL,EAA8D,OAAO,KAAP;;EAEhE,WAAO,IAAP;EACD;;EACDI,EAAAA,SAAS,CAACzqE,EAAD,EAAKvb,EAAL,EAASC,EAAT,EAAa;EACpB,UAAM2/E,WAAW,GAAGvyE,WAAW,CAACtQ,KAAZ,CAAkBwe,EAAlB,EAAsBvb,EAAtB,EAA0BC,EAA1B,CAApB;EACA,UAAM+lF,SAAS,GAAGpG,WAAW,KAAK,KAAK6F,iBAAvC;EACA,WAAOO,SAAP;EACD;;EACDL,EAAAA,QAAQ,CAACC,WAAD,EAAc;EACpB,SAAKL,YAAL,GAAoB7xF,IAAI,CAACC,GAAL,CAASiyF,WAAT,CAApB;EACA,QAAIA,WAAW,GAAG,CAAlB,EAAqB,KAAKH,iBAAL,GAAyBp4E,WAAW,CAACS,SAArC;EACrB,SAAK03E,UAAL,GAAkB,IAAIjnF,KAAJ,CAAU,KAAK+mF,UAAL,CAAgBhuF,MAA1B,EAAkCkH,IAAlC,CAAuC,IAAvC,CAAlB;EACA,QAAIN,SAAS,GAAG,KAAhB;;EACA,OACEA,SAAS,GAAG,KAAKioF,wBAAL,EAAZ,CADF,QAEOjoF,SAFP;;EAGA,WAAO,KAAKyoF,YAAL,EAAP;EACD;;EACDN,EAAAA,uBAAuB,CAACtpF,KAAD,EAAQ;EAC7B,QAAIY,IAAI,GAAGZ,KAAK,GAAG,CAAnB;;EACA,WAAOY,IAAI,GAAG,KAAK2nF,UAAL,CAAgBhuF,MAAvB,IAAiC,KAAKkuF,UAAL,CAAgB7nF,IAAhB,MAA0B0nF,yBAAyB,CAACz6B,MAA5F,EAAoGjtD,IAAI;;EACxG,WAAOA,IAAP;EACD;;EACDsoF,EAAAA,SAAS,CAAC1qE,EAAD,EAAKvb,EAAL,EAASC,EAAT,EAAa2lF,WAAb,EAA0B;EACjC,UAAMp0E,IAAI,GAAGf,QAAQ,CAACK,cAAT,CAAwB9Q,EAAxB,EAA4Bub,EAA5B,EAAgCtb,EAAhC,CAAb;EACA,WAAOuR,IAAI,GAAGo0E,WAAd;EACD;;EACDe,EAAAA,YAAY,GAAG;EACb,UAAMzmE,SAAS,GAAG,IAAIriB,cAAJ,EAAlB;;EACA,SAAK,IAAIpJ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6wF,UAAL,CAAgBhuF,MAApC,EAA4C7C,CAAC,EAA7C,EACE,IAAI,KAAK+wF,UAAL,CAAgB/wF,CAAhB,MAAuB4wF,yBAAyB,CAACz6B,MAArD,EAA6D1qC,SAAS,CAACrkB,GAAV,CAAc,KAAKypF,UAAL,CAAgB7wF,CAAhB,CAAd;;EAE/D,WAAOyrB,SAAS,CAAC/hB,iBAAV,EAAP;EACD;;EAvF4C;EAyF/CknF,yBAAyB,CAACuB,IAA1B,GAAiC,CAAjC;EACAvB,yBAAyB,CAACz6B,MAA1B,GAAmC,CAAnC;EACAy6B,yBAAyB,CAACwB,IAA1B,GAAiC,CAAjC;EACAxB,yBAAyB,CAACqB,gBAA1B,GAA6C,EAA7C;;EC5Fe,MAAMI,mBAAN,CAA0B;EACvChzF,EAAAA,WAAW,GAAG;EACZgzF,IAAAA,mBAAmB,CAAC3vF,YAApB,CAAiCC,KAAjC,CAAuC,IAAvC,EAA6CC,SAA7C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK4vF,OAAL,GAAe,IAAf;EACA,SAAKhhE,eAAL,GAAuB,IAAvB;EACA,SAAKihE,sBAAL,GAA8B,GAA9B;EACA,SAAKD,OAAL,GAAe,IAAItqF,SAAJ,EAAf;EACD;;EACDod,EAAAA,cAAc,GAAG;EACf,UAAMhgB,KAAK,GAAG,KAAKktF,OAAL,CAAa7qF,OAAb,CAAqB4qF,mBAAmB,CAACG,qBAAzC,CAAd;;EACA,WAAOptF,KAAP;EACD;;EACDw2B,EAAAA,iBAAiB,CAACnK,cAAD,EAAiB;EAChC,SAAKH,eAAL,GAAuBG,cAAvB;EACD;;EACDghE,EAAAA,KAAK,CAACxsE,EAAD,EAAK;EACR,UAAMysE,KAAK,GAAG,IAAIhvF,UAAJ,CAAeuiB,EAAf,CAAd;;EACA,SAAKqL,eAAL,CAAqBV,WAArB,CAAiC8hE,KAAjC;;EACA,QAAI,KAAKC,WAAL,CAAiBD,KAAjB,CAAJ,EAA6B,OAAO,IAAP;;EAC7B,SAAKJ,OAAL,CAAalrF,GAAb,CAAiBsrF,KAAjB;EACD;;EACDvzE,EAAAA,OAAO,GAAG;;EACVyzE,EAAAA,MAAM,CAAC3sE,EAAD,EAAKrc,SAAL,EAAgB;EACpB,QAAIA,SAAJ,EACE,KAAK,IAAI5J,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGimB,EAAE,CAACpjB,MAAvB,EAA+B7C,CAAC,EAAhC,EACE,KAAKyyF,KAAL,CAAWxsE,EAAE,CAACjmB,CAAD,CAAb,EAFJ,KAKE,KAAK,IAAIA,CAAC,GAAGimB,EAAE,CAACpjB,MAAH,GAAY,CAAzB,EAA4B7C,CAAC,IAAI,CAAjC,EAAoCA,CAAC,EAArC,EACE,KAAKyyF,KAAL,CAAWxsE,EAAE,CAACjmB,CAAD,CAAb;EAGL;;EACD2yF,EAAAA,WAAW,CAAC1sE,EAAD,EAAK;EACd,QAAI,KAAKqsE,OAAL,CAAa9qF,IAAb,KAAsB,CAA1B,EAA6B,OAAO,KAAP;;EAC7B,UAAMqrF,MAAM,GAAG,KAAKP,OAAL,CAAazqF,GAAb,CAAiB,KAAKyqF,OAAL,CAAa9qF,IAAb,KAAsB,CAAvC,CAAf;;EACA,UAAM6yC,MAAM,GAAGp0B,EAAE,CAAClgB,QAAH,CAAY8sF,MAAZ,CAAf;EACA,QAAIx4C,MAAM,GAAG,KAAKk4C,sBAAlB,EAA0C,OAAO,IAAP;EAC1C,WAAO,KAAP;EACD;;EACD7yF,EAAAA,QAAQ,GAAG;EACT,UAAM0jB,IAAI,GAAG,IAAIiO,eAAJ,EAAb;EACA,UAAMxU,IAAI,GAAGuG,IAAI,CAACqC,gBAAL,CAAsB,KAAKL,cAAL,EAAtB,CAAb;EACA,WAAOvI,IAAI,CAACnd,QAAL,EAAP;EACD;;EACD8K,EAAAA,SAAS,GAAG;EACV,QAAI,KAAK8nF,OAAL,CAAa9qF,IAAb,KAAsB,CAA1B,EAA6B,OAAO,IAAP;EAC7B,UAAMsrF,OAAO,GAAG,IAAIpvF,UAAJ,CAAe,KAAK4uF,OAAL,CAAazqF,GAAb,CAAiB,CAAjB,CAAf,CAAhB;;EACA,UAAMgrF,MAAM,GAAG,KAAKP,OAAL,CAAazqF,GAAb,CAAiB,KAAKyqF,OAAL,CAAa9qF,IAAb,KAAsB,CAAvC,CAAf;;EACA,QAAIsrF,OAAO,CAAC3vF,MAAR,CAAe0vF,MAAf,CAAJ,EAA4B,OAAO,IAAP;;EAC5B,SAAKP,OAAL,CAAalrF,GAAb,CAAiB0rF,OAAjB;EACD;;EACDC,EAAAA,wBAAwB,CAACC,qBAAD,EAAwB;EAC9C,SAAKT,sBAAL,GAA8BS,qBAA9B;EACD;;EAxDsC;EA0DzCX,mBAAmB,CAACG,qBAApB,GAA4C,IAAI1oF,KAAJ,CAAU,CAAV,EAAaC,IAAb,CAAkB,IAAlB,CAA5C;;ECpDe,MAAMkpF,sBAAN,CAA6B;EAC1C5zF,EAAAA,WAAW,GAAG;EACZ4zF,IAAAA,sBAAsB,CAACvwF,YAAvB,CAAoCC,KAApC,CAA0C,IAA1C,EAAgDC,SAAhD;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKwwF,qBAAL,GAA6B,GAA7B;EACA,SAAKC,mBAAL,GAA2B,IAA3B;EACA,SAAKC,uBAAL,GAA+B,CAA/B;EACA,SAAKC,QAAL,GAAgB,IAAhB;EACA,SAAKn5C,SAAL,GAAiB,GAAjB;EACA,SAAK5oB,eAAL,GAAuB,IAAvB;EACA,SAAKgiE,UAAL,GAAkB,IAAlB;EACA,SAAKh8B,GAAL,GAAW,IAAX;EACA,SAAKi8B,GAAL,GAAW,IAAX;EACA,SAAKC,GAAL,GAAW,IAAX;EACA,SAAKC,GAAL,GAAW,IAAX;EACA,SAAKC,KAAL,GAAa,IAAIz1D,WAAJ,EAAb;EACA,SAAK01D,KAAL,GAAa,IAAI11D,WAAJ,EAAb;EACA,SAAK21D,QAAL,GAAgB,IAAI31D,WAAJ,EAAhB;EACA,SAAK41D,QAAL,GAAgB,IAAI51D,WAAJ,EAAhB;EACA,SAAK61D,KAAL,GAAa,CAAb;EACA,SAAKC,sBAAL,GAA8B,KAA9B;EACA,UAAMtiE,cAAc,GAAG7uB,SAAS,CAAC,CAAD,CAAhC;EAAA,UAAqCoxF,SAAS,GAAGpxF,SAAS,CAAC,CAAD,CAA1D;EAAA,UAA+DmD,QAAQ,GAAGnD,SAAS,CAAC,CAAD,CAAnF;EACA,SAAK0uB,eAAL,GAAuBG,cAAvB;EACA,SAAK6hE,UAAL,GAAkBU,SAAlB;EACA,SAAK18B,GAAL,GAAW,IAAI76B,qBAAJ,EAAX;EACA,SAAK02D,mBAAL,GAA2Bl0F,IAAI,CAACqX,EAAL,GAAU,GAAV,GAAgB09E,SAAS,CAAC7J,mBAAV,EAA3C;EACA,QAAI6J,SAAS,CAAC7J,mBAAV,MAAmC,CAAnC,IAAwC6J,SAAS,CAACjK,YAAV,OAA6B3B,gBAAgB,CAACM,UAA1F,EAAsG,KAAK0K,uBAAL,GAA+BH,sBAAsB,CAACgB,0BAAtD;EACtG,SAAK7oF,IAAL,CAAUrF,QAAV;EACD;;EACDmuF,EAAAA,cAAc,CAAC7oF,CAAD,EAAI8oF,aAAJ,EAAmB;EAC/B,SAAKZ,GAAL,GAAW,KAAKC,GAAhB;EACA,SAAKA,GAAL,GAAW,KAAKC,GAAhB;EACA,SAAKA,GAAL,GAAWpoF,CAAX;;EACA,SAAKqoF,KAAL,CAAW9yD,cAAX,CAA0B,KAAK2yD,GAA/B,EAAoC,KAAKC,GAAzC;;EACA,SAAKY,oBAAL,CAA0B,KAAKV,KAA/B,EAAsC,KAAKI,KAA3C,EAAkD,KAAK55C,SAAvD,EAAkE,KAAK05C,QAAvE;;EACA,SAAKD,KAAL,CAAW/yD,cAAX,CAA0B,KAAK4yD,GAA/B,EAAoC,KAAKC,GAAzC;;EACA,SAAKW,oBAAL,CAA0B,KAAKT,KAA/B,EAAsC,KAAKG,KAA3C,EAAkD,KAAK55C,SAAvD,EAAkE,KAAK25C,QAAvE;EACA,QAAI,KAAKL,GAAL,CAASrwF,MAAT,CAAgB,KAAKswF,GAArB,CAAJ,EAA+B,OAAO,IAAP;EAC/B,UAAMtI,WAAW,GAAGvyE,WAAW,CAACtQ,KAAZ,CAAkB,KAAKirF,GAAvB,EAA4B,KAAKC,GAAjC,EAAsC,KAAKC,GAA3C,CAApB;EACA,UAAMY,WAAW,GAAGlJ,WAAW,KAAKvyE,WAAW,CAACS,SAA5B,IAAyC,KAAKy6E,KAAL,KAAe7+B,QAAQ,CAACz7C,IAAjE,IAAyE2xE,WAAW,KAAKvyE,WAAW,CAACW,gBAA5B,IAAgD,KAAKu6E,KAAL,KAAe7+B,QAAQ,CAAC37C,KAArK;EACA,QAAI6xE,WAAW,KAAK,CAApB,EACE,KAAKmJ,YAAL,CAAkBH,aAAlB,EADF,KAEK,IAAIE,WAAJ,EACH,KAAKE,cAAL,CAAoBpJ,WAApB,EAAiCgJ,aAAjC,EADG,KAGH,KAAKK,aAAL,CAAmBrJ,WAAnB,EAAgCgJ,aAAhC;EAEH;;EACDM,EAAAA,aAAa,CAAC3tE,EAAD,EAAKvb,EAAL,EAAS;EACpB,UAAM8yB,GAAG,GAAG,IAAIJ,WAAJ,CAAgBnX,EAAhB,EAAoBvb,EAApB,CAAZ;EACA,UAAMmpF,OAAO,GAAG,IAAIz2D,WAAJ,EAAhB;EACA,SAAKm2D,oBAAL,CAA0B/1D,GAA1B,EAA+B42B,QAAQ,CAACz7C,IAAxC,EAA8C,KAAK0gC,SAAnD,EAA8Dw6C,OAA9D;EACA,UAAMC,OAAO,GAAG,IAAI12D,WAAJ,EAAhB;EACA,SAAKm2D,oBAAL,CAA0B/1D,GAA1B,EAA+B42B,QAAQ,CAAC37C,KAAxC,EAA+C,KAAK4gC,SAApD,EAA+Dy6C,OAA/D;EACA,UAAMlvF,EAAE,GAAG8F,EAAE,CAAC5J,CAAH,GAAOmlB,EAAE,CAACnlB,CAArB;EACA,UAAM+D,EAAE,GAAG6F,EAAE,CAAC3J,CAAH,GAAOklB,EAAE,CAACllB,CAArB;EACA,UAAMq9B,KAAK,GAAGhgC,IAAI,CAACigC,KAAL,CAAWx5B,EAAX,EAAeD,EAAf,CAAd;;EACA,YAAQ,KAAK6tF,UAAL,CAAgB3J,cAAhB,EAAR;EACA,WAAKvB,gBAAgB,CAACI,SAAtB;EACE,aAAK6K,QAAL,CAAcZ,KAAd,CAAoBiC,OAAO,CAACnpF,EAA5B;;EACA,aAAKqpF,iBAAL,CAAuBrpF,EAAvB,EAA2B0zB,KAAK,GAAGhgC,IAAI,CAACqX,EAAL,GAAU,CAA7C,EAAgD2oB,KAAK,GAAGhgC,IAAI,CAACqX,EAAL,GAAU,CAAlE,EAAqEsC,WAAW,CAACS,SAAjF,EAA4F,KAAK6gC,SAAjG;;EACA,aAAKm5C,QAAL,CAAcZ,KAAd,CAAoBkC,OAAO,CAACppF,EAA5B;;EACA;;EACF,WAAK68E,gBAAgB,CAACkC,QAAtB;EACE,aAAK+I,QAAL,CAAcZ,KAAd,CAAoBiC,OAAO,CAACnpF,EAA5B;;EACA,aAAK8nF,QAAL,CAAcZ,KAAd,CAAoBkC,OAAO,CAACppF,EAA5B;;EACA;;EACF,WAAK68E,gBAAgB,CAACmC,UAAtB;EACE,cAAMsK,mBAAmB,GAAG,IAAInxF,UAAJ,EAA5B;EACAmxF,QAAAA,mBAAmB,CAAClzF,CAApB,GAAwB1C,IAAI,CAACC,GAAL,CAAS,KAAKg7C,SAAd,IAA2Bj7C,IAAI,CAACksC,GAAL,CAASlM,KAAT,CAAnD;EACA41D,QAAAA,mBAAmB,CAACjzF,CAApB,GAAwB3C,IAAI,CAACC,GAAL,CAAS,KAAKg7C,SAAd,IAA2Bj7C,IAAI,CAAC+mC,GAAL,CAAS/G,KAAT,CAAnD;EACA,cAAM61D,gBAAgB,GAAG,IAAIpxF,UAAJ,CAAegxF,OAAO,CAACnpF,EAAR,CAAW5J,CAAX,GAAekzF,mBAAmB,CAAClzF,CAAlD,EAAqD+yF,OAAO,CAACnpF,EAAR,CAAW3J,CAAX,GAAeizF,mBAAmB,CAACjzF,CAAxF,CAAzB;EACA,cAAMmzF,gBAAgB,GAAG,IAAIrxF,UAAJ,CAAeixF,OAAO,CAACppF,EAAR,CAAW5J,CAAX,GAAekzF,mBAAmB,CAAClzF,CAAlD,EAAqDgzF,OAAO,CAACppF,EAAR,CAAW3J,CAAX,GAAeizF,mBAAmB,CAACjzF,CAAxF,CAAzB;;EACA,aAAKyxF,QAAL,CAAcZ,KAAd,CAAoBqC,gBAApB;;EACA,aAAKzB,QAAL,CAAcZ,KAAd,CAAoBsC,gBAApB;;EACA;EAlBF;EAoBD;;EACD3vE,EAAAA,cAAc,GAAG;EACf,UAAMvb,GAAG,GAAG,KAAKwpF,QAAL,CAAcjuE,cAAd,EAAZ;;EACA,WAAOvb,GAAP;EACD;;EACDmrF,EAAAA,YAAY,CAAC3pF,CAAD,EAAI4pF,OAAJ,EAAaC,OAAb,EAAsBnvF,QAAtB,EAAgC;EAC1C,UAAM+2B,KAAK,GAAGnjB,YAAY,CAAC7M,YAAb,CAA0BmoF,OAAO,CAACnuE,EAAlC,EAAsCmuE,OAAO,CAAC1pF,EAA9C,EAAkD2pF,OAAO,CAACpuE,EAA1D,EAA8DouE,OAAO,CAAC3pF,EAAtE,CAAd;;EACA,QAAIuxB,KAAK,KAAK,IAAd,EAAoB;EAClB,YAAMq4D,UAAU,GAAGpvF,QAAQ,IAAI,GAAZ,GAAkB,GAAlB,GAAwB+2B,KAAK,CAAC/2B,QAAN,CAAesF,CAAf,IAAoBpM,IAAI,CAACC,GAAL,CAAS6G,QAAT,CAA/D;;EACA,UAAIovF,UAAU,IAAI,KAAK7B,UAAL,CAAgBlJ,aAAhB,EAAlB,EAAmD;EACjD,aAAKiJ,QAAL,CAAcZ,KAAd,CAAoB31D,KAApB;;EACA,eAAO,IAAP;EACD;EACF;;EACD,SAAKs4D,mBAAL,CAAyBH,OAAzB,EAAkCC,OAAlC,EAA2CnvF,QAA3C,EAAqD,KAAKutF,UAAL,CAAgBlJ,aAAhB,EAArD;EACD;;EACDmK,EAAAA,cAAc,CAACpJ,WAAD,EAAcgJ,aAAd,EAA6B;EACzC,QAAI,KAAKP,QAAL,CAAcroF,EAAd,CAAiBxF,QAAjB,CAA0B,KAAK8tF,QAAL,CAAc/sE,EAAxC,IAA8C,KAAKozB,SAAL,GAAiB+4C,sBAAsB,CAACoC,gCAA1F,EAA4H;EAC1H,WAAKhC,QAAL,CAAcZ,KAAd,CAAoB,KAAKmB,QAAL,CAAcroF,EAAlC;;EACA,aAAO,IAAP;EACD;;EACD,QAAI,KAAK+nF,UAAL,CAAgBvJ,YAAhB,OAAmC3B,gBAAgB,CAAC0B,UAAxD,EAAoE;EAClE,WAAKkL,YAAL,CAAkB,KAAKxB,GAAvB,EAA4B,KAAKI,QAAjC,EAA2C,KAAKC,QAAhD,EAA0D,KAAK35C,SAA/D;EACD,KAFD,MAEO,IAAI,KAAKo5C,UAAL,CAAgBvJ,YAAhB,OAAmC3B,gBAAgB,CAACyB,UAAxD,EAAoE;EACzE,WAAKyL,YAAL,CAAkB,KAAK1B,QAAvB,EAAiC,KAAKC,QAAtC;EACD,KAFM,MAEA;EACL,UAAIM,aAAJ,EAAmB,KAAKd,QAAL,CAAcZ,KAAd,CAAoB,KAAKmB,QAAL,CAAcroF,EAAlC;EACnB,WAAKgqF,eAAL,CAAqB,KAAK/B,GAA1B,EAA+B,KAAKI,QAAL,CAAcroF,EAA7C,EAAiD,KAAKsoF,QAAL,CAAc/sE,EAA/D,EAAmEqkE,WAAnE,EAAgF,KAAKjxC,SAArF;;EACA,WAAKm5C,QAAL,CAAcZ,KAAd,CAAoB,KAAKoB,QAAL,CAAc/sE,EAAlC;EACD;EACF;;EACD0uE,EAAAA,YAAY,CAACnqF,CAAD,EAAI;EACd,SAAKgoF,QAAL,CAAcZ,KAAd,CAAoB,IAAI/uF,UAAJ,CAAe2H,CAAC,CAAC1J,CAAF,GAAM,KAAKu4C,SAA1B,EAAqC7uC,CAAC,CAACzJ,CAAF,GAAM,KAAKs4C,SAAhD,CAApB;;EACA,SAAKm5C,QAAL,CAAcZ,KAAd,CAAoB,IAAI/uF,UAAJ,CAAe2H,CAAC,CAAC1J,CAAF,GAAM,KAAKu4C,SAA1B,EAAqC7uC,CAAC,CAACzJ,CAAF,GAAM,KAAKs4C,SAAhD,CAApB;;EACA,SAAKm5C,QAAL,CAAcZ,KAAd,CAAoB,IAAI/uF,UAAJ,CAAe2H,CAAC,CAAC1J,CAAF,GAAM,KAAKu4C,SAA1B,EAAqC7uC,CAAC,CAACzJ,CAAF,GAAM,KAAKs4C,SAAhD,CAApB;;EACA,SAAKm5C,QAAL,CAAcZ,KAAd,CAAoB,IAAI/uF,UAAJ,CAAe2H,CAAC,CAAC1J,CAAF,GAAM,KAAKu4C,SAA1B,EAAqC7uC,CAAC,CAACzJ,CAAF,GAAM,KAAKs4C,SAAhD,CAApB;;EACA,SAAKm5C,QAAL,CAAc7oF,SAAd;EACD;;EACDirF,EAAAA,WAAW,CAACxvE,EAAD,EAAKrc,SAAL,EAAgB;EACzB,SAAKypF,QAAL,CAAcT,MAAd,CAAqB3sE,EAArB,EAAyBrc,SAAzB;EACD;;EACD8rF,EAAAA,eAAe,GAAG;EAChB,SAAKrC,QAAL,CAAcZ,KAAd,CAAoB,KAAKoB,QAAL,CAAc/sE,EAAlC;EACD;;EACDyuE,EAAAA,eAAe,CAAClqF,CAAD,EAAIyb,EAAJ,EAAQvb,EAAR,EAAYrB,SAAZ,EAAuBksC,MAAvB,EAA+B;EAC5C,UAAM1R,GAAG,GAAG5d,EAAE,CAACnlB,CAAH,GAAO0J,CAAC,CAAC1J,CAArB;EACA,UAAMgjC,GAAG,GAAG7d,EAAE,CAACllB,CAAH,GAAOyJ,CAAC,CAACzJ,CAArB;EACA,QAAI+zF,UAAU,GAAG12F,IAAI,CAACigC,KAAL,CAAWyF,GAAX,EAAgBD,GAAhB,CAAjB;EACA,UAAM5tB,GAAG,GAAGvL,EAAE,CAAC5J,CAAH,GAAO0J,CAAC,CAAC1J,CAArB;EACA,UAAMoV,GAAG,GAAGxL,EAAE,CAAC3J,CAAH,GAAOyJ,CAAC,CAACzJ,CAArB;EACA,UAAMg0F,QAAQ,GAAG32F,IAAI,CAACigC,KAAL,CAAWnoB,GAAX,EAAgBD,GAAhB,CAAjB;;EACA,QAAI5M,SAAS,KAAK0O,WAAW,CAACS,SAA9B,EAAyC;EACvC,UAAIs8E,UAAU,IAAIC,QAAlB,EAA4BD,UAAU,IAAI,MAAM12F,IAAI,CAACqX,EAAzB;EAC7B,KAFD,MAEO;EACL,UAAIq/E,UAAU,IAAIC,QAAlB,EAA4BD,UAAU,IAAI,MAAM12F,IAAI,CAACqX,EAAzB;EAC7B;;EACD,SAAK+8E,QAAL,CAAcZ,KAAd,CAAoB3rE,EAApB;;EACA,SAAK8tE,iBAAL,CAAuBvpF,CAAvB,EAA0BsqF,UAA1B,EAAsCC,QAAtC,EAAgD1rF,SAAhD,EAA2DksC,MAA3D;;EACA,SAAKi9C,QAAL,CAAcZ,KAAd,CAAoBlnF,EAApB;EACD;;EACDsqF,EAAAA,cAAc,GAAG;EACf,SAAKxC,QAAL,CAAcZ,KAAd,CAAoB,KAAKoB,QAAL,CAActoF,EAAlC;EACD;;EACDuqF,EAAAA,gBAAgB,CAACC,EAAD,EAAKC,EAAL,EAASx5B,IAAT,EAAe;EAC7B,SAAKg3B,GAAL,GAAWuC,EAAX;EACA,SAAKtC,GAAL,GAAWuC,EAAX;EACA,SAAKlC,KAAL,GAAat3B,IAAb;;EACA,SAAKm3B,KAAL,CAAW/yD,cAAX,CAA0Bm1D,EAA1B,EAA8BC,EAA9B;;EACA,SAAK5B,oBAAL,CAA0B,KAAKT,KAA/B,EAAsCn3B,IAAtC,EAA4C,KAAKtiB,SAAjD,EAA4D,KAAK25C,QAAjE;EACD;;EACDuB,EAAAA,mBAAmB,CAACH,OAAD,EAAUC,OAAV,EAAmBnvF,QAAnB,EAA6BsjF,UAA7B,EAAyC;EAC1D,UAAMvmC,MAAM,GAAG,KAAK4wC,KAAL,CAAWnoF,EAA1B;EACA,UAAM0qF,IAAI,GAAG5xD,KAAK,CAACpF,KAAN,CAAY6jB,MAAZ,EAAoB,KAAK4wC,KAAL,CAAW5sE,EAA/B,CAAb;EACA,UAAMovE,OAAO,GAAG7xD,KAAK,CAAC4B,oBAAN,CAA2B,KAAKytD,KAAL,CAAW5sE,EAAtC,EAA0Cg8B,MAA1C,EAAkD,KAAK6wC,KAAL,CAAWpoF,EAA7D,CAAhB;EACA,UAAM4qF,WAAW,GAAGD,OAAO,GAAG,CAA9B;EACA,UAAME,MAAM,GAAG/xD,KAAK,CAACnlB,SAAN,CAAgB+2E,IAAI,GAAGE,WAAvB,CAAf;EACA,UAAME,WAAW,GAAGhyD,KAAK,CAACnlB,SAAN,CAAgBk3E,MAAM,GAAGn3F,IAAI,CAACqX,EAA9B,CAApB;EACA,UAAMggF,SAAS,GAAGjN,UAAU,GAAGtjF,QAA/B;EACA,UAAMwwF,UAAU,GAAGD,SAAS,GAAGr3F,IAAI,CAACC,GAAL,CAASD,IAAI,CAAC+mC,GAAL,CAASmwD,WAAT,CAAT,CAA/B;EACA,UAAMK,YAAY,GAAGzwF,QAAQ,GAAGwwF,UAAhC;EACA,UAAME,SAAS,GAAG3zC,MAAM,CAACnhD,CAAP,GAAW20F,SAAS,GAAGr3F,IAAI,CAACksC,GAAL,CAASkrD,WAAT,CAAzC;EACA,UAAMK,SAAS,GAAG5zC,MAAM,CAAClhD,CAAP,GAAW00F,SAAS,GAAGr3F,IAAI,CAAC+mC,GAAL,CAASqwD,WAAT,CAAzC;EACA,UAAMM,UAAU,GAAG,IAAIjzF,UAAJ,CAAe+yF,SAAf,EAA0BC,SAA1B,CAAnB;EACA,UAAME,YAAY,GAAG,IAAI34D,WAAJ,CAAgB6kB,MAAhB,EAAwB6zC,UAAxB,CAArB;EACA,UAAME,YAAY,GAAGD,YAAY,CAACz2D,gBAAb,CAA8B,GAA9B,EAAmCq2D,YAAnC,CAArB;EACA,UAAMM,aAAa,GAAGF,YAAY,CAACz2D,gBAAb,CAA8B,GAA9B,EAAmC,CAACq2D,YAApC,CAAtB;;EACA,QAAI,KAAK1C,KAAL,KAAe7+B,QAAQ,CAACz7C,IAA5B,EAAkC;EAChC,WAAK65E,QAAL,CAAcZ,KAAd,CAAoBoE,YAApB;;EACA,WAAKxD,QAAL,CAAcZ,KAAd,CAAoBqE,aAApB;EACD,KAHD,MAGO;EACL,WAAKzD,QAAL,CAAcZ,KAAd,CAAoBqE,aAApB;;EACA,WAAKzD,QAAL,CAAcZ,KAAd,CAAoBoE,YAApB;EACD;EACF;;EACDjC,EAAAA,iBAAiB,CAACvpF,CAAD,EAAIsqF,UAAJ,EAAgBC,QAAhB,EAA0B1rF,SAA1B,EAAqCksC,MAArC,EAA6C;EAC5D,UAAM6xB,eAAe,GAAG/9D,SAAS,KAAK0O,WAAW,CAACS,SAA1B,GAAsC,CAAC,CAAvC,GAA2C,CAAnE;EACA,UAAM09E,UAAU,GAAG93F,IAAI,CAACC,GAAL,CAASy2F,UAAU,GAAGC,QAAtB,CAAnB;EACA,UAAMoB,KAAK,GAAG/3F,IAAI,CAAC6S,KAAL,CAAWilF,UAAU,GAAG,KAAK5D,mBAAlB,GAAwC,GAAnD,CAAd;EACA,QAAI6D,KAAK,GAAG,CAAZ,EAAe,OAAO,IAAP;EACf,UAAMC,QAAQ,GAAGF,UAAU,GAAGC,KAA9B;EACA,UAAM/wE,EAAE,GAAG,IAAIviB,UAAJ,EAAX;;EACA,SAAK,IAAI1D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGg3F,KAApB,EAA2Bh3F,CAAC,EAA5B,EAAgC;EAC9B,YAAMi/B,KAAK,GAAG02D,UAAU,GAAG1tB,eAAe,GAAGjoE,CAAlB,GAAsBi3F,QAAjD;EACAhxE,MAAAA,EAAE,CAACtkB,CAAH,GAAO0J,CAAC,CAAC1J,CAAF,GAAMy0C,MAAM,GAAGn3C,IAAI,CAACksC,GAAL,CAASlM,KAAT,CAAtB;EACAhZ,MAAAA,EAAE,CAACrkB,CAAH,GAAOyJ,CAAC,CAACzJ,CAAF,GAAMw0C,MAAM,GAAGn3C,IAAI,CAAC+mC,GAAL,CAAS/G,KAAT,CAAtB;;EACA,WAAKo0D,QAAL,CAAcZ,KAAd,CAAoBxsE,EAApB;EACD;EACF;;EACDmuE,EAAAA,oBAAoB,CAAC/1D,GAAD,EAAMm+B,IAAN,EAAYz2D,QAAZ,EAAsBmxF,MAAtB,EAA8B;EAChD,UAAMC,QAAQ,GAAG36B,IAAI,KAAKvH,QAAQ,CAACz7C,IAAlB,GAAyB,CAAzB,GAA6B,CAAC,CAA/C;EACA,UAAM/T,EAAE,GAAG44B,GAAG,CAAC9yB,EAAJ,CAAO5J,CAAP,GAAW08B,GAAG,CAACvX,EAAJ,CAAOnlB,CAA7B;EACA,UAAM+D,EAAE,GAAG24B,GAAG,CAAC9yB,EAAJ,CAAO3J,CAAP,GAAWy8B,GAAG,CAACvX,EAAJ,CAAOllB,CAA7B;EACA,UAAMiH,GAAG,GAAG5J,IAAI,CAAC2G,IAAL,CAAUH,EAAE,GAAGA,EAAL,GAAUC,EAAE,GAAGA,EAAzB,CAAZ;EACA,UAAM86B,EAAE,GAAG22D,QAAQ,GAAGpxF,QAAX,GAAsBN,EAAtB,GAA2BoD,GAAtC;EACA,UAAM43B,EAAE,GAAG02D,QAAQ,GAAGpxF,QAAX,GAAsBL,EAAtB,GAA2BmD,GAAtC;EACAquF,IAAAA,MAAM,CAACpwE,EAAP,CAAUnlB,CAAV,GAAc08B,GAAG,CAACvX,EAAJ,CAAOnlB,CAAP,GAAW8+B,EAAzB;EACAy2D,IAAAA,MAAM,CAACpwE,EAAP,CAAUllB,CAAV,GAAcy8B,GAAG,CAACvX,EAAJ,CAAOllB,CAAP,GAAW4+B,EAAzB;EACA02D,IAAAA,MAAM,CAAC3rF,EAAP,CAAU5J,CAAV,GAAc08B,GAAG,CAAC9yB,EAAJ,CAAO5J,CAAP,GAAW8+B,EAAzB;EACAy2D,IAAAA,MAAM,CAAC3rF,EAAP,CAAU3J,CAAV,GAAcy8B,GAAG,CAAC9yB,EAAJ,CAAO3J,CAAP,GAAW4+B,EAAzB;EACD;;EACDg0D,EAAAA,aAAa,CAACrJ,WAAD,EAAcgJ,aAAd,EAA6B;EACxC,SAAK78B,GAAL,CAASp8B,mBAAT,CAA6B,KAAK04D,QAAL,CAAc9sE,EAA3C,EAA+C,KAAK8sE,QAAL,CAAcroF,EAA7D,EAAiE,KAAKsoF,QAAL,CAAc/sE,EAA/E,EAAmF,KAAK+sE,QAAL,CAActoF,EAAjG;;EACA,QAAI,KAAK+rD,GAAL,CAAS37B,eAAT,EAAJ,EAAgC;EAC9B,WAAK03D,QAAL,CAAcZ,KAAd,CAAoB,KAAKn7B,GAAL,CAASv7B,eAAT,CAAyB,CAAzB,CAApB;EACD,KAFD,MAEO;EACL,WAAKg4D,sBAAL,GAA8B,IAA9B;;EACA,UAAI,KAAKH,QAAL,CAAcroF,EAAd,CAAiBxF,QAAjB,CAA0B,KAAK8tF,QAAL,CAAc/sE,EAAxC,IAA8C,KAAKozB,SAAL,GAAiB+4C,sBAAsB,CAACmE,uCAA1F,EAAmI;EACjI,aAAK/D,QAAL,CAAcZ,KAAd,CAAoB,KAAKmB,QAAL,CAAcroF,EAAlC;EACD,OAFD,MAEO;EACL,aAAK8nF,QAAL,CAAcZ,KAAd,CAAoB,KAAKmB,QAAL,CAAcroF,EAAlC;;EACA,YAAI,KAAK6nF,uBAAL,GAA+B,CAAnC,EAAsC;EACpC,gBAAM9yB,IAAI,GAAG,IAAI58D,UAAJ,CAAe,CAAC,KAAK0vF,uBAAL,GAA+B,KAAKQ,QAAL,CAAcroF,EAAd,CAAiB5J,CAAhD,GAAoD,KAAK6xF,GAAL,CAAS7xF,CAA9D,KAAoE,KAAKyxF,uBAAL,GAA+B,CAAnG,CAAf,EAAsH,CAAC,KAAKA,uBAAL,GAA+B,KAAKQ,QAAL,CAAcroF,EAAd,CAAiB3J,CAAhD,GAAoD,KAAK4xF,GAAL,CAAS5xF,CAA9D,KAAoE,KAAKwxF,uBAAL,GAA+B,CAAnG,CAAtH,CAAb;;EACA,eAAKC,QAAL,CAAcZ,KAAd,CAAoBnyB,IAApB;;EACA,gBAAMpjB,IAAI,GAAG,IAAIx5C,UAAJ,CAAe,CAAC,KAAK0vF,uBAAL,GAA+B,KAAKS,QAAL,CAAc/sE,EAAd,CAAiBnlB,CAAhD,GAAoD,KAAK6xF,GAAL,CAAS7xF,CAA9D,KAAoE,KAAKyxF,uBAAL,GAA+B,CAAnG,CAAf,EAAsH,CAAC,KAAKA,uBAAL,GAA+B,KAAKS,QAAL,CAAc/sE,EAAd,CAAiBllB,CAAhD,GAAoD,KAAK4xF,GAAL,CAAS5xF,CAA9D,KAAoE,KAAKwxF,uBAAL,GAA+B,CAAnG,CAAtH,CAAb;;EACA,eAAKC,QAAL,CAAcZ,KAAd,CAAoBv1C,IAApB;EACD,SALD,MAKO;EACL,eAAKm2C,QAAL,CAAcZ,KAAd,CAAoB,KAAKe,GAAzB;EACD;;EACD,aAAKH,QAAL,CAAcZ,KAAd,CAAoB,KAAKoB,QAAL,CAAc/sE,EAAlC;EACD;EACF;EACF;;EACD0xB,EAAAA,YAAY,CAACntC,CAAD,EAAI;EACd,UAAM4a,EAAE,GAAG,IAAIviB,UAAJ,CAAe2H,CAAC,CAAC1J,CAAF,GAAM,KAAKu4C,SAA1B,EAAqC7uC,CAAC,CAACzJ,CAAvC,CAAX;;EACA,SAAKyxF,QAAL,CAAcZ,KAAd,CAAoBxsE,EAApB;;EACA,SAAK2uE,iBAAL,CAAuBvpF,CAAvB,EAA0B,GAA1B,EAA+B,MAAMpM,IAAI,CAACqX,EAA1C,EAA8C,CAAC,CAA/C,EAAkD,KAAK4jC,SAAvD;;EACA,SAAKm5C,QAAL,CAAc7oF,SAAd;EACD;;EACD8qF,EAAAA,YAAY,CAACL,OAAD,EAAUC,OAAV,EAAmB;EAC7B,SAAK7B,QAAL,CAAcZ,KAAd,CAAoBwC,OAAO,CAAC1pF,EAA5B;;EACA,SAAK8nF,QAAL,CAAcZ,KAAd,CAAoByC,OAAO,CAACpuE,EAA5B;EACD;;EACD1b,EAAAA,IAAI,CAACrF,QAAD,EAAW;EACb,SAAKm0C,SAAL,GAAiBn0C,QAAjB;EACA,SAAKmtF,qBAAL,GAA6BntF,QAAQ,IAAI,IAAI9G,IAAI,CAACksC,GAAL,CAAS,KAAKgoD,mBAAL,GAA2B,GAApC,CAAR,CAArC;EACA,SAAKE,QAAL,GAAgB,IAAIhB,mBAAJ,EAAhB;;EACA,SAAKgB,QAAL,CAAcz3D,iBAAd,CAAgC,KAAKtK,eAArC;;EACA,SAAK+hE,QAAL,CAAcN,wBAAd,CAAuChtF,QAAQ,GAAGktF,sBAAsB,CAACoE,iCAAzE;EACD;;EACD/C,EAAAA,YAAY,CAACH,aAAD,EAAgB;EAC1B,SAAK78B,GAAL,CAASp8B,mBAAT,CAA6B,KAAKq4D,GAAlC,EAAuC,KAAKC,GAA5C,EAAiD,KAAKA,GAAtD,EAA2D,KAAKC,GAAhE;;EACA,UAAM6D,MAAM,GAAG,KAAKhgC,GAAL,CAASh8B,kBAAT,EAAf;;EACA,QAAIg8D,MAAM,IAAI,CAAd,EACE,IAAI,KAAKhE,UAAL,CAAgBvJ,YAAhB,OAAmC3B,gBAAgB,CAACyB,UAApD,IAAkE,KAAKyJ,UAAL,CAAgBvJ,YAAhB,OAAmC3B,gBAAgB,CAAC0B,UAA1H,EAAsI;EACpI,UAAIqK,aAAJ,EAAmB,KAAKd,QAAL,CAAcZ,KAAd,CAAoB,KAAKmB,QAAL,CAAcroF,EAAlC;;EACnB,WAAK8nF,QAAL,CAAcZ,KAAd,CAAoB,KAAKoB,QAAL,CAAc/sE,EAAlC;EACD,KAHD,MAGO;EACL,WAAKyuE,eAAL,CAAqB,KAAK/B,GAA1B,EAA+B,KAAKI,QAAL,CAAcroF,EAA7C,EAAiD,KAAKsoF,QAAL,CAAc/sE,EAA/D,EAAmElO,WAAW,CAACS,SAA/E,EAA0F,KAAK6gC,SAA/F;EACD;EAEJ;;EACD1vC,EAAAA,SAAS,GAAG;EACV,SAAK6oF,QAAL,CAAc7oF,SAAd;EACD;;EACD+sF,EAAAA,qBAAqB,GAAG;EACtB,WAAO,KAAKxD,sBAAZ;EACD;;EA9PyC;EAgQ5Cd,sBAAsB,CAACoC,gCAAvB,GAA0D,MAA1D;EACApC,sBAAsB,CAACmE,uCAAvB,GAAiE,MAAjE;EACAnE,sBAAsB,CAACoE,iCAAvB,GAA2D,MAA3D;EACApE,sBAAsB,CAACgB,0BAAvB,GAAoD,EAApD;;ECtQe,MAAMuD,kBAAN,CAAyB;EACtCn4F,EAAAA,WAAW,GAAG;EACZm4F,IAAAA,kBAAkB,CAAC90F,YAAnB,CAAgCC,KAAhC,CAAsC,IAAtC,EAA4CC,SAA5C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKw3C,SAAL,GAAiB,GAAjB;EACA,SAAK5oB,eAAL,GAAuB,IAAvB;EACA,SAAKgiE,UAAL,GAAkB,IAAlB;EACA,UAAM7hE,cAAc,GAAG7uB,SAAS,CAAC,CAAD,CAAhC;EAAA,UAAqCoxF,SAAS,GAAGpxF,SAAS,CAAC,CAAD,CAA1D;EACA,SAAK0uB,eAAL,GAAuBG,cAAvB;EACA,SAAK6hE,UAAL,GAAkBU,SAAlB;EACD;;EACD,SAAOyD,eAAP,CAAuB5tF,GAAvB,EAA4B;EAC1B,UAAMtE,IAAI,GAAG,IAAIuE,KAAJ,CAAUD,GAAG,CAAChH,MAAd,EAAsBkH,IAAtB,CAA2B,IAA3B,CAAb;;EACA,SAAK,IAAI/J,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGuF,IAAI,CAAC1C,MAAzB,EAAiC7C,CAAC,EAAlC,EACEuF,IAAI,CAACvF,CAAD,CAAJ,GAAU,IAAI0D,UAAJ,CAAemG,GAAG,CAAC7J,CAAD,CAAlB,CAAV;;EAEF,WAAOuF,IAAP;EACD;;EACDmyF,EAAAA,cAAc,CAACnzC,QAAD,EAAWx+C,QAAX,EAAqB;EACjC,SAAKm0C,SAAL,GAAiBn0C,QAAjB;EACA,QAAIA,QAAQ,KAAK,GAAjB,EAAsB,OAAO,IAAP;EACtB,UAAM4xF,WAAW,GAAG5xF,QAAQ,GAAG,GAA/B;EACA,UAAM6xF,WAAW,GAAG34F,IAAI,CAACC,GAAL,CAAS6G,QAAT,CAApB;EACA,UAAM8xF,MAAM,GAAG,KAAKC,SAAL,CAAeF,WAAf,CAAf;EACA,QAAIrzC,QAAQ,CAAC1hD,MAAT,IAAmB,CAAvB,EACE,KAAKk1F,iBAAL,CAAuBxzC,QAAQ,CAAC,CAAD,CAA/B,EAAoCszC,MAApC,EADF,KAGE,KAAKG,kBAAL,CAAwBzzC,QAAxB,EAAkCozC,WAAlC,EAA+CE,MAA/C;EAEF,UAAMI,QAAQ,GAAGJ,MAAM,CAACzyE,cAAP,EAAjB;EACA,QAAIuyE,WAAJ,EAAiB1sE,gBAAgB,CAAC9L,OAAjB,CAAyB84E,QAAzB;EACjB,WAAOA,QAAP;EACD;;EACDC,EAAAA,6BAA6B,CAAC3zC,QAAD,EAAWozC,WAAX,EAAwBE,MAAxB,EAAgC;EAC3D,UAAMM,OAAO,GAAG,KAAKC,iBAAL,CAAuB,KAAKl+C,SAA5B,CAAhB;;EACA,QAAIy9C,WAAJ,EAAiB;EACfE,MAAAA,MAAM,CAACpC,WAAP,CAAmBlxC,QAAnB,EAA6B,IAA7B;EACA,YAAM8zC,KAAK,GAAGzH,yBAAyB,CAACM,QAA1B,CAAmC3sC,QAAnC,EAA6C,CAAC4zC,OAA9C,CAAd;EACA,YAAM5tE,EAAE,GAAG8tE,KAAK,CAACx1F,MAAN,GAAe,CAA1B;EACAg1F,MAAAA,MAAM,CAAC/B,gBAAP,CAAwBuC,KAAK,CAAC9tE,EAAD,CAA7B,EAAmC8tE,KAAK,CAAC9tE,EAAE,GAAG,CAAN,CAAxC,EAAkD0qC,QAAQ,CAACz7C,IAA3D;EACAq+E,MAAAA,MAAM,CAACnC,eAAP;;EACA,WAAK,IAAI11F,CAAC,GAAGuqB,EAAE,GAAG,CAAlB,EAAqBvqB,CAAC,IAAI,CAA1B,EAA6BA,CAAC,EAA9B,EACE63F,MAAM,CAAC3D,cAAP,CAAsBmE,KAAK,CAACr4F,CAAD,CAA3B,EAAgC,IAAhC;EAEH,KATD,MASO;EACL63F,MAAAA,MAAM,CAACpC,WAAP,CAAmBlxC,QAAnB,EAA6B,KAA7B;EACA,YAAM+zC,KAAK,GAAG1H,yBAAyB,CAACM,QAA1B,CAAmC3sC,QAAnC,EAA6C4zC,OAA7C,CAAd;EACA,YAAM7tE,EAAE,GAAGguE,KAAK,CAACz1F,MAAN,GAAe,CAA1B;EACAg1F,MAAAA,MAAM,CAAC/B,gBAAP,CAAwBwC,KAAK,CAAC,CAAD,CAA7B,EAAkCA,KAAK,CAAC,CAAD,CAAvC,EAA4CrjC,QAAQ,CAACz7C,IAArD;EACAq+E,MAAAA,MAAM,CAACnC,eAAP;;EACA,WAAK,IAAI11F,CAAC,GAAG,CAAb,EAAgBA,CAAC,IAAIsqB,EAArB,EAAyBtqB,CAAC,EAA1B,EACE63F,MAAM,CAAC3D,cAAP,CAAsBoE,KAAK,CAACt4F,CAAD,CAA3B,EAAgC,IAAhC;EAEH;;EACD63F,IAAAA,MAAM,CAAChC,cAAP;EACAgC,IAAAA,MAAM,CAACrtF,SAAP;EACD;;EACD+tF,EAAAA,sBAAsB,CAACh0C,QAAD,EAAWiY,IAAX,EAAiBq7B,MAAjB,EAAyB;EAC7C,QAAIM,OAAO,GAAG,KAAKC,iBAAL,CAAuB,KAAKl+C,SAA5B,CAAd;EACA,QAAIsiB,IAAI,KAAKvH,QAAQ,CAAC37C,KAAtB,EAA6B6+E,OAAO,GAAG,CAACA,OAAX;EAC7B,UAAM/G,IAAI,GAAGR,yBAAyB,CAACM,QAA1B,CAAmC3sC,QAAnC,EAA6C4zC,OAA7C,CAAb;EACA,UAAM73F,CAAC,GAAG8wF,IAAI,CAACvuF,MAAL,GAAc,CAAxB;EACAg1F,IAAAA,MAAM,CAAC/B,gBAAP,CAAwB1E,IAAI,CAAC9wF,CAAC,GAAG,CAAL,CAA5B,EAAqC8wF,IAAI,CAAC,CAAD,CAAzC,EAA8C50B,IAA9C;;EACA,SAAK,IAAIx8D,CAAC,GAAG,CAAb,EAAgBA,CAAC,IAAIM,CAArB,EAAwBN,CAAC,EAAzB,EAA6B;EAC3B,YAAMm0F,aAAa,GAAGn0F,CAAC,KAAK,CAA5B;EACA63F,MAAAA,MAAM,CAAC3D,cAAP,CAAsB9C,IAAI,CAACpxF,CAAD,CAA1B,EAA+Bm0F,aAA/B;EACD;;EACD0D,IAAAA,MAAM,CAACrtF,SAAP;EACD;;EACDguF,EAAAA,sBAAsB,CAACj0C,QAAD,EAAWszC,MAAX,EAAmB;EACvC,UAAMM,OAAO,GAAG,KAAKC,iBAAL,CAAuB,KAAKl+C,SAA5B,CAAhB;EACA,UAAMo+C,KAAK,GAAG1H,yBAAyB,CAACM,QAA1B,CAAmC3sC,QAAnC,EAA6C4zC,OAA7C,CAAd;EACA,UAAM7tE,EAAE,GAAGguE,KAAK,CAACz1F,MAAN,GAAe,CAA1B;EACAg1F,IAAAA,MAAM,CAAC/B,gBAAP,CAAwBwC,KAAK,CAAC,CAAD,CAA7B,EAAkCA,KAAK,CAAC,CAAD,CAAvC,EAA4CrjC,QAAQ,CAACz7C,IAArD;;EACA,SAAK,IAAIxZ,CAAC,GAAG,CAAb,EAAgBA,CAAC,IAAIsqB,EAArB,EAAyBtqB,CAAC,EAA1B,EACE63F,MAAM,CAAC3D,cAAP,CAAsBoE,KAAK,CAACt4F,CAAD,CAA3B,EAAgC,IAAhC;;EAEF63F,IAAAA,MAAM,CAAChC,cAAP;EACAgC,IAAAA,MAAM,CAACpD,aAAP,CAAqB6D,KAAK,CAAChuE,EAAE,GAAG,CAAN,CAA1B,EAAoCguE,KAAK,CAAChuE,EAAD,CAAzC;EACA,UAAM+tE,KAAK,GAAGzH,yBAAyB,CAACM,QAA1B,CAAmC3sC,QAAnC,EAA6C,CAAC4zC,OAA9C,CAAd;EACA,UAAM5tE,EAAE,GAAG8tE,KAAK,CAACx1F,MAAN,GAAe,CAA1B;EACAg1F,IAAAA,MAAM,CAAC/B,gBAAP,CAAwBuC,KAAK,CAAC9tE,EAAD,CAA7B,EAAmC8tE,KAAK,CAAC9tE,EAAE,GAAG,CAAN,CAAxC,EAAkD0qC,QAAQ,CAACz7C,IAA3D;;EACA,SAAK,IAAIxZ,CAAC,GAAGuqB,EAAE,GAAG,CAAlB,EAAqBvqB,CAAC,IAAI,CAA1B,EAA6BA,CAAC,EAA9B,EACE63F,MAAM,CAAC3D,cAAP,CAAsBmE,KAAK,CAACr4F,CAAD,CAA3B,EAAgC,IAAhC;;EAEF63F,IAAAA,MAAM,CAAChC,cAAP;EACAgC,IAAAA,MAAM,CAACpD,aAAP,CAAqB4D,KAAK,CAAC,CAAD,CAA1B,EAA+BA,KAAK,CAAC,CAAD,CAApC;EACAR,IAAAA,MAAM,CAACrtF,SAAP;EACD;;EACDutF,EAAAA,iBAAiB,CAAC9xE,EAAD,EAAK4xE,MAAL,EAAa;EAC5B,YAAQ,KAAKvE,UAAL,CAAgB3J,cAAhB,EAAR;EACA,WAAKvB,gBAAgB,CAACI,SAAtB;EACEqP,QAAAA,MAAM,CAACr/C,YAAP,CAAoBvyB,EAApB;EACA;;EACF,WAAKmiE,gBAAgB,CAACmC,UAAtB;EACEsN,QAAAA,MAAM,CAACrC,YAAP,CAAoBvvE,EAApB;EACA;EANF;EAQD;;EACDwyE,EAAAA,YAAY,CAACl0C,QAAD,EAAWx+C,QAAX,EAAqB;EAC/B,SAAKm0C,SAAL,GAAiBn0C,QAAjB;EACA,QAAI,KAAK2yF,iBAAL,CAAuB3yF,QAAvB,CAAJ,EAAsC,OAAO,IAAP;EACtC,UAAM6xF,WAAW,GAAG34F,IAAI,CAACC,GAAL,CAAS6G,QAAT,CAApB;EACA,UAAM8xF,MAAM,GAAG,KAAKC,SAAL,CAAeF,WAAf,CAAf;;EACA,QAAIrzC,QAAQ,CAAC1hD,MAAT,IAAmB,CAAvB,EAA0B;EACxB,WAAKk1F,iBAAL,CAAuBxzC,QAAQ,CAAC,CAAD,CAA/B,EAAoCszC,MAApC;EACD,KAFD,MAGA,IAAI,KAAKvE,UAAL,CAAgB1J,aAAhB,EAAJ,EAAqC;EACnC,YAAM+N,WAAW,GAAG5xF,QAAQ,GAAG,GAA/B;EACA,WAAKmyF,6BAAL,CAAmC3zC,QAAnC,EAA6CozC,WAA7C,EAA0DE,MAA1D;EACD,KAHD,MAGO;EACL,WAAKW,sBAAL,CAA4Bj0C,QAA5B,EAAsCszC,MAAtC;EACD;;EAED,UAAMc,SAAS,GAAGd,MAAM,CAACzyE,cAAP,EAAlB;EACA,WAAOuzE,SAAP;EACD;;EACDC,EAAAA,mBAAmB,GAAG;EACpB,WAAO,KAAKtF,UAAZ;EACD;;EACD8E,EAAAA,iBAAiB,CAACS,WAAD,EAAc;EAC7B,WAAOA,WAAW,GAAG,KAAKvF,UAAL,CAAgBpJ,iBAAhB,EAArB;EACD;;EACD4O,EAAAA,YAAY,CAACv0C,QAAD,EAAWiY,IAAX,EAAiBz2D,QAAjB,EAA2B;EACrC,SAAKm0C,SAAL,GAAiBn0C,QAAjB;EACA,QAAIw+C,QAAQ,CAAC1hD,MAAT,IAAmB,CAAvB,EAA0B,OAAO,KAAK41F,YAAL,CAAkBl0C,QAAlB,EAA4Bx+C,QAA5B,CAAP;EAC1B,QAAIA,QAAQ,KAAK,GAAjB,EACE,OAAOyxF,kBAAkB,CAACC,eAAnB,CAAmClzC,QAAnC,CAAP;EAEF,UAAMszC,MAAM,GAAG,KAAKC,SAAL,CAAe/xF,QAAf,CAAf;EACA,SAAKwyF,sBAAL,CAA4Bh0C,QAA5B,EAAsCiY,IAAtC,EAA4Cq7B,MAA5C;EACA,WAAOA,MAAM,CAACzyE,cAAP,EAAP;EACD;;EACD4yE,EAAAA,kBAAkB,CAACzzC,QAAD,EAAWozC,WAAX,EAAwBE,MAAxB,EAAgC;EAChD,UAAMM,OAAO,GAAG,KAAKC,iBAAL,CAAuB,KAAKl+C,SAA5B,CAAhB;;EACA,QAAIy9C,WAAJ,EAAiB;EACf,YAAMU,KAAK,GAAGzH,yBAAyB,CAACM,QAA1B,CAAmC3sC,QAAnC,EAA6C,CAAC4zC,OAA9C,CAAd;EACA,YAAM5tE,EAAE,GAAG8tE,KAAK,CAACx1F,MAAN,GAAe,CAA1B;EACAg1F,MAAAA,MAAM,CAAC/B,gBAAP,CAAwBuC,KAAK,CAAC9tE,EAAD,CAA7B,EAAmC8tE,KAAK,CAAC9tE,EAAE,GAAG,CAAN,CAAxC,EAAkD0qC,QAAQ,CAACz7C,IAA3D;EACAq+E,MAAAA,MAAM,CAACnC,eAAP;;EACA,WAAK,IAAI11F,CAAC,GAAGuqB,EAAE,GAAG,CAAlB,EAAqBvqB,CAAC,IAAI,CAA1B,EAA6BA,CAAC,EAA9B,EACE63F,MAAM,CAAC3D,cAAP,CAAsBmE,KAAK,CAACr4F,CAAD,CAA3B,EAAgC,IAAhC;EAEH,KARD,MAQO;EACL,YAAMs4F,KAAK,GAAG1H,yBAAyB,CAACM,QAA1B,CAAmC3sC,QAAnC,EAA6C4zC,OAA7C,CAAd;EACA,YAAM7tE,EAAE,GAAGguE,KAAK,CAACz1F,MAAN,GAAe,CAA1B;EACAg1F,MAAAA,MAAM,CAAC/B,gBAAP,CAAwBwC,KAAK,CAAC,CAAD,CAA7B,EAAkCA,KAAK,CAAC,CAAD,CAAvC,EAA4CrjC,QAAQ,CAACz7C,IAArD;EACAq+E,MAAAA,MAAM,CAACnC,eAAP;;EACA,WAAK,IAAI11F,CAAC,GAAG,CAAb,EAAgBA,CAAC,IAAIsqB,EAArB,EAAyBtqB,CAAC,EAA1B,EACE63F,MAAM,CAAC3D,cAAP,CAAsBoE,KAAK,CAACt4F,CAAD,CAA3B,EAAgC,IAAhC;EAEH;;EACD63F,IAAAA,MAAM,CAAChC,cAAP;EACD;;EACD6C,EAAAA,iBAAiB,CAAC3yF,QAAD,EAAW;EAC1B,QAAIA,QAAQ,KAAK,GAAjB,EAAsB,OAAO,IAAP;EACtB,QAAIA,QAAQ,GAAG,GAAX,IAAkB,CAAC,KAAKutF,UAAL,CAAgB1J,aAAhB,EAAvB,EAAwD,OAAO,IAAP;EACxD,WAAO,KAAP;EACD;;EACDkO,EAAAA,SAAS,CAAC/xF,QAAD,EAAW;EAClB,WAAO,IAAIktF,sBAAJ,CAA2B,KAAK3hE,eAAhC,EAAiD,KAAKgiE,UAAtD,EAAkEvtF,QAAlE,CAAP;EACD;;EAlKqC;;ECIzB,MAAMgzF,oBAAN,CAA2B;EACxC15F,EAAAA,WAAW,GAAG;EACZ05F,IAAAA,oBAAoB,CAACr2F,YAArB,CAAkCC,KAAlC,CAAwC,IAAxC,EAA8CC,SAA9C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKs2F,UAAL,GAAkB,IAAlB;EACA,SAAKC,IAAL,GAAY,IAAIh7D,WAAJ,EAAZ;EACA,UAAMi7D,SAAS,GAAGt2F,SAAS,CAAC,CAAD,CAA3B;EACA,SAAKo2F,UAAL,GAAkBE,SAAlB;EACD;;EACDC,EAAAA,mBAAmB,GAAG;EACpB,QAAIv2F,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMu2F,iBAAiB,GAAGx2F,SAAS,CAAC,CAAD,CAAnC;EACA,YAAMy2F,eAAe,GAAG,IAAIrxF,SAAJ,EAAxB;;EACA,WAAK,IAAIhI,CAAC,GAAG,KAAKg5F,UAAL,CAAgBzxF,QAAhB,EAAb,EAAyCvH,CAAC,CAACmJ,OAAF,EAAzC,GAAwD;EACtD,cAAMmwF,GAAG,GAAGt5F,CAAC,CAACkJ,IAAF,EAAZ;EACA,cAAMoC,GAAG,GAAGguF,GAAG,CAACz6E,WAAJ,EAAZ;EACA,YAAIu6E,iBAAiB,CAACx3F,CAAlB,GAAsB0J,GAAG,CAACuB,OAAJ,EAAtB,IAAuCusF,iBAAiB,CAACx3F,CAAlB,GAAsB0J,GAAG,CAACqB,OAAJ,EAAjE,EAAgF;EAChF,aAAKwsF,mBAAL,CAAyBC,iBAAzB,EAA4CE,GAAG,CAAClM,gBAAJ,EAA5C,EAAoEiM,eAApE;EACD;;EACD,aAAOA,eAAP;EACD,KAVD,MAUO,IAAIz2F,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,UAAI0G,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAegF,IAAf,CAAZ,IAAqChF,SAAS,CAAC,CAAD,CAAT,YAAwBc,UAAxB,IAAsCd,SAAS,CAAC,CAAD,CAAT,YAAwByjE,YAAvG,EAAsH;EACpH,cAAM+yB,iBAAiB,GAAGx2F,SAAS,CAAC,CAAD,CAAnC;EAAA,cAAwCqqF,OAAO,GAAGrqF,SAAS,CAAC,CAAD,CAA3D;EAAA,cAAgEy2F,eAAe,GAAGz2F,SAAS,CAAC,CAAD,CAA3F;EACA,cAAMiH,GAAG,GAAGojF,OAAO,CAACjpB,OAAR,GAAkB5+C,cAAlB,EAAZ;;EACA,aAAK,IAAIplB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6J,GAAG,CAAChH,MAAJ,GAAa,CAAjC,EAAoC7C,CAAC,EAArC,EAAyC;EACvC,eAAKi5F,IAAL,CAAUnyE,EAAV,GAAejd,GAAG,CAAC7J,CAAD,CAAlB;EACA,eAAKi5F,IAAL,CAAU1tF,EAAV,GAAe1B,GAAG,CAAC7J,CAAC,GAAG,CAAL,CAAlB;EACA,cAAI,KAAKi5F,IAAL,CAAUnyE,EAAV,CAAallB,CAAb,GAAiB,KAAKq3F,IAAL,CAAU1tF,EAAV,CAAa3J,CAAlC,EAAqC,KAAKq3F,IAAL,CAAU95E,OAAV;EACrC,gBAAMggC,IAAI,GAAGlgD,IAAI,CAACiN,GAAL,CAAS,KAAK+sF,IAAL,CAAUnyE,EAAV,CAAanlB,CAAtB,EAAyB,KAAKs3F,IAAL,CAAU1tF,EAAV,CAAa5J,CAAtC,CAAb;EACA,cAAIw9C,IAAI,GAAGi6C,iBAAiB,CAACz3F,CAA7B,EAAgC;EAChC,cAAI,KAAKs3F,IAAL,CAAUj4D,YAAV,EAAJ,EAA8B;EAC9B,cAAIo4D,iBAAiB,CAACx3F,CAAlB,GAAsB,KAAKq3F,IAAL,CAAUnyE,EAAV,CAAallB,CAAnC,IAAwCw3F,iBAAiB,CAACx3F,CAAlB,GAAsB,KAAKq3F,IAAL,CAAU1tF,EAAV,CAAa3J,CAA/E,EAAkF;EAClF,cAAIgX,WAAW,CAACtQ,KAAZ,CAAkB,KAAK2wF,IAAL,CAAUnyE,EAA5B,EAAgC,KAAKmyE,IAAL,CAAU1tF,EAA1C,EAA8C6tF,iBAA9C,MAAqExgF,WAAW,CAACU,KAArF,EAA4F;EAC5F,cAAI0uD,KAAK,GAAGilB,OAAO,CAACrsB,QAAR,CAAiB3L,QAAQ,CAACz7C,IAA1B,CAAZ;EACA,cAAI,CAAC,KAAKy/E,IAAL,CAAUnyE,EAAV,CAAa3jB,MAAb,CAAoB0G,GAAG,CAAC7J,CAAD,CAAvB,CAAL,EAAkCgoE,KAAK,GAAGilB,OAAO,CAACrsB,QAAR,CAAiB3L,QAAQ,CAAC37C,KAA1B,CAAR;EAClC,gBAAMigF,EAAE,GAAG,IAAIC,YAAJ,CAAiB,KAAKP,IAAtB,EAA4BjxB,KAA5B,CAAX;EACAqxB,UAAAA,eAAe,CAACjyF,GAAhB,CAAoBmyF,EAApB;EACD;EACF,OAjBD,MAiBO,IAAIhwF,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAegF,IAAf,CAAZ,IAAqChF,SAAS,CAAC,CAAD,CAAT,YAAwBc,UAAxB,IAAsC6F,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAegF,IAAf,CAA3F,EAAkH;EACvH,cAAMwxF,iBAAiB,GAAGx2F,SAAS,CAAC,CAAD,CAAnC;EAAA,cAAwC8tF,QAAQ,GAAG9tF,SAAS,CAAC,CAAD,CAA5D;EAAA,cAAiEy2F,eAAe,GAAGz2F,SAAS,CAAC,CAAD,CAA5F;;EACA,aAAK,IAAI5C,CAAC,GAAG0wF,QAAQ,CAACnpF,QAAT,EAAb,EAAkCvH,CAAC,CAACmJ,OAAF,EAAlC,GAAiD;EAC/C,gBAAM46D,EAAE,GAAG/jE,CAAC,CAACkJ,IAAF,EAAX;EACA,cAAI,CAAC66D,EAAE,CAACn6D,SAAH,EAAL,EAAqB;EACrB,eAAKuvF,mBAAL,CAAyBC,iBAAzB,EAA4Cr1B,EAA5C,EAAgDs1B,eAAhD;EACD;EACF;EACF;EACF;;EACDz4B,EAAAA,QAAQ,CAACv1D,CAAD,EAAI;EACV,UAAMguF,eAAe,GAAG,KAAKF,mBAAL,CAAyB9tF,CAAzB,CAAxB;EACA,QAAIguF,eAAe,CAAC7xF,IAAhB,OAA2B,CAA/B,EAAkC,OAAO,CAAP;EAClC,UAAM+xF,EAAE,GAAG7kD,WAAW,CAAC1oC,GAAZ,CAAgBqtF,eAAhB,CAAX;EACA,WAAOE,EAAE,CAACE,UAAV;EACD;;EAtDuC;;EAwD1C,MAAMD,YAAN,CAAmB;EACjBn6F,EAAAA,WAAW,GAAG;EACZm6F,IAAAA,YAAY,CAAC92F,YAAb,CAA0BC,KAA1B,CAAgC,IAAhC,EAAsCC,SAAtC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKg3F,UAAL,GAAkB,IAAlB;EACA,SAAKD,UAAL,GAAkB,IAAlB;EACA,UAAMp7D,GAAG,GAAGz7B,SAAS,CAAC,CAAD,CAArB;EAAA,UAA0BolE,KAAK,GAAGplE,SAAS,CAAC,CAAD,CAA3C;EACA,SAAK82F,UAAL,GAAkB,IAAIz7D,WAAJ,CAAgBI,GAAhB,CAAlB;EACA,SAAKo7D,UAAL,GAAkBzxB,KAAlB;EACD;;EACDhjE,EAAAA,SAAS,CAACiF,GAAD,EAAM;EACb,UAAMzF,KAAK,GAAGyF,GAAd;EACA,QAAI,KAAKyvF,UAAL,CAAgBt7D,IAAhB,MAA0B55B,KAAK,CAACk1F,UAAN,CAAiB75D,IAAjB,EAA9B,EAAuD,OAAO,CAAP;EACvD,QAAI,KAAK65D,UAAL,CAAgB75D,IAAhB,MAA0Br7B,KAAK,CAACk1F,UAAN,CAAiBt7D,IAAjB,EAA9B,EAAuD,OAAO,CAAC,CAAR;;EACvD,QAAIu7D,WAAW,GAAG,KAAKD,UAAL,CAAgB9iF,gBAAhB,CAAiCpS,KAAK,CAACk1F,UAAvC,CAAlB;;EACA,QAAIC,WAAW,KAAK,CAApB,EAAuB,OAAOA,WAAP;EACvBA,IAAAA,WAAW,GAAG,CAAC,CAAD,GAAKn1F,KAAK,CAACk1F,UAAN,CAAiB9iF,gBAAjB,CAAkC,KAAK8iF,UAAvC,CAAnB;EACA,QAAIC,WAAW,KAAK,CAApB,EAAuB,OAAOA,WAAP;EACvB,WAAO,KAAKD,UAAL,CAAgB10F,SAAhB,CAA0BR,KAAK,CAACk1F,UAAhC,CAAP;EACD;;EACDE,EAAAA,QAAQ,CAACC,IAAD,EAAOC,IAAP,EAAa;EACnB,UAAMC,QAAQ,GAAGF,IAAI,CAAC/yE,EAAL,CAAQ9hB,SAAR,CAAkB80F,IAAI,CAAChzE,EAAvB,CAAjB;EACA,QAAIizE,QAAQ,KAAK,CAAjB,EAAoB,OAAOA,QAAP;EACpB,WAAOF,IAAI,CAACtuF,EAAL,CAAQvG,SAAR,CAAkB80F,IAAI,CAACvuF,EAAvB,CAAP;EACD;;EACD7L,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAKg6F,UAAL,CAAgBh6F,QAAhB,EAAP;EACD;;EACD,MAAIuG,WAAJ,GAAkB;EAChB,WAAO,CAAC7D,UAAD,CAAP;EACD;;EA/BgB;;EAiCnB22F,oBAAoB,CAACS,YAArB,GAAoCA,YAApC;;ECjFe,MAAMQ,qBAAN,CAA4B;EACzC36F,EAAAA,WAAW,GAAG;EACZ26F,IAAAA,qBAAqB,CAACt3F,YAAtB,CAAmCC,KAAnC,CAAyC,IAAzC,EAA+CC,SAA/C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKgwC,UAAL,GAAkB,IAAlB;EACA,SAAKwH,SAAL,GAAiB,IAAjB;EACA,SAAK+/C,aAAL,GAAqB,IAArB;EACA,SAAKC,UAAL,GAAkB,IAAIlyF,SAAJ,EAAlB;EACA,UAAM8rC,SAAS,GAAGlxC,SAAS,CAAC,CAAD,CAA3B;EAAA,UAAgCmD,QAAQ,GAAGnD,SAAS,CAAC,CAAD,CAApD;EAAA,UAAyDu3F,YAAY,GAAGv3F,SAAS,CAAC,CAAD,CAAjF;EACA,SAAK8vC,UAAL,GAAkBoB,SAAlB;EACA,SAAKoG,SAAL,GAAiBn0C,QAAjB;EACA,SAAKk0F,aAAL,GAAqBE,YAArB;EACD;;EACDC,EAAAA,WAAW,CAACh1F,KAAD,EAAQi7B,cAAR,EAAwBm8B,IAAxB,EAA8B69B,SAA9B,EAAyCC,UAAzC,EAAqD;EAC9D,QAAIj6D,cAAc,KAAK,GAAnB,IAA0Bj7B,KAAK,CAACvC,MAAN,GAAe+nB,UAAU,CAACE,kBAAxD,EAA4E,OAAO,IAAP;EAC5E,QAAIoxC,OAAO,GAAGm+B,SAAd;EACA,QAAIl+B,QAAQ,GAAGm+B,UAAf;;EACA,QAAIl1F,KAAK,CAACvC,MAAN,IAAgB+nB,UAAU,CAACE,kBAA3B,IAAiDlS,WAAW,CAACC,KAAZ,CAAkBzT,KAAlB,CAArD,EAA+E;EAC7E82D,MAAAA,OAAO,GAAGo+B,UAAV;EACAn+B,MAAAA,QAAQ,GAAGk+B,SAAX;EACA79B,MAAAA,IAAI,GAAGvH,QAAQ,CAACC,QAAT,CAAkBsH,IAAlB,CAAP;EACD;;EACD,UAAM+9B,KAAK,GAAG,KAAKN,aAAL,CAAmBnB,YAAnB,CAAgC1zF,KAAhC,EAAuCo3D,IAAvC,EAA6Cn8B,cAA7C,CAAd;;EACA,SAAKm6D,QAAL,CAAcD,KAAd,EAAqBr+B,OAArB,EAA8BC,QAA9B;EACD;;EACDs+B,EAAAA,gBAAgB,CAACr1F,KAAD,EAAQW,QAAR,EAAkB;EAChC,SAAKq0F,WAAL,CAAiBh1F,KAAjB,EAAwBW,QAAxB,EAAkCkvD,QAAQ,CAACz7C,IAA3C,EAAiDmoB,QAAQ,CAACG,QAA1D,EAAoEH,QAAQ,CAACK,QAA7E;EACA,SAAKo4D,WAAL,CAAiBh1F,KAAjB,EAAwBW,QAAxB,EAAkCkvD,QAAQ,CAAC37C,KAA3C,EAAkDqoB,QAAQ,CAACK,QAA3D,EAAqEL,QAAQ,CAACG,QAA9E;EACD;;EACDihB,EAAAA,QAAQ,CAAC13C,CAAD,EAAI;EACV,QAAI,KAAK6uC,SAAL,IAAkB,GAAtB,EAA2B,OAAO,IAAP;EAC3B,UAAM90C,KAAK,GAAGiG,CAAC,CAAC+Z,cAAF,EAAd;;EACA,UAAMm1E,KAAK,GAAG,KAAKN,aAAL,CAAmBxB,YAAnB,CAAgCrzF,KAAhC,EAAuC,KAAK80C,SAA5C,CAAd;;EACA,SAAKsgD,QAAL,CAAcD,KAAd,EAAqB54D,QAAQ,CAACG,QAA9B,EAAwCH,QAAQ,CAACK,QAAjD;EACD;;EACD6pC,EAAAA,UAAU,CAACxgE,CAAD,EAAI;EACZ,QAAIg1B,cAAc,GAAG,KAAK6Z,SAA1B;EACA,QAAIwgD,UAAU,GAAGzlC,QAAQ,CAACz7C,IAA1B;;EACA,QAAI,KAAK0gC,SAAL,GAAiB,GAArB,EAA0B;EACxB7Z,MAAAA,cAAc,GAAG,CAAC,KAAK6Z,SAAvB;EACAwgD,MAAAA,UAAU,GAAGzlC,QAAQ,CAAC37C,KAAtB;EACD;;EACD,UAAMmO,KAAK,GAAGpc,CAAC,CAACsd,eAAF,EAAd;EACA,UAAMgyE,UAAU,GAAG1vE,gBAAgB,CAACU,oBAAjB,CAAsClE,KAAK,CAACrC,cAAN,EAAtC,CAAnB;EACA,QAAI,KAAK80B,SAAL,GAAiB,GAAjB,IAAwB,KAAK0gD,kBAAL,CAAwBnzE,KAAxB,EAA+B,KAAKyyB,SAApC,CAA5B,EAA4E,OAAO,IAAP;EAC5E,QAAI,KAAKA,SAAL,IAAkB,GAAlB,IAAyBygD,UAAU,CAAC93F,MAAX,GAAoB,CAAjD,EAAoD,OAAO,IAAP;EACpD,SAAKu3F,WAAL,CAAiBO,UAAjB,EAA6Bt6D,cAA7B,EAA6Cq6D,UAA7C,EAAyD/4D,QAAQ,CAACG,QAAlE,EAA4EH,QAAQ,CAACK,QAArF;;EACA,SAAK,IAAIhiC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqL,CAAC,CAAC4c,kBAAF,EAApB,EAA4CjoB,CAAC,EAA7C,EAAiD;EAC/C,YAAM2xC,IAAI,GAAGtmC,CAAC,CAACud,gBAAF,CAAmB5oB,CAAnB,CAAb;EACA,YAAM66F,SAAS,GAAG5vE,gBAAgB,CAACU,oBAAjB,CAAsCgmB,IAAI,CAACvsB,cAAL,EAAtC,CAAlB;EACA,UAAI,KAAK80B,SAAL,GAAiB,GAAjB,IAAwB,KAAK0gD,kBAAL,CAAwBjpD,IAAxB,EAA8B,CAAC,KAAKuI,SAApC,CAA5B,EAA4E;EAC5E,WAAKkgD,WAAL,CAAiBS,SAAjB,EAA4Bx6D,cAA5B,EAA4C40B,QAAQ,CAACC,QAAT,CAAkBwlC,UAAlB,CAA5C,EAA2E/4D,QAAQ,CAACK,QAApF,EAA8FL,QAAQ,CAACG,QAAvG;EACD;EACF;;EACDg5D,EAAAA,0BAA0B,CAACC,aAAD,EAAgBC,cAAhB,EAAgC;EACxD,UAAMC,GAAG,GAAG,IAAIv0D,QAAJ,CAAaq0D,aAAa,CAAC,CAAD,CAA1B,EAA+BA,aAAa,CAAC,CAAD,CAA5C,EAAiDA,aAAa,CAAC,CAAD,CAA9D,CAAZ;EACA,UAAM1xD,QAAQ,GAAG4xD,GAAG,CAAC5xD,QAAJ,EAAjB;EACA,UAAM6xD,YAAY,GAAGl/E,QAAQ,CAACK,cAAT,CAAwBgtB,QAAxB,EAAkC4xD,GAAG,CAACn0E,EAAtC,EAA0Cm0E,GAAG,CAAC1vF,EAA9C,CAArB;EACA,WAAO2vF,YAAY,GAAGj8F,IAAI,CAACC,GAAL,CAAS87F,cAAT,CAAtB;EACD;;EACDjvB,EAAAA,aAAa,CAAClvD,IAAD,EAAO;EAClB,QAAI,KAAKo9E,aAAL,CAAmBvB,iBAAnB,CAAqC,KAAKx+C,SAA1C,CAAJ,EAA0D,OAAO,IAAP;EAC1D,UAAM90C,KAAK,GAAG6lB,gBAAgB,CAACU,oBAAjB,CAAsC9O,IAAI,CAACuI,cAAL,EAAtC,CAAd;;EACA,QAAI6F,gBAAgB,CAAC/I,MAAjB,CAAwB9c,KAAxB,KAAkC,CAAC,KAAK60F,aAAL,CAAmBrB,mBAAnB,GAAyChP,aAAzC,EAAvC,EAAiG;EAC/F,WAAK6Q,gBAAL,CAAsBr1F,KAAtB,EAA6B,KAAK80C,SAAlC;EACD,KAFD,MAEO;EACL,YAAMqgD,KAAK,GAAG,KAAKN,aAAL,CAAmBxB,YAAnB,CAAgCrzF,KAAhC,EAAuC,KAAK80C,SAA5C,CAAd;;EACA,WAAKsgD,QAAL,CAAcD,KAAd,EAAqB54D,QAAQ,CAACG,QAA9B,EAAwCH,QAAQ,CAACK,QAAjD;EACD;EACF;;EACDw4D,EAAAA,QAAQ,CAACp1F,KAAD,EAAQ82D,OAAR,EAAiBC,QAAjB,EAA2B;EACjC,QAAI/2D,KAAK,KAAK,IAAV,IAAkBA,KAAK,CAACvC,MAAN,GAAe,CAArC,EAAwC,OAAO,IAAP;EACxC,UAAMwC,CAAC,GAAG,IAAIk7E,kBAAJ,CAAuBn7E,KAAvB,EAA8B,IAAIy2D,KAAJ,CAAU,CAAV,EAAal6B,QAAQ,CAACI,QAAtB,EAAgCm6B,OAAhC,EAAyCC,QAAzC,CAA9B,CAAV;;EACA,SAAK+9B,UAAL,CAAgB9yF,GAAhB,CAAoB/B,CAApB;EACD;;EACD81F,EAAAA,SAAS,GAAG;EACV,SAAK/zF,GAAL,CAAS,KAAKsrC,UAAd;EACA,WAAO,KAAKwnD,UAAZ;EACD;;EACD9yF,EAAAA,GAAG,CAAC+W,CAAD,EAAI;EACL,QAAIA,CAAC,CAAC7W,OAAF,EAAJ,EAAiB,OAAO,IAAP;EACjB,QAAI6W,CAAC,YAAYmJ,OAAjB,EAA0B,KAAKukD,UAAL,CAAgB1tD,CAAhB,EAA1B,KAAmD,IAAIA,CAAC,YAAY6G,UAAjB,EAA6B,KAAK+mD,aAAL,CAAmB5tD,CAAnB,EAA7B,KAAyD,IAAIA,CAAC,YAAYkI,KAAjB,EAAwB,KAAK08B,QAAL,CAAc5kC,CAAd,EAAxB,KAA+C,IAAIA,CAAC,YAAYuM,UAAjB,EAA6B,KAAK8hD,aAAL,CAAmBruD,CAAnB,EAA7B,KAAyD,IAAIA,CAAC,YAAYgT,eAAjB,EAAkC,KAAKq7C,aAAL,CAAmBruD,CAAnB,EAAlC,KAA8D,IAAIA,CAAC,YAAYgQ,YAAjB,EAA+B,KAAKq+C,aAAL,CAAmBruD,CAAnB,EAA/B,KAA2D,IAAIA,CAAC,YAAY0L,kBAAjB,EAAqC,KAAK2iD,aAAL,CAAmBruD,CAAnB,EAArC,KAAiE,MAAM,IAAI2F,6BAAJ,CAAkC3F,CAAC,CAAC0H,eAAF,EAAlC,CAAN;EAC/Y;;EACD+0E,EAAAA,kBAAkB,CAAC9hF,IAAD,EAAOkiF,cAAP,EAAuB;EACvC,UAAMI,SAAS,GAAGtiF,IAAI,CAACsM,cAAL,EAAlB;EACA,QAAIg2E,SAAS,CAACv4F,MAAV,GAAmB,CAAvB,EAA0B,OAAOm4F,cAAc,GAAG,CAAxB;EAC1B,QAAII,SAAS,CAACv4F,MAAV,KAAqB,CAAzB,EAA4B,OAAO,KAAKi4F,0BAAL,CAAgCM,SAAhC,EAA2CJ,cAA3C,CAAP;EAC5B,UAAM1vF,GAAG,GAAGwN,IAAI,CAACiG,mBAAL,EAAZ;EACA,UAAMs8E,eAAe,GAAGp8F,IAAI,CAAC+M,GAAL,CAASV,GAAG,CAACiB,SAAJ,EAAT,EAA0BjB,GAAG,CAACgB,QAAJ,EAA1B,CAAxB;EACA,QAAI0uF,cAAc,GAAG,GAAjB,IAAwB,IAAI/7F,IAAI,CAACC,GAAL,CAAS87F,cAAT,CAAJ,GAA+BK,eAA3D,EAA4E,OAAO,IAAP;EAC5E,WAAO,KAAP;EACD;;EACD7uB,EAAAA,aAAa,CAACniD,EAAD,EAAK;EAChB,SAAK,IAAIrqB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqqB,EAAE,CAAC/L,gBAAH,EAApB,EAA2Cte,CAAC,EAA5C,EAAgD;EAC9C,YAAMme,CAAC,GAAGkM,EAAE,CAAC1M,YAAH,CAAgB3d,CAAhB,CAAV;EACA,WAAKoH,GAAL,CAAS+W,CAAT;EACD;EACF;;EAlGwC;;ECT5B,MAAMm9E,WAAN,CAAkB;EAC/Bj8F,EAAAA,WAAW,GAAG;EACZi8F,IAAAA,WAAW,CAAC54F,YAAZ,CAAyBC,KAAzB,CAA+B,IAA/B,EAAqCC,SAArC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK64F,QAAL,GAAgB,IAAIh+B,OAAJ,EAAhB;EACA,SAAKi+B,SAAL,GAAiB,IAAjB;EACA,SAAKC,iBAAL,GAAyB,CAAC95D,QAAQ,CAACM,IAAV,EAAgBN,QAAQ,CAACM,IAAzB,CAAzB;EACD;;EACDy5D,EAAAA,SAAS,CAAC9xB,EAAD,EAAK;EACZ,SAAK9F,QAAL;;EACA,UAAM9jE,CAAC,GAAG,KAAKw7F,SAAL,CAAet0F,OAAf,CAAuB0iE,EAAvB,CAAV;;EACA,QAAI+xB,OAAO,GAAG37F,CAAC,GAAG,CAAlB;EACA,QAAIA,CAAC,KAAK,CAAV,EAAa27F,OAAO,GAAG,KAAKH,SAAL,CAAeh0F,IAAf,KAAwB,CAAlC;EACb,WAAO,KAAKg0F,SAAL,CAAe3zF,GAAf,CAAmB8zF,OAAnB,CAAP;EACD;;EACDC,EAAAA,mBAAmB,CAAC3/B,SAAD,EAAY;EAC7B,QAAI4/B,QAAQ,GAAGl6D,QAAQ,CAACM,IAAxB;;EACA,SAAK,IAAI9S,EAAE,GAAG,KAAK5nB,QAAL,EAAd,EAA+B4nB,EAAE,CAAChmB,OAAH,EAA/B,GAA+C;EAC7C,YAAM9D,CAAC,GAAG8pB,EAAE,CAACjmB,IAAH,EAAV;EACA,YAAMktD,KAAK,GAAG/wD,CAAC,CAACy8D,QAAF,EAAd;EACA,UAAI1L,KAAK,CAACmF,MAAN,CAAaU,SAAb,KAA2B7F,KAAK,CAACnX,WAAN,CAAkBgd,SAAlB,EAA6BhH,QAAQ,CAACz7C,IAAtC,MAAgDmoB,QAAQ,CAACM,IAAxF,EAA8F45D,QAAQ,GAAGzlC,KAAK,CAACnX,WAAN,CAAkBgd,SAAlB,EAA6BhH,QAAQ,CAACz7C,IAAtC,CAAX;EAC/F;;EACD,QAAIqiF,QAAQ,KAAKl6D,QAAQ,CAACM,IAA1B,EAAgC,OAAO,IAAP;EAChC,QAAI65D,OAAO,GAAGD,QAAd;;EACA,SAAK,IAAI1sE,EAAE,GAAG,KAAK5nB,QAAL,EAAd,EAA+B4nB,EAAE,CAAChmB,OAAH,EAA/B,GAA+C;EAC7C,YAAM9D,CAAC,GAAG8pB,EAAE,CAACjmB,IAAH,EAAV;EACA,YAAMktD,KAAK,GAAG/wD,CAAC,CAACy8D,QAAF,EAAd;EACA,UAAI1L,KAAK,CAACnX,WAAN,CAAkBgd,SAAlB,EAA6BhH,QAAQ,CAACE,EAAtC,MAA8CxzB,QAAQ,CAACM,IAA3D,EAAiEm0B,KAAK,CAACqF,WAAN,CAAkBQ,SAAlB,EAA6BhH,QAAQ,CAACE,EAAtC,EAA0C2mC,OAA1C;;EACjE,UAAI1lC,KAAK,CAACmF,MAAN,CAAaU,SAAb,CAAJ,EAA6B;EAC3B,cAAMC,OAAO,GAAG9F,KAAK,CAACnX,WAAN,CAAkBgd,SAAlB,EAA6BhH,QAAQ,CAACz7C,IAAtC,CAAhB;EACA,cAAM2iD,QAAQ,GAAG/F,KAAK,CAACnX,WAAN,CAAkBgd,SAAlB,EAA6BhH,QAAQ,CAAC37C,KAAtC,CAAjB;;EACA,YAAI6iD,QAAQ,KAAKx6B,QAAQ,CAACM,IAA1B,EAAgC;EAC9B,cAAIk6B,QAAQ,KAAK2/B,OAAjB,EAA0B,MAAM,IAAI11B,iBAAJ,CAAsB,wBAAtB,EAAgD/gE,CAAC,CAACiE,aAAF,EAAhD,CAAN;EAC1B,cAAI4yD,OAAO,KAAKv6B,QAAQ,CAACM,IAAzB,EACEl/B,MAAM,CAACC,oBAAP,CAA4B,gCAAgCqC,CAAC,CAACiE,aAAF,EAAhC,GAAoD,GAAhF;EAEFwyF,UAAAA,OAAO,GAAG5/B,OAAV;EACD,SAND,MAMO;EACLn5D,UAAAA,MAAM,CAACE,MAAP,CAAcmzD,KAAK,CAACnX,WAAN,CAAkBgd,SAAlB,EAA6BhH,QAAQ,CAACz7C,IAAtC,MAAgDmoB,QAAQ,CAACM,IAAvE,EAA6E,wBAA7E;EACAm0B,UAAAA,KAAK,CAACqF,WAAN,CAAkBQ,SAAlB,EAA6BhH,QAAQ,CAAC37C,KAAtC,EAA6CwiF,OAA7C;EACA1lC,UAAAA,KAAK,CAACqF,WAAN,CAAkBQ,SAAlB,EAA6BhH,QAAQ,CAACz7C,IAAtC,EAA4CsiF,OAA5C;EACD;EACF;EACF;EACF;;EACDxyF,EAAAA,aAAa,GAAG;EACd,UAAM6lB,EAAE,GAAG,KAAK5nB,QAAL,EAAX;EACA,QAAI,CAAC4nB,EAAE,CAAChmB,OAAH,EAAL,EAAmB,OAAO,IAAP;EACnB,UAAM9D,CAAC,GAAG8pB,EAAE,CAACjmB,IAAH,EAAV;EACA,WAAO7D,CAAC,CAACiE,aAAF,EAAP;EACD;;EACDszD,EAAAA,KAAK,CAACv/B,GAAD,EAAM;EACTviB,IAAAA,MAAM,CAACuiB,GAAP,CAAWC,OAAX,CAAmB,oBAAoB,KAAKh0B,aAAL,EAAvC;;EACA,SAAK,IAAI6lB,EAAE,GAAG,KAAK5nB,QAAL,EAAd,EAA+B4nB,EAAE,CAAChmB,OAAH,EAA/B,GAA+C;EAC7C,YAAM9D,CAAC,GAAG8pB,EAAE,CAACjmB,IAAH,EAAV;EACA7D,MAAAA,CAAC,CAACu3D,KAAF,CAAQv/B,GAAR;EACD;EACF;;EACD0+D,EAAAA,sBAAsB,CAACC,SAAD,EAAY;EAChC,SAAKC,oBAAL,CAA0BD,SAAS,CAACtwB,mBAAV,EAA1B;EACA,WAAO,KAAKwwB,yBAAL,CAA+B,CAA/B,CAAP;EACD;;EACDA,EAAAA,yBAAyB,CAACjgC,SAAD,EAAY;EACnC,UAAMpH,KAAK,GAAG,KAAKiP,QAAL,EAAd;EACA,QAAIjP,KAAK,CAACrtD,IAAN,MAAgB,CAApB,EAAuB,OAAO,IAAP;EACvB,UAAM20F,aAAa,GAAGtnC,KAAK,CAACrtD,IAAN,KAAe,CAArC;EACA,UAAM40F,UAAU,GAAGvnC,KAAK,CAAChtD,GAAN,CAAUs0F,aAAV,EAAyBr6B,QAAzB,EAAnB;EACA,UAAM+5B,QAAQ,GAAGO,UAAU,CAACn9C,WAAX,CAAuBgd,SAAvB,EAAkChH,QAAQ,CAACz7C,IAA3C,CAAjB;EACAzW,IAAAA,MAAM,CAACE,MAAP,CAAc44F,QAAQ,KAAKl6D,QAAQ,CAACM,IAApC,EAA0C,4BAA1C;EACA,QAAI65D,OAAO,GAAGD,QAAd;;EACA,SAAK,IAAI1sE,EAAE,GAAG,KAAK5nB,QAAL,EAAd,EAA+B4nB,EAAE,CAAChmB,OAAH,EAA/B,GAA+C;EAC7C,YAAM9D,CAAC,GAAG8pB,EAAE,CAACjmB,IAAH,EAAV;EACA,YAAMktD,KAAK,GAAG/wD,CAAC,CAACy8D,QAAF,EAAd;EACA/+D,MAAAA,MAAM,CAACE,MAAP,CAAcmzD,KAAK,CAACmF,MAAN,CAAaU,SAAb,CAAd,EAAuC,qBAAvC;EACA,YAAMC,OAAO,GAAG9F,KAAK,CAACnX,WAAN,CAAkBgd,SAAlB,EAA6BhH,QAAQ,CAACz7C,IAAtC,CAAhB;EACA,YAAM2iD,QAAQ,GAAG/F,KAAK,CAACnX,WAAN,CAAkBgd,SAAlB,EAA6BhH,QAAQ,CAAC37C,KAAtC,CAAjB;EACA,UAAI4iD,OAAO,KAAKC,QAAhB,EACE,OAAO,KAAP;EAEF,UAAIA,QAAQ,KAAK2/B,OAAjB,EACE,OAAO,KAAP;EAEFA,MAAAA,OAAO,GAAG5/B,OAAV;EACD;;EACD,WAAO,IAAP;EACD;;EACDmgC,EAAAA,SAAS,CAACC,OAAD,EAAU;EACjB,SAAK/0F,QAAL;;EACA,SAAK,IAAIvH,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKw7F,SAAL,CAAeh0F,IAAf,EAApB,EAA2CxH,CAAC,EAA5C,EAAgD;EAC9C,YAAMqF,CAAC,GAAG,KAAKm2F,SAAL,CAAe3zF,GAAf,CAAmB7H,CAAnB,CAAV;;EACA,UAAIqF,CAAC,KAAKi3F,OAAV,EAAmB,OAAOt8F,CAAP;EACpB;;EACD,WAAO,CAAC,CAAR;EACD;;EACDuH,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAKu8D,QAAL,GAAgBv8D,QAAhB,EAAP;EACD;;EACDu8D,EAAAA,QAAQ,GAAG;EACT,QAAI,KAAK03B,SAAL,KAAmB,IAAvB,EACE,KAAKA,SAAL,GAAiB,IAAIxzF,SAAJ,CAAc,KAAKuzF,QAAL,CAAcxyF,MAAd,EAAd,CAAjB;EAEF,WAAO,KAAKyyF,SAAZ;EACD;;EACDv8C,EAAAA,WAAW,CAACgd,SAAD,EAAY5wD,CAAZ,EAAe+R,IAAf,EAAqB;EAC9B,QAAI,KAAKq+E,iBAAL,CAAuBx/B,SAAvB,MAAsCt6B,QAAQ,CAACM,IAAnD,EACE,KAAKw5D,iBAAL,CAAuBx/B,SAAvB,IAAoCxb,wBAAwB,CAACjE,MAAzB,CAAgCnxC,CAAhC,EAAmC+R,IAAI,CAAC6+C,SAAD,CAAJ,CAAgBhoB,WAAhB,EAAnC,CAApC;EAEF,WAAO,KAAKwnD,iBAAL,CAAuBx/B,SAAvB,CAAP;EACD;;EACDv8D,EAAAA,QAAQ,GAAG;EACT,UAAMuS,GAAG,GAAG,IAAIzD,YAAJ,EAAZ;EACAyD,IAAAA,GAAG,CAACvD,MAAJ,CAAW,oBAAoB,KAAKpF,aAAL,EAA/B;EACA2I,IAAAA,GAAG,CAACvD,MAAJ,CAAW,IAAX;;EACA,SAAK,IAAIygB,EAAE,GAAG,KAAK5nB,QAAL,EAAd,EAA+B4nB,EAAE,CAAChmB,OAAH,EAA/B,GAA+C;EAC7C,YAAM9D,CAAC,GAAG8pB,EAAE,CAACjmB,IAAH,EAAV;EACA+I,MAAAA,GAAG,CAACvD,MAAJ,CAAWrJ,CAAX;EACA4M,MAAAA,GAAG,CAACvD,MAAJ,CAAW,IAAX;EACD;;EACD,WAAOuD,GAAG,CAACvS,QAAJ,EAAP;EACD;;EACDu8F,EAAAA,oBAAoB,CAAC91B,gBAAD,EAAmB;EACrC,SAAK,IAAIh3C,EAAE,GAAG,KAAK5nB,QAAL,EAAd,EAA+B4nB,EAAE,CAAChmB,OAAH,EAA/B,GAA+C;EAC7C,YAAMygE,EAAE,GAAGz6C,EAAE,CAACjmB,IAAH,EAAX;EACA0gE,MAAAA,EAAE,CAAC1D,YAAH,CAAgBC,gBAAhB;EACD;EACF;;EACDo2B,EAAAA,gBAAgB,CAACP,SAAD,EAAY;EAC1B,SAAKC,oBAAL,CAA0BD,SAAS,CAAC,CAAD,CAAT,CAAatwB,mBAAb,EAA1B;EACA,SAAKkwB,mBAAL,CAAyB,CAAzB;EACA,SAAKA,mBAAL,CAAyB,CAAzB;EACA,UAAMY,0BAA0B,GAAG,CAAC,KAAD,EAAQ,KAAR,CAAnC;;EACA,SAAK,IAAIrtE,EAAE,GAAG,KAAK5nB,QAAL,EAAd,EAA+B4nB,EAAE,CAAChmB,OAAH,EAA/B,GAA+C;EAC7C,YAAM9D,CAAC,GAAG8pB,EAAE,CAACjmB,IAAH,EAAV;EACA,YAAMktD,KAAK,GAAG/wD,CAAC,CAACy8D,QAAF,EAAd;;EACA,WAAK,IAAI/gB,KAAK,GAAG,CAAjB,EAAoBA,KAAK,GAAG,CAA5B,EAA+BA,KAAK,EAApC,EACE,IAAIqV,KAAK,CAAC4E,MAAN,CAAaja,KAAb,KAAuBqV,KAAK,CAACnX,WAAN,CAAkB8B,KAAlB,MAA6Bpf,QAAQ,CAACI,QAAjE,EAA2Ey6D,0BAA0B,CAACz7C,KAAD,CAA1B,GAAoC,IAApC;EAE9E;;EACD,SAAK,IAAI5xB,EAAE,GAAG,KAAK5nB,QAAL,EAAd,EAA+B4nB,EAAE,CAAChmB,OAAH,EAA/B,GAA+C;EAC7C,YAAM9D,CAAC,GAAG8pB,EAAE,CAACjmB,IAAH,EAAV;EACA,YAAMktD,KAAK,GAAG/wD,CAAC,CAACy8D,QAAF,EAAd;;EACA,WAAK,IAAI/gB,KAAK,GAAG,CAAjB,EAAoBA,KAAK,GAAG,CAA5B,EAA+BA,KAAK,EAApC,EACE,IAAIqV,KAAK,CAACoF,SAAN,CAAgBza,KAAhB,CAAJ,EAA4B;EAC1B,YAAIC,GAAG,GAAGrf,QAAQ,CAACM,IAAnB;;EACA,YAAIu6D,0BAA0B,CAACz7C,KAAD,CAA9B,EAAuC;EACrCC,UAAAA,GAAG,GAAGrf,QAAQ,CAACG,QAAf;EACD,SAFD,MAEO;EACL,gBAAMz2B,CAAC,GAAGhG,CAAC,CAACiE,aAAF,EAAV;EACA03C,UAAAA,GAAG,GAAG,KAAK/B,WAAL,CAAiB8B,KAAjB,EAAwB11C,CAAxB,EAA2B2wF,SAA3B,CAAN;EACD;;EACD5lC,QAAAA,KAAK,CAAC2E,qBAAN,CAA4Bha,KAA5B,EAAmCC,GAAnC;EACD;EAEJ;EACF;;EACDy7C,EAAAA,SAAS,GAAG;EACV,WAAO,KAAKlB,QAAL,CAAc/zF,IAAd,EAAP;EACD;;EACDk1F,EAAAA,aAAa,CAACr3F,CAAD,EAAI4E,GAAJ,EAAS;EACpB,SAAKsxF,QAAL,CAAc9sE,GAAd,CAAkBppB,CAAlB,EAAqB4E,GAArB;;EACA,SAAKuxF,SAAL,GAAiB,IAAjB;EACD;;EAlK8B;;ECAlB,MAAMmB,gBAAN,SAA+BrB,WAA/B,CAA2C;EACxDj8F,EAAAA,WAAW,GAAG;EACZ;EACAs9F,IAAAA,gBAAgB,CAACj6F,YAAjB,CAA8BC,KAA9B,CAAoC,IAApC,EAA0CC,SAA1C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKk6F,mBAAL,GAA2B,IAA3B;EACA,SAAKhnC,MAAL,GAAc,IAAd;EACA,SAAKinC,sBAAL,GAA8B,CAA9B;EACA,SAAKC,oBAAL,GAA4B,CAA5B;EACD;;EACDp0B,EAAAA,uBAAuB,GAAG;EACxB,SAAKq0B,kBAAL;EACA,QAAIC,QAAQ,GAAG,IAAf;EACA,QAAIC,QAAQ,GAAG,IAAf;EACA,QAAIC,KAAK,GAAG,KAAKL,sBAAjB;;EACA,SAAK,IAAI78F,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK48F,mBAAL,CAAyBp1F,IAAzB,EAApB,EAAqDxH,CAAC,EAAtD,EAA0D;EACxD,YAAMm9F,OAAO,GAAG,KAAKP,mBAAL,CAAyB/0F,GAAzB,CAA6B7H,CAA7B,CAAhB;;EACA,YAAMo9F,MAAM,GAAGD,OAAO,CAACv1B,MAAR,EAAf;EACA,UAAI,CAACu1B,OAAO,CAACr7B,QAAR,GAAmBvG,MAAnB,EAAL,EAAkC;EAClC,UAAIyhC,QAAQ,KAAK,IAAb,IAAqBG,OAAO,CAACz7B,UAAR,EAAzB,EAA+Cs7B,QAAQ,GAAGG,OAAX;;EAC/C,cAAQD,KAAR;EACA,aAAK,KAAKL,sBAAV;EACE,cAAI,CAACO,MAAM,CAAC17B,UAAP,EAAL,EAA0B;EAC1Bu7B,UAAAA,QAAQ,GAAGG,MAAX;EACAF,UAAAA,KAAK,GAAG,KAAKJ,oBAAb;EACA;;EACF,aAAK,KAAKA,oBAAV;EACE,cAAI,CAACK,OAAO,CAACz7B,UAAR,EAAL,EAA2B;EAC3Bu7B,UAAAA,QAAQ,CAACtrC,OAAT,CAAiBwrC,OAAjB;EACAD,UAAAA,KAAK,GAAG,KAAKL,sBAAb;EACA;EAVF;EAYD;;EACD,QAAIK,KAAK,KAAK,KAAKJ,oBAAnB,EAAyC;EACvC,UAAIE,QAAQ,KAAK,IAAjB,EAAuB,MAAM,IAAI52B,iBAAJ,CAAsB,2BAAtB,EAAmD,KAAK98D,aAAL,EAAnD,CAAN;EACvBvG,MAAAA,MAAM,CAACE,MAAP,CAAc+5F,QAAQ,CAACt7B,UAAT,EAAd,EAAqC,sCAArC;EACAu7B,MAAAA,QAAQ,CAACtrC,OAAT,CAAiBqrC,QAAjB;EACD;EACF;;EACD9+C,EAAAA,MAAM,CAAC0rB,EAAD,EAAK;EACT,UAAM7F,EAAE,GAAG6F,EAAX;EACA,SAAK8yB,aAAL,CAAmB34B,EAAnB,EAAuBA,EAAvB;EACD;;EACDwnB,EAAAA,gBAAgB,GAAG;EACjB,UAAM12B,KAAK,GAAG,KAAKiP,QAAL,EAAd;EACA,UAAMt8D,IAAI,GAAGqtD,KAAK,CAACrtD,IAAN,EAAb;EACA,QAAIA,IAAI,GAAG,CAAX,EAAc,OAAO,IAAP;EACd,UAAM61F,GAAG,GAAGxoC,KAAK,CAAChtD,GAAN,CAAU,CAAV,CAAZ;EACA,QAAIL,IAAI,KAAK,CAAb,EAAgB,OAAO61F,GAAP;EAChB,UAAMC,MAAM,GAAGzoC,KAAK,CAAChtD,GAAN,CAAUL,IAAI,GAAG,CAAjB,CAAf;EACA,UAAM+1F,KAAK,GAAGF,GAAG,CAACr3B,WAAJ,EAAd;EACA,UAAMnW,KAAK,GAAGytC,MAAM,CAACt3B,WAAP,EAAd;;EACA,QAAIzW,QAAQ,CAACC,UAAT,CAAoB+tC,KAApB,KAA8BhuC,QAAQ,CAACC,UAAT,CAAoBK,KAApB,CAAlC,EAA8D;EAC5D,aAAOwtC,GAAP;EACD,KAFD,MAEO,IAAI,CAAC9tC,QAAQ,CAACC,UAAT,CAAoB+tC,KAApB,CAAD,IAA+B,CAAChuC,QAAQ,CAACC,UAAT,CAAoBK,KAApB,CAApC,EAAgE;EACrE,aAAOytC,MAAP;EACD,KAFM,MAEA;EAEL,UAAID,GAAG,CAAC33B,KAAJ,OAAgB,CAApB,EAAuB,OAAO23B,GAAP,CAAvB,KAAwC,IAAIC,MAAM,CAAC53B,KAAP,OAAmB,CAAvB,EAA0B,OAAO43B,MAAP;EACnE;;EACDv6F,IAAAA,MAAM,CAACC,oBAAP,CAA4B,6CAA5B;EACA,WAAO,IAAP;EACD;;EACD45D,EAAAA,KAAK,CAACv/B,GAAD,EAAM;EACTviB,IAAAA,MAAM,CAACuiB,GAAP,CAAWC,OAAX,CAAmB,uBAAuB,KAAKh0B,aAAL,EAA1C;;EACA,SAAK,IAAI6lB,EAAE,GAAG,KAAK5nB,QAAL,EAAd,EAA+B4nB,EAAE,CAAChmB,OAAH,EAA/B,GAA+C;EAC7C,YAAM46D,EAAE,GAAG50C,EAAE,CAACjmB,IAAH,EAAX;EACAm0B,MAAAA,GAAG,CAACu/B,KAAJ,CAAU,MAAV;EACAmH,MAAAA,EAAE,CAACnH,KAAH,CAASv/B,GAAT;EACAA,MAAAA,GAAG,CAACC,OAAJ;EACAD,MAAAA,GAAG,CAACu/B,KAAJ,CAAU,KAAV;EACAmH,MAAAA,EAAE,CAAC6D,MAAH,GAAYhL,KAAZ,CAAkBv/B,GAAlB;EACAA,MAAAA,GAAG,CAACC,OAAJ;EACD;EACF;;EACDy/D,EAAAA,kBAAkB,GAAG;EACnB,QAAI,KAAKH,mBAAL,KAA6B,IAAjC,EAAuC,OAAO,KAAKA,mBAAZ;EACvC,SAAKA,mBAAL,GAA2B,IAAI50F,SAAJ,EAA3B;;EACA,SAAK,IAAImnB,EAAE,GAAG,KAAK5nB,QAAL,EAAd,EAA+B4nB,EAAE,CAAChmB,OAAH,EAA/B,GAA+C;EAC7C,YAAM46D,EAAE,GAAG50C,EAAE,CAACjmB,IAAH,EAAX;EACA,UAAI66D,EAAE,CAACrC,UAAH,MAAmBqC,EAAE,CAAC6D,MAAH,GAAYlG,UAAZ,EAAvB,EAAiD,KAAKk7B,mBAAL,CAAyBx1F,GAAzB,CAA6B28D,EAA7B;EAClD;;EACD,WAAO,KAAK64B,mBAAZ;EACD;;EACDY,EAAAA,eAAe,CAACC,SAAD,EAAY;EACzB,SAAK,IAAItuE,EAAE,GAAG,KAAK5nB,QAAL,EAAd,EAA+B4nB,EAAE,CAAChmB,OAAH,EAA/B,GAA+C;EAC7C,YAAM46D,EAAE,GAAG50C,EAAE,CAACjmB,IAAH,EAAX;EACA,YAAMktD,KAAK,GAAG2N,EAAE,CAACjC,QAAH,EAAd;EACA1L,MAAAA,KAAK,CAAC2E,qBAAN,CAA4B,CAA5B,EAA+B0iC,SAAS,CAACx+C,WAAV,CAAsB,CAAtB,CAA/B;EACAmX,MAAAA,KAAK,CAAC2E,qBAAN,CAA4B,CAA5B,EAA+B0iC,SAAS,CAACx+C,WAAV,CAAsB,CAAtB,CAA/B;EACD;EACF;;EACDgqB,EAAAA,oBAAoB,GAAG;EACrB,SAAKnF,QAAL;EACA,QAAI45B,OAAO,GAAG,IAAd;EACA,QAAIC,OAAO,GAAG,IAAd;;EACA,SAAK,IAAI39F,CAAC,GAAG,KAAKw7F,SAAL,CAAeh0F,IAAf,KAAwB,CAArC,EAAwCxH,CAAC,IAAI,CAA7C,EAAgDA,CAAC,EAAjD,EAAqD;EACnD,YAAMm9F,OAAO,GAAG,KAAK3B,SAAL,CAAe3zF,GAAf,CAAmB7H,CAAnB,CAAhB;;EACA,YAAMo9F,MAAM,GAAGD,OAAO,CAACv1B,MAAR,EAAf;EACA,UAAI+1B,OAAO,KAAK,IAAhB,EAAsBA,OAAO,GAAGP,MAAV;EACtB,UAAIM,OAAO,KAAK,IAAhB,EAAsBN,MAAM,CAACzrC,OAAP,CAAe+rC,OAAf;EACtBA,MAAAA,OAAO,GAAGP,OAAV;EACD;;EACDQ,IAAAA,OAAO,CAAChsC,OAAR,CAAgB+rC,OAAhB;EACD;;EACDpR,EAAAA,aAAa,GAAG;EACd,QAAI1pF,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMkhE,EAAE,GAAGnhE,SAAS,CAAC,CAAD,CAApB;EACA,YAAMg7F,SAAS,GAAG,KAAKvB,SAAL,CAAet4B,EAAf,CAAlB;EACA,YAAM85B,UAAU,GAAG95B,EAAE,CAACnD,QAAH,CAAY3L,QAAQ,CAACz7C,IAArB,CAAnB;EACA,YAAMskF,eAAe,GAAG/5B,EAAE,CAACnD,QAAH,CAAY3L,QAAQ,CAAC37C,KAArB,CAAxB;EACA,YAAMykF,SAAS,GAAG,KAAKzR,aAAL,CAAmBsR,SAAS,GAAG,CAA/B,EAAkC,KAAKpC,SAAL,CAAeh0F,IAAf,EAAlC,EAAyDq2F,UAAzD,CAAlB;EACA,YAAMG,SAAS,GAAG,KAAK1R,aAAL,CAAmB,CAAnB,EAAsBsR,SAAtB,EAAiCG,SAAjC,CAAlB;EACA,UAAIC,SAAS,KAAKF,eAAlB,EAAmC,MAAM,IAAI13B,iBAAJ,CAAsB,uBAAuBrC,EAAE,CAACz6D,aAAH,EAA7C,CAAN;EACpC,KARD,MAQO,IAAI1G,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAM2qD,UAAU,GAAG5qD,SAAS,CAAC,CAAD,CAA5B;EAAA,YAAiCq7F,QAAQ,GAAGr7F,SAAS,CAAC,CAAD,CAArD;EAAA,YAA0Di7F,UAAU,GAAGj7F,SAAS,CAAC,CAAD,CAAhF;EACA,UAAIs7F,SAAS,GAAGL,UAAhB;;EACA,WAAK,IAAI79F,CAAC,GAAGwtD,UAAb,EAAyBxtD,CAAC,GAAGi+F,QAA7B,EAAuCj+F,CAAC,EAAxC,EAA4C;EAC1C,cAAMm+F,MAAM,GAAG,KAAK3C,SAAL,CAAe3zF,GAAf,CAAmB7H,CAAnB,CAAf;;EACAm+F,QAAAA,MAAM,CAACp2B,aAAP,CAAqB9S,QAAQ,CAAC37C,KAA9B,EAAqC4kF,SAArC;EACAA,QAAAA,SAAS,GAAGC,MAAM,CAACv9B,QAAP,CAAgB3L,QAAQ,CAACz7C,IAAzB,CAAZ;EACD;;EACD,aAAO0kF,SAAP;EACD;EACF;;EACDE,EAAAA,cAAc,GAAG;EACf,SAAK,IAAIjvE,EAAE,GAAG,KAAK5nB,QAAL,EAAd,EAA+B4nB,EAAE,CAAChmB,OAAH,EAA/B,GAA+C;EAC7C,YAAM46D,EAAE,GAAG50C,EAAE,CAACjmB,IAAH,EAAX;EACA,YAAMktD,KAAK,GAAG2N,EAAE,CAACjC,QAAH,EAAd;EACA1L,MAAAA,KAAK,CAAC6E,KAAN,CAAY8I,EAAE,CAAC6D,MAAH,GAAY9F,QAAZ,EAAZ;EACD;EACF;;EACDotB,EAAAA,wBAAwB,CAACN,EAAD,EAAK;EAC3B,QAAIoO,QAAQ,GAAG,IAAf;EACA,QAAIC,QAAQ,GAAG,IAAf;EACA,QAAIC,KAAK,GAAG,KAAKL,sBAAjB;;EACA,SAAK,IAAI78F,CAAC,GAAG,KAAK48F,mBAAL,CAAyBp1F,IAAzB,KAAkC,CAA/C,EAAkDxH,CAAC,IAAI,CAAvD,EAA0DA,CAAC,EAA3D,EAA+D;EAC7D,YAAMm9F,OAAO,GAAG,KAAKP,mBAAL,CAAyB/0F,GAAzB,CAA6B7H,CAA7B,CAAhB;;EACA,YAAMo9F,MAAM,GAAGD,OAAO,CAACv1B,MAAR,EAAf;EACA,UAAIo1B,QAAQ,KAAK,IAAb,IAAqBG,OAAO,CAAC90B,WAAR,OAA0BumB,EAAnD,EAAuDoO,QAAQ,GAAGG,OAAX;;EACvD,cAAQD,KAAR;EACA,aAAK,KAAKL,sBAAV;EACE,cAAIO,MAAM,CAAC/0B,WAAP,OAAyBumB,EAA7B,EAAiC;EACjCqO,UAAAA,QAAQ,GAAGG,MAAX;EACAF,UAAAA,KAAK,GAAG,KAAKJ,oBAAb;EACA;;EACF,aAAK,KAAKA,oBAAV;EACE,cAAIK,OAAO,CAAC90B,WAAR,OAA0BumB,EAA9B,EAAkC;EAClCqO,UAAAA,QAAQ,CAAC/1B,UAAT,CAAoBi2B,OAApB;EACAD,UAAAA,KAAK,GAAG,KAAKL,sBAAb;EACA;EAVF;EAYD;;EACD,QAAIK,KAAK,KAAK,KAAKJ,oBAAnB,EAAyC;EACvC/5F,MAAAA,MAAM,CAACE,MAAP,CAAc+5F,QAAQ,KAAK,IAA3B,EAAiC,uCAAjC;EACAj6F,MAAAA,MAAM,CAACE,MAAP,CAAc+5F,QAAQ,CAAC30B,WAAT,OAA2BumB,EAAzC,EAA6C,sCAA7C;EACAqO,MAAAA,QAAQ,CAAC/1B,UAAT,CAAoB81B,QAApB;EACD;EACF;;EACD/O,EAAAA,iBAAiB,GAAG;EAClB,QAAIrrF,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,UAAIgvD,MAAM,GAAG,CAAb;;EACA,WAAK,IAAI1iC,EAAE,GAAG,KAAK5nB,QAAL,EAAd,EAA+B4nB,EAAE,CAAChmB,OAAH,EAA/B,GAA+C;EAC7C,cAAM46D,EAAE,GAAG50C,EAAE,CAACjmB,IAAH,EAAX;EACA,YAAI66D,EAAE,CAACrC,UAAH,EAAJ,EAAqB7P,MAAM;EAC5B;;EACD,aAAOA,MAAP;EACD,KAPD,MAOO,IAAIjvD,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAM+rF,EAAE,GAAGhsF,SAAS,CAAC,CAAD,CAApB;EACA,UAAIivD,MAAM,GAAG,CAAb;;EACA,WAAK,IAAI1iC,EAAE,GAAG,KAAK5nB,QAAL,EAAd,EAA+B4nB,EAAE,CAAChmB,OAAH,EAA/B,GAA+C;EAC7C,cAAM46D,EAAE,GAAG50C,EAAE,CAACjmB,IAAH,EAAX;EACA,YAAI66D,EAAE,CAACsE,WAAH,OAAqBumB,EAAzB,EAA6B/8B,MAAM;EACpC;;EACD,aAAOA,MAAP;EACD;EACF;;EACDiQ,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAKlM,MAAZ;EACD;;EACDyoC,EAAAA,oBAAoB,GAAG;EACrB,QAAIxC,QAAQ,GAAGl6D,QAAQ,CAACM,IAAxB;;EACA,SAAK,IAAI9S,EAAE,GAAG,KAAK5nB,QAAL,EAAd,EAA+B4nB,EAAE,CAAChmB,OAAH,EAA/B,GAA+C;EAC7C,YAAMg0F,OAAO,GAAGhuE,EAAE,CAACjmB,IAAH,EAAhB;EACA,YAAMk0F,MAAM,GAAGD,OAAO,CAACv1B,MAAR,EAAf;;EACA,UAAI,CAACu1B,OAAO,CAAC71B,UAAR,EAAL,EAA2B;EACzB,YAAI61B,OAAO,CAACz7B,UAAR,EAAJ,EAA0B;EACxBm6B,UAAAA,QAAQ,GAAGl6D,QAAQ,CAACK,QAApB;EACA;EACD;;EACD,YAAIo7D,MAAM,CAAC17B,UAAP,EAAJ,EAAyB;EACvBm6B,UAAAA,QAAQ,GAAGl6D,QAAQ,CAACG,QAApB;EACA;EACD;EACF;EACF;;EACD,QAAI+5D,QAAQ,KAAKl6D,QAAQ,CAACM,IAA1B,EAAgC,OAAO,IAAP;EAChC,QAAI65D,OAAO,GAAGD,QAAd;;EACA,SAAK,IAAI1sE,EAAE,GAAG,KAAK5nB,QAAL,EAAd,EAA+B4nB,EAAE,CAAChmB,OAAH,EAA/B,GAA+C;EAC7C,YAAMg0F,OAAO,GAAGhuE,EAAE,CAACjmB,IAAH,EAAhB;EACA,YAAMk0F,MAAM,GAAGD,OAAO,CAACv1B,MAAR,EAAf;;EACA,UAAIu1B,OAAO,CAAC71B,UAAR,EAAJ,EAA0B;EACxB61B,QAAAA,OAAO,CAACn5B,OAAR,GAAkBjC,UAAlB,CAA6B+5B,OAAO,KAAKn6D,QAAQ,CAACK,QAAlD;EACD,OAFD,MAEO;EACL,YAAIm7D,OAAO,CAACz7B,UAAR,EAAJ,EAA0Bo6B,OAAO,GAAGn6D,QAAQ,CAACG,QAAnB;EAC1B,YAAIs7D,MAAM,CAAC17B,UAAP,EAAJ,EAAyBo6B,OAAO,GAAGn6D,QAAQ,CAACK,QAAnB;EAC1B;EACF;EACF;;EACDu6D,EAAAA,gBAAgB,CAACn/E,IAAD,EAAO;EACrB,UAAMm/E,gBAAN,CAAuBz5F,IAAvB,CAA4B,IAA5B,EAAkCsa,IAAlC;EACA,SAAKw4C,MAAL,GAAc,IAAIiG,KAAJ,CAAUl6B,QAAQ,CAACM,IAAnB,CAAd;;EACA,SAAK,IAAI9S,EAAE,GAAG,KAAK5nB,QAAL,EAAd,EAA+B4nB,EAAE,CAAChmB,OAAH,EAA/B,GAA+C;EAC7C,YAAMygE,EAAE,GAAGz6C,EAAE,CAACjmB,IAAH,EAAX;EACA,YAAM7D,CAAC,GAAGukE,EAAE,CAAC5F,OAAH,EAAV;EACA,YAAMs6B,MAAM,GAAGj5F,CAAC,CAACy8D,QAAF,EAAf;;EACA,WAAK,IAAI9hE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,CAApB,EAAuBA,CAAC,EAAxB,EAA4B;EAC1B,cAAMssE,IAAI,GAAGgyB,MAAM,CAACr/C,WAAP,CAAmBj/C,CAAnB,CAAb;EACA,YAAIssE,IAAI,KAAK3qC,QAAQ,CAACK,QAAlB,IAA8BsqC,IAAI,KAAK3qC,QAAQ,CAACI,QAApD,EAA8D,KAAK6zB,MAAL,CAAY6F,WAAZ,CAAwBz7D,CAAxB,EAA2B2hC,QAAQ,CAACK,QAApC;EAC/D;EACF;EACF;;EA9NuD;;ECN3C,MAAMu8D,kBAAN,SAAiCj2B,WAAjC,CAA6C;EAC1DjpE,EAAAA,WAAW,GAAG;EACZ;EACD;;EACD0lE,EAAAA,UAAU,CAAC3/D,KAAD,EAAQ;EAChB,WAAO,IAAIs+D,IAAJ,CAASt+D,KAAT,EAAgB,IAAIu3F,gBAAJ,EAAhB,CAAP;EACD;;EANyD;;ECD7C,MAAM6B,uBAAN,CAA8B;EAC3Cn/F,EAAAA,WAAW,GAAG;EACZm/F,IAAAA,uBAAuB,CAAC97F,YAAxB,CAAqCC,KAArC,CAA2C,IAA3C,EAAiDC,SAAjD;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKuyC,IAAL,GAAY,IAAZ;EACA,SAAKwpD,YAAL,GAAoB,IAApB;EACA,UAAM50F,GAAG,GAAGjH,SAAS,CAAC,CAAD,CAArB;EACA,SAAKqyC,IAAL,GAAYprC,GAAZ;EACA,SAAK40F,YAAL,GAAoBD,uBAAuB,CAACrT,WAAxB,CAAoCthF,GAApC,CAApB;EACD;;EACD,SAAOshF,WAAP,CAAmBthF,GAAnB,EAAwB;EACtB,WAAOohB,gBAAgB,CAACqB,mBAAjB,CAAqCziB,GAArC,MAA8C,CAArD;EACD;;EACD,SAAO60F,eAAP,CAAuBvyE,IAAvB,EAA6BwyE,YAA7B,EAA2CvyE,IAA3C,EAAiDwyE,YAAjD,EAA+D;EAC7D,UAAM1xE,IAAI,GAAGyxE,YAAY,GAAG,CAAH,GAAO,CAAC,CAAjC;EACA,UAAMxxE,IAAI,GAAGyxE,YAAY,GAAG,CAAH,GAAO,CAAC,CAAjC;EACA,UAAMC,MAAM,GAAGF,YAAY,GAAGxyE,IAAI,CAACtpB,MAAR,GAAiB,CAAC,CAA7C;EACA,UAAMi8F,MAAM,GAAGF,YAAY,GAAGxyE,IAAI,CAACvpB,MAAR,GAAiB,CAAC,CAA7C;EACA,QAAIuqB,EAAE,GAAGuxE,YAAY,GAAG,CAAH,GAAOxyE,IAAI,CAACtpB,MAAL,GAAc,CAA1C;EACA,QAAIwqB,EAAE,GAAGuxE,YAAY,GAAG,CAAH,GAAOxyE,IAAI,CAACvpB,MAAL,GAAc,CAA1C;;EACA,WAAO,IAAP,EAAa;EACX,YAAMk8F,MAAM,GAAG5yE,IAAI,CAACiB,EAAD,CAAJ,CAASpoB,SAAT,CAAmBonB,IAAI,CAACiB,EAAD,CAAvB,CAAf;EACA,UAAI0xE,MAAM,KAAK,CAAf,EAAkB,OAAOA,MAAP;EAClB3xE,MAAAA,EAAE,IAAIF,IAAN;EACAG,MAAAA,EAAE,IAAIF,IAAN;EACA,YAAM6xE,KAAK,GAAG5xE,EAAE,KAAKyxE,MAArB;EACA,YAAMI,KAAK,GAAG5xE,EAAE,KAAKyxE,MAArB;EACA,UAAIE,KAAK,IAAI,CAACC,KAAd,EAAqB,OAAO,CAAC,CAAR;EACrB,UAAI,CAACD,KAAD,IAAUC,KAAd,EAAqB,OAAO,CAAP;EACrB,UAAID,KAAK,IAAIC,KAAb,EAAoB,OAAO,CAAP;EACrB;EACF;;EACDj6F,EAAAA,SAAS,CAAC4nB,EAAD,EAAK;EACZ,UAAMsyE,GAAG,GAAGtyE,EAAZ;EACA,UAAMpO,IAAI,GAAGggF,uBAAuB,CAACE,eAAxB,CAAwC,KAAKzpD,IAA7C,EAAmD,KAAKwpD,YAAxD,EAAsES,GAAG,CAACjqD,IAA1E,EAAgFiqD,GAAG,CAACT,YAApF,CAAb;EACA,WAAOjgF,IAAP;EACD;;EACD,MAAIvY,WAAJ,GAAkB;EAChB,WAAO,CAAC7D,UAAD,CAAP;EACD;;EAxC0C;;ECC9B,MAAM+8F,QAAN,CAAe;EAC5B9/F,EAAAA,WAAW,GAAG;EACZ8/F,IAAAA,QAAQ,CAACz8F,YAAT,CAAsBC,KAAtB,CAA4B,IAA5B,EAAkCC,SAAlC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKkhE,MAAL,GAAc,IAAI57D,SAAJ,EAAd;EACA,SAAKo3F,OAAL,GAAe,IAAI7hC,OAAJ,EAAf;EACD;;EACDX,EAAAA,KAAK,CAACv/B,GAAD,EAAM;EACTA,IAAAA,GAAG,CAACu/B,KAAJ,CAAU,oBAAV;;EACA,SAAK,IAAI98C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK8jD,MAAL,CAAYp8D,IAAZ,EAApB,EAAwCsY,CAAC,EAAzC,EAA6C;EAC3C,YAAMza,CAAC,GAAG,KAAKu+D,MAAL,CAAY/7D,GAAZ,CAAgBiY,CAAhB,CAAV;;EACA,UAAIA,CAAC,GAAG,CAAR,EAAWud,GAAG,CAACu/B,KAAJ,CAAU,GAAV;EACXv/B,MAAAA,GAAG,CAACu/B,KAAJ,CAAU,GAAV;EACA,YAAM/yD,GAAG,GAAGxE,CAAC,CAAC+f,cAAF,EAAZ;;EACA,WAAK,IAAIplB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6J,GAAG,CAAChH,MAAxB,EAAgC7C,CAAC,EAAjC,EAAqC;EACnC,YAAIA,CAAC,GAAG,CAAR,EAAWq9B,GAAG,CAACu/B,KAAJ,CAAU,GAAV;EACXv/B,QAAAA,GAAG,CAACu/B,KAAJ,CAAU/yD,GAAG,CAAC7J,CAAD,CAAH,CAAO2B,CAAP,GAAW,GAAX,GAAiBkI,GAAG,CAAC7J,CAAD,CAAH,CAAO4B,CAAlC;EACD;;EACDy7B,MAAAA,GAAG,CAACC,OAAJ,CAAY,GAAZ;EACD;;EACDD,IAAAA,GAAG,CAACu/B,KAAJ,CAAU,KAAV;EACD;;EACDv1D,EAAAA,MAAM,CAACg4F,QAAD,EAAW;EACf,SAAK,IAAIr/F,CAAC,GAAGq/F,QAAQ,CAAC93F,QAAT,EAAb,EAAkCvH,CAAC,CAACmJ,OAAF,EAAlC,GACE,KAAK/B,GAAL,CAASpH,CAAC,CAACkJ,IAAF,EAAT;EAEH;;EACDo2F,EAAAA,aAAa,CAACj6F,CAAD,EAAI;EACf,SAAK,IAAIrF,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK4jE,MAAL,CAAYp8D,IAAZ,EAApB,EAAwCxH,CAAC,EAAzC,EACE,IAAI,KAAK4jE,MAAL,CAAY/7D,GAAZ,CAAgB7H,CAAhB,EAAmBmD,MAAnB,CAA0BkC,CAA1B,CAAJ,EAAkC,OAAOrF,CAAP;;EAEpC,WAAO,CAAC,CAAR;EACD;;EACDuH,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAKq8D,MAAL,CAAYr8D,QAAZ,EAAP;EACD;;EACDu8D,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAKF,MAAZ;EACD;;EACD/7D,EAAAA,GAAG,CAAC7H,CAAD,EAAI;EACL,WAAO,KAAK4jE,MAAL,CAAY/7D,GAAZ,CAAgB7H,CAAhB,CAAP;EACD;;EACDu/F,EAAAA,aAAa,CAACl6F,CAAD,EAAI;EACf,UAAM65F,GAAG,GAAG,IAAIV,uBAAJ,CAA4Bn5F,CAAC,CAAC+f,cAAF,EAA5B,CAAZ;;EACA,UAAMo6E,SAAS,GAAG,KAAKJ,OAAL,CAAav3F,GAAb,CAAiBq3F,GAAjB,CAAlB;;EACA,WAAOM,SAAP;EACD;;EACDp4F,EAAAA,GAAG,CAAC/B,CAAD,EAAI;EACL,SAAKu+D,MAAL,CAAYx8D,GAAZ,CAAgB/B,CAAhB;;EACA,UAAM65F,GAAG,GAAG,IAAIV,uBAAJ,CAA4Bn5F,CAAC,CAAC+f,cAAF,EAA5B,CAAZ;;EACA,SAAKg6E,OAAL,CAAa3wE,GAAb,CAAiBywE,GAAjB,EAAsB75F,CAAtB;EACD;;EApD2B;;ECHf,MAAM4xD,oBAAN,CAAyB;EACtCouB,EAAAA,oBAAoB,CAAC30B,EAAD,EAAKwH,SAAL,EAAgBvH,EAAhB,EAAoBwH,SAApB,EAA+B;;EACnDttD,EAAAA,MAAM,GAAG;;EAF6B;;ECCzB,MAAM40F,iBAAN,CAAwB;EACrCpgG,EAAAA,WAAW,GAAG;EACZogG,IAAAA,iBAAiB,CAAC/8F,YAAlB,CAA+BC,KAA/B,CAAqC,IAArC,EAA2CC,SAA3C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKw0D,gBAAL,GAAwB,KAAxB;EACA,SAAKC,UAAL,GAAkB,KAAlB;EACA,SAAKC,kBAAL,GAA0B,KAA1B;EACA,SAAKsoC,YAAL,GAAoB,KAApB;EACA,SAAKroC,wBAAL,GAAgC,IAAhC;EACA,SAAKC,GAAL,GAAW,IAAX;EACA,SAAKG,mBAAL,GAA2B,IAA3B;EACA,SAAKkoC,gBAAL,GAAwB,CAAxB;EACA,SAAKC,wBAAL,GAAgC,CAAhC;EACA,SAAKC,sBAAL,GAA8B,CAA9B;EACA,SAAKloC,QAAL,GAAgB,CAAhB;EACA,UAAMj5B,EAAE,GAAG97B,SAAS,CAAC,CAAD,CAApB;EACA,SAAK00D,GAAL,GAAW54B,EAAX;EACD;;EACD,SAAOs5B,kBAAP,CAA0B5qC,EAA1B,EAA8BC,EAA9B,EAAkC;EAChC,WAAOpuB,IAAI,CAACC,GAAL,CAASkuB,EAAE,GAAGC,EAAd,MAAsB,CAA7B;EACD;;EACD4qC,EAAAA,qBAAqB,CAACvH,EAAD,EAAKwH,SAAL,EAAgBvH,EAAhB,EAAoBwH,SAApB,EAA+B;EAClD,QAAIzH,EAAE,KAAKC,EAAX,EACE,IAAI,KAAK2G,GAAL,CAASh8B,kBAAT,OAAkC,CAAtC,EAAyC;EACvC,UAAImkE,iBAAiB,CAACznC,kBAAlB,CAAqCE,SAArC,EAAgDC,SAAhD,CAAJ,EAAgE,OAAO,IAAP;;EAChE,UAAIzH,EAAE,CAAC/sC,QAAH,EAAJ,EAAmB;EACjB,cAAMy0C,WAAW,GAAG1H,EAAE,CAAClpD,IAAH,KAAY,CAAhC;EACA,YAAI0wD,SAAS,KAAK,CAAd,IAAmBC,SAAS,KAAKC,WAAjC,IAAgDD,SAAS,KAAK,CAAd,IAAmBD,SAAS,KAAKE,WAArF,EACE,OAAO,IAAP;EAEH;EACF;EAEH,WAAO,KAAP;EACD;;EACDC,EAAAA,0BAA0B,GAAG;EAC3B,WAAO,KAAKhB,wBAAZ;EACD;;EACDmB,EAAAA,6BAA6B,GAAG;EAC9B,WAAO,KAAKpB,kBAAZ;EACD;;EACD0oC,EAAAA,kBAAkB,GAAG;EACnB,WAAO,KAAKxoC,GAAZ;EACD;;EACDqB,EAAAA,qBAAqB,GAAG;EACtB,WAAO,KAAKxB,UAAZ;EACD;;EACDkuB,EAAAA,oBAAoB,CAAC30B,EAAD,EAAKwH,SAAL,EAAgBvH,EAAhB,EAAoBwH,SAApB,EAA+B;EACjD,QAAIzH,EAAE,KAAKC,EAAP,IAAauH,SAAS,KAAKC,SAA/B,EAA0C,OAAO,IAAP;EAC1C,SAAKR,QAAL;EACA,UAAMsB,GAAG,GAAGvI,EAAE,CAACtrC,cAAH,GAAoB8yC,SAApB,CAAZ;EACA,UAAMgB,GAAG,GAAGxI,EAAE,CAACtrC,cAAH,GAAoB8yC,SAAS,GAAG,CAAhC,CAAZ;EACA,UAAMiB,GAAG,GAAGxI,EAAE,CAACvrC,cAAH,GAAoB+yC,SAApB,CAAZ;EACA,UAAMiB,GAAG,GAAGzI,EAAE,CAACvrC,cAAH,GAAoB+yC,SAAS,GAAG,CAAhC,CAAZ;;EACA,SAAKb,GAAL,CAASp8B,mBAAT,CAA6B+9B,GAA7B,EAAkCC,GAAlC,EAAuCC,GAAvC,EAA4CC,GAA5C;;EACA,QAAI,KAAK9B,GAAL,CAAS37B,eAAT,EAAJ,EAAgC;EAC9B,WAAKgkE,gBAAL;;EACA,UAAI,KAAKroC,GAAL,CAASz7B,sBAAT,EAAJ,EAAuC;EACrC,aAAK+jE,wBAAL;EACA,aAAKF,YAAL,GAAoB,IAApB;EACD;;EACD,UAAI,CAAC,KAAKznC,qBAAL,CAA2BvH,EAA3B,EAA+BwH,SAA/B,EAA0CvH,EAA1C,EAA8CwH,SAA9C,CAAL,EAA+D;EAC7D,aAAKjB,gBAAL,GAAwB,IAAxB;EACAxG,QAAAA,EAAE,CAACsI,gBAAH,CAAoB,KAAK1B,GAAzB,EAA8BY,SAA9B,EAAyC,CAAzC;EACAvH,QAAAA,EAAE,CAACqI,gBAAH,CAAoB,KAAK1B,GAAzB,EAA8Ba,SAA9B,EAAyC,CAAzC;;EACA,YAAI,KAAKb,GAAL,CAAS57B,QAAT,EAAJ,EAAyB;EACvB,eAAKmkE,sBAAL;EACA,eAAK1oC,UAAL,GAAkB,IAAlB;EACA,eAAKC,kBAAL,GAA0B,IAA1B;EACD;EACF;EACF;EACF;;EACDz7B,EAAAA,eAAe,GAAG;EAChB,WAAO,KAAKu7B,gBAAZ;EACD;;EACDrsD,EAAAA,MAAM,GAAG;EACP,WAAO,KAAP;EACD;;EACDk1F,EAAAA,uBAAuB,GAAG;EACxB,WAAO,KAAKL,YAAZ;EACD;;EACD,MAAIz5F,WAAJ,GAAkB;EAChB,WAAO,CAACgxD,oBAAD,CAAP;EACD;;EArFoC;;ECiBxB,MAAM+oC,aAAN,CAAoB;EACjC3gG,EAAAA,WAAW,GAAG;EACZ2gG,IAAAA,aAAa,CAACt9F,YAAd,CAA2BC,KAA3B,CAAiC,IAAjC,EAAuCC,SAAvC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK4wF,UAAL,GAAkB,IAAlB;EACA,SAAK2M,sBAAL,GAA8B,IAA9B;EACA,SAAKC,aAAL,GAAqB,IAArB;EACA,SAAKxqD,SAAL,GAAiB,IAAjB;EACA,SAAKqe,MAAL,GAAc,IAAd;EACA,SAAKynC,SAAL,GAAiB,IAAI2D,QAAJ,EAAjB;EACA,UAAMnL,SAAS,GAAGpxF,SAAS,CAAC,CAAD,CAA3B;EACA,SAAK0wF,UAAL,GAAkBU,SAAlB;EACD;;EACD,SAAOxwB,UAAP,CAAkBpN,KAAlB,EAAyB;EACvB,UAAM+pC,IAAI,GAAG/pC,KAAK,CAACnX,WAAN,CAAkB,CAAlB,EAAqBgW,QAAQ,CAACz7C,IAA9B,CAAb;EACA,UAAM4mF,IAAI,GAAGhqC,KAAK,CAACnX,WAAN,CAAkB,CAAlB,EAAqBgW,QAAQ,CAAC37C,KAA9B,CAAb;EACA,QAAI6mF,IAAI,KAAKx+D,QAAQ,CAACK,QAAlB,IAA8Bo+D,IAAI,KAAKz+D,QAAQ,CAACG,QAApD,EAA8D,OAAO,CAAP,CAA9D,KAA6E,IAAIq+D,IAAI,KAAKx+D,QAAQ,CAACG,QAAlB,IAA8Bs+D,IAAI,KAAKz+D,QAAQ,CAACK,QAApD,EAA8D,OAAO,CAAC,CAAR;EAC3I,WAAO,CAAP;EACD;;EACD,SAAOq+D,iBAAP,CAAyBlxE,EAAzB,EAA6B;EAC3B,UAAM/L,IAAI,GAAG,IAAIiO,eAAJ,EAAb;EACA,UAAM8iB,KAAK,GAAG,IAAInsC,SAAJ,EAAd;;EACA,WAAOmnB,EAAE,CAAChmB,OAAH,EAAP,EAAqB;EACnB,YAAMw4E,EAAE,GAAGxyD,EAAE,CAACjmB,IAAH,EAAX;EACA,YAAM2T,IAAI,GAAGuG,IAAI,CAACqC,gBAAL,CAAsBk8D,EAAE,CAACv8D,cAAH,EAAtB,CAAb;EACA+uB,MAAAA,KAAK,CAAC/sC,GAAN,CAAUyV,IAAV;EACD;;EACD,WAAOuG,IAAI,CAAC8G,aAAL,CAAmBiqB,KAAnB,CAAP;EACD;;EACDmsD,EAAAA,wBAAwB,CAACtwE,EAAD,EAAK;EAC3B,SAAKiwE,sBAAL,GAA8BjwE,EAA9B;EACD;;EACDuwE,EAAAA,gBAAgB,CAACl7F,CAAD,EAAI;EAClB,UAAMm7F,YAAY,GAAG,KAAKhF,SAAL,CAAe+D,aAAf,CAA6Bl6F,CAA7B,CAArB;;EACA,QAAIm7F,YAAY,KAAK,IAArB,EAA2B;EACzB,YAAMC,aAAa,GAAGD,YAAY,CAAC1+B,QAAb,EAAtB;EACA,UAAI4+B,YAAY,GAAGr7F,CAAC,CAACy8D,QAAF,EAAnB;;EACA,UAAI,CAAC0+B,YAAY,CAACl9B,gBAAb,CAA8Bj+D,CAA9B,CAAL,EAAuC;EACrCq7F,QAAAA,YAAY,GAAG,IAAI7kC,KAAJ,CAAUx2D,CAAC,CAACy8D,QAAF,EAAV,CAAf;EACA4+B,QAAAA,YAAY,CAACtlC,IAAb;EACD;;EACDqlC,MAAAA,aAAa,CAACxlC,KAAd,CAAoBylC,YAApB;EACA,YAAMC,UAAU,GAAGX,aAAa,CAACx8B,UAAd,CAAyBk9B,YAAzB,CAAnB;EACA,YAAME,aAAa,GAAGJ,YAAY,CAACx9B,aAAb,EAAtB;EACA,YAAM69B,QAAQ,GAAGD,aAAa,GAAGD,UAAjC;EACAH,MAAAA,YAAY,CAACj9B,aAAb,CAA2Bs9B,QAA3B;EACD,KAZD,MAYO;EACL,WAAKrF,SAAL,CAAep0F,GAAf,CAAmB/B,CAAnB;;EACAA,MAAAA,CAAC,CAACk+D,aAAF,CAAgBy8B,aAAa,CAACx8B,UAAd,CAAyBn+D,CAAC,CAACy8D,QAAF,EAAzB,CAAhB;EACD;EACF;;EACDg/B,EAAAA,cAAc,CAACC,YAAD,EAAeC,WAAf,EAA4B;EACxC,UAAMC,eAAe,GAAG,IAAIj5F,SAAJ,EAAxB;;EACA,SAAK,IAAIhI,CAAC,GAAG+gG,YAAY,CAACx5F,QAAb,EAAb,EAAsCvH,CAAC,CAACmJ,OAAF,EAAtC,GAAqD;EACnD,YAAM+3F,QAAQ,GAAGlhG,CAAC,CAACkJ,IAAF,EAAjB;EACA,YAAMmC,CAAC,GAAG61F,QAAQ,CAAC/U,sBAAT,EAAV;EACA,YAAMgV,OAAO,GAAG,IAAIpI,oBAAJ,CAAyBkI,eAAzB,CAAhB;EACA,YAAMxU,YAAY,GAAG0U,OAAO,CAACvgC,QAAR,CAAiBv1D,CAAjB,CAArB;EACA61F,MAAAA,QAAQ,CAAC1U,YAAT,CAAsBC,YAAtB;EACAyU,MAAAA,QAAQ,CAACvU,eAAT;EACAsU,MAAAA,eAAe,CAAC75F,GAAhB,CAAoB85F,QAApB;EACAF,MAAAA,WAAW,CAAC55F,GAAZ,CAAgB85F,QAAQ,CAAC9T,gBAAT,EAAhB,EAA6C8T,QAAQ,CAACl3B,QAAT,EAA7C;EACD;EACF;;EACDo3B,EAAAA,eAAe,CAACxZ,KAAD,EAAQ;EACrB,UAAMmZ,YAAY,GAAG,IAAI/4F,SAAJ,EAArB;;EACA,SAAK,IAAIhI,CAAC,GAAG4nF,KAAK,CAAC5d,QAAN,GAAiBziE,QAAjB,EAAb,EAA0CvH,CAAC,CAACmJ,OAAF,EAA1C,GAAyD;EACvD,YAAMk1C,IAAI,GAAGr+C,CAAC,CAACkJ,IAAF,EAAb;;EACA,UAAI,CAACm1C,IAAI,CAACmjB,SAAL,EAAL,EAAuB;EACrB,cAAM0/B,QAAQ,GAAG,IAAIpV,cAAJ,EAAjB;EACAoV,QAAAA,QAAQ,CAACjkF,MAAT,CAAgBohC,IAAhB;EACA0iD,QAAAA,YAAY,CAAC35F,GAAb,CAAiB85F,QAAjB;EACD;EACF;;EACDxsD,IAAAA,WAAW,CAAChsC,IAAZ,CAAiBq4F,YAAjB,EAA+BrsD,WAAW,CAACC,YAAZ,EAA/B;EACA,WAAOosD,YAAP;EACD;;EACDM,EAAAA,yBAAyB,GAAG;EAC1B,UAAMC,SAAS,GAAG,KAAK5rD,SAAL,CAAe7sB,aAAf,EAAlB;;EACA,WAAOy4E,SAAP;EACD;;EACDC,EAAAA,QAAQ,CAAC9vE,cAAD,EAAiB;EACvB,QAAI,KAAKyuE,aAAL,KAAuB,IAA3B,EAAiC,OAAO,KAAKA,aAAZ;EACjC,UAAMta,KAAK,GAAG,IAAI1B,YAAJ,EAAd;EACA,UAAMxlD,EAAE,GAAG,IAAIjC,qBAAJ,EAAX;EACAiC,IAAAA,EAAE,CAAC9C,iBAAH,CAAqBnK,cAArB;EACAm0D,IAAAA,KAAK,CAAC3B,qBAAN,CAA4B,IAAIwb,iBAAJ,CAAsB/gE,EAAtB,CAA5B;EACA,WAAOknD,KAAP;EACD;;EACD3kF,EAAAA,MAAM,CAACkd,CAAD,EAAIpY,QAAJ,EAAc;EAClB,QAAI0rB,cAAc,GAAG,KAAKwuE,sBAA1B;EACA,QAAIxuE,cAAc,KAAK,IAAvB,EAA6BA,cAAc,GAAGtT,CAAC,CAACsB,iBAAF,EAAjB;EAC7B,SAAKi2B,SAAL,GAAiBv3B,CAAC,CAACV,UAAF,EAAjB;EACA,UAAM08E,YAAY,GAAG,IAAI3C,kBAAJ,CAAuB/lE,cAAvB,EAAuC,KAAK6hE,UAA5C,CAArB;EACA,UAAMkO,eAAe,GAAG,IAAIxH,qBAAJ,CAA0B77E,CAA1B,EAA6BpY,QAA7B,EAAuCo0F,YAAvC,CAAxB;EACA,UAAMsH,gBAAgB,GAAGD,eAAe,CAACrG,SAAhB,EAAzB;EACA,QAAIsG,gBAAgB,CAACj6F,IAAjB,MAA2B,CAA/B,EACE,OAAO,KAAK65F,yBAAL,EAAP;EAEF,SAAKK,iBAAL,CAAuBD,gBAAvB,EAAyChwE,cAAzC;EACA,SAAKsiC,MAAL,GAAc,IAAIwU,WAAJ,CAAgB,IAAIg2B,kBAAJ,EAAhB,CAAd;;EACA,SAAKxqC,MAAL,CAAY8F,QAAZ,CAAqB,KAAK2hC,SAAL,CAAe13B,QAAf,EAArB;;EACA,UAAMi9B,YAAY,GAAG,KAAKK,eAAL,CAAqB,KAAKrtC,MAA1B,CAArB;EACA,UAAMitC,WAAW,GAAG,IAAI7R,cAAJ,CAAmB,KAAKz5C,SAAxB,CAApB;EACA,SAAKorD,cAAL,CAAoBC,YAApB,EAAkCC,WAAlC;EACA,UAAM7Q,cAAc,GAAG6Q,WAAW,CAAC5rD,WAAZ,EAAvB;EACA,QAAI+6C,cAAc,CAAC3oF,IAAf,MAAyB,CAA7B,EACE,OAAO,KAAK65F,yBAAL,EAAP;;EAEF,UAAMM,UAAU,GAAG,KAAKjsD,SAAL,CAAexrB,aAAf,CAA6BimE,cAA7B,CAAnB;;EACA,WAAOwR,UAAP;EACD;;EACDD,EAAAA,iBAAiB,CAACD,gBAAD,EAAmBhwE,cAAnB,EAAmC;EAClD,UAAMm0D,KAAK,GAAG,KAAK2b,QAAL,CAAc9vE,cAAd,CAAd;EACAm0D,IAAAA,KAAK,CAAC/B,YAAN,CAAmB4d,gBAAnB;EACA,UAAMG,eAAe,GAAGhc,KAAK,CAACpE,kBAAN,EAAxB;;EACA,SAAK,IAAIxhF,CAAC,GAAG4hG,eAAe,CAACr6F,QAAhB,EAAb,EAAyCvH,CAAC,CAACmJ,OAAF,EAAzC,GAAwD;EACtD,YAAMs7E,MAAM,GAAGzkF,CAAC,CAACkJ,IAAF,EAAf;EACA,YAAMW,GAAG,GAAG46E,MAAM,CAACr/D,cAAP,EAAZ;EACA,UAAIvb,GAAG,CAAChH,MAAJ,KAAe,CAAf,IAAoBgH,GAAG,CAAC,CAAD,CAAH,CAAOtF,QAAP,CAAgBsF,GAAG,CAAC,CAAD,CAAnB,CAAxB,EAAiD;EACjD,YAAMg4F,QAAQ,GAAGpd,MAAM,CAACvX,OAAP,EAAjB;EACA,YAAMnT,IAAI,GAAG,IAAIgF,IAAJ,CAAS0lB,MAAM,CAACr/D,cAAP,EAAT,EAAkC,IAAIy2C,KAAJ,CAAUgmC,QAAV,CAAlC,CAAb;EACA,WAAKtB,gBAAL,CAAsBxmC,IAAtB;EACD;EACF;;EACD+nC,EAAAA,QAAQ,CAAClc,KAAD,EAAQ;EACd,SAAKsa,aAAL,GAAqBta,KAArB;EACD;;EAhIgC;;ECfpB,MAAMmc,eAAN,CAAsB;EACnC1iG,EAAAA,WAAW,GAAG;EACZ0iG,IAAAA,eAAe,CAACr/F,YAAhB,CAA6BC,KAA7B,CAAmC,IAAnC,EAAyCC,SAAzC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK40D,GAAL,GAAW,IAAI76B,qBAAJ,EAAX;EACA,SAAKulE,WAAL,GAAmB,IAAnB;EACA,UAAMvgB,UAAU,GAAG7+E,SAAS,CAAC,CAAD,CAA5B;EACA,SAAKo/F,WAAL,GAAmBvgB,UAAnB;EACD;;EACDwgB,EAAAA,6BAA6B,GAAG;EAC9B,QAAIr/F,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,WAAK,IAAI7C,CAAC,GAAG,KAAKgiG,WAAL,CAAiBz6F,QAAjB,EAAb,EAA0CvH,CAAC,CAACmJ,OAAF,EAA1C,GAAyD;EACvD,cAAMw4E,EAAE,GAAG3hF,CAAC,CAACkJ,IAAF,EAAX;EACA,cAAMW,GAAG,GAAG83E,EAAE,CAACv8D,cAAH,EAAZ;EACA,aAAK68E,6BAAL,CAAmCp4F,GAAG,CAAC,CAAD,CAAtC,EAA2C,KAAKm4F,WAAhD;EACA,aAAKC,6BAAL,CAAmCp4F,GAAG,CAACA,GAAG,CAAChH,MAAJ,GAAa,CAAd,CAAtC,EAAwD,KAAKm/F,WAA7D;EACD;EACF,KAPD,MAOO,IAAIp/F,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMuoB,MAAM,GAAGxoB,SAAS,CAAC,CAAD,CAAxB;EAAA,YAA6B6+E,UAAU,GAAG7+E,SAAS,CAAC,CAAD,CAAnD;;EACA,WAAK,IAAI5C,CAAC,GAAGyhF,UAAU,CAACl6E,QAAX,EAAb,EAAoCvH,CAAC,CAACmJ,OAAF,EAApC,GAAmD;EACjD,cAAMw4E,EAAE,GAAG3hF,CAAC,CAACkJ,IAAF,EAAX;EACA,cAAMW,GAAG,GAAG83E,EAAE,CAACv8D,cAAH,EAAZ;;EACA,aAAK,IAAItF,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGjW,GAAG,CAAChH,MAAJ,GAAa,CAAjC,EAAoCid,CAAC,EAArC,EACE,IAAIjW,GAAG,CAACiW,CAAD,CAAH,CAAO3c,MAAP,CAAcioB,MAAd,CAAJ,EAA2B,MAAM,IAAI5oB,gBAAJ,CAAqB,mDAAmDsd,CAAnD,GAAuD,OAAvD,GAAiEsL,MAAtF,CAAN;EAE9B;EACF;EACF;;EACD82E,EAAAA,0BAA0B,GAAG;EAC3B,QAAIt/F,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,WAAK,IAAI7C,CAAC,GAAG,KAAKgiG,WAAL,CAAiBz6F,QAAjB,EAAb,EAA0CvH,CAAC,CAACmJ,OAAF,EAA1C,GAAyD;EACvD,cAAMg5F,GAAG,GAAGniG,CAAC,CAACkJ,IAAF,EAAZ;;EACA,aAAK,IAAI4W,CAAC,GAAG,KAAKkiF,WAAL,CAAiBz6F,QAAjB,EAAb,EAA0CuY,CAAC,CAAC3W,OAAF,EAA1C,GAAyD;EACvD,gBAAMg8E,GAAG,GAAGrlE,CAAC,CAAC5W,IAAF,EAAZ;EACA,eAAKg5F,0BAAL,CAAgCC,GAAhC,EAAqChd,GAArC;EACD;EACF;EACF,KARD,MAQO,IAAIviF,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMs/F,GAAG,GAAGv/F,SAAS,CAAC,CAAD,CAArB;EAAA,YAA0BuiF,GAAG,GAAGviF,SAAS,CAAC,CAAD,CAAzC;EACA,YAAMw/F,IAAI,GAAGD,GAAG,CAAC/8E,cAAJ,EAAb;EACA,YAAM+G,IAAI,GAAGg5D,GAAG,CAAC//D,cAAJ,EAAb;;EACA,WAAK,IAAIksE,EAAE,GAAG,CAAd,EAAiBA,EAAE,GAAG8Q,IAAI,CAACv/F,MAAL,GAAc,CAApC,EAAuCyuF,EAAE,EAAzC,EACE,KAAK,IAAIlkE,EAAE,GAAG,CAAd,EAAiBA,EAAE,GAAGjB,IAAI,CAACtpB,MAAL,GAAc,CAApC,EAAuCuqB,EAAE,EAAzC,EACE,KAAK80E,0BAAL,CAAgCC,GAAhC,EAAqC7Q,EAArC,EAAyCnM,GAAzC,EAA8C/3D,EAA9C;EAGL,KATM,MASA,IAAIxqB,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAM6tD,EAAE,GAAG9tD,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyBs1D,SAAS,GAAGt1D,SAAS,CAAC,CAAD,CAA9C;EAAA,YAAmD+tD,EAAE,GAAG/tD,SAAS,CAAC,CAAD,CAAjE;EAAA,YAAsEu1D,SAAS,GAAGv1D,SAAS,CAAC,CAAD,CAA3F;EACA,UAAI8tD,EAAE,KAAKC,EAAP,IAAauH,SAAS,KAAKC,SAA/B,EAA0C,OAAO,IAAP;EAC1C,YAAMc,GAAG,GAAGvI,EAAE,CAACtrC,cAAH,GAAoB8yC,SAApB,CAAZ;EACA,YAAMgB,GAAG,GAAGxI,EAAE,CAACtrC,cAAH,GAAoB8yC,SAAS,GAAG,CAAhC,CAAZ;EACA,YAAMiB,GAAG,GAAGxI,EAAE,CAACvrC,cAAH,GAAoB+yC,SAApB,CAAZ;EACA,YAAMiB,GAAG,GAAGzI,EAAE,CAACvrC,cAAH,GAAoB+yC,SAAS,GAAG,CAAhC,CAAZ;;EACA,WAAKb,GAAL,CAASp8B,mBAAT,CAA6B+9B,GAA7B,EAAkCC,GAAlC,EAAuCC,GAAvC,EAA4CC,GAA5C;;EACA,UAAI,KAAK9B,GAAL,CAAS37B,eAAT,EAAJ,EACE,IAAI,KAAK27B,GAAL,CAAS57B,QAAT,MAAuB,KAAKqkE,uBAAL,CAA6B,KAAKzoC,GAAlC,EAAuC2B,GAAvC,EAA4CC,GAA5C,CAAvB,IAA2E,KAAK6mC,uBAAL,CAA6B,KAAKzoC,GAAlC,EAAuC6B,GAAvC,EAA4CC,GAA5C,CAA/E,EACE,MAAM,IAAI52D,gBAAJ,CAAqB,qCAAqCy2D,GAArC,GAA2C,GAA3C,GAAiDC,GAAjD,GAAuD,OAAvD,GAAiEC,GAAjE,GAAuE,GAAvE,GAA6EC,GAAlG,CAAN;EAGL;EACF;;EACDipC,EAAAA,UAAU,GAAG;EACX,SAAKJ,6BAAL;EACA,SAAKC,0BAAL;EACA,SAAKI,cAAL;EACD;;EACDA,EAAAA,cAAc,GAAG;EACf,QAAI1/F,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,WAAK,IAAI7C,CAAC,GAAG,KAAKgiG,WAAL,CAAiBz6F,QAAjB,EAAb,EAA0CvH,CAAC,CAACmJ,OAAF,EAA1C,GAAyD;EACvD,cAAMw4E,EAAE,GAAG3hF,CAAC,CAACkJ,IAAF,EAAX;EACA,aAAKo5F,cAAL,CAAoB3gB,EAApB;EACD;EACF,KALD,MAKO,IAAI/+E,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAM8+E,EAAE,GAAG/+E,SAAS,CAAC,CAAD,CAApB;EACA,YAAMiH,GAAG,GAAG83E,EAAE,CAACv8D,cAAH,EAAZ;;EACA,WAAK,IAAIplB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6J,GAAG,CAAChH,MAAJ,GAAa,CAAjC,EAAoC7C,CAAC,EAArC,EACE,KAAKuiG,aAAL,CAAmB14F,GAAG,CAAC7J,CAAD,CAAtB,EAA2B6J,GAAG,CAAC7J,CAAC,GAAG,CAAL,CAA9B,EAAuC6J,GAAG,CAAC7J,CAAC,GAAG,CAAL,CAA1C;EAEH;EACF;;EACD+/F,EAAAA,uBAAuB,CAACrhE,EAAD,EAAK5X,EAAL,EAASvb,EAAT,EAAa;EAClC,SAAK,IAAIvL,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG0+B,EAAE,CAACpD,kBAAH,EAApB,EAA6Ct7B,CAAC,EAA9C,EAAkD;EAChD,YAAM88B,KAAK,GAAG4B,EAAE,CAAC3C,eAAH,CAAmB/7B,CAAnB,CAAd;EACA,UAAI,EAAE88B,KAAK,CAAC35B,MAAN,CAAa2jB,EAAb,KAAoBgW,KAAK,CAAC35B,MAAN,CAAaoI,EAAb,CAAtB,CAAJ,EAA6C,OAAO,IAAP;EAC9C;;EACD,WAAO,KAAP;EACD;;EACDg3F,EAAAA,aAAa,CAACz7E,EAAD,EAAKvb,EAAL,EAASC,EAAT,EAAa;EACxB,QAAIsb,EAAE,CAAC3jB,MAAH,CAAUqI,EAAV,CAAJ,EAAmB,MAAM,IAAIhJ,gBAAJ,CAAqB,iCAAiCu/F,eAAe,CAAC3+E,IAAhB,CAAqBqC,gBAArB,CAAsC,CAACqB,EAAD,EAAKvb,EAAL,EAASC,EAAT,CAAtC,CAAtD,CAAN;EACpB;;EA1FkC;EA4FrCu2F,eAAe,CAAC3+E,IAAhB,GAAuB,IAAIiO,eAAJ,EAAvB;;EC3Fe,MAAMmxE,QAAN,CAAe;EAC5BnjG,EAAAA,WAAW,GAAG;EACZmjG,IAAAA,QAAQ,CAAC9/F,YAAT,CAAsBC,KAAtB,CAA4B,IAA5B,EAAkCC,SAAlC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK40D,GAAL,GAAW,IAAX;EACA,SAAKrd,GAAL,GAAW,IAAX;EACA,SAAKwoD,WAAL,GAAmB,IAAnB;EACA,SAAKC,SAAL,GAAiB,IAAjB;EACA,SAAKC,SAAL,GAAiB,IAAjB;EACA,SAAKC,SAAL,GAAiB,IAAjB;EACA,SAAKpd,YAAL,GAAoB,IAApB;EACA,SAAKx6E,KAAL,GAAa,IAAb;EACA,SAAKC,KAAL,GAAa,IAAb;EACA,SAAKC,KAAL,GAAa,IAAb;EACA,SAAKC,KAAL,GAAa,IAAb;EACA,SAAK03F,OAAL,GAAe,IAAI/4F,KAAJ,CAAU,CAAV,EAAaC,IAAb,CAAkB,IAAlB,CAAf;EACA,SAAK+4F,QAAL,GAAgB,IAAhB;EACA,UAAM78E,EAAE,GAAGrjB,SAAS,CAAC,CAAD,CAApB;EAAA,UAAyBijF,WAAW,GAAGjjF,SAAS,CAAC,CAAD,CAAhD;EAAA,UAAqD87B,EAAE,GAAG97B,SAAS,CAAC,CAAD,CAAnE;EACA,SAAK6/F,WAAL,GAAmBx8E,EAAnB;EACA,SAAKg0B,GAAL,GAAWh0B,EAAX;EACA,SAAKu/D,YAAL,GAAoBK,WAApB;EACA,SAAKvuB,GAAL,GAAW54B,EAAX;EACA,QAAImnD,WAAW,IAAI,CAAnB,EAAsB,MAAM,IAAIlmF,wBAAJ,CAA6B,+BAA7B,CAAN;;EACtB,QAAIkmF,WAAW,KAAK,GAApB,EAAyB;EACvB,WAAK5rC,GAAL,GAAW,IAAIv2C,UAAJ,CAAe,KAAK2N,KAAL,CAAW4U,EAAE,CAACtkB,CAAd,CAAf,EAAiC,KAAK0P,KAAL,CAAW4U,EAAE,CAACrkB,CAAd,CAAjC,CAAX;EACA,WAAK+gG,SAAL,GAAiB,IAAIj/F,UAAJ,EAAjB;EACA,WAAKk/F,SAAL,GAAiB,IAAIl/F,UAAJ,EAAjB;EACD;;EACD,SAAKq/F,WAAL,CAAiB,KAAK9oD,GAAtB;EACD;;EACD+oD,EAAAA,gBAAgB,CAACl8E,EAAD,EAAKvb,EAAL,EAAS;EACvB,UAAM03F,OAAO,GAAGhkG,IAAI,CAAC+M,GAAL,CAAS8a,EAAE,CAACnlB,CAAZ,EAAe4J,EAAE,CAAC5J,CAAlB,CAAhB;EACA,UAAMuhG,OAAO,GAAGjkG,IAAI,CAACiN,GAAL,CAAS4a,EAAE,CAACnlB,CAAZ,EAAe4J,EAAE,CAAC5J,CAAlB,CAAhB;EACA,UAAMwhG,OAAO,GAAGlkG,IAAI,CAAC+M,GAAL,CAAS8a,EAAE,CAACllB,CAAZ,EAAe2J,EAAE,CAAC3J,CAAlB,CAAhB;EACA,UAAMwhG,OAAO,GAAGnkG,IAAI,CAACiN,GAAL,CAAS4a,EAAE,CAACllB,CAAZ,EAAe2J,EAAE,CAAC3J,CAAlB,CAAhB;EACA,UAAMyhG,iBAAiB,GAAG,KAAKp4F,KAAL,GAAag4F,OAAb,IAAwB,KAAKj4F,KAAL,GAAak4F,OAArC,IAAgD,KAAK/3F,KAAL,GAAag4F,OAA7D,IAAwE,KAAKj4F,KAAL,GAAak4F,OAA/G;EACA,QAAIC,iBAAJ,EAAuB,OAAO,KAAP;EACvB,UAAM13F,UAAU,GAAG,KAAK23F,yBAAL,CAA+Bx8E,EAA/B,EAAmCvb,EAAnC,CAAnB;EACAxI,IAAAA,MAAM,CAACE,MAAP,CAAc,EAAEogG,iBAAiB,IAAI13F,UAAvB,CAAd,EAAkD,yBAAlD;EACA,WAAOA,UAAP;EACD;;EACDo3F,EAAAA,WAAW,CAAC98E,EAAD,EAAK;EACd,UAAMjnB,SAAS,GAAG,GAAlB;EACA,SAAKgM,KAAL,GAAaib,EAAE,CAACtkB,CAAH,GAAO3C,SAApB;EACA,SAAKiM,KAAL,GAAagb,EAAE,CAACtkB,CAAH,GAAO3C,SAApB;EACA,SAAKkM,KAAL,GAAa+a,EAAE,CAACrkB,CAAH,GAAO5C,SAApB;EACA,SAAKmM,KAAL,GAAa8a,EAAE,CAACrkB,CAAH,GAAO5C,SAApB;EACA,SAAK6jG,OAAL,CAAa,CAAb,IAAkB,IAAIn/F,UAAJ,CAAe,KAAKuH,KAApB,EAA2B,KAAKE,KAAhC,CAAlB;EACA,SAAK03F,OAAL,CAAa,CAAb,IAAkB,IAAIn/F,UAAJ,CAAe,KAAKsH,KAApB,EAA2B,KAAKG,KAAhC,CAAlB;EACA,SAAK03F,OAAL,CAAa,CAAb,IAAkB,IAAIn/F,UAAJ,CAAe,KAAKsH,KAApB,EAA2B,KAAKE,KAAhC,CAAlB;EACA,SAAK23F,OAAL,CAAa,CAAb,IAAkB,IAAIn/F,UAAJ,CAAe,KAAKuH,KAApB,EAA2B,KAAKC,KAAhC,CAAlB;EACD;;EACDS,EAAAA,UAAU,CAACmb,EAAD,EAAKvb,EAAL,EAAS;EACjB,QAAI,KAAKi6E,YAAL,KAAsB,GAA1B,EAA+B,OAAO,KAAKwd,gBAAL,CAAsBl8E,EAAtB,EAA0Bvb,EAA1B,CAAP;EAC/B,SAAKg4F,UAAL,CAAgBz8E,EAAhB,EAAoB,KAAK67E,SAAzB;EACA,SAAKY,UAAL,CAAgBh4F,EAAhB,EAAoB,KAAKq3F,SAAzB;EACA,WAAO,KAAKI,gBAAL,CAAsB,KAAKL,SAA3B,EAAsC,KAAKC,SAA3C,CAAP;EACD;;EACDvxF,EAAAA,KAAK,CAAChB,GAAD,EAAM;EACT,WAAOpR,IAAI,CAAC6xB,KAAL,CAAWzgB,GAAG,GAAG,KAAKm1E,YAAtB,CAAP;EACD;;EACDl8E,EAAAA,aAAa,GAAG;EACd,WAAO,KAAKm5F,WAAZ;EACD;;EACDc,EAAAA,UAAU,CAACl4F,CAAD,EAAIm4F,OAAJ,EAAa;EACrBA,IAAAA,OAAO,CAAC7hG,CAAR,GAAY,KAAK0P,KAAL,CAAWhG,CAAC,CAAC1J,CAAb,CAAZ;EACA6hG,IAAAA,OAAO,CAAC5hG,CAAR,GAAY,KAAKyP,KAAL,CAAWhG,CAAC,CAACzJ,CAAb,CAAZ;EACD;;EACD6hG,EAAAA,eAAe,GAAG;EAChB,QAAI,KAAKX,QAAL,KAAkB,IAAtB,EAA4B;EAC1B,YAAMY,aAAa,GAAGlB,QAAQ,CAACmB,yBAAT,GAAqC,KAAKne,YAAhE;EACA,WAAKsd,QAAL,GAAgB,IAAI/3F,QAAJ,CAAa,KAAK03F,WAAL,CAAiB9gG,CAAjB,GAAqB+hG,aAAlC,EAAiD,KAAKjB,WAAL,CAAiB9gG,CAAjB,GAAqB+hG,aAAtE,EAAqF,KAAKjB,WAAL,CAAiB7gG,CAAjB,GAAqB8hG,aAA1G,EAAyH,KAAKjB,WAAL,CAAiB7gG,CAAjB,GAAqB8hG,aAA9I,CAAhB;EACD;;EACD,WAAO,KAAKZ,QAAZ;EACD;;EACDc,EAAAA,sBAAsB,CAAC98E,EAAD,EAAKvb,EAAL,EAAS;EAC7B,SAAK+rD,GAAL,CAASp8B,mBAAT,CAA6BpU,EAA7B,EAAiCvb,EAAjC,EAAqC,KAAKs3F,OAAL,CAAa,CAAb,CAArC,EAAsD,KAAKA,OAAL,CAAa,CAAb,CAAtD;;EACA,QAAI,KAAKvrC,GAAL,CAAS37B,eAAT,EAAJ,EAAgC,OAAO,IAAP;;EAChC,SAAK27B,GAAL,CAASp8B,mBAAT,CAA6BpU,EAA7B,EAAiCvb,EAAjC,EAAqC,KAAKs3F,OAAL,CAAa,CAAb,CAArC,EAAsD,KAAKA,OAAL,CAAa,CAAb,CAAtD;;EACA,QAAI,KAAKvrC,GAAL,CAAS37B,eAAT,EAAJ,EAAgC,OAAO,IAAP;;EAChC,SAAK27B,GAAL,CAASp8B,mBAAT,CAA6BpU,EAA7B,EAAiCvb,EAAjC,EAAqC,KAAKs3F,OAAL,CAAa,CAAb,CAArC,EAAsD,KAAKA,OAAL,CAAa,CAAb,CAAtD;;EACA,QAAI,KAAKvrC,GAAL,CAAS37B,eAAT,EAAJ,EAAgC,OAAO,IAAP;;EAChC,SAAK27B,GAAL,CAASp8B,mBAAT,CAA6BpU,EAA7B,EAAiCvb,EAAjC,EAAqC,KAAKs3F,OAAL,CAAa,CAAb,CAArC,EAAsD,KAAKA,OAAL,CAAa,CAAb,CAAtD;;EACA,QAAI,KAAKvrC,GAAL,CAAS37B,eAAT,EAAJ,EAAgC,OAAO,IAAP;EAChC,WAAO,KAAP;EACD;;EACD2nE,EAAAA,yBAAyB,CAACx8E,EAAD,EAAKvb,EAAL,EAAS;EAChC,QAAIs4F,cAAc,GAAG,KAArB;EACA,QAAIC,gBAAgB,GAAG,KAAvB;;EACA,SAAKxsC,GAAL,CAASp8B,mBAAT,CAA6BpU,EAA7B,EAAiCvb,EAAjC,EAAqC,KAAKs3F,OAAL,CAAa,CAAb,CAArC,EAAsD,KAAKA,OAAL,CAAa,CAAb,CAAtD;;EACA,QAAI,KAAKvrC,GAAL,CAAS57B,QAAT,EAAJ,EAAyB,OAAO,IAAP;;EACzB,SAAK47B,GAAL,CAASp8B,mBAAT,CAA6BpU,EAA7B,EAAiCvb,EAAjC,EAAqC,KAAKs3F,OAAL,CAAa,CAAb,CAArC,EAAsD,KAAKA,OAAL,CAAa,CAAb,CAAtD;;EACA,QAAI,KAAKvrC,GAAL,CAAS57B,QAAT,EAAJ,EAAyB,OAAO,IAAP;EACzB,QAAI,KAAK47B,GAAL,CAAS37B,eAAT,EAAJ,EAAgCkoE,cAAc,GAAG,IAAjB;;EAChC,SAAKvsC,GAAL,CAASp8B,mBAAT,CAA6BpU,EAA7B,EAAiCvb,EAAjC,EAAqC,KAAKs3F,OAAL,CAAa,CAAb,CAArC,EAAsD,KAAKA,OAAL,CAAa,CAAb,CAAtD;;EACA,QAAI,KAAKvrC,GAAL,CAAS57B,QAAT,EAAJ,EAAyB,OAAO,IAAP;EACzB,QAAI,KAAK47B,GAAL,CAAS37B,eAAT,EAAJ,EAAgCmoE,gBAAgB,GAAG,IAAnB;;EAChC,SAAKxsC,GAAL,CAASp8B,mBAAT,CAA6BpU,EAA7B,EAAiCvb,EAAjC,EAAqC,KAAKs3F,OAAL,CAAa,CAAb,CAArC,EAAsD,KAAKA,OAAL,CAAa,CAAb,CAAtD;;EACA,QAAI,KAAKvrC,GAAL,CAAS57B,QAAT,EAAJ,EAAyB,OAAO,IAAP;EACzB,QAAImoE,cAAc,IAAIC,gBAAtB,EAAwC,OAAO,IAAP;EACxC,QAAIh9E,EAAE,CAAC3jB,MAAH,CAAU,KAAK82C,GAAf,CAAJ,EAAyB,OAAO,IAAP;EACzB,QAAI1uC,EAAE,CAACpI,MAAH,CAAU,KAAK82C,GAAf,CAAJ,EAAyB,OAAO,IAAP;EACzB,WAAO,KAAP;EACD;;EACD8pD,EAAAA,cAAc,CAACtf,MAAD,EAASuf,QAAT,EAAmB;EAC/B,UAAMl9E,EAAE,GAAG29D,MAAM,CAACn7E,aAAP,CAAqB06F,QAArB,CAAX;EACA,UAAMz4F,EAAE,GAAGk5E,MAAM,CAACn7E,aAAP,CAAqB06F,QAAQ,GAAG,CAAhC,CAAX;;EACA,QAAI,KAAKr4F,UAAL,CAAgBmb,EAAhB,EAAoBvb,EAApB,CAAJ,EAA6B;EAC3Bk5E,MAAAA,MAAM,CAACvhB,eAAP,CAAuB,KAAK55D,aAAL,EAAvB,EAA6C06F,QAA7C;EACA,aAAO,IAAP;EACD;;EACD,WAAO,KAAP;EACD;;EAjH2B;EAmH9BxB,QAAQ,CAACmB,yBAAT,GAAqC,IAArC;;ECtHe,MAAMM,yBAAN,CAAgC;EAC7C5kG,EAAAA,WAAW,GAAG;EACZ4kG,IAAAA,yBAAyB,CAACvhG,YAA1B,CAAuCC,KAAvC,CAA6C,IAA7C,EAAmDC,SAAnD;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKwhG,eAAL,GAAuB,IAAIjmE,WAAJ,EAAvB;EACD;;EACD4kD,EAAAA,MAAM,GAAG;EACP,QAAIjgF,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B,CAA5B,MAEO,IAAID,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAM2yD,EAAE,GAAG5yD,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyB4qD,UAAU,GAAG5qD,SAAS,CAAC,CAAD,CAA/C;EACA4yD,MAAAA,EAAE,CAAC6sB,cAAH,CAAkB70B,UAAlB,EAA8B,KAAK02C,eAAnC;EACA,WAAKrhB,MAAL,CAAY,KAAKqhB,eAAjB;EACD;EACF;;EAf4C;;ECEhC,MAAMC,mBAAN,CAA0B;EACvC9kG,EAAAA,WAAW,GAAG;EACZ8kG,IAAAA,mBAAmB,CAACzhG,YAApB,CAAiCC,KAAjC,CAAuC,IAAvC,EAA6CC,SAA7C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK68C,MAAL,GAAc,IAAd;EACA,UAAMj3C,KAAK,GAAG1F,SAAS,CAAC,CAAD,CAAvB;EACA,SAAK28C,MAAL,GAAcj3C,KAAd;EACD;;EACD87F,EAAAA,IAAI,GAAG;EACL,QAAIxhG,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMwhG,QAAQ,GAAGzhG,SAAS,CAAC,CAAD,CAA1B;EACA,aAAO,KAAKwhG,IAAL,CAAUC,QAAV,EAAoB,IAApB,EAA0B,CAAC,CAA3B,CAAP;EACD,KAHD,MAGO,IAAIzhG,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMwhG,QAAQ,GAAGzhG,SAAS,CAAC,CAAD,CAA1B;EAAA,YAA+B0hG,UAAU,GAAG1hG,SAAS,CAAC,CAAD,CAArD;EAAA,YAA0D2hG,mBAAmB,GAAG3hG,SAAS,CAAC,CAAD,CAAzF;EACA,YAAM4hG,QAAQ,GAAGH,QAAQ,CAACZ,eAAT,EAAjB;EACA,YAAMgB,kBAAkB,GAAG,IAAIC,kBAAJ,CAAuBL,QAAvB,EAAiCC,UAAjC,EAA6CC,mBAA7C,CAA3B;;EACA,WAAKhlD,MAAL,CAAYjC,KAAZ,CAAkBknD,QAAlB,EAA4B,IAAK,MAAM;EACrC,YAAIv+F,WAAJ,GAAkB;EAChB,iBAAO,CAACm2C,WAAD,CAAP;EACD;;EACDC,QAAAA,SAAS,CAACC,IAAD,EAAO;EACd,gBAAM2oC,SAAS,GAAG3oC,IAAlB;EACA2oC,UAAAA,SAAS,CAACpC,MAAV,CAAiB2hB,QAAjB,EAA2BC,kBAA3B;EACD;;EAPoC,OAAX,EAA5B;;EASA,aAAOA,kBAAkB,CAACE,WAAnB,EAAP;EACD;EACF;;EA5BsC;;EA8BzC,MAAMD,kBAAN,SAAiCT,yBAAjC,CAA2D;EACzD5kG,EAAAA,WAAW,GAAG;EACZ;EACAqlG,IAAAA,kBAAkB,CAAChiG,YAAnB,CAAgCC,KAAhC,CAAsC,IAAtC,EAA4CC,SAA5C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKkiG,SAAL,GAAiB,IAAjB;EACA,SAAKC,WAAL,GAAmB,IAAnB;EACA,SAAKC,oBAAL,GAA4B,IAA5B;EACA,SAAKC,YAAL,GAAoB,KAApB;EACA,UAAMV,QAAQ,GAAGzhG,SAAS,CAAC,CAAD,CAA1B;EAAA,UAA+B0hG,UAAU,GAAG1hG,SAAS,CAAC,CAAD,CAArD;EAAA,UAA0D2hG,mBAAmB,GAAG3hG,SAAS,CAAC,CAAD,CAAzF;EACA,SAAKgiG,SAAL,GAAiBP,QAAjB;EACA,SAAKQ,WAAL,GAAmBP,UAAnB;EACA,SAAKQ,oBAAL,GAA4BP,mBAA5B;EACD;;EACDI,EAAAA,WAAW,GAAG;EACZ,WAAO,KAAKI,YAAZ;EACD;;EACDliB,EAAAA,MAAM,GAAG;EACP,QAAIjgF,SAAS,CAACC,MAAV,KAAqB,CAArB,IAA2BtC,MAAM,CAAC4J,SAAP,CAAiBvH,SAAS,CAAC,CAAD,CAA1B,KAAkCA,SAAS,CAAC,CAAD,CAAT,YAAwBwyD,eAAzF,EAAyG;EACvG,YAAMI,EAAE,GAAG5yD,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyB4qD,UAAU,GAAG5qD,SAAS,CAAC,CAAD,CAA/C;EACA,YAAM++E,EAAE,GAAGnsB,EAAE,CAAC4tB,UAAH,EAAX;EACA,UAAI,KAAKyhB,WAAL,KAAqBljB,EAAzB,EACE,IAAIn0B,UAAU,KAAK,KAAKs3C,oBAApB,IAA4Ct3C,UAAU,GAAG,CAAb,KAAmB,KAAKs3C,oBAAxE,EAA8F,OAAO,IAAP;EAEhG,WAAKC,YAAL,IAAqB,KAAKH,SAAL,CAAeb,cAAf,CAA8BpiB,EAA9B,EAAkCn0B,UAAlC,CAArB;EACD,KAPD,MAOO;EACL,aAAO,MAAMq1B,MAAN,CAAalgF,KAAb,CAAmB,IAAnB,EAAyBC,SAAzB,CAAP;EACD;EACF;;EA7BwD;;EA+B3DuhG,mBAAmB,CAACO,kBAApB,GAAyCA,kBAAzC;;EC9De,MAAMM,+BAAN,CAAsC;EACnD3lG,EAAAA,WAAW,GAAG;EACZ2lG,IAAAA,+BAA+B,CAACtiG,YAAhC,CAA6CC,KAA7C,CAAmD,IAAnD,EAAyDC,SAAzD;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK40D,GAAL,GAAW,IAAX;EACA,SAAK2tC,sBAAL,GAA8B,IAA9B;EACA,UAAMvmE,EAAE,GAAG97B,SAAS,CAAC,CAAD,CAApB;EACA,SAAK00D,GAAL,GAAW54B,EAAX;EACA,SAAKumE,sBAAL,GAA8B,IAAIj9F,SAAJ,EAA9B;EACD;;EACDq9E,EAAAA,oBAAoB,CAAC30B,EAAD,EAAKwH,SAAL,EAAgBvH,EAAhB,EAAoBwH,SAApB,EAA+B;EACjD,QAAIzH,EAAE,KAAKC,EAAP,IAAauH,SAAS,KAAKC,SAA/B,EAA0C,OAAO,IAAP;EAC1C,UAAMc,GAAG,GAAGvI,EAAE,CAACtrC,cAAH,GAAoB8yC,SAApB,CAAZ;EACA,UAAMgB,GAAG,GAAGxI,EAAE,CAACtrC,cAAH,GAAoB8yC,SAAS,GAAG,CAAhC,CAAZ;EACA,UAAMiB,GAAG,GAAGxI,EAAE,CAACvrC,cAAH,GAAoB+yC,SAApB,CAAZ;EACA,UAAMiB,GAAG,GAAGzI,EAAE,CAACvrC,cAAH,GAAoB+yC,SAAS,GAAG,CAAhC,CAAZ;;EACA,SAAKb,GAAL,CAASp8B,mBAAT,CAA6B+9B,GAA7B,EAAkCC,GAAlC,EAAuCC,GAAvC,EAA4CC,GAA5C;;EACA,QAAI,KAAK9B,GAAL,CAAS37B,eAAT,EAAJ,EACE,IAAI,KAAK27B,GAAL,CAASz7B,sBAAT,EAAJ,EAAuC;EACrC,WAAK,IAAIjB,QAAQ,GAAG,CAApB,EAAuBA,QAAQ,GAAG,KAAK08B,GAAL,CAASh8B,kBAAT,EAAlC,EAAiEV,QAAQ,EAAzE,EACE,KAAKqqE,sBAAL,CAA4B79F,GAA5B,CAAgC,KAAKkwD,GAAL,CAASv7B,eAAT,CAAyBnB,QAAzB,CAAhC;;EAEF81B,MAAAA,EAAE,CAACsI,gBAAH,CAAoB,KAAK1B,GAAzB,EAA8BY,SAA9B,EAAyC,CAAzC;EACAvH,MAAAA,EAAE,CAACqI,gBAAH,CAAoB,KAAK1B,GAAzB,EAA8Ba,SAA9B,EAAyC,CAAzC;EACD;EAEJ;;EACDttD,EAAAA,MAAM,GAAG;EACP,WAAO,KAAP;EACD;;EACDq6F,EAAAA,wBAAwB,GAAG;EACzB,WAAO,KAAKD,sBAAZ;EACD;;EACD,MAAIh/F,WAAJ,GAAkB;EAChB,WAAO,CAACgxD,oBAAD,CAAP;EACD;;EApCkD;;ECStC,MAAMkuC,kBAAN,CAAyB;EACtC9lG,EAAAA,WAAW,GAAG;EACZ8lG,IAAAA,kBAAkB,CAACziG,YAAnB,CAAgCC,KAAhC,CAAsC,IAAtC,EAA4CC,SAA5C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK0iG,GAAL,GAAW,IAAX;EACA,SAAK9tC,GAAL,GAAW,IAAX;EACA,SAAKkuB,YAAL,GAAoB,IAApB;EACA,SAAKD,MAAL,GAAc,IAAd;EACA,SAAK8f,aAAL,GAAqB,IAArB;EACA,SAAKhhB,gBAAL,GAAwB,IAAxB;EACA,UAAMr0D,EAAE,GAAGptB,SAAS,CAAC,CAAD,CAApB;EACA,SAAKwiG,GAAL,GAAWp1E,EAAX;EACA,SAAKsnC,GAAL,GAAW,IAAI76B,qBAAJ,EAAX;;EACA,SAAK66B,GAAL,CAAS17B,iBAAT,CAA2B5L,EAA3B;;EACA,SAAKw1D,YAAL,GAAoBx1D,EAAE,CAACO,QAAH,EAApB;EACD;;EACD+0E,EAAAA,gBAAgB,CAACC,mBAAD,EAAsB;EACpC,UAAMC,gBAAgB,GAAGjlB,kBAAkB,CAACiB,kBAAnB,CAAsC+jB,mBAAtC,CAAzB;EACA,UAAME,EAAE,GAAG,IAAI1D,eAAJ,CAAoByD,gBAApB,CAAX;;EACA,QAAI;EACFC,MAAAA,EAAE,CAACpD,UAAH;EACD,KAFD,CAEE,OAAOpxF,EAAP,EAAW;EACX,UAAIA,EAAE,YAAY9R,SAAlB,EACE8R,EAAE,CAACy0F,eAAH,GADF,KAEK,MAAMz0F,EAAN;EACN,KAND,SAMU;EACX;;EACDuwE,EAAAA,kBAAkB,GAAG;EACnB,WAAOjB,kBAAkB,CAACiB,kBAAnB,CAAsC,KAAK6C,gBAA3C,CAAP;EACD;;EACDshB,EAAAA,SAAS,CAAClkB,UAAD,EAAa/iD,EAAb,EAAiB;EACxB,UAAMknE,aAAa,GAAG,KAAKC,yBAAL,CAA+BpkB,UAA/B,EAA2C/iD,EAA3C,CAAtB;EACA,SAAKonE,wBAAL,CAA8BF,aAA9B;EACA,SAAKG,kBAAL,CAAwBtkB,UAAxB;EACD;;EACDokB,EAAAA,yBAAyB,CAACpkB,UAAD,EAAa/iD,EAAb,EAAiB;EACxC,UAAMsnE,cAAc,GAAG,IAAIhB,+BAAJ,CAAoCtmE,EAApC,CAAvB;;EACA,SAAK6mD,MAAL,CAAYtB,qBAAZ,CAAkC+hB,cAAlC;;EACA,SAAKzgB,MAAL,CAAY1B,YAAZ,CAAyBpC,UAAzB;;EACA,WAAOukB,cAAc,CAACd,wBAAf,EAAP;EACD;;EACDa,EAAAA,kBAAkB,GAAG;EACnB,QAAIx8F,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAeuE,UAAf,CAAhB,EAA4C;EAC1C,YAAM0tD,KAAK,GAAGjyD,SAAS,CAAC,CAAD,CAAvB;;EACA,WAAK,IAAI0uF,EAAE,GAAGz8B,KAAK,CAACttD,QAAN,EAAd,EAAgC+pF,EAAE,CAACnoF,OAAH,EAAhC,GAAgD;EAC9C,cAAM88F,KAAK,GAAG3U,EAAE,CAACpoF,IAAH,EAAd;EACA,aAAK68F,kBAAL,CAAwBE,KAAxB;EACD;EACF,KAND,MAMO,IAAIrjG,SAAS,CAAC,CAAD,CAAT,YAAwB29E,kBAA5B,EAAgD;EACrD,YAAMl7E,CAAC,GAAGzC,SAAS,CAAC,CAAD,CAAnB;EACA,YAAMw/F,IAAI,GAAG/8F,CAAC,CAAC+f,cAAF,EAAb;;EACA,WAAK,IAAIplB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGoiG,IAAI,CAACv/F,MAAzB,EAAiC7C,CAAC,EAAlC,EAAsC;EACpC,cAAMqkG,QAAQ,GAAG,IAAI7B,QAAJ,CAAaJ,IAAI,CAACpiG,CAAD,CAAjB,EAAsB,KAAKwlF,YAA3B,EAAyC,KAAKluB,GAA9C,CAAjB;;EACA,cAAMqtC,WAAW,GAAG,KAAKU,aAAL,CAAmBjB,IAAnB,CAAwBC,QAAxB,EAAkCh/F,CAAlC,EAAqCrF,CAArC,CAApB;;EACA,YAAI2kG,WAAJ,EACEt/F,CAAC,CAAC69D,eAAF,CAAkBk/B,IAAI,CAACpiG,CAAD,CAAtB,EAA2BA,CAA3B;EAEH;EACF;EACF;;EACD6jF,EAAAA,YAAY,CAAC0hB,mBAAD,EAAsB;EAChC,SAAKlhB,gBAAL,GAAwBkhB,mBAAxB;EACA,SAAKhgB,MAAL,GAAc,IAAIrB,YAAJ,EAAd;EACA,SAAKmhB,aAAL,GAAqB,IAAIlB,mBAAJ,CAAwB,KAAK5e,MAAL,CAAYf,QAAZ,EAAxB,CAArB;EACA,SAAKmhB,SAAL,CAAeJ,mBAAf,EAAoC,KAAKjuC,GAAzC;EACD;;EACDwuC,EAAAA,wBAAwB,CAACI,OAAD,EAAU;EAChC,SAAK,IAAI/2E,EAAE,GAAG+2E,OAAO,CAAC3+F,QAAR,EAAd,EAAkC4nB,EAAE,CAAChmB,OAAH,EAAlC,GAAkD;EAChD,YAAMg9F,MAAM,GAAGh3E,EAAE,CAACjmB,IAAH,EAAf;EACA,YAAMm7F,QAAQ,GAAG,IAAI7B,QAAJ,CAAa2D,MAAb,EAAqB,KAAK3gB,YAA1B,EAAwC,KAAKluB,GAA7C,CAAjB;;EACA,WAAK+tC,aAAL,CAAmBjB,IAAnB,CAAwBC,QAAxB;EACD;EACF;;EACD,MAAIp+F,WAAJ,GAAkB;EAChB,WAAO,CAAC29E,KAAD,CAAP;EACD;;EA5EqC;;ECFzB,MAAMwiB,QAAN,CAAe;EAC5B/mG,EAAAA,WAAW,GAAG;EACZ+mG,IAAAA,QAAQ,CAAC1jG,YAAT,CAAsBC,KAAtB,CAA4B,IAA5B,EAAkCC,SAAlC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK2jG,QAAL,GAAgB,IAAhB;EACA,SAAKnsD,SAAL,GAAiB,IAAjB;EACA,SAAKo5C,UAAL,GAAkB,IAAIlL,gBAAJ,EAAlB;EACA,SAAKke,eAAL,GAAuB,IAAvB;EACA,SAAKC,cAAL,GAAsB,IAAtB;;EACA,QAAI3jG,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMsb,CAAC,GAAGvb,SAAS,CAAC,CAAD,CAAnB;EACA,WAAKyjG,QAAL,GAAgBloF,CAAhB;EACD,KAHD,MAGO,IAAIvb,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMsb,CAAC,GAAGvb,SAAS,CAAC,CAAD,CAAnB;EAAA,YAAwBoxF,SAAS,GAAGpxF,SAAS,CAAC,CAAD,CAA7C;EACA,WAAKyjG,QAAL,GAAgBloF,CAAhB;EACA,WAAKm1E,UAAL,GAAkBU,SAAlB;EACD;EACF;;EACD,SAAOwS,QAAP,GAAkB;EAChB,QAAI5jG,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMsb,CAAC,GAAGvb,SAAS,CAAC,CAAD,CAAnB;EAAA,YAAwBmD,QAAQ,GAAGnD,SAAS,CAAC,CAAD,CAA5C;EACA,YAAM6jG,IAAI,GAAG,IAAIL,QAAJ,CAAajoF,CAAb,CAAb;EACA,YAAMuoF,OAAO,GAAGD,IAAI,CAACx3C,iBAAL,CAAuBlpD,QAAvB,CAAhB;EACA,aAAO2gG,OAAP;EACD,KALD,MAKO,IAAI9jG,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,UAAItC,MAAM,CAAC4J,SAAP,CAAiBvH,SAAS,CAAC,CAAD,CAA1B,KAAmCA,SAAS,CAAC,CAAD,CAAT,YAAwBya,QAAxB,IAAoC,OAAOza,SAAS,CAAC,CAAD,CAAhB,KAAwB,QAAnG,EAA8G;EAC5G,cAAMub,CAAC,GAAGvb,SAAS,CAAC,CAAD,CAAnB;EAAA,cAAwBmD,QAAQ,GAAGnD,SAAS,CAAC,CAAD,CAA5C;EAAA,cAAiDomF,gBAAgB,GAAGpmF,SAAS,CAAC,CAAD,CAA7E;EACA,cAAM+jG,KAAK,GAAG,IAAIP,QAAJ,CAAajoF,CAAb,CAAd;EACAwoF,QAAAA,KAAK,CAAC1d,mBAAN,CAA0BD,gBAA1B;EACA,cAAM0d,OAAO,GAAGC,KAAK,CAAC13C,iBAAN,CAAwBlpD,QAAxB,CAAhB;EACA,eAAO2gG,OAAP;EACD,OAND,MAMO,IAAI9jG,SAAS,CAAC,CAAD,CAAT,YAAwBwlF,gBAAxB,IAA6CxlF,SAAS,CAAC,CAAD,CAAT,YAAwBya,QAAxB,IAAoC,OAAOza,SAAS,CAAC,CAAD,CAAhB,KAAwB,QAA7G,EAAwH;EAC7H,cAAMub,CAAC,GAAGvb,SAAS,CAAC,CAAD,CAAnB;EAAA,cAAwBmD,QAAQ,GAAGnD,SAAS,CAAC,CAAD,CAA5C;EAAA,cAAiDgkG,MAAM,GAAGhkG,SAAS,CAAC,CAAD,CAAnE;EACA,cAAM+jG,KAAK,GAAG,IAAIP,QAAJ,CAAajoF,CAAb,EAAgByoF,MAAhB,CAAd;EACA,cAAMF,OAAO,GAAGC,KAAK,CAAC13C,iBAAN,CAAwBlpD,QAAxB,CAAhB;EACA,eAAO2gG,OAAP;EACD;EACF,KAbM,MAaA,IAAI9jG,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMsb,CAAC,GAAGvb,SAAS,CAAC,CAAD,CAAnB;EAAA,YAAwBmD,QAAQ,GAAGnD,SAAS,CAAC,CAAD,CAA5C;EAAA,YAAiDomF,gBAAgB,GAAGpmF,SAAS,CAAC,CAAD,CAA7E;EAAA,YAAkFsmF,WAAW,GAAGtmF,SAAS,CAAC,CAAD,CAAzG;EACA,YAAM+jG,KAAK,GAAG,IAAIP,QAAJ,CAAajoF,CAAb,CAAd;EACAwoF,MAAAA,KAAK,CAAC1d,mBAAN,CAA0BD,gBAA1B;EACA2d,MAAAA,KAAK,CAACxd,cAAN,CAAqBD,WAArB;EACA,YAAMwd,OAAO,GAAGC,KAAK,CAAC13C,iBAAN,CAAwBlpD,QAAxB,CAAhB;EACA,aAAO2gG,OAAP;EACD;EACF;;EACD,SAAOG,oBAAP,CAA4B1oF,CAA5B,EAA+BpY,QAA/B,EAAyC+gG,kBAAzC,EAA6D;EAC3D,UAAMx7F,GAAG,GAAG6S,CAAC,CAACY,mBAAF,EAAZ;EACA,UAAMgoF,MAAM,GAAG1rF,QAAQ,CAACnP,GAAT,CAAajN,IAAI,CAACC,GAAL,CAASoM,GAAG,CAACoB,OAAJ,EAAT,CAAb,EAAsCzN,IAAI,CAACC,GAAL,CAASoM,GAAG,CAACqB,OAAJ,EAAT,CAAtC,EAA+D1N,IAAI,CAACC,GAAL,CAASoM,GAAG,CAACsB,OAAJ,EAAT,CAA/D,EAAwF3N,IAAI,CAACC,GAAL,CAASoM,GAAG,CAACuB,OAAJ,EAAT,CAAxF,CAAf;EACA,UAAMm6F,gBAAgB,GAAGjhG,QAAQ,GAAG,GAAX,GAAiBA,QAAjB,GAA4B,GAArD;EACA,UAAMkhG,SAAS,GAAGF,MAAM,GAAG,IAAIC,gBAA/B;EACA,UAAME,qBAAqB,GAAGjoG,IAAI,CAAC6S,KAAL,CAAW7S,IAAI,CAAC2S,GAAL,CAASq1F,SAAT,IAAsBhoG,IAAI,CAAC2S,GAAL,CAAS,EAAT,CAAtB,GAAqC,GAAhD,CAA9B;EACA,UAAMu1F,YAAY,GAAGL,kBAAkB,GAAGI,qBAA1C;EACA,UAAMrhB,WAAW,GAAG5mF,IAAI,CAACwC,GAAL,CAAS,IAAT,EAAe0lG,YAAf,CAApB;EACA,WAAOthB,WAAP;EACD;;EACDuhB,EAAAA,oBAAoB,CAACC,OAAD,EAAU;EAC5B,UAAMzhB,KAAK,GAAG,IAAIN,WAAJ,CAAgB,IAAI6f,kBAAJ,CAAuB,IAAI31E,cAAJ,CAAmB,GAAnB,CAAvB,CAAhB,EAAiE63E,OAAO,CAAC92E,QAAR,EAAjE,CAAd;EACA,UAAM+2E,UAAU,GAAG,IAAItH,aAAJ,CAAkB,KAAK1M,UAAvB,CAAnB;EACAgU,IAAAA,UAAU,CAAChH,wBAAX,CAAoC+G,OAApC;EACAC,IAAAA,UAAU,CAACxF,QAAX,CAAoBlc,KAApB;EACA,SAAK0gB,eAAL,GAAuBgB,UAAU,CAACrmG,MAAX,CAAkB,KAAKolG,QAAvB,EAAiC,KAAKnsD,SAAtC,CAAvB;EACD;;EACDqtD,EAAAA,sBAAsB,GAAG;EACvB,QAAI3kG,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,WAAK,IAAI2kG,UAAU,GAAGpB,QAAQ,CAACqB,oBAA/B,EAAqDD,UAAU,IAAI,CAAnE,EAAsEA,UAAU,EAAhF,EAAoF;EAClF,YAAI;EACF,eAAKD,sBAAL,CAA4BC,UAA5B;EACD,SAFD,CAEE,OAAOv2F,EAAP,EAAW;EACX,cAAIA,EAAE,YAAYm1D,iBAAlB,EACE,KAAKmgC,cAAL,GAAsBt1F,EAAtB,CADF,KAEK,MAAMA,EAAN;EACN,SAND,SAMU;;EACV,YAAI,KAAKq1F,eAAL,KAAyB,IAA7B,EAAmC,OAAO,IAAP;EACpC;;EACD,YAAM,KAAKC,cAAX;EACD,KAZD,MAYO,IAAI3jG,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAM6kG,eAAe,GAAG9kG,SAAS,CAAC,CAAD,CAAjC;EACA,YAAM+kG,oBAAoB,GAAGvB,QAAQ,CAACS,oBAAT,CAA8B,KAAKR,QAAnC,EAA6C,KAAKnsD,SAAlD,EAA6DwtD,eAA7D,CAA7B;EACA,YAAML,OAAO,GAAG,IAAI73E,cAAJ,CAAmBm4E,oBAAnB,CAAhB;EACA,WAAKP,oBAAL,CAA0BC,OAA1B;EACD;EACF;;EACDO,EAAAA,eAAe,GAAG;EAChB,SAAKC,uBAAL;EACA,QAAI,KAAKvB,eAAL,KAAyB,IAA7B,EAAmC,OAAO,IAAP;;EACnC,UAAMwB,KAAK,GAAG,KAAKzB,QAAL,CAAc5oF,UAAd,GAA2BgC,iBAA3B,EAAd;;EACA,QAAIqoF,KAAK,CAACp3E,OAAN,OAAoBlB,cAAc,CAACM,KAAvC,EAA8C,KAAKs3E,oBAAL,CAA0BU,KAA1B,EAA9C,KAAqF,KAAKP,sBAAL;EACtF;;EACDte,EAAAA,mBAAmB,CAACD,gBAAD,EAAmB;EACpC,SAAKsK,UAAL,CAAgBrK,mBAAhB,CAAoCD,gBAApC;EACD;;EACD6e,EAAAA,uBAAuB,GAAG;EACxB,QAAI;EACF,YAAMP,UAAU,GAAG,IAAItH,aAAJ,CAAkB,KAAK1M,UAAvB,CAAnB;EACA,WAAKgT,eAAL,GAAuBgB,UAAU,CAACrmG,MAAX,CAAkB,KAAKolG,QAAvB,EAAiC,KAAKnsD,SAAtC,CAAvB;EACD,KAHD,CAGE,OAAOjpC,EAAP,EAAW;EACX,UAAIA,EAAE,YAAYzO,gBAAlB,EACE,KAAK+jG,cAAL,GAAsBt1F,EAAtB,CADF,KAEK,MAAMA,EAAN;EACN,KAPD,SAOU;EACX;;EACDg+C,EAAAA,iBAAiB,CAAClpD,QAAD,EAAW;EAC1B,SAAKm0C,SAAL,GAAiBn0C,QAAjB;EACA,SAAK6hG,eAAL;EACA,WAAO,KAAKtB,eAAZ;EACD;;EACDnd,EAAAA,cAAc,CAACD,WAAD,EAAc;EAC1B,SAAKoK,UAAL,CAAgBnK,cAAhB,CAA+BD,WAA/B;EACD;;EA9G2B;EAgH9Bkd,QAAQ,CAAC5d,SAAT,GAAqBJ,gBAAgB,CAACI,SAAtC;EACA4d,QAAQ,CAAC2B,QAAT,GAAoB3f,gBAAgB,CAACkC,QAArC;EACA8b,QAAQ,CAAC9b,QAAT,GAAoBlC,gBAAgB,CAACkC,QAArC;EACA8b,QAAQ,CAAC7b,UAAT,GAAsBnC,gBAAgB,CAACmC,UAAvC;EACA6b,QAAQ,CAACqB,oBAAT,GAAgC,EAAhC;;;;;;;;EC5He,MAAMO,gBAAN,CAAuB;EACpC3oG,EAAAA,WAAW,GAAG;EACZ2oG,IAAAA,gBAAgB,CAACtlG,YAAjB,CAA8BC,KAA9B,CAAoC,IAApC,EAA0CC,SAA1C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKulG,UAAL,GAAkB,IAAlB;EACA,SAAKC,SAAL,GAAiB,IAAjB;EACA,SAAKjuD,GAAL,GAAW,IAAX;;EACA,QAAIr3C,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMiyD,SAAS,GAAGlyD,SAAS,CAAC,CAAD,CAA3B;EAAA,YAAgCqjB,EAAE,GAAGrjB,SAAS,CAAC,CAAD,CAA9C;EACAolG,MAAAA,gBAAgB,CAACtlG,YAAjB,CAA8BI,IAA9B,CAAmC,IAAnC,EAAyCgyD,SAAzC,EAAoDkzC,gBAAgB,CAACG,WAArE,EAAkFliF,EAAlF;EACD,KAHD,MAGO,IAAIrjB,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMiyD,SAAS,GAAGlyD,SAAS,CAAC,CAAD,CAA3B;EAAA,YAAgCohG,QAAQ,GAAGphG,SAAS,CAAC,CAAD,CAApD;EAAA,YAAyDqjB,EAAE,GAAGrjB,SAAS,CAAC,CAAD,CAAvE;EACA,WAAKqlG,UAAL,GAAkBnzC,SAAlB;EACA,WAAKozC,SAAL,GAAiBlE,QAAjB;EACA,WAAK/pD,GAAL,GAAWh0B,EAAX;EACD;EACF;;EACD02C,EAAAA,eAAe,GAAG;EAChB,WAAO,KAAKurC,SAAZ;EACD;;EACD5+F,EAAAA,aAAa,GAAG;EACd,WAAO,KAAK2wC,GAAZ;EACD;;EACDmuD,EAAAA,YAAY,GAAG;EACb,WAAO,KAAKF,SAAL,KAAmBF,gBAAgB,CAACG,WAA3C;EACD;;EACDzoG,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAKuoG,UAAL,CAAgBpiF,eAAhB,KAAoC,GAApC,GAA0C,KAAKqiF,SAA/C,GAA2D,GAA3D,GAAiE,GAAjE,GAAuEtuE,SAAS,CAACyuE,OAAV,CAAkB,KAAKpuD,GAAvB,CAA9E;EACD;;EACDquD,EAAAA,oBAAoB,GAAG;EACrB,WAAO,KAAKL,UAAZ;EACD;;EAhCmC;EAkCtCD,gBAAgB,CAACG,WAAjB,GAA+B,CAAC,CAAhC;;EC7Be,MAAMI,8BAAN,CAAqC;EAClDlpG,EAAAA,WAAW,GAAG;EACZkpG,IAAAA,8BAA8B,CAAC7lG,YAA/B,CAA4CC,KAA5C,CAAkD,IAAlD,EAAwDC,SAAxD;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK8lG,UAAL,GAAkB,IAAlB;EACA,UAAMC,SAAS,GAAG7lG,SAAS,CAAC,CAAD,CAA3B;EACA,SAAK4lG,UAAL,GAAkBC,SAAlB;EACD;;EACD,SAAOttC,YAAP,CAAoB/9C,IAApB,EAA0B;EACxB,UAAMqrF,SAAS,GAAG,IAAIzgG,SAAJ,EAAlB;EACAoV,IAAAA,IAAI,CAACza,KAAL,CAAW,IAAI4lG,8BAAJ,CAAmCE,SAAnC,CAAX;EACA,WAAOA,SAAP;EACD;;EACD99F,EAAAA,MAAM,CAACyS,IAAD,EAAO;EACX,QAAIA,IAAI,CAAC9V,OAAL,EAAJ,EAAoB,OAAO,IAAP;EACpB,QAAI8V,IAAI,YAAYiJ,KAAhB,IAAyBjJ,IAAI,YAAY4H,UAAzC,IAAuD5H,IAAI,YAAYkK,OAA3E,EAAoF,KAAKkhF,UAAL,CAAgBphG,GAAhB,CAAoB,IAAI4gG,gBAAJ,CAAqB5qF,IAArB,EAA2B,CAA3B,EAA8BA,IAAI,CAAC9T,aAAL,EAA9B,CAApB;EACrF;;EACD,MAAIrD,WAAJ,GAAkB;EAChB,WAAO,CAAC8e,cAAD,CAAP;EACD;;EApBiD;;ECWrC,MAAM2jF,UAAN,CAAiB;EAC9BrpG,EAAAA,WAAW,GAAG;EACZqpG,IAAAA,UAAU,CAAChmG,YAAX,CAAwBC,KAAxB,CAA8B,IAA9B,EAAoCC,SAApC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKq5C,KAAL,GAAa,IAAb;EACA,SAAK4sD,kBAAL,GAA0B,GAA1B;EACA,SAAKh+B,UAAL,GAAkB,IAAIhhB,YAAJ,EAAlB;EACA,SAAKi/C,oBAAL,GAA4B,IAA5B;EACA,SAAKjgD,YAAL,GAAoBxoD,MAAM,CAACO,SAA3B;;EACA,QAAIkC,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMwtC,EAAE,GAAGztC,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyB0tC,EAAE,GAAG1tC,SAAS,CAAC,CAAD,CAAvC;EACA8lG,MAAAA,UAAU,CAAChmG,YAAX,CAAwBI,IAAxB,CAA6B,IAA7B,EAAmCutC,EAAnC,EAAuCC,EAAvC,EAA2C,GAA3C;EACD,KAHD,MAGO,IAAI1tC,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMwtC,EAAE,GAAGztC,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyB0tC,EAAE,GAAG1tC,SAAS,CAAC,CAAD,CAAvC;EAAA,YAA4CimG,iBAAiB,GAAGjmG,SAAS,CAAC,CAAD,CAAzE;EACA,WAAKm5C,KAAL,GAAa,IAAIjyC,KAAJ,CAAU,CAAV,EAAaC,IAAb,CAAkB,IAAlB,CAAb;EACA,WAAKgyC,KAAL,CAAW,CAAX,IAAgB1L,EAAhB;EACA,WAAK0L,KAAL,CAAW,CAAX,IAAgBzL,EAAhB;EACA,WAAKq4D,kBAAL,GAA0BE,iBAA1B;EACD;EACF;;EACD,SAAO9iG,QAAP,CAAgBsqC,EAAhB,EAAoBC,EAApB,EAAwB;EACtB,UAAMw4D,MAAM,GAAG,IAAIJ,UAAJ,CAAer4D,EAAf,EAAmBC,EAAnB,CAAf;EACA,WAAOw4D,MAAM,CAAC/iG,QAAP,EAAP;EACD;;EACD,SAAOw1E,gBAAP,CAAwBlrC,EAAxB,EAA4BC,EAA5B,EAAgCvqC,QAAhC,EAA0C;EACxC,UAAMgjG,OAAO,GAAG14D,EAAE,CAACtxB,mBAAH,GAAyBhZ,QAAzB,CAAkCuqC,EAAE,CAACvxB,mBAAH,EAAlC,CAAhB;EACA,QAAIgqF,OAAO,GAAGhjG,QAAd,EAAwB,OAAO,KAAP;EACxB,UAAM+iG,MAAM,GAAG,IAAIJ,UAAJ,CAAer4D,EAAf,EAAmBC,EAAnB,EAAuBvqC,QAAvB,CAAf;EACA,WAAO+iG,MAAM,CAAC/iG,QAAP,MAAqBA,QAA5B;EACD;;EACD,SAAOijG,aAAP,CAAqB34D,EAArB,EAAyBC,EAAzB,EAA6B;EAC3B,UAAMw4D,MAAM,GAAG,IAAIJ,UAAJ,CAAer4D,EAAf,EAAmBC,EAAnB,CAAf;EACA,WAAOw4D,MAAM,CAACE,aAAP,EAAP;EACD;;EACDC,EAAAA,0BAA0B,GAAG;EAC3B,QAAIrmG,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMqmG,SAAS,GAAG,IAAIp/F,KAAJ,CAAU,CAAV,EAAaC,IAAb,CAAkB,IAAlB,CAAlB;EACA,WAAKk/F,0BAAL,CAAgC,CAAhC,EAAmCC,SAAnC;EACA,UAAI,KAAKvgD,YAAL,IAAqB,KAAKggD,kBAA9B,EAAkD,OAAO,IAAP;EAClD,WAAKM,0BAAL,CAAgC,CAAhC,EAAmCC,SAAnC;EACD,KALD,MAKO,IAAItmG,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMsmG,aAAa,GAAGvmG,SAAS,CAAC,CAAD,CAA/B;EAAA,YAAoCsmG,SAAS,GAAGtmG,SAAS,CAAC,CAAD,CAAzD;EACA,YAAMwmG,QAAQ,GAAG,KAAKrtD,KAAL,CAAWotD,aAAX,CAAjB;EACA,UAAIC,QAAQ,CAAC9wF,YAAT,KAA0B,CAA9B,EAAiC,OAAO,IAAP;EACjC,YAAM+wF,cAAc,GAAG,IAAIF,aAA3B;EACA,YAAMG,KAAK,GAAGn0D,gBAAgB,CAACC,WAAjB,CAA6Bg0D,QAA7B,CAAd;;EACA,UAAIE,KAAK,CAAC9hG,IAAN,KAAe,CAAnB,EAAsB;EACpB,cAAM+hG,UAAU,GAAGhB,8BAA8B,CAACptC,YAA/B,CAA4C,KAAKpf,KAAL,CAAWstD,cAAX,CAA5C,CAAnB;EACA,aAAKJ,0BAAL,CAAgCM,UAAhC,EAA4CD,KAA5C,EAAmDJ,SAAnD;;EACA,YAAI,KAAKvgD,YAAL,IAAqB,KAAKggD,kBAA9B,EAAkD;EAChD,eAAKC,oBAAL,CAA0BS,cAA1B,IAA4CH,SAAS,CAAC,CAAD,CAArD;EACA,eAAKN,oBAAL,CAA0BO,aAA1B,IAA2CD,SAAS,CAAC,CAAD,CAApD;EACA,iBAAO,IAAP;EACD;EACF;EACF,KAfM,MAeA,IAAItmG,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,UAAID,SAAS,CAAC,CAAD,CAAT,YAAwBkH,KAAxB,IAAkCP,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAegF,IAAf,CAAZ,IAAoC2B,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAegF,IAAf,CAAtF,EAA6G;EAC3G,cAAM4hG,IAAI,GAAG5mG,SAAS,CAAC,CAAD,CAAtB;EAAA,cAA2B0mG,KAAK,GAAG1mG,SAAS,CAAC,CAAD,CAA5C;EAAA,cAAiDsmG,SAAS,GAAGtmG,SAAS,CAAC,CAAD,CAAtE;;EACA,aAAK,IAAI5C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGwpG,IAAI,CAAChiG,IAAL,EAApB,EAAiCxH,CAAC,EAAlC,EAAsC;EACpC,gBAAMghD,GAAG,GAAGwoD,IAAI,CAAC3hG,GAAL,CAAS7H,CAAT,CAAZ;;EACA,eAAK,IAAI8f,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGwpF,KAAK,CAAC9hG,IAAN,EAApB,EAAkCsY,CAAC,EAAnC,EAAuC;EACrC,iBAAKmpF,0BAAL,CAAgCjoD,GAAhC,EAAqCsoD,KAAK,CAACzhG,GAAN,CAAUiY,CAAV,CAArC,EAAmDopF,SAAnD;EACA,gBAAI,KAAKvgD,YAAL,IAAqB,KAAKggD,kBAA9B,EAAkD,OAAO,IAAP;EACnD;EACF;EACF,OATD,MASO,IAAI/lG,SAAS,CAAC,CAAD,CAAT,YAAwBkH,KAAxB,IAAkClH,SAAS,CAAC,CAAD,CAAT,YAAwBolG,gBAAxB,IAA4CplG,SAAS,CAAC,CAAD,CAAT,YAAwB0kB,OAA1G,EAAoH;EACzH,cAAMmiF,KAAK,GAAG7mG,SAAS,CAAC,CAAD,CAAvB;EAAA,cAA4BqmB,IAAI,GAAGrmB,SAAS,CAAC,CAAD,CAA5C;EAAA,cAAiDsmG,SAAS,GAAGtmG,SAAS,CAAC,CAAD,CAAtE;EACA,cAAMqjB,EAAE,GAAGwjF,KAAK,CAACngG,aAAN,EAAX;;EACA,YAAIq4B,QAAQ,CAACG,QAAT,KAAsB,KAAK6oC,UAAL,CAAgBnuB,MAAhB,CAAuBv2B,EAAvB,EAA2BgD,IAA3B,CAA1B,EAA4D;EAC1D,eAAK0/B,YAAL,GAAoB,GAApB;EACAugD,UAAAA,SAAS,CAAC,CAAD,CAAT,GAAeO,KAAf;EACAP,UAAAA,SAAS,CAAC,CAAD,CAAT,GAAe,IAAIlB,gBAAJ,CAAqB/+E,IAArB,EAA2BhD,EAA3B,CAAf;EAEA,iBAAO,IAAP;EACD;EACF;EACF;EACF;;EACDyjF,EAAAA,6BAA6B,CAACv1D,KAAD,EAAQjvB,MAAR,EAAgBykF,OAAhB,EAAyB;EACpD,SAAK,IAAI3pG,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGm0C,KAAK,CAAC3sC,IAAN,EAApB,EAAkCxH,CAAC,EAAnC,EAAuC;EACrC,YAAM6c,IAAI,GAAGs3B,KAAK,CAACtsC,GAAN,CAAU7H,CAAV,CAAb;;EACA,WAAK,IAAI8f,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGoF,MAAM,CAAC1d,IAAP,EAApB,EAAmCsY,CAAC,EAApC,EAAwC;EACtC,cAAMmG,EAAE,GAAGf,MAAM,CAACrd,GAAP,CAAWiY,CAAX,CAAX;EACA,aAAK8pF,kBAAL,CAAwB/sF,IAAxB,EAA8BoJ,EAA9B,EAAkC0jF,OAAlC;EACA,YAAI,KAAKhhD,YAAL,IAAqB,KAAKggD,kBAA9B,EAAkD,OAAO,IAAP;EACnD;EACF;EACF;;EACDkB,EAAAA,oBAAoB,GAAG;EACrB,UAAMF,OAAO,GAAG,IAAI7/F,KAAJ,CAAU,CAAV,EAAaC,IAAb,CAAkB,IAAlB,CAAhB;EACA,UAAM+/F,MAAM,GAAG11D,wBAAwB,CAACF,QAAzB,CAAkC,KAAK6H,KAAL,CAAW,CAAX,CAAlC,CAAf;EACA,UAAMguD,MAAM,GAAG31D,wBAAwB,CAACF,QAAzB,CAAkC,KAAK6H,KAAL,CAAW,CAAX,CAAlC,CAAf;EACA,UAAMqmD,IAAI,GAAGptD,cAAc,CAACE,SAAf,CAAyB,KAAK6G,KAAL,CAAW,CAAX,CAAzB,CAAb;EACA,UAAM5vB,IAAI,GAAG6oB,cAAc,CAACE,SAAf,CAAyB,KAAK6G,KAAL,CAAW,CAAX,CAAzB,CAAb;EACA,SAAKiuD,uBAAL,CAA6BF,MAA7B,EAAqCC,MAArC,EAA6CJ,OAA7C;EACA,SAAKM,iBAAL,CAAuBN,OAAvB,EAAgC,KAAhC;EACA,QAAI,KAAKhhD,YAAL,IAAqB,KAAKggD,kBAA9B,EAAkD,OAAO,IAAP;EAClDgB,IAAAA,OAAO,CAAC,CAAD,CAAP,GAAa,IAAb;EACAA,IAAAA,OAAO,CAAC,CAAD,CAAP,GAAa,IAAb;EACA,SAAKD,6BAAL,CAAmCI,MAAnC,EAA2C39E,IAA3C,EAAiDw9E,OAAjD;EACA,SAAKM,iBAAL,CAAuBN,OAAvB,EAAgC,KAAhC;EACA,QAAI,KAAKhhD,YAAL,IAAqB,KAAKggD,kBAA9B,EAAkD,OAAO,IAAP;EAClDgB,IAAAA,OAAO,CAAC,CAAD,CAAP,GAAa,IAAb;EACAA,IAAAA,OAAO,CAAC,CAAD,CAAP,GAAa,IAAb;EACA,SAAKD,6BAAL,CAAmCK,MAAnC,EAA2C3H,IAA3C,EAAiDuH,OAAjD;EACA,SAAKM,iBAAL,CAAuBN,OAAvB,EAAgC,IAAhC;EACA,QAAI,KAAKhhD,YAAL,IAAqB,KAAKggD,kBAA9B,EAAkD,OAAO,IAAP;EAClDgB,IAAAA,OAAO,CAAC,CAAD,CAAP,GAAa,IAAb;EACAA,IAAAA,OAAO,CAAC,CAAD,CAAP,GAAa,IAAb;EACA,SAAKO,wBAAL,CAA8B9H,IAA9B,EAAoCj2E,IAApC,EAA0Cw9E,OAA1C;EACA,SAAKM,iBAAL,CAAuBN,OAAvB,EAAgC,KAAhC;EACD;;EACDQ,EAAAA,gBAAgB,GAAG;EACjB,SAAKP,kBAAL;EACA,WAAO,KAAKhB,oBAAZ;EACD;;EACDqB,EAAAA,iBAAiB,CAACN,OAAD,EAAUvuC,IAAV,EAAgB;EAC/B,QAAIuuC,OAAO,CAAC,CAAD,CAAP,KAAe,IAAnB,EAAyB,OAAO,IAAP;;EACzB,QAAIvuC,IAAJ,EAAU;EACR,WAAKwtC,oBAAL,CAA0B,CAA1B,IAA+Be,OAAO,CAAC,CAAD,CAAtC;EACA,WAAKf,oBAAL,CAA0B,CAA1B,IAA+Be,OAAO,CAAC,CAAD,CAAtC;EACD,KAHD,MAGO;EACL,WAAKf,oBAAL,CAA0B,CAA1B,IAA+Be,OAAO,CAAC,CAAD,CAAtC;EACA,WAAKf,oBAAL,CAA0B,CAA1B,IAA+Be,OAAO,CAAC,CAAD,CAAtC;EACD;EACF;;EACDX,EAAAA,aAAa,GAAG;EACd,SAAKY,kBAAL;EACA,UAAMQ,UAAU,GAAG,CAAC,KAAKxB,oBAAL,CAA0B,CAA1B,EAA6Bt/F,aAA7B,EAAD,EAA+C,KAAKs/F,oBAAL,CAA0B,CAA1B,EAA6Bt/F,aAA7B,EAA/C,CAAnB;EACA,WAAO8gG,UAAP;EACD;;EACDR,EAAAA,kBAAkB,GAAG;EACnB,QAAIhnG,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,UAAI,KAAK+lG,oBAAL,KAA8B,IAAlC,EAAwC,OAAO,IAAP;EACxC,WAAKA,oBAAL,GAA4B,IAAI9+F,KAAJ,CAAU,CAAV,EAAaC,IAAb,CAAkB,IAAlB,CAA5B;EACA,WAAKk/F,0BAAL;EACA,UAAI,KAAKtgD,YAAL,IAAqB,KAAKggD,kBAA9B,EAAkD,OAAO,IAAP;EAClD,WAAKkB,oBAAL;EACD,KAND,MAMO,IAAIjnG,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,UAAID,SAAS,CAAC,CAAD,CAAT,YAAwBkH,KAAxB,IAAkClH,SAAS,CAAC,CAAD,CAAT,YAAwBoiB,UAAxB,IAAsCpiB,SAAS,CAAC,CAAD,CAAT,YAAwByjB,KAApG,EAA4G;EAC1G,cAAMxJ,IAAI,GAAGja,SAAS,CAAC,CAAD,CAAtB;EAAA,cAA2BqjB,EAAE,GAAGrjB,SAAS,CAAC,CAAD,CAAzC;EAAA,cAA8C+mG,OAAO,GAAG/mG,SAAS,CAAC,CAAD,CAAjE;EACA,YAAIia,IAAI,CAACkC,mBAAL,GAA2BhZ,QAA3B,CAAoCkgB,EAAE,CAAClH,mBAAH,EAApC,IAAgE,KAAK4pC,YAAzE,EAAuF,OAAO,IAAP;EACvF,cAAM0hD,MAAM,GAAGxtF,IAAI,CAACuI,cAAL,EAAf;EACA,cAAMhgB,KAAK,GAAG6gB,EAAE,CAAC3c,aAAH,EAAd;;EACA,aAAK,IAAItJ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqqG,MAAM,CAACxnG,MAAP,GAAgB,CAApC,EAAuC7C,CAAC,EAAxC,EAA4C;EAC1C,gBAAM+c,IAAI,GAAGf,QAAQ,CAACK,cAAT,CAAwBjX,KAAxB,EAA+BilG,MAAM,CAACrqG,CAAD,CAArC,EAA0CqqG,MAAM,CAACrqG,CAAC,GAAG,CAAL,CAAhD,CAAb;;EACA,cAAI+c,IAAI,GAAG,KAAK4rC,YAAhB,EAA8B;EAC5B,iBAAKA,YAAL,GAAoB5rC,IAApB;EACA,kBAAMshB,GAAG,GAAG,IAAIJ,WAAJ,CAAgBosE,MAAM,CAACrqG,CAAD,CAAtB,EAA2BqqG,MAAM,CAACrqG,CAAC,GAAG,CAAL,CAAjC,CAAZ;EACA,kBAAMsqG,eAAe,GAAGjsE,GAAG,CAACmB,YAAJ,CAAiBp6B,KAAjB,CAAxB;EACAukG,YAAAA,OAAO,CAAC,CAAD,CAAP,GAAa,IAAI3B,gBAAJ,CAAqBnrF,IAArB,EAA2B7c,CAA3B,EAA8BsqG,eAA9B,CAAb;EACAX,YAAAA,OAAO,CAAC,CAAD,CAAP,GAAa,IAAI3B,gBAAJ,CAAqB/hF,EAArB,EAAyB,CAAzB,EAA4B7gB,KAA5B,CAAb;EACD;;EACD,cAAI,KAAKujD,YAAL,IAAqB,KAAKggD,kBAA9B,EAAkD,OAAO,IAAP;EACnD;EACF,OAhBD,MAgBO,IAAI/lG,SAAS,CAAC,CAAD,CAAT,YAAwBkH,KAAxB,IAAkClH,SAAS,CAAC,CAAD,CAAT,YAAwBoiB,UAAxB,IAAsCpiB,SAAS,CAAC,CAAD,CAAT,YAAwBoiB,UAApG,EAAiH;EACtH,cAAMulF,KAAK,GAAG3nG,SAAS,CAAC,CAAD,CAAvB;EAAA,cAA4B4nG,KAAK,GAAG5nG,SAAS,CAAC,CAAD,CAA7C;EAAA,cAAkD+mG,OAAO,GAAG/mG,SAAS,CAAC,CAAD,CAArE;EACA,YAAI2nG,KAAK,CAACxrF,mBAAN,GAA4BhZ,QAA5B,CAAqCykG,KAAK,CAACzrF,mBAAN,EAArC,IAAoE,KAAK4pC,YAA7E,EAA2F,OAAO,IAAP;EAC3F,cAAM0hD,MAAM,GAAGE,KAAK,CAACnlF,cAAN,EAAf;EACA,cAAMkG,MAAM,GAAGk/E,KAAK,CAACplF,cAAN,EAAf;;EACA,aAAK,IAAIplB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqqG,MAAM,CAACxnG,MAAP,GAAgB,CAApC,EAAuC7C,CAAC,EAAxC,EAA4C;EAC1C,gBAAMyqG,OAAO,GAAG,IAAI1/F,QAAJ,CAAas/F,MAAM,CAACrqG,CAAD,CAAnB,EAAwBqqG,MAAM,CAACrqG,CAAC,GAAG,CAAL,CAA9B,CAAhB;EACA,cAAIyqG,OAAO,CAAC1kG,QAAR,CAAiBykG,KAAK,CAACzrF,mBAAN,EAAjB,IAAgD,KAAK4pC,YAAzD,EAAuE;;EACvE,eAAK,IAAI7oC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGwL,MAAM,CAACzoB,MAAP,GAAgB,CAApC,EAAuCid,CAAC,EAAxC,EAA4C;EAC1C,kBAAM4qF,OAAO,GAAG,IAAI3/F,QAAJ,CAAaugB,MAAM,CAACxL,CAAD,CAAnB,EAAwBwL,MAAM,CAACxL,CAAC,GAAG,CAAL,CAA9B,CAAhB;EACA,gBAAI2qF,OAAO,CAAC1kG,QAAR,CAAiB2kG,OAAjB,IAA4B,KAAK/hD,YAArC,EAAmD;EACnD,kBAAM5rC,IAAI,GAAGf,QAAQ,CAACC,gBAAT,CAA0BouF,MAAM,CAACrqG,CAAD,CAAhC,EAAqCqqG,MAAM,CAACrqG,CAAC,GAAG,CAAL,CAA3C,EAAoDsrB,MAAM,CAACxL,CAAD,CAA1D,EAA+DwL,MAAM,CAACxL,CAAC,GAAG,CAAL,CAArE,CAAb;;EACA,gBAAI/C,IAAI,GAAG,KAAK4rC,YAAhB,EAA8B;EAC5B,mBAAKA,YAAL,GAAoB5rC,IAApB;EACA,oBAAM88E,IAAI,GAAG,IAAI57D,WAAJ,CAAgBosE,MAAM,CAACrqG,CAAD,CAAtB,EAA2BqqG,MAAM,CAACrqG,CAAC,GAAG,CAAL,CAAjC,CAAb;EACA,oBAAM85F,IAAI,GAAG,IAAI77D,WAAJ,CAAgB3S,MAAM,CAACxL,CAAD,CAAtB,EAA2BwL,MAAM,CAACxL,CAAC,GAAG,CAAL,CAAjC,CAAb;EACA,oBAAMwf,SAAS,GAAGu6D,IAAI,CAACx6D,aAAL,CAAmBy6D,IAAnB,CAAlB;EACA6P,cAAAA,OAAO,CAAC,CAAD,CAAP,GAAa,IAAI3B,gBAAJ,CAAqBuC,KAArB,EAA4BvqG,CAA5B,EAA+Bs/B,SAAS,CAAC,CAAD,CAAxC,CAAb;EACAqqE,cAAAA,OAAO,CAAC,CAAD,CAAP,GAAa,IAAI3B,gBAAJ,CAAqBwC,KAArB,EAA4B1qF,CAA5B,EAA+Bwf,SAAS,CAAC,CAAD,CAAxC,CAAb;EACD;;EACD,gBAAI,KAAKqpB,YAAL,IAAqB,KAAKggD,kBAA9B,EAAkD,OAAO,IAAP;EACnD;EACF;EACF;EACF;EACF;;EACDuB,EAAAA,wBAAwB,CAACS,OAAD,EAAUC,OAAV,EAAmBjB,OAAnB,EAA4B;EAClD,SAAK,IAAI3pG,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG2qG,OAAO,CAACnjG,IAAR,EAApB,EAAoCxH,CAAC,EAArC,EAAyC;EACvC,YAAM6gF,GAAG,GAAG8pB,OAAO,CAAC9iG,GAAR,CAAY7H,CAAZ,CAAZ;;EACA,WAAK,IAAI8f,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG8qF,OAAO,CAACpjG,IAAR,EAApB,EAAoCsY,CAAC,EAArC,EAAyC;EACvC,cAAM+qF,GAAG,GAAGD,OAAO,CAAC/iG,GAAR,CAAYiY,CAAZ,CAAZ;EACA,cAAM/C,IAAI,GAAG8jE,GAAG,CAACv3E,aAAJ,GAAoBvD,QAApB,CAA6B8kG,GAAG,CAACvhG,aAAJ,EAA7B,CAAb;;EACA,YAAIyT,IAAI,GAAG,KAAK4rC,YAAhB,EAA8B;EAC5B,eAAKA,YAAL,GAAoB5rC,IAApB;EACA4sF,UAAAA,OAAO,CAAC,CAAD,CAAP,GAAa,IAAI3B,gBAAJ,CAAqBnnB,GAArB,EAA0B,CAA1B,EAA6BA,GAAG,CAACv3E,aAAJ,EAA7B,CAAb;EACAqgG,UAAAA,OAAO,CAAC,CAAD,CAAP,GAAa,IAAI3B,gBAAJ,CAAqB6C,GAArB,EAA0B,CAA1B,EAA6BA,GAAG,CAACvhG,aAAJ,EAA7B,CAAb;EACD;;EACD,YAAI,KAAKq/C,YAAL,IAAqB,KAAKggD,kBAA9B,EAAkD,OAAO,IAAP;EACnD;EACF;EACF;;EACD5iG,EAAAA,QAAQ,GAAG;EACT,QAAI,KAAKg2C,KAAL,CAAW,CAAX,MAAkB,IAAlB,IAA0B,KAAKA,KAAL,CAAW,CAAX,MAAkB,IAAhD,EAAsD,MAAM,IAAIp8C,wBAAJ,CAA6B,mCAA7B,CAAN;EACtD,QAAI,KAAKo8C,KAAL,CAAW,CAAX,EAAcz0C,OAAd,MAA2B,KAAKy0C,KAAL,CAAW,CAAX,EAAcz0C,OAAd,EAA/B,EAAwD,OAAO,GAAP;EACxD,SAAKsiG,kBAAL;EACA,WAAO,KAAKjhD,YAAZ;EACD;;EACDqhD,EAAAA,uBAAuB,CAACF,MAAD,EAASC,MAAT,EAAiBJ,OAAjB,EAA0B;EAC/C,SAAK,IAAI3pG,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG8pG,MAAM,CAACtiG,IAAP,EAApB,EAAmCxH,CAAC,EAApC,EAAwC;EACtC,YAAMuqG,KAAK,GAAGT,MAAM,CAACjiG,GAAP,CAAW7H,CAAX,CAAd;;EACA,WAAK,IAAI8f,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiqF,MAAM,CAACviG,IAAP,EAApB,EAAmCsY,CAAC,EAApC,EAAwC;EACtC,cAAM0qF,KAAK,GAAGT,MAAM,CAACliG,GAAP,CAAWiY,CAAX,CAAd;EACA,aAAK8pF,kBAAL,CAAwBW,KAAxB,EAA+BC,KAA/B,EAAsCb,OAAtC;EACA,YAAI,KAAKhhD,YAAL,IAAqB,KAAKggD,kBAA9B,EAAkD,OAAO,IAAP;EACnD;EACF;EACF;;EApN6B;;;;;;;ECdjB,MAAMmC,UAAN,CAAiB;EAC9BzrG,EAAAA,WAAW,GAAG;EACZyrG,IAAAA,UAAU,CAACpoG,YAAX,CAAwBC,KAAxB,CAA8B,IAA9B,EAAoCC,SAApC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKgb,QAAL,GAAgB,IAAhB;EACA,SAAKqtF,cAAL,GAAsB,IAAI/iG,SAAJ,EAAtB;EACA,SAAKse,YAAL,GAAoB,IAApB;EACA,UAAM3F,OAAO,GAAG/d,SAAS,CAAC,CAAD,CAAzB;EACA,SAAK8a,QAAL,GAAgBiD,OAAhB;EACD;;EACDyE,EAAAA,cAAc,GAAG;EACf,QAAI,KAAKkB,YAAL,KAAsB,IAA1B,EAAgC;EAC9B,UAAI0kF,oBAAoB,GAAG,CAA3B;EACA,UAAIC,oBAAoB,GAAG,CAA3B;EACA,YAAMC,cAAc,GAAG,IAAI9hG,cAAJ,EAAvB;;EACA,WAAK,IAAIpJ,CAAC,GAAG,KAAK+qG,cAAL,CAAoBxjG,QAApB,EAAb,EAA6CvH,CAAC,CAACmJ,OAAF,EAA7C,GAA4D;EAC1D,cAAMgiG,YAAY,GAAGnrG,CAAC,CAACkJ,IAAF,EAArB;EACA,YAAIiiG,YAAY,CAACC,gBAAb,EAAJ,EACEJ,oBAAoB,GADtB,KAGEC,oBAAoB;EAEtBC,QAAAA,cAAc,CAAC9jG,GAAf,CAAmB+jG,YAAY,CAACnnC,OAAb,GAAuBqnC,OAAvB,GAAiCjmF,cAAjC,EAAnB,EAAsE,KAAtE,EAA6E+lF,YAAY,CAACC,gBAAb,EAA7E;EACD;;EACD,WAAK9kF,YAAL,GAAoB4kF,cAAc,CAACxhG,iBAAf,EAApB;EACA,UAAIuhG,oBAAoB,GAAGD,oBAA3B,EACE//E,gBAAgB,CAAC9L,OAAjB,CAAyB,KAAKmH,YAA9B;EAEH;;EACD,WAAO,KAAKA,YAAZ;EACD;;EACDuT,EAAAA,YAAY,GAAG;EACb,WAAO,KAAKnc,QAAL,CAAc+H,gBAAd,CAA+B,KAAKL,cAAL,EAA/B,CAAP;EACD;;EACDhe,EAAAA,GAAG,CAAC+jG,YAAD,EAAe;EAChB,SAAKJ,cAAL,CAAoB3jG,GAApB,CAAwB+jG,YAAxB;EACD;;EArC6B;;ECHjB,MAAMjqC,gBAAN,CAAqB;EAClC7hE,EAAAA,WAAW,GAAG;EACZ6hE,IAAAA,gBAAc,CAACx+D,YAAf,CAA4BC,KAA5B,CAAkC,IAAlC,EAAwCC,SAAxC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK8vD,SAAL,GAAiB,KAAjB;EACA,SAAK8O,UAAL,GAAkB,KAAlB;EACA,SAAKpC,KAAL,GAAa,IAAb;EACD;;EACD,SAAOosC,4BAAP,CAAoCtrG,CAApC,EAAuCurG,YAAvC,EAAqD;EACnD,WAAOvrG,CAAC,CAACmJ,OAAF,EAAP,EAAoB;EAClB,YAAMqV,IAAI,GAAGxe,CAAC,CAACkJ,IAAF,EAAb;EACA,UAAIsV,IAAI,CAACgjD,SAAL,OAAqB+pC,YAAzB,EAAuC,OAAO/sF,IAAP;EACxC;;EACD,WAAO,IAAP;EACD;;EACD,SAAO+iD,UAAP,CAAkBvhE,CAAlB,EAAqBwrG,OAArB,EAA8B;EAC5B,WAAOxrG,CAAC,CAACmJ,OAAF,EAAP,EAAoB;EAClB,YAAMqV,IAAI,GAAGxe,CAAC,CAACkJ,IAAF,EAAb;EACAsV,MAAAA,IAAI,CAAC+iD,UAAL,CAAgBiqC,OAAhB;EACD;EACF;;EACD,SAAOC,SAAP,CAAiBzrG,CAAjB,EAAoB0rG,MAApB,EAA4B;EAC1B,WAAO1rG,CAAC,CAACmJ,OAAF,EAAP,EAAoB;EAClB,YAAMqV,IAAI,GAAGxe,CAAC,CAACkJ,IAAF,EAAb;EACAsV,MAAAA,IAAI,CAACitF,SAAL,CAAeC,MAAf;EACD;EACF;;EACDnqC,EAAAA,UAAU,CAACC,SAAD,EAAY;EACpB,SAAKF,UAAL,GAAkBE,SAAlB;EACD;;EACD9O,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAKF,SAAZ;EACD;;EACD6uB,EAAAA,OAAO,CAACvU,IAAD,EAAO;EACZ,SAAK5N,KAAL,GAAa4N,IAAb;EACD;;EACDI,EAAAA,OAAO,GAAG;EACR,WAAO,KAAKhO,KAAZ;EACD;;EACDusC,EAAAA,SAAS,CAAC/4C,QAAD,EAAW;EAClB,SAAKF,SAAL,GAAiBE,QAAjB;EACD;;EACD0wB,EAAAA,UAAU,GAAG;EACX,WAAO,KAAKlkB,KAAZ;EACD;;EACDsC,EAAAA,SAAS,GAAG;EACV,WAAO,KAAKF,UAAZ;EACD;;EACDqqC,EAAAA,UAAU,CAAC7+B,IAAD,EAAO;EACf,SAAK5N,KAAL,GAAa4N,IAAb;EACD;;EAnDiC;;ECKrB,MAAMzG,cAAN,SAA2BnF,gBAA3B,CAA0C;EACvD7hE,EAAAA,WAAW,GAAG;EACZ;EACAgnE,IAAAA,cAAY,CAAC3jE,YAAb,CAA0BC,KAA1B,CAAgC,IAAhC,EAAsCC,SAAtC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKmiG,WAAL,GAAmB,IAAnB;EACA,SAAK+G,KAAL,GAAa,IAAb;EACA,SAAKC,GAAL,GAAW,IAAX;EACA,SAAKzmC,GAAL,GAAW,IAAX;EACA,SAAKC,GAAL,GAAW,IAAX;EACA,SAAK9U,IAAL,GAAY,IAAZ;EACA,SAAKu7C,cAAL,GAAsB,IAAtB;EACA,SAAKtmC,SAAL,GAAiB,IAAjB;EACA,SAAKumC,MAAL,GAAc,IAAd;;EACA,QAAInpG,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B,CAA5B,MAAoC,IAAID,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC9D,YAAMigB,IAAI,GAAGlgB,SAAS,CAAC,CAAD,CAAtB;EAAA,YAA2BmgB,EAAE,GAAGngB,SAAS,CAAC,CAAD,CAAzC;EAAA,YAA8CyuD,WAAW,GAAGzuD,SAAS,CAAC,CAAD,CAArE;EAAA,YAA0EopG,aAAa,GAAGppG,SAAS,CAAC,CAAD,CAAnG;EACA,WAAKgpG,KAAL,GAAa9oF,IAAb;EACA,WAAK+oF,GAAL,GAAW9oF,EAAX;EACA,WAAK+oF,cAAL,GAAsBE,aAAtB;EACA,WAAK5mC,GAAL,GAAWtiD,IAAI,CAACxZ,aAAL,EAAX;EACA,WAAK+7D,GAAL,GAAWhU,WAAX;EACA,YAAM5rD,EAAE,GAAG,KAAK4/D,GAAL,CAAS1jE,CAAT,GAAa,KAAKyjE,GAAL,CAASzjE,CAAjC;EACA,YAAM+D,EAAE,GAAG,KAAK2/D,GAAL,CAASzjE,CAAT,GAAa,KAAKwjE,GAAL,CAASxjE,CAAjC;EACA,WAAK4jE,SAAL,GAAiBjW,QAAQ,CAACa,QAAT,CAAkB3qD,EAAlB,EAAsBC,EAAtB,CAAjB;EACA,WAAKqmG,MAAL,GAAc9sG,IAAI,CAACigC,KAAL,CAAWx5B,EAAX,EAAeD,EAAf,CAAd;EACD;EACF;;EACD,SAAOwmG,OAAP,CAAevb,QAAf,EAAyB;EACvB,UAAM77B,KAAK,GAAG,IAAI7sD,SAAJ,EAAd;;EACA,SAAK,IAAIhI,CAAC,GAAG0wF,QAAQ,CAACnpF,QAAT,EAAb,EAAkCvH,CAAC,CAACmJ,OAAF,EAAlC,GACE0rD,KAAK,CAACztD,GAAN,CAAUpH,CAAC,CAACkJ,IAAF,GAAS27F,WAAnB;;EAEF,WAAOhwC,KAAP;EACD;;EACDq3C,EAAAA,SAAS,GAAG;EACV,WAAO,KAAKrH,WAAL,KAAqB,IAA5B;EACD;;EACDp/B,EAAAA,gBAAgB,CAACpgE,CAAD,EAAI;EAClB,QAAI,KAAKmgE,SAAL,GAAiBngE,CAAC,CAACmgE,SAAvB,EAAkC,OAAO,CAAP;EAClC,QAAI,KAAKA,SAAL,GAAiBngE,CAAC,CAACmgE,SAAvB,EAAkC,OAAO,CAAC,CAAR;EAClC,WAAO5sD,WAAW,CAACtQ,KAAZ,CAAkBjD,CAAC,CAAC+/D,GAApB,EAAyB//D,CAAC,CAACggE,GAA3B,EAAgC,KAAKA,GAArC,CAAP;EACD;;EACD/7D,EAAAA,aAAa,GAAG;EACd,WAAO,KAAKsiG,KAAL,CAAWtiG,aAAX,EAAP;EACD;;EACDszD,EAAAA,KAAK,CAACv/B,GAAD,EAAM;EACT,UAAMsoC,SAAS,GAAG,KAAKxlD,QAAL,GAAgBqgC,OAAhB,EAAlB;EACA,UAAMolB,UAAU,GAAGD,SAAS,CAACE,WAAV,CAAsB,GAAtB,CAAnB;EACA,UAAMtmE,IAAI,GAAGomE,SAAS,CAAC50D,SAAV,CAAoB60D,UAAU,GAAG,CAAjC,CAAb;EACAvoC,IAAAA,GAAG,CAACu/B,KAAJ,CAAU,OAAOr9D,IAAP,GAAc,IAAd,GAAqB,KAAK6lE,GAA1B,GAAgC,KAAhC,GAAwC,KAAKC,GAA7C,GAAmD,GAAnD,GAAyD,KAAKG,SAA9D,GAA0E,GAA1E,GAAgF,KAAKumC,MAA/F;EACD;;EACDI,EAAAA,cAAc,GAAG;EACf,WAAO,KAAK9mC,GAAZ;EACD;;EACD+mC,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAKL,MAAZ;EACD;;EACD/mG,EAAAA,SAAS,CAACiF,GAAD,EAAM;EACb,UAAM85D,EAAE,GAAG95D,GAAX;EACA,WAAO,KAAKw7D,gBAAL,CAAsB1B,EAAtB,CAAP;EACD;;EACDsoC,EAAAA,WAAW,GAAG;EACZ,WAAO,KAAKT,KAAZ;EACD;;EACDhkC,EAAAA,MAAM,GAAG;EACP,WAAO,KAAKrX,IAAZ;EACD;;EACD+7C,EAAAA,OAAO,CAAChI,UAAD,EAAa;EAClB,SAAKO,WAAL,GAAmBP,UAAnB;EACD;;EACD58F,EAAAA,MAAM,GAAG;EACP,SAAK6oD,IAAL,GAAY,IAAZ;EACA,SAAKs0C,WAAL,GAAmB,IAAnB;EACD;;EACD7gC,EAAAA,OAAO,GAAG;EACR,WAAO,KAAK6gC,WAAZ;EACD;;EACD7+B,EAAAA,WAAW,GAAG;EACZ,WAAO,KAAKR,SAAZ;EACD;;EACDnT,EAAAA,MAAM,CAACT,GAAD,EAAM;EACV,SAAKrB,IAAL,GAAYqB,GAAZ;EACD;;EACD26C,EAAAA,SAAS,GAAG;EACV,WAAO,KAAKV,GAAZ;EACD;;EACDT,EAAAA,gBAAgB,GAAG;EACjB,WAAO,KAAKU,cAAZ;EACD;;EACD,MAAI7lG,WAAJ,GAAkB;EAChB,WAAO,CAAC7D,UAAD,CAAP;EACD;;EA5FsD;;ECH1C,MAAMoqG,qBAAN,SAAoCnmC,cAApC,CAAiD;EAC9DhnE,EAAAA,WAAW,GAAG;EACZ;EACAmtG,IAAAA,qBAAqB,CAAC9pG,YAAtB,CAAmCC,KAAnC,CAAyC,IAAzC,EAA+CC,SAA/C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,UAAMogB,IAAI,GAAGlgB,SAAS,CAAC,CAAD,CAAtB;EAAA,UAA2BmgB,EAAE,GAAGngB,SAAS,CAAC,CAAD,CAAzC;EAAA,UAA8CyuD,WAAW,GAAGzuD,SAAS,CAAC,CAAD,CAArE;EAAA,UAA0EopG,aAAa,GAAGppG,SAAS,CAAC,CAAD,CAAnG;EACAyjE,IAAAA,cAAY,CAAC3jE,YAAb,CAA0BI,IAA1B,CAA+B,IAA/B,EAAqCggB,IAArC,EAA2CC,EAA3C,EAA+CsuC,WAA/C,EAA4D26C,aAA5D;EACD;;EACDjlC,EAAAA,OAAO,GAAG;EACR,QAAI,KAAKwlC,SAAL,GAAiB9P,SAAjB,OAAiC,CAArC,EACE,OAAO,IAAP;EAEF,QAAI,KAAK8P,SAAL,GAAiBE,WAAjB,GAA+B3oC,QAA/B,GAA0Cj8D,GAA1C,CAA8C,CAA9C,MAAqD,KAAK+/D,MAAL,EAAzD,EACE,OAAO,KAAK2kC,SAAL,GAAiBE,WAAjB,GAA+B3oC,QAA/B,GAA0Cj8D,GAA1C,CAA8C,CAA9C,CAAP;EAEF9E,IAAAA,MAAM,CAACE,MAAP,CAAc,KAAKspG,SAAL,GAAiBE,WAAjB,GAA+B3oC,QAA/B,GAA0Cj8D,GAA1C,CAA8C,CAA9C,MAAqD,KAAK+/D,MAAL,EAAnE;EACA,WAAO,KAAK2kC,SAAL,GAAiBE,WAAjB,GAA+B3oC,QAA/B,GAA0Cj8D,GAA1C,CAA8C,CAA9C,CAAP;EACD;;EAlB6D;;ECAjD,MAAMk3D,MAAN,SAAmBmC,gBAAnB,CAAkC;EAC/C7hE,EAAAA,WAAW,GAAG;EACZ;EACA0/D,IAAAA,MAAI,CAACr8D,YAAL,CAAkBC,KAAlB,CAAwB,IAAxB,EAA8BC,SAA9B;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKgqG,QAAL,GAAgB,IAAhB;;EACA,QAAI9pG,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B,CAA5B,MAAoC,IAAID,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC9D,YAAMw6F,GAAG,GAAGz6F,SAAS,CAAC,CAAD,CAArB;EAAA,YAA0BknE,GAAG,GAAGlnE,SAAS,CAAC,CAAD,CAAzC;EACA,WAAK+pG,gBAAL,CAAsBtP,GAAtB,EAA2BvzB,GAA3B;EACD;EACF;;EACDoiC,EAAAA,SAAS,GAAG;EACV,WAAO,KAAKQ,QAAL,KAAkB,IAAzB;EACD;;EACDC,EAAAA,gBAAgB,CAACtP,GAAD,EAAMvzB,GAAN,EAAW;EACzB,SAAK4iC,QAAL,GAAgB,CAACrP,GAAD,EAAMvzB,GAAN,CAAhB;EACAuzB,IAAAA,GAAG,CAACiP,OAAJ,CAAY,IAAZ;EACAxiC,IAAAA,GAAG,CAACwiC,OAAJ,CAAY,IAAZ;EACAjP,IAAAA,GAAG,CAAChrC,MAAJ,CAAWyX,GAAX;EACAA,IAAAA,GAAG,CAACzX,MAAJ,CAAWgrC,GAAX;EACAA,IAAAA,GAAG,CAACgP,WAAJ,GAAkBO,UAAlB,CAA6BvP,GAA7B;EACAvzB,IAAAA,GAAG,CAACuiC,WAAJ,GAAkBO,UAAlB,CAA6B9iC,GAA7B;EACD;;EACD+iC,EAAAA,UAAU,GAAG;EACX,QAAItsG,MAAM,CAAC4J,SAAP,CAAiBvH,SAAS,CAAC,CAAD,CAA1B,CAAJ,EAAoC;EAClC,YAAM5C,CAAC,GAAG4C,SAAS,CAAC,CAAD,CAAnB;EACA,aAAO,KAAK8pG,QAAL,CAAc1sG,CAAd,CAAP;EACD,KAHD,MAGO,IAAI4C,SAAS,CAAC,CAAD,CAAT,YAAwB8gE,MAA5B,EAAkC;EACvC,YAAMopC,QAAQ,GAAGlqG,SAAS,CAAC,CAAD,CAA1B;EACA,UAAI,KAAK8pG,QAAL,CAAc,CAAd,EAAiBL,WAAjB,OAAmCS,QAAvC,EAAiD,OAAO,KAAKJ,QAAL,CAAc,CAAd,CAAP;EACjD,UAAI,KAAKA,QAAL,CAAc,CAAd,EAAiBL,WAAjB,OAAmCS,QAAvC,EAAiD,OAAO,KAAKJ,QAAL,CAAc,CAAd,CAAP;EACjD,aAAO,IAAP;EACD;EACF;;EACDhlG,EAAAA,MAAM,GAAG;EACP,SAAKglG,QAAL,GAAgB,IAAhB;EACD;;EACDK,EAAAA,eAAe,CAAC1uD,IAAD,EAAO;EACpB,QAAI,KAAKquD,QAAL,CAAc,CAAd,EAAiBL,WAAjB,OAAmChuD,IAAvC,EAA6C,OAAO,KAAKquD,QAAL,CAAc,CAAd,EAAiBH,SAAjB,EAAP;EAC7C,QAAI,KAAKG,QAAL,CAAc,CAAd,EAAiBL,WAAjB,OAAmChuD,IAAvC,EAA6C,OAAO,KAAKquD,QAAL,CAAc,CAAd,EAAiBH,SAAjB,EAAP;EAC7C,WAAO,IAAP;EACD;;EA1C8C;;ECElC,MAAM5P,kBAAN,CAAuB;EACpCt9F,EAAAA,WAAW,GAAG;EACZs9F,IAAAA,kBAAgB,CAACj6F,YAAjB,CAA8BC,KAA9B,CAAoC,IAApC,EAA0CC,SAA1C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKsqG,SAAL,GAAiB,IAAIhlG,SAAJ,EAAjB;EACA,SAAKilG,OAAL,GAAe,KAAf;EACD;;EACDC,EAAAA,WAAW,CAACjgB,OAAD,EAAU;EACnB,UAAMjtF,CAAC,GAAG,KAAKwkF,QAAL,CAAcyI,OAAd,CAAV;EACA,WAAO,KAAK+f,SAAL,CAAenlG,GAAf,CAAmB,KAAK28E,QAAL,CAAcxkF,CAAC,GAAG,CAAlB,CAAnB,CAAP;EACD;;EACDsJ,EAAAA,aAAa,GAAG;EACd,UAAM6lB,EAAE,GAAG,KAAK5nB,QAAL,EAAX;EACA,QAAI,CAAC4nB,EAAE,CAAChmB,OAAH,EAAL,EAAmB,OAAO,IAAP;EACnB,UAAM9D,CAAC,GAAG8pB,EAAE,CAACjmB,IAAH,EAAV;EACA,WAAO7D,CAAC,CAACiE,aAAF,EAAP;EACD;;EACD/B,EAAAA,QAAQ,GAAG;EACT,SAAK4lG,SAAL;EACA,WAAO,KAAKH,SAAL,CAAezlG,QAAf,EAAP;EACD;;EACD4lG,EAAAA,SAAS,GAAG;EACV,QAAI,CAAC,KAAKF,OAAV,EAAmB;EACjBv4D,MAAAA,WAAW,CAAChsC,IAAZ,CAAiB,KAAKskG,SAAtB;EACA,WAAKC,OAAL,GAAe,IAAf;EACD;EACF;;EACDvlG,EAAAA,MAAM,CAACq8D,EAAD,EAAK;EACT,SAAKipC,SAAL,CAAetlG,MAAf,CAAsBq8D,EAAtB;EACD;;EACDD,EAAAA,QAAQ,GAAG;EACT,SAAKqpC,SAAL;EACA,WAAO,KAAKH,SAAZ;EACD;;EACDI,EAAAA,aAAa,CAACngB,OAAD,EAAU;EACrB,UAAMjtF,CAAC,GAAG,KAAKwkF,QAAL,CAAcyI,OAAd,CAAV;EACA,WAAO,KAAK+f,SAAL,CAAenlG,GAAf,CAAmB,KAAK28E,QAAL,CAAcxkF,CAAC,GAAG,CAAlB,CAAnB,CAAP;EACD;;EACDwkF,EAAAA,QAAQ,GAAG;EACT,QAAI5hF,SAAS,CAAC,CAAD,CAAT,YAAwBm8D,MAA5B,EAAkC;EAChC,YAAMhF,IAAI,GAAGn3D,SAAS,CAAC,CAAD,CAAtB;EACA,WAAKuqG,SAAL;;EACA,WAAK,IAAIntG,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKgtG,SAAL,CAAexlG,IAAf,EAApB,EAA2CxH,CAAC,EAA5C,EAAgD;EAC9C,cAAM+jE,EAAE,GAAG,KAAKipC,SAAL,CAAenlG,GAAf,CAAmB7H,CAAnB,CAAX;;EACA,YAAI+jE,EAAE,CAACC,OAAH,OAAiBjK,IAArB,EAA2B,OAAO/5D,CAAP;EAC5B;;EACD,aAAO,CAAC,CAAR;EACD,KARD,MAQO,IAAI4C,SAAS,CAAC,CAAD,CAAT,YAAwByjE,cAA5B,EAA0C;EAC/C,YAAM4mB,OAAO,GAAGrqF,SAAS,CAAC,CAAD,CAAzB;EACA,WAAKuqG,SAAL;;EACA,WAAK,IAAIntG,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKgtG,SAAL,CAAexlG,IAAf,EAApB,EAA2CxH,CAAC,EAA5C,EAAgD;EAC9C,cAAM+jE,EAAE,GAAG,KAAKipC,SAAL,CAAenlG,GAAf,CAAmB7H,CAAnB,CAAX;;EACA,YAAI+jE,EAAE,KAAKkpB,OAAX,EAAoB,OAAOjtF,CAAP;EACrB;;EACD,aAAO,CAAC,CAAR;EACD,KARM,MAQA,IAAIO,MAAM,CAAC4J,SAAP,CAAiBvH,SAAS,CAAC,CAAD,CAA1B,CAAJ,EAAoC;EACzC,YAAM5C,CAAC,GAAG4C,SAAS,CAAC,CAAD,CAAnB;;EACA,UAAIyqG,IAAI,GAAGrtG,CAAC,GAAG,KAAKgtG,SAAL,CAAexlG,IAAf,EAAf;;EACA,UAAI6lG,IAAI,GAAG,CAAX,EAAcA,IAAI,IAAI,KAAKL,SAAL,CAAexlG,IAAf,EAAR;EACd,aAAO6lG,IAAP;EACD;EACF;;EACDjmG,EAAAA,GAAG,CAAC28D,EAAD,EAAK;EACN,SAAKipC,SAAL,CAAe5lG,GAAf,CAAmB28D,EAAnB;;EACA,SAAKkpC,OAAL,GAAe,KAAf;EACD;;EACDxQ,EAAAA,SAAS,GAAG;EACV,WAAO,KAAKuQ,SAAL,CAAexlG,IAAf,EAAP;EACD;;EArEmC;;ECAvB,MAAMk8D,MAAN,SAAmBxC,gBAAnB,CAAkC;EAC/C7hE,EAAAA,WAAW,GAAG;EACZ;EACAqkE,IAAAA,MAAI,CAAChhE,YAAL,CAAkBC,KAAlB,CAAwB,IAAxB,EAA8BC,SAA9B;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKu3C,GAAL,GAAW,IAAX;EACA,SAAKqzD,OAAL,GAAe,IAAf;;EACA,QAAI1qG,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMojB,EAAE,GAAGrjB,SAAS,CAAC,CAAD,CAApB;EACA8gE,MAAAA,MAAI,CAAChhE,YAAL,CAAkBI,IAAlB,CAAuB,IAAvB,EAA6BmjB,EAA7B,EAAiC,IAAI02E,kBAAJ,EAAjC;EACD,KAHD,MAGO,IAAI/5F,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMojB,EAAE,GAAGrjB,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyB2qG,MAAM,GAAG3qG,SAAS,CAAC,CAAD,CAA3C;EACA,WAAKq3C,GAAL,GAAWh0B,EAAX;EACA,WAAKqnF,OAAL,GAAeC,MAAf;EACD;EACF;;EACD,SAAOC,eAAP,CAAuBC,KAAvB,EAA8BC,KAA9B,EAAqC;EACnC,UAAM/zC,MAAM,GAAG0M,cAAY,CAAC4lC,OAAb,CAAqBwB,KAAK,CAAChB,WAAN,GAAoB3oC,QAApB,EAArB,CAAf;EACA,UAAM6pC,WAAW,GAAG,IAAIh/E,OAAJ,CAAYgrC,MAAZ,CAApB;EACA,UAAMC,MAAM,GAAGyM,cAAY,CAAC4lC,OAAb,CAAqByB,KAAK,CAACjB,WAAN,GAAoB3oC,QAApB,EAArB,CAAf;EACA6pC,IAAAA,WAAW,CAACC,SAAZ,CAAsBh0C,MAAtB;EACA,WAAO+zC,WAAP;EACD;;EACDzB,EAAAA,SAAS,GAAG;EACV,WAAO,KAAKjyD,GAAL,KAAa,IAApB;EACD;;EACD2yD,EAAAA,UAAU,CAAC7oC,EAAD,EAAK;EACb,SAAKupC,OAAL,CAAalmG,GAAb,CAAiB28D,EAAjB;EACD;;EACDz6D,EAAAA,aAAa,GAAG;EACd,WAAO,KAAK2wC,GAAZ;EACD;;EACDwyD,EAAAA,WAAW,GAAG;EACZ,WAAO,KAAKa,OAAZ;EACD;;EACD5lG,EAAAA,MAAM,GAAG;EACP,QAAI9E,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,WAAKo3C,GAAL,GAAW,IAAX;EACD,KAFD,MAEO,IAAIr3C,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMkhE,EAAE,GAAGnhE,SAAS,CAAC,CAAD,CAApB;;EACA,WAAK0qG,OAAL,CAAa5lG,MAAb,CAAoBq8D,EAApB;EACD;EACF;;EACDygB,EAAAA,QAAQ,CAACzqB,IAAD,EAAO;EACb,WAAO,KAAKuzC,OAAL,CAAa9oB,QAAb,CAAsBzqB,IAAtB,CAAP;EACD;;EACD0iC,EAAAA,SAAS,GAAG;EACV,WAAO,KAAK6Q,OAAL,CAAa7Q,SAAb,EAAP;EACD;;EAjD8C;;ECHlC,MAAMoR,aAAN,SAA4B9uC,MAA5B,CAAiC;EAC9C1/D,EAAAA,WAAW,GAAG;EACZ;EACAwuG,IAAAA,aAAa,CAACnrG,YAAd,CAA2BC,KAA3B,CAAiC,IAAjC,EAAuCC,SAAvC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKorG,KAAL,GAAa,IAAb;EACA,UAAMjxF,IAAI,GAAGja,SAAS,CAAC,CAAD,CAAtB;EACA,SAAKkrG,KAAL,GAAajxF,IAAb;EACD;;EACDwuF,EAAAA,OAAO,GAAG;EACR,WAAO,KAAKyC,KAAZ;EACD;;EAZ6C;;ECAjC,MAAMnpC,SAAN,CAAc;EAC3BtlE,EAAAA,WAAW,GAAG;EACZslE,IAAAA,SAAO,CAACjiE,YAAR,CAAqBC,KAArB,CAA2B,IAA3B,EAAiCC,SAAjC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK07D,QAAL,GAAgB,IAAIb,OAAJ,EAAhB;EACD;;EACD1M,EAAAA,IAAI,CAACzrD,KAAD,EAAQ;EACV,WAAO,KAAKg5D,QAAL,CAAcv2D,GAAd,CAAkBzC,KAAlB,CAAP;EACD;;EACDmC,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAK62D,QAAL,CAAcr1D,MAAd,GAAuBxB,QAAvB,EAAP;EACD;;EACDG,EAAAA,MAAM,CAACue,EAAD,EAAK;EACT,WAAO,KAAKm4C,QAAL,CAAc12D,MAAd,CAAqBue,EAArB,CAAP;EACD;;EACDld,EAAAA,MAAM,GAAG;EACP,WAAO,KAAKq1D,QAAL,CAAcr1D,MAAd,EAAP;EACD;;EACD3B,EAAAA,GAAG,CAAC9G,CAAD,EAAI;EACL,SAAK89D,QAAL,CAAc3vC,GAAd,CAAkBnuB,CAAC,CAACgJ,aAAF,EAAlB,EAAqChJ,CAArC;;EACA,WAAOA,CAAP;EACD;;EAtB0B;;ECKd,MAAMioE,aAAN,CAAkB;EAC/BlpE,EAAAA,WAAW,GAAG;EACZkpE,IAAAA,aAAW,CAAC7lE,YAAZ,CAAyBC,KAAzB,CAA+B,IAA/B,EAAqCC,SAArC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKkhE,MAAL,GAAc,IAAIj1C,OAAJ,EAAd;EACA,SAAKo/E,SAAL,GAAiB,IAAIp/E,OAAJ,EAAjB;EACA,SAAKyvC,QAAL,GAAgB,IAAIuG,SAAJ,EAAhB;EACD;;EACDqpC,EAAAA,iBAAiB,CAACn8C,MAAD,EAAS;EACxB,UAAMo8C,UAAU,GAAG,IAAIjmG,SAAJ,EAAnB;;EACA,SAAK,IAAIhI,CAAC,GAAG,KAAKkuG,YAAL,EAAb,EAAkCluG,CAAC,CAACmJ,OAAF,EAAlC,GAAiD;EAC/C,YAAMk1C,IAAI,GAAGr+C,CAAC,CAACkJ,IAAF,EAAb;EACA,UAAIm1C,IAAI,CAACo+C,SAAL,OAAqB5qC,MAAzB,EAAiCo8C,UAAU,CAAC7mG,GAAX,CAAei3C,IAAf;EAClC;;EACD,WAAO4vD,UAAP;EACD;;EACDE,EAAAA,eAAe,GAAG;EAChB,WAAO,KAAKJ,SAAL,CAAexmG,QAAf,EAAP;EACD;;EACD6mG,EAAAA,YAAY,GAAG;EACb,WAAO,KAAKxqC,MAAL,CAAYr8D,QAAZ,EAAP;EACD;;EACDG,EAAAA,MAAM,GAAG;EACP,QAAI9E,SAAS,CAAC,CAAD,CAAT,YAAwBm8D,MAA5B,EAAkC;EAChC,YAAMhF,IAAI,GAAGn3D,SAAS,CAAC,CAAD,CAAtB;EACA,WAAK8E,MAAL,CAAYqyD,IAAI,CAAC8yC,UAAL,CAAgB,CAAhB,CAAZ;EACA,WAAKnlG,MAAL,CAAYqyD,IAAI,CAAC8yC,UAAL,CAAgB,CAAhB,CAAZ;;EACA,WAAKjpC,MAAL,CAAYl8D,MAAZ,CAAmBqyD,IAAnB;;EACAA,MAAAA,IAAI,CAACryD,MAAL;EACD,KAND,MAMO,IAAI9E,SAAS,CAAC,CAAD,CAAT,YAAwByjE,cAA5B,EAA0C;EAC/C,YAAMtC,EAAE,GAAGnhE,SAAS,CAAC,CAAD,CAApB;EACA,YAAMgvD,GAAG,GAAGmS,EAAE,CAAC6D,MAAH,EAAZ;EACA,UAAIhW,GAAG,KAAK,IAAZ,EAAkBA,GAAG,CAACS,MAAJ,CAAW,IAAX;EAClB0R,MAAAA,EAAE,CAACsoC,WAAH,GAAiB3kG,MAAjB,CAAwBq8D,EAAxB;EACAA,MAAAA,EAAE,CAACr8D,MAAH;;EACA,WAAKqmG,SAAL,CAAermG,MAAf,CAAsBq8D,EAAtB;EACD,KAPM,MAOA,IAAInhE,SAAS,CAAC,CAAD,CAAT,YAAwB8gE,MAA5B,EAAkC;EACvC,YAAMrlB,IAAI,GAAGz7C,SAAS,CAAC,CAAD,CAAtB;EACA,YAAMyrG,QAAQ,GAAGhwD,IAAI,CAACouD,WAAL,GAAmB3oC,QAAnB,EAAjB;;EACA,WAAK,IAAI9jE,CAAC,GAAGquG,QAAQ,CAAC9mG,QAAT,EAAb,EAAkCvH,CAAC,CAACmJ,OAAF,EAAlC,GAAiD;EAC/C,cAAM46D,EAAE,GAAG/jE,CAAC,CAACkJ,IAAF,EAAX;EACA,cAAM0oD,GAAG,GAAGmS,EAAE,CAAC6D,MAAH,EAAZ;EACA,YAAIhW,GAAG,KAAK,IAAZ,EAAkB,KAAKlqD,MAAL,CAAYkqD,GAAZ;;EAClB,aAAKm8C,SAAL,CAAermG,MAAf,CAAsBq8D,EAAtB;;EACA,cAAMhK,IAAI,GAAGgK,EAAE,CAACC,OAAH,EAAb;EACA,YAAIjK,IAAI,KAAK,IAAb,EACE,KAAK6J,MAAL,CAAYl8D,MAAZ,CAAmBqyD,IAAnB;EAEH;;EACD,WAAKqE,QAAL,CAAc12D,MAAd,CAAqB22C,IAAI,CAAC/0C,aAAL,EAArB;;EACA+0C,MAAAA,IAAI,CAAC32C,MAAL;EACD;EACF;;EACD4mG,EAAAA,QAAQ,CAACroF,EAAD,EAAK;EACX,WAAO,KAAKm4C,QAAL,CAAcvN,IAAd,CAAmB5qC,EAAnB,CAAP;EACD;;EACD69C,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAKF,MAAZ;EACD;;EACDsqC,EAAAA,YAAY,GAAG;EACb,WAAO,KAAK9vC,QAAL,CAAc72D,QAAd,EAAP;EACD;;EACD+G,EAAAA,QAAQ,GAAG;EACT,QAAI1L,SAAS,CAAC,CAAD,CAAT,YAAwBm8D,MAA5B,EAAkC;EAChC,YAAM15D,CAAC,GAAGzC,SAAS,CAAC,CAAD,CAAnB;EACA,aAAO,KAAKghE,MAAL,CAAYt1D,QAAZ,CAAqBjJ,CAArB,CAAP;EACD,KAHD,MAGO,IAAIzC,SAAS,CAAC,CAAD,CAAT,YAAwByjE,cAA5B,EAA0C;EAC/C,YAAMtC,EAAE,GAAGnhE,SAAS,CAAC,CAAD,CAApB;EACA,aAAO,KAAKmrG,SAAL,CAAez/F,QAAf,CAAwBy1D,EAAxB,CAAP;EACD;EACF;;EACD38D,EAAAA,GAAG,GAAG;EACJ,QAAIxE,SAAS,CAAC,CAAD,CAAT,YAAwB8gE,MAA5B,EAAkC;EAChC,YAAMrlB,IAAI,GAAGz7C,SAAS,CAAC,CAAD,CAAtB;;EACA,WAAKw7D,QAAL,CAAch3D,GAAd,CAAkBi3C,IAAlB;EACD,KAHD,MAGO,IAAIz7C,SAAS,CAAC,CAAD,CAAT,YAAwBm8D,MAA5B,EAAkC;EACvC,YAAMhF,IAAI,GAAGn3D,SAAS,CAAC,CAAD,CAAtB;;EACA,WAAKghE,MAAL,CAAYx8D,GAAZ,CAAgB2yD,IAAhB;;EACA,WAAK3yD,GAAL,CAAS2yD,IAAI,CAAC8yC,UAAL,CAAgB,CAAhB,CAAT;EACA,WAAKzlG,GAAL,CAAS2yD,IAAI,CAAC8yC,UAAL,CAAgB,CAAhB,CAAT;EACD,KALM,MAKA,IAAIjqG,SAAS,CAAC,CAAD,CAAT,YAAwByjE,cAA5B,EAA0C;EAC/C,YAAM4mB,OAAO,GAAGrqF,SAAS,CAAC,CAAD,CAAzB;;EACA,WAAKmrG,SAAL,CAAe3mG,GAAf,CAAmB6lF,OAAnB;EACD;EACF;;EACDjjB,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAK5L,QAAL,CAAcr1D,MAAd,EAAP;EACD;;EAxF8B;;ECDlB,MAAMwlG,cAAN,SAA6BhmC,aAA7B,CAAyC;EACtDlpE,EAAAA,WAAW,GAAG;EACZ;EACD;;EACDg0D,EAAAA,OAAO,CAAC0B,UAAD,EAAa;EAClB,QAAIA,UAAU,CAACztD,OAAX,EAAJ,EACE,OAAO,IAAP;EAEF,UAAMif,WAAW,GAAG0E,gBAAgB,CAACU,oBAAjB,CAAsCopC,UAAU,CAAC3vC,cAAX,EAAtC,CAApB;EACA,QAAImB,WAAW,CAAC1jB,MAAZ,IAAsB,CAA1B,EAA6B,OAAO,IAAP;EAC7B,UAAM2rG,eAAe,GAAGjoF,WAAW,CAAC,CAAD,CAAnC;EACA,UAAMkoF,aAAa,GAAGloF,WAAW,CAACA,WAAW,CAAC1jB,MAAZ,GAAqB,CAAtB,CAAjC;EACA,UAAMiqF,SAAS,GAAG,KAAK7mB,OAAL,CAAauoC,eAAb,CAAlB;EACA,UAAME,OAAO,GAAG,KAAKzoC,OAAL,CAAawoC,aAAb,CAAhB;EACA,UAAME,aAAa,GAAG,IAAInC,qBAAJ,CAA0B1f,SAA1B,EAAqC4hB,OAArC,EAA8CnoF,WAAW,CAAC,CAAD,CAAzD,EAA8D,IAA9D,CAAtB;EACA,UAAMqoF,aAAa,GAAG,IAAIpC,qBAAJ,CAA0BkC,OAA1B,EAAmC5hB,SAAnC,EAA8CvmE,WAAW,CAACA,WAAW,CAAC1jB,MAAZ,GAAqB,CAAtB,CAAzD,EAAmF,KAAnF,CAAtB;EACA,UAAMk3D,IAAI,GAAG,IAAI8zC,aAAJ,CAAkB94C,UAAlB,CAAb;EACAgF,IAAAA,IAAI,CAAC4yC,gBAAL,CAAsBgC,aAAtB,EAAqCC,aAArC;EACA,SAAKxnG,GAAL,CAAS2yD,IAAT;EACD;;EACDkM,EAAAA,OAAO,CAACriD,UAAD,EAAa;EAClB,QAAIy6B,IAAI,GAAG,KAAKiwD,QAAL,CAAc1qF,UAAd,CAAX;;EACA,QAAIy6B,IAAI,KAAK,IAAb,EAAmB;EACjBA,MAAAA,IAAI,GAAG,IAAIqlB,MAAJ,CAAS9/C,UAAT,CAAP;EACA,WAAKxc,GAAL,CAASi3C,IAAT;EACD;;EACD,WAAOA,IAAP;EACD;;EA3BqD;;ECIzC,MAAMwwD,UAAN,CAAiB;EAC9BxvG,EAAAA,WAAW,GAAG;EACZwvG,IAAAA,UAAU,CAACnsG,YAAX,CAAwBC,KAAxB,CAA8B,IAA9B,EAAoCC,SAApC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKqxD,MAAL,GAAc,IAAIw6C,cAAJ,EAAd;EACA,SAAKO,kBAAL,GAA0B,IAA1B;EACA,SAAKpxF,QAAL,GAAgB,IAAhB;EACA,SAAKqxF,YAAL,GAAoB,IAApB;EACD;;EACDC,EAAAA,mCAAmC,GAAG;EACpC,SAAK,IAAIhvG,CAAC,GAAG,KAAK+zD,MAAL,CAAYiW,QAAZ,GAAuBziE,QAAvB,EAAb,EAAgDvH,CAAC,CAACmJ,OAAF,EAAhD,GAA+D;EAC7D,YAAMk1C,IAAI,GAAGr+C,CAAC,CAACkJ,IAAF,EAAb;;EACA,UAAI,CAACm1C,IAAI,CAACqU,QAAL,EAAL,EAAsB;EACpB3vD,QAAAA,MAAM,CAACE,MAAP,CAAco7C,IAAI,CAACo+C,SAAL,OAAqB,CAAnC;EACA,aAAKwS,0BAAL,CAAgC5wD,IAAhC;EACAA,QAAAA,IAAI,CAACotD,SAAL,CAAe,IAAf;EACD;EACF;EACF;;EACDyD,EAAAA,kCAAkC,GAAG;EACnC,SAAK,IAAIlvG,CAAC,GAAG,KAAK+zD,MAAL,CAAYiW,QAAZ,GAAuBziE,QAAvB,EAAb,EAAgDvH,CAAC,CAACmJ,OAAF,EAAhD,GAA+D;EAC7D,YAAMk1C,IAAI,GAAGr+C,CAAC,CAACkJ,IAAF,EAAb;;EACA,UAAIm1C,IAAI,CAACo+C,SAAL,OAAqB,CAAzB,EAA4B;EAC1B,aAAKwS,0BAAL,CAAgC5wD,IAAhC;EACAA,QAAAA,IAAI,CAACotD,SAAL,CAAe,IAAf;EACD;EACF;EACF;;EACD0D,EAAAA,oCAAoC,GAAG;EACrC,SAAKD,kCAAL;EACD;;EACDE,EAAAA,oBAAoB,GAAG;EACrB,SAAKn0C,KAAL;EACA,WAAO,KAAK6zC,kBAAZ;EACD;;EACDG,EAAAA,0BAA0B,CAAC5wD,IAAD,EAAO;EAC/B,SAAK,IAAIr+C,CAAC,GAAGq+C,IAAI,CAACouD,WAAL,GAAmBllG,QAAnB,EAAb,EAA4CvH,CAAC,CAACmJ,OAAF,EAA5C,GAA2D;EACzD,YAAMgiG,YAAY,GAAGnrG,CAAC,CAACkJ,IAAF,EAArB;EACA,UAAIiiG,YAAY,CAACnnC,OAAb,GAAuBtR,QAAvB,EAAJ,EACE;;EAEF,WAAKq8C,YAAL,CAAkB3nG,GAAlB,CAAsB,KAAKioG,2BAAL,CAAiClE,YAAjC,CAAtB;EACD;EACF;;EACDlwC,EAAAA,KAAK,GAAG;EACN,QAAI,KAAK6zC,kBAAL,KAA4B,IAAhC,EACE,OAAO,IAAP;EAEF5tC,IAAAA,gBAAc,CAACuqC,SAAf,CAAyB,KAAK13C,MAAL,CAAYm6C,YAAZ,EAAzB,EAAqD,KAArD;EACAhtC,IAAAA,gBAAc,CAACuqC,SAAf,CAAyB,KAAK13C,MAAL,CAAYq6C,YAAZ,EAAzB,EAAqD,KAArD;EACA,SAAKW,YAAL,GAAoB,IAAI/mG,SAAJ,EAApB;EACA,SAAKmnG,oCAAL;EACA,SAAKG,gCAAL;EACA,SAAKR,kBAAL,GAA0B,IAAI9mG,SAAJ,EAA1B;;EACA,SAAK,IAAIhI,CAAC,GAAG,KAAK+uG,YAAL,CAAkBxnG,QAAlB,EAAb,EAA2CvH,CAAC,CAACmJ,OAAF,EAA3C,GAA0D;EACxD,YAAMomG,UAAU,GAAGvvG,CAAC,CAACkJ,IAAF,EAAnB;;EACA,WAAK4lG,kBAAL,CAAwB1nG,GAAxB,CAA4BmoG,UAAU,CAAC11E,YAAX,EAA5B;EACD;EACF;;EACDkyC,EAAAA,aAAa,CAAChX,UAAD,EAAa;EACxB,QAAI,KAAKr3C,QAAL,KAAkB,IAAtB,EACE,KAAKA,QAAL,GAAgBq3C,UAAU,CAACt3C,UAAX,EAAhB;;EAEF,SAAKs2C,MAAL,CAAYV,OAAZ,CAAoB0B,UAApB;EACD;;EACDs6C,EAAAA,2BAA2B,CAAChlG,KAAD,EAAQ;EACjC,UAAMklG,UAAU,GAAG,IAAIzE,UAAJ,CAAe,KAAKptF,QAApB,CAAnB;EACA,QAAIqR,OAAO,GAAG1kB,KAAd;;EACA,OAAG;EACDklG,MAAAA,UAAU,CAACnoG,GAAX,CAAe2nB,OAAf;EACAA,MAAAA,OAAO,CAACi1C,OAAR,GAAkBynC,SAAlB,CAA4B,IAA5B;EACA18E,MAAAA,OAAO,GAAGA,OAAO,CAACg4C,OAAR,EAAV;EACD,KAJD,QAISh4C,OAAO,KAAK,IAAZ,IAAoBA,OAAO,KAAK1kB,KAJzC;;EAKA,WAAOklG,UAAP;EACD;;EACDnoG,EAAAA,GAAG,GAAG;EACJ,QAAIxE,SAAS,CAAC,CAAD,CAAT,YAAwBya,QAA5B,EAAsC;EACpC,YAAM0Z,QAAQ,GAAGn0B,SAAS,CAAC,CAAD,CAA1B;;EACA,WAAK,IAAI5C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG+2B,QAAQ,CAACzY,gBAAT,EAApB,EAAiDte,CAAC,EAAlD,EAAsD;EACpD,cAAM80D,SAAS,GAAG/9B,QAAQ,CAACpZ,YAAT,CAAsB3d,CAAtB,CAAlB;EACA,YAAI80D,SAAS,YAAY9vC,UAAzB,EACE,KAAK+mD,aAAL,CAAmBjX,SAAnB;EAEH;EAEF,KATD,MASO,IAAIvrD,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAeuE,UAAf,CAAhB,EAA4C;EACjD,YAAMsZ,UAAU,GAAG7d,SAAS,CAAC,CAAD,CAA5B;EACA,WAAKksG,kBAAL,GAA0B,IAA1B;;EACA,WAAK,IAAI9uG,CAAC,GAAGygB,UAAU,CAAClZ,QAAX,EAAb,EAAoCvH,CAAC,CAACmJ,OAAF,EAApC,GAAmD;EACjD,cAAM4tB,QAAQ,GAAG/2B,CAAC,CAACkJ,IAAF,EAAjB;EACA,aAAK9B,GAAL,CAAS2vB,QAAT;EACD;EACF;EACF;;EACDu4E,EAAAA,gCAAgC,GAAG;EACjC,SAAKN,mCAAL;EACD;;EAjG6B;;ECNjB,MAAMQ,QAAN,CAAe;EAC5BnwG,EAAAA,WAAW,GAAG;EACZmwG,IAAAA,QAAQ,CAAC9sG,YAAT,CAAsBC,KAAtB,CAA4B,IAA5B,EAAkCC,SAAlC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK+sG,YAAL,GAAoB,IAApB;EACA,SAAK7rC,MAAL,GAAc,IAAIj1C,OAAJ,EAAd;EACA,SAAKo/E,SAAL,GAAiB,IAAI/lG,SAAJ,EAAjB;EACA,SAAKo2D,QAAL,GAAgB,IAAIuG,SAAJ,EAAhB;EACA,UAAM+qC,WAAW,GAAG9sG,SAAS,CAAC,CAAD,CAA7B;EACA,SAAK6sG,YAAL,GAAoBC,WAApB;EACD;;EACDvB,EAAAA,eAAe,GAAG;EAChB,WAAO,KAAKJ,SAAL,CAAexmG,QAAf,EAAP;EACD;;EACD6mG,EAAAA,YAAY,GAAG;EACb,WAAO,KAAKxqC,MAAL,CAAYr8D,QAAZ,EAAP;EACD;;EACDooG,EAAAA,SAAS,GAAG;EACV,WAAO,KAAKF,YAAZ;EACD;;EACDvB,EAAAA,YAAY,GAAG;EACb,WAAO,KAAK9vC,QAAL,CAAc72D,QAAd,EAAP;EACD;;EACD+G,EAAAA,QAAQ,CAACjJ,CAAD,EAAI;EACV,WAAO,KAAKu+D,MAAL,CAAYt1D,QAAZ,CAAqBjJ,CAArB,CAAP;EACD;;EACD+B,EAAAA,GAAG,CAAC/B,CAAD,EAAI;EACL,QAAI,KAAKu+D,MAAL,CAAYt1D,QAAZ,CAAqBjJ,CAArB,CAAJ,EAA6B,OAAO,IAAP;;EAC7B,SAAKu+D,MAAL,CAAYx8D,GAAZ,CAAgB/B,CAAhB;;EACA,SAAK0oG,SAAL,CAAe3mG,GAAf,CAAmB/B,CAAC,CAACwnG,UAAF,CAAa,CAAb,CAAnB;;EACA,SAAKkB,SAAL,CAAe3mG,GAAf,CAAmB/B,CAAC,CAACwnG,UAAF,CAAa,CAAb,CAAnB;;EACA,SAAKzuC,QAAL,CAAch3D,GAAd,CAAkB/B,CAAC,CAACwnG,UAAF,CAAa,CAAb,EAAgBR,WAAhB,EAAlB;;EACA,SAAKjuC,QAAL,CAAch3D,GAAd,CAAkB/B,CAAC,CAACwnG,UAAF,CAAa,CAAb,EAAgBR,WAAhB,EAAlB;EACD;;EAlC2B;;ECCf,MAAMuD,uBAAN,CAA8B;EAC3CvwG,EAAAA,WAAW,GAAG;EACZuwG,IAAAA,uBAAuB,CAACltG,YAAxB,CAAqCC,KAArC,CAA2C,IAA3C,EAAiDC,SAAjD;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKqxD,MAAL,GAAc,IAAd;EACA,UAAM6zB,KAAK,GAAGhlF,SAAS,CAAC,CAAD,CAAvB;EACA,SAAKmxD,MAAL,GAAc6zB,KAAd;EACD;;EACD8E,EAAAA,YAAY,CAACI,SAAD,EAAYoU,QAAZ,EAAsB;EAChC,UAAMhU,SAAS,GAAG,IAAI1pC,KAAJ,EAAlB;EACA0pC,IAAAA,SAAS,CAAC9lF,GAAV,CAAc0lF,SAAd;;EACA,WAAO,CAACI,SAAS,CAACvpC,KAAV,EAAR,EAA2B;EACzB,YAAMtF,IAAI,GAAG6uC,SAAS,CAACzpC,GAAV,EAAb;EACA,WAAKoW,QAAL,CAAcxb,IAAd,EAAoB6uC,SAApB,EAA+BgU,QAA/B;EACD;EACF;;EACD2O,EAAAA,YAAY,CAACxxD,IAAD,EAAO;EACjB,UAAM6iD,QAAQ,GAAG,IAAIsO,QAAJ,CAAa,KAAKz7C,MAAlB,CAAjB;EACA,SAAK24B,YAAL,CAAkBruC,IAAlB,EAAwB6iD,QAAxB;EACA,WAAOA,QAAP;EACD;;EACD4O,EAAAA,qBAAqB,GAAG;EACtB,UAAM5W,SAAS,GAAG,IAAIlxF,SAAJ,EAAlB;EACAk5D,IAAAA,gBAAc,CAACK,UAAf,CAA0B,KAAKxN,MAAL,CAAYm6C,YAAZ,EAA1B,EAAsD,KAAtD;;EACA,SAAK,IAAIluG,CAAC,GAAG,KAAK+zD,MAAL,CAAYq6C,YAAZ,EAAb,EAAyCpuG,CAAC,CAACmJ,OAAF,EAAzC,GAAwD;EACtD,YAAM9D,CAAC,GAAGrF,CAAC,CAACkJ,IAAF,EAAV;EACA,YAAMm1C,IAAI,GAAGh5C,CAAC,CAACwnG,UAAF,CAAa,CAAb,EAAgBR,WAAhB,EAAb;EACA,UAAI,CAAChuD,IAAI,CAACmjB,SAAL,EAAL,EACE03B,SAAS,CAAC9xF,GAAV,CAAc,KAAKyoG,YAAL,CAAkBxxD,IAAlB,CAAd;EAEH;;EACD,WAAO66C,SAAP;EACD;;EACDr/B,EAAAA,QAAQ,CAACxb,IAAD,EAAO6uC,SAAP,EAAkBgU,QAAlB,EAA4B;EAClC7iD,IAAAA,IAAI,CAACkjB,UAAL,CAAgB,IAAhB;;EACA,SAAK,IAAIvhE,CAAC,GAAGq+C,IAAI,CAACouD,WAAL,GAAmBllG,QAAnB,EAAb,EAA4CvH,CAAC,CAACmJ,OAAF,EAA5C,GAA2D;EACzD,YAAM46D,EAAE,GAAG/jE,CAAC,CAACkJ,IAAF,EAAX;EACAg4F,MAAAA,QAAQ,CAAC95F,GAAT,CAAa28D,EAAE,CAACC,OAAH,EAAb;EACA,YAAM+rC,MAAM,GAAGhsC,EAAE,CAACwoC,SAAH,EAAf;EACA,UAAI,CAACwD,MAAM,CAACvuC,SAAP,EAAL,EAAyB0rB,SAAS,CAAC/kF,IAAV,CAAe4nG,MAAf;EAC1B;EACF;;EA1C0C;;ECY9B,MAAMC,aAAN,CAAoB;EACjC3wG,EAAAA,WAAW,GAAG;EACZ2wG,IAAAA,aAAa,CAACttG,YAAd,CAA2BC,KAA3B,CAAiC,IAAjC,EAAuCC,SAAvC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKqxD,MAAL,GAAc,IAAIw6C,cAAJ,EAAd;EACA,SAAK7wF,QAAL,GAAgB,IAAI2T,eAAJ,EAAhB;EACA,SAAK4+E,UAAL,GAAkB,CAAlB;EACA,SAAKC,MAAL,GAAc,KAAd;EACA,SAAKC,kBAAL,GAA0B,IAA1B;EACA,SAAKC,eAAL,GAAuB,KAAvB;EACD;;EACD,SAAOC,2BAAP,CAAmChyD,IAAnC,EAAyC;EACvC,QAAIiyD,cAAc,GAAG,IAArB;EACA,QAAIC,WAAW,GAAG,IAAlB;;EACA,SAAK,IAAIvwG,CAAC,GAAGq+C,IAAI,CAACouD,WAAL,GAAmBllG,QAAnB,EAAb,EAA4CvH,CAAC,CAACmJ,OAAF,EAA5C,GAA2D;EACzD,YAAM46D,EAAE,GAAG/jE,CAAC,CAACkJ,IAAF,EAAX;;EACA,UAAI,CAAC66D,EAAE,CAACC,OAAH,GAAaxC,SAAb,EAAL,EAA+B;EAC7B+uC,QAAAA,WAAW,GAAGxsC,EAAd;EACA,YAAIA,EAAE,CAACqnC,gBAAH,EAAJ,EAA2BkF,cAAc,GAAGvsC,EAAjB;EAC5B;EACF;;EACD,QAAIusC,cAAc,KAAK,IAAvB,EAA6B,OAAOA,cAAP;EAC7B,WAAOC,WAAP;EACD;;EACD,SAAOC,oBAAP,CAA4B5oB,KAA5B,EAAmC;EACjC,QAAI6oB,SAAS,GAAG5hG,OAAO,CAACnO,SAAxB;EACA,QAAIgwG,aAAa,GAAG,IAApB;;EACA,SAAK,IAAI1wG,CAAC,GAAG4nF,KAAK,CAACsmB,YAAN,EAAb,EAAmCluG,CAAC,CAACmJ,OAAF,EAAnC,GAAkD;EAChD,YAAMk1C,IAAI,GAAGr+C,CAAC,CAACkJ,IAAF,EAAb;;EACA,UAAIwnG,aAAa,KAAK,IAAlB,IAA0BryD,IAAI,CAACo+C,SAAL,KAAmBgU,SAAjD,EAA4D;EAC1DA,QAAAA,SAAS,GAAGpyD,IAAI,CAACo+C,SAAL,EAAZ;EACAiU,QAAAA,aAAa,GAAGryD,IAAhB;EACD;EACF;;EACD,WAAOqyD,aAAP;EACD;;EACD,SAAOC,WAAP,CAAmBvzF,IAAnB,EAAyB;EACvB,QAAI,EAAEA,IAAI,YAAY+T,eAAlB,CAAJ,EACE,OAAO,IAAP;EAEF,UAAMy/E,GAAG,GAAGxzF,IAAZ;EACA,UAAMyzF,iBAAiB,GAAG,IAAIjnF,OAAJ,EAA1B;EACA,QAAIsuD,QAAQ,GAAG,IAAf;EACA,UAAM44B,SAAS,GAAG,IAAI9oG,SAAJ,EAAlB;;EACA,SAAK,IAAIhI,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG4wG,GAAG,CAACtyF,gBAAJ,EAApB,EAA4Cte,CAAC,EAA7C,EAAiD;EAC/C,YAAM6c,IAAI,GAAG+zF,GAAG,CAACjzF,YAAJ,CAAiB3d,CAAjB,CAAb;EACA,YAAM8sF,SAAS,GAAGjwE,IAAI,CAAC0I,cAAL,CAAoB,CAApB,CAAlB;EACA,YAAMmpF,OAAO,GAAG7xF,IAAI,CAAC0I,cAAL,CAAoB1I,IAAI,CAAC2I,YAAL,KAAsB,CAA1C,CAAhB;EACA,UAAIqrF,iBAAiB,CAACviG,QAAlB,CAA2Bw+E,SAA3B,CAAJ,EAA2C,OAAO,KAAP;EAC3C,UAAI+jB,iBAAiB,CAACviG,QAAlB,CAA2BogG,OAA3B,CAAJ,EAAyC,OAAO,KAAP;EACzC,UAAIx2B,QAAQ,KAAK,IAAjB,EACE,IAAI,CAAC4U,SAAS,CAAC3pF,MAAV,CAAiB+0E,QAAjB,CAAL,EAAiC;EAC/B24B,QAAAA,iBAAiB,CAACxpG,MAAlB,CAAyBypG,SAAzB;EACAA,QAAAA,SAAS,CAACzoG,KAAV;EACD;EAEHyoG,MAAAA,SAAS,CAAC1pG,GAAV,CAAc0lF,SAAd;EACAgkB,MAAAA,SAAS,CAAC1pG,GAAV,CAAcsnG,OAAd;EACAx2B,MAAAA,QAAQ,GAAGw2B,OAAX;EACD;;EACD,WAAO,IAAP;EACD;;EACD,SAAOvvF,OAAP,CAAetC,IAAf,EAAqB;EACnB,UAAMhT,GAAG,GAAGgT,IAAI,CAACuI,cAAL,EAAZ;EACA,UAAM2rF,MAAM,GAAG,IAAIjnG,KAAJ,CAAUD,GAAG,CAAChH,MAAd,EAAsBkH,IAAtB,CAA2B,IAA3B,CAAf;EACA,UAAMlB,GAAG,GAAGgB,GAAG,CAAChH,MAAhB;;EACA,SAAK,IAAI7C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6I,GAApB,EAAyB7I,CAAC,EAA1B,EACE+wG,MAAM,CAACloG,GAAG,GAAG,CAAN,GAAU7I,CAAX,CAAN,GAAsB,IAAI0D,UAAJ,CAAemG,GAAG,CAAC7J,CAAD,CAAlB,CAAtB;;EAEF,WAAO6c,IAAI,CAACY,UAAL,GAAkBgI,gBAAlB,CAAmCsrF,MAAnC,CAAP;EACD;;EACD,SAAOC,QAAP,CAAgB5zF,IAAhB,EAAsB;EACpB,UAAM6zF,SAAS,GAAG,IAAIjB,aAAJ,EAAlB;EACAiB,IAAAA,SAAS,CAAC7pG,GAAV,CAAcgW,IAAd;EACA,WAAO6zF,SAAS,CAACC,uBAAV,EAAP;EACD;;EACDrxD,EAAAA,OAAO,CAACkV,UAAD,EAAa;EAClB,QAAI,KAAKr3C,QAAL,KAAkB,IAAtB,EACE,KAAKA,QAAL,GAAgBq3C,UAAU,CAACt3C,UAAX,EAAhB;;EAEF,SAAKs2C,MAAL,CAAYV,OAAZ,CAAoB0B,UAApB;;EACA,SAAKk7C,UAAL;EACD;;EACDkB,EAAAA,WAAW,CAACvpB,KAAD,EAAQ;EACjB,QAAIwpB,cAAc,GAAG,CAArB;;EACA,SAAK,IAAIpxG,CAAC,GAAG4nF,KAAK,CAACsmB,YAAN,EAAb,EAAmCluG,CAAC,CAACmJ,OAAF,EAAnC,GAAkD;EAChD,YAAMk1C,IAAI,GAAGr+C,CAAC,CAACkJ,IAAF,EAAb;EACA,UAAIm1C,IAAI,CAACo+C,SAAL,KAAmB,CAAnB,KAAyB,CAA7B,EAAgC2U,cAAc;EAC/C;;EACD,WAAOA,cAAc,IAAI,CAAzB;EACD;;EACDC,EAAAA,eAAe,GAAG;EAChB,QAAI,KAAKnB,MAAT,EACE,OAAO,IAAP;EAEF,SAAKA,MAAL,GAAc,IAAd;EACA,UAAMoB,SAAS,GAAG,KAAKC,aAAL,EAAlB;EACA,QAAID,SAAS,KAAK,IAAlB,EAAwB,OAAO,IAAP;EACxB,SAAKnB,kBAAL,GAA0B,KAAKqB,sBAAL,CAA4BF,SAA5B,CAA1B;EACA,SAAKlB,eAAL,GAAuB,IAAvB;;EACA,UAAMqB,cAAc,GAAG,KAAKtB,kBAAL,CAAwB7xF,gBAAxB,EAAvB;;EACAvb,IAAAA,MAAM,CAACE,MAAP,CAAc,KAAKgtG,UAAL,KAAoBwB,cAAlC,EAAkD,gCAAlD;EACA1uG,IAAAA,MAAM,CAACE,MAAP,CAAc,KAAKktG,kBAAL,YAAmCnrF,UAAnC,IAAiD,KAAKmrF,kBAAL,YAAmCh/E,eAAlG,EAAmH,sBAAnH;EACD;;EACDogF,EAAAA,aAAa,GAAG;EACd,UAAMD,SAAS,GAAG,IAAItpG,SAAJ,EAAlB;EACA,UAAM0pG,QAAQ,GAAG,IAAI9B,uBAAJ,CAA4B,KAAK77C,MAAjC,CAAjB;EACA,UAAMmlC,SAAS,GAAGwY,QAAQ,CAAC5B,qBAAT,EAAlB;;EACA,SAAK,IAAI9vG,CAAC,GAAGk5F,SAAS,CAAC3xF,QAAV,EAAb,EAAmCvH,CAAC,CAACmJ,OAAF,EAAnC,GAAkD;EAChD,YAAM+3F,QAAQ,GAAGlhG,CAAC,CAACkJ,IAAF,EAAjB;;EACA,UAAI,KAAKioG,WAAL,CAAiBjQ,QAAjB,CAAJ,EAAgC;EAC9B,cAAMt2F,GAAG,GAAG,KAAK+mG,YAAL,CAAkBzQ,QAAlB,CAAZ;EACAoQ,QAAAA,SAAS,CAAClqG,GAAV,CAAcwD,GAAd;EACD,OAHD,MAGO;EACL,eAAO,IAAP;EACD;EACF;;EACD,WAAO0mG,SAAP;EACD;;EACDM,EAAAA,iBAAiB,CAAC7tC,EAAD,EAAK8tC,GAAL,EAAUC,cAAV,EAA0B;EACzC,UAAMpD,OAAO,GAAG3qC,EAAE,CAACwoC,SAAH,EAAhB;EACA,QAAIO,QAAQ,GAAG,IAAf;;EACA,WAAO,IAAP,EAAa;EACX+E,MAAAA,GAAG,CAACzqG,GAAJ,CAAQ28D,EAAE,CAAC6D,MAAH,EAAR;EACA7D,MAAAA,EAAE,CAACC,OAAH,GAAazC,UAAb,CAAwB,IAAxB;EACAurC,MAAAA,QAAQ,GAAG/oC,EAAE,CAACsoC,WAAH,EAAX;EACA,YAAM0F,cAAc,GAAG/B,aAAa,CAACK,2BAAd,CAA0CvD,QAA1C,CAAvB;EACA,UAAIiF,cAAc,KAAK,IAAvB,EAA6B;EAC7BhuC,MAAAA,EAAE,GAAGguC,cAAc,CAACnqC,MAAf,EAAL;EACD;;EACD,QAAIkqC,cAAJ,EACE/uG,MAAM,CAACE,MAAP,CAAc6pG,QAAQ,KAAK4B,OAA3B,EAAoC,qBAApC;EAEH;;EACDiD,EAAAA,YAAY,CAAC/pB,KAAD,EAAQ;EAClB1mB,IAAAA,gBAAc,CAACK,UAAf,CAA0BqmB,KAAK,CAACwmB,YAAN,EAA1B,EAAgD,KAAhD;EACA,UAAMthB,SAAS,GAAGkjB,aAAa,CAACQ,oBAAd,CAAmC5oB,KAAnC,CAAlB;EACA,UAAMoqB,OAAO,GAAGllB,SAAS,CAAC2f,WAAV,GAAwBllG,QAAxB,GAAmC2B,IAAnC,EAAhB;EACA,UAAM+oG,UAAU,GAAGD,OAAO,CAACpqC,MAAR,EAAnB;EACA,UAAMh9D,GAAG,GAAG,IAAI8gF,UAAJ,EAAZ;EACA,UAAMmmB,GAAG,GAAGjnG,GAAG,CAACsnG,YAAJ,EAAZ;EACA,SAAKN,iBAAL,CAAuBK,UAAvB,EAAmCJ,GAAnC,EAAwC,KAAxC;;EACA,WAAOA,GAAG,CAACM,WAAJ,EAAP,EAA0B;EACxB,YAAM/nG,IAAI,GAAGynG,GAAG,CAACO,QAAJ,EAAb;EACA,YAAML,cAAc,GAAG/B,aAAa,CAACK,2BAAd,CAA0CjmG,IAAI,CAACiiG,WAAL,EAA1C,CAAvB;EACA,UAAI0F,cAAc,KAAK,IAAvB,EAA6B,KAAKH,iBAAL,CAAuBG,cAAc,CAACnqC,MAAf,EAAvB,EAAgDiqC,GAAhD,EAAqD,IAArD;EAC9B;;EACD,UAAMQ,WAAW,GAAG,KAAKjzD,MAAL,CAAYx0C,GAAZ,CAApB;EACA,WAAOynG,WAAP;EACD;;EACDlzF,EAAAA,OAAO,CAACvU,GAAD,EAAM;EACX,UAAM0nG,MAAM,GAAG,IAAI5mB,UAAJ,EAAf;;EACA,SAAK,IAAI1rF,CAAC,GAAG4K,GAAG,CAACrD,QAAJ,EAAb,EAA6BvH,CAAC,CAACmJ,OAAF,EAA7B,GAA4C;EAC1C,YAAM46D,EAAE,GAAG/jE,CAAC,CAACkJ,IAAF,EAAX;EACAopG,MAAAA,MAAM,CAACC,QAAP,CAAgBxuC,EAAE,CAAC6D,MAAH,EAAhB;EACD;;EACD,WAAO0qC,MAAP;EACD;;EACDlzD,EAAAA,MAAM,CAACx0C,GAAD,EAAM;EACV,UAAMyhF,SAAS,GAAGzhF,GAAG,CAAC/C,GAAJ,CAAQ,CAAR,CAAlB;EACA,UAAM2qG,OAAO,GAAG5nG,GAAG,CAAC/C,GAAJ,CAAQ+C,GAAG,CAACpD,IAAJ,KAAa,CAArB,CAAhB;EACA,UAAMslF,SAAS,GAAGT,SAAS,CAACggB,WAAV,EAAlB;EACA,UAAMqC,OAAO,GAAG8D,OAAO,CAACjG,SAAR,EAAhB;EACA,QAAIkG,OAAO,GAAG,KAAd;EACA,UAAMC,cAAc,GAAG5lB,SAAS,CAAC2P,SAAV,OAA0B,CAA1B,IAA+BiS,OAAO,CAACjS,SAAR,OAAwB,CAA9E;;EACA,QAAIiW,cAAJ,EAAoB;EAClB,UAAIC,mBAAmB,GAAG,KAA1B;;EACA,UAAIH,OAAO,CAACjG,SAAR,GAAoB9P,SAApB,OAAoC,CAApC,IAAyC+V,OAAO,CAACpH,gBAAR,OAA+B,KAA5E,EAAmF;EACjFuH,QAAAA,mBAAmB,GAAG,IAAtB;EACAF,QAAAA,OAAO,GAAG,IAAV;EACD;;EACD,UAAIpmB,SAAS,CAACggB,WAAV,GAAwB5P,SAAxB,OAAwC,CAAxC,IAA6CpQ,SAAS,CAAC+e,gBAAV,OAAiC,IAAlF,EAAwF;EACtFuH,QAAAA,mBAAmB,GAAG,IAAtB;EACAF,QAAAA,OAAO,GAAG,KAAV;EACD;;EACD,UAAI,CAACE,mBAAL,EACE,IAAItmB,SAAS,CAACggB,WAAV,GAAwB5P,SAAxB,OAAwC,CAA5C,EAA+CgW,OAAO,GAAG,IAAV;EAElD;;EACD,QAAIA,OAAJ,EAAa,OAAO,KAAKtzF,OAAL,CAAavU,GAAb,CAAP;EACb,WAAOA,GAAP;EACD;;EACD4mG,EAAAA,sBAAsB,CAACF,SAAD,EAAY;EAChC,UAAMn9D,KAAK,GAAG,IAAInsC,SAAJ,EAAd;;EACA,SAAK,IAAIolB,EAAE,GAAGkkF,SAAS,CAAC/pG,QAAV,EAAd,EAAoC6lB,EAAE,CAACjkB,OAAH,EAApC,GAAoD;EAClD,YAAMyB,GAAG,GAAGwiB,EAAE,CAAClkB,IAAH,EAAZ;;EACA,WAAK,IAAImkB,EAAE,GAAGziB,GAAG,CAACrD,QAAJ,EAAd,EAA8B8lB,EAAE,CAAClkB,OAAH,EAA9B,GAA8C;EAC5C,cAAM46D,EAAE,GAAG12C,EAAE,CAACnkB,IAAH,EAAX;EACA,cAAM7D,CAAC,GAAG0+D,EAAE,CAACC,OAAH,EAAV;EACA,cAAMnnD,IAAI,GAAGxX,CAAC,CAACgmG,OAAF,EAAb;EACA,YAAIuH,SAAS,GAAG/1F,IAAhB;EACA,YAAI,CAACknD,EAAE,CAACqnC,gBAAH,EAAD,IAA0B,CAACvuF,IAAI,CAAC8G,QAAL,EAA/B,EAAgDivF,SAAS,GAAG5C,aAAa,CAAC7wF,OAAd,CAAsBtC,IAAtB,CAAZ;EAChDs3B,QAAAA,KAAK,CAAC/sC,GAAN,CAAUwrG,SAAV;EACD;EACF;;EACD,QAAIz+D,KAAK,CAAC3sC,IAAN,OAAiB,CAArB,EAAwB,OAAO,KAAKkW,QAAL,CAAc8L,qBAAd,CAAoC,IAAI1f,KAAJ,CAAU,CAAV,EAAaC,IAAb,CAAkB,IAAlB,CAApC,CAAP;EACxB,WAAO,KAAK2T,QAAL,CAAcwM,aAAd,CAA4BiqB,KAA5B,CAAP;EACD;;EACD+8D,EAAAA,uBAAuB,GAAG;EACxB,SAAKG,eAAL;EACA,WAAO,KAAKlB,kBAAZ;EACD;;EACD0C,EAAAA,cAAc,GAAG;EACf,SAAKxB,eAAL;EACA,WAAO,KAAKjB,eAAZ;EACD;;EACDhpG,EAAAA,GAAG,GAAG;EACJ,QAAImC,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAeuE,UAAf,CAAhB,EAA4C;EAC1C,YAAMsZ,UAAU,GAAG7d,SAAS,CAAC,CAAD,CAA5B;;EACA,WAAK,IAAI5C,CAAC,GAAGygB,UAAU,CAAClZ,QAAX,EAAb,EAAoCvH,CAAC,CAACmJ,OAAF,EAApC,GAAmD;EACjD,cAAM4tB,QAAQ,GAAG/2B,CAAC,CAACkJ,IAAF,EAAjB;EACA,aAAK9B,GAAL,CAAS2vB,QAAT;EACD;EACF,KAND,MAMO,IAAIn0B,SAAS,CAAC,CAAD,CAAT,YAAwBya,QAA5B,EAAsC;EAC3C,YAAM0Z,QAAQ,GAAGn0B,SAAS,CAAC,CAAD,CAA1B;EACAm0B,MAAAA,QAAQ,CAACp0B,KAAT,CAAe,IAAK,MAAM;EACxB,YAAIsD,WAAJ,GAAkB;EAChB,iBAAO,CAACkX,uBAAD,CAAP;EACD;;EACDxS,QAAAA,MAAM,CAACmqD,SAAD,EAAY;EAChB,cAAIA,SAAS,YAAY9vC,UAAzB,EACE,KAAK66B,OAAL,CAAaiV,SAAb;EAEH;;EARuB,OAAX,EAAf;EAUD;EACF;;EAnOgC;;;;;;;;ECXpB,MAAMg+C,iBAAN,CAAwB;EACrCzzG,EAAAA,WAAW,GAAG;EACZyzG,IAAAA,iBAAiB,CAACpwG,YAAlB,CAA+BC,KAA/B,CAAqC,IAArC,EAA2CC,SAA3C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKqwG,cAAL,GAAsB,GAAtB;EACA,SAAKC,OAAL,GAAe,IAAf;EACA,SAAK/Z,IAAL,GAAY,IAAIh7D,WAAJ,EAAZ;EACA,SAAKg1E,8BAAL,GAAsC,KAAtC;EACA,SAAKC,SAAL,GAAiB,KAAjB;;EACA,QAAItwG,SAAS,CAAC,CAAD,CAAT,YAAwBoiB,UAAxB,IAAsC,OAAOpiB,SAAS,CAAC,CAAD,CAAhB,KAAwB,QAAlE,EAA4E;EAC1E,YAAMuwG,OAAO,GAAGvwG,SAAS,CAAC,CAAD,CAAzB;EAAA,YAA8BwwG,aAAa,GAAGxwG,SAAS,CAAC,CAAD,CAAvD;EACAkwG,MAAAA,iBAAiB,CAACpwG,YAAlB,CAA+BI,IAA/B,CAAoC,IAApC,EAA0CqwG,OAAO,CAAC/tF,cAAR,EAA1C,EAAoEguF,aAApE;EACD,KAHD,MAGO,IAAIxwG,SAAS,CAAC,CAAD,CAAT,YAAwBkH,KAAxB,IAAiC,OAAOlH,SAAS,CAAC,CAAD,CAAhB,KAAwB,QAA7D,EAAuE;EAC5E,YAAMywG,MAAM,GAAGzwG,SAAS,CAAC,CAAD,CAAxB;EAAA,YAA6BwwG,aAAa,GAAGxwG,SAAS,CAAC,CAAD,CAAtD;EACA,WAAKowG,OAAL,GAAeK,MAAf;EACA,WAAKH,SAAL,GAAiBJ,iBAAiB,CAACnvF,QAAlB,CAA2B0vF,MAA3B,CAAjB;EACA,WAAKN,cAAL,GAAsBK,aAAtB;EACD;EACF;;EACD,SAAOzvF,QAAP,CAAgB9Z,GAAhB,EAAqB;EACnB,QAAIA,GAAG,CAAChH,MAAJ,IAAc,CAAlB,EAAqB,OAAO,KAAP;EACrB,WAAOgH,GAAG,CAAC,CAAD,CAAH,CAAOtF,QAAP,CAAgBsF,GAAG,CAACA,GAAG,CAAChH,MAAJ,GAAa,CAAd,CAAnB,CAAP;EACD;;EACDywG,EAAAA,YAAY,CAACC,SAAD,EAAYrN,OAAZ,EAAqB;EAC/B,UAAM57F,GAAG,GAAG,KAAK4oG,SAAL,GAAiBK,SAAS,CAAC/rG,IAAV,KAAmB,CAApC,GAAwC+rG,SAAS,CAAC/rG,IAAV,EAApD;;EACA,SAAK,IAAIxH,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsK,GAApB,EAAyBtK,CAAC,EAA1B,EAA8B;EAC5B,YAAMwzG,KAAK,GAAGD,SAAS,CAAC1rG,GAAV,CAAc7H,CAAd,CAAd;EACA,YAAMyzG,QAAQ,GAAG,KAAKC,iBAAL,CAAuBF,KAAvB,EAA8BtN,OAA9B,CAAjB;;EACA,UAAIuN,QAAQ,KAAK,IAAjB,EAAuB;EACrBF,QAAAA,SAAS,CAACzrG,GAAV,CAAc9H,CAAd,EAAiB,IAAI0D,UAAJ,CAAe+vG,QAAf,CAAjB;EACA,YAAIzzG,CAAC,KAAK,CAAN,IAAW,KAAKkzG,SAApB,EAA+BK,SAAS,CAACzrG,GAAV,CAAcyrG,SAAS,CAAC/rG,IAAV,KAAmB,CAAjC,EAAoC,IAAI9D,UAAJ,CAAe+vG,QAAf,CAApC;EAChC;EACF;EACF;;EACDC,EAAAA,iBAAiB,CAACztF,EAAD,EAAKigF,OAAL,EAAc;EAC7B,SAAK,IAAIlmG,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkmG,OAAO,CAACrjG,MAA5B,EAAoC7C,CAAC,EAArC,EAAyC;EACvC,UAAIimB,EAAE,CAAC1hB,QAAH,CAAY2hG,OAAO,CAAClmG,CAAD,CAAnB,CAAJ,EAA6B,OAAO,IAAP;EAC7B,UAAIimB,EAAE,CAAClgB,QAAH,CAAYmgG,OAAO,CAAClmG,CAAD,CAAnB,IAA0B,KAAK+yG,cAAnC,EAAmD,OAAO7M,OAAO,CAAClmG,CAAD,CAAd;EACpD;;EACD,WAAO,IAAP;EACD;;EACD2zG,EAAAA,MAAM,CAACzN,OAAD,EAAU;EACd,UAAMz6E,SAAS,GAAG,IAAIriB,cAAJ,CAAmB,KAAK4pG,OAAxB,CAAlB;EACA,SAAKM,YAAL,CAAkB7nF,SAAlB,EAA6By6E,OAA7B;EACA,SAAK0N,YAAL,CAAkBnoF,SAAlB,EAA6By6E,OAA7B;EACA,UAAM72C,MAAM,GAAG5jC,SAAS,CAAC/hB,iBAAV,EAAf;EACA,WAAO2lD,MAAP;EACD;;EACDukD,EAAAA,YAAY,CAACL,SAAD,EAAYrN,OAAZ,EAAqB;EAC/B,QAAIA,OAAO,CAACrjG,MAAR,KAAmB,CAAvB,EAA0B,OAAO,IAAP;EAC1B,QAAIgxG,eAAe,GAAG3N,OAAO,CAACrjG,MAA9B;EACA,QAAIqjG,OAAO,CAAC,CAAD,CAAP,CAAW3hG,QAAX,CAAoB2hG,OAAO,CAACA,OAAO,CAACrjG,MAAR,GAAiB,CAAlB,CAA3B,CAAJ,EAAsDgxG,eAAe,GAAG3N,OAAO,CAACrjG,MAAR,GAAiB,CAAnC;;EACtD,SAAK,IAAI7C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6zG,eAApB,EAAqC7zG,CAAC,EAAtC,EAA0C;EACxC,YAAMmmG,MAAM,GAAGD,OAAO,CAAClmG,CAAD,CAAtB;EACA,YAAMsI,KAAK,GAAG,KAAKwrG,sBAAL,CAA4B3N,MAA5B,EAAoCoN,SAApC,CAAd;EACA,UAAIjrG,KAAK,IAAI,CAAb,EACEirG,SAAS,CAACnsG,GAAV,CAAckB,KAAK,GAAG,CAAtB,EAAyB,IAAI5E,UAAJ,CAAeyiG,MAAf,CAAzB,EAAiD,KAAjD;EAEH;EACF;;EACD2N,EAAAA,sBAAsB,CAAC3N,MAAD,EAASoN,SAAT,EAAoB;EACxC,QAAI32E,OAAO,GAAGz8B,MAAM,CAACO,SAArB;EACA,QAAIqzG,SAAS,GAAG,CAAC,CAAjB;;EACA,SAAK,IAAI/zG,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGuzG,SAAS,CAAC/rG,IAAV,KAAmB,CAAvC,EAA0CxH,CAAC,EAA3C,EAA+C;EAC7C,WAAKi5F,IAAL,CAAUnyE,EAAV,GAAeysF,SAAS,CAAC1rG,GAAV,CAAc7H,CAAd,CAAf;EACA,WAAKi5F,IAAL,CAAU1tF,EAAV,GAAegoG,SAAS,CAAC1rG,GAAV,CAAc7H,CAAC,GAAG,CAAlB,CAAf;EACA,UAAI,KAAKi5F,IAAL,CAAUnyE,EAAV,CAAaviB,QAAb,CAAsB4hG,MAAtB,KAAiC,KAAKlN,IAAL,CAAU1tF,EAAV,CAAahH,QAAb,CAAsB4hG,MAAtB,CAArC,EACE,IAAI,KAAK8M,8BAAT,EAAyC,SAAzC,KAAwD,OAAO,CAAC,CAAR;;EAE1D,YAAMl2F,IAAI,GAAG,KAAKk8E,IAAL,CAAUlzF,QAAV,CAAmBogG,MAAnB,CAAb;;EACA,UAAIppF,IAAI,GAAG,KAAKg2F,cAAZ,IAA8Bh2F,IAAI,GAAG6f,OAAzC,EAAkD;EAChDA,QAAAA,OAAO,GAAG7f,IAAV;EACAg3F,QAAAA,SAAS,GAAG/zG,CAAZ;EACD;EACF;;EACD,WAAO+zG,SAAP;EACD;;EACDC,EAAAA,gCAAgC,CAACC,6BAAD,EAAgC;EAC9D,SAAKhB,8BAAL,GAAsCgB,6BAAtC;EACD;;EAhFoC;;ECExB,MAAMC,eAAN,CAAsB;EACnC70G,EAAAA,WAAW,GAAG;EACZ60G,IAAAA,eAAe,CAACxxG,YAAhB,CAA6BC,KAA7B,CAAmC,IAAnC,EAAyCC,SAAzC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKyxG,QAAL,GAAgB,IAAhB;EACA,UAAMC,OAAO,GAAGxxG,SAAS,CAAC,CAAD,CAAzB;EACA,SAAKuxG,QAAL,GAAgBC,OAAhB;EACD;;EACD,SAAOhQ,IAAP,CAAY/zD,EAAZ,EAAgBC,EAAhB,EAAoB8iE,aAApB,EAAmC;EACjC,UAAMiB,QAAQ,GAAG,IAAIvqG,KAAJ,CAAU,CAAV,EAAaC,IAAb,CAAkB,IAAlB,CAAjB;EACA,UAAMuqG,QAAQ,GAAG,IAAIJ,eAAJ,CAAoB7jE,EAApB,CAAjB;EACAgkE,IAAAA,QAAQ,CAAC,CAAD,CAAR,GAAcC,QAAQ,CAACX,MAAT,CAAgBrjE,EAAhB,EAAoB8iE,aAApB,CAAd;EACA,UAAMmB,QAAQ,GAAG,IAAIL,eAAJ,CAAoB5jE,EAApB,CAAjB;EACA+jE,IAAAA,QAAQ,CAAC,CAAD,CAAR,GAAcE,QAAQ,CAACZ,MAAT,CAAgBU,QAAQ,CAAC,CAAD,CAAxB,EAA6BjB,aAA7B,CAAd;EACA,WAAOiB,QAAP;EACD;;EACD,SAAOG,2BAAP,GAAqC;EACnC,QAAI5xG,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMsb,CAAC,GAAGvb,SAAS,CAAC,CAAD,CAAnB;EACA,UAAIwwG,aAAa,GAAGc,eAAe,CAACO,6BAAhB,CAA8Ct2F,CAA9C,CAApB;EACA,YAAM6R,EAAE,GAAG7R,CAAC,CAACsB,iBAAF,EAAX;;EACA,UAAIuQ,EAAE,CAACU,OAAH,OAAiBlB,cAAc,CAACM,KAApC,EAA2C;EACzC,cAAM4kF,YAAY,GAAG,IAAI1kF,EAAE,CAACO,QAAH,EAAJ,GAAoB,CAApB,GAAwB,KAA7C;EACA,YAAImkF,YAAY,GAAGtB,aAAnB,EAAkCA,aAAa,GAAGsB,YAAhB;EACnC;;EACD,aAAOtB,aAAP;EACD,KATD,MASO,IAAIxwG,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMwtC,EAAE,GAAGztC,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyB0tC,EAAE,GAAG1tC,SAAS,CAAC,CAAD,CAAvC;EACA,aAAO3D,IAAI,CAAC+M,GAAL,CAASkoG,eAAe,CAACM,2BAAhB,CAA4CnkE,EAA5C,CAAT,EAA0D6jE,eAAe,CAACM,2BAAhB,CAA4ClkE,EAA5C,CAA1D,CAAP;EACD;EACF;;EACD,SAAOmkE,6BAAP,CAAqCt2F,CAArC,EAAwC;EACtC,UAAM7S,GAAG,GAAG6S,CAAC,CAACY,mBAAF,EAAZ;EACA,UAAM41F,YAAY,GAAG11G,IAAI,CAAC+M,GAAL,CAASV,GAAG,CAACiB,SAAJ,EAAT,EAA0BjB,GAAG,CAACgB,QAAJ,EAA1B,CAArB;EACA,UAAMsoG,OAAO,GAAGD,YAAY,GAAGT,eAAe,CAACW,qBAA/C;EACA,WAAOD,OAAP;EACD;;EACD,SAAOE,UAAP,CAAkB13F,IAAlB,EAAwBg2F,aAAxB,EAAuC2B,WAAvC,EAAoD;EAClD,UAAMT,QAAQ,GAAG,IAAIJ,eAAJ,CAAoB92F,IAApB,CAAjB;EACA,WAAOk3F,QAAQ,CAACQ,UAAT,CAAoB1B,aAApB,EAAmC2B,WAAnC,CAAP;EACD;;EACDpB,EAAAA,MAAM,CAACU,QAAD,EAAWjB,aAAX,EAA0B;EAC9B,UAAMlN,OAAO,GAAG,KAAK8O,wBAAL,CAA8BX,QAA9B,CAAhB;EACA,UAAMY,SAAS,GAAG,IAAIC,eAAJ,CAAoB9B,aAApB,EAAmClN,OAAnC,CAAlB;EACA,WAAO+O,SAAS,CAACnoE,SAAV,CAAoB,KAAKqnE,QAAzB,CAAP;EACD;;EACDW,EAAAA,UAAU,CAAC1B,aAAD,EAAgB2B,WAAhB,EAA6B;EACrC,UAAM7O,OAAO,GAAG,KAAK8O,wBAAL,CAA8B,KAAKb,QAAnC,CAAhB;EACA,UAAMc,SAAS,GAAG,IAAIC,eAAJ,CAAoB9B,aAApB,EAAmClN,OAAnC,EAA4C,IAA5C,CAAlB;EACA,UAAMiP,WAAW,GAAGF,SAAS,CAACnoE,SAAV,CAAoB,KAAKqnE,QAAzB,CAApB;EACA,QAAIj0G,MAAM,GAAGi1G,WAAb;EACA,QAAIJ,WAAW,IAAIxrG,YAAY,CAACrJ,MAAD,EAASmnB,SAAT,CAA/B,EACEnnB,MAAM,GAAGi1G,WAAW,CAACl0G,MAAZ,CAAmB,CAAnB,CAAT;EAEF,WAAOf,MAAP;EACD;;EACDk1G,EAAAA,oBAAoB,CAACC,OAAD,EAAU;EAC5B,UAAMC,SAAS,GAAG,KAAKC,2BAAL,CAAiCF,OAAjC,CAAlB;EACA,UAAMT,OAAO,GAAGU,SAAS,GAAG,EAA5B;EACA,WAAOV,OAAP;EACD;;EACDI,EAAAA,wBAAwB,CAAC72F,CAAD,EAAI;EAC1B,UAAMq3F,KAAK,GAAG,IAAI5rF,OAAJ,EAAd;EACA,UAAM/f,GAAG,GAAGsU,CAAC,CAACiH,cAAF,EAAZ;;EACA,SAAK,IAAIplB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6J,GAAG,CAAChH,MAAxB,EAAgC7C,CAAC,EAAjC,EACEw1G,KAAK,CAACpuG,GAAN,CAAUyC,GAAG,CAAC7J,CAAD,CAAb;;EAEF,WAAOw1G,KAAK,CAAC/tG,OAAN,CAAc,IAAIqC,KAAJ,CAAU,CAAV,EAAaC,IAAb,CAAkB,IAAlB,CAAd,CAAP;EACD;;EACDwrG,EAAAA,2BAA2B,CAAC1rG,GAAD,EAAM;EAC/B,QAAIyrG,SAAS,GAAGn1G,MAAM,CAACO,SAAvB;;EACA,SAAK,IAAIV,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6J,GAAG,CAAChH,MAAJ,GAAa,CAAjC,EAAoC7C,CAAC,EAArC,EAAyC;EACvC,YAAMy1G,MAAM,GAAG5rG,GAAG,CAAC7J,CAAD,CAAH,CAAO+F,QAAP,CAAgB8D,GAAG,CAAC7J,CAAC,GAAG,CAAL,CAAnB,CAAf;EACA,UAAIy1G,MAAM,GAAGH,SAAb,EAAwBA,SAAS,GAAGG,MAAZ;EACzB;;EACD,WAAOH,SAAP;EACD;;EA7EkC;EA+ErCpB,eAAe,CAACW,qBAAhB,GAAwC,IAAxC;;EACA,MAAMK,eAAN,SAA8BziE,mBAA9B,CAAkD;EAChDpzC,EAAAA,WAAW,GAAG;EACZ;EACA61G,IAAAA,eAAe,CAACxyG,YAAhB,CAA6BC,KAA7B,CAAmC,IAAnC,EAAyCC,SAAzC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKqwG,cAAL,GAAsB,IAAtB;EACA,SAAK2C,QAAL,GAAgB,IAAhB;EACA,SAAKC,WAAL,GAAmB,KAAnB;;EACA,QAAI/yG,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMuwG,aAAa,GAAGxwG,SAAS,CAAC,CAAD,CAA/B;EAAA,YAAoCsjG,OAAO,GAAGtjG,SAAS,CAAC,CAAD,CAAvD;EACA,WAAKmwG,cAAL,GAAsBK,aAAtB;EACA,WAAKsC,QAAL,GAAgBxP,OAAhB;EACD,KAJD,MAIO,IAAItjG,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMuwG,aAAa,GAAGxwG,SAAS,CAAC,CAAD,CAA/B;EAAA,YAAoCsjG,OAAO,GAAGtjG,SAAS,CAAC,CAAD,CAAvD;EAAA,YAA4DgzG,UAAU,GAAGhzG,SAAS,CAAC,CAAD,CAAlF;EACA,WAAKmwG,cAAL,GAAsBK,aAAtB;EACA,WAAKsC,QAAL,GAAgBxP,OAAhB;EACA,WAAKyP,WAAL,GAAmBC,UAAnB;EACD;EACF;;EACDC,EAAAA,QAAQ,CAACxC,MAAD,EAASnN,OAAT,EAAkB;EACxB,UAAM4P,OAAO,GAAG,IAAIhD,iBAAJ,CAAsBO,MAAtB,EAA8B,KAAKN,cAAnC,CAAhB;EACA+C,IAAAA,OAAO,CAAC9B,gCAAR,CAAyC,KAAK2B,WAA9C;EACA,WAAOG,OAAO,CAACnC,MAAR,CAAezN,OAAf,CAAP;EACD;;EACDjzD,EAAAA,oBAAoB,CAAC3D,MAAD,EAAS0D,MAAT,EAAiB;EACnC,UAAMqgE,MAAM,GAAG/jE,MAAM,CAAC5lC,iBAAP,EAAf;EACA,UAAM2lD,MAAM,GAAG,KAAKwmD,QAAL,CAAcxC,MAAd,EAAsB,KAAKqC,QAA3B,CAAf;EACA,WAAO,KAAKh4F,QAAL,CAAcqI,4BAAd,GAA6C9I,MAA7C,CAAoDoyC,MAApD,CAAP;EACD;;EA7B+C;;;;;;;;ECnFnC,MAAM0mD,kBAAN,CAAyB;EACtC12G,EAAAA,WAAW,GAAG;EACZ02G,IAAAA,kBAAkB,CAACrzG,YAAnB,CAAgCC,KAAhC,CAAsC,IAAtC,EAA4CC,SAA5C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKuyC,IAAL,GAAY,IAAZ;EACA,SAAKiqB,KAAL,GAAa,IAAb;EACA,UAAMr1D,GAAG,GAAGjH,SAAS,CAAC,CAAD,CAArB;EAAA,UAA0BkqE,IAAI,GAAGlqE,SAAS,CAAC,CAAD,CAA1C;EACA,SAAKqyC,IAAL,GAAYprC,GAAZ;EACA,SAAKq1D,KAAL,GAAa4N,IAAb;EACD;;EACD1nD,EAAAA,cAAc,GAAG;EACf,WAAO,KAAK6vB,IAAZ;EACD;;EACDztC,EAAAA,IAAI,GAAG;EACL,WAAO,KAAKytC,IAAL,CAAUpyC,MAAjB;EACD;;EACDyG,EAAAA,aAAa,CAACtJ,CAAD,EAAI;EACf,WAAO,KAAKi1C,IAAL,CAAUj1C,CAAV,CAAP;EACD;;EACD2jB,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAKsxB,IAAL,CAAU,CAAV,EAAa9xC,MAAb,CAAoB,KAAK8xC,IAAL,CAAU,KAAKA,IAAL,CAAUpyC,MAAV,GAAmB,CAA7B,CAApB,CAAP;EACD;;EACD29E,EAAAA,gBAAgB,CAACl4E,KAAD,EAAQ;EACtB,QAAIA,KAAK,KAAK,KAAK2sC,IAAL,CAAUpyC,MAAV,GAAmB,CAAjC,EAAoC,OAAO,CAAC,CAAR;EACpC,WAAOo+E,MAAM,CAACnC,MAAP,CAAc,KAAKx1E,aAAL,CAAmBhB,KAAnB,CAAd,EAAyC,KAAKgB,aAAL,CAAmBhB,KAAK,GAAG,CAA3B,CAAzC,CAAP;EACD;;EACD+4E,EAAAA,OAAO,CAACvU,IAAD,EAAO;EACZ,SAAK5N,KAAL,GAAa4N,IAAb;EACD;;EACDI,EAAAA,OAAO,GAAG;EACR,WAAO,KAAKhO,KAAZ;EACD;;EACDx/D,EAAAA,QAAQ,GAAG;EACT,WAAOk6B,SAAS,CAACC,YAAV,CAAuB,IAAIrM,uBAAJ,CAA4B,KAAKynB,IAAjC,CAAvB,CAAP;EACD;;EACD,MAAIhvC,WAAJ,GAAkB;EAChB,WAAO,CAACm7E,aAAD,CAAP;EACD;;EAtCqC;;ECFzB,MAAM40B,wBAAN,CAA+B;EAC5C32G,EAAAA,WAAW,GAAG;EACZ22G,IAAAA,wBAAwB,CAACtzG,YAAzB,CAAsCC,KAAtC,CAA4C,IAA5C,EAAkDC,SAAlD;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKuzG,qBAAL,GAA6B,KAA7B;EACA,SAAKC,uBAAL,GAA+B,KAA/B;EACA,SAAKC,kBAAL,GAA0B,IAA1B;EACA,SAAKC,4BAAL,GAAoC,KAApC;EACA,SAAK9+C,GAAL,GAAW,IAAX;EACA,SAAK++C,qBAAL,GAA6B,IAA7B;EACA,SAAKC,YAAL,GAAoB,IAApB;EACA,SAAKC,cAAL,GAAsB,IAAIvuG,SAAJ,EAAtB;EACA,SAAKwuG,kBAAL,GAA0B,CAA1B;EACA,UAAM93E,EAAE,GAAG97B,SAAS,CAAC,CAAD,CAApB;EACA,SAAK00D,GAAL,GAAW54B,EAAX;EACA,SAAK23E,qBAAL,GAA6B,IAA7B;EACD;;EACD,SAAOI,4BAAP,CAAoC/3E,EAApC,EAAwC;EACtC,UAAM4pB,MAAM,GAAG,IAAI0tD,wBAAJ,CAA6Bt3E,EAA7B,CAAf;EACA4pB,IAAAA,MAAM,CAACouD,uBAAP,CAA+B,IAA/B;EACA,WAAOpuD,MAAP;EACD;;EACD,SAAOquD,4BAAP,GAAsC;EACpC,QAAI/zG,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMikB,EAAE,GAAGlkB,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyB2I,EAAE,GAAG3I,SAAS,CAAC,CAAD,CAAvC;EAAA,YAA4Cg0G,MAAM,GAAGh0G,SAAS,CAAC,CAAD,CAA9D;EAAA,YAAmEi0G,MAAM,GAAGj0G,SAAS,CAAC,CAAD,CAArF;EACA,UAAIg0G,MAAM,IAAIC,MAAd,EAAsB,OAAO,KAAP;EACtB,UAAI/vF,EAAE,CAACviB,QAAH,CAAYgH,EAAZ,CAAJ,EACE,OAAO,IAAP;EAEF,aAAO,KAAP;EACD,KAPD,MAOO,IAAI3I,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMo2D,GAAG,GAAGr2D,SAAS,CAAC,CAAD,CAArB;EAAA,YAA0Bs2D,GAAG,GAAGt2D,SAAS,CAAC,CAAD,CAAzC;EAAA,YAA8Cu2D,GAAG,GAAGv2D,SAAS,CAAC,CAAD,CAA7D;EAAA,YAAkEw2D,GAAG,GAAGx2D,SAAS,CAAC,CAAD,CAAjF;EAAA,YAAsFk0G,OAAO,GAAGl0G,SAAS,CAAC,CAAD,CAAzG;EAAA,YAA8Gm0G,OAAO,GAAGn0G,SAAS,CAAC,CAAD,CAAjI;EAAA,YAAsIo0G,OAAO,GAAGp0G,SAAS,CAAC,CAAD,CAAzJ;EAAA,YAA8Jq0G,OAAO,GAAGr0G,SAAS,CAAC,CAAD,CAAjL;EACA,UAAIozG,wBAAwB,CAACW,4BAAzB,CAAsD19C,GAAtD,EAA2DE,GAA3D,EAAgE29C,OAAhE,EAAyEE,OAAzE,CAAJ,EAAuF,OAAO,IAAP;EACvF,UAAIhB,wBAAwB,CAACW,4BAAzB,CAAsD19C,GAAtD,EAA2DG,GAA3D,EAAgE09C,OAAhE,EAAyEG,OAAzE,CAAJ,EAAuF,OAAO,IAAP;EACvF,UAAIjB,wBAAwB,CAACW,4BAAzB,CAAsDz9C,GAAtD,EAA2DC,GAA3D,EAAgE49C,OAAhE,EAAyEC,OAAzE,CAAJ,EAAuF,OAAO,IAAP;EACvF,UAAIhB,wBAAwB,CAACW,4BAAzB,CAAsDz9C,GAAtD,EAA2DE,GAA3D,EAAgE29C,OAAhE,EAAyEE,OAAzE,CAAJ,EAAuF,OAAO,IAAP;EACvF,aAAO,KAAP;EACD;EACF;;EACD,SAAOC,iCAAP,CAAyCx4E,EAAzC,EAA6C;EAC3C,UAAM4pB,MAAM,GAAG,IAAI0tD,wBAAJ,CAA6Bt3E,EAA7B,CAAf;EACA4pB,IAAAA,MAAM,CAAC6uD,4BAAP,CAAoC,IAApC;EACA7uD,IAAAA,MAAM,CAACouD,uBAAP,CAA+B,IAA/B;EACApuD,IAAAA,MAAM,CAAC8uD,oBAAP,CAA4B,KAA5B;EACA,WAAO9uD,MAAP;EACD;;EACD,SAAO+uD,yBAAP,CAAiC34E,EAAjC,EAAqC;EACnC,UAAM4pB,MAAM,GAAG,IAAI0tD,wBAAJ,CAA6Bt3E,EAA7B,CAAf;EACA4pB,IAAAA,MAAM,CAACouD,uBAAP,CAA+B,IAA/B;EACApuD,IAAAA,MAAM,CAAC8uD,oBAAP,CAA4B,KAA5B;EACA,WAAO9uD,MAAP;EACD;;EACD,SAAOgvD,YAAP,CAAoB7yB,MAApB,EAA4Bn8E,KAA5B,EAAmC;EACjC,QAAIA,KAAK,KAAK,CAAd,EAAiB,OAAO,IAAP;EACjB,QAAIA,KAAK,IAAIm8E,MAAM,CAACj9E,IAAP,KAAgB,CAA7B,EAAgC,OAAO,IAAP;EAChC,WAAO,KAAP;EACD;;EACD,SAAO+vG,2BAAP,CAAmC74E,EAAnC,EAAuC;EACrC,WAAO,IAAIs3E,wBAAJ,CAA6Bt3E,EAA7B,CAAP;EACD;;EACD,SAAO84E,iCAAP,CAAyC94E,EAAzC,EAA6C;EAC3C,UAAM4pB,MAAM,GAAG,IAAI0tD,wBAAJ,CAA6Bt3E,EAA7B,CAAf;EACA4pB,IAAAA,MAAM,CAACouD,uBAAP,CAA+B,IAA/B;EACApuD,IAAAA,MAAM,CAAC6uD,4BAAP,CAAoC,IAApC;EACA,WAAO7uD,MAAP;EACD;;EACDmvD,EAAAA,uBAAuB,CAACC,sBAAD,EAAyB;EAC9C,SAAKxB,uBAAL,GAA+BwB,sBAA/B;EACD;;EACDC,EAAAA,uBAAuB,GAAG;EACxB,WAAO,KAAKrB,YAAZ;EACD;;EACD/5C,EAAAA,KAAK,GAAG;EACN,WAAO,KAAKi6C,kBAAZ;EACD;;EACDoB,EAAAA,gBAAgB,GAAG;EACjB,WAAO,KAAKrB,cAAZ;EACD;;EACDG,EAAAA,uBAAuB,CAACmB,oBAAD,EAAuB;EAC5C,SAAK5B,qBAAL,GAA6B4B,oBAA7B;EACD;;EACDT,EAAAA,oBAAoB,CAACU,iBAAD,EAAoB;EACtC,SAAK3B,kBAAL,GAA0B2B,iBAA1B;EACD;;EACD/7E,EAAAA,eAAe,GAAG;EAChB,WAAO,KAAKs6E,qBAAZ;EACD;;EACDhxB,EAAAA,oBAAoB,CAAC30B,EAAD,EAAKwH,SAAL,EAAgBvH,EAAhB,EAAoBwH,SAApB,EAA+B;EACjD,QAAI,CAAC,KAAK89C,qBAAN,IAA+B,KAAKt6E,eAAL,EAAnC,EAA2D,OAAO,IAAP;EAC3D,UAAMo8E,eAAe,GAAGrnD,EAAE,KAAKC,EAA/B;EACA,UAAMqnD,aAAa,GAAGD,eAAe,IAAI7/C,SAAS,KAAKC,SAAvD;EACA,QAAI6/C,aAAJ,EAAmB,OAAO,IAAP;;EACnB,QAAI,KAAK9B,uBAAT,EAAkC;EAChC,YAAM+B,eAAe,GAAGjC,wBAAwB,CAACsB,YAAzB,CAAsC5mD,EAAtC,EAA0CwH,SAA1C,KAAwD89C,wBAAwB,CAACsB,YAAzB,CAAsC3mD,EAAtC,EAA0CwH,SAA1C,CAAhF;EACA,UAAI,CAAC8/C,eAAL,EAAsB,OAAO,IAAP;EACvB;;EACD,UAAMh/C,GAAG,GAAGvI,EAAE,CAACpnD,aAAH,CAAiB4uD,SAAjB,CAAZ;EACA,UAAMgB,GAAG,GAAGxI,EAAE,CAACpnD,aAAH,CAAiB4uD,SAAS,GAAG,CAA7B,CAAZ;EACA,UAAMiB,GAAG,GAAGxI,EAAE,CAACrnD,aAAH,CAAiB6uD,SAAjB,CAAZ;EACA,UAAMiB,GAAG,GAAGzI,EAAE,CAACrnD,aAAH,CAAiB6uD,SAAS,GAAG,CAA7B,CAAZ;EACA,UAAM2+C,OAAO,GAAG5+C,SAAS,KAAK,CAA9B;EACA,UAAM6+C,OAAO,GAAG7+C,SAAS,GAAG,CAAZ,KAAkBxH,EAAE,CAAClpD,IAAH,EAAlC;EACA,UAAMwvG,OAAO,GAAG7+C,SAAS,KAAK,CAA9B;EACA,UAAM8+C,OAAO,GAAG9+C,SAAS,GAAG,CAAZ,KAAkBxH,EAAE,CAACnpD,IAAH,EAAlC;;EACA,SAAK8vD,GAAL,CAASp8B,mBAAT,CAA6B+9B,GAA7B,EAAkCC,GAAlC,EAAuCC,GAAvC,EAA4CC,GAA5C;;EACA,UAAM8+C,aAAa,GAAG,KAAK5gD,GAAL,CAAS37B,eAAT,MAA8B,KAAK27B,GAAL,CAASz7B,sBAAT,EAApD;;EACA,QAAIs8E,mBAAmB,GAAG,KAA1B;;EACA,QAAI,CAAC,KAAK/B,4BAAV,EAAwC;EACtC,YAAMgC,iBAAiB,GAAGL,eAAe,IAAI94G,IAAI,CAACC,GAAL,CAASi5D,SAAS,GAAGD,SAArB,KAAmC,CAAhF;EACAigD,MAAAA,mBAAmB,GAAG,CAACC,iBAAD,IAAsBpC,wBAAwB,CAACW,4BAAzB,CAAsD19C,GAAtD,EAA2DC,GAA3D,EAAgEC,GAAhE,EAAqEC,GAArE,EAA0E09C,OAA1E,EAAmFC,OAAnF,EAA4FC,OAA5F,EAAqGC,OAArG,CAA5C;EACD;;EACD,QAAIiB,aAAa,IAAIC,mBAArB,EAA0C;EACxC,WAAK7B,YAAL,GAAoB,IAAIxsG,KAAJ,CAAU,CAAV,EAAaC,IAAb,CAAkB,IAAlB,CAApB;EACA,WAAKusG,YAAL,CAAkB,CAAlB,IAAuBr9C,GAAvB;EACA,WAAKq9C,YAAL,CAAkB,CAAlB,IAAuBp9C,GAAvB;EACA,WAAKo9C,YAAL,CAAkB,CAAlB,IAAuBn9C,GAAvB;EACA,WAAKm9C,YAAL,CAAkB,CAAlB,IAAuBl9C,GAAvB;EACA,WAAKi9C,qBAAL,GAA6B,KAAK/+C,GAAL,CAASv7B,eAAT,CAAyB,CAAzB,CAA7B;EACA,UAAI,KAAKo6E,kBAAT,EAA6B,KAAKI,cAAL,CAAoBnvG,GAApB,CAAwB,KAAKivG,qBAA7B;EAC7B,WAAKG,kBAAL;EACD;EACF;;EACD76E,EAAAA,eAAe,GAAG;EAChB,WAAO,KAAK06E,qBAAL,KAA+B,IAAtC;EACD;;EACDxrG,EAAAA,MAAM,GAAG;EACP,QAAI,KAAKorG,qBAAT,EAAgC,OAAO,KAAP;EAChC,WAAO,KAAKI,qBAAL,KAA+B,IAAtC;EACD;;EACDc,EAAAA,4BAA4B,CAACkB,2BAAD,EAA8B;EACxD,SAAKjC,4BAAL,GAAoCiC,2BAApC;EACD;;EACD,MAAIpyG,WAAJ,GAAkB;EAChB,WAAO,CAACgxD,oBAAD,CAAP;EACD;;EAvI2C;;ECG/B,MAAMqhD,mBAAN,CAA0B;EACvCj5G,EAAAA,WAAW,GAAG;EACZi5G,IAAAA,mBAAmB,CAAC51G,YAApB,CAAiCC,KAAjC,CAAuC,IAAvC,EAA6CC,SAA7C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK40D,GAAL,GAAW,IAAI76B,qBAAJ,EAAX;EACA,SAAKulE,WAAL,GAAmB,IAAnB;EACA,SAAKiU,qBAAL,GAA6B,KAA7B;EACA,SAAKlyB,OAAL,GAAe,IAAf;EACA,SAAKw0B,QAAL,GAAgB,IAAhB;EACA,UAAM92B,UAAU,GAAG7+E,SAAS,CAAC,CAAD,CAA5B;EACA,SAAKo/F,WAAL,GAAmBvgB,UAAnB;EACD;;EACD,SAAOlsB,oBAAP,CAA4BksB,UAA5B,EAAwC;EACtC,UAAMgkB,EAAE,GAAG,IAAI6S,mBAAJ,CAAwB72B,UAAxB,CAAX;EACAgkB,IAAAA,EAAE,CAACiR,uBAAH,CAA2B,IAA3B;EACAjR,IAAAA,EAAE,CAAC96E,OAAH;EACA,WAAO86E,EAAE,CAACmS,gBAAH,EAAP;EACD;;EACDY,EAAAA,OAAO,GAAG;EACR,QAAI,KAAKz0B,OAAL,KAAiB,IAArB,EAA2B,OAAO,IAAP;EAC3B,SAAKme,0BAAL;EACD;;EACD0V,EAAAA,gBAAgB,GAAG;EACjB,WAAO,KAAK7zB,OAAL,CAAa6zB,gBAAb,EAAP;EACD;;EACDjtF,EAAAA,OAAO,GAAG;EACR,SAAK6tF,OAAL;EACA,WAAO,KAAKD,QAAZ;EACD;;EACD7B,EAAAA,uBAAuB,CAACmB,oBAAD,EAAuB;EAC5C,SAAK5B,qBAAL,GAA6B4B,oBAA7B;EACD;;EACD3V,EAAAA,0BAA0B,GAAG;EAC3B,SAAKqW,QAAL,GAAgB,IAAhB;EACA,SAAKx0B,OAAL,GAAe,IAAIiyB,wBAAJ,CAA6B,KAAK1+C,GAAlC,CAAf;;EACA,SAAKysB,OAAL,CAAa2yB,uBAAb,CAAqC,KAAKT,qBAA1C;;EACA,UAAMrwB,KAAK,GAAG,IAAI1B,YAAJ,EAAd;EACA0B,IAAAA,KAAK,CAAC3B,qBAAN,CAA4B,KAAKF,OAAjC;EACA6B,IAAAA,KAAK,CAAC/B,YAAN,CAAmB,KAAKme,WAAxB;;EACA,QAAI,KAAKje,OAAL,CAAapoD,eAAb,EAAJ,EAAoC;EAClC,WAAK48E,QAAL,GAAgB,KAAhB;EACA,aAAO,IAAP;EACD;EACF;;EACDlW,EAAAA,UAAU,GAAG;EACX,SAAKmW,OAAL;EACA,QAAI,CAAC,KAAKD,QAAV,EAAoB,MAAM,IAAInyC,iBAAJ,CAAsB,KAAKqyC,eAAL,EAAtB,EAA8C,KAAK10B,OAAL,CAAahoD,eAAb,EAA9C,CAAN;EACrB;;EACD08E,EAAAA,eAAe,GAAG;EAChB,QAAI,KAAKF,QAAT,EAAmB,OAAO,wBAAP;;EACnB,UAAMG,OAAO,GAAG,KAAK30B,OAAL,CAAa4zB,uBAAb,EAAhB;;EACA,WAAO,0CAA0C/9E,SAAS,CAACC,YAAV,CAAuB6+E,OAAO,CAAC,CAAD,CAA9B,EAAmCA,OAAO,CAAC,CAAD,CAA1C,CAA1C,GAA2F,OAA3F,GAAqG9+E,SAAS,CAACC,YAAV,CAAuB6+E,OAAO,CAAC,CAAD,CAA9B,EAAmCA,OAAO,CAAC,CAAD,CAA1C,CAA5G;EACD;;EArDsC;;ECF1B,MAAMC,mBAAN,CAA0B;EACvCt5G,EAAAA,WAAW,GAAG;EACZs5G,IAAAA,mBAAmB,CAACj2G,YAApB,CAAiCC,KAAjC,CAAuC,IAAvC,EAA6CC,SAA7C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKk2G,GAAL,GAAW,IAAX;EACA,UAAM/jD,KAAK,GAAGjyD,SAAS,CAAC,CAAD,CAAvB;EACA,SAAKg2G,GAAL,GAAW,IAAIN,mBAAJ,CAAwBK,mBAAmB,CAACE,gBAApB,CAAqChkD,KAArC,CAAxB,CAAX;EACD;;EACD,SAAOgkD,gBAAP,CAAwBhkD,KAAxB,EAA+B;EAC7B,UAAM4sB,UAAU,GAAG,IAAIz5E,SAAJ,EAAnB;;EACA,SAAK,IAAIhI,CAAC,GAAG60D,KAAK,CAACttD,QAAN,EAAb,EAA+BvH,CAAC,CAACmJ,OAAF,EAA/B,GAA8C;EAC5C,YAAM9D,CAAC,GAAGrF,CAAC,CAACkJ,IAAF,EAAV;EACAu4E,MAAAA,UAAU,CAACr6E,GAAX,CAAe,IAAI2uG,kBAAJ,CAAuB1wG,CAAC,CAAC+f,cAAF,EAAvB,EAA2C/f,CAA3C,CAAf;EACD;;EACD,WAAOo8E,UAAP;EACD;;EACD,SAAO4gB,UAAP,CAAkBxtC,KAAlB,EAAyB;EACvB,UAAMikD,SAAS,GAAG,IAAIH,mBAAJ,CAAwB9jD,KAAxB,CAAlB;EACAikD,IAAAA,SAAS,CAACzW,UAAV;EACD;;EACDA,EAAAA,UAAU,GAAG;EACX,SAAKuW,GAAL,CAASvW,UAAT;EACD;;EAvBsC;;ECA1B,MAAM0W,WAAN,CAAkB;EAC/B15G,EAAAA,WAAW,GAAG;EACZ05G,IAAAA,WAAW,CAACr2G,YAAZ,CAAyBC,KAAzB,CAA+B,IAA/B,EAAqCC,SAArC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKs2G,GAAL,GAAW,IAAX;EACA,SAAKtrB,gBAAL,GAAwB,IAAxB;EACA,SAAK/iB,UAAL,GAAkB,IAAlB;EACA,SAAKsuC,cAAL,GAAsB,IAAIjxG,SAAJ,EAAtB;EACA,SAAKkxG,eAAL,GAAuB,IAAIlxG,SAAJ,EAAvB;EACA,UAAM0nC,EAAE,GAAG9sC,SAAS,CAAC,CAAD,CAApB;EAAA,UAAyB42B,eAAe,GAAG52B,SAAS,CAAC,CAAD,CAApD;EAAA,UAAyDu2G,SAAS,GAAGv2G,SAAS,CAAC,CAAD,CAA9E;EACA,SAAKo2G,GAAL,GAAWtpE,EAAX;EACA,SAAKg+C,gBAAL,GAAwBl0D,eAAxB;EACA,SAAKmxC,UAAL,GAAkBwuC,SAAlB;EACD;;EACDC,EAAAA,YAAY,CAACC,MAAD,EAAS;EACnB,SAAK,IAAIlqF,EAAE,GAAG,KAAK6pF,GAAL,CAASM,QAAT,GAAoBjwC,WAApB,GAAkC9hE,QAAlC,EAAd,EAA4D4nB,EAAE,CAAChmB,OAAH,EAA5D,GAA4E;EAC1E,YAAM46D,EAAE,GAAG50C,EAAE,CAACjmB,IAAH,EAAX;EACA,WAAKqwG,eAAL,CAAqBx1C,EAArB,EAAyBs1C,MAAzB,EAAiC,KAAKJ,cAAtC;EACA,WAAKO,wBAAL,CAA8Bz1C,EAA9B,EAAkCs1C,MAAlC,EAA0C,KAAKJ,cAA/C;EACD;EACF;;EACDQ,EAAAA,iBAAiB,CAACp0G,CAAD,EAAIq0G,WAAJ,EAAiB;EAChC,UAAM14D,GAAG,GAAG,KAAK2pB,UAAL,CAAgBnuB,MAAhB,CAAuBn3C,CAAC,CAACiE,aAAF,EAAvB,EAA0C,KAAK0vG,GAAL,CAASW,cAAT,CAAwBD,WAAxB,CAA1C,CAAZ;;EACAr0G,IAAAA,CAAC,CAACy8D,QAAF,GAAarG,WAAb,CAAyBi+C,WAAzB,EAAsC14D,GAAtC;EACD;;EACDm3B,EAAAA,KAAK,CAACkhC,MAAD,EAAS;EACZ,SAAKhb,oBAAL;EACA,SAAK+a,YAAL,CAAkBC,MAAlB;EACA,SAAK7kD,UAAL,CAAgB6kD,MAAhB;EACA,WAAO,KAAKH,eAAZ;EACD;;EACDK,EAAAA,eAAe,CAACx1C,EAAD,EAAKs1C,MAAL,EAAaxkD,KAAb,EAAoB;EACjC,UAAMuB,KAAK,GAAG2N,EAAE,CAACjC,QAAH,EAAd;EACA,UAAMz8D,CAAC,GAAG0+D,EAAE,CAACC,OAAH,EAAV;EACA,QAAID,EAAE,CAACuD,UAAH,EAAJ,EACE,IAAI,CAACvD,EAAE,CAACvC,SAAH,EAAD,IAAmBo4C,SAAS,CAACC,YAAV,CAAuBzjD,KAAvB,EAA8BijD,MAA9B,CAAnB,IAA4D,CAACh0G,CAAC,CAACs8D,SAAF,EAAjE,EAAgF;EAC9E9M,MAAAA,KAAK,CAACztD,GAAN,CAAU/B,CAAV;EACA0+D,MAAAA,EAAE,CAAC+D,cAAH,CAAkB,IAAlB;EACD;EAEJ;;EACDu2B,EAAAA,oBAAoB,GAAG;EACrB,SAAK,IAAIz1B,MAAM,GAAG,KAAKowC,GAAL,CAASM,QAAT,GAAoBtvC,QAApB,GAA+BziE,QAA/B,EAAlB,EAA6DqhE,MAAM,CAACz/D,OAAP,EAA7D,GAAiF;EAC/E,YAAMk1C,IAAI,GAAGuqB,MAAM,CAAC1/D,IAAP,EAAb;EACAm1C,MAAAA,IAAI,CAACylB,QAAL,GAAgBu6B,oBAAhB;EACD;;EACD,SAAK,IAAIlvE,EAAE,GAAG,KAAK6pF,GAAL,CAASM,QAAT,GAAoBjwC,WAApB,GAAkC9hE,QAAlC,EAAd,EAA4D4nB,EAAE,CAAChmB,OAAH,EAA5D,GAA4E;EAC1E,YAAM46D,EAAE,GAAG50C,EAAE,CAACjmB,IAAH,EAAX;EACA,YAAM7D,CAAC,GAAG0+D,EAAE,CAACC,OAAH,EAAV;;EACA,UAAID,EAAE,CAACuD,UAAH,MAAmB,CAACjiE,CAAC,CAACu8D,YAAF,EAAxB,EAA0C;EACxC,cAAMD,SAAS,GAAG,KAAKq3C,GAAL,CAASc,YAAT,CAAsB/1C,EAAE,CAACz6D,aAAH,EAAtB,CAAlB;;EACAjE,QAAAA,CAAC,CAAC08D,UAAF,CAAaJ,SAAb;EACD;EACF;EACF;;EACDo4C,EAAAA,kBAAkB,CAACC,SAAD,EAAY;EAC5B,SAAK,IAAI7qF,EAAE,GAAG6qF,SAAS,CAACzyG,QAAV,EAAd,EAAoC4nB,EAAE,CAAChmB,OAAH,EAApC,GAAoD;EAClD,YAAM9D,CAAC,GAAG8pB,EAAE,CAACjmB,IAAH,EAAV;EACA,YAAMktD,KAAK,GAAG/wD,CAAC,CAACy8D,QAAF,EAAd;EACA,UAAIz8D,CAAC,CAACo9D,UAAF,EAAJ,EACE,IAAIrM,KAAK,CAAC3pD,MAAN,CAAa,CAAb,CAAJ,EAAqB,KAAKgtG,iBAAL,CAAuBp0G,CAAvB,EAA0B,CAA1B,EAArB,KAAwD,KAAKo0G,iBAAL,CAAuBp0G,CAAvB,EAA0B,CAA1B;EAE3D;EACF;;EACDmvD,EAAAA,UAAU,CAAC6kD,MAAD,EAAS;EACjB,SAAK,IAAIlqF,EAAE,GAAG,KAAK8pF,cAAL,CAAoB1xG,QAApB,EAAd,EAA8C4nB,EAAE,CAAChmB,OAAH,EAA9C,GAA8D;EAC5D,YAAM9D,CAAC,GAAG8pB,EAAE,CAACjmB,IAAH,EAAV;;EACA,YAAM2T,IAAI,GAAG,KAAK6wE,gBAAL,CAAsBjoE,gBAAtB,CAAuCpgB,CAAC,CAAC+f,cAAF,EAAvC,CAAb;;EACA,WAAK8zF,eAAL,CAAqB9xG,GAArB,CAAyByV,IAAzB;;EACAxX,MAAAA,CAAC,CAACo8D,WAAF,CAAc,IAAd;EACD;EACF;;EACD+3C,EAAAA,wBAAwB,CAACz1C,EAAD,EAAKs1C,MAAL,EAAaxkD,KAAb,EAAoB;EAC1C,UAAMuB,KAAK,GAAG2N,EAAE,CAACjC,QAAH,EAAd;EACA,QAAIiC,EAAE,CAACuD,UAAH,EAAJ,EAAqB,OAAO,IAAP;EACrB,QAAIvD,EAAE,CAACvC,SAAH,EAAJ,EAAoB,OAAO,IAAP;EACpB,QAAIuC,EAAE,CAACkD,kBAAH,EAAJ,EAA6B,OAAO,IAAP;EAC7B,QAAIlD,EAAE,CAACC,OAAH,GAAatC,UAAb,EAAJ,EAA+B,OAAO,IAAP;EAC/B3+D,IAAAA,MAAM,CAACE,MAAP,CAAc,EAAE8gE,EAAE,CAACrC,UAAH,MAAmBqC,EAAE,CAAC6D,MAAH,GAAYlG,UAAZ,EAArB,KAAkD,CAACqC,EAAE,CAACC,OAAH,GAAatC,UAAb,EAAjE;;EACA,QAAIk4C,SAAS,CAACC,YAAV,CAAuBzjD,KAAvB,EAA8BijD,MAA9B,KAAyCA,MAAM,KAAKO,SAAS,CAACK,YAAlE,EAAgF;EAC9EplD,MAAAA,KAAK,CAACztD,GAAN,CAAU28D,EAAE,CAACC,OAAH,EAAV;EACAD,MAAAA,EAAE,CAAC+D,cAAH,CAAkB,IAAlB;EACD;EACF;;EApF8B;;ECDlB,MAAMoyC,YAAN,CAAmB;EAChC76G,EAAAA,WAAW,GAAG;EACZ66G,IAAAA,YAAY,CAACx3G,YAAb,CAA0BC,KAA1B,CAAgC,IAAhC,EAAsCC,SAAtC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKs2G,GAAL,GAAW,IAAX;EACA,SAAKtrB,gBAAL,GAAwB,IAAxB;EACA,SAAKysB,gBAAL,GAAwB,IAAInyG,SAAJ,EAAxB;EACA,UAAM0nC,EAAE,GAAG9sC,SAAS,CAAC,CAAD,CAApB;EAAA,UAAyB42B,eAAe,GAAG52B,SAAS,CAAC,CAAD,CAApD;EACA,SAAKo2G,GAAL,GAAWtpE,EAAX;EACA,SAAKg+C,gBAAL,GAAwBl0D,eAAxB;EACD;;EACD4gF,EAAAA,wBAAwB,CAAC95G,CAAD,EAAI;EAC1B,UAAM8E,KAAK,GAAG9E,CAAC,CAACgJ,aAAF,EAAd;;EACA,QAAI,CAAC,KAAK0vG,GAAL,CAASqB,aAAT,CAAuBj1G,KAAvB,CAAL,EAAoC;EAClC,YAAM6gB,EAAE,GAAG,KAAKynE,gBAAL,CAAsBvnE,WAAtB,CAAkC/gB,KAAlC,CAAX;;EACA,WAAK+0G,gBAAL,CAAsB/yG,GAAtB,CAA0B6e,EAA1B;EACD;EACF;;EACDq0F,EAAAA,4BAA4B,CAACjB,MAAD,EAAS;EACnC,SAAK,IAAIzwC,MAAM,GAAG,KAAKowC,GAAL,CAASM,QAAT,GAAoBtvC,QAApB,GAA+BziE,QAA/B,EAAlB,EAA6DqhE,MAAM,CAACz/D,OAAP,EAA7D,GAAiF;EAC/E,YAAM7I,CAAC,GAAGsoE,MAAM,CAAC1/D,IAAP,EAAV;EACA,UAAI5I,CAAC,CAACohE,UAAF,EAAJ,EAAoB;EACpB,UAAIphE,CAAC,CAACujE,sBAAF,EAAJ,EAAgC;;EAChC,UAAIvjE,CAAC,CAACwjE,QAAF,GAAa24B,SAAb,OAA6B,CAA7B,IAAkC4c,MAAM,KAAKO,SAAS,CAACK,YAA3D,EAAyE;EACvE,cAAM7jD,KAAK,GAAG91D,CAAC,CAACwhE,QAAF,EAAd;EACA,YAAI83C,SAAS,CAACC,YAAV,CAAuBzjD,KAAvB,EAA8BijD,MAA9B,CAAJ,EACE,KAAKe,wBAAL,CAA8B95G,CAA9B;EAEH;EACF;EACF;;EACD63E,EAAAA,KAAK,CAACkhC,MAAD,EAAS;EACZ,SAAKiB,4BAAL,CAAkCjB,MAAlC;EACA,WAAO,KAAKc,gBAAZ;EACD;;EAnC+B;;ECAnB,MAAMI,UAAN,CAAiB;EAC9Bl7G,EAAAA,WAAW,GAAG;EACZ,SAAKm7G,QAAL,GAAgB,IAAhB;EACA,SAAKC,wBAAL,GAAgC,EAAhC;EACA,SAAKC,WAAL,GAAmB,IAAI96G,IAAJ,EAAnB;EACA,SAAK+6G,cAAL,GAAsB,IAAtB;EACD;;EAEDC,EAAAA,SAAS,GAAG;EACV,WAAOz6G,MAAM,CAACiB,gBAAP,CAAwB,KAAKs5G,WAA7B,CAAP;EACD;;EAEDtzG,EAAAA,GAAG,CAACuO,GAAD,EAAM;EACP,UAAMklG,OAAO,GAAG16G,MAAM,CAACe,gBAAP,CAAwByU,GAAxB,CAAhB;;EACA,QAAI,KAAK6kG,QAAT,EAAmB;EACjB,WAAKE,WAAL,GAAmBG,OAAnB;EACA,WAAKF,cAAL,GAAsBJ,UAAU,CAACO,WAAX,CAAuB,KAAKJ,WAA5B,CAAtB;EACA,WAAKF,QAAL,GAAgB,KAAhB;EACA,aAAO,IAAP;EACD;;EACD,UAAMO,UAAU,GAAGR,UAAU,CAACO,WAAX,CAAuBD,OAAvB,CAAnB;;EACA,QAAIE,UAAU,KAAK,KAAKJ,cAAxB,EAAwC;EACtC,WAAKD,WAAL,CAAiB76G,IAAjB,GAAwB,IAAI,CAA5B;EACA,WAAK66G,WAAL,CAAiB56G,GAAjB,GAAuB,IAAI,CAA3B;EACA,aAAO,IAAP;EACD;;EACD,SAAK26G,wBAAL,GAAgCF,UAAU,CAACS,4BAAX,CAAwC,KAAKN,WAA7C,EAA0DG,OAA1D,CAAhC;EACA,SAAKH,WAAL,GAAmBH,UAAU,CAACU,aAAX,CAAyB,KAAKP,WAA9B,EAA2C,MAAM,KAAK,KAAKD,wBAAhB,CAA3C,CAAnB;EACD;;EAED/6G,EAAAA,QAAQ,GAAG;EACT,QAAIkD,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMxB,IAAI,GAAGuB,SAAS,CAAC,CAAD,CAAtB;EACA,YAAMjB,CAAC,GAAGxB,MAAM,CAACiB,gBAAP,CAAwBC,IAAxB,CAAV;EACA,YAAM65G,MAAM,GAAGt7G,IAAI,CAACG,cAAL,CAAoBsB,IAApB,CAAf;EACA,YAAM85G,MAAM,GAAG,qEAAqED,MAApF;EACA,YAAME,MAAM,GAAGD,MAAM,CAACpqG,SAAP,CAAiBoqG,MAAM,CAACt4G,MAAP,GAAgB,EAAjC,CAAf;EACA,YAAM4L,GAAG,GAAG2sG,MAAM,CAACrqG,SAAP,CAAiB,CAAjB,EAAoB,CAApB,IAAyB,IAAzB,GAAgCqqG,MAAM,CAACrqG,SAAP,CAAiB,CAAjB,EAAoB,EAApB,CAAhC,GAA0D,QAA1D,GAAqEqqG,MAAM,CAACrqG,SAAP,CAAiB,EAAjB,CAArE,GAA4F,KAA5F,GAAoGpP,CAApG,GAAwG,IAApH;EACA,aAAO8M,GAAP;EACD;EACF;;EAED0R,EAAAA,QAAQ,GAAG;EACT,WAAOo6F,UAAP;EACD;;EAED,MAAIt0G,WAAJ,GAAkB;EAChB,WAAO,EAAP;EACD;;EAED,SAAOo1G,MAAP,CAAch6G,IAAd,EAAoBrB,CAApB,EAAuB;EACrB,UAAMC,IAAI,GAAI,KAAMD,CAAC,GAAG,EAAxB;EACA,QAAIA,CAAC,GAAG,EAAR,EAAY,OAAO,CAACqB,IAAI,CAACvB,GAAL,GAAWG,IAAZ,MAAsB,CAAtB,GAA0B,CAA1B,GAA8B,CAArC;EAEZ,WAAO,CAACoB,IAAI,CAACxB,IAAL,GAAYI,IAAb,MAAuB,CAAvB,GAA2B,CAA3B,GAA+B,CAAtC;EACD;;EAED,SAAO66G,WAAP,CAAmBnlG,GAAnB,EAAwB;EACtB,WAAOA,GAAG,CAAC9V,IAAJ,KAAa,EAApB;EACD;;EAED,SAAOo7G,aAAP,CAAqB55G,IAArB,EAA2Bi6G,KAA3B,EAAkC;EAChC,QAAIC,IAAI,GAAG,KAAX;;EACA,QAAID,KAAK,GAAG,EAAZ,EAAgB;EACdj6G,MAAAA,IAAI,CAACvB,GAAL,GAAW,IAAI,CAAf;EACAw7G,MAAAA,KAAK,IAAI,EAAT;EACAC,MAAAA,IAAI,GAAG,MAAP;EACD;;EACD,QAAID,KAAK,GAAG,CAAZ,EAAe;EACb,YAAMr7G,IAAI,GAAIq7G,KAAK,GAAG,EAAT,GAAgB,EAAE,CAAC,KAAKA,KAAN,IAAe,CAAjB,CAAhB,GAAuC,CAApD;EACAj6G,MAAAA,IAAI,CAACk6G,IAAD,CAAJ,IAAct7G,IAAd;EACD;;EACD,WAAOoB,IAAP;EACD;;EAED,SAAO25G,4BAAP,CAAoCQ,IAApC,EAA0CC,IAA1C,EAAgD;EAC9C,QAAIl/C,KAAK,GAAG,CAAZ;;EACA,SAAK,IAAIv8D,CAAC,GAAG,EAAb,EAAiBA,CAAC,IAAI,CAAtB,EAAyBA,CAAC,EAA1B,EAA8B;EAC5B,UAAIu6G,UAAU,CAACc,MAAX,CAAkBG,IAAlB,EAAwBx7G,CAAxB,MAA+Bu6G,UAAU,CAACc,MAAX,CAAkBI,IAAlB,EAAwBz7G,CAAxB,CAAnC,EAA+D,OAAOu8D,KAAP;EAC/DA,MAAAA,KAAK;EACN;;EACD,WAAO,EAAP;EACD;;EAlF6B;;ECEjB,MAAMm/C,iBAAN,CAAwB;EACrCr8G,EAAAA,WAAW,GAAG;EACZq8G,IAAAA,iBAAiB,CAACh5G,YAAlB,CAA+BC,KAA/B,CAAqC,IAArC,EAA2CC,SAA3C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKi5G,YAAL,GAAoB,IAApB;EACA,SAAKC,SAAL,GAAiB,IAAIC,sBAAJ,EAAjB;EACD;;EACDC,EAAAA,aAAa,CAAC1+F,IAAD,EAAO;EAClB,UAAMitB,KAAK,GAAG,IAAI0xE,UAAJ,CAAe,KAAKJ,YAApB,CAAd;EACAv+F,IAAAA,IAAI,CAACza,KAAL,CAAW0nC,KAAX;EACAjtB,IAAAA,IAAI,CAACU,eAAL;EACD;;EACDk+F,EAAAA,gBAAgB,CAAC5+F,IAAD,EAAO;EACrB,QAAI,KAAKu+F,YAAL,CAAkBh6G,CAAlB,KAAwB,GAAxB,IAA+B,KAAKg6G,YAAL,CAAkB/5G,CAAlB,KAAwB,GAA3D,EAAgE,OAAOwb,IAAP;EAChE,UAAM6+F,QAAQ,GAAG,IAAIv4G,UAAJ,CAAe,KAAKi4G,YAApB,CAAjB;EACAM,IAAAA,QAAQ,CAACt6G,CAAT,GAAa,CAACs6G,QAAQ,CAACt6G,CAAvB;EACAs6G,IAAAA,QAAQ,CAACr6G,CAAT,GAAa,CAACq6G,QAAQ,CAACr6G,CAAvB;EACA,UAAMyoC,KAAK,GAAG,IAAI0xE,UAAJ,CAAeE,QAAf,CAAd;EACA7+F,IAAAA,IAAI,CAACza,KAAL,CAAW0nC,KAAX;EACAjtB,IAAAA,IAAI,CAACU,eAAL;EACA,WAAOV,IAAP;EACD;;EACD8+F,EAAAA,mBAAmB,GAAG;EACpB,WAAO,KAAKP,YAAZ;EACD;;EACDv0G,EAAAA,GAAG,CAACgW,IAAD,EAAO;EACRA,IAAAA,IAAI,CAACza,KAAL,CAAW,KAAKi5G,SAAhB;EACA,SAAKD,YAAL,GAAoB,KAAKC,SAAL,CAAeM,mBAAf,EAApB;EACD;;EA7BoC;;EA+BvC,MAAML,sBAAN,CAA6B;EAC3Bx8G,EAAAA,WAAW,GAAG;EACZw8G,IAAAA,sBAAsB,CAACn5G,YAAvB,CAAoCC,KAApC,CAA0C,IAA1C,EAAgDC,SAAhD;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKy5G,YAAL,GAAoB,IAAI5B,UAAJ,EAApB;EACA,SAAK6B,YAAL,GAAoB,IAAI7B,UAAJ,EAApB;EACD;;EACD5vG,EAAAA,MAAM,CAACvF,KAAD,EAAQ;EACZ,SAAK+2G,YAAL,CAAkB/0G,GAAlB,CAAsBhC,KAAK,CAACzD,CAA5B;;EACA,SAAKy6G,YAAL,CAAkBh1G,GAAlB,CAAsBhC,KAAK,CAACxD,CAA5B;EACD;;EACDs6G,EAAAA,mBAAmB,GAAG;EACpB,WAAO,IAAIx4G,UAAJ,CAAe,KAAKy4G,YAAL,CAAkBvB,SAAlB,EAAf,EAA8C,KAAKwB,YAAL,CAAkBxB,SAAlB,EAA9C,CAAP;EACD;;EACD,MAAI30G,WAAJ,GAAkB;EAChB,WAAO,CAACub,gBAAD,CAAP;EACD;;EAjB0B;;EAmB7B,MAAMu6F,UAAN,CAAiB;EACf18G,EAAAA,WAAW,GAAG;EACZ08G,IAAAA,UAAU,CAACr5G,YAAX,CAAwBC,KAAxB,CAA8B,IAA9B,EAAoCC,SAApC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK2nC,KAAL,GAAa,IAAb;EACA,UAAMA,KAAK,GAAGznC,SAAS,CAAC,CAAD,CAAvB;EACA,SAAKynC,KAAL,GAAaA,KAAb;EACD;;EACD1/B,EAAAA,MAAM,CAACC,GAAD,EAAM5K,CAAN,EAAS;EACb,UAAMmtC,EAAE,GAAGviC,GAAG,CAAChG,WAAJ,CAAgB5E,CAAhB,EAAmB,CAAnB,IAAwB,KAAKqqC,KAAL,CAAW1oC,CAA9C;EACA,UAAMyrC,EAAE,GAAGxiC,GAAG,CAAChG,WAAJ,CAAgB5E,CAAhB,EAAmB,CAAnB,IAAwB,KAAKqqC,KAAL,CAAWzoC,CAA9C;EACAgJ,IAAAA,GAAG,CAAC3G,WAAJ,CAAgBjE,CAAhB,EAAmB,CAAnB,EAAsBmtC,EAAtB;EACAviC,IAAAA,GAAG,CAAC3G,WAAJ,CAAgBjE,CAAhB,EAAmB,CAAnB,EAAsBotC,EAAtB;EACD;;EACDviC,EAAAA,MAAM,GAAG;EACP,WAAO,KAAP;EACD;;EACDC,EAAAA,iBAAiB,GAAG;EAClB,WAAO,IAAP;EACD;;EACD,MAAI7E,WAAJ,GAAkB;EAChB,WAAO,CAACyE,wBAAD,CAAP;EACD;;EAvBc;;EAyBjBgxG,iBAAiB,CAACG,sBAAlB,GAA2CA,sBAA3C;EACAH,iBAAiB,CAACK,UAAlB,GAA+BA,UAA/B;;EC5Ee,MAAMM,aAAN,CAAoB;EACjCh9G,EAAAA,WAAW,GAAG;EACZg9G,IAAAA,aAAa,CAAC35G,YAAd,CAA2BC,KAA3B,CAAiC,IAAjC,EAAuCC,SAAvC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKq5C,KAAL,GAAa,IAAIjyC,KAAJ,CAAU,CAAV,EAAaC,IAAb,CAAkB,IAAlB,CAAb;EACA,SAAKgpG,cAAL,GAAsB,IAAtB;EACA,SAAKuJ,IAAL,GAAY,IAAZ;EACA,UAAMhsE,EAAE,GAAG1tC,SAAS,CAAC,CAAD,CAApB;EAAA,UAAyBsqC,EAAE,GAAGtqC,SAAS,CAAC,CAAD,CAAvC;EACA,SAAKm5C,KAAL,CAAW,CAAX,IAAgBzL,EAAhB;EACA,SAAKyL,KAAL,CAAW,CAAX,IAAgB7O,EAAhB;EACA,SAAKkoE,oBAAL;EACD;;EACD,SAAOmH,SAAP,CAAiBlsE,EAAjB,EAAqBC,EAArB,EAAyB+oE,MAAzB,EAAiC;EAC/B,UAAM3pE,EAAE,GAAG,IAAI2sE,aAAJ,CAAkBhsE,EAAlB,EAAsBC,EAAtB,CAAX;EACA,WAAOZ,EAAE,CAACuf,iBAAH,CAAqBoqD,MAArB,CAAP;EACD;;EACD,SAAO93D,KAAP,CAAalR,EAAb,EAAiBC,EAAjB,EAAqB;EACnB,WAAO+rE,aAAa,CAACE,SAAd,CAAwBlsE,EAAxB,EAA4BC,EAA5B,EAAgCspE,SAAS,CAAC4C,KAA1C,CAAP;EACD;;EACD,SAAO1vG,YAAP,CAAoBujC,EAApB,EAAwBC,EAAxB,EAA4B;EAC1B,WAAO+rE,aAAa,CAACE,SAAd,CAAwBlsE,EAAxB,EAA4BC,EAA5B,EAAgCspE,SAAS,CAACK,YAA1C,CAAP;EACD;;EACD,SAAOwC,aAAP,CAAqBpsE,EAArB,EAAyBC,EAAzB,EAA6B;EAC3B,WAAO+rE,aAAa,CAACE,SAAd,CAAwBlsE,EAAxB,EAA4BC,EAA5B,EAAgCspE,SAAS,CAAC8C,aAA1C,CAAP;EACD;;EACD,SAAOC,UAAP,CAAkBtsE,EAAlB,EAAsBC,EAAtB,EAA0B;EACxB,WAAO+rE,aAAa,CAACE,SAAd,CAAwBlsE,EAAxB,EAA4BC,EAA5B,EAAgCspE,SAAS,CAACgD,UAA1C,CAAP;EACD;;EACDC,EAAAA,QAAQ,CAACz/F,IAAD,EAAO;EACb,UAAMk3F,QAAQ,GAAG,IAAIJ,eAAJ,CAAoB92F,IAApB,CAAjB;EACA,UAAMi3F,QAAQ,GAAGC,QAAQ,CAACX,MAAT,CAAgBv2F,IAAhB,EAAsB,KAAK21F,cAA3B,CAAjB;EACA,WAAOsB,QAAP;EACD;;EACD2H,EAAAA,gBAAgB,CAAC5+F,IAAD,EAAO;EACrB,SAAKk/F,IAAL,GAAY,IAAIZ,iBAAJ,EAAZ;;EACA,SAAKY,IAAL,CAAUl1G,GAAV,CAAcgW,IAAI,CAAC,CAAD,CAAlB;;EACA,SAAKk/F,IAAL,CAAUl1G,GAAV,CAAcgW,IAAI,CAAC,CAAD,CAAlB;;EACA,UAAM0/F,OAAO,GAAG,IAAIhzG,KAAJ,CAAU,CAAV,EAAaC,IAAb,CAAkB,IAAlB,CAAhB;EACA+yG,IAAAA,OAAO,CAAC,CAAD,CAAP,GAAa,KAAKR,IAAL,CAAUN,gBAAV,CAA2B5+F,IAAI,CAAC,CAAD,CAAJ,CAAQ7X,IAAR,EAA3B,CAAb;EACAu3G,IAAAA,OAAO,CAAC,CAAD,CAAP,GAAa,KAAKR,IAAL,CAAUN,gBAAV,CAA2B5+F,IAAI,CAAC,CAAD,CAAJ,CAAQ7X,IAAR,EAA3B,CAAb;EACA,WAAOu3G,OAAP;EACD;;EACDC,EAAAA,aAAa,CAAC3/F,IAAD,EAAO;EAClB,SAAKk/F,IAAL,CAAUR,aAAV,CAAwB1+F,IAAxB;;EACA,WAAOA,IAAP;EACD;;EACD6xC,EAAAA,iBAAiB,CAACoqD,MAAD,EAAS;EACxB,UAAM2D,QAAQ,GAAG,KAAK5Y,IAAL,CAAU,KAAKroD,KAAf,CAAjB;EACA,UAAM77C,MAAM,GAAG05G,SAAS,CAAC2C,SAAV,CAAoBS,QAAQ,CAAC,CAAD,CAA5B,EAAiCA,QAAQ,CAAC,CAAD,CAAzC,EAA8C3D,MAA9C,CAAf;EACA,WAAO,KAAK0D,aAAL,CAAmB78G,MAAnB,CAAP;EACD;;EACDmiG,EAAAA,UAAU,CAAClkF,CAAD,EAAI;EACZ,QAAI,CAACA,CAAC,CAACwM,OAAF,EAAL,EACE7P,MAAM,CAACuiB,GAAP,CAAWC,OAAX,CAAmB,6BAAnB;EAEH;;EACD83E,EAAAA,oBAAoB,GAAG;EACrB,SAAKrC,cAAL,GAAsBmB,eAAe,CAACM,2BAAhB,CAA4C,KAAKz4D,KAAL,CAAW,CAAX,CAA5C,EAA2D,KAAKA,KAAL,CAAW,CAAX,CAA3D,CAAtB;EACD;;EACDqoD,EAAAA,IAAI,CAAChnF,IAAD,EAAO;EACT,UAAM0/F,OAAO,GAAG,KAAKd,gBAAL,CAAsB5+F,IAAtB,CAAhB;EACA,UAAMi3F,QAAQ,GAAGH,eAAe,CAAC9P,IAAhB,CAAqB0Y,OAAO,CAAC,CAAD,CAA5B,EAAiCA,OAAO,CAAC,CAAD,CAAxC,EAA6C,KAAK/J,cAAlD,CAAjB;EACA,WAAOsB,QAAP;EACD;;EAhEgC;;ECDpB,MAAM4I,qBAAN,CAA4B;EACzC59G,EAAAA,WAAW,GAAG;EACZ49G,IAAAA,qBAAqB,CAACv6G,YAAtB,CAAmCC,KAAnC,CAAyC,IAAzC,EAA+CC,SAA/C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKq5C,KAAL,GAAa,IAAIjyC,KAAJ,CAAU,CAAV,EAAaC,IAAb,CAAkB,IAAlB,CAAb;EACA,UAAMumC,EAAE,GAAG1tC,SAAS,CAAC,CAAD,CAApB;EAAA,UAAyBsqC,EAAE,GAAGtqC,SAAS,CAAC,CAAD,CAAvC;EACA,SAAKm5C,KAAL,CAAW,CAAX,IAAgBzL,EAAhB;EACA,SAAKyL,KAAL,CAAW,CAAX,IAAgB7O,EAAhB;EACD;;EACD,SAAOqvE,SAAP,CAAiBlsE,EAAjB,EAAqBC,EAArB,EAAyB+oE,MAAzB,EAAiC;EAC/B,UAAM3pE,EAAE,GAAG,IAAIutE,qBAAJ,CAA0B5sE,EAA1B,EAA8BC,EAA9B,CAAX;EACA,WAAOZ,EAAE,CAACuf,iBAAH,CAAqBoqD,MAArB,CAAP;EACD;;EACD,SAAO93D,KAAP,CAAalR,EAAb,EAAiBC,EAAjB,EAAqB;EACnB,WAAO2sE,qBAAqB,CAACV,SAAtB,CAAgClsE,EAAhC,EAAoCC,EAApC,EAAwCspE,SAAS,CAAC4C,KAAlD,CAAP;EACD;;EACD,SAAO1vG,YAAP,CAAoBujC,EAApB,EAAwBC,EAAxB,EAA4B;EAC1B,WAAO2sE,qBAAqB,CAACV,SAAtB,CAAgClsE,EAAhC,EAAoCC,EAApC,EAAwCspE,SAAS,CAACK,YAAlD,CAAP;EACD;;EACD,SAAOwC,aAAP,CAAqBpsE,EAArB,EAAyBC,EAAzB,EAA6B;EAC3B,WAAO2sE,qBAAqB,CAACV,SAAtB,CAAgClsE,EAAhC,EAAoCC,EAApC,EAAwCspE,SAAS,CAAC8C,aAAlD,CAAP;EACD;;EACD,SAAOC,UAAP,CAAkBtsE,EAAlB,EAAsBC,EAAtB,EAA0B;EACxB,WAAO2sE,qBAAqB,CAACV,SAAtB,CAAgClsE,EAAhC,EAAoCC,EAApC,EAAwCspE,SAAS,CAACgD,UAAlD,CAAP;EACD;;EACD3tD,EAAAA,iBAAiB,CAACoqD,MAAD,EAAS;EACxB,QAAIn5G,MAAM,GAAG,IAAb;EACA,QAAIg9G,SAAS,GAAG,KAAhB;EACA,QAAIC,cAAc,GAAG,IAArB;;EACA,QAAI;EACFj9G,MAAAA,MAAM,GAAG05G,SAAS,CAAC2C,SAAV,CAAoB,KAAKxgE,KAAL,CAAW,CAAX,CAApB,EAAmC,KAAKA,KAAL,CAAW,CAAX,CAAnC,EAAkDs9D,MAAlD,CAAT;EACA,YAAM1uF,OAAO,GAAG,IAAhB;EACA,UAAIA,OAAJ,EAAauyF,SAAS,GAAG,IAAZ;EACd,KAJD,CAIE,OAAOjsG,EAAP,EAAW;EACX,UAAIA,EAAE,YAAYzO,gBAAlB,EACE26G,cAAc,GAAGlsG,EAAjB,CADF,KAEK,MAAMA,EAAN;EACN,KARD,SAQU;;EACV,QAAI,CAACisG,SAAL,EACE,IAAI;EACFh9G,MAAAA,MAAM,GAAGm8G,aAAa,CAACE,SAAd,CAAwB,KAAKxgE,KAAL,CAAW,CAAX,CAAxB,EAAuC,KAAKA,KAAL,CAAW,CAAX,CAAvC,EAAsDs9D,MAAtD,CAAT;EACD,KAFD,CAEE,OAAOpoG,EAAP,EAAW;EACX,UAAIA,EAAE,YAAYzO,gBAAlB,EACE,MAAM26G,cAAN,CADF,KAEK,MAAMlsG,EAAN;EACN,KAND,SAMU;EAEZ,WAAO/Q,MAAP;EACD;;EAjDwC;;ECA5B,MAAMk9G,sBAAN,CAA6B;EAC1C/9G,EAAAA,WAAW,GAAG;EACZ+9G,IAAAA,sBAAsB,CAAC16G,YAAvB,CAAoCC,KAApC,CAA0C,IAA1C,EAAgDC,SAAhD;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK40D,GAAL,GAAW,IAAI76B,qBAAJ,EAAX;EACA,SAAK4gF,qBAAL,GAA6B,IAA7B;EACA,SAAKC,IAAL,GAAY,IAAZ;;EACA,QAAI16G,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMwtC,EAAE,GAAGztC,SAAS,CAAC,CAAD,CAApB;EACA,WAAK26G,uBAAL,CAA6BltE,EAAE,CAAC5wB,iBAAH,EAA7B;EACA,WAAK69F,IAAL,GAAY,IAAIxzG,KAAJ,CAAU,CAAV,EAAaC,IAAb,CAAkB,IAAlB,CAAZ;EACA,WAAKuzG,IAAL,CAAU,CAAV,IAAe,IAAIrzC,aAAJ,CAAkB,CAAlB,EAAqB55B,EAArB,CAAf;EAED,KAND,MAMO,IAAIztC,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMwtC,EAAE,GAAGztC,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyB0tC,EAAE,GAAG1tC,SAAS,CAAC,CAAD,CAAvC;EACAw6G,MAAAA,sBAAsB,CAAC16G,YAAvB,CAAoCI,IAApC,CAAyC,IAAzC,EAA+CutC,EAA/C,EAAmDC,EAAnD,EAAuDyY,gBAAgB,CAACW,qBAAxE;EACD,KAHM,MAGA,IAAI9mD,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMwtC,EAAE,GAAGztC,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyB0tC,EAAE,GAAG1tC,SAAS,CAAC,CAAD,CAAvC;EAAA,YAA4CujE,gBAAgB,GAAGvjE,SAAS,CAAC,CAAD,CAAxE;EACA,UAAIytC,EAAE,CAAC5wB,iBAAH,GAAuBza,SAAvB,CAAiCsrC,EAAE,CAAC7wB,iBAAH,EAAjC,KAA4D,CAAhE,EAAmE,KAAK89F,uBAAL,CAA6BltE,EAAE,CAAC5wB,iBAAH,EAA7B,EAAnE,KAA8H,KAAK89F,uBAAL,CAA6BjtE,EAAE,CAAC7wB,iBAAH,EAA7B;EAC9H,WAAK69F,IAAL,GAAY,IAAIxzG,KAAJ,CAAU,CAAV,EAAaC,IAAb,CAAkB,IAAlB,CAAZ;EACA,WAAKuzG,IAAL,CAAU,CAAV,IAAe,IAAIrzC,aAAJ,CAAkB,CAAlB,EAAqB55B,EAArB,EAAyB81B,gBAAzB,CAAf;EACA,WAAKm3C,IAAL,CAAU,CAAV,IAAe,IAAIrzC,aAAJ,CAAkB,CAAlB,EAAqB35B,EAArB,EAAyB61B,gBAAzB,CAAf;EACD;EACF;;EACDwzC,EAAAA,cAAc,CAAC35G,CAAD,EAAI;EAChB,WAAO,KAAKs9G,IAAL,CAAUt9G,CAAV,EAAai0C,WAAb,EAAP;EACD;;EACDspE,EAAAA,uBAAuB,CAACvtF,EAAD,EAAK;EAC1B,SAAKqtF,qBAAL,GAA6BrtF,EAA7B;;EACA,SAAKsnC,GAAL,CAAS17B,iBAAT,CAA2B,KAAKyhF,qBAAhC;EACD;;EA/ByC;;ECc7B,MAAMzD,SAAN,SAAwBwD,sBAAxB,CAA+C;EAC5D/9G,EAAAA,WAAW,GAAG;EACZ;EACAu6G,IAAAA,SAAS,CAACl3G,YAAV,CAAuBC,KAAvB,CAA6B,IAA7B,EAAmCC,SAAnC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKioE,UAAL,GAAkB,IAAIhhB,YAAJ,EAAlB;EACA,SAAKjU,SAAL,GAAiB,IAAjB;EACA,SAAK8nE,WAAL,GAAmB,IAAnB;EACA,SAAKzpD,MAAL,GAAc,IAAd;EACA,SAAKynC,SAAL,GAAiB,IAAI2D,QAAJ,EAAjB;EACA,SAAKse,eAAL,GAAuB,IAAIz1G,SAAJ,EAAvB;EACA,SAAKkxG,eAAL,GAAuB,IAAIlxG,SAAJ,EAAvB;EACA,SAAKmyG,gBAAL,GAAwB,IAAInyG,SAAJ,EAAxB;EACA,UAAMqoC,EAAE,GAAGztC,SAAS,CAAC,CAAD,CAApB;EAAA,UAAyB0tC,EAAE,GAAG1tC,SAAS,CAAC,CAAD,CAAvC;EACAw6G,IAAAA,sBAAsB,CAAC16G,YAAvB,CAAoCI,IAApC,CAAyC,IAAzC,EAA+CutC,EAA/C,EAAmDC,EAAnD;EACA,SAAKyjB,MAAL,GAAc,IAAIwU,WAAJ,CAAgB,IAAIg2B,kBAAJ,EAAhB,CAAd;EACA,SAAK7oD,SAAL,GAAiBrF,EAAE,CAAC5yB,UAAH,EAAjB;EACD;;EACD,SAAO8+F,SAAP,CAAiBhpF,KAAjB,EAAwBmqF,KAAxB,EAA+BrE,MAA/B,EAAuC;EACrC,UAAMsE,GAAG,GAAG,IAAI/D,SAAJ,CAAcrmF,KAAd,EAAqBmqF,KAArB,CAAZ;EACA,UAAME,MAAM,GAAGD,GAAG,CAAC1uD,iBAAJ,CAAsBoqD,MAAtB,CAAf;EACA,WAAOuE,MAAP;EACD;;EACD,SAAOr8D,KAAP,CAAankC,IAAb,EAAmB5Y,KAAnB,EAA0B;EACxB,QAAI4Y,IAAI,CAAC9V,OAAL,MAAkB9C,KAAK,CAAC8C,OAAN,EAAtB,EAAuC;EACrC,UAAI8V,IAAI,CAAC9V,OAAL,MAAkB9C,KAAK,CAAC8C,OAAN,EAAtB,EAAuC,OAAOsyG,SAAS,CAACiE,iBAAV,CAA4BjE,SAAS,CAAC4C,KAAtC,EAA6Cp/F,IAA7C,EAAmD5Y,KAAnD,EAA0D4Y,IAAI,CAACK,UAAL,EAA1D,CAAP;EACvC,UAAIL,IAAI,CAAC9V,OAAL,EAAJ,EAAoB,OAAO9C,KAAK,CAACe,IAAN,EAAP;EACpB,UAAIf,KAAK,CAAC8C,OAAN,EAAJ,EAAqB,OAAO8V,IAAI,CAAC7X,IAAL,EAAP;EACtB;;EACD,QAAI6X,IAAI,CAACE,oBAAL,MAA+B9Y,KAAK,CAAC8Y,oBAAN,EAAnC,EAAiE,MAAM,IAAI3d,wBAAJ,CAA6B,2DAA7B,CAAN;EACjE,WAAOs9G,qBAAqB,CAACV,SAAtB,CAAgCn/F,IAAhC,EAAsC5Y,KAAtC,EAA6Co1G,SAAS,CAAC4C,KAAvD,CAAP;EACD;;EACD,SAAO1vG,YAAP,CAAoBsQ,IAApB,EAA0B5Y,KAA1B,EAAiC;EAC/B,QAAI4Y,IAAI,CAAC9V,OAAL,MAAkB9C,KAAK,CAAC8C,OAAN,EAAtB,EAAuC,OAAOsyG,SAAS,CAACiE,iBAAV,CAA4BjE,SAAS,CAACK,YAAtC,EAAoD78F,IAApD,EAA0D5Y,KAA1D,EAAiE4Y,IAAI,CAACK,UAAL,EAAjE,CAAP;;EACvC,QAAIL,IAAI,CAACE,oBAAL,EAAJ,EAAiC;EAC/B,YAAM4vB,EAAE,GAAG1oC,KAAX;EACA,aAAO+qC,wBAAwB,CAAC3gB,GAAzB,CAA6BxR,IAA7B,EAAmC,IAAK,MAAM;EACnD,YAAInX,WAAJ,GAAkB;EAChB,iBAAO,CAACssC,KAAD,CAAP;EACD;;EACD3jB,QAAAA,GAAG,CAACzQ,CAAD,EAAI;EACL,iBAAOy7F,SAAS,CAAC9sG,YAAV,CAAuBqR,CAAvB,EAA0B+uB,EAA1B,CAAP;EACD;;EANkD,OAAX,EAAnC,CAAP;EAQD;;EACD,WAAO+vE,qBAAqB,CAACV,SAAtB,CAAgCn/F,IAAhC,EAAsC5Y,KAAtC,EAA6Co1G,SAAS,CAACK,YAAvD,CAAP;EACD;;EACD,SAAOwC,aAAP,CAAqBr/F,IAArB,EAA2B5Y,KAA3B,EAAkC;EAChC,QAAI4Y,IAAI,CAAC9V,OAAL,MAAkB9C,KAAK,CAAC8C,OAAN,EAAtB,EAAuC;EACrC,UAAI8V,IAAI,CAAC9V,OAAL,MAAkB9C,KAAK,CAAC8C,OAAN,EAAtB,EAAuC,OAAOsyG,SAAS,CAACiE,iBAAV,CAA4BjE,SAAS,CAAC8C,aAAtC,EAAqDt/F,IAArD,EAA2D5Y,KAA3D,EAAkE4Y,IAAI,CAACK,UAAL,EAAlE,CAAP;EACvC,UAAIL,IAAI,CAAC9V,OAAL,EAAJ,EAAoB,OAAO9C,KAAK,CAACe,IAAN,EAAP;EACpB,UAAIf,KAAK,CAAC8C,OAAN,EAAJ,EAAqB,OAAO8V,IAAI,CAAC7X,IAAL,EAAP;EACtB;;EACD,QAAI6X,IAAI,CAACE,oBAAL,MAA+B9Y,KAAK,CAAC8Y,oBAAN,EAAnC,EAAiE,MAAM,IAAI3d,wBAAJ,CAA6B,2DAA7B,CAAN;EACjE,WAAOs9G,qBAAqB,CAACV,SAAtB,CAAgCn/F,IAAhC,EAAsC5Y,KAAtC,EAA6Co1G,SAAS,CAAC8C,aAAvD,CAAP;EACD;;EACD,SAAOoB,eAAP,CAAuBzE,MAAvB,EAA+BhpE,EAA/B,EAAmCC,EAAnC,EAAuC;EACrC,UAAMytE,IAAI,GAAG1tE,EAAE,CAAC/3B,YAAH,EAAb;EACA,UAAM0lG,IAAI,GAAG1tE,EAAE,CAACh4B,YAAH,EAAb;EACA,QAAIwlG,eAAe,GAAG,CAAC,CAAvB;;EACA,YAAQzE,MAAR;EACA,WAAKO,SAAS,CAACK,YAAf;EACE6D,QAAAA,eAAe,GAAG7+G,IAAI,CAAC+M,GAAL,CAAS+xG,IAAT,EAAeC,IAAf,CAAlB;EACA;;EACF,WAAKpE,SAAS,CAAC4C,KAAf;EACEsB,QAAAA,eAAe,GAAG7+G,IAAI,CAACiN,GAAL,CAAS6xG,IAAT,EAAeC,IAAf,CAAlB;EACA;;EACF,WAAKpE,SAAS,CAACgD,UAAf;EACEkB,QAAAA,eAAe,GAAGC,IAAlB;EACA;;EACF,WAAKnE,SAAS,CAAC8C,aAAf;EACEoB,QAAAA,eAAe,GAAG7+G,IAAI,CAACiN,GAAL,CAAS6xG,IAAT,EAAeC,IAAf,CAAlB;EACA;EAZF;;EAcA,WAAOF,eAAP;EACD;;EACD,SAAOD,iBAAP,CAAyBI,aAAzB,EAAwC13G,CAAxC,EAA2CC,CAA3C,EAA8CwvC,QAA9C,EAAwD;EACtD,QAAI91C,MAAM,GAAG,IAAb;EACA,UAAMg+G,SAAS,GAAGtE,SAAS,CAACkE,eAAV,CAA0BG,aAA1B,EAAyC13G,CAAzC,EAA4CC,CAA5C,CAAlB;EACA,WAAOtG,MAAM,GAAG81C,QAAQ,CAAC/iB,WAAT,CAAqBirF,SAArB,CAAhB;EACD;;EACD,SAAOvB,UAAP,CAAkBv/F,IAAlB,EAAwB5Y,KAAxB,EAA+B;EAC7B,QAAI4Y,IAAI,CAAC9V,OAAL,EAAJ,EAAoB,OAAOsyG,SAAS,CAACiE,iBAAV,CAA4BjE,SAAS,CAACgD,UAAtC,EAAkDx/F,IAAlD,EAAwD5Y,KAAxD,EAA+D4Y,IAAI,CAACK,UAAL,EAA/D,CAAP;EACpB,QAAIjZ,KAAK,CAAC8C,OAAN,EAAJ,EAAqB,OAAO8V,IAAI,CAAC7X,IAAL,EAAP;EACrB,QAAI6X,IAAI,CAACE,oBAAL,MAA+B9Y,KAAK,CAAC8Y,oBAAN,EAAnC,EAAiE,MAAM,IAAI3d,wBAAJ,CAA6B,2DAA7B,CAAN;EACjE,WAAOs9G,qBAAqB,CAACV,SAAtB,CAAgCn/F,IAAhC,EAAsC5Y,KAAtC,EAA6Co1G,SAAS,CAACgD,UAAvD,CAAP;EACD;;EACD,SAAO/C,YAAP,GAAsB;EACpB,QAAIj3G,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMuzD,KAAK,GAAGxzD,SAAS,CAAC,CAAD,CAAvB;EAAA,YAA4By2G,MAAM,GAAGz2G,SAAS,CAAC,CAAD,CAA9C;EACA,YAAMu7G,IAAI,GAAG/nD,KAAK,CAACnX,WAAN,CAAkB,CAAlB,CAAb;EACA,YAAMm/D,IAAI,GAAGhoD,KAAK,CAACnX,WAAN,CAAkB,CAAlB,CAAb;EACA,aAAO26D,SAAS,CAACC,YAAV,CAAuBsE,IAAvB,EAA6BC,IAA7B,EAAmC/E,MAAnC,CAAP;EACD,KALD,MAKO,IAAIz2G,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,UAAIs7G,IAAI,GAAGv7G,SAAS,CAAC,CAAD,CAApB;EAAA,UAAyBw7G,IAAI,GAAGx7G,SAAS,CAAC,CAAD,CAAzC;EAAA,UAA8Cq7G,aAAa,GAAGr7G,SAAS,CAAC,CAAD,CAAvE;EACA,UAAIu7G,IAAI,KAAKx8E,QAAQ,CAACI,QAAtB,EAAgCo8E,IAAI,GAAGx8E,QAAQ,CAACK,QAAhB;EAChC,UAAIo8E,IAAI,KAAKz8E,QAAQ,CAACI,QAAtB,EAAgCq8E,IAAI,GAAGz8E,QAAQ,CAACK,QAAhB;;EAChC,cAAQi8E,aAAR;EACA,aAAKrE,SAAS,CAACK,YAAf;EACE,iBAAOkE,IAAI,KAAKx8E,QAAQ,CAACK,QAAlB,IAA8Bo8E,IAAI,KAAKz8E,QAAQ,CAACK,QAAvD;;EACF,aAAK43E,SAAS,CAAC4C,KAAf;EACE,iBAAO2B,IAAI,KAAKx8E,QAAQ,CAACK,QAAlB,IAA8Bo8E,IAAI,KAAKz8E,QAAQ,CAACK,QAAvD;;EACF,aAAK43E,SAAS,CAACgD,UAAf;EACE,iBAAOuB,IAAI,KAAKx8E,QAAQ,CAACK,QAAlB,IAA8Bo8E,IAAI,KAAKz8E,QAAQ,CAACK,QAAvD;;EACF,aAAK43E,SAAS,CAAC8C,aAAf;EACE,iBAAOyB,IAAI,KAAKx8E,QAAQ,CAACK,QAAlB,IAA8Bo8E,IAAI,KAAKz8E,QAAQ,CAACK,QAAhD,IAA4Dm8E,IAAI,KAAKx8E,QAAQ,CAACK,QAAlB,IAA8Bo8E,IAAI,KAAKz8E,QAAQ,CAACK,QAAnH;EARF;;EAUA,aAAO,KAAP;EACD;EACF;;EACDu+D,EAAAA,gBAAgB,CAACl7F,CAAD,EAAI;EAClB,UAAMm7F,YAAY,GAAG,KAAKhF,SAAL,CAAe+D,aAAf,CAA6Bl6F,CAA7B,CAArB;;EACA,QAAIm7F,YAAY,KAAK,IAArB,EAA2B;EACzB,YAAMC,aAAa,GAAGD,YAAY,CAAC1+B,QAAb,EAAtB;EACA,UAAI4+B,YAAY,GAAGr7F,CAAC,CAACy8D,QAAF,EAAnB;;EACA,UAAI,CAAC0+B,YAAY,CAACl9B,gBAAb,CAA8Bj+D,CAA9B,CAAL,EAAuC;EACrCq7F,QAAAA,YAAY,GAAG,IAAI7kC,KAAJ,CAAUx2D,CAAC,CAACy8D,QAAF,EAAV,CAAf;EACA4+B,QAAAA,YAAY,CAACtlC,IAAb;EACD;;EACD,YAAM4M,KAAK,GAAGw4B,YAAY,CAAC5/B,QAAb,EAAd;EACA,UAAIoH,KAAK,CAACv7D,MAAN,EAAJ,EACEu7D,KAAK,CAAC5gE,GAAN,CAAUq5F,aAAV;EAEFz4B,MAAAA,KAAK,CAAC5gE,GAAN,CAAUs5F,YAAV;EACAD,MAAAA,aAAa,CAACxlC,KAAd,CAAoBylC,YAApB;EACD,KAbD,MAaO;EACL,WAAKlF,SAAL,CAAep0F,GAAf,CAAmB/B,CAAnB;EACD;EACF;;EACDi0G,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAKvlD,MAAZ;EACD;;EACDsqD,EAAAA,0BAA0B,GAAG;EAC3B,SAAK,IAAIlvF,EAAE,GAAG,KAAK4kC,MAAL,CAAYsV,WAAZ,GAA0B9hE,QAA1B,EAAd,EAAoD4nB,EAAE,CAAChmB,OAAH,EAApD,GAAoE;EAClE,YAAM46D,EAAE,GAAG50C,EAAE,CAACjmB,IAAH,EAAX;EACA,YAAM0oD,GAAG,GAAGmS,EAAE,CAAC6D,MAAH,EAAZ;;EACA,UAAI7D,EAAE,CAACrC,UAAH,MAAmB9P,GAAG,CAAC8P,UAAJ,EAAvB,EAAyC;EACvCqC,QAAAA,EAAE,CAACtC,WAAH,CAAe,KAAf;EACA7P,QAAAA,GAAG,CAAC6P,WAAJ,CAAgB,KAAhB;EACD;EACF;EACF;;EACD44C,EAAAA,aAAa,CAACj1G,KAAD,EAAQ;EACnB,QAAI,KAAKu8D,SAAL,CAAev8D,KAAf,EAAsB,KAAK8zG,eAA3B,CAAJ,EAAiD,OAAO,IAAP;EACjD,QAAI,KAAKv3C,SAAL,CAAev8D,KAAf,EAAsB,KAAKq4G,eAA3B,CAAJ,EAAiD,OAAO,IAAP;EACjD,WAAO,KAAP;EACD;;EACD7V,EAAAA,eAAe,CAAC0W,eAAD,EAAkBC,cAAlB,EAAkCpuB,cAAlC,EAAkDquB,MAAlD,EAA0D;EACvE,UAAMtrF,QAAQ,GAAG,IAAIlrB,SAAJ,EAAjB;EACAkrB,IAAAA,QAAQ,CAAC7rB,MAAT,CAAgBi3G,eAAhB;EACAprF,IAAAA,QAAQ,CAAC7rB,MAAT,CAAgBk3G,cAAhB;EACArrF,IAAAA,QAAQ,CAAC7rB,MAAT,CAAgB8oF,cAAhB;EACA,QAAIj9D,QAAQ,CAAC5rB,OAAT,EAAJ,EAAwB,OAAOsyG,SAAS,CAACiE,iBAAV,CAA4BW,MAA5B,EAAoC,KAAKlB,IAAL,CAAU,CAAV,EAAarpE,WAAb,EAApC,EAAgE,KAAKqpE,IAAL,CAAU,CAAV,EAAarpE,WAAb,EAAhE,EAA4F,KAAKyB,SAAjG,CAAP;EACxB,WAAO,KAAKA,SAAL,CAAexrB,aAAf,CAA6BgJ,QAA7B,CAAP;EACD;;EACDkrE,EAAAA,cAAc,GAAG;EACf,SAAK,IAAIx1B,MAAM,GAAG,KAAK7U,MAAL,CAAYiW,QAAZ,GAAuBziE,QAAvB,EAAlB,EAAqDqhE,MAAM,CAACz/D,OAAP,EAArD,GAAyE;EACvE,YAAMk1C,IAAI,GAAGuqB,MAAM,CAAC1/D,IAAP,EAAb;EACAm1C,MAAAA,IAAI,CAACylB,QAAL,GAAgBs6B,cAAhB;EACD;EACF;;EACDz8B,EAAAA,SAAS,CAACv8D,KAAD,EAAQ8tB,QAAR,EAAkB;EACzB,SAAK,IAAI/D,EAAE,GAAG+D,QAAQ,CAAC3rB,QAAT,EAAd,EAAmC4nB,EAAE,CAAChmB,OAAH,EAAnC,GAAmD;EACjD,YAAMiU,IAAI,GAAG+R,EAAE,CAACjmB,IAAH,EAAb;;EACA,YAAM83C,GAAG,GAAG,KAAK2pB,UAAL,CAAgBnuB,MAAhB,CAAuBp3C,KAAvB,EAA8BgY,IAA9B,CAAZ;;EACA,UAAI4jC,GAAG,KAAKrf,QAAQ,CAACG,QAArB,EAA+B,OAAO,IAAP;EAChC;;EACD,WAAO,KAAP;EACD;;EACD28E,EAAAA,qBAAqB,GAAG;EACtB,UAAMC,QAAQ,GAAG,IAAI12G,SAAJ,EAAjB;;EACA,SAAK,IAAImnB,EAAE,GAAG,KAAKqsE,SAAL,CAAej0F,QAAf,EAAd,EAAyC4nB,EAAE,CAAChmB,OAAH,EAAzC,GAAyD;EACvD,YAAM9D,CAAC,GAAG8pB,EAAE,CAACjmB,IAAH,EAAV;;EACA,UAAI7D,CAAC,CAACy9D,WAAF,EAAJ,EAAqB;EACnB3zC,QAAAA,EAAE,CAACznB,MAAH;EACAg3G,QAAAA,QAAQ,CAACt3G,GAAT,CAAa/B,CAAC,CAACk9D,gBAAF,EAAb;EACD;EACF;;EACD,SAAKi5B,SAAL,CAAen0F,MAAf,CAAsBq3G,QAAtB;EACD;;EACDC,EAAAA,mBAAmB,GAAG;EACpB,SAAK,IAAI/1C,MAAM,GAAG,KAAK7U,MAAL,CAAYiW,QAAZ,GAAuBziE,QAAvB,EAAlB,EAAqDqhE,MAAM,CAACz/D,OAAP,EAArD,GAAyE;EACvE,YAAMk1C,IAAI,GAAGuqB,MAAM,CAAC1/D,IAAP,EAAb;EACA,YAAM8yD,GAAG,GAAG3d,IAAI,CAACylB,QAAL,GAAgBhC,QAAhB,EAAZ;EACAzjB,MAAAA,IAAI,CAACyjB,QAAL,GAAgB7G,KAAhB,CAAsBe,GAAtB;EACD;EACF;;EACD/M,EAAAA,iBAAiB,CAACgvD,aAAD,EAAgB;EAC/B,SAAKW,cAAL,CAAoBX,aAApB;EACA,WAAO,KAAKT,WAAZ;EACD;;EACDqB,EAAAA,iBAAiB,CAAChqD,KAAD,EAAQ;EACvB,SAAK,IAAI70D,CAAC,GAAG60D,KAAK,CAACttD,QAAN,EAAb,EAA+BvH,CAAC,CAACmJ,OAAF,EAA/B,GAA8C;EAC5C,YAAM9D,CAAC,GAAGrF,CAAC,CAACkJ,IAAF,EAAV;EACA,WAAKq3F,gBAAL,CAAsBl7F,CAAtB;EACD;EACF;;EACDu5G,EAAAA,cAAc,CAACvF,MAAD,EAAS;EACrB,SAAKyF,UAAL,CAAgB,CAAhB;EACA,SAAKA,UAAL,CAAgB,CAAhB;;EACA,SAAKxB,IAAL,CAAU,CAAV,EAAavyC,gBAAb,CAA8B,KAAKzT,GAAnC,EAAwC,KAAxC;;EACA,SAAKgmD,IAAL,CAAU,CAAV,EAAavyC,gBAAb,CAA8B,KAAKzT,GAAnC,EAAwC,KAAxC;;EACA,SAAKgmD,IAAL,CAAU,CAAV,EAAa7xC,wBAAb,CAAsC,KAAK6xC,IAAL,CAAU,CAAV,CAAtC,EAAoD,KAAKhmD,GAAzD,EAA8D,IAA9D;;EACA,UAAMynD,cAAc,GAAG,IAAI/2G,SAAJ,EAAvB;;EACA,SAAKs1G,IAAL,CAAU,CAAV,EAAa/xC,iBAAb,CAA+BwzC,cAA/B;;EACA,SAAKzB,IAAL,CAAU,CAAV,EAAa/xC,iBAAb,CAA+BwzC,cAA/B;EAEA,SAAKF,iBAAL,CAAuBE,cAAvB;EACA,SAAKC,uBAAL;EACA,SAAKP,qBAAL;EACA9F,IAAAA,mBAAmB,CAACtW,UAApB,CAA+B,KAAK7G,SAAL,CAAe13B,QAAf,EAA/B;;EACA,SAAK/P,MAAL,CAAY8F,QAAZ,CAAqB,KAAK2hC,SAAL,CAAe13B,QAAf,EAArB;;EACA,SAAKy4B,gBAAL;EACA,SAAK0iB,oBAAL;EACA,SAAKC,mBAAL,CAAyB7F,MAAzB;EACA,SAAKgF,0BAAL;EACA,UAAMrd,WAAW,GAAG,IAAI7R,cAAJ,CAAmB,KAAKz5C,SAAxB,CAApB;EACAsrD,IAAAA,WAAW,CAAC55F,GAAZ,CAAgB,KAAK2sD,MAArB;EACA,SAAK0pD,eAAL,GAAuBzc,WAAW,CAAC5rD,WAAZ,EAAvB;EACA,UAAM+pE,WAAW,GAAG,IAAIpG,WAAJ,CAAgB,IAAhB,EAAsB,KAAKrjE,SAA3B,EAAsC,KAAKi1B,UAA3C,CAApB;EACA,SAAKuuC,eAAL,GAAuBiG,WAAW,CAAChnC,KAAZ,CAAkBkhC,MAAlB,CAAvB;EACA,UAAM+F,YAAY,GAAG,IAAIlF,YAAJ,CAAiB,IAAjB,EAAuB,KAAKxkE,SAA5B,EAAuC,KAAKi1B,UAA5C,CAArB;EACA,SAAKwvC,gBAAL,GAAwBiF,YAAY,CAACjnC,KAAb,CAAmBkhC,MAAnB,CAAxB;EACA,SAAKmE,WAAL,GAAmB,KAAK5V,eAAL,CAAqB,KAAKuS,gBAA1B,EAA4C,KAAKjB,eAAjD,EAAkE,KAAKuE,eAAvE,EAAwFpE,MAAxF,CAAnB;EACD;;EACDgG,EAAAA,mBAAmB,CAAC/+G,CAAD,EAAIo5G,WAAJ,EAAiB;EAClC,UAAM14D,GAAG,GAAG,KAAK2pB,UAAL,CAAgBnuB,MAAhB,CAAuBl8C,CAAC,CAACgJ,aAAF,EAAvB,EAA0C,KAAKg0G,IAAL,CAAU5D,WAAV,EAAuBzlE,WAAvB,EAA1C,CAAZ;;EACA3zC,IAAAA,CAAC,CAACwhE,QAAF,GAAarG,WAAb,CAAyBi+C,WAAzB,EAAsC14D,GAAtC;EACD;;EACD89D,EAAAA,UAAU,CAACz6C,QAAD,EAAW;EACnB,SAAK,IAAIrkE,CAAC,GAAG,KAAKs9G,IAAL,CAAUj5C,QAAV,EAAoByE,eAApB,EAAb,EAAoD9oE,CAAC,CAACmJ,OAAF,EAApD,GAAmE;EACjE,YAAMm2G,SAAS,GAAGt/G,CAAC,CAACkJ,IAAF,EAAlB;;EACA,YAAMq2G,OAAO,GAAG,KAAKxrD,MAAL,CAAY+Q,OAAZ,CAAoBw6C,SAAS,CAACh2G,aAAV,EAApB,CAAhB;;EACAi2G,MAAAA,OAAO,CAAC19C,QAAR,CAAiBwC,QAAjB,EAA2Bi7C,SAAS,CAACx9C,QAAV,GAAqB7iB,WAArB,CAAiColB,QAAjC,CAA3B;EACD;EACF;;EACD66C,EAAAA,mBAAmB,CAAC7F,MAAD,EAAS;EAC1B,SAAK,IAAIlqF,EAAE,GAAG,KAAK4kC,MAAL,CAAYsV,WAAZ,GAA0B9hE,QAA1B,EAAd,EAAoD4nB,EAAE,CAAChmB,OAAH,EAApD,GAAoE;EAClE,YAAM46D,EAAE,GAAG50C,EAAE,CAACjmB,IAAH,EAAX;EACA,YAAMktD,KAAK,GAAG2N,EAAE,CAACjC,QAAH,EAAd;EACA,UAAI1L,KAAK,CAACmF,MAAN,MAAkB,CAACwI,EAAE,CAACkD,kBAAH,EAAnB,IAA8C2yC,SAAS,CAACC,YAAV,CAAuBzjD,KAAK,CAACnX,WAAN,CAAkB,CAAlB,EAAqBgW,QAAQ,CAAC37C,KAA9B,CAAvB,EAA6D88C,KAAK,CAACnX,WAAN,CAAkB,CAAlB,EAAqBgW,QAAQ,CAAC37C,KAA9B,CAA7D,EAAmG+/F,MAAnG,CAAlD,EACEt1C,EAAE,CAACtC,WAAH,CAAe,IAAf;EAEH;EACF;;EACDu9C,EAAAA,uBAAuB,GAAG;EACxB,SAAK,IAAI7vF,EAAE,GAAG,KAAKqsE,SAAL,CAAej0F,QAAf,EAAd,EAAyC4nB,EAAE,CAAChmB,OAAH,EAAzC,GAAyD;EACvD,YAAM9D,CAAC,GAAG8pB,EAAE,CAACjmB,IAAH,EAAV;EACA,YAAM8yD,GAAG,GAAG32D,CAAC,CAACy8D,QAAF,EAAZ;EACA,YAAMkG,KAAK,GAAG3iE,CAAC,CAACu7D,QAAF,EAAd;;EACA,UAAI,CAACoH,KAAK,CAACv7D,MAAN,EAAL,EAAqB;EACnBu7D,QAAAA,KAAK,CAAC9oD,SAAN;;EACA,aAAK,IAAIlf,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,CAApB,EAAuBA,CAAC,EAAxB,EACE,IAAI,CAACg8D,GAAG,CAACvvD,MAAJ,CAAWzM,CAAX,CAAD,IAAkBg8D,GAAG,CAACT,MAAJ,EAAlB,IAAkC,CAACyM,KAAK,CAACv7D,MAAN,CAAazM,CAAb,CAAvC,EACE,IAAIgoE,KAAK,CAAC/G,QAAN,CAAejhE,CAAf,MAAsB,CAA1B,EAA6B;EAC3Bg8D,UAAAA,GAAG,CAACS,MAAJ,CAAWz8D,CAAX;EACD,SAFD,MAEO;EACL+C,UAAAA,MAAM,CAACE,MAAP,CAAc,CAAC+kE,KAAK,CAACv7D,MAAN,CAAazM,CAAb,EAAgBi1D,QAAQ,CAACz7C,IAAzB,CAAf,EAA+C,6CAA/C;EACAwiD,UAAAA,GAAG,CAACP,WAAJ,CAAgBz7D,CAAhB,EAAmBi1D,QAAQ,CAACz7C,IAA5B,EAAkCwuD,KAAK,CAAC/oB,WAAN,CAAkBj/C,CAAlB,EAAqBi1D,QAAQ,CAACz7C,IAA9B,CAAlC;EACAzW,UAAAA,MAAM,CAACE,MAAP,CAAc,CAAC+kE,KAAK,CAACv7D,MAAN,CAAazM,CAAb,EAAgBi1D,QAAQ,CAAC37C,KAAzB,CAAf,EAAgD,8CAAhD;EACA0iD,UAAAA,GAAG,CAACP,WAAJ,CAAgBz7D,CAAhB,EAAmBi1D,QAAQ,CAAC37C,KAA5B,EAAmC0uD,KAAK,CAAC/oB,WAAN,CAAkBj/C,CAAlB,EAAqBi1D,QAAQ,CAAC37C,KAA9B,CAAnC;EACD;EAGN;EACF;EACF;;EACDijF,EAAAA,gBAAgB,GAAG;EACjB,SAAK,IAAI3zB,MAAM,GAAG,KAAK7U,MAAL,CAAYiW,QAAZ,GAAuBziE,QAAvB,EAAlB,EAAqDqhE,MAAM,CAACz/D,OAAP,EAArD,GAAyE;EACvE,YAAMk1C,IAAI,GAAGuqB,MAAM,CAAC1/D,IAAP,EAAb;EACAm1C,MAAAA,IAAI,CAACylB,QAAL,GAAgBy4B,gBAAhB,CAAiC,KAAK+gB,IAAtC;EACD;;EACD,SAAKlf,cAAL;EACA,SAAKugB,mBAAL;EACD;;EACDM,EAAAA,oBAAoB,GAAG;EACrB,SAAK,IAAIO,EAAE,GAAG,KAAKzrD,MAAL,CAAYiW,QAAZ,GAAuBziE,QAAvB,EAAd,EAAiDi4G,EAAE,CAACr2G,OAAH,EAAjD,GAAiE;EAC/D,YAAM7I,CAAC,GAAGk/G,EAAE,CAACt2G,IAAH,EAAV;EACA,YAAMktD,KAAK,GAAG91D,CAAC,CAACwhE,QAAF,EAAd;EACA,UAAIxhE,CAAC,CAACmiE,UAAF,EAAJ,EACE,IAAIrM,KAAK,CAAC3pD,MAAN,CAAa,CAAb,CAAJ,EAAqB,KAAK4yG,mBAAL,CAAyB/+G,CAAzB,EAA4B,CAA5B,EAArB,KAA0D,KAAK++G,mBAAL,CAAyB/+G,CAAzB,EAA4B,CAA5B;EAE5DA,MAAAA,CAAC,CAACwjE,QAAF,GAAa05B,eAAb,CAA6BpnC,KAA7B;EACD;EACF;;EACD0jD,EAAAA,YAAY,CAAC10G,KAAD,EAAQ;EAClB,QAAI,KAAKu8D,SAAL,CAAev8D,KAAf,EAAsB,KAAKq4G,eAA3B,CAAJ,EAAiD,OAAO,IAAP;EACjD,WAAO,KAAP;EACD;;EAjS2D;EAmS9D7D,SAAS,CAACK,YAAV,GAAyB,CAAzB;EACAL,SAAS,CAAC4C,KAAV,GAAkB,CAAlB;EACA5C,SAAS,CAACgD,UAAV,GAAuB,CAAvB;EACAhD,SAAS,CAAC8C,aAAV,GAA0B,CAA1B;;;;;;;;ECtTe,MAAM+C,sBAAN,SAAqCp5C,cAArC,CAAkD;EAC/DhnE,EAAAA,WAAW,GAAG;EACZ;EACAogH,IAAAA,sBAAsB,CAAC/8G,YAAvB,CAAoCC,KAApC,CAA0C,IAA1C,EAAgDC,SAAhD;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK8jE,SAAL,GAAiB,IAAjB;EACA,SAAKhW,KAAL,GAAa,IAAb;EACA,SAAKoF,MAAL,GAAc,CAAC,CAAf;EACA,UAAM9yC,IAAI,GAAGlgB,SAAS,CAAC,CAAD,CAAtB;EAAA,UAA2BmgB,EAAE,GAAGngB,SAAS,CAAC,CAAD,CAAzC;EAAA,UAA8CyuD,WAAW,GAAGzuD,SAAS,CAAC,CAAD,CAArE;EAAA,UAA0EopG,aAAa,GAAGppG,SAAS,CAAC,CAAD,CAAnG;EACAyjE,IAAAA,cAAY,CAAC3jE,YAAb,CAA0BI,IAA1B,CAA+B,IAA/B,EAAqCggB,IAArC,EAA2CC,EAA3C,EAA+CsuC,WAA/C,EAA4D26C,aAA5D;EACD;;EACDjlC,EAAAA,OAAO,GAAG;EACR,WAAO,KAAKvW,KAAZ;EACD;;EACDtQ,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAKsmB,SAAL,KAAmB,IAA1B;EACD;;EACDk5C,EAAAA,OAAO,CAACh4C,QAAD,EAAW;EAChB,SAAKlB,SAAL,GAAiBkB,QAAjB;EACD;;EACD7F,EAAAA,QAAQ,CAACzL,KAAD,EAAQ;EACd,SAAKR,MAAL,GAAcQ,KAAd;EACD;;EACD0L,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAKlM,MAAZ;EACD;;EACDjE,EAAAA,OAAO,CAACzoD,IAAD,EAAO;EACZ,SAAKsnD,KAAL,GAAatnD,IAAb;EACD;;EACDy2G,EAAAA,OAAO,GAAG;EACR,WAAO,KAAKn5C,SAAZ;EACD;;EAhC8D;;ECAlD,MAAMo5C,cAAN,SAA6B7gD,MAA7B,CAAkC;EAC/C1/D,EAAAA,WAAW,GAAG;EACZ;EACAugH,IAAAA,cAAc,CAACl9G,YAAf,CAA4BC,KAA5B,CAAkC,IAAlC,EAAwCC,SAAxC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKorG,KAAL,GAAa,IAAb;EACA,UAAMjxF,IAAI,GAAGja,SAAS,CAAC,CAAD,CAAtB;EACA,SAAKkrG,KAAL,GAAajxF,IAAb;EACD;;EACDwuF,EAAAA,OAAO,GAAG;EACR,WAAO,KAAKyC,KAAZ;EACD;;EAZ8C;;ECSlC,MAAM+R,uBAAN,CAA8B;EAC3CxgH,EAAAA,WAAW,GAAG;EACZwgH,IAAAA,uBAAuB,CAACn9G,YAAxB,CAAqCC,KAArC,CAA2C,IAA3C,EAAiDC,SAAjD;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKgrF,gBAAL,GAAwB,IAAIr8D,eAAJ,EAAxB;EACA,SAAKyuF,UAAL,GAAkB,IAAlB;EACA,SAAKC,sBAAL,GAA8B,IAA9B;EACA,UAAM/jB,SAAS,GAAGp5F,SAAS,CAAC,CAAD,CAA3B;EACA,SAAKk9G,UAAL,GAAkB9jB,SAAlB;EACD;;EACD,SAAOgkB,kBAAP,CAA0B56G,KAA1B,EAAiC6gB,EAAjC,EAAqC;EACnC,SAAK,IAAIjmB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGoF,KAAK,CAACvC,MAA1B,EAAkC7C,CAAC,EAAnC,EACE,IAAI,CAACoF,KAAK,CAACpF,CAAD,CAAL,CAASmD,MAAT,CAAgB8iB,EAAhB,CAAL,EAA0B,OAAO7gB,KAAK,CAACpF,CAAD,CAAZ;;EAE5B,WAAO,IAAP;EACD;;EACDigH,EAAAA,iBAAiB,CAACnnG,IAAD,EAAO8uE,KAAP,EAAc;EAC7B,QAAI9uE,IAAI,CAACxR,OAAL,EAAJ,EAAoB,OAAO,IAAP;EACpB,UAAMuC,GAAG,GAAGiP,IAAI,CAACsM,cAAL,EAAZ;EACA,UAAMy7D,GAAG,GAAGh3E,GAAG,CAAC,CAAD,CAAf;EACA,UAAMghG,GAAG,GAAGgV,uBAAuB,CAACG,kBAAxB,CAA2Cn2G,GAA3C,EAAgDg3E,GAAhD,CAAZ;EACA,UAAMx7E,CAAC,GAAGuiF,KAAK,CAACpe,uBAAN,CAA8BqX,GAA9B,EAAmCgqB,GAAnC,CAAV;EACA,UAAM9mC,EAAE,GAAG6jB,KAAK,CAACje,WAAN,CAAkBtkE,CAAlB,CAAX;EACA,QAAI66G,KAAK,GAAG,IAAZ;EACA,QAAIn8C,EAAE,CAACjC,QAAH,GAAc7iB,WAAd,CAA0B,CAA1B,EAA6BgW,QAAQ,CAAC37C,KAAtC,MAAiDqoB,QAAQ,CAACK,QAA9D,EACEk+E,KAAK,GAAGn8C,EAAR,CADF,KAEK,IAAIA,EAAE,CAAC6D,MAAH,GAAY9F,QAAZ,GAAuB7iB,WAAvB,CAAmC,CAAnC,EAAsCgW,QAAQ,CAAC37C,KAA/C,MAA0DqoB,QAAQ,CAACK,QAAvE,EACHk+E,KAAK,GAAGn8C,EAAE,CAAC6D,MAAH,EAAR;EAEF7kE,IAAAA,MAAM,CAACE,MAAP,CAAci9G,KAAK,KAAK,IAAxB,EAA8B,6CAA9B;EACA,SAAKC,wBAAL,CAA8BD,KAA9B;EACD;;EACDE,EAAAA,mBAAmB,CAACjiG,CAAD,EAAIypE,KAAJ,EAAW;EAC5B,QAAIzpE,CAAC,YAAYmJ,OAAjB,EAA0B;EACxB,YAAMjc,CAAC,GAAG8S,CAAV;EACA,WAAK8hG,iBAAL,CAAuB50G,CAAC,CAACsd,eAAF,EAAvB,EAA4Ci/D,KAA5C;EACD;;EACD,QAAIzpE,CAAC,YAAYgQ,YAAjB,EAA+B;EAC7B,YAAMq5D,EAAE,GAAGrpE,CAAX;;EACA,WAAK,IAAIne,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGwnF,EAAE,CAAClpE,gBAAH,EAApB,EAA2Cte,CAAC,EAA5C,EAAgD;EAC9C,cAAMqL,CAAC,GAAGm8E,EAAE,CAAC7pE,YAAH,CAAgB3d,CAAhB,CAAV;EACA,aAAKigH,iBAAL,CAAuB50G,CAAC,CAACsd,eAAF,EAAvB,EAA4Ci/D,KAA5C;EACD;EACF;EACF;;EACDt+E,EAAAA,aAAa,GAAG;EACd,WAAO,KAAKy2G,sBAAZ;EACD;;EACDM,EAAAA,wBAAwB,CAACz4B,KAAD,EAAQ;EAC9B,SAAK,IAAIz4D,EAAE,GAAGy4D,KAAK,CAACve,WAAN,GAAoB9hE,QAApB,EAAd,EAA8C4nB,EAAE,CAAChmB,OAAH,EAA9C,GAA8D;EAC5D,YAAM46D,EAAE,GAAG50C,EAAE,CAACjmB,IAAH,EAAX;EACA,UAAI66D,EAAE,CAACjC,QAAH,GAAc7iB,WAAd,CAA0B,CAA1B,EAA6BgW,QAAQ,CAAC37C,KAAtC,MAAiDqoB,QAAQ,CAACK,QAA9D,EACE+hC,EAAE,CAACtC,WAAH,CAAe,IAAf;EAEH;EACF;;EACD0+C,EAAAA,wBAAwB,CAAC91G,KAAD,EAAQ;EAC9B,UAAMi2G,OAAO,GAAGj2G,KAAhB;EACA,QAAI05D,EAAE,GAAG15D,KAAT;;EACA,OAAG;EACDtH,MAAAA,MAAM,CAACE,MAAP,CAAc8gE,EAAE,KAAK,IAArB,EAA2B,0BAA3B;EACAA,MAAAA,EAAE,CAACxC,UAAH,CAAc,IAAd;EACAwC,MAAAA,EAAE,GAAGA,EAAE,CAACgD,OAAH,EAAL;EACD,KAJD,QAIShD,EAAE,KAAKu8C,OAJhB;EAKD;;EACDC,EAAAA,cAAc,CAAC7vB,QAAD,EAAW;EACvB,UAAMV,SAAS,GAAG,IAAIhoF,SAAJ,EAAlB;;EACA,SAAK,IAAImnB,EAAE,GAAGuhE,QAAQ,CAACnpF,QAAT,EAAd,EAAmC4nB,EAAE,CAAChmB,OAAH,EAAnC,GAAmD;EACjD,YAAM46D,EAAE,GAAG50C,EAAE,CAACjmB,IAAH,EAAX;;EACA,UAAI66D,EAAE,CAACrC,UAAH,MAAmBqC,EAAE,CAACsE,WAAH,OAAqB,IAA5C,EAAkD;EAChD,cAAMumB,EAAE,GAAG,IAAIC,eAAJ,CAAoB9qB,EAApB,EAAwB,KAAK2pB,gBAA7B,CAAX;EACAkB,QAAAA,EAAE,CAACK,oCAAH;EACA,cAAMF,YAAY,GAAGH,EAAE,CAACE,iBAAH,EAArB;EACAkB,QAAAA,SAAS,CAAC3oF,MAAV,CAAiB0nF,YAAjB;EACD;EACF;;EACD,WAAOiB,SAAP;EACD;;EACDwwB,EAAAA,qBAAqB,CAACxwB,SAAD,EAAY;EAC/B,SAAK,IAAIhwF,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGgwF,SAAS,CAACxoF,IAAV,EAApB,EAAsCxH,CAAC,EAAvC,EAA2C;EACzC,YAAM4uF,EAAE,GAAGoB,SAAS,CAACnoF,GAAV,CAAc7H,CAAd,CAAX;EACA,UAAI4uF,EAAE,CAACV,MAAH,EAAJ,EAAiB;EACjB,YAAMr5B,KAAK,GAAG+5B,EAAE,CAAC9qB,QAAH,EAAd;EACA,UAAIC,EAAE,GAAGlP,KAAK,CAAChtD,GAAN,CAAU,CAAV,CAAT;EACA,UAAIk8D,EAAE,CAACjC,QAAH,GAAc7iB,WAAd,CAA0B,CAA1B,EAA6BgW,QAAQ,CAAC37C,KAAtC,MAAiDqoB,QAAQ,CAACK,QAA9D,EAAwE;;EACxE,WAAK,IAAIliB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG+0C,KAAK,CAACrtD,IAAN,EAApB,EAAkCsY,CAAC,EAAnC,EAAuC;EACrCikD,QAAAA,EAAE,GAAGlP,KAAK,CAAChtD,GAAN,CAAUiY,CAAV,CAAL;;EACA,YAAI,CAACikD,EAAE,CAACvC,SAAH,EAAL,EAAqB;EACnB,eAAKu+C,sBAAL,GAA8Bh8C,EAAE,CAACz6D,aAAH,EAA9B;EACA,iBAAO,IAAP;EACD;EACF;EACF;;EACD,WAAO,KAAP;EACD;;EACDm3G,EAAAA,oBAAoB,GAAG;EACrB,UAAM//B,UAAU,GAAG,IAAI14E,SAAJ,EAAnB;;EACA,SAAK83G,UAAL,CAAgBv0C,iBAAhB,CAAkCmV,UAAlC;;EACA,UAAMkH,KAAK,GAAG,IAAIrf,WAAJ,CAAgB,IAAIg2B,kBAAJ,EAAhB,CAAd;EACA3W,IAAAA,KAAK,CAAC/tB,QAAN,CAAe6mB,UAAf;EACA,SAAK2/B,wBAAL,CAA8Bz4B,KAA9B;EACAA,IAAAA,KAAK,CAAClf,uBAAN;EACA,UAAMsnB,SAAS,GAAG,KAAKuwB,cAAL,CAAoB34B,KAAK,CAACve,WAAN,EAApB,CAAlB;EACA,SAAK+2C,mBAAL,CAAyB,KAAKN,UAAL,CAAgB7rE,WAAhB,EAAzB,EAAwD2zC,KAAxD;EACA,WAAO,CAAC,KAAK44B,qBAAL,CAA2BxwB,SAA3B,CAAR;EACD;;EA1G0C;;ECP9B,MAAM0wB,cAAN,CAAqB;EAClCC,EAAAA,oBAAoB,CAAC5mD,IAAD,EAAOnlB,CAAP,EAAUgsE,MAAV,EAAkBC,MAAlB,EAA0B;EAC5C,UAAM1nG,KAAK,GAAGynG,MAAM,CAACjmF,YAAP,GAAsB,CAApC;EACA,QAAIxhB,KAAK,IAAI4gD,IAAI,CAACv0C,YAAL,EAAT,IAAgCq7F,MAAM,KAAK,IAA/C,EAAqD,OAAO,IAAP;EACrD,QAAI31B,KAAK,GAAGnxB,IAAI,CAACzwD,aAAL,CAAmB6P,KAAnB,CAAZ;EACA,QAAI0nG,MAAM,KAAK,IAAX,IAAmBA,MAAM,CAAClmF,YAAP,KAAwBimF,MAAM,CAACjmF,YAAtD,EAAoEuwD,KAAK,GAAG21B,MAAM,CAACz7G,KAAf;EACpE,UAAMC,CAAC,GAAG,IAAI4/D,OAAJ,CAAYlL,IAAZ,EAAkB6mD,MAAM,CAACx7G,KAAzB,EAAgC8lF,KAAhC,EAAuC,IAAIrvB,KAAJ,CAAU9B,IAAI,CAAC+H,QAAL,EAAV,CAAvC,CAAV;EACAltB,IAAAA,CAAC,CAACxtC,GAAF,CAAM/B,CAAN;EACD;;EACDy7G,EAAAA,oBAAoB,CAAC/mD,IAAD,EAAOnlB,CAAP,EAAUgsE,MAAV,EAAkBpiD,MAAlB,EAA0B;EAC5C,QAAItlD,KAAK,GAAG0nG,MAAM,CAACjmF,YAAnB;;EACA,QAAIimF,MAAM,CAAC7jG,IAAP,KAAgB,GAApB,EAAyB;EACvB,UAAI7D,KAAK,KAAK,CAAd,EAAiB,OAAO,IAAP;EACjBA,MAAAA,KAAK;EACN;;EACD,QAAI+xE,KAAK,GAAGlxB,IAAI,CAACzwD,aAAL,CAAmB4P,KAAnB,CAAZ;EACA,QAAIslD,MAAM,KAAK,IAAX,IAAmBA,MAAM,CAAC7jC,YAAP,IAAuBzhB,KAA9C,EAAqD+xE,KAAK,GAAGzsB,MAAM,CAACp5D,KAAf;EACrD,UAAMgxD,KAAK,GAAG,IAAIyF,KAAJ,CAAU9B,IAAI,CAAC+H,QAAL,EAAV,CAAd;EACA1L,IAAAA,KAAK,CAACgF,IAAN;EACA,UAAM/1D,CAAC,GAAG,IAAI4/D,OAAJ,CAAYlL,IAAZ,EAAkB6mD,MAAM,CAACx7G,KAAzB,EAAgC6lF,KAAhC,EAAuC70B,KAAvC,CAAV;EACAxhB,IAAAA,CAAC,CAACxtC,GAAF,CAAM/B,CAAN;EACD;;EACD07G,EAAAA,eAAe,GAAG;EAChB,QAAIn+G,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMgyD,KAAK,GAAGjyD,SAAS,CAAC,CAAD,CAAvB;EACA,YAAMgyC,CAAC,GAAG,IAAI5sC,SAAJ,EAAV;;EACA,WAAK,IAAIhI,CAAC,GAAG60D,KAAb,EAAoB70D,CAAC,CAACmJ,OAAF,EAApB,GAAmC;EACjC,cAAM9D,CAAC,GAAGrF,CAAC,CAACkJ,IAAF,EAAV;EACA,aAAK63G,eAAL,CAAqB17G,CAArB,EAAwBuvC,CAAxB;EACD;;EACD,aAAOA,CAAP;EACD,KARD,MAQO,IAAIhyC,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMk3D,IAAI,GAAGn3D,SAAS,CAAC,CAAD,CAAtB;EAAA,YAA2BgyC,CAAC,GAAGhyC,SAAS,CAAC,CAAD,CAAxC;EACA,YAAMu/D,MAAM,GAAGpI,IAAI,CAAC0J,uBAAL,EAAf;EACAtB,MAAAA,MAAM,CAACtZ,YAAP;EACA,YAAM15B,EAAE,GAAGgzC,MAAM,CAAC56D,QAAP,EAAX;EACA,UAAIi3D,MAAM,GAAG,IAAb;EACA,UAAIoiD,MAAM,GAAG,IAAb;EACA,UAAI,CAACzxF,EAAE,CAAChmB,OAAH,EAAL,EAAmB,OAAO,IAAP;EACnB,UAAI03G,MAAM,GAAG1xF,EAAE,CAACjmB,IAAH,EAAb;;EACA,SAAG;EACDs1D,QAAAA,MAAM,GAAGoiD,MAAT;EACAA,QAAAA,MAAM,GAAGC,MAAT;EACAA,QAAAA,MAAM,GAAG,IAAT;EACA,YAAI1xF,EAAE,CAAChmB,OAAH,EAAJ,EAAkB03G,MAAM,GAAG1xF,EAAE,CAACjmB,IAAH,EAAT;;EAClB,YAAI03G,MAAM,KAAK,IAAf,EAAqB;EACnB,eAAKE,oBAAL,CAA0B/mD,IAA1B,EAAgCnlB,CAAhC,EAAmCgsE,MAAnC,EAA2CpiD,MAA3C;EACA,eAAKmiD,oBAAL,CAA0B5mD,IAA1B,EAAgCnlB,CAAhC,EAAmCgsE,MAAnC,EAA2CC,MAA3C;EACD;EACF,OATD,QASSD,MAAM,KAAK,IATpB;EAUD;EACF;;EAnDiC;;ECIrB,MAAMI,aAAN,SAA4B/7C,OAA5B,CAAoC;EACjD5lE,EAAAA,WAAW,GAAG;EACZ;EACA2hH,IAAAA,aAAa,CAACt+G,YAAd,CAA2BC,KAA3B,CAAiC,IAAjC,EAAuCC,SAAvC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKu+G,SAAL,GAAiB,IAAIj5G,SAAJ,EAAjB;;EACA,QAAIpF,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMwC,CAAC,GAAGzC,SAAS,CAAC,CAAD,CAAnB;EACAo+G,MAAAA,aAAa,CAACt+G,YAAd,CAA2BI,IAA3B,CAAgC,IAAhC,EAAsC,IAAtC,EAA4CuC,CAA5C;EACD,KAHD,MAGO,IAAIzC,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAuCwC,CAAC,GAAGzC,SAAS,CAAC,CAAD;EACpDqiE,MAAAA,OAAO,CAACviE,YAAR,CAAqBI,IAArB,CAA0B,IAA1B,EAAgCuC,CAAC,CAAC2+D,OAAF,EAAhC,EAA6C3+D,CAAC,CAACiE,aAAF,EAA7C,EAAgEjE,CAAC,CAACygE,qBAAF,EAAhE,EAA2F,IAAIjK,KAAJ,CAAUx2D,CAAC,CAACy8D,QAAF,EAAV,CAA3F;EACA,WAAK5jB,MAAL,CAAY74C,CAAZ;EACD;EACF;;EACD64C,EAAAA,MAAM,CAAC74C,CAAD,EAAI;EACR,SAAK47G,SAAL,CAAe75G,GAAf,CAAmB/B,CAAnB;EACD;;EACDu3D,EAAAA,KAAK,CAACv/B,GAAD,EAAM;EACTA,IAAAA,GAAG,CAACC,OAAJ,CAAY,6BAA6B,KAAKs4B,MAA9C;;EACA,SAAK,IAAIzmC,EAAE,GAAG,KAAK5nB,QAAL,EAAd,EAA+B4nB,EAAE,CAAChmB,OAAH,EAA/B,GAA+C;EAC7C,YAAMygE,EAAE,GAAGz6C,EAAE,CAACjmB,IAAH,EAAX;EACA0gE,MAAAA,EAAE,CAAChN,KAAH,CAASv/B,GAAT;EACAA,MAAAA,GAAG,CAACC,OAAJ;EACD;EACF;;EACD/1B,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAK05G,SAAL,CAAe15G,QAAf,EAAP;EACD;;EACD8hE,EAAAA,WAAW,GAAG;EACZ,WAAO,KAAK43C,SAAZ;EACD;;EACDC,EAAAA,cAAc,CAACjlD,SAAD,EAAYkK,gBAAZ,EAA8B;EAC1C,QAAIld,aAAa,GAAG,CAApB;EACA,QAAIk4D,aAAa,GAAG,KAApB;;EACA,SAAK,IAAIhyF,EAAE,GAAG,KAAK5nB,QAAL,EAAd,EAA+B4nB,EAAE,CAAChmB,OAAH,EAA/B,GAA+C;EAC7C,YAAM9D,CAAC,GAAG8pB,EAAE,CAACjmB,IAAH,EAAV;EACA,YAAM83C,GAAG,GAAG37C,CAAC,CAACy8D,QAAF,GAAa7iB,WAAb,CAAyBgd,SAAzB,CAAZ;EACA,UAAIjb,GAAG,KAAKrf,QAAQ,CAACI,QAArB,EAA+BknB,aAAa;EAC5C,UAAIjI,GAAG,KAAKrf,QAAQ,CAACK,QAArB,EAA+Bm/E,aAAa,GAAG,IAAhB;EAChC;;EACD,QAAIngE,GAAG,GAAGrf,QAAQ,CAACM,IAAnB;EACA,QAAIk/E,aAAJ,EAAmBngE,GAAG,GAAGrf,QAAQ,CAACK,QAAf;EACnB,QAAIinB,aAAa,GAAG,CAApB,EACEjI,GAAG,GAAGipB,aAAa,CAACY,iBAAd,CAAgC1E,gBAAhC,EAAkDld,aAAlD,CAAN;;EAEF,SAAK2M,MAAL,CAAY6F,WAAZ,CAAwBQ,SAAxB,EAAmCjb,GAAnC;EACD;;EACDogE,EAAAA,gBAAgB,CAACnlD,SAAD,EAAYO,IAAZ,EAAkB;EAChC,SAAK,IAAIrtC,EAAE,GAAG,KAAK5nB,QAAL,EAAd,EAA+B4nB,EAAE,CAAChmB,OAAH,EAA/B,GAA+C;EAC7C,YAAM9D,CAAC,GAAG8pB,EAAE,CAACjmB,IAAH,EAAV;;EACA,UAAI7D,CAAC,CAACy8D,QAAF,GAAavG,MAAb,EAAJ,EAA2B;EACzB,cAAMva,GAAG,GAAG37C,CAAC,CAACy8D,QAAF,GAAa7iB,WAAb,CAAyBgd,SAAzB,EAAoCO,IAApC,CAAZ;;EACA,YAAIxb,GAAG,KAAKrf,QAAQ,CAACK,QAArB,EAA+B;EAC7B,eAAK4zB,MAAL,CAAY6F,WAAZ,CAAwBQ,SAAxB,EAAmCO,IAAnC,EAAyC76B,QAAQ,CAACK,QAAlD;;EACA,iBAAO,IAAP;EACD,SAHD,MAGO,IAAIgf,GAAG,KAAKrf,QAAQ,CAACG,QAArB,EAA+B;EACpC,eAAK8zB,MAAL,CAAY6F,WAAZ,CAAwBQ,SAAxB,EAAmCO,IAAnC,EAAyC76B,QAAQ,CAACG,QAAlD;EACD;EACF;EACF;EACF;;EACDggC,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAKlM,MAAZ;EACD;;EACDyrD,EAAAA,iBAAiB,CAACplD,SAAD,EAAY;EAC3B,SAAKmlD,gBAAL,CAAsBnlD,SAAtB,EAAiChH,QAAQ,CAACz7C,IAA1C;EACA,SAAK4nG,gBAAL,CAAsBnlD,SAAtB,EAAiChH,QAAQ,CAAC37C,KAA1C;EACD;;EACD0oD,EAAAA,QAAQ,CAAC79B,EAAD,EAAK;EACX46B,IAAAA,IAAI,CAACiD,QAAL,CAAc,KAAKpM,MAAnB,EAA2BzxB,EAA3B;EACD;;EACD+hC,EAAAA,YAAY,CAACC,gBAAD,EAAmB;EAC7B,QAAI5K,MAAM,GAAG,KAAb;;EACA,SAAK,IAAIpsC,EAAE,GAAG,KAAK5nB,QAAL,EAAd,EAA+B4nB,EAAE,CAAChmB,OAAH,EAA/B,GAA+C;EAC7C,YAAM9D,CAAC,GAAG8pB,EAAE,CAACjmB,IAAH,EAAV;EACA,UAAI7D,CAAC,CAACy8D,QAAF,GAAavG,MAAb,EAAJ,EAA2BA,MAAM,GAAG,IAAT;EAC5B;;EACD,QAAIA,MAAJ,EAAY,KAAK3F,MAAL,GAAc,IAAIiG,KAAJ,CAAUl6B,QAAQ,CAACM,IAAnB,EAAyBN,QAAQ,CAACM,IAAlC,EAAwCN,QAAQ,CAACM,IAAjD,CAAd,CAAZ,KAAuF,KAAK2zB,MAAL,GAAc,IAAIiG,KAAJ,CAAUl6B,QAAQ,CAACM,IAAnB,CAAd;;EACvF,SAAK,IAAIjiC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,CAApB,EAAuBA,CAAC,EAAxB,EAA4B;EAC1B,WAAKkhH,cAAL,CAAoBlhH,CAApB,EAAuBmmE,gBAAvB;EACA,UAAI5K,MAAJ,EAAY,KAAK8lD,iBAAL,CAAuBrhH,CAAvB;EACb;EACF;;EApFgD;;ECLpC,MAAMshH,iBAAN,SAAgChmB,WAAhC,CAA4C;EACzDj8F,EAAAA,WAAW,GAAG;EACZ;EACD;;EACD2iE,EAAAA,QAAQ,CAAC79B,EAAD,EAAK;EACX,SAAK,IAAIhV,EAAE,GAAG,KAAK5nB,QAAL,EAAd,EAA+B4nB,EAAE,CAAChmB,OAAH,EAA/B,GAA+C;EAC7C,YAAMo4G,GAAG,GAAGpyF,EAAE,CAACjmB,IAAH,EAAZ;EACAq4G,MAAAA,GAAG,CAACv/C,QAAJ,CAAa79B,EAAb;EACD;EACF;;EACD+Z,EAAAA,MAAM,CAAC74C,CAAD,EAAI;EACR,QAAIm8G,EAAE,GAAG,KAAKjmB,QAAL,CAAc1zF,GAAd,CAAkBxC,CAAlB,CAAT;;EACA,QAAIm8G,EAAE,KAAK,IAAX,EAAiB;EACfA,MAAAA,EAAE,GAAG,IAAIR,aAAJ,CAAkB37G,CAAlB,CAAL;EACA,WAAKq3F,aAAL,CAAmBr3F,CAAnB,EAAsBm8G,EAAtB;EACD,KAHD,MAGO;EACLA,MAAAA,EAAE,CAACtjE,MAAH,CAAU74C,CAAV;EACD;EACF;;EAlBwD;;ECD5C,MAAMo8G,UAAN,SAAyB/9C,IAAzB,CAA8B;EAC3CrkE,EAAAA,WAAW,GAAG;EACZ;EACAoiH,IAAAA,UAAU,CAAC/+G,YAAX,CAAwBC,KAAxB,CAA8B,IAA9B,EAAoCC,SAApC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,UAAM0C,KAAK,GAAGxC,SAAS,CAAC,CAAD,CAAvB;EAAA,UAA4BiyD,KAAK,GAAGjyD,SAAS,CAAC,CAAD,CAA7C;EACA8gE,IAAAA,IAAI,CAAChhE,YAAL,CAAkBI,IAAlB,CAAuB,IAAvB,EAA6BsC,KAA7B,EAAoCyvD,KAApC;EACD;;EACD6sD,EAAAA,iBAAiB,CAACv9E,EAAD,EAAK;EACpB,SAAKy/B,MAAL,CAAY5B,QAAZ,CAAqB79B,EAArB;EACD;;EACD89B,EAAAA,SAAS,CAAC99B,EAAD,EAAK;EACZA,IAAAA,EAAE,CAACX,iBAAH,CAAqB,KAAKoyB,MAAL,CAAY3W,WAAZ,CAAwB,CAAxB,CAArB,EAAiD,KAAK2W,MAAL,CAAY3W,WAAZ,CAAwB,CAAxB,CAAjD,EAA6E,CAA7E;EACD;;EAd0C;;ECE9B,MAAM0iE,iBAAN,SAAgCr5C,WAAhC,CAA4C;EACzDjpE,EAAAA,WAAW,GAAG;EACZ;EACD;;EACD0lE,EAAAA,UAAU,CAAC3/D,KAAD,EAAQ;EAChB,WAAO,IAAIq8G,UAAJ,CAAer8G,KAAf,EAAsB,IAAIk8G,iBAAJ,EAAtB,CAAP;EACD;;EANwD;;ECC5C,MAAMM,eAAN,CAAsB;EACnCviH,EAAAA,WAAW,GAAG;EACZuiH,IAAAA,eAAe,CAACl/G,YAAhB,CAA6BC,KAA7B,CAAmC,IAAnC,EAAyCC,SAAzC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK8lE,MAAL,GAAc,IAAI7D,OAAJ,CAAY,IAAIg9C,iBAAJ,EAAZ,CAAd;EACD;;EACDE,EAAAA,cAAc,CAACj4C,EAAD,EAAK;EACjB,SAAK,IAAI5pE,CAAC,GAAG4pE,EAAE,CAACriE,QAAH,EAAb,EAA4BvH,CAAC,CAACmJ,OAAF,EAA5B,GAA2C;EACzC,YAAM9D,CAAC,GAAGrF,CAAC,CAACkJ,IAAF,EAAV;;EACA,WAAKs/D,MAAL,CAAYphE,GAAZ,CAAgB/B,CAAhB;EACD;EACF;;EACDyjE,EAAAA,eAAe,GAAG;EAChB,WAAO,KAAKN,MAAL,CAAYjhE,QAAZ,EAAP;EACD;;EACDu6G,EAAAA,kBAAkB,CAAC9lB,SAAD,EAAY33B,QAAZ,EAAsB;EACtC,SAAK,IAAI09C,MAAM,GAAG/lB,SAAS,CAAClzB,eAAV,EAAlB,EAA+Ci5C,MAAM,CAAC54G,OAAP,EAA/C,GAAmE;EACjE,YAAMm2G,SAAS,GAAGyC,MAAM,CAAC74G,IAAP,EAAlB;;EACA,YAAMq2G,OAAO,GAAG,KAAK/2C,MAAL,CAAY1D,OAAZ,CAAoBw6C,SAAS,CAACh2G,aAAV,EAApB,CAAhB;;EACAi2G,MAAAA,OAAO,CAAC19C,QAAR,CAAiBwC,QAAjB,EAA2Bi7C,SAAS,CAACx9C,QAAV,GAAqB7iB,WAArB,CAAiColB,QAAjC,CAA3B;EACD;EACF;;EACD8T,EAAAA,KAAK,CAAC6jB,SAAD,EAAY;EACf,SAAKgmB,wBAAL,CAA8BhmB,SAA9B,EAAyC,CAAzC;EACA,SAAK8lB,kBAAL,CAAwB9lB,SAAxB,EAAmC,CAAnC;EACA,UAAMimB,SAAS,GAAG,IAAIvB,cAAJ,EAAlB;EACA,UAAMwB,MAAM,GAAGD,SAAS,CAAClB,eAAV,CAA0B/kB,SAAS,CAACzyB,eAAV,EAA1B,CAAf;EACA,SAAKs4C,cAAL,CAAoBK,MAApB;EACD;;EACDF,EAAAA,wBAAwB,CAAChmB,SAAD,EAAY33B,QAAZ,EAAsB;EAC5C,SAAK,IAAI89C,MAAM,GAAGnmB,SAAS,CAACzyB,eAAV,EAAlB,EAA+C44C,MAAM,CAACh5G,OAAP,EAA/C,GAAmE;EACjE,YAAM9D,CAAC,GAAG88G,MAAM,CAACj5G,IAAP,EAAV;EACA,YAAMojE,IAAI,GAAGjnE,CAAC,CAACy8D,QAAF,GAAa7iB,WAAb,CAAyBolB,QAAzB,CAAb;;EACA,WAAK,IAAIkI,IAAI,GAAGlnE,CAAC,CAACo+D,uBAAF,GAA4Bl8D,QAA5B,EAAhB,EAAwDglE,IAAI,CAACpjE,OAAL,EAAxD,GAA0E;EACxE,cAAMk1D,EAAE,GAAGkO,IAAI,CAACrjE,IAAL,EAAX;;EACA,cAAM5I,CAAC,GAAG,KAAKkoE,MAAL,CAAY1D,OAAZ,CAAoBzG,EAAE,CAACj5D,KAAvB,CAAV;;EACA,YAAIknE,IAAI,KAAK3qC,QAAQ,CAACI,QAAtB,EAAgCzhC,CAAC,CAACokE,gBAAF,CAAmBL,QAAnB,EAAhC,KACA,IAAI/jE,CAAC,CAACwhE,QAAF,GAAar1D,MAAb,CAAoB43D,QAApB,CAAJ,EAAmC/jE,CAAC,CAACuhE,QAAF,CAAWwC,QAAX,EAAqB1iC,QAAQ,CAACK,QAA9B;EAEpC;EACF;EACF;;EA1CkC;;ECFtB,MAAMogF,oBAAN,CAA2B;EACxC/iH,EAAAA,WAAW,GAAG;EACZ+iH,IAAAA,oBAAoB,CAAC1/G,YAArB,CAAkCC,KAAlC,CAAwC,IAAxC,EAA8CC,SAA9C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK40D,GAAL,GAAW,IAAI76B,qBAAJ,EAAX;EACA,SAAKqjF,UAAL,GAAkB,IAAlB;EACA,SAAKuC,UAAL,GAAkB,IAAIT,eAAJ,EAAlB;EACA,SAAKn3C,aAAL,GAAqB,IAArB;EACA,UAAMuxB,SAAS,GAAGp5F,SAAS,CAAC,CAAD,CAA3B;EACA,SAAKk9G,UAAL,GAAkB9jB,SAAlB;EACD;;EACDsmB,EAAAA,8BAA8B,GAAG;EAC/B,SAAK,IAAIP,MAAM,GAAG,KAAKM,UAAL,CAAgBv5C,eAAhB,EAAlB,EAAqDi5C,MAAM,CAAC54G,OAAP,EAArD,GAAyE;EACvE,YAAMk1C,IAAI,GAAG0jE,MAAM,CAAC74G,IAAP,EAAb;;EACA,UAAI,CAACm1C,IAAI,CAACylB,QAAL,GAAgBi4B,sBAAhB,CAAuC,KAAK+jB,UAA5C,CAAL,EAA8D;EAC5D,aAAKr1C,aAAL,GAAqBpsB,IAAI,CAAC/0C,aAAL,GAAqB/D,IAArB,EAArB;EACA,eAAO,KAAP;EACD;EACF;;EACD,WAAO,IAAP;EACD;;EACDymE,EAAAA,eAAe,GAAG;EAChB,WAAO,KAAKvB,aAAZ;EACD;;EACD83C,EAAAA,iBAAiB,GAAG;EAClB,SAAK,IAAIR,MAAM,GAAG,KAAKM,UAAL,CAAgBv5C,eAAhB,EAAlB,EAAqDi5C,MAAM,CAAC54G,OAAP,EAArD,GAAyE;EACvE,YAAMk1C,IAAI,GAAG0jE,MAAM,CAAC74G,IAAP,EAAb;;EACA,WAAK,IAAIlJ,CAAC,GAAGq+C,IAAI,CAACylB,QAAL,GAAgBv8D,QAAhB,EAAb,EAAyCvH,CAAC,CAACmJ,OAAF,EAAzC,GAAwD;EACtD,cAAMq5G,GAAG,GAAGxiH,CAAC,CAACkJ,IAAF,EAAZ;;EACA,YAAIs5G,GAAG,CAACn5C,WAAJ,GAAkB7hE,IAAlB,KAA2B,CAA/B,EAAkC;EAChC,eAAKijE,aAAL,GAAqB+3C,GAAG,CAACx+C,OAAJ,GAAc16D,aAAd,CAA4B,CAA5B,CAArB;EACA,iBAAO,IAAP;EACD;EACF;EACF;;EACD,WAAO,KAAP;EACD;;EACDm5G,EAAAA,oBAAoB,GAAG;EACrB,UAAMC,WAAW,GAAG,KAAK5C,UAAL,CAAgB/0C,gBAAhB,CAAiC,KAAKzT,GAAtC,EAA2C,IAA3C,EAAiD,IAAjD,CAApB;;EACA,QAAIorD,WAAW,CAAC/pD,qBAAZ,EAAJ,EAAyC;EACvC,WAAK8R,aAAL,GAAqBi4C,WAAW,CAACrqD,0BAAZ,EAArB;EACA,aAAO,KAAP;EACD;;EACD,SAAKgqD,UAAL,CAAgBlqC,KAAhB,CAAsB,KAAK2nC,UAA3B;;EACA,WAAO,KAAKwC,8BAAL,EAAP;EACD;;EA9CuC;;ECG3B,MAAMK,uBAAN,CAA8B;EAC3CtjH,EAAAA,WAAW,GAAG;EACZsjH,IAAAA,uBAAuB,CAACjgH,YAAxB,CAAqCC,KAArC,CAA2C,IAA3C,EAAiDC,SAAjD;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKqxD,MAAL,GAAc,IAAd;EACA,SAAK6uD,MAAL,GAAc,IAAI56G,SAAJ,EAAd;EACA,SAAK66G,SAAL,GAAiB,IAAI93G,QAAJ,EAAjB;EACA,SAAKw0C,MAAL,GAAc,IAAd;EACA,SAAKujE,SAAL,GAAiB,IAAjB;EACA,UAAMl7B,KAAK,GAAGhlF,SAAS,CAAC,CAAD,CAAvB;EACA,SAAKmxD,MAAL,GAAc6zB,KAAd;EACD;;EACDm7B,EAAAA,UAAU,GAAG;EACX,SAAKxjE,MAAL,GAAc,IAAIs6B,OAAJ,EAAd;;EACA,SAAK,IAAI75E,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK4iH,MAAL,CAAYp7G,IAAZ,EAApB,EAAwCxH,CAAC,EAAzC,EAA6C;EAC3C,YAAM8Y,IAAI,GAAG,KAAK8pG,MAAL,CAAY/6G,GAAZ,CAAgB7H,CAAhB,CAAb;;EACA,YAAMsL,GAAG,GAAGwN,IAAI,CAACiG,mBAAL,EAAZ;;EACA,WAAKwgC,MAAL,CAAYrB,MAAZ,CAAmB5yC,GAAnB,EAAwBwN,IAAxB;EACD;EACF;;EACDkqG,EAAAA,cAAc,GAAG;EACf,WAAO,KAAKF,SAAZ;EACD;;EACDG,EAAAA,WAAW,GAAG;EACZ,SAAKF,UAAL;;EACA,SAAK,IAAI/iH,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK4iH,MAAL,CAAYp7G,IAAZ,EAApB,EAAwCxH,CAAC,EAAzC,EAA6C;EAC3C,YAAMkjH,SAAS,GAAG,KAAKN,MAAL,CAAY/6G,GAAZ,CAAgB7H,CAAhB,CAAlB;;EACA,YAAMmjH,YAAY,GAAGD,SAAS,CAAC99F,cAAV,EAArB;;EACA,YAAMg+F,OAAO,GAAG,KAAK7jE,MAAL,CAAYjC,KAAZ,CAAkB4lE,SAAS,CAACnkG,mBAAV,EAAlB,CAAhB;;EACA,WAAK,IAAIe,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsjG,OAAO,CAAC57G,IAAR,EAApB,EAAoCsY,CAAC,EAArC,EAAyC;EACvC,cAAMujG,UAAU,GAAGD,OAAO,CAACv7G,GAAR,CAAYiY,CAAZ,CAAnB;EACA,cAAMwjG,aAAa,GAAGD,UAAU,CAACj+F,cAAX,EAAtB;EACA,YAAI89F,SAAS,KAAKG,UAAlB,EAA8B;EAC9B,YAAI,CAACH,SAAS,CAACnkG,mBAAV,GAAgCpT,UAAhC,CAA2C03G,UAAU,CAACtkG,mBAAX,EAA3C,CAAL,EAAmF;EACnF,cAAMwkG,WAAW,GAAGC,SAAS,CAACC,aAAV,CAAwBN,YAAxB,EAAsCE,UAAtC,EAAkD,KAAKtvD,MAAvD,CAApB;EACA,YAAIwvD,WAAW,KAAK,IAApB,EAA0B;EAC1B,cAAMG,QAAQ,GAAG5jE,aAAa,CAACI,QAAd,CAAuBqjE,WAAvB,EAAoCD,aAApC,CAAjB;;EACA,YAAII,QAAJ,EAAc;EACZ,eAAKZ,SAAL,GAAiBS,WAAjB;EACA,iBAAO,KAAP;EACD;EACF;EACF;;EACD,WAAO,IAAP;EACD;;EACDn8G,EAAAA,GAAG,CAAC0R,IAAD,EAAO;EACR,SAAK8pG,MAAL,CAAYx7G,GAAZ,CAAgB0R,IAAhB;;EACA,SAAK+pG,SAAL,CAAel1G,eAAf,CAA+BmL,IAAI,CAACiG,mBAAL,EAA/B;EACD;;EAjD0C;;ECL9B,MAAM4kG,uBAAN,CAA8B;EAC3CtkH,EAAAA,WAAW,GAAG;EACZskH,IAAAA,uBAAuB,CAACjhH,YAAxB,CAAqCC,KAArC,CAA2C,IAA3C,EAAiDC,SAAjD;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKkhH,UAAL,GAAkB,IAAlB;EACA,SAAK3pE,GAAL,GAAW,IAAX;;EACA,QAAIr3C,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMghH,SAAS,GAAGjhH,SAAS,CAAC,CAAD,CAA3B;EACA+gH,MAAAA,uBAAuB,CAACjhH,YAAxB,CAAqCI,IAArC,CAA0C,IAA1C,EAAgD+gH,SAAhD,EAA2D,IAA3D;EACD,KAHD,MAGO,IAAIjhH,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMghH,SAAS,GAAGjhH,SAAS,CAAC,CAAD,CAA3B;EAAA,YAAgCqjB,EAAE,GAAGrjB,SAAS,CAAC,CAAD,CAA9C;EACA,WAAKghH,UAAL,GAAkBC,SAAlB;EACA,UAAI59F,EAAE,KAAK,IAAX,EAAiB,KAAKg0B,GAAL,GAAWh0B,EAAE,CAAC1gB,IAAH,EAAX;EAClB;EACF;;EACDu+G,EAAAA,YAAY,GAAG;EACb,WAAO,KAAKF,UAAZ;EACD;;EACDG,EAAAA,UAAU,GAAG;EACX,WAAOJ,uBAAuB,CAACK,MAAxB,CAA+B,KAAKJ,UAApC,CAAP;EACD;;EACDt6G,EAAAA,aAAa,GAAG;EACd,WAAO,KAAK2wC,GAAZ;EACD;;EACDv6C,EAAAA,QAAQ,GAAG;EACT,QAAIukH,MAAM,GAAG,EAAb;EACA,QAAI,KAAKhqE,GAAL,KAAa,IAAjB,EAAuBgqE,MAAM,GAAG,uBAAuB,KAAKhqE,GAArC;EACvB,WAAO,KAAK8pE,UAAL,KAAoBE,MAA3B;EACD;;EA7B0C;EA+B7CN,uBAAuB,CAACO,KAAxB,GAAgC,CAAhC;EACAP,uBAAuB,CAACQ,cAAxB,GAAyC,CAAzC;EACAR,uBAAuB,CAACS,kBAAxB,GAA6C,CAA7C;EACAT,uBAAuB,CAACU,YAAxB,GAAuC,CAAvC;EACAV,uBAAuB,CAACW,qBAAxB,GAAgD,CAAhD;EACAX,uBAAuB,CAACY,iBAAxB,GAA4C,CAA5C;EACAZ,uBAAuB,CAACa,sBAAxB,GAAiD,CAAjD;EACAb,uBAAuB,CAACc,aAAxB,GAAwC,CAAxC;EACAd,uBAAuB,CAACe,eAAxB,GAA0C,CAA1C;EACAf,uBAAuB,CAACgB,cAAxB,GAAyC,CAAzC;EACAhB,uBAAuB,CAACiB,kBAAxB,GAA6C,EAA7C;EACAjB,uBAAuB,CAACkB,eAAxB,GAA0C,EAA1C;EACAlB,uBAAuB,CAACK,MAAxB,GAAiC,CAAC,2BAAD,EAA8B,gBAA9B,EAAgD,yBAAhD,EAA2E,kBAA3E,EAA+F,0BAA/F,EAA2H,mBAA3H,EAAgJ,wBAAhJ,EAA0K,eAA1K,EAA2L,iBAA3L,EAA8M,+CAA9M,EAA+P,oBAA/P,EAAqR,oBAArR,CAAjC;;ECrBe,MAAMR,SAAN,CAAgB;EAC7BnkH,EAAAA,WAAW,GAAG;EACZmkH,IAAAA,SAAS,CAAC9gH,YAAV,CAAuBC,KAAvB,CAA6B,IAA7B,EAAmCC,SAAnC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKoiH,eAAL,GAAuB,IAAvB;EACA,SAAKC,mCAAL,GAA2C,KAA3C;EACA,SAAKC,SAAL,GAAiB,IAAjB;EACA,UAAMC,cAAc,GAAGriH,SAAS,CAAC,CAAD,CAAhC;EACA,SAAKkiH,eAAL,GAAuBG,cAAvB;EACD;;EACD,SAAOxB,aAAP,CAAqByB,UAArB,EAAiC7B,UAAjC,EAA6Cz7B,KAA7C,EAAoD;EAClD,UAAMu9B,UAAU,GAAGv9B,KAAK,CAACp0B,QAAN,CAAe6vD,UAAf,CAAnB;EACA,UAAMlhD,MAAM,GAAGgjD,UAAU,CAAC1hD,uBAAX,EAAf;;EACA,SAAK,IAAIzjE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGklH,UAAU,CAACriH,MAA/B,EAAuC7C,CAAC,EAAxC,EAA4C;EAC1C,YAAMimB,EAAE,GAAGi/F,UAAU,CAACllH,CAAD,CAArB;EACA,UAAI,CAACmiE,MAAM,CAAC/lC,cAAP,CAAsBnW,EAAtB,CAAL,EAAgC,OAAOA,EAAP;EACjC;;EACD,WAAO,IAAP;EACD;;EACD,SAAO0E,OAAP,GAAiB;EACf,QAAI/nB,SAAS,CAAC,CAAD,CAAT,YAAwBya,QAA5B,EAAsC;EACpC,YAAMD,IAAI,GAAGxa,SAAS,CAAC,CAAD,CAAtB;EACA,YAAMwiH,SAAS,GAAG,IAAI5B,SAAJ,CAAcpmG,IAAd,CAAlB;EACA,aAAOgoG,SAAS,CAACz6F,OAAV,EAAP;EACD,KAJD,MAIO,IAAI/nB,SAAS,CAAC,CAAD,CAAT,YAAwBc,UAA5B,EAAwC;EAC7C,YAAM0B,KAAK,GAAGxC,SAAS,CAAC,CAAD,CAAvB;EACA,UAAIzC,MAAM,CAACE,KAAP,CAAa+E,KAAK,CAACzD,CAAnB,CAAJ,EAA2B,OAAO,KAAP;EAC3B,UAAIxB,MAAM,CAACK,UAAP,CAAkB4E,KAAK,CAACzD,CAAxB,CAAJ,EAAgC,OAAO,KAAP;EAChC,UAAIxB,MAAM,CAACE,KAAP,CAAa+E,KAAK,CAACxD,CAAnB,CAAJ,EAA2B,OAAO,KAAP;EAC3B,UAAIzB,MAAM,CAACK,UAAP,CAAkB4E,KAAK,CAACxD,CAAxB,CAAJ,EAAgC,OAAO,KAAP;EAChC,aAAO,IAAP;EACD;EACF;;EACDyjH,EAAAA,uBAAuB,GAAG;EACxB,QAAIziH,SAAS,CAAC,CAAD,CAAT,YAAwBkH,KAA5B,EAAmC;EACjC,YAAMwlC,MAAM,GAAG1sC,SAAS,CAAC,CAAD,CAAxB;;EACA,WAAK,IAAI5C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsvC,MAAM,CAACzsC,MAA3B,EAAmC7C,CAAC,EAApC,EACE,IAAI,CAACwjH,SAAS,CAAC74F,OAAV,CAAkB2kB,MAAM,CAACtvC,CAAD,CAAxB,CAAL,EAAmC;EACjC,aAAKglH,SAAL,GAAiB,IAAIrB,uBAAJ,CAA4BA,uBAAuB,CAACiB,kBAApD,EAAwEt1E,MAAM,CAACtvC,CAAD,CAA9E,CAAjB;EACA,eAAO,IAAP;EACD;EAEJ,KARD,MAQO,IAAI4C,SAAS,CAAC,CAAD,CAAT,YAAwB0kB,OAA5B,EAAqC;EAC1C,YAAM2B,IAAI,GAAGrmB,SAAS,CAAC,CAAD,CAAtB;EACA,WAAKyiH,uBAAL,CAA6Bp8F,IAAI,CAACN,eAAL,GAAuBvD,cAAvB,EAA7B;EACA,UAAI,KAAK4/F,SAAL,KAAmB,IAAvB,EAA6B,OAAO,IAAP;;EAC7B,WAAK,IAAIhlH,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGipB,IAAI,CAAChB,kBAAL,EAApB,EAA+CjoB,CAAC,EAAhD,EAAoD;EAClD,aAAKqlH,uBAAL,CAA6Bp8F,IAAI,CAACL,gBAAL,CAAsB5oB,CAAtB,EAAyBolB,cAAzB,EAA7B;EACA,YAAI,KAAK4/F,SAAL,KAAmB,IAAvB,EAA6B,OAAO,IAAP;EAC9B;EACF;EACF;;EACDM,EAAAA,mBAAmB,CAACj6G,CAAD,EAAIu8E,KAAJ,EAAW;EAC5B,QAAIv8E,CAAC,CAAC4c,kBAAF,MAA0B,CAA9B,EAAiC,OAAO,IAAP;EACjC,UAAMs9F,YAAY,GAAG,IAAI5C,uBAAJ,CAA4B/6B,KAA5B,CAArB;;EACA,SAAK,IAAI5nF,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqL,CAAC,CAAC4c,kBAAF,EAApB,EAA4CjoB,CAAC,EAA7C,EAAiD;EAC/C,YAAMwlH,SAAS,GAAGn6G,CAAC,CAACud,gBAAF,CAAmB5oB,CAAnB,CAAlB;EACA,UAAIwlH,SAAS,CAACl+G,OAAV,EAAJ,EAAyB;EACzBi+G,MAAAA,YAAY,CAACn+G,GAAb,CAAiBo+G,SAAjB;EACD;;EACD,UAAMvC,WAAW,GAAGsC,YAAY,CAACtC,WAAb,EAApB;EACA,QAAI,CAACA,WAAL,EACE,KAAK+B,SAAL,GAAiB,IAAIrB,uBAAJ,CAA4BA,uBAAuB,CAACU,YAApD,EAAkEkB,YAAY,CAACvC,cAAb,EAAlE,CAAjB;EAEH;;EACDyC,EAAAA,mBAAmB,CAAC79B,KAAD,EAAQ;EACzB,UAAM89B,GAAG,GAAG,IAAItD,oBAAJ,CAAyBx6B,KAAzB,CAAZ;EACA,UAAM+9B,WAAW,GAAGD,GAAG,CAACjD,oBAAJ,EAApB;;EACA,QAAI,CAACkD,WAAL,EAAkB;EAChB,WAAKX,SAAL,GAAiB,IAAIrB,uBAAJ,CAA4BA,uBAAuB,CAACY,iBAApD,EAAuEmB,GAAG,CAAC15C,eAAJ,EAAvE,CAAjB;EACA,aAAO,IAAP;EACD;;EACD,QAAI05C,GAAG,CAACnD,iBAAJ,EAAJ,EACE,KAAKyC,SAAL,GAAiB,IAAIrB,uBAAJ,CAA4BA,uBAAuB,CAACe,eAApD,EAAqEgB,GAAG,CAAC15C,eAAJ,EAArE,CAAjB;EAEH;;EACDrhD,EAAAA,OAAO,GAAG;EACR,SAAK03E,UAAL,CAAgB,KAAKyiB,eAArB;EACA,WAAO,KAAKE,SAAL,KAAmB,IAA1B;EACD;;EACDY,EAAAA,oBAAoB,CAACn+F,KAAD,EAAQkqB,IAAR,EAAci2C,KAAd,EAAqB;EACvC,UAAMi+B,QAAQ,GAAGp+F,KAAK,CAACrC,cAAN,EAAjB;EACA,UAAM0gG,OAAO,GAAGn0E,IAAI,CAACvsB,cAAL,EAAhB;EACA,UAAM2gG,OAAO,GAAGvC,SAAS,CAACC,aAAV,CAAwBoC,QAAxB,EAAkCl0E,IAAlC,EAAwCi2C,KAAxC,CAAhB;;EACA,QAAIm+B,OAAO,KAAK,IAAhB,EAAsB;EACpB,YAAMC,UAAU,GAAGlmE,aAAa,CAACI,QAAd,CAAuB6lE,OAAvB,EAAgCD,OAAhC,CAAnB;EACA,UAAI,CAACE,UAAL,EACE,OAAOD,OAAP;EAEH;;EACD,UAAME,MAAM,GAAGzC,SAAS,CAACC,aAAV,CAAwBqC,OAAxB,EAAiCr+F,KAAjC,EAAwCmgE,KAAxC,CAAf;;EACA,QAAIq+B,MAAM,KAAK,IAAf,EAAqB;EACnB,YAAMC,WAAW,GAAGpmE,aAAa,CAACI,QAAd,CAAuB+lE,MAAvB,EAA+BJ,QAA/B,CAApB;EACA,UAAIK,WAAJ,EACE,OAAOD,MAAP;EAEF,aAAO,IAAP;EACD;;EACDljH,IAAAA,MAAM,CAACC,oBAAP,CAA4B,6CAA5B;EACA,WAAO,IAAP;EACD;;EACDmjH,EAAAA,4BAA4B,CAACv+B,KAAD,EAAQ;EAClC,SAAK,IAAI5nF,CAAC,GAAG4nF,KAAK,CAACre,eAAN,EAAb,EAAsCvpE,CAAC,CAACmJ,OAAF,EAAtC,GAAqD;EACnD,YAAM9D,CAAC,GAAGrF,CAAC,CAACkJ,IAAF,EAAV;EACA,WAAKk9G,2BAAL,CAAiC/gH,CAAC,CAACo+D,uBAAF,EAAjC;EACA,UAAI,KAAKuhD,SAAL,KAAmB,IAAvB,EAA6B,OAAO,IAAP;EAC9B;EACF;;EACDqB,EAAAA,uBAAuB,CAACz+B,KAAD,EAAQ;EAC7B,UAAM0+B,GAAG,GAAG,IAAIzG,uBAAJ,CAA4Bj4B,KAA5B,CAAZ;EACA,QAAI,CAAC0+B,GAAG,CAAC7F,oBAAJ,EAAL,EAAiC,KAAKuE,SAAL,GAAiB,IAAIrB,uBAAJ,CAA4BA,uBAAuB,CAACW,qBAApD,EAA2EgC,GAAG,CAACh9G,aAAJ,EAA3E,CAAjB;EAClC;;EACD88G,EAAAA,2BAA2B,CAACjkD,MAAD,EAAS;EAClC,UAAMokD,OAAO,GAAG,IAAI38F,OAAJ,EAAhB;EACA,QAAI48F,OAAO,GAAG,IAAd;;EACA,SAAK,IAAIxmH,CAAC,GAAGmiE,MAAM,CAAC56D,QAAP,EAAb,EAAgCvH,CAAC,CAACmJ,OAAF,EAAhC,GAA+C;EAC7C,YAAMk1D,EAAE,GAAGr+D,CAAC,CAACkJ,IAAF,EAAX;;EACA,UAAIs9G,OAAJ,EAAa;EACXA,QAAAA,OAAO,GAAG,KAAV;EACA;EACD;;EACD,UAAID,OAAO,CAACj4G,QAAR,CAAiB+vD,EAAE,CAACj5D,KAApB,CAAJ,EAAgC;EAC9B,aAAK4/G,SAAL,GAAiB,IAAIrB,uBAAJ,CAA4BA,uBAAuB,CAACa,sBAApD,EAA4EnmD,EAAE,CAACj5D,KAA/E,CAAjB;EACA,eAAO,IAAP;EACD,OAHD,MAGO;EACLmhH,QAAAA,OAAO,CAACn/G,GAAR,CAAYi3D,EAAE,CAACj5D,KAAf;EACD;EACF;EACF;;EACDqhH,EAAAA,iBAAiB,CAACp7G,CAAD,EAAIu8E,KAAJ,EAAW;EAC1B,QAAIv8E,CAAC,CAAC4c,kBAAF,MAA0B,CAA9B,EAAiC,OAAO,IAAP;EACjC,UAAMR,KAAK,GAAGpc,CAAC,CAACsd,eAAF,EAAd;EACA,UAAM+9F,YAAY,GAAGj/F,KAAK,CAACngB,OAAN,EAArB;EACA,UAAMq/G,GAAG,GAAG,IAAIrnE,yBAAJ,CAA8B73B,KAA9B,CAAZ;;EACA,SAAK,IAAIznB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqL,CAAC,CAAC4c,kBAAF,EAApB,EAA4CjoB,CAAC,EAA7C,EAAiD;EAC/C,YAAM2xC,IAAI,GAAGtmC,CAAC,CAACud,gBAAF,CAAmB5oB,CAAnB,CAAb;EACA,UAAIimH,MAAM,GAAG,IAAb;EACA,UAAIt0E,IAAI,CAACrqC,OAAL,EAAJ,EAAoB;EACpB2+G,MAAAA,MAAM,GAAGzC,SAAS,CAACC,aAAV,CAAwB9xE,IAAI,CAACvsB,cAAL,EAAxB,EAA+CqC,KAA/C,EAAsDmgE,KAAtD,CAAT;EACA,UAAIq+B,MAAM,KAAK,IAAf,EAAqB,OAAO,IAAP;EACrB,YAAMW,OAAO,GAAGF,YAAY,IAAI/kF,QAAQ,CAACG,QAAT,KAAsB6kF,GAAG,CAACnqE,MAAJ,CAAWypE,MAAX,CAAtD;;EACA,UAAIW,OAAJ,EAAa;EACX,aAAK5B,SAAL,GAAiB,IAAIrB,uBAAJ,CAA4BA,uBAAuB,CAACS,kBAApD,EAAwE6B,MAAxE,CAAjB;EACA,eAAO,IAAP;EACD;EACF;EACF;;EACDY,EAAAA,iBAAiB,CAACj/B,KAAD,EAAQ;EACvB,QAAIA,KAAK,CAACjc,eAAN,EAAJ,EAA6B;EAC3B,WAAKq5C,SAAL,GAAiB,IAAIrB,uBAAJ,CAA4BA,uBAAuB,CAACgB,cAApD,EAAoE/8B,KAAK,CAAC5b,eAAN,EAApE,CAAjB;EACA,aAAO,IAAP;EACD;EACF;;EACD86C,EAAAA,kBAAkB,GAAG;EACnB,SAAKzkB,UAAL,CAAgB,KAAKyiB,eAArB;EACA,WAAO,KAAKE,SAAZ;EACD;;EACD3iB,EAAAA,UAAU,GAAG;EACX,QAAIz/F,SAAS,CAAC,CAAD,CAAT,YAAwByjB,KAA5B,EAAmC;EACjC,YAAMlI,CAAC,GAAGvb,SAAS,CAAC,CAAD,CAAnB;EACA,WAAKyiH,uBAAL,CAA6BlnG,CAAC,CAACiH,cAAF,EAA7B;EACD,KAHD,MAGO,IAAIxiB,SAAS,CAAC,CAAD,CAAT,YAAwB8nB,UAA5B,EAAwC;EAC7C,YAAMvM,CAAC,GAAGvb,SAAS,CAAC,CAAD,CAAnB;EACA,WAAKyiH,uBAAL,CAA6BlnG,CAAC,CAACiH,cAAF,EAA7B;EACD,KAHM,MAGA,IAAIxiB,SAAS,CAAC,CAAD,CAAT,YAAwBgoB,UAA5B,EAAwC;EAC7C,YAAMzM,CAAC,GAAGvb,SAAS,CAAC,CAAD,CAAnB;EACA,WAAKyiH,uBAAL,CAA6BlnG,CAAC,CAACiH,cAAF,EAA7B;EACA,UAAI,KAAK4/F,SAAL,KAAmB,IAAvB,EAA6B,OAAO,IAAP;EAC7B,WAAK+B,eAAL,CAAqB5oG,CAArB;EACA,UAAI,KAAK6mG,SAAL,KAAmB,IAAvB,EAA6B,OAAO,IAAP;EAC7B,YAAMp9B,KAAK,GAAG,IAAI3d,aAAJ,CAAkB,CAAlB,EAAqB9rD,CAArB,CAAd;EACA,WAAK0oG,iBAAL,CAAuBj/B,KAAvB;EACA,UAAI,KAAKo9B,SAAL,KAAmB,IAAvB,EAA6B,OAAO,IAAP;EAC7B,YAAMtmF,EAAE,GAAG,IAAIjC,qBAAJ,EAAX;EACAmrD,MAAAA,KAAK,CAAC7c,gBAAN,CAAuBrsC,EAAvB,EAA2B,IAA3B,EAAiC,IAAjC;EACA,WAAKynF,4BAAL,CAAkCv+B,KAAlC;EACD,KAZM,MAYA,IAAIhlF,SAAS,CAAC,CAAD,CAAT,YAAwBoiB,UAA5B,EAAwC;EAC7C,YAAM7G,CAAC,GAAGvb,SAAS,CAAC,CAAD,CAAnB;EACA,WAAKyiH,uBAAL,CAA6BlnG,CAAC,CAACiH,cAAF,EAA7B;EACA,UAAI,KAAK4/F,SAAL,KAAmB,IAAvB,EAA6B,OAAO,IAAP;EAC7B,YAAMp9B,KAAK,GAAG,IAAI3d,aAAJ,CAAkB,CAAlB,EAAqB9rD,CAArB,CAAd;EACA,WAAK0oG,iBAAL,CAAuBj/B,KAAvB;EACD,KANM,MAMA,IAAIhlF,SAAS,CAAC,CAAD,CAAT,YAAwB0kB,OAA5B,EAAqC;EAC1C,YAAMnJ,CAAC,GAAGvb,SAAS,CAAC,CAAD,CAAnB;EACA,WAAKyiH,uBAAL,CAA6BlnG,CAA7B;EACA,UAAI,KAAK6mG,SAAL,KAAmB,IAAvB,EAA6B,OAAO,IAAP;EAC7B,WAAKgC,gBAAL,CAAsB7oG,CAAtB;EACA,UAAI,KAAK6mG,SAAL,KAAmB,IAAvB,EAA6B,OAAO,IAAP;EAC7B,YAAMp9B,KAAK,GAAG,IAAI3d,aAAJ,CAAkB,CAAlB,EAAqB9rD,CAArB,CAAd;EACA,WAAK0oG,iBAAL,CAAuBj/B,KAAvB;EACA,UAAI,KAAKo9B,SAAL,KAAmB,IAAvB,EAA6B,OAAO,IAAP;EAC7B,WAAKS,mBAAL,CAAyB79B,KAAzB;EACA,UAAI,KAAKo9B,SAAL,KAAmB,IAAvB,EAA6B,OAAO,IAAP;;EAC7B,UAAI,CAAC,KAAKD,mCAAV,EAA+C;EAC7C,aAAKoB,4BAAL,CAAkCv+B,KAAlC;EACA,YAAI,KAAKo9B,SAAL,KAAmB,IAAvB,EAA6B,OAAO,IAAP;EAC9B;;EACD,WAAKyB,iBAAL,CAAuBtoG,CAAvB,EAA0BypE,KAA1B;EACA,UAAI,KAAKo9B,SAAL,KAAmB,IAAvB,EAA6B,OAAO,IAAP;EAC7B,WAAKM,mBAAL,CAAyBnnG,CAAzB,EAA4BypE,KAA5B;EACA,UAAI,KAAKo9B,SAAL,KAAmB,IAAvB,EAA6B,OAAO,IAAP;EAC7B,WAAKqB,uBAAL,CAA6Bz+B,KAA7B;EACD,KApBM,MAoBA,IAAIhlF,SAAS,CAAC,CAAD,CAAT,YAAwBurB,YAA5B,EAA0C;EAC/C,YAAMhQ,CAAC,GAAGvb,SAAS,CAAC,CAAD,CAAnB;;EACA,WAAK,IAAI5C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGme,CAAC,CAACG,gBAAF,EAApB,EAA0Cte,CAAC,EAA3C,EAA+C;EAC7C,cAAMqL,CAAC,GAAG8S,CAAC,CAACR,YAAF,CAAe3d,CAAf,CAAV;EACA,aAAKqlH,uBAAL,CAA6Bh6G,CAA7B;EACA,YAAI,KAAK25G,SAAL,KAAmB,IAAvB,EAA6B,OAAO,IAAP;EAC7B,aAAKgC,gBAAL,CAAsB37G,CAAtB;EACA,YAAI,KAAK25G,SAAL,KAAmB,IAAvB,EAA6B,OAAO,IAAP;EAC9B;;EACD,YAAMp9B,KAAK,GAAG,IAAI3d,aAAJ,CAAkB,CAAlB,EAAqB9rD,CAArB,CAAd;EACA,WAAK0oG,iBAAL,CAAuBj/B,KAAvB;EACA,UAAI,KAAKo9B,SAAL,KAAmB,IAAvB,EAA6B,OAAO,IAAP;EAC7B,WAAKS,mBAAL,CAAyB79B,KAAzB;EACA,UAAI,KAAKo9B,SAAL,KAAmB,IAAvB,EAA6B,OAAO,IAAP;;EAC7B,UAAI,CAAC,KAAKD,mCAAV,EAA+C;EAC7C,aAAKoB,4BAAL,CAAkCv+B,KAAlC;EACA,YAAI,KAAKo9B,SAAL,KAAmB,IAAvB,EAA6B,OAAO,IAAP;EAC9B;;EACD,WAAK,IAAIhlH,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGme,CAAC,CAACG,gBAAF,EAApB,EAA0Cte,CAAC,EAA3C,EAA+C;EAC7C,cAAMqL,CAAC,GAAG8S,CAAC,CAACR,YAAF,CAAe3d,CAAf,CAAV;EACA,aAAKymH,iBAAL,CAAuBp7G,CAAvB,EAA0Bu8E,KAA1B;EACA,YAAI,KAAKo9B,SAAL,KAAmB,IAAvB,EAA6B,OAAO,IAAP;EAC9B;;EACD,WAAK,IAAIhlH,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGme,CAAC,CAACG,gBAAF,EAApB,EAA0Cte,CAAC,EAA3C,EAA+C;EAC7C,cAAMqL,CAAC,GAAG8S,CAAC,CAACR,YAAF,CAAe3d,CAAf,CAAV;EACA,aAAKslH,mBAAL,CAAyBj6G,CAAzB,EAA4Bu8E,KAA5B;EACA,YAAI,KAAKo9B,SAAL,KAAmB,IAAvB,EAA6B,OAAO,IAAP;EAC9B;;EACD,WAAKiC,oBAAL,CAA0B9oG,CAA1B,EAA6BypE,KAA7B;EACA,UAAI,KAAKo9B,SAAL,KAAmB,IAAvB,EAA6B,OAAO,IAAP;EAC7B,WAAKqB,uBAAL,CAA6Bz+B,KAA7B;EACD,KA/BM,MA+BA,IAAIhlF,SAAS,CAAC,CAAD,CAAT,YAAwBinB,kBAA5B,EAAgD;EACrD,YAAMQ,EAAE,GAAGznB,SAAS,CAAC,CAAD,CAApB;;EACA,WAAK,IAAI5C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqqB,EAAE,CAAC/L,gBAAH,EAApB,EAA2Cte,CAAC,EAA5C,EAAgD;EAC9C,cAAMme,CAAC,GAAGkM,EAAE,CAAC1M,YAAH,CAAgB3d,CAAhB,CAAV;EACA,aAAKqiG,UAAL,CAAgBlkF,CAAhB;EACA,YAAI,KAAK6mG,SAAL,KAAmB,IAAvB,EAA6B,OAAO,IAAP;EAC9B;EACF,KAPM,MAOA,IAAIpiH,SAAS,CAAC,CAAD,CAAT,YAAwBya,QAA5B,EAAsC;EAC3C,YAAMc,CAAC,GAAGvb,SAAS,CAAC,CAAD,CAAnB;EACA,WAAKoiH,SAAL,GAAiB,IAAjB;EACA,UAAI7mG,CAAC,CAAC7W,OAAF,EAAJ,EAAiB,OAAO,IAAP;EACjB,UAAI6W,CAAC,YAAYkI,KAAjB,EAAwB,KAAKg8E,UAAL,CAAgBlkF,CAAhB,EAAxB,KAAiD,IAAIA,CAAC,YAAYuM,UAAjB,EAA6B,KAAK23E,UAAL,CAAgBlkF,CAAhB,EAA7B,KAAsD,IAAIA,CAAC,YAAYyM,UAAjB,EAA6B,KAAKy3E,UAAL,CAAgBlkF,CAAhB,EAA7B,KAAsD,IAAIA,CAAC,YAAY6G,UAAjB,EAA6B,KAAKq9E,UAAL,CAAgBlkF,CAAhB,EAA7B,KAAsD,IAAIA,CAAC,YAAYmJ,OAAjB,EAA0B,KAAK+6E,UAAL,CAAgBlkF,CAAhB,EAA1B,KAAmD,IAAIA,CAAC,YAAYgQ,YAAjB,EAA+B,KAAKk0E,UAAL,CAAgBlkF,CAAhB,EAA/B,KAAwD,IAAIA,CAAC,YAAY0L,kBAAjB,EAAqC,KAAKw4E,UAAL,CAAgBlkF,CAAhB,EAArC,KAA8D,MAAM,IAAI2F,6BAAJ,CAAkC3F,CAAC,CAAC0H,eAAF,EAAlC,CAAN;EAC7X;EACF;;EACDqhG,EAAAA,mCAAmC,CAACv8F,OAAD,EAAU;EAC3C,SAAKo6F,mCAAL,GAA2Cp6F,OAA3C;EACD;;EACDw8F,EAAAA,mBAAmB,CAAC1/F,KAAD,EAAQpc,CAAR,EAAWu8E,KAAX,EAAkB;EACnC,UAAMi+B,QAAQ,GAAGp+F,KAAK,CAACrC,cAAN,EAAjB;EACA,UAAMgiG,SAAS,GAAG/7G,CAAC,CAACsd,eAAF,EAAlB;EACA,QAAIy+F,SAAS,CAAC9/G,OAAV,EAAJ,EAAyB,OAAO,IAAP;EACzB,UAAM+9C,OAAO,GAAG+hE,SAAS,CAAChiG,cAAV,EAAhB;EACA,UAAM2gG,OAAO,GAAGvC,SAAS,CAACC,aAAV,CAAwBoC,QAAxB,EAAkCuB,SAAlC,EAA6Cx/B,KAA7C,CAAhB;EACA,QAAIm+B,OAAO,KAAK,IAAhB,EAAsB,OAAO,IAAP;EACtB,UAAMsB,eAAe,GAAGvnE,aAAa,CAACI,QAAd,CAAuB6lE,OAAvB,EAAgC1gE,OAAhC,CAAxB;EACA,QAAI,CAACgiE,eAAL,EAAsB,OAAO,IAAP;;EACtB,QAAIh8G,CAAC,CAAC4c,kBAAF,MAA0B,CAA9B,EAAiC;EAC/B,WAAK+8F,SAAL,GAAiB,IAAIrB,uBAAJ,CAA4BA,uBAAuB,CAACc,aAApD,EAAmEsB,OAAnE,CAAjB;EACA,aAAO,IAAP;EACD;;EACD,QAAIuB,WAAW,GAAG,IAAlB;;EACA,SAAK,IAAItnH,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqL,CAAC,CAAC4c,kBAAF,EAApB,EAA4CjoB,CAAC,EAA7C,EAAiD;EAC/C,YAAM2xC,IAAI,GAAGtmC,CAAC,CAACud,gBAAF,CAAmB5oB,CAAnB,CAAb;EACAsnH,MAAAA,WAAW,GAAG,KAAK1B,oBAAL,CAA0Bn+F,KAA1B,EAAiCkqB,IAAjC,EAAuCi2C,KAAvC,CAAd;EACA,UAAI0/B,WAAW,KAAK,IAApB,EAA0B,OAAO,IAAP;EAC3B;;EACD,SAAKtC,SAAL,GAAiB,IAAIrB,uBAAJ,CAA4BA,uBAAuB,CAACc,aAApD,EAAmE6C,WAAnE,CAAjB;EACD;;EACDN,EAAAA,gBAAgB,CAAC/9F,IAAD,EAAO;EACrB,SAAK89F,eAAL,CAAqB99F,IAAI,CAACN,eAAL,EAArB;EACA,QAAI,KAAKq8F,SAAL,KAAmB,IAAvB,EAA6B,OAAO,IAAP;;EAC7B,SAAK,IAAIhlH,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGipB,IAAI,CAAChB,kBAAL,EAApB,EAA+CjoB,CAAC,EAAhD,EAAoD;EAClD,WAAK+mH,eAAL,CAAqB99F,IAAI,CAACL,gBAAL,CAAsB5oB,CAAtB,CAArB;EACA,UAAI,KAAKglH,SAAL,KAAmB,IAAvB,EAA6B,OAAO,IAAP;EAC9B;EACF;;EACD+B,EAAAA,eAAe,CAACjuG,IAAD,EAAO;EACpB,QAAIA,IAAI,CAACxR,OAAL,EAAJ,EAAoB,OAAO,IAAP;;EACpB,QAAI,CAACwR,IAAI,CAAC6K,QAAL,EAAL,EAAsB;EACpB,UAAIsC,EAAE,GAAG,IAAT;EACA,UAAInN,IAAI,CAAC0M,YAAL,MAAuB,CAA3B,EAA8BS,EAAE,GAAGnN,IAAI,CAACyM,cAAL,CAAoB,CAApB,CAAL;EAC9B,WAAKy/F,SAAL,GAAiB,IAAIrB,uBAAJ,CAA4BA,uBAAuB,CAACkB,eAApD,EAAqE5+F,EAArE,CAAjB;EACD;EACF;;EACDghG,EAAAA,oBAAoB,CAACz/B,EAAD,EAAKI,KAAL,EAAY;EAC9B,SAAK,IAAI5nF,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGwnF,EAAE,CAAClpE,gBAAH,EAApB,EAA2Cte,CAAC,EAA5C,EAAgD;EAC9C,YAAMqL,CAAC,GAAGm8E,EAAE,CAAC7pE,YAAH,CAAgB3d,CAAhB,CAAV;EACA,YAAMynB,KAAK,GAAGpc,CAAC,CAACsd,eAAF,EAAd;;EACA,WAAK,IAAI7I,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG0nE,EAAE,CAAClpE,gBAAH,EAApB,EAA2CwB,CAAC,EAA5C,EAAgD;EAC9C,YAAI9f,CAAC,KAAK8f,CAAV,EAAa;EACb,cAAMtU,EAAE,GAAGg8E,EAAE,CAAC7pE,YAAH,CAAgBmC,CAAhB,CAAX;EACA,aAAKqnG,mBAAL,CAAyB1/F,KAAzB,EAAgCjc,EAAhC,EAAoCo8E,KAApC;EACA,YAAI,KAAKo9B,SAAL,KAAmB,IAAvB,EAA6B,OAAO,IAAP;EAC9B;EACF;EACF;;EA3S4B;;ECRhB,MAAM33B,UAAN,CAAe;EAC5BhuF,EAAAA,WAAW,GAAG;EACZguF,IAAAA,UAAQ,CAAC3qF,YAAT,CAAsBC,KAAtB,CAA4B,IAA5B,EAAkCC,SAAlC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKgb,QAAL,GAAgB,IAAhB;EACA,SAAK6pG,OAAL,GAAe,IAAIv/G,SAAJ,EAAf;EACA,SAAKw/G,WAAL,GAAmB,IAAnB;EACA,SAAKh6B,KAAL,GAAa,IAAb;EACA,SAAKi6B,QAAL,GAAgB,IAAhB;EACA,SAAKC,QAAL,GAAgB,IAAhB;EACA,SAAKlgG,MAAL,GAAc,IAAd;EACA,SAAKD,MAAL,GAAc,IAAd;EACA,SAAKkmE,OAAL,GAAe,IAAf;EACA,SAAKk6B,YAAL,GAAoB,KAApB;EACA,SAAKC,cAAL,GAAsB,KAAtB;EACA,SAAKC,WAAL,GAAmB,KAAnB;EACA,UAAMlnG,OAAO,GAAG/d,SAAS,CAAC,CAAD,CAAzB;EACA,SAAK8a,QAAL,GAAgBiD,OAAhB;EACD;;EACD,SAAOmnG,kBAAP,CAA0B9V,OAA1B,EAAmC;EACjC,QAAIjuC,EAAE,GAAGiuC,OAAT;EACA,UAAMn9C,KAAK,GAAG,IAAI7sD,SAAJ,EAAd;;EACA,OAAG;EACD6sD,MAAAA,KAAK,CAACztD,GAAN,CAAU28D,EAAV;EACAA,MAAAA,EAAE,GAAGA,EAAE,CAACgD,OAAH,EAAL;EACAhkE,MAAAA,MAAM,CAACE,MAAP,CAAc8gE,EAAE,KAAK,IAArB,EAA2B,uBAA3B;EACAhhE,MAAAA,MAAM,CAACE,MAAP,CAAc8gE,EAAE,KAAKiuC,OAAP,IAAkB,CAACjuC,EAAE,CAAC7jB,QAAH,EAAjC,EAAgD,0BAAhD;EACD,KALD,QAKS6jB,EAAE,KAAKiuC,OALhB;;EAMA,WAAOn9C,KAAP;EACD;;EACD,SAAOxB,OAAP,CAAe/jB,MAAf,EAAuB1lC,SAAvB,EAAkC6hB,SAAlC,EAA6C;EAC3C,QAAI7hB,SAAJ,EACE,KAAK,IAAI5J,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsvC,MAAM,CAACzsC,MAA3B,EAAmC7C,CAAC,EAApC,EACEyrB,SAAS,CAACrkB,GAAV,CAAckoC,MAAM,CAACtvC,CAAD,CAApB,EAAyB,KAAzB,EAFJ,KAKE,KAAK,IAAIA,CAAC,GAAGsvC,MAAM,CAACzsC,MAAP,GAAgB,CAA7B,EAAgC7C,CAAC,IAAI,CAArC,EAAwCA,CAAC,EAAzC,EACEyrB,SAAS,CAACrkB,GAAV,CAAckoC,MAAM,CAACtvC,CAAD,CAApB,EAAyB,KAAzB;EAGL;;EACD,SAAOqvF,sBAAP,CAA8BC,MAA9B,EAAsCy4B,MAAtC,EAA8C;EAC5C,UAAMv4B,QAAQ,GAAGF,MAAM,CAACqwB,OAAP,EAAjB;EACA,UAAMlwB,OAAO,GAAGD,QAAQ,CAACzwE,mBAAT,EAAhB;EACA,QAAIqM,MAAM,GAAGokE,QAAQ,CAACjqE,cAAT,CAAwB,CAAxB,CAAb;EACA,QAAIyiG,OAAO,GAAG,IAAd;EACA,QAAIC,UAAU,GAAG,IAAjB;;EACA,SAAK,IAAI94F,EAAE,GAAG44F,MAAM,CAACxgH,QAAP,EAAd,EAAiC4nB,EAAE,CAAChmB,OAAH,EAAjC,GAAiD;EAC/C,YAAM++G,WAAW,GAAG/4F,EAAE,CAACjmB,IAAH,EAApB;EACA,YAAMi/G,OAAO,GAAGD,WAAW,CAACvI,OAAZ,EAAhB;EACA,YAAM7vB,WAAW,GAAGq4B,OAAO,CAACppG,mBAAR,EAApB;EACA,UAAI+wE,WAAW,CAAC3sF,MAAZ,CAAmBssF,OAAnB,CAAJ,EAAiC;EACjC,UAAI,CAACK,WAAW,CAACxhF,QAAZ,CAAqBmhF,OAArB,CAAL,EAAoC;EACpCrkE,MAAAA,MAAM,GAAGH,gBAAgB,CAACC,WAAjB,CAA6BskE,QAAQ,CAACpqE,cAAT,EAA7B,EAAwD8iG,WAAW,CAAC9iG,cAAZ,EAAxD,CAAT;EACA,YAAM67B,WAAW,GAAGinE,WAAW,CAAChoE,QAAZ,CAAqB90B,MAArB,CAApB;EACA,UAAI61B,WAAJ,EACE,IAAI+mE,OAAO,KAAK,IAAZ,IAAoBC,UAAU,CAAC35G,QAAX,CAAoBwhF,WAApB,CAAxB,EAA0D;EACxDk4B,QAAAA,OAAO,GAAGE,WAAV;EACAD,QAAAA,UAAU,GAAGD,OAAO,CAACrI,OAAR,GAAkB5gG,mBAAlB,EAAb;EACD;EAEJ;;EACD,WAAOipG,OAAP;EACD;;EACDI,EAAAA,UAAU,GAAG;EACX,WAAO,KAAKP,WAAZ;EACD;;EACDziG,EAAAA,cAAc,GAAG;EACf,QAAI,KAAKsiG,QAAL,KAAkB,IAAtB,EAA4B;EAC1B,YAAMj8F,SAAS,GAAG,IAAIriB,cAAJ,EAAlB;;EACA,WAAK,IAAIpJ,CAAC,GAAG,KAAKunH,OAAL,CAAahgH,QAAb,EAAb,EAAsCvH,CAAC,CAACmJ,OAAF,EAAtC,GAAqD;EACnD,cAAM46D,EAAE,GAAG/jE,CAAC,CAACkJ,IAAF,EAAX;EACA,cAAM6wD,IAAI,GAAGgK,EAAE,CAACC,OAAH,EAAb;EACAqpB,QAAAA,UAAQ,CAACh6B,OAAT,CAAiB0G,IAAI,CAACsxC,OAAL,GAAejmF,cAAf,EAAjB,EAAkD2+C,EAAE,CAACqnC,gBAAH,EAAlD,EAAyE3/E,SAAzE;EACD;;EACD,WAAKi8F,QAAL,GAAgBj8F,SAAS,CAAC/hB,iBAAV,EAAhB;EACD;;EACD,WAAO,KAAKg+G,QAAZ;EACD;;EACDW,EAAAA,aAAa,GAAG;EACd,WAAO,KAAKT,cAAZ;EACD;;EACDj9F,EAAAA,OAAO,GAAG;EACR,SAAKvF,cAAL;EACA,QAAI,KAAKsiG,QAAL,CAAc7kH,MAAd,IAAwB,CAA5B,EAA+B,OAAO,KAAP;EAC/B,SAAK88G,OAAL;EACA,WAAO6D,SAAS,CAAC74F,OAAV,CAAkB,KAAK6iE,KAAvB,CAAP;EACD;;EACDrV,EAAAA,KAAK,CAAC65B,OAAD,EAAU;EACb,QAAIjuC,EAAE,GAAGiuC,OAAT;;EACA,OAAG;EACD,WAAK5qG,GAAL,CAAS28D,EAAT;EACAA,MAAAA,EAAE,CAAC27C,OAAH,CAAW,IAAX;EACA37C,MAAAA,EAAE,GAAGA,EAAE,CAACgD,OAAH,EAAL;EACAhkE,MAAAA,MAAM,CAACE,MAAP,CAAc8gE,EAAE,KAAK,IAArB,EAA2B,uBAA3B;EACAhhE,MAAAA,MAAM,CAACE,MAAP,CAAc8gE,EAAE,KAAKiuC,OAAP,IAAkB,CAACjuC,EAAE,CAAC7jB,QAAH,EAAjC,EAAgD,0BAAhD;EACD,KAND,QAMS6jB,EAAE,KAAKiuC,OANhB;EAOD;;EACD9xD,EAAAA,QAAQ,CAACj6B,EAAD,EAAK;EACX,WAAO0b,QAAQ,CAACG,QAAT,KAAsB,KAAKwmF,UAAL,GAAkB9rE,MAAlB,CAAyBv2B,EAAzB,CAA7B;EACD;;EACDsiG,EAAAA,WAAW,GAAG;EACZ,QAAI,CAAC,KAAK96B,OAAV,EAAmB,OAAO,KAAP;EACnB,WAAO,CAAC,KAAK+6B,QAAL,EAAR;EACD;;EACDC,EAAAA,UAAU,GAAG;EACX,QAAI/5B,MAAM,GAAG,IAAb;;EACA,QAAI,KAAKlnE,MAAL,KAAgB,IAApB,EAA0B;EACxBknE,MAAAA,MAAM,GAAG,IAAI5kF,KAAJ,CAAU,KAAK0d,MAAL,CAAYhgB,IAAZ,EAAV,EAA8BuC,IAA9B,CAAmC,IAAnC,CAAT;;EACA,WAAK,IAAI/J,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKwnB,MAAL,CAAYhgB,IAAZ,EAApB,EAAwCxH,CAAC,EAAzC,EACE0uF,MAAM,CAAC1uF,CAAD,CAAN,GAAY,KAAKwnB,MAAL,CAAY3f,GAAZ,CAAgB7H,CAAhB,CAAZ;EAEH;;EACD,UAAMipB,IAAI,GAAG,KAAKvL,QAAL,CAAcmL,aAAd,CAA4B,KAAK2kE,KAAjC,EAAwCkB,MAAxC,CAAb;;EACA,WAAOzlE,IAAP;EACD;;EACDilE,EAAAA,MAAM,GAAG;EACP,WAAO,KAAKT,OAAZ;EACD;;EACDi7B,EAAAA,WAAW,GAAG;EACZ,WAAO,KAAKf,YAAZ;EACD;;EACDxkE,EAAAA,OAAO,GAAG;EACR,QAAIvgD,SAAS,CAAC,CAAD,CAAT,YAAwBgoB,UAA5B,EAAwC;EACtC,YAAM+mB,IAAI,GAAG/uC,SAAS,CAAC,CAAD,CAAtB;EACA,UAAI,KAAK4kB,MAAL,KAAgB,IAApB,EAA0B,KAAKA,MAAL,GAAc,IAAIxf,SAAJ,EAAd;;EAC1B,WAAKwf,MAAL,CAAYpgB,GAAZ,CAAgBuqC,IAAhB;EACD,KAJD,MAIO,IAAI/uC,SAAS,CAAC,CAAD,CAAT,YAAwByqF,UAA5B,EAAsC;EAC3C,YAAMs7B,MAAM,GAAG/lH,SAAS,CAAC,CAAD,CAAxB;EACA+lH,MAAAA,MAAM,CAACn6B,QAAP,CAAgB,IAAhB;EACA,YAAM78C,IAAI,GAAGg3E,MAAM,CAAChJ,OAAP,EAAb;EACA,UAAI,KAAKn4F,MAAL,KAAgB,IAApB,EAA0B,KAAKA,MAAL,GAAc,IAAIxf,SAAJ,EAAd;;EAC1B,WAAKwf,MAAL,CAAYpgB,GAAZ,CAAgBuqC,IAAhB;EACD;EACF;;EACDi3E,EAAAA,WAAW,CAACR,UAAD,EAAa;EACtB,SAAKP,WAAL,GAAmBO,UAAnB;EACA,SAAKR,cAAL,GAAsB,IAAtB;EACD;;EACDiB,EAAAA,YAAY,GAAG;EACb,QAAI,KAAK36B,MAAL,EAAJ,EAAmB,OAAO,IAAP;;EACnB,SAAK,IAAIluF,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKunH,OAAL,CAAa//G,IAAb,EAApB,EAAyCxH,CAAC,EAA1C,EAA8C;EAC5C,YAAM+jE,EAAE,GAAG,KAAKwjD,OAAL,CAAa1/G,GAAb,CAAiB7H,CAAjB,CAAX;;EACA,YAAM8oH,OAAO,GAAG/kD,EAAE,CAAC6D,MAAH,GAAY+3C,OAAZ,EAAhB;EACA,UAAImJ,OAAO,CAACP,WAAR,EAAJ,EAA2B,OAAOO,OAAP;EAC5B;;EACD,WAAO,IAAP;EACD;;EACDC,EAAAA,WAAW,GAAG;EACZ,UAAMjwG,IAAI,GAAG,KAAK6mG,OAAL,EAAb;EACA,SAAKlyB,OAAL,GAAe70E,WAAW,CAACC,KAAZ,CAAkBC,IAAI,CAACsM,cAAL,EAAlB,CAAf;EACD;;EACDojG,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAKjhG,MAAL,KAAgB,IAAvB;EACD;;EACDyhG,EAAAA,YAAY,GAAG;EACb,WAAO,KAAKH,YAAL,OAAwB,IAA/B;EACD;;EACDI,EAAAA,aAAa,GAAG;EACd,SAAK7jG,cAAL;EACA,WAAO,KAAK1H,QAAL,CAAc+H,gBAAd,CAA+B,KAAKiiG,QAApC,CAAP;EACD;;EACDhoH,EAAAA,QAAQ,GAAG;EACT,WAAOk6B,SAAS,CAACC,YAAV,CAAuB,IAAIrM,uBAAJ,CAA4B,KAAKpI,cAAL,EAA5B,CAAvB,CAAP;EACD;;EACDkjG,EAAAA,UAAU,GAAG;EACX,QAAI,KAAKb,QAAL,KAAkB,IAAtB,EACE,KAAKA,QAAL,GAAgB,IAAInoE,yBAAJ,CAA8B,KAAKqgE,OAAL,EAA9B,CAAhB;EAEF,WAAO,KAAK8H,QAAZ;EACD;;EACDn5B,EAAAA,QAAQ,GAAG;EACT,QAAI,KAAKJ,MAAL,EAAJ,EAAmB,OAAO,KAAK3mE,MAAZ;EACnB,WAAO,IAAP;EACD;;EACDngB,EAAAA,GAAG,CAAC28D,EAAD,EAAK;EACN,SAAKwjD,OAAL,CAAangH,GAAb,CAAiB28D,EAAjB;EACD;;EACD47C,EAAAA,OAAO,GAAG;EACR,QAAI,KAAKnyB,KAAL,KAAe,IAAnB,EAAyB,OAAO,KAAKA,KAAZ;EACzB,SAAKpoE,cAAL;EACA,QAAI,KAAKsiG,QAAL,CAAc7kH,MAAd,GAAuB,CAA3B,EAA8BiY,MAAM,CAACuiB,GAAP,CAAWC,OAAX,CAAmB,KAAKoqF,QAAxB;;EAC9B,QAAI;EACF,WAAKl6B,KAAL,GAAa,KAAK9vE,QAAL,CAAciK,gBAAd,CAA+B,KAAK+/F,QAApC,CAAb;EACD,KAFD,CAEE,OAAOz2G,EAAP,EAAW;EACX,UAAIA,EAAE,YAAY9R,SAAlB,EACE2b,MAAM,CAACuiB,GAAP,CAAWC,OAAX,CAAmB,KAAKoqF,QAAxB,EADF,KAEK,MAAMz2G,EAAN;EACN,KAND,SAMU;;EACV,WAAO,KAAKu8E,KAAZ;EACD;;EACD07B,EAAAA,cAAc,GAAG;EACf,QAAI,KAAKh7B,MAAL,EAAJ,EAAmB,OAAO,IAAP;;EACnB,SAAK,IAAIluF,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKunH,OAAL,CAAa//G,IAAb,EAApB,EAAyCxH,CAAC,EAA1C,EAA8C;EAC5C,YAAM+jE,EAAE,GAAG,KAAKwjD,OAAL,CAAa1/G,GAAb,CAAiB7H,CAAjB,CAAX;;EACA,YAAMmpH,QAAQ,GAAGplD,EAAE,CAAC6D,MAAH,GAAY+3C,OAAZ,GAAsBrxB,QAAtB,EAAjB;;EACA,UAAI66B,QAAQ,KAAK,IAAb,IAAqBA,QAAQ,CAACd,aAAT,EAAzB,EAAmD;EACjD,aAAKO,WAAL,CAAiB,CAACO,QAAQ,CAACf,UAAT,EAAlB;EACA,eAAO,IAAP;EACD;EACF;EACF;;EACD55B,EAAAA,QAAQ,CAAC/mE,KAAD,EAAQ;EACd,SAAKF,MAAL,GAAcE,KAAd;EACD;;EACD2hG,EAAAA,YAAY,CAACV,WAAD,EAAc;EACxB,SAAKf,YAAL,GAAoBe,WAApB;EACD;;EAhN2B;;EAkN9B,MAAMW,kBAAN,CAAyB;EACvB/iH,EAAAA,OAAO,CAACkqC,IAAD,EAAOC,IAAP,EAAa;EAClB,UAAM64E,EAAE,GAAG94E,IAAX;EACA,UAAM+4E,EAAE,GAAG94E,IAAX;EACA,WAAO64E,EAAE,CAAC3J,OAAH,GAAa9gG,WAAb,GAA2B7Z,SAA3B,CAAqCukH,EAAE,CAAC5J,OAAH,GAAa9gG,WAAb,EAArC,CAAP;EACD;;EACD,MAAI5Y,WAAJ,GAAkB;EAChB,WAAO,CAAC3D,UAAD,CAAP;EACD;;EARsB;;AAUzB+qF,YAAQ,CAACg8B,kBAAT,GAA8BA,kBAA9B;;EChOe,MAAMG,eAAN,SAA8BjhD,aAA9B,CAA0C;EACvDlpE,EAAAA,WAAW,GAAG;EACZ;EACAmqH,IAAAA,eAAe,CAAC9mH,YAAhB,CAA6BC,KAA7B,CAAmC,IAAnC,EAAyCC,SAAzC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKgb,QAAL,GAAgB,IAAhB;EACA,UAAMiD,OAAO,GAAG/d,SAAS,CAAC,CAAD,CAAzB;EACA,SAAK8a,QAAL,GAAgBiD,OAAhB;EACD;;EACD,SAAO8oG,oBAAP,CAA4B/4B,QAA5B,EAAsC;EACpC,UAAMg5B,cAAc,GAAG,IAAI1hH,SAAJ,EAAvB;EACA,QAAI2hH,SAAS,GAAG,CAAhB;;EACA,SAAK,IAAI3pH,CAAC,GAAG0wF,QAAQ,CAACnpF,QAAT,EAAb,EAAkCvH,CAAC,CAACmJ,OAAF,EAAlC,GAAiD;EAC/C,YAAM46D,EAAE,GAAG/jE,CAAC,CAACkJ,IAAF,EAAX;EACA,UAAI66D,EAAE,CAACrR,QAAH,EAAJ,EAAmB;EACnB,UAAIqR,EAAE,CAACjC,QAAH,MAAiB,CAArB,EAAwB;EACxB4nD,MAAAA,cAAc,CAACtiH,GAAf,CAAmB28D,EAAnB;EACA,YAAMlP,KAAK,GAAGw4B,UAAQ,CAACy6B,kBAAT,CAA4B/jD,EAA5B,CAAd;EACAylD,MAAAA,eAAe,CAACpzD,KAAhB,CAAsBvB,KAAtB,EAA6B80D,SAA7B;EACAA,MAAAA,SAAS;EACV;;EACD,WAAOD,cAAP;EACD;;EACD,SAAOE,mBAAP,CAA2BvrE,IAA3B,EAAiC;EAC/B,UAAMwW,KAAK,GAAGxW,IAAI,CAACouD,WAAL,GAAmB3oC,QAAnB,EAAd;EACA,QAAIjS,MAAM,GAAG,CAAb;;EACA,SAAK,IAAI7xD,CAAC,GAAG60D,KAAK,CAACttD,QAAN,EAAb,EAA+BvH,CAAC,CAACmJ,OAAF,EAA/B,GAA8C;EAC5C,YAAM46D,EAAE,GAAG/jE,CAAC,CAACkJ,IAAF,EAAX;EACA,UAAI,CAAC66D,EAAE,CAACrR,QAAH,EAAL,EAAoBb,MAAM;EAC3B;;EACD,WAAOA,MAAP;EACD;;EACD,SAAOg4D,cAAP,CAAsBxrE,IAAtB,EAA4B;EAC1B,UAAMwW,KAAK,GAAGxW,IAAI,CAACouD,WAAL,GAAmB3oC,QAAnB,EAAd;;EACA,SAAK,IAAI9jE,CAAC,GAAG60D,KAAK,CAACttD,QAAN,EAAb,EAA+BvH,CAAC,CAACmJ,OAAF,EAA/B,GAA8C;EAC5C,YAAM46D,EAAE,GAAG/jE,CAAC,CAACkJ,IAAF,EAAX;EACA66D,MAAAA,EAAE,CAAC0nC,SAAH,CAAa,IAAb;EACA,YAAM75C,GAAG,GAAGmS,EAAE,CAAC6D,MAAH,EAAZ;EACA,UAAIhW,GAAG,KAAK,IAAZ,EAAkBA,GAAG,CAAC65C,SAAJ,CAAc,IAAd;EACnB;EACF;;EACD,SAAOr1C,KAAP,CAAas6B,QAAb,EAAuBt6B,KAAvB,EAA8B;EAC5B,SAAK,IAAIp2D,CAAC,GAAG0wF,QAAQ,CAACnpF,QAAT,EAAb,EAAkCvH,CAAC,CAACmJ,OAAF,EAAlC,GAAiD;EAC/C,YAAM46D,EAAE,GAAG/jE,CAAC,CAACkJ,IAAF,EAAX;EACA66D,MAAAA,EAAE,CAAClC,QAAH,CAAYzL,KAAZ;EACD;EACF;;EACD,SAAO0zD,kBAAP,CAA0BzrE,IAA1B,EAAgC;EAC9B,UAAMkvD,MAAM,GAAGlvD,IAAI,CAACouD,WAAL,EAAf;EACA,QAAIuF,OAAO,GAAG,IAAd;EACA,QAAI+X,MAAM,GAAG,IAAb;;EACA,SAAK,IAAI/pH,CAAC,GAAGutG,MAAM,CAACzpC,QAAP,GAAkBv8D,QAAlB,EAAb,EAA2CvH,CAAC,CAACmJ,OAAF,EAA3C,GAA0D;EACxD,YAAM6gH,KAAK,GAAGhqH,CAAC,CAACkJ,IAAF,EAAd;EACA,UAAI8gH,KAAK,CAACt3D,QAAN,EAAJ,EAAsB;EACtB,UAAIs/C,OAAO,KAAK,IAAhB,EAAsBA,OAAO,GAAGgY,KAAV;;EACtB,UAAID,MAAM,KAAK,IAAf,EAAqB;EACnB,cAAMn4D,GAAG,GAAGm4D,MAAM,CAACniD,MAAP,EAAZ;EACAhW,QAAAA,GAAG,CAACD,OAAJ,CAAYq4D,KAAZ;EACD;;EACDD,MAAAA,MAAM,GAAGC,KAAT;EACD;;EACD,QAAID,MAAM,KAAK,IAAf,EAAqB;EACnB,YAAMn4D,GAAG,GAAGm4D,MAAM,CAACniD,MAAP,EAAZ;EACAhW,MAAAA,GAAG,CAACD,OAAJ,CAAYqgD,OAAZ;EACD;EACF;;EACD,SAAOiY,mBAAP,CAA2B5rE,IAA3B,EAAiC+X,KAAjC,EAAwC;EACtC,UAAMm3C,MAAM,GAAGlvD,IAAI,CAACouD,WAAL,EAAf;EACA,QAAIyd,UAAU,GAAG,IAAjB;EACA,QAAIC,QAAQ,GAAG,IAAf;EACA,UAAMt1D,KAAK,GAAG04C,MAAM,CAACzpC,QAAP,EAAd;;EACA,SAAK,IAAI9jE,CAAC,GAAG60D,KAAK,CAACrtD,IAAN,KAAe,CAA5B,EAA+BxH,CAAC,IAAI,CAApC,EAAuCA,CAAC,EAAxC,EAA4C;EAC1C,YAAM+jE,EAAE,GAAGlP,KAAK,CAAChtD,GAAN,CAAU7H,CAAV,CAAX;EACA,YAAM4xD,GAAG,GAAGmS,EAAE,CAAC6D,MAAH,EAAZ;EACA,UAAIoiD,KAAK,GAAG,IAAZ;EACA,UAAIjmD,EAAE,CAACjC,QAAH,OAAkB1L,KAAtB,EAA6B4zD,KAAK,GAAGjmD,EAAR;EAC7B,UAAIqmD,IAAI,GAAG,IAAX;EACA,UAAIx4D,GAAG,CAACkQ,QAAJ,OAAmB1L,KAAvB,EAA8Bg0D,IAAI,GAAGx4D,GAAP;EAC9B,UAAIo4D,KAAK,KAAK,IAAV,IAAkBI,IAAI,KAAK,IAA/B,EAAqC;EACrC,UAAIA,IAAI,KAAK,IAAb,EACED,QAAQ,GAAGC,IAAX;;EAEF,UAAIJ,KAAK,KAAK,IAAd,EAAoB;EAClB,YAAIG,QAAQ,KAAK,IAAjB,EAAuB;EACrBA,UAAAA,QAAQ,CAACx4D,OAAT,CAAiBq4D,KAAjB;EACAG,UAAAA,QAAQ,GAAG,IAAX;EACD;;EACD,YAAID,UAAU,KAAK,IAAnB,EAAyBA,UAAU,GAAGF,KAAb;EAC1B;EACF;;EACD,QAAIG,QAAQ,KAAK,IAAjB,EAAuB;EACrBpnH,MAAAA,MAAM,CAACE,MAAP,CAAcinH,UAAU,KAAK,IAA7B;EACAC,MAAAA,QAAQ,CAACx4D,OAAT,CAAiBu4D,UAAjB;EACD;EACF;;EACD,SAAOztB,SAAP,CAAiBp+C,IAAjB,EAAuB+X,KAAvB,EAA8B;EAC5B,UAAMvB,KAAK,GAAGxW,IAAI,CAACouD,WAAL,GAAmB3oC,QAAnB,EAAd;EACA,QAAIjS,MAAM,GAAG,CAAb;;EACA,SAAK,IAAI7xD,CAAC,GAAG60D,KAAK,CAACttD,QAAN,EAAb,EAA+BvH,CAAC,CAACmJ,OAAF,EAA/B,GAA8C;EAC5C,YAAM46D,EAAE,GAAG/jE,CAAC,CAACkJ,IAAF,EAAX;EACA,UAAI66D,EAAE,CAACjC,QAAH,OAAkB1L,KAAtB,EAA6BvE,MAAM;EACpC;;EACD,WAAOA,MAAP;EACD;;EACD,SAAOw4D,qBAAP,CAA6BrY,OAA7B,EAAsC57C,KAAtC,EAA6C;EAC3C,QAAI2N,EAAE,GAAGiuC,OAAT;EACA,QAAIsY,QAAQ,GAAG,IAAf;;EACA,OAAG;EACD,YAAMjsE,IAAI,GAAG0lB,EAAE,CAACsoC,WAAH,EAAb;;EACA,UAAImd,eAAe,CAAC/sB,SAAhB,CAA0Bp+C,IAA1B,EAAgC+X,KAAhC,IAAyC,CAA7C,EAAgD;EAC9C,YAAIk0D,QAAQ,KAAK,IAAjB,EAAuBA,QAAQ,GAAG,IAAItiH,SAAJ,EAAX;EACvBsiH,QAAAA,QAAQ,CAACljH,GAAT,CAAai3C,IAAb;EACD;;EACD0lB,MAAAA,EAAE,GAAGA,EAAE,CAACgD,OAAH,EAAL;EACAhkE,MAAAA,MAAM,CAACE,MAAP,CAAc8gE,EAAE,KAAK,IAArB,EAA2B,uBAA3B;EACAhhE,MAAAA,MAAM,CAACE,MAAP,CAAc8gE,EAAE,KAAKiuC,OAAP,IAAkB,CAACjuC,EAAE,CAAC7jB,QAAH,EAAjC,EAAgD,0BAAhD;EACD,KATD,QASS6jB,EAAE,KAAKiuC,OAThB;;EAUA,WAAOsY,QAAP;EACD;;EACDC,EAAAA,YAAY,CAACvY,OAAD,EAAU;EACpB,UAAMpjB,EAAE,GAAG,IAAIvB,UAAJ,CAAa,KAAK3vE,QAAlB,CAAX;EACAkxE,IAAAA,EAAE,CAACzW,KAAH,CAAS65B,OAAT;EACA,WAAOpjB,EAAP;EACD;;EACD47B,EAAAA,kBAAkB,GAAG;EACnB,QAAI5nH,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,aAAO,IAAP,EAAa;EAEX,QAAiB,OAAO,IAAP;EAElB;EACF;EAGF;;EACDinH,EAAAA,kBAAkB,GAAG;EACnB,SAAK,IAAIW,KAAK,GAAG,KAAKvc,YAAL,EAAjB,EAAsCuc,KAAK,CAACthH,OAAN,EAAtC,GAAyD;EACvD,YAAMk1C,IAAI,GAAGosE,KAAK,CAACvhH,IAAN,EAAb;EACAsgH,MAAAA,eAAe,CAACM,kBAAhB,CAAmCzrE,IAAnC;EACD;EACF;;EACDgV,EAAAA,OAAO,CAACx2C,IAAD,EAAO;EACZ,QAAIA,IAAI,CAACvV,OAAL,EAAJ,EACE,OAAO,IAAP;EAEF,UAAMojH,OAAO,GAAGz/F,gBAAgB,CAACU,oBAAjB,CAAsC9O,IAAI,CAACuI,cAAL,EAAtC,CAAhB;EACA,QAAIslG,OAAO,CAAC7nH,MAAR,GAAiB,CAArB,EACE,OAAO,IAAP;EAEF,UAAMiwF,OAAO,GAAG43B,OAAO,CAAC,CAAD,CAAvB;EACA,UAAMC,KAAK,GAAGD,OAAO,CAACA,OAAO,CAAC7nH,MAAR,GAAiB,CAAlB,CAArB;EACA,UAAM+nH,MAAM,GAAG,KAAK3kD,OAAL,CAAa6sB,OAAb,CAAf;EACA,UAAM+3B,IAAI,GAAG,KAAK5kD,OAAL,CAAa0kD,KAAb,CAAb;EACA,UAAMttB,GAAG,GAAG,IAAIoiB,sBAAJ,CAA2BmL,MAA3B,EAAmCC,IAAnC,EAAyCH,OAAO,CAAC,CAAD,CAAhD,EAAqD,IAArD,CAAZ;EACA,UAAM5gD,GAAG,GAAG,IAAI21C,sBAAJ,CAA2BoL,IAA3B,EAAiCD,MAAjC,EAAyCF,OAAO,CAACA,OAAO,CAAC7nH,MAAR,GAAiB,CAAlB,CAAhD,EAAsE,KAAtE,CAAZ;EACA,UAAMk3D,IAAI,GAAG,IAAI6lD,cAAJ,CAAmB/iG,IAAnB,CAAb;EACAk9C,IAAAA,IAAI,CAAC4yC,gBAAL,CAAsBtP,GAAtB,EAA2BvzB,GAA3B;EACA,SAAK1iE,GAAL,CAAS2yD,IAAT;EACD;;EACD+wD,EAAAA,cAAc,GAAG;EACf,SAAKhB,kBAAL;EACAN,IAAAA,eAAe,CAACC,oBAAhB,CAAqC,KAAK1b,SAA1C;EACA,UAAMgd,QAAQ,GAAG,IAAI/iH,SAAJ,EAAjB;;EACA,SAAK,IAAIhI,CAAC,GAAG,KAAK+tG,SAAL,CAAexmG,QAAf,EAAb,EAAwCvH,CAAC,CAACmJ,OAAF,EAAxC,GAAuD;EACrD,YAAM46D,EAAE,GAAG/jE,CAAC,CAACkJ,IAAF,EAAX;EACA,UAAI66D,EAAE,CAACrR,QAAH,EAAJ,EAAmB;EACnB,YAAMd,GAAG,GAAGmS,EAAE,CAAC6D,MAAH,EAAZ;;EACA,UAAI7D,EAAE,CAACjC,QAAH,OAAkBlQ,GAAG,CAACkQ,QAAJ,EAAtB,EAAsC;EACpCiC,QAAAA,EAAE,CAAC0nC,SAAH,CAAa,IAAb;EACA75C,QAAAA,GAAG,CAAC65C,SAAJ,CAAc,IAAd;EACA,cAAMpmG,CAAC,GAAG0+D,EAAE,CAACC,OAAH,EAAV;EACA+mD,QAAAA,QAAQ,CAAC3jH,GAAT,CAAa/B,CAAC,CAACgmG,OAAF,EAAb;EACD;EACF;;EACD,WAAO0f,QAAP;EACD;;EACDC,EAAAA,YAAY,GAAG;EACb,SAAKlB,kBAAL;EACAN,IAAAA,eAAe,CAACpzD,KAAhB,CAAsB,KAAK23C,SAA3B,EAAsC,CAAC,CAAvC;EACA,UAAMkd,YAAY,GAAGzB,eAAe,CAACC,oBAAhB,CAAqC,KAAK1b,SAA1C,CAArB;EACA,SAAKmd,gCAAL,CAAsCD,YAAtC;EACA,UAAME,YAAY,GAAG,IAAInjH,SAAJ,EAArB;;EACA,SAAK,IAAIhI,CAAC,GAAG,KAAK+tG,SAAL,CAAexmG,QAAf,EAAb,EAAwCvH,CAAC,CAACmJ,OAAF,EAAxC,GAAuD;EACrD,YAAM46D,EAAE,GAAG/jE,CAAC,CAACkJ,IAAF,EAAX;EACA,UAAI66D,EAAE,CAACrR,QAAH,EAAJ,EAAmB;EACnB,UAAIqR,EAAE,CAAC7jB,QAAH,EAAJ,EAAmB;EACnB,YAAM0uC,EAAE,GAAG,KAAK27B,YAAL,CAAkBxmD,EAAlB,CAAX;EACAonD,MAAAA,YAAY,CAAC/jH,GAAb,CAAiBwnF,EAAjB;EACD;;EACD,WAAOu8B,YAAP;EACD;;EACDllD,EAAAA,OAAO,CAAChgD,EAAD,EAAK;EACV,QAAIo4B,IAAI,GAAG,KAAKiwD,QAAL,CAAcroF,EAAd,CAAX;;EACA,QAAIo4B,IAAI,KAAK,IAAb,EAAmB;EACjBA,MAAAA,IAAI,GAAG,IAAIqlB,MAAJ,CAASz9C,EAAT,CAAP;EACA,WAAK7e,GAAL,CAASi3C,IAAT;EACD;;EACD,WAAOA,IAAP;EACD;;EACD6sE,EAAAA,gCAAgC,CAACE,SAAD,EAAY;EAC1C,SAAK,IAAIprH,CAAC,GAAGorH,SAAS,CAAC7jH,QAAV,EAAb,EAAmCvH,CAAC,CAACmJ,OAAF,EAAnC,GAAkD;EAChD,YAAM46D,EAAE,GAAG/jE,CAAC,CAACkJ,IAAF,EAAX;EACA,YAAMktD,KAAK,GAAG2N,EAAE,CAACjC,QAAH,EAAd;EACA,YAAMwoD,QAAQ,GAAGd,eAAe,CAACa,qBAAhB,CAAsCtmD,EAAtC,EAA0C3N,KAA1C,CAAjB;EACA,UAAIk0D,QAAQ,KAAK,IAAjB,EAAuB;;EACvB,WAAK,IAAIG,KAAK,GAAGH,QAAQ,CAAC/iH,QAAT,EAAjB,EAAsCkjH,KAAK,CAACthH,OAAN,EAAtC,GAAyD;EACvD,cAAMk1C,IAAI,GAAGosE,KAAK,CAACvhH,IAAN,EAAb;EACAsgH,QAAAA,eAAe,CAACS,mBAAhB,CAAoC5rE,IAApC,EAA0C+X,KAA1C;EACD;EACF;EACF;;EACDi1D,EAAAA,aAAa,GAAG;EACd,UAAMC,aAAa,GAAG,KAAKtd,iBAAL,CAAuB,CAAvB,CAAtB;EACA,UAAMud,WAAW,GAAG,IAAI58F,OAAJ,EAApB;EACA,UAAMu+D,SAAS,GAAG,IAAI1pC,KAAJ,EAAlB;;EACA,SAAK,IAAIxjD,CAAC,GAAGsrH,aAAa,CAAC/jH,QAAd,EAAb,EAAuCvH,CAAC,CAACmJ,OAAF,EAAvC,GACE+jF,SAAS,CAAC/kF,IAAV,CAAenI,CAAC,CAACkJ,IAAF,EAAf;;EAEF,WAAO,CAACgkF,SAAS,CAAC5lF,OAAV,EAAR,EAA6B;EAC3B,YAAM+2C,IAAI,GAAG6uC,SAAS,CAACzpC,GAAV,EAAb;EACA+lE,MAAAA,eAAe,CAACK,cAAhB,CAA+BxrE,IAA/B;EACA,YAAMmtE,YAAY,GAAGntE,IAAI,CAACouD,WAAL,GAAmB3oC,QAAnB,EAArB;;EACA,WAAK,IAAI9jE,CAAC,GAAGwrH,YAAY,CAACjkH,QAAb,EAAb,EAAsCvH,CAAC,CAACmJ,OAAF,EAAtC,GAAqD;EACnD,cAAM46D,EAAE,GAAG/jE,CAAC,CAACkJ,IAAF,EAAX;EACA66D,QAAAA,EAAE,CAAC0nC,SAAH,CAAa,IAAb;EACA,cAAM75C,GAAG,GAAGmS,EAAE,CAAC6D,MAAH,EAAZ;EACA,YAAIhW,GAAG,KAAK,IAAZ,EAAkBA,GAAG,CAAC65C,SAAJ,CAAc,IAAd;EAClB,cAAMpmG,CAAC,GAAG0+D,EAAE,CAACC,OAAH,EAAV;EACAunD,QAAAA,WAAW,CAACnkH,GAAZ,CAAgB/B,CAAC,CAACgmG,OAAF,EAAhB;EACA,cAAM0E,MAAM,GAAGhsC,EAAE,CAACwoC,SAAH,EAAf;EACA,YAAIid,eAAe,CAACI,mBAAhB,CAAoC7Z,MAApC,MAAgD,CAApD,EAAuD7iB,SAAS,CAAC/kF,IAAV,CAAe4nG,MAAf;EACxD;EACF;;EACD,WAAOwb,WAAP;EACD;;EA3OsD;;ECR1C,MAAME,YAAN,CAAmB;EAChCpsH,EAAAA,WAAW,GAAG;EACZosH,IAAAA,YAAY,CAAC/oH,YAAb,CAA0BC,KAA1B,CAAgC,IAAhC,EAAsCC,SAAtC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKgpH,OAAL,GAAe,IAAf;EACA,SAAKC,WAAL,GAAmB,IAAnB;EACA,UAAMC,MAAM,GAAGhpH,SAAS,CAAC,CAAD,CAAxB;EACA,SAAK8oH,OAAL,GAAeE,MAAf;EACA,SAAK7I,UAAL;EACD;;EACD,SAAO8I,mBAAP,CAA2BnkG,KAA3B,EAAkCkkG,MAAlC,EAA0C;EACxC,UAAME,QAAQ,GAAG,IAAIL,YAAJ,CAAiBG,MAAjB,CAAjB;EACAE,IAAAA,QAAQ,CAACD,mBAAT,CAA6BnkG,KAA7B;EACD;;EACDmkG,EAAAA,mBAAmB,CAACE,QAAD,EAAW;EAC5B,SAAK,IAAI/rH,CAAC,GAAG+rH,QAAQ,CAACxkH,QAAT,EAAb,EAAkCvH,CAAC,CAACmJ,OAAF,EAAlC,GAAiD;EAC/C,YAAMw/G,MAAM,GAAG3oH,CAAC,CAACkJ,IAAF,EAAf;EACA,WAAK8iH,iBAAL,CAAuBrD,MAAvB;EACD;EACF;;EACD5F,EAAAA,UAAU,GAAG;EACX,SAAK4I,WAAL,GAAmB,IAAI9xC,OAAJ,EAAnB;;EACA,SAAK,MAAMpyD,KAAX,IAAoB,KAAKikG,OAAzB,EACE,KAAKC,WAAL,CAAiBztE,MAAjB,CAAwBz2B,KAAK,CAACk4F,OAAN,GAAgB5gG,mBAAhB,EAAxB,EAA+D0I,KAA/D;EAEH;;EACDwkG,EAAAA,sBAAsB,CAACC,OAAD,EAAU;EAC9B,WAAO,KAAKP,WAAL,CAAiBruE,KAAjB,CAAuB4uE,OAAvB,CAAP;EACD;;EACDC,EAAAA,mBAAmB,CAAC78B,MAAD,EAAS;EAC1B,UAAMG,OAAO,GAAGH,MAAM,CAACqwB,OAAP,GAAiB5gG,mBAAjB,EAAhB;EACA,UAAMqtG,eAAe,GAAG,KAAKH,sBAAL,CAA4Bx8B,OAA5B,CAAxB;EACA,WAAOpC,UAAQ,CAACgC,sBAAT,CAAgCC,MAAhC,EAAwC88B,eAAxC,CAAP;EACD;;EACDJ,EAAAA,iBAAiB,CAACrD,MAAD,EAAS;EACxB,UAAMlhG,KAAK,GAAG,KAAK0kG,mBAAL,CAAyBxD,MAAzB,CAAd;EACA,QAAIlhG,KAAK,KAAK,IAAd,EACEA,KAAK,CAAC07B,OAAN,CAAcwlE,MAAd;EAEH;;EAxC+B;;ECSnB,MAAM0D,WAAN,CAAkB;EAC/BhtH,EAAAA,WAAW,GAAG;EACZgtH,IAAAA,WAAW,CAAC3pH,YAAZ,CAAyBC,KAAzB,CAA+B,IAA/B,EAAqCC,SAArC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK4pH,gBAAL,GAAwB,IAAIC,eAAJ,CAAoB,IAApB,CAAxB;EACA,SAAKx4D,MAAL,GAAc,IAAd;EACA,SAAKy4D,QAAL,GAAgB,IAAIxkH,SAAJ,EAAhB;EACA,SAAKykH,SAAL,GAAiB,IAAIzkH,SAAJ,EAAjB;EACA,SAAK0kH,iBAAL,GAAyB,IAAI1kH,SAAJ,EAAzB;EACA,SAAK2kH,SAAL,GAAiB,IAAjB;EACA,SAAKv9B,UAAL,GAAkB,IAAlB;EACA,SAAKw9B,SAAL,GAAiB,IAAjB;EACA,SAAKC,qBAAL,GAA6B,IAA7B;EACA,SAAKC,qBAAL,GAA6B,IAA7B;EACA,SAAKh9E,YAAL,GAAoB,IAApB;;EACA,QAAIltC,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1BwpH,MAAAA,WAAW,CAAC3pH,YAAZ,CAAyBI,IAAzB,CAA8B,IAA9B,EAAoC,KAApC;EACD,KAFD,MAEO,IAAIF,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMkqH,oBAAoB,GAAGnqH,SAAS,CAAC,CAAD,CAAtC;EACA,WAAKkqH,qBAAL,GAA6BC,oBAA7B;EACD;EACF;;EACD,SAAOC,eAAP,CAAuBz9B,SAAvB,EAAkC09B,UAAlC,EAA8C;EAC5C,UAAMC,QAAQ,GAAG,IAAIllH,SAAJ,EAAjB;;EACA,SAAK,IAAIhI,CAAC,GAAGuvF,SAAS,CAAChoF,QAAV,EAAb,EAAmCvH,CAAC,CAACmJ,OAAF,EAAnC,GAAkD;EAChD,YAAMylF,EAAE,GAAG5uF,CAAC,CAACkJ,IAAF,EAAX;EACA,UAAI+jH,UAAU,IAAIr+B,EAAE,CAACw5B,UAAH,EAAlB,EACE8E,QAAQ,CAAC9lH,GAAT,CAAawnF,EAAE,CAAC65B,UAAH,EAAb;EAEH;;EACD,WAAOyE,QAAP;EACD;;EACD,SAAOC,eAAP,CAAuB59B,SAAvB,EAAkC;EAChC,SAAK,IAAIvvF,CAAC,GAAGuvF,SAAS,CAAChoF,QAAV,EAAb,EAAmCvH,CAAC,CAACmJ,OAAF,EAAnC,GAAkD;EAChD,YAAMylF,EAAE,GAAG5uF,CAAC,CAACkJ,IAAF,EAAX;EACA,YAAMkkH,WAAW,GAAGx+B,EAAE,CAACi6B,YAAH,EAApB;;EACA,UAAIuE,WAAW,KAAK,IAAhB,IAAwB,CAACA,WAAW,CAAC1E,WAAZ,EAA7B,EAAwD;EACtD95B,QAAAA,EAAE,CAACg6B,WAAH,CAAe,IAAf;EACAwE,QAAAA,WAAW,CAAChE,YAAZ,CAAyB,IAAzB;EACD;EACF;EACF;;EACD,SAAOiE,kBAAP,CAA0B99B,SAA1B,EAAqC;EACnC88B,IAAAA,WAAW,CAACc,eAAZ,CAA4B59B,SAA5B;EACA,QAAI+9B,YAAY,GAAG,IAAnB;;EACA,OAAG;EACDA,MAAAA,YAAY,GAAG,KAAf;;EACA,WAAK,IAAIttH,CAAC,GAAGuvF,SAAS,CAAChoF,QAAV,EAAb,EAAmCvH,CAAC,CAACmJ,OAAF,EAAnC,GAAkD;EAChD,cAAMylF,EAAE,GAAG5uF,CAAC,CAACkJ,IAAF,EAAX;EACA,YAAI0lF,EAAE,CAACy5B,aAAH,EAAJ,EAAwB;EACxBz5B,QAAAA,EAAE,CAACs6B,cAAH;EACA,YAAI,CAACt6B,EAAE,CAACy5B,aAAH,EAAL,EACEiF,YAAY,GAAG,IAAf;EAEH;EACF,KAVD,QAUSA,YAVT;EAWD;;EACDr5E,EAAAA,WAAW,GAAG;EACZ,QAAI,KAAKnE,YAAL,KAAsB,IAA1B,EAAgC,KAAKA,YAAL,GAAoB,IAAIze,eAAJ,EAApB;EAChC,SAAKk8F,UAAL;EACA,QAAI,KAAKT,qBAAT,EACE,OAAO,KAAKh9E,YAAL,CAAkB5lB,aAAlB,CAAgC,KAAK0iG,SAArC,CAAP;EAEF,WAAO,KAAK98E,YAAL,CAAkBrpB,wBAAlB,CAA2C4K,eAAe,CAACS,eAAhB,CAAgC,KAAK86F,SAArC,CAA3C,CAAP;EACD;;EACDY,EAAAA,mBAAmB,GAAG;EACpB,SAAKD,UAAL;EACA,WAAO,KAAKb,iBAAZ;EACD;;EACDe,EAAAA,cAAc,CAACtC,YAAD,EAAeuC,iBAAf,EAAkCC,eAAlC,EAAmD;EAC/D,SAAK,IAAI3tH,CAAC,GAAGmrH,YAAY,CAAC5jH,QAAb,EAAb,EAAsCvH,CAAC,CAACmJ,OAAF,EAAtC,GAAqD;EACnD,YAAMylF,EAAE,GAAG5uF,CAAC,CAACkJ,IAAF,EAAX;EACA,UAAI0lF,EAAE,CAACjkE,OAAH,EAAJ,EAAkB+iG,iBAAiB,CAACtmH,GAAlB,CAAsBwnF,EAAtB,EAAlB,KAAkD++B,eAAe,CAACvmH,GAAhB,CAAoBwnF,EAAE,CAACq6B,aAAH,EAApB;EACnD;EACF;;EACDsE,EAAAA,UAAU,GAAG;EACX,QAAI,KAAKX,SAAL,KAAmB,IAAvB,EAA6B,OAAO,IAAP;EAC7B,SAAKA,SAAL,GAAiB,IAAI5kH,SAAJ,EAAjB;EACA,QAAI,KAAK+rD,MAAL,KAAgB,IAApB,EAA0B,OAAO,IAAP;EAC1B,SAAKy4D,QAAL,GAAgB,KAAKz4D,MAAL,CAAYs3D,aAAZ,EAAhB;EACA,SAAKoB,SAAL,GAAiB,KAAK14D,MAAL,CAAY+2D,cAAZ,EAAjB;;EACA,UAAMK,YAAY,GAAG,KAAKp3D,MAAL,CAAYi3D,YAAZ,EAArB;;EACA,QAAI0C,iBAAiB,GAAG,IAAI1lH,SAAJ,EAAxB;EACA,SAAK0kH,iBAAL,GAAyB,IAAI1kH,SAAJ,EAAzB;EACA,QAAI,KAAK6kH,qBAAT,EACE,KAAKY,cAAL,CAAoBtC,YAApB,EAAkCuC,iBAAlC,EAAqD,KAAKhB,iBAA1D,EADF,KAGEgB,iBAAiB,GAAGvC,YAApB;EAEF,SAAKyC,kBAAL,CAAwBF,iBAAxB;EACAjC,IAAAA,YAAY,CAACI,mBAAb,CAAiC,KAAKc,SAAtC,EAAiD,KAAKv9B,UAAtD;EACA16C,IAAAA,WAAW,CAAChsC,IAAZ,CAAiB,KAAK0mF,UAAtB,EAAkC,IAAI/B,UAAQ,CAACg8B,kBAAb,EAAlC;EACA,QAAI4D,UAAU,GAAG,IAAjB;;EACA,QAAI,KAAKH,qBAAT,EAAgC;EAC9BT,MAAAA,WAAW,CAACgB,kBAAZ,CAA+B,KAAKj+B,UAApC;EACA69B,MAAAA,UAAU,GAAG,KAAb;EACD;;EACD,SAAKL,SAAL,GAAiBP,WAAW,CAACW,eAAZ,CAA4B,KAAK59B,UAAjC,EAA6C69B,UAA7C,CAAjB;EACD;;EACDY,EAAAA,UAAU,GAAG;EACX,SAAKN,UAAL;EACA,WAAO,KAAKf,QAAZ;EACD;;EACDsB,EAAAA,WAAW,GAAG;EACZ,SAAKP,UAAL;EACA,WAAO,KAAKd,SAAZ;EACD;;EACDr3E,EAAAA,WAAW,GAAG;EACZ,SAAKm4E,UAAL;EACA,WAAO,KAAKX,SAAZ;EACD;;EACDxlH,EAAAA,GAAG,GAAG;EACJ,QAAImC,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAeuE,UAAf,CAAhB,EAA4C;EAC1C,YAAM+rB,QAAQ,GAAGtwB,SAAS,CAAC,CAAD,CAA1B;;EACA,WAAK,IAAI5C,CAAC,GAAGkzB,QAAQ,CAAC3rB,QAAT,EAAb,EAAkCvH,CAAC,CAACmJ,OAAF,EAAlC,GAAiD;EAC/C,cAAM4tB,QAAQ,GAAG/2B,CAAC,CAACkJ,IAAF,EAAjB;EACA,aAAK9B,GAAL,CAAS2vB,QAAT;EACD;EACF,KAND,MAMO,IAAIn0B,SAAS,CAAC,CAAD,CAAT,YAAwBoiB,UAA5B,EAAwC;EAC7C,YAAMnI,IAAI,GAAGja,SAAS,CAAC,CAAD,CAAtB;EACA,WAAKktC,YAAL,GAAoBjzB,IAAI,CAACY,UAAL,EAApB;EACA,UAAI,KAAKs2C,MAAL,KAAgB,IAApB,EAA0B,KAAKA,MAAL,GAAc,IAAIy1D,eAAJ,CAAoB,KAAK15E,YAAzB,CAAd;;EAC1B,WAAKikB,MAAL,CAAYV,OAAZ,CAAoBx2C,IAApB;EACD,KALM,MAKA,IAAIja,SAAS,CAAC,CAAD,CAAT,YAAwBya,QAA5B,EAAsC;EAC3C,YAAMc,CAAC,GAAGvb,SAAS,CAAC,CAAD,CAAnB;EACAub,MAAAA,CAAC,CAACxb,KAAF,CAAQ,KAAK2pH,gBAAb;EACD;EACF;;EACDyB,EAAAA,kBAAkB,CAACC,oBAAD,EAAuB;EACvC,SAAKnB,qBAAL,GAA6BmB,oBAA7B;EACD;;EACDJ,EAAAA,kBAAkB,CAACzC,YAAD,EAAe;EAC/B,SAAKwB,SAAL,GAAiB,IAAI3kH,SAAJ,EAAjB;EACA,SAAKonF,UAAL,GAAkB,IAAIpnF,SAAJ,EAAlB;;EACA,SAAK,IAAIhI,CAAC,GAAGmrH,YAAY,CAAC5jH,QAAb,EAAb,EAAsCvH,CAAC,CAACmJ,OAAF,EAAtC,GAAqD;EACnD,YAAMylF,EAAE,GAAG5uF,CAAC,CAACkJ,IAAF,EAAX;EACA0lF,MAAAA,EAAE,CAACm6B,WAAH;EACA,UAAIn6B,EAAE,CAACV,MAAH,EAAJ,EAAiB,KAAKy+B,SAAL,CAAevlH,GAAf,CAAmBwnF,EAAnB,EAAjB,KAA8C,KAAKQ,UAAL,CAAgBhoF,GAAhB,CAAoBwnF,EAApB;EAC/C;EACF;;EA5I8B;;EA8IjC,MAAM29B,eAAN,CAAsB;EACpBltH,EAAAA,WAAW,GAAG;EACZktH,IAAAA,eAAe,CAAC7pH,YAAhB,CAA6BC,KAA7B,CAAmC,IAAnC,EAAyCC,SAAzC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK2I,CAAL,GAAS,IAAT;EACA,UAAMA,CAAC,GAAGzI,SAAS,CAAC,CAAD,CAAnB;EACA,SAAKyI,CAAL,GAASA,CAAT;EACD;;EACDV,EAAAA,MAAM,CAACwT,CAAD,EAAI;EACR,QAAIA,CAAC,YAAY6G,UAAjB,EAA6B,KAAK3Z,CAAL,CAAOjE,GAAP,CAAW+W,CAAX;EAC9B;;EACD,MAAIlY,WAAJ,GAAkB;EAChB,WAAO,CAACkX,uBAAD,CAAP;EACD;;EAdmB;;EAgBtBkvG,WAAW,CAACE,eAAZ,GAA8BA,eAA9B;;;;;;;EChKe,MAAM0B,cAAN,CAAqB;EAClC5uH,EAAAA,WAAW,GAAG;EACZ4uH,IAAAA,cAAc,CAACvrH,YAAf,CAA4BC,KAA5B,CAAkC,IAAlC,EAAwCC,SAAxC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK40D,GAAL,GAAW,IAAI76B,qBAAJ,EAAX;EACA,SAAKkuC,UAAL,GAAkB,IAAIhhB,YAAJ,EAAlB;EACA,SAAK2zD,IAAL,GAAY,IAAZ;EACA,SAAK90C,MAAL,GAAc,IAAI7D,OAAJ,CAAY,IAAIg9C,iBAAJ,EAAZ,CAAd;EACA,SAAKuM,GAAL,GAAW,IAAX;EACA,SAAKC,cAAL,GAAsB,IAAInmH,SAAJ,EAAtB;EACA,SAAKyiE,aAAL,GAAqB,IAArB;EACA,UAAM2jD,GAAG,GAAGxrH,SAAS,CAAC,CAAD,CAArB;EACA,SAAK06G,IAAL,GAAY8Q,GAAZ;EACD;;EACDvM,EAAAA,cAAc,CAACj4C,EAAD,EAAK;EACjB,SAAK,IAAI5pE,CAAC,GAAG4pE,EAAE,CAACriE,QAAH,EAAb,EAA4BvH,CAAC,CAACmJ,OAAF,EAA5B,GAA2C;EACzC,YAAM9D,CAAC,GAAGrF,CAAC,CAACkJ,IAAF,EAAV;;EACA,WAAKs/D,MAAL,CAAYphE,GAAZ,CAAgB/B,CAAhB;EACD;EACF;;EACDgpH,EAAAA,2BAA2B,CAAC3L,WAAD,EAAcv+E,EAAd,EAAkB;EAC3C,UAAMmqF,IAAI,GAAG,KAAKhR,IAAL,CAAU,CAAV,EAAarpE,WAAb,GAA2B37B,YAA3B,EAAb;;EACA,UAAMi2G,IAAI,GAAG,KAAKjR,IAAL,CAAU,CAAV,EAAarpE,WAAb,GAA2B37B,YAA3B,EAAb;;EACA,UAAMk2G,SAAS,GAAG9L,WAAW,CAAC/pD,qBAAZ,EAAlB;EACA,UAAM81D,iBAAiB,GAAG/L,WAAW,CAAClqD,6BAAZ,EAA1B;;EACA,QAAI81D,IAAI,KAAK,CAAT,IAAcC,IAAI,KAAK,CAA3B,EAA8B;EAC5B,UAAIC,SAAJ,EAAerqF,EAAE,CAACd,UAAH,CAAc,WAAd;EAChB,KAFD,MAEO,IAAIirF,IAAI,KAAK,CAAT,IAAcC,IAAI,KAAK,CAA3B,EAA8B;EACnC,UAAIC,SAAJ,EAAerqF,EAAE,CAACd,UAAH,CAAc,WAAd;EACf,UAAIorF,iBAAJ,EAAuBtqF,EAAE,CAACd,UAAH,CAAc,WAAd;EACxB,KAHM,MAGA,IAAIirF,IAAI,KAAK,CAAT,IAAcC,IAAI,KAAK,CAA3B,EAA8B;EACnC,UAAIC,SAAJ,EAAerqF,EAAE,CAACd,UAAH,CAAc,WAAd;EACf,UAAIorF,iBAAJ,EAAuBtqF,EAAE,CAACd,UAAH,CAAc,WAAd;EACxB,KAHM,MAGA,IAAIirF,IAAI,KAAK,CAAT,IAAcC,IAAI,KAAK,CAA3B,EAA8B;EACnC,UAAIE,iBAAJ,EAAuBtqF,EAAE,CAACd,UAAH,CAAc,WAAd;EACxB;EACF;;EACDqrF,EAAAA,kBAAkB,CAACC,SAAD,EAAYjV,WAAZ,EAAyB;EACzC,SAAK,IAAIr7C,EAAE,GAAG,KAAKi/C,IAAL,CAAUqR,SAAV,EAAqBplD,eAArB,EAAd,EAAsDlL,EAAE,CAACl1D,OAAH,EAAtD,GAAsE;EACpE,YAAM9D,CAAC,GAAGg5D,EAAE,CAACn1D,IAAH,EAAV;;EACA,UAAI7D,CAAC,CAACo9D,UAAF,EAAJ,EAAoB;EAClB,aAAKmsD,iBAAL,CAAuBvpH,CAAvB,EAA0Bq0G,WAA1B,EAAuC,KAAK4D,IAAL,CAAU5D,WAAV,EAAuBzlE,WAAvB,EAAvC;;EACA,aAAKk6E,cAAL,CAAoB/mH,GAApB,CAAwB/B,CAAxB;EACD;EACF;EACF;;EACDupH,EAAAA,iBAAiB,CAACvpH,CAAD,EAAIq0G,WAAJ,EAAiBmV,MAAjB,EAAyB;EACxC,QAAIA,MAAM,CAACv2G,YAAP,KAAwB,CAA5B,EAA+B;EAC7B,YAAM0oC,GAAG,GAAG,KAAK2pB,UAAL,CAAgBnuB,MAAhB,CAAuBn3C,CAAC,CAACiE,aAAF,EAAvB,EAA0CulH,MAA1C,CAAZ;;EACAxpH,MAAAA,CAAC,CAACy8D,QAAF,GAAajH,eAAb,CAA6B6+C,WAA7B,EAA0C14D,GAA1C;EACD,KAHD,MAGO;EACL37C,MAAAA,CAAC,CAACy8D,QAAF,GAAajH,eAAb,CAA6B6+C,WAA7B,EAA0C/3E,QAAQ,CAACG,QAAnD;EACD;EACF;;EACDmgC,EAAAA,SAAS,GAAG;EACV,UAAM99B,EAAE,GAAG,IAAIjC,kBAAJ,EAAX;EACAiC,IAAAA,EAAE,CAACr8B,GAAH,CAAO65B,QAAQ,CAACG,QAAhB,EAA0BH,QAAQ,CAACG,QAAnC,EAA6C,CAA7C;;EACA,QAAI,CAAC,KAAKw7E,IAAL,CAAU,CAAV,EAAarpE,WAAb,GAA2Bl1B,mBAA3B,GAAiDpT,UAAjD,CAA4D,KAAK2xG,IAAL,CAAU,CAAV,EAAarpE,WAAb,GAA2Bl1B,mBAA3B,EAA5D,CAAL,EAAoH;EAClH,WAAK+vG,iBAAL,CAAuB3qF,EAAvB;EACA,aAAOA,EAAP;EACD;;EACD,SAAKm5E,IAAL,CAAU,CAAV,EAAavyC,gBAAb,CAA8B,KAAKzT,GAAnC,EAAwC,KAAxC;;EACA,SAAKgmD,IAAL,CAAU,CAAV,EAAavyC,gBAAb,CAA8B,KAAKzT,GAAnC,EAAwC,KAAxC;;EACA,UAAMorD,WAAW,GAAG,KAAKpF,IAAL,CAAU,CAAV,EAAa7xC,wBAAb,CAAsC,KAAK6xC,IAAL,CAAU,CAAV,CAAtC,EAAoD,KAAKhmD,GAAzD,EAA8D,KAA9D,CAApB;;EACA,SAAK0qD,wBAAL,CAA8B,CAA9B;EACA,SAAKA,wBAAL,CAA8B,CAA9B;EACA,SAAKF,kBAAL,CAAwB,CAAxB;EACA,SAAKA,kBAAL,CAAwB,CAAxB;EACA,SAAKiN,kBAAL;EACA,SAAKV,2BAAL,CAAiC3L,WAAjC,EAA8Cv+E,EAA9C;EACA,UAAM89E,SAAS,GAAG,IAAIvB,cAAJ,EAAlB;EACA,UAAMsO,GAAG,GAAG/M,SAAS,CAAClB,eAAV,CAA0B,KAAKzD,IAAL,CAAU,CAAV,EAAa/zC,eAAb,EAA1B,CAAZ;EACA,SAAKs4C,cAAL,CAAoBmN,GAApB;EACA,UAAMC,GAAG,GAAGhN,SAAS,CAAClB,eAAV,CAA0B,KAAKzD,IAAL,CAAU,CAAV,EAAa/zC,eAAb,EAA1B,CAAZ;EACA,SAAKs4C,cAAL,CAAoBoN,GAApB;EACA,SAAKC,cAAL;EACA,SAAKR,kBAAL,CAAwB,CAAxB,EAA2B,CAA3B;EACA,SAAKA,kBAAL,CAAwB,CAAxB,EAA2B,CAA3B;EACA,SAAK1sD,QAAL,CAAc79B,EAAd;EACA,WAAOA,EAAP;EACD;;EACD+qF,EAAAA,cAAc,GAAG;EACf,SAAK,IAAI1P,EAAE,GAAG,KAAKh3C,MAAL,CAAYjhE,QAAZ,EAAd,EAAsCi4G,EAAE,CAACr2G,OAAH,EAAtC,GAAsD;EACpD,YAAMk1C,IAAI,GAAGmhE,EAAE,CAACt2G,IAAH,EAAb;EACAm1C,MAAAA,IAAI,CAACylB,QAAL,GAAgBy4B,gBAAhB,CAAiC,KAAK+gB,IAAtC;EACD;EACF;;EACDwE,EAAAA,kBAAkB,CAACz9C,QAAD,EAAW;EAC3B,SAAK,IAAIrkE,CAAC,GAAG,KAAKs9G,IAAL,CAAUj5C,QAAV,EAAoByE,eAApB,EAAb,EAAoD9oE,CAAC,CAACmJ,OAAF,EAApD,GAAmE;EACjE,YAAMm2G,SAAS,GAAGt/G,CAAC,CAACkJ,IAAF,EAAlB;;EACA,YAAMq2G,OAAO,GAAG,KAAK/2C,MAAL,CAAY1D,OAAZ,CAAoBw6C,SAAS,CAACh2G,aAAV,EAApB,CAAhB;;EACAi2G,MAAAA,OAAO,CAAC19C,QAAR,CAAiBwC,QAAjB,EAA2Bi7C,SAAS,CAACx9C,QAAV,GAAqB7iB,WAArB,CAAiColB,QAAjC,CAA3B;EACD;EACF;;EACD8qD,EAAAA,sBAAsB,CAAC9qD,QAAD,EAAW;EAC/B,SAAK,IAAIrkE,CAAC,GAAG,KAAKs9G,IAAL,CAAUj5C,QAAV,EAAoBkF,eAApB,EAAb,EAAoDvpE,CAAC,CAACmJ,OAAF,EAApD,GAAmE;EACjE,YAAM9D,CAAC,GAAGrF,CAAC,CAACkJ,IAAF,EAAV;EACA,YAAMojE,IAAI,GAAGjnE,CAAC,CAACy8D,QAAF,GAAa7iB,WAAb,CAAyBolB,QAAzB,CAAb;;EACA,WAAK,IAAIkI,IAAI,GAAGlnE,CAAC,CAACo+D,uBAAF,GAA4Bl8D,QAA5B,EAAhB,EAAwDglE,IAAI,CAACpjE,OAAL,EAAxD,GAA0E;EACxE,cAAMk1D,EAAE,GAAGkO,IAAI,CAACrjE,IAAL,EAAX;;EACA,cAAM5I,CAAC,GAAG,KAAKkoE,MAAL,CAAY3X,IAAZ,CAAiBwN,EAAE,CAACj5D,KAApB,CAAV;;EACA,YAAI9E,CAAC,CAACwhE,QAAF,GAAar1D,MAAb,CAAoB43D,QAApB,CAAJ,EACE,IAAIiI,IAAI,KAAK3qC,QAAQ,CAACI,QAAtB,EAAgCzhC,CAAC,CAACokE,gBAAF,CAAmBL,QAAnB,EAAhC,KAAmE/jE,CAAC,CAACuhE,QAAF,CAAWwC,QAAX,EAAqB1iC,QAAQ,CAACK,QAA9B;EAEtE;EACF;EACF;;EACDotF,EAAAA,iBAAiB,CAAC9uH,CAAD,EAAIo5G,WAAJ,EAAiB;EAChC,UAAM14D,GAAG,GAAG,KAAK2pB,UAAL,CAAgBnuB,MAAhB,CAAuBl8C,CAAC,CAACgJ,aAAF,EAAvB,EAA0C,KAAKg0G,IAAL,CAAU5D,WAAV,EAAuBzlE,WAAvB,EAA1C,CAAZ;;EACA3zC,IAAAA,CAAC,CAACwhE,QAAF,GAAajH,eAAb,CAA6B6+C,WAA7B,EAA0C14D,GAA1C;EACD;;EACDghE,EAAAA,wBAAwB,CAAC39C,QAAD,EAAW;EACjC,SAAK,IAAIrkE,CAAC,GAAG,KAAKs9G,IAAL,CAAUj5C,QAAV,EAAoBkF,eAApB,EAAb,EAAoDvpE,CAAC,CAACmJ,OAAF,EAApD,GAAmE;EACjE,YAAM9D,CAAC,GAAGrF,CAAC,CAACkJ,IAAF,EAAV;EACA,YAAMojE,IAAI,GAAGjnE,CAAC,CAACy8D,QAAF,GAAa7iB,WAAb,CAAyBolB,QAAzB,CAAb;;EACA,WAAK,IAAIkI,IAAI,GAAGlnE,CAAC,CAACo+D,uBAAF,GAA4Bl8D,QAA5B,EAAhB,EAAwDglE,IAAI,CAACpjE,OAAL,EAAxD,GAA0E;EACxE,cAAMk1D,EAAE,GAAGkO,IAAI,CAACrjE,IAAL,EAAX;;EACA,cAAM5I,CAAC,GAAG,KAAKkoE,MAAL,CAAY1D,OAAZ,CAAoBzG,EAAE,CAACj5D,KAAvB,CAAV;;EACA,YAAIknE,IAAI,KAAK3qC,QAAQ,CAACI,QAAtB,EAAgCzhC,CAAC,CAACokE,gBAAF,CAAmBL,QAAnB,EAAhC,KACA,IAAI/jE,CAAC,CAACwhE,QAAF,GAAar1D,MAAb,CAAoB43D,QAApB,CAAJ,EAAmC/jE,CAAC,CAACuhE,QAAF,CAAWwC,QAAX,EAAqB1iC,QAAQ,CAACK,QAA9B;EAEpC;EACF;EACF;;EACD+sF,EAAAA,kBAAkB,GAAG;EACnB,SAAK,IAAIvP,EAAE,GAAG,KAAKh3C,MAAL,CAAYjhE,QAAZ,EAAd,EAAsCi4G,EAAE,CAACr2G,OAAH,EAAtC,GAAsD;EACpD,YAAM7I,CAAC,GAAGk/G,EAAE,CAACt2G,IAAH,EAAV;EACA,YAAMktD,KAAK,GAAG91D,CAAC,CAACwhE,QAAF,EAAd;EACA/+D,MAAAA,MAAM,CAACE,MAAP,CAAcmzD,KAAK,CAACkG,gBAAN,KAA2B,CAAzC,EAA4C,6BAA5C;EACA,UAAIh8D,CAAC,CAACmiE,UAAF,EAAJ,EACE,IAAIrM,KAAK,CAAC3pD,MAAN,CAAa,CAAb,CAAJ,EAAqB,KAAK2iH,iBAAL,CAAuB9uH,CAAvB,EAA0B,CAA1B,EAArB,KAAwD,KAAK8uH,iBAAL,CAAuB9uH,CAAvB,EAA0B,CAA1B;EAE3D;EACF;;EACD0hE,EAAAA,QAAQ,CAAC79B,EAAD,EAAK;EACX,SAAK,IAAIk6B,EAAE,GAAG,KAAK8vD,cAAL,CAAoB5mH,QAApB,EAAd,EAA8C82D,EAAE,CAACl1D,OAAH,EAA9C,GAA8D;EAC5D,YAAM9D,CAAC,GAAGg5D,EAAE,CAACn1D,IAAH,EAAV;EACA7D,MAAAA,CAAC,CAAC28D,QAAF,CAAW79B,EAAX;EACD;;EACD,SAAK,IAAIq7E,EAAE,GAAG,KAAKh3C,MAAL,CAAYjhE,QAAZ,EAAd,EAAsCi4G,EAAE,CAACr2G,OAAH,EAAtC,GAAsD;EACpD,YAAMk1C,IAAI,GAAGmhE,EAAE,CAACt2G,IAAH,EAAb;EACAm1C,MAAAA,IAAI,CAAC2jB,QAAL,CAAc79B,EAAd;EACAka,MAAAA,IAAI,CAACqjE,iBAAL,CAAuBv9E,EAAvB;EACD;EACF;;EACD2qF,EAAAA,iBAAiB,CAAC3qF,EAAD,EAAK;EACpB,UAAMkrF,EAAE,GAAG,KAAK/R,IAAL,CAAU,CAAV,EAAarpE,WAAb,EAAX;;EACA,QAAI,CAACo7E,EAAE,CAAC/nH,OAAH,EAAL,EAAmB;EACjB68B,MAAAA,EAAE,CAACr8B,GAAH,CAAO65B,QAAQ,CAACK,QAAhB,EAA0BL,QAAQ,CAACG,QAAnC,EAA6CutF,EAAE,CAAC/2G,YAAH,EAA7C;EACA6rB,MAAAA,EAAE,CAACr8B,GAAH,CAAO65B,QAAQ,CAACI,QAAhB,EAA0BJ,QAAQ,CAACG,QAAnC,EAA6CutF,EAAE,CAAC/pG,oBAAH,EAA7C;EACD;;EACD,UAAMgqG,EAAE,GAAG,KAAKhS,IAAL,CAAU,CAAV,EAAarpE,WAAb,EAAX;;EACA,QAAI,CAACq7E,EAAE,CAAChoH,OAAH,EAAL,EAAmB;EACjB68B,MAAAA,EAAE,CAACr8B,GAAH,CAAO65B,QAAQ,CAACG,QAAhB,EAA0BH,QAAQ,CAACK,QAAnC,EAA6CstF,EAAE,CAACh3G,YAAH,EAA7C;EACA6rB,MAAAA,EAAE,CAACr8B,GAAH,CAAO65B,QAAQ,CAACG,QAAhB,EAA0BH,QAAQ,CAACI,QAAnC,EAA6CutF,EAAE,CAAChqG,oBAAH,EAA7C;EACD;EACF;;EA7JiC;;ECLrB,MAAMiqG,iBAAN,CAAwB;EACrClwH,EAAAA,WAAW,GAAG;EACZkwH,IAAAA,iBAAiB,CAAC7sH,YAAlB,CAA+BC,KAA/B,CAAqC,IAArC,EAA2CC,SAA3C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK8sH,QAAL,GAAgB,IAAhB;EACA,UAAMC,SAAS,GAAG7sH,SAAS,CAAC,CAAD,CAA3B;EACA,SAAK4sH,QAAL,GAAgBC,SAAS,CAAC1wG,mBAAV,EAAhB;EACD;;EACD,SAAOzQ,QAAP,CAAgBmhH,SAAhB,EAA2BjpH,CAA3B,EAA8B;EAC5B,UAAMkpH,EAAE,GAAG,IAAIH,iBAAJ,CAAsBE,SAAtB,CAAX;EACA,WAAOC,EAAE,CAACphH,QAAH,CAAY9H,CAAZ,CAAP;EACD;;EACDmpH,EAAAA,qBAAqB,CAACvyG,IAAD,EAAO;EAC1B,QAAIA,IAAI,YAAYkK,OAApB,EAA6B,OAAO,KAAP;EAC7B,QAAIlK,IAAI,YAAYiJ,KAApB,EAA2B,OAAO,KAAKupG,0BAAL,CAAgCxyG,IAAhC,CAAP;EAC3B,QAAIA,IAAI,YAAY4H,UAApB,EAAgC,OAAO,KAAK6qG,+BAAL,CAAqCzyG,IAArC,CAAP;;EAChC,SAAK,IAAIpd,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGod,IAAI,CAACkB,gBAAL,EAApB,EAA6Cte,CAAC,EAA9C,EAAkD;EAChD,YAAMwe,IAAI,GAAGpB,IAAI,CAACO,YAAL,CAAkB3d,CAAlB,CAAb;EACA,UAAI,CAAC,KAAK2vH,qBAAL,CAA2BnxG,IAA3B,CAAL,EAAuC,OAAO,KAAP;EACxC;;EACD,WAAO,IAAP;EACD;;EACDsxG,EAAAA,gCAAgC,CAAChpG,EAAD,EAAKvb,EAAL,EAAS;EACvC,QAAIub,EAAE,CAAC3jB,MAAH,CAAUoI,EAAV,CAAJ,EAAmB,OAAO,KAAKqkH,0BAAL,CAAgC9oG,EAAhC,CAAP;;EACnB,QAAIA,EAAE,CAACnlB,CAAH,KAAS4J,EAAE,CAAC5J,CAAhB,EAAmB;EACjB,UAAImlB,EAAE,CAACnlB,CAAH,KAAS,KAAK6tH,QAAL,CAAc5iH,OAAd,EAAT,IAAoCka,EAAE,CAACnlB,CAAH,KAAS,KAAK6tH,QAAL,CAAc9iH,OAAd,EAAjD,EAA0E,OAAO,IAAP;EAC3E,KAFD,MAEO,IAAIoa,EAAE,CAACllB,CAAH,KAAS2J,EAAE,CAAC3J,CAAhB,EAAmB;EACxB,UAAIklB,EAAE,CAACllB,CAAH,KAAS,KAAK4tH,QAAL,CAAc3iH,OAAd,EAAT,IAAoCia,EAAE,CAACllB,CAAH,KAAS,KAAK4tH,QAAL,CAAc7iH,OAAd,EAAjD,EAA0E,OAAO,IAAP;EAC3E;;EACD,WAAO,KAAP;EACD;;EACDkjH,EAAAA,+BAA+B,CAAChzG,IAAD,EAAO;EACpC,UAAMjS,GAAG,GAAGiS,IAAI,CAACiJ,qBAAL,EAAZ;EACA,UAAMgB,EAAE,GAAG,IAAIpjB,UAAJ,EAAX;EACA,UAAM6H,EAAE,GAAG,IAAI7H,UAAJ,EAAX;;EACA,SAAK,IAAI1D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG4K,GAAG,CAACpD,IAAJ,KAAa,CAAjC,EAAoCxH,CAAC,EAArC,EAAyC;EACvC4K,MAAAA,GAAG,CAACtB,aAAJ,CAAkBtJ,CAAlB,EAAqB8mB,EAArB;EACAlc,MAAAA,GAAG,CAACtB,aAAJ,CAAkBtJ,CAAC,GAAG,CAAtB,EAAyBuL,EAAzB;EACA,UAAI,CAAC,KAAKukH,gCAAL,CAAsChpG,EAAtC,EAA0Cvb,EAA1C,CAAL,EAAoD,OAAO,KAAP;EACrD;;EACD,WAAO,IAAP;EACD;;EACDqkH,EAAAA,0BAA0B,GAAG;EAC3B,QAAIhtH,SAAS,CAAC,CAAD,CAAT,YAAwByjB,KAA5B,EAAmC;EACjC,YAAMG,KAAK,GAAG5jB,SAAS,CAAC,CAAD,CAAvB;EACA,aAAO,KAAKgtH,0BAAL,CAAgCppG,KAAK,CAACld,aAAN,EAAhC,CAAP;EACD,KAHD,MAGO,IAAI1G,SAAS,CAAC,CAAD,CAAT,YAAwBc,UAA5B,EAAwC;EAC7C,YAAMuiB,EAAE,GAAGrjB,SAAS,CAAC,CAAD,CAApB;EACA,aAAOqjB,EAAE,CAACtkB,CAAH,KAAS,KAAK6tH,QAAL,CAAc5iH,OAAd,EAAT,IAAoCqZ,EAAE,CAACtkB,CAAH,KAAS,KAAK6tH,QAAL,CAAc9iH,OAAd,EAA7C,IAAwEuZ,EAAE,CAACrkB,CAAH,KAAS,KAAK4tH,QAAL,CAAc3iH,OAAd,EAAjF,IAA4GoZ,EAAE,CAACrkB,CAAH,KAAS,KAAK4tH,QAAL,CAAc7iH,OAAd,EAA5H;EACD;EACF;;EACD2B,EAAAA,QAAQ,CAAC8O,IAAD,EAAO;EACb,QAAI,CAAC,KAAKoyG,QAAL,CAAclhH,QAAd,CAAuB8O,IAAI,CAAC2B,mBAAL,EAAvB,CAAL,EAAyD,OAAO,KAAP;EACzD,QAAI,KAAK4wG,qBAAL,CAA2BvyG,IAA3B,CAAJ,EAAsC,OAAO,KAAP;EACtC,WAAO,IAAP;EACD;;EAxDoC;;ECDxB,MAAM2yG,wBAAN,CAA+B;EAC5C1wH,EAAAA,WAAW,GAAG;EACZ0wH,IAAAA,wBAAwB,CAACrtH,YAAzB,CAAsCC,KAAtC,CAA4C,IAA5C,EAAkDC,SAAlD;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK40D,GAAL,GAAW,IAAI76B,qBAAJ,EAAX;EACA,SAAK+yF,QAAL,GAAgB,IAAhB;EACA,SAAKQ,QAAL,GAAgB,IAAhB;EACA,SAAKC,QAAL,GAAgB,IAAhB;EACA,SAAKC,UAAL,GAAkB,IAAlB;EACA,SAAKC,UAAL,GAAkB,IAAlB;EACA,UAAMC,OAAO,GAAGxtH,SAAS,CAAC,CAAD,CAAzB;EACA,SAAK4sH,QAAL,GAAgBY,OAAhB;EACA,SAAKJ,QAAL,GAAgB,IAAItsH,UAAJ,CAAe0sH,OAAO,CAACxjH,OAAR,EAAf,EAAkCwjH,OAAO,CAACvjH,OAAR,EAAlC,CAAhB;EACA,SAAKojH,QAAL,GAAgB,IAAIvsH,UAAJ,CAAe0sH,OAAO,CAAC1jH,OAAR,EAAf,EAAkC0jH,OAAO,CAACzjH,OAAR,EAAlC,CAAhB;EACA,SAAKujH,UAAL,GAAkB,IAAIxsH,UAAJ,CAAe0sH,OAAO,CAACxjH,OAAR,EAAf,EAAkCwjH,OAAO,CAACzjH,OAAR,EAAlC,CAAlB;EACA,SAAKwjH,UAAL,GAAkB,IAAIzsH,UAAJ,CAAe0sH,OAAO,CAAC1jH,OAAR,EAAf,EAAkC0jH,OAAO,CAACvjH,OAAR,EAAlC,CAAlB;EACD;;EACDlB,EAAAA,UAAU,CAACmb,EAAD,EAAKvb,EAAL,EAAS;EACjB,UAAM8kH,MAAM,GAAG,IAAItlH,QAAJ,CAAa+b,EAAb,EAAiBvb,EAAjB,CAAf;EACA,QAAI,CAAC,KAAKikH,QAAL,CAAc7jH,UAAd,CAAyB0kH,MAAzB,CAAL,EAAuC,OAAO,KAAP;EACvC,QAAI,KAAKb,QAAL,CAAc7jH,UAAd,CAAyBmb,EAAzB,CAAJ,EAAkC,OAAO,IAAP;EAClC,QAAI,KAAK0oG,QAAL,CAAc7jH,UAAd,CAAyBJ,EAAzB,CAAJ,EAAkC,OAAO,IAAP;;EAClC,QAAIub,EAAE,CAAC9hB,SAAH,CAAauG,EAAb,IAAmB,CAAvB,EAA0B;EACxB,YAAMiY,GAAG,GAAGsD,EAAZ;EACAA,MAAAA,EAAE,GAAGvb,EAAL;EACAA,MAAAA,EAAE,GAAGiY,GAAL;EACD;;EACD,QAAI8sG,YAAY,GAAG,KAAnB;EACA,QAAI/kH,EAAE,CAAC3J,CAAH,GAAOklB,EAAE,CAACllB,CAAd,EAAiB0uH,YAAY,GAAG,IAAf;EACjB,QAAIA,YAAJ,EACE,KAAKh5D,GAAL,CAASp8B,mBAAT,CAA6BpU,EAA7B,EAAiCvb,EAAjC,EAAqC,KAAK2kH,UAA1C,EAAsD,KAAKC,UAA3D,EADF,KAGE,KAAK74D,GAAL,CAASp8B,mBAAT,CAA6BpU,EAA7B,EAAiCvb,EAAjC,EAAqC,KAAKykH,QAA1C,EAAoD,KAAKC,QAAzD;EAEF,QAAI,KAAK34D,GAAL,CAAS37B,eAAT,EAAJ,EAAgC,OAAO,IAAP;EAChC,WAAO,KAAP;EACD;;EArC2C;;ECG/B,MAAM40F,mBAAN,CAA0B;EACvClxH,EAAAA,WAAW,GAAG;EACZkxH,IAAAA,mBAAmB,CAAC7tH,YAApB,CAAiCC,KAAjC,CAAuC,IAAvC,EAA6CC,SAA7C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK8tH,UAAL,GAAkB,IAAlB;EACA,SAAKhB,QAAL,GAAgB,IAAhB;EACA,UAAMC,SAAS,GAAG7sH,SAAS,CAAC,CAAD,CAA3B;EACA,SAAK4tH,UAAL,GAAkBf,SAAlB;EACA,SAAKD,QAAL,GAAgBC,SAAS,CAAC1wG,mBAAV,EAAhB;EACD;;EACD,SAAOpT,UAAP,CAAkB8jH,SAAlB,EAA6BjpH,CAA7B,EAAgC;EAC9B,UAAMiqH,EAAE,GAAG,IAAIF,mBAAJ,CAAwBd,SAAxB,CAAX;EACA,WAAOgB,EAAE,CAAC9kH,UAAH,CAAcnF,CAAd,CAAP;EACD;;EACDmF,EAAAA,UAAU,CAACyR,IAAD,EAAO;EACf,QAAI,CAAC,KAAKoyG,QAAL,CAAc7jH,UAAd,CAAyByR,IAAI,CAAC2B,mBAAL,EAAzB,CAAL,EAA2D,OAAO,KAAP;EAC3D,UAAMw+B,OAAO,GAAG,IAAImzE,yBAAJ,CAA8B,KAAKlB,QAAnC,CAAhB;EACAjyE,IAAAA,OAAO,CAAChI,OAAR,CAAgBn4B,IAAhB;EACA,QAAImgC,OAAO,CAAC5xC,UAAR,EAAJ,EAA0B,OAAO,IAAP;EAC1B,UAAMglH,UAAU,GAAG,IAAIC,4BAAJ,CAAiC,KAAKJ,UAAtC,CAAnB;EACAG,IAAAA,UAAU,CAACp7E,OAAX,CAAmBn4B,IAAnB;EACA,QAAIuzG,UAAU,CAACxiC,aAAX,EAAJ,EAAgC,OAAO,IAAP;EAChC,UAAM0iC,SAAS,GAAG,IAAIC,iCAAJ,CAAsC,KAAKN,UAA3C,CAAlB;EACAK,IAAAA,SAAS,CAACt7E,OAAV,CAAkBn4B,IAAlB;EACA,QAAIyzG,SAAS,CAACllH,UAAV,EAAJ,EAA4B,OAAO,IAAP;EAC5B,WAAO,KAAP;EACD;;EA3BsC;;EA6BzC,MAAM+kH,yBAAN,SAAwCr7E,6BAAxC,CAAsE;EACpEh2C,EAAAA,WAAW,GAAG;EACZ;EACAqxH,IAAAA,yBAAyB,CAAChuH,YAA1B,CAAuCC,KAAvC,CAA6C,IAA7C,EAAmDC,SAAnD;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK8sH,QAAL,GAAgB,IAAhB;EACA,SAAKuB,WAAL,GAAmB,KAAnB;EACA,UAAMX,OAAO,GAAGxtH,SAAS,CAAC,CAAD,CAAzB;EACA,SAAK4sH,QAAL,GAAgBY,OAAhB;EACD;;EACDvlH,EAAAA,MAAM,GAAG;EACP,WAAO,KAAKkmH,WAAL,KAAqB,IAA5B;EACD;;EACDv7E,EAAAA,KAAK,CAACjtC,OAAD,EAAU;EACb,UAAMyoH,UAAU,GAAGzoH,OAAO,CAACwW,mBAAR,EAAnB;EACA,QAAI,CAAC,KAAKywG,QAAL,CAAc7jH,UAAd,CAAyBqlH,UAAzB,CAAL,EACE,OAAO,IAAP;;EAEF,QAAI,KAAKxB,QAAL,CAAclhH,QAAd,CAAuB0iH,UAAvB,CAAJ,EAAwC;EACtC,WAAKD,WAAL,GAAmB,IAAnB;EACA,aAAO,IAAP;EACD;;EACD,QAAIC,UAAU,CAACpkH,OAAX,MAAwB,KAAK4iH,QAAL,CAAc5iH,OAAd,EAAxB,IAAmDokH,UAAU,CAACtkH,OAAX,MAAwB,KAAK8iH,QAAL,CAAc9iH,OAAd,EAA/E,EAAwG;EACtG,WAAKqkH,WAAL,GAAmB,IAAnB;EACA,aAAO,IAAP;EACD;;EACD,QAAIC,UAAU,CAACnkH,OAAX,MAAwB,KAAK2iH,QAAL,CAAc3iH,OAAd,EAAxB,IAAmDmkH,UAAU,CAACrkH,OAAX,MAAwB,KAAK6iH,QAAL,CAAc7iH,OAAd,EAA/E,EAAwG;EACtG,WAAKokH,WAAL,GAAmB,IAAnB;EACA,aAAO,IAAP;EACD;EACF;;EACDplH,EAAAA,UAAU,GAAG;EACX,WAAO,KAAKolH,WAAZ;EACD;;EAlCmE;;EAoCtE,MAAMH,4BAAN,SAA2Cv7E,6BAA3C,CAAyE;EACvEh2C,EAAAA,WAAW,GAAG;EACZ;EACAuxH,IAAAA,4BAA4B,CAACluH,YAA7B,CAA0CC,KAA1C,CAAgD,IAAhD,EAAsDC,SAAtD;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKuuH,QAAL,GAAgB,IAAhB;EACA,SAAKzB,QAAL,GAAgB,IAAhB;EACA,SAAK0B,cAAL,GAAsB,KAAtB;EACA,UAAMzB,SAAS,GAAG7sH,SAAS,CAAC,CAAD,CAA3B;EACA,SAAKquH,QAAL,GAAgBxB,SAAS,CAAC9mG,eAAV,GAA4B7C,qBAA5B,EAAhB;EACA,SAAK0pG,QAAL,GAAgBC,SAAS,CAAC1wG,mBAAV,EAAhB;EACD;;EACDlU,EAAAA,MAAM,GAAG;EACP,WAAO,KAAKqmH,cAAL,KAAwB,IAA/B;EACD;;EACD17E,EAAAA,KAAK,CAACp4B,IAAD,EAAO;EACV,QAAI,EAAEA,IAAI,YAAYkK,OAAlB,CAAJ,EAAgC,OAAO,IAAP;EAChC,UAAM0pG,UAAU,GAAG5zG,IAAI,CAAC2B,mBAAL,EAAnB;EACA,QAAI,CAAC,KAAKywG,QAAL,CAAc7jH,UAAd,CAAyBqlH,UAAzB,CAAL,EAA2C,OAAO,IAAP;EAC3C,UAAMG,MAAM,GAAG,IAAIztH,UAAJ,EAAf;;EACA,SAAK,IAAI1D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,CAApB,EAAuBA,CAAC,EAAxB,EAA4B;EAC1B,WAAKixH,QAAL,CAAc3nH,aAAd,CAA4BtJ,CAA5B,EAA+BmxH,MAA/B;;EACA,UAAI,CAACH,UAAU,CAAC1iH,QAAX,CAAoB6iH,MAApB,CAAL,EAAkC;;EAClC,UAAI1wE,wBAAwB,CAACI,sBAAzB,CAAgDswE,MAAhD,EAAwD/zG,IAAxD,CAAJ,EAAmE;EACjE,aAAK8zG,cAAL,GAAsB,IAAtB;EACA,eAAO,IAAP;EACD;EACF;EACF;;EACD/iC,EAAAA,aAAa,GAAG;EACd,WAAO,KAAK+iC,cAAZ;EACD;;EAhCsE;;EAkCzE,MAAMJ,iCAAN,SAAgDz7E,6BAAhD,CAA8E;EAC5Eh2C,EAAAA,WAAW,GAAG;EACZ;EACAyxH,IAAAA,iCAAiC,CAACpuH,YAAlC,CAA+CC,KAA/C,CAAqD,IAArD,EAA2DC,SAA3D;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK8sH,QAAL,GAAgB,IAAhB;EACA,SAAK4B,gBAAL,GAAwB,IAAxB;EACA,SAAKl6D,gBAAL,GAAwB,KAAxB;EACA,SAAKkO,GAAL,GAAW,IAAI1hE,UAAJ,EAAX;EACA,SAAK2hE,GAAL,GAAW,IAAI3hE,UAAJ,EAAX;EACA,UAAM+rH,SAAS,GAAG7sH,SAAS,CAAC,CAAD,CAA3B;EACA,SAAK4sH,QAAL,GAAgBC,SAAS,CAAC1wG,mBAAV,EAAhB;EACA,SAAKqyG,gBAAL,GAAwB,IAAIrB,wBAAJ,CAA6B,KAAKP,QAAlC,CAAxB;EACD;;EACD7jH,EAAAA,UAAU,GAAG;EACX,WAAO,KAAKurD,gBAAZ;EACD;;EACDrsD,EAAAA,MAAM,GAAG;EACP,WAAO,KAAKqsD,gBAAL,KAA0B,IAAjC;EACD;;EACD1hB,EAAAA,KAAK,CAACp4B,IAAD,EAAO;EACV,UAAM4zG,UAAU,GAAG5zG,IAAI,CAAC2B,mBAAL,EAAnB;EACA,QAAI,CAAC,KAAKywG,QAAL,CAAc7jH,UAAd,CAAyBqlH,UAAzB,CAAL,EAA2C,OAAO,IAAP;EAC3C,UAAM78E,KAAK,GAAGC,wBAAwB,CAACF,QAAzB,CAAkC92B,IAAlC,CAAd;EACA,SAAKi0G,gCAAL,CAAsCl9E,KAAtC;EACD;;EACDk9E,EAAAA,gCAAgC,CAACl9E,KAAD,EAAQ;EACtC,SAAK,IAAIn0C,CAAC,GAAGm0C,KAAK,CAAC5sC,QAAN,EAAb,EAA+BvH,CAAC,CAACmJ,OAAF,EAA/B,GAA8C;EAC5C,YAAMmoH,QAAQ,GAAGtxH,CAAC,CAACkJ,IAAF,EAAjB;EACA,WAAKqoH,6BAAL,CAAmCD,QAAnC;EACA,UAAI,KAAKp6D,gBAAT,EAA2B,OAAO,IAAP;EAC5B;EACF;;EACDq6D,EAAAA,6BAA6B,CAACD,QAAD,EAAW;EACtC,UAAME,IAAI,GAAGF,QAAQ,CAACxrG,qBAAT,EAAb;;EACA,SAAK,IAAIhG,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG0xG,IAAI,CAAChqH,IAAL,EAApB,EAAiCsY,CAAC,EAAlC,EAAsC;EACpC0xG,MAAAA,IAAI,CAACloH,aAAL,CAAmBwW,CAAC,GAAG,CAAvB,EAA0B,KAAKslD,GAA/B;EACAosD,MAAAA,IAAI,CAACloH,aAAL,CAAmBwW,CAAnB,EAAsB,KAAKulD,GAA3B;;EACA,UAAI,KAAK+rD,gBAAL,CAAsBzlH,UAAtB,CAAiC,KAAKy5D,GAAtC,EAA2C,KAAKC,GAAhD,CAAJ,EAA0D;EACxD,aAAKnO,gBAAL,GAAwB,IAAxB;EACA,eAAO,IAAP;EACD;EACF;EACF;;EA5C2E;;ECrG/D,MAAMu6D,QAAN,SAAuBrU,sBAAvB,CAA8C;EAC3D/9G,EAAAA,WAAW,GAAG;EACZ;EACAoyH,IAAAA,QAAQ,CAAC/uH,YAAT,CAAsBC,KAAtB,CAA4B,IAA5B,EAAkCC,SAAlC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKgvH,OAAL,GAAe,IAAf;;EACA,QAAI9uH,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMwtC,EAAE,GAAGztC,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyB0tC,EAAE,GAAG1tC,SAAS,CAAC,CAAD,CAAvC;EACAw6G,MAAAA,sBAAsB,CAAC16G,YAAvB,CAAoCI,IAApC,CAAyC,IAAzC,EAA+CutC,EAA/C,EAAmDC,EAAnD;EACA,WAAKohF,OAAL,GAAe,IAAIzD,cAAJ,CAAmB,KAAK3Q,IAAxB,CAAf;EACD,KAJD,MAIO,IAAI16G,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMwtC,EAAE,GAAGztC,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyB0tC,EAAE,GAAG1tC,SAAS,CAAC,CAAD,CAAvC;EAAA,YAA4CujE,gBAAgB,GAAGvjE,SAAS,CAAC,CAAD,CAAxE;EACAw6G,MAAAA,sBAAsB,CAAC16G,YAAvB,CAAoCI,IAApC,CAAyC,IAAzC,EAA+CutC,EAA/C,EAAmDC,EAAnD,EAAuD61B,gBAAvD;EACA,WAAKurD,OAAL,GAAe,IAAIzD,cAAJ,CAAmB,KAAK3Q,IAAxB,CAAf;EACD;EACF;;EACD,SAAOnwG,MAAP,CAAcmjC,EAAd,EAAkBpD,EAAlB,EAAsB;EACpB,QAAIA,EAAE,CAAC50B,YAAH,OAAsB,CAAtB,IAA2Bg4B,EAAE,CAACh4B,YAAH,KAAoB,CAAnD,EACE,OAAO,KAAP;EAEF,QAAI40B,EAAE,CAAC50B,YAAH,OAAsB,CAAtB,IAA2Bg4B,EAAE,CAACh4B,YAAH,KAAoB,CAA/C,IAAoD40B,EAAE,CAAC7uB,SAAH,KAAiB,GAAzE,EACE,OAAO,KAAP;EAEF,QAAI,CAACiyB,EAAE,CAACvxB,mBAAH,GAAyB5R,MAAzB,CAAgC+/B,EAAE,CAACnuB,mBAAH,EAAhC,CAAL,EAAgE,OAAO,KAAP;EAChE,QAAIuxB,EAAE,CAAC1yB,WAAH,EAAJ,EACE,OAAO,IAAP;EAEF,WAAO,IAAI6zG,QAAJ,CAAanhF,EAAb,EAAiBpD,EAAjB,EAAqBykF,qBAArB,GAA6C9uF,QAA7C,EAAP;EACD;;EACD,SAAOl3B,UAAP,CAAkB2kC,EAAlB,EAAsBpD,EAAtB,EAA0B;EACxB,QAAI,CAACoD,EAAE,CAACvxB,mBAAH,GAAyBpT,UAAzB,CAAoCuhC,EAAE,CAACnuB,mBAAH,EAApC,CAAL,EAAoE,OAAO,KAAP;EACpE,QAAIuxB,EAAE,CAAC1yB,WAAH,EAAJ,EACE,OAAO2yG,mBAAmB,CAAC5kH,UAApB,CAA+B2kC,EAA/B,EAAmCpD,EAAnC,CAAP;EAEF,QAAIA,EAAE,CAACtvB,WAAH,EAAJ,EACE,OAAO2yG,mBAAmB,CAAC5kH,UAApB,CAA+BuhC,EAA/B,EAAmCoD,EAAnC,CAAP;;EAEF,QAAIA,EAAE,CAAChzB,oBAAH,MAA6B4vB,EAAE,CAAC5vB,oBAAH,EAAjC,EAA4D;;EAE1D,WAAK,IAAItd,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGswC,EAAE,CAAChyB,gBAAH,EAApB,EAA2Cte,CAAC,EAA5C,EACE,KAAK,IAAI8f,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGotB,EAAE,CAAC5uB,gBAAH,EAApB,EAA2CwB,CAAC,EAA5C,EACE,IAAIwwB,EAAE,CAAC3yB,YAAH,CAAgB3d,CAAhB,EAAmB2L,UAAnB,CAA8BuhC,EAAE,CAACvvB,YAAH,CAAgBmC,CAAhB,CAA9B,CAAJ,EACE,OAAO,IAAP;;EAIN,aAAO,KAAP;EACD;;EACD,WAAO,IAAI2xG,QAAJ,CAAanhF,EAAb,EAAiBpD,EAAjB,EAAqBykF,qBAArB,GAA6ChvF,YAA7C,EAAP;EACD;;EACD,SAAOivF,OAAP,CAAethF,EAAf,EAAmBpD,EAAnB,EAAuB;EACrB,QAAI,CAACoD,EAAE,CAACvxB,mBAAH,GAAyBpT,UAAzB,CAAoCuhC,EAAE,CAACnuB,mBAAH,EAApC,CAAL,EAAoE,OAAO,KAAP;EACpE,WAAO,IAAI0yG,QAAJ,CAAanhF,EAAb,EAAiBpD,EAAjB,EAAqBykF,qBAArB,GAA6CjuF,SAA7C,CAAuD4M,EAAE,CAACh4B,YAAH,EAAvD,EAA0E40B,EAAE,CAAC50B,YAAH,EAA1E,CAAP;EACD;;EACD,SAAO0nB,UAAP,CAAkBsQ,EAAlB,EAAsBpD,EAAtB,EAA0B;EACxB,QAAI,CAACoD,EAAE,CAACvxB,mBAAH,GAAyB5b,MAAzB,CAAgC+pC,EAAE,CAACnuB,mBAAH,EAAhC,CAAL,EAAgE,OAAO,KAAP;EAChE,WAAO0yG,QAAQ,CAACI,MAAT,CAAgBvhF,EAAhB,EAAoBpD,EAApB,EAAwBpJ,QAAxB,CAAiCwM,EAAE,CAACh4B,YAAH,EAAjC,EAAoD40B,EAAE,CAAC50B,YAAH,EAApD,CAAP;EACD;;EACD,SAAOu5G,MAAP,GAAgB;EACd,QAAIjvH,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAM0D,CAAC,GAAG3D,SAAS,CAAC,CAAD,CAAnB;EAAA,YAAwB4D,CAAC,GAAG5D,SAAS,CAAC,CAAD,CAArC;EACA,YAAMkvH,KAAK,GAAG,IAAIL,QAAJ,CAAalrH,CAAb,EAAgBC,CAAhB,CAAd;EACA,YAAM29B,EAAE,GAAG2tF,KAAK,CAACH,qBAAN,EAAX;EACA,aAAOxtF,EAAP;EACD,KALD,MAKO,IAAIvhC,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAM0D,CAAC,GAAG3D,SAAS,CAAC,CAAD,CAAnB;EAAA,YAAwB4D,CAAC,GAAG5D,SAAS,CAAC,CAAD,CAArC;EAAA,YAA0CujE,gBAAgB,GAAGvjE,SAAS,CAAC,CAAD,CAAtE;EACA,YAAMkvH,KAAK,GAAG,IAAIL,QAAJ,CAAalrH,CAAb,EAAgBC,CAAhB,EAAmB2/D,gBAAnB,CAAd;EACA,YAAMhiC,EAAE,GAAG2tF,KAAK,CAACH,qBAAN,EAAX;EACA,aAAOxtF,EAAP;EACD;EACF;;EACD,SAAOk8B,QAAP,CAAgB/vB,EAAhB,EAAoBpD,EAApB,EAAwB;EACtB,QAAI,CAACoD,EAAE,CAACvxB,mBAAH,GAAyBpT,UAAzB,CAAoCuhC,EAAE,CAACnuB,mBAAH,EAApC,CAAL,EAAoE,OAAO,KAAP;EACpE,WAAO,IAAI0yG,QAAJ,CAAanhF,EAAb,EAAiBpD,EAAjB,EAAqBykF,qBAArB,GAA6C9tF,UAA7C,CAAwDyM,EAAE,CAACh4B,YAAH,EAAxD,EAA2E40B,EAAE,CAAC50B,YAAH,EAA3E,CAAP;EACD;;EACD,SAAOy5G,OAAP,CAAezhF,EAAf,EAAmBpD,EAAnB,EAAuB;EACrB,QAAI,CAACoD,EAAE,CAACvxB,mBAAH,GAAyBpT,UAAzB,CAAoCuhC,EAAE,CAACnuB,mBAAH,EAApC,CAAL,EAAoE,OAAO,KAAP;EACpE,WAAO,IAAI0yG,QAAJ,CAAanhF,EAAb,EAAiBpD,EAAjB,EAAqBykF,qBAArB,GAA6CvtF,SAA7C,CAAuDkM,EAAE,CAACh4B,YAAH,EAAvD,EAA0E40B,EAAE,CAAC50B,YAAH,EAA1E,CAAP;EACD;;EACD,SAAOhK,QAAP,CAAgBgiC,EAAhB,EAAoBpD,EAApB,EAAwB;EACtB,QAAIA,EAAE,CAAC50B,YAAH,OAAsB,CAAtB,IAA2Bg4B,EAAE,CAACh4B,YAAH,KAAoB,CAAnD,EACE,OAAO,KAAP;EAEF,QAAI40B,EAAE,CAAC50B,YAAH,OAAsB,CAAtB,IAA2Bg4B,EAAE,CAACh4B,YAAH,KAAoB,CAA/C,IAAoD40B,EAAE,CAAC7uB,SAAH,KAAiB,GAAzE,EACE,OAAO,KAAP;EAEF,QAAI,CAACiyB,EAAE,CAACvxB,mBAAH,GAAyBzQ,QAAzB,CAAkC4+B,EAAE,CAACnuB,mBAAH,EAAlC,CAAL,EAAkE,OAAO,KAAP;EAClE,QAAIuxB,EAAE,CAAC1yB,WAAH,EAAJ,EACE,OAAO2xG,iBAAiB,CAACjhH,QAAlB,CAA2BgiC,EAA3B,EAA+BpD,EAA/B,CAAP;EAEF,WAAO,IAAIukF,QAAJ,CAAanhF,EAAb,EAAiBpD,EAAjB,EAAqBykF,qBAArB,GAA6CvuF,UAA7C,EAAP;EACD;;EACDuuF,EAAAA,qBAAqB,GAAG;EACtB,WAAO,KAAKD,OAAL,CAAazvD,SAAb,EAAP;EACD;;EA/F0D;;;;;;;ECC9C,MAAM+vD,kBAAN,CAAyB;EACtC3yH,EAAAA,WAAW,GAAG;EACZ2yH,IAAAA,kBAAkB,CAACtvH,YAAnB,CAAgCC,KAAhC,CAAsC,IAAtC,EAA4CC,SAA5C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKuvH,UAAL,GAAkB,IAAlB;EACA,SAAKC,UAAL,GAAkB,IAAlB;EACA,SAAKx8E,SAAL,GAAiB,IAAjB;EACA,UAAMy8E,SAAS,GAAGvvH,SAAS,CAAC,CAAD,CAA3B;EAAA,UAAgC6nB,SAAS,GAAG7nB,SAAS,CAAC,CAAD,CAArD;EACA,SAAKqvH,UAAL,GAAkBE,SAAlB;EACA,SAAKD,UAAL,GAAkBznG,SAAlB;EACA,SAAKirB,SAAL,GAAiBjrB,SAAS,CAAChN,UAAV,EAAjB;EACD;;EACD,SAAO8jC,KAAP,CAAa4wE,SAAb,EAAwB1nG,SAAxB,EAAmC;EACjC,UAAM2nG,OAAO,GAAG,IAAIJ,kBAAJ,CAAuBG,SAAvB,EAAkC1nG,SAAlC,CAAhB;EACA,WAAO2nG,OAAO,CAAC7wE,KAAR,EAAP;EACD;;EACDA,EAAAA,KAAK,GAAG;EACN,UAAM4/C,OAAO,GAAG,IAAIx3C,YAAJ,EAAhB;EACA,UAAM0oE,cAAc,GAAG,IAAIzoG,OAAJ,EAAvB;;EACA,SAAK,IAAI5pB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKiyH,UAAL,CAAgB3zG,gBAAhB,EAApB,EAAwDte,CAAC,EAAzD,EAA6D;EAC3D,YAAMwmB,KAAK,GAAG,KAAKyrG,UAAL,CAAgBt0G,YAAhB,CAA6B3d,CAA7B,CAAd;;EACA,YAAMoF,KAAK,GAAGohB,KAAK,CAACld,aAAN,EAAd;EACA,YAAM03C,GAAG,GAAGmgD,OAAO,CAAC3kD,MAAR,CAAep3C,KAAf,EAAsB,KAAK8sH,UAA3B,CAAZ;EACA,UAAIlxE,GAAG,KAAKrf,QAAQ,CAACG,QAArB,EAA+BuwF,cAAc,CAACjrH,GAAf,CAAmBhC,KAAnB;EAChC;;EACD,QAAIitH,cAAc,CAAC7qH,IAAf,OAA0B,CAA9B,EAAiC,OAAO,KAAK0qH,UAAZ;EACjC,QAAII,MAAM,GAAG,IAAb;EACA,UAAMhjF,MAAM,GAAGrkB,gBAAgB,CAACvhB,iBAAjB,CAAmC2oH,cAAnC,CAAf;EACA,QAAI/iF,MAAM,CAACzsC,MAAP,KAAkB,CAAtB,EACEyvH,MAAM,GAAG,KAAK58E,SAAL,CAAevvB,WAAf,CAA2BmpB,MAAM,CAAC,CAAD,CAAjC,CAAT,CADF,KAGEgjF,MAAM,GAAG,KAAK58E,SAAL,CAAe/hB,0BAAf,CAA0C2b,MAA1C,CAAT;EAEF,WAAOO,gBAAgB,CAACM,OAAjB,CAAyBmiF,MAAzB,EAAiC,KAAKJ,UAAtC,CAAP;EACD;;EAnCqC;;ECMzB,MAAMK,cAAN,CAAqB;EAClClzH,EAAAA,WAAW,GAAG;EACZkzH,IAAAA,cAAc,CAAC7vH,YAAf,CAA4BC,KAA5B,CAAkC,IAAlC,EAAwCC,SAAxC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKotC,YAAL,GAAoB,IAApB;EACA,SAAK0iF,SAAL,GAAiB,IAAIxqH,SAAJ,EAAjB;EACA,SAAKqsC,MAAL,GAAc,IAAIrsC,SAAJ,EAAd;EACA,SAAKid,OAAL,GAAe,IAAIjd,SAAJ,EAAf;EACA,SAAKylB,UAAL,GAAkB1J,SAAS,CAACG,KAA5B;EACD;;EACD,SAAOqI,OAAP,GAAiB;EACf,QAAIhjB,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAeuE,UAAf,CAAhB,EAA4C;EAC1C,YAAM8oC,KAAK,GAAGrtC,SAAS,CAAC,CAAD,CAAvB;EACA,YAAM6vH,SAAS,GAAG,IAAIF,cAAJ,EAAlB;EACAE,MAAAA,SAAS,CAACrrH,GAAV,CAAc6oC,KAAd;EACA,aAAOwiF,SAAP;EACD,KALD,MAKO,IAAI7vH,SAAS,CAAC,CAAD,CAAT,YAAwBya,QAA5B,EAAsC;EAC3C,YAAMD,IAAI,GAAGxa,SAAS,CAAC,CAAD,CAAtB;EACA,YAAM6vH,SAAS,GAAG,IAAIF,cAAJ,EAAlB;EACAE,MAAAA,SAAS,CAACrrH,GAAV,CAAcgW,IAAd;EACA,aAAOq1G,SAAP;EACD;EACF;;EACDh1G,EAAAA,UAAU,GAAG;EACX,WAAO,KAAKqyB,YAAZ;EACD;;EACD4iF,EAAAA,eAAe,CAACzwG,GAAD,EAAM;EACnB,QAAIA,GAAG,GAAG,KAAKwL,UAAf,EAA2B,KAAKA,UAAL,GAAkBxL,GAAlB;EAC5B;;EACD3J,EAAAA,YAAY,GAAG;EACb,WAAO,KAAKmV,UAAZ;EACD;;EACD9iB,EAAAA,MAAM,CAACyS,IAAD,EAAO;EACX,SAAKs1G,eAAL,CAAqBt1G,IAAI,CAAC9E,YAAL,EAArB;EACA,QAAI8E,IAAI,YAAYyM,kBAApB,EACE,OAAO,IAAP;EAEF,QAAIzM,IAAI,CAAC9V,OAAL,EAAJ,EAAoB,OAAO,IAAP;;EACpB,QAAI8V,IAAI,YAAYkK,OAApB,EAA6B;EAC3B,WAAKkrG,SAAL,CAAeprH,GAAf,CAAmBgW,IAAnB;;EACA,aAAO,IAAP;EACD,KAHD,MAGO,IAAIA,IAAI,YAAY4H,UAApB,EAAgC;EACrC,WAAKqvB,MAAL,CAAYjtC,GAAZ,CAAgBgW,IAAhB;;EACA,aAAO,IAAP;EACD,KAHM,MAGA,IAAIA,IAAI,YAAYiJ,KAApB,EAA2B;EAChC,WAAKpB,OAAL,CAAa7d,GAAb,CAAiBgW,IAAjB;;EACA,aAAO,IAAP;EACD;;EACDra,IAAAA,MAAM,CAACC,oBAAP,CAA4B,8BAA8Boa,IAAI,CAACyI,eAAL,EAA1D;EACD;;EACD8sG,EAAAA,UAAU,CAAC1wG,GAAD,EAAM;EACd,YAAQA,GAAR;EACA,WAAK,CAAL;EACE,eAAO,KAAKgD,OAAZ;;EACF,WAAK,CAAL;EACE,eAAO,KAAKovB,MAAZ;;EACF,WAAK,CAAL;EACE,eAAO,KAAKm+E,SAAZ;EANF;;EAQAzvH,IAAAA,MAAM,CAACC,oBAAP,CAA4B,wBAAwBif,GAApD;EACA,WAAO,IAAP;EACD;;EACD3a,EAAAA,OAAO,GAAG;EACR,WAAO,KAAKkrH,SAAL,CAAelrH,OAAf,MAA4B,KAAK+sC,MAAL,CAAY/sC,OAAZ,EAA5B,IAAqD,KAAK2d,OAAL,CAAa3d,OAAb,EAA5D;EACD;;EACDF,EAAAA,GAAG,GAAG;EACJ,QAAImC,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAeuE,UAAf,CAAhB,EAA4C;EAC1C,YAAM8oC,KAAK,GAAGrtC,SAAS,CAAC,CAAD,CAAvB;;EACA,WAAK,MAAMwa,IAAX,IAAmB6yB,KAAnB,EACE,KAAK7oC,GAAL,CAASgW,IAAT;EAEH,KALD,MAKO,IAAIxa,SAAS,CAAC,CAAD,CAAT,YAAwBya,QAA5B,EAAsC;EAC3C,YAAMD,IAAI,GAAGxa,SAAS,CAAC,CAAD,CAAtB;EACA,UAAI,KAAKktC,YAAL,KAAsB,IAA1B,EAAgC,KAAKA,YAAL,GAAoB1yB,IAAI,CAACK,UAAL,EAApB;EAChCL,MAAAA,IAAI,CAACza,KAAL,CAAW,IAAX;EACD;EACF;;EACD,MAAIsD,WAAJ,GAAkB;EAChB,WAAO,CAAC8e,cAAD,CAAP;EACD;;EAhFiC;;ECLrB,MAAM6tG,YAAN,CAAmB;EAChCvzH,EAAAA,WAAW,GAAG;EACZuzH,IAAAA,YAAY,CAAClwH,YAAb,CAA0BC,KAA1B,CAAgC,IAAhC,EAAsCC,SAAtC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKotC,YAAL,GAAoB,IAApB;EACA,SAAKgL,GAAL,GAAW,IAAX;EACA,SAAKC,GAAL,GAAW,IAAX;EACA,SAAK83E,YAAL,GAAoB,IAApB;EACA,UAAMxiF,EAAE,GAAGztC,SAAS,CAAC,CAAD,CAApB;EAAA,UAAyB0tC,EAAE,GAAG1tC,SAAS,CAAC,CAAD,CAAvC;EACA,SAAKk4C,GAAL,GAAWzK,EAAX;EACA,SAAK0K,GAAL,GAAWzK,EAAX;EACA,SAAKR,YAAL,GAAoBO,EAAE,CAAC5yB,UAAH,EAApB;EACD;;EACD,SAAOq1G,gBAAP,GAA0B;EACxB,QAAIlwH,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMyI,GAAG,GAAG1I,SAAS,CAAC,CAAD,CAArB;EAAA,YAA0ByI,CAAC,GAAGzI,SAAS,CAAC,CAAD,CAAvC;EACA,UAAI0I,GAAG,CAACmB,MAAJ,EAAJ,EAAkB,OAAO,KAAP;EAClB,aAAOpB,CAAC,CAACnG,IAAF,KAAWoG,GAAG,CAACsB,OAAJ,EAAX,IAA4BvB,CAAC,CAACnG,IAAF,KAAWoG,GAAG,CAACoB,OAAJ,EAAvC,IAAwDrB,CAAC,CAACxF,IAAF,KAAWyF,GAAG,CAACuB,OAAJ,EAAnE,IAAoFxB,CAAC,CAACxF,IAAF,KAAWyF,GAAG,CAACqB,OAAJ,EAAtG;EACD,KAJD,MAIO,IAAI/J,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMyI,GAAG,GAAG1I,SAAS,CAAC,CAAD,CAArB;EAAA,YAA0BkkB,EAAE,GAAGlkB,SAAS,CAAC,CAAD,CAAxC;EAAA,YAA6C2I,EAAE,GAAG3I,SAAS,CAAC,CAAD,CAA3D;EACA,aAAOgwH,YAAY,CAACE,gBAAb,CAA8BxnH,GAA9B,EAAmCwb,EAAnC,KAA0C8rG,YAAY,CAACE,gBAAb,CAA8BxnH,GAA9B,EAAmCC,EAAnC,CAAjD;EACD;EACF;;EACD,SAAOg2C,KAAP,CAAalR,EAAb,EAAiBC,EAAjB,EAAqB;EACnB,UAAMiR,KAAK,GAAG,IAAIqxE,YAAJ,CAAiBviF,EAAjB,EAAqBC,EAArB,CAAd;EACA,WAAOiR,KAAK,CAACA,KAAN,EAAP;EACD;;EACD,SAAO51C,UAAP,CAAkBL,GAAlB,EAAuBwb,EAAvB,EAA2Bvb,EAA3B,EAA+B;EAC7B,WAAOD,GAAG,CAACK,UAAJ,CAAemb,EAAf,KAAsBxb,GAAG,CAACK,UAAJ,CAAeJ,EAAf,CAA7B;EACD;;EACD,SAAOwnH,eAAP,CAAuB1iF,EAAvB,EAA2BC,EAA3B,EAA+B;EAC7B,UAAM0iF,KAAK,GAAG3iF,EAAE,CAACtxB,mBAAH,EAAd;EACA,UAAMk0G,KAAK,GAAG3iF,EAAE,CAACvxB,mBAAH,EAAd;EACA,UAAMm0G,UAAU,GAAGF,KAAK,CAAClmH,YAAN,CAAmBmmH,KAAnB,CAAnB;EACA,WAAOC,UAAP;EACD;;EACD,SAAOC,qBAAP,CAA6B/1G,IAA7B,EAAmC9R,GAAnC,EAAwC8nH,IAAxC,EAA8C;EAC5Ch2G,IAAAA,IAAI,CAACza,KAAL,CAAW,IAAK,MAAM;EACpB,UAAIsD,WAAJ,GAAkB;EAChB,eAAO,CAACyE,wBAAD,CAAP;EACD;;EACDC,MAAAA,MAAM,CAACC,GAAD,EAAM5K,CAAN,EAAS;EACb,YAAIA,CAAC,IAAI,CAAT,EAAY,OAAO,IAAP;EACZ,cAAM8mB,EAAE,GAAGlc,GAAG,CAACtB,aAAJ,CAAkBtJ,CAAC,GAAG,CAAtB,CAAX;EACA,cAAMuL,EAAE,GAAGX,GAAG,CAACtB,aAAJ,CAAkBtJ,CAAlB,CAAX;EACA,cAAMqzH,QAAQ,GAAGT,YAAY,CAACjnH,UAAb,CAAwBL,GAAxB,EAA6Bwb,EAA7B,EAAiCvb,EAAjC,KAAwC,CAACqnH,YAAY,CAACE,gBAAb,CAA8BxnH,GAA9B,EAAmCwb,EAAnC,EAAuCvb,EAAvC,CAA1D;;EACA,YAAI8nH,QAAJ,EAAc;EACZ,gBAAMh1F,GAAG,GAAG,IAAIJ,WAAJ,CAAgBnX,EAAhB,EAAoBvb,EAApB,CAAZ;EACA6nH,UAAAA,IAAI,CAAChsH,GAAL,CAASi3B,GAAT;EACD;EACF;;EACDxzB,MAAAA,MAAM,GAAG;EACP,eAAO,KAAP;EACD;;EACDC,MAAAA,iBAAiB,GAAG;EAClB,eAAO,KAAP;EACD;;EAnBmB,KAAX,EAAX;EAqBD;;EACD,SAAOwoH,WAAP,CAAmBjjF,EAAnB,EAAuBC,EAAvB,EAA2B;EACzB,UAAM3vB,OAAO,GAAG0vB,EAAE,CAAC5yB,UAAH,EAAhB;EACA,UAAM81G,KAAK,GAAG5yG,OAAO,CAAC8F,wBAAR,CAAiC,CAAC4pB,EAAD,EAAKC,EAAL,CAAjC,CAAd;EACA,UAAMiR,KAAK,GAAGgyE,KAAK,CAACtyH,MAAN,CAAa,GAAb,CAAd;EACA,WAAOsgD,KAAP;EACD;;EACDiyE,EAAAA,oBAAoB,CAACtzH,MAAD,EAASoL,GAAT,EAAc;EAChC,UAAMmoH,UAAU,GAAG,KAAKN,qBAAL,CAA2B,KAAKr4E,GAAhC,EAAqC,KAAKC,GAA1C,EAA+CzvC,GAA/C,CAAnB;EACA,UAAMooH,SAAS,GAAG,IAAI1rH,SAAJ,EAAlB;EACA4qH,IAAAA,YAAY,CAACO,qBAAb,CAAmCjzH,MAAnC,EAA2CoL,GAA3C,EAAgDooH,SAAhD;EACA,WAAO,KAAKlxG,OAAL,CAAaixG,UAAb,EAAyBC,SAAzB,CAAP;EACD;;EACDC,EAAAA,iBAAiB,CAACroH,GAAD,EAAM8R,IAAN,EAAYw2G,aAAZ,EAA2B;EAC1C,UAAMC,iBAAiB,GAAG,IAAI7rH,SAAJ,EAA1B;;EACA,SAAK,IAAIhI,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGod,IAAI,CAACkB,gBAAL,EAApB,EAA6Cte,CAAC,EAA9C,EAAkD;EAChD,YAAM8zH,IAAI,GAAG12G,IAAI,CAACO,YAAL,CAAkB3d,CAAlB,CAAb;;EACA,UAAI8zH,IAAI,CAAC/0G,mBAAL,GAA2BpT,UAA3B,CAAsCL,GAAtC,CAAJ,EAAgD;EAC9CuoH,QAAAA,iBAAiB,CAACzsH,GAAlB,CAAsB0sH,IAAtB;EACD,OAFD,MAEO;EACL,cAAMvuH,IAAI,GAAGuuH,IAAI,CAACvuH,IAAL,EAAb;EACAquH,QAAAA,aAAa,CAACxsH,GAAd,CAAkB7B,IAAlB;EACD;EACF;;EACD,WAAO,KAAKuqC,YAAL,CAAkB5lB,aAAlB,CAAgC2pG,iBAAhC,CAAP;EACD;;EACDrxG,EAAAA,OAAO,CAACuxG,KAAD,EAAQC,KAAR,EAAe;EACpB,QAAID,KAAK,CAACvsH,IAAN,OAAiBwsH,KAAK,CAACxsH,IAAN,EAArB,EAAmC,OAAO,KAAP;EACnC,UAAMw8F,QAAQ,GAAG,IAAIr1E,OAAJ,CAAYolG,KAAZ,CAAjB;;EACA,SAAK,MAAM11F,GAAX,IAAkB21F,KAAlB,EACE,IAAI,CAAChwB,QAAQ,CAAC11F,QAAT,CAAkB+vB,GAAlB,CAAL,EACE,OAAO,KAAP;;EAGJ,WAAO,IAAP;EACD;;EACDkjB,EAAAA,KAAK,GAAG;EACN,UAAM2xE,UAAU,GAAGN,YAAY,CAACG,eAAb,CAA6B,KAAKj4E,GAAlC,EAAuC,KAAKC,GAA5C,CAAnB;;EACA,QAAIm4E,UAAU,CAACzmH,MAAX,EAAJ,EAAyB;EACvB,YAAMwnH,MAAM,GAAG,KAAKn5E,GAAL,CAASv1C,IAAT,EAAf;;EACA,YAAM2uH,MAAM,GAAG,KAAKn5E,GAAL,CAASx1C,IAAT,EAAf;;EACA,aAAOsqC,gBAAgB,CAACM,OAAjB,CAAyB8jF,MAAzB,EAAiCC,MAAjC,CAAP;EACD;;EACD,UAAMC,aAAa,GAAG,IAAInsH,SAAJ,EAAtB;EACA,UAAMosH,SAAS,GAAG,KAAKT,iBAAL,CAAuBT,UAAvB,EAAmC,KAAKp4E,GAAxC,EAA6Cq5E,aAA7C,CAAlB;EACA,UAAME,SAAS,GAAG,KAAKV,iBAAL,CAAuBT,UAAvB,EAAmC,KAAKn4E,GAAxC,EAA6Co5E,aAA7C,CAAlB;EACA,UAAMG,SAAS,GAAG,KAAKC,SAAL,CAAeH,SAAf,EAA0BC,SAA1B,CAAlB;EACA,QAAIn0H,MAAM,GAAG,IAAb;EACA,SAAK2yH,YAAL,GAAoB,KAAKW,oBAAL,CAA0Bc,SAA1B,EAAqCpB,UAArC,CAApB;EACA,QAAI,CAAC,KAAKL,YAAV,EACE3yH,MAAM,GAAG,KAAKq0H,SAAL,CAAe,KAAKz5E,GAApB,EAAyB,KAAKC,GAA9B,CAAT,CADF,KAGE76C,MAAM,GAAG,KAAKiwC,OAAL,CAAamkF,SAAb,EAAwBH,aAAxB,CAAT;EAEF,WAAOj0H,MAAP;EACD;;EACDiwC,EAAAA,OAAO,CAACmkF,SAAD,EAAYH,aAAZ,EAA2B;EAChC,QAAIA,aAAa,CAAC3sH,IAAd,MAAwB,CAA5B,EAA+B,OAAO8sH,SAAP;EAC/BH,IAAAA,aAAa,CAAC/sH,GAAd,CAAkBktH,SAAlB;EACA,UAAMp0H,MAAM,GAAG2vC,gBAAgB,CAACM,OAAjB,CAAyBgkF,aAAzB,CAAf;EACA,WAAOj0H,MAAP;EACD;;EACDq0H,EAAAA,SAAS,CAAChhG,KAAD,EAAQmqF,KAAR,EAAe;EACtB,QAAI;EACF,aAAOnqF,KAAK,CAACguB,KAAN,CAAYm8D,KAAZ,CAAP;EACD,KAFD,CAEE,OAAOzsG,EAAP,EAAW;EACX,UAAIA,EAAE,YAAYm1D,iBAAlB,EACE,OAAOwsD,YAAY,CAACU,WAAb,CAAyB//F,KAAzB,EAAgCmqF,KAAhC,CAAP,CADF,KAEK,MAAMzsG,EAAN;EACN,KAND,SAMU;EACX;;EACDkiH,EAAAA,qBAAqB,CAAC5/F,KAAD,EAAQmqF,KAAR,EAAepyG,GAAf,EAAoB;EACvC,UAAM8nH,IAAI,GAAG,IAAIprH,SAAJ,EAAb;EACA4qH,IAAAA,YAAY,CAACO,qBAAb,CAAmC5/F,KAAnC,EAA0CjoB,GAA1C,EAA+C8nH,IAA/C;EACA,QAAI1V,KAAK,KAAK,IAAd,EAAoBkV,YAAY,CAACO,qBAAb,CAAmCzV,KAAnC,EAA0CpyG,GAA1C,EAA+C8nH,IAA/C;EACpB,WAAOA,IAAP;EACD;;EACDoB,EAAAA,gBAAgB,GAAG;EACjB,WAAO,KAAK3B,YAAZ;EACD;;EA1I+B;;ECGnB,MAAM4B,oBAAN,CAA2B;EACxCp1H,EAAAA,WAAW,GAAG;EACZo1H,IAAAA,oBAAoB,CAAC/xH,YAArB,CAAkCC,KAAlC,CAAwC,IAAxC,EAA8CC,SAA9C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKgyH,WAAL,GAAmB,IAAnB;EACA,SAAK5kF,YAAL,GAAoB,IAApB;EACA,UAAMw5D,KAAK,GAAG1mG,SAAS,CAAC,CAAD,CAAvB;EACA,SAAK8xH,WAAL,GAAmBprB,KAAnB;EACA,QAAI,KAAKorB,WAAL,KAAqB,IAAzB,EAA+B,KAAKA,WAAL,GAAmB,IAAI1sH,SAAJ,EAAnB;EAChC;;EACD,SAAO2sH,kBAAP,CAA0Bx2G,CAA1B,EAA6B;EAC3B,QAAI5U,YAAY,CAAC4U,CAAD,EAAIkJ,SAAJ,CAAhB,EACE,OAAOlJ,CAAP;EAEF,UAAMiQ,QAAQ,GAAG+mB,gBAAgB,CAACC,WAAjB,CAA6Bj3B,CAA7B,CAAjB;EACA,QAAIiQ,QAAQ,CAAC5mB,IAAT,OAAoB,CAAxB,EAA2B,OAAO4mB,QAAQ,CAACvmB,GAAT,CAAa,CAAb,CAAP;EAC3B,WAAOsW,CAAC,CAACV,UAAF,GAAegW,kBAAf,CAAkCpC,eAAe,CAACwB,cAAhB,CAA+BzE,QAA/B,CAAlC,CAAP;EACD;;EACD,SAAO6lB,WAAP,CAAmBvD,IAAnB,EAAyBpoC,KAAzB,EAAgC;EAC9B,QAAIA,KAAK,IAAIooC,IAAI,CAAClpC,IAAL,EAAb,EAA0B,OAAO,IAAP;EAC1B,WAAOkpC,IAAI,CAAC7oC,GAAL,CAASS,KAAT,CAAP;EACD;;EACD,SAAOi5C,KAAP,CAAa+nD,KAAb,EAAoB;EAClB,UAAM55D,EAAE,GAAG,IAAI+kF,oBAAJ,CAAyBnrB,KAAzB,CAAX;EACA,WAAO55D,EAAE,CAAC6R,KAAH,EAAP;EACD;;EACDqzE,EAAAA,kBAAkB,CAACC,QAAD,EAAW;EAC3B,UAAM5kF,KAAK,GAAG,IAAIjoC,SAAJ,EAAd;;EACA,SAAK,IAAIhI,CAAC,GAAG60H,QAAQ,CAACttH,QAAT,EAAb,EAAkCvH,CAAC,CAACmJ,OAAF,EAAlC,GAAiD;EAC/C,YAAMlE,CAAC,GAAGjF,CAAC,CAACkJ,IAAF,EAAV;EACA,UAAIkU,IAAI,GAAG,IAAX;EACA,UAAI7T,YAAY,CAACtE,CAAD,EAAI2C,IAAJ,CAAhB,EACEwV,IAAI,GAAG,KAAK03G,SAAL,CAAe7vH,CAAf,CAAP,CADF,KAEK,IAAIA,CAAC,YAAYoY,QAAjB,EACHD,IAAI,GAAGnY,CAAP;EAEFgrC,MAAAA,KAAK,CAAC7oC,GAAN,CAAUgW,IAAV;EACD;;EACD,WAAO6yB,KAAP;EACD;;EACDsR,EAAAA,KAAK,GAAG;EACN,QAAI,KAAKmzE,WAAL,KAAqB,IAAzB,EAA+B,MAAM,IAAIz+G,qBAAJ,CAA0B,uCAA1B,CAAN;EAC/B,QAAI,KAAKy+G,WAAL,CAAiBptH,OAAjB,EAAJ,EAAgC,OAAO,IAAP;EAChC,SAAKwoC,YAAL,GAAoB,KAAK4kF,WAAL,CAAiBntH,QAAjB,GAA4B2B,IAA5B,GAAmCuU,UAAnC,EAApB;EACA,UAAMnV,KAAK,GAAG,IAAIuxE,OAAJ,CAAY46C,oBAAoB,CAACM,qBAAjC,CAAd;;EACA,SAAK,IAAI/0H,CAAC,GAAG,KAAK00H,WAAL,CAAiBntH,QAAjB,EAAb,EAA0CvH,CAAC,CAACmJ,OAAF,EAA1C,GAAyD;EACvD,YAAMmzC,IAAI,GAAGt8C,CAAC,CAACkJ,IAAF,EAAb;EACAZ,MAAAA,KAAK,CAAC41C,MAAN,CAAa5B,IAAI,CAACv9B,mBAAL,EAAb,EAAyCu9B,IAAzC;EACD;;EACD,SAAKo4E,WAAL,GAAmB,IAAnB;EACA,UAAMM,QAAQ,GAAG1sH,KAAK,CAACgwE,SAAN,EAAjB;EACA,UAAM28C,QAAQ,GAAG,KAAKH,SAAL,CAAeE,QAAf,CAAjB;EACA,WAAOC,QAAP;EACD;;EACDC,EAAAA,WAAW,GAAG;EACZ,QAAItyH,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMotC,KAAK,GAAGrtC,SAAS,CAAC,CAAD,CAAvB;EACA,aAAO,KAAKsyH,WAAL,CAAiBjlF,KAAjB,EAAwB,CAAxB,EAA2BA,KAAK,CAACzoC,IAAN,EAA3B,CAAP;EACD,KAHD,MAGO,IAAI5E,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMotC,KAAK,GAAGrtC,SAAS,CAAC,CAAD,CAAvB;EAAA,YAA4ByH,KAAK,GAAGzH,SAAS,CAAC,CAAD,CAA7C;EAAA,YAAkD0H,GAAG,GAAG1H,SAAS,CAAC,CAAD,CAAjE;;EACA,UAAI0H,GAAG,GAAGD,KAAN,IAAe,CAAnB,EAAsB;EACpB,cAAMgmC,EAAE,GAAGokF,oBAAoB,CAACxgF,WAArB,CAAiChE,KAAjC,EAAwC5lC,KAAxC,CAAX;EACA,eAAO,KAAK8qH,SAAL,CAAe9kF,EAAf,EAAmB,IAAnB,CAAP;EACD,OAHD,MAGO,IAAI/lC,GAAG,GAAGD,KAAN,KAAgB,CAApB,EAAuB;EAC5B,eAAO,KAAK8qH,SAAL,CAAeV,oBAAoB,CAACxgF,WAArB,CAAiChE,KAAjC,EAAwC5lC,KAAxC,CAAf,EAA+DoqH,oBAAoB,CAACxgF,WAArB,CAAiChE,KAAjC,EAAwC5lC,KAAK,GAAG,CAAhD,CAA/D,CAAP;EACD,OAFM,MAEA;EACL,cAAMiZ,GAAG,GAAGrkB,IAAI,CAAC6S,KAAL,CAAW,CAACxH,GAAG,GAAGD,KAAP,IAAgB,CAA3B,CAAZ;EACA,cAAMgmC,EAAE,GAAG,KAAK6kF,WAAL,CAAiBjlF,KAAjB,EAAwB5lC,KAAxB,EAA+BiZ,GAA/B,CAAX;EACA,cAAMgtB,EAAE,GAAG,KAAK4kF,WAAL,CAAiBjlF,KAAjB,EAAwB3sB,GAAxB,EAA6BhZ,GAA7B,CAAX;EACA,eAAO,KAAK6qH,SAAL,CAAe9kF,EAAf,EAAmBC,EAAnB,CAAP;EACD;EACF;EACF;;EACD8kF,EAAAA,aAAa,CAACnlF,KAAD,EAAQ;EACnB,QAAIsR,KAAK,GAAG,IAAZ;;EACA,SAAK,IAAIvhD,CAAC,GAAGiwC,KAAK,CAAC1oC,QAAN,EAAb,EAA+BvH,CAAC,CAACmJ,OAAF,EAA/B,GAA8C;EAC5C,YAAMgV,CAAC,GAAGne,CAAC,CAACkJ,IAAF,EAAV;EACA,UAAIq4C,KAAK,KAAK,IAAd,EAAoBA,KAAK,GAAGpjC,CAAC,CAAC5Y,IAAF,EAAR,CAApB,KAA2Cg8C,KAAK,GAAGA,KAAK,CAACA,KAAN,CAAYpjC,CAAZ,CAAR;EAC5C;;EACD,WAAOojC,KAAP;EACD;;EACD4zE,EAAAA,SAAS,CAAC9kF,EAAD,EAAKC,EAAL,EAAS;EAChB,QAAID,EAAE,KAAK,IAAP,IAAeC,EAAE,KAAK,IAA1B,EAAgC,OAAO,IAAP;EAChC,QAAID,EAAE,KAAK,IAAX,EAAiB,OAAOC,EAAE,CAAC/qC,IAAH,EAAP;EACjB,QAAI+qC,EAAE,KAAK,IAAX,EAAiB,OAAOD,EAAE,CAAC9qC,IAAH,EAAP;EACjB,WAAO,KAAK8vH,WAAL,CAAiBhlF,EAAjB,EAAqBC,EAArB,CAAP;EACD;;EACD+kF,EAAAA,WAAW,CAAChlF,EAAD,EAAKC,EAAL,EAAS;EAClB,UAAMiR,KAAK,GAAGqxE,YAAY,CAACrxE,KAAb,CAAmBlR,EAAnB,EAAuBC,EAAvB,CAAd;EAEA,WAAOmkF,oBAAoB,CAACE,kBAArB,CAAwCpzE,KAAxC,CAAP;EACD;;EACDuzE,EAAAA,SAAS,CAACD,QAAD,EAAW;EAClB,UAAM5kF,KAAK,GAAG,KAAK2kF,kBAAL,CAAwBC,QAAxB,CAAd;EACA,UAAMtzE,KAAK,GAAG,KAAK2zE,WAAL,CAAiBjlF,KAAjB,CAAd;EACA,WAAOsR,KAAP;EACD;;EACD+zE,EAAAA,WAAW,GAAG;EACZ,QAAI1yH,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMotC,KAAK,GAAGrtC,SAAS,CAAC,CAAD,CAAvB;EACA,YAAM+d,OAAO,GAAGsvB,KAAK,CAACpoC,GAAN,CAAU,CAAV,EAAa4V,UAAb,EAAhB;EACA,YAAM81G,KAAK,GAAG5yG,OAAO,CAACuJ,aAAR,CAAsB+lB,KAAtB,CAAd;EACA,YAAMglF,QAAQ,GAAG1B,KAAK,CAACtyH,MAAN,CAAa,GAAb,CAAjB;EACA,aAAOg0H,QAAP;EACD,KAND,MAMO,IAAIryH,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMwtC,EAAE,GAAGztC,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyB0tC,EAAE,GAAG1tC,SAAS,CAAC,CAAD,CAAvC;EACA,YAAM+d,OAAO,GAAG0vB,EAAE,CAAC5yB,UAAH,EAAhB;EACA,YAAM81G,KAAK,GAAG5yG,OAAO,CAAC8F,wBAAR,CAAiC,CAAC4pB,EAAD,EAAKC,EAAL,CAAjC,CAAd;EACA,YAAM2kF,QAAQ,GAAG1B,KAAK,CAACtyH,MAAN,CAAa,GAAb,CAAjB;EACA,aAAOg0H,QAAP;EACD;EACF;;EAhHuC;EAkH1CR,oBAAoB,CAACM,qBAArB,GAA6C,CAA7C;;ECnHe,MAAMQ,YAAN,CAAmB;EAChCl2H,EAAAA,WAAW,GAAG;EACZk2H,IAAAA,YAAY,CAAC7yH,YAAb,CAA0BC,KAA1B,CAAgC,IAAhC,EAAsCC,SAAtC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKgzC,SAAL,GAAiB,IAAjB;EACA,SAAK8/E,UAAL,GAAkB,IAAlB;;EACA,QAAI5yH,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,UAAI0G,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAeuE,UAAf,CAAhB,EAA4C;EAC1C,cAAM8oC,KAAK,GAAGrtC,SAAS,CAAC,CAAD,CAAvB;EACA,aAAK2pB,OAAL,CAAa0jB,KAAb;EACD,OAHD,MAGO,IAAIrtC,SAAS,CAAC,CAAD,CAAT,YAAwBya,QAA5B,EAAsC;EAC3C,cAAMD,IAAI,GAAGxa,SAAS,CAAC,CAAD,CAAtB;EACA,aAAK2pB,OAAL,CAAanP,IAAb;EACD;EACF,KARD,MAQO,IAAIxa,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMotC,KAAK,GAAGrtC,SAAS,CAAC,CAAD,CAAvB;EAAA,YAA4BozC,QAAQ,GAAGpzC,SAAS,CAAC,CAAD,CAAhD;EACA,WAAK8yC,SAAL,GAAiBM,QAAjB;EACA,WAAKzpB,OAAL,CAAa0jB,KAAb;EACD;EACF;;EACD,SAAOsR,KAAP,GAAe;EACb,QAAI3+C,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,UAAI0G,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAeuE,UAAf,CAAhB,EAA4C;EAC1C,cAAM8oC,KAAK,GAAGrtC,SAAS,CAAC,CAAD,CAAvB;EACA,cAAM8sC,EAAE,GAAG,IAAI6lF,YAAJ,CAAiBtlF,KAAjB,CAAX;EACA,eAAOP,EAAE,CAAC6R,KAAH,EAAP;EACD,OAJD,MAIO,IAAI3+C,SAAS,CAAC,CAAD,CAAT,YAAwBya,QAA5B,EAAsC;EAC3C,cAAMD,IAAI,GAAGxa,SAAS,CAAC,CAAD,CAAtB;EACA,cAAM8sC,EAAE,GAAG,IAAI6lF,YAAJ,CAAiBn4G,IAAjB,CAAX;EACA,eAAOsyB,EAAE,CAAC6R,KAAH,EAAP;EACD;EACF,KAVD,MAUO,IAAI3+C,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMotC,KAAK,GAAGrtC,SAAS,CAAC,CAAD,CAAvB;EAAA,YAA4BozC,QAAQ,GAAGpzC,SAAS,CAAC,CAAD,CAAhD;EACA,YAAM8sC,EAAE,GAAG,IAAI6lF,YAAJ,CAAiBtlF,KAAjB,EAAwB+F,QAAxB,CAAX;EACA,aAAOtG,EAAE,CAAC6R,KAAH,EAAP;EACD;EACF;;EACDk0E,EAAAA,UAAU,CAACplF,EAAD,EAAK;EACb,UAAMsT,KAAK,GAAG,KAAKjO,SAAL,CAAevvB,WAAf,EAAd;;EACA,WAAO82F,qBAAqB,CAACV,SAAtB,CAAgClsE,EAAhC,EAAoCsT,KAApC,EAA2Ci2D,SAAS,CAAC4C,KAArD,CAAP;EACD;;EACDkZ,EAAAA,aAAa,CAACrlF,EAAD,EAAKC,EAAL,EAAS;EACpB,QAAID,EAAE,KAAK,IAAP,IAAeC,EAAE,KAAK,IAA1B,EAAgC,OAAO,IAAP;EAChC,QAAIA,EAAE,KAAK,IAAX,EAAiB,OAAOD,EAAP;EACjB,QAAIA,EAAE,KAAK,IAAX,EAAiB,OAAOC,EAAP;EACjB,WAAOD,EAAE,CAACkR,KAAH,CAASjR,EAAT,CAAP;EACD;;EACD/jB,EAAAA,OAAO,GAAG;EACR,QAAIhjB,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAeuE,UAAf,CAAhB,EAA4C;EAC1C,YAAM8oC,KAAK,GAAGrtC,SAAS,CAAC,CAAD,CAAvB;EACA,WAAK4yH,UAAL,GAAkBjD,cAAc,CAAChmG,OAAf,CAAuB0jB,KAAvB,CAAlB;EACD,KAHD,MAGO,IAAIrtC,SAAS,CAAC,CAAD,CAAT,YAAwBya,QAA5B,EAAsC;EAC3C,YAAMD,IAAI,GAAGxa,SAAS,CAAC,CAAD,CAAtB;EACA,WAAK4yH,UAAL,GAAkBjD,cAAc,CAAChmG,OAAf,CAAuBnP,IAAvB,CAAlB;EACD;EACF;;EACDmkC,EAAAA,KAAK,GAAG;EACN,QAAI,KAAK7L,SAAL,KAAmB,IAAvB,EAA6B,KAAKA,SAAL,GAAiB,KAAK8/E,UAAL,CAAgB/3G,UAAhB,EAAjB;EAC7B,QAAI,KAAKi4B,SAAL,KAAmB,IAAvB,EACE,OAAO,IAAP;EAEF,QAAI,KAAK8/E,UAAL,CAAgBluH,OAAhB,EAAJ,EACE,OAAO,KAAKouC,SAAL,CAAeziB,WAAf,CAA2B,KAAKuiG,UAAL,CAAgBl9G,YAAhB,EAA3B,CAAP;;EAEF,UAAM4M,MAAM,GAAG,KAAKswG,UAAL,CAAgB7C,UAAhB,CAA2B,CAA3B,CAAf;;EACA,UAAMx+E,KAAK,GAAG,KAAKqhF,UAAL,CAAgB7C,UAAhB,CAA2B,CAA3B,CAAd;;EACA,UAAMvkG,QAAQ,GAAG,KAAKonG,UAAL,CAAgB7C,UAAhB,CAA2B,CAA3B,CAAjB;;EACA,QAAIgD,WAAW,GAAG,IAAlB;;EACA,QAAIzwG,MAAM,CAAC1d,IAAP,KAAgB,CAApB,EAAuB;EACrB,YAAMouH,MAAM,GAAG,KAAKlgF,SAAL,CAAexrB,aAAf,CAA6BhF,MAA7B,CAAf;;EACAywG,MAAAA,WAAW,GAAG,KAAKF,UAAL,CAAgBG,MAAhB,CAAd;EACD;;EACD,QAAIC,UAAU,GAAG,IAAjB;;EACA,QAAI1hF,KAAK,CAAC3sC,IAAN,KAAe,CAAnB,EAAsB;EACpB,YAAMsuH,QAAQ,GAAG,KAAKpgF,SAAL,CAAexrB,aAAf,CAA6BiqB,KAA7B,CAAjB;;EACA0hF,MAAAA,UAAU,GAAG,KAAKJ,UAAL,CAAgBK,QAAhB,CAAb;EACD;;EACD,QAAIC,aAAa,GAAG,IAApB;EACA,QAAI3nG,QAAQ,CAAC5mB,IAAT,KAAkB,CAAtB,EACEuuH,aAAa,GAAGtB,oBAAoB,CAAClzE,KAArB,CAA2BnzB,QAA3B,CAAhB;EAEF,UAAM4nG,OAAO,GAAG,KAAKN,aAAL,CAAmBG,UAAnB,EAA+BE,aAA/B,CAAhB;EACA,QAAIx0E,KAAK,GAAG,IAAZ;EACA,QAAIo0E,WAAW,KAAK,IAApB,EAA0Bp0E,KAAK,GAAGy0E,OAAR,CAA1B,KAAgD,IAAIA,OAAO,KAAK,IAAhB,EAAsBz0E,KAAK,GAAGo0E,WAAR,CAAtB,KAAgDp0E,KAAK,GAAGywE,kBAAkB,CAACzwE,KAAnB,CAAyBo0E,WAAzB,EAAsCK,OAAtC,CAAR;EAChG,QAAIz0E,KAAK,KAAK,IAAd,EAAoB,OAAO,KAAK7L,SAAL,CAAejvB,wBAAf,EAAP;EACpB,WAAO86B,KAAP;EACD;;EAvF+B;;;;;;;;;;;;;;;;;;;;;;;;;;;ECFnB,MAAM00E,mCAAN,SAAkDllF,cAAc,CAACe,mBAAjE,CAAqF;EAClGzyC,EAAAA,WAAW,GAAG;EACZ;EACA42H,IAAAA,mCAAmC,CAACvzH,YAApC,CAAiDC,KAAjD,CAAuD,IAAvD,EAA6DC,SAA7D;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKwzH,SAAL,GAAiB,IAAjB;EACA,SAAKC,gBAAL,GAAwB,IAAxB;EACA,UAAMC,QAAQ,GAAGxzH,SAAS,CAAC,CAAD,CAA1B;EAAA,UAA+ByzH,eAAe,GAAGzzH,SAAS,CAAC,CAAD,CAA1D;EACA,SAAKszH,SAAL,GAAiBE,QAAjB;EACA,SAAKD,gBAAL,GAAwBE,eAAxB;EACD;;EACDllF,EAAAA,IAAI,GAAG;EACL,QAAIvuC,SAAS,CAACC,MAAV,KAAqB,CAArB,IAA2BD,SAAS,CAAC,CAAD,CAAT,YAAwBya,QAAxB,IAAoCza,SAAS,CAAC,CAAD,CAAT,YAAwBkH,KAA3F,EAAmG;EACjG,YAAMyc,WAAW,GAAG3jB,SAAS,CAAC,CAAD,CAA7B;EAAA,YAAkCwa,IAAI,GAAGxa,SAAS,CAAC,CAAD,CAAlD;EACA,UAAI2jB,WAAW,CAAC1jB,MAAZ,KAAuB,CAA3B,EAA8B,OAAO,IAAP;EAC9B,YAAMyzH,aAAa,GAAG,IAAIxsH,KAAJ,CAAUyc,WAAW,CAAC1jB,MAAtB,EAA8BkH,IAA9B,CAAmC,IAAnC,CAAtB;;EACA,WAAK,IAAI/J,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGumB,WAAW,CAAC1jB,MAAhC,EAAwC7C,CAAC,EAAzC,EAA6C;EAC3C,cAAMoF,KAAK,GAAG,IAAI1B,UAAJ,CAAe6iB,WAAW,CAACvmB,CAAD,CAA1B,CAAd;;EACA,aAAKk2H,SAAL,CAAetlG,WAAf,CAA2BxrB,KAA3B;;EACAkxH,QAAAA,aAAa,CAACt2H,CAAD,CAAb,GAAmBoF,KAAnB;EACD;;EACD,YAAMmxH,mBAAmB,GAAG,IAAIntH,cAAJ,CAAmBktH,aAAnB,EAAkC,KAAlC,CAA5B;EACA,YAAME,gBAAgB,GAAGD,mBAAmB,CAAC7sH,iBAApB,EAAzB;EACA,UAAI+sH,SAAS,GAAG,CAAhB;EACA,UAAIr5G,IAAI,YAAY4H,UAApB,EAAgCyxG,SAAS,GAAG,CAAZ;EAChC,UAAIr5G,IAAI,YAAYwN,UAApB,EAAgC6rG,SAAS,GAAG,CAAZ;EAChC,UAAIC,eAAe,GAAGJ,aAAtB;EACA,UAAI,KAAKH,gBAAT,EAA2BO,eAAe,GAAG,IAAlB;EAC3B,UAAIF,gBAAgB,CAAC3zH,MAAjB,GAA0B4zH,SAA9B,EACE,OAAOC,eAAP;EAEF,aAAOF,gBAAP;EACD,KApBD,MAoBO;EACL,aAAO,MAAMrlF,IAAN,CAAWxuC,KAAX,CAAiB,IAAjB,EAAuBC,SAAvB,CAAP;EACD;EACF;;EApCiG;;ECCrF,MAAM+zH,wBAAN,CAA+B;EAC5Ct3H,EAAAA,WAAW,GAAG;EACZs3H,IAAAA,wBAAwB,CAACj0H,YAAzB,CAAsCC,KAAtC,CAA4C,IAA5C,EAAkDC,SAAlD;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKwzH,SAAL,GAAiB,IAAjB;EACA,SAAKC,gBAAL,GAAwB,IAAxB;EACA,SAAKS,qBAAL,GAA6B,KAA7B;EACA,SAAKC,YAAL,GAAoB,KAApB;EACA,UAAM7mG,EAAE,GAAGptB,SAAS,CAAC,CAAD,CAApB;EACA,SAAKszH,SAAL,GAAiBlmG,EAAjB;EACD;;EACD,SAAOo1B,MAAP,CAAcjnC,CAAd,EAAiBuwC,SAAjB,EAA4B;EAC1B,UAAMooE,OAAO,GAAG,IAAIH,wBAAJ,CAA6BjoE,SAA7B,CAAhB;EACA,WAAOooE,OAAO,CAAC1xE,MAAR,CAAejnC,CAAf,CAAP;EACD;;EACD,SAAO44G,eAAP,CAAuB54G,CAAvB,EAA0BuwC,SAA1B,EAAqC;EACnC,UAAMooE,OAAO,GAAG,IAAIH,wBAAJ,CAA6BjoE,SAA7B,CAAhB;EACAooE,IAAAA,OAAO,CAACE,YAAR,CAAqB,IAArB;EACA,WAAOF,OAAO,CAAC1xE,MAAR,CAAejnC,CAAf,CAAP;EACD;;EACD84G,EAAAA,oBAAoB,CAAC75G,IAAD,EAAO;EACzB,QAAI85G,YAAY,GAAG95G,IAAnB;EACA,QAAI,CAAC,KAAKw5G,qBAAV,EACEM,YAAY,GAAG,KAAKC,QAAL,CAAc/5G,IAAd,EAAoB,KAAK84G,SAAzB,CAAf;EAEF,UAAMkB,OAAO,GAAGhxB,QAAQ,CAACI,QAAT,CAAkB0wB,YAAlB,EAAgC,CAAhC,CAAhB;EACA,WAAOE,OAAP;EACD;;EACDL,EAAAA,eAAe,CAAC35G,IAAD,EAAO;EACpB,QAAIi6G,QAAQ,GAAG,IAAf;;EACA,QAAI,KAAKT,qBAAT,EAAgC;EAC9B,YAAMU,UAAU,GAAG,KAAKC,aAAL,CAAmBn6G,IAAI,CAACK,UAAL,EAAnB,EAAsC,KAAKy4G,SAA3C,CAAnB;EACAmB,MAAAA,QAAQ,GAAG,IAAItmF,cAAJ,CAAmBumF,UAAnB,CAAX;EACD,KAHD,MAGO;EACLD,MAAAA,QAAQ,GAAG,IAAItmF,cAAJ,EAAX;EACD;;EACD,QAAIymF,oBAAoB,GAAG,KAAKrB,gBAAhC;EACA,QAAI/4G,IAAI,CAAC9E,YAAL,MAAuB,CAA3B,EAA8Bk/G,oBAAoB,GAAG,IAAvB;EAC9B,UAAMC,UAAU,GAAGJ,QAAQ,CAAClmF,IAAT,CAAc/zB,IAAd,EAAoB,IAAI64G,mCAAJ,CAAwC,KAAKC,SAA7C,EAAwDsB,oBAAxD,CAApB,CAAnB;EACA,WAAOC,UAAP;EACD;;EACDN,EAAAA,QAAQ,CAAC/5G,IAAD,EAAOs6G,KAAP,EAAc;EACpB,UAAMC,UAAU,GAAG,KAAKC,YAAL,CAAkBx6G,IAAI,CAACK,UAAL,EAAlB,EAAqCi6G,KAArC,CAAnB;EACA,WAAOC,UAAU,CAACxmF,IAAX,CAAgB/zB,IAAhB,EAAsB,IAAI2zB,cAAc,CAACc,qBAAnB,EAAtB,CAAP;EACD;;EACDgmF,EAAAA,4BAA4B,CAACxB,eAAD,EAAkB;EAC5C,SAAKF,gBAAL,GAAwBE,eAAxB;EACD;;EACDkB,EAAAA,aAAa,CAACO,YAAD,EAAe9nG,EAAf,EAAmB;EAC9B,UAAMsnG,UAAU,GAAG,IAAIjmG,eAAJ,CAAoBrB,EAApB,EAAwB8nG,YAAY,CAACn5G,OAAb,EAAxB,EAAgDm5G,YAAY,CAAC/xG,4BAAb,EAAhD,CAAnB;EACA,WAAOuxG,UAAP;EACD;;EACDS,EAAAA,uBAAuB,CAACC,oBAAD,EAAuB;EAC5C,SAAKpB,qBAAL,GAA6BoB,oBAA7B;EACD;;EACD5yE,EAAAA,MAAM,CAAChoC,IAAD,EAAO;EACX,UAAM66G,QAAQ,GAAG,KAAKlB,eAAL,CAAqB35G,IAArB,CAAjB;EACA,QAAI,KAAKy5G,YAAT,EAAuB,OAAOoB,QAAP;EACvB,QAAI,CAAC1uH,YAAY,CAAC0uH,QAAD,EAAW5wG,SAAX,CAAjB,EAAwC,OAAO4wG,QAAP;EACxC,QAAIzU,SAAS,CAAC74F,OAAV,CAAkBstG,QAAlB,CAAJ,EAAiC,OAAOA,QAAP;EACjC,WAAO,KAAKhB,oBAAL,CAA0BgB,QAA1B,CAAP;EACD;;EACDjB,EAAAA,YAAY,CAACkB,WAAD,EAAc;EACxB,SAAKrB,YAAL,GAAoBqB,WAApB;EACD;;EACDN,EAAAA,YAAY,CAACp5F,WAAD,EAAck5F,KAAd,EAAqB;EAC/B,QAAIl5F,WAAW,CAAC/e,iBAAZ,OAAoCi4G,KAAxC,EAA+C,OAAO,IAAI3mF,cAAJ,EAAP;EAC/C,UAAMumF,UAAU,GAAG,KAAKC,aAAL,CAAmB/4F,WAAnB,EAAgCk5F,KAAhC,CAAnB;EACA,UAAML,QAAQ,GAAG,IAAItmF,cAAJ,CAAmBumF,UAAnB,CAAjB;EACA,WAAOD,QAAP;EACD;;EAvE2C;;;;;;;ECJ/B,MAAMc,4BAAN,CAAmC;EAChD94H,EAAAA,WAAW,GAAG;EACZ84H,IAAAA,4BAA4B,CAACz1H,YAA7B,CAA0CC,KAA1C,CAAgD,IAAhD,EAAsDC,SAAtD;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKuyC,IAAL,GAAY,IAAZ;EACA,SAAKmjF,MAAL,GAAc,IAAd;EACA,SAAK7pE,kBAAL,GAA0B,IAA1B;EACA,SAAK0qC,IAAL,GAAY,IAAIh7D,WAAJ,EAAZ;EACA,UAAMp0B,GAAG,GAAGjH,SAAS,CAAC,CAAD,CAArB;EACA,SAAKqyC,IAAL,GAAYprC,GAAZ;EACD;;EACD,SAAOqnF,QAAP,CAAgBrnF,GAAhB,EAAqB4kD,iBAArB,EAAwC;EACtC,UAAM2iC,IAAI,GAAG,IAAI+mC,4BAAJ,CAAiCtuH,GAAjC,CAAb;EACAunF,IAAAA,IAAI,CAACpiC,oBAAL,CAA0BP,iBAA1B;EACA,WAAO2iC,IAAI,CAACF,QAAL,EAAP;EACD;;EACDmnC,EAAAA,eAAe,CAACr4H,CAAD,EAAI8f,CAAJ,EAAO;EACpB,QAAI9f,CAAC,GAAG,CAAJ,KAAU8f,CAAd,EACE,OAAO,IAAP;EAEF,SAAKm5E,IAAL,CAAUnyE,EAAV,GAAe,KAAKmuB,IAAL,CAAUj1C,CAAV,CAAf;EACA,SAAKi5F,IAAL,CAAU1tF,EAAV,GAAe,KAAK0pC,IAAL,CAAUn1B,CAAV,CAAf;EACA,QAAI+0D,WAAW,GAAG,CAAC,GAAnB;EACA,QAAIlnB,QAAQ,GAAG3tD,CAAf;;EACA,SAAK,IAAIuiB,CAAC,GAAGviB,CAAC,GAAG,CAAjB,EAAoBuiB,CAAC,GAAGzC,CAAxB,EAA2ByC,CAAC,EAA5B,EAAgC;EAC9B,YAAMxc,QAAQ,GAAG,KAAKkzF,IAAL,CAAUlzF,QAAV,CAAmB,KAAKkvC,IAAL,CAAU1yB,CAAV,CAAnB,CAAjB;;EACA,UAAIxc,QAAQ,GAAG8uE,WAAf,EAA4B;EAC1BA,QAAAA,WAAW,GAAG9uE,QAAd;EACA4nD,QAAAA,QAAQ,GAAGprC,CAAX;EACD;EACF;;EACD,QAAIsyD,WAAW,IAAI,KAAKtmB,kBAAxB,EAA4C;EAC1C,WAAK,IAAIhsC,CAAC,GAAGviB,CAAC,GAAG,CAAjB,EAAoBuiB,CAAC,GAAGzC,CAAxB,EAA2ByC,CAAC,EAA5B,EACE,KAAK61G,MAAL,CAAY71G,CAAZ,IAAiB,KAAjB;EAEH,KAJD,MAIO;EACL,WAAK81G,eAAL,CAAqBr4H,CAArB,EAAwB2tD,QAAxB;EACA,WAAK0qE,eAAL,CAAqB1qE,QAArB,EAA+B7tC,CAA/B;EACD;EACF;;EACDkvC,EAAAA,oBAAoB,CAACP,iBAAD,EAAoB;EACtC,SAAKF,kBAAL,GAA0BE,iBAA1B;EACD;;EACDyiC,EAAAA,QAAQ,GAAG;EACT,SAAKknC,MAAL,GAAc,IAAItuH,KAAJ,CAAU,KAAKmrC,IAAL,CAAUpyC,MAApB,EAA4BkH,IAA5B,CAAiC,IAAjC,CAAd;;EACA,SAAK,IAAI/J,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKi1C,IAAL,CAAUpyC,MAA9B,EAAsC7C,CAAC,EAAvC,EACE,KAAKo4H,MAAL,CAAYp4H,CAAZ,IAAiB,IAAjB;;EAEF,SAAKq4H,eAAL,CAAqB,CAArB,EAAwB,KAAKpjF,IAAL,CAAUpyC,MAAV,GAAmB,CAA3C;EACA,UAAM4oB,SAAS,GAAG,IAAIriB,cAAJ,EAAlB;;EACA,SAAK,IAAIpJ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKi1C,IAAL,CAAUpyC,MAA9B,EAAsC7C,CAAC,EAAvC,EACE,IAAI,KAAKo4H,MAAL,CAAYp4H,CAAZ,CAAJ,EAAoByrB,SAAS,CAACrkB,GAAV,CAAc,IAAI1D,UAAJ,CAAe,KAAKuxC,IAAL,CAAUj1C,CAAV,CAAf,CAAd;;EAEtB,WAAOyrB,SAAS,CAAC/hB,iBAAV,EAAP;EACD;;EAvD+C;;ECGnC,MAAM4uH,wBAAN,CAA+B;EAC5Cj5H,EAAAA,WAAW,GAAG;EACZi5H,IAAAA,wBAAwB,CAAC51H,YAAzB,CAAsCC,KAAtC,CAA4C,IAA5C,EAAkDC,SAAlD;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKgwC,UAAL,GAAkB,IAAlB;EACA,SAAK6b,kBAAL,GAA0B,IAA1B;EACA,SAAKgqE,sBAAL,GAA8B,IAA9B;EACA,UAAMzkF,SAAS,GAAGlxC,SAAS,CAAC,CAAD,CAA3B;EACA,SAAK8vC,UAAL,GAAkBoB,SAAlB;EACD;;EACD,SAAOo9C,QAAP,CAAgB9zE,IAAhB,EAAsBqxC,iBAAtB,EAAyC;EACvC,UAAM+pE,GAAG,GAAG,IAAIF,wBAAJ,CAA6Bl7G,IAA7B,CAAZ;EACAo7G,IAAAA,GAAG,CAACxpE,oBAAJ,CAAyBP,iBAAzB;EACA,WAAO+pE,GAAG,CAACvpE,iBAAJ,EAAP;EACD;;EACDwpE,EAAAA,cAAc,CAACC,qBAAD,EAAwB;EACpC,SAAKH,sBAAL,GAA8BG,qBAA9B;EACD;;EACDzpE,EAAAA,iBAAiB,GAAG;EAClB,QAAI,KAAKvc,UAAL,CAAgBprC,OAAhB,EAAJ,EAA+B,OAAO,KAAKorC,UAAL,CAAgBntC,IAAhB,EAAP;EAC/B,WAAO,IAAIozH,aAAJ,CAAkB,KAAKJ,sBAAvB,EAA+C,KAAKhqE,kBAApD,EAAwEzhB,SAAxE,CAAkF,KAAK4F,UAAvF,CAAP;EACD;;EACDsc,EAAAA,oBAAoB,CAACP,iBAAD,EAAoB;EACtC,QAAIA,iBAAiB,GAAG,GAAxB,EAA6B,MAAM,IAAI9uD,wBAAJ,CAA6B,gCAA7B,CAAN;EAC7B,SAAK4uD,kBAAL,GAA0BE,iBAA1B;EACD;;EA1B2C;;EA4B9C,MAAMkqE,aAAN,SAA4BlmF,mBAA5B,CAAgD;EAC9CpzC,EAAAA,WAAW,GAAG;EACZ;EACAs5H,IAAAA,aAAa,CAACj2H,YAAd,CAA2BC,KAA3B,CAAiC,IAAjC,EAAuCC,SAAvC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK61H,sBAAL,GAA8B,IAA9B;EACA,SAAKhqE,kBAAL,GAA0B,IAA1B;EACA,UAAMmqE,qBAAqB,GAAG91H,SAAS,CAAC,CAAD,CAAvC;EAAA,UAA4C6rD,iBAAiB,GAAG7rD,SAAS,CAAC,CAAD,CAAzE;EACA,SAAK21H,sBAAL,GAA8BG,qBAA9B;EACA,SAAKnqE,kBAAL,GAA0BE,iBAA1B;EACD;;EACDvb,EAAAA,gBAAgB,CAAC91B,IAAD,EAAO41B,MAAP,EAAe;EAC7B,QAAI51B,IAAI,CAAC9V,OAAL,EAAJ,EAAoB,OAAO,IAAP;EACpB,UAAMsxH,OAAO,GAAG,MAAM1lF,gBAAN,CAAuBpwC,IAAvB,CAA4B,IAA5B,EAAkCsa,IAAlC,EAAwC41B,MAAxC,CAAhB;EACA,QAAIA,MAAM,YAAY7kB,YAAtB,EACE,OAAOyqG,OAAP;EAEF,WAAO,KAAKxpE,eAAL,CAAqBwpE,OAArB,CAAP;EACD;;EACDxpE,EAAAA,eAAe,CAACypE,WAAD,EAAc;EAC3B,QAAI,KAAKN,sBAAT,EAAiC,OAAOM,WAAW,CAAC53H,MAAZ,CAAmB,GAAnB,CAAP;EACjC,WAAO43H,WAAP;EACD;;EACD5lF,EAAAA,oBAAoB,CAAC3D,MAAD,EAAS0D,MAAT,EAAiB;EACnC,UAAMuR,QAAQ,GAAGjV,MAAM,CAAC5lC,iBAAP,EAAjB;EACA,QAAI2lD,MAAM,GAAG,IAAb;EACA,QAAI9K,QAAQ,CAAC1hD,MAAT,KAAoB,CAAxB,EACEwsD,MAAM,GAAG,IAAIvlD,KAAJ,CAAU,CAAV,EAAaC,IAAb,CAAkB,IAAlB,CAAT,CADF,KAGEslD,MAAM,GAAG8oE,4BAA4B,CAACjnC,QAA7B,CAAsC3sC,QAAtC,EAAgD,KAAKgK,kBAArD,CAAT;EAEF,WAAO,KAAK7wC,QAAL,CAAcqI,4BAAd,GAA6C9I,MAA7C,CAAoDoyC,MAApD,CAAP;EACD;;EACDzb,EAAAA,qBAAqB,CAACx2B,IAAD,EAAO41B,MAAP,EAAe;EAClC,UAAM4lF,OAAO,GAAG,MAAMhlF,qBAAN,CAA4B9wC,IAA5B,CAAiC,IAAjC,EAAuCsa,IAAvC,EAA6C41B,MAA7C,CAAhB;EACA,WAAO,KAAKoc,eAAL,CAAqBwpE,OAArB,CAAP;EACD;;EACDxlF,EAAAA,mBAAmB,CAACh2B,IAAD,EAAO41B,MAAP,EAAe;EAChC,UAAM8lF,qBAAqB,GAAG9lF,MAAM,YAAY1rB,OAAhD;EACA,UAAMyxG,UAAU,GAAG,MAAM3lF,mBAAN,CAA0BtwC,IAA1B,CAA+B,IAA/B,EAAqCsa,IAArC,EAA2C41B,MAA3C,CAAnB;EACA,QAAI8lF,qBAAqB,IAAI,EAAEC,UAAU,YAAYnuG,UAAxB,CAA7B,EAAkE,OAAO,IAAP;EAElE,WAAOmuG,UAAP;EACD;;EA5C6C;;EA8ChDT,wBAAwB,CAACK,aAAzB,GAAyCA,aAAzC;;EC/Ee,MAAMK,iBAAN,SAAgC/6F,WAAhC,CAA4C;EACzD5+B,EAAAA,WAAW,GAAG;EACZ;EACA25H,IAAAA,iBAAiB,CAACt2H,YAAlB,CAA+BC,KAA/B,CAAqC,IAArC,EAA2CC,SAA3C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK09C,OAAL,GAAe,IAAf;EACA,SAAKb,MAAL,GAAc,IAAd;;EACA,QAAI38C,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMikB,EAAE,GAAGlkB,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyB2I,EAAE,GAAG3I,SAAS,CAAC,CAAD,CAAvC;EACAo2H,MAAAA,iBAAiB,CAACt2H,YAAlB,CAA+BI,IAA/B,CAAoC,IAApC,EAA0CgkB,EAA1C,EAA8Cvb,EAA9C,EAAkD,IAAlD,EAAwD,CAAC,CAAzD;EACD,KAHD,MAGO,IAAI3I,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMikB,EAAE,GAAGlkB,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyB2I,EAAE,GAAG3I,SAAS,CAAC,CAAD,CAAvC;EAAA,YAA4CowC,MAAM,GAAGpwC,SAAS,CAAC,CAAD,CAA9D;EAAA,YAAmE0F,KAAK,GAAG1F,SAAS,CAAC,CAAD,CAApF;EACAq7B,MAAAA,WAAW,CAACv7B,YAAZ,CAAyBI,IAAzB,CAA8B,IAA9B,EAAoCgkB,EAApC,EAAwCvb,EAAxC;EACA,WAAK60C,OAAL,GAAepN,MAAf;EACA,WAAKuM,MAAL,GAAcj3C,KAAd;EACD;EACF;;EACDk8E,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAKjlC,MAAZ;EACD;;EACDowD,EAAAA,SAAS,GAAG;EACV,WAAO,KAAKvvD,OAAZ;EACD;;EAvBwD;;ECC5C,MAAM64E,gBAAN,CAAuB;EACpC55H,EAAAA,WAAW,GAAG;EACZ45H,IAAAA,gBAAgB,CAACv2H,YAAjB,CAA8BC,KAA9B,CAAoC,IAApC,EAA0CC,SAA1C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKw2H,WAAL,GAAmB,IAAnB;EACA,SAAKC,KAAL,GAAa,IAAb;EACA,SAAKC,WAAL,GAAmB,IAAIpxH,SAAJ,EAAnB;EACA,SAAKqxH,YAAL,GAAoB,IAApB;;EACA,QAAIz2H,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMy2H,UAAU,GAAG12H,SAAS,CAAC,CAAD,CAA5B;EACAq2H,MAAAA,gBAAgB,CAACv2H,YAAjB,CAA8BI,IAA9B,CAAmC,IAAnC,EAAyCw2H,UAAzC,EAAqD,CAArD;EACD,KAHD,MAGO,IAAI12H,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMy2H,UAAU,GAAG12H,SAAS,CAAC,CAAD,CAA5B;EAAA,YAAiC22H,WAAW,GAAG32H,SAAS,CAAC,CAAD,CAAxD;EACA,WAAKs2H,WAAL,GAAmBI,UAAnB;EACA,WAAKD,YAAL,GAAoBE,WAApB;EACA,WAAKnuH,IAAL;EACD;EACF;;EACD,SAAO+4C,kBAAP,CAA0BivE,IAA1B,EAAgC;EAC9B,UAAMvpH,GAAG,GAAG,IAAIC,KAAJ,CAAUspH,IAAI,CAAC5rH,IAAL,KAAc,CAAxB,EAA2BuC,IAA3B,CAAgC,IAAhC,CAAZ;EACA,QAAIs0B,GAAG,GAAG,IAAV;;EACA,SAAK,IAAIr+B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGozH,IAAI,CAAC5rH,IAAL,EAApB,EAAiCxH,CAAC,EAAlC,EAAsC;EACpCq+B,MAAAA,GAAG,GAAG+0F,IAAI,CAACvrH,GAAL,CAAS7H,CAAT,CAAN;EACA6J,MAAAA,GAAG,CAAC7J,CAAD,CAAH,GAASq+B,GAAG,CAACvX,EAAb;EACD;;EACDjd,IAAAA,GAAG,CAACA,GAAG,CAAChH,MAAJ,GAAa,CAAd,CAAH,GAAsBw7B,GAAG,CAAC9yB,EAA1B;EACA,WAAO1B,GAAP;EACD;;EACD2vH,EAAAA,WAAW,CAACn7F,GAAD,EAAM;EACf,SAAK+6F,WAAL,CAAiBhyH,GAAjB,CAAqBi3B,GAArB;EACD;;EACDo7F,EAAAA,YAAY,GAAG;EACb,WAAO,KAAKP,WAAL,CAAiBz7G,UAAjB,GAA8BgI,gBAA9B,CAA+CwzG,gBAAgB,CAAC90E,kBAAjB,CAAoC,KAAKi1E,WAAzC,CAA/C,CAAP;EACD;;EACDM,EAAAA,aAAa,GAAG;EACd,UAAMC,cAAc,GAAG,KAAKP,WAAL,CAAiB5xH,IAAjB,EAAvB;;EACA,WAAOmyH,cAAc,KAAK,CAAnB,GAAuB,CAAvB,GAA2BA,cAAc,GAAG,CAAnD;EACD;;EACDhqB,EAAAA,SAAS,GAAG;EACV,WAAO,KAAKupB,WAAZ;EACD;;EACDU,EAAAA,UAAU,CAAC55H,CAAD,EAAI;EACZ,WAAO,KAAKm5H,KAAL,CAAWn5H,CAAX,CAAP;EACD;;EACD65H,EAAAA,oBAAoB,GAAG;EACrB,WAAO,KAAKX,WAAL,CAAiB9zG,cAAjB,EAAP;EACD;;EACD00G,EAAAA,cAAc,GAAG;EACf,WAAO,KAAKT,YAAZ;EACD;;EACDU,EAAAA,YAAY,GAAG;EACb,WAAO,KAAKb,WAAL,CAAiBz7G,UAAjB,GAA8BkK,gBAA9B,CAA+CsxG,gBAAgB,CAAC90E,kBAAjB,CAAoC,KAAKi1E,WAAzC,CAA/C,CAAP;EACD;;EACDY,EAAAA,WAAW,GAAG;EACZ,WAAO,KAAKb,KAAZ;EACD;;EACD/tH,EAAAA,IAAI,GAAG;EACL,UAAMvB,GAAG,GAAG,KAAKqvH,WAAL,CAAiB9zG,cAAjB,EAAZ;;EACA,SAAK+zG,KAAL,GAAa,IAAIrvH,KAAJ,CAAUD,GAAG,CAAChH,MAAJ,GAAa,CAAvB,EAA0BkH,IAA1B,CAA+B,IAA/B,CAAb;;EACA,SAAK,IAAI/J,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6J,GAAG,CAAChH,MAAJ,GAAa,CAAjC,EAAoC7C,CAAC,EAArC,EAAyC;EACvC,YAAMq+B,GAAG,GAAG,IAAI26F,iBAAJ,CAAsBnvH,GAAG,CAAC7J,CAAD,CAAzB,EAA8B6J,GAAG,CAAC7J,CAAC,GAAG,CAAL,CAAjC,EAA0C,KAAKk5H,WAA/C,EAA4Dl5H,CAA5D,CAAZ;EACA,WAAKm5H,KAAL,CAAWn5H,CAAX,IAAgBq+B,GAAhB;EACD;EACF;;EACD47F,EAAAA,oBAAoB,GAAG;EACrB,WAAOhB,gBAAgB,CAAC90E,kBAAjB,CAAoC,KAAKi1E,WAAzC,CAAP;EACD;;EAnEmC;;ECIvB,MAAMc,gBAAN,CAAuB;EACpC76H,EAAAA,WAAW,GAAG;EACZ66H,IAAAA,gBAAgB,CAACx3H,YAAjB,CAA8BC,KAA9B,CAAoC,IAApC,EAA0CC,SAA1C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK68C,MAAL,GAAc,IAAI0zB,QAAJ,EAAd;EACD;;EACDvrE,EAAAA,MAAM,CAAC22B,GAAD,EAAM;EACV,SAAKkhB,MAAL,CAAY73C,MAAZ,CAAmB,IAAIqD,QAAJ,CAAaszB,GAAG,CAACvX,EAAjB,EAAqBuX,GAAG,CAAC9yB,EAAzB,CAAnB,EAAiD8yB,GAAjD;EACD;;EACDj3B,EAAAA,GAAG,GAAG;EACJ,QAAIxE,SAAS,CAAC,CAAD,CAAT,YAAwBq2H,gBAA5B,EAA8C;EAC5C,YAAMp8G,IAAI,GAAGja,SAAS,CAAC,CAAD,CAAtB;EACA,YAAMwwH,IAAI,GAAGv2G,IAAI,CAACm9G,WAAL,EAAb;;EACA,WAAK,IAAIh6H,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGozH,IAAI,CAACvwH,MAAzB,EAAiC7C,CAAC,EAAlC,EAAsC;EACpC,cAAMq+B,GAAG,GAAG+0F,IAAI,CAACpzH,CAAD,CAAhB;EACA,aAAKoH,GAAL,CAASi3B,GAAT;EACD;EACF,KAPD,MAOO,IAAIz7B,SAAS,CAAC,CAAD,CAAT,YAAwBq7B,WAA5B,EAAyC;EAC9C,YAAMI,GAAG,GAAGz7B,SAAS,CAAC,CAAD,CAArB;;EACA,WAAK28C,MAAL,CAAYrB,MAAZ,CAAmB,IAAInzC,QAAJ,CAAaszB,GAAG,CAACvX,EAAjB,EAAqBuX,GAAG,CAAC9yB,EAAzB,CAAnB,EAAiD8yB,GAAjD;EACD;EACF;;EACDif,EAAAA,KAAK,CAAC68E,QAAD,EAAW;EACd,UAAM7uH,GAAG,GAAG,IAAIP,QAAJ,CAAaovH,QAAQ,CAACrzG,EAAtB,EAA0BqzG,QAAQ,CAAC5uH,EAAnC,CAAZ;EACA,UAAMgyC,OAAO,GAAG,IAAI68E,kBAAJ,CAAuBD,QAAvB,CAAhB;;EACA,SAAK56E,MAAL,CAAYjC,KAAZ,CAAkBhyC,GAAlB,EAAuBiyC,OAAvB;;EACA,UAAM88E,UAAU,GAAG98E,OAAO,CAACiB,QAAR,EAAnB;EACA,WAAO67E,UAAP;EACD;;EA7BmC;;EA+BtC,MAAMD,kBAAN,CAAyB;EACvB/6H,EAAAA,WAAW,GAAG;EACZ+6H,IAAAA,kBAAkB,CAAC13H,YAAnB,CAAgCC,KAAhC,CAAsC,IAAtC,EAA4CC,SAA5C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK43H,SAAL,GAAiB,IAAjB;EACA,SAAK/7E,MAAL,GAAc,IAAIv2C,SAAJ,EAAd;EACA,UAAMmyH,QAAQ,GAAGv3H,SAAS,CAAC,CAAD,CAA1B;EACA,SAAK03H,SAAL,GAAiBH,QAAjB;EACD;;EACD99E,EAAAA,SAAS,CAACC,IAAD,EAAO;EACd,UAAMje,GAAG,GAAGie,IAAZ;EACA,QAAIvxC,QAAQ,CAACY,UAAT,CAAoB0yB,GAAG,CAACvX,EAAxB,EAA4BuX,GAAG,CAAC9yB,EAAhC,EAAoC,KAAK+uH,SAAL,CAAexzG,EAAnD,EAAuD,KAAKwzG,SAAL,CAAe/uH,EAAtE,CAAJ,EAA+E,KAAKgzC,MAAL,CAAYn3C,GAAZ,CAAgBk1C,IAAhB;EAChF;;EACDkC,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAKD,MAAZ;EACD;;EACD,MAAIt4C,WAAJ,GAAkB;EAChB,WAAO,CAACm2C,WAAD,CAAP;EACD;;EAnBsB;;EClCV,MAAMm+E,0BAAN,CAAiC;EAC9Cl7H,EAAAA,WAAW,GAAG;EACZk7H,IAAAA,0BAA0B,CAAC73H,YAA3B,CAAwCC,KAAxC,CAA8C,IAA9C,EAAoDC,SAApD;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK40D,GAAL,GAAW,IAAI76B,qBAAJ,EAAX;EACA,SAAK+9F,WAAL,GAAmB,IAAIN,gBAAJ,EAAnB;EACA,SAAKO,YAAL,GAAoB,IAAIP,gBAAJ,EAApB;EACA,SAAKpsB,KAAL,GAAa,IAAb;EACA,SAAK4sB,QAAL,GAAgB,IAAhB;EACA,SAAKnsE,kBAAL,GAA0B,GAA1B;EACA,UAAMosE,UAAU,GAAG/3H,SAAS,CAAC,CAAD,CAA5B;EAAA,UAAiCg4H,WAAW,GAAGh4H,SAAS,CAAC,CAAD,CAAxD;EACA,SAAK43H,WAAL,GAAmBG,UAAnB;EACA,SAAKF,YAAL,GAAoBG,WAApB;EACD;;EACD,SAAOC,eAAP,CAAuBh+G,IAAvB,EAA6Bi+G,YAA7B,EAA2Cz8F,GAA3C,EAAgD;EAC9C,QAAIA,GAAG,CAACsxE,SAAJ,OAAoB9yF,IAAI,CAAC8yF,SAAL,EAAxB,EAA0C,OAAO,KAAP;EAC1C,UAAM3L,QAAQ,GAAG3lE,GAAG,CAACmmD,QAAJ,EAAjB;EACA,QAAIwf,QAAQ,IAAI82B,YAAY,CAAC,CAAD,CAAxB,IAA+B92B,QAAQ,GAAG82B,YAAY,CAAC,CAAD,CAA1D,EAA+D,OAAO,IAAP;EAC/D,WAAO,KAAP;EACD;;EACDC,EAAAA,OAAO,CAAC1wH,KAAD,EAAQC,GAAR,EAAa;EAClB,UAAMwc,EAAE,GAAG,KAAK4zG,QAAL,CAAcrwH,KAAd,CAAX;EACA,UAAMkB,EAAE,GAAG,KAAKmvH,QAAL,CAAcpwH,GAAd,CAAX;EACA,UAAM0wH,MAAM,GAAG,IAAI/8F,WAAJ,CAAgBnX,EAAhB,EAAoBvb,EAApB,CAAf;EACA,SAAK7D,MAAL,CAAY,KAAKomG,KAAjB,EAAwBzjG,KAAxB,EAA+BC,GAA/B;;EACA,SAAKmwH,YAAL,CAAkBrzH,GAAlB,CAAsB4zH,MAAtB;;EACA,WAAOA,MAAP;EACD;;EACDC,EAAAA,kBAAkB,CAAC3B,UAAD,EAAawB,YAAb,EAA2BI,YAA3B,EAAyC;EACzD,QAAI,KAAKC,wBAAL,CAA8BD,YAA9B,CAAJ,EAAiD,OAAO,IAAP;EACjD,QAAI,KAAKE,uBAAL,CAA6B9B,UAA7B,EAAyCwB,YAAzC,EAAuDI,YAAvD,CAAJ,EAA0E,OAAO,IAAP;EAC1E,WAAO,KAAP;EACD;;EACDlsE,EAAAA,oBAAoB,CAACP,iBAAD,EAAoB;EACtC,SAAKF,kBAAL,GAA0BE,iBAA1B;EACD;;EACD4pE,EAAAA,eAAe,CAACr4H,CAAD,EAAI8f,CAAJ,EAAOkoD,KAAP,EAAc;EAC3BA,IAAAA,KAAK,IAAI,CAAT;EACA,UAAM8yD,YAAY,GAAG,IAAIhxH,KAAJ,CAAU,CAAV,EAAaC,IAAb,CAAkB,IAAlB,CAArB;;EACA,QAAI/J,CAAC,GAAG,CAAJ,KAAU8f,CAAd,EAAiB;EACf,YAAMk7G,MAAM,GAAG,KAAKltB,KAAL,CAAW8rB,UAAX,CAAsB55H,CAAtB,CAAf;;EACA,WAAK8tG,KAAL,CAAW0rB,WAAX,CAAuBwB,MAAvB;;EACA,aAAO,IAAP;EACD;;EACD,QAAIK,iBAAiB,GAAG,IAAxB;;EACA,QAAI,KAAKvtB,KAAL,CAAW4rB,aAAX,KAA6B,KAAK5rB,KAAL,CAAWgsB,cAAX,EAAjC,EAA8D;EAC5D,YAAMwB,aAAa,GAAGtzD,KAAK,GAAG,CAA9B;EACA,UAAIszD,aAAa,GAAG,KAAKxtB,KAAL,CAAWgsB,cAAX,EAApB,EAAiDuB,iBAAiB,GAAG,KAApB;EAClD;;EACD,UAAMt1H,QAAQ,GAAG,IAAI+D,KAAJ,CAAU,CAAV,EAAaC,IAAb,CAAkB,IAAlB,CAAjB;EACA,UAAMwxH,eAAe,GAAG,KAAKC,iBAAL,CAAuB,KAAKd,QAA5B,EAAsC16H,CAAtC,EAAyC8f,CAAzC,EAA4C/Z,QAA5C,CAAxB;EACA,QAAIA,QAAQ,CAAC,CAAD,CAAR,GAAc,KAAKwoD,kBAAvB,EAA2C8sE,iBAAiB,GAAG,KAApB;EAC3C,UAAMH,YAAY,GAAG,IAAIj9F,WAAJ,EAArB;EACAi9F,IAAAA,YAAY,CAACp0G,EAAb,GAAkB,KAAK4zG,QAAL,CAAc16H,CAAd,CAAlB;EACAk7H,IAAAA,YAAY,CAAC3vH,EAAb,GAAkB,KAAKmvH,QAAL,CAAc56G,CAAd,CAAlB;EACAg7G,IAAAA,YAAY,CAAC,CAAD,CAAZ,GAAkB96H,CAAlB;EACA86H,IAAAA,YAAY,CAAC,CAAD,CAAZ,GAAkBh7G,CAAlB;EACA,QAAI,KAAKm7G,kBAAL,CAAwB,KAAKntB,KAA7B,EAAoCgtB,YAApC,EAAkDI,YAAlD,CAAJ,EAAqEG,iBAAiB,GAAG,KAApB;;EACrE,QAAIA,iBAAJ,EAAuB;EACrB,YAAML,MAAM,GAAG,KAAKD,OAAL,CAAa/6H,CAAb,EAAgB8f,CAAhB,CAAf;;EACA,WAAKguF,KAAL,CAAW0rB,WAAX,CAAuBwB,MAAvB;;EACA,aAAO,IAAP;EACD;;EACD,SAAK3C,eAAL,CAAqBr4H,CAArB,EAAwBu7H,eAAxB,EAAyCvzD,KAAzC;EACA,SAAKqwD,eAAL,CAAqBkD,eAArB,EAAsCz7G,CAAtC,EAAyCkoD,KAAzC;EACD;;EACDmzD,EAAAA,wBAAwB,CAACD,YAAD,EAAe;EACrC,UAAMO,SAAS,GAAG,KAAKhB,YAAL,CAAkBn9E,KAAlB,CAAwB49E,YAAxB,CAAlB;;EACA,SAAK,IAAIl7H,CAAC,GAAGy7H,SAAS,CAACl0H,QAAV,EAAb,EAAmCvH,CAAC,CAACmJ,OAAF,EAAnC,GAAkD;EAChD,YAAMgxH,QAAQ,GAAGn6H,CAAC,CAACkJ,IAAF,EAAjB;EACA,UAAI,KAAK62F,uBAAL,CAA6Bo6B,QAA7B,EAAuCe,YAAvC,CAAJ,EACE,OAAO,IAAP;EAEH;;EACD,WAAO,KAAP;EACD;;EACDM,EAAAA,iBAAiB,CAAC3xH,GAAD,EAAM7J,CAAN,EAAS8f,CAAT,EAAY+0D,WAAZ,EAAyB;EACxC,UAAMx2C,GAAG,GAAG,IAAIJ,WAAJ,EAAZ;EACAI,IAAAA,GAAG,CAACvX,EAAJ,GAASjd,GAAG,CAAC7J,CAAD,CAAZ;EACAq+B,IAAAA,GAAG,CAAC9yB,EAAJ,GAAS1B,GAAG,CAACiW,CAAD,CAAZ;EACA,QAAI47G,OAAO,GAAG,CAAC,GAAf;EACA,QAAI/tE,QAAQ,GAAG3tD,CAAf;;EACA,SAAK,IAAIuiB,CAAC,GAAGviB,CAAC,GAAG,CAAjB,EAAoBuiB,CAAC,GAAGzC,CAAxB,EAA2ByC,CAAC,EAA5B,EAAgC;EAC9B,YAAMo5G,KAAK,GAAG9xH,GAAG,CAAC0Y,CAAD,CAAjB;EACA,YAAMxc,QAAQ,GAAGs4B,GAAG,CAACt4B,QAAJ,CAAa41H,KAAb,CAAjB;;EACA,UAAI51H,QAAQ,GAAG21H,OAAf,EAAwB;EACtBA,QAAAA,OAAO,GAAG31H,QAAV;EACA4nD,QAAAA,QAAQ,GAAGprC,CAAX;EACD;EACF;;EACDsyD,IAAAA,WAAW,CAAC,CAAD,CAAX,GAAiB6mD,OAAjB;EACA,WAAO/tE,QAAP;EACD;;EACDujC,EAAAA,QAAQ,CAACr0E,IAAD,EAAO;EACb,SAAKixF,KAAL,GAAajxF,IAAb;EACA,SAAK69G,QAAL,GAAgB79G,IAAI,CAACg9G,oBAAL,EAAhB;EACA,SAAKxB,eAAL,CAAqB,CAArB,EAAwB,KAAKqC,QAAL,CAAc73H,MAAd,GAAuB,CAA/C,EAAkD,CAAlD;EACD;;EACD6E,EAAAA,MAAM,CAACmV,IAAD,EAAOxS,KAAP,EAAcC,GAAd,EAAmB;EACvB,SAAK,IAAItK,CAAC,GAAGqK,KAAb,EAAoBrK,CAAC,GAAGsK,GAAxB,EAA6BtK,CAAC,EAA9B,EAAkC;EAChC,YAAMq+B,GAAG,GAAGxhB,IAAI,CAAC+8G,UAAL,CAAgB55H,CAAhB,CAAZ;;EACA,WAAKw6H,WAAL,CAAiB9yH,MAAjB,CAAwB22B,GAAxB;EACD;EACF;;EACD0hE,EAAAA,uBAAuB,CAAClG,IAAD,EAAOC,IAAP,EAAa;EAClC,SAAKxiC,GAAL,CAASp8B,mBAAT,CAA6B2+D,IAAI,CAAC/yE,EAAlC,EAAsC+yE,IAAI,CAACtuF,EAA3C,EAA+CuuF,IAAI,CAAChzE,EAApD,EAAwDgzE,IAAI,CAACvuF,EAA7D;;EACA,WAAO,KAAK+rD,GAAL,CAASz7B,sBAAT,EAAP;EACD;;EACDu/F,EAAAA,uBAAuB,CAAC9B,UAAD,EAAawB,YAAb,EAA2BI,YAA3B,EAAyC;EAC9D,UAAMO,SAAS,GAAG,KAAKjB,WAAL,CAAiBl9E,KAAjB,CAAuB49E,YAAvB,CAAlB;;EACA,SAAK,IAAIl7H,CAAC,GAAGy7H,SAAS,CAACl0H,QAAV,EAAb,EAAmCvH,CAAC,CAACmJ,OAAF,EAAnC,GAAkD;EAChD,YAAMgxH,QAAQ,GAAGn6H,CAAC,CAACkJ,IAAF,EAAjB;;EACA,UAAI,KAAK62F,uBAAL,CAA6Bo6B,QAA7B,EAAuCe,YAAvC,CAAJ,EAA0D;EACxD,YAAIX,0BAA0B,CAACM,eAA3B,CAA2CvB,UAA3C,EAAuDwB,YAAvD,EAAqEX,QAArE,CAAJ,EAAoF;EACpF,eAAO,IAAP;EACD;EACF;;EACD,WAAO,KAAP;EACD;;EAvH6C;;ECDjC,MAAMyB,qBAAN,CAA4B;EACzCv8H,EAAAA,WAAW,GAAG;EACZu8H,IAAAA,qBAAqB,CAACl5H,YAAtB,CAAmCC,KAAnC,CAAyC,IAAzC,EAA+CC,SAA/C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK83H,WAAL,GAAmB,IAAIN,gBAAJ,EAAnB;EACA,SAAKO,YAAL,GAAoB,IAAIP,gBAAJ,EAApB;EACA,SAAK3rE,kBAAL,GAA0B,GAA1B;EACD;;EACDS,EAAAA,oBAAoB,CAACP,iBAAD,EAAoB;EACtC,SAAKF,kBAAL,GAA0BE,iBAA1B;EACD;;EACDyiC,EAAAA,QAAQ,CAAC2qC,WAAD,EAAc;EACpB,SAAK,IAAI77H,CAAC,GAAG67H,WAAW,CAACt0H,QAAZ,EAAb,EAAqCvH,CAAC,CAACmJ,OAAF,EAArC,GACE,KAAKqxH,WAAL,CAAiBpzH,GAAjB,CAAqBpH,CAAC,CAACkJ,IAAF,EAArB;;EAEF,SAAK,IAAIlJ,CAAC,GAAG67H,WAAW,CAACt0H,QAAZ,EAAb,EAAqCvH,CAAC,CAACmJ,OAAF,EAArC,GAAoD;EAClD,YAAM2yH,IAAI,GAAG,IAAIvB,0BAAJ,CAA+B,KAAKC,WAApC,EAAiD,KAAKC,YAAtD,CAAb;EACAqB,MAAAA,IAAI,CAAC9sE,oBAAL,CAA0B,KAAKT,kBAA/B;EACAutE,MAAAA,IAAI,CAAC5qC,QAAL,CAAclxF,CAAC,CAACkJ,IAAF,EAAd;EACD;EACF;;EArBwC;;ECK5B,MAAM6yH,4BAAN,CAAmC;EAChD18H,EAAAA,WAAW,GAAG;EACZ08H,IAAAA,4BAA4B,CAACr5H,YAA7B,CAA0CC,KAA1C,CAAgD,IAAhD,EAAsDC,SAAtD;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKgwC,UAAL,GAAkB,IAAlB;EACA,SAAKspF,eAAL,GAAuB,IAAIJ,qBAAJ,EAAvB;EACA,SAAKK,cAAL,GAAsB,IAAtB;EACA,UAAMnoF,SAAS,GAAGlxC,SAAS,CAAC,CAAD,CAA3B;EACA,SAAK8vC,UAAL,GAAkBoB,SAAlB;EACD;;EACD,SAAOo9C,QAAP,CAAgB9zE,IAAhB,EAAsBqxC,iBAAtB,EAAyC;EACvC,UAAM+pE,GAAG,GAAG,IAAIuD,4BAAJ,CAAiC3+G,IAAjC,CAAZ;EACAo7G,IAAAA,GAAG,CAACxpE,oBAAJ,CAAyBP,iBAAzB;EACA,WAAO+pE,GAAG,CAACvpE,iBAAJ,EAAP;EACD;;EACDA,EAAAA,iBAAiB,GAAG;EAClB,QAAI,KAAKvc,UAAL,CAAgBprC,OAAhB,EAAJ,EAA+B,OAAO,KAAKorC,UAAL,CAAgBntC,IAAhB,EAAP;EAC/B,SAAK02H,cAAL,GAAsB,IAAIjtG,OAAJ,EAAtB;;EACA,SAAK0jB,UAAL,CAAgB/vC,KAAhB,CAAsB,IAAIu5H,0BAAJ,CAA+B,IAA/B,CAAtB;;EACA,SAAKF,eAAL,CAAqB9qC,QAArB,CAA8B,KAAK+qC,cAAL,CAAoBlzH,MAApB,EAA9B;;EACA,UAAM7I,MAAM,GAAG,IAAIi8H,qBAAJ,CAA0B,KAAKF,cAA/B,EAA+CnvF,SAA/C,CAAyD,KAAK4F,UAA9D,CAAf;EACA,WAAOxyC,MAAP;EACD;;EACD8uD,EAAAA,oBAAoB,CAACP,iBAAD,EAAoB;EACtC,QAAIA,iBAAiB,GAAG,GAAxB,EAA6B,MAAM,IAAI9uD,wBAAJ,CAA6B,gCAA7B,CAAN;;EAC7B,SAAKq8H,eAAL,CAAqBhtE,oBAArB,CAA0CP,iBAA1C;EACD;;EA3B+C;;EA6BlD,MAAM0tE,qBAAN,SAAoC1pF,mBAApC,CAAwD;EACtDpzC,EAAAA,WAAW,GAAG;EACZ;EACA88H,IAAAA,qBAAqB,CAACz5H,YAAtB,CAAmCC,KAAnC,CAAyC,IAAzC,EAA+CC,SAA/C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKu5H,cAAL,GAAsB,IAAtB;EACA,UAAMG,aAAa,GAAGx5H,SAAS,CAAC,CAAD,CAA/B;EACA,SAAKq5H,cAAL,GAAsBG,aAAtB;EACD;;EACDnpF,EAAAA,oBAAoB,CAAC3D,MAAD,EAAS0D,MAAT,EAAiB;EACnC,QAAI1D,MAAM,CAAC9nC,IAAP,OAAkB,CAAtB,EAAyB,OAAO,IAAP;;EACzB,QAAIwrC,MAAM,YAAYhuB,UAAtB,EAAkC;EAChC,YAAMq3G,UAAU,GAAG,KAAKJ,cAAL,CAAoBp0H,GAApB,CAAwBmrC,MAAxB,CAAnB;;EACA,aAAO,KAAKK,wBAAL,CAA8BgpF,UAAU,CAACpC,oBAAX,EAA9B,CAAP;EACD;;EACD,WAAO,MAAMhnF,oBAAN,CAA2BnwC,IAA3B,CAAgC,IAAhC,EAAsCwsC,MAAtC,EAA8C0D,MAA9C,CAAP;EACD;;EAjBqD;;EAmBxD,MAAMkpF,0BAAN,CAAiC;EAC/B78H,EAAAA,WAAW,GAAG;EACZ68H,IAAAA,0BAA0B,CAACx5H,YAA3B,CAAwCC,KAAxC,CAA8C,IAA9C,EAAoDC,SAApD;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK45H,GAAL,GAAW,IAAX;EACA,UAAMA,GAAG,GAAG15H,SAAS,CAAC,CAAD,CAArB;EACA,SAAK05H,GAAL,GAAWA,GAAX;EACD;;EACD3xH,EAAAA,MAAM,CAACyS,IAAD,EAAO;EACX,QAAIA,IAAI,YAAY4H,UAApB,EAAgC;EAC9B,YAAMnI,IAAI,GAAGO,IAAb;EACA,UAAIP,IAAI,CAACvV,OAAL,EAAJ,EAAoB,OAAO,IAAP;EACpB,YAAMi1H,OAAO,GAAG1/G,IAAI,CAAC8G,QAAL,KAAkB,CAAlB,GAAsB,CAAtC;EACA,YAAM04G,UAAU,GAAG,IAAIpD,gBAAJ,CAAqBp8G,IAArB,EAA2B0/G,OAA3B,CAAnB;;EACA,WAAKD,GAAL,CAASL,cAAT,CAAwBxtG,GAAxB,CAA4B5R,IAA5B,EAAkCw/G,UAAlC;EACD;EACF;;EACD,MAAIp2H,WAAJ,GAAkB;EAChB,WAAO,CAACkX,uBAAD,CAAP;EACD;;EApB8B;;EAsBjC4+G,4BAA4B,CAACI,qBAA7B,GAAqDA,qBAArD;EACAJ,4BAA4B,CAACG,0BAA7B,GAA0DA,0BAA1D;;EC1Ee,MAAMM,gBAAN,CAAuB;EACpCn9H,EAAAA,WAAW,GAAG;EACZm9H,IAAAA,gBAAgB,CAAC95H,YAAjB,CAA8BC,KAA9B,CAAoC,IAApC,EAA0CC,SAA1C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKuyC,IAAL,GAAY,IAAZ;EACA,SAAKw4B,UAAL,GAAkB,IAAlB;EACA,UAAM5jE,GAAG,GAAGjH,SAAS,CAAC,CAAD,CAArB;EAAA,UAA0B6rD,iBAAiB,GAAG7rD,SAAS,CAAC,CAAD,CAAvD;EACA,SAAKqyC,IAAL,GAAYprC,GAAZ;EACA,SAAK4jE,UAAL,GAAkBhf,iBAAiB,GAAGA,iBAAtC;EACD;;EACD,SAAOyiC,QAAP,CAAgBrnF,GAAhB,EAAqB4kD,iBAArB,EAAwC;EACtC,UAAM2iC,IAAI,GAAG,IAAIorC,gBAAJ,CAAqB3yH,GAArB,EAA0B4kD,iBAA1B,CAAb;EACA,WAAO2iC,IAAI,CAACF,QAAL,EAAP;EACD;;EACDurC,EAAAA,cAAc,CAACC,MAAD,EAAS;EACrB,QAAIC,IAAI,GAAGD,MAAX;EACA,QAAIE,OAAO,GAAGD,IAAI,CAACtwH,OAAL,EAAd;EACA,QAAIwwH,SAAS,GAAG,IAAhB;;EACA,WAAOF,IAAI,KAAK,IAAhB,EAAsB;EACpB,YAAM70G,IAAI,GAAG60G,IAAI,CAACtwH,OAAL,EAAb;;EACA,UAAIyb,IAAI,GAAG80G,OAAX,EAAoB;EAClBA,QAAAA,OAAO,GAAG90G,IAAV;EACA+0G,QAAAA,SAAS,GAAGF,IAAZ;EACD;;EACDA,MAAAA,IAAI,GAAGA,IAAI,CAACnsE,KAAZ;EACD;;EACD,QAAIqsE,SAAS,KAAK,IAAd,IAAsBD,OAAO,GAAG,KAAKnvD,UAAzC,EACEovD,SAAS,CAACn1H,MAAV;EAEF,QAAI,CAACg1H,MAAM,CAACI,MAAP,EAAL,EAAsB,OAAO,CAAC,CAAR;EACtB,WAAOF,OAAP;EACD;;EACD1rC,EAAAA,QAAQ,GAAG;EACT,UAAMwrC,MAAM,GAAGK,QAAQ,CAACpoE,SAAT,CAAmB,KAAK1f,IAAxB,CAAf;EACA,QAAI2nF,OAAO,GAAG,KAAKnvD,UAAnB;;EACA,OACEmvD,OAAO,GAAG,KAAKH,cAAL,CAAoBC,MAApB,CAAV,CADF,QAEOE,OAAO,GAAG,KAAKnvD,UAFtB;;EAGA,UAAM2jB,IAAI,GAAGsrC,MAAM,CAACt3G,cAAP,EAAb;EACA,QAAIgsE,IAAI,CAACvuF,MAAL,GAAc,CAAlB,EACE,OAAO,CAACuuF,IAAI,CAAC,CAAD,CAAL,EAAU,IAAI1tF,UAAJ,CAAe0tF,IAAI,CAAC,CAAD,CAAnB,CAAV,CAAP;EAEF,WAAOA,IAAP;EACD;;EA5CmC;;EA8CtC,MAAM2rC,QAAN,CAAe;EACb19H,EAAAA,WAAW,GAAG;EACZ09H,IAAAA,QAAQ,CAACr6H,YAAT,CAAsBC,KAAtB,CAA4B,IAA5B,EAAkCC,SAAlC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKu3C,GAAL,GAAW,IAAX;EACA,SAAK+iF,KAAL,GAAa,IAAb;EACA,SAAKxsE,KAAL,GAAa,IAAb;EACA,SAAKysE,KAAL,GAAaF,QAAQ,CAACG,QAAtB;EACA,SAAKC,OAAL,GAAe,IAAf;EACA,UAAMl3G,EAAE,GAAGrjB,SAAS,CAAC,CAAD,CAApB;EACA,SAAKq3C,GAAL,GAAWh0B,EAAX;EACD;;EACD,SAAO0uC,SAAP,CAAiB9qD,GAAjB,EAAsB;EACpB,QAAIuzH,KAAK,GAAG,IAAZ;EACA,QAAIhzH,IAAI,GAAG,IAAX;;EACA,SAAK,IAAIpK,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6J,GAAG,CAAChH,MAAxB,EAAgC7C,CAAC,EAAjC,EAAqC;EACnC,YAAMq9H,CAAC,GAAG,IAAIN,QAAJ,CAAalzH,GAAG,CAAC7J,CAAD,CAAhB,CAAV;EACA,UAAIo9H,KAAK,KAAK,IAAd,EAAoBA,KAAK,GAAGC,CAAR;EACpBA,MAAAA,CAAC,CAACC,OAAF,CAAUlzH,IAAV;;EACA,UAAIA,IAAI,KAAK,IAAb,EAAmB;EACjBA,QAAAA,IAAI,CAACunD,OAAL,CAAa0rE,CAAb;EACAjzH,QAAAA,IAAI,CAACmzH,UAAL;EACD;;EACDnzH,MAAAA,IAAI,GAAGizH,CAAP;EACD;;EACD,WAAOD,KAAP;EACD;;EACDh4G,EAAAA,cAAc,GAAG;EACf,UAAMkqB,MAAM,GAAG,IAAIlmC,cAAJ,EAAf;EACA,QAAIuzH,IAAI,GAAG,IAAX;;EACA,OAAG;EACDrtF,MAAAA,MAAM,CAACloC,GAAP,CAAWu1H,IAAI,CAAC1iF,GAAhB,EAAqB,KAArB;EACA0iF,MAAAA,IAAI,GAAGA,IAAI,CAACnsE,KAAZ;EACD,KAHD,QAGSmsE,IAAI,KAAK,IAHlB;;EAIA,WAAOrtF,MAAM,CAAC5lC,iBAAP,EAAP;EACD;;EACD2C,EAAAA,OAAO,GAAG;EACR,WAAO,KAAK4wH,KAAZ;EACD;;EACDM,EAAAA,UAAU,GAAG;EACX,QAAI,KAAKP,KAAL,KAAe,IAAf,IAAuB,KAAKxsE,KAAL,KAAe,IAA1C,EAAgD;EAC9C,WAAKysE,KAAL,GAAaF,QAAQ,CAACG,QAAtB;EACA,aAAO,IAAP;EACD;;EACD,SAAKD,KAAL,GAAah+H,IAAI,CAACC,GAAL,CAASwnC,QAAQ,CAAC5e,IAAT,CAAc,KAAKk1G,KAAL,CAAW/iF,GAAzB,EAA8B,KAAKA,GAAnC,EAAwC,KAAKuW,KAAL,CAAWvW,GAAnD,CAAT,CAAb;EACD;;EACDvyC,EAAAA,MAAM,GAAG;EACP,UAAM81H,OAAO,GAAG,KAAKR,KAArB;EACA,UAAMS,OAAO,GAAG,KAAKjtE,KAArB;EACA,QAAItwD,MAAM,GAAG,IAAb;;EACA,QAAI,KAAK88H,KAAL,KAAe,IAAnB,EAAyB;EACvB,WAAKA,KAAL,CAAWrrE,OAAX,CAAmB8rE,OAAnB;;EACA,WAAKT,KAAL,CAAWO,UAAX;;EACAr9H,MAAAA,MAAM,GAAG,KAAK88H,KAAd;EACD;;EACD,QAAI,KAAKxsE,KAAL,KAAe,IAAnB,EAAyB;EACvB,WAAKA,KAAL,CAAW8sE,OAAX,CAAmBE,OAAnB;;EACA,WAAKhtE,KAAL,CAAW+sE,UAAX;;EACA,UAAIr9H,MAAM,KAAK,IAAf,EAAqBA,MAAM,GAAG,KAAKswD,KAAd;EACtB;;EACD,SAAK2sE,OAAL,GAAe,KAAf;EACA,WAAOj9H,MAAP;EACD;;EACD48H,EAAAA,MAAM,GAAG;EACP,WAAO,KAAKK,OAAZ;EACD;;EACDG,EAAAA,OAAO,CAAClzH,IAAD,EAAO;EACZ,SAAK4yH,KAAL,GAAa5yH,IAAb;EACD;;EACDunD,EAAAA,OAAO,CAACzoD,IAAD,EAAO;EACZ,SAAKsnD,KAAL,GAAatnD,IAAb;EACD;;EAxEY;;EA0Ef6zH,QAAQ,CAACG,QAAT,GAAoB/8H,MAAM,CAACO,SAA3B;EACA87H,gBAAgB,CAACO,QAAjB,GAA4BA,QAA5B;;ECvHe,MAAMW,YAAN,CAAmB;EAChCr+H,EAAAA,WAAW,GAAG;EACZq+H,IAAAA,YAAY,CAACh7H,YAAb,CAA0BC,KAA1B,CAAgC,IAAhC,EAAsCC,SAAtC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKgwC,UAAL,GAAkB,IAAlB;EACA,SAAK6b,kBAAL,GAA0B,IAA1B;EACA,SAAKgqE,sBAAL,GAA8B,IAA9B;EACA,UAAMzkF,SAAS,GAAGlxC,SAAS,CAAC,CAAD,CAA3B;EACA,SAAK8vC,UAAL,GAAkBoB,SAAlB;EACD;;EACD,SAAOo9C,QAAP,CAAgB9zE,IAAhB,EAAsBqxC,iBAAtB,EAAyC;EACvC,UAAM2iC,IAAI,GAAG,IAAIssC,YAAJ,CAAiBtgH,IAAjB,CAAb;EACAg0E,IAAAA,IAAI,CAACpiC,oBAAL,CAA0BP,iBAA1B;EACA,WAAO2iC,IAAI,CAACniC,iBAAL,EAAP;EACD;;EACDwpE,EAAAA,cAAc,CAACC,qBAAD,EAAwB;EACpC,SAAKH,sBAAL,GAA8BG,qBAA9B;EACD;;EACDzpE,EAAAA,iBAAiB,GAAG;EAClB,QAAI,KAAKvc,UAAL,CAAgBprC,OAAhB,EAAJ,EAA+B,OAAO,KAAKorC,UAAL,CAAgBntC,IAAhB,EAAP;EAC/B,WAAO,IAAIo4H,aAAJ,CAAkB,KAAKpF,sBAAvB,EAA+C,KAAKhqE,kBAApD,EAAwEzhB,SAAxE,CAAkF,KAAK4F,UAAvF,CAAP;EACD;;EACDsc,EAAAA,oBAAoB,CAACP,iBAAD,EAAoB;EACtC,QAAIA,iBAAiB,GAAG,GAAxB,EAA6B,MAAM,IAAI9uD,wBAAJ,CAA6B,gCAA7B,CAAN;EAC7B,SAAK4uD,kBAAL,GAA0BE,iBAA1B;EACD;;EA1B+B;;EA4BlC,MAAMkvE,aAAN,SAA4BlrF,mBAA5B,CAAgD;EAC9CpzC,EAAAA,WAAW,GAAG;EACZ;EACAs+H,IAAAA,aAAa,CAACj7H,YAAd,CAA2BC,KAA3B,CAAiC,IAAjC,EAAuCC,SAAvC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK61H,sBAAL,GAA8B,IAA9B;EACA,SAAKhqE,kBAAL,GAA0B,IAA1B;EACA,UAAMmqE,qBAAqB,GAAG91H,SAAS,CAAC,CAAD,CAAvC;EAAA,UAA4C6rD,iBAAiB,GAAG7rD,SAAS,CAAC,CAAD,CAAzE;EACA,SAAK21H,sBAAL,GAA8BG,qBAA9B;EACA,SAAKnqE,kBAAL,GAA0BE,iBAA1B;EACD;;EACDvb,EAAAA,gBAAgB,CAAC91B,IAAD,EAAO41B,MAAP,EAAe;EAC7B,QAAI51B,IAAI,CAAC9V,OAAL,EAAJ,EAAoB,OAAO,IAAP;EACpB,UAAMsxH,OAAO,GAAG,MAAM1lF,gBAAN,CAAuBpwC,IAAvB,CAA4B,IAA5B,EAAkCsa,IAAlC,EAAwC41B,MAAxC,CAAhB;EACA,QAAIA,MAAM,YAAY7kB,YAAtB,EACE,OAAOyqG,OAAP;EAEF,WAAO,KAAKxpE,eAAL,CAAqBwpE,OAArB,CAAP;EACD;;EACDxpE,EAAAA,eAAe,CAACypE,WAAD,EAAc;EAC3B,QAAI,KAAKN,sBAAT,EAAiC,OAAOM,WAAW,CAAC53H,MAAZ,CAAmB,GAAnB,CAAP;EACjC,WAAO43H,WAAP;EACD;;EACD5lF,EAAAA,oBAAoB,CAAC3D,MAAD,EAAS0D,MAAT,EAAiB;EACnC,UAAMuR,QAAQ,GAAGjV,MAAM,CAAC5lC,iBAAP,EAAjB;EACA,QAAI2lD,MAAM,GAAG,IAAb;EACA,QAAI9K,QAAQ,CAAC1hD,MAAT,KAAoB,CAAxB,EACEwsD,MAAM,GAAG,IAAIvlD,KAAJ,CAAU,CAAV,EAAaC,IAAb,CAAkB,IAAlB,CAAT,CADF,KAGEslD,MAAM,GAAGmtE,gBAAgB,CAACtrC,QAAjB,CAA0B3sC,QAA1B,EAAoC,KAAKgK,kBAAzC,CAAT;EAEF,WAAO,KAAK7wC,QAAL,CAAcqI,4BAAd,GAA6C9I,MAA7C,CAAoDoyC,MAApD,CAAP;EACD;;EACDzb,EAAAA,qBAAqB,CAACx2B,IAAD,EAAO41B,MAAP,EAAe;EAClC,UAAM4lF,OAAO,GAAG,MAAMhlF,qBAAN,CAA4B9wC,IAA5B,CAAiC,IAAjC,EAAuCsa,IAAvC,EAA6C41B,MAA7C,CAAhB;EACA,WAAO,KAAKoc,eAAL,CAAqBwpE,OAArB,CAAP;EACD;;EACDxlF,EAAAA,mBAAmB,CAACh2B,IAAD,EAAO41B,MAAP,EAAe;EAChC,UAAM8lF,qBAAqB,GAAG9lF,MAAM,YAAY1rB,OAAhD;EACA,UAAMyxG,UAAU,GAAG,MAAM3lF,mBAAN,CAA0BtwC,IAA1B,CAA+B,IAA/B,EAAqCsa,IAArC,EAA2C41B,MAA3C,CAAnB;EACA,QAAI8lF,qBAAqB,IAAI,EAAEC,UAAU,YAAYnuG,UAAxB,CAA7B,EAAkE,OAAO,IAAP;EAElE,WAAOmuG,UAAP;EACD;;EA5C6C;;EA8ChD2E,YAAY,CAACC,aAAb,GAA6BA,aAA7B;;;;;;;;;EC/Ee,MAAMC,YAAN,CAAmB;EAChCv+H,EAAAA,WAAW,GAAG;EACZu+H,IAAAA,YAAY,CAACl7H,YAAb,CAA0BC,KAA1B,CAAgC,IAAhC,EAAsCC,SAAtC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKu2F,IAAL,GAAY,IAAZ;EACA,SAAK4kC,OAAL,GAAe,IAAf;EACA,SAAKC,QAAL,GAAgB,IAAhB;EACA,SAAKC,WAAL,GAAmB,GAAnB;EACA,UAAM1/F,GAAG,GAAGz7B,SAAS,CAAC,CAAD,CAArB;EACA,SAAKq2F,IAAL,GAAY56D,GAAZ;EACA,SAAKw/F,OAAL,GAAex/F,GAAG,CAAChgB,SAAJ,EAAf;EACD;;EACD,SAAO2/G,iBAAP,CAAyB3/F,GAAzB,EAA8B+B,qBAA9B,EAAqD;EACnD,UAAMh7B,KAAK,GAAG,IAAI1B,UAAJ,EAAd;EACA0B,IAAAA,KAAK,CAACzD,CAAN,GAAU08B,GAAG,CAAC9yB,EAAJ,CAAO5J,CAAP,GAAWy+B,qBAAqB,IAAI/B,GAAG,CAAC9yB,EAAJ,CAAO5J,CAAP,GAAW08B,GAAG,CAACvX,EAAJ,CAAOnlB,CAAtB,CAA1C;EACAyD,IAAAA,KAAK,CAACxD,CAAN,GAAUy8B,GAAG,CAAC9yB,EAAJ,CAAO3J,CAAP,GAAWw+B,qBAAqB,IAAI/B,GAAG,CAAC9yB,EAAJ,CAAO3J,CAAP,GAAWy8B,GAAG,CAACvX,EAAJ,CAAOllB,CAAtB,CAA1C;EACA,WAAOwD,KAAP;EACD;;EACD64H,EAAAA,OAAO,GAAG;EACR,QAAIr7H,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMojB,EAAE,GAAGrjB,SAAS,CAAC,CAAD,CAApB;EACA,YAAMs7H,OAAO,GAAG,KAAKH,WAAL,GAAmB,KAAKF,OAAxC;;EACA,UAAI53G,EAAE,CAAClgB,QAAH,CAAY,KAAKkzF,IAAL,CAAUnyE,EAAtB,IAA4B,KAAKi3G,WAArC,EAAkD;EAChD,aAAKD,QAAL,GAAgB,KAAK7kC,IAAL,CAAU33D,UAAV,CAAqB48F,OAArB,CAAhB;EACA,eAAO,IAAP;EACD;;EACD,UAAIj4G,EAAE,CAAClgB,QAAH,CAAY,KAAKkzF,IAAL,CAAU1tF,EAAtB,IAA4B,KAAKwyH,WAArC,EAAkD;EAChD,aAAKD,QAAL,GAAgBF,YAAY,CAACI,iBAAb,CAA+B,KAAK/kC,IAApC,EAA0CilC,OAA1C,CAAhB;EACA,eAAO,IAAP;EACD;;EACD,WAAKJ,QAAL,GAAgB73G,EAAhB;EACD,KAZD,MAYO,IAAIrjB,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMA,MAAM,GAAGD,SAAS,CAAC,CAAD,CAAxB;EAAA,YAA6B+nH,KAAK,GAAG/nH,SAAS,CAAC,CAAD,CAA9C;EACA,YAAMu7H,SAAS,GAAG,KAAKC,oBAAL,CAA0Bv7H,MAA1B,CAAlB;EACA,YAAM4lC,IAAI,GAAG01F,SAAS,GAAG,KAAKN,OAA9B;EACA,UAAIlT,KAAK,CAACpmH,QAAN,CAAe,KAAK00F,IAAL,CAAUnyE,EAAzB,CAAJ,EAAkC,KAAKg3G,QAAL,GAAgB,KAAK7kC,IAAL,CAAU33D,UAAV,CAAqBmH,IAArB,CAAhB,CAAlC,KAAmF,KAAKq1F,QAAL,GAAgBF,YAAY,CAACI,iBAAb,CAA+B,KAAK/kC,IAApC,EAA0CxwD,IAA1C,CAAhB;EACpF;EACF;;EACD41F,EAAAA,gBAAgB,CAACC,MAAD,EAAS;EACvB,SAAKP,WAAL,GAAmBO,MAAnB;EACD;;EACDF,EAAAA,oBAAoB,CAACv1H,GAAD,EAAM;EACxB,QAAIA,GAAG,GAAG,KAAKk1H,WAAf,EAA4B,OAAO,KAAKA,WAAZ;EAC5B,WAAOl1H,GAAP;EACD;;EACD01H,EAAAA,aAAa,GAAG;EACd,WAAO,KAAKT,QAAZ;EACD;;EAhD+B;;ECDnB,MAAMU,0BAAN,CAAiC;EAC9CC,EAAAA,cAAc,CAACpgG,GAAD,EAAMqgG,UAAN,EAAkB;;EADc;;ECEjC,MAAMC,8BAAN,CAAqC;EAClD,SAAOC,mBAAP,CAA2BvgG,GAA3B,EAAgCqgG,UAAhC,EAA4C;EAC1C,UAAMG,OAAO,GAAGxgG,GAAG,CAACgkD,cAAJ,EAAhB;EACA,UAAMy8C,MAAM,GAAGD,OAAO,CAAClgG,OAAR,CAAgB+/F,UAAhB,CAAf;EACA,WAAOI,MAAP;EACD;;EACDL,EAAAA,cAAc,CAACpgG,GAAD,EAAMqgG,UAAN,EAAkB;EAC9B,UAAMG,OAAO,GAAGxgG,GAAG,CAACgkD,cAAJ,EAAhB;EACA,UAAMozB,MAAM,GAAGopB,OAAO,CAACxgH,SAAR,EAAf;EACA,UAAM0gH,QAAQ,GAAGtpB,MAAM,GAAG,CAA1B;EACA,UAAMupB,QAAQ,GAAG,IAAIpB,YAAJ,CAAiBiB,OAAjB,CAAjB;EACA,UAAMC,MAAM,GAAGH,8BAA8B,CAACC,mBAA/B,CAAmDvgG,GAAnD,EAAwDqgG,UAAxD,CAAf;EACA,UAAMO,eAAe,GAAGH,MAAM,CAAC/4H,QAAP,CAAgB24H,UAAhB,IAA8B,CAA9B,GAAkC,GAA1D;EACA,QAAIQ,WAAW,GAAGD,eAAlB;EACA,QAAIC,WAAW,GAAGH,QAAlB,EACEG,WAAW,GAAGH,QAAd;EAEFC,IAAAA,QAAQ,CAACX,gBAAT,CAA0Ba,WAA1B;EACAF,IAAAA,QAAQ,CAACf,OAAT,CAAiBa,MAAjB;EACA,WAAOE,QAAQ,CAACT,aAAT,EAAP;EACD;;EACD,MAAIt4H,WAAJ,GAAkB;EAChB,WAAO,CAACu4H,0BAAD,CAAP;EACD;;EAvBiD;;ECGrC,MAAMW,iBAAN,CAAwB;EACrC,SAAOC,OAAP,CAAe74H,CAAf,EAAkBC,CAAlB,EAAqB5C,CAArB,EAAwB;EACtB,WAAO,CAAC4C,CAAC,CAAC7E,CAAF,GAAM4E,CAAC,CAAC5E,CAAT,KAAeiC,CAAC,CAAChC,CAAF,GAAM2E,CAAC,CAAC3E,CAAvB,IAA4B,CAAC4E,CAAC,CAAC5E,CAAF,GAAM2E,CAAC,CAAC3E,CAAT,KAAegC,CAAC,CAACjC,CAAF,GAAM4E,CAAC,CAAC5E,CAAvB,CAAnC;EACD;;EACD,SAAO09H,sBAAP,CAA8B94H,CAA9B,EAAiCC,CAAjC,EAAoC5C,CAApC,EAAuCyH,CAAvC,EAA0C;EACxC,UAAM61E,GAAG,GAAG9xE,EAAE,CAACJ,OAAH,CAAWzI,CAAC,CAAC5E,CAAb,EAAgBmO,YAAhB,CAA6BzE,CAAC,CAAC1J,CAA/B,CAAZ;EACA,UAAMw/E,GAAG,GAAG/xE,EAAE,CAACJ,OAAH,CAAWzI,CAAC,CAAC3E,CAAb,EAAgBkO,YAAhB,CAA6BzE,CAAC,CAACzJ,CAA/B,CAAZ;EACA,UAAM09H,GAAG,GAAGlwH,EAAE,CAACJ,OAAH,CAAWxI,CAAC,CAAC7E,CAAb,EAAgBmO,YAAhB,CAA6BzE,CAAC,CAAC1J,CAA/B,CAAZ;EACA,UAAM49H,GAAG,GAAGnwH,EAAE,CAACJ,OAAH,CAAWxI,CAAC,CAAC5E,CAAb,EAAgBkO,YAAhB,CAA6BzE,CAAC,CAACzJ,CAA/B,CAAZ;EACA,UAAM49H,GAAG,GAAGpwH,EAAE,CAACJ,OAAH,CAAWpL,CAAC,CAACjC,CAAb,EAAgBmO,YAAhB,CAA6BzE,CAAC,CAAC1J,CAA/B,CAAZ;EACA,UAAM89H,GAAG,GAAGrwH,EAAE,CAACJ,OAAH,CAAWpL,CAAC,CAAChC,CAAb,EAAgBkO,YAAhB,CAA6BzE,CAAC,CAACzJ,CAA/B,CAAZ;EACA,UAAM89H,KAAK,GAAGx+C,GAAG,CAACrxE,QAAJ,CAAa0vH,GAAb,EAAkBzvH,YAAlB,CAA+BwvH,GAAG,CAACzvH,QAAJ,CAAasxE,GAAb,CAA/B,CAAd;EACA,UAAMw+C,KAAK,GAAGL,GAAG,CAACzvH,QAAJ,CAAa4vH,GAAb,EAAkB3vH,YAAlB,CAA+B0vH,GAAG,CAAC3vH,QAAJ,CAAa0vH,GAAb,CAA/B,CAAd;EACA,UAAMK,KAAK,GAAGJ,GAAG,CAAC3vH,QAAJ,CAAasxE,GAAb,EAAkBrxE,YAAlB,CAA+BoxE,GAAG,CAACrxE,QAAJ,CAAa4vH,GAAb,CAA/B,CAAd;EACA,UAAMI,KAAK,GAAG3+C,GAAG,CAACrxE,QAAJ,CAAaqxE,GAAb,EAAkBrwE,OAAlB,CAA0BswE,GAAG,CAACtxE,QAAJ,CAAasxE,GAAb,CAA1B,CAAd;EACA,UAAM2+C,KAAK,GAAGR,GAAG,CAACzvH,QAAJ,CAAayvH,GAAb,EAAkBzuH,OAAlB,CAA0B0uH,GAAG,CAAC1vH,QAAJ,CAAa0vH,GAAb,CAA1B,CAAd;EACA,UAAMQ,KAAK,GAAGP,GAAG,CAAC3vH,QAAJ,CAAa2vH,GAAb,EAAkB3uH,OAAlB,CAA0B4uH,GAAG,CAAC5vH,QAAJ,CAAa4vH,GAAb,CAA1B,CAAd;EACA,UAAM54G,GAAG,GAAGg5G,KAAK,CAAC7vH,YAAN,CAAmB2vH,KAAnB,EAA0B9uH,OAA1B,CAAkCivH,KAAK,CAAC9vH,YAAN,CAAmB4vH,KAAnB,CAAlC,EAA6D/uH,OAA7D,CAAqEkvH,KAAK,CAAC/vH,YAAN,CAAmB0vH,KAAnB,CAArE,CAAZ;EACA,UAAMM,UAAU,GAAGn5G,GAAG,CAAC5T,WAAJ,KAAoB,CAAvC;EACA,WAAO+sH,UAAP;EACD;;EACD,SAAOC,mBAAP,CAA2B15H,CAA3B,EAA8BC,CAA9B,EAAiC5C,CAAjC,EAAoCyH,CAApC,EAAuC;EACrC,UAAM60H,iBAAiB,GAAGf,iBAAiB,CAACgB,mBAAlB,CAAsC55H,CAAtC,EAAyCC,CAAzC,EAA4C5C,CAA5C,EAA+CyH,CAA/C,CAA1B;EACA,UAAM+0H,YAAY,GAAGjB,iBAAiB,CAACkB,gBAAlB,CAAmC95H,CAAnC,EAAsCC,CAAtC,EAAyC5C,CAAzC,EAA4CyH,CAA5C,CAArB;EACA,UAAMi1H,YAAY,GAAGnB,iBAAiB,CAACmB,YAAlB,CAA+B/5H,CAA/B,EAAkCC,CAAlC,EAAqC5C,CAArC,EAAwCyH,CAAxC,CAArB;EACA,UAAMk1H,YAAY,GAAG75F,QAAQ,CAACuB,YAAT,CAAsB1hC,CAAtB,EAAyBC,CAAzB,EAA4B5C,CAA5B,CAArB;EACAkX,IAAAA,MAAM,CAACuiB,GAAP,CAAWC,OAAX,CAAmB,uBAAuBr+B,IAAI,CAACC,GAAL,CAASmM,CAAC,CAACtF,QAAF,CAAWw6H,YAAX,IAA2Bh6H,CAAC,CAACR,QAAF,CAAWw6H,YAAX,CAApC,IAAgEh6H,CAAC,CAACR,QAAF,CAAWw6H,YAAX,CAA1G;;EACA,QAAIL,iBAAiB,KAAKE,YAAtB,IAAsCF,iBAAiB,KAAKI,YAAhE,EAA8E;EAC5ExlH,MAAAA,MAAM,CAACuiB,GAAP,CAAWC,OAAX,CAAmB,kDAAkD4iG,iBAAlD,GAAsE,gBAAtE,GAAyFE,YAAzF,GAAwG,gBAAxG,GAA2HE,YAA3H,GAA0I,GAA7J;EACAxlH,MAAAA,MAAM,CAACuiB,GAAP,CAAWC,OAAX,CAAmB1D,SAAS,CAACC,YAAV,CAAuB,IAAIrM,uBAAJ,CAA4B,CAACjnB,CAAD,EAAIC,CAAJ,EAAO5C,CAAP,EAAUyH,CAAV,CAA5B,CAAvB,CAAnB;EACAyP,MAAAA,MAAM,CAACuiB,GAAP,CAAWC,OAAX,CAAmB,oBAAoB1D,SAAS,CAACyuE,OAAV,CAAkBk4B,YAAlB,CAApB,GAAsD,YAAtD,GAAqEh6H,CAAC,CAACR,QAAF,CAAWw6H,YAAX,CAAxF;EACAzlH,MAAAA,MAAM,CAACuiB,GAAP,CAAWC,OAAX,CAAmB,uBAAuBr+B,IAAI,CAACC,GAAL,CAASmM,CAAC,CAACtF,QAAF,CAAWw6H,YAAX,IAA2Bh6H,CAAC,CAACR,QAAF,CAAWw6H,YAAX,CAA3B,GAAsD,CAA/D,CAA1C;EACAzlH,MAAAA,MAAM,CAACuiB,GAAP,CAAWC,OAAX,CAAmB,uBAAuBr+B,IAAI,CAACC,GAAL,CAASmM,CAAC,CAACtF,QAAF,CAAWw6H,YAAX,IAA2B/5H,CAAC,CAACT,QAAF,CAAWw6H,YAAX,CAA3B,GAAsD,CAA/D,CAA1C;EACAzlH,MAAAA,MAAM,CAACuiB,GAAP,CAAWC,OAAX,CAAmB,uBAAuBr+B,IAAI,CAACC,GAAL,CAASmM,CAAC,CAACtF,QAAF,CAAWw6H,YAAX,IAA2B38H,CAAC,CAACmC,QAAF,CAAWw6H,YAAX,CAA3B,GAAsD,CAA/D,CAA1C;EACAzlH,MAAAA,MAAM,CAACuiB,GAAP,CAAWC,OAAX;EACD;EACF;;EACD,SAAOkjG,gBAAP,CAAwBj6H,CAAxB,EAA2BC,CAA3B,EAA8B5C,CAA9B,EAAiCyH,CAAjC,EAAoC;EAClC,UAAMo1H,KAAK,GAAGrxH,EAAE,CAACW,GAAH,CAAOxJ,CAAC,CAAC5E,CAAT,EAAYkP,OAAZ,CAAoBzB,EAAE,CAACW,GAAH,CAAOxJ,CAAC,CAAC3E,CAAT,CAApB,EAAiCoO,YAAjC,CAA8CmvH,iBAAiB,CAACuB,aAAlB,CAAgCl6H,CAAhC,EAAmC5C,CAAnC,EAAsCyH,CAAtC,CAA9C,CAAd;EACA,UAAMs1H,KAAK,GAAGvxH,EAAE,CAACW,GAAH,CAAOvJ,CAAC,CAAC7E,CAAT,EAAYkP,OAAZ,CAAoBzB,EAAE,CAACW,GAAH,CAAOvJ,CAAC,CAAC5E,CAAT,CAApB,EAAiCoO,YAAjC,CAA8CmvH,iBAAiB,CAACuB,aAAlB,CAAgCn6H,CAAhC,EAAmC3C,CAAnC,EAAsCyH,CAAtC,CAA9C,CAAd;EACA,UAAMu1H,KAAK,GAAGxxH,EAAE,CAACW,GAAH,CAAOnM,CAAC,CAACjC,CAAT,EAAYkP,OAAZ,CAAoBzB,EAAE,CAACW,GAAH,CAAOnM,CAAC,CAAChC,CAAT,CAApB,EAAiCoO,YAAjC,CAA8CmvH,iBAAiB,CAACuB,aAAlB,CAAgCn6H,CAAhC,EAAmCC,CAAnC,EAAsC6E,CAAtC,CAA9C,CAAd;EACA,UAAMw1H,KAAK,GAAGzxH,EAAE,CAACW,GAAH,CAAO1E,CAAC,CAAC1J,CAAT,EAAYkP,OAAZ,CAAoBzB,EAAE,CAACW,GAAH,CAAO1E,CAAC,CAACzJ,CAAT,CAApB,EAAiCoO,YAAjC,CAA8CmvH,iBAAiB,CAACuB,aAAlB,CAAgCn6H,CAAhC,EAAmCC,CAAnC,EAAsC5C,CAAtC,CAA9C,CAAd;EACA,UAAMijB,GAAG,GAAG45G,KAAK,CAAC3wH,YAAN,CAAmB6wH,KAAnB,EAA0B9vH,OAA1B,CAAkC+vH,KAAlC,EAAyC9wH,YAAzC,CAAsD+wH,KAAtD,CAAZ;EACA,UAAMb,UAAU,GAAGn5G,GAAG,CAAC5T,WAAJ,KAAoB,CAAvC;EACA,WAAO+sH,UAAP;EACD;;EACD,SAAOM,YAAP,CAAoB/5H,CAApB,EAAuBC,CAAvB,EAA0B5C,CAA1B,EAA6ByH,CAA7B,EAAgC;EAC9B,UAAMy1H,EAAE,GAAGp6F,QAAQ,CAACuB,YAAT,CAAsB1hC,CAAtB,EAAyBC,CAAzB,EAA4B5C,CAA5B,CAAX;EACA,UAAMm9H,QAAQ,GAAGx6H,CAAC,CAACR,QAAF,CAAW+6H,EAAX,CAAjB;EACA,UAAME,WAAW,GAAG31H,CAAC,CAACtF,QAAF,CAAW+6H,EAAX,IAAiBC,QAArC;EACA,WAAOC,WAAW,IAAI,CAAtB;EACD;;EACD,SAAOC,oBAAP,CAA4B16H,CAA5B,EAA+BC,CAA/B,EAAkC5C,CAAlC,EAAqCyH,CAArC,EAAwC;EACtC,UAAM61E,GAAG,GAAG36E,CAAC,CAAC5E,CAAF,GAAM0J,CAAC,CAAC1J,CAApB;EACA,UAAMw/E,GAAG,GAAG56E,CAAC,CAAC3E,CAAF,GAAMyJ,CAAC,CAACzJ,CAApB;EACA,UAAM09H,GAAG,GAAG94H,CAAC,CAAC7E,CAAF,GAAM0J,CAAC,CAAC1J,CAApB;EACA,UAAM49H,GAAG,GAAG/4H,CAAC,CAAC5E,CAAF,GAAMyJ,CAAC,CAACzJ,CAApB;EACA,UAAM49H,GAAG,GAAG57H,CAAC,CAACjC,CAAF,GAAM0J,CAAC,CAAC1J,CAApB;EACA,UAAM89H,GAAG,GAAG77H,CAAC,CAAChC,CAAF,GAAMyJ,CAAC,CAACzJ,CAApB;EACA,UAAM89H,KAAK,GAAGx+C,GAAG,GAAGq+C,GAAN,GAAYD,GAAG,GAAGn+C,GAAhC;EACA,UAAMw+C,KAAK,GAAGL,GAAG,GAAGG,GAAN,GAAYD,GAAG,GAAGD,GAAhC;EACA,UAAMK,KAAK,GAAGJ,GAAG,GAAGr+C,GAAN,GAAYD,GAAG,GAAGu+C,GAAhC;EACA,UAAMI,KAAK,GAAG3+C,GAAG,GAAGA,GAAN,GAAYC,GAAG,GAAGA,GAAhC;EACA,UAAM2+C,KAAK,GAAGR,GAAG,GAAGA,GAAN,GAAYC,GAAG,GAAGA,GAAhC;EACA,UAAMQ,KAAK,GAAGP,GAAG,GAAGA,GAAN,GAAYC,GAAG,GAAGA,GAAhC;EACA,UAAMrmH,IAAI,GAAGymH,KAAK,GAAGF,KAAR,GAAgBG,KAAK,GAAGF,KAAxB,GAAgCG,KAAK,GAAGL,KAArD;EACA,WAAOtmH,IAAI,GAAG,CAAd;EACD;;EACD,SAAOinH,gBAAP,CAAwB95H,CAAxB,EAA2BC,CAA3B,EAA8B5C,CAA9B,EAAiCyH,CAAjC,EAAoC;EAClC,UAAM8L,EAAE,GAAG/H,EAAE,CAACJ,OAAH,CAAW3D,CAAC,CAAC1J,CAAb,CAAX;EACA,UAAMyV,EAAE,GAAGhI,EAAE,CAACJ,OAAH,CAAW3D,CAAC,CAACzJ,CAAb,CAAX;EACA,UAAMgT,EAAE,GAAGxF,EAAE,CAACJ,OAAH,CAAWzI,CAAC,CAAC5E,CAAb,CAAX;EACA,UAAM6lC,EAAE,GAAGp4B,EAAE,CAACJ,OAAH,CAAWzI,CAAC,CAAC3E,CAAb,CAAX;EACA,UAAM6lC,EAAE,GAAGr4B,EAAE,CAACJ,OAAH,CAAWxI,CAAC,CAAC7E,CAAb,CAAX;EACA,UAAM+lC,EAAE,GAAGt4B,EAAE,CAACJ,OAAH,CAAWxI,CAAC,CAAC5E,CAAb,CAAX;EACA,UAAMsmC,EAAE,GAAG94B,EAAE,CAACJ,OAAH,CAAWpL,CAAC,CAACjC,CAAb,CAAX;EACA,UAAMwmC,EAAE,GAAG/4B,EAAE,CAACJ,OAAH,CAAWpL,CAAC,CAAChC,CAAb,CAAX;EACA,UAAM6+H,KAAK,GAAG7rH,EAAE,CAAC/E,QAAH,CAAY+E,EAAZ,EAAgBxN,GAAhB,CAAoBogC,EAAE,CAAC33B,QAAH,CAAY23B,EAAZ,CAApB,EAAqC33B,QAArC,CAA8CsvH,iBAAiB,CAAC+B,aAAlB,CAAgCz5F,EAAhC,EAAoCC,EAApC,EAAwCQ,EAAxC,EAA4CC,EAA5C,EAAgDhxB,EAAhD,EAAoDC,EAApD,CAA9C,CAAd;EACA,UAAMupH,KAAK,GAAGl5F,EAAE,CAAC53B,QAAH,CAAY43B,EAAZ,EAAgBrgC,GAAhB,CAAoBsgC,EAAE,CAAC73B,QAAH,CAAY63B,EAAZ,CAApB,EAAqC73B,QAArC,CAA8CsvH,iBAAiB,CAAC+B,aAAlB,CAAgCtsH,EAAhC,EAAoC4yB,EAApC,EAAwCU,EAAxC,EAA4CC,EAA5C,EAAgDhxB,EAAhD,EAAoDC,EAApD,CAA9C,CAAd;EACA,UAAMwpH,KAAK,GAAG14F,EAAE,CAACr4B,QAAH,CAAYq4B,EAAZ,EAAgB9gC,GAAhB,CAAoB+gC,EAAE,CAACt4B,QAAH,CAAYs4B,EAAZ,CAApB,EAAqCt4B,QAArC,CAA8CsvH,iBAAiB,CAAC+B,aAAlB,CAAgCtsH,EAAhC,EAAoC4yB,EAApC,EAAwCC,EAAxC,EAA4CC,EAA5C,EAAgDvwB,EAAhD,EAAoDC,EAApD,CAA9C,CAAd;EACA,UAAMypH,KAAK,GAAG1pH,EAAE,CAACtH,QAAH,CAAYsH,EAAZ,EAAgB/P,GAAhB,CAAoBgQ,EAAE,CAACvH,QAAH,CAAYuH,EAAZ,CAApB,EAAqCvH,QAArC,CAA8CsvH,iBAAiB,CAAC+B,aAAlB,CAAgCtsH,EAAhC,EAAoC4yB,EAApC,EAAwCC,EAAxC,EAA4CC,EAA5C,EAAgDQ,EAAhD,EAAoDC,EAApD,CAA9C,CAAd;EACA,UAAMthB,GAAG,GAAG45G,KAAK,CAAC3tH,QAAN,CAAe6tH,KAAf,EAAsBv5H,GAAtB,CAA0Bw5H,KAA1B,EAAiC9tH,QAAjC,CAA0C+tH,KAA1C,CAAZ;EACA,UAAMb,UAAU,GAAGn5G,GAAG,CAAC5T,WAAJ,KAAoB,CAAvC;EACA,WAAO+sH,UAAP;EACD;;EACD,SAAOG,mBAAP,CAA2B55H,CAA3B,EAA8BC,CAA9B,EAAiC5C,CAAjC,EAAoCyH,CAApC,EAAuC;EACrC,UAAM20H,UAAU,GAAG,CAACz5H,CAAC,CAAC5E,CAAF,GAAM4E,CAAC,CAAC5E,CAAR,GAAY4E,CAAC,CAAC3E,CAAF,GAAM2E,CAAC,CAAC3E,CAArB,IAA0Bu9H,iBAAiB,CAACC,OAAlB,CAA0B54H,CAA1B,EAA6B5C,CAA7B,EAAgCyH,CAAhC,CAA1B,GAA+D,CAAC7E,CAAC,CAAC7E,CAAF,GAAM6E,CAAC,CAAC7E,CAAR,GAAY6E,CAAC,CAAC5E,CAAF,GAAM4E,CAAC,CAAC5E,CAArB,IAA0Bu9H,iBAAiB,CAACC,OAAlB,CAA0B74H,CAA1B,EAA6B3C,CAA7B,EAAgCyH,CAAhC,CAAzF,GAA8H,CAACzH,CAAC,CAACjC,CAAF,GAAMiC,CAAC,CAACjC,CAAR,GAAYiC,CAAC,CAAChC,CAAF,GAAMgC,CAAC,CAAChC,CAArB,IAA0Bu9H,iBAAiB,CAACC,OAAlB,CAA0B74H,CAA1B,EAA6BC,CAA7B,EAAgC6E,CAAhC,CAAxJ,GAA6L,CAACA,CAAC,CAAC1J,CAAF,GAAM0J,CAAC,CAAC1J,CAAR,GAAY0J,CAAC,CAACzJ,CAAF,GAAMyJ,CAAC,CAACzJ,CAArB,IAA0Bu9H,iBAAiB,CAACC,OAAlB,CAA0B74H,CAA1B,EAA6BC,CAA7B,EAAgC5C,CAAhC,CAAvN,GAA4P,CAA/Q;EACA,WAAOo8H,UAAP;EACD;;EACD,SAAOmB,gBAAP,CAAwB56H,CAAxB,EAA2BC,CAA3B,EAA8B5C,CAA9B,EAAiCyH,CAAjC,EAAoC;EAClC,WAAO8zH,iBAAiB,CAAC8B,oBAAlB,CAAuC16H,CAAvC,EAA0CC,CAA1C,EAA6C5C,CAA7C,EAAgDyH,CAAhD,CAAP;EACD;;EACD,SAAO61H,aAAP,CAAqBtsH,EAArB,EAAyB4yB,EAAzB,EAA6BC,EAA7B,EAAiCC,EAAjC,EAAqCQ,EAArC,EAAyCC,EAAzC,EAA6C;EAC3C,WAAOV,EAAE,CAAC30B,QAAH,CAAY8B,EAAZ,EAAgB/E,QAAhB,CAAyBs4B,EAAE,CAACr1B,QAAH,CAAY00B,EAAZ,CAAzB,EAA0C10B,QAA1C,CAAmD40B,EAAE,CAAC50B,QAAH,CAAY00B,EAAZ,EAAgB33B,QAAhB,CAAyBq4B,EAAE,CAACp1B,QAAH,CAAY8B,EAAZ,CAAzB,CAAnD,CAAP;EACD;;EACD,SAAO8rH,aAAP,CAAqBn6H,CAArB,EAAwBC,CAAxB,EAA2B5C,CAA3B,EAA8B;EAC5B,UAAMw9H,EAAE,GAAGhyH,EAAE,CAACJ,OAAH,CAAWxI,CAAC,CAAC7E,CAAb,EAAgBmO,YAAhB,CAA6BvJ,CAAC,CAAC5E,CAA/B,EAAkCqO,YAAlC,CAA+CZ,EAAE,CAACJ,OAAH,CAAWpL,CAAC,CAAChC,CAAb,EAAgBkO,YAAhB,CAA6BvJ,CAAC,CAAC3E,CAA/B,CAA/C,CAAX;EACA,UAAMy/H,EAAE,GAAGjyH,EAAE,CAACJ,OAAH,CAAWxI,CAAC,CAAC5E,CAAb,EAAgBkO,YAAhB,CAA6BvJ,CAAC,CAAC3E,CAA/B,EAAkCoO,YAAlC,CAA+CZ,EAAE,CAACJ,OAAH,CAAWpL,CAAC,CAACjC,CAAb,EAAgBmO,YAAhB,CAA6BvJ,CAAC,CAAC5E,CAA/B,CAA/C,CAAX;EACA,WAAOy/H,EAAE,CAACtxH,YAAH,CAAgBuxH,EAAhB,CAAP;EACD;;EAnGoC;;ECAxB,MAAMC,MAAN,CAAa;EAC1BjiI,EAAAA,WAAW,GAAG;EACZiiI,IAAAA,MAAM,CAAC5+H,YAAP,CAAoBC,KAApB,CAA0B,IAA1B,EAAgCC,SAAhC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKg8C,EAAL,GAAU,IAAV;;EACA,QAAI97C,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAM67C,EAAE,GAAG97C,SAAS,CAAC,CAAD,CAApB;EACA,WAAK87C,EAAL,GAAU,IAAIh7C,UAAJ,CAAeg7C,EAAf,CAAV;EACD,KAHD,MAGO,IAAI97C,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAM0jC,EAAE,GAAG3jC,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyB4jC,EAAE,GAAG5jC,SAAS,CAAC,CAAD,CAAvC;EACA,WAAK87C,EAAL,GAAU,IAAIh7C,UAAJ,CAAe6iC,EAAf,EAAmBC,EAAnB,CAAV;EACD,KAHM,MAGA,IAAI5jC,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAM0jC,EAAE,GAAG3jC,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyB4jC,EAAE,GAAG5jC,SAAS,CAAC,CAAD,CAAvC;EAAA,YAA4C2+H,EAAE,GAAG3+H,SAAS,CAAC,CAAD,CAA1D;EACA,WAAK87C,EAAL,GAAU,IAAIh7C,UAAJ,CAAe6iC,EAAf,EAAmBC,EAAnB,EAAuB+6F,EAAvB,CAAV;EACD;EACF;;EACD,SAAOv6F,YAAP,GAAsB;EACpB,QAAIpkC,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMwI,CAAC,GAAGzI,SAAS,CAAC,CAAD,CAAnB;EAAA,YAAwBkkB,EAAE,GAAGlkB,SAAS,CAAC,CAAD,CAAtC;EAAA,YAA2C2I,EAAE,GAAG3I,SAAS,CAAC,CAAD,CAAzD;EACA,YAAM6yG,MAAM,GAAG3uF,EAAE,CAAC/gB,QAAH,CAAYwF,EAAZ,CAAf;EACA,YAAMi2H,KAAK,GAAGn2H,CAAC,CAACtF,QAAF,CAAW+gB,EAAX,CAAd;EACA,YAAMnhB,EAAE,GAAG4F,EAAE,CAAC1H,IAAH,KAAYijB,EAAE,CAACjjB,IAAH,EAAvB;EACA,YAAM49H,EAAE,GAAG36G,EAAE,CAACjjB,IAAH,KAAY8B,EAAE,IAAI67H,KAAK,GAAG/rB,MAAZ,CAAzB;EACA,aAAOgsB,EAAP;EACD,KAPD,MAOO,IAAI7+H,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMwI,CAAC,GAAGzI,SAAS,CAAC,CAAD,CAAnB;EAAA,YAAwBqkC,EAAE,GAAGrkC,SAAS,CAAC,CAAD,CAAtC;EAAA,YAA2C6Y,EAAE,GAAG7Y,SAAS,CAAC,CAAD,CAAzD;EAAA,YAA8D8Y,EAAE,GAAG9Y,SAAS,CAAC,CAAD,CAA5E;EACA,YAAM+e,EAAE,GAAGslB,EAAE,CAACtlC,CAAd;EACA,YAAMigB,EAAE,GAAGqlB,EAAE,CAACrlC,CAAd;EACA,YAAM2E,CAAC,GAAGkV,EAAE,CAAC9Z,CAAH,GAAOggB,EAAjB;EACA,YAAMnb,CAAC,GAAGkV,EAAE,CAAC/Z,CAAH,GAAOggB,EAAjB;EACA,YAAM/d,CAAC,GAAG6X,EAAE,CAAC7Z,CAAH,GAAOggB,EAAjB;EACA,YAAMjR,CAAC,GAAG+K,EAAE,CAAC9Z,CAAH,GAAOggB,EAAjB;EACA,YAAMhS,GAAG,GAAGrJ,CAAC,GAAGoK,CAAJ,GAAQnK,CAAC,GAAG5C,CAAxB;EACA,YAAM6B,EAAE,GAAG4F,CAAC,CAAC1J,CAAF,GAAMggB,EAAjB;EACA,YAAMjc,EAAE,GAAG2F,CAAC,CAACzJ,CAAF,GAAMggB,EAAjB;EACA,YAAMzM,CAAC,GAAG,CAACxE,CAAC,GAAGlL,EAAJ,GAASe,CAAC,GAAGd,EAAd,IAAoBkK,GAA9B;EACA,YAAMiE,CAAC,GAAG,CAAC,CAACjQ,CAAD,GAAK6B,EAAL,GAAUc,CAAC,GAAGb,EAAf,IAAqBkK,GAA/B;EACA,YAAMjM,CAAC,GAAGsjC,EAAE,CAACpjC,IAAH,KAAYsR,CAAC,IAAIsG,EAAE,CAAC5X,IAAH,KAAYojC,EAAE,CAACpjC,IAAH,EAAhB,CAAb,GAA0CgQ,CAAC,IAAI6H,EAAE,CAAC7X,IAAH,KAAYojC,EAAE,CAACpjC,IAAH,EAAhB,CAArD;EACA,aAAOF,CAAP;EACD;EACF;;EACD+9H,EAAAA,YAAY,CAACl7H,CAAD,EAAI5C,CAAJ,EAAO;EACjB,UAAM2C,CAAC,GAAG,IAAI+6H,MAAJ,CAAW,KAAKp8H,IAAL,EAAX,EAAwB,KAAKW,IAAL,EAAxB,CAAV;EACA,UAAM87H,GAAG,GAAG,KAAKC,QAAL,CAAcr7H,CAAd,EAAiBC,CAAjB,CAAZ;EACA,UAAMq7H,GAAG,GAAG,KAAKD,QAAL,CAAcp7H,CAAd,EAAiB5C,CAAjB,CAAZ;EACA,UAAMk+H,GAAG,GAAG,IAAIx7F,WAAJ,CAAgBq7F,GAAhB,EAAqBE,GAArB,CAAZ;EACA,QAAIf,EAAE,GAAG,IAAT;;EACA,QAAI;EACFA,MAAAA,EAAE,GAAG,IAAIQ,MAAJ,CAAWQ,GAAG,CAAC58H,IAAJ,EAAX,EAAuB48H,GAAG,CAACj8H,IAAJ,EAAvB,CAAL;EACD,KAFD,CAEE,OAAOk8H,GAAP,EAAY;EACZ,UAAIA,GAAG,YAAY17F,yBAAnB,EAA8C;EAC5CvrB,QAAAA,MAAM,CAACknH,GAAP,CAAW1kG,OAAX,CAAmB,QAAQ/2B,CAAR,GAAY,OAAZ,GAAsBC,CAAtB,GAA0B,OAA1B,GAAoC5C,CAAvD;EACAkX,QAAAA,MAAM,CAACknH,GAAP,CAAW1kG,OAAX,CAAmBykG,GAAnB;EACD,OAHD,MAGO;EACL,cAAMA,GAAN;EACD;EACF,KATD,SASU;;EACV,WAAOjB,EAAP;EACD;;EACDmB,EAAAA,GAAG,CAAC5E,CAAD,EAAI;EACL,WAAO,KAAK3+E,EAAL,CAAQ/8C,CAAR,GAAY07H,CAAC,CAACn4H,IAAF,EAAZ,GAAuB,KAAKw5C,EAAL,CAAQ98C,CAAR,GAAYy7H,CAAC,CAACx3H,IAAF,EAA1C;EACD;;EACDq8H,EAAAA,IAAI,GAAG;EACL,WAAOjjI,IAAI,CAAC2G,IAAL,CAAU,KAAK84C,EAAL,CAAQ/8C,CAAR,GAAY,KAAK+8C,EAAL,CAAQ/8C,CAApB,GAAwB,KAAK+8C,EAAL,CAAQ98C,CAAR,GAAY,KAAK88C,EAAL,CAAQ98C,CAAtD,CAAP;EACD;;EACDiC,EAAAA,IAAI,GAAG;EACL,WAAO,KAAK66C,EAAL,CAAQ76C,IAAR,EAAP;EACD;;EACD+9H,EAAAA,QAAQ,CAACr7H,CAAD,EAAIC,CAAJ,EAAO;EACb,UAAMf,EAAE,GAAGe,CAAC,CAACtB,IAAF,KAAWqB,CAAC,CAACrB,IAAF,EAAtB;EACA,UAAMQ,EAAE,GAAGc,CAAC,CAACX,IAAF,KAAWU,CAAC,CAACV,IAAF,EAAtB;EACA,UAAMwiC,EAAE,GAAG,IAAI/B,WAAJ,CAAgB//B,CAAC,CAACrB,IAAF,KAAWO,EAAE,GAAG,GAAhC,EAAqCc,CAAC,CAACV,IAAF,KAAWH,EAAE,GAAG,GAArD,EAA0D,GAA1D,CAAX;EACA,UAAM4iC,EAAE,GAAG,IAAIhC,WAAJ,CAAgB//B,CAAC,CAACrB,IAAF,KAAWQ,EAAX,GAAgBD,EAAE,GAAG,GAArC,EAA0Cc,CAAC,CAACV,IAAF,KAAWJ,EAAX,GAAgBC,EAAE,GAAG,GAA/D,EAAoE,GAApE,CAAX;EACA,WAAO,IAAI4gC,WAAJ,CAAgB+B,EAAhB,EAAoBC,EAApB,CAAP;EACD;;EACDnlC,EAAAA,MAAM,GAAG;EACP,QAAIP,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAM0jC,EAAE,GAAG3jC,SAAS,CAAC,CAAD,CAApB;EACA,UAAI,KAAK87C,EAAL,CAAQ/8C,CAAR,KAAc4kC,EAAE,CAACrhC,IAAH,EAAd,IAA2B,KAAKw5C,EAAL,CAAQ98C,CAAR,KAAc2kC,EAAE,CAAC1gC,IAAH,EAA7C,EACE,OAAO,IAAP,CADF,KAGE,OAAO,KAAP;EAEH,KAPD,MAOO,IAAIjD,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAM0jC,EAAE,GAAG3jC,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyB5D,SAAS,GAAG4D,SAAS,CAAC,CAAD,CAA9C;EACA,UAAI,KAAK87C,EAAL,CAAQ34C,QAAR,CAAiBwgC,EAAE,CAACj9B,aAAH,EAAjB,IAAuCtK,SAA3C,EACE,OAAO,IAAP,CADF,KAGE,OAAO,KAAP;EAEH;EACF;;EACDsK,EAAAA,aAAa,GAAG;EACd,WAAO,KAAKo1C,EAAZ;EACD;;EACDshF,EAAAA,UAAU,CAACz5H,CAAD,EAAIC,CAAJ,EAAO5C,CAAP,EAAU;EAClB,WAAOu7H,iBAAiB,CAACgC,gBAAlB,CAAmC56H,CAAC,CAACm4C,EAArC,EAAyCl4C,CAAC,CAACk4C,EAA3C,EAA+C96C,CAAC,CAAC86C,EAAjD,EAAqD,KAAKA,EAA1D,CAAP;EACD;;EACDyjF,EAAAA,iBAAiB,CAACl7F,EAAD,EAAKxrB,EAAL,EAASC,EAAT,EAAa;EAC5B,UAAMiG,EAAE,GAAGslB,EAAE,CAAC/hC,IAAH,EAAX;EACA,UAAM0c,EAAE,GAAGqlB,EAAE,CAACphC,IAAH,EAAX;EACA,UAAMU,CAAC,GAAGkV,EAAE,CAACvW,IAAH,KAAYyc,EAAtB;EACA,UAAMnb,CAAC,GAAGkV,EAAE,CAACxW,IAAH,KAAYyc,EAAtB;EACA,UAAM/d,CAAC,GAAG6X,EAAE,CAAC5V,IAAH,KAAY+b,EAAtB;EACA,UAAMjR,CAAC,GAAG+K,EAAE,CAAC7V,IAAH,KAAY+b,EAAtB;EACA,UAAMhS,GAAG,GAAGrJ,CAAC,GAAGoK,CAAJ,GAAQnK,CAAC,GAAG5C,CAAxB;EACA,UAAM6B,EAAE,GAAG,KAAKP,IAAL,KAAcyc,EAAzB;EACA,UAAMjc,EAAE,GAAG,KAAKG,IAAL,KAAc+b,EAAzB;EACA,UAAMzM,CAAC,GAAG,CAACxE,CAAC,GAAGlL,EAAJ,GAASe,CAAC,GAAGd,EAAd,IAAoBkK,GAA9B;EACA,UAAMiE,CAAC,GAAG,CAAC,CAACjQ,CAAD,GAAK6B,EAAL,GAAUc,CAAC,GAAGb,EAAf,IAAqBkK,GAA/B;EACA,UAAMjM,CAAC,GAAGsjC,EAAE,CAACpjC,IAAH,KAAYsR,CAAC,IAAIsG,EAAE,CAAC5X,IAAH,KAAYojC,EAAE,CAACpjC,IAAH,EAAhB,CAAb,GAA0CgQ,CAAC,IAAI6H,EAAE,CAAC7X,IAAH,KAAYojC,EAAE,CAACpjC,IAAH,EAAhB,CAArD;EACA,WAAOF,CAAP;EACD;;EACDw6B,EAAAA,QAAQ,CAAC53B,CAAD,EAAI;EACV,UAAM67H,EAAE,GAAG,CAAC,KAAK1jF,EAAL,CAAQ/8C,CAAR,GAAY4E,CAAC,CAACrB,IAAF,EAAb,IAAyB,GAApC;EACA,UAAMm9H,EAAE,GAAG,CAAC,KAAK3jF,EAAL,CAAQ98C,CAAR,GAAY2E,CAAC,CAACV,IAAF,EAAb,IAAyB,GAApC;EACA,UAAMy8H,EAAE,GAAG,CAAC,KAAK5jF,EAAL,CAAQ76C,IAAR,KAAiB0C,CAAC,CAAC1C,IAAF,EAAlB,IAA8B,GAAzC;EACA,WAAO,IAAIy9H,MAAJ,CAAWc,EAAX,EAAeC,EAAf,EAAmBC,EAAnB,CAAP;EACD;;EACDhlE,EAAAA,OAAO,CAACj4D,CAAD,EAAI;EACT,WAAO,KAAKwT,KAAL,CAAWxT,CAAC,CAAC6V,IAAF,EAAX,EAAqB7V,CAAC,CAACorD,IAAF,EAArB,CAAP;EACD;;EACD53C,EAAAA,KAAK,CAACrS,CAAD,EAAI5C,CAAJ,EAAO;EACV,WAAO,CAAC4C,CAAC,CAACk4C,EAAF,CAAK/8C,CAAL,GAAS,KAAK+8C,EAAL,CAAQ/8C,CAAlB,KAAwBiC,CAAC,CAAC86C,EAAF,CAAK98C,CAAL,GAAS,KAAK88C,EAAL,CAAQ98C,CAAzC,IAA8C,CAAC4E,CAAC,CAACk4C,EAAF,CAAK98C,CAAL,GAAS,KAAK88C,EAAL,CAAQ98C,CAAlB,KAAwBgC,CAAC,CAAC86C,EAAF,CAAK/8C,CAAL,GAAS,KAAK+8C,EAAL,CAAQ/8C,CAAzC,CAA9C,GAA4F,CAAnG;EACD;;EACDuD,EAAAA,IAAI,GAAG;EACL,WAAO,KAAKw5C,EAAL,CAAQ/8C,CAAf;EACD;;EACD4gI,EAAAA,YAAY,CAAClF,CAAD,EAAI;EACd,WAAO,KAAK3+E,EAAL,CAAQ/8C,CAAR,GAAY07H,CAAC,CAACx3H,IAAF,EAAZ,GAAuB,KAAK64C,EAAL,CAAQ98C,CAAR,GAAYy7H,CAAC,CAACn4H,IAAF,EAA1C;EACD;;EACDZ,EAAAA,IAAI,CAACi9H,EAAD,EAAK;EACP,SAAK7iF,EAAL,CAAQp6C,IAAR,CAAai9H,EAAb;EACD;;EACDiB,EAAAA,KAAK,CAAC5+H,CAAD,EAAI;EACP,WAAO,IAAI09H,MAAJ,CAAW19H,CAAC,GAAG,KAAK86C,EAAL,CAAQ/8C,CAAvB,EAA0BiC,CAAC,GAAG,KAAK86C,EAAL,CAAQ98C,CAAtC,CAAP;EACD;;EACD6gI,EAAAA,KAAK,GAAG;EACN,WAAO,IAAInB,MAAJ,CAAW,KAAK5iF,EAAL,CAAQ98C,CAAnB,EAAsB,CAAC,KAAK88C,EAAL,CAAQ/8C,CAA/B,CAAP;EACD;;EACD07D,EAAAA,MAAM,CAACh4D,CAAD,EAAI;EACR,WAAO,KAAKwT,KAAL,CAAWxT,CAAC,CAACorD,IAAF,EAAX,EAAqBprD,CAAC,CAAC6V,IAAF,EAArB,CAAP;EACD;;EACDxb,EAAAA,QAAQ,GAAG;EACT,WAAO,YAAY,KAAKg/C,EAAL,CAAQ/8C,CAApB,GAAwB,GAAxB,GAA8B,KAAK+8C,EAAL,CAAQ98C,CAAtC,GAA0C,GAAjD;EACD;;EACDy6E,EAAAA,GAAG,CAACghD,CAAD,EAAI;EACL,WAAO,IAAIiE,MAAJ,CAAW,KAAK5iF,EAAL,CAAQ/8C,CAAR,GAAY07H,CAAC,CAACn4H,IAAF,EAAvB,EAAiC,KAAKw5C,EAAL,CAAQ98C,CAAR,GAAYy7H,CAAC,CAACx3H,IAAF,EAA7C,CAAP;EACD;;EACDA,EAAAA,IAAI,GAAG;EACL,WAAO,KAAK64C,EAAL,CAAQ98C,CAAf;EACD;;EACD8gI,EAAAA,QAAQ,CAAC57G,EAAD,EAAKvb,EAAL,EAAS;EACf,UAAMC,EAAE,GAAG,IAAX;EACA,UAAMjF,CAAC,GAAGgF,EAAE,CAAC8wE,GAAH,CAAOv1D,EAAP,CAAV;EACA,UAAMtgB,CAAC,GAAGgF,EAAE,CAAC6wE,GAAH,CAAOv1D,EAAP,CAAV;EACA,UAAM67G,EAAE,GAAGp8H,CAAC,CAACg8H,YAAF,CAAe/7H,CAAf,CAAX;EACA,QAAIm8H,EAAE,GAAG,GAAT,EAAc,OAAOrB,MAAM,CAAC9nH,IAAd;EACd,QAAImpH,EAAE,GAAG,GAAT,EAAc,OAAOrB,MAAM,CAAChoH,KAAd;EACd,QAAI/S,CAAC,CAACrB,IAAF,KAAWsB,CAAC,CAACtB,IAAF,EAAX,GAAsB,GAAtB,IAA6BqB,CAAC,CAACV,IAAF,KAAWW,CAAC,CAACX,IAAF,EAAX,GAAsB,GAAvD,EAA4D,OAAOy7H,MAAM,CAACsB,MAAd;EAC5D,QAAIr8H,CAAC,CAAC27H,IAAF,KAAW17H,CAAC,CAAC07H,IAAF,EAAf,EAAyB,OAAOZ,MAAM,CAACuB,MAAd;EACzB,QAAI/7G,EAAE,CAAC3jB,MAAH,CAAUqI,EAAV,CAAJ,EAAmB,OAAO81H,MAAM,CAACwB,MAAd;EACnB,QAAIv3H,EAAE,CAACpI,MAAH,CAAUqI,EAAV,CAAJ,EAAmB,OAAO81H,MAAM,CAACyB,WAAd;EACnB,WAAOzB,MAAM,CAAC0B,OAAd;EACD;;EACDn8G,EAAAA,GAAG,CAACw2G,CAAD,EAAI;EACL,WAAO,IAAIiE,MAAJ,CAAW,KAAK5iF,EAAL,CAAQ/8C,CAAR,GAAY07H,CAAC,CAACn4H,IAAF,EAAvB,EAAiC,KAAKw5C,EAAL,CAAQ98C,CAAR,GAAYy7H,CAAC,CAACx3H,IAAF,EAA7C,CAAP;EACD;;EACDE,EAAAA,QAAQ,CAAC0V,EAAD,EAAKC,EAAL,EAAS;EACf,WAAOzc,IAAI,CAAC2G,IAAL,CAAU3G,IAAI,CAACwC,GAAL,CAASia,EAAE,CAACxW,IAAH,KAAYuW,EAAE,CAACvW,IAAH,EAArB,EAAgC,GAAhC,IAAuCjG,IAAI,CAACwC,GAAL,CAASia,EAAE,CAAC7V,IAAH,KAAY4V,EAAE,CAAC5V,IAAH,EAArB,EAAgC,GAAhC,CAAjD,CAAP;EACD;;EACDo9H,EAAAA,iBAAiB,CAACz8H,CAAD,EAAI5C,CAAJ,EAAO;EACtB,UAAMjC,CAAC,GAAG,KAAK+/H,YAAL,CAAkBl7H,CAAlB,EAAqB5C,CAArB,CAAV;EACA,UAAMwyC,MAAM,GAAG,KAAKrwC,QAAL,CAAcpE,CAAd,EAAiB6E,CAAjB,CAAf;EACA,QAAI08H,UAAU,GAAG,KAAKn9H,QAAL,CAAc,IAAd,EAAoBS,CAApB,CAAjB;EACA,QAAI28H,EAAE,GAAG,KAAKp9H,QAAL,CAAcS,CAAd,EAAiB5C,CAAjB,CAAT;EACA,QAAIu/H,EAAE,GAAGD,UAAT,EACEA,UAAU,GAAGC,EAAb;EAEFA,IAAAA,EAAE,GAAG,KAAKp9H,QAAL,CAAcnC,CAAd,EAAiB,IAAjB,CAAL;EACA,QAAIu/H,EAAE,GAAGD,UAAT,EACEA,UAAU,GAAGC,EAAb;EAEF,WAAO/sF,MAAM,GAAG8sF,UAAhB;EACD;;EAzLyB;EA2L5B5B,MAAM,CAAC9nH,IAAP,GAAc,CAAd;EACA8nH,MAAM,CAAChoH,KAAP,GAAe,CAAf;EACAgoH,MAAM,CAACuB,MAAP,GAAgB,CAAhB;EACAvB,MAAM,CAACsB,MAAP,GAAgB,CAAhB;EACAtB,MAAM,CAAC0B,OAAP,GAAiB,CAAjB;EACA1B,MAAM,CAACwB,MAAP,GAAgB,CAAhB;EACAxB,MAAM,CAACyB,WAAP,GAAqB,CAArB;;ECrMe,MAAMK,gBAAN,SAA+B9B,MAA/B,CAAsC;EACnDjiI,EAAAA,WAAW,GAAG;EACZ;EACA+jI,IAAAA,gBAAgB,CAAC1gI,YAAjB,CAA8BC,KAA9B,CAAoC,IAApC,EAA0CC,SAA1C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK2gI,eAAL,GAAuB,IAAvB;EACA,SAAKC,WAAL,GAAmB,IAAnB;EACA,UAAMj4H,CAAC,GAAGzI,SAAS,CAAC,CAAD,CAAnB;EACA0+H,IAAAA,MAAM,CAAC5+H,YAAP,CAAoBI,IAApB,CAAyB,IAAzB,EAA+BuI,CAA/B;EACD;;EACDk4H,EAAAA,aAAa,GAAG;EACd,WAAO,KAAKD,WAAZ;EACD;;EACDE,EAAAA,eAAe,CAACC,cAAD,EAAiB;EAC9B,SAAKJ,eAAL,GAAuBI,cAAvB;EACD;;EACDxoE,EAAAA,KAAK,CAACz2D,KAAD,EAAQ;EACX,QAAIA,KAAK,CAAC6+H,eAAV,EAA2B;EACzB,WAAKA,eAAL,GAAuB,IAAvB;EACA,WAAKC,WAAL,GAAmB9+H,KAAK,CAAC8+H,WAAzB;EACD;EACF;;EACDG,EAAAA,cAAc,GAAG;EACf,WAAO,KAAKJ,eAAZ;EACD;;EACDK,EAAAA,aAAa,CAACC,UAAD,EAAa;EACxB,SAAKN,eAAL,GAAuB,IAAvB;EACA,SAAKC,WAAL,GAAmBK,UAAnB;EACD;;EA7BkD;;ECCtC,MAAMC,QAAN,CAAe;EAC5BvkI,EAAAA,WAAW,GAAG;EACZukI,IAAAA,QAAQ,CAAClhI,YAAT,CAAsBC,KAAtB,CAA4B,IAA5B,EAAkCC,SAAlC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKmhI,IAAL,GAAY,IAAZ;EACA,SAAKC,OAAL,GAAe,IAAf;EACA,SAAKtzE,KAAL,GAAa,IAAb;EACA,SAAK0O,KAAL,GAAa,IAAb;EACD;;EACD,SAAO6kE,QAAP,CAAgB9+H,CAAhB,EAAmB0L,CAAnB,EAAsB;EACpB,UAAMqzH,EAAE,GAAG,IAAIJ,QAAJ,EAAX;EACA,UAAM/3H,EAAE,GAAG,IAAI+3H,QAAJ,EAAX;EACA,UAAM93H,EAAE,GAAG,IAAI83H,QAAJ,EAAX;EACA,UAAMK,EAAE,GAAG,IAAIL,QAAJ,EAAX;EACAI,IAAAA,EAAE,CAACH,IAAH,GAAUh4H,EAAV;EACAA,IAAAA,EAAE,CAACg4H,IAAH,GAAU/3H,EAAV;EACAA,IAAAA,EAAE,CAAC+3H,IAAH,GAAUI,EAAV;EACAA,IAAAA,EAAE,CAACJ,IAAH,GAAUG,EAAV;EACAA,IAAAA,EAAE,CAACryE,OAAH,CAAWqyE,EAAX;EACAn4H,IAAAA,EAAE,CAAC8lD,OAAH,CAAWsyE,EAAX;EACAn4H,IAAAA,EAAE,CAAC6lD,OAAH,CAAW7lD,EAAX;EACAm4H,IAAAA,EAAE,CAACtyE,OAAH,CAAW9lD,EAAX;EACA,UAAMmrC,IAAI,GAAGgtF,EAAb;EACAhtF,IAAAA,IAAI,CAACktF,OAAL,CAAaj/H,CAAb;EACA+xC,IAAAA,IAAI,CAACmtF,OAAL,CAAaxzH,CAAb;EACA,WAAOqmC,IAAP;EACD;;EACD,SAAOzzB,IAAP,CAAYle,CAAZ,EAAe;EACb,UAAMkB,CAAC,GAAGlB,CAAC,CAAC++H,KAAF,EAAV;EACA,UAAM59H,CAAC,GAAGnB,CAAC,CAACusD,GAAF,GAAQwyE,KAAR,EAAV;EACAR,IAAAA,QAAQ,CAACx7H,MAAT,CAAgB/C,CAAhB,EAAmBkB,CAAnB;EACAq9H,IAAAA,QAAQ,CAACx7H,MAAT,CAAgB/C,CAAC,CAACusD,GAAF,EAAhB,EAAyBprD,CAAzB;EACAo9H,IAAAA,QAAQ,CAACx7H,MAAT,CAAgB/C,CAAhB,EAAmBkB,CAAC,CAAC89H,KAAF,EAAnB;EACAT,IAAAA,QAAQ,CAACx7H,MAAT,CAAgB/C,CAAC,CAACusD,GAAF,EAAhB,EAAyBprD,CAAC,CAAC69H,KAAF,EAAzB;EACAh/H,IAAAA,CAAC,CAAC6+H,OAAF,CAAU39H,CAAC,CAAC2U,IAAF,EAAV;EACA7V,IAAAA,CAAC,CAAC8+H,OAAF,CAAU39H,CAAC,CAAC0U,IAAF,EAAV;EACD;;EACD,SAAO9S,MAAP,CAAc7B,CAAd,EAAiBC,CAAjB,EAAoB;EAClB,UAAMkjF,KAAK,GAAGnjF,CAAC,CAACuqD,KAAF,GAAUwzE,GAAV,EAAd;EACA,UAAMC,IAAI,GAAG/9H,CAAC,CAACsqD,KAAF,GAAUwzE,GAAV,EAAb;EACA,UAAMlD,EAAE,GAAG56H,CAAC,CAACsqD,KAAF,EAAX;EACA,UAAMuwE,EAAE,GAAG96H,CAAC,CAACuqD,KAAF,EAAX;EACA,UAAM0zE,EAAE,GAAGD,IAAI,CAACzzE,KAAL,EAAX;EACA,UAAM2zE,EAAE,GAAG/6C,KAAK,CAAC54B,KAAN,EAAX;EACAvqD,IAAAA,CAAC,CAACorD,OAAF,CAAUyvE,EAAV;EACA56H,IAAAA,CAAC,CAACmrD,OAAF,CAAU0vE,EAAV;EACA33C,IAAAA,KAAK,CAAC/3B,OAAN,CAAc6yE,EAAd;EACAD,IAAAA,IAAI,CAAC5yE,OAAL,CAAa8yE,EAAb;EACD;;EACD,SAAOC,OAAP,CAAen+H,CAAf,EAAkBC,CAAlB,EAAqB;EACnB,UAAMnB,CAAC,GAAGu+H,QAAQ,CAACG,QAAT,CAAkBx9H,CAAC,CAAC2U,IAAF,EAAlB,EAA4B1U,CAAC,CAACiqD,IAAF,EAA5B,CAAV;EACAmzE,IAAAA,QAAQ,CAACx7H,MAAT,CAAgB/C,CAAhB,EAAmBkB,CAAC,CAAC89H,KAAF,EAAnB;EACAT,IAAAA,QAAQ,CAACx7H,MAAT,CAAgB/C,CAAC,CAACusD,GAAF,EAAhB,EAAyBprD,CAAzB;EACA,WAAOnB,CAAP;EACD;;EACDs/H,EAAAA,iBAAiB,CAACC,EAAD,EAAK;EACpB,QAAI,KAAKC,cAAL,CAAoBD,EAApB,CAAJ,EAA6B,OAAO,IAAP;EAC7B,QAAI,KAAKC,cAAL,CAAoBD,EAAE,CAAChzE,GAAH,EAApB,CAAJ,EAAmC,OAAO,IAAP;EACnC,WAAO,KAAP;EACD;;EACDkzE,EAAAA,aAAa,GAAG;EACd,WAAO,IAAI7mG,WAAJ,CAAgB,KAAK6lG,OAAL,CAAax6H,aAAb,EAAhB,EAA8C,KAAK4R,IAAL,GAAY5R,aAAZ,EAA9C,CAAP;EACD;;EACD4R,EAAAA,IAAI,GAAG;EACL,WAAO,KAAK02C,GAAL,GAAWnB,IAAX,EAAP;EACD;;EACDK,EAAAA,KAAK,GAAG;EACN,WAAO,KAAKN,KAAZ;EACD;;EACDq0E,EAAAA,cAAc,CAACD,EAAD,EAAK;EACjB,QAAI,KAAKn0E,IAAL,GAAYnnD,aAAZ,GAA4B/E,QAA5B,CAAqCqgI,EAAE,CAACn0E,IAAH,GAAUnnD,aAAV,EAArC,KAAmE,KAAK4R,IAAL,GAAY5R,aAAZ,GAA4B/E,QAA5B,CAAqCqgI,EAAE,CAAC1pH,IAAH,GAAU5R,aAAV,EAArC,CAAvE,EAAwI,OAAO,IAAP;EACxI,WAAO,KAAP;EACD;;EACDy7H,EAAAA,KAAK,GAAG;EACN,WAAO,KAAKnzE,GAAL,GAAWd,KAAX,GAAmBc,GAAnB,EAAP;EACD;;EACDozE,EAAAA,KAAK,GAAG;EACN,WAAO,KAAKx0E,KAAL,CAAWoB,GAAX,EAAP;EACD;;EACDqzE,EAAAA,KAAK,GAAG;EACN,WAAO,KAAKrzE,GAAL,GAAWd,KAAX,EAAP;EACD;;EACDwzE,EAAAA,GAAG,GAAG;EACJ,WAAO,KAAKT,IAAZ;EACD;;EACDO,EAAAA,KAAK,GAAG;EACN,WAAO,KAAKP,IAAL,CAAUrzE,KAAV,CAAgBqzE,IAAvB;EACD;;EACDjyE,EAAAA,GAAG,GAAG;EACJ,WAAO,KAAKiyE,IAAL,CAAUA,IAAjB;EACD;;EACDK,EAAAA,OAAO,CAACj/H,CAAD,EAAI;EACT,SAAK6+H,OAAL,GAAe7+H,CAAf;EACD;;EACDo/H,EAAAA,KAAK,GAAG;EACN,WAAO,KAAKa,MAAL,GAAcp0E,KAAd,GAAsBwzE,GAAtB,EAAP;EACD;;EACDjmH,EAAAA,SAAS,GAAG;EACV,WAAO,KAAKoyC,IAAL,GAAYnnD,aAAZ,GAA4BvD,QAA5B,CAAqC,KAAKmV,IAAL,GAAY5R,aAAZ,EAArC,CAAP;EACD;;EACD47H,EAAAA,MAAM,GAAG;EACP,WAAO,KAAKrB,IAAL,CAAUjyE,GAAV,EAAP;EACD;;EACDuyE,EAAAA,OAAO,CAACxzH,CAAD,EAAI;EACT,SAAKihD,GAAL,GAAWsyE,OAAX,CAAmBvzH,CAAnB;EACD;;EACD0wE,EAAAA,OAAO,CAACvU,IAAD,EAAO;EACZ,SAAK5N,KAAL,GAAa4N,IAAb;EACD;;EACDI,EAAAA,OAAO,GAAG;EACR,WAAO,KAAKhO,KAAZ;EACD;;EACDimE,EAAAA,MAAM,GAAG;EACP,SAAKtB,IAAL,GAAY,IAAZ;EACD;;EACDpzE,EAAAA,IAAI,GAAG;EACL,WAAO,KAAKqzE,OAAZ;EACD;;EACDsB,EAAAA,KAAK,GAAG;EACN,WAAO,KAAKvB,IAAL,CAAUrzE,KAAV,CAAgB00E,MAAhB,EAAP;EACD;;EACDxlI,EAAAA,QAAQ,GAAG;EACT,UAAMonB,EAAE,GAAG,KAAKg9G,OAAL,CAAax6H,aAAb,EAAX;;EACA,UAAMiC,EAAE,GAAG,KAAK2P,IAAL,GAAY5R,aAAZ,EAAX;EACA,WAAOswB,SAAS,CAACC,YAAV,CAAuB/S,EAAvB,EAA2Bvb,EAA3B,CAAP;EACD;;EACDuxH,EAAAA,MAAM,GAAG;EACP,WAAO,KAAK+G,IAAL,KAAc,IAArB;EACD;;EACDwB,EAAAA,UAAU,GAAG;EACX,QAAI,KAAK50E,IAAL,GAAYnnD,aAAZ,GAA4BtE,SAA5B,CAAsC,KAAKkW,IAAL,GAAY5R,aAAZ,EAAtC,KAAsE,CAA1E,EAA6E,OAAO,IAAP,CAA7E,KAA+F,OAAO,KAAKsoD,GAAL,EAAP;EAChG;;EACD0zE,EAAAA,KAAK,GAAG;EACN,WAAO,KAAKJ,MAAL,GAAcp0E,KAAd,GAAsBo0E,MAAtB,EAAP;EACD;;EACDvzE,EAAAA,OAAO,CAACzoD,IAAD,EAAO;EACZ,SAAKsnD,KAAL,GAAatnD,IAAb;EACD;;EA1I2B;;ECDf,MAAMq8H,+BAAN,CAAsC;EACnDlmI,EAAAA,WAAW,GAAG;EACZkmI,IAAAA,+BAA+B,CAAC7iI,YAAhC,CAA6CC,KAA7C,CAAmD,IAAnD,EAAyDC,SAAzD;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK8iI,OAAL,GAAe,IAAf;EACA,SAAKC,iBAAL,GAAyB,KAAzB;EACA,UAAMC,MAAM,GAAG9iI,SAAS,CAAC,CAAD,CAAxB;EACA,SAAK4iI,OAAL,GAAeE,MAAf;EACA,SAAKD,iBAAL,GAAyBC,MAAM,CAACC,YAAP,KAAwB,GAAjD;EACD;;EACDC,EAAAA,UAAU,CAACvI,CAAD,EAAI;EACZ,QAAIh4H,CAAC,GAAG,KAAKmgI,OAAL,CAAahpF,MAAb,CAAoB6gF,CAApB,CAAR;;EACA,QAAI,KAAKmI,OAAL,CAAaK,cAAb,CAA4BxgI,CAA5B,EAA+Bg4H,CAA/B,CAAJ,EAAuC;EACrC,aAAOh4H,CAAP;EACD,KAFD,MAEO,IAAI,KAAKmgI,OAAL,CAAaM,QAAb,CAAsBzgI,CAAtB,EAAyBg4H,CAAC,CAAC/zH,aAAF,EAAzB,CAAJ,EAAiD;EACtDjE,MAAAA,CAAC,GAAGA,CAAC,CAAC++H,KAAF,EAAJ;;EACA,WAAKoB,OAAL,CAAaL,MAAb,CAAoB9/H,CAAC,CAACyrD,KAAF,EAApB;EACD;;EACD,QAAI9Z,IAAI,GAAG,KAAKwuF,OAAL,CAAazB,QAAb,CAAsB1+H,CAAC,CAACorD,IAAF,EAAtB,EAAgC4sE,CAAhC,CAAX;;EACAuG,IAAAA,QAAQ,CAACx7H,MAAT,CAAgB4uC,IAAhB,EAAsB3xC,CAAtB;EACA,UAAMgnF,SAAS,GAAGr1C,IAAlB;;EACA,OAAG;EACDA,MAAAA,IAAI,GAAG,KAAKwuF,OAAL,CAAad,OAAb,CAAqBr/H,CAArB,EAAwB2xC,IAAI,CAAC4a,GAAL,EAAxB,CAAP;EACAvsD,MAAAA,CAAC,GAAG2xC,IAAI,CAACotF,KAAL,EAAJ;EACD,KAHD,QAGS/+H,CAAC,CAACg/H,KAAF,OAAch4C,SAHvB;;EAIA,OAAG;EACD,YAAMl3E,CAAC,GAAG9P,CAAC,CAAC++H,KAAF,EAAV;;EACA,UAAIjvH,CAAC,CAAC+F,IAAF,GAASoiD,OAAT,CAAiBj4D,CAAjB,KAAuBg4H,CAAC,CAAC2C,UAAF,CAAa36H,CAAC,CAACorD,IAAF,EAAb,EAAuBt7C,CAAC,CAAC+F,IAAF,EAAvB,EAAiC7V,CAAC,CAAC6V,IAAF,EAAjC,CAA3B,EAAuE;EACrE0oH,QAAAA,QAAQ,CAACrgH,IAAT,CAAcle,CAAd;EACAA,QAAAA,CAAC,GAAGA,CAAC,CAAC++H,KAAF,EAAJ;EACD,OAHD,MAGO,IAAI/+H,CAAC,CAACyrD,KAAF,OAAcu7B,SAAlB,EAA6B;EAClC,eAAOr1C,IAAP;EACD,OAFM,MAEA;EACL3xC,QAAAA,CAAC,GAAGA,CAAC,CAACyrD,KAAF,GAAUk0E,KAAV,EAAJ;EACD;EACF,KAVD,QAUS,IAVT;EAWD;;EACDe,EAAAA,WAAW,CAACC,QAAD,EAAW;EACpB,SAAK,IAAIhmI,CAAC,GAAGgmI,QAAQ,CAACz+H,QAAT,EAAb,EAAkCvH,CAAC,CAACmJ,OAAF,EAAlC,GAAiD;EAC/C,YAAMk0H,CAAC,GAAGr9H,CAAC,CAACkJ,IAAF,EAAV;EACA,WAAK08H,UAAL,CAAgBvI,CAAhB;EACD;EACF;;EA3CkD;;ECDtC,MAAM4I,eAAN,CAAsB;EACnCzpF,EAAAA,MAAM,CAAC6gF,CAAD,EAAI;;EADyB;;ECCtB,MAAM6I,wBAAN,CAA+B;EAC5C7mI,EAAAA,WAAW,GAAG;EACZ6mI,IAAAA,wBAAwB,CAACxjI,YAAzB,CAAsCC,KAAtC,CAA4C,IAA5C,EAAkDC,SAAlD;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK8iI,OAAL,GAAe,IAAf;EACA,SAAKW,SAAL,GAAiB,IAAjB;EACA,UAAMT,MAAM,GAAG9iI,SAAS,CAAC,CAAD,CAAxB;EACA,SAAK4iI,OAAL,GAAeE,MAAf;EACA,SAAKt6H,IAAL;EACD;;EACDA,EAAAA,IAAI,GAAG;EACL,SAAK+6H,SAAL,GAAiB,KAAK3yE,QAAL,EAAjB;EACD;;EACDhX,EAAAA,MAAM,CAAC6gF,CAAD,EAAI;EACR,QAAI,CAAC,KAAK8I,SAAL,CAAerJ,MAAf,EAAL,EACE,KAAK1xH,IAAL;;EAEF,UAAM/F,CAAC,GAAG,KAAKmgI,OAAL,CAAaY,cAAb,CAA4B/I,CAA5B,EAA+B,KAAK8I,SAApC,CAAV;;EACA,SAAKA,SAAL,GAAiB9gI,CAAjB;EACA,WAAOA,CAAP;EACD;;EACDmuD,EAAAA,QAAQ,GAAG;EACT,UAAMqB,KAAK,GAAG,KAAK2wE,OAAL,CAAa1hE,QAAb,EAAd;;EACA,WAAOjP,KAAK,CAACttD,QAAN,GAAiB2B,IAAjB,EAAP;EACD;;EACD,MAAIjD,WAAJ,GAAkB;EAChB,WAAO,CAACggI,eAAD,CAAP;EACD;;EA5B2C;;ECC/B,MAAMI,sBAAN,SAAqC7jI,gBAArC,CAAsD;EACnEnD,EAAAA,WAAW,GAAG;EACZ;EACAgnI,IAAAA,sBAAsB,CAAC3jI,YAAvB,CAAoCC,KAApC,CAA0C,IAA1C,EAAgDC,SAAhD;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKu2F,IAAL,GAAY,IAAZ;;EACA,QAAIr2F,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,UAAI,OAAOD,SAAS,CAAC,CAAD,CAAhB,KAAwB,QAA5B,EAAsC;EACpC,cAAM+mC,GAAG,GAAG/mC,SAAS,CAAC,CAAD,CAArB;EACAJ,QAAAA,gBAAgB,CAACE,YAAjB,CAA8BI,IAA9B,CAAmC,IAAnC,EAAyC6mC,GAAzC;EACD,OAHD,MAGO,IAAI/mC,SAAS,CAAC,CAAD,CAAT,YAAwBq7B,WAA5B,EAAyC;EAC9C,cAAMI,GAAG,GAAGz7B,SAAS,CAAC,CAAD,CAArB;EACAJ,QAAAA,gBAAgB,CAACE,YAAjB,CAA8BI,IAA9B,CAAmC,IAAnC,EAAyC,yCAAyCu7B,GAAzC,GAA+C,8EAAxF;EACA,aAAK46D,IAAL,GAAY,IAAIh7D,WAAJ,CAAgBI,GAAhB,CAAZ;EACD;EACF,KATD,MASO,IAAIz7B,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAM8mC,GAAG,GAAG/mC,SAAS,CAAC,CAAD,CAArB;EAAA,YAA0By7B,GAAG,GAAGz7B,SAAS,CAAC,CAAD,CAAzC;EACAJ,MAAAA,gBAAgB,CAACE,YAAjB,CAA8BI,IAA9B,CAAmC,IAAnC,EAAyCujI,sBAAsB,CAACC,cAAvB,CAAsC38F,GAAtC,EAA2CtL,GAA3C,CAAzC;EACA,WAAK46D,IAAL,GAAY,IAAIh7D,WAAJ,CAAgBI,GAAhB,CAAZ;EACD;EACF;;EACD,SAAOioG,cAAP,CAAsB38F,GAAtB,EAA2BtL,GAA3B,EAAgC;EAC9B,QAAIA,GAAG,KAAK,IAAZ,EAAkB,OAAOsL,GAAG,GAAG,KAAN,GAActL,GAAd,GAAoB,IAA3B;EAClB,WAAOsL,GAAP;EACD;;EACDiwF,EAAAA,UAAU,GAAG;EACX,WAAO,KAAK3gC,IAAZ;EACD;;EA5BkE;;ECFtD,MAAMstC,eAAN,CAAsB;EACnC/wF,EAAAA,KAAK,CAACgxF,QAAD,EAAW;;EADmB;;ECiBtB,MAAMC,mBAAN,CAA0B;EACvCpnI,EAAAA,WAAW,GAAG;EACZonI,IAAAA,mBAAmB,CAAC/jI,YAApB,CAAiCC,KAAjC,CAAuC,IAAvC,EAA6CC,SAA7C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKgkI,WAAL,GAAmB,CAAnB;EACA,SAAKC,UAAL,GAAkB,IAAI3+H,SAAJ,EAAlB;EACA,SAAK4+H,aAAL,GAAqB,IAArB;EACA,SAAKn5D,UAAL,GAAkB,IAAlB;EACA,SAAKo5D,yBAAL,GAAiC,IAAjC;EACA,SAAKC,YAAL,GAAoB,IAAIh9H,KAAJ,CAAU,CAAV,EAAaC,IAAb,CAAkB,IAAlB,CAApB;EACA,SAAKg9H,SAAL,GAAiB,IAAjB;EACA,SAAKtf,QAAL,GAAgB,IAAhB;EACA,SAAKxuB,IAAL,GAAY,IAAIh7D,WAAJ,EAAZ;EACA,SAAK+oG,SAAL,GAAiB,IAAIl9H,KAAJ,CAAU,CAAV,EAAaC,IAAb,CAAkB,IAAlB,CAAjB;EACA,UAAMuB,GAAG,GAAG1I,SAAS,CAAC,CAAD,CAArB;EAAA,UAA0B5D,SAAS,GAAG4D,SAAS,CAAC,CAAD,CAA/C;EACA,SAAK6qE,UAAL,GAAkBzuE,SAAlB;EACA,SAAK6nI,yBAAL,GAAiC7nI,SAAS,GAAGynI,mBAAmB,CAACQ,2BAAjE;EACA,SAAKC,WAAL,CAAiB57H,GAAjB;EACA,SAAKs7H,aAAL,GAAqB,KAAKO,UAAL,EAArB;EACA,SAAK1f,QAAL,GAAgB,IAAIye,wBAAJ,CAA6B,IAA7B,CAAhB;EACD;;EACD,SAAOkB,gBAAP,CAAwBC,OAAxB,EAAiCC,OAAjC,EAA0C;EACxCA,IAAAA,OAAO,CAAC,CAAD,CAAP,GAAaD,OAAb;EACAC,IAAAA,OAAO,CAAC,CAAD,CAAP,GAAaA,OAAO,CAAC,CAAD,CAAP,CAAWjD,KAAX,EAAb;EACAiD,IAAAA,OAAO,CAAC,CAAD,CAAP,GAAaA,OAAO,CAAC,CAAD,CAAP,CAAWjD,KAAX,EAAb;EACA,QAAIiD,OAAO,CAAC,CAAD,CAAP,CAAWjD,KAAX,OAAuBiD,OAAO,CAAC,CAAD,CAAlC,EAAuC,MAAM,IAAI3nI,wBAAJ,CAA6B,8BAA7B,CAAN;EACxC;;EACD4nI,EAAAA,mBAAmB,CAACC,YAAD,EAAe;EAChC,UAAMjqF,OAAO,GAAG,IAAIkqF,yBAAJ,EAAhB;EACA,SAAKC,cAAL,CAAoBnqF,OAApB,EAA6BiqF,YAA7B;EACA,WAAOjqF,OAAO,CAACgqF,mBAAR,EAAP;EACD;;EACDI,EAAAA,aAAa,CAACtK,CAAD,EAAI;EACf,QAAIA,CAAC,CAACl6H,MAAF,CAAS,KAAK2jI,YAAL,CAAkB,CAAlB,CAAT,CAAJ,EAAoC,OAAO,IAAP;EACpC,QAAIzJ,CAAC,CAACl6H,MAAF,CAAS,KAAK2jI,YAAL,CAAkB,CAAlB,CAAT,CAAJ,EAAoC,OAAO,IAAP;EACpC,QAAIzJ,CAAC,CAACl6H,MAAF,CAAS,KAAK2jI,YAAL,CAAkB,CAAlB,CAAT,CAAJ,EAAoC,OAAO,IAAP;EACpC,WAAO,KAAP;EACD;;EACDjB,EAAAA,cAAc,CAACxgI,CAAD,EAAIg4H,CAAJ,EAAO;EACnB,QAAIA,CAAC,CAACl6H,MAAF,CAASkC,CAAC,CAACorD,IAAF,EAAT,EAAmB,KAAKgd,UAAxB,KAAuC4vD,CAAC,CAACl6H,MAAF,CAASkC,CAAC,CAAC6V,IAAF,EAAT,EAAmB,KAAKuyD,UAAxB,CAA3C,EACE,OAAO,IAAP;EAEF,WAAO,KAAP;EACD;;EACDi3D,EAAAA,OAAO,CAACn+H,CAAD,EAAIC,CAAJ,EAAO;EACZ,UAAMoF,CAAC,GAAGg4H,QAAQ,CAACc,OAAT,CAAiBn+H,CAAjB,EAAoBC,CAApB,CAAV;;EACA,SAAKmgI,UAAL,CAAgBv/H,GAAhB,CAAoBwE,CAApB;;EACA,WAAOA,CAAP;EACD;;EACDg8H,EAAAA,qBAAqB,CAAChD,EAAD,EAAK5uF,QAAL,EAAe;EAClC,UAAM6xF,OAAO,GAAG,IAAI7/H,SAAJ,EAAhB;EACA,UAAMq/H,OAAO,GAAGzC,EAAhB;;EACA,OAAG;EACD,YAAM9D,EAAE,GAAG8D,EAAE,CAACN,GAAH,GAAS7zE,IAAT,GAAgBnnD,aAAhB,EAAX;EACAu+H,MAAAA,OAAO,CAACzgI,GAAR,CAAY05H,EAAZ;EACA8D,MAAAA,EAAE,GAAGA,EAAE,CAACR,KAAH,EAAL;EACD,KAJD,QAISQ,EAAE,KAAKyC,OAJhB;;EAKA,UAAM57G,SAAS,GAAG,IAAIriB,cAAJ,EAAlB;EACAqiB,IAAAA,SAAS,CAACpkB,MAAV,CAAiBwgI,OAAjB,EAA0B,KAA1B;EACAp8G,IAAAA,SAAS,CAACjhB,SAAV;;EACA,QAAIihB,SAAS,CAACjkB,IAAV,KAAmB,CAAvB,EAA0B;EACxBsT,MAAAA,MAAM,CAACuiB,GAAP,CAAWC,OAAX,CAAmB7R,SAAnB;EACAA,MAAAA,SAAS,CAACrkB,GAAV,CAAcqkB,SAAS,CAAC5jB,GAAV,CAAc4jB,SAAS,CAACjkB,IAAV,KAAmB,CAAjC,CAAd,EAAmD,IAAnD;EACD;;EACD,UAAMqC,GAAG,GAAG4hB,SAAS,CAAC/hB,iBAAV,EAAZ;EACA,UAAMo+H,QAAQ,GAAG9xF,QAAQ,CAACntB,aAAT,CAAuBmtB,QAAQ,CAACruB,gBAAT,CAA0B9d,GAA1B,CAAvB,CAAjB;EACA,UAAMwzH,CAAC,GAAGgK,OAAO,CAAC52E,IAAR,EAAV;EACAq3E,IAAAA,QAAQ,CAACloH,WAAT,CAAqBy9G,CAAC,CAAC/zH,aAAF,EAArB;EACA,WAAOw+H,QAAP;EACD;;EACDC,EAAAA,UAAU,CAACC,OAAD,EAAU;EAClB,SAAKvgB,QAAL,GAAgBugB,OAAhB;EACD;;EACDb,EAAAA,UAAU,GAAG;EACX,UAAMc,EAAE,GAAG,KAAKlE,QAAL,CAAc,KAAK+C,YAAL,CAAkB,CAAlB,CAAd,EAAoC,KAAKA,YAAL,CAAkB,CAAlB,CAApC,CAAX;EACA,UAAMtlB,EAAE,GAAG,KAAKuiB,QAAL,CAAc,KAAK+C,YAAL,CAAkB,CAAlB,CAAd,EAAoC,KAAKA,YAAL,CAAkB,CAAlB,CAApC,CAAX;EACAlD,IAAAA,QAAQ,CAACx7H,MAAT,CAAgB6/H,EAAE,CAACr2E,GAAH,EAAhB,EAA0B4vD,EAA1B;EACA,UAAM0mB,EAAE,GAAG,KAAKnE,QAAL,CAAc,KAAK+C,YAAL,CAAkB,CAAlB,CAAd,EAAoC,KAAKA,YAAL,CAAkB,CAAlB,CAApC,CAAX;EACAlD,IAAAA,QAAQ,CAACx7H,MAAT,CAAgBo5G,EAAE,CAAC5vD,GAAH,EAAhB,EAA0Bs2E,EAA1B;EACAtE,IAAAA,QAAQ,CAACx7H,MAAT,CAAgB8/H,EAAE,CAACt2E,GAAH,EAAhB,EAA0Bq2E,EAA1B;EACA,WAAOA,EAAP;EACD;;EACDE,EAAAA,iBAAiB,CAAC9iI,CAAD,EAAI;EACnB,UAAM+iI,OAAO,GAAG,IAAIt+H,KAAJ,CAAU,CAAV,EAAaC,IAAb,CAAkB,IAAlB,CAAhB;EACA08H,IAAAA,mBAAmB,CAACW,gBAApB,CAAqC/hI,CAArC,EAAwC+iI,OAAxC;EACA,UAAMC,QAAQ,GAAG,IAAIv+H,KAAJ,CAAU,CAAV,EAAaC,IAAb,CAAkB,IAAlB,CAAjB;EACA08H,IAAAA,mBAAmB,CAACW,gBAApB,CAAqC/hI,CAAC,CAACusD,GAAF,EAArC,EAA8Cy2E,QAA9C;EACA,UAAMC,aAAa,GAAGjjI,CAAC,CAACg/H,KAAF,GAAUnpH,IAAV,EAAtB;EACA,QAAI,KAAKysH,aAAL,CAAmBW,aAAnB,CAAJ,EAAuC,OAAO,IAAP;EACvC,UAAMC,cAAc,GAAGljI,CAAC,CAACusD,GAAF,GAAQyyE,KAAR,GAAgBnpH,IAAhB,EAAvB;EACA,QAAI,KAAKysH,aAAL,CAAmBY,cAAnB,CAAJ,EAAwC,OAAO,IAAP;EACxC,WAAO,KAAP;EACD;;EACDxE,EAAAA,QAAQ,CAAC9+H,CAAD,EAAI0L,CAAJ,EAAO;EACb,UAAM/E,CAAC,GAAGg4H,QAAQ,CAACG,QAAT,CAAkB9+H,CAAlB,EAAqB0L,CAArB,CAAV;;EACA,SAAKg2H,UAAL,CAAgBv/H,GAAhB,CAAoBwE,CAApB;;EACA,WAAOA,CAAP;EACD;;EACD87H,EAAAA,cAAc,CAACc,UAAD,EAAahB,YAAb,EAA2B;EACvC,SAAKd,WAAL;EACA,UAAM+B,SAAS,GAAG,IAAIjlF,KAAJ,EAAlB;EACAilF,IAAAA,SAAS,CAACtgI,IAAV,CAAe,KAAKy+H,aAApB;EACA,UAAM8B,YAAY,GAAG,IAAI/5G,OAAJ,EAArB;;EACA,WAAO,CAAC85G,SAAS,CAAC9kF,KAAV,EAAR,EAA2B;EACzB,YAAMoW,IAAI,GAAG0uE,SAAS,CAAChlF,GAAV,EAAb;;EACA,UAAI,CAACilF,YAAY,CAACp6H,QAAb,CAAsByrD,IAAtB,CAAL,EAAkC;EAChC,cAAMysE,QAAQ,GAAG,KAAKmC,oBAAL,CAA0B5uE,IAA1B,EAAgC0uE,SAAhC,EAA2CjB,YAA3C,EAAyDkB,YAAzD,CAAjB;EACA,YAAIlC,QAAQ,KAAK,IAAjB,EAAuBgC,UAAU,CAAChzF,KAAX,CAAiBgxF,QAAjB;EACxB;EACF;EACF;;EACDoC,EAAAA,WAAW,CAACvjI,CAAD,EAAI;EACb,QAAI,KAAKsiI,aAAL,CAAmBtiI,CAAC,CAACorD,IAAF,EAAnB,KAAgC,KAAKk3E,aAAL,CAAmBtiI,CAAC,CAAC6V,IAAF,EAAnB,CAApC,EAAkE,OAAO,IAAP;EAClE,WAAO,KAAP;EACD;;EACD4qH,EAAAA,QAAQ,CAACzgI,CAAD,EAAIgG,CAAJ,EAAO;EACb,SAAK4tF,IAAL,CAAUr4D,cAAV,CAAyBv7B,CAAC,CAACorD,IAAF,GAASnnD,aAAT,EAAzB,EAAmDjE,CAAC,CAAC6V,IAAF,GAAS5R,aAAT,EAAnD;;EACA,UAAMyT,IAAI,GAAG,KAAKk8E,IAAL,CAAUlzF,QAAV,CAAmBsF,CAAnB,CAAb;;EACA,WAAO0R,IAAI,GAAG,KAAK8pH,yBAAnB;EACD;;EACDhoH,EAAAA,WAAW,GAAG;EACZ,WAAO,IAAI9T,QAAJ,CAAa,KAAKg8H,SAAlB,CAAP;EACD;;EACDG,EAAAA,WAAW,CAAC57H,GAAD,EAAM;EACf,UAAM8C,MAAM,GAAG9C,GAAG,CAACgB,QAAJ,EAAf;EACA,UAAM+B,MAAM,GAAG/C,GAAG,CAACiB,SAAJ,EAAf;EACA,QAAI2qF,MAAM,GAAG,GAAb;EACA,QAAI9oF,MAAM,GAAGC,MAAb,EACE6oF,MAAM,GAAG9oF,MAAM,GAAG,IAAlB,CADF,KAGE8oF,MAAM,GAAG7oF,MAAM,GAAG,IAAlB;EAEF,SAAKy4H,YAAL,CAAkB,CAAlB,IAAuB,IAAIxF,MAAJ,CAAW,CAACh2H,GAAG,CAACoB,OAAJ,KAAgBpB,GAAG,CAACsB,OAAJ,EAAjB,IAAkC,GAA7C,EAAkDtB,GAAG,CAACqB,OAAJ,KAAgBuqF,MAAlE,CAAvB;EACA,SAAK4vC,YAAL,CAAkB,CAAlB,IAAuB,IAAIxF,MAAJ,CAAWh2H,GAAG,CAACsB,OAAJ,KAAgBsqF,MAA3B,EAAmC5rF,GAAG,CAACuB,OAAJ,KAAgBqqF,MAAnD,CAAvB;EACA,SAAK4vC,YAAL,CAAkB,CAAlB,IAAuB,IAAIxF,MAAJ,CAAWh2H,GAAG,CAACoB,OAAJ,KAAgBwqF,MAA3B,EAAmC5rF,GAAG,CAACuB,OAAJ,KAAgBqqF,MAAnD,CAAvB;EACA,SAAK6vC,SAAL,GAAiB,IAAIh8H,QAAJ,CAAa,KAAK+7H,YAAL,CAAkB,CAAlB,EAAqBx9H,aAArB,EAAb,EAAmD,KAAKw9H,YAAL,CAAkB,CAAlB,EAAqBx9H,aAArB,EAAnD,CAAjB;;EACA,SAAKy9H,SAAL,CAAep5H,eAAf,CAA+B,KAAKm5H,YAAL,CAAkB,CAAlB,EAAqBx9H,aAArB,EAA/B;EACD;;EACDu/H,EAAAA,sBAAsB,CAACrB,YAAD,EAAe;EACnC,UAAMjqF,OAAO,GAAG,IAAIurF,0BAAJ,EAAhB;EACA,SAAKpB,cAAL,CAAoBnqF,OAApB,EAA6BiqF,YAA7B;EACA,WAAOjqF,OAAO,CAACwrF,YAAR,EAAP;EACD;;EACDC,EAAAA,WAAW,CAACxB,YAAD,EAAe;EACxB,UAAMxB,QAAQ,GAAG,IAAIr3G,OAAJ,EAAjB;;EACA,SAAK,IAAI3uB,CAAC,GAAG,KAAK2mI,UAAL,CAAgBp/H,QAAhB,EAAb,EAAyCvH,CAAC,CAACmJ,OAAF,EAAzC,GAAwD;EACtD,YAAMy7H,EAAE,GAAG5kI,CAAC,CAACkJ,IAAF,EAAX;EACA,YAAMm0H,CAAC,GAAGuH,EAAE,CAACn0E,IAAH,EAAV;EACA,UAAI+2E,YAAY,IAAI,CAAC,KAAKG,aAAL,CAAmBtK,CAAnB,CAArB,EAA4C2I,QAAQ,CAAC5+H,GAAT,CAAai2H,CAAb;EAC5C,YAAM4L,EAAE,GAAGrE,EAAE,CAAC1pH,IAAH,EAAX;EACA,UAAIssH,YAAY,IAAI,CAAC,KAAKG,aAAL,CAAmBsB,EAAnB,CAArB,EAA6CjD,QAAQ,CAAC5+H,GAAT,CAAa6hI,EAAb;EAC9C;;EACD,WAAOjD,QAAP;EACD;;EACD2C,EAAAA,oBAAoB,CAAC5uE,IAAD,EAAO0uE,SAAP,EAAkBjB,YAAlB,EAAgCkB,YAAhC,EAA8C;EAChE,QAAI/L,IAAI,GAAG5iE,IAAX;EACA,QAAImvE,SAAS,GAAG,CAAhB;EACA,QAAIC,OAAO,GAAG,KAAd;;EACA,OAAG;EACD,WAAKnC,SAAL,CAAekC,SAAf,IAA4BvM,IAA5B;EACA,UAAI,KAAKiM,WAAL,CAAiBjM,IAAjB,CAAJ,EAA4BwM,OAAO,GAAG,IAAV;EAC5B,YAAMv3E,GAAG,GAAG+qE,IAAI,CAAC/qE,GAAL,EAAZ;EACA,UAAI,CAAC82E,YAAY,CAACp6H,QAAb,CAAsBsjD,GAAtB,CAAL,EAAiC62E,SAAS,CAACtgI,IAAV,CAAeypD,GAAf;EACjC82E,MAAAA,YAAY,CAACthI,GAAb,CAAiBu1H,IAAjB;EACAuM,MAAAA,SAAS;EACTvM,MAAAA,IAAI,GAAGA,IAAI,CAAC0H,KAAL,EAAP;EACD,KARD,QAQS1H,IAAI,KAAK5iE,IARlB;;EASA,QAAIovE,OAAO,IAAI,CAAC3B,YAAhB,EAA8B,OAAO,IAAP;EAC9B,WAAO,KAAKR,SAAZ;EACD;;EACDljE,EAAAA,QAAQ,GAAG;EACT,QAAIlhE,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,aAAO,KAAK8jI,UAAZ;EACD,KAFD,MAEO,IAAI/jI,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMmzC,QAAQ,GAAGpzC,SAAS,CAAC,CAAD,CAA1B;EACA,YAAMwmI,SAAS,GAAG,KAAKC,eAAL,CAAqB,KAArB,CAAlB;EACA,YAAMx0E,KAAK,GAAG,IAAI/qD,KAAJ,CAAUs/H,SAAS,CAAC5hI,IAAV,EAAV,EAA4BuC,IAA5B,CAAiC,IAAjC,CAAd;EACA,UAAI/J,CAAC,GAAG,CAAR;;EACA,WAAK,IAAImvB,EAAE,GAAGi6G,SAAS,CAAC7hI,QAAV,EAAd,EAAoC4nB,EAAE,CAAChmB,OAAH,EAApC,GAAoD;EAClD,cAAMy7H,EAAE,GAAGz1G,EAAE,CAACjmB,IAAH,EAAX;EACA2rD,QAAAA,KAAK,CAAC70D,CAAC,EAAF,CAAL,GAAag2C,QAAQ,CAACvwB,gBAAT,CAA0B,CAACm/G,EAAE,CAACn0E,IAAH,GAAUnnD,aAAV,EAAD,EAA4Bs7H,EAAE,CAAC1pH,IAAH,GAAU5R,aAAV,EAA5B,CAA1B,CAAb;EACD;;EACD,aAAO0sC,QAAQ,CAACxsB,qBAAT,CAA+BqrC,KAA/B,CAAP;EACD;EACF;;EACDy0E,EAAAA,oBAAoB,CAAC9B,YAAD,EAAe;EACjC,UAAM3yE,KAAK,GAAG,IAAI7sD,SAAJ,EAAd;EACA,UAAMuhI,eAAe,GAAG,IAAI56G,OAAJ,EAAxB;;EACA,SAAK,IAAI3uB,CAAC,GAAG,KAAK2mI,UAAL,CAAgBp/H,QAAhB,EAAb,EAAyCvH,CAAC,CAACmJ,OAAF,EAAzC,GAAwD;EACtD,YAAMy7H,EAAE,GAAG5kI,CAAC,CAACkJ,IAAF,EAAX;EACA,YAAMm0H,CAAC,GAAGuH,EAAE,CAACn0E,IAAH,EAAV;;EACA,UAAI,CAAC84E,eAAe,CAACj7H,QAAhB,CAAyB+uH,CAAzB,CAAL,EAAkC;EAChCkM,QAAAA,eAAe,CAACniI,GAAhB,CAAoBi2H,CAApB;EACA,YAAImK,YAAY,IAAI,CAAC,KAAKG,aAAL,CAAmBtK,CAAnB,CAArB,EACExoE,KAAK,CAACztD,GAAN,CAAUw9H,EAAV;EAEH;;EACD,YAAM4E,EAAE,GAAG5E,EAAE,CAAChzE,GAAH,EAAX;EACA,YAAMq3E,EAAE,GAAGO,EAAE,CAAC/4E,IAAH,EAAX;;EACA,UAAI,CAAC84E,eAAe,CAACj7H,QAAhB,CAAyB26H,EAAzB,CAAL,EAAmC;EACjCM,QAAAA,eAAe,CAACniI,GAAhB,CAAoB6hI,EAApB;EACA,YAAIzB,YAAY,IAAI,CAAC,KAAKG,aAAL,CAAmBsB,EAAnB,CAArB,EACEp0E,KAAK,CAACztD,GAAN,CAAUoiI,EAAV;EAEH;EACF;;EACD,WAAO30E,KAAP;EACD;;EACDuyE,EAAAA,gBAAgB,CAACI,YAAD,EAAe;EAC7B,UAAMjqF,OAAO,GAAG,IAAIksF,wBAAJ,EAAhB;EACA,SAAK/B,cAAL,CAAoBnqF,OAApB,EAA6BiqF,YAA7B;EACA,WAAOjqF,OAAO,CAAC6pF,gBAAR,EAAP;EACD;;EACDiC,EAAAA,eAAe,CAAC7B,YAAD,EAAe;EAC5B,SAAKd,WAAL;EACA,UAAM7xE,KAAK,GAAG,IAAI7sD,SAAJ,EAAd;EACA,UAAMygI,SAAS,GAAG,IAAIjlF,KAAJ,EAAlB;EACAilF,IAAAA,SAAS,CAACtgI,IAAV,CAAe,KAAKy+H,aAApB;EACA,UAAM8B,YAAY,GAAG,IAAI/5G,OAAJ,EAArB;;EACA,WAAO,CAAC85G,SAAS,CAAC9kF,KAAV,EAAR,EAA2B;EACzB,YAAMoW,IAAI,GAAG0uE,SAAS,CAAChlF,GAAV,EAAb;;EACA,UAAI,CAACilF,YAAY,CAACp6H,QAAb,CAAsByrD,IAAtB,CAAL,EAAkC;EAChC,cAAM2vE,KAAK,GAAG3vE,IAAI,CAACsrE,UAAL,EAAd;EACA,YAAImC,YAAY,IAAI,CAAC,KAAKoB,WAAL,CAAiBc,KAAjB,CAArB,EAA8C70E,KAAK,CAACztD,GAAN,CAAUsiI,KAAV;EAC9CjB,QAAAA,SAAS,CAACtgI,IAAV,CAAe4xD,IAAI,CAACjJ,KAAL,EAAf;EACA23E,QAAAA,SAAS,CAACtgI,IAAV,CAAe4xD,IAAI,CAACnI,GAAL,GAAWd,KAAX,EAAf;EACA43E,QAAAA,YAAY,CAACthI,GAAb,CAAiB2yD,IAAjB;EACA2uE,QAAAA,YAAY,CAACthI,GAAb,CAAiB2yD,IAAI,CAACnI,GAAL,EAAjB;EACD;EACF;;EACD,WAAOiD,KAAP;EACD;;EACDswE,EAAAA,MAAM,CAAC9/H,CAAD,EAAI;EACRu+H,IAAAA,QAAQ,CAACx7H,MAAT,CAAgB/C,CAAhB,EAAmBA,CAAC,CAAC++H,KAAF,EAAnB;EACAR,IAAAA,QAAQ,CAACx7H,MAAT,CAAgB/C,CAAC,CAACusD,GAAF,EAAhB,EAAyBvsD,CAAC,CAACusD,GAAF,GAAQwyE,KAAR,EAAzB;EACA,UAAMuF,IAAI,GAAGtkI,CAAC,CAACusD,GAAF,EAAb;EACA,UAAMg4E,IAAI,GAAGvkI,CAAC,CAACi/H,GAAF,EAAb;EACA,UAAMuF,OAAO,GAAGxkI,CAAC,CAACi/H,GAAF,GAAQ1yE,GAAR,EAAhB;;EACA,SAAK+0E,UAAL,CAAgBj/H,MAAhB,CAAuBrC,CAAvB;;EACA,SAAKshI,UAAL,CAAgBj/H,MAAhB,CAAuBiiI,IAAvB;;EACA,SAAKhD,UAAL,CAAgBj/H,MAAhB,CAAuBkiI,IAAvB;;EACA,SAAKjD,UAAL,CAAgBj/H,MAAhB,CAAuBmiI,OAAvB;;EACAxkI,IAAAA,CAAC,CAAC8/H,MAAF;EACAwE,IAAAA,IAAI,CAACxE,MAAL;EACAyE,IAAAA,IAAI,CAACzE,MAAL;EACA0E,IAAAA,OAAO,CAAC1E,MAAR;EACD;;EACDiB,EAAAA,cAAc,CAAC/I,CAAD,EAAIhxC,SAAJ,EAAe;EAC3B,QAAIy9C,IAAI,GAAG,CAAX;;EACA,UAAMC,OAAO,GAAG,KAAKpD,UAAL,CAAgBn/H,IAAhB,EAAhB;;EACA,QAAInC,CAAC,GAAGgnF,SAAR;;EACA,WAAO,IAAP,EAAa;EACXy9C,MAAAA,IAAI;EACJ,UAAIA,IAAI,GAAGC,OAAX,EACE,MAAM,IAAI1D,sBAAJ,CAA2BhhI,CAAC,CAACy/H,aAAF,EAA3B,CAAN;EAEF,UAAIzH,CAAC,CAACl6H,MAAF,CAASkC,CAAC,CAACorD,IAAF,EAAT,KAAsB4sE,CAAC,CAACl6H,MAAF,CAASkC,CAAC,CAAC6V,IAAF,EAAT,CAA1B,EACE,MADF,KAEK,IAAImiH,CAAC,CAAC//D,OAAF,CAAUj4D,CAAV,CAAJ,EACHA,CAAC,GAAGA,CAAC,CAACusD,GAAF,EAAJ,CADG,KAEA,IAAI,CAACyrE,CAAC,CAAC//D,OAAF,CAAUj4D,CAAC,CAACyrD,KAAF,EAAV,CAAL,EACHzrD,CAAC,GAAGA,CAAC,CAACyrD,KAAF,EAAJ,CADG,KAEA,IAAI,CAACusE,CAAC,CAAC//D,OAAF,CAAUj4D,CAAC,CAACigI,KAAF,EAAV,CAAL,EACHjgI,CAAC,GAAGA,CAAC,CAACigI,KAAF,EAAJ,CADG,KAGH;EAEH;;EACD,WAAOjgI,CAAP;EACD;;EACDsgI,EAAAA,YAAY,GAAG;EACb,WAAO,KAAKl4D,UAAZ;EACD;;EACDu8D,EAAAA,sBAAsB,CAACh0F,QAAD,EAAW;EAC/B,SAAK0xF,cAAL,CAAoB,IAAIuC,2BAAJ,EAApB,EAAuD,IAAvD;EACA,UAAMC,KAAK,GAAG,IAAIliI,SAAJ,EAAd;EACA,UAAM6sD,KAAK,GAAG,KAAKy0E,oBAAL,CAA0B,KAA1B,CAAd;;EACA,SAAK,IAAItpI,CAAC,GAAG60D,KAAK,CAACttD,QAAN,EAAb,EAA+BvH,CAAC,CAACmJ,OAAF,EAA/B,GAA8C;EAC5C,YAAMy7H,EAAE,GAAG5kI,CAAC,CAACkJ,IAAF,EAAX;EACAghI,MAAAA,KAAK,CAAC9iI,GAAN,CAAU,KAAKwgI,qBAAL,CAA2BhD,EAA3B,EAA+B5uF,QAA/B,CAAV;EACD;;EACD,WAAOk0F,KAAP;EACD;;EACDC,EAAAA,iBAAiB,CAACn0F,QAAD,EAAW;EAC1B,UAAMo0F,QAAQ,GAAG,KAAKJ,sBAAL,CAA4Bh0F,QAA5B,CAAjB;EACA,WAAOA,QAAQ,CAACvvB,wBAAT,CAAkC4K,eAAe,CAACS,eAAhB,CAAgCs4G,QAAhC,CAAlC,CAAP;EACD;;EACDrB,EAAAA,YAAY,CAAC/yF,QAAD,EAAW;EACrB,UAAMq0F,UAAU,GAAG,KAAKxB,sBAAL,CAA4B,KAA5B,CAAnB;EACA,UAAMyB,IAAI,GAAG,IAAIxgI,KAAJ,CAAUugI,UAAU,CAAC7iI,IAAX,EAAV,EAA6BuC,IAA7B,CAAkC,IAAlC,CAAb;EACA,QAAI/J,CAAC,GAAG,CAAR;;EACA,SAAK,IAAImvB,EAAE,GAAGk7G,UAAU,CAAC9iI,QAAX,EAAd,EAAqC4nB,EAAE,CAAChmB,OAAH,EAArC,GAAqD;EACnD,YAAMohI,KAAK,GAAGp7G,EAAE,CAACjmB,IAAH,EAAd;EACAohI,MAAAA,IAAI,CAACtqI,CAAC,EAAF,CAAJ,GAAYg2C,QAAQ,CAACntB,aAAT,CAAuBmtB,QAAQ,CAACruB,gBAAT,CAA0B4iH,KAA1B,CAAvB,CAAZ;EACD;;EACD,WAAOv0F,QAAQ,CAACvvB,wBAAT,CAAkC6jH,IAAlC,CAAP;EACD;;EACD1E,EAAAA,UAAU,CAACvI,CAAD,EAAI;EACZ,QAAIh4H,CAAC,GAAG,KAAKm3C,MAAL,CAAY6gF,CAAZ,CAAR;EACA,QAAIA,CAAC,CAACl6H,MAAF,CAASkC,CAAC,CAACorD,IAAF,EAAT,EAAmB,KAAKgd,UAAxB,KAAuC4vD,CAAC,CAACl6H,MAAF,CAASkC,CAAC,CAAC6V,IAAF,EAAT,EAAmB,KAAKuyD,UAAxB,CAA3C,EACE,OAAOpoE,CAAP;EAEF,QAAI2xC,IAAI,GAAG,KAAK+sF,QAAL,CAAc1+H,CAAC,CAACorD,IAAF,EAAd,EAAwB4sE,CAAxB,CAAX;EACAuG,IAAAA,QAAQ,CAACx7H,MAAT,CAAgB4uC,IAAhB,EAAsB3xC,CAAtB;EACA,UAAMgnF,SAAS,GAAGr1C,IAAlB;;EACA,OAAG;EACDA,MAAAA,IAAI,GAAG,KAAK0tF,OAAL,CAAar/H,CAAb,EAAgB2xC,IAAI,CAAC4a,GAAL,EAAhB,CAAP;EACAvsD,MAAAA,CAAC,GAAG2xC,IAAI,CAACotF,KAAL,EAAJ;EACD,KAHD,QAGS/+H,CAAC,CAACg/H,KAAF,OAAch4C,SAHvB;;EAIA,WAAOA,SAAP;EACD;;EACD7vC,EAAAA,MAAM,GAAG;EACP,QAAI55C,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,UAAID,SAAS,CAAC,CAAD,CAAT,YAAwB0+H,MAA5B,EAAoC;EAClC,cAAMjE,CAAC,GAAGz6H,SAAS,CAAC,CAAD,CAAnB;EACA,eAAO,KAAK6kH,QAAL,CAAcjrE,MAAd,CAAqB6gF,CAArB,CAAP;EACD,OAHD,MAGO,IAAIz6H,SAAS,CAAC,CAAD,CAAT,YAAwBc,UAA5B,EAAwC;EAC7C,cAAM2H,CAAC,GAAGzI,SAAS,CAAC,CAAD,CAAnB;EACA,eAAO,KAAK6kH,QAAL,CAAcjrE,MAAd,CAAqB,IAAI8kF,MAAJ,CAAWj2H,CAAX,CAArB,CAAP;EACD;EACF,KARD,MAQO,IAAIzI,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMikB,EAAE,GAAGlkB,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyB2I,EAAE,GAAG3I,SAAS,CAAC,CAAD,CAAvC;;EACA,YAAMyC,CAAC,GAAG,KAAKoiH,QAAL,CAAcjrE,MAAd,CAAqB,IAAI8kF,MAAJ,CAAWx6G,EAAX,CAArB,CAAV;;EACA,UAAIzhB,CAAC,KAAK,IAAV,EAAgB,OAAO,IAAP;EAChB,UAAI2xC,IAAI,GAAG3xC,CAAX;EACA,UAAIA,CAAC,CAAC6V,IAAF,GAAS5R,aAAT,GAAyB/E,QAAzB,CAAkCuiB,EAAlC,CAAJ,EAA2CkwB,IAAI,GAAG3xC,CAAC,CAACusD,GAAF,EAAP;EAC3C,UAAI44E,OAAO,GAAGxzF,IAAd;;EACA,SAAG;EACD,YAAIwzF,OAAO,CAACtvH,IAAR,GAAe5R,aAAf,GAA+B/E,QAA/B,CAAwCgH,EAAxC,CAAJ,EAAiD,OAAOi/H,OAAP;EACjDA,QAAAA,OAAO,GAAGA,OAAO,CAAC15E,KAAR,EAAV;EACD,OAHD,QAGS05E,OAAO,KAAKxzF,IAHrB;;EAIA,aAAO,IAAP;EACD;EACF;;EA9UsC;;EAgVzC,MAAMizF,2BAAN,CAAkC;EAChCz0F,EAAAA,KAAK,CAACgxF,QAAD,EAAW;EACd,UAAMjgI,CAAC,GAAGigI,QAAQ,CAAC,CAAD,CAAR,CAAY/1E,IAAZ,GAAmBnnD,aAAnB,EAAV;EACA,UAAM9C,CAAC,GAAGggI,QAAQ,CAAC,CAAD,CAAR,CAAY/1E,IAAZ,GAAmBnnD,aAAnB,EAAV;EACA,UAAM1F,CAAC,GAAG4iI,QAAQ,CAAC,CAAD,CAAR,CAAY/1E,IAAZ,GAAmBnnD,aAAnB,EAAV;EACA,UAAMw3H,EAAE,GAAGp6F,QAAQ,CAACa,cAAT,CAAwBhhC,CAAxB,EAA2BC,CAA3B,EAA8B5C,CAA9B,CAAX;EACA,UAAM6mI,QAAQ,GAAG,IAAInJ,MAAJ,CAAWR,EAAX,CAAjB;;EACA,SAAK,IAAI9gI,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,CAApB,EAAuBA,CAAC,EAAxB,EACEwmI,QAAQ,CAACxmI,CAAD,CAAR,CAAYskI,GAAZ,GAAkBJ,OAAlB,CAA0BuG,QAA1B;EAEH;;EACD,MAAIxkI,WAAJ,GAAkB;EAChB,WAAO,CAACsgI,eAAD,CAAP;EACD;;EAb+B;;EAelC,MAAMkD,wBAAN,CAA+B;EAC7BpqI,EAAAA,WAAW,GAAG;EACZoqI,IAAAA,wBAAwB,CAAC/mI,YAAzB,CAAsCC,KAAtC,CAA4C,IAA5C,EAAkDC,SAAlD;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKgoI,QAAL,GAAgB,IAAI1iI,SAAJ,EAAhB;EACD;;EACDo/H,EAAAA,gBAAgB,GAAG;EACjB,WAAO,KAAKsD,QAAZ;EACD;;EACDl1F,EAAAA,KAAK,CAACgxF,QAAD,EAAW;EACd,SAAKkE,QAAL,CAActjI,GAAd,CAAkBo/H,QAAlB;EACD;;EACD,MAAIvgI,WAAJ,GAAkB;EAChB,WAAO,CAACsgI,eAAD,CAAP;EACD;;EAf4B;;EAiB/B,MAAMkB,yBAAN,CAAgC;EAC9BpoI,EAAAA,WAAW,GAAG;EACZooI,IAAAA,yBAAyB,CAAC/kI,YAA1B,CAAuCC,KAAvC,CAA6C,IAA7C,EAAmDC,SAAnD;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKgoI,QAAL,GAAgB,IAAI1iI,SAAJ,EAAhB;EACD;;EACDwtC,EAAAA,KAAK,CAACgxF,QAAD,EAAW;EACd,SAAKkE,QAAL,CAActjI,GAAd,CAAkB,CAACo/H,QAAQ,CAAC,CAAD,CAAR,CAAY/1E,IAAZ,EAAD,EAAqB+1E,QAAQ,CAAC,CAAD,CAAR,CAAY/1E,IAAZ,EAArB,EAAyC+1E,QAAQ,CAAC,CAAD,CAAR,CAAY/1E,IAAZ,EAAzC,CAAlB;EACD;;EACD82E,EAAAA,mBAAmB,GAAG;EACpB,WAAO,KAAKmD,QAAZ;EACD;;EACD,MAAIzkI,WAAJ,GAAkB;EAChB,WAAO,CAACsgI,eAAD,CAAP;EACD;;EAf6B;;EAiBhC,MAAMuC,0BAAN,CAAiC;EAC/BzpI,EAAAA,WAAW,GAAG;EACZypI,IAAAA,0BAA0B,CAACpmI,YAA3B,CAAwCC,KAAxC,CAA8C,IAA9C,EAAoDC,SAApD;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKioI,UAAL,GAAkB,IAAIvhI,cAAJ,EAAlB;EACA,SAAKwhI,UAAL,GAAkB,IAAI5iI,SAAJ,EAAlB;EACD;;EACD6iI,EAAAA,iBAAiB,CAAChhI,GAAD,EAAM;EACrB,QAAIm3C,GAAG,GAAG,EAAV;EACA,QAAIn3C,GAAG,CAAChH,MAAJ,IAAc,CAAlB,EAAqBm+C,GAAG,GAAGpnB,SAAS,CAACC,YAAV,CAAuBhwB,GAAG,CAAC,CAAD,CAA1B,EAA+BA,GAAG,CAAC,CAAD,CAAlC,CAAN,CAArB,KACA,IAAIA,GAAG,CAAChH,MAAJ,IAAc,CAAlB,EAAqBm+C,GAAG,GAAGpnB,SAAS,CAACyuE,OAAV,CAAkBx+F,GAAG,CAAC,CAAD,CAArB,CAAN;EAEtB;;EACD2rC,EAAAA,KAAK,CAACgxF,QAAD,EAAW;EACd,SAAKmE,UAAL,CAAgBtiI,KAAhB;;EACA,SAAK,IAAIrI,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,CAApB,EAAuBA,CAAC,EAAxB,EAA4B;EAC1B,YAAMq9H,CAAC,GAAGmJ,QAAQ,CAACxmI,CAAD,CAAR,CAAYywD,IAAZ,EAAV;;EACA,WAAKk6E,UAAL,CAAgBvjI,GAAhB,CAAoBi2H,CAAC,CAAC/zH,aAAF,EAApB;EACD;;EACD,QAAI,KAAKqhI,UAAL,CAAgBnjI,IAAhB,KAAyB,CAA7B,EAAgC;EAC9B,WAAKmjI,UAAL,CAAgBngI,SAAhB;;EACA,YAAMX,GAAG,GAAG,KAAK8gI,UAAL,CAAgBjhI,iBAAhB,EAAZ;;EACA,UAAIG,GAAG,CAAChH,MAAJ,KAAe,CAAnB,EACE,OAAO,IAAP;;EAEF,WAAK+nI,UAAL,CAAgBxjI,GAAhB,CAAoByC,GAApB;EACD;EACF;;EACDk/H,EAAAA,YAAY,GAAG;EACb,WAAO,KAAK6B,UAAZ;EACD;;EACD,MAAI3kI,WAAJ,GAAkB;EAChB,WAAO,CAACsgI,eAAD,CAAP;EACD;;EAlC8B;;EAoCjCE,mBAAmB,CAACwD,2BAApB,GAAkDA,2BAAlD;EACAxD,mBAAmB,CAACgD,wBAApB,GAA+CA,wBAA/C;EACAhD,mBAAmB,CAACgB,yBAApB,GAAgDA,yBAAhD;EACAhB,mBAAmB,CAACqC,0BAApB,GAAiDA,0BAAjD;EACArC,mBAAmB,CAACQ,2BAApB,GAAkD,IAAlD;;ECxbe,MAAM6D,OAAN,CAAc;EAC3BzrI,EAAAA,WAAW,GAAG;EACZyrI,IAAAA,OAAO,CAACpoI,YAAR,CAAqBC,KAArB,CAA2B,IAA3B,EAAiCC,SAAjC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKqoI,GAAL,GAAW,IAAX;EACA,SAAK7rE,KAAL,GAAa,IAAb;;EACA,QAAIt8D,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMikB,EAAE,GAAGlkB,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyB2I,EAAE,GAAG3I,SAAS,CAAC,CAAD,CAAvC;EACA,WAAKmoI,GAAL,GAAW,IAAI9sG,WAAJ,CAAgBnX,EAAhB,EAAoBvb,EAApB,CAAX;EACD,KAHD,MAGO,IAAI3I,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMikB,EAAE,GAAGlkB,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyB2I,EAAE,GAAG3I,SAAS,CAAC,CAAD,CAAvC;EAAA,YAA4CkqE,IAAI,GAAGlqE,SAAS,CAAC,CAAD,CAA5D;EACA,WAAKmoI,GAAL,GAAW,IAAI9sG,WAAJ,CAAgBnX,EAAhB,EAAoBvb,EAApB,CAAX;EACA,WAAK2zD,KAAL,GAAa4N,IAAb;EACD,KAJM,MAIA,IAAIlqE,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAM/D,EAAE,GAAG8D,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyB6I,EAAE,GAAG7I,SAAS,CAAC,CAAD,CAAvC;EAAA,YAA4CooI,EAAE,GAAGpoI,SAAS,CAAC,CAAD,CAA1D;EAAA,YAA+D7D,EAAE,GAAG6D,SAAS,CAAC,CAAD,CAA7E;EAAA,YAAkF8I,EAAE,GAAG9I,SAAS,CAAC,CAAD,CAAhG;EAAA,YAAqGqoI,EAAE,GAAGroI,SAAS,CAAC,CAAD,CAAnH;EACAkoI,MAAAA,OAAO,CAACpoI,YAAR,CAAqBI,IAArB,CAA0B,IAA1B,EAAgC,IAAIY,UAAJ,CAAe5E,EAAf,EAAmB2M,EAAnB,EAAuBu/H,EAAvB,CAAhC,EAA4D,IAAItnI,UAAJ,CAAe3E,EAAf,EAAmB2M,EAAnB,EAAuBu/H,EAAvB,CAA5D;EACD,KAHM,MAGA,IAAIroI,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAM/D,EAAE,GAAG8D,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyB6I,EAAE,GAAG7I,SAAS,CAAC,CAAD,CAAvC;EAAA,YAA4CooI,EAAE,GAAGpoI,SAAS,CAAC,CAAD,CAA1D;EAAA,YAA+D7D,EAAE,GAAG6D,SAAS,CAAC,CAAD,CAA7E;EAAA,YAAkF8I,EAAE,GAAG9I,SAAS,CAAC,CAAD,CAAhG;EAAA,YAAqGqoI,EAAE,GAAGroI,SAAS,CAAC,CAAD,CAAnH;EAAA,YAAwHkqE,IAAI,GAAGlqE,SAAS,CAAC,CAAD,CAAxI;EACAkoI,MAAAA,OAAO,CAACpoI,YAAR,CAAqBI,IAArB,CAA0B,IAA1B,EAAgC,IAAIY,UAAJ,CAAe5E,EAAf,EAAmB2M,EAAnB,EAAuBu/H,EAAvB,CAAhC,EAA4D,IAAItnI,UAAJ,CAAe3E,EAAf,EAAmB2M,EAAnB,EAAuBu/H,EAAvB,CAA5D,EAAwFn+D,IAAxF;EACD;EACF;;EACDuV,EAAAA,cAAc,GAAG;EACf,WAAO,KAAK0oD,GAAZ;EACD;;EACDG,EAAAA,OAAO,GAAG;EACR,UAAM7/H,CAAC,GAAG,KAAK0/H,GAAL,CAASzhI,aAAT,CAAuB,CAAvB,CAAV;;EACA,WAAO+B,CAAC,CAACxH,IAAF,EAAP;EACD;;EACDsnI,EAAAA,SAAS,GAAG;EACV,UAAM9/H,CAAC,GAAG,KAAK0/H,GAAL,CAASzhI,aAAT,CAAuB,CAAvB,CAAV;;EACA,WAAO+B,CAAC,CAACxH,IAAF,EAAP;EACD;;EACDiJ,EAAAA,YAAY,CAACsH,CAAD,EAAI;EACd,WAAO,KAAK22H,GAAL,CAASj+H,YAAT,CAAsBsH,CAAC,CAACiuE,cAAF,EAAtB,CAAP;EACD;;EACD+oD,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAKL,GAAL,CAASzhI,aAAT,CAAuB,CAAvB,CAAP;EACD;;EACD+hI,EAAAA,MAAM,GAAG;EACP,WAAO,KAAKN,GAAL,CAASzhI,aAAT,CAAuB,CAAvB,CAAP;EACD;;EACDgiI,EAAAA,OAAO,GAAG;EACR,UAAMjgI,CAAC,GAAG,KAAK0/H,GAAL,CAASzhI,aAAT,CAAuB,CAAvB,CAAV;;EACA,WAAO+B,CAAC,CAACzJ,CAAT;EACD;;EACD2pI,EAAAA,SAAS,GAAG;EACV,UAAMlgI,CAAC,GAAG,KAAK0/H,GAAL,CAASzhI,aAAT,CAAuB,CAAvB,CAAV;;EACA,WAAO+B,CAAC,CAAC1J,CAAT;EACD;;EACDq+B,EAAAA,UAAU,CAAC5rB,CAAD,EAAI;EACZ,WAAO,KAAK22H,GAAL,CAAS/qG,UAAT,CAAoB5rB,CAAC,CAACiuE,cAAF,EAApB,CAAP;EACD;;EACDmpD,EAAAA,SAAS,GAAG;EACV,UAAMngI,CAAC,GAAG,KAAK0/H,GAAL,CAASzhI,aAAT,CAAuB,CAAvB,CAAV;;EACA,WAAO+B,CAAC,CAACzJ,CAAT;EACD;;EACDy/E,EAAAA,OAAO,CAACvU,IAAD,EAAO;EACZ,SAAK5N,KAAL,GAAa4N,IAAb;EACD;;EACDI,EAAAA,OAAO,GAAG;EACR,WAAO,KAAKhO,KAAZ;EACD;;EACDusE,EAAAA,OAAO,GAAG;EACR,UAAMpgI,CAAC,GAAG,KAAK0/H,GAAL,CAASzhI,aAAT,CAAuB,CAAvB,CAAV;;EACA,WAAO+B,CAAC,CAAC1J,CAAT;EACD;;EACDjC,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAKqrI,GAAL,CAASrrI,QAAT,EAAP;EACD;;EArE0B;;ECCd,MAAMgsI,8BAAN,SAA6ClpI,gBAA7C,CAA8D;EAC3EnD,EAAAA,WAAW,GAAG;EACZ;EACAqsI,IAAAA,8BAA8B,CAAChpI,YAA/B,CAA4CC,KAA5C,CAAkD,IAAlD,EAAwDC,SAAxD;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKu3C,GAAL,GAAW,IAAX;;EACA,QAAIr3C,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAM8mC,GAAG,GAAG/mC,SAAS,CAAC,CAAD,CAArB;EACAJ,MAAAA,gBAAgB,CAACE,YAAjB,CAA8BI,IAA9B,CAAmC,IAAnC,EAAyC6mC,GAAzC;EACD,KAHD,MAGO,IAAI/mC,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAM8mC,GAAG,GAAG/mC,SAAS,CAAC,CAAD,CAArB;EAAA,YAA0BqjB,EAAE,GAAGrjB,SAAS,CAAC,CAAD,CAAxC;EACAJ,MAAAA,gBAAgB,CAACE,YAAjB,CAA8BI,IAA9B,CAAmC,IAAnC,EAAyC4oI,8BAA8B,CAACC,YAA/B,CAA4ChiG,GAA5C,EAAiD1jB,EAAjD,CAAzC;EACA,WAAKg0B,GAAL,GAAW,IAAIv2C,UAAJ,CAAeuiB,EAAf,CAAX;EACD;EACF;;EACD,SAAO0lH,YAAP,CAAoBhiG,GAApB,EAAyB1jB,EAAzB,EAA6B;EAC3B,QAAIA,EAAE,KAAK,IAAX,EAAiB,OAAO0jB,GAAG,GAAG,KAAN,GAAc/P,SAAS,CAACyuE,OAAV,CAAkBpiF,EAAlB,CAAd,GAAsC,IAA7C;EACjB,WAAO0jB,GAAP;EACD;;EACDrgC,EAAAA,aAAa,GAAG;EACd,WAAO,KAAK2wC,GAAZ;EACD;;EAtB0E;;ECW9D,MAAM2xF,8BAAN,CAAqC;EAClDvsI,EAAAA,WAAW,GAAG;EACZusI,IAAAA,8BAA8B,CAAClpI,YAA/B,CAA4CC,KAA5C,CAAkD,IAAlD,EAAwDC,SAAxD;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKmpI,gBAAL,GAAwB,IAAxB;EACA,SAAKC,YAAL,GAAoB,IAApB;EACA,SAAKC,SAAL,GAAiB,IAAI/jI,SAAJ,EAAjB;EACA,SAAKw9H,OAAL,GAAe,IAAf;EACA,SAAKwG,OAAL,GAAe,IAAf;EACA,SAAKC,WAAL,GAAmB,IAAnB;EACA,SAAKC,YAAL,GAAoB,IAAIvN,8BAAJ,EAApB;EACA,SAAKwN,IAAL,GAAY,IAAZ;EACA,SAAKC,cAAL,GAAsB,IAAtB;EACA,SAAKC,eAAL,GAAuB,IAAvB;EACA,SAAKvO,QAAL,GAAgB,IAAhB;EACA,SAAKrwD,UAAL,GAAkB,IAAlB;EACA,UAAM6+D,eAAe,GAAG1pI,SAAS,CAAC,CAAD,CAAjC;EAAA,UAAsC5D,SAAS,GAAG4D,SAAS,CAAC,CAAD,CAA3D;EACA,SAAKipI,gBAAL,GAAwB,IAAI7jI,SAAJ,CAAcskI,eAAd,CAAxB;EACA,SAAK7+D,UAAL,GAAkBzuE,SAAlB;EACA,SAAKmtI,IAAL,GAAY,IAAI5+D,MAAJ,CAAWvuE,SAAX,CAAZ;EACD;;EACD,SAAOutI,qBAAP,CAA6BvG,QAA7B,EAAuC;EACrC,UAAM16H,GAAG,GAAG,IAAIP,QAAJ,EAAZ;;EACA,SAAK,IAAI/K,CAAC,GAAGgmI,QAAQ,CAACz+H,QAAT,EAAb,EAAkCvH,CAAC,CAACmJ,OAAF,EAAlC,GAAiD;EAC/C,YAAMk0H,CAAC,GAAGr9H,CAAC,CAACkJ,IAAF,EAAV;EACAoC,MAAAA,GAAG,CAACqC,eAAJ,CAAoB0vH,CAAC,CAAC/zH,aAAF,EAApB;EACD;;EACD,WAAOgC,GAAP;EACD;;EACDkhI,EAAAA,kBAAkB,GAAG;EACnB,WAAO,KAAKX,gBAAZ;EACD;;EACDY,EAAAA,MAAM,GAAG;EACP,WAAO,KAAKN,IAAZ;EACD;;EACDO,EAAAA,kBAAkB,GAAG;EACnB,SAAKC,qBAAL;EACA,QAAIpwE,KAAK,GAAG,CAAZ;EACA,QAAIqwE,MAAM,GAAG,CAAb;;EACA,OAAG;EACDA,MAAAA,MAAM,GAAG,KAAKC,cAAL,CAAoB,KAAKd,SAAzB,CAAT;EACAxvE,MAAAA,KAAK;EACN,KAHD,QAGSqwE,MAAM,GAAG,CAAT,IAAcrwE,KAAK,GAAGqvE,8BAA8B,CAACkB,cAH9D;;EAIA,QAAIvwE,KAAK,KAAKqvE,8BAA8B,CAACkB,cAA7C,EACE,MAAM,IAAIpB,8BAAJ,CAAmC,uFAAnC,EAA4H,KAAK5N,QAAjI,CAAN;EAEH;;EACDiI,EAAAA,WAAW,CAACC,QAAD,EAAW;EACpB,SAAK,IAAIhmI,CAAC,GAAGgmI,QAAQ,CAACz+H,QAAT,EAAb,EAAkCvH,CAAC,CAACmJ,OAAF,EAAlC,GAAiD;EAC/C,YAAMk0H,CAAC,GAAGr9H,CAAC,CAACkJ,IAAF,EAAV;EACA,WAAK08H,UAAL,CAAgBvI,CAAhB;EACD;EACF;;EACD0P,EAAAA,gBAAgB,GAAG;EACjB,WAAO,KAAKX,cAAZ;EACD;;EACDY,EAAAA,aAAa,GAAG;EACd,UAAMnjI,GAAG,GAAG,IAAIC,KAAJ,CAAU,KAAK+hI,gBAAL,CAAsBrkI,IAAtB,KAA+B,KAAKskI,YAAL,CAAkBtkI,IAAlB,EAAzC,EAAmEuC,IAAnE,CAAwE,IAAxE,CAAZ;EACA,QAAIzB,KAAK,GAAG,CAAZ;;EACA,SAAK,IAAItI,CAAC,GAAG,KAAK6rI,gBAAL,CAAsBtkI,QAAtB,EAAb,EAA+CvH,CAAC,CAACmJ,OAAF,EAA/C,GAA8D;EAC5D,YAAMk0H,CAAC,GAAGr9H,CAAC,CAACkJ,IAAF,EAAV;EACAW,MAAAA,GAAG,CAACvB,KAAK,EAAN,CAAH,GAAe+0H,CAAC,CAAC/zH,aAAF,EAAf;EACD;;EACD,SAAK,IAAI+jB,EAAE,GAAG,KAAKy+G,YAAL,CAAkBvkI,QAAlB,EAAd,EAA4C8lB,EAAE,CAAClkB,OAAH,EAA5C,GAA4D;EAC1D,YAAMk0H,CAAC,GAAGhwG,EAAE,CAACnkB,IAAH,EAAV;EACAW,MAAAA,GAAG,CAACvB,KAAK,EAAN,CAAH,GAAe+0H,CAAC,CAAC/zH,aAAF,EAAf;EACD;;EACD,WAAOO,GAAP;EACD;;EACDojI,EAAAA,cAAc,CAACC,QAAD,EAAWC,WAAX,EAAwB;EACpC,SAAKpB,SAAL,GAAiBmB,QAAjB;EACA,SAAKpB,YAAL,GAAoBqB,WAApB;EACD;;EACDC,EAAAA,iBAAiB,GAAG;EAClB,UAAMhqH,IAAI,GAAG,IAAIiO,eAAJ,EAAb;EACA,UAAMie,MAAM,GAAG,KAAK09F,aAAL,EAAf;EACA,UAAMK,IAAI,GAAG,IAAIppF,UAAJ,CAAe3U,MAAf,EAAuBlsB,IAAvB,CAAb;EACA,SAAK6oH,WAAL,GAAmBoB,IAAI,CAAC5nF,aAAL,EAAnB;EACD;;EACDknF,EAAAA,qBAAqB,GAAG;EACtB,SAAKS,iBAAL;EACA,SAAKrH,WAAL,CAAiB,KAAK+F,YAAtB;EACD;;EACDwB,EAAAA,mBAAmB,CAACjvG,GAAD,EAAM;EACvB,UAAMhzB,CAAC,GAAGgzB,GAAG,CAAC+sG,QAAJ,EAAV;EACA,UAAMx/H,CAAC,GAAGyyB,GAAG,CAACgtG,MAAJ,EAAV;EACA,UAAM1P,KAAK,GAAG,IAAIj4H,UAAJ,CAAe,CAAC2H,CAAC,CAAC1J,CAAF,GAAMiK,CAAC,CAACjK,CAAT,IAAc,GAA7B,EAAkC,CAAC0J,CAAC,CAACzJ,CAAF,GAAMgK,CAAC,CAAChK,CAAT,IAAc,GAAhD,CAAd;EACA,UAAM2rI,SAAS,GAAGliI,CAAC,CAACtF,QAAF,CAAW41H,KAAX,CAAlB;EACA,UAAMrwH,GAAG,GAAG,IAAIP,QAAJ,CAAa4wH,KAAb,CAAZ;EACArwH,IAAAA,GAAG,CAAC6C,QAAJ,CAAao/H,SAAb;;EACA,UAAMrtI,MAAM,GAAG,KAAKisI,IAAL,CAAU7uF,KAAV,CAAgBhyC,GAAhB,CAAf;;EACA,QAAIkiI,iBAAiB,GAAG,IAAxB;EACA,QAAI5wG,OAAO,GAAGz8B,MAAM,CAACO,SAArB;;EACA,SAAK,IAAIV,CAAC,GAAGE,MAAM,CAACqH,QAAP,EAAb,EAAgCvH,CAAC,CAACmJ,OAAF,EAAhC,GAA+C;EAC7C,YAAMskI,QAAQ,GAAGztI,CAAC,CAACkJ,IAAF,EAAjB;EACA,YAAMkiB,MAAM,GAAGqiH,QAAQ,CAACnkI,aAAT,EAAf;EACA,UAAI8hB,MAAM,CAAC7mB,QAAP,CAAgB8G,CAAhB,KAAsB+f,MAAM,CAAC7mB,QAAP,CAAgBqH,CAAhB,CAA1B,EAA8C;EAC9C,YAAM8hI,UAAU,GAAG/R,KAAK,CAAC51H,QAAN,CAAeqlB,MAAf,CAAnB;;EACA,UAAIsiH,UAAU,GAAGH,SAAjB,EAA4B;EAC1B,cAAMI,QAAQ,GAAGD,UAAjB;;EACA,YAAIF,iBAAiB,KAAK,IAAtB,IAA8BG,QAAQ,GAAG/wG,OAA7C,EAAsD;EACpD4wG,UAAAA,iBAAiB,GAAGpiH,MAApB;EACAwR,UAAAA,OAAO,GAAG+wG,QAAV;EACD;EACF;EACF;;EACD,WAAOH,iBAAP;EACD;;EACDI,EAAAA,qBAAqB,GAAG;EACtB,WAAO,KAAK7B,SAAZ;EACD;;EACD8B,EAAAA,mBAAmB,CAACC,WAAD,EAAc;EAC/B,SAAK5B,YAAL,GAAoB4B,WAApB;EACD;;EACDroF,EAAAA,aAAa,GAAG;EACd,WAAO,KAAKwmF,WAAZ;EACD;;EACDtG,EAAAA,YAAY,GAAG;EACb,WAAO,KAAKl4D,UAAZ;EACD;;EACDo/D,EAAAA,cAAc,CAACkB,YAAD,EAAe;EAC3B,UAAMC,WAAW,GAAG,IAAIhmI,SAAJ,EAApB;EACA,QAAI4kI,MAAM,GAAG,CAAb;EACA,UAAMqB,YAAY,GAAG,IAAIjmI,SAAJ,EAArB;;EACA,SAAK,IAAIhI,CAAC,GAAG+tI,YAAY,CAACxmI,QAAb,EAAb,EAAsCvH,CAAC,CAACmJ,OAAF,EAAtC,GAAqD;EACnD,YAAMk1B,GAAG,GAAGr+B,CAAC,CAACkJ,IAAF,EAAZ;EACA,YAAMw1H,UAAU,GAAG,KAAK4O,mBAAL,CAAyBjvG,GAAzB,CAAnB;EACA,UAAIqgG,UAAU,KAAK,IAAnB,EAAyB;EACzB,WAAKZ,QAAL,GAAgB,KAAKoO,YAAL,CAAkBzN,cAAlB,CAAiCpgG,GAAjC,EAAsCqgG,UAAtC,CAAhB;EACA,YAAMwP,WAAW,GAAG,KAAKC,YAAL,CAAkB,KAAKrQ,QAAvB,EAAiCz/F,GAAjC,CAApB;EACA,YAAM+vG,cAAc,GAAG,KAAKxI,UAAL,CAAgBsI,WAAhB,CAAvB;;EACA,UAAI,CAACE,cAAc,CAAC9kI,aAAf,GAA+B/E,QAA/B,CAAwC,KAAKu5H,QAA7C,CAAL,EAA6D;;EAC7D,YAAM/nC,EAAE,GAAG,IAAI+0C,OAAJ,CAAYzsG,GAAG,CAACktG,SAAJ,EAAZ,EAA6BltG,GAAG,CAACmtG,SAAJ,EAA7B,EAA8CntG,GAAG,CAAC8sG,SAAJ,EAA9C,EAA+D+C,WAAW,CAAChpI,IAAZ,EAA/D,EAAmFgpI,WAAW,CAACroI,IAAZ,EAAnF,EAAuGqoI,WAAW,CAACrqI,IAAZ,EAAvG,EAA2Hw6B,GAAG,CAAC6uC,OAAJ,EAA3H,CAAX;EACA,YAAM8oB,EAAE,GAAG,IAAI80C,OAAJ,CAAYoD,WAAW,CAAChpI,IAAZ,EAAZ,EAAgCgpI,WAAW,CAACroI,IAAZ,EAAhC,EAAoDqoI,WAAW,CAACrqI,IAAZ,EAApD,EAAwEw6B,GAAG,CAACotG,OAAJ,EAAxE,EAAuFptG,GAAG,CAACitG,OAAJ,EAAvF,EAAsGjtG,GAAG,CAAC6sG,OAAJ,EAAtG,EAAqH7sG,GAAG,CAAC6uC,OAAJ,EAArH,CAAX;EACA8gE,MAAAA,WAAW,CAAC5mI,GAAZ,CAAgB2uF,EAAhB;EACAi4C,MAAAA,WAAW,CAAC5mI,GAAZ,CAAgB4uF,EAAhB;EACAi4C,MAAAA,YAAY,CAAC7mI,GAAb,CAAiBi3B,GAAjB;EACAuuG,MAAAA,MAAM,GAAGA,MAAM,GAAG,CAAlB;EACD;;EACDmB,IAAAA,YAAY,CAACM,SAAb,CAAuBJ,YAAvB;EACAF,IAAAA,YAAY,CAAC1mI,MAAb,CAAoB2mI,WAApB;EACA,WAAOpB,MAAP;EACD;;EACDuB,EAAAA,YAAY,GAAG;EACb,QAAIvrI,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMwI,CAAC,GAAGzI,SAAS,CAAC,CAAD,CAAnB;EACA,UAAIy6H,CAAC,GAAG,IAAR;EACA,UAAI,KAAK+O,cAAL,KAAwB,IAA5B,EAAkC/O,CAAC,GAAG,KAAK+O,cAAL,CAAoB+B,YAApB,CAAiC9iI,CAAjC,EAAoC,IAApC,CAAJ,CAAlC,KAAsFgyH,CAAC,GAAG,IAAI+F,gBAAJ,CAAqB/3H,CAArB,CAAJ;EACtF,aAAOgyH,CAAP;EACD,KALD,MAKO,IAAIz6H,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMwI,CAAC,GAAGzI,SAAS,CAAC,CAAD,CAAnB;EAAA,YAAwBy7B,GAAG,GAAGz7B,SAAS,CAAC,CAAD,CAAvC;EACA,UAAIy6H,CAAC,GAAG,IAAR;EACA,UAAI,KAAK+O,cAAL,KAAwB,IAA5B,EAAkC/O,CAAC,GAAG,KAAK+O,cAAL,CAAoB+B,YAApB,CAAiC9iI,CAAjC,EAAoCgzB,GAApC,CAAJ,CAAlC,KAAqFg/F,CAAC,GAAG,IAAI+F,gBAAJ,CAAqB/3H,CAArB,CAAJ;EACrFgyH,MAAAA,CAAC,CAACmG,eAAF,CAAkB,IAAlB;EACA,aAAOnG,CAAP;EACD;EACF;;EACDiR,EAAAA,cAAc,GAAG;EACf,WAAO,KAAK9I,OAAZ;EACD;;EACD+I,EAAAA,kBAAkB,GAAG;EACnB,UAAMC,SAAS,GAAG5C,8BAA8B,CAACW,qBAA/B,CAAqD,KAAKV,gBAA1D,CAAlB;EACA,UAAMxb,MAAM,GAAGub,8BAA8B,CAACW,qBAA/B,CAAqD,KAAKT,YAA1D,CAAf;EACA,UAAM2C,YAAY,GAAG,IAAI1jI,QAAJ,CAAayjI,SAAb,CAArB;EACAC,IAAAA,YAAY,CAAC9gI,eAAb,CAA6B0iH,MAA7B;EACA,UAAMjiH,MAAM,GAAGqgI,YAAY,CAACniI,QAAb,KAA0B,GAAzC;EACA,UAAM+B,MAAM,GAAGogI,YAAY,CAACliI,SAAb,KAA2B,GAA1C;EACA,UAAM47D,KAAK,GAAGlpE,IAAI,CAACiN,GAAL,CAASkC,MAAT,EAAiBC,MAAjB,CAAd;EACA,SAAKg+H,eAAL,GAAuB,IAAIthI,QAAJ,CAAa0jI,YAAb,CAAvB;;EACA,SAAKpC,eAAL,CAAqBl+H,QAArB,CAA8Bg6D,KAA9B;EACD;;EACDumE,EAAAA,gBAAgB,CAACC,aAAD,EAAgB;EAC9B,SAAKvC,cAAL,GAAsBuC,aAAtB;EACD;;EACDC,EAAAA,mBAAmB,GAAG;EACpB,SAAKL,kBAAL;EACA,SAAK/I,OAAL,GAAe,IAAIiB,mBAAJ,CAAwB,KAAK4F,eAA7B,EAA8C,KAAK5+D,UAAnD,CAAf;;EACA,SAAK+3D,OAAL,CAAauC,UAAb,CAAwB,IAAI7B,wBAAJ,CAA6B,KAAKV,OAAlC,CAAxB;;EACA,SAAKwG,OAAL,GAAe,IAAIzG,+BAAJ,CAAoC,KAAKC,OAAzC,CAAf;EACA,SAAKO,WAAL,CAAiB,KAAK8F,gBAAtB;EACD;;EACDjG,EAAAA,UAAU,GAAG;EACX,QAAIhjI,SAAS,CAAC,CAAD,CAAT,YAAwBwgI,gBAA5B,EAA8C;EAC5C,YAAM/F,CAAC,GAAGz6H,SAAS,CAAC,CAAD,CAAnB;;EACA,YAAMisI,MAAM,GAAG,KAAK1C,IAAL,CAAUjuF,MAAV,CAAiBm/E,CAAC,CAAC/zH,aAAF,EAAjB,EAAoC+zH,CAApC,CAAf;;EACA,UAAI,CAACwR,MAAM,CAAC9hE,UAAP,EAAL,EAA0B;EACxB,aAAKi/D,OAAL,CAAapG,UAAb,CAAwBvI,CAAxB;EACD,OAFD,MAEO;EACL,cAAMyR,QAAQ,GAAGD,MAAM,CAAC3hE,OAAP,EAAjB;EACA4hE,QAAAA,QAAQ,CAAC7zE,KAAT,CAAeoiE,CAAf;EACA,eAAOyR,QAAP;EACD;;EACD,aAAOzR,CAAP;EACD,KAXD,MAWO,IAAIz6H,SAAS,CAAC,CAAD,CAAT,YAAwBc,UAA5B,EAAwC;EAC7C,YAAM2H,CAAC,GAAGzI,SAAS,CAAC,CAAD,CAAnB;EACA,WAAKgjI,UAAL,CAAgB,KAAKuI,YAAL,CAAkB9iI,CAAlB,CAAhB;EACD;EACF;;EAtMiD;EAwMpDugI,8BAA8B,CAACkB,cAA/B,GAAgD,EAAhD;;EC3Me,MAAMiC,4BAAN,CAAmC;EAChD1vI,EAAAA,WAAW,GAAG;EACZ0vI,IAAAA,4BAA4B,CAACrsI,YAA7B,CAA0CC,KAA1C,CAAgD,IAAhD,EAAsDC,SAAtD;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKssI,WAAL,GAAmB,IAAnB;EACA,SAAKvhE,UAAL,GAAkB,GAAlB;EACA,SAAK+3D,OAAL,GAAe,IAAf;EACD;;EACD,SAAOyJ,wBAAP,CAAgC7xH,IAAhC,EAAsC;EACpC,QAAIA,IAAI,KAAK,IAAb,EAAmB,OAAO,IAAIhU,cAAJ,EAAP;EACnB,UAAMkmC,MAAM,GAAGlyB,IAAI,CAACgI,cAAL,EAAf;EACA,WAAO2pH,4BAA4B,CAACG,MAA7B,CAAoC5/F,MAApC,CAAP;EACD;;EACD,SAAOhwB,QAAP,CAAgBgwB,MAAhB,EAAwB;EACtB,UAAMhkC,GAAG,GAAG,IAAIP,QAAJ,EAAZ;;EACA,SAAK,IAAI/K,CAAC,GAAGsvC,MAAM,CAAC/nC,QAAP,EAAb,EAAgCvH,CAAC,CAACmJ,OAAF,EAAhC,GAA+C;EAC7C,YAAM/D,KAAK,GAAGpF,CAAC,CAACkJ,IAAF,EAAd;EACAoC,MAAAA,GAAG,CAACqC,eAAJ,CAAoBvI,KAApB;EACD;;EACD,WAAOkG,GAAP;EACD;;EACD,SAAO4jI,MAAP,CAAc5/F,MAAd,EAAsB;EACpB,UAAM6/F,UAAU,GAAGlkH,gBAAgB,CAACc,QAAjB,CAA0BujB,MAA1B,CAAnB;EACAvoB,IAAAA,MAAM,CAACre,IAAP,CAAYymI,UAAZ;EACA,UAAM1jH,SAAS,GAAG,IAAIriB,cAAJ,CAAmB+lI,UAAnB,EAA+B,KAA/B,CAAlB;EACA,WAAO1jH,SAAP;EACD;;EACD,SAAO2jH,UAAP,CAAkB9/F,MAAlB,EAA0B;EACxB,UAAM+/F,KAAK,GAAG,IAAIrnI,SAAJ,EAAd;;EACA,SAAK,IAAIhI,CAAC,GAAGsvC,MAAM,CAAC/nC,QAAP,EAAb,EAAgCvH,CAAC,CAACmJ,OAAF,EAAhC,GAA+C;EAC7C,YAAM/D,KAAK,GAAGpF,CAAC,CAACkJ,IAAF,EAAd;EACAmmI,MAAAA,KAAK,CAACjoI,GAAN,CAAU,IAAIk6H,MAAJ,CAAWl8H,KAAX,CAAV;EACD;;EACD,WAAOiqI,KAAP;EACD;;EACDpyH,EAAAA,MAAM,GAAG;EACP,QAAI,KAAKuoH,OAAL,KAAiB,IAArB,EAA2B,OAAO,IAAP;EAC3B,UAAM8J,OAAO,GAAGP,4BAA4B,CAACzvH,QAA7B,CAAsC,KAAK0vH,WAA3C,CAAhB;EACA,UAAMhJ,QAAQ,GAAG+I,4BAA4B,CAACK,UAA7B,CAAwC,KAAKJ,WAA7C,CAAjB;EACA,SAAKxJ,OAAL,GAAe,IAAIiB,mBAAJ,CAAwB6I,OAAxB,EAAiC,KAAK7hE,UAAtC,CAAf;EACA,UAAM8hE,YAAY,GAAG,IAAIhK,+BAAJ,CAAoC,KAAKC,OAAzC,CAArB;EACA+J,IAAAA,YAAY,CAACxJ,WAAb,CAAyBC,QAAzB;EACD;;EACDwJ,EAAAA,YAAY,CAACxwI,SAAD,EAAY;EACtB,SAAKyuE,UAAL,GAAkBzuE,SAAlB;EACD;;EACDywI,EAAAA,QAAQ,GAAG;EACT,QAAI7sI,SAAS,CAAC,CAAD,CAAT,YAAwBya,QAA5B,EAAsC;EACpC,YAAMD,IAAI,GAAGxa,SAAS,CAAC,CAAD,CAAtB;EACA,WAAKosI,WAAL,GAAmBD,4BAA4B,CAACE,wBAA7B,CAAsD7xH,IAAtD,CAAnB;EACD,KAHD,MAGO,IAAI7T,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAeuE,UAAf,CAAhB,EAA4C;EACjD,YAAMmoC,MAAM,GAAG1sC,SAAS,CAAC,CAAD,CAAxB;EACA,WAAKosI,WAAL,GAAmBD,4BAA4B,CAACG,MAA7B,CAAoCjkH,gBAAgB,CAACvhB,iBAAjB,CAAmC4lC,MAAnC,CAApC,CAAnB;EACD;EACF;;EACDw0B,EAAAA,QAAQ,CAAC9tB,QAAD,EAAW;EACjB,SAAK/4B,MAAL;EACA,WAAO,KAAKuoH,OAAL,CAAa1hE,QAAb,CAAsB9tB,QAAtB,CAAP;EACD;;EACDs4F,EAAAA,cAAc,GAAG;EACf,SAAKrxH,MAAL;EACA,WAAO,KAAKuoH,OAAZ;EACD;;EACDuD,EAAAA,YAAY,CAAC/yF,QAAD,EAAW;EACrB,SAAK/4B,MAAL;EACA,WAAO,KAAKuoH,OAAL,CAAauD,YAAb,CAA0B/yF,QAA1B,CAAP;EACD;;EAnE+C;;ECJnC,MAAM05F,sCAAN,CAA6C;EAC1DrwI,EAAAA,WAAW,GAAG;EACZqwI,IAAAA,sCAAsC,CAAChtI,YAAvC,CAAoDC,KAApD,CAA0D,IAA1D,EAAgEC,SAAhE;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKssI,WAAL,GAAmB,IAAnB;EACA,SAAKW,gBAAL,GAAwB,IAAxB;EACA,SAAKliE,UAAL,GAAkB,GAAlB;EACA,SAAK+3D,OAAL,GAAe,IAAf;EACA,SAAKoK,oBAAL,GAA4B,IAAIryE,OAAJ,EAA5B;EACD;;EACD,SAAOsyE,wBAAP,GAAkC;EAChC,QAAIjtI,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMua,IAAI,GAAGxa,SAAS,CAAC,CAAD,CAAtB;EACA,YAAMuxC,KAAK,GAAGC,wBAAwB,CAACF,QAAzB,CAAkC92B,IAAlC,CAAd;EACA,YAAM0yH,cAAc,GAAG,IAAI9nI,SAAJ,EAAvB;;EACA,WAAK,IAAIhI,CAAC,GAAGm0C,KAAK,CAAC5sC,QAAN,EAAb,EAA+BvH,CAAC,CAACmJ,OAAF,EAA/B,GAA8C;EAC5C,cAAM0T,IAAI,GAAG7c,CAAC,CAACkJ,IAAF,EAAb;EACAwmI,QAAAA,sCAAsC,CAACG,wBAAvC,CAAgEhzH,IAAhE,EAAsEizH,cAAtE;EACD;;EACD,aAAOA,cAAP;EACD,KATD,MASO,IAAIltI,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMga,IAAI,GAAGja,SAAS,CAAC,CAAD,CAAtB;EAAA,YAA2BktI,cAAc,GAAGltI,SAAS,CAAC,CAAD,CAArD;EACA,YAAM0sC,MAAM,GAAGzyB,IAAI,CAACuI,cAAL,EAAf;;EACA,WAAK,IAAIplB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsvC,MAAM,CAACzsC,MAA3B,EAAmC7C,CAAC,EAApC,EACE8vI,cAAc,CAAC1oI,GAAf,CAAmB,IAAI0jI,OAAJ,CAAYx7F,MAAM,CAACtvC,CAAC,GAAG,CAAL,CAAlB,EAA2BsvC,MAAM,CAACtvC,CAAD,CAAjC,CAAnB;EAEH;EACF;;EACD+vI,EAAAA,kBAAkB,CAACzgG,MAAD,EAAS;EACzB,UAAM+/F,KAAK,GAAG,IAAIrnI,SAAJ,EAAd;;EACA,SAAK,IAAIhI,CAAC,GAAGsvC,MAAM,CAAC/nC,QAAP,EAAb,EAAgCvH,CAAC,CAACmJ,OAAF,EAAhC,GAA+C;EAC7C,YAAM/D,KAAK,GAAGpF,CAAC,CAACkJ,IAAF,EAAd;EACA,UAAI,KAAK0mI,oBAAL,CAA0B1xE,WAA1B,CAAsC94D,KAAtC,CAAJ,EAAkD;EAClDiqI,MAAAA,KAAK,CAACjoI,GAAN,CAAU,IAAIg8H,gBAAJ,CAAqBh+H,KAArB,CAAV;EACD;;EACD,WAAOiqI,KAAP;EACD;;EACDpyH,EAAAA,MAAM,GAAG;EACP,QAAI,KAAKuoH,OAAL,KAAiB,IAArB,EAA2B,OAAO,IAAP;EAC3B,UAAM8J,OAAO,GAAGP,4BAA4B,CAACzvH,QAA7B,CAAsC,KAAK0vH,WAA3C,CAAhB;EACA,QAAI9B,QAAQ,GAAG,IAAIllI,SAAJ,EAAf;;EACA,QAAI,KAAK2nI,gBAAL,KAA0B,IAA9B,EAAoC;EAClCL,MAAAA,OAAO,CAAC3hI,eAAR,CAAwB,KAAKgiI,gBAAL,CAAsB5wH,mBAAtB,EAAxB;EACA,WAAKixH,cAAL,CAAoB,KAAKL,gBAAzB;EACAzC,MAAAA,QAAQ,GAAGwC,sCAAsC,CAACG,wBAAvC,CAAgE,KAAKF,gBAArE,CAAX;EACD;;EACD,UAAMM,KAAK,GAAG,KAAKF,kBAAL,CAAwB,KAAKf,WAA7B,CAAd;EACA,UAAMkB,GAAG,GAAG,IAAItE,8BAAJ,CAAmCqE,KAAnC,EAA0C,KAAKxiE,UAA/C,CAAZ;EACAyiE,IAAAA,GAAG,CAACjD,cAAJ,CAAmBC,QAAnB,EAA6B,IAAIllI,SAAJ,CAAc,KAAK4nI,oBAAL,CAA0B7mI,MAA1B,EAAd,CAA7B;EACAmnI,IAAAA,GAAG,CAACtB,mBAAJ;EACAsB,IAAAA,GAAG,CAACxD,kBAAJ;EACA,SAAKlH,OAAL,GAAe0K,GAAG,CAAC5B,cAAJ,EAAf;EACD;;EACDkB,EAAAA,YAAY,CAACxwI,SAAD,EAAY;EACtB,SAAKyuE,UAAL,GAAkBzuE,SAAlB;EACD;;EACDiuI,EAAAA,cAAc,CAACkD,eAAD,EAAkB;EAC9B,SAAKR,gBAAL,GAAwBQ,eAAxB;EACD;;EACDV,EAAAA,QAAQ,CAACryH,IAAD,EAAO;EACb,SAAK4xH,WAAL,GAAmBD,4BAA4B,CAACE,wBAA7B,CAAsD7xH,IAAtD,CAAnB;EACD;;EACD0mD,EAAAA,QAAQ,CAAC9tB,QAAD,EAAW;EACjB,SAAK/4B,MAAL;EACA,WAAO,KAAKuoH,OAAL,CAAa1hE,QAAb,CAAsB9tB,QAAtB,CAAP;EACD;;EACDs4F,EAAAA,cAAc,GAAG;EACf,SAAKrxH,MAAL;EACA,WAAO,KAAKuoH,OAAZ;EACD;;EACDuD,EAAAA,YAAY,CAAC/yF,QAAD,EAAW;EACrB,SAAK/4B,MAAL;EACA,WAAO,KAAKuoH,OAAL,CAAauD,YAAb,CAA0B/yF,QAA1B,CAAP;EACD;;EACDg6F,EAAAA,cAAc,CAAC5yH,IAAD,EAAO;EACnB,UAAMkyB,MAAM,GAAGlyB,IAAI,CAACgI,cAAL,EAAf;;EACA,SAAK,IAAIplB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsvC,MAAM,CAACzsC,MAA3B,EAAmC7C,CAAC,EAApC,EAAwC;EACtC,YAAMq9H,CAAC,GAAG,IAAI+F,gBAAJ,CAAqB9zF,MAAM,CAACtvC,CAAD,CAA3B,CAAV;;EACA,WAAK4vI,oBAAL,CAA0BnhH,GAA1B,CAA8B6gB,MAAM,CAACtvC,CAAD,CAApC,EAAyCq9H,CAAzC;EACD;EACF;;EAjFyD;;ECG7C,MAAM+S,qBAAN,CAA4B;EACzC/wI,EAAAA,WAAW,GAAG;EACZ+wI,IAAAA,qBAAqB,CAAC1tI,YAAtB,CAAmCC,KAAnC,CAAyC,IAAzC,EAA+CC,SAA/C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKssI,WAAL,GAAmB,IAAnB;EACA,SAAKvhE,UAAL,GAAkB,GAAlB;EACA,SAAK+3D,OAAL,GAAe,IAAf;EACA,SAAK6K,QAAL,GAAgB,IAAhB;EACA,SAAKC,WAAL,GAAmB,IAAnB;EACD;;EACD,SAAOC,sBAAP,CAA8BnzH,IAA9B,EAAoCozH,OAApC,EAA6C;EAC3C,UAAMC,QAAQ,GAAGrzH,IAAI,CAACK,UAAL,GAAkBqB,UAAlB,CAA6B0xH,OAA7B,CAAjB;EACA,UAAME,OAAO,GAAG,IAAI1oI,SAAJ,EAAhB;;EACA,SAAK,IAAIhI,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGod,IAAI,CAACkB,gBAAL,EAApB,EAA6Cte,CAAC,EAA9C,EAAkD;EAChD,YAAMme,CAAC,GAAGf,IAAI,CAACO,YAAL,CAAkB3d,CAAlB,CAAV;EACA,UAAIE,MAAM,GAAG,IAAb;;EACA,UAAIswI,OAAO,CAACliI,QAAR,CAAiB6P,CAAC,CAACY,mBAAF,EAAjB,CAAJ,EAA+C;EAC7C7e,QAAAA,MAAM,GAAGie,CAAT;EACD,OAFD,MAEO,IAAIqyH,OAAO,CAAC7kI,UAAR,CAAmBwS,CAAC,CAACY,mBAAF,EAAnB,CAAJ,EAAiD;EACtD7e,QAAAA,MAAM,GAAG05G,SAAS,CAAC9sG,YAAV,CAAuB2jI,QAAvB,EAAiCtyH,CAAjC,CAAT;EACAje,QAAAA,MAAM,CAAC0f,WAAP,CAAmBzB,CAAC,CAACM,WAAF,EAAnB;EACD;;EACD,UAAIve,MAAM,KAAK,IAAX,IAAmB,CAACA,MAAM,CAACoH,OAAP,EAAxB,EACEopI,OAAO,CAACtpI,GAAR,CAAYlH,MAAZ;EAEH;;EACD,WAAOkd,IAAI,CAACK,UAAL,GAAkBgJ,wBAAlB,CAA2C4K,eAAe,CAACS,eAAhB,CAAgC4+G,OAAhC,CAA3C,CAAP;EACD;;EACDzzH,EAAAA,MAAM,GAAG;EACP,QAAI,KAAKuoH,OAAL,KAAiB,IAArB,EAA2B,OAAO,IAAP;EAC3B,UAAM8J,OAAO,GAAGP,4BAA4B,CAACzvH,QAA7B,CAAsC,KAAK0vH,WAA3C,CAAhB;EACA,SAAKsB,WAAL,GAAmB,KAAKD,QAAxB;;EACA,QAAI,KAAKC,WAAL,KAAqB,IAAzB,EAA+B;EAC7B,WAAKA,WAAL,GAAmBhB,OAAnB;;EACA,YAAMnhI,QAAQ,GAAG,KAAKmiI,WAAL,CAAiB9iI,WAAjB,EAAjB;;EACA,WAAK8iI,WAAL,CAAiBniI,QAAjB,CAA0BA,QAA1B;EACD;;EACD,UAAM63H,QAAQ,GAAG+I,4BAA4B,CAACK,UAA7B,CAAwC,KAAKJ,WAA7C,CAAjB;EACA,SAAKxJ,OAAL,GAAe,IAAIiB,mBAAJ,CAAwB6I,OAAxB,EAAiC,KAAK7hE,UAAtC,CAAf;EACA,UAAM8hE,YAAY,GAAG,IAAIhK,+BAAJ,CAAoC,KAAKC,OAAzC,CAArB;EACA+J,IAAAA,YAAY,CAACxJ,WAAb,CAAyBC,QAAzB;EACD;;EACD2K,EAAAA,UAAU,CAAC36F,QAAD,EAAW;EACnB,SAAK/4B,MAAL;;EACA,UAAMqsF,KAAK,GAAG,KAAKk8B,OAAL,CAAa2E,iBAAb,CAA+Bn0F,QAA/B,CAAd;;EACA,WAAOo6F,qBAAqB,CAACG,sBAAtB,CAA6CjnC,KAA7C,EAAoD,KAAKgnC,WAAzD,CAAP;EACD;;EACDd,EAAAA,YAAY,CAACxwI,SAAD,EAAY;EACtB,SAAKyuE,UAAL,GAAkBzuE,SAAlB;EACD;;EACDywI,EAAAA,QAAQ,GAAG;EACT,QAAI7sI,SAAS,CAAC,CAAD,CAAT,YAAwBya,QAA5B,EAAsC;EACpC,YAAMD,IAAI,GAAGxa,SAAS,CAAC,CAAD,CAAtB;EACA,WAAKosI,WAAL,GAAmBD,4BAA4B,CAACE,wBAA7B,CAAsD7xH,IAAtD,CAAnB;EACD,KAHD,MAGO,IAAI7T,YAAY,CAAC3G,SAAS,CAAC,CAAD,CAAV,EAAeuE,UAAf,CAAhB,EAA4C;EACjD,YAAMmoC,MAAM,GAAG1sC,SAAS,CAAC,CAAD,CAAxB;EACA,WAAKosI,WAAL,GAAmBD,4BAA4B,CAACG,MAA7B,CAAoCjkH,gBAAgB,CAACvhB,iBAAjB,CAAmC4lC,MAAnC,CAApC,CAAnB;EACD;EACF;;EACDshG,EAAAA,eAAe,CAACJ,OAAD,EAAU;EACvB,SAAKH,QAAL,GAAgBG,OAAhB;EACD;;EACDlC,EAAAA,cAAc,GAAG;EACf,SAAKrxH,MAAL;EACA,WAAO,KAAKuoH,OAAZ;EACD;;EAlEwC;;;;;;;;;;;;;;;ECP5B,MAAMqL,cAAN,CAAqB;EAClCxxI,EAAAA,WAAW,GAAG;EACZwxI,IAAAA,cAAc,CAACnuI,YAAf,CAA4BC,KAA5B,CAAkC,IAAlC,EAAwCC,SAAxC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKouI,WAAL,GAAmB,IAAnB;EACA,SAAKC,SAAL,GAAiB,IAAjB;EACA,SAAKC,YAAL,GAAoB,IAApB;EACA,SAAKC,eAAL,GAAuB,CAAvB;EACA,SAAKC,YAAL,GAAoB,CAApB;;EACA,QAAItuI,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMsuI,MAAM,GAAGvuI,SAAS,CAAC,CAAD,CAAxB;EACAiuI,MAAAA,cAAc,CAACnuI,YAAf,CAA4BI,IAA5B,CAAiC,IAAjC,EAAuCquI,MAAvC,EAA+C,CAA/C,EAAkD,CAAlD;EACD,KAHD,MAGO,IAAIvuI,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMsuI,MAAM,GAAGvuI,SAAS,CAAC,CAAD,CAAxB;EAAA,YAA6ByH,KAAK,GAAGzH,SAAS,CAAC,CAAD,CAA9C;EACAiuI,MAAAA,cAAc,CAACnuI,YAAf,CAA4BI,IAA5B,CAAiC,IAAjC,EAAuCquI,MAAvC,EAA+C9mI,KAAK,CAAC+mI,iBAAN,EAA/C,EAA0EP,cAAc,CAACQ,qBAAf,CAAqChnI,KAArC,CAA1E;EACD,KAHM,MAGA,IAAIzH,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMyuI,UAAU,GAAG1uI,SAAS,CAAC,CAAD,CAA5B;EAAA,YAAiC2uI,cAAc,GAAG3uI,SAAS,CAAC,CAAD,CAA3D;EAAA,YAAgEs9E,WAAW,GAAGt9E,SAAS,CAAC,CAAD,CAAvF;EACA,UAAI,CAAC2G,YAAY,CAAC+nI,UAAD,EAAazvH,MAAb,CAAjB,EAAuC,MAAM,IAAIliB,wBAAJ,CAA6B,6BAA7B,CAAN;EACvC,WAAKmxI,WAAL,GAAmBQ,UAAnB;EACA,WAAKP,SAAL,GAAiBO,UAAU,CAAChzH,gBAAX,EAAjB;EACA,WAAK2yH,eAAL,GAAuBM,cAAvB;EACA,WAAKL,YAAL,GAAoBhxD,WAApB;EACA,WAAKsxD,eAAL;EACD;EACF;;EACD,SAAOH,qBAAP,CAA6BrwF,GAA7B,EAAkC;EAChC,QAAIA,GAAG,CAACywF,kBAAJ,KAA2B,GAA/B,EAAoC,OAAOzwF,GAAG,CAAC2b,eAAJ,KAAwB,CAA/B;EACpC,WAAO3b,GAAG,CAAC2b,eAAJ,EAAP;EACD;;EACDy0E,EAAAA,iBAAiB,GAAG;EAClB,WAAO,KAAKH,eAAZ;EACD;;EACD5lC,EAAAA,OAAO,GAAG;EACR,WAAO,KAAK2lC,YAAZ;EACD;;EACDU,EAAAA,cAAc,GAAG;EACf,WAAO,KAAKR,YAAZ;EACD;;EACDS,EAAAA,aAAa,GAAG;EACd,QAAI,KAAKT,YAAL,GAAoB,KAAK7lC,OAAL,GAAe7lF,YAAf,KAAgC,CAAxD,EAA2D,OAAO,KAAKwrH,YAAL,CAAkBzrH,cAAlB,CAAiC,KAAK2rH,YAAL,GAAoB,CAArD,CAAP;EAC3D,WAAO,IAAP;EACD;;EACDhoI,EAAAA,IAAI,GAAG;EACL,QAAI,CAAC,KAAKC,OAAL,EAAL,EAAqB,OAAO,IAAP;EACrB,SAAK+nI,YAAL;;EACA,QAAI,KAAKA,YAAL,IAAqB,KAAKF,YAAL,CAAkBxrH,YAAlB,EAAzB,EAA2D;EACzD,WAAKyrH,eAAL;EACA,WAAKO,eAAL;EACA,WAAKN,YAAL,GAAoB,CAApB;EACD;EACF;;EACDM,EAAAA,eAAe,GAAG;EAChB,QAAI,KAAKP,eAAL,IAAwB,KAAKF,SAAjC,EAA4C;EAC1C,WAAKC,YAAL,GAAoB,IAApB;EACA,aAAO,IAAP;EACD;;EACD,SAAKA,YAAL,GAAoB,KAAKF,WAAL,CAAiBnzH,YAAjB,CAA8B,KAAKszH,eAAnC,CAApB;EACD;;EACDW,EAAAA,eAAe,GAAG;EAChB,WAAO,KAAKZ,YAAL,CAAkBzrH,cAAlB,CAAiC,KAAK2rH,YAAtC,CAAP;EACD;;EACDW,EAAAA,WAAW,GAAG;EACZ,QAAI,KAAKZ,eAAL,IAAwB,KAAKF,SAAjC,EAA4C,OAAO,KAAP;EAC5C,QAAI,KAAKG,YAAL,GAAoB,KAAKF,YAAL,CAAkBxrH,YAAlB,KAAmC,CAA3D,EAA8D,OAAO,KAAP;EAC9D,WAAO,IAAP;EACD;;EACDrc,EAAAA,OAAO,GAAG;EACR,QAAI,KAAK8nI,eAAL,IAAwB,KAAKF,SAAjC,EAA4C,OAAO,KAAP;EAC5C,QAAI,KAAKE,eAAL,KAAyB,KAAKF,SAAL,GAAiB,CAA1C,IAA+C,KAAKG,YAAL,IAAqB,KAAKF,YAAL,CAAkBxrH,YAAlB,EAAxE,EAA0G,OAAO,KAAP;EAC1G,WAAO,IAAP;EACD;;EAvEiC;;ECCrB,MAAMssH,kBAAN,CAAyB;EACtCzyI,EAAAA,WAAW,GAAG;EACZyyI,IAAAA,kBAAkB,CAACpvI,YAAnB,CAAgCC,KAAhC,CAAsC,IAAtC,EAA4CC,SAA5C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKouI,WAAL,GAAmB,IAAnB;EACA,UAAMQ,UAAU,GAAG1uI,SAAS,CAAC,CAAD,CAA5B;EACA,SAAKkuI,WAAL,GAAmBQ,UAAnB;EACD;;EACD,SAAOpqI,OAAP,CAAeoqI,UAAf,EAA2BxwG,OAA3B,EAAoC;EAClC,UAAMqgE,OAAO,GAAG,IAAI2wC,kBAAJ,CAAuBR,UAAvB,CAAhB;EACA,WAAOnwC,OAAO,CAACj6F,OAAR,CAAgB45B,OAAhB,CAAP;EACD;;EACD,SAAOixG,YAAP,CAAoBT,UAApB,EAAgCxwG,OAAhC,EAAyCkxG,QAAzC,EAAmD;EACjD,UAAM7wC,OAAO,GAAG,IAAI2wC,kBAAJ,CAAuBR,UAAvB,CAAhB;EACA,WAAOnwC,OAAO,CAAC4wC,YAAR,CAAqBjxG,OAArB,EAA8BkxG,QAA9B,CAAP;EACD;;EACD9qI,EAAAA,OAAO,CAAC45B,OAAD,EAAU;EACf,WAAO,KAAKmxG,gBAAL,CAAsBnxG,OAAtB,EAA+B,CAAC,GAAhC,CAAP;EACD;;EACDmxG,EAAAA,gBAAgB,CAACnxG,OAAD,EAAUkxG,QAAV,EAAoB;EAClC,QAAIl1H,WAAW,GAAG3c,MAAM,CAACO,SAAzB;EACA,QAAIwxI,SAAS,GAAGF,QAAhB;EACA,QAAIG,mBAAmB,GAAG,GAA1B;EACA,UAAM9zG,GAAG,GAAG,IAAIJ,WAAJ,EAAZ;EACA,UAAM9O,EAAE,GAAG,IAAI0hH,cAAJ,CAAmB,KAAKC,WAAxB,CAAX;;EACA,WAAO3hH,EAAE,CAAChmB,OAAH,EAAP,EAAqB;EACnB,UAAI,CAACgmB,EAAE,CAAC0iH,WAAH,EAAL,EAAuB;EACrBxzG,QAAAA,GAAG,CAACvX,EAAJ,GAASqI,EAAE,CAACyiH,eAAH,EAAT;EACAvzG,QAAAA,GAAG,CAAC9yB,EAAJ,GAAS4jB,EAAE,CAACwiH,aAAH,EAAT;EACA,cAAMS,WAAW,GAAG/zG,GAAG,CAACt4B,QAAJ,CAAa+6B,OAAb,CAApB;EACA,cAAMuxG,cAAc,GAAG,KAAKC,qBAAL,CAA2Bj0G,GAA3B,EAAgCyC,OAAhC,EAAyCqxG,mBAAzC,CAAvB;;EACA,YAAIC,WAAW,GAAGt1H,WAAd,IAA6Bu1H,cAAc,GAAGL,QAAlD,EAA4D;EAC1DE,UAAAA,SAAS,GAAGG,cAAZ;EACAv1H,UAAAA,WAAW,GAAGs1H,WAAd;EACD;;EACDD,QAAAA,mBAAmB,IAAI9zG,GAAG,CAAChgB,SAAJ,EAAvB;EACD;;EACD8Q,MAAAA,EAAE,CAACjmB,IAAH;EACD;;EACD,WAAOgpI,SAAP;EACD;;EACDH,EAAAA,YAAY,CAACjxG,OAAD,EAAUkxG,QAAV,EAAoB;EAC9B,QAAIA,QAAQ,GAAG,GAAf,EAAoB,OAAO,KAAK9qI,OAAL,CAAa45B,OAAb,CAAP;;EACpB,UAAMm9D,QAAQ,GAAG,KAAK6yC,WAAL,CAAiBzyH,SAAjB,EAAjB;;EACA,QAAI4/E,QAAQ,GAAG+zC,QAAf,EAAyB,OAAO/zC,QAAP;EACzB,UAAMs0C,YAAY,GAAG,KAAKN,gBAAL,CAAsBnxG,OAAtB,EAA+BkxG,QAA/B,CAArB;EACAjvI,IAAAA,MAAM,CAACE,MAAP,CAAcsvI,YAAY,IAAIP,QAA9B,EAAwC,kDAAxC;EACA,WAAOO,YAAP;EACD;;EACDD,EAAAA,qBAAqB,CAACj0G,GAAD,EAAMyC,OAAN,EAAeqxG,mBAAf,EAAoC;EACvD,UAAMK,UAAU,GAAGn0G,GAAG,CAACO,gBAAJ,CAAqBkC,OAArB,CAAnB;EACA,QAAI0xG,UAAU,IAAI,GAAlB,EAAuB,OAAOL,mBAAP;EACvB,QAAIK,UAAU,IAAI,GAAlB,EAAuB,OAAOL,mBAAmB,GAAGK,UAAU,GAAGn0G,GAAG,CAAChgB,SAAJ,EAA1C;EACvB,WAAO8zH,mBAAmB,GAAG9zG,GAAG,CAAChgB,SAAJ,EAA7B;EACD;;EAvDqC;;ECDzB,MAAMo0H,cAAN,CAAqB;EAClCpzI,EAAAA,WAAW,GAAG;EACZozI,IAAAA,cAAc,CAAC/vI,YAAf,CAA4BC,KAA5B,CAAkC,IAAlC,EAAwCC,SAAxC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKuuI,eAAL,GAAuB,CAAvB;EACA,SAAKyB,aAAL,GAAqB,CAArB;EACA,SAAKC,gBAAL,GAAwB,GAAxB;;EACA,QAAI/vI,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B,CAA5B,MAAoC,IAAID,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC9D,YAAMm+C,GAAG,GAAGp+C,SAAS,CAAC,CAAD,CAArB;EACA,WAAKquI,eAAL,GAAuBjwF,GAAG,CAACiwF,eAA3B;EACA,WAAKyB,aAAL,GAAqB1xF,GAAG,CAAC0xF,aAAzB;EACA,WAAKC,gBAAL,GAAwB3xF,GAAG,CAAC2xF,gBAA5B;EACD,KALmC,MAK7B,IAAI/vI,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAM83B,YAAY,GAAG/3B,SAAS,CAAC,CAAD,CAA9B;EAAA,YAAmCi+B,eAAe,GAAGj+B,SAAS,CAAC,CAAD,CAA9D;EACA6vI,MAAAA,cAAc,CAAC/vI,YAAf,CAA4BI,IAA5B,CAAiC,IAAjC,EAAuC,CAAvC,EAA0C63B,YAA1C,EAAwDkG,eAAxD;EACD,KAHM,MAGA,IAAIj+B,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAM0uI,cAAc,GAAG3uI,SAAS,CAAC,CAAD,CAAhC;EAAA,YAAqC+3B,YAAY,GAAG/3B,SAAS,CAAC,CAAD,CAA7D;EAAA,YAAkEi+B,eAAe,GAAGj+B,SAAS,CAAC,CAAD,CAA7F;EACA,WAAKquI,eAAL,GAAuBM,cAAvB;EACA,WAAKmB,aAAL,GAAqB/3G,YAArB;EACA,WAAKg4G,gBAAL,GAAwB9xG,eAAxB;EACA,WAAK3hB,SAAL;EACD,KANM,MAMA,IAAItc,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAM0uI,cAAc,GAAG3uI,SAAS,CAAC,CAAD,CAAhC;EAAA,YAAqC+3B,YAAY,GAAG/3B,SAAS,CAAC,CAAD,CAA7D;EAAA,YAAkEi+B,eAAe,GAAGj+B,SAAS,CAAC,CAAD,CAA7F;EAAA,YAAkGgwI,WAAW,GAAGhwI,SAAS,CAAC,CAAD,CAAzH;EACA,WAAKquI,eAAL,GAAuBM,cAAvB;EACA,WAAKmB,aAAL,GAAqB/3G,YAArB;EACA,WAAKg4G,gBAAL,GAAwB9xG,eAAxB;EACA,UAAI+xG,WAAJ,EAAiB,KAAK1zH,SAAL;EAClB;EACF;;EACD,SAAO2zH,cAAP,CAAsB1B,MAAtB,EAA8B;EAC5B,UAAMnwF,GAAG,GAAG,IAAIyxF,cAAJ,EAAZ;EACAzxF,IAAAA,GAAG,CAAC8xF,QAAJ,CAAa3B,MAAb;EACA,WAAOnwF,GAAP;EACD;;EACD,SAAO+xF,2BAAP,CAAmCjsH,EAAnC,EAAuCvb,EAAvC,EAA2Ck9B,IAA3C,EAAiD;EAC/C,QAAIA,IAAI,IAAI,GAAZ,EAAiB,OAAO3hB,EAAP;EACjB,QAAI2hB,IAAI,IAAI,GAAZ,EAAiB,OAAOl9B,EAAP;EACjB,UAAM5J,CAAC,GAAG,CAAC4J,EAAE,CAAC5J,CAAH,GAAOmlB,EAAE,CAACnlB,CAAX,IAAgB8mC,IAAhB,GAAuB3hB,EAAE,CAACnlB,CAApC;EACA,UAAMC,CAAC,GAAG,CAAC2J,EAAE,CAAC3J,CAAH,GAAOklB,EAAE,CAACllB,CAAX,IAAgB6mC,IAAhB,GAAuB3hB,EAAE,CAACllB,CAApC;EACA,UAAM+B,CAAC,GAAG,CAAC4H,EAAE,CAAC1H,IAAH,KAAYijB,EAAE,CAACjjB,IAAH,EAAb,IAA0B4kC,IAA1B,GAAiC3hB,EAAE,CAACjjB,IAAH,EAA3C;EACA,WAAO,IAAIH,UAAJ,CAAe/B,CAAf,EAAkBC,CAAlB,EAAqB+B,CAArB,CAAP;EACD;;EACD,SAAOqvI,qBAAP,CAA6BC,eAA7B,EAA8CC,aAA9C,EAA6DC,gBAA7D,EAA+EC,eAA/E,EAAgGC,aAAhG,EAA+GC,gBAA/G,EAAiI;EAC/H,QAAIL,eAAe,GAAGG,eAAtB,EAAuC,OAAO,CAAC,CAAR;EACvC,QAAIH,eAAe,GAAGG,eAAtB,EAAuC,OAAO,CAAP;EACvC,QAAIF,aAAa,GAAGG,aAApB,EAAmC,OAAO,CAAC,CAAR;EACnC,QAAIH,aAAa,GAAGG,aAApB,EAAmC,OAAO,CAAP;EACnC,QAAIF,gBAAgB,GAAGG,gBAAvB,EAAyC,OAAO,CAAC,CAAR;EACzC,QAAIH,gBAAgB,GAAGG,gBAAvB,EAAyC,OAAO,CAAP;EACzC,WAAO,CAAP;EACD;;EACD,SAAOC,WAAP,CAAmB12H,IAAnB,EAAyB;EACvB,UAAM2P,IAAI,GAAG3P,IAAI,CAAC2I,YAAL,EAAb;EACA,QAAIgH,IAAI,IAAI,CAAZ,EAAe,OAAO,CAAP;EACf,WAAOA,IAAI,GAAG,CAAd;EACD;;EACDmwC,EAAAA,eAAe,GAAG;EAChB,WAAO,KAAK+1E,aAAZ;EACD;;EACDtB,EAAAA,iBAAiB,GAAG;EAClB,WAAO,KAAKH,eAAZ;EACD;;EACDuC,EAAAA,UAAU,CAAClC,UAAD,EAAa;EACrB,UAAMmC,QAAQ,GAAGnC,UAAU,CAAC3zH,YAAX,CAAwB,KAAKszH,eAA7B,CAAjB;EACA,UAAMyC,IAAI,GAAGjB,cAAc,CAACc,WAAf,CAA2BE,QAA3B,CAAb;EACA,WAAO,KAAKf,aAAL,IAAsBgB,IAAtB,IAA8B,KAAKhB,aAAL,KAAuBgB,IAAI,GAAG,CAA9B,IAAmC,KAAKf,gBAAL,IAAyB,GAAjG;EACD;;EACDhoH,EAAAA,OAAO,CAAC2mH,UAAD,EAAa;EAClB,QAAI,KAAKL,eAAL,GAAuB,CAAvB,IAA4B,KAAKA,eAAL,IAAwBK,UAAU,CAAChzH,gBAAX,EAAxD,EAAuF,OAAO,KAAP;EACvF,UAAMm1H,QAAQ,GAAGnC,UAAU,CAAC3zH,YAAX,CAAwB,KAAKszH,eAA7B,CAAjB;EACA,QAAI,KAAKyB,aAAL,GAAqB,CAArB,IAA0B,KAAKA,aAAL,GAAqBe,QAAQ,CAACjuH,YAAT,EAAnD,EAA4E,OAAO,KAAP;EAC5E,QAAI,KAAKktH,aAAL,KAAuBe,QAAQ,CAACjuH,YAAT,EAAvB,IAAkD,KAAKmtH,gBAAL,KAA0B,GAAhF,EAAqF,OAAO,KAAP;EACrF,QAAI,KAAKA,gBAAL,GAAwB,GAAxB,IAA+B,KAAKA,gBAAL,GAAwB,GAA3D,EAAgE,OAAO,KAAP;EAChE,WAAO,IAAP;EACD;;EACDzzH,EAAAA,SAAS,GAAG;EACV,QAAI,KAAKyzH,gBAAL,GAAwB,GAA5B,EACE,KAAKA,gBAAL,GAAwB,GAAxB;EAEF,QAAI,KAAKA,gBAAL,GAAwB,GAA5B,EACE,KAAKA,gBAAL,GAAwB,GAAxB;;EAEF,QAAI,KAAK1B,eAAL,GAAuB,CAA3B,EAA8B;EAC5B,WAAKA,eAAL,GAAuB,CAAvB;EACA,WAAKyB,aAAL,GAAqB,CAArB;EACA,WAAKC,gBAAL,GAAwB,GAAxB;EACD;;EACD,QAAI,KAAKD,aAAL,GAAqB,CAAzB,EAA4B;EAC1B,WAAKA,aAAL,GAAqB,CAArB;EACA,WAAKC,gBAAL,GAAwB,GAAxB;EACD;;EACD,QAAI,KAAKA,gBAAL,KAA0B,GAA9B,EAAmC;EACjC,WAAKA,gBAAL,GAAwB,GAAxB;EACA,WAAKD,aAAL,IAAsB,CAAtB;EACD;EACF;;EACDiB,EAAAA,QAAQ,CAACrC,UAAD,EAAa;EACnB,UAAMmC,QAAQ,GAAGnC,UAAU,CAAC3zH,YAAX,CAAwB,KAAKszH,eAA7B,CAAjB;EACA,UAAMyC,IAAI,GAAGjB,cAAc,CAACc,WAAf,CAA2BE,QAA3B,CAAb;EACA,QAAI,KAAKf,aAAL,GAAqBgB,IAAzB,EAA+B,OAAO,IAAP;EAC/B,WAAO,IAAIjB,cAAJ,CAAmB,KAAKxB,eAAxB,EAAyCyC,IAAI,GAAG,CAAhD,EAAmD,GAAnD,EAAwD,KAAxD,CAAP;EACD;;EACDpqI,EAAAA,aAAa,CAACgoI,UAAD,EAAa;EACxB,UAAMmC,QAAQ,GAAGnC,UAAU,CAAC3zH,YAAX,CAAwB,KAAKszH,eAA7B,CAAjB;EACA,UAAMnqH,EAAE,GAAG2sH,QAAQ,CAACluH,cAAT,CAAwB,KAAKmtH,aAA7B,CAAX;EACA,QAAI,KAAKA,aAAL,IAAsBD,cAAc,CAACc,WAAf,CAA2BE,QAA3B,CAA1B,EAAgE,OAAO3sH,EAAP;EAChE,UAAMvb,EAAE,GAAGkoI,QAAQ,CAACluH,cAAT,CAAwB,KAAKmtH,aAAL,GAAqB,CAA7C,CAAX;EACA,WAAOD,cAAc,CAACM,2BAAf,CAA2CjsH,EAA3C,EAA+Cvb,EAA/C,EAAmD,KAAKonI,gBAAxD,CAAP;EACD;;EACDlB,EAAAA,kBAAkB,GAAG;EACnB,WAAO,KAAKkB,gBAAZ;EACD;;EACD/Y,EAAAA,UAAU,CAAC0X,UAAD,EAAa;EACrB,UAAMmC,QAAQ,GAAGnC,UAAU,CAAC3zH,YAAX,CAAwB,KAAKszH,eAA7B,CAAjB;EACA,UAAMnqH,EAAE,GAAG2sH,QAAQ,CAACluH,cAAT,CAAwB,KAAKmtH,aAA7B,CAAX;;EACA,QAAI,KAAKA,aAAL,IAAsBD,cAAc,CAACc,WAAf,CAA2BE,QAA3B,CAA1B,EAAgE;EAC9D,YAAMrpI,IAAI,GAAGqpI,QAAQ,CAACluH,cAAT,CAAwBkuH,QAAQ,CAACjuH,YAAT,KAA0B,CAAlD,CAAb;EACA,aAAO,IAAIyY,WAAJ,CAAgB7zB,IAAhB,EAAsB0c,EAAtB,CAAP;EACD;;EACD,UAAMvb,EAAE,GAAGkoI,QAAQ,CAACluH,cAAT,CAAwB,KAAKmtH,aAAL,GAAqB,CAA7C,CAAX;EACA,WAAO,IAAIz0G,WAAJ,CAAgBnX,EAAhB,EAAoBvb,EAApB,CAAP;EACD;;EACDsQ,EAAAA,KAAK,CAACs1H,MAAD,EAAS;EACZ,QAAI,KAAKF,eAAL,IAAwBE,MAAM,CAAC7yH,gBAAP,EAA5B,EAAuD;EACrD,WAAKw0H,QAAL,CAAc3B,MAAd;EACA,aAAO,IAAP;EACD;;EACD,QAAI,KAAKuB,aAAL,IAAsBvB,MAAM,CAAC3rH,YAAP,EAA1B,EAAiD;EAC/C,YAAM3I,IAAI,GAAGs0H,MAAM,CAACxzH,YAAP,CAAoB,KAAKszH,eAAzB,CAAb;EACA,WAAKyB,aAAL,GAAqBD,cAAc,CAACc,WAAf,CAA2B12H,IAA3B,CAArB;EACA,WAAK81H,gBAAL,GAAwB,GAAxB;EACD;EACF;;EACDG,EAAAA,QAAQ,CAAC3B,MAAD,EAAS;EACf,SAAKF,eAAL,GAAuBE,MAAM,CAAC7yH,gBAAP,KAA4B,CAAnD;EACA,UAAMs1H,QAAQ,GAAGzC,MAAM,CAACxzH,YAAP,CAAoB,KAAKszH,eAAzB,CAAjB;EACA,SAAKyB,aAAL,GAAqBD,cAAc,CAACc,WAAf,CAA2BK,QAA3B,CAArB;EACA,SAAKjB,gBAAL,GAAwB,GAAxB;EACD;;EACD3tI,EAAAA,SAAS,CAACC,CAAD,EAAI;EACX,UAAMT,KAAK,GAAGS,CAAd;EACA,QAAI,KAAKgsI,eAAL,GAAuBzsI,KAAK,CAACysI,eAAjC,EAAkD,OAAO,CAAC,CAAR;EAClD,QAAI,KAAKA,eAAL,GAAuBzsI,KAAK,CAACysI,eAAjC,EAAkD,OAAO,CAAP;EAClD,QAAI,KAAKyB,aAAL,GAAqBluI,KAAK,CAACkuI,aAA/B,EAA8C,OAAO,CAAC,CAAR;EAC9C,QAAI,KAAKA,aAAL,GAAqBluI,KAAK,CAACkuI,aAA/B,EAA8C,OAAO,CAAP;EAC9C,QAAI,KAAKC,gBAAL,GAAwBnuI,KAAK,CAACmuI,gBAAlC,EAAoD,OAAO,CAAC,CAAR;EACpD,QAAI,KAAKA,gBAAL,GAAwBnuI,KAAK,CAACmuI,gBAAlC,EAAoD,OAAO,CAAP;EACpD,WAAO,CAAP;EACD;;EACDptI,EAAAA,IAAI,GAAG;EACL,WAAO,IAAIktI,cAAJ,CAAmB,KAAKxB,eAAxB,EAAyC,KAAKyB,aAA9C,EAA6D,KAAKC,gBAAlE,CAAP;EACD;;EACDjzI,EAAAA,QAAQ,GAAG;EACT,WAAO,eAAe,KAAKuxI,eAApB,GAAsC,IAAtC,GAA6C,KAAKyB,aAAlD,GAAkE,IAAlE,GAAyE,KAAKC,gBAA9E,GAAiG,GAAxG;EACD;;EACDkB,EAAAA,eAAe,CAAC7yF,GAAD,EAAM;EACnB,QAAI,KAAKiwF,eAAL,KAAyBjwF,GAAG,CAACiwF,eAAjC,EAAkD,OAAO,KAAP;EAClD,QAAI,KAAKyB,aAAL,KAAuB1xF,GAAG,CAAC0xF,aAA/B,EAA8C,OAAO,IAAP;EAC9C,QAAI1xF,GAAG,CAAC0xF,aAAJ,GAAoB,KAAKA,aAAzB,KAA2C,CAA3C,IAAgD1xF,GAAG,CAAC2xF,gBAAJ,KAAyB,GAA7E,EAAkF,OAAO,IAAP;EAClF,QAAI,KAAKD,aAAL,GAAqB1xF,GAAG,CAAC0xF,aAAzB,KAA2C,CAA3C,IAAgD,KAAKC,gBAAL,KAA0B,GAA9E,EAAmF,OAAO,IAAP;EACnF,WAAO,KAAP;EACD;;EACDmB,EAAAA,YAAY,CAACxC,UAAD,EAAax0H,WAAb,EAA0B;EACpC,QAAI,KAAK61H,gBAAL,IAAyB,GAAzB,IAAgC,KAAKA,gBAAL,IAAyB,GAA7D,EAAkE,OAAO,IAAP;EAClE,UAAMl9B,MAAM,GAAG,KAAKs+B,gBAAL,CAAsBzC,UAAtB,CAAf;EACA,UAAM0C,UAAU,GAAG,KAAKrB,gBAAL,GAAwBl9B,MAA3C;EACA,UAAMw+B,QAAQ,GAAGx+B,MAAM,GAAGu+B,UAA1B;EACA,QAAIA,UAAU,IAAIC,QAAd,IAA0BD,UAAU,GAAGl3H,WAA3C,EACE,KAAK61H,gBAAL,GAAwB,GAAxB,CADF,KAEK,IAAIsB,QAAQ,IAAID,UAAZ,IAA0BC,QAAQ,GAAGn3H,WAAzC,EACH,KAAK61H,gBAAL,GAAwB,GAAxB;EAEH;;EACDK,EAAAA,qBAAqB,CAACI,eAAD,EAAkBC,aAAlB,EAAiCC,gBAAjC,EAAmD;EACtE,QAAI,KAAKrC,eAAL,GAAuBmC,eAA3B,EAA4C,OAAO,CAAC,CAAR;EAC5C,QAAI,KAAKnC,eAAL,GAAuBmC,eAA3B,EAA4C,OAAO,CAAP;EAC5C,QAAI,KAAKV,aAAL,GAAqBW,aAAzB,EAAwC,OAAO,CAAC,CAAR;EACxC,QAAI,KAAKX,aAAL,GAAqBW,aAAzB,EAAwC,OAAO,CAAP;EACxC,QAAI,KAAKV,gBAAL,GAAwBW,gBAA5B,EAA8C,OAAO,CAAC,CAAR;EAC9C,QAAI,KAAKX,gBAAL,GAAwBW,gBAA5B,EAA8C,OAAO,CAAP;EAC9C,WAAO,CAAP;EACD;;EACDS,EAAAA,gBAAgB,CAACzC,UAAD,EAAa;EAC3B,UAAMmC,QAAQ,GAAGnC,UAAU,CAAC3zH,YAAX,CAAwB,KAAKszH,eAA7B,CAAjB;EACA,QAAIjtC,QAAQ,GAAG,KAAK0uC,aAApB;EACA,QAAI,KAAKA,aAAL,IAAsBD,cAAc,CAACc,WAAf,CAA2BE,QAA3B,CAA1B,EAAgEzvC,QAAQ,GAAGyvC,QAAQ,CAACjuH,YAAT,KAA0B,CAArC;EAChE,UAAMsB,EAAE,GAAG2sH,QAAQ,CAACluH,cAAT,CAAwBy+E,QAAxB,CAAX;EACA,UAAMz4F,EAAE,GAAGkoI,QAAQ,CAACluH,cAAT,CAAwBy+E,QAAQ,GAAG,CAAnC,CAAX;EACA,WAAOl9E,EAAE,CAAC/gB,QAAH,CAAYwF,EAAZ,CAAP;EACD;;EACD2oI,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAKvB,gBAAL,IAAyB,GAAzB,IAAgC,KAAKA,gBAAL,IAAyB,GAAhE;EACD;;EACD,MAAI1sI,WAAJ,GAAkB;EAChB,WAAO,CAAC7D,UAAD,CAAP;EACD;;EApMiC;;ECErB,MAAM+xI,oBAAN,CAA2B;EACxC90I,EAAAA,WAAW,GAAG;EACZ80I,IAAAA,oBAAoB,CAACzxI,YAArB,CAAkCC,KAAlC,CAAwC,IAAxC,EAA8CC,SAA9C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKouI,WAAL,GAAmB,IAAnB;EACA,UAAMQ,UAAU,GAAG1uI,SAAS,CAAC,CAAD,CAA5B;EACA,SAAKkuI,WAAL,GAAmBQ,UAAnB;EACD;;EACD,SAAOpqI,OAAP,CAAeoqI,UAAf,EAA2BxwG,OAA3B,EAAoC;EAClC,UAAMqgE,OAAO,GAAG,IAAIgzC,oBAAJ,CAAyB7C,UAAzB,CAAhB;EACA,WAAOnwC,OAAO,CAACj6F,OAAR,CAAgB45B,OAAhB,CAAP;EACD;;EACD,SAAOixG,YAAP,CAAoBT,UAApB,EAAgCxwG,OAAhC,EAAyCkxG,QAAzC,EAAmD;EACjD,UAAM7wC,OAAO,GAAG,IAAIgzC,oBAAJ,CAAyB7C,UAAzB,CAAhB;EACA,WAAOnwC,OAAO,CAAC4wC,YAAR,CAAqBjxG,OAArB,EAA8BkxG,QAA9B,CAAP;EACD;;EACD9qI,EAAAA,OAAO,CAAC45B,OAAD,EAAU;EACf,WAAO,KAAKmxG,gBAAL,CAAsBnxG,OAAtB,EAA+B,IAA/B,CAAP;EACD;;EACDmxG,EAAAA,gBAAgB,CAACnxG,OAAD,EAAUkxG,QAAV,EAAoB;EAClC,QAAIl1H,WAAW,GAAG3c,MAAM,CAACO,SAAzB;EACA,QAAI0zI,iBAAiB,GAAG,CAAxB;EACA,QAAIC,eAAe,GAAG,CAAtB;EACA,QAAInW,OAAO,GAAG,CAAC,GAAf;EACA,UAAM7/F,GAAG,GAAG,IAAIJ,WAAJ,EAAZ;;EACA,SAAK,IAAI9O,EAAE,GAAG,IAAI0hH,cAAJ,CAAmB,KAAKC,WAAxB,CAAd,EAAoD3hH,EAAE,CAAChmB,OAAH,EAApD,EAAkEgmB,EAAE,CAACjmB,IAAH,EAAlE,EACE,IAAI,CAACimB,EAAE,CAAC0iH,WAAH,EAAL,EAAuB;EACrBxzG,MAAAA,GAAG,CAACvX,EAAJ,GAASqI,EAAE,CAACyiH,eAAH,EAAT;EACAvzG,MAAAA,GAAG,CAAC9yB,EAAJ,GAAS4jB,EAAE,CAACwiH,aAAH,EAAT;EACA,YAAMS,WAAW,GAAG/zG,GAAG,CAACt4B,QAAJ,CAAa+6B,OAAb,CAApB;EACA,YAAMC,OAAO,GAAG1C,GAAG,CAACwC,eAAJ,CAAoBC,OAApB,CAAhB;EACA,YAAMwzG,uBAAuB,GAAGnlH,EAAE,CAACiiH,iBAAH,EAAhC;EACA,YAAMmD,qBAAqB,GAAGplH,EAAE,CAACuiH,cAAH,EAA9B;EACA,UAAIU,WAAW,GAAGt1H,WAAlB,EACE,IAAIk1H,QAAQ,KAAK,IAAb,IAAqBA,QAAQ,CAACgB,qBAAT,CAA+BsB,uBAA/B,EAAwDC,qBAAxD,EAA+ExzG,OAA/E,IAA0F,CAAnH,EAAsH;EACpHqzG,QAAAA,iBAAiB,GAAGE,uBAApB;EACAD,QAAAA,eAAe,GAAGE,qBAAlB;EACArW,QAAAA,OAAO,GAAGn9F,OAAV;EACAjkB,QAAAA,WAAW,GAAGs1H,WAAd;EACD;EAEJ;;EAEH,QAAIt1H,WAAW,KAAK3c,MAAM,CAACO,SAA3B,EACE,OAAO,IAAI+xI,cAAJ,CAAmBT,QAAnB,CAAP;EAEF,UAAMhxF,GAAG,GAAG,IAAIyxF,cAAJ,CAAmB2B,iBAAnB,EAAsCC,eAAtC,EAAuDnW,OAAvD,CAAZ;EACA,WAAOl9E,GAAP;EACD;;EACD+wF,EAAAA,YAAY,CAACjxG,OAAD,EAAUkxG,QAAV,EAAoB;EAC9B,QAAIA,QAAQ,KAAK,IAAjB,EAAuB,OAAO,KAAK9qI,OAAL,CAAa45B,OAAb,CAAP;EACvB,UAAM0zG,MAAM,GAAG/B,cAAc,CAACI,cAAf,CAA8B,KAAK/B,WAAnC,CAAf;EACA,QAAI0D,MAAM,CAACxvI,SAAP,CAAiBgtI,QAAjB,KAA8B,CAAlC,EAAqC,OAAOwC,MAAP;EACrC,UAAMjC,YAAY,GAAG,KAAKN,gBAAL,CAAsBnxG,OAAtB,EAA+BkxG,QAA/B,CAArB;EACAjvI,IAAAA,MAAM,CAACE,MAAP,CAAcsvI,YAAY,CAACvtI,SAAb,CAAuBgtI,QAAvB,KAAoC,CAAlD,EAAqD,wDAArD;EACA,WAAOO,YAAP;EACD;;EAzDuC;;ECJ3B,MAAMkC,mBAAN,CAA0B;EACvCp1I,EAAAA,WAAW,GAAG;EACZo1I,IAAAA,mBAAmB,CAAC/xI,YAApB,CAAiCC,KAAjC,CAAuC,IAAvC,EAA6CC,SAA7C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKouI,WAAL,GAAmB,IAAnB;EACA,UAAMQ,UAAU,GAAG1uI,SAAS,CAAC,CAAD,CAA5B;EACA,SAAKkuI,WAAL,GAAmBQ,UAAnB;EACD;;EACD,SAAOoD,SAAP,CAAiBpD,UAAjB,EAA6BqD,OAA7B,EAAsC;EACpC,UAAMxzC,OAAO,GAAG,IAAIszC,mBAAJ,CAAwBnD,UAAxB,CAAhB;EACA,WAAOnwC,OAAO,CAACuzC,SAAR,CAAkBC,OAAlB,CAAP;EACD;;EACDD,EAAAA,SAAS,CAACC,OAAD,EAAU;EACjB,UAAM7hD,OAAO,GAAG6hD,OAAO,CAACh3H,YAAR,CAAqB,CAArB,EAAwB4H,cAAxB,CAAuC,CAAvC,CAAhB;EACA,UAAMquH,QAAQ,GAAGe,OAAO,CAACh3H,YAAR,CAAqBg3H,OAAO,CAACr2H,gBAAR,KAA6B,CAAlD,CAAjB;EACA,UAAMqsG,KAAK,GAAGipB,QAAQ,CAACruH,cAAT,CAAwBquH,QAAQ,CAACpuH,YAAT,KAA0B,CAAlD,CAAd;EACA,UAAMovH,KAAK,GAAG,IAAIT,oBAAJ,CAAyB,KAAKrD,WAA9B,CAAd;EACA,UAAM+D,UAAU,GAAG,IAAI/qI,KAAJ,CAAU,CAAV,EAAaC,IAAb,CAAkB,IAAlB,CAAnB;EACA8qI,IAAAA,UAAU,CAAC,CAAD,CAAV,GAAgBD,KAAK,CAAC1tI,OAAN,CAAc4rF,OAAd,CAAhB;EACA,QAAI6hD,OAAO,CAACt2H,SAAR,OAAwB,GAA5B,EACEw2H,UAAU,CAAC,CAAD,CAAV,GAAgBA,UAAU,CAAC,CAAD,CAAV,CAActvI,IAAd,EAAhB,CADF,KAGEsvI,UAAU,CAAC,CAAD,CAAV,GAAgBD,KAAK,CAAC7C,YAAN,CAAmBpnB,KAAnB,EAA0BkqB,UAAU,CAAC,CAAD,CAApC,CAAhB;EAEF,WAAOA,UAAP;EACD;;EA1BsC;;ECC1B,MAAMC,iBAAN,CAAwB;EACrCz1I,EAAAA,WAAW,GAAG;EACZy1I,IAAAA,iBAAiB,CAACpyI,YAAlB,CAA+BC,KAA/B,CAAqC,IAArC,EAA2CC,SAA3C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKouI,WAAL,GAAmB,IAAnB;EACA,UAAMQ,UAAU,GAAG1uI,SAAS,CAAC,CAAD,CAA5B;EACA,SAAKkuI,WAAL,GAAmBQ,UAAnB;EACD;;EACD,SAAOjzH,SAAP,CAAiBizH,UAAjB,EAA6BtwF,GAA7B,EAAkC;EAChC,UAAMmgD,OAAO,GAAG,IAAI2zC,iBAAJ,CAAsBxD,UAAtB,CAAhB;EACA,WAAOnwC,OAAO,CAAC9iF,SAAR,CAAkB2iC,GAAlB,CAAP;EACD;;EACD,SAAO/B,WAAP,GAAqB;EACnB,QAAIr8C,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMyuI,UAAU,GAAG1uI,SAAS,CAAC,CAAD,CAA5B;EAAA,YAAiCC,MAAM,GAAGD,SAAS,CAAC,CAAD,CAAnD;EACA,YAAMu+F,OAAO,GAAG,IAAI2zC,iBAAJ,CAAsBxD,UAAtB,CAAhB;EACA,aAAOnwC,OAAO,CAACliD,WAAR,CAAoBp8C,MAApB,CAAP;EACD,KAJD,MAIO,IAAID,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMyuI,UAAU,GAAG1uI,SAAS,CAAC,CAAD,CAA5B;EAAA,YAAiCC,MAAM,GAAGD,SAAS,CAAC,CAAD,CAAnD;EAAA,YAAwDmyI,YAAY,GAAGnyI,SAAS,CAAC,CAAD,CAAhF;EACA,YAAMu+F,OAAO,GAAG,IAAI2zC,iBAAJ,CAAsBxD,UAAtB,CAAhB;EACA,aAAOnwC,OAAO,CAACliD,WAAR,CAAoBp8C,MAApB,EAA4BkyI,YAA5B,CAAP;EACD;EACF;;EACD12H,EAAAA,SAAS,CAAC2iC,GAAD,EAAM;EACb,QAAIg0F,WAAW,GAAG,GAAlB;EACA,UAAM7lH,EAAE,GAAG,IAAI0hH,cAAJ,CAAmB,KAAKC,WAAxB,CAAX;;EACA,WAAO3hH,EAAE,CAAChmB,OAAH,EAAP,EAAqB;EACnB,UAAI,CAACgmB,EAAE,CAAC0iH,WAAH,EAAL,EAAuB;EACrB,cAAM/qH,EAAE,GAAGqI,EAAE,CAACyiH,eAAH,EAAX;EACA,cAAMrmI,EAAE,GAAG4jB,EAAE,CAACwiH,aAAH,EAAX;EACA,cAAMl8B,MAAM,GAAGlqG,EAAE,CAACxF,QAAH,CAAY+gB,EAAZ,CAAf;EACA,YAAIk6B,GAAG,CAACowF,iBAAJ,OAA4BjiH,EAAE,CAACiiH,iBAAH,EAA5B,IAAsDpwF,GAAG,CAAC2b,eAAJ,OAA0BxtC,EAAE,CAACuiH,cAAH,EAApF,EACE,OAAOsD,WAAW,GAAGv/B,MAAM,GAAGz0D,GAAG,CAACywF,kBAAJ,EAA9B;EAEFuD,QAAAA,WAAW,IAAIv/B,MAAf;EACD;;EACDtmF,MAAAA,EAAE,CAACjmB,IAAH;EACD;;EACD,WAAO8rI,WAAP;EACD;;EACDC,EAAAA,aAAa,CAACj0F,GAAD,EAAM;EACjB,QAAI,CAACA,GAAG,CAACwyF,UAAJ,CAAe,KAAK1C,WAApB,CAAL,EAAuC,OAAO9vF,GAAP;EACvC,QAAIk0F,SAAS,GAAGl0F,GAAG,CAACowF,iBAAJ,EAAhB;EACA,QAAI8D,SAAS,IAAI,KAAKpE,WAAL,CAAiBxyH,gBAAjB,KAAsC,CAAvD,EAA0D,OAAO0iC,GAAP;;EAC1D,OACEk0F,SAAS,GADX,QAEOA,SAAS,GAAG,KAAKpE,WAAL,CAAiBxyH,gBAAjB,KAAsC,CAAlD,IAAuD,KAAKwyH,WAAL,CAAiBnzH,YAAjB,CAA8Bu3H,SAA9B,EAAyC72H,SAAzC,OAAyD,CAFvH;;EAGA,WAAO,IAAIo0H,cAAJ,CAAmByC,SAAnB,EAA8B,CAA9B,EAAiC,GAAjC,CAAP;EACD;;EACDj2F,EAAAA,WAAW,GAAG;EACZ,QAAIr8C,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMA,MAAM,GAAGD,SAAS,CAAC,CAAD,CAAxB;EACA,aAAO,KAAKq8C,WAAL,CAAiBp8C,MAAjB,EAAyB,IAAzB,CAAP;EACD,KAHD,MAGO,IAAID,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMA,MAAM,GAAGD,SAAS,CAAC,CAAD,CAAxB;EAAA,YAA6BmyI,YAAY,GAAGnyI,SAAS,CAAC,CAAD,CAArD;EACA,UAAIuyI,aAAa,GAAGtyI,MAApB;;EACA,UAAIA,MAAM,GAAG,GAAb,EAAkB;EAChB,cAAMogD,OAAO,GAAG,KAAK6tF,WAAL,CAAiBzyH,SAAjB,EAAhB;;EACA82H,QAAAA,aAAa,GAAGlyF,OAAO,GAAGpgD,MAA1B;EACD;;EACD,YAAMm+C,GAAG,GAAG,KAAKo0F,kBAAL,CAAwBD,aAAxB,CAAZ;EACA,UAAIJ,YAAJ,EACE,OAAO/zF,GAAP;EAEF,aAAO,KAAKi0F,aAAL,CAAmBj0F,GAAnB,CAAP;EACD;EACF;;EACDo0F,EAAAA,kBAAkB,CAACvyI,MAAD,EAAS;EACzB,QAAIA,MAAM,IAAI,GAAd,EAAmB,OAAO,IAAI4vI,cAAJ,EAAP;EACnB,QAAIuC,WAAW,GAAG,GAAlB;EACA,UAAM7lH,EAAE,GAAG,IAAI0hH,cAAJ,CAAmB,KAAKC,WAAxB,CAAX;;EACA,WAAO3hH,EAAE,CAAChmB,OAAH,EAAP,EAAqB;EACnB,UAAIgmB,EAAE,CAAC0iH,WAAH,EAAJ,EAAsB;EACpB,YAAImD,WAAW,KAAKnyI,MAApB,EAA4B;EAC1B,gBAAMqyI,SAAS,GAAG/lH,EAAE,CAACiiH,iBAAH,EAAlB;EACA,gBAAMptC,QAAQ,GAAG70E,EAAE,CAACuiH,cAAH,EAAjB;EACA,iBAAO,IAAIe,cAAJ,CAAmByC,SAAnB,EAA8BlxC,QAA9B,EAAwC,GAAxC,CAAP;EACD;EACF,OAND,MAMO;EACL,cAAMl9E,EAAE,GAAGqI,EAAE,CAACyiH,eAAH,EAAX;EACA,cAAMrmI,EAAE,GAAG4jB,EAAE,CAACwiH,aAAH,EAAX;EACA,cAAMl8B,MAAM,GAAGlqG,EAAE,CAACxF,QAAH,CAAY+gB,EAAZ,CAAf;;EACA,YAAIkuH,WAAW,GAAGv/B,MAAd,GAAuB5yG,MAA3B,EAAmC;EACjC,gBAAM4lC,IAAI,GAAG,CAAC5lC,MAAM,GAAGmyI,WAAV,IAAyBv/B,MAAtC;EACA,gBAAMy/B,SAAS,GAAG/lH,EAAE,CAACiiH,iBAAH,EAAlB;EACA,gBAAMptC,QAAQ,GAAG70E,EAAE,CAACuiH,cAAH,EAAjB;EACA,iBAAO,IAAIe,cAAJ,CAAmByC,SAAnB,EAA8BlxC,QAA9B,EAAwCv7D,IAAxC,CAAP;EACD;;EACDusG,QAAAA,WAAW,IAAIv/B,MAAf;EACD;;EACDtmF,MAAAA,EAAE,CAACjmB,IAAH;EACD;;EACD,WAAOupI,cAAc,CAACI,cAAf,CAA8B,KAAK/B,WAAnC,CAAP;EACD;;EA9FoC;;ECCxB,MAAMuE,qBAAN,CAA4B;EACzCh2I,EAAAA,WAAW,GAAG;EACZg2I,IAAAA,qBAAqB,CAAC3yI,YAAtB,CAAmCC,KAAnC,CAAyC,IAAzC,EAA+CC,SAA/C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKgzC,SAAL,GAAiB,IAAjB;EACA,SAAKrB,MAAL,GAAc,IAAIrsC,SAAJ,EAAd;EACA,SAAK2iI,UAAL,GAAkB,IAAlB;EACA,SAAK2K,mBAAL,GAA2B,KAA3B;EACA,SAAKC,gBAAL,GAAwB,KAAxB;EACA,SAAKC,OAAL,GAAe,IAAf;EACA,UAAMx/F,QAAQ,GAAGpzC,SAAS,CAAC,CAAD,CAA1B;EACA,SAAK8yC,SAAL,GAAiBM,QAAjB;EACD;;EACD/B,EAAAA,WAAW,GAAG;EACZ,SAAKwhG,OAAL;EACA,WAAO,KAAK//F,SAAL,CAAexrB,aAAf,CAA6B,KAAKmqB,MAAlC,CAAP;EACD;;EACDqhG,EAAAA,iBAAiB,GAAG;EAClB,WAAO,KAAKF,OAAZ;EACD;;EACDC,EAAAA,OAAO,GAAG;EACR,QAAI,KAAK9K,UAAL,KAAoB,IAAxB,EACE,OAAO,IAAP;;EAEF,QAAI,KAAK2K,mBAAL,IAA4B,KAAK3K,UAAL,CAAgBnjI,IAAhB,KAAyB,CAAzD,EAA4D;EAC1D,WAAKmjI,UAAL,GAAkB,IAAlB;EACA,aAAO,IAAP;EACD;;EACD,UAAMgL,MAAM,GAAG,KAAKhL,UAAL,CAAgBjhI,iBAAhB,EAAf;;EACA,QAAIG,GAAG,GAAG8rI,MAAV;EACA,QAAI,KAAKJ,gBAAT,EAA2B1rI,GAAG,GAAG,KAAK+rI,uBAAL,CAA6BD,MAA7B,CAAN;EAC3B,SAAKhL,UAAL,GAAkB,IAAlB;EACA,QAAI9tH,IAAI,GAAG,IAAX;;EACA,QAAI;EACFA,MAAAA,IAAI,GAAG,KAAK64B,SAAL,CAAejwB,gBAAf,CAAgC5b,GAAhC,CAAP;EACD,KAFD,CAEE,OAAOoH,EAAP,EAAW;EACX,UAAIA,EAAE,YAAYtR,wBAAlB,EAA4C;EAC1C,YAAI,CAAC,KAAK21I,mBAAV,EAA+B,MAAMrkI,EAAN;EAChC,OAFD,MAEO;EACL,cAAMA,EAAN;EACD;EACF,KARD,SAQU;;EACV,QAAI4L,IAAI,KAAK,IAAb,EAAmB,KAAKw3B,MAAL,CAAYjtC,GAAZ,CAAgByV,IAAhB;EACpB;;EACDg5H,EAAAA,kBAAkB,CAACC,eAAD,EAAkB;EAClC,SAAKP,gBAAL,GAAwBO,eAAxB;EACD;;EACD1uI,EAAAA,GAAG,GAAG;EACJ,QAAIxE,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMojB,EAAE,GAAGrjB,SAAS,CAAC,CAAD,CAApB;EACA,WAAKwE,GAAL,CAAS6e,EAAT,EAAa,IAAb;EACD,KAHD,MAGO,IAAIrjB,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMojB,EAAE,GAAGrjB,SAAS,CAAC,CAAD,CAApB;EAAA,YAAyBmzI,mBAAmB,GAAGnzI,SAAS,CAAC,CAAD,CAAxD;EACA,UAAI,KAAK+nI,UAAL,KAAoB,IAAxB,EAA8B,KAAKA,UAAL,GAAkB,IAAIvhI,cAAJ,EAAlB;;EAC9B,WAAKuhI,UAAL,CAAgBvjI,GAAhB,CAAoB6e,EAApB,EAAwB8vH,mBAAxB;;EACA,WAAKP,OAAL,GAAevvH,EAAf;EACD;EACF;;EACD+vH,EAAAA,qBAAqB,CAACC,kBAAD,EAAqB;EACxC,SAAKX,mBAAL,GAA2BW,kBAA3B;EACD;;EACDL,EAAAA,uBAAuB,CAAC/rI,GAAD,EAAM;EAC3B,QAAIA,GAAG,CAAChH,MAAJ,IAAc,CAAlB,EAAqB,OAAOgH,GAAP;EACrB,UAAMqsI,QAAQ,GAAG,CAACrsI,GAAG,CAAC,CAAD,CAAJ,EAASA,GAAG,CAAC,CAAD,CAAZ,CAAjB;EACA,WAAOqsI,QAAP;EACD;;EAlEwC;;ECG5B,MAAMC,qBAAN,CAA4B;EACzC92I,EAAAA,WAAW,GAAG;EACZ82I,IAAAA,qBAAqB,CAACzzI,YAAtB,CAAmCC,KAAnC,CAAyC,IAAzC,EAA+CC,SAA/C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKorG,KAAL,GAAa,IAAb;EACA,UAAMjxF,IAAI,GAAGja,SAAS,CAAC,CAAD,CAAtB;EACA,SAAKkrG,KAAL,GAAajxF,IAAb;EACD;;EACD,SAAO0P,OAAP,CAAe1P,IAAf,EAAqBxS,KAArB,EAA4BC,GAA5B,EAAiC;EAC/B,UAAM4zB,EAAE,GAAG,IAAIi4G,qBAAJ,CAA0Bt5H,IAA1B,CAAX;EACA,WAAOqhB,EAAE,CAAC3R,OAAH,CAAWliB,KAAX,EAAkBC,GAAlB,CAAP;EACD;;EACD8rI,EAAAA,aAAa,CAAC/rI,KAAD,EAAQC,GAAR,EAAa;EACxB,UAAMy5B,OAAO,GAAG,IAAIsxG,qBAAJ,CAA0B,KAAKvnC,KAAL,CAAWrwF,UAAX,EAA1B,CAAhB;EACAsmB,IAAAA,OAAO,CAAC8xG,kBAAR,CAA2B,IAA3B;EACA,QAAI,CAACxrI,KAAK,CAAC6pI,QAAN,EAAL,EAAuBnwG,OAAO,CAAC38B,GAAR,CAAYiD,KAAK,CAACf,aAAN,CAAoB,KAAKwkG,KAAzB,CAAZ;;EACvB,SAAK,IAAI3+E,EAAE,GAAG,IAAI0hH,cAAJ,CAAmB,KAAK/iC,KAAxB,EAA+BzjG,KAA/B,CAAd,EAAqD8kB,EAAE,CAAChmB,OAAH,EAArD,EAAmEgmB,EAAE,CAACjmB,IAAH,EAAnE,EAA8E;EAC5E,UAAIoB,GAAG,CAAC0oI,qBAAJ,CAA0B7jH,EAAE,CAACiiH,iBAAH,EAA1B,EAAkDjiH,EAAE,CAACuiH,cAAH,EAAlD,EAAuE,GAAvE,IAA8E,CAAlF,EAAqF;EACrF,YAAMzrH,EAAE,GAAGkJ,EAAE,CAACyiH,eAAH,EAAX;EACA7tG,MAAAA,OAAO,CAAC38B,GAAR,CAAY6e,EAAZ;EACA,UAAIkJ,EAAE,CAAC0iH,WAAH,EAAJ,EAAsB9tG,OAAO,CAAC0xG,OAAR;EACvB;;EACD,QAAI,CAACnrI,GAAG,CAAC4pI,QAAJ,EAAL,EAAqBnwG,OAAO,CAAC38B,GAAR,CAAYkD,GAAG,CAAChB,aAAJ,CAAkB,KAAKwkG,KAAvB,CAAZ;EACrB,WAAO/pE,OAAO,CAACkQ,WAAR,EAAP;EACD;;EACDoiG,EAAAA,WAAW,CAAChsI,KAAD,EAAQC,GAAR,EAAa;EACtB,UAAMic,WAAW,GAAG,KAAKunF,KAAL,CAAW1oF,cAAX,EAApB;;EACA,UAAMiG,cAAc,GAAG,IAAIjiB,cAAJ,EAAvB;EACA,QAAIktI,iBAAiB,GAAGjsI,KAAK,CAACsyD,eAAN,EAAxB;EACA,QAAItyD,KAAK,CAAConI,kBAAN,KAA6B,GAAjC,EAAsC6E,iBAAiB,IAAI,CAArB;EACtC,QAAIC,gBAAgB,GAAGjsI,GAAG,CAACqyD,eAAJ,EAAvB;EACA,QAAIryD,GAAG,CAACmnI,kBAAJ,OAA6B,GAAjC,EAAsC8E,gBAAgB,IAAI,CAApB;EACtC,QAAIA,gBAAgB,IAAIhwH,WAAW,CAAC1jB,MAApC,EAA4C0zI,gBAAgB,GAAGhwH,WAAW,CAAC1jB,MAAZ,GAAqB,CAAxC;EAC5C,QAAI,CAACwH,KAAK,CAAC6pI,QAAN,EAAL,EAAuB7oH,cAAc,CAACjkB,GAAf,CAAmBiD,KAAK,CAACf,aAAN,CAAoB,KAAKwkG,KAAzB,CAAnB;;EACvB,SAAK,IAAI9tG,CAAC,GAAGs2I,iBAAb,EAAgCt2I,CAAC,IAAIu2I,gBAArC,EAAuDv2I,CAAC,EAAxD,EACEqrB,cAAc,CAACjkB,GAAf,CAAmBmf,WAAW,CAACvmB,CAAD,CAA9B;;EAEF,QAAI,CAACsK,GAAG,CAAC4pI,QAAJ,EAAL,EAAqB7oH,cAAc,CAACjkB,GAAf,CAAmBkD,GAAG,CAAChB,aAAJ,CAAkB,KAAKwkG,KAAvB,CAAnB;EACrB,QAAIziF,cAAc,CAAC7jB,IAAf,MAAyB,CAA7B,EAAgC6jB,cAAc,CAACjkB,GAAf,CAAmBiD,KAAK,CAACf,aAAN,CAAoB,KAAKwkG,KAAzB,CAAnB;EAChC,QAAI0oC,kBAAkB,GAAGnrH,cAAc,CAAC3hB,iBAAf,EAAzB;EACA,QAAI8sI,kBAAkB,CAAC3zI,MAAnB,IAA6B,CAAjC,EACE2zI,kBAAkB,GAAG,CAACA,kBAAkB,CAAC,CAAD,CAAnB,EAAwBA,kBAAkB,CAAC,CAAD,CAA1C,CAArB;EAEF,WAAO,KAAK1oC,KAAL,CAAWrwF,UAAX,GAAwBgI,gBAAxB,CAAyC+wH,kBAAzC,CAAP;EACD;;EACDjqH,EAAAA,OAAO,CAACliB,KAAD,EAAQC,GAAR,EAAa;EAClB,QAAIA,GAAG,CAACtF,SAAJ,CAAcqF,KAAd,IAAuB,CAA3B,EACE,OAAO,KAAK8U,OAAL,CAAa,KAAKi3H,aAAL,CAAmB9rI,GAAnB,EAAwBD,KAAxB,CAAb,CAAP;EAEF,WAAO,KAAK+rI,aAAL,CAAmB/rI,KAAnB,EAA0BC,GAA1B,CAAP;EACD;;EACD6U,EAAAA,OAAO,CAACgyH,MAAD,EAAS;EACd,QAAI5nI,YAAY,CAAC4nI,MAAD,EAAStvH,MAAT,CAAhB,EAAkC,OAAOsvH,MAAM,CAAChyH,OAAP,EAAP;EAClCpc,IAAAA,MAAM,CAACC,oBAAP,CAA4B,iCAA5B;EACA,WAAO,IAAP;EACD;;EAxDwC;;ECF5B,MAAMyzI,iBAAN,CAAwB;EACrCp3I,EAAAA,WAAW,GAAG;EACZo3I,IAAAA,iBAAiB,CAAC/zI,YAAlB,CAA+BC,KAA/B,CAAqC,IAArC,EAA2CC,SAA3C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKouI,WAAL,GAAmB,IAAnB;EACA,UAAMQ,UAAU,GAAG1uI,SAAS,CAAC,CAAD,CAA5B;EACA,SAAKkuI,WAAL,GAAmBQ,UAAnB;EACD;;EACDoF,EAAAA,UAAU,CAACpuI,KAAD,EAAQ;EAChB,UAAMgzD,QAAQ,GAAG,KAAKq7E,aAAL,CAAmBruI,KAAnB,CAAjB;EACA,UAAMklD,UAAU,GAAG,KAAK21B,aAAL,EAAnB;EACA,QAAI7nB,QAAQ,GAAG9N,UAAf,EAA2B,OAAOA,UAAP;EAC3B,UAAMywC,QAAQ,GAAG,KAAK/a,WAAL,EAAjB;EACA,QAAI5nB,QAAQ,GAAG2iC,QAAf,EAAyB,OAAOA,QAAP;EACzB,WAAO3iC,QAAP;EACD;;EACDs7E,EAAAA,UAAU,GAAG;EACX,QAAIh0I,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMyF,KAAK,GAAG1F,SAAS,CAAC,CAAD,CAAvB;EACA,aAAOkyI,iBAAiB,CAAC71F,WAAlB,CAA8B,KAAK6xF,WAAnC,EAAgDxoI,KAAhD,CAAP;EACD,KAHD,MAGO,IAAI1F,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMyF,KAAK,GAAG1F,SAAS,CAAC,CAAD,CAAvB;EAAA,YAA4BmyI,YAAY,GAAGnyI,SAAS,CAAC,CAAD,CAApD;EACA,aAAOkyI,iBAAiB,CAAC71F,WAAlB,CAA8B,KAAK6xF,WAAnC,EAAgDxoI,KAAhD,EAAuDysI,YAAvD,CAAP;EACD;EACF;;EACDp2G,EAAAA,OAAO,CAAC1Y,EAAD,EAAK;EACV,WAAO6rH,kBAAkB,CAAC5qI,OAAnB,CAA2B,KAAK4pI,WAAhC,EAA6C7qH,EAA7C,CAAP;EACD;;EACD0wH,EAAAA,aAAa,CAACruI,KAAD,EAAQ;EACnB,QAAIA,KAAK,IAAI,GAAb,EAAkB,OAAOA,KAAP;EAClB,WAAO,KAAKwoI,WAAL,CAAiBzyH,SAAjB,KAA+B/V,KAAtC;EACD;;EACDuuI,EAAAA,YAAY,GAAG;EACb,QAAIj0I,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMyF,KAAK,GAAG1F,SAAS,CAAC,CAAD,CAAvB;EACA,YAAMo+C,GAAG,GAAG8zF,iBAAiB,CAAC71F,WAAlB,CAA8B,KAAK6xF,WAAnC,EAAgDxoI,KAAhD,CAAZ;EACA,aAAO04C,GAAG,CAAC13C,aAAJ,CAAkB,KAAKwnI,WAAvB,CAAP;EACD,KAJD,MAIO,IAAIluI,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMyF,KAAK,GAAG1F,SAAS,CAAC,CAAD,CAAvB;EAAA,YAA4By9B,cAAc,GAAGz9B,SAAS,CAAC,CAAD,CAAtD;EACA,YAAMo+C,GAAG,GAAG8zF,iBAAiB,CAAC71F,WAAlB,CAA8B,KAAK6xF,WAAnC,EAAgDxoI,KAAhD,CAAZ;EACA,YAAMwuI,MAAM,GAAG91F,GAAG,CAAC2yF,QAAJ,CAAa,KAAK7C,WAAlB,CAAf;EACA,aAAOgG,MAAM,CAACld,UAAP,CAAkB,KAAKkX,WAAvB,EAAoC3wG,gBAApC,CAAqD22G,MAAM,CAACrF,kBAAP,EAArD,EAAkFpxG,cAAlF,CAAP;EACD;EACF;;EACD02G,EAAAA,YAAY,CAACzuI,KAAD,EAAQ;EAClB,WAAOA,KAAK,IAAI,KAAK66E,aAAL,EAAT,IAAiC76E,KAAK,IAAI,KAAK46E,WAAL,EAAjD;EACD;;EACDA,EAAAA,WAAW,GAAG;EACZ,WAAO,KAAK4tD,WAAL,CAAiBzyH,SAAjB,EAAP;EACD;;EACD8kE,EAAAA,aAAa,GAAG;EACd,WAAO,GAAP;EACD;;EACD4uD,EAAAA,YAAY,CAAC9rH,EAAD,EAAK+rH,QAAL,EAAe;EACzB,WAAOF,kBAAkB,CAACC,YAAnB,CAAgC,KAAKjB,WAArC,EAAkD7qH,EAAlD,EAAsD+rH,QAAtD,CAAP;EACD;;EACDgF,EAAAA,WAAW,CAACxpF,UAAD,EAAaywC,QAAb,EAAuB;EAChC,UAAMg5C,WAAW,GAAG,KAAKP,UAAL,CAAgBlpF,UAAhB,CAApB;EACA,UAAM0pF,SAAS,GAAG,KAAKR,UAAL,CAAgBz4C,QAAhB,CAAlB;EACA,UAAMk5C,iBAAiB,GAAGF,WAAW,KAAKC,SAA1C;EACA,UAAMr7C,QAAQ,GAAG,KAAK+6C,UAAL,CAAgBK,WAAhB,EAA6BE,iBAA7B,CAAjB;EACA,UAAM3C,MAAM,GAAG,KAAKoC,UAAL,CAAgBM,SAAhB,CAAf;EACA,WAAOf,qBAAqB,CAAC5pH,OAAtB,CAA8B,KAAKukH,WAAnC,EAAgDj1C,QAAhD,EAA0D24C,MAA1D,CAAP;EACD;;EACDttI,EAAAA,OAAO,CAAC+e,EAAD,EAAK;EACV,WAAO6rH,kBAAkB,CAAC5qI,OAAnB,CAA2B,KAAK4pI,WAAhC,EAA6C7qH,EAA7C,CAAP;EACD;;EACDyuH,EAAAA,SAAS,CAACC,OAAD,EAAU;EACjB,UAAMj5E,QAAQ,GAAG+4E,mBAAmB,CAACC,SAApB,CAA8B,KAAK5D,WAAnC,EAAgD6D,OAAhD,CAAjB;EACA,UAAMrsI,KAAK,GAAG,CAACwsI,iBAAiB,CAACz2H,SAAlB,CAA4B,KAAKyyH,WAAjC,EAA8Cp1E,QAAQ,CAAC,CAAD,CAAtD,CAAD,EAA6Do5E,iBAAiB,CAACz2H,SAAlB,CAA4B,KAAKyyH,WAAjC,EAA8Cp1E,QAAQ,CAAC,CAAD,CAAtD,CAA7D,CAAd;EACA,WAAOpzD,KAAP;EACD;;EAxEoC;;ECGxB,MAAM8uI,mBAAN,CAA0B;EACvC/3I,EAAAA,WAAW,GAAG;EACZ+3I,IAAAA,mBAAmB,CAAC10I,YAApB,CAAiCC,KAAjC,CAAuC,IAAvC,EAA6CC,SAA7C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKouI,WAAL,GAAmB,IAAnB;EACA,UAAMQ,UAAU,GAAG1uI,SAAS,CAAC,CAAD,CAA5B;EACA,SAAKkuI,WAAL,GAAmBQ,UAAnB;EACA,SAAK+F,iBAAL;EACD;;EACDX,EAAAA,UAAU,CAACpuI,KAAD,EAAQ;EAChB,UAAM04C,GAAG,GAAG14C,KAAK,CAAC/C,IAAN,EAAZ;EACAy7C,IAAAA,GAAG,CAACnlC,KAAJ,CAAU,KAAKi1H,WAAf;EACA,WAAO9vF,GAAP;EACD;;EACDriB,EAAAA,OAAO,CAAC1Y,EAAD,EAAK;EACV,WAAOkuH,oBAAoB,CAACjtI,OAArB,CAA6B,KAAK4pI,WAAlC,EAA+C7qH,EAA/C,CAAP;EACD;;EACDoxH,EAAAA,iBAAiB,GAAG;EAClB,QAAI,EAAE,KAAKvG,WAAL,YAA4B9rH,UAA5B,IAA0C,KAAK8rH,WAAL,YAA4B3/G,eAAxE,CAAJ,EAA8F,MAAM,IAAIxxB,wBAAJ,CAA6B,+BAA7B,CAAN;EAC/F;;EACDk3I,EAAAA,YAAY,GAAG;EACb,QAAIj0I,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMyF,KAAK,GAAG1F,SAAS,CAAC,CAAD,CAAvB;EACA,aAAO0F,KAAK,CAACgB,aAAN,CAAoB,KAAKwnI,WAAzB,CAAP;EACD,KAHD,MAGO,IAAIluI,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMyF,KAAK,GAAG1F,SAAS,CAAC,CAAD,CAAvB;EAAA,YAA4By9B,cAAc,GAAGz9B,SAAS,CAAC,CAAD,CAAtD;EACA,YAAM00I,QAAQ,GAAGhvI,KAAK,CAACqrI,QAAN,CAAe,KAAK7C,WAApB,CAAjB;EACA,aAAOwG,QAAQ,CAAC1d,UAAT,CAAoB,KAAKkX,WAAzB,EAAsC3wG,gBAAtC,CAAuDm3G,QAAQ,CAAC7F,kBAAT,EAAvD,EAAsFpxG,cAAtF,CAAP;EACD;EACF;;EACD02G,EAAAA,YAAY,CAACzuI,KAAD,EAAQ;EAClB,WAAOA,KAAK,CAACqiB,OAAN,CAAc,KAAKmmH,WAAnB,CAAP;EACD;;EACD5tD,EAAAA,WAAW,GAAG;EACZ,WAAOuvD,cAAc,CAACI,cAAf,CAA8B,KAAK/B,WAAnC,CAAP;EACD;;EACD3tD,EAAAA,aAAa,GAAG;EACd,WAAO,IAAIsvD,cAAJ,EAAP;EACD;;EACDV,EAAAA,YAAY,CAAC9rH,EAAD,EAAK+rH,QAAL,EAAe;EACzB,WAAOmC,oBAAoB,CAACpC,YAArB,CAAkC,KAAKjB,WAAvC,EAAoD7qH,EAApD,EAAwD+rH,QAAxD,CAAP;EACD;;EACDgF,EAAAA,WAAW,CAACxpF,UAAD,EAAaywC,QAAb,EAAuB;EAChC,WAAOk4C,qBAAqB,CAAC5pH,OAAtB,CAA8B,KAAKukH,WAAnC,EAAgDtjF,UAAhD,EAA4DywC,QAA5D,CAAP;EACD;;EACD/2F,EAAAA,OAAO,CAAC+e,EAAD,EAAK;EACV,WAAOkuH,oBAAoB,CAACjtI,OAArB,CAA6B,KAAK4pI,WAAlC,EAA+C7qH,EAA/C,CAAP;EACD;;EACDyuH,EAAAA,SAAS,CAACC,OAAD,EAAU;EACjB,WAAOF,mBAAmB,CAACC,SAApB,CAA8B,KAAK5D,WAAnC,EAAgD6D,OAAhD,CAAP;EACD;;EAnDsC;;;;;;;;;;;;ECN1B,MAAM4C,cAAN,CAAqB;EAClC,SAAOzqG,SAAP,CAAiBtjC,IAAjB,EAAuBguI,IAAvB,EAA6B;EAC3B,UAAMt3I,MAAM,GAAG,IAAI8H,SAAJ,EAAf;;EACA,SAAK,IAAIhI,CAAC,GAAGwJ,IAAI,CAACjC,QAAL,EAAb,EAA8BvH,CAAC,CAACmJ,OAAF,EAA9B,GACEjJ,MAAM,CAACkH,GAAP,CAAWowI,IAAI,CAACh/B,OAAL,CAAax4G,CAAC,CAACkJ,IAAF,EAAb,CAAX;;EAEF,WAAOhJ,MAAP;EACD;;EACD,SAAO2iF,MAAP,CAAcrxC,UAAd,EAA0BgmG,IAA1B,EAAgC;EAC9B,UAAMt3I,MAAM,GAAG,IAAI8H,SAAJ,EAAf;;EACA,SAAK,IAAIhI,CAAC,GAAGwxC,UAAU,CAACjqC,QAAX,EAAb,EAAoCvH,CAAC,CAACmJ,OAAF,EAApC,GAAmD;EACjD,YAAMmzC,IAAI,GAAGt8C,CAAC,CAACkJ,IAAF,EAAb;EACA,UAAIuuI,OAAO,CAACrzH,IAAR,CAAajhB,MAAb,CAAoBq0I,IAAI,CAACh/B,OAAL,CAAal8D,IAAb,CAApB,CAAJ,EACEp8C,MAAM,CAACkH,GAAP,CAAWk1C,IAAX;EAEH;;EACD,WAAOp8C,MAAP;EACD;;EACD,SAAOyC,KAAP,CAAa6G,IAAb,EAAmBguI,IAAnB,EAAyB;EACvB,SAAK,IAAIx3I,CAAC,GAAGwJ,IAAI,CAACjC,QAAL,EAAb,EAA8BvH,CAAC,CAACmJ,OAAF,EAA9B,GACEquI,IAAI,CAACh/B,OAAL,CAAax4G,CAAC,CAACkJ,IAAF,EAAb;EAEH;;EAtBiC;;EAwBpC,SAASwuI,QAAT,GAAoB;;EACpBH,cAAc,CAACG,QAAf,GAA0BA,QAA1B;;ECzBe,MAAMC,qBAAN,CAA4B;EACzCt4I,EAAAA,WAAW,GAAG;EACZs4I,IAAAA,qBAAqB,CAACj1I,YAAtB,CAAmCC,KAAnC,CAAyC,IAAzC,EAA+CC,SAA/C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKmH,GAAL,GAAW,IAAX;EACA,SAAKvJ,CAAL,GAAS,CAAT;EACA,UAAMkH,IAAI,GAAG5E,SAAS,CAAC,CAAD,CAAtB;EACA,SAAKiH,GAAL,GAAW,IAAIC,KAAJ,CAAUtC,IAAV,EAAgBuC,IAAhB,CAAqB,IAArB,CAAX;EACD;;EACDY,EAAAA,MAAM,CAACvF,KAAD,EAAQ;EACZ,SAAKyE,GAAL,CAAS,KAAKvJ,CAAL,EAAT,IAAqB8E,KAArB;EACD;;EACDggB,EAAAA,cAAc,GAAG;EACf,WAAO,KAAKvb,GAAZ;EACD;;EACD,MAAI5D,WAAJ,GAAkB;EAChB,WAAO,CAACub,gBAAD,CAAP;EACD;;EAlBwC;;ECA5B,MAAMo2H,qBAAN,CAA4B;EACzCv4I,EAAAA,WAAW,GAAG;EACZu4I,IAAAA,qBAAqB,CAACl1I,YAAtB,CAAmCC,KAAnC,CAAyC,IAAzC,EAA+CC,SAA/C;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKm1I,EAAL,GAAU,CAAV;EACD;;EACDltI,EAAAA,MAAM,CAACvF,KAAD,EAAQ;EACZ,SAAKyyI,EAAL;EACD;;EACD1qE,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAK0qE,EAAZ;EACD;;EACD,MAAI5xI,WAAJ,GAAkB;EAChB,WAAO,CAACub,gBAAD,CAAP;EACD;;EAfwC;;ECA5B,MAAMs2H,aAAN,CAAoB;EACjCz4I,EAAAA,WAAW,GAAG;EACZy4I,IAAAA,aAAa,CAACp1I,YAAd,CAA2BC,KAA3B,CAAiC,IAAjC,EAAuCC,SAAvC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAKq1I,OAAL,GAAe,IAAI/oH,OAAJ,EAAf;EACD;;EACDutC,EAAAA,KAAK,CAACt3D,CAAD,EAAI;EACP,UAAM65C,OAAO,GAAG,KAAKi5F,OAAL,CAAalwI,GAAb,CAAiB5C,CAAjB,CAAhB;;EACA,QAAI65C,OAAO,KAAK,IAAhB,EAAsB,OAAO,CAAP,CAAtB,KAAqC,OAAOA,OAAO,CAACyd,KAAR,EAAP;EACtC;;EACDn1D,EAAAA,GAAG,CAACnC,CAAD,EAAI;EACL,UAAM65C,OAAO,GAAG,KAAKi5F,OAAL,CAAalwI,GAAb,CAAiB5C,CAAjB,CAAhB;;EACA,QAAI65C,OAAO,KAAK,IAAhB,EAAsB,KAAKi5F,OAAL,CAAatpH,GAAb,CAAiBxpB,CAAjB,EAAoB,IAAIkiF,SAAJ,CAAY,CAAZ,CAApB,EAAtB,KAAgEroC,OAAO,CAACuuB,SAAR;EACjE;;EAdgC;;EAgBnC,MAAM8Z,SAAN,CAAc;EACZ9nF,EAAAA,WAAW,GAAG;EACZ8nF,IAAAA,SAAO,CAACzkF,YAAR,CAAqBC,KAArB,CAA2B,IAA3B,EAAiCC,SAAjC;EACD;;EACD,SAAOF,YAAP,GAAsB;EACpB,SAAK65D,KAAL,GAAa,CAAb;;EACA,QAAI35D,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B,CAA5B,MAAoC,IAAID,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC9D,YAAM05D,KAAK,GAAG35D,SAAS,CAAC,CAAD,CAAvB;EACA,WAAK25D,KAAL,GAAaA,KAAb;EACD;EACF;;EACDA,EAAAA,KAAK,GAAG;EACN,WAAO,KAAKA,KAAZ;EACD;;EACD8Q,EAAAA,SAAS,GAAG;EACV,SAAK9Q,KAAL;EACD;;EAhBW;;EAkBdu7E,aAAa,CAAC3wD,OAAd,GAAwBA,SAAxB;;ECnCe,SAAS6wD,WAAT,GAAuB;;ECAvB,SAASC,YAAT,GAAwB;;ECAxB,SAASC,qBAAT,GAAiC;;ECEjC,MAAMC,WAAN,SAA0Bh5I,SAA1B,CAAoC;;ECFpC,SAASi5I,gBAAT,GAA4B;;ECQ5B,MAAMC,UAAN,CAAiB;EAC9B,SAAOC,KAAP,CAAa10I,CAAb,EAAgBtD,CAAhB,EAAmB;EACjB,UAAMmQ,EAAE,GAAG,IAAI3G,KAAJ,CAAUxJ,CAAV,EAAayJ,IAAb,CAAkB,IAAlB,CAAX;;EACA,SAAK,IAAI/J,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGM,CAApB,EAAuBN,CAAC,EAAxB,EACEyQ,EAAE,CAACzQ,CAAD,CAAF,GAAQ4D,CAAR;;EAEF,WAAO,IAAI20I,MAAJ,CAAW9nI,EAAX,CAAP;EACD;;EACD,SAAO+nI,aAAP,GAAuB;EACrB,QAAI51I,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,YAAMsS,CAAC,GAAGvS,SAAS,CAAC,CAAD,CAAnB;EACA,YAAM61I,EAAE,GAAG,IAAIP,qBAAJ,EAAX;EACA,YAAMlyF,EAAE,GAAG,IAAIgyF,WAAJ,CAAgBS,EAAhB,CAAX;EACAtjI,MAAAA,CAAC,CAACuwF,eAAF,CAAkB1/C,EAAlB;EACA,aAAOyyF,EAAE,CAAC/4I,QAAH,EAAP;EACD,KAND,MAMO,IAAIkD,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,YAAMsS,CAAC,GAAGvS,SAAS,CAAC,CAAD,CAAnB;EAAA,YAAwBolE,KAAK,GAAGplE,SAAS,CAAC,CAAD,CAAzC;EACA,UAAI81I,UAAU,GAAG,EAAjB;EACA,YAAMC,YAAY,GAAG,IAAIV,YAAJ,CAAiBI,UAAU,CAACG,aAAX,CAAyBrjI,CAAzB,CAAjB,CAArB;EACA,YAAMyjI,gBAAgB,GAAG,IAAIR,gBAAJ,CAAqBO,YAArB,CAAzB;;EACA,WAAK,IAAI34I,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGgoE,KAApB,EAA2BhoE,CAAC,EAA5B,EACE,IAAI;EACF04I,QAAAA,UAAU,IAAIE,gBAAgB,CAACC,QAAjB,KAA8BR,UAAU,CAACS,OAAvD;EACD,OAFD,CAEE,OAAOzzI,CAAP,EAAU;EACV,YAAIA,CAAC,YAAY8yI,WAAjB,EACEp1I,MAAM,CAACC,oBAAP,GADF,KAEK,MAAMqC,CAAN;EACN,OAND,SAMU;;EAEZ,aAAOqzI,UAAP;EACD;EACF;;EACD,SAAOK,MAAP,CAAcz4I,CAAd,EAAiB;EACf,WAAO+3I,UAAU,CAACC,KAAX,CAAiB,GAAjB,EAAsBh4I,CAAtB,CAAP;EACD;;EACD,SAAO04I,KAAP,CAAa5kI,CAAb,EAAgB6kI,SAAhB,EAA2B;EACzB,UAAMC,YAAY,GAAGD,SAAS,CAACp2I,MAA/B;EACA,UAAMs2I,SAAS,GAAG,IAAInxI,SAAJ,EAAlB;EACA,QAAIoxI,SAAS,GAAG,KAAKhlI,CAArB;EACA,QAAIygC,GAAG,GAAGukG,SAAS,CAAClyI,OAAV,CAAkB+xI,SAAlB,CAAV;;EACA,WAAOpkG,GAAG,IAAI,CAAd,EAAiB;EACf,YAAMzc,KAAK,GAAGghH,SAAS,CAACroI,SAAV,CAAoB,CAApB,EAAuB8jC,GAAvB,CAAd;EACAskG,MAAAA,SAAS,CAAC/xI,GAAV,CAAcgxB,KAAd;EACAghH,MAAAA,SAAS,GAAGA,SAAS,CAACroI,SAAV,CAAoB8jC,GAAG,GAAGqkG,YAA1B,CAAZ;EACArkG,MAAAA,GAAG,GAAGukG,SAAS,CAAClyI,OAAV,CAAkB+xI,SAAlB,CAAN;EACD;;EACD,QAAIG,SAAS,CAACv2I,MAAV,GAAmB,CAAvB,EAA0Bs2I,SAAS,CAAC/xI,GAAV,CAAcgyI,SAAd;EAC1B,UAAMh6H,GAAG,GAAG,IAAItV,KAAJ,CAAUqvI,SAAS,CAAC3xI,IAAV,EAAV,EAA4BuC,IAA5B,CAAiC,IAAjC,CAAZ;;EACA,SAAK,IAAI/J,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGof,GAAG,CAACvc,MAAxB,EAAgC7C,CAAC,EAAjC,EACEof,GAAG,CAACpf,CAAD,CAAH,GAASm5I,SAAS,CAACtxI,GAAV,CAAc7H,CAAd,CAAT;;EAEF,WAAOof,GAAP;EACD;;EApD6B;EAsDhCi5H,UAAU,CAACS,OAAX,GAAqBh+H,MAAM,CAACM,WAAP,CAAmB,gBAAnB,CAArB;;;;;;;;;;;;;;;EC5De,MAAMi+H,OAAN,CAAc;EAC3B,MAAIpzI,WAAJ,GAAkB;EAChB,WAAO,EAAP;EACD;;EAEDka,EAAAA,QAAQ,GAAG;EACT,WAAOk5H,OAAP;EACD;;EAED,SAAO93F,KAAP,CAAapjC,CAAb,EAAgB3Z,KAAhB,EAAuB;EACrB,QAAI2Z,CAAC,CAAC7W,OAAF,MAAe9C,KAAK,CAAC8C,OAAN,EAAnB,EAAoC;EAClC,UAAI6W,CAAC,CAAC7W,OAAF,MAAe9C,KAAK,CAAC8C,OAAN,EAAnB,EAAoC,OAAOsyG,SAAS,CAACiE,iBAAV,CAA4BjE,SAAS,CAAC4C,KAAtC,EAA6Cr+F,CAA7C,EAAgD3Z,KAAhD,EAAuD2Z,CAAC,CAACV,UAAF,EAAvD,CAAP;EACpC,UAAIU,CAAC,CAAC7W,OAAF,EAAJ,EAAiB,OAAO9C,KAAK,CAACe,IAAN,EAAP;EACjB,UAAIf,KAAK,CAAC8C,OAAN,EAAJ,EAAqB,OAAO6W,CAAC,CAAC5Y,IAAF,EAAP;EACtB;;EACD4Y,IAAAA,CAAC,CAACa,0BAAF,CAA6Bb,CAA7B;EACAA,IAAAA,CAAC,CAACa,0BAAF,CAA6Bxa,KAA7B;EACA,WAAOy4G,qBAAqB,CAACV,SAAtB,CAAgCp+F,CAAhC,EAAmC3Z,KAAnC,EAA0Co1G,SAAS,CAAC4C,KAApD,CAAP;EACD;;EAlB0B;;ECiB7Bx3F,UAAU,CAACs0H,SAAX,CAAqB1zH,WAArB,GAAmC,YAAW;EAC5C,SAAOygE,UAAU,CAACzgE,WAAX,CAAuB,IAAvB,CAAP;EACD,CAFD;;EAIAuL,eAAe,CAACmoH,SAAhB,CAA0B1zH,WAA1B,GAAwC,YAAW;EACjD,SAAOygE,UAAU,CAACzgE,WAAX,CAAuB,IAAvB,CAAP;EACD,CAFD;;EAIAvI,QAAQ,CAACi8H,SAAT,CAAmBt5G,UAAnB,GAAgC,UAAS7hB,CAAT,EAAY;EAC1C,SAAOszG,QAAQ,CAACzxF,UAAT,CAAoB,IAApB,EAA0B7hB,CAA1B,CAAP;EACD,CAFD;;EAGAd,QAAQ,CAACi8H,SAAT,CAAmBn2I,MAAnB,GAA4B,UAASgb,CAAT,EAAY;EACtC,MAAIA,CAAC,KAAK,IAAV,EAAgB,OAAO,KAAP;EAChB,SAAOszG,QAAQ,CAACzxF,UAAT,CAAoB,IAApB,EAA0B7hB,CAA1B,CAAP;EACD,CAHD;;EAIAd,QAAQ,CAACi8H,SAAT,CAAmB/3F,KAAnB,GAA2B,YAAW;EACpC,MAAI3+C,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,WAAO0yH,YAAY,CAACh0E,KAAb,CAAmB,IAAnB,CAAP;EACD,GAFD,MAEO,IAAI3+C,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,UAAM2B,KAAK,GAAG5B,SAAS,CAAC,CAAD,CAAvB;EACA,WAAOy2I,OAAO,CAAC93F,KAAR,CAAc,IAAd,EAAoB/8C,KAApB,CAAP;EACD;EACF,CAPD;;EAQA6Y,QAAQ,CAACi8H,SAAT,CAAmB3uH,OAAnB,GAA6B,YAAW;EACtC,SAAO64F,SAAS,CAAC74F,OAAV,CAAkB,IAAlB,CAAP;EACD,CAFD;;EAGAtN,QAAQ,CAACi8H,SAAT,CAAmBxsI,YAAnB,GAAkC,UAAStI,KAAT,EAAgB;EAChD,SAAOo1G,SAAS,CAAC9sG,YAAV,CAAuB,IAAvB,EAA6BtI,KAA7B,CAAP;EACD,CAFD;;EAGA6Y,QAAQ,CAACi8H,SAAT,CAAmBnsI,MAAnB,GAA4B,UAASgR,CAAT,EAAY;EACtC,SAAOszG,QAAQ,CAACtkH,MAAT,CAAgB,IAAhB,EAAsBgR,CAAtB,CAAP;EACD,CAFD;;EAGAd,QAAQ,CAACi8H,SAAT,CAAmBC,SAAnB,GAA+B,UAASp7H,CAAT,EAAY;EACzC,SAAOszG,QAAQ,CAACtkH,MAAT,CAAgBgR,CAAhB,EAAmB,IAAnB,CAAP;EACD,CAFD;;EAGAd,QAAQ,CAACi8H,SAAT,CAAmB1nB,OAAnB,GAA6B,UAASzzG,CAAT,EAAY;EACvC,SAAOszG,QAAQ,CAACG,OAAT,CAAiB,IAAjB,EAAuBzzG,CAAvB,CAAP;EACD,CAFD;;EAGAd,QAAQ,CAACi8H,SAAT,CAAmB3tI,UAAnB,GAAgC,UAASwS,CAAT,EAAY;EAC1C,SAAOszG,QAAQ,CAAC9lH,UAAT,CAAoB,IAApB,EAA0BwS,CAA1B,CAAP;EACD,CAFD;;EAGAd,QAAQ,CAACi8H,SAAT,CAAmBE,MAAnB,GAA4B,UAASr7H,CAAT,EAAY;EACtC,SAAOszG,QAAQ,CAACnjH,QAAT,CAAkB6P,CAAlB,EAAqB,IAArB,CAAP;EACD,CAFD;;EAGAd,QAAQ,CAACi8H,SAAT,CAAmBj5E,QAAnB,GAA8B,UAASliD,CAAT,EAAY;EACxC,SAAOszG,QAAQ,CAACpxD,QAAT,CAAkB,IAAlB,EAAwBliD,CAAxB,CAAP;EACD,CAFD;;EAGAd,QAAQ,CAACi8H,SAAT,CAAmBrrI,QAAnB,GAA8B,UAASkQ,CAAT,EAAY;EACxC,SAAOszG,QAAQ,CAACxjH,QAAT,CAAkB,IAAlB,EAAwBkQ,CAAxB,CAAP;EACD,CAFD;;EAGAd,QAAQ,CAACi8H,SAAT,CAAmBvnB,OAAnB,GAA6B,UAAS5zG,CAAT,EAAY;EACvC,SAAOszG,QAAQ,CAACM,OAAT,CAAiB,IAAjB,EAAuB5zG,CAAvB,CAAP;EACD,CAFD;;EAGAd,QAAQ,CAACi8H,SAAT,CAAmBr4I,MAAnB,GAA4B,YAAW;EACrC,MAAI2B,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,UAAMkD,QAAQ,GAAGnD,SAAS,CAAC,CAAD,CAA1B;EACA,WAAOwjG,QAAQ,CAACI,QAAT,CAAkB,IAAlB,EAAwBzgG,QAAxB,CAAP;EACD,GAHD,MAGO,IAAInD,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,UAAMkD,QAAQ,GAAGnD,SAAS,CAAC,CAAD,CAA1B;EAA+B,UAAMomF,gBAAgB,GAAGpmF,SAAS,CAAC,CAAD,CAAlC;EAC/B,WAAOwjG,QAAQ,CAACI,QAAT,CAAkB,IAAlB,EAAwBzgG,QAAxB,EAAkCijF,gBAAlC,CAAP;EACD,GAHM,MAGA,IAAIpmF,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,UAAMkD,QAAQ,GAAGnD,SAAS,CAAC,CAAD,CAA1B;EAA+B,UAAMomF,gBAAgB,GAAGpmF,SAAS,CAAC,CAAD,CAAlC;EAAuC,UAAMsmF,WAAW,GAAGtmF,SAAS,CAAC,CAAD,CAA7B;EACtE,WAAOwjG,QAAQ,CAACI,QAAT,CAAkB,IAAlB,EAAwBzgG,QAAxB,EAAkCijF,gBAAlC,EAAoDE,WAApD,CAAP;EACD;EACF,CAXD;;EAYA7rE,QAAQ,CAACi8H,SAAT,CAAmBvwH,UAAnB,GAAgC,YAAW;EACzC,SAAO,IAAIk7B,UAAJ,CAAe,IAAf,EAAqBwB,aAArB,EAAP;EACD,CAFD;;EAGApoC,QAAQ,CAACi8H,SAAT,CAAmBznB,MAAnB,GAA4B,YAAW;EACrC,MAAIjvH,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,UAAMk0B,QAAQ,GAAGn0B,SAAS,CAAC,CAAD,CAA1B;EACA,WAAO6uH,QAAQ,CAACI,MAAT,CAAgB,IAAhB,EAAsB96F,QAAtB,CAAP;EACD,GAHD,MAGO,IAAIn0B,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EACjC,UAAMk0B,QAAQ,GAAGn0B,SAAS,CAAC,CAAD,CAA1B;EAA+B,UAAM62I,mBAAmB,GAAG72I,SAAS,CAAC,CAAD,CAArC;EAC/B,WAAO6uH,QAAQ,CAACI,MAAT,CAAgB,IAAhB,EAAsB96F,QAAtB,EAAgCuL,OAAhC,CAAwCm3G,mBAAxC,CAAP;EACD;EACF,CARD;;EASAp8H,QAAQ,CAACi8H,SAAT,CAAmB32F,WAAnB,GAAiC,YAAW;EAC1C,MAAI,KAAKr7C,OAAL,EAAJ,EAAoB,OAAO,KAAKoW,QAAL,CAAcyI,WAAd,EAAP;EACpB,QAAMuzH,MAAM,GAAG13F,QAAQ,CAACW,WAAT,CAAqB,IAArB,CAAf;EACA,SAAO,KAAK5vB,4BAAL,CAAkC2mH,MAAlC,EAA0C,IAA1C,CAAP;EACD,CAJD;;EAKAr8H,QAAQ,CAACi8H,SAAT,CAAmB1yF,gBAAnB,GAAsC,YAAW;EAC/C,MAAI,KAAKt/C,OAAL,EAAJ,EAAoB,OAAO,KAAKoW,QAAL,CAAcyI,WAAd,EAAP;EACpB,MAAI2W,KAAK,GAAG,IAAZ;EACA,QAAM7a,GAAG,GAAG,KAAK3J,YAAL,EAAZ;EACA,MAAI2J,GAAG,KAAK,CAAZ,EACE6a,KAAK,GAAG,IAAIgsB,kBAAJ,CAAuB,IAAvB,CAAR,CADF,KAEK,IAAI7mC,GAAG,KAAK,CAAZ,EACH6a,KAAK,GAAG,IAAI2rB,iBAAJ,CAAsB,IAAtB,CAAR,CADG,KAEA3rB,KAAK,GAAG,IAAI0pB,iBAAJ,CAAsB,IAAtB,CAAR;EAEL,QAAMmzF,UAAU,GAAG78G,KAAK,CAAC8pB,gBAAN,EAAnB;EACA,SAAO,KAAK7zB,4BAAL,CAAkC4mH,UAAlC,EAA8C,IAA9C,CAAP;EACD,CAZD;;EAaAt8H,QAAQ,CAACi8H,SAAT,CAAmB78B,aAAnB,GAAmC,UAASj4G,KAAT,EAAgB;EACjD,SAAOo1G,SAAS,CAAC6C,aAAV,CAAwB,IAAxB,EAA8Bj4G,KAA9B,CAAP;EACD,CAFD;;EAGA6Y,QAAQ,CAACi8H,SAAT,CAAmBvmH,4BAAnB,GAAkD,UAAS3tB,KAAT,EAAgB4tB,QAAhB,EAA0B;EAC1EA,EAAAA,QAAQ,CAACvT,iBAAT,GAA6BmR,WAA7B,CAAyCxrB,KAAzC;EACA,SAAO4tB,QAAQ,CAACvV,UAAT,GAAsB0I,WAAtB,CAAkC/gB,KAAlC,CAAP;EACD,CAHD;;EAIAiY,QAAQ,CAACi8H,SAAT,CAAmBM,MAAnB,GAA4B,YAAW;EACrC,QAAMC,MAAM,GAAG,IAAIjgH,SAAJ,EAAf;EACA,SAAOigH,MAAM,CAAClgH,KAAP,CAAa,IAAb,CAAP;EACD,CAHD;;EAIAtc,QAAQ,CAACi8H,SAAT,CAAmB55I,QAAnB,GAA8B,YAAW;EACvC,OAAKk6I,MAAL;EACD,CAFD;;EAGAv8H,QAAQ,CAACi8H,SAAT,CAAmBhrI,QAAnB,GAA8B,UAAS6P,CAAT,EAAY;EACxC,SAAOszG,QAAQ,CAACnjH,QAAT,CAAkB,IAAlB,EAAwB6P,CAAxB,CAAP;EACD,CAFD;;EAGAd,QAAQ,CAACi8H,SAAT,CAAmB38B,UAAnB,GAAgC,UAASn4G,KAAT,EAAgB;EAC9C,SAAOo1G,SAAS,CAAC+C,UAAV,CAAqB,IAArB,EAA2Bn4G,KAA3B,CAAP;EACD,CAFD;;EAGA6Y,QAAQ,CAACi8H,SAAT,CAAmBn0H,QAAnB,GAA8B,YAAW;EACvC,QAAMuqB,EAAE,GAAG,IAAI03C,UAAJ,CAAe,IAAf,CAAX;EACA,SAAO13C,EAAE,CAACvqB,QAAH,EAAP;EACD,CAHD;;EAIA9H,QAAQ,CAACi8H,SAAT,CAAmB/9D,gBAAnB,GAAsC,UAASn+D,IAAT,EAAerX,QAAf,EAAyB;EAC7D,QAAMgjG,OAAO,GAAG,KAAKhqF,mBAAL,GAA2BhZ,QAA3B,CAAoCqX,IAAI,CAAC2B,mBAAL,EAApC,CAAhB;EACA,MAAIgqF,OAAO,GAAGhjG,QAAd,EAAwB,OAAO,KAAP;EACxB,SAAO2iG,UAAU,CAACntB,gBAAX,CAA4B,IAA5B,EAAkCn+D,IAAlC,EAAwCrX,QAAxC,CAAP;EACD,CAJD;;EAKAsX,QAAQ,CAACi8H,SAAT,CAAmBvzI,QAAnB,GAA8B,UAASoY,CAAT,EAAY;EACxC,SAAOuqF,UAAU,CAAC3iG,QAAX,CAAoB,IAApB,EAA0BoY,CAA1B,CAAP;EACD,CAFD;;QC9HM27H,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;"}