maplibre-gl-geo-editor 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../node_modules/@turf/helpers/dist/esm/index.js","../node_modules/@turf/invariant/dist/esm/index.js","../node_modules/@turf/bearing/dist/esm/index.js","../node_modules/@turf/distance/dist/esm/index.js","../node_modules/@turf/rhumb-bearing/dist/esm/index.js","../node_modules/@turf/meta/dist/esm/index.js","../node_modules/@turf/area/dist/esm/index.js","../node_modules/@turf/bbox/dist/esm/index.js","../node_modules/@turf/bbox-clip/dist/esm/index.js","../node_modules/point-in-polygon-hao/node_modules/robust-predicates/esm/util.js","../node_modules/point-in-polygon-hao/node_modules/robust-predicates/esm/orient2d.js","../node_modules/point-in-polygon-hao/dist/esm/index.js","../node_modules/@turf/boolean-point-in-polygon/dist/esm/index.js","../node_modules/@turf/boolean-point-on-line/dist/esm/index.js","../node_modules/@turf/boolean-contains/dist/esm/index.js","../node_modules/sweepline-intersections/dist/sweeplineIntersections.esm.js","../node_modules/@turf/line-intersect/dist/esm/index.js","../node_modules/@turf/polygon-to-line/dist/esm/index.js","../node_modules/@turf/boolean-disjoint/dist/esm/index.js","../node_modules/geojson-equality-ts/dist/esm/index.js","../node_modules/@turf/clean-coords/dist/esm/index.js","../node_modules/@turf/boolean-intersects/dist/esm/index.js","../node_modules/rbush/node_modules/quickselect/index.js","../node_modules/rbush/index.js","../node_modules/@turf/geojson-rbush/dist/esm/index.js","../node_modules/@turf/line-segment/dist/esm/index.js","../node_modules/@turf/nearest-point-on-line/dist/esm/index.js","../node_modules/fast-deep-equal/index.js","../node_modules/@turf/line-overlap/dist/esm/index.js","../node_modules/@turf/boolean-overlap/dist/esm/index.js","../node_modules/@turf/boolean-within/dist/esm/index.js","../node_modules/@turf/center/dist/esm/index.js","../node_modules/@turf/jsts/dist/jsts.min.js","../node_modules/d3-geo/src/adder.js","../node_modules/d3-geo/src/math.js","../node_modules/d3-geo/src/noop.js","../node_modules/d3-geo/src/stream.js","../node_modules/d3-geo/src/area.js","../node_modules/d3-geo/src/cartesian.js","../node_modules/d3-geo/src/bounds.js","../node_modules/d3-geo/src/compose.js","../node_modules/d3-geo/src/rotation.js","../node_modules/d3-geo/src/circle.js","../node_modules/d3-geo/src/clip/buffer.js","../node_modules/d3-geo/src/clip/line.js","../node_modules/d3-geo/src/pointEqual.js","../node_modules/d3-geo/src/clip/polygon.js","../node_modules/d3-array/src/ascending.js","../node_modules/d3-array/src/bisector.js","../node_modules/d3-array/src/bisect.js","../node_modules/d3-array/src/merge.js","../node_modules/d3-geo/src/clip/extent.js","../node_modules/d3-geo/src/polygonContains.js","../node_modules/d3-geo/src/length.js","../node_modules/d3-geo/src/identity.js","../node_modules/d3-geo/src/path/area.js","../node_modules/d3-geo/src/path/bounds.js","../node_modules/d3-geo/src/path/measure.js","../node_modules/d3-geo/src/clip/index.js","../node_modules/d3-geo/src/clip/antimeridian.js","../node_modules/d3-geo/src/clip/circle.js","../node_modules/d3-geo/src/transform.js","../node_modules/d3-geo/src/projection/fit.js","../node_modules/d3-geo/src/projection/resample.js","../node_modules/d3-geo/src/projection/index.js","../node_modules/d3-geo/src/projection/azimuthal.js","../node_modules/d3-geo/src/projection/azimuthalEqualArea.js","../node_modules/d3-geo/src/projection/azimuthalEquidistant.js","../node_modules/d3-geo/src/projection/equirectangular.js","../node_modules/@turf/buffer/dist/esm/index.js","../node_modules/@turf/centroid/dist/esm/index.js","../node_modules/@turf/clone/dist/esm/index.js","../node_modules/bignumber.js/bignumber.mjs","../node_modules/splaytree-ts/dist/esm/index.js","../node_modules/polyclip-ts/dist/esm/index.js","../node_modules/@turf/difference/dist/esm/index.js","../node_modules/@turf/rhumb-distance/dist/esm/index.js","../node_modules/@turf/rhumb-destination/dist/esm/index.js","../node_modules/@turf/intersect/dist/esm/index.js","../node_modules/@turf/length/dist/esm/index.js","../node_modules/@turf/truncate/dist/esm/index.js","../node_modules/@turf/line-split/dist/esm/index.js","../node_modules/@turf/transform-scale/dist/esm/index.js","../node_modules/@turf/simplify/dist/esm/index.js","../node_modules/@turf/transform-translate/dist/esm/index.js","../node_modules/@turf/union/dist/esm/index.js","../node_modules/@turf/unkink-polygon/dist/esm/index.js","../src/lib/core/constants.ts","../src/lib/utils/geometryUtils.ts","../src/lib/features/CopyFeature.ts","../src/lib/features/SimplifyFeature.ts","../src/lib/features/UnionFeature.ts","../src/lib/features/DifferenceFeature.ts","../src/lib/features/ScaleFeature.ts","../src/lib/features/LassoFeature.ts","../src/lib/features/SplitFeature.ts","../src/lib/utils/selectionUtils.ts","../src/lib/core/GeoEditor.ts","../src/lib/utils/turfOperations.ts"],"sourcesContent":["// index.ts\nvar earthRadius = 63710088e-1;\nvar factors = {\n centimeters: earthRadius * 100,\n centimetres: earthRadius * 100,\n degrees: 360 / (2 * Math.PI),\n feet: earthRadius * 3.28084,\n inches: earthRadius * 39.37,\n kilometers: earthRadius / 1e3,\n kilometres: earthRadius / 1e3,\n meters: earthRadius,\n metres: earthRadius,\n miles: earthRadius / 1609.344,\n millimeters: earthRadius * 1e3,\n millimetres: earthRadius * 1e3,\n nauticalmiles: earthRadius / 1852,\n radians: 1,\n yards: earthRadius * 1.0936\n};\nvar areaFactors = {\n acres: 247105e-9,\n centimeters: 1e4,\n centimetres: 1e4,\n feet: 10.763910417,\n hectares: 1e-4,\n inches: 1550.003100006,\n kilometers: 1e-6,\n kilometres: 1e-6,\n meters: 1,\n metres: 1,\n miles: 386e-9,\n nauticalmiles: 29155334959812285e-23,\n millimeters: 1e6,\n millimetres: 1e6,\n yards: 1.195990046\n};\nfunction feature(geom, properties, options = {}) {\n const feat = { type: \"Feature\" };\n if (options.id === 0 || options.id) {\n feat.id = options.id;\n }\n if (options.bbox) {\n feat.bbox = options.bbox;\n }\n feat.properties = properties || {};\n feat.geometry = geom;\n return feat;\n}\nfunction geometry(type, coordinates, _options = {}) {\n switch (type) {\n case \"Point\":\n return point(coordinates).geometry;\n case \"LineString\":\n return lineString(coordinates).geometry;\n case \"Polygon\":\n return polygon(coordinates).geometry;\n case \"MultiPoint\":\n return multiPoint(coordinates).geometry;\n case \"MultiLineString\":\n return multiLineString(coordinates).geometry;\n case \"MultiPolygon\":\n return multiPolygon(coordinates).geometry;\n default:\n throw new Error(type + \" is invalid\");\n }\n}\nfunction point(coordinates, properties, options = {}) {\n if (!coordinates) {\n throw new Error(\"coordinates is required\");\n }\n if (!Array.isArray(coordinates)) {\n throw new Error(\"coordinates must be an Array\");\n }\n if (coordinates.length < 2) {\n throw new Error(\"coordinates must be at least 2 numbers long\");\n }\n if (!isNumber(coordinates[0]) || !isNumber(coordinates[1])) {\n throw new Error(\"coordinates must contain numbers\");\n }\n const geom = {\n type: \"Point\",\n coordinates\n };\n return feature(geom, properties, options);\n}\nfunction points(coordinates, properties, options = {}) {\n return featureCollection(\n coordinates.map((coords) => {\n return point(coords, properties);\n }),\n options\n );\n}\nfunction polygon(coordinates, properties, options = {}) {\n for (const ring of coordinates) {\n if (ring.length < 4) {\n throw new Error(\n \"Each LinearRing of a Polygon must have 4 or more Positions.\"\n );\n }\n if (ring[ring.length - 1].length !== ring[0].length) {\n throw new Error(\"First and last Position are not equivalent.\");\n }\n for (let j = 0; j < ring[ring.length - 1].length; j++) {\n if (ring[ring.length - 1][j] !== ring[0][j]) {\n throw new Error(\"First and last Position are not equivalent.\");\n }\n }\n }\n const geom = {\n type: \"Polygon\",\n coordinates\n };\n return feature(geom, properties, options);\n}\nfunction polygons(coordinates, properties, options = {}) {\n return featureCollection(\n coordinates.map((coords) => {\n return polygon(coords, properties);\n }),\n options\n );\n}\nfunction lineString(coordinates, properties, options = {}) {\n if (coordinates.length < 2) {\n throw new Error(\"coordinates must be an array of two or more positions\");\n }\n const geom = {\n type: \"LineString\",\n coordinates\n };\n return feature(geom, properties, options);\n}\nfunction lineStrings(coordinates, properties, options = {}) {\n return featureCollection(\n coordinates.map((coords) => {\n return lineString(coords, properties);\n }),\n options\n );\n}\nfunction featureCollection(features, options = {}) {\n const fc = { type: \"FeatureCollection\" };\n if (options.id) {\n fc.id = options.id;\n }\n if (options.bbox) {\n fc.bbox = options.bbox;\n }\n fc.features = features;\n return fc;\n}\nfunction multiLineString(coordinates, properties, options = {}) {\n const geom = {\n type: \"MultiLineString\",\n coordinates\n };\n return feature(geom, properties, options);\n}\nfunction multiPoint(coordinates, properties, options = {}) {\n const geom = {\n type: \"MultiPoint\",\n coordinates\n };\n return feature(geom, properties, options);\n}\nfunction multiPolygon(coordinates, properties, options = {}) {\n const geom = {\n type: \"MultiPolygon\",\n coordinates\n };\n return feature(geom, properties, options);\n}\nfunction geometryCollection(geometries, properties, options = {}) {\n const geom = {\n type: \"GeometryCollection\",\n geometries\n };\n return feature(geom, properties, options);\n}\nfunction round(num, precision = 0) {\n if (precision && !(precision >= 0)) {\n throw new Error(\"precision must be a positive number\");\n }\n const multiplier = Math.pow(10, precision || 0);\n return Math.round(num * multiplier) / multiplier;\n}\nfunction radiansToLength(radians, units = \"kilometers\") {\n const factor = factors[units];\n if (!factor) {\n throw new Error(units + \" units is invalid\");\n }\n return radians * factor;\n}\nfunction lengthToRadians(distance, units = \"kilometers\") {\n const factor = factors[units];\n if (!factor) {\n throw new Error(units + \" units is invalid\");\n }\n return distance / factor;\n}\nfunction lengthToDegrees(distance, units) {\n return radiansToDegrees(lengthToRadians(distance, units));\n}\nfunction bearingToAzimuth(bearing) {\n let angle = bearing % 360;\n if (angle < 0) {\n angle += 360;\n }\n return angle;\n}\nfunction azimuthToBearing(angle) {\n angle = angle % 360;\n if (angle > 180) {\n return angle - 360;\n } else if (angle < -180) {\n return angle + 360;\n }\n return angle;\n}\nfunction radiansToDegrees(radians) {\n const normalisedRadians = radians % (2 * Math.PI);\n return normalisedRadians * 180 / Math.PI;\n}\nfunction degreesToRadians(degrees) {\n const normalisedDegrees = degrees % 360;\n return normalisedDegrees * Math.PI / 180;\n}\nfunction convertLength(length, originalUnit = \"kilometers\", finalUnit = \"kilometers\") {\n if (!(length >= 0)) {\n throw new Error(\"length must be a positive number\");\n }\n return radiansToLength(lengthToRadians(length, originalUnit), finalUnit);\n}\nfunction convertArea(area, originalUnit = \"meters\", finalUnit = \"kilometers\") {\n if (!(area >= 0)) {\n throw new Error(\"area must be a positive number\");\n }\n const startFactor = areaFactors[originalUnit];\n if (!startFactor) {\n throw new Error(\"invalid original units\");\n }\n const finalFactor = areaFactors[finalUnit];\n if (!finalFactor) {\n throw new Error(\"invalid final units\");\n }\n return area / startFactor * finalFactor;\n}\nfunction isNumber(num) {\n return !isNaN(num) && num !== null && !Array.isArray(num);\n}\nfunction isObject(input) {\n return input !== null && typeof input === \"object\" && !Array.isArray(input);\n}\nfunction validateBBox(bbox) {\n if (!bbox) {\n throw new Error(\"bbox is required\");\n }\n if (!Array.isArray(bbox)) {\n throw new Error(\"bbox must be an Array\");\n }\n if (bbox.length !== 4 && bbox.length !== 6) {\n throw new Error(\"bbox must be an Array of 4 or 6 numbers\");\n }\n bbox.forEach((num) => {\n if (!isNumber(num)) {\n throw new Error(\"bbox must only contain numbers\");\n }\n });\n}\nfunction validateId(id) {\n if (!id) {\n throw new Error(\"id is required\");\n }\n if ([\"string\", \"number\"].indexOf(typeof id) === -1) {\n throw new Error(\"id must be a number or a string\");\n }\n}\nexport {\n areaFactors,\n azimuthToBearing,\n bearingToAzimuth,\n convertArea,\n convertLength,\n degreesToRadians,\n earthRadius,\n factors,\n feature,\n featureCollection,\n geometry,\n geometryCollection,\n isNumber,\n isObject,\n lengthToDegrees,\n lengthToRadians,\n lineString,\n lineStrings,\n multiLineString,\n multiPoint,\n multiPolygon,\n point,\n points,\n polygon,\n polygons,\n radiansToDegrees,\n radiansToLength,\n round,\n validateBBox,\n validateId\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport { isNumber } from \"@turf/helpers\";\nfunction getCoord(coord) {\n if (!coord) {\n throw new Error(\"coord is required\");\n }\n if (!Array.isArray(coord)) {\n if (coord.type === \"Feature\" && coord.geometry !== null && coord.geometry.type === \"Point\") {\n return [...coord.geometry.coordinates];\n }\n if (coord.type === \"Point\") {\n return [...coord.coordinates];\n }\n }\n if (Array.isArray(coord) && coord.length >= 2 && !Array.isArray(coord[0]) && !Array.isArray(coord[1])) {\n return [...coord];\n }\n throw new Error(\"coord must be GeoJSON Point or an Array of numbers\");\n}\nfunction getCoords(coords) {\n if (Array.isArray(coords)) {\n return coords;\n }\n if (coords.type === \"Feature\") {\n if (coords.geometry !== null) {\n return coords.geometry.coordinates;\n }\n } else {\n if (coords.coordinates) {\n return coords.coordinates;\n }\n }\n throw new Error(\n \"coords must be GeoJSON Feature, Geometry Object or an Array\"\n );\n}\nfunction containsNumber(coordinates) {\n if (coordinates.length > 1 && isNumber(coordinates[0]) && isNumber(coordinates[1])) {\n return true;\n }\n if (Array.isArray(coordinates[0]) && coordinates[0].length) {\n return containsNumber(coordinates[0]);\n }\n throw new Error(\"coordinates must only contain numbers\");\n}\nfunction geojsonType(value, type, name) {\n if (!type || !name) {\n throw new Error(\"type and name required\");\n }\n if (!value || value.type !== type) {\n throw new Error(\n \"Invalid input to \" + name + \": must be a \" + type + \", given \" + value.type\n );\n }\n}\nfunction featureOf(feature, type, name) {\n if (!feature) {\n throw new Error(\"No feature passed\");\n }\n if (!name) {\n throw new Error(\".featureOf() requires a name\");\n }\n if (!feature || feature.type !== \"Feature\" || !feature.geometry) {\n throw new Error(\n \"Invalid input to \" + name + \", Feature with geometry required\"\n );\n }\n if (!feature.geometry || feature.geometry.type !== type) {\n throw new Error(\n \"Invalid input to \" + name + \": must be a \" + type + \", given \" + feature.geometry.type\n );\n }\n}\nfunction collectionOf(featureCollection, type, name) {\n if (!featureCollection) {\n throw new Error(\"No featureCollection passed\");\n }\n if (!name) {\n throw new Error(\".collectionOf() requires a name\");\n }\n if (!featureCollection || featureCollection.type !== \"FeatureCollection\") {\n throw new Error(\n \"Invalid input to \" + name + \", FeatureCollection required\"\n );\n }\n for (const feature of featureCollection.features) {\n if (!feature || feature.type !== \"Feature\" || !feature.geometry) {\n throw new Error(\n \"Invalid input to \" + name + \", Feature with geometry required\"\n );\n }\n if (!feature.geometry || feature.geometry.type !== type) {\n throw new Error(\n \"Invalid input to \" + name + \": must be a \" + type + \", given \" + feature.geometry.type\n );\n }\n }\n}\nfunction getGeom(geojson) {\n if (geojson.type === \"Feature\") {\n return geojson.geometry;\n }\n return geojson;\n}\nfunction getType(geojson, _name) {\n if (geojson.type === \"FeatureCollection\") {\n return \"FeatureCollection\";\n }\n if (geojson.type === \"GeometryCollection\") {\n return \"GeometryCollection\";\n }\n if (geojson.type === \"Feature\" && geojson.geometry !== null) {\n return geojson.geometry.type;\n }\n return geojson.type;\n}\nexport {\n collectionOf,\n containsNumber,\n featureOf,\n geojsonType,\n getCoord,\n getCoords,\n getGeom,\n getType\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport { degreesToRadians, radiansToDegrees } from \"@turf/helpers\";\nimport { getCoord } from \"@turf/invariant\";\nfunction bearing(start, end, options = {}) {\n if (options.final === true) {\n return calculateFinalBearing(start, end);\n }\n const coordinates1 = getCoord(start);\n const coordinates2 = getCoord(end);\n const lon1 = degreesToRadians(coordinates1[0]);\n const lon2 = degreesToRadians(coordinates2[0]);\n const lat1 = degreesToRadians(coordinates1[1]);\n const lat2 = degreesToRadians(coordinates2[1]);\n const a = Math.sin(lon2 - lon1) * Math.cos(lat2);\n const b = Math.cos(lat1) * Math.sin(lat2) - Math.sin(lat1) * Math.cos(lat2) * Math.cos(lon2 - lon1);\n return radiansToDegrees(Math.atan2(a, b));\n}\nfunction calculateFinalBearing(start, end) {\n let bear = bearing(end, start);\n bear = (bear + 180) % 360;\n return bear;\n}\nvar index_default = bearing;\nexport {\n bearing,\n index_default as default\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport { getCoord } from \"@turf/invariant\";\nimport { radiansToLength, degreesToRadians } from \"@turf/helpers\";\nfunction distance(from, to, options = {}) {\n var coordinates1 = getCoord(from);\n var coordinates2 = getCoord(to);\n var dLat = degreesToRadians(coordinates2[1] - coordinates1[1]);\n var dLon = degreesToRadians(coordinates2[0] - coordinates1[0]);\n var lat1 = degreesToRadians(coordinates1[1]);\n var lat2 = degreesToRadians(coordinates2[1]);\n var a = Math.pow(Math.sin(dLat / 2), 2) + Math.pow(Math.sin(dLon / 2), 2) * Math.cos(lat1) * Math.cos(lat2);\n return radiansToLength(\n 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)),\n options.units\n );\n}\nvar index_default = distance;\nexport {\n index_default as default,\n distance\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport { degreesToRadians, radiansToDegrees } from \"@turf/helpers\";\nimport { getCoord } from \"@turf/invariant\";\nfunction rhumbBearing(start, end, options = {}) {\n let bear360;\n if (options.final) {\n bear360 = calculateRhumbBearing(getCoord(end), getCoord(start));\n } else {\n bear360 = calculateRhumbBearing(getCoord(start), getCoord(end));\n }\n const bear180 = bear360 > 180 ? -(360 - bear360) : bear360;\n return bear180;\n}\nfunction calculateRhumbBearing(from, to) {\n const phi1 = degreesToRadians(from[1]);\n const phi2 = degreesToRadians(to[1]);\n let deltaLambda = degreesToRadians(to[0] - from[0]);\n if (deltaLambda > Math.PI) {\n deltaLambda -= 2 * Math.PI;\n }\n if (deltaLambda < -Math.PI) {\n deltaLambda += 2 * Math.PI;\n }\n const deltaPsi = Math.log(\n Math.tan(phi2 / 2 + Math.PI / 4) / Math.tan(phi1 / 2 + Math.PI / 4)\n );\n const theta = Math.atan2(deltaLambda, deltaPsi);\n return (radiansToDegrees(theta) + 360) % 360;\n}\nvar index_default = rhumbBearing;\nexport {\n index_default as default,\n rhumbBearing\n};\n//# sourceMappingURL=index.js.map","// index.js\nimport { feature, point, lineString, isObject } from \"@turf/helpers\";\nfunction coordEach(geojson, callback, excludeWrapCoord) {\n if (geojson === null) return;\n var j, k, l, geometry, stopG, coords, geometryMaybeCollection, wrapShrink = 0, coordIndex = 0, isGeometryCollection, type = geojson.type, isFeatureCollection = type === \"FeatureCollection\", isFeature = type === \"Feature\", stop = isFeatureCollection ? geojson.features.length : 1;\n for (var featureIndex = 0; featureIndex < stop; featureIndex++) {\n geometryMaybeCollection = isFeatureCollection ? geojson.features[featureIndex].geometry : isFeature ? geojson.geometry : geojson;\n isGeometryCollection = geometryMaybeCollection ? geometryMaybeCollection.type === \"GeometryCollection\" : false;\n stopG = isGeometryCollection ? geometryMaybeCollection.geometries.length : 1;\n for (var geomIndex = 0; geomIndex < stopG; geomIndex++) {\n var multiFeatureIndex = 0;\n var geometryIndex = 0;\n geometry = isGeometryCollection ? geometryMaybeCollection.geometries[geomIndex] : geometryMaybeCollection;\n if (geometry === null) continue;\n coords = geometry.coordinates;\n var geomType = geometry.type;\n wrapShrink = excludeWrapCoord && (geomType === \"Polygon\" || geomType === \"MultiPolygon\") ? 1 : 0;\n switch (geomType) {\n case null:\n break;\n case \"Point\":\n if (callback(\n coords,\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) === false)\n return false;\n coordIndex++;\n multiFeatureIndex++;\n break;\n case \"LineString\":\n case \"MultiPoint\":\n for (j = 0; j < coords.length; j++) {\n if (callback(\n coords[j],\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) === false)\n return false;\n coordIndex++;\n if (geomType === \"MultiPoint\") multiFeatureIndex++;\n }\n if (geomType === \"LineString\") multiFeatureIndex++;\n break;\n case \"Polygon\":\n case \"MultiLineString\":\n for (j = 0; j < coords.length; j++) {\n for (k = 0; k < coords[j].length - wrapShrink; k++) {\n if (callback(\n coords[j][k],\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) === false)\n return false;\n coordIndex++;\n }\n if (geomType === \"MultiLineString\") multiFeatureIndex++;\n if (geomType === \"Polygon\") geometryIndex++;\n }\n if (geomType === \"Polygon\") multiFeatureIndex++;\n break;\n case \"MultiPolygon\":\n for (j = 0; j < coords.length; j++) {\n geometryIndex = 0;\n for (k = 0; k < coords[j].length; k++) {\n for (l = 0; l < coords[j][k].length - wrapShrink; l++) {\n if (callback(\n coords[j][k][l],\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) === false)\n return false;\n coordIndex++;\n }\n geometryIndex++;\n }\n multiFeatureIndex++;\n }\n break;\n case \"GeometryCollection\":\n for (j = 0; j < geometry.geometries.length; j++)\n if (coordEach(geometry.geometries[j], callback, excludeWrapCoord) === false)\n return false;\n break;\n default:\n throw new Error(\"Unknown Geometry Type\");\n }\n }\n }\n}\nfunction coordReduce(geojson, callback, initialValue, excludeWrapCoord) {\n var previousValue = initialValue;\n coordEach(\n geojson,\n function(currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) {\n if (coordIndex === 0 && initialValue === void 0)\n previousValue = currentCoord;\n else\n previousValue = callback(\n previousValue,\n currentCoord,\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n );\n },\n excludeWrapCoord\n );\n return previousValue;\n}\nfunction propEach(geojson, callback) {\n var i;\n switch (geojson.type) {\n case \"FeatureCollection\":\n for (i = 0; i < geojson.features.length; i++) {\n if (callback(geojson.features[i].properties, i) === false) break;\n }\n break;\n case \"Feature\":\n callback(geojson.properties, 0);\n break;\n }\n}\nfunction propReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n propEach(geojson, function(currentProperties, featureIndex) {\n if (featureIndex === 0 && initialValue === void 0)\n previousValue = currentProperties;\n else\n previousValue = callback(previousValue, currentProperties, featureIndex);\n });\n return previousValue;\n}\nfunction featureEach(geojson, callback) {\n if (geojson.type === \"Feature\") {\n callback(geojson, 0);\n } else if (geojson.type === \"FeatureCollection\") {\n for (var i = 0; i < geojson.features.length; i++) {\n if (callback(geojson.features[i], i) === false) break;\n }\n }\n}\nfunction featureReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n featureEach(geojson, function(currentFeature, featureIndex) {\n if (featureIndex === 0 && initialValue === void 0)\n previousValue = currentFeature;\n else previousValue = callback(previousValue, currentFeature, featureIndex);\n });\n return previousValue;\n}\nfunction coordAll(geojson) {\n var coords = [];\n coordEach(geojson, function(coord) {\n coords.push(coord);\n });\n return coords;\n}\nfunction geomEach(geojson, callback) {\n var i, j, g, geometry, stopG, geometryMaybeCollection, isGeometryCollection, featureProperties, featureBBox, featureId, featureIndex = 0, isFeatureCollection = geojson.type === \"FeatureCollection\", isFeature = geojson.type === \"Feature\", stop = isFeatureCollection ? geojson.features.length : 1;\n for (i = 0; i < stop; i++) {\n geometryMaybeCollection = isFeatureCollection ? geojson.features[i].geometry : isFeature ? geojson.geometry : geojson;\n featureProperties = isFeatureCollection ? geojson.features[i].properties : isFeature ? geojson.properties : {};\n featureBBox = isFeatureCollection ? geojson.features[i].bbox : isFeature ? geojson.bbox : void 0;\n featureId = isFeatureCollection ? geojson.features[i].id : isFeature ? geojson.id : void 0;\n isGeometryCollection = geometryMaybeCollection ? geometryMaybeCollection.type === \"GeometryCollection\" : false;\n stopG = isGeometryCollection ? geometryMaybeCollection.geometries.length : 1;\n for (g = 0; g < stopG; g++) {\n geometry = isGeometryCollection ? geometryMaybeCollection.geometries[g] : geometryMaybeCollection;\n if (geometry === null) {\n if (callback(\n null,\n featureIndex,\n featureProperties,\n featureBBox,\n featureId\n ) === false)\n return false;\n continue;\n }\n switch (geometry.type) {\n case \"Point\":\n case \"LineString\":\n case \"MultiPoint\":\n case \"Polygon\":\n case \"MultiLineString\":\n case \"MultiPolygon\": {\n if (callback(\n geometry,\n featureIndex,\n featureProperties,\n featureBBox,\n featureId\n ) === false)\n return false;\n break;\n }\n case \"GeometryCollection\": {\n for (j = 0; j < geometry.geometries.length; j++) {\n if (callback(\n geometry.geometries[j],\n featureIndex,\n featureProperties,\n featureBBox,\n featureId\n ) === false)\n return false;\n }\n break;\n }\n default:\n throw new Error(\"Unknown Geometry Type\");\n }\n }\n featureIndex++;\n }\n}\nfunction geomReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n geomEach(\n geojson,\n function(currentGeometry, featureIndex, featureProperties, featureBBox, featureId) {\n if (featureIndex === 0 && initialValue === void 0)\n previousValue = currentGeometry;\n else\n previousValue = callback(\n previousValue,\n currentGeometry,\n featureIndex,\n featureProperties,\n featureBBox,\n featureId\n );\n }\n );\n return previousValue;\n}\nfunction flattenEach(geojson, callback) {\n geomEach(geojson, function(geometry, featureIndex, properties, bbox, id) {\n var type = geometry === null ? null : geometry.type;\n switch (type) {\n case null:\n case \"Point\":\n case \"LineString\":\n case \"Polygon\":\n if (callback(\n feature(geometry, properties, { bbox, id }),\n featureIndex,\n 0\n ) === false)\n return false;\n return;\n }\n var geomType;\n switch (type) {\n case \"MultiPoint\":\n geomType = \"Point\";\n break;\n case \"MultiLineString\":\n geomType = \"LineString\";\n break;\n case \"MultiPolygon\":\n geomType = \"Polygon\";\n break;\n }\n for (var multiFeatureIndex = 0; multiFeatureIndex < geometry.coordinates.length; multiFeatureIndex++) {\n var coordinate = geometry.coordinates[multiFeatureIndex];\n var geom = {\n type: geomType,\n coordinates: coordinate\n };\n if (callback(feature(geom, properties), featureIndex, multiFeatureIndex) === false)\n return false;\n }\n });\n}\nfunction flattenReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n flattenEach(\n geojson,\n function(currentFeature, featureIndex, multiFeatureIndex) {\n if (featureIndex === 0 && multiFeatureIndex === 0 && initialValue === void 0)\n previousValue = currentFeature;\n else\n previousValue = callback(\n previousValue,\n currentFeature,\n featureIndex,\n multiFeatureIndex\n );\n }\n );\n return previousValue;\n}\nfunction segmentEach(geojson, callback) {\n flattenEach(geojson, function(feature2, featureIndex, multiFeatureIndex) {\n var segmentIndex = 0;\n if (!feature2.geometry) return;\n var type = feature2.geometry.type;\n if (type === \"Point\" || type === \"MultiPoint\") return;\n var previousCoords;\n var previousFeatureIndex = 0;\n var previousMultiIndex = 0;\n var prevGeomIndex = 0;\n if (coordEach(\n feature2,\n function(currentCoord, coordIndex, featureIndexCoord, multiPartIndexCoord, geometryIndex) {\n if (previousCoords === void 0 || featureIndex > previousFeatureIndex || multiPartIndexCoord > previousMultiIndex || geometryIndex > prevGeomIndex) {\n previousCoords = currentCoord;\n previousFeatureIndex = featureIndex;\n previousMultiIndex = multiPartIndexCoord;\n prevGeomIndex = geometryIndex;\n segmentIndex = 0;\n return;\n }\n var currentSegment = lineString(\n [previousCoords, currentCoord],\n feature2.properties\n );\n if (callback(\n currentSegment,\n featureIndex,\n multiFeatureIndex,\n geometryIndex,\n segmentIndex\n ) === false)\n return false;\n segmentIndex++;\n previousCoords = currentCoord;\n }\n ) === false)\n return false;\n });\n}\nfunction segmentReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n var started = false;\n segmentEach(\n geojson,\n function(currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) {\n if (started === false && initialValue === void 0)\n previousValue = currentSegment;\n else\n previousValue = callback(\n previousValue,\n currentSegment,\n featureIndex,\n multiFeatureIndex,\n geometryIndex,\n segmentIndex\n );\n started = true;\n }\n );\n return previousValue;\n}\nfunction lineEach(geojson, callback) {\n if (!geojson) throw new Error(\"geojson is required\");\n flattenEach(geojson, function(feature2, featureIndex, multiFeatureIndex) {\n if (feature2.geometry === null) return;\n var type = feature2.geometry.type;\n var coords = feature2.geometry.coordinates;\n switch (type) {\n case \"LineString\":\n if (callback(feature2, featureIndex, multiFeatureIndex, 0, 0) === false)\n return false;\n break;\n case \"Polygon\":\n for (var geometryIndex = 0; geometryIndex < coords.length; geometryIndex++) {\n if (callback(\n lineString(coords[geometryIndex], feature2.properties),\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) === false)\n return false;\n }\n break;\n }\n });\n}\nfunction lineReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n lineEach(\n geojson,\n function(currentLine, featureIndex, multiFeatureIndex, geometryIndex) {\n if (featureIndex === 0 && initialValue === void 0)\n previousValue = currentLine;\n else\n previousValue = callback(\n previousValue,\n currentLine,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n );\n }\n );\n return previousValue;\n}\nfunction findSegment(geojson, options) {\n options = options || {};\n if (!isObject(options)) throw new Error(\"options is invalid\");\n var featureIndex = options.featureIndex || 0;\n var multiFeatureIndex = options.multiFeatureIndex || 0;\n var geometryIndex = options.geometryIndex || 0;\n var segmentIndex = options.segmentIndex || 0;\n var properties = options.properties;\n var geometry;\n switch (geojson.type) {\n case \"FeatureCollection\":\n if (featureIndex < 0)\n featureIndex = geojson.features.length + featureIndex;\n properties = properties || geojson.features[featureIndex].properties;\n geometry = geojson.features[featureIndex].geometry;\n break;\n case \"Feature\":\n properties = properties || geojson.properties;\n geometry = geojson.geometry;\n break;\n case \"Point\":\n case \"MultiPoint\":\n return null;\n case \"LineString\":\n case \"Polygon\":\n case \"MultiLineString\":\n case \"MultiPolygon\":\n geometry = geojson;\n break;\n default:\n throw new Error(\"geojson is invalid\");\n }\n if (geometry === null) return null;\n var coords = geometry.coordinates;\n switch (geometry.type) {\n case \"Point\":\n case \"MultiPoint\":\n return null;\n case \"LineString\":\n if (segmentIndex < 0) segmentIndex = coords.length + segmentIndex - 1;\n return lineString(\n [coords[segmentIndex], coords[segmentIndex + 1]],\n properties,\n options\n );\n case \"Polygon\":\n if (geometryIndex < 0) geometryIndex = coords.length + geometryIndex;\n if (segmentIndex < 0)\n segmentIndex = coords[geometryIndex].length + segmentIndex - 1;\n return lineString(\n [\n coords[geometryIndex][segmentIndex],\n coords[geometryIndex][segmentIndex + 1]\n ],\n properties,\n options\n );\n case \"MultiLineString\":\n if (multiFeatureIndex < 0)\n multiFeatureIndex = coords.length + multiFeatureIndex;\n if (segmentIndex < 0)\n segmentIndex = coords[multiFeatureIndex].length + segmentIndex - 1;\n return lineString(\n [\n coords[multiFeatureIndex][segmentIndex],\n coords[multiFeatureIndex][segmentIndex + 1]\n ],\n properties,\n options\n );\n case \"MultiPolygon\":\n if (multiFeatureIndex < 0)\n multiFeatureIndex = coords.length + multiFeatureIndex;\n if (geometryIndex < 0)\n geometryIndex = coords[multiFeatureIndex].length + geometryIndex;\n if (segmentIndex < 0)\n segmentIndex = coords[multiFeatureIndex][geometryIndex].length - segmentIndex - 1;\n return lineString(\n [\n coords[multiFeatureIndex][geometryIndex][segmentIndex],\n coords[multiFeatureIndex][geometryIndex][segmentIndex + 1]\n ],\n properties,\n options\n );\n }\n throw new Error(\"geojson is invalid\");\n}\nfunction findPoint(geojson, options) {\n options = options || {};\n if (!isObject(options)) throw new Error(\"options is invalid\");\n var featureIndex = options.featureIndex || 0;\n var multiFeatureIndex = options.multiFeatureIndex || 0;\n var geometryIndex = options.geometryIndex || 0;\n var coordIndex = options.coordIndex || 0;\n var properties = options.properties;\n var geometry;\n switch (geojson.type) {\n case \"FeatureCollection\":\n if (featureIndex < 0)\n featureIndex = geojson.features.length + featureIndex;\n properties = properties || geojson.features[featureIndex].properties;\n geometry = geojson.features[featureIndex].geometry;\n break;\n case \"Feature\":\n properties = properties || geojson.properties;\n geometry = geojson.geometry;\n break;\n case \"Point\":\n case \"MultiPoint\":\n return null;\n case \"LineString\":\n case \"Polygon\":\n case \"MultiLineString\":\n case \"MultiPolygon\":\n geometry = geojson;\n break;\n default:\n throw new Error(\"geojson is invalid\");\n }\n if (geometry === null) return null;\n var coords = geometry.coordinates;\n switch (geometry.type) {\n case \"Point\":\n return point(coords, properties, options);\n case \"MultiPoint\":\n if (multiFeatureIndex < 0)\n multiFeatureIndex = coords.length + multiFeatureIndex;\n return point(coords[multiFeatureIndex], properties, options);\n case \"LineString\":\n if (coordIndex < 0) coordIndex = coords.length + coordIndex;\n return point(coords[coordIndex], properties, options);\n case \"Polygon\":\n if (geometryIndex < 0) geometryIndex = coords.length + geometryIndex;\n if (coordIndex < 0)\n coordIndex = coords[geometryIndex].length + coordIndex;\n return point(coords[geometryIndex][coordIndex], properties, options);\n case \"MultiLineString\":\n if (multiFeatureIndex < 0)\n multiFeatureIndex = coords.length + multiFeatureIndex;\n if (coordIndex < 0)\n coordIndex = coords[multiFeatureIndex].length + coordIndex;\n return point(coords[multiFeatureIndex][coordIndex], properties, options);\n case \"MultiPolygon\":\n if (multiFeatureIndex < 0)\n multiFeatureIndex = coords.length + multiFeatureIndex;\n if (geometryIndex < 0)\n geometryIndex = coords[multiFeatureIndex].length + geometryIndex;\n if (coordIndex < 0)\n coordIndex = coords[multiFeatureIndex][geometryIndex].length - coordIndex;\n return point(\n coords[multiFeatureIndex][geometryIndex][coordIndex],\n properties,\n options\n );\n }\n throw new Error(\"geojson is invalid\");\n}\nexport {\n coordAll,\n coordEach,\n coordReduce,\n featureEach,\n featureReduce,\n findPoint,\n findSegment,\n flattenEach,\n flattenReduce,\n geomEach,\n geomReduce,\n lineEach,\n lineReduce,\n propEach,\n propReduce,\n segmentEach,\n segmentReduce\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport { earthRadius } from \"@turf/helpers\";\nimport { geomReduce } from \"@turf/meta\";\nfunction area(geojson) {\n return geomReduce(\n geojson,\n (value, geom) => {\n return value + calculateArea(geom);\n },\n 0\n );\n}\nfunction calculateArea(geom) {\n let total = 0;\n let i;\n switch (geom.type) {\n case \"Polygon\":\n return polygonArea(geom.coordinates);\n case \"MultiPolygon\":\n for (i = 0; i < geom.coordinates.length; i++) {\n total += polygonArea(geom.coordinates[i]);\n }\n return total;\n case \"Point\":\n case \"MultiPoint\":\n case \"LineString\":\n case \"MultiLineString\":\n return 0;\n }\n return 0;\n}\nfunction polygonArea(coords) {\n let total = 0;\n if (coords && coords.length > 0) {\n total += Math.abs(ringArea(coords[0]));\n for (let i = 1; i < coords.length; i++) {\n total -= Math.abs(ringArea(coords[i]));\n }\n }\n return total;\n}\nvar FACTOR = earthRadius * earthRadius / 2;\nvar PI_OVER_180 = Math.PI / 180;\nfunction ringArea(coords) {\n const coordsLength = coords.length - 1;\n if (coordsLength <= 2) return 0;\n let total = 0;\n let i = 0;\n while (i < coordsLength) {\n const lower = coords[i];\n const middle = coords[i + 1 === coordsLength ? 0 : i + 1];\n const upper = coords[i + 2 >= coordsLength ? (i + 2) % coordsLength : i + 2];\n const lowerX = lower[0] * PI_OVER_180;\n const middleY = middle[1] * PI_OVER_180;\n const upperX = upper[0] * PI_OVER_180;\n total += (upperX - lowerX) * Math.sin(middleY);\n i++;\n }\n return total * FACTOR;\n}\nvar index_default = area;\nexport {\n area,\n index_default as default\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport { coordEach } from \"@turf/meta\";\nfunction bbox(geojson, options = {}) {\n if (geojson.bbox != null && true !== options.recompute) {\n return geojson.bbox;\n }\n const result = [Infinity, Infinity, -Infinity, -Infinity];\n coordEach(geojson, (coord) => {\n if (result[0] > coord[0]) {\n result[0] = coord[0];\n }\n if (result[1] > coord[1]) {\n result[1] = coord[1];\n }\n if (result[2] < coord[0]) {\n result[2] = coord[0];\n }\n if (result[3] < coord[1]) {\n result[3] = coord[1];\n }\n });\n return result;\n}\nvar index_default = bbox;\nexport {\n bbox,\n index_default as default\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport {\n lineString,\n multiLineString,\n multiPolygon,\n polygon\n} from \"@turf/helpers\";\nimport { getGeom } from \"@turf/invariant\";\n\n// lib/lineclip.ts\nfunction lineclip(points, bbox, result) {\n var len = points.length, codeA = bitCode(points[0], bbox), part = [], i, codeB, lastCode;\n let a;\n let b;\n if (!result) result = [];\n for (i = 1; i < len; i++) {\n a = points[i - 1];\n b = points[i];\n codeB = lastCode = bitCode(b, bbox);\n while (true) {\n if (!(codeA | codeB)) {\n part.push(a);\n if (codeB !== lastCode) {\n part.push(b);\n if (i < len - 1) {\n result.push(part);\n part = [];\n }\n } else if (i === len - 1) {\n part.push(b);\n }\n break;\n } else if (codeA & codeB) {\n break;\n } else if (codeA) {\n a = intersect(a, b, codeA, bbox);\n codeA = bitCode(a, bbox);\n } else {\n b = intersect(a, b, codeB, bbox);\n codeB = bitCode(b, bbox);\n }\n }\n codeA = lastCode;\n }\n if (part.length) result.push(part);\n return result;\n}\nfunction polygonclip(points, bbox) {\n var result, edge, prev, prevInside, i, p, inside;\n for (edge = 1; edge <= 8; edge *= 2) {\n result = [];\n prev = points[points.length - 1];\n prevInside = !(bitCode(prev, bbox) & edge);\n for (i = 0; i < points.length; i++) {\n p = points[i];\n inside = !(bitCode(p, bbox) & edge);\n if (inside !== prevInside) result.push(intersect(prev, p, edge, bbox));\n if (inside) result.push(p);\n prev = p;\n prevInside = inside;\n }\n points = result;\n if (!points.length) break;\n }\n return result;\n}\nfunction intersect(a, b, edge, bbox) {\n return edge & 8 ? [a[0] + (b[0] - a[0]) * (bbox[3] - a[1]) / (b[1] - a[1]), bbox[3]] : edge & 4 ? [a[0] + (b[0] - a[0]) * (bbox[1] - a[1]) / (b[1] - a[1]), bbox[1]] : edge & 2 ? [bbox[2], a[1] + (b[1] - a[1]) * (bbox[2] - a[0]) / (b[0] - a[0])] : edge & 1 ? [bbox[0], a[1] + (b[1] - a[1]) * (bbox[0] - a[0]) / (b[0] - a[0])] : null;\n}\nfunction bitCode(p, bbox) {\n var code = 0;\n if (p[0] < bbox[0]) code |= 1;\n else if (p[0] > bbox[2]) code |= 2;\n if (p[1] < bbox[1]) code |= 4;\n else if (p[1] > bbox[3]) code |= 8;\n return code;\n}\n\n// index.ts\nfunction bboxClip(feature, bbox) {\n const geom = getGeom(feature);\n const type = geom.type;\n const properties = feature.type === \"Feature\" ? feature.properties : {};\n let coords = geom.coordinates;\n switch (type) {\n case \"LineString\":\n case \"MultiLineString\": {\n const lines = [];\n if (type === \"LineString\") {\n coords = [coords];\n }\n coords.forEach((line) => {\n lineclip(line, bbox, lines);\n });\n if (lines.length === 1) {\n return lineString(lines[0], properties);\n }\n return multiLineString(lines, properties);\n }\n case \"Polygon\":\n return polygon(clipPolygon(coords, bbox), properties);\n case \"MultiPolygon\":\n return multiPolygon(\n coords.map((poly) => {\n return clipPolygon(poly, bbox);\n }),\n properties\n );\n default:\n throw new Error(\"geometry \" + type + \" not supported\");\n }\n}\nfunction clipPolygon(rings, bbox) {\n const outRings = [];\n for (const ring of rings) {\n const clipped = polygonclip(ring, bbox);\n if (clipped.length > 0) {\n if (clipped[0][0] !== clipped[clipped.length - 1][0] || clipped[0][1] !== clipped[clipped.length - 1][1]) {\n clipped.push(clipped[0]);\n }\n if (clipped.length >= 4) {\n outRings.push(clipped);\n }\n }\n }\n return outRings;\n}\nvar index_default = bboxClip;\nexport {\n bboxClip,\n index_default as default\n};\n//# sourceMappingURL=index.js.map","export const epsilon = 1.1102230246251565e-16;\nexport const splitter = 134217729;\nexport const resulterrbound = (3 + 8 * epsilon) * epsilon;\n\n// fast_expansion_sum_zeroelim routine from oritinal code\nexport function sum(elen, e, flen, f, h) {\n let Q, Qnew, hh, bvirt;\n let enow = e[0];\n let fnow = f[0];\n let eindex = 0;\n let findex = 0;\n if ((fnow > enow) === (fnow > -enow)) {\n Q = enow;\n enow = e[++eindex];\n } else {\n Q = fnow;\n fnow = f[++findex];\n }\n let hindex = 0;\n if (eindex < elen && findex < flen) {\n if ((fnow > enow) === (fnow > -enow)) {\n Qnew = enow + Q;\n hh = Q - (Qnew - enow);\n enow = e[++eindex];\n } else {\n Qnew = fnow + Q;\n hh = Q - (Qnew - fnow);\n fnow = f[++findex];\n }\n Q = Qnew;\n if (hh !== 0) {\n h[hindex++] = hh;\n }\n while (eindex < elen && findex < flen) {\n if ((fnow > enow) === (fnow > -enow)) {\n Qnew = Q + enow;\n bvirt = Qnew - Q;\n hh = Q - (Qnew - bvirt) + (enow - bvirt);\n enow = e[++eindex];\n } else {\n Qnew = Q + fnow;\n bvirt = Qnew - Q;\n hh = Q - (Qnew - bvirt) + (fnow - bvirt);\n fnow = f[++findex];\n }\n Q = Qnew;\n if (hh !== 0) {\n h[hindex++] = hh;\n }\n }\n }\n while (eindex < elen) {\n Qnew = Q + enow;\n bvirt = Qnew - Q;\n hh = Q - (Qnew - bvirt) + (enow - bvirt);\n enow = e[++eindex];\n Q = Qnew;\n if (hh !== 0) {\n h[hindex++] = hh;\n }\n }\n while (findex < flen) {\n Qnew = Q + fnow;\n bvirt = Qnew - Q;\n hh = Q - (Qnew - bvirt) + (fnow - bvirt);\n fnow = f[++findex];\n Q = Qnew;\n if (hh !== 0) {\n h[hindex++] = hh;\n }\n }\n if (Q !== 0 || hindex === 0) {\n h[hindex++] = Q;\n }\n return hindex;\n}\n\nexport function sum_three(alen, a, blen, b, clen, c, tmp, out) {\n return sum(sum(alen, a, blen, b, tmp), tmp, clen, c, out);\n}\n\n// scale_expansion_zeroelim routine from oritinal code\nexport function scale(elen, e, b, h) {\n let Q, sum, hh, product1, product0;\n let bvirt, c, ahi, alo, bhi, blo;\n\n c = splitter * b;\n bhi = c - (c - b);\n blo = b - bhi;\n let enow = e[0];\n Q = enow * b;\n c = splitter * enow;\n ahi = c - (c - enow);\n alo = enow - ahi;\n hh = alo * blo - (Q - ahi * bhi - alo * bhi - ahi * blo);\n let hindex = 0;\n if (hh !== 0) {\n h[hindex++] = hh;\n }\n for (let i = 1; i < elen; i++) {\n enow = e[i];\n product1 = enow * b;\n c = splitter * enow;\n ahi = c - (c - enow);\n alo = enow - ahi;\n product0 = alo * blo - (product1 - ahi * bhi - alo * bhi - ahi * blo);\n sum = Q + product0;\n bvirt = sum - Q;\n hh = Q - (sum - bvirt) + (product0 - bvirt);\n if (hh !== 0) {\n h[hindex++] = hh;\n }\n Q = product1 + sum;\n hh = sum - (Q - product1);\n if (hh !== 0) {\n h[hindex++] = hh;\n }\n }\n if (Q !== 0 || hindex === 0) {\n h[hindex++] = Q;\n }\n return hindex;\n}\n\nexport function negate(elen, e) {\n for (let i = 0; i < elen; i++) e[i] = -e[i];\n return elen;\n}\n\nexport function estimate(elen, e) {\n let Q = e[0];\n for (let i = 1; i < elen; i++) Q += e[i];\n return Q;\n}\n\nexport function vec(n) {\n return new Float64Array(n);\n}\n","import {epsilon, splitter, resulterrbound, estimate, vec, sum} from './util.js';\n\nconst ccwerrboundA = (3 + 16 * epsilon) * epsilon;\nconst ccwerrboundB = (2 + 12 * epsilon) * epsilon;\nconst ccwerrboundC = (9 + 64 * epsilon) * epsilon * epsilon;\n\nconst B = vec(4);\nconst C1 = vec(8);\nconst C2 = vec(12);\nconst D = vec(16);\nconst u = vec(4);\n\nfunction orient2dadapt(ax, ay, bx, by, cx, cy, detsum) {\n let acxtail, acytail, bcxtail, bcytail;\n let bvirt, c, ahi, alo, bhi, blo, _i, _j, _0, s1, s0, t1, t0, u3;\n\n const acx = ax - cx;\n const bcx = bx - cx;\n const acy = ay - cy;\n const bcy = by - cy;\n\n s1 = acx * bcy;\n c = splitter * acx;\n ahi = c - (c - acx);\n alo = acx - ahi;\n c = splitter * bcy;\n bhi = c - (c - bcy);\n blo = bcy - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = acy * bcx;\n c = splitter * acy;\n ahi = c - (c - acy);\n alo = acy - ahi;\n c = splitter * bcx;\n bhi = c - (c - bcx);\n blo = bcx - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n B[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n B[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n B[2] = _j - (u3 - bvirt) + (_i - bvirt);\n B[3] = u3;\n\n let det = estimate(4, B);\n let errbound = ccwerrboundB * detsum;\n if (det >= errbound || -det >= errbound) {\n return det;\n }\n\n bvirt = ax - acx;\n acxtail = ax - (acx + bvirt) + (bvirt - cx);\n bvirt = bx - bcx;\n bcxtail = bx - (bcx + bvirt) + (bvirt - cx);\n bvirt = ay - acy;\n acytail = ay - (acy + bvirt) + (bvirt - cy);\n bvirt = by - bcy;\n bcytail = by - (bcy + bvirt) + (bvirt - cy);\n\n if (acxtail === 0 && acytail === 0 && bcxtail === 0 && bcytail === 0) {\n return det;\n }\n\n errbound = ccwerrboundC * detsum + resulterrbound * Math.abs(det);\n det += (acx * bcytail + bcy * acxtail) - (acy * bcxtail + bcx * acytail);\n if (det >= errbound || -det >= errbound) return det;\n\n s1 = acxtail * bcy;\n c = splitter * acxtail;\n ahi = c - (c - acxtail);\n alo = acxtail - ahi;\n c = splitter * bcy;\n bhi = c - (c - bcy);\n blo = bcy - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = acytail * bcx;\n c = splitter * acytail;\n ahi = c - (c - acytail);\n alo = acytail - ahi;\n c = splitter * bcx;\n bhi = c - (c - bcx);\n blo = bcx - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n u[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n u[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n u[3] = u3;\n const C1len = sum(4, B, 4, u, C1);\n\n s1 = acx * bcytail;\n c = splitter * acx;\n ahi = c - (c - acx);\n alo = acx - ahi;\n c = splitter * bcytail;\n bhi = c - (c - bcytail);\n blo = bcytail - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = acy * bcxtail;\n c = splitter * acy;\n ahi = c - (c - acy);\n alo = acy - ahi;\n c = splitter * bcxtail;\n bhi = c - (c - bcxtail);\n blo = bcxtail - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n u[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n u[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n u[3] = u3;\n const C2len = sum(C1len, C1, 4, u, C2);\n\n s1 = acxtail * bcytail;\n c = splitter * acxtail;\n ahi = c - (c - acxtail);\n alo = acxtail - ahi;\n c = splitter * bcytail;\n bhi = c - (c - bcytail);\n blo = bcytail - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = acytail * bcxtail;\n c = splitter * acytail;\n ahi = c - (c - acytail);\n alo = acytail - ahi;\n c = splitter * bcxtail;\n bhi = c - (c - bcxtail);\n blo = bcxtail - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n u[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n u[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n u[3] = u3;\n const Dlen = sum(C2len, C2, 4, u, D);\n\n return D[Dlen - 1];\n}\n\nexport function orient2d(ax, ay, bx, by, cx, cy) {\n const detleft = (ay - cy) * (bx - cx);\n const detright = (ax - cx) * (by - cy);\n const det = detleft - detright;\n\n const detsum = Math.abs(detleft + detright);\n if (Math.abs(det) >= ccwerrboundA * detsum) return det;\n\n return -orient2dadapt(ax, ay, bx, by, cx, cy, detsum);\n}\n\nexport function orient2dfast(ax, ay, bx, by, cx, cy) {\n return (ay - cy) * (bx - cx) - (ax - cx) * (by - cy);\n}\n","import { orient2d } from 'robust-predicates';\n\nfunction pointInPolygon(p, polygon) {\n var i;\n var ii;\n var k = 0;\n var f;\n var u1;\n var v1;\n var u2;\n var v2;\n var currentP;\n var nextP;\n\n var x = p[0];\n var y = p[1];\n\n var numContours = polygon.length;\n for (i = 0; i < numContours; i++) {\n ii = 0;\n var contour = polygon[i];\n var contourLen = contour.length - 1;\n\n currentP = contour[0];\n if (currentP[0] !== contour[contourLen][0] &&\n currentP[1] !== contour[contourLen][1]) {\n throw new Error('First and last coordinates in a ring must be the same')\n }\n\n u1 = currentP[0] - x;\n v1 = currentP[1] - y;\n\n for (ii; ii < contourLen; ii++) {\n nextP = contour[ii + 1];\n\n u2 = nextP[0] - x;\n v2 = nextP[1] - y;\n\n if (v1 === 0 && v2 === 0) {\n if ((u2 <= 0 && u1 >= 0) || (u1 <= 0 && u2 >= 0)) { return 0 }\n } else if ((v2 >= 0 && v1 <= 0) || (v2 <= 0 && v1 >= 0)) {\n f = orient2d(u1, u2, v1, v2, 0, 0);\n if (f === 0) { return 0 }\n if ((f > 0 && v2 > 0 && v1 <= 0) || (f < 0 && v2 <= 0 && v1 > 0)) { k++; }\n }\n currentP = nextP;\n v1 = v2;\n u1 = u2;\n }\n }\n\n if (k % 2 === 0) { return false }\n return true\n}\n\nexport { pointInPolygon as default };\n","// index.ts\nimport pip from \"point-in-polygon-hao\";\nimport { getCoord, getGeom } from \"@turf/invariant\";\nfunction booleanPointInPolygon(point, polygon, options = {}) {\n if (!point) {\n throw new Error(\"point is required\");\n }\n if (!polygon) {\n throw new Error(\"polygon is required\");\n }\n const pt = getCoord(point);\n const geom = getGeom(polygon);\n const type = geom.type;\n const bbox = polygon.bbox;\n let polys = geom.coordinates;\n if (bbox && inBBox(pt, bbox) === false) {\n return false;\n }\n if (type === \"Polygon\") {\n polys = [polys];\n }\n let result = false;\n for (var i = 0; i < polys.length; ++i) {\n const polyResult = pip(pt, polys[i]);\n if (polyResult === 0) return options.ignoreBoundary ? false : true;\n else if (polyResult) result = true;\n }\n return result;\n}\nfunction inBBox(pt, bbox) {\n return bbox[0] <= pt[0] && bbox[1] <= pt[1] && bbox[2] >= pt[0] && bbox[3] >= pt[1];\n}\nvar index_default = booleanPointInPolygon;\nexport {\n booleanPointInPolygon,\n index_default as default\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport { getCoord, getCoords } from \"@turf/invariant\";\nfunction booleanPointOnLine(pt, line, options = {}) {\n const ptCoords = getCoord(pt);\n const lineCoords = getCoords(line);\n for (let i = 0; i < lineCoords.length - 1; i++) {\n let ignoreBoundary = false;\n if (options.ignoreEndVertices) {\n if (i === 0) {\n ignoreBoundary = \"start\";\n }\n if (i === lineCoords.length - 2) {\n ignoreBoundary = \"end\";\n }\n if (i === 0 && i + 1 === lineCoords.length - 1) {\n ignoreBoundary = \"both\";\n }\n }\n if (isPointOnLineSegment(\n lineCoords[i],\n lineCoords[i + 1],\n ptCoords,\n ignoreBoundary,\n typeof options.epsilon === \"undefined\" ? null : options.epsilon\n )) {\n return true;\n }\n }\n return false;\n}\nfunction isPointOnLineSegment(lineSegmentStart, lineSegmentEnd, pt, excludeBoundary, epsilon) {\n const x = pt[0];\n const y = pt[1];\n const x1 = lineSegmentStart[0];\n const y1 = lineSegmentStart[1];\n const x2 = lineSegmentEnd[0];\n const y2 = lineSegmentEnd[1];\n const dxc = pt[0] - x1;\n const dyc = pt[1] - y1;\n const dxl = x2 - x1;\n const dyl = y2 - y1;\n const cross = dxc * dyl - dyc * dxl;\n if (epsilon !== null) {\n if (Math.abs(cross) > epsilon) {\n return false;\n }\n } else if (cross !== 0) {\n return false;\n }\n if (Math.abs(dxl) === Math.abs(dyl) && Math.abs(dxl) === 0) {\n if (excludeBoundary) {\n return false;\n }\n if (pt[0] === lineSegmentStart[0] && pt[1] === lineSegmentStart[1]) {\n return true;\n } else {\n return false;\n }\n }\n if (!excludeBoundary) {\n if (Math.abs(dxl) >= Math.abs(dyl)) {\n return dxl > 0 ? x1 <= x && x <= x2 : x2 <= x && x <= x1;\n }\n return dyl > 0 ? y1 <= y && y <= y2 : y2 <= y && y <= y1;\n } else if (excludeBoundary === \"start\") {\n if (Math.abs(dxl) >= Math.abs(dyl)) {\n return dxl > 0 ? x1 < x && x <= x2 : x2 <= x && x < x1;\n }\n return dyl > 0 ? y1 < y && y <= y2 : y2 <= y && y < y1;\n } else if (excludeBoundary === \"end\") {\n if (Math.abs(dxl) >= Math.abs(dyl)) {\n return dxl > 0 ? x1 <= x && x < x2 : x2 < x && x <= x1;\n }\n return dyl > 0 ? y1 <= y && y < y2 : y2 < y && y <= y1;\n } else if (excludeBoundary === \"both\") {\n if (Math.abs(dxl) >= Math.abs(dyl)) {\n return dxl > 0 ? x1 < x && x < x2 : x2 < x && x < x1;\n }\n return dyl > 0 ? y1 < y && y < y2 : y2 < y && y < y1;\n }\n return false;\n}\nvar index_default = booleanPointOnLine;\nexport {\n booleanPointOnLine,\n index_default as default\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport { bbox as calcBbox } from \"@turf/bbox\";\nimport { booleanPointInPolygon } from \"@turf/boolean-point-in-polygon\";\nimport { booleanPointOnLine as isPointOnLine } from \"@turf/boolean-point-on-line\";\nimport { getGeom } from \"@turf/invariant\";\nfunction booleanContains(feature1, feature2) {\n const geom1 = getGeom(feature1);\n const geom2 = getGeom(feature2);\n const type1 = geom1.type;\n const type2 = geom2.type;\n const coords1 = geom1.coordinates;\n const coords2 = geom2.coordinates;\n switch (type1) {\n case \"Point\":\n switch (type2) {\n case \"Point\":\n return compareCoords(coords1, coords2);\n default:\n throw new Error(\"feature2 \" + type2 + \" geometry not supported\");\n }\n case \"MultiPoint\":\n switch (type2) {\n case \"Point\":\n return isPointInMultiPoint(geom1, geom2);\n case \"MultiPoint\":\n return isMultiPointInMultiPoint(geom1, geom2);\n default:\n throw new Error(\"feature2 \" + type2 + \" geometry not supported\");\n }\n case \"LineString\":\n switch (type2) {\n case \"Point\":\n return isPointOnLine(geom2, geom1, { ignoreEndVertices: true });\n case \"LineString\":\n return isLineOnLine(geom1, geom2);\n case \"MultiPoint\":\n return isMultiPointOnLine(geom1, geom2);\n default:\n throw new Error(\"feature2 \" + type2 + \" geometry not supported\");\n }\n case \"Polygon\":\n switch (type2) {\n case \"Point\":\n return booleanPointInPolygon(geom2, geom1, { ignoreBoundary: true });\n case \"LineString\":\n return isLineInPoly(geom1, geom2);\n case \"Polygon\":\n return isPolyInPoly(geom1, geom2);\n case \"MultiPoint\":\n return isMultiPointInPoly(geom1, geom2);\n default:\n throw new Error(\"feature2 \" + type2 + \" geometry not supported\");\n }\n case \"MultiPolygon\":\n switch (type2) {\n case \"Polygon\":\n return isPolygonInMultiPolygon(geom1, geom2);\n default:\n throw new Error(\"feature2 \" + type2 + \" geometry not supported\");\n }\n default:\n throw new Error(\"feature1 \" + type1 + \" geometry not supported\");\n }\n}\nfunction isPolygonInMultiPolygon(multiPolygon, polygon) {\n return multiPolygon.coordinates.some(\n (coords) => isPolyInPoly({ type: \"Polygon\", coordinates: coords }, polygon)\n );\n}\nfunction isPointInMultiPoint(multiPoint, pt) {\n let i;\n let output = false;\n for (i = 0; i < multiPoint.coordinates.length; i++) {\n if (compareCoords(multiPoint.coordinates[i], pt.coordinates)) {\n output = true;\n break;\n }\n }\n return output;\n}\nfunction isMultiPointInMultiPoint(multiPoint1, multiPoint2) {\n for (const coord2 of multiPoint2.coordinates) {\n let matchFound = false;\n for (const coord1 of multiPoint1.coordinates) {\n if (compareCoords(coord2, coord1)) {\n matchFound = true;\n break;\n }\n }\n if (!matchFound) {\n return false;\n }\n }\n return true;\n}\nfunction isMultiPointOnLine(lineString, multiPoint) {\n let haveFoundInteriorPoint = false;\n for (const coord of multiPoint.coordinates) {\n if (isPointOnLine(coord, lineString, { ignoreEndVertices: true })) {\n haveFoundInteriorPoint = true;\n }\n if (!isPointOnLine(coord, lineString)) {\n return false;\n }\n }\n if (haveFoundInteriorPoint) {\n return true;\n }\n return false;\n}\nfunction isMultiPointInPoly(polygon, multiPoint) {\n for (const coord of multiPoint.coordinates) {\n if (!booleanPointInPolygon(coord, polygon, { ignoreBoundary: true })) {\n return false;\n }\n }\n return true;\n}\nfunction isLineOnLine(lineString1, lineString2) {\n let haveFoundInteriorPoint = false;\n for (const coords of lineString2.coordinates) {\n if (isPointOnLine({ type: \"Point\", coordinates: coords }, lineString1, {\n ignoreEndVertices: true\n })) {\n haveFoundInteriorPoint = true;\n }\n if (!isPointOnLine({ type: \"Point\", coordinates: coords }, lineString1, {\n ignoreEndVertices: false\n })) {\n return false;\n }\n }\n return haveFoundInteriorPoint;\n}\nfunction isLineInPoly(polygon, linestring) {\n let output = false;\n let i = 0;\n const polyBbox = calcBbox(polygon);\n const lineBbox = calcBbox(linestring);\n if (!doBBoxOverlap(polyBbox, lineBbox)) {\n return false;\n }\n for (i; i < linestring.coordinates.length - 1; i++) {\n const midPoint = getMidpoint(\n linestring.coordinates[i],\n linestring.coordinates[i + 1]\n );\n if (booleanPointInPolygon({ type: \"Point\", coordinates: midPoint }, polygon, {\n ignoreBoundary: true\n })) {\n output = true;\n break;\n }\n }\n return output;\n}\nfunction isPolyInPoly(feature1, feature2) {\n if (feature1.type === \"Feature\" && feature1.geometry === null) {\n return false;\n }\n if (feature2.type === \"Feature\" && feature2.geometry === null) {\n return false;\n }\n const poly1Bbox = calcBbox(feature1);\n const poly2Bbox = calcBbox(feature2);\n if (!doBBoxOverlap(poly1Bbox, poly2Bbox)) {\n return false;\n }\n const coords = getGeom(feature2).coordinates;\n for (const ring of coords) {\n for (const coord of ring) {\n if (!booleanPointInPolygon(coord, feature1)) {\n return false;\n }\n }\n }\n return true;\n}\nfunction doBBoxOverlap(bbox1, bbox2) {\n if (bbox1[0] > bbox2[0]) {\n return false;\n }\n if (bbox1[2] < bbox2[2]) {\n return false;\n }\n if (bbox1[1] > bbox2[1]) {\n return false;\n }\n if (bbox1[3] < bbox2[3]) {\n return false;\n }\n return true;\n}\nfunction compareCoords(pair1, pair2) {\n return pair1[0] === pair2[0] && pair1[1] === pair2[1];\n}\nfunction getMidpoint(pair1, pair2) {\n return [(pair1[0] + pair2[0]) / 2, (pair1[1] + pair2[1]) / 2];\n}\nvar index_default = booleanContains;\nexport {\n booleanContains,\n compareCoords,\n index_default as default,\n doBBoxOverlap,\n getMidpoint,\n isLineInPoly,\n isLineOnLine,\n isMultiPointInMultiPoint,\n isMultiPointInPoly,\n isMultiPointOnLine,\n isPointInMultiPoint,\n isPolyInPoly,\n isPolygonInMultiPolygon\n};\n//# sourceMappingURL=index.js.map","class TinyQueue {\n constructor(data = [], compare = defaultCompare) {\n this.data = data;\n this.length = this.data.length;\n this.compare = compare;\n\n if (this.length > 0) {\n for (let i = (this.length >> 1) - 1; i >= 0; i--) this._down(i);\n }\n }\n\n push(item) {\n this.data.push(item);\n this.length++;\n this._up(this.length - 1);\n }\n\n pop() {\n if (this.length === 0) return undefined;\n\n const top = this.data[0];\n const bottom = this.data.pop();\n this.length--;\n\n if (this.length > 0) {\n this.data[0] = bottom;\n this._down(0);\n }\n\n return top;\n }\n\n peek() {\n return this.data[0];\n }\n\n _up(pos) {\n const {data, compare} = this;\n const item = data[pos];\n\n while (pos > 0) {\n const parent = (pos - 1) >> 1;\n const current = data[parent];\n if (compare(item, current) >= 0) break;\n data[pos] = current;\n pos = parent;\n }\n\n data[pos] = item;\n }\n\n _down(pos) {\n const {data, compare} = this;\n const halfLength = this.length >> 1;\n const item = data[pos];\n\n while (pos < halfLength) {\n let left = (pos << 1) + 1;\n let best = data[left];\n const right = left + 1;\n\n if (right < this.length && compare(data[right], best) < 0) {\n left = right;\n best = data[right];\n }\n if (compare(best, item) >= 0) break;\n\n data[pos] = best;\n pos = left;\n }\n\n data[pos] = item;\n }\n}\n\nfunction defaultCompare(a, b) {\n return a < b ? -1 : a > b ? 1 : 0;\n}\n\nfunction checkWhichEventIsLeft (e1, e2) {\n if (e1.p.x > e2.p.x) return 1\n if (e1.p.x < e2.p.x) return -1\n\n if (e1.p.y !== e2.p.y) return e1.p.y > e2.p.y ? 1 : -1\n return 1\n}\n\nfunction checkWhichSegmentHasRightEndpointFirst (seg1, seg2) {\n if (seg1.rightSweepEvent.p.x > seg2.rightSweepEvent.p.x) return 1\n if (seg1.rightSweepEvent.p.x < seg2.rightSweepEvent.p.x) return -1\n\n if (seg1.rightSweepEvent.p.y !== seg2.rightSweepEvent.p.y) return seg1.rightSweepEvent.p.y < seg2.rightSweepEvent.p.y ? 1 : -1\n return 1\n}\n\nclass Event {\n\n constructor (p, featureId, ringId, eventId) {\n this.p = {\n x: p[0],\n y: p[1]\n };\n this.featureId = featureId;\n this.ringId = ringId;\n this.eventId = eventId;\n\n this.otherEvent = null;\n this.isLeftEndpoint = null;\n }\n\n isSamePoint (eventToCheck) {\n return this.p.x === eventToCheck.p.x && this.p.y === eventToCheck.p.y\n }\n}\n\nfunction fillEventQueue (geojson, eventQueue) {\n if (geojson.type === 'FeatureCollection') {\n const features = geojson.features;\n for (let i = 0; i < features.length; i++) {\n processFeature(features[i], eventQueue);\n }\n } else {\n processFeature(geojson, eventQueue);\n }\n}\n\nlet featureId = 0;\nlet ringId = 0;\nlet eventId = 0;\nfunction processFeature (featureOrGeometry, eventQueue) {\n const geom = featureOrGeometry.type === 'Feature' ? featureOrGeometry.geometry : featureOrGeometry;\n let coords = geom.coordinates;\n // standardise the input\n if (geom.type === 'Polygon' || geom.type === 'MultiLineString') coords = [coords];\n if (geom.type === 'LineString') coords = [[coords]];\n\n for (let i = 0; i < coords.length; i++) {\n for (let ii = 0; ii < coords[i].length; ii++) {\n let currentP = coords[i][ii][0];\n let nextP = null;\n ringId = ringId + 1;\n for (let iii = 0; iii < coords[i][ii].length - 1; iii++) {\n nextP = coords[i][ii][iii + 1];\n\n const e1 = new Event(currentP, featureId, ringId, eventId);\n const e2 = new Event(nextP, featureId, ringId, eventId + 1);\n\n e1.otherEvent = e2;\n e2.otherEvent = e1;\n\n if (checkWhichEventIsLeft(e1, e2) > 0) {\n e2.isLeftEndpoint = true;\n e1.isLeftEndpoint = false;\n } else {\n e1.isLeftEndpoint = true;\n e2.isLeftEndpoint = false;\n }\n eventQueue.push(e1);\n eventQueue.push(e2);\n\n currentP = nextP;\n eventId = eventId + 1;\n }\n }\n }\n featureId = featureId + 1;\n}\n\nclass Segment {\n\n constructor (event) {\n this.leftSweepEvent = event;\n this.rightSweepEvent = event.otherEvent;\n }\n}\n\nfunction testSegmentIntersect (seg1, seg2) {\n if (seg1 === null || seg2 === null) return false\n\n if (seg1.leftSweepEvent.ringId === seg2.leftSweepEvent.ringId &&\n (seg1.rightSweepEvent.isSamePoint(seg2.leftSweepEvent) ||\n seg1.rightSweepEvent.isSamePoint(seg2.leftSweepEvent) ||\n seg1.rightSweepEvent.isSamePoint(seg2.rightSweepEvent) ||\n seg1.leftSweepEvent.isSamePoint(seg2.leftSweepEvent) ||\n seg1.leftSweepEvent.isSamePoint(seg2.rightSweepEvent))) return false\n\n const x1 = seg1.leftSweepEvent.p.x;\n const y1 = seg1.leftSweepEvent.p.y;\n const x2 = seg1.rightSweepEvent.p.x;\n const y2 = seg1.rightSweepEvent.p.y;\n const x3 = seg2.leftSweepEvent.p.x;\n const y3 = seg2.leftSweepEvent.p.y;\n const x4 = seg2.rightSweepEvent.p.x;\n const y4 = seg2.rightSweepEvent.p.y;\n\n const denom = ((y4 - y3) * (x2 - x1)) - ((x4 - x3) * (y2 - y1));\n const numeA = ((x4 - x3) * (y1 - y3)) - ((y4 - y3) * (x1 - x3));\n const numeB = ((x2 - x1) * (y1 - y3)) - ((y2 - y1) * (x1 - x3));\n\n if (denom === 0) {\n if (numeA === 0 && numeB === 0) return false\n return false\n }\n\n const uA = numeA / denom;\n const uB = numeB / denom;\n\n if (uA >= 0 && uA <= 1 && uB >= 0 && uB <= 1) {\n const x = x1 + (uA * (x2 - x1));\n const y = y1 + (uA * (y2 - y1));\n return [x, y]\n }\n return false\n}\n\n// import {debugEventAndSegments, debugRemovingSegment} from './debug'\n\nfunction runCheck (eventQueue, ignoreSelfIntersections) {\n ignoreSelfIntersections = ignoreSelfIntersections ? ignoreSelfIntersections : false;\n\n const intersectionPoints = [];\n const outQueue = new TinyQueue([], checkWhichSegmentHasRightEndpointFirst);\n\n while (eventQueue.length) {\n const event = eventQueue.pop();\n if (event.isLeftEndpoint) {\n // debugEventAndSegments(event.p, outQueue.data)\n const segment = new Segment(event);\n for (let i = 0; i < outQueue.data.length; i++) {\n const otherSeg = outQueue.data[i];\n if (ignoreSelfIntersections) {\n if (otherSeg.leftSweepEvent.featureId === event.featureId) continue\n }\n const intersection = testSegmentIntersect(segment, otherSeg);\n if (intersection !== false) intersectionPoints.push(intersection);\n }\n outQueue.push(segment);\n } else if (event.isLeftEndpoint === false) {\n outQueue.pop();\n // const seg = outQueue.pop()\n // debugRemovingSegment(event.p, seg)\n }\n }\n return intersectionPoints\n}\n\nfunction sweeplineIntersections (geojson, ignoreSelfIntersections) {\n const eventQueue = new TinyQueue([], checkWhichEventIsLeft);\n fillEventQueue(geojson, eventQueue);\n return runCheck(eventQueue, ignoreSelfIntersections)\n}\n\nexport default sweeplineIntersections;\n","// index.ts\nimport { feature, featureCollection, point } from \"@turf/helpers\";\n\n// lib/sweepline-intersections-export.ts\nimport lib from \"sweepline-intersections\";\nvar sweeplineIntersections = lib;\n\n// index.ts\nfunction lineIntersect(line1, line2, options = {}) {\n const { removeDuplicates = true, ignoreSelfIntersections = true } = options;\n let features = [];\n if (line1.type === \"FeatureCollection\")\n features = features.concat(line1.features);\n else if (line1.type === \"Feature\") features.push(line1);\n else if (line1.type === \"LineString\" || line1.type === \"Polygon\" || line1.type === \"MultiLineString\" || line1.type === \"MultiPolygon\") {\n features.push(feature(line1));\n }\n if (line2.type === \"FeatureCollection\")\n features = features.concat(line2.features);\n else if (line2.type === \"Feature\") features.push(line2);\n else if (line2.type === \"LineString\" || line2.type === \"Polygon\" || line2.type === \"MultiLineString\" || line2.type === \"MultiPolygon\") {\n features.push(feature(line2));\n }\n const intersections = sweeplineIntersections(\n featureCollection(features),\n ignoreSelfIntersections\n );\n let results = [];\n if (removeDuplicates) {\n const unique = {};\n intersections.forEach((intersection) => {\n const key = intersection.join(\",\");\n if (!unique[key]) {\n unique[key] = true;\n results.push(intersection);\n }\n });\n } else {\n results = intersections;\n }\n return featureCollection(results.map((r) => point(r)));\n}\nvar index_default = lineIntersect;\nexport {\n index_default as default,\n lineIntersect\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport { featureCollection, lineString, multiLineString } from \"@turf/helpers\";\nimport { getGeom } from \"@turf/invariant\";\nfunction polygonToLine(poly, options = {}) {\n const geom = getGeom(poly);\n if (!options.properties && poly.type === \"Feature\") {\n options.properties = poly.properties;\n }\n switch (geom.type) {\n case \"Polygon\":\n return singlePolygonToLine(geom, options);\n case \"MultiPolygon\":\n return multiPolygonToLine(geom, options);\n default:\n throw new Error(\"invalid poly\");\n }\n}\nfunction singlePolygonToLine(poly, options = {}) {\n const geom = getGeom(poly);\n const coords = geom.coordinates;\n const properties = options.properties ? options.properties : poly.type === \"Feature\" ? poly.properties : {};\n return coordsToLine(coords, properties);\n}\nfunction multiPolygonToLine(multiPoly, options = {}) {\n const geom = getGeom(multiPoly);\n const coords = geom.coordinates;\n const properties = options.properties ? options.properties : multiPoly.type === \"Feature\" ? multiPoly.properties : {};\n const lines = [];\n coords.forEach((coord) => {\n lines.push(coordsToLine(coord, properties));\n });\n return featureCollection(lines);\n}\nfunction coordsToLine(coords, properties) {\n if (coords.length > 1) {\n return multiLineString(coords, properties);\n }\n return lineString(coords[0], properties);\n}\nvar index_default = polygonToLine;\nexport {\n coordsToLine,\n index_default as default,\n multiPolygonToLine,\n polygonToLine,\n singlePolygonToLine\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport { booleanPointInPolygon } from \"@turf/boolean-point-in-polygon\";\nimport { lineIntersect } from \"@turf/line-intersect\";\nimport { flattenEach } from \"@turf/meta\";\nimport { polygonToLine } from \"@turf/polygon-to-line\";\nfunction booleanDisjoint(feature1, feature2, {\n ignoreSelfIntersections = true\n} = { ignoreSelfIntersections: true }) {\n let bool = true;\n flattenEach(feature1, (flatten1) => {\n flattenEach(feature2, (flatten2) => {\n if (bool === false) {\n return false;\n }\n bool = disjoint(\n flatten1.geometry,\n flatten2.geometry,\n ignoreSelfIntersections\n );\n });\n });\n return bool;\n}\nfunction disjoint(geom1, geom2, ignoreSelfIntersections) {\n switch (geom1.type) {\n case \"Point\":\n switch (geom2.type) {\n case \"Point\":\n return !compareCoords(geom1.coordinates, geom2.coordinates);\n case \"LineString\":\n return !isPointOnLine(geom2, geom1);\n case \"Polygon\":\n return !booleanPointInPolygon(geom1, geom2);\n }\n break;\n case \"LineString\":\n switch (geom2.type) {\n case \"Point\":\n return !isPointOnLine(geom1, geom2);\n case \"LineString\":\n return !isLineOnLine(geom1, geom2, ignoreSelfIntersections);\n case \"Polygon\":\n return !isLineInPoly(geom2, geom1, ignoreSelfIntersections);\n }\n break;\n case \"Polygon\":\n switch (geom2.type) {\n case \"Point\":\n return !booleanPointInPolygon(geom2, geom1);\n case \"LineString\":\n return !isLineInPoly(geom1, geom2, ignoreSelfIntersections);\n case \"Polygon\":\n return !isPolyInPoly(geom2, geom1, ignoreSelfIntersections);\n }\n }\n return false;\n}\nfunction isPointOnLine(lineString, pt) {\n for (let i = 0; i < lineString.coordinates.length - 1; i++) {\n if (isPointOnLineSegment(\n lineString.coordinates[i],\n lineString.coordinates[i + 1],\n pt.coordinates\n )) {\n return true;\n }\n }\n return false;\n}\nfunction isLineOnLine(lineString1, lineString2, ignoreSelfIntersections) {\n const doLinesIntersect = lineIntersect(lineString1, lineString2, {\n ignoreSelfIntersections\n });\n if (doLinesIntersect.features.length > 0) {\n return true;\n }\n return false;\n}\nfunction isLineInPoly(polygon, lineString, ignoreSelfIntersections) {\n for (const coord of lineString.coordinates) {\n if (booleanPointInPolygon(coord, polygon)) {\n return true;\n }\n }\n const doLinesIntersect = lineIntersect(lineString, polygonToLine(polygon), {\n ignoreSelfIntersections\n });\n if (doLinesIntersect.features.length > 0) {\n return true;\n }\n return false;\n}\nfunction isPolyInPoly(feature1, feature2, ignoreSelfIntersections) {\n for (const coord1 of feature1.coordinates[0]) {\n if (booleanPointInPolygon(coord1, feature2)) {\n return true;\n }\n }\n for (const coord2 of feature2.coordinates[0]) {\n if (booleanPointInPolygon(coord2, feature1)) {\n return true;\n }\n }\n const doLinesIntersect = lineIntersect(\n polygonToLine(feature1),\n polygonToLine(feature2),\n { ignoreSelfIntersections }\n );\n if (doLinesIntersect.features.length > 0) {\n return true;\n }\n return false;\n}\nfunction isPointOnLineSegment(lineSegmentStart, lineSegmentEnd, pt) {\n const dxc = pt[0] - lineSegmentStart[0];\n const dyc = pt[1] - lineSegmentStart[1];\n const dxl = lineSegmentEnd[0] - lineSegmentStart[0];\n const dyl = lineSegmentEnd[1] - lineSegmentStart[1];\n const cross = dxc * dyl - dyc * dxl;\n if (cross !== 0) {\n return false;\n }\n if (Math.abs(dxl) >= Math.abs(dyl)) {\n if (dxl > 0) {\n return lineSegmentStart[0] <= pt[0] && pt[0] <= lineSegmentEnd[0];\n } else {\n return lineSegmentEnd[0] <= pt[0] && pt[0] <= lineSegmentStart[0];\n }\n } else if (dyl > 0) {\n return lineSegmentStart[1] <= pt[1] && pt[1] <= lineSegmentEnd[1];\n } else {\n return lineSegmentEnd[1] <= pt[1] && pt[1] <= lineSegmentStart[1];\n }\n}\nfunction compareCoords(pair1, pair2) {\n return pair1[0] === pair2[0] && pair1[1] === pair2[1];\n}\nvar index_default = booleanDisjoint;\nexport {\n booleanDisjoint,\n index_default as default\n};\n//# sourceMappingURL=index.js.map","var __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// index.ts\nvar _GeojsonEquality = class _GeojsonEquality {\n constructor(opts) {\n this.direction = false;\n this.compareProperties = true;\n var _a, _b, _c;\n this.precision = 10 ** -((_a = opts == null ? void 0 : opts.precision) != null ? _a : 17);\n this.direction = (_b = opts == null ? void 0 : opts.direction) != null ? _b : false;\n this.compareProperties = (_c = opts == null ? void 0 : opts.compareProperties) != null ? _c : true;\n }\n compare(g1, g2) {\n if (g1.type !== g2.type) {\n return false;\n }\n if (!sameLength(g1, g2)) {\n return false;\n }\n switch (g1.type) {\n case \"Point\":\n return this.compareCoord(g1.coordinates, g2.coordinates);\n case \"LineString\":\n return this.compareLine(g1.coordinates, g2.coordinates);\n case \"Polygon\":\n return this.comparePolygon(g1, g2);\n case \"GeometryCollection\":\n return this.compareGeometryCollection(g1, g2);\n case \"Feature\":\n return this.compareFeature(g1, g2);\n case \"FeatureCollection\":\n return this.compareFeatureCollection(g1, g2);\n default:\n if (g1.type.startsWith(\"Multi\")) {\n const g1s = explode(g1);\n const g2s = explode(\n g2\n );\n return g1s.every(\n (g1part) => g2s.some((g2part) => this.compare(g1part, g2part))\n );\n }\n }\n return false;\n }\n compareCoord(c1, c2) {\n return c1.length === c2.length && c1.every((c, i) => Math.abs(c - c2[i]) < this.precision);\n }\n compareLine(path1, path2, ind = 0, isPoly = false) {\n if (!sameLength(path1, path2)) {\n return false;\n }\n const p1 = path1;\n let p2 = path2;\n if (isPoly && !this.compareCoord(p1[0], p2[0])) {\n const startIndex = this.fixStartIndex(p2, p1);\n if (!startIndex) {\n return false;\n } else {\n p2 = startIndex;\n }\n }\n const sameDirection = this.compareCoord(p1[ind], p2[ind]);\n if (this.direction || sameDirection) {\n return this.comparePath(p1, p2);\n } else {\n if (this.compareCoord(p1[ind], p2[p2.length - (1 + ind)])) {\n return this.comparePath(p1.slice().reverse(), p2);\n }\n return false;\n }\n }\n fixStartIndex(sourcePath, targetPath) {\n let correctPath, ind = -1;\n for (let i = 0; i < sourcePath.length; i++) {\n if (this.compareCoord(sourcePath[i], targetPath[0])) {\n ind = i;\n break;\n }\n }\n if (ind >= 0) {\n correctPath = [].concat(\n sourcePath.slice(ind, sourcePath.length),\n sourcePath.slice(1, ind + 1)\n );\n }\n return correctPath;\n }\n comparePath(p1, p2) {\n return p1.every((c, i) => this.compareCoord(c, p2[i]));\n }\n comparePolygon(g1, g2) {\n if (this.compareLine(g1.coordinates[0], g2.coordinates[0], 1, true)) {\n const holes1 = g1.coordinates.slice(1, g1.coordinates.length);\n const holes2 = g2.coordinates.slice(1, g2.coordinates.length);\n return holes1.every(\n (h1) => holes2.some((h2) => this.compareLine(h1, h2, 1, true))\n );\n }\n return false;\n }\n compareGeometryCollection(g1, g2) {\n return sameLength(g1.geometries, g2.geometries) && this.compareBBox(g1, g2) && g1.geometries.every((g, i) => this.compare(g, g2.geometries[i]));\n }\n compareFeature(g1, g2) {\n return g1.id === g2.id && (this.compareProperties ? equal(g1.properties, g2.properties) : true) && this.compareBBox(g1, g2) && this.compare(g1.geometry, g2.geometry);\n }\n compareFeatureCollection(g1, g2) {\n return sameLength(g1.features, g2.features) && this.compareBBox(g1, g2) && g1.features.every((f, i) => this.compare(f, g2.features[i]));\n }\n compareBBox(g1, g2) {\n return Boolean(!g1.bbox && !g2.bbox) || (g1.bbox && g2.bbox ? this.compareCoord(g1.bbox, g2.bbox) : false);\n }\n};\n__name(_GeojsonEquality, \"GeojsonEquality\");\nvar GeojsonEquality = _GeojsonEquality;\nfunction sameLength(g1, g2) {\n return g1.coordinates ? g1.coordinates.length === g2.coordinates.length : g1.length === g2.length;\n}\n__name(sameLength, \"sameLength\");\nfunction explode(g) {\n return g.coordinates.map((part) => ({\n type: g.type.replace(\"Multi\", \"\"),\n coordinates: part\n }));\n}\n__name(explode, \"explode\");\nfunction geojsonEquality(g1, g2, opts) {\n const eq = new GeojsonEquality(opts);\n return eq.compare(g1, g2);\n}\n__name(geojsonEquality, \"geojsonEquality\");\nfunction equal(object1, object2) {\n if (object1 === null && object2 === null) {\n return true;\n }\n if (object1 === null || object2 === null) {\n return false;\n }\n const objKeys1 = Object.keys(object1);\n const objKeys2 = Object.keys(object2);\n if (objKeys1.length !== objKeys2.length) return false;\n for (var key of objKeys1) {\n const value1 = object1[key];\n const value2 = object2[key];\n const isObjects = isObject(value1) && isObject(value2);\n if (isObjects && !equal(value1, value2) || !isObjects && value1 !== value2) {\n return false;\n }\n }\n return true;\n}\n__name(equal, \"equal\");\nvar isObject = /* @__PURE__ */ __name((object) => {\n return object != null && typeof object === \"object\";\n}, \"isObject\");\nvar geojson_equality_ts_default = GeojsonEquality;\nexport {\n GeojsonEquality,\n geojson_equality_ts_default as default,\n geojsonEquality\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport { feature } from \"@turf/helpers\";\nimport { getCoords, getType } from \"@turf/invariant\";\nimport { booleanPointOnLine } from \"@turf/boolean-point-on-line\";\nimport { lineString } from \"@turf/helpers\";\nfunction cleanCoords(geojson, options = {}) {\n var mutate = typeof options === \"object\" ? options.mutate : options;\n if (!geojson) throw new Error(\"geojson is required\");\n var type = getType(geojson);\n var newCoords = [];\n switch (type) {\n case \"LineString\":\n newCoords = cleanLine(geojson, type);\n break;\n case \"MultiLineString\":\n case \"Polygon\":\n getCoords(geojson).forEach(function(line) {\n newCoords.push(cleanLine(line, type));\n });\n break;\n case \"MultiPolygon\":\n getCoords(geojson).forEach(function(polygons) {\n var polyPoints = [];\n polygons.forEach(function(ring) {\n polyPoints.push(cleanLine(ring, type));\n });\n newCoords.push(polyPoints);\n });\n break;\n case \"Point\":\n return geojson;\n case \"MultiPoint\":\n var existing = {};\n getCoords(geojson).forEach(function(coord) {\n var key = coord.join(\"-\");\n if (!Object.prototype.hasOwnProperty.call(existing, key)) {\n newCoords.push(coord);\n existing[key] = true;\n }\n });\n break;\n default:\n throw new Error(type + \" geometry not supported\");\n }\n if (geojson.coordinates) {\n if (mutate === true) {\n geojson.coordinates = newCoords;\n return geojson;\n }\n return { type, coordinates: newCoords };\n } else {\n if (mutate === true) {\n geojson.geometry.coordinates = newCoords;\n return geojson;\n }\n return feature({ type, coordinates: newCoords }, geojson.properties, {\n bbox: geojson.bbox,\n id: geojson.id\n });\n }\n}\nfunction cleanLine(line, type) {\n const points = getCoords(line);\n if (points.length === 2 && !equals(points[0], points[1])) return points;\n const newPoints = [];\n let a = 0, b = 1, c = 2;\n newPoints.push(points[a]);\n while (c < points.length) {\n if (booleanPointOnLine(points[b], lineString([points[a], points[c]]))) {\n b = c;\n } else {\n newPoints.push(points[b]);\n a = b;\n b++;\n c = b;\n }\n c++;\n }\n newPoints.push(points[b]);\n if (type === \"Polygon\" || type === \"MultiPolygon\") {\n if (booleanPointOnLine(\n newPoints[0],\n lineString([newPoints[1], newPoints[newPoints.length - 2]])\n )) {\n newPoints.shift();\n newPoints.pop();\n newPoints.push(newPoints[0]);\n }\n if (newPoints.length < 4) {\n throw new Error(\"invalid polygon, fewer than 4 points\");\n }\n if (!equals(newPoints[0], newPoints[newPoints.length - 1])) {\n throw new Error(\"invalid polygon, first and last points not equal\");\n }\n }\n return newPoints;\n}\nfunction equals(pt1, pt2) {\n return pt1[0] === pt2[0] && pt1[1] === pt2[1];\n}\nvar index_default = cleanCoords;\nexport {\n cleanCoords,\n index_default as default\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport { booleanDisjoint } from \"@turf/boolean-disjoint\";\nimport { flattenEach } from \"@turf/meta\";\nfunction booleanIntersects(feature1, feature2, {\n ignoreSelfIntersections = true\n} = {}) {\n let bool = false;\n flattenEach(feature1, (flatten1) => {\n flattenEach(feature2, (flatten2) => {\n if (bool === true) {\n return true;\n }\n bool = !booleanDisjoint(flatten1.geometry, flatten2.geometry, {\n ignoreSelfIntersections\n });\n });\n });\n return bool;\n}\nvar index_default = booleanIntersects;\nexport {\n booleanIntersects,\n index_default as default\n};\n//# sourceMappingURL=index.js.map","\nexport default function quickselect(arr, k, left, right, compare) {\n quickselectStep(arr, k, left || 0, right || (arr.length - 1), compare || defaultCompare);\n}\n\nfunction quickselectStep(arr, k, left, right, compare) {\n\n while (right > left) {\n if (right - left > 600) {\n var n = right - left + 1;\n var m = k - left + 1;\n var z = Math.log(n);\n var s = 0.5 * Math.exp(2 * z / 3);\n var sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n var newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n var newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n quickselectStep(arr, k, newLeft, newRight, compare);\n }\n\n var t = arr[k];\n var i = left;\n var j = right;\n\n swap(arr, left, k);\n if (compare(arr[right], t) > 0) swap(arr, left, right);\n\n while (i < j) {\n swap(arr, i, j);\n i++;\n j--;\n while (compare(arr[i], t) < 0) i++;\n while (compare(arr[j], t) > 0) j--;\n }\n\n if (compare(arr[left], t) === 0) swap(arr, left, j);\n else {\n j++;\n swap(arr, j, right);\n }\n\n if (j <= k) left = j + 1;\n if (k <= j) right = j - 1;\n }\n}\n\nfunction swap(arr, i, j) {\n var tmp = arr[i];\n arr[i] = arr[j];\n arr[j] = tmp;\n}\n\nfunction defaultCompare(a, b) {\n return a < b ? -1 : a > b ? 1 : 0;\n}\n","import quickselect from 'quickselect';\n\nexport default class RBush {\n constructor(maxEntries = 9) {\n // max entries in a node is 9 by default; min node fill is 40% for best performance\n this._maxEntries = Math.max(4, maxEntries);\n this._minEntries = Math.max(2, Math.ceil(this._maxEntries * 0.4));\n this.clear();\n }\n\n all() {\n return this._all(this.data, []);\n }\n\n search(bbox) {\n let node = this.data;\n const result = [];\n\n if (!intersects(bbox, node)) return result;\n\n const toBBox = this.toBBox;\n const nodesToSearch = [];\n\n while (node) {\n for (let i = 0; i < node.children.length; i++) {\n const child = node.children[i];\n const childBBox = node.leaf ? toBBox(child) : child;\n\n if (intersects(bbox, childBBox)) {\n if (node.leaf) result.push(child);\n else if (contains(bbox, childBBox)) this._all(child, result);\n else nodesToSearch.push(child);\n }\n }\n node = nodesToSearch.pop();\n }\n\n return result;\n }\n\n collides(bbox) {\n let node = this.data;\n\n if (!intersects(bbox, node)) return false;\n\n const nodesToSearch = [];\n while (node) {\n for (let i = 0; i < node.children.length; i++) {\n const child = node.children[i];\n const childBBox = node.leaf ? this.toBBox(child) : child;\n\n if (intersects(bbox, childBBox)) {\n if (node.leaf || contains(bbox, childBBox)) return true;\n nodesToSearch.push(child);\n }\n }\n node = nodesToSearch.pop();\n }\n\n return false;\n }\n\n load(data) {\n if (!(data && data.length)) return this;\n\n if (data.length < this._minEntries) {\n for (let i = 0; i < data.length; i++) {\n this.insert(data[i]);\n }\n return this;\n }\n\n // recursively build the tree with the given data from scratch using OMT algorithm\n let node = this._build(data.slice(), 0, data.length - 1, 0);\n\n if (!this.data.children.length) {\n // save as is if tree is empty\n this.data = node;\n\n } else if (this.data.height === node.height) {\n // split root if trees have the same height\n this._splitRoot(this.data, node);\n\n } else {\n if (this.data.height < node.height) {\n // swap trees if inserted one is bigger\n const tmpNode = this.data;\n this.data = node;\n node = tmpNode;\n }\n\n // insert the small tree into the large tree at appropriate level\n this._insert(node, this.data.height - node.height - 1, true);\n }\n\n return this;\n }\n\n insert(item) {\n if (item) this._insert(item, this.data.height - 1);\n return this;\n }\n\n clear() {\n this.data = createNode([]);\n return this;\n }\n\n remove(item, equalsFn) {\n if (!item) return this;\n\n let node = this.data;\n const bbox = this.toBBox(item);\n const path = [];\n const indexes = [];\n let i, parent, goingUp;\n\n // depth-first iterative tree traversal\n while (node || path.length) {\n\n if (!node) { // go up\n node = path.pop();\n parent = path[path.length - 1];\n i = indexes.pop();\n goingUp = true;\n }\n\n if (node.leaf) { // check current node\n const index = findItem(item, node.children, equalsFn);\n\n if (index !== -1) {\n // item found, remove the item and condense tree upwards\n node.children.splice(index, 1);\n path.push(node);\n this._condense(path);\n return this;\n }\n }\n\n if (!goingUp && !node.leaf && contains(node, bbox)) { // go down\n path.push(node);\n indexes.push(i);\n i = 0;\n parent = node;\n node = node.children[0];\n\n } else if (parent) { // go right\n i++;\n node = parent.children[i];\n goingUp = false;\n\n } else node = null; // nothing found\n }\n\n return this;\n }\n\n toBBox(item) { return item; }\n\n compareMinX(a, b) { return a.minX - b.minX; }\n compareMinY(a, b) { return a.minY - b.minY; }\n\n toJSON() { return this.data; }\n\n fromJSON(data) {\n this.data = data;\n return this;\n }\n\n _all(node, result) {\n const nodesToSearch = [];\n while (node) {\n if (node.leaf) result.push(...node.children);\n else nodesToSearch.push(...node.children);\n\n node = nodesToSearch.pop();\n }\n return result;\n }\n\n _build(items, left, right, height) {\n\n const N = right - left + 1;\n let M = this._maxEntries;\n let node;\n\n if (N <= M) {\n // reached leaf level; return leaf\n node = createNode(items.slice(left, right + 1));\n calcBBox(node, this.toBBox);\n return node;\n }\n\n if (!height) {\n // target height of the bulk-loaded tree\n height = Math.ceil(Math.log(N) / Math.log(M));\n\n // target number of root entries to maximize storage utilization\n M = Math.ceil(N / Math.pow(M, height - 1));\n }\n\n node = createNode([]);\n node.leaf = false;\n node.height = height;\n\n // split the items into M mostly square tiles\n\n const N2 = Math.ceil(N / M);\n const N1 = N2 * Math.ceil(Math.sqrt(M));\n\n multiSelect(items, left, right, N1, this.compareMinX);\n\n for (let i = left; i <= right; i += N1) {\n\n const right2 = Math.min(i + N1 - 1, right);\n\n multiSelect(items, i, right2, N2, this.compareMinY);\n\n for (let j = i; j <= right2; j += N2) {\n\n const right3 = Math.min(j + N2 - 1, right2);\n\n // pack each entry recursively\n node.children.push(this._build(items, j, right3, height - 1));\n }\n }\n\n calcBBox(node, this.toBBox);\n\n return node;\n }\n\n _chooseSubtree(bbox, node, level, path) {\n while (true) {\n path.push(node);\n\n if (node.leaf || path.length - 1 === level) break;\n\n let minArea = Infinity;\n let minEnlargement = Infinity;\n let targetNode;\n\n for (let i = 0; i < node.children.length; i++) {\n const child = node.children[i];\n const area = bboxArea(child);\n const enlargement = enlargedArea(bbox, child) - area;\n\n // choose entry with the least area enlargement\n if (enlargement < minEnlargement) {\n minEnlargement = enlargement;\n minArea = area < minArea ? area : minArea;\n targetNode = child;\n\n } else if (enlargement === minEnlargement) {\n // otherwise choose one with the smallest area\n if (area < minArea) {\n minArea = area;\n targetNode = child;\n }\n }\n }\n\n node = targetNode || node.children[0];\n }\n\n return node;\n }\n\n _insert(item, level, isNode) {\n const bbox = isNode ? item : this.toBBox(item);\n const insertPath = [];\n\n // find the best node for accommodating the item, saving all nodes along the path too\n const node = this._chooseSubtree(bbox, this.data, level, insertPath);\n\n // put the item into the node\n node.children.push(item);\n extend(node, bbox);\n\n // split on node overflow; propagate upwards if necessary\n while (level >= 0) {\n if (insertPath[level].children.length > this._maxEntries) {\n this._split(insertPath, level);\n level--;\n } else break;\n }\n\n // adjust bboxes along the insertion path\n this._adjustParentBBoxes(bbox, insertPath, level);\n }\n\n // split overflowed node into two\n _split(insertPath, level) {\n const node = insertPath[level];\n const M = node.children.length;\n const m = this._minEntries;\n\n this._chooseSplitAxis(node, m, M);\n\n const splitIndex = this._chooseSplitIndex(node, m, M);\n\n const newNode = createNode(node.children.splice(splitIndex, node.children.length - splitIndex));\n newNode.height = node.height;\n newNode.leaf = node.leaf;\n\n calcBBox(node, this.toBBox);\n calcBBox(newNode, this.toBBox);\n\n if (level) insertPath[level - 1].children.push(newNode);\n else this._splitRoot(node, newNode);\n }\n\n _splitRoot(node, newNode) {\n // split root node\n this.data = createNode([node, newNode]);\n this.data.height = node.height + 1;\n this.data.leaf = false;\n calcBBox(this.data, this.toBBox);\n }\n\n _chooseSplitIndex(node, m, M) {\n let index;\n let minOverlap = Infinity;\n let minArea = Infinity;\n\n for (let i = m; i <= M - m; i++) {\n const bbox1 = distBBox(node, 0, i, this.toBBox);\n const bbox2 = distBBox(node, i, M, this.toBBox);\n\n const overlap = intersectionArea(bbox1, bbox2);\n const area = bboxArea(bbox1) + bboxArea(bbox2);\n\n // choose distribution with minimum overlap\n if (overlap < minOverlap) {\n minOverlap = overlap;\n index = i;\n\n minArea = area < minArea ? area : minArea;\n\n } else if (overlap === minOverlap) {\n // otherwise choose distribution with minimum area\n if (area < minArea) {\n minArea = area;\n index = i;\n }\n }\n }\n\n return index || M - m;\n }\n\n // sorts node children by the best axis for split\n _chooseSplitAxis(node, m, M) {\n const compareMinX = node.leaf ? this.compareMinX : compareNodeMinX;\n const compareMinY = node.leaf ? this.compareMinY : compareNodeMinY;\n const xMargin = this._allDistMargin(node, m, M, compareMinX);\n const yMargin = this._allDistMargin(node, m, M, compareMinY);\n\n // if total distributions margin value is minimal for x, sort by minX,\n // otherwise it's already sorted by minY\n if (xMargin < yMargin) node.children.sort(compareMinX);\n }\n\n // total margin of all possible split distributions where each node is at least m full\n _allDistMargin(node, m, M, compare) {\n node.children.sort(compare);\n\n const toBBox = this.toBBox;\n const leftBBox = distBBox(node, 0, m, toBBox);\n const rightBBox = distBBox(node, M - m, M, toBBox);\n let margin = bboxMargin(leftBBox) + bboxMargin(rightBBox);\n\n for (let i = m; i < M - m; i++) {\n const child = node.children[i];\n extend(leftBBox, node.leaf ? toBBox(child) : child);\n margin += bboxMargin(leftBBox);\n }\n\n for (let i = M - m - 1; i >= m; i--) {\n const child = node.children[i];\n extend(rightBBox, node.leaf ? toBBox(child) : child);\n margin += bboxMargin(rightBBox);\n }\n\n return margin;\n }\n\n _adjustParentBBoxes(bbox, path, level) {\n // adjust bboxes along the given tree path\n for (let i = level; i >= 0; i--) {\n extend(path[i], bbox);\n }\n }\n\n _condense(path) {\n // go through the path, removing empty nodes and updating bboxes\n for (let i = path.length - 1, siblings; i >= 0; i--) {\n if (path[i].children.length === 0) {\n if (i > 0) {\n siblings = path[i - 1].children;\n siblings.splice(siblings.indexOf(path[i]), 1);\n\n } else this.clear();\n\n } else calcBBox(path[i], this.toBBox);\n }\n }\n}\n\nfunction findItem(item, items, equalsFn) {\n if (!equalsFn) return items.indexOf(item);\n\n for (let i = 0; i < items.length; i++) {\n if (equalsFn(item, items[i])) return i;\n }\n return -1;\n}\n\n// calculate node's bbox from bboxes of its children\nfunction calcBBox(node, toBBox) {\n distBBox(node, 0, node.children.length, toBBox, node);\n}\n\n// min bounding rectangle of node children from k to p-1\nfunction distBBox(node, k, p, toBBox, destNode) {\n if (!destNode) destNode = createNode(null);\n destNode.minX = Infinity;\n destNode.minY = Infinity;\n destNode.maxX = -Infinity;\n destNode.maxY = -Infinity;\n\n for (let i = k; i < p; i++) {\n const child = node.children[i];\n extend(destNode, node.leaf ? toBBox(child) : child);\n }\n\n return destNode;\n}\n\nfunction extend(a, b) {\n a.minX = Math.min(a.minX, b.minX);\n a.minY = Math.min(a.minY, b.minY);\n a.maxX = Math.max(a.maxX, b.maxX);\n a.maxY = Math.max(a.maxY, b.maxY);\n return a;\n}\n\nfunction compareNodeMinX(a, b) { return a.minX - b.minX; }\nfunction compareNodeMinY(a, b) { return a.minY - b.minY; }\n\nfunction bboxArea(a) { return (a.maxX - a.minX) * (a.maxY - a.minY); }\nfunction bboxMargin(a) { return (a.maxX - a.minX) + (a.maxY - a.minY); }\n\nfunction enlargedArea(a, b) {\n return (Math.max(b.maxX, a.maxX) - Math.min(b.minX, a.minX)) *\n (Math.max(b.maxY, a.maxY) - Math.min(b.minY, a.minY));\n}\n\nfunction intersectionArea(a, b) {\n const minX = Math.max(a.minX, b.minX);\n const minY = Math.max(a.minY, b.minY);\n const maxX = Math.min(a.maxX, b.maxX);\n const maxY = Math.min(a.maxY, b.maxY);\n\n return Math.max(0, maxX - minX) *\n Math.max(0, maxY - minY);\n}\n\nfunction contains(a, b) {\n return a.minX <= b.minX &&\n a.minY <= b.minY &&\n b.maxX <= a.maxX &&\n b.maxY <= a.maxY;\n}\n\nfunction intersects(a, b) {\n return b.minX <= a.maxX &&\n b.minY <= a.maxY &&\n b.maxX >= a.minX &&\n b.maxY >= a.minY;\n}\n\nfunction createNode(children) {\n return {\n children,\n height: 1,\n leaf: true,\n minX: Infinity,\n minY: Infinity,\n maxX: -Infinity,\n maxY: -Infinity\n };\n}\n\n// sort an array so that items come in groups of n unsorted items, with groups sorted between each other;\n// combines selection algorithm with binary divide & conquer approach\n\nfunction multiSelect(arr, left, right, n, compare) {\n const stack = [left, right];\n\n while (stack.length) {\n right = stack.pop();\n left = stack.pop();\n\n if (right - left <= n) continue;\n\n const mid = left + Math.ceil((right - left) / n / 2) * n;\n quickselect(arr, mid, left, right, compare);\n\n stack.push(left, mid, mid, right);\n }\n}\n","// index.js\nimport rbush from \"rbush\";\nimport { featureCollection } from \"@turf/helpers\";\nimport { featureEach } from \"@turf/meta\";\nimport { bbox as turfBBox } from \"@turf/bbox\";\nfunction geojsonRbush(maxEntries) {\n var tree = new rbush(maxEntries);\n tree.insert = function(feature) {\n if (feature.type !== \"Feature\") throw new Error(\"invalid feature\");\n feature.bbox = feature.bbox ? feature.bbox : turfBBox(feature);\n return rbush.prototype.insert.call(this, feature);\n };\n tree.load = function(features) {\n var load = [];\n if (Array.isArray(features)) {\n features.forEach(function(feature) {\n if (feature.type !== \"Feature\") throw new Error(\"invalid features\");\n feature.bbox = feature.bbox ? feature.bbox : turfBBox(feature);\n load.push(feature);\n });\n } else {\n featureEach(features, function(feature) {\n if (feature.type !== \"Feature\") throw new Error(\"invalid features\");\n feature.bbox = feature.bbox ? feature.bbox : turfBBox(feature);\n load.push(feature);\n });\n }\n return rbush.prototype.load.call(this, load);\n };\n tree.remove = function(feature, equals) {\n if (feature.type !== \"Feature\") throw new Error(\"invalid feature\");\n feature.bbox = feature.bbox ? feature.bbox : turfBBox(feature);\n return rbush.prototype.remove.call(this, feature, equals);\n };\n tree.clear = function() {\n return rbush.prototype.clear.call(this);\n };\n tree.search = function(geojson) {\n var features = rbush.prototype.search.call(this, this.toBBox(geojson));\n return featureCollection(features);\n };\n tree.collides = function(geojson) {\n return rbush.prototype.collides.call(this, this.toBBox(geojson));\n };\n tree.all = function() {\n var features = rbush.prototype.all.call(this);\n return featureCollection(features);\n };\n tree.toJSON = function() {\n return rbush.prototype.toJSON.call(this);\n };\n tree.fromJSON = function(json) {\n return rbush.prototype.fromJSON.call(this, json);\n };\n tree.toBBox = function(geojson) {\n var bbox;\n if (geojson.bbox) bbox = geojson.bbox;\n else if (Array.isArray(geojson) && geojson.length === 4) bbox = geojson;\n else if (Array.isArray(geojson) && geojson.length === 6)\n bbox = [geojson[0], geojson[1], geojson[3], geojson[4]];\n else if (geojson.type === \"Feature\") bbox = turfBBox(geojson);\n else if (geojson.type === \"FeatureCollection\") bbox = turfBBox(geojson);\n else throw new Error(\"invalid geojson\");\n return {\n minX: bbox[0],\n minY: bbox[1],\n maxX: bbox[2],\n maxY: bbox[3]\n };\n };\n return tree;\n}\nvar index_default = geojsonRbush;\nexport {\n index_default as default,\n geojsonRbush\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport { featureCollection, lineString } from \"@turf/helpers\";\nimport { getCoords } from \"@turf/invariant\";\nimport { flattenEach } from \"@turf/meta\";\nfunction lineSegment(geojson) {\n if (!geojson) {\n throw new Error(\"geojson is required\");\n }\n const results = [];\n flattenEach(geojson, (feature) => {\n lineSegmentFeature(feature, results);\n });\n return featureCollection(results);\n}\nfunction lineSegmentFeature(geojson, results) {\n let coords = [];\n const geometry = geojson.geometry;\n if (geometry !== null) {\n switch (geometry.type) {\n case \"Polygon\":\n coords = getCoords(geometry);\n break;\n case \"LineString\":\n coords = [getCoords(geometry)];\n }\n coords.forEach((coord) => {\n const segments = createSegments(coord, geojson.properties);\n segments.forEach((segment) => {\n segment.id = results.length;\n results.push(segment);\n });\n });\n }\n}\nfunction createSegments(coords, properties) {\n const segments = [];\n coords.reduce((previousCoords, currentCoords) => {\n const segment = lineString([previousCoords, currentCoords], properties);\n segment.bbox = bbox(previousCoords, currentCoords);\n segments.push(segment);\n return currentCoords;\n });\n return segments;\n}\nfunction bbox(coords1, coords2) {\n const x1 = coords1[0];\n const y1 = coords1[1];\n const x2 = coords2[0];\n const y2 = coords2[1];\n const west = x1 < x2 ? x1 : x2;\n const south = y1 < y2 ? y1 : y2;\n const east = x1 > x2 ? x1 : x2;\n const north = y1 > y2 ? y1 : y2;\n return [west, south, east, north];\n}\nvar index_default = lineSegment;\nexport {\n index_default as default,\n lineSegment\n};\n//# sourceMappingURL=index.js.map","var __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\n\n// index.ts\nimport { distance } from \"@turf/distance\";\nimport { flattenEach } from \"@turf/meta\";\nimport {\n point,\n degreesToRadians,\n radiansToDegrees\n} from \"@turf/helpers\";\nimport { getCoord, getCoords } from \"@turf/invariant\";\nfunction nearestPointOnLine(lines, pt, options = {}) {\n if (!lines || !pt) {\n throw new Error(\"lines and pt are required arguments\");\n }\n const ptPos = getCoord(pt);\n let closestPt = point([Infinity, Infinity], {\n dist: Infinity,\n index: -1,\n multiFeatureIndex: -1,\n location: -1\n });\n let length = 0;\n flattenEach(\n lines,\n function(line, _featureIndex, multiFeatureIndex) {\n const coords = getCoords(line);\n for (let i = 0; i < coords.length - 1; i++) {\n const start = point(coords[i]);\n const startPos = getCoord(start);\n const stop = point(coords[i + 1]);\n const stopPos = getCoord(stop);\n const sectionLength = distance(start, stop, options);\n let intersectPos;\n let wasEnd;\n if (stopPos[0] === ptPos[0] && stopPos[1] === ptPos[1]) {\n [intersectPos, wasEnd] = [stopPos, true];\n } else if (startPos[0] === ptPos[0] && startPos[1] === ptPos[1]) {\n [intersectPos, wasEnd] = [startPos, false];\n } else {\n [intersectPos, wasEnd] = nearestPointOnSegment(\n startPos,\n stopPos,\n ptPos\n );\n }\n const intersectPt = point(intersectPos, {\n dist: distance(pt, intersectPos, options),\n multiFeatureIndex,\n location: length + distance(start, intersectPos, options)\n });\n if (intersectPt.properties.dist < closestPt.properties.dist) {\n closestPt = __spreadProps(__spreadValues({}, intersectPt), {\n properties: __spreadProps(__spreadValues({}, intersectPt.properties), {\n // Legacy behaviour where index progresses to next segment # if we\n // went with the end point this iteration.\n index: wasEnd ? i + 1 : i\n })\n });\n }\n length += sectionLength;\n }\n }\n );\n return closestPt;\n}\nfunction dot(v1, v2) {\n const [v1x, v1y, v1z] = v1;\n const [v2x, v2y, v2z] = v2;\n return v1x * v2x + v1y * v2y + v1z * v2z;\n}\nfunction cross(v1, v2) {\n const [v1x, v1y, v1z] = v1;\n const [v2x, v2y, v2z] = v2;\n return [v1y * v2z - v1z * v2y, v1z * v2x - v1x * v2z, v1x * v2y - v1y * v2x];\n}\nfunction magnitude(v) {\n return Math.sqrt(Math.pow(v[0], 2) + Math.pow(v[1], 2) + Math.pow(v[2], 2));\n}\nfunction normalize(v) {\n const mag = magnitude(v);\n return [v[0] / mag, v[1] / mag, v[2] / mag];\n}\nfunction lngLatToVector(a) {\n const lat = degreesToRadians(a[1]);\n const lng = degreesToRadians(a[0]);\n return [\n Math.cos(lat) * Math.cos(lng),\n Math.cos(lat) * Math.sin(lng),\n Math.sin(lat)\n ];\n}\nfunction vectorToLngLat(v) {\n const [x, y, z] = v;\n const zClamp = Math.min(Math.max(z, -1), 1);\n const lat = radiansToDegrees(Math.asin(zClamp));\n const lng = radiansToDegrees(Math.atan2(y, x));\n return [lng, lat];\n}\nfunction nearestPointOnSegment(posA, posB, posC) {\n const A = lngLatToVector(posA);\n const B = lngLatToVector(posB);\n const C = lngLatToVector(posC);\n const segmentAxis = cross(A, B);\n if (segmentAxis[0] === 0 && segmentAxis[1] === 0 && segmentAxis[2] === 0) {\n if (dot(A, B) > 0) {\n return [[...posB], true];\n } else {\n return [[...posC], false];\n }\n }\n const targetAxis = cross(segmentAxis, C);\n if (targetAxis[0] === 0 && targetAxis[1] === 0 && targetAxis[2] === 0) {\n return [[...posB], true];\n }\n const intersectionAxis = cross(targetAxis, segmentAxis);\n const I1 = normalize(intersectionAxis);\n const I2 = [-I1[0], -I1[1], -I1[2]];\n const I = dot(C, I1) > dot(C, I2) ? I1 : I2;\n const segmentAxisNorm = normalize(segmentAxis);\n const cmpAI = dot(cross(A, I), segmentAxisNorm);\n const cmpIB = dot(cross(I, B), segmentAxisNorm);\n if (cmpAI >= 0 && cmpIB >= 0) {\n return [vectorToLngLat(I), false];\n }\n if (dot(A, C) > dot(B, C)) {\n return [[...posA], false];\n } else {\n return [[...posB], true];\n }\n}\nvar index_default = nearestPointOnLine;\nexport {\n index_default as default,\n nearestPointOnLine\n};\n//# sourceMappingURL=index.js.map","'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nmodule.exports = function equal(a, b) {\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n for (i = length; i-- !== 0;) {\n var key = keys[i];\n\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n }\n\n // true if both NaN, false otherwise\n return a!==a && b!==b;\n};\n","// index.ts\nimport { geojsonRbush as rbush } from \"@turf/geojson-rbush\";\nimport { lineSegment } from \"@turf/line-segment\";\nimport { nearestPointOnLine } from \"@turf/nearest-point-on-line\";\nimport { booleanPointOnLine } from \"@turf/boolean-point-on-line\";\nimport { getCoords } from \"@turf/invariant\";\nimport { featureEach, segmentEach } from \"@turf/meta\";\nimport { featureCollection, isObject } from \"@turf/helpers\";\nimport equal from \"fast-deep-equal\";\nfunction lineOverlap(line1, line2, options = {}) {\n options = options || {};\n if (!isObject(options)) throw new Error(\"options is invalid\");\n var tolerance = options.tolerance || 0;\n var features = [];\n var tree = rbush();\n const line = lineSegment(line1);\n tree.load(line);\n var overlapSegment;\n let additionalSegments = [];\n segmentEach(line2, function(segment) {\n var doesOverlaps = false;\n if (!segment) {\n return;\n }\n featureEach(tree.search(segment), function(match) {\n if (doesOverlaps === false) {\n var coordsSegment = getCoords(segment).sort();\n var coordsMatch = getCoords(match).sort();\n if (equal(coordsSegment, coordsMatch)) {\n doesOverlaps = true;\n if (overlapSegment) {\n overlapSegment = concatSegment(overlapSegment, segment) || overlapSegment;\n } else overlapSegment = segment;\n } else if (tolerance === 0 ? booleanPointOnLine(coordsSegment[0], match) && booleanPointOnLine(coordsSegment[1], match) : nearestPointOnLine(match, coordsSegment[0]).properties.dist <= tolerance && nearestPointOnLine(match, coordsSegment[1]).properties.dist <= tolerance) {\n doesOverlaps = true;\n if (overlapSegment) {\n overlapSegment = concatSegment(overlapSegment, segment) || overlapSegment;\n } else overlapSegment = segment;\n } else if (tolerance === 0 ? booleanPointOnLine(coordsMatch[0], segment) && booleanPointOnLine(coordsMatch[1], segment) : nearestPointOnLine(segment, coordsMatch[0]).properties.dist <= tolerance && nearestPointOnLine(segment, coordsMatch[1]).properties.dist <= tolerance) {\n if (overlapSegment) {\n const combinedSegment = concatSegment(overlapSegment, match);\n if (combinedSegment) {\n overlapSegment = combinedSegment;\n } else {\n additionalSegments.push(match);\n }\n } else overlapSegment = match;\n }\n }\n });\n if (doesOverlaps === false && overlapSegment) {\n features.push(overlapSegment);\n if (additionalSegments.length) {\n features = features.concat(additionalSegments);\n additionalSegments = [];\n }\n overlapSegment = void 0;\n }\n });\n if (overlapSegment) features.push(overlapSegment);\n return featureCollection(features);\n}\nfunction concatSegment(line, segment) {\n var coords = getCoords(segment);\n var lineCoords = getCoords(line);\n var start = lineCoords[0];\n var end = lineCoords[lineCoords.length - 1];\n var geom = line.geometry.coordinates;\n if (equal(coords[0], start)) geom.unshift(coords[1]);\n else if (equal(coords[0], end)) geom.push(coords[1]);\n else if (equal(coords[1], start)) geom.unshift(coords[0]);\n else if (equal(coords[1], end)) geom.push(coords[0]);\n else return;\n return line;\n}\nvar index_default = lineOverlap;\nexport {\n index_default as default,\n lineOverlap\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport { segmentEach } from \"@turf/meta\";\nimport { getGeom } from \"@turf/invariant\";\nimport { lineOverlap } from \"@turf/line-overlap\";\nimport { lineIntersect } from \"@turf/line-intersect\";\nimport { geojsonEquality } from \"geojson-equality-ts\";\nfunction booleanOverlap(feature1, feature2) {\n const geom1 = getGeom(feature1);\n const geom2 = getGeom(feature2);\n const type1 = geom1.type;\n const type2 = geom2.type;\n if (type1 === \"MultiPoint\" && type2 !== \"MultiPoint\" || (type1 === \"LineString\" || type1 === \"MultiLineString\") && type2 !== \"LineString\" && type2 !== \"MultiLineString\" || (type1 === \"Polygon\" || type1 === \"MultiPolygon\") && type2 !== \"Polygon\" && type2 !== \"MultiPolygon\") {\n throw new Error(\"features must be of the same type\");\n }\n if (type1 === \"Point\") throw new Error(\"Point geometry not supported\");\n if (geojsonEquality(feature1, feature2, { precision: 6 }))\n return false;\n let overlap = 0;\n switch (type1) {\n case \"MultiPoint\":\n for (var i = 0; i < geom1.coordinates.length; i++) {\n for (var j = 0; j < geom2.coordinates.length; j++) {\n var coord1 = geom1.coordinates[i];\n var coord2 = geom2.coordinates[j];\n if (coord1[0] === coord2[0] && coord1[1] === coord2[1]) {\n return true;\n }\n }\n }\n return false;\n case \"LineString\":\n case \"MultiLineString\":\n segmentEach(feature1, (segment1) => {\n segmentEach(feature2, (segment2) => {\n if (lineOverlap(segment1, segment2).features.length) overlap++;\n });\n });\n break;\n case \"Polygon\":\n case \"MultiPolygon\":\n segmentEach(feature1, (segment1) => {\n segmentEach(feature2, (segment2) => {\n if (lineIntersect(segment1, segment2).features.length) overlap++;\n });\n });\n break;\n }\n return overlap > 0;\n}\nvar index_default = booleanOverlap;\nexport {\n booleanOverlap,\n index_default as default\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport { bbox as calcBbox } from \"@turf/bbox\";\nimport { booleanPointOnLine } from \"@turf/boolean-point-on-line\";\nimport { booleanPointInPolygon } from \"@turf/boolean-point-in-polygon\";\nimport { getGeom } from \"@turf/invariant\";\nfunction booleanWithin(feature1, feature2) {\n var geom1 = getGeom(feature1);\n var geom2 = getGeom(feature2);\n var type1 = geom1.type;\n var type2 = geom2.type;\n switch (type1) {\n case \"Point\":\n switch (type2) {\n case \"MultiPoint\":\n return isPointInMultiPoint(geom1, geom2);\n case \"LineString\":\n return booleanPointOnLine(geom1, geom2, { ignoreEndVertices: true });\n case \"Polygon\":\n case \"MultiPolygon\":\n return booleanPointInPolygon(geom1, geom2, { ignoreBoundary: true });\n default:\n throw new Error(\"feature2 \" + type2 + \" geometry not supported\");\n }\n case \"MultiPoint\":\n switch (type2) {\n case \"MultiPoint\":\n return isMultiPointInMultiPoint(geom1, geom2);\n case \"LineString\":\n return isMultiPointOnLine(geom1, geom2);\n case \"Polygon\":\n case \"MultiPolygon\":\n return isMultiPointInPoly(geom1, geom2);\n default:\n throw new Error(\"feature2 \" + type2 + \" geometry not supported\");\n }\n case \"LineString\":\n switch (type2) {\n case \"LineString\":\n return isLineOnLine(geom1, geom2);\n case \"Polygon\":\n case \"MultiPolygon\":\n return isLineInPoly(geom1, geom2);\n default:\n throw new Error(\"feature2 \" + type2 + \" geometry not supported\");\n }\n case \"Polygon\":\n switch (type2) {\n case \"Polygon\":\n case \"MultiPolygon\":\n return isPolyInPoly(geom1, geom2);\n default:\n throw new Error(\"feature2 \" + type2 + \" geometry not supported\");\n }\n default:\n throw new Error(\"feature1 \" + type1 + \" geometry not supported\");\n }\n}\nfunction isPointInMultiPoint(point, multiPoint) {\n var i;\n var output = false;\n for (i = 0; i < multiPoint.coordinates.length; i++) {\n if (compareCoords(multiPoint.coordinates[i], point.coordinates)) {\n output = true;\n break;\n }\n }\n return output;\n}\nfunction isMultiPointInMultiPoint(multiPoint1, multiPoint2) {\n for (var i = 0; i < multiPoint1.coordinates.length; i++) {\n var anyMatch = false;\n for (var i2 = 0; i2 < multiPoint2.coordinates.length; i2++) {\n if (compareCoords(multiPoint1.coordinates[i], multiPoint2.coordinates[i2])) {\n anyMatch = true;\n }\n }\n if (!anyMatch) {\n return false;\n }\n }\n return true;\n}\nfunction isMultiPointOnLine(multiPoint, lineString) {\n var foundInsidePoint = false;\n for (var i = 0; i < multiPoint.coordinates.length; i++) {\n if (!booleanPointOnLine(multiPoint.coordinates[i], lineString)) {\n return false;\n }\n if (!foundInsidePoint) {\n foundInsidePoint = booleanPointOnLine(\n multiPoint.coordinates[i],\n lineString,\n { ignoreEndVertices: true }\n );\n }\n }\n return foundInsidePoint;\n}\nfunction isMultiPointInPoly(multiPoint, polygon) {\n var output = true;\n var oneInside = false;\n var isInside = false;\n for (var i = 0; i < multiPoint.coordinates.length; i++) {\n isInside = booleanPointInPolygon(multiPoint.coordinates[i], polygon);\n if (!isInside) {\n output = false;\n break;\n }\n if (!oneInside) {\n isInside = booleanPointInPolygon(multiPoint.coordinates[i], polygon, {\n ignoreBoundary: true\n });\n }\n }\n return output && isInside;\n}\nfunction isLineOnLine(lineString1, lineString2) {\n for (var i = 0; i < lineString1.coordinates.length; i++) {\n if (!booleanPointOnLine(lineString1.coordinates[i], lineString2)) {\n return false;\n }\n }\n return true;\n}\nfunction isLineInPoly(linestring, polygon) {\n var polyBbox = calcBbox(polygon);\n var lineBbox = calcBbox(linestring);\n if (!doBBoxOverlap(polyBbox, lineBbox)) {\n return false;\n }\n var foundInsidePoint = false;\n for (var i = 0; i < linestring.coordinates.length; i++) {\n if (!booleanPointInPolygon(linestring.coordinates[i], polygon)) {\n return false;\n }\n if (!foundInsidePoint) {\n foundInsidePoint = booleanPointInPolygon(\n linestring.coordinates[i],\n polygon,\n { ignoreBoundary: true }\n );\n }\n if (!foundInsidePoint && i < linestring.coordinates.length - 1) {\n var midpoint = getMidpoint(\n linestring.coordinates[i],\n linestring.coordinates[i + 1]\n );\n foundInsidePoint = booleanPointInPolygon(midpoint, polygon, {\n ignoreBoundary: true\n });\n }\n }\n return foundInsidePoint;\n}\nfunction isPolyInPoly(geometry1, geometry2) {\n var poly1Bbox = calcBbox(geometry1);\n var poly2Bbox = calcBbox(geometry2);\n if (!doBBoxOverlap(poly2Bbox, poly1Bbox)) {\n return false;\n }\n for (var i = 0; i < geometry1.coordinates[0].length; i++) {\n if (!booleanPointInPolygon(geometry1.coordinates[0][i], geometry2)) {\n return false;\n }\n }\n return true;\n}\nfunction doBBoxOverlap(bbox1, bbox2) {\n if (bbox1[0] > bbox2[0]) return false;\n if (bbox1[2] < bbox2[2]) return false;\n if (bbox1[1] > bbox2[1]) return false;\n if (bbox1[3] < bbox2[3]) return false;\n return true;\n}\nfunction compareCoords(pair1, pair2) {\n return pair1[0] === pair2[0] && pair1[1] === pair2[1];\n}\nfunction getMidpoint(pair1, pair2) {\n return [(pair1[0] + pair2[0]) / 2, (pair1[1] + pair2[1]) / 2];\n}\nvar index_default = booleanWithin;\nexport {\n booleanWithin,\n index_default as default\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport { bbox } from \"@turf/bbox\";\nimport { point } from \"@turf/helpers\";\nfunction center(geojson, options = {}) {\n const ext = bbox(geojson);\n const x = (ext[0] + ext[2]) / 2;\n const y = (ext[1] + ext[3]) / 2;\n return point([x, y], options.properties, options);\n}\nvar index_default = center;\nexport {\n center,\n index_default as default\n};\n//# sourceMappingURL=index.js.map","!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).jsts=e()}(this,(function(){\"use strict\";function t(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=Array(e);n<e;n++)i[n]=t[n];return i}function e(t,e,n){return e=u(e),function(t,e){if(e&&(\"object\"==typeof e||\"function\"==typeof e))return e;if(void 0!==e)throw new TypeError(\"Derived constructors may only return object or undefined\");return function(t){if(void 0===t)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return t}(t)}(t,h()?Reflect.construct(e,n||[],u(t).constructor):e.apply(t,n))}function n(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}function i(t,e,n){if(h())return Reflect.construct.apply(null,arguments);var i=[null];i.push.apply(i,e);var r=new(t.bind.apply(t,i));return n&&c(r,n.prototype),r}function r(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,\"value\"in i&&(i.writable=!0),Object.defineProperty(t,v(i.key),i)}}function s(t,e,n){return e&&r(t.prototype,e),n&&r(t,n),Object.defineProperty(t,\"prototype\",{writable:!1}),t}function a(t,e){var n=\"undefined\"!=typeof Symbol&&t[Symbol.iterator]||t[\"@@iterator\"];if(!n){if(Array.isArray(t)||(n=y(t))||e){n&&(t=n);var i=0,r=function(){};return{s:r,n:function(){return i>=t.length?{done:!0}:{done:!1,value:t[i++]}},e:function(t){throw t},f:r}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var s,a=!0,o=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){o=!0,s=t},f:function(){try{a||null==n.return||n.return()}finally{if(o)throw s}}}}function o(){return o=\"undefined\"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(t,e,n){var i=function(t,e){for(;!{}.hasOwnProperty.call(t,e)&&null!==(t=u(t)););return t}(t,e);if(i){var r=Object.getOwnPropertyDescriptor(i,e);return r.get?r.get.call(arguments.length<3?t:n):r.value}},o.apply(null,arguments)}function u(t){return u=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},u(t)}function l(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Super expression must either be null or a function\");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,\"prototype\",{writable:!1}),e&&c(t,e)}function h(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(t){}return(h=function(){return!!t})()}function c(t,e){return c=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},c(t,e)}function f(t,e,n,i){var r=o(u(1&i?t.prototype:t),e,n);return 2&i&&\"function\"==typeof r?function(t){return r.apply(n,t)}:r}function g(e){return function(e){if(Array.isArray(e))return t(e)}(e)||function(t){if(\"undefined\"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t[\"@@iterator\"])return Array.from(t)}(e)||y(e)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function v(t){var e=function(t,e){if(\"object\"!=typeof t||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e);if(\"object\"!=typeof i)return i;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(t)}(t,\"string\");return\"symbol\"==typeof e?e:e+\"\"}function y(e,n){if(e){if(\"string\"==typeof e)return t(e,n);var i={}.toString.call(e).slice(8,-1);return\"Object\"===i&&e.constructor&&(i=e.constructor.name),\"Map\"===i||\"Set\"===i?Array.from(e):\"Arguments\"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?t(e,n):void 0}}function d(t){var e=\"function\"==typeof Map?new Map:void 0;return d=function(t){if(null===t||!function(t){try{return-1!==Function.toString.call(t).indexOf(\"[native code]\")}catch(e){return\"function\"==typeof t}}(t))return t;if(\"function\"!=typeof t)throw new TypeError(\"Super expression must either be null or a function\");if(void 0!==e){if(e.has(t))return e.get(t);e.set(t,n)}function n(){return i(t,arguments,u(this).constructor)}return n.prototype=Object.create(t.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),c(n,t)},d(t)}var _=function(){function t(){n(this,t),t.constructor_.apply(this,arguments)}return s(t,[{key:\"getEndCapStyle\",value:function(){return this._endCapStyle}},{key:\"isSingleSided\",value:function(){return this._isSingleSided}},{key:\"setQuadrantSegments\",value:function(e){this._quadrantSegments=e,0===this._quadrantSegments&&(this._joinStyle=t.JOIN_BEVEL),this._quadrantSegments<0&&(this._joinStyle=t.JOIN_MITRE,this._mitreLimit=Math.abs(this._quadrantSegments)),e<=0&&(this._quadrantSegments=1),this._joinStyle!==t.JOIN_ROUND&&(this._quadrantSegments=t.DEFAULT_QUADRANT_SEGMENTS)}},{key:\"getJoinStyle\",value:function(){return this._joinStyle}},{key:\"setJoinStyle\",value:function(t){this._joinStyle=t}},{key:\"setSimplifyFactor\",value:function(t){this._simplifyFactor=t<0?0:t}},{key:\"getSimplifyFactor\",value:function(){return this._simplifyFactor}},{key:\"getQuadrantSegments\",value:function(){return this._quadrantSegments}},{key:\"setEndCapStyle\",value:function(t){this._endCapStyle=t}},{key:\"getMitreLimit\",value:function(){return this._mitreLimit}},{key:\"setMitreLimit\",value:function(t){this._mitreLimit=t}},{key:\"setSingleSided\",value:function(t){this._isSingleSided=t}}],[{key:\"constructor_\",value:function(){if(this._quadrantSegments=t.DEFAULT_QUADRANT_SEGMENTS,this._endCapStyle=t.CAP_ROUND,this._joinStyle=t.JOIN_ROUND,this._mitreLimit=t.DEFAULT_MITRE_LIMIT,this._isSingleSided=!1,this._simplifyFactor=t.DEFAULT_SIMPLIFY_FACTOR,0===arguments.length);else if(1===arguments.length){var e=arguments[0];this.setQuadrantSegments(e)}else if(2===arguments.length){var n=arguments[0],i=arguments[1];this.setQuadrantSegments(n),this.setEndCapStyle(i)}else if(4===arguments.length){var r=arguments[0],s=arguments[1],a=arguments[2],o=arguments[3];this.setQuadrantSegments(r),this.setEndCapStyle(s),this.setJoinStyle(a),this.setMitreLimit(o)}}},{key:\"bufferDistanceError\",value:function(t){var e=Math.PI/2/t;return 1-Math.cos(e/2)}}])}();_.CAP_ROUND=1,_.CAP_FLAT=2,_.CAP_SQUARE=3,_.JOIN_ROUND=1,_.JOIN_MITRE=2,_.JOIN_BEVEL=3,_.DEFAULT_QUADRANT_SEGMENTS=8,_.DEFAULT_MITRE_LIMIT=5,_.DEFAULT_SIMPLIFY_FACTOR=.01;var p=function(t){function i(t){var r;return n(this,i),(r=e(this,i,[t])).name=Object.keys({Exception:i})[0],r}return l(i,t),s(i,[{key:\"toString\",value:function(){return this.message}}])}(d(Error)),m=function(t){function i(t){var r;return n(this,i),(r=e(this,i,[t])).name=Object.keys({IllegalArgumentException:i})[0],r}return l(i,t),s(i)}(p),k=function(){return s((function t(){n(this,t)}),[{key:\"filter\",value:function(t){}}])}();function x(){}function I(){}function E(){}var N,T,S,L,C,R,w,O,b=function(){return s((function t(){n(this,t)}),null,[{key:\"equalsWithTolerance\",value:function(t,e,n){return Math.abs(t-e)<=n}}])}(),M=function(){return s((function t(e,i){n(this,t),this.low=i||0,this.high=e||0}),null,[{key:\"toBinaryString\",value:function(t){var e,n=\"\";for(e=2147483648;e>0;e>>>=1)n+=(t.high&e)===e?\"1\":\"0\";for(e=2147483648;e>0;e>>>=1)n+=(t.low&e)===e?\"1\":\"0\";return n}}])}();function A(){}function P(){}A.NaN=NaN,A.isNaN=function(t){return Number.isNaN(t)},A.isInfinite=function(t){return!Number.isFinite(t)},A.MAX_VALUE=Number.MAX_VALUE,A.POSITIVE_INFINITY=Number.POSITIVE_INFINITY,A.NEGATIVE_INFINITY=Number.NEGATIVE_INFINITY,\"function\"==typeof Float64Array&&\"function\"==typeof Int32Array?(R=2146435072,w=new Float64Array(1),O=new Int32Array(w.buffer),A.doubleToLongBits=function(t){w[0]=t;var e=0|O[0],n=0|O[1];return(n&R)===R&&1048575&n&&0!==e&&(e=0,n=2146959360),new M(n,e)},A.longBitsToDouble=function(t){return O[0]=t.low,O[1]=t.high,w[0]}):(N=1023,T=Math.log2,S=Math.floor,L=Math.pow,C=function(){for(var t=53;t>0;t--){var e=L(2,t)-1;if(S(T(e))+1===t)return e}return 0}(),A.doubleToLongBits=function(t){var e,n,i,r,s,a,o,u,l;if(t<0||1/t===Number.NEGATIVE_INFINITY?(a=1<<31,t=-t):a=0,0===t)return new M(u=a,l=0);if(t===1/0)return new M(u=2146435072|a,l=0);if(t!=t)return new M(u=2146959360,l=0);if(r=0,l=0,(e=S(t))>1)if(e<=C)(r=S(T(e)))<=20?(l=0,u=e<<20-r&1048575):(l=e%(n=L(2,i=r-20))<<32-i,u=e/n&1048575);else for(i=e,l=0;0!==(i=S(n=i/2));)r++,l>>>=1,l|=(1&u)<<31,u>>>=1,n!==i&&(u|=524288);if(o=r+N,s=0===e,e=t-e,r<52&&0!==e)for(i=0;;){if((n=2*e)>=1?(e=n-1,s?(o--,s=!1):(i<<=1,i|=1,r++)):(e=n,s?0==--o&&(r++,s=!1):(i<<=1,r++)),20===r)u|=i,i=0;else if(52===r){l|=i;break}if(1===n){r<20?u|=i<<20-r:r<52&&(l|=i<<52-r);break}}return u|=o<<20,new M(u|=a,l)},A.longBitsToDouble=function(t){var e,n,i,r,s=t.high,a=t.low,o=s&1<<31?-1:1;for(i=((2146435072&s)>>20)-N,r=0,n=1<<19,e=1;e<=20;e++)s&n&&(r+=L(2,-e)),n>>>=1;for(n=1<<31,e=21;e<=52;e++)a&n&&(r+=L(2,-e)),n>>>=1;if(-1023===i){if(0===r)return 0*o;i=-1022}else{if(1024===i)return 0===r?o/0:NaN;r+=1}return o*r*L(2,i)});var D=function(t){function i(t){var r;return n(this,i),(r=e(this,i,[t])).name=Object.keys({RuntimeException:i})[0],r}return l(i,t),s(i)}(p),F=function(t){function i(){var t;return n(this,i),t=e(this,i),i.constructor_.apply(t,arguments),t}return l(i,t),s(i,null,[{key:\"constructor_\",value:function(){if(0===arguments.length)D.constructor_.call(this);else if(1===arguments.length){var t=arguments[0];D.constructor_.call(this,t)}}}])}(D),G=function(){function t(){n(this,t)}return s(t,null,[{key:\"shouldNeverReachHere\",value:function(){if(0===arguments.length)t.shouldNeverReachHere(null);else if(1===arguments.length){var e=arguments[0];throw new F(\"Should never reach here\"+(null!==e?\": \"+e:\"\"))}}},{key:\"isTrue\",value:function(){if(1===arguments.length){var e=arguments[0];t.isTrue(e,null)}else if(2===arguments.length){var n=arguments[1];if(!arguments[0])throw null===n?new F:new F(n)}}},{key:\"equals\",value:function(){if(2===arguments.length){var e=arguments[0],n=arguments[1];t.equals(e,n,null)}else if(3===arguments.length){var i=arguments[0],r=arguments[1],s=arguments[2];if(!r.equals(i))throw new F(\"Expected \"+i+\" but encountered \"+r+(null!==s?\": \"+s:\"\"))}}}])}(),q=new ArrayBuffer(8),Y=new Float64Array(q),z=new Int32Array(q),X=function(){function t(){n(this,t),t.constructor_.apply(this,arguments)}return s(t,[{key:\"getM\",value:function(){return A.NaN}},{key:\"setOrdinate\",value:function(e,n){switch(e){case t.X:this.x=n;break;case t.Y:this.y=n;break;case t.Z:this.setZ(n);break;default:throw new m(\"Invalid ordinate index: \"+e)}}},{key:\"equals2D\",value:function(){if(1===arguments.length){var t=arguments[0];return this.x===t.x&&this.y===t.y}if(2===arguments.length){var e=arguments[0],n=arguments[1];return!!b.equalsWithTolerance(this.x,e.x,n)&&!!b.equalsWithTolerance(this.y,e.y,n)}}},{key:\"setM\",value:function(e){throw new m(\"Invalid ordinate index: \"+t.M)}},{key:\"getZ\",value:function(){return this.z}},{key:\"getOrdinate\",value:function(e){switch(e){case t.X:return this.x;case t.Y:return this.y;case t.Z:return this.getZ()}throw new m(\"Invalid ordinate index: \"+e)}},{key:\"equals3D\",value:function(t){return this.x===t.x&&this.y===t.y&&(this.getZ()===t.getZ()||A.isNaN(this.getZ())&&A.isNaN(t.getZ()))}},{key:\"equals\",value:function(e){return e instanceof t&&this.equals2D(e)}},{key:\"equalInZ\",value:function(t,e){return b.equalsWithTolerance(this.getZ(),t.getZ(),e)}},{key:\"setX\",value:function(t){this.x=t}},{key:\"compareTo\",value:function(t){var e=t;return this.x<e.x?-1:this.x>e.x?1:this.y<e.y?-1:this.y>e.y?1:0}},{key:\"getX\",value:function(){return this.x}},{key:\"setZ\",value:function(t){this.z=t}},{key:\"clone\",value:function(){try{return null}catch(t){if(t instanceof CloneNotSupportedException)return G.shouldNeverReachHere(\"this shouldn't happen because this class is Cloneable\"),null;throw t}}},{key:\"copy\",value:function(){return new t(this)}},{key:\"toString\",value:function(){return\"(\"+this.x+\", \"+this.y+\", \"+this.getZ()+\")\"}},{key:\"distance3D\",value:function(t){var e=this.x-t.x,n=this.y-t.y,i=this.getZ()-t.getZ();return Math.sqrt(e*e+n*n+i*i)}},{key:\"getY\",value:function(){return this.y}},{key:\"setY\",value:function(t){this.y=t}},{key:\"distance\",value:function(t){var e=this.x-t.x,n=this.y-t.y;return Math.sqrt(e*e+n*n)}},{key:\"hashCode\",value:function(){var e=17;return e=37*(e=37*e+t.hashCode(this.x))+t.hashCode(this.y)}},{key:\"setCoordinate\",value:function(t){this.x=t.x,this.y=t.y,this.z=t.getZ()}},{key:\"interfaces_\",get:function(){return[x,I,E]}}],[{key:\"constructor_\",value:function(){if(this.x=null,this.y=null,this.z=null,0===arguments.length)t.constructor_.call(this,0,0);else if(1===arguments.length){var e=arguments[0];t.constructor_.call(this,e.x,e.y,e.getZ())}else if(2===arguments.length){var n=arguments[0],i=arguments[1];t.constructor_.call(this,n,i,t.NULL_ORDINATE)}else if(3===arguments.length){var r=arguments[0],s=arguments[1],a=arguments[2];this.x=r,this.y=s,this.z=a}}},{key:\"hashCode\",value:function(t){return Y[0]=t,z[0]^z[1]}}])}(),B=function(){function t(){n(this,t),t.constructor_.apply(this,arguments)}return s(t,[{key:\"compare\",value:function(e,n){var i=t.compare(e.x,n.x);if(0!==i)return i;var r=t.compare(e.y,n.y);return 0!==r?r:this._dimensionsToTest<=2?0:t.compare(e.getZ(),n.getZ())}},{key:\"interfaces_\",get:function(){return[P]}}],[{key:\"constructor_\",value:function(){if(this._dimensionsToTest=2,0===arguments.length)t.constructor_.call(this,2);else if(1===arguments.length){var e=arguments[0];if(2!==e&&3!==e)throw new m(\"only 2 or 3 dimensions may be specified\");this._dimensionsToTest=e}}},{key:\"compare\",value:function(t,e){return t<e?-1:t>e?1:A.isNaN(t)?A.isNaN(e)?0:-1:A.isNaN(e)?1:0}}])}();X.DimensionalComparator=B,X.NULL_ORDINATE=A.NaN,X.X=0,X.Y=1,X.Z=2,X.M=3;var U=function(){function t(){n(this,t),t.constructor_.apply(this,arguments)}return s(t,[{key:\"getArea\",value:function(){return this.getWidth()*this.getHeight()}},{key:\"equals\",value:function(e){if(!(e instanceof t))return!1;var n=e;return this.isNull()?n.isNull():this._maxx===n.getMaxX()&&this._maxy===n.getMaxY()&&this._minx===n.getMinX()&&this._miny===n.getMinY()}},{key:\"intersection\",value:function(e){if(this.isNull()||e.isNull()||!this.intersects(e))return new t;var n=this._minx>e._minx?this._minx:e._minx,i=this._miny>e._miny?this._miny:e._miny;return new t(n,this._maxx<e._maxx?this._maxx:e._maxx,i,this._maxy<e._maxy?this._maxy:e._maxy)}},{key:\"isNull\",value:function(){return this._maxx<this._minx}},{key:\"getMaxX\",value:function(){return this._maxx}},{key:\"covers\",value:function(){if(1===arguments.length){if(arguments[0]instanceof X){var e=arguments[0];return this.covers(e.x,e.y)}if(arguments[0]instanceof t){var n=arguments[0];return!this.isNull()&&!n.isNull()&&(n.getMinX()>=this._minx&&n.getMaxX()<=this._maxx&&n.getMinY()>=this._miny&&n.getMaxY()<=this._maxy)}}else if(2===arguments.length){var i=arguments[0],r=arguments[1];return!this.isNull()&&(i>=this._minx&&i<=this._maxx&&r>=this._miny&&r<=this._maxy)}}},{key:\"intersects\",value:function(){if(1===arguments.length){if(arguments[0]instanceof t){var e=arguments[0];return!this.isNull()&&!e.isNull()&&!(e._minx>this._maxx||e._maxx<this._minx||e._miny>this._maxy||e._maxy<this._miny)}if(arguments[0]instanceof X){var n=arguments[0];return this.intersects(n.x,n.y)}}else if(2===arguments.length){if(arguments[0]instanceof X&&arguments[1]instanceof X){var i=arguments[0],r=arguments[1];return!this.isNull()&&(!((i.x<r.x?i.x:r.x)>this._maxx)&&(!((i.x>r.x?i.x:r.x)<this._minx)&&(!((i.y<r.y?i.y:r.y)>this._maxy)&&!((i.y>r.y?i.y:r.y)<this._miny))))}if(\"number\"==typeof arguments[0]&&\"number\"==typeof arguments[1]){var s=arguments[0],a=arguments[1];return!this.isNull()&&!(s>this._maxx||s<this._minx||a>this._maxy||a<this._miny)}}}},{key:\"getMinY\",value:function(){return this._miny}},{key:\"getDiameter\",value:function(){if(this.isNull())return 0;var t=this.getWidth(),e=this.getHeight();return Math.sqrt(t*t+e*e)}},{key:\"getMinX\",value:function(){return this._minx}},{key:\"expandToInclude\",value:function(){if(1===arguments.length){if(arguments[0]instanceof X){var e=arguments[0];this.expandToInclude(e.x,e.y)}else if(arguments[0]instanceof t){var n=arguments[0];if(n.isNull())return null;this.isNull()?(this._minx=n.getMinX(),this._maxx=n.getMaxX(),this._miny=n.getMinY(),this._maxy=n.getMaxY()):(n._minx<this._minx&&(this._minx=n._minx),n._maxx>this._maxx&&(this._maxx=n._maxx),n._miny<this._miny&&(this._miny=n._miny),n._maxy>this._maxy&&(this._maxy=n._maxy))}}else if(2===arguments.length){var i=arguments[0],r=arguments[1];this.isNull()?(this._minx=i,this._maxx=i,this._miny=r,this._maxy=r):(i<this._minx&&(this._minx=i),i>this._maxx&&(this._maxx=i),r<this._miny&&(this._miny=r),r>this._maxy&&(this._maxy=r))}}},{key:\"minExtent\",value:function(){if(this.isNull())return 0;var t=this.getWidth(),e=this.getHeight();return t<e?t:e}},{key:\"getWidth\",value:function(){return this.isNull()?0:this._maxx-this._minx}},{key:\"compareTo\",value:function(t){var e=t;return this.isNull()?e.isNull()?0:-1:e.isNull()?1:this._minx<e._minx?-1:this._minx>e._minx?1:this._miny<e._miny?-1:this._miny>e._miny?1:this._maxx<e._maxx?-1:this._maxx>e._maxx?1:this._maxy<e._maxy?-1:this._maxy>e._maxy?1:0}},{key:\"translate\",value:function(t,e){if(this.isNull())return null;this.init(this.getMinX()+t,this.getMaxX()+t,this.getMinY()+e,this.getMaxY()+e)}},{key:\"copy\",value:function(){return new t(this)}},{key:\"toString\",value:function(){return\"Env[\"+this._minx+\" : \"+this._maxx+\", \"+this._miny+\" : \"+this._maxy+\"]\"}},{key:\"setToNull\",value:function(){this._minx=0,this._maxx=-1,this._miny=0,this._maxy=-1}},{key:\"disjoint\",value:function(t){return!(!this.isNull()&&!t.isNull())||(t._minx>this._maxx||t._maxx<this._minx||t._miny>this._maxy||t._maxy<this._miny)}},{key:\"getHeight\",value:function(){return this.isNull()?0:this._maxy-this._miny}},{key:\"maxExtent\",value:function(){if(this.isNull())return 0;var t=this.getWidth(),e=this.getHeight();return t>e?t:e}},{key:\"expandBy\",value:function(){if(1===arguments.length){var t=arguments[0];this.expandBy(t,t)}else if(2===arguments.length){var e=arguments[0],n=arguments[1];if(this.isNull())return null;this._minx-=e,this._maxx+=e,this._miny-=n,this._maxy+=n,(this._minx>this._maxx||this._miny>this._maxy)&&this.setToNull()}}},{key:\"contains\",value:function(){if(1===arguments.length){if(arguments[0]instanceof t){var e=arguments[0];return this.covers(e)}if(arguments[0]instanceof X){var n=arguments[0];return this.covers(n)}}else if(2===arguments.length){var i=arguments[0],r=arguments[1];return this.covers(i,r)}}},{key:\"centre\",value:function(){return this.isNull()?null:new X((this.getMinX()+this.getMaxX())/2,(this.getMinY()+this.getMaxY())/2)}},{key:\"init\",value:function(){if(0===arguments.length)this.setToNull();else if(1===arguments.length){if(arguments[0]instanceof X){var e=arguments[0];this.init(e.x,e.x,e.y,e.y)}else if(arguments[0]instanceof t){var n=arguments[0];this._minx=n._minx,this._maxx=n._maxx,this._miny=n._miny,this._maxy=n._maxy}}else if(2===arguments.length){var i=arguments[0],r=arguments[1];this.init(i.x,r.x,i.y,r.y)}else if(4===arguments.length){var s=arguments[0],a=arguments[1],o=arguments[2],u=arguments[3];s<a?(this._minx=s,this._maxx=a):(this._minx=a,this._maxx=s),o<u?(this._miny=o,this._maxy=u):(this._miny=u,this._maxy=o)}}},{key:\"getMaxY\",value:function(){return this._maxy}},{key:\"distance\",value:function(t){if(this.intersects(t))return 0;var e=0;this._maxx<t._minx?e=t._minx-this._maxx:this._minx>t._maxx&&(e=this._minx-t._maxx);var n=0;return this._maxy<t._miny?n=t._miny-this._maxy:this._miny>t._maxy&&(n=this._miny-t._maxy),0===e?n:0===n?e:Math.sqrt(e*e+n*n)}},{key:\"hashCode\",value:function(){var t=17;return t=37*(t=37*(t=37*(t=37*t+X.hashCode(this._minx))+X.hashCode(this._maxx))+X.hashCode(this._miny))+X.hashCode(this._maxy)}},{key:\"interfaces_\",get:function(){return[x,E]}}],[{key:\"constructor_\",value:function(){if(this._minx=null,this._maxx=null,this._miny=null,this._maxy=null,0===arguments.length)this.init();else if(1===arguments.length){if(arguments[0]instanceof X){var e=arguments[0];this.init(e.x,e.x,e.y,e.y)}else if(arguments[0]instanceof t){var n=arguments[0];this.init(n)}}else if(2===arguments.length){var i=arguments[0],r=arguments[1];this.init(i.x,r.x,i.y,r.y)}else if(4===arguments.length){var s=arguments[0],a=arguments[1],o=arguments[2],u=arguments[3];this.init(s,a,o,u)}}},{key:\"intersects\",value:function(){if(3===arguments.length){var t=arguments[0],e=arguments[1],n=arguments[2];return n.x>=(t.x<e.x?t.x:e.x)&&n.x<=(t.x>e.x?t.x:e.x)&&n.y>=(t.y<e.y?t.y:e.y)&&n.y<=(t.y>e.y?t.y:e.y)}if(4===arguments.length){var i=arguments[0],r=arguments[1],s=arguments[2],a=arguments[3],o=Math.min(s.x,a.x),u=Math.max(s.x,a.x),l=Math.min(i.x,r.x),h=Math.max(i.x,r.x);return!(l>u)&&(!(h<o)&&(o=Math.min(s.y,a.y),u=Math.max(s.y,a.y),l=Math.min(i.y,r.y),h=Math.max(i.y,r.y),!(l>u)&&!(h<o)))}}}])}(),V=function(){function t(){n(this,t),t.constructor_.apply(this,arguments)}return s(t,[{key:\"isGeometryCollection\",value:function(){return this.getTypeCode()===t.TYPECODE_GEOMETRYCOLLECTION}},{key:\"getFactory\",value:function(){return this._factory}},{key:\"getGeometryN\",value:function(t){return this}},{key:\"getArea\",value:function(){return 0}},{key:\"isRectangle\",value:function(){return!1}},{key:\"equalsExact\",value:function(t){return this===t||this.equalsExact(t,0)}},{key:\"geometryChanged\",value:function(){this.apply(t.geometryChangedFilter)}},{key:\"geometryChangedAction\",value:function(){this._envelope=null}},{key:\"equalsNorm\",value:function(t){return null!==t&&this.norm().equalsExact(t.norm())}},{key:\"getLength\",value:function(){return 0}},{key:\"getNumGeometries\",value:function(){return 1}},{key:\"compareTo\",value:function(){var t;if(1===arguments.length){var e=arguments[0];return t=e,this.getTypeCode()!==t.getTypeCode()?this.getTypeCode()-t.getTypeCode():this.isEmpty()&&t.isEmpty()?0:this.isEmpty()?-1:t.isEmpty()?1:this.compareToSameClass(e)}if(2===arguments.length){var n=arguments[0],i=arguments[1];return t=n,this.getTypeCode()!==t.getTypeCode()?this.getTypeCode()-t.getTypeCode():this.isEmpty()&&t.isEmpty()?0:this.isEmpty()?-1:t.isEmpty()?1:this.compareToSameClass(n,i)}}},{key:\"getUserData\",value:function(){return this._userData}},{key:\"getSRID\",value:function(){return this._SRID}},{key:\"getEnvelope\",value:function(){return this.getFactory().toGeometry(this.getEnvelopeInternal())}},{key:\"checkNotGeometryCollection\",value:function(e){if(e.getTypeCode()===t.TYPECODE_GEOMETRYCOLLECTION)throw new m(\"This method does not support GeometryCollection arguments\")}},{key:\"equal\",value:function(t,e,n){return 0===n?t.equals(e):t.distance(e)<=n}},{key:\"norm\",value:function(){var t=this.copy();return t.normalize(),t}},{key:\"reverse\",value:function(){var t=this.reverseInternal();return null!=this.envelope&&(t.envelope=this.envelope.copy()),t.setSRID(this.getSRID()),t}},{key:\"copy\",value:function(){var t=this.copyInternal();return t.envelope=null==this._envelope?null:this._envelope.copy(),t._SRID=this._SRID,t._userData=this._userData,t}},{key:\"getPrecisionModel\",value:function(){return this._factory.getPrecisionModel()}},{key:\"getEnvelopeInternal\",value:function(){return null===this._envelope&&(this._envelope=this.computeEnvelopeInternal()),new U(this._envelope)}},{key:\"setSRID\",value:function(t){this._SRID=t}},{key:\"setUserData\",value:function(t){this._userData=t}},{key:\"compare\",value:function(t,e){for(var n=t.iterator(),i=e.iterator();n.hasNext()&&i.hasNext();){var r=n.next(),s=i.next(),a=r.compareTo(s);if(0!==a)return a}return n.hasNext()?1:i.hasNext()?-1:0}},{key:\"hashCode\",value:function(){return this.getEnvelopeInternal().hashCode()}},{key:\"isEquivalentClass\",value:function(t){return this.getClass()===t.getClass()}},{key:\"isGeometryCollectionOrDerived\",value:function(){return this.getTypeCode()===t.TYPECODE_GEOMETRYCOLLECTION||this.getTypeCode()===t.TYPECODE_MULTIPOINT||this.getTypeCode()===t.TYPECODE_MULTILINESTRING||this.getTypeCode()===t.TYPECODE_MULTIPOLYGON}},{key:\"interfaces_\",get:function(){return[I,x,E]}},{key:\"getClass\",value:function(){return t}}],[{key:\"hasNonEmptyElements\",value:function(t){for(var e=0;e<t.length;e++)if(!t[e].isEmpty())return!0;return!1}},{key:\"hasNullElements\",value:function(t){for(var e=0;e<t.length;e++)if(null===t[e])return!0;return!1}}])}();V.constructor_=function(t){t&&(this._envelope=null,this._userData=null,this._factory=t,this._SRID=t.getSRID())},V.TYPECODE_POINT=0,V.TYPECODE_MULTIPOINT=1,V.TYPECODE_LINESTRING=2,V.TYPECODE_LINEARRING=3,V.TYPECODE_MULTILINESTRING=4,V.TYPECODE_POLYGON=5,V.TYPECODE_MULTIPOLYGON=6,V.TYPECODE_GEOMETRYCOLLECTION=7,V.TYPENAME_POINT=\"Point\",V.TYPENAME_MULTIPOINT=\"MultiPoint\",V.TYPENAME_LINESTRING=\"LineString\",V.TYPENAME_LINEARRING=\"LinearRing\",V.TYPENAME_MULTILINESTRING=\"MultiLineString\",V.TYPENAME_POLYGON=\"Polygon\",V.TYPENAME_MULTIPOLYGON=\"MultiPolygon\",V.TYPENAME_GEOMETRYCOLLECTION=\"GeometryCollection\",V.geometryChangedFilter={get interfaces_(){return[k]},filter:function(t){t.geometryChangedAction()}};var H=function(){function t(){n(this,t)}return s(t,null,[{key:\"toLocationSymbol\",value:function(e){switch(e){case t.EXTERIOR:return\"e\";case t.BOUNDARY:return\"b\";case t.INTERIOR:return\"i\";case t.NONE:return\"-\"}throw new m(\"Unknown location value: \"+e)}}])}();H.INTERIOR=0,H.BOUNDARY=1,H.EXTERIOR=2,H.NONE=-1;var Z=function(){return s((function t(){n(this,t)}),[{key:\"add\",value:function(){}},{key:\"addAll\",value:function(){}},{key:\"isEmpty\",value:function(){}},{key:\"iterator\",value:function(){}},{key:\"size\",value:function(){}},{key:\"toArray\",value:function(){}},{key:\"remove\",value:function(){}}])}(),j=function(t){function i(t){var r;return n(this,i),(r=e(this,i,[t])).name=Object.keys({NoSuchElementException:i})[0],r}return l(i,t),s(i)}(p),W=function(t){function i(t){var r;return n(this,i),(r=e(this,i,[t])).name=Object.keys({UnsupportedOperationException:i})[0],r}return l(i,t),s(i)}(p),K=function(t){function i(){return n(this,i),e(this,i,arguments)}return l(i,t),s(i,[{key:\"contains\",value:function(){}}])}(Z),J=function(t){function i(t){var r;return n(this,i),(r=e(this,i)).map=new Map,t instanceof Z&&r.addAll(t),r}return l(i,t),s(i,[{key:\"contains\",value:function(t){var e=t.hashCode?t.hashCode():t;return!!this.map.has(e)}},{key:\"add\",value:function(t){var e=t.hashCode?t.hashCode():t;return!this.map.has(e)&&!!this.map.set(e,t)}},{key:\"addAll\",value:function(t){var e,n=a(t);try{for(n.s();!(e=n.n()).done;){var i=e.value;this.add(i)}}catch(t){n.e(t)}finally{n.f()}return!0}},{key:\"remove\",value:function(){throw new W}},{key:\"size\",value:function(){return this.map.size}},{key:\"isEmpty\",value:function(){return 0===this.map.size}},{key:\"toArray\",value:function(){return Array.from(this.map.values())}},{key:\"iterator\",value:function(){return new Q(this.map)}},{key:Symbol.iterator,value:function(){return this.map}}])}(K),Q=function(){return s((function t(e){n(this,t),this.iterator=e.values();var i=this.iterator.next(),r=i.done,s=i.value;this.done=r,this.value=s}),[{key:\"next\",value:function(){if(this.done)throw new j;var t=this.value,e=this.iterator.next(),n=e.done,i=e.value;return this.done=n,this.value=i,t}},{key:\"hasNext\",value:function(){return!this.done}},{key:\"remove\",value:function(){throw new W}}])}(),$=function(){function t(){n(this,t)}return s(t,null,[{key:\"opposite\",value:function(e){return e===t.LEFT?t.RIGHT:e===t.RIGHT?t.LEFT:e}}])}();$.ON=0,$.LEFT=1,$.RIGHT=2;var tt=function(t){function i(t){var r;return n(this,i),(r=e(this,i,[t])).name=Object.keys({EmptyStackException:i})[0],r}return l(i,t),s(i)}(p),et=function(t){function i(t){var r;return n(this,i),(r=e(this,i,[t])).name=Object.keys({IndexOutOfBoundsException:i})[0],r}return l(i,t),s(i)}(p),nt=function(t){function i(){return n(this,i),e(this,i,arguments)}return l(i,t),s(i,[{key:\"get\",value:function(){}},{key:\"set\",value:function(){}},{key:\"isEmpty\",value:function(){}}])}(Z),it=function(t){function i(){var t;return n(this,i),(t=e(this,i)).array=[],t}return l(i,t),s(i,[{key:\"add\",value:function(t){return this.array.push(t),!0}},{key:\"get\",value:function(t){if(t<0||t>=this.size())throw new et;return this.array[t]}},{key:\"push\",value:function(t){return this.array.push(t),t}},{key:\"pop\",value:function(){if(0===this.array.length)throw new tt;return this.array.pop()}},{key:\"peek\",value:function(){if(0===this.array.length)throw new tt;return this.array[this.array.length-1]}},{key:\"empty\",value:function(){return 0===this.array.length}},{key:\"isEmpty\",value:function(){return this.empty()}},{key:\"search\",value:function(t){return this.array.indexOf(t)}},{key:\"size\",value:function(){return this.array.length}},{key:\"toArray\",value:function(){return this.array.slice()}}])}(nt);function rt(t,e){return t.interfaces_&&t.interfaces_.indexOf(e)>-1}var st=function(){return s((function t(e){n(this,t),this.str=e}),[{key:\"append\",value:function(t){this.str+=t}},{key:\"setCharAt\",value:function(t,e){this.str=this.str.substr(0,t)+e+this.str.substr(t+1)}},{key:\"toString\",value:function(){return this.str}}])}(),at=function(){function t(e){n(this,t),this.value=e}return s(t,[{key:\"intValue\",value:function(){return this.value}},{key:\"compareTo\",value:function(t){return this.value<t?-1:this.value>t?1:0}}],[{key:\"compare\",value:function(t,e){return t<e?-1:t>e?1:0}},{key:\"isNan\",value:function(t){return Number.isNaN(t)}},{key:\"valueOf\",value:function(e){return new t(e)}}])}(),ot=function(){return s((function t(){n(this,t)}),null,[{key:\"isWhitespace\",value:function(t){return t<=32&&t>=0||127===t}},{key:\"toUpperCase\",value:function(t){return t.toUpperCase()}}])}(),ut=function(){function t(){n(this,t),t.constructor_.apply(this,arguments)}return s(t,[{key:\"le\",value:function(t){return this._hi<t._hi||this._hi===t._hi&&this._lo<=t._lo}},{key:\"extractSignificantDigits\",value:function(e,n){var i=this.abs(),r=t.magnitude(i._hi),s=t.TEN.pow(r);(i=i.divide(s)).gt(t.TEN)?(i=i.divide(t.TEN),r+=1):i.lt(t.ONE)&&(i=i.multiply(t.TEN),r-=1);for(var a=r+1,o=new st,u=t.MAX_PRINT_DIGITS-1,l=0;l<=u;l++){e&&l===a&&o.append(\".\");var h=Math.trunc(i._hi);if(h<0)break;var c=!1,f=0;h>9?(c=!0,f=\"9\"):f=\"0\"+h,o.append(f),i=i.subtract(t.valueOf(h)).multiply(t.TEN),c&&i.selfAdd(t.TEN);var g=!0,v=t.magnitude(i._hi);if(v<0&&Math.abs(v)>=u-l&&(g=!1),!g)break}return n[0]=r,o.toString()}},{key:\"sqr\",value:function(){return this.multiply(this)}},{key:\"doubleValue\",value:function(){return this._hi+this._lo}},{key:\"subtract\",value:function(){if(arguments[0]instanceof t){var e=arguments[0];return this.add(e.negate())}if(\"number\"==typeof arguments[0]){var n=arguments[0];return this.add(-n)}}},{key:\"equals\",value:function(){if(1===arguments.length&&arguments[0]instanceof t){var e=arguments[0];return this._hi===e._hi&&this._lo===e._lo}}},{key:\"isZero\",value:function(){return 0===this._hi&&0===this._lo}},{key:\"selfSubtract\",value:function(){if(arguments[0]instanceof t){var e=arguments[0];return this.isNaN()?this:this.selfAdd(-e._hi,-e._lo)}if(\"number\"==typeof arguments[0]){var n=arguments[0];return this.isNaN()?this:this.selfAdd(-n,0)}}},{key:\"getSpecialNumberString\",value:function(){return this.isZero()?\"0.0\":this.isNaN()?\"NaN \":null}},{key:\"min\",value:function(t){return this.le(t)?this:t}},{key:\"selfDivide\",value:function(){if(1===arguments.length){if(arguments[0]instanceof t){var e=arguments[0];return this.selfDivide(e._hi,e._lo)}if(\"number\"==typeof arguments[0]){var n=arguments[0];return this.selfDivide(n,0)}}else if(2===arguments.length){var i,r,s,a,o=arguments[0],u=arguments[1],l=null,h=null,c=null,f=null;return s=this._hi/o,f=(l=(c=t.SPLIT*s)-(l=c-s))*(h=(f=t.SPLIT*o)-(h=f-o))-(a=s*o)+l*(r=o-h)+(i=s-l)*h+i*r,f=s+(c=(this._hi-a-f+this._lo-s*u)/o),this._hi=f,this._lo=s-f+c,this}}},{key:\"dump\",value:function(){return\"DD<\"+this._hi+\", \"+this._lo+\">\"}},{key:\"divide\",value:function(){if(arguments[0]instanceof t){var e,n,i,r,s=arguments[0],a=null,o=null,u=null,l=null;return e=(i=this._hi/s._hi)-(a=(u=t.SPLIT*i)-(a=u-i)),l=a*(o=(l=t.SPLIT*s._hi)-(o=l-s._hi))-(r=i*s._hi)+a*(n=s._hi-o)+e*o+e*n,new t(l=i+(u=(this._hi-r-l+this._lo-i*s._lo)/s._hi),i-l+u)}if(\"number\"==typeof arguments[0]){var h=arguments[0];return A.isNaN(h)?t.createNaN():t.copy(this).selfDivide(h,0)}}},{key:\"ge\",value:function(t){return this._hi>t._hi||this._hi===t._hi&&this._lo>=t._lo}},{key:\"pow\",value:function(e){if(0===e)return t.valueOf(1);var n=new t(this),i=t.valueOf(1),r=Math.abs(e);if(r>1)for(;r>0;)r%2==1&&i.selfMultiply(n),(r/=2)>0&&(n=n.sqr());else i=n;return e<0?i.reciprocal():i}},{key:\"ceil\",value:function(){if(this.isNaN())return t.NaN;var e=Math.ceil(this._hi),n=0;return e===this._hi&&(n=Math.ceil(this._lo)),new t(e,n)}},{key:\"compareTo\",value:function(t){var e=t;return this._hi<e._hi?-1:this._hi>e._hi?1:this._lo<e._lo?-1:this._lo>e._lo?1:0}},{key:\"rint\",value:function(){return this.isNaN()?this:this.add(.5).floor()}},{key:\"setValue\",value:function(){if(arguments[0]instanceof t){var e=arguments[0];return this.init(e),this}if(\"number\"==typeof arguments[0]){var n=arguments[0];return this.init(n),this}}},{key:\"max\",value:function(t){return this.ge(t)?this:t}},{key:\"sqrt\",value:function(){if(this.isZero())return t.valueOf(0);if(this.isNegative())return t.NaN;var e=1/Math.sqrt(this._hi),n=this._hi*e,i=t.valueOf(n),r=this.subtract(i.sqr())._hi*(.5*e);return i.add(r)}},{key:\"selfAdd\",value:function(){if(1===arguments.length){if(arguments[0]instanceof t){var e=arguments[0];return this.selfAdd(e._hi,e._lo)}if(\"number\"==typeof arguments[0]){var n,i,r,s,a,o=arguments[0],u=null;return u=(r=this._hi+o)-(s=r-this._hi),i=(a=(u=o-s+(this._hi-u))+this._lo)+(r-(n=r+a)),this._hi=n+i,this._lo=i+(n-this._hi),this}}else if(2===arguments.length){var l,h,c,f,g=arguments[0],v=arguments[1],y=null,d=null,_=null;c=this._hi+g,h=this._lo+v,d=c-(_=c-this._hi),y=h-(f=h-this._lo);var p=(l=c+(_=(d=g-_+(this._hi-d))+h))+(_=(y=v-f+(this._lo-y))+(_+(c-l))),m=_+(l-p);return this._hi=p,this._lo=m,this}}},{key:\"selfMultiply\",value:function(){if(1===arguments.length){if(arguments[0]instanceof t){var e=arguments[0];return this.selfMultiply(e._hi,e._lo)}if(\"number\"==typeof arguments[0]){var n=arguments[0];return this.selfMultiply(n,0)}}else if(2===arguments.length){var i,r,s=arguments[0],a=arguments[1],o=null,u=null,l=null,h=null;o=(l=t.SPLIT*this._hi)-this._hi,h=t.SPLIT*s,o=l-o,i=this._hi-o,u=h-s;var c=(l=this._hi*s)+(h=o*(u=h-u)-l+o*(r=s-u)+i*u+i*r+(this._hi*a+this._lo*s)),f=h+(o=l-c);return this._hi=c,this._lo=f,this}}},{key:\"selfSqr\",value:function(){return this.selfMultiply(this)}},{key:\"floor\",value:function(){if(this.isNaN())return t.NaN;var e=Math.floor(this._hi),n=0;return e===this._hi&&(n=Math.floor(this._lo)),new t(e,n)}},{key:\"negate\",value:function(){return this.isNaN()?this:new t(-this._hi,-this._lo)}},{key:\"clone\",value:function(){try{return null}catch(t){if(t instanceof CloneNotSupportedException)return null;throw t}}},{key:\"multiply\",value:function(){if(arguments[0]instanceof t){var e=arguments[0];return e.isNaN()?t.createNaN():t.copy(this).selfMultiply(e)}if(\"number\"==typeof arguments[0]){var n=arguments[0];return A.isNaN(n)?t.createNaN():t.copy(this).selfMultiply(n,0)}}},{key:\"isNaN\",value:function(){return A.isNaN(this._hi)}},{key:\"intValue\",value:function(){return Math.trunc(this._hi)}},{key:\"toString\",value:function(){var e=t.magnitude(this._hi);return e>=-3&&e<=20?this.toStandardNotation():this.toSciNotation()}},{key:\"toStandardNotation\",value:function(){var e=this.getSpecialNumberString();if(null!==e)return e;var n=new Array(1).fill(null),i=this.extractSignificantDigits(!0,n),r=n[0]+1,s=i;if(\".\"===i.charAt(0))s=\"0\"+i;else if(r<0)s=\"0.\"+t.stringOfChar(\"0\",-r)+i;else if(-1===i.indexOf(\".\")){var a=r-i.length;s=i+t.stringOfChar(\"0\",a)+\".0\"}return this.isNegative()?\"-\"+s:s}},{key:\"reciprocal\",value:function(){var e,n,i,r,s=null,a=null,o=null,u=null;e=(i=1/this._hi)-(s=(o=t.SPLIT*i)-(s=o-i)),a=(u=t.SPLIT*this._hi)-this._hi;var l=i+(o=(1-(r=i*this._hi)-(u=s*(a=u-a)-r+s*(n=this._hi-a)+e*a+e*n)-i*this._lo)/this._hi);return new t(l,i-l+o)}},{key:\"toSciNotation\",value:function(){if(this.isZero())return t.SCI_NOT_ZERO;var e=this.getSpecialNumberString();if(null!==e)return e;var n=new Array(1).fill(null),i=this.extractSignificantDigits(!1,n),r=t.SCI_NOT_EXPONENT_CHAR+n[0];if(\"0\"===i.charAt(0))throw new IllegalStateException(\"Found leading zero: \"+i);var s=\"\";i.length>1&&(s=i.substring(1));var a=i.charAt(0)+\".\"+s;return this.isNegative()?\"-\"+a+r:a+r}},{key:\"abs\",value:function(){return this.isNaN()?t.NaN:this.isNegative()?this.negate():new t(this)}},{key:\"isPositive\",value:function(){return this._hi>0||0===this._hi&&this._lo>0}},{key:\"lt\",value:function(t){return this._hi<t._hi||this._hi===t._hi&&this._lo<t._lo}},{key:\"add\",value:function(){if(arguments[0]instanceof t){var e=arguments[0];return t.copy(this).selfAdd(e)}if(\"number\"==typeof arguments[0]){var n=arguments[0];return t.copy(this).selfAdd(n)}}},{key:\"init\",value:function(){if(1===arguments.length){if(\"number\"==typeof arguments[0]){var e=arguments[0];this._hi=e,this._lo=0}else if(arguments[0]instanceof t){var n=arguments[0];this._hi=n._hi,this._lo=n._lo}}else if(2===arguments.length){var i=arguments[0],r=arguments[1];this._hi=i,this._lo=r}}},{key:\"gt\",value:function(t){return this._hi>t._hi||this._hi===t._hi&&this._lo>t._lo}},{key:\"isNegative\",value:function(){return this._hi<0||0===this._hi&&this._lo<0}},{key:\"trunc\",value:function(){return this.isNaN()?t.NaN:this.isPositive()?this.floor():this.ceil()}},{key:\"signum\",value:function(){return this._hi>0?1:this._hi<0?-1:this._lo>0?1:this._lo<0?-1:0}},{key:\"interfaces_\",get:function(){return[E,x,I]}}],[{key:\"constructor_\",value:function(){if(this._hi=0,this._lo=0,0===arguments.length)this.init(0);else if(1===arguments.length){if(\"number\"==typeof arguments[0]){var e=arguments[0];this.init(e)}else if(arguments[0]instanceof t){var n=arguments[0];this.init(n)}else if(\"string\"==typeof arguments[0]){var i=arguments[0];t.constructor_.call(this,t.parse(i))}}else if(2===arguments.length){var r=arguments[0],s=arguments[1];this.init(r,s)}}},{key:\"determinant\",value:function(){if(\"number\"==typeof arguments[3]&&\"number\"==typeof arguments[2]&&\"number\"==typeof arguments[0]&&\"number\"==typeof arguments[1]){var e=arguments[0],n=arguments[1],i=arguments[2],r=arguments[3];return t.determinant(t.valueOf(e),t.valueOf(n),t.valueOf(i),t.valueOf(r))}if(arguments[3]instanceof t&&arguments[2]instanceof t&&arguments[0]instanceof t&&arguments[1]instanceof t){var s=arguments[1],a=arguments[2],o=arguments[3];return arguments[0].multiply(o).selfSubtract(s.multiply(a))}}},{key:\"sqr\",value:function(e){return t.valueOf(e).selfMultiply(e)}},{key:\"valueOf\",value:function(){if(\"string\"==typeof arguments[0]){var e=arguments[0];return t.parse(e)}if(\"number\"==typeof arguments[0])return new t(arguments[0])}},{key:\"sqrt\",value:function(e){return t.valueOf(e).sqrt()}},{key:\"parse\",value:function(e){for(var n=0,i=e.length;ot.isWhitespace(e.charAt(n));)n++;var r=!1;if(n<i){var s=e.charAt(n);\"-\"!==s&&\"+\"!==s||(n++,\"-\"===s&&(r=!0))}for(var a=new t,o=0,u=0,l=0,h=!1;!(n>=i);){var c=e.charAt(n);if(n++,ot.isDigit(c)){var f=c-\"0\";a.selfMultiply(t.TEN),a.selfAdd(f),o++}else{if(\".\"!==c){if(\"e\"===c||\"E\"===c){var g=e.substring(n);try{l=at.parseInt(g)}catch(t){throw t instanceof NumberFormatException?new NumberFormatException(\"Invalid exponent \"+g+\" in string \"+e):t}break}throw new NumberFormatException(\"Unexpected character '\"+c+\"' at position \"+n+\" in string \"+e)}u=o,h=!0}}var v=a;h||(u=o);var y=o-u-l;if(0===y)v=a;else if(y>0){var d=t.TEN.pow(y);v=a.divide(d)}else if(y<0){var _=t.TEN.pow(-y);v=a.multiply(_)}return r?v.negate():v}},{key:\"createNaN\",value:function(){return new t(A.NaN,A.NaN)}},{key:\"copy\",value:function(e){return new t(e)}},{key:\"magnitude\",value:function(t){var e=Math.abs(t),n=Math.log(e)/Math.log(10),i=Math.trunc(Math.floor(n));return 10*Math.pow(10,i)<=e&&(i+=1),i}},{key:\"stringOfChar\",value:function(t,e){for(var n=new st,i=0;i<e;i++)n.append(t);return n.toString()}}])}();ut.PI=new ut(3.141592653589793,12246467991473532e-32),ut.TWO_PI=new ut(6.283185307179586,24492935982947064e-32),ut.PI_2=new ut(1.5707963267948966,6123233995736766e-32),ut.E=new ut(2.718281828459045,14456468917292502e-32),ut.NaN=new ut(A.NaN,A.NaN),ut.EPS=123259516440783e-46,ut.SPLIT=134217729,ut.MAX_PRINT_DIGITS=32,ut.TEN=ut.valueOf(10),ut.ONE=ut.valueOf(1),ut.SCI_NOT_EXPONENT_CHAR=\"E\",ut.SCI_NOT_ZERO=\"0.0E0\";var lt=function(){function t(){n(this,t)}return s(t,null,[{key:\"orientationIndex\",value:function(e,n,i){var r=t.orientationIndexFilter(e,n,i);if(r<=1)return r;var s=ut.valueOf(n.x).selfAdd(-e.x),a=ut.valueOf(n.y).selfAdd(-e.y),o=ut.valueOf(i.x).selfAdd(-n.x),u=ut.valueOf(i.y).selfAdd(-n.y);return s.selfMultiply(u).selfSubtract(a.selfMultiply(o)).signum()}},{key:\"signOfDet2x2\",value:function(){if(arguments[3]instanceof ut&&arguments[2]instanceof ut&&arguments[0]instanceof ut&&arguments[1]instanceof ut){var t=arguments[1],e=arguments[2],n=arguments[3];return arguments[0].multiply(n).selfSubtract(t.multiply(e)).signum()}if(\"number\"==typeof arguments[3]&&\"number\"==typeof arguments[2]&&\"number\"==typeof arguments[0]&&\"number\"==typeof arguments[1]){var i=arguments[0],r=arguments[1],s=arguments[2],a=arguments[3],o=ut.valueOf(i),u=ut.valueOf(r),l=ut.valueOf(s),h=ut.valueOf(a);return o.multiply(h).selfSubtract(u.multiply(l)).signum()}}},{key:\"intersection\",value:function(t,e,n,i){var r=new ut(t.y).selfSubtract(e.y),s=new ut(e.x).selfSubtract(t.x),a=new ut(t.x).selfMultiply(e.y).selfSubtract(new ut(e.x).selfMultiply(t.y)),o=new ut(n.y).selfSubtract(i.y),u=new ut(i.x).selfSubtract(n.x),l=new ut(n.x).selfMultiply(i.y).selfSubtract(new ut(i.x).selfMultiply(n.y)),h=s.multiply(l).selfSubtract(u.multiply(a)),c=o.multiply(a).selfSubtract(r.multiply(l)),f=r.multiply(u).selfSubtract(o.multiply(s)),g=h.selfDivide(f).doubleValue(),v=c.selfDivide(f).doubleValue();return A.isNaN(g)||A.isInfinite(g)||A.isNaN(v)||A.isInfinite(v)?null:new X(g,v)}},{key:\"orientationIndexFilter\",value:function(e,n,i){var r=null,s=(e.x-i.x)*(n.y-i.y),a=(e.y-i.y)*(n.x-i.x),o=s-a;if(s>0){if(a<=0)return t.signum(o);r=s+a}else{if(!(s<0))return t.signum(o);if(a>=0)return t.signum(o);r=-s-a}var u=t.DP_SAFE_EPSILON*r;return o>=u||-o>=u?t.signum(o):2}},{key:\"signum\",value:function(t){return t>0?1:t<0?-1:0}}])}();lt.DP_SAFE_EPSILON=1e-15;var ht=function(){return s((function t(){n(this,t)}),[{key:\"getM\",value:function(t){if(this.hasM()){var e=this.getDimension()-this.getMeasures();return this.getOrdinate(t,e)}return A.NaN}},{key:\"setOrdinate\",value:function(t,e,n){}},{key:\"getZ\",value:function(t){return this.hasZ()?this.getOrdinate(t,2):A.NaN}},{key:\"size\",value:function(){}},{key:\"getOrdinate\",value:function(t,e){}},{key:\"getCoordinate\",value:function(){}},{key:\"getCoordinateCopy\",value:function(t){}},{key:\"createCoordinate\",value:function(){}},{key:\"getDimension\",value:function(){}},{key:\"hasM\",value:function(){return this.getMeasures()>0}},{key:\"getX\",value:function(t){}},{key:\"hasZ\",value:function(){return this.getDimension()-this.getMeasures()>2}},{key:\"getMeasures\",value:function(){return 0}},{key:\"expandEnvelope\",value:function(t){}},{key:\"copy\",value:function(){}},{key:\"getY\",value:function(t){}},{key:\"toCoordinateArray\",value:function(){}},{key:\"interfaces_\",get:function(){return[I]}}])}();ht.X=0,ht.Y=1,ht.Z=2,ht.M=3;var ct=function(){function t(){n(this,t)}return s(t,null,[{key:\"index\",value:function(t,e,n){return lt.orientationIndex(t,e,n)}},{key:\"isCCW\",value:function(){if(arguments[0]instanceof Array){var e=arguments[0],n=e.length-1;if(n<3)throw new m(\"Ring has fewer than 4 points, so orientation cannot be determined\");for(var i=e[0],r=0,s=1;s<=n;s++){var a=e[s];a.y>i.y&&(i=a,r=s)}var o=r;do{(o-=1)<0&&(o=n)}while(e[o].equals2D(i)&&o!==r);var u=r;do{u=(u+1)%n}while(e[u].equals2D(i)&&u!==r);var l=e[o],h=e[u];if(l.equals2D(i)||h.equals2D(i)||l.equals2D(h))return!1;var c=t.index(l,i,h);return 0===c?l.x>h.x:c>0}if(rt(arguments[0],ht)){var f=arguments[0],g=f.size()-1;if(g<3)throw new m(\"Ring has fewer than 4 points, so orientation cannot be determined\");for(var v=f.getCoordinate(0),y=0,d=1;d<=g;d++){var _=f.getCoordinate(d);_.y>v.y&&(v=_,y=d)}var p=null,k=y;do{(k-=1)<0&&(k=g),p=f.getCoordinate(k)}while(p.equals2D(v)&&k!==y);var x=null,I=y;do{I=(I+1)%g,x=f.getCoordinate(I)}while(x.equals2D(v)&&I!==y);if(p.equals2D(v)||x.equals2D(v)||p.equals2D(x))return!1;var E=t.index(p,v,x);return 0===E?p.x>x.x:E>0}}}])}();ct.CLOCKWISE=-1,ct.RIGHT=ct.CLOCKWISE,ct.COUNTERCLOCKWISE=1,ct.LEFT=ct.COUNTERCLOCKWISE,ct.COLLINEAR=0,ct.STRAIGHT=ct.COLLINEAR;var ft=function(){return s((function t(){n(this,t),t.constructor_.apply(this,arguments)}),[{key:\"getCoordinate\",value:function(){return this._minCoord}},{key:\"getRightmostSide\",value:function(t,e){var n=this.getRightmostSideOfSegment(t,e);return n<0&&(n=this.getRightmostSideOfSegment(t,e-1)),n<0&&(this._minCoord=null,this.checkForRightmostCoordinate(t)),n}},{key:\"findRightmostEdgeAtVertex\",value:function(){var t=this._minDe.getEdge().getCoordinates();G.isTrue(this._minIndex>0&&this._minIndex<t.length,\"rightmost point expected to be interior vertex of edge\");var e=t[this._minIndex-1],n=t[this._minIndex+1],i=ct.index(this._minCoord,n,e),r=!1;(e.y<this._minCoord.y&&n.y<this._minCoord.y&&i===ct.COUNTERCLOCKWISE||e.y>this._minCoord.y&&n.y>this._minCoord.y&&i===ct.CLOCKWISE)&&(r=!0),r&&(this._minIndex=this._minIndex-1)}},{key:\"getRightmostSideOfSegment\",value:function(t,e){var n=t.getEdge().getCoordinates();if(e<0||e+1>=n.length)return-1;if(n[e].y===n[e+1].y)return-1;var i=$.LEFT;return n[e].y<n[e+1].y&&(i=$.RIGHT),i}},{key:\"getEdge\",value:function(){return this._orientedDe}},{key:\"checkForRightmostCoordinate\",value:function(t){for(var e=t.getEdge().getCoordinates(),n=0;n<e.length-1;n++)(null===this._minCoord||e[n].x>this._minCoord.x)&&(this._minDe=t,this._minIndex=n,this._minCoord=e[n])}},{key:\"findRightmostEdgeAtNode\",value:function(){var t=this._minDe.getNode().getEdges();this._minDe=t.getRightmostEdge(),this._minDe.isForward()||(this._minDe=this._minDe.getSym(),this._minIndex=this._minDe.getEdge().getCoordinates().length-1)}},{key:\"findEdge\",value:function(t){for(var e=t.iterator();e.hasNext();){var n=e.next();n.isForward()&&this.checkForRightmostCoordinate(n)}G.isTrue(0!==this._minIndex||this._minCoord.equals(this._minDe.getCoordinate()),\"inconsistency in rightmost processing\"),0===this._minIndex?this.findRightmostEdgeAtNode():this.findRightmostEdgeAtVertex(),this._orientedDe=this._minDe,this.getRightmostSide(this._minDe,this._minIndex)===$.LEFT&&(this._orientedDe=this._minDe.getSym())}}],[{key:\"constructor_\",value:function(){this._minIndex=-1,this._minCoord=null,this._minDe=null,this._orientedDe=null}}])}(),gt=function(t){function i(t,r){var s;return n(this,i),(s=e(this,i,[r?t+\" [ \"+r+\" ]\":t])).pt=r?new X(r):void 0,s.name=Object.keys({TopologyException:i})[0],s}return l(i,t),s(i,[{key:\"getCoordinate\",value:function(){return this.pt}}])}(D),vt=function(){return s((function t(){n(this,t),this.array=[]}),[{key:\"addLast\",value:function(t){this.array.push(t)}},{key:\"removeFirst\",value:function(){return this.array.shift()}},{key:\"isEmpty\",value:function(){return 0===this.array.length}}])}(),yt=function(t){function i(t){var r;return n(this,i),(r=e(this,i)).array=[],t instanceof Z&&r.addAll(t),r}return l(i,t),s(i,[{key:\"interfaces_\",get:function(){return[nt,Z]}},{key:\"ensureCapacity\",value:function(){}},{key:\"add\",value:function(t){return 1===arguments.length?this.array.push(t):this.array.splice(arguments[0],0,arguments[1]),!0}},{key:\"clear\",value:function(){this.array=[]}},{key:\"addAll\",value:function(t){var e,n=a(t);try{for(n.s();!(e=n.n()).done;){var i=e.value;this.array.push(i)}}catch(t){n.e(t)}finally{n.f()}}},{key:\"set\",value:function(t,e){var n=this.array[t];return this.array[t]=e,n}},{key:\"iterator\",value:function(){return new dt(this)}},{key:\"get\",value:function(t){if(t<0||t>=this.size())throw new et;return this.array[t]}},{key:\"isEmpty\",value:function(){return 0===this.array.length}},{key:\"sort\",value:function(t){t?this.array.sort((function(e,n){return t.compare(e,n)})):this.array.sort()}},{key:\"size\",value:function(){return this.array.length}},{key:\"toArray\",value:function(){return this.array.slice()}},{key:\"remove\",value:function(t){for(var e=0,n=this.array.length;e<n;e++)if(this.array[e]===t)return!!this.array.splice(e,1);return!1}},{key:Symbol.iterator,value:function(){return this.array.values()}}])}(nt),dt=function(){return s((function t(e){n(this,t),this.arrayList=e,this.position=0}),[{key:\"next\",value:function(){if(this.position===this.arrayList.size())throw new j;return this.arrayList.get(this.position++)}},{key:\"hasNext\",value:function(){return this.position<this.arrayList.size()}},{key:\"set\",value:function(t){return this.arrayList.set(this.position-1,t)}},{key:\"remove\",value:function(){this.arrayList.remove(this.arrayList.get(this.position))}}])}(),_t=function(){return s((function t(){n(this,t),t.constructor_.apply(this,arguments)}),[{key:\"clearVisitedEdges\",value:function(){for(var t=this._dirEdgeList.iterator();t.hasNext();){t.next().setVisited(!1)}}},{key:\"getRightmostCoordinate\",value:function(){return this._rightMostCoord}},{key:\"computeNodeDepth\",value:function(t){for(var e=null,n=t.getEdges().iterator();n.hasNext();){var i=n.next();if(i.isVisited()||i.getSym().isVisited()){e=i;break}}if(null===e)throw new gt(\"unable to find edge to compute depths at \"+t.getCoordinate());t.getEdges().computeDepths(e);for(var r=t.getEdges().iterator();r.hasNext();){var s=r.next();s.setVisited(!0),this.copySymDepths(s)}}},{key:\"computeDepth\",value:function(t){this.clearVisitedEdges();var e=this._finder.getEdge();e.getNode(),e.getLabel(),e.setEdgeDepths($.RIGHT,t),this.copySymDepths(e),this.computeDepths(e)}},{key:\"create\",value:function(t){this.addReachable(t),this._finder.findEdge(this._dirEdgeList),this._rightMostCoord=this._finder.getCoordinate()}},{key:\"findResultEdges\",value:function(){for(var t=this._dirEdgeList.iterator();t.hasNext();){var e=t.next();e.getDepth($.RIGHT)>=1&&e.getDepth($.LEFT)<=0&&!e.isInteriorAreaEdge()&&e.setInResult(!0)}}},{key:\"computeDepths\",value:function(t){var e=new J,n=new vt,i=t.getNode();for(n.addLast(i),e.add(i),t.setVisited(!0);!n.isEmpty();){var r=n.removeFirst();e.add(r),this.computeNodeDepth(r);for(var s=r.getEdges().iterator();s.hasNext();){var a=s.next().getSym();if(!a.isVisited()){var o=a.getNode();e.contains(o)||(n.addLast(o),e.add(o))}}}}},{key:\"compareTo\",value:function(t){var e=t;return this._rightMostCoord.x<e._rightMostCoord.x?-1:this._rightMostCoord.x>e._rightMostCoord.x?1:0}},{key:\"getEnvelope\",value:function(){if(null===this._env){for(var t=new U,e=this._dirEdgeList.iterator();e.hasNext();)for(var n=e.next().getEdge().getCoordinates(),i=0;i<n.length-1;i++)t.expandToInclude(n[i]);this._env=t}return this._env}},{key:\"addReachable\",value:function(t){var e=new it;for(e.add(t);!e.empty();){var n=e.pop();this.add(n,e)}}},{key:\"copySymDepths\",value:function(t){var e=t.getSym();e.setDepth($.LEFT,t.getDepth($.RIGHT)),e.setDepth($.RIGHT,t.getDepth($.LEFT))}},{key:\"add\",value:function(t,e){t.setVisited(!0),this._nodes.add(t);for(var n=t.getEdges().iterator();n.hasNext();){var i=n.next();this._dirEdgeList.add(i);var r=i.getSym().getNode();r.isVisited()||e.push(r)}}},{key:\"getNodes\",value:function(){return this._nodes}},{key:\"getDirectedEdges\",value:function(){return this._dirEdgeList}},{key:\"interfaces_\",get:function(){return[x]}}],[{key:\"constructor_\",value:function(){this._finder=null,this._dirEdgeList=new yt,this._nodes=new yt,this._rightMostCoord=null,this._env=null,this._finder=new ft}}])}(),pt=function(){return s((function t(){n(this,t)}),null,[{key:\"intersection\",value:function(t,e,n,i){var r=t.x<e.x?t.x:e.x,s=t.y<e.y?t.y:e.y,a=t.x>e.x?t.x:e.x,o=t.y>e.y?t.y:e.y,u=n.x<i.x?n.x:i.x,l=n.y<i.y?n.y:i.y,h=n.x>i.x?n.x:i.x,c=n.y>i.y?n.y:i.y,f=((r>u?r:u)+(a<h?a:h))/2,g=((s>l?s:l)+(o<c?o:c))/2,v=t.x-f,y=t.y-g,d=e.x-f,_=e.y-g,p=n.x-f,m=n.y-g,k=i.x-f,x=i.y-g,I=y-_,E=d-v,N=v*_-d*y,T=m-x,S=k-p,L=p*x-k*m,C=I*S-T*E,R=(E*L-S*N)/C,w=(T*N-I*L)/C;return A.isNaN(R)||A.isInfinite(R)||A.isNaN(w)||A.isInfinite(w)?null:new X(R+f,w+g)}}])}(),mt=function(){return s((function t(){n(this,t)}),null,[{key:\"arraycopy\",value:function(t,e,n,i,r){for(var s=0,a=e;a<e+r;a++)n[i+s]=t[a],s++}},{key:\"getProperty\",value:function(t){return{\"line.separator\":\"\\n\"}[t]}}])}(),kt=function(){function t(){n(this,t)}return s(t,null,[{key:\"log10\",value:function(e){var n=Math.log(e);return A.isInfinite(n)||A.isNaN(n)?n:n/t.LOG_10}},{key:\"min\",value:function(t,e,n,i){var r=t;return e<r&&(r=e),n<r&&(r=n),i<r&&(r=i),r}},{key:\"clamp\",value:function(){if(\"number\"==typeof arguments[2]&&\"number\"==typeof arguments[0]&&\"number\"==typeof arguments[1]){var t=arguments[0],e=arguments[1],n=arguments[2];return t<e?e:t>n?n:t}if(Number.isInteger(arguments[2])&&Number.isInteger(arguments[0])&&Number.isInteger(arguments[1])){var i=arguments[0],r=arguments[1],s=arguments[2];return i<r?r:i>s?s:i}}},{key:\"wrap\",value:function(t,e){return t<0?e- -t%e:t%e}},{key:\"max\",value:function(){if(3===arguments.length){var t=arguments[1],e=arguments[2],n=arguments[0];return t>n&&(n=t),e>n&&(n=e),n}if(4===arguments.length){var i=arguments[1],r=arguments[2],s=arguments[3],a=arguments[0];return i>a&&(a=i),r>a&&(a=r),s>a&&(a=s),a}}},{key:\"average\",value:function(t,e){return(t+e)/2}}])}();kt.LOG_10=Math.log(10);var xt=function(){function t(){n(this,t)}return s(t,null,[{key:\"segmentToSegment\",value:function(e,n,i,r){if(e.equals(n))return t.pointToSegment(e,i,r);if(i.equals(r))return t.pointToSegment(r,e,n);var s=!1;if(U.intersects(e,n,i,r)){var a=(n.x-e.x)*(r.y-i.y)-(n.y-e.y)*(r.x-i.x);if(0===a)s=!0;else{var o=(e.y-i.y)*(r.x-i.x)-(e.x-i.x)*(r.y-i.y),u=((e.y-i.y)*(n.x-e.x)-(e.x-i.x)*(n.y-e.y))/a,l=o/a;(l<0||l>1||u<0||u>1)&&(s=!0)}}else s=!0;return s?kt.min(t.pointToSegment(e,i,r),t.pointToSegment(n,i,r),t.pointToSegment(i,e,n),t.pointToSegment(r,e,n)):0}},{key:\"pointToSegment\",value:function(t,e,n){if(e.x===n.x&&e.y===n.y)return t.distance(e);var i=(n.x-e.x)*(n.x-e.x)+(n.y-e.y)*(n.y-e.y),r=((t.x-e.x)*(n.x-e.x)+(t.y-e.y)*(n.y-e.y))/i;if(r<=0)return t.distance(e);if(r>=1)return t.distance(n);var s=((e.y-t.y)*(n.x-e.x)-(e.x-t.x)*(n.y-e.y))/i;return Math.abs(s)*Math.sqrt(i)}},{key:\"pointToLinePerpendicular\",value:function(t,e,n){var i=(n.x-e.x)*(n.x-e.x)+(n.y-e.y)*(n.y-e.y),r=((e.y-t.y)*(n.x-e.x)-(e.x-t.x)*(n.y-e.y))/i;return Math.abs(r)*Math.sqrt(i)}},{key:\"pointToSegmentString\",value:function(e,n){if(0===n.length)throw new m(\"Line array must contain at least one vertex\");for(var i=e.distance(n[0]),r=0;r<n.length-1;r++){var s=t.pointToSegment(e,n[r],n[r+1]);s<i&&(i=s)}return i}}])}(),It=function(){return s((function t(){n(this,t)}),[{key:\"create\",value:function(){if(1===arguments.length)arguments[0]instanceof Array||rt(arguments[0],ht);else if(2===arguments.length);else if(3===arguments.length){var t=arguments[0],e=arguments[1];return this.create(t,e)}}}])}(),Et=function(){return s((function t(){n(this,t)}),[{key:\"filter\",value:function(t){}}])}(),Nt=function(){return s((function t(){n(this,t)}),null,[{key:\"ofLine\",value:function(t){var e=t.size();if(e<=1)return 0;var n=0,i=new X;t.getCoordinate(0,i);for(var r=i.x,s=i.y,a=1;a<e;a++){t.getCoordinate(a,i);var o=i.x,u=i.y,l=o-r,h=u-s;n+=Math.sqrt(l*l+h*h),r=o,s=u}return n}}])}(),Tt=s((function t(){n(this,t)})),St=function(){function t(){n(this,t)}return s(t,null,[{key:\"copyCoord\",value:function(t,e,n,i){for(var r=Math.min(t.getDimension(),n.getDimension()),s=0;s<r;s++)n.setOrdinate(i,s,t.getOrdinate(e,s))}},{key:\"isRing\",value:function(t){var e=t.size();return 0===e||!(e<=3)&&(t.getOrdinate(0,ht.X)===t.getOrdinate(e-1,ht.X)&&t.getOrdinate(0,ht.Y)===t.getOrdinate(e-1,ht.Y))}},{key:\"scroll\",value:function(){if(2===arguments.length){if(rt(arguments[0],ht)&&Number.isInteger(arguments[1])){var e=arguments[0],n=arguments[1];t.scroll(e,n,t.isRing(e))}else if(rt(arguments[0],ht)&&arguments[1]instanceof X){var i=arguments[0],r=arguments[1],s=t.indexOf(r,i);if(s<=0)return null;t.scroll(i,s)}}else if(3===arguments.length){var a=arguments[0],o=arguments[1],u=arguments[2];if(o<=0)return null;for(var l=a.copy(),h=u?a.size()-1:a.size(),c=0;c<h;c++)for(var f=0;f<a.getDimension();f++)a.setOrdinate(c,f,l.getOrdinate((o+c)%h,f));if(u)for(var g=0;g<a.getDimension();g++)a.setOrdinate(h,g,a.getOrdinate(0,g))}}},{key:\"isEqual\",value:function(t,e){var n=t.size();if(n!==e.size())return!1;for(var i=Math.min(t.getDimension(),e.getDimension()),r=0;r<n;r++)for(var s=0;s<i;s++){var a=t.getOrdinate(r,s),o=e.getOrdinate(r,s);if(t.getOrdinate(r,s)!==e.getOrdinate(r,s)&&(!A.isNaN(a)||!A.isNaN(o)))return!1}return!0}},{key:\"minCoordinateIndex\",value:function(){if(1===arguments.length){var e=arguments[0];return t.minCoordinateIndex(e,0,e.size()-1)}if(3===arguments.length){for(var n=arguments[0],i=arguments[2],r=-1,s=null,a=arguments[1];a<=i;a++){var o=n.getCoordinate(a);(null===s||s.compareTo(o)>0)&&(s=o,r=a)}return r}}},{key:\"extend\",value:function(e,n,i){var r=e.create(i,n.getDimension()),s=n.size();if(t.copy(n,0,r,0,s),s>0)for(var a=s;a<i;a++)t.copy(n,s-1,r,a,1);return r}},{key:\"reverse\",value:function(e){for(var n=e.size()-1,i=Math.trunc(n/2),r=0;r<=i;r++)t.swap(e,r,n-r)}},{key:\"swap\",value:function(t,e,n){if(e===n)return null;for(var i=0;i<t.getDimension();i++){var r=t.getOrdinate(e,i);t.setOrdinate(e,i,t.getOrdinate(n,i)),t.setOrdinate(n,i,r)}}},{key:\"copy\",value:function(e,n,i,r,s){for(var a=0;a<s;a++)t.copyCoord(e,n+a,i,r+a)}},{key:\"ensureValidRing\",value:function(e,n){var i=n.size();return 0===i?n:i<=3?t.createClosedRing(e,n,4):n.getOrdinate(0,ht.X)===n.getOrdinate(i-1,ht.X)&&n.getOrdinate(0,ht.Y)===n.getOrdinate(i-1,ht.Y)?n:t.createClosedRing(e,n,i+1)}},{key:\"indexOf\",value:function(t,e){for(var n=0;n<e.size();n++)if(t.x===e.getOrdinate(n,ht.X)&&t.y===e.getOrdinate(n,ht.Y))return n;return-1}},{key:\"createClosedRing\",value:function(e,n,i){var r=e.create(i,n.getDimension()),s=n.size();t.copy(n,0,r,0,s);for(var a=s;a<i;a++)t.copy(n,0,r,a,1);return r}},{key:\"minCoordinate\",value:function(t){for(var e=null,n=0;n<t.size();n++){var i=t.getCoordinate(n);(null===e||e.compareTo(i)>0)&&(e=i)}return e}}])}(),Lt=function(){function t(){n(this,t)}return s(t,null,[{key:\"toDimensionSymbol\",value:function(e){switch(e){case t.FALSE:return t.SYM_FALSE;case t.TRUE:return t.SYM_TRUE;case t.DONTCARE:return t.SYM_DONTCARE;case t.P:return t.SYM_P;case t.L:return t.SYM_L;case t.A:return t.SYM_A}throw new m(\"Unknown dimension value: \"+e)}},{key:\"toDimensionValue\",value:function(e){switch(ot.toUpperCase(e)){case t.SYM_FALSE:return t.FALSE;case t.SYM_TRUE:return t.TRUE;case t.SYM_DONTCARE:return t.DONTCARE;case t.SYM_P:return t.P;case t.SYM_L:return t.L;case t.SYM_A:return t.A}throw new m(\"Unknown dimension symbol: \"+e)}}])}();Lt.P=0,Lt.L=1,Lt.A=2,Lt.FALSE=-1,Lt.TRUE=-2,Lt.DONTCARE=-3,Lt.SYM_FALSE=\"F\",Lt.SYM_TRUE=\"T\",Lt.SYM_DONTCARE=\"*\",Lt.SYM_P=\"0\",Lt.SYM_L=\"1\",Lt.SYM_A=\"2\";var Ct=function(){return s((function t(){n(this,t)}),[{key:\"filter\",value:function(t){}}])}(),Rt=function(){return s((function t(){n(this,t)}),[{key:\"filter\",value:function(t,e){}},{key:\"isDone\",value:function(){}},{key:\"isGeometryChanged\",value:function(){}}])}(),wt=function(t){function i(){var t;return n(this,i),t=e(this,i),i.constructor_.apply(t,arguments),t}return l(i,t),s(i,[{key:\"computeEnvelopeInternal\",value:function(){return this.isEmpty()?new U:this._points.expandEnvelope(new U)}},{key:\"isRing\",value:function(){return this.isClosed()&&this.isSimple()}},{key:\"getCoordinates\",value:function(){return this._points.toCoordinateArray()}},{key:\"copyInternal\",value:function(){return new i(this._points.copy(),this._factory)}},{key:\"equalsExact\",value:function(){if(2===arguments.length&&\"number\"==typeof arguments[1]&&arguments[0]instanceof V){var t=arguments[0],e=arguments[1];if(!this.isEquivalentClass(t))return!1;var n=t;if(this._points.size()!==n._points.size())return!1;for(var r=0;r<this._points.size();r++)if(!this.equal(this._points.getCoordinate(r),n._points.getCoordinate(r),e))return!1;return!0}return f(i,\"equalsExact\",this,1).apply(this,arguments)}},{key:\"normalize\",value:function(){for(var t=0;t<Math.trunc(this._points.size()/2);t++){var e=this._points.size()-1-t;if(!this._points.getCoordinate(t).equals(this._points.getCoordinate(e))){if(this._points.getCoordinate(t).compareTo(this._points.getCoordinate(e))>0){var n=this._points.copy();St.reverse(n),this._points=n}return null}}}},{key:\"getCoordinate\",value:function(){return this.isEmpty()?null:this._points.getCoordinate(0)}},{key:\"getBoundaryDimension\",value:function(){return this.isClosed()?Lt.FALSE:0}},{key:\"isClosed\",value:function(){return!this.isEmpty()&&this.getCoordinateN(0).equals2D(this.getCoordinateN(this.getNumPoints()-1))}},{key:\"reverseInternal\",value:function(){var t=this._points.copy();return St.reverse(t),this.getFactory().createLineString(t)}},{key:\"getEndPoint\",value:function(){return this.isEmpty()?null:this.getPointN(this.getNumPoints()-1)}},{key:\"getTypeCode\",value:function(){return V.TYPECODE_LINESTRING}},{key:\"getDimension\",value:function(){return 1}},{key:\"getLength\",value:function(){return Nt.ofLine(this._points)}},{key:\"getNumPoints\",value:function(){return this._points.size()}},{key:\"compareToSameClass\",value:function(){if(1===arguments.length){for(var t=arguments[0],e=0,n=0;e<this._points.size()&&n<t._points.size();){var i=this._points.getCoordinate(e).compareTo(t._points.getCoordinate(n));if(0!==i)return i;e++,n++}return e<this._points.size()?1:n<t._points.size()?-1:0}if(2===arguments.length){var r=arguments[0];return arguments[1].compare(this._points,r._points)}}},{key:\"apply\",value:function(){if(rt(arguments[0],Et))for(var t=arguments[0],e=0;e<this._points.size();e++)t.filter(this._points.getCoordinate(e));else if(rt(arguments[0],Rt)){var n=arguments[0];if(0===this._points.size())return null;for(var i=0;i<this._points.size()&&(n.filter(this._points,i),!n.isDone());i++);n.isGeometryChanged()&&this.geometryChanged()}else if(rt(arguments[0],Ct)){arguments[0].filter(this)}else if(rt(arguments[0],k)){arguments[0].filter(this)}}},{key:\"getBoundary\",value:function(){throw new W}},{key:\"isEquivalentClass\",value:function(t){return t instanceof i}},{key:\"getCoordinateN\",value:function(t){return this._points.getCoordinate(t)}},{key:\"getGeometryType\",value:function(){return V.TYPENAME_LINESTRING}},{key:\"getCoordinateSequence\",value:function(){return this._points}},{key:\"isEmpty\",value:function(){return 0===this._points.size()}},{key:\"init\",value:function(t){if(null===t&&(t=this.getFactory().getCoordinateSequenceFactory().create([])),1===t.size())throw new m(\"Invalid number of points in LineString (found \"+t.size()+\" - must be 0 or >= 2)\");this._points=t}},{key:\"isCoordinate\",value:function(t){for(var e=0;e<this._points.size();e++)if(this._points.getCoordinate(e).equals(t))return!0;return!1}},{key:\"getStartPoint\",value:function(){return this.isEmpty()?null:this.getPointN(0)}},{key:\"getPointN\",value:function(t){return this.getFactory().createPoint(this._points.getCoordinate(t))}},{key:\"interfaces_\",get:function(){return[Tt]}}],[{key:\"constructor_\",value:function(){if(this._points=null,0===arguments.length);else if(2===arguments.length){var t=arguments[0],e=arguments[1];V.constructor_.call(this,e),this.init(t)}}}])}(V),Ot=s((function t(){n(this,t)})),bt=function(t){function i(){var t;return n(this,i),t=e(this,i),i.constructor_.apply(t,arguments),t}return l(i,t),s(i,[{key:\"computeEnvelopeInternal\",value:function(){if(this.isEmpty())return new U;var t=new U;return t.expandToInclude(this._coordinates.getX(0),this._coordinates.getY(0)),t}},{key:\"getCoordinates\",value:function(){return this.isEmpty()?[]:[this.getCoordinate()]}},{key:\"copyInternal\",value:function(){return new i(this._coordinates.copy(),this._factory)}},{key:\"equalsExact\",value:function(){if(2===arguments.length&&\"number\"==typeof arguments[1]&&arguments[0]instanceof V){var t=arguments[0],e=arguments[1];return!!this.isEquivalentClass(t)&&(!(!this.isEmpty()||!t.isEmpty())||this.isEmpty()===t.isEmpty()&&this.equal(t.getCoordinate(),this.getCoordinate(),e))}return f(i,\"equalsExact\",this,1).apply(this,arguments)}},{key:\"normalize\",value:function(){}},{key:\"getCoordinate\",value:function(){return 0!==this._coordinates.size()?this._coordinates.getCoordinate(0):null}},{key:\"getBoundaryDimension\",value:function(){return Lt.FALSE}},{key:\"reverseInternal\",value:function(){return this.getFactory().createPoint(this._coordinates.copy())}},{key:\"getTypeCode\",value:function(){return V.TYPECODE_POINT}},{key:\"getDimension\",value:function(){return 0}},{key:\"getNumPoints\",value:function(){return this.isEmpty()?0:1}},{key:\"getX\",value:function(){if(null===this.getCoordinate())throw new IllegalStateException(\"getX called on empty Point\");return this.getCoordinate().x}},{key:\"compareToSameClass\",value:function(){if(1===arguments.length){var t=arguments[0];return this.getCoordinate().compareTo(t.getCoordinate())}if(2===arguments.length){var e=arguments[0];return arguments[1].compare(this._coordinates,e._coordinates)}}},{key:\"apply\",value:function(){if(rt(arguments[0],Et)){var t=arguments[0];if(this.isEmpty())return null;t.filter(this.getCoordinate())}else if(rt(arguments[0],Rt)){var e=arguments[0];if(this.isEmpty())return null;e.filter(this._coordinates,0),e.isGeometryChanged()&&this.geometryChanged()}else if(rt(arguments[0],Ct)){arguments[0].filter(this)}else if(rt(arguments[0],k)){arguments[0].filter(this)}}},{key:\"getBoundary\",value:function(){return this.getFactory().createGeometryCollection()}},{key:\"getGeometryType\",value:function(){return V.TYPENAME_POINT}},{key:\"getCoordinateSequence\",value:function(){return this._coordinates}},{key:\"getY\",value:function(){if(null===this.getCoordinate())throw new IllegalStateException(\"getY called on empty Point\");return this.getCoordinate().y}},{key:\"isEmpty\",value:function(){return 0===this._coordinates.size()}},{key:\"init\",value:function(t){null===t&&(t=this.getFactory().getCoordinateSequenceFactory().create([])),G.isTrue(t.size()<=1),this._coordinates=t}},{key:\"isSimple\",value:function(){return!0}},{key:\"interfaces_\",get:function(){return[Ot]}}],[{key:\"constructor_\",value:function(){this._coordinates=null;var t=arguments[0],e=arguments[1];V.constructor_.call(this,e),this.init(t)}}])}(V),Mt=function(){function t(){n(this,t)}return s(t,null,[{key:\"ofRing\",value:function(){if(arguments[0]instanceof Array){var e=arguments[0];return Math.abs(t.ofRingSigned(e))}if(rt(arguments[0],ht)){var n=arguments[0];return Math.abs(t.ofRingSigned(n))}}},{key:\"ofRingSigned\",value:function(){if(arguments[0]instanceof Array){var t=arguments[0];if(t.length<3)return 0;for(var e=0,n=t[0].x,i=1;i<t.length-1;i++){var r=t[i].x-n,s=t[i+1].y;e+=r*(t[i-1].y-s)}return e/2}if(rt(arguments[0],ht)){var a=arguments[0],o=a.size();if(o<3)return 0;var u=new X,l=new X,h=new X;a.getCoordinate(0,l),a.getCoordinate(1,h);var c=l.x;h.x-=c;for(var f=0,g=1;g<o-1;g++)u.y=l.y,l.x=h.x,l.y=h.y,a.getCoordinate(g+1,h),h.x-=c,f+=l.x*(u.y-h.y);return f/2}}}])}(),At=function(){return s((function t(){n(this,t)}),null,[{key:\"sort\",value:function(){var t=arguments,e=arguments[0];if(1===arguments.length)e.sort((function(t,e){return t.compareTo(e)}));else if(2===arguments.length)e.sort((function(e,n){return t[1].compare(e,n)}));else if(3===arguments.length){var n=e.slice(arguments[1],arguments[2]);n.sort();var i=e.slice(0,arguments[1]).concat(n,e.slice(arguments[2],e.length));e.splice(0,e.length);var r,s=a(i);try{for(s.s();!(r=s.n()).done;){var o=r.value;e.push(o)}}catch(t){s.e(t)}finally{s.f()}}else if(4===arguments.length){var u=e.slice(arguments[1],arguments[2]);u.sort((function(e,n){return t[3].compare(e,n)}));var l=e.slice(0,arguments[1]).concat(u,e.slice(arguments[2],e.length));e.splice(0,e.length);var h,c=a(l);try{for(c.s();!(h=c.n()).done;){var f=h.value;e.push(f)}}catch(t){c.e(t)}finally{c.f()}}}},{key:\"asList\",value:function(t){var e,n=new yt,i=a(t);try{for(i.s();!(e=i.n()).done;){var r=e.value;n.add(r)}}catch(t){i.e(t)}finally{i.f()}return n}},{key:\"copyOf\",value:function(t,e){return t.slice(0,e)}}])}(),Pt=s((function t(){n(this,t)})),Dt=function(t){function i(){var t;return n(this,i),t=e(this,i),i.constructor_.apply(t,arguments),t}return l(i,t),s(i,[{key:\"computeEnvelopeInternal\",value:function(){return this._shell.getEnvelopeInternal()}},{key:\"getCoordinates\",value:function(){if(this.isEmpty())return[];for(var t=new Array(this.getNumPoints()).fill(null),e=-1,n=this._shell.getCoordinates(),i=0;i<n.length;i++)t[++e]=n[i];for(var r=0;r<this._holes.length;r++)for(var s=this._holes[r].getCoordinates(),a=0;a<s.length;a++)t[++e]=s[a];return t}},{key:\"getArea\",value:function(){var t=0;t+=Mt.ofRing(this._shell.getCoordinateSequence());for(var e=0;e<this._holes.length;e++)t-=Mt.ofRing(this._holes[e].getCoordinateSequence());return t}},{key:\"copyInternal\",value:function(){for(var t=this._shell.copy(),e=new Array(this._holes.length).fill(null),n=0;n<this._holes.length;n++)e[n]=this._holes[n].copy();return new i(t,e,this._factory)}},{key:\"isRectangle\",value:function(){if(0!==this.getNumInteriorRing())return!1;if(null===this._shell)return!1;if(5!==this._shell.getNumPoints())return!1;for(var t=this._shell.getCoordinateSequence(),e=this.getEnvelopeInternal(),n=0;n<5;n++){var i=t.getX(n);if(i!==e.getMinX()&&i!==e.getMaxX())return!1;var r=t.getY(n);if(r!==e.getMinY()&&r!==e.getMaxY())return!1}for(var s=t.getX(0),a=t.getY(0),o=1;o<=4;o++){var u=t.getX(o),l=t.getY(o);if(u!==s===(l!==a))return!1;s=u,a=l}return!0}},{key:\"equalsExact\",value:function(){if(2===arguments.length&&\"number\"==typeof arguments[1]&&arguments[0]instanceof V){var t=arguments[0],e=arguments[1];if(!this.isEquivalentClass(t))return!1;var n=t,r=this._shell,s=n._shell;if(!r.equalsExact(s,e))return!1;if(this._holes.length!==n._holes.length)return!1;for(var a=0;a<this._holes.length;a++)if(!this._holes[a].equalsExact(n._holes[a],e))return!1;return!0}return f(i,\"equalsExact\",this,1).apply(this,arguments)}},{key:\"normalize\",value:function(){if(0===arguments.length){this._shell=this.normalized(this._shell,!0);for(var t=0;t<this._holes.length;t++)this._holes[t]=this.normalized(this._holes[t],!1);At.sort(this._holes)}else if(2===arguments.length){var e=arguments[0],n=arguments[1];if(e.isEmpty())return null;var i=e.getCoordinateSequence(),r=St.minCoordinateIndex(i,0,i.size()-2);St.scroll(i,r,!0),ct.isCCW(i)===n&&St.reverse(i)}}},{key:\"getCoordinate\",value:function(){return this._shell.getCoordinate()}},{key:\"getNumInteriorRing\",value:function(){return this._holes.length}},{key:\"getBoundaryDimension\",value:function(){return 1}},{key:\"reverseInternal\",value:function(){for(var t=this.getExteriorRing().reverse(),e=new Array(this.getNumInteriorRing()).fill(null),n=0;n<e.length;n++)e[n]=this.getInteriorRingN(n).reverse();return this.getFactory().createPolygon(t,e)}},{key:\"getTypeCode\",value:function(){return V.TYPECODE_POLYGON}},{key:\"getDimension\",value:function(){return 2}},{key:\"getLength\",value:function(){var t=0;t+=this._shell.getLength();for(var e=0;e<this._holes.length;e++)t+=this._holes[e].getLength();return t}},{key:\"getNumPoints\",value:function(){for(var t=this._shell.getNumPoints(),e=0;e<this._holes.length;e++)t+=this._holes[e].getNumPoints();return t}},{key:\"convexHull\",value:function(){return this.getExteriorRing().convexHull()}},{key:\"normalized\",value:function(t,e){var n=t.copy();return this.normalize(n,e),n}},{key:\"compareToSameClass\",value:function(){if(1===arguments.length){var t=arguments[0],e=this._shell,n=t._shell;return e.compareToSameClass(n)}if(2===arguments.length){var i=arguments[1],r=arguments[0],s=this._shell,a=r._shell,o=s.compareToSameClass(a,i);if(0!==o)return o;for(var u=this.getNumInteriorRing(),l=r.getNumInteriorRing(),h=0;h<u&&h<l;){var c=this.getInteriorRingN(h),f=r.getInteriorRingN(h),g=c.compareToSameClass(f,i);if(0!==g)return g;h++}return h<u?1:h<l?-1:0}}},{key:\"apply\",value:function(){if(rt(arguments[0],Et)){var t=arguments[0];this._shell.apply(t);for(var e=0;e<this._holes.length;e++)this._holes[e].apply(t)}else if(rt(arguments[0],Rt)){var n=arguments[0];if(this._shell.apply(n),!n.isDone())for(var i=0;i<this._holes.length&&(this._holes[i].apply(n),!n.isDone());i++);n.isGeometryChanged()&&this.geometryChanged()}else if(rt(arguments[0],Ct)){arguments[0].filter(this)}else if(rt(arguments[0],k)){var r=arguments[0];r.filter(this),this._shell.apply(r);for(var s=0;s<this._holes.length;s++)this._holes[s].apply(r)}}},{key:\"getBoundary\",value:function(){if(this.isEmpty())return this.getFactory().createMultiLineString();var t=new Array(this._holes.length+1).fill(null);t[0]=this._shell;for(var e=0;e<this._holes.length;e++)t[e+1]=this._holes[e];return t.length<=1?this.getFactory().createLinearRing(t[0].getCoordinateSequence()):this.getFactory().createMultiLineString(t)}},{key:\"getGeometryType\",value:function(){return V.TYPENAME_POLYGON}},{key:\"getExteriorRing\",value:function(){return this._shell}},{key:\"isEmpty\",value:function(){return this._shell.isEmpty()}},{key:\"getInteriorRingN\",value:function(t){return this._holes[t]}},{key:\"interfaces_\",get:function(){return[Pt]}}],[{key:\"constructor_\",value:function(){this._shell=null,this._holes=null;var t=arguments[0],e=arguments[1],n=arguments[2];if(V.constructor_.call(this,n),null===t&&(t=this.getFactory().createLinearRing()),null===e&&(e=[]),V.hasNullElements(e))throw new m(\"holes must not contain null elements\");if(t.isEmpty()&&V.hasNonEmptyElements(e))throw new m(\"shell is empty but holes are not\");this._shell=t,this._holes=e}}])}(V),Ft=function(t){function i(){return n(this,i),e(this,i,arguments)}return l(i,t),s(i)}(K),Gt=function(t){function i(t){var r;return n(this,i),(r=e(this,i)).array=[],t instanceof Z&&r.addAll(t),r}return l(i,t),s(i,[{key:\"contains\",value:function(t){var e,n=a(this.array);try{for(n.s();!(e=n.n()).done;){if(0===e.value.compareTo(t))return!0}}catch(t){n.e(t)}finally{n.f()}return!1}},{key:\"add\",value:function(t){if(this.contains(t))return!1;for(var e=0,n=this.array.length;e<n;e++){if(1===this.array[e].compareTo(t))return!!this.array.splice(e,0,t)}return this.array.push(t),!0}},{key:\"addAll\",value:function(t){var e,n=a(t);try{for(n.s();!(e=n.n()).done;){var i=e.value;this.add(i)}}catch(t){n.e(t)}finally{n.f()}return!0}},{key:\"remove\",value:function(){throw new W}},{key:\"size\",value:function(){return this.array.length}},{key:\"isEmpty\",value:function(){return 0===this.array.length}},{key:\"toArray\",value:function(){return this.array.slice()}},{key:\"iterator\",value:function(){return new qt(this.array)}}])}(Ft),qt=function(){return s((function t(e){n(this,t),this.array=e,this.position=0}),[{key:\"next\",value:function(){if(this.position===this.array.length)throw new j;return this.array[this.position++]}},{key:\"hasNext\",value:function(){return this.position<this.array.length}},{key:\"remove\",value:function(){throw new W}}])}(),Yt=function(t){function i(){var t;return n(this,i),t=e(this,i),i.constructor_.apply(t,arguments),t}return l(i,t),s(i,[{key:\"computeEnvelopeInternal\",value:function(){for(var t=new U,e=0;e<this._geometries.length;e++)t.expandToInclude(this._geometries[e].getEnvelopeInternal());return t}},{key:\"getGeometryN\",value:function(t){return this._geometries[t]}},{key:\"getCoordinates\",value:function(){for(var t=new Array(this.getNumPoints()).fill(null),e=-1,n=0;n<this._geometries.length;n++)for(var i=this._geometries[n].getCoordinates(),r=0;r<i.length;r++)t[++e]=i[r];return t}},{key:\"getArea\",value:function(){for(var t=0,e=0;e<this._geometries.length;e++)t+=this._geometries[e].getArea();return t}},{key:\"copyInternal\",value:function(){for(var t=new Array(this._geometries.length).fill(null),e=0;e<t.length;e++)t[e]=this._geometries[e].copy();return new i(t,this._factory)}},{key:\"equalsExact\",value:function(){if(2===arguments.length&&\"number\"==typeof arguments[1]&&arguments[0]instanceof V){var t=arguments[0],e=arguments[1];if(!this.isEquivalentClass(t))return!1;var n=t;if(this._geometries.length!==n._geometries.length)return!1;for(var r=0;r<this._geometries.length;r++)if(!this._geometries[r].equalsExact(n._geometries[r],e))return!1;return!0}return f(i,\"equalsExact\",this,1).apply(this,arguments)}},{key:\"normalize\",value:function(){for(var t=0;t<this._geometries.length;t++)this._geometries[t].normalize();At.sort(this._geometries)}},{key:\"getCoordinate\",value:function(){return this.isEmpty()?null:this._geometries[0].getCoordinate()}},{key:\"getBoundaryDimension\",value:function(){for(var t=Lt.FALSE,e=0;e<this._geometries.length;e++)t=Math.max(t,this._geometries[e].getBoundaryDimension());return t}},{key:\"reverseInternal\",value:function(){for(var t=this._geometries.length,e=new yt(t),n=0;n<t;n++)e.add(this._geometries[n].reverse());return this.getFactory().buildGeometry(e)}},{key:\"getTypeCode\",value:function(){return V.TYPECODE_GEOMETRYCOLLECTION}},{key:\"getDimension\",value:function(){for(var t=Lt.FALSE,e=0;e<this._geometries.length;e++)t=Math.max(t,this._geometries[e].getDimension());return t}},{key:\"getLength\",value:function(){for(var t=0,e=0;e<this._geometries.length;e++)t+=this._geometries[e].getLength();return t}},{key:\"getNumPoints\",value:function(){for(var t=0,e=0;e<this._geometries.length;e++)t+=this._geometries[e].getNumPoints();return t}},{key:\"getNumGeometries\",value:function(){return this._geometries.length}},{key:\"compareToSameClass\",value:function(){if(1===arguments.length){var t=arguments[0],e=new Gt(At.asList(this._geometries)),n=new Gt(At.asList(t._geometries));return this.compare(e,n)}if(2===arguments.length){for(var i=arguments[1],r=arguments[0],s=this.getNumGeometries(),a=r.getNumGeometries(),o=0;o<s&&o<a;){var u=this.getGeometryN(o),l=r.getGeometryN(o),h=u.compareToSameClass(l,i);if(0!==h)return h;o++}return o<s?1:o<a?-1:0}}},{key:\"apply\",value:function(){if(rt(arguments[0],Et))for(var t=arguments[0],e=0;e<this._geometries.length;e++)this._geometries[e].apply(t);else if(rt(arguments[0],Rt)){var n=arguments[0];if(0===this._geometries.length)return null;for(var i=0;i<this._geometries.length&&(this._geometries[i].apply(n),!n.isDone());i++);n.isGeometryChanged()&&this.geometryChanged()}else if(rt(arguments[0],Ct)){var r=arguments[0];r.filter(this);for(var s=0;s<this._geometries.length;s++)this._geometries[s].apply(r)}else if(rt(arguments[0],k)){var a=arguments[0];a.filter(this);for(var o=0;o<this._geometries.length;o++)this._geometries[o].apply(a)}}},{key:\"getBoundary\",value:function(){return V.checkNotGeometryCollection(this),G.shouldNeverReachHere(),null}},{key:\"getGeometryType\",value:function(){return V.TYPENAME_GEOMETRYCOLLECTION}},{key:\"isEmpty\",value:function(){for(var t=0;t<this._geometries.length;t++)if(!this._geometries[t].isEmpty())return!1;return!0}}],[{key:\"constructor_\",value:function(){if(this._geometries=null,0===arguments.length);else if(2===arguments.length){var t=arguments[0],e=arguments[1];if(V.constructor_.call(this,e),null===t&&(t=[]),V.hasNullElements(t))throw new m(\"geometries must not contain null elements\");this._geometries=t}}}])}(V),zt=function(t){function i(){var t;return n(this,i),t=e(this,i),i.constructor_.apply(t,arguments),t}return l(i,t),s(i,[{key:\"copyInternal\",value:function(){for(var t=new Array(this._geometries.length).fill(null),e=0;e<t.length;e++)t[e]=this._geometries[e].copy();return new i(t,this._factory)}},{key:\"isValid\",value:function(){return!0}},{key:\"equalsExact\",value:function(){if(2===arguments.length&&\"number\"==typeof arguments[1]&&arguments[0]instanceof V){var t=arguments[0],e=arguments[1];return!!this.isEquivalentClass(t)&&f(i,\"equalsExact\",this,1).call(this,t,e)}return f(i,\"equalsExact\",this,1).apply(this,arguments)}},{key:\"getCoordinate\",value:function(){if(1===arguments.length&&Number.isInteger(arguments[0])){var t=arguments[0];return this._geometries[t].getCoordinate()}return f(i,\"getCoordinate\",this,1).apply(this,arguments)}},{key:\"getBoundaryDimension\",value:function(){return Lt.FALSE}},{key:\"getTypeCode\",value:function(){return V.TYPECODE_MULTIPOINT}},{key:\"getDimension\",value:function(){return 0}},{key:\"getBoundary\",value:function(){return this.getFactory().createGeometryCollection()}},{key:\"getGeometryType\",value:function(){return V.TYPENAME_MULTIPOINT}},{key:\"interfaces_\",get:function(){return[Ot]}}],[{key:\"constructor_\",value:function(){var t=arguments[0],e=arguments[1];Yt.constructor_.call(this,t,e)}}])}(Yt),Xt=function(t){function i(){var t;return n(this,i),t=e(this,i),i.constructor_.apply(t,arguments),t}return l(i,t),s(i,[{key:\"copyInternal\",value:function(){return new i(this._points.copy(),this._factory)}},{key:\"getBoundaryDimension\",value:function(){return Lt.FALSE}},{key:\"isClosed\",value:function(){return!!this.isEmpty()||f(i,\"isClosed\",this,1).call(this)}},{key:\"reverseInternal\",value:function(){var t=this._points.copy();return St.reverse(t),this.getFactory().createLinearRing(t)}},{key:\"getTypeCode\",value:function(){return V.TYPECODE_LINEARRING}},{key:\"validateConstruction\",value:function(){if(!this.isEmpty()&&!f(i,\"isClosed\",this,1).call(this))throw new m(\"Points of LinearRing do not form a closed linestring\");if(this.getCoordinateSequence().size()>=1&&this.getCoordinateSequence().size()<i.MINIMUM_VALID_SIZE)throw new m(\"Invalid number of points in LinearRing (found \"+this.getCoordinateSequence().size()+\" - must be 0 or >= 4)\")}},{key:\"getGeometryType\",value:function(){return V.TYPENAME_LINEARRING}}],[{key:\"constructor_\",value:function(){var t=arguments[0],e=arguments[1];wt.constructor_.call(this,t,e),this.validateConstruction()}}])}(wt);Xt.MINIMUM_VALID_SIZE=4;var Bt=function(t){function i(){var t;return n(this,i),t=e(this,i),i.constructor_.apply(t,arguments),t}return l(i,t),s(i,[{key:\"setOrdinate\",value:function(t,e){switch(t){case i.X:this.x=e;break;case i.Y:this.y=e;break;default:throw new m(\"Invalid ordinate index: \"+t)}}},{key:\"getZ\",value:function(){return X.NULL_ORDINATE}},{key:\"getOrdinate\",value:function(t){switch(t){case i.X:return this.x;case i.Y:return this.y}throw new m(\"Invalid ordinate index: \"+t)}},{key:\"setZ\",value:function(t){throw new m(\"CoordinateXY dimension 2 does not support z-ordinate\")}},{key:\"copy\",value:function(){return new i(this)}},{key:\"toString\",value:function(){return\"(\"+this.x+\", \"+this.y+\")\"}},{key:\"setCoordinate\",value:function(t){this.x=t.x,this.y=t.y,this.z=t.getZ()}}],[{key:\"constructor_\",value:function(){if(0===arguments.length)X.constructor_.call(this);else if(1===arguments.length){if(arguments[0]instanceof i){var t=arguments[0];X.constructor_.call(this,t.x,t.y)}else if(arguments[0]instanceof X){var e=arguments[0];X.constructor_.call(this,e.x,e.y)}}else if(2===arguments.length){var n=arguments[0],r=arguments[1];X.constructor_.call(this,n,r,X.NULL_ORDINATE)}}}])}(X);Bt.X=0,Bt.Y=1,Bt.Z=-1,Bt.M=-1;var Ut=function(t){function i(){var t;return n(this,i),t=e(this,i),i.constructor_.apply(t,arguments),t}return l(i,t),s(i,[{key:\"getM\",value:function(){return this._m}},{key:\"setOrdinate\",value:function(t,e){switch(t){case i.X:this.x=e;break;case i.Y:this.y=e;break;case i.M:this._m=e;break;default:throw new m(\"Invalid ordinate index: \"+t)}}},{key:\"setM\",value:function(t){this._m=t}},{key:\"getZ\",value:function(){return X.NULL_ORDINATE}},{key:\"getOrdinate\",value:function(t){switch(t){case i.X:return this.x;case i.Y:return this.y;case i.M:return this._m}throw new m(\"Invalid ordinate index: \"+t)}},{key:\"setZ\",value:function(t){throw new m(\"CoordinateXY dimension 2 does not support z-ordinate\")}},{key:\"copy\",value:function(){return new i(this)}},{key:\"toString\",value:function(){return\"(\"+this.x+\", \"+this.y+\" m=\"+this.getM()+\")\"}},{key:\"setCoordinate\",value:function(t){this.x=t.x,this.y=t.y,this.z=t.getZ(),this._m=t.getM()}}],[{key:\"constructor_\",value:function(){if(this._m=null,0===arguments.length)X.constructor_.call(this),this._m=0;else if(1===arguments.length){if(arguments[0]instanceof i){var t=arguments[0];X.constructor_.call(this,t.x,t.y),this._m=t._m}else if(arguments[0]instanceof X){var e=arguments[0];X.constructor_.call(this,e.x,e.y),this._m=this.getM()}}else if(3===arguments.length){var n=arguments[0],r=arguments[1],s=arguments[2];X.constructor_.call(this,n,r,X.NULL_ORDINATE),this._m=s}}}])}(X);Ut.X=0,Ut.Y=1,Ut.Z=-1,Ut.M=2;var Vt=function(t){function i(){var t;return n(this,i),t=e(this,i),i.constructor_.apply(t,arguments),t}return l(i,t),s(i,[{key:\"getM\",value:function(){return this._m}},{key:\"setOrdinate\",value:function(t,e){switch(t){case X.X:this.x=e;break;case X.Y:this.y=e;break;case X.Z:this.z=e;break;case X.M:this._m=e;break;default:throw new m(\"Invalid ordinate index: \"+t)}}},{key:\"setM\",value:function(t){this._m=t}},{key:\"getOrdinate\",value:function(t){switch(t){case X.X:return this.x;case X.Y:return this.y;case X.Z:return this.getZ();case X.M:return this.getM()}throw new m(\"Invalid ordinate index: \"+t)}},{key:\"copy\",value:function(){return new i(this)}},{key:\"toString\",value:function(){return\"(\"+this.x+\", \"+this.y+\", \"+this.getZ()+\" m=\"+this.getM()+\")\"}},{key:\"setCoordinate\",value:function(t){this.x=t.x,this.y=t.y,this.z=t.getZ(),this._m=t.getM()}}],[{key:\"constructor_\",value:function(){if(this._m=null,0===arguments.length)X.constructor_.call(this),this._m=0;else if(1===arguments.length){if(arguments[0]instanceof i){var t=arguments[0];X.constructor_.call(this,t),this._m=t._m}else if(arguments[0]instanceof X){var e=arguments[0];X.constructor_.call(this,e),this._m=this.getM()}}else if(4===arguments.length){var n=arguments[0],r=arguments[1],s=arguments[2],a=arguments[3];X.constructor_.call(this,n,r,s),this._m=a}}}])}(X),Ht=function(){function t(){n(this,t)}return s(t,null,[{key:\"measures\",value:function(t){return t instanceof Bt?0:t instanceof Ut||t instanceof Vt?1:0}},{key:\"dimension\",value:function(t){return t instanceof Bt?2:t instanceof Ut?3:t instanceof Vt?4:3}},{key:\"create\",value:function(){if(1===arguments.length){var e=arguments[0];return t.create(e,0)}if(2===arguments.length){var n=arguments[0],i=arguments[1];return 2===n?new Bt:3===n&&0===i?new X:3===n&&1===i?new Ut:4===n&&1===i?new Vt:new X}}}])}(),Zt=function(t){function i(){var t;return n(this,i),t=e(this,i),i.constructor_.apply(t,arguments),t}return l(i,t),s(i,[{key:\"getCoordinate\",value:function(t){return this.get(t)}},{key:\"addAll\",value:function(){if(2===arguments.length&&\"boolean\"==typeof arguments[1]&&rt(arguments[0],Z)){for(var t=arguments[1],e=!1,n=arguments[0].iterator();n.hasNext();)this.add(n.next(),t),e=!0;return e}return f(i,\"addAll\",this,1).apply(this,arguments)}},{key:\"clone\",value:function(){for(var t=f(i,\"clone\",this,1).call(this),e=0;e<this.size();e++)t.add(e,this.get(e).clone());return t}},{key:\"toCoordinateArray\",value:function(){if(0===arguments.length)return this.toArray(i.coordArrayType);if(1===arguments.length){if(arguments[0])return this.toArray(i.coordArrayType);for(var t=this.size(),e=new Array(t).fill(null),n=0;n<t;n++)e[n]=this.get(t-n-1);return e}}},{key:\"add\",value:function(){if(1===arguments.length){var t=arguments[0];return f(i,\"add\",this,1).call(this,t)}if(2===arguments.length){if(arguments[0]instanceof Array&&\"boolean\"==typeof arguments[1]){var e=arguments[0],n=arguments[1];return this.add(e,n,!0),!0}if(arguments[0]instanceof X&&\"boolean\"==typeof arguments[1]){var r=arguments[0];if(!arguments[1]&&this.size()>=1)if(this.get(this.size()-1).equals2D(r))return null;f(i,\"add\",this,1).call(this,r)}else if(arguments[0]instanceof Object&&\"boolean\"==typeof arguments[1]){var s=arguments[0],a=arguments[1];return this.add(s,a),!0}}else if(3===arguments.length){if(\"boolean\"==typeof arguments[2]&&arguments[0]instanceof Array&&\"boolean\"==typeof arguments[1]){var o=arguments[0],u=arguments[1];if(arguments[2])for(var l=0;l<o.length;l++)this.add(o[l],u);else for(var h=o.length-1;h>=0;h--)this.add(o[h],u);return!0}if(\"boolean\"==typeof arguments[2]&&Number.isInteger(arguments[0])&&arguments[1]instanceof X){var c=arguments[0],g=arguments[1];if(!arguments[2]){var v=this.size();if(v>0){if(c>0)if(this.get(c-1).equals2D(g))return null;if(c<v)if(this.get(c).equals2D(g))return null}}f(i,\"add\",this,1).call(this,c,g)}}else if(4===arguments.length){var y=arguments[0],d=arguments[1],_=arguments[2],p=arguments[3],m=1;_>p&&(m=-1);for(var k=_;k!==p;k+=m)this.add(y[k],d);return!0}}},{key:\"closeRing\",value:function(){if(this.size()>0){var t=this.get(0).copy();this.add(t,!1)}}}],[{key:\"constructor_\",value:function(){if(0===arguments.length);else if(1===arguments.length){var t=arguments[0];this.ensureCapacity(t.length),this.add(t,!0)}else if(2===arguments.length){var e=arguments[0],n=arguments[1];this.ensureCapacity(e.length),this.add(e,n)}}}])}(yt);Zt.coordArrayType=new Array(0).fill(null);var jt=function(){function t(){n(this,t)}return s(t,null,[{key:\"isRing\",value:function(t){return!(t.length<4)&&!!t[0].equals2D(t[t.length-1])}},{key:\"ptNotInList\",value:function(e,n){for(var i=0;i<e.length;i++){var r=e[i];if(t.indexOf(r,n)<0)return r}return null}},{key:\"scroll\",value:function(e,n){var i=t.indexOf(n,e);if(i<0)return null;var r=new Array(e.length).fill(null);mt.arraycopy(e,i,r,0,e.length-i),mt.arraycopy(e,0,r,e.length-i,i),mt.arraycopy(r,0,e,0,e.length)}},{key:\"equals\",value:function(){if(2===arguments.length){var t=arguments[0],e=arguments[1];if(t===e)return!0;if(null===t||null===e)return!1;if(t.length!==e.length)return!1;for(var n=0;n<t.length;n++)if(!t[n].equals(e[n]))return!1;return!0}if(3===arguments.length){var i=arguments[0],r=arguments[1],s=arguments[2];if(i===r)return!0;if(null===i||null===r)return!1;if(i.length!==r.length)return!1;for(var a=0;a<i.length;a++)if(0!==s.compare(i[a],r[a]))return!1;return!0}}},{key:\"intersection\",value:function(t,e){for(var n=new Zt,i=0;i<t.length;i++)e.intersects(t[i])&&n.add(t[i],!0);return n.toCoordinateArray()}},{key:\"measures\",value:function(t){if(null===t||0===t.length)return 0;var e,n=0,i=a(t);try{for(i.s();!(e=i.n()).done;){var r=e.value;n=Math.max(n,Ht.measures(r))}}catch(t){i.e(t)}finally{i.f()}return n}},{key:\"hasRepeatedPoints\",value:function(t){for(var e=1;e<t.length;e++)if(t[e-1].equals(t[e]))return!0;return!1}},{key:\"removeRepeatedPoints\",value:function(e){return t.hasRepeatedPoints(e)?new Zt(e,!1).toCoordinateArray():e}},{key:\"reverse\",value:function(t){for(var e=t.length-1,n=Math.trunc(e/2),i=0;i<=n;i++){var r=t[i];t[i]=t[e-i],t[e-i]=r}}},{key:\"removeNull\",value:function(t){for(var e=0,n=0;n<t.length;n++)null!==t[n]&&e++;var i=new Array(e).fill(null);if(0===e)return i;for(var r=0,s=0;s<t.length;s++)null!==t[s]&&(i[r++]=t[s]);return i}},{key:\"copyDeep\",value:function(){if(1===arguments.length){for(var t=arguments[0],e=new Array(t.length).fill(null),n=0;n<t.length;n++)e[n]=t[n].copy();return e}if(5===arguments.length)for(var i=arguments[0],r=arguments[1],s=arguments[2],a=arguments[3],o=arguments[4],u=0;u<o;u++)s[a+u]=i[r+u].copy()}},{key:\"isEqualReversed\",value:function(t,e){for(var n=0;n<t.length;n++){var i=t[n],r=e[t.length-n-1];if(0!==i.compareTo(r))return!1}return!0}},{key:\"envelope\",value:function(t){for(var e=new U,n=0;n<t.length;n++)e.expandToInclude(t[n]);return e}},{key:\"toCoordinateArray\",value:function(e){return e.toArray(t.coordArrayType)}},{key:\"dimension\",value:function(t){if(null===t||0===t.length)return 3;var e,n=0,i=a(t);try{for(i.s();!(e=i.n()).done;){var r=e.value;n=Math.max(n,Ht.dimension(r))}}catch(t){i.e(t)}finally{i.f()}return n}},{key:\"atLeastNCoordinatesOrNothing\",value:function(t,e){return e.length>=t?e:[]}},{key:\"indexOf\",value:function(t,e){for(var n=0;n<e.length;n++)if(t.equals(e[n]))return n;return-1}},{key:\"increasingDirection\",value:function(t){for(var e=0;e<Math.trunc(t.length/2);e++){var n=t.length-1-e,i=t[e].compareTo(t[n]);if(0!==i)return i}return 1}},{key:\"compare\",value:function(t,e){for(var n=0;n<t.length&&n<e.length;){var i=t[n].compareTo(e[n]);if(0!==i)return i;n++}return n<e.length?-1:n<t.length?1:0}},{key:\"minCoordinate\",value:function(t){for(var e=null,n=0;n<t.length;n++)(null===e||e.compareTo(t[n])>0)&&(e=t[n]);return e}},{key:\"extract\",value:function(t,e,n){e=kt.clamp(e,0,t.length);var i=(n=kt.clamp(n,-1,t.length))-e+1;n<0&&(i=0),e>=t.length&&(i=0),n<e&&(i=0);var r=new Array(i).fill(null);if(0===i)return r;for(var s=0,a=e;a<=n;a++)r[s++]=t[a];return r}}])}(),Wt=function(){return s((function t(){n(this,t)}),[{key:\"compare\",value:function(t,e){var n=t,i=e;return jt.compare(n,i)}},{key:\"interfaces_\",get:function(){return[P]}}])}(),Kt=function(){return s((function t(){n(this,t)}),[{key:\"compare\",value:function(t,e){var n=t,i=e;if(n.length<i.length)return-1;if(n.length>i.length)return 1;if(0===n.length)return 0;var r=jt.compare(n,i);return jt.isEqualReversed(n,i)?0:r}},{key:\"OLDcompare\",value:function(t,e){var n=t,i=e;if(n.length<i.length)return-1;if(n.length>i.length)return 1;if(0===n.length)return 0;for(var r=jt.increasingDirection(n),s=jt.increasingDirection(i),a=r>0?0:n.length-1,o=s>0?0:n.length-1,u=0;u<n.length;u++){var l=n[a].compareTo(i[o]);if(0!==l)return l;a+=r,o+=s}return 0}},{key:\"interfaces_\",get:function(){return[P]}}])}();jt.ForwardComparator=Wt,jt.BidirectionalComparator=Kt,jt.coordArrayType=new Array(0).fill(null);var Jt=function(){return s((function t(e){n(this,t),this.str=e}),[{key:\"append\",value:function(t){this.str+=t}},{key:\"setCharAt\",value:function(t,e){this.str=this.str.substr(0,t)+e+this.str.substr(t+1)}},{key:\"toString\",value:function(){return this.str}}])}(),Qt=function(){function t(){n(this,t),t.constructor_.apply(this,arguments)}return s(t,[{key:\"getM\",value:function(t){return this.hasM()?this._coordinates[t].getM():A.NaN}},{key:\"setOrdinate\",value:function(t,e,n){switch(e){case ht.X:this._coordinates[t].x=n;break;case ht.Y:this._coordinates[t].y=n;break;default:this._coordinates[t].setOrdinate(e,n)}}},{key:\"getZ\",value:function(t){return this.hasZ()?this._coordinates[t].getZ():A.NaN}},{key:\"size\",value:function(){return this._coordinates.length}},{key:\"getOrdinate\",value:function(t,e){switch(e){case ht.X:return this._coordinates[t].x;case ht.Y:return this._coordinates[t].y;default:return this._coordinates[t].getOrdinate(e)}}},{key:\"getCoordinate\",value:function(){if(1===arguments.length){var t=arguments[0];return this._coordinates[t]}if(2===arguments.length){var e=arguments[0];arguments[1].setCoordinate(this._coordinates[e])}}},{key:\"getCoordinateCopy\",value:function(t){var e=this.createCoordinate();return e.setCoordinate(this._coordinates[t]),e}},{key:\"createCoordinate\",value:function(){return Ht.create(this.getDimension(),this.getMeasures())}},{key:\"getDimension\",value:function(){return this._dimension}},{key:\"getX\",value:function(t){return this._coordinates[t].x}},{key:\"getMeasures\",value:function(){return this._measures}},{key:\"expandEnvelope\",value:function(t){for(var e=0;e<this._coordinates.length;e++)t.expandToInclude(this._coordinates[e]);return t}},{key:\"copy\",value:function(){for(var e=new Array(this.size()).fill(null),n=0;n<this._coordinates.length;n++){var i=this.createCoordinate();i.setCoordinate(this._coordinates[n]),e[n]=i}return new t(e,this._dimension,this._measures)}},{key:\"toString\",value:function(){if(this._coordinates.length>0){var t=new Jt(17*this._coordinates.length);t.append(\"(\"),t.append(this._coordinates[0]);for(var e=1;e<this._coordinates.length;e++)t.append(\", \"),t.append(this._coordinates[e]);return t.append(\")\"),t.toString()}return\"()\"}},{key:\"getY\",value:function(t){return this._coordinates[t].y}},{key:\"toCoordinateArray\",value:function(){return this._coordinates}},{key:\"interfaces_\",get:function(){return[ht,E]}}],[{key:\"constructor_\",value:function(){if(this._dimension=3,this._measures=0,this._coordinates=null,1===arguments.length){if(arguments[0]instanceof Array){var e=arguments[0];t.constructor_.call(this,e,jt.dimension(e),jt.measures(e))}else if(Number.isInteger(arguments[0])){var n=arguments[0];this._coordinates=new Array(n).fill(null);for(var i=0;i<n;i++)this._coordinates[i]=new X}else if(rt(arguments[0],ht)){var r=arguments[0];if(null===r)return this._coordinates=new Array(0).fill(null),null;this._dimension=r.getDimension(),this._measures=r.getMeasures(),this._coordinates=new Array(r.size()).fill(null);for(var s=0;s<this._coordinates.length;s++)this._coordinates[s]=r.getCoordinateCopy(s)}}else if(2===arguments.length){if(arguments[0]instanceof Array&&Number.isInteger(arguments[1])){var a=arguments[0],o=arguments[1];t.constructor_.call(this,a,o,jt.measures(a))}else if(Number.isInteger(arguments[0])&&Number.isInteger(arguments[1])){var u=arguments[0],l=arguments[1];this._coordinates=new Array(u).fill(null),this._dimension=l;for(var h=0;h<u;h++)this._coordinates[h]=Ht.create(l)}}else if(3===arguments.length)if(Number.isInteger(arguments[2])&&arguments[0]instanceof Array&&Number.isInteger(arguments[1])){var c=arguments[0],f=arguments[1],g=arguments[2];this._dimension=f,this._measures=g,this._coordinates=null===c?new Array(0).fill(null):c}else if(Number.isInteger(arguments[2])&&Number.isInteger(arguments[0])&&Number.isInteger(arguments[1])){var v=arguments[0],y=arguments[1],d=arguments[2];this._coordinates=new Array(v).fill(null),this._dimension=y,this._measures=d;for(var _=0;_<v;_++)this._coordinates[_]=this.createCoordinate()}}}])}(),$t=function(){function t(){n(this,t)}return s(t,[{key:\"readResolve\",value:function(){return t.instance()}},{key:\"create\",value:function(){if(1===arguments.length){if(arguments[0]instanceof Array)return new Qt(arguments[0]);if(rt(arguments[0],ht))return new Qt(arguments[0])}else{if(2===arguments.length){var t=arguments[1];return t>3&&(t=3),t<2&&(t=2),new Qt(arguments[0],t)}if(3===arguments.length){var e=arguments[2],n=arguments[1]-e;return e>1&&(e=1),n>3&&(n=3),n<2&&(n=2),new Qt(arguments[0],n+e,e)}}}},{key:\"interfaces_\",get:function(){return[It,E]}}],[{key:\"instance\",value:function(){return t.instanceObject}}])}();$t.instanceObject=new $t;var te=function(t){function i(){var t;return n(this,i),t=e(this,i),i.constructor_.apply(t,arguments),t}return l(i,t),s(i,[{key:\"copyInternal\",value:function(){for(var t=new Array(this._geometries.length).fill(null),e=0;e<t.length;e++)t[e]=this._geometries[e].copy();return new i(t,this._factory)}},{key:\"equalsExact\",value:function(){if(2===arguments.length&&\"number\"==typeof arguments[1]&&arguments[0]instanceof V){var t=arguments[0],e=arguments[1];return!!this.isEquivalentClass(t)&&f(i,\"equalsExact\",this,1).call(this,t,e)}return f(i,\"equalsExact\",this,1).apply(this,arguments)}},{key:\"getBoundaryDimension\",value:function(){return 1}},{key:\"getTypeCode\",value:function(){return V.TYPECODE_MULTIPOLYGON}},{key:\"getDimension\",value:function(){return 2}},{key:\"getBoundary\",value:function(){if(this.isEmpty())return this.getFactory().createMultiLineString();for(var t=new yt,e=0;e<this._geometries.length;e++)for(var n=this._geometries[e].getBoundary(),i=0;i<n.getNumGeometries();i++)t.add(n.getGeometryN(i));var r=new Array(t.size()).fill(null);return this.getFactory().createMultiLineString(t.toArray(r))}},{key:\"getGeometryType\",value:function(){return V.TYPENAME_MULTIPOLYGON}},{key:\"interfaces_\",get:function(){return[Pt]}}],[{key:\"constructor_\",value:function(){var t=arguments[0],e=arguments[1];Yt.constructor_.call(this,t,e)}}])}(Yt),ee=function(){return s((function t(){n(this,t)}),[{key:\"get\",value:function(){}},{key:\"put\",value:function(){}},{key:\"size\",value:function(){}},{key:\"values\",value:function(){}},{key:\"entrySet\",value:function(){}}])}(),ne=function(t){function i(){var t;return n(this,i),(t=e(this,i)).map=new Map,t}return l(i,t),s(i,[{key:\"get\",value:function(t){return this.map.get(t)||null}},{key:\"put\",value:function(t,e){return this.map.set(t,e),e}},{key:\"values\",value:function(){for(var t=new yt,e=this.map.values(),n=e.next();!n.done;)t.add(n.value),n=e.next();return t}},{key:\"entrySet\",value:function(){var t=new J;return this.map.entries().forEach((function(e){return t.add(e)})),t}},{key:\"size\",value:function(){return this.map.size()}}])}(ee),ie=function(){function t(){n(this,t),t.constructor_.apply(this,arguments)}return s(t,[{key:\"equals\",value:function(e){if(!(e instanceof t))return!1;var n=e;return this._modelType===n._modelType&&this._scale===n._scale}},{key:\"compareTo\",value:function(t){var e=t,n=this.getMaximumSignificantDigits(),i=e.getMaximumSignificantDigits();return at.compare(n,i)}},{key:\"getScale\",value:function(){return this._scale}},{key:\"isFloating\",value:function(){return this._modelType===t.FLOATING||this._modelType===t.FLOATING_SINGLE}},{key:\"getType\",value:function(){return this._modelType}},{key:\"toString\",value:function(){var e=\"UNKNOWN\";return this._modelType===t.FLOATING?e=\"Floating\":this._modelType===t.FLOATING_SINGLE?e=\"Floating-Single\":this._modelType===t.FIXED&&(e=\"Fixed (Scale=\"+this.getScale()+\")\"),e}},{key:\"makePrecise\",value:function(){if(\"number\"==typeof arguments[0]){var e=arguments[0];return A.isNaN(e)||this._modelType===t.FLOATING_SINGLE?e:this._modelType===t.FIXED?Math.round(e*this._scale)/this._scale:e}if(arguments[0]instanceof X){var n=arguments[0];if(this._modelType===t.FLOATING)return null;n.x=this.makePrecise(n.x),n.y=this.makePrecise(n.y)}}},{key:\"getMaximumSignificantDigits\",value:function(){var e=16;return this._modelType===t.FLOATING?e=16:this._modelType===t.FLOATING_SINGLE?e=6:this._modelType===t.FIXED&&(e=1+Math.trunc(Math.ceil(Math.log(this.getScale())/Math.log(10)))),e}},{key:\"setScale\",value:function(t){this._scale=Math.abs(t)}},{key:\"interfaces_\",get:function(){return[E,x]}}],[{key:\"constructor_\",value:function(){if(this._modelType=null,this._scale=null,0===arguments.length)this._modelType=t.FLOATING;else if(1===arguments.length)if(arguments[0]instanceof re){var e=arguments[0];this._modelType=e,e===t.FIXED&&this.setScale(1)}else if(\"number\"==typeof arguments[0]){var n=arguments[0];this._modelType=t.FIXED,this.setScale(n)}else if(arguments[0]instanceof t){var i=arguments[0];this._modelType=i._modelType,this._scale=i._scale}}},{key:\"mostPrecise\",value:function(t,e){return t.compareTo(e)>=0?t:e}}])}(),re=function(){function t(){n(this,t),t.constructor_.apply(this,arguments)}return s(t,[{key:\"readResolve\",value:function(){return t.nameToTypeMap.get(this._name)}},{key:\"toString\",value:function(){return this._name}},{key:\"interfaces_\",get:function(){return[E]}}],[{key:\"constructor_\",value:function(){this._name=null;var e=arguments[0];this._name=e,t.nameToTypeMap.put(e,this)}}])}();re.nameToTypeMap=new ne,ie.Type=re,ie.FIXED=new re(\"FIXED\"),ie.FLOATING=new re(\"FLOATING\"),ie.FLOATING_SINGLE=new re(\"FLOATING SINGLE\"),ie.maximumPreciseValue=9007199254740992;var se=function(t){function i(){var t;return n(this,i),t=e(this,i),i.constructor_.apply(t,arguments),t}return l(i,t),s(i,[{key:\"copyInternal\",value:function(){for(var t=new Array(this._geometries.length).fill(null),e=0;e<t.length;e++)t[e]=this._geometries[e].copy();return new i(t,this._factory)}},{key:\"equalsExact\",value:function(){if(2===arguments.length&&\"number\"==typeof arguments[1]&&arguments[0]instanceof V){var t=arguments[0],e=arguments[1];return!!this.isEquivalentClass(t)&&f(i,\"equalsExact\",this,1).call(this,t,e)}return f(i,\"equalsExact\",this,1).apply(this,arguments)}},{key:\"getBoundaryDimension\",value:function(){return this.isClosed()?Lt.FALSE:0}},{key:\"isClosed\",value:function(){if(this.isEmpty())return!1;for(var t=0;t<this._geometries.length;t++)if(!this._geometries[t].isClosed())return!1;return!0}},{key:\"getTypeCode\",value:function(){return V.TYPECODE_MULTILINESTRING}},{key:\"getDimension\",value:function(){return 1}},{key:\"getBoundary\",value:function(){throw new W}},{key:\"getGeometryType\",value:function(){return V.TYPENAME_MULTILINESTRING}},{key:\"interfaces_\",get:function(){return[Tt]}}],[{key:\"constructor_\",value:function(){var t=arguments[0],e=arguments[1];Yt.constructor_.call(this,t,e)}}])}(Yt),ae=function(){function t(){n(this,t),t.constructor_.apply(this,arguments)}return s(t,[{key:\"createEmpty\",value:function(t){switch(t){case-1:return this.createGeometryCollection();case 0:return this.createPoint();case 1:return this.createLineString();case 2:return this.createPolygon();default:throw new m(\"Invalid dimension: \"+t)}}},{key:\"toGeometry\",value:function(t){return t.isNull()?this.createPoint():t.getMinX()===t.getMaxX()&&t.getMinY()===t.getMaxY()?this.createPoint(new X(t.getMinX(),t.getMinY())):t.getMinX()===t.getMaxX()||t.getMinY()===t.getMaxY()?this.createLineString([new X(t.getMinX(),t.getMinY()),new X(t.getMaxX(),t.getMaxY())]):this.createPolygon(this.createLinearRing([new X(t.getMinX(),t.getMinY()),new X(t.getMinX(),t.getMaxY()),new X(t.getMaxX(),t.getMaxY()),new X(t.getMaxX(),t.getMinY()),new X(t.getMinX(),t.getMinY())]),null)}},{key:\"createLineString\",value:function(){if(0===arguments.length)return this.createLineString(this.getCoordinateSequenceFactory().create([]));if(1===arguments.length){if(arguments[0]instanceof Array){var t=arguments[0];return this.createLineString(null!==t?this.getCoordinateSequenceFactory().create(t):null)}if(rt(arguments[0],ht))return new wt(arguments[0],this)}}},{key:\"createMultiLineString\",value:function(){return 0===arguments.length?new se(null,this):1===arguments.length?new se(arguments[0],this):void 0}},{key:\"buildGeometry\",value:function(e){for(var n=null,i=!1,r=!1,s=e.iterator();s.hasNext();){var a=s.next(),o=a.getTypeCode();null===n&&(n=o),o!==n&&(i=!0),a instanceof Yt&&(r=!0)}if(null===n)return this.createGeometryCollection();if(i||r)return this.createGeometryCollection(t.toGeometryArray(e));var u=e.iterator().next();if(e.size()>1){if(u instanceof Dt)return this.createMultiPolygon(t.toPolygonArray(e));if(u instanceof wt)return this.createMultiLineString(t.toLineStringArray(e));if(u instanceof bt)return this.createMultiPoint(t.toPointArray(e));G.shouldNeverReachHere(\"Unhandled geometry type: \"+u.getGeometryType())}return u}},{key:\"createMultiPointFromCoords\",value:function(t){return this.createMultiPoint(null!==t?this.getCoordinateSequenceFactory().create(t):null)}},{key:\"createPoint\",value:function(){if(0===arguments.length)return this.createPoint(this.getCoordinateSequenceFactory().create([]));if(1===arguments.length){if(arguments[0]instanceof X){var t=arguments[0];return this.createPoint(null!==t?this.getCoordinateSequenceFactory().create([t]):null)}if(rt(arguments[0],ht))return new bt(arguments[0],this)}}},{key:\"getCoordinateSequenceFactory\",value:function(){return this._coordinateSequenceFactory}},{key:\"createPolygon\",value:function(){if(0===arguments.length)return this.createPolygon(null,null);if(1===arguments.length){if(rt(arguments[0],ht)){var t=arguments[0];return this.createPolygon(this.createLinearRing(t))}if(arguments[0]instanceof Array){var e=arguments[0];return this.createPolygon(this.createLinearRing(e))}if(arguments[0]instanceof Xt){var n=arguments[0];return this.createPolygon(n,null)}}else if(2===arguments.length){return new Dt(arguments[0],arguments[1],this)}}},{key:\"getSRID\",value:function(){return this._SRID}},{key:\"createGeometryCollection\",value:function(){return 0===arguments.length?new Yt(null,this):1===arguments.length?new Yt(arguments[0],this):void 0}},{key:\"getPrecisionModel\",value:function(){return this._precisionModel}},{key:\"createLinearRing\",value:function(){if(0===arguments.length)return this.createLinearRing(this.getCoordinateSequenceFactory().create([]));if(1===arguments.length){if(arguments[0]instanceof Array){var t=arguments[0];return this.createLinearRing(null!==t?this.getCoordinateSequenceFactory().create(t):null)}if(rt(arguments[0],ht))return new Xt(arguments[0],this)}}},{key:\"createMultiPolygon\",value:function(){return 0===arguments.length?new te(null,this):1===arguments.length?new te(arguments[0],this):void 0}},{key:\"createMultiPoint\",value:function(){if(0===arguments.length)return new zt(null,this);if(1===arguments.length){if(arguments[0]instanceof Array)return new zt(arguments[0],this);if(rt(arguments[0],ht)){var t=arguments[0];if(null===t)return this.createMultiPoint(new Array(0).fill(null));for(var e=new Array(t.size()).fill(null),n=0;n<t.size();n++){var i=this.getCoordinateSequenceFactory().create(1,t.getDimension(),t.getMeasures());St.copy(t,n,i,0,1),e[n]=this.createPoint(i)}return this.createMultiPoint(e)}}}},{key:\"interfaces_\",get:function(){return[E]}}],[{key:\"constructor_\",value:function(){if(this._precisionModel=null,this._coordinateSequenceFactory=null,this._SRID=null,0===arguments.length)t.constructor_.call(this,new ie,0);else if(1===arguments.length){if(rt(arguments[0],It)){var e=arguments[0];t.constructor_.call(this,new ie,0,e)}else if(arguments[0]instanceof ie){var n=arguments[0];t.constructor_.call(this,n,0,t.getDefaultCoordinateSequenceFactory())}}else if(2===arguments.length){var i=arguments[0],r=arguments[1];t.constructor_.call(this,i,r,t.getDefaultCoordinateSequenceFactory())}else if(3===arguments.length){var s=arguments[0],a=arguments[1],o=arguments[2];this._precisionModel=s,this._coordinateSequenceFactory=o,this._SRID=a}}},{key:\"toMultiPolygonArray\",value:function(t){var e=new Array(t.size()).fill(null);return t.toArray(e)}},{key:\"toGeometryArray\",value:function(t){if(null===t)return null;var e=new Array(t.size()).fill(null);return t.toArray(e)}},{key:\"getDefaultCoordinateSequenceFactory\",value:function(){return $t.instance()}},{key:\"toMultiLineStringArray\",value:function(t){var e=new Array(t.size()).fill(null);return t.toArray(e)}},{key:\"toLineStringArray\",value:function(t){var e=new Array(t.size()).fill(null);return t.toArray(e)}},{key:\"toMultiPointArray\",value:function(t){var e=new Array(t.size()).fill(null);return t.toArray(e)}},{key:\"toLinearRingArray\",value:function(t){var e=new Array(t.size()).fill(null);return t.toArray(e)}},{key:\"toPointArray\",value:function(t){var e=new Array(t.size()).fill(null);return t.toArray(e)}},{key:\"toPolygonArray\",value:function(t){var e=new Array(t.size()).fill(null);return t.toArray(e)}},{key:\"createPointFromInternalCoord\",value:function(t,e){return e.getPrecisionModel().makePrecise(t),e.getFactory().createPoint(t)}}])}(),oe=\"XY\",ue=\"XYZ\",le=\"XYM\",he=\"XYZM\",ce={POINT:\"Point\",LINE_STRING:\"LineString\",LINEAR_RING:\"LinearRing\",POLYGON:\"Polygon\",MULTI_POINT:\"MultiPoint\",MULTI_LINE_STRING:\"MultiLineString\",MULTI_POLYGON:\"MultiPolygon\",GEOMETRY_COLLECTION:\"GeometryCollection\",CIRCLE:\"Circle\"},fe=\"EMPTY\",ge=1,ve=2,ye=3,de=4,_e=5,pe=6;for(var me in ce)ce[me].toUpperCase();var ke=function(){return s((function t(e){n(this,t),this.wkt=e,this.index_=-1}),[{key:\"isAlpha_\",value:function(t){return t>=\"a\"&&t<=\"z\"||t>=\"A\"&&t<=\"Z\"}},{key:\"isNumeric_\",value:function(t,e){return t>=\"0\"&&t<=\"9\"||\".\"==t&&!(void 0!==e&&e)}},{key:\"isWhiteSpace_\",value:function(t){return\" \"==t||\"\\t\"==t||\"\\r\"==t||\"\\n\"==t}},{key:\"nextChar_\",value:function(){return this.wkt.charAt(++this.index_)}},{key:\"nextToken\",value:function(){var t,e=this.nextChar_(),n=this.index_,i=e;if(\"(\"==e)t=ve;else if(\",\"==e)t=_e;else if(\")\"==e)t=ye;else if(this.isNumeric_(e)||\"-\"==e)t=de,i=this.readNumber_();else if(this.isAlpha_(e))t=ge,i=this.readText_();else{if(this.isWhiteSpace_(e))return this.nextToken();if(\"\"!==e)throw new Error(\"Unexpected character: \"+e);t=pe}return{position:n,value:i,type:t}}},{key:\"readNumber_\",value:function(){var t,e=this.index_,n=!1,i=!1;do{\".\"==t?n=!0:\"e\"!=t&&\"E\"!=t||(i=!0),t=this.nextChar_()}while(this.isNumeric_(t,n)||!i&&(\"e\"==t||\"E\"==t)||i&&(\"-\"==t||\"+\"==t));return parseFloat(this.wkt.substring(e,this.index_--))}},{key:\"readText_\",value:function(){var t,e=this.index_;do{t=this.nextChar_()}while(this.isAlpha_(t));return this.wkt.substring(e,this.index_--).toUpperCase()}}])}(),xe=function(){return s((function t(e,i){n(this,t),this.lexer_=e,this.token_,this.layout_=oe,this.factory=i}),[{key:\"consume_\",value:function(){this.token_=this.lexer_.nextToken()}},{key:\"isTokenType\",value:function(t){return this.token_.type==t}},{key:\"match\",value:function(t){var e=this.isTokenType(t);return e&&this.consume_(),e}},{key:\"parse\",value:function(){return this.consume_(),this.parseGeometry_()}},{key:\"parseGeometryLayout_\",value:function(){var t=oe,e=this.token_;if(this.isTokenType(ge)){var n=e.value;\"Z\"===n?t=ue:\"M\"===n?t=le:\"ZM\"===n&&(t=he),t!==oe&&this.consume_()}return t}},{key:\"parseGeometryCollectionText_\",value:function(){if(this.match(ve)){var t=[];do{t.push(this.parseGeometry_())}while(this.match(_e));if(this.match(ye))return t}else if(this.isEmptyGeometry_())return[];throw new Error(this.formatErrorMessage_())}},{key:\"parsePointText_\",value:function(){if(this.match(ve)){var t=this.parsePoint_();if(this.match(ye))return t}else if(this.isEmptyGeometry_())return null;throw new Error(this.formatErrorMessage_())}},{key:\"parseLineStringText_\",value:function(){if(this.match(ve)){var t=this.parsePointList_();if(this.match(ye))return t}else if(this.isEmptyGeometry_())return[];throw new Error(this.formatErrorMessage_())}},{key:\"parsePolygonText_\",value:function(){if(this.match(ve)){var t=this.parseLineStringTextList_();if(this.match(ye))return t}else if(this.isEmptyGeometry_())return[];throw new Error(this.formatErrorMessage_())}},{key:\"parseMultiPointText_\",value:function(){var t;if(this.match(ve)){if(t=this.token_.type==ve?this.parsePointTextList_():this.parsePointList_(),this.match(ye))return t}else if(this.isEmptyGeometry_())return[];throw new Error(this.formatErrorMessage_())}},{key:\"parseMultiLineStringText_\",value:function(){if(this.match(ve)){var t=this.parseLineStringTextList_();if(this.match(ye))return t}else if(this.isEmptyGeometry_())return[];throw new Error(this.formatErrorMessage_())}},{key:\"parseMultiPolygonText_\",value:function(){if(this.match(ve)){var t=this.parsePolygonTextList_();if(this.match(ye))return t}else if(this.isEmptyGeometry_())return[];throw new Error(this.formatErrorMessage_())}},{key:\"parsePoint_\",value:function(){for(var t=[],e=this.layout_.length,n=0;n<e;++n){var i=this.token_;if(!this.match(de))break;t.push(i.value)}if(t.length==e)return t;throw new Error(this.formatErrorMessage_())}},{key:\"parsePointList_\",value:function(){for(var t=[this.parsePoint_()];this.match(_e);)t.push(this.parsePoint_());return t}},{key:\"parsePointTextList_\",value:function(){for(var t=[this.parsePointText_()];this.match(_e);)t.push(this.parsePointText_());return t}},{key:\"parseLineStringTextList_\",value:function(){for(var t=[this.parseLineStringText_()];this.match(_e);)t.push(this.parseLineStringText_());return t}},{key:\"parsePolygonTextList_\",value:function(){for(var t=[this.parsePolygonText_()];this.match(_e);)t.push(this.parsePolygonText_());return t}},{key:\"isEmptyGeometry_\",value:function(){var t=this.isTokenType(ge)&&this.token_.value==fe;return t&&this.consume_(),t}},{key:\"formatErrorMessage_\",value:function(){return\"Unexpected `\"+this.token_.value+\"` at position \"+this.token_.position+\" in `\"+this.lexer_.wkt+\"`\"}},{key:\"parseGeometry_\",value:function(){var t=this.factory,e=function(t){return i(X,g(t))},n=function(n){var i=n.map((function(n){return t.createLinearRing(n.map(e))}));return i.length>1?t.createPolygon(i[0],i.slice(1)):t.createPolygon(i[0])},r=this.token_;if(this.match(ge)){var s=r.value;if(this.layout_=this.parseGeometryLayout_(),\"GEOMETRYCOLLECTION\"==s){var a=this.parseGeometryCollectionText_();return t.createGeometryCollection(a)}switch(s){case\"POINT\":var o=this.parsePointText_();return o?t.createPoint(i(X,g(o))):t.createPoint();case\"LINESTRING\":var u=this.parseLineStringText_().map(e);return t.createLineString(u);case\"LINEARRING\":var l=this.parseLineStringText_().map(e);return t.createLinearRing(l);case\"POLYGON\":var h=this.parsePolygonText_();return h&&0!==h.length?n(h):t.createPolygon();case\"MULTIPOINT\":var c=this.parseMultiPointText_();if(!c||0===c.length)return t.createMultiPoint();var f=c.map(e).map((function(e){return t.createPoint(e)}));return t.createMultiPoint(f);case\"MULTILINESTRING\":var v=this.parseMultiLineStringText_().map((function(n){return t.createLineString(n.map(e))}));return t.createMultiLineString(v);case\"MULTIPOLYGON\":var y=this.parseMultiPolygonText_();if(!y||0===y.length)return t.createMultiPolygon();var d=y.map(n);return t.createMultiPolygon(d);default:throw new Error(\"Invalid geometry type: \"+s)}}throw new Error(this.formatErrorMessage_())}}])}();function Ie(t){if(t.isEmpty())return\"\";var e=t.getCoordinate(),n=[e.x,e.y];return void 0===e.z||Number.isNaN(e.z)||n.push(e.z),void 0===e.m||Number.isNaN(e.m)||n.push(e.m),n.join(\" \")}function Ee(t){for(var e=t.getCoordinates().map((function(t){var e=[t.x,t.y];return void 0===t.z||Number.isNaN(t.z)||e.push(t.z),void 0===t.m||Number.isNaN(t.m)||e.push(t.m),e})),n=[],i=0,r=e.length;i<r;++i)n.push(e[i].join(\" \"));return n.join(\", \")}function Ne(t){var e=[];e.push(\"(\"+Ee(t.getExteriorRing())+\")\");for(var n=0,i=t.getNumInteriorRing();n<i;++n)e.push(\"(\"+Ee(t.getInteriorRingN(n))+\")\");return e.join(\", \")}var Te={Point:Ie,LineString:Ee,LinearRing:Ee,Polygon:Ne,MultiPoint:function(t){for(var e=[],n=0,i=t.getNumGeometries();n<i;++n)e.push(\"(\"+Ie(t.getGeometryN(n))+\")\");return e.join(\", \")},MultiLineString:function(t){for(var e=[],n=0,i=t.getNumGeometries();n<i;++n)e.push(\"(\"+Ee(t.getGeometryN(n))+\")\");return e.join(\", \")},MultiPolygon:function(t){for(var e=[],n=0,i=t.getNumGeometries();n<i;++n)e.push(\"(\"+Ne(t.getGeometryN(n))+\")\");return e.join(\", \")},GeometryCollection:function(t){for(var e=[],n=0,i=t.getNumGeometries();n<i;++n)e.push(Se(t.getGeometryN(n)));return e.join(\", \")}};function Se(t){var e=t.getGeometryType(),n=Te[e];e=e.toUpperCase();var i=function(t){var e=\"\";if(t.isEmpty())return e;var n=t.getCoordinate();return void 0===n.z||Number.isNaN(n.z)||(e+=\"Z\"),void 0===n.m||Number.isNaN(n.m)||(e+=\"M\"),e}(t);return i.length>0&&(e+=\" \"+i),t.isEmpty()?e+\" \"+fe:e+\" (\"+n(t)+\")\"}var Le=function(){return s((function t(e){n(this,t),this.geometryFactory=e||new ae,this.precisionModel=this.geometryFactory.getPrecisionModel()}),[{key:\"read\",value:function(t){var e=new ke(t);return new xe(e,this.geometryFactory).parse()}},{key:\"write\",value:function(t){return Se(t)}}])}(),Ce=function(){return s((function t(e){n(this,t),this.parser=new Le(e)}),[{key:\"write\",value:function(t){return this.parser.write(t)}}],[{key:\"toLineString\",value:function(t,e){if(2!==arguments.length)throw new Error(\"Not implemented\");return\"LINESTRING ( \"+t.x+\" \"+t.y+\", \"+e.x+\" \"+e.y+\" )\"}}])}(),Re=function(){function t(){n(this,t),t.constructor_.apply(this,arguments)}return s(t,[{key:\"getIndexAlongSegment\",value:function(t,e){return this.computeIntLineIndex(),this._intLineIndex[t][e]}},{key:\"getTopologySummary\",value:function(){var t=new Jt;return this.isEndPoint()&&t.append(\" endpoint\"),this._isProper&&t.append(\" proper\"),this.isCollinear()&&t.append(\" collinear\"),t.toString()}},{key:\"computeIntersection\",value:function(t,e,n,i){this._inputLines[0][0]=t,this._inputLines[0][1]=e,this._inputLines[1][0]=n,this._inputLines[1][1]=i,this._result=this.computeIntersect(t,e,n,i)}},{key:\"getIntersectionNum\",value:function(){return this._result}},{key:\"computeIntLineIndex\",value:function(){if(0===arguments.length)null===this._intLineIndex&&(this._intLineIndex=Array(2).fill().map((function(){return Array(2)})),this.computeIntLineIndex(0),this.computeIntLineIndex(1));else if(1===arguments.length){var t=arguments[0];this.getEdgeDistance(t,0)>this.getEdgeDistance(t,1)?(this._intLineIndex[t][0]=0,this._intLineIndex[t][1]=1):(this._intLineIndex[t][0]=1,this._intLineIndex[t][1]=0)}}},{key:\"isProper\",value:function(){return this.hasIntersection()&&this._isProper}},{key:\"setPrecisionModel\",value:function(t){this._precisionModel=t}},{key:\"isInteriorIntersection\",value:function(){if(0===arguments.length)return!!this.isInteriorIntersection(0)||!!this.isInteriorIntersection(1);if(1===arguments.length){for(var t=arguments[0],e=0;e<this._result;e++)if(!this._intPt[e].equals2D(this._inputLines[t][0])&&!this._intPt[e].equals2D(this._inputLines[t][1]))return!0;return!1}}},{key:\"getIntersection\",value:function(t){return this._intPt[t]}},{key:\"isEndPoint\",value:function(){return this.hasIntersection()&&!this._isProper}},{key:\"hasIntersection\",value:function(){return this._result!==t.NO_INTERSECTION}},{key:\"getEdgeDistance\",value:function(e,n){return t.computeEdgeDistance(this._intPt[n],this._inputLines[e][0],this._inputLines[e][1])}},{key:\"isCollinear\",value:function(){return this._result===t.COLLINEAR_INTERSECTION}},{key:\"toString\",value:function(){return Ce.toLineString(this._inputLines[0][0],this._inputLines[0][1])+\" - \"+Ce.toLineString(this._inputLines[1][0],this._inputLines[1][1])+this.getTopologySummary()}},{key:\"getEndpoint\",value:function(t,e){return this._inputLines[t][e]}},{key:\"isIntersection\",value:function(t){for(var e=0;e<this._result;e++)if(this._intPt[e].equals2D(t))return!0;return!1}},{key:\"getIntersectionAlongSegment\",value:function(t,e){return this.computeIntLineIndex(),this._intPt[this._intLineIndex[t][e]]}}],[{key:\"constructor_\",value:function(){this._result=null,this._inputLines=Array(2).fill().map((function(){return Array(2)})),this._intPt=new Array(2).fill(null),this._intLineIndex=null,this._isProper=null,this._pa=null,this._pb=null,this._precisionModel=null,this._intPt[0]=new X,this._intPt[1]=new X,this._pa=this._intPt[0],this._pb=this._intPt[1],this._result=0}},{key:\"computeEdgeDistance\",value:function(t,e,n){var i=Math.abs(n.x-e.x),r=Math.abs(n.y-e.y),s=-1;if(t.equals(e))s=0;else if(t.equals(n))s=i>r?i:r;else{var a=Math.abs(t.x-e.x),o=Math.abs(t.y-e.y);0!==(s=i>r?a:o)||t.equals(e)||(s=Math.max(a,o))}return G.isTrue(!(0===s&&!t.equals(e)),\"Bad distance calculation\"),s}},{key:\"nonRobustComputeEdgeDistance\",value:function(t,e,n){var i=t.x-e.x,r=t.y-e.y,s=Math.sqrt(i*i+r*r);return G.isTrue(!(0===s&&!t.equals(e)),\"Invalid distance calculation\"),s}}])}();Re.DONT_INTERSECT=0,Re.DO_INTERSECT=1,Re.COLLINEAR=2,Re.NO_INTERSECTION=0,Re.POINT_INTERSECTION=1,Re.COLLINEAR_INTERSECTION=2;var we=function(t){function i(){return n(this,i),e(this,i)}return l(i,t),s(i,[{key:\"isInSegmentEnvelopes\",value:function(t){var e=new U(this._inputLines[0][0],this._inputLines[0][1]),n=new U(this._inputLines[1][0],this._inputLines[1][1]);return e.contains(t)&&n.contains(t)}},{key:\"computeIntersection\",value:function(){if(3!==arguments.length)return f(i,\"computeIntersection\",this,1).apply(this,arguments);var t=arguments[0],e=arguments[1],n=arguments[2];if(this._isProper=!1,U.intersects(e,n,t)&&0===ct.index(e,n,t)&&0===ct.index(n,e,t))return this._isProper=!0,(t.equals(e)||t.equals(n))&&(this._isProper=!1),this._result=Re.POINT_INTERSECTION,null;this._result=Re.NO_INTERSECTION}},{key:\"intersection\",value:function(t,e,n,r){var s=this.intersectionSafe(t,e,n,r);return this.isInSegmentEnvelopes(s)||(s=new X(i.nearestEndpoint(t,e,n,r))),null!==this._precisionModel&&this._precisionModel.makePrecise(s),s}},{key:\"checkDD\",value:function(t,e,n,i,r){var s=lt.intersection(t,e,n,i),a=this.isInSegmentEnvelopes(s);mt.out.println(\"DD in env = \"+a+\" --------------------- \"+s),r.distance(s)>1e-4&&mt.out.println(\"Distance = \"+r.distance(s))}},{key:\"intersectionSafe\",value:function(t,e,n,r){var s=pt.intersection(t,e,n,r);return null===s&&(s=i.nearestEndpoint(t,e,n,r)),s}},{key:\"computeCollinearIntersection\",value:function(t,e,n,i){var r=U.intersects(t,e,n),s=U.intersects(t,e,i),a=U.intersects(n,i,t),o=U.intersects(n,i,e);return r&&s?(this._intPt[0]=n,this._intPt[1]=i,Re.COLLINEAR_INTERSECTION):a&&o?(this._intPt[0]=t,this._intPt[1]=e,Re.COLLINEAR_INTERSECTION):r&&a?(this._intPt[0]=n,this._intPt[1]=t,!n.equals(t)||s||o?Re.COLLINEAR_INTERSECTION:Re.POINT_INTERSECTION):r&&o?(this._intPt[0]=n,this._intPt[1]=e,!n.equals(e)||s||a?Re.COLLINEAR_INTERSECTION:Re.POINT_INTERSECTION):s&&a?(this._intPt[0]=i,this._intPt[1]=t,!i.equals(t)||r||o?Re.COLLINEAR_INTERSECTION:Re.POINT_INTERSECTION):s&&o?(this._intPt[0]=i,this._intPt[1]=e,!i.equals(e)||r||a?Re.COLLINEAR_INTERSECTION:Re.POINT_INTERSECTION):Re.NO_INTERSECTION}},{key:\"computeIntersect\",value:function(t,e,n,i){if(this._isProper=!1,!U.intersects(t,e,n,i))return Re.NO_INTERSECTION;var r=ct.index(t,e,n),s=ct.index(t,e,i);if(r>0&&s>0||r<0&&s<0)return Re.NO_INTERSECTION;var a=ct.index(n,i,t),o=ct.index(n,i,e);return a>0&&o>0||a<0&&o<0?Re.NO_INTERSECTION:0===r&&0===s&&0===a&&0===o?this.computeCollinearIntersection(t,e,n,i):(0===r||0===s||0===a||0===o?(this._isProper=!1,t.equals2D(n)||t.equals2D(i)?this._intPt[0]=t:e.equals2D(n)||e.equals2D(i)?this._intPt[0]=e:0===r?this._intPt[0]=new X(n):0===s?this._intPt[0]=new X(i):0===a?this._intPt[0]=new X(t):0===o&&(this._intPt[0]=new X(e))):(this._isProper=!0,this._intPt[0]=this.intersection(t,e,n,i)),Re.POINT_INTERSECTION)}}],[{key:\"nearestEndpoint\",value:function(t,e,n,i){var r=t,s=xt.pointToSegment(t,n,i),a=xt.pointToSegment(e,n,i);return a<s&&(s=a,r=e),(a=xt.pointToSegment(n,t,e))<s&&(s=a,r=n),(a=xt.pointToSegment(i,t,e))<s&&(s=a,r=i),r}}])}(Re),Oe=function(){function t(){n(this,t),t.constructor_.apply(this,arguments)}return s(t,[{key:\"countSegment\",value:function(t,e){if(t.x<this._p.x&&e.x<this._p.x)return null;if(this._p.x===e.x&&this._p.y===e.y)return this._isPointOnSegment=!0,null;if(t.y===this._p.y&&e.y===this._p.y){var n=t.x,i=e.x;return n>i&&(n=e.x,i=t.x),this._p.x>=n&&this._p.x<=i&&(this._isPointOnSegment=!0),null}if(t.y>this._p.y&&e.y<=this._p.y||e.y>this._p.y&&t.y<=this._p.y){var r=ct.index(t,e,this._p);if(r===ct.COLLINEAR)return this._isPointOnSegment=!0,null;e.y<t.y&&(r=-r),r===ct.LEFT&&this._crossingCount++}}},{key:\"isPointInPolygon\",value:function(){return this.getLocation()!==H.EXTERIOR}},{key:\"getLocation\",value:function(){return this._isPointOnSegment?H.BOUNDARY:this._crossingCount%2==1?H.INTERIOR:H.EXTERIOR}},{key:\"isOnSegment\",value:function(){return this._isPointOnSegment}}],[{key:\"constructor_\",value:function(){this._p=null,this._crossingCount=0,this._isPointOnSegment=!1;var t=arguments[0];this._p=t}},{key:\"locatePointInRing\",value:function(){if(arguments[0]instanceof X&&rt(arguments[1],ht)){for(var e=arguments[1],n=new t(arguments[0]),i=new X,r=new X,s=1;s<e.size();s++)if(e.getCoordinate(s,i),e.getCoordinate(s-1,r),n.countSegment(i,r),n.isOnSegment())return n.getLocation();return n.getLocation()}if(arguments[0]instanceof X&&arguments[1]instanceof Array){for(var a=arguments[1],o=new t(arguments[0]),u=1;u<a.length;u++){var l=a[u],h=a[u-1];if(o.countSegment(l,h),o.isOnSegment())return o.getLocation()}return o.getLocation()}}}])}(),be=function(){function t(){n(this,t)}return s(t,null,[{key:\"isOnLine\",value:function(){if(arguments[0]instanceof X&&rt(arguments[1],ht)){for(var t=arguments[0],e=arguments[1],n=new we,i=new X,r=new X,s=e.size(),a=1;a<s;a++)if(e.getCoordinate(a-1,i),e.getCoordinate(a,r),n.computeIntersection(t,i,r),n.hasIntersection())return!0;return!1}if(arguments[0]instanceof X&&arguments[1]instanceof Array){for(var o=arguments[0],u=arguments[1],l=new we,h=1;h<u.length;h++){var c=u[h-1],f=u[h];if(l.computeIntersection(o,c,f),l.hasIntersection())return!0}return!1}}},{key:\"locateInRing\",value:function(t,e){return Oe.locatePointInRing(t,e)}},{key:\"isInRing\",value:function(e,n){return t.locateInRing(e,n)!==H.EXTERIOR}}])}(),Me=function(){function t(){n(this,t),t.constructor_.apply(this,arguments)}return s(t,[{key:\"setAllLocations\",value:function(t){for(var e=0;e<this.location.length;e++)this.location[e]=t}},{key:\"isNull\",value:function(){for(var t=0;t<this.location.length;t++)if(this.location[t]!==H.NONE)return!1;return!0}},{key:\"setAllLocationsIfNull\",value:function(t){for(var e=0;e<this.location.length;e++)this.location[e]===H.NONE&&(this.location[e]=t)}},{key:\"isLine\",value:function(){return 1===this.location.length}},{key:\"merge\",value:function(t){if(t.location.length>this.location.length){var e=new Array(3).fill(null);e[$.ON]=this.location[$.ON],e[$.LEFT]=H.NONE,e[$.RIGHT]=H.NONE,this.location=e}for(var n=0;n<this.location.length;n++)this.location[n]===H.NONE&&n<t.location.length&&(this.location[n]=t.location[n])}},{key:\"getLocations\",value:function(){return this.location}},{key:\"flip\",value:function(){if(this.location.length<=1)return null;var t=this.location[$.LEFT];this.location[$.LEFT]=this.location[$.RIGHT],this.location[$.RIGHT]=t}},{key:\"toString\",value:function(){var t=new st;return this.location.length>1&&t.append(H.toLocationSymbol(this.location[$.LEFT])),t.append(H.toLocationSymbol(this.location[$.ON])),this.location.length>1&&t.append(H.toLocationSymbol(this.location[$.RIGHT])),t.toString()}},{key:\"setLocations\",value:function(t,e,n){this.location[$.ON]=t,this.location[$.LEFT]=e,this.location[$.RIGHT]=n}},{key:\"get\",value:function(t){return t<this.location.length?this.location[t]:H.NONE}},{key:\"isArea\",value:function(){return this.location.length>1}},{key:\"isAnyNull\",value:function(){for(var t=0;t<this.location.length;t++)if(this.location[t]===H.NONE)return!0;return!1}},{key:\"setLocation\",value:function(){if(1===arguments.length){var t=arguments[0];this.setLocation($.ON,t)}else if(2===arguments.length){var e=arguments[0],n=arguments[1];this.location[e]=n}}},{key:\"init\",value:function(t){this.location=new Array(t).fill(null),this.setAllLocations(H.NONE)}},{key:\"isEqualOnSide\",value:function(t,e){return this.location[e]===t.location[e]}},{key:\"allPositionsEqual\",value:function(t){for(var e=0;e<this.location.length;e++)if(this.location[e]!==t)return!1;return!0}}],[{key:\"constructor_\",value:function(){if(this.location=null,1===arguments.length){if(arguments[0]instanceof Array){var e=arguments[0];this.init(e.length)}else if(Number.isInteger(arguments[0])){var n=arguments[0];this.init(1),this.location[$.ON]=n}else if(arguments[0]instanceof t){var i=arguments[0];if(this.init(i.location.length),null!==i)for(var r=0;r<this.location.length;r++)this.location[r]=i.location[r]}}else if(3===arguments.length){var s=arguments[0],a=arguments[1],o=arguments[2];this.init(3),this.location[$.ON]=s,this.location[$.LEFT]=a,this.location[$.RIGHT]=o}}}])}(),Ae=function(){function t(){n(this,t),t.constructor_.apply(this,arguments)}return s(t,[{key:\"getGeometryCount\",value:function(){var t=0;return this.elt[0].isNull()||t++,this.elt[1].isNull()||t++,t}},{key:\"setAllLocations\",value:function(t,e){this.elt[t].setAllLocations(e)}},{key:\"isNull\",value:function(t){return this.elt[t].isNull()}},{key:\"setAllLocationsIfNull\",value:function(){if(1===arguments.length){var t=arguments[0];this.setAllLocationsIfNull(0,t),this.setAllLocationsIfNull(1,t)}else if(2===arguments.length){var e=arguments[0],n=arguments[1];this.elt[e].setAllLocationsIfNull(n)}}},{key:\"isLine\",value:function(t){return this.elt[t].isLine()}},{key:\"merge\",value:function(t){for(var e=0;e<2;e++)null===this.elt[e]&&null!==t.elt[e]?this.elt[e]=new Me(t.elt[e]):this.elt[e].merge(t.elt[e])}},{key:\"flip\",value:function(){this.elt[0].flip(),this.elt[1].flip()}},{key:\"getLocation\",value:function(){if(1===arguments.length){var t=arguments[0];return this.elt[t].get($.ON)}if(2===arguments.length){var e=arguments[0],n=arguments[1];return this.elt[e].get(n)}}},{key:\"toString\",value:function(){var t=new st;return null!==this.elt[0]&&(t.append(\"A:\"),t.append(this.elt[0].toString())),null!==this.elt[1]&&(t.append(\" B:\"),t.append(this.elt[1].toString())),t.toString()}},{key:\"isArea\",value:function(){if(0===arguments.length)return this.elt[0].isArea()||this.elt[1].isArea();if(1===arguments.length){var t=arguments[0];return this.elt[t].isArea()}}},{key:\"isAnyNull\",value:function(t){return this.elt[t].isAnyNull()}},{key:\"setLocation\",value:function(){if(2===arguments.length){var t=arguments[0],e=arguments[1];this.elt[t].setLocation($.ON,e)}else if(3===arguments.length){var n=arguments[0],i=arguments[1],r=arguments[2];this.elt[n].setLocation(i,r)}}},{key:\"isEqualOnSide\",value:function(t,e){return this.elt[0].isEqualOnSide(t.elt[0],e)&&this.elt[1].isEqualOnSide(t.elt[1],e)}},{key:\"allPositionsEqual\",value:function(t,e){return this.elt[t].allPositionsEqual(e)}},{key:\"toLine\",value:function(t){this.elt[t].isArea()&&(this.elt[t]=new Me(this.elt[t].location[0]))}}],[{key:\"constructor_\",value:function(){if(this.elt=new Array(2).fill(null),1===arguments.length){if(Number.isInteger(arguments[0])){var e=arguments[0];this.elt[0]=new Me(e),this.elt[1]=new Me(e)}else if(arguments[0]instanceof t){var n=arguments[0];this.elt[0]=new Me(n.elt[0]),this.elt[1]=new Me(n.elt[1])}}else if(2===arguments.length){var i=arguments[0],r=arguments[1];this.elt[0]=new Me(H.NONE),this.elt[1]=new Me(H.NONE),this.elt[i].setLocation(r)}else if(3===arguments.length){var s=arguments[0],a=arguments[1],o=arguments[2];this.elt[0]=new Me(s,a,o),this.elt[1]=new Me(s,a,o)}else if(4===arguments.length){var u=arguments[0],l=arguments[1],h=arguments[2],c=arguments[3];this.elt[0]=new Me(H.NONE,H.NONE,H.NONE),this.elt[1]=new Me(H.NONE,H.NONE,H.NONE),this.elt[u].setLocations(l,h,c)}}},{key:\"toLineLabel\",value:function(e){for(var n=new t(H.NONE),i=0;i<2;i++)n.setLocation(i,e.getLocation(i));return n}}])}(),Pe=function(){return s((function t(){n(this,t),t.constructor_.apply(this,arguments)}),[{key:\"computeRing\",value:function(){if(null!==this._ring)return null;for(var t=new Array(this._pts.size()).fill(null),e=0;e<this._pts.size();e++)t[e]=this._pts.get(e);this._ring=this._geometryFactory.createLinearRing(t),this._isHole=ct.isCCW(this._ring.getCoordinates())}},{key:\"isIsolated\",value:function(){return 1===this._label.getGeometryCount()}},{key:\"computePoints\",value:function(t){this._startDe=t;var e=t,n=!0;do{if(null===e)throw new gt(\"Found null DirectedEdge\");if(e.getEdgeRing()===this)throw new gt(\"Directed Edge visited twice during ring-building at \"+e.getCoordinate());this._edges.add(e);var i=e.getLabel();G.isTrue(i.isArea()),this.mergeLabel(i),this.addPoints(e.getEdge(),e.isForward(),n),n=!1,this.setEdgeRing(e,this),e=this.getNext(e)}while(e!==this._startDe)}},{key:\"getLinearRing\",value:function(){return this._ring}},{key:\"getCoordinate\",value:function(t){return this._pts.get(t)}},{key:\"computeMaxNodeDegree\",value:function(){this._maxNodeDegree=0;var t=this._startDe;do{var e=t.getNode().getEdges().getOutgoingDegree(this);e>this._maxNodeDegree&&(this._maxNodeDegree=e),t=this.getNext(t)}while(t!==this._startDe);this._maxNodeDegree*=2}},{key:\"addPoints\",value:function(t,e,n){var i=t.getCoordinates();if(e){var r=1;n&&(r=0);for(var s=r;s<i.length;s++)this._pts.add(i[s])}else{var a=i.length-2;n&&(a=i.length-1);for(var o=a;o>=0;o--)this._pts.add(i[o])}}},{key:\"isHole\",value:function(){return this._isHole}},{key:\"setInResult\",value:function(){var t=this._startDe;do{t.getEdge().setInResult(!0),t=t.getNext()}while(t!==this._startDe)}},{key:\"containsPoint\",value:function(t){var e=this.getLinearRing();if(!e.getEnvelopeInternal().contains(t))return!1;if(!be.isInRing(t,e.getCoordinates()))return!1;for(var n=this._holes.iterator();n.hasNext();){if(n.next().containsPoint(t))return!1}return!0}},{key:\"addHole\",value:function(t){this._holes.add(t)}},{key:\"isShell\",value:function(){return null===this._shell}},{key:\"getLabel\",value:function(){return this._label}},{key:\"getEdges\",value:function(){return this._edges}},{key:\"getMaxNodeDegree\",value:function(){return this._maxNodeDegree<0&&this.computeMaxNodeDegree(),this._maxNodeDegree}},{key:\"getShell\",value:function(){return this._shell}},{key:\"mergeLabel\",value:function(){if(1===arguments.length){var t=arguments[0];this.mergeLabel(t,0),this.mergeLabel(t,1)}else if(2===arguments.length){var e=arguments[1],n=arguments[0].getLocation(e,$.RIGHT);if(n===H.NONE)return null;if(this._label.getLocation(e)===H.NONE)return this._label.setLocation(e,n),null}}},{key:\"setShell\",value:function(t){this._shell=t,null!==t&&t.addHole(this)}},{key:\"toPolygon\",value:function(t){for(var e=new Array(this._holes.size()).fill(null),n=0;n<this._holes.size();n++)e[n]=this._holes.get(n).getLinearRing();return t.createPolygon(this.getLinearRing(),e)}}],[{key:\"constructor_\",value:function(){if(this._startDe=null,this._maxNodeDegree=-1,this._edges=new yt,this._pts=new yt,this._label=new Ae(H.NONE),this._ring=null,this._isHole=null,this._shell=null,this._holes=new yt,this._geometryFactory=null,0===arguments.length);else if(2===arguments.length){var t=arguments[0],e=arguments[1];this._geometryFactory=e,this.computePoints(t),this.computeRing()}}}])}(),De=function(t){function i(){var t;return n(this,i),t=e(this,i),i.constructor_.apply(t,arguments),t}return l(i,t),s(i,[{key:\"setEdgeRing\",value:function(t,e){t.setMinEdgeRing(e)}},{key:\"getNext\",value:function(t){return t.getNextMin()}}],[{key:\"constructor_\",value:function(){var t=arguments[0],e=arguments[1];Pe.constructor_.call(this,t,e)}}])}(Pe),Fe=function(t){function i(){var t;return n(this,i),t=e(this,i),i.constructor_.apply(t,arguments),t}return l(i,t),s(i,[{key:\"buildMinimalRings\",value:function(){var t=new yt,e=this._startDe;do{if(null===e.getMinEdgeRing()){var n=new De(e,this._geometryFactory);t.add(n)}e=e.getNext()}while(e!==this._startDe);return t}},{key:\"setEdgeRing\",value:function(t,e){t.setEdgeRing(e)}},{key:\"linkDirectedEdgesForMinimalEdgeRings\",value:function(){var t=this._startDe;do{t.getNode().getEdges().linkMinimalDirectedEdges(this),t=t.getNext()}while(t!==this._startDe)}},{key:\"getNext\",value:function(t){return t.getNext()}}],[{key:\"constructor_\",value:function(){var t=arguments[0],e=arguments[1];Pe.constructor_.call(this,t,e)}}])}(Pe),Ge=function(){return s((function t(){n(this,t),t.constructor_.apply(this,arguments)}),[{key:\"setVisited\",value:function(t){this._isVisited=t}},{key:\"setInResult\",value:function(t){this._isInResult=t}},{key:\"isCovered\",value:function(){return this._isCovered}},{key:\"isCoveredSet\",value:function(){return this._isCoveredSet}},{key:\"setLabel\",value:function(t){this._label=t}},{key:\"getLabel\",value:function(){return this._label}},{key:\"setCovered\",value:function(t){this._isCovered=t,this._isCoveredSet=!0}},{key:\"updateIM\",value:function(t){G.isTrue(this._label.getGeometryCount()>=2,\"found partial label\"),this.computeIM(t)}},{key:\"isInResult\",value:function(){return this._isInResult}},{key:\"isVisited\",value:function(){return this._isVisited}}],[{key:\"constructor_\",value:function(){if(this._label=null,this._isInResult=!1,this._isCovered=!1,this._isCoveredSet=!1,this._isVisited=!1,0===arguments.length);else if(1===arguments.length){var t=arguments[0];this._label=t}}}])}(),qe=function(t){function i(){var t;return n(this,i),t=e(this,i),i.constructor_.apply(t,arguments),t}return l(i,t),s(i,[{key:\"isIncidentEdgeInResult\",value:function(){for(var t=this.getEdges().getEdges().iterator();t.hasNext();){if(t.next().getEdge().isInResult())return!0}return!1}},{key:\"isIsolated\",value:function(){return 1===this._label.getGeometryCount()}},{key:\"getCoordinate\",value:function(){return this._coord}},{key:\"print\",value:function(t){t.println(\"node \"+this._coord+\" lbl: \"+this._label)}},{key:\"computeIM\",value:function(t){}},{key:\"computeMergedLocation\",value:function(t,e){var n=H.NONE;if(n=this._label.getLocation(e),!t.isNull(e)){var i=t.getLocation(e);n!==H.BOUNDARY&&(n=i)}return n}},{key:\"setLabel\",value:function(){if(2!==arguments.length||!Number.isInteger(arguments[1])||!Number.isInteger(arguments[0]))return f(i,\"setLabel\",this,1).apply(this,arguments);var t=arguments[0],e=arguments[1];null===this._label?this._label=new Ae(t,e):this._label.setLocation(t,e)}},{key:\"getEdges\",value:function(){return this._edges}},{key:\"mergeLabel\",value:function(){if(arguments[0]instanceof i){var t=arguments[0];this.mergeLabel(t._label)}else if(arguments[0]instanceof Ae)for(var e=arguments[0],n=0;n<2;n++){var r=this.computeMergedLocation(e,n);this._label.getLocation(n)===H.NONE&&this._label.setLocation(n,r)}}},{key:\"add\",value:function(t){this._edges.insert(t),t.setNode(this)}},{key:\"setLabelBoundary\",value:function(t){if(null===this._label)return null;var e=H.NONE;null!==this._label&&(e=this._label.getLocation(t));var n=null;switch(e){case H.BOUNDARY:n=H.INTERIOR;break;case H.INTERIOR:default:n=H.BOUNDARY}this._label.setLocation(t,n)}}],[{key:\"constructor_\",value:function(){this._coord=null,this._edges=null;var t=arguments[0],e=arguments[1];this._coord=t,this._edges=e,this._label=new Ae(0,H.NONE)}}])}(Ge),Ye=function(t){function i(){return n(this,i),e(this,i,arguments)}return l(i,t),s(i)}(ee);function ze(t){return null==t?0:t.color}function Xe(t){return null==t?null:t.parent}function Be(t,e){null!==t&&(t.color=e)}function Ue(t){return null==t?null:t.left}function Ve(t){return null==t?null:t.right}var He=function(t){function i(){var t;return n(this,i),(t=e(this,i)).root_=null,t.size_=0,t}return l(i,t),s(i,[{key:\"get\",value:function(t){for(var e=this.root_;null!==e;){var n=t.compareTo(e.key);if(n<0)e=e.left;else{if(!(n>0))return e.value;e=e.right}}return null}},{key:\"put\",value:function(t,e){if(null===this.root_)return this.root_={key:t,value:e,left:null,right:null,parent:null,color:0,getValue:function(){return this.value},getKey:function(){return this.key}},this.size_=1,null;var n,i,r=this.root_;do{if(n=r,(i=t.compareTo(r.key))<0)r=r.left;else{if(!(i>0)){var s=r.value;return r.value=e,s}r=r.right}}while(null!==r);var a={key:t,left:null,right:null,value:e,parent:n,color:0,getValue:function(){return this.value},getKey:function(){return this.key}};return i<0?n.left=a:n.right=a,this.fixAfterInsertion(a),this.size_++,null}},{key:\"fixAfterInsertion\",value:function(t){var e;for(t.color=1;null!=t&&t!==this.root_&&1===t.parent.color;)Xe(t)===Ue(Xe(Xe(t)))?1===ze(e=Ve(Xe(Xe(t))))?(Be(Xe(t),0),Be(e,0),Be(Xe(Xe(t)),1),t=Xe(Xe(t))):(t===Ve(Xe(t))&&(t=Xe(t),this.rotateLeft(t)),Be(Xe(t),0),Be(Xe(Xe(t)),1),this.rotateRight(Xe(Xe(t)))):1===ze(e=Ue(Xe(Xe(t))))?(Be(Xe(t),0),Be(e,0),Be(Xe(Xe(t)),1),t=Xe(Xe(t))):(t===Ue(Xe(t))&&(t=Xe(t),this.rotateRight(t)),Be(Xe(t),0),Be(Xe(Xe(t)),1),this.rotateLeft(Xe(Xe(t))));this.root_.color=0}},{key:\"values\",value:function(){var t=new yt,e=this.getFirstEntry();if(null!==e)for(t.add(e.value);null!==(e=i.successor(e));)t.add(e.value);return t}},{key:\"entrySet\",value:function(){var t=new J,e=this.getFirstEntry();if(null!==e)for(t.add(e);null!==(e=i.successor(e));)t.add(e);return t}},{key:\"rotateLeft\",value:function(t){if(null!=t){var e=t.right;t.right=e.left,null!=e.left&&(e.left.parent=t),e.parent=t.parent,null==t.parent?this.root_=e:t.parent.left===t?t.parent.left=e:t.parent.right=e,e.left=t,t.parent=e}}},{key:\"rotateRight\",value:function(t){if(null!=t){var e=t.left;t.left=e.right,null!=e.right&&(e.right.parent=t),e.parent=t.parent,null==t.parent?this.root_=e:t.parent.right===t?t.parent.right=e:t.parent.left=e,e.right=t,t.parent=e}}},{key:\"getFirstEntry\",value:function(){var t=this.root_;if(null!=t)for(;null!=t.left;)t=t.left;return t}},{key:\"size\",value:function(){return this.size_}},{key:\"containsKey\",value:function(t){for(var e=this.root_;null!==e;){var n=t.compareTo(e.key);if(n<0)e=e.left;else{if(!(n>0))return!0;e=e.right}}return!1}}],[{key:\"successor\",value:function(t){var e;if(null===t)return null;if(null!==t.right){for(e=t.right;null!==e.left;)e=e.left;return e}e=t.parent;for(var n=t;null!==e&&n===e.right;)n=e,e=e.parent;return e}}])}(Ye),Ze=function(){return s((function t(){n(this,t),t.constructor_.apply(this,arguments)}),[{key:\"find\",value:function(t){return this.nodeMap.get(t)}},{key:\"addNode\",value:function(){if(arguments[0]instanceof X){var t=arguments[0],e=this.nodeMap.get(t);return null===e&&(e=this.nodeFact.createNode(t),this.nodeMap.put(t,e)),e}if(arguments[0]instanceof qe){var n=arguments[0],i=this.nodeMap.get(n.getCoordinate());return null===i?(this.nodeMap.put(n.getCoordinate(),n),n):(i.mergeLabel(n),i)}}},{key:\"print\",value:function(t){for(var e=this.iterator();e.hasNext();){e.next().print(t)}}},{key:\"iterator\",value:function(){return this.nodeMap.values().iterator()}},{key:\"values\",value:function(){return this.nodeMap.values()}},{key:\"getBoundaryNodes\",value:function(t){for(var e=new yt,n=this.iterator();n.hasNext();){var i=n.next();i.getLabel().getLocation(t)===H.BOUNDARY&&e.add(i)}return e}},{key:\"add\",value:function(t){var e=t.getCoordinate();this.addNode(e).add(t)}}],[{key:\"constructor_\",value:function(){this.nodeMap=new He,this.nodeFact=null;var t=arguments[0];this.nodeFact=t}}])}(),je=function(){function t(){n(this,t)}return s(t,null,[{key:\"isNorthern\",value:function(e){return e===t.NE||e===t.NW}},{key:\"isOpposite\",value:function(t,e){return t!==e&&2===(t-e+4)%4}},{key:\"commonHalfPlane\",value:function(t,e){if(t===e)return t;if(2===(t-e+4)%4)return-1;var n=t<e?t:e;return 0===n&&3===(t>e?t:e)?3:n}},{key:\"isInHalfPlane\",value:function(e,n){return n===t.SE?e===t.SE||e===t.SW:e===n||e===n+1}},{key:\"quadrant\",value:function(){if(\"number\"==typeof arguments[0]&&\"number\"==typeof arguments[1]){var e=arguments[0],n=arguments[1];if(0===e&&0===n)throw new m(\"Cannot compute the quadrant for point ( \"+e+\", \"+n+\" )\");return e>=0?n>=0?t.NE:t.SE:n>=0?t.NW:t.SW}if(arguments[0]instanceof X&&arguments[1]instanceof X){var i=arguments[0],r=arguments[1];if(r.x===i.x&&r.y===i.y)throw new m(\"Cannot compute the quadrant for two identical points \"+i);return r.x>=i.x?r.y>=i.y?t.NE:t.SE:r.y>=i.y?t.NW:t.SW}}}])}();je.NE=0,je.NW=1,je.SW=2,je.SE=3;var We=function(){function t(){n(this,t),t.constructor_.apply(this,arguments)}return s(t,[{key:\"compareDirection\",value:function(t){return this._dx===t._dx&&this._dy===t._dy?0:this._quadrant>t._quadrant?1:this._quadrant<t._quadrant?-1:ct.index(t._p0,t._p1,this._p1)}},{key:\"getDy\",value:function(){return this._dy}},{key:\"getCoordinate\",value:function(){return this._p0}},{key:\"setNode\",value:function(t){this._node=t}},{key:\"print\",value:function(t){var e=Math.atan2(this._dy,this._dx),n=this.getClass().getName(),i=n.lastIndexOf(\".\"),r=n.substring(i+1);t.print(\" \"+r+\": \"+this._p0+\" - \"+this._p1+\" \"+this._quadrant+\":\"+e+\" \"+this._label)}},{key:\"compareTo\",value:function(t){var e=t;return this.compareDirection(e)}},{key:\"getDirectedCoordinate\",value:function(){return this._p1}},{key:\"getDx\",value:function(){return this._dx}},{key:\"getLabel\",value:function(){return this._label}},{key:\"getEdge\",value:function(){return this._edge}},{key:\"getQuadrant\",value:function(){return this._quadrant}},{key:\"getNode\",value:function(){return this._node}},{key:\"toString\",value:function(){var t=Math.atan2(this._dy,this._dx),e=this.getClass().getName(),n=e.lastIndexOf(\".\");return\" \"+e.substring(n+1)+\": \"+this._p0+\" - \"+this._p1+\" \"+this._quadrant+\":\"+t+\" \"+this._label}},{key:\"computeLabel\",value:function(t){}},{key:\"init\",value:function(t,e){this._p0=t,this._p1=e,this._dx=e.x-t.x,this._dy=e.y-t.y,this._quadrant=je.quadrant(this._dx,this._dy),G.isTrue(!(0===this._dx&&0===this._dy),\"EdgeEnd with identical endpoints found\")}},{key:\"interfaces_\",get:function(){return[x]}}],[{key:\"constructor_\",value:function(){if(this._edge=null,this._label=null,this._node=null,this._p0=null,this._p1=null,this._dx=null,this._dy=null,this._quadrant=null,1===arguments.length){var e=arguments[0];this._edge=e}else if(3===arguments.length){var n=arguments[0],i=arguments[1],r=arguments[2];t.constructor_.call(this,n,i,r,null)}else if(4===arguments.length){var s=arguments[0],a=arguments[1],o=arguments[2],u=arguments[3];t.constructor_.call(this,s),this.init(a,o),this._label=u}}}])}(),Ke=function(t){function i(){var t;return n(this,i),t=e(this,i),i.constructor_.apply(t,arguments),t}return l(i,t),s(i,[{key:\"getNextMin\",value:function(){return this._nextMin}},{key:\"getDepth\",value:function(t){return this._depth[t]}},{key:\"setVisited\",value:function(t){this._isVisited=t}},{key:\"computeDirectedLabel\",value:function(){this._label=new Ae(this._edge.getLabel()),this._isForward||this._label.flip()}},{key:\"getNext\",value:function(){return this._next}},{key:\"setDepth\",value:function(t,e){if(-999!==this._depth[t]&&this._depth[t]!==e)throw new gt(\"assigned depths do not match\",this.getCoordinate());this._depth[t]=e}},{key:\"isInteriorAreaEdge\",value:function(){for(var t=!0,e=0;e<2;e++)this._label.isArea(e)&&this._label.getLocation(e,$.LEFT)===H.INTERIOR&&this._label.getLocation(e,$.RIGHT)===H.INTERIOR||(t=!1);return t}},{key:\"setNextMin\",value:function(t){this._nextMin=t}},{key:\"print\",value:function(t){f(i,\"print\",this,1).call(this,t),t.print(\" \"+this._depth[$.LEFT]+\"/\"+this._depth[$.RIGHT]),t.print(\" (\"+this.getDepthDelta()+\")\"),this._isInResult&&t.print(\" inResult\")}},{key:\"setMinEdgeRing\",value:function(t){this._minEdgeRing=t}},{key:\"isLineEdge\",value:function(){var t=this._label.isLine(0)||this._label.isLine(1),e=!this._label.isArea(0)||this._label.allPositionsEqual(0,H.EXTERIOR),n=!this._label.isArea(1)||this._label.allPositionsEqual(1,H.EXTERIOR);return t&&e&&n}},{key:\"setEdgeRing\",value:function(t){this._edgeRing=t}},{key:\"getMinEdgeRing\",value:function(){return this._minEdgeRing}},{key:\"getDepthDelta\",value:function(){var t=this._edge.getDepthDelta();return this._isForward||(t=-t),t}},{key:\"setInResult\",value:function(t){this._isInResult=t}},{key:\"getSym\",value:function(){return this._sym}},{key:\"isForward\",value:function(){return this._isForward}},{key:\"getEdge\",value:function(){return this._edge}},{key:\"printEdge\",value:function(t){this.print(t),t.print(\" \"),this._isForward?this._edge.print(t):this._edge.printReverse(t)}},{key:\"setSym\",value:function(t){this._sym=t}},{key:\"setVisitedEdge\",value:function(t){this.setVisited(t),this._sym.setVisited(t)}},{key:\"setEdgeDepths\",value:function(t,e){var n=this.getEdge().getDepthDelta();this._isForward||(n=-n);var i=1;t===$.LEFT&&(i=-1);var r=$.opposite(t),s=e+n*i;this.setDepth(t,e),this.setDepth(r,s)}},{key:\"getEdgeRing\",value:function(){return this._edgeRing}},{key:\"isInResult\",value:function(){return this._isInResult}},{key:\"setNext\",value:function(t){this._next=t}},{key:\"isVisited\",value:function(){return this._isVisited}}],[{key:\"constructor_\",value:function(){this._isForward=null,this._isInResult=!1,this._isVisited=!1,this._sym=null,this._next=null,this._nextMin=null,this._edgeRing=null,this._minEdgeRing=null,this._depth=[0,-999,-999];var t=arguments[0],e=arguments[1];if(We.constructor_.call(this,t),this._isForward=e,e)this.init(t.getCoordinate(0),t.getCoordinate(1));else{var n=t.getNumPoints()-1;this.init(t.getCoordinate(n),t.getCoordinate(n-1))}this.computeDirectedLabel()}},{key:\"depthFactor\",value:function(t,e){return t===H.EXTERIOR&&e===H.INTERIOR?1:t===H.INTERIOR&&e===H.EXTERIOR?-1:0}}])}(We),Je=function(){return s((function t(){n(this,t)}),[{key:\"createNode\",value:function(t){return new qe(t,null)}}])}(),Qe=function(){return s((function t(){n(this,t),t.constructor_.apply(this,arguments)}),[{key:\"printEdges\",value:function(t){t.println(\"Edges:\");for(var e=0;e<this._edges.size();e++){t.println(\"edge \"+e+\":\");var n=this._edges.get(e);n.print(t),n.eiList.print(t)}}},{key:\"find\",value:function(t){return this._nodes.find(t)}},{key:\"addNode\",value:function(){if(arguments[0]instanceof qe){var t=arguments[0];return this._nodes.addNode(t)}if(arguments[0]instanceof X){var e=arguments[0];return this._nodes.addNode(e)}}},{key:\"getNodeIterator\",value:function(){return this._nodes.iterator()}},{key:\"linkResultDirectedEdges\",value:function(){for(var t=this._nodes.iterator();t.hasNext();){t.next().getEdges().linkResultDirectedEdges()}}},{key:\"debugPrintln\",value:function(t){mt.out.println(t)}},{key:\"isBoundaryNode\",value:function(t,e){var n=this._nodes.find(e);if(null===n)return!1;var i=n.getLabel();return null!==i&&i.getLocation(t)===H.BOUNDARY}},{key:\"linkAllDirectedEdges\",value:function(){for(var t=this._nodes.iterator();t.hasNext();){t.next().getEdges().linkAllDirectedEdges()}}},{key:\"matchInSameDirection\",value:function(t,e,n,i){return!!t.equals(n)&&(ct.index(t,e,i)===ct.COLLINEAR&&je.quadrant(t,e)===je.quadrant(n,i))}},{key:\"getEdgeEnds\",value:function(){return this._edgeEndList}},{key:\"debugPrint\",value:function(t){mt.out.print(t)}},{key:\"getEdgeIterator\",value:function(){return this._edges.iterator()}},{key:\"findEdgeInSameDirection\",value:function(t,e){for(var n=0;n<this._edges.size();n++){var i=this._edges.get(n),r=i.getCoordinates();if(this.matchInSameDirection(t,e,r[0],r[1]))return i;if(this.matchInSameDirection(t,e,r[r.length-1],r[r.length-2]))return i}return null}},{key:\"insertEdge\",value:function(t){this._edges.add(t)}},{key:\"findEdgeEnd\",value:function(t){for(var e=this.getEdgeEnds().iterator();e.hasNext();){var n=e.next();if(n.getEdge()===t)return n}return null}},{key:\"addEdges\",value:function(t){for(var e=t.iterator();e.hasNext();){var n=e.next();this._edges.add(n);var i=new Ke(n,!0),r=new Ke(n,!1);i.setSym(r),r.setSym(i),this.add(i),this.add(r)}}},{key:\"add\",value:function(t){this._nodes.add(t),this._edgeEndList.add(t)}},{key:\"getNodes\",value:function(){return this._nodes.values()}},{key:\"findEdge\",value:function(t,e){for(var n=0;n<this._edges.size();n++){var i=this._edges.get(n),r=i.getCoordinates();if(t.equals(r[0])&&e.equals(r[1]))return i}return null}}],[{key:\"constructor_\",value:function(){if(this._edges=new yt,this._nodes=null,this._edgeEndList=new yt,0===arguments.length)this._nodes=new Ze(new Je);else if(1===arguments.length){var t=arguments[0];this._nodes=new Ze(t)}}},{key:\"linkResultDirectedEdges\",value:function(t){for(var e=t.iterator();e.hasNext();){e.next().getEdges().linkResultDirectedEdges()}}}])}(),$e=function(){function t(){n(this,t),t.constructor_.apply(this,arguments)}return s(t,[{key:\"sortShellsAndHoles\",value:function(t,e,n){for(var i=t.iterator();i.hasNext();){var r=i.next();r.isHole()?n.add(r):e.add(r)}}},{key:\"computePolygons\",value:function(t){for(var e=new yt,n=t.iterator();n.hasNext();){var i=n.next().toPolygon(this._geometryFactory);e.add(i)}return e}},{key:\"placeFreeHoles\",value:function(e,n){for(var i=n.iterator();i.hasNext();){var r=i.next();if(null===r.getShell()){var s=t.findEdgeRingContaining(r,e);if(null===s)throw new gt(\"unable to assign hole to a shell\",r.getCoordinate(0));r.setShell(s)}}}},{key:\"buildMinimalEdgeRings\",value:function(t,e,n){for(var i=new yt,r=t.iterator();r.hasNext();){var s=r.next();if(s.getMaxNodeDegree()>2){s.linkDirectedEdgesForMinimalEdgeRings();var a=s.buildMinimalRings(),o=this.findShell(a);null!==o?(this.placePolygonHoles(o,a),e.add(o)):n.addAll(a)}else i.add(s)}return i}},{key:\"buildMaximalEdgeRings\",value:function(t){for(var e=new yt,n=t.iterator();n.hasNext();){var i=n.next();if(i.isInResult()&&i.getLabel().isArea()&&null===i.getEdgeRing()){var r=new Fe(i,this._geometryFactory);e.add(r),r.setInResult()}}return e}},{key:\"placePolygonHoles\",value:function(t,e){for(var n=e.iterator();n.hasNext();){var i=n.next();i.isHole()&&i.setShell(t)}}},{key:\"getPolygons\",value:function(){return this.computePolygons(this._shellList)}},{key:\"findShell\",value:function(t){for(var e=0,n=null,i=t.iterator();i.hasNext();){var r=i.next();r.isHole()||(n=r,e++)}return G.isTrue(e<=1,\"found two shells in MinimalEdgeRing list\"),n}},{key:\"add\",value:function(){if(1===arguments.length){var t=arguments[0];this.add(t.getEdgeEnds(),t.getNodes())}else if(2===arguments.length){var e=arguments[0],n=arguments[1];Qe.linkResultDirectedEdges(n);var i=this.buildMaximalEdgeRings(e),r=new yt,s=this.buildMinimalEdgeRings(i,this._shellList,r);this.sortShellsAndHoles(s,this._shellList,r),this.placeFreeHoles(this._shellList,r)}}}],[{key:\"constructor_\",value:function(){this._geometryFactory=null,this._shellList=new yt;var t=arguments[0];this._geometryFactory=t}},{key:\"findEdgeRingContaining\",value:function(t,e){for(var n=t.getLinearRing(),i=n.getEnvelopeInternal(),r=n.getCoordinateN(0),s=null,a=null,o=e.iterator();o.hasNext();){var u=o.next(),l=u.getLinearRing(),h=l.getEnvelopeInternal();if(!h.equals(i)&&h.contains(i)){r=jt.ptNotInList(n.getCoordinates(),l.getCoordinates());var c=!1;be.isInRing(r,l.getCoordinates())&&(c=!0),c&&(null===s||a.contains(h))&&(a=(s=u).getLinearRing().getEnvelopeInternal())}}return s}}])}(),tn=function(){return s((function t(){n(this,t)}),[{key:\"getBounds\",value:function(){}}])}(),en=function(){return s((function t(){n(this,t),t.constructor_.apply(this,arguments)}),[{key:\"getItem\",value:function(){return this._item}},{key:\"getBounds\",value:function(){return this._bounds}},{key:\"interfaces_\",get:function(){return[tn,E]}}],[{key:\"constructor_\",value:function(){this._bounds=null,this._item=null;var t=arguments[0],e=arguments[1];this._bounds=t,this._item=e}}])}(),nn=function(){return s((function t(){n(this,t),t.constructor_.apply(this,arguments)}),[{key:\"poll\",value:function(){if(this.isEmpty())return null;var t=this._items.get(1);return this._items.set(1,this._items.get(this._size)),this._size-=1,this.reorder(1),t}},{key:\"size\",value:function(){return this._size}},{key:\"reorder\",value:function(t){for(var e=null,n=this._items.get(t);2*t<=this._size&&((e=2*t)!==this._size&&this._items.get(e+1).compareTo(this._items.get(e))<0&&e++,this._items.get(e).compareTo(n)<0);t=e)this._items.set(t,this._items.get(e));this._items.set(t,n)}},{key:\"clear\",value:function(){this._size=0,this._items.clear()}},{key:\"peek\",value:function(){return this.isEmpty()?null:this._items.get(1)}},{key:\"isEmpty\",value:function(){return 0===this._size}},{key:\"add\",value:function(t){this._items.add(null),this._size+=1;var e=this._size;for(this._items.set(0,t);t.compareTo(this._items.get(Math.trunc(e/2)))<0;e/=2)this._items.set(e,this._items.get(Math.trunc(e/2)));this._items.set(e,t)}}],[{key:\"constructor_\",value:function(){this._size=null,this._items=null,this._size=0,this._items=new yt,this._items.add(null)}}])}(),rn=function(){return s((function t(){n(this,t)}),[{key:\"insert\",value:function(t,e){}},{key:\"remove\",value:function(t,e){}},{key:\"query\",value:function(){}}])}(),sn=function(){return s((function t(){n(this,t),t.constructor_.apply(this,arguments)}),[{key:\"getLevel\",value:function(){return this._level}},{key:\"size\",value:function(){return this._childBoundables.size()}},{key:\"getChildBoundables\",value:function(){return this._childBoundables}},{key:\"addChildBoundable\",value:function(t){G.isTrue(null===this._bounds),this._childBoundables.add(t)}},{key:\"isEmpty\",value:function(){return this._childBoundables.isEmpty()}},{key:\"getBounds\",value:function(){return null===this._bounds&&(this._bounds=this.computeBounds()),this._bounds}},{key:\"interfaces_\",get:function(){return[tn,E]}}],[{key:\"constructor_\",value:function(){if(this._childBoundables=new yt,this._bounds=null,this._level=null,0===arguments.length);else if(1===arguments.length){var t=arguments[0];this._level=t}}}])}(),an={reverseOrder:function(){return{compare:function(t,e){return e.compareTo(t)}}},min:function(t){return an.sort(t),t.get(0)},sort:function(t,e){var n=t.toArray();e?At.sort(n,e):At.sort(n);for(var i=t.iterator(),r=0,s=n.length;r<s;r++)i.next(),i.set(n[r])},singletonList:function(t){var e=new yt;return e.add(t),e}},on=function(){function t(){n(this,t)}return s(t,null,[{key:\"maxDistance\",value:function(e,n,i,r,s,a,o,u){var l=t.distance(e,n,s,a);return l=Math.max(l,t.distance(e,n,o,u)),l=Math.max(l,t.distance(i,r,s,a)),l=Math.max(l,t.distance(i,r,o,u))}},{key:\"distance\",value:function(t,e,n,i){var r=n-t,s=i-e;return Math.sqrt(r*r+s*s)}},{key:\"maximumDistance\",value:function(e,n){var i=Math.min(e.getMinX(),n.getMinX()),r=Math.min(e.getMinY(),n.getMinY()),s=Math.max(e.getMaxX(),n.getMaxX()),a=Math.max(e.getMaxY(),n.getMaxY());return t.distance(i,r,s,a)}},{key:\"minMaxDistance\",value:function(e,n){var i=e.getMinX(),r=e.getMinY(),s=e.getMaxX(),a=e.getMaxY(),o=n.getMinX(),u=n.getMinY(),l=n.getMaxX(),h=n.getMaxY(),c=t.maxDistance(i,r,i,a,o,u,o,h);return c=Math.min(c,t.maxDistance(i,r,i,a,o,u,l,u)),c=Math.min(c,t.maxDistance(i,r,i,a,l,h,o,h)),c=Math.min(c,t.maxDistance(i,r,i,a,l,h,l,u)),c=Math.min(c,t.maxDistance(i,r,s,r,o,u,o,h)),c=Math.min(c,t.maxDistance(i,r,s,r,o,u,l,u)),c=Math.min(c,t.maxDistance(i,r,s,r,l,h,o,h)),c=Math.min(c,t.maxDistance(i,r,s,r,l,h,l,u)),c=Math.min(c,t.maxDistance(s,a,i,a,o,u,o,h)),c=Math.min(c,t.maxDistance(s,a,i,a,o,u,l,u)),c=Math.min(c,t.maxDistance(s,a,i,a,l,h,o,h)),c=Math.min(c,t.maxDistance(s,a,i,a,l,h,l,u)),c=Math.min(c,t.maxDistance(s,a,s,r,o,u,o,h)),c=Math.min(c,t.maxDistance(s,a,s,r,o,u,l,u)),c=Math.min(c,t.maxDistance(s,a,s,r,l,h,o,h)),c=Math.min(c,t.maxDistance(s,a,s,r,l,h,l,u))}}])}(),un=function(){function t(){n(this,t),t.constructor_.apply(this,arguments)}return s(t,[{key:\"maximumDistance\",value:function(){return on.maximumDistance(this._boundable1.getBounds(),this._boundable2.getBounds())}},{key:\"expandToQueue\",value:function(e,n){var i=t.isComposite(this._boundable1),r=t.isComposite(this._boundable2);if(i&&r)return t.area(this._boundable1)>t.area(this._boundable2)?(this.expand(this._boundable1,this._boundable2,!1,e,n),null):(this.expand(this._boundable2,this._boundable1,!0,e,n),null);if(i)return this.expand(this._boundable1,this._boundable2,!1,e,n),null;if(r)return this.expand(this._boundable2,this._boundable1,!0,e,n),null;throw new m(\"neither boundable is composite\")}},{key:\"isLeaves\",value:function(){return!(t.isComposite(this._boundable1)||t.isComposite(this._boundable2))}},{key:\"compareTo\",value:function(t){var e=t;return this._distance<e._distance?-1:this._distance>e._distance?1:0}},{key:\"expand\",value:function(e,n,i,r,s){for(var a=e.getChildBoundables().iterator();a.hasNext();){var o=a.next(),u=null;(u=i?new t(n,o,this._itemDistance):new t(o,n,this._itemDistance)).getDistance()<s&&r.add(u)}}},{key:\"getBoundable\",value:function(t){return 0===t?this._boundable1:this._boundable2}},{key:\"getDistance\",value:function(){return this._distance}},{key:\"distance\",value:function(){return this.isLeaves()?this._itemDistance.distance(this._boundable1,this._boundable2):this._boundable1.getBounds().distance(this._boundable2.getBounds())}},{key:\"interfaces_\",get:function(){return[x]}}],[{key:\"constructor_\",value:function(){this._boundable1=null,this._boundable2=null,this._distance=null,this._itemDistance=null;var t=arguments[0],e=arguments[1],n=arguments[2];this._boundable1=t,this._boundable2=e,this._itemDistance=n,this._distance=this.distance()}},{key:\"area\",value:function(t){return t.getBounds().getArea()}},{key:\"isComposite\",value:function(t){return t instanceof sn}}])}(),ln=function(){return s((function t(){n(this,t)}),[{key:\"visitItem\",value:function(t){}}])}(),hn=function(){function t(){n(this,t),t.constructor_.apply(this,arguments)}return s(t,[{key:\"queryInternal\",value:function(){if(rt(arguments[2],ln)&&arguments[0]instanceof Object&&arguments[1]instanceof sn)for(var t=arguments[0],e=arguments[2],n=arguments[1].getChildBoundables(),i=0;i<n.size();i++){var r=n.get(i);this.getIntersectsOp().intersects(r.getBounds(),t)&&(r instanceof sn?this.queryInternal(t,r,e):r instanceof en?e.visitItem(r.getItem()):G.shouldNeverReachHere())}else if(rt(arguments[2],nt)&&arguments[0]instanceof Object&&arguments[1]instanceof sn)for(var s=arguments[0],a=arguments[2],o=arguments[1].getChildBoundables(),u=0;u<o.size();u++){var l=o.get(u);this.getIntersectsOp().intersects(l.getBounds(),s)&&(l instanceof sn?this.queryInternal(s,l,a):l instanceof en?a.add(l.getItem()):G.shouldNeverReachHere())}}},{key:\"getNodeCapacity\",value:function(){return this._nodeCapacity}},{key:\"lastNode\",value:function(t){return t.get(t.size()-1)}},{key:\"size\",value:function(){if(0===arguments.length)return this.isEmpty()?0:(this.build(),this.size(this._root));if(1===arguments.length){for(var t=0,e=arguments[0].getChildBoundables().iterator();e.hasNext();){var n=e.next();n instanceof sn?t+=this.size(n):n instanceof en&&(t+=1)}return t}}},{key:\"removeItem\",value:function(t,e){for(var n=null,i=t.getChildBoundables().iterator();i.hasNext();){var r=i.next();r instanceof en&&r.getItem()===e&&(n=r)}return null!==n&&(t.getChildBoundables().remove(n),!0)}},{key:\"itemsTree\",value:function(){if(0===arguments.length){this.build();var t=this.itemsTree(this._root);return null===t?new yt:t}if(1===arguments.length){for(var e=arguments[0],n=new yt,i=e.getChildBoundables().iterator();i.hasNext();){var r=i.next();if(r instanceof sn){var s=this.itemsTree(r);null!==s&&n.add(s)}else r instanceof en?n.add(r.getItem()):G.shouldNeverReachHere()}return n.size()<=0?null:n}}},{key:\"insert\",value:function(t,e){G.isTrue(!this._built,\"Cannot insert items into an STR packed R-tree after it has been built.\"),this._itemBoundables.add(new en(t,e))}},{key:\"boundablesAtLevel\",value:function(){if(1===arguments.length){var t=arguments[0],e=new yt;return this.boundablesAtLevel(t,this._root,e),e}if(3===arguments.length){var n=arguments[0],i=arguments[1],r=arguments[2];if(G.isTrue(n>-2),i.getLevel()===n)return r.add(i),null;for(var s=i.getChildBoundables().iterator();s.hasNext();){var a=s.next();a instanceof sn?this.boundablesAtLevel(n,a,r):(G.isTrue(a instanceof en),-1===n&&r.add(a))}return null}}},{key:\"query\",value:function(){if(1===arguments.length){var t=arguments[0];this.build();var e=new yt;return this.isEmpty()||this.getIntersectsOp().intersects(this._root.getBounds(),t)&&this.queryInternal(t,this._root,e),e}if(2===arguments.length){var n=arguments[0],i=arguments[1];if(this.build(),this.isEmpty())return null;this.getIntersectsOp().intersects(this._root.getBounds(),n)&&this.queryInternal(n,this._root,i)}}},{key:\"build\",value:function(){if(this._built)return null;this._root=this._itemBoundables.isEmpty()?this.createNode(0):this.createHigherLevels(this._itemBoundables,-1),this._itemBoundables=null,this._built=!0}},{key:\"getRoot\",value:function(){return this.build(),this._root}},{key:\"remove\",value:function(){if(2===arguments.length){var t=arguments[0],e=arguments[1];return this.build(),!!this.getIntersectsOp().intersects(this._root.getBounds(),t)&&this.remove(t,this._root,e)}if(3===arguments.length){var n=arguments[0],i=arguments[1],r=arguments[2],s=this.removeItem(i,r);if(s)return!0;for(var a=null,o=i.getChildBoundables().iterator();o.hasNext();){var u=o.next();if(this.getIntersectsOp().intersects(u.getBounds(),n)&&(u instanceof sn&&(s=this.remove(n,u,r)))){a=u;break}}return null!==a&&a.getChildBoundables().isEmpty()&&i.getChildBoundables().remove(a),s}}},{key:\"createHigherLevels\",value:function(t,e){G.isTrue(!t.isEmpty());var n=this.createParentBoundables(t,e+1);return 1===n.size()?n.get(0):this.createHigherLevels(n,e+1)}},{key:\"depth\",value:function(){if(0===arguments.length)return this.isEmpty()?0:(this.build(),this.depth(this._root));if(1===arguments.length){for(var t=0,e=arguments[0].getChildBoundables().iterator();e.hasNext();){var n=e.next();if(n instanceof sn){var i=this.depth(n);i>t&&(t=i)}}return t+1}}},{key:\"createParentBoundables\",value:function(t,e){G.isTrue(!t.isEmpty());var n=new yt;n.add(this.createNode(e));var i=new yt(t);an.sort(i,this.getComparator());for(var r=i.iterator();r.hasNext();){var s=r.next();this.lastNode(n).getChildBoundables().size()===this.getNodeCapacity()&&n.add(this.createNode(e)),this.lastNode(n).addChildBoundable(s)}return n}},{key:\"isEmpty\",value:function(){return this._built?this._root.isEmpty():this._itemBoundables.isEmpty()}},{key:\"interfaces_\",get:function(){return[E]}}],[{key:\"constructor_\",value:function(){if(this._root=null,this._built=!1,this._itemBoundables=new yt,this._nodeCapacity=null,0===arguments.length)t.constructor_.call(this,t.DEFAULT_NODE_CAPACITY);else if(1===arguments.length){var e=arguments[0];G.isTrue(e>1,\"Node capacity must be greater than 1\"),this._nodeCapacity=e}}},{key:\"compareDoubles\",value:function(t,e){return t>e?1:t<e?-1:0}}])}();hn.IntersectsOp=function(){},hn.DEFAULT_NODE_CAPACITY=10;var cn=function(){return s((function t(){n(this,t)}),[{key:\"distance\",value:function(t,e){}}])}(),fn=function(t){function i(){var t;return n(this,i),t=e(this,i),i.constructor_.apply(t,arguments),t}return l(i,t),s(i,[{key:\"createParentBoundablesFromVerticalSlices\",value:function(t,e){G.isTrue(t.length>0);for(var n=new yt,i=0;i<t.length;i++)n.addAll(this.createParentBoundablesFromVerticalSlice(t[i],e));return n}},{key:\"nearestNeighbourK\",value:function(){if(2===arguments.length){var t=arguments[0],e=arguments[1];return this.nearestNeighbourK(t,A.POSITIVE_INFINITY,e)}if(3===arguments.length){var n=arguments[0],r=arguments[2],s=arguments[1],a=new nn;a.add(n);for(var o=new nn;!a.isEmpty()&&s>=0;){var u=a.poll(),l=u.getDistance();if(l>=s)break;if(u.isLeaves())if(o.size()<r)o.add(u);else o.peek().getDistance()>l&&(o.poll(),o.add(u)),s=o.peek().getDistance();else u.expandToQueue(a,s)}return i.getItems(o)}}},{key:\"createNode\",value:function(t){return new gn(t)}},{key:\"size\",value:function(){return 0===arguments.length?f(i,\"size\",this,1).call(this):f(i,\"size\",this,1).apply(this,arguments)}},{key:\"insert\",value:function(){if(!(2===arguments.length&&arguments[1]instanceof Object&&arguments[0]instanceof U))return f(i,\"insert\",this,1).apply(this,arguments);var t=arguments[0],e=arguments[1];if(t.isNull())return null;f(i,\"insert\",this,1).call(this,t,e)}},{key:\"getIntersectsOp\",value:function(){return i.intersectsOp}},{key:\"verticalSlices\",value:function(t,e){for(var n=Math.trunc(Math.ceil(t.size()/e)),i=new Array(e).fill(null),r=t.iterator(),s=0;s<e;s++){i[s]=new yt;for(var a=0;r.hasNext()&&a<n;){var o=r.next();i[s].add(o),a++}}return i}},{key:\"query\",value:function(){if(1===arguments.length){var t=arguments[0];return f(i,\"query\",this,1).call(this,t)}if(2===arguments.length){var e=arguments[0],n=arguments[1];f(i,\"query\",this,1).call(this,e,n)}}},{key:\"getComparator\",value:function(){return i.yComparator}},{key:\"createParentBoundablesFromVerticalSlice\",value:function(t,e){return f(i,\"createParentBoundables\",this,1).call(this,t,e)}},{key:\"remove\",value:function(){if(2===arguments.length&&arguments[1]instanceof Object&&arguments[0]instanceof U){var t=arguments[0],e=arguments[1];return f(i,\"remove\",this,1).call(this,t,e)}return f(i,\"remove\",this,1).apply(this,arguments)}},{key:\"depth\",value:function(){return 0===arguments.length?f(i,\"depth\",this,1).call(this):f(i,\"depth\",this,1).apply(this,arguments)}},{key:\"createParentBoundables\",value:function(t,e){G.isTrue(!t.isEmpty());var n=Math.trunc(Math.ceil(t.size()/this.getNodeCapacity())),r=new yt(t);an.sort(r,i.xComparator);var s=this.verticalSlices(r,Math.trunc(Math.ceil(Math.sqrt(n))));return this.createParentBoundablesFromVerticalSlices(s,e)}},{key:\"nearestNeighbour\",value:function(){if(1===arguments.length){if(rt(arguments[0],cn)){var t=arguments[0];if(this.isEmpty())return null;var e=new un(this.getRoot(),this.getRoot(),t);return this.nearestNeighbour(e)}if(arguments[0]instanceof un){var n=arguments[0],i=A.POSITIVE_INFINITY,r=null,s=new nn;for(s.add(n);!s.isEmpty()&&i>0;){var a=s.poll(),o=a.getDistance();if(o>=i)break;a.isLeaves()?(i=o,r=a):a.expandToQueue(s,i)}return null===r?null:[r.getBoundable(0).getItem(),r.getBoundable(1).getItem()]}}else{if(2===arguments.length){var u=arguments[0],l=arguments[1];if(this.isEmpty()||u.isEmpty())return null;var h=new un(this.getRoot(),u.getRoot(),l);return this.nearestNeighbour(h)}if(3===arguments.length){var c=arguments[2],f=new en(arguments[0],arguments[1]),g=new un(this.getRoot(),f,c);return this.nearestNeighbour(g)[0]}if(4===arguments.length){var v=arguments[2],y=arguments[3],d=new en(arguments[0],arguments[1]),_=new un(this.getRoot(),d,v);return this.nearestNeighbourK(_,y)}}}},{key:\"isWithinDistance\",value:function(){if(2===arguments.length){var t=arguments[0],e=arguments[1],n=A.POSITIVE_INFINITY,i=new nn;for(i.add(t);!i.isEmpty();){var r=i.poll(),s=r.getDistance();if(s>e)return!1;if(r.maximumDistance()<=e)return!0;if(r.isLeaves()){if((n=s)<=e)return!0}else r.expandToQueue(i,n)}return!1}if(3===arguments.length){var a=arguments[0],o=arguments[1],u=arguments[2],l=new un(this.getRoot(),a.getRoot(),o);return this.isWithinDistance(l,u)}}},{key:\"interfaces_\",get:function(){return[rn,E]}}],[{key:\"constructor_\",value:function(){if(0===arguments.length)i.constructor_.call(this,i.DEFAULT_NODE_CAPACITY);else if(1===arguments.length){var t=arguments[0];hn.constructor_.call(this,t)}}},{key:\"centreX\",value:function(t){return i.avg(t.getMinX(),t.getMaxX())}},{key:\"avg\",value:function(t,e){return(t+e)/2}},{key:\"getItems\",value:function(t){for(var e=new Array(t.size()).fill(null),n=0;!t.isEmpty();){var i=t.poll();e[n]=i.getBoundable(0).getItem(),n++}return e}},{key:\"centreY\",value:function(t){return i.avg(t.getMinY(),t.getMaxY())}}])}(hn),gn=function(t){function i(){var t;return n(this,i),t=e(this,i),i.constructor_.apply(t,arguments),t}return l(i,t),s(i,[{key:\"computeBounds\",value:function(){for(var t=null,e=this.getChildBoundables().iterator();e.hasNext();){var n=e.next();null===t?t=new U(n.getBounds()):t.expandToInclude(n.getBounds())}return t}}],[{key:\"constructor_\",value:function(){var t=arguments[0];sn.constructor_.call(this,t)}}])}(sn);fn.STRtreeNode=gn,fn.xComparator=new(function(){return s((function t(){n(this,t)}),[{key:\"interfaces_\",get:function(){return[P]}},{key:\"compare\",value:function(t,e){return hn.compareDoubles(fn.centreX(t.getBounds()),fn.centreX(e.getBounds()))}}])}()),fn.yComparator=new(function(){return s((function t(){n(this,t)}),[{key:\"interfaces_\",get:function(){return[P]}},{key:\"compare\",value:function(t,e){return hn.compareDoubles(fn.centreY(t.getBounds()),fn.centreY(e.getBounds()))}}])}()),fn.intersectsOp=new(function(){return s((function t(){n(this,t)}),[{key:\"interfaces_\",get:function(){return[IntersectsOp]}},{key:\"intersects\",value:function(t,e){return t.intersects(e)}}])}()),fn.DEFAULT_NODE_CAPACITY=10;var vn=function(){function t(){n(this,t)}return s(t,null,[{key:\"relativeSign\",value:function(t,e){return t<e?-1:t>e?1:0}},{key:\"compare\",value:function(e,n,i){if(n.equals2D(i))return 0;var r=t.relativeSign(n.x,i.x),s=t.relativeSign(n.y,i.y);switch(e){case 0:return t.compareValue(r,s);case 1:return t.compareValue(s,r);case 2:return t.compareValue(s,-r);case 3:return t.compareValue(-r,s);case 4:return t.compareValue(-r,-s);case 5:return t.compareValue(-s,-r);case 6:return t.compareValue(-s,r);case 7:return t.compareValue(r,-s)}return G.shouldNeverReachHere(\"invalid octant value\"),0}},{key:\"compareValue\",value:function(t,e){return t<0?-1:t>0?1:e<0?-1:e>0?1:0}}])}(),yn=function(){return s((function t(){n(this,t),t.constructor_.apply(this,arguments)}),[{key:\"getCoordinate\",value:function(){return this.coord}},{key:\"print\",value:function(t){t.print(this.coord),t.print(\" seg # = \"+this.segmentIndex)}},{key:\"compareTo\",value:function(t){var e=t;return this.segmentIndex<e.segmentIndex?-1:this.segmentIndex>e.segmentIndex?1:this.coord.equals2D(e.coord)?0:this._isInterior?e._isInterior?vn.compare(this._segmentOctant,this.coord,e.coord):1:-1}},{key:\"isEndPoint\",value:function(t){return 0===this.segmentIndex&&!this._isInterior||this.segmentIndex===t}},{key:\"toString\",value:function(){return this.segmentIndex+\":\"+this.coord.toString()}},{key:\"isInterior\",value:function(){return this._isInterior}},{key:\"interfaces_\",get:function(){return[x]}}],[{key:\"constructor_\",value:function(){this._segString=null,this.coord=null,this.segmentIndex=null,this._segmentOctant=null,this._isInterior=null;var t=arguments[0],e=arguments[1],n=arguments[2],i=arguments[3];this._segString=t,this.coord=new X(e),this.segmentIndex=n,this._segmentOctant=i,this._isInterior=!e.equals2D(t.getCoordinate(n))}}])}(),dn=function(){return s((function t(){n(this,t)}),[{key:\"hasNext\",value:function(){}},{key:\"next\",value:function(){}},{key:\"remove\",value:function(){}}])}(),_n=function(){return s((function t(){n(this,t),t.constructor_.apply(this,arguments)}),[{key:\"getSplitCoordinates\",value:function(){var t=new Zt;this.addEndpoints();for(var e=this.iterator(),n=e.next();e.hasNext();){var i=e.next();this.addEdgeCoordinates(n,i,t),n=i}return t.toCoordinateArray()}},{key:\"addCollapsedNodes\",value:function(){var t=new yt;this.findCollapsesFromInsertedNodes(t),this.findCollapsesFromExistingVertices(t);for(var e=t.iterator();e.hasNext();){var n=e.next().intValue();this.add(this._edge.getCoordinate(n),n)}}},{key:\"createSplitEdgePts\",value:function(t,e){var n=e.segmentIndex-t.segmentIndex+2;if(2===n)return[new X(t.coord),new X(e.coord)];var i=this._edge.getCoordinate(e.segmentIndex),r=e.isInterior()||!e.coord.equals2D(i);r||n--;var s=new Array(n).fill(null),a=0;s[a++]=new X(t.coord);for(var o=t.segmentIndex+1;o<=e.segmentIndex;o++)s[a++]=this._edge.getCoordinate(o);return r&&(s[a]=new X(e.coord)),s}},{key:\"print\",value:function(t){t.println(\"Intersections:\");for(var e=this.iterator();e.hasNext();){e.next().print(t)}}},{key:\"findCollapsesFromExistingVertices\",value:function(t){for(var e=0;e<this._edge.size()-2;e++){var n=this._edge.getCoordinate(e);this._edge.getCoordinate(e+1);var i=this._edge.getCoordinate(e+2);n.equals2D(i)&&t.add(at.valueOf(e+1))}}},{key:\"addEdgeCoordinates\",value:function(t,e,n){var i=this.createSplitEdgePts(t,e);n.add(i,!1)}},{key:\"iterator\",value:function(){return this._nodeMap.values().iterator()}},{key:\"addSplitEdges\",value:function(t){this.addEndpoints(),this.addCollapsedNodes();for(var e=this.iterator(),n=e.next();e.hasNext();){var i=e.next(),r=this.createSplitEdge(n,i);t.add(r),n=i}}},{key:\"findCollapseIndex\",value:function(t,e,n){if(!t.coord.equals2D(e.coord))return!1;var i=e.segmentIndex-t.segmentIndex;return e.isInterior()||i--,1===i&&(n[0]=t.segmentIndex+1,!0)}},{key:\"findCollapsesFromInsertedNodes\",value:function(t){for(var e=new Array(1).fill(null),n=this.iterator(),i=n.next();n.hasNext();){var r=n.next();this.findCollapseIndex(i,r,e)&&t.add(at.valueOf(e[0])),i=r}}},{key:\"getEdge\",value:function(){return this._edge}},{key:\"addEndpoints\",value:function(){var t=this._edge.size()-1;this.add(this._edge.getCoordinate(0),0),this.add(this._edge.getCoordinate(t),t)}},{key:\"createSplitEdge\",value:function(t,e){var n=this.createSplitEdgePts(t,e);return new xn(n,this._edge.getData())}},{key:\"add\",value:function(t,e){var n=new yn(this._edge,t,e,this._edge.getSegmentOctant(e)),i=this._nodeMap.get(n);return null!==i?(G.isTrue(i.coord.equals2D(t),\"Found equal nodes with different coordinates\"),i):(this._nodeMap.put(n,n),n)}},{key:\"checkSplitEdgesCorrectness\",value:function(t){var e=this._edge.getCoordinates(),n=t.get(0).getCoordinate(0);if(!n.equals2D(e[0]))throw new D(\"bad split edge start point at \"+n);var i=t.get(t.size()-1).getCoordinates(),r=i[i.length-1];if(!r.equals2D(e[e.length-1]))throw new D(\"bad split edge end point at \"+r)}}],[{key:\"constructor_\",value:function(){this._nodeMap=new He,this._edge=null;var t=arguments[0];this._edge=t}}])}(),pn=function(){function t(){n(this,t)}return s(t,null,[{key:\"octant\",value:function(){if(\"number\"==typeof arguments[0]&&\"number\"==typeof arguments[1]){var e=arguments[0],n=arguments[1];if(0===e&&0===n)throw new m(\"Cannot compute the octant for point ( \"+e+\", \"+n+\" )\");var i=Math.abs(e),r=Math.abs(n);return e>=0?n>=0?i>=r?0:1:i>=r?7:6:n>=0?i>=r?3:2:i>=r?4:5}if(arguments[0]instanceof X&&arguments[1]instanceof X){var s=arguments[0],a=arguments[1],o=a.x-s.x,u=a.y-s.y;if(0===o&&0===u)throw new m(\"Cannot compute the octant for two identical points \"+s);return t.octant(o,u)}}}])}(),mn=function(){return s((function t(){n(this,t)}),[{key:\"getCoordinates\",value:function(){}},{key:\"size\",value:function(){}},{key:\"getCoordinate\",value:function(t){}},{key:\"isClosed\",value:function(){}},{key:\"setData\",value:function(t){}},{key:\"getData\",value:function(){}}])}(),kn=function(){return s((function t(){n(this,t)}),[{key:\"addIntersection\",value:function(t,e){}},{key:\"interfaces_\",get:function(){return[mn]}}])}(),xn=function(){function t(){n(this,t),t.constructor_.apply(this,arguments)}return s(t,[{key:\"getCoordinates\",value:function(){return this._pts}},{key:\"size\",value:function(){return this._pts.length}},{key:\"getCoordinate\",value:function(t){return this._pts[t]}},{key:\"isClosed\",value:function(){return this._pts[0].equals(this._pts[this._pts.length-1])}},{key:\"getSegmentOctant\",value:function(t){return t===this._pts.length-1?-1:this.safeOctant(this.getCoordinate(t),this.getCoordinate(t+1))}},{key:\"setData\",value:function(t){this._data=t}},{key:\"safeOctant\",value:function(t,e){return t.equals2D(e)?0:pn.octant(t,e)}},{key:\"getData\",value:function(){return this._data}},{key:\"addIntersection\",value:function(){if(2===arguments.length){var t=arguments[0],e=arguments[1];this.addIntersectionNode(t,e)}else if(4===arguments.length){var n=arguments[1],i=arguments[3],r=new X(arguments[0].getIntersection(i));this.addIntersection(r,n)}}},{key:\"toString\",value:function(){return Ce.toLineString(new Qt(this._pts))}},{key:\"getNodeList\",value:function(){return this._nodeList}},{key:\"addIntersectionNode\",value:function(t,e){var n=e,i=n+1;if(i<this._pts.length){var r=this._pts[i];t.equals2D(r)&&(n=i)}return this._nodeList.add(t,n)}},{key:\"addIntersections\",value:function(t,e,n){for(var i=0;i<t.getIntersectionNum();i++)this.addIntersection(t,e,n,i)}},{key:\"interfaces_\",get:function(){return[kn]}}],[{key:\"constructor_\",value:function(){this._nodeList=new _n(this),this._pts=null,this._data=null;var t=arguments[0],e=arguments[1];this._pts=t,this._data=e}},{key:\"getNodedSubstrings\",value:function(){if(1===arguments.length){var e=arguments[0],n=new yt;return t.getNodedSubstrings(e,n),n}if(2===arguments.length)for(var i=arguments[1],r=arguments[0].iterator();r.hasNext();){r.next().getNodeList().addSplitEdges(i)}}}])}(),In=function(){function t(){n(this,t),t.constructor_.apply(this,arguments)}return s(t,[{key:\"minX\",value:function(){return Math.min(this.p0.x,this.p1.x)}},{key:\"orientationIndex\",value:function(){if(arguments[0]instanceof t){var e=arguments[0],n=ct.index(this.p0,this.p1,e.p0),i=ct.index(this.p0,this.p1,e.p1);return n>=0&&i>=0||n<=0&&i<=0?Math.max(n,i):0}if(arguments[0]instanceof X){var r=arguments[0];return ct.index(this.p0,this.p1,r)}}},{key:\"toGeometry\",value:function(t){return t.createLineString([this.p0,this.p1])}},{key:\"isVertical\",value:function(){return this.p0.x===this.p1.x}},{key:\"equals\",value:function(e){if(!(e instanceof t))return!1;var n=e;return this.p0.equals(n.p0)&&this.p1.equals(n.p1)}},{key:\"intersection\",value:function(t){var e=new we;return e.computeIntersection(this.p0,this.p1,t.p0,t.p1),e.hasIntersection()?e.getIntersection(0):null}},{key:\"project\",value:function(){if(arguments[0]instanceof X){var e=arguments[0];if(e.equals(this.p0)||e.equals(this.p1))return new X(e);var n=this.projectionFactor(e),i=new X;return i.x=this.p0.x+n*(this.p1.x-this.p0.x),i.y=this.p0.y+n*(this.p1.y-this.p0.y),i}if(arguments[0]instanceof t){var r=arguments[0],s=this.projectionFactor(r.p0),a=this.projectionFactor(r.p1);if(s>=1&&a>=1)return null;if(s<=0&&a<=0)return null;var o=this.project(r.p0);s<0&&(o=this.p0),s>1&&(o=this.p1);var u=this.project(r.p1);return a<0&&(u=this.p0),a>1&&(u=this.p1),new t(o,u)}}},{key:\"normalize\",value:function(){this.p1.compareTo(this.p0)<0&&this.reverse()}},{key:\"angle\",value:function(){return Math.atan2(this.p1.y-this.p0.y,this.p1.x-this.p0.x)}},{key:\"getCoordinate\",value:function(t){return 0===t?this.p0:this.p1}},{key:\"distancePerpendicular\",value:function(t){return xt.pointToLinePerpendicular(t,this.p0,this.p1)}},{key:\"minY\",value:function(){return Math.min(this.p0.y,this.p1.y)}},{key:\"midPoint\",value:function(){return t.midPoint(this.p0,this.p1)}},{key:\"projectionFactor\",value:function(t){if(t.equals(this.p0))return 0;if(t.equals(this.p1))return 1;var e=this.p1.x-this.p0.x,n=this.p1.y-this.p0.y,i=e*e+n*n;return i<=0?A.NaN:((t.x-this.p0.x)*e+(t.y-this.p0.y)*n)/i}},{key:\"closestPoints\",value:function(t){var e=this.intersection(t);if(null!==e)return[e,e];var n=new Array(2).fill(null),i=A.MAX_VALUE,r=null,s=this.closestPoint(t.p0);i=s.distance(t.p0),n[0]=s,n[1]=t.p0;var a=this.closestPoint(t.p1);(r=a.distance(t.p1))<i&&(i=r,n[0]=a,n[1]=t.p1);var o=t.closestPoint(this.p0);(r=o.distance(this.p0))<i&&(i=r,n[0]=this.p0,n[1]=o);var u=t.closestPoint(this.p1);return(r=u.distance(this.p1))<i&&(i=r,n[0]=this.p1,n[1]=u),n}},{key:\"closestPoint\",value:function(t){var e=this.projectionFactor(t);return e>0&&e<1?this.project(t):this.p0.distance(t)<this.p1.distance(t)?this.p0:this.p1}},{key:\"maxX\",value:function(){return Math.max(this.p0.x,this.p1.x)}},{key:\"getLength\",value:function(){return this.p0.distance(this.p1)}},{key:\"compareTo\",value:function(t){var e=t,n=this.p0.compareTo(e.p0);return 0!==n?n:this.p1.compareTo(e.p1)}},{key:\"reverse\",value:function(){var t=this.p0;this.p0=this.p1,this.p1=t}},{key:\"equalsTopo\",value:function(t){return this.p0.equals(t.p0)&&this.p1.equals(t.p1)||this.p0.equals(t.p1)&&this.p1.equals(t.p0)}},{key:\"lineIntersection\",value:function(t){return pt.intersection(this.p0,this.p1,t.p0,t.p1)}},{key:\"maxY\",value:function(){return Math.max(this.p0.y,this.p1.y)}},{key:\"pointAlongOffset\",value:function(t,e){var n=this.p0.x+t*(this.p1.x-this.p0.x),i=this.p0.y+t*(this.p1.y-this.p0.y),r=this.p1.x-this.p0.x,s=this.p1.y-this.p0.y,a=Math.sqrt(r*r+s*s),o=0,u=0;if(0!==e){if(a<=0)throw new IllegalStateException(\"Cannot compute offset from zero-length line segment\");o=e*r/a,u=e*s/a}return new X(n-u,i+o)}},{key:\"setCoordinates\",value:function(){if(1===arguments.length){var t=arguments[0];this.setCoordinates(t.p0,t.p1)}else if(2===arguments.length){var e=arguments[0],n=arguments[1];this.p0.x=e.x,this.p0.y=e.y,this.p1.x=n.x,this.p1.y=n.y}}},{key:\"segmentFraction\",value:function(t){var e=this.projectionFactor(t);return e<0?e=0:(e>1||A.isNaN(e))&&(e=1),e}},{key:\"toString\",value:function(){return\"LINESTRING( \"+this.p0.x+\" \"+this.p0.y+\", \"+this.p1.x+\" \"+this.p1.y+\")\"}},{key:\"isHorizontal\",value:function(){return this.p0.y===this.p1.y}},{key:\"reflect\",value:function(t){var e=this.p1.getY()-this.p0.getY(),n=this.p0.getX()-this.p1.getX(),i=this.p0.getY()*(this.p1.getX()-this.p0.getX())-this.p0.getX()*(this.p1.getY()-this.p0.getY()),r=e*e+n*n,s=e*e-n*n,a=t.getX(),o=t.getY();return new X((-s*a-2*e*n*o-2*e*i)/r,(s*o-2*e*n*a-2*n*i)/r)}},{key:\"distance\",value:function(){if(arguments[0]instanceof t){var e=arguments[0];return xt.segmentToSegment(this.p0,this.p1,e.p0,e.p1)}if(arguments[0]instanceof X){var n=arguments[0];return xt.pointToSegment(n,this.p0,this.p1)}}},{key:\"pointAlong\",value:function(t){var e=new X;return e.x=this.p0.x+t*(this.p1.x-this.p0.x),e.y=this.p0.y+t*(this.p1.y-this.p0.y),e}},{key:\"hashCode\",value:function(){var t=A.doubleToLongBits(this.p0.x);t^=31*A.doubleToLongBits(this.p0.y);var e=Math.trunc(t)^Math.trunc(t>>32),n=A.doubleToLongBits(this.p1.x);return n^=31*A.doubleToLongBits(this.p1.y),e^(Math.trunc(n)^Math.trunc(n>>32))}},{key:\"interfaces_\",get:function(){return[x,E]}}],[{key:\"constructor_\",value:function(){if(this.p0=null,this.p1=null,0===arguments.length)t.constructor_.call(this,new X,new X);else if(1===arguments.length){var e=arguments[0];t.constructor_.call(this,e.p0,e.p1)}else if(2===arguments.length){var n=arguments[0],i=arguments[1];this.p0=n,this.p1=i}else if(4===arguments.length){var r=arguments[0],s=arguments[1],a=arguments[2],o=arguments[3];t.constructor_.call(this,new X(r,s),new X(a,o))}}},{key:\"midPoint\",value:function(t,e){return new X((t.x+e.x)/2,(t.y+e.y)/2)}}])}(),En=function(){return s((function t(){n(this,t),t.constructor_.apply(this,arguments)}),[{key:\"overlap\",value:function(){if(2===arguments.length);else if(4===arguments.length){var t=arguments[1],e=arguments[2],n=arguments[3];arguments[0].getLineSegment(t,this._overlapSeg1),e.getLineSegment(n,this._overlapSeg2),this.overlap(this._overlapSeg1,this._overlapSeg2)}}}],[{key:\"constructor_\",value:function(){this._overlapSeg1=new In,this._overlapSeg2=new In}}])}(),Nn=function(){return s((function t(){n(this,t),t.constructor_.apply(this,arguments)}),[{key:\"getLineSegment\",value:function(t,e){e.p0=this._pts[t],e.p1=this._pts[t+1]}},{key:\"computeSelect\",value:function(t,e,n,i){var r=this._pts[e],s=this._pts[n];if(n-e==1)return i.select(this,e),null;if(!t.intersects(r,s))return null;var a=Math.trunc((e+n)/2);e<a&&this.computeSelect(t,e,a,i),a<n&&this.computeSelect(t,a,n,i)}},{key:\"getCoordinates\",value:function(){for(var t=new Array(this._end-this._start+1).fill(null),e=0,n=this._start;n<=this._end;n++)t[e++]=this._pts[n];return t}},{key:\"computeOverlaps\",value:function(){if(2===arguments.length){var t=arguments[0],e=arguments[1];this.computeOverlaps(this._start,this._end,t,t._start,t._end,e)}else if(6===arguments.length){var n=arguments[0],i=arguments[1],r=arguments[2],s=arguments[3],a=arguments[4],o=arguments[5];if(i-n==1&&a-s==1)return o.overlap(this,n,r,s),null;if(!this.overlaps(n,i,r,s,a))return null;var u=Math.trunc((n+i)/2),l=Math.trunc((s+a)/2);n<u&&(s<l&&this.computeOverlaps(n,u,r,s,l,o),l<a&&this.computeOverlaps(n,u,r,l,a,o)),u<i&&(s<l&&this.computeOverlaps(u,i,r,s,l,o),l<a&&this.computeOverlaps(u,i,r,l,a,o))}}},{key:\"setId\",value:function(t){this._id=t}},{key:\"select\",value:function(t,e){this.computeSelect(t,this._start,this._end,e)}},{key:\"getEnvelope\",value:function(){if(null===this._env){var t=this._pts[this._start],e=this._pts[this._end];this._env=new U(t,e)}return this._env}},{key:\"overlaps\",value:function(t,e,n,i,r){return U.intersects(this._pts[t],this._pts[e],n._pts[i],n._pts[r])}},{key:\"getEndIndex\",value:function(){return this._end}},{key:\"getStartIndex\",value:function(){return this._start}},{key:\"getContext\",value:function(){return this._context}},{key:\"getId\",value:function(){return this._id}}],[{key:\"constructor_\",value:function(){this._pts=null,this._start=null,this._end=null,this._env=null,this._context=null,this._id=null;var t=arguments[0],e=arguments[1],n=arguments[2],i=arguments[3];this._pts=t,this._start=e,this._end=n,this._context=i}}])}(),Tn=function(){function t(){n(this,t)}return s(t,null,[{key:\"findChainEnd\",value:function(t,e){for(var n=e;n<t.length-1&&t[n].equals2D(t[n+1]);)n++;if(n>=t.length-1)return t.length-1;for(var i=je.quadrant(t[n],t[n+1]),r=e+1;r<t.length;){if(!t[r-1].equals2D(t[r]))if(je.quadrant(t[r-1],t[r])!==i)break;r++}return r-1}},{key:\"getChains\",value:function(){if(1===arguments.length){var e=arguments[0];return t.getChains(e,null)}if(2===arguments.length){var n=arguments[0],i=arguments[1],r=new yt,s=0;do{var a=t.findChainEnd(n,s),o=new Nn(n,s,a,i);r.add(o),s=a}while(s<n.length-1);return r}}}])}(),Sn=function(){return s((function t(){n(this,t)}),[{key:\"computeNodes\",value:function(t){}},{key:\"getNodedSubstrings\",value:function(){}}])}(),Ln=function(){return s((function t(){n(this,t),t.constructor_.apply(this,arguments)}),[{key:\"setSegmentIntersector\",value:function(t){this._segInt=t}},{key:\"interfaces_\",get:function(){return[Sn]}}],[{key:\"constructor_\",value:function(){if(this._segInt=null,0===arguments.length);else if(1===arguments.length){var t=arguments[0];this.setSegmentIntersector(t)}}}])}(),Cn=function(t){function i(){var t;return n(this,i),t=e(this,i),i.constructor_.apply(t,arguments),t}return l(i,t),s(i,[{key:\"getMonotoneChains\",value:function(){return this._monoChains}},{key:\"getNodedSubstrings\",value:function(){return xn.getNodedSubstrings(this._nodedSegStrings)}},{key:\"getIndex\",value:function(){return this._index}},{key:\"add\",value:function(t){for(var e=Tn.getChains(t.getCoordinates(),t).iterator();e.hasNext();){var n=e.next();n.setId(this._idCounter++),this._index.insert(n.getEnvelope(),n),this._monoChains.add(n)}}},{key:\"computeNodes\",value:function(t){this._nodedSegStrings=t;for(var e=t.iterator();e.hasNext();)this.add(e.next());this.intersectChains()}},{key:\"intersectChains\",value:function(){for(var t=new Rn(this._segInt),e=this._monoChains.iterator();e.hasNext();)for(var n=e.next(),i=this._index.query(n.getEnvelope()).iterator();i.hasNext();){var r=i.next();if(r.getId()>n.getId()&&(n.computeOverlaps(r,t),this._nOverlaps++),this._segInt.isDone())return null}}}],[{key:\"constructor_\",value:function(){if(this._monoChains=new yt,this._index=new fn,this._idCounter=0,this._nodedSegStrings=null,this._nOverlaps=0,0===arguments.length);else if(1===arguments.length){var t=arguments[0];Ln.constructor_.call(this,t)}}}])}(Ln),Rn=function(t){function i(){var t;return n(this,i),t=e(this,i),i.constructor_.apply(t,arguments),t}return l(i,t),s(i,[{key:\"overlap\",value:function(){if(4!==arguments.length)return f(i,\"overlap\",this,1).apply(this,arguments);var t=arguments[1],e=arguments[2],n=arguments[3],r=arguments[0].getContext(),s=e.getContext();this._si.processIntersections(r,t,s,n)}}],[{key:\"constructor_\",value:function(){this._si=null;var t=arguments[0];this._si=t}}])}(En);Cn.SegmentOverlapAction=Rn;var wn=function(){function t(){n(this,t),t.constructor_.apply(this,arguments)}return s(t,[{key:\"isDeletable\",value:function(t,e,n,i){var r=this._inputLine[t],s=this._inputLine[e],a=this._inputLine[n];return!!this.isConcave(r,s,a)&&(!!this.isShallow(r,s,a,i)&&this.isShallowSampled(r,s,t,n,i))}},{key:\"deleteShallowConcavities\",value:function(){for(var e=1,n=this.findNextNonDeletedIndex(e),i=this.findNextNonDeletedIndex(n),r=!1;i<this._inputLine.length;){var s=!1;this.isDeletable(e,n,i,this._distanceTol)&&(this._isDeleted[n]=t.DELETE,s=!0,r=!0),e=s?i:n,n=this.findNextNonDeletedIndex(e),i=this.findNextNonDeletedIndex(n)}return r}},{key:\"isShallowConcavity\",value:function(t,e,n,i){return ct.index(t,e,n)===this._angleOrientation&&xt.pointToSegment(e,t,n)<i}},{key:\"isShallowSampled\",value:function(e,n,i,r,s){var a=Math.trunc((r-i)/t.NUM_PTS_TO_CHECK);a<=0&&(a=1);for(var o=i;o<r;o+=a)if(!this.isShallow(e,n,this._inputLine[o],s))return!1;return!0}},{key:\"isConcave\",value:function(t,e,n){var i=ct.index(t,e,n)===this._angleOrientation;return i}},{key:\"simplify\",value:function(t){this._distanceTol=Math.abs(t),t<0&&(this._angleOrientation=ct.CLOCKWISE),this._isDeleted=new Array(this._inputLine.length).fill(null);var e=!1;do{e=this.deleteShallowConcavities()}while(e);return this.collapseLine()}},{key:\"findNextNonDeletedIndex\",value:function(e){for(var n=e+1;n<this._inputLine.length&&this._isDeleted[n]===t.DELETE;)n++;return n}},{key:\"isShallow\",value:function(t,e,n,i){return xt.pointToSegment(e,t,n)<i}},{key:\"collapseLine\",value:function(){for(var e=new Zt,n=0;n<this._inputLine.length;n++)this._isDeleted[n]!==t.DELETE&&e.add(this._inputLine[n]);return e.toCoordinateArray()}}],[{key:\"constructor_\",value:function(){this._inputLine=null,this._distanceTol=null,this._isDeleted=null,this._angleOrientation=ct.COUNTERCLOCKWISE;var t=arguments[0];this._inputLine=t}},{key:\"simplify\",value:function(e,n){return new t(e).simplify(n)}}])}();wn.INIT=0,wn.DELETE=1,wn.KEEP=1,wn.NUM_PTS_TO_CHECK=10;var On=function(){function t(){n(this,t),t.constructor_.apply(this,arguments)}return s(t,[{key:\"getCoordinates\",value:function(){return this._ptList.toArray(t.COORDINATE_ARRAY_TYPE)}},{key:\"setPrecisionModel\",value:function(t){this._precisionModel=t}},{key:\"addPt\",value:function(t){var e=new X(t);if(this._precisionModel.makePrecise(e),this.isRedundant(e))return null;this._ptList.add(e)}},{key:\"reverse\",value:function(){}},{key:\"addPts\",value:function(t,e){if(e)for(var n=0;n<t.length;n++)this.addPt(t[n]);else for(var i=t.length-1;i>=0;i--)this.addPt(t[i])}},{key:\"isRedundant\",value:function(t){if(this._ptList.size()<1)return!1;var e=this._ptList.get(this._ptList.size()-1);return t.distance(e)<this._minimimVertexDistance}},{key:\"toString\",value:function(){return(new ae).createLineString(this.getCoordinates()).toString()}},{key:\"closeRing\",value:function(){if(this._ptList.size()<1)return null;var t=new X(this._ptList.get(0)),e=this._ptList.get(this._ptList.size()-1);if(t.equals(e))return null;this._ptList.add(t)}},{key:\"setMinimumVertexDistance\",value:function(t){this._minimimVertexDistance=t}}],[{key:\"constructor_\",value:function(){this._ptList=null,this._precisionModel=null,this._minimimVertexDistance=0,this._ptList=new yt}}])}();On.COORDINATE_ARRAY_TYPE=new Array(0).fill(null);var bn=function(){function t(){n(this,t)}return s(t,null,[{key:\"toDegrees\",value:function(t){return 180*t/Math.PI}},{key:\"normalize\",value:function(e){for(;e>Math.PI;)e-=t.PI_TIMES_2;for(;e<=-Math.PI;)e+=t.PI_TIMES_2;return e}},{key:\"angle\",value:function(){if(1===arguments.length){var t=arguments[0];return Math.atan2(t.y,t.x)}if(2===arguments.length){var e=arguments[0],n=arguments[1],i=n.x-e.x,r=n.y-e.y;return Math.atan2(r,i)}}},{key:\"isAcute\",value:function(t,e,n){var i=t.x-e.x,r=t.y-e.y;return i*(n.x-e.x)+r*(n.y-e.y)>0}},{key:\"isObtuse\",value:function(t,e,n){var i=t.x-e.x,r=t.y-e.y;return i*(n.x-e.x)+r*(n.y-e.y)<0}},{key:\"interiorAngle\",value:function(e,n,i){var r=t.angle(n,e),s=t.angle(n,i);return Math.abs(s-r)}},{key:\"normalizePositive\",value:function(e){if(e<0){for(;e<0;)e+=t.PI_TIMES_2;e>=t.PI_TIMES_2&&(e=0)}else{for(;e>=t.PI_TIMES_2;)e-=t.PI_TIMES_2;e<0&&(e=0)}return e}},{key:\"angleBetween\",value:function(e,n,i){var r=t.angle(n,e),s=t.angle(n,i);return t.diff(r,s)}},{key:\"diff\",value:function(t,e){var n=null;return(n=t<e?e-t:t-e)>Math.PI&&(n=2*Math.PI-n),n}},{key:\"toRadians\",value:function(t){return t*Math.PI/180}},{key:\"getTurn\",value:function(e,n){var i=Math.sin(n-e);return i>0?t.COUNTERCLOCKWISE:i<0?t.CLOCKWISE:t.NONE}},{key:\"angleBetweenOriented\",value:function(e,n,i){var r=t.angle(n,e),s=t.angle(n,i)-r;return s<=-Math.PI?s+t.PI_TIMES_2:s>Math.PI?s-t.PI_TIMES_2:s}}])}();bn.PI_TIMES_2=2*Math.PI,bn.PI_OVER_2=Math.PI/2,bn.PI_OVER_4=Math.PI/4,bn.COUNTERCLOCKWISE=ct.COUNTERCLOCKWISE,bn.CLOCKWISE=ct.CLOCKWISE,bn.NONE=ct.COLLINEAR;var Mn=function(){function t(){n(this,t),t.constructor_.apply(this,arguments)}return s(t,[{key:\"addNextSegment\",value:function(t,e){if(this._s0=this._s1,this._s1=this._s2,this._s2=t,this._seg0.setCoordinates(this._s0,this._s1),this.computeOffsetSegment(this._seg0,this._side,this._distance,this._offset0),this._seg1.setCoordinates(this._s1,this._s2),this.computeOffsetSegment(this._seg1,this._side,this._distance,this._offset1),this._s1.equals(this._s2))return null;var n=ct.index(this._s0,this._s1,this._s2),i=n===ct.CLOCKWISE&&this._side===$.LEFT||n===ct.COUNTERCLOCKWISE&&this._side===$.RIGHT;0===n?this.addCollinear(e):i?this.addOutsideTurn(n,e):this.addInsideTurn(n,e)}},{key:\"addLineEndCap\",value:function(t,e){var n=new In(t,e),i=new In;this.computeOffsetSegment(n,$.LEFT,this._distance,i);var r=new In;this.computeOffsetSegment(n,$.RIGHT,this._distance,r);var s=e.x-t.x,a=e.y-t.y,o=Math.atan2(a,s);switch(this._bufParams.getEndCapStyle()){case _.CAP_ROUND:this._segList.addPt(i.p1),this.addDirectedFillet(e,o+Math.PI/2,o-Math.PI/2,ct.CLOCKWISE,this._distance),this._segList.addPt(r.p1);break;case _.CAP_FLAT:this._segList.addPt(i.p1),this._segList.addPt(r.p1);break;case _.CAP_SQUARE:var u=new X;u.x=Math.abs(this._distance)*Math.cos(o),u.y=Math.abs(this._distance)*Math.sin(o);var l=new X(i.p1.x+u.x,i.p1.y+u.y),h=new X(r.p1.x+u.x,r.p1.y+u.y);this._segList.addPt(l),this._segList.addPt(h)}}},{key:\"getCoordinates\",value:function(){return this._segList.getCoordinates()}},{key:\"addMitreJoin\",value:function(t,e,n,i){var r=pt.intersection(e.p0,e.p1,n.p0,n.p1);if(null!==r&&(i<=0?1:r.distance(t)/Math.abs(i))<=this._bufParams.getMitreLimit())return this._segList.addPt(r),null;this.addLimitedMitreJoin(e,n,i,this._bufParams.getMitreLimit())}},{key:\"addOutsideTurn\",value:function(e,n){if(this._offset0.p1.distance(this._offset1.p0)<this._distance*t.OFFSET_SEGMENT_SEPARATION_FACTOR)return this._segList.addPt(this._offset0.p1),null;this._bufParams.getJoinStyle()===_.JOIN_MITRE?this.addMitreJoin(this._s1,this._offset0,this._offset1,this._distance):this._bufParams.getJoinStyle()===_.JOIN_BEVEL?this.addBevelJoin(this._offset0,this._offset1):(n&&this._segList.addPt(this._offset0.p1),this.addCornerFillet(this._s1,this._offset0.p1,this._offset1.p0,e,this._distance),this._segList.addPt(this._offset1.p0))}},{key:\"createSquare\",value:function(t){this._segList.addPt(new X(t.x+this._distance,t.y+this._distance)),this._segList.addPt(new X(t.x+this._distance,t.y-this._distance)),this._segList.addPt(new X(t.x-this._distance,t.y-this._distance)),this._segList.addPt(new X(t.x-this._distance,t.y+this._distance)),this._segList.closeRing()}},{key:\"addSegments\",value:function(t,e){this._segList.addPts(t,e)}},{key:\"addFirstSegment\",value:function(){this._segList.addPt(this._offset1.p0)}},{key:\"addCornerFillet\",value:function(t,e,n,i,r){var s=e.x-t.x,a=e.y-t.y,o=Math.atan2(a,s),u=n.x-t.x,l=n.y-t.y,h=Math.atan2(l,u);i===ct.CLOCKWISE?o<=h&&(o+=2*Math.PI):o>=h&&(o-=2*Math.PI),this._segList.addPt(e),this.addDirectedFillet(t,o,h,i,r),this._segList.addPt(n)}},{key:\"addLastSegment\",value:function(){this._segList.addPt(this._offset1.p1)}},{key:\"initSideSegments\",value:function(t,e,n){this._s1=t,this._s2=e,this._side=n,this._seg1.setCoordinates(t,e),this.computeOffsetSegment(this._seg1,n,this._distance,this._offset1)}},{key:\"addLimitedMitreJoin\",value:function(t,e,n,i){var r=this._seg0.p1,s=bn.angle(r,this._seg0.p0),a=bn.angleBetweenOriented(this._seg0.p0,r,this._seg1.p1)/2,o=bn.normalize(s+a),u=bn.normalize(o+Math.PI),l=i*n,h=n-l*Math.abs(Math.sin(a)),c=r.x+l*Math.cos(u),f=r.y+l*Math.sin(u),g=new X(c,f),v=new In(r,g),y=v.pointAlongOffset(1,h),d=v.pointAlongOffset(1,-h);this._side===$.LEFT?(this._segList.addPt(y),this._segList.addPt(d)):(this._segList.addPt(d),this._segList.addPt(y))}},{key:\"addDirectedFillet\",value:function(t,e,n,i,r){var s=i===ct.CLOCKWISE?-1:1,a=Math.abs(e-n),o=Math.trunc(a/this._filletAngleQuantum+.5);if(o<1)return null;for(var u=a/o,l=new X,h=0;h<o;h++){var c=e+s*h*u;l.x=t.x+r*Math.cos(c),l.y=t.y+r*Math.sin(c),this._segList.addPt(l)}}},{key:\"computeOffsetSegment\",value:function(t,e,n,i){var r=e===$.LEFT?1:-1,s=t.p1.x-t.p0.x,a=t.p1.y-t.p0.y,o=Math.sqrt(s*s+a*a),u=r*n*s/o,l=r*n*a/o;i.p0.x=t.p0.x-l,i.p0.y=t.p0.y+u,i.p1.x=t.p1.x-l,i.p1.y=t.p1.y+u}},{key:\"addInsideTurn\",value:function(e,n){if(this._li.computeIntersection(this._offset0.p0,this._offset0.p1,this._offset1.p0,this._offset1.p1),this._li.hasIntersection())this._segList.addPt(this._li.getIntersection(0));else if(this._hasNarrowConcaveAngle=!0,this._offset0.p1.distance(this._offset1.p0)<this._distance*t.INSIDE_TURN_VERTEX_SNAP_DISTANCE_FACTOR)this._segList.addPt(this._offset0.p1);else{if(this._segList.addPt(this._offset0.p1),this._closingSegLengthFactor>0){var i=new X((this._closingSegLengthFactor*this._offset0.p1.x+this._s1.x)/(this._closingSegLengthFactor+1),(this._closingSegLengthFactor*this._offset0.p1.y+this._s1.y)/(this._closingSegLengthFactor+1));this._segList.addPt(i);var r=new X((this._closingSegLengthFactor*this._offset1.p0.x+this._s1.x)/(this._closingSegLengthFactor+1),(this._closingSegLengthFactor*this._offset1.p0.y+this._s1.y)/(this._closingSegLengthFactor+1));this._segList.addPt(r)}else this._segList.addPt(this._s1);this._segList.addPt(this._offset1.p0)}}},{key:\"createCircle\",value:function(t){var e=new X(t.x+this._distance,t.y);this._segList.addPt(e),this.addDirectedFillet(t,0,2*Math.PI,-1,this._distance),this._segList.closeRing()}},{key:\"addBevelJoin\",value:function(t,e){this._segList.addPt(t.p1),this._segList.addPt(e.p0)}},{key:\"init\",value:function(e){this._distance=e,this._maxCurveSegmentError=e*(1-Math.cos(this._filletAngleQuantum/2)),this._segList=new On,this._segList.setPrecisionModel(this._precisionModel),this._segList.setMinimumVertexDistance(e*t.CURVE_VERTEX_SNAP_DISTANCE_FACTOR)}},{key:\"addCollinear\",value:function(t){this._li.computeIntersection(this._s0,this._s1,this._s1,this._s2),this._li.getIntersectionNum()>=2&&(this._bufParams.getJoinStyle()===_.JOIN_BEVEL||this._bufParams.getJoinStyle()===_.JOIN_MITRE?(t&&this._segList.addPt(this._offset0.p1),this._segList.addPt(this._offset1.p0)):this.addCornerFillet(this._s1,this._offset0.p1,this._offset1.p0,ct.CLOCKWISE,this._distance))}},{key:\"closeRing\",value:function(){this._segList.closeRing()}},{key:\"hasNarrowConcaveAngle\",value:function(){return this._hasNarrowConcaveAngle}}],[{key:\"constructor_\",value:function(){this._maxCurveSegmentError=0,this._filletAngleQuantum=null,this._closingSegLengthFactor=1,this._segList=null,this._distance=0,this._precisionModel=null,this._bufParams=null,this._li=null,this._s0=null,this._s1=null,this._s2=null,this._seg0=new In,this._seg1=new In,this._offset0=new In,this._offset1=new In,this._side=0,this._hasNarrowConcaveAngle=!1;var e=arguments[0],n=arguments[1],i=arguments[2];this._precisionModel=e,this._bufParams=n,this._li=new we,this._filletAngleQuantum=Math.PI/2/n.getQuadrantSegments(),n.getQuadrantSegments()>=8&&n.getJoinStyle()===_.JOIN_ROUND&&(this._closingSegLengthFactor=t.MAX_CLOSING_SEG_LEN_FACTOR),this.init(i)}}])}();Mn.OFFSET_SEGMENT_SEPARATION_FACTOR=.001,Mn.INSIDE_TURN_VERTEX_SNAP_DISTANCE_FACTOR=.001,Mn.CURVE_VERTEX_SNAP_DISTANCE_FACTOR=1e-6,Mn.MAX_CLOSING_SEG_LEN_FACTOR=80;var An=function(){function t(){n(this,t),t.constructor_.apply(this,arguments)}return s(t,[{key:\"getOffsetCurve\",value:function(t,e){if(this._distance=e,0===e)return null;var n=e<0,i=Math.abs(e),r=this.getSegGen(i);t.length<=1?this.computePointCurve(t[0],r):this.computeOffsetCurve(t,n,r);var s=r.getCoordinates();return n&&jt.reverse(s),s}},{key:\"computeSingleSidedBufferCurve\",value:function(t,e,n){var i=this.simplifyTolerance(this._distance);if(e){n.addSegments(t,!0);var r=wn.simplify(t,-i),s=r.length-1;n.initSideSegments(r[s],r[s-1],$.LEFT),n.addFirstSegment();for(var a=s-2;a>=0;a--)n.addNextSegment(r[a],!0)}else{n.addSegments(t,!1);var o=wn.simplify(t,i),u=o.length-1;n.initSideSegments(o[0],o[1],$.LEFT),n.addFirstSegment();for(var l=2;l<=u;l++)n.addNextSegment(o[l],!0)}n.addLastSegment(),n.closeRing()}},{key:\"computeRingBufferCurve\",value:function(t,e,n){var i=this.simplifyTolerance(this._distance);e===$.RIGHT&&(i=-i);var r=wn.simplify(t,i),s=r.length-1;n.initSideSegments(r[s-1],r[0],e);for(var a=1;a<=s;a++){var o=1!==a;n.addNextSegment(r[a],o)}n.closeRing()}},{key:\"computeLineBufferCurve\",value:function(t,e){var n=this.simplifyTolerance(this._distance),i=wn.simplify(t,n),r=i.length-1;e.initSideSegments(i[0],i[1],$.LEFT);for(var s=2;s<=r;s++)e.addNextSegment(i[s],!0);e.addLastSegment(),e.addLineEndCap(i[r-1],i[r]);var a=wn.simplify(t,-n),o=a.length-1;e.initSideSegments(a[o],a[o-1],$.LEFT);for(var u=o-2;u>=0;u--)e.addNextSegment(a[u],!0);e.addLastSegment(),e.addLineEndCap(a[1],a[0]),e.closeRing()}},{key:\"computePointCurve\",value:function(t,e){switch(this._bufParams.getEndCapStyle()){case _.CAP_ROUND:e.createCircle(t);break;case _.CAP_SQUARE:e.createSquare(t)}}},{key:\"getLineCurve\",value:function(t,e){if(this._distance=e,this.isLineOffsetEmpty(e))return null;var n=Math.abs(e),i=this.getSegGen(n);if(t.length<=1)this.computePointCurve(t[0],i);else if(this._bufParams.isSingleSided()){var r=e<0;this.computeSingleSidedBufferCurve(t,r,i)}else this.computeLineBufferCurve(t,i);return i.getCoordinates()}},{key:\"getBufferParameters\",value:function(){return this._bufParams}},{key:\"simplifyTolerance\",value:function(t){return t*this._bufParams.getSimplifyFactor()}},{key:\"getRingCurve\",value:function(e,n,i){if(this._distance=i,e.length<=2)return this.getLineCurve(e,i);if(0===i)return t.copyCoordinates(e);var r=this.getSegGen(i);return this.computeRingBufferCurve(e,n,r),r.getCoordinates()}},{key:\"computeOffsetCurve\",value:function(t,e,n){var i=this.simplifyTolerance(this._distance);if(e){var r=wn.simplify(t,-i),s=r.length-1;n.initSideSegments(r[s],r[s-1],$.LEFT),n.addFirstSegment();for(var a=s-2;a>=0;a--)n.addNextSegment(r[a],!0)}else{var o=wn.simplify(t,i),u=o.length-1;n.initSideSegments(o[0],o[1],$.LEFT),n.addFirstSegment();for(var l=2;l<=u;l++)n.addNextSegment(o[l],!0)}n.addLastSegment()}},{key:\"isLineOffsetEmpty\",value:function(t){return 0===t||t<0&&!this._bufParams.isSingleSided()}},{key:\"getSegGen\",value:function(t){return new Mn(this._precisionModel,this._bufParams,t)}}],[{key:\"constructor_\",value:function(){this._distance=0,this._precisionModel=null,this._bufParams=null;var t=arguments[0],e=arguments[1];this._precisionModel=t,this._bufParams=e}},{key:\"copyCoordinates\",value:function(t){for(var e=new Array(t.length).fill(null),n=0;n<e.length;n++)e[n]=new X(t[n]);return e}}])}(),Pn=function(){return s((function t(){n(this,t),t.constructor_.apply(this,arguments)}),[{key:\"findStabbedSegments\",value:function(){if(1===arguments.length){for(var t=arguments[0],e=new yt,n=this._subgraphs.iterator();n.hasNext();){var i=n.next(),r=i.getEnvelope();t.y<r.getMinY()||t.y>r.getMaxY()||this.findStabbedSegments(t,i.getDirectedEdges(),e)}return e}if(3===arguments.length)if(rt(arguments[2],nt)&&arguments[0]instanceof X&&arguments[1]instanceof Ke)for(var s=arguments[0],a=arguments[1],o=arguments[2],u=a.getEdge().getCoordinates(),l=0;l<u.length-1;l++){if(this._seg.p0=u[l],this._seg.p1=u[l+1],this._seg.p0.y>this._seg.p1.y&&this._seg.reverse(),!(Math.max(this._seg.p0.x,this._seg.p1.x)<s.x||this._seg.isHorizontal()||s.y<this._seg.p0.y||s.y>this._seg.p1.y||ct.index(this._seg.p0,this._seg.p1,s)===ct.RIGHT)){var h=a.getDepth($.LEFT);this._seg.p0.equals(u[l])||(h=a.getDepth($.RIGHT));var c=new Dn(this._seg,h);o.add(c)}}else if(rt(arguments[2],nt)&&arguments[0]instanceof X&&rt(arguments[1],nt))for(var f=arguments[0],g=arguments[2],v=arguments[1].iterator();v.hasNext();){var y=v.next();y.isForward()&&this.findStabbedSegments(f,y,g)}}},{key:\"getDepth\",value:function(t){var e=this.findStabbedSegments(t);return 0===e.size()?0:an.min(e)._leftDepth}}],[{key:\"constructor_\",value:function(){this._subgraphs=null,this._seg=new In;var t=arguments[0];this._subgraphs=t}}])}(),Dn=function(){return s((function t(){n(this,t),t.constructor_.apply(this,arguments)}),[{key:\"compareTo\",value:function(t){var e=t;if(this._upwardSeg.minX()>=e._upwardSeg.maxX())return 1;if(this._upwardSeg.maxX()<=e._upwardSeg.minX())return-1;var n=this._upwardSeg.orientationIndex(e._upwardSeg);return 0!==n||0!==(n=-1*e._upwardSeg.orientationIndex(this._upwardSeg))?n:this._upwardSeg.compareTo(e._upwardSeg)}},{key:\"compareX\",value:function(t,e){var n=t.p0.compareTo(e.p0);return 0!==n?n:t.p1.compareTo(e.p1)}},{key:\"toString\",value:function(){return this._upwardSeg.toString()}},{key:\"interfaces_\",get:function(){return[x]}}],[{key:\"constructor_\",value:function(){this._upwardSeg=null,this._leftDepth=null;var t=arguments[0],e=arguments[1];this._upwardSeg=new In(t),this._leftDepth=e}}])}();Pn.DepthSegment=Dn;var Fn=function(t){function i(){var t;return n(this,i),t=e(this,i),i.constructor_.apply(t,arguments),t}return l(i,t),s(i,null,[{key:\"constructor_\",value:function(){p.constructor_.call(this,\"Projective point not representable on the Cartesian plane.\")}}])}(p),Gn=function(){function t(){n(this,t),t.constructor_.apply(this,arguments)}return s(t,[{key:\"getY\",value:function(){var t=this.y/this.w;if(A.isNaN(t)||A.isInfinite(t))throw new Fn;return t}},{key:\"getX\",value:function(){var t=this.x/this.w;if(A.isNaN(t)||A.isInfinite(t))throw new Fn;return t}},{key:\"getCoordinate\",value:function(){var t=new X;return t.x=this.getX(),t.y=this.getY(),t}}],[{key:\"constructor_\",value:function(){if(this.x=null,this.y=null,this.w=null,0===arguments.length)this.x=0,this.y=0,this.w=1;else if(1===arguments.length){var e=arguments[0];this.x=e.x,this.y=e.y,this.w=1}else if(2===arguments.length){if(\"number\"==typeof arguments[0]&&\"number\"==typeof arguments[1]){var n=arguments[0],i=arguments[1];this.x=n,this.y=i,this.w=1}else if(arguments[0]instanceof t&&arguments[1]instanceof t){var r=arguments[0],s=arguments[1];this.x=r.y*s.w-s.y*r.w,this.y=s.x*r.w-r.x*s.w,this.w=r.x*s.y-s.x*r.y}else if(arguments[0]instanceof X&&arguments[1]instanceof X){var a=arguments[0],o=arguments[1];this.x=a.y-o.y,this.y=o.x-a.x,this.w=a.x*o.y-o.x*a.y}}else if(3===arguments.length){var u=arguments[0],l=arguments[1],h=arguments[2];this.x=u,this.y=l,this.w=h}else if(4===arguments.length){var c=arguments[0],f=arguments[1],g=arguments[2],v=arguments[3],y=c.y-f.y,d=f.x-c.x,_=c.x*f.y-f.x*c.y,p=g.y-v.y,m=v.x-g.x,k=g.x*v.y-v.x*g.y;this.x=d*k-m*_,this.y=p*_-y*k,this.w=y*m-p*d}}}])}(),qn=function(){function t(){n(this,t),t.constructor_.apply(this,arguments)}return s(t,[{key:\"area\",value:function(){return t.area(this.p0,this.p1,this.p2)}},{key:\"signedArea\",value:function(){return t.signedArea(this.p0,this.p1,this.p2)}},{key:\"interpolateZ\",value:function(e){if(null===e)throw new m(\"Supplied point is null.\");return t.interpolateZ(e,this.p0,this.p1,this.p2)}},{key:\"longestSideLength\",value:function(){return t.longestSideLength(this.p0,this.p1,this.p2)}},{key:\"isAcute\",value:function(){return t.isAcute(this.p0,this.p1,this.p2)}},{key:\"circumcentre\",value:function(){return t.circumcentre(this.p0,this.p1,this.p2)}},{key:\"area3D\",value:function(){return t.area3D(this.p0,this.p1,this.p2)}},{key:\"centroid\",value:function(){return t.centroid(this.p0,this.p1,this.p2)}},{key:\"inCentre\",value:function(){return t.inCentre(this.p0,this.p1,this.p2)}}],[{key:\"constructor_\",value:function(){this.p0=null,this.p1=null,this.p2=null;var t=arguments[0],e=arguments[1],n=arguments[2];this.p0=t,this.p1=e,this.p2=n}},{key:\"area\",value:function(t,e,n){return Math.abs(((n.x-t.x)*(e.y-t.y)-(e.x-t.x)*(n.y-t.y))/2)}},{key:\"signedArea\",value:function(t,e,n){return((n.x-t.x)*(e.y-t.y)-(e.x-t.x)*(n.y-t.y))/2}},{key:\"det\",value:function(t,e,n,i){return t*i-e*n}},{key:\"interpolateZ\",value:function(t,e,n,i){var r=e.x,s=e.y,a=n.x-r,o=i.x-r,u=n.y-s,l=i.y-s,h=a*l-o*u,c=t.x-r,f=t.y-s,g=(l*c-o*f)/h,v=(-u*c+a*f)/h;return e.getZ()+g*(n.getZ()-e.getZ())+v*(i.getZ()-e.getZ())}},{key:\"longestSideLength\",value:function(t,e,n){var i=t.distance(e),r=e.distance(n),s=n.distance(t),a=i;return r>a&&(a=r),s>a&&(a=s),a}},{key:\"circumcentreDD\",value:function(t,e,n){var i=ut.valueOf(t.x).subtract(n.x),r=ut.valueOf(t.y).subtract(n.y),s=ut.valueOf(e.x).subtract(n.x),a=ut.valueOf(e.y).subtract(n.y),o=ut.determinant(i,r,s,a).multiply(2),u=i.sqr().add(r.sqr()),l=s.sqr().add(a.sqr()),h=ut.determinant(r,u,a,l),c=ut.determinant(i,u,s,l),f=ut.valueOf(n.x).subtract(h.divide(o)).doubleValue(),g=ut.valueOf(n.y).add(c.divide(o)).doubleValue();return new X(f,g)}},{key:\"isAcute\",value:function(t,e,n){return!!bn.isAcute(t,e,n)&&(!!bn.isAcute(e,n,t)&&!!bn.isAcute(n,t,e))}},{key:\"circumcentre\",value:function(e,n,i){var r=i.x,s=i.y,a=e.x-r,o=e.y-s,u=n.x-r,l=n.y-s,h=2*t.det(a,o,u,l),c=t.det(o,a*a+o*o,l,u*u+l*l),f=t.det(a,a*a+o*o,u,u*u+l*l);return new X(r-c/h,s+f/h)}},{key:\"perpendicularBisector\",value:function(t,e){var n=e.x-t.x,i=e.y-t.y,r=new Gn(t.x+n/2,t.y+i/2,1),s=new Gn(t.x-i+n/2,t.y+n+i/2,1);return new Gn(r,s)}},{key:\"angleBisector\",value:function(t,e,n){var i=e.distance(t),r=i/(i+e.distance(n)),s=n.x-t.x,a=n.y-t.y;return new X(t.x+r*s,t.y+r*a)}},{key:\"area3D\",value:function(t,e,n){var i=e.x-t.x,r=e.y-t.y,s=e.getZ()-t.getZ(),a=n.x-t.x,o=n.y-t.y,u=n.getZ()-t.getZ(),l=r*u-s*o,h=s*a-i*u,c=i*o-r*a,f=l*l+h*h+c*c,g=Math.sqrt(f)/2;return g}},{key:\"centroid\",value:function(t,e,n){var i=(t.x+e.x+n.x)/3,r=(t.y+e.y+n.y)/3;return new X(i,r)}},{key:\"inCentre\",value:function(t,e,n){var i=e.distance(n),r=t.distance(n),s=t.distance(e),a=i+r+s,o=(i*t.x+r*e.x+s*n.x)/a,u=(i*t.y+r*e.y+s*n.y)/a;return new X(o,u)}}])}(),Yn=function(){return s((function t(){n(this,t),t.constructor_.apply(this,arguments)}),[{key:\"addRingSide\",value:function(t,e,n,i,r){if(0===e&&t.length<Xt.MINIMUM_VALID_SIZE)return null;var s=i,a=r;t.length>=Xt.MINIMUM_VALID_SIZE&&ct.isCCW(t)&&(s=r,a=i,n=$.opposite(n));var o=this._curveBuilder.getRingCurve(t,n,e);this.addCurve(o,s,a)}},{key:\"addRingBothSides\",value:function(t,e){this.addRingSide(t,e,$.LEFT,H.EXTERIOR,H.INTERIOR),this.addRingSide(t,e,$.RIGHT,H.INTERIOR,H.EXTERIOR)}},{key:\"addPoint\",value:function(t){if(this._distance<=0)return null;var e=t.getCoordinates(),n=this._curveBuilder.getLineCurve(e,this._distance);this.addCurve(n,H.EXTERIOR,H.INTERIOR)}},{key:\"addPolygon\",value:function(t){var e=this._distance,n=$.LEFT;this._distance<0&&(e=-this._distance,n=$.RIGHT);var i=t.getExteriorRing(),r=jt.removeRepeatedPoints(i.getCoordinates());if(this._distance<0&&this.isErodedCompletely(i,this._distance))return null;if(this._distance<=0&&r.length<3)return null;this.addRingSide(r,e,n,H.EXTERIOR,H.INTERIOR);for(var s=0;s<t.getNumInteriorRing();s++){var a=t.getInteriorRingN(s),o=jt.removeRepeatedPoints(a.getCoordinates());this._distance>0&&this.isErodedCompletely(a,-this._distance)||this.addRingSide(o,e,$.opposite(n),H.INTERIOR,H.EXTERIOR)}}},{key:\"isTriangleErodedCompletely\",value:function(t,e){var n=new qn(t[0],t[1],t[2]),i=n.inCentre();return xt.pointToSegment(i,n.p0,n.p1)<Math.abs(e)}},{key:\"addLineString\",value:function(t){if(this._curveBuilder.isLineOffsetEmpty(this._distance))return null;var e=jt.removeRepeatedPoints(t.getCoordinates());if(jt.isRing(e)&&!this._curveBuilder.getBufferParameters().isSingleSided())this.addRingBothSides(e,this._distance);else{var n=this._curveBuilder.getLineCurve(e,this._distance);this.addCurve(n,H.EXTERIOR,H.INTERIOR)}}},{key:\"addCurve\",value:function(t,e,n){if(null===t||t.length<2)return null;var i=new xn(t,new Ae(0,H.BOUNDARY,e,n));this._curveList.add(i)}},{key:\"getCurves\",value:function(){return this.add(this._inputGeom),this._curveList}},{key:\"add\",value:function(t){if(t.isEmpty())return null;if(t instanceof Dt)this.addPolygon(t);else if(t instanceof wt)this.addLineString(t);else if(t instanceof bt)this.addPoint(t);else if(t instanceof zt)this.addCollection(t);else if(t instanceof se)this.addCollection(t);else if(t instanceof te)this.addCollection(t);else{if(!(t instanceof Yt))throw new W(t.getGeometryType());this.addCollection(t)}}},{key:\"isErodedCompletely\",value:function(t,e){var n=t.getCoordinates();if(n.length<4)return e<0;if(4===n.length)return this.isTriangleErodedCompletely(n,e);var i=t.getEnvelopeInternal(),r=Math.min(i.getHeight(),i.getWidth());return e<0&&2*Math.abs(e)>r}},{key:\"addCollection\",value:function(t){for(var e=0;e<t.getNumGeometries();e++){var n=t.getGeometryN(e);this.add(n)}}}],[{key:\"constructor_\",value:function(){this._inputGeom=null,this._distance=null,this._curveBuilder=null,this._curveList=new yt;var t=arguments[0],e=arguments[1],n=arguments[2];this._inputGeom=t,this._distance=e,this._curveBuilder=n}}])}(),zn=function(){return s((function t(){n(this,t)}),[{key:\"locate\",value:function(t){}}])}(),Xn=function(){function t(){n(this,t),t.constructor_.apply(this,arguments)}return s(t,[{key:\"next\",value:function(){if(this._atStart)return this._atStart=!1,t.isAtomic(this._parent)&&this._index++,this._parent;if(null!==this._subcollectionIterator){if(this._subcollectionIterator.hasNext())return this._subcollectionIterator.next();this._subcollectionIterator=null}if(this._index>=this._max)throw new j;var e=this._parent.getGeometryN(this._index++);return e instanceof Yt?(this._subcollectionIterator=new t(e),this._subcollectionIterator.next()):e}},{key:\"remove\",value:function(){throw new W(this.getClass().getName())}},{key:\"hasNext\",value:function(){if(this._atStart)return!0;if(null!==this._subcollectionIterator){if(this._subcollectionIterator.hasNext())return!0;this._subcollectionIterator=null}return!(this._index>=this._max)}},{key:\"interfaces_\",get:function(){return[dn]}}],[{key:\"constructor_\",value:function(){this._parent=null,this._atStart=null,this._max=null,this._index=null,this._subcollectionIterator=null;var t=arguments[0];this._parent=t,this._atStart=!0,this._index=0,this._max=t.getNumGeometries()}},{key:\"isAtomic\",value:function(t){return!(t instanceof Yt)}}])}(),Bn=function(){function t(){n(this,t),t.constructor_.apply(this,arguments)}return s(t,[{key:\"locate\",value:function(e){return t.locate(e,this._geom)}},{key:\"interfaces_\",get:function(){return[zn]}}],[{key:\"constructor_\",value:function(){this._geom=null;var t=arguments[0];this._geom=t}},{key:\"locatePointInPolygon\",value:function(e,n){if(n.isEmpty())return H.EXTERIOR;var i=n.getExteriorRing(),r=t.locatePointInRing(e,i);if(r!==H.INTERIOR)return r;for(var s=0;s<n.getNumInteriorRing();s++){var a=n.getInteriorRingN(s),o=t.locatePointInRing(e,a);if(o===H.BOUNDARY)return H.BOUNDARY;if(o===H.INTERIOR)return H.EXTERIOR}return H.INTERIOR}},{key:\"locatePointInRing\",value:function(t,e){return e.getEnvelopeInternal().intersects(t)?be.locateInRing(t,e.getCoordinates()):H.EXTERIOR}},{key:\"containsPointInPolygon\",value:function(e,n){return H.EXTERIOR!==t.locatePointInPolygon(e,n)}},{key:\"locateInGeometry\",value:function(e,n){if(n instanceof Dt)return t.locatePointInPolygon(e,n);if(n instanceof Yt)for(var i=new Xn(n);i.hasNext();){var r=i.next();if(r!==n){var s=t.locateInGeometry(e,r);if(s!==H.EXTERIOR)return s}}return H.EXTERIOR}},{key:\"isContained\",value:function(e,n){return H.EXTERIOR!==t.locate(e,n)}},{key:\"locate\",value:function(e,n){return n.isEmpty()?H.EXTERIOR:n.getEnvelopeInternal().intersects(e)?t.locateInGeometry(e,n):H.EXTERIOR}}])}(),Un=function(){return s((function t(){n(this,t),t.constructor_.apply(this,arguments)}),[{key:\"getNextCW\",value:function(t){this.getEdges();var e=this._edgeList.indexOf(t),n=e-1;return 0===e&&(n=this._edgeList.size()-1),this._edgeList.get(n)}},{key:\"propagateSideLabels\",value:function(t){for(var e=H.NONE,n=this.iterator();n.hasNext();){var i=n.next().getLabel();i.isArea(t)&&i.getLocation(t,$.LEFT)!==H.NONE&&(e=i.getLocation(t,$.LEFT))}if(e===H.NONE)return null;for(var r=e,s=this.iterator();s.hasNext();){var a=s.next(),o=a.getLabel();if(o.getLocation(t,$.ON)===H.NONE&&o.setLocation(t,$.ON,r),o.isArea(t)){var u=o.getLocation(t,$.LEFT),l=o.getLocation(t,$.RIGHT);if(l!==H.NONE){if(l!==r)throw new gt(\"side location conflict\",a.getCoordinate());u===H.NONE&&G.shouldNeverReachHere(\"found single null side (at \"+a.getCoordinate()+\")\"),r=u}else G.isTrue(o.getLocation(t,$.LEFT)===H.NONE,\"found single null side\"),o.setLocation(t,$.RIGHT,r),o.setLocation(t,$.LEFT,r)}}}},{key:\"getCoordinate\",value:function(){var t=this.iterator();return t.hasNext()?t.next().getCoordinate():null}},{key:\"print\",value:function(t){mt.out.println(\"EdgeEndStar: \"+this.getCoordinate());for(var e=this.iterator();e.hasNext();){e.next().print(t)}}},{key:\"isAreaLabelsConsistent\",value:function(t){return this.computeEdgeEndLabels(t.getBoundaryNodeRule()),this.checkAreaLabelsConsistent(0)}},{key:\"checkAreaLabelsConsistent\",value:function(t){var e=this.getEdges();if(e.size()<=0)return!0;var n=e.size()-1,i=e.get(n).getLabel().getLocation(t,$.LEFT);G.isTrue(i!==H.NONE,\"Found unlabelled area edge\");for(var r=i,s=this.iterator();s.hasNext();){var a=s.next().getLabel();G.isTrue(a.isArea(t),\"Found non-area edge\");var o=a.getLocation(t,$.LEFT),u=a.getLocation(t,$.RIGHT);if(o===u)return!1;if(u!==r)return!1;r=o}return!0}},{key:\"findIndex\",value:function(t){this.iterator();for(var e=0;e<this._edgeList.size();e++){if(this._edgeList.get(e)===t)return e}return-1}},{key:\"iterator\",value:function(){return this.getEdges().iterator()}},{key:\"getEdges\",value:function(){return null===this._edgeList&&(this._edgeList=new yt(this._edgeMap.values())),this._edgeList}},{key:\"getLocation\",value:function(t,e,n){return this._ptInAreaLocation[t]===H.NONE&&(this._ptInAreaLocation[t]=Bn.locate(e,n[t].getGeometry())),this._ptInAreaLocation[t]}},{key:\"toString\",value:function(){var t=new st;t.append(\"EdgeEndStar: \"+this.getCoordinate()),t.append(\"\\n\");for(var e=this.iterator();e.hasNext();){var n=e.next();t.append(n),t.append(\"\\n\")}return t.toString()}},{key:\"computeEdgeEndLabels\",value:function(t){for(var e=this.iterator();e.hasNext();){e.next().computeLabel(t)}}},{key:\"computeLabelling\",value:function(t){this.computeEdgeEndLabels(t[0].getBoundaryNodeRule()),this.propagateSideLabels(0),this.propagateSideLabels(1);for(var e=[!1,!1],n=this.iterator();n.hasNext();)for(var i=n.next().getLabel(),r=0;r<2;r++)i.isLine(r)&&i.getLocation(r)===H.BOUNDARY&&(e[r]=!0);for(var s=this.iterator();s.hasNext();)for(var a=s.next(),o=a.getLabel(),u=0;u<2;u++)if(o.isAnyNull(u)){var l=H.NONE;if(e[u])l=H.EXTERIOR;else{var h=a.getCoordinate();l=this.getLocation(u,h,t)}o.setAllLocationsIfNull(u,l)}}},{key:\"getDegree\",value:function(){return this._edgeMap.size()}},{key:\"insertEdgeEnd\",value:function(t,e){this._edgeMap.put(t,e),this._edgeList=null}}],[{key:\"constructor_\",value:function(){this._edgeMap=new He,this._edgeList=null,this._ptInAreaLocation=[H.NONE,H.NONE]}}])}(),Vn=function(t){function i(){var t;return n(this,i),t=e(this,i),i.constructor_.apply(t,arguments),t}return l(i,t),s(i,[{key:\"linkResultDirectedEdges\",value:function(){this.getResultAreaEdges();for(var t=null,e=null,n=this._SCANNING_FOR_INCOMING,i=0;i<this._resultAreaEdgeList.size();i++){var r=this._resultAreaEdgeList.get(i),s=r.getSym();if(r.getLabel().isArea())switch(null===t&&r.isInResult()&&(t=r),n){case this._SCANNING_FOR_INCOMING:if(!s.isInResult())continue;e=s,n=this._LINKING_TO_OUTGOING;break;case this._LINKING_TO_OUTGOING:if(!r.isInResult())continue;e.setNext(r),n=this._SCANNING_FOR_INCOMING}}if(n===this._LINKING_TO_OUTGOING){if(null===t)throw new gt(\"no outgoing dirEdge found\",this.getCoordinate());G.isTrue(t.isInResult(),\"unable to link last incoming dirEdge\"),e.setNext(t)}}},{key:\"insert\",value:function(t){var e=t;this.insertEdgeEnd(e,e)}},{key:\"getRightmostEdge\",value:function(){var t=this.getEdges(),e=t.size();if(e<1)return null;var n=t.get(0);if(1===e)return n;var i=t.get(e-1),r=n.getQuadrant(),s=i.getQuadrant();return je.isNorthern(r)&&je.isNorthern(s)?n:je.isNorthern(r)||je.isNorthern(s)?0!==n.getDy()?n:0!==i.getDy()?i:(G.shouldNeverReachHere(\"found two horizontal edges incident on node\"),null):i}},{key:\"print\",value:function(t){mt.out.println(\"DirectedEdgeStar: \"+this.getCoordinate());for(var e=this.iterator();e.hasNext();){var n=e.next();t.print(\"out \"),n.print(t),t.println(),t.print(\"in \"),n.getSym().print(t),t.println()}}},{key:\"getResultAreaEdges\",value:function(){if(null!==this._resultAreaEdgeList)return this._resultAreaEdgeList;this._resultAreaEdgeList=new yt;for(var t=this.iterator();t.hasNext();){var e=t.next();(e.isInResult()||e.getSym().isInResult())&&this._resultAreaEdgeList.add(e)}return this._resultAreaEdgeList}},{key:\"updateLabelling\",value:function(t){for(var e=this.iterator();e.hasNext();){var n=e.next().getLabel();n.setAllLocationsIfNull(0,t.getLocation(0)),n.setAllLocationsIfNull(1,t.getLocation(1))}}},{key:\"linkAllDirectedEdges\",value:function(){this.getEdges();for(var t=null,e=null,n=this._edgeList.size()-1;n>=0;n--){var i=this._edgeList.get(n),r=i.getSym();null===e&&(e=r),null!==t&&r.setNext(t),t=i}e.setNext(t)}},{key:\"computeDepths\",value:function(){if(1===arguments.length){var t=arguments[0],e=this.findIndex(t),n=t.getDepth($.LEFT),i=t.getDepth($.RIGHT),r=this.computeDepths(e+1,this._edgeList.size(),n);if(this.computeDepths(0,e,r)!==i)throw new gt(\"depth mismatch at \"+t.getCoordinate())}else if(3===arguments.length){for(var s=arguments[1],a=arguments[2],o=arguments[0];o<s;o++){var u=this._edgeList.get(o);u.setEdgeDepths($.RIGHT,a),a=u.getDepth($.LEFT)}return a}}},{key:\"mergeSymLabels\",value:function(){for(var t=this.iterator();t.hasNext();){var e=t.next();e.getLabel().merge(e.getSym().getLabel())}}},{key:\"linkMinimalDirectedEdges\",value:function(t){for(var e=null,n=null,i=this._SCANNING_FOR_INCOMING,r=this._resultAreaEdgeList.size()-1;r>=0;r--){var s=this._resultAreaEdgeList.get(r),a=s.getSym();switch(null===e&&s.getEdgeRing()===t&&(e=s),i){case this._SCANNING_FOR_INCOMING:if(a.getEdgeRing()!==t)continue;n=a,i=this._LINKING_TO_OUTGOING;break;case this._LINKING_TO_OUTGOING:if(s.getEdgeRing()!==t)continue;n.setNextMin(s),i=this._SCANNING_FOR_INCOMING}}i===this._LINKING_TO_OUTGOING&&(G.isTrue(null!==e,\"found null for first outgoing dirEdge\"),G.isTrue(e.getEdgeRing()===t,\"unable to link last incoming dirEdge\"),n.setNextMin(e))}},{key:\"getOutgoingDegree\",value:function(){if(0===arguments.length){for(var t=0,e=this.iterator();e.hasNext();){e.next().isInResult()&&t++}return t}if(1===arguments.length){for(var n=arguments[0],i=0,r=this.iterator();r.hasNext();){r.next().getEdgeRing()===n&&i++}return i}}},{key:\"getLabel\",value:function(){return this._label}},{key:\"findCoveredLineEdges\",value:function(){for(var t=H.NONE,e=this.iterator();e.hasNext();){var n=e.next(),i=n.getSym();if(!n.isLineEdge()){if(n.isInResult()){t=H.INTERIOR;break}if(i.isInResult()){t=H.EXTERIOR;break}}}if(t===H.NONE)return null;for(var r=t,s=this.iterator();s.hasNext();){var a=s.next(),o=a.getSym();a.isLineEdge()?a.getEdge().setCovered(r===H.INTERIOR):(a.isInResult()&&(r=H.EXTERIOR),o.isInResult()&&(r=H.INTERIOR))}}},{key:\"computeLabelling\",value:function(t){f(i,\"computeLabelling\",this,1).call(this,t),this._label=new Ae(H.NONE);for(var e=this.iterator();e.hasNext();)for(var n=e.next().getEdge().getLabel(),r=0;r<2;r++){var s=n.getLocation(r);s!==H.INTERIOR&&s!==H.BOUNDARY||this._label.setLocation(r,H.INTERIOR)}}}],[{key:\"constructor_\",value:function(){this._resultAreaEdgeList=null,this._label=null,this._SCANNING_FOR_INCOMING=1,this._LINKING_TO_OUTGOING=2}}])}(Un),Hn=function(t){function i(){return n(this,i),e(this,i)}return l(i,t),s(i,[{key:\"createNode\",value:function(t){return new qe(t,new Vn)}}])}(Je),Zn=function(){function t(){n(this,t),t.constructor_.apply(this,arguments)}return s(t,[{key:\"compareTo\",value:function(e){var n=e;return t.compareOriented(this._pts,this._orientation,n._pts,n._orientation)}},{key:\"interfaces_\",get:function(){return[x]}}],[{key:\"constructor_\",value:function(){this._pts=null,this._orientation=null;var e=arguments[0];this._pts=e,this._orientation=t.orientation(e)}},{key:\"orientation\",value:function(t){return 1===jt.increasingDirection(t)}},{key:\"compareOriented\",value:function(t,e,n,i){for(var r=e?1:-1,s=i?1:-1,a=e?t.length:-1,o=i?n.length:-1,u=e?0:t.length-1,l=i?0:n.length-1;;){var h=t[u].compareTo(n[l]);if(0!==h)return h;var c=(u+=r)===a,f=(l+=s)===o;if(c&&!f)return-1;if(!c&&f)return 1;if(c&&f)return 0}}}])}(),jn=function(){return s((function t(){n(this,t),t.constructor_.apply(this,arguments)}),[{key:\"print\",value:function(t){t.print(\"MULTILINESTRING ( \");for(var e=0;e<this._edges.size();e++){var n=this._edges.get(e);e>0&&t.print(\",\"),t.print(\"(\");for(var i=n.getCoordinates(),r=0;r<i.length;r++)r>0&&t.print(\",\"),t.print(i[r].x+\" \"+i[r].y);t.println(\")\")}t.print(\") \")}},{key:\"addAll\",value:function(t){for(var e=t.iterator();e.hasNext();)this.add(e.next())}},{key:\"findEdgeIndex\",value:function(t){for(var e=0;e<this._edges.size();e++)if(this._edges.get(e).equals(t))return e;return-1}},{key:\"iterator\",value:function(){return this._edges.iterator()}},{key:\"getEdges\",value:function(){return this._edges}},{key:\"get\",value:function(t){return this._edges.get(t)}},{key:\"findEqualEdge\",value:function(t){var e=new Zn(t.getCoordinates());return this._ocaMap.get(e)}},{key:\"add\",value:function(t){this._edges.add(t);var e=new Zn(t.getCoordinates());this._ocaMap.put(e,t)}}],[{key:\"constructor_\",value:function(){this._edges=new yt,this._ocaMap=new He}}])}(),Wn=function(){return s((function t(){n(this,t)}),[{key:\"processIntersections\",value:function(t,e,n,i){}},{key:\"isDone\",value:function(){}}])}(),Kn=function(){function t(){n(this,t),t.constructor_.apply(this,arguments)}return s(t,[{key:\"isTrivialIntersection\",value:function(e,n,i,r){if(e===i&&1===this._li.getIntersectionNum()){if(t.isAdjacentSegments(n,r))return!0;if(e.isClosed()){var s=e.size()-1;if(0===n&&r===s||0===r&&n===s)return!0}}return!1}},{key:\"getProperIntersectionPoint\",value:function(){return this._properIntersectionPoint}},{key:\"hasProperInteriorIntersection\",value:function(){return this._hasProperInterior}},{key:\"getLineIntersector\",value:function(){return this._li}},{key:\"hasProperIntersection\",value:function(){return this._hasProper}},{key:\"processIntersections\",value:function(t,e,n,i){if(t===n&&e===i)return null;this.numTests++;var r=t.getCoordinates()[e],s=t.getCoordinates()[e+1],a=n.getCoordinates()[i],o=n.getCoordinates()[i+1];this._li.computeIntersection(r,s,a,o),this._li.hasIntersection()&&(this.numIntersections++,this._li.isInteriorIntersection()&&(this.numInteriorIntersections++,this._hasInterior=!0),this.isTrivialIntersection(t,e,n,i)||(this._hasIntersection=!0,t.addIntersections(this._li,e,0),n.addIntersections(this._li,i,1),this._li.isProper()&&(this.numProperIntersections++,this._hasProper=!0,this._hasProperInterior=!0)))}},{key:\"hasIntersection\",value:function(){return this._hasIntersection}},{key:\"isDone\",value:function(){return!1}},{key:\"hasInteriorIntersection\",value:function(){return this._hasInterior}},{key:\"interfaces_\",get:function(){return[Wn]}}],[{key:\"constructor_\",value:function(){this._hasIntersection=!1,this._hasProper=!1,this._hasProperInterior=!1,this._hasInterior=!1,this._properIntersectionPoint=null,this._li=null,this._isSelfIntersection=null,this.numIntersections=0,this.numInteriorIntersections=0,this.numProperIntersections=0,this.numTests=0;var t=arguments[0];this._li=t}},{key:\"isAdjacentSegments\",value:function(t,e){return 1===Math.abs(t-e)}}])}(),Jn=function(){return s((function t(){n(this,t),t.constructor_.apply(this,arguments)}),[{key:\"getSegmentIndex\",value:function(){return this.segmentIndex}},{key:\"getCoordinate\",value:function(){return this.coord}},{key:\"print\",value:function(t){t.print(this.coord),t.print(\" seg # = \"+this.segmentIndex),t.println(\" dist = \"+this.dist)}},{key:\"compareTo\",value:function(t){var e=t;return this.compare(e.segmentIndex,e.dist)}},{key:\"isEndPoint\",value:function(t){return 0===this.segmentIndex&&0===this.dist||this.segmentIndex===t}},{key:\"toString\",value:function(){return this.coord+\" seg # = \"+this.segmentIndex+\" dist = \"+this.dist}},{key:\"getDistance\",value:function(){return this.dist}},{key:\"compare\",value:function(t,e){return this.segmentIndex<t?-1:this.segmentIndex>t?1:this.dist<e?-1:this.dist>e?1:0}},{key:\"interfaces_\",get:function(){return[x]}}],[{key:\"constructor_\",value:function(){this.coord=null,this.segmentIndex=null,this.dist=null;var t=arguments[0],e=arguments[1],n=arguments[2];this.coord=new X(t),this.segmentIndex=e,this.dist=n}}])}(),Qn=function(){return s((function t(){n(this,t),t.constructor_.apply(this,arguments)}),[{key:\"print\",value:function(t){t.println(\"Intersections:\");for(var e=this.iterator();e.hasNext();){e.next().print(t)}}},{key:\"iterator\",value:function(){return this._nodeMap.values().iterator()}},{key:\"addSplitEdges\",value:function(t){this.addEndpoints();for(var e=this.iterator(),n=e.next();e.hasNext();){var i=e.next(),r=this.createSplitEdge(n,i);t.add(r),n=i}}},{key:\"addEndpoints\",value:function(){var t=this.edge.pts.length-1;this.add(this.edge.pts[0],0,0),this.add(this.edge.pts[t],t,0)}},{key:\"createSplitEdge\",value:function(t,e){var n=e.segmentIndex-t.segmentIndex+2,i=this.edge.pts[e.segmentIndex],r=e.dist>0||!e.coord.equals2D(i);r||n--;var s=new Array(n).fill(null),a=0;s[a++]=new X(t.coord);for(var o=t.segmentIndex+1;o<=e.segmentIndex;o++)s[a++]=this.edge.pts[o];return r&&(s[a]=e.coord),new ri(s,new Ae(this.edge._label))}},{key:\"add\",value:function(t,e,n){var i=new Jn(t,e,n),r=this._nodeMap.get(i);return null!==r?r:(this._nodeMap.put(i,i),i)}},{key:\"isIntersection\",value:function(t){for(var e=this.iterator();e.hasNext();){if(e.next().coord.equals(t))return!0}return!1}}],[{key:\"constructor_\",value:function(){this._nodeMap=new He,this.edge=null;var t=arguments[0];this.edge=t}}])}(),$n=function(){function t(){n(this,t),t.constructor_.apply(this,arguments)}return s(t,[{key:\"isIntersects\",value:function(){return!this.isDisjoint()}},{key:\"isCovers\",value:function(){return(t.isTrue(this._matrix[H.INTERIOR][H.INTERIOR])||t.isTrue(this._matrix[H.INTERIOR][H.BOUNDARY])||t.isTrue(this._matrix[H.BOUNDARY][H.INTERIOR])||t.isTrue(this._matrix[H.BOUNDARY][H.BOUNDARY]))&&this._matrix[H.EXTERIOR][H.INTERIOR]===Lt.FALSE&&this._matrix[H.EXTERIOR][H.BOUNDARY]===Lt.FALSE}},{key:\"isCoveredBy\",value:function(){return(t.isTrue(this._matrix[H.INTERIOR][H.INTERIOR])||t.isTrue(this._matrix[H.INTERIOR][H.BOUNDARY])||t.isTrue(this._matrix[H.BOUNDARY][H.INTERIOR])||t.isTrue(this._matrix[H.BOUNDARY][H.BOUNDARY]))&&this._matrix[H.INTERIOR][H.EXTERIOR]===Lt.FALSE&&this._matrix[H.BOUNDARY][H.EXTERIOR]===Lt.FALSE}},{key:\"set\",value:function(){if(1===arguments.length)for(var t=arguments[0],e=0;e<t.length;e++){var n=Math.trunc(e/3),i=e%3;this._matrix[n][i]=Lt.toDimensionValue(t.charAt(e))}else if(3===arguments.length){var r=arguments[0],s=arguments[1],a=arguments[2];this._matrix[r][s]=a}}},{key:\"isContains\",value:function(){return t.isTrue(this._matrix[H.INTERIOR][H.INTERIOR])&&this._matrix[H.EXTERIOR][H.INTERIOR]===Lt.FALSE&&this._matrix[H.EXTERIOR][H.BOUNDARY]===Lt.FALSE}},{key:\"setAtLeast\",value:function(){if(1===arguments.length)for(var t=arguments[0],e=0;e<t.length;e++){var n=Math.trunc(e/3),i=e%3;this.setAtLeast(n,i,Lt.toDimensionValue(t.charAt(e)))}else if(3===arguments.length){var r=arguments[0],s=arguments[1],a=arguments[2];this._matrix[r][s]<a&&(this._matrix[r][s]=a)}}},{key:\"setAtLeastIfValid\",value:function(t,e,n){t>=0&&e>=0&&this.setAtLeast(t,e,n)}},{key:\"isWithin\",value:function(){return t.isTrue(this._matrix[H.INTERIOR][H.INTERIOR])&&this._matrix[H.INTERIOR][H.EXTERIOR]===Lt.FALSE&&this._matrix[H.BOUNDARY][H.EXTERIOR]===Lt.FALSE}},{key:\"isTouches\",value:function(e,n){return e>n?this.isTouches(n,e):(e===Lt.A&&n===Lt.A||e===Lt.L&&n===Lt.L||e===Lt.L&&n===Lt.A||e===Lt.P&&n===Lt.A||e===Lt.P&&n===Lt.L)&&(this._matrix[H.INTERIOR][H.INTERIOR]===Lt.FALSE&&(t.isTrue(this._matrix[H.INTERIOR][H.BOUNDARY])||t.isTrue(this._matrix[H.BOUNDARY][H.INTERIOR])||t.isTrue(this._matrix[H.BOUNDARY][H.BOUNDARY])))}},{key:\"isOverlaps\",value:function(e,n){return e===Lt.P&&n===Lt.P||e===Lt.A&&n===Lt.A?t.isTrue(this._matrix[H.INTERIOR][H.INTERIOR])&&t.isTrue(this._matrix[H.INTERIOR][H.EXTERIOR])&&t.isTrue(this._matrix[H.EXTERIOR][H.INTERIOR]):e===Lt.L&&n===Lt.L&&(1===this._matrix[H.INTERIOR][H.INTERIOR]&&t.isTrue(this._matrix[H.INTERIOR][H.EXTERIOR])&&t.isTrue(this._matrix[H.EXTERIOR][H.INTERIOR]))}},{key:\"isEquals\",value:function(e,n){return e===n&&(t.isTrue(this._matrix[H.INTERIOR][H.INTERIOR])&&this._matrix[H.INTERIOR][H.EXTERIOR]===Lt.FALSE&&this._matrix[H.BOUNDARY][H.EXTERIOR]===Lt.FALSE&&this._matrix[H.EXTERIOR][H.INTERIOR]===Lt.FALSE&&this._matrix[H.EXTERIOR][H.BOUNDARY]===Lt.FALSE)}},{key:\"toString\",value:function(){for(var t=new Jt(\"123456789\"),e=0;e<3;e++)for(var n=0;n<3;n++)t.setCharAt(3*e+n,Lt.toDimensionSymbol(this._matrix[e][n]));return t.toString()}},{key:\"setAll\",value:function(t){for(var e=0;e<3;e++)for(var n=0;n<3;n++)this._matrix[e][n]=t}},{key:\"get\",value:function(t,e){return this._matrix[t][e]}},{key:\"transpose\",value:function(){var t=this._matrix[1][0];return this._matrix[1][0]=this._matrix[0][1],this._matrix[0][1]=t,t=this._matrix[2][0],this._matrix[2][0]=this._matrix[0][2],this._matrix[0][2]=t,t=this._matrix[2][1],this._matrix[2][1]=this._matrix[1][2],this._matrix[1][2]=t,this}},{key:\"matches\",value:function(e){if(9!==e.length)throw new m(\"Should be length 9: \"+e);for(var n=0;n<3;n++)for(var i=0;i<3;i++)if(!t.matches(this._matrix[n][i],e.charAt(3*n+i)))return!1;return!0}},{key:\"add\",value:function(t){for(var e=0;e<3;e++)for(var n=0;n<3;n++)this.setAtLeast(e,n,t.get(e,n))}},{key:\"isDisjoint\",value:function(){return this._matrix[H.INTERIOR][H.INTERIOR]===Lt.FALSE&&this._matrix[H.INTERIOR][H.BOUNDARY]===Lt.FALSE&&this._matrix[H.BOUNDARY][H.INTERIOR]===Lt.FALSE&&this._matrix[H.BOUNDARY][H.BOUNDARY]===Lt.FALSE}},{key:\"isCrosses\",value:function(e,n){return e===Lt.P&&n===Lt.L||e===Lt.P&&n===Lt.A||e===Lt.L&&n===Lt.A?t.isTrue(this._matrix[H.INTERIOR][H.INTERIOR])&&t.isTrue(this._matrix[H.INTERIOR][H.EXTERIOR]):e===Lt.L&&n===Lt.P||e===Lt.A&&n===Lt.P||e===Lt.A&&n===Lt.L?t.isTrue(this._matrix[H.INTERIOR][H.INTERIOR])&&t.isTrue(this._matrix[H.EXTERIOR][H.INTERIOR]):e===Lt.L&&n===Lt.L&&0===this._matrix[H.INTERIOR][H.INTERIOR]}},{key:\"interfaces_\",get:function(){return[I]}}],[{key:\"constructor_\",value:function(){if(this._matrix=null,0===arguments.length)this._matrix=Array(3).fill().map((function(){return Array(3)})),this.setAll(Lt.FALSE);else if(1===arguments.length)if(\"string\"==typeof arguments[0]){var e=arguments[0];t.constructor_.call(this),this.set(e)}else if(arguments[0]instanceof t){var n=arguments[0];t.constructor_.call(this),this._matrix[H.INTERIOR][H.INTERIOR]=n._matrix[H.INTERIOR][H.INTERIOR],this._matrix[H.INTERIOR][H.BOUNDARY]=n._matrix[H.INTERIOR][H.BOUNDARY],this._matrix[H.INTERIOR][H.EXTERIOR]=n._matrix[H.INTERIOR][H.EXTERIOR],this._matrix[H.BOUNDARY][H.INTERIOR]=n._matrix[H.BOUNDARY][H.INTERIOR],this._matrix[H.BOUNDARY][H.BOUNDARY]=n._matrix[H.BOUNDARY][H.BOUNDARY],this._matrix[H.BOUNDARY][H.EXTERIOR]=n._matrix[H.BOUNDARY][H.EXTERIOR],this._matrix[H.EXTERIOR][H.INTERIOR]=n._matrix[H.EXTERIOR][H.INTERIOR],this._matrix[H.EXTERIOR][H.BOUNDARY]=n._matrix[H.EXTERIOR][H.BOUNDARY],this._matrix[H.EXTERIOR][H.EXTERIOR]=n._matrix[H.EXTERIOR][H.EXTERIOR]}}},{key:\"matches\",value:function(){if(Number.isInteger(arguments[0])&&\"string\"==typeof arguments[1]){var e=arguments[0],n=arguments[1];return n===Lt.SYM_DONTCARE||(n===Lt.SYM_TRUE&&(e>=0||e===Lt.TRUE)||(n===Lt.SYM_FALSE&&e===Lt.FALSE||(n===Lt.SYM_P&&e===Lt.P||(n===Lt.SYM_L&&e===Lt.L||n===Lt.SYM_A&&e===Lt.A))))}if(\"string\"==typeof arguments[0]&&\"string\"==typeof arguments[1]){var i=arguments[1];return new t(arguments[0]).matches(i)}}},{key:\"isTrue\",value:function(t){return t>=0||t===Lt.TRUE}}])}(),ti=function(){function t(){n(this,t),t.constructor_.apply(this,arguments)}return s(t,[{key:\"size\",value:function(){return this._size}},{key:\"addAll\",value:function(t){return null===t||0===t.length?null:(this.ensureCapacity(this._size+t.length),mt.arraycopy(t,0,this._data,this._size,t.length),void(this._size+=t.length))}},{key:\"ensureCapacity\",value:function(t){if(t<=this._data.length)return null;var e=Math.max(t,2*this._data.length);this._data=At.copyOf(this._data,e)}},{key:\"toArray\",value:function(){var t=new Array(this._size).fill(null);return mt.arraycopy(this._data,0,t,0,this._size),t}},{key:\"add\",value:function(t){this.ensureCapacity(this._size+1),this._data[this._size]=t,++this._size}}],[{key:\"constructor_\",value:function(){if(this._data=null,this._size=0,0===arguments.length)t.constructor_.call(this,10);else if(1===arguments.length){var e=arguments[0];this._data=new Array(e).fill(null)}}}])}(),ei=function(){function t(){n(this,t)}return s(t,[{key:\"getChainStartIndices\",value:function(t){var e=0,n=new ti(Math.trunc(t.length/2));n.add(e);do{var i=this.findChainEnd(t,e);n.add(i),e=i}while(e<t.length-1);return n.toArray()}},{key:\"findChainEnd\",value:function(t,e){for(var n=je.quadrant(t[e],t[e+1]),i=e+1;i<t.length;){if(je.quadrant(t[i-1],t[i])!==n)break;i++}return i-1}},{key:\"OLDgetChainStartIndices\",value:function(e){var n=0,i=new yt;i.add(n);do{var r=this.findChainEnd(e,n);i.add(r),n=r}while(n<e.length-1);return t.toIntArray(i)}}],[{key:\"toIntArray\",value:function(t){for(var e=new Array(t.size()).fill(null),n=0;n<e.length;n++)e[n]=t.get(n).intValue();return e}}])}(),ni=function(){return s((function t(){n(this,t),t.constructor_.apply(this,arguments)}),[{key:\"getCoordinates\",value:function(){return this.pts}},{key:\"getMaxX\",value:function(t){var e=this.pts[this.startIndex[t]].x,n=this.pts[this.startIndex[t+1]].x;return e>n?e:n}},{key:\"getMinX\",value:function(t){var e=this.pts[this.startIndex[t]].x,n=this.pts[this.startIndex[t+1]].x;return e<n?e:n}},{key:\"computeIntersectsForChain\",value:function(){if(4===arguments.length){var t=arguments[0],e=arguments[1],n=arguments[2],i=arguments[3];this.computeIntersectsForChain(this.startIndex[t],this.startIndex[t+1],e,e.startIndex[n],e.startIndex[n+1],i)}else if(6===arguments.length){var r=arguments[0],s=arguments[1],a=arguments[2],o=arguments[3],u=arguments[4],l=arguments[5];if(s-r==1&&u-o==1)return l.addIntersections(this.e,r,a.e,o),null;if(!this.overlaps(r,s,a,o,u))return null;var h=Math.trunc((r+s)/2),c=Math.trunc((o+u)/2);r<h&&(o<c&&this.computeIntersectsForChain(r,h,a,o,c,l),c<u&&this.computeIntersectsForChain(r,h,a,c,u,l)),h<s&&(o<c&&this.computeIntersectsForChain(h,s,a,o,c,l),c<u&&this.computeIntersectsForChain(h,s,a,c,u,l))}}},{key:\"overlaps\",value:function(t,e,n,i,r){return U.intersects(this.pts[t],this.pts[e],n.pts[i],n.pts[r])}},{key:\"getStartIndexes\",value:function(){return this.startIndex}},{key:\"computeIntersects\",value:function(t,e){for(var n=0;n<this.startIndex.length-1;n++)for(var i=0;i<t.startIndex.length-1;i++)this.computeIntersectsForChain(n,t,i,e)}}],[{key:\"constructor_\",value:function(){this.e=null,this.pts=null,this.startIndex=null;var t=arguments[0];this.e=t,this.pts=t.getCoordinates();var e=new ei;this.startIndex=e.getChainStartIndices(this.pts)}}])}(),ii=function(){function t(){n(this,t),t.constructor_.apply(this,arguments)}return s(t,[{key:\"getDepth\",value:function(t,e){return this._depth[t][e]}},{key:\"setDepth\",value:function(t,e,n){this._depth[t][e]=n}},{key:\"isNull\",value:function(){if(0===arguments.length){for(var e=0;e<2;e++)for(var n=0;n<3;n++)if(this._depth[e][n]!==t.NULL_VALUE)return!1;return!0}if(1===arguments.length){var i=arguments[0];return this._depth[i][1]===t.NULL_VALUE}if(2===arguments.length){var r=arguments[0],s=arguments[1];return this._depth[r][s]===t.NULL_VALUE}}},{key:\"normalize\",value:function(){for(var t=0;t<2;t++)if(!this.isNull(t)){var e=this._depth[t][1];this._depth[t][2]<e&&(e=this._depth[t][2]),e<0&&(e=0);for(var n=1;n<3;n++){var i=0;this._depth[t][n]>e&&(i=1),this._depth[t][n]=i}}}},{key:\"getDelta\",value:function(t){return this._depth[t][$.RIGHT]-this._depth[t][$.LEFT]}},{key:\"getLocation\",value:function(t,e){return this._depth[t][e]<=0?H.EXTERIOR:H.INTERIOR}},{key:\"toString\",value:function(){return\"A: \"+this._depth[0][1]+\",\"+this._depth[0][2]+\" B: \"+this._depth[1][1]+\",\"+this._depth[1][2]}},{key:\"add\",value:function(){if(1===arguments.length)for(var e=arguments[0],n=0;n<2;n++)for(var i=1;i<3;i++){var r=e.getLocation(n,i);r!==H.EXTERIOR&&r!==H.INTERIOR||(this.isNull(n,i)?this._depth[n][i]=t.depthAtLocation(r):this._depth[n][i]+=t.depthAtLocation(r))}else if(3===arguments.length){var s=arguments[0],a=arguments[1];arguments[2]===H.INTERIOR&&this._depth[s][a]++}}}],[{key:\"constructor_\",value:function(){this._depth=Array(2).fill().map((function(){return Array(3)}));for(var e=0;e<2;e++)for(var n=0;n<3;n++)this._depth[e][n]=t.NULL_VALUE}},{key:\"depthAtLocation\",value:function(e){return e===H.EXTERIOR?0:e===H.INTERIOR?1:t.NULL_VALUE}}])}();ii.NULL_VALUE=-1;var ri=function(t){function i(){var t;return n(this,i),t=e(this,i),i.constructor_.apply(t,arguments),t}return l(i,t),s(i,[{key:\"getDepth\",value:function(){return this._depth}},{key:\"getCollapsedEdge\",value:function(){var t=new Array(2).fill(null);return t[0]=this.pts[0],t[1]=this.pts[1],new i(t,Ae.toLineLabel(this._label))}},{key:\"isIsolated\",value:function(){return this._isIsolated}},{key:\"getCoordinates\",value:function(){return this.pts}},{key:\"setIsolated\",value:function(t){this._isIsolated=t}},{key:\"setName\",value:function(t){this._name=t}},{key:\"equals\",value:function(t){if(!(t instanceof i))return!1;var e=t;if(this.pts.length!==e.pts.length)return!1;for(var n=!0,r=!0,s=this.pts.length,a=0;a<this.pts.length;a++)if(this.pts[a].equals2D(e.pts[a])||(n=!1),this.pts[a].equals2D(e.pts[--s])||(r=!1),!n&&!r)return!1;return!0}},{key:\"getCoordinate\",value:function(){if(0===arguments.length)return this.pts.length>0?this.pts[0]:null;if(1===arguments.length){var t=arguments[0];return this.pts[t]}}},{key:\"print\",value:function(t){t.print(\"edge \"+this._name+\": \"),t.print(\"LINESTRING (\");for(var e=0;e<this.pts.length;e++)e>0&&t.print(\",\"),t.print(this.pts[e].x+\" \"+this.pts[e].y);t.print(\") \"+this._label+\" \"+this._depthDelta)}},{key:\"computeIM\",value:function(t){i.updateIM(this._label,t)}},{key:\"isCollapsed\",value:function(){return!!this._label.isArea()&&(3===this.pts.length&&!!this.pts[0].equals(this.pts[2]))}},{key:\"isClosed\",value:function(){return this.pts[0].equals(this.pts[this.pts.length-1])}},{key:\"getMaximumSegmentIndex\",value:function(){return this.pts.length-1}},{key:\"getDepthDelta\",value:function(){return this._depthDelta}},{key:\"getNumPoints\",value:function(){return this.pts.length}},{key:\"printReverse\",value:function(t){t.print(\"edge \"+this._name+\": \");for(var e=this.pts.length-1;e>=0;e--)t.print(this.pts[e]+\" \");t.println(\"\")}},{key:\"getMonotoneChainEdge\",value:function(){return null===this._mce&&(this._mce=new ni(this)),this._mce}},{key:\"getEnvelope\",value:function(){if(null===this._env){this._env=new U;for(var t=0;t<this.pts.length;t++)this._env.expandToInclude(this.pts[t])}return this._env}},{key:\"addIntersection\",value:function(t,e,n,i){var r=new X(t.getIntersection(i)),s=e,a=t.getEdgeDistance(n,i),o=s+1;if(o<this.pts.length){var u=this.pts[o];r.equals2D(u)&&(s=o,a=0)}this.eiList.add(r,s,a)}},{key:\"toString\",value:function(){var t=new Jt;t.append(\"edge \"+this._name+\": \"),t.append(\"LINESTRING (\");for(var e=0;e<this.pts.length;e++)e>0&&t.append(\",\"),t.append(this.pts[e].x+\" \"+this.pts[e].y);return t.append(\") \"+this._label+\" \"+this._depthDelta),t.toString()}},{key:\"isPointwiseEqual\",value:function(t){if(this.pts.length!==t.pts.length)return!1;for(var e=0;e<this.pts.length;e++)if(!this.pts[e].equals2D(t.pts[e]))return!1;return!0}},{key:\"setDepthDelta\",value:function(t){this._depthDelta=t}},{key:\"getEdgeIntersectionList\",value:function(){return this.eiList}},{key:\"addIntersections\",value:function(t,e,n){for(var i=0;i<t.getIntersectionNum();i++)this.addIntersection(t,e,n,i)}}],[{key:\"constructor_\",value:function(){if(this.pts=null,this._env=null,this.eiList=new Qn(this),this._name=null,this._mce=null,this._isIsolated=!0,this._depth=new ii,this._depthDelta=0,1===arguments.length){var t=arguments[0];i.constructor_.call(this,t,null)}else if(2===arguments.length){var e=arguments[0],n=arguments[1];this.pts=e,this._label=n}}},{key:\"updateIM\",value:function(){if(!(2===arguments.length&&arguments[1]instanceof $n&&arguments[0]instanceof Ae))return f(i,\"updateIM\",this).apply(this,arguments);var t=arguments[0],e=arguments[1];e.setAtLeastIfValid(t.getLocation(0,$.ON),t.getLocation(1,$.ON),1),t.isArea()&&(e.setAtLeastIfValid(t.getLocation(0,$.LEFT),t.getLocation(1,$.LEFT),2),e.setAtLeastIfValid(t.getLocation(0,$.RIGHT),t.getLocation(1,$.RIGHT),2))}}])}(Ge),si=function(){function t(){n(this,t),t.constructor_.apply(this,arguments)}return s(t,[{key:\"setWorkingPrecisionModel\",value:function(t){this._workingPrecisionModel=t}},{key:\"insertUniqueEdge\",value:function(e){var n=this._edgeList.findEqualEdge(e);if(null!==n){var i=n.getLabel(),r=e.getLabel();n.isPointwiseEqual(e)||(r=new Ae(e.getLabel())).flip(),i.merge(r);var s=t.depthDelta(r),a=n.getDepthDelta()+s;n.setDepthDelta(a)}else this._edgeList.add(e),e.setDepthDelta(t.depthDelta(e.getLabel()))}},{key:\"buildSubgraphs\",value:function(t,e){for(var n=new yt,i=t.iterator();i.hasNext();){var r=i.next(),s=r.getRightmostCoordinate(),a=new Pn(n).getDepth(s);r.computeDepth(a),r.findResultEdges(),n.add(r),e.add(r.getDirectedEdges(),r.getNodes())}}},{key:\"createSubgraphs\",value:function(t){for(var e=new yt,n=t.getNodes().iterator();n.hasNext();){var i=n.next();if(!i.isVisited()){var r=new _t;r.create(i),e.add(r)}}return an.sort(e,an.reverseOrder()),e}},{key:\"createEmptyResultGeometry\",value:function(){return this._geomFact.createPolygon()}},{key:\"getNoder\",value:function(t){if(null!==this._workingNoder)return this._workingNoder;var e=new Cn,n=new we;return n.setPrecisionModel(t),e.setSegmentIntersector(new Kn(n)),e}},{key:\"buffer\",value:function(t,e){var n=this._workingPrecisionModel;null===n&&(n=t.getPrecisionModel()),this._geomFact=t.getFactory();var i=new An(n,this._bufParams),r=new Yn(t,e,i).getCurves();if(r.size()<=0)return this.createEmptyResultGeometry();this.computeNodedEdges(r,n),this._graph=new Qe(new Hn),this._graph.addEdges(this._edgeList.getEdges());var s=this.createSubgraphs(this._graph),a=new $e(this._geomFact);this.buildSubgraphs(s,a);var o=a.getPolygons();return o.size()<=0?this.createEmptyResultGeometry():this._geomFact.buildGeometry(o)}},{key:\"computeNodedEdges\",value:function(t,e){var n=this.getNoder(e);n.computeNodes(t);for(var i=n.getNodedSubstrings().iterator();i.hasNext();){var r=i.next(),s=r.getCoordinates();if(2!==s.length||!s[0].equals2D(s[1])){var a=r.getData(),o=new ri(r.getCoordinates(),new Ae(a));this.insertUniqueEdge(o)}}}},{key:\"setNoder\",value:function(t){this._workingNoder=t}}],[{key:\"constructor_\",value:function(){this._bufParams=null,this._workingPrecisionModel=null,this._workingNoder=null,this._geomFact=null,this._graph=null,this._edgeList=new jn;var t=arguments[0];this._bufParams=t}},{key:\"depthDelta\",value:function(t){var e=t.getLocation(0,$.LEFT),n=t.getLocation(0,$.RIGHT);return e===H.INTERIOR&&n===H.EXTERIOR?1:e===H.EXTERIOR&&n===H.INTERIOR?-1:0}},{key:\"convertSegStrings\",value:function(t){for(var e=new ae,n=new yt;t.hasNext();){var i=t.next(),r=e.createLineString(i.getCoordinates());n.add(r)}return e.buildGeometry(n)}}])}(),ai=function(){function t(){n(this,t),t.constructor_.apply(this,arguments)}return s(t,[{key:\"rescale\",value:function(){if(rt(arguments[0],Z))for(var t=arguments[0].iterator();t.hasNext();){var e=t.next();this.rescale(e.getCoordinates())}else if(arguments[0]instanceof Array){for(var n=arguments[0],i=0;i<n.length;i++)n[i].x=n[i].x/this._scaleFactor+this._offsetX,n[i].y=n[i].y/this._scaleFactor+this._offsetY;2===n.length&&n[0].equals2D(n[1])&&mt.out.println(n)}}},{key:\"scale\",value:function(){if(rt(arguments[0],Z)){for(var t=arguments[0],e=new yt(t.size()),n=t.iterator();n.hasNext();){var i=n.next();e.add(new xn(this.scale(i.getCoordinates()),i.getData()))}return e}if(arguments[0]instanceof Array){for(var r=arguments[0],s=new Array(r.length).fill(null),a=0;a<r.length;a++)s[a]=new X(Math.round((r[a].x-this._offsetX)*this._scaleFactor),Math.round((r[a].y-this._offsetY)*this._scaleFactor),r[a].getZ());return jt.removeRepeatedPoints(s)}}},{key:\"isIntegerPrecision\",value:function(){return 1===this._scaleFactor}},{key:\"getNodedSubstrings\",value:function(){var t=this._noder.getNodedSubstrings();return this._isScaled&&this.rescale(t),t}},{key:\"computeNodes\",value:function(t){var e=t;this._isScaled&&(e=this.scale(t)),this._noder.computeNodes(e)}},{key:\"interfaces_\",get:function(){return[Sn]}}],[{key:\"constructor_\",value:function(){if(this._noder=null,this._scaleFactor=null,this._offsetX=null,this._offsetY=null,this._isScaled=!1,2===arguments.length){var e=arguments[0],n=arguments[1];t.constructor_.call(this,e,n,0,0)}else if(4===arguments.length){var i=arguments[0],r=arguments[1];this._noder=i,this._scaleFactor=r,this._isScaled=!this.isIntegerPrecision()}}}])}(),oi=function(){function t(){n(this,t),t.constructor_.apply(this,arguments)}return s(t,[{key:\"checkEndPtVertexIntersections\",value:function(){if(0===arguments.length)for(var t=this._segStrings.iterator();t.hasNext();){var e=t.next().getCoordinates();this.checkEndPtVertexIntersections(e[0],this._segStrings),this.checkEndPtVertexIntersections(e[e.length-1],this._segStrings)}else if(2===arguments.length)for(var n=arguments[0],i=arguments[1].iterator();i.hasNext();)for(var r=i.next().getCoordinates(),s=1;s<r.length-1;s++)if(r[s].equals(n))throw new D(\"found endpt/interior pt intersection at index \"+s+\" :pt \"+n)}},{key:\"checkInteriorIntersections\",value:function(){if(0===arguments.length)for(var t=this._segStrings.iterator();t.hasNext();)for(var e=t.next(),n=this._segStrings.iterator();n.hasNext();){var i=n.next();this.checkInteriorIntersections(e,i)}else if(2===arguments.length)for(var r=arguments[0],s=arguments[1],a=r.getCoordinates(),o=s.getCoordinates(),u=0;u<a.length-1;u++)for(var l=0;l<o.length-1;l++)this.checkInteriorIntersections(r,u,s,l);else if(4===arguments.length){var h=arguments[0],c=arguments[1],f=arguments[2],g=arguments[3];if(h===f&&c===g)return null;var v=h.getCoordinates()[c],y=h.getCoordinates()[c+1],d=f.getCoordinates()[g],_=f.getCoordinates()[g+1];if(this._li.computeIntersection(v,y,d,_),this._li.hasIntersection()&&(this._li.isProper()||this.hasInteriorIntersection(this._li,v,y)||this.hasInteriorIntersection(this._li,d,_)))throw new D(\"found non-noded intersection at \"+v+\"-\"+y+\" and \"+d+\"-\"+_)}}},{key:\"checkValid\",value:function(){this.checkEndPtVertexIntersections(),this.checkInteriorIntersections(),this.checkCollapses()}},{key:\"checkCollapses\",value:function(){if(0===arguments.length)for(var t=this._segStrings.iterator();t.hasNext();){var e=t.next();this.checkCollapses(e)}else if(1===arguments.length)for(var n=arguments[0].getCoordinates(),i=0;i<n.length-2;i++)this.checkCollapse(n[i],n[i+1],n[i+2])}},{key:\"hasInteriorIntersection\",value:function(t,e,n){for(var i=0;i<t.getIntersectionNum();i++){var r=t.getIntersection(i);if(!r.equals(e)&&!r.equals(n))return!0}return!1}},{key:\"checkCollapse\",value:function(e,n,i){if(e.equals(i))throw new D(\"found non-noded collapse at \"+t.fact.createLineString([e,n,i]))}}],[{key:\"constructor_\",value:function(){this._li=new we,this._segStrings=null;var t=arguments[0];this._segStrings=t}}])}();oi.fact=new ae;var ui=function(){function t(){n(this,t),t.constructor_.apply(this,arguments)}return s(t,[{key:\"intersectsScaled\",value:function(t,e){var n=Math.min(t.x,e.x),i=Math.max(t.x,e.x),r=Math.min(t.y,e.y),s=Math.max(t.y,e.y),a=this._maxx<n||this._minx>i||this._maxy<r||this._miny>s;if(a)return!1;var o=this.intersectsToleranceSquare(t,e);return G.isTrue(!(a&&o),\"Found bad envelope test\"),o}},{key:\"initCorners\",value:function(t){var e=.5;this._minx=t.x-e,this._maxx=t.x+e,this._miny=t.y-e,this._maxy=t.y+e,this._corner[0]=new X(this._maxx,this._maxy),this._corner[1]=new X(this._minx,this._maxy),this._corner[2]=new X(this._minx,this._miny),this._corner[3]=new X(this._maxx,this._miny)}},{key:\"intersects\",value:function(t,e){return 1===this._scaleFactor?this.intersectsScaled(t,e):(this.copyScaled(t,this._p0Scaled),this.copyScaled(e,this._p1Scaled),this.intersectsScaled(this._p0Scaled,this._p1Scaled))}},{key:\"scale\",value:function(t){return Math.round(t*this._scaleFactor)}},{key:\"getCoordinate\",value:function(){return this._originalPt}},{key:\"copyScaled\",value:function(t,e){e.x=this.scale(t.x),e.y=this.scale(t.y)}},{key:\"getSafeEnvelope\",value:function(){if(null===this._safeEnv){var e=t.SAFE_ENV_EXPANSION_FACTOR/this._scaleFactor;this._safeEnv=new U(this._originalPt.x-e,this._originalPt.x+e,this._originalPt.y-e,this._originalPt.y+e)}return this._safeEnv}},{key:\"intersectsPixelClosure\",value:function(t,e){return this._li.computeIntersection(t,e,this._corner[0],this._corner[1]),!!this._li.hasIntersection()||(this._li.computeIntersection(t,e,this._corner[1],this._corner[2]),!!this._li.hasIntersection()||(this._li.computeIntersection(t,e,this._corner[2],this._corner[3]),!!this._li.hasIntersection()||(this._li.computeIntersection(t,e,this._corner[3],this._corner[0]),!!this._li.hasIntersection())))}},{key:\"intersectsToleranceSquare\",value:function(t,e){var n=!1,i=!1;return this._li.computeIntersection(t,e,this._corner[0],this._corner[1]),!!this._li.isProper()||(this._li.computeIntersection(t,e,this._corner[1],this._corner[2]),!!this._li.isProper()||(this._li.hasIntersection()&&(n=!0),this._li.computeIntersection(t,e,this._corner[2],this._corner[3]),!!this._li.isProper()||(this._li.hasIntersection()&&(i=!0),this._li.computeIntersection(t,e,this._corner[3],this._corner[0]),!!this._li.isProper()||(!(!n||!i)||(!!t.equals(this._pt)||!!e.equals(this._pt))))))}},{key:\"addSnappedNode\",value:function(t,e){var n=t.getCoordinate(e),i=t.getCoordinate(e+1);return!!this.intersects(n,i)&&(t.addIntersection(this.getCoordinate(),e),!0)}}],[{key:\"constructor_\",value:function(){this._li=null,this._pt=null,this._originalPt=null,this._ptScaled=null,this._p0Scaled=null,this._p1Scaled=null,this._scaleFactor=null,this._minx=null,this._maxx=null,this._miny=null,this._maxy=null,this._corner=new Array(4).fill(null),this._safeEnv=null;var t=arguments[0],e=arguments[1],n=arguments[2];if(this._originalPt=t,this._pt=t,this._scaleFactor=e,this._li=n,e<=0)throw new m(\"Scale factor must be non-zero\");1!==e&&(this._pt=new X(this.scale(t.x),this.scale(t.y)),this._p0Scaled=new X,this._p1Scaled=new X),this.initCorners(this._pt)}}])}();ui.SAFE_ENV_EXPANSION_FACTOR=.75;var li=function(){return s((function t(){n(this,t),t.constructor_.apply(this,arguments)}),[{key:\"select\",value:function(){if(1===arguments.length);else if(2===arguments.length){var t=arguments[1];arguments[0].getLineSegment(t,this.selectedSegment),this.select(this.selectedSegment)}}}],[{key:\"constructor_\",value:function(){this.selectedSegment=new In}}])}(),hi=function(){return s((function t(){n(this,t),t.constructor_.apply(this,arguments)}),[{key:\"snap\",value:function(){if(1===arguments.length){var t=arguments[0];return this.snap(t,null,-1)}if(3===arguments.length){var e=arguments[0],i=arguments[1],r=arguments[2],a=e.getSafeEnvelope(),o=new ci(e,i,r);return this._index.query(a,new(function(){return s((function t(){n(this,t)}),[{key:\"interfaces_\",get:function(){return[ln]}},{key:\"visitItem\",value:function(t){t.select(a,o)}}])}())),o.isNodeAdded()}}}],[{key:\"constructor_\",value:function(){this._index=null;var t=arguments[0];this._index=t}}])}(),ci=function(t){function i(){var t;return n(this,i),t=e(this,i),i.constructor_.apply(t,arguments),t}return l(i,t),s(i,[{key:\"isNodeAdded\",value:function(){return this._isNodeAdded}},{key:\"select\",value:function(){if(!(2===arguments.length&&Number.isInteger(arguments[1])&&arguments[0]instanceof Nn))return f(i,\"select\",this,1).apply(this,arguments);var t=arguments[1],e=arguments[0].getContext();if(this._parentEdge===e&&(t===this._hotPixelVertexIndex||t+1===this._hotPixelVertexIndex))return null;this._isNodeAdded|=this._hotPixel.addSnappedNode(e,t)}}],[{key:\"constructor_\",value:function(){this._hotPixel=null,this._parentEdge=null,this._hotPixelVertexIndex=null,this._isNodeAdded=!1;var t=arguments[0],e=arguments[1],n=arguments[2];this._hotPixel=t,this._parentEdge=e,this._hotPixelVertexIndex=n}}])}(li);hi.HotPixelSnapAction=ci;var fi=function(){return s((function t(){n(this,t),t.constructor_.apply(this,arguments)}),[{key:\"processIntersections\",value:function(t,e,n,i){if(t===n&&e===i)return null;var r=t.getCoordinates()[e],s=t.getCoordinates()[e+1],a=n.getCoordinates()[i],o=n.getCoordinates()[i+1];if(this._li.computeIntersection(r,s,a,o),this._li.hasIntersection()&&this._li.isInteriorIntersection()){for(var u=0;u<this._li.getIntersectionNum();u++)this._interiorIntersections.add(this._li.getIntersection(u));t.addIntersections(this._li,e,0),n.addIntersections(this._li,i,1)}}},{key:\"isDone\",value:function(){return!1}},{key:\"getInteriorIntersections\",value:function(){return this._interiorIntersections}},{key:\"interfaces_\",get:function(){return[Wn]}}],[{key:\"constructor_\",value:function(){this._li=null,this._interiorIntersections=null;var t=arguments[0];this._li=t,this._interiorIntersections=new yt}}])}(),gi=function(){return s((function t(){n(this,t),t.constructor_.apply(this,arguments)}),[{key:\"checkCorrectness\",value:function(t){var e=xn.getNodedSubstrings(t),n=new oi(e);try{n.checkValid()}catch(t){if(!(t instanceof p))throw t;t.printStackTrace()}}},{key:\"getNodedSubstrings\",value:function(){return xn.getNodedSubstrings(this._nodedSegStrings)}},{key:\"snapRound\",value:function(t,e){var n=this.findInteriorIntersections(t,e);this.computeIntersectionSnaps(n),this.computeVertexSnaps(t)}},{key:\"findInteriorIntersections\",value:function(t,e){var n=new fi(e);return this._noder.setSegmentIntersector(n),this._noder.computeNodes(t),n.getInteriorIntersections()}},{key:\"computeVertexSnaps\",value:function(){if(rt(arguments[0],Z))for(var t=arguments[0].iterator();t.hasNext();){var e=t.next();this.computeVertexSnaps(e)}else if(arguments[0]instanceof xn)for(var n=arguments[0],i=n.getCoordinates(),r=0;r<i.length;r++){var s=new ui(i[r],this._scaleFactor,this._li);this._pointSnapper.snap(s,n,r)&&n.addIntersection(i[r],r)}}},{key:\"computeNodes\",value:function(t){this._nodedSegStrings=t,this._noder=new Cn,this._pointSnapper=new hi(this._noder.getIndex()),this.snapRound(t,this._li)}},{key:\"computeIntersectionSnaps\",value:function(t){for(var e=t.iterator();e.hasNext();){var n=e.next(),i=new ui(n,this._scaleFactor,this._li);this._pointSnapper.snap(i)}}},{key:\"interfaces_\",get:function(){return[Sn]}}],[{key:\"constructor_\",value:function(){this._pm=null,this._li=null,this._scaleFactor=null,this._noder=null,this._pointSnapper=null,this._nodedSegStrings=null;var t=arguments[0];this._pm=t,this._li=new we,this._li.setPrecisionModel(t),this._scaleFactor=t.getScale()}}])}(),vi=function(){function t(){n(this,t),t.constructor_.apply(this,arguments)}return s(t,[{key:\"bufferFixedPrecision\",value:function(t){var e=new ai(new gi(new ie(1)),t.getScale()),n=new si(this._bufParams);n.setWorkingPrecisionModel(t),n.setNoder(e),this._resultGeometry=n.buffer(this._argGeom,this._distance)}},{key:\"bufferReducedPrecision\",value:function(){if(0===arguments.length){for(var e=t.MAX_PRECISION_DIGITS;e>=0;e--){try{this.bufferReducedPrecision(e)}catch(t){if(!(t instanceof gt))throw t;this._saveException=t}if(null!==this._resultGeometry)return null}throw this._saveException}if(1===arguments.length){var n=arguments[0],i=t.precisionScaleFactor(this._argGeom,this._distance,n),r=new ie(i);this.bufferFixedPrecision(r)}}},{key:\"computeGeometry\",value:function(){if(this.bufferOriginalPrecision(),null!==this._resultGeometry)return null;var t=this._argGeom.getFactory().getPrecisionModel();t.getType()===ie.FIXED?this.bufferFixedPrecision(t):this.bufferReducedPrecision()}},{key:\"setQuadrantSegments\",value:function(t){this._bufParams.setQuadrantSegments(t)}},{key:\"bufferOriginalPrecision\",value:function(){try{var t=new si(this._bufParams);this._resultGeometry=t.buffer(this._argGeom,this._distance)}catch(t){if(!(t instanceof D))throw t;this._saveException=t}}},{key:\"getResultGeometry\",value:function(t){return this._distance=t,this.computeGeometry(),this._resultGeometry}},{key:\"setEndCapStyle\",value:function(t){this._bufParams.setEndCapStyle(t)}}],[{key:\"constructor_\",value:function(){if(this._argGeom=null,this._distance=null,this._bufParams=new _,this._resultGeometry=null,this._saveException=null,1===arguments.length){var t=arguments[0];this._argGeom=t}else if(2===arguments.length){var e=arguments[0],n=arguments[1];this._argGeom=e,this._bufParams=n}}},{key:\"bufferOp\",value:function(){if(2===arguments.length){var e=arguments[1];return new t(arguments[0]).getResultGeometry(e)}if(3===arguments.length){if(Number.isInteger(arguments[2])&&arguments[0]instanceof V&&\"number\"==typeof arguments[1]){var n=arguments[1],i=arguments[2],r=new t(arguments[0]);return r.setQuadrantSegments(i),r.getResultGeometry(n)}if(arguments[2]instanceof _&&arguments[0]instanceof V&&\"number\"==typeof arguments[1]){var s=arguments[1];return new t(arguments[0],arguments[2]).getResultGeometry(s)}}else if(4===arguments.length){var a=arguments[1],o=arguments[2],u=arguments[3],l=new t(arguments[0]);return l.setQuadrantSegments(o),l.setEndCapStyle(u),l.getResultGeometry(a)}}},{key:\"precisionScaleFactor\",value:function(t,e,n){var i=t.getEnvelopeInternal(),r=kt.max(Math.abs(i.getMaxX()),Math.abs(i.getMaxY()),Math.abs(i.getMinX()),Math.abs(i.getMinY()))+2*(e>0?e:0),s=n-Math.trunc(Math.log(r)/Math.log(10)+1);return Math.pow(10,s)}}])}();vi.CAP_ROUND=_.CAP_ROUND,vi.CAP_BUTT=_.CAP_FLAT,vi.CAP_FLAT=_.CAP_FLAT,vi.CAP_SQUARE=_.CAP_SQUARE,vi.MAX_PRECISION_DIGITS=12;var yi=[\"Point\",\"MultiPoint\",\"LineString\",\"MultiLineString\",\"Polygon\",\"MultiPolygon\"],di=function(){return s((function t(e){n(this,t),this.geometryFactory=e||new ae}),[{key:\"read\",value:function(t){var e,n=(e=\"string\"==typeof t?JSON.parse(t):t).type;if(!_i[n])throw new Error(\"Unknown GeoJSON type: \"+e.type);return-1!==yi.indexOf(n)?_i[n].call(this,e.coordinates):\"GeometryCollection\"===n?_i[n].call(this,e.geometries):_i[n].call(this,e)}},{key:\"write\",value:function(t){var e=t.getGeometryType();if(!pi[e])throw new Error(\"Geometry is not supported\");return pi[e].call(this,t)}}])}(),_i={Feature:function(t){var e={};for(var n in t)e[n]=t[n];if(t.geometry){var i=t.geometry.type;if(!_i[i])throw new Error(\"Unknown GeoJSON type: \"+t.type);e.geometry=this.read(t.geometry)}return t.bbox&&(e.bbox=_i.bbox.call(this,t.bbox)),e},FeatureCollection:function(t){var e={};if(t.features){e.features=[];for(var n=0;n<t.features.length;++n)e.features.push(this.read(t.features[n]))}return t.bbox&&(e.bbox=this.parse.bbox.call(this,t.bbox)),e},coordinates:function(t){for(var e=[],n=0;n<t.length;++n){var r=t[n];e.push(i(X,g(r)))}return e},bbox:function(t){return this.geometryFactory.createLinearRing([new X(t[0],t[1]),new X(t[2],t[1]),new X(t[2],t[3]),new X(t[0],t[3]),new X(t[0],t[1])])},Point:function(t){var e=i(X,g(t));return this.geometryFactory.createPoint(e)},MultiPoint:function(t){for(var e=[],n=0;n<t.length;++n)e.push(_i.Point.call(this,t[n]));return this.geometryFactory.createMultiPoint(e)},LineString:function(t){var e=_i.coordinates.call(this,t);return this.geometryFactory.createLineString(e)},MultiLineString:function(t){for(var e=[],n=0;n<t.length;++n)e.push(_i.LineString.call(this,t[n]));return this.geometryFactory.createMultiLineString(e)},Polygon:function(t){for(var e=_i.coordinates.call(this,t[0]),n=this.geometryFactory.createLinearRing(e),i=[],r=1;r<t.length;++r){var s=t[r],a=_i.coordinates.call(this,s),o=this.geometryFactory.createLinearRing(a);i.push(o)}return this.geometryFactory.createPolygon(n,i)},MultiPolygon:function(t){for(var e=[],n=0;n<t.length;++n){var i=t[n];e.push(_i.Polygon.call(this,i))}return this.geometryFactory.createMultiPolygon(e)},GeometryCollection:function(t){for(var e=[],n=0;n<t.length;++n){var i=t[n];e.push(this.read(i))}return this.geometryFactory.createGeometryCollection(e)}},pi={coordinate:function(t){var e=[t.x,t.y];return t.z&&e.push(t.z),t.m&&e.push(t.m),e},Point:function(t){return{type:\"Point\",coordinates:pi.coordinate.call(this,t.getCoordinate())}},MultiPoint:function(t){for(var e=[],n=0;n<t._geometries.length;++n){var i=t._geometries[n],r=pi.Point.call(this,i);e.push(r.coordinates)}return{type:\"MultiPoint\",coordinates:e}},LineString:function(t){for(var e=[],n=t.getCoordinates(),i=0;i<n.length;++i){var r=n[i];e.push(pi.coordinate.call(this,r))}return{type:\"LineString\",coordinates:e}},MultiLineString:function(t){for(var e=[],n=0;n<t._geometries.length;++n){var i=t._geometries[n],r=pi.LineString.call(this,i);e.push(r.coordinates)}return{type:\"MultiLineString\",coordinates:e}},Polygon:function(t){var e=[],n=pi.LineString.call(this,t._shell);e.push(n.coordinates);for(var i=0;i<t._holes.length;++i){var r=t._holes[i],s=pi.LineString.call(this,r);e.push(s.coordinates)}return{type:\"Polygon\",coordinates:e}},MultiPolygon:function(t){for(var e=[],n=0;n<t._geometries.length;++n){var i=t._geometries[n],r=pi.Polygon.call(this,i);e.push(r.coordinates)}return{type:\"MultiPolygon\",coordinates:e}},GeometryCollection:function(t){for(var e=[],n=0;n<t._geometries.length;++n){var i=t._geometries[n],r=i.getGeometryType();e.push(pi[r].call(this,i))}return{type:\"GeometryCollection\",geometries:e}}};return{BufferOp:vi,GeoJSONReader:function(){return s((function t(e){n(this,t),this.parser=new di(e||new ae)}),[{key:\"read\",value:function(t){return this.parser.read(t)}}])}(),GeoJSONWriter:function(){return s((function t(){n(this,t),this.parser=new di(this.geometryFactory)}),[{key:\"write\",value:function(t){return this.parser.write(t)}}])}()}}));\n//# sourceMappingURL=jsts.min.js.map\n","// Adds floating point numbers with twice the normal precision.\n// Reference: J. R. Shewchuk, Adaptive Precision Floating-Point Arithmetic and\n// Fast Robust Geometric Predicates, Discrete & Computational Geometry 18(3)\n// 305–363 (1997).\n// Code adapted from GeographicLib by Charles F. F. Karney,\n// http://geographiclib.sourceforge.net/\n\nexport default function() {\n return new Adder;\n}\n\nfunction Adder() {\n this.reset();\n}\n\nAdder.prototype = {\n constructor: Adder,\n reset: function() {\n this.s = // rounded value\n this.t = 0; // exact error\n },\n add: function(y) {\n add(temp, y, this.t);\n add(this, temp.s, this.s);\n if (this.s) this.t += temp.t;\n else this.s = temp.t;\n },\n valueOf: function() {\n return this.s;\n }\n};\n\nvar temp = new Adder;\n\nfunction add(adder, a, b) {\n var x = adder.s = a + b,\n bv = x - a,\n av = x - bv;\n adder.t = (a - av) + (b - bv);\n}\n","export var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var quarterPi = pi / 4;\nexport var tau = pi * 2;\n\nexport var degrees = 180 / pi;\nexport var radians = pi / 180;\n\nexport var abs = Math.abs;\nexport var atan = Math.atan;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var ceil = Math.ceil;\nexport var exp = Math.exp;\nexport var floor = Math.floor;\nexport var log = Math.log;\nexport var pow = Math.pow;\nexport var sin = Math.sin;\nexport var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\nexport var sqrt = Math.sqrt;\nexport var tan = Math.tan;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n}\n\nexport function haversin(x) {\n return (x = sin(x / 2)) * x;\n}\n","export default function noop() {}\n","function streamGeometry(geometry, stream) {\n if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {\n streamGeometryType[geometry.type](geometry, stream);\n }\n}\n\nvar streamObjectType = {\n Feature: function(object, stream) {\n streamGeometry(object.geometry, stream);\n },\n FeatureCollection: function(object, stream) {\n var features = object.features, i = -1, n = features.length;\n while (++i < n) streamGeometry(features[i].geometry, stream);\n }\n};\n\nvar streamGeometryType = {\n Sphere: function(object, stream) {\n stream.sphere();\n },\n Point: function(object, stream) {\n object = object.coordinates;\n stream.point(object[0], object[1], object[2]);\n },\n MultiPoint: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]);\n },\n LineString: function(object, stream) {\n streamLine(object.coordinates, stream, 0);\n },\n MultiLineString: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) streamLine(coordinates[i], stream, 0);\n },\n Polygon: function(object, stream) {\n streamPolygon(object.coordinates, stream);\n },\n MultiPolygon: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) streamPolygon(coordinates[i], stream);\n },\n GeometryCollection: function(object, stream) {\n var geometries = object.geometries, i = -1, n = geometries.length;\n while (++i < n) streamGeometry(geometries[i], stream);\n }\n};\n\nfunction streamLine(coordinates, stream, closed) {\n var i = -1, n = coordinates.length - closed, coordinate;\n stream.lineStart();\n while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);\n stream.lineEnd();\n}\n\nfunction streamPolygon(coordinates, stream) {\n var i = -1, n = coordinates.length;\n stream.polygonStart();\n while (++i < n) streamLine(coordinates[i], stream, 1);\n stream.polygonEnd();\n}\n\nexport default function(object, stream) {\n if (object && streamObjectType.hasOwnProperty(object.type)) {\n streamObjectType[object.type](object, stream);\n } else {\n streamGeometry(object, stream);\n }\n}\n","import adder from \"./adder\";\nimport {atan2, cos, quarterPi, radians, sin, tau} from \"./math\";\nimport noop from \"./noop\";\nimport stream from \"./stream\";\n\nexport var areaRingSum = adder();\n\nvar areaSum = adder(),\n lambda00,\n phi00,\n lambda0,\n cosPhi0,\n sinPhi0;\n\nexport var areaStream = {\n point: noop,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: function() {\n areaRingSum.reset();\n areaStream.lineStart = areaRingStart;\n areaStream.lineEnd = areaRingEnd;\n },\n polygonEnd: function() {\n var areaRing = +areaRingSum;\n areaSum.add(areaRing < 0 ? tau + areaRing : areaRing);\n this.lineStart = this.lineEnd = this.point = noop;\n },\n sphere: function() {\n areaSum.add(tau);\n }\n};\n\nfunction areaRingStart() {\n areaStream.point = areaPointFirst;\n}\n\nfunction areaRingEnd() {\n areaPoint(lambda00, phi00);\n}\n\nfunction areaPointFirst(lambda, phi) {\n areaStream.point = areaPoint;\n lambda00 = lambda, phi00 = phi;\n lambda *= radians, phi *= radians;\n lambda0 = lambda, cosPhi0 = cos(phi = phi / 2 + quarterPi), sinPhi0 = sin(phi);\n}\n\nfunction areaPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n phi = phi / 2 + quarterPi; // half the angular distance from south pole\n\n // Spherical excess E for a spherical triangle with vertices: south pole,\n // previous point, current point. Uses a formula derived from Cagnoli’s\n // theorem. See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2).\n var dLambda = lambda - lambda0,\n sdLambda = dLambda >= 0 ? 1 : -1,\n adLambda = sdLambda * dLambda,\n cosPhi = cos(phi),\n sinPhi = sin(phi),\n k = sinPhi0 * sinPhi,\n u = cosPhi0 * cosPhi + k * cos(adLambda),\n v = k * sdLambda * sin(adLambda);\n areaRingSum.add(atan2(v, u));\n\n // Advance the previous points.\n lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi;\n}\n\nexport default function(object) {\n areaSum.reset();\n stream(object, areaStream);\n return areaSum * 2;\n}\n","import {asin, atan2, cos, sin, sqrt} from \"./math\";\n\nexport function spherical(cartesian) {\n return [atan2(cartesian[1], cartesian[0]), asin(cartesian[2])];\n}\n\nexport function cartesian(spherical) {\n var lambda = spherical[0], phi = spherical[1], cosPhi = cos(phi);\n return [cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi)];\n}\n\nexport function cartesianDot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n\nexport function cartesianCross(a, b) {\n return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n}\n\n// TODO return a\nexport function cartesianAddInPlace(a, b) {\n a[0] += b[0], a[1] += b[1], a[2] += b[2];\n}\n\nexport function cartesianScale(vector, k) {\n return [vector[0] * k, vector[1] * k, vector[2] * k];\n}\n\n// TODO return d\nexport function cartesianNormalizeInPlace(d) {\n var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);\n d[0] /= l, d[1] /= l, d[2] /= l;\n}\n","import adder from \"./adder\";\nimport {areaStream, areaRingSum} from \"./area\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace, spherical} from \"./cartesian\";\nimport {abs, degrees, epsilon, radians} from \"./math\";\nimport stream from \"./stream\";\n\nvar lambda0, phi0, lambda1, phi1, // bounds\n lambda2, // previous lambda-coordinate\n lambda00, phi00, // first point\n p0, // previous 3D point\n deltaSum = adder(),\n ranges,\n range;\n\nvar boundsStream = {\n point: boundsPoint,\n lineStart: boundsLineStart,\n lineEnd: boundsLineEnd,\n polygonStart: function() {\n boundsStream.point = boundsRingPoint;\n boundsStream.lineStart = boundsRingStart;\n boundsStream.lineEnd = boundsRingEnd;\n deltaSum.reset();\n areaStream.polygonStart();\n },\n polygonEnd: function() {\n areaStream.polygonEnd();\n boundsStream.point = boundsPoint;\n boundsStream.lineStart = boundsLineStart;\n boundsStream.lineEnd = boundsLineEnd;\n if (areaRingSum < 0) lambda0 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n else if (deltaSum > epsilon) phi1 = 90;\n else if (deltaSum < -epsilon) phi0 = -90;\n range[0] = lambda0, range[1] = lambda1;\n }\n};\n\nfunction boundsPoint(lambda, phi) {\n ranges.push(range = [lambda0 = lambda, lambda1 = lambda]);\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n}\n\nfunction linePoint(lambda, phi) {\n var p = cartesian([lambda * radians, phi * radians]);\n if (p0) {\n var normal = cartesianCross(p0, p),\n equatorial = [normal[1], -normal[0], 0],\n inflection = cartesianCross(equatorial, normal);\n cartesianNormalizeInPlace(inflection);\n inflection = spherical(inflection);\n var delta = lambda - lambda2,\n sign = delta > 0 ? 1 : -1,\n lambdai = inflection[0] * degrees * sign,\n phii,\n antimeridian = abs(delta) > 180;\n if (antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n phii = inflection[1] * degrees;\n if (phii > phi1) phi1 = phii;\n } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n phii = -inflection[1] * degrees;\n if (phii < phi0) phi0 = phii;\n } else {\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n }\n if (antimeridian) {\n if (lambda < lambda2) {\n if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda;\n } else {\n if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda;\n }\n } else {\n if (lambda1 >= lambda0) {\n if (lambda < lambda0) lambda0 = lambda;\n if (lambda > lambda1) lambda1 = lambda;\n } else {\n if (lambda > lambda2) {\n if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda;\n } else {\n if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda;\n }\n }\n }\n } else {\n ranges.push(range = [lambda0 = lambda, lambda1 = lambda]);\n }\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n p0 = p, lambda2 = lambda;\n}\n\nfunction boundsLineStart() {\n boundsStream.point = linePoint;\n}\n\nfunction boundsLineEnd() {\n range[0] = lambda0, range[1] = lambda1;\n boundsStream.point = boundsPoint;\n p0 = null;\n}\n\nfunction boundsRingPoint(lambda, phi) {\n if (p0) {\n var delta = lambda - lambda2;\n deltaSum.add(abs(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta);\n } else {\n lambda00 = lambda, phi00 = phi;\n }\n areaStream.point(lambda, phi);\n linePoint(lambda, phi);\n}\n\nfunction boundsRingStart() {\n areaStream.lineStart();\n}\n\nfunction boundsRingEnd() {\n boundsRingPoint(lambda00, phi00);\n areaStream.lineEnd();\n if (abs(deltaSum) > epsilon) lambda0 = -(lambda1 = 180);\n range[0] = lambda0, range[1] = lambda1;\n p0 = null;\n}\n\n// Finds the left-right distance between two longitudes.\n// This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want\n// the distance between ±180° to be 360°.\nfunction angle(lambda0, lambda1) {\n return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1;\n}\n\nfunction rangeCompare(a, b) {\n return a[0] - b[0];\n}\n\nfunction rangeContains(range, x) {\n return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;\n}\n\nexport default function(feature) {\n var i, n, a, b, merged, deltaMax, delta;\n\n phi1 = lambda1 = -(lambda0 = phi0 = Infinity);\n ranges = [];\n stream(feature, boundsStream);\n\n // First, sort ranges by their minimum longitudes.\n if (n = ranges.length) {\n ranges.sort(rangeCompare);\n\n // Then, merge any ranges that overlap.\n for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) {\n b = ranges[i];\n if (rangeContains(a, b[0]) || rangeContains(a, b[1])) {\n if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];\n if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];\n } else {\n merged.push(a = b);\n }\n }\n\n // Finally, find the largest gap between the merged ranges.\n // The final bounding box will be the inverse of this gap.\n for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) {\n b = merged[i];\n if ((delta = angle(a[1], b[0])) > deltaMax) deltaMax = delta, lambda0 = b[0], lambda1 = a[1];\n }\n }\n\n ranges = range = null;\n\n return lambda0 === Infinity || phi0 === Infinity\n ? [[NaN, NaN], [NaN, NaN]]\n : [[lambda0, phi0], [lambda1, phi1]];\n}\n","export default function(a, b) {\n\n function compose(x, y) {\n return x = a(x, y), b(x[0], x[1]);\n }\n\n if (a.invert && b.invert) compose.invert = function(x, y) {\n return x = b.invert(x, y), x && a.invert(x[0], x[1]);\n };\n\n return compose;\n}\n","import compose from \"./compose\";\nimport {asin, atan2, cos, degrees, pi, radians, sin, tau} from \"./math\";\n\nfunction rotationIdentity(lambda, phi) {\n return [lambda > pi ? lambda - tau : lambda < -pi ? lambda + tau : lambda, phi];\n}\n\nrotationIdentity.invert = rotationIdentity;\n\nexport function rotateRadians(deltaLambda, deltaPhi, deltaGamma) {\n return (deltaLambda %= tau) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma))\n : rotationLambda(deltaLambda))\n : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma)\n : rotationIdentity);\n}\n\nfunction forwardRotationLambda(deltaLambda) {\n return function(lambda, phi) {\n return lambda += deltaLambda, [lambda > pi ? lambda - tau : lambda < -pi ? lambda + tau : lambda, phi];\n };\n}\n\nfunction rotationLambda(deltaLambda) {\n var rotation = forwardRotationLambda(deltaLambda);\n rotation.invert = forwardRotationLambda(-deltaLambda);\n return rotation;\n}\n\nfunction rotationPhiGamma(deltaPhi, deltaGamma) {\n var cosDeltaPhi = cos(deltaPhi),\n sinDeltaPhi = sin(deltaPhi),\n cosDeltaGamma = cos(deltaGamma),\n sinDeltaGamma = sin(deltaGamma);\n\n function rotation(lambda, phi) {\n var cosPhi = cos(phi),\n x = cos(lambda) * cosPhi,\n y = sin(lambda) * cosPhi,\n z = sin(phi),\n k = z * cosDeltaPhi + x * sinDeltaPhi;\n return [\n atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),\n asin(k * cosDeltaGamma + y * sinDeltaGamma)\n ];\n }\n\n rotation.invert = function(lambda, phi) {\n var cosPhi = cos(phi),\n x = cos(lambda) * cosPhi,\n y = sin(lambda) * cosPhi,\n z = sin(phi),\n k = z * cosDeltaGamma - y * sinDeltaGamma;\n return [\n atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),\n asin(k * cosDeltaPhi - x * sinDeltaPhi)\n ];\n };\n\n return rotation;\n}\n\nexport default function(rotate) {\n rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);\n\n function forward(coordinates) {\n coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);\n return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n }\n\n forward.invert = function(coordinates) {\n coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);\n return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n };\n\n return forward;\n}\n","import {cartesian, cartesianNormalizeInPlace, spherical} from \"./cartesian\";\nimport constant from \"./constant\";\nimport {acos, cos, degrees, epsilon, radians, sin, tau} from \"./math\";\nimport {rotateRadians} from \"./rotation\";\n\n// Generates a circle centered at [0°, 0°], with a given radius and precision.\nexport function circleStream(stream, radius, delta, direction, t0, t1) {\n if (!delta) return;\n var cosRadius = cos(radius),\n sinRadius = sin(radius),\n step = direction * delta;\n if (t0 == null) {\n t0 = radius + direction * tau;\n t1 = radius - step / 2;\n } else {\n t0 = circleRadius(cosRadius, t0);\n t1 = circleRadius(cosRadius, t1);\n if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau;\n }\n for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) {\n point = spherical([cosRadius, -sinRadius * cos(t), -sinRadius * sin(t)]);\n stream.point(point[0], point[1]);\n }\n}\n\n// Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].\nfunction circleRadius(cosRadius, point) {\n point = cartesian(point), point[0] -= cosRadius;\n cartesianNormalizeInPlace(point);\n var radius = acos(-point[1]);\n return ((-point[2] < 0 ? -radius : radius) + tau - epsilon) % tau;\n}\n\nexport default function() {\n var center = constant([0, 0]),\n radius = constant(90),\n precision = constant(6),\n ring,\n rotate,\n stream = {point: point};\n\n function point(x, y) {\n ring.push(x = rotate(x, y));\n x[0] *= degrees, x[1] *= degrees;\n }\n\n function circle() {\n var c = center.apply(this, arguments),\n r = radius.apply(this, arguments) * radians,\n p = precision.apply(this, arguments) * radians;\n ring = [];\n rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert;\n circleStream(stream, r, p, 1);\n c = {type: \"Polygon\", coordinates: [ring]};\n ring = rotate = null;\n return c;\n }\n\n circle.center = function(_) {\n return arguments.length ? (center = typeof _ === \"function\" ? _ : constant([+_[0], +_[1]]), circle) : center;\n };\n\n circle.radius = function(_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), circle) : radius;\n };\n\n circle.precision = function(_) {\n return arguments.length ? (precision = typeof _ === \"function\" ? _ : constant(+_), circle) : precision;\n };\n\n return circle;\n}\n","import noop from \"../noop\";\n\nexport default function() {\n var lines = [],\n line;\n return {\n point: function(x, y) {\n line.push([x, y]);\n },\n lineStart: function() {\n lines.push(line = []);\n },\n lineEnd: noop,\n rejoin: function() {\n if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));\n },\n result: function() {\n var result = lines;\n lines = [];\n line = null;\n return result;\n }\n };\n}\n","export default function(a, b, x0, y0, x1, y1) {\n var ax = a[0],\n ay = a[1],\n bx = b[0],\n by = b[1],\n t0 = 0,\n t1 = 1,\n dx = bx - ax,\n dy = by - ay,\n r;\n\n r = x0 - ax;\n if (!dx && r > 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy;\n if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy;\n return true;\n}\n","import {abs, epsilon} from \"./math\";\n\nexport default function(a, b) {\n return abs(a[0] - b[0]) < epsilon && abs(a[1] - b[1]) < epsilon;\n}\n","import pointEqual from \"../pointEqual\";\n\nfunction Intersection(point, points, other, entry) {\n this.x = point;\n this.z = points;\n this.o = other; // another intersection\n this.e = entry; // is an entry?\n this.v = false; // visited\n this.n = this.p = null; // next & previous\n}\n\n// A generalized polygon clipping algorithm: given a polygon that has been cut\n// into its visible line segments, and rejoins the segments by interpolating\n// along the clip edge.\nexport default function(segments, compareIntersection, startInside, interpolate, stream) {\n var subject = [],\n clip = [],\n i,\n n;\n\n segments.forEach(function(segment) {\n if ((n = segment.length - 1) <= 0) return;\n var n, p0 = segment[0], p1 = segment[n], x;\n\n // If the first and last points of a segment are coincident, then treat as a\n // closed ring. TODO if all rings are closed, then the winding order of the\n // exterior ring should be checked.\n if (pointEqual(p0, p1)) {\n stream.lineStart();\n for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]);\n stream.lineEnd();\n return;\n }\n\n subject.push(x = new Intersection(p0, segment, null, true));\n clip.push(x.o = new Intersection(p0, null, x, false));\n subject.push(x = new Intersection(p1, segment, null, false));\n clip.push(x.o = new Intersection(p1, null, x, true));\n });\n\n if (!subject.length) return;\n\n clip.sort(compareIntersection);\n link(subject);\n link(clip);\n\n for (i = 0, n = clip.length; i < n; ++i) {\n clip[i].e = startInside = !startInside;\n }\n\n var start = subject[0],\n points,\n point;\n\n while (1) {\n // Find first unvisited intersection.\n var current = start,\n isSubject = true;\n while (current.v) if ((current = current.n) === start) return;\n points = current.z;\n stream.lineStart();\n do {\n current.v = current.o.v = true;\n if (current.e) {\n if (isSubject) {\n for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.n.x, 1, stream);\n }\n current = current.n;\n } else {\n if (isSubject) {\n points = current.p.z;\n for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.p.x, -1, stream);\n }\n current = current.p;\n }\n current = current.o;\n points = current.z;\n isSubject = !isSubject;\n } while (!current.v);\n stream.lineEnd();\n }\n}\n\nfunction link(array) {\n if (!(n = array.length)) return;\n var n,\n i = 0,\n a = array[0],\n b;\n while (++i < n) {\n a.n = b = array[i];\n b.p = a;\n a = b;\n }\n a.n = b = array[0];\n b.p = a;\n}\n","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","import ascending from \"./ascending\";\nimport bisector from \"./bisector\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","export default function(arrays) {\n var n = arrays.length,\n m,\n i = -1,\n j = 0,\n merged,\n array;\n\n while (++i < n) j += arrays[i].length;\n merged = new Array(j);\n\n while (--n >= 0) {\n array = arrays[n];\n m = array.length;\n while (--m >= 0) {\n merged[--j] = array[m];\n }\n }\n\n return merged;\n}\n","import {abs, epsilon} from \"../math\";\nimport clipBuffer from \"./buffer\";\nimport clipLine from \"./line\";\nimport clipPolygon from \"./polygon\";\nimport {merge} from \"d3-array\";\n\nvar clipMax = 1e9, clipMin = -clipMax;\n\n// TODO Use d3-polygon’s polygonContains here for the ring check?\n// TODO Eliminate duplicate buffering in clipBuffer and polygon.push?\n\nexport function clipExtent(x0, y0, x1, y1) {\n\n function visible(x, y) {\n return x0 <= x && x <= x1 && y0 <= y && y <= y1;\n }\n\n function interpolate(from, to, direction, stream) {\n var a = 0, a1 = 0;\n if (from == null\n || (a = corner(from, direction)) !== (a1 = corner(to, direction))\n || comparePoint(from, to) < 0 ^ direction > 0) {\n do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);\n while ((a = (a + direction + 4) % 4) !== a1);\n } else {\n stream.point(to[0], to[1]);\n }\n }\n\n function corner(p, direction) {\n return abs(p[0] - x0) < epsilon ? direction > 0 ? 0 : 3\n : abs(p[0] - x1) < epsilon ? direction > 0 ? 2 : 1\n : abs(p[1] - y0) < epsilon ? direction > 0 ? 1 : 0\n : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon\n }\n\n function compareIntersection(a, b) {\n return comparePoint(a.x, b.x);\n }\n\n function comparePoint(a, b) {\n var ca = corner(a, 1),\n cb = corner(b, 1);\n return ca !== cb ? ca - cb\n : ca === 0 ? b[1] - a[1]\n : ca === 1 ? a[0] - b[0]\n : ca === 2 ? a[1] - b[1]\n : b[0] - a[0];\n }\n\n return function(stream) {\n var activeStream = stream,\n bufferStream = clipBuffer(),\n segments,\n polygon,\n ring,\n x__, y__, v__, // first point\n x_, y_, v_, // previous point\n first,\n clean;\n\n var clipStream = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: polygonStart,\n polygonEnd: polygonEnd\n };\n\n function point(x, y) {\n if (visible(x, y)) activeStream.point(x, y);\n }\n\n function polygonInside() {\n var winding = 0;\n\n for (var i = 0, n = polygon.length; i < n; ++i) {\n for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) {\n a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1];\n if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; }\n else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; }\n }\n }\n\n return winding;\n }\n\n // Buffer geometry within a polygon and then clip it en masse.\n function polygonStart() {\n activeStream = bufferStream, segments = [], polygon = [], clean = true;\n }\n\n function polygonEnd() {\n var startInside = polygonInside(),\n cleanInside = clean && startInside,\n visible = (segments = merge(segments)).length;\n if (cleanInside || visible) {\n stream.polygonStart();\n if (cleanInside) {\n stream.lineStart();\n interpolate(null, null, 1, stream);\n stream.lineEnd();\n }\n if (visible) {\n clipPolygon(segments, compareIntersection, startInside, interpolate, stream);\n }\n stream.polygonEnd();\n }\n activeStream = stream, segments = polygon = ring = null;\n }\n\n function lineStart() {\n clipStream.point = linePoint;\n if (polygon) polygon.push(ring = []);\n first = true;\n v_ = false;\n x_ = y_ = NaN;\n }\n\n // TODO rather than special-case polygons, simply handle them separately.\n // Ideally, coincident intersection points should be jittered to avoid\n // clipping issues.\n function lineEnd() {\n if (segments) {\n linePoint(x__, y__);\n if (v__ && v_) bufferStream.rejoin();\n segments.push(bufferStream.result());\n }\n clipStream.point = point;\n if (v_) activeStream.lineEnd();\n }\n\n function linePoint(x, y) {\n var v = visible(x, y);\n if (polygon) ring.push([x, y]);\n if (first) {\n x__ = x, y__ = y, v__ = v;\n first = false;\n if (v) {\n activeStream.lineStart();\n activeStream.point(x, y);\n }\n } else {\n if (v && v_) activeStream.point(x, y);\n else {\n var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))],\n b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))];\n if (clipLine(a, b, x0, y0, x1, y1)) {\n if (!v_) {\n activeStream.lineStart();\n activeStream.point(a[0], a[1]);\n }\n activeStream.point(b[0], b[1]);\n if (!v) activeStream.lineEnd();\n clean = false;\n } else if (v) {\n activeStream.lineStart();\n activeStream.point(x, y);\n clean = false;\n }\n }\n }\n x_ = x, y_ = y, v_ = v;\n }\n\n return clipStream;\n };\n}\n\nexport default function() {\n var x0 = 0,\n y0 = 0,\n x1 = 960,\n y1 = 500,\n cache,\n cacheStream,\n clip;\n\n return clip = {\n stream: function(stream) {\n return cache && cacheStream === stream ? cache : cache = clipExtent(x0, y0, x1, y1)(cacheStream = stream);\n },\n extent: function(_) {\n return arguments.length ? (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1], cache = cacheStream = null, clip) : [[x0, y0], [x1, y1]];\n }\n };\n}\n","import adder from \"./adder\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace} from \"./cartesian\";\nimport {asin, atan2, cos, epsilon, pi, quarterPi, sin, tau} from \"./math\";\n\nvar sum = adder();\n\nexport default function(polygon, point) {\n var lambda = point[0],\n phi = point[1],\n normal = [sin(lambda), -cos(lambda), 0],\n angle = 0,\n winding = 0;\n\n sum.reset();\n\n for (var i = 0, n = polygon.length; i < n; ++i) {\n if (!(m = (ring = polygon[i]).length)) continue;\n var ring,\n m,\n point0 = ring[m - 1],\n lambda0 = point0[0],\n phi0 = point0[1] / 2 + quarterPi,\n sinPhi0 = sin(phi0),\n cosPhi0 = cos(phi0);\n\n for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {\n var point1 = ring[j],\n lambda1 = point1[0],\n phi1 = point1[1] / 2 + quarterPi,\n sinPhi1 = sin(phi1),\n cosPhi1 = cos(phi1),\n delta = lambda1 - lambda0,\n sign = delta >= 0 ? 1 : -1,\n absDelta = sign * delta,\n antimeridian = absDelta > pi,\n k = sinPhi0 * sinPhi1;\n\n sum.add(atan2(k * sign * sin(absDelta), cosPhi0 * cosPhi1 + k * cos(absDelta)));\n angle += antimeridian ? delta + sign * tau : delta;\n\n // Are the longitudes either side of the point’s meridian (lambda),\n // and are the latitudes smaller than the parallel (phi)?\n if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {\n var arc = cartesianCross(cartesian(point0), cartesian(point1));\n cartesianNormalizeInPlace(arc);\n var intersection = cartesianCross(normal, arc);\n cartesianNormalizeInPlace(intersection);\n var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin(intersection[2]);\n if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {\n winding += antimeridian ^ delta >= 0 ? 1 : -1;\n }\n }\n }\n }\n\n // First, determine whether the South pole is inside or outside:\n //\n // It is inside if:\n // * the polygon winds around it in a clockwise direction.\n // * the polygon does not (cumulatively) wind around it, but has a negative\n // (counter-clockwise) area.\n //\n // Second, count the (signed) number of times a segment crosses a lambda\n // from the point to the South pole. If it is zero, then the point is the\n // same side as the South pole.\n\n return (angle < -epsilon || angle < epsilon && sum < -epsilon) ^ (winding & 1);\n}\n","import adder from \"./adder\";\nimport {abs, atan2, cos, radians, sin, sqrt} from \"./math\";\nimport noop from \"./noop\";\nimport stream from \"./stream\";\n\nvar lengthSum = adder(),\n lambda0,\n sinPhi0,\n cosPhi0;\n\nvar lengthStream = {\n sphere: noop,\n point: noop,\n lineStart: lengthLineStart,\n lineEnd: noop,\n polygonStart: noop,\n polygonEnd: noop\n};\n\nfunction lengthLineStart() {\n lengthStream.point = lengthPointFirst;\n lengthStream.lineEnd = lengthLineEnd;\n}\n\nfunction lengthLineEnd() {\n lengthStream.point = lengthStream.lineEnd = noop;\n}\n\nfunction lengthPointFirst(lambda, phi) {\n lambda *= radians, phi *= radians;\n lambda0 = lambda, sinPhi0 = sin(phi), cosPhi0 = cos(phi);\n lengthStream.point = lengthPoint;\n}\n\nfunction lengthPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var sinPhi = sin(phi),\n cosPhi = cos(phi),\n delta = abs(lambda - lambda0),\n cosDelta = cos(delta),\n sinDelta = sin(delta),\n x = cosPhi * sinDelta,\n y = cosPhi0 * sinPhi - sinPhi0 * cosPhi * cosDelta,\n z = sinPhi0 * sinPhi + cosPhi0 * cosPhi * cosDelta;\n lengthSum.add(atan2(sqrt(x * x + y * y), z));\n lambda0 = lambda, sinPhi0 = sinPhi, cosPhi0 = cosPhi;\n}\n\nexport default function(object) {\n lengthSum.reset();\n stream(object, lengthStream);\n return +lengthSum;\n}\n","export default function(x) {\n return x;\n}\n","import adder from \"../adder\";\nimport {abs} from \"../math\";\nimport noop from \"../noop\";\n\nvar areaSum = adder(),\n areaRingSum = adder(),\n x00,\n y00,\n x0,\n y0;\n\nvar areaStream = {\n point: noop,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: function() {\n areaStream.lineStart = areaRingStart;\n areaStream.lineEnd = areaRingEnd;\n },\n polygonEnd: function() {\n areaStream.lineStart = areaStream.lineEnd = areaStream.point = noop;\n areaSum.add(abs(areaRingSum));\n areaRingSum.reset();\n },\n result: function() {\n var area = areaSum / 2;\n areaSum.reset();\n return area;\n }\n};\n\nfunction areaRingStart() {\n areaStream.point = areaPointFirst;\n}\n\nfunction areaPointFirst(x, y) {\n areaStream.point = areaPoint;\n x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction areaPoint(x, y) {\n areaRingSum.add(y0 * x - x0 * y);\n x0 = x, y0 = y;\n}\n\nfunction areaRingEnd() {\n areaPoint(x00, y00);\n}\n\nexport default areaStream;\n","import noop from \"../noop\";\n\nvar x0 = Infinity,\n y0 = x0,\n x1 = -x0,\n y1 = x1;\n\nvar boundsStream = {\n point: boundsPoint,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: noop,\n polygonEnd: noop,\n result: function() {\n var bounds = [[x0, y0], [x1, y1]];\n x1 = y1 = -(y0 = x0 = Infinity);\n return bounds;\n }\n};\n\nfunction boundsPoint(x, y) {\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n}\n\nexport default boundsStream;\n","import adder from \"../adder\";\nimport {sqrt} from \"../math\";\nimport noop from \"../noop\";\n\nvar lengthSum = adder(),\n lengthRing,\n x00,\n y00,\n x0,\n y0;\n\nvar lengthStream = {\n point: noop,\n lineStart: function() {\n lengthStream.point = lengthPointFirst;\n },\n lineEnd: function() {\n if (lengthRing) lengthPoint(x00, y00);\n lengthStream.point = noop;\n },\n polygonStart: function() {\n lengthRing = true;\n },\n polygonEnd: function() {\n lengthRing = null;\n },\n result: function() {\n var length = +lengthSum;\n lengthSum.reset();\n return length;\n }\n};\n\nfunction lengthPointFirst(x, y) {\n lengthStream.point = lengthPoint;\n x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction lengthPoint(x, y) {\n x0 -= x, y0 -= y;\n lengthSum.add(sqrt(x0 * x0 + y0 * y0));\n x0 = x, y0 = y;\n}\n\nexport default lengthStream;\n","import clipBuffer from \"./buffer\";\nimport clipPolygon from \"./polygon\";\nimport {epsilon, halfPi} from \"../math\";\nimport polygonContains from \"../polygonContains\";\nimport {merge} from \"d3-array\";\n\nexport default function(pointVisible, clipLine, interpolate, start) {\n return function(rotate, sink) {\n var line = clipLine(sink),\n rotatedStart = rotate.invert(start[0], start[1]),\n ringBuffer = clipBuffer(),\n ringSink = clipLine(ringBuffer),\n polygonStarted = false,\n polygon,\n segments,\n ring;\n\n var clip = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() {\n clip.point = pointRing;\n clip.lineStart = ringStart;\n clip.lineEnd = ringEnd;\n segments = [];\n polygon = [];\n },\n polygonEnd: function() {\n clip.point = point;\n clip.lineStart = lineStart;\n clip.lineEnd = lineEnd;\n segments = merge(segments);\n var startInside = polygonContains(polygon, rotatedStart);\n if (segments.length) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n clipPolygon(segments, compareIntersection, startInside, interpolate, sink);\n } else if (startInside) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n sink.lineStart();\n interpolate(null, null, 1, sink);\n sink.lineEnd();\n }\n if (polygonStarted) sink.polygonEnd(), polygonStarted = false;\n segments = polygon = null;\n },\n sphere: function() {\n sink.polygonStart();\n sink.lineStart();\n interpolate(null, null, 1, sink);\n sink.lineEnd();\n sink.polygonEnd();\n }\n };\n\n function point(lambda, phi) {\n var point = rotate(lambda, phi);\n if (pointVisible(lambda = point[0], phi = point[1])) sink.point(lambda, phi);\n }\n\n function pointLine(lambda, phi) {\n var point = rotate(lambda, phi);\n line.point(point[0], point[1]);\n }\n\n function lineStart() {\n clip.point = pointLine;\n line.lineStart();\n }\n\n function lineEnd() {\n clip.point = point;\n line.lineEnd();\n }\n\n function pointRing(lambda, phi) {\n ring.push([lambda, phi]);\n var point = rotate(lambda, phi);\n ringSink.point(point[0], point[1]);\n }\n\n function ringStart() {\n ringSink.lineStart();\n ring = [];\n }\n\n function ringEnd() {\n pointRing(ring[0][0], ring[0][1]);\n ringSink.lineEnd();\n\n var clean = ringSink.clean(),\n ringSegments = ringBuffer.result(),\n i, n = ringSegments.length, m,\n segment,\n point;\n\n ring.pop();\n polygon.push(ring);\n ring = null;\n\n if (!n) return;\n\n // No intersections.\n if (clean & 1) {\n segment = ringSegments[0];\n if ((m = segment.length - 1) > 0) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n sink.lineStart();\n for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]);\n sink.lineEnd();\n }\n return;\n }\n\n // Rejoin connected segments.\n // TODO reuse ringBuffer.rejoin()?\n if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));\n\n segments.push(ringSegments.filter(validSegment));\n }\n\n return clip;\n };\n}\n\nfunction validSegment(segment) {\n return segment.length > 1;\n}\n\n// Intersections are sorted along the clip edge. For both antimeridian cutting\n// and circle clipping, the same comparison is used.\nfunction compareIntersection(a, b) {\n return ((a = a.x)[0] < 0 ? a[1] - halfPi - epsilon : halfPi - a[1])\n - ((b = b.x)[0] < 0 ? b[1] - halfPi - epsilon : halfPi - b[1]);\n}\n","import clip from \"./index\";\nimport {abs, atan, cos, epsilon, halfPi, pi, sin} from \"../math\";\n\nexport default clip(\n function() { return true; },\n clipAntimeridianLine,\n clipAntimeridianInterpolate,\n [-pi, -halfPi]\n);\n\n// Takes a line and cuts into visible segments. Return values: 0 - there were\n// intersections or the line was empty; 1 - no intersections; 2 - there were\n// intersections, and the first and last segments should be rejoined.\nfunction clipAntimeridianLine(stream) {\n var lambda0 = NaN,\n phi0 = NaN,\n sign0 = NaN,\n clean; // no intersections\n\n return {\n lineStart: function() {\n stream.lineStart();\n clean = 1;\n },\n point: function(lambda1, phi1) {\n var sign1 = lambda1 > 0 ? pi : -pi,\n delta = abs(lambda1 - lambda0);\n if (abs(delta - pi) < epsilon) { // line crosses a pole\n stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi : -halfPi);\n stream.point(sign0, phi0);\n stream.lineEnd();\n stream.lineStart();\n stream.point(sign1, phi0);\n stream.point(lambda1, phi0);\n clean = 0;\n } else if (sign0 !== sign1 && delta >= pi) { // line crosses antimeridian\n if (abs(lambda0 - sign0) < epsilon) lambda0 -= sign0 * epsilon; // handle degeneracies\n if (abs(lambda1 - sign1) < epsilon) lambda1 -= sign1 * epsilon;\n phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);\n stream.point(sign0, phi0);\n stream.lineEnd();\n stream.lineStart();\n stream.point(sign1, phi0);\n clean = 0;\n }\n stream.point(lambda0 = lambda1, phi0 = phi1);\n sign0 = sign1;\n },\n lineEnd: function() {\n stream.lineEnd();\n lambda0 = phi0 = NaN;\n },\n clean: function() {\n return 2 - clean; // if intersections, rejoin first and last segments\n }\n };\n}\n\nfunction clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {\n var cosPhi0,\n cosPhi1,\n sinLambda0Lambda1 = sin(lambda0 - lambda1);\n return abs(sinLambda0Lambda1) > epsilon\n ? atan((sin(phi0) * (cosPhi1 = cos(phi1)) * sin(lambda1)\n - sin(phi1) * (cosPhi0 = cos(phi0)) * sin(lambda0))\n / (cosPhi0 * cosPhi1 * sinLambda0Lambda1))\n : (phi0 + phi1) / 2;\n}\n\nfunction clipAntimeridianInterpolate(from, to, direction, stream) {\n var phi;\n if (from == null) {\n phi = direction * halfPi;\n stream.point(-pi, phi);\n stream.point(0, phi);\n stream.point(pi, phi);\n stream.point(pi, 0);\n stream.point(pi, -phi);\n stream.point(0, -phi);\n stream.point(-pi, -phi);\n stream.point(-pi, 0);\n stream.point(-pi, phi);\n } else if (abs(from[0] - to[0]) > epsilon) {\n var lambda = from[0] < to[0] ? pi : -pi;\n phi = direction * lambda / 2;\n stream.point(-lambda, phi);\n stream.point(0, phi);\n stream.point(lambda, phi);\n } else {\n stream.point(to[0], to[1]);\n }\n}\n","import {cartesian, cartesianAddInPlace, cartesianCross, cartesianDot, cartesianScale, spherical} from \"../cartesian\";\nimport {circleStream} from \"../circle\";\nimport {abs, cos, epsilon, pi, sqrt} from \"../math\";\nimport pointEqual from \"../pointEqual\";\nimport clip from \"./index\";\n\nexport default function(radius, delta) {\n var cr = cos(radius),\n smallRadius = cr > 0,\n notHemisphere = abs(cr) > epsilon; // TODO optimise for this common case\n\n function interpolate(from, to, direction, stream) {\n circleStream(stream, radius, delta, direction, from, to);\n }\n\n function visible(lambda, phi) {\n return cos(lambda) * cos(phi) > cr;\n }\n\n // Takes a line and cuts into visible segments. Return values used for polygon\n // clipping: 0 - there were intersections or the line was empty; 1 - no\n // intersections 2 - there were intersections, and the first and last segments\n // should be rejoined.\n function clipLine(stream) {\n var point0, // previous point\n c0, // code for previous point\n v0, // visibility of previous point\n v00, // visibility of first point\n clean; // no intersections\n return {\n lineStart: function() {\n v00 = v0 = false;\n clean = 1;\n },\n point: function(lambda, phi) {\n var point1 = [lambda, phi],\n point2,\n v = visible(lambda, phi),\n c = smallRadius\n ? v ? 0 : code(lambda, phi)\n : v ? code(lambda + (lambda < 0 ? pi : -pi), phi) : 0;\n if (!point0 && (v00 = v0 = v)) stream.lineStart();\n // Handle degeneracies.\n // TODO ignore if not clipping polygons.\n if (v !== v0) {\n point2 = intersect(point0, point1);\n if (!point2 || pointEqual(point0, point2) || pointEqual(point1, point2)) {\n point1[0] += epsilon;\n point1[1] += epsilon;\n v = visible(point1[0], point1[1]);\n }\n }\n if (v !== v0) {\n clean = 0;\n if (v) {\n // outside going in\n stream.lineStart();\n point2 = intersect(point1, point0);\n stream.point(point2[0], point2[1]);\n } else {\n // inside going out\n point2 = intersect(point0, point1);\n stream.point(point2[0], point2[1]);\n stream.lineEnd();\n }\n point0 = point2;\n } else if (notHemisphere && point0 && smallRadius ^ v) {\n var t;\n // If the codes for two points are different, or are both zero,\n // and there this segment intersects with the small circle.\n if (!(c & c0) && (t = intersect(point1, point0, true))) {\n clean = 0;\n if (smallRadius) {\n stream.lineStart();\n stream.point(t[0][0], t[0][1]);\n stream.point(t[1][0], t[1][1]);\n stream.lineEnd();\n } else {\n stream.point(t[1][0], t[1][1]);\n stream.lineEnd();\n stream.lineStart();\n stream.point(t[0][0], t[0][1]);\n }\n }\n }\n if (v && (!point0 || !pointEqual(point0, point1))) {\n stream.point(point1[0], point1[1]);\n }\n point0 = point1, v0 = v, c0 = c;\n },\n lineEnd: function() {\n if (v0) stream.lineEnd();\n point0 = null;\n },\n // Rejoin first and last segments if there were intersections and the first\n // and last points were visible.\n clean: function() {\n return clean | ((v00 && v0) << 1);\n }\n };\n }\n\n // Intersects the great circle between a and b with the clip circle.\n function intersect(a, b, two) {\n var pa = cartesian(a),\n pb = cartesian(b);\n\n // We have two planes, n1.p = d1 and n2.p = d2.\n // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2).\n var n1 = [1, 0, 0], // normal\n n2 = cartesianCross(pa, pb),\n n2n2 = cartesianDot(n2, n2),\n n1n2 = n2[0], // cartesianDot(n1, n2),\n determinant = n2n2 - n1n2 * n1n2;\n\n // Two polar points.\n if (!determinant) return !two && a;\n\n var c1 = cr * n2n2 / determinant,\n c2 = -cr * n1n2 / determinant,\n n1xn2 = cartesianCross(n1, n2),\n A = cartesianScale(n1, c1),\n B = cartesianScale(n2, c2);\n cartesianAddInPlace(A, B);\n\n // Solve |p(t)|^2 = 1.\n var u = n1xn2,\n w = cartesianDot(A, u),\n uu = cartesianDot(u, u),\n t2 = w * w - uu * (cartesianDot(A, A) - 1);\n\n if (t2 < 0) return;\n\n var t = sqrt(t2),\n q = cartesianScale(u, (-w - t) / uu);\n cartesianAddInPlace(q, A);\n q = spherical(q);\n\n if (!two) return q;\n\n // Two intersection points.\n var lambda0 = a[0],\n lambda1 = b[0],\n phi0 = a[1],\n phi1 = b[1],\n z;\n\n if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z;\n\n var delta = lambda1 - lambda0,\n polar = abs(delta - pi) < epsilon,\n meridian = polar || delta < epsilon;\n\n if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z;\n\n // Check that the first point is between a and b.\n if (meridian\n ? polar\n ? phi0 + phi1 > 0 ^ q[1] < (abs(q[0] - lambda0) < epsilon ? phi0 : phi1)\n : phi0 <= q[1] && q[1] <= phi1\n : delta > pi ^ (lambda0 <= q[0] && q[0] <= lambda1)) {\n var q1 = cartesianScale(u, (-w + t) / uu);\n cartesianAddInPlace(q1, A);\n return [q, spherical(q1)];\n }\n }\n\n // Generates a 4-bit vector representing the location of a point relative to\n // the small circle's bounding box.\n function code(lambda, phi) {\n var r = smallRadius ? radius : pi - radius,\n code = 0;\n if (lambda < -r) code |= 1; // left\n else if (lambda > r) code |= 2; // right\n if (phi < -r) code |= 4; // below\n else if (phi > r) code |= 8; // above\n return code;\n }\n\n return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi, radius - pi]);\n}\n","export default function(methods) {\n return {\n stream: transformer(methods)\n };\n}\n\nexport function transformer(methods) {\n return function(stream) {\n var s = new TransformStream;\n for (var key in methods) s[key] = methods[key];\n s.stream = stream;\n return s;\n };\n}\n\nfunction TransformStream() {}\n\nTransformStream.prototype = {\n constructor: TransformStream,\n point: function(x, y) { this.stream.point(x, y); },\n sphere: function() { this.stream.sphere(); },\n lineStart: function() { this.stream.lineStart(); },\n lineEnd: function() { this.stream.lineEnd(); },\n polygonStart: function() { this.stream.polygonStart(); },\n polygonEnd: function() { this.stream.polygonEnd(); }\n};\n","import {default as geoStream} from \"../stream\";\nimport boundsStream from \"../path/bounds\";\n\nexport function fitExtent(projection, extent, object) {\n var w = extent[1][0] - extent[0][0],\n h = extent[1][1] - extent[0][1],\n clip = projection.clipExtent && projection.clipExtent();\n\n projection\n .scale(150)\n .translate([0, 0]);\n\n if (clip != null) projection.clipExtent(null);\n\n geoStream(object, projection.stream(boundsStream));\n\n var b = boundsStream.result(),\n k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])),\n x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2,\n y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;\n\n if (clip != null) projection.clipExtent(clip);\n\n return projection\n .scale(k * 150)\n .translate([x, y]);\n}\n\nexport function fitSize(projection, size, object) {\n return fitExtent(projection, [[0, 0], size], object);\n}\n","import {cartesian} from \"../cartesian\";\nimport {abs, asin, atan2, cos, epsilon, radians, sqrt} from \"../math\";\nimport {transformer} from \"../transform\";\n\nvar maxDepth = 16, // maximum depth of subdivision\n cosMinDistance = cos(30 * radians); // cos(minimum angular distance)\n\nexport default function(project, delta2) {\n return +delta2 ? resample(project, delta2) : resampleNone(project);\n}\n\nfunction resampleNone(project) {\n return transformer({\n point: function(x, y) {\n x = project(x, y);\n this.stream.point(x[0], x[1]);\n }\n });\n}\n\nfunction resample(project, delta2) {\n\n function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {\n var dx = x1 - x0,\n dy = y1 - y0,\n d2 = dx * dx + dy * dy;\n if (d2 > 4 * delta2 && depth--) {\n var a = a0 + a1,\n b = b0 + b1,\n c = c0 + c1,\n m = sqrt(a * a + b * b + c * c),\n phi2 = asin(c /= m),\n lambda2 = abs(abs(c) - 1) < epsilon || abs(lambda0 - lambda1) < epsilon ? (lambda0 + lambda1) / 2 : atan2(b, a),\n p = project(lambda2, phi2),\n x2 = p[0],\n y2 = p[1],\n dx2 = x2 - x0,\n dy2 = y2 - y0,\n dz = dy * dx2 - dx * dy2;\n if (dz * dz / d2 > delta2 // perpendicular projected distance\n || abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end\n || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);\n stream.point(x2, y2);\n resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);\n }\n }\n }\n return function(stream) {\n var lambda00, x00, y00, a00, b00, c00, // first point\n lambda0, x0, y0, a0, b0, c0; // previous point\n\n var resampleStream = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; },\n polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; }\n };\n\n function point(x, y) {\n x = project(x, y);\n stream.point(x[0], x[1]);\n }\n\n function lineStart() {\n x0 = NaN;\n resampleStream.point = linePoint;\n stream.lineStart();\n }\n\n function linePoint(lambda, phi) {\n var c = cartesian([lambda, phi]), p = project(lambda, phi);\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);\n stream.point(x0, y0);\n }\n\n function lineEnd() {\n resampleStream.point = point;\n stream.lineEnd();\n }\n\n function ringStart() {\n lineStart();\n resampleStream.point = ringPoint;\n resampleStream.lineEnd = ringEnd;\n }\n\n function ringPoint(lambda, phi) {\n linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;\n resampleStream.point = linePoint;\n }\n\n function ringEnd() {\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);\n resampleStream.lineEnd = lineEnd;\n lineEnd();\n }\n\n return resampleStream;\n };\n}\n","import clipAntimeridian from \"../clip/antimeridian\";\nimport clipCircle from \"../clip/circle\";\nimport {clipExtent} from \"../clip/extent\";\nimport compose from \"../compose\";\nimport identity from \"../identity\";\nimport {degrees, radians, sqrt} from \"../math\";\nimport {rotateRadians} from \"../rotation\";\nimport {transformer} from \"../transform\";\nimport {fitExtent, fitSize} from \"./fit\";\nimport resample from \"./resample\";\n\nvar transformRadians = transformer({\n point: function(x, y) {\n this.stream.point(x * radians, y * radians);\n }\n});\n\nexport default function projection(project) {\n return projectionMutator(function() { return project; })();\n}\n\nexport function projectionMutator(projectAt) {\n var project,\n k = 150, // scale\n x = 480, y = 250, // translate\n dx, dy, lambda = 0, phi = 0, // center\n deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, projectRotate, // rotate\n theta = null, preclip = clipAntimeridian, // clip angle\n x0 = null, y0, x1, y1, postclip = identity, // clip extent\n delta2 = 0.5, projectResample = resample(projectTransform, delta2), // precision\n cache,\n cacheStream;\n\n function projection(point) {\n point = projectRotate(point[0] * radians, point[1] * radians);\n return [point[0] * k + dx, dy - point[1] * k];\n }\n\n function invert(point) {\n point = projectRotate.invert((point[0] - dx) / k, (dy - point[1]) / k);\n return point && [point[0] * degrees, point[1] * degrees];\n }\n\n function projectTransform(x, y) {\n return x = project(x, y), [x[0] * k + dx, dy - x[1] * k];\n }\n\n projection.stream = function(stream) {\n return cache && cacheStream === stream ? cache : cache = transformRadians(preclip(rotate, projectResample(postclip(cacheStream = stream))));\n };\n\n projection.clipAngle = function(_) {\n return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians, 6 * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees;\n };\n\n projection.clipExtent = function(_) {\n return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipExtent(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n\n projection.scale = function(_) {\n return arguments.length ? (k = +_, recenter()) : k;\n };\n\n projection.translate = function(_) {\n return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];\n };\n\n projection.center = function(_) {\n return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees, phi * degrees];\n };\n\n projection.rotate = function(_) {\n return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees, deltaPhi * degrees, deltaGamma * degrees];\n };\n\n projection.precision = function(_) {\n return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt(delta2);\n };\n\n projection.fitExtent = function(extent, object) {\n return fitExtent(projection, extent, object);\n };\n\n projection.fitSize = function(size, object) {\n return fitSize(projection, size, object);\n };\n\n function recenter() {\n projectRotate = compose(rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma), project);\n var center = project(lambda, phi);\n dx = x - center[0] * k;\n dy = y + center[1] * k;\n return reset();\n }\n\n function reset() {\n cache = cacheStream = null;\n return projection;\n }\n\n return function() {\n project = projectAt.apply(this, arguments);\n projection.invert = project.invert && invert;\n return recenter();\n };\n}\n","import {asin, atan2, cos, sin, sqrt} from \"../math\";\n\nexport function azimuthalRaw(scale) {\n return function(x, y) {\n var cx = cos(x),\n cy = cos(y),\n k = scale(cx * cy);\n return [\n k * cy * sin(x),\n k * sin(y)\n ];\n }\n}\n\nexport function azimuthalInvert(angle) {\n return function(x, y) {\n var z = sqrt(x * x + y * y),\n c = angle(z),\n sc = sin(c),\n cc = cos(c);\n return [\n atan2(x * sc, z * cc),\n asin(z && y * sc / z)\n ];\n }\n}\n","import {asin, sqrt} from \"../math\";\nimport {azimuthalRaw, azimuthalInvert} from \"./azimuthal\";\nimport projection from \"./index\";\n\nexport var azimuthalEqualAreaRaw = azimuthalRaw(function(cxcy) {\n return sqrt(2 / (1 + cxcy));\n});\n\nazimuthalEqualAreaRaw.invert = azimuthalInvert(function(z) {\n return 2 * asin(z / 2);\n});\n\nexport default function() {\n return projection(azimuthalEqualAreaRaw)\n .scale(124.75)\n .clipAngle(180 - 1e-3);\n}\n","import {acos, sin} from \"../math\";\nimport {azimuthalRaw, azimuthalInvert} from \"./azimuthal\";\nimport projection from \"./index\";\n\nexport var azimuthalEquidistantRaw = azimuthalRaw(function(c) {\n return (c = acos(c)) && c / sin(c);\n});\n\nazimuthalEquidistantRaw.invert = azimuthalInvert(function(z) {\n return z;\n});\n\nexport default function() {\n return projection(azimuthalEquidistantRaw)\n .scale(79.4188)\n .clipAngle(180 - 1e-3);\n}\n","import projection from \"./index\";\n\nexport function equirectangularRaw(lambda, phi) {\n return [lambda, phi];\n}\n\nequirectangularRaw.invert = equirectangularRaw;\n\nexport default function() {\n return projection(equirectangularRaw)\n .scale(152.63);\n}\n","// index.js\nimport { center } from \"@turf/center\";\nimport jsts from \"@turf/jsts\";\nimport { geomEach, featureEach } from \"@turf/meta\";\nimport { geoAzimuthalEquidistant } from \"d3-geo\";\nimport {\n feature,\n featureCollection,\n radiansToLength,\n lengthToRadians,\n earthRadius\n} from \"@turf/helpers\";\nvar { BufferOp, GeoJSONReader, GeoJSONWriter } = jsts;\nfunction buffer(geojson, radius, options) {\n options = options || {};\n var units = options.units || \"kilometers\";\n var steps = options.steps || 8;\n if (!geojson) throw new Error(\"geojson is required\");\n if (typeof options !== \"object\") throw new Error(\"options must be an object\");\n if (typeof steps !== \"number\") throw new Error(\"steps must be an number\");\n if (radius === void 0) throw new Error(\"radius is required\");\n if (steps <= 0) throw new Error(\"steps must be greater than 0\");\n var results = [];\n switch (geojson.type) {\n case \"GeometryCollection\":\n geomEach(geojson, function(geometry) {\n var buffered = bufferFeature(geometry, radius, units, steps);\n if (buffered) results.push(buffered);\n });\n return featureCollection(results);\n case \"FeatureCollection\":\n featureEach(geojson, function(feature2) {\n var multiBuffered = bufferFeature(feature2, radius, units, steps);\n if (multiBuffered) {\n featureEach(multiBuffered, function(buffered) {\n if (buffered) results.push(buffered);\n });\n }\n });\n return featureCollection(results);\n }\n return bufferFeature(geojson, radius, units, steps);\n}\nfunction bufferFeature(geojson, radius, units, steps) {\n var properties = geojson.properties || {};\n var geometry = geojson.type === \"Feature\" ? geojson.geometry : geojson;\n if (geometry.type === \"GeometryCollection\") {\n var results = [];\n geomEach(geojson, function(geometry2) {\n var buffered2 = bufferFeature(geometry2, radius, units, steps);\n if (buffered2) results.push(buffered2);\n });\n return featureCollection(results);\n }\n var projection = defineProjection(geometry);\n var projected = {\n type: geometry.type,\n coordinates: projectCoords(geometry.coordinates, projection)\n };\n var reader = new GeoJSONReader();\n var geom = reader.read(projected);\n var distance = radiansToLength(lengthToRadians(radius, units), \"meters\");\n var buffered = BufferOp.bufferOp(geom, distance, steps);\n var writer = new GeoJSONWriter();\n buffered = writer.write(buffered);\n if (coordsIsNaN(buffered.coordinates)) return void 0;\n var result = {\n type: buffered.type,\n coordinates: unprojectCoords(buffered.coordinates, projection)\n };\n return feature(result, properties);\n}\nfunction coordsIsNaN(coords) {\n if (Array.isArray(coords[0])) return coordsIsNaN(coords[0]);\n return isNaN(coords[0]);\n}\nfunction projectCoords(coords, proj) {\n if (typeof coords[0] !== \"object\") return proj(coords);\n return coords.map(function(coord) {\n return projectCoords(coord, proj);\n });\n}\nfunction unprojectCoords(coords, proj) {\n if (typeof coords[0] !== \"object\") return proj.invert(coords);\n return coords.map(function(coord) {\n return unprojectCoords(coord, proj);\n });\n}\nfunction defineProjection(geojson) {\n var coords = center(geojson).geometry.coordinates;\n var rotation = [-coords[0], -coords[1]];\n return geoAzimuthalEquidistant().rotate(rotation).scale(earthRadius);\n}\nvar index_default = buffer;\nexport {\n buffer,\n index_default as default\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport { point } from \"@turf/helpers\";\nimport { coordEach } from \"@turf/meta\";\nfunction centroid(geojson, options = {}) {\n let xSum = 0;\n let ySum = 0;\n let len = 0;\n coordEach(\n geojson,\n function(coord) {\n xSum += coord[0];\n ySum += coord[1];\n len++;\n },\n true\n );\n return point([xSum / len, ySum / len], options.properties);\n}\nvar index_default = centroid;\nexport {\n centroid,\n index_default as default\n};\n//# sourceMappingURL=index.js.map","// index.ts\nfunction clone(geojson) {\n if (!geojson) {\n throw new Error(\"geojson is required\");\n }\n switch (geojson.type) {\n case \"Feature\":\n return cloneFeature(geojson);\n case \"FeatureCollection\":\n return cloneFeatureCollection(geojson);\n case \"Point\":\n case \"LineString\":\n case \"Polygon\":\n case \"MultiPoint\":\n case \"MultiLineString\":\n case \"MultiPolygon\":\n case \"GeometryCollection\":\n return cloneGeometry(geojson);\n default:\n throw new Error(\"unknown GeoJSON type\");\n }\n}\nfunction cloneFeature(geojson) {\n const cloned = { type: \"Feature\" };\n Object.keys(geojson).forEach((key) => {\n switch (key) {\n case \"type\":\n case \"properties\":\n case \"geometry\":\n return;\n default:\n cloned[key] = geojson[key];\n }\n });\n cloned.properties = cloneProperties(geojson.properties);\n if (geojson.geometry == null) {\n cloned.geometry = null;\n } else {\n cloned.geometry = cloneGeometry(geojson.geometry);\n }\n return cloned;\n}\nfunction cloneProperties(properties) {\n const cloned = {};\n if (!properties) {\n return cloned;\n }\n Object.keys(properties).forEach((key) => {\n const value = properties[key];\n if (typeof value === \"object\") {\n if (value === null) {\n cloned[key] = null;\n } else if (Array.isArray(value)) {\n cloned[key] = value.map((item) => {\n return item;\n });\n } else {\n cloned[key] = cloneProperties(value);\n }\n } else {\n cloned[key] = value;\n }\n });\n return cloned;\n}\nfunction cloneFeatureCollection(geojson) {\n const cloned = { type: \"FeatureCollection\" };\n Object.keys(geojson).forEach((key) => {\n switch (key) {\n case \"type\":\n case \"features\":\n return;\n default:\n cloned[key] = geojson[key];\n }\n });\n cloned.features = geojson.features.map((feature) => {\n return cloneFeature(feature);\n });\n return cloned;\n}\nfunction cloneGeometry(geometry) {\n const geom = { type: geometry.type };\n if (geometry.bbox) {\n geom.bbox = geometry.bbox;\n }\n if (geometry.type === \"GeometryCollection\") {\n geom.geometries = geometry.geometries.map((g) => {\n return cloneGeometry(g);\n });\n return geom;\n }\n geom.coordinates = deepSlice(geometry.coordinates);\n return geom;\n}\nfunction deepSlice(coords) {\n const cloned = coords;\n if (typeof cloned[0] !== \"object\") {\n return cloned.slice();\n }\n return cloned.map((coord) => {\n return deepSlice(coord);\n });\n}\nvar index_default = clone;\nexport {\n clone,\n cloneProperties,\n index_default as default\n};\n//# sourceMappingURL=index.js.map","/*\r\n * bignumber.js v9.3.1\r\n * A JavaScript library for arbitrary-precision arithmetic.\r\n * https://github.com/MikeMcl/bignumber.js\r\n * Copyright (c) 2025 Michael Mclaughlin <M8ch88l@gmail.com>\r\n * MIT Licensed.\r\n *\r\n * BigNumber.prototype methods | BigNumber methods\r\n * |\r\n * absoluteValue abs | clone\r\n * comparedTo | config set\r\n * decimalPlaces dp | DECIMAL_PLACES\r\n * dividedBy div | ROUNDING_MODE\r\n * dividedToIntegerBy idiv | EXPONENTIAL_AT\r\n * exponentiatedBy pow | RANGE\r\n * integerValue | CRYPTO\r\n * isEqualTo eq | MODULO_MODE\r\n * isFinite | POW_PRECISION\r\n * isGreaterThan gt | FORMAT\r\n * isGreaterThanOrEqualTo gte | ALPHABET\r\n * isInteger | isBigNumber\r\n * isLessThan lt | maximum max\r\n * isLessThanOrEqualTo lte | minimum min\r\n * isNaN | random\r\n * isNegative | sum\r\n * isPositive |\r\n * isZero |\r\n * minus |\r\n * modulo mod |\r\n * multipliedBy times |\r\n * negated |\r\n * plus |\r\n * precision sd |\r\n * shiftedBy |\r\n * squareRoot sqrt |\r\n * toExponential |\r\n * toFixed |\r\n * toFormat |\r\n * toFraction |\r\n * toJSON |\r\n * toNumber |\r\n * toPrecision |\r\n * toString |\r\n * valueOf |\r\n *\r\n */\r\n\r\n\r\nvar\r\n isNumeric = /^-?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?$/i,\r\n mathceil = Math.ceil,\r\n mathfloor = Math.floor,\r\n\r\n bignumberError = '[BigNumber Error] ',\r\n tooManyDigits = bignumberError + 'Number primitive has more than 15 significant digits: ',\r\n\r\n BASE = 1e14,\r\n LOG_BASE = 14,\r\n MAX_SAFE_INTEGER = 0x1fffffffffffff, // 2^53 - 1\r\n // MAX_INT32 = 0x7fffffff, // 2^31 - 1\r\n POWS_TEN = [1, 10, 100, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12, 1e13],\r\n SQRT_BASE = 1e7,\r\n\r\n // EDITABLE\r\n // The limit on the value of DECIMAL_PLACES, TO_EXP_NEG, TO_EXP_POS, MIN_EXP, MAX_EXP, and\r\n // the arguments to toExponential, toFixed, toFormat, and toPrecision.\r\n MAX = 1E9; // 0 to MAX_INT32\r\n\r\n\r\n/*\r\n * Create and return a BigNumber constructor.\r\n */\r\nfunction clone(configObject) {\r\n var div, convertBase, parseNumeric,\r\n P = BigNumber.prototype = { constructor: BigNumber, toString: null, valueOf: null },\r\n ONE = new BigNumber(1),\r\n\r\n\r\n //----------------------------- EDITABLE CONFIG DEFAULTS -------------------------------\r\n\r\n\r\n // The default values below must be integers within the inclusive ranges stated.\r\n // The values can also be changed at run-time using BigNumber.set.\r\n\r\n // The maximum number of decimal places for operations involving division.\r\n DECIMAL_PLACES = 20, // 0 to MAX\r\n\r\n // The rounding mode used when rounding to the above decimal places, and when using\r\n // toExponential, toFixed, toFormat and toPrecision, and round (default value).\r\n // UP 0 Away from zero.\r\n // DOWN 1 Towards zero.\r\n // CEIL 2 Towards +Infinity.\r\n // FLOOR 3 Towards -Infinity.\r\n // HALF_UP 4 Towards nearest neighbour. If equidistant, up.\r\n // HALF_DOWN 5 Towards nearest neighbour. If equidistant, down.\r\n // HALF_EVEN 6 Towards nearest neighbour. If equidistant, towards even neighbour.\r\n // HALF_CEIL 7 Towards nearest neighbour. If equidistant, towards +Infinity.\r\n // HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity.\r\n ROUNDING_MODE = 4, // 0 to 8\r\n\r\n // EXPONENTIAL_AT : [TO_EXP_NEG , TO_EXP_POS]\r\n\r\n // The exponent value at and beneath which toString returns exponential notation.\r\n // Number type: -7\r\n TO_EXP_NEG = -7, // 0 to -MAX\r\n\r\n // The exponent value at and above which toString returns exponential notation.\r\n // Number type: 21\r\n TO_EXP_POS = 21, // 0 to MAX\r\n\r\n // RANGE : [MIN_EXP, MAX_EXP]\r\n\r\n // The minimum exponent value, beneath which underflow to zero occurs.\r\n // Number type: -324 (5e-324)\r\n MIN_EXP = -1e7, // -1 to -MAX\r\n\r\n // The maximum exponent value, above which overflow to Infinity occurs.\r\n // Number type: 308 (1.7976931348623157e+308)\r\n // For MAX_EXP > 1e7, e.g. new BigNumber('1e100000000').plus(1) may be slow.\r\n MAX_EXP = 1e7, // 1 to MAX\r\n\r\n // Whether to use cryptographically-secure random number generation, if available.\r\n CRYPTO = false, // true or false\r\n\r\n // The modulo mode used when calculating the modulus: a mod n.\r\n // The quotient (q = a / n) is calculated according to the corresponding rounding mode.\r\n // The remainder (r) is calculated as: r = a - n * q.\r\n //\r\n // UP 0 The remainder is positive if the dividend is negative, else is negative.\r\n // DOWN 1 The remainder has the same sign as the dividend.\r\n // This modulo mode is commonly known as 'truncated division' and is\r\n // equivalent to (a % n) in JavaScript.\r\n // FLOOR 3 The remainder has the same sign as the divisor (Python %).\r\n // HALF_EVEN 6 This modulo mode implements the IEEE 754 remainder function.\r\n // EUCLID 9 Euclidian division. q = sign(n) * floor(a / abs(n)).\r\n // The remainder is always positive.\r\n //\r\n // The truncated division, floored division, Euclidian division and IEEE 754 remainder\r\n // modes are commonly used for the modulus operation.\r\n // Although the other rounding modes can also be used, they may not give useful results.\r\n MODULO_MODE = 1, // 0 to 9\r\n\r\n // The maximum number of significant digits of the result of the exponentiatedBy operation.\r\n // If POW_PRECISION is 0, there will be unlimited significant digits.\r\n POW_PRECISION = 0, // 0 to MAX\r\n\r\n // The format specification used by the BigNumber.prototype.toFormat method.\r\n FORMAT = {\r\n prefix: '',\r\n groupSize: 3,\r\n secondaryGroupSize: 0,\r\n groupSeparator: ',',\r\n decimalSeparator: '.',\r\n fractionGroupSize: 0,\r\n fractionGroupSeparator: '\\xA0', // non-breaking space\r\n suffix: ''\r\n },\r\n\r\n // The alphabet used for base conversion. It must be at least 2 characters long, with no '+',\r\n // '-', '.', whitespace, or repeated character.\r\n // '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_'\r\n ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyz',\r\n alphabetHasNormalDecimalDigits = true;\r\n\r\n\r\n //------------------------------------------------------------------------------------------\r\n\r\n\r\n // CONSTRUCTOR\r\n\r\n\r\n /*\r\n * The BigNumber constructor and exported function.\r\n * Create and return a new instance of a BigNumber object.\r\n *\r\n * v {number|string|BigNumber} A numeric value.\r\n * [b] {number} The base of v. Integer, 2 to ALPHABET.length inclusive.\r\n */\r\n function BigNumber(v, b) {\r\n var alphabet, c, caseChanged, e, i, isNum, len, str,\r\n x = this;\r\n\r\n // Enable constructor call without `new`.\r\n if (!(x instanceof BigNumber)) return new BigNumber(v, b);\r\n\r\n if (b == null) {\r\n\r\n if (v && v._isBigNumber === true) {\r\n x.s = v.s;\r\n\r\n if (!v.c || v.e > MAX_EXP) {\r\n x.c = x.e = null;\r\n } else if (v.e < MIN_EXP) {\r\n x.c = [x.e = 0];\r\n } else {\r\n x.e = v.e;\r\n x.c = v.c.slice();\r\n }\r\n\r\n return;\r\n }\r\n\r\n if ((isNum = typeof v == 'number') && v * 0 == 0) {\r\n\r\n // Use `1 / n` to handle minus zero also.\r\n x.s = 1 / v < 0 ? (v = -v, -1) : 1;\r\n\r\n // Fast path for integers, where n < 2147483648 (2**31).\r\n if (v === ~~v) {\r\n for (e = 0, i = v; i >= 10; i /= 10, e++);\r\n\r\n if (e > MAX_EXP) {\r\n x.c = x.e = null;\r\n } else {\r\n x.e = e;\r\n x.c = [v];\r\n }\r\n\r\n return;\r\n }\r\n\r\n str = String(v);\r\n } else {\r\n\r\n if (!isNumeric.test(str = String(v))) return parseNumeric(x, str, isNum);\r\n\r\n x.s = str.charCodeAt(0) == 45 ? (str = str.slice(1), -1) : 1;\r\n }\r\n\r\n // Decimal point?\r\n if ((e = str.indexOf('.')) > -1) str = str.replace('.', '');\r\n\r\n // Exponential form?\r\n if ((i = str.search(/e/i)) > 0) {\r\n\r\n // Determine exponent.\r\n if (e < 0) e = i;\r\n e += +str.slice(i + 1);\r\n str = str.substring(0, i);\r\n } else if (e < 0) {\r\n\r\n // Integer.\r\n e = str.length;\r\n }\r\n\r\n } else {\r\n\r\n // '[BigNumber Error] Base {not a primitive number|not an integer|out of range}: {b}'\r\n intCheck(b, 2, ALPHABET.length, 'Base');\r\n\r\n // Allow exponential notation to be used with base 10 argument, while\r\n // also rounding to DECIMAL_PLACES as with other bases.\r\n if (b == 10 && alphabetHasNormalDecimalDigits) {\r\n x = new BigNumber(v);\r\n return round(x, DECIMAL_PLACES + x.e + 1, ROUNDING_MODE);\r\n }\r\n\r\n str = String(v);\r\n\r\n if (isNum = typeof v == 'number') {\r\n\r\n // Avoid potential interpretation of Infinity and NaN as base 44+ values.\r\n if (v * 0 != 0) return parseNumeric(x, str, isNum, b);\r\n\r\n x.s = 1 / v < 0 ? (str = str.slice(1), -1) : 1;\r\n\r\n // '[BigNumber Error] Number primitive has more than 15 significant digits: {n}'\r\n if (BigNumber.DEBUG && str.replace(/^0\\.0*|\\./, '').length > 15) {\r\n throw Error\r\n (tooManyDigits + v);\r\n }\r\n } else {\r\n x.s = str.charCodeAt(0) === 45 ? (str = str.slice(1), -1) : 1;\r\n }\r\n\r\n alphabet = ALPHABET.slice(0, b);\r\n e = i = 0;\r\n\r\n // Check that str is a valid base b number.\r\n // Don't use RegExp, so alphabet can contain special characters.\r\n for (len = str.length; i < len; i++) {\r\n if (alphabet.indexOf(c = str.charAt(i)) < 0) {\r\n if (c == '.') {\r\n\r\n // If '.' is not the first character and it has not be found before.\r\n if (i > e) {\r\n e = len;\r\n continue;\r\n }\r\n } else if (!caseChanged) {\r\n\r\n // Allow e.g. hexadecimal 'FF' as well as 'ff'.\r\n if (str == str.toUpperCase() && (str = str.toLowerCase()) ||\r\n str == str.toLowerCase() && (str = str.toUpperCase())) {\r\n caseChanged = true;\r\n i = -1;\r\n e = 0;\r\n continue;\r\n }\r\n }\r\n\r\n return parseNumeric(x, String(v), isNum, b);\r\n }\r\n }\r\n\r\n // Prevent later check for length on converted number.\r\n isNum = false;\r\n str = convertBase(str, b, 10, x.s);\r\n\r\n // Decimal point?\r\n if ((e = str.indexOf('.')) > -1) str = str.replace('.', '');\r\n else e = str.length;\r\n }\r\n\r\n // Determine leading zeros.\r\n for (i = 0; str.charCodeAt(i) === 48; i++);\r\n\r\n // Determine trailing zeros.\r\n for (len = str.length; str.charCodeAt(--len) === 48;);\r\n\r\n if (str = str.slice(i, ++len)) {\r\n len -= i;\r\n\r\n // '[BigNumber Error] Number primitive has more than 15 significant digits: {n}'\r\n if (isNum && BigNumber.DEBUG &&\r\n len > 15 && (v > MAX_SAFE_INTEGER || v !== mathfloor(v))) {\r\n throw Error\r\n (tooManyDigits + (x.s * v));\r\n }\r\n\r\n // Overflow?\r\n if ((e = e - i - 1) > MAX_EXP) {\r\n\r\n // Infinity.\r\n x.c = x.e = null;\r\n\r\n // Underflow?\r\n } else if (e < MIN_EXP) {\r\n\r\n // Zero.\r\n x.c = [x.e = 0];\r\n } else {\r\n x.e = e;\r\n x.c = [];\r\n\r\n // Transform base\r\n\r\n // e is the base 10 exponent.\r\n // i is where to slice str to get the first element of the coefficient array.\r\n i = (e + 1) % LOG_BASE;\r\n if (e < 0) i += LOG_BASE; // i < 1\r\n\r\n if (i < len) {\r\n if (i) x.c.push(+str.slice(0, i));\r\n\r\n for (len -= LOG_BASE; i < len;) {\r\n x.c.push(+str.slice(i, i += LOG_BASE));\r\n }\r\n\r\n i = LOG_BASE - (str = str.slice(i)).length;\r\n } else {\r\n i -= len;\r\n }\r\n\r\n for (; i--; str += '0');\r\n x.c.push(+str);\r\n }\r\n } else {\r\n\r\n // Zero.\r\n x.c = [x.e = 0];\r\n }\r\n }\r\n\r\n\r\n // CONSTRUCTOR PROPERTIES\r\n\r\n\r\n BigNumber.clone = clone;\r\n\r\n BigNumber.ROUND_UP = 0;\r\n BigNumber.ROUND_DOWN = 1;\r\n BigNumber.ROUND_CEIL = 2;\r\n BigNumber.ROUND_FLOOR = 3;\r\n BigNumber.ROUND_HALF_UP = 4;\r\n BigNumber.ROUND_HALF_DOWN = 5;\r\n BigNumber.ROUND_HALF_EVEN = 6;\r\n BigNumber.ROUND_HALF_CEIL = 7;\r\n BigNumber.ROUND_HALF_FLOOR = 8;\r\n BigNumber.EUCLID = 9;\r\n\r\n\r\n /*\r\n * Configure infrequently-changing library-wide settings.\r\n *\r\n * Accept an object with the following optional properties (if the value of a property is\r\n * a number, it must be an integer within the inclusive range stated):\r\n *\r\n * DECIMAL_PLACES {number} 0 to MAX\r\n * ROUNDING_MODE {number} 0 to 8\r\n * EXPONENTIAL_AT {number|number[]} -MAX to MAX or [-MAX to 0, 0 to MAX]\r\n * RANGE {number|number[]} -MAX to MAX (not zero) or [-MAX to -1, 1 to MAX]\r\n * CRYPTO {boolean} true or false\r\n * MODULO_MODE {number} 0 to 9\r\n * POW_PRECISION {number} 0 to MAX\r\n * ALPHABET {string} A string of two or more unique characters which does\r\n * not contain '.'.\r\n * FORMAT {object} An object with some of the following properties:\r\n * prefix {string}\r\n * groupSize {number}\r\n * secondaryGroupSize {number}\r\n * groupSeparator {string}\r\n * decimalSeparator {string}\r\n * fractionGroupSize {number}\r\n * fractionGroupSeparator {string}\r\n * suffix {string}\r\n *\r\n * (The values assigned to the above FORMAT object properties are not checked for validity.)\r\n *\r\n * E.g.\r\n * BigNumber.config({ DECIMAL_PLACES : 20, ROUNDING_MODE : 4 })\r\n *\r\n * Ignore properties/parameters set to null or undefined, except for ALPHABET.\r\n *\r\n * Return an object with the properties current values.\r\n */\r\n BigNumber.config = BigNumber.set = function (obj) {\r\n var p, v;\r\n\r\n if (obj != null) {\r\n\r\n if (typeof obj == 'object') {\r\n\r\n // DECIMAL_PLACES {number} Integer, 0 to MAX inclusive.\r\n // '[BigNumber Error] DECIMAL_PLACES {not a primitive number|not an integer|out of range}: {v}'\r\n if (obj.hasOwnProperty(p = 'DECIMAL_PLACES')) {\r\n v = obj[p];\r\n intCheck(v, 0, MAX, p);\r\n DECIMAL_PLACES = v;\r\n }\r\n\r\n // ROUNDING_MODE {number} Integer, 0 to 8 inclusive.\r\n // '[BigNumber Error] ROUNDING_MODE {not a primitive number|not an integer|out of range}: {v}'\r\n if (obj.hasOwnProperty(p = 'ROUNDING_MODE')) {\r\n v = obj[p];\r\n intCheck(v, 0, 8, p);\r\n ROUNDING_MODE = v;\r\n }\r\n\r\n // EXPONENTIAL_AT {number|number[]}\r\n // Integer, -MAX to MAX inclusive or\r\n // [integer -MAX to 0 inclusive, 0 to MAX inclusive].\r\n // '[BigNumber Error] EXPONENTIAL_AT {not a primitive number|not an integer|out of range}: {v}'\r\n if (obj.hasOwnProperty(p = 'EXPONENTIAL_AT')) {\r\n v = obj[p];\r\n if (v && v.pop) {\r\n intCheck(v[0], -MAX, 0, p);\r\n intCheck(v[1], 0, MAX, p);\r\n TO_EXP_NEG = v[0];\r\n TO_EXP_POS = v[1];\r\n } else {\r\n intCheck(v, -MAX, MAX, p);\r\n TO_EXP_NEG = -(TO_EXP_POS = v < 0 ? -v : v);\r\n }\r\n }\r\n\r\n // RANGE {number|number[]} Non-zero integer, -MAX to MAX inclusive or\r\n // [integer -MAX to -1 inclusive, integer 1 to MAX inclusive].\r\n // '[BigNumber Error] RANGE {not a primitive number|not an integer|out of range|cannot be zero}: {v}'\r\n if (obj.hasOwnProperty(p = 'RANGE')) {\r\n v = obj[p];\r\n if (v && v.pop) {\r\n intCheck(v[0], -MAX, -1, p);\r\n intCheck(v[1], 1, MAX, p);\r\n MIN_EXP = v[0];\r\n MAX_EXP = v[1];\r\n } else {\r\n intCheck(v, -MAX, MAX, p);\r\n if (v) {\r\n MIN_EXP = -(MAX_EXP = v < 0 ? -v : v);\r\n } else {\r\n throw Error\r\n (bignumberError + p + ' cannot be zero: ' + v);\r\n }\r\n }\r\n }\r\n\r\n // CRYPTO {boolean} true or false.\r\n // '[BigNumber Error] CRYPTO not true or false: {v}'\r\n // '[BigNumber Error] crypto unavailable'\r\n if (obj.hasOwnProperty(p = 'CRYPTO')) {\r\n v = obj[p];\r\n if (v === !!v) {\r\n if (v) {\r\n if (typeof crypto != 'undefined' && crypto &&\r\n (crypto.getRandomValues || crypto.randomBytes)) {\r\n CRYPTO = v;\r\n } else {\r\n CRYPTO = !v;\r\n throw Error\r\n (bignumberError + 'crypto unavailable');\r\n }\r\n } else {\r\n CRYPTO = v;\r\n }\r\n } else {\r\n throw Error\r\n (bignumberError + p + ' not true or false: ' + v);\r\n }\r\n }\r\n\r\n // MODULO_MODE {number} Integer, 0 to 9 inclusive.\r\n // '[BigNumber Error] MODULO_MODE {not a primitive number|not an integer|out of range}: {v}'\r\n if (obj.hasOwnProperty(p = 'MODULO_MODE')) {\r\n v = obj[p];\r\n intCheck(v, 0, 9, p);\r\n MODULO_MODE = v;\r\n }\r\n\r\n // POW_PRECISION {number} Integer, 0 to MAX inclusive.\r\n // '[BigNumber Error] POW_PRECISION {not a primitive number|not an integer|out of range}: {v}'\r\n if (obj.hasOwnProperty(p = 'POW_PRECISION')) {\r\n v = obj[p];\r\n intCheck(v, 0, MAX, p);\r\n POW_PRECISION = v;\r\n }\r\n\r\n // FORMAT {object}\r\n // '[BigNumber Error] FORMAT not an object: {v}'\r\n if (obj.hasOwnProperty(p = 'FORMAT')) {\r\n v = obj[p];\r\n if (typeof v == 'object') FORMAT = v;\r\n else throw Error\r\n (bignumberError + p + ' not an object: ' + v);\r\n }\r\n\r\n // ALPHABET {string}\r\n // '[BigNumber Error] ALPHABET invalid: {v}'\r\n if (obj.hasOwnProperty(p = 'ALPHABET')) {\r\n v = obj[p];\r\n\r\n // Disallow if less than two characters,\r\n // or if it contains '+', '-', '.', whitespace, or a repeated character.\r\n if (typeof v == 'string' && !/^.?$|[+\\-.\\s]|(.).*\\1/.test(v)) {\r\n alphabetHasNormalDecimalDigits = v.slice(0, 10) == '0123456789';\r\n ALPHABET = v;\r\n } else {\r\n throw Error\r\n (bignumberError + p + ' invalid: ' + v);\r\n }\r\n }\r\n\r\n } else {\r\n\r\n // '[BigNumber Error] Object expected: {v}'\r\n throw Error\r\n (bignumberError + 'Object expected: ' + obj);\r\n }\r\n }\r\n\r\n return {\r\n DECIMAL_PLACES: DECIMAL_PLACES,\r\n ROUNDING_MODE: ROUNDING_MODE,\r\n EXPONENTIAL_AT: [TO_EXP_NEG, TO_EXP_POS],\r\n RANGE: [MIN_EXP, MAX_EXP],\r\n CRYPTO: CRYPTO,\r\n MODULO_MODE: MODULO_MODE,\r\n POW_PRECISION: POW_PRECISION,\r\n FORMAT: FORMAT,\r\n ALPHABET: ALPHABET\r\n };\r\n };\r\n\r\n\r\n /*\r\n * Return true if v is a BigNumber instance, otherwise return false.\r\n *\r\n * If BigNumber.DEBUG is true, throw if a BigNumber instance is not well-formed.\r\n *\r\n * v {any}\r\n *\r\n * '[BigNumber Error] Invalid BigNumber: {v}'\r\n */\r\n BigNumber.isBigNumber = function (v) {\r\n if (!v || v._isBigNumber !== true) return false;\r\n if (!BigNumber.DEBUG) return true;\r\n\r\n var i, n,\r\n c = v.c,\r\n e = v.e,\r\n s = v.s;\r\n\r\n out: if ({}.toString.call(c) == '[object Array]') {\r\n\r\n if ((s === 1 || s === -1) && e >= -MAX && e <= MAX && e === mathfloor(e)) {\r\n\r\n // If the first element is zero, the BigNumber value must be zero.\r\n if (c[0] === 0) {\r\n if (e === 0 && c.length === 1) return true;\r\n break out;\r\n }\r\n\r\n // Calculate number of digits that c[0] should have, based on the exponent.\r\n i = (e + 1) % LOG_BASE;\r\n if (i < 1) i += LOG_BASE;\r\n\r\n // Calculate number of digits of c[0].\r\n //if (Math.ceil(Math.log(c[0] + 1) / Math.LN10) == i) {\r\n if (String(c[0]).length == i) {\r\n\r\n for (i = 0; i < c.length; i++) {\r\n n = c[i];\r\n if (n < 0 || n >= BASE || n !== mathfloor(n)) break out;\r\n }\r\n\r\n // Last element cannot be zero, unless it is the only element.\r\n if (n !== 0) return true;\r\n }\r\n }\r\n\r\n // Infinity/NaN\r\n } else if (c === null && e === null && (s === null || s === 1 || s === -1)) {\r\n return true;\r\n }\r\n\r\n throw Error\r\n (bignumberError + 'Invalid BigNumber: ' + v);\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the maximum of the arguments.\r\n *\r\n * arguments {number|string|BigNumber}\r\n */\r\n BigNumber.maximum = BigNumber.max = function () {\r\n return maxOrMin(arguments, -1);\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the minimum of the arguments.\r\n *\r\n * arguments {number|string|BigNumber}\r\n */\r\n BigNumber.minimum = BigNumber.min = function () {\r\n return maxOrMin(arguments, 1);\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber with a random value equal to or greater than 0 and less than 1,\r\n * and with dp, or DECIMAL_PLACES if dp is omitted, decimal places (or less if trailing\r\n * zeros are produced).\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp}'\r\n * '[BigNumber Error] crypto unavailable'\r\n */\r\n BigNumber.random = (function () {\r\n var pow2_53 = 0x20000000000000;\r\n\r\n // Return a 53 bit integer n, where 0 <= n < 9007199254740992.\r\n // Check if Math.random() produces more than 32 bits of randomness.\r\n // If it does, assume at least 53 bits are produced, otherwise assume at least 30 bits.\r\n // 0x40000000 is 2^30, 0x800000 is 2^23, 0x1fffff is 2^21 - 1.\r\n var random53bitInt = (Math.random() * pow2_53) & 0x1fffff\r\n ? function () { return mathfloor(Math.random() * pow2_53); }\r\n : function () { return ((Math.random() * 0x40000000 | 0) * 0x800000) +\r\n (Math.random() * 0x800000 | 0); };\r\n\r\n return function (dp) {\r\n var a, b, e, k, v,\r\n i = 0,\r\n c = [],\r\n rand = new BigNumber(ONE);\r\n\r\n if (dp == null) dp = DECIMAL_PLACES;\r\n else intCheck(dp, 0, MAX);\r\n\r\n k = mathceil(dp / LOG_BASE);\r\n\r\n if (CRYPTO) {\r\n\r\n // Browsers supporting crypto.getRandomValues.\r\n if (crypto.getRandomValues) {\r\n\r\n a = crypto.getRandomValues(new Uint32Array(k *= 2));\r\n\r\n for (; i < k;) {\r\n\r\n // 53 bits:\r\n // ((Math.pow(2, 32) - 1) * Math.pow(2, 21)).toString(2)\r\n // 11111 11111111 11111111 11111111 11100000 00000000 00000000\r\n // ((Math.pow(2, 32) - 1) >>> 11).toString(2)\r\n // 11111 11111111 11111111\r\n // 0x20000 is 2^21.\r\n v = a[i] * 0x20000 + (a[i + 1] >>> 11);\r\n\r\n // Rejection sampling:\r\n // 0 <= v < 9007199254740992\r\n // Probability that v >= 9e15, is\r\n // 7199254740992 / 9007199254740992 ~= 0.0008, i.e. 1 in 1251\r\n if (v >= 9e15) {\r\n b = crypto.getRandomValues(new Uint32Array(2));\r\n a[i] = b[0];\r\n a[i + 1] = b[1];\r\n } else {\r\n\r\n // 0 <= v <= 8999999999999999\r\n // 0 <= (v % 1e14) <= 99999999999999\r\n c.push(v % 1e14);\r\n i += 2;\r\n }\r\n }\r\n i = k / 2;\r\n\r\n // Node.js supporting crypto.randomBytes.\r\n } else if (crypto.randomBytes) {\r\n\r\n // buffer\r\n a = crypto.randomBytes(k *= 7);\r\n\r\n for (; i < k;) {\r\n\r\n // 0x1000000000000 is 2^48, 0x10000000000 is 2^40\r\n // 0x100000000 is 2^32, 0x1000000 is 2^24\r\n // 11111 11111111 11111111 11111111 11111111 11111111 11111111\r\n // 0 <= v < 9007199254740992\r\n v = ((a[i] & 31) * 0x1000000000000) + (a[i + 1] * 0x10000000000) +\r\n (a[i + 2] * 0x100000000) + (a[i + 3] * 0x1000000) +\r\n (a[i + 4] << 16) + (a[i + 5] << 8) + a[i + 6];\r\n\r\n if (v >= 9e15) {\r\n crypto.randomBytes(7).copy(a, i);\r\n } else {\r\n\r\n // 0 <= (v % 1e14) <= 99999999999999\r\n c.push(v % 1e14);\r\n i += 7;\r\n }\r\n }\r\n i = k / 7;\r\n } else {\r\n CRYPTO = false;\r\n throw Error\r\n (bignumberError + 'crypto unavailable');\r\n }\r\n }\r\n\r\n // Use Math.random.\r\n if (!CRYPTO) {\r\n\r\n for (; i < k;) {\r\n v = random53bitInt();\r\n if (v < 9e15) c[i++] = v % 1e14;\r\n }\r\n }\r\n\r\n k = c[--i];\r\n dp %= LOG_BASE;\r\n\r\n // Convert trailing digits to zeros according to dp.\r\n if (k && dp) {\r\n v = POWS_TEN[LOG_BASE - dp];\r\n c[i] = mathfloor(k / v) * v;\r\n }\r\n\r\n // Remove trailing elements which are zero.\r\n for (; c[i] === 0; c.pop(), i--);\r\n\r\n // Zero?\r\n if (i < 0) {\r\n c = [e = 0];\r\n } else {\r\n\r\n // Remove leading elements which are zero and adjust exponent accordingly.\r\n for (e = -1 ; c[0] === 0; c.splice(0, 1), e -= LOG_BASE);\r\n\r\n // Count the digits of the first element of c to determine leading zeros, and...\r\n for (i = 1, v = c[0]; v >= 10; v /= 10, i++);\r\n\r\n // adjust the exponent accordingly.\r\n if (i < LOG_BASE) e -= LOG_BASE - i;\r\n }\r\n\r\n rand.e = e;\r\n rand.c = c;\r\n return rand;\r\n };\r\n })();\r\n\r\n\r\n /*\r\n * Return a BigNumber whose value is the sum of the arguments.\r\n *\r\n * arguments {number|string|BigNumber}\r\n */\r\n BigNumber.sum = function () {\r\n var i = 1,\r\n args = arguments,\r\n sum = new BigNumber(args[0]);\r\n for (; i < args.length;) sum = sum.plus(args[i++]);\r\n return sum;\r\n };\r\n\r\n\r\n // PRIVATE FUNCTIONS\r\n\r\n\r\n // Called by BigNumber and BigNumber.prototype.toString.\r\n convertBase = (function () {\r\n var decimal = '0123456789';\r\n\r\n /*\r\n * Convert string of baseIn to an array of numbers of baseOut.\r\n * Eg. toBaseOut('255', 10, 16) returns [15, 15].\r\n * Eg. toBaseOut('ff', 16, 10) returns [2, 5, 5].\r\n */\r\n function toBaseOut(str, baseIn, baseOut, alphabet) {\r\n var j,\r\n arr = [0],\r\n arrL,\r\n i = 0,\r\n len = str.length;\r\n\r\n for (; i < len;) {\r\n for (arrL = arr.length; arrL--; arr[arrL] *= baseIn);\r\n\r\n arr[0] += alphabet.indexOf(str.charAt(i++));\r\n\r\n for (j = 0; j < arr.length; j++) {\r\n\r\n if (arr[j] > baseOut - 1) {\r\n if (arr[j + 1] == null) arr[j + 1] = 0;\r\n arr[j + 1] += arr[j] / baseOut | 0;\r\n arr[j] %= baseOut;\r\n }\r\n }\r\n }\r\n\r\n return arr.reverse();\r\n }\r\n\r\n // Convert a numeric string of baseIn to a numeric string of baseOut.\r\n // If the caller is toString, we are converting from base 10 to baseOut.\r\n // If the caller is BigNumber, we are converting from baseIn to base 10.\r\n return function (str, baseIn, baseOut, sign, callerIsToString) {\r\n var alphabet, d, e, k, r, x, xc, y,\r\n i = str.indexOf('.'),\r\n dp = DECIMAL_PLACES,\r\n rm = ROUNDING_MODE;\r\n\r\n // Non-integer.\r\n if (i >= 0) {\r\n k = POW_PRECISION;\r\n\r\n // Unlimited precision.\r\n POW_PRECISION = 0;\r\n str = str.replace('.', '');\r\n y = new BigNumber(baseIn);\r\n x = y.pow(str.length - i);\r\n POW_PRECISION = k;\r\n\r\n // Convert str as if an integer, then restore the fraction part by dividing the\r\n // result by its base raised to a power.\r\n\r\n y.c = toBaseOut(toFixedPoint(coeffToString(x.c), x.e, '0'),\r\n 10, baseOut, decimal);\r\n y.e = y.c.length;\r\n }\r\n\r\n // Convert the number as integer.\r\n\r\n xc = toBaseOut(str, baseIn, baseOut, callerIsToString\r\n ? (alphabet = ALPHABET, decimal)\r\n : (alphabet = decimal, ALPHABET));\r\n\r\n // xc now represents str as an integer and converted to baseOut. e is the exponent.\r\n e = k = xc.length;\r\n\r\n // Remove trailing zeros.\r\n for (; xc[--k] == 0; xc.pop());\r\n\r\n // Zero?\r\n if (!xc[0]) return alphabet.charAt(0);\r\n\r\n // Does str represent an integer? If so, no need for the division.\r\n if (i < 0) {\r\n --e;\r\n } else {\r\n x.c = xc;\r\n x.e = e;\r\n\r\n // The sign is needed for correct rounding.\r\n x.s = sign;\r\n x = div(x, y, dp, rm, baseOut);\r\n xc = x.c;\r\n r = x.r;\r\n e = x.e;\r\n }\r\n\r\n // xc now represents str converted to baseOut.\r\n\r\n // The index of the rounding digit.\r\n d = e + dp + 1;\r\n\r\n // The rounding digit: the digit to the right of the digit that may be rounded up.\r\n i = xc[d];\r\n\r\n // Look at the rounding digits and mode to determine whether to round up.\r\n\r\n k = baseOut / 2;\r\n r = r || d < 0 || xc[d + 1] != null;\r\n\r\n r = rm < 4 ? (i != null || r) && (rm == 0 || rm == (x.s < 0 ? 3 : 2))\r\n : i > k || i == k &&(rm == 4 || r || rm == 6 && xc[d - 1] & 1 ||\r\n rm == (x.s < 0 ? 8 : 7));\r\n\r\n // If the index of the rounding digit is not greater than zero, or xc represents\r\n // zero, then the result of the base conversion is zero or, if rounding up, a value\r\n // such as 0.00001.\r\n if (d < 1 || !xc[0]) {\r\n\r\n // 1^-dp or 0\r\n str = r ? toFixedPoint(alphabet.charAt(1), -dp, alphabet.charAt(0)) : alphabet.charAt(0);\r\n } else {\r\n\r\n // Truncate xc to the required number of decimal places.\r\n xc.length = d;\r\n\r\n // Round up?\r\n if (r) {\r\n\r\n // Rounding up may mean the previous digit has to be rounded up and so on.\r\n for (--baseOut; ++xc[--d] > baseOut;) {\r\n xc[d] = 0;\r\n\r\n if (!d) {\r\n ++e;\r\n xc = [1].concat(xc);\r\n }\r\n }\r\n }\r\n\r\n // Determine trailing zeros.\r\n for (k = xc.length; !xc[--k];);\r\n\r\n // E.g. [4, 11, 15] becomes 4bf.\r\n for (i = 0, str = ''; i <= k; str += alphabet.charAt(xc[i++]));\r\n\r\n // Add leading zeros, decimal point and trailing zeros as required.\r\n str = toFixedPoint(str, e, alphabet.charAt(0));\r\n }\r\n\r\n // The caller will add the sign.\r\n return str;\r\n };\r\n })();\r\n\r\n\r\n // Perform division in the specified base. Called by div and convertBase.\r\n div = (function () {\r\n\r\n // Assume non-zero x and k.\r\n function multiply(x, k, base) {\r\n var m, temp, xlo, xhi,\r\n carry = 0,\r\n i = x.length,\r\n klo = k % SQRT_BASE,\r\n khi = k / SQRT_BASE | 0;\r\n\r\n for (x = x.slice(); i--;) {\r\n xlo = x[i] % SQRT_BASE;\r\n xhi = x[i] / SQRT_BASE | 0;\r\n m = khi * xlo + xhi * klo;\r\n temp = klo * xlo + ((m % SQRT_BASE) * SQRT_BASE) + carry;\r\n carry = (temp / base | 0) + (m / SQRT_BASE | 0) + khi * xhi;\r\n x[i] = temp % base;\r\n }\r\n\r\n if (carry) x = [carry].concat(x);\r\n\r\n return x;\r\n }\r\n\r\n function compare(a, b, aL, bL) {\r\n var i, cmp;\r\n\r\n if (aL != bL) {\r\n cmp = aL > bL ? 1 : -1;\r\n } else {\r\n\r\n for (i = cmp = 0; i < aL; i++) {\r\n\r\n if (a[i] != b[i]) {\r\n cmp = a[i] > b[i] ? 1 : -1;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return cmp;\r\n }\r\n\r\n function subtract(a, b, aL, base) {\r\n var i = 0;\r\n\r\n // Subtract b from a.\r\n for (; aL--;) {\r\n a[aL] -= i;\r\n i = a[aL] < b[aL] ? 1 : 0;\r\n a[aL] = i * base + a[aL] - b[aL];\r\n }\r\n\r\n // Remove leading zeros.\r\n for (; !a[0] && a.length > 1; a.splice(0, 1));\r\n }\r\n\r\n // x: dividend, y: divisor.\r\n return function (x, y, dp, rm, base) {\r\n var cmp, e, i, more, n, prod, prodL, q, qc, rem, remL, rem0, xi, xL, yc0,\r\n yL, yz,\r\n s = x.s == y.s ? 1 : -1,\r\n xc = x.c,\r\n yc = y.c;\r\n\r\n // Either NaN, Infinity or 0?\r\n if (!xc || !xc[0] || !yc || !yc[0]) {\r\n\r\n return new BigNumber(\r\n\r\n // Return NaN if either NaN, or both Infinity or 0.\r\n !x.s || !y.s || (xc ? yc && xc[0] == yc[0] : !yc) ? NaN :\r\n\r\n // Return ±0 if x is ±0 or y is ±Infinity, or return ±Infinity as y is ±0.\r\n xc && xc[0] == 0 || !yc ? s * 0 : s / 0\r\n );\r\n }\r\n\r\n q = new BigNumber(s);\r\n qc = q.c = [];\r\n e = x.e - y.e;\r\n s = dp + e + 1;\r\n\r\n if (!base) {\r\n base = BASE;\r\n e = bitFloor(x.e / LOG_BASE) - bitFloor(y.e / LOG_BASE);\r\n s = s / LOG_BASE | 0;\r\n }\r\n\r\n // Result exponent may be one less then the current value of e.\r\n // The coefficients of the BigNumbers from convertBase may have trailing zeros.\r\n for (i = 0; yc[i] == (xc[i] || 0); i++);\r\n\r\n if (yc[i] > (xc[i] || 0)) e--;\r\n\r\n if (s < 0) {\r\n qc.push(1);\r\n more = true;\r\n } else {\r\n xL = xc.length;\r\n yL = yc.length;\r\n i = 0;\r\n s += 2;\r\n\r\n // Normalise xc and yc so highest order digit of yc is >= base / 2.\r\n\r\n n = mathfloor(base / (yc[0] + 1));\r\n\r\n // Not necessary, but to handle odd bases where yc[0] == (base / 2) - 1.\r\n // if (n > 1 || n++ == 1 && yc[0] < base / 2) {\r\n if (n > 1) {\r\n yc = multiply(yc, n, base);\r\n xc = multiply(xc, n, base);\r\n yL = yc.length;\r\n xL = xc.length;\r\n }\r\n\r\n xi = yL;\r\n rem = xc.slice(0, yL);\r\n remL = rem.length;\r\n\r\n // Add zeros to make remainder as long as divisor.\r\n for (; remL < yL; rem[remL++] = 0);\r\n yz = yc.slice();\r\n yz = [0].concat(yz);\r\n yc0 = yc[0];\r\n if (yc[1] >= base / 2) yc0++;\r\n // Not necessary, but to prevent trial digit n > base, when using base 3.\r\n // else if (base == 3 && yc0 == 1) yc0 = 1 + 1e-15;\r\n\r\n do {\r\n n = 0;\r\n\r\n // Compare divisor and remainder.\r\n cmp = compare(yc, rem, yL, remL);\r\n\r\n // If divisor < remainder.\r\n if (cmp < 0) {\r\n\r\n // Calculate trial digit, n.\r\n\r\n rem0 = rem[0];\r\n if (yL != remL) rem0 = rem0 * base + (rem[1] || 0);\r\n\r\n // n is how many times the divisor goes into the current remainder.\r\n n = mathfloor(rem0 / yc0);\r\n\r\n // Algorithm:\r\n // product = divisor multiplied by trial digit (n).\r\n // Compare product and remainder.\r\n // If product is greater than remainder:\r\n // Subtract divisor from product, decrement trial digit.\r\n // Subtract product from remainder.\r\n // If product was less than remainder at the last compare:\r\n // Compare new remainder and divisor.\r\n // If remainder is greater than divisor:\r\n // Subtract divisor from remainder, increment trial digit.\r\n\r\n if (n > 1) {\r\n\r\n // n may be > base only when base is 3.\r\n if (n >= base) n = base - 1;\r\n\r\n // product = divisor * trial digit.\r\n prod = multiply(yc, n, base);\r\n prodL = prod.length;\r\n remL = rem.length;\r\n\r\n // Compare product and remainder.\r\n // If product > remainder then trial digit n too high.\r\n // n is 1 too high about 5% of the time, and is not known to have\r\n // ever been more than 1 too high.\r\n while (compare(prod, rem, prodL, remL) == 1) {\r\n n--;\r\n\r\n // Subtract divisor from product.\r\n subtract(prod, yL < prodL ? yz : yc, prodL, base);\r\n prodL = prod.length;\r\n cmp = 1;\r\n }\r\n } else {\r\n\r\n // n is 0 or 1, cmp is -1.\r\n // If n is 0, there is no need to compare yc and rem again below,\r\n // so change cmp to 1 to avoid it.\r\n // If n is 1, leave cmp as -1, so yc and rem are compared again.\r\n if (n == 0) {\r\n\r\n // divisor < remainder, so n must be at least 1.\r\n cmp = n = 1;\r\n }\r\n\r\n // product = divisor\r\n prod = yc.slice();\r\n prodL = prod.length;\r\n }\r\n\r\n if (prodL < remL) prod = [0].concat(prod);\r\n\r\n // Subtract product from remainder.\r\n subtract(rem, prod, remL, base);\r\n remL = rem.length;\r\n\r\n // If product was < remainder.\r\n if (cmp == -1) {\r\n\r\n // Compare divisor and new remainder.\r\n // If divisor < new remainder, subtract divisor from remainder.\r\n // Trial digit n too low.\r\n // n is 1 too low about 5% of the time, and very rarely 2 too low.\r\n while (compare(yc, rem, yL, remL) < 1) {\r\n n++;\r\n\r\n // Subtract divisor from remainder.\r\n subtract(rem, yL < remL ? yz : yc, remL, base);\r\n remL = rem.length;\r\n }\r\n }\r\n } else if (cmp === 0) {\r\n n++;\r\n rem = [0];\r\n } // else cmp === 1 and n will be 0\r\n\r\n // Add the next digit, n, to the result array.\r\n qc[i++] = n;\r\n\r\n // Update the remainder.\r\n if (rem[0]) {\r\n rem[remL++] = xc[xi] || 0;\r\n } else {\r\n rem = [xc[xi]];\r\n remL = 1;\r\n }\r\n } while ((xi++ < xL || rem[0] != null) && s--);\r\n\r\n more = rem[0] != null;\r\n\r\n // Leading zero?\r\n if (!qc[0]) qc.splice(0, 1);\r\n }\r\n\r\n if (base == BASE) {\r\n\r\n // To calculate q.e, first get the number of digits of qc[0].\r\n for (i = 1, s = qc[0]; s >= 10; s /= 10, i++);\r\n\r\n round(q, dp + (q.e = i + e * LOG_BASE - 1) + 1, rm, more);\r\n\r\n // Caller is convertBase.\r\n } else {\r\n q.e = e;\r\n q.r = +more;\r\n }\r\n\r\n return q;\r\n };\r\n })();\r\n\r\n\r\n /*\r\n * Return a string representing the value of BigNumber n in fixed-point or exponential\r\n * notation rounded to the specified decimal places or significant digits.\r\n *\r\n * n: a BigNumber.\r\n * i: the index of the last digit required (i.e. the digit that may be rounded up).\r\n * rm: the rounding mode.\r\n * id: 1 (toExponential) or 2 (toPrecision).\r\n */\r\n function format(n, i, rm, id) {\r\n var c0, e, ne, len, str;\r\n\r\n if (rm == null) rm = ROUNDING_MODE;\r\n else intCheck(rm, 0, 8);\r\n\r\n if (!n.c) return n.toString();\r\n\r\n c0 = n.c[0];\r\n ne = n.e;\r\n\r\n if (i == null) {\r\n str = coeffToString(n.c);\r\n str = id == 1 || id == 2 && (ne <= TO_EXP_NEG || ne >= TO_EXP_POS)\r\n ? toExponential(str, ne)\r\n : toFixedPoint(str, ne, '0');\r\n } else {\r\n n = round(new BigNumber(n), i, rm);\r\n\r\n // n.e may have changed if the value was rounded up.\r\n e = n.e;\r\n\r\n str = coeffToString(n.c);\r\n len = str.length;\r\n\r\n // toPrecision returns exponential notation if the number of significant digits\r\n // specified is less than the number of digits necessary to represent the integer\r\n // part of the value in fixed-point notation.\r\n\r\n // Exponential notation.\r\n if (id == 1 || id == 2 && (i <= e || e <= TO_EXP_NEG)) {\r\n\r\n // Append zeros?\r\n for (; len < i; str += '0', len++);\r\n str = toExponential(str, e);\r\n\r\n // Fixed-point notation.\r\n } else {\r\n i -= ne + (id === 2 && e > ne);\r\n str = toFixedPoint(str, e, '0');\r\n\r\n // Append zeros?\r\n if (e + 1 > len) {\r\n if (--i > 0) for (str += '.'; i--; str += '0');\r\n } else {\r\n i += e - len;\r\n if (i > 0) {\r\n if (e + 1 == len) str += '.';\r\n for (; i--; str += '0');\r\n }\r\n }\r\n }\r\n }\r\n\r\n return n.s < 0 && c0 ? '-' + str : str;\r\n }\r\n\r\n\r\n // Handle BigNumber.max and BigNumber.min.\r\n // If any number is NaN, return NaN.\r\n function maxOrMin(args, n) {\r\n var k, y,\r\n i = 1,\r\n x = new BigNumber(args[0]);\r\n\r\n for (; i < args.length; i++) {\r\n y = new BigNumber(args[i]);\r\n if (!y.s || (k = compare(x, y)) === n || k === 0 && x.s === n) {\r\n x = y;\r\n }\r\n }\r\n\r\n return x;\r\n }\r\n\r\n\r\n /*\r\n * Strip trailing zeros, calculate base 10 exponent and check against MIN_EXP and MAX_EXP.\r\n * Called by minus, plus and times.\r\n */\r\n function normalise(n, c, e) {\r\n var i = 1,\r\n j = c.length;\r\n\r\n // Remove trailing zeros.\r\n for (; !c[--j]; c.pop());\r\n\r\n // Calculate the base 10 exponent. First get the number of digits of c[0].\r\n for (j = c[0]; j >= 10; j /= 10, i++);\r\n\r\n // Overflow?\r\n if ((e = i + e * LOG_BASE - 1) > MAX_EXP) {\r\n\r\n // Infinity.\r\n n.c = n.e = null;\r\n\r\n // Underflow?\r\n } else if (e < MIN_EXP) {\r\n\r\n // Zero.\r\n n.c = [n.e = 0];\r\n } else {\r\n n.e = e;\r\n n.c = c;\r\n }\r\n\r\n return n;\r\n }\r\n\r\n\r\n // Handle values that fail the validity test in BigNumber.\r\n parseNumeric = (function () {\r\n var basePrefix = /^(-?)0([xbo])(?=\\w[\\w.]*$)/i,\r\n dotAfter = /^([^.]+)\\.$/,\r\n dotBefore = /^\\.([^.]+)$/,\r\n isInfinityOrNaN = /^-?(Infinity|NaN)$/,\r\n whitespaceOrPlus = /^\\s*\\+(?=[\\w.])|^\\s+|\\s+$/g;\r\n\r\n return function (x, str, isNum, b) {\r\n var base,\r\n s = isNum ? str : str.replace(whitespaceOrPlus, '');\r\n\r\n // No exception on ±Infinity or NaN.\r\n if (isInfinityOrNaN.test(s)) {\r\n x.s = isNaN(s) ? null : s < 0 ? -1 : 1;\r\n } else {\r\n if (!isNum) {\r\n\r\n // basePrefix = /^(-?)0([xbo])(?=\\w[\\w.]*$)/i\r\n s = s.replace(basePrefix, function (m, p1, p2) {\r\n base = (p2 = p2.toLowerCase()) == 'x' ? 16 : p2 == 'b' ? 2 : 8;\r\n return !b || b == base ? p1 : m;\r\n });\r\n\r\n if (b) {\r\n base = b;\r\n\r\n // E.g. '1.' to '1', '.1' to '0.1'\r\n s = s.replace(dotAfter, '$1').replace(dotBefore, '0.$1');\r\n }\r\n\r\n if (str != s) return new BigNumber(s, base);\r\n }\r\n\r\n // '[BigNumber Error] Not a number: {n}'\r\n // '[BigNumber Error] Not a base {b} number: {n}'\r\n if (BigNumber.DEBUG) {\r\n throw Error\r\n (bignumberError + 'Not a' + (b ? ' base ' + b : '') + ' number: ' + str);\r\n }\r\n\r\n // NaN\r\n x.s = null;\r\n }\r\n\r\n x.c = x.e = null;\r\n }\r\n })();\r\n\r\n\r\n /*\r\n * Round x to sd significant digits using rounding mode rm. Check for over/under-flow.\r\n * If r is truthy, it is known that there are more digits after the rounding digit.\r\n */\r\n function round(x, sd, rm, r) {\r\n var d, i, j, k, n, ni, rd,\r\n xc = x.c,\r\n pows10 = POWS_TEN;\r\n\r\n // if x is not Infinity or NaN...\r\n if (xc) {\r\n\r\n // rd is the rounding digit, i.e. the digit after the digit that may be rounded up.\r\n // n is a base 1e14 number, the value of the element of array x.c containing rd.\r\n // ni is the index of n within x.c.\r\n // d is the number of digits of n.\r\n // i is the index of rd within n including leading zeros.\r\n // j is the actual index of rd within n (if < 0, rd is a leading zero).\r\n out: {\r\n\r\n // Get the number of digits of the first element of xc.\r\n for (d = 1, k = xc[0]; k >= 10; k /= 10, d++);\r\n i = sd - d;\r\n\r\n // If the rounding digit is in the first element of xc...\r\n if (i < 0) {\r\n i += LOG_BASE;\r\n j = sd;\r\n n = xc[ni = 0];\r\n\r\n // Get the rounding digit at index j of n.\r\n rd = mathfloor(n / pows10[d - j - 1] % 10);\r\n } else {\r\n ni = mathceil((i + 1) / LOG_BASE);\r\n\r\n if (ni >= xc.length) {\r\n\r\n if (r) {\r\n\r\n // Needed by sqrt.\r\n for (; xc.length <= ni; xc.push(0));\r\n n = rd = 0;\r\n d = 1;\r\n i %= LOG_BASE;\r\n j = i - LOG_BASE + 1;\r\n } else {\r\n break out;\r\n }\r\n } else {\r\n n = k = xc[ni];\r\n\r\n // Get the number of digits of n.\r\n for (d = 1; k >= 10; k /= 10, d++);\r\n\r\n // Get the index of rd within n.\r\n i %= LOG_BASE;\r\n\r\n // Get the index of rd within n, adjusted for leading zeros.\r\n // The number of leading zeros of n is given by LOG_BASE - d.\r\n j = i - LOG_BASE + d;\r\n\r\n // Get the rounding digit at index j of n.\r\n rd = j < 0 ? 0 : mathfloor(n / pows10[d - j - 1] % 10);\r\n }\r\n }\r\n\r\n r = r || sd < 0 ||\r\n\r\n // Are there any non-zero digits after the rounding digit?\r\n // The expression n % pows10[d - j - 1] returns all digits of n to the right\r\n // of the digit at j, e.g. if n is 908714 and j is 2, the expression gives 714.\r\n xc[ni + 1] != null || (j < 0 ? n : n % pows10[d - j - 1]);\r\n\r\n r = rm < 4\r\n ? (rd || r) && (rm == 0 || rm == (x.s < 0 ? 3 : 2))\r\n : rd > 5 || rd == 5 && (rm == 4 || r || rm == 6 &&\r\n\r\n // Check whether the digit to the left of the rounding digit is odd.\r\n ((i > 0 ? j > 0 ? n / pows10[d - j] : 0 : xc[ni - 1]) % 10) & 1 ||\r\n rm == (x.s < 0 ? 8 : 7));\r\n\r\n if (sd < 1 || !xc[0]) {\r\n xc.length = 0;\r\n\r\n if (r) {\r\n\r\n // Convert sd to decimal places.\r\n sd -= x.e + 1;\r\n\r\n // 1, 0.1, 0.01, 0.001, 0.0001 etc.\r\n xc[0] = pows10[(LOG_BASE - sd % LOG_BASE) % LOG_BASE];\r\n x.e = -sd || 0;\r\n } else {\r\n\r\n // Zero.\r\n xc[0] = x.e = 0;\r\n }\r\n\r\n return x;\r\n }\r\n\r\n // Remove excess digits.\r\n if (i == 0) {\r\n xc.length = ni;\r\n k = 1;\r\n ni--;\r\n } else {\r\n xc.length = ni + 1;\r\n k = pows10[LOG_BASE - i];\r\n\r\n // E.g. 56700 becomes 56000 if 7 is the rounding digit.\r\n // j > 0 means i > number of leading zeros of n.\r\n xc[ni] = j > 0 ? mathfloor(n / pows10[d - j] % pows10[j]) * k : 0;\r\n }\r\n\r\n // Round up?\r\n if (r) {\r\n\r\n for (; ;) {\r\n\r\n // If the digit to be rounded up is in the first element of xc...\r\n if (ni == 0) {\r\n\r\n // i will be the length of xc[0] before k is added.\r\n for (i = 1, j = xc[0]; j >= 10; j /= 10, i++);\r\n j = xc[0] += k;\r\n for (k = 1; j >= 10; j /= 10, k++);\r\n\r\n // if i != k the length has increased.\r\n if (i != k) {\r\n x.e++;\r\n if (xc[0] == BASE) xc[0] = 1;\r\n }\r\n\r\n break;\r\n } else {\r\n xc[ni] += k;\r\n if (xc[ni] != BASE) break;\r\n xc[ni--] = 0;\r\n k = 1;\r\n }\r\n }\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (i = xc.length; xc[--i] === 0; xc.pop());\r\n }\r\n\r\n // Overflow? Infinity.\r\n if (x.e > MAX_EXP) {\r\n x.c = x.e = null;\r\n\r\n // Underflow? Zero.\r\n } else if (x.e < MIN_EXP) {\r\n x.c = [x.e = 0];\r\n }\r\n }\r\n\r\n return x;\r\n }\r\n\r\n\r\n function valueOf(n) {\r\n var str,\r\n e = n.e;\r\n\r\n if (e === null) return n.toString();\r\n\r\n str = coeffToString(n.c);\r\n\r\n str = e <= TO_EXP_NEG || e >= TO_EXP_POS\r\n ? toExponential(str, e)\r\n : toFixedPoint(str, e, '0');\r\n\r\n return n.s < 0 ? '-' + str : str;\r\n }\r\n\r\n\r\n // PROTOTYPE/INSTANCE METHODS\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the absolute value of this BigNumber.\r\n */\r\n P.absoluteValue = P.abs = function () {\r\n var x = new BigNumber(this);\r\n if (x.s < 0) x.s = 1;\r\n return x;\r\n };\r\n\r\n\r\n /*\r\n * Return\r\n * 1 if the value of this BigNumber is greater than the value of BigNumber(y, b),\r\n * -1 if the value of this BigNumber is less than the value of BigNumber(y, b),\r\n * 0 if they have the same value,\r\n * or null if the value of either is NaN.\r\n */\r\n P.comparedTo = function (y, b) {\r\n return compare(this, new BigNumber(y, b));\r\n };\r\n\r\n\r\n /*\r\n * If dp is undefined or null or true or false, return the number of decimal places of the\r\n * value of this BigNumber, or null if the value of this BigNumber is ±Infinity or NaN.\r\n *\r\n * Otherwise, if dp is a number, return a new BigNumber whose value is the value of this\r\n * BigNumber rounded to a maximum of dp decimal places using rounding mode rm, or\r\n * ROUNDING_MODE if rm is omitted.\r\n *\r\n * [dp] {number} Decimal places: integer, 0 to MAX inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'\r\n */\r\n P.decimalPlaces = P.dp = function (dp, rm) {\r\n var c, n, v,\r\n x = this;\r\n\r\n if (dp != null) {\r\n intCheck(dp, 0, MAX);\r\n if (rm == null) rm = ROUNDING_MODE;\r\n else intCheck(rm, 0, 8);\r\n\r\n return round(new BigNumber(x), dp + x.e + 1, rm);\r\n }\r\n\r\n if (!(c = x.c)) return null;\r\n n = ((v = c.length - 1) - bitFloor(this.e / LOG_BASE)) * LOG_BASE;\r\n\r\n // Subtract the number of trailing zeros of the last number.\r\n if (v = c[v]) for (; v % 10 == 0; v /= 10, n--);\r\n if (n < 0) n = 0;\r\n\r\n return n;\r\n };\r\n\r\n\r\n /*\r\n * n / 0 = I\r\n * n / N = N\r\n * n / I = 0\r\n * 0 / n = 0\r\n * 0 / 0 = N\r\n * 0 / N = N\r\n * 0 / I = 0\r\n * N / n = N\r\n * N / 0 = N\r\n * N / N = N\r\n * N / I = N\r\n * I / n = I\r\n * I / 0 = I\r\n * I / N = N\r\n * I / I = N\r\n *\r\n * Return a new BigNumber whose value is the value of this BigNumber divided by the value of\r\n * BigNumber(y, b), rounded according to DECIMAL_PLACES and ROUNDING_MODE.\r\n */\r\n P.dividedBy = P.div = function (y, b) {\r\n return div(this, new BigNumber(y, b), DECIMAL_PLACES, ROUNDING_MODE);\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the integer part of dividing the value of this\r\n * BigNumber by the value of BigNumber(y, b).\r\n */\r\n P.dividedToIntegerBy = P.idiv = function (y, b) {\r\n return div(this, new BigNumber(y, b), 0, 1);\r\n };\r\n\r\n\r\n /*\r\n * Return a BigNumber whose value is the value of this BigNumber exponentiated by n.\r\n *\r\n * If m is present, return the result modulo m.\r\n * If n is negative round according to DECIMAL_PLACES and ROUNDING_MODE.\r\n * If POW_PRECISION is non-zero and m is not present, round to POW_PRECISION using ROUNDING_MODE.\r\n *\r\n * The modular power operation works efficiently when x, n, and m are integers, otherwise it\r\n * is equivalent to calculating x.exponentiatedBy(n).modulo(m) with a POW_PRECISION of 0.\r\n *\r\n * n {number|string|BigNumber} The exponent. An integer.\r\n * [m] {number|string|BigNumber} The modulus.\r\n *\r\n * '[BigNumber Error] Exponent not an integer: {n}'\r\n */\r\n P.exponentiatedBy = P.pow = function (n, m) {\r\n var half, isModExp, i, k, more, nIsBig, nIsNeg, nIsOdd, y,\r\n x = this;\r\n\r\n n = new BigNumber(n);\r\n\r\n // Allow NaN and ±Infinity, but not other non-integers.\r\n if (n.c && !n.isInteger()) {\r\n throw Error\r\n (bignumberError + 'Exponent not an integer: ' + valueOf(n));\r\n }\r\n\r\n if (m != null) m = new BigNumber(m);\r\n\r\n // Exponent of MAX_SAFE_INTEGER is 15.\r\n nIsBig = n.e > 14;\r\n\r\n // If x is NaN, ±Infinity, ±0 or ±1, or n is ±Infinity, NaN or ±0.\r\n if (!x.c || !x.c[0] || x.c[0] == 1 && !x.e && x.c.length == 1 || !n.c || !n.c[0]) {\r\n\r\n // The sign of the result of pow when x is negative depends on the evenness of n.\r\n // If +n overflows to ±Infinity, the evenness of n would be not be known.\r\n y = new BigNumber(Math.pow(+valueOf(x), nIsBig ? n.s * (2 - isOdd(n)) : +valueOf(n)));\r\n return m ? y.mod(m) : y;\r\n }\r\n\r\n nIsNeg = n.s < 0;\r\n\r\n if (m) {\r\n\r\n // x % m returns NaN if abs(m) is zero, or m is NaN.\r\n if (m.c ? !m.c[0] : !m.s) return new BigNumber(NaN);\r\n\r\n isModExp = !nIsNeg && x.isInteger() && m.isInteger();\r\n\r\n if (isModExp) x = x.mod(m);\r\n\r\n // Overflow to ±Infinity: >=2**1e10 or >=1.0000024**1e15.\r\n // Underflow to ±0: <=0.79**1e10 or <=0.9999975**1e15.\r\n } else if (n.e > 9 && (x.e > 0 || x.e < -1 || (x.e == 0\r\n // [1, 240000000]\r\n ? x.c[0] > 1 || nIsBig && x.c[1] >= 24e7\r\n // [80000000000000] [99999750000000]\r\n : x.c[0] < 8e13 || nIsBig && x.c[0] <= 9999975e7))) {\r\n\r\n // If x is negative and n is odd, k = -0, else k = 0.\r\n k = x.s < 0 && isOdd(n) ? -0 : 0;\r\n\r\n // If x >= 1, k = ±Infinity.\r\n if (x.e > -1) k = 1 / k;\r\n\r\n // If n is negative return ±0, else return ±Infinity.\r\n return new BigNumber(nIsNeg ? 1 / k : k);\r\n\r\n } else if (POW_PRECISION) {\r\n\r\n // Truncating each coefficient array to a length of k after each multiplication\r\n // equates to truncating significant digits to POW_PRECISION + [28, 41],\r\n // i.e. there will be a minimum of 28 guard digits retained.\r\n k = mathceil(POW_PRECISION / LOG_BASE + 2);\r\n }\r\n\r\n if (nIsBig) {\r\n half = new BigNumber(0.5);\r\n if (nIsNeg) n.s = 1;\r\n nIsOdd = isOdd(n);\r\n } else {\r\n i = Math.abs(+valueOf(n));\r\n nIsOdd = i % 2;\r\n }\r\n\r\n y = new BigNumber(ONE);\r\n\r\n // Performs 54 loop iterations for n of 9007199254740991.\r\n for (; ;) {\r\n\r\n if (nIsOdd) {\r\n y = y.times(x);\r\n if (!y.c) break;\r\n\r\n if (k) {\r\n if (y.c.length > k) y.c.length = k;\r\n } else if (isModExp) {\r\n y = y.mod(m); //y = y.minus(div(y, m, 0, MODULO_MODE).times(m));\r\n }\r\n }\r\n\r\n if (i) {\r\n i = mathfloor(i / 2);\r\n if (i === 0) break;\r\n nIsOdd = i % 2;\r\n } else {\r\n n = n.times(half);\r\n round(n, n.e + 1, 1);\r\n\r\n if (n.e > 14) {\r\n nIsOdd = isOdd(n);\r\n } else {\r\n i = +valueOf(n);\r\n if (i === 0) break;\r\n nIsOdd = i % 2;\r\n }\r\n }\r\n\r\n x = x.times(x);\r\n\r\n if (k) {\r\n if (x.c && x.c.length > k) x.c.length = k;\r\n } else if (isModExp) {\r\n x = x.mod(m); //x = x.minus(div(x, m, 0, MODULO_MODE).times(m));\r\n }\r\n }\r\n\r\n if (isModExp) return y;\r\n if (nIsNeg) y = ONE.div(y);\r\n\r\n return m ? y.mod(m) : k ? round(y, POW_PRECISION, ROUNDING_MODE, more) : y;\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the value of this BigNumber rounded to an integer\r\n * using rounding mode rm, or ROUNDING_MODE if rm is omitted.\r\n *\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {rm}'\r\n */\r\n P.integerValue = function (rm) {\r\n var n = new BigNumber(this);\r\n if (rm == null) rm = ROUNDING_MODE;\r\n else intCheck(rm, 0, 8);\r\n return round(n, n.e + 1, rm);\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is equal to the value of BigNumber(y, b),\r\n * otherwise return false.\r\n */\r\n P.isEqualTo = P.eq = function (y, b) {\r\n return compare(this, new BigNumber(y, b)) === 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is a finite number, otherwise return false.\r\n */\r\n P.isFinite = function () {\r\n return !!this.c;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is greater than the value of BigNumber(y, b),\r\n * otherwise return false.\r\n */\r\n P.isGreaterThan = P.gt = function (y, b) {\r\n return compare(this, new BigNumber(y, b)) > 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is greater than or equal to the value of\r\n * BigNumber(y, b), otherwise return false.\r\n */\r\n P.isGreaterThanOrEqualTo = P.gte = function (y, b) {\r\n return (b = compare(this, new BigNumber(y, b))) === 1 || b === 0;\r\n\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is an integer, otherwise return false.\r\n */\r\n P.isInteger = function () {\r\n return !!this.c && bitFloor(this.e / LOG_BASE) > this.c.length - 2;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is less than the value of BigNumber(y, b),\r\n * otherwise return false.\r\n */\r\n P.isLessThan = P.lt = function (y, b) {\r\n return compare(this, new BigNumber(y, b)) < 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is less than or equal to the value of\r\n * BigNumber(y, b), otherwise return false.\r\n */\r\n P.isLessThanOrEqualTo = P.lte = function (y, b) {\r\n return (b = compare(this, new BigNumber(y, b))) === -1 || b === 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is NaN, otherwise return false.\r\n */\r\n P.isNaN = function () {\r\n return !this.s;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is negative, otherwise return false.\r\n */\r\n P.isNegative = function () {\r\n return this.s < 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is positive, otherwise return false.\r\n */\r\n P.isPositive = function () {\r\n return this.s > 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is 0 or -0, otherwise return false.\r\n */\r\n P.isZero = function () {\r\n return !!this.c && this.c[0] == 0;\r\n };\r\n\r\n\r\n /*\r\n * n - 0 = n\r\n * n - N = N\r\n * n - I = -I\r\n * 0 - n = -n\r\n * 0 - 0 = 0\r\n * 0 - N = N\r\n * 0 - I = -I\r\n * N - n = N\r\n * N - 0 = N\r\n * N - N = N\r\n * N - I = N\r\n * I - n = I\r\n * I - 0 = I\r\n * I - N = N\r\n * I - I = N\r\n *\r\n * Return a new BigNumber whose value is the value of this BigNumber minus the value of\r\n * BigNumber(y, b).\r\n */\r\n P.minus = function (y, b) {\r\n var i, j, t, xLTy,\r\n x = this,\r\n a = x.s;\r\n\r\n y = new BigNumber(y, b);\r\n b = y.s;\r\n\r\n // Either NaN?\r\n if (!a || !b) return new BigNumber(NaN);\r\n\r\n // Signs differ?\r\n if (a != b) {\r\n y.s = -b;\r\n return x.plus(y);\r\n }\r\n\r\n var xe = x.e / LOG_BASE,\r\n ye = y.e / LOG_BASE,\r\n xc = x.c,\r\n yc = y.c;\r\n\r\n if (!xe || !ye) {\r\n\r\n // Either Infinity?\r\n if (!xc || !yc) return xc ? (y.s = -b, y) : new BigNumber(yc ? x : NaN);\r\n\r\n // Either zero?\r\n if (!xc[0] || !yc[0]) {\r\n\r\n // Return y if y is non-zero, x if x is non-zero, or zero if both are zero.\r\n return yc[0] ? (y.s = -b, y) : new BigNumber(xc[0] ? x :\r\n\r\n // IEEE 754 (2008) 6.3: n - n = -0 when rounding to -Infinity\r\n ROUNDING_MODE == 3 ? -0 : 0);\r\n }\r\n }\r\n\r\n xe = bitFloor(xe);\r\n ye = bitFloor(ye);\r\n xc = xc.slice();\r\n\r\n // Determine which is the bigger number.\r\n if (a = xe - ye) {\r\n\r\n if (xLTy = a < 0) {\r\n a = -a;\r\n t = xc;\r\n } else {\r\n ye = xe;\r\n t = yc;\r\n }\r\n\r\n t.reverse();\r\n\r\n // Prepend zeros to equalise exponents.\r\n for (b = a; b--; t.push(0));\r\n t.reverse();\r\n } else {\r\n\r\n // Exponents equal. Check digit by digit.\r\n j = (xLTy = (a = xc.length) < (b = yc.length)) ? a : b;\r\n\r\n for (a = b = 0; b < j; b++) {\r\n\r\n if (xc[b] != yc[b]) {\r\n xLTy = xc[b] < yc[b];\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // x < y? Point xc to the array of the bigger number.\r\n if (xLTy) {\r\n t = xc;\r\n xc = yc;\r\n yc = t;\r\n y.s = -y.s;\r\n }\r\n\r\n b = (j = yc.length) - (i = xc.length);\r\n\r\n // Append zeros to xc if shorter.\r\n // No need to add zeros to yc if shorter as subtract only needs to start at yc.length.\r\n if (b > 0) for (; b--; xc[i++] = 0);\r\n b = BASE - 1;\r\n\r\n // Subtract yc from xc.\r\n for (; j > a;) {\r\n\r\n if (xc[--j] < yc[j]) {\r\n for (i = j; i && !xc[--i]; xc[i] = b);\r\n --xc[i];\r\n xc[j] += BASE;\r\n }\r\n\r\n xc[j] -= yc[j];\r\n }\r\n\r\n // Remove leading zeros and adjust exponent accordingly.\r\n for (; xc[0] == 0; xc.splice(0, 1), --ye);\r\n\r\n // Zero?\r\n if (!xc[0]) {\r\n\r\n // Following IEEE 754 (2008) 6.3,\r\n // n - n = +0 but n - n = -0 when rounding towards -Infinity.\r\n y.s = ROUNDING_MODE == 3 ? -1 : 1;\r\n y.c = [y.e = 0];\r\n return y;\r\n }\r\n\r\n // No need to check for Infinity as +x - +y != Infinity && -x - -y != Infinity\r\n // for finite x and y.\r\n return normalise(y, xc, ye);\r\n };\r\n\r\n\r\n /*\r\n * n % 0 = N\r\n * n % N = N\r\n * n % I = n\r\n * 0 % n = 0\r\n * -0 % n = -0\r\n * 0 % 0 = N\r\n * 0 % N = N\r\n * 0 % I = 0\r\n * N % n = N\r\n * N % 0 = N\r\n * N % N = N\r\n * N % I = N\r\n * I % n = N\r\n * I % 0 = N\r\n * I % N = N\r\n * I % I = N\r\n *\r\n * Return a new BigNumber whose value is the value of this BigNumber modulo the value of\r\n * BigNumber(y, b). The result depends on the value of MODULO_MODE.\r\n */\r\n P.modulo = P.mod = function (y, b) {\r\n var q, s,\r\n x = this;\r\n\r\n y = new BigNumber(y, b);\r\n\r\n // Return NaN if x is Infinity or NaN, or y is NaN or zero.\r\n if (!x.c || !y.s || y.c && !y.c[0]) {\r\n return new BigNumber(NaN);\r\n\r\n // Return x if y is Infinity or x is zero.\r\n } else if (!y.c || x.c && !x.c[0]) {\r\n return new BigNumber(x);\r\n }\r\n\r\n if (MODULO_MODE == 9) {\r\n\r\n // Euclidian division: q = sign(y) * floor(x / abs(y))\r\n // r = x - qy where 0 <= r < abs(y)\r\n s = y.s;\r\n y.s = 1;\r\n q = div(x, y, 0, 3);\r\n y.s = s;\r\n q.s *= s;\r\n } else {\r\n q = div(x, y, 0, MODULO_MODE);\r\n }\r\n\r\n y = x.minus(q.times(y));\r\n\r\n // To match JavaScript %, ensure sign of zero is sign of dividend.\r\n if (!y.c[0] && MODULO_MODE == 1) y.s = x.s;\r\n\r\n return y;\r\n };\r\n\r\n\r\n /*\r\n * n * 0 = 0\r\n * n * N = N\r\n * n * I = I\r\n * 0 * n = 0\r\n * 0 * 0 = 0\r\n * 0 * N = N\r\n * 0 * I = N\r\n * N * n = N\r\n * N * 0 = N\r\n * N * N = N\r\n * N * I = N\r\n * I * n = I\r\n * I * 0 = N\r\n * I * N = N\r\n * I * I = I\r\n *\r\n * Return a new BigNumber whose value is the value of this BigNumber multiplied by the value\r\n * of BigNumber(y, b).\r\n */\r\n P.multipliedBy = P.times = function (y, b) {\r\n var c, e, i, j, k, m, xcL, xlo, xhi, ycL, ylo, yhi, zc,\r\n base, sqrtBase,\r\n x = this,\r\n xc = x.c,\r\n yc = (y = new BigNumber(y, b)).c;\r\n\r\n // Either NaN, ±Infinity or ±0?\r\n if (!xc || !yc || !xc[0] || !yc[0]) {\r\n\r\n // Return NaN if either is NaN, or one is 0 and the other is Infinity.\r\n if (!x.s || !y.s || xc && !xc[0] && !yc || yc && !yc[0] && !xc) {\r\n y.c = y.e = y.s = null;\r\n } else {\r\n y.s *= x.s;\r\n\r\n // Return ±Infinity if either is ±Infinity.\r\n if (!xc || !yc) {\r\n y.c = y.e = null;\r\n\r\n // Return ±0 if either is ±0.\r\n } else {\r\n y.c = [0];\r\n y.e = 0;\r\n }\r\n }\r\n\r\n return y;\r\n }\r\n\r\n e = bitFloor(x.e / LOG_BASE) + bitFloor(y.e / LOG_BASE);\r\n y.s *= x.s;\r\n xcL = xc.length;\r\n ycL = yc.length;\r\n\r\n // Ensure xc points to longer array and xcL to its length.\r\n if (xcL < ycL) {\r\n zc = xc;\r\n xc = yc;\r\n yc = zc;\r\n i = xcL;\r\n xcL = ycL;\r\n ycL = i;\r\n }\r\n\r\n // Initialise the result array with zeros.\r\n for (i = xcL + ycL, zc = []; i--; zc.push(0));\r\n\r\n base = BASE;\r\n sqrtBase = SQRT_BASE;\r\n\r\n for (i = ycL; --i >= 0;) {\r\n c = 0;\r\n ylo = yc[i] % sqrtBase;\r\n yhi = yc[i] / sqrtBase | 0;\r\n\r\n for (k = xcL, j = i + k; j > i;) {\r\n xlo = xc[--k] % sqrtBase;\r\n xhi = xc[k] / sqrtBase | 0;\r\n m = yhi * xlo + xhi * ylo;\r\n xlo = ylo * xlo + ((m % sqrtBase) * sqrtBase) + zc[j] + c;\r\n c = (xlo / base | 0) + (m / sqrtBase | 0) + yhi * xhi;\r\n zc[j--] = xlo % base;\r\n }\r\n\r\n zc[j] = c;\r\n }\r\n\r\n if (c) {\r\n ++e;\r\n } else {\r\n zc.splice(0, 1);\r\n }\r\n\r\n return normalise(y, zc, e);\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the value of this BigNumber negated,\r\n * i.e. multiplied by -1.\r\n */\r\n P.negated = function () {\r\n var x = new BigNumber(this);\r\n x.s = -x.s || null;\r\n return x;\r\n };\r\n\r\n\r\n /*\r\n * n + 0 = n\r\n * n + N = N\r\n * n + I = I\r\n * 0 + n = n\r\n * 0 + 0 = 0\r\n * 0 + N = N\r\n * 0 + I = I\r\n * N + n = N\r\n * N + 0 = N\r\n * N + N = N\r\n * N + I = N\r\n * I + n = I\r\n * I + 0 = I\r\n * I + N = N\r\n * I + I = I\r\n *\r\n * Return a new BigNumber whose value is the value of this BigNumber plus the value of\r\n * BigNumber(y, b).\r\n */\r\n P.plus = function (y, b) {\r\n var t,\r\n x = this,\r\n a = x.s;\r\n\r\n y = new BigNumber(y, b);\r\n b = y.s;\r\n\r\n // Either NaN?\r\n if (!a || !b) return new BigNumber(NaN);\r\n\r\n // Signs differ?\r\n if (a != b) {\r\n y.s = -b;\r\n return x.minus(y);\r\n }\r\n\r\n var xe = x.e / LOG_BASE,\r\n ye = y.e / LOG_BASE,\r\n xc = x.c,\r\n yc = y.c;\r\n\r\n if (!xe || !ye) {\r\n\r\n // Return ±Infinity if either ±Infinity.\r\n if (!xc || !yc) return new BigNumber(a / 0);\r\n\r\n // Either zero?\r\n // Return y if y is non-zero, x if x is non-zero, or zero if both are zero.\r\n if (!xc[0] || !yc[0]) return yc[0] ? y : new BigNumber(xc[0] ? x : a * 0);\r\n }\r\n\r\n xe = bitFloor(xe);\r\n ye = bitFloor(ye);\r\n xc = xc.slice();\r\n\r\n // Prepend zeros to equalise exponents. Faster to use reverse then do unshifts.\r\n if (a = xe - ye) {\r\n if (a > 0) {\r\n ye = xe;\r\n t = yc;\r\n } else {\r\n a = -a;\r\n t = xc;\r\n }\r\n\r\n t.reverse();\r\n for (; a--; t.push(0));\r\n t.reverse();\r\n }\r\n\r\n a = xc.length;\r\n b = yc.length;\r\n\r\n // Point xc to the longer array, and b to the shorter length.\r\n if (a - b < 0) {\r\n t = yc;\r\n yc = xc;\r\n xc = t;\r\n b = a;\r\n }\r\n\r\n // Only start adding at yc.length - 1 as the further digits of xc can be ignored.\r\n for (a = 0; b;) {\r\n a = (xc[--b] = xc[b] + yc[b] + a) / BASE | 0;\r\n xc[b] = BASE === xc[b] ? 0 : xc[b] % BASE;\r\n }\r\n\r\n if (a) {\r\n xc = [a].concat(xc);\r\n ++ye;\r\n }\r\n\r\n // No need to check for zero, as +x + +y != 0 && -x + -y != 0\r\n // ye = MAX_EXP + 1 possible\r\n return normalise(y, xc, ye);\r\n };\r\n\r\n\r\n /*\r\n * If sd is undefined or null or true or false, return the number of significant digits of\r\n * the value of this BigNumber, or null if the value of this BigNumber is ±Infinity or NaN.\r\n * If sd is true include integer-part trailing zeros in the count.\r\n *\r\n * Otherwise, if sd is a number, return a new BigNumber whose value is the value of this\r\n * BigNumber rounded to a maximum of sd significant digits using rounding mode rm, or\r\n * ROUNDING_MODE if rm is omitted.\r\n *\r\n * sd {number|boolean} number: significant digits: integer, 1 to MAX inclusive.\r\n * boolean: whether to count integer-part trailing zeros: true or false.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {sd|rm}'\r\n */\r\n P.precision = P.sd = function (sd, rm) {\r\n var c, n, v,\r\n x = this;\r\n\r\n if (sd != null && sd !== !!sd) {\r\n intCheck(sd, 1, MAX);\r\n if (rm == null) rm = ROUNDING_MODE;\r\n else intCheck(rm, 0, 8);\r\n\r\n return round(new BigNumber(x), sd, rm);\r\n }\r\n\r\n if (!(c = x.c)) return null;\r\n v = c.length - 1;\r\n n = v * LOG_BASE + 1;\r\n\r\n if (v = c[v]) {\r\n\r\n // Subtract the number of trailing zeros of the last element.\r\n for (; v % 10 == 0; v /= 10, n--);\r\n\r\n // Add the number of digits of the first element.\r\n for (v = c[0]; v >= 10; v /= 10, n++);\r\n }\r\n\r\n if (sd && x.e + 1 > n) n = x.e + 1;\r\n\r\n return n;\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the value of this BigNumber shifted by k places\r\n * (powers of 10). Shift to the right if n > 0, and to the left if n < 0.\r\n *\r\n * k {number} Integer, -MAX_SAFE_INTEGER to MAX_SAFE_INTEGER inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {k}'\r\n */\r\n P.shiftedBy = function (k) {\r\n intCheck(k, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER);\r\n return this.times('1e' + k);\r\n };\r\n\r\n\r\n /*\r\n * sqrt(-n) = N\r\n * sqrt(N) = N\r\n * sqrt(-I) = N\r\n * sqrt(I) = I\r\n * sqrt(0) = 0\r\n * sqrt(-0) = -0\r\n *\r\n * Return a new BigNumber whose value is the square root of the value of this BigNumber,\r\n * rounded according to DECIMAL_PLACES and ROUNDING_MODE.\r\n */\r\n P.squareRoot = P.sqrt = function () {\r\n var m, n, r, rep, t,\r\n x = this,\r\n c = x.c,\r\n s = x.s,\r\n e = x.e,\r\n dp = DECIMAL_PLACES + 4,\r\n half = new BigNumber('0.5');\r\n\r\n // Negative/NaN/Infinity/zero?\r\n if (s !== 1 || !c || !c[0]) {\r\n return new BigNumber(!s || s < 0 && (!c || c[0]) ? NaN : c ? x : 1 / 0);\r\n }\r\n\r\n // Initial estimate.\r\n s = Math.sqrt(+valueOf(x));\r\n\r\n // Math.sqrt underflow/overflow?\r\n // Pass x to Math.sqrt as integer, then adjust the exponent of the result.\r\n if (s == 0 || s == 1 / 0) {\r\n n = coeffToString(c);\r\n if ((n.length + e) % 2 == 0) n += '0';\r\n s = Math.sqrt(+n);\r\n e = bitFloor((e + 1) / 2) - (e < 0 || e % 2);\r\n\r\n if (s == 1 / 0) {\r\n n = '5e' + e;\r\n } else {\r\n n = s.toExponential();\r\n n = n.slice(0, n.indexOf('e') + 1) + e;\r\n }\r\n\r\n r = new BigNumber(n);\r\n } else {\r\n r = new BigNumber(s + '');\r\n }\r\n\r\n // Check for zero.\r\n // r could be zero if MIN_EXP is changed after the this value was created.\r\n // This would cause a division by zero (x/t) and hence Infinity below, which would cause\r\n // coeffToString to throw.\r\n if (r.c[0]) {\r\n e = r.e;\r\n s = e + dp;\r\n if (s < 3) s = 0;\r\n\r\n // Newton-Raphson iteration.\r\n for (; ;) {\r\n t = r;\r\n r = half.times(t.plus(div(x, t, dp, 1)));\r\n\r\n if (coeffToString(t.c).slice(0, s) === (n = coeffToString(r.c)).slice(0, s)) {\r\n\r\n // The exponent of r may here be one less than the final result exponent,\r\n // e.g 0.0009999 (e-4) --> 0.001 (e-3), so adjust s so the rounding digits\r\n // are indexed correctly.\r\n if (r.e < e) --s;\r\n n = n.slice(s - 3, s + 1);\r\n\r\n // The 4th rounding digit may be in error by -1 so if the 4 rounding digits\r\n // are 9999 or 4999 (i.e. approaching a rounding boundary) continue the\r\n // iteration.\r\n if (n == '9999' || !rep && n == '4999') {\r\n\r\n // On the first iteration only, check to see if rounding up gives the\r\n // exact result as the nines may infinitely repeat.\r\n if (!rep) {\r\n round(t, t.e + DECIMAL_PLACES + 2, 0);\r\n\r\n if (t.times(t).eq(x)) {\r\n r = t;\r\n break;\r\n }\r\n }\r\n\r\n dp += 4;\r\n s += 4;\r\n rep = 1;\r\n } else {\r\n\r\n // If rounding digits are null, 0{0,4} or 50{0,3}, check for exact\r\n // result. If not, then there are further digits and m will be truthy.\r\n if (!+n || !+n.slice(1) && n.charAt(0) == '5') {\r\n\r\n // Truncate to the first rounding digit.\r\n round(r, r.e + DECIMAL_PLACES + 2, 1);\r\n m = !r.times(r).eq(x);\r\n }\r\n\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return round(r, r.e + DECIMAL_PLACES + 1, ROUNDING_MODE, m);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this BigNumber in exponential notation and\r\n * rounded using ROUNDING_MODE to dp fixed decimal places.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'\r\n */\r\n P.toExponential = function (dp, rm) {\r\n if (dp != null) {\r\n intCheck(dp, 0, MAX);\r\n dp++;\r\n }\r\n return format(this, dp, rm, 1);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this BigNumber in fixed-point notation rounding\r\n * to dp fixed decimal places using rounding mode rm, or ROUNDING_MODE if rm is omitted.\r\n *\r\n * Note: as with JavaScript's number type, (-0).toFixed(0) is '0',\r\n * but e.g. (-0.00001).toFixed(0) is '-0'.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'\r\n */\r\n P.toFixed = function (dp, rm) {\r\n if (dp != null) {\r\n intCheck(dp, 0, MAX);\r\n dp = dp + this.e + 1;\r\n }\r\n return format(this, dp, rm);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this BigNumber in fixed-point notation rounded\r\n * using rm or ROUNDING_MODE to dp decimal places, and formatted according to the properties\r\n * of the format or FORMAT object (see BigNumber.set).\r\n *\r\n * The formatting object may contain some or all of the properties shown below.\r\n *\r\n * FORMAT = {\r\n * prefix: '',\r\n * groupSize: 3,\r\n * secondaryGroupSize: 0,\r\n * groupSeparator: ',',\r\n * decimalSeparator: '.',\r\n * fractionGroupSize: 0,\r\n * fractionGroupSeparator: '\\xA0', // non-breaking space\r\n * suffix: ''\r\n * };\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n * [format] {object} Formatting options. See FORMAT pbject above.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'\r\n * '[BigNumber Error] Argument not an object: {format}'\r\n */\r\n P.toFormat = function (dp, rm, format) {\r\n var str,\r\n x = this;\r\n\r\n if (format == null) {\r\n if (dp != null && rm && typeof rm == 'object') {\r\n format = rm;\r\n rm = null;\r\n } else if (dp && typeof dp == 'object') {\r\n format = dp;\r\n dp = rm = null;\r\n } else {\r\n format = FORMAT;\r\n }\r\n } else if (typeof format != 'object') {\r\n throw Error\r\n (bignumberError + 'Argument not an object: ' + format);\r\n }\r\n\r\n str = x.toFixed(dp, rm);\r\n\r\n if (x.c) {\r\n var i,\r\n arr = str.split('.'),\r\n g1 = +format.groupSize,\r\n g2 = +format.secondaryGroupSize,\r\n groupSeparator = format.groupSeparator || '',\r\n intPart = arr[0],\r\n fractionPart = arr[1],\r\n isNeg = x.s < 0,\r\n intDigits = isNeg ? intPart.slice(1) : intPart,\r\n len = intDigits.length;\r\n\r\n if (g2) {\r\n i = g1;\r\n g1 = g2;\r\n g2 = i;\r\n len -= i;\r\n }\r\n\r\n if (g1 > 0 && len > 0) {\r\n i = len % g1 || g1;\r\n intPart = intDigits.substr(0, i);\r\n for (; i < len; i += g1) intPart += groupSeparator + intDigits.substr(i, g1);\r\n if (g2 > 0) intPart += groupSeparator + intDigits.slice(i);\r\n if (isNeg) intPart = '-' + intPart;\r\n }\r\n\r\n str = fractionPart\r\n ? intPart + (format.decimalSeparator || '') + ((g2 = +format.fractionGroupSize)\r\n ? fractionPart.replace(new RegExp('\\\\d{' + g2 + '}\\\\B', 'g'),\r\n '$&' + (format.fractionGroupSeparator || ''))\r\n : fractionPart)\r\n : intPart;\r\n }\r\n\r\n return (format.prefix || '') + str + (format.suffix || '');\r\n };\r\n\r\n\r\n /*\r\n * Return an array of two BigNumbers representing the value of this BigNumber as a simple\r\n * fraction with an integer numerator and an integer denominator.\r\n * The denominator will be a positive non-zero value less than or equal to the specified\r\n * maximum denominator. If a maximum denominator is not specified, the denominator will be\r\n * the lowest value necessary to represent the number exactly.\r\n *\r\n * [md] {number|string|BigNumber} Integer >= 1, or Infinity. The maximum denominator.\r\n *\r\n * '[BigNumber Error] Argument {not an integer|out of range} : {md}'\r\n */\r\n P.toFraction = function (md) {\r\n var d, d0, d1, d2, e, exp, n, n0, n1, q, r, s,\r\n x = this,\r\n xc = x.c;\r\n\r\n if (md != null) {\r\n n = new BigNumber(md);\r\n\r\n // Throw if md is less than one or is not an integer, unless it is Infinity.\r\n if (!n.isInteger() && (n.c || n.s !== 1) || n.lt(ONE)) {\r\n throw Error\r\n (bignumberError + 'Argument ' +\r\n (n.isInteger() ? 'out of range: ' : 'not an integer: ') + valueOf(n));\r\n }\r\n }\r\n\r\n if (!xc) return new BigNumber(x);\r\n\r\n d = new BigNumber(ONE);\r\n n1 = d0 = new BigNumber(ONE);\r\n d1 = n0 = new BigNumber(ONE);\r\n s = coeffToString(xc);\r\n\r\n // Determine initial denominator.\r\n // d is a power of 10 and the minimum max denominator that specifies the value exactly.\r\n e = d.e = s.length - x.e - 1;\r\n d.c[0] = POWS_TEN[(exp = e % LOG_BASE) < 0 ? LOG_BASE + exp : exp];\r\n md = !md || n.comparedTo(d) > 0 ? (e > 0 ? d : n1) : n;\r\n\r\n exp = MAX_EXP;\r\n MAX_EXP = 1 / 0;\r\n n = new BigNumber(s);\r\n\r\n // n0 = d1 = 0\r\n n0.c[0] = 0;\r\n\r\n for (; ;) {\r\n q = div(n, d, 0, 1);\r\n d2 = d0.plus(q.times(d1));\r\n if (d2.comparedTo(md) == 1) break;\r\n d0 = d1;\r\n d1 = d2;\r\n n1 = n0.plus(q.times(d2 = n1));\r\n n0 = d2;\r\n d = n.minus(q.times(d2 = d));\r\n n = d2;\r\n }\r\n\r\n d2 = div(md.minus(d0), d1, 0, 1);\r\n n0 = n0.plus(d2.times(n1));\r\n d0 = d0.plus(d2.times(d1));\r\n n0.s = n1.s = x.s;\r\n e = e * 2;\r\n\r\n // Determine which fraction is closer to x, n0/d0 or n1/d1\r\n r = div(n1, d1, e, ROUNDING_MODE).minus(x).abs().comparedTo(\r\n div(n0, d0, e, ROUNDING_MODE).minus(x).abs()) < 1 ? [n1, d1] : [n0, d0];\r\n\r\n MAX_EXP = exp;\r\n\r\n return r;\r\n };\r\n\r\n\r\n /*\r\n * Return the value of this BigNumber converted to a number primitive.\r\n */\r\n P.toNumber = function () {\r\n return +valueOf(this);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this BigNumber rounded to sd significant digits\r\n * using rounding mode rm or ROUNDING_MODE. If sd is less than the number of digits\r\n * necessary to represent the integer part of the value in fixed-point notation, then use\r\n * exponential notation.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {sd|rm}'\r\n */\r\n P.toPrecision = function (sd, rm) {\r\n if (sd != null) intCheck(sd, 1, MAX);\r\n return format(this, sd, rm, 2);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this BigNumber in base b, or base 10 if b is\r\n * omitted. If a base is specified, including base 10, round according to DECIMAL_PLACES and\r\n * ROUNDING_MODE. If a base is not specified, and this BigNumber has a positive exponent\r\n * that is equal to or greater than TO_EXP_POS, or a negative exponent equal to or less than\r\n * TO_EXP_NEG, return exponential notation.\r\n *\r\n * [b] {number} Integer, 2 to ALPHABET.length inclusive.\r\n *\r\n * '[BigNumber Error] Base {not a primitive number|not an integer|out of range}: {b}'\r\n */\r\n P.toString = function (b) {\r\n var str,\r\n n = this,\r\n s = n.s,\r\n e = n.e;\r\n\r\n // Infinity or NaN?\r\n if (e === null) {\r\n if (s) {\r\n str = 'Infinity';\r\n if (s < 0) str = '-' + str;\r\n } else {\r\n str = 'NaN';\r\n }\r\n } else {\r\n if (b == null) {\r\n str = e <= TO_EXP_NEG || e >= TO_EXP_POS\r\n ? toExponential(coeffToString(n.c), e)\r\n : toFixedPoint(coeffToString(n.c), e, '0');\r\n } else if (b === 10 && alphabetHasNormalDecimalDigits) {\r\n n = round(new BigNumber(n), DECIMAL_PLACES + e + 1, ROUNDING_MODE);\r\n str = toFixedPoint(coeffToString(n.c), n.e, '0');\r\n } else {\r\n intCheck(b, 2, ALPHABET.length, 'Base');\r\n str = convertBase(toFixedPoint(coeffToString(n.c), e, '0'), 10, b, s, true);\r\n }\r\n\r\n if (s < 0 && n.c[0]) str = '-' + str;\r\n }\r\n\r\n return str;\r\n };\r\n\r\n\r\n /*\r\n * Return as toString, but do not accept a base argument, and include the minus sign for\r\n * negative zero.\r\n */\r\n P.valueOf = P.toJSON = function () {\r\n return valueOf(this);\r\n };\r\n\r\n\r\n P._isBigNumber = true;\r\n\r\n P[Symbol.toStringTag] = 'BigNumber';\r\n\r\n // Node.js v10.12.0+\r\n P[Symbol.for('nodejs.util.inspect.custom')] = P.valueOf;\r\n\r\n if (configObject != null) BigNumber.set(configObject);\r\n\r\n return BigNumber;\r\n}\r\n\r\n\r\n// PRIVATE HELPER FUNCTIONS\r\n\r\n// These functions don't need access to variables,\r\n// e.g. DECIMAL_PLACES, in the scope of the `clone` function above.\r\n\r\n\r\nfunction bitFloor(n) {\r\n var i = n | 0;\r\n return n > 0 || n === i ? i : i - 1;\r\n}\r\n\r\n\r\n// Return a coefficient array as a string of base 10 digits.\r\nfunction coeffToString(a) {\r\n var s, z,\r\n i = 1,\r\n j = a.length,\r\n r = a[0] + '';\r\n\r\n for (; i < j;) {\r\n s = a[i++] + '';\r\n z = LOG_BASE - s.length;\r\n for (; z--; s = '0' + s);\r\n r += s;\r\n }\r\n\r\n // Determine trailing zeros.\r\n for (j = r.length; r.charCodeAt(--j) === 48;);\r\n\r\n return r.slice(0, j + 1 || 1);\r\n}\r\n\r\n\r\n// Compare the value of BigNumbers x and y.\r\nfunction compare(x, y) {\r\n var a, b,\r\n xc = x.c,\r\n yc = y.c,\r\n i = x.s,\r\n j = y.s,\r\n k = x.e,\r\n l = y.e;\r\n\r\n // Either NaN?\r\n if (!i || !j) return null;\r\n\r\n a = xc && !xc[0];\r\n b = yc && !yc[0];\r\n\r\n // Either zero?\r\n if (a || b) return a ? b ? 0 : -j : i;\r\n\r\n // Signs differ?\r\n if (i != j) return i;\r\n\r\n a = i < 0;\r\n b = k == l;\r\n\r\n // Either Infinity?\r\n if (!xc || !yc) return b ? 0 : !xc ^ a ? 1 : -1;\r\n\r\n // Compare exponents.\r\n if (!b) return k > l ^ a ? 1 : -1;\r\n\r\n j = (k = xc.length) < (l = yc.length) ? k : l;\r\n\r\n // Compare digit by digit.\r\n for (i = 0; i < j; i++) if (xc[i] != yc[i]) return xc[i] > yc[i] ^ a ? 1 : -1;\r\n\r\n // Compare lengths.\r\n return k == l ? 0 : k > l ^ a ? 1 : -1;\r\n}\r\n\r\n\r\n/*\r\n * Check that n is a primitive number, an integer, and in range, otherwise throw.\r\n */\r\nfunction intCheck(n, min, max, name) {\r\n if (n < min || n > max || n !== mathfloor(n)) {\r\n throw Error\r\n (bignumberError + (name || 'Argument') + (typeof n == 'number'\r\n ? n < min || n > max ? ' out of range: ' : ' not an integer: '\r\n : ' not a primitive number: ') + String(n));\r\n }\r\n}\r\n\r\n\r\n// Assumes finite n.\r\nfunction isOdd(n) {\r\n var k = n.c.length - 1;\r\n return bitFloor(n.e / LOG_BASE) == k && n.c[k] % 2 != 0;\r\n}\r\n\r\n\r\nfunction toExponential(str, e) {\r\n return (str.length > 1 ? str.charAt(0) + '.' + str.slice(1) : str) +\r\n (e < 0 ? 'e' : 'e+') + e;\r\n}\r\n\r\n\r\nfunction toFixedPoint(str, e, z) {\r\n var len, zs;\r\n\r\n // Negative exponent?\r\n if (e < 0) {\r\n\r\n // Prepend zeros.\r\n for (zs = z + '.'; ++e; zs += z);\r\n str = zs + str;\r\n\r\n // Positive exponent\r\n } else {\r\n len = str.length;\r\n\r\n // Append zeros.\r\n if (++e > len) {\r\n for (zs = z, e -= len; --e; zs += z);\r\n str += zs;\r\n } else if (e < len) {\r\n str = str.slice(0, e) + '.' + str.slice(e);\r\n }\r\n }\r\n\r\n return str;\r\n}\r\n\r\n\r\n// EXPORT\r\n\r\n\r\nexport var BigNumber = clone();\r\n\r\nexport default BigNumber;\r\n","// src/index.ts\nvar SplayTreeNode = class {\n key;\n left = null;\n right = null;\n constructor(key) {\n this.key = key;\n }\n};\nvar SplayTreeSetNode = class extends SplayTreeNode {\n constructor(key) {\n super(key);\n }\n};\nvar SplayTreeMapNode = class _SplayTreeMapNode extends SplayTreeNode {\n value;\n constructor(key, value) {\n super(key);\n this.value = value;\n }\n replaceValue(value) {\n const node = new _SplayTreeMapNode(this.key, value);\n node.left = this.left;\n node.right = this.right;\n return node;\n }\n};\nvar SplayTree = class {\n size = 0;\n modificationCount = 0;\n splayCount = 0;\n splay(key) {\n const root = this.root;\n if (root == null) {\n this.compare(key, key);\n return -1;\n }\n let right = null;\n let newTreeRight = null;\n let left = null;\n let newTreeLeft = null;\n let current = root;\n const compare = this.compare;\n let comp;\n while (true) {\n comp = compare(current.key, key);\n if (comp > 0) {\n let currentLeft = current.left;\n if (currentLeft == null) break;\n comp = compare(currentLeft.key, key);\n if (comp > 0) {\n current.left = currentLeft.right;\n currentLeft.right = current;\n current = currentLeft;\n currentLeft = current.left;\n if (currentLeft == null) break;\n }\n if (right == null) {\n newTreeRight = current;\n } else {\n right.left = current;\n }\n right = current;\n current = currentLeft;\n } else if (comp < 0) {\n let currentRight = current.right;\n if (currentRight == null) break;\n comp = compare(currentRight.key, key);\n if (comp < 0) {\n current.right = currentRight.left;\n currentRight.left = current;\n current = currentRight;\n currentRight = current.right;\n if (currentRight == null) break;\n }\n if (left == null) {\n newTreeLeft = current;\n } else {\n left.right = current;\n }\n left = current;\n current = currentRight;\n } else {\n break;\n }\n }\n if (left != null) {\n left.right = current.left;\n current.left = newTreeLeft;\n }\n if (right != null) {\n right.left = current.right;\n current.right = newTreeRight;\n }\n if (this.root !== current) {\n this.root = current;\n this.splayCount++;\n }\n return comp;\n }\n splayMin(node) {\n let current = node;\n let nextLeft = current.left;\n while (nextLeft != null) {\n const left = nextLeft;\n current.left = left.right;\n left.right = current;\n current = left;\n nextLeft = current.left;\n }\n return current;\n }\n splayMax(node) {\n let current = node;\n let nextRight = current.right;\n while (nextRight != null) {\n const right = nextRight;\n current.right = right.left;\n right.left = current;\n current = right;\n nextRight = current.right;\n }\n return current;\n }\n _delete(key) {\n if (this.root == null) return null;\n const comp = this.splay(key);\n if (comp != 0) return null;\n let root = this.root;\n const result = root;\n const left = root.left;\n this.size--;\n if (left == null) {\n this.root = root.right;\n } else {\n const right = root.right;\n root = this.splayMax(left);\n root.right = right;\n this.root = root;\n }\n this.modificationCount++;\n return result;\n }\n addNewRoot(node, comp) {\n this.size++;\n this.modificationCount++;\n const root = this.root;\n if (root == null) {\n this.root = node;\n return;\n }\n if (comp < 0) {\n node.left = root;\n node.right = root.right;\n root.right = null;\n } else {\n node.right = root;\n node.left = root.left;\n root.left = null;\n }\n this.root = node;\n }\n _first() {\n const root = this.root;\n if (root == null) return null;\n this.root = this.splayMin(root);\n return this.root;\n }\n _last() {\n const root = this.root;\n if (root == null) return null;\n this.root = this.splayMax(root);\n return this.root;\n }\n clear() {\n this.root = null;\n this.size = 0;\n this.modificationCount++;\n }\n has(key) {\n return this.validKey(key) && this.splay(key) == 0;\n }\n defaultCompare() {\n return (a, b) => a < b ? -1 : a > b ? 1 : 0;\n }\n wrap() {\n return {\n getRoot: () => {\n return this.root;\n },\n setRoot: (root) => {\n this.root = root;\n },\n getSize: () => {\n return this.size;\n },\n getModificationCount: () => {\n return this.modificationCount;\n },\n getSplayCount: () => {\n return this.splayCount;\n },\n setSplayCount: (count) => {\n this.splayCount = count;\n },\n splay: (key) => {\n return this.splay(key);\n },\n has: (key) => {\n return this.has(key);\n }\n };\n }\n};\nvar SplayTreeMap = class extends SplayTree {\n root = null;\n compare;\n validKey;\n constructor(compare, isValidKey) {\n super();\n this.compare = compare ?? this.defaultCompare();\n this.validKey = isValidKey ?? ((a) => a != null && a != void 0);\n }\n delete(key) {\n if (!this.validKey(key)) return false;\n return this._delete(key) != null;\n }\n forEach(f) {\n const nodes = new SplayTreeMapEntryIterableIterator(this.wrap());\n let result;\n while (result = nodes.next(), !result.done) {\n f(result.value[1], result.value[0], this);\n }\n }\n get(key) {\n if (!this.validKey(key)) return void 0;\n if (this.root != null) {\n const comp = this.splay(key);\n if (comp == 0) {\n return this.root.value;\n }\n }\n return void 0;\n }\n hasValue(value) {\n const initialSplayCount = this.splayCount;\n const visit = (node) => {\n while (node != null) {\n if (node.value == value) return true;\n if (initialSplayCount != this.splayCount) {\n throw \"Concurrent modification during iteration.\";\n }\n if (node.right != null && visit(node.right)) {\n return true;\n }\n node = node.left;\n }\n return false;\n };\n return visit(this.root);\n }\n set(key, value) {\n const comp = this.splay(key);\n if (comp == 0) {\n this.root = this.root.replaceValue(value);\n this.splayCount += 1;\n return this;\n }\n this.addNewRoot(new SplayTreeMapNode(key, value), comp);\n return this;\n }\n setAll(other) {\n other.forEach((value, key) => {\n this.set(key, value);\n });\n }\n setIfAbsent(key, ifAbsent) {\n let comp = this.splay(key);\n if (comp == 0) {\n return this.root.value;\n }\n const modificationCount = this.modificationCount;\n const splayCount = this.splayCount;\n const value = ifAbsent();\n if (modificationCount != this.modificationCount) {\n throw \"Concurrent modification during iteration.\";\n }\n if (splayCount != this.splayCount) {\n comp = this.splay(key);\n }\n this.addNewRoot(new SplayTreeMapNode(key, value), comp);\n return value;\n }\n isEmpty() {\n return this.root == null;\n }\n isNotEmpty() {\n return !this.isEmpty();\n }\n firstKey() {\n if (this.root == null) return null;\n return this._first().key;\n }\n lastKey() {\n if (this.root == null) return null;\n return this._last().key;\n }\n lastKeyBefore(key) {\n if (key == null) throw \"Invalid arguments(s)\";\n if (this.root == null) return null;\n const comp = this.splay(key);\n if (comp < 0) return this.root.key;\n let node = this.root.left;\n if (node == null) return null;\n let nodeRight = node.right;\n while (nodeRight != null) {\n node = nodeRight;\n nodeRight = node.right;\n }\n return node.key;\n }\n firstKeyAfter(key) {\n if (key == null) throw \"Invalid arguments(s)\";\n if (this.root == null) return null;\n const comp = this.splay(key);\n if (comp > 0) return this.root.key;\n let node = this.root.right;\n if (node == null) return null;\n let nodeLeft = node.left;\n while (nodeLeft != null) {\n node = nodeLeft;\n nodeLeft = node.left;\n }\n return node.key;\n }\n update(key, update, ifAbsent) {\n let comp = this.splay(key);\n if (comp == 0) {\n const modificationCount = this.modificationCount;\n const splayCount = this.splayCount;\n const newValue = update(this.root.value);\n if (modificationCount != this.modificationCount) {\n throw \"Concurrent modification during iteration.\";\n }\n if (splayCount != this.splayCount) {\n this.splay(key);\n }\n this.root = this.root.replaceValue(newValue);\n this.splayCount += 1;\n return newValue;\n }\n if (ifAbsent != null) {\n const modificationCount = this.modificationCount;\n const splayCount = this.splayCount;\n const newValue = ifAbsent();\n if (modificationCount != this.modificationCount) {\n throw \"Concurrent modification during iteration.\";\n }\n if (splayCount != this.splayCount) {\n comp = this.splay(key);\n }\n this.addNewRoot(new SplayTreeMapNode(key, newValue), comp);\n return newValue;\n }\n throw \"Invalid argument (key): Key not in map.\";\n }\n updateAll(update) {\n const root = this.root;\n if (root == null) return;\n const iterator = new SplayTreeMapEntryIterableIterator(this.wrap());\n let node;\n while (node = iterator.next(), !node.done) {\n const newValue = update(...node.value);\n iterator.replaceValue(newValue);\n }\n }\n keys() {\n return new SplayTreeKeyIterableIterator(this.wrap());\n }\n values() {\n return new SplayTreeValueIterableIterator(this.wrap());\n }\n entries() {\n return this[Symbol.iterator]();\n }\n [Symbol.iterator]() {\n return new SplayTreeMapEntryIterableIterator(this.wrap());\n }\n [Symbol.toStringTag] = \"[object Map]\";\n};\nvar SplayTreeSet = class _SplayTreeSet extends SplayTree {\n root = null;\n compare;\n validKey;\n constructor(compare, isValidKey) {\n super();\n this.compare = compare ?? this.defaultCompare();\n this.validKey = isValidKey ?? ((v) => v != null && v != void 0);\n }\n delete(element) {\n if (!this.validKey(element)) return false;\n return this._delete(element) != null;\n }\n deleteAll(elements) {\n for (const element of elements) {\n this.delete(element);\n }\n }\n forEach(f) {\n const nodes = this[Symbol.iterator]();\n let result;\n while (result = nodes.next(), !result.done) {\n f(result.value, result.value, this);\n }\n }\n add(element) {\n const compare = this.splay(element);\n if (compare != 0) this.addNewRoot(new SplayTreeSetNode(element), compare);\n return this;\n }\n addAndReturn(element) {\n const compare = this.splay(element);\n if (compare != 0) this.addNewRoot(new SplayTreeSetNode(element), compare);\n return this.root.key;\n }\n addAll(elements) {\n for (const element of elements) {\n this.add(element);\n }\n }\n isEmpty() {\n return this.root == null;\n }\n isNotEmpty() {\n return this.root != null;\n }\n single() {\n if (this.size == 0) throw \"Bad state: No element\";\n if (this.size > 1) throw \"Bad state: Too many element\";\n return this.root.key;\n }\n first() {\n if (this.size == 0) throw \"Bad state: No element\";\n return this._first().key;\n }\n last() {\n if (this.size == 0) throw \"Bad state: No element\";\n return this._last().key;\n }\n lastBefore(element) {\n if (element == null) throw \"Invalid arguments(s)\";\n if (this.root == null) return null;\n const comp = this.splay(element);\n if (comp < 0) return this.root.key;\n let node = this.root.left;\n if (node == null) return null;\n let nodeRight = node.right;\n while (nodeRight != null) {\n node = nodeRight;\n nodeRight = node.right;\n }\n return node.key;\n }\n firstAfter(element) {\n if (element == null) throw \"Invalid arguments(s)\";\n if (this.root == null) return null;\n const comp = this.splay(element);\n if (comp > 0) return this.root.key;\n let node = this.root.right;\n if (node == null) return null;\n let nodeLeft = node.left;\n while (nodeLeft != null) {\n node = nodeLeft;\n nodeLeft = node.left;\n }\n return node.key;\n }\n retainAll(elements) {\n const retainSet = new _SplayTreeSet(this.compare, this.validKey);\n const modificationCount = this.modificationCount;\n for (const object of elements) {\n if (modificationCount != this.modificationCount) {\n throw \"Concurrent modification during iteration.\";\n }\n if (this.validKey(object) && this.splay(object) == 0) {\n retainSet.add(this.root.key);\n }\n }\n if (retainSet.size != this.size) {\n this.root = retainSet.root;\n this.size = retainSet.size;\n this.modificationCount++;\n }\n }\n lookup(object) {\n if (!this.validKey(object)) return null;\n const comp = this.splay(object);\n if (comp != 0) return null;\n return this.root.key;\n }\n intersection(other) {\n const result = new _SplayTreeSet(this.compare, this.validKey);\n for (const element of this) {\n if (other.has(element)) result.add(element);\n }\n return result;\n }\n difference(other) {\n const result = new _SplayTreeSet(this.compare, this.validKey);\n for (const element of this) {\n if (!other.has(element)) result.add(element);\n }\n return result;\n }\n union(other) {\n const u = this.clone();\n u.addAll(other);\n return u;\n }\n clone() {\n const set = new _SplayTreeSet(this.compare, this.validKey);\n set.size = this.size;\n set.root = this.copyNode(this.root);\n return set;\n }\n copyNode(node) {\n if (node == null) return null;\n function copyChildren(node2, dest) {\n let left;\n let right;\n do {\n left = node2.left;\n right = node2.right;\n if (left != null) {\n const newLeft = new SplayTreeSetNode(left.key);\n dest.left = newLeft;\n copyChildren(left, newLeft);\n }\n if (right != null) {\n const newRight = new SplayTreeSetNode(right.key);\n dest.right = newRight;\n node2 = right;\n dest = newRight;\n }\n } while (right != null);\n }\n const result = new SplayTreeSetNode(node.key);\n copyChildren(node, result);\n return result;\n }\n toSet() {\n return this.clone();\n }\n entries() {\n return new SplayTreeSetEntryIterableIterator(this.wrap());\n }\n keys() {\n return this[Symbol.iterator]();\n }\n values() {\n return this[Symbol.iterator]();\n }\n [Symbol.iterator]() {\n return new SplayTreeKeyIterableIterator(this.wrap());\n }\n [Symbol.toStringTag] = \"[object Set]\";\n};\nvar SplayTreeIterableIterator = class {\n tree;\n path = new Array();\n modificationCount = null;\n splayCount;\n constructor(tree) {\n this.tree = tree;\n this.splayCount = tree.getSplayCount();\n }\n [Symbol.iterator]() {\n return this;\n }\n next() {\n if (this.moveNext()) return { done: false, value: this.current() };\n return { done: true, value: null };\n }\n current() {\n if (!this.path.length) return null;\n const node = this.path[this.path.length - 1];\n return this.getValue(node);\n }\n rebuildPath(key) {\n this.path.splice(0, this.path.length);\n this.tree.splay(key);\n this.path.push(this.tree.getRoot());\n this.splayCount = this.tree.getSplayCount();\n }\n findLeftMostDescendent(node) {\n while (node != null) {\n this.path.push(node);\n node = node.left;\n }\n }\n moveNext() {\n if (this.modificationCount != this.tree.getModificationCount()) {\n if (this.modificationCount == null) {\n this.modificationCount = this.tree.getModificationCount();\n let node2 = this.tree.getRoot();\n while (node2 != null) {\n this.path.push(node2);\n node2 = node2.left;\n }\n return this.path.length > 0;\n }\n throw \"Concurrent modification during iteration.\";\n }\n if (!this.path.length) return false;\n if (this.splayCount != this.tree.getSplayCount()) {\n this.rebuildPath(this.path[this.path.length - 1].key);\n }\n let node = this.path[this.path.length - 1];\n let next = node.right;\n if (next != null) {\n while (next != null) {\n this.path.push(next);\n next = next.left;\n }\n return true;\n }\n this.path.pop();\n while (this.path.length && this.path[this.path.length - 1].right === node) {\n node = this.path.pop();\n }\n return this.path.length > 0;\n }\n};\nvar SplayTreeKeyIterableIterator = class extends SplayTreeIterableIterator {\n getValue(node) {\n return node.key;\n }\n};\nvar SplayTreeSetEntryIterableIterator = class extends SplayTreeIterableIterator {\n getValue(node) {\n return [node.key, node.key];\n }\n};\nvar SplayTreeValueIterableIterator = class extends SplayTreeIterableIterator {\n constructor(map) {\n super(map);\n }\n getValue(node) {\n return node.value;\n }\n};\nvar SplayTreeMapEntryIterableIterator = class extends SplayTreeIterableIterator {\n constructor(map) {\n super(map);\n }\n getValue(node) {\n return [node.key, node.value];\n }\n replaceValue(value) {\n if (this.modificationCount != this.tree.getModificationCount()) {\n throw \"Concurrent modification during iteration.\";\n }\n if (this.splayCount != this.tree.getSplayCount()) {\n this.rebuildPath(this.path[this.path.length - 1].key);\n }\n const last = this.path.pop();\n const newLast = last.replaceValue(value);\n if (!this.path.length) {\n this.tree.setRoot(newLast);\n } else {\n const parent = this.path[this.path.length - 1];\n if (last === parent.left) {\n parent.left = newLast;\n } else {\n parent.right = newLast;\n }\n }\n this.path.push(newLast);\n const count = this.tree.getSplayCount() + 1;\n this.tree.setSplayCount(count);\n this.splayCount = count;\n }\n};\nexport {\n SplayTreeMap,\n SplayTreeSet\n};\n//# sourceMappingURL=index.js.map","// src/geom-in.ts\nimport BigNumber2 from \"bignumber.js\";\n\n// src/constant.ts\nvar constant_default = (x) => {\n return () => {\n return x;\n };\n};\n\n// src/compare.ts\nvar compare_default = (eps) => {\n const almostEqual = eps ? (a, b) => b.minus(a).abs().isLessThanOrEqualTo(eps) : constant_default(false);\n return (a, b) => {\n if (almostEqual(a, b)) return 0;\n return a.comparedTo(b);\n };\n};\n\n// src/orient.ts\nfunction orient_default(eps) {\n const almostCollinear = eps ? (area2, ax, ay, cx, cy) => area2.exponentiatedBy(2).isLessThanOrEqualTo(\n cx.minus(ax).exponentiatedBy(2).plus(cy.minus(ay).exponentiatedBy(2)).times(eps)\n ) : constant_default(false);\n return (a, b, c) => {\n const ax = a.x, ay = a.y, cx = c.x, cy = c.y;\n const area2 = ay.minus(cy).times(b.x.minus(cx)).minus(ax.minus(cx).times(b.y.minus(cy)));\n if (almostCollinear(area2, ax, ay, cx, cy)) return 0;\n return area2.comparedTo(0);\n };\n}\n\n// src/snap.ts\nimport BigNumber from \"bignumber.js\";\nimport { SplayTreeSet } from \"splaytree-ts\";\n\n// src/identity.ts\nvar identity_default = (x) => {\n return x;\n};\n\n// src/snap.ts\nvar snap_default = (eps) => {\n if (eps) {\n const xTree = new SplayTreeSet(compare_default(eps));\n const yTree = new SplayTreeSet(compare_default(eps));\n const snapCoord = (coord, tree) => {\n return tree.addAndReturn(coord);\n };\n const snap = (v) => {\n return {\n x: snapCoord(v.x, xTree),\n y: snapCoord(v.y, yTree)\n };\n };\n snap({ x: new BigNumber(0), y: new BigNumber(0) });\n return snap;\n }\n return identity_default;\n};\n\n// src/precision.ts\nvar set = (eps) => {\n return {\n set: (eps2) => {\n precision = set(eps2);\n },\n reset: () => set(eps),\n compare: compare_default(eps),\n snap: snap_default(eps),\n orient: orient_default(eps)\n };\n};\nvar precision = set();\n\n// src/bbox.ts\nvar isInBbox = (bbox, point) => {\n return bbox.ll.x.isLessThanOrEqualTo(point.x) && point.x.isLessThanOrEqualTo(bbox.ur.x) && bbox.ll.y.isLessThanOrEqualTo(point.y) && point.y.isLessThanOrEqualTo(bbox.ur.y);\n};\nvar getBboxOverlap = (b1, b2) => {\n if (b2.ur.x.isLessThan(b1.ll.x) || b1.ur.x.isLessThan(b2.ll.x) || b2.ur.y.isLessThan(b1.ll.y) || b1.ur.y.isLessThan(b2.ll.y))\n return null;\n const lowerX = b1.ll.x.isLessThan(b2.ll.x) ? b2.ll.x : b1.ll.x;\n const upperX = b1.ur.x.isLessThan(b2.ur.x) ? b1.ur.x : b2.ur.x;\n const lowerY = b1.ll.y.isLessThan(b2.ll.y) ? b2.ll.y : b1.ll.y;\n const upperY = b1.ur.y.isLessThan(b2.ur.y) ? b1.ur.y : b2.ur.y;\n return { ll: { x: lowerX, y: lowerY }, ur: { x: upperX, y: upperY } };\n};\n\n// src/operation.ts\nimport { SplayTreeSet as SplayTreeSet3 } from \"splaytree-ts\";\n\n// src/vector.ts\nvar crossProduct = (a, b) => a.x.times(b.y).minus(a.y.times(b.x));\nvar dotProduct = (a, b) => a.x.times(b.x).plus(a.y.times(b.y));\nvar length = (v) => dotProduct(v, v).sqrt();\nvar sineOfAngle = (pShared, pBase, pAngle) => {\n const vBase = { x: pBase.x.minus(pShared.x), y: pBase.y.minus(pShared.y) };\n const vAngle = { x: pAngle.x.minus(pShared.x), y: pAngle.y.minus(pShared.y) };\n return crossProduct(vAngle, vBase).div(length(vAngle)).div(length(vBase));\n};\nvar cosineOfAngle = (pShared, pBase, pAngle) => {\n const vBase = { x: pBase.x.minus(pShared.x), y: pBase.y.minus(pShared.y) };\n const vAngle = { x: pAngle.x.minus(pShared.x), y: pAngle.y.minus(pShared.y) };\n return dotProduct(vAngle, vBase).div(length(vAngle)).div(length(vBase));\n};\nvar horizontalIntersection = (pt, v, y) => {\n if (v.y.isZero()) return null;\n return { x: pt.x.plus(v.x.div(v.y).times(y.minus(pt.y))), y };\n};\nvar verticalIntersection = (pt, v, x) => {\n if (v.x.isZero()) return null;\n return { x, y: pt.y.plus(v.y.div(v.x).times(x.minus(pt.x))) };\n};\nvar intersection = (pt1, v1, pt2, v2) => {\n if (v1.x.isZero()) return verticalIntersection(pt2, v2, pt1.x);\n if (v2.x.isZero()) return verticalIntersection(pt1, v1, pt2.x);\n if (v1.y.isZero()) return horizontalIntersection(pt2, v2, pt1.y);\n if (v2.y.isZero()) return horizontalIntersection(pt1, v1, pt2.y);\n const kross = crossProduct(v1, v2);\n if (kross.isZero()) return null;\n const ve = { x: pt2.x.minus(pt1.x), y: pt2.y.minus(pt1.y) };\n const d1 = crossProduct(ve, v1).div(kross);\n const d2 = crossProduct(ve, v2).div(kross);\n const x1 = pt1.x.plus(d2.times(v1.x)), x2 = pt2.x.plus(d1.times(v2.x));\n const y1 = pt1.y.plus(d2.times(v1.y)), y2 = pt2.y.plus(d1.times(v2.y));\n const x = x1.plus(x2).div(2);\n const y = y1.plus(y2).div(2);\n return { x, y };\n};\n\n// src/sweep-event.ts\nvar SweepEvent = class _SweepEvent {\n point;\n isLeft;\n segment;\n otherSE;\n consumedBy;\n // for ordering sweep events in the sweep event queue\n static compare(a, b) {\n const ptCmp = _SweepEvent.comparePoints(a.point, b.point);\n if (ptCmp !== 0) return ptCmp;\n if (a.point !== b.point) a.link(b);\n if (a.isLeft !== b.isLeft) return a.isLeft ? 1 : -1;\n return Segment.compare(a.segment, b.segment);\n }\n // for ordering points in sweep line order\n static comparePoints(aPt, bPt) {\n if (aPt.x.isLessThan(bPt.x)) return -1;\n if (aPt.x.isGreaterThan(bPt.x)) return 1;\n if (aPt.y.isLessThan(bPt.y)) return -1;\n if (aPt.y.isGreaterThan(bPt.y)) return 1;\n return 0;\n }\n // Warning: 'point' input will be modified and re-used (for performance)\n constructor(point, isLeft) {\n if (point.events === void 0) point.events = [this];\n else point.events.push(this);\n this.point = point;\n this.isLeft = isLeft;\n }\n link(other) {\n if (other.point === this.point) {\n throw new Error(\"Tried to link already linked events\");\n }\n const otherEvents = other.point.events;\n for (let i = 0, iMax = otherEvents.length; i < iMax; i++) {\n const evt = otherEvents[i];\n this.point.events.push(evt);\n evt.point = this.point;\n }\n this.checkForConsuming();\n }\n /* Do a pass over our linked events and check to see if any pair\n * of segments match, and should be consumed. */\n checkForConsuming() {\n const numEvents = this.point.events.length;\n for (let i = 0; i < numEvents; i++) {\n const evt1 = this.point.events[i];\n if (evt1.segment.consumedBy !== void 0) continue;\n for (let j = i + 1; j < numEvents; j++) {\n const evt2 = this.point.events[j];\n if (evt2.consumedBy !== void 0) continue;\n if (evt1.otherSE.point.events !== evt2.otherSE.point.events) continue;\n evt1.segment.consume(evt2.segment);\n }\n }\n }\n getAvailableLinkedEvents() {\n const events = [];\n for (let i = 0, iMax = this.point.events.length; i < iMax; i++) {\n const evt = this.point.events[i];\n if (evt !== this && !evt.segment.ringOut && evt.segment.isInResult()) {\n events.push(evt);\n }\n }\n return events;\n }\n /**\n * Returns a comparator function for sorting linked events that will\n * favor the event that will give us the smallest left-side angle.\n * All ring construction starts as low as possible heading to the right,\n * so by always turning left as sharp as possible we'll get polygons\n * without uncessary loops & holes.\n *\n * The comparator function has a compute cache such that it avoids\n * re-computing already-computed values.\n */\n getLeftmostComparator(baseEvent) {\n const cache = /* @__PURE__ */ new Map();\n const fillCache = (linkedEvent) => {\n const nextEvent = linkedEvent.otherSE;\n cache.set(linkedEvent, {\n sine: sineOfAngle(this.point, baseEvent.point, nextEvent.point),\n cosine: cosineOfAngle(this.point, baseEvent.point, nextEvent.point)\n });\n };\n return (a, b) => {\n if (!cache.has(a)) fillCache(a);\n if (!cache.has(b)) fillCache(b);\n const { sine: asine, cosine: acosine } = cache.get(a);\n const { sine: bsine, cosine: bcosine } = cache.get(b);\n if (asine.isGreaterThanOrEqualTo(0) && bsine.isGreaterThanOrEqualTo(0)) {\n if (acosine.isLessThan(bcosine)) return 1;\n if (acosine.isGreaterThan(bcosine)) return -1;\n return 0;\n }\n if (asine.isLessThan(0) && bsine.isLessThan(0)) {\n if (acosine.isLessThan(bcosine)) return -1;\n if (acosine.isGreaterThan(bcosine)) return 1;\n return 0;\n }\n if (bsine.isLessThan(asine)) return -1;\n if (bsine.isGreaterThan(asine)) return 1;\n return 0;\n };\n }\n};\n\n// src/geom-out.ts\nvar RingOut = class _RingOut {\n events;\n poly;\n _isExteriorRing;\n _enclosingRing;\n /* Given the segments from the sweep line pass, compute & return a series\n * of closed rings from all the segments marked to be part of the result */\n static factory(allSegments) {\n const ringsOut = [];\n for (let i = 0, iMax = allSegments.length; i < iMax; i++) {\n const segment = allSegments[i];\n if (!segment.isInResult() || segment.ringOut) continue;\n let prevEvent = null;\n let event = segment.leftSE;\n let nextEvent = segment.rightSE;\n const events = [event];\n const startingPoint = event.point;\n const intersectionLEs = [];\n while (true) {\n prevEvent = event;\n event = nextEvent;\n events.push(event);\n if (event.point === startingPoint) break;\n while (true) {\n const availableLEs = event.getAvailableLinkedEvents();\n if (availableLEs.length === 0) {\n const firstPt = events[0].point;\n const lastPt = events[events.length - 1].point;\n throw new Error(\n `Unable to complete output ring starting at [${firstPt.x}, ${firstPt.y}]. Last matching segment found ends at [${lastPt.x}, ${lastPt.y}].`\n );\n }\n if (availableLEs.length === 1) {\n nextEvent = availableLEs[0].otherSE;\n break;\n }\n let indexLE = null;\n for (let j = 0, jMax = intersectionLEs.length; j < jMax; j++) {\n if (intersectionLEs[j].point === event.point) {\n indexLE = j;\n break;\n }\n }\n if (indexLE !== null) {\n const intersectionLE = intersectionLEs.splice(indexLE)[0];\n const ringEvents = events.splice(intersectionLE.index);\n ringEvents.unshift(ringEvents[0].otherSE);\n ringsOut.push(new _RingOut(ringEvents.reverse()));\n continue;\n }\n intersectionLEs.push({\n index: events.length,\n point: event.point\n });\n const comparator = event.getLeftmostComparator(prevEvent);\n nextEvent = availableLEs.sort(comparator)[0].otherSE;\n break;\n }\n }\n ringsOut.push(new _RingOut(events));\n }\n return ringsOut;\n }\n constructor(events) {\n this.events = events;\n for (let i = 0, iMax = events.length; i < iMax; i++) {\n events[i].segment.ringOut = this;\n }\n this.poly = null;\n }\n getGeom() {\n let prevPt = this.events[0].point;\n const points = [prevPt];\n for (let i = 1, iMax = this.events.length - 1; i < iMax; i++) {\n const pt2 = this.events[i].point;\n const nextPt2 = this.events[i + 1].point;\n if (precision.orient(pt2, prevPt, nextPt2) === 0) continue;\n points.push(pt2);\n prevPt = pt2;\n }\n if (points.length === 1) return null;\n const pt = points[0];\n const nextPt = points[1];\n if (precision.orient(pt, prevPt, nextPt) === 0) points.shift();\n points.push(points[0]);\n const step = this.isExteriorRing() ? 1 : -1;\n const iStart = this.isExteriorRing() ? 0 : points.length - 1;\n const iEnd = this.isExteriorRing() ? points.length : -1;\n const orderedPoints = [];\n for (let i = iStart; i != iEnd; i += step)\n orderedPoints.push([points[i].x.toNumber(), points[i].y.toNumber()]);\n return orderedPoints;\n }\n isExteriorRing() {\n if (this._isExteriorRing === void 0) {\n const enclosing = this.enclosingRing();\n this._isExteriorRing = enclosing ? !enclosing.isExteriorRing() : true;\n }\n return this._isExteriorRing;\n }\n enclosingRing() {\n if (this._enclosingRing === void 0) {\n this._enclosingRing = this._calcEnclosingRing();\n }\n return this._enclosingRing;\n }\n /* Returns the ring that encloses this one, if any */\n _calcEnclosingRing() {\n let leftMostEvt = this.events[0];\n for (let i = 1, iMax = this.events.length; i < iMax; i++) {\n const evt = this.events[i];\n if (SweepEvent.compare(leftMostEvt, evt) > 0) leftMostEvt = evt;\n }\n let prevSeg = leftMostEvt.segment.prevInResult();\n let prevPrevSeg = prevSeg ? prevSeg.prevInResult() : null;\n while (true) {\n if (!prevSeg) return null;\n if (!prevPrevSeg) return prevSeg.ringOut;\n if (prevPrevSeg.ringOut !== prevSeg.ringOut) {\n if (prevPrevSeg.ringOut?.enclosingRing() !== prevSeg.ringOut) {\n return prevSeg.ringOut;\n } else return prevSeg.ringOut?.enclosingRing();\n }\n prevSeg = prevPrevSeg.prevInResult();\n prevPrevSeg = prevSeg ? prevSeg.prevInResult() : null;\n }\n }\n};\nvar PolyOut = class {\n exteriorRing;\n interiorRings;\n constructor(exteriorRing) {\n this.exteriorRing = exteriorRing;\n exteriorRing.poly = this;\n this.interiorRings = [];\n }\n addInterior(ring) {\n this.interiorRings.push(ring);\n ring.poly = this;\n }\n getGeom() {\n const geom0 = this.exteriorRing.getGeom();\n if (geom0 === null) return null;\n const geom = [geom0];\n for (let i = 0, iMax = this.interiorRings.length; i < iMax; i++) {\n const ringGeom = this.interiorRings[i].getGeom();\n if (ringGeom === null) continue;\n geom.push(ringGeom);\n }\n return geom;\n }\n};\nvar MultiPolyOut = class {\n rings;\n polys;\n constructor(rings) {\n this.rings = rings;\n this.polys = this._composePolys(rings);\n }\n getGeom() {\n const geom = [];\n for (let i = 0, iMax = this.polys.length; i < iMax; i++) {\n const polyGeom = this.polys[i].getGeom();\n if (polyGeom === null) continue;\n geom.push(polyGeom);\n }\n return geom;\n }\n _composePolys(rings) {\n const polys = [];\n for (let i = 0, iMax = rings.length; i < iMax; i++) {\n const ring = rings[i];\n if (ring.poly) continue;\n if (ring.isExteriorRing()) polys.push(new PolyOut(ring));\n else {\n const enclosingRing = ring.enclosingRing();\n if (!enclosingRing?.poly) polys.push(new PolyOut(enclosingRing));\n enclosingRing?.poly?.addInterior(ring);\n }\n }\n return polys;\n }\n};\n\n// src/sweep-line.ts\nimport { SplayTreeSet as SplayTreeSet2 } from \"splaytree-ts\";\nvar SweepLine = class {\n queue;\n tree;\n segments;\n constructor(queue, comparator = Segment.compare) {\n this.queue = queue;\n this.tree = new SplayTreeSet2(comparator);\n this.segments = [];\n }\n process(event) {\n const segment = event.segment;\n const newEvents = [];\n if (event.consumedBy) {\n if (event.isLeft) this.queue.delete(event.otherSE);\n else this.tree.delete(segment);\n return newEvents;\n }\n if (event.isLeft) this.tree.add(segment);\n let prevSeg = segment;\n let nextSeg = segment;\n do {\n prevSeg = this.tree.lastBefore(prevSeg);\n } while (prevSeg != null && prevSeg.consumedBy != void 0);\n do {\n nextSeg = this.tree.firstAfter(nextSeg);\n } while (nextSeg != null && nextSeg.consumedBy != void 0);\n if (event.isLeft) {\n let prevMySplitter = null;\n if (prevSeg) {\n const prevInter = prevSeg.getIntersection(segment);\n if (prevInter !== null) {\n if (!segment.isAnEndpoint(prevInter)) prevMySplitter = prevInter;\n if (!prevSeg.isAnEndpoint(prevInter)) {\n const newEventsFromSplit = this._splitSafely(prevSeg, prevInter);\n for (let i = 0, iMax = newEventsFromSplit.length; i < iMax; i++) {\n newEvents.push(newEventsFromSplit[i]);\n }\n }\n }\n }\n let nextMySplitter = null;\n if (nextSeg) {\n const nextInter = nextSeg.getIntersection(segment);\n if (nextInter !== null) {\n if (!segment.isAnEndpoint(nextInter)) nextMySplitter = nextInter;\n if (!nextSeg.isAnEndpoint(nextInter)) {\n const newEventsFromSplit = this._splitSafely(nextSeg, nextInter);\n for (let i = 0, iMax = newEventsFromSplit.length; i < iMax; i++) {\n newEvents.push(newEventsFromSplit[i]);\n }\n }\n }\n }\n if (prevMySplitter !== null || nextMySplitter !== null) {\n let mySplitter = null;\n if (prevMySplitter === null) mySplitter = nextMySplitter;\n else if (nextMySplitter === null) mySplitter = prevMySplitter;\n else {\n const cmpSplitters = SweepEvent.comparePoints(\n prevMySplitter,\n nextMySplitter\n );\n mySplitter = cmpSplitters <= 0 ? prevMySplitter : nextMySplitter;\n }\n this.queue.delete(segment.rightSE);\n newEvents.push(segment.rightSE);\n const newEventsFromSplit = segment.split(mySplitter);\n for (let i = 0, iMax = newEventsFromSplit.length; i < iMax; i++) {\n newEvents.push(newEventsFromSplit[i]);\n }\n }\n if (newEvents.length > 0) {\n this.tree.delete(segment);\n newEvents.push(event);\n } else {\n this.segments.push(segment);\n segment.prev = prevSeg;\n }\n } else {\n if (prevSeg && nextSeg) {\n const inter = prevSeg.getIntersection(nextSeg);\n if (inter !== null) {\n if (!prevSeg.isAnEndpoint(inter)) {\n const newEventsFromSplit = this._splitSafely(prevSeg, inter);\n for (let i = 0, iMax = newEventsFromSplit.length; i < iMax; i++) {\n newEvents.push(newEventsFromSplit[i]);\n }\n }\n if (!nextSeg.isAnEndpoint(inter)) {\n const newEventsFromSplit = this._splitSafely(nextSeg, inter);\n for (let i = 0, iMax = newEventsFromSplit.length; i < iMax; i++) {\n newEvents.push(newEventsFromSplit[i]);\n }\n }\n }\n }\n this.tree.delete(segment);\n }\n return newEvents;\n }\n /* Safely split a segment that is currently in the datastructures\n * IE - a segment other than the one that is currently being processed. */\n _splitSafely(seg, pt) {\n this.tree.delete(seg);\n const rightSE = seg.rightSE;\n this.queue.delete(rightSE);\n const newEvents = seg.split(pt);\n newEvents.push(rightSE);\n if (seg.consumedBy === void 0) this.tree.add(seg);\n return newEvents;\n }\n};\n\n// src/operation.ts\nvar Operation = class {\n type;\n numMultiPolys;\n run(type, geom, moreGeoms) {\n operation.type = type;\n const multipolys = [new MultiPolyIn(geom, true)];\n for (let i = 0, iMax = moreGeoms.length; i < iMax; i++) {\n multipolys.push(new MultiPolyIn(moreGeoms[i], false));\n }\n operation.numMultiPolys = multipolys.length;\n if (operation.type === \"difference\") {\n const subject = multipolys[0];\n let i = 1;\n while (i < multipolys.length) {\n if (getBboxOverlap(multipolys[i].bbox, subject.bbox) !== null) i++;\n else multipolys.splice(i, 1);\n }\n }\n if (operation.type === \"intersection\") {\n for (let i = 0, iMax = multipolys.length; i < iMax; i++) {\n const mpA = multipolys[i];\n for (let j = i + 1, jMax = multipolys.length; j < jMax; j++) {\n if (getBboxOverlap(mpA.bbox, multipolys[j].bbox) === null) return [];\n }\n }\n }\n const queue = new SplayTreeSet3(SweepEvent.compare);\n for (let i = 0, iMax = multipolys.length; i < iMax; i++) {\n const sweepEvents = multipolys[i].getSweepEvents();\n for (let j = 0, jMax = sweepEvents.length; j < jMax; j++) {\n queue.add(sweepEvents[j]);\n }\n }\n const sweepLine = new SweepLine(queue);\n let evt = null;\n if (queue.size != 0) {\n evt = queue.first();\n queue.delete(evt);\n }\n while (evt) {\n const newEvents = sweepLine.process(evt);\n for (let i = 0, iMax = newEvents.length; i < iMax; i++) {\n const evt2 = newEvents[i];\n if (evt2.consumedBy === void 0) queue.add(evt2);\n }\n if (queue.size != 0) {\n evt = queue.first();\n queue.delete(evt);\n } else {\n evt = null;\n }\n }\n precision.reset();\n const ringsOut = RingOut.factory(sweepLine.segments);\n const result = new MultiPolyOut(ringsOut);\n return result.getGeom();\n }\n};\nvar operation = new Operation();\nvar operation_default = operation;\n\n// src/segment.ts\nvar segmentId = 0;\nvar Segment = class _Segment {\n id;\n leftSE;\n rightSE;\n rings;\n windings;\n ringOut;\n consumedBy;\n prev;\n _prevInResult;\n _beforeState;\n _afterState;\n _isInResult;\n /* This compare() function is for ordering segments in the sweep\n * line tree, and does so according to the following criteria:\n *\n * Consider the vertical line that lies an infinestimal step to the\n * right of the right-more of the two left endpoints of the input\n * segments. Imagine slowly moving a point up from negative infinity\n * in the increasing y direction. Which of the two segments will that\n * point intersect first? That segment comes 'before' the other one.\n *\n * If neither segment would be intersected by such a line, (if one\n * or more of the segments are vertical) then the line to be considered\n * is directly on the right-more of the two left inputs.\n */\n static compare(a, b) {\n const alx = a.leftSE.point.x;\n const blx = b.leftSE.point.x;\n const arx = a.rightSE.point.x;\n const brx = b.rightSE.point.x;\n if (brx.isLessThan(alx)) return 1;\n if (arx.isLessThan(blx)) return -1;\n const aly = a.leftSE.point.y;\n const bly = b.leftSE.point.y;\n const ary = a.rightSE.point.y;\n const bry = b.rightSE.point.y;\n if (alx.isLessThan(blx)) {\n if (bly.isLessThan(aly) && bly.isLessThan(ary)) return 1;\n if (bly.isGreaterThan(aly) && bly.isGreaterThan(ary)) return -1;\n const aCmpBLeft = a.comparePoint(b.leftSE.point);\n if (aCmpBLeft < 0) return 1;\n if (aCmpBLeft > 0) return -1;\n const bCmpARight = b.comparePoint(a.rightSE.point);\n if (bCmpARight !== 0) return bCmpARight;\n return -1;\n }\n if (alx.isGreaterThan(blx)) {\n if (aly.isLessThan(bly) && aly.isLessThan(bry)) return -1;\n if (aly.isGreaterThan(bly) && aly.isGreaterThan(bry)) return 1;\n const bCmpALeft = b.comparePoint(a.leftSE.point);\n if (bCmpALeft !== 0) return bCmpALeft;\n const aCmpBRight = a.comparePoint(b.rightSE.point);\n if (aCmpBRight < 0) return 1;\n if (aCmpBRight > 0) return -1;\n return 1;\n }\n if (aly.isLessThan(bly)) return -1;\n if (aly.isGreaterThan(bly)) return 1;\n if (arx.isLessThan(brx)) {\n const bCmpARight = b.comparePoint(a.rightSE.point);\n if (bCmpARight !== 0) return bCmpARight;\n }\n if (arx.isGreaterThan(brx)) {\n const aCmpBRight = a.comparePoint(b.rightSE.point);\n if (aCmpBRight < 0) return 1;\n if (aCmpBRight > 0) return -1;\n }\n if (!arx.eq(brx)) {\n const ay = ary.minus(aly);\n const ax = arx.minus(alx);\n const by = bry.minus(bly);\n const bx = brx.minus(blx);\n if (ay.isGreaterThan(ax) && by.isLessThan(bx)) return 1;\n if (ay.isLessThan(ax) && by.isGreaterThan(bx)) return -1;\n }\n if (arx.isGreaterThan(brx)) return 1;\n if (arx.isLessThan(brx)) return -1;\n if (ary.isLessThan(bry)) return -1;\n if (ary.isGreaterThan(bry)) return 1;\n if (a.id < b.id) return -1;\n if (a.id > b.id) return 1;\n return 0;\n }\n /* Warning: a reference to ringWindings input will be stored,\n * and possibly will be later modified */\n constructor(leftSE, rightSE, rings, windings) {\n this.id = ++segmentId;\n this.leftSE = leftSE;\n leftSE.segment = this;\n leftSE.otherSE = rightSE;\n this.rightSE = rightSE;\n rightSE.segment = this;\n rightSE.otherSE = leftSE;\n this.rings = rings;\n this.windings = windings;\n }\n static fromRing(pt1, pt2, ring) {\n let leftPt, rightPt, winding;\n const cmpPts = SweepEvent.comparePoints(pt1, pt2);\n if (cmpPts < 0) {\n leftPt = pt1;\n rightPt = pt2;\n winding = 1;\n } else if (cmpPts > 0) {\n leftPt = pt2;\n rightPt = pt1;\n winding = -1;\n } else\n throw new Error(\n `Tried to create degenerate segment at [${pt1.x}, ${pt1.y}]`\n );\n const leftSE = new SweepEvent(leftPt, true);\n const rightSE = new SweepEvent(rightPt, false);\n return new _Segment(leftSE, rightSE, [ring], [winding]);\n }\n /* When a segment is split, the rightSE is replaced with a new sweep event */\n replaceRightSE(newRightSE) {\n this.rightSE = newRightSE;\n this.rightSE.segment = this;\n this.rightSE.otherSE = this.leftSE;\n this.leftSE.otherSE = this.rightSE;\n }\n bbox() {\n const y1 = this.leftSE.point.y;\n const y2 = this.rightSE.point.y;\n return {\n ll: { x: this.leftSE.point.x, y: y1.isLessThan(y2) ? y1 : y2 },\n ur: { x: this.rightSE.point.x, y: y1.isGreaterThan(y2) ? y1 : y2 }\n };\n }\n /* A vector from the left point to the right */\n vector() {\n return {\n x: this.rightSE.point.x.minus(this.leftSE.point.x),\n y: this.rightSE.point.y.minus(this.leftSE.point.y)\n };\n }\n isAnEndpoint(pt) {\n return pt.x.eq(this.leftSE.point.x) && pt.y.eq(this.leftSE.point.y) || pt.x.eq(this.rightSE.point.x) && pt.y.eq(this.rightSE.point.y);\n }\n /* Compare this segment with a point.\n *\n * A point P is considered to be colinear to a segment if there\n * exists a distance D such that if we travel along the segment\n * from one * endpoint towards the other a distance D, we find\n * ourselves at point P.\n *\n * Return value indicates:\n *\n * 1: point lies above the segment (to the left of vertical)\n * 0: point is colinear to segment\n * -1: point lies below the segment (to the right of vertical)\n */\n comparePoint(point) {\n return precision.orient(this.leftSE.point, point, this.rightSE.point);\n }\n /**\n * Given another segment, returns the first non-trivial intersection\n * between the two segments (in terms of sweep line ordering), if it exists.\n *\n * A 'non-trivial' intersection is one that will cause one or both of the\n * segments to be split(). As such, 'trivial' vs. 'non-trivial' intersection:\n *\n * * endpoint of segA with endpoint of segB --> trivial\n * * endpoint of segA with point along segB --> non-trivial\n * * endpoint of segB with point along segA --> non-trivial\n * * point along segA with point along segB --> non-trivial\n *\n * If no non-trivial intersection exists, return null\n * Else, return null.\n */\n getIntersection(other) {\n const tBbox = this.bbox();\n const oBbox = other.bbox();\n const bboxOverlap = getBboxOverlap(tBbox, oBbox);\n if (bboxOverlap === null) return null;\n const tlp = this.leftSE.point;\n const trp = this.rightSE.point;\n const olp = other.leftSE.point;\n const orp = other.rightSE.point;\n const touchesOtherLSE = isInBbox(tBbox, olp) && this.comparePoint(olp) === 0;\n const touchesThisLSE = isInBbox(oBbox, tlp) && other.comparePoint(tlp) === 0;\n const touchesOtherRSE = isInBbox(tBbox, orp) && this.comparePoint(orp) === 0;\n const touchesThisRSE = isInBbox(oBbox, trp) && other.comparePoint(trp) === 0;\n if (touchesThisLSE && touchesOtherLSE) {\n if (touchesThisRSE && !touchesOtherRSE) return trp;\n if (!touchesThisRSE && touchesOtherRSE) return orp;\n return null;\n }\n if (touchesThisLSE) {\n if (touchesOtherRSE) {\n if (tlp.x.eq(orp.x) && tlp.y.eq(orp.y)) return null;\n }\n return tlp;\n }\n if (touchesOtherLSE) {\n if (touchesThisRSE) {\n if (trp.x.eq(olp.x) && trp.y.eq(olp.y)) return null;\n }\n return olp;\n }\n if (touchesThisRSE && touchesOtherRSE) return null;\n if (touchesThisRSE) return trp;\n if (touchesOtherRSE) return orp;\n const pt = intersection(tlp, this.vector(), olp, other.vector());\n if (pt === null) return null;\n if (!isInBbox(bboxOverlap, pt)) return null;\n return precision.snap(pt);\n }\n /**\n * Split the given segment into multiple segments on the given points.\n * * Each existing segment will retain its leftSE and a new rightSE will be\n * generated for it.\n * * A new segment will be generated which will adopt the original segment's\n * rightSE, and a new leftSE will be generated for it.\n * * If there are more than two points given to split on, new segments\n * in the middle will be generated with new leftSE and rightSE's.\n * * An array of the newly generated SweepEvents will be returned.\n *\n * Warning: input array of points is modified\n */\n split(point) {\n const newEvents = [];\n const alreadyLinked = point.events !== void 0;\n const newLeftSE = new SweepEvent(point, true);\n const newRightSE = new SweepEvent(point, false);\n const oldRightSE = this.rightSE;\n this.replaceRightSE(newRightSE);\n newEvents.push(newRightSE);\n newEvents.push(newLeftSE);\n const newSeg = new _Segment(\n newLeftSE,\n oldRightSE,\n this.rings.slice(),\n this.windings.slice()\n );\n if (SweepEvent.comparePoints(newSeg.leftSE.point, newSeg.rightSE.point) > 0) {\n newSeg.swapEvents();\n }\n if (SweepEvent.comparePoints(this.leftSE.point, this.rightSE.point) > 0) {\n this.swapEvents();\n }\n if (alreadyLinked) {\n newLeftSE.checkForConsuming();\n newRightSE.checkForConsuming();\n }\n return newEvents;\n }\n /* Swap which event is left and right */\n swapEvents() {\n const tmpEvt = this.rightSE;\n this.rightSE = this.leftSE;\n this.leftSE = tmpEvt;\n this.leftSE.isLeft = true;\n this.rightSE.isLeft = false;\n for (let i = 0, iMax = this.windings.length; i < iMax; i++) {\n this.windings[i] *= -1;\n }\n }\n /* Consume another segment. We take their rings under our wing\n * and mark them as consumed. Use for perfectly overlapping segments */\n consume(other) {\n let consumer = this;\n let consumee = other;\n while (consumer.consumedBy) consumer = consumer.consumedBy;\n while (consumee.consumedBy) consumee = consumee.consumedBy;\n const cmp = _Segment.compare(consumer, consumee);\n if (cmp === 0) return;\n if (cmp > 0) {\n const tmp = consumer;\n consumer = consumee;\n consumee = tmp;\n }\n if (consumer.prev === consumee) {\n const tmp = consumer;\n consumer = consumee;\n consumee = tmp;\n }\n for (let i = 0, iMax = consumee.rings.length; i < iMax; i++) {\n const ring = consumee.rings[i];\n const winding = consumee.windings[i];\n const index = consumer.rings.indexOf(ring);\n if (index === -1) {\n consumer.rings.push(ring);\n consumer.windings.push(winding);\n } else consumer.windings[index] += winding;\n }\n consumee.rings = null;\n consumee.windings = null;\n consumee.consumedBy = consumer;\n consumee.leftSE.consumedBy = consumer.leftSE;\n consumee.rightSE.consumedBy = consumer.rightSE;\n }\n /* The first segment previous segment chain that is in the result */\n prevInResult() {\n if (this._prevInResult !== void 0) return this._prevInResult;\n if (!this.prev) this._prevInResult = null;\n else if (this.prev.isInResult()) this._prevInResult = this.prev;\n else this._prevInResult = this.prev.prevInResult();\n return this._prevInResult;\n }\n beforeState() {\n if (this._beforeState !== void 0) return this._beforeState;\n if (!this.prev)\n this._beforeState = {\n rings: [],\n windings: [],\n multiPolys: []\n };\n else {\n const seg = this.prev.consumedBy || this.prev;\n this._beforeState = seg.afterState();\n }\n return this._beforeState;\n }\n afterState() {\n if (this._afterState !== void 0) return this._afterState;\n const beforeState = this.beforeState();\n this._afterState = {\n rings: beforeState.rings.slice(0),\n windings: beforeState.windings.slice(0),\n multiPolys: []\n };\n const ringsAfter = this._afterState.rings;\n const windingsAfter = this._afterState.windings;\n const mpsAfter = this._afterState.multiPolys;\n for (let i = 0, iMax = this.rings.length; i < iMax; i++) {\n const ring = this.rings[i];\n const winding = this.windings[i];\n const index = ringsAfter.indexOf(ring);\n if (index === -1) {\n ringsAfter.push(ring);\n windingsAfter.push(winding);\n } else windingsAfter[index] += winding;\n }\n const polysAfter = [];\n const polysExclude = [];\n for (let i = 0, iMax = ringsAfter.length; i < iMax; i++) {\n if (windingsAfter[i] === 0) continue;\n const ring = ringsAfter[i];\n const poly = ring.poly;\n if (polysExclude.indexOf(poly) !== -1) continue;\n if (ring.isExterior) polysAfter.push(poly);\n else {\n if (polysExclude.indexOf(poly) === -1) polysExclude.push(poly);\n const index = polysAfter.indexOf(ring.poly);\n if (index !== -1) polysAfter.splice(index, 1);\n }\n }\n for (let i = 0, iMax = polysAfter.length; i < iMax; i++) {\n const mp = polysAfter[i].multiPoly;\n if (mpsAfter.indexOf(mp) === -1) mpsAfter.push(mp);\n }\n return this._afterState;\n }\n /* Is this segment part of the final result? */\n isInResult() {\n if (this.consumedBy) return false;\n if (this._isInResult !== void 0) return this._isInResult;\n const mpsBefore = this.beforeState().multiPolys;\n const mpsAfter = this.afterState().multiPolys;\n switch (operation_default.type) {\n case \"union\": {\n const noBefores = mpsBefore.length === 0;\n const noAfters = mpsAfter.length === 0;\n this._isInResult = noBefores !== noAfters;\n break;\n }\n case \"intersection\": {\n let least;\n let most;\n if (mpsBefore.length < mpsAfter.length) {\n least = mpsBefore.length;\n most = mpsAfter.length;\n } else {\n least = mpsAfter.length;\n most = mpsBefore.length;\n }\n this._isInResult = most === operation_default.numMultiPolys && least < most;\n break;\n }\n case \"xor\": {\n const diff = Math.abs(mpsBefore.length - mpsAfter.length);\n this._isInResult = diff % 2 === 1;\n break;\n }\n case \"difference\": {\n const isJustSubject = (mps) => mps.length === 1 && mps[0].isSubject;\n this._isInResult = isJustSubject(mpsBefore) !== isJustSubject(mpsAfter);\n break;\n }\n }\n return this._isInResult;\n }\n};\n\n// src/geom-in.ts\nvar RingIn = class {\n poly;\n isExterior;\n segments;\n bbox;\n constructor(geomRing, poly, isExterior) {\n if (!Array.isArray(geomRing) || geomRing.length === 0) {\n throw new Error(\"Input geometry is not a valid Polygon or MultiPolygon\");\n }\n this.poly = poly;\n this.isExterior = isExterior;\n this.segments = [];\n if (typeof geomRing[0][0] !== \"number\" || typeof geomRing[0][1] !== \"number\") {\n throw new Error(\"Input geometry is not a valid Polygon or MultiPolygon\");\n }\n const firstPoint = precision.snap({ x: new BigNumber2(geomRing[0][0]), y: new BigNumber2(geomRing[0][1]) });\n this.bbox = {\n ll: { x: firstPoint.x, y: firstPoint.y },\n ur: { x: firstPoint.x, y: firstPoint.y }\n };\n let prevPoint = firstPoint;\n for (let i = 1, iMax = geomRing.length; i < iMax; i++) {\n if (typeof geomRing[i][0] !== \"number\" || typeof geomRing[i][1] !== \"number\") {\n throw new Error(\"Input geometry is not a valid Polygon or MultiPolygon\");\n }\n const point = precision.snap({ x: new BigNumber2(geomRing[i][0]), y: new BigNumber2(geomRing[i][1]) });\n if (point.x.eq(prevPoint.x) && point.y.eq(prevPoint.y)) continue;\n this.segments.push(Segment.fromRing(prevPoint, point, this));\n if (point.x.isLessThan(this.bbox.ll.x)) this.bbox.ll.x = point.x;\n if (point.y.isLessThan(this.bbox.ll.y)) this.bbox.ll.y = point.y;\n if (point.x.isGreaterThan(this.bbox.ur.x)) this.bbox.ur.x = point.x;\n if (point.y.isGreaterThan(this.bbox.ur.y)) this.bbox.ur.y = point.y;\n prevPoint = point;\n }\n if (!firstPoint.x.eq(prevPoint.x) || !firstPoint.y.eq(prevPoint.y)) {\n this.segments.push(Segment.fromRing(prevPoint, firstPoint, this));\n }\n }\n getSweepEvents() {\n const sweepEvents = [];\n for (let i = 0, iMax = this.segments.length; i < iMax; i++) {\n const segment = this.segments[i];\n sweepEvents.push(segment.leftSE);\n sweepEvents.push(segment.rightSE);\n }\n return sweepEvents;\n }\n};\nvar PolyIn = class {\n multiPoly;\n exteriorRing;\n interiorRings;\n bbox;\n constructor(geomPoly, multiPoly) {\n if (!Array.isArray(geomPoly)) {\n throw new Error(\"Input geometry is not a valid Polygon or MultiPolygon\");\n }\n this.exteriorRing = new RingIn(geomPoly[0], this, true);\n this.bbox = {\n ll: { x: this.exteriorRing.bbox.ll.x, y: this.exteriorRing.bbox.ll.y },\n ur: { x: this.exteriorRing.bbox.ur.x, y: this.exteriorRing.bbox.ur.y }\n };\n this.interiorRings = [];\n for (let i = 1, iMax = geomPoly.length; i < iMax; i++) {\n const ring = new RingIn(geomPoly[i], this, false);\n if (ring.bbox.ll.x.isLessThan(this.bbox.ll.x)) this.bbox.ll.x = ring.bbox.ll.x;\n if (ring.bbox.ll.y.isLessThan(this.bbox.ll.y)) this.bbox.ll.y = ring.bbox.ll.y;\n if (ring.bbox.ur.x.isGreaterThan(this.bbox.ur.x)) this.bbox.ur.x = ring.bbox.ur.x;\n if (ring.bbox.ur.y.isGreaterThan(this.bbox.ur.y)) this.bbox.ur.y = ring.bbox.ur.y;\n this.interiorRings.push(ring);\n }\n this.multiPoly = multiPoly;\n }\n getSweepEvents() {\n const sweepEvents = this.exteriorRing.getSweepEvents();\n for (let i = 0, iMax = this.interiorRings.length; i < iMax; i++) {\n const ringSweepEvents = this.interiorRings[i].getSweepEvents();\n for (let j = 0, jMax = ringSweepEvents.length; j < jMax; j++) {\n sweepEvents.push(ringSweepEvents[j]);\n }\n }\n return sweepEvents;\n }\n};\nvar MultiPolyIn = class {\n isSubject;\n polys;\n bbox;\n constructor(geom, isSubject) {\n if (!Array.isArray(geom)) {\n throw new Error(\"Input geometry is not a valid Polygon or MultiPolygon\");\n }\n try {\n if (typeof geom[0][0][0] === \"number\") geom = [geom];\n } catch (ex) {\n }\n this.polys = [];\n this.bbox = {\n ll: { x: new BigNumber2(Number.POSITIVE_INFINITY), y: new BigNumber2(Number.POSITIVE_INFINITY) },\n ur: { x: new BigNumber2(Number.NEGATIVE_INFINITY), y: new BigNumber2(Number.NEGATIVE_INFINITY) }\n };\n for (let i = 0, iMax = geom.length; i < iMax; i++) {\n const poly = new PolyIn(geom[i], this);\n if (poly.bbox.ll.x.isLessThan(this.bbox.ll.x)) this.bbox.ll.x = poly.bbox.ll.x;\n if (poly.bbox.ll.y.isLessThan(this.bbox.ll.y)) this.bbox.ll.y = poly.bbox.ll.y;\n if (poly.bbox.ur.x.isGreaterThan(this.bbox.ur.x)) this.bbox.ur.x = poly.bbox.ur.x;\n if (poly.bbox.ur.y.isGreaterThan(this.bbox.ur.y)) this.bbox.ur.y = poly.bbox.ur.y;\n this.polys.push(poly);\n }\n this.isSubject = isSubject;\n }\n getSweepEvents() {\n const sweepEvents = [];\n for (let i = 0, iMax = this.polys.length; i < iMax; i++) {\n const polySweepEvents = this.polys[i].getSweepEvents();\n for (let j = 0, jMax = polySweepEvents.length; j < jMax; j++) {\n sweepEvents.push(polySweepEvents[j]);\n }\n }\n return sweepEvents;\n }\n};\n\n// src/index.ts\nvar union = (geom, ...moreGeoms) => operation_default.run(\"union\", geom, moreGeoms);\nvar intersection2 = (geom, ...moreGeoms) => operation_default.run(\"intersection\", geom, moreGeoms);\nvar xor = (geom, ...moreGeoms) => operation_default.run(\"xor\", geom, moreGeoms);\nvar difference = (geom, ...moreGeoms) => operation_default.run(\"difference\", geom, moreGeoms);\nvar setPrecision = precision.set;\nexport {\n difference,\n intersection2 as intersection,\n setPrecision,\n union,\n xor\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport * as polyclip from \"polyclip-ts\";\nimport { polygon, multiPolygon } from \"@turf/helpers\";\nimport { geomEach } from \"@turf/meta\";\nfunction difference2(features) {\n const geoms = [];\n geomEach(features, (geom) => {\n geoms.push(geom.coordinates);\n });\n if (geoms.length < 2) {\n throw new Error(\"Must have at least two features\");\n }\n const properties = features.features[0].properties || {};\n const differenced = polyclip.difference(geoms[0], ...geoms.slice(1));\n if (differenced.length === 0) return null;\n if (differenced.length === 1) return polygon(differenced[0], properties);\n return multiPolygon(differenced, properties);\n}\nvar index_default = difference2;\nexport {\n index_default as default,\n difference2 as difference\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport { convertLength, earthRadius } from \"@turf/helpers\";\nimport { getCoord } from \"@turf/invariant\";\nfunction rhumbDistance(from, to, options = {}) {\n const origin = getCoord(from);\n const destination = getCoord(to);\n destination[0] += destination[0] - origin[0] > 180 ? -360 : origin[0] - destination[0] > 180 ? 360 : 0;\n const distanceInMeters = calculateRhumbDistance(origin, destination);\n const distance = convertLength(distanceInMeters, \"meters\", options.units);\n return distance;\n}\nfunction calculateRhumbDistance(origin, destination, radius) {\n radius = radius === void 0 ? earthRadius : Number(radius);\n const R = radius;\n const phi1 = origin[1] * Math.PI / 180;\n const phi2 = destination[1] * Math.PI / 180;\n const DeltaPhi = phi2 - phi1;\n let DeltaLambda = Math.abs(destination[0] - origin[0]) * Math.PI / 180;\n if (DeltaLambda > Math.PI) {\n DeltaLambda -= 2 * Math.PI;\n }\n const DeltaPsi = Math.log(\n Math.tan(phi2 / 2 + Math.PI / 4) / Math.tan(phi1 / 2 + Math.PI / 4)\n );\n const q = Math.abs(DeltaPsi) > 1e-11 ? DeltaPhi / DeltaPsi : Math.cos(phi1);\n const delta = Math.sqrt(\n DeltaPhi * DeltaPhi + q * q * DeltaLambda * DeltaLambda\n );\n const dist = delta * R;\n return dist;\n}\nvar index_default = rhumbDistance;\nexport {\n index_default as default,\n rhumbDistance\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport {\n convertLength,\n degreesToRadians,\n earthRadius,\n point\n} from \"@turf/helpers\";\nimport { getCoord } from \"@turf/invariant\";\nfunction rhumbDestination(origin, distance, bearing, options = {}) {\n const wasNegativeDistance = distance < 0;\n let distanceInMeters = convertLength(\n Math.abs(distance),\n options.units,\n \"meters\"\n );\n if (wasNegativeDistance) distanceInMeters = -Math.abs(distanceInMeters);\n const coords = getCoord(origin);\n const destination = calculateRhumbDestination(\n coords,\n distanceInMeters,\n bearing\n );\n destination[0] += destination[0] - coords[0] > 180 ? -360 : coords[0] - destination[0] > 180 ? 360 : 0;\n return point(destination, options.properties);\n}\nfunction calculateRhumbDestination(origin, distance, bearing, radius) {\n radius = radius === void 0 ? earthRadius : Number(radius);\n const delta = distance / radius;\n const lambda1 = origin[0] * Math.PI / 180;\n const phi1 = degreesToRadians(origin[1]);\n const theta = degreesToRadians(bearing);\n const DeltaPhi = delta * Math.cos(theta);\n let phi2 = phi1 + DeltaPhi;\n if (Math.abs(phi2) > Math.PI / 2) {\n phi2 = phi2 > 0 ? Math.PI - phi2 : -Math.PI - phi2;\n }\n const DeltaPsi = Math.log(\n Math.tan(phi2 / 2 + Math.PI / 4) / Math.tan(phi1 / 2 + Math.PI / 4)\n );\n const q = Math.abs(DeltaPsi) > 1e-11 ? DeltaPhi / DeltaPsi : Math.cos(phi1);\n const DeltaLambda = delta * Math.sin(theta) / q;\n const lambda2 = lambda1 + DeltaLambda;\n return [\n (lambda2 * 180 / Math.PI + 540) % 360 - 180,\n phi2 * 180 / Math.PI\n ];\n}\nvar index_default = rhumbDestination;\nexport {\n index_default as default,\n rhumbDestination\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport { multiPolygon, polygon } from \"@turf/helpers\";\nimport { geomEach } from \"@turf/meta\";\nimport * as polyclip from \"polyclip-ts\";\nfunction intersect(features, options = {}) {\n const geoms = [];\n geomEach(features, (geom) => {\n geoms.push(geom.coordinates);\n });\n if (geoms.length < 2) {\n throw new Error(\"Must specify at least 2 geometries\");\n }\n const intersection2 = polyclip.intersection(geoms[0], ...geoms.slice(1));\n if (intersection2.length === 0) return null;\n if (intersection2.length === 1)\n return polygon(intersection2[0], options.properties);\n return multiPolygon(intersection2, options.properties);\n}\nvar index_default = intersect;\nexport {\n index_default as default,\n intersect\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport { distance } from \"@turf/distance\";\nimport { segmentReduce } from \"@turf/meta\";\nfunction length(geojson, options = {}) {\n return segmentReduce(\n geojson,\n (previousValue, segment) => {\n const coords = segment.geometry.coordinates;\n return previousValue + distance(coords[0], coords[1], options);\n },\n 0\n );\n}\nvar index_default = length;\nexport {\n index_default as default,\n length\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport { coordEach } from \"@turf/meta\";\nimport { isObject } from \"@turf/helpers\";\nfunction truncate(geojson, options) {\n options = options != null ? options : {};\n if (!isObject(options)) throw new Error(\"options is invalid\");\n var precision = options.precision;\n var coordinates = options.coordinates;\n var mutate = options.mutate;\n precision = precision === void 0 || precision === null || isNaN(precision) ? 6 : precision;\n coordinates = coordinates === void 0 || coordinates === null || isNaN(coordinates) ? 3 : coordinates;\n if (!geojson) throw new Error(\"<geojson> is required\");\n if (typeof precision !== \"number\")\n throw new Error(\"<precision> must be a number\");\n if (typeof coordinates !== \"number\")\n throw new Error(\"<coordinates> must be a number\");\n if (mutate === false || mutate === void 0)\n geojson = JSON.parse(JSON.stringify(geojson));\n var factor = Math.pow(10, precision);\n coordEach(geojson, function(coords) {\n truncateCoords(coords, factor, coordinates);\n });\n return geojson;\n}\nfunction truncateCoords(coords, factor, coordinates) {\n if (coords.length > coordinates) coords.splice(coordinates, coords.length);\n for (var i = 0; i < coords.length; i++) {\n coords[i] = Math.round(coords[i] * factor) / factor;\n }\n return coords;\n}\nvar index_default = truncate;\nexport {\n index_default as default,\n truncate\n};\n//# sourceMappingURL=index.js.map","// index.js\nimport { geojsonRbush as rbush } from \"@turf/geojson-rbush\";\nimport { truncate } from \"@turf/truncate\";\nimport { lineSegment } from \"@turf/line-segment\";\nimport { lineIntersect } from \"@turf/line-intersect\";\nimport { nearestPointOnLine } from \"@turf/nearest-point-on-line\";\nimport { getCoords, getCoord, getType } from \"@turf/invariant\";\nimport { featureEach, featureReduce, flattenEach } from \"@turf/meta\";\nimport { lineString, featureCollection } from \"@turf/helpers\";\nfunction lineSplit(line, splitter) {\n if (!line) throw new Error(\"line is required\");\n if (!splitter) throw new Error(\"splitter is required\");\n var lineType = getType(line);\n var splitterType = getType(splitter);\n if (lineType !== \"LineString\") throw new Error(\"line must be LineString\");\n if (splitterType === \"FeatureCollection\")\n throw new Error(\"splitter cannot be a FeatureCollection\");\n if (splitterType === \"GeometryCollection\")\n throw new Error(\"splitter cannot be a GeometryCollection\");\n var truncatedSplitter = truncate(splitter, { precision: 7 });\n switch (splitterType) {\n case \"Point\":\n return splitLineWithPoint(line, truncatedSplitter);\n case \"MultiPoint\":\n return splitLineWithPoints(line, truncatedSplitter);\n case \"LineString\":\n case \"MultiLineString\":\n case \"Polygon\":\n case \"MultiPolygon\":\n return splitLineWithPoints(\n line,\n lineIntersect(line, truncatedSplitter, {\n ignoreSelfIntersections: true\n })\n );\n }\n}\nfunction splitLineWithPoints(line, splitter) {\n var results = [];\n var tree = rbush();\n flattenEach(splitter, function(point) {\n results.forEach(function(feature, index) {\n feature.id = index;\n });\n if (!results.length) {\n results = splitLineWithPoint(line, point).features;\n tree.load(featureCollection(results));\n } else {\n var search = tree.search(point);\n if (search.features.length) {\n var closestLine = findClosestFeature(point, search);\n results = results.filter(function(feature) {\n return feature.id !== closestLine.id;\n });\n tree.remove(closestLine);\n featureEach(splitLineWithPoint(closestLine, point), function(line2) {\n results.push(line2);\n tree.insert(line2);\n });\n }\n }\n });\n return featureCollection(results);\n}\nfunction splitLineWithPoint(line, splitter) {\n var results = [];\n var startPoint = getCoords(line)[0];\n var endPoint = getCoords(line)[line.geometry.coordinates.length - 1];\n if (pointsEquals(startPoint, getCoord(splitter)) || pointsEquals(endPoint, getCoord(splitter)))\n return featureCollection([line]);\n var tree = rbush();\n var segments = lineSegment(line);\n tree.load(segments);\n var search = tree.search(splitter);\n if (!search.features.length) return featureCollection([line]);\n var closestSegment = findClosestFeature(splitter, search);\n var initialValue = [startPoint];\n var lastCoords = featureReduce(\n segments,\n function(previous, current, index) {\n var currentCoords = getCoords(current)[1];\n var splitterCoords = getCoord(splitter);\n if (index === closestSegment.id) {\n previous.push(splitterCoords);\n results.push(lineString(previous));\n if (pointsEquals(splitterCoords, currentCoords))\n return [splitterCoords];\n return [splitterCoords, currentCoords];\n } else {\n previous.push(currentCoords);\n return previous;\n }\n },\n initialValue\n );\n if (lastCoords.length > 1) {\n results.push(lineString(lastCoords));\n }\n return featureCollection(results);\n}\nfunction findClosestFeature(point, lines) {\n if (!lines.features.length) throw new Error(\"lines must contain features\");\n if (lines.features.length === 1) return lines.features[0];\n var closestFeature;\n var closestDistance = Infinity;\n featureEach(lines, function(segment) {\n var pt = nearestPointOnLine(segment, point);\n var dist = pt.properties.dist;\n if (dist < closestDistance) {\n closestFeature = segment;\n closestDistance = dist;\n }\n });\n return closestFeature;\n}\nfunction pointsEquals(pt1, pt2) {\n return pt1[0] === pt2[0] && pt1[1] === pt2[1];\n}\nvar index_default = lineSplit;\nexport {\n index_default as default,\n lineSplit\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport { clone } from \"@turf/clone\";\nimport { center } from \"@turf/center\";\nimport { centroid } from \"@turf/centroid\";\nimport { bbox as turfBBox } from \"@turf/bbox\";\nimport { rhumbBearing } from \"@turf/rhumb-bearing\";\nimport { rhumbDistance } from \"@turf/rhumb-distance\";\nimport { rhumbDestination } from \"@turf/rhumb-destination\";\nimport { coordEach, featureEach } from \"@turf/meta\";\nimport { point, isObject } from \"@turf/helpers\";\nimport { getCoord, getCoords, getType } from \"@turf/invariant\";\nfunction transformScale(geojson, factor, options) {\n options = options || {};\n if (!isObject(options)) throw new Error(\"options is invalid\");\n const origin = options.origin || \"centroid\";\n const mutate = options.mutate || false;\n if (!geojson) throw new Error(\"geojson required\");\n if (typeof factor !== \"number\" || factor <= 0)\n throw new Error(\"invalid factor\");\n const originIsPoint = Array.isArray(origin) || typeof origin === \"object\";\n if (mutate !== true) geojson = clone(geojson);\n if (geojson.type === \"FeatureCollection\" && !originIsPoint) {\n featureEach(geojson, function(feature, index) {\n geojson.features[index] = scale(\n feature,\n factor,\n origin\n );\n });\n return geojson;\n }\n return scale(geojson, factor, origin);\n}\nfunction scale(feature, factor, origin) {\n const isPoint = getType(feature) === \"Point\";\n const originCoord = defineOrigin(feature, origin);\n if (factor === 1 || isPoint) return feature;\n coordEach(feature, function(coord) {\n const originalDistance = rhumbDistance(originCoord, coord);\n const bearing = rhumbBearing(originCoord, coord);\n const newDistance = originalDistance * factor;\n const newCoord = getCoords(\n rhumbDestination(originCoord, newDistance, bearing)\n );\n coord[0] = newCoord[0];\n coord[1] = newCoord[1];\n if (coord.length === 3) coord[2] *= factor;\n });\n delete feature.bbox;\n return feature;\n}\nfunction defineOrigin(geojson, origin) {\n if (origin === void 0 || origin === null) origin = \"centroid\";\n if (Array.isArray(origin) || typeof origin === \"object\")\n return getCoord(origin);\n const bbox = geojson.bbox ? geojson.bbox : turfBBox(geojson, { recompute: true });\n const west = bbox[0];\n const south = bbox[1];\n const east = bbox[2];\n const north = bbox[3];\n switch (origin) {\n case \"sw\":\n // @ts-expect-error undocumented, to be removed for v8 #techdebt\n case \"southwest\":\n // @ts-expect-error undocumented, to be removed for v8 #techdebt\n case \"westsouth\":\n // @ts-expect-error undocumented, to be removed for v8 #techdebt\n case \"bottomleft\":\n return point([west, south]);\n case \"se\":\n // @ts-expect-error undocumented, to be removed for v8 #techdebt\n case \"southeast\":\n // @ts-expect-error undocumented, to be removed for v8 #techdebt\n case \"eastsouth\":\n // @ts-expect-error undocumented, to be removed for v8 #techdebt\n case \"bottomright\":\n return point([east, south]);\n case \"nw\":\n // @ts-expect-error undocumented, to be removed for v8 #techdebt\n case \"northwest\":\n // @ts-expect-error undocumented, to be removed for v8 #techdebt\n case \"westnorth\":\n // @ts-expect-error undocumented, to be removed for v8 #techdebt\n case \"topleft\":\n return point([west, north]);\n case \"ne\":\n // @ts-expect-error undocumented, to be removed for v8 #techdebt\n case \"northeast\":\n // @ts-expect-error undocumented, to be removed for v8 #techdebt\n case \"eastnorth\":\n // @ts-expect-error undocumented, to be removed for v8 #techdebt\n case \"topright\":\n return point([east, north]);\n case \"center\":\n return center(geojson);\n case void 0:\n case null:\n case \"centroid\":\n return centroid(geojson);\n default:\n throw new Error(\"invalid origin\");\n }\n}\nvar index_default = transformScale;\nexport {\n index_default as default,\n transformScale\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport { cleanCoords } from \"@turf/clean-coords\";\nimport { clone } from \"@turf/clone\";\nimport { geomEach } from \"@turf/meta\";\nimport { isObject } from \"@turf/helpers\";\n\n// lib/simplify.js\nfunction getSqDist(p1, p2) {\n var dx = p1[0] - p2[0], dy = p1[1] - p2[1];\n return dx * dx + dy * dy;\n}\nfunction getSqSegDist(p, p1, p2) {\n var x = p1[0], y = p1[1], dx = p2[0] - x, dy = p2[1] - y;\n if (dx !== 0 || dy !== 0) {\n var t = ((p[0] - x) * dx + (p[1] - y) * dy) / (dx * dx + dy * dy);\n if (t > 1) {\n x = p2[0];\n y = p2[1];\n } else if (t > 0) {\n x += dx * t;\n y += dy * t;\n }\n }\n dx = p[0] - x;\n dy = p[1] - y;\n return dx * dx + dy * dy;\n}\nfunction simplifyRadialDist(points, sqTolerance) {\n var prevPoint = points[0], newPoints = [prevPoint], point;\n for (var i = 1, len = points.length; i < len; i++) {\n point = points[i];\n if (getSqDist(point, prevPoint) > sqTolerance) {\n newPoints.push(point);\n prevPoint = point;\n }\n }\n if (prevPoint !== point) newPoints.push(point);\n return newPoints;\n}\nfunction simplifyDPStep(points, first, last, sqTolerance, simplified) {\n var maxSqDist = sqTolerance, index;\n for (var i = first + 1; i < last; i++) {\n var sqDist = getSqSegDist(points[i], points[first], points[last]);\n if (sqDist > maxSqDist) {\n index = i;\n maxSqDist = sqDist;\n }\n }\n if (maxSqDist > sqTolerance) {\n if (index - first > 1)\n simplifyDPStep(points, first, index, sqTolerance, simplified);\n simplified.push(points[index]);\n if (last - index > 1)\n simplifyDPStep(points, index, last, sqTolerance, simplified);\n }\n}\nfunction simplifyDouglasPeucker(points, sqTolerance) {\n var last = points.length - 1;\n var simplified = [points[0]];\n simplifyDPStep(points, 0, last, sqTolerance, simplified);\n simplified.push(points[last]);\n return simplified;\n}\nfunction simplify(points, tolerance, highestQuality) {\n if (points.length <= 2) return points;\n var sqTolerance = tolerance !== void 0 ? tolerance * tolerance : 1;\n points = highestQuality ? points : simplifyRadialDist(points, sqTolerance);\n points = simplifyDouglasPeucker(points, sqTolerance);\n return points;\n}\n\n// index.ts\nfunction simplify2(geojson, options = {}) {\n var _a, _b, _c;\n options = options != null ? options : {};\n if (!isObject(options)) throw new Error(\"options is invalid\");\n const tolerance = (_a = options.tolerance) != null ? _a : 1;\n const highQuality = (_b = options.highQuality) != null ? _b : false;\n const mutate = (_c = options.mutate) != null ? _c : false;\n if (!geojson) throw new Error(\"geojson is required\");\n if (tolerance && tolerance < 0) throw new Error(\"invalid tolerance\");\n if (mutate !== true) geojson = clone(geojson);\n geomEach(geojson, function(geom) {\n simplifyGeom(geom, tolerance, highQuality);\n });\n return geojson;\n}\nfunction simplifyGeom(geometry, tolerance, highQuality) {\n const type = geometry.type;\n if (type === \"Point\" || type === \"MultiPoint\") return geometry;\n cleanCoords(geometry, { mutate: true });\n if (type !== \"GeometryCollection\") {\n switch (type) {\n case \"LineString\":\n geometry.coordinates = simplify(\n geometry.coordinates,\n tolerance,\n highQuality\n );\n break;\n case \"MultiLineString\":\n geometry.coordinates = geometry.coordinates.map(\n (lines) => simplify(lines, tolerance, highQuality)\n );\n break;\n case \"Polygon\":\n geometry.coordinates = simplifyPolygon(\n geometry.coordinates,\n tolerance,\n highQuality\n );\n break;\n case \"MultiPolygon\":\n geometry.coordinates = geometry.coordinates.map(\n (rings) => simplifyPolygon(rings, tolerance, highQuality)\n );\n }\n }\n return geometry;\n}\nfunction simplifyPolygon(coordinates, tolerance, highQuality) {\n return coordinates.map(function(ring) {\n if (ring.length < 4) {\n throw new Error(\"invalid polygon\");\n }\n let ringTolerance = tolerance;\n let simpleRing = simplify(ring, ringTolerance, highQuality);\n while (!checkValidity(simpleRing) && ringTolerance >= Number.EPSILON) {\n ringTolerance -= ringTolerance * 0.01;\n simpleRing = simplify(ring, ringTolerance, highQuality);\n }\n if (!checkValidity(simpleRing)) {\n return ring;\n }\n if (simpleRing[simpleRing.length - 1][0] !== simpleRing[0][0] || simpleRing[simpleRing.length - 1][1] !== simpleRing[0][1]) {\n simpleRing.push(simpleRing[0]);\n }\n return simpleRing;\n });\n}\nfunction checkValidity(ring) {\n if (ring.length < 3) return false;\n return !(ring.length === 3 && ring[2][0] === ring[0][0] && ring[2][1] === ring[0][1]);\n}\nvar index_default = simplify2;\nexport {\n index_default as default,\n simplify2 as simplify\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport { coordEach } from \"@turf/meta\";\nimport { isObject } from \"@turf/helpers\";\nimport { getCoords } from \"@turf/invariant\";\nimport { clone } from \"@turf/clone\";\nimport { rhumbDestination } from \"@turf/rhumb-destination\";\nfunction transformTranslate(geojson, distance, direction, options) {\n options = options || {};\n if (!isObject(options)) throw new Error(\"options is invalid\");\n var units = options.units;\n var zTranslation = options.zTranslation;\n var mutate = options.mutate;\n if (!geojson) throw new Error(\"geojson is required\");\n if (distance === void 0 || distance === null || isNaN(distance))\n throw new Error(\"distance is required\");\n if (zTranslation && typeof zTranslation !== \"number\" && isNaN(zTranslation))\n throw new Error(\"zTranslation is not a number\");\n zTranslation = zTranslation !== void 0 ? zTranslation : 0;\n if (distance === 0 && zTranslation === 0) return geojson;\n if (direction === void 0 || direction === null || isNaN(direction))\n throw new Error(\"direction is required\");\n if (distance < 0) {\n distance = -distance;\n direction = direction + 180;\n }\n if (mutate === false || mutate === void 0) geojson = clone(geojson);\n coordEach(geojson, function(pointCoords) {\n var newCoords = getCoords(\n rhumbDestination(pointCoords, distance, direction, { units })\n );\n pointCoords[0] = newCoords[0];\n pointCoords[1] = newCoords[1];\n if (zTranslation && pointCoords.length === 3)\n pointCoords[2] += zTranslation;\n });\n return geojson;\n}\nvar index_default = transformTranslate;\nexport {\n index_default as default,\n transformTranslate\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport * as polyclip from \"polyclip-ts\";\nimport { multiPolygon, polygon } from \"@turf/helpers\";\nimport { geomEach } from \"@turf/meta\";\nfunction union2(features, options = {}) {\n const geoms = [];\n geomEach(features, (geom) => {\n geoms.push(geom.coordinates);\n });\n if (geoms.length < 2) {\n throw new Error(\"Must have at least 2 geometries\");\n }\n const unioned = polyclip.union(geoms[0], ...geoms.slice(1));\n if (unioned.length === 0) return null;\n if (unioned.length === 1) return polygon(unioned[0], options.properties);\n else return multiPolygon(unioned, options.properties);\n}\nvar index_default = union2;\nexport {\n index_default as default,\n union2 as union\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport { flattenEach, featureEach } from \"@turf/meta\";\nimport { polygon as polygon2, featureCollection as featureCollection2 } from \"@turf/helpers\";\n\n// lib/geojson-polygon-self-intersections.js\nimport rbush from \"rbush\";\nfunction geojsonPolygonSelfIntersections(feature, filterFn, useSpatialIndex) {\n if (feature.geometry.type !== \"Polygon\")\n throw new Error(\"The input feature must be a Polygon\");\n if (useSpatialIndex === void 0) useSpatialIndex = 1;\n var coord = feature.geometry.coordinates;\n var output = [];\n var seen = {};\n if (useSpatialIndex) {\n var allEdgesAsRbushTreeItems = [];\n for (var ring0 = 0; ring0 < coord.length; ring0++) {\n for (var edge0 = 0; edge0 < coord[ring0].length - 1; edge0++) {\n allEdgesAsRbushTreeItems.push(rbushTreeItem(ring0, edge0));\n }\n }\n var tree = new rbush();\n tree.load(allEdgesAsRbushTreeItems);\n }\n for (var ringA = 0; ringA < coord.length; ringA++) {\n for (var edgeA = 0; edgeA < coord[ringA].length - 1; edgeA++) {\n if (useSpatialIndex) {\n var bboxOverlaps = tree.search(rbushTreeItem(ringA, edgeA));\n bboxOverlaps.forEach(function(bboxIsect) {\n var ring12 = bboxIsect.ring;\n var edge12 = bboxIsect.edge;\n ifIsectAddToOutput(ringA, edgeA, ring12, edge12);\n });\n } else {\n for (var ring1 = 0; ring1 < coord.length; ring1++) {\n for (var edge1 = 0; edge1 < coord[ring1].length - 1; edge1++) {\n ifIsectAddToOutput(ringA, edgeA, ring1, edge1);\n }\n }\n }\n }\n }\n if (!filterFn)\n output = {\n type: \"Feature\",\n geometry: { type: \"MultiPoint\", coordinates: output }\n };\n return output;\n function ifIsectAddToOutput(ring02, edge02, ring12, edge12) {\n var start0 = coord[ring02][edge02];\n var end0 = coord[ring02][edge02 + 1];\n var start1 = coord[ring12][edge12];\n var end1 = coord[ring12][edge12 + 1];\n var isect = intersect(start0, end0, start1, end1);\n if (isect === null) return;\n var frac0;\n var frac1;\n if (end0[0] !== start0[0]) {\n frac0 = (isect[0] - start0[0]) / (end0[0] - start0[0]);\n } else {\n frac0 = (isect[1] - start0[1]) / (end0[1] - start0[1]);\n }\n if (end1[0] !== start1[0]) {\n frac1 = (isect[0] - start1[0]) / (end1[0] - start1[0]);\n } else {\n frac1 = (isect[1] - start1[1]) / (end1[1] - start1[1]);\n }\n if (frac0 >= 1 || frac0 <= 0 || frac1 >= 1 || frac1 <= 0) return;\n var key = isect;\n var unique = !seen[key];\n if (unique) {\n seen[key] = true;\n }\n if (filterFn) {\n output.push(\n filterFn(\n isect,\n ring02,\n edge02,\n start0,\n end0,\n frac0,\n ring12,\n edge12,\n start1,\n end1,\n frac1,\n unique\n )\n );\n } else {\n output.push(isect);\n }\n }\n function rbushTreeItem(ring, edge) {\n var start = coord[ring][edge];\n var end = coord[ring][edge + 1];\n var minX;\n var maxX;\n var minY;\n var maxY;\n if (start[0] < end[0]) {\n minX = start[0];\n maxX = end[0];\n } else {\n minX = end[0];\n maxX = start[0];\n }\n if (start[1] < end[1]) {\n minY = start[1];\n maxY = end[1];\n } else {\n minY = end[1];\n maxY = start[1];\n }\n return {\n minX,\n minY,\n maxX,\n maxY,\n ring,\n edge\n };\n }\n}\nfunction intersect(start0, end0, start1, end1) {\n if (equalArrays(start0, start1) || equalArrays(start0, end1) || equalArrays(end0, start1) || equalArrays(end1, start1))\n return null;\n var x0 = start0[0], y0 = start0[1], x1 = end0[0], y1 = end0[1], x2 = start1[0], y2 = start1[1], x3 = end1[0], y3 = end1[1];\n var denom = (x0 - x1) * (y2 - y3) - (y0 - y1) * (x2 - x3);\n if (denom === 0) return null;\n var x4 = ((x0 * y1 - y0 * x1) * (x2 - x3) - (x0 - x1) * (x2 * y3 - y2 * x3)) / denom;\n var y4 = ((x0 * y1 - y0 * x1) * (y2 - y3) - (y0 - y1) * (x2 * y3 - y2 * x3)) / denom;\n return [x4, y4];\n}\nfunction equalArrays(array1, array2) {\n if (!array1 || !array2) return false;\n if (array1.length !== array2.length) return false;\n for (var i = 0, l = array1.length; i < l; i++) {\n if (array1[i] instanceof Array && array2[i] instanceof Array) {\n if (!equalArrays(array1[i], array2[i])) return false;\n } else if (array1[i] !== array2[i]) {\n return false;\n }\n }\n return true;\n}\n\n// lib/simplepolygon.js\nimport { area } from \"@turf/area\";\nimport { featureCollection, polygon } from \"@turf/helpers\";\nimport { booleanPointInPolygon } from \"@turf/boolean-point-in-polygon\";\nimport rbush2 from \"rbush\";\nfunction simplepolygon(feature) {\n if (feature.type != \"Feature\")\n throw new Error(\"The input must a geojson object of type Feature\");\n if (feature.geometry === void 0 || feature.geometry == null)\n throw new Error(\n \"The input must a geojson object with a non-empty geometry\"\n );\n if (feature.geometry.type != \"Polygon\")\n throw new Error(\"The input must be a geojson Polygon\");\n var numRings = feature.geometry.coordinates.length;\n var vertices = [];\n for (var i = 0; i < numRings; i++) {\n var ring = feature.geometry.coordinates[i];\n if (!equalArrays2(ring[0], ring[ring.length - 1])) {\n ring.push(ring[0]);\n }\n for (var j = 0; j < ring.length - 1; j++) {\n vertices.push(ring[j]);\n }\n }\n if (!isUnique(vertices))\n throw new Error(\n \"The input polygon may not have duplicate vertices (except for the first and last vertex of each ring)\"\n );\n var numvertices = vertices.length;\n var selfIsectsData = geojsonPolygonSelfIntersections(\n feature,\n function filterFn(isect, ring0, edge0, start0, end0, frac0, ring1, edge1, start1, end1, frac1, unique) {\n return [\n isect,\n ring0,\n edge0,\n start0,\n end0,\n frac0,\n ring1,\n edge1,\n start1,\n end1,\n frac1,\n unique\n ];\n }\n );\n var numSelfIsect = selfIsectsData.length;\n if (numSelfIsect == 0) {\n var outputFeatureArray = [];\n for (var i = 0; i < numRings; i++) {\n outputFeatureArray.push(\n polygon([feature.geometry.coordinates[i]], {\n parent: -1,\n winding: windingOfRing(feature.geometry.coordinates[i])\n })\n );\n }\n var output = featureCollection(outputFeatureArray);\n determineParents();\n setNetWinding();\n return output;\n }\n var pseudoVtxListByRingAndEdge = [];\n var isectList = [];\n for (var i = 0; i < numRings; i++) {\n pseudoVtxListByRingAndEdge.push([]);\n for (var j = 0; j < feature.geometry.coordinates[i].length - 1; j++) {\n pseudoVtxListByRingAndEdge[i].push([\n new PseudoVtx(\n feature.geometry.coordinates[i][modulo(j + 1, feature.geometry.coordinates[i].length - 1)],\n 1,\n [i, j],\n [i, modulo(j + 1, feature.geometry.coordinates[i].length - 1)],\n void 0\n )\n ]);\n isectList.push(\n new Isect(\n feature.geometry.coordinates[i][j],\n [i, modulo(j - 1, feature.geometry.coordinates[i].length - 1)],\n [i, j],\n void 0,\n void 0,\n false,\n true\n )\n );\n }\n }\n for (var i = 0; i < numSelfIsect; i++) {\n pseudoVtxListByRingAndEdge[selfIsectsData[i][1]][selfIsectsData[i][2]].push(\n new PseudoVtx(\n selfIsectsData[i][0],\n selfIsectsData[i][5],\n [selfIsectsData[i][1], selfIsectsData[i][2]],\n [selfIsectsData[i][6], selfIsectsData[i][7]],\n void 0\n )\n );\n if (selfIsectsData[i][11])\n isectList.push(\n new Isect(\n selfIsectsData[i][0],\n [selfIsectsData[i][1], selfIsectsData[i][2]],\n [selfIsectsData[i][6], selfIsectsData[i][7]],\n void 0,\n void 0,\n true,\n true\n )\n );\n }\n var numIsect = isectList.length;\n for (var i = 0; i < pseudoVtxListByRingAndEdge.length; i++) {\n for (var j = 0; j < pseudoVtxListByRingAndEdge[i].length; j++) {\n pseudoVtxListByRingAndEdge[i][j].sort(function(a, b) {\n return a.param < b.param ? -1 : 1;\n });\n }\n }\n var allIsectsAsIsectRbushTreeItem = [];\n for (var i = 0; i < numIsect; i++) {\n allIsectsAsIsectRbushTreeItem.push({\n minX: isectList[i].coord[0],\n minY: isectList[i].coord[1],\n maxX: isectList[i].coord[0],\n maxY: isectList[i].coord[1],\n index: i\n });\n }\n var isectRbushTree = new rbush2();\n isectRbushTree.load(allIsectsAsIsectRbushTreeItem);\n for (var i = 0; i < pseudoVtxListByRingAndEdge.length; i++) {\n for (var j = 0; j < pseudoVtxListByRingAndEdge[i].length; j++) {\n for (var k = 0; k < pseudoVtxListByRingAndEdge[i][j].length; k++) {\n var coordToFind;\n if (k == pseudoVtxListByRingAndEdge[i][j].length - 1) {\n coordToFind = pseudoVtxListByRingAndEdge[i][modulo(j + 1, feature.geometry.coordinates[i].length - 1)][0].coord;\n } else {\n coordToFind = pseudoVtxListByRingAndEdge[i][j][k + 1].coord;\n }\n var IsectRbushTreeItemFound = isectRbushTree.search({\n minX: coordToFind[0],\n minY: coordToFind[1],\n maxX: coordToFind[0],\n maxY: coordToFind[1]\n })[0];\n pseudoVtxListByRingAndEdge[i][j][k].nxtIsectAlongEdgeIn = IsectRbushTreeItemFound.index;\n }\n }\n }\n for (var i = 0; i < pseudoVtxListByRingAndEdge.length; i++) {\n for (var j = 0; j < pseudoVtxListByRingAndEdge[i].length; j++) {\n for (var k = 0; k < pseudoVtxListByRingAndEdge[i][j].length; k++) {\n var coordToFind = pseudoVtxListByRingAndEdge[i][j][k].coord;\n var IsectRbushTreeItemFound = isectRbushTree.search({\n minX: coordToFind[0],\n minY: coordToFind[1],\n maxX: coordToFind[0],\n maxY: coordToFind[1]\n })[0];\n var l = IsectRbushTreeItemFound.index;\n if (l < numvertices) {\n isectList[l].nxtIsectAlongRingAndEdge2 = pseudoVtxListByRingAndEdge[i][j][k].nxtIsectAlongEdgeIn;\n } else {\n if (equalArrays2(\n isectList[l].ringAndEdge1,\n pseudoVtxListByRingAndEdge[i][j][k].ringAndEdgeIn\n )) {\n isectList[l].nxtIsectAlongRingAndEdge1 = pseudoVtxListByRingAndEdge[i][j][k].nxtIsectAlongEdgeIn;\n } else {\n isectList[l].nxtIsectAlongRingAndEdge2 = pseudoVtxListByRingAndEdge[i][j][k].nxtIsectAlongEdgeIn;\n }\n }\n }\n }\n }\n var queue = [];\n var i = 0;\n for (var j = 0; j < numRings; j++) {\n var leftIsect = i;\n for (var k = 0; k < feature.geometry.coordinates[j].length - 1; k++) {\n if (isectList[i].coord[0] < isectList[leftIsect].coord[0]) {\n leftIsect = i;\n }\n i++;\n }\n var isectAfterLeftIsect = isectList[leftIsect].nxtIsectAlongRingAndEdge2;\n for (var k = 0; k < isectList.length; k++) {\n if (isectList[k].nxtIsectAlongRingAndEdge1 == leftIsect || isectList[k].nxtIsectAlongRingAndEdge2 == leftIsect) {\n var isectBeforeLeftIsect = k;\n break;\n }\n }\n var windingAtIsect = isConvex(\n [\n isectList[isectBeforeLeftIsect].coord,\n isectList[leftIsect].coord,\n isectList[isectAfterLeftIsect].coord\n ],\n true\n ) ? 1 : -1;\n queue.push({ isect: leftIsect, parent: -1, winding: windingAtIsect });\n }\n queue.sort(function(a, b) {\n return isectList[a.isect].coord > isectList[b.isect].coord ? -1 : 1;\n });\n var outputFeatureArray = [];\n while (queue.length > 0) {\n var popped = queue.pop();\n var startIsect = popped.isect;\n var currentOutputRingParent = popped.parent;\n var currentOutputRingWinding = popped.winding;\n var currentOutputRing = outputFeatureArray.length;\n var currentOutputRingCoords = [isectList[startIsect].coord];\n var currentIsect = startIsect;\n if (isectList[startIsect].ringAndEdge1Walkable) {\n var walkingRingAndEdge = isectList[startIsect].ringAndEdge1;\n var nxtIsect = isectList[startIsect].nxtIsectAlongRingAndEdge1;\n } else {\n var walkingRingAndEdge = isectList[startIsect].ringAndEdge2;\n var nxtIsect = isectList[startIsect].nxtIsectAlongRingAndEdge2;\n }\n while (!equalArrays2(isectList[startIsect].coord, isectList[nxtIsect].coord)) {\n currentOutputRingCoords.push(isectList[nxtIsect].coord);\n var nxtIsectInQueue = void 0;\n for (var i = 0; i < queue.length; i++) {\n if (queue[i].isect == nxtIsect) {\n nxtIsectInQueue = i;\n break;\n }\n }\n if (nxtIsectInQueue != void 0) {\n queue.splice(nxtIsectInQueue, 1);\n }\n if (equalArrays2(walkingRingAndEdge, isectList[nxtIsect].ringAndEdge1)) {\n walkingRingAndEdge = isectList[nxtIsect].ringAndEdge2;\n isectList[nxtIsect].ringAndEdge2Walkable = false;\n if (isectList[nxtIsect].ringAndEdge1Walkable) {\n var pushing = { isect: nxtIsect };\n if (isConvex(\n [\n isectList[currentIsect].coord,\n isectList[nxtIsect].coord,\n isectList[isectList[nxtIsect].nxtIsectAlongRingAndEdge2].coord\n ],\n currentOutputRingWinding == 1\n )) {\n pushing.parent = currentOutputRingParent;\n pushing.winding = -currentOutputRingWinding;\n } else {\n pushing.parent = currentOutputRing;\n pushing.winding = currentOutputRingWinding;\n }\n queue.push(pushing);\n }\n currentIsect = nxtIsect;\n nxtIsect = isectList[nxtIsect].nxtIsectAlongRingAndEdge2;\n } else {\n walkingRingAndEdge = isectList[nxtIsect].ringAndEdge1;\n isectList[nxtIsect].ringAndEdge1Walkable = false;\n if (isectList[nxtIsect].ringAndEdge2Walkable) {\n var pushing = { isect: nxtIsect };\n if (isConvex(\n [\n isectList[currentIsect].coord,\n isectList[nxtIsect].coord,\n isectList[isectList[nxtIsect].nxtIsectAlongRingAndEdge1].coord\n ],\n currentOutputRingWinding == 1\n )) {\n pushing.parent = currentOutputRingParent;\n pushing.winding = -currentOutputRingWinding;\n } else {\n pushing.parent = currentOutputRing;\n pushing.winding = currentOutputRingWinding;\n }\n queue.push(pushing);\n }\n currentIsect = nxtIsect;\n nxtIsect = isectList[nxtIsect].nxtIsectAlongRingAndEdge1;\n }\n }\n currentOutputRingCoords.push(isectList[nxtIsect].coord);\n outputFeatureArray.push(\n polygon([currentOutputRingCoords], {\n index: currentOutputRing,\n parent: currentOutputRingParent,\n winding: currentOutputRingWinding,\n netWinding: void 0\n })\n );\n }\n var output = featureCollection(outputFeatureArray);\n determineParents();\n setNetWinding();\n function determineParents() {\n var featuresWithoutParent = [];\n for (var i2 = 0; i2 < output.features.length; i2++) {\n if (output.features[i2].properties.parent == -1)\n featuresWithoutParent.push(i2);\n }\n if (featuresWithoutParent.length > 1) {\n for (var i2 = 0; i2 < featuresWithoutParent.length; i2++) {\n var parent = -1;\n var parentArea = Infinity;\n for (var j2 = 0; j2 < output.features.length; j2++) {\n if (featuresWithoutParent[i2] == j2) continue;\n if (booleanPointInPolygon(\n output.features[featuresWithoutParent[i2]].geometry.coordinates[0][0],\n output.features[j2],\n { ignoreBoundary: true }\n )) {\n if (area(output.features[j2]) < parentArea) {\n parent = j2;\n }\n }\n }\n output.features[featuresWithoutParent[i2]].properties.parent = parent;\n }\n }\n }\n function setNetWinding() {\n for (var i2 = 0; i2 < output.features.length; i2++) {\n if (output.features[i2].properties.parent == -1) {\n var netWinding = output.features[i2].properties.winding;\n output.features[i2].properties.netWinding = netWinding;\n setNetWindingOfChildren(i2, netWinding);\n }\n }\n }\n function setNetWindingOfChildren(parent, ParentNetWinding) {\n for (var i2 = 0; i2 < output.features.length; i2++) {\n if (output.features[i2].properties.parent == parent) {\n var netWinding = ParentNetWinding + output.features[i2].properties.winding;\n output.features[i2].properties.netWinding = netWinding;\n setNetWindingOfChildren(i2, netWinding);\n }\n }\n }\n return output;\n}\nvar PseudoVtx = function(coord, param, ringAndEdgeIn, ringAndEdgeOut, nxtIsectAlongEdgeIn) {\n this.coord = coord;\n this.param = param;\n this.ringAndEdgeIn = ringAndEdgeIn;\n this.ringAndEdgeOut = ringAndEdgeOut;\n this.nxtIsectAlongEdgeIn = nxtIsectAlongEdgeIn;\n};\nvar Isect = function(coord, ringAndEdge1, ringAndEdge2, nxtIsectAlongRingAndEdge1, nxtIsectAlongRingAndEdge2, ringAndEdge1Walkable, ringAndEdge2Walkable) {\n this.coord = coord;\n this.ringAndEdge1 = ringAndEdge1;\n this.ringAndEdge2 = ringAndEdge2;\n this.nxtIsectAlongRingAndEdge1 = nxtIsectAlongRingAndEdge1;\n this.nxtIsectAlongRingAndEdge2 = nxtIsectAlongRingAndEdge2;\n this.ringAndEdge1Walkable = ringAndEdge1Walkable;\n this.ringAndEdge2Walkable = ringAndEdge2Walkable;\n};\nfunction isConvex(pts, righthanded) {\n if (typeof righthanded === \"undefined\") righthanded = true;\n if (pts.length != 3)\n throw new Error(\"This function requires an array of three points [x,y]\");\n var d = (pts[1][0] - pts[0][0]) * (pts[2][1] - pts[0][1]) - (pts[1][1] - pts[0][1]) * (pts[2][0] - pts[0][0]);\n return d >= 0 == righthanded;\n}\nfunction windingOfRing(ring) {\n var leftVtx = 0;\n for (var i = 0; i < ring.length - 1; i++) {\n if (ring[i][0] < ring[leftVtx][0]) leftVtx = i;\n }\n if (isConvex(\n [\n ring[modulo(leftVtx - 1, ring.length - 1)],\n ring[leftVtx],\n ring[modulo(leftVtx + 1, ring.length - 1)]\n ],\n true\n )) {\n var winding = 1;\n } else {\n var winding = -1;\n }\n return winding;\n}\nfunction equalArrays2(array1, array2) {\n if (!array1 || !array2) return false;\n if (array1.length != array2.length) return false;\n for (var i = 0, l = array1.length; i < l; i++) {\n if (array1[i] instanceof Array && array2[i] instanceof Array) {\n if (!equalArrays2(array1[i], array2[i])) return false;\n } else if (array1[i] != array2[i]) {\n return false;\n }\n }\n return true;\n}\nfunction modulo(n, m) {\n return (n % m + m) % m;\n}\nfunction isUnique(array) {\n var u = {};\n var isUnique2 = 1;\n for (var i = 0, l = array.length; i < l; ++i) {\n if (Object.prototype.hasOwnProperty.call(u, array[i])) {\n isUnique2 = 0;\n break;\n }\n u[array[i]] = 1;\n }\n return isUnique2;\n}\n\n// index.ts\nfunction unkinkPolygon(geojson) {\n var features = [];\n flattenEach(geojson, function(feature) {\n if (feature.geometry.type !== \"Polygon\") return;\n featureEach(simplepolygon(feature), function(poly) {\n features.push(polygon2(poly.geometry.coordinates, feature.properties));\n });\n });\n return featureCollection2(features);\n}\nvar index_default = unkinkPolygon;\nexport {\n index_default as default,\n unkinkPolygon\n};\n//# sourceMappingURL=index.js.map","import type {\n GeoEditorOptionsRequired,\n DrawMode,\n EditMode,\n HelperMode,\n} from './types';\n\n/**\n * Default draw modes available in the toolbar\n */\nexport const DEFAULT_DRAW_MODES: DrawMode[] = [\n 'polygon',\n 'line',\n 'rectangle',\n 'circle',\n 'marker',\n];\n\n/**\n * Default edit modes available in the toolbar\n */\nexport const DEFAULT_EDIT_MODES: EditMode[] = [\n 'select',\n 'drag',\n 'change',\n 'rotate',\n 'cut',\n 'delete',\n // Advanced modes\n 'scale',\n 'copy',\n 'split',\n 'union',\n 'difference',\n 'simplify',\n 'lasso',\n];\n\n/**\n * Advanced edit modes (our implementations)\n */\nexport const ADVANCED_EDIT_MODES: EditMode[] = [\n 'select',\n 'scale',\n 'copy',\n 'split',\n 'union',\n 'difference',\n 'simplify',\n 'lasso',\n];\n\n/**\n * Default helper modes\n */\nexport const DEFAULT_HELPER_MODES: HelperMode[] = ['snapping', 'measurements'];\n\n/**\n * Default options for GeoEditor\n */\nexport const DEFAULT_OPTIONS: GeoEditorOptionsRequired = {\n position: 'top-left',\n collapsed: false,\n drawModes: DEFAULT_DRAW_MODES,\n editModes: DEFAULT_EDIT_MODES,\n helperModes: DEFAULT_HELPER_MODES,\n toolbarOrientation: 'vertical',\n showLabels: false,\n simplifyTolerance: 0.001,\n snappingEnabled: true,\n measurementsEnabled: false,\n hideGeomanControl: true,\n onFeatureCreate: () => {},\n onFeatureEdit: () => {},\n onFeatureDelete: () => {},\n onSelectionChange: () => {},\n onModeChange: () => {},\n};\n\n/**\n * CSS class prefix for the plugin\n */\nexport const CSS_PREFIX = 'geo-editor';\n\n/**\n * Source and layer IDs used by the plugin\n */\nexport const INTERNAL_IDS = {\n LASSO_SOURCE: 'geo-editor-lasso-source',\n LASSO_LAYER: 'geo-editor-lasso-layer',\n LASSO_LINE_LAYER: 'geo-editor-lasso-line-layer',\n SCALE_HANDLES_SOURCE: 'geo-editor-scale-handles-source',\n SCALE_HANDLES_LAYER: 'geo-editor-scale-handles-layer',\n SPLIT_LINE_SOURCE: 'geo-editor-split-line-source',\n SPLIT_LINE_LAYER: 'geo-editor-split-line-layer',\n SELECTION_SOURCE: 'geo-editor-selection-source',\n SELECTION_FILL_LAYER: 'geo-editor-selection-fill-layer',\n SELECTION_LINE_LAYER: 'geo-editor-selection-line-layer',\n} as const;\n\n/**\n * Default scale handle options\n */\nexport const SCALE_HANDLE_DEFAULTS = {\n handleSize: 10,\n handleColor: '#3388ff',\n handleBorderColor: '#ffffff',\n handleBorderWidth: 2,\n minScale: 0.1,\n maxScale: 10,\n};\n\n/**\n * Default simplification options\n */\nexport const SIMPLIFY_DEFAULTS = {\n tolerance: 0.001,\n highQuality: false,\n mutate: false,\n};\n\n/**\n * Default copy options\n */\nexport const COPY_DEFAULTS = {\n offset: [0.0005, 0.0005] as [number, number],\n generateNewIds: true,\n};\n\n/**\n * Keyboard shortcuts\n */\nexport const KEYBOARD_SHORTCUTS = {\n COPY: 'c',\n PASTE: 'v',\n DELETE: 'Delete',\n ESCAPE: 'Escape',\n UNDO: 'z',\n REDO: 'y',\n} as const;\n","import type { Feature, Polygon, LineString, Point, Position } from 'geojson';\nimport * as turf from '@turf/turf';\n\n/**\n * Generate a unique ID for a feature\n */\nexport function generateFeatureId(): string {\n return `feature_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n}\n\n/**\n * Check if a feature has a valid geometry\n */\nexport function isValidGeometry(feature: Feature): boolean {\n if (!feature || !feature.geometry) return false;\n if (!('coordinates' in feature.geometry)) return false;\n\n try {\n // Try to get bbox - this will fail for invalid geometries\n turf.bbox(feature);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Check if a feature is a polygon\n */\nexport function isPolygon(\n feature: Feature\n): feature is Feature<Polygon> {\n return (\n feature.geometry.type === 'Polygon' ||\n feature.geometry.type === 'MultiPolygon'\n );\n}\n\n/**\n * Check if a feature is a line\n */\nexport function isLine(\n feature: Feature\n): feature is Feature<LineString> {\n return (\n feature.geometry.type === 'LineString' ||\n feature.geometry.type === 'MultiLineString'\n );\n}\n\n/**\n * Check if a feature is a point\n */\nexport function isPoint(feature: Feature): feature is Feature<Point> {\n return feature.geometry.type === 'Point';\n}\n\n/**\n * Get the feature ID, generating one if it doesn't exist\n */\nexport function getFeatureId(feature: Feature): string {\n if (feature.id !== undefined) {\n return String(feature.id);\n }\n if (feature.properties?.id !== undefined) {\n return String(feature.properties.id);\n }\n return generateFeatureId();\n}\n\n/**\n * Ensure a feature has an ID\n */\nexport function ensureFeatureId(feature: Feature): Feature {\n if (feature.id === undefined) {\n return {\n ...feature,\n id: generateFeatureId(),\n };\n }\n return feature;\n}\n\n/**\n * Calculate the distance between two points in kilometers\n */\nexport function distanceBetweenPoints(\n point1: Position,\n point2: Position\n): number {\n const from = turf.point(point1);\n const to = turf.point(point2);\n return turf.distance(from, to, { units: 'kilometers' });\n}\n\n/**\n * Calculate the bearing between two points in degrees\n */\nexport function bearingBetweenPoints(\n point1: Position,\n point2: Position\n): number {\n const from = turf.point(point1);\n const to = turf.point(point2);\n return turf.bearing(from, to);\n}\n\n/**\n * Get the center point of a feature\n */\nexport function getCenter(feature: Feature): Position {\n const centroid = turf.centroid(feature);\n return centroid.geometry.coordinates;\n}\n\n/**\n * Get the bounding box center of a feature\n */\nexport function getBBoxCenter(feature: Feature): Position {\n const bbox = turf.bbox(feature);\n return [(bbox[0] + bbox[2]) / 2, (bbox[1] + bbox[3]) / 2];\n}\n\n/**\n * Calculate the scale factor between two bounding boxes\n */\nexport function calculateScaleFactor(\n originalBBox: [number, number, number, number],\n newBBox: [number, number, number, number]\n): number {\n const originalWidth = originalBBox[2] - originalBBox[0];\n const originalHeight = originalBBox[3] - originalBBox[1];\n const newWidth = newBBox[2] - newBBox[0];\n const newHeight = newBBox[3] - newBBox[1];\n\n const widthRatio = newWidth / originalWidth;\n const heightRatio = newHeight / originalHeight;\n\n return (widthRatio + heightRatio) / 2;\n}\n\n/**\n * Clamp a value between min and max\n */\nexport function clamp(value: number, min: number, max: number): number {\n return Math.min(Math.max(value, min), max);\n}\n\n/**\n * Convert degrees to radians\n */\nexport function degreesToRadians(degrees: number): number {\n return (degrees * Math.PI) / 180;\n}\n\n/**\n * Convert radians to degrees\n */\nexport function radiansToDegrees(radians: number): number {\n return (radians * 180) / Math.PI;\n}\n\n/**\n * Round coordinates to a specified precision\n */\nexport function roundCoordinates(\n coordinates: Position,\n precision: number = 6\n): Position {\n return [\n Number(coordinates[0].toFixed(precision)),\n Number(coordinates[1].toFixed(precision)),\n ];\n}\n\n/**\n * Check if two positions are approximately equal\n */\nexport function positionsEqual(\n pos1: Position,\n pos2: Position,\n tolerance: number = 1e-9\n): boolean {\n return (\n Math.abs(pos1[0] - pos2[0]) < tolerance &&\n Math.abs(pos1[1] - pos2[1]) < tolerance\n );\n}\n\n/**\n * Get vertex count of a feature\n */\nexport function getVertexCount(feature: Feature): number {\n return turf.coordAll(feature).length;\n}\n\n/**\n * Deep clone a feature\n */\nexport function cloneFeature<T extends Feature>(feature: T): T {\n return JSON.parse(JSON.stringify(feature)) as T;\n}\n","import type { Feature } from 'geojson';\nimport * as turf from '@turf/turf';\nimport type { CopyOptions } from '../core/types';\nimport { COPY_DEFAULTS } from '../core/constants';\nimport { generateFeatureId } from '../utils/geometryUtils';\n\n/**\n * Handles copy/paste operations for features\n */\nexport class CopyFeature {\n private options: Required<CopyOptions>;\n\n constructor(options: CopyOptions = {}) {\n this.options = {\n offset: options.offset ?? COPY_DEFAULTS.offset,\n generateNewIds: options.generateNewIds ?? COPY_DEFAULTS.generateNewIds,\n };\n }\n\n /**\n * Copy a single feature with optional offset\n */\n copy(feature: Feature, offset?: [number, number]): Feature {\n const cloned = turf.clone(feature);\n const actualOffset = offset ?? this.options.offset;\n\n // Generate new ID if required\n if (this.options.generateNewIds) {\n cloned.id = generateFeatureId();\n if (cloned.properties) {\n cloned.properties = { ...cloned.properties, id: cloned.id };\n }\n }\n\n // Apply offset if provided\n if (actualOffset[0] !== 0 || actualOffset[1] !== 0) {\n // Calculate distance and bearing from offset\n const distance =\n Math.sqrt(actualOffset[0] ** 2 + actualOffset[1] ** 2) * 111; // Approximate km per degree\n const bearing =\n (Math.atan2(actualOffset[0], actualOffset[1]) * 180) / Math.PI;\n\n return turf.transformTranslate(cloned, distance, bearing, {\n units: 'kilometers',\n });\n }\n\n return cloned;\n }\n\n /**\n * Copy multiple features maintaining relative positions\n */\n copyMultiple(features: Feature[], offset?: [number, number]): Feature[] {\n return features.map((f) => this.copy(f, offset));\n }\n\n /**\n * Copy features to a specific location (centered on the location)\n */\n copyToLocation(features: Feature[], targetCenter: [number, number]): Feature[] {\n if (features.length === 0) return [];\n\n // Calculate current center of all features\n const collection = turf.featureCollection(features);\n const currentCenter = turf.centroid(collection);\n const currentCoords = currentCenter.geometry.coordinates;\n\n // Calculate offset needed\n const offsetLng = targetCenter[0] - currentCoords[0];\n const offsetLat = targetCenter[1] - currentCoords[1];\n\n return features.map((feature) => {\n const cloned = turf.clone(feature);\n\n if (this.options.generateNewIds) {\n cloned.id = generateFeatureId();\n if (cloned.properties) {\n cloned.properties = { ...cloned.properties, id: cloned.id };\n }\n }\n\n // Translate to new location\n const distance = Math.sqrt(offsetLng ** 2 + offsetLat ** 2) * 111;\n const bearing = (Math.atan2(offsetLng, offsetLat) * 180) / Math.PI;\n\n return turf.transformTranslate(cloned, distance, bearing, {\n units: 'kilometers',\n });\n });\n }\n\n /**\n * Update the default offset\n */\n setOffset(offset: [number, number]): void {\n this.options.offset = offset;\n }\n\n /**\n * Get the current offset\n */\n getOffset(): [number, number] {\n return this.options.offset;\n }\n}\n","import type { Feature } from 'geojson';\nimport * as turf from '@turf/turf';\nimport type { SimplifyOptions, SimplifyResult } from '../core/types';\nimport { SIMPLIFY_DEFAULTS } from '../core/constants';\nimport { getVertexCount } from '../utils/geometryUtils';\n\n/**\n * Handles line/polygon simplification using Douglas-Peucker algorithm\n */\nexport class SimplifyFeature {\n private defaultOptions: Required<SimplifyOptions>;\n\n constructor(options?: Partial<SimplifyOptions>) {\n this.defaultOptions = {\n tolerance: options?.tolerance ?? SIMPLIFY_DEFAULTS.tolerance,\n highQuality: options?.highQuality ?? SIMPLIFY_DEFAULTS.highQuality,\n mutate: options?.mutate ?? SIMPLIFY_DEFAULTS.mutate,\n };\n }\n\n /**\n * Simplify a geometry using Douglas-Peucker algorithm\n */\n simplify<T extends Feature>(\n feature: T,\n options?: Partial<SimplifyOptions>\n ): T {\n const opts = {\n ...this.defaultOptions,\n ...options,\n };\n\n return turf.simplify(feature, opts) as T;\n }\n\n /**\n * Simplify and return detailed result with statistics\n */\n simplifyWithStats(\n feature: Feature,\n options?: Partial<SimplifyOptions>\n ): SimplifyResult {\n const opts = {\n ...this.defaultOptions,\n ...options,\n };\n\n const verticesBefore = getVertexCount(feature);\n const result = turf.simplify(feature, opts);\n const verticesAfter = getVertexCount(result);\n\n const reductionPercent =\n verticesBefore > 0\n ? ((verticesBefore - verticesAfter) / verticesBefore) * 100\n : 0;\n\n return {\n result,\n original: feature,\n verticesBefore,\n verticesAfter,\n reductionPercent,\n };\n }\n\n /**\n * Get simplification statistics without applying\n */\n getSimplificationStats(\n feature: Feature,\n tolerance: number\n ): {\n before: number;\n after: number;\n reduction: number;\n } {\n const before = getVertexCount(feature);\n const simplified = this.simplify(feature, { tolerance });\n const after = getVertexCount(simplified);\n\n return {\n before,\n after,\n reduction: before > 0 ? ((before - after) / before) * 100 : 0,\n };\n }\n\n /**\n * Preview simplification at different tolerance levels\n */\n previewTolerances(\n feature: Feature,\n tolerances: number[]\n ): Map<number, SimplifyResult> {\n const results = new Map<number, SimplifyResult>();\n\n for (const tolerance of tolerances) {\n results.set(tolerance, this.simplifyWithStats(feature, { tolerance }));\n }\n\n return results;\n }\n\n /**\n * Get suggested tolerance values based on feature complexity\n */\n getSuggestedTolerances(feature: Feature): number[] {\n const vertexCount = getVertexCount(feature);\n\n // Base tolerances\n const baseTolerances = [0.0001, 0.0005, 0.001, 0.005, 0.01];\n\n // Adjust based on complexity\n if (vertexCount > 1000) {\n return [0.001, 0.005, 0.01, 0.05, 0.1];\n } else if (vertexCount > 100) {\n return [0.0005, 0.001, 0.005, 0.01, 0.05];\n }\n\n return baseTolerances;\n }\n\n /**\n * Find optimal tolerance for a target vertex reduction\n */\n findOptimalTolerance(\n feature: Feature,\n targetReduction: number\n ): { tolerance: number; result: SimplifyResult } {\n const tolerances = [\n 0.00001, 0.00005, 0.0001, 0.0005, 0.001, 0.005, 0.01, 0.05, 0.1,\n ];\n\n let bestTolerance = tolerances[0];\n let bestResult = this.simplifyWithStats(feature, {\n tolerance: bestTolerance,\n });\n let bestDiff = Math.abs(bestResult.reductionPercent - targetReduction);\n\n for (const tolerance of tolerances.slice(1)) {\n const result = this.simplifyWithStats(feature, { tolerance });\n const diff = Math.abs(result.reductionPercent - targetReduction);\n\n if (diff < bestDiff) {\n bestDiff = diff;\n bestTolerance = tolerance;\n bestResult = result;\n }\n }\n\n return { tolerance: bestTolerance, result: bestResult };\n }\n\n /**\n * Set default tolerance\n */\n setDefaultTolerance(tolerance: number): void {\n this.defaultOptions.tolerance = tolerance;\n }\n\n /**\n * Get default tolerance\n */\n getDefaultTolerance(): number {\n return this.defaultOptions.tolerance;\n }\n}\n","import type { Feature, Polygon, MultiPolygon } from 'geojson';\nimport * as turf from '@turf/turf';\nimport type { UnionOptions, UnionResult } from '../core/types';\nimport { generateFeatureId } from '../utils/geometryUtils';\n\n/**\n * Handles polygon union/merge operations\n */\nexport class UnionFeature {\n /**\n * Merge multiple polygons into one\n */\n union(\n features: Feature<Polygon | MultiPolygon>[],\n options?: UnionOptions\n ): UnionResult {\n if (features.length === 0) {\n return {\n result: null,\n originals: [],\n success: false,\n error: 'No features provided',\n };\n }\n\n if (features.length === 1) {\n const cloned = turf.clone(features[0]);\n cloned.id = generateFeatureId();\n if (options?.properties) {\n cloned.properties = { ...cloned.properties, ...options.properties };\n }\n return {\n result: cloned,\n originals: features,\n success: true,\n };\n }\n\n try {\n const collection = turf.featureCollection(features);\n const result = turf.union(collection) as Feature<\n Polygon | MultiPolygon\n > | null;\n\n if (result) {\n result.id = generateFeatureId();\n if (options?.properties) {\n result.properties = { ...result.properties, ...options.properties };\n }\n }\n\n return {\n result,\n originals: features,\n success: result !== null,\n error: result === null ? 'Union operation returned null' : undefined,\n };\n } catch (error) {\n return {\n result: null,\n originals: features,\n success: false,\n error: `Union operation failed: ${error instanceof Error ? error.message : 'Unknown error'}`,\n };\n }\n }\n\n /**\n * Check if polygons can be merged\n */\n canMerge(features: Feature<Polygon | MultiPolygon>[]): {\n canMerge: boolean;\n reason?: string;\n } {\n if (features.length < 2) {\n return {\n canMerge: false,\n reason: 'Need at least 2 polygons to merge',\n };\n }\n\n // Check for valid polygons\n for (const feature of features) {\n if (\n feature.geometry.type !== 'Polygon' &&\n feature.geometry.type !== 'MultiPolygon'\n ) {\n return {\n canMerge: false,\n reason: 'All features must be polygons',\n };\n }\n }\n\n return { canMerge: true };\n }\n\n /**\n * Check if any polygons overlap\n */\n hasOverlap(features: Feature<Polygon | MultiPolygon>[]): boolean {\n for (let i = 0; i < features.length; i++) {\n for (let j = i + 1; j < features.length; j++) {\n try {\n if (\n turf.booleanOverlap(features[i], features[j]) ||\n turf.booleanIntersects(features[i], features[j])\n ) {\n return true;\n }\n } catch {\n // Continue checking\n }\n }\n }\n return false;\n }\n\n /**\n * Get the combined area of all polygons\n */\n getCombinedArea(features: Feature<Polygon | MultiPolygon>[]): number {\n return features.reduce((total, feature) => {\n try {\n return total + turf.area(feature);\n } catch {\n return total;\n }\n }, 0);\n }\n\n /**\n * Get the area of the union result\n */\n getUnionArea(features: Feature<Polygon | MultiPolygon>[]): number | null {\n const result = this.union(features);\n if (result.success && result.result) {\n try {\n return turf.area(result.result);\n } catch {\n return null;\n }\n }\n return null;\n }\n}\n","import type { Feature, Polygon, MultiPolygon } from 'geojson';\nimport * as turf from '@turf/turf';\nimport type { DifferenceOptions, DifferenceResult } from '../core/types';\nimport { generateFeatureId } from '../utils/geometryUtils';\n\n/**\n * Handles polygon difference/subtraction operations\n */\nexport class DifferenceFeature {\n /**\n * Subtract one or more polygons from a base polygon\n */\n difference(\n base: Feature<Polygon | MultiPolygon>,\n subtract: Feature<Polygon | MultiPolygon>[],\n options?: DifferenceOptions\n ): DifferenceResult {\n if (subtract.length === 0) {\n const cloned = turf.clone(base);\n cloned.id = generateFeatureId();\n return {\n result: cloned,\n base,\n subtracted: [],\n success: true,\n };\n }\n\n try {\n let result: Feature<Polygon | MultiPolygon> | null = turf.clone(base);\n\n for (const poly of subtract) {\n if (!result) break;\n\n const collection = turf.featureCollection([result, poly]);\n result = turf.difference(collection) as Feature<\n Polygon | MultiPolygon\n > | null;\n }\n\n if (result) {\n result.id = generateFeatureId();\n if (options?.properties) {\n result.properties = { ...result.properties, ...options.properties };\n }\n }\n\n return {\n result,\n base,\n subtracted: subtract,\n success: true,\n };\n } catch (error) {\n return {\n result: null,\n base,\n subtracted: subtract,\n success: false,\n error: `Difference operation failed: ${error instanceof Error ? error.message : 'Unknown error'}`,\n };\n }\n }\n\n /**\n * Check if subtraction can be performed\n */\n canSubtract(\n base: Feature<Polygon | MultiPolygon>,\n subtract: Feature<Polygon | MultiPolygon>\n ): {\n canSubtract: boolean;\n overlap: boolean;\n reason?: string;\n } {\n // Check types\n if (\n base.geometry.type !== 'Polygon' &&\n base.geometry.type !== 'MultiPolygon'\n ) {\n return {\n canSubtract: false,\n overlap: false,\n reason: 'Base must be a polygon',\n };\n }\n\n if (\n subtract.geometry.type !== 'Polygon' &&\n subtract.geometry.type !== 'MultiPolygon'\n ) {\n return {\n canSubtract: false,\n overlap: false,\n reason: 'Subtract feature must be a polygon',\n };\n }\n\n // Check for overlap\n try {\n const hasOverlap =\n turf.booleanOverlap(base, subtract) ||\n turf.booleanContains(base, subtract) ||\n turf.booleanIntersects(base, subtract);\n\n if (!hasOverlap) {\n return {\n canSubtract: false,\n overlap: false,\n reason: 'Polygons do not overlap',\n };\n }\n\n return {\n canSubtract: true,\n overlap: true,\n };\n } catch {\n return {\n canSubtract: false,\n overlap: false,\n reason: 'Could not determine overlap',\n };\n }\n }\n\n /**\n * Get the area that would be removed\n */\n getSubtractedArea(\n base: Feature<Polygon | MultiPolygon>,\n subtract: Feature<Polygon | MultiPolygon>\n ): number | null {\n try {\n // Get intersection area\n const collection = turf.featureCollection([base, subtract]);\n const intersection = turf.intersect(collection);\n\n if (intersection) {\n return turf.area(intersection);\n }\n return 0;\n } catch {\n return null;\n }\n }\n\n /**\n * Preview the result without applying\n */\n preview(\n base: Feature<Polygon | MultiPolygon>,\n subtract: Feature<Polygon | MultiPolygon>[]\n ): Feature<Polygon | MultiPolygon> | null {\n const result = this.difference(base, subtract);\n return result.result;\n }\n\n /**\n * Create a hole in a polygon at a specific location\n */\n createHole(\n polygon: Feature<Polygon>,\n hole: Feature<Polygon>\n ): Feature<Polygon | MultiPolygon> | null {\n // Check if hole is completely inside polygon\n try {\n if (!turf.booleanContains(polygon, hole)) {\n console.warn('Hole must be completely inside the polygon');\n return null;\n }\n\n const result = this.difference(polygon, [hole]);\n return result.result;\n } catch {\n return null;\n }\n }\n}\n","import type { Feature, Position } from 'geojson';\nimport type { Map as MapLibreMap, GeoJSONSource } from 'maplibre-gl';\nimport * as turf from '@turf/turf';\nimport type { ScaleOptions, ScaleHandle, ScaleHandlePosition } from '../core/types';\nimport { SCALE_HANDLE_DEFAULTS, INTERNAL_IDS } from '../core/constants';\nimport { generateFeatureId, clamp } from '../utils/geometryUtils';\n\n/**\n * Handles interactive scaling of features\n */\nexport class ScaleFeature {\n private map: MapLibreMap | null = null;\n private options: Required<ScaleOptions>;\n private activeFeature: Feature | null = null;\n private originalFeature: Feature | null = null;\n private handles: ScaleHandle[] = [];\n private activeHandle: ScaleHandlePosition | null = null;\n private startPoint: Position | null = null;\n private onScaleCallback: ((feature: Feature, factor: number) => void) | null =\n null;\n\n constructor(options: ScaleOptions = {}) {\n this.options = {\n maintainAspectRatio: options.maintainAspectRatio ?? true,\n scaleFromCenter: options.scaleFromCenter ?? true,\n minScale: options.minScale ?? SCALE_HANDLE_DEFAULTS.minScale,\n maxScale: options.maxScale ?? SCALE_HANDLE_DEFAULTS.maxScale,\n };\n }\n\n /**\n * Initialize with map instance\n */\n init(map: MapLibreMap): void {\n this.map = map;\n }\n\n /**\n * Scale a feature by a given factor\n */\n scale(\n feature: Feature,\n factor: number,\n origin?: Position\n ): Feature {\n const clampedFactor = clamp(\n factor,\n this.options.minScale,\n this.options.maxScale\n );\n\n const center =\n origin || (turf.centroid(feature).geometry.coordinates as Position);\n\n const scaled = turf.transformScale(feature, clampedFactor, {\n origin: center as [number, number],\n });\n\n scaled.id = feature.id || generateFeatureId();\n scaled.properties = { ...feature.properties };\n\n return scaled;\n }\n\n /**\n * Scale feature by dragging from a specific handle\n */\n scaleFromHandle(\n feature: Feature,\n handlePosition: ScaleHandlePosition,\n startPoint: Position,\n currentPoint: Position\n ): Feature {\n const bbox = turf.bbox(feature) as [number, number, number, number];\n const center = turf.centroid(feature).geometry.coordinates;\n\n // Calculate distances from center\n const startDistance = this.distanceFromCenter(startPoint, center);\n const currentDistance = this.distanceFromCenter(currentPoint, center);\n\n // Calculate scale factor\n let factor = currentDistance / startDistance;\n factor = clamp(factor, this.options.minScale, this.options.maxScale);\n\n // Determine origin based on handle position and settings\n let origin: Position;\n if (this.options.scaleFromCenter) {\n origin = center;\n } else {\n origin = this.getOppositeCorner(bbox, handlePosition);\n }\n\n return this.scale(feature, factor, origin);\n }\n\n /**\n * Create scale handles for a feature\n */\n createHandles(feature: Feature): ScaleHandle[] {\n const bbox = turf.bbox(feature);\n const [minX, minY, maxX, maxY] = bbox;\n const midX = (minX + maxX) / 2;\n const midY = (minY + maxY) / 2;\n\n this.handles = [\n { position: 'nw', coordinates: [minX, maxY] },\n { position: 'n', coordinates: [midX, maxY] },\n { position: 'ne', coordinates: [maxX, maxY] },\n { position: 'e', coordinates: [maxX, midY] },\n { position: 'se', coordinates: [maxX, minY] },\n { position: 's', coordinates: [midX, minY] },\n { position: 'sw', coordinates: [minX, minY] },\n { position: 'w', coordinates: [minX, midY] },\n ];\n\n return this.handles;\n }\n\n /**\n * Start scaling operation\n */\n startScale(\n feature: Feature,\n handlePosition: ScaleHandlePosition,\n startPoint: Position,\n onScale?: (feature: Feature, factor: number) => void\n ): void {\n this.activeFeature = turf.clone(feature);\n this.originalFeature = turf.clone(feature);\n this.activeHandle = handlePosition;\n this.startPoint = startPoint;\n this.onScaleCallback = onScale || null;\n\n this.showHandles(feature);\n }\n\n /**\n * Show scale handles without starting a drag operation\n */\n showHandlesForFeature(feature: Feature): void {\n this.showHandles(feature);\n }\n\n /**\n * Update scaling during drag\n */\n updateScale(currentPoint: Position): Feature | null {\n if (\n !this.activeFeature ||\n !this.originalFeature ||\n !this.activeHandle ||\n !this.startPoint\n ) {\n return null;\n }\n\n const scaled = this.scaleFromHandle(\n this.originalFeature,\n this.activeHandle,\n this.startPoint,\n currentPoint\n );\n\n this.activeFeature = scaled;\n this.updateHandlePositions(scaled);\n\n // Calculate factor for callback\n const originalBbox = turf.bbox(this.originalFeature);\n const scaledBbox = turf.bbox(scaled);\n const factor =\n (scaledBbox[2] - scaledBbox[0]) / (originalBbox[2] - originalBbox[0]);\n\n if (this.onScaleCallback) {\n this.onScaleCallback(scaled, factor);\n }\n\n return scaled;\n }\n\n /**\n * End scaling operation\n */\n endScale(): { feature: Feature; factor: number } | null {\n if (!this.activeFeature || !this.originalFeature) {\n return null;\n }\n\n const originalBbox = turf.bbox(this.originalFeature);\n const scaledBbox = turf.bbox(this.activeFeature);\n const factor =\n (scaledBbox[2] - scaledBbox[0]) / (originalBbox[2] - originalBbox[0]);\n\n const result = {\n feature: this.activeFeature,\n factor,\n };\n\n this.hideHandles();\n this.activeFeature = null;\n this.originalFeature = null;\n this.activeHandle = null;\n this.startPoint = null;\n this.onScaleCallback = null;\n\n return result;\n }\n\n /**\n * Cancel scaling operation\n */\n cancelScale(): void {\n this.hideHandles();\n this.activeFeature = null;\n this.originalFeature = null;\n this.activeHandle = null;\n this.startPoint = null;\n this.onScaleCallback = null;\n }\n\n /**\n * Show scale handles on the map\n */\n private showHandles(feature: Feature): void {\n if (!this.map) return;\n\n const handles = this.createHandles(feature);\n const handleFeatures = handles.map((h) =>\n turf.point(h.coordinates, { position: h.position })\n );\n\n // Add source if it doesn't exist\n if (!this.map.getSource(INTERNAL_IDS.SCALE_HANDLES_SOURCE)) {\n this.map.addSource(INTERNAL_IDS.SCALE_HANDLES_SOURCE, {\n type: 'geojson',\n data: turf.featureCollection(handleFeatures),\n });\n\n this.map.addLayer({\n id: INTERNAL_IDS.SCALE_HANDLES_LAYER,\n type: 'circle',\n source: INTERNAL_IDS.SCALE_HANDLES_SOURCE,\n paint: {\n 'circle-radius': SCALE_HANDLE_DEFAULTS.handleSize / 2,\n 'circle-color': SCALE_HANDLE_DEFAULTS.handleColor,\n 'circle-stroke-color': SCALE_HANDLE_DEFAULTS.handleBorderColor,\n 'circle-stroke-width': SCALE_HANDLE_DEFAULTS.handleBorderWidth,\n },\n });\n } else {\n const source = this.map.getSource(INTERNAL_IDS.SCALE_HANDLES_SOURCE) as GeoJSONSource | undefined;\n if (source) {\n source.setData(turf.featureCollection(handleFeatures));\n }\n }\n }\n\n /**\n * Update handle positions after scaling\n */\n private updateHandlePositions(feature: Feature): void {\n if (!this.map) return;\n\n const handles = this.createHandles(feature);\n const handleFeatures = handles.map((h) =>\n turf.point(h.coordinates, { position: h.position })\n );\n\n const source = this.map.getSource(INTERNAL_IDS.SCALE_HANDLES_SOURCE) as GeoJSONSource | undefined;\n if (source) {\n source.setData(turf.featureCollection(handleFeatures));\n }\n }\n\n /**\n * Hide scale handles from the map\n */\n private hideHandles(): void {\n if (!this.map) return;\n\n if (this.map.getLayer(INTERNAL_IDS.SCALE_HANDLES_LAYER)) {\n this.map.removeLayer(INTERNAL_IDS.SCALE_HANDLES_LAYER);\n }\n if (this.map.getSource(INTERNAL_IDS.SCALE_HANDLES_SOURCE)) {\n this.map.removeSource(INTERNAL_IDS.SCALE_HANDLES_SOURCE);\n }\n }\n\n /**\n * Calculate distance from a point to the center\n */\n private distanceFromCenter(point: Position, center: Position): number {\n return Math.sqrt(\n Math.pow(point[0] - center[0], 2) + Math.pow(point[1] - center[1], 2)\n );\n }\n\n /**\n * Get the opposite corner for scaling origin\n */\n private getOppositeCorner(\n bbox: [number, number, number, number],\n handlePosition: ScaleHandlePosition\n ): Position {\n const [minX, minY, maxX, maxY] = bbox;\n const midX = (minX + maxX) / 2;\n const midY = (minY + maxY) / 2;\n\n const opposites: Record<ScaleHandlePosition, Position> = {\n nw: [maxX, minY],\n n: [midX, minY],\n ne: [minX, minY],\n e: [minX, midY],\n se: [minX, maxY],\n s: [midX, maxY],\n sw: [maxX, maxY],\n w: [maxX, midY],\n };\n\n return opposites[handlePosition];\n }\n\n /**\n * Get handle at a specific point\n */\n getHandleAtPoint(\n point: Position,\n tolerance: number = 0.0001\n ): ScaleHandlePosition | null {\n for (const handle of this.handles) {\n const distance = this.distanceFromCenter(point, handle.coordinates);\n if (distance < tolerance) {\n return handle.position;\n }\n }\n return null;\n }\n\n /**\n * Cleanup resources\n */\n destroy(): void {\n this.cancelScale();\n this.map = null;\n }\n}\n","import type { Feature, Polygon, Position } from 'geojson';\nimport type { GeoJSONSource } from 'maplibre-gl';\nimport type { Map as MapLibreMap, MapMouseEvent } from 'maplibre-gl';\nimport * as turf from '@turf/turf';\nimport type { LassoOptions, LassoResult } from '../core/types';\nimport { INTERNAL_IDS } from '../core/constants';\n\n/**\n * Handles lasso selection of features\n */\nexport class LassoFeature {\n private map: MapLibreMap | null = null;\n private isDrawing: boolean = false;\n private points: Position[] = [];\n private options: Required<LassoOptions>;\n private onCompleteCallback:\n | ((result: LassoResult) => void)\n | null = null;\n private dragPanEnabled: boolean | null = null;\n private boxZoomEnabled: boolean | null = null;\n private doubleClickZoomEnabled: boolean | null = null;\n\n // Bound event handlers\n private handleMouseDown: ((e: MapMouseEvent) => void) | null = null;\n private handleMouseMove: ((e: MapMouseEvent) => void) | null = null;\n private handleMouseUp: ((e: MapMouseEvent) => void) | null = null;\n\n constructor(options: LassoOptions = {}) {\n this.options = {\n mode: options.mode ?? 'intersects',\n };\n }\n\n /**\n * Initialize with map instance\n */\n init(map: MapLibreMap): void {\n this.map = map;\n }\n\n /**\n * Enable lasso selection mode\n */\n enable(onComplete?: (result: LassoResult) => void): void {\n if (!this.map) return;\n\n this.onCompleteCallback = onComplete || null;\n this.disableMapInteractions();\n this.setupLassoLayers();\n this.attachEventListeners();\n\n // Change cursor\n this.map.getCanvas().style.cursor = 'crosshair';\n }\n\n /**\n * Disable lasso selection mode\n */\n disable(): void {\n this.removeEventListeners();\n this.clearLasso();\n this.isDrawing = false;\n this.points = [];\n this.onCompleteCallback = null;\n this.restoreMapInteractions();\n\n if (this.map) {\n this.map.getCanvas().style.cursor = '';\n }\n }\n\n /**\n * Get features within the lasso polygon\n */\n selectWithinLasso(\n lassoPolygon: Feature<Polygon>,\n features: Feature[]\n ): Feature[] {\n return features.filter((feature) => {\n try {\n if (this.options.mode === 'contains') {\n return turf.booleanWithin(feature, lassoPolygon);\n } else {\n return turf.booleanIntersects(feature, lassoPolygon);\n }\n } catch {\n return false;\n }\n });\n }\n\n /**\n * Build polygon from drawn points\n */\n buildLassoPolygon(): Feature<Polygon> | null {\n if (this.points.length < 3) return null;\n\n // Close the polygon\n const coords = [...this.points, this.points[0]];\n\n try {\n return turf.polygon([coords]);\n } catch {\n return null;\n }\n }\n\n /**\n * Set selection mode\n */\n setMode(mode: 'contains' | 'intersects'): void {\n this.options.mode = mode;\n }\n\n /**\n * Check if lasso is currently active\n */\n isActive(): boolean {\n return this.isDrawing;\n }\n\n /**\n * Setup map layers for lasso visualization\n */\n private setupLassoLayers(): void {\n if (!this.map) return;\n\n // Add source\n if (!this.map.getSource(INTERNAL_IDS.LASSO_SOURCE)) {\n this.map.addSource(INTERNAL_IDS.LASSO_SOURCE, {\n type: 'geojson',\n data: turf.featureCollection([]),\n });\n }\n\n // Add fill layer\n if (!this.map.getLayer(INTERNAL_IDS.LASSO_LAYER)) {\n this.map.addLayer({\n id: INTERNAL_IDS.LASSO_LAYER,\n type: 'fill',\n source: INTERNAL_IDS.LASSO_SOURCE,\n paint: {\n 'fill-color': '#3388ff',\n 'fill-opacity': 0.2,\n },\n });\n }\n\n // Add line layer\n if (!this.map.getLayer(INTERNAL_IDS.LASSO_LINE_LAYER)) {\n this.map.addLayer({\n id: INTERNAL_IDS.LASSO_LINE_LAYER,\n type: 'line',\n source: INTERNAL_IDS.LASSO_SOURCE,\n paint: {\n 'line-color': '#3388ff',\n 'line-width': 2,\n 'line-dasharray': [2, 2],\n },\n });\n }\n }\n\n /**\n * Attach mouse event listeners\n */\n private attachEventListeners(): void {\n if (!this.map) return;\n\n this.handleMouseDown = (e: MapMouseEvent) => {\n e.preventDefault();\n this.isDrawing = true;\n this.points = [[e.lngLat.lng, e.lngLat.lat]];\n this.updateLassoVisualization();\n };\n\n this.handleMouseMove = (e: MapMouseEvent) => {\n if (!this.isDrawing) return;\n\n e.preventDefault();\n this.points.push([e.lngLat.lng, e.lngLat.lat]);\n this.updateLassoVisualization();\n };\n\n this.handleMouseUp = () => {\n if (!this.isDrawing) return;\n\n this.isDrawing = false;\n this.completeLasso();\n };\n\n this.map.on('mousedown', this.handleMouseDown);\n this.map.on('mousemove', this.handleMouseMove);\n this.map.on('mouseup', this.handleMouseUp);\n }\n\n /**\n * Remove event listeners\n */\n private removeEventListeners(): void {\n if (!this.map) return;\n\n if (this.handleMouseDown) {\n this.map.off('mousedown', this.handleMouseDown);\n }\n if (this.handleMouseMove) {\n this.map.off('mousemove', this.handleMouseMove);\n }\n if (this.handleMouseUp) {\n this.map.off('mouseup', this.handleMouseUp);\n }\n\n this.handleMouseDown = null;\n this.handleMouseMove = null;\n this.handleMouseUp = null;\n }\n\n /**\n * Update the lasso visualization on the map\n */\n private updateLassoVisualization(): void {\n if (!this.map || this.points.length < 2) return;\n\n const source = this.map.getSource(INTERNAL_IDS.LASSO_SOURCE) as GeoJSONSource | undefined;\n if (!source) return;\n\n // Create a temporary polygon for visualization\n const coords = [...this.points];\n if (coords.length >= 3) {\n // Close the polygon\n coords.push(coords[0]);\n const polygon = turf.polygon([coords]);\n source.setData(turf.featureCollection([polygon]));\n } else {\n // Just show a line\n const line = turf.lineString(coords);\n source.setData(turf.featureCollection([line]));\n }\n }\n\n /**\n * Complete the lasso selection\n */\n private completeLasso(): void {\n const polygon = this.buildLassoPolygon();\n\n if (polygon && this.onCompleteCallback) {\n // Get all features from the map (this would need to be provided externally)\n // For now, return empty selection - actual feature selection happens in GeoEditor\n const result: LassoResult = {\n selected: [],\n lasso: polygon,\n };\n this.onCompleteCallback(result);\n }\n\n // Clear the lasso visualization after a short delay\n setTimeout(() => {\n this.clearLasso();\n this.points = [];\n }, 100);\n }\n\n /**\n * Clear the lasso visualization\n */\n private clearLasso(): void {\n if (!this.map) return;\n\n const source = this.map.getSource(INTERNAL_IDS.LASSO_SOURCE) as GeoJSONSource | undefined;\n if (source) {\n source.setData(turf.featureCollection([]));\n }\n }\n\n private disableMapInteractions(): void {\n if (!this.map) return;\n\n this.dragPanEnabled = this.map.dragPan.isEnabled();\n if (this.dragPanEnabled) {\n this.map.dragPan.disable();\n }\n\n if (this.map.boxZoom) {\n this.boxZoomEnabled = this.map.boxZoom.isEnabled();\n if (this.boxZoomEnabled) {\n this.map.boxZoom.disable();\n }\n }\n\n if (this.map.doubleClickZoom) {\n this.doubleClickZoomEnabled = this.map.doubleClickZoom.isEnabled();\n if (this.doubleClickZoomEnabled) {\n this.map.doubleClickZoom.disable();\n }\n }\n }\n\n private restoreMapInteractions(): void {\n if (!this.map) return;\n\n if (this.dragPanEnabled) {\n this.map.dragPan.enable();\n }\n if (this.boxZoomEnabled && this.map.boxZoom) {\n this.map.boxZoom.enable();\n }\n if (this.doubleClickZoomEnabled && this.map.doubleClickZoom) {\n this.map.doubleClickZoom.enable();\n }\n\n this.dragPanEnabled = null;\n this.boxZoomEnabled = null;\n this.doubleClickZoomEnabled = null;\n }\n\n /**\n * Remove lasso layers from the map\n */\n removeLayers(): void {\n if (!this.map) return;\n\n if (this.map.getLayer(INTERNAL_IDS.LASSO_LINE_LAYER)) {\n this.map.removeLayer(INTERNAL_IDS.LASSO_LINE_LAYER);\n }\n if (this.map.getLayer(INTERNAL_IDS.LASSO_LAYER)) {\n this.map.removeLayer(INTERNAL_IDS.LASSO_LAYER);\n }\n if (this.map.getSource(INTERNAL_IDS.LASSO_SOURCE)) {\n this.map.removeSource(INTERNAL_IDS.LASSO_SOURCE);\n }\n }\n\n /**\n * Cleanup resources\n */\n destroy(): void {\n this.disable();\n this.removeLayers();\n this.map = null;\n }\n}\n","import type {\n Feature,\n Polygon,\n LineString,\n Position,\n} from 'geojson';\nimport type { Map as MapLibreMap, MapMouseEvent, GeoJSONSource } from 'maplibre-gl';\nimport * as turf from '@turf/turf';\nimport type { SplitOptions, SplitResult } from '../core/types';\nimport { INTERNAL_IDS } from '../core/constants';\nimport { generateFeatureId } from '../utils/geometryUtils';\n\n/**\n * Handles splitting of polygons and lines\n */\nexport class SplitFeature {\n private map: MapLibreMap | null = null;\n private isDrawing: boolean = false;\n private splitLinePoints: Position[] = [];\n private targetFeature: Feature<Polygon | LineString> | null = null;\n private onCompleteCallback: ((result: SplitResult) => void) | null = null;\n\n // Bound event handlers\n private handleClick: ((e: MapMouseEvent) => void) | null = null;\n private handleMouseMove: ((e: MapMouseEvent) => void) | null = null;\n private handleDblClick: ((e: MapMouseEvent) => void) | null = null;\n\n constructor() {}\n\n /**\n * Initialize with map instance\n */\n init(map: MapLibreMap): void {\n this.map = map;\n }\n\n /**\n * Split a polygon with a line\n */\n splitPolygon(\n polygon: Feature<Polygon>,\n splitter: Feature<LineString>,\n _options?: SplitOptions\n ): SplitResult {\n try {\n // Get intersection points\n const polygonLine = turf.polygonToLine(polygon);\n const intersections = turf.lineIntersect(\n polygonLine as Feature<LineString>,\n splitter\n );\n\n if (intersections.features.length < 2) {\n return {\n original: polygon,\n parts: [],\n success: false,\n error: 'Splitting line must intersect polygon at least twice',\n };\n }\n\n // Clip splitter to polygon\n const clipped = this.clipLineToBbox(splitter, turf.bbox(polygon) as [number, number, number, number]);\n if (!clipped) {\n return {\n original: polygon,\n parts: [],\n success: false,\n error: 'Could not clip splitting line to polygon',\n };\n }\n\n // Perform the split using a different approach\n const parts = this.performPolygonSplit(polygon, splitter);\n\n if (parts.length === 0) {\n return {\n original: polygon,\n parts: [],\n success: false,\n error: 'Split operation produced no valid parts',\n };\n }\n\n // Assign new IDs to parts\n parts.forEach((part) => {\n part.id = generateFeatureId();\n part.properties = { ...polygon.properties };\n });\n\n return {\n original: polygon,\n parts,\n success: true,\n };\n } catch (error) {\n return {\n original: polygon,\n parts: [],\n success: false,\n error: `Split operation failed: ${error instanceof Error ? error.message : 'Unknown error'}`,\n };\n }\n }\n\n /**\n * Split a line with a point or another line\n */\n splitLine(\n line: Feature<LineString>,\n splitter: Feature<LineString>\n ): SplitResult {\n try {\n const result = turf.lineSplit(line, splitter as Parameters<typeof turf.lineSplit>[1]);\n\n if (result.features.length <= 1) {\n return {\n original: line,\n parts: [],\n success: false,\n error: 'Splitter does not intersect the line',\n };\n }\n\n const parts = result.features.map((f) => {\n const feature = f as Feature<LineString>;\n feature.id = generateFeatureId();\n feature.properties = { ...line.properties };\n return feature;\n });\n\n return {\n original: line,\n parts,\n success: true,\n };\n } catch (error) {\n return {\n original: line,\n parts: [],\n success: false,\n error: `Split operation failed: ${error instanceof Error ? error.message : 'Unknown error'}`,\n };\n }\n }\n\n /**\n * Start interactive split mode\n */\n startSplit(\n feature: Feature<Polygon | LineString>,\n onComplete: (result: SplitResult) => void\n ): void {\n if (!this.map) return;\n\n this.targetFeature = feature;\n this.onCompleteCallback = onComplete;\n this.splitLinePoints = [];\n this.isDrawing = true;\n\n this.setupSplitLineLayers();\n this.attachEventListeners();\n\n this.map.getCanvas().style.cursor = 'crosshair';\n }\n\n /**\n * Cancel the split operation\n */\n cancelSplit(): void {\n this.cleanup();\n this.targetFeature = null;\n this.onCompleteCallback = null;\n }\n\n /**\n * Check if split mode is active\n */\n isActive(): boolean {\n return this.isDrawing;\n }\n\n /**\n * Perform the actual polygon split\n */\n private performPolygonSplit(\n polygon: Feature<Polygon>,\n splitter: Feature<LineString>\n ): Feature<Polygon>[] {\n try {\n // Use a cutting approach\n // 1. Buffer the splitting line slightly\n // 2. Compute difference to create two parts\n\n const bufferedLine = turf.buffer(splitter, 0.00001, { units: 'degrees' });\n if (!bufferedLine) return [];\n\n // Get the difference (this creates a hole along the split line)\n const collection = turf.featureCollection([polygon, bufferedLine]);\n const withCut = turf.difference(collection);\n\n if (!withCut) return [];\n\n // If the result is a MultiPolygon, extract the parts\n if (withCut.geometry.type === 'MultiPolygon') {\n return withCut.geometry.coordinates.map((coords) => {\n return turf.polygon(coords) as Feature<Polygon>;\n });\n }\n\n // If still a single polygon, try an alternative approach\n // Use the unkink function to handle self-intersections\n const unkinked = turf.unkinkPolygon(withCut as Feature<Polygon>);\n if (unkinked.features.length > 1) {\n return unkinked.features as Feature<Polygon>[];\n }\n\n return [withCut as Feature<Polygon>];\n } catch {\n return [];\n }\n }\n\n /**\n * Clip a line to a bounding box\n */\n private clipLineToBbox(\n line: Feature<LineString>,\n bbox: [number, number, number, number]\n ): Feature<LineString> | null {\n try {\n const clipped = turf.bboxClip(line, bbox);\n return clipped as Feature<LineString>;\n } catch {\n return null;\n }\n }\n\n /**\n * Setup layers for split line visualization\n */\n private setupSplitLineLayers(): void {\n if (!this.map) return;\n\n if (!this.map.getSource(INTERNAL_IDS.SPLIT_LINE_SOURCE)) {\n this.map.addSource(INTERNAL_IDS.SPLIT_LINE_SOURCE, {\n type: 'geojson',\n data: turf.featureCollection([]),\n });\n }\n\n if (!this.map.getLayer(INTERNAL_IDS.SPLIT_LINE_LAYER)) {\n this.map.addLayer({\n id: INTERNAL_IDS.SPLIT_LINE_LAYER,\n type: 'line',\n source: INTERNAL_IDS.SPLIT_LINE_SOURCE,\n paint: {\n 'line-color': '#ff4444',\n 'line-width': 3,\n 'line-dasharray': [3, 3],\n },\n });\n }\n }\n\n /**\n * Attach event listeners for drawing the split line\n */\n private attachEventListeners(): void {\n if (!this.map) return;\n\n this.handleClick = (e: MapMouseEvent) => {\n this.splitLinePoints.push([e.lngLat.lng, e.lngLat.lat]);\n this.updateSplitLineVisualization();\n };\n\n this.handleMouseMove = (e: MapMouseEvent) => {\n if (this.splitLinePoints.length === 0) return;\n\n // Show preview of next segment\n const previewPoints = [\n ...this.splitLinePoints,\n [e.lngLat.lng, e.lngLat.lat],\n ];\n this.updateSplitLineVisualization(previewPoints);\n };\n\n this.handleDblClick = (e: MapMouseEvent) => {\n e.preventDefault();\n this.completeSplit();\n };\n\n this.map.on('click', this.handleClick);\n this.map.on('mousemove', this.handleMouseMove);\n this.map.on('dblclick', this.handleDblClick);\n }\n\n /**\n * Remove event listeners\n */\n private removeEventListeners(): void {\n if (!this.map) return;\n\n if (this.handleClick) {\n this.map.off('click', this.handleClick);\n }\n if (this.handleMouseMove) {\n this.map.off('mousemove', this.handleMouseMove);\n }\n if (this.handleDblClick) {\n this.map.off('dblclick', this.handleDblClick);\n }\n\n this.handleClick = null;\n this.handleMouseMove = null;\n this.handleDblClick = null;\n }\n\n /**\n * Update the split line visualization\n */\n private updateSplitLineVisualization(points?: Position[]): void {\n if (!this.map) return;\n\n const source = this.map.getSource(INTERNAL_IDS.SPLIT_LINE_SOURCE) as GeoJSONSource | undefined;\n if (!source) return;\n\n const linePoints = points || this.splitLinePoints;\n if (linePoints.length < 2) {\n source.setData(turf.featureCollection([]));\n return;\n }\n\n const line = turf.lineString(linePoints);\n source.setData(turf.featureCollection([line]));\n }\n\n /**\n * Complete the split operation\n */\n private completeSplit(): void {\n if (\n !this.targetFeature ||\n !this.onCompleteCallback ||\n this.splitLinePoints.length < 2\n ) {\n this.cleanup();\n return;\n }\n\n const splitter = turf.lineString(this.splitLinePoints);\n let result: SplitResult;\n\n if (this.targetFeature.geometry.type === 'Polygon') {\n result = this.splitPolygon(\n this.targetFeature as Feature<Polygon>,\n splitter\n );\n } else {\n result = this.splitLine(\n this.targetFeature as Feature<LineString>,\n splitter\n );\n }\n\n this.onCompleteCallback(result);\n this.cleanup();\n }\n\n /**\n * Cleanup after split operation\n */\n private cleanup(): void {\n this.removeEventListeners();\n this.clearSplitLine();\n this.isDrawing = false;\n this.splitLinePoints = [];\n\n if (this.map) {\n this.map.getCanvas().style.cursor = '';\n }\n }\n\n /**\n * Clear the split line visualization\n */\n private clearSplitLine(): void {\n if (!this.map) return;\n\n const source = this.map.getSource(INTERNAL_IDS.SPLIT_LINE_SOURCE) as GeoJSONSource | undefined;\n if (source) {\n source.setData(turf.featureCollection([]));\n }\n }\n\n /**\n * Remove split line layers from the map\n */\n removeLayers(): void {\n if (!this.map) return;\n\n if (this.map.getLayer(INTERNAL_IDS.SPLIT_LINE_LAYER)) {\n this.map.removeLayer(INTERNAL_IDS.SPLIT_LINE_LAYER);\n }\n if (this.map.getSource(INTERNAL_IDS.SPLIT_LINE_SOURCE)) {\n this.map.removeSource(INTERNAL_IDS.SPLIT_LINE_SOURCE);\n }\n }\n\n /**\n * Cleanup resources\n */\n destroy(): void {\n this.cancelSplit();\n this.removeLayers();\n this.map = null;\n }\n}\n","import type { Feature, Polygon } from 'geojson';\nimport * as turf from '@turf/turf';\nimport type { SelectedFeature } from '../core/types';\nimport { isPolygon } from './geometryUtils';\n\n/**\n * Filter features that are within a lasso polygon\n */\nexport function selectFeaturesWithinLasso(\n features: Feature[],\n lasso: Feature<Polygon>,\n mode: 'contains' | 'intersects' = 'intersects'\n): Feature[] {\n return features.filter((feature) => {\n try {\n if (mode === 'contains') {\n return turf.booleanWithin(feature, lasso);\n } else {\n return turf.booleanIntersects(feature, lasso);\n }\n } catch {\n return false;\n }\n });\n}\n\n/**\n * Filter features by geometry type\n */\nexport function filterByGeometryType(\n features: Feature[],\n types: string[]\n): Feature[] {\n return features.filter((feature) =>\n types.includes(feature.geometry.type)\n );\n}\n\n/**\n * Get only polygon features from a collection\n */\nexport function getPolygonFeatures(\n features: Feature[]\n): Feature<Polygon>[] {\n return features.filter(isPolygon) as Feature<Polygon>[];\n}\n\n/**\n * Check if selection contains only polygons\n */\nexport function isPolygonOnlySelection(features: Feature[]): boolean {\n return features.every(isPolygon);\n}\n\n/**\n * Check if features can be merged (union)\n * At least 2 polygons that overlap or touch\n */\nexport function canMergeFeatures(features: Feature[]): {\n canMerge: boolean;\n reason?: string;\n} {\n if (features.length < 2) {\n return { canMerge: false, reason: 'Select at least 2 features to merge' };\n }\n\n const polygons = getPolygonFeatures(features);\n if (polygons.length < 2) {\n return { canMerge: false, reason: 'Select at least 2 polygons to merge' };\n }\n\n // Check if any polygons overlap or touch\n for (let i = 0; i < polygons.length; i++) {\n for (let j = i + 1; j < polygons.length; j++) {\n try {\n if (\n turf.booleanOverlap(polygons[i], polygons[j]) ||\n turf.booleanIntersects(polygons[i], polygons[j])\n ) {\n return { canMerge: true };\n }\n } catch {\n // Continue checking\n }\n }\n }\n\n // Allow merge even if not overlapping (will result in MultiPolygon)\n return { canMerge: true };\n}\n\n/**\n * Check if features can be used for difference operation\n */\nexport function canSubtractFeatures(features: Feature[]): {\n canSubtract: boolean;\n reason?: string;\n} {\n if (features.length < 2) {\n return {\n canSubtract: false,\n reason: 'Select a base polygon and at least one polygon to subtract',\n };\n }\n\n const polygons = getPolygonFeatures(features);\n if (polygons.length < 2) {\n return { canSubtract: false, reason: 'All features must be polygons' };\n }\n\n return { canSubtract: true };\n}\n\n/**\n * Convert Feature array to SelectedFeature array\n */\nexport function toSelectedFeatures(\n features: Feature[],\n layerId: string = 'default'\n): SelectedFeature[] {\n return features.map((feature) => ({\n id: String(feature.id || `temp_${Date.now()}_${Math.random()}`),\n feature,\n layerId,\n }));\n}\n\n/**\n * Convert SelectedFeature array to Feature array\n */\nexport function fromSelectedFeatures(selected: SelectedFeature[]): Feature[] {\n return selected.map((s) => s.feature);\n}\n\n/**\n * Check if a feature is in the selection\n */\nexport function isFeatureSelected(\n feature: Feature,\n selection: SelectedFeature[]\n): boolean {\n const featureId = String(feature.id);\n return selection.some((s) => s.id === featureId);\n}\n\n/**\n * Add feature to selection\n */\nexport function addToSelection(\n selection: SelectedFeature[],\n feature: Feature,\n layerId: string = 'default'\n): SelectedFeature[] {\n if (isFeatureSelected(feature, selection)) {\n return selection;\n }\n\n return [\n ...selection,\n {\n id: String(feature.id || generateTempId()),\n feature,\n layerId,\n },\n ];\n}\n\n/**\n * Remove feature from selection\n */\nexport function removeFromSelection(\n selection: SelectedFeature[],\n featureId: string\n): SelectedFeature[] {\n return selection.filter((s) => s.id !== featureId);\n}\n\n/**\n * Toggle feature in selection\n */\nexport function toggleInSelection(\n selection: SelectedFeature[],\n feature: Feature,\n layerId: string = 'default'\n): SelectedFeature[] {\n const featureId = String(feature.id);\n if (isFeatureSelected(feature, selection)) {\n return removeFromSelection(selection, featureId);\n }\n return addToSelection(selection, feature, layerId);\n}\n\n/**\n * Generate a temporary ID\n */\nfunction generateTempId(): string {\n return `temp_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n}\n","import type { IControl, Map as MapLibreMap, MapMouseEvent, GeoJSONSource } from 'maplibre-gl';\nimport type { Feature, FeatureCollection, Polygon, LineString, Point } from 'geojson';\nimport * as turf from '@turf/turf';\nimport type {\n GeoEditorOptions,\n GeoEditorOptionsRequired,\n GeoEditorState,\n DrawMode,\n EditMode,\n GeomanInstance,\n GeomanFeatureData,\n SplitResult,\n UnionResult,\n DifferenceResult,\n SimplifyResult,\n LassoResult,\n ScaleHandlePosition,\n} from './types';\nimport { DEFAULT_OPTIONS, CSS_PREFIX, ADVANCED_EDIT_MODES, INTERNAL_IDS } from './constants';\nimport {\n CopyFeature,\n SimplifyFeature,\n UnionFeature,\n DifferenceFeature,\n ScaleFeature,\n LassoFeature,\n SplitFeature,\n} from '../features';\nimport { getPolygonFeatures } from '../utils/selectionUtils';\nimport { isPolygon, isLine } from '../utils/geometryUtils';\n\n/**\n * GeoEditor - Advanced geometry editing control for MapLibre GL\n * Extends the free Geoman control with advanced features\n */\nexport class GeoEditor implements IControl {\n private map!: MapLibreMap;\n private geoman: GeomanInstance | null = null;\n private container!: HTMLDivElement;\n private options: GeoEditorOptionsRequired;\n private state: GeoEditorState;\n\n // Feature handlers\n private copyFeature: CopyFeature;\n private simplifyFeature: SimplifyFeature;\n private unionFeature: UnionFeature;\n private differenceFeature: DifferenceFeature;\n private scaleFeature: ScaleFeature;\n private lassoFeature: LassoFeature;\n private splitFeature: SplitFeature;\n\n // Event listeners\n private boundKeyHandler: ((e: KeyboardEvent) => void) | null = null;\n private boundClickHandler: ((e: MapMouseEvent) => void) | null = null;\n private boundScaleMouseDown: ((e: MapMouseEvent) => void) | null = null;\n private boundScaleMouseMove: ((e: MapMouseEvent) => void) | null = null;\n private boundScaleMouseUp: ((e: MapMouseEvent) => void) | null = null;\n\n // Selection mode state\n private isSelectMode: boolean = false;\n\n // Interactive selection mode for union/difference\n private pendingOperation: 'union' | 'difference' | null = null;\n\n // Snapping state (independent of other modes)\n private snappingEnabled: boolean = false;\n\n // Last known feature operations\n private lastCreatedFeature: Feature | null = null;\n private lastEditedFeature: Feature | null = null;\n private lastDeletedFeature: Feature | null = null;\n private lastDeletedFeatureId: string | null = null;\n\n // Scale mode state\n private isScaling: boolean = false;\n private scaleTargetFeature: Feature | null = null;\n private scaleTargetGeomanData: GeomanFeatureData | null = null;\n private scaleStartFeature: Feature | null = null;\n private scaleDragPanEnabled: boolean | null = null;\n\n // Multi-drag mode state\n private isMultiDragging: boolean = false;\n private multiDragStartPoint: [number, number] | null = null;\n private multiDragOriginalFeatures: Feature[] = [];\n private multiDragGeomanData: (GeomanFeatureData | null)[] = [];\n private multiDragPanEnabled: boolean | null = null;\n private boundMultiDragMouseDown: ((e: MapMouseEvent) => void) | null = null;\n private boundMultiDragMouseMove: ((e: MapMouseEvent) => void) | null = null;\n private boundMultiDragMouseUp: ((e: MapMouseEvent) => void) | null = null;\n\n // Toolbar element reference\n private toolbar: HTMLDivElement | null = null;\n\n constructor(options: GeoEditorOptions = {}) {\n this.options = { ...DEFAULT_OPTIONS, ...options };\n\n this.state = {\n activeDrawMode: null,\n activeEditMode: null,\n selectedFeatures: [],\n isDrawing: false,\n isEditing: false,\n clipboard: [],\n collapsed: this.options.collapsed,\n };\n\n // Initialize snapping from options\n this.snappingEnabled = this.options.snappingEnabled;\n\n // Initialize feature handlers\n this.copyFeature = new CopyFeature();\n this.simplifyFeature = new SimplifyFeature({\n tolerance: this.options.simplifyTolerance,\n });\n this.unionFeature = new UnionFeature();\n this.differenceFeature = new DifferenceFeature();\n this.scaleFeature = new ScaleFeature();\n this.lassoFeature = new LassoFeature();\n this.splitFeature = new SplitFeature();\n }\n\n /**\n * Called when the control is added to the map\n */\n onAdd(map: MapLibreMap): HTMLElement {\n this.map = map;\n\n // Initialize feature handlers with map\n this.scaleFeature.init(map);\n this.lassoFeature.init(map);\n this.splitFeature.init(map);\n\n // Create container\n this.container = document.createElement('div');\n this.container.className = `maplibregl-ctrl maplibregl-ctrl-group ${CSS_PREFIX}-control`;\n\n // Create toolbar\n this.createToolbar();\n\n // Setup keyboard shortcuts\n this.setupKeyboardShortcuts();\n\n // Setup selection handler\n this.setupSelectionHandler();\n this.setupScaleHandler();\n this.setupMultiDragHandler();\n\n // Setup geoman event listener if geoman is available\n this.setupGeomanEvents();\n\n return this.container;\n }\n\n /**\n * Called when the control is removed from the map\n */\n onRemove(): void {\n this.removeKeyboardShortcuts();\n this.removeSelectionHandler();\n this.removeScaleHandler();\n this.removeMultiDragHandler();\n this.disableAllModes();\n\n // Cleanup feature handlers\n this.scaleFeature.destroy();\n this.lassoFeature.destroy();\n this.splitFeature.destroy();\n\n if (this.container.parentNode) {\n this.container.parentNode.removeChild(this.container);\n }\n\n // @ts-expect-error - cleanup\n this.map = undefined;\n }\n\n /**\n * Set the Geoman instance for integration\n */\n setGeoman(geoman: GeomanInstance): void {\n this.geoman = geoman;\n this.setupGeomanEvents();\n this.applySnappingState();\n\n // Hide geoman control if option is set\n if (this.options.hideGeomanControl) {\n this.hideGeomanControl();\n }\n }\n\n /**\n * Hide the geoman control toolbar\n */\n private hideGeomanControl(): void {\n // Use geoman's removeControls method if available\n if (this.geoman) {\n try {\n this.geoman.removeControls();\n } catch {\n // Fallback: hide via CSS with multiple possible selectors\n const selectors = [\n '.maplibregl-ctrl.geoman-controls',\n '.gm-control',\n '.maplibregl-ctrl-group.geoman',\n '[class*=\"geoman\"]',\n ];\n selectors.forEach((selector) => {\n const elements = document.querySelectorAll(selector);\n elements.forEach((el) => {\n // Don't hide our own control\n if (!el.classList.contains('geo-editor-control')) {\n (el as HTMLElement).style.display = 'none';\n }\n });\n });\n }\n }\n }\n\n /**\n * Setup click handler for feature selection\n */\n private setupSelectionHandler(): void {\n this.boundClickHandler = (e: MapMouseEvent) => {\n // Handle both select mode and pending operation mode (union/difference)\n if (!this.isSelectMode && !this.pendingOperation) {\n return;\n }\n if (!this.geoman) {\n return;\n }\n\n // Find the clicked feature (prefer Geoman's hit test, fallback to turf)\n const result =\n this.findFeatureByMouseEvent(e) ||\n this.findFeatureAtPoint(e.lngLat.lng, e.lngLat.lat);\n\n if (result) {\n const { feature, geomanData } = result;\n // For union/difference mode, always add to selection (multi-select)\n if (this.pendingOperation) {\n // Only add polygons for union/difference\n if (feature.geometry.type === 'Polygon' || feature.geometry.type === 'MultiPolygon') {\n this.addToSelection(feature, geomanData);\n }\n // Silently ignore non-polygon clicks in union/difference mode\n } else if (e.originalEvent.shiftKey) {\n this.toggleFeatureSelection(feature, geomanData);\n } else {\n this.selectFeatures([feature], [geomanData]);\n }\n } else if (!e.originalEvent.shiftKey && !this.pendingOperation) {\n this.clearSelection();\n }\n };\n\n this.map.on('click', this.boundClickHandler);\n }\n\n /**\n * Find a feature at a given point\n */\n private findFeatureAtPoint(lng: number, lat: number): { feature: Feature; geomanData: GeomanFeatureData } | null {\n if (!this.geoman) {\n return null;\n }\n\n const clickPoint: [number, number] = [lng, lat];\n const point = turf.point(clickPoint);\n let result: { feature: Feature; geomanData: GeomanFeatureData } | null = null;\n\n // Try to get all features first using getAll()\n let allFeatures: Feature[] = [];\n const geomanDataMap = new Map<string, GeomanFeatureData>();\n\n try {\n // Try forEach to build a map of geoman data\n let index = 0;\n this.geoman.features.forEach((fd) => {\n const feature = this.getGeomanFeature(fd);\n // Skip if geoman data or its geoJson is undefined\n if (!fd || !feature || !feature.geometry) {\n index++;\n return;\n }\n // Use index as fallback since fd.id might be undefined\n const featureId = String(fd.id ?? feature.id ?? `feature-${index}`);\n allFeatures.push(feature);\n geomanDataMap.set(featureId, fd);\n // Also map by index for reliable lookup\n geomanDataMap.set(`idx-${index}`, fd);\n index++;\n });\n } catch {\n try {\n const fc = this.geoman.features.getAll();\n // Filter out undefined/null features\n allFeatures = (fc.features || []).filter((f) => f && f.geometry);\n } catch {\n return null;\n }\n }\n\n // Now check each feature\n for (let i = 0; i < allFeatures.length; i++) {\n const feature = allFeatures[i];\n\n // Skip undefined or null features\n if (!feature || !feature.geometry) {\n continue;\n }\n\n const featureId = String(feature.id ?? `feature-${i}`);\n // Try to get geoman data by feature id first, then by index\n const geomanData = geomanDataMap.get(featureId) || geomanDataMap.get(`idx-${i}`);\n\n try {\n let isHit = false;\n\n if (feature.geometry.type === 'Point') {\n const featurePoint = turf.point((feature.geometry as Point).coordinates as [number, number]);\n const distance = turf.distance(point, featurePoint, { units: 'kilometers' });\n isHit = distance < 0.5;\n } else if (feature.geometry.type === 'Polygon' || feature.geometry.type === 'MultiPolygon') {\n const inside = turf.booleanPointInPolygon(point, feature as Feature<Polygon>);\n isHit = inside;\n } else if (feature.geometry.type === 'LineString' || feature.geometry.type === 'MultiLineString') {\n const nearestPoint = turf.nearestPointOnLine(feature as Feature<LineString>, point);\n isHit = nearestPoint.properties.dist !== undefined && nearestPoint.properties.dist < 0.1;\n }\n\n if (isHit) {\n // If we don't have geomanData, create a minimal one with delete method\n const fd = geomanData || this.findGeomanDataForFeature(feature);\n if (fd) {\n result = { feature, geomanData: fd };\n break;\n }\n }\n } catch {\n // Continue to next feature\n }\n }\n\n return result;\n }\n\n /**\n * Find a feature at the mouse event using Geoman's hit test\n */\n private findFeatureByMouseEvent(\n e: MapMouseEvent\n ): { feature: Feature; geomanData: GeomanFeatureData } | null {\n if (!this.geoman || !e.originalEvent) {\n return null;\n }\n\n try {\n const geomanData = this.geoman.features.getFeatureByMouseEvent({\n event: e,\n });\n const feature = this.getGeomanFeature(geomanData);\n\n if (feature && geomanData) {\n return { feature, geomanData };\n }\n } catch {\n // Fall back to turf-based hit testing\n }\n\n return null;\n }\n\n /**\n * Find geoman data for a feature by searching\n */\n private findGeomanDataForFeature(targetFeature: Feature): GeomanFeatureData | null {\n if (!this.geoman) return null;\n\n let foundData: GeomanFeatureData | null = null;\n const targetId = this.getGeomanIdFromFeature(targetFeature);\n\n try {\n this.geoman.features.forEach((fd) => {\n if (foundData) return;\n\n const feature = this.getGeomanFeature(fd);\n if (!feature) return;\n\n // Match by ID or by geometry\n if (\n (targetId && String(feature.id) === targetId) ||\n (targetId && this.getGeomanIdFromFeature(feature) === targetId)\n ) {\n foundData = fd;\n } else if (JSON.stringify(feature.geometry) === JSON.stringify(targetFeature.geometry)) {\n foundData = fd;\n }\n });\n } catch {\n // forEach not available\n }\n\n return foundData;\n }\n\n private getGeomanIdFromFeature(feature: Feature): string | null {\n const props = feature.properties as { __gm_id?: string | number; id?: string | number } | undefined;\n const raw = feature.id ?? props?.__gm_id ?? props?.id;\n return raw !== undefined && raw !== null ? String(raw) : null;\n }\n\n private getGeomanFeature(geomanData?: GeomanFeatureData | null): Feature | null {\n if (!geomanData) return null;\n\n if (typeof geomanData.getGeoJson === 'function') {\n try {\n return geomanData.getGeoJson();\n } catch {\n return null;\n }\n }\n\n return geomanData.geoJson ?? null;\n }\n\n /**\n * Remove selection handler\n */\n private removeSelectionHandler(): void {\n if (this.boundClickHandler) {\n this.map.off('click', this.boundClickHandler);\n this.boundClickHandler = null;\n }\n }\n\n /**\n * Setup mouse handlers for scale mode\n */\n private setupScaleHandler(): void {\n this.boundScaleMouseDown = (e: MapMouseEvent) => {\n if (this.state.activeEditMode !== 'scale') {\n return;\n }\n\n const handle = this.getScaleHandleFromEvent(e);\n if (!handle || !this.scaleTargetFeature || !this.scaleTargetGeomanData) {\n return;\n }\n\n e.preventDefault();\n this.isScaling = true;\n this.scaleStartFeature = this.scaleTargetFeature;\n this.disableScaleDragPan();\n this.scaleFeature.startScale(\n this.scaleTargetFeature,\n handle,\n [e.lngLat.lng, e.lngLat.lat],\n (scaled, factor) => {\n this.applyScaledFeature(scaled);\n this.emitEvent('gm:scale', { feature: scaled, scaleFactor: factor });\n }\n );\n this.emitEvent('gm:scalestart', { feature: this.scaleTargetFeature });\n };\n\n this.boundScaleMouseMove = (e: MapMouseEvent) => {\n if (!this.isScaling) {\n return;\n }\n\n const scaled = this.scaleFeature.updateScale([e.lngLat.lng, e.lngLat.lat]);\n if (scaled) {\n this.applyScaledFeature(scaled);\n }\n };\n\n this.boundScaleMouseUp = () => {\n if (!this.isScaling) {\n return;\n }\n\n this.isScaling = false;\n const result = this.scaleFeature.endScale();\n this.restoreScaleDragPan();\n\n if (result) {\n this.applyScaledFeature(result.feature);\n if (this.scaleStartFeature) {\n this.options.onFeatureEdit?.(result.feature, this.scaleStartFeature);\n }\n this.lastEditedFeature = result.feature;\n this.logSelectedFeatureCollection('edited', result.feature);\n this.scaleFeature.showHandlesForFeature(result.feature);\n this.bringScaleHandlesToFront();\n this.emitEvent('gm:scaleend', {\n feature: result.feature,\n scaleFactor: result.factor,\n });\n }\n\n this.scaleStartFeature = null;\n };\n\n this.map.on('mousedown', this.boundScaleMouseDown);\n this.map.on('mousemove', this.boundScaleMouseMove);\n this.map.on('mouseup', this.boundScaleMouseUp);\n }\n\n /**\n * Remove scale handlers\n */\n private removeScaleHandler(): void {\n if (this.boundScaleMouseDown) {\n this.map.off('mousedown', this.boundScaleMouseDown);\n this.boundScaleMouseDown = null;\n }\n if (this.boundScaleMouseMove) {\n this.map.off('mousemove', this.boundScaleMouseMove);\n this.boundScaleMouseMove = null;\n }\n if (this.boundScaleMouseUp) {\n this.map.off('mouseup', this.boundScaleMouseUp);\n this.boundScaleMouseUp = null;\n }\n }\n\n /**\n * Setup mouse handlers for multi-drag when multiple features are selected\n */\n private setupMultiDragHandler(): void {\n this.boundMultiDragMouseDown = (e: MapMouseEvent) => {\n if (this.state.activeEditMode !== 'drag') {\n return;\n }\n if (this.state.selectedFeatures.length < 2) {\n return;\n }\n\n const hit = this.findFeatureByMouseEvent(e) || this.findFeatureAtPoint(e.lngLat.lng, e.lngLat.lat);\n if (!hit) {\n return;\n }\n\n const hitId = this.getGeomanIdFromFeature(hit.feature);\n const isSelected = this.state.selectedFeatures.some(\n (s) => this.getGeomanIdFromFeature(s.feature) === hitId\n );\n if (!isSelected) {\n return;\n }\n\n e.preventDefault();\n this.isMultiDragging = true;\n this.multiDragStartPoint = [e.lngLat.lng, e.lngLat.lat];\n this.multiDragOriginalFeatures = this.state.selectedFeatures.map((s) => turf.clone(s.feature));\n this.multiDragGeomanData = this.state.selectedFeatures.map(\n (s) => s.geomanData ?? this.findGeomanDataForFeature(s.feature)\n );\n\n this.disableMultiDragPan();\n };\n\n this.boundMultiDragMouseMove = (e: MapMouseEvent) => {\n if (!this.isMultiDragging || !this.multiDragStartPoint) {\n return;\n }\n\n const start = this.multiDragStartPoint;\n const current: [number, number] = [e.lngLat.lng, e.lngLat.lat];\n const distance = turf.distance(turf.point(start), turf.point(current), { units: 'kilometers' });\n const bearing = turf.bearing(turf.point(start), turf.point(current));\n\n const updated: Feature[] = [];\n this.multiDragOriginalFeatures.forEach((feature, index) => {\n const moved = turf.transformTranslate(feature, distance, bearing, { units: 'kilometers' });\n const geomanData = this.multiDragGeomanData[index];\n if (geomanData?.updateGeometry) {\n geomanData.updateGeometry(moved.geometry);\n } else if (geomanData?.updateGeoJsonGeometry) {\n geomanData.updateGeoJsonGeometry(moved.geometry);\n }\n updated.push(moved);\n });\n\n this.state.selectedFeatures = this.state.selectedFeatures.map((s, index) => ({\n ...s,\n feature: updated[index] ?? s.feature,\n }));\n\n this.updateSelectionHighlight();\n };\n\n this.boundMultiDragMouseUp = () => {\n if (!this.isMultiDragging) {\n return;\n }\n\n this.isMultiDragging = false;\n this.restoreMultiDragPan();\n\n if (this.state.selectedFeatures.length > 0) {\n this.state.selectedFeatures.forEach((featureState, index) => {\n const original = this.multiDragOriginalFeatures[index];\n if (original) {\n this.options.onFeatureEdit?.(featureState.feature, original);\n }\n });\n this.lastEditedFeature = this.state.selectedFeatures[this.state.selectedFeatures.length - 1]?.feature ?? null;\n this.logSelectedFeatureCollection('edited', this.lastEditedFeature);\n }\n\n this.multiDragStartPoint = null;\n this.multiDragOriginalFeatures = [];\n this.multiDragGeomanData = [];\n };\n\n this.map.on('mousedown', this.boundMultiDragMouseDown);\n this.map.on('mousemove', this.boundMultiDragMouseMove);\n this.map.on('mouseup', this.boundMultiDragMouseUp);\n }\n\n private removeMultiDragHandler(): void {\n if (this.boundMultiDragMouseDown) {\n this.map.off('mousedown', this.boundMultiDragMouseDown);\n this.boundMultiDragMouseDown = null;\n }\n if (this.boundMultiDragMouseMove) {\n this.map.off('mousemove', this.boundMultiDragMouseMove);\n this.boundMultiDragMouseMove = null;\n }\n if (this.boundMultiDragMouseUp) {\n this.map.off('mouseup', this.boundMultiDragMouseUp);\n this.boundMultiDragMouseUp = null;\n }\n }\n\n private disableMultiDragPan(): void {\n this.multiDragPanEnabled = this.map.dragPan.isEnabled();\n if (this.multiDragPanEnabled) {\n this.map.dragPan.disable();\n }\n }\n\n private restoreMultiDragPan(): void {\n if (this.multiDragPanEnabled) {\n this.map.dragPan.enable();\n }\n this.multiDragPanEnabled = null;\n }\n\n private getScaleHandleFromEvent(e: MapMouseEvent): ScaleHandlePosition | null {\n if (!this.map.getLayer(INTERNAL_IDS.SCALE_HANDLES_LAYER)) {\n return null;\n }\n\n const hits = this.map.queryRenderedFeatures(e.point, {\n layers: [INTERNAL_IDS.SCALE_HANDLES_LAYER],\n });\n if (!hits.length) {\n return null;\n }\n\n const position = hits[0].properties?.position;\n if (typeof position === 'string') {\n return position as ScaleHandlePosition;\n }\n\n return null;\n }\n\n private disableScaleDragPan(): void {\n this.scaleDragPanEnabled = this.map.dragPan.isEnabled();\n if (this.scaleDragPanEnabled) {\n this.map.dragPan.disable();\n }\n }\n\n private restoreScaleDragPan(): void {\n if (this.scaleDragPanEnabled) {\n this.map.dragPan.enable();\n }\n this.scaleDragPanEnabled = null;\n }\n\n private applyScaledFeature(feature: Feature): void {\n if (this.scaleTargetGeomanData?.updateGeometry) {\n this.scaleTargetGeomanData.updateGeometry(feature.geometry);\n } else if (this.scaleTargetGeomanData?.updateGeoJsonGeometry) {\n this.scaleTargetGeomanData.updateGeoJsonGeometry(feature.geometry);\n }\n\n if (this.state.selectedFeatures.length > 0) {\n const current = this.state.selectedFeatures[0];\n this.state.selectedFeatures[0] = {\n ...current,\n id: String(this.scaleTargetGeomanData?.id ?? feature.id ?? current.id),\n feature,\n geomanData: this.scaleTargetGeomanData ?? current.geomanData,\n };\n this.scaleTargetFeature = feature;\n }\n\n this.updateSelectionHighlight();\n this.bringScaleHandlesToFront();\n }\n\n private bringScaleHandlesToFront(): void {\n if (!this.map.getLayer(INTERNAL_IDS.SCALE_HANDLES_LAYER)) {\n return;\n }\n\n try {\n this.map.moveLayer(INTERNAL_IDS.SCALE_HANDLES_LAYER);\n } catch {\n // Ignore move errors\n }\n }\n\n private logSelectedFeatureCollection(action: string, feature?: Feature | null): void {\n const featureId = feature ? this.getGeomanIdFromFeature(feature) : null;\n console.log('GeoEditor', {\n action,\n featureId,\n feature,\n selection: this.getSelectedFeatureCollection(),\n });\n }\n\n private extractFeatureFromEvent(featureLike: unknown): Feature | null {\n if (!featureLike || typeof featureLike !== 'object') {\n return null;\n }\n\n const candidate = featureLike as { getGeoJson?: () => Feature; geoJson?: Feature; geometry?: Feature['geometry'] };\n if (typeof candidate.getGeoJson === 'function') {\n try {\n return candidate.getGeoJson();\n } catch {\n return null;\n }\n }\n\n if (candidate.geoJson) {\n return candidate.geoJson;\n }\n\n if ('geometry' in candidate) {\n return candidate as Feature;\n }\n\n return null;\n }\n\n /**\n * Toggle feature in selection\n */\n private toggleFeatureSelection(feature: Feature, geomanData?: GeomanFeatureData): void {\n const resolvedGeomanData = geomanData ?? this.findGeomanDataForFeature(feature);\n const featureId = String(resolvedGeomanData?.id ?? feature.id);\n const isSelected = this.state.selectedFeatures.some((s) => s.id === featureId);\n\n if (isSelected) {\n this.removeFromSelection(featureId);\n } else {\n this.addToSelection(feature, resolvedGeomanData ?? undefined);\n }\n }\n\n /**\n * Enable select mode\n */\n enableSelectMode(): void {\n this.disableAllModes();\n this.isSelectMode = true;\n this.map.getCanvas().style.cursor = 'pointer';\n this.updateToolbarState();\n }\n\n /**\n * Disable select mode\n */\n disableSelectMode(): void {\n this.isSelectMode = false;\n this.map.getCanvas().style.cursor = '';\n }\n\n /**\n * Get the current state\n */\n getState(): GeoEditorState {\n return { ...this.state };\n }\n\n /**\n * Get selected features\n */\n getSelectedFeatures(): Feature[] {\n return this.state.selectedFeatures.map((s) => s.feature);\n }\n\n getSelectedFeatureCollection(): FeatureCollection {\n return {\n type: 'FeatureCollection',\n features: this.getSelectedFeatures(),\n };\n }\n\n /**\n * Get all features from the map\n */\n getFeatures(): FeatureCollection {\n if (this.geoman) {\n try {\n return this.geoman.features.getAll();\n } catch {\n // Fallback\n const features: Feature[] = [];\n this.geoman.features.forEach((fd) => {\n const feature = this.getGeomanFeature(fd);\n if (feature) {\n features.push(feature);\n }\n });\n return { type: 'FeatureCollection', features };\n }\n }\n return { type: 'FeatureCollection', features: [] };\n }\n\n getAllFeatureCollection(): FeatureCollection {\n return this.getFeatures();\n }\n\n getLastCreatedFeature(): Feature | null {\n return this.lastCreatedFeature;\n }\n\n getLastEditedFeature(): Feature | null {\n return this.lastEditedFeature;\n }\n\n getLastDeletedFeature(): Feature | null {\n return this.lastDeletedFeature;\n }\n\n getLastDeletedFeatureId(): string | null {\n return this.lastDeletedFeatureId;\n }\n\n // ============================================================================\n // Mode Management\n // ============================================================================\n\n /**\n * Enable a draw mode\n */\n enableDrawMode(mode: DrawMode): void {\n this.disableAllModes();\n\n if (this.geoman) {\n this.geoman.enableDraw(mode);\n }\n\n this.state.activeDrawMode = mode;\n this.state.isDrawing = true;\n this.options.onModeChange?.(mode);\n this.updateToolbarState();\n }\n\n /**\n * Enable an edit mode\n */\n enableEditMode(mode: EditMode): void {\n this.disableAllModes();\n\n // Check if it's an advanced mode (our implementation)\n if (ADVANCED_EDIT_MODES.includes(mode)) {\n this.enableAdvancedEditMode(mode);\n } else if (this.geoman) {\n // Use Geoman's built-in modes\n switch (mode) {\n case 'drag':\n if (this.state.selectedFeatures.length < 2) {\n this.geoman.enableGlobalDragMode();\n }\n break;\n case 'change':\n this.geoman.enableGlobalEditMode();\n break;\n case 'rotate':\n this.geoman.enableGlobalRotateMode();\n break;\n case 'cut':\n this.geoman.enableGlobalCutMode();\n break;\n case 'delete':\n if (this.state.selectedFeatures.length > 0) {\n this.deleteSelectedFeatures();\n return;\n }\n this.geoman.enableGlobalRemovalMode();\n break;\n }\n }\n\n this.state.activeEditMode = mode;\n this.state.isEditing = true;\n this.options.onModeChange?.(mode);\n this.updateToolbarState();\n }\n\n /**\n * Disable all modes\n */\n disableAllModes(): void {\n if (this.geoman) {\n this.geoman.disableAllModes();\n }\n\n // Disable advanced modes\n this.scaleFeature.cancelScale();\n this.lassoFeature.disable();\n this.splitFeature.cancelSplit();\n this.disableSelectMode();\n this.restoreScaleDragPan();\n this.restoreMultiDragPan();\n this.isMultiDragging = false;\n this.multiDragStartPoint = null;\n this.multiDragOriginalFeatures = [];\n this.multiDragGeomanData = [];\n this.isScaling = false;\n this.scaleTargetFeature = null;\n this.scaleTargetGeomanData = null;\n this.scaleStartFeature = null;\n\n // Reset pending operation\n this.pendingOperation = null;\n\n // Reset cursor\n this.map.getCanvas().style.cursor = '';\n\n this.state.activeDrawMode = null;\n this.state.activeEditMode = null;\n this.state.isDrawing = false;\n this.state.isEditing = false;\n this.updateToolbarState();\n this.applySnappingState();\n\n // Note: snapping state is NOT reset here - it's independent\n }\n\n /**\n * Enable an advanced edit mode\n */\n private enableAdvancedEditMode(mode: EditMode): void {\n switch (mode) {\n case 'select':\n this.enableSelectMode();\n break;\n case 'scale':\n this.enableScaleMode();\n break;\n case 'copy':\n this.enableCopyMode();\n break;\n case 'split':\n this.enableSplitMode();\n break;\n case 'union':\n this.enableUnionMode();\n break;\n case 'difference':\n this.enableDifferenceMode();\n break;\n case 'simplify':\n this.executeSimplify();\n break;\n case 'lasso':\n this.enableLassoMode();\n break;\n }\n }\n\n /**\n * Enable union mode (interactive polygon selection)\n */\n private enableUnionMode(): void {\n const selected = this.getSelectedFeatures();\n const polygons = getPolygonFeatures(selected);\n if (polygons.length >= 2) {\n this.executeUnion();\n return;\n }\n\n this.pendingOperation = 'union';\n this.map.getCanvas().style.cursor = 'pointer';\n }\n\n /**\n * Enable difference mode (interactive polygon selection)\n */\n private enableDifferenceMode(): void {\n const selected = this.getSelectedFeatures();\n const polygons = getPolygonFeatures(selected);\n if (polygons.length >= 2) {\n this.executeDifference();\n return;\n }\n\n this.pendingOperation = 'difference';\n this.map.getCanvas().style.cursor = 'pointer';\n }\n\n /**\n * Execute the pending operation (union/difference)\n */\n executePendingOperation(): void {\n if (!this.pendingOperation) return;\n\n if (this.pendingOperation === 'union') {\n this.executeUnion();\n } else if (this.pendingOperation === 'difference') {\n this.executeDifference();\n }\n\n this.pendingOperation = null;\n }\n\n /**\n * Cancel pending operation\n */\n cancelPendingOperation(): void {\n this.pendingOperation = null;\n this.clearSelection();\n this.map.getCanvas().style.cursor = '';\n this.updateToolbarState();\n }\n\n // ============================================================================\n // Selection Management\n // ============================================================================\n\n /**\n * Setup selection highlight layer\n */\n private setupSelectionHighlight(): void {\n if (!this.map) return;\n\n // Add source for selection highlights\n if (!this.map.getSource(INTERNAL_IDS.SELECTION_SOURCE)) {\n this.map.addSource(INTERNAL_IDS.SELECTION_SOURCE, {\n type: 'geojson',\n data: { type: 'FeatureCollection', features: [] },\n });\n\n // Add fill layer for polygons - bright yellow fill\n this.map.addLayer({\n id: INTERNAL_IDS.SELECTION_FILL_LAYER,\n type: 'fill',\n source: INTERNAL_IDS.SELECTION_SOURCE,\n filter: ['match', ['geometry-type'], ['Polygon', 'MultiPolygon'], true, false],\n paint: {\n 'fill-color': '#ffff00',\n 'fill-opacity': 0.3,\n },\n });\n\n // Add line layer for all geometries - bright yellow/orange dashed outline\n this.map.addLayer({\n id: INTERNAL_IDS.SELECTION_LINE_LAYER,\n type: 'line',\n source: INTERNAL_IDS.SELECTION_SOURCE,\n paint: {\n 'line-color': '#ff9900',\n 'line-width': 5,\n 'line-opacity': 1,\n 'line-dasharray': [3, 2],\n },\n });\n } else {\n // Layers exist, move them to the top to ensure visibility\n try {\n if (this.map.getLayer(INTERNAL_IDS.SELECTION_FILL_LAYER)) {\n this.map.setFilter(INTERNAL_IDS.SELECTION_FILL_LAYER, [\n 'match',\n ['geometry-type'],\n ['Polygon', 'MultiPolygon'],\n true,\n false,\n ]);\n this.map.moveLayer(INTERNAL_IDS.SELECTION_FILL_LAYER);\n }\n if (this.map.getLayer(INTERNAL_IDS.SELECTION_LINE_LAYER)) {\n this.map.moveLayer(INTERNAL_IDS.SELECTION_LINE_LAYER);\n }\n } catch {\n // Ignore move errors\n }\n }\n }\n\n /**\n * Update selection highlight on the map\n */\n private updateSelectionHighlight(): void {\n if (!this.map) return;\n\n // Ensure layers exist\n this.setupSelectionHighlight();\n\n const source = this.map.getSource(INTERNAL_IDS.SELECTION_SOURCE) as GeoJSONSource | undefined;\n if (source) {\n const features = this.getSelectedFeatures();\n source.setData({\n type: 'FeatureCollection',\n features,\n });\n }\n }\n\n /**\n * Select features\n */\n selectFeatures(features: Feature[], geomanDataList?: GeomanFeatureData[]): void {\n const resolvedGeomanData =\n geomanDataList && geomanDataList.length\n ? geomanDataList\n : features.map((feature) => this.findGeomanDataForFeature(feature));\n const fallbackBase = Date.now();\n\n this.state.selectedFeatures = features.map((f, i) => ({\n id: String(resolvedGeomanData?.[i]?.id ?? f.id ?? `${fallbackBase}-${i}`),\n feature: f,\n layerId: 'default',\n geomanData: resolvedGeomanData?.[i] ?? undefined,\n }));\n this.updateSelectionHighlight();\n this.options.onSelectionChange?.(features);\n this.logSelectedFeatureCollection('selected');\n }\n\n /**\n * Add feature to selection\n */\n addToSelection(feature: Feature, geomanData?: GeomanFeatureData): void {\n const resolvedGeomanData = geomanData ?? this.findGeomanDataForFeature(feature);\n const featureId = String(resolvedGeomanData?.id ?? feature.id);\n const exists = this.state.selectedFeatures.some(\n (s) => s.id === featureId\n );\n if (!exists) {\n this.state.selectedFeatures.push({\n id: featureId,\n feature,\n layerId: 'default',\n geomanData: resolvedGeomanData ?? undefined,\n });\n this.updateSelectionHighlight();\n this.options.onSelectionChange?.(this.getSelectedFeatures());\n this.logSelectedFeatureCollection('selected');\n }\n }\n\n /**\n * Remove feature from selection\n */\n removeFromSelection(featureId: string): void {\n this.state.selectedFeatures = this.state.selectedFeatures.filter(\n (s) => s.id !== featureId\n );\n this.updateSelectionHighlight();\n this.options.onSelectionChange?.(this.getSelectedFeatures());\n this.logSelectedFeatureCollection('selected');\n }\n\n /**\n * Clear selection\n */\n clearSelection(): void {\n this.state.selectedFeatures = [];\n this.updateSelectionHighlight();\n this.options.onSelectionChange?.([]);\n this.logSelectedFeatureCollection('selected');\n }\n\n // ============================================================================\n // Advanced Edit Mode Implementations\n // ============================================================================\n\n /**\n * Enable scale mode\n */\n private enableScaleMode(): void {\n this.scaleTargetFeature = null;\n this.scaleTargetGeomanData = null;\n\n const selected = this.getSelectedFeatures();\n if (selected.length === 0) {\n console.warn('Select a feature to scale');\n return;\n }\n\n const geomanData = this.findGeomanDataForFeature(selected[0]);\n if (!geomanData) {\n console.warn('Selected feature is not managed by Geoman');\n return;\n }\n\n this.scaleTargetFeature = selected[0];\n this.scaleTargetGeomanData = geomanData;\n this.scaleFeature.showHandlesForFeature(selected[0]);\n this.bringScaleHandlesToFront();\n if (this.state.selectedFeatures.length > 0) {\n this.state.selectedFeatures[0] = {\n ...this.state.selectedFeatures[0],\n id: String(geomanData.id),\n geomanData,\n };\n }\n\n // Scale mode is interactive - the actual scaling happens in event handlers\n this.map.getCanvas().style.cursor = 'nwse-resize';\n }\n\n /**\n * Enable copy mode\n */\n private enableCopyMode(): void {\n this.copySelectedFeatures();\n }\n\n /**\n * Enable split mode\n */\n private enableSplitMode(): void {\n const selected = this.getSelectedFeatures();\n if (selected.length === 0) {\n console.warn('Select a polygon or line to split');\n return;\n }\n\n const feature = selected[0];\n if (!isPolygon(feature) && !isLine(feature)) {\n console.warn('Can only split polygons and lines');\n return;\n }\n\n this.splitFeature.startSplit(\n feature as Feature<Polygon | LineString>,\n (result: SplitResult) => {\n this.handleSplitResult(result);\n }\n );\n }\n\n /**\n * Enable lasso selection mode\n */\n private enableLassoMode(): void {\n this.lassoFeature.enable((result: LassoResult) => {\n this.handleLassoResult(result);\n });\n }\n\n /**\n * Execute union on selected polygons\n */\n private executeUnion(): void {\n const selected = this.getSelectedFeatures();\n const polygons = getPolygonFeatures(selected);\n\n if (polygons.length < 2) {\n console.warn('Select at least 2 polygons to merge');\n return;\n }\n\n const result = this.unionFeature.union(polygons);\n this.handleUnionResult(result);\n }\n\n /**\n * Execute difference on selected polygons\n */\n private executeDifference(): void {\n const selected = this.getSelectedFeatures();\n const polygons = getPolygonFeatures(selected);\n\n if (polygons.length < 2) {\n console.warn('Select at least 2 polygons (first is base, rest are subtracted)');\n return;\n }\n\n const [base, ...subtract] = polygons;\n const result = this.differenceFeature.difference(base, subtract);\n this.handleDifferenceResult(result);\n }\n\n /**\n * Execute simplify on selected features\n */\n private executeSimplify(): void {\n const selected = this.getSelectedFeatures();\n let targets = selected;\n\n if (targets.length === 0 && this.lastCreatedFeature) {\n targets = [this.lastCreatedFeature];\n }\n\n if (targets.length === 0) {\n console.warn('Select a feature to simplify');\n return;\n }\n\n const results = targets\n .map((feature) => this.getSimplifyResult(feature))\n .filter((result): result is SimplifyResult => Boolean(result));\n const shouldBatch = results.length > 1;\n\n if (results.length === 0) {\n console.warn('Simplify: no vertices removed with current tolerance');\n return;\n }\n\n results.forEach((result) => {\n this.applySimplifyResult(result, {\n clearSelection: !shouldBatch,\n disableModes: !shouldBatch,\n });\n this.logSelectedFeatureCollection('edited', result.result);\n });\n\n if (shouldBatch) {\n this.clearSelection();\n this.disableAllModes();\n }\n }\n\n private getSimplifyResult(feature: Feature): SimplifyResult | null {\n const base = this.simplifyFeature.simplifyWithStats(feature);\n if (base.verticesAfter < base.verticesBefore) {\n return base;\n }\n\n const tolerances = this.simplifyFeature.getSuggestedTolerances(feature);\n for (const tolerance of tolerances) {\n if (tolerance === this.options.simplifyTolerance) {\n continue;\n }\n const result = this.simplifyFeature.simplifyWithStats(feature, { tolerance });\n if (result.verticesAfter < result.verticesBefore) {\n return result;\n }\n }\n\n return null;\n }\n\n // ============================================================================\n // Copy/Paste Operations\n // ============================================================================\n\n /**\n * Copy selected features to clipboard\n */\n copySelectedFeatures(): void {\n const selected = this.getSelectedFeatures();\n if (selected.length === 0) {\n console.warn('No features selected to copy');\n return;\n }\n\n this.state.clipboard = this.copyFeature.copyMultiple(selected);\n this.emitEvent('gm:copy', { features: selected });\n }\n\n /**\n * Paste features from clipboard\n */\n pasteFeatures(): void {\n if (this.state.clipboard.length === 0) {\n console.warn('Clipboard is empty');\n return;\n }\n\n const pasted = this.copyFeature.copyMultiple(this.state.clipboard);\n\n // Add features to the map\n if (this.geoman) {\n pasted.forEach((feature) => {\n this.geoman?.features.importGeoJsonFeature(feature);\n this.options.onFeatureCreate?.(feature);\n this.lastCreatedFeature = feature;\n });\n }\n\n this.emitEvent('gm:paste', { features: pasted });\n }\n\n /**\n * Delete a feature by ID\n */\n private deleteFeatureById(featureId: string): void {\n if (!this.geoman) return;\n\n try {\n // Try to find and delete the feature\n const toDelete: GeomanFeatureData[] = [];\n this.geoman.features.forEach((fd) => {\n const feature = this.getGeomanFeature(fd);\n const featureProps = feature?.properties as { __gm_id?: string | number } | undefined;\n if (\n String(fd.id) === featureId ||\n String(feature?.id) === featureId ||\n String(featureProps?.__gm_id) === featureId\n ) {\n toDelete.push(fd);\n }\n });\n toDelete.forEach((fd) => {\n this.deleteGeomanFeatureData(fd);\n });\n } catch {\n // Silently fail if feature not found\n }\n }\n\n /**\n * Delete selected features\n */\n deleteSelectedFeatures(): void {\n const selected = this.state.selectedFeatures;\n if (selected.length === 0) {\n return;\n }\n\n selected.forEach((s) => {\n const geomanData = s.geomanData ?? this.findGeomanDataForFeature(s.feature);\n this.deleteGeomanFeatureData(geomanData, s.id);\n this.options.onFeatureDelete?.(s.id);\n this.lastDeletedFeature = s.feature;\n this.lastDeletedFeatureId = s.id;\n this.logSelectedFeatureCollection('deleted', s.feature);\n });\n\n this.clearSelection();\n }\n\n private deleteGeomanFeatureData(\n geomanData?: GeomanFeatureData | null,\n fallbackId?: string | null\n ): void {\n if (!this.geoman) return;\n\n if (geomanData) {\n try {\n this.geoman.features.delete(geomanData);\n return;\n } catch {\n // Continue with fallback delete\n }\n try {\n geomanData.delete();\n return;\n } catch {\n // Continue with fallback delete\n }\n }\n\n if (fallbackId) {\n this.deleteFeatureById(fallbackId);\n }\n }\n\n private deleteGeomanFeatures(features: Feature[]): void {\n features.forEach((feature) => {\n const geomanData = this.findGeomanDataForFeature(feature);\n const fallbackId = this.getGeomanIdFromFeature(feature);\n this.deleteGeomanFeatureData(geomanData, fallbackId ?? undefined);\n if (fallbackId) {\n this.options.onFeatureDelete?.(fallbackId);\n }\n this.lastDeletedFeature = feature;\n this.lastDeletedFeatureId = fallbackId ?? null;\n this.logSelectedFeatureCollection('deleted', feature);\n });\n }\n\n private clearGeomanTemporaryFeatures(): void {\n if (!this.geoman) return;\n\n try {\n if (typeof this.geoman.features.tmpForEach === 'function') {\n this.geoman.features.tmpForEach((fd) => {\n try {\n fd.delete();\n } catch {\n // Ignore delete errors for temporary features\n }\n });\n return;\n }\n\n this.geoman.features.forEach((fd) => {\n if (fd.temporary) {\n try {\n fd.delete();\n } catch {\n // Ignore delete errors for temporary features\n }\n }\n });\n } catch {\n // Ignore cleanup errors\n }\n }\n\n // ============================================================================\n // Result Handlers\n // ============================================================================\n\n private handleSplitResult(result: SplitResult): void {\n if (!result.success) {\n console.warn('Split failed:', result.error);\n return;\n }\n\n // Remove original feature using provided result data\n this.deleteGeomanFeatures([result.original]);\n this.clearGeomanTemporaryFeatures();\n this.clearSelection();\n\n // Add new parts\n if (this.geoman) {\n result.parts.forEach((part) => {\n this.geoman?.features.importGeoJsonFeature(part);\n this.options.onFeatureCreate?.(part);\n this.lastCreatedFeature = part;\n this.logSelectedFeatureCollection('created', part);\n });\n }\n\n this.emitEvent('gm:split', result);\n this.disableAllModes();\n }\n\n private handleUnionResult(result: UnionResult): void {\n if (!result.success || !result.result) {\n console.warn('Union failed:', result.error);\n return;\n }\n\n // Remove original features using provided result data\n this.deleteGeomanFeatures(result.originals);\n this.clearGeomanTemporaryFeatures();\n this.clearSelection();\n\n // Add merged feature\n if (this.geoman) {\n this.geoman.features.importGeoJsonFeature(result.result);\n this.options.onFeatureCreate?.(result.result);\n this.lastCreatedFeature = result.result;\n this.logSelectedFeatureCollection('created', result.result);\n }\n\n this.emitEvent('gm:union', result);\n this.disableAllModes();\n }\n\n private handleDifferenceResult(result: DifferenceResult): void {\n if (!result.success) {\n console.warn('Difference failed:', result.error);\n return;\n }\n\n // Remove original features using provided result data\n this.deleteGeomanFeatures([result.base, ...result.subtracted]);\n this.clearGeomanTemporaryFeatures();\n this.clearSelection();\n\n // Add result if not null (complete subtraction)\n if (result.result && this.geoman) {\n this.geoman.features.importGeoJsonFeature(result.result);\n this.options.onFeatureCreate?.(result.result);\n this.lastCreatedFeature = result.result;\n this.logSelectedFeatureCollection('created', result.result);\n }\n\n this.emitEvent('gm:difference', result);\n this.disableAllModes();\n }\n\n private applySimplifyResult(\n result: SimplifyResult,\n options: { clearSelection: boolean; disableModes: boolean }\n ): void {\n // Remove original feature\n this.deleteGeomanFeatures([result.original]);\n this.clearGeomanTemporaryFeatures();\n\n // Add simplified feature\n if (this.geoman) {\n result.result.id = this.getGeomanIdFromFeature(result.original) ?? result.result.id;\n this.geoman.features.importGeoJsonFeature(result.result);\n this.options.onFeatureEdit?.(result.result, result.original);\n this.lastEditedFeature = result.result;\n }\n\n this.emitEvent('gm:simplify', result);\n\n if (options.clearSelection) {\n this.clearSelection();\n }\n if (options.disableModes) {\n this.disableAllModes();\n }\n }\n\n private handleLassoResult(result: LassoResult): void {\n // Get all features and filter by lasso\n const allFeatures = this.getFeatures().features;\n const selected = this.lassoFeature.selectWithinLasso(\n result.lasso,\n allFeatures\n );\n\n this.selectFeatures(selected);\n this.emitEvent('gm:lassoend', { ...result, selected });\n this.disableAllModes();\n }\n\n // ============================================================================\n // UI Creation\n // ============================================================================\n\n /**\n * Create the toolbar UI\n */\n private createToolbar(): void {\n this.toolbar = document.createElement('div');\n this.toolbar.className = `${CSS_PREFIX}-toolbar ${CSS_PREFIX}-toolbar--${this.options.toolbarOrientation}`;\n\n // Add collapsed class if starting collapsed\n if (this.state.collapsed) {\n this.toolbar.classList.add(`${CSS_PREFIX}-toolbar--collapsed`);\n }\n\n // Collapse/expand button at the top\n const collapseBtn = this.createCollapseButton();\n this.toolbar.appendChild(collapseBtn);\n\n // Tool groups wrapper (can be hidden when collapsed)\n const toolsWrapper = document.createElement('div');\n toolsWrapper.className = `${CSS_PREFIX}-tools-wrapper`;\n\n // Draw tools group\n if (this.options.drawModes.length > 0) {\n const drawGroup = this.createToolGroup('Draw', this.options.drawModes, 'draw');\n toolsWrapper.appendChild(drawGroup);\n }\n\n // Edit tools group (basic)\n const basicEditModes = this.options.editModes.filter(\n (m) => !ADVANCED_EDIT_MODES.includes(m)\n );\n if (basicEditModes.length > 0) {\n const editGroup = this.createToolGroup('Edit', basicEditModes, 'edit');\n toolsWrapper.appendChild(editGroup);\n }\n\n // Advanced edit tools group\n const advancedModes = this.options.editModes.filter((m) =>\n ADVANCED_EDIT_MODES.includes(m)\n );\n if (advancedModes.length > 0) {\n const advancedGroup = this.createToolGroup('Advanced', advancedModes, 'edit');\n toolsWrapper.appendChild(advancedGroup);\n }\n\n // Helper tools group (snapping)\n if (this.options.helperModes.includes('snapping')) {\n const helperGroup = this.createHelperToolsGroup();\n toolsWrapper.appendChild(helperGroup);\n }\n\n const resetGroup = this.createResetToolsGroup();\n toolsWrapper.appendChild(resetGroup);\n\n this.toolbar.appendChild(toolsWrapper);\n\n // Apply initial collapsed state\n if (this.state.collapsed) {\n toolsWrapper.style.display = 'none';\n }\n\n this.container.appendChild(this.toolbar);\n }\n\n /**\n * Create the collapse/expand button\n */\n private createCollapseButton(): HTMLElement {\n const btn = document.createElement('button');\n btn.className = `${CSS_PREFIX}-tool-button ${CSS_PREFIX}-collapse-btn`;\n btn.title = this.state.collapsed ? 'Expand toolbar' : 'Collapse toolbar';\n btn.innerHTML = this.state.collapsed\n ? '<svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\"><path d=\"M12 8l-6 6h12z\" fill=\"currentColor\"/></svg>'\n : '<svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\"><path d=\"M12 16l6-6H6z\" fill=\"currentColor\"/></svg>';\n\n btn.addEventListener('click', () => {\n this.toggleCollapse();\n // Update button icon and title\n btn.innerHTML = this.state.collapsed\n ? '<svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\"><path d=\"M12 8l-6 6h12z\" fill=\"currentColor\"/></svg>'\n : '<svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\"><path d=\"M12 16l6-6H6z\" fill=\"currentColor\"/></svg>';\n btn.title = this.state.collapsed ? 'Expand toolbar' : 'Collapse toolbar';\n });\n\n return btn;\n }\n\n /**\n * Toggle toolbar collapsed state\n */\n toggleCollapse(): void {\n this.state.collapsed = !this.state.collapsed;\n\n if (this.toolbar) {\n // Toggle collapsed class on toolbar\n this.toolbar.classList.toggle(`${CSS_PREFIX}-toolbar--collapsed`, this.state.collapsed);\n\n const wrapper = this.toolbar.querySelector(`.${CSS_PREFIX}-tools-wrapper`) as HTMLElement;\n if (wrapper) {\n wrapper.style.display = this.state.collapsed ? 'none' : '';\n }\n }\n }\n\n /**\n * Check if toolbar is collapsed\n */\n isCollapsed(): boolean {\n return this.state.collapsed;\n }\n\n /**\n * Set toolbar collapsed state\n */\n setCollapsed(collapsed: boolean): void {\n if (this.state.collapsed !== collapsed) {\n this.toggleCollapse();\n }\n }\n\n /**\n * Create helper tools group (snapping toggle)\n */\n private createHelperToolsGroup(): HTMLElement {\n const group = document.createElement('div');\n group.className = `${CSS_PREFIX}-tool-group`;\n\n if (this.options.showLabels) {\n const groupLabel = document.createElement('div');\n groupLabel.className = `${CSS_PREFIX}-tool-group-label`;\n groupLabel.textContent = 'Helper';\n group.appendChild(groupLabel);\n }\n\n const buttons = document.createElement('div');\n buttons.className = `${CSS_PREFIX}-tool-buttons`;\n\n // Snapping toggle button\n const snappingBtn = document.createElement('button');\n snappingBtn.className = `${CSS_PREFIX}-tool-button`;\n snappingBtn.dataset.helper = 'snapping';\n snappingBtn.title = 'Toggle Snapping';\n snappingBtn.innerHTML = '<svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\"><path d=\"M7 3h4v6H7V3zm6 0h4v6h-4V3zM7 9h4v3a3 3 0 0 0 6 0V9h4v3a7 7 0 0 1-14 0V9z\" fill=\"currentColor\"/></svg>';\n\n // Set initial state from instance property\n if (this.snappingEnabled) {\n snappingBtn.classList.add(`${CSS_PREFIX}-tool-button--active`);\n }\n\n // Toggle snapping on click (independent of other mode changes)\n snappingBtn.addEventListener('click', (e) => {\n e.stopPropagation(); // Prevent event bubbling\n this.toggleSnapping();\n snappingBtn.classList.toggle(`${CSS_PREFIX}-tool-button--active`, this.snappingEnabled);\n });\n\n buttons.appendChild(snappingBtn);\n group.appendChild(buttons);\n return group;\n }\n\n private createResetToolsGroup(): HTMLElement {\n const group = document.createElement('div');\n group.className = `${CSS_PREFIX}-tool-group`;\n\n if (this.options.showLabels) {\n const groupLabel = document.createElement('div');\n groupLabel.className = `${CSS_PREFIX}-tool-group-label`;\n groupLabel.textContent = 'Reset';\n group.appendChild(groupLabel);\n }\n\n const buttons = document.createElement('div');\n buttons.className = `${CSS_PREFIX}-tool-buttons`;\n\n const resetBtn = document.createElement('button');\n resetBtn.className = `${CSS_PREFIX}-tool-button`;\n resetBtn.title = 'Clear selection and disable tools';\n resetBtn.innerHTML = '<svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\"><path d=\"M12 5a7 7 0 1 1-6.32 4H3l3.5-3.5L10 9H7.74A5 5 0 1 0 12 7v2l3-3-3-3v2z\" fill=\"currentColor\"/></svg>';\n resetBtn.addEventListener('click', () => {\n this.disableAllModes();\n this.clearSelection();\n this.updateToolbarState();\n });\n\n buttons.appendChild(resetBtn);\n group.appendChild(buttons);\n return group;\n }\n\n /**\n * Toggle snapping on/off (independent of other modes)\n * Note: Snapping functionality requires Geoman Pro. In the free version,\n * this toggle tracks state but does not enable actual vertex snapping.\n */\n toggleSnapping(): void {\n this.snappingEnabled = !this.snappingEnabled;\n\n this.applySnappingState();\n }\n\n /**\n * Check if snapping is enabled\n */\n isSnappingEnabled(): boolean {\n return this.snappingEnabled;\n }\n\n /**\n * Set snapping state\n */\n setSnapping(enabled: boolean): void {\n this.snappingEnabled = enabled;\n this.applySnappingState();\n }\n\n private applySnappingState(): void {\n if (!this.geoman) {\n return;\n }\n\n try {\n if (typeof this.geoman.enableMode === 'function') {\n if (this.snappingEnabled) {\n this.geoman.enableMode('helper', 'snapping');\n } else {\n this.geoman.disableMode('helper', 'snapping');\n }\n return;\n }\n\n // Fallback for older APIs\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const gm = this.geoman as any;\n if (typeof gm.setGlobalOptions === 'function') {\n gm.setGlobalOptions({ snapping: this.snappingEnabled });\n } else if (typeof gm.enableSnapping === 'function' && this.snappingEnabled) {\n gm.enableSnapping();\n } else if (typeof gm.disableSnapping === 'function' && !this.snappingEnabled) {\n gm.disableSnapping();\n }\n } catch {\n console.info('Snapping toggle: Geoman version does not support snapping.');\n }\n }\n\n /**\n * Create a tool group\n */\n private createToolGroup(\n label: string,\n modes: (DrawMode | EditMode)[],\n type: 'draw' | 'edit'\n ): HTMLElement {\n const group = document.createElement('div');\n group.className = `${CSS_PREFIX}-tool-group`;\n\n if (this.options.showLabels) {\n const groupLabel = document.createElement('div');\n groupLabel.className = `${CSS_PREFIX}-tool-group-label`;\n groupLabel.textContent = label;\n group.appendChild(groupLabel);\n }\n\n const buttons = document.createElement('div');\n buttons.className = `${CSS_PREFIX}-tool-buttons`;\n\n modes.forEach((mode) => {\n const button = this.createToolButton(mode, type);\n buttons.appendChild(button);\n });\n\n group.appendChild(buttons);\n return group;\n }\n\n /**\n * Create a tool button\n */\n private createToolButton(\n mode: DrawMode | EditMode,\n type: 'draw' | 'edit'\n ): HTMLElement {\n const button = document.createElement('button');\n button.className = `${CSS_PREFIX}-tool-button`;\n button.dataset.mode = mode;\n button.dataset.type = type;\n button.title = this.getModeLabel(mode);\n button.innerHTML = this.getModeIcon(mode);\n\n button.addEventListener('click', () => {\n if (type === 'draw') {\n this.enableDrawMode(mode as DrawMode);\n } else {\n this.enableEditMode(mode as EditMode);\n }\n });\n\n return button;\n }\n\n /**\n * Update toolbar button states\n */\n private updateToolbarState(): void {\n const buttons = this.container.querySelectorAll(`.${CSS_PREFIX}-tool-button`);\n buttons.forEach((btn) => {\n const button = btn as HTMLButtonElement;\n const mode = button.dataset.mode;\n const type = button.dataset.type;\n const helper = button.dataset.helper;\n\n // Skip helper buttons (snapping) - they manage their own state\n if (helper) return;\n\n let isActive = false;\n\n if (type === 'draw') {\n isActive = mode === this.state.activeDrawMode;\n } else if (type === 'edit') {\n // Special handling for select mode\n if (mode === 'select') {\n isActive = this.isSelectMode;\n } else if (mode === 'union') {\n // Union is active when in pending union mode\n isActive = this.pendingOperation === 'union';\n } else if (mode === 'difference') {\n // Difference is active when in pending difference mode\n isActive = this.pendingOperation === 'difference';\n } else {\n isActive = mode === this.state.activeEditMode;\n }\n }\n\n button.classList.toggle(`${CSS_PREFIX}-tool-button--active`, isActive);\n\n // Clear any inline styles that might conflict with CSS - let CSS handle colors\n const svg = button.querySelector('svg');\n if (svg) {\n svg.querySelectorAll('path, polygon, rect, circle, ellipse, line, text').forEach((el) => {\n const element = el as SVGElement;\n // Remove inline styles to let CSS take over\n element.style.fill = '';\n element.style.stroke = '';\n });\n }\n });\n }\n\n /**\n * Get human-readable label for a mode\n */\n private getModeLabel(mode: DrawMode | EditMode): string {\n const labels: Record<string, string> = {\n // Draw modes\n marker: 'Marker',\n circle: 'Circle',\n circle_marker: 'Circle Marker',\n ellipse: 'Ellipse',\n text_marker: 'Text',\n line: 'Line',\n rectangle: 'Rectangle',\n polygon: 'Polygon',\n freehand: 'Freehand',\n // Edit modes\n select: 'Select (click features)',\n drag: 'Drag',\n change: 'Edit',\n rotate: 'Rotate',\n cut: 'Cut',\n delete: 'Delete',\n scale: 'Scale',\n copy: 'Copy',\n split: 'Split',\n union: 'Union (select 2+ polygons)',\n difference: 'Difference (select 2+ polygons)',\n simplify: 'Simplify',\n lasso: 'Lasso Select',\n };\n return labels[mode] || mode;\n }\n\n /**\n * Get SVG icon for a mode\n */\n private getModeIcon(mode: DrawMode | EditMode): string {\n // Simple SVG icons\n const icons: Record<string, string> = {\n polygon: '<svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\"><polygon points=\"12,2 22,8 18,22 6,22 2,8\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/></svg>',\n line: '<svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\"><line x1=\"4\" y1=\"20\" x2=\"20\" y2=\"4\" stroke=\"currentColor\" stroke-width=\"2\"/></svg>',\n rectangle: '<svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\"><rect x=\"3\" y=\"5\" width=\"18\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/></svg>',\n circle: '<svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\"><circle cx=\"12\" cy=\"12\" r=\"9\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/></svg>',\n marker: '<svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\"><path d=\"M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7z\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/></svg>',\n select: '<svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\"><path d=\"M4 3l6 14 2-6 6-2L4 3z\" fill=\"currentColor\"/><path d=\"M12.5 13.5l4.5 4.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"/></svg>',\n drag: '<svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\"><path d=\"M10 9h4V6h3l-5-5-5 5h3v3zm-1 1H6V7l-5 5 5 5v-3h3v-4zm14 2l-5-5v3h-3v4h3v3l5-5zm-9 3h-4v3H7l5 5 5-5h-3v-3z\" fill=\"currentColor\"/></svg>',\n change: '<svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\"><path d=\"M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04a.996.996 0 0 0 0-1.41l-2.34-2.34a.996.996 0 0 0-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z\" fill=\"currentColor\"/></svg>',\n rotate: '<svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\"><path d=\"M17.65 6.35A7.958 7.958 0 0 0 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08A5.99 5.99 0 0 1 12 18c-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z\" fill=\"currentColor\"/></svg>',\n cut: '<svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\"><path d=\"M9.64 7.64c.23-.5.36-1.05.36-1.64 0-2.21-1.79-4-4-4S2 3.79 2 6s1.79 4 4 4c.59 0 1.14-.13 1.64-.36L10 12l-2.36 2.36C7.14 14.13 6.59 14 6 14c-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4c0-.59-.13-1.14-.36-1.64L12 14l7 7h3v-1L9.64 7.64z\" fill=\"currentColor\"/></svg>',\n delete: '<svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\"><path d=\"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z\" fill=\"currentColor\"/></svg>',\n scale: '<svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\"><path d=\"M21 15h2v2h-2v-2zm0-4h2v2h-2v-2zm2 8h-2v2c1 0 2-1 2-2zM13 3h2v2h-2V3zm8 4h2v2h-2V7zm0-4v2h2c0-1-1-2-2-2zM1 7h2v2H1V7zm16-4h2v2h-2V3zm0 16h2v2h-2v-2zM3 3C2 3 1 4 1 5h2V3zm6 0h2v2H9V3zM5 3h2v2H5V3zm-4 8v8c0 1.1.9 2 2 2h12V11H1z\" fill=\"currentColor\"/></svg>',\n copy: '<svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\"><path d=\"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z\" fill=\"currentColor\"/></svg>',\n split: '<svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\"><path d=\"M14 4l2.29 2.29-2.88 2.88 1.42 1.42 2.88-2.88L20 10V4h-6zm-4 0H4v6l2.29-2.29 4.71 4.7V20h2v-8.41l-5.29-5.3L10 4z\" fill=\"currentColor\"/></svg>',\n union: '<svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\"><path d=\"M4 4h7v7H4V4zm9 0h7v7h-7V4zm-9 9h7v7H4v-7zm9 0h7v7h-7v-7z\" fill=\"currentColor\"/></svg>',\n difference: '<svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\"><rect x=\"4\" y=\"4\" width=\"10\" height=\"10\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/><rect x=\"10\" y=\"10\" width=\"10\" height=\"10\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/><path d=\"M13 7h6v2h-6z\" fill=\"currentColor\"/></svg>',\n simplify: '<svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\"><path d=\"M4 17l5-5 3 3 6-6\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M5 6h14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"/></svg>',\n lasso: '<svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\"><ellipse cx=\"12\" cy=\"10\" rx=\"8\" ry=\"6\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-dasharray=\"4 2\"/><circle cx=\"12\" cy=\"18\" r=\"3\" fill=\"currentColor\"/></svg>',\n freehand: '<svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\"><path d=\"M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25z\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/></svg>',\n circle_marker: '<svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\"><circle cx=\"12\" cy=\"12\" r=\"4\" fill=\"currentColor\"/></svg>',\n ellipse: '<svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\"><ellipse cx=\"12\" cy=\"12\" rx=\"10\" ry=\"6\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/></svg>',\n text_marker: '<svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\"><text x=\"12\" y=\"16\" text-anchor=\"middle\" font-size=\"14\" fill=\"currentColor\">T</text></svg>',\n };\n return icons[mode] || `<span>${mode[0].toUpperCase()}</span>`;\n }\n\n // ============================================================================\n // Keyboard Shortcuts\n // ============================================================================\n\n private setupKeyboardShortcuts(): void {\n this.boundKeyHandler = (e: KeyboardEvent) => {\n // Ctrl/Cmd + C\n if ((e.ctrlKey || e.metaKey) && e.key === 'c') {\n this.copySelectedFeatures();\n e.preventDefault();\n }\n // Ctrl/Cmd + V\n if ((e.ctrlKey || e.metaKey) && e.key === 'v') {\n this.pasteFeatures();\n e.preventDefault();\n }\n // Delete\n if (e.key === 'Delete' || e.key === 'Backspace') {\n this.deleteSelectedFeatures();\n e.preventDefault();\n }\n // Enter - execute pending operation (union/difference)\n if (e.key === 'Enter' && this.pendingOperation) {\n this.executePendingOperation();\n e.preventDefault();\n }\n // Escape\n if (e.key === 'Escape') {\n if (this.pendingOperation) {\n this.cancelPendingOperation();\n } else {\n this.disableAllModes();\n this.clearSelection();\n }\n }\n };\n\n document.addEventListener('keydown', this.boundKeyHandler);\n }\n\n private removeKeyboardShortcuts(): void {\n if (this.boundKeyHandler) {\n document.removeEventListener('keydown', this.boundKeyHandler);\n this.boundKeyHandler = null;\n }\n }\n\n // ============================================================================\n // Geoman Integration\n // ============================================================================\n\n private setupGeomanEvents(): void {\n if (!this.geoman) return;\n\n this.geoman.setGlobalEventsListener((event) => {\n const eventName = (event as { name?: string; type?: string }).name ?? event.type ?? '';\n const eventFeature = this.extractFeatureFromEvent((event as { feature?: unknown }).feature);\n\n // Handle feature creation\n if ((eventName === 'gm:create' || event.type === 'gm:create') && eventFeature) {\n this.lastCreatedFeature = eventFeature;\n this.options.onFeatureCreate?.(eventFeature);\n this.logSelectedFeatureCollection('created', eventFeature);\n }\n\n if ((event as { action?: string }).action === 'feature_edit_end' && eventFeature) {\n this.lastEditedFeature = eventFeature;\n this.logSelectedFeatureCollection('edited', eventFeature);\n }\n\n if ((event as { action?: string }).action === 'feature_removed' && eventFeature) {\n this.lastDeletedFeature = eventFeature;\n this.lastDeletedFeatureId = this.getGeomanIdFromFeature(eventFeature);\n this.logSelectedFeatureCollection('deleted', eventFeature);\n }\n\n // Handle mode changes\n if (eventName.includes('modetoggled') || event.type?.includes('modetoggled')) {\n this.updateToolbarState();\n }\n });\n }\n\n // ============================================================================\n // Event Emission\n // ============================================================================\n\n private emitEvent(type: string, detail: unknown): void {\n const event = new CustomEvent(type, { detail });\n this.map.getContainer().dispatchEvent(event);\n }\n}\n","import * as turf from '@turf/turf';\nimport type {\n Feature,\n Polygon,\n MultiPolygon,\n LineString,\n Point,\n FeatureCollection,\n Position,\n} from 'geojson';\n\n/**\n * Safe wrapper for turf.union that handles edge cases\n */\nexport function safeUnion(\n features: Feature<Polygon | MultiPolygon>[]\n): Feature<Polygon | MultiPolygon> | null {\n try {\n if (features.length === 0) return null;\n if (features.length === 1) return turf.clone(features[0]);\n\n const collection = turf.featureCollection(features);\n return turf.union(collection) as Feature<Polygon | MultiPolygon> | null;\n } catch (error) {\n console.error('Union operation failed:', error);\n return null;\n }\n}\n\n/**\n * Safe wrapper for turf.difference\n */\nexport function safeDifference(\n polygon1: Feature<Polygon | MultiPolygon>,\n polygon2: Feature<Polygon | MultiPolygon>\n): Feature<Polygon | MultiPolygon> | null {\n try {\n const collection = turf.featureCollection([polygon1, polygon2]);\n return turf.difference(collection) as Feature<Polygon | MultiPolygon> | null;\n } catch (error) {\n console.error('Difference operation failed:', error);\n return null;\n }\n}\n\n/**\n * Safe wrapper for turf.simplify\n */\nexport function safeSimplify<T extends Feature>(\n feature: T,\n options: { tolerance: number; highQuality?: boolean }\n): T {\n try {\n return turf.simplify(feature, options) as T;\n } catch (error) {\n console.error('Simplify operation failed:', error);\n return turf.clone(feature) as T;\n }\n}\n\n/**\n * Safe wrapper for turf.transformScale\n */\nexport function safeScale(\n feature: Feature,\n factor: number,\n origin?: Position\n): Feature {\n try {\n const options = origin ? { origin: origin as [number, number] } : {};\n return turf.transformScale(feature, factor, options);\n } catch (error) {\n console.error('Scale operation failed:', error);\n return turf.clone(feature);\n }\n}\n\n/**\n * Get centroid with fallback for invalid geometries\n */\nexport function safeCentroid(feature: Feature): Feature<Point> {\n try {\n return turf.centroid(feature);\n } catch {\n // Fallback to center of bounding box\n const bbox = turf.bbox(feature);\n return turf.point([(bbox[0] + bbox[2]) / 2, (bbox[1] + bbox[3]) / 2]);\n }\n}\n\n/**\n * Safe wrapper for turf.clone\n */\nexport function safeClone<T extends Feature>(feature: T): T {\n try {\n return turf.clone(feature) as T;\n } catch (error) {\n console.error('Clone operation failed:', error);\n return JSON.parse(JSON.stringify(feature)) as T;\n }\n}\n\n/**\n * Safe wrapper for turf.transformTranslate\n */\nexport function safeTranslate(\n feature: Feature,\n distance: number,\n direction: number\n): Feature {\n try {\n return turf.transformTranslate(feature, distance, direction);\n } catch (error) {\n console.error('Translate operation failed:', error);\n return turf.clone(feature);\n }\n}\n\n/**\n * Safe wrapper for turf.lineSplit\n */\nexport function safeLineSplit(\n line: Feature<LineString>,\n splitter: Feature<LineString>\n): FeatureCollection<LineString> {\n try {\n return turf.lineSplit(line, splitter as Parameters<typeof turf.lineSplit>[1]) as FeatureCollection<LineString>;\n } catch (error) {\n console.error('Line split operation failed:', error);\n return turf.featureCollection([line]);\n }\n}\n\n/**\n * Safe wrapper for turf.lineIntersect\n */\nexport function safeLineIntersect(\n line1: Feature<LineString>,\n line2: Feature<LineString>\n): FeatureCollection<Point> {\n try {\n return turf.lineIntersect(line1, line2);\n } catch (error) {\n console.error('Line intersect operation failed:', error);\n return turf.featureCollection([]);\n }\n}\n\n/**\n * Check if a feature is within another feature\n */\nexport function isWithin(feature: Feature, container: Feature): boolean {\n try {\n return turf.booleanWithin(feature, container);\n } catch {\n return false;\n }\n}\n\n/**\n * Check if two features intersect\n */\nexport function intersects(feature1: Feature, feature2: Feature): boolean {\n try {\n return turf.booleanIntersects(feature1, feature2);\n } catch {\n return false;\n }\n}\n\n/**\n * Check if two polygons overlap\n */\nexport function overlaps(\n feature1: Feature<Polygon | MultiPolygon>,\n feature2: Feature<Polygon | MultiPolygon>\n): boolean {\n try {\n return turf.booleanOverlap(feature1, feature2);\n } catch {\n return false;\n }\n}\n\n/**\n * Check if polygon1 contains polygon2\n */\nexport function contains(\n container: Feature<Polygon | MultiPolygon>,\n contained: Feature<Polygon | MultiPolygon>\n): boolean {\n try {\n return turf.booleanContains(container, contained);\n } catch {\n return false;\n }\n}\n\n/**\n * Get bounding box of a feature\n */\nexport function getBBox(feature: Feature): [number, number, number, number] {\n return turf.bbox(feature) as [number, number, number, number];\n}\n\n/**\n * Get all coordinates from a feature\n */\nexport function getCoordAll(feature: Feature): Position[] {\n return turf.coordAll(feature);\n}\n\n/**\n * Convert polygon to line\n */\nexport function polygonToLine(\n polygon: Feature<Polygon | MultiPolygon>\n): ReturnType<typeof turf.polygonToLine> {\n return turf.polygonToLine(polygon);\n}\n\n/**\n * Create a polygon from coordinates\n */\nexport function createPolygon(\n coordinates: Position[][],\n properties?: Record<string, unknown>\n): Feature<Polygon> {\n return turf.polygon(coordinates, properties);\n}\n\n/**\n * Create a line from coordinates\n */\nexport function createLine(\n coordinates: Position[],\n properties?: Record<string, unknown>\n): Feature<LineString> {\n return turf.lineString(coordinates, properties);\n}\n\n/**\n * Create a point from coordinates\n */\nexport function createPoint(\n coordinates: Position,\n properties?: Record<string, unknown>\n): Feature<Point> {\n return turf.point(coordinates, properties);\n}\n\n/**\n * Create a feature collection\n */\nexport function createFeatureCollection<T extends Feature>(\n features: T[]\n): FeatureCollection {\n return turf.featureCollection(features);\n}\n\n/**\n * Calculate the area of a polygon in square meters\n */\nexport function calculateArea(feature: Feature<Polygon | MultiPolygon>): number {\n try {\n return turf.area(feature);\n } catch {\n return 0;\n }\n}\n\n/**\n * Calculate the length of a line in kilometers\n */\nexport function calculateLength(feature: Feature<LineString>): number {\n try {\n return turf.length(feature, { units: 'kilometers' });\n } catch {\n return 0;\n }\n}\n\n/**\n * Get the bounding box corners as coordinates\n */\nexport function getBBoxCorners(feature: Feature): Position[] {\n const bbox = turf.bbox(feature);\n return [\n [bbox[0], bbox[3]], // NW\n [bbox[2], bbox[3]], // NE\n [bbox[2], bbox[1]], // SE\n [bbox[0], bbox[1]], // SW\n ];\n}\n\n/**\n * Get the midpoints of the bounding box edges\n */\nexport function getBBoxMidpoints(feature: Feature): Position[] {\n const bbox = turf.bbox(feature);\n const midX = (bbox[0] + bbox[2]) / 2;\n const midY = (bbox[1] + bbox[3]) / 2;\n return [\n [midX, bbox[3]], // N\n [bbox[2], midY], // E\n [midX, bbox[1]], // S\n [bbox[0], midY], // W\n ];\n}\n"],"names":["radians","distance","radiansToDegrees","degreesToRadians","degrees","length","isObject","featureId","bbox","calculateArea","intersect","feature","clipPolygon","epsilon","sum","polygon","point","pip","isPointOnLineSegment","x1","y1","cross","compareCoords","isPointInMultiPoint","isMultiPointInMultiPoint","isPointOnLine","isLineOnLine","isMultiPointOnLine","isLineInPoly","isPolyInPoly","isMultiPointInPoly","multiPolygon","lineString","calcBbox","doBBoxOverlap","getMidpoint","compare","defaultCompare","ringId","eventId","Segment","intersection","sweeplineIntersections","lib","polygonToLine","__defProp","_GeojsonEquality","_a","_b","equal","intersects","contains","area","rbush","turfBBox","equals","__defNormalProp","B","this","t","e","n","i","u","r","s","a","o","l","D","h","c","f","g","v","y","d","_","p","m","k","x","I","E","N","T","S","L","C","R","w","pi","adder","cartesian","spherical","compose","x0","y0","compareIntersection","clip","ring","visible","clipLine","delta","code","projection","resample","center","scale","clone","cloneFeature","BigNumber","temp","format","set","SplayTreeSet2","SplayTreeSet3","BigNumber2","polyclip.difference","bearing","intersection2","polyclip.intersection","precision","splitter","isPoint","polyclip.union","rbush2","polygon2","featureCollection2","turf.bbox","turf.point","turf.distance","turf.bearing","centroid","turf.centroid","turf.coordAll","turf.clone","turf.transformTranslate","turf.featureCollection","turf.simplify","turf.union","turf.booleanOverlap","turf.booleanIntersects","turf.area","turf.difference","turf.booleanContains","turf.intersect","turf.transformScale","turf.booleanWithin","turf.polygon","turf.lineString","turf.polygonToLine","turf.lineIntersect","turf.lineSplit","turf.buffer","turf.unkinkPolygon","turf.bboxClip","turf.booleanPointInPolygon","turf.nearestPointOnLine","turf.length"],"mappings":"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","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]}
1
+ {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";"}