{"version":3,"file":"jsts.min.js","sources":["../node_modules/jsts/org/locationtech/jts/operation/buffer/BufferParameters.js","../node_modules/jsts/java/lang/Exception.js","../node_modules/jsts/java/lang/IllegalArgumentException.js","../node_modules/jsts/org/locationtech/jts/geom/GeometryComponentFilter.js","../node_modules/jsts/java/lang/Comparable.js","../node_modules/jsts/java/lang/Cloneable.js","../node_modules/jsts/java/io/Serializable.js","../node_modules/jsts/java/lang/Double.js","../node_modules/jsts/org/locationtech/jts/util/NumberUtil.js","../node_modules/jsts/java/lang/Long.js","../node_modules/jsts/java/util/Comparator.js","../node_modules/jsts/java/lang/RuntimeException.js","../node_modules/jsts/org/locationtech/jts/util/AssertionFailedException.js","../node_modules/jsts/org/locationtech/jts/util/Assert.js","../node_modules/jsts/org/locationtech/jts/geom/Coordinate.js","../node_modules/jsts/org/locationtech/jts/geom/Envelope.js","../node_modules/jsts/org/locationtech/jts/geom/Geometry.js","../node_modules/jsts/org/locationtech/jts/geom/Location.js","../node_modules/jsts/java/util/Collection.js","../node_modules/jsts/java/util/NoSuchElementException.js","../node_modules/jsts/java/lang/UnsupportedOperationException.js","../node_modules/jsts/java/util/Set.js","../node_modules/jsts/java/util/HashSet.js","../node_modules/jsts/org/locationtech/jts/geomgraph/Position.js","../node_modules/jsts/java/util/EmptyStackException.js","../node_modules/jsts/java/lang/IndexOutOfBoundsException.js","../node_modules/jsts/java/util/List.js","../node_modules/jsts/java/util/Stack.js","../node_modules/jsts/hasInterface.js","../node_modules/jsts/java/lang/StringBuffer.js","../node_modules/jsts/java/lang/Integer.js","../node_modules/jsts/java/lang/Character.js","../node_modules/jsts/org/locationtech/jts/math/DD.js","../node_modules/jsts/org/locationtech/jts/algorithm/CGAlgorithmsDD.js","../node_modules/jsts/org/locationtech/jts/geom/CoordinateSequence.js","../node_modules/jsts/org/locationtech/jts/algorithm/Orientation.js","../node_modules/jsts/org/locationtech/jts/operation/buffer/RightmostEdgeFinder.js","../node_modules/jsts/org/locationtech/jts/geom/TopologyException.js","../node_modules/jsts/java/util/LinkedList.js","../node_modules/jsts/java/util/ArrayList.js","../node_modules/jsts/org/locationtech/jts/operation/buffer/BufferSubgraph.js","../node_modules/jsts/org/locationtech/jts/algorithm/Intersection.js","../node_modules/jsts/java/lang/System.js","../node_modules/jsts/org/locationtech/jts/math/MathUtil.js","../node_modules/jsts/org/locationtech/jts/algorithm/Distance.js","../node_modules/jsts/org/locationtech/jts/geom/CoordinateSequenceFactory.js","../node_modules/jsts/org/locationtech/jts/geom/CoordinateFilter.js","../node_modules/jsts/org/locationtech/jts/algorithm/Length.js","../node_modules/jsts/org/locationtech/jts/geom/Lineal.js","../node_modules/jsts/org/locationtech/jts/geom/CoordinateSequences.js","../node_modules/jsts/org/locationtech/jts/geom/Dimension.js","../node_modules/jsts/org/locationtech/jts/geom/GeometryFilter.js","../node_modules/jsts/org/locationtech/jts/geom/CoordinateSequenceFilter.js","../node_modules/jsts/org/locationtech/jts/geom/LineString.js","../node_modules/jsts/org/locationtech/jts/geom/Puntal.js","../node_modules/jsts/org/locationtech/jts/geom/Point.js","../node_modules/jsts/org/locationtech/jts/algorithm/Area.js","../node_modules/jsts/java/util/Arrays.js","../node_modules/jsts/org/locationtech/jts/geom/Polygonal.js","../node_modules/jsts/org/locationtech/jts/geom/Polygon.js","../node_modules/jsts/java/util/SortedSet.js","../node_modules/jsts/java/util/TreeSet.js","../node_modules/jsts/org/locationtech/jts/geom/GeometryCollection.js","../node_modules/jsts/org/locationtech/jts/geom/MultiPoint.js","../node_modules/jsts/org/locationtech/jts/geom/LinearRing.js","../node_modules/jsts/org/locationtech/jts/geom/CoordinateXY.js","../node_modules/jsts/org/locationtech/jts/geom/CoordinateXYM.js","../node_modules/jsts/org/locationtech/jts/geom/CoordinateXYZM.js","../node_modules/jsts/org/locationtech/jts/geom/Coordinates.js","../node_modules/jsts/org/locationtech/jts/geom/CoordinateList.js","../node_modules/jsts/org/locationtech/jts/geom/CoordinateArrays.js","../node_modules/jsts/java/lang/StringBuilder.js","../node_modules/jsts/org/locationtech/jts/geom/impl/CoordinateArraySequence.js","../node_modules/jsts/org/locationtech/jts/geom/impl/CoordinateArraySequenceFactory.js","../node_modules/jsts/org/locationtech/jts/geom/MultiPolygon.js","../node_modules/jsts/java/util/Map.js","../node_modules/jsts/java/util/HashMap.js","../node_modules/jsts/org/locationtech/jts/geom/PrecisionModel.js","../node_modules/jsts/org/locationtech/jts/geom/MultiLineString.js","../node_modules/jsts/org/locationtech/jts/geom/GeometryFactory.js","../node_modules/jsts/org/locationtech/jts/io/WKTParser.js","../node_modules/jsts/org/locationtech/jts/io/WKTWriter.js","../node_modules/jsts/org/locationtech/jts/algorithm/LineIntersector.js","../node_modules/jsts/org/locationtech/jts/algorithm/RobustLineIntersector.js","../node_modules/jsts/org/locationtech/jts/algorithm/RayCrossingCounter.js","../node_modules/jsts/org/locationtech/jts/algorithm/PointLocation.js","../node_modules/jsts/org/locationtech/jts/geomgraph/TopologyLocation.js","../node_modules/jsts/org/locationtech/jts/geomgraph/Label.js","../node_modules/jsts/org/locationtech/jts/geomgraph/EdgeRing.js","../node_modules/jsts/org/locationtech/jts/operation/overlay/MinimalEdgeRing.js","../node_modules/jsts/org/locationtech/jts/operation/overlay/MaximalEdgeRing.js","../node_modules/jsts/org/locationtech/jts/geomgraph/GraphComponent.js","../node_modules/jsts/org/locationtech/jts/geomgraph/Node.js","../node_modules/jsts/java/util/SortedMap.js","../node_modules/jsts/java/util/TreeMap.js","../node_modules/jsts/org/locationtech/jts/geomgraph/NodeMap.js","../node_modules/jsts/org/locationtech/jts/geomgraph/Quadrant.js","../node_modules/jsts/org/locationtech/jts/geomgraph/EdgeEnd.js","../node_modules/jsts/org/locationtech/jts/geomgraph/DirectedEdge.js","../node_modules/jsts/org/locationtech/jts/geomgraph/NodeFactory.js","../node_modules/jsts/org/locationtech/jts/geomgraph/PlanarGraph.js","../node_modules/jsts/org/locationtech/jts/operation/overlay/PolygonBuilder.js","../node_modules/jsts/org/locationtech/jts/index/strtree/Boundable.js","../node_modules/jsts/org/locationtech/jts/index/strtree/ItemBoundable.js","../node_modules/jsts/org/locationtech/jts/util/PriorityQueue.js","../node_modules/jsts/org/locationtech/jts/index/SpatialIndex.js","../node_modules/jsts/org/locationtech/jts/index/strtree/AbstractNode.js","../node_modules/jsts/java/util/Collections.js","../node_modules/jsts/org/locationtech/jts/index/strtree/EnvelopeDistance.js","../node_modules/jsts/org/locationtech/jts/index/strtree/BoundablePair.js","../node_modules/jsts/org/locationtech/jts/index/ItemVisitor.js","../node_modules/jsts/org/locationtech/jts/index/strtree/AbstractSTRtree.js","../node_modules/jsts/org/locationtech/jts/index/strtree/ItemDistance.js","../node_modules/jsts/org/locationtech/jts/index/strtree/STRtree.js","../node_modules/jsts/org/locationtech/jts/noding/SegmentPointComparator.js","../node_modules/jsts/org/locationtech/jts/noding/SegmentNode.js","../node_modules/jsts/java/util/Iterator.js","../node_modules/jsts/org/locationtech/jts/noding/SegmentNodeList.js","../node_modules/jsts/org/locationtech/jts/noding/Octant.js","../node_modules/jsts/org/locationtech/jts/noding/SegmentString.js","../node_modules/jsts/org/locationtech/jts/noding/NodableSegmentString.js","../node_modules/jsts/org/locationtech/jts/noding/NodedSegmentString.js","../node_modules/jsts/org/locationtech/jts/geom/LineSegment.js","../node_modules/jsts/org/locationtech/jts/index/chain/MonotoneChainOverlapAction.js","../node_modules/jsts/org/locationtech/jts/index/chain/MonotoneChain.js","../node_modules/jsts/org/locationtech/jts/index/chain/MonotoneChainBuilder.js","../node_modules/jsts/org/locationtech/jts/noding/Noder.js","../node_modules/jsts/org/locationtech/jts/noding/SinglePassNoder.js","../node_modules/jsts/org/locationtech/jts/noding/MCIndexNoder.js","../node_modules/jsts/org/locationtech/jts/operation/buffer/BufferInputLineSimplifier.js","../node_modules/jsts/org/locationtech/jts/operation/buffer/OffsetSegmentString.js","../node_modules/jsts/org/locationtech/jts/algorithm/Angle.js","../node_modules/jsts/org/locationtech/jts/operation/buffer/OffsetSegmentGenerator.js","../node_modules/jsts/org/locationtech/jts/operation/buffer/OffsetCurveBuilder.js","../node_modules/jsts/org/locationtech/jts/operation/buffer/SubgraphDepthLocater.js","../node_modules/jsts/org/locationtech/jts/algorithm/NotRepresentableException.js","../node_modules/jsts/org/locationtech/jts/algorithm/HCoordinate.js","../node_modules/jsts/org/locationtech/jts/geom/Triangle.js","../node_modules/jsts/org/locationtech/jts/operation/buffer/OffsetCurveSetBuilder.js","../node_modules/jsts/org/locationtech/jts/algorithm/locate/PointOnGeometryLocator.js","../node_modules/jsts/org/locationtech/jts/geom/GeometryCollectionIterator.js","../node_modules/jsts/org/locationtech/jts/algorithm/locate/SimplePointInAreaLocator.js","../node_modules/jsts/org/locationtech/jts/geomgraph/EdgeEndStar.js","../node_modules/jsts/org/locationtech/jts/geomgraph/DirectedEdgeStar.js","../node_modules/jsts/org/locationtech/jts/operation/overlay/OverlayNodeFactory.js","../node_modules/jsts/org/locationtech/jts/noding/OrientedCoordinateArray.js","../node_modules/jsts/org/locationtech/jts/geomgraph/EdgeList.js","../node_modules/jsts/org/locationtech/jts/noding/SegmentIntersector.js","../node_modules/jsts/org/locationtech/jts/noding/IntersectionAdder.js","../node_modules/jsts/org/locationtech/jts/geomgraph/EdgeIntersection.js","../node_modules/jsts/org/locationtech/jts/geomgraph/EdgeIntersectionList.js","../node_modules/jsts/org/locationtech/jts/geom/IntersectionMatrix.js","../node_modules/jsts/org/locationtech/jts/util/IntArrayList.js","../node_modules/jsts/org/locationtech/jts/geomgraph/index/MonotoneChainIndexer.js","../node_modules/jsts/org/locationtech/jts/geomgraph/index/MonotoneChainEdge.js","../node_modules/jsts/org/locationtech/jts/geomgraph/Depth.js","../node_modules/jsts/org/locationtech/jts/geomgraph/Edge.js","../node_modules/jsts/org/locationtech/jts/operation/buffer/BufferBuilder.js","../node_modules/jsts/org/locationtech/jts/noding/ScaledNoder.js","../node_modules/jsts/org/locationtech/jts/noding/NodingValidator.js","../node_modules/jsts/org/locationtech/jts/noding/snapround/HotPixel.js","../node_modules/jsts/org/locationtech/jts/index/chain/MonotoneChainSelectAction.js","../node_modules/jsts/org/locationtech/jts/noding/snapround/MCIndexPointSnapper.js","../node_modules/jsts/org/locationtech/jts/noding/InteriorIntersectionFinderAdder.js","../node_modules/jsts/org/locationtech/jts/noding/snapround/MCIndexSnapRounder.js","../node_modules/jsts/org/locationtech/jts/operation/buffer/BufferOp.js","../node_modules/jsts/org/locationtech/jts/io/GeoJSONParser.js","../src/index.js","../node_modules/jsts/org/locationtech/jts/io/GeoJSONReader.js","../node_modules/jsts/org/locationtech/jts/io/GeoJSONWriter.js"],"sourcesContent":["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","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 GeometryComponentFilter {\n filter(geom) {}\n}\n","export default function Comparable() {}\n","export default function Clonable() {}\n","export default function Serializable() {}\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\nDouble.POSITIVE_INFINITY = Number.POSITIVE_INFINITY\nDouble.NEGATIVE_INFINITY = Number.NEGATIVE_INFINITY\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 class NumberUtil {\n static equalsWithTolerance(x1, x2, tolerance) {\n return Math.abs(x1 - x2) <= tolerance\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","export default function Comparator() {}\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 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","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","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","/**\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 '../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 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 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 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","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","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 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 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","export default function(o, i) {\n return o.interfaces_ && o.interfaces_.indexOf(i) > -1\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 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","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","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 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 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 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 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 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","export default class CoordinateSequenceFilter {\n filter(seq, i) {}\n isDone() {}\n isGeometryChanged() {}\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 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 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","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 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","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 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 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 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 if (layout !== GeometryLayout.XY)\n this.consume_()\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 } 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 } 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 } 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 } 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 if (this.match(TokenType.RIGHT_PAREN)) \n return coordinates\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 } 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 } 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 if (coordinates.length == dimensions) \n return coordinates\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 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 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 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 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 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 c = geom.getCoordinate()\n const cs = [c.x, c.y]\n if (c.z !== undefined && !Number.isNaN(c.z))\n cs.push(c.z)\n if (c.m !== undefined && !Number.isNaN(c.m))\n cs.push(c.m)\n return cs.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 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 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 => {\n const a = [c.x, c.y]\n if (c.z !== undefined && !Number.isNaN(c.z))\n a.push(c.z)\n if (c.m !== undefined && !Number.isNaN(c.m))\n a.push(c.m)\n return a\n })\n const array = []\n for (let i = 0, ii = coordinates.length; i < ii; ++i) \n array.push(coordinates[i].join(' '))\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 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 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 !== undefined && !Number.isNaN(c.z))\n dimInfo += Z\n if (c.m !== undefined && !Number.isNaN(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 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 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","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 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 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 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 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 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 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 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 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 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","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","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 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","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","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","export default class ItemVisitor {\n visitItem(item) {}\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 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","/**\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 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 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 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 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 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 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 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 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","export default class PointOnGeometryLocator {\n locate(p) {}\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","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 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 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 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 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 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 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 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 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 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))\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","import BufferOp from \"jsts/org/locationtech/jts/operation/buffer/BufferOp\";\nimport GeoJSONReader from \"jsts/org/locationtech/jts/io/GeoJSONReader\";\nimport GeoJSONWriter from \"jsts/org/locationtech/jts/io/GeoJSONWriter\";\n\nconst jsts = {\n BufferOp,\n GeoJSONReader,\n GeoJSONWriter,\n};\n\nexport default jsts;\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"],"names":["BufferParameters","_classCallCheck","constructor_","apply","this","arguments","_createClass","key","value","_endCapStyle","_isSingleSided","quadSegs","_quadrantSegments","_joinStyle","JOIN_BEVEL","JOIN_MITRE","_mitreLimit","Math","abs","JOIN_ROUND","DEFAULT_QUADRANT_SEGMENTS","joinStyle","simplifyFactor","_simplifyFactor","endCapStyle","mitreLimit","isSingleSided","CAP_ROUND","DEFAULT_MITRE_LIMIT","DEFAULT_SIMPLIFY_FACTOR","length","quadrantSegments","setQuadrantSegments","setEndCapStyle","setJoinStyle","setMitreLimit","alpha","PI","cos","CAP_FLAT","CAP_SQUARE","Exception","_Error","message","_this","_callSuper","name","Object","keys","_inherits","_wrapNativeSuper","Error","IllegalArgumentException","_Exception","GeometryComponentFilter","geom","Comparable","Clonable","Serializable","BIAS","log2","floor","pow","MAX_REL_BITS_INTEGER","EXP_BIT_MASK","f64buf","i32buf","NumberUtil","x1","x2","tolerance","Long","high","low","i","mask","result","Double","Comparator","NaN","isNaN","n","Number","isInfinite","isFinite","MAX_VALUE","POSITIVE_INFINITY","NEGATIVE_INFINITY","Float64Array","Int32Array","buffer","doubleToLongBits","longBitsToDouble","bits","x","y","f","skip","sign","exp","Infinity","fract","RuntimeException","AssertionFailedException","_RuntimeException","call","Assert","shouldNeverReachHere","assertion","isTrue","expectedValue","actualValue","equals","kBuf","ArrayBuffer","kBufAsF64","kBufAsI32","Coordinate","ordinateIndex","X","Y","Z","setZ","other","c","equalsWithTolerance","m","M","z","getZ","equals2D","o","e","CloneNotSupportedException","dx","dy","dz","sqrt","hashCode","get","Cloneable","NULL_ORDINATE","DimensionalComparator","c1","c2","compX","compare","compY","_dimensionsToTest","dimensionsToTest","a","b","Envelope","getWidth","getHeight","otherEnvelope","isNull","_maxx","getMaxX","_maxy","getMaxY","_minx","getMinX","_miny","getMinY","env","intersects","intMinX","intMinY","p","covers","w","h","expandToInclude","transX","transY","init","distance","expandBy","deltaX","deltaY","setToNull","p1","p2","y1","y2","q","q1","q2","minq","min","maxq","max","minp","maxp","Geometry","getTypeCode","TYPECODE_GEOMETRYCOLLECTION","_factory","equalsExact","geometryChangedFilter","_envelope","g","norm","isEmpty","compareToSameClass","comp","_userData","_SRID","getFactory","toGeometry","getEnvelopeInternal","copy","normalize","res","reverseInternal","envelope","setSRID","getSRID","copyInternal","getPrecisionModel","computeEnvelopeInternal","SRID","userData","iterator","j","hasNext","aElement","next","bElement","comparison","compareTo","getClass","TYPECODE_MULTIPOINT","TYPECODE_MULTILINESTRING","TYPECODE_MULTIPOLYGON","geometries","array","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","interfaces_","filter","geometryChangedAction","Location","locationValue","EXTERIOR","BOUNDARY","INTERIOR","NONE","Collection","NoSuchElementException","UnsupportedOperationException","Set","_Collection","HashSet","_Set","map","Map","addAll","has","set","_step","_iterator","_createForOfIteratorHelper","s","done","add","err","size","Array","from","values","Iterator","Symbol","_this$iterator$next","current","_this$iterator$next2","Position","position","LEFT","RIGHT","ON","EmptyStackException","IndexOutOfBoundsException","List","Stack","_List","push","index","pop","empty","indexOf","slice","hasInterface","StringBuffer","str","substr","Integer","Character","toUpperCase","DD","_hi","_lo","insertDecimalPoint","magnitude","mag","scale","TEN","divide","gt","lt","ONE","multiply","decimalPointPos","buf","numDigits","MAX_PRINT_DIGITS","append","digit","trunc","rebiasBy10","digitChar","subtract","valueOf","selfAdd","continueExtractingDigits","remMag","toString","negate","isZero","le","selfDivide","tc","ty","C","U","yhi","ylo","hc","hy","u","SPLIT","createNaN","r","selfMultiply","sqr","reciprocal","fhi","ceil","flo","ge","isNegative","ax","axdd","d2","H","S","T","t","zhi","zlo","tx","hx","ex","toStandardNotation","toSciNotation","specialStr","getSpecialNumberString","fill","sigDigits","extractSignificantDigits","num","charAt","stringOfChar","numZeroes","SCI_NOT_ZERO","digits","expStr","SCI_NOT_EXPONENT_CHAR","IllegalStateException","trailingDigits","substring","digitsWithDecimal","dd","hi","lo","isPositive","parse","determinant","selfSubtract","strlen","isWhitespace","signCh","val","numBeforeDec","hasDecimalChar","ch","isDigit","d","parseInt","NumberFormatException","val2","numDecPlaces","xAbs","xLog10","log","xMag","len","TWO_PI","PI_2","E","EPS","CGAlgorithmsDD","orientationIndexFilter","dx1","dy1","dx2","dy2","signum","px","py","pw","qx","qy","qw","xInt","doubleValue","yInt","pa","pb","pc","detsum","detleft","detright","det","errbound","DP_SAFE_EPSILON","CoordinateSequence","hasM","mIndex","getDimension","getMeasures","getOrdinate","hasZ","Orientation","orientationIndex","ring","nPts","hiPt","hiIndex","iPrev","iNext","prev","disc","getCoordinate","CLOCKWISE","COUNTERCLOCKWISE","COLLINEAR","STRAIGHT","RightmostEdgeFinder","_minCoord","de","side","getRightmostSideOfSegment","checkForRightmostCoordinate","pts","_minDe","getEdge","getCoordinates","_minIndex","pPrev","pNext","orientation","usePrev","coord","pos","_orientedDe","star","getNode","getEdges","getRightmostEdge","isForward","getSym","dirEdgeList","findRightmostEdgeAtNode","findRightmostEdgeAtVertex","getRightmostSide","TopologyException","msg","pt","undefined","LinkedList","shift","ArrayList","splice","element","oldElement","comparator","sort","arrayList","remove","BufferSubgraph","it","_dirEdgeList","setVisited","_rightMostCoord","startEdge","isVisited","computeDepths","copySymDepths","outsideDepth","clearVisitedEdges","_finder","getLabel","setEdgeDepths","node","addReachable","findEdge","getDepth","isInteriorAreaEdge","setInResult","nodesVisited","nodeQueue","startNode","addLast","removeFirst","computeNodeDepth","sym","adjNode","contains","graph","_env","edgeEnv","nodeStack","setDepth","_nodes","symNode","Intersection","minX0","minY0","maxX0","maxY0","minX1","minY1","maxX1","maxY1","midx","midy","p1x","p1y","p2x","p2y","q1x","q1y","q2x","q2y","System","src","srcPos","dest","destPos","MathUtil","ln","LOG_10","v1","v2","v3","v4","isInteger","Distance","A","B","D","pointToSegment","noIntersection","denom","r_num","len2","line","minDistance","dist","CoordinateSequenceFactory","dimension","create","CoordinateFilter","Length","x0","y0","Lineal","CoordinateSequences","minDim","dim","setOrdinate","seq","indexOfFirstCoordinate","scroll","isRing","firstCoordinate","ensureRing","last","k","cs1","cs2","cs1Size","minCoordinateIndex","to","minCoordIndex","minCoord","testCoord","fact","newseq","mid","swap","tmp","copyCoord","createClosedRing","coordinate","Dimension","dimensionValue","FALSE","SYM_FALSE","TRUE","SYM_TRUE","DONTCARE","SYM_DONTCARE","P","SYM_P","L","SYM_L","SYM_A","dimensionSymbol","GeometryFilter","CoordinateSequenceFilter","LineString","_Geometry","_points","expandEnvelope","isClosed","isSimple","toCoordinateArray","isEquivalentClass","otherLineString","equal","_superPropGet","reverse","getCoordinateN","getNumPoints","createLineString","getPointN","ofLine","isDone","isGeometryChanged","geometryChanged","points","getCoordinateSequenceFactory","createPoint","Puntal","Point","_coordinates","getX","getY","point","createGeometryCollection","coordinates","Area","ofRingSigned","sum","p0","Arrays","_arguments","concat","_step2","_iterator2","_step3","_iterator3","original","newLength","Polygonal","Polygon","_shell","shellCoordinates","_holes","childCoordinates","area","ofRing","getCoordinateSequence","shellCopy","holeCopies","getNumInteriorRing","prevX","prevY","otherPolygon","thisShell","otherPolygonShell","normalized","clockwise","isCCW","shell","getExteriorRing","holes","getInteriorRingN","createPolygon","getLength","numPoints","convexHull","otherShell","poly","shellComp","nHole1","nHole2","thisHole","otherHole","holeComp","createMultiLineString","rings","createLinearRing","hasNullElements","hasNonEmptyElements","SortedSet","TreeSet","_SortedSet","GeometryCollection","_geometries","getArea","otherCollection","getBoundaryDimension","numGeometries","reversed","buildGeometry","theseElements","asList","otherElements","gc","n1","getNumGeometries","n2","thisGeom","getGeometryN","otherGeom","checkNotGeometryCollection","MultiPoint","_GeometryCollection","LinearRing","_LineString","MINIMUM_VALID_SIZE","validateConstruction","CoordinateXY","_Coordinate","CoordinateXYM","_m","getM","CoordinateXYZM","Coordinates","measures","CoordinateList","_ArrayList","allowRepeated","isChanged","clone","toArray","coordArrayType","obj","start","end","inc","duplicate","ensureCapacity","CoordinateArrays","testPts","testPt","newCoordinates","arraycopy","coord1","coord2","coordinateComparator","coordList","hasRepeatedPoints","nonNull","newCoord","srcStart","destStart","pts1","pts2","clamp","npts","extractPts","iPts","ForwardComparator","o1","o2","BidirectionalComparator","forwardComp","isEqualReversed","dir1","increasingDirection","dir2","i1","i2","comparePt","StringBuilder","CoordinateArraySequence","setCoordinate","createCoordinate","_dimension","_measures","cloneCoordinates","strBuilder","coordSeq","getCoordinateCopy","CoordinateArraySequenceFactory","instance","spatial","instanceObject","MultiPolygon","polygons","allRings","getBoundary","allRingsArray","HashMap","_MapInterface","hashSet","entries","forEach","entry","MapInterface","PrecisionModel","otherPrecisionModel","_modelType","_scale","getMaximumSignificantDigits","otherSigDigits","FLOATING","FLOATING_SINGLE","description","FIXED","getScale","round","makePrecise","maxSigDigits","Type","modelType","setScale","pm","pm1","pm2","nameToTypeMap","_name","put","maximumPreciseValue","MultiLineString","lineStrings","GeometryFactory","geomList","geomType","isHeterogeneous","hasGeometryCollection","partType","toGeometryArray","geom0","createMultiPolygon","toPolygonArray","toLineStringArray","createMultiPoint","toPointArray","getGeometryType","_coordinateSequenceFactory","_precisionModel","ptSeq","coordinateSequenceFactory","precisionModel","getDefaultCoordinateSequenceFactory","multiPolygons","multiPolygonArray","geometryArray","multiLineStrings","multiLineStringArray","lineStringArray","multiPoints","multiPointArray","linearRings","linearRingArray","pointArray","polygonArray","exemplar","GeometryLayout","GeometryType","POINT","LINE_STRING","LINEAR_RING","POLYGON","MULTI_POINT","MULTI_LINE_STRING","MULTI_POLYGON","GEOMETRY_COLLECTION","CIRCLE","EMPTY","TokenType","type","Lexer","wkt","index_","opt_decimal","nextChar_","isNumeric_","readNumber_","isAlpha_","readText_","isWhiteSpace_","nextToken","decimal","scientificNotation","parseFloat","Parser","lexer","lexer_","token_","layout_","isMatch","isTokenType","consume_","parseGeometry_","layout","dimToken","dimInfo","match","isEmptyGeometry_","formatErrorMessage_","parsePoint_","parsePointList_","parseLineStringTextList_","parsePointTextList_","parsePolygonTextList_","dimensions","token","parsePointText_","parseLineStringText_","parsePolygonText_","o2c","ordinates","_construct","_toConsumableArray","ca2p","parseGeometryLayout_","parseGeometryCollectionText_","components","parseMultiPointText_","parseMultiLineStringText_","parseMultiPolygonText_","encodePointGeometry","cs","join","encodeLineStringGeometry","ii","encodePolygonGeometry","GeometryEncoder","encode","geometryEncoder","encodeGeometryLayout","WKTParser","geometryFactory","geometry","WKTWriter","parser","write","LineIntersector","segmentIndex","intIndex","computeIntLineIndex","_intLineIndex","catBuilder","isEndPoint","_isProper","isCollinear","p3","p4","_inputLines","_result","computeIntersect","getEdgeDistance","hasIntersection","isInteriorIntersection","inputLineIndex","_intPt","NO_INTERSECTION","computeEdgeDistance","COLLINEAR_INTERSECTION","toLineString","getTopologySummary","ptIndex","_pa","_pb","pdx","pdy","DONT_INTERSECT","DO_INTERSECT","POINT_INTERSECTION","RobustLineIntersector","_LineIntersector","intPt","env0","env1","intersectionSafe","isInSegmentEnvelopes","nearestEndpoint","intPtDD","intersection","isIn","out","println","p1q1p2","p1q2p2","q1p1q2","q1p2q2","Pq1","Pq2","Qp1","Qp2","computeCollinearIntersection","nearestPt","minDist","RayCrossingCounter","_p","_isPointOnSegment","minx","maxx","orient","_crossingCount","getLocation","counter","countSegment","isOnSegment","PointLocation","lineIntersector","computeIntersection","locatePointInRing","locateInRing","TopologyLocation","locValue","location","gl","newLoc","temp","toLocationSymbol","on","left","right","posIndex","setLocation","locIndex","setAllLocations","loc","Label","count","elt","geomIndex","setAllLocationsIfNull","isLine","lbl","merge","flip","isArea","isAnyNull","isEqualOnSide","allPositionsEqual","onLoc","leftLoc","rightLoc","setLocations","label","lineLabel","EdgeRing","_ring","_pts","_geometryFactory","_isHole","_label","getGeometryCount","_startDe","isFirstEdge","getEdgeRing","_edges","mergeLabel","addPoints","setEdgeRing","getNext","_maxNodeDegree","degree","getOutgoingDegree","edge","edgePts","startIndex","getLinearRing","isInRing","containsPoint","computeMaxNodeDegree","deLabel","addHole","holeLR","computePoints","computeRing","MinimalEdgeRing","_EdgeRing","er","setMinEdgeRing","getNextMin","MaximalEdgeRing","minEdgeRings","getMinEdgeRing","minEr","linkMinimalDirectedEdges","GraphComponent","_isVisited","isInResult","_isInResult","_isCovered","_isCoveredSet","isCovered","im","computeIM","Node","_GraphComponent","_coord","label2","eltIndex","nLoc","argIndex","onLocation","computeMergedLocation","insert","setNode","edges","SortedMap","_Map","colorOf","color","parentOf","parent","setColor","leftOf","rightOf","TreeMap","_SortedMap","root_","size_","cmp","getValue","getKey","oldValue","fixAfterInsertion","rotateLeft","rotateRight","getFirstEntry","successor","l","NodeMap","nodeMap","nodeFact","createNode","print","bdyNodes","addNode","Quadrant","quad","NE","NW","quad1","quad2","halfPlane","SE","SW","EdgeEnd","_dx","_dy","_quadrant","_p0","_p1","_node","angle","atan2","className","getName","lastDotPos","lastIndexOf","compareDirection","_edge","boundaryNodeRule","quadrant","DirectedEdge","_EdgeEnd","_nextMin","_depth","_isForward","_next","depthVal","nextMin","getDepthDelta","minEdgeRing","_minEdgeRing","isExteriorIfArea0","isExteriorIfArea1","edgeRing","_edgeRing","depthDelta","_sym","printReverse","depth","directionFactor","oppositePos","opposite","oppositeDepth","computeDirectedLabel","currLocation","nextLocation","NodeFactory","PlanarGraph","eiList","find","nodeit","linkResultDirectedEdges","linkAllDirectedEdges","ep0","ep1","_edgeEndList","eCoord","matchInSameDirection","getEdgeEnds","ee","edgesToAdd","de1","de2","setSym","nodes","PolygonBuilder","edgeRings","shellList","freeHoleList","isHole","resultPolyList","toPolygon","hole","getShell","findEdgeRingContaining","setShell","maxEdgeRings","getMaxNodeDegree","linkDirectedEdgesForMinimalEdgeRings","buildMinimalRings","findShell","placePolygonHoles","dirEdges","computePolygons","_shellList","shellCount","getNodes","buildMaximalEdgeRings","buildMinimalEdgeRings","sortShellsAndHoles","placeFreeHoles","testEr","testRing","testEnv","minShell","minShellEnv","tryShell","tryShellRing","tryShellEnv","ptNotInList","isContained","Boundable","ItemBoundable","_item","_bounds","bounds","item","PriorityQueue","minItem","_items","_size","reorder","child","clear","SpatialIndex","itemEnv","AbstractNode","_level","_childBoundables","childBoundable","computeBounds","level","Collections","reverseOrder","alen","singletonList","EnvelopeDistance","ax1","ay1","ax2","ay2","bx1","by1","bx2","by2","env2","miny","maxy","aminx","aminy","amaxx","amaxy","bminx","bminy","bmaxx","bmaxy","maxDistance","BoundablePair","maximumDistance","_boundable1","getBounds","_boundable2","priQ","isComp1","isComposite","isComp2","expand","nd","_distance","bndComposite","bndOther","isFlipped","getChildBoundables","bp","_itemDistance","getDistance","isLeaves","boundable1","boundable2","itemDistance","ItemVisitor","AbstractSTRtree","searchBounds","visitor","childBoundables","getIntersectsOp","queryInternal","visitItem","getItem","matches","_nodeCapacity","build","_root","childToRemove","valuesTree","itemsTree","valuesTreeForNode","valuesTreeForChild","_built","_itemBoundables","boundables","boundablesAtLevel","top","getLevel","boundable","createHigherLevels","found","removeItem","childToPrune","boundablesOfALevel","parentBoundables","createParentBoundables","maxChildDepth","childDepth","newLevel","sortedChildBoundables","getComparator","lastNode","getNodeCapacity","addChildBoundable","DEFAULT_NODE_CAPACITY","nodeCapacity","IntersectsOp","ItemDistance","item1","item2","STRtree","_AbstractSTRtree","verticalSlices","createParentBoundablesFromVerticalSlice","initBndPair","nearestNeighbourK","distanceLowerBound","kNearestNeighbors","bndPair","poll","pairDistance","peek","expandToQueue","getItems","STRtreeNode","intersectsOp","sliceCount","sliceCapacity","slices","boundablesAddedToSlice","searchEnv","yComparator","minLeafCount","xComparator","createParentBoundablesFromVerticalSlices","itemDist","getRoot","nearestNeighbour","minPair","getBoundable","tree","bnd","distanceUpperBound","isWithinDistance","avg","items","_AbstractNode","_this2","_class","compareDoubles","centreX","_class2","centreY","_class3","aBounds","bBounds","SegmentPointComparator","octant","xSign","relativeSign","ySign","compareValue","compareSign0","compareSign1","SegmentNode","_isInterior","_segmentOctant","maxSegmentIndex","_segString","segString","segmentOctant","SegmentNodeList","addEndpoints","eiPrev","ei","addEdgeCoordinates","collapsedVertexIndexes","findCollapsesFromInsertedNodes","findCollapsesFromExistingVertices","vertexIndex","intValue","ei0","ei1","lastSegStartPt","useIntPt1","isInterior","ipt","createSplitEdgePts","_nodeMap","edgeList","addCollapsedNodes","newEdge","createSplitEdge","collapsedVertexIndex","numVerticesBetween","findCollapseIndex","maxSegIndex","NodedSegmentString","getData","eiNew","getSegmentOctant","splitEdges","pt0","splitnPts","ptn","Octant","adx","ady","SegmentString","data","NodableSegmentString","safeOctant","_data","addIntersectionNode","getIntersection","addIntersection","_nodeList","normalizedSegmentIndex","nextSegIndex","nextPt","li","getIntersectionNum","segStrings","resultEdgelist","getNodedSubstrings","getNodeList","addSplitEdges","LineSegment","seg","orient0","orient1","geomFactory","projectionFactor","pf0","pf1","newp0","project","newp1","pointToLinePerpendicular","midPoint","closestPt","close00","closestPoint","close01","close10","close11","factor","comp0","segmentLengthFraction","offsetDistance","segx","segy","ux","uy","ls","setCoordinates","inputPt","segFrac","A2plusB2","A2subB2","segmentToSegment","bits0","hash0","bits1","MonotoneChainOverlapAction","start1","mc2","start2","getLineSegment","_overlapSeg1","_overlapSeg2","overlap","MonotoneChain","start0","end0","mcs","select","computeSelect","_end","_start","mc","mco","computeOverlaps","end1","overlaps","mid0","mid1","id","_id","_context","context","MonotoneChainBuilder","safeStart","chainQuad","getChains","mcList","chainStart","chainEnd","findChainEnd","Noder","SinglePassNoder","segInt","_segInt","setSegmentIntersector","MCIndexNoder","_SinglePassNoder","_monoChains","_nodedSegStrings","_index","segStr","setId","_idCounter","getEnvelope","inputSegStrings","intersectChains","overlapAction","SegmentOverlapAction","queryChain","query","testChain","getId","_nOverlaps","si","_MonotoneChainOverlap","ss1","getContext","ss2","_si","processIntersections","BufferInputLineSimplifier","i0","distanceTol","_inputLine","isConcave","isShallow","isShallowSampled","midIndex","findNextNonDeletedIndex","lastIndex","isMiddleVertexDeleted","isDeletable","_distanceTol","_isDeleted","DELETE","_angleOrientation","NUM_PTS_TO_CHECK","deleteShallowConcavities","collapseLine","inputLine","simplify","INIT","KEEP","OffsetSegmentString","_ptList","COORDINATE_ARRAY_TYPE","bufPt","isRedundant","addPt","lastPt","_minimimVertexDistance","startPt","minimimVertexDistance","Angle","radians","PI_TIMES_2","dx0","dy0","anglePrev","angleNext","tip1","tail","tip2","a1","a2","diff","ang1","ang2","delAngle","angleDegrees","crossproduct","sin","angDel","PI_OVER_2","PI_OVER_4","OffsetSegmentGenerator","addStartPoint","_s0","_s1","_s2","_seg0","computeOffsetSegment","_side","_offset0","_seg1","_offset1","outsideTurn","addCollinear","addOutsideTurn","addInsideTurn","offsetL","offsetR","_bufParams","getEndCapStyle","_segList","addDirectedFillet","squareCapSideOffset","squareCapLOffset","squareCapROffset","offset0","offset1","getMitreLimit","addLimitedMitreJoin","OFFSET_SEGMENT_SEPARATION_FACTOR","getJoinStyle","addMitreJoin","addBevelJoin","addCornerFillet","closeRing","addPts","direction","radius","startAngle","endAngle","s1","s2","basePt","ang0","angDiffHalf","angleBetweenOriented","midAng","mitreMidAng","mitreDist","bevelHalfLen","bevelMidX","bevelMidY","bevelMidPt","mitreMidLine","bevelEndLeft","pointAlongOffset","bevelEndRight","totalAngle","nSegs","_filletAngleQuantum","angleInc","offset","sideSign","_li","_hasNarrowConcaveAngle","INSIDE_TURN_VERTEX_SNAP_DISTANCE_FACTOR","_closingSegLengthFactor","_maxCurveSegmentError","setPrecisionModel","setMinimumVertexDistance","CURVE_VERTEX_SNAP_DISTANCE_FACTOR","bufParams","getQuadrantSegments","MAX_CLOSING_SEG_LEN_FACTOR","OffsetCurveBuilder","inputPts","isRightSide","posDistance","segGen","getSegGen","computePointCurve","computeOffsetCurve","curvePts","distTol","simplifyTolerance","addSegments","simp2","initSideSegments","addFirstSegment","addNextSegment","simp1","addLastSegment","simp","addLineEndCap","createCircle","createSquare","isLineOffsetEmpty","computeSingleSidedBufferCurve","computeLineBufferCurve","bufDistance","getSimplifyFactor","getLineCurve","copyCoordinates","computeRingBufferCurve","SubgraphDepthLocater","stabbingRayLeftPt","stabbedSegments","_subgraphs","bsg","findStabbedSegments","getDirectedEdges","dirEdge","_seg","isHorizontal","ds","DepthSegment","_leftDepth","subgraphs","_upwardSeg","minX","maxX","orientIndex","seg0","seg1","compare0","NotRepresentableException","HCoordinate","_x","_y","_w","Triangle","signedArea","interpolateZ","longestSideLength","isAcute","circumcentre","area3D","centroid","inCentre","m00","m01","m10","m11","v0","lenAB","lenBC","lenCA","maxLen","ay","bx","by","asqr","bsqr","numx","numy","ccx","ccy","cx","cy","l1","l2","len0","frac","uz","vx","vy","vz","crossx","crossy","crossz","absSq","len1","circum","inCentreX","inCentreY","OffsetCurveSetBuilder","cwLeftLoc","cwRightLoc","curve","_curveBuilder","getRingCurve","addCurve","addRingSide","offsetSide","shellCoord","removeRepeatedPoints","isErodedCompletely","holeCoord","triangleCoord","bufferDistance","tri","getBufferParameters","addRingBothSides","_curveList","_inputGeom","addPolygon","addLineString","addPoint","addCollection","ringCoord","isTriangleErodedCompletely","envMinDimension","inputGeom","curveBuilder","PointOnGeometryLocator","GeometryCollectionIterator","_atStart","isAtomic","_parent","_subcollectionIterator","_max","SimplePointInAreaLocator","locate","_geom","shellLoc","holeLoc","locatePointInPolygon","geomi","g2","locateInGeometry","EdgeEndStar","_edgeList","iNextCW","startLoc","currLoc","geomGraph","computeEdgeEndLabels","getBoundaryNodeRule","checkAreaLabelsConsistent","lastEdgeIndex","eSearch","_edgeMap","_ptInAreaLocation","getGeometry","computeLabel","propagateSideLabels","hasDimensionalCollapseEdge","DirectedEdgeStar","_EdgeEndStar","getResultAreaEdges","firstOut","incoming","state","_SCANNING_FOR_INCOMING","_resultAreaEdgeList","nextOut","nextIn","_LINKING_TO_OUTGOING","setNext","insertEdgeEnd","de0","deLast","quad0","getQuadrant","isNorthern","getDy","nodeLabel","prevOut","firstIn","edgeIndex","findIndex","startDepth","targetLastDepth","nextDepth","endIndex","currDepth","nextDe","setNextMin","isLineEdge","setCovered","eLabel","eLoc","OverlayNodeFactory","_NodeFactory","OrientedCoordinateArray","oca","compareOriented","_orientation","orientation1","orientation2","limit1","limit2","compPt","done1","done2","EdgeList","edgeColl","_ocaMap","SegmentIntersector","e0","segIndex0","e1","segIndex1","IntersectionAdder","isAdjacentSegments","_properIntersectionPoint","_hasProperInterior","_hasProper","numTests","p00","p01","p10","p11","numIntersections","numInteriorIntersections","_hasInterior","isTrivialIntersection","_hasIntersection","addIntersections","isProper","numProperIntersections","_isSelfIntersection","EdgeIntersection","EdgeIntersectionList","Edge","IntersectionMatrix","isDisjoint","_matrix","dimensionSymbols","row","col","toDimensionValue","column","minimumDimensionSymbols","setAtLeast","minimumDimensionValue","dimensionOfGeometryA","dimensionOfGeometryB","isTouches","builder","ai","bi","setCharAt","toDimensionSymbol","requiredDimensionSymbols","setAll","elements","actualDimensionValue","requiredDimensionSymbol","IntArrayList","capacity","copyOf","initialCapacity","MonotoneChainIndexer","startIndexList","toIntArray","list","MonotoneChainEdge","chainIndex","chainIndex0","mce","chainIndex1","computeIntersectsForChain","mcb","getChainStartIndices","Depth","depthValue","NULL_VALUE","minDepth","newValue","depthAtLocation","newPts","toLineLabel","_isIsolated","isIsolated","isEqualForward","isEqualReverse","iRev","_depthDelta","updateIM","_mce","setAtLeastIfValid","BufferBuilder","_workingPrecisionModel","existingEdge","findEqualEdge","existingLabel","labelToMerge","isPointwiseEqual","mergeDelta","newDelta","setDepthDelta","subgraphList","polyBuilder","processedGraphs","subgraph","getRightmostCoordinate","computeDepth","findResultEdges","_geomFact","_workingNoder","noder","bufferSegStrList","getCurves","createEmptyResultGeometry","computeNodedEdges","_graph","addEdges","createSubgraphs","buildSubgraphs","getPolygons","getNoder","computeNodes","oldLabel","insertUniqueEdge","lLoc","rLoc","lines","ss","ScaledNoder","rescale","_scaleFactor","_offsetX","_offsetY","nodedSegmentStrings","roundPts","splitSS","_noder","_isScaled","intSegStrings","scaleFactor","isIntegerPrecision","NodingValidator","_segStrings","checkEndPtVertexIntersections","ss0","checkInteriorIntersections","pts0","hasInteriorIntersection","checkCollapses","checkCollapse","HotPixel","segMinx","segMaxx","segMiny","segMaxy","isOutsidePixelEnv","intersectsToleranceSquare","_corner","intersectsScaled","copyScaled","_p0Scaled","_p1Scaled","_originalPt","pScaled","_safeEnv","safeTolerance","SAFE_ENV_EXPANSION_FACTOR","intersectsLeft","intersectsBottom","_pt","segIndex","_ptScaled","initCorners","MonotoneChainSelectAction","selectedSegment","MCIndexPointSnapper","hotPixel","snap","parentEdge","hotPixelVertexIndex","pixelEnv","getSafeEnvelope","hotPixelSnapAction","HotPixelSnapAction","isNodeAdded","_MonotoneChainSelectA","_isNodeAdded","_parentEdge","_hotPixelVertexIndex","_hotPixel","addSnappedNode","InteriorIntersectionFinderAdder","_interiorIntersections","MCIndexSnapRounder","inputSegmentStrings","resultSegStrings","nv","checkValid","printStackTrace","intersections","findInteriorIntersections","computeIntersectionSnaps","computeVertexSnaps","intFinderAdder","getInteriorIntersections","edge0","_pointSnapper","getIndex","snapRound","snapPts","snapPt","_pm","BufferOp","fixedPM","bufBuilder","setWorkingPrecisionModel","setNoder","_resultGeometry","_argGeom","precDigits","MAX_PRECISION_DIGITS","bufferReducedPrecision","_saveException","precisionDigits","sizeBasedScaleFactor","precisionScaleFactor","bufferFixedPrecision","bufferOriginalPrecision","argPM","getType","computeGeometry","getResultGeometry","bufOp","maxPrecisionDigits","bufEnvMax","minUnitLog10","CAP_BUTT","geometryTypes","GeoJSONParser","json","JSON","extract","Feature","feature","read","bbox","FeatureCollection","featureCollection","features","sub","linearRing","polygon","multipoint","geoJson","linestring","multilinestring","shellGeoJson","holeGeoJson","multipolygon","collection","GeoJSONReader","GeoJSONWriter"],"mappings":"03IAAqBA,EAAgB,WACnC,SAAAA,IAAcC,OAAAD,GACZA,EAAiBE,aAAaC,MAAMC,KAAMC,UAC5C,CAAC,OAAAC,EAAAN,EAAA,CAAA,CAAAO,IAAA,iBAAAC,MA2BD,WACE,OAAOJ,KAAKK,YACd,GAAC,CAAAF,IAAA,gBAAAC,MACD,WACE,OAAOJ,KAAKM,cACd,GAAC,CAAAH,IAAA,sBAAAC,MACD,SAAoBG,GAClBP,KAAKQ,kBAAoBD,EACM,IAA3BP,KAAKQ,oBAAyBR,KAAKS,WAAab,EAAiBc,YACjEV,KAAKQ,kBAAoB,IAC3BR,KAAKS,WAAab,EAAiBe,WACnCX,KAAKY,YAAcC,KAAKC,IAAId,KAAKQ,oBAE/BD,GAAY,IACdP,KAAKQ,kBAAoB,GAEvBR,KAAKS,aAAeb,EAAiBmB,aACvCf,KAAKQ,kBAAoBZ,EAAiBoB,0BAE9C,GAAC,CAAAb,IAAA,eAAAC,MACD,WACE,OAAOJ,KAAKS,UACd,GAAC,CAAAN,IAAA,eAAAC,MACD,SAAaa,GACXjB,KAAKS,WAAaQ,CACpB,GAAC,CAAAd,IAAA,oBAAAC,MACD,SAAkBc,GAChBlB,KAAKmB,gBAAkBD,EAAiB,EAAI,EAAIA,CAClD,GAAC,CAAAf,IAAA,oBAAAC,MACD,WACE,OAAOJ,KAAKmB,eACd,GAAC,CAAAhB,IAAA,sBAAAC,MACD,WACE,OAAOJ,KAAKQ,iBACd,GAAC,CAAAL,IAAA,iBAAAC,MACD,SAAegB,GACbpB,KAAKK,aAAee,CACtB,GAAC,CAAAjB,IAAA,gBAAAC,MACD,WACE,OAAOJ,KAAKY,WACd,GAAC,CAAAT,IAAA,gBAAAC,MACD,SAAciB,GACZrB,KAAKY,YAAcS,CACrB,GAAC,CAAAlB,IAAA,iBAAAC,MACD,SAAekB,GACbtB,KAAKM,eAAiBgB,CACxB,IAAC,CAAA,CAAAnB,IAAA,eAAAC,MAxED,WAOE,GANAJ,KAAKQ,kBAAoBZ,EAAiBoB,0BAC1ChB,KAAKK,aAAeT,EAAiB2B,UACrCvB,KAAKS,WAAab,EAAiBmB,WACnCf,KAAKY,YAAchB,EAAiB4B,oBACpCxB,KAAKM,gBAAiB,EACtBN,KAAKmB,gBAAkBvB,EAAiB6B,wBACf,IAArBxB,UAAUyB,aAAsB,GAAyB,IAArBzB,UAAUyB,OAAc,CAC9D,IAAMC,EAAmB1B,UAAU,GACnCD,KAAK4B,oBAAoBD,EAC3B,MAAO,GAAyB,IAArB1B,UAAUyB,OAAc,CACjC,IAAMC,EAAmB1B,UAAU,GAAImB,EAAcnB,UAAU,GAC/DD,KAAK4B,oBAAoBD,GACzB3B,KAAK6B,eAAeT,EACtB,MAAO,GAAyB,IAArBnB,UAAUyB,OAAc,CACjC,IAAMC,EAAmB1B,UAAU,GAAImB,EAAcnB,UAAU,GAAIgB,EAAYhB,UAAU,GAAIoB,EAAapB,UAAU,GACpHD,KAAK4B,oBAAoBD,GACzB3B,KAAK6B,eAAeT,GACpBpB,KAAK8B,aAAab,GAClBjB,KAAK+B,cAAcV,EACrB,CACF,GAAC,CAAAlB,IAAA,sBAAAC,MACD,SAA2BG,GACzB,IAAMyB,EAAQnB,KAAKoB,GAAK,EAAM1B,EAC9B,OAAO,EAAIM,KAAKqB,IAAIF,EAAQ,EAC9B,IAAC,CA7BkC,GA8ErCpC,EAAiB2B,UAAY,EAC7B3B,EAAiBuC,SAAW,EAC5BvC,EAAiBwC,WAAa,EAC9BxC,EAAiBmB,WAAa,EAC9BnB,EAAiBe,WAAa,EAC9Bf,EAAiBc,WAAa,EAC9Bd,EAAiBoB,0BAA4B,EAC7CpB,EAAiB4B,oBAAsB,EACvC5B,EAAiB6B,wBAA0B,ICtFtBY,IAAAA,WAASC,GAC5B,SAAAD,EAAYE,GAAS,IAAAC,EAEsB,OAFtB3C,OAAAwC,IACnBG,EAAAC,EAAAJ,KAAAA,GAAME,KACDG,KAAOC,OAAOC,KAAK,CAAEP,UAAAA,IAAa,GAAEG,CAC3C,CAAC,OAAAK,EAAAR,EAAAC,GAAApC,EAAAmC,EAAA,CAAA,CAAAlC,IAAA,WAAAC,MACD,WACE,OAAOJ,KAAKuC,OACd,IAAC,EAAAO,EAPoCC,QCElBC,WAAwBC,GAC3C,SAAAD,EAAYT,GAAS,IAAAC,EAEqC,OAFrC3C,OAAAmD,IACnBR,EAAAC,EAAAO,KAAAA,GAAMT,KACDG,KAAOC,OAAOC,KAAK,CAAEI,yBAAAA,IAA4B,GAAER,CAC1D,CAAC,OAAAK,EAAAG,EAAAC,GAAA/C,EAAA8C,EAAA,EAJmDX,GCFjCa,EAAuB,WAAA,OAAAhD,GAAA,SAAAgD,IAAArD,OAAAqD,EAAA,GAAA,CAAA,CAAA/C,IAAA,SAAAC,MAC1C,SAAO+C,GAAM,IAAE,CAD2B,GCA7B,SAASC,IAAa,CCAtB,SAASC,IAAW,CCApB,SAASC,IAAe,KC8C7BC,EACAC,EACAC,EACAC,EACAC,EAjCAC,EAEAC,EACAC,ECpBWC,EAAU,WAAA,OAAA7D,GAAA,SAAA6D,IAAAlE,OAAAkE,EAAA,GAAA,KAAA,CAAA,CAAA5D,IAAA,sBAAAC,MAC7B,SAA2B4D,EAAIC,EAAIC,GACjC,OAAOrD,KAAKC,IAAIkD,EAAKC,IAAOC,CAC9B,IAAC,CAH4B,GCAVC,EAAI,WAItB,OAAAjE,GAHD,SAAAiE,EAAYC,EAAMC,GAAKxE,OAAAsE,GACrBnE,KAAKqE,IAAMA,GAAO,EAClBrE,KAAKoE,KAAOA,GAAQ,CACtB,GAAC,KAAA,CAAA,CAAAjE,IAAA,iBAAAC,MAED,SAAsBkE,GACpB,IAAIC,EACAC,EAAS,GACb,IAAKD,EAAO,WAAYA,EAAO,EAAGA,KAAU,EAC1CC,IAAWF,EAAEF,KAAOG,KAAUA,EAAO,IAAM,IAC7C,IAAKA,EAAO,WAAYA,EAAO,EAAGA,KAAU,EAC1CC,IAAWF,EAAED,IAAME,KAAUA,EAAO,IAAM,IAC5C,OAAOC,CACT,IAAC,CAdsB,GFEV,SAASC,IAAS,CGFlB,SAASC,IAAa,CHIrCD,EAAOE,IAAMA,IACbF,EAAOG,MAAQ,SAAAC,GAAC,OAAIC,OAAOF,MAAMC,EAAE,EACnCJ,EAAOM,WAAa,SAAAF,GAAC,OAAKC,OAAOE,SAASH,EAAE,EAC5CJ,EAAOQ,UAAYH,OAAOG,UAC1BR,EAAOS,kBAAoBJ,OAAOI,kBAClCT,EAAOU,kBAAoBL,OAAOK,kBAEN,mBAAjBC,cACa,mBAAfC,YAKCzB,EAAe,WAEfC,EAAS,IAAIuB,aAAa,GAC1BtB,EAAS,IAAIuB,WAAWxB,EAAOyB,QACrCb,EAAOc,iBAAmB,SAASnF,GACjCyD,EAAO,GAAKzD,EACZ,IAAIiE,EAAkB,EAAZP,EAAO,GACbM,EAAmB,EAAZN,EAAO,GASlB,OANMM,EAAOR,KAAkBA,GATT,QAUlBQ,GACO,IAARC,IACDA,EAAM,EACND,EAAO,YAEF,IAAID,EAAKC,EAAMC,EACvB,EACDI,EAAOe,iBAAmB,SAASC,GAGjC,OAFA3B,EAAO,GAAK2B,EAAKpB,IACjBP,EAAO,GAAK2B,EAAKrB,KACVP,EAAO,EACf,IAOKN,EAAO,KACPC,EAAO3C,KAAK2C,KACZC,EAAQ5C,KAAK4C,MACbC,EAAM7C,KAAK6C,IACXC,EAAwB,WAC5B,IAAK,IAAIW,EAAI,GAAIA,EAAI,EAAGA,IAAK,CAC3B,IAAMmB,EAAO/B,EAAI,EAAGY,GAAK,EACzB,GAAIb,EAAMD,EAAKiC,IAAS,IAAMnB,EAAG,OAAOmB,CAC1C,CACA,OAAO,CACT,CAN8B,GAO9BhB,EAAOc,iBAAmB,SAASnF,GACjC,IAAIsF,EAAGC,EAAGC,EAAGH,EAAMI,EACfC,EAAMC,EAAK3B,EAAMC,EAWrB,GARIjE,EAAQ,GAAK,EAAIA,IAAU0E,OAAOK,mBACpCW,EAAQ,GAAK,GACb1F,GAAUA,GAEV0F,EAAO,EAIK,IAAV1F,EAIF,OAAO,IAAI+D,EADXC,EAAO0B,EADPzB,EAAM,GAKR,GAAIjE,IAAU4F,IAIZ,OAAO,IAAI7B,EADXC,EAAc,WAAP0B,EADPzB,EAAM,GAKR,GAAIjE,GAAUA,EAIZ,OAAO,IAAI+D,EADXC,EAAO,WADPC,EAAM,GAgBR,GATAoB,EAAO,EACPpB,EAAM,GAGNqB,EAAIjC,EAAMrD,IAKF,EAIN,GAAIsF,GAAK/B,GAEP8B,EAAOhC,EAAMD,EAAKkC,MAMN,IAIVrB,EAAM,EACND,EAAQsB,GAAM,GAAKD,EAAS,UAW5BpB,EAAOqB,GADPC,EAAIjC,EAAI,EAFRkC,EAAIH,EAAO,MAGO,GAAKG,EACvBxB,EAAQsB,EAAIC,EAAK,cAanB,IAFAC,EAAIF,EACJrB,EAAM,EAIM,KADVuB,EAAInC,EADJkC,EAAIC,EAAI,KASRH,IACApB,KAAS,EACTA,IAAe,EAAPD,IAAe,GAEvBA,KAAU,EACNuB,IAAMC,IAERxB,GAAQ,QAkBhB,GAbA2B,EAAMN,EAAOlC,EAKbsC,EAAc,IAANH,EAGRA,EAAItF,EAAQsF,EAKRD,EAAO,IAAY,IAANC,EAKf,IAFAE,EAAI,IAEK,CAiCP,IAhCAD,EAAQ,EAAJD,IACK,GAGPA,EAAIC,EAAI,EACHE,GAOHE,IACAF,GAAO,IAPPD,IAAM,EACNA,GAAK,EACLH,OAUFC,EAAIC,EACCE,EAGgB,KAARE,IAMXN,IACAI,GAAO,IATPD,IAAM,EACNH,MAWS,KAATA,EAKFrB,GAAQwB,EACRA,EAAI,OACC,GAAa,KAATH,EAAa,CAItBpB,GAAOuB,EACP,KACF,CACA,GAAU,IAAND,EAAS,CAIPF,EAAO,GACTrB,GAASwB,GAAM,GAAKH,EACbA,EAAO,KAAIpB,GAAQuB,GAAM,GAAKH,GAEvC,KACF,CACF,CAOF,OAHArB,GAAS2B,GAAO,GAGT,IAAI5B,EAFXC,GAAQ0B,EAEczB,EACvB,EACDI,EAAOe,iBAAmB,SAASC,GACjC,IAAInB,EACAoB,EAAGK,EAAKE,EACN7B,EAAOqB,EAAKrB,KACZC,EAAMoB,EAAKpB,IAGXyB,EAAQ1B,EAAQ,GAAK,IAAQ,EAAI,EASvC,IANA2B,IAAe,WAAP3B,IAAsB,IAAMb,EAIpC0C,EAAQ,EACRP,EAAK,GAAK,GACLpB,EAAI,EAAGA,GAAK,GAAIA,IACfF,EAAOsB,IAAGO,GAASvC,EAAI,GAAIY,IAE/BoB,KAAO,EAIT,IADAA,EAAK,GAAK,GACLpB,EAAI,GAAIA,GAAK,GAAIA,IAChBD,EAAMqB,IAAGO,GAASvC,EAAI,GAAIY,IAE9BoB,KAAO,EAKT,IAAY,OAARK,EAAe,CACjB,GAAc,IAAVE,EAEF,OAAc,EAAPH,EAETC,GAAO,IACT,KAAO,IAAYxC,OAARwC,EACT,OAAc,IAAVE,EAEKH,EAAO,EAETnB,IAGPsB,GAAS,CACX,CAEA,OAAOH,EAAOG,EAAQvC,EAAI,EAAGqC,EAC9B,GI3S8B,IAEdG,WAAgBjD,GACnC,SAAAiD,EAAY3D,GAAS,IAAAC,EAE6B,OAF7B3C,OAAAqG,IACnB1D,EAAAC,EAAAyD,KAAAA,GAAM3D,KACDG,KAAOC,OAAOC,KAAK,CAAEsD,iBAAAA,IAAoB,GAAE1D,CAClD,CAAC,OAAAK,EAAAqD,EAAAjD,GAAA/C,EAAAgG,EAAA,EAJ2C7D,GCDzB8D,WAAwBC,GAC3C,SAAAD,IAAc,IAAA3D,EAEgD,OAFhD3C,OAAAsG,GACZ3D,EAAAC,EAAAzC,KAAAmG,GACAA,EAAyBrG,aAAaC,MAAKyC,EAAOvC,WAAUuC,CAC9D,CAAC,OAAAK,EAAAsD,EAAAC,GAAAlG,EAAAiG,EAAA,KAAA,CAAA,CAAAhG,IAAA,eAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OACZwE,EAAiBpG,aAAauG,KAAKrG,WAC9B,GAAyB,IAArBC,UAAUyB,OAAc,CACjC,IAAMa,EAAUtC,UAAU,GAC1BiG,EAAiBpG,aAAauG,KAAKrG,KAAMuC,EAC3C,CACF,IAAC,EAZmD2D,GCAjCI,EAAM,WAAA,SAAAA,IAAAzG,OAAAyG,EAAA,CAAA,OAAApG,EAAAoG,EAAA,KAAA,CAAA,CAAAnG,IAAA,uBAAAC,MACzB,WACE,GAAyB,IAArBH,UAAUyB,OACZ4E,EAAOC,qBAAqB,WACvB,GAAyB,IAArBtG,UAAUyB,OAAc,CACjC,IAAMa,EAAUtC,UAAU,GAC1B,MAAM,IAAIkG,EAAyB,2BAAyC,OAAZ5D,EAAmB,KAAOA,EAAU,IACtG,CACF,GAAC,CAAApC,IAAA,SAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OAAc,CAC1B,IAAM8E,EAAYvG,UAAU,GAC5BqG,EAAOG,OAAOD,EAAW,KAC3B,MAAO,GAAyB,IAArBvG,UAAUyB,OAAc,CACjC,IAAgCa,EAAUtC,UAAU,GACpD,IADkBA,UAAU,GAE1B,MAAgB,OAAZsC,EACI,IAAI4D,EAEJ,IAAIA,EAAyB5D,EAGzC,CACF,GAAC,CAAApC,IAAA,SAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OAAc,CAC1B,IAAMgF,EAAgBzG,UAAU,GAAI0G,EAAc1G,UAAU,GAC5DqG,EAAOM,OAAOF,EAAeC,EAAa,KAC5C,MAAO,GAAyB,IAArB1G,UAAUyB,OAAc,CACjC,IAAMgF,EAAgBzG,UAAU,GAAI0G,EAAc1G,UAAU,GAAIsC,EAAUtC,UAAU,GACpF,IAAK0G,EAAYC,OAAOF,GACtB,MAAM,IAAIP,EAAyB,YAAcO,EAAgB,oBAAsBC,GAA2B,OAAZpE,EAAmB,KAAOA,EAAU,IAE9I,CACF,IAAC,CAlCwB,GCQrBsE,EAAO,IAAIC,YAAY,GACvBC,EAAY,IAAI3B,aAAayB,GAC7BG,EAAY,IAAI3B,WAAWwB,GAEZI,EAAU,WAC7B,SAAAA,IAAcpH,OAAAoH,GACZA,EAAWnH,aAAaC,MAAMC,KAAMC,UACtC,CAAC,OAAAC,EAAA+G,EAAA,CAAA,CAAA9G,IAAA,OAAAC,MAwBD,WACE,OAAOqE,EAAOE,GAChB,GAAC,CAAAxE,IAAA,cAAAC,MACD,SAAY8G,EAAe9G,GACzB,OAAQ8G,GACR,KAAKD,EAAWE,EACdnH,KAAK0F,EAAItF,EACT,MACF,KAAK6G,EAAWG,EACdpH,KAAK2F,EAAIvF,EACT,MACF,KAAK6G,EAAWI,EACdrH,KAAKsH,KAAKlH,GACV,MACF,QACE,MAAM,IAAI4C,EAAyB,2BAA6BkE,GAEpE,GAAC,CAAA/G,IAAA,WAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OAAc,CAC1B,IAAM6F,EAAQtH,UAAU,GACxB,OAAID,KAAK0F,IAAM6B,EAAM7B,GAGjB1F,KAAK2F,IAAM4B,EAAM5B,CAIvB,CAAO,GAAyB,IAArB1F,UAAUyB,OAAc,CACjC,IAAM8F,EAAIvH,UAAU,GAAIiE,EAAYjE,UAAU,GAC9C,QAAK8D,EAAW0D,oBAAoBzH,KAAK0F,EAAG8B,EAAE9B,EAAGxB,MAG5CH,EAAW0D,oBAAoBzH,KAAK2F,EAAG6B,EAAE7B,EAAGzB,EAInD,CACF,GAAC,CAAA/D,IAAA,OAAAC,MACD,SAAKsH,GACH,MAAM,IAAI1E,EAAyB,2BAA6BiE,EAAWU,EAC7E,GAAC,CAAAxH,IAAA,OAAAC,MACD,WACE,OAAOJ,KAAK4H,CACd,GAAC,CAAAzH,IAAA,cAAAC,MACD,SAAY8G,GACV,OAAQA,GACR,KAAKD,EAAWE,EACd,OAAOnH,KAAK0F,EACd,KAAKuB,EAAWG,EACd,OAAOpH,KAAK2F,EACd,KAAKsB,EAAWI,EACd,OAAOrH,KAAK6H,OAEd,MAAM,IAAI7E,EAAyB,2BAA6BkE,EAClE,GAAC,CAAA/G,IAAA,WAAAC,MACD,SAASmH,GACP,OAAOvH,KAAK0F,IAAM6B,EAAM7B,GAAK1F,KAAK2F,IAAM4B,EAAM5B,IAAM3F,KAAK6H,SAAWN,EAAMM,QAAUpD,EAAOG,MAAM5E,KAAK6H,SAAWpD,EAAOG,MAAM2C,EAAMM,QACtI,GAAC,CAAA1H,IAAA,SAAAC,MACD,SAAOmH,GACL,OAAMA,aAAiBN,GAGhBjH,KAAK8H,SAASP,EACvB,GAAC,CAAApH,IAAA,WAAAC,MACD,SAASoH,EAAGtD,GACV,OAAOH,EAAW0D,oBAAoBzH,KAAK6H,OAAQL,EAAEK,OAAQ3D,EAC/D,GAAC,CAAA/D,IAAA,OAAAC,MACD,SAAKsF,GACH1F,KAAK0F,EAAIA,CACX,GAAC,CAAAvF,IAAA,YAAAC,MACD,SAAU2H,GACR,IAAMR,EAAQQ,EACd,OAAI/H,KAAK0F,EAAI6B,EAAM7B,GAAW,EAC1B1F,KAAK0F,EAAI6B,EAAM7B,EAAU,EACzB1F,KAAK2F,EAAI4B,EAAM5B,GAAW,EAC1B3F,KAAK2F,EAAI4B,EAAM5B,EAAU,EACtB,CACT,GAAC,CAAAxF,IAAA,OAAAC,MACD,WACE,OAAOJ,KAAK0F,CACd,GAAC,CAAAvF,IAAA,OAAAC,MACD,SAAKwH,GACH5H,KAAK4H,EAAIA,CACX,GAAC,CAAAzH,IAAA,QAAAC,MACD,WACE,IAEE,OADc,IAEf,CAAC,MAAO4H,GACP,GAAIA,aAAaC,2BAEf,OADA3B,EAAOC,qBAAqB,yDACrB,KAEP,MAAMyB,CAEV,CACF,GAAC,CAAA7H,IAAA,OAAAC,MACD,WACE,OAAO,IAAI6G,EAAWjH,KACxB,GAAC,CAAAG,IAAA,WAAAC,MACD,WACE,MAAO,IAAMJ,KAAK0F,EAAI,KAAO1F,KAAK2F,EAAI,KAAO3F,KAAK6H,OAAS,GAC7D,GAAC,CAAA1H,IAAA,aAAAC,MACD,SAAWoH,GACT,IAAMU,EAAKlI,KAAK0F,EAAI8B,EAAE9B,EAChByC,EAAKnI,KAAK2F,EAAI6B,EAAE7B,EAChByC,EAAKpI,KAAK6H,OAASL,EAAEK,OAC3B,OAAOhH,KAAKwH,KAAKH,EAAKA,EAAKC,EAAKA,EAAKC,EAAKA,EAC5C,GAAC,CAAAjI,IAAA,OAAAC,MACD,WACE,OAAOJ,KAAK2F,CACd,GAAC,CAAAxF,IAAA,OAAAC,MACD,SAAKuF,GACH3F,KAAK2F,EAAIA,CACX,GAAC,CAAAxF,IAAA,WAAAC,MACD,SAASoH,GACP,IAAMU,EAAKlI,KAAK0F,EAAI8B,EAAE9B,EAChByC,EAAKnI,KAAK2F,EAAI6B,EAAE7B,EACtB,OAAO9E,KAAKwH,KAAKH,EAAKA,EAAKC,EAAKA,EAClC,GAAC,CAAAhI,IAAA,WAAAC,MACD,WACE,IAAIoE,EAAS,GAGb,OADAA,EAAS,IADTA,EAAS,GAAKA,EAASyC,EAAWqB,SAAStI,KAAK0F,IACzBuB,EAAWqB,SAAStI,KAAK2F,EAElD,GAAC,CAAAxF,IAAA,gBAAAC,MACD,SAAcmH,GACZvH,KAAK0F,EAAI6B,EAAM7B,EACf1F,KAAK2F,EAAI4B,EAAM5B,EACf3F,KAAK4H,EAAIL,EAAMM,MACjB,GAAC,CAAA1H,IAAA,cAAAoI,IACD,WACE,MAAO,CAACnF,EAAYoF,EAAWlF,EACjC,IAAC,CAAA,CAAAnD,IAAA,eAAAC,MA7JD,WAIE,GAHAJ,KAAK0F,EAAI,KACT1F,KAAK2F,EAAI,KACT3F,KAAK4H,EAAI,KACgB,IAArB3H,UAAUyB,OACZuF,EAAWnH,aAAauG,KAAKrG,KAAM,EAAK,QACnC,GAAyB,IAArBC,UAAUyB,OAAc,CACjC,IAAM8F,EAAIvH,UAAU,GACpBgH,EAAWnH,aAAauG,KAAKrG,KAAMwH,EAAE9B,EAAG8B,EAAE7B,EAAG6B,EAAEK,OACjD,MAAO,GAAyB,IAArB5H,UAAUyB,OAAc,CACjC,IAAMgE,EAAIzF,UAAU,GAAI0F,EAAI1F,UAAU,GACtCgH,EAAWnH,aAAauG,KAAKrG,KAAM0F,EAAGC,EAAGsB,EAAWwB,cACtD,MAAO,GAAyB,IAArBxI,UAAUyB,OAAc,CACjC,IAAMgE,EAAIzF,UAAU,GAAI0F,EAAI1F,UAAU,GAAI2H,EAAI3H,UAAU,GACxDD,KAAK0F,EAAIA,EACT1F,KAAK2F,EAAIA,EACT3F,KAAK4H,EAAIA,CACX,CACF,GAAC,CAAAzH,IAAA,WAAAC,MACD,SAAgByE,GAEd,OADAkC,EAAU,GAAKlC,EACRmC,EAAU,GAAKA,EAAU,EAClC,IAAC,CA1B4B,GAmKzB0B,EAAqB,WACzB,SAAAA,IAAc7I,OAAA6I,GACZA,EAAsB5I,aAAaC,MAAMC,KAAMC,UACjD,CAAC,OAAAC,EAAAwI,EAAA,CAAA,CAAAvI,IAAA,UAAAC,MAqBD,SAAQuI,EAAIC,GACV,IAAMC,EAAQH,EAAsBI,QAAQH,EAAGjD,EAAGkD,EAAGlD,GACrD,GAAc,IAAVmD,EAAa,OAAOA,EACxB,IAAME,EAAQL,EAAsBI,QAAQH,EAAGhD,EAAGiD,EAAGjD,GACrD,OAAc,IAAVoD,EAAoBA,EACpB/I,KAAKgJ,mBAAqB,EAAU,EAC1BN,EAAsBI,QAAQH,EAAGd,OAAQe,EAAGf,OAE5D,GAAC,CAAA1H,IAAA,cAAAoI,IACD,WACE,MAAO,CAAC7D,EACV,IAAC,CAAA,CAAAvE,IAAA,eAAAC,MA/BD,WAEE,GADAJ,KAAKgJ,kBAAoB,EACA,IAArB/I,UAAUyB,OACZgH,EAAsB5I,aAAauG,KAAKrG,KAAM,QACzC,GAAyB,IAArBC,UAAUyB,OAAc,CACjC,IAAMuH,EAAmBhJ,UAAU,GACnC,GAAyB,IAArBgJ,GAA+C,IAArBA,EAAwB,MAAM,IAAIjG,EAAyB,2CACzFhD,KAAKgJ,kBAAoBC,CAC3B,CACF,GAAC,CAAA9I,IAAA,UAAAC,MACD,SAAe8I,EAAGC,GAChB,OAAID,EAAIC,GAAW,EACfD,EAAIC,EAAU,EACd1E,EAAOG,MAAMsE,GACXzE,EAAOG,MAAMuE,GAAW,GACpB,EAEN1E,EAAOG,MAAMuE,GAAW,EACrB,CACT,IAAC,CAvBwB,GAqC3BlC,EAAWyB,sBAAwBA,EACnCzB,EAAWwB,cAAgBhE,EAAOE,IAClCsC,EAAWE,EAAI,EACfF,EAAWG,EAAI,EACfH,EAAWI,EAAI,EACfJ,EAAWU,EAAI,ECxN4C,IACtCyB,EAAQ,WAC3B,SAAAA,IAAcvJ,OAAAuJ,GACZA,EAAStJ,aAAaC,MAAMC,KAAMC,UACpC,CAAC,OAAAC,EAAAkJ,EAAA,CAAA,CAAAjJ,IAAA,UAAAC,MAgDD,WACE,OAAOJ,KAAKqJ,WAAarJ,KAAKsJ,WAChC,GAAC,CAAAnJ,IAAA,SAAAC,MACD,SAAOmH,GACL,KAAMA,aAAiB6B,GACrB,OAAO,EAET,IAAMG,EAAgBhC,EACtB,OAAIvH,KAAKwJ,SACAD,EAAcC,SAEhBxJ,KAAKyJ,QAAUF,EAAcG,WAAa1J,KAAK2J,QAAUJ,EAAcK,WAAa5J,KAAK6J,QAAUN,EAAcO,WAAa9J,KAAK+J,QAAUR,EAAcS,SACpK,GAAC,CAAA7J,IAAA,eAAAC,MACD,SAAa6J,GACX,GAAIjK,KAAKwJ,UAAYS,EAAIT,WAAaxJ,KAAKkK,WAAWD,GAAM,OAAO,IAAIb,EACvE,IAAMe,EAAUnK,KAAK6J,MAAQI,EAAIJ,MAAQ7J,KAAK6J,MAAQI,EAAIJ,MACpDO,EAAUpK,KAAK+J,MAAQE,EAAIF,MAAQ/J,KAAK+J,MAAQE,EAAIF,MAG1D,OAAO,IAAIX,EAASe,EAFJnK,KAAKyJ,MAAQQ,EAAIR,MAAQzJ,KAAKyJ,MAAQQ,EAAIR,MAEpBW,EADtBpK,KAAK2J,MAAQM,EAAIN,MAAQ3J,KAAK2J,MAAQM,EAAIN,MAE5D,GAAC,CAAAxJ,IAAA,SAAAC,MACD,WACE,OAAOJ,KAAKyJ,MAAQzJ,KAAK6J,KAC3B,GAAC,CAAA1J,IAAA,UAAAC,MACD,WACE,OAAOJ,KAAKyJ,KACd,GAAC,CAAAtJ,IAAA,SAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OAAc,CAC1B,GAAIzB,UAAU,aAAcgH,EAAY,CACtC,IAAMoD,EAAIpK,UAAU,GACpB,OAAOD,KAAKsK,OAAOD,EAAE3E,EAAG2E,EAAE1E,EAC3B,CAAM,GAAI1F,UAAU,aAAcmJ,EAAU,CAC3C,IAAM7B,EAAQtH,UAAU,GACxB,OAAID,KAAKwJ,WAAYjC,EAAMiC,WAGpBjC,EAAMuC,WAAa9J,KAAK6J,OAAStC,EAAMmC,WAAa1J,KAAKyJ,OAASlC,EAAMyC,WAAahK,KAAK+J,OAASxC,EAAMqC,WAAa5J,KAAK2J,MACpI,CACF,MAAO,GAAyB,IAArB1J,UAAUyB,OAAc,CACjC,IAAMgE,EAAIzF,UAAU,GAAI0F,EAAI1F,UAAU,GACtC,OAAID,KAAKwJ,WACF9D,GAAK1F,KAAK6J,OAASnE,GAAK1F,KAAKyJ,OAAS9D,GAAK3F,KAAK+J,OAASpE,GAAK3F,KAAK2J,MAC5E,CACF,GAAC,CAAAxJ,IAAA,aAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OAAc,CAC1B,GAAIzB,UAAU,aAAcmJ,EAAU,CACpC,IAAM7B,EAAQtH,UAAU,GACxB,OAAID,KAAKwJ,WAAYjC,EAAMiC,YAGlBjC,EAAMsC,MAAQ7J,KAAKyJ,OAASlC,EAAMkC,MAAQzJ,KAAK6J,OAAStC,EAAMwC,MAAQ/J,KAAK2J,OAASpC,EAAMoC,MAAQ3J,KAAK+J,MACjH,CAAM,GAAI9J,UAAU,aAAcgH,EAAY,CAC7C,IAAMoD,EAAIpK,UAAU,GACpB,OAAOD,KAAKkK,WAAWG,EAAE3E,EAAG2E,EAAE1E,EAChC,CACF,MAAO,GAAyB,IAArB1F,UAAUyB,OAAc,CACjC,GAAIzB,UAAU,aAAcgH,GAAchH,UAAU,aAAcgH,EAAY,CAC5E,IAAMiC,EAAIjJ,UAAU,GAAIkJ,EAAIlJ,UAAU,GACtC,OAAID,KAAKwJ,cAGON,EAAExD,EAAIyD,EAAEzD,EAAIwD,EAAExD,EAAIyD,EAAEzD,GACtB1F,KAAKyJ,YACHP,EAAExD,EAAIyD,EAAEzD,EAAIwD,EAAExD,EAAIyD,EAAEzD,GACtB1F,KAAK6J,YACHX,EAAEvD,EAAIwD,EAAExD,EAAIuD,EAAEvD,EAAIwD,EAAExD,GACtB3F,KAAK2J,WACHT,EAAEvD,EAAIwD,EAAExD,EAAIuD,EAAEvD,EAAIwD,EAAExD,GACtB3F,KAAK+J,SAErB,CAAO,GAA4B,iBAAjB9J,UAAU,IAA2C,iBAAjBA,UAAU,GAAiB,CAC/E,IAAMyF,EAAIzF,UAAU,GAAI0F,EAAI1F,UAAU,GACtC,OAAID,KAAKwJ,YACA9D,EAAI1F,KAAKyJ,OAAS/D,EAAI1F,KAAK6J,OAASlE,EAAI3F,KAAK2J,OAAShE,EAAI3F,KAAK+J,MAC1E,CACF,CACF,GAAC,CAAA5J,IAAA,UAAAC,MACD,WACE,OAAOJ,KAAK+J,KACd,GAAC,CAAA5J,IAAA,cAAAC,MACD,WACE,GAAIJ,KAAKwJ,SACP,OAAO,EAET,IAAMe,EAAIvK,KAAKqJ,WACTmB,EAAIxK,KAAKsJ,YACf,OAAOzI,KAAKwH,KAAKkC,EAAIA,EAAIC,EAAIA,EAC/B,GAAC,CAAArK,IAAA,UAAAC,MACD,WACE,OAAOJ,KAAK6J,KACd,GAAC,CAAA1J,IAAA,kBAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,QACZ,GAAIzB,UAAU,aAAcgH,EAAY,CACtC,IAAMoD,EAAIpK,UAAU,GACpBD,KAAKyK,gBAAgBJ,EAAE3E,EAAG2E,EAAE1E,EAC7B,MAAM,GAAI1F,UAAU,aAAcmJ,EAAU,CAC3C,IAAM7B,EAAQtH,UAAU,GACxB,GAAIsH,EAAMiC,SACR,OAAO,KAELxJ,KAAKwJ,UACPxJ,KAAK6J,MAAQtC,EAAMuC,UACnB9J,KAAKyJ,MAAQlC,EAAMmC,UACnB1J,KAAK+J,MAAQxC,EAAMyC,UACnBhK,KAAK2J,MAAQpC,EAAMqC,YAEfrC,EAAMsC,MAAQ7J,KAAK6J,QACrB7J,KAAK6J,MAAQtC,EAAMsC,OAEjBtC,EAAMkC,MAAQzJ,KAAKyJ,QACrBzJ,KAAKyJ,MAAQlC,EAAMkC,OAEjBlC,EAAMwC,MAAQ/J,KAAK+J,QACrB/J,KAAK+J,MAAQxC,EAAMwC,OAEjBxC,EAAMoC,MAAQ3J,KAAK2J,QACrB3J,KAAK2J,MAAQpC,EAAMoC,OAGzB,OACK,GAAyB,IAArB1J,UAAUyB,OAAc,CACjC,IAAMgE,EAAIzF,UAAU,GAAI0F,EAAI1F,UAAU,GAClCD,KAAKwJ,UACPxJ,KAAK6J,MAAQnE,EACb1F,KAAKyJ,MAAQ/D,EACb1F,KAAK+J,MAAQpE,EACb3F,KAAK2J,MAAQhE,IAETD,EAAI1F,KAAK6J,QACX7J,KAAK6J,MAAQnE,GAEXA,EAAI1F,KAAKyJ,QACXzJ,KAAKyJ,MAAQ/D,GAEXC,EAAI3F,KAAK+J,QACX/J,KAAK+J,MAAQpE,GAEXA,EAAI3F,KAAK2J,QACX3J,KAAK2J,MAAQhE,GAGnB,CACF,GAAC,CAAAxF,IAAA,YAAAC,MACD,WACE,GAAIJ,KAAKwJ,SAAU,OAAO,EAC1B,IAAMe,EAAIvK,KAAKqJ,WACTmB,EAAIxK,KAAKsJ,YACf,OAAIiB,EAAIC,EAAUD,EACXC,CACT,GAAC,CAAArK,IAAA,WAAAC,MACD,WACE,OAAIJ,KAAKwJ,SACA,EAEFxJ,KAAKyJ,MAAQzJ,KAAK6J,KAC3B,GAAC,CAAA1J,IAAA,YAAAC,MACD,SAAU2H,GACR,IAAMkC,EAAMlC,EACZ,OAAI/H,KAAKwJ,SACHS,EAAIT,SAAiB,GACjB,EAEJS,EAAIT,SAAiB,EAEvBxJ,KAAK6J,MAAQI,EAAIJ,OAAe,EAChC7J,KAAK6J,MAAQI,EAAIJ,MAAc,EAC/B7J,KAAK+J,MAAQE,EAAIF,OAAe,EAChC/J,KAAK+J,MAAQE,EAAIF,MAAc,EAC/B/J,KAAKyJ,MAAQQ,EAAIR,OAAe,EAChCzJ,KAAKyJ,MAAQQ,EAAIR,MAAc,EAC/BzJ,KAAK2J,MAAQM,EAAIN,OAAe,EAChC3J,KAAK2J,MAAQM,EAAIN,MAAc,EAC5B,CACT,GAAC,CAAAxJ,IAAA,YAAAC,MACD,SAAUsK,EAAQC,GAChB,GAAI3K,KAAKwJ,SACP,OAAO,KAETxJ,KAAK4K,KAAK5K,KAAK8J,UAAYY,EAAQ1K,KAAK0J,UAAYgB,EAAQ1K,KAAKgK,UAAYW,EAAQ3K,KAAK4J,UAAYe,EACxG,GAAC,CAAAxK,IAAA,OAAAC,MACD,WACE,OAAO,IAAIgJ,EAASpJ,KACtB,GAAC,CAAAG,IAAA,WAAAC,MACD,WACE,MAAO,OAASJ,KAAK6J,MAAQ,MAAQ7J,KAAKyJ,MAAQ,KAAOzJ,KAAK+J,MAAQ,MAAQ/J,KAAK2J,MAAQ,GAC7F,GAAC,CAAAxJ,IAAA,YAAAC,MACD,WACEJ,KAAK6J,MAAQ,EACb7J,KAAKyJ,OAAS,EACdzJ,KAAK+J,MAAQ,EACb/J,KAAK2J,OAAS,CAChB,GAAC,CAAAxJ,IAAA,WAAAC,MACD,SAASmH,GACP,SAAIvH,KAAKwJ,WAAYjC,EAAMiC,YAGpBjC,EAAMsC,MAAQ7J,KAAKyJ,OAASlC,EAAMkC,MAAQzJ,KAAK6J,OAAStC,EAAMwC,MAAQ/J,KAAK2J,OAASpC,EAAMoC,MAAQ3J,KAAK+J,MAChH,GAAC,CAAA5J,IAAA,YAAAC,MACD,WACE,OAAIJ,KAAKwJ,SACA,EAEFxJ,KAAK2J,MAAQ3J,KAAK+J,KAC3B,GAAC,CAAA5J,IAAA,YAAAC,MACD,WACE,GAAIJ,KAAKwJ,SAAU,OAAO,EAC1B,IAAMe,EAAIvK,KAAKqJ,WACTmB,EAAIxK,KAAKsJ,YACf,OAAIiB,EAAIC,EAAUD,EACXC,CACT,GAAC,CAAArK,IAAA,WAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OAAc,CAC1B,IAAMmJ,EAAW5K,UAAU,GAC3BD,KAAK8K,SAASD,EAAUA,EAC1B,MAAO,GAAyB,IAArB5K,UAAUyB,OAAc,CACjC,IAAMqJ,EAAS9K,UAAU,GAAI+K,EAAS/K,UAAU,GAChD,GAAID,KAAKwJ,SAAU,OAAO,KAC1BxJ,KAAK6J,OAASkB,EACd/K,KAAKyJ,OAASsB,EACd/K,KAAK+J,OAASiB,EACdhL,KAAK2J,OAASqB,GACVhL,KAAK6J,MAAQ7J,KAAKyJ,OAASzJ,KAAK+J,MAAQ/J,KAAK2J,QAAO3J,KAAKiL,WAC/D,CACF,GAAC,CAAA9K,IAAA,WAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OAAc,CAC1B,GAAIzB,UAAU,aAAcmJ,EAAU,CACpC,IAAM7B,EAAQtH,UAAU,GACxB,OAAOD,KAAKsK,OAAO/C,EACpB,CAAM,GAAItH,UAAU,aAAcgH,EAAY,CAC7C,IAAMoD,EAAIpK,UAAU,GACpB,OAAOD,KAAKsK,OAAOD,EACrB,CACF,MAAO,GAAyB,IAArBpK,UAAUyB,OAAc,CACjC,IAAMgE,EAAIzF,UAAU,GAAI0F,EAAI1F,UAAU,GACtC,OAAOD,KAAKsK,OAAO5E,EAAGC,EACxB,CACF,GAAC,CAAAxF,IAAA,SAAAC,MACD,WACE,OAAIJ,KAAKwJ,SAAiB,KACnB,IAAIvC,GAAYjH,KAAK8J,UAAY9J,KAAK0J,WAAa,GAAM1J,KAAKgK,UAAYhK,KAAK4J,WAAa,EACrG,GAAC,CAAAzJ,IAAA,OAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OACZ1B,KAAKiL,iBACA,GAAyB,IAArBhL,UAAUyB,QACnB,GAAIzB,UAAU,aAAcgH,EAAY,CACtC,IAAMoD,EAAIpK,UAAU,GACpBD,KAAK4K,KAAKP,EAAE3E,EAAG2E,EAAE3E,EAAG2E,EAAE1E,EAAG0E,EAAE1E,EAC5B,MAAM,GAAI1F,UAAU,aAAcmJ,EAAU,CAC3C,IAAMa,EAAMhK,UAAU,GACtBD,KAAK6J,MAAQI,EAAIJ,MACjB7J,KAAKyJ,MAAQQ,EAAIR,MACjBzJ,KAAK+J,MAAQE,EAAIF,MACjB/J,KAAK2J,MAAQM,EAAIN,KACnB,OACK,GAAyB,IAArB1J,UAAUyB,OAAc,CACjC,IAAMwJ,EAAKjL,UAAU,GAAIkL,EAAKlL,UAAU,GACxCD,KAAK4K,KAAKM,EAAGxF,EAAGyF,EAAGzF,EAAGwF,EAAGvF,EAAGwF,EAAGxF,EACjC,MAAO,GAAyB,IAArB1F,UAAUyB,OAAc,CACjC,IAAMsC,EAAK/D,UAAU,GAAIgE,EAAKhE,UAAU,GAAImL,EAAKnL,UAAU,GAAIoL,EAAKpL,UAAU,GAC1E+D,EAAKC,GACPjE,KAAK6J,MAAQ7F,EACbhE,KAAKyJ,MAAQxF,IAEbjE,KAAK6J,MAAQ5F,EACbjE,KAAKyJ,MAAQzF,GAEXoH,EAAKC,GACPrL,KAAK+J,MAAQqB,EACbpL,KAAK2J,MAAQ0B,IAEbrL,KAAK+J,MAAQsB,EACbrL,KAAK2J,MAAQyB,EAEjB,CACF,GAAC,CAAAjL,IAAA,UAAAC,MACD,WACE,OAAOJ,KAAK2J,KACd,GAAC,CAAAxJ,IAAA,WAAAC,MACD,SAAS6J,GACP,GAAIjK,KAAKkK,WAAWD,GAAM,OAAO,EACjC,IAAI/B,EAAK,EACLlI,KAAKyJ,MAAQQ,EAAIJ,MAAO3B,EAAK+B,EAAIJ,MAAQ7J,KAAKyJ,MAAgBzJ,KAAK6J,MAAQI,EAAIR,QAAOvB,EAAKlI,KAAK6J,MAAQI,EAAIR,OAChH,IAAItB,EAAK,EAET,OADInI,KAAK2J,MAAQM,EAAIF,MAAO5B,EAAK8B,EAAIF,MAAQ/J,KAAK2J,MAAgB3J,KAAK+J,MAAQE,EAAIN,QAAOxB,EAAKnI,KAAK+J,MAAQE,EAAIN,OACrG,IAAPzB,EAAmBC,EACZ,IAAPA,EAAmBD,EAChBrH,KAAKwH,KAAKH,EAAKA,EAAKC,EAAKA,EAClC,GAAC,CAAAhI,IAAA,WAAAC,MACD,WACE,IAAIoE,EAAS,GAKb,OADAA,EAAS,IADTA,EAAS,IADTA,EAAS,IADTA,EAAS,GAAKA,EAASyC,EAAWqB,SAAStI,KAAK6J,QACzB5C,EAAWqB,SAAStI,KAAKyJ,QACzBxC,EAAWqB,SAAStI,KAAK+J,QACzB9C,EAAWqB,SAAStI,KAAK2J,MAElD,GAAC,CAAAxJ,IAAA,cAAAoI,IACD,WACE,MAAO,CAACnF,EAAYE,EACtB,IAAC,CAAA,CAAAnD,IAAA,eAAAC,MA/VD,WAKE,GAJAJ,KAAK6J,MAAQ,KACb7J,KAAKyJ,MAAQ,KACbzJ,KAAK+J,MAAQ,KACb/J,KAAK2J,MAAQ,KACY,IAArB1J,UAAUyB,OACZ1B,KAAK4K,YACA,GAAyB,IAArB3K,UAAUyB,QACnB,GAAIzB,UAAU,aAAcgH,EAAY,CACtC,IAAMoD,EAAIpK,UAAU,GACpBD,KAAK4K,KAAKP,EAAE3E,EAAG2E,EAAE3E,EAAG2E,EAAE1E,EAAG0E,EAAE1E,EAC5B,MAAM,GAAI1F,UAAU,aAAcmJ,EAAU,CAC3C,IAAMa,EAAMhK,UAAU,GACtBD,KAAK4K,KAAKX,EACZ,OACK,GAAyB,IAArBhK,UAAUyB,OAAc,CACjC,IAAMwJ,EAAKjL,UAAU,GAAIkL,EAAKlL,UAAU,GACxCD,KAAK4K,KAAKM,EAAGxF,EAAGyF,EAAGzF,EAAGwF,EAAGvF,EAAGwF,EAAGxF,EACjC,MAAO,GAAyB,IAArB1F,UAAUyB,OAAc,CACjC,IAAMsC,EAAK/D,UAAU,GAAIgE,EAAKhE,UAAU,GAAImL,EAAKnL,UAAU,GAAIoL,EAAKpL,UAAU,GAC9ED,KAAK4K,KAAK5G,EAAIC,EAAImH,EAAIC,EACxB,CACF,GAAC,CAAAlL,IAAA,aAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OAAc,CAC1B,IAAMwJ,EAAKjL,UAAU,GAAIkL,EAAKlL,UAAU,GAAIqL,EAAIrL,UAAU,GAC1D,OAAIqL,EAAE5F,IAAMwF,EAAGxF,EAAIyF,EAAGzF,EAAIwF,EAAGxF,EAAIyF,EAAGzF,IAAM4F,EAAE5F,IAAMwF,EAAGxF,EAAIyF,EAAGzF,EAAIwF,EAAGxF,EAAIyF,EAAGzF,IAAO4F,EAAE3F,IAAMuF,EAAGvF,EAAIwF,EAAGxF,EAAIuF,EAAGvF,EAAIwF,EAAGxF,IAAM2F,EAAE3F,IAAMuF,EAAGvF,EAAIwF,EAAGxF,EAAIuF,EAAGvF,EAAIwF,EAAGxF,EAIzJ,CAAO,GAAyB,IAArB1F,UAAUyB,OAAc,CACjC,IAAMwJ,EAAKjL,UAAU,GAAIkL,EAAKlL,UAAU,GAAIsL,EAAKtL,UAAU,GAAIuL,EAAKvL,UAAU,GAC1EwL,EAAO5K,KAAK6K,IAAIH,EAAG7F,EAAG8F,EAAG9F,GACzBiG,EAAO9K,KAAK+K,IAAIL,EAAG7F,EAAG8F,EAAG9F,GACzBmG,EAAOhL,KAAK6K,IAAIR,EAAGxF,EAAGyF,EAAGzF,GACzBoG,EAAOjL,KAAK+K,IAAIV,EAAGxF,EAAGyF,EAAGzF,GAC7B,QAAImG,EAAOF,OACPG,EAAOL,KACXA,EAAO5K,KAAK6K,IAAIH,EAAG5F,EAAG6F,EAAG7F,GACzBgG,EAAO9K,KAAK+K,IAAIL,EAAG5F,EAAG6F,EAAG7F,GACzBkG,EAAOhL,KAAK6K,IAAIR,EAAGvF,EAAGwF,EAAGxF,GACzBmG,EAAOjL,KAAK+K,IAAIV,EAAGvF,EAAGwF,EAAGxF,KACrBkG,EAAOF,MACPG,EAAOL,IAEb,CACF,IAAC,CAlD0B,GCGRM,EAAQ,WAC3B,SAAAA,IAAclM,OAAAkM,GACZA,EAASjM,aAAaC,MAAMC,KAAMC,UACpC,CAAC,OAAAC,EAAA6L,EAAA,CAAA,CAAA5L,IAAA,uBAAAC,MAED,WACE,OAAOJ,KAAKgM,gBAAkBD,EAASE,2BACzC,GAAC,CAAA9L,IAAA,aAAAC,MAED,WACE,OAAOJ,KAAKkM,QACd,GAAC,CAAA/L,IAAA,eAAAC,MAED,SAAayE,GACX,OAAO7E,IACT,GAAC,CAAAG,IAAA,UAAAC,MAED,WACE,OAAO,CACT,GAAC,CAAAD,IAAA,cAAAC,MAED,WACE,OAAO,CACT,GAAC,CAAAD,IAAA,cAAAC,MAED,SAAYmH,GACV,OAAOvH,OAASuH,GAASvH,KAAKmM,YAAY5E,EAAO,EACnD,GAAC,CAAApH,IAAA,kBAAAC,MAED,WACEJ,KAAKD,MAAMgM,EAASK,sBACtB,GAAC,CAAAjM,IAAA,wBAAAC,MAED,WACEJ,KAAKqM,UAAY,IACnB,GAAC,CAAAlM,IAAA,aAAAC,MAED,SAAWkM,GACT,OAAU,OAANA,GACGtM,KAAKuM,OAAOJ,YAAYG,EAAEC,OACnC,GAAC,CAAApM,IAAA,YAAAC,MAED,WACE,OAAO,CACT,GAAC,CAAAD,IAAA,mBAAAC,MAED,WACE,OAAO,CACT,GAAC,CAAAD,IAAA,YAAAC,MAED,WACE,IAAImH,EACJ,GAAyB,IAArBtH,UAAUyB,OAAc,CAC1B,IAAMqG,EAAI9H,UAAU,GAEpB,OADAsH,EAAQQ,EACJ/H,KAAKgM,gBAAkBzE,EAAMyE,cAAsBhM,KAAKgM,cAAgBzE,EAAMyE,cAE9EhM,KAAKwM,WAAajF,EAAMiF,UAAkB,EAE1CxM,KAAKwM,WAAmB,EAExBjF,EAAMiF,UAAkB,EAErBxM,KAAKyM,mBAAmB1E,EACjC,CAAO,GAAyB,IAArB9H,UAAUyB,OAAc,CACjC,IAAMqG,EAAI9H,UAAU,GAAUyM,EAAOzM,UAAU,GAE/C,OADAsH,EAAQQ,EACJ/H,KAAKgM,gBAAkBzE,EAAMyE,cAAsBhM,KAAKgM,cAAgBzE,EAAMyE,cAE9EhM,KAAKwM,WAAajF,EAAMiF,UAAkB,EAE1CxM,KAAKwM,WAAmB,EAExBjF,EAAMiF,UAAkB,EAErBxM,KAAKyM,mBAAmB1E,EAAG2E,EACpC,CACF,GAAC,CAAAvM,IAAA,cAAAC,MAED,WACE,OAAOJ,KAAK2M,SACd,GAAC,CAAAxM,IAAA,UAAAC,MAED,WACE,OAAOJ,KAAK4M,KACd,GAAC,CAAAzM,IAAA,cAAAC,MAED,WACE,OAAOJ,KAAK6M,aAAaC,WAAW9M,KAAK+M,sBAC3C,GAAC,CAAA5M,IAAA,6BAAAC,MAED,SAA2BkM,GACzB,GAAIA,EAAEN,gBAAkBD,EAASE,4BAA6B,MAAM,IAAIjJ,EAAyB,4DACnG,GAAC,CAAA7C,IAAA,QAAAC,MAED,SAAM8I,EAAGC,EAAGjF,GACV,OAAkB,IAAdA,EAAwBgF,EAAEtC,OAAOuC,GAE9BD,EAAE2B,SAAS1B,IAAMjF,CAC1B,GAAC,CAAA/D,IAAA,OAAAC,MAED,WACE,IAAM4M,EAAOhN,KAAKgN,OAElB,OADAA,EAAKC,YACED,CACT,GAAC,CAAA7M,IAAA,UAAAC,MAED,WACE,IAAM8M,EAAMlN,KAAKmN,kBAIjB,OAHqB,MAAjBnN,KAAKoN,WAAkBF,EAAIE,SAAWpN,KAAKoN,SAASJ,QAExDE,EAAIG,QAAQrN,KAAKsN,WACVJ,CACT,GAAC,CAAA/M,IAAA,OAAAC,MAED,WACE,IAAM4M,EAAOhN,KAAKuN,eAIlB,OAHAP,EAAKI,SAA6B,MAAlBpN,KAAKqM,UAAoB,KAAOrM,KAAKqM,UAAUW,OAC/DA,EAAKJ,MAAQ5M,KAAK4M,MAClBI,EAAKL,UAAY3M,KAAK2M,UACfK,CACT,GAAC,CAAA7M,IAAA,oBAAAC,MAED,WACE,OAAOJ,KAAKkM,SAASsB,mBACvB,GAAC,CAAArN,IAAA,sBAAAC,MAED,WAGE,OAFuB,OAAnBJ,KAAKqM,YAAoBrM,KAAKqM,UAAYrM,KAAKyN,2BAE5C,IAAIrE,EAASpJ,KAAKqM,UAC3B,GAAC,CAAAlM,IAAA,UAAAC,MAED,SAAQsN,GACN1N,KAAK4M,MAAQc,CACf,GAAC,CAAAvN,IAAA,cAAAC,MAED,SAAYuN,GACV3N,KAAK2M,UAAYgB,CACnB,GAAC,CAAAxN,IAAA,UAAAC,MAED,SAAQ8I,EAAGC,GAGT,IAFA,IAAM7E,EAAI4E,EAAE0E,WACNC,EAAI1E,EAAEyE,WACLtJ,EAAEwJ,WAAaD,EAAEC,WAAW,CACjC,IAAMC,EAAWzJ,EAAE0J,OACbC,EAAWJ,EAAEG,OACbE,EAAaH,EAASI,UAAUF,GACtC,GAAmB,IAAfC,EAAkB,OAAOA,CAC/B,CACA,OAAI5J,EAAEwJ,UAAkB,EAEpBD,EAAEC,WAAmB,EAElB,CACT,GAAC,CAAA3N,IAAA,WAAAC,MAED,WACE,OAAOJ,KAAK+M,sBAAsBzE,UACpC,GAAC,CAAAnI,IAAA,oBAAAC,MAED,SAAkBmH,GAChB,OAAOvH,KAAKoO,aAAe7G,EAAM6G,UACnC,GAAC,CAAAjO,IAAA,gCAAAC,MAED,WACE,OAAIJ,KAAKgM,gBAAkBD,EAASE,6BAA+BjM,KAAKgM,gBAAkBD,EAASsC,qBAAuBrO,KAAKgM,gBAAkBD,EAASuC,0BAA4BtO,KAAKgM,gBAAkBD,EAASwC,qBAGxN,GAAC,CAAApO,IAAA,cAAAoI,IAED,WACE,MAAO,CAACC,EAAWpF,EAAYE,EACjC,GAAC,CAAAnD,IAAA,WAAAC,MAED,WACE,OAAO2L,CACT,IAAC,CAAA,CAAA5L,IAAA,sBAAAC,MAED,SAA2BoO,GACzB,IAAK,IAAIlK,EAAI,EAAGA,EAAIkK,EAAW9M,OAAQ4C,IACrC,IAAKkK,EAAWlK,GAAGkI,UAAW,OAAO,EAEvC,OAAO,CACT,GAAC,CAAArM,IAAA,kBAAAC,MAED,SAAuBqO,GACrB,IAAK,IAAInK,EAAI,EAAGA,EAAImK,EAAM/M,OAAQ4C,IAChC,GAAiB,OAAbmK,EAAMnK,GAAa,OAAO,EAEhC,OAAO,CACT,IAAC,CA/L0B,GAiM7ByH,EAASjM,aAAe,SAAS4O,GAC1BA,IACL1O,KAAKqM,UAAY,KACjBrM,KAAK2M,UAAY,KACjB3M,KAAKkM,SAAWwC,EAChB1O,KAAK4M,MAAQ8B,EAAQpB,UACvB,EACAvB,EAAS4C,eAAiB,EAC1B5C,EAASsC,oBAAsB,EAC/BtC,EAAS6C,oBAAsB,EAC/B7C,EAAS8C,oBAAsB,EAC/B9C,EAASuC,yBAA2B,EACpCvC,EAAS+C,iBAAmB,EAC5B/C,EAASwC,sBAAwB,EACjCxC,EAASE,4BAA8B,EACvCF,EAASgD,eAAiB,QAC1BhD,EAASiD,oBAAsB,aAC/BjD,EAASkD,oBAAsB,aAC/BlD,EAASmD,oBAAsB,aAC/BnD,EAASoD,yBAA2B,kBACpCpD,EAASqD,iBAAmB,UAC5BrD,EAASsD,sBAAwB,eACjCtD,EAASuD,4BAA8B,qBACvCvD,EAASK,sBAAwB,CAC/B,eAAImD,GACF,MAAO,CAACrM,EACT,EACDsM,OAAAA,SAAOrM,GACLA,EAAKsM,uBACP,GCpOmF,IAChEC,EAAQ,WAAA,SAAAA,IAAA7P,OAAA6P,EAAA,CAAA,OAAAxP,EAAAwP,EAAA,KAAA,CAAA,CAAAvP,IAAA,mBAAAC,MAC3B,SAAwBuP,GACtB,OAAQA,GACR,KAAKD,EAASE,SACZ,MAAO,IACT,KAAKF,EAASG,SACZ,MAAO,IACT,KAAKH,EAASI,SACZ,MAAO,IACT,KAAKJ,EAASK,KACZ,MAAO,IAET,MAAM,IAAI/M,EAAyB,2BAA6B2M,EAClE,IAAC,CAb0B,GAe7BD,EAASI,SAAW,EACpBJ,EAASG,SAAW,EACpBH,EAASE,SAAW,EACpBF,EAASK,MAAQ,ECnBjB,IAGqBC,EAAU,WAAA,OAAA9P,GAAA,SAAA8P,IAAAnQ,OAAAmQ,EAAA,GAAA,CAAA,CAAA7P,IAAA,MAAAC,MAO7B,WAAM,GACN,CAAAD,IAAA,SAAAC,MAOA,WAAS,GACT,CAAAD,IAAA,UAAAC,MAIA,WAAU,GACV,CAAAD,IAAA,WAAAC,MAIA,WAAW,GACX,CAAAD,IAAA,OAAAC,MAIA,WAAO,GACP,CAAAD,IAAA,UAAAC,MAIA,WAAU,GACV,CAAAD,IAAA,SAAAC,MAMA,WAAS,IAAG,CA1CiB,GCDV6P,WAAsBhN,GACzC,SAAAgN,EAAY1N,GAAS,IAAAC,EAEmC,OAFnC3C,OAAAoQ,IACnBzN,EAAAC,EAAAwN,KAAAA,GAAM1N,KACDG,KAAOC,OAAOC,KAAK,CAAEqN,uBAAAA,IAA0B,GAAEzN,CACxD,CAAC,OAAAK,EAAAoN,EAAAhN,GAAA/C,EAAA+P,EAAA,EAJiD5N,GCA/B6N,WAA6BjN,GAChD,SAAAiN,EAAY3N,GAAS,IAAAC,EAE0C,OAF1C3C,OAAAqQ,IACnB1N,EAAAC,EAAAyN,KAAAA,GAAM3N,KACDG,KAAOC,OAAOC,KAAK,CAAEsN,8BAAAA,IAAiC,GAAE1N,CAC/D,CAAC,OAAAK,EAAAqN,EAAAjN,GAAA/C,EAAAgQ,EAAA,EAJwD7N,GCOtC8N,WAAGC,GAAA,SAAAD,IAAA,OAAAtQ,OAAAsQ,GAAA1N,EAAAzC,KAAAmQ,EAAAlQ,UAAA,CAAA,OAAA4C,EAAAsN,EAAAC,GAAAlQ,EAAAiQ,EAAA,CAAA,CAAAhQ,IAAA,WAAAC,MAQtB,WAAW,IAAG,EARiB4P,GCDZK,WAAOC,GAC1B,SAAAD,EAAYtI,GAAG,IAAAvF,EAIG,OAJH3C,OAAAwQ,IACb7N,EAAAC,EAAAzC,KAAAqQ,IACKE,IAAM,IAAIC,IACXzI,aAAaiI,GACfxN,EAAKiO,OAAO1I,GAAEvF,CAClB,CAAC,OAAAK,EAAAwN,EAAAC,GAAApQ,EAAAmQ,EAAA,CAAA,CAAAlQ,IAAA,WAAAC,MAED,SAAS2H,GACP,IAAMO,EAAWP,EAAEO,SAAWP,EAAEO,WAAaP,EAC7C,QAAI/H,KAAKuQ,IAAIG,IAAIpI,EAGnB,GAAC,CAAAnI,IAAA,MAAAC,MAED,SAAI2H,GACF,IAAMO,EAAWP,EAAEO,SAAWP,EAAEO,WAAaP,EAC7C,OAAI/H,KAAKuQ,IAAIG,IAAIpI,MAERtI,KAAKuQ,IAAII,IAAIrI,EAAUP,EAClC,GAAC,CAAA5H,IAAA,SAAAC,MAED,SAAOoH,GAAG,IACSoJ,EADTC,EAAAC,EACQtJ,GAAC,IAAjB,IAAAqJ,EAAAE,MAAAH,EAAAC,EAAAhM,KAAAmM,MACE,CAAA,IADShJ,EAAC4I,EAAAxQ,MACVJ,KAAKiR,IAAIjJ,EAAC,CAAC,CAAA,MAAAkJ,GAAAL,EAAA7I,EAAAkJ,EAAA,CAAA,QAAAL,EAAAjL,GAAA,CACb,OAAO,CACT,GAAC,CAAAzF,IAAA,SAAAC,MAED,WACE,MAAM,IAAI8P,CACZ,GAAC,CAAA/P,IAAA,OAAAC,MAED,WACE,OAAOJ,KAAKuQ,IAAIY,IAClB,GAAC,CAAAhR,IAAA,UAAAC,MAED,WACE,OAAyB,IAAlBJ,KAAKuQ,IAAIY,IAClB,GAAC,CAAAhR,IAAA,UAAAC,MAED,WACE,OAAOgR,MAAMC,KAAKrR,KAAKuQ,IAAIe,SAC7B,GAAC,CAAAnR,IAAA,WAAAC,MAED,WACE,OAAO,IAAImR,EAASvR,KAAKuQ,IAC3B,GAAC,CAAApQ,IAEAqR,OAAO5D,SAAQxN,MAAhB,WACE,OAAOJ,KAAKuQ,GACd,IAAC,EAlDkCJ,GAqD/BoB,EAAQ,WAMX,OAAArR,GALD,SAAAqR,EAAYhB,GAAK1Q,OAAA0R,GACfvR,KAAK4N,SAAW2C,EAAIe,SACpB,IAAAG,EAAwBzR,KAAK4N,SAASI,OAA9BgD,EAAIS,EAAJT,KAAM5Q,EAAKqR,EAALrR,MACdJ,KAAKgR,KAAOA,EACZhR,KAAKI,MAAQA,CACf,GAAC,CAAA,CAAAD,IAAA,OAAAC,MAED,WACE,GAAIJ,KAAKgR,KACP,MAAM,IAAIf,EACZ,IAAMyB,EAAU1R,KAAKI,MACrBuR,EAAwB3R,KAAK4N,SAASI,OAA9BgD,EAAIW,EAAJX,KAAM5Q,EAAKuR,EAALvR,MAGd,OAFAJ,KAAKgR,KAAOA,EACZhR,KAAKI,MAAQA,EACNsR,CACT,GAAC,CAAAvR,IAAA,UAAAC,MAED,WACE,OAAQJ,KAAKgR,IACf,GAAC,CAAA7Q,IAAA,SAAAC,MAED,WACE,MAAM,IAAI8P,CACZ,IAAC,CAxBW,GC7DO0B,EAAQ,WAAA,SAAAA,IAAA/R,OAAA+R,EAAA,CAAA,OAAA1R,EAAA0R,EAAA,KAAA,CAAA,CAAAzR,IAAA,WAAAC,MAC3B,SAAgByR,GACd,OAAIA,IAAaD,EAASE,KAAaF,EAASG,MAC5CF,IAAaD,EAASG,MAAcH,EAASE,KAC1CD,CACT,IAAC,CAL0B,GAO7BD,EAASI,GAAK,EACdJ,EAASE,KAAO,EAChBF,EAASG,MAAQ,ECTwB,IAEpBE,YAAmBhP,GACtC,SAAAgP,EAAY1P,GAAS,IAAAC,EAEgC,OAFhC3C,OAAAoS,IACnBzP,EAAAC,EAAAwP,KAAAA,GAAM1P,KACDG,KAAOC,OAAOC,KAAK,CAAEqP,oBAAAA,IAAuB,GAAEzP,CACrD,CAAC,OAAAK,EAAAoP,EAAAhP,GAAA/C,EAAA+R,EAAA,EAJ8C5P,GCA5B6P,YAAyBjP,GAC5C,SAAAiP,EAAY3P,GAAS,IAAAC,EAEsC,OAFtC3C,OAAAqS,IACnB1P,EAAAC,EAAAyP,KAAAA,GAAM3P,KACDG,KAAOC,OAAOC,KAAK,CAAEsP,0BAAAA,IAA6B,GAAE1P,CAC3D,CAAC,OAAAK,EAAAqP,EAAAjP,GAAA/C,EAAAgS,EAAA,EAJoD7P,GCGlC8P,YAAI/B,GAAA,SAAA+B,IAAA,OAAAtS,OAAAsS,GAAA1P,EAAAzC,KAAAmS,EAAAlS,UAAA,CAAA,OAAA4C,EAAAsP,EAAA/B,GAAAlQ,EAAAiS,EAAA,CAAA,CAAAhS,IAAA,MAAAC,MAMvB,WAAM,GACN,CAAAD,IAAA,MAAAC,MAOA,WAAM,GACN,CAAAD,IAAA,UAAAC,MAIA,WAAU,IAAG,EAnBmB4P,GCEboC,YAAKC,GACxB,SAAAD,IAAc,IAAA5P,EAEG,OAFH3C,OAAAuS,IACZ5P,EAAAC,EAAAzC,KAAAoS,IACK3D,MAAQ,GAAEjM,CACjB,CAAC,OAAAK,EAAAuP,EAAAC,GAAAnS,EAAAkS,EAAA,CAAA,CAAAjS,IAAA,MAAAC,MAED,SAAI4H,GAEF,OADAhI,KAAKyO,MAAM6D,KAAKtK,IACT,CACT,GAAC,CAAA7H,IAAA,MAAAC,MAED,SAAImS,GACF,GAAIA,EAAQ,GAAKA,GAASvS,KAAKmR,OAC7B,MAAM,IAAIe,GACZ,OAAOlS,KAAKyO,MAAM8D,EACpB,GAEA,CAAApS,IAAA,OAAAC,MAKA,SAAK4H,GAEH,OADAhI,KAAKyO,MAAM6D,KAAKtK,GACTA,CACT,GAEA,CAAA7H,IAAA,MAAAC,MAIA,WACE,GAA0B,IAAtBJ,KAAKyO,MAAM/M,OACb,MAAM,IAAIuQ,GACZ,OAAOjS,KAAKyO,MAAM+D,KACpB,GAEA,CAAArS,IAAA,OAAAC,MAKA,WACE,GAA0B,IAAtBJ,KAAKyO,MAAM/M,OACb,MAAM,IAAIuQ,GACZ,OAAOjS,KAAKyO,MAAMzO,KAAKyO,MAAM/M,OAAS,EACxC,GAEA,CAAAvB,IAAA,QAAAC,MAKA,WACE,OAA6B,IAAtBJ,KAAKyO,MAAM/M,MACpB,GAEA,CAAAvB,IAAA,UAAAC,MAGA,WACE,OAAOJ,KAAKyS,OACd,GAEA,CAAAtS,IAAA,SAAAC,MAcA,SAAO2H,GACL,OAAO/H,KAAKyO,MAAMiE,QAAQ3K,EAC5B,GAEA,CAAA5H,IAAA,OAAAC,MAGA,WACE,OAAOJ,KAAKyO,MAAM/M,MACpB,GAEA,CAAAvB,IAAA,UAAAC,MAGA,WACE,OAAOJ,KAAKyO,MAAMkE,OACpB,IAAC,EA9FgCR,ICPpB,SAAAS,GAAS7K,EAAGzD,GACzB,OAAOyD,EAAEwH,aAAexH,EAAEwH,YAAYmD,QAAQpO,IAAM,CACtD,KCFqBuO,GAAY,WAG9B,OAAA3S,GAFD,SAAA2S,EAAYC,GAAKjT,OAAAgT,GACf7S,KAAK8S,IAAMA,CACb,GAAC,CAAA,CAAA3S,IAAA,SAAAC,MACD,SAAO4H,GACLhI,KAAK8S,KAAO9K,CACd,GAAC,CAAA7H,IAAA,YAAAC,MACD,SAAUkE,EAAGkD,GACXxH,KAAK8S,IAAM9S,KAAK8S,IAAIC,OAAO,EAAGzO,GAAKkD,EAAIxH,KAAK8S,IAAIC,OAAOzO,EAAI,EAC7D,GAAC,CAAAnE,IAAA,WAAAC,MACD,WACE,OAAOJ,KAAK8S,GACd,IAAC,CAZ8B,GCAZE,GAAO,WAC1B,SAAAA,EAAY5S,GAAOP,OAAAmT,GACjBhT,KAAKI,MAAQA,CACf,CAAC,OAAAF,EAAA8S,EAAA,CAAA,CAAA7S,IAAA,WAAAC,MAED,WACE,OAAOJ,KAAKI,KACd,GAAC,CAAAD,IAAA,YAAAC,MAED,SAAU2H,GACR,OAAI/H,KAAKI,MAAQ2H,GACP,EACN/H,KAAKI,MAAQ2H,EACR,EACF,CACT,IAAC,CAAA,CAAA5H,IAAA,UAAAC,MAED,SAAesF,EAAGC,GAChB,OAAID,EAAIC,GACE,EACND,EAAIC,EACC,EACF,CACT,GAAC,CAAAxF,IAAA,QAAAC,MAED,SAAayE,GACX,OAAOC,OAAOF,MAAMC,EACtB,GAAC,CAAA1E,IAAA,UAAAC,MAED,SAAeA,GACb,OAAO,IAAI4S,EAAQ5S,EACrB,IAAC,CA/ByB,GCAP6S,GAAS,WAAA,OAAA/S,GAAA,SAAA+S,IAAApT,OAAAoT,EAAA,GAAA,KAAA,CAAA,CAAA9S,IAAA,eAAAC,MAC5B,SAAoBoH,GAClB,OAASA,GAAK,IAAMA,GAAK,GAAY,MAANA,CACjC,GAAC,CAAArH,IAAA,cAAAC,MAED,SAAmBoH,GACjB,OAAOA,EAAE0L,aACX,IAAC,CAP2B,GCOTC,GAAE,WACrB,SAAAA,IAActT,OAAAsT,GACZA,EAAGrT,aAAaC,MAAMC,KAAMC,UAC9B,CAAC,OAAAC,EAAAiT,EAAA,CAAA,CAAAhT,IAAA,KAAAC,MAmID,SAAGuF,GACD,OAAO3F,KAAKoT,IAAMzN,EAAEyN,KAAOpT,KAAKoT,MAAQzN,EAAEyN,KAAOpT,KAAKqT,KAAO1N,EAAE0N,GACjE,GAAC,CAAAlT,IAAA,2BAAAC,MACD,SAAyBkT,EAAoBC,GAC3C,IAAI5N,EAAI3F,KAAKc,MACT0S,EAAML,EAAGI,UAAU5N,EAAEyN,KACnBK,EAAQN,EAAGO,IAAIhQ,IAAI8P,IACzB7N,EAAIA,EAAEgO,OAAOF,IACPG,GAAGT,EAAGO,MACV/N,EAAIA,EAAEgO,OAAOR,EAAGO,KAChBF,GAAO,GACE7N,EAAEkO,GAAGV,EAAGW,OACjBnO,EAAIA,EAAEoO,SAASZ,EAAGO,KAClBF,GAAO,GAKT,IAHA,IAAMQ,EAAkBR,EAAM,EACxBS,EAAM,IAAIpB,GACVqB,EAAYf,EAAGgB,iBAAmB,EAC/B7P,EAAI,EAAGA,GAAK4P,EAAW5P,IAAK,CAC/BgP,GAAsBhP,IAAM0P,GAC9BC,EAAIG,OAAO,KAEb,IAAMC,EAAQxT,KAAKyT,MAAM3O,EAAEyN,KAE3B,GAAIiB,EAAQ,EACV,MAEF,IAAIE,GAAa,EACbC,EAAY,EACZH,EAAQ,GACVE,GAAa,EACbC,EAAY,KAEZA,EAAY,IAAMH,EAEpBJ,EAAIG,OAAOI,GACX7O,EAAIA,EAAE8O,SAAStB,EAAGuB,QAAQL,IAAQN,SAASZ,EAAGO,KAC1Ca,GAAY5O,EAAEgP,QAAQxB,EAAGO,KAC7B,IAAIkB,GAA2B,EACzBC,EAAS1B,EAAGI,UAAU5N,EAAEyN,KAE9B,GADIyB,EAAS,GAAKhU,KAAKC,IAAI+T,IAAWX,EAAY5P,IAAGsQ,GAA2B,IAC3EA,EAA0B,KACjC,CAEA,OADArB,EAAU,GAAKC,EACRS,EAAIa,UACb,GAAC,CAAA3U,IAAA,MAAAC,MACD,WACE,OAAOJ,KAAK+T,SAAS/T,KACvB,GAAC,CAAAG,IAAA,cAAAC,MACD,WACE,OAAOJ,KAAKoT,IAAMpT,KAAKqT,GACzB,GAAC,CAAAlT,IAAA,WAAAC,MACD,WACE,GAAIH,UAAU,aAAckT,EAAI,CAC9B,IAAMxN,EAAI1F,UAAU,GACpB,OAAOD,KAAKiR,IAAItL,EAAEoP,SACnB,CAAM,GAA4B,iBAAjB9U,UAAU,GAAiB,CAC3C,IAAM0F,EAAI1F,UAAU,GACpB,OAAOD,KAAKiR,KAAKtL,EACnB,CACF,GAAC,CAAAxF,IAAA,SAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,QAAgBzB,UAAU,aAAckT,EAAI,CACxD,IAAMxN,EAAI1F,UAAU,GACpB,OAAOD,KAAKoT,MAAQzN,EAAEyN,KAAOpT,KAAKqT,MAAQ1N,EAAE0N,GAC9C,CACF,GAAC,CAAAlT,IAAA,SAAAC,MACD,WACE,OAAoB,IAAbJ,KAAKoT,KAA4B,IAAbpT,KAAKqT,GAClC,GAAC,CAAAlT,IAAA,eAAAC,MACD,WACE,GAAIH,UAAU,aAAckT,EAAI,CAC9B,IAAMxN,EAAI1F,UAAU,GACpB,OAAID,KAAK4E,QAAgB5E,KAClBA,KAAK2U,SAAShP,EAAEyN,KAAMzN,EAAE0N,IAChC,CAAM,GAA4B,iBAAjBpT,UAAU,GAAiB,CAC3C,IAAM0F,EAAI1F,UAAU,GACpB,OAAID,KAAK4E,QAAgB5E,KAClBA,KAAK2U,SAAShP,EAAG,EAC1B,CACF,GAAC,CAAAxF,IAAA,yBAAAC,MACD,WACE,OAAIJ,KAAKgV,SAAiB,MACtBhV,KAAK4E,QAAgB,OAClB,IACT,GAAC,CAAAzE,IAAA,MAAAC,MACD,SAAIsF,GACF,OAAI1F,KAAKiV,GAAGvP,GACH1F,KAEA0F,CAEX,GAAC,CAAAvF,IAAA,aAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OAAc,CAC1B,GAAIzB,UAAU,aAAckT,EAAI,CAC9B,IAAMxN,EAAI1F,UAAU,GACpB,OAAOD,KAAKkV,WAAWvP,EAAEyN,IAAKzN,EAAE0N,IACjC,CAAM,GAA4B,iBAAjBpT,UAAU,GAAiB,CAC3C,IAAM0F,EAAI1F,UAAU,GACpB,OAAOD,KAAKkV,WAAWvP,EAAG,EAC5B,CACF,MAAO,GAAyB,IAArB1F,UAAUyB,OAAc,CACjC,IACeyT,EAAsBC,EAAWC,EAAoBC,EAD9DC,EAAMtV,UAAU,GAAIuV,EAAMvV,UAAU,GACtCwV,EAAK,KAAiBC,EAAK,KAA2BlO,EAAI,KAAgBmO,EAAI,KAgBlF,OAfAN,EAAIrV,KAAKoT,IAAMmC,EAUfI,GANAF,GAHAjO,EAAI2L,EAAGyC,MAAQP,IACfI,EAAKjO,EAAI6N,KAMTK,GALAC,EAAIxC,EAAGyC,MAAQL,IAGfG,EAAKC,EAAIJ,KACTD,EAAID,EAAIE,GAGUE,GADlBL,EAAKG,EAAMG,IAJXP,EAAKE,EAAII,GAKwBC,EAAKP,EAAKC,EAE3CO,EAAIN,GADJ7N,GAAKxH,KAAKoT,IAAMkC,EAAIK,EAAI3V,KAAKqT,IAAMgC,EAAIG,GAAOD,GAE9CvV,KAAKoT,IAAMuC,EACX3V,KAAKqT,IAAMgC,EAAIM,EAAInO,EACZxH,IACT,CACF,GAAC,CAAAG,IAAA,OAAAC,MACD,WACE,MAAO,MAAQJ,KAAKoT,IAAM,KAAOpT,KAAKqT,IAAM,GAC9C,GAAC,CAAAlT,IAAA,SAAAC,MACD,WACE,GAAIH,UAAU,aAAckT,EAAI,CAC9B,IACegC,EAAsBC,EAAWC,EAAoBC,EAD9D3P,EAAI1F,UAAU,GAChBwV,EAAK,KAAiBC,EAAK,KAA2BlO,EAAI,KAAgBmO,EAAI,KAgBlF,OAVAR,GALAE,EAAIrV,KAAKoT,IAAMzN,EAAEyN,MAIjBqC,GAHAjO,EAAI2L,EAAGyC,MAAQP,IACfI,EAAKjO,EAAI6N,IAQTM,EAAIF,GAFJC,GALAC,EAAIxC,EAAGyC,MAAQjQ,EAAEyN,MAGjBsC,EAAKC,EAAIhQ,EAAEyN,OACXkC,EAAID,EAAI1P,EAAEyN,KAGQqC,GADlBL,EAAKzP,EAAEyN,IAAMsC,GACeP,EAAKO,EAAKP,EAAKC,EAKpC,IAAIjC,EAHXwC,EAAIN,GADJ7N,GAAKxH,KAAKoT,IAAMkC,EAAIK,EAAI3V,KAAKqT,IAAMgC,EAAI1P,EAAE0N,KAAO1N,EAAEyN,KAGtCiC,EAAIM,EAAInO,EAErB,CAAM,GAA4B,iBAAjBvH,UAAU,GAAiB,CAC3C,IAAM0F,EAAI1F,UAAU,GACpB,OAAIwE,EAAOG,MAAMe,GAAWwN,EAAG0C,YACxB1C,EAAGnG,KAAKhN,MAAMkV,WAAWvP,EAAG,EACrC,CACF,GAAC,CAAAxF,IAAA,KAAAC,MACD,SAAGuF,GACD,OAAO3F,KAAKoT,IAAMzN,EAAEyN,KAAOpT,KAAKoT,MAAQzN,EAAEyN,KAAOpT,KAAKqT,KAAO1N,EAAE0N,GACjE,GAAC,CAAAlT,IAAA,MAAAC,MACD,SAAI2F,GACF,GAAY,IAARA,EAAa,OAAOoN,EAAGuB,QAAQ,GACnC,IAAIoB,EAAI,IAAI3C,EAAGnT,MACX+Q,EAAIoC,EAAGuB,QAAQ,GACf7P,EAAIhE,KAAKC,IAAIiF,GACjB,GAAIlB,EAAI,EACN,KAAOA,EAAI,GACLA,EAAI,GAAM,GACZkM,EAAEgF,aAAaD,IAEjBjR,GAAK,GACG,IAAGiR,EAAIA,EAAEE,YAGnBjF,EAAI+E,EAEN,OAAI/P,EAAM,EAAUgL,EAAEkF,aACflF,CACT,GAAC,CAAA5Q,IAAA,OAAAC,MACD,WACE,GAAIJ,KAAK4E,QAAS,OAAOuO,EAAGxO,IAC5B,IAAMuR,EAAMrV,KAAKsV,KAAKnW,KAAKoT,KACvBgD,EAAM,EAIV,OAHIF,IAAQlW,KAAKoT,MACfgD,EAAMvV,KAAKsV,KAAKnW,KAAKqT,MAEhB,IAAIF,EAAG+C,EAAKE,EACrB,GAAC,CAAAjW,IAAA,YAAAC,MACD,SAAU2H,GACR,IAAMR,EAAQQ,EACd,OAAI/H,KAAKoT,IAAM7L,EAAM6L,KAAa,EAC9BpT,KAAKoT,IAAM7L,EAAM6L,IAAY,EAC7BpT,KAAKqT,IAAM9L,EAAM8L,KAAa,EAC9BrT,KAAKqT,IAAM9L,EAAM8L,IAAY,EAC1B,CACT,GAAC,CAAAlT,IAAA,OAAAC,MACD,WACE,OAAIJ,KAAK4E,QAAgB5E,KACXA,KAAKiR,IAAI,IACVxN,OACf,GAAC,CAAAtD,IAAA,WAAAC,MACD,WACE,GAAIH,UAAU,aAAckT,EAAI,CAC9B,IAAM/S,EAAQH,UAAU,GAExB,OADAD,KAAK4K,KAAKxK,GACHJ,IACR,CAAM,GAA4B,iBAAjBC,UAAU,GAAiB,CAC3C,IAAMG,EAAQH,UAAU,GAExB,OADAD,KAAK4K,KAAKxK,GACHJ,IACT,CACF,GAAC,CAAAG,IAAA,MAAAC,MACD,SAAIsF,GACF,OAAI1F,KAAKqW,GAAG3Q,GACH1F,KAEA0F,CAEX,GAAC,CAAAvF,IAAA,OAAAC,MACD,WACE,GAAIJ,KAAKgV,SAAU,OAAO7B,EAAGuB,QAAQ,GACrC,GAAI1U,KAAKsW,aACP,OAAOnD,EAAGxO,IAEZ,IAAMe,EAAI,EAAM7E,KAAKwH,KAAKrI,KAAKoT,KACzBmD,EAAKvW,KAAKoT,IAAM1N,EAChB8Q,EAAOrD,EAAGuB,QAAQ6B,GAElBE,EADSzW,KAAKyU,SAAS+B,EAAKR,OAChB5C,KAAW,GAAJ1N,GACzB,OAAO8Q,EAAKvF,IAAIwF,EAClB,GAAC,CAAAtW,IAAA,UAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OAAc,CAC1B,GAAIzB,UAAU,aAAckT,EAAI,CAC9B,IAAMxN,EAAI1F,UAAU,GACpB,OAAOD,KAAK2U,QAAQhP,EAAEyN,IAAKzN,EAAE0N,IAC9B,CAAM,GAA4B,iBAAjBpT,UAAU,GAAiB,CAC3C,IACIyW,EAAUlM,EAAUmM,EAAoB3O,EAAUpC,EADhDD,EAAI1F,UAAU,GACc8Q,EAAI,KAUtC,OAPAA,GAFA4F,EAAI3W,KAAKoT,IAAMzN,IACfqC,EAAI2O,EAAI3W,KAAKoT,KAKb5I,GAFA5E,GADAmL,EAAIpL,EAAIqC,GAAKhI,KAAKoT,IAAMrC,IAChB/Q,KAAKqT,MAEJsD,GADTD,EAAIC,EAAI/Q,IAER5F,KAAKoT,IAAMsD,EAAIlM,EACfxK,KAAKqT,IAAM7I,GAAKkM,EAAI1W,KAAKoT,KAClBpT,IACT,CACF,MAAO,GAAyB,IAArBC,UAAUyB,OAAc,CACjC,IACIgV,EAAoBE,EAAoBD,EAA8B/Q,EADpE2P,EAAMtV,UAAU,GAAIuV,EAAMvV,UAAU,GACR4W,EAAI,KAAgB9F,EAAI,KAAM/I,EAAI,KACpE2O,EAAI3W,KAAKoT,IAAMmC,EACfqB,EAAI5W,KAAKqT,IAAMmC,EAGfzE,EAAI4F,GAFJ3O,EAAI2O,EAAI3W,KAAKoT,KAGbyD,EAAID,GAFJhR,EAAIgR,EAAI5W,KAAKqT,KASb,IAAMyD,GAHNJ,EAAIC,GADJ3O,GAFA+I,EAAIwE,EAAMvN,GAAKhI,KAAKoT,IAAMrC,IAElB6F,KAGR5O,GAJA6O,EAAIrB,EAAM5P,GAAK5F,KAAKqT,IAAMwD,KAGtB7O,GAAK2O,EAAID,KAGPK,EAAM/O,GAAK0O,EAAII,GAGrB,OAFA9W,KAAKoT,IAAM0D,EACX9W,KAAKqT,IAAM0D,EACJ/W,IACT,CACF,GAAC,CAAAG,IAAA,eAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OAAc,CAC1B,GAAIzB,UAAU,aAAckT,EAAI,CAC9B,IAAMxN,EAAI1F,UAAU,GACpB,OAAOD,KAAK+V,aAAapQ,EAAEyN,IAAKzN,EAAE0N,IACnC,CAAM,GAA4B,iBAAjBpT,UAAU,GAAiB,CAC3C,IAAM0F,EAAI1F,UAAU,GACpB,OAAOD,KAAK+V,aAAapQ,EAAG,EAC9B,CACF,MAAO,GAAyB,IAArB1F,UAAUyB,OAAc,CACjC,IACesV,EAAsB5B,EAD/BG,EAAMtV,UAAU,GAAIuV,EAAMvV,UAAU,GACtCgX,EAAK,KAAiBvB,EAAK,KAAiBL,EAAI,KAAM7N,EAAI,KAE9DyP,GADA5B,EAAIlC,EAAGyC,MAAQ5V,KAAKoT,KACXpT,KAAKoT,IACd5L,EAAI2L,EAAGyC,MAAQL,EACf0B,EAAK5B,EAAI4B,EACTD,EAAKhX,KAAKoT,IAAM6D,EAChBvB,EAAKlO,EAAI+N,EAKT,IAAMuB,GAJNzB,EAAIrV,KAAKoT,IAAMmC,IAGf/N,EAAIyP,GAFJvB,EAAKlO,EAAIkO,GAEKL,EAAI4B,GADlB7B,EAAKG,EAAMG,GACiBsB,EAAKtB,EAAKsB,EAAK5B,GAAMpV,KAAKoT,IAAMoC,EAAMxV,KAAKqT,IAAMkC,IAGvEwB,EAAMvP,GADZyP,EAAK5B,EAAIyB,GAIT,OAFA9W,KAAKoT,IAAM0D,EACX9W,KAAKqT,IAAM0D,EACJ/W,IACT,CACF,GAAC,CAAAG,IAAA,UAAAC,MACD,WACE,OAAOJ,KAAK+V,aAAa/V,KAC3B,GAAC,CAAAG,IAAA,QAAAC,MACD,WACE,GAAIJ,KAAK4E,QAAS,OAAOuO,EAAGxO,IAC5B,IAAMuR,EAAMrV,KAAK4C,MAAMzD,KAAKoT,KACxBgD,EAAM,EAIV,OAHIF,IAAQlW,KAAKoT,MACfgD,EAAMvV,KAAK4C,MAAMzD,KAAKqT,MAEjB,IAAIF,EAAG+C,EAAKE,EACrB,GAAC,CAAAjW,IAAA,SAAAC,MACD,WACE,OAAIJ,KAAK4E,QAAgB5E,KAClB,IAAImT,GAAInT,KAAKoT,KAAMpT,KAAKqT,IACjC,GAAC,CAAAlT,IAAA,QAAAC,MACD,WACE,IACE,OAAO,IACR,CAAC,MAAO8W,GACP,GAAIA,aAAcjP,2BAChB,OAAO,KACJ,MAAMiP,CACb,CACF,GAAC,CAAA/W,IAAA,WAAAC,MACD,WACE,GAAIH,UAAU,aAAckT,EAAI,CAC9B,IAAMxN,EAAI1F,UAAU,GACpB,OAAI0F,EAAEf,QAAgBuO,EAAG0C,YAClB1C,EAAGnG,KAAKhN,MAAM+V,aAAapQ,EACnC,CAAM,GAA4B,iBAAjB1F,UAAU,GAAiB,CAC3C,IAAM0F,EAAI1F,UAAU,GACpB,OAAIwE,EAAOG,MAAMe,GAAWwN,EAAG0C,YACxB1C,EAAGnG,KAAKhN,MAAM+V,aAAapQ,EAAG,EACvC,CACF,GAAC,CAAAxF,IAAA,QAAAC,MACD,WACE,OAAOqE,EAAOG,MAAM5E,KAAKoT,IAC3B,GAAC,CAAAjT,IAAA,WAAAC,MACD,WACE,OAAOS,KAAKyT,MAAMtU,KAAKoT,IACzB,GAAC,CAAAjT,IAAA,WAAAC,MACD,WACE,IAAMoT,EAAML,EAAGI,UAAUvT,KAAKoT,KAC9B,OAAII,IAAQ,GAAKA,GAAO,GAAWxT,KAAKmX,qBACjCnX,KAAKoX,eACd,GAAC,CAAAjX,IAAA,qBAAAC,MACD,WACE,IAAMiX,EAAarX,KAAKsX,yBACxB,GAAmB,OAAfD,EAAqB,OAAOA,EAChC,IAAM9D,EAAY,IAAInC,MAAM,GAAGmG,KAAK,MAC9BC,EAAYxX,KAAKyX,0BAAyB,EAAMlE,GAChDS,EAAkBT,EAAU,GAAK,EACnCmE,EAAMF,EACV,GAA4B,MAAxBA,EAAUG,OAAO,GACnBD,EAAM,IAAMF,OACP,GAAIxD,EAAkB,EAC3B0D,EAAM,KAAOvE,EAAGyE,aAAa,KAAM5D,GAAmBwD,OACjD,IAAgC,IAA5BA,EAAU9E,QAAQ,KAAa,CACxC,IAAMmF,EAAY7D,EAAkBwD,EAAU9V,OAE9CgW,EAAMF,EADSrE,EAAGyE,aAAa,IAAKC,GACT,IAC7B,CACA,OAAI7X,KAAKsW,aAAqB,IAAMoB,EAC7BA,CACT,GAAC,CAAAvX,IAAA,aAAAC,MACD,WACE,IAAe+U,EAAsBC,EAAWC,EAAoBC,EAAhEG,EAAK,KAAiBC,EAAK,KAA2BlO,EAAI,KAAgBmO,EAAI,KAMlFR,GALAE,EAAI,EAAMrV,KAAKoT,MAIfqC,GAHAjO,EAAI2L,EAAGyC,MAAQP,IACfI,EAAKjO,EAAI6N,IAITK,GAHAC,EAAIxC,EAAGyC,MAAQ5V,KAAKoT,KAGXpT,KAAKoT,IAMd,IAAM0D,EAAMzB,GADZ7N,GAAK,GAJL8N,EAAID,EAAIrV,KAAKoT,MAGbuC,EAAIF,GAFJC,EAAKC,EAAID,GAEKJ,EAAIG,GADlBL,EAAKpV,KAAKoT,IAAMsC,GACYP,EAAKO,EAAKP,EAAKC,GACxBC,EAAIrV,KAAKqT,KAAOrT,KAAKoT,KAGxC,OAAO,IAAID,EAAG2D,EADFzB,EAAIyB,EAAMtP,EAExB,GAAC,CAAArH,IAAA,gBAAAC,MACD,WACE,GAAIJ,KAAKgV,SAAU,OAAO7B,EAAG2E,aAC7B,IAAMT,EAAarX,KAAKsX,yBACxB,GAAmB,OAAfD,EAAqB,OAAOA,EAChC,IAAM9D,EAAY,IAAInC,MAAM,GAAGmG,KAAK,MAC9BQ,EAAS/X,KAAKyX,0BAAyB,EAAOlE,GAC9CyE,EAAS7E,EAAG8E,sBAAwB1E,EAAU,GACpD,GAAyB,MAArBwE,EAAOJ,OAAO,GAChB,MAAM,IAAIO,sBAAsB,uBAAyBH,GAE3D,IAAII,EAAiB,GACjBJ,EAAOrW,OAAS,IAAGyW,EAAiBJ,EAAOK,UAAU,IACzD,IAAMC,EAAoBN,EAAOJ,OAAO,GAAK,IAAMQ,EACnD,OAAInY,KAAKsW,aAAqB,IAAM+B,EAAoBL,EACjDK,EAAoBL,CAC7B,GAAC,CAAA7X,IAAA,MAAAC,MACD,WACE,OAAIJ,KAAK4E,QAAgBuO,EAAGxO,IACxB3E,KAAKsW,aAAqBtW,KAAK+U,SAC5B,IAAI5B,EAAGnT,KAChB,GAAC,CAAAG,IAAA,aAAAC,MACD,WACE,OAAOJ,KAAKoT,IAAM,GAAoB,IAAbpT,KAAKoT,KAAepT,KAAKqT,IAAM,CAC1D,GAAC,CAAAlT,IAAA,KAAAC,MACD,SAAGuF,GACD,OAAO3F,KAAKoT,IAAMzN,EAAEyN,KAAOpT,KAAKoT,MAAQzN,EAAEyN,KAAOpT,KAAKqT,IAAM1N,EAAE0N,GAChE,GAAC,CAAAlT,IAAA,MAAAC,MACD,WACE,GAAIH,UAAU,aAAckT,EAAI,CAC9B,IAAMxN,EAAI1F,UAAU,GACpB,OAAOkT,EAAGnG,KAAKhN,MAAM2U,QAAQhP,EAC9B,CAAM,GAA4B,iBAAjB1F,UAAU,GAAiB,CAC3C,IAAM0F,EAAI1F,UAAU,GACpB,OAAOkT,EAAGnG,KAAKhN,MAAM2U,QAAQhP,EAC/B,CACF,GAAC,CAAAxF,IAAA,OAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,QACZ,GAA4B,iBAAjBzB,UAAU,GAAiB,CACpC,IAAMyF,EAAIzF,UAAU,GACpBD,KAAKoT,IAAM1N,EACX1F,KAAKqT,IAAM,CACZ,MAAM,GAAIpT,UAAU,aAAckT,EAAI,CACrC,IAAMmF,EAAKrY,UAAU,GACrBD,KAAKoT,IAAMkF,EAAGlF,IACdpT,KAAKqT,IAAMiF,EAAGjF,GAChB,OACK,GAAyB,IAArBpT,UAAUyB,OAAc,CACjC,IAAM6W,EAAKtY,UAAU,GAAIuY,EAAKvY,UAAU,GACxCD,KAAKoT,IAAMmF,EACXvY,KAAKqT,IAAMmF,CACb,CACF,GAAC,CAAArY,IAAA,KAAAC,MACD,SAAGuF,GACD,OAAO3F,KAAKoT,IAAMzN,EAAEyN,KAAOpT,KAAKoT,MAAQzN,EAAEyN,KAAOpT,KAAKqT,IAAM1N,EAAE0N,GAChE,GAAC,CAAAlT,IAAA,aAAAC,MACD,WACE,OAAOJ,KAAKoT,IAAM,GAAoB,IAAbpT,KAAKoT,KAAepT,KAAKqT,IAAM,CAC1D,GAAC,CAAAlT,IAAA,QAAAC,MACD,WACE,OAAIJ,KAAK4E,QAAgBuO,EAAGxO,IACxB3E,KAAKyY,aAAqBzY,KAAKyD,QAAqBzD,KAAKmW,MAC/D,GAAC,CAAAhW,IAAA,SAAAC,MACD,WACE,OAAIJ,KAAKoT,IAAM,EAAU,EACrBpT,KAAKoT,IAAM,GAAW,EACtBpT,KAAKqT,IAAM,EAAU,EACrBrT,KAAKqT,IAAM,GAAW,EACnB,CACT,GAAC,CAAAlT,IAAA,cAAAoI,IACD,WACE,MAAO,CAACjF,EAAcF,EAAYoF,EACpC,IAAC,CAAA,CAAArI,IAAA,eAAAC,MAvkBD,WAGE,GAFAJ,KAAKoT,IAAM,EACXpT,KAAKqT,IAAM,EACc,IAArBpT,UAAUyB,OACZ1B,KAAK4K,KAAK,QACL,GAAyB,IAArB3K,UAAUyB,QACnB,GAA4B,iBAAjBzB,UAAU,GAAiB,CACpC,IAAMyF,EAAIzF,UAAU,GACpBD,KAAK4K,KAAKlF,EACX,MAAM,GAAIzF,UAAU,aAAckT,EAAI,CACrC,IAAMmF,EAAKrY,UAAU,GACrBD,KAAK4K,KAAK0N,EACX,MAAM,GAA4B,iBAAjBrY,UAAU,GAAiB,CAC3C,IAAM6S,EAAM7S,UAAU,GACtBkT,EAAGrT,aAAauG,KAAKrG,KAAMmT,EAAGuF,MAAM5F,GACtC,OACK,GAAyB,IAArB7S,UAAUyB,OAAc,CACjC,IAAM6W,EAAKtY,UAAU,GAAIuY,EAAKvY,UAAU,GACxCD,KAAK4K,KAAK2N,EAAIC,EAChB,CACF,GAAC,CAAArY,IAAA,cAAAC,MACD,WACE,GAA4B,iBAAjBH,UAAU,IAA4C,iBAAjBA,UAAU,IAA4C,iBAAjBA,UAAU,IAA2C,iBAAjBA,UAAU,GAAmB,CACpJ,IAAM+D,EAAK/D,UAAU,GAAImL,EAAKnL,UAAU,GAAIgE,EAAKhE,UAAU,GAAIoL,EAAKpL,UAAU,GAC9E,OAAOkT,EAAGwF,YAAYxF,EAAGuB,QAAQ1Q,GAAKmP,EAAGuB,QAAQtJ,GAAK+H,EAAGuB,QAAQzQ,GAAKkP,EAAGuB,QAAQrJ,GACnF,CAAO,GAAIpL,UAAU,aAAckT,GAAOlT,UAAU,aAAckT,GAAOlT,UAAU,aAAckT,GAAMlT,UAAU,aAAckT,EAAM,CACnI,IAAyB/H,EAAKnL,UAAU,GAAIgE,EAAKhE,UAAU,GAAIoL,EAAKpL,UAAU,GAE9E,OAFWA,UAAU,GACN8T,SAAS1I,GAAIuN,aAAaxN,EAAG2I,SAAS9P,GAEvD,CACF,GAAC,CAAA9D,IAAA,MAAAC,MACD,SAAWsF,GACT,OAAOyN,EAAGuB,QAAQhP,GAAGqQ,aAAarQ,EACpC,GAAC,CAAAvF,IAAA,UAAAC,MACD,WACE,GAA4B,iBAAjBH,UAAU,GAAiB,CACpC,IAAM6S,EAAM7S,UAAU,GACtB,OAAOkT,EAAGuF,MAAM5F,EACjB,CAAM,GAA4B,iBAAjB7S,UAAU,GAE1B,OAAO,IAAIkT,EADDlT,UAAU,GAGxB,GAAC,CAAAE,IAAA,OAAAC,MACD,SAAYsF,GACV,OAAOyN,EAAGuB,QAAQhP,GAAG2C,MACvB,GAAC,CAAAlI,IAAA,QAAAC,MACD,SAAa0S,GAGX,IAFA,IAAIxO,EAAI,EACFuU,EAAS/F,EAAIpR,OACZuR,GAAU6F,aAAahG,EAAI6E,OAAOrT,KAAKA,IAC9C,IAAIgS,GAAa,EACjB,GAAIhS,EAAIuU,EAAQ,CACd,IAAME,EAASjG,EAAI6E,OAAOrT,GACX,MAAXyU,GAA6B,MAAXA,IACpBzU,IACe,MAAXyU,IAAgBzC,GAAa,GAErC,CAMA,IALA,IAAM0C,EAAM,IAAI7F,EACZe,EAAY,EACZ+E,EAAe,EACflT,EAAM,EACNmT,GAAiB,IAEf5U,GAAKuU,IADE,CAEX,IAAMM,EAAKrG,EAAI6E,OAAOrT,GAEtB,GADAA,IACI2O,GAAUmG,QAAQD,GAAtB,CACE,IAAME,EAAIF,EAAK,IACfH,EAAIjD,aAAa5C,EAAGO,KACpBsF,EAAIrE,QAAQ0E,GACZnF,GAEF,KANA,CAOA,GAAW,MAAPiF,EAAJ,CAKA,GAAW,MAAPA,GAAqB,MAAPA,EAAY,CAC5B,IAAMnB,EAASlF,EAAIsF,UAAU9T,GAC7B,IACEyB,EAAMiN,GAAQsG,SAAStB,EACxB,CAAC,MAAOd,GACP,MAAIA,aAAcqC,sBACV,IAAIA,sBAAsB,oBAAsBvB,EAAS,cAAgBlF,GACtEoE,CACb,CACA,KACF,CACA,MAAM,IAAIqC,sBAAsB,yBAA4BJ,EAAK,iBAAoB7U,EAAI,cAAgBwO,EAZzG,CAHEmG,EAAe/E,EACfgF,GAAiB,CAHnB,CAkBF,CACA,IAAIM,EAAOR,EACNE,IAAgBD,EAAe/E,GACpC,IAAMuF,EAAevF,EAAY+E,EAAelT,EAChD,GAAqB,IAAjB0T,EACFD,EAAOR,OACF,GAAIS,EAAe,EAAG,CAC3B,IAAMhG,EAAQN,EAAGO,IAAIhQ,IAAI+V,GACzBD,EAAOR,EAAIrF,OAAOF,EACpB,MAAO,GAAIgG,EAAe,EAAG,CAC3B,IAAMhG,EAAQN,EAAGO,IAAIhQ,KAAK+V,GAC1BD,EAAOR,EAAIjF,SAASN,EACtB,CACA,OAAI6C,EACKkD,EAAKzE,SAEPyE,CACT,GAAC,CAAArZ,IAAA,YAAAC,MACD,WACE,OAAO,IAAI+S,EAAG1O,EAAOE,IAAKF,EAAOE,IACnC,GAAC,CAAAxE,IAAA,OAAAC,MACD,SAAYkY,GACV,OAAO,IAAInF,EAAGmF,EAChB,GAAC,CAAAnY,IAAA,YAAAC,MACD,SAAiBsF,GACf,IAAMgU,EAAO7Y,KAAKC,IAAI4E,GAChBiU,EAAS9Y,KAAK+Y,IAAIF,GAAQ7Y,KAAK+Y,IAAI,IACrCC,EAAOhZ,KAAKyT,MAAMzT,KAAK4C,MAAMkW,IAGjC,OADc,GADE9Y,KAAK6C,IAAI,GAAImW,IACTH,IAAMG,GAAQ,GAC3BA,CACT,GAAC,CAAA1Z,IAAA,eAAAC,MACD,SAAoB+Y,EAAIW,GAEtB,IADA,IAAM7F,EAAM,IAAIpB,GACPvO,EAAI,EAAGA,EAAIwV,EAAKxV,IACvB2P,EAAIG,OAAO+E,GAEb,OAAOlF,EAAIa,UACb,IAAC,CArIoB,GA6kBvB3B,GAAGlR,GAAK,IAAIkR,GAAG,kBAA0B,uBACzCA,GAAG4G,OAAS,IAAI5G,GAAG,kBAA0B,uBAC7CA,GAAG6G,KAAO,IAAI7G,GAAG,mBAA0B,sBAC3CA,GAAG8G,EAAI,IAAI9G,GAAG,kBAA0B,uBACxCA,GAAGxO,IAAM,IAAIwO,GAAG1O,EAAOE,IAAKF,EAAOE,KACnCwO,GAAG+G,IAAM,oBACT/G,GAAGyC,MAAQ,UACXzC,GAAGgB,iBAAmB,GACtBhB,GAAGO,IAAMP,GAAGuB,QAAQ,IACpBvB,GAAGW,IAAMX,GAAGuB,QAAQ,GACpBvB,GAAG8E,sBAAwB,IAC3B9E,GAAG2E,aAAe,QC7lBS,IACNqC,GAAc,WAAA,SAAAA,IAAAta,OAAAsa,EAAA,CAAA,OAAAja,EAAAia,EAAA,KAAA,CAAA,CAAAha,IAAA,mBAAAC,MACjC,SAAwB8K,EAAIC,EAAIG,GAC9B,IAAMiH,EAAQ4H,EAAeC,uBAAuBlP,EAAIC,EAAIG,GAC5D,GAAIiH,GAAS,EAAG,OAAOA,EACvB,IAAM8H,EAAMlH,GAAGuB,QAAQvJ,EAAGzF,GAAGiP,SAASzJ,EAAGxF,GACnC4U,EAAMnH,GAAGuB,QAAQvJ,EAAGxF,GAAGgP,SAASzJ,EAAGvF,GACnC4U,EAAMpH,GAAGuB,QAAQpJ,EAAE5F,GAAGiP,SAASxJ,EAAGzF,GAClC8U,EAAMrH,GAAGuB,QAAQpJ,EAAE3F,GAAGgP,SAASxJ,EAAGxF,GACxC,OAAO0U,EAAItE,aAAayE,GAAK5B,aAAa0B,EAAIvE,aAAawE,IAAME,QACnE,GAAC,CAAAta,IAAA,eAAAC,MACD,WACE,GAAIH,UAAU,aAAckT,IAAOlT,UAAU,aAAckT,IAAOlT,UAAU,aAAckT,IAAMlT,UAAU,aAAckT,GAAM,CAC5H,IAAyB/H,EAAKnL,UAAU,GAAIgE,EAAKhE,UAAU,GAAIoL,EAAKpL,UAAU,GAE9E,OAFWA,UAAU,GACN8T,SAAS1I,GAAIuN,aAAaxN,EAAG2I,SAAS9P,IAC1CwW,QACb,CAAO,GAA4B,iBAAjBxa,UAAU,IAA4C,iBAAjBA,UAAU,IAA4C,iBAAjBA,UAAU,IAA2C,iBAAjBA,UAAU,GAAmB,CAC3J,IAAMoa,EAAMpa,UAAU,GAAIqa,EAAMra,UAAU,GAAIsa,EAAMta,UAAU,GAAIua,EAAMva,UAAU,GAC5E+D,EAAKmP,GAAGuB,QAAQ2F,GAChBjP,EAAK+H,GAAGuB,QAAQ4F,GAChBrW,EAAKkP,GAAGuB,QAAQ6F,GAChBlP,EAAK8H,GAAGuB,QAAQ8F,GAEtB,OADYxW,EAAG+P,SAAS1I,GAAIuN,aAAaxN,EAAG2I,SAAS9P,IAC1CwW,QACb,CACF,GAAC,CAAAta,IAAA,eAAAC,MACD,SAAoB8K,EAAIC,EAAII,EAAIC,GAC9B,IAAMkP,EAAK,IAAIvH,GAAGjI,EAAGvF,GAAGiT,aAAazN,EAAGxF,GAClCgV,EAAK,IAAIxH,GAAGhI,EAAGzF,GAAGkT,aAAa1N,EAAGxF,GAClCkV,EAAK,IAAIzH,GAAGjI,EAAGxF,GAAGqQ,aAAa5K,EAAGxF,GAAGiT,aAAa,IAAIzF,GAAGhI,EAAGzF,GAAGqQ,aAAa7K,EAAGvF,IAC/EkV,EAAK,IAAI1H,GAAG5H,EAAG5F,GAAGiT,aAAapN,EAAG7F,GAClCmV,EAAK,IAAI3H,GAAG3H,EAAG9F,GAAGkT,aAAarN,EAAG7F,GAClCqV,EAAK,IAAI5H,GAAG5H,EAAG7F,GAAGqQ,aAAavK,EAAG7F,GAAGiT,aAAa,IAAIzF,GAAG3H,EAAG9F,GAAGqQ,aAAaxK,EAAG5F,IAC/ED,EAAIiV,EAAG5G,SAASgH,GAAInC,aAAakC,EAAG/G,SAAS6G,IAC7CjV,EAAIkV,EAAG9G,SAAS6G,GAAIhC,aAAa8B,EAAG3G,SAASgH,IAC7CxQ,EAAImQ,EAAG3G,SAAS+G,GAAIlC,aAAaiC,EAAG9G,SAAS4G,IAC7CK,EAAOtV,EAAEwP,WAAW3K,GAAG0Q,cACvBC,EAAOvV,EAAEuP,WAAW3K,GAAG0Q,cAC7B,OAAIxW,EAAOG,MAAMoW,IAAUvW,EAAOM,WAAWiW,IAASvW,EAAOG,MAAMsW,IAAUzW,EAAOM,WAAWmW,GACtF,KAEF,IAAIjU,EAAW+T,EAAME,EAC9B,GAAC,CAAA/a,IAAA,yBAAAC,MACD,SAA8B+a,EAAIC,EAAIC,GACpC,IAAIC,EAAS,KACPC,GAAWJ,EAAGzV,EAAI2V,EAAG3V,IAAM0V,EAAGzV,EAAI0V,EAAG1V,GACrC6V,GAAYL,EAAGxV,EAAI0V,EAAG1V,IAAMyV,EAAG1V,EAAI2V,EAAG3V,GACtC+V,EAAMF,EAAUC,EACtB,GAAID,EAAU,EAAG,CACf,GAAIC,GAAY,EACd,OAAOrB,EAAeM,OAAOgB,GAE7BH,EAASC,EAAUC,MAElB,MAAID,EAAU,GAOjB,OAAOpB,EAAeM,OAAOgB,GAN7B,GAAID,GAAY,EACd,OAAOrB,EAAeM,OAAOgB,GAE7BH,GAAUC,EAAUC,CAGW,CAEnC,IAAME,EAAWvB,EAAewB,gBAAkBL,EAClD,OAAIG,GAAOC,IAAaD,GAAOC,EACtBvB,EAAeM,OAAOgB,GAExB,CACT,GAAC,CAAAtb,IAAA,SAAAC,MACD,SAAcsF,GACZ,OAAIA,EAAI,EAAU,EACdA,EAAI,GAAW,EACZ,CACT,IAAC,CAxEgC,GA0EnCyU,GAAewB,gBAAkB,MC5EsB,IAClCC,GAAkB,WAAA,OAAA1b,GAAA,SAAA0b,IAAA/b,OAAA+b,EAAA,GAAA,CAAA,CAAAzb,IAAA,OAAAC,MACrC,SAAKmS,GACH,GAAIvS,KAAK6b,OAAQ,CACf,IAAMC,EAAS9b,KAAK+b,eAAiB/b,KAAKgc,cAC1C,OAAOhc,KAAKic,YAAY1J,EAAOuJ,EACjC,CACE,OAAOrX,EAAOE,GAElB,GAAC,CAAAxE,IAAA,cAAAC,MACD,SAAYmS,EAAOrL,EAAe9G,GAAO,GAAE,CAAAD,IAAA,OAAAC,MAC3C,SAAKmS,GACH,OAAIvS,KAAKkc,OACAlc,KAAKic,YAAY1J,EAAO,GAExB9N,EAAOE,GAElB,GAAC,CAAAxE,IAAA,OAAAC,MACD,WAAO,GAAE,CAAAD,IAAA,cAAAC,MACT,SAAYmS,EAAOrL,GAAe,GAAE,CAAA/G,IAAA,gBAAAC,MACpC,WAMA,GAAC,CAAAD,IAAA,oBAAAC,MACD,SAAkBkE,GAAG,GAAE,CAAAnE,IAAA,mBAAAC,MACvB,WAAmB,GAAE,CAAAD,IAAA,eAAAC,MACrB,WAAe,GAAE,CAAAD,IAAA,OAAAC,MACjB,WACE,OAAOJ,KAAKgc,cAAgB,CAC9B,GAAC,CAAA7b,IAAA,OAAAC,MACD,SAAKmS,GAAO,GAAE,CAAApS,IAAA,OAAAC,MACd,WACE,OAAOJ,KAAK+b,eAAiB/b,KAAKgc,cAAgB,CACpD,GAAC,CAAA7b,IAAA,cAAAC,MACD,WACE,OAAO,CACT,GAAC,CAAAD,IAAA,iBAAAC,MACD,SAAe6J,GAAK,GAAE,CAAA9J,IAAA,OAAAC,MACtB,WAAO,GAAE,CAAAD,IAAA,OAAAC,MACT,SAAKmS,GAAO,GAAE,CAAApS,IAAA,oBAAAC,MACd,WAAoB,GAAE,CAAAD,IAAA,cAAAoI,IACtB,WACE,MAAO,CAACC,EACV,IAAC,CA7CoC,GA+CvCoT,GAAmBzU,EAAI,EACvByU,GAAmBxU,EAAI,EACvBwU,GAAmBvU,EAAI,EACvBuU,GAAmBjU,EAAI,ECjDoC,IACtCwU,GAAW,WAAA,SAAAA,IAAAtc,OAAAsc,EAAA,CAAA,OAAAjc,EAAAic,EAAA,KAAA,CAAA,CAAAhc,IAAA,QAAAC,MAC9B,SAAa8K,EAAIC,EAAIG,GACnB,OAAO6O,GAAeiC,iBAAiBlR,EAAIC,EAAIG,EACjD,GAAC,CAAAnL,IAAA,QAAAC,MACD,WACE,GAAIH,UAAU,aAAcmR,MAAO,CACjC,IAAMiL,EAAOpc,UAAU,GACjBqc,EAAOD,EAAK3a,OAAS,EAC3B,GAAI4a,EAAO,EAAG,MAAM,IAAItZ,EAAyB,qEAGjD,IAFA,IAAIuZ,EAAOF,EAAK,GACZG,EAAU,EACLlY,EAAI,EAAGA,GAAKgY,EAAMhY,IAAK,CAC9B,IAAM+F,EAAIgS,EAAK/X,GACX+F,EAAE1E,EAAI4W,EAAK5W,IACb4W,EAAOlS,EACPmS,EAAUlY,EAEd,CACA,IAAImY,EAAQD,EACZ,IACEC,GAAgB,GACJ,IAAGA,EAAQH,SAChBD,EAAKI,GAAO3U,SAASyU,IAASE,IAAUD,GACjD,IAAIE,EAAQF,EACZ,GACEE,GAASA,EAAQ,GAAKJ,QACjBD,EAAKK,GAAO5U,SAASyU,IAASG,IAAUF,GAC/C,IAAMG,EAAON,EAAKI,GACZzO,EAAOqO,EAAKK,GAClB,GAAIC,EAAK7U,SAASyU,IAASvO,EAAKlG,SAASyU,IAASI,EAAK7U,SAASkG,GAAO,OAAO,EAC9E,IAAM4O,EAAOT,EAAY5J,MAAMoK,EAAMJ,EAAMvO,GAO3C,OALa,IAAT4O,EACMD,EAAKjX,EAAIsI,EAAKtI,EAEdkX,EAAO,CAGlB,CAAM,GAAIhK,GAAa3S,UAAU,GAAI2b,IAAqB,CACzD,IAAMS,EAAOpc,UAAU,GACjBqc,EAAOD,EAAKlL,OAAS,EAC3B,GAAImL,EAAO,EAAG,MAAM,IAAItZ,EAAyB,qEAGjD,IAFA,IAAIuZ,EAAOF,EAAKQ,cAAc,GAC1BL,EAAU,EACLlY,EAAI,EAAGA,GAAKgY,EAAMhY,IAAK,CAC9B,IAAM+F,EAAIgS,EAAKQ,cAAcvY,GACzB+F,EAAE1E,EAAI4W,EAAK5W,IACb4W,EAAOlS,EACPmS,EAAUlY,EAEd,CACA,IAAIqY,EAAO,KACPF,EAAQD,EACZ,IACEC,GAAgB,GACJ,IAAGA,EAAQH,GACvBK,EAAON,EAAKQ,cAAcJ,SACnBE,EAAK7U,SAASyU,IAASE,IAAUD,GAC1C,IAAIxO,EAAO,KACP0O,EAAQF,EACZ,GACEE,GAASA,EAAQ,GAAKJ,EACtBtO,EAAOqO,EAAKQ,cAAcH,SACnB1O,EAAKlG,SAASyU,IAASG,IAAUF,GAC1C,GAAIG,EAAK7U,SAASyU,IAASvO,EAAKlG,SAASyU,IAASI,EAAK7U,SAASkG,GAAO,OAAO,EAC9E,IAAM4O,EAAOT,EAAY5J,MAAMoK,EAAMJ,EAAMvO,GAO3C,OALa,IAAT4O,EACMD,EAAKjX,EAAIsI,EAAKtI,EAEdkX,EAAO,CAGnB,CACF,IAAC,CA1E6B,GA4EhCT,GAAYW,WAAa,EACzBX,GAAYpK,MAAQoK,GAAYW,UAChCX,GAAYY,iBAAmB,EAC/BZ,GAAYrK,KAAOqK,GAAYY,iBAC/BZ,GAAYa,UAAY,EACxBb,GAAYc,SAAWd,GAAYa,UCnFG,IACjBE,GAAmB,WAGrC,OAAAhd,GAFD,SAAAgd,IAAcrd,OAAAqd,GACZA,EAAoBpd,aAAaC,MAAMC,KAAMC,UAC/C,GAAC,CAAA,CAAAE,IAAA,gBAAAC,MAOD,WACE,OAAOJ,KAAKmd,SACd,GAAC,CAAAhd,IAAA,mBAAAC,MACD,SAAiBgd,EAAI7K,GACnB,IAAI8K,EAAOrd,KAAKsd,0BAA0BF,EAAI7K,GAM9C,OALI8K,EAAO,IAAGA,EAAOrd,KAAKsd,0BAA0BF,EAAI7K,EAAQ,IAC5D8K,EAAO,IACTrd,KAAKmd,UAAY,KACjBnd,KAAKud,4BAA4BH,IAE5BC,CACT,GAAC,CAAAld,IAAA,4BAAAC,MACD,WACE,IAAMod,EAAMxd,KAAKyd,OAAOC,UAAUC,iBAClCrX,EAAOG,OAAOzG,KAAK4d,UAAY,GAAK5d,KAAK4d,UAAYJ,EAAI9b,OAAQ,0DACjE,IAAMmc,EAAQL,EAAIxd,KAAK4d,UAAY,GAC7BE,EAAQN,EAAIxd,KAAK4d,UAAY,GAC7BG,EAAc5B,GAAY5J,MAAMvS,KAAKmd,UAAWW,EAAOD,GACzDG,GAAU,GACVH,EAAMlY,EAAI3F,KAAKmd,UAAUxX,GAAKmY,EAAMnY,EAAI3F,KAAKmd,UAAUxX,GAAKoY,IAAgB5B,GAAYY,kBAEnFc,EAAMlY,EAAI3F,KAAKmd,UAAUxX,GAAKmY,EAAMnY,EAAI3F,KAAKmd,UAAUxX,GAAKoY,IAAgB5B,GAAYW,aAD/FkB,GAAU,GAIRA,IACFhe,KAAK4d,UAAY5d,KAAK4d,UAAY,EAEtC,GAAC,CAAAzd,IAAA,4BAAAC,MACD,SAA0Bgd,EAAI9Y,GAC5B,IACM2Z,EADIb,EAAGM,UACGC,iBAChB,GAAIrZ,EAAI,GAAKA,EAAI,GAAK2Z,EAAMvc,OAAQ,OAAQ,EAC5C,GAAIuc,EAAM3Z,GAAGqB,IAAMsY,EAAM3Z,EAAI,GAAGqB,EAAG,OAAQ,EAC3C,IAAIuY,EAAMtM,EAASE,KAEnB,OADImM,EAAM3Z,GAAGqB,EAAIsY,EAAM3Z,EAAI,GAAGqB,IAAGuY,EAAMtM,EAASG,OACzCmM,CACT,GAAC,CAAA/d,IAAA,UAAAC,MACD,WACE,OAAOJ,KAAKme,WACd,GAAC,CAAAhe,IAAA,8BAAAC,MACD,SAA4Bgd,GAE1B,IADA,IAAMa,EAAQb,EAAGM,UAAUC,iBAClBrZ,EAAI,EAAGA,EAAI2Z,EAAMvc,OAAS,EAAG4C,KACb,OAAnBtE,KAAKmd,WAAsBc,EAAM3Z,GAAGoB,EAAI1F,KAAKmd,UAAUzX,KACzD1F,KAAKyd,OAASL,EACdpd,KAAK4d,UAAYtZ,EACjBtE,KAAKmd,UAAYc,EAAM3Z,GAG7B,GAAC,CAAAnE,IAAA,0BAAAC,MACD,WACE,IACMge,EADOpe,KAAKyd,OAAOY,UACPC,WAClBte,KAAKyd,OAASW,EAAKG,mBACdve,KAAKyd,OAAOe,cACfxe,KAAKyd,OAASzd,KAAKyd,OAAOgB,SAC1Bze,KAAK4d,UAAY5d,KAAKyd,OAAOC,UAAUC,iBAAiBjc,OAAS,EAErE,GAAC,CAAAvB,IAAA,WAAAC,MACD,SAASse,GACP,IAAK,IAAIpa,EAAIoa,EAAY9Q,WAAYtJ,EAAEwJ,WAAa,CAClD,IAAMsP,EAAK9Y,EAAE0J,OACRoP,EAAGoB,aACRxe,KAAKud,4BAA4BH,EACnC,CACA9W,EAAOG,OAA0B,IAAnBzG,KAAK4d,WAAmB5d,KAAKmd,UAAUvW,OAAO5G,KAAKyd,OAAOZ,iBAAkB,yCACnE,IAAnB7c,KAAK4d,UACP5d,KAAK2e,0BAEL3e,KAAK4e,4BAEP5e,KAAKme,YAAcne,KAAKyd,OACFzd,KAAK6e,iBAAiB7e,KAAKyd,OAAQzd,KAAK4d,aACxChM,EAASE,OAC7B9R,KAAKme,YAAcne,KAAKyd,OAAOgB,SAEnC,IAAC,CAAA,CAAAte,IAAA,eAAAC,MAlFD,WACEJ,KAAK4d,WAAa,EAClB5d,KAAKmd,UAAY,KACjBnd,KAAKyd,OAAS,KACdzd,KAAKme,YAAc,IACrB,IAAC,CATqC,GCAnBW,YAAiB1Y,GACpC,SAAA0Y,EAAYC,EAAKC,GAAI,IAAAxc,EAG8B,OAH9B3C,OAAAif,IACnBtc,EAAAC,EAAAqc,KAAAA,GAAME,EAAKD,EAAM,MAAQC,EAAK,KAAOD,KAChCC,GAAKA,EAAK,IAAI/X,EAAW+X,QAAMC,EACpCzc,EAAKE,KAAOC,OAAOC,KAAK,CAAEkc,kBAAAA,IAAqB,GAAEtc,CACnD,CAAC,OAAAK,EAAAic,EAAA1Y,GAAAlG,EAAA4e,EAAA,CAAA,CAAA3e,IAAA,gBAAAC,MACD,WACE,OAAOJ,KAAKgf,EACd,IAAC,EAR4C9Y,GCH1BgZ,GAAU,WAG5B,OAAAhf,GAFD,SAAAgf,IAAcrf,OAAAqf,GACZlf,KAAKyO,MAAQ,EACf,GAAC,CAAA,CAAAtO,IAAA,UAAAC,MAED,SAAQ4H,GACNhI,KAAKyO,MAAM6D,KAAKtK,EAClB,GAAC,CAAA7H,IAAA,cAAAC,MAED,WACE,OAAOJ,KAAKyO,MAAM0Q,OACpB,GAAC,CAAAhf,IAAA,UAAAC,MAED,WACE,OAA6B,IAAtBJ,KAAKyO,MAAM/M,MACpB,IAAC,CAf4B,GCQV0d,YAAS/M,GAE5B,SAAA+M,EAAYrX,GAAG,IAAAvF,EAG8B,OAH9B3C,OAAAuf,IACb5c,EAAAC,EAAAzC,KAAAof,IACK3Q,MAAQ,GACT1G,aAAaiI,GAAYxN,EAAKiO,OAAO1I,GAAEvF,CAC7C,CAAC,OAAAK,EAAAuc,EAAA/M,GAAAnS,EAAAkf,EAAA,CAAA,CAAAjf,IAAA,cAAAoI,IAED,WACE,MAAO,CAAC4J,GAAMnC,EAChB,GAAC,CAAA7P,IAAA,iBAAAC,MAED,WAAiB,GAAG,CAAAD,IAAA,MAAAC,MAEpB,SAAI4H,GAKF,OAJyB,IAArB/H,UAAUyB,OACZ1B,KAAKyO,MAAM6D,KAAKtK,GAEhBhI,KAAKyO,MAAM4Q,OAAOpf,UAAU,GAAI,EAAGA,UAAU,KACxC,CACT,GAAC,CAAAE,IAAA,QAAAC,MAED,WACEJ,KAAKyO,MAAQ,EACf,GAAC,CAAAtO,IAAA,SAAAC,MAED,SAAOoH,GAAG,IACSoJ,EADTC,EAAAC,EACQtJ,GAAC,IAAjB,IAAAqJ,EAAAE,MAAAH,EAAAC,EAAAhM,KAAAmM,MACE,CAAA,IADShJ,EAAC4I,EAAAxQ,MACVJ,KAAKyO,MAAM6D,KAAKtK,EAAC,CAAC,CAAA,MAAAkJ,GAAAL,EAAA7I,EAAAkJ,EAAA,CAAA,QAAAL,EAAAjL,GAAA,CACtB,GAAC,CAAAzF,IAAA,MAAAC,MAED,SAAImS,EAAO+M,GACT,IAAMC,EAAavf,KAAKyO,MAAM8D,GAE9B,OADAvS,KAAKyO,MAAM8D,GAAS+M,EACbC,CACT,GAAC,CAAApf,IAAA,WAAAC,MAED,WACE,OAAO,IAAImR,GAASvR,KACtB,GAAC,CAAAG,IAAA,MAAAC,MAED,SAAImS,GACF,GAAIA,EAAQ,GAAKA,GAASvS,KAAKmR,OAC7B,MAAM,IAAIe,GACZ,OAAOlS,KAAKyO,MAAM8D,EACpB,GAAC,CAAApS,IAAA,UAAAC,MAED,WACE,OAA6B,IAAtBJ,KAAKyO,MAAM/M,MACpB,GAAC,CAAAvB,IAAA,OAAAC,MAED,SAAKof,GACCA,EACFxf,KAAKyO,MAAMgR,MAAK,SAACvW,EAAGC,GAAC,OAAKqW,EAAW1W,QAAQI,EAAGC,EAAE,IAC/CnJ,KAAKyO,MAAMgR,MAClB,GAAC,CAAAtf,IAAA,OAAAC,MAED,WACE,OAAOJ,KAAKyO,MAAM/M,MACpB,GAAC,CAAAvB,IAAA,UAAAC,MAED,WACE,OAAOJ,KAAKyO,MAAMkE,OACpB,GAAC,CAAAxS,IAAA,SAAAC,MAED,SAAO2H,GACL,IAAK,IAAIzD,EAAI,EAAGwV,EAAM9Z,KAAKyO,MAAM/M,OAAQ4C,EAAIwV,EAAKxV,IAChD,GAAItE,KAAKyO,MAAMnK,KAAOyD,EACpB,QAAS/H,KAAKyO,MAAM4Q,OAAO/a,EAAG,GAClC,OAAO,CACT,GAAC,CAAAnE,IAEAqR,OAAO5D,SAAQxN,MAAhB,WACE,OAAOJ,KAAKyO,MAAM6C,QACpB,IAAC,EA1EoCa,IA6EjCZ,GAAQ,WAIX,OAAArR,GAHD,SAAAqR,EAAYmO,GAAW7f,OAAA0R,GACrBvR,KAAK0f,UAAYA,EACjB1f,KAAK6R,SAAW,CAClB,GAAC,CAAA,CAAA1R,IAAA,OAAAC,MAED,WACE,GAAIJ,KAAK6R,WAAa7R,KAAK0f,UAAUvO,OACnC,MAAM,IAAIlB,EACZ,OAAOjQ,KAAK0f,UAAUnX,IAAIvI,KAAK6R,WACjC,GAAC,CAAA1R,IAAA,UAAAC,MAED,WACE,OAAOJ,KAAK6R,SAAW7R,KAAK0f,UAAUvO,MACxC,GAAC,CAAAhR,IAAA,MAAAC,MAED,SAAIkf,GACF,OAAOtf,KAAK0f,UAAU/O,IAAI3Q,KAAK6R,SAAW,EAAGyN,EAC/C,GAAC,CAAAnf,IAAA,SAAAC,MAED,WACEJ,KAAK0f,UAAUC,OAAO3f,KAAK0f,UAAUnX,IAAIvI,KAAK6R,UAChD,IAAC,CAtBW,GC5EO+N,GAAc,WAGhC,OAAA1f,GAFD,SAAA0f,IAAc/f,OAAA+f,GACZA,EAAe9f,aAAaC,MAAMC,KAAMC,UAC1C,GAAC,CAAA,CAAAE,IAAA,oBAAAC,MASD,WACE,IAAK,IAAIyf,EAAK7f,KAAK8f,aAAalS,WAAYiS,EAAG/R,WAAa,CAC/C+R,EAAG7R,OACX+R,YAAW,EAChB,CACF,GAAC,CAAA5f,IAAA,yBAAAC,MACD,WACE,OAAOJ,KAAKggB,eACd,GAAC,CAAA7f,IAAA,mBAAAC,MACD,SAAiByE,GAEf,IADA,IAAIob,EAAY,KACP3b,EAAIO,EAAEyZ,WAAW1Q,WAAYtJ,EAAEwJ,WAAa,CACnD,IAAMsP,EAAK9Y,EAAE0J,OACb,GAAIoP,EAAG8C,aAAe9C,EAAGqB,SAASyB,YAAa,CAC7CD,EAAY7C,EACZ,KACF,CACF,CACA,GAAkB,OAAd6C,EAAoB,MAAM,IAAInB,GAAkB,4CAA8Cja,EAAEgY,iBACpGhY,EAAEyZ,WAAW6B,cAAcF,GAC3B,IAAK,IAAI3b,EAAIO,EAAEyZ,WAAW1Q,WAAYtJ,EAAEwJ,WAAa,CACnD,IAAMsP,EAAK9Y,EAAE0J,OACboP,EAAG2C,YAAW,GACd/f,KAAKogB,cAAchD,EACrB,CACF,GAAC,CAAAjd,IAAA,eAAAC,MACD,SAAaigB,GACXrgB,KAAKsgB,oBACL,IAAMlD,EAAKpd,KAAKugB,QAAQ7C,UACdN,EAAGiB,UACCjB,EAAGoD,WACjBpD,EAAGqD,cAAc7O,EAASG,MAAOsO,GACjCrgB,KAAKogB,cAAchD,GACnBpd,KAAKmgB,cAAc/C,EACrB,GAAC,CAAAjd,IAAA,SAAAC,MACD,SAAOsgB,GACL1gB,KAAK2gB,aAAaD,GAClB1gB,KAAKugB,QAAQK,SAAS5gB,KAAK8f,cAC3B9f,KAAKggB,gBAAkBhgB,KAAKugB,QAAQ1D,eACtC,GAAC,CAAA1c,IAAA,kBAAAC,MACD,WACE,IAAK,IAAIyf,EAAK7f,KAAK8f,aAAalS,WAAYiS,EAAG/R,WAAa,CAC1D,IAAMsP,EAAKyC,EAAG7R,OACVoP,EAAGyD,SAASjP,EAASG,QAAU,GAAKqL,EAAGyD,SAASjP,EAASE,OAAS,IAAMsL,EAAG0D,sBAC7E1D,EAAG2D,aAAY,EAEnB,CACF,GAAC,CAAA5gB,IAAA,gBAAAC,MACD,SAAc6f,GACZ,IAAMe,EAAe,IAAI3Q,EACnB4Q,EAAY,IAAI/B,GAChBgC,EAAYjB,EAAU5B,UAI5B,IAHA4C,EAAUE,QAAQD,GAClBF,EAAa/P,IAAIiQ,GACjBjB,EAAUF,YAAW,IACbkB,EAAUzU,WAAW,CAC3B,IAAM3H,EAAIoc,EAAUG,cACpBJ,EAAa/P,IAAIpM,GACjB7E,KAAKqhB,iBAAiBxc,GACtB,IAAK,IAAIP,EAAIO,EAAEyZ,WAAW1Q,WAAYtJ,EAAEwJ,WAAa,CACnD,IACMwT,EADKhd,EAAE0J,OACEyQ,SACf,IAAI6C,EAAIpB,YAAR,CACA,IAAMqB,EAAUD,EAAIjD,UACf2C,EAAaQ,SAASD,KACzBN,EAAUE,QAAQI,GAClBP,EAAa/P,IAAIsQ,GAJE,CAMvB,CACF,CACF,GAAC,CAAAphB,IAAA,YAAAC,MACD,SAAU2H,GACR,IAAM0Z,EAAQ1Z,EACd,OAAI/H,KAAKggB,gBAAgBta,EAAI+b,EAAMzB,gBAAgBta,GACzC,EAEN1F,KAAKggB,gBAAgBta,EAAI+b,EAAMzB,gBAAgBta,EAC1C,EAEF,CACT,GAAC,CAAAvF,IAAA,cAAAC,MACD,WACE,GAAkB,OAAdJ,KAAK0hB,KAAe,CAEtB,IADA,IAAMC,EAAU,IAAIvY,EACXyW,EAAK7f,KAAK8f,aAAalS,WAAYiS,EAAG/R,WAG7C,IAFA,IACM0P,EADUqC,EAAG7R,OACC0P,UAAUC,iBACrBrZ,EAAI,EAAGA,EAAIkZ,EAAI9b,OAAS,EAAG4C,IAClCqd,EAAQlX,gBAAgB+S,EAAIlZ,IAGhCtE,KAAK0hB,KAAOC,CACd,CACA,OAAO3hB,KAAK0hB,IACd,GAAC,CAAAvhB,IAAA,eAAAC,MACD,SAAa8gB,GACX,IAAMU,EAAY,IAAIxP,GAEtB,IADAwP,EAAU3Q,IAAIiQ,IACNU,EAAUnP,SAAS,CACzB,IAAMiO,EAAOkB,EAAUpP,MACvBxS,KAAKiR,IAAIyP,EAAMkB,EACjB,CACF,GAAC,CAAAzhB,IAAA,gBAAAC,MACD,SAAcgd,GACZ,IAAMkE,EAAMlE,EAAGqB,SACf6C,EAAIO,SAASjQ,EAASE,KAAMsL,EAAGyD,SAASjP,EAASG,QACjDuP,EAAIO,SAASjQ,EAASG,MAAOqL,EAAGyD,SAASjP,EAASE,MACpD,GAAC,CAAA3R,IAAA,MAAAC,MACD,SAAIsgB,EAAMkB,GACRlB,EAAKX,YAAW,GAChB/f,KAAK8hB,OAAO7Q,IAAIyP,GAChB,IAAK,IAAIpc,EAAIoc,EAAKpC,WAAW1Q,WAAYtJ,EAAEwJ,WAAa,CACtD,IAAMsP,EAAK9Y,EAAE0J,OACbhO,KAAK8f,aAAa7O,IAAImM,GACtB,IACM2E,EADM3E,EAAGqB,SACKJ,UACf0D,EAAQ7B,aAAa0B,EAAUtP,KAAKyP,EAC3C,CACF,GAAC,CAAA5hB,IAAA,WAAAC,MACD,WACE,OAAOJ,KAAK8hB,MACd,GAAC,CAAA3hB,IAAA,mBAAAC,MACD,WACE,OAAOJ,KAAK8f,YACd,GAAC,CAAA3f,IAAA,cAAAoI,IACD,WACE,MAAO,CAACnF,EACV,IAAC,CAAA,CAAAjD,IAAA,eAAAC,MAvID,WACEJ,KAAKugB,QAAU,KACfvgB,KAAK8f,aAAe,IAAIV,GACxBpf,KAAK8hB,OAAS,IAAI1C,GAClBpf,KAAKggB,gBAAkB,KACvBhgB,KAAK0hB,KAAO,KACZ1hB,KAAKugB,QAAU,IAAIrD,EACrB,IAAC,CAXgC,GCPd8E,GAAY,WAAA,OAAA9hB,GAAA,SAAA8hB,IAAAniB,OAAAmiB,EAAA,GAAA,KAAA,CAAA,CAAA7hB,IAAA,eAAAC,MAC/B,SAAoB8K,EAAIC,EAAII,EAAIC,GAC9B,IAAMyW,EAAQ/W,EAAGxF,EAAIyF,EAAGzF,EAAIwF,EAAGxF,EAAIyF,EAAGzF,EAChCwc,EAAQhX,EAAGvF,EAAIwF,EAAGxF,EAAIuF,EAAGvF,EAAIwF,EAAGxF,EAChCwc,EAAQjX,EAAGxF,EAAIyF,EAAGzF,EAAIwF,EAAGxF,EAAIyF,EAAGzF,EAChC0c,EAAQlX,EAAGvF,EAAIwF,EAAGxF,EAAIuF,EAAGvF,EAAIwF,EAAGxF,EAChC0c,EAAQ9W,EAAG7F,EAAI8F,EAAG9F,EAAI6F,EAAG7F,EAAI8F,EAAG9F,EAChC4c,EAAQ/W,EAAG5F,EAAI6F,EAAG7F,EAAI4F,EAAG5F,EAAI6F,EAAG7F,EAChC4c,EAAQhX,EAAG7F,EAAI8F,EAAG9F,EAAI6F,EAAG7F,EAAI8F,EAAG9F,EAChC8c,EAAQjX,EAAG5F,EAAI6F,EAAG7F,EAAI4F,EAAG5F,EAAI6F,EAAG7F,EAKhC8c,IAJUR,EAAQI,EAAQJ,EAAQI,IACxBF,EAAQI,EAAQJ,EAAQI,IAGL,EAC7BG,IAHUR,EAAQI,EAAQJ,EAAQI,IACxBF,EAAQI,EAAQJ,EAAQI,IAEL,EAC7BG,EAAMzX,EAAGxF,EAAI+c,EACbG,EAAM1X,EAAGvF,EAAI+c,EACbG,EAAM1X,EAAGzF,EAAI+c,EACbK,EAAM3X,EAAGxF,EAAI+c,EACbK,EAAMxX,EAAG7F,EAAI+c,EACbO,EAAMzX,EAAG5F,EAAI+c,EACbO,EAAMzX,EAAG9F,EAAI+c,EACbS,EAAM1X,EAAG7F,EAAI+c,EACbhI,EAAKkI,EAAME,EACXnI,EAAKkI,EAAMF,EACX/H,EAAK+H,EAAMG,EAAMD,EAAMD,EACvB/H,EAAKmI,EAAME,EACXpI,EAAKmI,EAAMF,EACXhI,EAAKgI,EAAMG,EAAMD,EAAMD,EAGvBzY,EAAImQ,EAAKI,EAAKD,EAAKF,EACnBK,GAHIL,EAAKI,EAAKD,EAAKF,GAGRrQ,EACX2Q,GAHIL,EAAKD,EAAKF,EAAKK,GAGRxQ,EACjB,OAAI9F,EAAOG,MAAMoW,IAAUvW,EAAOM,WAAWiW,IAASvW,EAAOG,MAAMsW,IAAUzW,EAAOM,WAAWmW,GACtF,KAEF,IAAIjU,EAAW+T,EAAOyH,EAAMvH,EAAOwH,EAC5C,IAAC,CAvC8B,GCFZS,GAAM,WAAA,OAAAjjB,GAAA,SAAAijB,IAAAtjB,OAAAsjB,EAAA,GAAA,KAAA,CAAA,CAAAhjB,IAAA,YAAAC,MACzB,SAAiBgjB,EAAKC,EAAQC,EAAMC,EAASzJ,GAE3C,IADA,IAAItS,EAAI,EACClD,EAAI+e,EAAQ/e,EAAI+e,EAASvJ,EAAKxV,IACrCgf,EAAKC,EAAU/b,GAAK4b,EAAI9e,GACxBkD,GAEJ,GAAC,CAAArH,IAAA,cAAAC,MAED,SAAmBsC,GACjB,MAAO,CACL,iBAAkB,MAClBA,EACJ,IAAC,CAbwB,GCCN8gB,GAAQ,WAAA,SAAAA,IAAA3jB,OAAA2jB,EAAA,CAAA,OAAAtjB,EAAAsjB,EAAA,KAAA,CAAA,CAAArjB,IAAA,QAAAC,MAC3B,SAAasF,GACX,IAAM+d,EAAK5iB,KAAK+Y,IAAIlU,GACpB,OAAIjB,EAAOM,WAAW0e,IAClBhf,EAAOG,MAAM6e,GADiBA,EAE3BA,EAAKD,EAASE,MACvB,GAAC,CAAAvjB,IAAA,MAAAC,MACD,SAAWujB,EAAIC,EAAIC,EAAIC,GACrB,IAAIpY,EAAMiY,EAIV,OAHIC,EAAKlY,IAAKA,EAAMkY,GAChBC,EAAKnY,IAAKA,EAAMmY,GAChBC,EAAKpY,IAAKA,EAAMoY,GACbpY,CACT,GAAC,CAAAvL,IAAA,QAAAC,MACD,WACE,GAA4B,iBAAjBH,UAAU,IAA4C,iBAAjBA,UAAU,IAA2C,iBAAjBA,UAAU,GAAkB,CAC9G,IAAMyF,EAAIzF,UAAU,GAAIyL,EAAMzL,UAAU,GAAI2L,EAAM3L,UAAU,GAC5D,OAAIyF,EAAIgG,EAAYA,EAChBhG,EAAIkG,EAAYA,EACblG,CACT,CAAO,GAAIZ,OAAOif,UAAU9jB,UAAU,KAAQ6E,OAAOif,UAAU9jB,UAAU,KAAO6E,OAAOif,UAAU9jB,UAAU,IAAM,CAC/G,IAAMyF,EAAIzF,UAAU,GAAIyL,EAAMzL,UAAU,GAAI2L,EAAM3L,UAAU,GAC5D,OAAIyF,EAAIgG,EAAYA,EAChBhG,EAAIkG,EAAYA,EACblG,CACT,CACF,GAAC,CAAAvF,IAAA,OAAAC,MACD,SAAYmS,EAAO3G,GACjB,OAAI2G,EAAQ,EACH3G,IAAO2G,EAAQ3G,EAEjB2G,EAAQ3G,CACjB,GAAC,CAAAzL,IAAA,MAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OAAc,CAC1B,IAAyBkiB,EAAK3jB,UAAU,GAAI4jB,EAAK5jB,UAAU,GACvD2L,EADO3L,UAAU,GAIrB,OAFI2jB,EAAKhY,IAAKA,EAAMgY,GAChBC,EAAKjY,IAAKA,EAAMiY,GACbjY,CACT,CAAO,GAAyB,IAArB3L,UAAUyB,OAAc,CACjC,IAAyBkiB,EAAK3jB,UAAU,GAAI4jB,EAAK5jB,UAAU,GAAI6jB,EAAK7jB,UAAU,GAC1E2L,EADO3L,UAAU,GAKrB,OAHI2jB,EAAKhY,IAAKA,EAAMgY,GAChBC,EAAKjY,IAAKA,EAAMiY,GAChBC,EAAKlY,IAAKA,EAAMkY,GACblY,CACT,CACF,GAAC,CAAAzL,IAAA,UAAAC,MACD,SAAe4D,EAAIC,GACjB,OAAQD,EAAKC,GAAM,CACrB,IAAC,CAnD0B,GAqD7Buf,GAASE,OAAS7iB,KAAK+Y,IAAI,ICpDY,IAClBoK,GAAQ,WAAA,SAAAA,IAAAnkB,OAAAmkB,EAAA,CAAA,OAAA9jB,EAAA8jB,EAAA,KAAA,CAAA,CAAA7jB,IAAA,mBAAAC,MAC3B,SAAwB6jB,EAAGC,EAAG7O,EAAG8O,GAC/B,GAAIF,EAAErd,OAAOsd,GAAI,OAAOF,EAASI,eAAeH,EAAG5O,EAAG8O,GACtD,GAAI9O,EAAEzO,OAAOud,GAAI,OAAOH,EAASI,eAAeD,EAAGF,EAAGC,GACtD,IAAIG,GAAiB,EACrB,GAAKjb,EAASc,WAAW+Z,EAAGC,EAAG7O,EAAG8O,GAE3B,CACL,IAAMG,GAASJ,EAAExe,EAAIue,EAAEve,IAAMye,EAAExe,EAAI0P,EAAE1P,IAAMue,EAAEve,EAAIse,EAAEte,IAAMwe,EAAEze,EAAI2P,EAAE3P,GACjE,GAAc,IAAV4e,EACFD,GAAiB,MACZ,CACL,IAAME,GAASN,EAAEte,EAAI0P,EAAE1P,IAAMwe,EAAEze,EAAI2P,EAAE3P,IAAMue,EAAEve,EAAI2P,EAAE3P,IAAMye,EAAExe,EAAI0P,EAAE1P,GAE3DoL,IADSkT,EAAEte,EAAI0P,EAAE1P,IAAMue,EAAExe,EAAIue,EAAEve,IAAMue,EAAEve,EAAI2P,EAAE3P,IAAMwe,EAAEve,EAAIse,EAAEte,IAC/C2e,EACZxO,EAAIyO,EAAQD,GACdxO,EAAI,GAAKA,EAAI,GAAK/E,EAAI,GAAKA,EAAI,KACjCsT,GAAiB,EAErB,CACF,MAdEA,GAAiB,EAenB,OAAIA,EACKb,GAAS9X,IAAIsY,EAASI,eAAeH,EAAG5O,EAAG8O,GAAIH,EAASI,eAAeF,EAAG7O,EAAG8O,GAAIH,EAASI,eAAe/O,EAAG4O,EAAGC,GAAIF,EAASI,eAAeD,EAAGF,EAAGC,IAEnJ,CACT,GAAC,CAAA/jB,IAAA,iBAAAC,MACD,SAAsBiK,EAAG4Z,EAAGC,GAC1B,GAAID,EAAEve,IAAMwe,EAAExe,GAAKue,EAAEte,IAAMue,EAAEve,EAAG,OAAO0E,EAAEQ,SAASoZ,GAClD,IAAMO,GAAQN,EAAExe,EAAIue,EAAEve,IAAMwe,EAAExe,EAAIue,EAAEve,IAAMwe,EAAEve,EAAIse,EAAEte,IAAMue,EAAEve,EAAIse,EAAEte,GAC1DmQ,IAAMzL,EAAE3E,EAAIue,EAAEve,IAAMwe,EAAExe,EAAIue,EAAEve,IAAM2E,EAAE1E,EAAIse,EAAEte,IAAMue,EAAEve,EAAIse,EAAEte,IAAM6e,EACpE,GAAI1O,GAAK,EAAK,OAAOzL,EAAEQ,SAASoZ,GAChC,GAAInO,GAAK,EAAK,OAAOzL,EAAEQ,SAASqZ,GAChC,IAAMnT,IAAMkT,EAAEte,EAAI0E,EAAE1E,IAAMue,EAAExe,EAAIue,EAAEve,IAAMue,EAAEve,EAAI2E,EAAE3E,IAAMwe,EAAEve,EAAIse,EAAEte,IAAM6e,EACpE,OAAO3jB,KAAKC,IAAIiQ,GAAKlQ,KAAKwH,KAAKmc,EACjC,GAAC,CAAArkB,IAAA,2BAAAC,MACD,SAAgCiK,EAAG4Z,EAAGC,GACpC,IAAMM,GAAQN,EAAExe,EAAIue,EAAEve,IAAMwe,EAAExe,EAAIue,EAAEve,IAAMwe,EAAEve,EAAIse,EAAEte,IAAMue,EAAEve,EAAIse,EAAEte,GAC1DoL,IAAMkT,EAAEte,EAAI0E,EAAE1E,IAAMue,EAAExe,EAAIue,EAAEve,IAAMue,EAAEve,EAAI2E,EAAE3E,IAAMwe,EAAEve,EAAIse,EAAEte,IAAM6e,EACpE,OAAO3jB,KAAKC,IAAIiQ,GAAKlQ,KAAKwH,KAAKmc,EACjC,GAAC,CAAArkB,IAAA,uBAAAC,MACD,SAA4BiK,EAAGoa,GAC7B,GAAoB,IAAhBA,EAAK/iB,OAAc,MAAM,IAAIsB,EAAyB,+CAE1D,IADA,IAAI0hB,EAAcra,EAAEQ,SAAS4Z,EAAK,IACzBngB,EAAI,EAAGA,EAAImgB,EAAK/iB,OAAS,EAAG4C,IAAK,CACxC,IAAMqgB,EAAOX,EAASI,eAAe/Z,EAAGoa,EAAKngB,GAAImgB,EAAKngB,EAAI,IACtDqgB,EAAOD,IACTA,EAAcC,EAElB,CACA,OAAOD,CACT,IAAC,CAlD0B,GCDRE,GAAyB,WAAA,OAAA1kB,GAAA,SAAA0kB,IAAA/kB,OAAA+kB,EAAA,GAAA,CAAA,CAAAzkB,IAAA,SAAAC,MAC5C,WACE,GAAyB,IAArBH,UAAUyB,OACRzB,UAAU,aAAcmR,OAEjBwB,GAAa3S,UAAU,GAAI2b,SAGjC,GAAyB,IAArB3b,UAAUyB,aAEd,GAAyB,IAArBzB,UAAUyB,OAAc,CACjC,IAAMyP,EAAOlR,UAAU,GAAI4kB,EAAY5kB,UAAU,GACjD,OAAOD,KAAK8kB,OAAO3T,EAAM0T,EAC3B,CACF,IAAC,CAd2C,GCFzBE,GAAgB,WAAA,OAAA7kB,GAAA,SAAA6kB,IAAAllB,OAAAklB,EAAA,GAAA,CAAA,CAAA5kB,IAAA,SAAAC,MACnC,SAAO6d,GAAO,IAAE,CADmB,GCChB+G,GAAM,WAAA,OAAA9kB,GAAA,SAAA8kB,IAAAnlB,OAAAmlB,EAAA,GAAA,KAAA,CAAA,CAAA7kB,IAAA,SAAAC,MACzB,SAAcod,GACZ,IAAM3Y,EAAI2Y,EAAIrM,OACd,GAAItM,GAAK,EAAG,OAAO,EACnB,IAAIiV,EAAM,EACJzP,EAAI,IAAIpD,EACduW,EAAIX,cAAc,EAAGxS,GAGrB,IAFA,IAAI4a,EAAK5a,EAAE3E,EACPwf,EAAK7a,EAAE1E,EACFrB,EAAI,EAAGA,EAAIO,EAAGP,IAAK,CAC1BkZ,EAAIX,cAAcvY,EAAG+F,GACrB,IAAMrG,EAAKqG,EAAE3E,EACP0F,EAAKf,EAAE1E,EACPuC,EAAKlE,EAAKihB,EACV9c,EAAKiD,EAAK8Z,EAChBpL,GAAOjZ,KAAKwH,KAAKH,EAAKA,EAAKC,EAAKA,GAChC8c,EAAKjhB,EACLkhB,EAAK9Z,CACP,CACA,OAAO0O,CACT,IAAC,CApBwB,GCDNqL,GAAMjlB,GAAA,SAAAilB,IAAAtlB,OAAAslB,EAAA,ICINC,GAAmB,WAAA,SAAAA,IAAAvlB,OAAAulB,EAAA,CAAA,OAAAllB,EAAAklB,EAAA,KAAA,CAAA,CAAAjlB,IAAA,YAAAC,MACtC,SAAiBgjB,EAAKC,EAAQC,EAAMC,GAElC,IADA,IAAM8B,EAASxkB,KAAK6K,IAAI0X,EAAIrH,eAAgBuH,EAAKvH,gBACxCuJ,EAAM,EAAGA,EAAMD,EAAQC,IAC9BhC,EAAKiC,YAAYhC,EAAS+B,EAAKlC,EAAInH,YAAYoH,EAAQiC,GAE3D,GAAC,CAAAnlB,IAAA,SAAAC,MACD,SAAcolB,GACZ,IAAM3gB,EAAI2gB,EAAIrU,OACd,OAAU,IAANtM,KACAA,GAAK,KACF2gB,EAAIvJ,YAAY,EAAGL,GAAmBzU,KAAOqe,EAAIvJ,YAAYpX,EAAI,EAAG+W,GAAmBzU,IAAMqe,EAAIvJ,YAAY,EAAGL,GAAmBxU,KAAOoe,EAAIvJ,YAAYpX,EAAI,EAAG+W,GAAmBxU,GAC7L,GAAC,CAAAjH,IAAA,SAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,QACZ,GAAIkR,GAAa3S,UAAU,GAAI2b,KAAuB9W,OAAOif,UAAU9jB,UAAU,IAAK,CACpF,IAAMulB,EAAMvlB,UAAU,GAAIwlB,EAAyBxlB,UAAU,GAC7DmlB,EAAoBM,OAAOF,EAAKC,EAAwBL,EAAoBO,OAAOH,GACrF,MAAO,GAAI5S,GAAa3S,UAAU,GAAI2b,KAAuB3b,UAAU,aAAcgH,EAAY,CAC/F,IAAMue,EAAMvlB,UAAU,GAAI2lB,EAAkB3lB,UAAU,GAChDqE,EAAI8gB,EAAoB1S,QAAQkT,EAAiBJ,GACvD,GAAIlhB,GAAK,EAAG,OAAO,KACnB8gB,EAAoBM,OAAOF,EAAKlhB,EAClC,OACK,GAAyB,IAArBrE,UAAUyB,OAAc,CACjC,IAAM8jB,EAAMvlB,UAAU,GAAIwlB,EAAyBxlB,UAAU,GAAI4lB,EAAa5lB,UAAU,GAExF,GADUwlB,GACD,EAAG,OAAO,KAGnB,IAFA,IAAMzY,EAAOwY,EAAIxY,OACX8Y,EAAOD,EAAaL,EAAIrU,OAAS,EAAIqU,EAAIrU,OACtCtD,EAAI,EAAGA,EAAIiY,EAAMjY,IACxB,IAAK,IAAIkY,EAAI,EAAGA,EAAIP,EAAIzJ,eAAgBgK,IAAKP,EAAID,YAAY1X,EAAGkY,EAAG/Y,EAAKiP,aAAawJ,EAAyB5X,GAAKiY,EAAMC,IAE3H,GAAIF,EACF,IAAK,IAAIE,EAAI,EAAGA,EAAIP,EAAIzJ,eAAgBgK,IAAKP,EAAID,YAAYO,EAAMC,EAAGP,EAAIvJ,YAAY,EAAG8J,GAE7F,CACF,GAAC,CAAA5lB,IAAA,UAAAC,MACD,SAAe4lB,EAAKC,GAClB,IAAMC,EAAUF,EAAI7U,OAEpB,GAAI+U,IADYD,EAAI9U,OACK,OAAO,EAEhC,IADA,IAAMmU,EAAMzkB,KAAK6K,IAAIsa,EAAIjK,eAAgBkK,EAAIlK,gBACpCzX,EAAI,EAAGA,EAAI4hB,EAAS5hB,IAC3B,IAAK,IAAI+U,EAAI,EAAGA,EAAIiM,EAAKjM,IAAK,CAC5B,IAAMsK,EAAKqC,EAAI/J,YAAY3X,EAAG+U,GACxBuK,EAAKqC,EAAIhK,YAAY3X,EAAG+U,GAC9B,GAAI2M,EAAI/J,YAAY3X,EAAG+U,KAAO4M,EAAIhK,YAAY3X,EAAG+U,MAC7C5U,EAAOG,MAAM+e,KAAOlf,EAAOG,MAAMgf,IACrC,OAAO,CACT,CAEF,OAAO,CACT,GAAC,CAAAzjB,IAAA,qBAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OAAc,CAC1B,IAAM8jB,EAAMvlB,UAAU,GACtB,OAAOmlB,EAAoBe,mBAAmBX,EAAK,EAAGA,EAAIrU,OAAS,EACrE,CAAO,GAAyB,IAArBlR,UAAUyB,OAAc,CAIjC,IAHA,IAAM8jB,EAAMvlB,UAAU,GAAyBmmB,EAAKnmB,UAAU,GAC1DomB,GAAiB,EACjBC,EAAW,KACNhiB,EAHwBrE,UAAU,GAGxBqE,GAAK8hB,EAAI9hB,IAAK,CAC/B,IAAMiiB,EAAYf,EAAI3I,cAAcvY,IACnB,OAAbgiB,GAAqBA,EAASnY,UAAUoY,GAAa,KACvDD,EAAWC,EACXF,EAAgB/hB,EAEpB,CACA,OAAO+hB,CACT,CACF,GAAC,CAAAlmB,IAAA,SAAAC,MACD,SAAcomB,EAAMhB,EAAKrU,GACvB,IAAMsV,EAASD,EAAK1B,OAAO3T,EAAMqU,EAAIzJ,gBAC/BlX,EAAI2gB,EAAIrU,OAEd,GADAiU,EAAoBpY,KAAKwY,EAAK,EAAGiB,EAAQ,EAAG5hB,GACxCA,EAAI,EACN,IAAK,IAAIP,EAAIO,EAAGP,EAAI6M,EAAM7M,IAAK8gB,EAAoBpY,KAAKwY,EAAK3gB,EAAI,EAAG4hB,EAAQniB,EAAG,GAEjF,OAAOmiB,CACT,GAAC,CAAAtmB,IAAA,UAAAC,MACD,SAAeolB,GAGb,IAFA,IAAMM,EAAON,EAAIrU,OAAS,EACpBuV,EAAM7lB,KAAKyT,MAAMwR,EAAO,GACrBxhB,EAAI,EAAGA,GAAKoiB,EAAKpiB,IACxB8gB,EAAoBuB,KAAKnB,EAAKlhB,EAAGwhB,EAAOxhB,EAE5C,GAAC,CAAAnE,IAAA,OAAAC,MACD,SAAYolB,EAAKlhB,EAAGuJ,GAClB,GAAIvJ,IAAMuJ,EAAG,OAAO,KACpB,IAAK,IAAIyX,EAAM,EAAGA,EAAME,EAAIzJ,eAAgBuJ,IAAO,CACjD,IAAMsB,EAAMpB,EAAIvJ,YAAY3X,EAAGghB,GAC/BE,EAAID,YAAYjhB,EAAGghB,EAAKE,EAAIvJ,YAAYpO,EAAGyX,IAC3CE,EAAID,YAAY1X,EAAGyX,EAAKsB,EAC1B,CACF,GAAC,CAAAzmB,IAAA,OAAAC,MACD,SAAYgjB,EAAKC,EAAQC,EAAMC,EAAS7hB,GACtC,IAAK,IAAI4C,EAAI,EAAGA,EAAI5C,EAAQ4C,IAC1B8gB,EAAoByB,UAAUzD,EAAKC,EAAS/e,EAAGgf,EAAMC,EAAUjf,EAEnE,GAAC,CAAAnE,IAAA,kBAAAC,MACD,SAAuBomB,EAAMhB,GAC3B,IAAM3gB,EAAI2gB,EAAIrU,OACd,OAAU,IAANtM,EAAgB2gB,EAChB3gB,GAAK,EAAUugB,EAAoB0B,iBAAiBN,EAAMhB,EAAK,GAClDA,EAAIvJ,YAAY,EAAGL,GAAmBzU,KAAOqe,EAAIvJ,YAAYpX,EAAI,EAAG+W,GAAmBzU,IAAMqe,EAAIvJ,YAAY,EAAGL,GAAmBxU,KAAOoe,EAAIvJ,YAAYpX,EAAI,EAAG+W,GAAmBxU,GAChLoe,EACdJ,EAAoB0B,iBAAiBN,EAAMhB,EAAK3gB,EAAI,EAC7D,GAAC,CAAA1E,IAAA,UAAAC,MACD,SAAe2mB,EAAYvB,GACzB,IAAK,IAAIlhB,EAAI,EAAGA,EAAIkhB,EAAIrU,OAAQ7M,IAC9B,GAAIyiB,EAAWrhB,IAAM8f,EAAIvJ,YAAY3X,EAAGsX,GAAmBzU,IAAM4f,EAAWphB,IAAM6f,EAAIvJ,YAAY3X,EAAGsX,GAAmBxU,GACtH,OAAO9C,EAGX,OAAQ,CACV,GAAC,CAAAnE,IAAA,mBAAAC,MACD,SAAwBomB,EAAMhB,EAAKrU,GACjC,IAAMsV,EAASD,EAAK1B,OAAO3T,EAAMqU,EAAIzJ,gBAC/BlX,EAAI2gB,EAAIrU,OACdiU,EAAoBpY,KAAKwY,EAAK,EAAGiB,EAAQ,EAAG5hB,GAC5C,IAAK,IAAIP,EAAIO,EAAGP,EAAI6M,EAAM7M,IAAK8gB,EAAoBpY,KAAKwY,EAAK,EAAGiB,EAAQniB,EAAG,GAC3E,OAAOmiB,CACT,GAAC,CAAAtmB,IAAA,gBAAAC,MACD,SAAqBolB,GAEnB,IADA,IAAIc,EAAW,KACNhiB,EAAI,EAAGA,EAAIkhB,EAAIrU,OAAQ7M,IAAK,CACnC,IAAMiiB,EAAYf,EAAI3I,cAAcvY,IACnB,OAAbgiB,GAAqBA,EAASnY,UAAUoY,GAAa,KACvDD,EAAWC,EAEf,CACA,OAAOD,CACT,IAAC,CArIqC,GCFnBU,GAAS,WAAA,SAAAA,IAAAnnB,OAAAmnB,EAAA,CAAA,OAAA9mB,EAAA8mB,EAAA,KAAA,CAAA,CAAA7mB,IAAA,oBAAAC,MAC5B,SAAyB6mB,GACvB,OAAQA,GACR,KAAKD,EAAUE,MACb,OAAOF,EAAUG,UACnB,KAAKH,EAAUI,KACb,OAAOJ,EAAUK,SACnB,KAAKL,EAAUM,SACb,OAAON,EAAUO,aACnB,KAAKP,EAAUQ,EACb,OAAOR,EAAUS,MACnB,KAAKT,EAAUU,EACb,OAAOV,EAAUW,MACnB,KAAKX,EAAU/C,EACb,OAAO+C,EAAUY,MAEnB,MAAM,IAAI5kB,EAAyB,4BAA8BikB,EACnE,GAAC,CAAA9mB,IAAA,mBAAAC,MACD,SAAwBynB,GACtB,OAAQ5U,GAAUC,YAAY2U,IAC9B,KAAKb,EAAUG,UACb,OAAOH,EAAUE,MACnB,KAAKF,EAAUK,SACb,OAAOL,EAAUI,KACnB,KAAKJ,EAAUO,aACb,OAAOP,EAAUM,SACnB,KAAKN,EAAUS,MACb,OAAOT,EAAUQ,EACnB,KAAKR,EAAUW,MACb,OAAOX,EAAUU,EACnB,KAAKV,EAAUY,MACb,OAAOZ,EAAU/C,EAEnB,MAAM,IAAIjhB,EAAyB,6BAA+B6kB,EACpE,IAAC,CAlC2B,GAoC9Bb,GAAUQ,EAAI,EACdR,GAAUU,EAAI,EACdV,GAAU/C,EAAI,EACd+C,GAAUE,OAAS,EACnBF,GAAUI,MAAQ,EAClBJ,GAAUM,UAAY,EACtBN,GAAUG,UAAY,IACtBH,GAAUK,SAAW,IACrBL,GAAUO,aAAe,IACzBP,GAAUS,MAAQ,IAClBT,GAAUW,MAAQ,IAClBX,GAAUY,MAAQ,QCjDGE,GAAc,WAAA,OAAA5nB,GAAA,SAAA4nB,IAAAjoB,OAAAioB,EAAA,GAAA,CAAA,CAAA3nB,IAAA,SAAAC,MACjC,SAAO+C,GAAM,IAAE,CADkB,GCAd4kB,GAAwB,WAAA,OAAA7nB,GAAA,SAAA6nB,IAAAloB,OAAAkoB,EAAA,GAAA,CAAA,CAAA5nB,IAAA,SAAAC,MAC3C,SAAOolB,EAAKlhB,GAAG,GAAE,CAAAnE,IAAA,SAAAC,MACjB,WAAS,GAAE,CAAAD,IAAA,oBAAAC,MACX,WAAoB,IAAE,CAHqB,GCaxB4nB,YAAUC,GAC7B,SAAAD,IAAc,IAAAxlB,EAEkC,OAFlC3C,OAAAmoB,GACZxlB,EAAAC,EAAAzC,KAAAgoB,GACAA,EAAWloB,aAAaC,MAAKyC,EAAOvC,WAAUuC,CAChD,CAAC,OAAAK,EAAAmlB,EAAAC,GAAA/nB,EAAA8nB,EAAA,CAAA,CAAA7nB,IAAA,0BAAAC,MASD,WACE,OAAIJ,KAAKwM,UACA,IAAIpD,EAENpJ,KAAKkoB,QAAQC,eAAe,IAAI/e,EACzC,GAAC,CAAAjJ,IAAA,SAAAC,MACD,WACE,OAAOJ,KAAKooB,YAAcpoB,KAAKqoB,UACjC,GAAC,CAAAloB,IAAA,iBAAAC,MACD,WACE,OAAOJ,KAAKkoB,QAAQI,mBACtB,GAAC,CAAAnoB,IAAA,eAAAC,MACD,WACE,OAAO,IAAI4nB,EAAWhoB,KAAKkoB,QAAQlb,OAAQhN,KAAKkM,SAClD,GAAC,CAAA/L,IAAA,cAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,QAAyC,iBAAjBzB,UAAU,IAAmBA,UAAU,aAAc8L,EAAW,CACpG,IAAMxE,EAAQtH,UAAU,GAAIiE,EAAYjE,UAAU,GAClD,IAAKD,KAAKuoB,kBAAkBhhB,GAC1B,OAAO,EAET,IAAMihB,EAAkBjhB,EACxB,GAAIvH,KAAKkoB,QAAQ/W,SAAWqX,EAAgBN,QAAQ/W,OAClD,OAAO,EAET,IAAK,IAAI7M,EAAI,EAAGA,EAAItE,KAAKkoB,QAAQ/W,OAAQ7M,IACvC,IAAKtE,KAAKyoB,MAAMzoB,KAAKkoB,QAAQrL,cAAcvY,GAAIkkB,EAAgBN,QAAQrL,cAAcvY,GAAIJ,GACvF,OAAO,EAGX,OAAO,CACT,CACE,OAAOwkB,EAAAV,EAAA,cAAAhoB,KAAA,GAAkBD,MAAMC,KAAMC,UAEzC,GAAC,CAAAE,IAAA,YAAAC,MACD,WACE,IAAK,IAAIkE,EAAI,EAAGA,EAAIzD,KAAKyT,MAAMtU,KAAKkoB,QAAQ/W,OAAS,GAAI7M,IAAK,CAC5D,IAAMuJ,EAAI7N,KAAKkoB,QAAQ/W,OAAS,EAAI7M,EACpC,IAAKtE,KAAKkoB,QAAQrL,cAAcvY,GAAGsC,OAAO5G,KAAKkoB,QAAQrL,cAAchP,IAAK,CACxE,GAAI7N,KAAKkoB,QAAQrL,cAAcvY,GAAG6J,UAAUnO,KAAKkoB,QAAQrL,cAAchP,IAAM,EAAG,CAC9E,IAAMb,EAAOhN,KAAKkoB,QAAQlb,OAC1BoY,GAAoBuD,QAAQ3b,GAC5BhN,KAAKkoB,QAAUlb,CACjB,CACA,OAAO,IACT,CACF,CACF,GAAC,CAAA7M,IAAA,gBAAAC,MACD,WACE,OAAIJ,KAAKwM,UAAkB,KACpBxM,KAAKkoB,QAAQrL,cAAc,EACpC,GAAC,CAAA1c,IAAA,uBAAAC,MACD,WACE,OAAIJ,KAAKooB,WACApB,GAAUE,MAEZ,CACT,GAAC,CAAA/mB,IAAA,WAAAC,MACD,WACE,OAAIJ,KAAKwM,WAGFxM,KAAK4oB,eAAe,GAAG9gB,SAAS9H,KAAK4oB,eAAe5oB,KAAK6oB,eAAiB,GACnF,GAAC,CAAA1oB,IAAA,kBAAAC,MACD,WACE,IAAMolB,EAAMxlB,KAAKkoB,QAAQlb,OAEzB,OADAoY,GAAoBuD,QAAQnD,GACrBxlB,KAAK6M,aAAaic,iBAAiBtD,EAC5C,GAAC,CAAArlB,IAAA,cAAAC,MACD,WACE,OAAIJ,KAAKwM,UACA,KAEFxM,KAAK+oB,UAAU/oB,KAAK6oB,eAAiB,EAC9C,GAAC,CAAA1oB,IAAA,cAAAC,MACD,WACE,OAAO2L,EAAS6C,mBAClB,GAAC,CAAAzO,IAAA,eAAAC,MACD,WACE,OAAO,CACT,GAAC,CAAAD,IAAA,YAAAC,MACD,WACE,OAAO4kB,GAAOgE,OAAOhpB,KAAKkoB,QAC5B,GAAC,CAAA/nB,IAAA,eAAAC,MACD,WACE,OAAOJ,KAAKkoB,QAAQ/W,MACtB,GAAC,CAAAhR,IAAA,qBAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OAAc,CAK1B,IAJA,IACM+iB,EADIxkB,UAAU,GAEhBqE,EAAI,EACJuJ,EAAI,EACDvJ,EAAItE,KAAKkoB,QAAQ/W,QAAUtD,EAAI4W,EAAKyD,QAAQ/W,QAAQ,CACzD,IAAMjD,EAAalO,KAAKkoB,QAAQrL,cAAcvY,GAAG6J,UAAUsW,EAAKyD,QAAQrL,cAAchP,IACtF,GAAmB,IAAfK,EACF,OAAOA,EAET5J,IACAuJ,GACF,CACA,OAAIvJ,EAAItE,KAAKkoB,QAAQ/W,OACZ,EAELtD,EAAI4W,EAAKyD,QAAQ/W,QACX,EAEH,CACT,CAAO,GAAyB,IAArBlR,UAAUyB,OAAc,CACjC,IACM+iB,EADIxkB,UAAU,GAEpB,OAF+BA,UAAU,GAE7B6I,QAAQ9I,KAAKkoB,QAASzD,EAAKyD,QACzC,CACF,GAAC,CAAA/nB,IAAA,QAAAC,MACD,WACE,GAAIwS,GAAa3S,UAAU,GAAI8kB,IAE7B,IADA,IAAMvV,EAASvP,UAAU,GAChBqE,EAAI,EAAGA,EAAItE,KAAKkoB,QAAQ/W,OAAQ7M,IACvCkL,EAAOA,OAAOxP,KAAKkoB,QAAQrL,cAAcvY,SAEtC,GAAIsO,GAAa3S,UAAU,GAAI8nB,IAA2B,CAC/D,IAAMvY,EAASvP,UAAU,GACzB,GAA4B,IAAxBD,KAAKkoB,QAAQ/W,OAAc,OAAO,KACtC,IAAK,IAAI7M,EAAI,EAAGA,EAAItE,KAAKkoB,QAAQ/W,SAC/B3B,EAAOA,OAAOxP,KAAKkoB,QAAS5jB,IACxBkL,EAAOyZ,UAF4B3kB,KAIrCkL,EAAO0Z,qBAAqBlpB,KAAKmpB,iBACtC,MAAM,GAAIvW,GAAa3S,UAAU,GAAI6nB,IAAiB,CACtC7nB,UAAU,GAClBuP,OAAOxP,KACf,MAAM,GAAI4S,GAAa3S,UAAU,GAAIiD,GAA0B,CAC/CjD,UAAU,GAClBuP,OAAOxP,KAChB,CACF,GAAC,CAAAG,IAAA,cAAAC,MACD,WACE,MAAM,IAAI8P,CACZ,GAAC,CAAA/P,IAAA,oBAAAC,MACD,SAAkBmH,GAChB,OAAOA,aAAiBygB,CAC1B,GAAC,CAAA7nB,IAAA,iBAAAC,MACD,SAAeyE,GACb,OAAO7E,KAAKkoB,QAAQrL,cAAchY,EACpC,GAAC,CAAA1E,IAAA,kBAAAC,MACD,WACE,OAAO2L,EAASkD,mBAClB,GAAC,CAAA9O,IAAA,wBAAAC,MACD,WACE,OAAOJ,KAAKkoB,OACd,GAAC,CAAA/nB,IAAA,UAAAC,MACD,WACE,OAA+B,IAAxBJ,KAAKkoB,QAAQ/W,MACtB,GAAC,CAAAhR,IAAA,OAAAC,MACD,SAAKgpB,GAIH,GAHe,OAAXA,IACFA,EAASppB,KAAK6M,aAAawc,+BAA+BvE,OAAO,KAE7C,IAAlBsE,EAAOjY,OACT,MAAM,IAAInO,EAAyB,iDAAmDomB,EAAOjY,OAAS,yBAExGnR,KAAKkoB,QAAUkB,CACjB,GAAC,CAAAjpB,IAAA,eAAAC,MACD,SAAa4e,GACX,IAAK,IAAI1a,EAAI,EAAGA,EAAItE,KAAKkoB,QAAQ/W,OAAQ7M,IACvC,GAAItE,KAAKkoB,QAAQrL,cAAcvY,GAAGsC,OAAOoY,GACvC,OAAO,EAGX,OAAO,CACT,GAAC,CAAA7e,IAAA,gBAAAC,MACD,WACE,OAAIJ,KAAKwM,UACA,KAEFxM,KAAK+oB,UAAU,EACxB,GAAC,CAAA5oB,IAAA,YAAAC,MACD,SAAUyE,GACR,OAAO7E,KAAK6M,aAAayc,YAAYtpB,KAAKkoB,QAAQrL,cAAchY,GAClE,GAAC,CAAA1E,IAAA,cAAAoI,IACD,WACE,MAAO,CAAC4c,GACV,IAAC,CAAA,CAAAhlB,IAAA,eAAAC,MA9LD,WAEE,GADAJ,KAAKkoB,QAAU,KACU,IAArBjoB,UAAUyB,aAAsB,GAAyB,IAArBzB,UAAUyB,OAAc,CAC9D,IAAM0nB,EAASnpB,UAAU,GAAIyO,EAAUzO,UAAU,GACjD8L,EAASjM,aAAauG,KAAKrG,KAAM0O,GACjC1O,KAAK4K,KAAKwe,EACZ,CACF,IAAC,EAZqCrd,GCbnBwd,GAAMrpB,GAAA,SAAAqpB,IAAA1pB,OAAA0pB,EAAA,ICUNC,YAAKvB,GACxB,SAAAuB,IAAc,IAAAhnB,EAE6B,OAF7B3C,OAAA2pB,GACZhnB,EAAAC,EAAAzC,KAAAwpB,GACAA,EAAM1pB,aAAaC,MAAKyC,EAAOvC,WAAUuC,CAC3C,CAAC,OAAAK,EAAA2mB,EAAAvB,GAAA/nB,EAAAspB,EAAA,CAAA,CAAArpB,IAAA,0BAAAC,MAOD,WACE,GAAIJ,KAAKwM,UACP,OAAO,IAAIpD,EAEb,IAAMa,EAAM,IAAIb,EAEhB,OADAa,EAAIQ,gBAAgBzK,KAAKypB,aAAaC,KAAK,GAAI1pB,KAAKypB,aAAaE,KAAK,IAC/D1f,CACT,GAAC,CAAA9J,IAAA,iBAAAC,MACD,WACE,OAAOJ,KAAKwM,UAAY,GAAK,CAACxM,KAAK6c,gBACrC,GAAC,CAAA1c,IAAA,eAAAC,MACD,WACE,OAAO,IAAIopB,EAAMxpB,KAAKypB,aAAazc,OAAQhN,KAAKkM,SAClD,GAAC,CAAA/L,IAAA,cAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,QAAyC,iBAAjBzB,UAAU,IAAmBA,UAAU,aAAc8L,EAAW,CACpG,IAAMxE,EAAQtH,UAAU,GAAIiE,EAAYjE,UAAU,GAClD,QAAKD,KAAKuoB,kBAAkBhhB,QAGxBvH,KAAKwM,YAAajF,EAAMiF,YAGxBxM,KAAKwM,YAAcjF,EAAMiF,WAGtBxM,KAAKyoB,MAAMlhB,EAAMsV,gBAAiB7c,KAAK6c,gBAAiB3Y,GACjE,CACE,OAAOwkB,EAAAc,EAAA,cAAAxpB,KAAA,GAAkBD,MAAMC,KAAMC,UAEzC,GAAC,CAAAE,IAAA,YAAAC,MACD,WAAY,GAAE,CAAAD,IAAA,gBAAAC,MACd,WACE,OAAoC,IAA7BJ,KAAKypB,aAAatY,OAAenR,KAAKypB,aAAa5M,cAAc,GAAK,IAC/E,GAAC,CAAA1c,IAAA,uBAAAC,MACD,WACE,OAAO4mB,GAAUE,KACnB,GAAC,CAAA/mB,IAAA,kBAAAC,MACD,WACE,OAAOJ,KAAK6M,aAAayc,YAAYtpB,KAAKypB,aAAazc,OACzD,GAAC,CAAA7M,IAAA,cAAAC,MACD,WACE,OAAO2L,EAAS4C,cAClB,GAAC,CAAAxO,IAAA,eAAAC,MACD,WACE,OAAO,CACT,GAAC,CAAAD,IAAA,eAAAC,MACD,WACE,OAAOJ,KAAKwM,UAAY,EAAI,CAC9B,GAAC,CAAArM,IAAA,OAAAC,MACD,WACE,GAA6B,OAAzBJ,KAAK6c,gBACP,MAAM,IAAI3E,sBAAsB,8BAElC,OAAOlY,KAAK6c,gBAAgBnX,CAC9B,GAAC,CAAAvF,IAAA,qBAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OAAc,CAC1B,IACMkoB,EADQ3pB,UAAU,GAExB,OAAOD,KAAK6c,gBAAgB1O,UAAUyb,EAAM/M,gBAC9C,CAAO,GAAyB,IAArB5c,UAAUyB,OAAc,CACjC,IACMkoB,EADQ3pB,UAAU,GAExB,OAFmCA,UAAU,GAEjC6I,QAAQ9I,KAAKypB,aAAcG,EAAMH,aAC/C,CACF,GAAC,CAAAtpB,IAAA,QAAAC,MACD,WACE,GAAIwS,GAAa3S,UAAU,GAAI8kB,IAAmB,CAChD,IAAMvV,EAASvP,UAAU,GACzB,GAAID,KAAKwM,UACP,OAAO,KAETgD,EAAOA,OAAOxP,KAAK6c,gBACpB,MAAM,GAAIjK,GAAa3S,UAAU,GAAI8nB,IAA2B,CAC/D,IAAMvY,EAASvP,UAAU,GACzB,GAAID,KAAKwM,UAAW,OAAO,KAC3BgD,EAAOA,OAAOxP,KAAKypB,aAAc,GAC7Bja,EAAO0Z,qBAAqBlpB,KAAKmpB,iBACtC,MAAM,GAAIvW,GAAa3S,UAAU,GAAI6nB,IAAiB,CACtC7nB,UAAU,GAClBuP,OAAOxP,KACf,MAAM,GAAI4S,GAAa3S,UAAU,GAAIiD,GAA0B,CAC/CjD,UAAU,GAClBuP,OAAOxP,KAChB,CACF,GAAC,CAAAG,IAAA,cAAAC,MACD,WACE,OAAOJ,KAAK6M,aAAagd,0BAC3B,GAAC,CAAA1pB,IAAA,kBAAAC,MACD,WACE,OAAO2L,EAASgD,cAClB,GAAC,CAAA5O,IAAA,wBAAAC,MACD,WACE,OAAOJ,KAAKypB,YACd,GAAC,CAAAtpB,IAAA,OAAAC,MACD,WACE,GAA6B,OAAzBJ,KAAK6c,gBACP,MAAM,IAAI3E,sBAAsB,8BAElC,OAAOlY,KAAK6c,gBAAgBlX,CAC9B,GAAC,CAAAxF,IAAA,UAAAC,MACD,WACE,OAAoC,IAA7BJ,KAAKypB,aAAatY,MAC3B,GAAC,CAAAhR,IAAA,OAAAC,MACD,SAAK0pB,GACiB,OAAhBA,IACFA,EAAc9pB,KAAK6M,aAAawc,+BAA+BvE,OAAO,KAExExe,EAAOG,OAAOqjB,EAAY3Y,QAAU,GACpCnR,KAAKypB,aAAeK,CACtB,GAAC,CAAA3pB,IAAA,WAAAC,MACD,WACE,OAAO,CACT,GAAC,CAAAD,IAAA,cAAAoI,IACD,WACE,MAAO,CAACghB,GACV,IAAC,CAAA,CAAAppB,IAAA,eAAAC,MA3HD,WACEJ,KAAKypB,aAAe,KACpB,IAAMK,EAAc7pB,UAAU,GAAIyO,EAAUzO,UAAU,GACtD8L,EAASjM,aAAauG,KAAKrG,KAAM0O,GACjC1O,KAAK4K,KAAKkf,EACZ,IAAC,EAVgC/d,GCPdge,GAAI,WAAA,SAAAA,IAAAlqB,OAAAkqB,EAAA,CAAA,OAAA7pB,EAAA6pB,EAAA,KAAA,CAAA,CAAA5pB,IAAA,SAAAC,MACvB,WACE,GAAIH,UAAU,aAAcmR,MAAO,CACjC,IAAMiL,EAAOpc,UAAU,GACvB,OAAOY,KAAKC,IAAIipB,EAAKC,aAAa3N,GACnC,CAAM,GAAIzJ,GAAa3S,UAAU,GAAI2b,IAAqB,CACzD,IAAMS,EAAOpc,UAAU,GACvB,OAAOY,KAAKC,IAAIipB,EAAKC,aAAa3N,GACpC,CACF,GAAC,CAAAlc,IAAA,eAAAC,MACD,WACE,GAAIH,UAAU,aAAcmR,MAAO,CACjC,IAAMiL,EAAOpc,UAAU,GACvB,GAAIoc,EAAK3a,OAAS,EAAG,OAAO,EAG5B,IAFA,IAAIuoB,EAAM,EACJhF,EAAK5I,EAAK,GAAG3W,EACVpB,EAAI,EAAGA,EAAI+X,EAAK3a,OAAS,EAAG4C,IAAK,CACxC,IAAMoB,EAAI2W,EAAK/X,GAAGoB,EAAIuf,EAChB7Z,EAAKiR,EAAK/X,EAAI,GAAGqB,EAEvBskB,GAAOvkB,GADI2W,EAAK/X,EAAI,GAAGqB,EACNyF,EACnB,CACA,OAAO6e,EAAM,CACd,CAAM,GAAIrX,GAAa3S,UAAU,GAAI2b,IAAqB,CACzD,IAAMS,EAAOpc,UAAU,GACjB4E,EAAIwX,EAAKlL,OACf,GAAItM,EAAI,EAAG,OAAO,EAClB,IAAMqlB,EAAK,IAAIjjB,EACTiE,EAAK,IAAIjE,EACTkE,EAAK,IAAIlE,EACfoV,EAAKQ,cAAc,EAAG3R,GACtBmR,EAAKQ,cAAc,EAAG1R,GACtB,IAAM8Z,EAAK/Z,EAAGxF,EACdyF,EAAGzF,GAAKuf,EAER,IADA,IAAIgF,EAAM,EACD3lB,EAAI,EAAGA,EAAIO,EAAI,EAAGP,IACzB4lB,EAAGvkB,EAAIuF,EAAGvF,EACVuF,EAAGxF,EAAIyF,EAAGzF,EACVwF,EAAGvF,EAAIwF,EAAGxF,EACV0W,EAAKQ,cAAcvY,EAAI,EAAG6G,GAC1BA,EAAGzF,GAAKuf,EACRgF,GAAO/e,EAAGxF,GAAKwkB,EAAGvkB,EAAIwF,EAAGxF,GAE3B,OAAOskB,EAAM,CACf,CACF,IAAC,CA7CsB,GCEJE,GAAM,WAAA,OAAAjqB,GAAA,SAAAiqB,IAAAtqB,OAAAsqB,EAAA,GAAA,KAAA,CAAA,CAAAhqB,IAAA,OAAAC,MACzB,WAAc,IAAAgqB,EAAAnqB,UACNiJ,EAAIjJ,UAAU,GACpB,GAAyB,IAArBA,UAAUyB,OACZwH,EAAEuW,MAAK,SAACvW,EAAGC,GAAC,OAAKD,EAAEiF,UAAUhF,WACxB,GAAyB,IAArBlJ,UAAUyB,OACnBwH,EAAEuW,MAAK,SAACvW,EAAGC,GAAC,OAAKlJ,EAAU,GAAG6I,QAAQI,EAAGC,WACpC,GAAyB,IAArBlJ,UAAUyB,OAAc,CACjC,IAAMmV,EAAI3N,EAAEyJ,MAAM1S,UAAU,GAAIA,UAAU,IAC1C4W,EAAE4I,OACF,IAAM3J,EAAI5M,EAAEyJ,MAAM,EAAG1S,UAAU,IAAIoqB,OAAOxT,EAAG3N,EAAEyJ,MAAM1S,UAAU,GAAIiJ,EAAExH,SACrEwH,EAAEmW,OAAO,EAAGnW,EAAExH,QAAO,IACJkP,EADIC,EAAAC,EACLgF,GAAC,IAAjB,IAAAjF,EAAAE,MAAAH,EAAAC,EAAAhM,KAAAmM,MACE,CAAA,IADShJ,EAAC4I,EAAAxQ,MACV8I,EAAEoJ,KAAKtK,EAAC,CAAC,CAAA,MAAAkJ,GAAAL,EAAA7I,EAAAkJ,EAAA,CAAA,QAAAL,EAAAjL,GAAA,CACb,MAAO,GAAyB,IAArB3F,UAAUyB,OAAc,CACjC,IAAMmV,EAAI3N,EAAEyJ,MAAM1S,UAAU,GAAIA,UAAU,IAC1C4W,EAAE4I,MAAK,SAACvW,EAAGC,GAAC,OAAKlJ,EAAU,GAAG6I,QAAQI,EAAGC,MACzC,IAAM2M,EAAI5M,EAAEyJ,MAAM,EAAG1S,UAAU,IAAIoqB,OAAOxT,EAAG3N,EAAEyJ,MAAM1S,UAAU,GAAIiJ,EAAExH,SACrEwH,EAAEmW,OAAO,EAAGnW,EAAExH,QAAO,IACJ4oB,EADIC,EAAAzZ,EACLgF,GAAC,IAAjB,IAAAyU,EAAAxZ,MAAAuZ,EAAAC,EAAA1lB,KAAAmM,MACE,CAAA,IADShJ,EAACsiB,EAAAlqB,MACV8I,EAAEoJ,KAAKtK,EAAC,CAAC,CAAA,MAAAkJ,GAAAqZ,EAAAviB,EAAAkJ,EAAA,CAAA,QAAAqZ,EAAA3kB,GAAA,CACb,CACF,GAEA,CAAAzF,IAAA,SAAAC,MAIA,SAAcqO,GACZ,IACqB+b,EADf9K,EAAY,IAAIN,GAAWqL,EAAA3Z,EACjBrC,GAAK,IAArB,IAAAgc,EAAA1Z,MAAAyZ,EAAAC,EAAA5lB,KAAAmM,MACE,CAAA,IADShJ,EAACwiB,EAAApqB,MACVsf,EAAUzO,IAAIjJ,EAAC,CAAC,CAAA,MAAAkJ,GAAAuZ,EAAAziB,EAAAkJ,EAAA,CAAA,QAAAuZ,EAAA7kB,GAAA,CAClB,OAAO8Z,CACT,GAAC,CAAAvf,IAAA,SAAAC,MAED,SAAcsqB,EAAUC,GACtB,OAAOD,EAAS/X,MAAM,EAAGgY,EAC3B,IAAC,CArCwB,GCLNC,GAAS1qB,GAAA,SAAA0qB,IAAA/qB,OAAA+qB,EAAA,ICYTC,YAAO5C,GAC1B,SAAA4C,IAAc,IAAAroB,EAE+B,OAF/B3C,OAAAgrB,GACZroB,EAAAC,EAAAzC,KAAA6qB,GACAA,EAAQ/qB,aAAaC,MAAKyC,EAAOvC,WAAUuC,CAC7C,CAAC,OAAAK,EAAAgoB,EAAA5C,GAAA/nB,EAAA2qB,EAAA,CAAA,CAAA1qB,IAAA,0BAAAC,MAqBD,WACE,OAAOJ,KAAK8qB,OAAO/d,qBACrB,GAAC,CAAA5M,IAAA,iBAAAC,MACD,WACE,GAAIJ,KAAKwM,UACP,MAAO,GAKT,IAHA,IAAMsd,EAAc,IAAI1Y,MAAMpR,KAAK6oB,gBAAgBtR,KAAK,MACpDwO,GAAK,EACHgF,EAAmB/qB,KAAK8qB,OAAOnN,iBAC5BjY,EAAI,EAAGA,EAAIqlB,EAAiBrpB,OAAQgE,IAE3CokB,IADA/D,GACiBgF,EAAiBrlB,GAEpC,IAAK,IAAIpB,EAAI,EAAGA,EAAItE,KAAKgrB,OAAOtpB,OAAQ4C,IAEtC,IADA,IAAM2mB,EAAmBjrB,KAAKgrB,OAAO1mB,GAAGqZ,iBAC/B9P,EAAI,EAAGA,EAAIod,EAAiBvpB,OAAQmM,IAE3Cic,IADA/D,GACiBkF,EAAiBpd,GAGtC,OAAOic,CACT,GAAC,CAAA3pB,IAAA,UAAAC,MACD,WACE,IAAI8qB,EAAO,EACXA,GAAQnB,GAAKoB,OAAOnrB,KAAK8qB,OAAOM,yBAChC,IAAK,IAAI9mB,EAAI,EAAGA,EAAItE,KAAKgrB,OAAOtpB,OAAQ4C,IACtC4mB,GAAQnB,GAAKoB,OAAOnrB,KAAKgrB,OAAO1mB,GAAG8mB,yBAErC,OAAOF,CACT,GAAC,CAAA/qB,IAAA,eAAAC,MACD,WAGE,IAFA,IAAMirB,EAAYrrB,KAAK8qB,OAAO9d,OACxBse,EAAa,IAAIla,MAAMpR,KAAKgrB,OAAOtpB,QAAQ6V,KAAK,MAC7CjT,EAAI,EAAGA,EAAItE,KAAKgrB,OAAOtpB,OAAQ4C,IACtCgnB,EAAWhnB,GAAKtE,KAAKgrB,OAAO1mB,GAAG0I,OAEjC,OAAO,IAAI6d,EAAQQ,EAAWC,EAAYtrB,KAAKkM,SACjD,GAAC,CAAA/L,IAAA,cAAAC,MACD,WACE,GAAkC,IAA9BJ,KAAKurB,qBAA4B,OAAO,EAC5C,GAAoB,OAAhBvrB,KAAK8qB,OAAiB,OAAO,EACjC,GAAmC,IAA/B9qB,KAAK8qB,OAAOjC,eAAsB,OAAO,EAG7C,IAFA,IAAMrD,EAAMxlB,KAAK8qB,OAAOM,wBAClBnhB,EAAMjK,KAAK+M,sBACRzI,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1B,IAAMoB,EAAI8f,EAAIkE,KAAKplB,GACnB,GAAMoB,IAAMuE,EAAIH,WAAapE,IAAMuE,EAAIP,UAAY,OAAO,EAC1D,IAAM/D,EAAI6f,EAAImE,KAAKrlB,GACnB,GAAMqB,IAAMsE,EAAID,WAAarE,IAAMsE,EAAIL,UAAY,OAAO,CAC5D,CAGA,IAFA,IAAI4hB,EAAQhG,EAAIkE,KAAK,GACjB+B,EAAQjG,EAAImE,KAAK,GACZrlB,EAAI,EAAGA,GAAK,EAAGA,IAAK,CAC3B,IAAMoB,EAAI8f,EAAIkE,KAAKplB,GACbqB,EAAI6f,EAAImE,KAAKrlB,GAGnB,GAFiBoB,IAAM8lB,KACN7lB,IAAM8lB,GACI,OAAO,EAClCD,EAAQ9lB,EACR+lB,EAAQ9lB,CACV,CACA,OAAO,CACT,GAAC,CAAAxF,IAAA,cAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,QAAyC,iBAAjBzB,UAAU,IAAmBA,UAAU,aAAc8L,EAAW,CACpG,IAAMxE,EAAQtH,UAAU,GAAIiE,EAAYjE,UAAU,GAClD,IAAKD,KAAKuoB,kBAAkBhhB,GAC1B,OAAO,EAET,IAAMmkB,EAAenkB,EACfokB,EAAY3rB,KAAK8qB,OACjBc,EAAoBF,EAAaZ,OACvC,IAAKa,EAAUxf,YAAYyf,EAAmB1nB,GAC5C,OAAO,EAET,GAAIlE,KAAKgrB,OAAOtpB,SAAWgqB,EAAaV,OAAOtpB,OAC7C,OAAO,EAET,IAAK,IAAI4C,EAAI,EAAGA,EAAItE,KAAKgrB,OAAOtpB,OAAQ4C,IACtC,IAAKtE,KAAKgrB,OAAO1mB,GAAG6H,YAAYuf,EAAaV,OAAO1mB,GAAIJ,GACtD,OAAO,EAGX,OAAO,CACT,CACE,OAAOwkB,EAAAmC,EAAA,cAAA7qB,KAAA,GAAkBD,MAAMC,KAAMC,UAEzC,GAAC,CAAAE,IAAA,YAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OAAc,CAC1B1B,KAAK8qB,OAAS9qB,KAAK6rB,WAAW7rB,KAAK8qB,QAAQ,GAC3C,IAAK,IAAIxmB,EAAI,EAAGA,EAAItE,KAAKgrB,OAAOtpB,OAAQ4C,IACtCtE,KAAKgrB,OAAO1mB,GAAKtE,KAAK6rB,WAAW7rB,KAAKgrB,OAAO1mB,IAAI,GAEnD6lB,GAAO1K,KAAKzf,KAAKgrB,OACnB,MAAO,GAAyB,IAArB/qB,UAAUyB,OAAc,CACjC,IAAM2a,EAAOpc,UAAU,GAAI6rB,EAAY7rB,UAAU,GACjD,GAAIoc,EAAK7P,UACP,OAAO,KAET,IAAMgZ,EAAMnJ,EAAK+O,wBACXjF,EAAqBf,GAAoBe,mBAAmBX,EAAK,EAAGA,EAAIrU,OAAS,GACvFiU,GAAoBM,OAAOF,EAAKW,GAAoB,GAChDhK,GAAY4P,MAAMvG,KAASsG,GAAW1G,GAAoBuD,QAAQnD,EACxE,CACF,GAAC,CAAArlB,IAAA,gBAAAC,MACD,WACE,OAAOJ,KAAK8qB,OAAOjO,eACrB,GAAC,CAAA1c,IAAA,qBAAAC,MACD,WACE,OAAOJ,KAAKgrB,OAAOtpB,MACrB,GAAC,CAAAvB,IAAA,uBAAAC,MACD,WACE,OAAO,CACT,GAAC,CAAAD,IAAA,kBAAAC,MACD,WAGE,IAFA,IAAM4rB,EAAQhsB,KAAKisB,kBAAkBtD,UAC/BuD,EAAQ,IAAI9a,MAAMpR,KAAKurB,sBAAsBhU,KAAK,MAC/CjT,EAAI,EAAGA,EAAI4nB,EAAMxqB,OAAQ4C,IAChC4nB,EAAM5nB,GAAKtE,KAAKmsB,iBAAiB7nB,GAAGqkB,UAEtC,OAAO3oB,KAAK6M,aAAauf,cAAcJ,EAAOE,EAChD,GAAC,CAAA/rB,IAAA,cAAAC,MACD,WACE,OAAO2L,EAAS+C,gBAClB,GAAC,CAAA3O,IAAA,eAAAC,MACD,WACE,OAAO,CACT,GAAC,CAAAD,IAAA,YAAAC,MACD,WACE,IAAI0Z,EAAM,EACVA,GAAO9Z,KAAK8qB,OAAOuB,YACnB,IAAK,IAAI/nB,EAAI,EAAGA,EAAItE,KAAKgrB,OAAOtpB,OAAQ4C,IACtCwV,GAAO9Z,KAAKgrB,OAAO1mB,GAAG+nB,YAExB,OAAOvS,CACT,GAAC,CAAA3Z,IAAA,eAAAC,MACD,WAEE,IADA,IAAIksB,EAAYtsB,KAAK8qB,OAAOjC,eACnBvkB,EAAI,EAAGA,EAAItE,KAAKgrB,OAAOtpB,OAAQ4C,IACtCgoB,GAAatsB,KAAKgrB,OAAO1mB,GAAGukB,eAE9B,OAAOyD,CACT,GAAC,CAAAnsB,IAAA,aAAAC,MACD,WACE,OAAOJ,KAAKisB,kBAAkBM,YAChC,GAAC,CAAApsB,IAAA,aAAAC,MACD,SAAWic,EAAMyP,GACf,IAAM5e,EAAMmP,EAAKrP,OAEjB,OADAhN,KAAKiN,UAAUC,EAAK4e,GACb5e,CACT,GAAC,CAAA/M,IAAA,qBAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OAAc,CAC1B,IAAMqG,EAAI9H,UAAU,GACd0rB,EAAY3rB,KAAK8qB,OACjB0B,EAAazkB,EAAE+iB,OACrB,OAAOa,EAAUlf,mBAAmB+f,EACtC,CAAO,GAAyB,IAArBvsB,UAAUyB,OAAc,CACjC,IAAwBgL,EAAOzM,UAAU,GACnCwsB,EADIxsB,UAAU,GAEd0rB,EAAY3rB,KAAK8qB,OACjB0B,EAAaC,EAAK3B,OAClB4B,EAAYf,EAAUlf,mBAAmB+f,EAAY9f,GAC3D,GAAkB,IAAdggB,EAAiB,OAAOA,EAI5B,IAHA,IAAMC,EAAS3sB,KAAKurB,qBACdqB,EAASH,EAAKlB,qBAChBjnB,EAAI,EACDA,EAAIqoB,GAAUroB,EAAIsoB,GAAQ,CAC/B,IAAMC,EAAW7sB,KAAKmsB,iBAAiB7nB,GACjCwoB,EAAYL,EAAKN,iBAAiB7nB,GAClCyoB,EAAWF,EAASpgB,mBAAmBqgB,EAAWpgB,GACxD,GAAiB,IAAbqgB,EAAgB,OAAOA,EAC3BzoB,GACF,CACA,OAAIA,EAAIqoB,EAAe,EACnBroB,EAAIsoB,GAAgB,EACjB,CACT,CACF,GAAC,CAAAzsB,IAAA,QAAAC,MACD,WACE,GAAIwS,GAAa3S,UAAU,GAAI8kB,IAAmB,CAChD,IAAMvV,EAASvP,UAAU,GACzBD,KAAK8qB,OAAO/qB,MAAMyP,GAClB,IAAK,IAAIlL,EAAI,EAAGA,EAAItE,KAAKgrB,OAAOtpB,OAAQ4C,IACtCtE,KAAKgrB,OAAO1mB,GAAGvE,MAAMyP,EAExB,MAAM,GAAIoD,GAAa3S,UAAU,GAAI8nB,IAA2B,CAC/D,IAAMvY,EAASvP,UAAU,GAEzB,GADAD,KAAK8qB,OAAO/qB,MAAMyP,IACbA,EAAOyZ,SACV,IAAK,IAAI3kB,EAAI,EAAGA,EAAItE,KAAKgrB,OAAOtpB,SAC9B1B,KAAKgrB,OAAO1mB,GAAGvE,MAAMyP,IACjBA,EAAOyZ,UAF2B3kB,KAKtCkL,EAAO0Z,qBAAqBlpB,KAAKmpB,iBACtC,MAAM,GAAIvW,GAAa3S,UAAU,GAAI6nB,IAAiB,CACtC7nB,UAAU,GAClBuP,OAAOxP,KACf,MAAM,GAAI4S,GAAa3S,UAAU,GAAIiD,GAA0B,CAC9D,IAAMsM,EAASvP,UAAU,GACzBuP,EAAOA,OAAOxP,MACdA,KAAK8qB,OAAO/qB,MAAMyP,GAClB,IAAK,IAAIlL,EAAI,EAAGA,EAAItE,KAAKgrB,OAAOtpB,OAAQ4C,IACtCtE,KAAKgrB,OAAO1mB,GAAGvE,MAAMyP,EAEzB,CACF,GAAC,CAAArP,IAAA,cAAAC,MACD,WACE,GAAIJ,KAAKwM,UACP,OAAOxM,KAAK6M,aAAamgB,wBAE3B,IAAMC,EAAQ,IAAI7b,MAAMpR,KAAKgrB,OAAOtpB,OAAS,GAAG6V,KAAK,MACrD0V,EAAM,GAAKjtB,KAAK8qB,OAChB,IAAK,IAAIxmB,EAAI,EAAGA,EAAItE,KAAKgrB,OAAOtpB,OAAQ4C,IACtC2oB,EAAM3oB,EAAI,GAAKtE,KAAKgrB,OAAO1mB,GAE7B,OAAI2oB,EAAMvrB,QAAU,EAAU1B,KAAK6M,aAAaqgB,iBAAiBD,EAAM,GAAG7B,yBACnEprB,KAAK6M,aAAamgB,sBAAsBC,EACjD,GAAC,CAAA9sB,IAAA,kBAAAC,MACD,WACE,OAAO2L,EAASqD,gBAClB,GAAC,CAAAjP,IAAA,kBAAAC,MACD,WACE,OAAOJ,KAAK8qB,MACd,GAAC,CAAA3qB,IAAA,UAAAC,MACD,WACE,OAAOJ,KAAK8qB,OAAOte,SACrB,GAAC,CAAArM,IAAA,mBAAAC,MACD,SAAiByE,GACf,OAAO7E,KAAKgrB,OAAOnmB,EACrB,GAAC,CAAA1E,IAAA,cAAAoI,IACD,WACE,MAAO,CAACqiB,GACV,IAAC,CAAA,CAAAzqB,IAAA,eAAAC,MAhQD,WACEJ,KAAK8qB,OAAS,KACd9qB,KAAKgrB,OAAS,KACd,IAAIgB,EAAQ/rB,UAAU,GAAIisB,EAAQjsB,UAAU,GAAIyO,EAAUzO,UAAU,GAQpE,GAPA8L,EAASjM,aAAauG,KAAKrG,KAAM0O,GACnB,OAAVsd,IACFA,EAAQhsB,KAAK6M,aAAaqgB,oBAEd,OAAVhB,IACFA,EAAQ,IAENngB,EAASohB,gBAAgBjB,GAC3B,MAAM,IAAIlpB,EAAyB,wCAErC,GAAIgpB,EAAMxf,WAAaT,EAASqhB,oBAAoBlB,GAClD,MAAM,IAAIlpB,EAAyB,oCAErChD,KAAK8qB,OAASkB,EACdhsB,KAAKgrB,OAASkB,CAChB,IAAC,EAxBkCngB,GCPhBshB,YAAS/c,GAAA,SAAA+c,IAAA,OAAAxtB,OAAAwtB,GAAA5qB,EAAAzC,KAAAqtB,EAAAptB,UAAA,CAAA,OAAA4C,EAAAwqB,EAAA/c,GAAApQ,EAAAmtB,EAAA,EAASld,GCGlBmd,YAAOC,GAC1B,SAAAD,EAAYvlB,GAAG,IAAAvF,EAIG,OAJH3C,OAAAytB,IACb9qB,EAAAC,EAAAzC,KAAAstB,IACK7e,MAAQ,GACT1G,aAAaiI,GACfxN,EAAKiO,OAAO1I,GAAEvF,CAClB,CAAC,OAAAK,EAAAyqB,EAAAC,GAAArtB,EAAAotB,EAAA,CAAA,CAAAntB,IAAA,WAAAC,MAED,SAAS2H,GAAG,IACgB6I,EADhBC,EAAAC,EACM9Q,KAAKyO,OAAK,IAA1B,IAAAoC,EAAAE,MAAAH,EAAAC,EAAAhM,KAAAmM,MACE,CAAA,GAAuB,IADbJ,EAAAxQ,MACJ+N,UAAUpG,GACd,OAAO,CAAG,CAAC,CAAA,MAAAmJ,GAAAL,EAAA7I,EAAAkJ,EAAA,CAAA,QAAAL,EAAAjL,GAAA,CACf,OAAO,CACT,GAAC,CAAAzF,IAAA,MAAAC,MAED,SAAI2H,GACF,GAAI/H,KAAKwhB,SAASzZ,GAChB,OAAO,EACT,IAAK,IAAIzD,EAAI,EAAGwV,EAAM9Z,KAAKyO,MAAM/M,OAAQ4C,EAAIwV,EAAKxV,IAAK,CAErD,GAAuB,IADbtE,KAAKyO,MAAMnK,GACf6J,UAAUpG,GACd,QAAS/H,KAAKyO,MAAM4Q,OAAO/a,EAAG,EAAGyD,EACrC,CAEA,OADA/H,KAAKyO,MAAM6D,KAAKvK,IACT,CACT,GAAC,CAAA5H,IAAA,SAAAC,MAED,SAAOoH,GAAG,IACS8iB,EADTC,EAAAzZ,EACQtJ,GAAC,IAAjB,IAAA+iB,EAAAxZ,MAAAuZ,EAAAC,EAAA1lB,KAAAmM,MACE,CAAA,IADShJ,EAACsiB,EAAAlqB,MACVJ,KAAKiR,IAAIjJ,EAAC,CAAC,CAAA,MAAAkJ,GAAAqZ,EAAAviB,EAAAkJ,EAAA,CAAA,QAAAqZ,EAAA3kB,GAAA,CACb,OAAO,CACT,GAAC,CAAAzF,IAAA,SAAAC,MAED,WACE,MAAM,IAAI8P,CACZ,GAAC,CAAA/P,IAAA,OAAAC,MAED,WACE,OAAOJ,KAAKyO,MAAM/M,MACpB,GAAC,CAAAvB,IAAA,UAAAC,MAED,WACE,OAA6B,IAAtBJ,KAAKyO,MAAM/M,MACpB,GAAC,CAAAvB,IAAA,UAAAC,MAED,WACE,OAAOJ,KAAKyO,MAAMkE,OACpB,GAAC,CAAAxS,IAAA,WAAAC,MAED,WACE,OAAO,IAAImR,GAASvR,KAAKyO,MAC3B,IAAC,EAnDkC4e,IAsD/B9b,GAAQ,WAIX,OAAArR,GAHD,SAAAqR,EAAY9C,GAAO5O,OAAA0R,GACjBvR,KAAKyO,MAAQA,EACbzO,KAAK6R,SAAW,CAClB,GAAC,CAAA,CAAA1R,IAAA,OAAAC,MAED,WACE,GAAIJ,KAAK6R,WAAa7R,KAAKyO,MAAM/M,OAC/B,MAAM,IAAIuO,EACZ,OAAOjQ,KAAKyO,MAAMzO,KAAK6R,WACzB,GAAC,CAAA1R,IAAA,UAAAC,MAED,WACE,OAAOJ,KAAK6R,SAAW7R,KAAKyO,MAAM/M,MACpC,GAAC,CAAAvB,IAAA,SAAAC,MAED,WACE,MAAM,IAAI8P,CACZ,IAAC,CAlBW,GCjDOsd,YAAkBvF,GACrC,SAAAuF,IAAc,IAAAhrB,EAE0C,OAF1C3C,OAAA2tB,GACZhrB,EAAAC,EAAAzC,KAAAwtB,GACAA,EAAmB1tB,aAAaC,MAAKyC,EAAOvC,WAAUuC,CACxD,CAAC,OAAAK,EAAA2qB,EAAAvF,GAAA/nB,EAAAstB,EAAA,CAAA,CAAArtB,IAAA,0BAAAC,MAeD,WAEE,IADA,IAAMgN,EAAW,IAAIhE,EACZ9E,EAAI,EAAGA,EAAItE,KAAKytB,YAAY/rB,OAAQ4C,IAC3C8I,EAAS3C,gBAAgBzK,KAAKytB,YAAYnpB,GAAGyI,uBAE/C,OAAOK,CACT,GAAC,CAAAjN,IAAA,eAAAC,MACD,SAAayE,GACX,OAAO7E,KAAKytB,YAAY5oB,EAC1B,GAAC,CAAA1E,IAAA,iBAAAC,MACD,WAGE,IAFA,IAAM0pB,EAAc,IAAI1Y,MAAMpR,KAAK6oB,gBAAgBtR,KAAK,MACpDwO,GAAK,EACAzhB,EAAI,EAAGA,EAAItE,KAAKytB,YAAY/rB,OAAQ4C,IAE3C,IADA,IAAM2mB,EAAmBjrB,KAAKytB,YAAYnpB,GAAGqZ,iBACpC9P,EAAI,EAAGA,EAAIod,EAAiBvpB,OAAQmM,IAE3Cic,IADA/D,GACiBkF,EAAiBpd,GAGtC,OAAOic,CACT,GAAC,CAAA3pB,IAAA,UAAAC,MACD,WAEE,IADA,IAAI8qB,EAAO,EACF5mB,EAAI,EAAGA,EAAItE,KAAKytB,YAAY/rB,OAAQ4C,IAC3C4mB,GAAQlrB,KAAKytB,YAAYnpB,GAAGopB,UAE9B,OAAOxC,CACT,GAAC,CAAA/qB,IAAA,eAAAC,MACD,WAEE,IADA,IAAMoO,EAAa,IAAI4C,MAAMpR,KAAKytB,YAAY/rB,QAAQ6V,KAAK,MAClDjT,EAAI,EAAGA,EAAIkK,EAAW9M,OAAQ4C,IACrCkK,EAAWlK,GAAKtE,KAAKytB,YAAYnpB,GAAG0I,OAEtC,OAAO,IAAIwgB,EAAmBhf,EAAYxO,KAAKkM,SACjD,GAAC,CAAA/L,IAAA,cAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,QAAyC,iBAAjBzB,UAAU,IAAmBA,UAAU,aAAc8L,EAAW,CACpG,IAAMxE,EAAQtH,UAAU,GAAIiE,EAAYjE,UAAU,GAClD,IAAKD,KAAKuoB,kBAAkBhhB,GAC1B,OAAO,EAET,IAAMomB,EAAkBpmB,EACxB,GAAIvH,KAAKytB,YAAY/rB,SAAWisB,EAAgBF,YAAY/rB,OAC1D,OAAO,EAET,IAAK,IAAI4C,EAAI,EAAGA,EAAItE,KAAKytB,YAAY/rB,OAAQ4C,IAC3C,IAAKtE,KAAKytB,YAAYnpB,GAAG6H,YAAYwhB,EAAgBF,YAAYnpB,GAAIJ,GACnE,OAAO,EAGX,OAAO,CACT,CACE,OAAOwkB,EAAA8E,EAAA,cAAAxtB,KAAA,GAAkBD,MAAMC,KAAMC,UAEzC,GAAC,CAAAE,IAAA,YAAAC,MACD,WACE,IAAK,IAAIkE,EAAI,EAAGA,EAAItE,KAAKytB,YAAY/rB,OAAQ4C,IAC3CtE,KAAKytB,YAAYnpB,GAAG2I,YAEtBkd,GAAO1K,KAAKzf,KAAKytB,YACnB,GAAC,CAAAttB,IAAA,gBAAAC,MACD,WACE,OAAIJ,KAAKwM,UAAkB,KACpBxM,KAAKytB,YAAY,GAAG5Q,eAC7B,GAAC,CAAA1c,IAAA,uBAAAC,MACD,WAEE,IADA,IAAIykB,EAAYmC,GAAUE,MACjB5iB,EAAI,EAAGA,EAAItE,KAAKytB,YAAY/rB,OAAQ4C,IAC3CugB,EAAYhkB,KAAK+K,IAAIiZ,EAAW7kB,KAAKytB,YAAYnpB,GAAGspB,wBAEtD,OAAO/I,CACT,GAAC,CAAA1kB,IAAA,kBAAAC,MACD,WAGE,IAFA,IAAMytB,EAAgB7tB,KAAKytB,YAAY/rB,OACjCosB,EAAW,IAAI1O,GAAUyO,GACtBvpB,EAAI,EAAGA,EAAIupB,EAAevpB,IACjCwpB,EAAS7c,IAAIjR,KAAKytB,YAAYnpB,GAAGqkB,WAEnC,OAAO3oB,KAAK6M,aAAakhB,cAAcD,EACzC,GAAC,CAAA3tB,IAAA,cAAAC,MACD,WACE,OAAO2L,EAASE,2BAClB,GAAC,CAAA9L,IAAA,eAAAC,MACD,WAEE,IADA,IAAIykB,EAAYmC,GAAUE,MACjB5iB,EAAI,EAAGA,EAAItE,KAAKytB,YAAY/rB,OAAQ4C,IAC3CugB,EAAYhkB,KAAK+K,IAAIiZ,EAAW7kB,KAAKytB,YAAYnpB,GAAGyX,gBAEtD,OAAO8I,CACT,GAAC,CAAA1kB,IAAA,YAAAC,MACD,WAEE,IADA,IAAI6pB,EAAM,EACD3lB,EAAI,EAAGA,EAAItE,KAAKytB,YAAY/rB,OAAQ4C,IAC3C2lB,GAAOjqB,KAAKytB,YAAYnpB,GAAG+nB,YAE7B,OAAOpC,CACT,GAAC,CAAA9pB,IAAA,eAAAC,MACD,WAEE,IADA,IAAIksB,EAAY,EACPhoB,EAAI,EAAGA,EAAItE,KAAKytB,YAAY/rB,OAAQ4C,IAC3CgoB,GAAatsB,KAAKytB,YAAYnpB,GAAGukB,eAEnC,OAAOyD,CACT,GAAC,CAAAnsB,IAAA,mBAAAC,MACD,WACE,OAAOJ,KAAKytB,YAAY/rB,MAC1B,GAAC,CAAAvB,IAAA,qBAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OAAc,CAC1B,IAAMqG,EAAI9H,UAAU,GACd+tB,EAAgB,IAAIV,GAAQnD,GAAO8D,OAAOjuB,KAAKytB,cAC/CS,EAAgB,IAAIZ,GAAQnD,GAAO8D,OAAOlmB,EAAE0lB,cAClD,OAAOztB,KAAK8I,QAAQklB,EAAeE,EACrC,CAAO,GAAyB,IAArBjuB,UAAUyB,OAAc,CAMjC,IALA,IAAwBgL,EAAOzM,UAAU,GACnCkuB,EADIluB,UAAU,GAEdmuB,EAAKpuB,KAAKquB,mBACVC,EAAKH,EAAGE,mBACV/pB,EAAI,EACDA,EAAI8pB,GAAM9pB,EAAIgqB,GAAI,CACvB,IAAMC,EAAWvuB,KAAKwuB,aAAalqB,GAC7BmqB,EAAYN,EAAGK,aAAalqB,GAC5ByoB,EAAWwB,EAAS9hB,mBAAmBgiB,EAAW/hB,GACxD,GAAiB,IAAbqgB,EAAgB,OAAOA,EAC3BzoB,GACF,CACA,OAAIA,EAAI8pB,EAAW,EACf9pB,EAAIgqB,GAAY,EACb,CACT,CACF,GAAC,CAAAnuB,IAAA,QAAAC,MACD,WACE,GAAIwS,GAAa3S,UAAU,GAAI8kB,IAE7B,IADA,IAAMvV,EAASvP,UAAU,GAChBqE,EAAI,EAAGA,EAAItE,KAAKytB,YAAY/rB,OAAQ4C,IAC3CtE,KAAKytB,YAAYnpB,GAAGvE,MAAMyP,QAEvB,GAAIoD,GAAa3S,UAAU,GAAI8nB,IAA2B,CAC/D,IAAMvY,EAASvP,UAAU,GACzB,GAAgC,IAA5BD,KAAKytB,YAAY/rB,OAAc,OAAO,KAC1C,IAAK,IAAI4C,EAAI,EAAGA,EAAItE,KAAKytB,YAAY/rB,SACnC1B,KAAKytB,YAAYnpB,GAAGvE,MAAMyP,IACtBA,EAAOyZ,UAFgC3kB,KAMzCkL,EAAO0Z,qBAAqBlpB,KAAKmpB,iBACtC,MAAM,GAAIvW,GAAa3S,UAAU,GAAI6nB,IAAiB,CACrD,IAAMtY,EAASvP,UAAU,GACzBuP,EAAOA,OAAOxP,MACd,IAAK,IAAIsE,EAAI,EAAGA,EAAItE,KAAKytB,YAAY/rB,OAAQ4C,IAC3CtE,KAAKytB,YAAYnpB,GAAGvE,MAAMyP,EAE7B,MAAM,GAAIoD,GAAa3S,UAAU,GAAIiD,GAA0B,CAC9D,IAAMsM,EAASvP,UAAU,GACzBuP,EAAOA,OAAOxP,MACd,IAAK,IAAIsE,EAAI,EAAGA,EAAItE,KAAKytB,YAAY/rB,OAAQ4C,IAC3CtE,KAAKytB,YAAYnpB,GAAGvE,MAAMyP,EAE9B,CACF,GAAC,CAAArP,IAAA,cAAAC,MACD,WAGE,OAFA2L,EAAS2iB,2BAA2B1uB,MACpCsG,EAAOC,uBACA,IACT,GAAC,CAAApG,IAAA,kBAAAC,MACD,WACE,OAAO2L,EAASuD,2BAClB,GAAC,CAAAnP,IAAA,UAAAC,MACD,WACE,IAAK,IAAIkE,EAAI,EAAGA,EAAItE,KAAKytB,YAAY/rB,OAAQ4C,IAC3C,IAAKtE,KAAKytB,YAAYnpB,GAAGkI,UACvB,OAAO,EAGX,OAAO,CACT,IAAC,CAAA,CAAArM,IAAA,eAAAC,MA/LD,WAEE,GADAJ,KAAKytB,YAAc,KACM,IAArBxtB,UAAUyB,aAAsB,GAAyB,IAArBzB,UAAUyB,OAAc,CAC9D,IAAI8M,EAAavO,UAAU,GAAIyO,EAAUzO,UAAU,GAKnD,GAJA8L,EAASjM,aAAauG,KAAKrG,KAAM0O,GACd,OAAfF,IACFA,EAAa,IAEXzC,EAASohB,gBAAgB3e,GAC3B,MAAM,IAAIxL,EAAyB,6CAErChD,KAAKytB,YAAcjf,CACrB,CACF,IAAC,EAlB6CzC,GCT3B4iB,YAAUC,GAC7B,SAAAD,IAAc,IAAAnsB,EAEkC,OAFlC3C,OAAA8uB,GACZnsB,EAAAC,EAAAzC,KAAA2uB,GACAA,EAAW7uB,aAAaC,MAAKyC,EAAOvC,WAAUuC,CAChD,CAAC,OAAAK,EAAA8rB,EAAAC,GAAA1uB,EAAAyuB,EAAA,CAAA,CAAAxuB,IAAA,eAAAC,MAKD,WAEE,IADA,IAAMgpB,EAAS,IAAIhY,MAAMpR,KAAKytB,YAAY/rB,QAAQ6V,KAAK,MAC9CjT,EAAI,EAAGA,EAAI8kB,EAAO1nB,OAAQ4C,IACjC8kB,EAAO9kB,GAAKtE,KAAKytB,YAAYnpB,GAAG0I,OAElC,OAAO,IAAI2hB,EAAWvF,EAAQppB,KAAKkM,SACrC,GAAC,CAAA/L,IAAA,UAAAC,MACD,WACE,OAAO,CACT,GAAC,CAAAD,IAAA,cAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,QAAyC,iBAAjBzB,UAAU,IAAmBA,UAAU,aAAc8L,EAAW,CACpG,IAAMxE,EAAQtH,UAAU,GAAIiE,EAAYjE,UAAU,GAClD,QAAKD,KAAKuoB,kBAAkBhhB,IAGrBmhB,EAAAiG,EAAkBtoB,cAAAA,KAAAA,GAAAA,KAAKrG,KAAMuH,EAAOrD,EAC7C,CACE,OAAOwkB,EAAAiG,EAAA,cAAA3uB,KAAA,GAAkBD,MAAMC,KAAMC,UAEzC,GAAC,CAAAE,IAAA,gBAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,QAAgBoD,OAAOif,UAAU9jB,UAAU,IAAK,CAC5D,IAAM4E,EAAI5E,UAAU,GACpB,OAAOD,KAAKytB,YAAY5oB,GAAGgY,eAC7B,CACE,OAAO6L,EAAAiG,EAAA,gBAAA3uB,KAAA,GAAoBD,MAAMC,KAAMC,UAE3C,GAAC,CAAAE,IAAA,uBAAAC,MACD,WACE,OAAO4mB,GAAUE,KACnB,GAAC,CAAA/mB,IAAA,cAAAC,MACD,WACE,OAAO2L,EAASsC,mBAClB,GAAC,CAAAlO,IAAA,eAAAC,MACD,WACE,OAAO,CACT,GAAC,CAAAD,IAAA,cAAAC,MACD,WACE,OAAOJ,KAAK6M,aAAagd,0BAC3B,GAAC,CAAA1pB,IAAA,kBAAAC,MACD,WACE,OAAO2L,EAASiD,mBAClB,GAAC,CAAA7O,IAAA,cAAAoI,IACD,WACE,MAAO,CAACghB,GACV,IAAC,CAAA,CAAAppB,IAAA,eAAAC,MAlDD,WACE,IAAMgpB,EAASnpB,UAAU,GAAIyO,EAAUzO,UAAU,GACjDutB,GAAmB1tB,aAAauG,KAAKrG,KAAMopB,EAAQ1a,EACrD,IAAC,EARqC8e,ICCnBqB,YAAUC,GAC7B,SAAAD,IAAc,IAAArsB,EAEkC,OAFlC3C,OAAAgvB,GACZrsB,EAAAC,EAAAzC,KAAA6uB,GACAA,EAAW/uB,aAAaC,MAAKyC,EAAOvC,WAAUuC,CAChD,CAAC,OAAAK,EAAAgsB,EAAAC,GAAA5uB,EAAA2uB,EAAA,CAAA,CAAA1uB,IAAA,eAAAC,MAMD,WACE,OAAO,IAAIyuB,EAAW7uB,KAAKkoB,QAAQlb,OAAQhN,KAAKkM,SAClD,GAAC,CAAA/L,IAAA,uBAAAC,MACD,WACE,OAAO4mB,GAAUE,KACnB,GAAC,CAAA/mB,IAAA,WAAAC,MACD,WACE,QAAIJ,KAAKwM,WAGFkc,EAAAmG,qBAAexoB,KAAKrG,KAC7B,GAAC,CAAAG,IAAA,kBAAAC,MACD,WACE,IAAMolB,EAAMxlB,KAAKkoB,QAAQlb,OAEzB,OADAoY,GAAoBuD,QAAQnD,GACrBxlB,KAAK6M,aAAaqgB,iBAAiB1H,EAC5C,GAAC,CAAArlB,IAAA,cAAAC,MACD,WACE,OAAO2L,EAAS8C,mBAClB,GAAC,CAAA1O,IAAA,uBAAAC,MACD,WACE,IAAKJ,KAAKwM,YAAckc,EAAAmG,qBAAexoB,KAAKrG,MAC1C,MAAM,IAAIgD,EAAyB,wDAErC,GAAIhD,KAAKorB,wBAAwBja,QAAU,GAAKnR,KAAKorB,wBAAwBja,OAAS0d,EAAWE,mBAC/F,MAAM,IAAI/rB,EAAyB,iDAAmDhD,KAAKorB,wBAAwBja,OAAS,wBAEhI,GAAC,CAAAhR,IAAA,kBAAAC,MACD,WACE,OAAO2L,EAASmD,mBAClB,IAAC,CAAA,CAAA/O,IAAA,eAAAC,MAnCD,WACE,IAAMgpB,EAASnpB,UAAU,GAAIyO,EAAUzO,UAAU,GACjD+nB,GAAWloB,aAAauG,KAAKrG,KAAMopB,EAAQ1a,GAC3C1O,KAAKgvB,sBACP,IAAC,EATqChH,IA0CxC6G,GAAWE,mBAAqB,EC9CqD,IAChEE,YAAYC,GAC/B,SAAAD,IAAc,IAAAzsB,EAEoC,OAFpC3C,OAAAovB,GACZzsB,EAAAC,EAAAzC,KAAAivB,GACAA,EAAanvB,aAAaC,MAAKyC,EAAOvC,WAAUuC,CAClD,CAAC,OAAAK,EAAAosB,EAAAC,GAAAhvB,EAAA+uB,EAAA,CAAA,CAAA9uB,IAAA,cAAAC,MAiBD,SAAY8G,EAAe9G,GACzB,OAAQ8G,GACR,KAAK+nB,EAAa9nB,EAChBnH,KAAK0F,EAAItF,EACT,MACF,KAAK6uB,EAAa7nB,EAChBpH,KAAK2F,EAAIvF,EACT,MACF,QACE,MAAM,IAAI4C,EAAyB,2BAA6BkE,GAEpE,GAAC,CAAA/G,IAAA,OAAAC,MACD,WACE,OAAO6G,EAAWwB,aACpB,GAAC,CAAAtI,IAAA,cAAAC,MACD,SAAY8G,GACV,OAAQA,GACR,KAAK+nB,EAAa9nB,EAChB,OAAOnH,KAAK0F,EACd,KAAKupB,EAAa7nB,EAChB,OAAOpH,KAAK2F,EAEd,MAAM,IAAI3C,EAAyB,2BAA6BkE,EAClE,GAAC,CAAA/G,IAAA,OAAAC,MACD,SAAKwH,GACH,MAAM,IAAI5E,EAAyB,uDACrC,GAAC,CAAA7C,IAAA,OAAAC,MACD,WACE,OAAO,IAAI6uB,EAAajvB,KAC1B,GAAC,CAAAG,IAAA,WAAAC,MACD,WACE,MAAO,IAAMJ,KAAK0F,EAAI,KAAO1F,KAAK2F,EAAI,GACxC,GAAC,CAAAxF,IAAA,gBAAAC,MACD,SAAcmH,GACZvH,KAAK0F,EAAI6B,EAAM7B,EACf1F,KAAK2F,EAAI4B,EAAM5B,EACf3F,KAAK4H,EAAIL,EAAMM,MACjB,IAAC,CAAA,CAAA1H,IAAA,eAAAC,MArDD,WACE,GAAyB,IAArBH,UAAUyB,OACZuF,EAAWnH,aAAauG,KAAKrG,WACxB,GAAyB,IAArBC,UAAUyB,QACnB,GAAIzB,UAAU,aAAcgvB,EAAc,CACxC,IAAMhR,EAAQhe,UAAU,GACxBgH,EAAWnH,aAAauG,KAAKrG,KAAMie,EAAMvY,EAAGuY,EAAMtY,EACnD,MAAM,GAAI1F,UAAU,aAAcgH,EAAY,CAC7C,IAAMgX,EAAQhe,UAAU,GACxBgH,EAAWnH,aAAauG,KAAKrG,KAAMie,EAAMvY,EAAGuY,EAAMtY,EACpD,OACK,GAAyB,IAArB1F,UAAUyB,OAAc,CACjC,IAAMgE,EAAIzF,UAAU,GAAI0F,EAAI1F,UAAU,GACtCgH,EAAWnH,aAAauG,KAAKrG,KAAM0F,EAAGC,EAAGsB,EAAWwB,cACtD,CACF,IAAC,EApBuCxB,GA4D1CgoB,GAAa9nB,EAAI,EACjB8nB,GAAa7nB,EAAI,EACjB6nB,GAAa5nB,GAAK,EAClB4nB,GAAatnB,GAAK,EChEmE,IAChEwnB,YAAaD,GAChC,SAAAC,IAAc,IAAA3sB,EAEqC,OAFrC3C,OAAAsvB,GACZ3sB,EAAAC,EAAAzC,KAAAmvB,GACAA,EAAcrvB,aAAaC,MAAKyC,EAAOvC,WAAUuC,CACnD,CAAC,OAAAK,EAAAssB,EAAAD,GAAAhvB,EAAAivB,EAAA,CAAA,CAAAhvB,IAAA,OAAAC,MAsBD,WACE,OAAOJ,KAAKovB,EACd,GAAC,CAAAjvB,IAAA,cAAAC,MACD,SAAY8G,EAAe9G,GACzB,OAAQ8G,GACR,KAAKioB,EAAchoB,EACjBnH,KAAK0F,EAAItF,EACT,MACF,KAAK+uB,EAAc/nB,EACjBpH,KAAK2F,EAAIvF,EACT,MACF,KAAK+uB,EAAcxnB,EACjB3H,KAAKovB,GAAKhvB,EACV,MACF,QACE,MAAM,IAAI4C,EAAyB,2BAA6BkE,GAEpE,GAAC,CAAA/G,IAAA,OAAAC,MACD,SAAKsH,GACH1H,KAAKovB,GAAK1nB,CACZ,GAAC,CAAAvH,IAAA,OAAAC,MACD,WACE,OAAO6G,EAAWwB,aACpB,GAAC,CAAAtI,IAAA,cAAAC,MACD,SAAY8G,GACV,OAAQA,GACR,KAAKioB,EAAchoB,EACjB,OAAOnH,KAAK0F,EACd,KAAKypB,EAAc/nB,EACjB,OAAOpH,KAAK2F,EACd,KAAKwpB,EAAcxnB,EACjB,OAAO3H,KAAKovB,GAEd,MAAM,IAAIpsB,EAAyB,2BAA6BkE,EAClE,GAAC,CAAA/G,IAAA,OAAAC,MACD,SAAKwH,GACH,MAAM,IAAI5E,EAAyB,uDACrC,GAAC,CAAA7C,IAAA,OAAAC,MACD,WACE,OAAO,IAAI+uB,EAAcnvB,KAC3B,GAAC,CAAAG,IAAA,WAAAC,MACD,WACE,MAAO,IAAMJ,KAAK0F,EAAI,KAAO1F,KAAK2F,EAAI,MAAQ3F,KAAKqvB,OAAS,GAC9D,GAAC,CAAAlvB,IAAA,gBAAAC,MACD,SAAcmH,GACZvH,KAAK0F,EAAI6B,EAAM7B,EACf1F,KAAK2F,EAAI4B,EAAM5B,EACf3F,KAAK4H,EAAIL,EAAMM,OACf7H,KAAKovB,GAAK7nB,EAAM8nB,MAClB,IAAC,CAAA,CAAAlvB,IAAA,eAAAC,MAtED,WAEE,GADAJ,KAAKovB,GAAK,KACe,IAArBnvB,UAAUyB,OACZuF,EAAWnH,aAAauG,KAAKrG,MAC7BA,KAAKovB,GAAK,OACL,GAAyB,IAArBnvB,UAAUyB,QACnB,GAAIzB,UAAU,aAAckvB,EAAe,CACzC,IAAMlR,EAAQhe,UAAU,GACxBgH,EAAWnH,aAAauG,KAAKrG,KAAMie,EAAMvY,EAAGuY,EAAMtY,GAClD3F,KAAKovB,GAAKnR,EAAMmR,EACjB,MAAM,GAAInvB,UAAU,aAAcgH,EAAY,CAC7C,IAAMgX,EAAQhe,UAAU,GACxBgH,EAAWnH,aAAauG,KAAKrG,KAAMie,EAAMvY,EAAGuY,EAAMtY,GAClD3F,KAAKovB,GAAKpvB,KAAKqvB,MACjB,OACK,GAAyB,IAArBpvB,UAAUyB,OAAc,CACjC,IAAMgE,EAAIzF,UAAU,GAAI0F,EAAI1F,UAAU,GAAIyH,EAAIzH,UAAU,GACxDgH,EAAWnH,aAAauG,KAAKrG,KAAM0F,EAAGC,EAAGsB,EAAWwB,eACpDzI,KAAKovB,GAAK1nB,CACZ,CACF,IAAC,EAzBwCT,GA6E3CkoB,GAAchoB,EAAI,EAClBgoB,GAAc/nB,EAAI,EAClB+nB,GAAc9nB,GAAK,EACnB8nB,GAAcxnB,EAAI,ECjFmE,IAChE2nB,YAAcJ,GACjC,SAAAI,IAAc,IAAA9sB,EAEsC,OAFtC3C,OAAAyvB,GACZ9sB,EAAAC,EAAAzC,KAAAsvB,GACAA,EAAexvB,aAAaC,MAAKyC,EAAOvC,WAAUuC,CACpD,CAAC,OAAAK,EAAAysB,EAAAJ,GAAAhvB,EAAAovB,EAAA,CAAA,CAAAnvB,IAAA,OAAAC,MAsBD,WACE,OAAOJ,KAAKovB,EACd,GAAC,CAAAjvB,IAAA,cAAAC,MACD,SAAY8G,EAAe9G,GACzB,OAAQ8G,GACR,KAAKD,EAAWE,EACdnH,KAAK0F,EAAItF,EACT,MACF,KAAK6G,EAAWG,EACdpH,KAAK2F,EAAIvF,EACT,MACF,KAAK6G,EAAWI,EACdrH,KAAK4H,EAAIxH,EACT,MACF,KAAK6G,EAAWU,EACd3H,KAAKovB,GAAKhvB,EACV,MACF,QACE,MAAM,IAAI4C,EAAyB,2BAA6BkE,GAEpE,GAAC,CAAA/G,IAAA,OAAAC,MACD,SAAKsH,GACH1H,KAAKovB,GAAK1nB,CACZ,GAAC,CAAAvH,IAAA,cAAAC,MACD,SAAY8G,GACV,OAAQA,GACR,KAAKD,EAAWE,EACd,OAAOnH,KAAK0F,EACd,KAAKuB,EAAWG,EACd,OAAOpH,KAAK2F,EACd,KAAKsB,EAAWI,EACd,OAAOrH,KAAK6H,OACd,KAAKZ,EAAWU,EACd,OAAO3H,KAAKqvB,OAEd,MAAM,IAAIrsB,EAAyB,2BAA6BkE,EAClE,GAAC,CAAA/G,IAAA,OAAAC,MACD,WACE,OAAO,IAAIkvB,EAAetvB,KAC5B,GAAC,CAAAG,IAAA,WAAAC,MACD,WACE,MAAO,IAAMJ,KAAK0F,EAAI,KAAO1F,KAAK2F,EAAI,KAAO3F,KAAK6H,OAAS,MAAQ7H,KAAKqvB,OAAS,GACnF,GAAC,CAAAlvB,IAAA,gBAAAC,MACD,SAAcmH,GACZvH,KAAK0F,EAAI6B,EAAM7B,EACf1F,KAAK2F,EAAI4B,EAAM5B,EACf3F,KAAK4H,EAAIL,EAAMM,OACf7H,KAAKovB,GAAK7nB,EAAM8nB,MAClB,IAAC,CAAA,CAAAlvB,IAAA,eAAAC,MArED,WAEE,GADAJ,KAAKovB,GAAK,KACe,IAArBnvB,UAAUyB,OACZuF,EAAWnH,aAAauG,KAAKrG,MAC7BA,KAAKovB,GAAK,OACL,GAAyB,IAArBnvB,UAAUyB,QACnB,GAAIzB,UAAU,aAAcqvB,EAAgB,CAC1C,IAAMrR,EAAQhe,UAAU,GACxBgH,EAAWnH,aAAauG,KAAKrG,KAAMie,GACnCje,KAAKovB,GAAKnR,EAAMmR,EACjB,MAAM,GAAInvB,UAAU,aAAcgH,EAAY,CAC7C,IAAMgX,EAAQhe,UAAU,GACxBgH,EAAWnH,aAAauG,KAAKrG,KAAMie,GACnCje,KAAKovB,GAAKpvB,KAAKqvB,MACjB,OACK,GAAyB,IAArBpvB,UAAUyB,OAAc,CACjC,IAAMgE,EAAIzF,UAAU,GAAI0F,EAAI1F,UAAU,GAAI2H,EAAI3H,UAAU,GAAIyH,EAAIzH,UAAU,GAC1EgH,EAAWnH,aAAauG,KAAKrG,KAAM0F,EAAGC,EAAGiC,GACzC5H,KAAKovB,GAAK1nB,CACZ,CACF,IAAC,EAzByCT,GCEvBsoB,GAAW,WAAA,SAAAA,IAAA1vB,OAAA0vB,EAAA,CAAA,OAAArvB,EAAAqvB,EAAA,KAAA,CAAA,CAAApvB,IAAA,WAAAC,MAC9B,SAAgB2mB,GACd,OAAIA,aAAsBkI,GACjB,EACAlI,aAAsBoI,IAEtBpI,aAAsBuI,GADtB,EAIA,CAGX,GAAC,CAAAnvB,IAAA,YAAAC,MACD,SAAiB2mB,GACf,OAAIA,aAAsBkI,GACjB,EACAlI,aAAsBoI,GACtB,EACApI,aAAsBuI,GACtB,EAEA,CAGX,GAAC,CAAAnvB,IAAA,SAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OAAc,CAC1B,IAAMmjB,EAAY5kB,UAAU,GAC5B,OAAOsvB,EAAYzK,OAAOD,EAAW,EACvC,CAAO,GAAyB,IAArB5kB,UAAUyB,OAAc,CACjC,IAAMmjB,EAAY5kB,UAAU,GAAIuvB,EAAWvvB,UAAU,GACrD,OAAkB,IAAd4kB,EACK,IAAIoK,GACU,IAAdpK,GAAgC,IAAb2K,EACnB,IAAIvoB,EACU,IAAd4d,GAAgC,IAAb2K,EACnB,IAAIL,GACU,IAAdtK,GAAgC,IAAb2K,EACnB,IAAIF,GAEN,IAAIroB,CACb,CACF,IAAC,CA1C6B,GCAXwoB,YAAcC,GACjC,SAAAD,IAAc,IAAAjtB,EAEsC,OAFtC3C,OAAA4vB,GACZjtB,EAAAC,EAAAzC,KAAAyvB,GACAA,EAAe3vB,aAAaC,MAAKyC,EAAOvC,WAAUuC,CACpD,CAAC,OAAAK,EAAA4sB,EAAAC,GAAAxvB,EAAAuvB,EAAA,CAAA,CAAAtvB,IAAA,gBAAAC,MAYD,SAAckE,GACZ,OAAOtE,KAAKuI,IAAIjE,EAClB,GAAC,CAAAnE,IAAA,SAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,QAAyC,kBAAjBzB,UAAU,IAAoB2S,GAAa3S,UAAU,GAAI+P,GAAc,CAG3G,IAFA,IAA2B2f,EAAgB1vB,UAAU,GACjD2vB,GAAY,EACPtrB,EAFIrE,UAAU,GAEL2N,WAAYtJ,EAAEwJ,WAC9B9N,KAAKiR,IAAI3M,EAAE0J,OAAQ2hB,GACnBC,GAAY,EAEd,OAAOA,CACT,CACE,OAAOlH,EAAA+G,EAAA,SAAAzvB,KAAA,GAAaD,MAAMC,KAAMC,UAEpC,GAAC,CAAAE,IAAA,QAAAC,MACD,WAEE,IADA,IAAMyvB,EAAQnH,EAAA+G,EAAYppB,QAAAA,KAAAA,GAAAA,KAAKrG,MACtBsE,EAAI,EAAGA,EAAItE,KAAKmR,OAAQ7M,IAC/BurB,EAAM5e,IAAI3M,EAAGtE,KAAKuI,IAAIjE,GAAGurB,SAE3B,OAAOA,CACT,GAAC,CAAA1vB,IAAA,oBAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OACZ,OAAO1B,KAAK8vB,QAAQL,EAAeM,gBAC9B,GAAyB,IAArB9vB,UAAUyB,OAAc,CAEjC,GADkBzB,UAAU,GAE1B,OAAOD,KAAK8vB,QAAQL,EAAeM,gBAIrC,IAFA,IAAM5e,EAAOnR,KAAKmR,OACZqM,EAAM,IAAIpM,MAAMD,GAAMoG,KAAK,MACxBjT,EAAI,EAAGA,EAAI6M,EAAM7M,IACxBkZ,EAAIlZ,GAAKtE,KAAKuI,IAAI4I,EAAO7M,EAAI,GAE/B,OAAOkZ,CACT,CACF,GAAC,CAAArd,IAAA,MAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OAAc,CAC1B,IAAMuc,EAAQhe,UAAU,GACxB,OAAOyoB,EAAA+G,EAAA,MAAAzvB,KAAA,GAAUqG,KAAKrG,KAAMie,EAC9B,CAAO,GAAyB,IAArBhe,UAAUyB,OAAc,CACjC,GAAIzB,UAAU,aAAcmR,OAAiC,kBAAjBnR,UAAU,GAAkB,CACtE,IAAMge,EAAQhe,UAAU,GAAI0vB,EAAgB1vB,UAAU,GAEtD,OADAD,KAAKiR,IAAIgN,EAAO0R,GAAe,IACxB,CACT,CAAO,GAAI1vB,UAAU,aAAcgH,GAAsC,kBAAjBhH,UAAU,GAAkB,CAClF,IAAMge,EAAQhe,UAAU,GACxB,IAD4CA,UAAU,IAEhDD,KAAKmR,QAAU,EAEjB,GADanR,KAAKuI,IAAIvI,KAAKmR,OAAS,GAC3BrJ,SAASmW,GAAQ,OAAO,KAGrCyK,EAAA+G,EAAUppB,MAAAA,KAAAA,GAAAA,KAAKrG,KAAMie,EACvB,MAAO,GAAIhe,UAAU,aAAc0C,QAAkC,kBAAjB1C,UAAU,GAAkB,CAC9E,IAAM+vB,EAAM/vB,UAAU,GAAI0vB,EAAgB1vB,UAAU,GAEpD,OADAD,KAAKiR,IAAI+e,EAAKL,IACP,CACT,CACF,MAAO,GAAyB,IAArB1vB,UAAUyB,OAAc,CACjC,GAA4B,kBAAjBzB,UAAU,IAAqBA,UAAU,aAAcmR,OAAiC,kBAAjBnR,UAAU,GAAmB,CAC7G,IAAMge,EAAQhe,UAAU,GAAI0vB,EAAgB1vB,UAAU,GACtD,GADsEA,UAAU,GAE9E,IAAK,IAAIqE,EAAI,EAAGA,EAAI2Z,EAAMvc,OAAQ4C,IAChCtE,KAAKiR,IAAIgN,EAAM3Z,GAAIqrB,QAGrB,IAAK,IAAIrrB,EAAI2Z,EAAMvc,OAAS,EAAG4C,GAAK,EAAGA,IACrCtE,KAAKiR,IAAIgN,EAAM3Z,GAAIqrB,GAGvB,OAAO,CACR,CAAM,GAA4B,kBAAjB1vB,UAAU,IAAqB6E,OAAOif,UAAU9jB,UAAU,KAAOA,UAAU,aAAcgH,EAAa,CACtH,IAAM3C,EAAIrE,UAAU,GAAIge,EAAQhe,UAAU,GAC1C,IAD8DA,UAAU,GACpD,CAClB,IAAMkR,EAAOnR,KAAKmR,OAClB,GAAIA,EAAO,EAAG,CACZ,GAAI7M,EAAI,EAEN,GADatE,KAAKuI,IAAIjE,EAAI,GACjBwD,SAASmW,GAAQ,OAAO,KAEnC,GAAI3Z,EAAI6M,EAEN,GADanR,KAAKuI,IAAIjE,GACbwD,SAASmW,GAAQ,OAAO,IAErC,CACF,CACAyK,EAAA+G,EAAA,MAAAzvB,KAAA,GAAUqG,KAAKrG,KAAMsE,EAAG2Z,EAC1B,CACF,MAAO,GAAyB,IAArBhe,UAAUyB,OAAc,CACjC,IAAMuc,EAAQhe,UAAU,GAAI0vB,EAAgB1vB,UAAU,GAAIgwB,EAAQhwB,UAAU,GAAIiwB,EAAMjwB,UAAU,GAC5FkwB,EAAM,EACNF,EAAQC,IAAKC,GAAO,GACxB,IAAK,IAAI7rB,EAAI2rB,EAAO3rB,IAAM4rB,EAAK5rB,GAAK6rB,EAClCnwB,KAAKiR,IAAIgN,EAAM3Z,GAAIqrB,GAErB,OAAO,CACT,CACF,GAAC,CAAAxvB,IAAA,YAAAC,MACD,WACE,GAAIJ,KAAKmR,OAAS,EAAG,CACnB,IAAMif,EAAYpwB,KAAKuI,IAAI,GAAGyE,OAC9BhN,KAAKiR,IAAImf,GAAW,EACtB,CACF,IAAC,CAAA,CAAAjwB,IAAA,eAAAC,MAtHD,WACE,GAAyB,IAArBH,UAAUyB,aAAsB,GAAyB,IAArBzB,UAAUyB,OAAc,CAC9D,IAAMuc,EAAQhe,UAAU,GACxBD,KAAKqwB,eAAepS,EAAMvc,QAC1B1B,KAAKiR,IAAIgN,GAAO,EAClB,MAAO,GAAyB,IAArBhe,UAAUyB,OAAc,CACjC,IAAMuc,EAAQhe,UAAU,GAAI0vB,EAAgB1vB,UAAU,GACtDD,KAAKqwB,eAAepS,EAAMvc,QAC1B1B,KAAKiR,IAAIgN,EAAO0R,EAClB,CACF,IAAC,EAfyCvQ,IA6H5CqQ,GAAeM,eAAiB,IAAI3e,MAAM,GAAGmG,KAAK,MC5HjB,IACZ+Y,GAAgB,WAAA,SAAAA,IAAAzwB,OAAAywB,EAAA,CAAA,OAAApwB,EAAAowB,EAAA,KAAA,CAAA,CAAAnwB,IAAA,SAAAC,MACnC,SAAcod,GACZ,QAAIA,EAAI9b,OAAS,MACZ8b,EAAI,GAAG1V,SAAS0V,EAAIA,EAAI9b,OAAS,GAExC,GAAC,CAAAvB,IAAA,cAAAC,MACD,SAAmBmwB,EAAS/S,GAC1B,IAAK,IAAIlZ,EAAI,EAAGA,EAAIisB,EAAQ7uB,OAAQ4C,IAAK,CACvC,IAAMksB,EAASD,EAAQjsB,GACvB,GAAIgsB,EAAiB5d,QAAQ8d,EAAQhT,GAAO,EAAG,OAAOgT,CACxD,CACA,OAAO,IACT,GAAC,CAAArwB,IAAA,SAAAC,MACD,SAAc0pB,EAAalE,GACzB,IAAMthB,EAAIgsB,EAAiB5d,QAAQkT,EAAiBkE,GACpD,GAAIxlB,EAAI,EAAG,OAAO,KAClB,IAAMmsB,EAAiB,IAAIrf,MAAM0Y,EAAYpoB,QAAQ6V,KAAK,MAC1D4L,GAAOuN,UAAU5G,EAAaxlB,EAAGmsB,EAAgB,EAAG3G,EAAYpoB,OAAS4C,GACzE6e,GAAOuN,UAAU5G,EAAa,EAAG2G,EAAgB3G,EAAYpoB,OAAS4C,EAAGA,GACzE6e,GAAOuN,UAAUD,EAAgB,EAAG3G,EAAa,EAAGA,EAAYpoB,OAClE,GAAC,CAAAvB,IAAA,SAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OAAc,CAC1B,IAAMivB,EAAS1wB,UAAU,GAAI2wB,EAAS3wB,UAAU,GAChD,GAAI0wB,IAAWC,EAAQ,OAAO,EAC9B,GAAe,OAAXD,GAA8B,OAAXC,EAAiB,OAAO,EAC/C,GAAID,EAAOjvB,SAAWkvB,EAAOlvB,OAAQ,OAAO,EAC5C,IAAK,IAAI4C,EAAI,EAAGA,EAAIqsB,EAAOjvB,OAAQ4C,IACjC,IAAKqsB,EAAOrsB,GAAGsC,OAAOgqB,EAAOtsB,IAAK,OAAO,EAE3C,OAAO,CACT,CAAO,GAAyB,IAArBrE,UAAUyB,OAAc,CACjC,IAAMivB,EAAS1wB,UAAU,GAAI2wB,EAAS3wB,UAAU,GAAI4wB,EAAuB5wB,UAAU,GACrF,GAAI0wB,IAAWC,EAAQ,OAAO,EAC9B,GAAe,OAAXD,GAA8B,OAAXC,EAAiB,OAAO,EAC/C,GAAID,EAAOjvB,SAAWkvB,EAAOlvB,OAAQ,OAAO,EAC5C,IAAK,IAAI4C,EAAI,EAAGA,EAAIqsB,EAAOjvB,OAAQ4C,IACjC,GAA2D,IAAvDusB,EAAqB/nB,QAAQ6nB,EAAOrsB,GAAIssB,EAAOtsB,IAAW,OAAO,EAEvE,OAAO,CACT,CACF,GAAC,CAAAnE,IAAA,eAAAC,MACD,SAAoB0pB,EAAa7f,GAE/B,IADA,IAAM6mB,EAAY,IAAIrB,GACbnrB,EAAI,EAAGA,EAAIwlB,EAAYpoB,OAAQ4C,IAClC2F,EAAIC,WAAW4f,EAAYxlB,KAAKwsB,EAAU7f,IAAI6Y,EAAYxlB,IAAI,GAEpE,OAAOwsB,EAAUxI,mBACnB,GAAC,CAAAnoB,IAAA,WAAAC,MACD,SAAgBod,GACd,GAAY,OAARA,GAA+B,IAAfA,EAAI9b,OACtB,OAAO,EAET,IAC4BkP,EADxB4e,EAAW,EAAC3e,EAAAC,EACS0M,GAAG,IAA5B,IAAA3M,EAAAE,MAAAH,EAAAC,EAAAhM,KAAAmM,MACE,CAAA,IADS+V,EAAUnW,EAAAxQ,MACnBovB,EAAW3uB,KAAK+K,IAAI4jB,EAAUD,GAAYC,SAASzI,GAAW,CAAC,CAAA,MAAA7V,GAAAL,EAAA7I,EAAAkJ,EAAA,CAAA,QAAAL,EAAAjL,GAAA,CAEjE,OAAO4pB,CACT,GAAC,CAAArvB,IAAA,oBAAAC,MACD,SAAyB6d,GACvB,IAAK,IAAI3Z,EAAI,EAAGA,EAAI2Z,EAAMvc,OAAQ4C,IAChC,GAAI2Z,EAAM3Z,EAAI,GAAGsC,OAAOqX,EAAM3Z,IAC5B,OAAO,EAGX,OAAO,CACT,GAAC,CAAAnE,IAAA,uBAAAC,MACD,SAA4B6d,GAC1B,OAAKqS,EAAiBS,kBAAkB9S,GACtB,IAAIwR,GAAexR,GAAO,GAC3BqK,oBAFsCrK,CAGzD,GAAC,CAAA9d,IAAA,UAAAC,MACD,SAAe6d,GAGb,IAFA,IAAM6H,EAAO7H,EAAMvc,OAAS,EACtBglB,EAAM7lB,KAAKyT,MAAMwR,EAAO,GACrBxhB,EAAI,EAAGA,GAAKoiB,EAAKpiB,IAAK,CAC7B,IAAMsiB,EAAM3I,EAAM3Z,GAClB2Z,EAAM3Z,GAAK2Z,EAAM6H,EAAOxhB,GACxB2Z,EAAM6H,EAAOxhB,GAAKsiB,CACpB,CACF,GAAC,CAAAzmB,IAAA,aAAAC,MACD,SAAkB6d,GAEhB,IADA,IAAI+S,EAAU,EACL1sB,EAAI,EAAGA,EAAI2Z,EAAMvc,OAAQ4C,IACf,OAAb2Z,EAAM3Z,IAAa0sB,IAEzB,IAAMC,EAAW,IAAI7f,MAAM4f,GAASzZ,KAAK,MACzC,GAAgB,IAAZyZ,EAAe,OAAOC,EAE1B,IADA,IAAIpjB,EAAI,EACCvJ,EAAI,EAAGA,EAAI2Z,EAAMvc,OAAQ4C,IACf,OAAb2Z,EAAM3Z,KAAa2sB,EAASpjB,KAAOoQ,EAAM3Z,IAE/C,OAAO2sB,CACT,GAAC,CAAA9wB,IAAA,WAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OAAc,CAG1B,IAFA,IAAMooB,EAAc7pB,UAAU,GACxB+M,EAAO,IAAIoE,MAAM0Y,EAAYpoB,QAAQ6V,KAAK,MACvCjT,EAAI,EAAGA,EAAIwlB,EAAYpoB,OAAQ4C,IACtC0I,EAAK1I,GAAKwlB,EAAYxlB,GAAG0I,OAE3B,OAAOA,CACT,CAAO,GAAyB,IAArB/M,UAAUyB,OAEnB,IADA,IAAM0hB,EAAMnjB,UAAU,GAAIixB,EAAWjxB,UAAU,GAAIqjB,EAAOrjB,UAAU,GAAIkxB,EAAYlxB,UAAU,GAAIyB,EAASzB,UAAU,GAC5GqE,EAAI,EAAGA,EAAI5C,EAAQ4C,IAC1Bgf,EAAK6N,EAAY7sB,GAAK8e,EAAI8N,EAAW5sB,GAAG0I,MAG9C,GAAC,CAAA7M,IAAA,kBAAAC,MACD,SAAuBgxB,EAAMC,GAC3B,IAAK,IAAI/sB,EAAI,EAAGA,EAAI8sB,EAAK1vB,OAAQ4C,IAAK,CACpC,IAAM4G,EAAKkmB,EAAK9sB,GACV6G,EAAKkmB,EAAKD,EAAK1vB,OAAS4C,EAAI,GAClC,GAAyB,IAArB4G,EAAGiD,UAAUhD,GAAW,OAAO,CACrC,CACA,OAAO,CACT,GAAC,CAAAhL,IAAA,WAAAC,MACD,SAAgB0pB,GAEd,IADA,IAAM7f,EAAM,IAAIb,EACP9E,EAAI,EAAGA,EAAIwlB,EAAYpoB,OAAQ4C,IACtC2F,EAAIQ,gBAAgBqf,EAAYxlB,IAElC,OAAO2F,CACT,GAAC,CAAA9J,IAAA,oBAAAC,MACD,SAAyB0wB,GACvB,OAAOA,EAAUhB,QAAQQ,EAAiBP,eAC5C,GAAC,CAAA5vB,IAAA,YAAAC,MACD,SAAiBod,GACf,GAAY,OAARA,GAA+B,IAAfA,EAAI9b,OACtB,OAAO,EAET,IAC4B4oB,EADxBzF,EAAY,EAAC0F,EAAAzZ,EACQ0M,GAAG,IAA5B,IAAA+M,EAAAxZ,MAAAuZ,EAAAC,EAAA1lB,KAAAmM,MACE,CAAA,IADS+V,EAAUuD,EAAAlqB,MACnBykB,EAAYhkB,KAAK+K,IAAIiZ,EAAW0K,GAAY1K,UAAUkC,GAAW,CAAC,CAAA,MAAA7V,GAAAqZ,EAAAviB,EAAAkJ,EAAA,CAAA,QAAAqZ,EAAA3kB,GAAA,CAEpE,OAAOif,CACT,GAAC,CAAA1kB,IAAA,+BAAAC,MACD,SAAoCyE,EAAG2C,GACrC,OAAOA,EAAE9F,QAAUmD,EAAI2C,EAAI,EAC7B,GAAC,CAAArH,IAAA,UAAAC,MACD,SAAe2mB,EAAY+C,GACzB,IAAK,IAAIxlB,EAAI,EAAGA,EAAIwlB,EAAYpoB,OAAQ4C,IACtC,GAAIyiB,EAAWngB,OAAOkjB,EAAYxlB,IAChC,OAAOA,EAGX,OAAQ,CACV,GAAC,CAAAnE,IAAA,sBAAAC,MACD,SAA2Bod,GACzB,IAAK,IAAIlZ,EAAI,EAAGA,EAAIzD,KAAKyT,MAAMkJ,EAAI9b,OAAS,GAAI4C,IAAK,CACnD,IAAMuJ,EAAI2P,EAAI9b,OAAS,EAAI4C,EACrBoI,EAAO8Q,EAAIlZ,GAAG6J,UAAUqP,EAAI3P,IAClC,GAAa,IAATnB,EAAY,OAAOA,CACzB,CACA,OAAO,CACT,GAAC,CAAAvM,IAAA,UAAAC,MACD,SAAegxB,EAAMC,GAEnB,IADA,IAAI/sB,EAAI,EACDA,EAAI8sB,EAAK1vB,QAAU4C,EAAI+sB,EAAK3vB,QAAQ,CACzC,IAAMoH,EAAUsoB,EAAK9sB,GAAG6J,UAAUkjB,EAAK/sB,IACvC,GAAgB,IAAZwE,EAAe,OAAOA,EAC1BxE,GACF,CACA,OAAIA,EAAI+sB,EAAK3vB,QAAgB,EACzB4C,EAAI8sB,EAAK1vB,OAAe,EACrB,CACT,GAAC,CAAAvB,IAAA,gBAAAC,MACD,SAAqB0pB,GAEnB,IADA,IAAIxD,EAAW,KACNhiB,EAAI,EAAGA,EAAIwlB,EAAYpoB,OAAQ4C,KACrB,OAAbgiB,GAAqBA,EAASnY,UAAU2b,EAAYxlB,IAAM,KAC5DgiB,EAAWwD,EAAYxlB,IAG3B,OAAOgiB,CACT,GAAC,CAAAnmB,IAAA,UAAAC,MACD,SAAeod,EAAKyS,EAAOC,GACzBD,EAAQzM,GAAS8N,MAAMrB,EAAO,EAAGzS,EAAI9b,QAErC,IAAI6vB,GADJrB,EAAM1M,GAAS8N,MAAMpB,GAAM,EAAG1S,EAAI9b,SACjBuuB,EAAQ,EACrBC,EAAM,IAAGqB,EAAO,GAChBtB,GAASzS,EAAI9b,SAAQ6vB,EAAO,GAC5BrB,EAAMD,IAAOsB,EAAO,GACxB,IAAMC,EAAa,IAAIpgB,MAAMmgB,GAAMha,KAAK,MACxC,GAAa,IAATga,EAAY,OAAOC,EAEvB,IADA,IAAIC,EAAO,EACFntB,EAAI2rB,EAAO3rB,GAAK4rB,EAAK5rB,IAC5BktB,EAAWC,KAAUjU,EAAIlZ,GAE3B,OAAOktB,CACT,IAAC,CA9LkC,GAgM/BE,GAAiB,WAAA,OAAAxxB,GAAA,SAAAwxB,IAAA7xB,OAAA6xB,EAAA,GAAA,CAAA,CAAAvxB,IAAA,UAAAC,MACrB,SAAQuxB,EAAIC,GACV,IAAMR,EAAOO,EACPN,EAAOO,EACb,OAAOtB,GAAiBxnB,QAAQsoB,EAAMC,EACxC,GAAC,CAAAlxB,IAAA,cAAAoI,IACD,WACE,MAAO,CAAC7D,EACV,IAAC,CARoB,GAUjBmtB,GAAuB,WAAA,OAAA3xB,GAAA,SAAA2xB,IAAAhyB,OAAAgyB,EAAA,GAAA,CAAA,CAAA1xB,IAAA,UAAAC,MAC3B,SAAQuxB,EAAIC,GACV,IAAMR,EAAOO,EACPN,EAAOO,EACb,GAAIR,EAAK1vB,OAAS2vB,EAAK3vB,OAAQ,OAAQ,EACvC,GAAI0vB,EAAK1vB,OAAS2vB,EAAK3vB,OAAQ,OAAO,EACtC,GAAoB,IAAhB0vB,EAAK1vB,OAAc,OAAO,EAC9B,IAAMowB,EAAcxB,GAAiBxnB,QAAQsoB,EAAMC,GAEnD,OADmBf,GAAiByB,gBAAgBX,EAAMC,GACnC,EAChBS,CACT,GAAC,CAAA3xB,IAAA,aAAAC,MACD,SAAWuxB,EAAIC,GACb,IAAMR,EAAOO,EACPN,EAAOO,EACb,GAAIR,EAAK1vB,OAAS2vB,EAAK3vB,OAAQ,OAAQ,EACvC,GAAI0vB,EAAK1vB,OAAS2vB,EAAK3vB,OAAQ,OAAO,EACtC,GAAoB,IAAhB0vB,EAAK1vB,OAAc,OAAO,EAK9B,IAJA,IAAMswB,EAAO1B,GAAiB2B,oBAAoBb,GAC5Cc,EAAO5B,GAAiB2B,oBAAoBZ,GAC9Cc,EAAKH,EAAO,EAAI,EAAIZ,EAAK1vB,OAAS,EAClC0wB,EAAKF,EAAO,EAAI,EAAId,EAAK1vB,OAAS,EAC7B4C,EAAI,EAAGA,EAAI8sB,EAAK1vB,OAAQ4C,IAAK,CACpC,IAAM+tB,EAAYjB,EAAKe,GAAIhkB,UAAUkjB,EAAKe,IAC1C,GAAkB,IAAdC,EAAiB,OAAOA,EAC5BF,GAAMH,EACNI,GAAMF,CACR,CACA,OAAO,CACT,GAAC,CAAA/xB,IAAA,cAAAoI,IACD,WACE,MAAO,CAAC7D,EACV,IAAC,CAhC0B,GAkC7B4rB,GAAiBoB,kBAAoBA,GACrCpB,GAAiBuB,wBAA0BA,GAC3CvB,GAAiBP,eAAiB,IAAI3e,MAAM,GAAGmG,KAAK,UCpP/B+a,GAAa,WAG/B,OAAApyB,GAFD,SAAAoyB,EAAYxf,GAAKjT,OAAAyyB,GACftyB,KAAK8S,IAAMA,CACb,GAAC,CAAA,CAAA3S,IAAA,SAAAC,MACD,SAAO4H,GACLhI,KAAK8S,KAAO9K,CACd,GAAC,CAAA7H,IAAA,YAAAC,MACD,SAAUkE,EAAGkD,GACXxH,KAAK8S,IAAM9S,KAAK8S,IAAIC,OAAO,EAAGzO,GAAKkD,EAAIxH,KAAK8S,IAAIC,OAAOzO,EAAI,EAC7D,GAAC,CAAAnE,IAAA,WAAAC,MACD,WACE,OAAOJ,KAAK8S,GACd,IAAC,CAZ+B,GCQbyf,GAAuB,WAC1C,SAAAA,IAAc1yB,OAAA0yB,GACZA,EAAwBzyB,aAAaC,MAAMC,KAAMC,UACnD,CAAC,OAAAC,EAAAqyB,EAAA,CAAA,CAAApyB,IAAA,OAAAC,MA6DD,SAAKmS,GACH,OAAIvS,KAAK6b,OACA7b,KAAKypB,aAAalX,GAAO8c,OAEzB5qB,EAAOE,GAElB,GAAC,CAAAxE,IAAA,cAAAC,MACD,SAAYmS,EAAOrL,EAAe9G,GAChC,OAAQ8G,GACR,KAAK0U,GAAmBzU,EACtBnH,KAAKypB,aAAalX,GAAO7M,EAAItF,EAC7B,MACF,KAAKwb,GAAmBxU,EACtBpH,KAAKypB,aAAalX,GAAO5M,EAAIvF,EAC7B,MACF,QACEJ,KAAKypB,aAAalX,GAAOgT,YAAYre,EAAe9G,GAExD,GAAC,CAAAD,IAAA,OAAAC,MACD,SAAKmS,GACH,OAAIvS,KAAKkc,OACAlc,KAAKypB,aAAalX,GAAO1K,OAEzBpD,EAAOE,GAElB,GAAC,CAAAxE,IAAA,OAAAC,MACD,WACE,OAAOJ,KAAKypB,aAAa/nB,MAC3B,GAAC,CAAAvB,IAAA,cAAAC,MACD,SAAYmS,EAAOrL,GACjB,OAAQA,GACR,KAAK0U,GAAmBzU,EACtB,OAAOnH,KAAKypB,aAAalX,GAAO7M,EAClC,KAAKkW,GAAmBxU,EACtB,OAAOpH,KAAKypB,aAAalX,GAAO5M,EAClC,QACE,OAAO3F,KAAKypB,aAAalX,GAAO0J,YAAY/U,GAEhD,GAAC,CAAA/G,IAAA,gBAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OAAc,CAC1B,IAAM4C,EAAIrE,UAAU,GACpB,OAAOD,KAAKypB,aAAanlB,EAC3B,CAAO,GAAyB,IAArBrE,UAAUyB,OAAc,CACjC,IAAM6Q,EAAQtS,UAAU,GAAYA,UAAU,GACxCuyB,cAAcxyB,KAAKypB,aAAalX,GACxC,CACF,GAAC,CAAApS,IAAA,oBAAAC,MACD,SAAkBkE,GAChB,IAAM0I,EAAOhN,KAAKyyB,mBAElB,OADAzlB,EAAKwlB,cAAcxyB,KAAKypB,aAAanlB,IAC9B0I,CACT,GAAC,CAAA7M,IAAA,mBAAAC,MACD,WACE,OAAOmvB,GAAYzK,OAAO9kB,KAAK+b,eAAgB/b,KAAKgc,cACtD,GAAC,CAAA7b,IAAA,eAAAC,MACD,WACE,OAAOJ,KAAK0yB,UACd,GAAC,CAAAvyB,IAAA,OAAAC,MACD,SAAKmS,GACH,OAAOvS,KAAKypB,aAAalX,GAAO7M,CAClC,GAAC,CAAAvF,IAAA,cAAAC,MACD,WACE,OAAOJ,KAAK2yB,SACd,GAAC,CAAAxyB,IAAA,iBAAAC,MACD,SAAe6J,GACb,IAAK,IAAI3F,EAAI,EAAGA,EAAItE,KAAKypB,aAAa/nB,OAAQ4C,IAC5C2F,EAAIQ,gBAAgBzK,KAAKypB,aAAanlB,IAExC,OAAO2F,CACT,GAAC,CAAA9J,IAAA,OAAAC,MACD,WAEE,IADA,IAAMwyB,EAAmB,IAAIxhB,MAAMpR,KAAKmR,QAAQoG,KAAK,MAC5CjT,EAAI,EAAGA,EAAItE,KAAKypB,aAAa/nB,OAAQ4C,IAAK,CACjD,IAAM8rB,EAAYpwB,KAAKyyB,mBACvBrC,EAAUoC,cAAcxyB,KAAKypB,aAAanlB,IAC1CsuB,EAAiBtuB,GAAK8rB,CACxB,CACA,OAAO,IAAImC,EAAwBK,EAAkB5yB,KAAK0yB,WAAY1yB,KAAK2yB,UAC7E,GAAC,CAAAxyB,IAAA,WAAAC,MACD,WACE,GAAIJ,KAAKypB,aAAa/nB,OAAS,EAAG,CAChC,IAAMmxB,EAAa,IAAIP,GAAc,GAAKtyB,KAAKypB,aAAa/nB,QAC5DmxB,EAAWze,OAAO,KAClBye,EAAWze,OAAOpU,KAAKypB,aAAa,IACpC,IAAK,IAAInlB,EAAI,EAAGA,EAAItE,KAAKypB,aAAa/nB,OAAQ4C,IAC5CuuB,EAAWze,OAAO,MAClBye,EAAWze,OAAOpU,KAAKypB,aAAanlB,IAGtC,OADAuuB,EAAWze,OAAO,KACXye,EAAW/d,UACpB,CACE,MAAO,IAEX,GAAC,CAAA3U,IAAA,OAAAC,MACD,SAAKmS,GACH,OAAOvS,KAAKypB,aAAalX,GAAO5M,CAClC,GAAC,CAAAxF,IAAA,oBAAAC,MACD,WACE,OAAOJ,KAAKypB,YACd,GAAC,CAAAtpB,IAAA,cAAAoI,IACD,WACE,MAAO,CAACqT,GAAoBtY,EAC9B,IAAC,CAAA,CAAAnD,IAAA,eAAAC,MAnKD,WAIE,GAHAJ,KAAK0yB,WAAa,EAClB1yB,KAAK2yB,UAAY,EACjB3yB,KAAKypB,aAAe,KACK,IAArBxpB,UAAUyB,QACZ,GAAIzB,UAAU,aAAcmR,MAAO,CACjC,IAAM0Y,EAAc7pB,UAAU,GAC9BsyB,EAAwBzyB,aAAauG,KAAKrG,KAAM8pB,EAAawG,GAAiBzL,UAAUiF,GAAcwG,GAAiBd,SAAS1F,GACjI,MAAM,GAAIhlB,OAAOif,UAAU9jB,UAAU,IAAK,CACzC,IAAMkR,EAAOlR,UAAU,GACvBD,KAAKypB,aAAe,IAAIrY,MAAMD,GAAMoG,KAAK,MACzC,IAAK,IAAIjT,EAAI,EAAGA,EAAI6M,EAAM7M,IACxBtE,KAAKypB,aAAanlB,GAAK,IAAI2C,CAE9B,MAAM,GAAI2L,GAAa3S,UAAU,GAAI2b,IAAqB,CACzD,IAAMkX,EAAW7yB,UAAU,GAC3B,GAAiB,OAAb6yB,EAEF,OADA9yB,KAAKypB,aAAe,IAAIrY,MAAM,GAAGmG,KAAK,MAC/B,KAETvX,KAAK0yB,WAAaI,EAAS/W,eAC3B/b,KAAK2yB,UAAYG,EAAS9W,cAC1Bhc,KAAKypB,aAAe,IAAIrY,MAAM0hB,EAAS3hB,QAAQoG,KAAK,MACpD,IAAK,IAAIjT,EAAI,EAAGA,EAAItE,KAAKypB,aAAa/nB,OAAQ4C,IAC5CtE,KAAKypB,aAAanlB,GAAKwuB,EAASC,kBAAkBzuB,EAEtD,OACK,GAAyB,IAArBrE,UAAUyB,QACnB,GAAIzB,UAAU,aAAcmR,OAAStM,OAAOif,UAAU9jB,UAAU,IAAK,CACnE,IAAM6pB,EAAc7pB,UAAU,GAAI4kB,EAAY5kB,UAAU,GACxDsyB,EAAwBzyB,aAAauG,KAAKrG,KAAM8pB,EAAajF,EAAWyL,GAAiBd,SAAS1F,GACnG,MAAM,GAAIhlB,OAAOif,UAAU9jB,UAAU,KAAO6E,OAAOif,UAAU9jB,UAAU,IAAK,CAC3E,IAAMkR,EAAOlR,UAAU,GAAI4kB,EAAY5kB,UAAU,GACjDD,KAAKypB,aAAe,IAAIrY,MAAMD,GAAMoG,KAAK,MACzCvX,KAAK0yB,WAAa7N,EAClB,IAAK,IAAIvgB,EAAI,EAAGA,EAAI6M,EAAM7M,IACxBtE,KAAKypB,aAAanlB,GAAKirB,GAAYzK,OAAOD,EAE9C,OACK,GAAyB,IAArB5kB,UAAUyB,OACnB,GAAIoD,OAAOif,UAAU9jB,UAAU,KAAQA,UAAU,aAAcmR,OAAStM,OAAOif,UAAU9jB,UAAU,IAAM,CACvG,IAAM6pB,EAAc7pB,UAAU,GAAI4kB,EAAY5kB,UAAU,GAAIuvB,EAAWvvB,UAAU,GACjFD,KAAK0yB,WAAa7N,EAClB7kB,KAAK2yB,UAAYnD,EAEfxvB,KAAKypB,aADa,OAAhBK,EACkB,IAAI1Y,MAAM,GAAGmG,KAAK,MAElBuS,CAExB,MAAO,GAAIhlB,OAAOif,UAAU9jB,UAAU,KAAQ6E,OAAOif,UAAU9jB,UAAU,KAAO6E,OAAOif,UAAU9jB,UAAU,IAAM,CAC/G,IAAMkR,EAAOlR,UAAU,GAAI4kB,EAAY5kB,UAAU,GAAIuvB,EAAWvvB,UAAU,GAC1ED,KAAKypB,aAAe,IAAIrY,MAAMD,GAAMoG,KAAK,MACzCvX,KAAK0yB,WAAa7N,EAClB7kB,KAAK2yB,UAAYnD,EACjB,IAAK,IAAIlrB,EAAI,EAAGA,EAAI6M,EAAM7M,IACxBtE,KAAKypB,aAAanlB,GAAKtE,KAAKyyB,kBAEhC,CAEJ,IAAC,CA/DyC,GCHvBO,GAA8B,WAAA,SAAAA,IAAAnzB,OAAAmzB,EAAA,CAAA,OAAA9yB,EAAA8yB,EAAA,CAAA,CAAA7yB,IAAA,cAAAC,MAIjD,WACE,OAAO4yB,EAA+BC,UACxC,GAAC,CAAA9yB,IAAA,SAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OAAc,CAC1B,GAAIzB,UAAU,aAAcmR,MAE1B,OAAO,IAAImhB,GADStyB,UAAU,IAEzB,GAAI2S,GAAa3S,UAAU,GAAI2b,IAEpC,OAAO,IAAI2W,GADMtyB,UAAU,GAG/B,KAAO,IAAyB,IAArBA,UAAUyB,OAAc,CACjC,IAAyBmjB,EAAY5kB,UAAU,GAG/C,OAFI4kB,EAAY,IAAGA,EAAY,GAC3BA,EAAY,IAAGA,EAAY,GACxB,IAAI0N,GAHAtyB,UAAU,GAGoB4kB,EAC3C,CAAO,GAAyB,IAArB5kB,UAAUyB,OAAc,CACjC,IAAmD8tB,EAAWvvB,UAAU,GACpEizB,EADiCjzB,UAAU,GACrBuvB,EAQ1B,OAPIA,EAAW,IACbA,EAAW,GAET0D,EAAU,IACZA,EAAU,GAERA,EAAU,IAAGA,EAAU,GACpB,IAAIX,GATAtyB,UAAU,GASoBizB,EAAU1D,EAAUA,EAC/D,EACF,GAAC,CAAArvB,IAAA,cAAAoI,IACD,WACE,MAAO,CAACqc,GAA2BthB,EACrC,IAAC,CAAA,CAAAnD,IAAA,WAAAC,MAnCD,WACE,OAAO4yB,EAA+BG,cACxC,IAAC,CAHgD,GAsCnDH,GAA+BG,eAAiB,IAAIH,GCxCG,IAClCI,YAAYxE,GAC/B,SAAAwE,IAAc,IAAA5wB,EAEoC,OAFpC3C,OAAAuzB,GACZ5wB,EAAAC,EAAAzC,KAAAozB,GACAA,EAAatzB,aAAaC,MAAKyC,EAAOvC,WAAUuC,CAClD,CAAC,OAAAK,EAAAuwB,EAAAxE,GAAA1uB,EAAAkzB,EAAA,CAAA,CAAAjzB,IAAA,eAAAC,MAKD,WAEE,IADA,IAAMizB,EAAW,IAAIjiB,MAAMpR,KAAKytB,YAAY/rB,QAAQ6V,KAAK,MAChDjT,EAAI,EAAGA,EAAI+uB,EAAS3xB,OAAQ4C,IACnC+uB,EAAS/uB,GAAKtE,KAAKytB,YAAYnpB,GAAG0I,OAEpC,OAAO,IAAIomB,EAAaC,EAAUrzB,KAAKkM,SACzC,GAAC,CAAA/L,IAAA,cAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,QAAyC,iBAAjBzB,UAAU,IAAmBA,UAAU,aAAc8L,EAAW,CACpG,IAAMxE,EAAQtH,UAAU,GAAIiE,EAAYjE,UAAU,GAClD,QAAKD,KAAKuoB,kBAAkBhhB,IAGrBmhB,EAAA0K,EAAkB/sB,cAAAA,KAAAA,GAAAA,KAAKrG,KAAMuH,EAAOrD,EAC7C,CACE,OAAOwkB,EAAA0K,EAAA,cAAApzB,KAAA,GAAkBD,MAAMC,KAAMC,UAEzC,GAAC,CAAAE,IAAA,uBAAAC,MACD,WACE,OAAO,CACT,GAAC,CAAAD,IAAA,cAAAC,MACD,WACE,OAAO2L,EAASwC,qBAClB,GAAC,CAAApO,IAAA,eAAAC,MACD,WACE,OAAO,CACT,GAAC,CAAAD,IAAA,cAAAC,MACD,WACE,GAAIJ,KAAKwM,UACP,OAAOxM,KAAK6M,aAAamgB,wBAG3B,IADA,IAAMsG,EAAW,IAAIlU,GACZ9a,EAAI,EAAGA,EAAItE,KAAKytB,YAAY/rB,OAAQ4C,IAG3C,IAFA,IACM2oB,EADUjtB,KAAKytB,YAAYnpB,GACXivB,cACb1lB,EAAI,EAAGA,EAAIof,EAAMoB,mBAAoBxgB,IAC5CylB,EAASriB,IAAIgc,EAAMuB,aAAa3gB,IAGpC,IAAM2lB,EAAgB,IAAIpiB,MAAMkiB,EAASniB,QAAQoG,KAAK,MACtD,OAAOvX,KAAK6M,aAAamgB,sBAAsBsG,EAASxD,QAAQ0D,GAClE,GAAC,CAAArzB,IAAA,kBAAAC,MACD,WACE,OAAO2L,EAASsD,qBAClB,GAAC,CAAAlP,IAAA,cAAAoI,IACD,WACE,MAAO,CAACqiB,GACV,IAAC,CAAA,CAAAzqB,IAAA,eAAAC,MAnDD,WACE,IAAMizB,EAAWpzB,UAAU,GAAIyO,EAAUzO,UAAU,GACnDutB,GAAmB1tB,aAAauG,KAAKrG,KAAMqzB,EAAU3kB,EACvD,IAAC,EARuC8e,ICDrBhd,GAAG,WAAA,OAAAtQ,GAAA,SAAAsQ,IAAA3Q,OAAA2Q,EAAA,GAAA,CAAA,CAAArQ,IAAA,MAAAC,MAOtB,WAAM,GAEN,CAAAD,IAAA,MAAAC,MAOA,WAAM,GAEN,CAAAD,IAAA,OAAAC,MAIA,WAAO,GAEP,CAAAD,IAAA,SAAAC,MAIA,WAAS,GAET,CAAAD,IAAA,WAAAC,MAgBA,WAAW,IAAG,CA9CQ,GCIHqzB,YAAOC,GAC1B,SAAAD,IAAc,IAAAjxB,EAEQ,OAFR3C,OAAA4zB,IACZjxB,EAAAC,EAAAzC,KAAAyzB,IACKljB,IAAM,IAAIC,IAAKhO,CACtB,CAAC,OAAAK,EAAA4wB,EAAAC,GAAAxzB,EAAAuzB,EAAA,CAAA,CAAAtzB,IAAA,MAAAC,MAED,SAAID,GACF,OAAOH,KAAKuQ,IAAIhI,IAAIpI,IAAQ,IAC9B,GAAC,CAAAA,IAAA,MAAAC,MAED,SAAID,EAAKC,GAEP,OADAJ,KAAKuQ,IAAII,IAAIxQ,EAAKC,GACXA,CACT,GAAC,CAAAD,IAAA,SAAAC,MAED,WAIE,IAHA,IAAMsf,EAAY,IAAIN,GAChBS,EAAK7f,KAAKuQ,IAAIe,SAChBvJ,EAAI8X,EAAG7R,QACHjG,EAAEiJ,MACR0O,EAAUzO,IAAIlJ,EAAE3H,OAChB2H,EAAI8X,EAAG7R,OAET,OAAO0R,CACT,GAAC,CAAAvf,IAAA,WAAAC,MAED,WACE,IAAMuzB,EAAU,IAAItjB,EAEpB,OADArQ,KAAKuQ,IAAIqjB,UAAUC,SAAQ,SAAAC,GAAK,OAAIH,EAAQ1iB,IAAI6iB,MACzCH,CACT,GAAC,CAAAxzB,IAAA,OAAAC,MAED,WACE,OAAOJ,KAAKuQ,IAAIY,MAClB,IAAC,EAlCkC4iB,ICDhBC,GAAc,WACjC,SAAAA,IAAcn0B,OAAAm0B,GACZA,EAAel0B,aAAaC,MAAMC,KAAMC,UAC1C,CAAC,OAAAC,EAAA8zB,EAAA,CAAA,CAAA7zB,IAAA,SAAAC,MA4BD,SAAOmH,GACL,KAAMA,aAAiBysB,GACrB,OAAO,EAET,IAAMC,EAAsB1sB,EAC5B,OAAOvH,KAAKk0B,aAAeD,EAAoBC,YAAcl0B,KAAKm0B,SAAWF,EAAoBE,MACnG,GAAC,CAAAh0B,IAAA,YAAAC,MACD,SAAU2H,GACR,IAAMR,EAAQQ,EACRyP,EAAYxX,KAAKo0B,8BACjBC,EAAiB9sB,EAAM6sB,8BAC7B,OAAOphB,GAAQlK,QAAQ0O,EAAW6c,EACpC,GAAC,CAAAl0B,IAAA,WAAAC,MACD,WACE,OAAOJ,KAAKm0B,MACd,GAAC,CAAAh0B,IAAA,aAAAC,MACD,WACE,OAAOJ,KAAKk0B,aAAeF,EAAeM,UAAYt0B,KAAKk0B,aAAeF,EAAeO,eAC3F,GAAC,CAAAp0B,IAAA,UAAAC,MACD,WACE,OAAOJ,KAAKk0B,UACd,GAAC,CAAA/zB,IAAA,WAAAC,MACD,WACE,IAAIo0B,EAAc,UAQlB,OAPIx0B,KAAKk0B,aAAeF,EAAeM,SACrCE,EAAc,WACPx0B,KAAKk0B,aAAeF,EAAeO,gBAC1CC,EAAc,kBACPx0B,KAAKk0B,aAAeF,EAAeS,QAC1CD,EAAc,gBAAkBx0B,KAAK00B,WAAa,KAE7CF,CACT,GAAC,CAAAr0B,IAAA,cAAAC,MACD,WACE,GAA4B,iBAAjBH,UAAU,GAAiB,CACpC,IAAM+Y,EAAM/Y,UAAU,GACtB,OAAIwE,EAAOG,MAAMoU,IACbhZ,KAAKk0B,aAAeF,EAAeO,gBADTvb,EAK1BhZ,KAAKk0B,aAAeF,EAAeS,MAC9B5zB,KAAK8zB,MAAM3b,EAAMhZ,KAAKm0B,QAAUn0B,KAAKm0B,OAEvCnb,CACR,CAAM,GAAI/Y,UAAU,aAAcgH,EAAY,CAC7C,IAAMgX,EAAQhe,UAAU,GACxB,GAAID,KAAKk0B,aAAeF,EAAeM,SAAU,OAAO,KACxDrW,EAAMvY,EAAI1F,KAAK40B,YAAY3W,EAAMvY,GACjCuY,EAAMtY,EAAI3F,KAAK40B,YAAY3W,EAAMtY,EACnC,CACF,GAAC,CAAAxF,IAAA,8BAAAC,MACD,WACE,IAAIy0B,EAAe,GAQnB,OAPI70B,KAAKk0B,aAAeF,EAAeM,SACrCO,EAAe,GACR70B,KAAKk0B,aAAeF,EAAeO,gBAC1CM,EAAe,EACR70B,KAAKk0B,aAAeF,EAAeS,QAC1CI,EAAe,EAAIh0B,KAAKyT,MAAMzT,KAAKsV,KAAKtV,KAAK+Y,IAAI5Z,KAAK00B,YAAc7zB,KAAK+Y,IAAI,OAExEib,CACT,GAAC,CAAA10B,IAAA,WAAAC,MACD,SAASqT,GACPzT,KAAKm0B,OAAStzB,KAAKC,IAAI2S,EACzB,GAAC,CAAAtT,IAAA,cAAAoI,IACD,WACE,MAAO,CAACjF,EAAcF,EACxB,IAAC,CAAA,CAAAjD,IAAA,eAAAC,MA/FD,WAGE,GAFAJ,KAAKk0B,WAAa,KAClBl0B,KAAKm0B,OAAS,KACW,IAArBl0B,UAAUyB,OACZ1B,KAAKk0B,WAAaF,EAAeM,cAC9B,GAAyB,IAArBr0B,UAAUyB,OACjB,GAAIzB,UAAU,aAAc60B,GAAM,CAChC,IAAMC,EAAY90B,UAAU,GAC5BD,KAAKk0B,WAAaa,EACdA,IAAcf,EAAeS,OAC/Bz0B,KAAKg1B,SAAS,EAEjB,MAAM,GAA4B,iBAAjB/0B,UAAU,GAAiB,CAC3C,IAAMwT,EAAQxT,UAAU,GACxBD,KAAKk0B,WAAaF,EAAeS,MACjCz0B,KAAKg1B,SAASvhB,EACf,MAAM,GAAIxT,UAAU,aAAc+zB,EAAgB,CACjD,IAAMiB,EAAKh1B,UAAU,GACrBD,KAAKk0B,WAAae,EAAGf,WACrBl0B,KAAKm0B,OAASc,EAAGd,MACnB,CAEJ,GAAC,CAAAh0B,IAAA,cAAAC,MACD,SAAmB80B,EAAKC,GACtB,OAAID,EAAI/mB,UAAUgnB,IAAQ,EAAUD,EAC7BC,CACT,IAAC,CA9BgC,GAqG7BL,GAAI,WACR,SAAAA,IAAcj1B,OAAAi1B,GACZA,EAAKh1B,aAAaC,MAAMC,KAAMC,UAChC,CAAC,OAAAC,EAAA40B,EAAA,CAAA,CAAA30B,IAAA,cAAAC,MAOD,WACE,OAAO00B,EAAKM,cAAc7sB,IAAIvI,KAAKq1B,MACrC,GAAC,CAAAl1B,IAAA,WAAAC,MACD,WACE,OAAOJ,KAAKq1B,KACd,GAAC,CAAAl1B,IAAA,cAAAoI,IACD,WACE,MAAO,CAACjF,EACV,IAAC,CAAA,CAAAnD,IAAA,eAAAC,MAdD,WACEJ,KAAKq1B,MAAQ,KACb,IAAM3yB,EAAOzC,UAAU,GACvBD,KAAKq1B,MAAQ3yB,EACboyB,EAAKM,cAAcE,IAAI5yB,EAAM1C,KAC/B,IAAC,CATO,GAoBV80B,GAAKM,cAAgB,IAAI3B,GACzBO,GAAec,KAAOA,GACtBd,GAAeS,MAAQ,IAAIK,GAAK,SAChCd,GAAeM,SAAW,IAAIQ,GAAK,YACnCd,GAAeO,gBAAkB,IAAIO,GAAK,mBAC1Cd,GAAeuB,oBAAsB,iBChIF,IACdC,YAAe5G,GAClC,SAAA4G,IAAc,IAAAhzB,EAEuC,OAFvC3C,OAAA21B,GACZhzB,EAAAC,EAAAzC,KAAAw1B,GACAA,EAAgB11B,aAAaC,MAAKyC,EAAOvC,WAAUuC,CACrD,CAAC,OAAAK,EAAA2yB,EAAA5G,GAAA1uB,EAAAs1B,EAAA,CAAA,CAAAr1B,IAAA,eAAAC,MAKD,WAEE,IADA,IAAMq1B,EAAc,IAAIrkB,MAAMpR,KAAKytB,YAAY/rB,QAAQ6V,KAAK,MACnDjT,EAAI,EAAGA,EAAImxB,EAAY/zB,OAAQ4C,IACtCmxB,EAAYnxB,GAAKtE,KAAKytB,YAAYnpB,GAAG0I,OAEvC,OAAO,IAAIwoB,EAAgBC,EAAaz1B,KAAKkM,SAC/C,GAAC,CAAA/L,IAAA,cAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,QAAyC,iBAAjBzB,UAAU,IAAmBA,UAAU,aAAc8L,EAAW,CACpG,IAAMxE,EAAQtH,UAAU,GAAIiE,EAAYjE,UAAU,GAClD,QAAKD,KAAKuoB,kBAAkBhhB,IAGrBmhB,EAAA8M,EAAkBnvB,cAAAA,KAAAA,GAAAA,KAAKrG,KAAMuH,EAAOrD,EAC7C,CACE,OAAOwkB,EAAA8M,EAAA,cAAAx1B,KAAA,GAAkBD,MAAMC,KAAMC,UAEzC,GAAC,CAAAE,IAAA,uBAAAC,MACD,WACE,OAAIJ,KAAKooB,WACApB,GAAUE,MAEZ,CACT,GAAC,CAAA/mB,IAAA,WAAAC,MACD,WACE,GAAIJ,KAAKwM,UACP,OAAO,EAET,IAAK,IAAIlI,EAAI,EAAGA,EAAItE,KAAKytB,YAAY/rB,OAAQ4C,IAC3C,IAAKtE,KAAKytB,YAAYnpB,GAAG8jB,WACvB,OAAO,EAGX,OAAO,CACT,GAAC,CAAAjoB,IAAA,cAAAC,MACD,WACE,OAAO2L,EAASuC,wBAClB,GAAC,CAAAnO,IAAA,eAAAC,MACD,WACE,OAAO,CACT,GAAC,CAAAD,IAAA,cAAAC,MACD,WACE,MAAM,IAAI8P,CACZ,GAAC,CAAA/P,IAAA,kBAAAC,MACD,WACE,OAAO2L,EAASoD,wBAClB,GAAC,CAAAhP,IAAA,cAAAoI,IACD,WACE,MAAO,CAAC4c,GACV,IAAC,CAAA,CAAAhlB,IAAA,eAAAC,MArDD,WACE,IAAMq1B,EAAcx1B,UAAU,GAAIyO,EAAUzO,UAAU,GACtDutB,GAAmB1tB,aAAauG,KAAKrG,KAAMy1B,EAAa/mB,EAC1D,IAAC,EAR0C8e,ICaxBkI,GAAe,WAClC,SAAAA,IAAc71B,OAAA61B,GACZA,EAAgB51B,aAAaC,MAAMC,KAAMC,UAC3C,CAAC,OAAAC,EAAAw1B,EAAA,CAAA,CAAAv1B,IAAA,cAAAC,MAiED,SAAYykB,GACV,OAAQA,GACR,KAAM,EACJ,OAAO7kB,KAAK6pB,2BACd,KAAK,EACH,OAAO7pB,KAAKspB,cACd,KAAK,EACH,OAAOtpB,KAAK8oB,mBACd,KAAK,EACH,OAAO9oB,KAAKosB,gBACd,QACE,MAAM,IAAIppB,EAAyB,sBAAwB6hB,GAE/D,GAAC,CAAA1kB,IAAA,aAAAC,MACD,SAAWgN,GACT,OAAIA,EAAS5D,SACJxJ,KAAKspB,cAEVlc,EAAStD,YAAcsD,EAAS1D,WAAa0D,EAASpD,YAAcoD,EAASxD,UACxE5J,KAAKspB,YAAY,IAAIriB,EAAWmG,EAAStD,UAAWsD,EAASpD,YAElEoD,EAAStD,YAAcsD,EAAS1D,WAAa0D,EAASpD,YAAcoD,EAASxD,UACxE5J,KAAK8oB,iBAAiB,CAAC,IAAI7hB,EAAWmG,EAAStD,UAAWsD,EAASpD,WAAY,IAAI/C,EAAWmG,EAAS1D,UAAW0D,EAASxD,aAE7H5J,KAAKosB,cAAcpsB,KAAKktB,iBAAiB,CAAC,IAAIjmB,EAAWmG,EAAStD,UAAWsD,EAASpD,WAAY,IAAI/C,EAAWmG,EAAStD,UAAWsD,EAASxD,WAAY,IAAI3C,EAAWmG,EAAS1D,UAAW0D,EAASxD,WAAY,IAAI3C,EAAWmG,EAAS1D,UAAW0D,EAASpD,WAAY,IAAI/C,EAAWmG,EAAStD,UAAWsD,EAASpD,aAAc,KAC7U,GAAC,CAAA7J,IAAA,mBAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OACZ,OAAO1B,KAAK8oB,iBAAiB9oB,KAAKqpB,+BAA+BvE,OAAO,KACrE,GAAyB,IAArB7kB,UAAUyB,OACjB,IAAIzB,UAAU,aAAcmR,MAAO,CACjC,IAAM0Y,EAAc7pB,UAAU,GAC9B,OAAOD,KAAK8oB,iBAAiC,OAAhBgB,EAAuB9pB,KAAKqpB,+BAA+BvE,OAAOgF,GAAe,KAC/G,CAAM,GAAIlX,GAAa3S,UAAU,GAAI2b,IAEpC,OAAO,IAAIoM,GADS/nB,UAAU,GACKD,KACrC,CAEJ,GAAC,CAAAG,IAAA,wBAAAC,MACD,WACE,OAAyB,IAArBH,UAAUyB,OACL,IAAI8zB,GAAgB,KAAMx1B,MACH,IAArBC,UAAUyB,OAEZ,IAAI8zB,GADSv1B,UAAU,GACUD,WAFnC,CAIT,GAAC,CAAAG,IAAA,gBAAAC,MACD,SAAcu1B,GAIZ,IAHA,IAAIC,EAAW,KACXC,GAAkB,EAClBC,GAAwB,EACnBxxB,EAAIqxB,EAAS/nB,WAAYtJ,EAAEwJ,WAAa,CAC/C,IAAM3K,EAAOmB,EAAE0J,OACT+nB,EAAW5yB,EAAK6I,cACL,OAAb4pB,IACFA,EAAWG,GAETA,IAAaH,IACfC,GAAkB,GAEhB1yB,aAAgBqqB,KAAoBsI,GAAwB,EAClE,CACA,GAAiB,OAAbF,EACF,OAAO51B,KAAK6pB,2BAEd,GAAIgM,GAAmBC,EACrB,OAAO91B,KAAK6pB,yBAAyB6L,EAAgBM,gBAAgBL,IAEvE,IAAMM,EAAQN,EAAS/nB,WAAWI,OAElC,GADqB2nB,EAASxkB,OAAS,EACrB,CAChB,GAAI8kB,aAAiBpL,GACnB,OAAO7qB,KAAKk2B,mBAAmBR,EAAgBS,eAAeR,IAC3D,GAAIM,aAAiBjO,GACxB,OAAOhoB,KAAKgtB,sBAAsB0I,EAAgBU,kBAAkBT,IACjE,GAAIM,aAAiBzM,GACxB,OAAOxpB,KAAKq2B,iBAAiBX,EAAgBY,aAAaX,IAE5DrvB,EAAOC,qBAAqB,4BAA8B0vB,EAAMM,kBAClE,CACA,OAAON,CACT,GAAC,CAAA91B,IAAA,6BAAAC,MACD,SAA2B0pB,GACzB,OAAO9pB,KAAKq2B,iBAAiC,OAAhBvM,EAAuB9pB,KAAKqpB,+BAA+BvE,OAAOgF,GAAe,KAChH,GAAC,CAAA3pB,IAAA,cAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OACZ,OAAO1B,KAAKspB,YAAYtpB,KAAKqpB,+BAA+BvE,OAAO,KAChE,GAAyB,IAArB7kB,UAAUyB,OACjB,IAAIzB,UAAU,aAAcgH,EAAY,CACtC,IAAM8f,EAAa9mB,UAAU,GAC7B,OAAOD,KAAKspB,YAA2B,OAAfvC,EAAsB/mB,KAAKqpB,+BAA+BvE,OAAO,CAACiC,IAAe,KAC1G,CAAM,GAAInU,GAAa3S,UAAU,GAAI2b,IAEpC,OAAO,IAAI4N,GADSvpB,UAAU,GACAD,KAChC,CAEJ,GAAC,CAAAG,IAAA,+BAAAC,MACD,WACE,OAAOJ,KAAKw2B,0BACd,GAAC,CAAAr2B,IAAA,gBAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OACZ,OAAO1B,KAAKosB,cAAc,KAAM,MAC3B,GAAyB,IAArBnsB,UAAUyB,OAAc,CACjC,GAAIkR,GAAa3S,UAAU,GAAI2b,IAAqB,CAClD,IAAMoQ,EAAQ/rB,UAAU,GACxB,OAAOD,KAAKosB,cAAcpsB,KAAKktB,iBAAiBlB,GACjD,CAAM,GAAI/rB,UAAU,aAAcmR,MAAO,CACxC,IAAM4a,EAAQ/rB,UAAU,GACxB,OAAOD,KAAKosB,cAAcpsB,KAAKktB,iBAAiBlB,GACjD,CAAM,GAAI/rB,UAAU,aAAc4uB,GAAY,CAC7C,IAAM7C,EAAQ/rB,UAAU,GACxB,OAAOD,KAAKosB,cAAcJ,EAAO,KACnC,CACF,MAAO,GAAyB,IAArB/rB,UAAUyB,OAAc,CAEjC,OAAO,IAAImpB,GADG5qB,UAAU,GAAYA,UAAU,GACbD,KACnC,CACF,GAAC,CAAAG,IAAA,UAAAC,MACD,WACE,OAAOJ,KAAK4M,KACd,GAAC,CAAAzM,IAAA,2BAAAC,MACD,WACE,OAAyB,IAArBH,UAAUyB,OACL,IAAI8rB,GAAmB,KAAMxtB,MACN,IAArBC,UAAUyB,OAEZ,IAAI8rB,GADQvtB,UAAU,GACaD,WAFrC,CAIT,GAAC,CAAAG,IAAA,oBAAAC,MACD,WACE,OAAOJ,KAAKy2B,eACd,GAAC,CAAAt2B,IAAA,mBAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OACZ,OAAO1B,KAAKktB,iBAAiBltB,KAAKqpB,+BAA+BvE,OAAO,KACrE,GAAyB,IAArB7kB,UAAUyB,OACjB,IAAIzB,UAAU,aAAcmR,MAAO,CACjC,IAAM0Y,EAAc7pB,UAAU,GAC9B,OAAOD,KAAKktB,iBAAiC,OAAhBpD,EAAuB9pB,KAAKqpB,+BAA+BvE,OAAOgF,GAAe,KAC/G,CAAM,GAAIlX,GAAa3S,UAAU,GAAI2b,IAEpC,OAAO,IAAIiT,GADS5uB,UAAU,GACKD,KACrC,CAEJ,GAAC,CAAAG,IAAA,qBAAAC,MACD,WACE,OAAyB,IAArBH,UAAUyB,OACL,IAAI0xB,GAAa,KAAMpzB,MACA,IAArBC,UAAUyB,OAEZ,IAAI0xB,GADMnzB,UAAU,GACOD,WAF7B,CAIT,GAAC,CAAAG,IAAA,mBAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OACZ,OAAO,IAAIitB,GAAW,KAAM3uB,MACzB,GAAyB,IAArBC,UAAUyB,OACjB,IAAIzB,UAAU,aAAcmR,MAE1B,OAAO,IAAIud,GADG1uB,UAAU,GACKD,MACxB,GAAI4S,GAAa3S,UAAU,GAAI2b,IAAqB,CACzD,IAAMkO,EAAc7pB,UAAU,GAC9B,GAAoB,OAAhB6pB,EACF,OAAO9pB,KAAKq2B,iBAAiB,IAAIjlB,MAAM,GAAGmG,KAAK,OAGjD,IADA,IAAM6R,EAAS,IAAIhY,MAAM0Y,EAAY3Y,QAAQoG,KAAK,MACzCjT,EAAI,EAAGA,EAAIwlB,EAAY3Y,OAAQ7M,IAAK,CAC3C,IAAMoyB,EAAQ12B,KAAKqpB,+BAA+BvE,OAAO,EAAGgF,EAAY/N,eAAgB+N,EAAY9N,eACpGoJ,GAAoBpY,KAAK8c,EAAaxlB,EAAGoyB,EAAO,EAAG,GACnDtN,EAAO9kB,GAAKtE,KAAKspB,YAAYoN,EAC/B,CACA,OAAO12B,KAAKq2B,iBAAiBjN,EAC/B,EAEJ,GAAC,CAAAjpB,IAAA,cAAAoI,IACD,WACE,MAAO,CAACjF,EACV,IAAC,CAAA,CAAAnD,IAAA,eAAAC,MAnPD,WAIE,GAHAJ,KAAKy2B,gBAAkB,KACvBz2B,KAAKw2B,2BAA6B,KAClCx2B,KAAK4M,MAAQ,KACY,IAArB3M,UAAUyB,OACZg0B,EAAgB51B,aAAauG,KAAKrG,KAAM,IAAIg0B,GAAkB,QACzD,GAAyB,IAArB/zB,UAAUyB,QACnB,GAAIkR,GAAa3S,UAAU,GAAI2kB,IAA4B,CACzD,IAAM+R,EAA4B12B,UAAU,GAC5Cy1B,EAAgB51B,aAAauG,KAAKrG,KAAM,IAAIg0B,GAAkB,EAAG2C,EAClE,MAAM,GAAI12B,UAAU,aAAc+zB,GAAgB,CACjD,IAAM4C,EAAiB32B,UAAU,GACjCy1B,EAAgB51B,aAAauG,KAAKrG,KAAM42B,EAAgB,EAAGlB,EAAgBmB,sCAC7E,OACK,GAAyB,IAArB52B,UAAUyB,OAAc,CACjC,IAAMk1B,EAAiB32B,UAAU,GAAIyN,EAAOzN,UAAU,GACtDy1B,EAAgB51B,aAAauG,KAAKrG,KAAM42B,EAAgBlpB,EAAMgoB,EAAgBmB,sCAChF,MAAO,GAAyB,IAArB52B,UAAUyB,OAAc,CACjC,IAAMk1B,EAAiB32B,UAAU,GAAIyN,EAAOzN,UAAU,GAAI02B,EAA4B12B,UAAU,GAChGD,KAAKy2B,gBAAkBG,EACvB52B,KAAKw2B,2BAA6BG,EAClC32B,KAAK4M,MAAQc,CACf,CACF,GAAC,CAAAvN,IAAA,sBAAAC,MACD,SAA2B02B,GACzB,IAAMC,EAAoB,IAAI3lB,MAAM0lB,EAAc3lB,QAAQoG,KAAK,MAC/D,OAAOuf,EAAchH,QAAQiH,EAC/B,GAAC,CAAA52B,IAAA,kBAAAC,MACD,SAAuBoO,GACrB,GAAmB,OAAfA,EAAqB,OAAO,KAChC,IAAMwoB,EAAgB,IAAI5lB,MAAM5C,EAAW2C,QAAQoG,KAAK,MACxD,OAAO/I,EAAWshB,QAAQkH,EAC5B,GAAC,CAAA72B,IAAA,sCAAAC,MACD,WACE,OAAO4yB,GAA+BC,UACxC,GAAC,CAAA9yB,IAAA,yBAAAC,MACD,SAA8B62B,GAC5B,IAAMC,EAAuB,IAAI9lB,MAAM6lB,EAAiB9lB,QAAQoG,KAAK,MACrE,OAAO0f,EAAiBnH,QAAQoH,EAClC,GAAC,CAAA/2B,IAAA,oBAAAC,MACD,SAAyBq1B,GACvB,IAAM0B,EAAkB,IAAI/lB,MAAMqkB,EAAYtkB,QAAQoG,KAAK,MAC3D,OAAOke,EAAY3F,QAAQqH,EAC7B,GAAC,CAAAh3B,IAAA,oBAAAC,MACD,SAAyBg3B,GACvB,IAAMC,EAAkB,IAAIjmB,MAAMgmB,EAAYjmB,QAAQoG,KAAK,MAC3D,OAAO6f,EAAYtH,QAAQuH,EAC7B,GAAC,CAAAl3B,IAAA,oBAAAC,MACD,SAAyBk3B,GACvB,IAAMC,EAAkB,IAAInmB,MAAMkmB,EAAYnmB,QAAQoG,KAAK,MAC3D,OAAO+f,EAAYxH,QAAQyH,EAC7B,GAAC,CAAAp3B,IAAA,eAAAC,MACD,SAAoBgpB,GAClB,IAAMoO,EAAa,IAAIpmB,MAAMgY,EAAOjY,QAAQoG,KAAK,MACjD,OAAO6R,EAAO0G,QAAQ0H,EACxB,GAAC,CAAAr3B,IAAA,iBAAAC,MACD,SAAsBizB,GACpB,IAAMoE,EAAe,IAAIrmB,MAAMiiB,EAASliB,QAAQoG,KAAK,MACrD,OAAO8b,EAASvD,QAAQ2H,EAC1B,GAAC,CAAAt3B,IAAA,+BAAAC,MACD,SAAoC6d,EAAOyZ,GAEzC,OADAA,EAASlqB,oBAAoBonB,YAAY3W,GAClCyZ,EAAS7qB,aAAayc,YAAYrL,EAC3C,IAAC,CAnEiC,GCT9B0Z,GACA,KADAA,GAEC,MAFDA,GAGC,MAHDA,GAIE,OASFC,GAAe,CACnBC,MAAO,QACPC,YAAa,aACbC,YAAa,aACbC,QAAS,UACTC,YAAa,aACbC,kBAAmB,kBACnBC,cAAe,eACfC,oBAAqB,qBACrBC,OAAQ,UAoBJC,GAAQ,QAwBRC,GACE,EADFA,GAEQ,EAFRA,GAGS,EAHTA,GAII,EAJJA,GAKG,EALHA,GAMC,EAQP,IAAK,IAAMC,MAAQZ,GACOA,GAAaY,IAAMtlB,cAG7C,IAGMulB,GAAK,WAiBT,OAAAv4B,GAbA,SAAAu4B,EAAYC,GAAK74B,OAAA44B,GAIfz4B,KAAK04B,IAAMA,EAMX14B,KAAK24B,QAAU,CACjB,GAEA,CAAA,CAAAx4B,IAAA,WAAAC,MAKA,SAASoH,GACP,OAAQA,GAAK,KAAOA,GAAK,KAASA,GAAK,KAAOA,GAAK,GACrD,GAEA,CAAArH,IAAA,aAAAC,MAOA,SAAWoH,EAAGoxB,GAEZ,OAAQpxB,GAAK,KAAOA,GAAK,KAAc,KAALA,UADFyX,IAAhB2Z,GAA4BA,EAE9C,GAEA,CAAAz4B,IAAA,gBAAAC,MAKA,SAAcoH,GACZ,MAAY,KAALA,GAAiB,MAALA,GAAkB,MAALA,GAAkB,MAALA,CAC/C,GAEA,CAAArH,IAAA,YAAAC,MAIA,WACE,OAAOJ,KAAK04B,IAAI/gB,SAAS3X,KAAK24B,OAChC,GAEA,CAAAx4B,IAAA,YAAAC,MAIA,WACE,IAIIo4B,EAJEhxB,EAAIxH,KAAK64B,YACThnB,EAAW7R,KAAK24B,OAElBv4B,EAAQoH,EAGZ,GAAS,KAALA,EACFgxB,EAAOD,QACF,GAAS,KAAL/wB,EACTgxB,EAAOD,QACF,GAAS,KAAL/wB,EACTgxB,EAAOD,QACF,GAAIv4B,KAAK84B,WAAWtxB,IAAW,KAALA,EAC/BgxB,EAAOD,GACPn4B,EAAQJ,KAAK+4B,mBACR,GAAI/4B,KAAKg5B,SAASxxB,GACvBgxB,EAAOD,GACPn4B,EAAQJ,KAAKi5B,gBACR,IAAIj5B,KAAKk5B,cAAc1xB,GAC5B,OAAOxH,KAAKm5B,YACP,GAAU,KAAN3xB,EAGT,MAAM,IAAIzE,MAAM,yBAA2ByE,GAF3CgxB,EAAOD,EAGT,CAEA,MAAO,CAAE1mB,SAAUA,EAAUzR,MAAOA,EAAOo4B,KAAMA,EACnD,GAEA,CAAAr4B,IAAA,cAAAC,MAIA,WACE,IAAIoH,EACE+K,EAAQvS,KAAK24B,OACfS,GAAU,EACVC,GAAqB,EACzB,GACW,KAAL7xB,EACF4xB,GAAU,EACE,KAAL5xB,GAAiB,KAALA,IACnB6xB,GAAqB,GACvB7xB,EAAIxH,KAAK64B,kBAET74B,KAAK84B,WAAWtxB,EAAG4xB,KAGjBC,IAA4B,KAAL7xB,GAAiB,KAALA,IAGpC6xB,IAA4B,KAAL7xB,GAAiB,KAALA,IAEtC,OAAO8xB,WAAWt5B,KAAK04B,IAAItgB,UAAU7F,EAAOvS,KAAK24B,UACnD,GAEA,CAAAx4B,IAAA,YAAAC,MAIA,WACE,IAAIoH,EACE+K,EAAQvS,KAAK24B,OACnB,GACEnxB,EAAIxH,KAAK64B,kBACJ74B,KAAKg5B,SAASxxB,IACrB,OAAOxH,KAAK04B,IAAItgB,UAAU7F,EAAOvS,KAAK24B,UAAUzlB,aAClD,IAAC,CA/HQ,GAqILqmB,GAAM,WA0BV,OAAAr5B,GAtBA,SAAAq5B,EAAYC,EAAO9qB,GAAS7O,OAAA05B,GAK1Bv5B,KAAKy5B,OAASD,EAMdx5B,KAAK05B,OAML15B,KAAK25B,QAAUhC,GAEf33B,KAAK0O,QAAUA,CACjB,GAEA,CAAA,CAAAvO,IAAA,WAAAC,MAIA,WACEJ,KAAK05B,OAAS15B,KAAKy5B,OAAON,WAC5B,GAEA,CAAAh5B,IAAA,cAAAC,MAKA,SAAYo4B,GAEV,OADgBx4B,KAAK05B,OAAOlB,MAAQA,CAEtC,GAEA,CAAAr4B,IAAA,QAAAC,MAKA,SAAMo4B,GACJ,IAAMoB,EAAU55B,KAAK65B,YAAYrB,GAGjC,OAFIoB,GACF55B,KAAK85B,WACAF,CACT,GAEA,CAAAz5B,IAAA,QAAAC,MAIA,WAGE,OAFAJ,KAAK85B,WACY95B,KAAK+5B,gBAExB,GAEA,CAAA55B,IAAA,uBAAAC,MAKA,WACE,IAAI45B,EAASrC,GACPsC,EAAWj6B,KAAK05B,OACtB,GAAI15B,KAAK65B,YAAYtB,IAAiB,CACpC,IAAM2B,EAAUD,EAAS75B,MAvPrB,MAwPA85B,EACFF,EAASrC,GAnPP,MAoPKuC,EACPF,EAASrC,GA/ON,OAgPIuC,IACPF,EAASrC,IACPqC,IAAWrC,IACb33B,KAAK85B,UACT,CACA,OAAOE,CACT,GAEA,CAAA75B,IAAA,+BAAAC,MAIA,WACE,GAAIJ,KAAKm6B,MAAM5B,IAAuB,CACpC,IAAM/pB,EAAa,GACnB,GACEA,EAAW8D,KAAKtS,KAAK+5B,wBAChB/5B,KAAKm6B,MAAM5B,KAClB,GAAIv4B,KAAKm6B,MAAM5B,IACb,OAAO/pB,CACX,MAAO,GAAIxO,KAAKo6B,mBACd,MAAO,GAET,MAAM,IAAIr3B,MAAM/C,KAAKq6B,sBACvB,GAEA,CAAAl6B,IAAA,kBAAAC,MAIA,WACE,GAAIJ,KAAKm6B,MAAM5B,IAAuB,CACpC,IAAMzO,EAAc9pB,KAAKs6B,cACzB,GAAIt6B,KAAKm6B,MAAM5B,IACb,OAAOzO,CACX,MAAO,GAAI9pB,KAAKo6B,mBACd,OAAO,KAET,MAAM,IAAIr3B,MAAM/C,KAAKq6B,sBACvB,GAEA,CAAAl6B,IAAA,uBAAAC,MAIA,WACE,GAAIJ,KAAKm6B,MAAM5B,IAAuB,CACpC,IAAMzO,EAAc9pB,KAAKu6B,kBACzB,GAAIv6B,KAAKm6B,MAAM5B,IACb,OAAOzO,CACX,MAAO,GAAI9pB,KAAKo6B,mBACd,MAAO,GAET,MAAM,IAAIr3B,MAAM/C,KAAKq6B,sBACvB,GAEA,CAAAl6B,IAAA,oBAAAC,MAIA,WACE,GAAIJ,KAAKm6B,MAAM5B,IAAuB,CACpC,IAAMzO,EAAc9pB,KAAKw6B,2BACzB,GAAIx6B,KAAKm6B,MAAM5B,IACb,OAAOzO,CACX,MAAO,GAAI9pB,KAAKo6B,mBACd,MAAO,GAET,MAAM,IAAIr3B,MAAM/C,KAAKq6B,sBACvB,GAEA,CAAAl6B,IAAA,uBAAAC,MAIA,WAEI,IAAI0pB,EADN,GAAI9pB,KAAKm6B,MAAM5B,KAMb,GAHEzO,EADE9pB,KAAK05B,OAAOlB,MAAQD,GACRv4B,KAAKy6B,sBAELz6B,KAAKu6B,kBACjBv6B,KAAKm6B,MAAM5B,IACb,OAAOzO,OACJ,GAAI9pB,KAAKo6B,mBACd,MAAO,GAET,MAAM,IAAIr3B,MAAM/C,KAAKq6B,sBACvB,GAEA,CAAAl6B,IAAA,4BAAAC,MAKA,WACE,GAAIJ,KAAKm6B,MAAM5B,IAAuB,CACpC,IAAMzO,EAAc9pB,KAAKw6B,2BACzB,GAAIx6B,KAAKm6B,MAAM5B,IACb,OAAOzO,CACX,MAAO,GAAI9pB,KAAKo6B,mBACd,MAAO,GAET,MAAM,IAAIr3B,MAAM/C,KAAKq6B,sBACvB,GAEA,CAAAl6B,IAAA,yBAAAC,MAIA,WACE,GAAIJ,KAAKm6B,MAAM5B,IAAuB,CACpC,IAAMzO,EAAc9pB,KAAK06B,wBACzB,GAAI16B,KAAKm6B,MAAM5B,IACb,OAAOzO,CACX,MAAO,GAAI9pB,KAAKo6B,mBACd,MAAO,GAET,MAAM,IAAIr3B,MAAM/C,KAAKq6B,sBACvB,GAEA,CAAAl6B,IAAA,cAAAC,MAIA,WAGE,IAFA,IAAM0pB,EAAc,GACd6Q,EAAa36B,KAAK25B,QAAQj4B,OACvB4C,EAAI,EAAGA,EAAIq2B,IAAcr2B,EAAG,CACnC,IAAMs2B,EAAQ56B,KAAK05B,OACnB,IAAI15B,KAAKm6B,MAAM5B,IAGb,MAFAzO,EAAYxX,KAA2BsoB,EAAMx6B,MAGjD,CACA,GAAI0pB,EAAYpoB,QAAUi5B,EACxB,OAAO7Q,EACT,MAAM,IAAI/mB,MAAM/C,KAAKq6B,sBACvB,GAEA,CAAAl6B,IAAA,kBAAAC,MAIA,WAEE,IADA,IAAM0pB,EAAc,CAAC9pB,KAAKs6B,eACnBt6B,KAAKm6B,MAAM5B,KAChBzO,EAAYxX,KAAKtS,KAAKs6B,eACxB,OAAOxQ,CACT,GAEA,CAAA3pB,IAAA,sBAAAC,MAIA,WAEE,IADA,IAAM0pB,EAAc,CAAC9pB,KAAK66B,mBACnB76B,KAAKm6B,MAAM5B,KAChBzO,EAAYxX,KAAKtS,KAAK66B,mBACxB,OAAO/Q,CACT,GAEA,CAAA3pB,IAAA,2BAAAC,MAIA,WAEE,IADA,IAAM0pB,EAAc,CAAC9pB,KAAK86B,wBACnB96B,KAAKm6B,MAAM5B,KAChBzO,EAAYxX,KAAKtS,KAAK86B,wBACxB,OAAOhR,CACT,GAEA,CAAA3pB,IAAA,wBAAAC,MAIA,WAEE,IADA,IAAM0pB,EAAc,CAAC9pB,KAAK+6B,qBACnB/6B,KAAKm6B,MAAM5B,KAChBzO,EAAYxX,KAAKtS,KAAK+6B,qBACxB,OAAOjR,CACT,GAEA,CAAA3pB,IAAA,mBAAAC,MAIA,WACE,IAAMoM,EACJxM,KAAK65B,YAAYtB,KAAmBv4B,KAAK05B,OAAOt5B,OAASk4B,GAG3D,OAFI9rB,GACFxM,KAAK85B,WACAttB,CACT,GAEA,CAAArM,IAAA,sBAAAC,MAKA,WACE,MACE,eACAJ,KAAK05B,OAAOt5B,MACZ,iBACAJ,KAAK05B,OAAO7nB,SACZ,QACA7R,KAAKy5B,OAAOf,IACZ,GAEJ,GAEA,CAAAv4B,IAAA,iBAAAC,MAIA,WACE,IAAMsO,EAAU1O,KAAK0O,QAEfssB,EAAM,SAAAC,GAAS,OAAAC,EAAQj0B,EAAUk0B,EAAIF,GAAU,EAC/CG,EAAO,SAAAtR,GACX,IAAMmD,EAAQnD,EAAYvZ,KAAI,SAAArH,GAAC,OAAIwF,EAAQwe,iBAAiBhkB,EAAEqH,IAAIyqB,OAClE,OAAI/N,EAAMvrB,OAAS,EACVgN,EAAQ0d,cAAca,EAAM,GAAIA,EAAMta,MAAM,IAE5CjE,EAAQ0d,cAAca,EAAM,GACtC,EAEK2N,EAAQ56B,KAAK05B,OACnB,GAAI15B,KAAKm6B,MAAM5B,IAAiB,CAC9B,IAAM3C,EAAWgF,EAAMx6B,MAEvB,GADAJ,KAAK25B,QAAU35B,KAAKq7B,uBACJ,sBAAZzF,EAAkC,CACpC,IAAMpnB,EAAaxO,KAAKs7B,+BACxB,OAAO5sB,EAAQmb,yBAAyBrb,EAC1C,CACE,OAAQonB,GACR,IAAK,QACH,IAAMqF,EAAYj7B,KAAK66B,kBACvB,OAAKI,EAEEvsB,EAAQ4a,YAAW4R,EAAKj0B,EAAUk0B,EAAIF,KADpCvsB,EAAQ4a,cAGnB,IAAK,aACH,IACMiS,EADcv7B,KAAK86B,uBACMvqB,IAAIyqB,GACnC,OAAOtsB,EAAQoa,iBAAiByS,GAElC,IAAK,aACH,IACMA,EADcv7B,KAAK86B,uBACMvqB,IAAIyqB,GACnC,OAAOtsB,EAAQwe,iBAAiBqO,GAElC,IAAK,UACH,IAAMzR,EAAc9pB,KAAK+6B,oBACzB,OAAKjR,GAAsC,IAAvBA,EAAYpoB,OAEzB05B,EAAKtR,GADHpb,EAAQ0d,gBAGnB,IAAK,aACH,IAAMtC,EAAc9pB,KAAKw7B,uBACzB,IAAK1R,GAAsC,IAAvBA,EAAYpoB,OAC9B,OAAOgN,EAAQ2nB,mBACjB,IAAMkF,EAAazR,EAAYvZ,IAAIyqB,GAAKzqB,KAAI,SAAA/I,GAAC,OAAIkH,EAAQ4a,YAAY9hB,MACrE,OAAOkH,EAAQ2nB,iBAAiBkF,GAElC,IAAK,kBACH,IACMA,EADcv7B,KAAKy7B,4BACMlrB,KAAI,SAAArH,GAAC,OAAIwF,EAAQoa,iBAAiB5f,EAAEqH,IAAIyqB,OACvE,OAAOtsB,EAAQse,sBAAsBuO,GAEvC,IAAK,eACH,IAAMzR,EAAc9pB,KAAK07B,yBACzB,IAAK5R,GAAsC,IAAvBA,EAAYpoB,OAC9B,OAAOgN,EAAQwnB,qBACjB,IAAM7C,EAAWvJ,EAAYvZ,IAAI6qB,GACjC,OAAO1sB,EAAQwnB,mBAAmB7C,GAEpC,QACE,MAAM,IAAItwB,MAAM,0BAA4B6yB,GAIlD,CACA,MAAM,IAAI7yB,MAAM/C,KAAKq6B,sBACvB,IAAC,CA9WS,GAqXZ,SAASsB,GAAoBx4B,GAC3B,GAAIA,EAAKqJ,UACP,MAAO,GACT,IAAMhF,EAAIrE,EAAK0Z,gBACT+e,EAAK,CAACp0B,EAAE9B,EAAG8B,EAAE7B,GAKnB,YAJYsZ,IAARzX,EAAEI,GAAoB9C,OAAOF,MAAM4C,EAAEI,IACvCg0B,EAAGtpB,KAAK9K,EAAEI,QACAqX,IAARzX,EAAEE,GAAoB5C,OAAOF,MAAM4C,EAAEE,IACvCk0B,EAAGtpB,KAAK9K,EAAEE,GACLk0B,EAAGC,KAAK,IACjB,CA4BA,SAASC,GAAyB34B,GAWhC,IAVA,IAAM2mB,EAAc3mB,EAAKwa,iBACtBpN,KAAI,SAAA/I,GACH,IAAM0B,EAAI,CAAC1B,EAAE9B,EAAG8B,EAAE7B,GAKlB,YAJYsZ,IAARzX,EAAEI,GAAoB9C,OAAOF,MAAM4C,EAAEI,IACvCsB,EAAEoJ,KAAK9K,EAAEI,QACCqX,IAARzX,EAAEE,GAAoB5C,OAAOF,MAAM4C,EAAEE,IACvCwB,EAAEoJ,KAAK9K,EAAEE,GACJwB,CACT,IACIuF,EAAQ,GACLnK,EAAI,EAAGy3B,EAAKjS,EAAYpoB,OAAQ4C,EAAIy3B,IAAMz3B,EACjDmK,EAAM6D,KAAKwX,EAAYxlB,GAAGu3B,KAAK,MACjC,OAAOptB,EAAMotB,KAAK,KACpB,CAiBA,SAASG,GAAsB74B,GAC7B,IAAMsL,EAAQ,GACdA,EAAM6D,KAAK,IAAMwpB,GAAyB34B,EAAK8oB,mBAAqB,KACpE,IAAK,IAAI3nB,EAAI,EAAGy3B,EAAK54B,EAAKooB,qBAAsBjnB,EAAIy3B,IAAMz3B,EACxDmK,EAAM6D,KAAK,IAAMwpB,GAAyB34B,EAAKgpB,iBAAiB7nB,IAAM,KACxE,OAAOmK,EAAMotB,KAAK,KACpB,CAiCA,IAAMI,GAAkB,CACtBzS,MAASmS,GACT3T,WAAc8T,GACdjN,WAAciN,GACdjR,QAAWmR,GACXrN,WAjGF,SAAkCxrB,GAEhC,IADA,IAAMsL,EAAQ,GACLnK,EAAI,EAAGy3B,EAAK54B,EAAKkrB,mBAAoB/pB,EAAIy3B,IAAMz3B,EACtDmK,EAAM6D,KAAK,IAAMqpB,GAAoBx4B,EAAKqrB,aAAalqB,IAAM,KAC/D,OAAOmK,EAAMotB,KAAK,KACpB,EA6FErG,gBAxDF,SAAuCryB,GAErC,IADA,IAAMsL,EAAQ,GACLnK,EAAI,EAAGy3B,EAAK54B,EAAKkrB,mBAAoB/pB,EAAIy3B,IAAMz3B,EACtDmK,EAAM6D,KAAK,IAAMwpB,GAAyB34B,EAAKqrB,aAAalqB,IAAM,KACpE,OAAOmK,EAAMotB,KAAK,KACpB,EAoDEzI,aAlCF,SAAoCjwB,GAElC,IADA,IAAMsL,EAAQ,GACLnK,EAAI,EAAGy3B,EAAK54B,EAAKkrB,mBAAoB/pB,EAAIy3B,IAAMz3B,EACtDmK,EAAM6D,KAAK,IAAM0pB,GAAsB74B,EAAKqrB,aAAalqB,IAAM,KACjE,OAAOmK,EAAMotB,KAAK,KACpB,EA8BErO,mBAzFF,SAA0CrqB,GAExC,IADA,IAAMsL,EAAQ,GACLnK,EAAI,EAAGy3B,EAAK54B,EAAKkrB,mBAAoB/pB,EAAIy3B,IAAMz3B,EACtDmK,EAAM6D,KAAK4pB,GAAO/4B,EAAKqrB,aAAalqB,KACtC,OAAOmK,EAAMotB,KAAK,KACpB,GA4FA,SAASK,GAAO/4B,GACd,IAAIq1B,EAAOr1B,EAAKozB,kBACV4F,EAAkBF,GAAgBzD,GACxCA,EAAOA,EAAKtlB,cACZ,IAAMgnB,EApCR,SAA8B/2B,GAC5B,IAAI+2B,EAAU,GACd,GAAI/2B,EAAKqJ,UACP,OAAO0tB,EACT,IAAM1yB,EAAIrE,EAAK0Z,gBAKf,YAJYoC,IAARzX,EAAEI,GAAoB9C,OAAOF,MAAM4C,EAAEI,KACvCsyB,GAnoBM,UAooBIjb,IAARzX,EAAEE,GAAoB5C,OAAOF,MAAM4C,EAAEE,KACvCwyB,GA/nBM,KAgoBDA,CACT,CA0BkBkC,CAAqBj5B,GAGrC,OAFI+2B,EAAQx4B,OAAS,IACnB82B,GAAQ,IAAM0B,GACZ/2B,EAAKqJ,UACAgsB,EAAO,IAAMF,GAEfE,EAAO,KADF2D,EAAgBh5B,GACD,GAC7B,CAEA,IAMqBk5B,GAAS,WAY5B,OAAAn8B,GALA,SAAAm8B,EAAYC,GAAiBz8B,OAAAw8B,GAC3Br8B,KAAKs8B,gBAAkBA,GAAmB,IAAI5G,GAC9C11B,KAAK42B,eAAiB52B,KAAKs8B,gBAAgB9uB,mBAC7C,GAEA,CAAA,CAAArN,IAAA,OAAAC,MASA,SAAKs4B,GACH,IAAMc,EAAQ,IAAIf,GAAMC,GAGxB,OAFe,IAAIa,GAAOC,EAAOx5B,KAAKs8B,iBACd5jB,OAE1B,GAEA,CAAAvY,IAAA,QAAAC,MAOA,SAAMm8B,GACJ,OAAOL,GAAOK,EAChB,IAAC,CArC2B,GCttBTC,GAAS,WAQ5B,OAAAt8B,GAJA,SAAAs8B,EAAYF,GAAiBz8B,OAAA28B,GAC3Bx8B,KAAKy8B,OAAS,IAAIJ,GAAUC,EAC9B,GAEA,CAAA,CAAAn8B,IAAA,QAAAC,MAQA,SAAMm8B,GACJ,OAAOv8B,KAAKy8B,OAAOC,MAAMH,EAC3B,IAEA,CAAA,CAAAp8B,IAAA,eAAAC,MAUA,SAAoB8pB,EAAIhf,GACtB,GAAyB,IAArBjL,UAAUyB,OAAc,MAAM,IAAIqB,MAAM,mBAE5C,MAAO,gBAAkBmnB,EAAGxkB,EAAI,IAAMwkB,EAAGvkB,EAAI,KAAOuF,EAAGxF,EAAI,IAAMwF,EAAGvF,EAAI,IAC1E,IAAC,CAlC2B,GCfTg3B,GAAe,WAClC,SAAAA,IAAc98B,OAAA88B,GACZA,EAAgB78B,aAAaC,MAAMC,KAAMC,UAC3C,CAAC,OAAAC,EAAAy8B,EAAA,CAAA,CAAAx8B,IAAA,uBAAAC,MA0CD,SAAqBw8B,EAAcC,GAEjC,OADA78B,KAAK88B,sBACE98B,KAAK+8B,cAAcH,GAAcC,EAC1C,GAAC,CAAA18B,IAAA,qBAAAC,MACD,WACE,IAAM48B,EAAa,IAAI1K,GAIvB,OAHItyB,KAAKi9B,cAAcD,EAAW5oB,OAAO,aACrCpU,KAAKk9B,WAAWF,EAAW5oB,OAAO,WAClCpU,KAAKm9B,eAAeH,EAAW5oB,OAAO,cACnC4oB,EAAWloB,UACpB,GAAC,CAAA3U,IAAA,sBAAAC,MACD,SAAoB8K,EAAIC,EAAIiyB,EAAIC,GAC9Br9B,KAAKs9B,YAAY,GAAG,GAAKpyB,EACzBlL,KAAKs9B,YAAY,GAAG,GAAKnyB,EACzBnL,KAAKs9B,YAAY,GAAG,GAAKF,EACzBp9B,KAAKs9B,YAAY,GAAG,GAAKD,EACzBr9B,KAAKu9B,QAAUv9B,KAAKw9B,iBAAiBtyB,EAAIC,EAAIiyB,EAAIC,EACnD,GAAC,CAAAl9B,IAAA,qBAAAC,MACD,WACE,OAAOJ,KAAKu9B,OACd,GAAC,CAAAp9B,IAAA,sBAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OACe,OAAvB1B,KAAK+8B,gBACP/8B,KAAK+8B,cAAgB3rB,MAAM,GAAGmG,OAAOhH,KAAI,WAAA,OAAMa,MAAM,MACrDpR,KAAK88B,oBAAoB,GACzB98B,KAAK88B,oBAAoB,SAEtB,GAAyB,IAArB78B,UAAUyB,OAAc,CACjC,IAAMk7B,EAAe38B,UAAU,GACjBD,KAAKy9B,gBAAgBb,EAAc,GACnC58B,KAAKy9B,gBAAgBb,EAAc,IAE/C58B,KAAK+8B,cAAcH,GAAc,GAAK,EACtC58B,KAAK+8B,cAAcH,GAAc,GAAK,IAEtC58B,KAAK+8B,cAAcH,GAAc,GAAK,EACtC58B,KAAK+8B,cAAcH,GAAc,GAAK,EAE1C,CACF,GAAC,CAAAz8B,IAAA,WAAAC,MACD,WACE,OAAOJ,KAAK09B,mBAAqB19B,KAAKk9B,SACxC,GAAC,CAAA/8B,IAAA,oBAAAC,MACD,SAAkBw2B,GAChB52B,KAAKy2B,gBAAkBG,CACzB,GAAC,CAAAz2B,IAAA,yBAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OACZ,QAAI1B,KAAK29B,uBAAuB,MAC5B39B,KAAK29B,uBAAuB,GAE3B,GAAyB,IAArB19B,UAAUyB,OAAc,CAEjC,IADA,IAAMk8B,EAAiB39B,UAAU,GACxBqE,EAAI,EAAGA,EAAItE,KAAKu9B,QAASj5B,IAChC,IAAMtE,KAAK69B,OAAOv5B,GAAGwD,SAAS9H,KAAKs9B,YAAYM,GAAgB,MAAO59B,KAAK69B,OAAOv5B,GAAGwD,SAAS9H,KAAKs9B,YAAYM,GAAgB,IAC7H,OAAO,EAGX,OAAO,CACT,CACF,GAAC,CAAAz9B,IAAA,kBAAAC,MACD,SAAgBy8B,GACd,OAAO78B,KAAK69B,OAAOhB,EACrB,GAAC,CAAA18B,IAAA,aAAAC,MACD,WACE,OAAOJ,KAAK09B,oBAAsB19B,KAAKk9B,SACzC,GAAC,CAAA/8B,IAAA,kBAAAC,MACD,WACE,OAAOJ,KAAKu9B,UAAYZ,EAAgBmB,eAC1C,GAAC,CAAA39B,IAAA,kBAAAC,MACD,SAAgBw8B,EAAcC,GAE5B,OADaF,EAAgBoB,oBAAoB/9B,KAAK69B,OAAOhB,GAAW78B,KAAKs9B,YAAYV,GAAc,GAAI58B,KAAKs9B,YAAYV,GAAc,GAE5I,GAAC,CAAAz8B,IAAA,cAAAC,MACD,WACE,OAAOJ,KAAKu9B,UAAYZ,EAAgBqB,sBAC1C,GAAC,CAAA79B,IAAA,WAAAC,MACD,WACE,OAAOo8B,GAAUyB,aAAaj+B,KAAKs9B,YAAY,GAAG,GAAIt9B,KAAKs9B,YAAY,GAAG,IAAM,MAAQd,GAAUyB,aAAaj+B,KAAKs9B,YAAY,GAAG,GAAIt9B,KAAKs9B,YAAY,GAAG,IAAMt9B,KAAKk+B,oBACxK,GAAC,CAAA/9B,IAAA,cAAAC,MACD,SAAYw8B,EAAcuB,GACxB,OAAOn+B,KAAKs9B,YAAYV,GAAcuB,EACxC,GAAC,CAAAh+B,IAAA,iBAAAC,MACD,SAAe4e,GACb,IAAK,IAAI1a,EAAI,EAAGA,EAAItE,KAAKu9B,QAASj5B,IAChC,GAAItE,KAAK69B,OAAOv5B,GAAGwD,SAASkX,GAC1B,OAAO,EAGX,OAAO,CACT,GAAC,CAAA7e,IAAA,8BAAAC,MACD,SAA4Bw8B,EAAcC,GAExC,OADA78B,KAAK88B,sBACE98B,KAAK69B,OAAO79B,KAAK+8B,cAAcH,GAAcC,GACtD,IAAC,CAAA,CAAA18B,IAAA,eAAAC,MAxID,WACEJ,KAAKu9B,QAAU,KACfv9B,KAAKs9B,YAAclsB,MAAM,GAAGmG,OAAOhH,KAAI,WAAA,OAAMa,MAAM,MACnDpR,KAAK69B,OAAS,IAAIzsB,MAAM,GAAGmG,KAAK,MAChCvX,KAAK+8B,cAAgB,KACrB/8B,KAAKk9B,UAAY,KACjBl9B,KAAKo+B,IAAM,KACXp+B,KAAKq+B,IAAM,KACXr+B,KAAKy2B,gBAAkB,KACvBz2B,KAAK69B,OAAO,GAAK,IAAI52B,EACrBjH,KAAK69B,OAAO,GAAK,IAAI52B,EACrBjH,KAAKo+B,IAAMp+B,KAAK69B,OAAO,GACvB79B,KAAKq+B,IAAMr+B,KAAK69B,OAAO,GACvB79B,KAAKu9B,QAAU,CACjB,GAAC,CAAAp9B,IAAA,sBAAAC,MACD,SAA2BiK,EAAG6f,EAAIhf,GAChC,IAAMhD,EAAKrH,KAAKC,IAAIoK,EAAGxF,EAAIwkB,EAAGxkB,GACxByC,EAAKtH,KAAKC,IAAIoK,EAAGvF,EAAIukB,EAAGvkB,GAC1Bgf,GAAQ,EACZ,GAAIta,EAAEzD,OAAOsjB,GACXvF,EAAO,OACF,GAAIta,EAAEzD,OAAOsE,GACLyZ,EAATzc,EAAKC,EAAWD,EAAgBC,MAC/B,CACL,IAAMm2B,EAAMz9B,KAAKC,IAAIuJ,EAAE3E,EAAIwkB,EAAGxkB,GACxB64B,EAAM19B,KAAKC,IAAIuJ,EAAE1E,EAAIukB,EAAGvkB,GAEjB,KADAgf,EAATzc,EAAKC,EAAWm2B,EAAiBC,IAChBl0B,EAAEzD,OAAOsjB,KAC5BvF,EAAO9jB,KAAK+K,IAAI0yB,EAAKC,GAEzB,CAEA,OADAj4B,EAAOG,SAAkB,IAATke,IAAiBta,EAAEzD,OAAOsjB,IAAM,4BACzCvF,CACT,GAAC,CAAAxkB,IAAA,+BAAAC,MACD,SAAoCiK,EAAGa,EAAIC,GACzC,IAAMjD,EAAKmC,EAAE3E,EAAIwF,EAAGxF,EACdyC,EAAKkC,EAAE1E,EAAIuF,EAAGvF,EACdgf,EAAO9jB,KAAKwH,KAAKH,EAAKA,EAAKC,EAAKA,GAEtC,OADA7B,EAAOG,SAAkB,IAATke,IAAiBta,EAAEzD,OAAOsE,IAAM,gCACzCyZ,CACT,IAAC,CA5CiC,GA8IpCgY,GAAgB6B,eAAiB,EACjC7B,GAAgB8B,aAAe,EAC/B9B,GAAgB3f,UAAY,EAC5B2f,GAAgBmB,gBAAkB,EAClCnB,GAAgB+B,mBAAqB,EACrC/B,GAAgBqB,uBAAyB,EChJM,IAC1BW,YAAqBC,GACxC,SAAAD,IAAc,OAAA9+B,OAAA8+B,GAAAl8B,OAAAk8B,EAEd,CAAC,OAAA97B,EAAA87B,EAAAC,GAAA1+B,EAAAy+B,EAAA,CAAA,CAAAx+B,IAAA,uBAAAC,MAqBD,SAAqBy+B,GACnB,IAAMC,EAAO,IAAI11B,EAASpJ,KAAKs9B,YAAY,GAAG,GAAIt9B,KAAKs9B,YAAY,GAAG,IAChEyB,EAAO,IAAI31B,EAASpJ,KAAKs9B,YAAY,GAAG,GAAIt9B,KAAKs9B,YAAY,GAAG,IACtE,OAAOwB,EAAKtd,SAASqd,IAAUE,EAAKvd,SAASqd,EAC/C,GAAC,CAAA1+B,IAAA,sBAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OAeZ,OAAOgnB,EAAAiW,EAAA,sBAAA3+B,KAAA,GAA0BD,MAAMC,KAAMC,WAd7C,IAAMoK,EAAIpK,UAAU,GAAIiL,EAAKjL,UAAU,GAAIkL,EAAKlL,UAAU,GAE1D,GADAD,KAAKk9B,WAAY,EACb9zB,EAASc,WAAWgB,EAAIC,EAAId,IACO,IAAjC8R,GAAY5J,MAAMrH,EAAIC,EAAId,IAA6C,IAAjC8R,GAAY5J,MAAMpH,EAAID,EAAIb,GAMlE,OALArK,KAAKk9B,WAAY,GACb7yB,EAAEzD,OAAOsE,IAAOb,EAAEzD,OAAOuE,MAC3BnL,KAAKk9B,WAAY,GAEnBl9B,KAAKu9B,QAAUZ,GAAgB+B,mBACxB,KAGX1+B,KAAKu9B,QAAUZ,GAAgBmB,eAInC,GAAC,CAAA39B,IAAA,eAAAC,MACD,SAAa8K,EAAIC,EAAII,EAAIC,GACvB,IAAIqzB,EAAQ7+B,KAAKg/B,iBAAiB9zB,EAAIC,EAAII,EAAIC,GAO9C,OANKxL,KAAKi/B,qBAAqBJ,KAC7BA,EAAQ,IAAI53B,EAAW03B,EAAsBO,gBAAgBh0B,EAAIC,EAAII,EAAIC,KAE9C,OAAzBxL,KAAKy2B,iBACPz2B,KAAKy2B,gBAAgB7B,YAAYiK,GAE5BA,CACT,GAAC,CAAA1+B,IAAA,UAAAC,MACD,SAAQ8K,EAAIC,EAAII,EAAIC,EAAIqzB,GACtB,IAAMM,EAAUhlB,GAAeilB,aAAal0B,EAAIC,EAAII,EAAIC,GAClD6zB,EAAOr/B,KAAKi/B,qBAAqBE,GACvChc,GAAOmc,IAAIC,QAAQ,eAAiBF,EAAO,2BAA6BF,GACpEN,EAAMh0B,SAASs0B,GAAW,MAC5Bhc,GAAOmc,IAAIC,QAAQ,cAAgBV,EAAMh0B,SAASs0B,GAEtD,GAAC,CAAAh/B,IAAA,mBAAAC,MACD,SAAiB8K,EAAIC,EAAII,EAAIC,GAC3B,IAAIqzB,EAAQ7c,GAAaod,aAAal0B,EAAIC,EAAII,EAAIC,GAElD,OADc,OAAVqzB,IAAgBA,EAAQF,EAAsBO,gBAAgBh0B,EAAIC,EAAII,EAAIC,IACvEqzB,CACT,GAAC,CAAA1+B,IAAA,+BAAAC,MACD,SAA6B8K,EAAIC,EAAII,EAAIC,GACvC,IAAMg0B,EAASp2B,EAASc,WAAWgB,EAAIC,EAAII,GACrCk0B,EAASr2B,EAASc,WAAWgB,EAAIC,EAAIK,GACrCk0B,EAASt2B,EAASc,WAAWqB,EAAIC,EAAIN,GACrCy0B,EAASv2B,EAASc,WAAWqB,EAAIC,EAAIL,GAC3C,OAAIq0B,GAAUC,GACZz/B,KAAK69B,OAAO,GAAKtyB,EACjBvL,KAAK69B,OAAO,GAAKryB,EACVmxB,GAAgBqB,wBAErB0B,GAAUC,GACZ3/B,KAAK69B,OAAO,GAAK3yB,EACjBlL,KAAK69B,OAAO,GAAK1yB,EACVwxB,GAAgBqB,wBAErBwB,GAAUE,GACZ1/B,KAAK69B,OAAO,GAAKtyB,EACjBvL,KAAK69B,OAAO,GAAK3yB,GACVK,EAAG3E,OAAOsE,IAAQu0B,GAAWE,EAA8ChD,GAAgBqB,uBAArDrB,GAAgB+B,oBAE3Dc,GAAUG,GACZ3/B,KAAK69B,OAAO,GAAKtyB,EACjBvL,KAAK69B,OAAO,GAAK1yB,GACVI,EAAG3E,OAAOuE,IAAQs0B,GAAWC,EAA8C/C,GAAgBqB,uBAArDrB,GAAgB+B,oBAE3De,GAAUC,GACZ1/B,KAAK69B,OAAO,GAAKryB,EACjBxL,KAAK69B,OAAO,GAAK3yB,GACVM,EAAG5E,OAAOsE,IAAQs0B,GAAWG,EAA8ChD,GAAgBqB,uBAArDrB,GAAgB+B,oBAE3De,GAAUE,GACZ3/B,KAAK69B,OAAO,GAAKryB,EACjBxL,KAAK69B,OAAO,GAAK1yB,GACVK,EAAG5E,OAAOuE,IAAQq0B,GAAWE,EAA8C/C,GAAgBqB,uBAArDrB,GAAgB+B,oBAExD/B,GAAgBmB,eACzB,GAAC,CAAA39B,IAAA,mBAAAC,MACD,SAAiB8K,EAAIC,EAAII,EAAIC,GAE3B,GADAxL,KAAKk9B,WAAY,GACZ9zB,EAASc,WAAWgB,EAAIC,EAAII,EAAIC,GAAK,OAAOmxB,GAAgBmB,gBACjE,IAAM8B,EAAMzjB,GAAY5J,MAAMrH,EAAIC,EAAII,GAChCs0B,EAAM1jB,GAAY5J,MAAMrH,EAAIC,EAAIK,GACtC,GAAIo0B,EAAM,GAAKC,EAAM,GAAKD,EAAM,GAAKC,EAAM,EACzC,OAAOlD,GAAgBmB,gBAEzB,IAAMgC,EAAM3jB,GAAY5J,MAAMhH,EAAIC,EAAIN,GAChC60B,EAAM5jB,GAAY5J,MAAMhH,EAAIC,EAAIL,GACtC,OAAI20B,EAAM,GAAKC,EAAM,GAAKD,EAAM,GAAKC,EAAM,EAClCpD,GAAgBmB,gBAEC,IAAR8B,GAAqB,IAARC,GAAqB,IAARC,GAAqB,IAARC,EAEhD//B,KAAKggC,6BAA6B90B,EAAIC,EAAII,EAAIC,IAE3C,IAARo0B,GAAqB,IAARC,GAAqB,IAARC,GAAqB,IAARC,GACzC//B,KAAKk9B,WAAY,EACbhyB,EAAGpD,SAASyD,IAAOL,EAAGpD,SAAS0D,GACjCxL,KAAK69B,OAAO,GAAK3yB,EACVC,EAAGrD,SAASyD,IAAOJ,EAAGrD,SAAS0D,GACtCxL,KAAK69B,OAAO,GAAK1yB,EACF,IAARy0B,EACP5/B,KAAK69B,OAAO,GAAK,IAAI52B,EAAWsE,GACjB,IAARs0B,EACP7/B,KAAK69B,OAAO,GAAK,IAAI52B,EAAWuE,GACjB,IAARs0B,EACP9/B,KAAK69B,OAAO,GAAK,IAAI52B,EAAWiE,GACjB,IAAR60B,IACP//B,KAAK69B,OAAO,GAAK,IAAI52B,EAAWkE,MAGlCnL,KAAKk9B,WAAY,EACjBl9B,KAAK69B,OAAO,GAAK79B,KAAKo/B,aAAal0B,EAAIC,EAAII,EAAIC,IAE1CmxB,GAAgB+B,mBACzB,IAAC,CAAA,CAAAv+B,IAAA,kBAAAC,MA7ID,SAAuB8K,EAAIC,EAAII,EAAIC,GACjC,IAAIy0B,EAAY/0B,EACZg1B,EAAUlc,GAASI,eAAelZ,EAAIK,EAAIC,GAC1CmZ,EAAOX,GAASI,eAAejZ,EAAII,EAAIC,GAe3C,OAdImZ,EAAOub,IACTA,EAAUvb,EACVsb,EAAY90B,IAEdwZ,EAAOX,GAASI,eAAe7Y,EAAIL,EAAIC,IAC5B+0B,IACTA,EAAUvb,EACVsb,EAAY10B,IAEdoZ,EAAOX,GAASI,eAAe5Y,EAAIN,EAAIC,IAC5B+0B,IACTA,EAAUvb,EACVsb,EAAYz0B,GAEPy0B,CACT,IAAC,EAvBgDtD,ICH9BwD,GAAkB,WACrC,SAAAA,IAActgC,OAAAsgC,GACZA,EAAmBrgC,aAAaC,MAAMC,KAAMC,UAC9C,CAAC,OAAAC,EAAAigC,EAAA,CAAA,CAAAhgC,IAAA,eAAAC,MAiCD,SAAa8K,EAAIC,GACf,GAAID,EAAGxF,EAAI1F,KAAKogC,GAAG16B,GAAKyF,EAAGzF,EAAI1F,KAAKogC,GAAG16B,EAAG,OAAO,KACjD,GAAI1F,KAAKogC,GAAG16B,IAAMyF,EAAGzF,GAAK1F,KAAKogC,GAAGz6B,IAAMwF,EAAGxF,EAEzC,OADA3F,KAAKqgC,mBAAoB,EAClB,KAET,GAAIn1B,EAAGvF,IAAM3F,KAAKogC,GAAGz6B,GAAKwF,EAAGxF,IAAM3F,KAAKogC,GAAGz6B,EAAG,CAC5C,IAAI26B,EAAOp1B,EAAGxF,EACV66B,EAAOp1B,EAAGzF,EAQd,OAPI46B,EAAOC,IACTD,EAAOn1B,EAAGzF,EACV66B,EAAOr1B,EAAGxF,GAER1F,KAAKogC,GAAG16B,GAAK46B,GAAQtgC,KAAKogC,GAAG16B,GAAK66B,IACpCvgC,KAAKqgC,mBAAoB,GAEpB,IACT,CACA,GAAIn1B,EAAGvF,EAAI3F,KAAKogC,GAAGz6B,GAAKwF,EAAGxF,GAAK3F,KAAKogC,GAAGz6B,GAAKwF,EAAGxF,EAAI3F,KAAKogC,GAAGz6B,GAAKuF,EAAGvF,GAAK3F,KAAKogC,GAAGz6B,EAAG,CAClF,IAAI66B,EAASrkB,GAAY5J,MAAMrH,EAAIC,EAAInL,KAAKogC,IAC5C,GAAII,IAAWrkB,GAAYa,UAEzB,OADAhd,KAAKqgC,mBAAoB,EAClB,KAELl1B,EAAGxF,EAAIuF,EAAGvF,IACZ66B,GAAUA,GAERA,IAAWrkB,GAAYrK,MACzB9R,KAAKygC,gBAET,CACF,GAAC,CAAAtgC,IAAA,mBAAAC,MACD,WACE,OAAOJ,KAAK0gC,gBAAkBhxB,EAASE,QACzC,GAAC,CAAAzP,IAAA,cAAAC,MACD,WACE,OAAIJ,KAAKqgC,kBAA0B3wB,EAASG,SACxC7P,KAAKygC,eAAiB,GAAM,EACvB/wB,EAASI,SAEXJ,EAASE,QAClB,GAAC,CAAAzP,IAAA,cAAAC,MACD,WACE,OAAOJ,KAAKqgC,iBACd,IAAC,CAAA,CAAAlgC,IAAA,eAAAC,MA5ED,WACEJ,KAAKogC,GAAK,KACVpgC,KAAKygC,eAAiB,EACtBzgC,KAAKqgC,mBAAoB,EACzB,IAAMh2B,EAAIpK,UAAU,GACpBD,KAAKogC,GAAK/1B,CACZ,GAAC,CAAAlK,IAAA,oBAAAC,MACD,WACE,GAAIH,UAAU,aAAcgH,GAAc2L,GAAa3S,UAAU,GAAI2b,IAAqB,CAKxF,IAJA,IAAwBS,EAAOpc,UAAU,GACnC0gC,EAAU,IAAIR,EADVlgC,UAAU,IAEdiL,EAAK,IAAIjE,EACTkE,EAAK,IAAIlE,EACN3C,EAAI,EAAGA,EAAI+X,EAAKlL,OAAQ7M,IAI/B,GAHA+X,EAAKQ,cAAcvY,EAAG4G,GACtBmR,EAAKQ,cAAcvY,EAAI,EAAG6G,GAC1Bw1B,EAAQC,aAAa11B,EAAIC,GACrBw1B,EAAQE,cAAe,OAAOF,EAAQD,cAE5C,OAAOC,EAAQD,aACjB,CAAO,GAAIzgC,UAAU,aAAcgH,GAAchH,UAAU,aAAcmR,MAAO,CAG9E,IAFA,IAAwBiL,EAAOpc,UAAU,GACnC0gC,EAAU,IAAIR,EADVlgC,UAAU,IAEXqE,EAAI,EAAGA,EAAI+X,EAAK3a,OAAQ4C,IAAK,CACpC,IAAM4G,EAAKmR,EAAK/X,GACV6G,EAAKkR,EAAK/X,EAAI,GAEpB,GADAq8B,EAAQC,aAAa11B,EAAIC,GACrBw1B,EAAQE,cAAe,OAAOF,EAAQD,aAC5C,CACA,OAAOC,EAAQD,aACjB,CACF,IAAC,CAnCoC,GCClBI,GAAa,WAAA,SAAAA,IAAAjhC,OAAAihC,EAAA,CAAA,OAAA5gC,EAAA4gC,EAAA,KAAA,CAAA,CAAA3gC,IAAA,WAAAC,MAChC,WACE,GAAIH,UAAU,aAAcgH,GAAc2L,GAAa3S,UAAU,GAAI2b,IAAqB,CAMxF,IALA,IAAMvR,EAAIpK,UAAU,GAAIwkB,EAAOxkB,UAAU,GACnC8gC,EAAkB,IAAIpC,GACtBzU,EAAK,IAAIjjB,EACTiE,EAAK,IAAIjE,EACTpC,EAAI4f,EAAKtT,OACN7M,EAAI,EAAGA,EAAIO,EAAGP,IAIrB,GAHAmgB,EAAK5H,cAAcvY,EAAI,EAAG4lB,GAC1BzF,EAAK5H,cAAcvY,EAAG4G,GACtB61B,EAAgBC,oBAAoB32B,EAAG6f,EAAIhf,GACvC61B,EAAgBrD,kBAClB,OAAO,EAGX,OAAO,CACT,CAAO,GAAIz9B,UAAU,aAAcgH,GAAchH,UAAU,aAAcmR,MAAO,CAG9E,IAFA,IAAM/G,EAAIpK,UAAU,GAAIwkB,EAAOxkB,UAAU,GACnC8gC,EAAkB,IAAIpC,GACnBr6B,EAAI,EAAGA,EAAImgB,EAAK/iB,OAAQ4C,IAAK,CACpC,IAAM4lB,EAAKzF,EAAKngB,EAAI,GACd4G,EAAKuZ,EAAKngB,GAEhB,GADAy8B,EAAgBC,oBAAoB32B,EAAG6f,EAAIhf,GACvC61B,EAAgBrD,kBAClB,OAAO,CAEX,CACA,OAAO,CACT,CACF,GAAC,CAAAv9B,IAAA,eAAAC,MACD,SAAoBiK,EAAGgS,GACrB,OAAO8jB,GAAmBc,kBAAkB52B,EAAGgS,EACjD,GAAC,CAAAlc,IAAA,WAAAC,MACD,SAAgBiK,EAAGgS,GACjB,OAAOykB,EAAcI,aAAa72B,EAAGgS,KAAU3M,EAASE,QAC1D,IAAC,CApC+B,GCHbuxB,GAAgB,WACnC,SAAAA,IAActhC,OAAAshC,GACZA,EAAiBrhC,aAAaC,MAAMC,KAAMC,UAC5C,CAAC,OAAAC,EAAAihC,EAAA,CAAA,CAAAhhC,IAAA,kBAAAC,MA4BD,SAAgBghC,GACd,IAAK,IAAI98B,EAAI,EAAGA,EAAItE,KAAKqhC,SAAS3/B,OAAQ4C,IACxCtE,KAAKqhC,SAAS/8B,GAAK88B,CAEvB,GAAC,CAAAjhC,IAAA,SAAAC,MACD,WACE,IAAK,IAAIkE,EAAI,EAAGA,EAAItE,KAAKqhC,SAAS3/B,OAAQ4C,IACxC,GAAItE,KAAKqhC,SAAS/8B,KAAOoL,EAASK,KAAM,OAAO,EAEjD,OAAO,CACT,GAAC,CAAA5P,IAAA,wBAAAC,MACD,SAAsBghC,GACpB,IAAK,IAAI98B,EAAI,EAAGA,EAAItE,KAAKqhC,SAAS3/B,OAAQ4C,IACpCtE,KAAKqhC,SAAS/8B,KAAOoL,EAASK,OAAM/P,KAAKqhC,SAAS/8B,GAAK88B,EAE/D,GAAC,CAAAjhC,IAAA,SAAAC,MACD,WACE,OAAgC,IAAzBJ,KAAKqhC,SAAS3/B,MACvB,GAAC,CAAAvB,IAAA,QAAAC,MACD,SAAMkhC,GACJ,GAAIA,EAAGD,SAAS3/B,OAAS1B,KAAKqhC,SAAS3/B,OAAQ,CAC7C,IAAM6/B,EAAS,IAAInwB,MAAM,GAAGmG,KAAK,MACjCgqB,EAAO3vB,EAASI,IAAMhS,KAAKqhC,SAASzvB,EAASI,IAC7CuvB,EAAO3vB,EAASE,MAAQpC,EAASK,KACjCwxB,EAAO3vB,EAASG,OAASrC,EAASK,KAClC/P,KAAKqhC,SAAWE,CAClB,CACA,IAAK,IAAIj9B,EAAI,EAAGA,EAAItE,KAAKqhC,SAAS3/B,OAAQ4C,IACpCtE,KAAKqhC,SAAS/8B,KAAOoL,EAASK,MAAQzL,EAAIg9B,EAAGD,SAAS3/B,SAAQ1B,KAAKqhC,SAAS/8B,GAAKg9B,EAAGD,SAAS/8B,GAErG,GAAC,CAAAnE,IAAA,eAAAC,MACD,WACE,OAAOJ,KAAKqhC,QACd,GAAC,CAAAlhC,IAAA,OAAAC,MACD,WACE,GAAIJ,KAAKqhC,SAAS3/B,QAAU,EAAG,OAAO,KACtC,IAAM8/B,EAAOxhC,KAAKqhC,SAASzvB,EAASE,MACpC9R,KAAKqhC,SAASzvB,EAASE,MAAQ9R,KAAKqhC,SAASzvB,EAASG,OACtD/R,KAAKqhC,SAASzvB,EAASG,OAASyvB,CAClC,GAAC,CAAArhC,IAAA,WAAAC,MACD,WACE,IAAM6T,EAAM,IAAIpB,GAIhB,OAHI7S,KAAKqhC,SAAS3/B,OAAS,GAAGuS,EAAIG,OAAO1E,EAAS+xB,iBAAiBzhC,KAAKqhC,SAASzvB,EAASE,QAC1FmC,EAAIG,OAAO1E,EAAS+xB,iBAAiBzhC,KAAKqhC,SAASzvB,EAASI,MACxDhS,KAAKqhC,SAAS3/B,OAAS,GAAGuS,EAAIG,OAAO1E,EAAS+xB,iBAAiBzhC,KAAKqhC,SAASzvB,EAASG,SACnFkC,EAAIa,UACb,GAAC,CAAA3U,IAAA,eAAAC,MACD,SAAashC,EAAIC,EAAMC,GACrB5hC,KAAKqhC,SAASzvB,EAASI,IAAM0vB,EAC7B1hC,KAAKqhC,SAASzvB,EAASE,MAAQ6vB,EAC/B3hC,KAAKqhC,SAASzvB,EAASG,OAAS6vB,CAClC,GAAC,CAAAzhC,IAAA,MAAAC,MACD,SAAIyhC,GACF,OAAIA,EAAW7hC,KAAKqhC,SAAS3/B,OAAe1B,KAAKqhC,SAASQ,GACnDnyB,EAASK,IAClB,GAAC,CAAA5P,IAAA,SAAAC,MACD,WACE,OAAOJ,KAAKqhC,SAAS3/B,OAAS,CAChC,GAAC,CAAAvB,IAAA,YAAAC,MACD,WACE,IAAK,IAAIkE,EAAI,EAAGA,EAAItE,KAAKqhC,SAAS3/B,OAAQ4C,IACxC,GAAItE,KAAKqhC,SAAS/8B,KAAOoL,EAASK,KAAM,OAAO,EAEjD,OAAO,CACT,GAAC,CAAA5P,IAAA,cAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OAAc,CAC1B,IAAM0/B,EAAWnhC,UAAU,GAC3BD,KAAK8hC,YAAYlwB,EAASI,GAAIovB,EAChC,MAAO,GAAyB,IAArBnhC,UAAUyB,OAAc,CACjC,IAAMqgC,EAAW9hC,UAAU,GAAImhC,EAAWnhC,UAAU,GACpDD,KAAKqhC,SAASU,GAAYX,CAC5B,CACF,GAAC,CAAAjhC,IAAA,OAAAC,MACD,SAAK+Q,GACHnR,KAAKqhC,SAAW,IAAIjwB,MAAMD,GAAMoG,KAAK,MACrCvX,KAAKgiC,gBAAgBtyB,EAASK,KAChC,GAAC,CAAA5P,IAAA,gBAAAC,MACD,SAAc6U,EAAI8sB,GAChB,OAAO/hC,KAAKqhC,SAASU,KAAc9sB,EAAGosB,SAASU,EACjD,GAAC,CAAA5hC,IAAA,oBAAAC,MACD,SAAkB6hC,GAChB,IAAK,IAAI39B,EAAI,EAAGA,EAAItE,KAAKqhC,SAAS3/B,OAAQ4C,IACxC,GAAItE,KAAKqhC,SAAS/8B,KAAO29B,EAAK,OAAO,EAEvC,OAAO,CACT,IAAC,CAAA,CAAA9hC,IAAA,eAAAC,MAjHD,WAEE,GADAJ,KAAKqhC,SAAW,KACS,IAArBphC,UAAUyB,QACZ,GAAIzB,UAAU,aAAcmR,MAAO,CACjC,IAAMiwB,EAAWphC,UAAU,GAC3BD,KAAK4K,KAAKy2B,EAAS3/B,OACpB,MAAM,GAAIoD,OAAOif,UAAU9jB,UAAU,IAAK,CACzC,IAAMyhC,EAAKzhC,UAAU,GACrBD,KAAK4K,KAAK,GACV5K,KAAKqhC,SAASzvB,EAASI,IAAM0vB,CAC9B,MAAM,GAAIzhC,UAAU,aAAckhC,EAAkB,CACnD,IAAMG,EAAKrhC,UAAU,GAErB,GADAD,KAAK4K,KAAK02B,EAAGD,SAAS3/B,QACX,OAAP4/B,EACF,IAAK,IAAIh9B,EAAI,EAAGA,EAAItE,KAAKqhC,SAAS3/B,OAAQ4C,IACxCtE,KAAKqhC,SAAS/8B,GAAKg9B,EAAGD,SAAS/8B,EAGrC,OACK,GAAyB,IAArBrE,UAAUyB,OAAc,CACjC,IAAMggC,EAAKzhC,UAAU,GAAI0hC,EAAO1hC,UAAU,GAAI2hC,EAAQ3hC,UAAU,GAChED,KAAK4K,KAAK,GACV5K,KAAKqhC,SAASzvB,EAASI,IAAM0vB,EAC7B1hC,KAAKqhC,SAASzvB,EAASE,MAAQ6vB,EAC/B3hC,KAAKqhC,SAASzvB,EAASG,OAAS6vB,CAClC,CACF,IAAC,CA9BkC,GCChBM,GAAK,WACxB,SAAAA,IAAcriC,OAAAqiC,GACZA,EAAMpiC,aAAaC,MAAMC,KAAMC,UACjC,CAAC,OAAAC,EAAAgiC,EAAA,CAAA,CAAA/hC,IAAA,mBAAAC,MAoCD,WACE,IAAI+hC,EAAQ,EAGZ,OAFKniC,KAAKoiC,IAAI,GAAG54B,UAAU24B,IACtBniC,KAAKoiC,IAAI,GAAG54B,UAAU24B,IACpBA,CACT,GAAC,CAAAhiC,IAAA,kBAAAC,MACD,SAAgBiiC,EAAWhB,GACzBrhC,KAAKoiC,IAAIC,GAAWL,gBAAgBX,EACtC,GAAC,CAAAlhC,IAAA,SAAAC,MACD,SAAOiiC,GACL,OAAOriC,KAAKoiC,IAAIC,GAAW74B,QAC7B,GAAC,CAAArJ,IAAA,wBAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OAAc,CAC1B,IAAM2/B,EAAWphC,UAAU,GAC3BD,KAAKsiC,sBAAsB,EAAGjB,GAC9BrhC,KAAKsiC,sBAAsB,EAAGjB,EAChC,MAAO,GAAyB,IAArBphC,UAAUyB,OAAc,CACjC,IAAM2gC,EAAYpiC,UAAU,GAAIohC,EAAWphC,UAAU,GACrDD,KAAKoiC,IAAIC,GAAWC,sBAAsBjB,EAC5C,CACF,GAAC,CAAAlhC,IAAA,SAAAC,MACD,SAAOiiC,GACL,OAAOriC,KAAKoiC,IAAIC,GAAWE,QAC7B,GAAC,CAAApiC,IAAA,QAAAC,MACD,SAAMoiC,GACJ,IAAK,IAAIl+B,EAAI,EAAGA,EAAI,EAAGA,IACD,OAAhBtE,KAAKoiC,IAAI99B,IAA8B,OAAfk+B,EAAIJ,IAAI99B,GAClCtE,KAAKoiC,IAAI99B,GAAK,IAAI68B,GAAiBqB,EAAIJ,IAAI99B,IAE3CtE,KAAKoiC,IAAI99B,GAAGm+B,MAAMD,EAAIJ,IAAI99B,GAGhC,GAAC,CAAAnE,IAAA,OAAAC,MACD,WACEJ,KAAKoiC,IAAI,GAAGM,OACZ1iC,KAAKoiC,IAAI,GAAGM,MACd,GAAC,CAAAviC,IAAA,cAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OAAc,CAC1B,IAAM2gC,EAAYpiC,UAAU,GAC5B,OAAOD,KAAKoiC,IAAIC,GAAW95B,IAAIqJ,EAASI,GAC1C,CAAO,GAAyB,IAArB/R,UAAUyB,OAAc,CACjC,IAAM2gC,EAAYpiC,UAAU,GAAI4hC,EAAW5hC,UAAU,GACrD,OAAOD,KAAKoiC,IAAIC,GAAW95B,IAAIs5B,EACjC,CACF,GAAC,CAAA1hC,IAAA,WAAAC,MACD,WACE,IAAM6T,EAAM,IAAIpB,GAShB,OARoB,OAAhB7S,KAAKoiC,IAAI,KACXnuB,EAAIG,OAAO,MACXH,EAAIG,OAAOpU,KAAKoiC,IAAI,GAAGttB,aAEL,OAAhB9U,KAAKoiC,IAAI,KACXnuB,EAAIG,OAAO,OACXH,EAAIG,OAAOpU,KAAKoiC,IAAI,GAAGttB,aAElBb,EAAIa,UACb,GAAC,CAAA3U,IAAA,SAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OACZ,OAAO1B,KAAKoiC,IAAI,GAAGO,UAAY3iC,KAAKoiC,IAAI,GAAGO,SACtC,GAAyB,IAArB1iC,UAAUyB,OAAc,CACjC,IAAM2gC,EAAYpiC,UAAU,GAC5B,OAAOD,KAAKoiC,IAAIC,GAAWM,QAC7B,CACF,GAAC,CAAAxiC,IAAA,YAAAC,MACD,SAAUiiC,GACR,OAAOriC,KAAKoiC,IAAIC,GAAWO,WAC7B,GAAC,CAAAziC,IAAA,cAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OAAc,CAC1B,IAAM2gC,EAAYpiC,UAAU,GAAIohC,EAAWphC,UAAU,GACrDD,KAAKoiC,IAAIC,GAAWP,YAAYlwB,EAASI,GAAIqvB,EAC/C,MAAO,GAAyB,IAArBphC,UAAUyB,OAAc,CACjC,IAAM2gC,EAAYpiC,UAAU,GAAI4hC,EAAW5hC,UAAU,GAAIohC,EAAWphC,UAAU,GAC9ED,KAAKoiC,IAAIC,GAAWP,YAAYD,EAAUR,EAC5C,CACF,GAAC,CAAAlhC,IAAA,gBAAAC,MACD,SAAcoiC,EAAKnlB,GACjB,OAAOrd,KAAKoiC,IAAI,GAAGS,cAAcL,EAAIJ,IAAI,GAAI/kB,IAASrd,KAAKoiC,IAAI,GAAGS,cAAcL,EAAIJ,IAAI,GAAI/kB,EAC9F,GAAC,CAAAld,IAAA,oBAAAC,MACD,SAAkBiiC,EAAWJ,GAC3B,OAAOjiC,KAAKoiC,IAAIC,GAAWS,kBAAkBb,EAC/C,GAAC,CAAA9hC,IAAA,SAAAC,MACD,SAAOiiC,GACDriC,KAAKoiC,IAAIC,GAAWM,WAAU3iC,KAAKoiC,IAAIC,GAAa,IAAIlB,GAAiBnhC,KAAKoiC,IAAIC,GAAWhB,SAAS,IAC5G,IAAC,CAAA,CAAAlhC,IAAA,eAAAC,MA1HD,WAEE,GADAJ,KAAKoiC,IAAM,IAAIhxB,MAAM,GAAGmG,KAAK,MACJ,IAArBtX,UAAUyB,QACZ,GAAIoD,OAAOif,UAAU9jB,UAAU,IAAK,CAClC,IAAM8iC,EAAQ9iC,UAAU,GACxBD,KAAKoiC,IAAI,GAAK,IAAIjB,GAAiB4B,GACnC/iC,KAAKoiC,IAAI,GAAK,IAAIjB,GAAiB4B,EACpC,MAAM,GAAI9iC,UAAU,aAAciiC,EAAO,CACxC,IAAMM,EAAMviC,UAAU,GACtBD,KAAKoiC,IAAI,GAAK,IAAIjB,GAAiBqB,EAAIJ,IAAI,IAC3CpiC,KAAKoiC,IAAI,GAAK,IAAIjB,GAAiBqB,EAAIJ,IAAI,GAC7C,OACK,GAAyB,IAArBniC,UAAUyB,OAAc,CACjC,IAAM2gC,EAAYpiC,UAAU,GAAI8iC,EAAQ9iC,UAAU,GAClDD,KAAKoiC,IAAI,GAAK,IAAIjB,GAAiBzxB,EAASK,MAC5C/P,KAAKoiC,IAAI,GAAK,IAAIjB,GAAiBzxB,EAASK,MAC5C/P,KAAKoiC,IAAIC,GAAWP,YAAYiB,EAClC,MAAO,GAAyB,IAArB9iC,UAAUyB,OAAc,CACjC,IAAMqhC,EAAQ9iC,UAAU,GAAI+iC,EAAU/iC,UAAU,GAAIgjC,EAAWhjC,UAAU,GACzED,KAAKoiC,IAAI,GAAK,IAAIjB,GAAiB4B,EAAOC,EAASC,GACnDjjC,KAAKoiC,IAAI,GAAK,IAAIjB,GAAiB4B,EAAOC,EAASC,EACrD,MAAO,GAAyB,IAArBhjC,UAAUyB,OAAc,CACjC,IAAM2gC,EAAYpiC,UAAU,GAAI8iC,EAAQ9iC,UAAU,GAAI+iC,EAAU/iC,UAAU,GAAIgjC,EAAWhjC,UAAU,GACnGD,KAAKoiC,IAAI,GAAK,IAAIjB,GAAiBzxB,EAASK,KAAML,EAASK,KAAML,EAASK,MAC1E/P,KAAKoiC,IAAI,GAAK,IAAIjB,GAAiBzxB,EAASK,KAAML,EAASK,KAAML,EAASK,MAC1E/P,KAAKoiC,IAAIC,GAAWa,aAAaH,EAAOC,EAASC,EACnD,CACF,GAAC,CAAA9iC,IAAA,cAAAC,MACD,SAAmB+iC,GAEjB,IADA,IAAMC,EAAY,IAAIlB,EAAMxyB,EAASK,MAC5BzL,EAAI,EAAGA,EAAI,EAAGA,IACrB8+B,EAAUtB,YAAYx9B,EAAG6+B,EAAMzC,YAAYp8B,IAE7C,OAAO8+B,CACT,IAAC,CAtCuB,GCILC,GAAQ,WAG1B,OAAAnjC,GAFD,SAAAmjC,IAAcxjC,OAAAwjC,GACZA,EAASvjC,aAAaC,MAAMC,KAAMC,UACpC,GAAC,CAAA,CAAAE,IAAA,cAAAC,MAmBD,WACE,GAAmB,OAAfJ,KAAKsjC,MAAgB,OAAO,KAEhC,IADA,IAAMrlB,EAAQ,IAAI7M,MAAMpR,KAAKujC,KAAKpyB,QAAQoG,KAAK,MACtCjT,EAAI,EAAGA,EAAItE,KAAKujC,KAAKpyB,OAAQ7M,IACpC2Z,EAAM3Z,GAAKtE,KAAKujC,KAAKh7B,IAAIjE,GAE3BtE,KAAKsjC,MAAQtjC,KAAKwjC,iBAAiBtW,iBAAiBjP,GACpDje,KAAKyjC,QAAUtnB,GAAY4P,MAAM/rB,KAAKsjC,MAAM3lB,iBAC9C,GAAC,CAAAxd,IAAA,aAAAC,MACD,WACE,OAA0C,IAAnCJ,KAAK0jC,OAAOC,kBACrB,GAAC,CAAAxjC,IAAA,gBAAAC,MACD,SAAc6vB,GACZjwB,KAAK4jC,SAAW3T,EAChB,IAAI7S,EAAK6S,EACL4T,GAAc,EAClB,EAAG,CACD,GAAW,OAAPzmB,EAAa,MAAM,IAAI0B,GAAkB,2BAC7C,GAAI1B,EAAG0mB,gBAAkB9jC,KAAM,MAAM,IAAI8e,GAAkB,uDAAyD1B,EAAGP,iBACvH7c,KAAK+jC,OAAO9yB,IAAImM,GAChB,IAAM+lB,EAAQ/lB,EAAGoD,WACjBla,EAAOG,OAAO08B,EAAMR,UACpB3iC,KAAKgkC,WAAWb,GAChBnjC,KAAKikC,UAAU7mB,EAAGM,UAAWN,EAAGoB,YAAaqlB,GAC7CA,GAAc,EACd7jC,KAAKkkC,YAAY9mB,EAAIpd,MACrBod,EAAKpd,KAAKmkC,QAAQ/mB,EACpB,OAASA,IAAOpd,KAAK4jC,SACvB,GAAC,CAAAzjC,IAAA,gBAAAC,MACD,WACE,OAAOJ,KAAKsjC,KACd,GAAC,CAAAnjC,IAAA,gBAAAC,MACD,SAAckE,GACZ,OAAOtE,KAAKujC,KAAKh7B,IAAIjE,EACvB,GAAC,CAAAnE,IAAA,uBAAAC,MACD,WACEJ,KAAKokC,eAAiB,EACtB,IAAIhnB,EAAKpd,KAAK4jC,SACd,EAAG,CACD,IACMS,EADOjnB,EAAGiB,UACIC,WAAWgmB,kBAAkBtkC,MAC7CqkC,EAASrkC,KAAKokC,iBAAgBpkC,KAAKokC,eAAiBC,GACxDjnB,EAAKpd,KAAKmkC,QAAQ/mB,EACpB,OAASA,IAAOpd,KAAK4jC,UACrB5jC,KAAKokC,gBAAkB,CACzB,GAAC,CAAAjkC,IAAA,YAAAC,MACD,SAAUmkC,EAAM/lB,EAAWqlB,GACzB,IAAMW,EAAUD,EAAK5mB,iBACrB,GAAIa,EAAW,CACb,IAAIimB,EAAa,EACbZ,IAAaY,EAAa,GAC9B,IAAK,IAAIngC,EAAImgC,EAAYngC,EAAIkgC,EAAQ9iC,OAAQ4C,IAC3CtE,KAAKujC,KAAKtyB,IAAIuzB,EAAQlgC,GAE1B,KAAO,CACL,IAAImgC,EAAaD,EAAQ9iC,OAAS,EAC9BmiC,IAAaY,EAAaD,EAAQ9iC,OAAS,GAC/C,IAAK,IAAI4C,EAAImgC,EAAYngC,GAAK,EAAGA,IAC/BtE,KAAKujC,KAAKtyB,IAAIuzB,EAAQlgC,GAE1B,CACF,GAAC,CAAAnE,IAAA,SAAAC,MACD,WACE,OAAOJ,KAAKyjC,OACd,GAAC,CAAAtjC,IAAA,cAAAC,MACD,WACE,IAAIgd,EAAKpd,KAAK4jC,SACd,GACExmB,EAAGM,UAAUqD,aAAY,GACzB3D,EAAKA,EAAG+mB,gBACD/mB,IAAOpd,KAAK4jC,SACvB,GAAC,CAAAzjC,IAAA,gBAAAC,MACD,SAAciK,GACZ,IAAM2hB,EAAQhsB,KAAK0kC,gBAEnB,IADY1Y,EAAMjf,sBACTyU,SAASnX,GAAI,OAAO,EAC7B,IAAKy2B,GAAc6D,SAASt6B,EAAG2hB,EAAMrO,kBAAmB,OAAO,EAC/D,IAAK,IAAIrZ,EAAItE,KAAKgrB,OAAOpd,WAAYtJ,EAAEwJ,WAAa,CAElD,GADaxJ,EAAE0J,OACN42B,cAAcv6B,GAAI,OAAO,CACpC,CACA,OAAO,CACT,GAAC,CAAAlK,IAAA,UAAAC,MACD,SAAQic,GACNrc,KAAKgrB,OAAO/Z,IAAIoL,EAClB,GAAC,CAAAlc,IAAA,UAAAC,MACD,WACE,OAAuB,OAAhBJ,KAAK8qB,MACd,GAAC,CAAA3qB,IAAA,WAAAC,MACD,WACE,OAAOJ,KAAK0jC,MACd,GAAC,CAAAvjC,IAAA,WAAAC,MACD,WACE,OAAOJ,KAAK+jC,MACd,GAAC,CAAA5jC,IAAA,mBAAAC,MACD,WAEE,OADIJ,KAAKokC,eAAiB,GAAGpkC,KAAK6kC,uBAC3B7kC,KAAKokC,cACd,GAAC,CAAAjkC,IAAA,WAAAC,MACD,WACE,OAAOJ,KAAK8qB,MACd,GAAC,CAAA3qB,IAAA,aAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OAAc,CAC1B,IAAMojC,EAAU7kC,UAAU,GAC1BD,KAAKgkC,WAAWc,EAAS,GACzB9kC,KAAKgkC,WAAWc,EAAS,EAC3B,MAAO,GAAyB,IAArB7kC,UAAUyB,OAAc,CACjC,IAA8B2gC,EAAYpiC,UAAU,GAC9CgiC,EADUhiC,UAAU,GACNygC,YAAY2B,EAAWzwB,EAASG,OACpD,GAAIkwB,IAAQvyB,EAASK,KAAM,OAAO,KAClC,GAAI/P,KAAK0jC,OAAOhD,YAAY2B,KAAe3yB,EAASK,KAElD,OADA/P,KAAK0jC,OAAO5B,YAAYO,EAAWJ,GAC5B,IAEX,CACF,GAAC,CAAA9hC,IAAA,WAAAC,MACD,SAAS4rB,GACPhsB,KAAK8qB,OAASkB,EACA,OAAVA,GAAgBA,EAAM+Y,QAAQ/kC,KACpC,GAAC,CAAAG,IAAA,YAAAC,MACD,SAAUk8B,GAER,IADA,IAAM0I,EAAS,IAAI5zB,MAAMpR,KAAKgrB,OAAO7Z,QAAQoG,KAAK,MACzCjT,EAAI,EAAGA,EAAItE,KAAKgrB,OAAO7Z,OAAQ7M,IACtC0gC,EAAO1gC,GAAKtE,KAAKgrB,OAAOziB,IAAIjE,GAAGogC,gBAGjC,OADapI,EAAgBlQ,cAAcpsB,KAAK0kC,gBAAiBM,EAEnE,IAAC,CAAA,CAAA7kC,IAAA,eAAAC,MAlJD,WAWE,GAVAJ,KAAK4jC,SAAW,KAChB5jC,KAAKokC,gBAAkB,EACvBpkC,KAAK+jC,OAAS,IAAI3kB,GAClBpf,KAAKujC,KAAO,IAAInkB,GAChBpf,KAAK0jC,OAAS,IAAIxB,GAAMxyB,EAASK,MACjC/P,KAAKsjC,MAAQ,KACbtjC,KAAKyjC,QAAU,KACfzjC,KAAK8qB,OAAS,KACd9qB,KAAKgrB,OAAS,IAAI5L,GAClBpf,KAAKwjC,iBAAmB,KACC,IAArBvjC,UAAUyB,aAAsB,GAAyB,IAArBzB,UAAUyB,OAAc,CAC9D,IAAMuuB,EAAQhwB,UAAU,GAAIq8B,EAAkBr8B,UAAU,GACxDD,KAAKwjC,iBAAmBlH,EACxBt8B,KAAKilC,cAAchV,GACnBjwB,KAAKklC,aACP,CACF,IAAC,CArB0B,GCPRC,YAAeC,GAClC,SAAAD,IAAc,IAAA3iC,EAEuC,OAFvC3C,OAAAslC,GACZ3iC,EAAAC,EAAAzC,KAAAmlC,GACAA,EAAgBrlC,aAAaC,MAAKyC,EAAOvC,WAAUuC,CACrD,CAAC,OAAAK,EAAAsiC,EAAAC,GAAAllC,EAAAilC,EAAA,CAAA,CAAAhlC,IAAA,cAAAC,MAKD,SAAYgd,EAAIioB,GACdjoB,EAAGkoB,eAAeD,EACpB,GAAC,CAAAllC,IAAA,UAAAC,MACD,SAAQgd,GACN,OAAOA,EAAGmoB,YACZ,IAAC,CAAA,CAAAplC,IAAA,eAAAC,MATD,WACE,IAAM6vB,EAAQhwB,UAAU,GAAIq8B,EAAkBr8B,UAAU,GACxDojC,GAASvjC,aAAauG,KAAKrG,KAAMiwB,EAAOqM,EAC1C,IAAC,EAR0C+G,ICExBmC,YAAeJ,GAClC,SAAAI,IAAc,IAAAhjC,EAEuC,OAFvC3C,OAAA2lC,GACZhjC,EAAAC,EAAAzC,KAAAwlC,GACAA,EAAgB1lC,aAAaC,MAAKyC,EAAOvC,WAAUuC,CACrD,CAAC,OAAAK,EAAA2iC,EAAAJ,GAAAllC,EAAAslC,EAAA,CAAA,CAAArlC,IAAA,oBAAAC,MAKD,WACE,IAAMqlC,EAAe,IAAIrmB,GACrBhC,EAAKpd,KAAK4jC,SACd,EAAG,CACD,GAA4B,OAAxBxmB,EAAGsoB,iBAA2B,CAChC,IAAMC,EAAQ,IAAIR,GAAgB/nB,EAAIpd,KAAKwjC,kBAC3CiC,EAAax0B,IAAI00B,EACnB,CACAvoB,EAAKA,EAAG+mB,SACV,OAAS/mB,IAAOpd,KAAK4jC,UACrB,OAAO6B,CACT,GAAC,CAAAtlC,IAAA,cAAAC,MACD,SAAYgd,EAAIioB,GACdjoB,EAAG8mB,YAAYmB,EACjB,GAAC,CAAAllC,IAAA,uCAAAC,MACD,WACE,IAAIgd,EAAKpd,KAAK4jC,SACd,EAAG,CACYxmB,EAAGiB,UACXC,WAAWsnB,yBAAyB5lC,MACzCod,EAAKA,EAAG+mB,SACV,OAAS/mB,IAAOpd,KAAK4jC,SACvB,GAAC,CAAAzjC,IAAA,UAAAC,MACD,SAAQgd,GACN,OAAOA,EAAG+mB,SACZ,IAAC,CAAA,CAAAhkC,IAAA,eAAAC,MA7BD,WACE,IAAM6vB,EAAQhwB,UAAU,GAAIq8B,EAAkBr8B,UAAU,GACxDojC,GAASvjC,aAAauG,KAAKrG,KAAMiwB,EAAOqM,EAC1C,IAAC,EAR0C+G,ICFxBwC,GAAc,WAGhC,OAAA3lC,GAFD,SAAA2lC,IAAchmC,OAAAgmC,GACZA,EAAe/lC,aAAaC,MAAMC,KAAMC,UAC1C,GAAC,CAAA,CAAAE,IAAA,aAAAC,MAYD,SAAW8f,GACTlgB,KAAK8lC,WAAa5lB,CACpB,GAAC,CAAA/f,IAAA,cAAAC,MACD,SAAY2lC,GACV/lC,KAAKgmC,YAAcD,CACrB,GAAC,CAAA5lC,IAAA,YAAAC,MACD,WACE,OAAOJ,KAAKimC,UACd,GAAC,CAAA9lC,IAAA,eAAAC,MACD,WACE,OAAOJ,KAAKkmC,aACd,GAAC,CAAA/lC,IAAA,WAAAC,MACD,SAAS+iC,GACPnjC,KAAK0jC,OAASP,CAChB,GAAC,CAAAhjC,IAAA,WAAAC,MACD,WACE,OAAOJ,KAAK0jC,MACd,GAAC,CAAAvjC,IAAA,aAAAC,MACD,SAAW+lC,GACTnmC,KAAKimC,WAAaE,EAClBnmC,KAAKkmC,eAAgB,CACvB,GAAC,CAAA/lC,IAAA,WAAAC,MACD,SAASgmC,GACP9/B,EAAOG,OAAOzG,KAAK0jC,OAAOC,oBAAsB,EAAG,uBACnD3jC,KAAKqmC,UAAUD,EACjB,GAAC,CAAAjmC,IAAA,aAAAC,MACD,WACE,OAAOJ,KAAKgmC,WACd,GAAC,CAAA7lC,IAAA,YAAAC,MACD,WACE,OAAOJ,KAAK8lC,UACd,IAAC,CAAA,CAAA3lC,IAAA,eAAAC,MA1CD,WAME,GALAJ,KAAK0jC,OAAS,KACd1jC,KAAKgmC,aAAc,EACnBhmC,KAAKimC,YAAa,EAClBjmC,KAAKkmC,eAAgB,EACrBlmC,KAAK8lC,YAAa,EACO,IAArB7lC,UAAUyB,aAAsB,GAAyB,IAArBzB,UAAUyB,OAAc,CAC9D,IAAMyhC,EAAQljC,UAAU,GACxBD,KAAK0jC,OAASP,CAChB,CACF,IAAC,CAdgC,GCEdmD,YAAIC,GACvB,SAAAD,IAAc,IAAA9jC,EAE4B,OAF5B3C,OAAAymC,GACZ9jC,EAAAC,EAAAzC,KAAAsmC,GACAA,EAAKxmC,aAAaC,MAAKyC,EAAOvC,WAAUuC,CAC1C,CAAC,OAAAK,EAAAyjC,EAAAC,GAAArmC,EAAAomC,EAAA,CAAA,CAAAnmC,IAAA,yBAAAC,MASD,WACE,IAAK,IAAIyf,EAAK7f,KAAKse,WAAWA,WAAW1Q,WAAYiS,EAAG/R,WAAa,CAEnE,GADW+R,EAAG7R,OACP0P,UAAUqoB,aAAc,OAAO,CACxC,CACA,OAAO,CACT,GAAC,CAAA5lC,IAAA,aAAAC,MACD,WACE,OAA0C,IAAnCJ,KAAK0jC,OAAOC,kBACrB,GAAC,CAAAxjC,IAAA,gBAAAC,MACD,WACE,OAAOJ,KAAKwmC,MACd,GAAC,CAAArmC,IAAA,QAAAC,MACD,SAAMk/B,GACJA,EAAIC,QAAQ,QAAUv/B,KAAKwmC,OAAS,SAAWxmC,KAAK0jC,OACtD,GAAC,CAAAvjC,IAAA,YAAAC,MACD,SAAUgmC,GAAI,GAAE,CAAAjmC,IAAA,wBAAAC,MAChB,SAAsBqmC,EAAQC,GAC5B,IAAIzE,EAAMvyB,EAASK,KAEnB,GADAkyB,EAAMjiC,KAAK0jC,OAAOhD,YAAYgG,IACzBD,EAAOj9B,OAAOk9B,GAAW,CAC5B,IAAMC,EAAOF,EAAO/F,YAAYgG,GAC5BzE,IAAQvyB,EAASG,WAAUoyB,EAAM0E,EACvC,CACA,OAAO1E,CACT,GAAC,CAAA9hC,IAAA,WAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,SAAiBoD,OAAOif,UAAU9jB,UAAU,MAAO6E,OAAOif,UAAU9jB,UAAU,IAM1F,OAAOyoB,EAAA4d,EAAA,WAAAtmC,KAAA,GAAeD,MAAMC,KAAMC,WALlC,IAAM2mC,EAAW3mC,UAAU,GAAI4mC,EAAa5mC,UAAU,GAClC,OAAhBD,KAAK0jC,OACP1jC,KAAK0jC,OAAS,IAAIxB,GAAM0E,EAAUC,GAC/B7mC,KAAK0jC,OAAO5B,YAAY8E,EAAUC,EAI3C,GAAC,CAAA1mC,IAAA,WAAAC,MACD,WACE,OAAOJ,KAAK+jC,MACd,GAAC,CAAA5jC,IAAA,aAAAC,MACD,WACE,GAAIH,UAAU,aAAcqmC,EAAM,CAChC,IAAMzhC,EAAI5E,UAAU,GACpBD,KAAKgkC,WAAWn/B,EAAE6+B,OACnB,MAAM,GAAIzjC,UAAU,aAAciiC,GAEjC,IADA,IAAMuE,EAASxmC,UAAU,GAChBqE,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1B,IAAM29B,EAAMjiC,KAAK8mC,sBAAsBL,EAAQniC,GAC/BtE,KAAK0jC,OAAOhD,YAAYp8B,KACxBoL,EAASK,MAAM/P,KAAK0jC,OAAO5B,YAAYx9B,EAAG29B,EAC5D,CAEJ,GAAC,CAAA9hC,IAAA,MAAAC,MACD,SAAI4H,GACFhI,KAAK+jC,OAAOgD,OAAO/+B,GACnBA,EAAEg/B,QAAQhnC,KACZ,GAAC,CAAAG,IAAA,mBAAAC,MACD,SAAiBwmC,GACf,GAAoB,OAAhB5mC,KAAK0jC,OAAiB,OAAO,KACjC,IAAIzB,EAAMvyB,EAASK,KACC,OAAhB/P,KAAK0jC,SAAiBzB,EAAMjiC,KAAK0jC,OAAOhD,YAAYkG,IACxD,IAAIrF,EAAS,KACb,OAAQU,GACR,KAAKvyB,EAASG,SACZ0xB,EAAS7xB,EAASI,SAClB,MACF,KAAKJ,EAASI,SAGd,QACEyxB,EAAS7xB,EAASG,SAGpB7P,KAAK0jC,OAAO5B,YAAY8E,EAAUrF,EACpC,IAAC,CAAA,CAAAphC,IAAA,eAAAC,MAjFD,WACEJ,KAAKwmC,OAAS,KACdxmC,KAAK+jC,OAAS,KACd,IAAM9lB,EAAQhe,UAAU,GAAIgnC,EAAQhnC,UAAU,GAC9CD,KAAKwmC,OAASvoB,EACdje,KAAK+jC,OAASkD,EACdjnC,KAAK0jC,OAAS,IAAIxB,GAAM,EAAGxyB,EAASK,KACtC,IAAC,EAZ+B81B,ICEbqB,YAASC,GAAA,SAAAD,IAAA,OAAArnC,OAAAqnC,GAAAzkC,EAAAzC,KAAAknC,EAAAjnC,UAAA,CAAA,OAAA4C,EAAAqkC,EAAAC,GAAAjnC,EAAAgnC,EAAA,EAAS12B,ICEvC,SAAS42B,GAAQ/8B,GACf,OAAa,MAALA,EAJI,EAIgBA,EAAEg9B,KAChC,CACA,SAASC,GAASj9B,GAChB,OAAa,MAALA,EAAY,KAAOA,EAAEk9B,MAC/B,CACA,SAASC,GAASn9B,EAAG7C,GACT,OAAN6C,IAAYA,EAAEg9B,MAAQ7/B,EAC5B,CACA,SAASigC,GAAOp9B,GACd,OAAa,MAALA,EAAY,KAAOA,EAAEs3B,IAC/B,CACA,SAAS+F,GAAQr9B,GACf,OAAa,MAALA,EAAY,KAAOA,EAAEu3B,KAC/B,CAEA,IAGqB+F,YAAOC,GAC1B,SAAAD,IAAc,IAAAnlC,EAGE,OAHF3C,OAAA8nC,IACZnlC,EAAAC,EAAAzC,KAAA2nC,IACKE,MAAQ,KACbrlC,EAAKslC,MAAQ,EAACtlC,CAChB,CAAC,OAAAK,EAAA8kC,EAAAC,GAAA1nC,EAAAynC,EAAA,CAAA,CAAAxnC,IAAA,MAAAC,MAED,SAAID,GAEF,IADA,IAAIkK,EAAIrK,KAAK6nC,MACA,OAANx9B,GAAY,CACjB,IAAM09B,EAAM5nC,EAAIgO,UAAU9D,EAAElK,KAC5B,GAAI4nC,EAAM,EACR19B,EAAIA,EAAEs3B,SACH,MAAIoG,EAAM,GAEV,OAAO19B,EAAEjK,MADZiK,EAAIA,EAAEu3B,KACW,CACrB,CACA,OAAO,IACT,GAAC,CAAAzhC,IAAA,MAAAC,MAED,SAAID,EAAKC,GACP,GAAmB,OAAfJ,KAAK6nC,MAgBP,OAfA7nC,KAAK6nC,MAAQ,CACX1nC,IAAKA,EACLC,MAAOA,EACPuhC,KAAM,KACNC,MAAO,KACP2F,OAAQ,KACRF,MAlDM,EAmDNW,SAAQ,WACN,OAAOhoC,KAAKI,KACb,EACD6nC,OAAM,WACJ,OAAOjoC,KAAKG,GACd,GAEFH,KAAK8nC,MAAQ,EACN,KAET,IAAwBP,EAAYQ,EAAhClxB,EAAI7W,KAAK6nC,MACb,GAGE,GAFAN,EAAS1wB,GACTkxB,EAAM5nC,EAAIgO,UAAU0I,EAAE1W,MACZ,EACR0W,EAAIA,EAAE8qB,SACD,MAAIoG,EAAM,GAEV,CACL,IAAMG,EAAWrxB,EAAEzW,MAEnB,OADAyW,EAAEzW,MAAQA,EACH8nC,CACT,CALErxB,EAAIA,EAAE+qB,KAKR,QACa,OAAN/qB,GACT,IAAM7O,EAAI,CACR7H,IAAKA,EACLwhC,KAAM,KACNC,MAAO,KACPxhC,MAAOA,EACPmnC,OAAQA,EACRF,MAjFQ,EAkFRW,SAAQ,WACN,OAAOhoC,KAAKI,KACb,EACD6nC,OAAM,WACJ,OAAOjoC,KAAKG,GACd,GAQF,OANI4nC,EAAM,EACRR,EAAO5F,KAAO35B,EACXu/B,EAAO3F,MAAQ55B,EAEpBhI,KAAKmoC,kBAAkBngC,GACvBhI,KAAK8nC,QACE,IACT,GAEA,CAAA3nC,IAAA,oBAAAC,MAGA,SAAkBsF,GAChB,IAAIC,EAEJ,IADAD,EAAE2hC,MAtGM,EAuGI,MAAL3hC,GAAaA,IAAM1F,KAAK6nC,OAvGvB,IAuGgCniC,EAAE6hC,OAAOF,OAC3CC,GAAS5hC,KAAO+hC,GAAOH,GAASA,GAAS5hC,KAxGvC,IA0GA0hC,GADJzhC,EAAI+hC,GAAQJ,GAASA,GAAS5hC,OAE5B8hC,GAASF,GAAS5hC,GA5Gd,GA6GJ8hC,GAAS7hC,EA7GL,GA8GJ6hC,GAASF,GAASA,GAAS5hC,IA7GzB,GA8GFA,EAAI4hC,GAASA,GAAS5hC,MAElBA,IAAMgiC,GAAQJ,GAAS5hC,MACzBA,EAAI4hC,GAAS5hC,GACb1F,KAAKooC,WAAW1iC,IAElB8hC,GAASF,GAAS5hC,GArHd,GAsHJ8hC,GAASF,GAASA,GAAS5hC,IArHzB,GAsHF1F,KAAKqoC,YAAYf,GAASA,GAAS5hC,MAtHjC,IA0HA0hC,GADJzhC,EAAI8hC,GAAOH,GAASA,GAAS5hC,OAE3B8hC,GAASF,GAAS5hC,GA5Hd,GA6HJ8hC,GAAS7hC,EA7HL,GA8HJ6hC,GAASF,GAASA,GAAS5hC,IA7HzB,GA8HFA,EAAI4hC,GAASA,GAAS5hC,MAElBA,IAAM+hC,GAAOH,GAAS5hC,MACxBA,EAAI4hC,GAAS5hC,GACb1F,KAAKqoC,YAAY3iC,IAEnB8hC,GAASF,GAAS5hC,GArId,GAsIJ8hC,GAASF,GAASA,GAAS5hC,IArIzB,GAsIF1F,KAAKooC,WAAWd,GAASA,GAAS5hC,MAIxC1F,KAAK6nC,MAAMR,MA3ID,CA4IZ,GAAC,CAAAlnC,IAAA,SAAAC,MAED,WACE,IAAMsf,EAAY,IAAIN,GAClB/U,EAAIrK,KAAKsoC,gBACb,GAAU,OAANj+B,EAEF,IADAqV,EAAUzO,IAAI5G,EAAEjK,OACsB,QAA9BiK,EAAIs9B,EAAQY,UAAUl+B,KAC5BqV,EAAUzO,IAAI5G,EAAEjK,OAEpB,OAAOsf,CACT,GAAC,CAAAvf,IAAA,WAAAC,MAED,WACE,IAAMuzB,EAAU,IAAItjB,EAChBhG,EAAIrK,KAAKsoC,gBACb,GAAU,OAANj+B,EAEF,IADAspB,EAAQ1iB,IAAI5G,GAC0B,QAA9BA,EAAIs9B,EAAQY,UAAUl+B,KAC5BspB,EAAQ1iB,IAAI5G,GAEhB,OAAOspB,CACT,GAEA,CAAAxzB,IAAA,aAAAC,MAGA,SAAWiK,GACT,GAAS,MAALA,EAAW,CACb,IAAMyL,EAAIzL,EAAEu3B,MACZv3B,EAAEu3B,MAAQ9rB,EAAE6rB,KACE,MAAV7rB,EAAE6rB,OACJ7rB,EAAE6rB,KAAK4F,OAASl9B,GAClByL,EAAEyxB,OAASl9B,EAAEk9B,OACG,MAAZl9B,EAAEk9B,OACJvnC,KAAK6nC,MAAQ/xB,EACNzL,EAAEk9B,OAAO5F,OAASt3B,EACzBA,EAAEk9B,OAAO5F,KAAO7rB,EAEhBzL,EAAEk9B,OAAO3F,MAAQ9rB,EACnBA,EAAE6rB,KAAOt3B,EACTA,EAAEk9B,OAASzxB,CACb,CACF,GAEA,CAAA3V,IAAA,cAAAC,MAGA,SAAYiK,GACV,GAAS,MAALA,EAAW,CACb,IAAMm+B,EAAIn+B,EAAEs3B,KACZt3B,EAAEs3B,KAAO6G,EAAE5G,MACI,MAAX4G,EAAE5G,QACJ4G,EAAE5G,MAAM2F,OAASl9B,GACnBm+B,EAAEjB,OAASl9B,EAAEk9B,OACG,MAAZl9B,EAAEk9B,OACJvnC,KAAK6nC,MAAQW,EACNn+B,EAAEk9B,OAAO3F,QAAUv3B,EAC1BA,EAAEk9B,OAAO3F,MAAQ4G,EAEjBn+B,EAAEk9B,OAAO5F,KAAO6G,EAClBA,EAAE5G,MAAQv3B,EACVA,EAAEk9B,OAASiB,CACb,CACF,GAEA,CAAAroC,IAAA,gBAAAC,MAGA,WACE,IAAIiK,EAAIrK,KAAK6nC,MACb,GAAS,MAALx9B,EACF,KAAiB,MAAVA,EAAEs3B,MAAct3B,EAAIA,EAAEs3B,KAC/B,OAAOt3B,CACT,GAEA,CAAAlK,IAAA,OAAAC,MAyBA,WACE,OAAOJ,KAAK8nC,KACd,GAAC,CAAA3nC,IAAA,cAAAC,MAED,SAAYD,GAEV,IADA,IAAIkK,EAAIrK,KAAK6nC,MACA,OAANx9B,GAAY,CACjB,IAAM09B,EAAM5nC,EAAIgO,UAAU9D,EAAElK,KAC5B,GAAI4nC,EAAM,EACR19B,EAAIA,EAAEs3B,SACH,MAAIoG,EAAM,GAEV,OAAO,EADV19B,EAAIA,EAAEu3B,KACQ,CAClB,CACA,OAAO,CACT,IAAC,CAAA,CAAAzhC,IAAA,YAAAC,MAnCD,SAAiByW,GACf,IAAIxM,EACJ,GAAU,OAANwM,EACF,OAAO,KACF,GAAgB,OAAZA,EAAE+qB,MAAgB,CAE3B,IADAv3B,EAAIwM,EAAE+qB,MACY,OAAXv3B,EAAEs3B,MACPt3B,EAAIA,EAAEs3B,KACR,OAAOt3B,CACT,CACEA,EAAIwM,EAAE0wB,OAEN,IADA,IAAIpuB,EAAKtC,EACI,OAANxM,GAAc8O,IAAO9O,EAAEu3B,OAC5BzoB,EAAK9O,EACLA,EAAIA,EAAEk9B,OAER,OAAOl9B,CAEX,IAAC,EAzNkC68B,ICrBhBuB,GAAO,WAGzB,OAAAvoC,GAFD,SAAAuoC,IAAc5oC,OAAA4oC,GACZA,EAAQ3oC,aAAaC,MAAMC,KAAMC,UACnC,GAAC,CAAA,CAAAE,IAAA,OAAAC,MAOD,SAAK6d,GACH,OAAOje,KAAK0oC,QAAQngC,IAAI0V,EAC1B,GAAC,CAAA9d,IAAA,UAAAC,MACD,WACE,GAAIH,UAAU,aAAcgH,EAAY,CACtC,IAAMgX,EAAQhe,UAAU,GACpBygB,EAAO1gB,KAAK0oC,QAAQngC,IAAI0V,GAK5B,OAJa,OAATyC,IACFA,EAAO1gB,KAAK2oC,SAASC,WAAW3qB,GAChCje,KAAK0oC,QAAQpT,IAAIrX,EAAOyC,IAEnBA,CACR,CAAM,GAAIzgB,UAAU,aAAcqmC,GAAM,CACvC,IAAMzhC,EAAI5E,UAAU,GACdygB,EAAO1gB,KAAK0oC,QAAQngC,IAAI1D,EAAEgY,iBAChC,OAAa,OAAT6D,GACF1gB,KAAK0oC,QAAQpT,IAAIzwB,EAAEgY,gBAAiBhY,GAC7BA,IAET6b,EAAKsjB,WAAWn/B,GACT6b,EACT,CACF,GAAC,CAAAvgB,IAAA,QAAAC,MACD,SAAMk/B,GACJ,IAAK,IAAIzf,EAAK7f,KAAK4N,WAAYiS,EAAG/R,WAAa,CACnC+R,EAAG7R,OACX66B,MAAMvJ,EACV,CACF,GAAC,CAAAn/B,IAAA,WAAAC,MACD,WACE,OAAOJ,KAAK0oC,QAAQp3B,SAAS1D,UAC/B,GAAC,CAAAzN,IAAA,SAAAC,MACD,WACE,OAAOJ,KAAK0oC,QAAQp3B,QACtB,GAAC,CAAAnR,IAAA,mBAAAC,MACD,SAAiBiiC,GAEf,IADA,IAAMyG,EAAW,IAAI1pB,GACZ9a,EAAItE,KAAK4N,WAAYtJ,EAAEwJ,WAAa,CAC3C,IAAM4S,EAAOpc,EAAE0J,OACX0S,EAAKF,WAAWkgB,YAAY2B,KAAe3yB,EAASG,UAAUi5B,EAAS73B,IAAIyP,EACjF,CACA,OAAOooB,CACT,GAAC,CAAA3oC,IAAA,MAAAC,MACD,SAAI4H,GACF,IAAMqC,EAAIrC,EAAE6U,gBACF7c,KAAK+oC,QAAQ1+B,GACrB4G,IAAIjJ,EACR,IAAC,CAAA,CAAA7H,IAAA,eAAAC,MArDD,WACEJ,KAAK0oC,QAAU,IAAIf,GACnB3nC,KAAK2oC,SAAW,KAChB,IAAMA,EAAW1oC,UAAU,GAC3BD,KAAK2oC,SAAWA,CAClB,IAAC,CATyB,GCHPK,GAAQ,WAAA,SAAAA,IAAAnpC,OAAAmpC,EAAA,CAAA,OAAA9oC,EAAA8oC,EAAA,KAAA,CAAA,CAAA7oC,IAAA,aAAAC,MAC3B,SAAkB6oC,GAChB,OAAOA,IAASD,EAASE,IAAMD,IAASD,EAASG,EACnD,GAAC,CAAAhpC,IAAA,aAAAC,MACD,SAAkBgpC,EAAOC,GACvB,OAAID,IAAUC,GAED,KADCD,EAAQC,EAAQ,GAAK,CAGrC,GAAC,CAAAlpC,IAAA,kBAAAC,MACD,SAAuBgpC,EAAOC,GAC5B,GAAID,IAAUC,EAAO,OAAOD,EAE5B,GAAa,KADCA,EAAQC,EAAQ,GAAK,EACnB,OAAQ,EACxB,IAAM39B,EAAM09B,EAAQC,EAAQD,EAAQC,EAEpC,OAAY,IAAR39B,GAAqB,KADb09B,EAAQC,EAAQD,EAAQC,GACD,EAC5B39B,CACT,GAAC,CAAAvL,IAAA,gBAAAC,MACD,SAAqB6oC,EAAMK,GACzB,OAAIA,IAAcN,EAASO,GAClBN,IAASD,EAASO,IAAMN,IAASD,EAASQ,GAE5CP,IAASK,GAAaL,IAASK,EAAY,CACpD,GAAC,CAAAnpC,IAAA,WAAAC,MACD,WACE,GAA4B,iBAAjBH,UAAU,IAA2C,iBAAjBA,UAAU,GAAiB,CACxE,IAAMiI,EAAKjI,UAAU,GAAIkI,EAAKlI,UAAU,GACxC,GAAW,IAAPiI,GAAqB,IAAPC,EAAY,MAAM,IAAInF,EAAyB,2CAA6CkF,EAAK,KAAOC,EAAK,MAC/H,OAAID,GAAM,EACJC,GAAM,EAAY6gC,EAASE,GAAgBF,EAASO,GAEtDphC,GAAM,EAAY6gC,EAASG,GAAgBH,EAASQ,EAE1D,CAAO,GAAIvpC,UAAU,aAAcgH,GAAchH,UAAU,aAAcgH,EAAY,CACnF,IAAMijB,EAAKjqB,UAAU,GAAIiL,EAAKjL,UAAU,GACxC,GAAIiL,EAAGxF,IAAMwkB,EAAGxkB,GAAKwF,EAAGvF,IAAMukB,EAAGvkB,EAAG,MAAM,IAAI3C,EAAyB,wDAA0DknB,GACjI,OAAIhf,EAAGxF,GAAKwkB,EAAGxkB,EACTwF,EAAGvF,GAAKukB,EAAGvkB,EAAUqjC,EAASE,GAAgBF,EAASO,GAEzDr+B,EAAGvF,GAAKukB,EAAGvkB,EAAUqjC,EAASG,GAAgBH,EAASQ,EAE7D,CACF,IAAC,CA3C0B,GA6C7BR,GAASE,GAAK,EACdF,GAASG,GAAK,EACdH,GAASQ,GAAK,EACdR,GAASO,GAAK,EC/CqB,IACdE,GAAO,WAC1B,SAAAA,IAAc5pC,OAAA4pC,GACZA,EAAQ3pC,aAAaC,MAAMC,KAAMC,UACnC,CAAC,OAAAC,EAAAupC,EAAA,CAAA,CAAAtpC,IAAA,mBAAAC,MAuBD,SAAiB4H,GACf,OAAIhI,KAAK0pC,MAAQ1hC,EAAE0hC,KAAO1pC,KAAK2pC,MAAQ3hC,EAAE2hC,IAAY,EACjD3pC,KAAK4pC,UAAY5hC,EAAE4hC,UAAkB,EACrC5pC,KAAK4pC,UAAY5hC,EAAE4hC,WAAmB,EACnCztB,GAAY5J,MAAMvK,EAAE6hC,IAAK7hC,EAAE8hC,IAAK9pC,KAAK8pC,IAC9C,GAAC,CAAA3pC,IAAA,QAAAC,MACD,WACE,OAAOJ,KAAK2pC,GACd,GAAC,CAAAxpC,IAAA,gBAAAC,MACD,WACE,OAAOJ,KAAK6pC,GACd,GAAC,CAAA1pC,IAAA,UAAAC,MACD,SAAQsgB,GACN1gB,KAAK+pC,MAAQrpB,CACf,GAAC,CAAAvgB,IAAA,QAAAC,MACD,SAAMk/B,GACJ,IAAM0K,EAAQnpC,KAAKopC,MAAMjqC,KAAK2pC,IAAK3pC,KAAK0pC,KAClCQ,EAAYlqC,KAAKoO,WAAW+7B,UAC5BC,EAAaF,EAAUG,YAAY,KACnC3nC,EAAOwnC,EAAU9xB,UAAUgyB,EAAa,GAC9C9K,EAAIuJ,MAAM,KAAOnmC,EAAO,KAAO1C,KAAK6pC,IAAM,MAAQ7pC,KAAK8pC,IAAM,IAAM9pC,KAAK4pC,UAAY,IAAMI,EAAQ,MAAQhqC,KAAK0jC,OACjH,GAAC,CAAAvjC,IAAA,YAAAC,MACD,SAAU4vB,GACR,IAAMhoB,EAAIgoB,EACV,OAAOhwB,KAAKsqC,iBAAiBtiC,EAC/B,GAAC,CAAA7H,IAAA,wBAAAC,MACD,WACE,OAAOJ,KAAK8pC,GACd,GAAC,CAAA3pC,IAAA,QAAAC,MACD,WACE,OAAOJ,KAAK0pC,GACd,GAAC,CAAAvpC,IAAA,WAAAC,MACD,WACE,OAAOJ,KAAK0jC,MACd,GAAC,CAAAvjC,IAAA,UAAAC,MACD,WACE,OAAOJ,KAAKuqC,KACd,GAAC,CAAApqC,IAAA,cAAAC,MACD,WACE,OAAOJ,KAAK4pC,SACd,GAAC,CAAAzpC,IAAA,UAAAC,MACD,WACE,OAAOJ,KAAK+pC,KACd,GAAC,CAAA5pC,IAAA,WAAAC,MACD,WACE,IAAM4pC,EAAQnpC,KAAKopC,MAAMjqC,KAAK2pC,IAAK3pC,KAAK0pC,KAClCQ,EAAYlqC,KAAKoO,WAAW+7B,UAC5BC,EAAaF,EAAUG,YAAY,KAEzC,MAAO,KADMH,EAAU9xB,UAAUgyB,EAAa,GACzB,KAAOpqC,KAAK6pC,IAAM,MAAQ7pC,KAAK8pC,IAAM,IAAM9pC,KAAK4pC,UAAY,IAAMI,EAAQ,MAAQhqC,KAAK0jC,MAC9G,GAAC,CAAAvjC,IAAA,eAAAC,MACD,SAAaoqC,GAAkB,GAAE,CAAArqC,IAAA,OAAAC,MACjC,SAAK8pB,EAAIhf,GACPlL,KAAK6pC,IAAM3f,EACXlqB,KAAK8pC,IAAM5+B,EACXlL,KAAK0pC,IAAMx+B,EAAGxF,EAAIwkB,EAAGxkB,EACrB1F,KAAK2pC,IAAMz+B,EAAGvF,EAAIukB,EAAGvkB,EACrB3F,KAAK4pC,UAAYZ,GAASyB,SAASzqC,KAAK0pC,IAAK1pC,KAAK2pC,KAClDrjC,EAAOG,SAAsB,IAAbzG,KAAK0pC,KAA0B,IAAb1pC,KAAK2pC,KAAY,yCACrD,GAAC,CAAAxpC,IAAA,cAAAoI,IACD,WACE,MAAO,CAACnF,EACV,IAAC,CAAA,CAAAjD,IAAA,eAAAC,MApFD,WASE,GARAJ,KAAKuqC,MAAQ,KACbvqC,KAAK0jC,OAAS,KACd1jC,KAAK+pC,MAAQ,KACb/pC,KAAK6pC,IAAM,KACX7pC,KAAK8pC,IAAM,KACX9pC,KAAK0pC,IAAM,KACX1pC,KAAK2pC,IAAM,KACX3pC,KAAK4pC,UAAY,KACQ,IAArB3pC,UAAUyB,OAAc,CAC1B,IAAM6iC,EAAOtkC,UAAU,GACvBD,KAAKuqC,MAAQhG,CACf,MAAO,GAAyB,IAArBtkC,UAAUyB,OAAc,CACjC,IAAM6iC,EAAOtkC,UAAU,GAAIiqB,EAAKjqB,UAAU,GAAIiL,EAAKjL,UAAU,GAC7DwpC,EAAQ3pC,aAAauG,KAAKrG,KAAMukC,EAAMra,EAAIhf,EAAI,KAChD,MAAO,GAAyB,IAArBjL,UAAUyB,OAAc,CACjC,IAAM6iC,EAAOtkC,UAAU,GAAIiqB,EAAKjqB,UAAU,GAAIiL,EAAKjL,UAAU,GAAIkjC,EAAQljC,UAAU,GACnFwpC,EAAQ3pC,aAAauG,KAAKrG,KAAMukC,GAChCvkC,KAAK4K,KAAKsf,EAAIhf,GACdlL,KAAK0jC,OAASP,CAChB,CACF,IAAC,CAzByB,GCCPuH,YAAYC,GAC/B,SAAAD,IAAc,IAAAloC,EAEoC,OAFpC3C,OAAA6qC,GACZloC,EAAAC,EAAAzC,KAAA0qC,GACAA,EAAa5qC,aAAaC,MAAKyC,EAAOvC,WAAUuC,CAClD,CAAC,OAAAK,EAAA6nC,EAAAC,GAAAzqC,EAAAwqC,EAAA,CAAA,CAAAvqC,IAAA,aAAAC,MA0BD,WACE,OAAOJ,KAAK4qC,QACd,GAAC,CAAAzqC,IAAA,WAAAC,MACD,SAASyR,GACP,OAAO7R,KAAK6qC,OAAOh5B,EACrB,GAAC,CAAA1R,IAAA,aAAAC,MACD,SAAW8f,GACTlgB,KAAK8lC,WAAa5lB,CACpB,GAAC,CAAA/f,IAAA,uBAAAC,MACD,WACEJ,KAAK0jC,OAAS,IAAIxB,GAAMliC,KAAKuqC,MAAM/pB,YAC9BxgB,KAAK8qC,YAAY9qC,KAAK0jC,OAAOhB,MACpC,GAAC,CAAAviC,IAAA,UAAAC,MACD,WACE,OAAOJ,KAAK+qC,KACd,GAAC,CAAA5qC,IAAA,WAAAC,MACD,SAASyR,EAAUm5B,GACjB,IAA+B,MAA3BhrC,KAAK6qC,OAAOh5B,IACV7R,KAAK6qC,OAAOh5B,KAAcm5B,EAAU,MAAM,IAAIlsB,GAAkB,+BAAgC9e,KAAK6c,iBAE3G7c,KAAK6qC,OAAOh5B,GAAYm5B,CAC1B,GAAC,CAAA7qC,IAAA,qBAAAC,MACD,WAEE,IADA,IAAI0gB,GAAqB,EAChBxc,EAAI,EAAGA,EAAI,EAAGA,IACftE,KAAK0jC,OAAOf,OAAOr+B,IAAMtE,KAAK0jC,OAAOhD,YAAYp8B,EAAGsN,EAASE,QAAUpC,EAASI,UAAY9P,KAAK0jC,OAAOhD,YAAYp8B,EAAGsN,EAASG,SAAWrC,EAASI,WACxJgR,GAAqB,GAGzB,OAAOA,CACT,GAAC,CAAA3gB,IAAA,aAAAC,MACD,SAAW6qC,GACTjrC,KAAK4qC,SAAWK,CAClB,GAAC,CAAA9qC,IAAA,QAAAC,MACD,SAAMk/B,GACJ5W,EAAAgiB,EAAYrkC,QAAAA,KAAAA,GAAAA,KAAKrG,KAAMs/B,GACvBA,EAAIuJ,MAAM,IAAM7oC,KAAK6qC,OAAOj5B,EAASE,MAAQ,IAAM9R,KAAK6qC,OAAOj5B,EAASG,QACxEutB,EAAIuJ,MAAM,KAAO7oC,KAAKkrC,gBAAkB,KACpClrC,KAAKgmC,aAAa1G,EAAIuJ,MAAM,YAClC,GAAC,CAAA1oC,IAAA,iBAAAC,MACD,SAAe+qC,GACbnrC,KAAKorC,aAAeD,CACtB,GAAC,CAAAhrC,IAAA,aAAAC,MACD,WACE,IAAMmiC,EAASviC,KAAK0jC,OAAOnB,OAAO,IAAMviC,KAAK0jC,OAAOnB,OAAO,GACrD8I,GAAqBrrC,KAAK0jC,OAAOf,OAAO,IAAM3iC,KAAK0jC,OAAOZ,kBAAkB,EAAGpzB,EAASE,UACxF07B,GAAqBtrC,KAAK0jC,OAAOf,OAAO,IAAM3iC,KAAK0jC,OAAOZ,kBAAkB,EAAGpzB,EAASE,UAC9F,OAAO2yB,GAAU8I,GAAqBC,CACxC,GAAC,CAAAnrC,IAAA,cAAAC,MACD,SAAYmrC,GACVvrC,KAAKwrC,UAAYD,CACnB,GAAC,CAAAprC,IAAA,iBAAAC,MACD,WACE,OAAOJ,KAAKorC,YACd,GAAC,CAAAjrC,IAAA,gBAAAC,MACD,WACE,IAAIqrC,EAAazrC,KAAKuqC,MAAMW,gBAE5B,OADKlrC,KAAK8qC,aAAYW,GAAcA,GAC7BA,CACT,GAAC,CAAAtrC,IAAA,cAAAC,MACD,SAAY2lC,GACV/lC,KAAKgmC,YAAcD,CACrB,GAAC,CAAA5lC,IAAA,SAAAC,MACD,WACE,OAAOJ,KAAK0rC,IACd,GAAC,CAAAvrC,IAAA,YAAAC,MACD,WACE,OAAOJ,KAAK8qC,UACd,GAAC,CAAA3qC,IAAA,UAAAC,MACD,WACE,OAAOJ,KAAKuqC,KACd,GAAC,CAAApqC,IAAA,YAAAC,MACD,SAAUk/B,GACRt/B,KAAK6oC,MAAMvJ,GACXA,EAAIuJ,MAAM,KACN7oC,KAAK8qC,WAAY9qC,KAAKuqC,MAAM1B,MAAMvJ,GAAWt/B,KAAKuqC,MAAMoB,aAAarM,EAC3E,GAAC,CAAAn/B,IAAA,SAAAC,MACD,SAAOgd,GACLpd,KAAK0rC,KAAOtuB,CACd,GAAC,CAAAjd,IAAA,iBAAAC,MACD,SAAe8f,GACblgB,KAAK+f,WAAWG,GAChBlgB,KAAK0rC,KAAK3rB,WAAWG,EACvB,GAAC,CAAA/f,IAAA,gBAAAC,MACD,SAAcyR,EAAU+5B,GACtB,IAAIH,EAAazrC,KAAK0d,UAAUwtB,gBAC3BlrC,KAAK8qC,aAAYW,GAAcA,GACpC,IAAII,EAAkB,EAClBh6B,IAAaD,EAASE,OAAM+5B,GAAmB,GACnD,IAAMC,EAAcl6B,EAASm6B,SAASl6B,GAEhCm6B,EAAgBJ,EADRH,EAAaI,EAE3B7rC,KAAK6hB,SAAShQ,EAAU+5B,GACxB5rC,KAAK6hB,SAASiqB,EAAaE,EAC7B,GAAC,CAAA7rC,IAAA,cAAAC,MACD,WACE,OAAOJ,KAAKwrC,SACd,GAAC,CAAArrC,IAAA,aAAAC,MACD,WACE,OAAOJ,KAAKgmC,WACd,GAAC,CAAA7lC,IAAA,UAAAC,MACD,SAAQ4N,GACNhO,KAAK+qC,MAAQ/8B,CACf,GAAC,CAAA7N,IAAA,YAAAC,MACD,WACE,OAAOJ,KAAK8lC,UACd,IAAC,CAAA,CAAA3lC,IAAA,eAAAC,MAnID,WACEJ,KAAK8qC,WAAa,KAClB9qC,KAAKgmC,aAAc,EACnBhmC,KAAK8lC,YAAa,EAClB9lC,KAAK0rC,KAAO,KACZ1rC,KAAK+qC,MAAQ,KACb/qC,KAAK4qC,SAAW,KAChB5qC,KAAKwrC,UAAY,KACjBxrC,KAAKorC,aAAe,KACpBprC,KAAK6qC,OAAS,CAAC,GAAI,KAAM,KACzB,IAAMtG,EAAOtkC,UAAU,GAAIue,EAAYve,UAAU,GAGjD,GAFAwpC,GAAQ3pC,aAAauG,KAAKrG,KAAMukC,GAChCvkC,KAAK8qC,WAAatsB,EACdA,EACFxe,KAAK4K,KAAK25B,EAAK1nB,cAAc,GAAI0nB,EAAK1nB,cAAc,QAC/C,CACL,IAAMhY,EAAI0/B,EAAK1b,eAAiB,EAChC7oB,KAAK4K,KAAK25B,EAAK1nB,cAAchY,GAAI0/B,EAAK1nB,cAAchY,EAAI,GAC1D,CACA7E,KAAKisC,sBACP,GAAC,CAAA9rC,IAAA,cAAAC,MACD,SAAmB8rC,EAAcC,GAC/B,OAAID,IAAiBx8B,EAASE,UAAYu8B,IAAiBz8B,EAASI,SAAiB,EAAYo8B,IAAiBx8B,EAASI,UAAYq8B,IAAiBz8B,EAASE,UAAkB,EAC5K,CACT,IAAC,EA7BuC65B,ICJrB2C,GAAW,WAAA,OAAAlsC,GAAA,SAAAksC,IAAAvsC,OAAAusC,EAAA,GAAA,CAAA,CAAAjsC,IAAA,aAAAC,MAC9B,SAAW6d,GACT,OAAO,IAAIqoB,GAAKroB,EAAO,KACzB,IAAC,CAH6B,GCSXouB,GAAW,WAG7B,OAAAnsC,GAFD,SAAAmsC,IAAcxsC,OAAAwsC,GACZA,EAAYvsC,aAAaC,MAAMC,KAAMC,UACvC,GAAC,CAAA,CAAAE,IAAA,aAAAC,MAkBD,SAAWk/B,GACTA,EAAIC,QAAQ,UACZ,IAAK,IAAIj7B,EAAI,EAAGA,EAAItE,KAAK+jC,OAAO5yB,OAAQ7M,IAAK,CAC3Cg7B,EAAIC,QAAQ,QAAUj7B,EAAI,KAC1B,IAAM0D,EAAIhI,KAAK+jC,OAAOx7B,IAAIjE,GAC1B0D,EAAE6gC,MAAMvJ,GACRt3B,EAAEskC,OAAOzD,MAAMvJ,EACjB,CACF,GAAC,CAAAn/B,IAAA,OAAAC,MACD,SAAK6d,GACH,OAAOje,KAAK8hB,OAAOyqB,KAAKtuB,EAC1B,GAAC,CAAA9d,IAAA,UAAAC,MACD,WACE,GAAIH,UAAU,aAAcqmC,GAAM,CAChC,IAAM5lB,EAAOzgB,UAAU,GACvB,OAAOD,KAAK8hB,OAAOinB,QAAQroB,EAC5B,CAAM,GAAIzgB,UAAU,aAAcgH,EAAY,CAC7C,IAAMgX,EAAQhe,UAAU,GACxB,OAAOD,KAAK8hB,OAAOinB,QAAQ9qB,EAC7B,CACF,GAAC,CAAA9d,IAAA,kBAAAC,MACD,WACE,OAAOJ,KAAK8hB,OAAOlU,UACrB,GAAC,CAAAzN,IAAA,0BAAAC,MACD,WACE,IAAK,IAAIosC,EAASxsC,KAAK8hB,OAAOlU,WAAY4+B,EAAO1+B,WAAa,CAC/C0+B,EAAOx+B,OACfsQ,WAAWmuB,yBAClB,CACF,GAAC,CAAAtsC,IAAA,eAAAC,MACD,SAAa2H,GACXob,GAAOmc,IAAIC,QAAQx3B,EACrB,GAAC,CAAA5H,IAAA,iBAAAC,MACD,SAAeiiC,EAAWpkB,GACxB,IAAMyC,EAAO1gB,KAAK8hB,OAAOyqB,KAAKtuB,GAC9B,GAAa,OAATyC,EAAe,OAAO,EAC1B,IAAMyiB,EAAQziB,EAAKF,WACnB,OAAc,OAAV2iB,GAAkBA,EAAMzC,YAAY2B,KAAe3yB,EAASG,QAElE,GAAC,CAAA1P,IAAA,uBAAAC,MACD,WACE,IAAK,IAAIosC,EAASxsC,KAAK8hB,OAAOlU,WAAY4+B,EAAO1+B,WAAa,CAC/C0+B,EAAOx+B,OACfsQ,WAAWouB,sBAClB,CACF,GAAC,CAAAvsC,IAAA,uBAAAC,MACD,SAAqB8pB,EAAIhf,EAAIyhC,EAAKC,GAChC,QAAK1iB,EAAGtjB,OAAO+lC,KACXxwB,GAAY5J,MAAM2X,EAAIhf,EAAI0hC,KAASzwB,GAAYa,WAAagsB,GAASyB,SAASvgB,EAAIhf,KAAQ89B,GAASyB,SAASkC,EAAKC,GAEvH,GAAC,CAAAzsC,IAAA,cAAAC,MACD,WACE,OAAOJ,KAAK6sC,YACd,GAAC,CAAA1sC,IAAA,aAAAC,MACD,SAAW2H,GACTob,GAAOmc,IAAIuJ,MAAM9gC,EACnB,GAAC,CAAA5H,IAAA,kBAAAC,MACD,WACE,OAAOJ,KAAK+jC,OAAOn2B,UACrB,GAAC,CAAAzN,IAAA,0BAAAC,MACD,SAAwB8pB,EAAIhf,GAC1B,IAAK,IAAI5G,EAAI,EAAGA,EAAItE,KAAK+jC,OAAO5yB,OAAQ7M,IAAK,CAC3C,IAAM0D,EAAIhI,KAAK+jC,OAAOx7B,IAAIjE,GACpBwoC,EAAS9kC,EAAE2V,iBACjB,GAAI3d,KAAK+sC,qBAAqB7iB,EAAIhf,EAAI4hC,EAAO,GAAIA,EAAO,IAAK,OAAO9kC,EACpE,GAAIhI,KAAK+sC,qBAAqB7iB,EAAIhf,EAAI4hC,EAAOA,EAAOprC,OAAS,GAAIorC,EAAOA,EAAOprC,OAAS,IAAK,OAAOsG,CACtG,CACA,OAAO,IACT,GAAC,CAAA7H,IAAA,aAAAC,MACD,SAAW4H,GACThI,KAAK+jC,OAAO9yB,IAAIjJ,EAClB,GAAC,CAAA7H,IAAA,cAAAC,MACD,SAAY4H,GACV,IAAK,IAAI1D,EAAItE,KAAKgtC,cAAcp/B,WAAYtJ,EAAEwJ,WAAa,CACzD,IAAMm/B,EAAK3oC,EAAE0J,OACb,GAAIi/B,EAAGvvB,YAAc1V,EAAG,OAAOilC,CACjC,CACA,OAAO,IACT,GAAC,CAAA9sC,IAAA,WAAAC,MACD,SAAS8sC,GACP,IAAK,IAAIrtB,EAAKqtB,EAAWt/B,WAAYiS,EAAG/R,WAAa,CACnD,IAAM9F,EAAI6X,EAAG7R,OACbhO,KAAK+jC,OAAO9yB,IAAIjJ,GAChB,IAAMmlC,EAAM,IAAIzC,GAAa1iC,GAAG,GAC1BolC,EAAM,IAAI1C,GAAa1iC,GAAG,GAChCmlC,EAAIE,OAAOD,GACXA,EAAIC,OAAOF,GACXntC,KAAKiR,IAAIk8B,GACTntC,KAAKiR,IAAIm8B,EACX,CACF,GAAC,CAAAjtC,IAAA,MAAAC,MACD,SAAI4H,GACFhI,KAAK8hB,OAAO7Q,IAAIjJ,GAChBhI,KAAK6sC,aAAa57B,IAAIjJ,EACxB,GAAC,CAAA7H,IAAA,WAAAC,MACD,WACE,OAAOJ,KAAK8hB,OAAOxQ,QACrB,GAAC,CAAAnR,IAAA,WAAAC,MACD,SAAS8pB,EAAIhf,GACX,IAAK,IAAI5G,EAAI,EAAGA,EAAItE,KAAK+jC,OAAO5yB,OAAQ7M,IAAK,CAC3C,IAAM0D,EAAIhI,KAAK+jC,OAAOx7B,IAAIjE,GACpBwoC,EAAS9kC,EAAE2V,iBACjB,GAAIuM,EAAGtjB,OAAOkmC,EAAO,KAAO5hC,EAAGtE,OAAOkmC,EAAO,IAAK,OAAO9kC,CAC3D,CACA,OAAO,IACT,IAAC,CAAA,CAAA7H,IAAA,eAAAC,MA1HD,WAIE,GAHAJ,KAAK+jC,OAAS,IAAI3kB,GAClBpf,KAAK8hB,OAAS,KACd9hB,KAAK6sC,aAAe,IAAIztB,GACC,IAArBnf,UAAUyB,OACZ1B,KAAK8hB,OAAS,IAAI2mB,GAAQ,IAAI2D,SACzB,GAAyB,IAArBnsC,UAAUyB,OAAc,CACjC,IAAMinC,EAAW1oC,UAAU,GAC3BD,KAAK8hB,OAAS,IAAI2mB,GAAQE,EAC5B,CACF,GAAC,CAAAxoC,IAAA,0BAAAC,MACD,SAA+BktC,GAC7B,IAAK,IAAId,EAASc,EAAM1/B,WAAY4+B,EAAO1+B,WAAa,CACzC0+B,EAAOx+B,OACfsQ,WAAWmuB,yBAClB,CACF,IAAC,CApB6B,GCHXc,GAAc,WACjC,SAAAA,IAAc1tC,OAAA0tC,GACZA,EAAeztC,aAAaC,MAAMC,KAAMC,UAC1C,CAAC,OAAAC,EAAAqtC,EAAA,CAAA,CAAAptC,IAAA,qBAAAC,MA+BD,SAAmBotC,EAAWC,EAAWC,GACvC,IAAK,IAAI7tB,EAAK2tB,EAAU5/B,WAAYiS,EAAG/R,WAAa,CAClD,IAAMu3B,EAAKxlB,EAAG7R,OACVq3B,EAAGsI,SACLD,EAAaz8B,IAAIo0B,GAEjBoI,EAAUx8B,IAAIo0B,EAElB,CACF,GAAC,CAAAllC,IAAA,kBAAAC,MACD,SAAgBqtC,GAEd,IADA,IAAMG,EAAiB,IAAIxuB,GAClBS,EAAK4tB,EAAU7/B,WAAYiS,EAAG/R,WAAa,CAClD,IACM2e,EADK5M,EAAG7R,OACE6/B,UAAU7tC,KAAKwjC,kBAC/BoK,EAAe38B,IAAIwb,EACrB,CACA,OAAOmhB,CACT,GAAC,CAAAztC,IAAA,iBAAAC,MACD,SAAeqtC,EAAWC,GACxB,IAAK,IAAI7tB,EAAK6tB,EAAa9/B,WAAYiS,EAAG/R,WAAa,CACrD,IAAMggC,EAAOjuB,EAAG7R,OAChB,GAAwB,OAApB8/B,EAAKC,WAAqB,CAC5B,IAAM/hB,EAAQuhB,EAAeS,uBAAuBF,EAAML,GAC1D,GAAc,OAAVzhB,EAAgB,MAAM,IAAIlN,GAAkB,mCAAoCgvB,EAAKjxB,cAAc,IACvGixB,EAAKG,SAASjiB,EAChB,CACF,CACF,GAAC,CAAA7rB,IAAA,wBAAAC,MACD,SAAsB8tC,EAAcT,EAAWC,GAE7C,IADA,IAAMF,EAAY,IAAIpuB,GACbS,EAAKquB,EAAatgC,WAAYiS,EAAG/R,WAAa,CACrD,IAAMu3B,EAAKxlB,EAAG7R,OACd,GAAIq3B,EAAG8I,mBAAqB,EAAG,CAC7B9I,EAAG+I,uCACH,IAAM3I,EAAeJ,EAAGgJ,oBAClBriB,EAAQhsB,KAAKsuC,UAAU7I,GACf,OAAVzZ,GACFhsB,KAAKuuC,kBAAkBviB,EAAOyZ,GAC9BgI,EAAUx8B,IAAI+a,IAEd0hB,EAAaj9B,OAAOg1B,EAExB,MACE+H,EAAUv8B,IAAIo0B,EAElB,CACA,OAAOmI,CACT,GAAC,CAAArtC,IAAA,wBAAAC,MACD,SAAsBouC,GAEpB,IADA,IAAMN,EAAe,IAAI9uB,GAChBS,EAAK2uB,EAAS5gC,WAAYiS,EAAG/R,WAAa,CACjD,IAAMsP,EAAKyC,EAAG7R,OACd,GAAIoP,EAAG2oB,cAAgB3oB,EAAGoD,WAAWmiB,UACV,OAArBvlB,EAAG0mB,cAAwB,CAC7B,IAAMuB,EAAK,IAAIG,GAAgBpoB,EAAIpd,KAAKwjC,kBACxC0K,EAAaj9B,IAAIo0B,GACjBA,EAAGtkB,aACL,CAEJ,CACA,OAAOmtB,CACT,GAAC,CAAA/tC,IAAA,oBAAAC,MACD,SAAkB4rB,EAAOyZ,GACvB,IAAK,IAAI5lB,EAAK4lB,EAAa73B,WAAYiS,EAAG/R,WAAa,CACrD,IAAMu3B,EAAKxlB,EAAG7R,OACVq3B,EAAGsI,UACLtI,EAAG4I,SAASjiB,EAEhB,CACF,GAAC,CAAA7rB,IAAA,cAAAC,MACD,WAEE,OADuBJ,KAAKyuC,gBAAgBzuC,KAAK0uC,WAEnD,GAAC,CAAAvuC,IAAA,YAAAC,MACD,SAAUqlC,GAGR,IAFA,IAAIkJ,EAAa,EACb3iB,EAAQ,KACHnM,EAAK4lB,EAAa73B,WAAYiS,EAAG/R,WAAa,CACrD,IAAMu3B,EAAKxlB,EAAG7R,OACTq3B,EAAGsI,WACN3hB,EAAQqZ,EACRsJ,IAEJ,CAEA,OADAroC,EAAOG,OAAOkoC,GAAc,EAAG,4CACxB3iB,CACT,GAAC,CAAA7rB,IAAA,MAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OAAc,CAC1B,IAAM+f,EAAQxhB,UAAU,GACxBD,KAAKiR,IAAIwQ,EAAMurB,cAAevrB,EAAMmtB,WACtC,MAAO,GAAyB,IAArB3uC,UAAUyB,OAAc,CACjC,IAAM8sC,EAAWvuC,UAAU,GAAIqtC,EAAQrtC,UAAU,GACjDosC,GAAYI,wBAAwBa,GACpC,IAAMY,EAAeluC,KAAK6uC,sBAAsBL,GAC1Cd,EAAe,IAAItuB,GACnBouB,EAAYxtC,KAAK8uC,sBAAsBZ,EAAcluC,KAAK0uC,WAAYhB,GAC5E1tC,KAAK+uC,mBAAmBvB,EAAWxtC,KAAK0uC,WAAYhB,GACpD1tC,KAAKgvC,eAAehvC,KAAK0uC,WAAYhB,EACvC,CACF,IAAC,CAAA,CAAAvtC,IAAA,eAAAC,MAnID,WACEJ,KAAKwjC,iBAAmB,KACxBxjC,KAAK0uC,WAAa,IAAItvB,GACtB,IAAMkd,EAAkBr8B,UAAU,GAClCD,KAAKwjC,iBAAmBlH,CAC1B,GAAC,CAAAn8B,IAAA,yBAAAC,MACD,SAA8B6uC,EAAQxB,GAMpC,IALA,IAAMyB,EAAWD,EAAOvK,gBAClByK,EAAUD,EAASniC,sBACrByjB,EAAS0e,EAAStmB,eAAe,GACjCwmB,EAAW,KACXC,EAAc,KACTxvB,EAAK4tB,EAAU7/B,WAAYiS,EAAG/R,WAAa,CAClD,IAAMwhC,EAAWzvB,EAAG7R,OACduhC,EAAeD,EAAS5K,gBACxB8K,EAAcD,EAAaxiC,sBACjC,IAAIyiC,EAAY5oC,OAAOuoC,IAClBK,EAAYhuB,SAAS2tB,GAA1B,CACA3e,EAASF,GAAiBmf,YAAYP,EAASvxB,iBAAkB4xB,EAAa5xB,kBAC9E,IAAI+xB,GAAc,EACd5O,GAAc6D,SAASnU,EAAQ+e,EAAa5xB,oBAAmB+xB,GAAc,GAC7EA,IACe,OAAbN,GAAqBC,EAAY7tB,SAASguB,MAE5CH,GADAD,EAAWE,GACY5K,gBAAgB33B,sBAPP,CAUtC,CACA,OAAOqiC,CACT,IAAC,CAjCgC,GCPdO,GAAS,WAAA,OAAAzvC,GAAA,SAAAyvC,IAAA9vC,OAAA8vC,EAAA,GAAA,CAAA,CAAAxvC,IAAA,YAAAC,MAC5B,WAAY,IAAE,CADc,GCETwvC,GAAa,WAG/B,OAAA1vC,GAFD,SAAA0vC,IAAc/vC,OAAA+vC,GACZA,EAAc9vC,aAAaC,MAAMC,KAAMC,UACzC,GAAC,CAAA,CAAAE,IAAA,UAAAC,MAQD,WACE,OAAOJ,KAAK6vC,KACd,GAAC,CAAA1vC,IAAA,YAAAC,MACD,WACE,OAAOJ,KAAK8vC,OACd,GAAC,CAAA3vC,IAAA,cAAAoI,IACD,WACE,MAAO,CAAConC,GAAWrsC,EACrB,IAAC,CAAA,CAAAnD,IAAA,eAAAC,MAfD,WACEJ,KAAK8vC,QAAU,KACf9vC,KAAK6vC,MAAQ,KACb,IAAME,EAAS9vC,UAAU,GAAI+vC,EAAO/vC,UAAU,GAC9CD,KAAK8vC,QAAUC,EACf/vC,KAAK6vC,MAAQG,CACf,IAAC,CAV+B,GCDbC,GAAa,WAG/B,OAAA/vC,GAFD,SAAA+vC,IAAcpwC,OAAAowC,GACZA,EAAcnwC,aAAaC,MAAMC,KAAMC,UACzC,GAAC,CAAA,CAAAE,IAAA,OAAAC,MAQD,WACE,GAAIJ,KAAKwM,UAAW,OAAO,KAC3B,IAAM0jC,EAAUlwC,KAAKmwC,OAAO5nC,IAAI,GAIhC,OAHAvI,KAAKmwC,OAAOx/B,IAAI,EAAG3Q,KAAKmwC,OAAO5nC,IAAIvI,KAAKowC,QACxCpwC,KAAKowC,OAAS,EACdpwC,KAAKqwC,QAAQ,GACNH,CACT,GAAC,CAAA/vC,IAAA,OAAAC,MACD,WACE,OAAOJ,KAAKowC,KACd,GAAC,CAAAjwC,IAAA,UAAAC,MACD,SAAQ0tC,GAGN,IAFA,IAAIwC,EAAQ,KACN1pB,EAAM5mB,KAAKmwC,OAAO5nC,IAAIulC,GACd,EAAPA,GAAY9tC,KAAKowC,SACtBE,EAAe,EAAPxC,KACM9tC,KAAKowC,OAASpwC,KAAKmwC,OAAO5nC,IAAI+nC,EAAQ,GAAGniC,UAAUnO,KAAKmwC,OAAO5nC,IAAI+nC,IAAU,GAAGA,IAC1FtwC,KAAKmwC,OAAO5nC,IAAI+nC,GAAOniC,UAAUyY,GAAO,GAHfknB,EAAOwC,EAGWtwC,KAAKmwC,OAAOx/B,IAAIm9B,EAAM9tC,KAAKmwC,OAAO5nC,IAAI+nC,IAEvFtwC,KAAKmwC,OAAOx/B,IAAIm9B,EAAMlnB,EACxB,GAAC,CAAAzmB,IAAA,QAAAC,MACD,WACEJ,KAAKowC,MAAQ,EACbpwC,KAAKmwC,OAAOI,OACd,GAAC,CAAApwC,IAAA,OAAAC,MACD,WACE,OAAIJ,KAAKwM,UAAkB,KACXxM,KAAKmwC,OAAO5nC,IAAI,EAElC,GAAC,CAAApI,IAAA,UAAAC,MACD,WACE,OAAsB,IAAfJ,KAAKowC,KACd,GAAC,CAAAjwC,IAAA,MAAAC,MACD,SAAIsF,GACF1F,KAAKmwC,OAAOl/B,IAAI,MAChBjR,KAAKowC,OAAS,EACd,IAAItC,EAAO9tC,KAAKowC,MAEhB,IADApwC,KAAKmwC,OAAOx/B,IAAI,EAAGjL,GACZA,EAAEyI,UAAUnO,KAAKmwC,OAAO5nC,IAAI1H,KAAKyT,MAAMw5B,EAAO,KAAO,EAAGA,GAAQ,EACrE9tC,KAAKmwC,OAAOx/B,IAAIm9B,EAAM9tC,KAAKmwC,OAAO5nC,IAAI1H,KAAKyT,MAAMw5B,EAAO,KAE1D9tC,KAAKmwC,OAAOx/B,IAAIm9B,EAAMpoC,EACxB,IAAC,CAAA,CAAAvF,IAAA,eAAAC,MAjDD,WACEJ,KAAKowC,MAAQ,KACbpwC,KAAKmwC,OAAS,KACdnwC,KAAKowC,MAAQ,EACbpwC,KAAKmwC,OAAS,IAAI/wB,GAClBpf,KAAKmwC,OAAOl/B,IAAI,KAClB,IAAC,CAV+B,GCDbu/B,GAAY,WAAA,OAAAtwC,GAAA,SAAAswC,IAAA3wC,OAAA2wC,EAAA,GAAA,CAAA,CAAArwC,IAAA,SAAAC,MAC/B,SAAOqwC,EAAST,GAAM,GAAE,CAAA7vC,IAAA,SAAAC,MACxB,SAAOqwC,EAAST,GAAM,GAAE,CAAA7vC,IAAA,QAAAC,MACxB,WAMA,IAAC,CAT8B,GCIZswC,GAAY,WAG9B,OAAAxwC,GAFD,SAAAwwC,IAAc7wC,OAAA6wC,GACZA,EAAa5wC,aAAaC,MAAMC,KAAMC,UACxC,GAAC,CAAA,CAAAE,IAAA,WAAAC,MAUD,WACE,OAAOJ,KAAK2wC,MACd,GAAC,CAAAxwC,IAAA,OAAAC,MACD,WACE,OAAOJ,KAAK4wC,iBAAiBz/B,MAC/B,GAAC,CAAAhR,IAAA,qBAAAC,MACD,WACE,OAAOJ,KAAK4wC,gBACd,GAAC,CAAAzwC,IAAA,oBAAAC,MACD,SAAkBywC,GAChBvqC,EAAOG,OAAwB,OAAjBzG,KAAK8vC,SACnB9vC,KAAK4wC,iBAAiB3/B,IAAI4/B,EAC5B,GAAC,CAAA1wC,IAAA,UAAAC,MACD,WACE,OAAOJ,KAAK4wC,iBAAiBpkC,SAC/B,GAAC,CAAArM,IAAA,YAAAC,MACD,WAIE,OAHqB,OAAjBJ,KAAK8vC,UACP9vC,KAAK8vC,QAAU9vC,KAAK8wC,iBAEf9wC,KAAK8vC,OACd,GAAC,CAAA3vC,IAAA,cAAAoI,IACD,WACE,MAAO,CAAConC,GAAWrsC,EACrB,IAAC,CAAA,CAAAnD,IAAA,eAAAC,MAjCD,WAIE,GAHAJ,KAAK4wC,iBAAmB,IAAIxxB,GAC5Bpf,KAAK8vC,QAAU,KACf9vC,KAAK2wC,OAAS,KACW,IAArB1wC,UAAUyB,aAAsB,GAAyB,IAArBzB,UAAUyB,OAAc,CAC9D,IAAMqvC,EAAQ9wC,UAAU,GACxBD,KAAK2wC,OAASI,CAChB,CACF,IAAC,CAZ8B,GCD3BC,GAAc,CAClBC,aAAc,WACZ,MAAO,CACLnoC,iBAAQI,EAAGC,GACT,OAAOA,EAAEgF,UAAUjF,EACrB,EAEH,EACDwC,IAAK,SAAS88B,GAEZ,OADAwI,GAAYvxB,KAAK+oB,GACVA,EAAEjgC,IAAI,EACd,EACDkX,KAAM,SAAS+oB,EAAGhhC,GAChB,IAAM0B,EAAIs/B,EAAE1Y,UACRtoB,EACF2iB,GAAO1K,KAAKvW,EAAG1B,GAEf2iB,GAAO1K,KAAKvW,GAEd,IADA,IAAM5E,EAAIkkC,EAAE56B,WACHsQ,EAAM,EAAGgzB,EAAOhoC,EAAExH,OAAQwc,EAAMgzB,EAAMhzB,IAC7C5Z,EAAE0J,OACF1J,EAAEqM,IAAIzH,EAAEgV,GAEX,EACDizB,cAAe,SAASppC,GACtB,IAAM2X,EAAY,IAAIN,GAEtB,OADAM,EAAUzO,IAAIlJ,GACP2X,CACT,GC/BmB0xB,GAAgB,WAAA,SAAAA,IAAAvxC,OAAAuxC,EAAA,CAAA,OAAAlxC,EAAAkxC,EAAA,KAAA,CAAA,CAAAjxC,IAAA,cAAAC,MACnC,SAAmBixC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,GACpD,IAAIjtB,EAAOysB,EAAiBvmC,SAASwmC,EAAKC,EAAKG,EAAKC,GAIpD,OAHA/sB,EAAO9jB,KAAK+K,IAAI+Y,EAAMysB,EAAiBvmC,SAASwmC,EAAKC,EAAKK,EAAKC,IAC/DjtB,EAAO9jB,KAAK+K,IAAI+Y,EAAMysB,EAAiBvmC,SAAS0mC,EAAKC,EAAKC,EAAKC,IAC/D/sB,EAAO9jB,KAAK+K,IAAI+Y,EAAMysB,EAAiBvmC,SAAS0mC,EAAKC,EAAKG,EAAKC,GAEjE,GAAC,CAAAzxC,IAAA,WAAAC,MACD,SAAgB4D,EAAIoH,EAAInH,EAAIoH,GAC1B,IAAMnD,EAAKjE,EAAKD,EACVmE,EAAKkD,EAAKD,EAChB,OAAOvK,KAAKwH,KAAKH,EAAKA,EAAKC,EAAKA,EAClC,GAAC,CAAAhI,IAAA,kBAAAC,MACD,SAAuB2+B,EAAM8S,GAC3B,IAAMvR,EAAOz/B,KAAK6K,IAAIqzB,EAAKj1B,UAAW+nC,EAAK/nC,WACrCgoC,EAAOjxC,KAAK6K,IAAIqzB,EAAK/0B,UAAW6nC,EAAK7nC,WACrCu2B,EAAO1/B,KAAK+K,IAAImzB,EAAKr1B,UAAWmoC,EAAKnoC,WACrCqoC,EAAOlxC,KAAK+K,IAAImzB,EAAKn1B,UAAWioC,EAAKjoC,WAC3C,OAAOwnC,EAAiBvmC,SAASy1B,EAAMwR,EAAMvR,EAAMwR,EACrD,GAAC,CAAA5xC,IAAA,iBAAAC,MACD,SAAsB8I,EAAGC,GACvB,IAAM6oC,EAAQ9oC,EAAEY,UACVmoC,EAAQ/oC,EAAEc,UACVkoC,EAAQhpC,EAAEQ,UACVyoC,EAAQjpC,EAAEU,UACVwoC,EAAQjpC,EAAEW,UACVuoC,EAAQlpC,EAAEa,UACVsoC,EAAQnpC,EAAEO,UACV6oC,EAAQppC,EAAES,UACZ+a,EAAOysB,EAAiBoB,YAAYR,EAAOC,EAAOD,EAAOG,EAAOC,EAAOC,EAAOD,EAAOG,GAgBzF,OAfA5tB,EAAO9jB,KAAK6K,IAAIiZ,EAAMysB,EAAiBoB,YAAYR,EAAOC,EAAOD,EAAOG,EAAOC,EAAOC,EAAOC,EAAOD,IACpG1tB,EAAO9jB,KAAK6K,IAAIiZ,EAAMysB,EAAiBoB,YAAYR,EAAOC,EAAOD,EAAOG,EAAOG,EAAOC,EAAOH,EAAOG,IACpG5tB,EAAO9jB,KAAK6K,IAAIiZ,EAAMysB,EAAiBoB,YAAYR,EAAOC,EAAOD,EAAOG,EAAOG,EAAOC,EAAOD,EAAOD,IACpG1tB,EAAO9jB,KAAK6K,IAAIiZ,EAAMysB,EAAiBoB,YAAYR,EAAOC,EAAOC,EAAOD,EAAOG,EAAOC,EAAOD,EAAOG,IACpG5tB,EAAO9jB,KAAK6K,IAAIiZ,EAAMysB,EAAiBoB,YAAYR,EAAOC,EAAOC,EAAOD,EAAOG,EAAOC,EAAOC,EAAOD,IACpG1tB,EAAO9jB,KAAK6K,IAAIiZ,EAAMysB,EAAiBoB,YAAYR,EAAOC,EAAOC,EAAOD,EAAOK,EAAOC,EAAOH,EAAOG,IACpG5tB,EAAO9jB,KAAK6K,IAAIiZ,EAAMysB,EAAiBoB,YAAYR,EAAOC,EAAOC,EAAOD,EAAOK,EAAOC,EAAOD,EAAOD,IACpG1tB,EAAO9jB,KAAK6K,IAAIiZ,EAAMysB,EAAiBoB,YAAYN,EAAOC,EAAOH,EAAOG,EAAOC,EAAOC,EAAOD,EAAOG,IACpG5tB,EAAO9jB,KAAK6K,IAAIiZ,EAAMysB,EAAiBoB,YAAYN,EAAOC,EAAOH,EAAOG,EAAOC,EAAOC,EAAOC,EAAOD,IACpG1tB,EAAO9jB,KAAK6K,IAAIiZ,EAAMysB,EAAiBoB,YAAYN,EAAOC,EAAOH,EAAOG,EAAOG,EAAOC,EAAOH,EAAOG,IACpG5tB,EAAO9jB,KAAK6K,IAAIiZ,EAAMysB,EAAiBoB,YAAYN,EAAOC,EAAOH,EAAOG,EAAOG,EAAOC,EAAOD,EAAOD,IACpG1tB,EAAO9jB,KAAK6K,IAAIiZ,EAAMysB,EAAiBoB,YAAYN,EAAOC,EAAOD,EAAOD,EAAOG,EAAOC,EAAOD,EAAOG,IACpG5tB,EAAO9jB,KAAK6K,IAAIiZ,EAAMysB,EAAiBoB,YAAYN,EAAOC,EAAOD,EAAOD,EAAOG,EAAOC,EAAOC,EAAOD,IACpG1tB,EAAO9jB,KAAK6K,IAAIiZ,EAAMysB,EAAiBoB,YAAYN,EAAOC,EAAOD,EAAOD,EAAOK,EAAOC,EAAOH,EAAOG,IACpG5tB,EAAO9jB,KAAK6K,IAAIiZ,EAAMysB,EAAiBoB,YAAYN,EAAOC,EAAOD,EAAOD,EAAOK,EAAOC,EAAOD,EAAOD,GAEtG,IAAC,CA9CkC,GCIhBI,GAAa,WAChC,SAAAA,IAAc5yC,OAAA4yC,GACZA,EAAc3yC,aAAaC,MAAMC,KAAMC,UACzC,CAAC,OAAAC,EAAAuyC,EAAA,CAAA,CAAAtyC,IAAA,kBAAAC,MAkBD,WACE,OAAOgxC,GAAiBsB,gBAAgB1yC,KAAK2yC,YAAYC,YAAa5yC,KAAK6yC,YAAYD,YACzF,GAAC,CAAAzyC,IAAA,gBAAAC,MACD,SAAc0yC,EAAMpuB,GAClB,IAAMquB,EAAUN,EAAcO,YAAYhzC,KAAK2yC,aACzCM,EAAUR,EAAcO,YAAYhzC,KAAK6yC,aAC/C,GAAIE,GAAWE,EACb,OAAIR,EAAcvnB,KAAKlrB,KAAK2yC,aAAeF,EAAcvnB,KAAKlrB,KAAK6yC,cACjE7yC,KAAKkzC,OAAOlzC,KAAK2yC,YAAa3yC,KAAK6yC,aAAa,EAAOC,EAAMpuB,GACtD,OAEP1kB,KAAKkzC,OAAOlzC,KAAK6yC,YAAa7yC,KAAK2yC,aAAa,EAAMG,EAAMpuB,GACrD,MAEJ,GAAIquB,EAET,OADA/yC,KAAKkzC,OAAOlzC,KAAK2yC,YAAa3yC,KAAK6yC,aAAa,EAAOC,EAAMpuB,GACtD,KACF,GAAIuuB,EAET,OADAjzC,KAAKkzC,OAAOlzC,KAAK6yC,YAAa7yC,KAAK2yC,aAAa,EAAMG,EAAMpuB,GACrD,KAET,MAAM,IAAI1hB,EAAyB,iCACrC,GAAC,CAAA7C,IAAA,WAAAC,MACD,WACE,QAASqyC,EAAcO,YAAYhzC,KAAK2yC,cAAgBF,EAAcO,YAAYhzC,KAAK6yC,aACzF,GAAC,CAAA1yC,IAAA,YAAAC,MACD,SAAU2H,GACR,IAAMorC,EAAKprC,EACX,OAAI/H,KAAKozC,UAAYD,EAAGC,WAAmB,EACvCpzC,KAAKozC,UAAYD,EAAGC,UAAkB,EACnC,CACT,GAAC,CAAAjzC,IAAA,SAAAC,MACD,SAAOizC,EAAcC,EAAUC,EAAWT,EAAMpuB,GAE9C,IADA,IACSpgB,EADQ+uC,EAAaG,qBACR5lC,WAAYtJ,EAAEwJ,WAAa,CAC/C,IAAMwiC,EAAQhsC,EAAE0J,OACZylC,EAAK,MAEPA,EADEF,EACG,IAAId,EAAca,EAAUhD,EAAOtwC,KAAK0zC,eAExC,IAAIjB,EAAcnC,EAAOgD,EAAUtzC,KAAK0zC,gBAExCC,cAAgBjvB,GACrBouB,EAAK7hC,IAAIwiC,EAEb,CACF,GAAC,CAAAtzC,IAAA,eAAAC,MACD,SAAakE,GACX,OAAU,IAANA,EAAgBtE,KAAK2yC,YAClB3yC,KAAK6yC,WACd,GAAC,CAAA1yC,IAAA,cAAAC,MACD,WACE,OAAOJ,KAAKozC,SACd,GAAC,CAAAjzC,IAAA,WAAAC,MACD,WACE,OAAIJ,KAAK4zC,WACA5zC,KAAK0zC,cAAc7oC,SAAS7K,KAAK2yC,YAAa3yC,KAAK6yC,aAErD7yC,KAAK2yC,YAAYC,YAAY/nC,SAAS7K,KAAK6yC,YAAYD,YAChE,GAAC,CAAAzyC,IAAA,cAAAoI,IACD,WACE,MAAO,CAACnF,EACV,IAAC,CAAA,CAAAjD,IAAA,eAAAC,MA/ED,WACEJ,KAAK2yC,YAAc,KACnB3yC,KAAK6yC,YAAc,KACnB7yC,KAAKozC,UAAY,KACjBpzC,KAAK0zC,cAAgB,KACrB,IAAMG,EAAa5zC,UAAU,GAAI6zC,EAAa7zC,UAAU,GAAI8zC,EAAe9zC,UAAU,GACrFD,KAAK2yC,YAAckB,EACnB7zC,KAAK6yC,YAAciB,EACnB9zC,KAAK0zC,cAAgBK,EACrB/zC,KAAKozC,UAAYpzC,KAAK6K,UACxB,GAAC,CAAA1K,IAAA,OAAAC,MACD,SAAY+I,GACV,OAAOA,EAAEypC,YAAYllB,SACvB,GAAC,CAAAvtB,IAAA,cAAAC,MACD,SAAmB4vC,GACjB,OAAOA,aAAgBU,EACzB,IAAC,CApB+B,GCJbsD,GAAW,WAAA,OAAA9zC,GAAA,SAAA8zC,IAAAn0C,OAAAm0C,EAAA,GAAA,CAAA,CAAA7zC,IAAA,YAAAC,MAC9B,SAAU4vC,GAAM,IAAE,CADY,GCSXiE,GAAe,WAClC,SAAAA,IAAcp0C,OAAAo0C,GACZA,EAAgBn0C,aAAaC,MAAMC,KAAMC,UAC3C,CAAC,OAAAC,EAAA+zC,EAAA,CAAA,CAAA9zC,IAAA,gBAAAC,MAiBD,WACE,GAAIwS,GAAa3S,UAAU,GAAI+zC,KAAiB/zC,UAAU,aAAc0C,QAAU1C,UAAU,aAAcywC,GAGxG,IAFA,IAAMwD,EAAej0C,UAAU,GAAyBk0C,EAAUl0C,UAAU,GACtEm0C,EADoCn0C,UAAU,GACvBuzC,qBACpBlvC,EAAI,EAAGA,EAAI8vC,EAAgBjjC,OAAQ7M,IAAK,CAC/C,IAAMusC,EAAiBuD,EAAgB7rC,IAAIjE,GACtCtE,KAAKq0C,kBAAkBnqC,WAAW2mC,EAAe+B,YAAasB,KAG/DrD,aAA0BH,GAC5B1wC,KAAKs0C,cAAcJ,EAAcrD,EAAgBsD,GAC1CtD,aAA0BjB,GACjCuE,EAAQI,UAAU1D,EAAe2D,WAEjCluC,EAAOC,uBAEX,MACK,GAAIqM,GAAa3S,UAAU,GAAIkS,KAAUlS,UAAU,aAAc0C,QAAU1C,UAAU,aAAcywC,GAGxG,IAFA,IAAMwD,EAAej0C,UAAU,GAAyBw0C,EAAUx0C,UAAU,GACtEm0C,EADoCn0C,UAAU,GACvBuzC,qBACpBlvC,EAAI,EAAGA,EAAI8vC,EAAgBjjC,OAAQ7M,IAAK,CAC/C,IAAMusC,EAAiBuD,EAAgB7rC,IAAIjE,GACtCtE,KAAKq0C,kBAAkBnqC,WAAW2mC,EAAe+B,YAAasB,KAG/DrD,aAA0BH,GAC5B1wC,KAAKs0C,cAAcJ,EAAcrD,EAAgB4D,GAC1C5D,aAA0BjB,GACjC6E,EAAQxjC,IAAI4/B,EAAe2D,WAE3BluC,EAAOC,uBAEX,CAEJ,GAAC,CAAApG,IAAA,kBAAAC,MACD,WACE,OAAOJ,KAAK00C,aACd,GAAC,CAAAv0C,IAAA,WAAAC,MACD,SAASktC,GACP,OAAOA,EAAM/kC,IAAI+kC,EAAMn8B,OAAS,EAClC,GAAC,CAAAhR,IAAA,OAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OACZ,OAAI1B,KAAKwM,UACA,GAETxM,KAAK20C,QACE30C,KAAKmR,KAAKnR,KAAK40C,QACjB,GAAyB,IAArB30C,UAAUyB,OAAc,CAGjC,IAFA,IACIyP,EAAO,EACF7M,EAFIrE,UAAU,GAELuzC,qBAAqB5lC,WAAYtJ,EAAEwJ,WAAa,CAChE,IAAM+iC,EAAiBvsC,EAAE0J,OACrB6iC,aAA0BH,GAC5Bv/B,GAAQnR,KAAKmR,KAAK0/B,GACXA,aAA0BjB,KACjCz+B,GAAQ,EAEZ,CACA,OAAOA,CACT,CACF,GAAC,CAAAhR,IAAA,aAAAC,MACD,SAAWsgB,EAAMsvB,GAEf,IADA,IAAI6E,EAAgB,KACXvwC,EAAIoc,EAAK8yB,qBAAqB5lC,WAAYtJ,EAAEwJ,WAAa,CAChE,IAAM+iC,EAAiBvsC,EAAE0J,OACrB6iC,aAA0BjB,IACxBiB,EAAe2D,YAAcxE,IAAM6E,EAAgBhE,EAE3D,CACA,OAAsB,OAAlBgE,IACFn0B,EAAK8yB,qBAAqB7zB,OAAOk1B,IAC1B,EAGX,GAAC,CAAA10C,IAAA,YAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OAAc,CAC1B1B,KAAK20C,QACL,IAAMG,EAAa90C,KAAK+0C,UAAU/0C,KAAK40C,OACvC,OAAmB,OAAfE,EAA4B,IAAI11B,GAC7B01B,CACT,CAAO,GAAyB,IAArB70C,UAAUyB,OAAc,CAGjC,IAFA,IAAMgf,EAAOzgB,UAAU,GACjB+0C,EAAoB,IAAI51B,GACrB9a,EAAIoc,EAAK8yB,qBAAqB5lC,WAAYtJ,EAAEwJ,WAAa,CAChE,IAAM+iC,EAAiBvsC,EAAE0J,OACzB,GAAI6iC,aAA0BH,GAAc,CAC1C,IAAMuE,EAAqBj1C,KAAK+0C,UAAUlE,GACf,OAAvBoE,GAA6BD,EAAkB/jC,IAAIgkC,EACzD,MAAWpE,aAA0BjB,GACnCoF,EAAkB/jC,IAAI4/B,EAAe2D,WAErCluC,EAAOC,sBAEX,CACA,OAAIyuC,EAAkB7jC,QAAU,EAAU,KACnC6jC,CACT,CACF,GAAC,CAAA70C,IAAA,SAAAC,MACD,SAAO2vC,EAAQC,GACb1pC,EAAOG,QAAQzG,KAAKk1C,OAAQ,0EAC5Bl1C,KAAKm1C,gBAAgBlkC,IAAI,IAAI2+B,GAAcG,EAAQC,GACrD,GAAC,CAAA7vC,IAAA,oBAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OAAc,CAC1B,IAAMqvC,EAAQ9wC,UAAU,GAClBm1C,EAAa,IAAIh2B,GAEvB,OADApf,KAAKq1C,kBAAkBtE,EAAO/wC,KAAK40C,MAAOQ,GACnCA,CACT,CAAO,GAAyB,IAArBn1C,UAAUyB,OAAc,CACjC,IAAMqvC,EAAQ9wC,UAAU,GAAIq1C,EAAMr1C,UAAU,GAAIm1C,EAAan1C,UAAU,GAEvE,GADAqG,EAAOG,OAAOsqC,GAAS,GACnBuE,EAAIC,aAAexE,EAErB,OADAqE,EAAWnkC,IAAIqkC,GACR,KAET,IAAK,IAAIhxC,EAAIgxC,EAAI9B,qBAAqB5lC,WAAYtJ,EAAEwJ,WAAa,CAC/D,IAAM0nC,EAAYlxC,EAAE0J,OAChBwnC,aAAqB9E,GACvB1wC,KAAKq1C,kBAAkBtE,EAAOyE,EAAWJ,IAEzC9uC,EAAOG,OAAO+uC,aAAqB5F,KACpB,IAAXmB,GACFqE,EAAWnkC,IAAIukC,GAGrB,CACA,OAAO,IACT,CACF,GAAC,CAAAr1C,IAAA,QAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OAAc,CAC1B,IAAMwyC,EAAej0C,UAAU,GAC/BD,KAAK20C,QACL,IAAMF,EAAU,IAAIr1B,GACpB,OAAIpf,KAAKwM,WAGLxM,KAAKq0C,kBAAkBnqC,WAAWlK,KAAK40C,MAAMhC,YAAasB,IAC5Dl0C,KAAKs0C,cAAcJ,EAAcl0C,KAAK40C,MAAOH,GAHtCA,CAMX,CAAO,GAAyB,IAArBx0C,UAAUyB,OAAc,CACjC,IAAMwyC,EAAej0C,UAAU,GAAIk0C,EAAUl0C,UAAU,GAEvD,GADAD,KAAK20C,QACD30C,KAAKwM,UACP,OAAO,KAELxM,KAAKq0C,kBAAkBnqC,WAAWlK,KAAK40C,MAAMhC,YAAasB,IAC5Dl0C,KAAKs0C,cAAcJ,EAAcl0C,KAAK40C,MAAOT,EAEjD,CACF,GAAC,CAAAh0C,IAAA,QAAAC,MACD,WACE,GAAIJ,KAAKk1C,OAAQ,OAAO,KACxBl1C,KAAK40C,MAAQ50C,KAAKm1C,gBAAgB3oC,UAAYxM,KAAK4oC,WAAW,GAAK5oC,KAAKy1C,mBAAmBz1C,KAAKm1C,iBAAkB,GAClHn1C,KAAKm1C,gBAAkB,KACvBn1C,KAAKk1C,QAAS,CAChB,GAAC,CAAA/0C,IAAA,UAAAC,MACD,WAEE,OADAJ,KAAK20C,QACE30C,KAAK40C,KACd,GAAC,CAAAz0C,IAAA,SAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OAAc,CAC1B,IAAMwyC,EAAej0C,UAAU,GAAI+vC,EAAO/vC,UAAU,GAEpD,OADAD,KAAK20C,UACD30C,KAAKq0C,kBAAkBnqC,WAAWlK,KAAK40C,MAAMhC,YAAasB,IACrDl0C,KAAK2f,OAAOu0B,EAAcl0C,KAAK40C,MAAO5E,EAGjD,CAAO,GAAyB,IAArB/vC,UAAUyB,OAAc,CACjC,IAAMwyC,EAAej0C,UAAU,GAAIygB,EAAOzgB,UAAU,GAAI+vC,EAAO/vC,UAAU,GACrEy1C,EAAQ11C,KAAK21C,WAAWj1B,EAAMsvB,GAClC,GAAI0F,EAAO,OAAO,EAElB,IADA,IAAIE,EAAe,KACVtxC,EAAIoc,EAAK8yB,qBAAqB5lC,WAAYtJ,EAAEwJ,WAAa,CAChE,IAAM+iC,EAAiBvsC,EAAE0J,OACzB,GAAKhO,KAAKq0C,kBAAkBnqC,WAAW2mC,EAAe+B,YAAasB,KAG/DrD,aAA0BH,KAC5BgF,EAAQ11C,KAAK2f,OAAOu0B,EAAcrD,EAAgBb,KACvC,CACT4F,EAAe/E,EACf,KACF,CAEJ,CAMA,OALqB,OAAjB+E,GACEA,EAAapC,qBAAqBhnC,WACpCkU,EAAK8yB,qBAAqB7zB,OAAOi2B,GAG9BF,CACT,CACF,GAAC,CAAAv1C,IAAA,qBAAAC,MACD,SAAmBy1C,EAAoB9E,GACrCzqC,EAAOG,QAAQovC,EAAmBrpC,WAClC,IAAMspC,EAAmB91C,KAAK+1C,uBAAuBF,EAAoB9E,EAAQ,GACjF,OAAgC,IAA5B+E,EAAiB3kC,OACZ2kC,EAAiBvtC,IAAI,GAEvBvI,KAAKy1C,mBAAmBK,EAAkB/E,EAAQ,EAC3D,GAAC,CAAA5wC,IAAA,QAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OACZ,OAAI1B,KAAKwM,UACA,GAETxM,KAAK20C,QACE30C,KAAK4rC,MAAM5rC,KAAK40C,QAClB,GAAyB,IAArB30C,UAAUyB,OAAc,CAGjC,IAFA,IACIs0C,EAAgB,EACX1xC,EAFIrE,UAAU,GAELuzC,qBAAqB5lC,WAAYtJ,EAAEwJ,WAAa,CAChE,IAAM+iC,EAAiBvsC,EAAE0J,OACzB,GAAI6iC,aAA0BH,GAAc,CAC1C,IAAMuF,EAAaj2C,KAAK4rC,MAAMiF,GAC1BoF,EAAaD,IAAeA,EAAgBC,EAClD,CACF,CACA,OAAOD,EAAgB,CACzB,CACF,GAAC,CAAA71C,IAAA,yBAAAC,MACD,SAAuBg0C,EAAiB8B,GACtC5vC,EAAOG,QAAQ2tC,EAAgB5nC,WAC/B,IAAMspC,EAAmB,IAAI12B,GAC7B02B,EAAiB7kC,IAAIjR,KAAK4oC,WAAWsN,IACrC,IAAMC,EAAwB,IAAI/2B,GAAUg1B,GAC5CpD,GAAYvxB,KAAK02B,EAAuBn2C,KAAKo2C,iBAC7C,IAAK,IAAI9xC,EAAI6xC,EAAsBvoC,WAAYtJ,EAAEwJ,WAAa,CAC5D,IAAM+iC,EAAiBvsC,EAAE0J,OACrBhO,KAAKq2C,SAASP,GAAkBtC,qBAAqBriC,SAAWnR,KAAKs2C,mBACvER,EAAiB7kC,IAAIjR,KAAK4oC,WAAWsN,IAEvCl2C,KAAKq2C,SAASP,GAAkBS,kBAAkB1F,EACpD,CACA,OAAOiF,CACT,GAAC,CAAA31C,IAAA,UAAAC,MACD,WACE,OAAKJ,KAAKk1C,OACHl1C,KAAK40C,MAAMpoC,UADOxM,KAAKm1C,gBAAgB3oC,SAEhD,GAAC,CAAArM,IAAA,cAAAoI,IACD,WACE,MAAO,CAACjF,EACV,IAAC,CAAA,CAAAnD,IAAA,eAAAC,MAvQD,WAKE,GAJAJ,KAAK40C,MAAQ,KACb50C,KAAKk1C,QAAS,EACdl1C,KAAKm1C,gBAAkB,IAAI/1B,GAC3Bpf,KAAK00C,cAAgB,KACI,IAArBz0C,UAAUyB,OACZuyC,EAAgBn0C,aAAauG,KAAKrG,KAAMi0C,EAAgBuC,4BACnD,GAAyB,IAArBv2C,UAAUyB,OAAc,CACjC,IAAM+0C,EAAex2C,UAAU,GAC/BqG,EAAOG,OAAOgwC,EAAe,EAAG,wCAChCz2C,KAAK00C,cAAgB+B,CACvB,CACF,GAAC,CAAAt2C,IAAA,iBAAAC,MACD,SAAsB8I,EAAGC,GACvB,OAAOD,EAAIC,EAAI,EAAID,EAAIC,GAAK,EAAI,CAClC,IAAC,CAnBiC,GA8QpC8qC,GAAgByC,aADhB,WAAwB,EAExBzC,GAAgBuC,sBAAwB,OCxRnBG,GAAY,WAAA,OAAAz2C,GAAA,SAAAy2C,IAAA92C,OAAA82C,EAAA,GAAA,CAAA,CAAAx2C,IAAA,WAAAC,MAC/B,SAASw2C,EAAOC,GAAO,IAAE,CADM,GCeZC,YAAOC,GAC1B,SAAAD,IAAc,IAAAt0C,EAE+B,OAF/B3C,OAAAi3C,GACZt0C,EAAAC,EAAAzC,KAAA82C,GACAA,EAAQh3C,aAAaC,MAAKyC,EAAOvC,WAAUuC,CAC7C,CAAC,OAAAK,EAAAi0C,EAAAC,GAAA72C,EAAA42C,EAAA,CAAA,CAAA32C,IAAA,2CAAAC,MA4BD,SAAyC42C,EAAgBd,GACvD5vC,EAAOG,OAAOuwC,EAAet1C,OAAS,GAEtC,IADA,IAAMo0C,EAAmB,IAAI12B,GACpB9a,EAAI,EAAGA,EAAI0yC,EAAet1C,OAAQ4C,IACzCwxC,EAAiBrlC,OAAOzQ,KAAKi3C,wCAAwCD,EAAe1yC,GAAI4xC,IAE1F,OAAOJ,CACT,GAAC,CAAA31C,IAAA,oBAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OAAc,CAC1B,IAAMw1C,EAAcj3C,UAAU,GAAI8lB,EAAI9lB,UAAU,GAChD,OAAOD,KAAKm3C,kBAAkBD,EAAazyC,EAAOS,kBAAmB6gB,EACvE,CAAO,GAAyB,IAArB9lB,UAAUyB,OAAc,CACjC,IAAMw1C,EAAcj3C,UAAU,GAAgC8lB,EAAI9lB,UAAU,GACxEm3C,EAD4Cn3C,UAAU,GAEpD6yC,EAAO,IAAI7C,GACjB6C,EAAK7hC,IAAIimC,GAET,IADA,IAAMG,EAAoB,IAAIpH,IACtB6C,EAAKtmC,WAAa4qC,GAAsB,GAAK,CACnD,IAAME,EAAUxE,EAAKyE,OACfC,EAAeF,EAAQ3D,cAC7B,GAAI6D,GAAgBJ,EAClB,MAEF,GAAIE,EAAQ1D,WACV,GAAIyD,EAAkBlmC,OAAS4U,EAC7BsxB,EAAkBpmC,IAAIqmC,QAEVD,EAAkBI,OACtB9D,cAAgB6D,IACtBH,EAAkBE,OAClBF,EAAkBpmC,IAAIqmC,IAGxBF,EADYC,EAAkBI,OACL9D,mBAG3B2D,EAAQI,cAAc5E,EAAMsE,EAEhC,CACA,OAAON,EAAQa,SAASN,EAC1B,CACF,GAAC,CAAAl3C,IAAA,aAAAC,MACD,SAAW2wC,GACT,OAAO,IAAI6G,GAAY7G,EACzB,GAAC,CAAA5wC,IAAA,OAAAC,MACD,WACE,OAAyB,IAArBH,UAAUyB,OACLgnB,EAAAouB,EAAA,OAAA92C,KAAA,GAAWqG,KAAKrG,MACb0oB,EAAAouB,EAAW/2C,OAAAA,KAAAA,GAAAA,MAAMC,KAAMC,UACrC,GAAC,CAAAE,IAAA,SAAAC,MACD,WACE,KAAyB,IAArBH,UAAUyB,QAAiBzB,UAAU,aAAc0C,QAAU1C,UAAU,aAAcmJ,GAOvF,OAAOsf,EAAAouB,EAAA,SAAA92C,KAAA,GAAaD,MAAMC,KAAMC,WANhC,IAAMwwC,EAAUxwC,UAAU,GAAI+vC,EAAO/vC,UAAU,GAC/C,GAAIwwC,EAAQjnC,SACV,OAAO,KAETkf,EAAAouB,EAAA,SAAA92C,KAAA,GAAaqG,KAAKrG,KAAMywC,EAAST,EAIrC,GAAC,CAAA7vC,IAAA,kBAAAC,MACD,WACE,OAAO02C,EAAQe,YACjB,GAAC,CAAA13C,IAAA,iBAAAC,MACD,SAAeg0C,EAAiB0D,GAI9B,IAHA,IAAMC,EAAgBl3C,KAAKyT,MAAMzT,KAAKsV,KAAKi+B,EAAgBjjC,OAAS2mC,IAC9DE,EAAS,IAAI5mC,MAAM0mC,GAAYvgC,KAAK,MACpCjT,EAAI8vC,EAAgBxmC,WACjBC,EAAI,EAAGA,EAAIiqC,EAAYjqC,IAAK,CACnCmqC,EAAOnqC,GAAK,IAAIuR,GAEhB,IADA,IAAI64B,EAAyB,EACtB3zC,EAAEwJ,WAAamqC,EAAyBF,GAAe,CAC5D,IAAMlH,EAAiBvsC,EAAE0J,OACzBgqC,EAAOnqC,GAAGoD,IAAI4/B,GACdoH,GACF,CACF,CACA,OAAOD,CACT,GAAC,CAAA73C,IAAA,QAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OAAc,CAC1B,IAAMw2C,EAAYj4C,UAAU,GAC5B,OAAOyoB,EAAAouB,EAAA,QAAA92C,KAAA,GAAYqG,KAAKrG,KAAMk4C,EAChC,CAAO,GAAyB,IAArBj4C,UAAUyB,OAAc,CACjC,IAAMw2C,EAAYj4C,UAAU,GAAIk0C,EAAUl0C,UAAU,GACpDyoB,EAAAouB,EAAA,QAAA92C,KAAA,GAAYqG,KAAKrG,KAAMk4C,EAAW/D,EACpC,CACF,GAAC,CAAAh0C,IAAA,gBAAAC,MACD,WACE,OAAO02C,EAAQqB,WACjB,GAAC,CAAAh4C,IAAA,0CAAAC,MACD,SAAwCg0C,EAAiB8B,GACvD,OAAOxtB,EAAAouB,EAA6BzwC,yBAAAA,KAAAA,GAAAA,KAAKrG,KAAMo0C,EAAiB8B,EAClE,GAAC,CAAA/1C,IAAA,SAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,QAAiBzB,UAAU,aAAc0C,QAAU1C,UAAU,aAAcmJ,EAAW,CAClG,IAAMqnC,EAAUxwC,UAAU,GAAI+vC,EAAO/vC,UAAU,GAC/C,OAAOyoB,EAAAouB,EAAazwC,SAAAA,KAAAA,GAAAA,KAAKrG,KAAMywC,EAAST,EAC1C,CACE,OAAOtnB,EAAAouB,EAAA,SAAA92C,KAAA,GAAaD,MAAMC,KAAMC,UAEpC,GAAC,CAAAE,IAAA,QAAAC,MACD,WACE,OAAyB,IAArBH,UAAUyB,OACLgnB,EAAAouB,EAAA,QAAA92C,KAAA,GAAYqG,KAAKrG,MACd0oB,EAAAouB,EAAY/2C,QAAAA,KAAAA,GAAAA,MAAMC,KAAMC,UACtC,GAAC,CAAAE,IAAA,yBAAAC,MACD,SAAuBg0C,EAAiB8B,GACtC5vC,EAAOG,QAAQ2tC,EAAgB5nC,WAC/B,IAAM4rC,EAAev3C,KAAKyT,MAAMzT,KAAKsV,KAAKi+B,EAAgBjjC,OAASnR,KAAKs2C,oBAClEH,EAAwB,IAAI/2B,GAAUg1B,GAC5CpD,GAAYvxB,KAAK02B,EAAuBW,EAAQuB,aAChD,IAAMrB,EAAiBh3C,KAAKg3C,eAAeb,EAAuBt1C,KAAKyT,MAAMzT,KAAKsV,KAAKtV,KAAKwH,KAAK+vC,MACjG,OAAOp4C,KAAKs4C,yCAAyCtB,EAAgBd,EACvE,GAAC,CAAA/1C,IAAA,mBAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OAAc,CAC1B,GAAIkR,GAAa3S,UAAU,GAAI02C,IAAe,CAC5C,IAAM4B,EAAWt4C,UAAU,GAC3B,GAAID,KAAKwM,UAAW,OAAO,KAC3B,IAAMinC,EAAK,IAAIhB,GAAczyC,KAAKw4C,UAAWx4C,KAAKw4C,UAAWD,GAC7D,OAAOv4C,KAAKy4C,iBAAiBhF,EAC9B,CAAM,GAAIxzC,UAAU,aAAcwyC,GAAe,CAChD,IAAMyE,EAAcj3C,UAAU,GAC1Bm3C,EAAqB3yC,EAAOS,kBAC5BwzC,EAAU,KACR5F,EAAO,IAAI7C,GAEjB,IADA6C,EAAK7hC,IAAIimC,IACDpE,EAAKtmC,WAAa4qC,EAAqB,GAAK,CAClD,IAAME,EAAUxE,EAAKyE,OACfC,EAAeF,EAAQ3D,cAC7B,GAAI6D,GAAgBJ,EAAoB,MACpCE,EAAQ1D,YACVwD,EAAqBI,EACrBkB,EAAUpB,GAEVA,EAAQI,cAAc5E,EAAMsE,EAEhC,CACA,OAAgB,OAAZsB,EAAyB,KACtB,CAACA,EAAQC,aAAa,GAAGnE,UAAWkE,EAAQC,aAAa,GAAGnE,UACrE,CACF,KAAO,IAAyB,IAArBv0C,UAAUyB,OAAc,CACjC,IAAMk3C,EAAO34C,UAAU,GAAIs4C,EAAWt4C,UAAU,GAChD,GAAID,KAAKwM,WAAaosC,EAAKpsC,UAAW,OAAO,KAC7C,IAAMinC,EAAK,IAAIhB,GAAczyC,KAAKw4C,UAAWI,EAAKJ,UAAWD,GAC7D,OAAOv4C,KAAKy4C,iBAAiBhF,EAC/B,CAAO,GAAyB,IAArBxzC,UAAUyB,OAAc,CACjC,IAA+C62C,EAAWt4C,UAAU,GAC9D44C,EAAM,IAAIjJ,GADJ3vC,UAAU,GAAWA,UAAU,IAErCwzC,EAAK,IAAIhB,GAAczyC,KAAKw4C,UAAWK,EAAKN,GAClD,OAAOv4C,KAAKy4C,iBAAiBhF,GAAI,EACnC,CAAO,GAAyB,IAArBxzC,UAAUyB,OAAc,CACjC,IAA+C62C,EAAWt4C,UAAU,GAAI8lB,EAAI9lB,UAAU,GAChF44C,EAAM,IAAIjJ,GADJ3vC,UAAU,GAAWA,UAAU,IAErCwzC,EAAK,IAAIhB,GAAczyC,KAAKw4C,UAAWK,EAAKN,GAClD,OAAOv4C,KAAKm3C,kBAAkB1D,EAAI1tB,EACpC,EACF,GAAC,CAAA5lB,IAAA,mBAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OAAc,CAC1B,IAAMw1C,EAAcj3C,UAAU,GAAIuyC,EAAcvyC,UAAU,GACtD64C,EAAqBr0C,EAAOS,kBAC1B4tC,EAAO,IAAI7C,GAEjB,IADA6C,EAAK7hC,IAAIimC,IACDpE,EAAKtmC,WAAW,CACtB,IAAM8qC,EAAUxE,EAAKyE,OACfC,EAAeF,EAAQ3D,cAC7B,GAAI6D,EAAehF,EAAa,OAAO,EACvC,GAAI8E,EAAQ5E,mBAAqBF,EAAa,OAAO,EACrD,GAAI8E,EAAQ1D,YAEV,IADAkF,EAAqBtB,IACKhF,EAAa,OAAO,OAE9C8E,EAAQI,cAAc5E,EAAMgG,EAEhC,CACA,OAAO,CACT,CAAO,GAAyB,IAArB74C,UAAUyB,OAAc,CACjC,IAAMk3C,EAAO34C,UAAU,GAAIs4C,EAAWt4C,UAAU,GAAIuyC,EAAcvyC,UAAU,GACtEwzC,EAAK,IAAIhB,GAAczyC,KAAKw4C,UAAWI,EAAKJ,UAAWD,GAC7D,OAAOv4C,KAAK+4C,iBAAiBtF,EAAIjB,EACnC,CACF,GAAC,CAAAryC,IAAA,cAAAoI,IACD,WACE,MAAO,CAACioC,GAAcltC,EACxB,IAAC,CAAA,CAAAnD,IAAA,eAAAC,MAtND,WACE,GAAyB,IAArBH,UAAUyB,OACZo1C,EAAQh3C,aAAauG,KAAKrG,KAAM82C,EAAQN,4BACnC,GAAyB,IAArBv2C,UAAUyB,OAAc,CACjC,IAAM+0C,EAAex2C,UAAU,GAC/Bg0C,GAAgBn0C,aAAauG,KAAKrG,KAAMy2C,EAC1C,CACF,GAAC,CAAAt2C,IAAA,UAAAC,MACD,SAAe4H,GACb,OAAO8uC,EAAQkC,IAAIhxC,EAAE8B,UAAW9B,EAAE0B,UACpC,GAAC,CAAAvJ,IAAA,MAAAC,MACD,SAAW8I,EAAGC,GACZ,OAAQD,EAAIC,GAAK,CACnB,GAAC,CAAAhJ,IAAA,WAAAC,MACD,SAAgBi3C,GAGd,IAFA,IAAM4B,EAAQ,IAAI7nC,MAAMimC,EAAkBlmC,QAAQoG,KAAK,MACnD4qB,EAAQ,GACJkV,EAAkB7qC,WAAW,CACnC,IAAMinC,EAAK4D,EAAkBE,OAC7B0B,EAAM9W,GAASsR,EAAGkF,aAAa,GAAGnE,UAClCrS,GACF,CACA,OAAO8W,CACT,GAAC,CAAA94C,IAAA,UAAAC,MACD,SAAe4H,GACb,OAAO8uC,EAAQkC,IAAIhxC,EAAEgC,UAAWhC,EAAE4B,UACpC,IAAC,EA/BkCqqC,IA6N/B2D,YAAWsB,GACf,SAAAtB,IAAc,IAAAuB,EAEmC,OAFnCt5C,OAAA+3C,GACZuB,EAAA12C,EAAAzC,KAAA43C,GACAA,EAAY93C,aAAaC,MAAKo5C,EAAOl5C,WAAUk5C,CACjD,CAAC,OAAAt2C,EAAA+0C,EAAAsB,GAAAh5C,EAAA03C,EAAA,CAAA,CAAAz3C,IAAA,gBAAAC,MAKD,WAEE,IADA,IAAI2vC,EAAS,KACJzrC,EAAItE,KAAKwzC,qBAAqB5lC,WAAYtJ,EAAEwJ,WAAa,CAChE,IAAM+iC,EAAiBvsC,EAAE0J,OACV,OAAX+hC,EACFA,EAAS,IAAI3mC,EAASynC,EAAe+B,aAErC7C,EAAOtlC,gBAAgBomC,EAAe+B,YAE1C,CACA,OAAO7C,CACT,IAAC,CAAA,CAAA5vC,IAAA,eAAAC,MAfD,WACE,IAAM2wC,EAAQ9wC,UAAU,GACxBywC,GAAa5wC,aAAauG,KAAKrG,KAAM+wC,EACvC,IAAC,EARuBL,IAsB1BoG,GAAQc,YAAcA,GACtBd,GAAQuB,YAAc,IAAA,WAAA,OAAAn4C,GAAA,SAAAk5C,IAAAv5C,OAAAu5C,EAAA,GAAA,CAAA,CAAAj5C,IAAA,cAAAoI,IACpB,WACE,MAAO,CAAC7D,EACV,GAAC,CAAAvE,IAAA,UAAAC,MACD,SAAQuxB,EAAIC,GACV,OAAOqiB,GAAgBoF,eAAevC,GAAQwC,QAAQ3nB,EAAGihB,aAAckE,GAAQwC,QAAQ1nB,EAAGghB,aAC5F,IAAC,CANmB,IAQtBkE,GAAQqB,YAAc,IAAA,WAAA,OAAAj4C,GAAA,SAAAq5C,IAAA15C,OAAA05C,EAAA,GAAA,CAAA,CAAAp5C,IAAA,cAAAoI,IACpB,WACE,MAAO,CAAC7D,EACV,GAAC,CAAAvE,IAAA,UAAAC,MACD,SAAQuxB,EAAIC,GACV,OAAOqiB,GAAgBoF,eAAevC,GAAQ0C,QAAQ7nB,EAAGihB,aAAckE,GAAQ0C,QAAQ5nB,EAAGghB,aAC5F,IAAC,CANmB,IAQtBkE,GAAQe,aAAe,IAAA,WAAA,OAAA33C,GAAA,SAAAu5C,IAAA55C,OAAA45C,EAAA,GAAA,CAAA,CAAAt5C,IAAA,cAAAoI,IACrB,WACE,MAAO,CAACmuC,aACV,GAAC,CAAAv2C,IAAA,aAAAC,MACD,SAAWs5C,EAASC,GAClB,OAAOD,EAAQxvC,WAAWyvC,EAC5B,IAAC,CANoB,IAQvB7C,GAAQN,sBAAwB,GC3RG,IACdoD,GAAsB,WAAA,SAAAA,IAAA/5C,OAAA+5C,EAAA,CAAA,OAAA15C,EAAA05C,EAAA,KAAA,CAAA,CAAAz5C,IAAA,eAAAC,MACzC,SAAoB6kB,EAAIjhB,GACtB,OAAIihB,EAAKjhB,GAAY,EACjBihB,EAAKjhB,EAAW,EACb,CACT,GAAC,CAAA7D,IAAA,UAAAC,MACD,SAAey5C,EAAQ3vB,EAAIhf,GACzB,GAAIgf,EAAGpiB,SAASoD,GAAK,OAAO,EAC5B,IAAM4uC,EAAQF,EAAuBG,aAAa7vB,EAAGxkB,EAAGwF,EAAGxF,GACrDs0C,EAAQJ,EAAuBG,aAAa7vB,EAAGvkB,EAAGuF,EAAGvF,GAC3D,OAAQk0C,GACR,KAAK,EACH,OAAOD,EAAuBK,aAAaH,EAAOE,GACpD,KAAK,EACH,OAAOJ,EAAuBK,aAAaD,EAAOF,GACpD,KAAK,EACH,OAAOF,EAAuBK,aAAaD,GAAQF,GACrD,KAAK,EACH,OAAOF,EAAuBK,cAAcH,EAAOE,GACrD,KAAK,EACH,OAAOJ,EAAuBK,cAAcH,GAAQE,GACtD,KAAK,EACH,OAAOJ,EAAuBK,cAAcD,GAAQF,GACtD,KAAK,EACH,OAAOF,EAAuBK,cAAcD,EAAOF,GACrD,KAAK,EACH,OAAOF,EAAuBK,aAAaH,GAAQE,GAGrD,OADA1zC,EAAOC,qBAAqB,wBACrB,CACT,GAAC,CAAApG,IAAA,eAAAC,MACD,SAAoB85C,EAAcC,GAChC,OAAID,EAAe,GAAW,EAC1BA,EAAe,EAAU,EACzBC,EAAe,GAAW,EAC1BA,EAAe,EAAU,EACtB,CACT,IAAC,CArCwC,GCEtBC,GAAW,WAG7B,OAAAl6C,GAFD,SAAAk6C,IAAcv6C,OAAAu6C,GACZA,EAAYt6C,aAAaC,MAAMC,KAAMC,UACvC,GAAC,CAAA,CAAAE,IAAA,gBAAAC,MAcD,WACE,OAAOJ,KAAKie,KACd,GAAC,CAAA9d,IAAA,QAAAC,MACD,SAAMk/B,GACJA,EAAIuJ,MAAM7oC,KAAKie,OACfqhB,EAAIuJ,MAAM,YAAc7oC,KAAK48B,aAC/B,GAAC,CAAAz8B,IAAA,YAAAC,MACD,SAAU4vB,GACR,IAAMzoB,EAAQyoB,EACd,OAAIhwB,KAAK48B,aAAer1B,EAAMq1B,cAAsB,EAChD58B,KAAK48B,aAAer1B,EAAMq1B,aAAqB,EAC/C58B,KAAKie,MAAMnW,SAASP,EAAM0W,OAAe,EACxCje,KAAKq6C,YACL9yC,EAAM8yC,YACJT,GAAuB9wC,QAAQ9I,KAAKs6C,eAAgBt6C,KAAKie,MAAO1W,EAAM0W,OAD9C,GADA,CAGjC,GAAC,CAAA9d,IAAA,aAAAC,MACD,SAAWm6C,GACT,OAA0B,IAAtBv6C,KAAK48B,eAAuB58B,KAAKq6C,aACjCr6C,KAAK48B,eAAiB2d,CAE5B,GAAC,CAAAp6C,IAAA,WAAAC,MACD,WACE,OAAOJ,KAAK48B,aAAe,IAAM58B,KAAKie,MAAMnJ,UAC9C,GAAC,CAAA3U,IAAA,aAAAC,MACD,WACE,OAAOJ,KAAKq6C,WACd,GAAC,CAAAl6C,IAAA,cAAAoI,IACD,WACE,MAAO,CAACnF,EACV,IAAC,CAAA,CAAAjD,IAAA,eAAAC,MA1CD,WACEJ,KAAKw6C,WAAa,KAClBx6C,KAAKie,MAAQ,KACbje,KAAK48B,aAAe,KACpB58B,KAAKs6C,eAAiB,KACtBt6C,KAAKq6C,YAAc,KACnB,IAAMI,EAAYx6C,UAAU,GAAIge,EAAQhe,UAAU,GAAI28B,EAAe38B,UAAU,GAAIy6C,EAAgBz6C,UAAU,GAC7GD,KAAKw6C,WAAaC,EAClBz6C,KAAKie,MAAQ,IAAIhX,EAAWgX,GAC5Bje,KAAK48B,aAAeA,EACpB58B,KAAKs6C,eAAiBI,EACtB16C,KAAKq6C,aAAep8B,EAAMnW,SAAS2yC,EAAU59B,cAAc+f,GAC7D,IAAC,CAhB6B,GCEXrrB,GAAQ,WAAA,OAAArR,GAAA,SAAAqR,IAAA1R,OAAA0R,EAAA,GAAA,CAAA,CAAApR,IAAA,UAAAC,MAK3B,WAAU,GAEV,CAAAD,IAAA,OAAAC,MAIA,WAAO,GAEP,CAAAD,IAAA,SAAAC,MAIA,WAAS,IAAE,CAjBgB,GCMRu6C,GAAe,WAGjC,OAAAz6C,GAFD,SAAAy6C,IAAc96C,OAAA86C,GACZA,EAAgB76C,aAAaC,MAAMC,KAAMC,UAC3C,GAAC,CAAA,CAAAE,IAAA,sBAAAC,MAOD,WACE,IAAM0wB,EAAY,IAAIrB,GACtBzvB,KAAK46C,eAGL,IAFA,IAAM/6B,EAAK7f,KAAK4N,WACZitC,EAASh7B,EAAG7R,OACT6R,EAAG/R,WAAW,CACnB,IAAMgtC,EAAKj7B,EAAG7R,OACdhO,KAAK+6C,mBAAmBF,EAAQC,EAAIhqB,GACpC+pB,EAASC,CACX,CACA,OAAOhqB,EAAUxI,mBACnB,GAAC,CAAAnoB,IAAA,oBAAAC,MACD,WACE,IAAM46C,EAAyB,IAAI57B,GACnCpf,KAAKi7C,+BAA+BD,GACpCh7C,KAAKk7C,kCAAkCF,GACvC,IAAK,IAAIn7B,EAAKm7B,EAAuBptC,WAAYiS,EAAG/R,WAAa,CAC/D,IAAMqtC,EAAct7B,EAAG7R,OAAOotC,WAC9Bp7C,KAAKiR,IAAIjR,KAAKuqC,MAAM1tB,cAAcs+B,GAAcA,EAClD,CACF,GAAC,CAAAh7C,IAAA,qBAAAC,MACD,SAAmBi7C,EAAKC,GACtB,IAAI/pB,EAAO+pB,EAAI1e,aAAeye,EAAIze,aAAe,EACjD,GAAa,IAATrL,EAAY,MAAO,CAAC,IAAItqB,EAAWo0C,EAAIp9B,OAAQ,IAAIhX,EAAWq0C,EAAIr9B,QACtE,IAAMs9B,EAAiBv7C,KAAKuqC,MAAM1tB,cAAcy+B,EAAI1e,cAC9C4e,EAAYF,EAAIG,eAAiBH,EAAIr9B,MAAMnW,SAASyzC,GACrDC,GACHjqB,IAEF,IAAM/T,EAAM,IAAIpM,MAAMmgB,GAAMha,KAAK,MAC7BmkC,EAAM,EACVl+B,EAAIk+B,KAAS,IAAIz0C,EAAWo0C,EAAIp9B,OAChC,IAAK,IAAI3Z,EAAI+2C,EAAIze,aAAe,EAAGt4B,GAAKg3C,EAAI1e,aAAct4B,IACxDkZ,EAAIk+B,KAAS17C,KAAKuqC,MAAM1tB,cAAcvY,GAGxC,OADIk3C,IAAWh+B,EAAIk+B,GAAO,IAAIz0C,EAAWq0C,EAAIr9B,QACtCT,CACT,GAAC,CAAArd,IAAA,QAAAC,MACD,SAAMk/B,GACJA,EAAIC,QAAQ,kBACZ,IAAK,IAAI1f,EAAK7f,KAAK4N,WAAYiS,EAAG/R,WAAa,CAClC+R,EAAG7R,OACX66B,MAAMvJ,EACX,CACF,GAAC,CAAAn/B,IAAA,oCAAAC,MACD,SAAkC46C,GAChC,IAAK,IAAI12C,EAAI,EAAGA,EAAItE,KAAKuqC,MAAMp5B,OAAS,EAAG7M,IAAK,CAC9C,IAAM4lB,EAAKlqB,KAAKuqC,MAAM1tB,cAAcvY,GACzBtE,KAAKuqC,MAAM1tB,cAAcvY,EAAI,GACxC,IAAM6G,EAAKnL,KAAKuqC,MAAM1tB,cAAcvY,EAAI,GACpC4lB,EAAGpiB,SAASqD,IACd6vC,EAAuB/pC,IAAI+B,GAAQ0B,QAAQpQ,EAAI,GAEnD,CACF,GAAC,CAAAnE,IAAA,qBAAAC,MACD,SAAmBi7C,EAAKC,EAAKxqB,GAC3B,IAAMtT,EAAMxd,KAAK27C,mBAAmBN,EAAKC,GACzCxqB,EAAU7f,IAAIuM,GAAK,EACrB,GAAC,CAAArd,IAAA,WAAAC,MACD,WACE,OAAOJ,KAAK47C,SAAStqC,SAAS1D,UAChC,GAAC,CAAAzN,IAAA,gBAAAC,MACD,SAAcy7C,GACZ77C,KAAK46C,eACL56C,KAAK87C,oBAGL,IAFA,IAAMj8B,EAAK7f,KAAK4N,WACZitC,EAASh7B,EAAG7R,OACT6R,EAAG/R,WAAW,CACnB,IAAMgtC,EAAKj7B,EAAG7R,OACR+tC,EAAU/7C,KAAKg8C,gBAAgBnB,EAAQC,GAC7Ce,EAAS5qC,IAAI8qC,GACblB,EAASC,CACX,CACF,GAAC,CAAA36C,IAAA,oBAAAC,MACD,SAAkBi7C,EAAKC,EAAKW,GAC1B,IAAKZ,EAAIp9B,MAAMnW,SAASwzC,EAAIr9B,OAAQ,OAAO,EAC3C,IAAIi+B,EAAqBZ,EAAI1e,aAAeye,EAAIze,aAIhD,OAHK0e,EAAIG,cACPS,IAEyB,IAAvBA,IACFD,EAAqB,GAAKZ,EAAIze,aAAe,GACtC,EAGX,GAAC,CAAAz8B,IAAA,iCAAAC,MACD,SAA+B46C,GAI7B,IAHA,IAAMiB,EAAuB,IAAI7qC,MAAM,GAAGmG,KAAK,MACzCsI,EAAK7f,KAAK4N,WACZitC,EAASh7B,EAAG7R,OACT6R,EAAG/R,WAAW,CACnB,IAAMgtC,EAAKj7B,EAAG7R,OACMhO,KAAKm8C,kBAAkBtB,EAAQC,EAAImB,IACtCjB,EAAuB/pC,IAAI+B,GAAQ0B,QAAQunC,EAAqB,KACjFpB,EAASC,CACX,CACF,GAAC,CAAA36C,IAAA,UAAAC,MACD,WACE,OAAOJ,KAAKuqC,KACd,GAAC,CAAApqC,IAAA,eAAAC,MACD,WACE,IAAMg8C,EAAcp8C,KAAKuqC,MAAMp5B,OAAS,EACxCnR,KAAKiR,IAAIjR,KAAKuqC,MAAM1tB,cAAc,GAAI,GACtC7c,KAAKiR,IAAIjR,KAAKuqC,MAAM1tB,cAAcu/B,GAAcA,EAClD,GAAC,CAAAj8C,IAAA,kBAAAC,MACD,SAAgBi7C,EAAKC,GACnB,IAAM99B,EAAMxd,KAAK27C,mBAAmBN,EAAKC,GACzC,OAAO,IAAIe,GAAmB7+B,EAAKxd,KAAKuqC,MAAM+R,UAChD,GAAC,CAAAn8C,IAAA,MAAAC,MACD,SAAIy+B,EAAOjC,GACT,IAAM2f,EAAQ,IAAInC,GAAYp6C,KAAKuqC,MAAO1L,EAAOjC,EAAc58B,KAAKuqC,MAAMiS,iBAAiB5f,IACrFke,EAAK96C,KAAK47C,SAASrzC,IAAIg0C,GAC7B,OAAW,OAAPzB,GACFx0C,EAAOG,OAAOq0C,EAAG78B,MAAMnW,SAAS+2B,GAAQ,gDACjCic,IAET96C,KAAK47C,SAAStmB,IAAIinB,EAAOA,GAClBA,EACT,GAAC,CAAAp8C,IAAA,6BAAAC,MACD,SAA2Bq8C,GACzB,IAAMjY,EAAUxkC,KAAKuqC,MAAM5sB,iBAErB++B,EADSD,EAAWl0C,IAAI,GACXsU,cAAc,GACjC,IAAK6/B,EAAI50C,SAAS08B,EAAQ,IAAK,MAAM,IAAIt+B,EAAiB,iCAAmCw2C,GAC7F,IACMC,EADSF,EAAWl0C,IAAIk0C,EAAWtrC,OAAS,GACzBwM,iBACnBi/B,EAAMD,EAAUA,EAAUj7C,OAAS,GACzC,IAAKk7C,EAAI90C,SAAS08B,EAAQA,EAAQ9iC,OAAS,IAAK,MAAM,IAAIwE,EAAiB,+BAAiC02C,EAC9G,IAAC,CAAA,CAAAz8C,IAAA,eAAAC,MAtID,WACEJ,KAAK47C,SAAW,IAAIjU,GACpB3nC,KAAKuqC,MAAQ,KACb,IAAMhG,EAAOtkC,UAAU,GACvBD,KAAKuqC,MAAQhG,CACf,IAAC,CATiC,GCTfsY,GAAM,WAAA,SAAAA,IAAAh9C,OAAAg9C,EAAA,CAAA,OAAA38C,EAAA28C,EAAA,KAAA,CAAA,CAAA18C,IAAA,SAAAC,MACzB,WACE,GAA4B,iBAAjBH,UAAU,IAA2C,iBAAjBA,UAAU,GAAiB,CACxE,IAAMiI,EAAKjI,UAAU,GAAIkI,EAAKlI,UAAU,GACxC,GAAW,IAAPiI,GAAqB,IAAPC,EAAY,MAAM,IAAInF,EAAyB,yCAA2CkF,EAAK,KAAOC,EAAK,MAC7H,IAAM20C,EAAMj8C,KAAKC,IAAIoH,GACf60C,EAAMl8C,KAAKC,IAAIqH,GACrB,OAAID,GAAM,EACJC,GAAM,EACJ20C,GAAOC,EAAY,EAAe,EAEpCD,GAAOC,EAAY,EAAe,EAGpC50C,GAAM,EACJ20C,GAAOC,EAAY,EAAe,EAEpCD,GAAOC,EAAY,EAAe,CAGxC,CAAO,GAAI98C,UAAU,aAAcgH,GAAchH,UAAU,aAAcgH,EAAY,CACnF,IAAMijB,EAAKjqB,UAAU,GAAIiL,EAAKjL,UAAU,GAClCiI,EAAKgD,EAAGxF,EAAIwkB,EAAGxkB,EACfyC,EAAK+C,EAAGvF,EAAIukB,EAAGvkB,EACrB,GAAW,IAAPuC,GAAqB,IAAPC,EAAY,MAAM,IAAInF,EAAyB,sDAAwDknB,GACzH,OAAO2yB,EAAOhD,OAAO3xC,EAAIC,EAC3B,CACF,IAAC,CA3BwB,GCFN60C,GAAa,WAAA,OAAA98C,GAAA,SAAA88C,IAAAn9C,OAAAm9C,EAAA,GAAA,CAAA,CAAA78C,IAAA,iBAAAC,MAChC,WAAiB,GAAE,CAAAD,IAAA,OAAAC,MACnB,WAAO,GAAE,CAAAD,IAAA,gBAAAC,MACT,SAAckE,GAAG,GAAE,CAAAnE,IAAA,WAAAC,MACnB,WAAW,GAAE,CAAAD,IAAA,UAAAC,MACb,SAAQ68C,GAAM,GAAE,CAAA98C,IAAA,UAAAC,MAChB,WAAU,IAAE,CANoB,GCCb88C,GAAoB,WAAA,OAAAh9C,GAAA,SAAAg9C,IAAAr9C,OAAAq9C,EAAA,GAAA,CAAA,CAAA/8C,IAAA,kBAAAC,MACvC,SAAgBy+B,EAAOjC,GAAc,GAAE,CAAAz8B,IAAA,cAAAoI,IACvC,WACE,MAAO,CAACy0C,GACV,IAAC,CAJsC,GCMpBX,GAAkB,WACrC,SAAAA,IAAcx8C,OAAAw8C,GACZA,EAAmBv8C,aAAaC,MAAMC,KAAMC,UAC9C,CAAC,OAAAC,EAAAm8C,EAAA,CAAA,CAAAl8C,IAAA,iBAAAC,MAuBD,WACE,OAAOJ,KAAKujC,IACd,GAAC,CAAApjC,IAAA,OAAAC,MACD,WACE,OAAOJ,KAAKujC,KAAK7hC,MACnB,GAAC,CAAAvB,IAAA,gBAAAC,MACD,SAAckE,GACZ,OAAOtE,KAAKujC,KAAKj/B,EACnB,GAAC,CAAAnE,IAAA,WAAAC,MACD,WACE,OAAOJ,KAAKujC,KAAK,GAAG38B,OAAO5G,KAAKujC,KAAKvjC,KAAKujC,KAAK7hC,OAAS,GAC1D,GAAC,CAAAvB,IAAA,mBAAAC,MACD,SAAiBmS,GACf,OAAIA,IAAUvS,KAAKujC,KAAK7hC,OAAS,GAAW,EACrC1B,KAAKm9C,WAAWn9C,KAAK6c,cAActK,GAAQvS,KAAK6c,cAActK,EAAQ,GAC/E,GAAC,CAAApS,IAAA,UAAAC,MACD,SAAQ68C,GACNj9C,KAAKo9C,MAAQH,CACf,GAAC,CAAA98C,IAAA,aAAAC,MACD,SAAW8pB,EAAIhf,GACb,OAAIgf,EAAGpiB,SAASoD,GAAY,EACrB2xC,GAAOhD,OAAO3vB,EAAIhf,EAC3B,GAAC,CAAA/K,IAAA,UAAAC,MACD,WACE,OAAOJ,KAAKo9C,KACd,GAAC,CAAAj9C,IAAA,kBAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OAAc,CAC1B,IAAMm9B,EAAQ5+B,UAAU,GAAI28B,EAAe38B,UAAU,GACrDD,KAAKq9C,oBAAoBxe,EAAOjC,EAClC,MAAO,GAAyB,IAArB38B,UAAUyB,OAAc,CACjC,IAAyBk7B,EAAe38B,UAAU,GAA8B48B,EAAW58B,UAAU,GAC/F4+B,EAAQ,IAAI53B,EADPhH,UAAU,GACWq9C,gBAAgBzgB,IAChD78B,KAAKu9C,gBAAgB1e,EAAOjC,EAC9B,CACF,GAAC,CAAAz8B,IAAA,WAAAC,MACD,WACE,OAAOo8B,GAAUyB,aAAa,IAAI1L,GAAwBvyB,KAAKujC,MACjE,GAAC,CAAApjC,IAAA,cAAAC,MACD,WACE,OAAOJ,KAAKw9C,SACd,GAAC,CAAAr9C,IAAA,sBAAAC,MACD,SAAoBy+B,EAAOjC,GACzB,IAAI6gB,EAAyB7gB,EACvB8gB,EAAeD,EAAyB,EAC9C,GAAIC,EAAe19C,KAAKujC,KAAK7hC,OAAQ,CACnC,IAAMi8C,EAAS39C,KAAKujC,KAAKma,GACrB7e,EAAM/2B,SAAS61C,KACjBF,EAAyBC,EAE7B,CAEA,OADW19C,KAAKw9C,UAAUvsC,IAAI4tB,EAAO4e,EAEvC,GAAC,CAAAt9C,IAAA,mBAAAC,MACD,SAAiBw9C,EAAIhhB,EAAcyF,GACjC,IAAK,IAAI/9B,EAAI,EAAGA,EAAIs5C,EAAGC,qBAAsBv5C,IAC3CtE,KAAKu9C,gBAAgBK,EAAIhhB,EAAcyF,EAAW/9B,EAEtD,GAAC,CAAAnE,IAAA,cAAAoI,IACD,WACE,MAAO,CAAC20C,GACV,IAAC,CAAA,CAAA/8C,IAAA,eAAAC,MAnFD,WACEJ,KAAKw9C,UAAY,IAAI7C,GAAgB36C,MACrCA,KAAKujC,KAAO,KACZvjC,KAAKo9C,MAAQ,KACb,IAAM5/B,EAAMvd,UAAU,GAAIg9C,EAAOh9C,UAAU,GAC3CD,KAAKujC,KAAO/lB,EACZxd,KAAKo9C,MAAQH,CACf,GAAC,CAAA98C,IAAA,qBAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OAAc,CAC1B,IAAMo8C,EAAa79C,UAAU,GACvB89C,EAAiB,IAAI3+B,GAE3B,OADAi9B,EAAmB2B,mBAAmBF,EAAYC,GAC3CA,CACT,CAAO,GAAyB,IAArB99C,UAAUyB,OAEnB,IADA,IAAiCq8C,EAAiB99C,UAAU,GACnDqE,EADUrE,UAAU,GACL2N,WAAYtJ,EAAEwJ,WAAa,CACtCxJ,EAAE0J,OACViwC,cAAcC,cAAcH,EACjC,CAEJ,IAAC,CAzBoC,GCClBI,GAAW,WAC9B,SAAAA,IAAct+C,OAAAs+C,GACZA,EAAYr+C,aAAaC,MAAMC,KAAMC,UACvC,CAAC,OAAAC,EAAAi+C,EAAA,CAAA,CAAAh+C,IAAA,OAAAC,MAqBD,WACE,OAAOS,KAAK6K,IAAI1L,KAAKkqB,GAAGxkB,EAAG1F,KAAKkL,GAAGxF,EACrC,GAAC,CAAAvF,IAAA,mBAAAC,MACD,WACE,GAAIH,UAAU,aAAck+C,EAAa,CACvC,IAAMC,EAAMn+C,UAAU,GAChBo+C,EAAUliC,GAAY5J,MAAMvS,KAAKkqB,GAAIlqB,KAAKkL,GAAIkzC,EAAIl0B,IAClDo0B,EAAUniC,GAAY5J,MAAMvS,KAAKkqB,GAAIlqB,KAAKkL,GAAIkzC,EAAIlzC,IACxD,OAAImzC,GAAW,GAAKC,GAAW,GAC3BD,GAAW,GAAKC,GAAW,EADUz9C,KAAK+K,IAAIyyC,EAASC,GAEpD,CACR,CAAM,GAAIr+C,UAAU,aAAcgH,EAAY,CAC7C,IAAMoD,EAAIpK,UAAU,GACpB,OAAOkc,GAAY5J,MAAMvS,KAAKkqB,GAAIlqB,KAAKkL,GAAIb,EAC7C,CACF,GAAC,CAAAlK,IAAA,aAAAC,MACD,SAAWm+C,GACT,OAAOA,EAAYz1B,iBAAiB,CAAC9oB,KAAKkqB,GAAIlqB,KAAKkL,IACrD,GAAC,CAAA/K,IAAA,aAAAC,MACD,WACE,OAAOJ,KAAKkqB,GAAGxkB,IAAM1F,KAAKkL,GAAGxF,CAC/B,GAAC,CAAAvF,IAAA,SAAAC,MACD,SAAO2H,GACL,KAAMA,aAAao2C,GACjB,OAAO,EAET,IAAM52C,EAAQQ,EACd,OAAO/H,KAAKkqB,GAAGtjB,OAAOW,EAAM2iB,KAAOlqB,KAAKkL,GAAGtE,OAAOW,EAAM2D,GAC1D,GAAC,CAAA/K,IAAA,eAAAC,MACD,SAAaqkB,GACX,IAAMm5B,EAAK,IAAIjf,GAEf,OADAif,EAAG5c,oBAAoBhhC,KAAKkqB,GAAIlqB,KAAKkL,GAAIuZ,EAAKyF,GAAIzF,EAAKvZ,IACnD0yC,EAAGlgB,kBAA0BkgB,EAAGN,gBAAgB,GAC7C,IACT,GAAC,CAAAn9C,IAAA,UAAAC,MACD,WACE,GAAIH,UAAU,aAAcgH,EAAY,CACtC,IAAMoD,EAAIpK,UAAU,GACpB,GAAIoK,EAAEzD,OAAO5G,KAAKkqB,KAAO7f,EAAEzD,OAAO5G,KAAKkL,IAAK,OAAO,IAAIjE,EAAWoD,GAClE,IAAMyL,EAAI9V,KAAKw+C,iBAAiBn0C,GAC1B4T,EAAQ,IAAIhX,EAGlB,OAFAgX,EAAMvY,EAAI1F,KAAKkqB,GAAGxkB,EAAIoQ,GAAK9V,KAAKkL,GAAGxF,EAAI1F,KAAKkqB,GAAGxkB,GAC/CuY,EAAMtY,EAAI3F,KAAKkqB,GAAGvkB,EAAImQ,GAAK9V,KAAKkL,GAAGvF,EAAI3F,KAAKkqB,GAAGvkB,GACxCsY,CACR,CAAM,GAAIhe,UAAU,aAAck+C,EAAa,CAC9C,IAAMC,EAAMn+C,UAAU,GAChBw+C,EAAMz+C,KAAKw+C,iBAAiBJ,EAAIl0B,IAChCw0B,EAAM1+C,KAAKw+C,iBAAiBJ,EAAIlzC,IACtC,GAAIuzC,GAAO,GAAOC,GAAO,EAAK,OAAO,KACrC,GAAID,GAAO,GAAOC,GAAO,EAAK,OAAO,KACrC,IAAIC,EAAQ3+C,KAAK4+C,QAAQR,EAAIl0B,IACzBu0B,EAAM,IAAKE,EAAQ3+C,KAAKkqB,IACxBu0B,EAAM,IAAKE,EAAQ3+C,KAAKkL,IAC5B,IAAI2zC,EAAQ7+C,KAAK4+C,QAAQR,EAAIlzC,IAG7B,OAFIwzC,EAAM,IAAKG,EAAQ7+C,KAAKkqB,IACxBw0B,EAAM,IAAKG,EAAQ7+C,KAAKkL,IACrB,IAAIizC,EAAYQ,EAAOE,EAChC,CACF,GAAC,CAAA1+C,IAAA,YAAAC,MACD,WACMJ,KAAKkL,GAAGiD,UAAUnO,KAAKkqB,IAAM,GAAGlqB,KAAK2oB,SAC3C,GAAC,CAAAxoB,IAAA,QAAAC,MACD,WACE,OAAOS,KAAKopC,MAAMjqC,KAAKkL,GAAGvF,EAAI3F,KAAKkqB,GAAGvkB,EAAG3F,KAAKkL,GAAGxF,EAAI1F,KAAKkqB,GAAGxkB,EAC/D,GAAC,CAAAvF,IAAA,gBAAAC,MACD,SAAckE,GACZ,OAAU,IAANA,EAAgBtE,KAAKkqB,GAClBlqB,KAAKkL,EACd,GAAC,CAAA/K,IAAA,wBAAAC,MACD,SAAsBiK,GACpB,OAAO2Z,GAAS86B,yBAAyBz0C,EAAGrK,KAAKkqB,GAAIlqB,KAAKkL,GAC5D,GAAC,CAAA/K,IAAA,OAAAC,MACD,WACE,OAAOS,KAAK6K,IAAI1L,KAAKkqB,GAAGvkB,EAAG3F,KAAKkL,GAAGvF,EACrC,GAAC,CAAAxF,IAAA,WAAAC,MACD,WACE,OAAO+9C,EAAYY,SAAS/+C,KAAKkqB,GAAIlqB,KAAKkL,GAC5C,GAAC,CAAA/K,IAAA,mBAAAC,MACD,SAAiBiK,GACf,GAAIA,EAAEzD,OAAO5G,KAAKkqB,IAAK,OAAO,EAC9B,GAAI7f,EAAEzD,OAAO5G,KAAKkL,IAAK,OAAO,EAC9B,IAAMhD,EAAKlI,KAAKkL,GAAGxF,EAAI1F,KAAKkqB,GAAGxkB,EACzByC,EAAKnI,KAAKkL,GAAGvF,EAAI3F,KAAKkqB,GAAGvkB,EACzBmU,EAAM5R,EAAKA,EAAKC,EAAKA,EAC3B,OAAI2R,GAAO,EAAYrV,EAAOE,MAClB0F,EAAE3E,EAAI1F,KAAKkqB,GAAGxkB,GAAKwC,GAAMmC,EAAE1E,EAAI3F,KAAKkqB,GAAGvkB,GAAKwC,GAAM2R,CAEhE,GAAC,CAAA3Z,IAAA,gBAAAC,MACD,SAAcqkB,GACZ,IAAMoa,EAAQ7+B,KAAKo/B,aAAa3a,GAChC,GAAc,OAAVoa,EACF,MAAO,CAACA,EAAOA,GAEjB,IAAMmgB,EAAY,IAAI5tC,MAAM,GAAGmG,KAAK,MAChCmN,EAAcjgB,EAAOQ,UACrB0f,EAAO,KACLs6B,EAAUj/C,KAAKk/C,aAAaz6B,EAAKyF,IACvCxF,EAAcu6B,EAAQp0C,SAAS4Z,EAAKyF,IACpC80B,EAAU,GAAKC,EACfD,EAAU,GAAKv6B,EAAKyF,GACpB,IAAMi1B,EAAUn/C,KAAKk/C,aAAaz6B,EAAKvZ,KACvCyZ,EAAOw6B,EAAQt0C,SAAS4Z,EAAKvZ,KAClBwZ,IACTA,EAAcC,EACdq6B,EAAU,GAAKG,EACfH,EAAU,GAAKv6B,EAAKvZ,IAEtB,IAAMk0C,EAAU36B,EAAKy6B,aAAal/C,KAAKkqB,KACvCvF,EAAOy6B,EAAQv0C,SAAS7K,KAAKkqB,KAClBxF,IACTA,EAAcC,EACdq6B,EAAU,GAAKh/C,KAAKkqB,GACpB80B,EAAU,GAAKI,GAEjB,IAAMC,EAAU56B,EAAKy6B,aAAal/C,KAAKkL,IAOvC,OANAyZ,EAAO06B,EAAQx0C,SAAS7K,KAAKkL,KAClBwZ,IACTA,EAAcC,EACdq6B,EAAU,GAAKh/C,KAAKkL,GACpB8zC,EAAU,GAAKK,GAEVL,CACT,GAAC,CAAA7+C,IAAA,eAAAC,MACD,SAAaiK,GACX,IAAMi1C,EAASt/C,KAAKw+C,iBAAiBn0C,GACrC,OAAIi1C,EAAS,GAAKA,EAAS,EAClBt/C,KAAK4+C,QAAQv0C,GAERrK,KAAKkqB,GAAGrf,SAASR,GACjBrK,KAAKkL,GAAGL,SAASR,GACLrK,KAAKkqB,GACxBlqB,KAAKkL,EACd,GAAC,CAAA/K,IAAA,OAAAC,MACD,WACE,OAAOS,KAAK+K,IAAI5L,KAAKkqB,GAAGxkB,EAAG1F,KAAKkL,GAAGxF,EACrC,GAAC,CAAAvF,IAAA,YAAAC,MACD,WACE,OAAOJ,KAAKkqB,GAAGrf,SAAS7K,KAAKkL,GAC/B,GAAC,CAAA/K,IAAA,YAAAC,MACD,SAAU2H,GACR,IAAMR,EAAQQ,EACRw3C,EAAQv/C,KAAKkqB,GAAG/b,UAAU5G,EAAM2iB,IACtC,OAAc,IAAVq1B,EAAoBA,EACjBv/C,KAAKkL,GAAGiD,UAAU5G,EAAM2D,GACjC,GAAC,CAAA/K,IAAA,UAAAC,MACD,WACE,IAAMohC,EAAOxhC,KAAKkqB,GAClBlqB,KAAKkqB,GAAKlqB,KAAKkL,GACflL,KAAKkL,GAAKs2B,CACZ,GAAC,CAAArhC,IAAA,aAAAC,MACD,SAAWmH,GACT,OAAOvH,KAAKkqB,GAAGtjB,OAAOW,EAAM2iB,KAAOlqB,KAAKkL,GAAGtE,OAAOW,EAAM2D,KAAOlL,KAAKkqB,GAAGtjB,OAAOW,EAAM2D,KAAOlL,KAAKkL,GAAGtE,OAAOW,EAAM2iB,GAClH,GAAC,CAAA/pB,IAAA,mBAAAC,MACD,SAAiBqkB,GAEf,OADczC,GAAaod,aAAap/B,KAAKkqB,GAAIlqB,KAAKkL,GAAIuZ,EAAKyF,GAAIzF,EAAKvZ,GAE1E,GAAC,CAAA/K,IAAA,OAAAC,MACD,WACE,OAAOS,KAAK+K,IAAI5L,KAAKkqB,GAAGvkB,EAAG3F,KAAKkL,GAAGvF,EACrC,GAAC,CAAAxF,IAAA,mBAAAC,MACD,SAAiBo/C,EAAuBC,GACtC,IAAMC,EAAO1/C,KAAKkqB,GAAGxkB,EAAI85C,GAAyBx/C,KAAKkL,GAAGxF,EAAI1F,KAAKkqB,GAAGxkB,GAChEi6C,EAAO3/C,KAAKkqB,GAAGvkB,EAAI65C,GAAyBx/C,KAAKkL,GAAGvF,EAAI3F,KAAKkqB,GAAGvkB,GAChEuC,EAAKlI,KAAKkL,GAAGxF,EAAI1F,KAAKkqB,GAAGxkB,EACzByC,EAAKnI,KAAKkL,GAAGvF,EAAI3F,KAAKkqB,GAAGvkB,EACzBmU,EAAMjZ,KAAKwH,KAAKH,EAAKA,EAAKC,EAAKA,GACjCy3C,EAAK,EACLC,EAAK,EACT,GAAuB,IAAnBJ,EAAwB,CAC1B,GAAI3lC,GAAO,EAAK,MAAM,IAAI5B,sBAAsB,uDAChD0nC,EAAKH,EAAiBv3C,EAAK4R,EAC3B+lC,EAAKJ,EAAiBt3C,EAAK2R,CAC7B,CAIA,OADc,IAAI7S,EAFFy4C,EAAOG,EACPF,EAAOC,EAGzB,GAAC,CAAAz/C,IAAA,iBAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OAAc,CAC1B,IAAMo+C,EAAK7/C,UAAU,GACrBD,KAAK+/C,eAAeD,EAAG51B,GAAI41B,EAAG50C,GAChC,MAAO,GAAyB,IAArBjL,UAAUyB,OAAc,CACjC,IAAMwoB,EAAKjqB,UAAU,GAAIiL,EAAKjL,UAAU,GACxCD,KAAKkqB,GAAGxkB,EAAIwkB,EAAGxkB,EACf1F,KAAKkqB,GAAGvkB,EAAIukB,EAAGvkB,EACf3F,KAAKkL,GAAGxF,EAAIwF,EAAGxF,EACf1F,KAAKkL,GAAGvF,EAAIuF,EAAGvF,CACjB,CACF,GAAC,CAAAxF,IAAA,kBAAAC,MACD,SAAgB4/C,GACd,IAAIC,EAAUjgD,KAAKw+C,iBAAiBwB,GAEpC,OADIC,EAAU,EAAKA,EAAU,GAAcA,EAAU,GAAOx7C,EAAOG,MAAMq7C,MAAUA,EAAU,GACtFA,CACT,GAAC,CAAA9/C,IAAA,WAAAC,MACD,WACE,MAAO,eAAiBJ,KAAKkqB,GAAGxkB,EAAI,IAAM1F,KAAKkqB,GAAGvkB,EAAI,KAAO3F,KAAKkL,GAAGxF,EAAI,IAAM1F,KAAKkL,GAAGvF,EAAI,GAC7F,GAAC,CAAAxF,IAAA,eAAAC,MACD,WACE,OAAOJ,KAAKkqB,GAAGvkB,IAAM3F,KAAKkL,GAAGvF,CAC/B,GAAC,CAAAxF,IAAA,UAAAC,MACD,SAAQiK,GACN,IAAM4Z,EAAIjkB,KAAKkL,GAAGye,OAAS3pB,KAAKkqB,GAAGP,OAC7BzF,EAAIlkB,KAAKkqB,GAAGR,OAAS1pB,KAAKkL,GAAGwe,OAC7BrU,EAAIrV,KAAKkqB,GAAGP,QAAU3pB,KAAKkL,GAAGwe,OAAS1pB,KAAKkqB,GAAGR,QAAU1pB,KAAKkqB,GAAGR,QAAU1pB,KAAKkL,GAAGye,OAAS3pB,KAAKkqB,GAAGP,QACpGu2B,EAAWj8B,EAAIA,EAAIC,EAAIA,EACvBi8B,EAAUl8B,EAAIA,EAAIC,EAAIA,EACtBxe,EAAI2E,EAAEqf,OACN/jB,EAAI0E,EAAEsf,OAGZ,OAAO,IAAI1iB,IAFEk5C,EAAUz6C,EAAI,EAAIue,EAAIC,EAAIve,EAAI,EAAIse,EAAI5O,GAAK6qC,GAC5CC,EAAUx6C,EAAI,EAAIse,EAAIC,EAAIxe,EAAI,EAAIwe,EAAI7O,GAAK6qC,EAEzD,GAAC,CAAA//C,IAAA,WAAAC,MACD,WACE,GAAIH,UAAU,aAAck+C,EAAa,CACvC,IAAM2B,EAAK7/C,UAAU,GACrB,OAAO+jB,GAASo8B,iBAAiBpgD,KAAKkqB,GAAIlqB,KAAKkL,GAAI40C,EAAG51B,GAAI41B,EAAG50C,GAC9D,CAAM,GAAIjL,UAAU,aAAcgH,EAAY,CAC7C,IAAMoD,EAAIpK,UAAU,GACpB,OAAO+jB,GAASI,eAAe/Z,EAAGrK,KAAKkqB,GAAIlqB,KAAKkL,GAClD,CACF,GAAC,CAAA/K,IAAA,aAAAC,MACD,SAAWo/C,GACT,IAAMvhC,EAAQ,IAAIhX,EAGlB,OAFAgX,EAAMvY,EAAI1F,KAAKkqB,GAAGxkB,EAAI85C,GAAyBx/C,KAAKkL,GAAGxF,EAAI1F,KAAKkqB,GAAGxkB,GACnEuY,EAAMtY,EAAI3F,KAAKkqB,GAAGvkB,EAAI65C,GAAyBx/C,KAAKkL,GAAGvF,EAAI3F,KAAKkqB,GAAGvkB,GAC5DsY,CACT,GAAC,CAAA9d,IAAA,WAAAC,MACD,WACE,IAAIigD,EAAQ57C,EAAOc,iBAAiBvF,KAAKkqB,GAAGxkB,GAC5C26C,GAA8C,GAArC57C,EAAOc,iBAAiBvF,KAAKkqB,GAAGvkB,GACzC,IAAM26C,EAAQz/C,KAAKyT,MAAM+rC,GAASx/C,KAAKyT,MAAM+rC,GAAS,IAClDE,EAAQ97C,EAAOc,iBAAiBvF,KAAKkL,GAAGxF,GAG5C,OAFA66C,GAA8C,GAArC97C,EAAOc,iBAAiBvF,KAAKkL,GAAGvF,GAElC26C,GADOz/C,KAAKyT,MAAMisC,GAAS1/C,KAAKyT,MAAMisC,GAAS,IAExD,GAAC,CAAApgD,IAAA,cAAAoI,IACD,WACE,MAAO,CAACnF,EAAYE,EACtB,IAAC,CAAA,CAAAnD,IAAA,eAAAC,MAnQD,WAGE,GAFAJ,KAAKkqB,GAAK,KACVlqB,KAAKkL,GAAK,KACe,IAArBjL,UAAUyB,OACZy8C,EAAYr+C,aAAauG,KAAKrG,KAAM,IAAIiH,EAAc,IAAIA,QACrD,GAAyB,IAArBhH,UAAUyB,OAAc,CACjC,IAAMo+C,EAAK7/C,UAAU,GACrBk+C,EAAYr+C,aAAauG,KAAKrG,KAAM8/C,EAAG51B,GAAI41B,EAAG50C,GAChD,MAAO,GAAyB,IAArBjL,UAAUyB,OAAc,CACjC,IAAMwoB,EAAKjqB,UAAU,GAAIiL,EAAKjL,UAAU,GACxCD,KAAKkqB,GAAKA,EACVlqB,KAAKkL,GAAKA,CACZ,MAAO,GAAyB,IAArBjL,UAAUyB,OAAc,CACjC,IAAMujB,EAAKhlB,UAAU,GAAIilB,EAAKjlB,UAAU,GAAI+D,EAAK/D,UAAU,GAAImL,EAAKnL,UAAU,GAC9Ek+C,EAAYr+C,aAAauG,KAAKrG,KAAM,IAAIiH,EAAWge,EAAIC,GAAK,IAAIje,EAAWjD,EAAIoH,GACjF,CACF,GAAC,CAAAjL,IAAA,WAAAC,MACD,SAAgB8pB,EAAIhf,GAClB,OAAO,IAAIjE,GAAYijB,EAAGxkB,EAAIwF,EAAGxF,GAAK,GAAIwkB,EAAGvkB,EAAIuF,EAAGvF,GAAK,EAC3D,IAAC,CAvB6B,GCPX66C,GAA0B,WAG5C,OAAAtgD,GAFD,SAAAsgD,IAAc3gD,OAAA2gD,GACZA,EAA2B1gD,aAAaC,MAAMC,KAAMC,UACtD,GAAC,CAAA,CAAAE,IAAA,UAAAC,MAKD,WACE,GAAyB,IAArBH,UAAUyB,aAEP,GAAyB,IAArBzB,UAAUyB,OAAc,CACjC,IAA0B++C,EAASxgD,UAAU,GAAIygD,EAAMzgD,UAAU,GAAI0gD,EAAS1gD,UAAU,GAA5EA,UAAU,GAClB2gD,eAAeH,EAAQzgD,KAAK6gD,cAChCH,EAAIE,eAAeD,EAAQ3gD,KAAK8gD,cAChC9gD,KAAK+gD,QAAQ/gD,KAAK6gD,aAAc7gD,KAAK8gD,aACvC,CACF,IAAC,CAAA,CAAA3gD,IAAA,eAAAC,MAbD,WACEJ,KAAK6gD,aAAe,IAAI1C,GACxBn+C,KAAK8gD,aAAe,IAAI3C,EAC1B,IAAC,CAP4C,GCA1B6C,GAAa,WAG/B,OAAA9gD,GAFD,SAAA8gD,IAAcnhD,OAAAmhD,GACZA,EAAclhD,aAAaC,MAAMC,KAAMC,UACzC,GAAC,CAAA,CAAAE,IAAA,iBAAAC,MAcD,SAAemS,EAAOutC,GACpBA,EAAG51B,GAAKlqB,KAAKujC,KAAKhxB,GAClButC,EAAG50C,GAAKlL,KAAKujC,KAAKhxB,EAAQ,EAC5B,GAAC,CAAApS,IAAA,gBAAAC,MACD,SAAc83C,EAAW+I,EAAQC,EAAMC,GACrC,IAAMj3B,EAAKlqB,KAAKujC,KAAK0d,GACf/1C,EAAKlL,KAAKujC,KAAK2d,GACrB,GAAIA,EAAOD,GAAW,EAEpB,OADAE,EAAIC,OAAOphD,KAAMihD,GACV,KAET,IAAK/I,EAAUhuC,WAAWggB,EAAIhf,GAAK,OAAO,KAC1C,IAAMwb,EAAM7lB,KAAKyT,OAAO2sC,EAASC,GAAQ,GACrCD,EAASv6B,GACX1mB,KAAKqhD,cAAcnJ,EAAW+I,EAAQv6B,EAAKy6B,GAEzCz6B,EAAMw6B,GACRlhD,KAAKqhD,cAAcnJ,EAAWxxB,EAAKw6B,EAAMC,EAE7C,GAAC,CAAAhhD,IAAA,iBAAAC,MACD,WAGE,IAFA,IAAM6d,EAAQ,IAAI7M,MAAMpR,KAAKshD,KAAOthD,KAAKuhD,OAAS,GAAGhqC,KAAK,MACtDhF,EAAQ,EACHjO,EAAItE,KAAKuhD,OAAQj9C,GAAKtE,KAAKshD,KAAMh9C,IACxC2Z,EAAM1L,KAAWvS,KAAKujC,KAAKj/B,GAE7B,OAAO2Z,CACT,GAAC,CAAA9d,IAAA,kBAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OAAc,CAC1B,IAAM8/C,EAAKvhD,UAAU,GAAIwhD,EAAMxhD,UAAU,GACzCD,KAAK0hD,gBAAgB1hD,KAAKuhD,OAAQvhD,KAAKshD,KAAME,EAAIA,EAAGD,OAAQC,EAAGF,KAAMG,EACvE,MAAO,GAAyB,IAArBxhD,UAAUyB,OAAc,CACjC,IAAMu/C,EAAShhD,UAAU,GAAIihD,EAAOjhD,UAAU,GAAIuhD,EAAKvhD,UAAU,GAAIwgD,EAASxgD,UAAU,GAAI0hD,EAAO1hD,UAAU,GAAIwhD,EAAMxhD,UAAU,GACjI,GAAIihD,EAAOD,GAAW,GAAKU,EAAOlB,GAAW,EAE3C,OADAgB,EAAIV,QAAQ/gD,KAAMihD,EAAQO,EAAIf,GACvB,KAET,IAAKzgD,KAAK4hD,SAASX,EAAQC,EAAMM,EAAIf,EAAQkB,GAAO,OAAO,KAC3D,IAAME,EAAOhhD,KAAKyT,OAAO2sC,EAASC,GAAQ,GACpCY,EAAOjhD,KAAKyT,OAAOmsC,EAASkB,GAAQ,GACtCV,EAASY,IACPpB,EAASqB,GAAM9hD,KAAK0hD,gBAAgBT,EAAQY,EAAML,EAAIf,EAAQqB,EAAML,GACpEK,EAAOH,GAAM3hD,KAAK0hD,gBAAgBT,EAAQY,EAAML,EAAIM,EAAMH,EAAMF,IAElEI,EAAOX,IACLT,EAASqB,GAAM9hD,KAAK0hD,gBAAgBG,EAAMX,EAAMM,EAAIf,EAAQqB,EAAML,GAClEK,EAAOH,GAAM3hD,KAAK0hD,gBAAgBG,EAAMX,EAAMM,EAAIM,EAAMH,EAAMF,GAEtE,CACF,GAAC,CAAAthD,IAAA,QAAAC,MACD,SAAM2hD,GACJ/hD,KAAKgiD,IAAMD,CACb,GAAC,CAAA5hD,IAAA,SAAAC,MACD,SAAO83C,EAAWiJ,GAChBnhD,KAAKqhD,cAAcnJ,EAAWl4C,KAAKuhD,OAAQvhD,KAAKshD,KAAMH,EACxD,GAAC,CAAAhhD,IAAA,cAAAC,MACD,WACE,GAAkB,OAAdJ,KAAK0hB,KAAe,CACtB,IAAMwI,EAAKlqB,KAAKujC,KAAKvjC,KAAKuhD,QACpBr2C,EAAKlL,KAAKujC,KAAKvjC,KAAKshD,MAC1BthD,KAAK0hB,KAAO,IAAItY,EAAS8gB,EAAIhf,EAC/B,CACA,OAAOlL,KAAK0hB,IACd,GAAC,CAAAvhB,IAAA,WAAAC,MACD,SAAS6gD,EAAQC,EAAMM,EAAIf,EAAQkB,GACjC,OAAOv4C,EAASc,WAAWlK,KAAKujC,KAAK0d,GAASjhD,KAAKujC,KAAK2d,GAAOM,EAAGje,KAAKkd,GAASe,EAAGje,KAAKoe,GAC1F,GAAC,CAAAxhD,IAAA,cAAAC,MACD,WACE,OAAOJ,KAAKshD,IACd,GAAC,CAAAnhD,IAAA,gBAAAC,MACD,WACE,OAAOJ,KAAKuhD,MACd,GAAC,CAAAphD,IAAA,aAAAC,MACD,WACE,OAAOJ,KAAKiiD,QACd,GAAC,CAAA9hD,IAAA,QAAAC,MACD,WACE,OAAOJ,KAAKgiD,GACd,IAAC,CAAA,CAAA7hD,IAAA,eAAAC,MA5FD,WACEJ,KAAKujC,KAAO,KACZvjC,KAAKuhD,OAAS,KACdvhD,KAAKshD,KAAO,KACZthD,KAAK0hB,KAAO,KACZ1hB,KAAKiiD,SAAW,KAChBjiD,KAAKgiD,IAAM,KACX,IAAMxkC,EAAMvd,UAAU,GAAIgwB,EAAQhwB,UAAU,GAAIiwB,EAAMjwB,UAAU,GAAIiiD,EAAUjiD,UAAU,GACxFD,KAAKujC,KAAO/lB,EACZxd,KAAKuhD,OAAStxB,EACdjwB,KAAKshD,KAAOpxB,EACZlwB,KAAKiiD,SAAWC,CAClB,IAAC,CAhB+B,GCEbC,GAAoB,WAAA,SAAAA,IAAAtiD,OAAAsiD,EAAA,CAAA,OAAAjiD,EAAAiiD,EAAA,KAAA,CAAA,CAAAhiD,IAAA,eAAAC,MACvC,SAAoBod,EAAKyS,GAEvB,IADA,IAAImyB,EAAYnyB,EACTmyB,EAAY5kC,EAAI9b,OAAS,GAAK8b,EAAI4kC,GAAWt6C,SAAS0V,EAAI4kC,EAAY,KAC3EA,IAEF,GAAIA,GAAa5kC,EAAI9b,OAAS,EAC5B,OAAO8b,EAAI9b,OAAS,EAItB,IAFA,IAAM2gD,EAAYrZ,GAASyB,SAASjtB,EAAI4kC,GAAY5kC,EAAI4kC,EAAY,IAChEt8B,EAAOmK,EAAQ,EACZnK,EAAOtI,EAAI9b,QAAQ,CACxB,IAAK8b,EAAIsI,EAAO,GAAGhe,SAAS0V,EAAIsI,IAE9B,GADakjB,GAASyB,SAASjtB,EAAIsI,EAAO,GAAItI,EAAIsI,MACrCu8B,EAAW,MAE1Bv8B,GACF,CACA,OAAOA,EAAO,CAChB,GAAC,CAAA3lB,IAAA,YAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OAAc,CAC1B,IAAM8b,EAAMvd,UAAU,GACtB,OAAOkiD,EAAqBG,UAAU9kC,EAAK,KAC7C,CAAO,GAAyB,IAArBvd,UAAUyB,OAAc,CACjC,IAAM8b,EAAMvd,UAAU,GAAIiiD,EAAUjiD,UAAU,GACxCsiD,EAAS,IAAInjC,GACfojC,EAAa,EACjB,EAAG,CACD,IAAMC,EAAWN,EAAqBO,aAAallC,EAAKglC,GAClDhB,EAAK,IAAIR,GAAcxjC,EAAKglC,EAAYC,EAAUP,GACxDK,EAAOtxC,IAAIuwC,GACXgB,EAAaC,CACf,OAASD,EAAahlC,EAAI9b,OAAS,GACnC,OAAO6gD,CACT,CACF,IAAC,CApCsC,GCHpBI,GAAK,WAAA,OAAAziD,GAAA,SAAAyiD,IAAA9iD,OAAA8iD,EAAA,GAAA,CAAA,CAAAxiD,IAAA,eAAAC,MACxB,SAAa09C,GAAY,GAAE,CAAA39C,IAAA,qBAAAC,MAC3B,WAAqB,IAAE,CAFC,GCCLwiD,GAAe,WAGjC,OAAA1iD,GAFD,SAAA0iD,IAAc/iD,OAAA+iD,GACZA,EAAgB9iD,aAAaC,MAAMC,KAAMC,UAC3C,GAAC,CAAA,CAAAE,IAAA,wBAAAC,MAQD,SAAsByiD,GACpB7iD,KAAK8iD,QAAUD,CACjB,GAAC,CAAA1iD,IAAA,cAAAoI,IACD,WACE,MAAO,CAACo6C,GACV,IAAC,CAAA,CAAAxiD,IAAA,eAAAC,MAZD,WAEE,GADAJ,KAAK8iD,QAAU,KACU,IAArB7iD,UAAUyB,aAAsB,GAAyB,IAArBzB,UAAUyB,OAAc,CAC9D,IAAMmhD,EAAS5iD,UAAU,GACzBD,KAAK+iD,sBAAsBF,EAC7B,CACF,IAAC,CAViC,GCKfG,YAAYC,GAC/B,SAAAD,IAAc,IAAAxgD,EAEoC,OAFpC3C,OAAAmjD,GACZxgD,EAAAC,EAAAzC,KAAAgjD,GACAA,EAAaljD,aAAaC,MAAKyC,EAAOvC,WAAUuC,CAClD,CAAC,OAAAK,EAAAmgD,EAAAC,GAAA/iD,EAAA8iD,EAAA,CAAA,CAAA7iD,IAAA,oBAAAC,MAYD,WACE,OAAOJ,KAAKkjD,WACd,GAAC,CAAA/iD,IAAA,qBAAAC,MACD,WACE,OAAOi8C,GAAmB2B,mBAAmBh+C,KAAKmjD,iBACpD,GAAC,CAAAhjD,IAAA,WAAAC,MACD,WACE,OAAOJ,KAAKojD,MACd,GAAC,CAAAjjD,IAAA,MAAAC,MACD,SAAIijD,GAEF,IADA,IACS/+C,EADS69C,GAAqBG,UAAUe,EAAO1lC,iBAAkB0lC,GACnDz1C,WAAYtJ,EAAEwJ,WAAa,CAChD,IAAM0zC,EAAKl9C,EAAE0J,OACbwzC,EAAG8B,MAAMtjD,KAAKujD,cACdvjD,KAAKojD,OAAOrc,OAAOya,EAAGgC,cAAehC,GACrCxhD,KAAKkjD,YAAYjyC,IAAIuwC,EACvB,CACF,GAAC,CAAArhD,IAAA,eAAAC,MACD,SAAaqjD,GACXzjD,KAAKmjD,iBAAmBM,EACxB,IAAK,IAAIn/C,EAAIm/C,EAAgB71C,WAAYtJ,EAAEwJ,WACzC9N,KAAKiR,IAAI3M,EAAE0J,QAEbhO,KAAK0jD,iBACP,GAAC,CAAAvjD,IAAA,kBAAAC,MACD,WAEE,IADA,IAAMujD,EAAgB,IAAIC,GAAqB5jD,KAAK8iD,SAC3Cx+C,EAAItE,KAAKkjD,YAAYt1C,WAAYtJ,EAAEwJ,WAG1C,IAFA,IAAM+1C,EAAav/C,EAAE0J,OAEZH,EADa7N,KAAKojD,OAAOU,MAAMD,EAAWL,eACxB51C,WAAYC,EAAEC,WAAa,CACpD,IAAMi2C,EAAYl2C,EAAEG,OAKpB,GAJI+1C,EAAUC,QAAUH,EAAWG,UACjCH,EAAWnC,gBAAgBqC,EAAWJ,GACtC3jD,KAAKikD,cAEHjkD,KAAK8iD,QAAQ75B,SAAU,OAAO,IACpC,CAEJ,IAAC,CAAA,CAAA9oB,IAAA,eAAAC,MAlDD,WAME,GALAJ,KAAKkjD,YAAc,IAAI9jC,GACvBpf,KAAKojD,OAAS,IAAItM,GAClB92C,KAAKujD,WAAa,EAClBvjD,KAAKmjD,iBAAmB,KACxBnjD,KAAKikD,WAAa,EACO,IAArBhkD,UAAUyB,aAAsB,GAAyB,IAArBzB,UAAUyB,OAAc,CAC9D,IAAMwiD,EAAKjkD,UAAU,GACrB2iD,GAAgB9iD,aAAauG,KAAKrG,KAAMkkD,EAC1C,CACF,IAAC,EAfuCtB,IAyDpCgB,YAAoBO,GACxB,SAAAP,IAAc,IAAAzK,EAE4C,OAF5Ct5C,OAAA+jD,GACZzK,EAAA12C,EAAAzC,KAAA4jD,GACAA,EAAqB9jD,aAAaC,MAAKo5C,EAAOl5C,WAAUk5C,CAC1D,CAAC,OAAAt2C,EAAA+gD,EAAAO,GAAAjkD,EAAA0jD,EAAA,CAAA,CAAAzjD,IAAA,UAAAC,MAMD,WACE,GAAyB,IAArBH,UAAUyB,OAMZ,OAAOgnB,EAAAk7B,EAAA,UAAA5jD,KAAA,GAAcD,MAAMC,KAAMC,WALjC,IAA0BwgD,EAASxgD,UAAU,GAAIygD,EAAMzgD,UAAU,GAAI0gD,EAAS1gD,UAAU,GAClFmkD,EADMnkD,UAAU,GACNokD,aACVC,EAAM5D,EAAI2D,aAChBrkD,KAAKukD,IAAIC,qBAAqBJ,EAAK3D,EAAQ6D,EAAK3D,EAIpD,IAAC,CAAA,CAAAxgD,IAAA,eAAAC,MAdD,WACEJ,KAAKukD,IAAM,KACX,IAAML,EAAKjkD,UAAU,GACrBD,KAAKukD,IAAML,CACb,IAAC,EATgC1D,IAqBnCwC,GAAaY,qBAAuBA,GClFW,IAC1Ba,GAAyB,WAC5C,SAAAA,IAAc5kD,OAAA4kD,GACZA,EAA0B3kD,aAAaC,MAAMC,KAAMC,UACrD,CAAC,OAAAC,EAAAukD,EAAA,CAAA,CAAAtkD,IAAA,cAAAC,MAaD,SAAYskD,EAAIvyB,EAAIC,EAAIuyB,GACtB,IAAMz6B,EAAKlqB,KAAK4kD,WAAWF,GACrBx5C,EAAKlL,KAAK4kD,WAAWzyB,GACrBhnB,EAAKnL,KAAK4kD,WAAWxyB,GAC3B,QAAKpyB,KAAK6kD,UAAU36B,EAAIhf,EAAIC,OACvBnL,KAAK8kD,UAAU56B,EAAIhf,EAAIC,EAAIw5C,IACzB3kD,KAAK+kD,iBAAiB76B,EAAIhf,EAAIw5C,EAAItyB,EAAIuyB,GAC/C,GAAC,CAAAxkD,IAAA,2BAAAC,MACD,WAKE,IAJA,IAAImS,EAAQ,EACRyyC,EAAWhlD,KAAKilD,wBAAwB1yC,GACxC2yC,EAAYllD,KAAKilD,wBAAwBD,GACzCp1B,GAAY,EACTs1B,EAAYllD,KAAK4kD,WAAWljD,QAAQ,CACzC,IAAIyjD,GAAwB,EACxBnlD,KAAKolD,YAAY7yC,EAAOyyC,EAAUE,EAAWllD,KAAKqlD,gBACpDrlD,KAAKslD,WAAWN,GAAYP,EAA0Bc,OACtDJ,GAAwB,EACxBv1B,GAAY,GAEard,EAAvB4yC,EAA+BD,EAAwBF,EAC3DA,EAAWhlD,KAAKilD,wBAAwB1yC,GACxC2yC,EAAYllD,KAAKilD,wBAAwBD,EAC3C,CACA,OAAOp1B,CACT,GAAC,CAAAzvB,IAAA,qBAAAC,MACD,SAAmB8pB,EAAIhf,EAAIC,EAAIw5C,GAG7B,OAFoBxoC,GAAY5J,MAAM2X,EAAIhf,EAAIC,KACJnL,KAAKwlD,mBAElCxhC,GAASI,eAAelZ,EAAIgf,EAAI/e,GAC/Bw5C,CAChB,GAAC,CAAAxkD,IAAA,mBAAAC,MACD,SAAiB8pB,EAAI/e,EAAIu5C,EAAItyB,EAAIuyB,GAC/B,IAAIx0B,EAAMtvB,KAAKyT,OAAO8d,EAAKsyB,GAAMD,EAA0BgB,kBACvDt1B,GAAO,IAAGA,EAAM,GACpB,IAAK,IAAI7rB,EAAIogD,EAAIpgD,EAAI8tB,EAAI9tB,GAAK6rB,EAC5B,IAAKnwB,KAAK8kD,UAAU56B,EAAI/e,EAAInL,KAAK4kD,WAAWtgD,GAAIqgD,GAAc,OAAO,EAEvE,OAAO,CACT,GAAC,CAAAxkD,IAAA,YAAAC,MACD,SAAU8pB,EAAIhf,EAAIC,GAChB,IACM05C,EADc1oC,GAAY5J,MAAM2X,EAAIhf,EAAIC,KACZnL,KAAKwlD,kBACvC,OAAOX,CACT,GAAC,CAAA1kD,IAAA,WAAAC,MACD,SAASukD,GACP3kD,KAAKqlD,aAAexkD,KAAKC,IAAI6jD,GACzBA,EAAc,IAAG3kD,KAAKwlD,kBAAoBrpC,GAAYW,WAC1D9c,KAAKslD,WAAa,IAAIl0C,MAAMpR,KAAK4kD,WAAWljD,QAAQ6V,KAAK,MACzD,IAAIqY,GAAY,EAChB,GACEA,EAAY5vB,KAAK0lD,iCACZ91B,GACP,OAAO5vB,KAAK2lD,cACd,GAAC,CAAAxlD,IAAA,0BAAAC,MACD,SAAwBmS,GAEtB,IADA,IAAIvE,EAAOuE,EAAQ,EACZvE,EAAOhO,KAAK4kD,WAAWljD,QAAU1B,KAAKslD,WAAWt3C,KAAUy2C,EAA0Bc,QAAQv3C,IACpG,OAAOA,CACT,GAAC,CAAA7N,IAAA,YAAAC,MACD,SAAU8pB,EAAIhf,EAAIC,EAAIw5C,GAEpB,OADa3gC,GAASI,eAAelZ,EAAIgf,EAAI/e,GAC/Bw5C,CAChB,GAAC,CAAAxkD,IAAA,eAAAC,MACD,WAEE,IADA,IAAM0wB,EAAY,IAAIrB,GACbnrB,EAAI,EAAGA,EAAItE,KAAK4kD,WAAWljD,OAAQ4C,IACtCtE,KAAKslD,WAAWhhD,KAAOmgD,EAA0Bc,QAAQz0B,EAAU7f,IAAIjR,KAAK4kD,WAAWtgD,IAE7F,OAAOwsB,EAAUxI,mBACnB,IAAC,CAAA,CAAAnoB,IAAA,eAAAC,MAnFD,WACEJ,KAAK4kD,WAAa,KAClB5kD,KAAKqlD,aAAe,KACpBrlD,KAAKslD,WAAa,KAClBtlD,KAAKwlD,kBAAoBrpC,GAAYY,iBACrC,IAAM6oC,EAAY3lD,UAAU,GAC5BD,KAAK4kD,WAAagB,CACpB,GAAC,CAAAzlD,IAAA,WAAAC,MACD,SAAgBwlD,EAAWjB,GAEzB,OADa,IAAIF,EAA0BmB,GAC/BC,SAASlB,EACvB,IAAC,CAf2C,GAyF9CF,GAA0BqB,KAAO,EACjCrB,GAA0Bc,OAAS,EACnCd,GAA0BsB,KAAO,EACjCtB,GAA0BgB,iBAAmB,GC7Fa,IACrCO,GAAmB,WACtC,SAAAA,IAAcnmD,OAAAmmD,GACZA,EAAoBlmD,aAAaC,MAAMC,KAAMC,UAC/C,CAAC,OAAAC,EAAA8lD,EAAA,CAAA,CAAA7lD,IAAA,iBAAAC,MAOD,WAEE,OADcJ,KAAKimD,QAAQn2B,QAAQk2B,EAAoBE,sBAEzD,GAAC,CAAA/lD,IAAA,oBAAAC,MACD,SAAkBw2B,GAChB52B,KAAKy2B,gBAAkBG,CACzB,GAAC,CAAAz2B,IAAA,QAAAC,MACD,SAAM4e,GACJ,IAAMmnC,EAAQ,IAAIl/C,EAAW+X,GAE7B,GADAhf,KAAKy2B,gBAAgB7B,YAAYuxB,GAC7BnmD,KAAKomD,YAAYD,GAAQ,OAAO,KACpCnmD,KAAKimD,QAAQh1C,IAAIk1C,EACnB,GAAC,CAAAhmD,IAAA,UAAAC,MACD,WAAU,GAAE,CAAAD,IAAA,SAAAC,MACZ,SAAO4e,EAAIR,GACT,GAAIA,EACF,IAAK,IAAIla,EAAI,EAAGA,EAAI0a,EAAGtd,OAAQ4C,IAC7BtE,KAAKqmD,MAAMrnC,EAAG1a,SAGhB,IAAK,IAAIA,EAAI0a,EAAGtd,OAAS,EAAG4C,GAAK,EAAGA,IAClCtE,KAAKqmD,MAAMrnC,EAAG1a,GAGpB,GAAC,CAAAnE,IAAA,cAAAC,MACD,SAAY4e,GACV,GAAIhf,KAAKimD,QAAQ90C,OAAS,EAAG,OAAO,EACpC,IAAMm1C,EAAStmD,KAAKimD,QAAQ19C,IAAIvI,KAAKimD,QAAQ90C,OAAS,GAEtD,OADe6N,EAAGnU,SAASy7C,GACdtmD,KAAKumD,sBAEpB,GAAC,CAAApmD,IAAA,WAAAC,MACD,WAGE,OAFa,IAAIs1B,IACC5M,iBAAiB9oB,KAAK2d,kBAC5B7I,UACd,GAAC,CAAA3U,IAAA,YAAAC,MACD,WACE,GAAIJ,KAAKimD,QAAQ90C,OAAS,EAAG,OAAO,KACpC,IAAMq1C,EAAU,IAAIv/C,EAAWjH,KAAKimD,QAAQ19C,IAAI,IAC1C+9C,EAAStmD,KAAKimD,QAAQ19C,IAAIvI,KAAKimD,QAAQ90C,OAAS,GACtD,GAAIq1C,EAAQ5/C,OAAO0/C,GAAS,OAAO,KACnCtmD,KAAKimD,QAAQh1C,IAAIu1C,EACnB,GAAC,CAAArmD,IAAA,2BAAAC,MACD,SAAyBqmD,GACvBzmD,KAAKumD,uBAAyBE,CAChC,IAAC,CAAA,CAAAtmD,IAAA,eAAAC,MApDD,WACEJ,KAAKimD,QAAU,KACfjmD,KAAKy2B,gBAAkB,KACvBz2B,KAAKumD,uBAAyB,EAC9BvmD,KAAKimD,QAAU,IAAI7mC,EACrB,IAAC,CATqC,GA0DxC4mC,GAAoBE,sBAAwB,IAAI90C,MAAM,GAAGmG,KAAK,MC7DvB,IAClBmvC,GAAK,WAAA,SAAAA,IAAA7mD,OAAA6mD,EAAA,CAAA,OAAAxmD,EAAAwmD,EAAA,KAAA,CAAA,CAAAvmD,IAAA,YAAAC,MACxB,SAAiBumD,GACf,OAAiB,IAAVA,EAAgB9lD,KAAKoB,EAC9B,GAAC,CAAA9B,IAAA,YAAAC,MACD,SAAiB4pC,GACf,KAAOA,EAAQnpC,KAAKoB,IAAI+nC,GAAS0c,EAAME,WACvC,KAAO5c,IAAUnpC,KAAKoB,IAAI+nC,GAAS0c,EAAME,WACzC,OAAO5c,CACT,GAAC,CAAA7pC,IAAA,QAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OAAc,CAC1B,IAAM2I,EAAIpK,UAAU,GACpB,OAAOY,KAAKopC,MAAM5/B,EAAE1E,EAAG0E,EAAE3E,EAC3B,CAAO,GAAyB,IAArBzF,UAAUyB,OAAc,CACjC,IAAMwoB,EAAKjqB,UAAU,GAAIiL,EAAKjL,UAAU,GAClCiI,EAAKgD,EAAGxF,EAAIwkB,EAAGxkB,EACfyC,EAAK+C,EAAGvF,EAAIukB,EAAGvkB,EACrB,OAAO9E,KAAKopC,MAAM9hC,EAAID,EACxB,CACF,GAAC,CAAA/H,IAAA,UAAAC,MACD,SAAe8pB,EAAIhf,EAAIC,GACrB,IAAM07C,EAAM38B,EAAGxkB,EAAIwF,EAAGxF,EAChBohD,EAAM58B,EAAGvkB,EAAIuF,EAAGvF,EAItB,OADgBkhD,GAFJ17C,EAAGzF,EAAIwF,EAAGxF,GAEMohD,GADhB37C,EAAGxF,EAAIuF,EAAGvF,GAEL,CACnB,GAAC,CAAAxF,IAAA,WAAAC,MACD,SAAgB8pB,EAAIhf,EAAIC,GACtB,IAAM07C,EAAM38B,EAAGxkB,EAAIwF,EAAGxF,EAChBohD,EAAM58B,EAAGvkB,EAAIuF,EAAGvF,EAItB,OADgBkhD,GAFJ17C,EAAGzF,EAAIwF,EAAGxF,GAEMohD,GADhB37C,EAAGxF,EAAIuF,EAAGvF,GAEL,CACnB,GAAC,CAAAxF,IAAA,gBAAAC,MACD,SAAqB8pB,EAAIhf,EAAIC,GAC3B,IAAM47C,EAAYL,EAAM1c,MAAM9+B,EAAIgf,GAC5B88B,EAAYN,EAAM1c,MAAM9+B,EAAIC,GAClC,OAAOtK,KAAKC,IAAIkmD,EAAYD,EAC9B,GAAC,CAAA5mD,IAAA,oBAAAC,MACD,SAAyB4pC,GACvB,GAAIA,EAAQ,EAAK,CACf,KAAOA,EAAQ,GAAKA,GAAS0c,EAAME,WAC/B5c,GAAS0c,EAAME,aAAY5c,EAAQ,EACzC,KAAO,CACL,KAAOA,GAAS0c,EAAME,YAAY5c,GAAS0c,EAAME,WAC7C5c,EAAQ,IAAKA,EAAQ,EAC3B,CACA,OAAOA,CACT,GAAC,CAAA7pC,IAAA,eAAAC,MACD,SAAoB6mD,EAAMC,EAAMC,GAC9B,IAAMC,EAAKV,EAAM1c,MAAMkd,EAAMD,GACvBI,EAAKX,EAAM1c,MAAMkd,EAAMC,GAC7B,OAAOT,EAAMY,KAAKF,EAAIC,EACxB,GAAC,CAAAlnD,IAAA,OAAAC,MACD,SAAYmnD,EAAMC,GAChB,IAAIC,EAAW,KASf,OAPEA,EADEF,EAAOC,EACEA,EAAOD,EAEPA,EAAOC,GAEL3mD,KAAKoB,KAClBwlD,EAAW,EAAI5mD,KAAKoB,GAAKwlD,GAEpBA,CACT,GAAC,CAAAtnD,IAAA,YAAAC,MACD,SAAiBsnD,GACf,OAAOA,EAAe7mD,KAAKoB,GAAK,GAClC,GAAC,CAAA9B,IAAA,UAAAC,MACD,SAAemnD,EAAMC,GACnB,IAAMG,EAAe9mD,KAAK+mD,IAAIJ,EAAOD,GACrC,OAAII,EAAe,EACVjB,EAAM3pC,iBAEX4qC,EAAe,EACVjB,EAAM5pC,UAER4pC,EAAM32C,IACf,GAAC,CAAA5P,IAAA,uBAAAC,MACD,SAA4B6mD,EAAMC,EAAMC,GACtC,IAAMC,EAAKV,EAAM1c,MAAMkd,EAAMD,GAEvBY,EADKnB,EAAM1c,MAAMkd,EAAMC,GACTC,EACpB,OAAIS,IAAWhnD,KAAKoB,GAAW4lD,EAASnB,EAAME,WAC1CiB,EAAShnD,KAAKoB,GAAW4lD,EAASnB,EAAME,WACrCiB,CACT,IAAC,CAxFuB,GA0F1BnB,GAAME,WAAa,EAAM/lD,KAAKoB,GAC9BykD,GAAMoB,UAAYjnD,KAAKoB,GAAK,EAC5BykD,GAAMqB,UAAYlnD,KAAKoB,GAAK,EAC5BykD,GAAM3pC,iBAAmBZ,GAAYY,iBACrC2pC,GAAM5pC,UAAYX,GAAYW,UAC9B4pC,GAAM32C,KAAOoM,GAAYa,UCxFgD,IACpDgrC,GAAsB,WACzC,SAAAA,IAAcnoD,OAAAmoD,GACZA,EAAuBloD,aAAaC,MAAMC,KAAMC,UAClD,CAAC,OAAAC,EAAA8nD,EAAA,CAAA,CAAA7nD,IAAA,iBAAAC,MA2BD,SAAeiK,EAAG49C,GAQhB,GAPAjoD,KAAKkoD,IAAMloD,KAAKmoD,IAChBnoD,KAAKmoD,IAAMnoD,KAAKooD,IAChBpoD,KAAKooD,IAAM/9C,EACXrK,KAAKqoD,MAAMtI,eAAe//C,KAAKkoD,IAAKloD,KAAKmoD,KACzCnoD,KAAKsoD,qBAAqBtoD,KAAKqoD,MAAOroD,KAAKuoD,MAAOvoD,KAAKozC,UAAWpzC,KAAKwoD,UACvExoD,KAAKyoD,MAAM1I,eAAe//C,KAAKmoD,IAAKnoD,KAAKooD,KACzCpoD,KAAKsoD,qBAAqBtoD,KAAKyoD,MAAOzoD,KAAKuoD,MAAOvoD,KAAKozC,UAAWpzC,KAAK0oD,UACnE1oD,KAAKmoD,IAAIvhD,OAAO5G,KAAKooD,KAAM,OAAO,KACtC,IAAMrqC,EAAc5B,GAAY5J,MAAMvS,KAAKkoD,IAAKloD,KAAKmoD,IAAKnoD,KAAKooD,KACzDO,EAAc5qC,IAAgB5B,GAAYW,WAAa9c,KAAKuoD,QAAU32C,EAASE,MAAQiM,IAAgB5B,GAAYY,kBAAoB/c,KAAKuoD,QAAU32C,EAASG,MACjJ,IAAhBgM,EACF/d,KAAK4oD,aAAaX,GACXU,EACP3oD,KAAK6oD,eAAe9qC,EAAakqC,GAEjCjoD,KAAK8oD,cAAc/qC,EAAakqC,EAEpC,GAAC,CAAA9nD,IAAA,gBAAAC,MACD,SAAc8pB,EAAIhf,GAChB,IAAMkzC,EAAM,IAAID,GAAYj0B,EAAIhf,GAC1B69C,EAAU,IAAI5K,GACpBn+C,KAAKsoD,qBAAqBlK,EAAKxsC,EAASE,KAAM9R,KAAKozC,UAAW2V,GAC9D,IAAMC,EAAU,IAAI7K,GACpBn+C,KAAKsoD,qBAAqBlK,EAAKxsC,EAASG,MAAO/R,KAAKozC,UAAW4V,GAC/D,IAAM9gD,EAAKgD,EAAGxF,EAAIwkB,EAAGxkB,EACfyC,EAAK+C,EAAGvF,EAAIukB,EAAGvkB,EACfqkC,EAAQnpC,KAAKopC,MAAM9hC,EAAID,GAC7B,OAAQlI,KAAKipD,WAAWC,kBACxB,KAAKtpD,EAAiB2B,UACpBvB,KAAKmpD,SAAS9C,MAAM0C,EAAQ79C,IAC5BlL,KAAKopD,kBAAkBl+C,EAAI8+B,EAAQnpC,KAAKoB,GAAK,EAAG+nC,EAAQnpC,KAAKoB,GAAK,EAAGka,GAAYW,UAAW9c,KAAKozC,WACjGpzC,KAAKmpD,SAAS9C,MAAM2C,EAAQ99C,IAC5B,MACF,KAAKtL,EAAiBuC,SACpBnC,KAAKmpD,SAAS9C,MAAM0C,EAAQ79C,IAC5BlL,KAAKmpD,SAAS9C,MAAM2C,EAAQ99C,IAC5B,MACF,KAAKtL,EAAiBwC,WACpB,IAAMinD,EAAsB,IAAIpiD,EAChCoiD,EAAoB3jD,EAAI7E,KAAKC,IAAId,KAAKozC,WAAavyC,KAAKqB,IAAI8nC,GAC5Dqf,EAAoB1jD,EAAI9E,KAAKC,IAAId,KAAKozC,WAAavyC,KAAK+mD,IAAI5d,GAC5D,IAAMsf,EAAmB,IAAIriD,EAAW8hD,EAAQ79C,GAAGxF,EAAI2jD,EAAoB3jD,EAAGqjD,EAAQ79C,GAAGvF,EAAI0jD,EAAoB1jD,GAC3G4jD,EAAmB,IAAItiD,EAAW+hD,EAAQ99C,GAAGxF,EAAI2jD,EAAoB3jD,EAAGsjD,EAAQ99C,GAAGvF,EAAI0jD,EAAoB1jD,GACjH3F,KAAKmpD,SAAS9C,MAAMiD,GACpBtpD,KAAKmpD,SAAS9C,MAAMkD,GAGxB,GAAC,CAAAppD,IAAA,iBAAAC,MACD,WAEE,OADYJ,KAAKmpD,SAASxrC,gBAE5B,GAAC,CAAAxd,IAAA,eAAAC,MACD,SAAaiK,EAAGm/C,EAASC,EAAS5+C,GAChC,IAAMg0B,EAAQ7c,GAAaod,aAAaoqB,EAAQt/B,GAAIs/B,EAAQt+C,GAAIu+C,EAAQv/B,GAAIu/B,EAAQv+C,IACpF,GAAc,OAAV2zB,IACiBh0B,GAAY,EAAM,EAAMg0B,EAAMh0B,SAASR,GAAKxJ,KAAKC,IAAI+J,KACtD7K,KAAKipD,WAAWS,gBAEhC,OADA1pD,KAAKmpD,SAAS9C,MAAMxnB,GACb,KAGX7+B,KAAK2pD,oBAAoBH,EAASC,EAAS5+C,EAAU7K,KAAKipD,WAAWS,gBACvE,GAAC,CAAAvpD,IAAA,iBAAAC,MACD,SAAe2d,EAAakqC,GAC1B,GAAIjoD,KAAKwoD,SAASt9C,GAAGL,SAAS7K,KAAK0oD,SAASx+B,IAAMlqB,KAAKozC,UAAY4U,EAAuB4B,iCAExF,OADA5pD,KAAKmpD,SAAS9C,MAAMrmD,KAAKwoD,SAASt9C,IAC3B,KAELlL,KAAKipD,WAAWY,iBAAmBjqD,EAAiBe,WACtDX,KAAK8pD,aAAa9pD,KAAKmoD,IAAKnoD,KAAKwoD,SAAUxoD,KAAK0oD,SAAU1oD,KAAKozC,WACtDpzC,KAAKipD,WAAWY,iBAAmBjqD,EAAiBc,WAC7DV,KAAK+pD,aAAa/pD,KAAKwoD,SAAUxoD,KAAK0oD,WAElCT,GAAejoD,KAAKmpD,SAAS9C,MAAMrmD,KAAKwoD,SAASt9C,IACrDlL,KAAKgqD,gBAAgBhqD,KAAKmoD,IAAKnoD,KAAKwoD,SAASt9C,GAAIlL,KAAK0oD,SAASx+B,GAAInM,EAAa/d,KAAKozC,WACrFpzC,KAAKmpD,SAAS9C,MAAMrmD,KAAK0oD,SAASx+B,IAEtC,GAAC,CAAA/pB,IAAA,eAAAC,MACD,SAAaiK,GACXrK,KAAKmpD,SAAS9C,MAAM,IAAIp/C,EAAWoD,EAAE3E,EAAI1F,KAAKozC,UAAW/oC,EAAE1E,EAAI3F,KAAKozC,YACpEpzC,KAAKmpD,SAAS9C,MAAM,IAAIp/C,EAAWoD,EAAE3E,EAAI1F,KAAKozC,UAAW/oC,EAAE1E,EAAI3F,KAAKozC,YACpEpzC,KAAKmpD,SAAS9C,MAAM,IAAIp/C,EAAWoD,EAAE3E,EAAI1F,KAAKozC,UAAW/oC,EAAE1E,EAAI3F,KAAKozC,YACpEpzC,KAAKmpD,SAAS9C,MAAM,IAAIp/C,EAAWoD,EAAE3E,EAAI1F,KAAKozC,UAAW/oC,EAAE1E,EAAI3F,KAAKozC,YACpEpzC,KAAKmpD,SAASc,WAChB,GAAC,CAAA9pD,IAAA,cAAAC,MACD,SAAY4e,EAAIR,GACdxe,KAAKmpD,SAASe,OAAOlrC,EAAIR,EAC3B,GAAC,CAAAre,IAAA,kBAAAC,MACD,WACEJ,KAAKmpD,SAAS9C,MAAMrmD,KAAK0oD,SAASx+B,GACpC,GAAC,CAAA/pB,IAAA,kBAAAC,MACD,SAAgBiK,EAAG6f,EAAIhf,EAAIi/C,EAAWC,GACpC,IAAMvD,EAAM38B,EAAGxkB,EAAI2E,EAAE3E,EACfohD,EAAM58B,EAAGvkB,EAAI0E,EAAE1E,EACjB0kD,EAAaxpD,KAAKopC,MAAM6c,EAAKD,GAC3BxsC,EAAMnP,EAAGxF,EAAI2E,EAAE3E,EACf4U,EAAMpP,EAAGvF,EAAI0E,EAAE1E,EACf2kD,EAAWzpD,KAAKopC,MAAM3vB,EAAKD,GAC7B8vC,IAAchuC,GAAYW,UACxButC,GAAcC,IAAUD,GAAc,EAAMxpD,KAAKoB,IAEjDooD,GAAcC,IAAUD,GAAc,EAAMxpD,KAAKoB,IAEvDjC,KAAKmpD,SAAS9C,MAAMn8B,GACpBlqB,KAAKopD,kBAAkB/+C,EAAGggD,EAAYC,EAAUH,EAAWC,GAC3DpqD,KAAKmpD,SAAS9C,MAAMn7C,EACtB,GAAC,CAAA/K,IAAA,iBAAAC,MACD,WACEJ,KAAKmpD,SAAS9C,MAAMrmD,KAAK0oD,SAASx9C,GACpC,GAAC,CAAA/K,IAAA,mBAAAC,MACD,SAAiBmqD,EAAIC,EAAIntC,GACvBrd,KAAKmoD,IAAMoC,EACXvqD,KAAKooD,IAAMoC,EACXxqD,KAAKuoD,MAAQlrC,EACbrd,KAAKyoD,MAAM1I,eAAewK,EAAIC,GAC9BxqD,KAAKsoD,qBAAqBtoD,KAAKyoD,MAAOprC,EAAMrd,KAAKozC,UAAWpzC,KAAK0oD,SACnE,GAAC,CAAAvoD,IAAA,sBAAAC,MACD,SAAoBopD,EAASC,EAAS5+C,EAAUxJ,GAC9C,IAAMopD,EAASzqD,KAAKqoD,MAAMn9C,GACpBw/C,EAAOhE,GAAM1c,MAAMygB,EAAQzqD,KAAKqoD,MAAMn+B,IAEtCygC,EADUjE,GAAMkE,qBAAqB5qD,KAAKqoD,MAAMn+B,GAAIugC,EAAQzqD,KAAKyoD,MAAMv9C,IAC/C,EACxB2/C,EAASnE,GAAMz5C,UAAUy9C,EAAOC,GAChCG,EAAcpE,GAAMz5C,UAAU49C,EAAShqD,KAAKoB,IAC5C8oD,EAAY1pD,EAAawJ,EAEzBmgD,EAAengD,EADFkgD,EAAYlqD,KAAKC,IAAID,KAAK+mD,IAAI+C,IAE3CM,EAAYR,EAAO/kD,EAAIqlD,EAAYlqD,KAAKqB,IAAI4oD,GAC5CI,EAAYT,EAAO9kD,EAAIolD,EAAYlqD,KAAK+mD,IAAIkD,GAC5CK,EAAa,IAAIlkD,EAAWgkD,EAAWC,GACvCE,EAAe,IAAIjN,GAAYsM,EAAQU,GACvCE,EAAeD,EAAaE,iBAAiB,EAAKN,GAClDO,EAAgBH,EAAaE,iBAAiB,GAAMN,GACtDhrD,KAAKuoD,QAAU32C,EAASE,MAC1B9R,KAAKmpD,SAAS9C,MAAMgF,GACpBrrD,KAAKmpD,SAAS9C,MAAMkF,KAEpBvrD,KAAKmpD,SAAS9C,MAAMkF,GACpBvrD,KAAKmpD,SAAS9C,MAAMgF,GAExB,GAAC,CAAAlrD,IAAA,oBAAAC,MACD,SAAkBiK,EAAGggD,EAAYC,EAAUH,EAAWC,GACpD,IAAMve,EAAkBse,IAAchuC,GAAYW,WAAa,EAAI,EAC7D0uC,EAAa3qD,KAAKC,IAAIupD,EAAaC,GACnCmB,EAAQ5qD,KAAKyT,MAAMk3C,EAAaxrD,KAAK0rD,oBAAsB,IACjE,GAAID,EAAQ,EAAG,OAAO,KAGtB,IAFA,IAAME,EAAWH,EAAaC,EACxBzsC,EAAK,IAAI/X,EACN3C,EAAI,EAAGA,EAAImnD,EAAOnnD,IAAK,CAC9B,IAAM0lC,EAAQqgB,EAAaxe,EAAkBvnC,EAAIqnD,EACjD3sC,EAAGtZ,EAAI2E,EAAE3E,EAAI0kD,EAASvpD,KAAKqB,IAAI8nC,GAC/BhrB,EAAGrZ,EAAI0E,EAAE1E,EAAIykD,EAASvpD,KAAK+mD,IAAI5d,GAC/BhqC,KAAKmpD,SAAS9C,MAAMrnC,EACtB,CACF,GAAC,CAAA7e,IAAA,uBAAAC,MACD,SAAqBg+C,EAAK/gC,EAAMxS,EAAU+gD,GACxC,IAAMC,EAAWxuC,IAASzL,EAASE,KAAO,GAAK,EACzC5J,EAAKk2C,EAAIlzC,GAAGxF,EAAI04C,EAAIl0B,GAAGxkB,EACvByC,EAAKi2C,EAAIlzC,GAAGvF,EAAIy4C,EAAIl0B,GAAGvkB,EACvBmU,EAAMjZ,KAAKwH,KAAKH,EAAKA,EAAKC,EAAKA,GAC/By3C,EAAKiM,EAAWhhD,EAAW3C,EAAK4R,EAChC+lC,EAAKgM,EAAWhhD,EAAW1C,EAAK2R,EACtC8xC,EAAO1hC,GAAGxkB,EAAI04C,EAAIl0B,GAAGxkB,EAAIm6C,EACzB+L,EAAO1hC,GAAGvkB,EAAIy4C,EAAIl0B,GAAGvkB,EAAIi6C,EACzBgM,EAAO1gD,GAAGxF,EAAI04C,EAAIlzC,GAAGxF,EAAIm6C,EACzB+L,EAAO1gD,GAAGvF,EAAIy4C,EAAIlzC,GAAGvF,EAAIi6C,CAC3B,GAAC,CAAAz/C,IAAA,gBAAAC,MACD,SAAc2d,EAAakqC,GAEzB,GADAjoD,KAAK8rD,IAAI9qB,oBAAoBhhC,KAAKwoD,SAASt+B,GAAIlqB,KAAKwoD,SAASt9C,GAAIlL,KAAK0oD,SAASx+B,GAAIlqB,KAAK0oD,SAASx9C,IAC7FlL,KAAK8rD,IAAIpuB,kBACX19B,KAAKmpD,SAAS9C,MAAMrmD,KAAK8rD,IAAIxO,gBAAgB,SAG7C,GADAt9C,KAAK+rD,wBAAyB,EAC1B/rD,KAAKwoD,SAASt9C,GAAGL,SAAS7K,KAAK0oD,SAASx+B,IAAMlqB,KAAKozC,UAAY4U,EAAuBgE,wCACxFhsD,KAAKmpD,SAAS9C,MAAMrmD,KAAKwoD,SAASt9C,QAC7B,CAEL,GADAlL,KAAKmpD,SAAS9C,MAAMrmD,KAAKwoD,SAASt9C,IAC9BlL,KAAKisD,wBAA0B,EAAG,CACpC,IAAMpK,EAAO,IAAI56C,GAAYjH,KAAKisD,wBAA0BjsD,KAAKwoD,SAASt9C,GAAGxF,EAAI1F,KAAKmoD,IAAIziD,IAAM1F,KAAKisD,wBAA0B,IAAKjsD,KAAKisD,wBAA0BjsD,KAAKwoD,SAASt9C,GAAGvF,EAAI3F,KAAKmoD,IAAIxiD,IAAM3F,KAAKisD,wBAA0B,IACtOjsD,KAAKmpD,SAAS9C,MAAMxE,GACpB,IAAMC,EAAO,IAAI76C,GAAYjH,KAAKisD,wBAA0BjsD,KAAK0oD,SAASx+B,GAAGxkB,EAAI1F,KAAKmoD,IAAIziD,IAAM1F,KAAKisD,wBAA0B,IAAKjsD,KAAKisD,wBAA0BjsD,KAAK0oD,SAASx+B,GAAGvkB,EAAI3F,KAAKmoD,IAAIxiD,IAAM3F,KAAKisD,wBAA0B,IACtOjsD,KAAKmpD,SAAS9C,MAAMvE,EACtB,MACE9hD,KAAKmpD,SAAS9C,MAAMrmD,KAAKmoD,KAE3BnoD,KAAKmpD,SAAS9C,MAAMrmD,KAAK0oD,SAASx+B,GACpC,CAEJ,GAAC,CAAA/pB,IAAA,eAAAC,MACD,SAAaiK,GACX,IAAM2U,EAAK,IAAI/X,EAAWoD,EAAE3E,EAAI1F,KAAKozC,UAAW/oC,EAAE1E,GAClD3F,KAAKmpD,SAAS9C,MAAMrnC,GACpBhf,KAAKopD,kBAAkB/+C,EAAG,EAAK,EAAMxJ,KAAKoB,IAAK,EAAGjC,KAAKozC,WACvDpzC,KAAKmpD,SAASc,WAChB,GAAC,CAAA9pD,IAAA,eAAAC,MACD,SAAaopD,EAASC,GACpBzpD,KAAKmpD,SAAS9C,MAAMmD,EAAQt+C,IAC5BlL,KAAKmpD,SAAS9C,MAAMoD,EAAQv/B,GAC9B,GAAC,CAAA/pB,IAAA,OAAAC,MACD,SAAKyK,GACH7K,KAAKozC,UAAYvoC,EACjB7K,KAAKksD,sBAAwBrhD,GAAY,EAAIhK,KAAKqB,IAAIlC,KAAK0rD,oBAAsB,IACjF1rD,KAAKmpD,SAAW,IAAInD,GACpBhmD,KAAKmpD,SAASgD,kBAAkBnsD,KAAKy2B,iBACrCz2B,KAAKmpD,SAASiD,yBAAyBvhD,EAAWm9C,EAAuBqE,kCAC3E,GAAC,CAAAlsD,IAAA,eAAAC,MACD,SAAa6nD,GACXjoD,KAAK8rD,IAAI9qB,oBAAoBhhC,KAAKkoD,IAAKloD,KAAKmoD,IAAKnoD,KAAKmoD,IAAKnoD,KAAKooD,KACjDpoD,KAAK8rD,IAAIjO,sBACV,IACR79C,KAAKipD,WAAWY,iBAAmBjqD,EAAiBc,YAAcV,KAAKipD,WAAWY,iBAAmBjqD,EAAiBe,YACpHsnD,GAAejoD,KAAKmpD,SAAS9C,MAAMrmD,KAAKwoD,SAASt9C,IACrDlL,KAAKmpD,SAAS9C,MAAMrmD,KAAK0oD,SAASx+B,KAElClqB,KAAKgqD,gBAAgBhqD,KAAKmoD,IAAKnoD,KAAKwoD,SAASt9C,GAAIlL,KAAK0oD,SAASx+B,GAAI/N,GAAYW,UAAW9c,KAAKozC,WAGrG,GAAC,CAAAjzC,IAAA,YAAAC,MACD,WACEJ,KAAKmpD,SAASc,WAChB,GAAC,CAAA9pD,IAAA,wBAAAC,MACD,WACE,OAAOJ,KAAK+rD,sBACd,IAAC,CAAA,CAAA5rD,IAAA,eAAAC,MA1PD,WACEJ,KAAKksD,sBAAwB,EAC7BlsD,KAAK0rD,oBAAsB,KAC3B1rD,KAAKisD,wBAA0B,EAC/BjsD,KAAKmpD,SAAW,KAChBnpD,KAAKozC,UAAY,EACjBpzC,KAAKy2B,gBAAkB,KACvBz2B,KAAKipD,WAAa,KAClBjpD,KAAK8rD,IAAM,KACX9rD,KAAKkoD,IAAM,KACXloD,KAAKmoD,IAAM,KACXnoD,KAAKooD,IAAM,KACXpoD,KAAKqoD,MAAQ,IAAIlK,GACjBn+C,KAAKyoD,MAAQ,IAAItK,GACjBn+C,KAAKwoD,SAAW,IAAIrK,GACpBn+C,KAAK0oD,SAAW,IAAIvK,GACpBn+C,KAAKuoD,MAAQ,EACbvoD,KAAK+rD,wBAAyB,EAC9B,IAAMn1B,EAAiB32B,UAAU,GAAIqsD,EAAYrsD,UAAU,GAAI4K,EAAW5K,UAAU,GACpFD,KAAKy2B,gBAAkBG,EACvB52B,KAAKipD,WAAaqD,EAClBtsD,KAAK8rD,IAAM,IAAIntB,GACf3+B,KAAK0rD,oBAAsB7qD,KAAKoB,GAAK,EAAMqqD,EAAUC,sBACjDD,EAAUC,uBAAyB,GAAKD,EAAUzC,iBAAmBjqD,EAAiBmB,aAAYf,KAAKisD,wBAA0BjE,EAAuBwE,4BAC5JxsD,KAAK4K,KAAKC,EACZ,IAAC,CA7BwC,GAgQ3Cm9C,GAAuB4B,iCAAmC,KAC1D5B,GAAuBgE,wCAA0C,KACjEhE,GAAuBqE,kCAAoC,KAC3DrE,GAAuBwE,2BAA6B,GCvQS,IACxCC,GAAkB,WACrC,SAAAA,IAAc5sD,OAAA4sD,GACZA,EAAmB3sD,aAAaC,MAAMC,KAAMC,UAC9C,CAAC,OAAAC,EAAAusD,EAAA,CAAA,CAAAtsD,IAAA,iBAAAC,MAgBD,SAAessD,EAAU7hD,GAEvB,GADA7K,KAAKozC,UAAYvoC,EACA,IAAbA,EAAkB,OAAO,KAC7B,IAAM8hD,EAAc9hD,EAAW,EACzB+hD,EAAc/rD,KAAKC,IAAI+J,GACvBgiD,EAAS7sD,KAAK8sD,UAAUF,GAC1BF,EAAShrD,QAAU,EACrB1B,KAAK+sD,kBAAkBL,EAAS,GAAIG,GAEpC7sD,KAAKgtD,mBAAmBN,EAAUC,EAAaE,GAEjD,IAAMI,EAAWJ,EAAOlvC,iBAExB,OADIgvC,GAAar8B,GAAiB3H,QAAQskC,GACnCA,CACT,GAAC,CAAA9sD,IAAA,gCAAAC,MACD,SAA8BssD,EAAUC,EAAaE,GACnD,IAAMK,EAAUltD,KAAKmtD,kBAAkBntD,KAAKozC,WAC5C,GAAIuZ,EAAa,CACfE,EAAOO,YAAYV,GAAU,GAC7B,IAAMW,EAAQ5I,GAA0BoB,SAAS6G,GAAWQ,GACtD5+B,EAAK++B,EAAM3rD,OAAS,EAC1BmrD,EAAOS,iBAAiBD,EAAM/+B,GAAK++B,EAAM/+B,EAAK,GAAI1c,EAASE,MAC3D+6C,EAAOU,kBACP,IAAK,IAAIjpD,EAAIgqB,EAAK,EAAGhqB,GAAK,EAAGA,IAC3BuoD,EAAOW,eAAeH,EAAM/oD,IAAI,EAEpC,KAAO,CACLuoD,EAAOO,YAAYV,GAAU,GAC7B,IAAMe,EAAQhJ,GAA0BoB,SAAS6G,EAAUQ,GACrD9+B,EAAKq/B,EAAM/rD,OAAS,EAC1BmrD,EAAOS,iBAAiBG,EAAM,GAAIA,EAAM,GAAI77C,EAASE,MACrD+6C,EAAOU,kBACP,IAAK,IAAIjpD,EAAI,EAAGA,GAAK8pB,EAAI9pB,IACvBuoD,EAAOW,eAAeC,EAAMnpD,IAAI,EAEpC,CACAuoD,EAAOa,iBACPb,EAAO5C,WACT,GAAC,CAAA9pD,IAAA,yBAAAC,MACD,SAAuBssD,EAAUrvC,EAAMwvC,GACrC,IAAIK,EAAUltD,KAAKmtD,kBAAkBntD,KAAKozC,WACtC/1B,IAASzL,EAASG,QAAOm7C,GAAWA,GACxC,IAAMS,EAAOlJ,GAA0BoB,SAAS6G,EAAUQ,GACpDroD,EAAI8oD,EAAKjsD,OAAS,EACxBmrD,EAAOS,iBAAiBK,EAAK9oD,EAAI,GAAI8oD,EAAK,GAAItwC,GAC9C,IAAK,IAAI/Y,EAAI,EAAGA,GAAKO,EAAGP,IAAK,CAC3B,IAAM2jD,EAAsB,IAAN3jD,EACtBuoD,EAAOW,eAAeG,EAAKrpD,GAAI2jD,EACjC,CACA4E,EAAO5C,WACT,GAAC,CAAA9pD,IAAA,yBAAAC,MACD,SAAuBssD,EAAUG,GAC/B,IAAMK,EAAUltD,KAAKmtD,kBAAkBntD,KAAKozC,WACtCqa,EAAQhJ,GAA0BoB,SAAS6G,EAAUQ,GACrD9+B,EAAKq/B,EAAM/rD,OAAS,EAC1BmrD,EAAOS,iBAAiBG,EAAM,GAAIA,EAAM,GAAI77C,EAASE,MACrD,IAAK,IAAIxN,EAAI,EAAGA,GAAK8pB,EAAI9pB,IACvBuoD,EAAOW,eAAeC,EAAMnpD,IAAI,GAElCuoD,EAAOa,iBACPb,EAAOe,cAAcH,EAAMr/B,EAAK,GAAIq/B,EAAMr/B,IAC1C,IAAMi/B,EAAQ5I,GAA0BoB,SAAS6G,GAAWQ,GACtD5+B,EAAK++B,EAAM3rD,OAAS,EAC1BmrD,EAAOS,iBAAiBD,EAAM/+B,GAAK++B,EAAM/+B,EAAK,GAAI1c,EAASE,MAC3D,IAAK,IAAIxN,EAAIgqB,EAAK,EAAGhqB,GAAK,EAAGA,IAC3BuoD,EAAOW,eAAeH,EAAM/oD,IAAI,GAElCuoD,EAAOa,iBACPb,EAAOe,cAAcP,EAAM,GAAIA,EAAM,IACrCR,EAAO5C,WACT,GAAC,CAAA9pD,IAAA,oBAAAC,MACD,SAAkB4e,EAAI6tC,GACpB,OAAQ7sD,KAAKipD,WAAWC,kBACxB,KAAKtpD,EAAiB2B,UACpBsrD,EAAOgB,aAAa7uC,GACpB,MACF,KAAKpf,EAAiBwC,WACpByqD,EAAOiB,aAAa9uC,GAGxB,GAAC,CAAA7e,IAAA,eAAAC,MACD,SAAassD,EAAU7hD,GAErB,GADA7K,KAAKozC,UAAYvoC,EACb7K,KAAK+tD,kBAAkBljD,GAAW,OAAO,KAC7C,IAAM+hD,EAAc/rD,KAAKC,IAAI+J,GACvBgiD,EAAS7sD,KAAK8sD,UAAUF,GAC9B,GAAIF,EAAShrD,QAAU,EACrB1B,KAAK+sD,kBAAkBL,EAAS,GAAIG,QAEtC,GAAI7sD,KAAKipD,WAAW3nD,gBAAiB,CACnC,IAAMqrD,EAAc9hD,EAAW,EAC/B7K,KAAKguD,8BAA8BtB,EAAUC,EAAaE,EAC5D,MACE7sD,KAAKiuD,uBAAuBvB,EAAUG,GAIxC,OADkBA,EAAOlvC,gBAE3B,GAAC,CAAAxd,IAAA,sBAAAC,MACD,WACE,OAAOJ,KAAKipD,UACd,GAAC,CAAA9oD,IAAA,oBAAAC,MACD,SAAkB8tD,GAChB,OAAOA,EAAcluD,KAAKipD,WAAWkF,mBACvC,GAAC,CAAAhuD,IAAA,eAAAC,MACD,SAAassD,EAAUrvC,EAAMxS,GAE3B,GADA7K,KAAKozC,UAAYvoC,EACb6hD,EAAShrD,QAAU,EAAG,OAAO1B,KAAKouD,aAAa1B,EAAU7hD,GAC7D,GAAiB,IAAbA,EACF,OAAO4hD,EAAmB4B,gBAAgB3B,GAE5C,IAAMG,EAAS7sD,KAAK8sD,UAAUjiD,GAE9B,OADA7K,KAAKsuD,uBAAuB5B,EAAUrvC,EAAMwvC,GACrCA,EAAOlvC,gBAChB,GAAC,CAAAxd,IAAA,qBAAAC,MACD,SAAmBssD,EAAUC,EAAaE,GACxC,IAAMK,EAAUltD,KAAKmtD,kBAAkBntD,KAAKozC,WAC5C,GAAIuZ,EAAa,CACf,IAAMU,EAAQ5I,GAA0BoB,SAAS6G,GAAWQ,GACtD5+B,EAAK++B,EAAM3rD,OAAS,EAC1BmrD,EAAOS,iBAAiBD,EAAM/+B,GAAK++B,EAAM/+B,EAAK,GAAI1c,EAASE,MAC3D+6C,EAAOU,kBACP,IAAK,IAAIjpD,EAAIgqB,EAAK,EAAGhqB,GAAK,EAAGA,IAC3BuoD,EAAOW,eAAeH,EAAM/oD,IAAI,EAEpC,KAAO,CACL,IAAMmpD,EAAQhJ,GAA0BoB,SAAS6G,EAAUQ,GACrD9+B,EAAKq/B,EAAM/rD,OAAS,EAC1BmrD,EAAOS,iBAAiBG,EAAM,GAAIA,EAAM,GAAI77C,EAASE,MACrD+6C,EAAOU,kBACP,IAAK,IAAIjpD,EAAI,EAAGA,GAAK8pB,EAAI9pB,IACvBuoD,EAAOW,eAAeC,EAAMnpD,IAAI,EAEpC,CACAuoD,EAAOa,gBACT,GAAC,CAAAvtD,IAAA,oBAAAC,MACD,SAAkByK,GAChB,OAAiB,IAAbA,GACAA,EAAW,IAAQ7K,KAAKipD,WAAW3nD,eAEzC,GAAC,CAAAnB,IAAA,YAAAC,MACD,SAAUyK,GACR,OAAO,IAAIm9C,GAAuBhoD,KAAKy2B,gBAAiBz2B,KAAKipD,WAAYp+C,EAC3E,IAAC,CAAA,CAAA1K,IAAA,eAAAC,MA9JD,WACEJ,KAAKozC,UAAY,EACjBpzC,KAAKy2B,gBAAkB,KACvBz2B,KAAKipD,WAAa,KAClB,IAAMryB,EAAiB32B,UAAU,GAAIqsD,EAAYrsD,UAAU,GAC3DD,KAAKy2B,gBAAkBG,EACvB52B,KAAKipD,WAAaqD,CACpB,GAAC,CAAAnsD,IAAA,kBAAAC,MACD,SAAuBod,GAErB,IADA,IAAMxQ,EAAO,IAAIoE,MAAMoM,EAAI9b,QAAQ6V,KAAK,MAC/BjT,EAAI,EAAGA,EAAI0I,EAAKtL,OAAQ4C,IAC/B0I,EAAK1I,GAAK,IAAI2C,EAAWuW,EAAIlZ,IAE/B,OAAO0I,CACT,IAAC,CAlBoC,GCIlBuhD,GAAoB,WAGtC,OAAAruD,GAFD,SAAAquD,IAAc1uD,OAAA0uD,GACZA,EAAqBzuD,aAAaC,MAAMC,KAAMC,UAChD,GAAC,CAAA,CAAAE,IAAA,sBAAAC,MAOD,WACE,GAAyB,IAArBH,UAAUyB,OAAc,CAG1B,IAFA,IAAM8sD,EAAoBvuD,UAAU,GAC9BwuD,EAAkB,IAAIrvC,GACnB9a,EAAItE,KAAK0uD,WAAW9gD,WAAYtJ,EAAEwJ,WAAa,CACtD,IAAM6gD,EAAMrqD,EAAE0J,OACR/D,EAAM0kD,EAAInL,cACZgL,EAAkB7oD,EAAIsE,EAAID,WAAawkD,EAAkB7oD,EAAIsE,EAAIL,WACrE5J,KAAK4uD,oBAAoBJ,EAAmBG,EAAIE,mBAAoBJ,EACtE,CACA,OAAOA,CACT,CAAO,GAAyB,IAArBxuD,UAAUyB,OACnB,GAAIkR,GAAa3S,UAAU,GAAIkS,KAAUlS,UAAU,aAAcgH,GAAchH,UAAU,aAAcyqC,GAGrG,IAFA,IAAM8jB,EAAoBvuD,UAAU,GAAI6uD,EAAU7uD,UAAU,GAAIwuD,EAAkBxuD,UAAU,GACtFud,EAAMsxC,EAAQpxC,UAAUC,iBACrBrZ,EAAI,EAAGA,EAAIkZ,EAAI9b,OAAS,EAAG4C,IAAK,CAKvC,GAJAtE,KAAK+uD,KAAK7kC,GAAK1M,EAAIlZ,GACnBtE,KAAK+uD,KAAK7jD,GAAKsS,EAAIlZ,EAAI,GACnBtE,KAAK+uD,KAAK7kC,GAAGvkB,EAAI3F,KAAK+uD,KAAK7jD,GAAGvF,GAAG3F,KAAK+uD,KAAKpmC,YAClC9nB,KAAK+K,IAAI5L,KAAK+uD,KAAK7kC,GAAGxkB,EAAG1F,KAAK+uD,KAAK7jD,GAAGxF,GACxC8oD,EAAkB9oD,GACzB1F,KAAK+uD,KAAKC,gBACVR,EAAkB7oD,EAAI3F,KAAK+uD,KAAK7kC,GAAGvkB,GAAK6oD,EAAkB7oD,EAAI3F,KAAK+uD,KAAK7jD,GAAGvF,GAC3EwW,GAAY5J,MAAMvS,KAAK+uD,KAAK7kC,GAAIlqB,KAAK+uD,KAAK7jD,GAAIsjD,KAAuBryC,GAAYpK,OAArF,CACA,IAAI65B,EAAQkjB,EAAQjuC,SAASjP,EAASE,MACjC9R,KAAK+uD,KAAK7kC,GAAGtjB,OAAO4W,EAAIlZ,MAAKsnC,EAAQkjB,EAAQjuC,SAASjP,EAASG,QACpE,IAAMk9C,EAAK,IAAIC,GAAalvD,KAAK+uD,KAAMnjB,GACvC6iB,EAAgBx9C,IAAIg+C,EAJwE,CAK9F,MACK,GAAIr8C,GAAa3S,UAAU,GAAIkS,KAAUlS,UAAU,aAAcgH,GAAc2L,GAAa3S,UAAU,GAAIkS,IAE/G,IADA,IAAMq8C,EAAoBvuD,UAAU,GAA6BwuD,EAAkBxuD,UAAU,GACpFqE,EAD0CrE,UAAU,GACvC2N,WAAYtJ,EAAEwJ,WAAa,CAC/C,IAAMsP,EAAK9Y,EAAE0J,OACRoP,EAAGoB,aACRxe,KAAK4uD,oBAAoBJ,EAAmBpxC,EAAIqxC,EAClD,CAGN,GAAC,CAAAtuD,IAAA,WAAAC,MACD,SAASiK,GACP,IAAMokD,EAAkBzuD,KAAK4uD,oBAAoBvkD,GACjD,OAA+B,IAA3BokD,EAAgBt9C,OAAqB,EAC9B6/B,GAAYtlC,IAAI+iD,GACjBU,UACZ,IAAC,CAAA,CAAAhvD,IAAA,eAAAC,MAlDD,WACEJ,KAAK0uD,WAAa,KAClB1uD,KAAK+uD,KAAO,IAAI5Q,GAChB,IAAMiR,EAAYnvD,UAAU,GAC5BD,KAAK0uD,WAAaU,CACpB,IAAC,CATsC,GAwDnCF,GAAY,WAGf,OAAAhvD,GAFD,SAAAgvD,IAAcrvD,OAAAqvD,GACZA,EAAapvD,aAAaC,MAAMC,KAAMC,UACxC,GAAC,CAAA,CAAAE,IAAA,YAAAC,MAQD,SAAU4vB,GACR,IAAMzoB,EAAQyoB,EACd,GAAIhwB,KAAKqvD,WAAWC,QAAU/nD,EAAM8nD,WAAWE,OAAQ,OAAO,EAC9D,GAAIvvD,KAAKqvD,WAAWE,QAAUhoD,EAAM8nD,WAAWC,OAAQ,OAAQ,EAC/D,IAAIE,EAAcxvD,KAAKqvD,WAAWjzC,iBAAiB7U,EAAM8nD,YACzD,OAAoB,IAAhBG,GAEgB,KADpBA,GAAe,EAAIjoD,EAAM8nD,WAAWjzC,iBAAiBpc,KAAKqvD,aAD5BG,EAGvBxvD,KAAKqvD,WAAWlhD,UAAU5G,EAAM8nD,WACzC,GAAC,CAAAlvD,IAAA,WAAAC,MACD,SAASqvD,EAAMC,GACb,IAAMC,EAAWF,EAAKvlC,GAAG/b,UAAUuhD,EAAKxlC,IACxC,OAAiB,IAAbylC,EAAuBA,EACpBF,EAAKvkD,GAAGiD,UAAUuhD,EAAKxkD,GAChC,GAAC,CAAA/K,IAAA,WAAAC,MACD,WACE,OAAOJ,KAAKqvD,WAAWv6C,UACzB,GAAC,CAAA3U,IAAA,cAAAoI,IACD,WACE,MAAO,CAACnF,EACV,IAAC,CAAA,CAAAjD,IAAA,eAAAC,MA3BD,WACEJ,KAAKqvD,WAAa,KAClBrvD,KAAKmvD,WAAa,KAClB,IAAM/Q,EAAMn+C,UAAU,GAAI2rC,EAAQ3rC,UAAU,GAC5CD,KAAKqvD,WAAa,IAAIlR,GAAYC,GAClCp+C,KAAKmvD,WAAavjB,CACpB,IAAC,CAVe,GAiClB2iB,GAAqBW,aAAeA,GCnGmB,IAClCU,YAAyB3sD,GAC5C,SAAA2sD,IAAc,IAAAptD,EAEiD,OAFjD3C,OAAA+vD,GACZptD,EAAAC,EAAAzC,KAAA4vD,GACAA,EAA0B9vD,aAAaC,MAAKyC,EAAOvC,WAAUuC,CAC/D,CAAC,OAAAK,EAAA+sD,EAAA3sD,GAAA/C,EAAA0vD,EAAA,KAAA,CAAA,CAAAzvD,IAAA,eAAAC,MACD,WACEiC,EAAUvC,aAAauG,KAAKrG,KAAM,6DACpC,IAAC,EAPoDqC,GCElCwtD,GAAW,WAC9B,SAAAA,IAAchwD,OAAAgwD,GACZA,EAAY/vD,aAAaC,MAAMC,KAAMC,UACvC,CAAC,OAAAC,EAAA2vD,EAAA,CAAA,CAAA1vD,IAAA,OAAAC,MAiDD,WACE,IAAM8I,EAAIlJ,KAAK2F,EAAI3F,KAAKuK,EACxB,GAAI9F,EAAOG,MAAMsE,IAAMzE,EAAOM,WAAWmE,GACvC,MAAM,IAAI0mD,GAEZ,OAAO1mD,CACT,GAAC,CAAA/I,IAAA,OAAAC,MACD,WACE,IAAM8I,EAAIlJ,KAAK0F,EAAI1F,KAAKuK,EACxB,GAAI9F,EAAOG,MAAMsE,IAAMzE,EAAOM,WAAWmE,GACvC,MAAM,IAAI0mD,GAEZ,OAAO1mD,CACT,GAAC,CAAA/I,IAAA,gBAAAC,MACD,WACE,IAAMiK,EAAI,IAAIpD,EAGd,OAFAoD,EAAE3E,EAAI1F,KAAK0pB,OACXrf,EAAE1E,EAAI3F,KAAK2pB,OACJtf,CACT,IAAC,CAAA,CAAAlK,IAAA,eAAAC,MAnED,WAIE,GAHAJ,KAAK0F,EAAI,KACT1F,KAAK2F,EAAI,KACT3F,KAAKuK,EAAI,KACgB,IAArBtK,UAAUyB,OACZ1B,KAAK0F,EAAI,EACT1F,KAAK2F,EAAI,EACT3F,KAAKuK,EAAI,OACJ,GAAyB,IAArBtK,UAAUyB,OAAc,CACjC,IAAM2I,EAAIpK,UAAU,GACpBD,KAAK0F,EAAI2E,EAAE3E,EACX1F,KAAK2F,EAAI0E,EAAE1E,EACX3F,KAAKuK,EAAI,CACX,MAAO,GAAyB,IAArBtK,UAAUyB,QACnB,GAA4B,iBAAjBzB,UAAU,IAA2C,iBAAjBA,UAAU,GAAiB,CACxE,IAAM6vD,EAAK7vD,UAAU,GAAI8vD,EAAK9vD,UAAU,GACxCD,KAAK0F,EAAIoqD,EACT9vD,KAAK2F,EAAIoqD,EACT/vD,KAAKuK,EAAI,CACX,MAAO,GAAItK,UAAU,aAAc4vD,GAAe5vD,UAAU,aAAc4vD,EAAa,CACrF,IAAM3kD,EAAKjL,UAAU,GAAIkL,EAAKlL,UAAU,GACxCD,KAAK0F,EAAIwF,EAAGvF,EAAIwF,EAAGZ,EAAIY,EAAGxF,EAAIuF,EAAGX,EACjCvK,KAAK2F,EAAIwF,EAAGzF,EAAIwF,EAAGX,EAAIW,EAAGxF,EAAIyF,EAAGZ,EACjCvK,KAAKuK,EAAIW,EAAGxF,EAAIyF,EAAGxF,EAAIwF,EAAGzF,EAAIwF,EAAGvF,CACnC,MAAO,GAAI1F,UAAU,aAAcgH,GAAchH,UAAU,aAAcgH,EAAY,CACnF,IAAMiE,EAAKjL,UAAU,GAAIkL,EAAKlL,UAAU,GACxCD,KAAK0F,EAAIwF,EAAGvF,EAAIwF,EAAGxF,EACnB3F,KAAK2F,EAAIwF,EAAGzF,EAAIwF,EAAGxF,EACnB1F,KAAKuK,EAAIW,EAAGxF,EAAIyF,EAAGxF,EAAIwF,EAAGzF,EAAIwF,EAAGvF,CACnC,OACK,GAAyB,IAArB1F,UAAUyB,OAAc,CACjC,IAAMouD,EAAK7vD,UAAU,GAAI8vD,EAAK9vD,UAAU,GAAI+vD,EAAK/vD,UAAU,GAC3DD,KAAK0F,EAAIoqD,EACT9vD,KAAK2F,EAAIoqD,EACT/vD,KAAKuK,EAAIylD,CACX,MAAO,GAAyB,IAArB/vD,UAAUyB,OAAc,CACjC,IAAMwJ,EAAKjL,UAAU,GAAIkL,EAAKlL,UAAU,GAAIsL,EAAKtL,UAAU,GAAIuL,EAAKvL,UAAU,GACxEya,EAAKxP,EAAGvF,EAAIwF,EAAGxF,EACfgV,EAAKxP,EAAGzF,EAAIwF,EAAGxF,EACfkV,EAAK1P,EAAGxF,EAAIyF,EAAGxF,EAAIwF,EAAGzF,EAAIwF,EAAGvF,EAC7BkV,EAAKtP,EAAG5F,EAAI6F,EAAG7F,EACfmV,EAAKtP,EAAG9F,EAAI6F,EAAG7F,EACfqV,EAAKxP,EAAG7F,EAAI8F,EAAG7F,EAAI6F,EAAG9F,EAAI6F,EAAG5F,EACnC3F,KAAK0F,EAAIiV,EAAKI,EAAKD,EAAKF,EACxB5a,KAAK2F,EAAIkV,EAAKD,EAAKF,EAAKK,EACxB/a,KAAKuK,EAAImQ,EAAKI,EAAKD,EAAKF,CAC1B,CACF,IAAC,CAnD6B,GCEXs1C,GAAQ,WAC3B,SAAAA,IAAcpwD,OAAAowD,GACZA,EAASnwD,aAAaC,MAAMC,KAAMC,UACpC,CAAC,OAAAC,EAAA+vD,EAAA,CAAA,CAAA9vD,IAAA,OAAAC,MAyHD,WACE,OAAO6vD,EAAS/kC,KAAKlrB,KAAKkqB,GAAIlqB,KAAKkL,GAAIlL,KAAKmL,GAC9C,GAAC,CAAAhL,IAAA,aAAAC,MACD,WACE,OAAO6vD,EAASC,WAAWlwD,KAAKkqB,GAAIlqB,KAAKkL,GAAIlL,KAAKmL,GACpD,GAAC,CAAAhL,IAAA,eAAAC,MACD,SAAaiK,GACX,GAAU,OAANA,EAAY,MAAM,IAAIrH,EAAyB,2BACnD,OAAOitD,EAASE,aAAa9lD,EAAGrK,KAAKkqB,GAAIlqB,KAAKkL,GAAIlL,KAAKmL,GACzD,GAAC,CAAAhL,IAAA,oBAAAC,MACD,WACE,OAAO6vD,EAASG,kBAAkBpwD,KAAKkqB,GAAIlqB,KAAKkL,GAAIlL,KAAKmL,GAC3D,GAAC,CAAAhL,IAAA,UAAAC,MACD,WACE,OAAO6vD,EAASI,QAAQrwD,KAAKkqB,GAAIlqB,KAAKkL,GAAIlL,KAAKmL,GACjD,GAAC,CAAAhL,IAAA,eAAAC,MACD,WACE,OAAO6vD,EAASK,aAAatwD,KAAKkqB,GAAIlqB,KAAKkL,GAAIlL,KAAKmL,GACtD,GAAC,CAAAhL,IAAA,SAAAC,MACD,WACE,OAAO6vD,EAASM,OAAOvwD,KAAKkqB,GAAIlqB,KAAKkL,GAAIlL,KAAKmL,GAChD,GAAC,CAAAhL,IAAA,WAAAC,MACD,WACE,OAAO6vD,EAASO,SAASxwD,KAAKkqB,GAAIlqB,KAAKkL,GAAIlL,KAAKmL,GAClD,GAAC,CAAAhL,IAAA,WAAAC,MACD,WACE,OAAO6vD,EAASQ,SAASzwD,KAAKkqB,GAAIlqB,KAAKkL,GAAIlL,KAAKmL,GAClD,IAAC,CAAA,CAAAhL,IAAA,eAAAC,MAnJD,WACEJ,KAAKkqB,GAAK,KACVlqB,KAAKkL,GAAK,KACVlL,KAAKmL,GAAK,KACV,IAAM+e,EAAKjqB,UAAU,GAAIiL,EAAKjL,UAAU,GAAIkL,EAAKlL,UAAU,GAC3DD,KAAKkqB,GAAKA,EACVlqB,KAAKkL,GAAKA,EACVlL,KAAKmL,GAAKA,CACZ,GAAC,CAAAhL,IAAA,OAAAC,MACD,SAAY8I,EAAGC,EAAG3B,GAChB,OAAO3G,KAAKC,MAAM0G,EAAE9B,EAAIwD,EAAExD,IAAMyD,EAAExD,EAAIuD,EAAEvD,IAAMwD,EAAEzD,EAAIwD,EAAExD,IAAM8B,EAAE7B,EAAIuD,EAAEvD,IAAM,EAC5E,GAAC,CAAAxF,IAAA,aAAAC,MACD,SAAkB8I,EAAGC,EAAG3B,GACtB,QAASA,EAAE9B,EAAIwD,EAAExD,IAAMyD,EAAExD,EAAIuD,EAAEvD,IAAMwD,EAAEzD,EAAIwD,EAAExD,IAAM8B,EAAE7B,EAAIuD,EAAEvD,IAAM,CACnE,GAAC,CAAAxF,IAAA,MAAAC,MACD,SAAWswD,EAAKC,EAAKC,EAAKC,GACxB,OAAOH,EAAMG,EAAMF,EAAMC,CAC3B,GAAC,CAAAzwD,IAAA,eAAAC,MACD,SAAoBiK,EAAGymD,EAAIntC,EAAIC,GAC7B,IAAMqB,EAAK6rC,EAAGprD,EACRwf,EAAK4rC,EAAGnrD,EACRuD,EAAIya,EAAGje,EAAIuf,EACX9b,EAAIya,EAAGle,EAAIuf,EACXzd,EAAImc,EAAGhe,EAAIuf,EACX7L,EAAIuK,EAAGje,EAAIuf,EACXzJ,EAAMvS,EAAImQ,EAAIlQ,EAAI3B,EAClBU,EAAKmC,EAAE3E,EAAIuf,EACX9c,EAAKkC,EAAE1E,EAAIuf,EACXrO,GAAKwC,EAAInR,EAAKiB,EAAIhB,GAAMsT,EACxB9F,IAAMnO,EAAIU,EAAKgB,EAAIf,GAAMsT,EAE/B,OADUq1C,EAAGjpD,OAASgP,GAAK8M,EAAG9b,OAASipD,EAAGjpD,QAAU8N,GAAKiO,EAAG/b,OAASipD,EAAGjpD,OAE1E,GAAC,CAAA1H,IAAA,oBAAAC,MACD,SAAyB8I,EAAGC,EAAG3B,GAC7B,IAAMupD,EAAQ7nD,EAAE2B,SAAS1B,GACnB6nD,EAAQ7nD,EAAE0B,SAASrD,GACnBypD,EAAQzpD,EAAEqD,SAAS3B,GACrBgoD,EAASH,EAGb,OAFIC,EAAQE,IAAQA,EAASF,GACzBC,EAAQC,IAAQA,EAASD,GACtBC,CACT,GAAC,CAAA/wD,IAAA,iBAAAC,MACD,SAAsB8I,EAAGC,EAAG3B,GAC1B,IAAM+O,EAAKpD,GAAGuB,QAAQxL,EAAExD,GAAG+O,SAASjN,EAAE9B,GAChCyrD,EAAKh+C,GAAGuB,QAAQxL,EAAEvD,GAAG8O,SAASjN,EAAE7B,GAChCyrD,EAAKj+C,GAAGuB,QAAQvL,EAAEzD,GAAG+O,SAASjN,EAAE9B,GAChC2rD,EAAKl+C,GAAGuB,QAAQvL,EAAExD,GAAG8O,SAASjN,EAAE7B,GAChC2e,EAAQnR,GAAGwF,YAAYpC,EAAI46C,EAAIC,EAAIC,GAAIt9C,SAAS,GAChDu9C,EAAO/6C,EAAGP,MAAM/E,IAAIkgD,EAAGn7C,OACvBu7C,EAAOH,EAAGp7C,MAAM/E,IAAIogD,EAAGr7C,OACvBw7C,EAAOr+C,GAAGwF,YAAYw4C,EAAIG,EAAMD,EAAIE,GACpCE,EAAOt+C,GAAGwF,YAAYpC,EAAI+6C,EAAMF,EAAIG,GACpCG,EAAMv+C,GAAGuB,QAAQlN,EAAE9B,GAAG+O,SAAS+8C,EAAK79C,OAAO2Q,IAAQrJ,cACnD02C,EAAMx+C,GAAGuB,QAAQlN,EAAE7B,GAAGsL,IAAIwgD,EAAK99C,OAAO2Q,IAAQrJ,cACpD,OAAO,IAAIhU,EAAWyqD,EAAKC,EAC7B,GAAC,CAAAxxD,IAAA,UAAAC,MACD,SAAe8I,EAAGC,EAAG3B,GACnB,QAAKk/C,GAAM2J,QAAQnnD,EAAGC,EAAG3B,OACpBk/C,GAAM2J,QAAQlnD,EAAG3B,EAAG0B,MACpBw9C,GAAM2J,QAAQ7oD,EAAG0B,EAAGC,GAE3B,GAAC,CAAAhJ,IAAA,eAAAC,MACD,SAAoB8I,EAAGC,EAAG3B,GACxB,IAAMoqD,EAAKpqD,EAAE9B,EACPmsD,EAAKrqD,EAAE7B,EACP4Q,EAAKrN,EAAExD,EAAIksD,EACXT,EAAKjoD,EAAEvD,EAAIksD,EACXT,EAAKjoD,EAAEzD,EAAIksD,EACXP,EAAKloD,EAAExD,EAAIksD,EACXvtC,EAAQ,EAAI2rC,EAASx0C,IAAIlF,EAAI46C,EAAIC,EAAIC,GACrCG,EAAOvB,EAASx0C,IAAI01C,EAAI56C,EAAKA,EAAK46C,EAAKA,EAAIE,EAAID,EAAKA,EAAKC,EAAKA,GAC9DI,EAAOxB,EAASx0C,IAAIlF,EAAIA,EAAKA,EAAK46C,EAAKA,EAAIC,EAAIA,EAAKA,EAAKC,EAAKA,GAGpE,OAAO,IAAIpqD,EAFC2qD,EAAKJ,EAAOltC,EACZutC,EAAKJ,EAAOntC,EAE1B,GAAC,CAAAnkB,IAAA,wBAAAC,MACD,SAA6B8I,EAAGC,GAC9B,IAAMjB,EAAKiB,EAAEzD,EAAIwD,EAAExD,EACbyC,EAAKgB,EAAExD,EAAIuD,EAAEvD,EACbmsD,EAAK,IAAIjC,GAAY3mD,EAAExD,EAAIwC,EAAK,EAAKgB,EAAEvD,EAAIwC,EAAK,EAAK,GACrD4pD,EAAK,IAAIlC,GAAY3mD,EAAExD,EAAIyC,EAAKD,EAAK,EAAKgB,EAAEvD,EAAIuC,EAAKC,EAAK,EAAK,GACrE,OAAO,IAAI0nD,GAAYiC,EAAIC,EAC7B,GAAC,CAAA5xD,IAAA,gBAAAC,MACD,SAAqB8I,EAAGC,EAAG3B,GACzB,IAAMwqD,EAAO7oD,EAAE0B,SAAS3B,GAElB+oD,EAAOD,GAAQA,EADR7oD,EAAE0B,SAASrD,IAElBU,EAAKV,EAAE9B,EAAIwD,EAAExD,EACbyC,EAAKX,EAAE7B,EAAIuD,EAAEvD,EAEnB,OADgB,IAAIsB,EAAWiC,EAAExD,EAAIusD,EAAO/pD,EAAIgB,EAAEvD,EAAIssD,EAAO9pD,EAE/D,GAAC,CAAAhI,IAAA,SAAAC,MACD,SAAc8I,EAAGC,EAAG3B,GAClB,IAAMo4C,EAAKz2C,EAAEzD,EAAIwD,EAAExD,EACbm6C,EAAK12C,EAAExD,EAAIuD,EAAEvD,EACbusD,EAAK/oD,EAAEtB,OAASqB,EAAErB,OAClBsqD,EAAK3qD,EAAE9B,EAAIwD,EAAExD,EACb0sD,EAAK5qD,EAAE7B,EAAIuD,EAAEvD,EACb0sD,EAAK7qD,EAAEK,OAASqB,EAAErB,OAClByqD,EAASzS,EAAKwS,EAAKH,EAAKE,EACxBG,EAASL,EAAKC,EAAKvS,EAAKyS,EACxBG,EAAS5S,EAAKwS,EAAKvS,EAAKsS,EACxBM,EAAQH,EAASA,EAASC,EAASA,EAASC,EAASA,EACrDjC,EAAS1vD,KAAKwH,KAAKoqD,GAAS,EAClC,OAAOlC,CACT,GAAC,CAAApwD,IAAA,WAAAC,MACD,SAAgB8I,EAAGC,EAAG3B,GACpB,IAAM9B,GAAKwD,EAAExD,EAAIyD,EAAEzD,EAAI8B,EAAE9B,GAAK,EACxBC,GAAKuD,EAAEvD,EAAIwD,EAAExD,EAAI6B,EAAE7B,GAAK,EAC9B,OAAO,IAAIsB,EAAWvB,EAAGC,EAC3B,GAAC,CAAAxF,IAAA,WAAAC,MACD,SAAgB8I,EAAGC,EAAG3B,GACpB,IAAMwqD,EAAO7oD,EAAE0B,SAASrD,GAClBkrD,EAAOxpD,EAAE2B,SAASrD,GAClBgd,EAAOtb,EAAE2B,SAAS1B,GAClBwpD,EAASX,EAAOU,EAAOluC,EACvBouC,GAAaZ,EAAO9oD,EAAExD,EAAIgtD,EAAOvpD,EAAEzD,EAAI8e,EAAOhd,EAAE9B,GAAKitD,EACrDE,GAAab,EAAO9oD,EAAEvD,EAAI+sD,EAAOvpD,EAAExD,EAAI6e,EAAOhd,EAAE7B,GAAKgtD,EAC3D,OAAO,IAAI1rD,EAAW2rD,EAAWC,EACnC,IAAC,CA3H0B,GCaRC,GAAqB,WAGvC,OAAA5yD,GAFD,SAAA4yD,IAAcjzD,OAAAizD,GACZA,EAAsBhzD,aAAaC,MAAMC,KAAMC,UACjD,GAAC,CAAA,CAAAE,IAAA,cAAAC,MAWD,SAAY6d,EAAOwhC,EAAgBpiC,EAAM01C,EAAWC,GAClD,GAAuB,IAAnBvT,GAA0BxhC,EAAMvc,OAASmtB,GAAWE,mBAAoB,OAAO,KACnF,IAAIiU,EAAU+vB,EACV9vB,EAAW+vB,EACX/0C,EAAMvc,QAAUmtB,GAAWE,oBAAsB5S,GAAY4P,MAAM9N,KACrE+kB,EAAUgwB,EACV/vB,EAAW8vB,EACX11C,EAAOzL,EAASm6B,SAAS1uB,IAE3B,IAAM41C,EAAQjzD,KAAKkzD,cAAcC,aAAal1C,EAAOZ,EAAMoiC,GAC3Dz/C,KAAKozD,SAASH,EAAOjwB,EAASC,EAChC,GAAC,CAAA9iC,IAAA,mBAAAC,MACD,SAAiB6d,EAAOpT,GACtB7K,KAAKqzD,YAAYp1C,EAAOpT,EAAU+G,EAASE,KAAMpC,EAASE,SAAUF,EAASI,UAC7E9P,KAAKqzD,YAAYp1C,EAAOpT,EAAU+G,EAASG,MAAOrC,EAASI,SAAUJ,EAASE,SAChF,GAAC,CAAAzP,IAAA,WAAAC,MACD,SAASiK,GACP,GAAIrK,KAAKozC,WAAa,EAAK,OAAO,KAClC,IAAMn1B,EAAQ5T,EAAEsT,iBACVs1C,EAAQjzD,KAAKkzD,cAAc9E,aAAanwC,EAAOje,KAAKozC,WAC1DpzC,KAAKozD,SAASH,EAAOvjD,EAASE,SAAUF,EAASI,SACnD,GAAC,CAAA3P,IAAA,aAAAC,MACD,SAAWiK,GACT,IAAIo1C,EAAiBz/C,KAAKozC,UACtBkgB,EAAa1hD,EAASE,KACtB9R,KAAKozC,UAAY,IACnBqM,GAAkBz/C,KAAKozC,UACvBkgB,EAAa1hD,EAASG,OAExB,IAAMia,EAAQ3hB,EAAE4hB,kBACVsnC,EAAajjC,GAAiBkjC,qBAAqBxnC,EAAMrO,kBAC/D,GAAI3d,KAAKozC,UAAY,GAAOpzC,KAAKyzD,mBAAmBznC,EAAOhsB,KAAKozC,WAAY,OAAO,KACnF,GAAIpzC,KAAKozC,WAAa,GAAOmgB,EAAW7xD,OAAS,EAAG,OAAO,KAC3D1B,KAAKqzD,YAAYE,EAAY9T,EAAgB6T,EAAY5jD,EAASE,SAAUF,EAASI,UACrF,IAAK,IAAIxL,EAAI,EAAGA,EAAI+F,EAAEkhB,qBAAsBjnB,IAAK,CAC/C,IAAMwpC,EAAOzjC,EAAE8hB,iBAAiB7nB,GAC1BovD,EAAYpjC,GAAiBkjC,qBAAqB1lB,EAAKnwB,kBACzD3d,KAAKozC,UAAY,GAAOpzC,KAAKyzD,mBAAmB3lB,GAAO9tC,KAAKozC,YAChEpzC,KAAKqzD,YAAYK,EAAWjU,EAAgB7tC,EAASm6B,SAASunB,GAAa5jD,EAASI,SAAUJ,EAASE,SACzG,CACF,GAAC,CAAAzP,IAAA,6BAAAC,MACD,SAA2BuzD,EAAeC,GACxC,IAAMC,EAAM,IAAI5D,GAAS0D,EAAc,GAAIA,EAAc,GAAIA,EAAc,IACrElD,EAAWoD,EAAIpD,WAErB,OADqBzsC,GAASI,eAAeqsC,EAAUoD,EAAI3pC,GAAI2pC,EAAI3oD,IAC7CrK,KAAKC,IAAI8yD,EACjC,GAAC,CAAAzzD,IAAA,gBAAAC,MACD,SAAcqkB,GACZ,GAAIzkB,KAAKkzD,cAAcnF,kBAAkB/tD,KAAKozC,WAAY,OAAO,KACjE,IAAMn1B,EAAQqS,GAAiBkjC,qBAAqB/uC,EAAK9G,kBACzD,GAAI2S,GAAiB3K,OAAO1H,KAAWje,KAAKkzD,cAAcY,sBAAsBxyD,gBAC9EtB,KAAK+zD,iBAAiB91C,EAAOje,KAAKozC,eAC7B,CACL,IAAM6f,EAAQjzD,KAAKkzD,cAAc9E,aAAanwC,EAAOje,KAAKozC,WAC1DpzC,KAAKozD,SAASH,EAAOvjD,EAASE,SAAUF,EAASI,SACnD,CACF,GAAC,CAAA3P,IAAA,WAAAC,MACD,SAAS6d,EAAO+kB,EAASC,GACvB,GAAc,OAAVhlB,GAAkBA,EAAMvc,OAAS,EAAG,OAAO,KAC/C,IAAMsG,EAAI,IAAIq0C,GAAmBp+B,EAAO,IAAIikB,GAAM,EAAGxyB,EAASG,SAAUmzB,EAASC,IACjFjjC,KAAKg0D,WAAW/iD,IAAIjJ,EACtB,GAAC,CAAA7H,IAAA,YAAAC,MACD,WAEE,OADAJ,KAAKiR,IAAIjR,KAAKi0D,YACPj0D,KAAKg0D,UACd,GAAC,CAAA7zD,IAAA,MAAAC,MACD,SAAIkM,GACF,GAAIA,EAAEE,UAAW,OAAO,KACxB,GAAIF,aAAaue,GAAS7qB,KAAKk0D,WAAW5nD,QAAS,GAAIA,aAAa0b,GAAYhoB,KAAKm0D,cAAc7nD,QAAS,GAAIA,aAAakd,GAAOxpB,KAAKo0D,SAAS9nD,QAAS,GAAIA,aAAaqiB,GAAY3uB,KAAKq0D,cAAc/nD,QAAS,GAAIA,aAAakpB,GAAiBx1B,KAAKq0D,cAAc/nD,QAAS,GAAIA,aAAa8mB,GAAcpzB,KAAKq0D,cAAc/nD,OAAS,MAAIA,aAAakhB,IAAgD,MAAM,IAAItd,EAA8B5D,EAAEiqB,mBAAtEv2B,KAAKq0D,cAAc/nD,EAAqE,CAC5c,GAAC,CAAAnM,IAAA,qBAAAC,MACD,SAAmBic,EAAMu3C,GACvB,IAAMU,EAAYj4C,EAAKsB,iBACvB,GAAI22C,EAAU5yD,OAAS,EAAG,OAAOkyD,EAAiB,EAClD,GAAyB,IAArBU,EAAU5yD,OAAc,OAAO1B,KAAKu0D,2BAA2BD,EAAWV,GAC9E,IAAM3pD,EAAMoS,EAAKtP,sBACXynD,EAAkB3zD,KAAK6K,IAAIzB,EAAIX,YAAaW,EAAIZ,YACtD,OAAIuqD,EAAiB,GAAO,EAAI/yD,KAAKC,IAAI8yD,GAAkBY,CAE7D,GAAC,CAAAr0D,IAAA,gBAAAC,MACD,SAAc+tB,GACZ,IAAK,IAAI7pB,EAAI,EAAGA,EAAI6pB,EAAGE,mBAAoB/pB,IAAK,CAC9C,IAAMgI,EAAI6hB,EAAGK,aAAalqB,GAC1BtE,KAAKiR,IAAI3E,EACX,CACF,IAAC,CAAA,CAAAnM,IAAA,eAAAC,MA9FD,WACEJ,KAAKi0D,WAAa,KAClBj0D,KAAKozC,UAAY,KACjBpzC,KAAKkzD,cAAgB,KACrBlzD,KAAKg0D,WAAa,IAAI50C,GACtB,IAAMq1C,EAAYx0D,UAAU,GAAI4K,EAAW5K,UAAU,GAAIy0D,EAAez0D,UAAU,GAClFD,KAAKi0D,WAAaQ,EAClBz0D,KAAKozC,UAAYvoC,EACjB7K,KAAKkzD,cAAgBwB,CACvB,IAAC,CAbuC,GClBrBC,GAAsB,WAAA,OAAAz0D,GAAA,SAAAy0D,IAAA90D,OAAA80D,EAAA,GAAA,CAAA,CAAAx0D,IAAA,SAAAC,MACzC,SAAOiK,GAAG,IAAE,CAD6B,GCItBuqD,GAA0B,WAC7C,SAAAA,IAAc/0D,OAAA+0D,GACZA,EAA2B90D,aAAaC,MAAMC,KAAMC,UACtD,CAAC,OAAAC,EAAA00D,EAAA,CAAA,CAAAz0D,IAAA,OAAAC,MAgBD,WACE,GAAIJ,KAAK60D,SAGP,OAFA70D,KAAK60D,UAAW,EACZD,EAA2BE,SAAS90D,KAAK+0D,UAAU/0D,KAAKojD,SACrDpjD,KAAK+0D,QAEd,GAAoC,OAAhC/0D,KAAKg1D,uBACP,IAAIh1D,KAAKg1D,uBAAuBlnD,UAC9B,OAAO9N,KAAKg1D,uBAAuBhnD,OAEnChO,KAAKg1D,uBAAyB,IAAI,CAGtC,GAAIh1D,KAAKojD,QAAUpjD,KAAKi1D,KACtB,MAAM,IAAIhlD,EAEZ,IAAM+f,EAAMhwB,KAAK+0D,QAAQvmC,aAAaxuB,KAAKojD,UAC3C,OAAIpzB,aAAexC,IACjBxtB,KAAKg1D,uBAAyB,IAAIJ,EAA2B5kC,GACtDhwB,KAAKg1D,uBAAuBhnD,QAE9BgiB,CACT,GAAC,CAAA7vB,IAAA,SAAAC,MACD,WACE,MAAM,IAAI8P,EAA8BlQ,KAAKoO,WAAW+7B,UAC1D,GAAC,CAAAhqC,IAAA,UAAAC,MACD,WACE,GAAIJ,KAAK60D,SACP,OAAO,EAET,GAAoC,OAAhC70D,KAAKg1D,uBAAiC,CACxC,GAAIh1D,KAAKg1D,uBAAuBlnD,UAC9B,OAAO,EAET9N,KAAKg1D,uBAAyB,IAChC,CACA,QAAIh1D,KAAKojD,QAAUpjD,KAAKi1D,KAI1B,GAAC,CAAA90D,IAAA,cAAAoI,IACD,WACE,MAAO,CAACgJ,GACV,IAAC,CAAA,CAAApR,IAAA,eAAAC,MA1DD,WACEJ,KAAK+0D,QAAU,KACf/0D,KAAK60D,SAAW,KAChB70D,KAAKi1D,KAAO,KACZj1D,KAAKojD,OAAS,KACdpjD,KAAKg1D,uBAAyB,KAC9B,IAAMztB,EAAStnC,UAAU,GACzBD,KAAK+0D,QAAUxtB,EACfvnC,KAAK60D,UAAW,EAChB70D,KAAKojD,OAAS,EACdpjD,KAAKi1D,KAAO1tB,EAAOlZ,kBACrB,GAAC,CAAAluB,IAAA,WAAAC,MACD,SAAgB+C,GACd,QAASA,aAAgBqqB,GAC3B,IAAC,CAlB4C,GCE1B0nC,GAAwB,WAC3C,SAAAA,IAAcr1D,OAAAq1D,GACZA,EAAyBp1D,aAAaC,MAAMC,KAAMC,UACpD,CAAC,OAAAC,EAAAg1D,EAAA,CAAA,CAAA/0D,IAAA,SAAAC,MAkDD,SAAOiK,GACL,OAAO6qD,EAAyBC,OAAO9qD,EAAGrK,KAAKo1D,MACjD,GAAC,CAAAj1D,IAAA,cAAAoI,IACD,WACE,MAAO,CAACosD,GACV,IAAC,CAAA,CAAAx0D,IAAA,eAAAC,MAtDD,WACEJ,KAAKo1D,MAAQ,KACb,IAAMjyD,EAAOlD,UAAU,GACvBD,KAAKo1D,MAAQjyD,CACf,GAAC,CAAAhD,IAAA,uBAAAC,MACD,SAA4BiK,EAAGoiB,GAC7B,GAAIA,EAAKjgB,UAAW,OAAOkD,EAASE,SACpC,IAAMoc,EAAQS,EAAKR,kBACbopC,EAAWH,EAAyBj0B,kBAAkB52B,EAAG2hB,GAC/D,GAAIqpC,IAAa3lD,EAASI,SAAU,OAAOulD,EAC3C,IAAK,IAAI/wD,EAAI,EAAGA,EAAImoB,EAAKlB,qBAAsBjnB,IAAK,CAClD,IAAMwpC,EAAOrhB,EAAKN,iBAAiB7nB,GAC7BgxD,EAAUJ,EAAyBj0B,kBAAkB52B,EAAGyjC,GAC9D,GAAIwnB,IAAY5lD,EAASG,SAAU,OAAOH,EAASG,SACnD,GAAIylD,IAAY5lD,EAASI,SAAU,OAAOJ,EAASE,QACrD,CACA,OAAOF,EAASI,QAClB,GAAC,CAAA3P,IAAA,oBAAAC,MACD,SAAyBiK,EAAGgS,GAC1B,OAAKA,EAAKtP,sBAAsB7C,WAAWG,GACpCy2B,GAAcI,aAAa72B,EAAGgS,EAAKsB,kBADYjO,EAASE,QAEjE,GAAC,CAAAzP,IAAA,yBAAAC,MACD,SAA8BiK,EAAGoiB,GAC/B,OAAO/c,EAASE,WAAaslD,EAAyBK,qBAAqBlrD,EAAGoiB,EAChF,GAAC,CAAAtsB,IAAA,mBAAAC,MACD,SAAwBiK,EAAGlH,GACzB,GAAIA,aAAgB0nB,GAClB,OAAOqqC,EAAyBK,qBAAqBlrD,EAAGlH,GAE1D,GAAIA,aAAgBqqB,GAElB,IADA,IAAMgoC,EAAQ,IAAIZ,GAA2BzxD,GACtCqyD,EAAM1nD,WAAW,CACtB,IAAM2nD,EAAKD,EAAMxnD,OACjB,GAAIynD,IAAOtyD,EAAM,CACf,IAAM8+B,EAAMizB,EAAyBQ,iBAAiBrrD,EAAGorD,GACzD,GAAIxzB,IAAQvyB,EAASE,SAAU,OAAOqyB,CACxC,CACF,CAEF,OAAOvyB,EAASE,QAClB,GAAC,CAAAzP,IAAA,cAAAC,MACD,SAAmBiK,EAAGlH,GACpB,OAAOuM,EAASE,WAAaslD,EAAyBC,OAAO9qD,EAAGlH,EAClE,GAAC,CAAAhD,IAAA,SAAAC,MACD,SAAciK,EAAGlH,GACf,OAAIA,EAAKqJ,UAAkBkD,EAASE,SAC/BzM,EAAK4J,sBAAsB7C,WAAWG,GACpC6qD,EAAyBQ,iBAAiBrrD,EAAGlH,GADEuM,EAASE,QAEjE,IAAC,CApD0C,GCGxB+lD,GAAW,WAG7B,OAAAz1D,GAFD,SAAAy1D,IAAc91D,OAAA81D,GACZA,EAAY71D,aAAaC,MAAMC,KAAMC,UACvC,GAAC,CAAA,CAAAE,IAAA,YAAAC,MAMD,SAAU6sC,GACRjtC,KAAKse,WACL,IAAMha,EAAItE,KAAK41D,UAAUljD,QAAQu6B,GAC7B4oB,EAAUvxD,EAAI,EAElB,OADU,IAANA,IAASuxD,EAAU71D,KAAK41D,UAAUzkD,OAAS,GACxCnR,KAAK41D,UAAUrtD,IAAIstD,EAC5B,GAAC,CAAA11D,IAAA,sBAAAC,MACD,SAAoBiiC,GAElB,IADA,IAAIyzB,EAAWpmD,EAASK,KACf8P,EAAK7f,KAAK4N,WAAYiS,EAAG/R,WAAa,CAC7C,IACMq1B,EADItjB,EAAG7R,OACGwS,WACZ2iB,EAAMR,OAAON,IAAcc,EAAMzC,YAAY2B,EAAWzwB,EAASE,QAAUpC,EAASK,OAAM+lD,EAAW3yB,EAAMzC,YAAY2B,EAAWzwB,EAASE,MACjJ,CACA,GAAIgkD,IAAapmD,EAASK,KAAM,OAAO,KAEvC,IADA,IAAIgmD,EAAUD,EACLj2C,EAAK7f,KAAK4N,WAAYiS,EAAG/R,WAAa,CAC7C,IAAM9F,EAAI6X,EAAG7R,OACPm1B,EAAQn7B,EAAEwY,WAEhB,GADI2iB,EAAMzC,YAAY2B,EAAWzwB,EAASI,MAAQtC,EAASK,MAAMozB,EAAMrB,YAAYO,EAAWzwB,EAASI,GAAI+jD,GACvG5yB,EAAMR,OAAON,GAAY,CAC3B,IAAMW,EAAUG,EAAMzC,YAAY2B,EAAWzwB,EAASE,MAChDmxB,EAAWE,EAAMzC,YAAY2B,EAAWzwB,EAASG,OACvD,GAAIkxB,IAAavzB,EAASK,KAAM,CAC9B,GAAIkzB,IAAa8yB,EAAS,MAAM,IAAIj3C,GAAkB,yBAA0B9W,EAAE6U,iBAC9EmmB,IAAYtzB,EAASK,MACvBzJ,EAAOC,qBAAqB,8BAAgCyB,EAAE6U,gBAAkB,KAElFk5C,EAAU/yB,CACZ,MACE18B,EAAOG,OAAO08B,EAAMzC,YAAY2B,EAAWzwB,EAASE,QAAUpC,EAASK,KAAM,0BAC7EozB,EAAMrB,YAAYO,EAAWzwB,EAASG,MAAOgkD,GAC7C5yB,EAAMrB,YAAYO,EAAWzwB,EAASE,KAAMikD,EAEhD,CACF,CACF,GAAC,CAAA51D,IAAA,gBAAAC,MACD,WACE,IAAMyf,EAAK7f,KAAK4N,WAChB,OAAKiS,EAAG/R,UACE+R,EAAG7R,OACJ6O,gBAFiB,IAG5B,GAAC,CAAA1c,IAAA,QAAAC,MACD,SAAMk/B,GACJnc,GAAOmc,IAAIC,QAAQ,kBAAoBv/B,KAAK6c,iBAC5C,IAAK,IAAIgD,EAAK7f,KAAK4N,WAAYiS,EAAG/R,WAAa,CACnC+R,EAAG7R,OACX66B,MAAMvJ,EACV,CACF,GAAC,CAAAn/B,IAAA,yBAAAC,MACD,SAAuB41D,GAErB,OADAh2D,KAAKi2D,qBAAqBD,EAAUE,uBAC7Bl2D,KAAKm2D,0BAA0B,EACxC,GAAC,CAAAh2D,IAAA,4BAAAC,MACD,SAA0BiiC,GACxB,IAAM4E,EAAQjnC,KAAKse,WACnB,GAAI2oB,EAAM91B,QAAU,EAAG,OAAO,EAC9B,IAAMilD,EAAgBnvB,EAAM91B,OAAS,EAE/B2kD,EADa7uB,EAAM1+B,IAAI6tD,GAAe51C,WAChBkgB,YAAY2B,EAAWzwB,EAASE,MAC5DxL,EAAOG,OAAOqvD,IAAapmD,EAASK,KAAM,8BAE1C,IADA,IAAIgmD,EAAUD,EACLj2C,EAAK7f,KAAK4N,WAAYiS,EAAG/R,WAAa,CAC7C,IACMq1B,EADItjB,EAAG7R,OACGwS,WAChBla,EAAOG,OAAO08B,EAAMR,OAAON,GAAY,uBACvC,IAAMW,EAAUG,EAAMzC,YAAY2B,EAAWzwB,EAASE,MAChDmxB,EAAWE,EAAMzC,YAAY2B,EAAWzwB,EAASG,OACvD,GAAIixB,IAAYC,EACd,OAAO,EAET,GAAIA,IAAa8yB,EACf,OAAO,EAETA,EAAU/yB,CACZ,CACA,OAAO,CACT,GAAC,CAAA7iC,IAAA,YAAAC,MACD,SAAUi2D,GACRr2D,KAAK4N,WACL,IAAK,IAAItJ,EAAI,EAAGA,EAAItE,KAAK41D,UAAUzkD,OAAQ7M,IAAK,CAE9C,GADUtE,KAAK41D,UAAUrtD,IAAIjE,KACnB+xD,EAAS,OAAO/xD,CAC5B,CACA,OAAQ,CACV,GAAC,CAAAnE,IAAA,WAAAC,MACD,WACE,OAAOJ,KAAKse,WAAW1Q,UACzB,GAAC,CAAAzN,IAAA,WAAAC,MACD,WAIE,OAHuB,OAAnBJ,KAAK41D,YACP51D,KAAK41D,UAAY,IAAIx2C,GAAUpf,KAAKs2D,SAAShlD,WAExCtR,KAAK41D,SACd,GAAC,CAAAz1D,IAAA,cAAAC,MACD,SAAYiiC,EAAWh4B,EAAGlH,GAIxB,OAHInD,KAAKu2D,kBAAkBl0B,KAAe3yB,EAASK,OACjD/P,KAAKu2D,kBAAkBl0B,GAAa6yB,GAAyBC,OAAO9qD,EAAGlH,EAAKk/B,GAAWm0B,gBAElFx2D,KAAKu2D,kBAAkBl0B,EAChC,GAAC,CAAAliC,IAAA,WAAAC,MACD,WACE,IAAM6T,EAAM,IAAIpB,GAChBoB,EAAIG,OAAO,kBAAoBpU,KAAK6c,iBACpC5I,EAAIG,OAAO,MACX,IAAK,IAAIyL,EAAK7f,KAAK4N,WAAYiS,EAAG/R,WAAa,CAC7C,IAAM9F,EAAI6X,EAAG7R,OACbiG,EAAIG,OAAOpM,GACXiM,EAAIG,OAAO,KACb,CACA,OAAOH,EAAIa,UACb,GAAC,CAAA3U,IAAA,uBAAAC,MACD,SAAqBoqC,GACnB,IAAK,IAAI3qB,EAAK7f,KAAK4N,WAAYiS,EAAG/R,WAAa,CAClC+R,EAAG7R,OACXyoD,aAAajsB,EAClB,CACF,GAAC,CAAArqC,IAAA,mBAAAC,MACD,SAAiB41D,GACfh2D,KAAKi2D,qBAAqBD,EAAU,GAAGE,uBACvCl2D,KAAK02D,oBAAoB,GACzB12D,KAAK02D,oBAAoB,GAEzB,IADA,IAAMC,EAA6B,EAAC,GAAO,GAClC92C,EAAK7f,KAAK4N,WAAYiS,EAAG/R,WAGhC,IAFA,IACMq1B,EADItjB,EAAG7R,OACGwS,WACPg1C,EAAQ,EAAGA,EAAQ,EAAGA,IACzBryB,EAAMZ,OAAOizB,IAAUryB,EAAMzC,YAAY80B,KAAW9lD,EAASG,WAAU8mD,EAA2BnB,IAAS,GAGnH,IAAK,IAAI31C,EAAK7f,KAAK4N,WAAYiS,EAAG/R,WAGhC,IAFA,IAAM9F,EAAI6X,EAAG7R,OACPm1B,EAAQn7B,EAAEwY,WACPg1C,EAAQ,EAAGA,EAAQ,EAAGA,IAC7B,GAAIryB,EAAMP,UAAU4yB,GAAQ,CAC1B,IAAIvzB,EAAMvyB,EAASK,KACnB,GAAI4mD,EAA2BnB,GAC7BvzB,EAAMvyB,EAASE,aACV,CACL,IAAMvF,EAAIrC,EAAE6U,gBACZolB,EAAMjiC,KAAK0gC,YAAY80B,EAAOnrD,EAAG2rD,EACnC,CACA7yB,EAAMb,sBAAsBkzB,EAAOvzB,EACrC,CAGN,GAAC,CAAA9hC,IAAA,YAAAC,MACD,WACE,OAAOJ,KAAKs2D,SAASnlD,MACvB,GAAC,CAAAhR,IAAA,gBAAAC,MACD,SAAc4H,EAAGgoB,GACfhwB,KAAKs2D,SAAShhC,IAAIttB,EAAGgoB,GACrBhwB,KAAK41D,UAAY,IACnB,IAAC,CAAA,CAAAz1D,IAAA,eAAAC,MA9JD,WACEJ,KAAKs2D,SAAW,IAAI3uB,GACpB3nC,KAAK41D,UAAY,KACjB51D,KAAKu2D,kBAAoB,CAAC7mD,EAASK,KAAML,EAASK,KACpD,IAAC,CAR6B,GCAX6mD,YAAgBC,GACnC,SAAAD,IAAc,IAAAp0D,EAEwC,OAFxC3C,OAAA+2D,GACZp0D,EAAAC,EAAAzC,KAAA42D,GACAA,EAAiB92D,aAAaC,MAAKyC,EAAOvC,WAAUuC,CACtD,CAAC,OAAAK,EAAA+zD,EAAAC,GAAA32D,EAAA02D,EAAA,CAAA,CAAAz2D,IAAA,0BAAAC,MAOD,WACEJ,KAAK82D,qBAIL,IAHA,IAAIC,EAAW,KACXC,EAAW,KACXC,EAAQj3D,KAAKk3D,uBACR5yD,EAAI,EAAGA,EAAItE,KAAKm3D,oBAAoBhmD,OAAQ7M,IAAK,CACxD,IAAM8yD,EAAUp3D,KAAKm3D,oBAAoB5uD,IAAIjE,GACvC+yD,EAASD,EAAQ34C,SACvB,GAAK24C,EAAQ52C,WAAWmiB,SAExB,OADiB,OAAbo0B,GAAqBK,EAAQrxB,eAAcgxB,EAAWK,GAClDH,GACR,KAAKj3D,KAAKk3D,uBACR,IAAKG,EAAOtxB,aAAc,SAC1BixB,EAAWK,EACXJ,EAAQj3D,KAAKs3D,qBACb,MACF,KAAKt3D,KAAKs3D,qBACR,IAAKF,EAAQrxB,aAAc,SAC3BixB,EAASO,QAAQH,GACjBH,EAAQj3D,KAAKk3D,uBAGjB,CACA,GAAID,IAAUj3D,KAAKs3D,qBAAsB,CACvC,GAAiB,OAAbP,EAAmB,MAAM,IAAIj4C,GAAkB,4BAA6B9e,KAAK6c,iBACrFvW,EAAOG,OAAOswD,EAAShxB,aAAc,wCACrCixB,EAASO,QAAQR,EACnB,CACF,GAAC,CAAA52D,IAAA,SAAAC,MACD,SAAO6sC,GACL,IAAM7vB,EAAK6vB,EACXjtC,KAAKw3D,cAAcp6C,EAAIA,EACzB,GAAC,CAAAjd,IAAA,mBAAAC,MACD,WACE,IAAM6mC,EAAQjnC,KAAKse,WACbnN,EAAO81B,EAAM91B,OACnB,GAAIA,EAAO,EAAG,OAAO,KACrB,IAAMsmD,EAAMxwB,EAAM1+B,IAAI,GACtB,GAAa,IAAT4I,EAAY,OAAOsmD,EACvB,IAAMC,EAASzwB,EAAM1+B,IAAI4I,EAAO,GAC1BwmD,EAAQF,EAAIG,cACZxuB,EAAQsuB,EAAOE,cACrB,OAAI5uB,GAAS6uB,WAAWF,IAAU3uB,GAAS6uB,WAAWzuB,GAC7CquB,EACGzuB,GAAS6uB,WAAWF,IAAW3uB,GAAS6uB,WAAWzuB,GAIzC,IAAhBquB,EAAIK,QAAsBL,EAAiC,IAAnBC,EAAOI,QAAsBJ,GAE3EpxD,EAAOC,qBAAqB,+CACrB,MANEmxD,CAOX,GAAC,CAAAv3D,IAAA,QAAAC,MACD,SAAMk/B,GACJnc,GAAOmc,IAAIC,QAAQ,qBAAuBv/B,KAAK6c,iBAC/C,IAAK,IAAIgD,EAAK7f,KAAK4N,WAAYiS,EAAG/R,WAAa,CAC7C,IAAMsP,EAAKyC,EAAG7R,OACdsxB,EAAIuJ,MAAM,QACVzrB,EAAGyrB,MAAMvJ,GACTA,EAAIC,UACJD,EAAIuJ,MAAM,OACVzrB,EAAGqB,SAASoqB,MAAMvJ,GAClBA,EAAIC,SACN,CACF,GAAC,CAAAp/B,IAAA,qBAAAC,MACD,WACE,GAAiC,OAA7BJ,KAAKm3D,oBAA8B,OAAOn3D,KAAKm3D,oBACnDn3D,KAAKm3D,oBAAsB,IAAI/3C,GAC/B,IAAK,IAAIS,EAAK7f,KAAK4N,WAAYiS,EAAG/R,WAAa,CAC7C,IAAMsP,EAAKyC,EAAG7R,QACVoP,EAAG2oB,cAAgB3oB,EAAGqB,SAASsnB,eAAc/lC,KAAKm3D,oBAAoBlmD,IAAImM,EAChF,CACA,OAAOpd,KAAKm3D,mBACd,GAAC,CAAAh3D,IAAA,kBAAAC,MACD,SAAgB23D,GACd,IAAK,IAAIl4C,EAAK7f,KAAK4N,WAAYiS,EAAG/R,WAAa,CAC7C,IACMq1B,EADKtjB,EAAG7R,OACGwS,WACjB2iB,EAAMb,sBAAsB,EAAGy1B,EAAUr3B,YAAY,IACrDyC,EAAMb,sBAAsB,EAAGy1B,EAAUr3B,YAAY,GACvD,CACF,GAAC,CAAAvgC,IAAA,uBAAAC,MACD,WACEJ,KAAKse,WAGL,IAFA,IAAI05C,EAAU,KACVC,EAAU,KACL3zD,EAAItE,KAAK41D,UAAUzkD,OAAS,EAAG7M,GAAK,EAAGA,IAAK,CACnD,IAAM8yD,EAAUp3D,KAAK41D,UAAUrtD,IAAIjE,GAC7B+yD,EAASD,EAAQ34C,SACP,OAAZw5C,IAAkBA,EAAUZ,GAChB,OAAZW,GAAkBX,EAAOE,QAAQS,GACrCA,EAAUZ,CACZ,CACAa,EAAQV,QAAQS,EAClB,GAAC,CAAA73D,IAAA,gBAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OAAc,CAC1B,IAAM0b,EAAKnd,UAAU,GACfi4D,EAAYl4D,KAAKm4D,UAAU/6C,GAC3Bg7C,EAAah7C,EAAGyD,SAASjP,EAASE,MAClCumD,EAAkBj7C,EAAGyD,SAASjP,EAASG,OACvCumD,EAAYt4D,KAAKmgB,cAAc+3C,EAAY,EAAGl4D,KAAK41D,UAAUzkD,OAAQinD,GAE3E,GADkBp4D,KAAKmgB,cAAc,EAAG+3C,EAAWI,KACjCD,EAAiB,MAAM,IAAIv5C,GAAkB,qBAAuB1B,EAAGP,gBAC3F,MAAO,GAAyB,IAArB5c,UAAUyB,OAAc,CAGjC,IAFA,IAAiC62D,EAAWt4D,UAAU,GAClDu4D,EADmEv4D,UAAU,GAExEqE,EAFUrE,UAAU,GAEJqE,EAAIi0D,EAAUj0D,IAAK,CAC1C,IAAMm0D,EAASz4D,KAAK41D,UAAUrtD,IAAIjE,GAClCm0D,EAAOh4C,cAAc7O,EAASG,MAAOymD,GACrCA,EAAYC,EAAO53C,SAASjP,EAASE,KACvC,CACA,OAAO0mD,CACT,CACF,GAAC,CAAAr4D,IAAA,iBAAAC,MACD,WACE,IAAK,IAAIyf,EAAK7f,KAAK4N,WAAYiS,EAAG/R,WAAa,CAC7C,IAAMsP,EAAKyC,EAAG7R,OACAoP,EAAGoD,WACXiiB,MAAMrlB,EAAGqB,SAAS+B,WAC1B,CACF,GAAC,CAAArgB,IAAA,2BAAAC,MACD,SAAyBilC,GAIvB,IAHA,IAAI0xB,EAAW,KACXC,EAAW,KACXC,EAAQj3D,KAAKk3D,uBACR5yD,EAAItE,KAAKm3D,oBAAoBhmD,OAAS,EAAG7M,GAAK,EAAGA,IAAK,CAC7D,IAAM8yD,EAAUp3D,KAAKm3D,oBAAoB5uD,IAAIjE,GACvC+yD,EAASD,EAAQ34C,SAEvB,OADiB,OAAbs4C,GAAqBK,EAAQtzB,gBAAkBuB,IAAI0xB,EAAWK,GAC1DH,GACR,KAAKj3D,KAAKk3D,uBACR,GAAIG,EAAOvzB,gBAAkBuB,EAAI,SACjC2xB,EAAWK,EACXJ,EAAQj3D,KAAKs3D,qBACb,MACF,KAAKt3D,KAAKs3D,qBACR,GAAIF,EAAQtzB,gBAAkBuB,EAAI,SAClC2xB,EAAS0B,WAAWtB,GACpBH,EAAQj3D,KAAKk3D,uBAGjB,CACID,IAAUj3D,KAAKs3D,uBACjBhxD,EAAOG,OAAoB,OAAbswD,EAAmB,yCACjCzwD,EAAOG,OAAOswD,EAASjzB,gBAAkBuB,EAAI,wCAC7C2xB,EAAS0B,WAAW3B,GAExB,GAAC,CAAA52D,IAAA,oBAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OAAc,CAE1B,IADA,IAAI2iC,EAAS,EACJxkB,EAAK7f,KAAK4N,WAAYiS,EAAG/R,WAAa,CAClC+R,EAAG7R,OACP+3B,cAAc1B,GACvB,CACA,OAAOA,CACT,CAAO,GAAyB,IAArBpkC,UAAUyB,OAAc,CAGjC,IAFA,IAAM2jC,EAAKplC,UAAU,GACjBokC,EAAS,EACJxkB,EAAK7f,KAAK4N,WAAYiS,EAAG/R,WAAa,CAClC+R,EAAG7R,OACP81B,gBAAkBuB,GAAIhB,GAC/B,CACA,OAAOA,CACT,CACF,GAAC,CAAAlkC,IAAA,WAAAC,MACD,WACE,OAAOJ,KAAK0jC,MACd,GAAC,CAAAvjC,IAAA,uBAAAC,MACD,WAEE,IADA,IAAI01D,EAAWpmD,EAASK,KACf8P,EAAK7f,KAAK4N,WAAYiS,EAAG/R,WAAa,CAC7C,IAAMspD,EAAUv3C,EAAG7R,OACbqpD,EAASD,EAAQ34C,SACvB,IAAK24C,EAAQuB,aAAc,CACzB,GAAIvB,EAAQrxB,aAAc,CACxB+vB,EAAWpmD,EAASI,SACpB,KACF,CACA,GAAIunD,EAAOtxB,aAAc,CACvB+vB,EAAWpmD,EAASE,SACpB,KACF,CACF,CACF,CACA,GAAIkmD,IAAapmD,EAASK,KAAM,OAAO,KAEvC,IADA,IAAIgmD,EAAUD,EACLj2C,EAAK7f,KAAK4N,WAAYiS,EAAG/R,WAAa,CAC7C,IAAMspD,EAAUv3C,EAAG7R,OACbqpD,EAASD,EAAQ34C,SACnB24C,EAAQuB,aACVvB,EAAQ15C,UAAUk7C,WAAW7C,IAAYrmD,EAASI,WAE9CsnD,EAAQrxB,eAAcgwB,EAAUrmD,EAASE,UACzCynD,EAAOtxB,eAAcgwB,EAAUrmD,EAASI,UAEhD,CACF,GAAC,CAAA3P,IAAA,mBAAAC,MACD,SAAiB+C,GACfulB,EAAAkuC,EAAuBvwD,mBAAAA,KAAAA,GAAAA,KAAKrG,KAAMmD,GAClCnD,KAAK0jC,OAAS,IAAIxB,GAAMxyB,EAASK,MACjC,IAAK,IAAI8P,EAAK7f,KAAK4N,WAAYiS,EAAG/R,WAIhC,IAHA,IAEM+qD,EAFKh5C,EAAG7R,OACD0P,UACI8C,WACRlc,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1B,IAAMw0D,EAAOD,EAAOn4B,YAAYp8B,GAC5Bw0D,IAASppD,EAASI,UAAYgpD,IAASppD,EAASG,UAAU7P,KAAK0jC,OAAO5B,YAAYx9B,EAAGoL,EAASI,SACpG,CAEJ,IAAC,CAAA,CAAA3P,IAAA,eAAAC,MAzND,WACEJ,KAAKm3D,oBAAsB,KAC3Bn3D,KAAK0jC,OAAS,KACd1jC,KAAKk3D,uBAAyB,EAC9Bl3D,KAAKs3D,qBAAuB,CAC9B,IAAC,EAV2C3B,ICNzBoD,YAAkBC,GACrC,SAAAD,IAAc,OAAAl5D,OAAAk5D,GAAAt2D,OAAAs2D,EAEd,CAAC,OAAAl2D,EAAAk2D,EAAAC,GAAA94D,EAAA64D,EAAA,CAAA,CAAA54D,IAAA,aAAAC,MACD,SAAW6d,GACT,OAAO,IAAIqoB,GAAKroB,EAAO,IAAI24C,GAC7B,IAAC,EAN6CxqB,ICD3B6sB,GAAuB,WAC1C,SAAAA,IAAcp5D,OAAAo5D,GACZA,EAAwBn5D,aAAaC,MAAMC,KAAMC,UACnD,CAAC,OAAAC,EAAA+4D,EAAA,CAAA,CAAA94D,IAAA,YAAAC,MA8BD,SAAUuxB,GACR,IAAMunC,EAAMvnC,EAEZ,OADasnC,EAAwBE,gBAAgBn5D,KAAKujC,KAAMvjC,KAAKo5D,aAAcF,EAAI31B,KAAM21B,EAAIE,aAEnG,GAAC,CAAAj5D,IAAA,cAAAoI,IACD,WACE,MAAO,CAACnF,EACV,IAAC,CAAA,CAAAjD,IAAA,eAAAC,MApCD,WACEJ,KAAKujC,KAAO,KACZvjC,KAAKo5D,aAAe,KACpB,IAAM57C,EAAMvd,UAAU,GACtBD,KAAKujC,KAAO/lB,EACZxd,KAAKo5D,aAAeH,EAAwBl7C,YAAYP,EAC1D,GAAC,CAAArd,IAAA,cAAAC,MACD,SAAmBod,GACjB,OAAqD,IAA9C8S,GAAiB2B,oBAAoBzU,EAC9C,GAAC,CAAArd,IAAA,kBAAAC,MACD,SAAuBgxB,EAAMioC,EAAchoC,EAAMioC,GAO/C,IANA,IAAMtnC,EAAOqnC,EAAe,GAAK,EAC3BnnC,EAAOonC,EAAe,GAAK,EAC3BC,EAASF,EAAejoC,EAAK1vB,QAAU,EACvC83D,EAASF,EAAejoC,EAAK3vB,QAAU,EACzCywB,EAAKknC,EAAe,EAAIjoC,EAAK1vB,OAAS,EACtC0wB,EAAKknC,EAAe,EAAIjoC,EAAK3vB,OAAS,IAC7B,CACX,IAAM+3D,EAASroC,EAAKe,GAAIhkB,UAAUkjB,EAAKe,IACvC,GAAe,IAAXqnC,EAAc,OAAOA,EAGzB,IAAMC,GAFNvnC,GAAMH,KAEeunC,EACfI,GAFNvnC,GAAMF,KAEesnC,EACrB,GAAIE,IAAUC,EAAO,OAAQ,EAC7B,IAAKD,GAASC,EAAO,OAAO,EAC5B,GAAID,GAASC,EAAO,OAAO,CAC7B,CACF,IAAC,CAhCyC,GCCvBC,GAAQ,WAG1B,OAAA15D,GAFD,SAAA05D,IAAc/5D,OAAA+5D,GACZA,EAAS95D,aAAaC,MAAMC,KAAMC,UACpC,GAAC,CAAA,CAAAE,IAAA,QAAAC,MAKD,SAAMk/B,GACJA,EAAIuJ,MAAM,sBACV,IAAK,IAAIh7B,EAAI,EAAGA,EAAI7N,KAAK+jC,OAAO5yB,OAAQtD,IAAK,CAC3C,IAAM7F,EAAIhI,KAAK+jC,OAAOx7B,IAAIsF,GACtBA,EAAI,GAAGyxB,EAAIuJ,MAAM,KACrBvJ,EAAIuJ,MAAM,KAEV,IADA,IAAMrrB,EAAMxV,EAAE2V,iBACLrZ,EAAI,EAAGA,EAAIkZ,EAAI9b,OAAQ4C,IAC1BA,EAAI,GAAGg7B,EAAIuJ,MAAM,KACrBvJ,EAAIuJ,MAAMrrB,EAAIlZ,GAAGoB,EAAI,IAAM8X,EAAIlZ,GAAGqB,GAEpC25B,EAAIC,QAAQ,IACd,CACAD,EAAIuJ,MAAM,MACZ,GAAC,CAAA1oC,IAAA,SAAAC,MACD,SAAOy5D,GACL,IAAK,IAAIv1D,EAAIu1D,EAASjsD,WAAYtJ,EAAEwJ,WAClC9N,KAAKiR,IAAI3M,EAAE0J,OAEf,GAAC,CAAA7N,IAAA,gBAAAC,MACD,SAAc4H,GACZ,IAAK,IAAI1D,EAAI,EAAGA,EAAItE,KAAK+jC,OAAO5yB,OAAQ7M,IACtC,GAAItE,KAAK+jC,OAAOx7B,IAAIjE,GAAGsC,OAAOoB,GAAI,OAAO1D,EAE3C,OAAQ,CACV,GAAC,CAAAnE,IAAA,WAAAC,MACD,WACE,OAAOJ,KAAK+jC,OAAOn2B,UACrB,GAAC,CAAAzN,IAAA,WAAAC,MACD,WACE,OAAOJ,KAAK+jC,MACd,GAAC,CAAA5jC,IAAA,MAAAC,MACD,SAAIkE,GACF,OAAOtE,KAAK+jC,OAAOx7B,IAAIjE,EACzB,GAAC,CAAAnE,IAAA,gBAAAC,MACD,SAAc4H,GACZ,IAAMkxD,EAAM,IAAID,GAAwBjxD,EAAE2V,kBAE1C,OADkB3d,KAAK85D,QAAQvxD,IAAI2wD,EAErC,GAAC,CAAA/4D,IAAA,MAAAC,MACD,SAAI4H,GACFhI,KAAK+jC,OAAO9yB,IAAIjJ,GAChB,IAAMkxD,EAAM,IAAID,GAAwBjxD,EAAE2V,kBAC1C3d,KAAK85D,QAAQxkC,IAAI4jC,EAAKlxD,EACxB,IAAC,CAAA,CAAA7H,IAAA,eAAAC,MAhDD,WACEJ,KAAK+jC,OAAS,IAAI3kB,GAClBpf,KAAK85D,QAAU,IAAInyB,EACrB,IAAC,CAP0B,GCHRoyB,GAAkB,WAAA,OAAA75D,GAAA,SAAA65D,IAAAl6D,OAAAk6D,EAAA,GAAA,CAAA,CAAA55D,IAAA,uBAAAC,MACrC,SAAqB45D,EAAIC,EAAWC,EAAIC,GAAW,GAAE,CAAAh6D,IAAA,SAAAC,MACrD,WAAS,IAAE,CAF0B,GCClBg6D,GAAiB,WACpC,SAAAA,IAAcv6D,OAAAu6D,GACZA,EAAkBt6D,aAAaC,MAAMC,KAAMC,UAC7C,CAAC,OAAAC,EAAAk6D,EAAA,CAAA,CAAAj6D,IAAA,wBAAAC,MAmBD,SAAsB45D,EAAIC,EAAWC,EAAIC,GACvC,GAAIH,IAAOE,GAC6B,IAAlCl6D,KAAK8rD,IAAIjO,qBAA4B,CACvC,GAAIuc,EAAkBC,mBAAmBJ,EAAWE,GAAY,OAAO,EACvE,GAAIH,EAAG5xC,WAAY,CACjB,IAAMg0B,EAAc4d,EAAG7oD,OAAS,EAChC,GAAkB,IAAd8oD,GAAmBE,IAAc/d,GAA6B,IAAd+d,GAAmBF,IAAc7d,EACnF,OAAO,CAEX,CACF,CAEF,OAAO,CACT,GAAC,CAAAj8C,IAAA,6BAAAC,MACD,WACE,OAAOJ,KAAKs6D,wBACd,GAAC,CAAAn6D,IAAA,gCAAAC,MACD,WACE,OAAOJ,KAAKu6D,kBACd,GAAC,CAAAp6D,IAAA,qBAAAC,MACD,WACE,OAAOJ,KAAK8rD,GACd,GAAC,CAAA3rD,IAAA,wBAAAC,MACD,WACE,OAAOJ,KAAKw6D,UACd,GAAC,CAAAr6D,IAAA,uBAAAC,MACD,SAAqB45D,EAAIC,EAAWC,EAAIC,GACtC,GAAIH,IAAOE,GAAMD,IAAcE,EAAW,OAAO,KACjDn6D,KAAKy6D,WACL,IAAMC,EAAMV,EAAGr8C,iBAAiBs8C,GAC1BU,EAAMX,EAAGr8C,iBAAiBs8C,EAAY,GACtCW,EAAMV,EAAGv8C,iBAAiBw8C,GAC1BU,EAAMX,EAAGv8C,iBAAiBw8C,EAAY,GAC5Cn6D,KAAK8rD,IAAI9qB,oBAAoB05B,EAAKC,EAAKC,EAAKC,GACxC76D,KAAK8rD,IAAIpuB,oBACX19B,KAAK86D,mBACD96D,KAAK8rD,IAAInuB,2BACX39B,KAAK+6D,2BACL/6D,KAAKg7D,cAAe,GAEjBh7D,KAAKi7D,sBAAsBjB,EAAIC,EAAWC,EAAIC,KACjDn6D,KAAKk7D,kBAAmB,EACxBlB,EAAGmB,iBAAiBn7D,KAAK8rD,IAAKmO,EAAW,GACzCC,EAAGiB,iBAAiBn7D,KAAK8rD,IAAKqO,EAAW,GACrCn6D,KAAK8rD,IAAIsP,aACXp7D,KAAKq7D,yBACLr7D,KAAKw6D,YAAa,EAClBx6D,KAAKu6D,oBAAqB,IAIlC,GAAC,CAAAp6D,IAAA,kBAAAC,MACD,WACE,OAAOJ,KAAKk7D,gBACd,GAAC,CAAA/6D,IAAA,SAAAC,MACD,WACE,OAAO,CACT,GAAC,CAAAD,IAAA,0BAAAC,MACD,WACE,OAAOJ,KAAKg7D,YACd,GAAC,CAAA76D,IAAA,cAAAoI,IACD,WACE,MAAO,CAACwxD,GACV,IAAC,CAAA,CAAA55D,IAAA,eAAAC,MAjFD,WACEJ,KAAKk7D,kBAAmB,EACxBl7D,KAAKw6D,YAAa,EAClBx6D,KAAKu6D,oBAAqB,EAC1Bv6D,KAAKg7D,cAAe,EACpBh7D,KAAKs6D,yBAA2B,KAChCt6D,KAAK8rD,IAAM,KACX9rD,KAAKs7D,oBAAsB,KAC3Bt7D,KAAK86D,iBAAmB,EACxB96D,KAAK+6D,yBAA2B,EAChC/6D,KAAKq7D,uBAAyB,EAC9Br7D,KAAKy6D,SAAW,EAChB,IAAM7c,EAAK39C,UAAU,GACrBD,KAAK8rD,IAAMlO,CACb,GAAC,CAAAz9C,IAAA,qBAAAC,MACD,SAA0B+xB,EAAIC,GAC5B,OAA6B,IAAtBvxB,KAAKC,IAAIqxB,EAAKC,EACvB,IAAC,CArBmC,GCCjBmpC,GAAgB,WAGlC,OAAAr7D,GAFD,SAAAq7D,IAAc17D,OAAA07D,GACZA,EAAiBz7D,aAAaC,MAAMC,KAAMC,UAC5C,GAAC,CAAA,CAAAE,IAAA,kBAAAC,MAUD,WACE,OAAOJ,KAAK48B,YACd,GAAC,CAAAz8B,IAAA,gBAAAC,MACD,WACE,OAAOJ,KAAKie,KACd,GAAC,CAAA9d,IAAA,QAAAC,MACD,SAAMk/B,GACJA,EAAIuJ,MAAM7oC,KAAKie,OACfqhB,EAAIuJ,MAAM,YAAc7oC,KAAK48B,cAC7B0C,EAAIC,QAAQ,WAAav/B,KAAK2kB,KAChC,GAAC,CAAAxkB,IAAA,YAAAC,MACD,SAAU4vB,GACR,IAAMzoB,EAAQyoB,EACd,OAAOhwB,KAAK8I,QAAQvB,EAAMq1B,aAAcr1B,EAAMod,KAChD,GAAC,CAAAxkB,IAAA,aAAAC,MACD,SAAWm6C,GACT,OAA0B,IAAtBv6C,KAAK48B,cAAoC,IAAd58B,KAAK2kB,MAChC3kB,KAAK48B,eAAiB2d,CAE5B,GAAC,CAAAp6C,IAAA,WAAAC,MACD,WACE,OAAOJ,KAAKie,MAAQ,YAAcje,KAAK48B,aAAe,WAAa58B,KAAK2kB,IAC1E,GAAC,CAAAxkB,IAAA,cAAAC,MACD,WACE,OAAOJ,KAAK2kB,IACd,GAAC,CAAAxkB,IAAA,UAAAC,MACD,SAAQw8B,EAAcjY,GACpB,OAAI3kB,KAAK48B,aAAeA,GAAsB,EAC1C58B,KAAK48B,aAAeA,EAAqB,EACzC58B,KAAK2kB,KAAOA,GAAc,EAC1B3kB,KAAK2kB,KAAOA,EAAa,EACtB,CACT,GAAC,CAAAxkB,IAAA,cAAAoI,IACD,WACE,MAAO,CAACnF,EACV,IAAC,CAAA,CAAAjD,IAAA,eAAAC,MA5CD,WACEJ,KAAKie,MAAQ,KACbje,KAAK48B,aAAe,KACpB58B,KAAK2kB,KAAO,KACZ,IAAM1G,EAAQhe,UAAU,GAAI28B,EAAe38B,UAAU,GAAI0kB,EAAO1kB,UAAU,GAC1ED,KAAKie,MAAQ,IAAIhX,EAAWgX,GAC5Bje,KAAK48B,aAAeA,EACpB58B,KAAK2kB,KAAOA,CACd,IAAC,CAZkC,GCGhB62C,GAAoB,WAGtC,OAAAt7D,GAFD,SAAAs7D,IAAc37D,OAAA27D,GACZA,EAAqB17D,aAAaC,MAAMC,KAAMC,UAChD,GAAC,CAAA,CAAAE,IAAA,QAAAC,MAOD,SAAMk/B,GACJA,EAAIC,QAAQ,kBACZ,IAAK,IAAI1f,EAAK7f,KAAK4N,WAAYiS,EAAG/R,WAAa,CAClC+R,EAAG7R,OACX66B,MAAMvJ,EACX,CACF,GAAC,CAAAn/B,IAAA,WAAAC,MACD,WACE,OAAOJ,KAAK47C,SAAStqC,SAAS1D,UAChC,GAAC,CAAAzN,IAAA,gBAAAC,MACD,SAAcy7C,GACZ77C,KAAK46C,eAGL,IAFA,IAAM/6B,EAAK7f,KAAK4N,WACZitC,EAASh7B,EAAG7R,OACT6R,EAAG/R,WAAW,CACnB,IAAMgtC,EAAKj7B,EAAG7R,OACR+tC,EAAU/7C,KAAKg8C,gBAAgBnB,EAAQC,GAC7Ce,EAAS5qC,IAAI8qC,GACblB,EAASC,CACX,CACF,GAAC,CAAA36C,IAAA,eAAAC,MACD,WACE,IAAMg8C,EAAcp8C,KAAKukC,KAAK/mB,IAAI9b,OAAS,EAC3C1B,KAAKiR,IAAIjR,KAAKukC,KAAK/mB,IAAI,GAAI,EAAG,GAC9Bxd,KAAKiR,IAAIjR,KAAKukC,KAAK/mB,IAAI4+B,GAAcA,EAAa,EACpD,GAAC,CAAAj8C,IAAA,kBAAAC,MACD,SAAgBi7C,EAAKC,GACnB,IAAI/pB,EAAO+pB,EAAI1e,aAAeye,EAAIze,aAAe,EAC3C2e,EAAiBv7C,KAAKukC,KAAK/mB,IAAI89B,EAAI1e,cACnC4e,EAAYF,EAAI32B,KAAO,IAAQ22B,EAAIr9B,MAAMnW,SAASyzC,GACnDC,GACHjqB,IAEF,IAAM/T,EAAM,IAAIpM,MAAMmgB,GAAMha,KAAK,MAC7BmkC,EAAM,EACVl+B,EAAIk+B,KAAS,IAAIz0C,EAAWo0C,EAAIp9B,OAChC,IAAK,IAAI3Z,EAAI+2C,EAAIze,aAAe,EAAGt4B,GAAKg3C,EAAI1e,aAAct4B,IACxDkZ,EAAIk+B,KAAS17C,KAAKukC,KAAK/mB,IAAIlZ,GAG7B,OADIk3C,IAAWh+B,EAAIk+B,GAAOJ,EAAIr9B,OACvB,IAAIw9C,GAAKj+C,EAAK,IAAI0kB,GAAMliC,KAAKukC,KAAKb,QAC3C,GAAC,CAAAvjC,IAAA,MAAAC,MACD,SAAIy+B,EAAOjC,EAAcjY,GACvB,IAAM43B,EAAQ,IAAIgf,GAAiB18B,EAAOjC,EAAcjY,GAClDm2B,EAAK96C,KAAK47C,SAASrzC,IAAIg0C,GAC7B,OAAW,OAAPzB,EACKA,GAET96C,KAAK47C,SAAStmB,IAAIinB,EAAOA,GAClBA,EACT,GAAC,CAAAp8C,IAAA,iBAAAC,MACD,SAAe4e,GACb,IAAK,IAAIa,EAAK7f,KAAK4N,WAAYiS,EAAG/R,WAAa,CAE7C,GADW+R,EAAG7R,OACPiQ,MAAMrX,OAAOoY,GAAK,OAAO,CAClC,CACA,OAAO,CACT,IAAC,CAAA,CAAA7e,IAAA,eAAAC,MA/DD,WACEJ,KAAK47C,SAAW,IAAIjU,GACpB3nC,KAAKukC,KAAO,KACZ,IAAMA,EAAOtkC,UAAU,GACvBD,KAAKukC,KAAOA,CACd,IAAC,CATsC,GCApBm3B,GAAkB,WACrC,SAAAA,IAAc77D,OAAA67D,GACZA,EAAmB57D,aAAaC,MAAMC,KAAMC,UAC9C,CAAC,OAAAC,EAAAw7D,EAAA,CAAA,CAAAv7D,IAAA,eAAAC,MA4DD,WACE,OAAQJ,KAAK27D,YACf,GAAC,CAAAx7D,IAAA,WAAAC,MACD,WAEE,OADyBs7D,EAAmBj1D,OAAOzG,KAAK47D,QAAQlsD,EAASI,UAAUJ,EAASI,YAAc4rD,EAAmBj1D,OAAOzG,KAAK47D,QAAQlsD,EAASI,UAAUJ,EAASG,YAAc6rD,EAAmBj1D,OAAOzG,KAAK47D,QAAQlsD,EAASG,UAAUH,EAASI,YAAc4rD,EAAmBj1D,OAAOzG,KAAK47D,QAAQlsD,EAASG,UAAUH,EAASG,aACpT7P,KAAK47D,QAAQlsD,EAASE,UAAUF,EAASI,YAAckX,GAAUE,OAASlnB,KAAK47D,QAAQlsD,EAASE,UAAUF,EAASG,YAAcmX,GAAUE,KACxK,GAAC,CAAA/mB,IAAA,cAAAC,MACD,WAEE,OADyBs7D,EAAmBj1D,OAAOzG,KAAK47D,QAAQlsD,EAASI,UAAUJ,EAASI,YAAc4rD,EAAmBj1D,OAAOzG,KAAK47D,QAAQlsD,EAASI,UAAUJ,EAASG,YAAc6rD,EAAmBj1D,OAAOzG,KAAK47D,QAAQlsD,EAASG,UAAUH,EAASI,YAAc4rD,EAAmBj1D,OAAOzG,KAAK47D,QAAQlsD,EAASG,UAAUH,EAASG,aACpT7P,KAAK47D,QAAQlsD,EAASI,UAAUJ,EAASE,YAAcoX,GAAUE,OAASlnB,KAAK47D,QAAQlsD,EAASG,UAAUH,EAASE,YAAcoX,GAAUE,KACxK,GAAC,CAAA/mB,IAAA,MAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OAEZ,IADA,IAAMm6D,EAAmB57D,UAAU,GAC1BqE,EAAI,EAAGA,EAAIu3D,EAAiBn6D,OAAQ4C,IAAK,CAChD,IAAMw3D,EAAMj7D,KAAKyT,MAAMhQ,EAAI,GACrBy3D,EAAMz3D,EAAI,EAChBtE,KAAK47D,QAAQE,GAAKC,GAAO/0C,GAAUg1C,iBAAiBH,EAAiBlkD,OAAOrT,GAC9E,MACK,GAAyB,IAArBrE,UAAUyB,OAAc,CACjC,IAAMo6D,EAAM77D,UAAU,GAAIg8D,EAASh8D,UAAU,GAAIgnB,EAAiBhnB,UAAU,GAC5ED,KAAK47D,QAAQE,GAAKG,GAAUh1C,CAC9B,CACF,GAAC,CAAA9mB,IAAA,aAAAC,MACD,WACE,OAAOs7D,EAAmBj1D,OAAOzG,KAAK47D,QAAQlsD,EAASI,UAAUJ,EAASI,YAAc9P,KAAK47D,QAAQlsD,EAASE,UAAUF,EAASI,YAAckX,GAAUE,OAASlnB,KAAK47D,QAAQlsD,EAASE,UAAUF,EAASG,YAAcmX,GAAUE,KACrO,GAAC,CAAA/mB,IAAA,aAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OAEZ,IADA,IAAMw6D,EAA0Bj8D,UAAU,GACjCqE,EAAI,EAAGA,EAAI43D,EAAwBx6D,OAAQ4C,IAAK,CACvD,IAAMw3D,EAAMj7D,KAAKyT,MAAMhQ,EAAI,GACrBy3D,EAAMz3D,EAAI,EAChBtE,KAAKm8D,WAAWL,EAAKC,EAAK/0C,GAAUg1C,iBAAiBE,EAAwBvkD,OAAOrT,IACtF,MACK,GAAyB,IAArBrE,UAAUyB,OAAc,CACjC,IAAMo6D,EAAM77D,UAAU,GAAIg8D,EAASh8D,UAAU,GAAIm8D,EAAwBn8D,UAAU,GAC/ED,KAAK47D,QAAQE,GAAKG,GAAUG,IAC9Bp8D,KAAK47D,QAAQE,GAAKG,GAAUG,EAEhC,CACF,GAAC,CAAAj8D,IAAA,oBAAAC,MACD,SAAkB07D,EAAKG,EAAQG,GACzBN,GAAO,GAAKG,GAAU,GACxBj8D,KAAKm8D,WAAWL,EAAKG,EAAQG,EAEjC,GAAC,CAAAj8D,IAAA,WAAAC,MACD,WACE,OAAOs7D,EAAmBj1D,OAAOzG,KAAK47D,QAAQlsD,EAASI,UAAUJ,EAASI,YAAc9P,KAAK47D,QAAQlsD,EAASI,UAAUJ,EAASE,YAAcoX,GAAUE,OAASlnB,KAAK47D,QAAQlsD,EAASG,UAAUH,EAASE,YAAcoX,GAAUE,KACrO,GAAC,CAAA/mB,IAAA,YAAAC,MACD,SAAUi8D,EAAsBC,GAC9B,OAAID,EAAuBC,EAClBt8D,KAAKu8D,UAAUD,EAAsBD,IAE1CA,IAAyBr1C,GAAU/C,GAAKq4C,IAAyBt1C,GAAU/C,GAAKo4C,IAAyBr1C,GAAUU,GAAK40C,IAAyBt1C,GAAUU,GAAK20C,IAAyBr1C,GAAUU,GAAK40C,IAAyBt1C,GAAU/C,GAAKo4C,IAAyBr1C,GAAUQ,GAAK80C,IAAyBt1C,GAAU/C,GAAKo4C,IAAyBr1C,GAAUQ,GAAK80C,IAAyBt1C,GAAUU,KACtY1nB,KAAK47D,QAAQlsD,EAASI,UAAUJ,EAASI,YAAckX,GAAUE,QAAUw0C,EAAmBj1D,OAAOzG,KAAK47D,QAAQlsD,EAASI,UAAUJ,EAASG,YAAc6rD,EAAmBj1D,OAAOzG,KAAK47D,QAAQlsD,EAASG,UAAUH,EAASI,YAAc4rD,EAAmBj1D,OAAOzG,KAAK47D,QAAQlsD,EAASG,UAAUH,EAASG,YAG3T,GAAC,CAAA1P,IAAA,aAAAC,MACD,SAAWi8D,EAAsBC,GAC/B,OAAID,IAAyBr1C,GAAUQ,GAAK80C,IAAyBt1C,GAAUQ,GAAK60C,IAAyBr1C,GAAU/C,GAAKq4C,IAAyBt1C,GAAU/C,EACtJy3C,EAAmBj1D,OAAOzG,KAAK47D,QAAQlsD,EAASI,UAAUJ,EAASI,YAAc4rD,EAAmBj1D,OAAOzG,KAAK47D,QAAQlsD,EAASI,UAAUJ,EAASE,YAAc8rD,EAAmBj1D,OAAOzG,KAAK47D,QAAQlsD,EAASE,UAAUF,EAASI,WAE1OusD,IAAyBr1C,GAAUU,GAAK40C,IAAyBt1C,GAAUU,IACf,IAAvD1nB,KAAK47D,QAAQlsD,EAASI,UAAUJ,EAASI,WAAmB4rD,EAAmBj1D,OAAOzG,KAAK47D,QAAQlsD,EAASI,UAAUJ,EAASE,YAAc8rD,EAAmBj1D,OAAOzG,KAAK47D,QAAQlsD,EAASE,UAAUF,EAASI,WAG3N,GAAC,CAAA3P,IAAA,WAAAC,MACD,SAASi8D,EAAsBC,GAC7B,OAAID,IAAyBC,IAGtBZ,EAAmBj1D,OAAOzG,KAAK47D,QAAQlsD,EAASI,UAAUJ,EAASI,YAAc9P,KAAK47D,QAAQlsD,EAASI,UAAUJ,EAASE,YAAcoX,GAAUE,OAASlnB,KAAK47D,QAAQlsD,EAASG,UAAUH,EAASE,YAAcoX,GAAUE,OAASlnB,KAAK47D,QAAQlsD,EAASE,UAAUF,EAASI,YAAckX,GAAUE,OAASlnB,KAAK47D,QAAQlsD,EAASE,UAAUF,EAASG,YAAcmX,GAAUE,MACzX,GAAC,CAAA/mB,IAAA,WAAAC,MACD,WAEE,IADA,IAAMo8D,EAAU,IAAIlqC,GAAc,aACzBmqC,EAAK,EAAGA,EAAK,EAAGA,IACvB,IAAK,IAAIC,EAAK,EAAGA,EAAK,EAAGA,IACvBF,EAAQG,UAAU,EAAIF,EAAKC,EAAI11C,GAAU41C,kBAAkB58D,KAAK47D,QAAQa,GAAIC,KAGhF,OAAOF,EAAQ1nD,UACjB,GAAC,CAAA3U,IAAA,SAAAC,MACD,SAAO6mB,GACL,IAAK,IAAIw1C,EAAK,EAAGA,EAAK,EAAGA,IACvB,IAAK,IAAIC,EAAK,EAAGA,EAAK,EAAGA,IACvB18D,KAAK47D,QAAQa,GAAIC,GAAMz1C,CAG7B,GAAC,CAAA9mB,IAAA,MAAAC,MACD,SAAI07D,EAAKG,GACP,OAAOj8D,KAAK47D,QAAQE,GAAKG,EAC3B,GAAC,CAAA97D,IAAA,YAAAC,MACD,WACE,IAAIohC,EAAOxhC,KAAK47D,QAAQ,GAAG,GAS3B,OARA57D,KAAK47D,QAAQ,GAAG,GAAK57D,KAAK47D,QAAQ,GAAG,GACrC57D,KAAK47D,QAAQ,GAAG,GAAKp6B,EACrBA,EAAOxhC,KAAK47D,QAAQ,GAAG,GACvB57D,KAAK47D,QAAQ,GAAG,GAAK57D,KAAK47D,QAAQ,GAAG,GACrC57D,KAAK47D,QAAQ,GAAG,GAAKp6B,EACrBA,EAAOxhC,KAAK47D,QAAQ,GAAG,GACvB57D,KAAK47D,QAAQ,GAAG,GAAK57D,KAAK47D,QAAQ,GAAG,GACrC57D,KAAK47D,QAAQ,GAAG,GAAKp6B,EACdxhC,IACT,GAAC,CAAAG,IAAA,UAAAC,MACD,SAAQy8D,GACN,GAAwC,IAApCA,EAAyBn7D,OAC3B,MAAM,IAAIsB,EAAyB,uBAAyB65D,GAE9D,IAAK,IAAIJ,EAAK,EAAGA,EAAK,EAAGA,IACvB,IAAK,IAAIC,EAAK,EAAGA,EAAK,EAAGA,IACvB,IAAKhB,EAAmBjnB,QAAQz0C,KAAK47D,QAAQa,GAAIC,GAAKG,EAAyBllD,OAAO,EAAI8kD,EAAKC,IAC7F,OAAO,EAIb,OAAO,CACT,GAAC,CAAAv8D,IAAA,MAAAC,MACD,SAAIgmC,GACF,IAAK,IAAI9hC,EAAI,EAAGA,EAAI,EAAGA,IACrB,IAAK,IAAIuJ,EAAI,EAAGA,EAAI,EAAGA,IACrB7N,KAAKm8D,WAAW73D,EAAGuJ,EAAGu4B,EAAG79B,IAAIjE,EAAGuJ,GAGtC,GAAC,CAAA1N,IAAA,aAAAC,MACD,WACE,OAAOJ,KAAK47D,QAAQlsD,EAASI,UAAUJ,EAASI,YAAckX,GAAUE,OAASlnB,KAAK47D,QAAQlsD,EAASI,UAAUJ,EAASG,YAAcmX,GAAUE,OAASlnB,KAAK47D,QAAQlsD,EAASG,UAAUH,EAASI,YAAckX,GAAUE,OAASlnB,KAAK47D,QAAQlsD,EAASG,UAAUH,EAASG,YAAcmX,GAAUE,KACxS,GAAC,CAAA/mB,IAAA,YAAAC,MACD,SAAUi8D,EAAsBC,GAC9B,OAAID,IAAyBr1C,GAAUQ,GAAK80C,IAAyBt1C,GAAUU,GAAK20C,IAAyBr1C,GAAUQ,GAAK80C,IAAyBt1C,GAAU/C,GAAKo4C,IAAyBr1C,GAAUU,GAAK40C,IAAyBt1C,GAAU/C,EACtOy3C,EAAmBj1D,OAAOzG,KAAK47D,QAAQlsD,EAASI,UAAUJ,EAASI,YAAc4rD,EAAmBj1D,OAAOzG,KAAK47D,QAAQlsD,EAASI,UAAUJ,EAASE,WAEzJysD,IAAyBr1C,GAAUU,GAAK40C,IAAyBt1C,GAAUQ,GAAK60C,IAAyBr1C,GAAU/C,GAAKq4C,IAAyBt1C,GAAUQ,GAAK60C,IAAyBr1C,GAAU/C,GAAKq4C,IAAyBt1C,GAAUU,EACtOg0C,EAAmBj1D,OAAOzG,KAAK47D,QAAQlsD,EAASI,UAAUJ,EAASI,YAAc4rD,EAAmBj1D,OAAOzG,KAAK47D,QAAQlsD,EAASE,UAAUF,EAASI,WAEzJusD,IAAyBr1C,GAAUU,GAAK40C,IAAyBt1C,GAAUU,GACf,IAAvD1nB,KAAK47D,QAAQlsD,EAASI,UAAUJ,EAASI,SAGpD,GAAC,CAAA3P,IAAA,cAAAoI,IACD,WACE,MAAO,CAACC,EACV,IAAC,CAAA,CAAArI,IAAA,eAAAC,MAzMD,WAEE,GADAJ,KAAK47D,QAAU,KACU,IAArB37D,UAAUyB,OACZ1B,KAAK47D,QAAUxqD,MAAM,GAAGmG,OAAOhH,KAAI,WAAA,OAAMa,MAAM,MAC/CpR,KAAK88D,OAAO91C,GAAUE,YACjB,GAAyB,IAArBjnB,UAAUyB,OACnB,GAA4B,iBAAjBzB,UAAU,GAAiB,CACpC,IAAM88D,EAAW98D,UAAU,GAC3By7D,EAAmB57D,aAAauG,KAAKrG,MACrCA,KAAK2Q,IAAIosD,EACV,MAAM,GAAI98D,UAAU,aAAcy7D,EAAoB,CACrD,IAAMn0D,EAAQtH,UAAU,GACxBy7D,EAAmB57D,aAAauG,KAAKrG,MACrCA,KAAK47D,QAAQlsD,EAASI,UAAUJ,EAASI,UAAYvI,EAAMq0D,QAAQlsD,EAASI,UAAUJ,EAASI,UAC/F9P,KAAK47D,QAAQlsD,EAASI,UAAUJ,EAASG,UAAYtI,EAAMq0D,QAAQlsD,EAASI,UAAUJ,EAASG,UAC/F7P,KAAK47D,QAAQlsD,EAASI,UAAUJ,EAASE,UAAYrI,EAAMq0D,QAAQlsD,EAASI,UAAUJ,EAASE,UAC/F5P,KAAK47D,QAAQlsD,EAASG,UAAUH,EAASI,UAAYvI,EAAMq0D,QAAQlsD,EAASG,UAAUH,EAASI,UAC/F9P,KAAK47D,QAAQlsD,EAASG,UAAUH,EAASG,UAAYtI,EAAMq0D,QAAQlsD,EAASG,UAAUH,EAASG,UAC/F7P,KAAK47D,QAAQlsD,EAASG,UAAUH,EAASE,UAAYrI,EAAMq0D,QAAQlsD,EAASG,UAAUH,EAASE,UAC/F5P,KAAK47D,QAAQlsD,EAASE,UAAUF,EAASI,UAAYvI,EAAMq0D,QAAQlsD,EAASE,UAAUF,EAASI,UAC/F9P,KAAK47D,QAAQlsD,EAASE,UAAUF,EAASG,UAAYtI,EAAMq0D,QAAQlsD,EAASE,UAAUF,EAASG,UAC/F7P,KAAK47D,QAAQlsD,EAASE,UAAUF,EAASE,UAAYrI,EAAMq0D,QAAQlsD,EAASE,UAAUF,EAASE,SACjG,CAEJ,GAAC,CAAAzP,IAAA,UAAAC,MACD,WACE,GAAI0E,OAAOif,UAAU9jB,UAAU,KAA+B,iBAAjBA,UAAU,GAAiB,CACtE,IAAM+8D,EAAuB/8D,UAAU,GAAIg9D,EAA0Bh9D,UAAU,GAC/E,OAAIg9D,IAA4Bj2C,GAAUO,eAGtC01C,IAA4Bj2C,GAAUK,WAAa21C,GAAwB,GAAKA,IAAyBh2C,GAAUI,QAGnH61C,IAA4Bj2C,GAAUG,WAAa61C,IAAyBh2C,GAAUE,QAGtF+1C,IAA4Bj2C,GAAUS,OAASu1C,IAAyBh2C,GAAUQ,IAGlFy1C,IAA4Bj2C,GAAUW,OAASq1C,IAAyBh2C,GAAUU,GAGlFu1C,IAA4Bj2C,GAAUY,OAASo1C,IAAyBh2C,GAAU/C,KAIxF,CAAO,GAA4B,iBAAjBhkB,UAAU,IAA2C,iBAAjBA,UAAU,GAAiB,CAC/E,IAA6C48D,EAA2B58D,UAAU,GAElF,OADU,IAAIy7D,EADiBz7D,UAAU,IAEhCw0C,QAAQooB,EACnB,CACF,GAAC,CAAA18D,IAAA,SAAAC,MACD,SAAc48D,GACZ,OAAIA,GAAwB,GAAKA,IAAyBh2C,GAAUI,IAItE,IAAC,CA9DoC,GCHlB81C,GAAY,WAC/B,SAAAA,IAAcr9D,OAAAq9D,GACZA,EAAap9D,aAAaC,MAAMC,KAAMC,UACxC,CAAC,OAAAC,EAAAg9D,EAAA,CAAA,CAAA/8D,IAAA,OAAAC,MAWD,WACE,OAAOJ,KAAKowC,KACd,GAAC,CAAAjwC,IAAA,SAAAC,MACD,SAAOkR,GACL,OAAe,OAAXA,GACkB,IAAlBA,EAAO5P,OADiB,MAE5B1B,KAAKqwB,eAAerwB,KAAKowC,MAAQ9+B,EAAO5P,QACxCyhB,GAAOuN,UAAUpf,EAAQ,EAAGtR,KAAKo9C,MAAOp9C,KAAKowC,MAAO9+B,EAAO5P,aAC3D1B,KAAKowC,OAAS9+B,EAAO5P,QACvB,GAAC,CAAAvB,IAAA,iBAAAC,MACD,SAAe+8D,GACb,GAAIA,GAAYn9D,KAAKo9C,MAAM17C,OAAQ,OAAO,KAC1C,IAAMipB,EAAY9pB,KAAK+K,IAAIuxD,EAA8B,EAApBn9D,KAAKo9C,MAAM17C,QAChD1B,KAAKo9C,MAAQjzB,GAAOizC,OAAOp9D,KAAKo9C,MAAOzyB,EACzC,GAAC,CAAAxqB,IAAA,UAAAC,MACD,WACE,IAAMqO,EAAQ,IAAI2C,MAAMpR,KAAKowC,OAAO74B,KAAK,MAEzC,OADA4L,GAAOuN,UAAU1wB,KAAKo9C,MAAO,EAAG3uC,EAAO,EAAGzO,KAAKowC,OACxC3hC,CACT,GAAC,CAAAtO,IAAA,MAAAC,MACD,SAAIA,GACFJ,KAAKqwB,eAAerwB,KAAKowC,MAAQ,GACjCpwC,KAAKo9C,MAAMp9C,KAAKowC,OAAShwC,IACtBJ,KAAKowC,KACV,IAAC,CAAA,CAAAjwC,IAAA,eAAAC,MAlCD,WAGE,GAFAJ,KAAKo9C,MAAQ,KACbp9C,KAAKowC,MAAQ,EACY,IAArBnwC,UAAUyB,OACZw7D,EAAap9D,aAAauG,KAAKrG,KAAM,SAChC,GAAyB,IAArBC,UAAUyB,OAAc,CACjC,IAAM27D,EAAkBp9D,UAAU,GAClCD,KAAKo9C,MAAQ,IAAIhsC,MAAMisD,GAAiB9lD,KAAK,KAC/C,CACF,IAAC,CAb8B,GCCZ+lD,GAAoB,WAAA,SAAAA,IAAAz9D,OAAAy9D,EAAA,CAAA,OAAAp9D,EAAAo9D,EAAA,CAAA,CAAAn9D,IAAA,uBAAAC,MAQvC,SAAqBod,GACnB,IAAIyS,EAAQ,EACNstC,EAAiB,IAAIL,GAAar8D,KAAKyT,MAAMkJ,EAAI9b,OAAS,IAChE67D,EAAetsD,IAAIgf,GACnB,EAAG,CACD,IAAMnK,EAAO9lB,KAAK0iD,aAAallC,EAAKyS,GACpCstC,EAAetsD,IAAI6U,GACnBmK,EAAQnK,CACV,OAASmK,EAAQzS,EAAI9b,OAAS,GAC9B,OAAO67D,EAAeztC,SACxB,GAAC,CAAA3vB,IAAA,eAAAC,MACD,SAAaod,EAAKyS,GAGhB,IAFA,IAAMoyB,EAAYrZ,GAASyB,SAASjtB,EAAIyS,GAAQzS,EAAIyS,EAAQ,IACxDnK,EAAOmK,EAAQ,EACZnK,EAAOtI,EAAI9b,QAAQ,CAExB,GADasnC,GAASyB,SAASjtB,EAAIsI,EAAO,GAAItI,EAAIsI,MACrCu8B,EAAW,MACxBv8B,GACF,CACA,OAAOA,EAAO,CAChB,GAAC,CAAA3lB,IAAA,0BAAAC,MACD,SAAwBod,GACtB,IAAIyS,EAAQ,EACNstC,EAAiB,IAAIn+C,GAC3Bm+C,EAAetsD,IAAIgf,GACnB,EAAG,CACD,IAAMnK,EAAO9lB,KAAK0iD,aAAallC,EAAKyS,GACpCstC,EAAetsD,IAAI6U,GACnBmK,EAAQnK,CACV,OAASmK,EAAQzS,EAAI9b,OAAS,GAE9B,OADmB47D,EAAqBE,WAAWD,EAErD,IAAC,CAAA,CAAAp9D,IAAA,aAAAC,MAvCD,SAAkBq9D,GAEhB,IADA,IAAMhvD,EAAQ,IAAI2C,MAAMqsD,EAAKtsD,QAAQoG,KAAK,MACjCjT,EAAI,EAAGA,EAAImK,EAAM/M,OAAQ4C,IAChCmK,EAAMnK,GAAKm5D,EAAKl1D,IAAIjE,GAAG82C,WAEzB,OAAO3sC,CACT,IAAC,CAPsC,GCDpBivD,GAAiB,WAGnC,OAAAx9D,GAFD,SAAAw9D,IAAc79D,OAAA69D,GACZA,EAAkB59D,aAAaC,MAAMC,KAAMC,UAC7C,GAAC,CAAA,CAAAE,IAAA,iBAAAC,MAWD,WACE,OAAOJ,KAAKwd,GACd,GAAC,CAAArd,IAAA,UAAAC,MACD,SAAQu9D,GACN,IAAM35D,EAAKhE,KAAKwd,IAAIxd,KAAKykC,WAAWk5B,IAAaj4D,EAC3CzB,EAAKjE,KAAKwd,IAAIxd,KAAKykC,WAAWk5B,EAAa,IAAIj4D,EACrD,OAAO1B,EAAKC,EAAKD,EAAKC,CACxB,GAAC,CAAA9D,IAAA,UAAAC,MACD,SAAQu9D,GACN,IAAM35D,EAAKhE,KAAKwd,IAAIxd,KAAKykC,WAAWk5B,IAAaj4D,EAC3CzB,EAAKjE,KAAKwd,IAAIxd,KAAKykC,WAAWk5B,EAAa,IAAIj4D,EACrD,OAAO1B,EAAKC,EAAKD,EAAKC,CACxB,GAAC,CAAA9D,IAAA,4BAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OAAc,CAC1B,IAAMk8D,EAAc39D,UAAU,GAAI49D,EAAM59D,UAAU,GAAI69D,EAAc79D,UAAU,GAAIikD,EAAKjkD,UAAU,GACjGD,KAAK+9D,0BAA0B/9D,KAAKykC,WAAWm5B,GAAc59D,KAAKykC,WAAWm5B,EAAc,GAAIC,EAAKA,EAAIp5B,WAAWq5B,GAAcD,EAAIp5B,WAAWq5B,EAAc,GAAI5Z,EACpK,MAAO,GAAyB,IAArBjkD,UAAUyB,OAAc,CACjC,IAAMu/C,EAAShhD,UAAU,GAAIihD,EAAOjhD,UAAU,GAAI49D,EAAM59D,UAAU,GAAIwgD,EAASxgD,UAAU,GAAI0hD,EAAO1hD,UAAU,GAAI66C,EAAK76C,UAAU,GACjI,GAAIihD,EAAOD,GAAW,GAAKU,EAAOlB,GAAW,EAE3C,OADA3F,EAAGqgB,iBAAiBn7D,KAAKgI,EAAGi5C,EAAQ4c,EAAI71D,EAAGy4C,GACpC,KAET,IAAKzgD,KAAK4hD,SAASX,EAAQC,EAAM2c,EAAKpd,EAAQkB,GAAO,OAAO,KAC5D,IAAME,EAAOhhD,KAAKyT,OAAO2sC,EAASC,GAAQ,GACpCY,EAAOjhD,KAAKyT,OAAOmsC,EAASkB,GAAQ,GACtCV,EAASY,IACPpB,EAASqB,GAAM9hD,KAAK+9D,0BAA0B9c,EAAQY,EAAMgc,EAAKpd,EAAQqB,EAAMhH,GAC/EgH,EAAOH,GAAM3hD,KAAK+9D,0BAA0B9c,EAAQY,EAAMgc,EAAK/b,EAAMH,EAAM7G,IAE7E+G,EAAOX,IACLT,EAASqB,GAAM9hD,KAAK+9D,0BAA0Blc,EAAMX,EAAM2c,EAAKpd,EAAQqB,EAAMhH,GAC7EgH,EAAOH,GAAM3hD,KAAK+9D,0BAA0Blc,EAAMX,EAAM2c,EAAK/b,EAAMH,EAAM7G,GAEjF,CACF,GAAC,CAAA36C,IAAA,WAAAC,MACD,SAAS6gD,EAAQC,EAAM2c,EAAKpd,EAAQkB,GAClC,OAAOv4C,EAASc,WAAWlK,KAAKwd,IAAIyjC,GAASjhD,KAAKwd,IAAI0jC,GAAO2c,EAAIrgD,IAAIijC,GAASod,EAAIrgD,IAAImkC,GACxF,GAAC,CAAAxhD,IAAA,kBAAAC,MACD,WACE,OAAOJ,KAAKykC,UACd,GAAC,CAAAtkC,IAAA,oBAAAC,MACD,SAAkBy9D,EAAK3Z,GACrB,IAAK,IAAI5/C,EAAI,EAAGA,EAAItE,KAAKykC,WAAW/iC,OAAS,EAAG4C,IAC9C,IAAK,IAAIuJ,EAAI,EAAGA,EAAIgwD,EAAIp5B,WAAW/iC,OAAS,EAAGmM,IAC7C7N,KAAK+9D,0BAA0Bz5D,EAAGu5D,EAAKhwD,EAAGq2C,EAGhD,IAAC,CAAA,CAAA/jD,IAAA,eAAAC,MA1DD,WACEJ,KAAKgI,EAAI,KACThI,KAAKwd,IAAM,KACXxd,KAAKykC,WAAa,KAClB,IAAMz8B,EAAI/H,UAAU,GACpBD,KAAKgI,EAAIA,EACThI,KAAKwd,IAAMxV,EAAE2V,iBACb,IAAMqgD,EAAM,IAAIV,GAChBt9D,KAAKykC,WAAau5B,EAAIC,qBAAqBj+D,KAAKwd,IAClD,IAAC,CAbmC,GCAjB0gD,GAAK,WACxB,SAAAA,IAAcr+D,OAAAq+D,GACZA,EAAMp+D,aAAaC,MAAMC,KAAMC,UACjC,CAAC,OAAAC,EAAAg+D,EAAA,CAAA,CAAA/9D,IAAA,WAAAC,MAcD,SAASiiC,EAAWR,GAClB,OAAO7hC,KAAK6qC,OAAOxI,GAAWR,EAChC,GAAC,CAAA1hC,IAAA,WAAAC,MACD,SAASiiC,EAAWR,EAAUs8B,GAC5Bn+D,KAAK6qC,OAAOxI,GAAWR,GAAYs8B,CACrC,GAAC,CAAAh+D,IAAA,SAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OAAc,CAC1B,IAAK,IAAI4C,EAAI,EAAGA,EAAI,EAAGA,IACrB,IAAK,IAAIuJ,EAAI,EAAGA,EAAI,EAAGA,IACrB,GAAI7N,KAAK6qC,OAAOvmC,GAAGuJ,KAAOqwD,EAAME,WAAY,OAAO,EAGvD,OAAO,CACT,CAAO,GAAyB,IAArBn+D,UAAUyB,OAAc,CACjC,IAAM2gC,EAAYpiC,UAAU,GAC5B,OAAOD,KAAK6qC,OAAOxI,GAAW,KAAO67B,EAAME,UAC7C,CAAO,GAAyB,IAArBn+D,UAAUyB,OAAc,CACjC,IAAM2gC,EAAYpiC,UAAU,GAAI4hC,EAAW5hC,UAAU,GACrD,OAAOD,KAAK6qC,OAAOxI,GAAWR,KAAcq8B,EAAME,UACpD,CACF,GAAC,CAAAj+D,IAAA,YAAAC,MACD,WACE,IAAK,IAAIkE,EAAI,EAAGA,EAAI,EAAGA,IACrB,IAAKtE,KAAKwJ,OAAOlF,GAAI,CACnB,IAAI+5D,EAAWr+D,KAAK6qC,OAAOvmC,GAAG,GAC1BtE,KAAK6qC,OAAOvmC,GAAG,GAAK+5D,IAAUA,EAAWr+D,KAAK6qC,OAAOvmC,GAAG,IACxD+5D,EAAW,IAAGA,EAAW,GAC7B,IAAK,IAAIxwD,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1B,IAAIywD,EAAW,EACXt+D,KAAK6qC,OAAOvmC,GAAGuJ,GAAKwwD,IAAUC,EAAW,GAC7Ct+D,KAAK6qC,OAAOvmC,GAAGuJ,GAAKywD,CACtB,CACF,CAEJ,GAAC,CAAAn+D,IAAA,WAAAC,MACD,SAASiiC,GACP,OAAOriC,KAAK6qC,OAAOxI,GAAWzwB,EAASG,OAAS/R,KAAK6qC,OAAOxI,GAAWzwB,EAASE,KAClF,GAAC,CAAA3R,IAAA,cAAAC,MACD,SAAYiiC,EAAWR,GACrB,OAAI7hC,KAAK6qC,OAAOxI,GAAWR,IAAa,EAAUnyB,EAASE,SACpDF,EAASI,QAClB,GAAC,CAAA3P,IAAA,WAAAC,MACD,WACE,MAAO,MAAQJ,KAAK6qC,OAAO,GAAG,GAAK,IAAM7qC,KAAK6qC,OAAO,GAAG,GAAK,OAAS7qC,KAAK6qC,OAAO,GAAG,GAAK,IAAM7qC,KAAK6qC,OAAO,GAAG,EACjH,GAAC,CAAA1qC,IAAA,MAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OAEZ,IADA,IAAM8gC,EAAMviC,UAAU,GACbqE,EAAI,EAAGA,EAAI,EAAGA,IACrB,IAAK,IAAIuJ,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1B,IAAMo0B,EAAMO,EAAI9B,YAAYp8B,EAAGuJ,GAC3Bo0B,IAAQvyB,EAASE,UAAYqyB,IAAQvyB,EAASI,WAC5C9P,KAAKwJ,OAAOlF,EAAGuJ,GACjB7N,KAAK6qC,OAAOvmC,GAAGuJ,GAAKqwD,EAAMK,gBAAgBt8B,GACvCjiC,KAAK6qC,OAAOvmC,GAAGuJ,IAAMqwD,EAAMK,gBAAgBt8B,GAEpD,MAEG,GAAyB,IAArBhiC,UAAUyB,OAAc,CACjC,IAAM2gC,EAAYpiC,UAAU,GAAI4hC,EAAW5hC,UAAU,GAAeA,UAAU,KAC7DyP,EAASI,UAAU9P,KAAK6qC,OAAOxI,GAAWR,IAC7D,CACF,IAAC,CAAA,CAAA1hC,IAAA,eAAAC,MA5ED,WACEJ,KAAK6qC,OAASz5B,MAAM,GAAGmG,OAAOhH,KAAI,WAAA,OAAMa,MAAM,MAC9C,IAAK,IAAI9M,EAAI,EAAGA,EAAI,EAAGA,IACrB,IAAK,IAAIuJ,EAAI,EAAGA,EAAI,EAAGA,IACrB7N,KAAK6qC,OAAOvmC,GAAGuJ,GAAKqwD,EAAME,UAGhC,GAAC,CAAAj+D,IAAA,kBAAAC,MACD,SAAuBihC,GACrB,OAAIA,IAAa3xB,EAASE,SAAiB,EACvCyxB,IAAa3xB,EAASI,SAAiB,EACpCouD,EAAME,UACf,IAAC,CAhBuB,GAkF1BF,GAAME,YAAc,EC3EyB,IACxB3C,YAAIl1B,GACvB,SAAAk1B,IAAc,IAAAj5D,EAE4B,OAF5B3C,OAAA47D,GACZj5D,EAAAC,EAAAzC,KAAAy7D,GACAA,EAAK37D,aAAaC,MAAKyC,EAAOvC,WAAUuC,CAC1C,CAAC,OAAAK,EAAA44D,EAAAl1B,GAAArmC,EAAAu7D,EAAA,CAAA,CAAAt7D,IAAA,WAAAC,MA+BD,WACE,OAAOJ,KAAK6qC,MACd,GAAC,CAAA1qC,IAAA,mBAAAC,MACD,WACE,IAAMo+D,EAAS,IAAIptD,MAAM,GAAGmG,KAAK,MAIjC,OAHAinD,EAAO,GAAKx+D,KAAKwd,IAAI,GACrBghD,EAAO,GAAKx+D,KAAKwd,IAAI,GACR,IAAIi+C,EAAK+C,EAAQt8B,GAAMu8B,YAAYz+D,KAAK0jC,QAEvD,GAAC,CAAAvjC,IAAA,aAAAC,MACD,WACE,OAAOJ,KAAK0+D,WACd,GAAC,CAAAv+D,IAAA,iBAAAC,MACD,WACE,OAAOJ,KAAKwd,GACd,GAAC,CAAArd,IAAA,cAAAC,MACD,SAAYu+D,GACV3+D,KAAK0+D,YAAcC,CACrB,GAAC,CAAAx+D,IAAA,UAAAC,MACD,SAAQsC,GACN1C,KAAKq1B,MAAQ3yB,CACf,GAAC,CAAAvC,IAAA,SAAAC,MACD,SAAO2H,GACL,KAAMA,aAAa0zD,GAAO,OAAO,EACjC,IAAMzzD,EAAID,EACV,GAAI/H,KAAKwd,IAAI9b,SAAWsG,EAAEwV,IAAI9b,OAAQ,OAAO,EAI7C,IAHA,IAAIk9D,GAAiB,EACjBC,GAAiB,EACjBC,EAAO9+D,KAAKwd,IAAI9b,OACX4C,EAAI,EAAGA,EAAItE,KAAKwd,IAAI9b,OAAQ4C,IAOnC,GANKtE,KAAKwd,IAAIlZ,GAAGwD,SAASE,EAAEwV,IAAIlZ,MAC9Bs6D,GAAiB,GAEd5+D,KAAKwd,IAAIlZ,GAAGwD,SAASE,EAAEwV,MAAOshD,MACjCD,GAAiB,IAEdD,IAAmBC,EAAgB,OAAO,EAEjD,OAAO,CACT,GAAC,CAAA1+D,IAAA,gBAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OACZ,OAAI1B,KAAKwd,IAAI9b,OAAS,EAAU1B,KAAKwd,IAAI,GAClC,KACF,GAAyB,IAArBvd,UAAUyB,OAAc,CACjC,IAAM4C,EAAIrE,UAAU,GACpB,OAAOD,KAAKwd,IAAIlZ,EAClB,CACF,GAAC,CAAAnE,IAAA,QAAAC,MACD,SAAMk/B,GACJA,EAAIuJ,MAAM,QAAU7oC,KAAKq1B,MAAQ,MACjCiK,EAAIuJ,MAAM,gBACV,IAAK,IAAIvkC,EAAI,EAAGA,EAAItE,KAAKwd,IAAI9b,OAAQ4C,IAC/BA,EAAI,GAAGg7B,EAAIuJ,MAAM,KACrBvJ,EAAIuJ,MAAM7oC,KAAKwd,IAAIlZ,GAAGoB,EAAI,IAAM1F,KAAKwd,IAAIlZ,GAAGqB,GAE9C25B,EAAIuJ,MAAM,MAAQ7oC,KAAK0jC,OAAS,IAAM1jC,KAAK++D,YAC7C,GAAC,CAAA5+D,IAAA,YAAAC,MACD,SAAUgmC,GACRq1B,EAAKuD,SAASh/D,KAAK0jC,OAAQ0C,EAC7B,GAAC,CAAAjmC,IAAA,cAAAC,MACD,WACE,QAAKJ,KAAK0jC,OAAOf,WACO,IAApB3iC,KAAKwd,IAAI9b,UACT1B,KAAKwd,IAAI,GAAG5W,OAAO5G,KAAKwd,IAAI,IAElC,GAAC,CAAArd,IAAA,WAAAC,MACD,WACE,OAAOJ,KAAKwd,IAAI,GAAG5W,OAAO5G,KAAKwd,IAAIxd,KAAKwd,IAAI9b,OAAS,GACvD,GAAC,CAAAvB,IAAA,yBAAAC,MACD,WACE,OAAOJ,KAAKwd,IAAI9b,OAAS,CAC3B,GAAC,CAAAvB,IAAA,gBAAAC,MACD,WACE,OAAOJ,KAAK++D,WACd,GAAC,CAAA5+D,IAAA,eAAAC,MACD,WACE,OAAOJ,KAAKwd,IAAI9b,MAClB,GAAC,CAAAvB,IAAA,eAAAC,MACD,SAAak/B,GACXA,EAAIuJ,MAAM,QAAU7oC,KAAKq1B,MAAQ,MACjC,IAAK,IAAI/wB,EAAItE,KAAKwd,IAAI9b,OAAS,EAAG4C,GAAK,EAAGA,IACxCg7B,EAAIuJ,MAAM7oC,KAAKwd,IAAIlZ,GAAK,KAE1Bg7B,EAAIC,QAAQ,GACd,GAAC,CAAAp/B,IAAA,uBAAAC,MACD,WAEE,OADkB,OAAdJ,KAAKi/D,OAAej/D,KAAKi/D,KAAO,IAAIvB,GAAkB19D,OACnDA,KAAKi/D,IACd,GAAC,CAAA9+D,IAAA,cAAAC,MACD,WACE,GAAkB,OAAdJ,KAAK0hB,KAAe,CACtB1hB,KAAK0hB,KAAO,IAAItY,EAChB,IAAK,IAAI9E,EAAI,EAAGA,EAAItE,KAAKwd,IAAI9b,OAAQ4C,IACnCtE,KAAK0hB,KAAKjX,gBAAgBzK,KAAKwd,IAAIlZ,GAEvC,CACA,OAAOtE,KAAK0hB,IACd,GAAC,CAAAvhB,IAAA,kBAAAC,MACD,SAAgBw9C,EAAIhhB,EAAcyF,EAAWxF,GAC3C,IAAMgC,EAAQ,IAAI53B,EAAW22C,EAAGN,gBAAgBzgB,IAC5C4gB,EAAyB7gB,EACzBjY,EAAOi5B,EAAGngB,gBAAgB4E,EAAWxF,GACnC6gB,EAAeD,EAAyB,EAC9C,GAAIC,EAAe19C,KAAKwd,IAAI9b,OAAQ,CAClC,IAAMi8C,EAAS39C,KAAKwd,IAAIkgC,GACpB7e,EAAM/2B,SAAS61C,KACjBF,EAAyBC,EACzB/4B,EAAO,EAEX,CACW3kB,KAAKssC,OAAOr7B,IAAI4tB,EAAO4e,EAAwB94B,EAC5D,GAAC,CAAAxkB,IAAA,WAAAC,MACD,WACE,IAAMo8D,EAAU,IAAIlqC,GACpBkqC,EAAQpoD,OAAO,QAAUpU,KAAKq1B,MAAQ,MACtCmnC,EAAQpoD,OAAO,gBACf,IAAK,IAAI9P,EAAI,EAAGA,EAAItE,KAAKwd,IAAI9b,OAAQ4C,IAC/BA,EAAI,GAAGk4D,EAAQpoD,OAAO,KAC1BooD,EAAQpoD,OAAOpU,KAAKwd,IAAIlZ,GAAGoB,EAAI,IAAM1F,KAAKwd,IAAIlZ,GAAGqB,GAGnD,OADA62D,EAAQpoD,OAAO,MAAQpU,KAAK0jC,OAAS,IAAM1jC,KAAK++D,aACzCvC,EAAQ1nD,UACjB,GAAC,CAAA3U,IAAA,mBAAAC,MACD,SAAiB4H,GACf,GAAIhI,KAAKwd,IAAI9b,SAAWsG,EAAEwV,IAAI9b,OAAQ,OAAO,EAC7C,IAAK,IAAI4C,EAAI,EAAGA,EAAItE,KAAKwd,IAAI9b,OAAQ4C,IACnC,IAAKtE,KAAKwd,IAAIlZ,GAAGwD,SAASE,EAAEwV,IAAIlZ,IAC9B,OAAO,EAGX,OAAO,CACT,GAAC,CAAAnE,IAAA,gBAAAC,MACD,SAAcqrC,GACZzrC,KAAK++D,YAActzB,CACrB,GAAC,CAAAtrC,IAAA,0BAAAC,MACD,WACE,OAAOJ,KAAKssC,MACd,GAAC,CAAAnsC,IAAA,mBAAAC,MACD,SAAiBw9C,EAAIhhB,EAAcyF,GACjC,IAAK,IAAI/9B,EAAI,EAAGA,EAAIs5C,EAAGC,qBAAsBv5C,IAC3CtE,KAAKu9C,gBAAgBK,EAAIhhB,EAAcyF,EAAW/9B,EAEtD,IAAC,CAAA,CAAAnE,IAAA,eAAAC,MA7KD,WASE,GARAJ,KAAKwd,IAAM,KACXxd,KAAK0hB,KAAO,KACZ1hB,KAAKssC,OAAS,IAAIkvB,GAAqBx7D,MACvCA,KAAKq1B,MAAQ,KACbr1B,KAAKi/D,KAAO,KACZj/D,KAAK0+D,aAAc,EACnB1+D,KAAK6qC,OAAS,IAAIqzB,GAClBl+D,KAAK++D,YAAc,EACM,IAArB9+D,UAAUyB,OAAc,CAC1B,IAAM8b,EAAMvd,UAAU,GACtBw7D,EAAK37D,aAAauG,KAAKrG,KAAMwd,EAAK,KACpC,MAAO,GAAyB,IAArBvd,UAAUyB,OAAc,CACjC,IAAM8b,EAAMvd,UAAU,GAAIkjC,EAAQljC,UAAU,GAC5CD,KAAKwd,IAAMA,EACXxd,KAAK0jC,OAASP,CAChB,CACF,GAAC,CAAAhjC,IAAA,WAAAC,MACD,WACE,KAAyB,IAArBH,UAAUyB,QAAiBzB,UAAU,aAAcy7D,IAAsBz7D,UAAU,aAAciiC,IAQnG,OAAOxZ,EAAA+yC,EAAA,WAAAz7D,MAAeD,MAAMC,KAAMC,WAPlC,IAAMkjC,EAAQljC,UAAU,GAAImmC,EAAKnmC,UAAU,GAC3CmmC,EAAG84B,kBAAkB/7B,EAAMzC,YAAY,EAAG9uB,EAASI,IAAKmxB,EAAMzC,YAAY,EAAG9uB,EAASI,IAAK,GACvFmxB,EAAMR,WACRyD,EAAG84B,kBAAkB/7B,EAAMzC,YAAY,EAAG9uB,EAASE,MAAOqxB,EAAMzC,YAAY,EAAG9uB,EAASE,MAAO,GAC/Fs0B,EAAG84B,kBAAkB/7B,EAAMzC,YAAY,EAAG9uB,EAASG,OAAQoxB,EAAMzC,YAAY,EAAG9uB,EAASG,OAAQ,GAKvG,IAAC,EAlC+B8zB,ICQbs5B,GAAa,WAChC,SAAAA,IAAct/D,OAAAs/D,GACZA,EAAcr/D,aAAaC,MAAMC,KAAMC,UACzC,CAAC,OAAAC,EAAAi/D,EAAA,CAAA,CAAAh/D,IAAA,2BAAAC,MA2BD,SAAyB60B,GACvBj1B,KAAKo/D,uBAAyBnqC,CAChC,GAAC,CAAA90B,IAAA,mBAAAC,MACD,SAAiB4H,GACf,IAAMq3D,EAAer/D,KAAK41D,UAAU0J,cAAct3D,GAClD,GAAqB,OAAjBq3D,EAAuB,CACzB,IAAME,EAAgBF,EAAa7+C,WAC/Bg/C,EAAex3D,EAAEwY,WAChB6+C,EAAaI,iBAAiBz3D,KACjCw3D,EAAe,IAAIt9B,GAAMl6B,EAAEwY,aACdkiB,OAEf68B,EAAc98B,MAAM+8B,GACpB,IAAME,EAAaP,EAAc1zB,WAAW+zB,GAEtCG,EADgBN,EAAan0B,gBACFw0B,EACjCL,EAAaO,cAAcD,EAC7B,MACE3/D,KAAK41D,UAAU3kD,IAAIjJ,GACnBA,EAAE43D,cAAcT,EAAc1zB,WAAWzjC,EAAEwY,YAE/C,GAAC,CAAArgB,IAAA,iBAAAC,MACD,SAAey/D,EAAcC,GAE3B,IADA,IAAMC,EAAkB,IAAI3gD,GACnB9a,EAAIu7D,EAAajyD,WAAYtJ,EAAEwJ,WAAa,CACnD,IAAMkyD,EAAW17D,EAAE0J,OACb3D,EAAI21D,EAASC,yBAEb5/C,EADU,IAAIkuC,GAAqBwR,GACZl/C,SAASxW,GACtC21D,EAASE,aAAa7/C,GACtB2/C,EAASG,kBACTJ,EAAgB9uD,IAAI+uD,GACpBF,EAAY7uD,IAAI+uD,EAASnR,mBAAoBmR,EAASpxB,WACxD,CACF,GAAC,CAAAzuC,IAAA,kBAAAC,MACD,SAAgBqhB,GAEd,IADA,IAAMo+C,EAAe,IAAIzgD,GAChB9a,EAAImd,EAAMmtB,WAAWhhC,WAAYtJ,EAAEwJ,WAAa,CACvD,IAAM4S,EAAOpc,EAAE0J,OACf,IAAK0S,EAAKR,YAAa,CACrB,IAAM8/C,EAAW,IAAIpgD,GACrBogD,EAASl7C,OAAOpE,GAChBm/C,EAAa5uD,IAAI+uD,EACnB,CACF,CAEA,OADAhvB,GAAYvxB,KAAKogD,EAAc7uB,GAAYC,gBACpC4uB,CACT,GAAC,CAAA1/D,IAAA,4BAAAC,MACD,WAEE,OADkBJ,KAAKogE,UAAUh0C,eAEnC,GAAC,CAAAjsB,IAAA,WAAAC,MACD,SAASw2B,GACP,GAA2B,OAAvB52B,KAAKqgE,cAAwB,OAAOrgE,KAAKqgE,cAC7C,IAAMC,EAAQ,IAAItd,GACZpF,EAAK,IAAIjf,GAGf,OAFAif,EAAGuO,kBAAkBv1B,GACrB0pC,EAAMvd,sBAAsB,IAAIqX,GAAkBxc,IAC3C0iB,CACT,GAAC,CAAAngE,IAAA,SAAAC,MACD,SAAOkM,EAAGzB,GACR,IAAI+rB,EAAiB52B,KAAKo/D,uBACH,OAAnBxoC,IAAyBA,EAAiBtqB,EAAEkB,qBAChDxN,KAAKogE,UAAY9zD,EAAEO,aACnB,IAAM6nD,EAAe,IAAIjI,GAAmB71B,EAAgB52B,KAAKipD,YAE3DsX,EADkB,IAAIzN,GAAsBxmD,EAAGzB,EAAU6pD,GACtB8L,YACzC,GAAID,EAAiBpvD,QAAU,EAC7B,OAAOnR,KAAKygE,4BAEdzgE,KAAK0gE,kBAAkBH,EAAkB3pC,GACzC52B,KAAK2gE,OAAS,IAAIt0B,GAAY,IAAI0sB,IAClC/4D,KAAK2gE,OAAOC,SAAS5gE,KAAK41D,UAAUt3C,YACpC,IAAMuhD,EAAe7/D,KAAK6gE,gBAAgB7gE,KAAK2gE,QACzCb,EAAc,IAAIvyB,GAAevtC,KAAKogE,WAC5CpgE,KAAK8gE,eAAejB,EAAcC,GAClC,IAAMlyB,EAAiBkyB,EAAYiB,cACnC,OAAInzB,EAAez8B,QAAU,EACpBnR,KAAKygE,4BAEKzgE,KAAKogE,UAAUryC,cAAc6f,EAElD,GAAC,CAAAztC,IAAA,oBAAAC,MACD,SAAkBmgE,EAAkB3pC,GAClC,IAAM0pC,EAAQtgE,KAAKghE,SAASpqC,GAC5B0pC,EAAMW,aAAaV,GAEnB,IADA,IACSj8D,EADeg8D,EAAMtiB,qBACDpwC,WAAYtJ,EAAEwJ,WAAa,CACtD,IAAMu1C,EAAS/+C,EAAE0J,OACXwP,EAAM6lC,EAAO1lC,iBACnB,GAAmB,IAAfH,EAAI9b,SAAgB8b,EAAI,GAAG1V,SAAS0V,EAAI,IAA5C,CACA,IAAM0jD,EAAW7d,EAAO/G,UAClB/X,EAAO,IAAIk3B,GAAKpY,EAAO1lC,iBAAkB,IAAIukB,GAAMg/B,IACzDlhE,KAAKmhE,iBAAiB58B,EAH2B,CAInD,CACF,GAAC,CAAApkC,IAAA,WAAAC,MACD,SAASkgE,GACPtgE,KAAKqgE,cAAgBC,CACvB,IAAC,CAAA,CAAAngE,IAAA,eAAAC,MA5HD,WACEJ,KAAKipD,WAAa,KAClBjpD,KAAKo/D,uBAAyB,KAC9Bp/D,KAAKqgE,cAAgB,KACrBrgE,KAAKogE,UAAY,KACjBpgE,KAAK2gE,OAAS,KACd3gE,KAAK41D,UAAY,IAAIgE,GACrB,IAAMtN,EAAYrsD,UAAU,GAC5BD,KAAKipD,WAAaqD,CACpB,GAAC,CAAAnsD,IAAA,aAAAC,MACD,SAAkB+iC,GAChB,IAAMi+B,EAAOj+B,EAAMzC,YAAY,EAAG9uB,EAASE,MACrCuvD,EAAOl+B,EAAMzC,YAAY,EAAG9uB,EAASG,OAC3C,OAAIqvD,IAAS1xD,EAASI,UAAYuxD,IAAS3xD,EAASE,SAAiB,EAAYwxD,IAAS1xD,EAASE,UAAYyxD,IAAS3xD,EAASI,UAAkB,EAC5I,CACT,GAAC,CAAA3P,IAAA,oBAAAC,MACD,SAAyByf,GAGvB,IAFA,IAAM2G,EAAO,IAAIkP,GACX4rC,EAAQ,IAAIliD,GACXS,EAAG/R,WAAW,CACnB,IAAMyzD,EAAK1hD,EAAG7R,OACRyW,EAAO+B,EAAKsC,iBAAiBy4C,EAAG5jD,kBACtC2jD,EAAMrwD,IAAIwT,EACZ,CACA,OAAO+B,EAAKuH,cAAcuzC,EAC5B,IAAC,CA7B+B,GCVbE,GAAW,WAC9B,SAAAA,IAAc3hE,OAAA2hE,GACZA,EAAY1hE,aAAaC,MAAMC,KAAMC,UACvC,CAAC,OAAAC,EAAAshE,EAAA,CAAA,CAAArhE,IAAA,UAAAC,MAiBD,WACE,GAAIwS,GAAa3S,UAAU,GAAI+P,GAE7B,IADA,IACS1L,EADUrE,UAAU,GACL2N,WAAYtJ,EAAEwJ,WAAa,CACjD,IAAMyzD,EAAKj9D,EAAE0J,OACbhO,KAAKyhE,QAAQF,EAAG5jD,iBAClB,MACK,GAAI1d,UAAU,aAAcmR,MAAO,CAExC,IADA,IAAMoM,EAAMvd,UAAU,GACbqE,EAAI,EAAGA,EAAIkZ,EAAI9b,OAAQ4C,IAC9BkZ,EAAIlZ,GAAGoB,EAAI8X,EAAIlZ,GAAGoB,EAAI1F,KAAK0hE,aAAe1hE,KAAK2hE,SAC/CnkD,EAAIlZ,GAAGqB,EAAI6X,EAAIlZ,GAAGqB,EAAI3F,KAAK0hE,aAAe1hE,KAAK4hE,SAE9B,IAAfpkD,EAAI9b,QAAgB8b,EAAI,GAAG1V,SAAS0V,EAAI,KAC1C2F,GAAOmc,IAAIC,QAAQ/hB,EAEvB,CACF,GAAC,CAAArd,IAAA,QAAAC,MACD,WACE,GAAIwS,GAAa3S,UAAU,GAAI+P,GAAa,CAG1C,IAFA,IAAM8tC,EAAa79C,UAAU,GACvB4hE,EAAsB,IAAIziD,GAAU0+B,EAAW3sC,QAC5C7M,EAAIw5C,EAAWlwC,WAAYtJ,EAAEwJ,WAAa,CACjD,IAAMyzD,EAAKj9D,EAAE0J,OACb6zD,EAAoB5wD,IAAI,IAAIorC,GAAmBr8C,KAAKyT,MAAM8tD,EAAG5jD,kBAAmB4jD,EAAGjlB,WACrF,CACA,OAAOulB,CACR,CAAM,GAAI5hE,UAAU,aAAcmR,MAAO,CAGxC,IAFA,IAAMoM,EAAMvd,UAAU,GAChB6hE,EAAW,IAAI1wD,MAAMoM,EAAI9b,QAAQ6V,KAAK,MACnCjT,EAAI,EAAGA,EAAIkZ,EAAI9b,OAAQ4C,IAC9Bw9D,EAASx9D,GAAK,IAAI2C,EAAWpG,KAAK8zB,OAAOnX,EAAIlZ,GAAGoB,EAAI1F,KAAK2hE,UAAY3hE,KAAK0hE,cAAe7gE,KAAK8zB,OAAOnX,EAAIlZ,GAAGqB,EAAI3F,KAAK4hE,UAAY5hE,KAAK0hE,cAAelkD,EAAIlZ,GAAGuD,QAG9J,OADsByoB,GAAiBkjC,qBAAqBsO,EAE9D,CACF,GAAC,CAAA3hE,IAAA,qBAAAC,MACD,WACE,OAA6B,IAAtBJ,KAAK0hE,YACd,GAAC,CAAAvhE,IAAA,qBAAAC,MACD,WACE,IAAM2hE,EAAU/hE,KAAKgiE,OAAOhkB,qBAE5B,OADIh+C,KAAKiiE,WAAWjiE,KAAKyhE,QAAQM,GAC1BA,CACT,GAAC,CAAA5hE,IAAA,eAAAC,MACD,SAAaqjD,GACX,IAAIye,EAAgBze,EAChBzjD,KAAKiiE,YAAWC,EAAgBliE,KAAKyT,MAAMgwC,IAC/CzjD,KAAKgiE,OAAOf,aAAaiB,EAC3B,GAAC,CAAA/hE,IAAA,cAAAoI,IACD,WACE,MAAO,CAACo6C,GACV,IAAC,CAAA,CAAAxiD,IAAA,eAAAC,MApED,WAME,GALAJ,KAAKgiE,OAAS,KACdhiE,KAAK0hE,aAAe,KACpB1hE,KAAK2hE,SAAW,KAChB3hE,KAAK4hE,SAAW,KAChB5hE,KAAKiiE,WAAY,EACQ,IAArBhiE,UAAUyB,OAAc,CAC1B,IAAM4+D,EAAQrgE,UAAU,GAAIkiE,EAAcliE,UAAU,GACpDuhE,EAAY1hE,aAAauG,KAAKrG,KAAMsgE,EAAO6B,EAAa,EAAG,EAC7D,MAAO,GAAyB,IAArBliE,UAAUyB,OAAc,CACjC,IAAM4+D,EAAQrgE,UAAU,GAAIkiE,EAAcliE,UAAU,GACpDD,KAAKgiE,OAAS1B,EACdtgE,KAAK0hE,aAAeS,EACpBniE,KAAKiiE,WAAajiE,KAAKoiE,oBACzB,CACF,IAAC,CAnB6B,GCLXC,GAAe,WAClC,SAAAA,IAAcxiE,OAAAwiE,GACZA,EAAgBviE,aAAaC,MAAMC,KAAMC,UAC3C,CAAC,OAAAC,EAAAmiE,EAAA,CAAA,CAAAliE,IAAA,gCAAAC,MAOD,WACE,GAAyB,IAArBH,UAAUyB,OACZ,IAAK,IAAI4C,EAAItE,KAAKsiE,YAAY10D,WAAYtJ,EAAEwJ,WAAa,CACvD,IACM0P,EADKlZ,EAAE0J,OACE2P,iBACf3d,KAAKuiE,8BAA8B/kD,EAAI,GAAIxd,KAAKsiE,aAChDtiE,KAAKuiE,8BAA8B/kD,EAAIA,EAAI9b,OAAS,GAAI1B,KAAKsiE,YAC/D,MACK,GAAyB,IAArBriE,UAAUyB,OAEnB,IADA,IAAM8uB,EAASvwB,UAAU,GAChBqE,EADiCrE,UAAU,GAC5B2N,WAAYtJ,EAAEwJ,WAGpC,IAFA,IACM0P,EADKlZ,EAAE0J,OACE2P,iBACN9P,EAAI,EAAGA,EAAI2P,EAAI9b,OAAS,EAAGmM,IAClC,GAAI2P,EAAI3P,GAAGjH,OAAO4pB,GAAS,MAAM,IAAItqB,EAAiB,iDAAmD2H,EAAI,QAAU2iB,EAI/H,GAAC,CAAArwB,IAAA,6BAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OACZ,IAAK,IAAI4C,EAAItE,KAAKsiE,YAAY10D,WAAYtJ,EAAEwJ,WAE1C,IADA,IAAM00D,EAAMl+D,EAAE0J,OACLH,EAAI7N,KAAKsiE,YAAY10D,WAAYC,EAAEC,WAAa,CACvD,IAAMs2C,EAAMv2C,EAAEG,OACdhO,KAAKyiE,2BAA2BD,EAAKpe,EACvC,MAEG,GAAyB,IAArBnkD,UAAUyB,OAInB,IAHA,IAAM8gE,EAAMviE,UAAU,GAAImkD,EAAMnkD,UAAU,GACpCyiE,EAAOF,EAAI7kD,iBACXyT,EAAOgzB,EAAIzmC,iBACR+mC,EAAK,EAAGA,EAAKge,EAAKhhE,OAAS,EAAGgjD,IACrC,IAAK,IAAIvyB,EAAK,EAAGA,EAAKf,EAAK1vB,OAAS,EAAGywB,IACrCnyB,KAAKyiE,2BAA2BD,EAAK9d,EAAIN,EAAKjyB,QAG7C,GAAyB,IAArBlyB,UAAUyB,OAAc,CACjC,IAAMs4D,EAAK/5D,UAAU,GAAIg6D,EAAYh6D,UAAU,GAAIi6D,EAAKj6D,UAAU,GAAIk6D,EAAYl6D,UAAU,GAC5F,GAAI+5D,IAAOE,GAAMD,IAAcE,EAAW,OAAO,KACjD,IAAMO,EAAMV,EAAGr8C,iBAAiBs8C,GAC1BU,EAAMX,EAAGr8C,iBAAiBs8C,EAAY,GACtCW,EAAMV,EAAGv8C,iBAAiBw8C,GAC1BU,EAAMX,EAAGv8C,iBAAiBw8C,EAAY,GAE5C,GADAn6D,KAAK8rD,IAAI9qB,oBAAoB05B,EAAKC,EAAKC,EAAKC,GACxC76D,KAAK8rD,IAAIpuB,oBACP19B,KAAK8rD,IAAIsP,YAAcp7D,KAAK2iE,wBAAwB3iE,KAAK8rD,IAAK4O,EAAKC,IAAQ36D,KAAK2iE,wBAAwB3iE,KAAK8rD,IAAK8O,EAAKC,IACzH,MAAM,IAAI30D,EAAiB,mCAAqCw0D,EAAM,IAAMC,EAAM,QAAUC,EAAM,IAAMC,EAG9G,CACF,GAAC,CAAA16D,IAAA,aAAAC,MACD,WACEJ,KAAKuiE,gCACLviE,KAAKyiE,6BACLziE,KAAK4iE,gBACP,GAAC,CAAAziE,IAAA,iBAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OACZ,IAAK,IAAI4C,EAAItE,KAAKsiE,YAAY10D,WAAYtJ,EAAEwJ,WAAa,CACvD,IAAMyzD,EAAKj9D,EAAE0J,OACbhO,KAAK4iE,eAAerB,EACtB,MACK,GAAyB,IAArBthE,UAAUyB,OAGnB,IAFA,IACM8b,EADKvd,UAAU,GACN0d,iBACNrZ,EAAI,EAAGA,EAAIkZ,EAAI9b,OAAS,EAAG4C,IAClCtE,KAAK6iE,cAAcrlD,EAAIlZ,GAAIkZ,EAAIlZ,EAAI,GAAIkZ,EAAIlZ,EAAI,GAGrD,GAAC,CAAAnE,IAAA,0BAAAC,MACD,SAAwBw9C,EAAI1zB,EAAIhf,GAC9B,IAAK,IAAI5G,EAAI,EAAGA,EAAIs5C,EAAGC,qBAAsBv5C,IAAK,CAChD,IAAMu6B,EAAQ+e,EAAGN,gBAAgBh5C,GACjC,IAAMu6B,EAAMj4B,OAAOsjB,KAAO2U,EAAMj4B,OAAOsE,GAAM,OAAO,CACtD,CACA,OAAO,CACT,GAAC,CAAA/K,IAAA,gBAAAC,MACD,SAAc8pB,EAAIhf,EAAIC,GACpB,GAAI+e,EAAGtjB,OAAOuE,GAAK,MAAM,IAAIjF,EAAiB,+BAAiCm8D,EAAgB77C,KAAKsC,iBAAiB,CAACoB,EAAIhf,EAAIC,IAChI,IAAC,CAAA,CAAAhL,IAAA,eAAAC,MAtFD,WACEJ,KAAK8rD,IAAM,IAAIntB,GACf3+B,KAAKsiE,YAAc,KACnB,IAAMxkB,EAAa79C,UAAU,GAC7BD,KAAKsiE,YAAcxkB,CACrB,IAAC,CATiC,GA4FpCukB,GAAgB77C,KAAO,IAAIkP,GC5FW,IACjBotC,GAAQ,WAC3B,SAAAA,IAAcjjE,OAAAijE,GACZA,EAAShjE,aAAaC,MAAMC,KAAMC,UACpC,CAAC,OAAAC,EAAA4iE,EAAA,CAAA,CAAA3iE,IAAA,mBAAAC,MA4BD,SAAiB8pB,EAAIhf,GACnB,IAAM63D,EAAUliE,KAAK6K,IAAIwe,EAAGxkB,EAAGwF,EAAGxF,GAC5Bs9D,EAAUniE,KAAK+K,IAAIse,EAAGxkB,EAAGwF,EAAGxF,GAC5Bu9D,EAAUpiE,KAAK6K,IAAIwe,EAAGvkB,EAAGuF,EAAGvF,GAC5Bu9D,EAAUriE,KAAK+K,IAAIse,EAAGvkB,EAAGuF,EAAGvF,GAC5Bw9D,EAAoBnjE,KAAKyJ,MAAQs5D,GAAW/iE,KAAK6J,MAAQm5D,GAAWhjE,KAAK2J,MAAQs5D,GAAWjjE,KAAK+J,MAAQm5D,EAC/G,GAAIC,EAAmB,OAAO,EAC9B,IAAMj5D,EAAalK,KAAKojE,0BAA0Bl5C,EAAIhf,GAEtD,OADA5E,EAAOG,SAAS08D,GAAqBj5D,GAAa,2BAC3CA,CACT,GAAC,CAAA/J,IAAA,cAAAC,MACD,SAAY4e,GACV,IAAM9a,EAAY,GAClBlE,KAAK6J,MAAQmV,EAAGtZ,EAAIxB,EACpBlE,KAAKyJ,MAAQuV,EAAGtZ,EAAIxB,EACpBlE,KAAK+J,MAAQiV,EAAGrZ,EAAIzB,EACpBlE,KAAK2J,MAAQqV,EAAGrZ,EAAIzB,EACpBlE,KAAKqjE,QAAQ,GAAK,IAAIp8D,EAAWjH,KAAKyJ,MAAOzJ,KAAK2J,OAClD3J,KAAKqjE,QAAQ,GAAK,IAAIp8D,EAAWjH,KAAK6J,MAAO7J,KAAK2J,OAClD3J,KAAKqjE,QAAQ,GAAK,IAAIp8D,EAAWjH,KAAK6J,MAAO7J,KAAK+J,OAClD/J,KAAKqjE,QAAQ,GAAK,IAAIp8D,EAAWjH,KAAKyJ,MAAOzJ,KAAK+J,MACpD,GAAC,CAAA5J,IAAA,aAAAC,MACD,SAAW8pB,EAAIhf,GACb,OAA0B,IAAtBlL,KAAK0hE,aAA6B1hE,KAAKsjE,iBAAiBp5C,EAAIhf,IAChElL,KAAKujE,WAAWr5C,EAAIlqB,KAAKwjE,WACzBxjE,KAAKujE,WAAWr4D,EAAIlL,KAAKyjE,WAClBzjE,KAAKsjE,iBAAiBtjE,KAAKwjE,UAAWxjE,KAAKyjE,WACpD,GAAC,CAAAtjE,IAAA,QAAAC,MACD,SAAM4Y,GACJ,OAAOnY,KAAK8zB,MAAM3b,EAAMhZ,KAAK0hE,aAC/B,GAAC,CAAAvhE,IAAA,gBAAAC,MACD,WACE,OAAOJ,KAAK0jE,WACd,GAAC,CAAAvjE,IAAA,aAAAC,MACD,SAAWiK,EAAGs5D,GACZA,EAAQj+D,EAAI1F,KAAKyT,MAAMpJ,EAAE3E,GACzBi+D,EAAQh+D,EAAI3F,KAAKyT,MAAMpJ,EAAE1E,EAC3B,GAAC,CAAAxF,IAAA,kBAAAC,MACD,WACE,GAAsB,OAAlBJ,KAAK4jE,SAAmB,CAC1B,IAAMC,EAAgBf,EAASgB,0BAA4B9jE,KAAK0hE,aAChE1hE,KAAK4jE,SAAW,IAAIx6D,EAASpJ,KAAK0jE,YAAYh+D,EAAIm+D,EAAe7jE,KAAK0jE,YAAYh+D,EAAIm+D,EAAe7jE,KAAK0jE,YAAY/9D,EAAIk+D,EAAe7jE,KAAK0jE,YAAY/9D,EAAIk+D,EAChK,CACA,OAAO7jE,KAAK4jE,QACd,GAAC,CAAAzjE,IAAA,yBAAAC,MACD,SAAuB8pB,EAAIhf,GAEzB,OADAlL,KAAK8rD,IAAI9qB,oBAAoB9W,EAAIhf,EAAIlL,KAAKqjE,QAAQ,GAAIrjE,KAAKqjE,QAAQ,MAC/DrjE,KAAK8rD,IAAIpuB,oBACb19B,KAAK8rD,IAAI9qB,oBAAoB9W,EAAIhf,EAAIlL,KAAKqjE,QAAQ,GAAIrjE,KAAKqjE,QAAQ,MAC/DrjE,KAAK8rD,IAAIpuB,oBACb19B,KAAK8rD,IAAI9qB,oBAAoB9W,EAAIhf,EAAIlL,KAAKqjE,QAAQ,GAAIrjE,KAAKqjE,QAAQ,MAC/DrjE,KAAK8rD,IAAIpuB,oBACb19B,KAAK8rD,IAAI9qB,oBAAoB9W,EAAIhf,EAAIlL,KAAKqjE,QAAQ,GAAIrjE,KAAKqjE,QAAQ,MAC/DrjE,KAAK8rD,IAAIpuB,oBAEf,GAAC,CAAAv9B,IAAA,4BAAAC,MACD,SAA0B8pB,EAAIhf,GAC5B,IAAI64D,GAAiB,EACjBC,GAAmB,EAEvB,OADAhkE,KAAK8rD,IAAI9qB,oBAAoB9W,EAAIhf,EAAIlL,KAAKqjE,QAAQ,GAAIrjE,KAAKqjE,QAAQ,MAC/DrjE,KAAK8rD,IAAIsP,aACbp7D,KAAK8rD,IAAI9qB,oBAAoB9W,EAAIhf,EAAIlL,KAAKqjE,QAAQ,GAAIrjE,KAAKqjE,QAAQ,MAC/DrjE,KAAK8rD,IAAIsP,aACTp7D,KAAK8rD,IAAIpuB,oBAAmBqmC,GAAiB,GACjD/jE,KAAK8rD,IAAI9qB,oBAAoB9W,EAAIhf,EAAIlL,KAAKqjE,QAAQ,GAAIrjE,KAAKqjE,QAAQ,MAC/DrjE,KAAK8rD,IAAIsP,aACTp7D,KAAK8rD,IAAIpuB,oBAAmBsmC,GAAmB,GACnDhkE,KAAK8rD,IAAI9qB,oBAAoB9W,EAAIhf,EAAIlL,KAAKqjE,QAAQ,GAAIrjE,KAAKqjE,QAAQ,MAC/DrjE,KAAK8rD,IAAIsP,gBACT2I,IAAkBC,OAClB95C,EAAGtjB,OAAO5G,KAAKikE,QACf/4D,EAAGtE,OAAO5G,KAAKikE,SAErB,GAAC,CAAA9jE,IAAA,iBAAAC,MACD,SAAeijD,EAAQ6gB,GACrB,IAAMh6C,EAAKm5B,EAAOxmC,cAAcqnD,GAC1Bh5D,EAAKm4C,EAAOxmC,cAAcqnD,EAAW,GAC3C,QAAIlkE,KAAKkK,WAAWggB,EAAIhf,KACtBm4C,EAAO9F,gBAAgBv9C,KAAK6c,gBAAiBqnD,IACtC,EAGX,IAAC,CAAA,CAAA/jE,IAAA,eAAAC,MA7GD,WACEJ,KAAK8rD,IAAM,KACX9rD,KAAKikE,IAAM,KACXjkE,KAAK0jE,YAAc,KACnB1jE,KAAKmkE,UAAY,KACjBnkE,KAAKwjE,UAAY,KACjBxjE,KAAKyjE,UAAY,KACjBzjE,KAAK0hE,aAAe,KACpB1hE,KAAK6J,MAAQ,KACb7J,KAAKyJ,MAAQ,KACbzJ,KAAK+J,MAAQ,KACb/J,KAAK2J,MAAQ,KACb3J,KAAKqjE,QAAU,IAAIjyD,MAAM,GAAGmG,KAAK,MACjCvX,KAAK4jE,SAAW,KAChB,IAAM5kD,EAAK/e,UAAU,GAAIkiE,EAAcliE,UAAU,GAAI29C,EAAK39C,UAAU,GAKpE,GAJAD,KAAK0jE,YAAc1kD,EACnBhf,KAAKikE,IAAMjlD,EACXhf,KAAK0hE,aAAeS,EACpBniE,KAAK8rD,IAAMlO,EACPukB,GAAe,EAAG,MAAM,IAAIn/D,EAAyB,iCACrC,IAAhBm/D,IACFniE,KAAKikE,IAAM,IAAIh9D,EAAWjH,KAAKyT,MAAMuL,EAAGtZ,GAAI1F,KAAKyT,MAAMuL,EAAGrZ,IAC1D3F,KAAKwjE,UAAY,IAAIv8D,EACrBjH,KAAKyjE,UAAY,IAAIx8D,GAEvBjH,KAAKokE,YAAYpkE,KAAKikE,IACxB,IAAC,CA9B0B,GAmH7BnB,GAASgB,0BAA4B,ICvHW,IAC3BO,GAAyB,WAG3C,OAAAnkE,GAFD,SAAAmkE,IAAcxkE,OAAAwkE,GACZA,EAA0BvkE,aAAaC,MAAMC,KAAMC,UACrD,GAAC,CAAA,CAAAE,IAAA,SAAAC,MAID,WACE,GAAyB,IAArBH,UAAUyB,aAEP,GAAyB,IAArBzB,UAAUyB,OAAc,CACjC,IAAyB+iC,EAAaxkC,UAAU,GAArCA,UAAU,GAClB2gD,eAAenc,EAAYzkC,KAAKskE,iBACnCtkE,KAAKohD,OAAOphD,KAAKskE,gBACnB,CACF,IAAC,CAAA,CAAAnkE,IAAA,eAAAC,MAXD,WACEJ,KAAKskE,gBAAkB,IAAInmB,EAC7B,IAAC,CAN2C,GCEzBomB,GAAmB,WAGrC,OAAArkE,GAFD,SAAAqkE,IAAc1kE,OAAA0kE,GACZA,EAAoBzkE,aAAaC,MAAMC,KAAMC,UAC/C,GAAC,CAAA,CAAAE,IAAA,OAAAC,MAMD,WACE,GAAyB,IAArBH,UAAUyB,OAAc,CAC1B,IAAM8iE,EAAWvkE,UAAU,GAC3B,OAAOD,KAAKykE,KAAKD,EAAU,MAAO,EACpC,CAAO,GAAyB,IAArBvkE,UAAUyB,OAAc,CACjC,IAAM8iE,EAAWvkE,UAAU,GAAIykE,EAAazkE,UAAU,GAAI0kE,EAAsB1kE,UAAU,GACpF2kE,EAAWJ,EAASK,kBACpBC,EAAqB,IAAIC,GAAmBP,EAAUE,EAAYC,GAUxE,OATA3kE,KAAKojD,OAAOU,MAAM8gB,EAAU,IAAA,WAAA,OAAA1kE,GAAA,SAAAk5C,IAAAv5C,OAAAu5C,EAAA,GAAA,CAAA,CAAAj5C,IAAA,cAAAoI,IAC1B,WACE,MAAO,CAACyrC,GACV,GAAC,CAAA7zC,IAAA,YAAAC,MACD,SAAU4vC,GACUA,EACRoR,OAAOwjB,EAAUE,EAC7B,IAAC,CAPyB,KASrBA,EAAmBE,aAC5B,CACF,IAAC,CAAA,CAAA7kE,IAAA,eAAAC,MAxBD,WACEJ,KAAKojD,OAAS,KACd,IAAM7wC,EAAQtS,UAAU,GACxBD,KAAKojD,OAAS7wC,CAChB,IAAC,CARqC,GA8BlCwyD,YAAkBE,GACtB,SAAAF,IAAc,IAAAviE,EAE0C,OAF1C3C,OAAAklE,GACZviE,EAAAC,EAAAzC,KAAA+kE,GACAA,EAAmBjlE,aAAaC,MAAKyC,EAAOvC,WAAUuC,CACxD,CAAC,OAAAK,EAAAkiE,EAAAE,GAAA/kE,EAAA6kE,EAAA,CAAA,CAAA5kE,IAAA,cAAAC,MAWD,WACE,OAAOJ,KAAKklE,YACd,GAAC,CAAA/kE,IAAA,SAAAC,MACD,WACE,KAAyB,IAArBH,UAAUyB,QAAiBoD,OAAOif,UAAU9jB,UAAU,KAAOA,UAAU,aAAc+gD,IAQvF,OAAOt4B,EAAAq8C,EAAA,SAAA/kE,KAAA,GAAaD,MAAMC,KAAMC,WAPhC,IAAyBwkC,EAAaxkC,UAAU,GAC1CshE,EADKthE,UAAU,GACPokD,aACd,GAAIrkD,KAAKmlE,cAAgB5D,IACnB98B,IAAezkC,KAAKolE,sBAAwB3gC,EAAa,IAAMzkC,KAAKolE,sBAAsB,OAAO,KAEvGplE,KAAKklE,cAAgBllE,KAAKqlE,UAAUC,eAAe/D,EAAI98B,EAI3D,IAAC,CAAA,CAAAtkC,IAAA,eAAAC,MAxBD,WACEJ,KAAKqlE,UAAY,KACjBrlE,KAAKmlE,YAAc,KACnBnlE,KAAKolE,qBAAuB,KAC5BplE,KAAKklE,cAAe,EACpB,IAAMV,EAAWvkE,UAAU,GAAIykE,EAAazkE,UAAU,GAAI0kE,EAAsB1kE,UAAU,GAC1FD,KAAKqlE,UAAYb,EACjBxkE,KAAKmlE,YAAcT,EACnB1kE,KAAKolE,qBAAuBT,CAC9B,IAAC,EAd8BN,IA+BjCE,GAAoBQ,mBAAqBA,GC/Dc,IAClCQ,GAA+B,WAGjD,OAAArlE,GAFD,SAAAqlE,IAAc1lE,OAAA0lE,GACZA,EAAgCzlE,aAAaC,MAAMC,KAAMC,UAC3D,GAAC,CAAA,CAAAE,IAAA,uBAAAC,MAQD,SAAqB45D,EAAIC,EAAWC,EAAIC,GACtC,GAAIH,IAAOE,GAAMD,IAAcE,EAAW,OAAO,KACjD,IAAMO,EAAMV,EAAGr8C,iBAAiBs8C,GAC1BU,EAAMX,EAAGr8C,iBAAiBs8C,EAAY,GACtCW,EAAMV,EAAGv8C,iBAAiBw8C,GAC1BU,EAAMX,EAAGv8C,iBAAiBw8C,EAAY,GAE5C,GADAn6D,KAAK8rD,IAAI9qB,oBAAoB05B,EAAKC,EAAKC,EAAKC,GACxC76D,KAAK8rD,IAAIpuB,mBACP19B,KAAK8rD,IAAInuB,yBAA0B,CACrC,IAAK,IAAId,EAAW,EAAGA,EAAW78B,KAAK8rD,IAAIjO,qBAAsBhhB,IAC/D78B,KAAKwlE,uBAAuBv0D,IAAIjR,KAAK8rD,IAAIxO,gBAAgBzgB,IAE3Dm9B,EAAGmB,iBAAiBn7D,KAAK8rD,IAAKmO,EAAW,GACzCC,EAAGiB,iBAAiBn7D,KAAK8rD,IAAKqO,EAAW,EAC3C,CAEJ,GAAC,CAAAh6D,IAAA,SAAAC,MACD,WACE,OAAO,CACT,GAAC,CAAAD,IAAA,2BAAAC,MACD,WACE,OAAOJ,KAAKwlE,sBACd,GAAC,CAAArlE,IAAA,cAAAoI,IACD,WACE,MAAO,CAACwxD,GACV,IAAC,CAAA,CAAA55D,IAAA,eAAAC,MAhCD,WACEJ,KAAK8rD,IAAM,KACX9rD,KAAKwlE,uBAAyB,KAC9B,IAAM5nB,EAAK39C,UAAU,GACrBD,KAAK8rD,IAAMlO,EACX59C,KAAKwlE,uBAAyB,IAAIpmD,EACpC,IAAC,CAViD,GCS/BqmD,GAAkB,WAGpC,OAAAvlE,GAFD,SAAAulE,IAAc5lE,OAAA4lE,GACZA,EAAmB3lE,aAAaC,MAAMC,KAAMC,UAC9C,GAAC,CAAA,CAAAE,IAAA,mBAAAC,MAcD,SAAiBslE,GACf,IAAMC,EAAmBtpB,GAAmB2B,mBAAmB0nB,GACzDE,EAAK,IAAIvD,GAAgBsD,GAC/B,IACEC,EAAGC,YACJ,CAAC,MAAO3uD,GACP,KAAIA,aAAc7U,GAEb,MAAM6U,EADTA,EAAG4uD,iBAEP,CACF,GAAC,CAAA3lE,IAAA,qBAAAC,MACD,WACE,OAAOi8C,GAAmB2B,mBAAmBh+C,KAAKmjD,iBACpD,GAAC,CAAAhjD,IAAA,YAAAC,MACD,SAAU09C,EAAYF,GACpB,IAAMmoB,EAAgB/lE,KAAKgmE,0BAA0BloB,EAAYF,GACjE59C,KAAKimE,yBAAyBF,GAC9B/lE,KAAKkmE,mBAAmBpoB,EAC1B,GAAC,CAAA39C,IAAA,4BAAAC,MACD,SAA0B09C,EAAYF,GACpC,IAAMuoB,EAAiB,IAAIZ,GAAgC3nB,GAG3D,OAFA59C,KAAKgiE,OAAOjf,sBAAsBojB,GAClCnmE,KAAKgiE,OAAOf,aAAanjB,GAClBqoB,EAAeC,0BACxB,GAAC,CAAAjmE,IAAA,qBAAAC,MACD,WACE,GAAIwS,GAAa3S,UAAU,GAAI+P,GAE7B,IADA,IACS00C,EADKzkD,UAAU,GACJ2N,WAAY82C,EAAG52C,WAAa,CAC9C,IAAMu4D,EAAQ3hB,EAAG12C,OACjBhO,KAAKkmE,mBAAmBG,EAC1B,MACK,GAAIpmE,UAAU,aAAco8C,GAGjC,IAFA,IAAMr0C,EAAI/H,UAAU,GACdyiE,EAAO16D,EAAE2V,iBACNrZ,EAAI,EAAGA,EAAIo+D,EAAKhhE,OAAQ4C,IAAK,CACpC,IAAMkgE,EAAW,IAAI1B,GAASJ,EAAKp+D,GAAItE,KAAK0hE,aAAc1hE,KAAK8rD,KAC3C9rD,KAAKsmE,cAAc7B,KAAKD,EAAUx8D,EAAG1D,IAEvD0D,EAAEu1C,gBAAgBmlB,EAAKp+D,GAAIA,EAE/B,CAEJ,GAAC,CAAAnE,IAAA,eAAAC,MACD,SAAaslE,GACX1lE,KAAKmjD,iBAAmBuiB,EACxB1lE,KAAKgiE,OAAS,IAAIhf,GAClBhjD,KAAKsmE,cAAgB,IAAI/B,GAAoBvkE,KAAKgiE,OAAOuE,YACzDvmE,KAAKwmE,UAAUd,EAAqB1lE,KAAK8rD,IAC3C,GAAC,CAAA3rD,IAAA,2BAAAC,MACD,SAAyBqmE,GACvB,IAAK,IAAI5mD,EAAK4mD,EAAQ74D,WAAYiS,EAAG/R,WAAa,CAChD,IAAM44D,EAAS7mD,EAAG7R,OACZw2D,EAAW,IAAI1B,GAAS4D,EAAQ1mE,KAAK0hE,aAAc1hE,KAAK8rD,KAC9D9rD,KAAKsmE,cAAc7B,KAAKD,EAC1B,CACF,GAAC,CAAArkE,IAAA,cAAAoI,IACD,WACE,MAAO,CAACo6C,GACV,IAAC,CAAA,CAAAxiD,IAAA,eAAAC,MAxED,WACEJ,KAAK2mE,IAAM,KACX3mE,KAAK8rD,IAAM,KACX9rD,KAAK0hE,aAAe,KACpB1hE,KAAKgiE,OAAS,KACdhiE,KAAKsmE,cAAgB,KACrBtmE,KAAKmjD,iBAAmB,KACxB,IAAMluB,EAAKh1B,UAAU,GACrBD,KAAK2mE,IAAM1xC,EACXj1B,KAAK8rD,IAAM,IAAIntB,GACf3+B,KAAK8rD,IAAIK,kBAAkBl3B,GAC3Bj1B,KAAK0hE,aAAezsC,EAAGP,UACzB,IAAC,CAhBoC,GCFlBkyC,GAAQ,WAC3B,SAAAA,IAAc/mE,OAAA+mE,GACZA,EAAS9mE,aAAaC,MAAMC,KAAMC,UACpC,CAAC,OAAAC,EAAA0mE,EAAA,CAAA,CAAAzmE,IAAA,uBAAAC,MAsDD,SAAqBymE,GACnB,IAAMvG,EAAQ,IAAIkB,GAAY,IAAIiE,GAAmB,IAAIzxC,GAAe,IAAO6yC,EAAQnyC,YACjFoyC,EAAa,IAAI3H,GAAcn/D,KAAKipD,YAC1C6d,EAAWC,yBAAyBF,GACpCC,EAAWE,SAAS1G,GACpBtgE,KAAKinE,gBAAkBH,EAAWxhE,OAAOtF,KAAKknE,SAAUlnE,KAAKozC,UAC/D,GAAC,CAAAjzC,IAAA,yBAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OAAc,CAC1B,IAAK,IAAIylE,EAAaP,EAASQ,qBAAsBD,GAAc,EAAGA,IAAc,CAClF,IACEnnE,KAAKqnE,uBAAuBF,EAC7B,CAAC,MAAOjwD,GACP,KAAIA,aAAc4H,IAEb,MAAM5H,EADTlX,KAAKsnE,eAAiBpwD,CAE1B,CACA,GAA6B,OAAzBlX,KAAKinE,gBAA0B,OAAO,IAC5C,CACA,MAAMjnE,KAAKsnE,cACb,CAAO,GAAyB,IAArBrnE,UAAUyB,OAAc,CACjC,IAAM6lE,EAAkBtnE,UAAU,GAC5BunE,EAAuBZ,EAASa,qBAAqBznE,KAAKknE,SAAUlnE,KAAKozC,UAAWm0B,GACpFV,EAAU,IAAI7yC,GAAewzC,GACnCxnE,KAAK0nE,qBAAqBb,EAC5B,CACF,GAAC,CAAA1mE,IAAA,kBAAAC,MACD,WAEE,GADAJ,KAAK2nE,0BACwB,OAAzB3nE,KAAKinE,gBAA0B,OAAO,KAC1C,IAAMW,EAAQ5nE,KAAKknE,SAASr6D,aAAaW,oBACrCo6D,EAAMC,YAAc7zC,GAAeS,MAAOz0B,KAAK0nE,qBAAqBE,GAAa5nE,KAAKqnE,wBAC5F,GAAC,CAAAlnE,IAAA,sBAAAC,MACD,SAAoBuB,GAClB3B,KAAKipD,WAAWrnD,oBAAoBD,EACtC,GAAC,CAAAxB,IAAA,0BAAAC,MACD,WACE,IACE,IAAM0mE,EAAa,IAAI3H,GAAcn/D,KAAKipD,YAC1CjpD,KAAKinE,gBAAkBH,EAAWxhE,OAAOtF,KAAKknE,SAAUlnE,KAAKozC,UAC9D,CAAC,MAAOl8B,GACP,KAAIA,aAAchR,GAEb,MAAMgR,EADTlX,KAAKsnE,eAAiBpwD,CAE1B,CACF,GAAC,CAAA/W,IAAA,oBAAAC,MACD,SAAkByK,GAGhB,OAFA7K,KAAKozC,UAAYvoC,EACjB7K,KAAK8nE,kBACE9nE,KAAKinE,eACd,GAAC,CAAA9mE,IAAA,iBAAAC,MACD,SAAegB,GACbpB,KAAKipD,WAAWpnD,eAAeT,EACjC,IAAC,CAAA,CAAAjB,IAAA,eAAAC,MA1GD,WAME,GALAJ,KAAKknE,SAAW,KAChBlnE,KAAKozC,UAAY,KACjBpzC,KAAKipD,WAAa,IAAIrpD,EACtBI,KAAKinE,gBAAkB,KACvBjnE,KAAKsnE,eAAiB,KACG,IAArBrnE,UAAUyB,OAAc,CAC1B,IAAM4K,EAAIrM,UAAU,GACpBD,KAAKknE,SAAW56D,CAClB,MAAO,GAAyB,IAArBrM,UAAUyB,OAAc,CACjC,IAAM4K,EAAIrM,UAAU,GAAIqsD,EAAYrsD,UAAU,GAC9CD,KAAKknE,SAAW56D,EAChBtM,KAAKipD,WAAaqD,CACpB,CACF,GAAC,CAAAnsD,IAAA,WAAAC,MACD,WACE,GAAyB,IAArBH,UAAUyB,OAAc,CAC1B,IAAwBmJ,EAAW5K,UAAU,GAG7C,OAFa,IAAI2mE,EADP3mE,UAAU,IAEC8nE,kBAAkBl9D,EAEzC,CAAO,GAAyB,IAArB5K,UAAUyB,OAAc,CACjC,GAAIoD,OAAOif,UAAU9jB,UAAU,KAAQA,UAAU,aAAc8L,GAAoC,iBAAjB9L,UAAU,GAAkB,CAC5G,IAAwB4K,EAAW5K,UAAU,GAAI0B,EAAmB1B,UAAU,GACxE+nE,EAAQ,IAAIpB,EADR3mE,UAAU,IAIpB,OAFA+nE,EAAMpmE,oBAAoBD,GACVqmE,EAAMD,kBAAkBl9D,EAEzC,CAAM,GAAI5K,UAAU,aAAcL,GAAqBK,UAAU,aAAc8L,GAAoC,iBAAjB9L,UAAU,GAAkB,CAC7H,IAAwB4K,EAAW5K,UAAU,GAG7C,OAFc,IAAI2mE,EADR3mE,UAAU,GAAsCA,UAAU,IAE9C8nE,kBAAkBl9D,EAE1C,CACF,MAAO,GAAyB,IAArB5K,UAAUyB,OAAc,CACjC,IAAwBmJ,EAAW5K,UAAU,GAAI0B,EAAmB1B,UAAU,GAAImB,EAAcnB,UAAU,GACpG+nE,EAAQ,IAAIpB,EADR3mE,UAAU,IAKpB,OAHA+nE,EAAMpmE,oBAAoBD,GAC1BqmE,EAAMnmE,eAAeT,GACL4mE,EAAMD,kBAAkBl9D,EAE1C,CACF,GAAC,CAAA1K,IAAA,uBAAAC,MACD,SAA4BkM,EAAGzB,EAAUo9D,GACvC,IAAMh+D,EAAMqC,EAAES,sBAGRm7D,EAFS1kD,GAAS5X,IAAI/K,KAAKC,IAAImJ,EAAIP,WAAY7I,KAAKC,IAAImJ,EAAIL,WAAY/I,KAAKC,IAAImJ,EAAIH,WAAYjJ,KAAKC,IAAImJ,EAAID,YAEzF,GADFa,EAAW,EAAMA,EAAW,GAG/Cs9D,EAAeF,EADSpnE,KAAKyT,MAAMzT,KAAK+Y,IAAIsuD,GAAarnE,KAAK+Y,IAAI,IAAM,GAG9E,OADoB/Y,KAAK6C,IAAI,GAAMykE,EAErC,IAAC,CAxD0B,GAgH7BvB,GAASrlE,UAAY3B,EAAiB2B,UACtCqlE,GAASwB,SAAWxoE,EAAiBuC,SACrCykE,GAASzkE,SAAWvC,EAAiBuC,SACrCykE,GAASxkE,WAAaxC,EAAiBwC,WACvCwkE,GAASQ,qBAAuB,GC1HhC,IAAMiB,GAAgB,CAAC,QAAS,aAAc,aAAc,kBAAmB,UAAW,gBAerEC,GAAa,WAKhC,OAAApoE,GAJA,SAAAooE,EAAYhsC,GAAiBz8B,OAAAyoE,GAC3BtoE,KAAKs8B,gBAAkBA,GAAmB,IAAI5G,EAChD,GAEA,CAAA,CAAAv1B,IAAA,OAAAC,MAQA,SAAKmoE,GACH,IAAIv4C,EAKEwI,GAHJxI,EADkB,iBAATu4C,EACHC,KAAK9vD,MAAM6vD,GACRA,GAEM/vC,KAEjB,IAAK9f,GAAM8f,GAAO,MAAM,IAAIz1B,MAAM,yBAA2BitB,EAAIwI,MAEjE,OAAqC,IAAjC6vC,GAAc31D,QAAQ8lB,GACjB9f,GAAM8f,GAAMnyB,KAAKrG,KAAMgwB,EAAIlG,aAClB,uBAAT0O,EAAsC9f,GAAM8f,GAAMnyB,KAAKrG,KAAMgwB,EAAIxhB,YAGnEkK,GAAM8f,GAAMnyB,KAAKrG,KAAMgwB,EAChC,GAEA,CAAA7vB,IAAA,QAAAC,MAQA,SAAMm8B,GACJ,IAAM/D,EAAO+D,EAAShG,kBAEtB,IAAKkyC,GAAQjwC,GAAO,MAAM,IAAIz1B,MAAM,6BAEpC,OAAO0lE,GAAQjwC,GAAMnyB,KAAKrG,KAAMu8B,EAClC,IAAC,CA7C+B,GAgD5B7jB,GAAQ,CASZgwD,QAAS,SAAS14C,GAChB,IAAM24C,EAAU,CAAE,EAElB,IAAK,IAAMxoE,KAAO6vB,EAAK24C,EAAQxoE,GAAO6vB,EAAI7vB,GAE1C,GAAI6vB,EAAIuM,SAAU,CAChB,IAAM/D,EAAOxI,EAAIuM,SAAS/D,KAC1B,IAAK9f,GAAM8f,GAAO,MAAM,IAAIz1B,MAAM,yBAA2BitB,EAAIwI,MACjEmwC,EAAQpsC,SAAWv8B,KAAK4oE,KAAK54C,EAAIuM,SACnC,CAIA,OAFIvM,EAAI64C,OAAMF,EAAQE,KAAOnwD,GAAMmwD,KAAKxiE,KAAKrG,KAAMgwB,EAAI64C,OAEhDF,CACR,EAUDG,kBAAmB,SAAS94C,GAC1B,IAAM+4C,EAAoB,CAAE,EAE5B,GAAI/4C,EAAIg5C,SAAU,CAChBD,EAAkBC,SAAW,GAE7B,IAAK,IAAI1kE,EAAI,EAAGA,EAAI0rB,EAAIg5C,SAAStnE,SAAU4C,EAAGykE,EAAkBC,SAAS12D,KAAKtS,KAAK4oE,KAAK54C,EAAIg5C,SAAS1kE,IACvG,CAIA,OAFI0rB,EAAI64C,OAAME,EAAkBF,KAAO7oE,KAAK0Y,MAAMmwD,KAAKxiE,KAAKrG,KAAMgwB,EAAI64C,OAE/DE,CACR,EAUDj/C,YAAa,SAASrb,GAEpB,IADA,IAAMqb,EAAc,GACXxlB,EAAI,EAAGA,EAAImK,EAAM/M,SAAU4C,EAAG,CACrC,IAAM2kE,EAAMx6D,EAAMnK,GAClBwlB,EAAYxX,KAAI4oB,EAAKj0B,EAAUk0B,EAAI8tC,IACrC,CACA,OAAOn/C,CACR,EAUD++C,KAAM,SAASp6D,GACb,OAAOzO,KAAKs8B,gBAAgBpP,iBAAiB,CAC3C,IAAIjmB,EAAWwH,EAAM,GAAIA,EAAM,IAC/B,IAAIxH,EAAWwH,EAAM,GAAIA,EAAM,IAC/B,IAAIxH,EAAWwH,EAAM,GAAIA,EAAM,IAC/B,IAAIxH,EAAWwH,EAAM,GAAIA,EAAM,IAC/B,IAAIxH,EAAWwH,EAAM,GAAIA,EAAM,KAElC,EAUD+a,MAAO,SAAS/a,GACd,IAAMsY,EAAUmU,EAAOj0B,EAAUk0B,EAAI1sB,IACrC,OAAOzO,KAAKs8B,gBAAgBhT,YAAYvC,EACzC,EAUD4H,WAAY,SAASlgB,GAEnB,IADA,IAAM2a,EAAS,GACN9kB,EAAI,EAAGA,EAAImK,EAAM/M,SAAU4C,EAAG8kB,EAAO9W,KAAKoG,GAAM8Q,MAAMnjB,KAAKrG,KAAMyO,EAAMnK,KAChF,OAAOtE,KAAKs8B,gBAAgBjG,iBAAiBjN,EAC9C,EAUDpB,WAAY,SAASvZ,GACnB,IAAMqb,EAAcpR,GAAMoR,YAAYzjB,KAAKrG,KAAMyO,GACjD,OAAOzO,KAAKs8B,gBAAgBxT,iBAAiBgB,EAC9C,EAUD0L,gBAAiB,SAAS/mB,GAExB,IADA,IAAMgnB,EAAc,GACXnxB,EAAI,EAAGA,EAAImK,EAAM/M,SAAU4C,EAAGmxB,EAAYnjB,KAAKoG,GAAMsP,WAAW3hB,KAAKrG,KAAMyO,EAAMnK,KAC1F,OAAOtE,KAAKs8B,gBAAgBtP,sBAAsByI,EACnD,EAUD5K,QAAS,SAASpc,GAIhB,IAHA,IAAMsc,EAAmBrS,GAAMoR,YAAYzjB,KAAKrG,KAAMyO,EAAM,IACtDud,EAAQhsB,KAAKs8B,gBAAgBpP,iBAAiBnC,GAC9CmB,EAAQ,GACL5nB,EAAI,EAAGA,EAAImK,EAAM/M,SAAU4C,EAAG,CACrC,IAAMwpC,EAAOr/B,EAAMnK,GACbwlB,EAAcpR,GAAMoR,YAAYzjB,KAAKrG,KAAM8tC,GAC3Co7B,EAAalpE,KAAKs8B,gBAAgBpP,iBAAiBpD,GACzDoC,EAAM5Z,KAAK42D,EACb,CACA,OAAOlpE,KAAKs8B,gBAAgBlQ,cAAcJ,EAAOE,EAClD,EAUDkH,aAAc,SAAS3kB,GAErB,IADA,IAAM4kB,EAAW,GACR/uB,EAAI,EAAGA,EAAImK,EAAM/M,SAAU4C,EAAG,CACrC,IAAM6kE,EAAU16D,EAAMnK,GACtB+uB,EAAS/gB,KAAKoG,GAAMmS,QAAQxkB,KAAKrG,KAAMmpE,GACzC,CACA,OAAOnpE,KAAKs8B,gBAAgBpG,mBAAmB7C,EAChD,EAUD7F,mBAAoB,SAAS/e,GAE3B,IADA,IAAMD,EAAa,GACVlK,EAAI,EAAGA,EAAImK,EAAM/M,SAAU4C,EAAG,CACrC,IAAMi4B,EAAW9tB,EAAMnK,GACvBkK,EAAW8D,KAAKtS,KAAK4oE,KAAKrsC,GAC5B,CACA,OAAOv8B,KAAKs8B,gBAAgBzS,yBAAyBrb,EACvD,GAGIi6D,GAAU,CASd1hD,WAAY,SAASA,GACnB,IAAM7d,EAAI,CAAC6d,EAAWrhB,EAAGqhB,EAAWphB,GAKpC,OAJIohB,EAAWnf,GACbsB,EAAEoJ,KAAKyU,EAAWnf,GAChBmf,EAAWrf,GACbwB,EAAEoJ,KAAKyU,EAAWrf,GACbwB,CACR,EAUDsgB,MAAO,SAASI,GAEd,MAAO,CACL4O,KAAM,QACN1O,YAHY2+C,GAAQ1hD,WAAW1gB,KAAKrG,KAAM4pB,EAAM/M,iBAKnD,EAUD8R,WAAY,SAASy6C,GAEnB,IADA,IAAM36D,EAAQ,GACLnK,EAAI,EAAGA,EAAI8kE,EAAW37C,YAAY/rB,SAAU4C,EAAG,CACtD,IAAMslB,EAAQw/C,EAAW37C,YAAYnpB,GAC/B+kE,EAAUZ,GAAQj/C,MAAMnjB,KAAKrG,KAAM4pB,GACzCnb,EAAM6D,KAAK+2D,EAAQv/C,YACrB,CACA,MAAO,CACL0O,KAAM,aACN1O,YAAarb,EAEhB,EAUDuZ,WAAY,SAASshD,GAGnB,IAFA,IAAM76D,EAAQ,GACRqb,EAAcw/C,EAAW3rD,iBACtBrZ,EAAI,EAAGA,EAAIwlB,EAAYpoB,SAAU4C,EAAG,CAC3C,IAAMyiB,EAAa+C,EAAYxlB,GAC/BmK,EAAM6D,KAAKm2D,GAAQ1hD,WAAW1gB,KAAKrG,KAAM+mB,GAC3C,CACA,MAAO,CACLyR,KAAM,aACN1O,YAAarb,EAEhB,EAUD+mB,gBAAiB,SAAS+zC,GAExB,IADA,IAAM96D,EAAQ,GACLnK,EAAI,EAAGA,EAAIilE,EAAgB97C,YAAY/rB,SAAU4C,EAAG,CAC3D,IAAMglE,EAAaC,EAAgB97C,YAAYnpB,GACzC+kE,EAAUZ,GAAQzgD,WAAW3hB,KAAKrG,KAAMspE,GAC9C76D,EAAM6D,KAAK+2D,EAAQv/C,YACrB,CACA,MAAO,CACL0O,KAAM,kBACN1O,YAAarb,EAEhB,EAUDoc,QAAS,SAASs+C,GAChB,IAAM16D,EAAQ,GACR+6D,EAAef,GAAQzgD,WAAW3hB,KAAKrG,KAAMmpE,EAAQr+C,QAC3Drc,EAAM6D,KAAKk3D,EAAa1/C,aACxB,IAAK,IAAIxlB,EAAI,EAAGA,EAAI6kE,EAAQn+C,OAAOtpB,SAAU4C,EAAG,CAC9C,IAAMwpC,EAAOq7B,EAAQn+C,OAAO1mB,GACtBmlE,EAAchB,GAAQzgD,WAAW3hB,KAAKrG,KAAM8tC,GAClDr/B,EAAM6D,KAAKm3D,EAAY3/C,YACzB,CACA,MAAO,CACL0O,KAAM,UACN1O,YAAarb,EAEhB,EAUD2kB,aAAc,SAASs2C,GAErB,IADA,IAAMj7D,EAAQ,GACLnK,EAAI,EAAGA,EAAIolE,EAAaj8C,YAAY/rB,SAAU4C,EAAG,CACxD,IAAM6kE,EAAUO,EAAaj8C,YAAYnpB,GACnC+kE,EAAUZ,GAAQ59C,QAAQxkB,KAAKrG,KAAMmpE,GAC3C16D,EAAM6D,KAAK+2D,EAAQv/C,YACrB,CACA,MAAO,CACL0O,KAAM,eACN1O,YAAarb,EAEhB,EAUD+e,mBAAoB,SAASm8C,GAE3B,IADA,IAAMl7D,EAAQ,GACLnK,EAAI,EAAGA,EAAIqlE,EAAWl8C,YAAY/rB,SAAU4C,EAAG,CACtD,IAAMi4B,EAAWotC,EAAWl8C,YAAYnpB,GAClCk0B,EAAO+D,EAAShG,kBACtB9nB,EAAM6D,KAAKm2D,GAAQjwC,GAAMnyB,KAAKrG,KAAMu8B,GACtC,CACA,MAAO,CACL/D,KAAM,qBACNhqB,WAAYC,EAEhB,SC9ZW,CACXm4D,SAAAA,GACAgD,cCIgC,WAahC,OAAA1pE,GAJA,SAAA0pE,EAAYttC,GAAiBz8B,OAAA+pE,GAC3B5pE,KAAKy8B,OAAS,IAAI6rC,GAAchsC,GAAmB,IAAI5G,GACzD,GAEA,CAAA,CAAAv1B,IAAA,OAAAC,MASA,SAAKipE,GAEH,OADiBrpE,KAAKy8B,OAAOmsC,KAAKS,EAEpC,IAAC,CAzB+B,GDHhCQ,cEIgC,WAahC,OAAA3pE,GAJA,SAAA2pE,IAAchqE,OAAAgqE,GACZ7pE,KAAKy8B,OAAS,IAAI6rC,GAActoE,KAAKs8B,gBACvC,GAEA,CAAA,CAAAn8B,IAAA,QAAAC,MAQA,SAAMm8B,GACJ,OAAOv8B,KAAKy8B,OAAOC,MAAMH,EAC3B,IAAC,CAvB+B","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,168,169]}