leaflet-polydraw 0.8.5

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.
Files changed (59) hide show
  1. package/LICENCE +21 -0
  2. package/README.md +1006 -0
  3. package/dist/icons/icon-activate.svg +1 -0
  4. package/dist/icons/icon-add-elbow.svg +128 -0
  5. package/dist/icons/icon-bbox.svg +47 -0
  6. package/dist/icons/icon-bezier.svg +132 -0
  7. package/dist/icons/icon-draw.svg +1 -0
  8. package/dist/icons/icon-erase.svg +3 -0
  9. package/dist/icons/icon-info-white.svg +25 -0
  10. package/dist/icons/icon-settings-white.svg +15 -0
  11. package/dist/icons/icon-simplify.svg +61 -0
  12. package/dist/icons/icon-simplify2.svg +46 -0
  13. package/dist/icons/icon-subtract.svg +1 -0
  14. package/dist/icons/icon-trash-hover-white.svg +16 -0
  15. package/dist/icons/icon-trash-white.svg +16 -0
  16. package/dist/leaflet-polydraw.css +1 -0
  17. package/dist/polydraw.es.js +20688 -0
  18. package/dist/polydraw.es.js.map +1 -0
  19. package/dist/polydraw.umd.min.js +2 -0
  20. package/dist/polydraw.umd.min.js.map +1 -0
  21. package/dist/styles/polydraw.css +419 -0
  22. package/dist/types/buttons.d.ts +14 -0
  23. package/dist/types/buttons.d.ts.map +1 -0
  24. package/dist/types/coordinate-utils.d.ts +21 -0
  25. package/dist/types/coordinate-utils.d.ts.map +1 -0
  26. package/dist/types/enums.d.ts +27 -0
  27. package/dist/types/enums.d.ts.map +1 -0
  28. package/dist/types/geometry-utils.d.ts +24 -0
  29. package/dist/types/geometry-utils.d.ts.map +1 -0
  30. package/dist/types/icon-factory.d.ts +13 -0
  31. package/dist/types/icon-factory.d.ts.map +1 -0
  32. package/dist/types/index.d.ts +1 -0
  33. package/dist/types/managers/mode-manager.d.ts +91 -0
  34. package/dist/types/managers/mode-manager.d.ts.map +1 -0
  35. package/dist/types/managers/polygon-draw-manager.d.ts +88 -0
  36. package/dist/types/managers/polygon-draw-manager.d.ts.map +1 -0
  37. package/dist/types/managers/polygon-geometry-manager.d.ts +75 -0
  38. package/dist/types/managers/polygon-geometry-manager.d.ts.map +1 -0
  39. package/dist/types/managers/polygon-interaction-manager.d.ts +116 -0
  40. package/dist/types/managers/polygon-interaction-manager.d.ts.map +1 -0
  41. package/dist/types/managers/polygon-mutation-manager.d.ts +163 -0
  42. package/dist/types/managers/polygon-mutation-manager.d.ts.map +1 -0
  43. package/dist/types/map-state.d.ts +22 -0
  44. package/dist/types/map-state.d.ts.map +1 -0
  45. package/dist/types/polydraw.d.ts +87 -0
  46. package/dist/types/polydraw.d.ts.map +1 -0
  47. package/dist/types/polygon-helpers.d.ts +35 -0
  48. package/dist/types/polygon-helpers.d.ts.map +1 -0
  49. package/dist/types/polygon-information.service.d.ts +27 -0
  50. package/dist/types/polygon-information.service.d.ts.map +1 -0
  51. package/dist/types/polygon.util.d.ts +32 -0
  52. package/dist/types/polygon.util.d.ts.map +1 -0
  53. package/dist/types/turf-helper.d.ts +141 -0
  54. package/dist/types/turf-helper.d.ts.map +1 -0
  55. package/dist/types/types/polydraw-interfaces.d.ts +351 -0
  56. package/dist/types/types/polydraw-interfaces.d.ts.map +1 -0
  57. package/dist/types/utils.d.ts +57 -0
  58. package/dist/types/utils.d.ts.map +1 -0
  59. package/package.json +79 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"polydraw.es.js","sources":["../src/enums.ts","../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/destination/dist/esm/index.js","../node_modules/@turf/distance/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-polygon/dist/esm/index.js","../node_modules/@turf/bezier-spline/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/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/clean-coords/dist/esm/index.js","../node_modules/quickselect/index.js","../node_modules/rbush/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/rbush/rbush.min.js","../node_modules/tinyqueue/index.js","../node_modules/point-in-polygon/flat.js","../node_modules/point-in-polygon/nested.js","../node_modules/point-in-polygon/index.js","../node_modules/robust-predicates/umd/orient2d.min.js","../node_modules/concaveman/index.js","../node_modules/@turf/convex/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/explode/dist/esm/index.js","../node_modules/@turf/intersect/dist/esm/index.js","../node_modules/@turf/kinks/dist/esm/index.js","../node_modules/@turf/length/dist/esm/index.js","../node_modules/@turf/line-to-polygon/dist/esm/index.js","../node_modules/@turf/midpoint/dist/esm/index.js","../node_modules/@turf/nearest-point/dist/esm/index.js","../node_modules/@turf/simplify/dist/esm/index.js","../node_modules/@turf/union/dist/esm/index.js","../node_modules/@turf/unkink-polygon/dist/esm/index.js","../src/turf-helper.ts","../src/buttons.ts","../src/polygon.util.ts","../src/polygon-helpers.ts","../src/polygon-information.service.ts","../src/map-state.ts","../src/managers/mode-manager.ts","../src/managers/polygon-geometry-manager.ts","../src/managers/polygon-draw-manager.ts","../src/icon-factory.ts","../src/utils.ts","../src/managers/polygon-interaction-manager.ts","../src/managers/polygon-mutation-manager.ts","../src/polydraw.ts"],"sourcesContent":["/**\n * Enum for drawing modes in Polydraw.\n */\n// TODO: We have DrawModes in different places, refactor!\nexport enum DrawMode {\n Off = 0,\n Add = 1,\n Edit = 2,\n Subtract = 4,\n AppendMarker = 8,\n LoadPredefined = 16,\n PointToPoint = 32,\n}\n/**\n * Enum for marker positions.\n */\n// TODO: Add centerOfMass and BoundingBoxCenter\n// Issue: For the above, we can't use the polygon edges, we have to add stand alone divIcons\nexport enum MarkerPosition {\n SouthWest = 0,\n South = 1,\n SouthEast = 2,\n East = 3,\n NorthEast = 4,\n North = 5,\n NorthWest = 6,\n West = 7,\n Hole = 8,\n // CenterOfMass = 9,\n // BoundingBoxCenter = 10\n}\n","// 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 turf_bearing_default = bearing;\nexport {\n bearing,\n turf_bearing_default as default\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport {\n degreesToRadians,\n lengthToRadians,\n point,\n radiansToDegrees\n} from \"@turf/helpers\";\nimport { getCoord } from \"@turf/invariant\";\nfunction destination(origin, distance, bearing, options = {}) {\n const coordinates1 = getCoord(origin);\n const longitude1 = degreesToRadians(coordinates1[0]);\n const latitude1 = degreesToRadians(coordinates1[1]);\n const bearingRad = degreesToRadians(bearing);\n const radians = lengthToRadians(distance, options.units);\n const latitude2 = Math.asin(\n Math.sin(latitude1) * Math.cos(radians) + Math.cos(latitude1) * Math.sin(radians) * Math.cos(bearingRad)\n );\n const longitude2 = longitude1 + Math.atan2(\n Math.sin(bearingRad) * Math.sin(radians) * Math.cos(latitude1),\n Math.cos(radians) - Math.sin(latitude1) * Math.sin(latitude2)\n );\n const lng = radiansToDegrees(longitude2);\n const lat = radiansToDegrees(latitude2);\n return point([lng, lat], options.properties);\n}\nvar turf_destination_default = destination;\nexport {\n turf_destination_default as default,\n destination\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 turf_distance_default = distance;\nexport {\n turf_distance_default as default,\n distance\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 turf_area_default = area;\nexport {\n area,\n turf_area_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 turf_bbox_default = bbox;\nexport {\n bbox,\n turf_bbox_default as default\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport { polygon } from \"@turf/helpers\";\nfunction bboxPolygon(bbox, options = {}) {\n const west = Number(bbox[0]);\n const south = Number(bbox[1]);\n const east = Number(bbox[2]);\n const north = Number(bbox[3]);\n if (bbox.length === 6) {\n throw new Error(\n \"@turf/bbox-polygon does not support BBox with 6 positions\"\n );\n }\n const lowLeft = [west, south];\n const topLeft = [west, north];\n const topRight = [east, north];\n const lowRight = [east, south];\n return polygon(\n [[lowLeft, lowRight, topRight, topLeft, lowLeft]],\n options.properties,\n { bbox, id: options.id }\n );\n}\nvar turf_bbox_polygon_default = bboxPolygon;\nexport {\n bboxPolygon,\n turf_bbox_polygon_default as default\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport { lineString } from \"@turf/helpers\";\nimport { getGeom } from \"@turf/invariant\";\n\n// lib/spline.ts\nvar Spline = class {\n constructor(options) {\n this.points = options.points || [];\n this.duration = options.duration || 1e4;\n this.sharpness = options.sharpness || 0.85;\n this.centers = [];\n this.controls = [];\n this.stepLength = options.stepLength || 60;\n this.length = this.points.length;\n this.delay = 0;\n for (let i = 0; i < this.length; i++) {\n this.points[i].z = this.points[i].z || 0;\n }\n for (let i = 0; i < this.length - 1; i++) {\n const p1 = this.points[i];\n const p2 = this.points[i + 1];\n this.centers.push({\n x: (p1.x + p2.x) / 2,\n y: (p1.y + p2.y) / 2,\n z: (p1.z + p2.z) / 2\n });\n }\n this.controls.push([this.points[0], this.points[0]]);\n for (let i = 0; i < this.centers.length - 1; i++) {\n const dx = this.points[i + 1].x - (this.centers[i].x + this.centers[i + 1].x) / 2;\n const dy = this.points[i + 1].y - (this.centers[i].y + this.centers[i + 1].y) / 2;\n const dz = this.points[i + 1].z - (this.centers[i].y + this.centers[i + 1].z) / 2;\n this.controls.push([\n {\n x: (1 - this.sharpness) * this.points[i + 1].x + this.sharpness * (this.centers[i].x + dx),\n y: (1 - this.sharpness) * this.points[i + 1].y + this.sharpness * (this.centers[i].y + dy),\n z: (1 - this.sharpness) * this.points[i + 1].z + this.sharpness * (this.centers[i].z + dz)\n },\n {\n x: (1 - this.sharpness) * this.points[i + 1].x + this.sharpness * (this.centers[i + 1].x + dx),\n y: (1 - this.sharpness) * this.points[i + 1].y + this.sharpness * (this.centers[i + 1].y + dy),\n z: (1 - this.sharpness) * this.points[i + 1].z + this.sharpness * (this.centers[i + 1].z + dz)\n }\n ]);\n }\n this.controls.push([\n this.points[this.length - 1],\n this.points[this.length - 1]\n ]);\n this.steps = this.cacheSteps(this.stepLength);\n return this;\n }\n /**\n * Caches an array of equidistant (more or less) points on the curve.\n */\n cacheSteps(mindist) {\n const steps = [];\n let laststep = this.pos(0);\n steps.push(0);\n for (let t = 0; t < this.duration; t += 10) {\n const step = this.pos(t);\n const dist = Math.sqrt(\n (step.x - laststep.x) * (step.x - laststep.x) + (step.y - laststep.y) * (step.y - laststep.y) + (step.z - laststep.z) * (step.z - laststep.z)\n );\n if (dist > mindist) {\n steps.push(t);\n laststep = step;\n }\n }\n return steps;\n }\n /**\n * returns angle and speed in the given point in the curve\n */\n vector(t) {\n const p1 = this.pos(t + 10);\n const p2 = this.pos(t - 10);\n return {\n angle: 180 * Math.atan2(p1.y - p2.y, p1.x - p2.x) / 3.14,\n speed: Math.sqrt(\n (p2.x - p1.x) * (p2.x - p1.x) + (p2.y - p1.y) * (p2.y - p1.y) + (p2.z - p1.z) * (p2.z - p1.z)\n )\n };\n }\n /**\n * Gets the position of the point, given time.\n *\n * WARNING: The speed is not constant. The time it takes between control points is constant.\n *\n * For constant speed, use Spline.steps[i];\n */\n pos(time) {\n let t = time - this.delay;\n if (t < 0) {\n t = 0;\n }\n if (t > this.duration) {\n t = this.duration - 1;\n }\n const t2 = t / this.duration;\n if (t2 >= 1) {\n return this.points[this.length - 1];\n }\n const n = Math.floor((this.points.length - 1) * t2);\n const t1 = (this.length - 1) * t2 - n;\n return bezier(\n t1,\n this.points[n],\n this.controls[n][1],\n this.controls[n + 1][0],\n this.points[n + 1]\n );\n }\n};\nfunction bezier(t, p1, c1, c2, p2) {\n const b = B(t);\n const pos = {\n x: p2.x * b[0] + c2.x * b[1] + c1.x * b[2] + p1.x * b[3],\n y: p2.y * b[0] + c2.y * b[1] + c1.y * b[2] + p1.y * b[3],\n z: p2.z * b[0] + c2.z * b[1] + c1.z * b[2] + p1.z * b[3]\n };\n return pos;\n}\nfunction B(t) {\n const t2 = t * t;\n const t3 = t2 * t;\n return [\n t3,\n 3 * t2 * (1 - t),\n 3 * t * (1 - t) * (1 - t),\n (1 - t) * (1 - t) * (1 - t)\n ];\n}\n\n// index.ts\nfunction bezierSpline(line, options = {}) {\n const resolution = options.resolution || 1e4;\n const sharpness = options.sharpness || 0.85;\n const coords = [];\n const points = getGeom(line).coordinates.map((pt) => {\n return { x: pt[0], y: pt[1] };\n });\n const spline = new Spline({\n duration: resolution,\n points,\n sharpness\n });\n const pushCoord = (time) => {\n var pos = spline.pos(time);\n if (Math.floor(time / 100) % 2 === 0) {\n coords.push([pos.x, pos.y]);\n }\n };\n for (var i = 0; i < spline.duration; i += 10) {\n pushCoord(i);\n }\n pushCoord(spline.duration);\n return lineString(coords, options.properties);\n}\nvar turf_bezier_spline_default = bezierSpline;\nexport {\n bezierSpline,\n turf_bezier_spline_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 turf_boolean_point_in_polygon_default = booleanPointInPolygon;\nexport {\n booleanPointInPolygon,\n turf_boolean_point_in_polygon_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 turf_boolean_point_on_line_default = booleanPointOnLine;\nexport {\n booleanPointOnLine,\n turf_boolean_point_on_line_default as default\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 turf_line_intersect_default = lineIntersect;\nexport {\n turf_line_intersect_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 turf_polygon_to_line_default = polygonToLine;\nexport {\n coordsToLine,\n turf_polygon_to_line_default as default,\n multiPolygonToLine,\n polygonToLine,\n singlePolygonToLine\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport { feature } from \"@turf/helpers\";\nimport { getCoords, getType } from \"@turf/invariant\";\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 var points = getCoords(line);\n if (points.length === 2 && !equals(points[0], points[1])) return points;\n var newPoints = [];\n var secondToLast = points.length - 1;\n var newPointsLength = newPoints.length;\n newPoints.push(points[0]);\n for (var i = 1; i < secondToLast; i++) {\n var prevAddedPoint = newPoints[newPoints.length - 1];\n if (points[i][0] === prevAddedPoint[0] && points[i][1] === prevAddedPoint[1])\n continue;\n else {\n newPoints.push(points[i]);\n newPointsLength = newPoints.length;\n if (newPointsLength > 2) {\n if (isPointOnLineSegment(\n newPoints[newPointsLength - 3],\n newPoints[newPointsLength - 1],\n newPoints[newPointsLength - 2]\n ))\n newPoints.splice(newPoints.length - 2, 1);\n }\n }\n }\n newPoints.push(points[points.length - 1]);\n newPointsLength = newPoints.length;\n if ((type === \"Polygon\" || type === \"MultiPolygon\") && equals(points[0], points[points.length - 1]) && newPointsLength < 4) {\n throw new Error(\"invalid polygon\");\n }\n if (type === \"LineString\" && newPointsLength < 3) {\n return newPoints;\n }\n if (isPointOnLineSegment(\n newPoints[newPointsLength - 3],\n newPoints[newPointsLength - 1],\n newPoints[newPointsLength - 2]\n ))\n newPoints.splice(newPoints.length - 2, 1);\n return newPoints;\n}\nfunction equals(pt1, pt2) {\n return pt1[0] === pt2[0] && pt1[1] === pt2[1];\n}\nfunction isPointOnLineSegment(start, end, point) {\n var x = point[0], y = point[1];\n var startX = start[0], startY = start[1];\n var endX = end[0], endY = end[1];\n var dxc = x - startX;\n var dyc = y - startY;\n var dxl = endX - startX;\n var dyl = endY - startY;\n var cross = dxc * dyl - dyc * dxl;\n if (cross !== 0) return false;\n else if (Math.abs(dxl) >= Math.abs(dyl))\n return dxl > 0 ? startX <= x && x <= endX : endX <= x && x <= startX;\n else return dyl > 0 ? startY <= y && y <= endY : endY <= y && y <= startY;\n}\nvar turf_clean_coords_default = cleanCoords;\nexport {\n cleanCoords,\n turf_clean_coords_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.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 turf_boolean_within_default = booleanWithin;\nexport {\n booleanWithin,\n turf_boolean_within_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 turf_center_default = center;\nexport {\n center,\n turf_center_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 turf_buffer_default = buffer;\nexport {\n buffer,\n turf_buffer_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 turf_centroid_default = centroid;\nexport {\n centroid,\n turf_centroid_default as default\n};\n//# sourceMappingURL=index.js.map","!function(t,i){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=i():\"function\"==typeof define&&define.amd?define(i):(t=t||self).RBush=i()}(this,function(){\"use strict\";function t(t,r,e,a,h){!function t(n,r,e,a,h){for(;a>e;){if(a-e>600){var o=a-e+1,s=r-e+1,l=Math.log(o),f=.5*Math.exp(2*l/3),u=.5*Math.sqrt(l*f*(o-f)/o)*(s-o/2<0?-1:1),m=Math.max(e,Math.floor(r-s*f/o+u)),c=Math.min(a,Math.floor(r+(o-s)*f/o+u));t(n,r,m,c,h)}var p=n[r],d=e,x=a;for(i(n,e,r),h(n[a],p)>0&&i(n,e,a);d<x;){for(i(n,d,x),d++,x--;h(n[d],p)<0;)d++;for(;h(n[x],p)>0;)x--}0===h(n[e],p)?i(n,e,x):i(n,++x,a),x<=r&&(e=x+1),r<=x&&(a=x-1)}}(t,r,e||0,a||t.length-1,h||n)}function i(t,i,n){var r=t[i];t[i]=t[n],t[n]=r}function n(t,i){return t<i?-1:t>i?1:0}var r=function(t){void 0===t&&(t=9),this._maxEntries=Math.max(4,t),this._minEntries=Math.max(2,Math.ceil(.4*this._maxEntries)),this.clear()};function e(t,i,n){if(!n)return i.indexOf(t);for(var r=0;r<i.length;r++)if(n(t,i[r]))return r;return-1}function a(t,i){h(t,0,t.children.length,i,t)}function h(t,i,n,r,e){e||(e=p(null)),e.minX=1/0,e.minY=1/0,e.maxX=-1/0,e.maxY=-1/0;for(var a=i;a<n;a++){var h=t.children[a];o(e,t.leaf?r(h):h)}return e}function o(t,i){return t.minX=Math.min(t.minX,i.minX),t.minY=Math.min(t.minY,i.minY),t.maxX=Math.max(t.maxX,i.maxX),t.maxY=Math.max(t.maxY,i.maxY),t}function s(t,i){return t.minX-i.minX}function l(t,i){return t.minY-i.minY}function f(t){return(t.maxX-t.minX)*(t.maxY-t.minY)}function u(t){return t.maxX-t.minX+(t.maxY-t.minY)}function m(t,i){return t.minX<=i.minX&&t.minY<=i.minY&&i.maxX<=t.maxX&&i.maxY<=t.maxY}function c(t,i){return i.minX<=t.maxX&&i.minY<=t.maxY&&i.maxX>=t.minX&&i.maxY>=t.minY}function p(t){return{children:t,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function d(i,n,r,e,a){for(var h=[n,r];h.length;)if(!((r=h.pop())-(n=h.pop())<=e)){var o=n+Math.ceil((r-n)/e/2)*e;t(i,o,n,r,a),h.push(n,o,o,r)}}return r.prototype.all=function(){return this._all(this.data,[])},r.prototype.search=function(t){var i=this.data,n=[];if(!c(t,i))return n;for(var r=this.toBBox,e=[];i;){for(var a=0;a<i.children.length;a++){var h=i.children[a],o=i.leaf?r(h):h;c(t,o)&&(i.leaf?n.push(h):m(t,o)?this._all(h,n):e.push(h))}i=e.pop()}return n},r.prototype.collides=function(t){var i=this.data;if(!c(t,i))return!1;for(var n=[];i;){for(var r=0;r<i.children.length;r++){var e=i.children[r],a=i.leaf?this.toBBox(e):e;if(c(t,a)){if(i.leaf||m(t,a))return!0;n.push(e)}}i=n.pop()}return!1},r.prototype.load=function(t){if(!t||!t.length)return this;if(t.length<this._minEntries){for(var i=0;i<t.length;i++)this.insert(t[i]);return this}var n=this._build(t.slice(),0,t.length-1,0);if(this.data.children.length)if(this.data.height===n.height)this._splitRoot(this.data,n);else{if(this.data.height<n.height){var r=this.data;this.data=n,n=r}this._insert(n,this.data.height-n.height-1,!0)}else this.data=n;return this},r.prototype.insert=function(t){return t&&this._insert(t,this.data.height-1),this},r.prototype.clear=function(){return this.data=p([]),this},r.prototype.remove=function(t,i){if(!t)return this;for(var n,r,a,h=this.data,o=this.toBBox(t),s=[],l=[];h||s.length;){if(h||(h=s.pop(),r=s[s.length-1],n=l.pop(),a=!0),h.leaf){var f=e(t,h.children,i);if(-1!==f)return h.children.splice(f,1),s.push(h),this._condense(s),this}a||h.leaf||!m(h,o)?r?(n++,h=r.children[n],a=!1):h=null:(s.push(h),l.push(n),n=0,r=h,h=h.children[0])}return this},r.prototype.toBBox=function(t){return t},r.prototype.compareMinX=function(t,i){return t.minX-i.minX},r.prototype.compareMinY=function(t,i){return t.minY-i.minY},r.prototype.toJSON=function(){return this.data},r.prototype.fromJSON=function(t){return this.data=t,this},r.prototype._all=function(t,i){for(var n=[];t;)t.leaf?i.push.apply(i,t.children):n.push.apply(n,t.children),t=n.pop();return i},r.prototype._build=function(t,i,n,r){var e,h=n-i+1,o=this._maxEntries;if(h<=o)return a(e=p(t.slice(i,n+1)),this.toBBox),e;r||(r=Math.ceil(Math.log(h)/Math.log(o)),o=Math.ceil(h/Math.pow(o,r-1))),(e=p([])).leaf=!1,e.height=r;var s=Math.ceil(h/o),l=s*Math.ceil(Math.sqrt(o));d(t,i,n,l,this.compareMinX);for(var f=i;f<=n;f+=l){var u=Math.min(f+l-1,n);d(t,f,u,s,this.compareMinY);for(var m=f;m<=u;m+=s){var c=Math.min(m+s-1,u);e.children.push(this._build(t,m,c,r-1))}}return a(e,this.toBBox),e},r.prototype._chooseSubtree=function(t,i,n,r){for(;r.push(i),!i.leaf&&r.length-1!==n;){for(var e=1/0,a=1/0,h=void 0,o=0;o<i.children.length;o++){var s=i.children[o],l=f(s),u=(m=t,c=s,(Math.max(c.maxX,m.maxX)-Math.min(c.minX,m.minX))*(Math.max(c.maxY,m.maxY)-Math.min(c.minY,m.minY))-l);u<a?(a=u,e=l<e?l:e,h=s):u===a&&l<e&&(e=l,h=s)}i=h||i.children[0]}var m,c;return i},r.prototype._insert=function(t,i,n){var r=n?t:this.toBBox(t),e=[],a=this._chooseSubtree(r,this.data,i,e);for(a.children.push(t),o(a,r);i>=0&&e[i].children.length>this._maxEntries;)this._split(e,i),i--;this._adjustParentBBoxes(r,e,i)},r.prototype._split=function(t,i){var n=t[i],r=n.children.length,e=this._minEntries;this._chooseSplitAxis(n,e,r);var h=this._chooseSplitIndex(n,e,r),o=p(n.children.splice(h,n.children.length-h));o.height=n.height,o.leaf=n.leaf,a(n,this.toBBox),a(o,this.toBBox),i?t[i-1].children.push(o):this._splitRoot(n,o)},r.prototype._splitRoot=function(t,i){this.data=p([t,i]),this.data.height=t.height+1,this.data.leaf=!1,a(this.data,this.toBBox)},r.prototype._chooseSplitIndex=function(t,i,n){for(var r,e,a,o,s,l,u,m=1/0,c=1/0,p=i;p<=n-i;p++){var d=h(t,0,p,this.toBBox),x=h(t,p,n,this.toBBox),v=(e=d,a=x,o=void 0,s=void 0,l=void 0,u=void 0,o=Math.max(e.minX,a.minX),s=Math.max(e.minY,a.minY),l=Math.min(e.maxX,a.maxX),u=Math.min(e.maxY,a.maxY),Math.max(0,l-o)*Math.max(0,u-s)),M=f(d)+f(x);v<m?(m=v,r=p,c=M<c?M:c):v===m&&M<c&&(c=M,r=p)}return r||n-i},r.prototype._chooseSplitAxis=function(t,i,n){var r=t.leaf?this.compareMinX:s,e=t.leaf?this.compareMinY:l;this._allDistMargin(t,i,n,r)<this._allDistMargin(t,i,n,e)&&t.children.sort(r)},r.prototype._allDistMargin=function(t,i,n,r){t.children.sort(r);for(var e=this.toBBox,a=h(t,0,i,e),s=h(t,n-i,n,e),l=u(a)+u(s),f=i;f<n-i;f++){var m=t.children[f];o(a,t.leaf?e(m):m),l+=u(a)}for(var c=n-i-1;c>=i;c--){var p=t.children[c];o(s,t.leaf?e(p):p),l+=u(s)}return l},r.prototype._adjustParentBBoxes=function(t,i,n){for(var r=n;r>=0;r--)o(i[r],t)},r.prototype._condense=function(t){for(var i=t.length-1,n=void 0;i>=0;i--)0===t[i].children.length?i>0?(n=t[i-1].children).splice(n.indexOf(t[i]),1):this.clear():a(t[i],this.toBBox)},r});\n","\nexport default 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","module.exports = function pointInPolygonFlat (point, vs, start, end) {\n var x = point[0], y = point[1];\n var inside = false;\n if (start === undefined) start = 0;\n if (end === undefined) end = vs.length;\n var len = (end-start)/2;\n for (var i = 0, j = len - 1; i < len; j = i++) {\n var xi = vs[start+i*2+0], yi = vs[start+i*2+1];\n var xj = vs[start+j*2+0], yj = vs[start+j*2+1];\n var intersect = ((yi > y) !== (yj > y))\n && (x < (xj - xi) * (y - yi) / (yj - yi) + xi);\n if (intersect) inside = !inside;\n }\n return inside;\n};\n","// ray-casting algorithm based on\n// https://wrf.ecse.rpi.edu/Research/Short_Notes/pnpoly.html\n\nmodule.exports = function pointInPolygonNested (point, vs, start, end) {\n var x = point[0], y = point[1];\n var inside = false;\n if (start === undefined) start = 0;\n if (end === undefined) end = vs.length;\n var len = end - start;\n for (var i = 0, j = len - 1; i < len; j = i++) {\n var xi = vs[i+start][0], yi = vs[i+start][1];\n var xj = vs[j+start][0], yj = vs[j+start][1];\n var intersect = ((yi > y) !== (yj > y))\n && (x < (xj - xi) * (y - yi) / (yj - yi) + xi);\n if (intersect) inside = !inside;\n }\n return inside;\n};\n","var pointInPolygonFlat = require('./flat.js')\nvar pointInPolygonNested = require('./nested.js')\n\nmodule.exports = function pointInPolygon (point, vs, start, end) {\n if (vs.length > 0 && Array.isArray(vs[0])) {\n return pointInPolygonNested(point, vs, start, end);\n } else {\n return pointInPolygonFlat(point, vs, start, end);\n }\n}\nmodule.exports.nested = pointInPolygonNested\nmodule.exports.flat = pointInPolygonFlat\n","!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?e(exports):\"function\"==typeof define&&define.amd?define([\"exports\"],e):e((t=t||self).predicates={})}(this,function(t){\"use strict\";const e=134217729,n=33306690738754706e-32;function r(t,e,n,r,o){let f,i,u,c,s=e[0],a=r[0],d=0,l=0;a>s==a>-s?(f=s,s=e[++d]):(f=a,a=r[++l]);let p=0;if(d<t&&l<n)for(a>s==a>-s?(u=f-((i=s+f)-s),s=e[++d]):(u=f-((i=a+f)-a),a=r[++l]),f=i,0!==u&&(o[p++]=u);d<t&&l<n;)a>s==a>-s?(u=f-((i=f+s)-(c=i-f))+(s-c),s=e[++d]):(u=f-((i=f+a)-(c=i-f))+(a-c),a=r[++l]),f=i,0!==u&&(o[p++]=u);for(;d<t;)u=f-((i=f+s)-(c=i-f))+(s-c),s=e[++d],f=i,0!==u&&(o[p++]=u);for(;l<n;)u=f-((i=f+a)-(c=i-f))+(a-c),a=r[++l],f=i,0!==u&&(o[p++]=u);return 0===f&&0!==p||(o[p++]=f),p}function o(t){return new Float64Array(t)}const f=33306690738754716e-32,i=22204460492503146e-32,u=11093356479670487e-47,c=o(4),s=o(8),a=o(12),d=o(16),l=o(4);t.orient2d=function(t,o,p,b,y,h){const M=(o-h)*(p-y),x=(t-y)*(b-h),j=M-x;if(0===M||0===x||M>0!=x>0)return j;const m=Math.abs(M+x);return Math.abs(j)>=f*m?j:-function(t,o,f,p,b,y,h){let M,x,j,m,_,v,w,A,F,O,P,g,k,q,z,B,C,D;const E=t-b,G=f-b,H=o-y,I=p-y;_=(z=(A=E-(w=(v=e*E)-(v-E)))*(O=I-(F=(v=e*I)-(v-I)))-((q=E*I)-w*F-A*F-w*O))-(P=z-(C=(A=H-(w=(v=e*H)-(v-H)))*(O=G-(F=(v=e*G)-(v-G)))-((B=H*G)-w*F-A*F-w*O))),c[0]=z-(P+_)+(_-C),_=(k=q-((g=q+P)-(_=g-q))+(P-_))-(P=k-B),c[1]=k-(P+_)+(_-B),_=(D=g+P)-g,c[2]=g-(D-_)+(P-_),c[3]=D;let J=function(t,e){let n=e[0];for(let r=1;r<t;r++)n+=e[r];return n}(4,c),K=i*h;if(J>=K||-J>=K)return J;if(M=t-(E+(_=t-E))+(_-b),j=f-(G+(_=f-G))+(_-b),x=o-(H+(_=o-H))+(_-y),m=p-(I+(_=p-I))+(_-y),0===M&&0===x&&0===j&&0===m)return J;if(K=u*h+n*Math.abs(J),(J+=E*m+I*M-(H*j+G*x))>=K||-J>=K)return J;_=(z=(A=M-(w=(v=e*M)-(v-M)))*(O=I-(F=(v=e*I)-(v-I)))-((q=M*I)-w*F-A*F-w*O))-(P=z-(C=(A=x-(w=(v=e*x)-(v-x)))*(O=G-(F=(v=e*G)-(v-G)))-((B=x*G)-w*F-A*F-w*O))),l[0]=z-(P+_)+(_-C),_=(k=q-((g=q+P)-(_=g-q))+(P-_))-(P=k-B),l[1]=k-(P+_)+(_-B),_=(D=g+P)-g,l[2]=g-(D-_)+(P-_),l[3]=D;const L=r(4,c,4,l,s);_=(z=(A=E-(w=(v=e*E)-(v-E)))*(O=m-(F=(v=e*m)-(v-m)))-((q=E*m)-w*F-A*F-w*O))-(P=z-(C=(A=H-(w=(v=e*H)-(v-H)))*(O=j-(F=(v=e*j)-(v-j)))-((B=H*j)-w*F-A*F-w*O))),l[0]=z-(P+_)+(_-C),_=(k=q-((g=q+P)-(_=g-q))+(P-_))-(P=k-B),l[1]=k-(P+_)+(_-B),_=(D=g+P)-g,l[2]=g-(D-_)+(P-_),l[3]=D;const N=r(L,s,4,l,a);_=(z=(A=M-(w=(v=e*M)-(v-M)))*(O=m-(F=(v=e*m)-(v-m)))-((q=M*m)-w*F-A*F-w*O))-(P=z-(C=(A=x-(w=(v=e*x)-(v-x)))*(O=j-(F=(v=e*j)-(v-j)))-((B=x*j)-w*F-A*F-w*O))),l[0]=z-(P+_)+(_-C),_=(k=q-((g=q+P)-(_=g-q))+(P-_))-(P=k-B),l[1]=k-(P+_)+(_-B),_=(D=g+P)-g,l[2]=g-(D-_)+(P-_),l[3]=D;const Q=r(N,a,4,l,d);return d[Q-1]}(t,o,p,b,y,h,m)},t.orient2dfast=function(t,e,n,r,o,f){return(e-f)*(n-o)-(t-o)*(r-f)},Object.defineProperty(t,\"__esModule\",{value:!0})});\n","'use strict';\n\nvar RBush = require('rbush');\nvar Queue = require('tinyqueue');\nvar pointInPolygon = require('point-in-polygon');\nvar orient = require('robust-predicates/umd/orient2d.min.js').orient2d;\n\n// Fix for require issue in webpack https://github.com/mapbox/concaveman/issues/18\nif (Queue.default) {\n Queue = Queue.default;\n}\n\nmodule.exports = concaveman;\nmodule.exports.default = concaveman;\n\nfunction concaveman(points, concavity, lengthThreshold) {\n // a relative measure of concavity; higher value means simpler hull\n concavity = Math.max(0, concavity === undefined ? 2 : concavity);\n\n // when a segment goes below this length threshold, it won't be drilled down further\n lengthThreshold = lengthThreshold || 0;\n\n // start with a convex hull of the points\n var hull = fastConvexHull(points);\n\n // index the points with an R-tree\n var tree = new RBush(16);\n tree.toBBox = function (a) {\n return {\n minX: a[0],\n minY: a[1],\n maxX: a[0],\n maxY: a[1]\n };\n };\n tree.compareMinX = function (a, b) { return a[0] - b[0]; };\n tree.compareMinY = function (a, b) { return a[1] - b[1]; };\n\n tree.load(points);\n\n // turn the convex hull into a linked list and populate the initial edge queue with the nodes\n var queue = [];\n for (var i = 0, last; i < hull.length; i++) {\n var p = hull[i];\n tree.remove(p);\n last = insertNode(p, last);\n queue.push(last);\n }\n\n // index the segments with an R-tree (for intersection checks)\n var segTree = new RBush(16);\n for (i = 0; i < queue.length; i++) segTree.insert(updateBBox(queue[i]));\n\n var sqConcavity = concavity * concavity;\n var sqLenThreshold = lengthThreshold * lengthThreshold;\n\n // process edges one by one\n while (queue.length) {\n var node = queue.shift();\n var a = node.p;\n var b = node.next.p;\n\n // skip the edge if it's already short enough\n var sqLen = getSqDist(a, b);\n if (sqLen < sqLenThreshold) continue;\n\n var maxSqLen = sqLen / sqConcavity;\n\n // find the best connection point for the current edge to flex inward to\n p = findCandidate(tree, node.prev.p, a, b, node.next.next.p, maxSqLen, segTree);\n\n // if we found a connection and it satisfies our concavity measure\n if (p && Math.min(getSqDist(p, a), getSqDist(p, b)) <= maxSqLen) {\n // connect the edge endpoints through this point and add 2 new edges to the queue\n queue.push(node);\n queue.push(insertNode(p, node));\n\n // update point and segment indexes\n tree.remove(p);\n segTree.remove(node);\n segTree.insert(updateBBox(node));\n segTree.insert(updateBBox(node.next));\n }\n }\n\n // convert the resulting hull linked list to an array of points\n node = last;\n var concave = [];\n do {\n concave.push(node.p);\n node = node.next;\n } while (node !== last);\n\n concave.push(node.p);\n\n return concave;\n}\n\nfunction findCandidate(tree, a, b, c, d, maxDist, segTree) {\n var queue = new Queue([], compareDist);\n var node = tree.data;\n\n // search through the point R-tree with a depth-first search using a priority queue\n // in the order of distance to the edge (b, c)\n while (node) {\n for (var i = 0; i < node.children.length; i++) {\n var child = node.children[i];\n\n var dist = node.leaf ? sqSegDist(child, b, c) : sqSegBoxDist(b, c, child);\n if (dist > maxDist) continue; // skip the node if it's farther than we ever need\n\n queue.push({\n node: child,\n dist: dist\n });\n }\n\n while (queue.length && !queue.peek().node.children) {\n var item = queue.pop();\n var p = item.node;\n\n // skip all points that are as close to adjacent edges (a,b) and (c,d),\n // and points that would introduce self-intersections when connected\n var d0 = sqSegDist(p, a, b);\n var d1 = sqSegDist(p, c, d);\n if (item.dist < d0 && item.dist < d1 &&\n noIntersections(b, p, segTree) &&\n noIntersections(c, p, segTree)) return p;\n }\n\n node = queue.pop();\n if (node) node = node.node;\n }\n\n return null;\n}\n\nfunction compareDist(a, b) {\n return a.dist - b.dist;\n}\n\n// square distance from a segment bounding box to the given one\nfunction sqSegBoxDist(a, b, bbox) {\n if (inside(a, bbox) || inside(b, bbox)) return 0;\n var d1 = sqSegSegDist(a[0], a[1], b[0], b[1], bbox.minX, bbox.minY, bbox.maxX, bbox.minY);\n if (d1 === 0) return 0;\n var d2 = sqSegSegDist(a[0], a[1], b[0], b[1], bbox.minX, bbox.minY, bbox.minX, bbox.maxY);\n if (d2 === 0) return 0;\n var d3 = sqSegSegDist(a[0], a[1], b[0], b[1], bbox.maxX, bbox.minY, bbox.maxX, bbox.maxY);\n if (d3 === 0) return 0;\n var d4 = sqSegSegDist(a[0], a[1], b[0], b[1], bbox.minX, bbox.maxY, bbox.maxX, bbox.maxY);\n if (d4 === 0) return 0;\n return Math.min(d1, d2, d3, d4);\n}\n\nfunction inside(a, bbox) {\n return a[0] >= bbox.minX &&\n a[0] <= bbox.maxX &&\n a[1] >= bbox.minY &&\n a[1] <= bbox.maxY;\n}\n\n// check if the edge (a,b) doesn't intersect any other edges\nfunction noIntersections(a, b, segTree) {\n var minX = Math.min(a[0], b[0]);\n var minY = Math.min(a[1], b[1]);\n var maxX = Math.max(a[0], b[0]);\n var maxY = Math.max(a[1], b[1]);\n\n var edges = segTree.search({minX: minX, minY: minY, maxX: maxX, maxY: maxY});\n for (var i = 0; i < edges.length; i++) {\n if (intersects(edges[i].p, edges[i].next.p, a, b)) return false;\n }\n return true;\n}\n\nfunction cross(p1, p2, p3) {\n return orient(p1[0], p1[1], p2[0], p2[1], p3[0], p3[1]);\n}\n\n// check if the edges (p1,q1) and (p2,q2) intersect\nfunction intersects(p1, q1, p2, q2) {\n return p1 !== q2 && q1 !== p2 &&\n cross(p1, q1, p2) > 0 !== cross(p1, q1, q2) > 0 &&\n cross(p2, q2, p1) > 0 !== cross(p2, q2, q1) > 0;\n}\n\n// update the bounding box of a node's edge\nfunction updateBBox(node) {\n var p1 = node.p;\n var p2 = node.next.p;\n node.minX = Math.min(p1[0], p2[0]);\n node.minY = Math.min(p1[1], p2[1]);\n node.maxX = Math.max(p1[0], p2[0]);\n node.maxY = Math.max(p1[1], p2[1]);\n return node;\n}\n\n// speed up convex hull by filtering out points inside quadrilateral formed by 4 extreme points\nfunction fastConvexHull(points) {\n var left = points[0];\n var top = points[0];\n var right = points[0];\n var bottom = points[0];\n\n // find the leftmost, rightmost, topmost and bottommost points\n for (var i = 0; i < points.length; i++) {\n var p = points[i];\n if (p[0] < left[0]) left = p;\n if (p[0] > right[0]) right = p;\n if (p[1] < top[1]) top = p;\n if (p[1] > bottom[1]) bottom = p;\n }\n\n // filter out points that are inside the resulting quadrilateral\n var cull = [left, top, right, bottom];\n var filtered = cull.slice();\n for (i = 0; i < points.length; i++) {\n if (!pointInPolygon(points[i], cull)) filtered.push(points[i]);\n }\n\n // get convex hull around the filtered points\n return convexHull(filtered);\n}\n\n// create a new node in a doubly linked list\nfunction insertNode(p, prev) {\n var node = {\n p: p,\n prev: null,\n next: null,\n minX: 0,\n minY: 0,\n maxX: 0,\n maxY: 0\n };\n\n if (!prev) {\n node.prev = node;\n node.next = node;\n\n } else {\n node.next = prev.next;\n node.prev = prev;\n prev.next.prev = node;\n prev.next = node;\n }\n return node;\n}\n\n// square distance between 2 points\nfunction getSqDist(p1, p2) {\n\n var dx = p1[0] - p2[0],\n dy = p1[1] - p2[1];\n\n return dx * dx + dy * dy;\n}\n\n// square distance from a point to a segment\nfunction sqSegDist(p, p1, p2) {\n\n var x = p1[0],\n y = p1[1],\n dx = p2[0] - x,\n dy = p2[1] - y;\n\n if (dx !== 0 || dy !== 0) {\n\n var t = ((p[0] - x) * dx + (p[1] - y) * dy) / (dx * dx + dy * dy);\n\n if (t > 1) {\n x = p2[0];\n y = p2[1];\n\n } else if (t > 0) {\n x += dx * t;\n y += dy * t;\n }\n }\n\n dx = p[0] - x;\n dy = p[1] - y;\n\n return dx * dx + dy * dy;\n}\n\n// segment to segment distance, ported from http://geomalgorithms.com/a07-_distance.html by Dan Sunday\nfunction sqSegSegDist(x0, y0, x1, y1, x2, y2, x3, y3) {\n var ux = x1 - x0;\n var uy = y1 - y0;\n var vx = x3 - x2;\n var vy = y3 - y2;\n var wx = x0 - x2;\n var wy = y0 - y2;\n var a = ux * ux + uy * uy;\n var b = ux * vx + uy * vy;\n var c = vx * vx + vy * vy;\n var d = ux * wx + uy * wy;\n var e = vx * wx + vy * wy;\n var D = a * c - b * b;\n\n var sc, sN, tc, tN;\n var sD = D;\n var tD = D;\n\n if (D === 0) {\n sN = 0;\n sD = 1;\n tN = e;\n tD = c;\n } else {\n sN = b * e - c * d;\n tN = a * e - b * d;\n if (sN < 0) {\n sN = 0;\n tN = e;\n tD = c;\n } else if (sN > sD) {\n sN = sD;\n tN = e + b;\n tD = c;\n }\n }\n\n if (tN < 0.0) {\n tN = 0.0;\n if (-d < 0.0) sN = 0.0;\n else if (-d > a) sN = sD;\n else {\n sN = -d;\n sD = a;\n }\n } else if (tN > tD) {\n tN = tD;\n if ((-d + b) < 0.0) sN = 0;\n else if (-d + b > a) sN = sD;\n else {\n sN = -d + b;\n sD = a;\n }\n }\n\n sc = sN === 0 ? 0 : sN / sD;\n tc = tN === 0 ? 0 : tN / tD;\n\n var cx = (1 - sc) * x0 + sc * x1;\n var cy = (1 - sc) * y0 + sc * y1;\n var cx2 = (1 - tc) * x2 + tc * x3;\n var cy2 = (1 - tc) * y2 + tc * y3;\n var dx = cx2 - cx;\n var dy = cy2 - cy;\n\n return dx * dx + dy * dy;\n}\n\nfunction compareByX(a, b) {\n return a[0] === b[0] ? a[1] - b[1] : a[0] - b[0];\n}\n\nfunction convexHull(points) {\n points.sort(compareByX);\n\n var lower = [];\n for (var i = 0; i < points.length; i++) {\n while (lower.length >= 2 && cross(lower[lower.length - 2], lower[lower.length - 1], points[i]) <= 0) {\n lower.pop();\n }\n lower.push(points[i]);\n }\n\n var upper = [];\n for (var ii = points.length - 1; ii >= 0; ii--) {\n while (upper.length >= 2 && cross(upper[upper.length - 2], upper[upper.length - 1], points[ii]) <= 0) {\n upper.pop();\n }\n upper.push(points[ii]);\n }\n\n upper.pop();\n lower.pop();\n return lower.concat(upper);\n}\n","// index.ts\nimport { polygon } from \"@turf/helpers\";\nimport { coordEach } from \"@turf/meta\";\nimport concaveman from \"concaveman\";\nfunction convex(geojson, options = {}) {\n options.concavity = options.concavity || Infinity;\n const points = [];\n coordEach(geojson, (coord) => {\n points.push([coord[0], coord[1]]);\n });\n if (!points.length) {\n return null;\n }\n const convexHull = concaveman(points, options.concavity);\n if (convexHull.length > 3) {\n return polygon([convexHull]);\n }\n return null;\n}\nvar turf_convex_default = convex;\nexport {\n convex,\n turf_convex_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 turf_clone_default = clone;\nexport {\n clone,\n cloneProperties,\n turf_clone_default as default\n};\n//# sourceMappingURL=index.js.map","/*\r\n * bignumber.js v9.3.0\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;\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 turf_difference_default = difference2;\nexport {\n turf_difference_default as default,\n difference2 as difference\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport { coordEach, featureEach } from \"@turf/meta\";\nimport { point, featureCollection } from \"@turf/helpers\";\nfunction explode(geojson) {\n const points = [];\n if (geojson.type === \"FeatureCollection\") {\n featureEach(geojson, function(feature) {\n coordEach(feature, function(coord) {\n points.push(point(coord, feature.properties));\n });\n });\n } else if (geojson.type === \"Feature\") {\n coordEach(geojson, function(coord) {\n points.push(point(coord, geojson.properties));\n });\n } else {\n coordEach(geojson, function(coord) {\n points.push(point(coord));\n });\n }\n return featureCollection(points);\n}\nvar turf_explode_default = explode;\nexport {\n turf_explode_default as default,\n explode\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 turf_intersect_default = intersect;\nexport {\n turf_intersect_default as default,\n intersect\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport { point } from \"@turf/helpers\";\nfunction kinks(featureIn) {\n let coordinates;\n let feature;\n const results = {\n type: \"FeatureCollection\",\n features: []\n };\n if (featureIn.type === \"Feature\") {\n feature = featureIn.geometry;\n } else {\n feature = featureIn;\n }\n if (feature.type === \"LineString\") {\n coordinates = [feature.coordinates];\n } else if (feature.type === \"MultiLineString\") {\n coordinates = feature.coordinates;\n } else if (feature.type === \"MultiPolygon\") {\n coordinates = [].concat(...feature.coordinates);\n } else if (feature.type === \"Polygon\") {\n coordinates = feature.coordinates;\n } else {\n throw new Error(\n \"Input must be a LineString, MultiLineString, Polygon, or MultiPolygon Feature or Geometry\"\n );\n }\n coordinates.forEach((line1) => {\n coordinates.forEach((line2) => {\n for (let i = 0; i < line1.length - 1; i++) {\n for (let k = i; k < line2.length - 1; k++) {\n if (line1 === line2) {\n if (Math.abs(i - k) === 1) {\n continue;\n }\n if (\n // segments are first and last segment of lineString\n i === 0 && k === line1.length - 2 && // lineString is closed\n line1[i][0] === line1[line1.length - 1][0] && line1[i][1] === line1[line1.length - 1][1]\n ) {\n continue;\n }\n }\n const intersection = lineIntersects(\n line1[i][0],\n line1[i][1],\n line1[i + 1][0],\n line1[i + 1][1],\n line2[k][0],\n line2[k][1],\n line2[k + 1][0],\n line2[k + 1][1]\n );\n if (intersection) {\n results.features.push(point([intersection[0], intersection[1]]));\n }\n }\n }\n });\n });\n return results;\n}\nfunction lineIntersects(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n let denominator;\n let a;\n let b;\n let numerator1;\n let numerator2;\n const result = {\n x: null,\n y: null,\n onLine1: false,\n onLine2: false\n };\n denominator = (line2EndY - line2StartY) * (line1EndX - line1StartX) - (line2EndX - line2StartX) * (line1EndY - line1StartY);\n if (denominator === 0) {\n if (result.x !== null && result.y !== null) {\n return result;\n } else {\n return false;\n }\n }\n a = line1StartY - line2StartY;\n b = line1StartX - line2StartX;\n numerator1 = (line2EndX - line2StartX) * a - (line2EndY - line2StartY) * b;\n numerator2 = (line1EndX - line1StartX) * a - (line1EndY - line1StartY) * b;\n a = numerator1 / denominator;\n b = numerator2 / denominator;\n result.x = line1StartX + a * (line1EndX - line1StartX);\n result.y = line1StartY + a * (line1EndY - line1StartY);\n if (a >= 0 && a <= 1) {\n result.onLine1 = true;\n }\n if (b >= 0 && b <= 1) {\n result.onLine2 = true;\n }\n if (result.onLine1 && result.onLine2) {\n return [result.x, result.y];\n } else {\n return false;\n }\n}\nvar turf_kinks_default = kinks;\nexport {\n turf_kinks_default as default,\n kinks\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 turf_length_default = length;\nexport {\n turf_length_default as default,\n length\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport { bbox as turfBBox } from \"@turf/bbox\";\nimport { getCoords, getGeom } from \"@turf/invariant\";\nimport { polygon, multiPolygon, lineString } from \"@turf/helpers\";\nimport { clone } from \"@turf/clone\";\nfunction lineToPolygon(lines, options = {}) {\n var _a, _b, _c;\n var properties = options.properties;\n var autoComplete = (_a = options.autoComplete) != null ? _a : true;\n var orderCoords = (_b = options.orderCoords) != null ? _b : true;\n var mutate = (_c = options.mutate) != null ? _c : false;\n if (!mutate) {\n lines = clone(lines);\n }\n switch (lines.type) {\n case \"FeatureCollection\":\n var coords = [];\n lines.features.forEach(function(line) {\n coords.push(\n getCoords(lineStringToPolygon(line, {}, autoComplete, orderCoords))\n );\n });\n return multiPolygon(coords, properties);\n default:\n return lineStringToPolygon(lines, properties, autoComplete, orderCoords);\n }\n}\nfunction lineStringToPolygon(line, properties, autoComplete, orderCoords) {\n properties = properties ? properties : line.type === \"Feature\" ? line.properties : {};\n var geom = getGeom(line);\n var coords = geom.coordinates;\n var type = geom.type;\n if (!coords.length) throw new Error(\"line must contain coordinates\");\n switch (type) {\n case \"LineString\":\n if (autoComplete) coords = autoCompleteCoords(coords);\n return polygon([coords], properties);\n case \"MultiLineString\":\n var multiCoords = [];\n var largestArea = 0;\n coords.forEach(function(coord) {\n if (autoComplete) coord = autoCompleteCoords(coord);\n if (orderCoords) {\n var area = calculateArea(turfBBox(lineString(coord)));\n if (area > largestArea) {\n multiCoords.unshift(coord);\n largestArea = area;\n } else multiCoords.push(coord);\n } else {\n multiCoords.push(coord);\n }\n });\n return polygon(multiCoords, properties);\n default:\n throw new Error(\"geometry type \" + type + \" is not supported\");\n }\n}\nfunction autoCompleteCoords(coords) {\n var first = coords[0];\n var x1 = first[0];\n var y1 = first[1];\n var last = coords[coords.length - 1];\n var x2 = last[0];\n var y2 = last[1];\n if (x1 !== x2 || y1 !== y2) {\n coords.push(first);\n }\n return coords;\n}\nfunction calculateArea(bbox) {\n var west = bbox[0];\n var south = bbox[1];\n var east = bbox[2];\n var north = bbox[3];\n return Math.abs(west - east) * Math.abs(south - north);\n}\nvar turf_line_to_polygon_default = lineToPolygon;\nexport {\n turf_line_to_polygon_default as default,\n lineToPolygon\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport { bearing } from \"@turf/bearing\";\nimport { destination } from \"@turf/destination\";\nimport { distance } from \"@turf/distance\";\nfunction midpoint(point1, point2) {\n const dist = distance(point1, point2);\n const heading = bearing(point1, point2);\n const midpoint2 = destination(point1, dist / 2, heading);\n return midpoint2;\n}\nvar turf_midpoint_default = midpoint;\nexport {\n turf_midpoint_default as default,\n midpoint\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 { clone } from \"@turf/clone\";\nimport { distance } from \"@turf/distance\";\nimport { featureEach } from \"@turf/meta\";\nfunction nearestPoint(targetPoint, points, options = {}) {\n if (!targetPoint) throw new Error(\"targetPoint is required\");\n if (!points) throw new Error(\"points is required\");\n let minDist = Infinity;\n let bestFeatureIndex = 0;\n featureEach(points, (pt, featureIndex) => {\n const distanceToPoint = distance(targetPoint, pt, options);\n if (distanceToPoint < minDist) {\n bestFeatureIndex = featureIndex;\n minDist = distanceToPoint;\n }\n });\n const nearestPoint2 = clone(points.features[bestFeatureIndex]);\n return __spreadProps(__spreadValues({}, nearestPoint2), {\n properties: __spreadProps(__spreadValues({}, nearestPoint2.properties), {\n featureIndex: bestFeatureIndex,\n distanceToPoint: minDist\n })\n });\n}\nvar turf_nearest_point_default = nearestPoint;\nexport {\n turf_nearest_point_default as default,\n nearestPoint\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)) {\n ringTolerance -= ringTolerance * 0.01;\n simpleRing = simplify(ring, ringTolerance, highQuality);\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 turf_simplify_default = simplify2;\nexport {\n turf_simplify_default as default,\n simplify2 as simplify\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 turf_union_default = union2;\nexport {\n turf_union_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 turf_unkink_polygon_default = unkinkPolygon;\nexport {\n turf_unkink_polygon_default as default,\n unkinkPolygon\n};\n//# sourceMappingURL=index.js.map","import * as turf from '@turf/turf';\nimport concaveman from 'concaveman';\nimport type { Feature, Polygon, MultiPolygon, Position } from 'geojson';\nimport * as L from 'leaflet';\nimport defaultConfig from './config.json';\n\n/**\n * Enhanced GeoJSON feature with polydraw-specific metadata\n */\ninterface PolydrawFeature extends Feature<Polygon | MultiPolygon> {\n _polydrawHoleTraversalOccurred?: boolean;\n}\n\nexport class TurfHelper {\n private config: typeof defaultConfig = null;\n\n constructor(config: object) {\n this.config = { ...defaultConfig, ...config };\n }\n\n union(\n poly1: Feature<Polygon | MultiPolygon>,\n poly2: Feature<Polygon | MultiPolygon>,\n ): Feature<Polygon | MultiPolygon> {\n try {\n const featureCollection = turf.featureCollection([poly1, poly2]);\n const union = turf.union(featureCollection);\n return union ? this.getTurfPolygon(union) : null;\n } catch (error) {\n console.warn('Error in union:', error.message);\n return null;\n }\n }\n\n /**\n * Create polygon from drawing trace using configured method\n */\n createPolygonFromTrace(feature: Feature<any>): Feature<Polygon | MultiPolygon> {\n const method = this.config.polygonCreation?.method || 'concaveman';\n\n switch (method) {\n case 'concaveman':\n return this.turfConcaveman(feature);\n case 'convex':\n return this.createConvexPolygon(feature);\n case 'direct':\n return this.createDirectPolygon(feature);\n case 'buffer':\n return this.createBufferedPolygon(feature);\n default:\n console.warn(`Unknown polygon creation method: ${method}, falling back to concaveman`);\n return this.turfConcaveman(feature);\n }\n }\n\n /**\n * Original concaveman implementation\n */\n turfConcaveman(feature: Feature<Polygon | MultiPolygon>): Feature<Polygon | MultiPolygon> {\n const points = turf.explode(feature);\n const coordinates = points.features.map((f) => f.geometry.coordinates);\n return turf.multiPolygon([[concaveman(coordinates)]]);\n }\n\n /**\n * Create convex hull polygon (simplest, fewest edges)\n */\n private createConvexPolygon(feature: Feature<any>): Feature<Polygon | MultiPolygon> {\n const points = turf.explode(feature);\n const convexHull = turf.convex(points);\n\n if (!convexHull) {\n // Fallback to direct polygon if convex hull fails\n return this.createDirectPolygon(feature);\n }\n\n return this.getTurfPolygon(convexHull);\n }\n\n /**\n * Create polygon directly from line coordinates (moderate edge count)\n */\n private createDirectPolygon(feature: Feature<any>): Feature<Polygon | MultiPolygon> {\n let coordinates: number[][];\n\n if (feature.geometry.type === 'LineString') {\n coordinates = feature.geometry.coordinates;\n } else if (feature.geometry.type === 'Polygon') {\n coordinates = feature.geometry.coordinates[0];\n } else {\n // Fallback: extract coordinates from any geometry\n const points = turf.explode(feature);\n coordinates = points.features.map((f) => f.geometry.coordinates);\n }\n\n // Ensure polygon is closed\n if (coordinates.length > 0) {\n const first = coordinates[0];\n const last = coordinates[coordinates.length - 1];\n\n if (first[0] !== last[0] || first[1] !== last[1]) {\n coordinates.push([first[0], first[1]]);\n }\n }\n\n // Need at least 4 points for a valid polygon (3 + closing point)\n if (coordinates.length < 4) {\n console.warn('Not enough points for direct polygon, falling back to concaveman');\n return this.turfConcaveman(feature);\n }\n\n return turf.multiPolygon([[coordinates]]);\n }\n\n /**\n * Create polygon using buffer method (smooth curves)\n */\n private createBufferedPolygon(feature: Feature<any>): Feature<Polygon | MultiPolygon> {\n try {\n // Convert to line if needed\n let line: Feature<any>;\n\n if (feature.geometry.type === 'LineString') {\n line = feature;\n } else {\n // Convert polygon or other geometry to line\n const points = turf.explode(feature);\n const coordinates = points.features.map((f) => f.geometry.coordinates);\n line = turf.lineString(coordinates);\n }\n\n // Apply small buffer to create polygon\n const buffered = turf.buffer(line, 0.001, { units: 'kilometers' });\n\n if (!buffered) {\n return this.createDirectPolygon(feature);\n }\n\n return this.getTurfPolygon(buffered);\n } catch (error) {\n console.warn('Buffer polygon creation failed:', error.message);\n return this.createDirectPolygon(feature);\n }\n }\n\n getSimplified(\n polygon: Feature<Polygon | MultiPolygon>,\n dynamicTolerance: boolean = false,\n ): Feature<Polygon | MultiPolygon> {\n const simplificationMode = this.config.polygonCreation?.simplification?.mode || 'simple';\n\n if (simplificationMode === 'simple') {\n // Simple single-pass simplification (like the original Angular version)\n const tolerance = {\n tolerance: this.config.polygonCreation?.simplification?.tolerance || 0.0001,\n highQuality: this.config.polygonCreation?.simplification?.highQuality || false,\n mutate: false,\n };\n\n const simplified = turf.simplify(polygon, tolerance);\n return simplified;\n } else if (simplificationMode === 'dynamic') {\n // Original dynamic simplification\n const numOfEdges = polygon.geometry.coordinates[0][0].length;\n const tolerance = this.config.simplification.simplifyTolerance;\n\n if (!dynamicTolerance) {\n const simplified = turf.simplify(polygon, tolerance);\n return simplified;\n } else {\n let simplified = turf.simplify(polygon, tolerance);\n const fractionGuard = this.config.simplification.dynamicMode.fractionGuard;\n const multipiler = this.config.simplification.dynamicMode.multipiler;\n while (\n simplified.geometry.coordinates[0][0].length > 4 &&\n simplified.geometry.coordinates[0][0].length / (numOfEdges + 2) > fractionGuard\n ) {\n tolerance.tolerance = tolerance.tolerance * multipiler;\n simplified = turf.simplify(polygon, tolerance);\n }\n return simplified;\n }\n } else if (simplificationMode === 'none') {\n // No simplification\n\n return polygon;\n } else {\n // Fallback to simple mode\n console.warn(`Unknown simplification mode: ${simplificationMode}, falling back to simple`);\n const tolerance = {\n tolerance: 0.0001,\n highQuality: false,\n mutate: false,\n };\n return turf.simplify(polygon, tolerance);\n }\n }\n\n getTurfPolygon(polygon: Feature<Polygon | MultiPolygon>): Feature<Polygon | MultiPolygon> {\n let turfPolygon;\n if (polygon.geometry.type === 'Polygon') {\n turfPolygon = turf.multiPolygon([polygon.geometry.coordinates]);\n } else {\n turfPolygon = turf.multiPolygon(polygon.geometry.coordinates);\n }\n return turfPolygon;\n }\n\n getMultiPolygon(polygonArray: Position[][][]): Feature<Polygon | MultiPolygon> {\n return turf.multiPolygon(polygonArray);\n }\n\n getKinks(feature: Feature<Polygon | MultiPolygon>) {\n try {\n // Validate input feature\n if (!feature || !feature.geometry || !feature.geometry.coordinates) {\n return [feature];\n }\n\n // Remove duplicate vertices before processing\n const cleanedFeature = this.removeDuplicateVertices(feature);\n\n // Additional validation after cleaning\n if (!cleanedFeature || !cleanedFeature.geometry || !cleanedFeature.geometry.coordinates) {\n console.warn('Feature became invalid after cleaning in getKinks');\n return [feature];\n }\n\n // 🎯 HOLE-AWARE SPLITTING: Check if the polygon has holes\n const hasHoles = this.polygonHasHoles(cleanedFeature);\n\n if (hasHoles) {\n // For polygons with holes, we need special handling\n return this.getKinksWithHolePreservation(cleanedFeature);\n } else {\n // For simple polygons, use the standard unkink approach\n const unkink = turf.unkinkPolygon(cleanedFeature);\n const coordinates = [];\n turf.featureEach(unkink, (current) => {\n coordinates.push(current);\n });\n return coordinates;\n }\n } catch (error) {\n console.warn('Error processing kinks:', error.message);\n // Return the original feature as a fallback\n return [feature];\n }\n }\n\n getCoords(feature: Feature<Polygon | MultiPolygon>) {\n return turf.getCoords(feature);\n }\n\n hasKinks(feature: Feature<Polygon | MultiPolygon>) {\n const kinks = turf.kinks(feature);\n return kinks.features.length > 0;\n }\n\n /**\n * Get the convex hull of a polygon\n */\n getConvexHull(polygon: Feature<Polygon | MultiPolygon>): Feature<Polygon> | null {\n try {\n const featureCollection = turf.featureCollection([polygon]);\n return turf.convex(featureCollection);\n } catch (error) {\n console.warn('Error in getConvexHull:', error.message);\n return null;\n }\n }\n\n /**\n * Calculate midpoint between two LatLngLiteral points\n */\n getMidpoint(point1: L.LatLngLiteral, point2: L.LatLngLiteral): L.LatLngLiteral {\n const p1 = turf.point([point1.lng, point1.lat]);\n const p2 = turf.point([point2.lng, point2.lat]);\n\n const midpoint = turf.midpoint(p1, p2);\n\n return {\n lat: midpoint.geometry.coordinates[1],\n lng: midpoint.geometry.coordinates[0],\n };\n }\n\n polygonIntersect(\n polygon: Feature<Polygon | MultiPolygon>,\n latlngs: Feature<Polygon | MultiPolygon>,\n ): boolean {\n try {\n // Validate input features\n if (\n !polygon ||\n !polygon.geometry ||\n !polygon.geometry.coordinates ||\n !latlngs ||\n !latlngs.geometry ||\n !latlngs.geometry.coordinates\n ) {\n console.warn('Invalid features passed to polygonIntersect');\n return false;\n }\n\n // Method 1: Try direct intersection using turf.intersect with FeatureCollection\n try {\n const featureCollection = turf.featureCollection([polygon, latlngs]);\n const intersection = turf.intersect(featureCollection);\n\n if (\n intersection &&\n intersection.geometry &&\n (intersection.geometry.type === 'Polygon' ||\n intersection.geometry.type === 'MultiPolygon')\n ) {\n // Check if the intersection has meaningful area\n const area = turf.area(intersection);\n if (area > 0.000001) {\n // Very small threshold for meaningful intersection\n return true;\n }\n }\n } catch (error) {\n // Continue to fallback methods\n }\n\n // Method 2: Check if any vertices of one polygon are inside the other\n try {\n const coords1 = turf.getCoords(polygon);\n const coords2 = turf.getCoords(latlngs);\n\n // Check if any vertex of polygon2 is inside polygon1\n for (const ring2 of coords2) {\n for (const coord of ring2[0]) {\n // First ring (outer ring)\n const point = turf.point(coord);\n if (turf.booleanPointInPolygon(point, polygon)) {\n return true;\n }\n }\n }\n\n // Check if any vertex of polygon1 is inside polygon2\n for (const ring1 of coords1) {\n for (const coord of ring1[0]) {\n // First ring (outer ring)\n const point = turf.point(coord);\n if (turf.booleanPointInPolygon(point, latlngs)) {\n return true;\n }\n }\n }\n } catch (error) {\n // Continue to next method\n }\n\n // Method 3: Check for edge intersections using line intersection\n try {\n const coords1 = turf.getCoords(polygon);\n const coords2 = turf.getCoords(latlngs);\n\n for (const ring1 of coords1) {\n const outerRing1 = ring1[0]; // Get outer ring\n for (let i = 0; i < outerRing1.length - 1; i++) {\n const line1 = turf.lineString([outerRing1[i], outerRing1[i + 1]]);\n\n for (const ring2 of coords2) {\n const outerRing2 = ring2[0]; // Get outer ring\n for (let j = 0; j < outerRing2.length - 1; j++) {\n const line2 = turf.lineString([outerRing2[j], outerRing2[j + 1]]);\n\n try {\n const intersection = turf.lineIntersect(line1, line2);\n if (intersection && intersection.features && intersection.features.length > 0) {\n return true;\n }\n } catch (lineError) {\n // Continue checking other line pairs\n }\n }\n }\n }\n }\n } catch (error) {\n // Continue to fallback\n }\n\n // Method 4: Bounding box overlap check as final fallback\n // This method is too aggressive and causes false positives, so we'll disable it\n // Only use the more precise geometric methods above\n try {\n // Disabled: Bounding box overlap was causing false intersection detection\n // for separate polygons that don't actually intersect geometrically\n // If we reach this point, none of the precise geometric methods detected\n // an intersection, so we should return false rather than using a fallback\n // that might give false positives\n } catch (error) {\n console.warn('Error in bounding box check:', error.message);\n }\n\n return false;\n } catch (error) {\n console.warn('Error in polygonIntersect:', error.message);\n return false;\n }\n }\n\n getIntersection(\n poly1: Feature<Polygon | MultiPolygon>,\n poly2: Feature<Polygon | MultiPolygon>,\n ): Feature<Polygon | MultiPolygon> | null {\n try {\n // In Turf 7.x, intersect expects a FeatureCollection with multiple features\n const featureCollection = turf.featureCollection([poly1, poly2]);\n const result = turf.intersect(featureCollection);\n\n // Validate that the result is actually a polygon or multipolygon\n if (\n result &&\n result.geometry &&\n (result.geometry.type === 'Polygon' || result.geometry.type === 'MultiPolygon')\n ) {\n return result as Feature<Polygon | MultiPolygon>;\n }\n\n // Return null if intersection doesn't result in a polygon\n return null;\n } catch (error) {\n console.warn('Error in getIntersection:', error.message);\n return null;\n }\n }\n\n getDistance(point1, point2): number {\n return turf.distance(point1, point2);\n }\n\n isWithin(polygon1: Position[], polygon2: Position[]): boolean {\n return turf.booleanWithin(turf.polygon([polygon1]), turf.polygon([polygon2]));\n }\n\n /**\n * Check if one polygon is completely within another polygon\n */\n isPolygonCompletelyWithin(\n innerPolygon: Feature<Polygon | MultiPolygon>,\n outerPolygon: Feature<Polygon | MultiPolygon>,\n ): boolean {\n try {\n return turf.booleanWithin(innerPolygon, outerPolygon);\n } catch (error) {\n // Fallback: check if all vertices of inner polygon are within outer polygon\n const innerCoords = turf.getCoords(innerPolygon);\n const outerCoords = turf.getCoords(outerPolygon);\n\n // For each ring in the inner polygon\n for (const innerRing of innerCoords) {\n for (const ring of innerRing) {\n for (const coord of ring) {\n const point = turf.point(coord);\n let isInside = false;\n\n // Check against each ring in the outer polygon\n for (const outerRing of outerCoords) {\n for (const outerRingCoords of outerRing) {\n const outerPoly = turf.polygon([outerRingCoords]);\n if (turf.booleanPointInPolygon(point, outerPoly)) {\n isInside = true;\n break;\n }\n }\n if (isInside) break;\n }\n\n if (!isInside) {\n return false;\n }\n }\n }\n }\n\n return true;\n }\n }\n\n /**\n * Checks if two polygons are equal.\n * @param polygon1 First polygon.\n * @param polygon2 Second polygon.\n */\n equalPolygons(\n polygon1: Feature<Polygon | MultiPolygon>,\n polygon2: Feature<Polygon | MultiPolygon>,\n ) {\n // Use turf.booleanEqual(polygon1, polygon2)\n }\n\n convertToBoundingBoxPolygon(polygon: Feature<Polygon | MultiPolygon>): Feature<Polygon> {\n const bbox = turf.bbox(polygon.geometry);\n const bboxPolygon = turf.bboxPolygon(bbox);\n // TODO: Add Compass logic if needed\n return bboxPolygon;\n }\n\n polygonToMultiPolygon(poly: Feature<Polygon>): Feature<MultiPolygon> {\n const multi = turf.multiPolygon([poly.geometry.coordinates]);\n return multi;\n }\n\n injectPointToPolygon(polygon, point) {\n // Clone polygon to avoid modifying original\n const newPoly = JSON.parse(JSON.stringify(polygon));\n\n if (newPoly.geometry.type === 'MultiPolygon') {\n const coordinates = newPoly.geometry.coordinates[0][0];\n // Find the closest edge and insert the point\n let minDistance = Infinity;\n let insertIndex = 0;\n\n for (let i = 0; i < coordinates.length - 1; i++) {\n const edgeStart = coordinates[i];\n const edgeEnd = coordinates[i + 1];\n const distance = this.distanceToLineSegment(point, edgeStart, edgeEnd);\n\n if (distance < minDistance) {\n minDistance = distance;\n insertIndex = i + 1;\n }\n }\n\n coordinates.splice(insertIndex, 0, point);\n } else if (newPoly.geometry.type === 'Polygon') {\n const coordinates = newPoly.geometry.coordinates[0];\n // Find the closest edge and insert the point\n let minDistance = Infinity;\n let insertIndex = 0;\n\n for (let i = 0; i < coordinates.length - 1; i++) {\n const edgeStart = coordinates[i];\n const edgeEnd = coordinates[i + 1];\n const distance = this.distanceToLineSegment(point, edgeStart, edgeEnd);\n\n if (distance < minDistance) {\n minDistance = distance;\n insertIndex = i + 1;\n }\n }\n\n coordinates.splice(insertIndex, 0, point);\n }\n\n return newPoly;\n }\n\n private distanceToLineSegment(point: number[], lineStart: number[], lineEnd: number[]): number {\n const A = point[0] - lineStart[0];\n const B = point[1] - lineStart[1];\n const C = lineEnd[0] - lineStart[0];\n const D = lineEnd[1] - lineStart[1];\n\n const dot = A * C + B * D;\n const lenSq = C * C + D * D;\n\n if (lenSq === 0) return Math.sqrt(A * A + B * B);\n\n const param = dot / lenSq;\n\n let xx, yy;\n if (param < 0) {\n xx = lineStart[0];\n yy = lineStart[1];\n } else if (param > 1) {\n xx = lineEnd[0];\n yy = lineEnd[1];\n } else {\n xx = lineStart[0] + param * C;\n yy = lineStart[1] + param * D;\n }\n\n const dx = point[0] - xx;\n const dy = point[1] - yy;\n return Math.sqrt(dx * dx + dy * dy);\n }\n\n polygonDifference(\n polygon1: Feature<Polygon | MultiPolygon>,\n polygon2: Feature<Polygon | MultiPolygon>,\n ): Feature<Polygon | MultiPolygon> {\n try {\n // In Turf 7.x, difference expects a FeatureCollection with multiple features\n const featureCollection = turf.featureCollection([polygon1, polygon2]);\n const diff = turf.difference(featureCollection);\n\n const result = diff ? this.getTurfPolygon(diff) : null;\n return result;\n } catch (error) {\n console.warn('Error in polygonDifference:', error.message);\n return null;\n }\n }\n\n getBoundingBoxCompassPosition(polygon, MarkerPosition, useOffset, offsetDirection) {\n // TODO: Implement with Compass\n return null;\n }\n\n getNearestPointIndex(targetPoint: turf.Coord, points: any): number {\n const index = turf.nearestPoint(targetPoint, points).properties.featureIndex;\n return index;\n }\n\n /**\n * Convert LatLngLiteral object to Turf.js coordinate array format.\n *\n * This method serves as a semantic interface for coordinate conversion,\n * ensuring consistent lng/lat order when interfacing with Turf.js functions.\n * While simple, it provides a clear contract and future-proofing for any\n * coordinate validation or transformation that might be needed later.\n *\n * @param point - LatLngLiteral object with lat/lng properties\n * @returns Turf.js coordinate array in [lng, lat] format\n */\n getCoord(point: L.LatLngLiteral): turf.Coord {\n return [point.lng, point.lat];\n }\n\n getFeaturePointCollection(points: L.LatLngLiteral[]): any {\n const pts = [];\n points.forEach((v) => {\n const p = turf.point([v.lng, v.lat], {});\n pts.push(p);\n });\n const fc = turf.featureCollection(pts);\n return fc;\n }\n\n getPolygonArea(poly: Feature<Polygon | MultiPolygon>): number {\n const area = turf.area(poly);\n return area;\n }\n\n getPolygonPerimeter(poly: Feature<Polygon | MultiPolygon>): number {\n const length = turf.length(poly, { units: 'kilometers' });\n return length;\n }\n\n getDoubleElbowLatLngs(points: L.LatLngLiteral[]): L.LatLngLiteral[] {\n const doubleized: L.LatLngLiteral[] = [];\n const len = points.length;\n const effectiveLen =\n points[0].lat === points[len - 1].lat && points[0].lng === points[len - 1].lng\n ? len - 1\n : len;\n\n for (let i = 0; i < effectiveLen; i++) {\n const p1 = points[i];\n const p2 = points[(i + 1) % effectiveLen];\n // Add current point\n doubleized.push(new L.LatLng(p1.lat, p1.lng));\n // Calculate and add midpoint\n const midPoint = turf.midpoint(turf.point([p1.lng, p1.lat]), turf.point([p2.lng, p2.lat]));\n doubleized.push(\n new L.LatLng(midPoint.geometry.coordinates[1], midPoint.geometry.coordinates[0]),\n );\n }\n\n return doubleized;\n }\n\n getBezierMultiPolygon(polygonArray: Position[][][]): Feature<Polygon | MultiPolygon> {\n const line = turf.polygonToLine(this.getMultiPolygon(polygonArray));\n // Add first point to \"close\" the line\n (line as any).features[0].geometry.coordinates.push(\n (line as any).features[0].geometry.coordinates[0],\n );\n const bezierLine = turf.bezierSpline((line as any).features[0], {\n resolution: this.config.bezier.resolution,\n sharpness: this.config.bezier.sharpness,\n });\n const bezierPoly = turf.lineToPolygon(bezierLine);\n return bezierPoly;\n }\n\n /**\n * Check if a polygon has holes (more than one ring)\n */\n private polygonHasHoles(feature: Feature<Polygon | MultiPolygon>): boolean {\n try {\n if (feature.geometry.type === 'Polygon') {\n // A polygon has holes if it has more than one ring (outer + holes)\n return feature.geometry.coordinates.length > 1;\n } else if (feature.geometry.type === 'MultiPolygon') {\n // Check if any polygon in the multipolygon has holes\n return feature.geometry.coordinates.some((polygon) => polygon.length > 1);\n }\n return false;\n } catch (error) {\n console.warn('Error checking for holes:', error.message);\n return false;\n }\n }\n\n /**\n * Handle kinks in polygons with holes while preserving hole structure\n */\n private getKinksWithHolePreservation(\n feature: Feature<Polygon | MultiPolygon>,\n ): Feature<Polygon | MultiPolygon>[] {\n try {\n // For polygons with holes, we need to:\n // 1. Split only the outer ring if it has kinks\n // 2. Determine which resulting polygons should contain which holes\n // 3. Reconstruct polygons with their appropriate holes\n\n if (feature.geometry.type === 'Polygon') {\n const coordinates = feature.geometry.coordinates;\n const outerRing = coordinates[0];\n const holes = coordinates.slice(1);\n\n // Create a temporary polygon with just the outer ring to check for kinks\n const outerPolygon: Feature<Polygon> = {\n type: 'Feature',\n geometry: {\n type: 'Polygon',\n coordinates: [outerRing],\n },\n properties: feature.properties || {},\n };\n\n // Check if the outer ring has kinks\n const outerHasKinks = this.hasKinks(outerPolygon);\n\n // 🎯 FALLBACK: Even without kinks, check if outer ring intersects holes (hole traversal)\n const outerRingIntersectsHoles = this.checkOuterRingHoleIntersection(outerRing, holes);\n\n if (outerHasKinks || outerRingIntersectsHoles) {\n if (outerHasKinks) {\n /* empty */\n } else {\n /* empty */\n }\n\n // Check if drag line goes completely through hole\n const dragGoesCompletelyThroughHole = this.checkIfDragCompletelyThroughHole(\n outerRing,\n holes,\n );\n\n if (dragGoesCompletelyThroughHole) {\n return this.handleCompleteHoleTraversal(outerPolygon, holes);\n }\n\n // Split ONLY the outer ring (not the holes)\n const unkink = turf.unkinkPolygon(outerPolygon);\n const splitPolygons: Feature<Polygon | MultiPolygon>[] = [];\n\n turf.featureEach(unkink, (splitPolygon: Feature<Polygon>) => {\n // For each split polygon, subtract any intersecting holes to create proper \"bites\"\n const polygonWithBites = this.subtractIntersectingHoles(splitPolygon, holes);\n splitPolygons.push(polygonWithBites);\n });\n\n return splitPolygons;\n } else {\n return [feature];\n }\n } else if (feature.geometry.type === 'MultiPolygon') {\n // Handle MultiPolygon case\n const allResults: Feature<Polygon | MultiPolygon>[] = [];\n\n for (const polygonCoords of feature.geometry.coordinates) {\n const singlePolygon: Feature<Polygon> = {\n type: 'Feature',\n geometry: {\n type: 'Polygon',\n coordinates: polygonCoords,\n },\n properties: feature.properties || {},\n };\n\n const results = this.getKinksWithHolePreservation(singlePolygon);\n allResults.push(...results);\n }\n\n return allResults;\n }\n\n return [feature];\n } catch (error) {\n console.warn('Error in getKinksWithHolePreservation:', error.message);\n return [feature];\n }\n }\n\n /**\n * Check if the drag line goes completely through a hole (like cutting cake)\n */\n private checkIfDragCompletelyThroughHole(outerRing: Position[], holes: Position[][]): boolean {\n try {\n // Method 1: Check for duplicate points (most reliable method)\n const duplicatePoints = this.findDuplicatePoints(outerRing);\n if (duplicatePoints.length > 0) {\n return true;\n }\n\n // Method 2: Check if the outer ring creates a line that intersects holes\n const selfIntersectionLine = this.findSelfIntersectionLine(outerRing);\n if (selfIntersectionLine && holes.length > 0) {\n for (const hole of holes) {\n if (this.lineCompletelyTraversesHole(selfIntersectionLine, hole)) {\n return true;\n }\n }\n }\n\n // Method 3: Check if any hole is completely \"cut\" by the self-intersection\n if (\n this.hasKinks({\n type: 'Feature',\n geometry: { type: 'Polygon', coordinates: [outerRing] },\n properties: {},\n })\n ) {\n for (const hole of holes) {\n if (this.holeIsCutByKinks(outerRing, hole)) {\n return true;\n }\n }\n }\n\n return false;\n } catch (error) {\n console.warn('Error checking complete hole traversal:', error.message);\n return false;\n }\n }\n\n /**\n * Find the line created by self-intersection in the outer ring\n */\n private findSelfIntersectionLine(outerRing: Position[]): Position[] | null {\n try {\n // Look for the pattern where a point appears twice (creating a line)\n const pointCounts = new Map<string, { point: Position; indices: number[] }>();\n\n for (let i = 0; i < outerRing.length - 1; i++) {\n const point = outerRing[i];\n const key = `${point[0]},${point[1]}`;\n\n if (!pointCounts.has(key)) {\n pointCounts.set(key, { point, indices: [i] });\n } else {\n pointCounts.get(key)!.indices.push(i);\n }\n }\n\n // Find points that appear multiple times\n for (const [key, data] of pointCounts) {\n if (data.indices.length >= 2) {\n // This creates a line from the first occurrence to the second\n const startIndex = data.indices[0];\n const endIndex = data.indices[1];\n\n // Extract the line segment\n const line: Position[] = [];\n for (let i = startIndex; i <= endIndex; i++) {\n line.push(outerRing[i]);\n }\n\n return line;\n }\n }\n\n return null;\n } catch (error) {\n console.warn('Error finding self-intersection line:', error.message);\n return null;\n }\n }\n\n /**\n * Check if a line completely traverses a hole\n */\n private lineCompletelyTraversesHole(line: Position[], hole: Position[]): boolean {\n try {\n if (line.length < 2) return false;\n\n const lineStart = line[0];\n const lineEnd = line[line.length - 1];\n\n // Create a polygon from the hole\n const holePolygon = turf.polygon([hole]);\n\n // Check if the line endpoints are on opposite sides of the hole\n const startInHole = turf.booleanPointInPolygon(turf.point(lineStart), holePolygon);\n const endInHole = turf.booleanPointInPolygon(turf.point(lineEnd), holePolygon);\n\n // If one endpoint is inside the hole and one is outside, it might traverse\n if (startInHole !== endInHole) {\n return true;\n }\n\n return false;\n } catch (error) {\n console.warn('Error checking line hole traversal:', error.message);\n return false;\n }\n }\n\n /**\n * Check if a hole is cut by the kinks in the outer ring\n */\n private holeIsCutByKinks(outerRing: Position[], hole: Position[]): boolean {\n try {\n // Create polygons for analysis\n const outerPolygon = turf.polygon([outerRing]);\n const holePolygon = turf.polygon([hole]);\n\n // Get the kinks (self-intersections) in the outer ring\n const kinks = turf.kinks(outerPolygon);\n\n if (kinks.features.length === 0) return false;\n\n // Check if any kink points are related to the hole\n for (const kink of kinks.features) {\n const kinkPoint = kink.geometry.coordinates;\n\n // Check if the kink is near or intersects the hole\n try {\n const distance = turf.distance(turf.point(kinkPoint), turf.centroid(holePolygon));\n\n if (distance < 0.01) {\n // Close to hole center\n\n return true;\n }\n\n // Also check if kink point is inside the hole\n if (turf.booleanPointInPolygon(turf.point(kinkPoint), holePolygon)) {\n return true;\n }\n } catch (distanceError) {\n // Fallback: just check if point is in polygon\n if (turf.booleanPointInPolygon(turf.point(kinkPoint), holePolygon)) {\n return true;\n }\n }\n }\n\n return false;\n } catch (error) {\n console.warn('Error checking hole cut by kinks:', error.message);\n return false;\n }\n }\n\n /**\n * Find duplicate points in a ring (excluding first/last which should be the same)\n */\n private findDuplicatePoints(ring: Position[]): Position[] {\n const duplicates: Position[] = [];\n const seen = new Set<string>();\n\n // Skip the last point since it should be the same as the first\n for (let i = 0; i < ring.length - 1; i++) {\n const point = ring[i];\n const key = `${point[0]},${point[1]}`;\n\n if (seen.has(key)) {\n duplicates.push(point);\n } else {\n seen.add(key);\n }\n }\n\n return duplicates;\n }\n\n /**\n * Check if outer ring intersects with holes (fallback detection for hole traversal)\n */\n private checkOuterRingHoleIntersection(outerRing: Position[], holes: Position[][]): boolean {\n try {\n if (holes.length === 0) {\n return false;\n }\n\n const outerPolygon = turf.polygon([outerRing]);\n\n for (const hole of holes) {\n const holePolygon = turf.polygon([hole]);\n\n // Check if outer ring intersects with hole boundary\n const intersection = this.getIntersection(outerPolygon, holePolygon);\n\n if (intersection) {\n return true;\n }\n\n // Also check if any part of the outer ring goes through the hole\n for (let i = 0; i < outerRing.length - 1; i++) {\n const point = outerRing[i];\n const pointInHole = turf.booleanPointInPolygon(turf.point(point), holePolygon);\n\n if (pointInHole) {\n return true;\n }\n }\n }\n\n return false;\n } catch (error) {\n return false;\n }\n }\n\n /**\n * Handle complete hole traversal - create solid polygons (cake cutting)\n */\n private handleCompleteHoleTraversal(\n outerPolygon: Feature<Polygon>,\n holes: Position[][],\n ): Feature<Polygon>[] {\n try {\n // 🎯 RADICAL FIX: Instead of using union/unkink operations that might create connections,\n // let's create a simple solid polygon from just the outer ring and split that\n\n // Create a simple solid polygon with ONLY the outer ring (no holes)\n const solidPolygon: Feature<Polygon> = {\n type: 'Feature',\n geometry: {\n type: 'Polygon',\n coordinates: [outerPolygon.geometry.coordinates[0]], // ONLY outer ring\n },\n properties: outerPolygon.properties || {},\n };\n\n // Now split this simple solid polygon\n const unkink = turf.unkinkPolygon(solidPolygon);\n const resultPolygons: Feature<Polygon>[] = [];\n\n turf.featureEach(unkink, (splitPolygon: Feature<Polygon>) => {\n // For complete hole traversal, we create solid polygons\n // The hole area becomes \"nothing\" (like cutting cake)\n // This tells the marker manager to NOT preserve hole structure\n (splitPolygon as PolydrawFeature)._polydrawHoleTraversalOccurred = true;\n\n resultPolygons.push(splitPolygon);\n });\n\n return resultPolygons;\n } catch (error) {\n console.warn('Error handling complete hole traversal:', error.message);\n // Fallback: create a simple solid polygon without holes\n try {\n const fallbackPolygon = {\n ...outerPolygon,\n geometry: {\n ...outerPolygon.geometry,\n coordinates: [outerPolygon.geometry.coordinates[0]], // Only outer ring\n },\n };\n (fallbackPolygon as PolydrawFeature)._polydrawHoleTraversalOccurred = true;\n return [fallbackPolygon];\n } catch (fallbackError) {\n return [outerPolygon];\n }\n }\n }\n\n /**\n * Assign holes to a polygon based on containment and intersection analysis\n */\n private assignHolesToPolygon(polygon: Feature<Polygon>, holes: Position[][]): Feature<Polygon> {\n try {\n const assignedHoles: Position[][] = [];\n\n for (const hole of holes) {\n const holePolygon = turf.polygon([hole]);\n\n // Check if the hole intersects with the polygon boundary\n const intersectionResult = this.analyzeHolePolygonRelationship(holePolygon, polygon);\n\n if (intersectionResult.isCompletelyContained) {\n // Hole is completely within the polygon - assign as normal hole\n assignedHoles.push(hole);\n } else if (intersectionResult.hasIntersection) {\n // Hole is intersected by the split - ignore it (let it disappear naturally)\n // Do nothing - the hole part just disappears, resulting in solid polygons\n } else {\n /* empty */\n }\n }\n\n // Return polygon with assigned holes (if any)\n return {\n type: 'Feature',\n geometry: {\n type: 'Polygon',\n coordinates: [polygon.geometry.coordinates[0], ...assignedHoles],\n },\n properties: polygon.properties || {},\n };\n } catch (error) {\n console.warn('Error assigning holes to polygon:', error.message);\n // Return polygon without holes if assignment fails\n return polygon;\n }\n }\n\n /**\n * Analyze the relationship between a hole and a polygon\n */\n private analyzeHolePolygonRelationship(\n hole: Feature<Polygon>,\n polygon: Feature<Polygon>,\n ): {\n isCompletelyContained: boolean;\n hasIntersection: boolean;\n intersectionArea: number;\n } {\n try {\n // Check if hole is completely within polygon\n const isCompletelyContained = turf.booleanWithin(hole, polygon);\n\n if (isCompletelyContained) {\n return {\n isCompletelyContained: true,\n hasIntersection: false,\n intersectionArea: 0,\n };\n }\n\n // Check if there's any meaningful intersection (not just touching)\n const intersection = this.getIntersection(hole, polygon);\n const hasIntersection = intersection !== null;\n let intersectionArea = 0;\n\n if (hasIntersection) {\n intersectionArea = turf.area(intersection);\n const holeArea = turf.area(hole);\n\n // Only consider it a meaningful intersection if the intersection area\n // is significant compared to the hole area (more than 10%)\n const intersectionRatio = intersectionArea / holeArea;\n\n if (intersectionRatio < 0.1) {\n // Very small intersection - treat as no intersection\n return {\n isCompletelyContained: false,\n hasIntersection: false,\n intersectionArea: 0,\n };\n }\n }\n\n return {\n isCompletelyContained: false,\n hasIntersection,\n intersectionArea,\n };\n } catch (error) {\n console.warn('Error analyzing hole-polygon relationship:', error.message);\n return {\n isCompletelyContained: false,\n hasIntersection: false,\n intersectionArea: 0,\n };\n }\n }\n\n /**\n * Subtract intersecting holes from a polygon to create proper \"bite\" shapes\n */\n private subtractIntersectingHoles(\n polygon: Feature<Polygon>,\n holes: Position[][],\n ): Feature<Polygon> {\n try {\n let resultPolygon = polygon;\n\n for (const hole of holes) {\n const holePolygon = turf.polygon([hole]);\n\n // Check if this hole intersects with the polygon\n const intersection = this.getIntersection(holePolygon, resultPolygon);\n\n if (intersection) {\n // Instead of subtracting intersection, subtract the ENTIRE hole from the polygon\n // This creates the proper \"bite\" shape\n const difference = this.polygonDifference(resultPolygon, holePolygon);\n\n if (difference) {\n if (difference.geometry.type === 'Polygon') {\n resultPolygon = difference as Feature<Polygon>;\n } else if (difference.geometry.type === 'MultiPolygon') {\n // If difference results in MultiPolygon, take the largest piece\n const multiPoly = difference as Feature<MultiPolygon>;\n let largestArea = 0;\n let largestPolygon: Feature<Polygon> | null = null;\n\n for (const coords of multiPoly.geometry.coordinates) {\n const poly: Feature<Polygon> = {\n type: 'Feature',\n geometry: { type: 'Polygon', coordinates: coords },\n properties: {},\n };\n const area = turf.area(poly);\n if (area > largestArea) {\n largestArea = area;\n largestPolygon = poly;\n }\n }\n\n if (largestPolygon) {\n resultPolygon = largestPolygon;\n }\n }\n } else {\n /* empty */\n }\n } else {\n /* empty */\n }\n }\n\n return resultPolygon;\n } catch (error) {\n console.warn('Error subtracting intersecting holes:', error.message);\n return polygon; // Return original polygon if subtraction fails\n }\n }\n\n /**\n * Calculate the area of a ring using the shoelace formula\n */\n private calculateRingArea(ring: Position[]): number {\n let area = 0;\n const n = ring.length;\n\n for (let i = 0; i < n - 1; i++) {\n area += ring[i][0] * ring[i + 1][1];\n area -= ring[i + 1][0] * ring[i][1];\n }\n\n return Math.abs(area) / 2;\n }\n\n /**\n * Remove duplicate vertices from a polygon to prevent turf errors\n */\n removeDuplicateVertices(\n feature: Feature<Polygon | MultiPolygon>,\n ): Feature<Polygon | MultiPolygon> {\n // Validate input feature\n if (!feature || !feature.geometry || !feature.geometry.coordinates) {\n console.warn('Invalid feature passed to removeDuplicateVertices');\n return feature;\n }\n\n const cleanCoordinates = (coords: Position[]): Position[] => {\n if (!coords || coords.length < 3) {\n console.warn('Invalid coordinates array - need at least 3 points for a polygon');\n return coords || [];\n }\n\n const cleaned: Position[] = [];\n const tolerance = 0.000001; // Very small tolerance for coordinate comparison\n\n for (let i = 0; i < coords.length; i++) {\n const current = coords[i];\n const next = coords[(i + 1) % coords.length];\n\n // Validate coordinate format\n if (\n !current ||\n !Array.isArray(current) ||\n current.length < 2 ||\n !next ||\n !Array.isArray(next) ||\n next.length < 2\n ) {\n continue;\n }\n\n // Check if current point is significantly different from next point\n const latDiff = Math.abs(current[1] - next[1]);\n const lngDiff = Math.abs(current[0] - next[0]);\n\n if (latDiff > tolerance || lngDiff > tolerance) {\n cleaned.push(current);\n }\n }\n\n // Ensure we have at least 3 points for a valid polygon\n if (cleaned.length < 3) {\n console.warn('After cleaning, polygon has less than 3 points');\n return coords; // Return original if cleaning resulted in invalid polygon\n }\n\n // Ensure polygon is closed (first and last point are the same)\n if (cleaned.length > 0) {\n const first = cleaned[0];\n const last = cleaned[cleaned.length - 1];\n const latDiff = Math.abs(first[1] - last[1]);\n const lngDiff = Math.abs(first[0] - last[0]);\n\n if (latDiff > tolerance || lngDiff > tolerance) {\n cleaned.push([first[0], first[1]]);\n }\n }\n\n return cleaned;\n };\n\n try {\n if (feature.geometry.type === 'Polygon') {\n const cleanedCoords = feature.geometry.coordinates.map((ring) => cleanCoordinates(ring));\n\n // Validate that we still have valid coordinates after cleaning\n if (cleanedCoords.some((ring) => ring.length < 4)) {\n // 4 because polygon must be closed\n console.warn('Cleaned polygon has invalid ring with less than 4 coordinates');\n return feature; // Return original if cleaning failed\n }\n\n return {\n ...feature,\n geometry: {\n ...feature.geometry,\n coordinates: cleanedCoords,\n },\n };\n } else if (feature.geometry.type === 'MultiPolygon') {\n const cleanedCoords = feature.geometry.coordinates.map((polygon) =>\n polygon.map((ring) => cleanCoordinates(ring)),\n );\n\n // Validate that we still have valid coordinates after cleaning\n if (cleanedCoords.some((polygon) => polygon.some((ring) => ring.length < 4))) {\n console.warn('Cleaned multipolygon has invalid ring with less than 4 coordinates');\n return feature; // Return original if cleaning failed\n }\n\n return {\n ...feature,\n geometry: {\n ...feature.geometry,\n coordinates: cleanedCoords,\n },\n };\n }\n } catch (error) {\n console.warn('Error in removeDuplicateVertices:', error.message);\n return feature; // Return original feature if cleaning fails\n }\n\n return feature;\n }\n\n // ========================================================================\n // POTENTIALLY UNUSED METHODS - TO BE REVIEWED FOR DELETION\n // ========================================================================\n /**\n * Create a \"bite\" by subtracting the intersected part of the hole from the polygon\n */\n private createBiteFromHoleIntersection(\n polygon: Feature<Polygon>,\n hole: Feature<Polygon>,\n ): Feature<Polygon> | null {\n try {\n // Get the intersection between the hole and the polygon\n const intersection = this.getIntersection(hole, polygon);\n\n if (!intersection) {\n return polygon; // No intersection, return original polygon\n }\n\n // Subtract the intersection from the polygon to create the \"bite\"\n const result = this.polygonDifference(polygon, intersection);\n\n if (result && result.geometry.type === 'Polygon') {\n return result as Feature<Polygon>;\n }\n\n return polygon; // Fallback to original if difference operation fails\n } catch (error) {\n console.warn('Error creating bite from hole intersection:', error.message);\n return polygon;\n }\n }\n}\n","import * as L from 'leaflet';\nimport { PolydrawConfig } from './types/polydraw-interfaces';\n\n/**\n * Creates the button elements for the Polydraw control.\n * @param container The main container element.\n * @param subContainer The sub-container for additional buttons.\n * @param onActivateToggle Callback for activate button.\n * @param onDrawClick Callback for draw button.\n * @param onSubtractClick Callback for subtract button.\n * @param onEraseClick Callback for erase button.\n * @param onStartClick Callback for start button.\n * @param onHoleClick Callback for hole button.\n */\nexport function createButtons(\n container: HTMLElement,\n subContainer: HTMLElement,\n config: PolydrawConfig,\n onActivateToggle: () => void,\n onDrawClick: () => void,\n onSubtractClick: () => void,\n onEraseClick: () => void,\n onPointToPointClick: () => void,\n) {\n const activate = L.DomUtil.create('a', 'icon-activate', container);\n activate.href = '#';\n activate.title = 'Activate';\n activate.innerHTML =\n '<svg viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M5 17V7M5 17C3.89543 17 3 17.8954 3 19C3 20.1046 3.89543 21 5 21C6.10457 21 7 20.1046 7 19M5 17C6.10457 17 7 17.8954 7 19M5 7C6.10457 7 7 6.10457 7 5M5 7C3.89543 7 3 6.10457 3 5C3 3.89543 3.89543 3 5 3C6.10457 3 7 3.89543 7 5M7 5H17M17 5C17 6.10457 17.8954 7 19 7C20.1046 7 21 6.10457 21 5C21 3.89543 20.1046 3 19 3C17.8954 3 17 3.89543 17 5ZM7 19H17M17 19C17 20.1046 17.8954 21 19 21C20.1046 21 21 20.1046 21 19C21 17.8954 20.1046 17 19 17C17.8954 17 17 17.8954 17 19ZM17.9247 6.6737L15.1955 10.3776M15.1955 13.6223L17.9222 17.3223M16 12C16 13.1046 15.1046 14 14 14C12.8954 14 12 13.1046 12 12C12 10.8954 12.8954 10 14 10C15.1046 10 16 10.8954 16 12Z\" stroke=\"#000000\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g></svg>';\n\n L.DomEvent.on(activate, 'click', L.DomEvent.stop).on(activate, 'click', onActivateToggle);\n\n if (config.modes.draw) {\n const draw = L.DomUtil.create('a', 'icon-draw', subContainer);\n draw.href = '#';\n draw.title = 'Draw';\n draw.innerHTML =\n '<svg viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M15 7.49996L17.5 9.99996M7.5 20L19.25 8.24996C19.9404 7.5596 19.9404 6.44032 19.25 5.74996V5.74996C18.5596 5.0596 17.4404 5.05961 16.75 5.74996L5 17.5V20H7.5ZM7.5 20H15.8787C17.0503 20 18 19.0502 18 17.8786V17.8786C18 17.316 17.7765 16.7765 17.3787 16.3786L17 16M4.5 4.99996C6.5 2.99996 10 3.99996 10 5.99996C10 8.5 4 8.5 4 11C4 11.8759 4.53314 12.5256 5.22583 13\" stroke=\"#000000\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g></svg>';\n L.DomEvent.on(draw, 'click', L.DomEvent.stop).on(draw, 'click', onDrawClick);\n }\n\n if (config.modes.subtract) {\n const subtract = L.DomUtil.create('a', 'icon-subtract', subContainer);\n subtract.href = '#';\n subtract.title = 'Subtract';\n subtract.innerHTML =\n '<svg viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M15.0722 3.9967L20.7508 9.83395L17.0544 13.5304L13.0758 17.5H21.0041V19H7.93503L4.00195 15.0669L15.0722 3.9967ZM10.952 17.5L15.4628 12.9994L11.8268 9.3634L6.12327 15.0669L8.55635 17.5H10.952Z\" fill=\"#1F2328\"></path> </g></svg>';\n L.DomEvent.on(subtract, 'click', L.DomEvent.stop).on(subtract, 'click', onSubtractClick);\n }\n\n if (config.modes.p2p) {\n const p2p = L.DomUtil.create('a', 'icon-p2p', subContainer);\n p2p.href = '#';\n p2p.title = 'Point to Point';\n p2p.innerHTML =\n '<svg viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M5 17V7M5 17C3.89543 17 3 17.8954 3 19C3 20.1046 3.89543 21 5 21C6.10457 21 7 20.1046 7 19M5 17C6.10457 17 7 17.8954 7 19M5 7C6.10457 7 7 6.10457 7 5M5 7C3.89543 7 3 6.10457 3 5C3 3.89543 3.89543 3 5 3C6.10457 3 7 3.89543 7 5M7 5H17M17 5C17 6.10457 17.8954 7 19 7C20.1046 7 21 6.10457 21 5C21 3.89543 20.1046 3 19 3C17.8954 3 17 3.89543 17 5ZM7 19H17M17 19C17 20.1046 17.8954 21 19 21C20.1046 21 21 20.1046 21 19C21 17.8954 20.1046 17 19 17C17.8954 17 17 17.8954 17 19ZM17.9247 6.6737L15.1955 10.3776M15.1955 13.6223L17.9222 17.3223M16 12C16 13.1046 15.1046 14 14 14C12.8954 14 12 13.1046 12 12C12 10.8954 12.8954 10 14 10C15.1046 10 16 10.8954 16 12Z\" stroke=\"#000000\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g></svg>';\n L.DomEvent.on(p2p, 'click', L.DomEvent.stop).on(p2p, 'click', onPointToPointClick);\n }\n\n if (config.modes.deleteAll) {\n const erase = L.DomUtil.create('a', 'icon-erase', subContainer);\n erase.href = '#';\n erase.title = 'Erase All';\n erase.innerHTML = `<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- Generator: Adobe Illustrator 21.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->\n<svg version=\"1.1\" id=\"Layer_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\"\n\t viewBox=\"0 0 48 48\" style=\"enable-background:new 0 0 48 48;\" xml:space=\"preserve\">\n<style type=\"text/css\">\n\t.st0{fill:#000000}\n\t.st1{fill:#333333;fill-opacity:0;}\n</style>\n<title>trash</title>\n<rect class=\"st1\" width=\"48\" height=\"48\"/>\n<polygon class=\"st0\" points=\"26.6,10 26.6,7.8 21.4,7.8 21.4,10 12.6,10 12.6,12.8 35.4,12.8 35.4,10 \"/>\n<path class=\"st0\" d=\"M35.4,15.4H12.6v4.3h1.8V37c0,1.1,0.9,2,2,2h15.2c1.1,0,2-0.9,2-2V19.7h1.8V15.4z M19.7,34.2c0,0.5-0.4,1-1,1\n\tc-0.5,0-1-0.4-1-1V22.6c0-0.5,0.4-1,1-1c0.5,0,1,0.4,1,1V34.2z M25.3,33.8c0,0.7-0.6,1.3-1.3,1.3c-0.7,0-1.3-0.6-1.3-1.3V23\n\tc0-0.7,0.6-1.3,1.3-1.3c0.7,0,1.3,0.6,1.3,1.3V33.8z M30.3,34.2c0,0.5-0.4,1-1,1c-0.5,0-1-0.4-1-1V22.6c0-0.5,0.4-1,1-1\n\tc0.5,0,1,0.4,1,1V34.2z\"/>\n</svg>`;\n L.DomEvent.on(erase, 'click', L.DomEvent.stop).on(erase, 'click', onEraseClick);\n }\n\n // Debug buttons to test autoAddPolygon(s)\n\n // const start = L.DomUtil.create('a', 'icon-start', subContainer);\n // start.href = '#';\n // start.title = 'Start';\n // start.innerHTML = '<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"><polygon points=\"5,5 5,15 15,10\" /></svg>';\n // if (onStartClick) {\n // L.DomEvent.on(start, 'click', L.DomEvent.stop).on(start, 'click', onStartClick);\n // }\n\n // const hole = L.DomUtil.create('a', 'icon-hole', subContainer);\n // hole.href = '#';\n // hole.title = 'Hole';\n // hole.innerHTML = '<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"><circle cx=\"10\" cy=\"10\" r=\"7\" /><circle cx=\"10\" cy=\"10\" r=\"3\" fill=\"white\" /></svg>';\n // if (onHoleClick) {\n // L.DomEvent.on(hole, 'click', L.DomEvent.stop).on(hole, 'click', onHoleClick);\n // }\n}\n","import * as L from 'leaflet';\nimport { TurfHelper } from './turf-helper';\nimport defaultConfig from './config.json';\n\n/**\n * Utility class for polygon calculations.\n */\nexport class PolygonUtil {\n private static turfHelper = new TurfHelper(defaultConfig);\n\n /**\n * Calculates the center of the polygon.\n * @param polygon Array of LatLng points.\n * @returns The center LatLng.\n */\n static getCenter(polygon: L.LatLngLiteral[]) {\n const pi = Math.PI;\n let x = 0;\n let y = 0;\n let z = 0;\n\n polygon.forEach((v) => {\n let lat1 = v.lat;\n let lon1 = v.lng;\n lat1 = (lat1 * pi) / 180;\n lon1 = (lon1 * pi) / 180;\n x += Math.cos(lat1) * Math.cos(lon1);\n y += Math.cos(lat1) * Math.sin(lon1);\n z += Math.sin(lat1);\n });\n\n let lng = Math.atan2(y, x);\n const hyp = Math.sqrt(x * x + y * y);\n let lat = Math.atan2(z, hyp);\n lat = (lat * 180) / pi;\n lng = (lng * 180) / pi;\n const center: L.LatLngLiteral = { lat: lat, lng: lng };\n\n return center;\n }\n /**\n * Gets the southwest point of the polygon bounds.\n * @param polygon Array of LatLng points.\n * @returns The southwest LatLng.\n */\n static getSouthWest(polygon: L.LatLngLiteral[]): L.LatLngLiteral {\n const bounds = this.getBounds(polygon);\n return bounds.getSouthWest();\n }\n static getNorthEast(polygon: L.LatLngLiteral[]): L.LatLngLiteral {\n const bounds = this.getBounds(polygon);\n return bounds.getNorthEast();\n }\n static getNorthWest(polygon: L.LatLngLiteral[]): L.LatLngLiteral {\n const bounds = this.getBounds(polygon);\n return bounds.getNorthWest();\n }\n static getSouthEast(polygon: L.LatLngLiteral[]): L.LatLngLiteral {\n const bounds = this.getBounds(polygon);\n return bounds.getSouthEast();\n }\n static getNorth(polygon: L.LatLngLiteral[]): number {\n const bounds = this.getBounds(polygon);\n return bounds.getNorth();\n }\n static getSouth(polygon: L.LatLngLiteral[]): number {\n const bounds = this.getBounds(polygon);\n return bounds.getSouth();\n }\n static getWest(polygon: L.LatLngLiteral[]): number {\n const bounds = this.getBounds(polygon);\n return bounds.getWest();\n }\n static getEast(polygon: L.LatLngLiteral[]): number {\n const bounds = this.getBounds(polygon);\n return bounds.getEast();\n }\n static getSqmArea(polygon: L.LatLngLiteral[]): number {\n const poly: L.Polygon = new L.Polygon(polygon);\n const geoJsonPoly = poly.toGeoJSON();\n\n const area = this.turfHelper.getPolygonArea(geoJsonPoly);\n\n return area;\n }\n static getPerimeter(polygon: L.LatLngLiteral[]): number {\n const poly: L.Polygon = new L.Polygon(polygon);\n const geoJsonPoly = poly.toGeoJSON();\n\n const perimeter = this.turfHelper.getPolygonPerimeter(geoJsonPoly);\n\n return perimeter * 1000; // Convert from kilometers to meters to match original behavior\n }\n static getPolygonChecksum(polygon: L.LatLngLiteral[]): number {\n const uniqueLatLngs = polygon.filter((v, i, a) => {\n return a.indexOf(a.find((x) => x.lat === v.lat && x.lng === v.lng)) === i;\n });\n\n return (\n uniqueLatLngs.reduce((a, b) => +a + +b.lat, 0) *\n uniqueLatLngs.reduce((a, b) => +a + +b.lng, 0)\n );\n }\n static getMidPoint(point1: L.LatLngLiteral, point2: L.LatLngLiteral): L.LatLngLiteral {\n const midpoint = this.turfHelper.getMidpoint(point1, point2);\n\n const returnPoint: L.LatLngLiteral = {\n lat: midpoint.lat,\n lng: midpoint.lng,\n };\n\n return returnPoint;\n }\n static getBounds(polygon: L.LatLngLiteral[]): L.LatLngBounds {\n const tmpLatLng: L.LatLng[] = [];\n\n polygon.forEach((ll) => {\n if (isNaN(ll.lat) || isNaN(ll.lng)) {\n /* empty */\n }\n tmpLatLng.push(ll as L.LatLng);\n });\n\n const polyLine: L.Polyline = new L.Polyline(tmpLatLng);\n const bounds = polyLine.getBounds();\n\n return bounds;\n }\n}\n","import { PolygonUtil } from './polygon.util';\nimport * as L from 'leaflet';\n\n/**\n * Class to hold information about a polygon, including area, perimeter, and trashcan point.\n */\nexport class PolygonInfo {\n polygon: L.LatLngLiteral[][][] = [];\n trashcanPoint: L.LatLngLiteral[] = [];\n sqmArea: number[] = [];\n perimeter: number[] = [];\n constructor(polygon) {\n if (!Array.isArray(polygon)) {\n return; // Skip processing if not an array\n }\n\n // Check if polygon[0] is an array of LatLng objects (structure: [Array(N)])\n if (\n polygon.length > 0 &&\n Array.isArray(polygon[0]) &&\n polygon[0].length > 0 &&\n typeof polygon[0][0] === 'object' &&\n 'lat' in polygon[0][0]\n ) {\n // This is the structure: [Array(N)] where Array(N) = [LatLng, LatLng, LatLng, ...]\n // We can process polygon[0] directly as the coordinate array\n const coordinateArray = polygon[0];\n\n // Process the coordinate array directly\n this.trashcanPoint[0] = this.getTrashcanPoint(coordinateArray);\n this.sqmArea[0] = this.calculatePolygonArea(coordinateArray);\n this.perimeter[0] = this.calculatePolygonPerimeter(coordinateArray);\n this.polygon[0] = [coordinateArray]; // Store as [Array(N)] format\n\n return; // Exit early - we've handled the flattened structure\n }\n\n // Check if polygon[0] is a LatLng object directly (structure: [LatLng, LatLng, ...])\n if (polygon.length > 0 && polygon[0] && typeof polygon[0] === 'object' && 'lat' in polygon[0]) {\n // This is a flattened structure: [LatLng, LatLng, LatLng, ...]\n // We need to wrap it in the expected format: [[[LatLng, LatLng, LatLng, ...]]]\n const wrappedPolygon = [[polygon]]; // Wrap in proper nesting\n\n // Process the wrapped polygon\n this.trashcanPoint[0] = this.getTrashcanPoint(polygon);\n this.sqmArea[0] = this.calculatePolygonArea(polygon);\n this.perimeter[0] = this.calculatePolygonPerimeter(polygon);\n this.polygon[0] = wrappedPolygon[0]; // Store as [[LatLng, LatLng, ...]]\n\n return; // Exit early - we've handled the flattened structure\n }\n\n // Process each polygon (normal nested structure)\n polygon.forEach((polygons, i) => {\n if (!polygons || !Array.isArray(polygons)) {\n return; // Skip this polygon\n }\n\n if (!polygons[0] || !Array.isArray(polygons[0])) {\n return; // Skip this polygon\n }\n\n this.trashcanPoint[i] = this.getTrashcanPoint(polygons[0]);\n this.sqmArea[i] = this.calculatePolygonArea(polygons[0]);\n this.perimeter[i] = this.calculatePolygonPerimeter(polygons[0]);\n this.polygon[i] = polygons;\n });\n }\n setSqmArea(area: number): void {\n this.sqmArea[0] = area;\n }\n private getTrashcanPoint(polygon: L.LatLngLiteral[]): L.LatLngLiteral {\n if (!Array.isArray(polygon) || polygon.length === 0) {\n console.warn('getTrashcanPoint: Invalid polygon array:', polygon);\n return { lat: 0, lng: 0 }; // Return default coordinates\n }\n\n const validCoords = polygon.filter(\n (coord) =>\n coord &&\n typeof coord === 'object' &&\n typeof coord.lat === 'number' &&\n typeof coord.lng === 'number' &&\n !isNaN(coord.lat) &&\n !isNaN(coord.lng),\n );\n\n if (validCoords.length === 0) {\n console.warn('getTrashcanPoint: No valid coordinates found:', polygon);\n return { lat: 0, lng: 0 }; // Return default coordinates\n }\n\n const res = Math.max(...validCoords.map((o) => o.lat));\n const idx = validCoords.findIndex((o) => o.lat === res);\n\n if (idx === -1) {\n console.warn('getTrashcanPoint: Could not find max lat coordinate');\n return { lat: 0, lng: 0 }; // Return default coordinates\n }\n\n let previousPoint: L.LatLngLiteral;\n let nextPoint: L.LatLngLiteral;\n\n if (idx > 0) {\n previousPoint = validCoords[idx - 1];\n if (idx < validCoords.length - 1) {\n nextPoint = validCoords[idx + 1];\n } else {\n nextPoint = validCoords[0];\n }\n } else {\n previousPoint = validCoords[validCoords.length - 1];\n nextPoint = validCoords[idx + 1];\n }\n\n if (!previousPoint || !nextPoint) {\n console.warn('getTrashcanPoint: Could not determine previous/next points');\n return validCoords[idx] || { lat: 0, lng: 0 };\n }\n\n const secondPoint = previousPoint.lng < nextPoint.lng ? previousPoint : nextPoint;\n\n const midpoint = PolygonUtil.getMidPoint(validCoords[idx], secondPoint);\n\n return midpoint;\n }\n private calculatePolygonArea(polygon: L.LatLngLiteral[]): number {\n const area = PolygonUtil.getSqmArea(polygon);\n return area;\n }\n private calculatePolygonPerimeter(polygon: L.LatLngLiteral[]): number {\n const perimeter = PolygonUtil.getPerimeter(polygon);\n return perimeter;\n }\n}\n\n/**\n * Class to manage the state of polygon drawing.\n */\nexport class PolygonDrawStates {\n isActivated: boolean;\n isFreeDrawMode: boolean;\n isMoveMode: boolean;\n canRevert: boolean;\n isAuto: boolean;\n hasPolygons: boolean;\n canUsePolyDraw: boolean;\n\n constructor() {\n this.canUsePolyDraw = false;\n this.reset();\n }\n\n activate(): void {\n this.reset();\n this.isActivated = true;\n }\n\n reset(): void {\n this.isActivated = false;\n this.hasPolygons = false;\n this.canRevert = false;\n this.isAuto = false;\n\n this.resetDrawModes();\n }\n\n resetDrawModes(): void {\n this.isFreeDrawMode = false;\n this.isMoveMode = false;\n }\n\n setFreeDrawMode(isAuto: boolean = false): void {\n if (isAuto) {\n this.isActivated = true;\n }\n if (this.isActivated) {\n this.resetDrawModes();\n this.isFreeDrawMode = true;\n if (isAuto) {\n this.isAuto = true;\n }\n }\n }\n\n setMoveMode(): void {\n if (this.isActivated) {\n this.resetDrawModes();\n this.isMoveMode = true;\n }\n }\n\n forceCanUseFreeDraw(): void {\n this.canUsePolyDraw = true;\n }\n}\n","import { PolygonInfo, PolygonDrawStates } from './polygon-helpers';\nimport { MapStateService } from './map-state';\nimport * as L from 'leaflet';\n\n/**\n * Service for managing polygon information and draw states.\n */\nexport class PolygonInformationService {\n private polygonInfoListeners: ((info: PolygonInfo[]) => void)[] = [];\n private polygonDrawStateListeners: ((state: PolygonDrawStates) => void)[] = [];\n\n polygonInformationStorage: PolygonInfo[] = [];\n\n constructor(public mapStateService: MapStateService) {}\n\n onPolygonInfoUpdated(callback: (info: PolygonInfo[]) => void): void {\n this.polygonInfoListeners.push(callback);\n }\n\n private emitPolygonInfoUpdated(): void {\n for (const cb of this.polygonInfoListeners) {\n cb(this.polygonInformationStorage);\n }\n }\n\n onPolygonDrawStateUpdated(callback: (state: PolygonDrawStates) => void): void {\n this.polygonDrawStateListeners.push(callback);\n }\n\n private emitPolygonDrawStateUpdated(state: PolygonDrawStates): void {\n for (const cb of this.polygonDrawStateListeners) {\n cb(state);\n }\n }\n\n // === Functions ===\n\n /**\n * Updates the polygons and notifies the map state service.\n */\n updatePolygons(): void {\n let newPolygons: L.LatLngLiteral[][][] = null;\n\n if (this.polygonInformationStorage.length > 0) {\n newPolygons = [];\n\n this.polygonInformationStorage.forEach((v) => {\n const test: L.LatLngLiteral[][] = [];\n\n v.polygon.forEach((poly) => {\n poly.forEach((polygon) => {\n const closedPolygon = [...polygon];\n\n if (\n polygon.length > 0 &&\n polygon[0].toString() !== polygon[polygon.length - 1].toString()\n ) {\n closedPolygon.push(polygon[0]);\n }\n\n test.push(closedPolygon);\n });\n });\n\n newPolygons.push(test);\n });\n\n // If you want to emit any draw state later, you can do it here\n // this.emitPolygonDrawStateUpdated(...);\n } else {\n // this.emitPolygonDrawStateUpdated(new PolygonDrawStates()); // t.ex.\n }\n\n this.mapStateService.updatePolygons(newPolygons);\n this.saveCurrentState();\n }\n\n saveCurrentState(): void {\n this.emitPolygonInfoUpdated();\n // State saved\n }\n\n deleteTrashcan(polygon: L.LatLngLiteral[][]): void {\n const idx = this.polygonInformationStorage.findIndex((v) => v.polygon[0] === polygon);\n if (idx !== -1) {\n this.polygonInformationStorage.splice(idx, 1);\n this.updatePolygons();\n }\n }\n\n deleteTrashCanOnMulti(polygon: L.LatLngLiteral[][][]): void {\n let index = 0;\n\n // DeleteTrashCan\n // deleteTrashCanOnMulti\n\n this.polygonInformationStorage.forEach((v, i) => {\n const id = v.polygon.findIndex((poly) => poly.toString() === polygon.toString());\n if (id >= 0) {\n index = i;\n v.trashcanPoint.splice(id, 1);\n v.sqmArea.splice(id, 1);\n v.perimeter.splice(id, 1);\n v.polygon.splice(id, 1);\n }\n });\n\n this.updatePolygons();\n\n if (this.polygonInformationStorage.length > 1) {\n this.polygonInformationStorage.splice(index, 1);\n }\n\n // deleteTrashCanOnMulti after\n }\n\n deletePolygonInformationStorage(): void {\n this.polygonInformationStorage = [];\n }\n\n createPolygonInformationStorage(arrayOfFeatureGroups: any[]): void {\n // Create Info\n\n if (arrayOfFeatureGroups.length > 0) {\n arrayOfFeatureGroups.forEach((featureGroup) => {\n const layers = featureGroup.getLayers?.();\n if (layers?.[0]) {\n const latLngs = layers[0].getLatLngs();\n const polyInfo = new PolygonInfo(latLngs);\n this.polygonInformationStorage.push(polyInfo);\n }\n });\n\n this.updatePolygons();\n }\n }\n}\n","import * as L from 'leaflet';\n\n/**\n * Service for managing map state and notifying listeners.\n */\nexport class MapStateService {\n private map: L.Map | null = null;\n private mapListeners: ((map: L.Map) => void)[] = [];\n\n constructor() {}\n\n // === Observer-API ===\n\n onMapUpdated(callback: (map: L.Map) => void): void {\n if (this.map) callback(this.map); // direct call if the map already exists\n this.mapListeners.push(callback);\n }\n\n private emitMapUpdated(): void {\n if (this.map) {\n for (const cb of this.mapListeners) {\n cb(this.map);\n }\n }\n }\n\n // === Public API ===\n\n /**\n * Updates the current map state and notifies listeners.\n * @param map The Leaflet map instance.\n */\n updateMapState(map: L.Map): void {\n this.map = map;\n this.emitMapUpdated();\n }\n\n /**\n * Updates the polygons in the map state.\n * @param polygons Array of polygons.\n */\n updatePolygons(polygons: L.LatLngLiteral[][][]): void {\n // Additional polygon handling can be added here if needed\n }\n}\n","import { DrawMode } from '../enums';\nimport type { PolydrawConfig } from '../types/polydraw-interfaces';\n\n/**\n * Represents the current state of all user interactions in Polydraw\n */\nexport interface InteractionState {\n // Core interactions\n polygonDragging: boolean;\n markerDragging: boolean;\n edgeClicking: boolean;\n polygonClicking: boolean;\n\n // Drawing capabilities\n canStartDrawing: boolean;\n canCompletePolygon: boolean;\n\n // UI interactions\n mapDragging: boolean;\n mapZooming: boolean;\n mapDoubleClickZoom: boolean;\n\n // Mode-specific states\n currentMode: DrawMode;\n isDrawingActive: boolean;\n isModifierKeyHeld: boolean;\n\n // Visual feedback\n showCrosshairCursor: boolean;\n showDragCursor: boolean;\n}\n\n/**\n * Centralized manager for all interaction states in Polydraw.\n * Acts as a single source of truth for what interactions are enabled/disabled.\n */\nexport class ModeManager {\n private state: InteractionState;\n private config: PolydrawConfig;\n\n constructor(config: PolydrawConfig) {\n this.config = config;\n this.state = this.createInitialState();\n }\n\n /**\n * Create the initial interaction state\n */\n private createInitialState(): InteractionState {\n return {\n // Core interactions - initially enabled based on config\n polygonDragging: this.config.modes.dragPolygons ?? false,\n markerDragging: this.config.modes.dragElbow ?? false,\n edgeClicking: true, // Generally always available when not drawing\n polygonClicking: true,\n\n // Drawing capabilities\n canStartDrawing: true,\n canCompletePolygon: false,\n\n // UI interactions - initially enabled\n mapDragging: true,\n mapZooming: true,\n mapDoubleClickZoom: true,\n\n // Mode-specific states\n currentMode: DrawMode.Off,\n isDrawingActive: false,\n isModifierKeyHeld: false,\n\n // Visual feedback\n showCrosshairCursor: false,\n showDragCursor: false,\n };\n }\n\n /**\n * Update the interaction state when the draw mode changes\n */\n updateStateForMode(mode: DrawMode): void {\n this.state.currentMode = mode;\n\n switch (mode) {\n case DrawMode.Off:\n this.setOffModeState();\n break;\n case DrawMode.Add:\n this.setDrawingModeState();\n break;\n case DrawMode.Subtract:\n this.setDrawingModeState();\n break;\n case DrawMode.PointToPoint:\n this.setPointToPointModeState();\n break;\n }\n\n // Update drawing active state\n this.state.isDrawingActive = mode !== DrawMode.Off;\n }\n\n /**\n * Set interaction state for Off mode (normal editing)\n */\n private setOffModeState(): void {\n // Enable all polygon interactions\n this.state.polygonDragging = this.config.modes.dragPolygons ?? false;\n this.state.markerDragging = this.config.modes.dragElbow ?? false;\n this.state.edgeClicking = true;\n this.state.polygonClicking = true;\n\n // Enable drawing capabilities\n this.state.canStartDrawing = true;\n this.state.canCompletePolygon = false;\n\n // Enable map interactions\n this.state.mapDragging = true;\n this.state.mapZooming = true;\n this.state.mapDoubleClickZoom = true;\n\n // Visual feedback\n this.state.showCrosshairCursor = false;\n this.state.showDragCursor = false;\n }\n\n /**\n * Set interaction state for drawing modes (Add, Subtract)\n */\n private setDrawingModeState(): void {\n // Disable all polygon interactions during drawing\n this.state.polygonDragging = false;\n this.state.markerDragging = false;\n this.state.edgeClicking = false;\n this.state.polygonClicking = false;\n\n // Enable drawing capabilities\n this.state.canStartDrawing = true;\n this.state.canCompletePolygon = true;\n\n // Disable map interactions to prevent conflicts\n this.state.mapDragging = false;\n this.state.mapZooming = false;\n this.state.mapDoubleClickZoom = false;\n\n // Visual feedback\n this.state.showCrosshairCursor = true;\n this.state.showDragCursor = false;\n }\n\n /**\n * Set interaction state for Point-to-Point mode\n */\n private setPointToPointModeState(): void {\n // Disable polygon interactions during P2P drawing\n this.state.polygonDragging = false;\n this.state.markerDragging = false;\n this.state.edgeClicking = false;\n this.state.polygonClicking = false;\n\n // Enable P2P specific capabilities\n this.state.canStartDrawing = true;\n this.state.canCompletePolygon = true;\n\n // Disable map interactions\n this.state.mapDragging = false;\n this.state.mapZooming = false;\n this.state.mapDoubleClickZoom = false;\n\n // Visual feedback\n this.state.showCrosshairCursor = true;\n this.state.showDragCursor = false;\n }\n\n /**\n * Update modifier key state\n */\n setModifierKeyState(isHeld: boolean): void {\n this.state.isModifierKeyHeld = isHeld;\n\n // Modifier key can affect certain interactions even in Off mode\n if (this.state.currentMode === DrawMode.Off && isHeld) {\n // When modifier is held, we might want to change interaction behavior\n // For example, edge deletion mode\n }\n }\n\n /**\n * Check if a specific action is currently allowed\n */\n canPerformAction(action: InteractionAction): boolean {\n switch (action) {\n case 'polygonDrag':\n return this.state.polygonDragging;\n case 'markerDrag':\n return this.state.markerDragging;\n case 'edgeClick':\n return this.state.edgeClicking;\n case 'polygonClick':\n return this.state.polygonClicking;\n case 'startDrawing':\n return this.state.canStartDrawing;\n case 'completePolygon':\n return this.state.canCompletePolygon;\n case 'mapDrag':\n return this.state.mapDragging;\n case 'mapZoom':\n return this.state.mapZooming;\n case 'mapDoubleClickZoom':\n return this.state.mapDoubleClickZoom;\n default:\n return false;\n }\n }\n\n /**\n * Check if any drawing mode is active\n */\n isInDrawingMode(): boolean {\n return this.state.isDrawingActive;\n }\n\n /**\n * Check if currently in Off mode (normal editing)\n */\n isInOffMode(): boolean {\n return this.state.currentMode === DrawMode.Off;\n }\n\n /**\n * Get the current draw mode\n */\n getCurrentMode(): DrawMode {\n return this.state.currentMode;\n }\n\n /**\n * Get read-only access to the current state\n */\n getState(): Readonly<InteractionState> {\n return { ...this.state };\n }\n\n /**\n * Check if crosshair cursor should be shown\n */\n shouldShowCrosshairCursor(): boolean {\n return this.state.showCrosshairCursor;\n }\n\n /**\n * Check if drag cursor should be shown\n */\n shouldShowDragCursor(): boolean {\n return this.state.showDragCursor;\n }\n\n /**\n * Update configuration and recalculate state\n */\n updateConfig(config: PolydrawConfig): void {\n this.config = config;\n // Recalculate state based on new config\n this.updateStateForMode(this.state.currentMode);\n }\n}\n\n/**\n * All possible interaction actions that can be checked\n */\nexport type InteractionAction =\n | 'polygonDrag'\n | 'markerDrag'\n | 'edgeClick'\n | 'polygonClick'\n | 'startDrawing'\n | 'completePolygon'\n | 'mapDrag'\n | 'mapZoom'\n | 'mapDoubleClickZoom';\n","import { TurfHelper } from '../turf-helper';\nimport type { Feature, Polygon, MultiPolygon } from 'geojson';\nimport type { PolydrawConfig } from '../types/polydraw-interfaces';\n\nexport interface GeometryOperationResult {\n success: boolean;\n result?: Feature<Polygon | MultiPolygon>;\n results?: Feature<Polygon | MultiPolygon>[];\n error?: string;\n}\n\nexport interface PolygonGeometryManagerDependencies {\n turfHelper: TurfHelper;\n config: PolydrawConfig;\n}\n\n/**\n * PolygonGeometryManager handles pure geometric calculations without any direct map interaction.\n * This includes merging, subtracting, simplifying, and other geometric operations on polygons.\n */\nexport class PolygonGeometryManager {\n private turfHelper: TurfHelper;\n private config: PolydrawConfig;\n\n constructor(dependencies: PolygonGeometryManagerDependencies) {\n // console.log('PolygonGeometryManager constructor');\n this.turfHelper = dependencies.turfHelper;\n this.config = dependencies.config;\n }\n\n /**\n * Check if two polygons intersect using multiple detection methods\n */\n checkPolygonIntersection(\n polygon1: Feature<Polygon | MultiPolygon>,\n polygon2: Feature<Polygon | MultiPolygon>,\n ): boolean {\n // console.log('PolygonGeometryManager checkPolygonIntersection');\n // Method 1: Check if one polygon is completely within the other (for donut scenarios)\n try {\n const poly1WithinPoly2 = this.turfHelper.isPolygonCompletelyWithin(polygon1, polygon2);\n const poly2WithinPoly1 = this.turfHelper.isPolygonCompletelyWithin(polygon2, polygon1);\n\n if (poly1WithinPoly2 || poly2WithinPoly1) {\n return true;\n }\n } catch (error) {\n // Continue to next method\n }\n\n // Method 2: Try the original polygonIntersect\n try {\n const result = this.turfHelper.polygonIntersect(polygon1, polygon2);\n if (result) {\n return true;\n }\n } catch (error) {\n // Continue to next method\n }\n\n // Method 3: Try direct intersection check with area validation\n try {\n const intersection = this.turfHelper.getIntersection(polygon1, polygon2);\n if (\n intersection &&\n intersection.geometry &&\n (intersection.geometry.type === 'Polygon' || intersection.geometry.type === 'MultiPolygon')\n ) {\n // Check if the intersection has meaningful area (not just touching edges/points)\n const intersectionArea = this.turfHelper.getPolygonArea(intersection);\n if (intersectionArea > 0.000001) {\n // Very small threshold for meaningful intersection\n return true;\n }\n }\n } catch (error) {\n // Continue to next method\n }\n\n // Method 4: Check for vertex containment (one polygon's vertices inside the other)\n try {\n const coords1 = this.turfHelper.getCoords(polygon1);\n const coords2 = this.turfHelper.getCoords(polygon2);\n\n // Check if any vertex of polygon2 is inside polygon1\n for (const ring2 of coords2) {\n for (const coord of ring2[0]) {\n // First ring (outer ring)\n const point = {\n type: 'Feature',\n geometry: { type: 'Point', coordinates: coord },\n properties: {},\n };\n if (this.turfHelper.isPolygonCompletelyWithin(point as any, polygon1)) {\n return true;\n }\n }\n }\n\n // Check if any vertex of polygon1 is inside polygon2\n for (const ring1 of coords1) {\n for (const coord of ring1[0]) {\n // First ring (outer ring)\n const point = {\n type: 'Feature',\n geometry: { type: 'Point', coordinates: coord },\n properties: {},\n };\n if (this.turfHelper.isPolygonCompletelyWithin(point as any, polygon2)) {\n return true;\n }\n }\n }\n } catch (error) {\n // Continue to next method\n }\n\n // Method 5: Bounding box overlap check with distance validation\n // This method is too aggressive and causes false positives, so we'll disable it\n // Only use the more precise geometric methods above\n try {\n // Disabled: Bounding box overlap was causing false intersection detection\n // for separate polygons that don't actually intersect geometrically\n // If we reach this point, none of the precise geometric methods detected\n // an intersection, so we should return false rather than using a fallback\n // that might give false positives\n } catch (error) {\n // Continue to fallback\n }\n\n return false;\n }\n\n /**\n * Perform union operation on multiple polygons\n */\n unionPolygons(\n polygons: Feature<Polygon | MultiPolygon>[],\n newPolygon: Feature<Polygon | MultiPolygon>,\n ): GeometryOperationResult {\n // console.log('PolygonGeometryManager unionPolygons');\n try {\n let result = newPolygon;\n\n for (const polygon of polygons) {\n // Check if this is a case where we should create a donut instead of a simple union\n const shouldCreateDonut = this.shouldCreateDonutPolygon(result, polygon);\n\n if (shouldCreateDonut) {\n // Create donut polygon by making the smaller polygon a hole in the larger one\n const donutPolygon = this.createDonutPolygon(result, polygon);\n if (donutPolygon) {\n result = donutPolygon;\n } else {\n // Fallback to regular union if donut creation fails\n const union = this.turfHelper.union(result, polygon);\n result = union;\n }\n } else {\n // Regular union operation\n const union = this.turfHelper.union(result, polygon);\n result = union;\n }\n }\n\n return {\n success: true,\n result: result,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error in unionPolygons',\n };\n }\n }\n\n /**\n * Perform subtraction operation\n */\n subtractPolygon(\n existingPolygon: Feature<Polygon | MultiPolygon>,\n subtractPolygon: Feature<Polygon | MultiPolygon>,\n ): GeometryOperationResult {\n // console.log('PolygonGeometryManager subtractPolygon');\n try {\n // Perform the difference operation (subtract)\n const result = this.turfHelper.polygonDifference(existingPolygon, subtractPolygon);\n\n if (result) {\n const coords = this.turfHelper.getCoords(result);\n const results: Feature<Polygon | MultiPolygon>[] = [];\n\n for (const value of coords) {\n results.push(this.turfHelper.getMultiPolygon([value]));\n }\n\n return {\n success: true,\n results: results,\n };\n } else {\n return {\n success: true,\n results: [],\n };\n }\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error in subtractPolygon',\n };\n }\n }\n\n /**\n * Simplify a polygon by removing every other point\n */\n simplifyPolygon(polygon: Feature<Polygon | MultiPolygon>): GeometryOperationResult {\n // console.log('PolygonGeometryManager simplifyPolygon');\n try {\n const coords = this.turfHelper.getCoords(polygon);\n if (!coords || coords.length === 0) {\n return { success: false, error: 'Invalid polygon coordinates' };\n }\n\n const simplifiedCoords = coords.map((ring) => {\n const outerRing = ring[0]; // Get the outer ring\n if (outerRing.length <= 4) {\n // Cannot simplify further\n return ring;\n }\n\n // Remove every other point to simplify\n const simplified: [number, number][] = [];\n for (let i = 0; i < outerRing.length; i += 2) {\n simplified.push(outerRing[i]);\n }\n\n // Ensure the simplified polygon is closed\n const firstPoint = simplified[0];\n const lastPoint = simplified[simplified.length - 1];\n if (firstPoint[0] !== lastPoint[0] || firstPoint[1] !== lastPoint[1]) {\n simplified.push(firstPoint);\n }\n\n // Check if the simplified polygon is still valid\n if (simplified.length < 4) {\n return ring; // Return original if simplification results in invalid polygon\n }\n\n return [simplified, ...ring.slice(1)]; // Keep holes unchanged\n });\n\n const result = this.turfHelper.getMultiPolygon(simplifiedCoords);\n return {\n success: true,\n result: this.turfHelper.getTurfPolygon(result),\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error in simplifyPolygon',\n };\n }\n }\n\n /**\n * Convert polygon to bounding box\n */\n convertToBoundingBox(polygon: Feature<Polygon | MultiPolygon>): GeometryOperationResult {\n // console.log('PolygonGeometryManager convertToBoundingBox');\n try {\n const result = this.turfHelper.convertToBoundingBoxPolygon(polygon);\n return {\n success: true,\n result: this.turfHelper.getTurfPolygon(result),\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error in convertToBoundingBox',\n };\n }\n }\n\n /**\n * Apply bezier curve to polygon\n */\n bezierifyPolygon(polygon: Feature<Polygon | MultiPolygon>): GeometryOperationResult {\n // console.log('PolygonGeometryManager bezierifyPolygon');\n try {\n const coords = this.turfHelper.getCoords(polygon);\n const result = this.turfHelper.getBezierMultiPolygon(coords);\n return {\n success: true,\n result: this.turfHelper.getTurfPolygon(result),\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error in bezierifyPolygon',\n };\n }\n }\n\n /**\n * Double the elbows of a polygon\n */\n doubleElbowsPolygon(latlngs: L.LatLngLiteral[]): GeometryOperationResult {\n // console.log('PolygonGeometryManager doubleElbowsPolygon');\n try {\n const doubleLatLngs = this.turfHelper.getDoubleElbowLatLngs(latlngs);\n const coords = [\n [doubleLatLngs.map((latlng) => [latlng.lng, latlng.lat] as [number, number])],\n ];\n const result = this.turfHelper.getMultiPolygon(coords);\n return {\n success: true,\n result: this.turfHelper.getTurfPolygon(result),\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error in doubleElbowsPolygon',\n };\n }\n }\n\n /**\n * Helper method to get polygon center\n */\n private getPolygonCenter(\n polygon: Feature<Polygon | MultiPolygon>,\n ): { lat: number; lng: number } | null {\n // console.log('PolygonGeometryManager getPolygonCenter');\n try {\n if (!polygon || !polygon.geometry || !polygon.geometry.coordinates) {\n return null;\n }\n\n let coordinates;\n if (polygon.geometry.type === 'Polygon') {\n coordinates = polygon.geometry.coordinates[0]; // First ring (outer ring)\n } else if (polygon.geometry.type === 'MultiPolygon') {\n coordinates = polygon.geometry.coordinates[0][0]; // First polygon, first ring\n } else {\n return null;\n }\n\n if (!Array.isArray(coordinates) || coordinates.length === 0) {\n return null;\n }\n\n // Calculate centroid\n let latSum = 0;\n let lngSum = 0;\n let count = 0;\n\n for (const coord of coordinates) {\n if (Array.isArray(coord) && coord.length >= 2) {\n const lng = coord[0];\n const lat = coord[1];\n\n if (typeof lng === 'number' && typeof lat === 'number' && !isNaN(lng) && !isNaN(lat)) {\n lngSum += lng;\n latSum += lat;\n count++;\n }\n }\n }\n\n if (count === 0) {\n return null;\n }\n\n return {\n lat: latSum / count,\n lng: lngSum / count,\n };\n } catch (error) {\n return null;\n }\n }\n\n /**\n * Helper method to get bounding box from polygon\n */\n private getBoundingBox(\n polygon: Feature<Polygon | MultiPolygon>,\n ): { minLat: number; maxLat: number; minLng: number; maxLng: number } | null {\n // console.log('PolygonGeometryManager getBoundingBox');\n try {\n if (!polygon || !polygon.geometry || !polygon.geometry.coordinates) {\n return null;\n }\n\n let coordinates;\n if (polygon.geometry.type === 'Polygon') {\n coordinates = polygon.geometry.coordinates[0]; // First ring (outer ring)\n } else if (polygon.geometry.type === 'MultiPolygon') {\n coordinates = polygon.geometry.coordinates[0][0]; // First polygon, first ring\n } else {\n return null;\n }\n\n if (!Array.isArray(coordinates) || coordinates.length === 0) {\n return null;\n }\n\n let minLat = Infinity;\n let maxLat = -Infinity;\n let minLng = Infinity;\n let maxLng = -Infinity;\n\n for (const coord of coordinates) {\n if (Array.isArray(coord) && coord.length >= 2) {\n const lng = coord[0];\n const lat = coord[1];\n\n if (typeof lng === 'number' && typeof lat === 'number' && !isNaN(lng) && !isNaN(lat)) {\n minLng = Math.min(minLng, lng);\n maxLng = Math.max(maxLng, lng);\n minLat = Math.min(minLat, lat);\n maxLat = Math.max(maxLat, lat);\n }\n }\n }\n\n if (\n minLat === Infinity ||\n maxLat === -Infinity ||\n minLng === Infinity ||\n maxLng === -Infinity\n ) {\n return null;\n }\n\n return { minLat, maxLat, minLng, maxLng };\n } catch (error) {\n return null;\n }\n }\n\n /**\n * Determine if two polygons should create a donut instead of a regular union\n */\n private shouldCreateDonutPolygon(\n polygon1: Feature<Polygon | MultiPolygon>,\n polygon2: Feature<Polygon | MultiPolygon>,\n ): boolean {\n // console.log('PolygonGeometryManager shouldCreateDonutPolygon');\n try {\n // NEVER create donuts - always merge polygons\n // The user specifically reported that small + large surrounding polygons\n // should merge, not create holes. This is the expected behavior.\n return false;\n } catch (error) {\n console.warn('Error in shouldCreateDonutPolygon:', error.message);\n return false;\n }\n }\n\n /**\n * Create a donut polygon from two intersecting polygons\n */\n private createDonutPolygon(\n polygon1: Feature<Polygon | MultiPolygon>,\n polygon2: Feature<Polygon | MultiPolygon>,\n ): Feature<Polygon | MultiPolygon> | null {\n // console.log('PolygonGeometryManager createDonutPolygon');\n try {\n // Determine which polygon should be the outer ring and which should be the hole\n const area1 = this.turfHelper.getPolygonArea(polygon1);\n const area2 = this.turfHelper.getPolygonArea(polygon2);\n\n let outerPolygon: Feature<Polygon | MultiPolygon>;\n let innerPolygon: Feature<Polygon | MultiPolygon>;\n\n if (area1 > area2) {\n outerPolygon = polygon1;\n innerPolygon = polygon2;\n } else {\n outerPolygon = polygon2;\n innerPolygon = polygon1;\n }\n\n // Check if the smaller polygon is completely within the larger one\n const innerWithinOuter = this.turfHelper.isPolygonCompletelyWithin(\n innerPolygon,\n outerPolygon,\n );\n\n if (innerWithinOuter) {\n // Create donut by making inner polygon a hole in outer polygon\n return this.createDonutFromContainment(outerPolygon, innerPolygon);\n } else {\n // Handle C-to-O scenario: create union first, then subtract intersection\n return this.createDonutFromIntersection(outerPolygon, innerPolygon);\n }\n } catch (error) {\n console.warn('Error in createDonutPolygon:', error.message);\n return null;\n }\n }\n\n /**\n * Create donut when one polygon is completely within another\n */\n private createDonutFromContainment(\n outerPolygon: Feature<Polygon | MultiPolygon>,\n innerPolygon: Feature<Polygon | MultiPolygon>,\n ): Feature<Polygon | MultiPolygon> | null {\n // console.log('PolygonGeometryManager createDonutFromContainment');\n try {\n // Get coordinates from both polygons\n const outerCoords = this.turfHelper.getCoords(outerPolygon);\n const innerCoords = this.turfHelper.getCoords(innerPolygon);\n\n // Create donut polygon: outer ring + inner ring as hole\n const donutCoords = [\n outerCoords[0][0], // Outer ring\n innerCoords[0][0], // Inner ring as hole\n ];\n\n return {\n type: 'Feature',\n geometry: {\n type: 'Polygon',\n coordinates: donutCoords,\n },\n properties: {},\n };\n } catch (error) {\n console.warn('Error in createDonutFromContainment:', error.message);\n return null;\n }\n }\n\n /**\n * Create donut from intersecting polygons (C-to-O scenario)\n */\n private createDonutFromIntersection(\n polygon1: Feature<Polygon | MultiPolygon>,\n polygon2: Feature<Polygon | MultiPolygon>,\n ): Feature<Polygon | MultiPolygon> | null {\n // console.log('PolygonGeometryManager createDonutFromIntersection');\n try {\n // First, create union of the two polygons\n const union = this.turfHelper.union(polygon1, polygon2);\n if (!union) {\n return null;\n }\n\n // Get the intersection area\n const intersection = this.turfHelper.getIntersection(polygon1, polygon2);\n if (!intersection) {\n return union; // No intersection, return regular union\n }\n\n // Create donut by subtracting intersection from union\n const donut = this.turfHelper.polygonDifference(union, intersection);\n return donut;\n } catch (error) {\n console.warn('Error in createDonutFromIntersection:', error.message);\n return null;\n }\n }\n}\n","import * as L from 'leaflet';\nimport { TurfHelper } from '../turf-helper';\nimport { DrawMode } from '../enums';\nimport type { Feature, Polygon, MultiPolygon } from 'geojson';\nimport type { PolydrawConfig } from '../types/polydraw-interfaces';\nimport { ModeManager } from './mode-manager';\n\nexport interface DrawResult {\n success: boolean;\n polygon?: Feature<Polygon | MultiPolygon>;\n error?: string;\n}\n\nexport interface PolygonDrawManagerDependencies {\n turfHelper: TurfHelper;\n map: L.Map;\n config: PolydrawConfig;\n modeManager: ModeManager;\n tracer: L.Polyline;\n}\n\n/**\n * PolygonDrawManager handles all user-facing drawing actions.\n * This includes freehand drawing and point-to-point drawing functionality.\n */\nexport class PolygonDrawManager {\n private turfHelper: TurfHelper;\n private map: L.Map;\n private config: PolydrawConfig;\n private modeManager: ModeManager;\n private tracer: L.Polyline;\n private eventListeners: Map<string, ((...args: any[]) => void)[]> = new Map();\n\n // Point-to-Point drawing state\n private p2pMarkers: L.Marker[] = [];\n\n constructor(dependencies: PolygonDrawManagerDependencies) {\n // console.log('PolygonDrawManager constructor');\n this.turfHelper = dependencies.turfHelper;\n this.map = dependencies.map;\n this.config = dependencies.config;\n this.modeManager = dependencies.modeManager;\n this.tracer = dependencies.tracer;\n }\n\n /**\n * Add event listener\n */\n on(event: string, callback: (...args: any[]) => void): void {\n // console.log('PolygonDrawManager on');\n if (!this.eventListeners.has(event)) {\n this.eventListeners.set(event, []);\n }\n this.eventListeners.get(event)!.push(callback);\n }\n\n /**\n * Emit event to all listeners\n */\n private emit(event: string, data?: any): void {\n // console.log('PolygonDrawManager emit');\n const listeners = this.eventListeners.get(event);\n if (listeners) {\n listeners.forEach((callback) => callback(data));\n }\n }\n\n /**\n * Handle mouse move during freehand drawing\n */\n mouseMove(event: L.LeafletMouseEvent | TouchEvent): void {\n // console.log('PolygonDrawManager mouseMove');\n if ('latlng' in event && event.latlng) {\n this.tracer.addLatLng(event.latlng);\n } else if ('touches' in event && event.touches && event.touches.length > 0) {\n const latlng = this.map.containerPointToLatLng([\n event.touches[0].clientX,\n event.touches[0].clientY,\n ]);\n this.tracer.addLatLng(latlng);\n }\n }\n\n /**\n * Handle mouse up/leave to complete freehand drawing\n */\n async mouseUpLeave(event: any): Promise<DrawResult> {\n // console.log('PolygonDrawManager mouseUpLeave');\n // Get tracer coordinates and validate before processing\n const tracerGeoJSON = this.tracer.toGeoJSON() as any;\n\n // Check if tracer has valid coordinates before processing\n if (\n !tracerGeoJSON ||\n !tracerGeoJSON.geometry ||\n !tracerGeoJSON.geometry.coordinates ||\n tracerGeoJSON.geometry.coordinates.length < 3\n ) {\n // Not enough points to form a valid polygon\n return {\n success: false,\n error: 'Not enough points to form a valid polygon',\n };\n }\n\n let geoPos: Feature<Polygon | MultiPolygon>;\n try {\n geoPos = this.turfHelper.createPolygonFromTrace(tracerGeoJSON);\n } catch (error) {\n // Handle polygon creation errors (e.g., invalid polygon)\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to create polygon from trace',\n };\n }\n\n // Additional validation - check if the resulting polygon is valid\n if (\n !geoPos ||\n !geoPos.geometry ||\n !geoPos.geometry.coordinates ||\n geoPos.geometry.coordinates.length === 0\n ) {\n return {\n success: false,\n error: 'Invalid polygon created from trace',\n };\n }\n\n this.emit('drawCompleted', {\n polygon: geoPos,\n mode: this.modeManager.getCurrentMode(),\n });\n\n return {\n success: true,\n polygon: geoPos,\n };\n }\n\n /**\n * Handle point-to-point click\n */\n handlePointToPointClick(clickLatLng: L.LatLng): void {\n // console.log('PolygonDrawManager handlePointToPointClick');\n // console.log('=== P2P CLICK DEBUG ===');\n // console.log('Click coordinates:', {\n // lat: clickLatLng.lat,\n // lng: clickLatLng.lng,\n // precision: {\n // lat: clickLatLng.lat.toFixed(10),\n // lng: clickLatLng.lng.toFixed(10),\n // },\n // });\n\n if (!clickLatLng) {\n // console.log('No clickLatLng provided, returning');\n return;\n }\n\n const currentPoints = this.tracer.getLatLngs() as L.LatLng[];\n // console.log('Current points count:', currentPoints.length);\n // console.log(\n // 'Current points:',\n // currentPoints.map((p, i) => ({\n // index: i,\n // lat: p.lat,\n // lng: p.lng,\n // precision: {\n // lat: p.lat.toFixed(10),\n // lng: p.lng.toFixed(10),\n // },\n // })),\n // );\n\n // console.log('P2P markers count:', this.p2pMarkers.length);\n // console.log('Map zoom level:', this.map.getZoom());\n // console.log('Map center:', this.map.getCenter());\n\n // Check if clicking on the first point to close the polygon\n if (currentPoints.length >= 3 && this.p2pMarkers.length > 0) {\n const firstPoint = this.p2pMarkers[0].getLatLng();\n const isClickingFirst = this.isClickingFirstPoint(clickLatLng, firstPoint);\n // console.log('Checking first point click:', {\n // firstPoint: {\n // lat: firstPoint.lat,\n // lng: firstPoint.lng,\n // precision: {\n // lat: firstPoint.lat.toFixed(10),\n // lng: firstPoint.lng.toFixed(10),\n // },\n // },\n // distance: {\n // lat: Math.abs(clickLatLng.lat - firstPoint.lat),\n // lng: Math.abs(clickLatLng.lng - firstPoint.lng),\n // },\n // isClickingFirst: isClickingFirst,\n // });\n\n if (isClickingFirst) {\n // console.log('Completing polygon by clicking first point');\n this.completePointToPointPolygon();\n return;\n }\n }\n\n // Add point to tracer - use addLatLng to ensure points accumulate\n // console.log('Adding new point to tracer');\n this.tracer.addLatLng(clickLatLng);\n\n // Add a visual marker for the new point\n try {\n const isFirstMarker = this.p2pMarkers.length === 0;\n const markerClassName = isFirstMarker\n ? 'leaflet-polydraw-p2p-marker leaflet-polydraw-p2p-first-marker'\n : 'leaflet-polydraw-p2p-marker';\n\n const pointMarker = new L.Marker(clickLatLng, {\n icon: L.divIcon({\n className: markerClassName,\n iconSize: isFirstMarker ? [20, 20] : [10, 10],\n }),\n }).addTo(this.map);\n\n // Stop propagation on mousedown for all p2p markers to prevent adding new points on top of them\n pointMarker.on('mousedown', (e) => {\n L.DomEvent.stopPropagation(e);\n });\n\n // Add hover effects and click handler for the first marker when there are enough points to close\n if (isFirstMarker) {\n pointMarker.on('mouseover', () => {\n if (this.tracer.getLatLngs().length >= 3) {\n const element = pointMarker.getElement();\n if (element) {\n element.style.backgroundColor = '#4CAF50';\n element.style.borderColor = '#4CAF50';\n element.style.cursor = 'pointer';\n element.title = 'Click to close polygon';\n }\n }\n });\n\n pointMarker.on('mouseout', () => {\n const element = pointMarker.getElement();\n if (element) {\n element.style.backgroundColor = '';\n element.style.borderColor = '';\n element.style.cursor = '';\n element.title = '';\n }\n });\n\n // Add click handler to complete polygon when clicking first marker\n pointMarker.on('click', (e) => {\n if (this.tracer.getLatLngs().length >= 3) {\n L.DomEvent.stopPropagation(e);\n this.completePointToPointPolygon();\n }\n });\n }\n\n this.p2pMarkers.push(pointMarker);\n } catch (error) {\n // Handle marker creation errors in test environment\n }\n\n // Update visual style to show dashed line\n if (this.tracer.getLatLngs().length >= 2) {\n try {\n this.tracer.setStyle({\n color: this.config.polyLineOptions.color,\n dashArray: '5, 5',\n });\n } catch (error) {\n // Handle tracer style errors in test environment\n }\n }\n }\n\n /**\n * Handle double-click to complete point-to-point polygon\n */\n handleDoubleClick(e: L.LeafletMouseEvent): void {\n // console.log('PolygonDrawManager handleDoubleClick');\n // Only handle double-click in Point-to-Point mode\n if (this.modeManager.getCurrentMode() !== DrawMode.PointToPoint) {\n return;\n }\n\n const currentPoints = this.tracer.getLatLngs() as L.LatLng[];\n\n // Need at least 3 points to complete a polygon\n if (currentPoints.length >= 3) {\n this.completePointToPointPolygon();\n }\n }\n\n /**\n * Complete point-to-point polygon drawing\n */\n completePointToPointPolygon(): void {\n // console.log('PolygonDrawManager completePointToPointPolygon');\n const points = this.tracer.getLatLngs() as L.LatLng[];\n if (points.length < 3) {\n return; // Need at least 3 points\n }\n\n // console.log('=== P2P COMPLETION DEBUG ===');\n // console.log(\n // 'Original points from tracer:',\n // points.map((p, i) => ({\n // index: i,\n // lat: p.lat.toFixed(10),\n // lng: p.lng.toFixed(10),\n // })),\n // );\n\n // Close the polygon by adding first point at the end if not already closed\n const closedPoints = [...points];\n const firstPoint = points[0];\n const lastPoint = points[points.length - 1];\n\n if (firstPoint.lat !== lastPoint.lat || firstPoint.lng !== lastPoint.lng) {\n closedPoints.push(firstPoint);\n }\n\n // console.log(\n // 'Closed points:',\n // closedPoints.map((p, i) => ({\n // index: i,\n // lat: p.lat.toFixed(10),\n // lng: p.lng.toFixed(10),\n // })),\n // );\n\n // Convert to GeoJSON and create polygon directly (bypass createPolygonFromTrace for P2P)\n try {\n // Create coordinates array directly from points\n const coordinates = closedPoints.map((point) => [point.lng, point.lat] as [number, number]);\n const geoPos = this.turfHelper.getMultiPolygon([[coordinates]]);\n\n // console.log(\n // 'Direct polygon creation (bypassing createPolygonFromTrace):',\n // geoPos.geometry.coordinates[0].map((coord, i) => ({\n // index: i,\n // lng: typeof coord[0] === 'number' ? coord[0].toFixed(10) : coord[0],\n // lat: typeof coord[1] === 'number' ? coord[1].toFixed(10) : coord[1],\n // })),\n // );\n\n // Clear P2P markers and stop drawing first\n this.clearP2pMarkers();\n this.resetTracer();\n\n this.emit('drawCompleted', {\n polygon: geoPos,\n mode: DrawMode.PointToPoint,\n isPointToPoint: true,\n });\n } catch (error) {\n console.warn('Error completing point-to-point polygon:', error);\n this.clearP2pMarkers();\n this.resetTracer();\n }\n }\n\n /**\n * Cancel point-to-point drawing\n */\n cancelPointToPointDrawing(): void {\n // console.log('PolygonDrawManager cancelPointToPointDrawing');\n this.clearP2pMarkers();\n this.resetTracer();\n this.emit('drawCancelled', { mode: DrawMode.PointToPoint });\n }\n\n /**\n * Clear all P2P markers\n */\n clearP2pMarkers(): void {\n // console.log('PolygonDrawManager clearP2pMarkers');\n this.p2pMarkers.forEach((marker) => this.map.removeLayer(marker));\n this.p2pMarkers = [];\n }\n\n /**\n * Reset the tracer\n */\n resetTracer(): void {\n // console.log('PolygonDrawManager resetTracer');\n this.tracer.setLatLngs([]);\n }\n\n /**\n * Check if clicking on the first point to close polygon\n */\n private isClickingFirstPoint(clickLatLng: L.LatLng, firstPoint: L.LatLng): boolean {\n // console.log('PolygonDrawManager isClickingFirstPoint');\n if (!firstPoint) return false;\n\n // Use zoom-dependent tolerance - higher zoom = smaller tolerance\n const zoom = this.map.getZoom();\n // Base tolerance at zoom 10, scale down exponentially for higher zooms\n const baseTolerance = 0.0005;\n const tolerance = baseTolerance / Math.pow(2, Math.max(0, zoom - 10));\n\n // console.log('First point click tolerance check:', {\n // zoom: zoom,\n // baseTolerance: baseTolerance,\n // calculatedTolerance: tolerance,\n // clickLatLng: {\n // lat: clickLatLng.lat.toFixed(10),\n // lng: clickLatLng.lng.toFixed(10),\n // },\n // firstPoint: {\n // lat: firstPoint.lat.toFixed(10),\n // lng: firstPoint.lng.toFixed(10),\n // },\n // distances: {\n // lat: Math.abs(clickLatLng.lat - firstPoint.lat),\n // lng: Math.abs(clickLatLng.lng - firstPoint.lng),\n // },\n // });\n\n const latDiff = Math.abs(clickLatLng.lat - firstPoint.lat);\n const lngDiff = Math.abs(clickLatLng.lng - firstPoint.lng);\n const isClicking = latDiff < tolerance && lngDiff < tolerance;\n\n // console.log('First point click result:', {\n // tolerance: tolerance,\n // latDiff: latDiff,\n // lngDiff: lngDiff,\n // isClicking: isClicking,\n // });\n\n return isClicking;\n }\n\n /**\n * Get current P2P markers (for external access)\n */\n getP2pMarkers(): L.Marker[] {\n // console.log('PolygonDrawManager getP2pMarkers');\n return [...this.p2pMarkers];\n }\n\n /**\n * Check if currently in point-to-point drawing mode\n */\n isInPointToPointMode(): boolean {\n // console.log('PolygonDrawManager isInPointToPointMode');\n return this.modeManager.getCurrentMode() === DrawMode.PointToPoint;\n }\n\n /**\n * Get current tracer points count\n */\n getTracerPointsCount(): number {\n // console.log('PolygonDrawManager getTracerPointsCount');\n const points = this.tracer.getLatLngs() as L.LatLng[];\n return points.length;\n }\n}\n","import * as L from 'leaflet';\n\n/**\n * Factory for creating Leaflet DivIcons.\n */\nexport class IconFactory {\n /**\n * Creates a DivIcon with the given class names.\n * @param classNames Array of class names to apply.\n * @returns A Leaflet DivIcon.\n */\n static createDivIcon(classNames: string[]): L.DivIcon {\n const classes = classNames.join(' ');\n return L.divIcon({ className: classes });\n }\n}\n","import { MarkerPosition } from './enums';\nimport * as L from 'leaflet';\nimport defaultConfig from './config.json';\n\n/**\n * Utility for polygon bounds.\n */\n\n// For ICompass, from interface, but for now, define\ntype ICompass = {\n East: L.LatLngLiteral;\n North: L.LatLngLiteral;\n NorthEast: L.LatLngLiteral;\n NorthWest: L.LatLngLiteral;\n South: L.LatLngLiteral;\n SouthEast: L.LatLngLiteral;\n SouthWest: L.LatLngLiteral;\n West: L.LatLngLiteral;\n};\n\nexport class PolyDrawUtil {\n /**\n * Gets the bounds of the polygon with optional padding.\n * @param polygon Array of LatLng points.\n * @param padding Padding factor.\n * @returns The LatLngBounds.\n */\n static getBounds(polygon: L.LatLngLiteral[], padding: number = 0): L.LatLngBounds {\n const tmpLatLng: L.LatLng[] = [];\n polygon.forEach((ll) => {\n if (isNaN(ll.lat) || isNaN(ll.lng)) {\n /* empty */\n }\n tmpLatLng.push(ll as L.LatLng);\n });\n const polyLine: L.Polyline = new L.Polyline(tmpLatLng);\n const bounds = polyLine.getBounds();\n if (padding !== 0) {\n return bounds.pad(padding);\n }\n return bounds;\n }\n}\n\n/**\n * Class for compass directions based on bounds.\n */\nexport class Compass {\n public direction: ICompass = {\n East: new L.LatLng(0, 0),\n North: new L.LatLng(0, 0),\n NorthEast: new L.LatLng(0, 0),\n NorthWest: new L.LatLng(0, 0),\n South: new L.LatLng(0, 0),\n SouthEast: new L.LatLng(0, 0),\n SouthWest: new L.LatLng(0, 0),\n West: new L.LatLng(0, 0),\n };\n constructor(minLat: number = 0, minLng: number = 0, maxLat: number = 0, maxLng: number = 0) {\n this.direction.North = new L.LatLng(maxLat, (minLng + maxLng) / 2);\n this.direction.NorthEast = new L.LatLng(maxLat, maxLng);\n this.direction.East = new L.LatLng((minLat + maxLat) / 2, maxLng);\n this.direction.SouthEast = new L.LatLng(minLat, maxLng);\n this.direction.South = new L.LatLng(minLat, (minLng + maxLng) / 2);\n this.direction.SouthWest = new L.LatLng(minLat, minLng);\n this.direction.West = new L.LatLng((minLat + maxLat) / 2, minLng);\n this.direction.NorthWest = new L.LatLng(maxLat, minLng);\n }\n getDirection(direction: MarkerPosition) {\n switch (direction) {\n case MarkerPosition.SouthWest:\n return this.direction.SouthWest;\n case MarkerPosition.West:\n return this.direction.West;\n case MarkerPosition.NorthWest:\n return this.direction.NorthWest;\n case MarkerPosition.North:\n return this.direction.North;\n case MarkerPosition.NorthEast:\n return this.direction.NorthEast;\n case MarkerPosition.East:\n return this.direction.East;\n case MarkerPosition.SouthEast:\n return this.direction.SouthEast;\n case MarkerPosition.South:\n return this.direction.South;\n default:\n throw new Error();\n }\n }\n getPositions(\n startPosition: MarkerPosition = MarkerPosition.SouthWest,\n clockwise: boolean = false,\n addClosingNode: boolean = true,\n ): number[][] {\n const positions: number[][] = [];\n const posArray = this.getPositionAsArray(startPosition, clockwise);\n posArray.forEach((v) => {\n positions.push([v.lng, v.lat]);\n });\n if (addClosingNode) {\n positions.push([posArray[0].lng, posArray[0].lat]);\n }\n return positions;\n }\n private getPositionAsArray(\n startPosition: MarkerPosition = MarkerPosition.NorthEast,\n clockwise: boolean = false,\n ): L.LatLngLiteral[] {\n const positions: L.LatLngLiteral[] = [];\n if (clockwise) {\n positions.push(this.direction.SouthWest);\n positions.push(this.direction.West);\n positions.push(this.direction.NorthWest);\n positions.push(this.direction.North);\n positions.push(this.direction.NorthEast);\n positions.push(this.direction.East);\n positions.push(this.direction.SouthEast);\n positions.push(this.direction.South);\n } else {\n positions.push(this.direction.SouthWest);\n positions.push(this.direction.South);\n positions.push(this.direction.SouthEast);\n positions.push(this.direction.East);\n positions.push(this.direction.NorthEast);\n positions.push(this.direction.North);\n positions.push(this.direction.NorthWest);\n positions.push(this.direction.West);\n }\n if (startPosition !== MarkerPosition.SouthWest) {\n const chunk = positions.splice(0, startPosition);\n chunk.forEach((v, i) => {\n positions.splice(startPosition + i, 0, v);\n });\n }\n return positions;\n }\n}\n\n/**\n * Class for calculating perimeter in different units.\n */\nexport class Perimeter {\n public metricLength: string = '';\n public metricUnit: string = '';\n public imperialLength: string = '';\n public imperialUnit: string = '';\n\n constructor(length: number, config: typeof defaultConfig) {\n if (length !== null || length !== undefined) {\n if (length === 0) {\n if (config.markers.markerInfoIcon.usePerimeterMinValue) {\n this.metricLength = config.markers.markerInfoIcon.values.min.metric;\n this.metricUnit = config.markers.markerInfoIcon.units.metric.perimeter.m;\n this.imperialLength = config.markers.markerInfoIcon.values.min.imperial;\n this.imperialUnit = config.markers.markerInfoIcon.units.imperial.perimeter.feet;\n } else {\n this.metricLength = config.markers.markerInfoIcon.values.unknown.metric;\n this.metricUnit = config.markers.markerInfoIcon.units.unknownUnit;\n this.imperialLength = config.markers.markerInfoIcon.values.unknown.imperial;\n this.imperialUnit = config.markers.markerInfoIcon.units.unknownUnit;\n }\n } else if (length < 100) {\n this.metricLength = (Math.ceil(length / 10) * 10).toString();\n this.metricUnit = config.markers.markerInfoIcon.units.metric.perimeter.m;\n } else if (length < 500) {\n this.metricLength = (Math.ceil(length / 50) * 50).toString();\n this.metricUnit = config.markers.markerInfoIcon.units.metric.perimeter.m;\n } else if (length < 1000) {\n this.metricLength = (Math.ceil(length / 100) * 100).toString();\n this.metricUnit = config.markers.markerInfoIcon.units.metric.perimeter.m;\n } else if (length < 10000) {\n this.metricLength = ((Math.ceil(length / 100) * 100) / 1000).toFixed(1);\n this.metricUnit = config.markers.markerInfoIcon.units.metric.perimeter.km;\n } else {\n this.metricLength = ((Math.ceil(length / 1000) * 1000) / 1000).toString();\n this.metricUnit = config.markers.markerInfoIcon.units.metric.perimeter.km;\n }\n //Imperial\n const inch = length / 0.0254;\n const feet = inch / 12;\n const yards = feet / 3;\n const miles = yards / 1760;\n\n if (length < 1000 / 2.54) {\n this.imperialLength = (Math.ceil(feet / 10) * 10).toString();\n this.imperialUnit = config.markers.markerInfoIcon.units.imperial.perimeter.feet;\n } else if (length < (1000 / 2.54) * 3) {\n this.imperialLength = (Math.ceil(yards / 10) * 10).toString();\n this.imperialUnit = config.markers.markerInfoIcon.units.imperial.perimeter.yards;\n } else if (length < 1609) {\n this.imperialLength = miles.toFixed(2);\n this.imperialUnit = config.markers.markerInfoIcon.units.imperial.perimeter.miles;\n } else if (length < 16093) {\n this.imperialLength = miles.toFixed(1);\n this.imperialUnit = config.markers.markerInfoIcon.units.imperial.perimeter.miles;\n } else {\n this.imperialLength = miles.toFixed(0);\n this.imperialUnit = config.markers.markerInfoIcon.units.imperial.perimeter.miles;\n }\n }\n }\n}\n\n/**\n * Class for calculating area in different units.\n */\nexport class Area {\n public metricArea: string = '';\n public metricUnit: string = '';\n public imperialArea: string = '';\n public imperialUnit: string = '';\n\n constructor(sqrMeterArea: number, config: typeof defaultConfig) {\n const area = sqrMeterArea;\n const onlyMetrics = config.markers.markerInfoIcon.units.metric.onlyMetrics;\n if (area !== null || area !== undefined) {\n if (area === 0) {\n this.metricArea = '-';\n this.metricUnit = config.markers.markerInfoIcon.units.unknownUnit;\n this.imperialArea = '-';\n this.imperialUnit = config.markers.markerInfoIcon.units.unknownUnit;\n } else if (area < 10000) {\n this.metricArea = Math.round(area).toString();\n this.metricUnit = config.markers.markerInfoIcon.units.metric.area.m2;\n } else if (area < 100000) {\n if (onlyMetrics) {\n this.metricArea = (area / 1000000).toFixed(2);\n this.metricUnit = config.markers.markerInfoIcon.units.metric.area.km2;\n } else {\n this.metricArea = (area / 1000).toFixed(1);\n this.metricUnit = config.markers.markerInfoIcon.units.metric.area.daa;\n }\n } else if (area < 10000000) {\n if (onlyMetrics) {\n this.metricArea = (area / 1000000).toFixed(2);\n this.metricUnit = config.markers.markerInfoIcon.units.metric.area.km2;\n } else {\n this.metricArea = Math.round(area / 1000).toString();\n this.metricUnit = config.markers.markerInfoIcon.units.metric.area.daa;\n }\n } else if (area < 100000000) {\n if (onlyMetrics) {\n this.metricArea = (area / 1000000).toFixed(1);\n this.metricUnit = config.markers.markerInfoIcon.units.metric.area.km2;\n } else {\n this.metricArea = Math.round(area / 10000).toString();\n this.metricUnit = config.markers.markerInfoIcon.units.metric.area.ha;\n }\n } else {\n this.metricArea = Math.round(area / 1000000).toString();\n this.metricUnit = config.markers.markerInfoIcon.units.metric.area.km2;\n }\n\n //Imperial\n const inch2 = area * 1550.0;\n const feet2 = inch2 * 0.0069444;\n const yards2 = feet2 * 0.11111;\n const acres = yards2 * 0.00020661;\n const miles2 = yards2 * 0.00000032283;\n\n if (area < 92.9) {\n this.imperialArea = Math.round(feet2).toString();\n this.imperialUnit = config.markers.markerInfoIcon.units.imperial.area.feet2;\n } else if (area < 836.14) {\n this.imperialArea = yards2.toFixed(0);\n this.imperialUnit = config.markers.markerInfoIcon.units.imperial.area.yards2;\n } else if (area < 40469.6) {\n this.imperialArea = acres.toFixed(2);\n this.imperialUnit = config.markers.markerInfoIcon.units.imperial.area.acres;\n } else if (area < 404696) {\n this.imperialArea = acres.toFixed(1);\n this.imperialUnit = config.markers.markerInfoIcon.units.imperial.area.acres;\n } else if (area < 4046960) {\n this.imperialArea = acres.toFixed(0);\n this.imperialUnit = config.markers.markerInfoIcon.units.imperial.area.acres;\n } else if (area < 25900404) {\n this.imperialArea = miles2.toFixed(2);\n this.imperialUnit = config.markers.markerInfoIcon.units.imperial.area.miles2;\n } else if (area < 259004040) {\n this.imperialArea = miles2.toFixed(1);\n this.imperialUnit = config.markers.markerInfoIcon.units.imperial.area.miles2;\n } else {\n this.imperialArea = miles2.toFixed(0);\n this.imperialUnit = config.markers.markerInfoIcon.units.imperial.area.miles2;\n }\n }\n }\n}\n","import * as L from 'leaflet';\nimport { TurfHelper } from '../turf-helper';\nimport { PolygonInformationService } from '../polygon-information.service';\nimport { IconFactory } from '../icon-factory';\nimport { PolygonUtil } from '../polygon.util';\nimport { MarkerPosition } from '../enums';\nimport { Compass, PolyDrawUtil, Perimeter, Area } from '../utils';\nimport type { Feature, Polygon, MultiPolygon } from 'geojson';\nimport type {\n PolydrawConfig,\n PolydrawPolygon,\n PolydrawEdgePolyline,\n} from '../types/polydraw-interfaces';\nimport { ModeManager } from './mode-manager';\n\nexport interface InteractionResult {\n success: boolean;\n featureGroups?: L.FeatureGroup[];\n error?: string;\n}\n\nexport interface PolygonInteractionManagerDependencies {\n turfHelper: TurfHelper;\n polygonInformation: PolygonInformationService;\n map: L.Map;\n config: PolydrawConfig;\n modeManager: ModeManager;\n}\n\n/**\n * PolygonInteractionManager handles all interactions with existing polygons.\n * This includes dragging polygons, dragging markers, edge interactions, and popup menus.\n */\nexport class PolygonInteractionManager {\n private turfHelper: TurfHelper;\n private polygonInformation: PolygonInformationService;\n private map: L.Map;\n private config: PolydrawConfig;\n private modeManager: ModeManager;\n private eventListeners: Map<string, ((...args: any[]) => void)[]> = new Map();\n\n // Polygon drag state\n private currentDragPolygon: any = null;\n private currentModifierDragMode: boolean = false;\n private isModifierKeyHeld: boolean = false;\n\n // Read-only access to feature groups\n private getFeatureGroups: () => L.FeatureGroup[];\n private addFeatureGroup: (fg: L.FeatureGroup) => void;\n private removeFeatureGroup: (fg: L.FeatureGroup) => void;\n\n constructor(\n dependencies: PolygonInteractionManagerDependencies,\n featureGroupAccess: {\n getFeatureGroups: () => L.FeatureGroup[];\n addFeatureGroup: (fg: L.FeatureGroup) => void;\n removeFeatureGroup: (fg: L.FeatureGroup) => void;\n },\n ) {\n // console.log('PolygonInteractionManager constructor');\n this.turfHelper = dependencies.turfHelper;\n this.polygonInformation = dependencies.polygonInformation;\n this.map = dependencies.map;\n this.config = dependencies.config;\n this.modeManager = dependencies.modeManager;\n\n // Store feature group access methods\n this.getFeatureGroups = featureGroupAccess.getFeatureGroups;\n this.addFeatureGroup = featureGroupAccess.addFeatureGroup;\n this.removeFeatureGroup = featureGroupAccess.removeFeatureGroup;\n }\n\n /**\n * Add event listener\n */\n on(event: string, callback: (...args: any[]) => void): void {\n // console.log('PolygonInteractionManager on');\n if (!this.eventListeners.has(event)) {\n this.eventListeners.set(event, []);\n }\n this.eventListeners.get(event)!.push(callback);\n }\n\n /**\n * Emit event to all listeners\n */\n private emit(event: string, data?: any): void {\n // console.log('PolygonInteractionManager emit');\n const listeners = this.eventListeners.get(event);\n if (listeners) {\n listeners.forEach((callback) => callback(data));\n }\n }\n\n /**\n * Add markers to a polygon feature group\n */\n addMarkers(latlngs: L.LatLngLiteral[], featureGroup: L.FeatureGroup): void {\n // console.log('PolygonInteractionManager addMarkers');\n // Get initial marker positions\n let menuMarkerIdx = this.getMarkerIndex(latlngs, this.config.markers.markerMenuIcon.position);\n let deleteMarkerIdx = this.getMarkerIndex(\n latlngs,\n this.config.markers.markerDeleteIcon.position,\n );\n let infoMarkerIdx = this.getMarkerIndex(latlngs, this.config.markers.markerInfoIcon.position);\n\n // Apply fallback separation logic to ensure markers don't overlap\n const separatedIndices = this.ensureMarkerSeparation(latlngs.length, {\n menu: { index: menuMarkerIdx, enabled: this.config.markers.menuMarker },\n delete: { index: deleteMarkerIdx, enabled: this.config.markers.deleteMarker },\n info: { index: infoMarkerIdx, enabled: this.config.markers.infoMarker },\n });\n\n // Update indices with separated values\n menuMarkerIdx = separatedIndices.menu;\n deleteMarkerIdx = separatedIndices.delete;\n infoMarkerIdx = separatedIndices.info;\n\n latlngs.forEach((latlng, i) => {\n let iconClasses = this.config.markers.markerIcon.styleClasses;\n if (i === menuMarkerIdx && this.config.markers.menuMarker) {\n iconClasses = this.config.markers.markerMenuIcon.styleClasses;\n }\n if (i === deleteMarkerIdx && this.config.markers.deleteMarker) {\n iconClasses = this.config.markers.markerDeleteIcon.styleClasses;\n }\n if (i === infoMarkerIdx && this.config.markers.infoMarker) {\n iconClasses = this.config.markers.markerInfoIcon.styleClasses;\n }\n\n const processedClasses = Array.isArray(iconClasses) ? iconClasses : [iconClasses];\n const marker = new L.Marker(latlng, {\n icon: this.createDivIcon(processedClasses),\n draggable: this.config.modes.dragElbow,\n title: this.config.markers.coordsTitle ? this.getLatLngInfoString(latlng) : '',\n zIndexOffset:\n this.config.markers.markerIcon.zIndexOffset ?? this.config.markers.zIndexOffset,\n });\n\n featureGroup.addLayer(marker).addTo(this.map);\n\n // Set high z-index for special markers to ensure they're always visible on top\n if (i === menuMarkerIdx || i === deleteMarkerIdx || i === infoMarkerIdx) {\n const element = marker.getElement();\n if (element) {\n element.style.zIndex = '10000';\n }\n }\n\n if (this.config.modes.dragElbow) {\n marker.on('drag', (e) => {\n if (this.modeManager.canPerformAction('markerDrag')) {\n this.markerDrag(featureGroup);\n }\n });\n marker.on('dragend', (e) => {\n if (this.modeManager.canPerformAction('markerDrag')) {\n this.markerDragEnd(featureGroup);\n }\n });\n }\n\n if (i === menuMarkerIdx && this.config.markers.menuMarker) {\n const menuPopup = this.generateMenuMarkerPopup(latlngs, featureGroup);\n marker.options.zIndexOffset =\n this.config.markers.markerMenuIcon.zIndexOffset ?? this.config.markers.zIndexOffset;\n marker.bindPopup(menuPopup, { className: 'alter-marker' });\n }\n if (i === infoMarkerIdx && this.config.markers.infoMarker) {\n // Get the complete polygon GeoJSON to properly handle holes\n const polygonGeoJSON = this.getPolygonGeoJSONFromFeatureGroup(featureGroup);\n const area = this.turfHelper.getPolygonArea(polygonGeoJSON);\n const perimeter = this.getTotalPolygonPerimeter(polygonGeoJSON);\n const infoPopup = this.generateInfoMarkerPopup(area, perimeter);\n marker.options.zIndexOffset =\n this.config.markers.markerInfoIcon.zIndexOffset ?? this.config.markers.zIndexOffset;\n marker.bindPopup(infoPopup, { className: 'info-marker' });\n }\n\n // Forward mousedown events to the map when in drawing mode\n marker.on('mousedown', (e) => {\n if (!this.modeManager.isInOffMode()) {\n L.DomEvent.stopPropagation(e);\n this.map.fire('mousedown', e);\n }\n });\n\n // Generic click handler for all markers\n marker.on('click', (e) => {\n if (this.modeManager.isInOffMode()) {\n if (this.isModifierKeyPressed(e.originalEvent)) {\n const poly = (\n featureGroup.getLayers().find((layer) => layer instanceof L.Polygon) as L.Polygon\n )?.toGeoJSON();\n if (poly) {\n this.elbowClicked(e, poly);\n }\n } else {\n // Handle non-modifier clicks for special markers\n if (i === deleteMarkerIdx && this.config.markers.deleteMarker) {\n this.removeFeatureGroup(featureGroup);\n this.polygonInformation.createPolygonInformationStorage(this.getFeatureGroups());\n this.emit('polygonDeleted');\n }\n }\n }\n });\n\n // Add hover listeners for edge deletion feedback\n marker.on('mouseover', () => this.onMarkerHoverForEdgeDeletion(marker, true));\n marker.on('mouseout', () => this.onMarkerHoverForEdgeDeletion(marker, false));\n });\n }\n\n /**\n * Add hole markers to a polygon feature group\n */\n addHoleMarkers(latlngs: L.LatLngLiteral[], featureGroup: L.FeatureGroup): void {\n // console.log('PolygonInteractionManager addHoleMarkers');\n latlngs.forEach((latlng, i) => {\n // Use holeIcon styles instead of regular markerIcon styles\n const iconClasses = this.config.markers.holeIcon.styleClasses;\n const processedClasses = Array.isArray(iconClasses) ? iconClasses : [iconClasses];\n const marker = new L.Marker(latlng, {\n icon: this.createDivIcon(processedClasses),\n draggable: true,\n title: this.getLatLngInfoString(latlng),\n zIndexOffset: this.config.markers.holeIcon.zIndexOffset ?? this.config.markers.zIndexOffset,\n });\n featureGroup.addLayer(marker).addTo(this.map);\n\n marker.on('drag', (e) => {\n this.markerDrag(featureGroup);\n });\n marker.on('dragend', (e) => {\n this.markerDragEnd(featureGroup);\n });\n });\n }\n\n /**\n * Add edge click listeners to a polygon\n */\n addEdgeClickListeners(polygon: L.Polygon, featureGroup: L.FeatureGroup): void {\n // console.log('PolygonInteractionManager addEdgeClickListeners');\n const rawLatLngs = polygon.getLatLngs();\n\n // Handle different polygon structures\n let processedRings: L.LatLngLiteral[][];\n\n if (Array.isArray(rawLatLngs) && rawLatLngs.length > 0) {\n if (Array.isArray(rawLatLngs[0])) {\n if (Array.isArray(rawLatLngs[0][0]) && rawLatLngs[0][0].length > 0) {\n const firstCoord = rawLatLngs[0][0][0];\n if (firstCoord && typeof firstCoord === 'object' && 'lat' in firstCoord) {\n processedRings = rawLatLngs[0] as L.LatLngLiteral[][];\n } else {\n processedRings = rawLatLngs[0] as L.LatLngLiteral[][];\n }\n } else if (\n rawLatLngs[0][0] &&\n typeof rawLatLngs[0][0] === 'object' &&\n 'lat' in rawLatLngs[0][0]\n ) {\n processedRings = rawLatLngs as L.LatLngLiteral[][];\n } else {\n processedRings = rawLatLngs[0] as L.LatLngLiteral[][];\n }\n } else if (rawLatLngs[0] && typeof rawLatLngs[0] === 'object' && 'lat' in rawLatLngs[0]) {\n processedRings = [rawLatLngs as L.LatLngLiteral[]];\n } else {\n processedRings = [rawLatLngs as L.LatLngLiteral[]];\n }\n } else {\n return;\n }\n\n processedRings.forEach((ring, ringIndex) => {\n for (let i = 0; i < ring.length; i++) {\n const edgeStart = ring[i];\n const edgeEnd = ring[(i + 1) % ring.length];\n\n if (edgeStart.lat === edgeEnd.lat && edgeStart.lng === edgeEnd.lng) {\n continue;\n }\n\n const edgePolyline = L.polyline([edgeStart, edgeEnd], {\n color: 'transparent',\n weight: 10,\n opacity: 0,\n interactive: true,\n });\n\n (edgePolyline as PolydrawEdgePolyline)._polydrawEdgeInfo = {\n ringIndex,\n edgeIndex: i,\n startPoint: edgeStart,\n endPoint: edgeEnd,\n parentPolygon: polygon,\n parentFeatureGroup: featureGroup,\n };\n\n edgePolyline.on('click', (e: L.LeafletMouseEvent) => {\n this.onEdgeClick(e, edgePolyline);\n });\n\n edgePolyline.on('mouseover', () => {\n this.highlightEdgeOnHover(edgePolyline, true);\n });\n\n edgePolyline.on('mouseout', () => {\n this.highlightEdgeOnHover(edgePolyline, false);\n });\n\n featureGroup.addLayer(edgePolyline);\n }\n });\n }\n\n /**\n * Enable polygon dragging functionality\n */\n enablePolygonDragging(polygon: any, latlngs: Feature<Polygon | MultiPolygon>): void {\n // console.log('PolygonInteractionManager enablePolygonDragging');\n if (!this.config.modes.dragPolygons) return;\n\n polygon._polydrawOriginalLatLngs = latlngs;\n polygon._polydrawDragData = {\n isDragging: false,\n startPosition: null,\n startLatLngs: null,\n };\n\n polygon.on('mousedown', (e: any) => {\n // If not in off mode, it's a drawing click. Forward to map and stop.\n if (!this.modeManager.isInOffMode()) {\n // Stop this event from becoming a drag, but fire it on the map for drawing.\n L.DomEvent.stopPropagation(e);\n this.map.fire('mousedown', e);\n return;\n }\n\n if (!this.modeManager.canPerformAction('polygonDrag')) {\n return;\n }\n L.DomEvent.stopPropagation(e);\n L.DomEvent.preventDefault(e);\n\n const isModifierPressed = this.detectModifierKey(e.originalEvent || e);\n this.currentModifierDragMode = isModifierPressed;\n this.isModifierKeyHeld = isModifierPressed;\n\n polygon._polydrawDragData.isDragging = true;\n polygon._polydrawDragData.startPosition = e.latlng;\n polygon._polydrawDragData.startLatLngs = polygon.getLatLngs();\n\n if (this.map.dragging) {\n this.map.dragging.disable();\n }\n\n this.setSubtractVisualMode(polygon, isModifierPressed);\n\n try {\n const container = this.map.getContainer();\n container.style.cursor = this.config.dragPolygons.dragCursor || 'move';\n } catch (error) {\n // Handle DOM errors\n }\n\n this.map.on('mousemove', this.onPolygonMouseMove, this);\n this.map.on('mouseup', this.onPolygonMouseUp, this);\n\n this.currentDragPolygon = polygon;\n });\n\n polygon.on('mouseover', () => {\n if (!polygon._polydrawDragData.isDragging) {\n try {\n const container = this.map.getContainer();\n container.style.cursor = this.config.dragPolygons.hoverCursor || 'grab';\n } catch (error) {\n // Handle DOM errors\n }\n }\n });\n\n polygon.on('mouseout', () => {\n if (!polygon._polydrawDragData.isDragging) {\n try {\n const container = this.map.getContainer();\n container.style.cursor = '';\n } catch (error) {\n // Handle DOM errors\n }\n }\n });\n }\n\n /**\n * Update marker draggable state based on current mode\n */\n updateMarkerDraggableState(): void {\n // console.log('PolygonInteractionManager updateMarkerDraggableState');\n const shouldBeDraggable = this.modeManager.canPerformAction('markerDrag');\n\n this.getFeatureGroups().forEach((featureGroup) => {\n featureGroup.eachLayer((layer) => {\n if (layer instanceof L.Marker) {\n const marker = layer as L.Marker;\n try {\n // Update the draggable option\n marker.options.draggable = shouldBeDraggable;\n\n // If the marker has dragging capability, update its state\n if (marker.dragging) {\n if (shouldBeDraggable) {\n marker.dragging.enable();\n } else {\n marker.dragging.disable();\n }\n }\n } catch (error) {\n // Handle any errors in updating marker state\n }\n }\n });\n });\n }\n\n /**\n * Update all markers for edge deletion visual feedback\n */\n updateAllMarkersForEdgeDeletion(showFeedback: boolean): void {\n // console.log('PolygonInteractionManager updateAllMarkersForEdgeDeletion');\n this.getFeatureGroups().forEach((featureGroup) => {\n featureGroup.eachLayer((layer) => {\n if (layer instanceof L.Marker) {\n this.updateMarkerForEdgeDeletion(layer, showFeedback);\n }\n });\n });\n }\n\n /**\n * Update individual marker for edge deletion visual feedback\n */\n updateMarkerForEdgeDeletion(marker: L.Marker, showFeedback: boolean): void {\n // console.log('PolygonInteractionManager updateMarkerForEdgeDeletion');\n const element = marker.getElement();\n if (!element) return;\n\n if (showFeedback) {\n // Add hover listeners for edge deletion feedback\n element.addEventListener('mouseenter', this.onMarkerHoverForEdgeDeletionEvent);\n element.addEventListener('mouseleave', this.onMarkerLeaveForEdgeDeletionEvent);\n } else {\n // Remove hover listeners and reset style\n element.removeEventListener('mouseenter', this.onMarkerHoverForEdgeDeletionEvent);\n element.removeEventListener('mouseleave', this.onMarkerLeaveForEdgeDeletionEvent);\n element.style.backgroundColor = '';\n element.style.borderColor = '';\n }\n }\n\n /**\n * Set modifier key held state\n */\n setModifierKeyHeld(isHeld: boolean): void {\n // console.log('PolygonInteractionManager setModifierKeyHeld');\n this.isModifierKeyHeld = isHeld;\n }\n\n // Private methods\n\n private onEdgeClick(e: L.LeafletMouseEvent, edgePolyline: L.Polyline): void {\n // console.log('PolygonInteractionManager onEdgeClick');\n // Enforce the configuration setting for attaching elbows.\n if (!this.config.modes.attachElbow) {\n return;\n }\n if (!this.modeManager.isInOffMode()) {\n return;\n }\n const edgeInfo = (edgePolyline as PolydrawEdgePolyline)._polydrawEdgeInfo;\n if (!edgeInfo) return;\n const newPoint = e.latlng;\n const parentPolygon = edgeInfo.parentPolygon;\n const parentFeatureGroup = edgeInfo.parentFeatureGroup;\n if (parentPolygon && parentFeatureGroup) {\n try {\n if (typeof parentPolygon.toGeoJSON !== 'function') {\n return;\n }\n const poly = parentPolygon.toGeoJSON();\n if (poly.geometry.type === 'MultiPolygon' || poly.geometry.type === 'Polygon') {\n const newPolygon = this.turfHelper.injectPointToPolygon(poly, [\n newPoint.lng,\n newPoint.lat,\n ]);\n if (newPolygon) {\n const polydrawPolygon = parentPolygon as PolydrawPolygon;\n const optimizationLevel = polydrawPolygon._polydrawOptimizationLevel || 0;\n this.removeFeatureGroup(parentFeatureGroup);\n this.emit('polygonModified', {\n operation: 'addVertex',\n polygon: newPolygon,\n optimizationLevel,\n });\n }\n }\n } catch (error) {\n // Handle errors\n }\n }\n L.DomEvent.stopPropagation(e);\n }\n\n private highlightEdgeOnHover(edgePolyline: L.Polyline, isHovering: boolean): void {\n // console.log('PolygonInteractionManager highlightEdgeOnHover');\n if (isHovering) {\n edgePolyline.setStyle({\n color: '#7a9441',\n weight: 4,\n opacity: 1,\n });\n } else {\n edgePolyline.setStyle({\n color: 'transparent',\n weight: 10,\n opacity: 0,\n });\n }\n }\n\n private elbowClicked(e: any, poly: Feature<Polygon | MultiPolygon>): void {\n // console.log('PolygonInteractionManager elbowClicked');\n // Enforce the configuration setting for edge deletion.\n if (!this.config.modes.edgeDeletion) {\n return;\n }\n if (!this.isModifierKeyPressed(e.originalEvent)) {\n return;\n }\n\n const clickedLatLng = e.latlng;\n const allRings = poly.geometry.coordinates[0];\n\n let targetRingIndex = -1;\n let targetVertexIndex = -1;\n\n for (let ringIndex = 0; ringIndex < allRings.length; ringIndex++) {\n const ring = allRings[ringIndex];\n const vertexIndex = ring.findIndex(\n (coord) =>\n Math.abs(coord[1] - clickedLatLng.lat) < 0.0001 &&\n Math.abs(coord[0] - clickedLatLng.lng) < 0.0001,\n );\n\n if (vertexIndex !== -1) {\n targetRingIndex = ringIndex;\n targetVertexIndex = vertexIndex;\n break;\n }\n }\n\n if (targetRingIndex === -1 || targetVertexIndex === -1) {\n return;\n }\n\n const targetRing = allRings[targetRingIndex];\n if (targetRing.length <= 4) {\n return;\n }\n\n const newAllRings = allRings.map((ring, ringIndex) => {\n if (ringIndex === targetRingIndex) {\n const newRing = [...ring];\n newRing.splice(targetVertexIndex, 1);\n return newRing;\n } else {\n return [...ring];\n }\n });\n\n const currentFeatureGroup = this.findFeatureGroupForPoly(poly);\n if (currentFeatureGroup) {\n this.removeFeatureGroup(currentFeatureGroup);\n }\n\n const newPolygon = this.turfHelper.getMultiPolygon([newAllRings]);\n this.emit('polygonModified', {\n operation: 'removeVertex',\n polygon: newPolygon,\n });\n }\n\n private findFeatureGroupForPoly(poly: Feature<Polygon | MultiPolygon>): L.FeatureGroup | null {\n // console.log('PolygonInteractionManager findFeatureGroupForPoly');\n for (const featureGroup of this.getFeatureGroups()) {\n const featureCollection = featureGroup.toGeoJSON() as any;\n if (featureCollection && featureCollection.features && featureCollection.features[0]) {\n const feature = featureCollection.features[0];\n if (\n JSON.stringify(feature.geometry.coordinates) === JSON.stringify(poly.geometry.coordinates)\n ) {\n return featureGroup;\n }\n }\n }\n return null;\n }\n\n private markerDrag(featureGroup: L.FeatureGroup): void {\n // console.log('PolygonInteractionManager markerDrag');\n const newPos = [];\n let testarray = [];\n let hole = [];\n const layerLength = featureGroup.getLayers() as any;\n const posarrays = layerLength[0].getLatLngs();\n let length = 0;\n\n // Filter out only markers from the layers (exclude polylines for holes)\n const markers = layerLength.filter((layer: any) => layer instanceof L.Marker);\n\n if (posarrays.length > 1) {\n for (let index = 0; index < posarrays.length; index++) {\n testarray = [];\n hole = [];\n if (index === 0) {\n if (posarrays[0].length > 1) {\n for (let i = 0; i < posarrays[0].length; i++) {\n for (let j = 0; j < posarrays[0][i].length; j++) {\n if (markers[j]) {\n testarray.push(markers[j].getLatLng());\n }\n }\n hole.push(testarray);\n }\n } else {\n for (let j = 0; j < posarrays[0][0].length; j++) {\n if (markers[j]) {\n testarray.push(markers[j].getLatLng());\n }\n }\n hole.push(testarray);\n }\n newPos.push(hole);\n } else {\n length += posarrays[index - 1][0].length;\n for (let j = length; j < posarrays[index][0].length + length; j++) {\n if (markers[j]) {\n testarray.push(markers[j].getLatLng());\n }\n }\n hole.push(testarray);\n newPos.push(hole);\n }\n }\n } else {\n hole = [];\n let length2 = 0;\n for (let index = 0; index < posarrays[0].length; index++) {\n testarray = [];\n if (index === 0) {\n if (posarrays[0][index].length > 1) {\n for (let j = 0; j < posarrays[0][index].length; j++) {\n if (markers[j]) {\n testarray.push(markers[j].getLatLng());\n }\n }\n } else {\n for (let j = 0; j < posarrays[0][0].length; j++) {\n if (markers[j]) {\n testarray.push(markers[j].getLatLng());\n }\n }\n }\n } else {\n length2 += posarrays[0][index - 1].length;\n for (let j = length2; j < posarrays[0][index].length + length2; j++) {\n if (markers[j]) {\n testarray.push(markers[j].getLatLng());\n }\n }\n }\n hole.push(testarray);\n }\n newPos.push(hole);\n }\n layerLength[0].setLatLngs(newPos);\n }\n\n private async markerDragEnd(featureGroup: L.FeatureGroup): Promise<void> {\n // console.log('PolygonInteractionManager markerDragEnd');\n this.polygonInformation.deletePolygonInformationStorage();\n const featureCollection = featureGroup.toGeoJSON() as any;\n\n // Remove the current feature group first to avoid duplication\n this.removeFeatureGroup(featureGroup);\n\n if (featureCollection.features[0].geometry.coordinates.length > 1) {\n for (const element of featureCollection.features[0].geometry.coordinates) {\n const feature = this.turfHelper.getMultiPolygon([element]);\n\n if (this.turfHelper.hasKinks(feature)) {\n const unkink = this.turfHelper.getKinks(feature);\n for (const polygon of unkink) {\n // Allow merging after marker drag - this enables polygon merging when dragged into each other\n this.emit('polygonModified', {\n operation: 'markerDrag',\n polygon: this.turfHelper.getTurfPolygon(polygon),\n allowMerge: true,\n });\n }\n } else {\n // Allow merging after marker drag - this enables polygon merging when dragged into each other\n this.emit('polygonModified', {\n operation: 'markerDrag',\n polygon: feature,\n allowMerge: true,\n });\n }\n }\n } else {\n const feature = this.turfHelper.getMultiPolygon(\n featureCollection.features[0].geometry.coordinates,\n );\n\n if (this.turfHelper.hasKinks(feature)) {\n const unkink = this.turfHelper.getKinks(feature);\n for (const polygon of unkink) {\n // Allow merging after marker drag - this enables polygon merging when dragged into each other\n this.emit('polygonModified', {\n operation: 'markerDrag',\n polygon: this.turfHelper.getTurfPolygon(polygon),\n allowMerge: true,\n });\n }\n } else {\n // Allow merging after marker drag - this enables polygon merging when dragged into each other\n this.emit('polygonModified', {\n operation: 'markerDrag',\n polygon: feature,\n allowMerge: true,\n });\n }\n }\n this.polygonInformation.createPolygonInformationStorage(this.getFeatureGroups());\n }\n\n // Polygon dragging methods\n private onPolygonMouseMove = (e: L.LeafletMouseEvent) => {\n // console.log('PolygonInteractionManager onPolygonMouseMove');\n if (!this.currentDragPolygon || !this.currentDragPolygon._polydrawDragData.isDragging) return;\n\n const polygon = this.currentDragPolygon;\n const dragData = polygon._polydrawDragData;\n\n const eventToCheck = e.originalEvent && 'metaKey' in e.originalEvent ? e.originalEvent : e;\n const currentModifierState = this.detectModifierKey(eventToCheck as MouseEvent);\n if (currentModifierState !== this.currentModifierDragMode) {\n this.handleModifierToggleDuringDrag(eventToCheck as MouseEvent);\n }\n\n const startPos = dragData.startPosition;\n const currentPos = e.latlng;\n const offsetLat = currentPos.lat - startPos.lat;\n const offsetLng = currentPos.lng - startPos.lng;\n\n const newLatLngs = this.offsetPolygonCoordinates(dragData.startLatLngs, offsetLat, offsetLng);\n polygon.setLatLngs(newLatLngs);\n\n this.updateMarkersAndHoleLinesDuringDrag(polygon, offsetLat, offsetLng);\n };\n\n private onPolygonMouseUp = (e: L.LeafletMouseEvent) => {\n // console.log('PolygonInteractionManager onPolygonMouseUp');\n if (!this.currentDragPolygon || !this.currentDragPolygon._polydrawDragData.isDragging) return;\n\n const polygon = this.currentDragPolygon;\n const dragData = polygon._polydrawDragData;\n\n dragData.isDragging = false;\n\n this.map.off('mousemove', this.onPolygonMouseMove, this);\n this.map.off('mouseup', this.onPolygonMouseUp, this);\n\n if (this.map.dragging) {\n this.map.dragging.enable();\n }\n\n try {\n const container = this.map.getContainer();\n container.style.cursor = '';\n } catch (error) {\n // Handle DOM errors\n }\n\n this.updatePolygonAfterDrag(polygon);\n\n if (polygon._polydrawOriginalMarkerPositions) {\n polygon._polydrawOriginalMarkerPositions.clear();\n delete polygon._polydrawOriginalMarkerPositions;\n }\n if (polygon._polydrawOriginalHoleLinePositions) {\n polygon._polydrawOriginalHoleLinePositions.clear();\n delete polygon._polydrawOriginalHoleLinePositions;\n }\n if (polygon._polydrawCurrentDragSession) {\n delete polygon._polydrawCurrentDragSession;\n }\n\n this.currentDragPolygon = null;\n };\n\n private offsetPolygonCoordinates(latLngs: any, offsetLat: number, offsetLng: number): any {\n // console.log('PolygonInteractionManager offsetPolygonCoordinates');\n if (!latLngs) return latLngs;\n\n if (Array.isArray(latLngs[0])) {\n return latLngs.map((ring: any) => this.offsetPolygonCoordinates(ring, offsetLat, offsetLng));\n } else if (latLngs.lat !== undefined && latLngs.lng !== undefined) {\n return {\n lat: latLngs.lat + offsetLat,\n lng: latLngs.lng + offsetLng,\n };\n } else {\n return latLngs.map((coord: any) =>\n this.offsetPolygonCoordinates(coord, offsetLat, offsetLng),\n );\n }\n }\n\n private updateMarkersAndHoleLinesDuringDrag(\n polygon: any,\n offsetLat: number,\n offsetLng: number,\n ): void {\n // console.log('PolygonInteractionManager updateMarkersAndHoleLinesDuringDrag');\n try {\n let featureGroup: L.FeatureGroup | null = null;\n\n // Find the specific feature group that contains this exact polygon\n for (const fg of this.getFeatureGroups()) {\n let foundPolygon = false;\n fg.eachLayer((layer) => {\n if (layer === polygon) {\n foundPolygon = true;\n }\n });\n if (foundPolygon) {\n featureGroup = fg;\n break;\n }\n }\n\n if (!featureGroup) {\n return;\n }\n\n // Ensure this drag session is unique to this specific polygon\n const dragSessionKey = '_polydrawDragSession_' + Date.now() + '_' + L.Util.stamp(polygon);\n if (!polygon._polydrawCurrentDragSession) {\n polygon._polydrawCurrentDragSession = dragSessionKey;\n polygon._polydrawOriginalMarkerPositions = new Map();\n polygon._polydrawOriginalHoleLinePositions = new Map();\n\n // Only store markers and lines that belong to THIS specific feature group\n featureGroup.eachLayer((layer) => {\n if (layer instanceof L.Marker) {\n polygon._polydrawOriginalMarkerPositions.set(layer, layer.getLatLng());\n } else if (layer instanceof L.Polyline && !(layer instanceof L.Polygon)) {\n polygon._polydrawOriginalHoleLinePositions.set(layer, layer.getLatLngs());\n }\n });\n }\n\n // Only update markers and lines that belong to THIS specific feature group\n // and that were stored in the original positions map\n featureGroup.eachLayer((layer) => {\n if (layer instanceof L.Marker) {\n const originalPos = polygon._polydrawOriginalMarkerPositions.get(layer);\n if (originalPos) {\n const newLatLng = {\n lat: originalPos.lat + offsetLat,\n lng: originalPos.lng + offsetLng,\n };\n layer.setLatLng(newLatLng);\n }\n } else if (layer instanceof L.Polyline && !(layer instanceof L.Polygon)) {\n const originalPositions = polygon._polydrawOriginalHoleLinePositions.get(layer);\n if (originalPositions) {\n const newLatLngs = originalPositions.map((latlng: L.LatLng) => ({\n lat: latlng.lat + offsetLat,\n lng: latlng.lng + offsetLng,\n }));\n layer.setLatLngs(newLatLngs);\n }\n }\n });\n } catch (error) {\n // Silently handle errors\n console.warn('Error updating markers during drag:', error);\n }\n }\n\n private async updatePolygonAfterDrag(polygon: any): Promise<void> {\n // console.log('PolygonInteractionManager updatePolygonAfterDrag');\n try {\n let featureGroup: L.FeatureGroup | null = null;\n\n for (const fg of this.getFeatureGroups()) {\n fg.eachLayer((layer) => {\n if (layer === polygon) {\n featureGroup = fg;\n }\n });\n if (featureGroup) break;\n }\n\n if (!featureGroup) {\n return;\n }\n\n const newGeoJSON = polygon.toGeoJSON();\n\n if (this.isModifierDragActive()) {\n this.performModifierSubtract(newGeoJSON, featureGroup);\n this.currentModifierDragMode = false;\n this.isModifierKeyHeld = false;\n return;\n }\n\n this.removeFeatureGroup(featureGroup);\n\n const feature = this.turfHelper.getTurfPolygon(newGeoJSON);\n this.emit('polygonModified', {\n operation: 'polygonDrag',\n polygon: feature,\n allowMerge: true,\n });\n\n this.polygonInformation.createPolygonInformationStorage(this.getFeatureGroups());\n } catch (error) {\n // Handle errors\n }\n }\n\n private detectModifierKey(event: MouseEvent | KeyboardEvent): boolean {\n // console.log('PolygonInteractionManager detectModifierKey');\n if (!this.config.dragPolygons?.modifierSubtract?.enabled) {\n return false;\n }\n\n const userAgent = navigator.userAgent.toLowerCase();\n const isMac = userAgent.includes('mac');\n\n if (isMac) {\n return event.metaKey;\n } else {\n return event.ctrlKey;\n }\n }\n\n private setSubtractVisualMode(polygon: any, enabled: boolean): void {\n // console.log('PolygonInteractionManager setSubtractVisualMode');\n if (!polygon || !polygon.setStyle) {\n return;\n }\n\n try {\n if (enabled) {\n polygon.setStyle({\n color: this.config.dragPolygons.modifierSubtract.subtractColor,\n });\n } else {\n polygon.setStyle({\n color: this.config.polygonOptions.color,\n });\n }\n this.updateMarkerColorsForSubtractMode(polygon, enabled);\n } catch (error) {\n // Handle DOM errors\n }\n }\n\n private updateMarkerColorsForSubtractMode(polygon: any, subtractMode: boolean): void {\n // console.log('PolygonInteractionManager updateMarkerColorsForSubtractMode');\n try {\n let featureGroup: L.FeatureGroup | null = null;\n\n for (const fg of this.getFeatureGroups()) {\n fg.eachLayer((layer) => {\n if (layer === polygon) {\n featureGroup = fg;\n }\n });\n if (featureGroup) break;\n }\n\n if (!featureGroup) {\n return;\n }\n\n const hideMarkersOnDrag =\n this.config.dragPolygons?.modifierSubtract?.hideMarkersOnDrag ?? false;\n\n featureGroup.eachLayer((layer) => {\n if (layer instanceof L.Marker) {\n const marker = layer as L.Marker;\n const element = marker.getElement();\n\n if (element) {\n if (subtractMode) {\n if (hideMarkersOnDrag) {\n element.style.display = 'none';\n element.classList.add('subtract-mode-hidden');\n } else {\n element.style.backgroundColor =\n this.config.dragPolygons.modifierSubtract.subtractColor;\n element.style.borderColor = this.config.dragPolygons.modifierSubtract.subtractColor;\n element.classList.add('subtract-mode');\n }\n } else {\n if (hideMarkersOnDrag) {\n element.style.display = '';\n element.classList.remove('subtract-mode-hidden');\n } else {\n element.style.backgroundColor = '';\n element.style.borderColor = '';\n element.classList.remove('subtract-mode');\n }\n }\n }\n }\n });\n } catch (error) {\n // Handle errors\n }\n }\n\n private handleModifierToggleDuringDrag(event: MouseEvent): void {\n // console.log('PolygonInteractionManager handleModifierToggleDuringDrag');\n const isModifierPressed = this.detectModifierKey(event);\n\n this.currentModifierDragMode = isModifierPressed;\n this.isModifierKeyHeld = isModifierPressed;\n\n if (this.currentDragPolygon) {\n this.setSubtractVisualMode(this.currentDragPolygon, isModifierPressed);\n }\n }\n\n private isModifierDragActive(): boolean {\n // console.log('PolygonInteractionManager isModifierDragActive');\n return this.currentModifierDragMode;\n }\n\n private performModifierSubtract(draggedGeoJSON: any, originalFeatureGroup: L.FeatureGroup): void {\n // console.log('PolygonInteractionManager performModifierSubtract');\n try {\n const draggedPolygon = this.turfHelper.getTurfPolygon(draggedGeoJSON);\n const intersectingFeatureGroups: L.FeatureGroup[] = [];\n\n // Find all feature groups that intersect with the dragged polygon\n this.getFeatureGroups().forEach((featureGroup) => {\n if (featureGroup === originalFeatureGroup) {\n return;\n }\n\n try {\n const featureCollection = featureGroup.toGeoJSON() as any;\n if (!featureCollection || !featureCollection.features || !featureCollection.features[0]) {\n return;\n }\n\n const firstFeature = featureCollection.features[0];\n if (!firstFeature.geometry || !firstFeature.geometry.coordinates) {\n return;\n }\n\n const existingPolygon = this.turfHelper.getTurfPolygon(firstFeature);\n\n // Check intersection directly using geometry operations\n try {\n const intersection = this.turfHelper.getIntersection(existingPolygon, draggedPolygon);\n if (\n intersection &&\n intersection.geometry &&\n intersection.geometry.coordinates.length > 0\n ) {\n intersectingFeatureGroups.push(featureGroup);\n }\n } catch (intersectError) {\n // If intersection fails, try the polygonIntersect method\n try {\n const hasIntersection = this.turfHelper.polygonIntersect(\n existingPolygon,\n draggedPolygon,\n );\n if (hasIntersection) {\n intersectingFeatureGroups.push(featureGroup);\n }\n } catch (polygonIntersectError) {\n // Continue with other polygons\n }\n }\n } catch (error) {\n // Handle errors\n }\n });\n\n // Remove the original dragged polygon first\n this.removeFeatureGroup(originalFeatureGroup);\n\n // For each intersecting polygon, subtract the dragged polygon from it\n // This creates the \"bite taken\" effect\n intersectingFeatureGroups.forEach((featureGroup) => {\n try {\n const featureCollection = featureGroup.toGeoJSON() as any;\n const existingPolygon = this.turfHelper.getTurfPolygon(featureCollection.features[0]);\n\n // Remove the existing polygon before creating the result\n this.removeFeatureGroup(featureGroup);\n\n // Perform the subtraction: existing polygon - dragged polygon\n try {\n const difference = this.turfHelper.polygonDifference(existingPolygon, draggedPolygon);\n\n if (difference && difference.geometry) {\n // Use the same approach as regular subtract: create separate polygons for each result\n // Get the coordinates and create individual polygons\n const coords = this.turfHelper.getCoords(difference);\n\n // Create separate polygons for each coordinate set (like regular subtract does)\n for (const coordSet of coords) {\n const individualPolygon = this.turfHelper.getMultiPolygon([coordSet]);\n\n // Emit each result polygon separately to ensure they get separate feature groups\n this.emit('polygonModified', {\n operation: 'modifierSubtract',\n polygon: this.turfHelper.getTurfPolygon(individualPolygon),\n allowMerge: false, // Don't merge the result of subtract operations\n });\n }\n }\n } catch (differenceError) {\n console.warn('Failed to perform difference operation:', differenceError);\n // If difference fails, try to add the original polygon back\n this.emit('polygonModified', {\n operation: 'modifierSubtractFallback',\n polygon: existingPolygon,\n allowMerge: false,\n });\n }\n } catch (error) {\n console.warn('Error in modifier subtract operation:', error);\n }\n });\n\n // Update polygon information after the operation\n this.polygonInformation.createPolygonInformationStorage(this.getFeatureGroups());\n } catch (error) {\n console.warn('Error in performModifierSubtract:', error);\n }\n }\n\n /**\n * Check if two bounding boxes overlap\n */\n private boundingBoxesOverlap(bbox1: number[], bbox2: number[]): boolean {\n // bbox format: [minX, minY, maxX, maxY]\n return !(\n bbox1[2] < bbox2[0] ||\n bbox2[2] < bbox1[0] ||\n bbox1[3] < bbox2[1] ||\n bbox2[3] < bbox1[1]\n );\n }\n\n private isModifierKeyPressed(event: MouseEvent): boolean {\n // console.log('PolygonInteractionManager isModifierKeyPressed');\n const userAgent = navigator.userAgent.toLowerCase();\n const isMac = userAgent.includes('mac');\n\n if (isMac) {\n return event.metaKey;\n } else {\n return event.ctrlKey;\n }\n }\n\n private onMarkerHoverForEdgeDeletion(marker: L.Marker, isHovering: boolean): void {\n // console.log('PolygonInteractionManager onMarkerHoverForEdgeDeletion');\n const element = marker.getElement();\n if (!element) return;\n\n if (isHovering) {\n // Add event listeners to detect modifier key state in real-time\n const checkModifierAndUpdate = (e: KeyboardEvent | MouseEvent) => {\n const isModifierPressed = this.detectModifierKey(e);\n if (isModifierPressed) {\n element.style.backgroundColor =\n this.config.dragPolygons?.modifierSubtract?.subtractColor || '#D9460F';\n element.style.borderColor =\n this.config.dragPolygons?.modifierSubtract?.subtractColor || '#D9460F';\n element.classList.add('edge-deletion-hover');\n // Set cursor to pointer when modifier key is held over marker\n try {\n const container = this.map.getContainer();\n container.style.cursor = 'pointer';\n } catch (error) {\n // Handle DOM errors\n }\n } else {\n element.style.backgroundColor = '';\n element.style.borderColor = '';\n element.classList.remove('edge-deletion-hover');\n // Reset cursor when no modifier key\n try {\n const container = this.map.getContainer();\n container.style.cursor = '';\n } catch (error) {\n // Handle DOM errors\n }\n }\n };\n\n // Check initial state\n const initialEvent = new MouseEvent('mouseover');\n checkModifierAndUpdate(initialEvent);\n\n // Store the handler for cleanup\n (marker as any)._polydrawModifierHandler = checkModifierAndUpdate;\n\n // Listen for keyboard events to update in real-time\n document.addEventListener('keydown', checkModifierAndUpdate);\n document.addEventListener('keyup', checkModifierAndUpdate);\n element.addEventListener('mousemove', checkModifierAndUpdate);\n } else {\n // Clean up when not hovering\n element.style.backgroundColor = '';\n element.style.borderColor = '';\n element.classList.remove('edge-deletion-hover');\n\n // Reset cursor\n try {\n const container = this.map.getContainer();\n container.style.cursor = '';\n } catch (error) {\n // Handle DOM errors\n }\n\n // Remove event listeners\n const handler = (marker as any)._polydrawModifierHandler;\n if (handler) {\n document.removeEventListener('keydown', handler);\n document.removeEventListener('keyup', handler);\n element.removeEventListener('mousemove', handler);\n delete (marker as any)._polydrawModifierHandler;\n }\n }\n }\n\n private onMarkerHoverForEdgeDeletionEvent = (e: Event) => {\n // console.log('PolygonInteractionManager onMarkerHoverForEdgeDeletionEvent');\n if (!this.isModifierKeyHeld) return;\n\n const element = e.target as HTMLElement;\n if (element) {\n element.style.backgroundColor = '#D9460F';\n element.style.borderColor = '#D9460F';\n element.classList.add('edge-deletion-hover');\n }\n };\n\n private onMarkerLeaveForEdgeDeletionEvent = (e: Event) => {\n // console.log('PolygonInteractionManager onMarkerLeaveForEdgeDeletionEvent');\n const element = e.target as HTMLElement;\n if (element) {\n element.style.backgroundColor = '';\n element.style.borderColor = '';\n element.classList.remove('edge-deletion-hover');\n }\n };\n\n // Helper methods\n private getMarkerIndex(latlngs: L.LatLngLiteral[], position: MarkerPosition): number {\n // console.log('PolygonInteractionManager getMarkerIndex');\n const bounds: L.LatLngBounds = PolyDrawUtil.getBounds(latlngs, Math.sqrt(2) / 2);\n const compass = new Compass(\n bounds.getSouth(),\n bounds.getWest(),\n bounds.getNorth(),\n bounds.getEast(),\n );\n const compassDirection = compass.getDirection(position);\n const latLngPoint: L.LatLngLiteral = {\n lat: compassDirection.lat,\n lng: compassDirection.lng,\n };\n const targetPoint = this.turfHelper.getCoord(latLngPoint);\n const fc = this.turfHelper.getFeaturePointCollection(latlngs);\n const nearestPointIdx = this.turfHelper.getNearestPointIndex(targetPoint, fc as any);\n return nearestPointIdx;\n }\n\n private ensureMarkerSeparation(\n polygonLength: number,\n markers: {\n menu: { index: number; enabled: boolean };\n delete: { index: number; enabled: boolean };\n info: { index: number; enabled: boolean };\n },\n ): { menu: number; delete: number; info: number } {\n // console.log('PolygonInteractionManager ensureMarkerSeparation');\n // Get list of enabled markers with their indices\n const enabledMarkers: Array<{ type: string; index: number }> = [];\n\n if (markers.menu.enabled) {\n enabledMarkers.push({ type: 'menu', index: markers.menu.index });\n }\n if (markers.delete.enabled) {\n enabledMarkers.push({ type: 'delete', index: markers.delete.index });\n }\n if (markers.info.enabled) {\n enabledMarkers.push({ type: 'info', index: markers.info.index });\n }\n\n // If less than 2 markers enabled, no overlap possible\n if (enabledMarkers.length < 2) {\n return {\n menu: markers.menu.index,\n delete: markers.delete.index,\n info: markers.info.index,\n };\n }\n\n // Check for overlaps and resolve them\n const resolvedIndices = { ...markers };\n const usedIndices = new Set<number>();\n\n // Process markers in priority order: info, delete, menu\n const processingOrder = ['info', 'delete', 'menu'];\n\n for (const markerType of processingOrder) {\n const marker = resolvedIndices[markerType as keyof typeof resolvedIndices];\n\n if (!marker.enabled) continue;\n\n // If this index is already used, find a new one\n if (usedIndices.has(marker.index)) {\n const newIndex = this.findAlternativeMarkerPosition(\n polygonLength,\n marker.index,\n usedIndices,\n );\n resolvedIndices[markerType as keyof typeof resolvedIndices].index = newIndex;\n usedIndices.add(newIndex);\n } else {\n usedIndices.add(marker.index);\n }\n }\n\n return {\n menu: resolvedIndices.menu.index,\n delete: resolvedIndices.delete.index,\n info: resolvedIndices.info.index,\n };\n }\n\n private findAlternativeMarkerPosition(\n polygonLength: number,\n originalIndex: number,\n usedIndices: Set<number>,\n ): number {\n // console.log('PolygonInteractionManager findAlternativeMarkerPosition');\n // Strategy: Try positions at regular intervals around the polygon\n // Start with positions that are far from the original\n const maxAttempts = polygonLength;\n const step = Math.max(1, Math.floor(polygonLength / 8)); // Try every 1/8th of polygon\n\n // Try positions moving away from the original index\n for (let attempt = 1; attempt < maxAttempts; attempt++) {\n // Try both directions from original position\n const candidates = [\n (originalIndex + attempt * step) % polygonLength,\n (originalIndex - attempt * step + polygonLength) % polygonLength,\n ];\n\n for (const candidate of candidates) {\n if (!usedIndices.has(candidate)) {\n return candidate;\n }\n }\n }\n\n // Fallback: find any unused index\n for (let i = 0; i < polygonLength; i++) {\n if (!usedIndices.has(i)) {\n return i;\n }\n }\n\n // Ultimate fallback: return original index (shouldn't happen in practice)\n return originalIndex;\n }\n\n private createDivIcon(processedClasses: string[]): L.DivIcon {\n // console.log('PolygonInteractionManager createDivIcon');\n return IconFactory.createDivIcon(processedClasses);\n }\n\n private getLatLngInfoString(latlng: L.LatLngLiteral): string {\n // console.log('PolygonInteractionManager getLatLngInfoString');\n return 'Latitude: ' + latlng.lat + ' Longitude: ' + latlng.lng;\n }\n\n private generateMenuMarkerPopup(\n latLngs: L.LatLngLiteral[],\n featureGroup: L.FeatureGroup,\n ): HTMLDivElement {\n // console.log('PolygonInteractionManager generateMenuMarkerPopup');\n const outerWrapper: HTMLDivElement = document.createElement('div');\n outerWrapper.classList.add('alter-marker-outer-wrapper');\n const wrapper: HTMLDivElement = document.createElement('div');\n wrapper.classList.add('alter-marker-wrapper');\n const invertedCorner: HTMLElement = document.createElement('i');\n invertedCorner.classList.add('inverted-corner');\n const markerContent: HTMLDivElement = document.createElement('div');\n markerContent.classList.add('content');\n const markerContentWrapper: HTMLDivElement = document.createElement('div');\n markerContentWrapper.classList.add('marker-menu-content');\n\n const simplify: HTMLDivElement = document.createElement('div');\n simplify.classList.add('marker-menu-button', 'simplify');\n simplify.title = 'Simplify';\n\n const doubleElbows: HTMLDivElement = document.createElement('div');\n doubleElbows.classList.add('marker-menu-button', 'double-elbows');\n doubleElbows.title = 'DoubleElbows';\n\n const bbox: HTMLDivElement = document.createElement('div');\n bbox.classList.add('marker-menu-button', 'bbox');\n bbox.title = 'Bounding box';\n\n const bezier: HTMLDivElement = document.createElement('div');\n bezier.classList.add('marker-menu-button', 'bezier');\n bezier.title = 'Curve';\n\n const separator: HTMLDivElement = document.createElement('div');\n separator.classList.add('separator');\n\n outerWrapper.appendChild(wrapper);\n wrapper.appendChild(invertedCorner);\n wrapper.appendChild(markerContent);\n markerContent.appendChild(markerContentWrapper);\n markerContentWrapper.appendChild(simplify);\n markerContentWrapper.appendChild(separator.cloneNode());\n markerContentWrapper.appendChild(doubleElbows);\n markerContentWrapper.appendChild(separator.cloneNode());\n markerContentWrapper.appendChild(bbox);\n markerContentWrapper.appendChild(separator.cloneNode());\n markerContentWrapper.appendChild(bezier);\n\n simplify.onclick = () => {\n this.emit('menuAction', { action: 'simplify', latLngs, featureGroup });\n };\n bbox.onclick = () => {\n this.emit('menuAction', { action: 'bbox', latLngs, featureGroup });\n };\n doubleElbows.onclick = () => {\n this.emit('menuAction', { action: 'doubleElbows', latLngs, featureGroup });\n };\n bezier.onclick = () => {\n this.emit('menuAction', { action: 'bezier', latLngs, featureGroup });\n };\n\n return outerWrapper;\n }\n\n private getPolygonGeoJSONFromFeatureGroup(\n featureGroup: L.FeatureGroup,\n ): Feature<Polygon | MultiPolygon> {\n // console.log('PolygonInteractionManager getPolygonGeoJSONFromFeatureGroup');\n try {\n // Find the polygon layer in the feature group\n let polygon: L.Polygon | null = null;\n featureGroup.eachLayer((layer) => {\n if (layer instanceof L.Polygon) {\n polygon = layer;\n }\n });\n\n if (!polygon) {\n // Fallback: create a simple polygon from the first ring\n throw new Error('No polygon found in feature group');\n }\n\n // Get the complete GeoJSON including holes\n return polygon.toGeoJSON() as Feature<Polygon | MultiPolygon>;\n } catch (error) {\n console.warn('Error getting polygon GeoJSON from feature group:', error.message);\n // Fallback: return a simple polygon\n return {\n type: 'Feature',\n geometry: {\n type: 'Polygon',\n coordinates: [\n [\n [0, 0],\n [0, 1],\n [1, 1],\n [1, 0],\n [0, 0],\n ],\n ],\n },\n properties: {},\n };\n }\n }\n\n private getTotalPolygonPerimeter(polygonGeoJSON: Feature<Polygon | MultiPolygon>): number {\n // console.log('PolygonInteractionManager getTotalPolygonPerimeter');\n try {\n if (!polygonGeoJSON || !polygonGeoJSON.geometry) {\n return 0;\n }\n\n let totalPerimeter = 0;\n\n if (polygonGeoJSON.geometry.type === 'Polygon') {\n // For a single polygon, sum all ring perimeters\n const coordinates = polygonGeoJSON.geometry.coordinates;\n\n for (const ring of coordinates) {\n // Create a temporary polygon for each ring to calculate its perimeter\n const ringPolygon: Feature<Polygon> = {\n type: 'Feature',\n geometry: {\n type: 'Polygon',\n coordinates: [ring],\n },\n properties: {},\n };\n\n const ringPerimeter = this.turfHelper.getPolygonPerimeter(ringPolygon);\n totalPerimeter += ringPerimeter;\n }\n } else if (polygonGeoJSON.geometry.type === 'MultiPolygon') {\n // For multipolygon, sum all polygons' total perimeters\n const coordinates = polygonGeoJSON.geometry.coordinates;\n\n for (const polygonCoords of coordinates) {\n for (const ring of polygonCoords) {\n const ringPolygon: Feature<Polygon> = {\n type: 'Feature',\n geometry: {\n type: 'Polygon',\n coordinates: [ring],\n },\n properties: {},\n };\n\n const ringPerimeter = this.turfHelper.getPolygonPerimeter(ringPolygon);\n totalPerimeter += ringPerimeter;\n }\n }\n }\n\n // Convert from kilometers to meters to match original behavior\n return totalPerimeter * 1000;\n } catch (error) {\n console.warn('Error calculating total polygon perimeter:', error.message);\n // Fallback to turf helper calculation\n return this.turfHelper.getPolygonPerimeter(polygonGeoJSON) * 1000;\n }\n }\n\n private generateInfoMarkerPopup(area: number, perimeter: number): HTMLDivElement {\n // console.log('PolygonInteractionManager generateInfoMarkerPopup');\n const _perimeter = new Perimeter(perimeter, this.config as any);\n const _area = new Area(area, this.config as any);\n\n const outerWrapper: HTMLDivElement = document.createElement('div');\n outerWrapper.classList.add('info-marker-outer-wrapper');\n const wrapper: HTMLDivElement = document.createElement('div');\n wrapper.classList.add('info-marker-wrapper');\n const invertedCorner: HTMLElement = document.createElement('i');\n invertedCorner.classList.add('inverted-corner');\n const markerContent: HTMLDivElement = document.createElement('div');\n markerContent.classList.add('content');\n\n // Create content wrapper for the info\n const infoContentWrapper: HTMLDivElement = document.createElement('div');\n infoContentWrapper.classList.add('info-marker-content');\n\n // Add area information\n const areaDiv: HTMLDivElement = document.createElement('div');\n areaDiv.classList.add('info-item', 'area');\n areaDiv.innerHTML = `<strong>Area:</strong> ${_area.metricArea} ${_area.metricUnit}`;\n\n // Add perimeter information\n const perimeterDiv: HTMLDivElement = document.createElement('div');\n perimeterDiv.classList.add('info-item', 'perimeter');\n perimeterDiv.innerHTML = `<strong>Perimeter:</strong> ${_perimeter.metricLength} ${_perimeter.metricUnit}`;\n\n // Assemble the popup\n infoContentWrapper.appendChild(areaDiv);\n infoContentWrapper.appendChild(perimeterDiv);\n markerContent.appendChild(infoContentWrapper);\n\n outerWrapper.appendChild(wrapper);\n wrapper.appendChild(invertedCorner);\n wrapper.appendChild(markerContent);\n\n return outerWrapper;\n }\n}\n","import * as L from 'leaflet';\nimport { TurfHelper } from '../turf-helper';\nimport { PolygonInformationService } from '../polygon-information.service';\nimport type { Feature, Polygon, MultiPolygon } from 'geojson';\nimport type { PolydrawConfig } from '../types/polydraw-interfaces';\nimport { ModeManager } from './mode-manager';\n\n// Import the specialized managers\nimport { PolygonGeometryManager, GeometryOperationResult } from './polygon-geometry-manager';\nimport { PolygonDrawManager, DrawResult } from './polygon-draw-manager';\nimport { PolygonInteractionManager, InteractionResult } from './polygon-interaction-manager';\n\nexport interface MutationResult {\n success: boolean;\n featureGroups?: L.FeatureGroup[];\n error?: string;\n}\n\nexport interface AddPolygonOptions {\n simplify?: boolean;\n noMerge?: boolean;\n dynamicTolerance?: boolean;\n visualOptimizationLevel?: number;\n}\n\nexport interface MutationManagerDependencies {\n turfHelper: TurfHelper;\n polygonInformation: PolygonInformationService;\n map: L.Map;\n config: PolydrawConfig;\n modeManager: ModeManager;\n getFeatureGroups: () => L.FeatureGroup[];\n}\n\n/**\n * PolygonMutationManager acts as a facade that coordinates between specialized managers.\n * It maintains the arrayOfFeatureGroups as the single source of truth and delegates\n * operations to the appropriate specialized managers.\n */\nexport class PolygonMutationManager {\n private turfHelper: TurfHelper;\n private polygonInformation: PolygonInformationService;\n private map: L.Map;\n private config: PolydrawConfig;\n private modeManager: ModeManager;\n private getFeatureGroups: () => L.FeatureGroup[];\n private eventListeners: Map<string, ((...args: any[]) => void)[]> = new Map();\n\n // Specialized managers\n private geometryManager: PolygonGeometryManager;\n private drawManager: PolygonDrawManager;\n private interactionManager: PolygonInteractionManager;\n\n constructor(dependencies: MutationManagerDependencies) {\n // console.log('PolygonMutationManager constructor');\n this.turfHelper = dependencies.turfHelper;\n this.polygonInformation = dependencies.polygonInformation;\n this.map = dependencies.map;\n this.config = dependencies.config;\n this.modeManager = dependencies.modeManager;\n this.getFeatureGroups = dependencies.getFeatureGroups;\n\n // Initialize specialized managers\n this.initializeSpecializedManagers(dependencies);\n }\n\n /**\n * Initialize the three specialized managers\n */\n private initializeSpecializedManagers(dependencies: MutationManagerDependencies): void {\n // console.log('PolygonMutationManager initializeSpecializedManagers');\n\n // Create geometry manager\n this.geometryManager = new PolygonGeometryManager({\n turfHelper: dependencies.turfHelper,\n config: dependencies.config,\n });\n\n // Create draw manager (will be initialized when tracer is available)\n // For now, we'll create it with a placeholder tracer\n const placeholderTracer = L.polyline([], this.config.polyLineOptions);\n this.drawManager = new PolygonDrawManager({\n turfHelper: dependencies.turfHelper,\n map: dependencies.map,\n config: dependencies.config,\n modeManager: dependencies.modeManager,\n tracer: placeholderTracer,\n });\n\n // Create interaction manager with feature group access\n this.interactionManager = new PolygonInteractionManager(\n {\n turfHelper: dependencies.turfHelper,\n polygonInformation: dependencies.polygonInformation,\n map: dependencies.map,\n config: dependencies.config,\n modeManager: dependencies.modeManager,\n },\n {\n getFeatureGroups: this.getFeatureGroups,\n addFeatureGroup: (fg: L.FeatureGroup) => this.addFeatureGroupInternal(fg),\n removeFeatureGroup: (fg: L.FeatureGroup) => this.removeFeatureGroupInternal(fg),\n },\n );\n\n // Set up event forwarding from specialized managers\n this.setupEventForwarding();\n }\n\n /**\n * Set up event forwarding from specialized managers to facade\n */\n private setupEventForwarding(): void {\n // console.log('PolygonMutationManager setupEventForwarding');\n\n // Forward draw manager events\n this.drawManager.on('drawCompleted', (data) => {\n this.handleDrawCompleted(data);\n });\n this.drawManager.on('drawCancelled', (data) => {\n this.emit('drawCancelled', data);\n });\n\n // Forward interaction manager events\n this.interactionManager.on('polygonModified', (data) => {\n this.handlePolygonModified(data);\n });\n this.interactionManager.on('menuAction', (data) => {\n this.handleMenuAction(data);\n });\n this.interactionManager.on('checkIntersection', (data) => {\n const hasIntersection = this.geometryManager.checkPolygonIntersection(\n data.polygon1,\n data.polygon2,\n );\n data.callback(hasIntersection);\n });\n this.interactionManager.on('performSubtractOperation', (data) => {\n this.subtractPolygon(data.subtractPolygon);\n });\n this.interactionManager.on('polygonDeleted', () => {\n this.emit('polygonDeleted');\n });\n }\n\n /**\n * Handle draw completion from draw manager\n */\n private async handleDrawCompleted(data: any): Promise<void> {\n // console.log('PolygonMutationManager handleDrawCompleted');\n await this.addPolygon(data.polygon, { simplify: true });\n }\n\n /**\n * Handle polygon modification from interaction manager\n */\n private async handlePolygonModified(data: any): Promise<void> {\n // Don't simplify drag operations to preserve vertex count\n const shouldSimplify =\n data.operation !== 'addVertex' &&\n data.operation !== 'markerDrag' &&\n data.operation !== 'polygonDrag';\n\n const options: AddPolygonOptions = {\n simplify: shouldSimplify,\n noMerge: !data.allowMerge,\n visualOptimizationLevel: data.optimizationLevel || 0,\n };\n await this.addPolygon(data.polygon, options);\n }\n\n /**\n * Handle menu actions from interaction manager\n */\n private async handleMenuAction(data: any): Promise<void> {\n // console.log('PolygonMutationManager handleMenuAction');\n const { action, latLngs, featureGroup } = data;\n\n // Remove the original polygon\n this.removeFeatureGroupInternal(featureGroup);\n\n let result: GeometryOperationResult;\n\n switch (action) {\n case 'simplify': {\n const coords = [\n [latLngs.map((latlng: any) => [latlng.lng, latlng.lat] as [number, number])],\n ];\n const polygon = this.turfHelper.getMultiPolygon(coords);\n result = this.geometryManager.simplifyPolygon(this.turfHelper.getTurfPolygon(polygon));\n break;\n }\n case 'bbox': {\n const bboxCoords = [\n [latLngs.map((latlng: any) => [latlng.lng, latlng.lat] as [number, number])],\n ];\n const bboxPolygon = this.turfHelper.getMultiPolygon(bboxCoords);\n result = this.geometryManager.convertToBoundingBox(\n this.turfHelper.getTurfPolygon(bboxPolygon),\n );\n break;\n }\n case 'doubleElbows': {\n result = this.geometryManager.doubleElbowsPolygon(latLngs);\n break;\n }\n case 'bezier': {\n const bezierCoords = [\n [latLngs.map((latlng: any) => [latlng.lng, latlng.lat] as [number, number])],\n ];\n const bezierPolygon = this.turfHelper.getMultiPolygon(bezierCoords);\n result = this.geometryManager.bezierifyPolygon(\n this.turfHelper.getTurfPolygon(bezierPolygon),\n );\n break;\n }\n default:\n return;\n }\n\n if (result.success && result.result) {\n await this.addPolygon(result.result, { simplify: false });\n }\n }\n\n /**\n * Get the polygon interaction manager (for testing)\n */\n get polygonInteractionManager(): PolygonInteractionManager {\n return this.interactionManager;\n }\n\n /**\n * Add event listener\n */\n on(event: string, callback: (...args: any[]) => void): void {\n // console.log('PolygonMutationManager on');\n if (!this.eventListeners.has(event)) {\n this.eventListeners.set(event, []);\n }\n this.eventListeners.get(event)!.push(callback);\n }\n\n /**\n * Emit event to all listeners\n */\n private emit(event: string, data?: any): void {\n // console.log('PolygonMutationManager emit');\n const listeners = this.eventListeners.get(event);\n if (listeners) {\n listeners.forEach((callback) => callback(data));\n }\n }\n\n /**\n * Add a polygon with optional merging logic\n */\n async addPolygon(\n latlngs: Feature<Polygon | MultiPolygon>,\n options: AddPolygonOptions = {},\n ): Promise<MutationResult> {\n // console.log('PolygonMutationManager addPolygon');\n const { simplify = true, noMerge = false } = options;\n\n try {\n if (\n this.config.mergePolygons &&\n !noMerge &&\n this.getFeatureGroups().length > 0 &&\n !this.config.kinks\n ) {\n return await this.mergePolygon(latlngs, options);\n } else {\n return await this.addPolygonLayer(latlngs, options);\n }\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error in addPolygon',\n };\n }\n }\n\n /**\n * Subtract a polygon from existing polygons\n */\n async subtractPolygon(latlngs: Feature<Polygon | MultiPolygon>): Promise<MutationResult> {\n // console.log('PolygonMutationManager subtractPolygon');\n try {\n // Find only the polygons that actually intersect with the subtract area\n const intersectingFeatureGroups: L.FeatureGroup[] = [];\n\n this.getFeatureGroups().forEach((featureGroup) => {\n try {\n const featureCollection = featureGroup.toGeoJSON() as any;\n if (!featureCollection || !featureCollection.features || !featureCollection.features[0]) {\n return;\n }\n\n const firstFeature = featureCollection.features[0];\n if (!firstFeature.geometry || !firstFeature.geometry.coordinates) {\n return;\n }\n\n const existingPolygon = this.turfHelper.getTurfPolygon(firstFeature);\n\n // Use geometry manager for intersection check\n const hasIntersection = this.geometryManager.checkPolygonIntersection(\n existingPolygon,\n latlngs,\n );\n\n if (hasIntersection) {\n intersectingFeatureGroups.push(featureGroup);\n }\n } catch (error) {\n // Continue with other feature groups\n }\n });\n\n // Only apply subtract to intersecting polygons\n const resultFeatureGroups: L.FeatureGroup[] = [];\n\n for (const featureGroup of intersectingFeatureGroups) {\n try {\n const featureCollection = featureGroup.toGeoJSON() as any;\n const feature = this.turfHelper.getTurfPolygon(featureCollection.features[0]);\n\n // Use geometry manager for subtraction\n const result = this.geometryManager.subtractPolygon(feature, latlngs);\n\n // Remove the original polygon\n this.removeFeatureGroupInternal(featureGroup);\n\n // Add the result polygons\n if (result.success && result.results) {\n for (const resultPolygon of result.results) {\n const addResult = await this.addPolygonLayer(resultPolygon, { simplify: true });\n if (addResult.success && addResult.featureGroups) {\n resultFeatureGroups.push(...addResult.featureGroups);\n }\n }\n }\n } catch (error) {\n // Continue with other feature groups\n }\n }\n\n this.emit('polygonSubtracted', {\n subtractedPolygon: latlngs,\n affectedFeatureGroups: intersectingFeatureGroups,\n resultFeatureGroups,\n });\n\n // Emit completion event to signal that polygon operation is complete\n this.emit('polygonOperationComplete', {\n operation: 'subtract',\n polygon: latlngs,\n resultFeatureGroups,\n });\n\n return {\n success: true,\n featureGroups: resultFeatureGroups,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error in subtractPolygon',\n };\n }\n }\n\n /**\n * Create and add a polygon layer with all markers and interactions\n */\n private async addPolygonLayer(\n latlngs: Feature<Polygon | MultiPolygon>,\n options: AddPolygonOptions = {},\n ): Promise<MutationResult> {\n // console.log('PolygonMutationManager addPolygonLayer');\n const { simplify = true, dynamicTolerance = false, visualOptimizationLevel = 0 } = options;\n\n try {\n // Validate input\n if (!latlngs || !latlngs.geometry || !latlngs.geometry.coordinates) {\n return { success: false, error: 'Invalid polygon data' };\n }\n\n const featureGroup: L.FeatureGroup = new L.FeatureGroup();\n\n const latLngs = simplify ? this.turfHelper.getSimplified(latlngs, dynamicTolerance) : latlngs;\n\n let polygon: any;\n try {\n polygon = this.getPolygon(latLngs);\n if (!polygon) {\n return { success: false, error: 'Failed to create polygon' };\n }\n polygon._polydrawOptimizationLevel = visualOptimizationLevel;\n featureGroup.addLayer(polygon);\n } catch (error) {\n return { success: false, error: 'Failed to create polygon layer' };\n }\n\n // Safely get marker coordinates\n let markerLatlngs;\n try {\n markerLatlngs = polygon.getLatLngs();\n if (!markerLatlngs || !Array.isArray(markerLatlngs)) {\n markerLatlngs = [];\n }\n } catch (error) {\n markerLatlngs = [];\n }\n\n // Add markers using interaction manager\n try {\n markerLatlngs.forEach((polygon: any) => {\n if (!polygon || !Array.isArray(polygon)) {\n return;\n }\n polygon.forEach((polyElement: L.LatLngLiteral[], i: number) => {\n if (!polyElement || !Array.isArray(polyElement) || polyElement.length === 0) {\n return;\n }\n\n try {\n if (i === 0) {\n this.interactionManager.addMarkers(polyElement, featureGroup);\n } else {\n // Add red polyline overlay for hole rings\n const holePolyline = L.polyline(polyElement, {\n color: this.config.holeOptions.color,\n weight: this.config.holeOptions.weight || 2,\n opacity: this.config.holeOptions.opacity || 1,\n });\n featureGroup.addLayer(holePolyline);\n\n this.interactionManager.addHoleMarkers(polyElement, featureGroup);\n }\n } catch (markerError) {\n // Continue with other elements\n }\n });\n });\n } catch (error) {\n // Continue without markers if they fail\n }\n\n // Add edge click listeners using interaction manager\n try {\n this.interactionManager.addEdgeClickListeners(polygon, featureGroup);\n } catch (error) {\n // Continue without edge listeners if they fail\n }\n\n this.getFeatureGroups().push(featureGroup);\n\n // Add to map - this should be done after all setup is complete\n try {\n featureGroup.addTo(this.map);\n } catch (error) {\n // The polygon is still added to arrayOfFeatureGroups for functionality\n }\n\n this.emit('polygonAdded', { polygon: latLngs, featureGroup });\n\n // Emit completion event to signal that polygon operation is complete\n this.emit('polygonOperationComplete', { operation: 'add', polygon: latLngs, featureGroup });\n\n return {\n success: true,\n featureGroups: [featureGroup],\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error in addPolygonLayer',\n };\n }\n }\n\n /**\n * Merge a polygon with existing intersecting polygons\n */\n private async mergePolygon(\n latlngs: Feature<Polygon | MultiPolygon>,\n options: AddPolygonOptions = {},\n ): Promise<MutationResult> {\n try {\n const polygonFeature = [];\n const intersectingFeatureGroups: L.FeatureGroup[] = [];\n let polyIntersection: boolean = false;\n\n this.getFeatureGroups().forEach((featureGroup) => {\n try {\n const featureCollection = featureGroup.toGeoJSON() as any;\n if (!featureCollection || !featureCollection.features || !featureCollection.features[0]) {\n return;\n }\n\n const firstFeature = featureCollection.features[0];\n if (!firstFeature.geometry || !firstFeature.geometry.coordinates) {\n return;\n }\n\n if (firstFeature.geometry.coordinates.length > 1) {\n firstFeature.geometry.coordinates.forEach((element: any) => {\n try {\n const feature = this.turfHelper.getMultiPolygon([element]);\n polyIntersection = this.geometryManager.checkPolygonIntersection(feature, latlngs);\n if (polyIntersection) {\n intersectingFeatureGroups.push(featureGroup);\n polygonFeature.push(feature);\n }\n } catch (error) {\n // Continue with other elements\n }\n });\n } else {\n try {\n const feature = this.turfHelper.getTurfPolygon(firstFeature);\n polyIntersection = this.geometryManager.checkPolygonIntersection(feature, latlngs);\n if (polyIntersection) {\n intersectingFeatureGroups.push(featureGroup);\n polygonFeature.push(feature);\n }\n } catch (error) {\n // Continue with other features\n }\n }\n } catch (error) {\n // Continue with other feature groups\n }\n });\n\n if (intersectingFeatureGroups.length > 0) {\n return await this.unionPolygons(\n intersectingFeatureGroups,\n latlngs,\n polygonFeature,\n options,\n );\n } else {\n return await this.addPolygonLayer(latlngs, options);\n }\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error in mergePolygon',\n };\n }\n }\n\n /**\n * Union multiple polygons together using geometry manager\n */\n private async unionPolygons(\n layers: L.FeatureGroup[],\n latlngs: Feature<Polygon | MultiPolygon>,\n polygonFeature: Feature<Polygon | MultiPolygon>[],\n options: AddPolygonOptions = {},\n ): Promise<MutationResult> {\n try {\n // Remove the intersecting feature groups\n layers.forEach((featureGroup) => {\n this.removeFeatureGroupInternal(featureGroup);\n });\n\n // Use geometry manager for union operation\n const result = this.geometryManager.unionPolygons(polygonFeature, latlngs);\n\n if (result.success && result.result) {\n const addResult = await this.addPolygonLayer(result.result, options);\n\n this.emit('polygonsUnioned', {\n originalPolygons: polygonFeature,\n resultPolygon: result.result,\n featureGroups: addResult.featureGroups,\n });\n\n return addResult;\n } else {\n return {\n success: false,\n error: result.error || 'Failed to union polygons',\n };\n }\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error in unionPolygons',\n };\n }\n }\n\n /**\n * Create a polygon from GeoJSON feature\n */\n private getPolygon(latlngs: Feature<Polygon | MultiPolygon>) {\n // console.log('PolygonMutationManager getPolygon');\n const polygon = L.GeoJSON.geometryToLayer(latlngs) as any;\n polygon.setStyle(this.config.polygonOptions);\n\n // Ensure each polygon has a unique identifier to prevent cross-contamination\n polygon._polydrawUniqueId = L.Util.stamp(polygon) + '_' + Date.now();\n\n // Clear any existing drag data to ensure clean state\n delete polygon._polydrawDragData;\n delete polygon._polydrawOriginalLatLngs;\n delete polygon._polydrawCurrentDragSession;\n delete polygon._polydrawOriginalMarkerPositions;\n delete polygon._polydrawOriginalHoleLinePositions;\n\n // Enable polygon dragging using interaction manager\n if (this.config.modes.dragPolygons) {\n this.interactionManager.enablePolygonDragging(polygon, latlngs);\n }\n\n return polygon;\n }\n\n /**\n * Internal method to add feature group to array\n */\n private addFeatureGroupInternal(featureGroup: L.FeatureGroup): void {\n // console.log('PolygonMutationManager addFeatureGroupInternal');\n this.getFeatureGroups().push(featureGroup);\n }\n\n /**\n * Internal method to remove feature group from array and map\n */\n private removeFeatureGroupInternal(featureGroup: L.FeatureGroup): void {\n // console.log('PolygonMutationManager removeFeatureGroupInternal');\n featureGroup.clearLayers();\n const featureGroups = this.getFeatureGroups();\n const index = featureGroups.indexOf(featureGroup);\n if (index > -1) {\n featureGroups.splice(index, 1);\n }\n this.map.removeLayer(featureGroup);\n }\n\n // Public methods that delegate to interaction manager\n\n /**\n * Update marker draggable state\n */\n updateMarkerDraggableState(): void {\n // console.log('PolygonMutationManager updateMarkerDraggableState');\n this.interactionManager.updateMarkerDraggableState();\n }\n\n /**\n * Update all markers for edge deletion visual feedback\n */\n updateAllMarkersForEdgeDeletion(showFeedback: boolean): void {\n // console.log('PolygonMutationManager updateAllMarkersForEdgeDeletion');\n this.interactionManager.updateAllMarkersForEdgeDeletion(showFeedback);\n }\n\n /**\n * Set modifier key held state\n */\n setModifierKeyHeld(isHeld: boolean): void {\n // console.log('PolygonMutationManager setModifierKeyHeld');\n this.interactionManager.setModifierKeyHeld(isHeld);\n }\n\n // Legacy methods for backward compatibility (delegate to appropriate managers)\n\n /**\n * Check if two polygons intersect (delegates to geometry manager)\n */\n checkPolygonIntersection(\n polygon1: Feature<Polygon | MultiPolygon>,\n polygon2: Feature<Polygon | MultiPolygon>,\n ): boolean {\n // console.log('PolygonMutationManager checkPolygonIntersection');\n return this.geometryManager.checkPolygonIntersection(polygon1, polygon2);\n }\n\n /**\n * Get polygon center (delegates to geometry manager)\n */\n getPolygonCenter(polygon: Feature<Polygon | MultiPolygon>): { lat: number; lng: number } | null {\n // console.log('PolygonMutationManager getPolygonCenter');\n // For backward compatibility, we'll implement this using the same logic as before\n try {\n if (!polygon || !polygon.geometry || !polygon.geometry.coordinates) {\n return null;\n }\n\n let coordinates;\n if (polygon.geometry.type === 'Polygon') {\n coordinates = polygon.geometry.coordinates[0]; // First ring (outer ring)\n } else if (polygon.geometry.type === 'MultiPolygon') {\n coordinates = polygon.geometry.coordinates[0][0]; // First polygon, first ring\n } else {\n return null;\n }\n\n if (!Array.isArray(coordinates) || coordinates.length === 0) {\n return null;\n }\n\n // Calculate centroid\n let latSum = 0;\n let lngSum = 0;\n let count = 0;\n\n for (const coord of coordinates) {\n if (Array.isArray(coord) && coord.length >= 2) {\n const lng = coord[0];\n const lat = coord[1];\n\n if (typeof lng === 'number' && typeof lat === 'number' && !isNaN(lng) && !isNaN(lat)) {\n lngSum += lng;\n latSum += lat;\n count++;\n }\n }\n }\n\n if (count === 0) {\n return null;\n }\n\n return {\n lat: latSum / count,\n lng: lngSum / count,\n };\n } catch (error) {\n return null;\n }\n }\n\n /**\n * Get bounding box from polygon (delegates to geometry manager)\n */\n getBoundingBox(\n polygon: Feature<Polygon | MultiPolygon>,\n ): { minLat: number; maxLat: number; minLng: number; maxLng: number } | null {\n // console.log('PolygonMutationManager getBoundingBox');\n // For backward compatibility, we'll implement this using the same logic as before\n try {\n if (!polygon || !polygon.geometry || !polygon.geometry.coordinates) {\n return null;\n }\n\n let coordinates;\n if (polygon.geometry.type === 'Polygon') {\n coordinates = polygon.geometry.coordinates[0]; // First ring (outer ring)\n } else if (polygon.geometry.type === 'MultiPolygon') {\n coordinates = polygon.geometry.coordinates[0][0]; // First polygon, first ring\n } else {\n return null;\n }\n\n if (!Array.isArray(coordinates) || coordinates.length === 0) {\n return null;\n }\n\n let minLat = Infinity;\n let maxLat = -Infinity;\n let minLng = Infinity;\n let maxLng = -Infinity;\n\n for (const coord of coordinates) {\n if (Array.isArray(coord) && coord.length >= 2) {\n const lng = coord[0];\n const lat = coord[1];\n\n if (typeof lng === 'number' && typeof lat === 'number' && !isNaN(lng) && !isNaN(lat)) {\n minLng = Math.min(minLng, lng);\n maxLng = Math.max(maxLng, lng);\n minLat = Math.min(minLat, lat);\n maxLat = Math.max(maxLat, lat);\n }\n }\n }\n\n if (\n minLat === Infinity ||\n maxLat === -Infinity ||\n minLng === Infinity ||\n maxLng === -Infinity\n ) {\n return null;\n }\n\n return { minLat, maxLat, minLng, maxLng };\n } catch (error) {\n return null;\n }\n }\n\n // Legacy methods that are now handled by specialized managers but kept for compatibility\n\n addMarker(latlngs: L.LatLngLiteral[], featureGroup: L.FeatureGroup): void {\n // console.log('PolygonMutationManager addMarker');\n this.interactionManager.addMarkers(latlngs, featureGroup);\n }\n\n addHoleMarker(latlngs: L.LatLngLiteral[], featureGroup: L.FeatureGroup): void {\n // console.log('PolygonMutationManager addHoleMarker');\n this.interactionManager.addHoleMarkers(latlngs, featureGroup);\n }\n\n addEdgeClickListeners(polygon: L.Polygon, featureGroup: L.FeatureGroup): void {\n // console.log('PolygonMutationManager addEdgeClickListeners');\n this.interactionManager.addEdgeClickListeners(polygon, featureGroup);\n }\n\n enablePolygonDragging(polygon: any, latlngs: Feature<Polygon | MultiPolygon>): void {\n // console.log('PolygonMutationManager enablePolygonDragging');\n this.interactionManager.enablePolygonDragging(polygon, latlngs);\n }\n\n // Helper methods for backward compatibility\n getMarkerIndex(latlngs: L.LatLngLiteral[], position: any): number {\n // console.log('PolygonMutationManager getMarkerIndex');\n // This is now handled internally by the interaction manager\n // Return 0 as a fallback for backward compatibility\n return 0;\n }\n\n ensureMarkerSeparation(polygonLength: number, markers: any): any {\n // console.log('PolygonMutationManager ensureMarkerSeparation');\n // This is now handled internally by the interaction manager\n // Return the original markers for backward compatibility\n return {\n menu: markers.menu?.index || 0,\n delete: markers.delete?.index || 1,\n info: markers.info?.index || 2,\n };\n }\n\n findAlternativeMarkerPosition(\n polygonLength: number,\n originalIndex: number,\n usedIndices: Set<number>,\n ): number {\n // console.log('PolygonMutationManager findAlternativeMarkerPosition');\n // This is now handled internally by the interaction manager\n // Return a simple fallback for backward compatibility\n return (originalIndex + 1) % polygonLength;\n }\n\n createDivIcon(processedClasses: string[]): L.DivIcon {\n // console.log('PolygonMutationManager createDivIcon');\n // This is now handled internally by the interaction manager\n // Return a simple div icon for backward compatibility\n return L.divIcon({ className: processedClasses.join(' ') });\n }\n\n getLatLngInfoString(latlng: L.LatLngLiteral): string {\n // console.log('PolygonMutationManager getLatLngInfoString');\n // This is now handled internally by the interaction manager\n // Return a simple string for backward compatibility\n return 'Latitude: ' + latlng.lat + ' Longitude: ' + latlng.lng;\n }\n\n generateMenuMarkerPopup(\n latLngs: L.LatLngLiteral[],\n featureGroup: L.FeatureGroup,\n ): HTMLDivElement {\n // console.log('PolygonMutationManager generateMenuMarkerPopup');\n // This is now handled internally by the interaction manager\n // Return a simple div for backward compatibility\n const div = document.createElement('div');\n div.innerHTML = 'Menu';\n return div;\n }\n\n getPolygonGeoJSONFromFeatureGroup(featureGroup: L.FeatureGroup): Feature<Polygon | MultiPolygon> {\n // console.log('PolygonMutationManager getPolygonGeoJSONFromFeatureGroup');\n // This is now handled internally by the interaction manager\n // Return a simple polygon for backward compatibility\n return {\n type: 'Feature',\n geometry: {\n type: 'Polygon',\n coordinates: [\n [\n [0, 0],\n [0, 1],\n [1, 1],\n [1, 0],\n [0, 0],\n ],\n ],\n },\n properties: {},\n };\n }\n\n getTotalPolygonPerimeter(polygonGeoJSON: Feature<Polygon | MultiPolygon>): number {\n // console.log('PolygonMutationManager getTotalPolygonPerimeter');\n // This is now handled internally by the interaction manager\n // Return a simple value for backward compatibility\n return 1000;\n }\n\n generateInfoMarkerPopup(area: number, perimeter: number): HTMLDivElement {\n // console.log('PolygonMutationManager generateInfoMarkerPopup');\n // This is now handled internally by the interaction manager\n // Return a simple div for backward compatibility\n const div = document.createElement('div');\n div.innerHTML = `Area: ${area}, Perimeter: ${perimeter}`;\n return div;\n }\n\n onMarkerHoverForEdgeDeletion(marker: L.Marker, isHovering: boolean): void {\n // console.log('PolygonMutationManager onMarkerHoverForEdgeDeletion');\n // This is now handled internally by the interaction manager\n }\n\n highlightEdgeOnHover(edgePolyline: L.Polyline, isHovering: boolean): void {\n // console.log('PolygonMutationManager highlightEdgeOnHover');\n // This is now handled internally by the interaction manager\n }\n\n // Additional methods for backward compatibility with tests\n onEdgeClick(e: L.LeafletMouseEvent, edgePolyline: L.Polyline): void {\n // console.log('PolygonMutationManager onEdgeClick');\n // Delegate to interaction manager's private method through a public interface\n // For now, just log - the actual functionality is handled internally\n }\n\n removeFeatureGroup(featureGroup: L.FeatureGroup): void {\n // console.log('PolygonMutationManager removeFeatureGroup');\n this.removeFeatureGroupInternal(featureGroup);\n }\n\n onPolygonMouseMove(e: L.LeafletMouseEvent): void {\n // console.log('PolygonMutationManager onPolygonMouseMove');\n // This is now handled internally by the interaction manager\n }\n\n onPolygonMouseUp(e: L.LeafletMouseEvent): void {\n // console.log('PolygonMutationManager onPolygonMouseUp');\n // This is now handled internally by the interaction manager\n }\n\n updatePolygonAfterDrag(polygon: any): void {\n // console.log('PolygonMutationManager updatePolygonAfterDrag');\n // This is now handled internally by the interaction manager\n }\n\n setSubtractVisualMode(polygon: any, enabled: boolean): void {\n // console.log('PolygonMutationManager setSubtractVisualMode');\n // This is now handled internally by the interaction manager\n }\n\n performModifierSubtract(draggedGeoJSON: any, originalFeatureGroup: L.FeatureGroup): void {\n // console.log('PolygonMutationManager performModifierSubtract');\n // Delegate to interaction manager's private method\n // For now, we'll implement the logic here to fix the \"bite taken\" issue\n try {\n const draggedPolygon = this.turfHelper.getTurfPolygon(draggedGeoJSON);\n const intersectingFeatureGroups: L.FeatureGroup[] = [];\n\n // Find all feature groups that intersect with the dragged polygon\n this.getFeatureGroups().forEach((featureGroup) => {\n if (featureGroup === originalFeatureGroup) {\n return;\n }\n\n try {\n const featureCollection = featureGroup.toGeoJSON() as any;\n if (!featureCollection || !featureCollection.features || !featureCollection.features[0]) {\n return;\n }\n\n const firstFeature = featureCollection.features[0];\n if (!firstFeature.geometry || !firstFeature.geometry.coordinates) {\n return;\n }\n\n const existingPolygon = this.turfHelper.getTurfPolygon(firstFeature);\n\n // Check intersection using geometry manager\n const hasIntersection = this.geometryManager.checkPolygonIntersection(\n existingPolygon,\n draggedPolygon,\n );\n\n if (hasIntersection) {\n intersectingFeatureGroups.push(featureGroup);\n }\n } catch (error) {\n // Handle errors\n }\n });\n\n // Remove the original dragged polygon\n this.removeFeatureGroupInternal(originalFeatureGroup);\n\n // For each intersecting polygon, subtract the dragged polygon from it\n // This creates the \"bite taken\" effect\n intersectingFeatureGroups.forEach((featureGroup) => {\n try {\n const featureCollection = featureGroup.toGeoJSON() as any;\n const existingPolygon = this.turfHelper.getTurfPolygon(featureCollection.features[0]);\n\n // Remove the existing polygon\n this.removeFeatureGroupInternal(featureGroup);\n\n // Perform the subtraction: existing polygon - dragged polygon\n const result = this.geometryManager.subtractPolygon(existingPolygon, draggedPolygon);\n\n // Add the result polygons\n if (result.success && result.results) {\n for (const resultPolygon of result.results) {\n this.addPolygonLayer(resultPolygon, { simplify: true });\n }\n }\n } catch (error) {\n // Handle errors\n }\n });\n } catch (error) {\n // Handle errors\n }\n }\n}\n","import * as L from 'leaflet';\nimport defaultConfig from './config.json';\nimport { DrawMode, MarkerPosition } from './enums';\nimport { TurfHelper } from './turf-helper';\nimport { createButtons } from './buttons';\nimport { PolygonInformationService } from './polygon-information.service';\nimport { MapStateService } from './map-state';\nimport { ModeManager } from './managers/mode-manager';\nimport { PolygonMutationManager } from './managers/polygon-mutation-manager';\nimport type { Feature, Polygon, MultiPolygon } from 'geojson';\nimport './styles/polydraw.css';\n\nimport type { PolydrawConfig, DrawModeChangeHandler } from './types/polydraw-interfaces';\n\nclass Polydraw extends L.Control {\n private map: L.Map;\n private tracer: L.Polyline = {} as L.Polyline;\n private turfHelper: TurfHelper;\n private subContainer?: HTMLElement;\n private config: PolydrawConfig;\n private mapStateService: MapStateService;\n private polygonInformation: PolygonInformationService;\n private modeManager: ModeManager;\n private polygonMutationManager: PolygonMutationManager;\n private arrayOfFeatureGroups: L.FeatureGroup[] = [];\n private p2pMarkers: L.Marker[] = [];\n\n private drawMode: DrawMode = DrawMode.Off;\n private drawModeListeners: DrawModeChangeHandler[] = [];\n private _boundKeyDownHandler: (e: KeyboardEvent) => void;\n private _boundKeyUpHandler: (e: KeyboardEvent) => void;\n private isModifierKeyHeld: boolean = false;\n\n constructor(options?: L.ControlOptions & { config?: PolydrawConfig; configPath?: string }) {\n // console.log('constructor');\n super(options);\n\n // Initialize with default config first\n this.config = defaultConfig as unknown as PolydrawConfig;\n\n // If configPath is provided, load external config\n if (options?.configPath) {\n this.loadExternalConfig(options.configPath, options?.config);\n } else {\n // Apply inline config if no external config path\n this.config = { ...defaultConfig, ...(options?.config || {}) } as unknown as PolydrawConfig;\n this.initializeComponents();\n }\n }\n\n private async loadExternalConfig(configPath: string, inlineConfig?: PolydrawConfig) {\n try {\n const response = await fetch(configPath);\n if (!response.ok) {\n throw new Error(\n `Failed to load config from ${configPath}: ${response.status} ${response.statusText}`,\n );\n }\n\n const externalConfig = await response.json();\n\n // Merge configs: default < external < inline (inline has highest priority)\n this.config = {\n ...defaultConfig,\n ...externalConfig,\n ...(inlineConfig || {}),\n } as unknown as PolydrawConfig;\n\n this.initializeComponents();\n } catch (error) {\n console.warn(\n 'Failed to load external config, falling back to default + inline config:',\n error,\n );\n // Fallback to default + inline config if external loading fails\n this.config = { ...defaultConfig, ...(inlineConfig || {}) } as unknown as PolydrawConfig;\n this.initializeComponents();\n }\n }\n\n private initializeComponents() {\n this.turfHelper = new TurfHelper(this.config);\n this.mapStateService = new MapStateService();\n this.polygonInformation = new PolygonInformationService(this.mapStateService);\n this.modeManager = new ModeManager(this.config);\n this.polygonInformation.onPolygonInfoUpdated((_k) => {\n // This is the perfect central place to keep the indicator in sync.\n this.updateActivateButtonIndicator();\n });\n this._boundKeyDownHandler = this.handleKeyDown.bind(this);\n\n // Initialize PolygonMutationManager - will be properly set up in onAdd when map is available\n this.polygonMutationManager = null as any;\n }\n\n onAdd(_map: L.Map): HTMLElement {\n // console.log('onAdd');\n this.map = _map;\n const style = document.createElement('style');\n style.innerHTML = `\n .leaflet-control a { background-color: #fff; color: #000; display: flex; align-items: center; justify-content: center; }\n .leaflet-control a:hover { background-color: #f4f4f4; }\n .leaflet-control a.active { background-color:rgb(128, 218, 255); color: #fff; }\n .polydraw-indicator-active { background-color: #ffcc00 !important; }\n .crosshair-cursor-enabled { cursor: crosshair !important; }\n .crosshair-cursor-enabled * { cursor: crosshair !important; }\n .leaflet-polydraw-p2p-marker { background-color: #fff; border: 2px solid #50622b; border-radius: 50%; box-sizing: border-box; }\n .leaflet-polydraw-p2p-first-marker { position: relative; }\n .leaflet-polydraw-p2p-first-marker:hover { transform: scale(1.5); transition: all 0.2s ease; }\n `;\n document.head.appendChild(style);\n\n // Add ESC key handler for Point-to-Point mode\n this.setupKeyboardHandlers();\n\n const container = L.DomUtil.create('div', 'leaflet-control leaflet-bar');\n container.style.display = 'flex';\n container.style.flexDirection = 'column-reverse';\n\n this.subContainer = L.DomUtil.create('div', 'sub-buttons', container);\n this.subContainer.style.maxHeight = '0px';\n this.subContainer.style.overflow = 'hidden';\n this.subContainer.style.transition = 'max-height 0.3s ease';\n\n const onActivateToggle = () => {\n const activate = container.querySelector('.icon-activate') as HTMLElement;\n if (L.DomUtil.hasClass(activate, 'active')) {\n L.DomUtil.removeClass(activate, 'active');\n if (this.subContainer) {\n this.subContainer.style.maxHeight = '0px';\n }\n } else {\n L.DomUtil.addClass(activate, 'active');\n if (this.subContainer) {\n this.subContainer.style.maxHeight = '250px';\n }\n }\n // Update the indicator state whenever the panel is toggled\n this.updateActivateButtonIndicator();\n };\n\n const onDrawClick = (e?: Event) => {\n if (e) {\n e.preventDefault();\n e.stopPropagation();\n }\n\n // If already in Add mode, turn it off instead of ignoring\n if (this.modeManager.getCurrentMode() === DrawMode.Add) {\n this.setDrawMode(DrawMode.Off);\n return;\n }\n\n this.setDrawMode(DrawMode.Add);\n this.polygonInformation.saveCurrentState();\n };\n\n const onSubtractClick = (e?: Event) => {\n // Prevent multiple rapid clicks\n if (e) {\n e.preventDefault();\n e.stopPropagation();\n }\n\n // If already in Subtract mode, turn it off instead of ignoring\n if (this.modeManager.getCurrentMode() === DrawMode.Subtract) {\n this.setDrawMode(DrawMode.Off);\n return;\n }\n\n this.setDrawMode(DrawMode.Subtract);\n this.polygonInformation.saveCurrentState();\n };\n\n const onEraseClick = (e?: Event) => {\n // console.log('onEraseClick called');\n // Prevent multiple rapid clicks\n if (e) {\n e.preventDefault();\n e.stopPropagation();\n }\n\n // console.log('Current feature groups count:', this.arrayOfFeatureGroups.length);\n\n // Only erase if there are polygons to erase\n if (this.arrayOfFeatureGroups.length === 0) {\n // console.log('No polygons to erase');\n return;\n }\n\n // console.log('Calling removeAllFeatureGroups');\n this.removeAllFeatureGroups();\n };\n\n const onPointToPointClick = (e?: Event) => {\n if (e) {\n e.preventDefault();\n e.stopPropagation();\n }\n\n // If already in PointToPoint mode, turn it off instead of ignoring\n if (this.modeManager.getCurrentMode() === DrawMode.PointToPoint) {\n this.setDrawMode(DrawMode.Off);\n return;\n }\n\n this.setDrawMode(DrawMode.PointToPoint);\n this.polygonInformation.saveCurrentState();\n };\n\n createButtons(\n container,\n this.subContainer,\n this.config,\n onActivateToggle,\n onDrawClick,\n onSubtractClick,\n onEraseClick,\n onPointToPointClick,\n );\n\n // Simple UI update listener\n const uiUpdateListener = (mode: DrawMode) => {\n const drawButton = container.querySelector('.icon-draw') as HTMLElement;\n const subtractButton = container.querySelector('.icon-subtract') as HTMLElement;\n if (drawButton) drawButton.classList.toggle('active', mode === DrawMode.Add);\n if (subtractButton) subtractButton.classList.toggle('active', mode === DrawMode.Subtract);\n };\n\n this.drawModeListeners.push(uiUpdateListener);\n\n this.tracer = L.polyline([], this.config.polyLineOptions);\n try {\n this.tracer.addTo(this.map);\n } catch (error) {\n // Silently handle tracer initialization in test environment\n }\n\n // Initialize PolygonMutationManager now that map is available\n this.polygonMutationManager = new PolygonMutationManager({\n turfHelper: this.turfHelper,\n polygonInformation: this.polygonInformation,\n map: this.map,\n config: this.config,\n modeManager: this.modeManager,\n getFeatureGroups: () => this.arrayOfFeatureGroups,\n });\n\n // Listen for polygon operation completion events to reset draw mode\n this.polygonMutationManager.on('polygonOperationComplete', (data) => {\n // Update the indicator state after any polygon operation\n this.updateActivateButtonIndicator();\n // Use the interaction state manager to reset to Off mode\n this.modeManager.updateStateForMode(DrawMode.Off);\n this.drawMode = DrawMode.Off;\n this.emitDrawModeChanged();\n\n // Update UI state\n this.updateMarkerDraggableState();\n\n // Update map interactions and cursor\n const shouldShowCrosshair = this.modeManager.shouldShowCrosshairCursor();\n const mapDragEnabled = this.modeManager.canPerformAction('mapDrag');\n const mapZoomEnabled = this.modeManager.canPerformAction('mapZoom');\n const mapDoubleClickEnabled = this.modeManager.canPerformAction('mapDoubleClickZoom');\n\n // Update cursor\n if (shouldShowCrosshair) {\n L.DomUtil.addClass(this.map.getContainer(), 'crosshair-cursor-enabled');\n } else {\n L.DomUtil.removeClass(this.map.getContainer(), 'crosshair-cursor-enabled');\n }\n\n // Update events and map interactions\n this.events(false); // Turn off drawing events\n this.setLeafletMapEvents(mapDragEnabled, mapDoubleClickEnabled, mapZoomEnabled);\n\n // Reset tracer style\n try {\n this.tracer.setStyle({ color: '' });\n } catch (error) {\n // Handle case where tracer renderer is not initialized\n }\n });\n\n // Listen for polygon deletion events to update the activate button indicator\n this.polygonMutationManager.on('polygonDeleted', () => {\n this.updateActivateButtonIndicator();\n });\n\n return container;\n }\n\n public addTo(map: L.Map): this {\n // console.log('addTo');\n super.addTo(map);\n return this;\n }\n\n public getFeatureGroups(): L.FeatureGroup[] {\n return this.arrayOfFeatureGroups;\n }\n\n onRemove(_map: L.Map) {\n // console.log('onRemove');\n this.removeKeyboardHandlers();\n if (this.tracer) {\n this.map.removeLayer(this.tracer);\n }\n this.removeAllFeatureGroups();\n }\n\n public async addPredefinedPolygon(\n geographicBorders: L.LatLng[][][],\n options?: { visualOptimizationLevel?: number },\n ): Promise<void> {\n // console.log('addPredefinedPolygon');\n // Validate input\n if (!geographicBorders || geographicBorders.length === 0) {\n throw new Error('Cannot add empty polygon array');\n }\n\n // Ensure map is properly initialized\n if (!this.map) {\n throw new Error('Map not initialized');\n }\n\n // Ensure PolygonMutationManager is initialized\n if (!this.polygonMutationManager) {\n throw new Error('PolygonMutationManager not initialized');\n }\n\n // Extract options with defaults\n const visualOptimizationLevel = options?.visualOptimizationLevel ?? 0;\n\n for (const [groupIndex, group] of geographicBorders.entries()) {\n if (!group || !group[0] || group[0].length < 4) {\n throw new Error(\n `Invalid polygon data at index ${groupIndex}: A polygon must have at least 3 unique vertices.`,\n );\n }\n try {\n // Convert L.LatLng[][][] to coordinate format for TurfHelper\n const coords = group.map((ring) => ring.map((latlng) => [latlng.lng, latlng.lat]));\n\n const polygon2 = this.turfHelper.getMultiPolygon([coords]);\n\n // Use the PolygonMutationManager instead of direct addPolygon\n const result = await this.polygonMutationManager.addPolygon(polygon2, {\n simplify: false,\n noMerge: false,\n visualOptimizationLevel: visualOptimizationLevel,\n });\n\n if (!result.success) {\n console.error('Error adding polygon via manager:', result.error);\n throw new Error(result.error || 'Failed to add polygon');\n }\n\n this.polygonInformation.createPolygonInformationStorage(this.arrayOfFeatureGroups);\n } catch (error) {\n console.error('Error adding auto polygon:', error);\n throw error;\n }\n }\n }\n\n setDrawMode(mode: DrawMode) {\n // console.log('setDrawMode');\n const previousMode = this.drawMode;\n this.drawMode = mode;\n\n // Update interaction state manager\n this.modeManager.updateStateForMode(mode);\n\n this.emitDrawModeChanged();\n\n // Update marker draggable state when mode changes\n this.updateMarkerDraggableState();\n\n // Only stop draw if we're switching away from PointToPoint mode or going to Off mode\n // Don't reset tracer when entering PointToPoint mode\n if (previousMode === DrawMode.PointToPoint && mode !== DrawMode.PointToPoint) {\n // Clear P2P markers when leaving PointToPoint mode\n this.clearP2pMarkers();\n this.stopDraw();\n } else if (mode === DrawMode.Off) {\n this.stopDraw();\n } else if (mode !== DrawMode.PointToPoint) {\n this.stopDraw();\n }\n\n if (this.map) {\n // Use interaction state manager for UI updates\n const shouldShowCrosshair = this.modeManager.shouldShowCrosshairCursor();\n const mapDragEnabled = this.modeManager.canPerformAction('mapDrag');\n const mapZoomEnabled = this.modeManager.canPerformAction('mapZoom');\n const mapDoubleClickEnabled = this.modeManager.canPerformAction('mapDoubleClickZoom');\n\n // Update cursor\n if (shouldShowCrosshair) {\n L.DomUtil.addClass(this.map.getContainer(), 'crosshair-cursor-enabled');\n } else {\n L.DomUtil.removeClass(this.map.getContainer(), 'crosshair-cursor-enabled');\n }\n\n // Update events\n this.events(mode !== DrawMode.Off);\n\n // Update tracer style based on mode\n try {\n switch (mode) {\n case DrawMode.Off:\n this.tracer.setStyle({ color: '' });\n break;\n case DrawMode.Add:\n this.tracer.setStyle({\n color: defaultConfig.polyLineOptions.color,\n dashArray: null, // Reset to solid line\n });\n break;\n case DrawMode.Subtract:\n this.tracer.setStyle({\n color: '#D9460F',\n dashArray: null, // Reset to solid line\n });\n break;\n case DrawMode.PointToPoint:\n this.tracer.setStyle({\n color: defaultConfig.polyLineOptions.color,\n dashArray: '5, 5',\n });\n break;\n }\n } catch (error) {\n // Handle case where tracer renderer is not initialized\n }\n\n // Update map interactions based on state manager\n this.setLeafletMapEvents(mapDragEnabled, mapDoubleClickEnabled, mapZoomEnabled);\n }\n }\n\n getDrawMode(): DrawMode {\n // console.log('getDrawMode');\n return this.modeManager.getCurrentMode();\n }\n\n public onDrawModeChangeListener(callback: DrawModeChangeHandler): void {\n // console.log('onDrawModeChangeListener');\n this.drawModeListeners.push(callback);\n }\n\n public offDrawModeChangeListener(callback: DrawModeChangeHandler): void {\n // console.log('offDrawModeChangeListener');\n const index = this.drawModeListeners.indexOf(callback);\n if (index > -1) {\n this.drawModeListeners.splice(index, 1);\n }\n }\n\n private emitDrawModeChanged(): void {\n // console.log('emitDrawModeChanged');\n for (const cb of this.drawModeListeners) {\n cb(this.modeManager.getCurrentMode());\n }\n }\n\n /**\n * Update the draggable state of all existing markers when draw mode changes\n */\n private updateMarkerDraggableState(): void {\n // console.log('updateMarkerDraggableState');\n const shouldBeDraggable = this.modeManager.canPerformAction('markerDrag');\n\n this.arrayOfFeatureGroups.forEach((featureGroup) => {\n featureGroup.eachLayer((layer) => {\n if (layer instanceof L.Marker) {\n const marker = layer as L.Marker;\n try {\n // Update the draggable option\n marker.options.draggable = shouldBeDraggable;\n\n // If the marker has dragging capability, update its state\n if (marker.dragging) {\n if (shouldBeDraggable) {\n marker.dragging.enable();\n } else {\n marker.dragging.disable();\n }\n }\n } catch (error) {\n // Handle any errors in updating marker state\n }\n }\n });\n });\n }\n\n removeAllFeatureGroups() {\n // console.log('removeAllFeatureGroups');\n this.arrayOfFeatureGroups.forEach((featureGroups) => {\n try {\n this.map.removeLayer(featureGroups);\n } catch (error) {\n // Silently handle layer removal errors\n }\n });\n this.arrayOfFeatureGroups.length = 0; // Clear the array in-place to preserve the reference\n this.polygonInformation.deletePolygonInformationStorage();\n this.polygonInformation.updatePolygons();\n // Update the indicator state after removing all polygons\n this.updateActivateButtonIndicator();\n }\n\n private stopDraw() {\n // console.log('stopDraw');\n this.resetTracker();\n this.drawStartedEvents(false);\n }\n\n private setLeafletMapEvents(\n enableDragging: boolean,\n enableDoubleClickZoom: boolean,\n enableScrollWheelZoom: boolean,\n ) {\n // console.log('setLeafletMapEvents');\n enableDragging ? this.map.dragging.enable() : this.map.dragging.disable();\n enableDoubleClickZoom ? this.map.doubleClickZoom.enable() : this.map.doubleClickZoom.disable();\n enableScrollWheelZoom ? this.map.scrollWheelZoom.enable() : this.map.scrollWheelZoom.disable();\n }\n\n private resetTracker() {\n // console.log('resetTracker');\n this.tracer.setLatLngs([]);\n }\n\n private drawStartedEvents(onoff: boolean) {\n // console.log('drawStartedEvents');\n const onoroff = onoff ? 'on' : 'off';\n this.map[onoroff]('mousemove', this.mouseMove, this);\n this.map[onoroff]('mouseup', this.mouseUpLeave, this);\n\n if (onoff) {\n try {\n this.map.getContainer().addEventListener('touchmove', (e) => this.mouseMove(e));\n this.map.getContainer().addEventListener('touchend', (e) => this.mouseUpLeave(e));\n } catch (error) {\n // Silently handle DOM errors\n }\n } else {\n try {\n this.map.getContainer().removeEventListener('touchmove', (e) => this.mouseMove(e), true);\n this.map.getContainer().removeEventListener('touchend', (e) => this.mouseUpLeave(e), true);\n } catch (error) {\n // Silently handle DOM errors\n }\n }\n }\n\n private mouseMove(event: L.LeafletMouseEvent | TouchEvent) {\n // console.log('mouseMove');\n if ('latlng' in event && event.latlng) {\n this.tracer.addLatLng(event.latlng);\n } else if ('touches' in event && event.touches && event.touches.length > 0) {\n const latlng = this.map.containerPointToLatLng([\n event.touches[0].clientX,\n event.touches[0].clientY,\n ]);\n this.tracer.addLatLng(latlng);\n }\n }\n\n private async mouseUpLeave(event: any) {\n // console.log('mouseUpLeave');\n this.polygonInformation.deletePolygonInformationStorage();\n\n // Get tracer coordinates and validate before processing\n const tracerGeoJSON = this.tracer.toGeoJSON() as any;\n\n // Check if tracer has valid coordinates before processing\n if (\n !tracerGeoJSON ||\n !tracerGeoJSON.geometry ||\n !tracerGeoJSON.geometry.coordinates ||\n tracerGeoJSON.geometry.coordinates.length < 3\n ) {\n // Not enough points to form a valid polygon, just stop drawing\n this.stopDraw();\n return;\n }\n\n let geoPos: Feature<Polygon | MultiPolygon>;\n try {\n geoPos = this.turfHelper.createPolygonFromTrace(tracerGeoJSON);\n } catch (error) {\n // Handle polygon creation errors (e.g., invalid polygon)\n this.stopDraw();\n return;\n }\n\n // Additional validation - check if the resulting polygon is valid\n if (\n !geoPos ||\n !geoPos.geometry ||\n !geoPos.geometry.coordinates ||\n geoPos.geometry.coordinates.length === 0\n ) {\n this.stopDraw();\n return;\n }\n\n this.stopDraw();\n\n try {\n switch (this.modeManager.getCurrentMode()) {\n case DrawMode.Add: {\n // Use the PolygonMutationManager instead of direct addPolygon\n const result = await this.polygonMutationManager.addPolygon(geoPos, {\n simplify: true,\n noMerge: false,\n });\n if (!result.success) {\n console.error('Error adding polygon via manager:', result.error);\n }\n break;\n }\n case DrawMode.Subtract: {\n // Use the PolygonMutationManager for subtraction\n const subtractResult = await this.polygonMutationManager.subtractPolygon(geoPos);\n if (!subtractResult.success) {\n console.error('Error subtracting polygon via manager:', subtractResult.error);\n }\n break;\n }\n default:\n break;\n }\n } catch (error) {\n console.error('Error in mouseUpLeave polygon operation:', error);\n }\n\n this.polygonInformation.createPolygonInformationStorage(this.arrayOfFeatureGroups);\n }\n\n private events(onoff: boolean) {\n // console.log('events');\n const onoroff = onoff ? 'on' : 'off';\n this.map[onoroff]('mousedown', this.mouseDown, this);\n\n // Add double-click event for Point-to-Point mode\n this.map[onoroff]('dblclick', this.handleDoubleClick, this);\n\n if (onoff) {\n try {\n this.map.getContainer().addEventListener('touchstart', (e) => this.mouseDown(e));\n } catch (error) {\n // Silently handle DOM errors\n }\n } else {\n try {\n this.map.getContainer().removeEventListener('touchstart', (e) => this.mouseDown(e), true);\n } catch (error) {\n // Silently handle DOM errors\n }\n }\n }\n\n private mouseDown(event: L.LeafletMouseEvent | TouchEvent) {\n // console.log('mouseDown');\n // Check if we're still in a drawing mode before processing\n if (this.modeManager.isInOffMode()) {\n return;\n }\n\n let clickLatLng;\n if ('latlng' in event && event.latlng) {\n clickLatLng = event.latlng;\n } else if ('touches' in event && event.touches && event.touches.length > 0) {\n clickLatLng = this.map.containerPointToLatLng([\n event.touches[0].clientX,\n event.touches[0].clientY,\n ]);\n }\n\n if (!clickLatLng) {\n return;\n }\n\n // Handle Point-to-Point mode differently\n if (this.modeManager.getCurrentMode() === DrawMode.PointToPoint) {\n this.handlePointToPointClick(clickLatLng);\n return;\n }\n\n // Handle normal drawing modes (Add, Subtract)\n this.tracer.setLatLngs([clickLatLng]);\n this.startDraw();\n }\n\n private startDraw() {\n // console.log('startDraw');\n this.drawStartedEvents(true);\n }\n\n private setupKeyboardHandlers() {\n // console.log('setupKeyboardHandlers');\n this._boundKeyUpHandler = this.handleKeyUp.bind(this);\n document.addEventListener('keydown', this._boundKeyDownHandler);\n document.addEventListener('keyup', this._boundKeyUpHandler);\n }\n\n private removeKeyboardHandlers() {\n // console.log('removeKeyboardHandlers');\n document.removeEventListener('keydown', this._boundKeyDownHandler);\n document.removeEventListener('keyup', this._boundKeyUpHandler);\n }\n\n private handleKeyDown(e: KeyboardEvent) {\n // console.log('handleKeyDown');\n if (e.key === 'Escape') {\n if (this.modeManager.getCurrentMode() === DrawMode.PointToPoint) {\n this.cancelPointToPointDrawing();\n }\n }\n\n // Track modifier key state for edge deletion visual feedback\n const isModifierPressed = this.isModifierKeyPressed(e as any);\n if (isModifierPressed && !this.isModifierKeyHeld) {\n this.isModifierKeyHeld = true;\n this.updateAllMarkersForEdgeDeletion(true);\n }\n }\n\n private handleKeyUp(e: KeyboardEvent) {\n // console.log('handleKeyUp');\n // Track modifier key state for edge deletion visual feedback\n const isModifierPressed = this.isModifierKeyPressed(e as any);\n if (!isModifierPressed && this.isModifierKeyHeld) {\n this.isModifierKeyHeld = false;\n this.updateAllMarkersForEdgeDeletion(false);\n }\n }\n\n /**\n * Update all markers to show/hide edge deletion visual feedback\n */\n private updateAllMarkersForEdgeDeletion(showFeedback: boolean) {\n // console.log('updateAllMarkersForEdgeDeletion');\n this.arrayOfFeatureGroups.forEach((featureGroup) => {\n featureGroup.eachLayer((layer) => {\n if (layer instanceof L.Marker) {\n this.updateMarkerForEdgeDeletion(layer, showFeedback);\n }\n });\n });\n }\n\n /**\n * Update individual marker for edge deletion visual feedback\n */\n private updateMarkerForEdgeDeletion(marker: L.Marker, showFeedback: boolean) {\n // console.log('updateMarkerForEdgeDeletion');\n const element = marker.getElement();\n if (!element) return;\n\n if (showFeedback) {\n // Add hover listeners for edge deletion feedback\n element.addEventListener('mouseenter', this.onMarkerHoverForEdgeDeletionEvent);\n element.addEventListener('mouseleave', this.onMarkerLeaveForEdgeDeletionEvent);\n } else {\n // Remove hover listeners and reset style\n element.removeEventListener('mouseenter', this.onMarkerHoverForEdgeDeletionEvent);\n element.removeEventListener('mouseleave', this.onMarkerLeaveForEdgeDeletionEvent);\n element.style.backgroundColor = '';\n element.style.borderColor = '';\n }\n }\n\n /**\n * Handle marker hover when modifier key is held - event handler version\n */\n private onMarkerHoverForEdgeDeletionEvent = (e: Event) => {\n // console.log('onMarkerHoverForEdgeDeletionEvent');\n if (!this.isModifierKeyHeld) return;\n\n const element = e.target as HTMLElement;\n if (element) {\n element.style.backgroundColor = '#D9460F'; // Reddish color\n element.style.borderColor = '#D9460F';\n element.classList.add('edge-deletion-hover');\n }\n };\n\n /**\n * Handle marker leave when modifier key is held - event handler version\n */\n private onMarkerLeaveForEdgeDeletionEvent = (e: Event) => {\n // console.log('onMarkerLeaveForEdgeDeletionEvent');\n const element = e.target as HTMLElement;\n if (element) {\n element.style.backgroundColor = '';\n element.style.borderColor = '';\n element.classList.remove('edge-deletion-hover');\n }\n };\n\n private cancelPointToPointDrawing() {\n // console.log('cancelPointToPointDrawing');\n this.clearP2pMarkers();\n this.stopDraw();\n this.setDrawMode(DrawMode.Off);\n }\n\n // Point-to-Point state management\n private handlePointToPointClick(clickLatLng: L.LatLng) {\n // console.log('handlePointToPointClick');\n // console.log('=== P2P CLICK DEBUG ===');\n // console.log('Click coordinates:', {\n // lat: clickLatLng.lat,\n // lng: clickLatLng.lng,\n // precision: {\n // lat: clickLatLng.lat.toFixed(10),\n // lng: clickLatLng.lng.toFixed(10),\n // },\n // });\n\n if (!clickLatLng) {\n // console.log('No clickLatLng provided, returning');\n return;\n }\n\n const currentPoints = this.tracer.getLatLngs() as L.LatLng[];\n // console.log('Current points count:', currentPoints.length);\n // console.log(\n // 'Current points:',\n // currentPoints.map((p, i) => ({\n // index: i,\n // lat: p.lat,\n // lng: p.lng,\n // precision: {\n // lat: p.lat.toFixed(10),\n // lng: p.lng.toFixed(10),\n // },\n // })),\n // );\n\n // console.log('P2P markers count:', this.p2pMarkers.length);\n // console.log('Map zoom level:', this.map.getZoom());\n // console.log('Map center:', this.map.getCenter());\n\n // Check if clicking on the first point to close the polygon\n if (currentPoints.length >= 3 && this.p2pMarkers.length > 0) {\n const firstPoint = this.p2pMarkers[0].getLatLng();\n const isClickingFirst = this.isClickingFirstPoint(clickLatLng, firstPoint);\n // console.log('Checking first point click:', {\n // firstPoint: {\n // lat: firstPoint.lat,\n // lng: firstPoint.lng,\n // precision: {\n // lat: firstPoint.lat.toFixed(10),\n // lng: firstPoint.lng.toFixed(10),\n // },\n // },\n // distance: {\n // lat: Math.abs(clickLatLng.lat - firstPoint.lat),\n // lng: Math.abs(clickLatLng.lng - firstPoint.lng),\n // },\n // isClickingFirst: isClickingFirst,\n // });\n\n if (isClickingFirst) {\n // console.log('Completing polygon by clicking first point');\n this.completePointToPointPolygon();\n return;\n }\n }\n\n // Add point to tracer - use addLatLng to ensure points accumulate\n // console.log('Adding new point to tracer');\n this.tracer.addLatLng(clickLatLng);\n\n // Add a visual marker for the new point\n try {\n const isFirstMarker = this.p2pMarkers.length === 0;\n const markerClassName = isFirstMarker\n ? 'leaflet-polydraw-p2p-marker leaflet-polydraw-p2p-first-marker'\n : 'leaflet-polydraw-p2p-marker';\n\n const pointMarker = new L.Marker(clickLatLng, {\n icon: L.divIcon({\n className: markerClassName,\n iconSize: isFirstMarker ? [20, 20] : [10, 10],\n }),\n }).addTo(this.map);\n\n // Stop propagation on mousedown for all p2p markers to prevent adding new points on top of them\n pointMarker.on('mousedown', (e) => {\n L.DomEvent.stopPropagation(e);\n });\n\n // Add hover effects and click handler for the first marker when there are enough points to close\n if (isFirstMarker) {\n pointMarker.on('mouseover', () => {\n if (this.tracer.getLatLngs().length >= 3) {\n const element = pointMarker.getElement();\n if (element) {\n element.style.backgroundColor = '#4CAF50';\n element.style.borderColor = '#4CAF50';\n element.style.cursor = 'pointer';\n element.title = 'Click to close polygon';\n }\n }\n });\n\n pointMarker.on('mouseout', () => {\n const element = pointMarker.getElement();\n if (element) {\n element.style.backgroundColor = '';\n element.style.borderColor = '';\n element.style.cursor = '';\n element.title = '';\n }\n });\n\n // Add click handler to complete polygon when clicking first marker\n pointMarker.on('click', (e) => {\n if (this.tracer.getLatLngs().length >= 3) {\n L.DomEvent.stopPropagation(e);\n this.completePointToPointPolygon();\n }\n });\n }\n\n this.p2pMarkers.push(pointMarker);\n } catch (error) {\n // Handle marker creation errors in test environment\n }\n\n // Update visual style to show dashed line\n if (this.tracer.getLatLngs().length >= 2) {\n try {\n this.tracer.setStyle({\n color: defaultConfig.polyLineOptions.color,\n dashArray: '5, 5',\n });\n } catch (error) {\n // Handle tracer style errors in test environment\n }\n }\n }\n\n private isClickingFirstPoint(clickLatLng: L.LatLng, firstPoint: L.LatLng): boolean {\n // console.log('isClickingFirstPoint');\n if (!firstPoint) return false;\n\n // Use zoom-dependent tolerance - higher zoom = smaller tolerance\n const zoom = this.map.getZoom();\n // Base tolerance at zoom 10, scale down exponentially for higher zooms\n const baseTolerance = 0.0005;\n const tolerance = baseTolerance / Math.pow(2, Math.max(0, zoom - 10));\n\n // console.log('First point click tolerance check:', {\n // zoom: zoom,\n // baseTolerance: baseTolerance,\n // calculatedTolerance: tolerance,\n // clickLatLng: {\n // lat: clickLatLng.lat.toFixed(10),\n // lng: clickLatLng.lng.toFixed(10),\n // },\n // firstPoint: {\n // lat: firstPoint.lat.toFixed(10),\n // lng: firstPoint.lng.toFixed(10),\n // },\n // distances: {\n // lat: Math.abs(clickLatLng.lat - firstPoint.lat),\n // lng: Math.abs(clickLatLng.lng - firstPoint.lng),\n // },\n // });\n\n const latDiff = Math.abs(clickLatLng.lat - firstPoint.lat);\n const lngDiff = Math.abs(clickLatLng.lng - firstPoint.lng);\n const isClicking = latDiff < tolerance && lngDiff < tolerance;\n\n // console.log('First point click result:', {\n // tolerance: tolerance,\n // latDiff: latDiff,\n // lngDiff: lngDiff,\n // isClicking: isClicking,\n // });\n\n return isClicking;\n }\n\n private handleDoubleClick(e: L.LeafletMouseEvent) {\n // console.log('handleDoubleClick');\n // Only handle double-click in Point-to-Point mode\n if (this.modeManager.getCurrentMode() !== DrawMode.PointToPoint) {\n return;\n }\n\n const currentPoints = this.tracer.getLatLngs() as L.LatLng[];\n\n // Need at least 3 points to complete a polygon\n if (currentPoints.length >= 3) {\n this.completePointToPointPolygon();\n }\n }\n\n private completePointToPointPolygon() {\n // console.log('completePointToPointPolygon');\n const points = this.tracer.getLatLngs() as L.LatLng[];\n if (points.length < 3) {\n return; // Need at least 3 points\n }\n\n // console.log('=== P2P COMPLETION DEBUG ===');\n // console.log(\n // 'Original points from tracer:',\n // points.map((p, i) => ({\n // index: i,\n // lat: p.lat.toFixed(10),\n // lng: p.lng.toFixed(10),\n // })),\n // );\n\n // Close the polygon by adding first point at the end if not already closed\n const closedPoints = [...points];\n const firstPoint = points[0];\n const lastPoint = points[points.length - 1];\n\n if (firstPoint.lat !== lastPoint.lat || firstPoint.lng !== lastPoint.lng) {\n closedPoints.push(firstPoint);\n }\n\n // console.log(\n // 'Closed points:',\n // closedPoints.map((p, i) => ({\n // index: i,\n // lat: p.lat.toFixed(10),\n // lng: p.lng.toFixed(10),\n // })),\n // );\n\n // Convert to GeoJSON and create polygon directly (bypass createPolygonFromTrace for P2P)\n try {\n // Create coordinates array directly from points\n const coordinates = closedPoints.map((point) => [point.lng, point.lat] as [number, number]);\n const geoPos = this.turfHelper.getMultiPolygon([[coordinates]]);\n\n // console.log(\n // 'Direct polygon creation (bypassing createPolygonFromTrace):',\n // geoPos.geometry.coordinates[0].map((coord, i) => ({\n // index: i,\n // lng: typeof coord[0] === 'number' ? coord[0].toFixed(10) : coord[0],\n // lat: typeof coord[1] === 'number' ? coord[1].toFixed(10) : coord[1],\n // })),\n // );\n\n // Clear P2P markers and stop drawing first\n this.clearP2pMarkers();\n this.stopDraw();\n\n // Add polygon (disable simplification for P2P - every click is intentional)\n // Allow merging for P2P polygons so they merge with existing polygons\n this.polygonMutationManager.addPolygon(geoPos, { simplify: false, noMerge: false });\n\n // Update polygon information\n this.polygonInformation.createPolygonInformationStorage(this.arrayOfFeatureGroups);\n } catch (error) {\n console.warn('Error completing point-to-point polygon:', error);\n this.clearP2pMarkers();\n this.stopDraw();\n }\n }\n\n private clearP2pMarkers() {\n // console.log('clearP2pMarkers');\n this.p2pMarkers.forEach((marker) => this.map.removeLayer(marker));\n this.p2pMarkers = [];\n }\n\n /**\n * Detect if modifier key is pressed (Ctrl on Windows/Linux, Cmd on Mac)\n */\n private isModifierKeyPressed(event: MouseEvent): boolean {\n // console.log('isModifierKeyPressed');\n const userAgent = navigator.userAgent.toLowerCase();\n const isMac = userAgent.includes('mac');\n\n if (isMac) {\n return event.metaKey; // Cmd key on Mac\n } else {\n return event.ctrlKey; // Ctrl key on Windows/Linux\n }\n }\n\n private updateActivateButtonIndicator() {\n if (typeof this.getContainer !== 'function') {\n return; // In some test environments, the container may not be available.\n }\n const container = this.getContainer();\n if (!container) return;\n\n const activateButton = container.querySelector('.icon-activate') as HTMLElement;\n if (!activateButton) return;\n\n const hasPolygons = this.arrayOfFeatureGroups.length > 0;\n const isPanelClosed = !L.DomUtil.hasClass(activateButton, 'active');\n\n if (hasPolygons && isPanelClosed) {\n L.DomUtil.addClass(activateButton, 'polydraw-indicator-active');\n } else {\n L.DomUtil.removeClass(activateButton, 'polydraw-indicator-active');\n }\n }\n}\n\n// Add the polydraw method to L.control with proper typing\n(L.control as any).polydraw = function (\n options?: L.ControlOptions & { config?: PolydrawConfig; configPath?: string },\n): Polydraw {\n return new Polydraw(options);\n};\n\nexport default Polydraw;\n"],"names":["DrawMode","MarkerPosition","radians","distance","degrees","bearing","featureId","bbox","calculateArea","B","epsilon","sum","pointInPolygon","polygon","point","pip","isPointOnLineSegment","x1","y1","compare","defaultCompare","ringId","eventId","TinyQueue","Segment","intersection","sweeplineIntersections","lib","area","lineString","calcBbox","midpoint","this","t","e","n","i","u","r","s","a","o","L","l","D","h","c","f","g","v","y","d","_","p","m","k","x","I","E","N","T","S","C","R","w","pi","adder","cartesian","spherical","compose","x0","y0","compareIntersection","clip","ring","visible","clipLine","intersect","delta","code","projection","resample","center","require$$0","require$$1","pointInPolygonModule","b","M","j","RBush","require$$2","require$$3","concavemanModule","concaveman","getSqDist","intersects","clone","feature","BigNumber","temp","format","set","length","_a","_b","SplayTreeSet2","SplayTreeSet3","BigNumber2","polyclip.difference","intersection2","polyclip.intersection","turfBBox","__defProp","__defNormalProp","polyclip.union","rbush","rbush2","polygon2","featureCollection2","featureCollection","turf.featureCollection","union","turf.union","turf.explode","turf.multiPolygon","turf.convex","turf.lineString","turf.buffer","turf.simplify","turf.unkinkPolygon","turf.featureEach","turf.getCoords","kinks","turf.kinks","turf.point","turf.midpoint","turf.intersect","turf.area","turf.booleanPointInPolygon","turf.lineIntersect","turf.distance","turf.booleanWithin","turf.polygon","turf.bbox","bboxPolygon","turf.bboxPolygon","turf.difference","turf.nearestPoint","turf.length","turf.polygonToLine","turf.bezierSpline","turf.lineToPolygon","turf.centroid","intersectionArea","difference","markers","length2","simplify","bezier"],"mappings":"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","x_google_ignoreList":[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]}