{"version":3,"file":"vendor-turf-b409afe5.js","sources":["../../node_modules/@turf/helpers/dist/es/index.js","../../node_modules/@turf/invariant/dist/es/index.js","../../node_modules/@turf/clean-coords/dist/es/index.js","../../node_modules/@turf/meta/dist/es/index.js","../../node_modules/@turf/bbox/dist/es/index.js","../../node_modules/@turf/bbox-polygon/dist/es/index.js","../../node_modules/@turf/center/dist/es/index.js","../../node_modules/turf-jsts/jsts.mjs","../../node_modules/@turf/buffer/dist/es/index.js","../../node_modules/@turf/convex/dist/es/index.js","../../node_modules/@turf/clone/dist/es/index.js","../../node_modules/@turf/simplify/dist/es/index.js","../../node_modules/@turf/boolean-point-in-polygon/dist/es/index.js","../../node_modules/@turf/line-segment/dist/es/index.js","../../node_modules/@turf/line-intersect/dist/es/index.js","../../node_modules/@turf/polygon-to-line/dist/es/index.js","../../node_modules/@turf/boolean-disjoint/dist/es/index.js","../../node_modules/@turf/boolean-intersects/dist/es/index.js","../../node_modules/@turf/distance/dist/es/index.js","../../node_modules/@turf/intersect/dist/es/index.js","../../node_modules/@turf/hex-grid/dist/es/index.js","../../node_modules/@turf/union/dist/es/index.js"],"sourcesContent":["/**\n * @module helpers\n */\n/**\n * Earth Radius used with the Harvesine formula and approximates using a spherical (non-ellipsoid) Earth.\n *\n * @memberof helpers\n * @type {number}\n */\nexport var earthRadius = 6371008.8;\n/**\n * Unit of measurement factors using a spherical (non-ellipsoid) earth radius.\n *\n * @memberof helpers\n * @type {Object}\n */\nexport var factors = {\n centimeters: earthRadius * 100,\n centimetres: earthRadius * 100,\n degrees: earthRadius / 111325,\n feet: earthRadius * 3.28084,\n inches: earthRadius * 39.37,\n kilometers: earthRadius / 1000,\n kilometres: earthRadius / 1000,\n meters: earthRadius,\n metres: earthRadius,\n miles: earthRadius / 1609.344,\n millimeters: earthRadius * 1000,\n millimetres: earthRadius * 1000,\n nauticalmiles: earthRadius / 1852,\n radians: 1,\n yards: earthRadius * 1.0936,\n};\n/**\n * Units of measurement factors based on 1 meter.\n *\n * @memberof helpers\n * @type {Object}\n */\nexport var unitsFactors = {\n centimeters: 100,\n centimetres: 100,\n degrees: 1 / 111325,\n feet: 3.28084,\n inches: 39.37,\n kilometers: 1 / 1000,\n kilometres: 1 / 1000,\n meters: 1,\n metres: 1,\n miles: 1 / 1609.344,\n millimeters: 1000,\n millimetres: 1000,\n nauticalmiles: 1 / 1852,\n radians: 1 / earthRadius,\n yards: 1.0936133,\n};\n/**\n * Area of measurement factors based on 1 square meter.\n *\n * @memberof helpers\n * @type {Object}\n */\nexport var areaFactors = {\n acres: 0.000247105,\n centimeters: 10000,\n centimetres: 10000,\n feet: 10.763910417,\n hectares: 0.0001,\n inches: 1550.003100006,\n kilometers: 0.000001,\n kilometres: 0.000001,\n meters: 1,\n metres: 1,\n miles: 3.86e-7,\n millimeters: 1000000,\n millimetres: 1000000,\n yards: 1.195990046,\n};\n/**\n * Wraps a GeoJSON {@link Geometry} in a GeoJSON {@link Feature}.\n *\n * @name feature\n * @param {Geometry} geometry input geometry\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} a GeoJSON Feature\n * @example\n * var geometry = {\n * \"type\": \"Point\",\n * \"coordinates\": [110, 50]\n * };\n *\n * var feature = turf.feature(geometry);\n *\n * //=feature\n */\nexport function feature(geom, properties, options) {\n if (options === void 0) { options = {}; }\n var 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}\n/**\n * Creates a GeoJSON {@link Geometry} from a Geometry string type & coordinates.\n * For GeometryCollection type use `helpers.geometryCollection`\n *\n * @name geometry\n * @param {string} type Geometry Type\n * @param {Array} coordinates Coordinates\n * @param {Object} [options={}] Optional Parameters\n * @returns {Geometry} a GeoJSON Geometry\n * @example\n * var type = \"Point\";\n * var coordinates = [110, 50];\n * var geometry = turf.geometry(type, coordinates);\n * // => geometry\n */\nexport function geometry(type, coordinates, _options) {\n if (_options === void 0) { _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}\n/**\n * Creates a {@link Point} {@link Feature} from a Position.\n *\n * @name point\n * @param {Array} coordinates longitude, latitude position (each in decimal degrees)\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} a Point feature\n * @example\n * var point = turf.point([-75.343, 39.984]);\n *\n * //=point\n */\nexport function point(coordinates, properties, options) {\n if (options === void 0) { 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 var geom = {\n type: \"Point\",\n coordinates: coordinates,\n };\n return feature(geom, properties, options);\n}\n/**\n * Creates a {@link Point} {@link FeatureCollection} from an Array of Point coordinates.\n *\n * @name points\n * @param {Array>} coordinates an array of Points\n * @param {Object} [properties={}] Translate these properties to each Feature\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north]\n * associated with the FeatureCollection\n * @param {string|number} [options.id] Identifier associated with the FeatureCollection\n * @returns {FeatureCollection} Point Feature\n * @example\n * var points = turf.points([\n * [-75, 39],\n * [-80, 45],\n * [-78, 50]\n * ]);\n *\n * //=points\n */\nexport function points(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n return featureCollection(coordinates.map(function (coords) {\n return point(coords, properties);\n }), options);\n}\n/**\n * Creates a {@link Polygon} {@link Feature} from an Array of LinearRings.\n *\n * @name polygon\n * @param {Array>>} coordinates an array of LinearRings\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} Polygon Feature\n * @example\n * var polygon = turf.polygon([[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]], { name: 'poly1' });\n *\n * //=polygon\n */\nexport function polygon(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n for (var _i = 0, coordinates_1 = coordinates; _i < coordinates_1.length; _i++) {\n var ring = coordinates_1[_i];\n if (ring.length < 4) {\n throw new Error(\"Each LinearRing of a Polygon must have 4 or more Positions.\");\n }\n for (var j = 0; j < ring[ring.length - 1].length; j++) {\n // Check if first point of Polygon contains two numbers\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 var geom = {\n type: \"Polygon\",\n coordinates: coordinates,\n };\n return feature(geom, properties, options);\n}\n/**\n * Creates a {@link Polygon} {@link FeatureCollection} from an Array of Polygon coordinates.\n *\n * @name polygons\n * @param {Array>>>} coordinates an array of Polygon coordinates\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the FeatureCollection\n * @returns {FeatureCollection} Polygon FeatureCollection\n * @example\n * var polygons = turf.polygons([\n * [[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]],\n * [[[-15, 42], [-14, 46], [-12, 41], [-17, 44], [-15, 42]]],\n * ]);\n *\n * //=polygons\n */\nexport function polygons(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n return featureCollection(coordinates.map(function (coords) {\n return polygon(coords, properties);\n }), options);\n}\n/**\n * Creates a {@link LineString} {@link Feature} from an Array of Positions.\n *\n * @name lineString\n * @param {Array>} coordinates an array of Positions\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} LineString Feature\n * @example\n * var linestring1 = turf.lineString([[-24, 63], [-23, 60], [-25, 65], [-20, 69]], {name: 'line 1'});\n * var linestring2 = turf.lineString([[-14, 43], [-13, 40], [-15, 45], [-10, 49]], {name: 'line 2'});\n *\n * //=linestring1\n * //=linestring2\n */\nexport function lineString(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n if (coordinates.length < 2) {\n throw new Error(\"coordinates must be an array of two or more positions\");\n }\n var geom = {\n type: \"LineString\",\n coordinates: coordinates,\n };\n return feature(geom, properties, options);\n}\n/**\n * Creates a {@link LineString} {@link FeatureCollection} from an Array of LineString coordinates.\n *\n * @name lineStrings\n * @param {Array>>} coordinates an array of LinearRings\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north]\n * associated with the FeatureCollection\n * @param {string|number} [options.id] Identifier associated with the FeatureCollection\n * @returns {FeatureCollection} LineString FeatureCollection\n * @example\n * var linestrings = turf.lineStrings([\n * [[-24, 63], [-23, 60], [-25, 65], [-20, 69]],\n * [[-14, 43], [-13, 40], [-15, 45], [-10, 49]]\n * ]);\n *\n * //=linestrings\n */\nexport function lineStrings(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n return featureCollection(coordinates.map(function (coords) {\n return lineString(coords, properties);\n }), options);\n}\n/**\n * Takes one or more {@link Feature|Features} and creates a {@link FeatureCollection}.\n *\n * @name featureCollection\n * @param {Feature[]} features input features\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {FeatureCollection} FeatureCollection of Features\n * @example\n * var locationA = turf.point([-75.343, 39.984], {name: 'Location A'});\n * var locationB = turf.point([-75.833, 39.284], {name: 'Location B'});\n * var locationC = turf.point([-75.534, 39.123], {name: 'Location C'});\n *\n * var collection = turf.featureCollection([\n * locationA,\n * locationB,\n * locationC\n * ]);\n *\n * //=collection\n */\nexport function featureCollection(features, options) {\n if (options === void 0) { options = {}; }\n var 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}\n/**\n * Creates a {@link Feature} based on a\n * coordinate array. Properties can be added optionally.\n *\n * @name multiLineString\n * @param {Array>>} coordinates an array of LineStrings\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} a MultiLineString feature\n * @throws {Error} if no coordinates are passed\n * @example\n * var multiLine = turf.multiLineString([[[0,0],[10,10]]]);\n *\n * //=multiLine\n */\nexport function multiLineString(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n var geom = {\n type: \"MultiLineString\",\n coordinates: coordinates,\n };\n return feature(geom, properties, options);\n}\n/**\n * Creates a {@link Feature} based on a\n * coordinate array. Properties can be added optionally.\n *\n * @name multiPoint\n * @param {Array>} coordinates an array of Positions\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} a MultiPoint feature\n * @throws {Error} if no coordinates are passed\n * @example\n * var multiPt = turf.multiPoint([[0,0],[10,10]]);\n *\n * //=multiPt\n */\nexport function multiPoint(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n var geom = {\n type: \"MultiPoint\",\n coordinates: coordinates,\n };\n return feature(geom, properties, options);\n}\n/**\n * Creates a {@link Feature} based on a\n * coordinate array. Properties can be added optionally.\n *\n * @name multiPolygon\n * @param {Array>>>} coordinates an array of Polygons\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} a multipolygon feature\n * @throws {Error} if no coordinates are passed\n * @example\n * var multiPoly = turf.multiPolygon([[[[0,0],[0,10],[10,10],[10,0],[0,0]]]]);\n *\n * //=multiPoly\n *\n */\nexport function multiPolygon(coordinates, properties, options) {\n if (options === void 0) { options = {}; }\n var geom = {\n type: \"MultiPolygon\",\n coordinates: coordinates,\n };\n return feature(geom, properties, options);\n}\n/**\n * Creates a {@link Feature} based on a\n * coordinate array. Properties can be added optionally.\n *\n * @name geometryCollection\n * @param {Array} geometries an array of GeoJSON Geometries\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} a GeoJSON GeometryCollection Feature\n * @example\n * var pt = turf.geometry(\"Point\", [100, 0]);\n * var line = turf.geometry(\"LineString\", [[101, 0], [102, 1]]);\n * var collection = turf.geometryCollection([pt, line]);\n *\n * // => collection\n */\nexport function geometryCollection(geometries, properties, options) {\n if (options === void 0) { options = {}; }\n var geom = {\n type: \"GeometryCollection\",\n geometries: geometries,\n };\n return feature(geom, properties, options);\n}\n/**\n * Round number to precision\n *\n * @param {number} num Number\n * @param {number} [precision=0] Precision\n * @returns {number} rounded number\n * @example\n * turf.round(120.4321)\n * //=120\n *\n * turf.round(120.4321, 2)\n * //=120.43\n */\nexport function round(num, precision) {\n if (precision === void 0) { precision = 0; }\n if (precision && !(precision >= 0)) {\n throw new Error(\"precision must be a positive number\");\n }\n var multiplier = Math.pow(10, precision || 0);\n return Math.round(num * multiplier) / multiplier;\n}\n/**\n * Convert a distance measurement (assuming a spherical Earth) from radians to a more friendly unit.\n * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet\n *\n * @name radiansToLength\n * @param {number} radians in radians across the sphere\n * @param {string} [units=\"kilometers\"] can be degrees, radians, miles, inches, yards, metres,\n * meters, kilometres, kilometers.\n * @returns {number} distance\n */\nexport function radiansToLength(radians, units) {\n if (units === void 0) { units = \"kilometers\"; }\n var factor = factors[units];\n if (!factor) {\n throw new Error(units + \" units is invalid\");\n }\n return radians * factor;\n}\n/**\n * Convert a distance measurement (assuming a spherical Earth) from a real-world unit into radians\n * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet\n *\n * @name lengthToRadians\n * @param {number} distance in real units\n * @param {string} [units=\"kilometers\"] can be degrees, radians, miles, inches, yards, metres,\n * meters, kilometres, kilometers.\n * @returns {number} radians\n */\nexport function lengthToRadians(distance, units) {\n if (units === void 0) { units = \"kilometers\"; }\n var factor = factors[units];\n if (!factor) {\n throw new Error(units + \" units is invalid\");\n }\n return distance / factor;\n}\n/**\n * Convert a distance measurement (assuming a spherical Earth) from a real-world unit into degrees\n * Valid units: miles, nauticalmiles, inches, yards, meters, metres, centimeters, kilometres, feet\n *\n * @name lengthToDegrees\n * @param {number} distance in real units\n * @param {string} [units=\"kilometers\"] can be degrees, radians, miles, inches, yards, metres,\n * meters, kilometres, kilometers.\n * @returns {number} degrees\n */\nexport function lengthToDegrees(distance, units) {\n return radiansToDegrees(lengthToRadians(distance, units));\n}\n/**\n * Converts any bearing angle from the north line direction (positive clockwise)\n * and returns an angle between 0-360 degrees (positive clockwise), 0 being the north line\n *\n * @name bearingToAzimuth\n * @param {number} bearing angle, between -180 and +180 degrees\n * @returns {number} angle between 0 and 360 degrees\n */\nexport function bearingToAzimuth(bearing) {\n var angle = bearing % 360;\n if (angle < 0) {\n angle += 360;\n }\n return angle;\n}\n/**\n * Converts an angle in radians to degrees\n *\n * @name radiansToDegrees\n * @param {number} radians angle in radians\n * @returns {number} degrees between 0 and 360 degrees\n */\nexport function radiansToDegrees(radians) {\n var degrees = radians % (2 * Math.PI);\n return (degrees * 180) / Math.PI;\n}\n/**\n * Converts an angle in degrees to radians\n *\n * @name degreesToRadians\n * @param {number} degrees angle between 0 and 360 degrees\n * @returns {number} angle in radians\n */\nexport function degreesToRadians(degrees) {\n var radians = degrees % 360;\n return (radians * Math.PI) / 180;\n}\n/**\n * Converts a length to the requested unit.\n * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet\n *\n * @param {number} length to be converted\n * @param {Units} [originalUnit=\"kilometers\"] of the length\n * @param {Units} [finalUnit=\"kilometers\"] returned unit\n * @returns {number} the converted length\n */\nexport function convertLength(length, originalUnit, finalUnit) {\n if (originalUnit === void 0) { originalUnit = \"kilometers\"; }\n if (finalUnit === void 0) { 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}\n/**\n * Converts a area to the requested unit.\n * Valid units: kilometers, kilometres, meters, metres, centimetres, millimeters, acres, miles, yards, feet, inches, hectares\n * @param {number} area to be converted\n * @param {Units} [originalUnit=\"meters\"] of the distance\n * @param {Units} [finalUnit=\"kilometers\"] returned unit\n * @returns {number} the converted area\n */\nexport function convertArea(area, originalUnit, finalUnit) {\n if (originalUnit === void 0) { originalUnit = \"meters\"; }\n if (finalUnit === void 0) { finalUnit = \"kilometers\"; }\n if (!(area >= 0)) {\n throw new Error(\"area must be a positive number\");\n }\n var startFactor = areaFactors[originalUnit];\n if (!startFactor) {\n throw new Error(\"invalid original units\");\n }\n var finalFactor = areaFactors[finalUnit];\n if (!finalFactor) {\n throw new Error(\"invalid final units\");\n }\n return (area / startFactor) * finalFactor;\n}\n/**\n * isNumber\n *\n * @param {*} num Number to validate\n * @returns {boolean} true/false\n * @example\n * turf.isNumber(123)\n * //=true\n * turf.isNumber('foo')\n * //=false\n */\nexport function isNumber(num) {\n return !isNaN(num) && num !== null && !Array.isArray(num);\n}\n/**\n * isObject\n *\n * @param {*} input variable to validate\n * @returns {boolean} true/false\n * @example\n * turf.isObject({elevation: 10})\n * //=true\n * turf.isObject('foo')\n * //=false\n */\nexport function isObject(input) {\n return !!input && input.constructor === Object;\n}\n/**\n * Validate BBox\n *\n * @private\n * @param {Array} bbox BBox to validate\n * @returns {void}\n * @throws Error if BBox is not valid\n * @example\n * validateBBox([-180, -40, 110, 50])\n * //=OK\n * validateBBox([-180, -40])\n * //=Error\n * validateBBox('Foo')\n * //=Error\n * validateBBox(5)\n * //=Error\n * validateBBox(null)\n * //=Error\n * validateBBox(undefined)\n * //=Error\n */\nexport function 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(function (num) {\n if (!isNumber(num)) {\n throw new Error(\"bbox must only contain numbers\");\n }\n });\n}\n/**\n * Validate Id\n *\n * @private\n * @param {string|number} id Id to validate\n * @returns {void}\n * @throws Error if Id is not valid\n * @example\n * validateId([-180, -40, 110, 50])\n * //=Error\n * validateId([-180, -40])\n * //=Error\n * validateId('Foo')\n * //=OK\n * validateId(5)\n * //=OK\n * validateId(null)\n * //=Error\n * validateId(undefined)\n * //=Error\n */\nexport function 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}\n","import { isNumber, } from \"@turf/helpers\";\n/**\n * Unwrap a coordinate from a Point Feature, Geometry or a single coordinate.\n *\n * @name getCoord\n * @param {Array|Geometry|Feature} coord GeoJSON Point or an Array of numbers\n * @returns {Array} coordinates\n * @example\n * var pt = turf.point([10, 10]);\n *\n * var coord = turf.getCoord(pt);\n * //= [10, 10]\n */\nexport function getCoord(coord) {\n if (!coord) {\n throw new Error(\"coord is required\");\n }\n if (!Array.isArray(coord)) {\n if (coord.type === \"Feature\" &&\n coord.geometry !== null &&\n 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) &&\n coord.length >= 2 &&\n !Array.isArray(coord[0]) &&\n !Array.isArray(coord[1])) {\n return coord;\n }\n throw new Error(\"coord must be GeoJSON Point or an Array of numbers\");\n}\n/**\n * Unwrap coordinates from a Feature, Geometry Object or an Array\n *\n * @name getCoords\n * @param {Array|Geometry|Feature} coords Feature, Geometry Object or an Array\n * @returns {Array} coordinates\n * @example\n * var poly = turf.polygon([[[119.32, -8.7], [119.55, -8.69], [119.51, -8.54], [119.32, -8.7]]]);\n *\n * var coords = turf.getCoords(poly);\n * //= [[[119.32, -8.7], [119.55, -8.69], [119.51, -8.54], [119.32, -8.7]]]\n */\nexport function getCoords(coords) {\n if (Array.isArray(coords)) {\n return coords;\n }\n // Feature\n if (coords.type === \"Feature\") {\n if (coords.geometry !== null) {\n return coords.geometry.coordinates;\n }\n }\n else {\n // Geometry\n if (coords.coordinates) {\n return coords.coordinates;\n }\n }\n throw new Error(\"coords must be GeoJSON Feature, Geometry Object or an Array\");\n}\n/**\n * Checks if coordinates contains a number\n *\n * @name containsNumber\n * @param {Array} coordinates GeoJSON Coordinates\n * @returns {boolean} true if Array contains a number\n */\nexport function containsNumber(coordinates) {\n if (coordinates.length > 1 &&\n isNumber(coordinates[0]) &&\n 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}\n/**\n * Enforce expectations about types of GeoJSON objects for Turf.\n *\n * @name geojsonType\n * @param {GeoJSON} value any GeoJSON object\n * @param {string} type expected GeoJSON type\n * @param {string} name name of calling function\n * @throws {Error} if value is not the expected type.\n */\nexport function 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(\"Invalid input to \" +\n name +\n \": must be a \" +\n type +\n \", given \" +\n value.type);\n }\n}\n/**\n * Enforce expectations about types of {@link Feature} inputs for Turf.\n * Internally this uses {@link geojsonType} to judge geometry types.\n *\n * @name featureOf\n * @param {Feature} feature a feature with an expected geometry type\n * @param {string} type expected GeoJSON type\n * @param {string} name name of calling function\n * @throws {Error} error if value is not the expected type.\n */\nexport function 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(\"Invalid input to \" + name + \", Feature with geometry required\");\n }\n if (!feature.geometry || feature.geometry.type !== type) {\n throw new Error(\"Invalid input to \" +\n name +\n \": must be a \" +\n type +\n \", given \" +\n feature.geometry.type);\n }\n}\n/**\n * Enforce expectations about types of {@link FeatureCollection} inputs for Turf.\n * Internally this uses {@link geojsonType} to judge geometry types.\n *\n * @name collectionOf\n * @param {FeatureCollection} featureCollection a FeatureCollection for which features will be judged\n * @param {string} type expected GeoJSON type\n * @param {string} name name of calling function\n * @throws {Error} if value is not the expected type.\n */\nexport function 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(\"Invalid input to \" + name + \", FeatureCollection required\");\n }\n for (var _i = 0, _a = featureCollection.features; _i < _a.length; _i++) {\n var feature = _a[_i];\n if (!feature || feature.type !== \"Feature\" || !feature.geometry) {\n throw new Error(\"Invalid input to \" + name + \", Feature with geometry required\");\n }\n if (!feature.geometry || feature.geometry.type !== type) {\n throw new Error(\"Invalid input to \" +\n name +\n \": must be a \" +\n type +\n \", given \" +\n feature.geometry.type);\n }\n }\n}\n/**\n * Get Geometry from Feature or Geometry Object\n *\n * @param {Feature|Geometry} geojson GeoJSON Feature or Geometry Object\n * @returns {Geometry|null} GeoJSON Geometry Object\n * @throws {Error} if geojson is not a Feature or Geometry Object\n * @example\n * var point = {\n * \"type\": \"Feature\",\n * \"properties\": {},\n * \"geometry\": {\n * \"type\": \"Point\",\n * \"coordinates\": [110, 40]\n * }\n * }\n * var geom = turf.getGeom(point)\n * //={\"type\": \"Point\", \"coordinates\": [110, 40]}\n */\nexport function getGeom(geojson) {\n if (geojson.type === \"Feature\") {\n return geojson.geometry;\n }\n return geojson;\n}\n/**\n * Get GeoJSON object's type, Geometry type is prioritize.\n *\n * @param {GeoJSON} geojson GeoJSON object\n * @param {string} [name=\"geojson\"] name of the variable to display in error message (unused)\n * @returns {string} GeoJSON type\n * @example\n * var point = {\n * \"type\": \"Feature\",\n * \"properties\": {},\n * \"geometry\": {\n * \"type\": \"Point\",\n * \"coordinates\": [110, 40]\n * }\n * }\n * var geom = turf.getType(point)\n * //=\"Point\"\n */\nexport function 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}\n","import { feature } from \"@turf/helpers\";\nimport { getCoords, getType } from \"@turf/invariant\";\n// To-Do => Improve Typescript GeoJSON handling\n/**\n * Removes redundant coordinates from any GeoJSON Geometry.\n *\n * @name cleanCoords\n * @param {Geometry|Feature} geojson Feature or Geometry\n * @param {Object} [options={}] Optional parameters\n * @param {boolean} [options.mutate=false] allows GeoJSON input to be mutated\n * @returns {Geometry|Feature} the cleaned input Feature/Geometry\n * @example\n * var line = turf.lineString([[0, 0], [0, 2], [0, 5], [0, 8], [0, 8], [0, 10]]);\n * var multiPoint = turf.multiPoint([[0, 0], [0, 0], [2, 2]]);\n *\n * turf.cleanCoords(line).geometry.coordinates;\n * //= [[0, 0], [0, 10]]\n *\n * turf.cleanCoords(multiPoint).geometry.coordinates;\n * //= [[0, 0], [2, 2]]\n */\nfunction cleanCoords(geojson, options) {\n if (options === void 0) { options = {}; }\n // Backwards compatible with v4.0\n var mutate = typeof options === \"object\" ? options.mutate : options;\n if (!geojson)\n throw new Error(\"geojson is required\");\n var type = getType(geojson);\n // Store new \"clean\" points in this Array\n var newCoords = [];\n switch (type) {\n case \"LineString\":\n newCoords = cleanLine(geojson);\n break;\n case \"MultiLineString\":\n case \"Polygon\":\n getCoords(geojson).forEach(function (line) {\n newCoords.push(cleanLine(line));\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));\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 // Support input mutation\n if (geojson.coordinates) {\n if (mutate === true) {\n geojson.coordinates = newCoords;\n return geojson;\n }\n return { type: type, coordinates: newCoords };\n }\n else {\n if (mutate === true) {\n geojson.geometry.coordinates = newCoords;\n return geojson;\n }\n return feature({ type: type, coordinates: newCoords }, geojson.properties, {\n bbox: geojson.bbox,\n id: geojson.id,\n });\n }\n}\n/**\n * Clean Coords\n *\n * @private\n * @param {Array|LineString} line Line\n * @returns {Array} Cleaned coordinates\n */\nfunction cleanLine(line) {\n var points = getCoords(line);\n // handle \"clean\" segment\n if (points.length === 2 && !equals(points[0], points[1]))\n 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] &&\n 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(newPoints[newPointsLength - 3], newPoints[newPointsLength - 1], newPoints[newPointsLength - 2]))\n newPoints.splice(newPoints.length - 2, 1);\n }\n }\n }\n newPoints.push(points[points.length - 1]);\n newPointsLength = newPoints.length;\n if (equals(points[0], points[points.length - 1]) && newPointsLength < 4)\n throw new Error(\"invalid polygon\");\n if (isPointOnLineSegment(newPoints[newPointsLength - 3], newPoints[newPointsLength - 1], newPoints[newPointsLength - 2]))\n newPoints.splice(newPoints.length - 2, 1);\n return newPoints;\n}\n/**\n * Compares two points and returns if they are equals\n *\n * @private\n * @param {Position} pt1 point\n * @param {Position} pt2 point\n * @returns {boolean} true if they are equals\n */\nfunction equals(pt1, pt2) {\n return pt1[0] === pt2[0] && pt1[1] === pt2[1];\n}\n/**\n * Returns if `point` is on the segment between `start` and `end`.\n * Borrowed from `@turf/boolean-point-on-line` to speed up the evaluation (instead of using the module as dependency)\n *\n * @private\n * @param {Position} start coord pair of start of line\n * @param {Position} end coord pair of end of line\n * @param {Position} point coord pair of point to check\n * @returns {boolean} true/false\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)\n 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\n return dyl > 0 ? startY <= y && y <= endY : endY <= y && y <= startY;\n}\nexport default cleanCoords;\n","import { feature, lineString, isObject, point } from '@turf/helpers';\n\n/**\n * Callback for coordEach\n *\n * @callback coordEachCallback\n * @param {Array} currentCoord The current coordinate being processed.\n * @param {number} coordIndex The current index of the coordinate being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n * @param {number} geometryIndex The current index of the Geometry being processed.\n */\n\n/**\n * Iterate over coordinates in any GeoJSON object, similar to Array.forEach()\n *\n * @name coordEach\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (currentCoord, coordIndex, featureIndex, multiFeatureIndex)\n * @param {boolean} [excludeWrapCoord=false] whether or not to include the final coordinate of LinearRings that wraps the ring in its iteration.\n * @returns {void}\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {\"foo\": \"bar\"}),\n * turf.point([36, 53], {\"hello\": \"world\"})\n * ]);\n *\n * turf.coordEach(features, function (currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) {\n * //=currentCoord\n * //=coordIndex\n * //=featureIndex\n * //=multiFeatureIndex\n * //=geometryIndex\n * });\n */\nfunction coordEach(geojson, callback, excludeWrapCoord) {\n // Handles null Geometry -- Skips this GeoJSON\n if (geojson === null) return;\n var j,\n k,\n l,\n geometry,\n stopG,\n coords,\n geometryMaybeCollection,\n wrapShrink = 0,\n coordIndex = 0,\n isGeometryCollection,\n type = geojson.type,\n isFeatureCollection = type === \"FeatureCollection\",\n isFeature = type === \"Feature\",\n stop = isFeatureCollection ? geojson.features.length : 1;\n\n // This logic may look a little weird. The reason why it is that way\n // is because it's trying to be fast. GeoJSON supports multiple kinds\n // of objects at its root: FeatureCollection, Features, Geometries.\n // This function has the responsibility of handling all of them, and that\n // means that some of the `for` loops you see below actually just don't apply\n // to certain inputs. For instance, if you give this just a\n // Point geometry, then both loops are short-circuited and all we do\n // is gradually rename the input until it's called 'geometry'.\n //\n // This also aims to allocate as few resources as possible: just a\n // few numbers and booleans, rather than any temporary arrays as would\n // be required with the normalization approach.\n for (var featureIndex = 0; featureIndex < stop; featureIndex++) {\n geometryMaybeCollection = isFeatureCollection\n ? geojson.features[featureIndex].geometry\n : isFeature\n ? geojson.geometry\n : geojson;\n isGeometryCollection = geometryMaybeCollection\n ? geometryMaybeCollection.type === \"GeometryCollection\"\n : false;\n stopG = isGeometryCollection\n ? geometryMaybeCollection.geometries.length\n : 1;\n\n for (var geomIndex = 0; geomIndex < stopG; geomIndex++) {\n var multiFeatureIndex = 0;\n var geometryIndex = 0;\n geometry = isGeometryCollection\n ? geometryMaybeCollection.geometries[geomIndex]\n : geometryMaybeCollection;\n\n // Handles null Geometry -- Skips this geometry\n if (geometry === null) continue;\n coords = geometry.coordinates;\n var geomType = geometry.type;\n\n wrapShrink =\n excludeWrapCoord &&\n (geomType === \"Polygon\" || geomType === \"MultiPolygon\")\n ? 1\n : 0;\n\n switch (geomType) {\n case null:\n break;\n case \"Point\":\n if (\n callback(\n coords,\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) === false\n )\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 (\n callback(\n coords[j],\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) === false\n )\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 (\n callback(\n coords[j][k],\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) === false\n )\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 (\n callback(\n coords[j][k][l],\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) === false\n )\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 (\n coordEach(geometry.geometries[j], callback, excludeWrapCoord) ===\n false\n )\n return false;\n break;\n default:\n throw new Error(\"Unknown Geometry Type\");\n }\n }\n }\n}\n\n/**\n * Callback for coordReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback coordReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Array} currentCoord The current coordinate being processed.\n * @param {number} coordIndex The current index of the coordinate being processed.\n * Starts at index 0, if an initialValue is provided, and at index 1 otherwise.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n * @param {number} geometryIndex The current index of the Geometry being processed.\n */\n\n/**\n * Reduce coordinates in any GeoJSON object, similar to Array.reduce()\n *\n * @name coordReduce\n * @param {FeatureCollection|Geometry|Feature} geojson any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentCoord, coordIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @param {boolean} [excludeWrapCoord=false] whether or not to include the final coordinate of LinearRings that wraps the ring in its iteration.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {\"foo\": \"bar\"}),\n * turf.point([36, 53], {\"hello\": \"world\"})\n * ]);\n *\n * turf.coordReduce(features, function (previousValue, currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) {\n * //=previousValue\n * //=currentCoord\n * //=coordIndex\n * //=featureIndex\n * //=multiFeatureIndex\n * //=geometryIndex\n * return currentCoord;\n * });\n */\nfunction coordReduce(geojson, callback, initialValue, excludeWrapCoord) {\n var previousValue = initialValue;\n coordEach(\n geojson,\n function (\n currentCoord,\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) {\n if (coordIndex === 0 && initialValue === undefined)\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}\n\n/**\n * Callback for propEach\n *\n * @callback propEachCallback\n * @param {Object} currentProperties The current Properties being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n */\n\n/**\n * Iterate over properties in any GeoJSON object, similar to Array.forEach()\n *\n * @name propEach\n * @param {FeatureCollection|Feature} geojson any GeoJSON object\n * @param {Function} callback a method that takes (currentProperties, featureIndex)\n * @returns {void}\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * turf.propEach(features, function (currentProperties, featureIndex) {\n * //=currentProperties\n * //=featureIndex\n * });\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}\n\n/**\n * Callback for propReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback propReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {*} currentProperties The current Properties being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n */\n\n/**\n * Reduce properties in any GeoJSON object into a single value,\n * similar to how Array.reduce works. However, in this case we lazily run\n * the reduction, so an array of all properties is unnecessary.\n *\n * @name propReduce\n * @param {FeatureCollection|Feature} geojson any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentProperties, featureIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * turf.propReduce(features, function (previousValue, currentProperties, featureIndex) {\n * //=previousValue\n * //=currentProperties\n * //=featureIndex\n * return currentProperties\n * });\n */\nfunction propReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n propEach(geojson, function (currentProperties, featureIndex) {\n if (featureIndex === 0 && initialValue === undefined)\n previousValue = currentProperties;\n else\n previousValue = callback(previousValue, currentProperties, featureIndex);\n });\n return previousValue;\n}\n\n/**\n * Callback for featureEach\n *\n * @callback featureEachCallback\n * @param {Feature} currentFeature The current Feature being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n */\n\n/**\n * Iterate over features in any GeoJSON object, similar to\n * Array.forEach.\n *\n * @name featureEach\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (currentFeature, featureIndex)\n * @returns {void}\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * turf.featureEach(features, function (currentFeature, featureIndex) {\n * //=currentFeature\n * //=featureIndex\n * });\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}\n\n/**\n * Callback for featureReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback featureReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Feature} currentFeature The current Feature being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n */\n\n/**\n * Reduce features in any GeoJSON object, similar to Array.reduce().\n *\n * @name featureReduce\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentFeature, featureIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {\"foo\": \"bar\"}),\n * turf.point([36, 53], {\"hello\": \"world\"})\n * ]);\n *\n * turf.featureReduce(features, function (previousValue, currentFeature, featureIndex) {\n * //=previousValue\n * //=currentFeature\n * //=featureIndex\n * return currentFeature\n * });\n */\nfunction featureReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n featureEach(geojson, function (currentFeature, featureIndex) {\n if (featureIndex === 0 && initialValue === undefined)\n previousValue = currentFeature;\n else previousValue = callback(previousValue, currentFeature, featureIndex);\n });\n return previousValue;\n}\n\n/**\n * Get all coordinates from any GeoJSON object.\n *\n * @name coordAll\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @returns {Array>} coordinate position array\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * var coords = turf.coordAll(features);\n * //= [[26, 37], [36, 53]]\n */\nfunction coordAll(geojson) {\n var coords = [];\n coordEach(geojson, function (coord) {\n coords.push(coord);\n });\n return coords;\n}\n\n/**\n * Callback for geomEach\n *\n * @callback geomEachCallback\n * @param {Geometry} currentGeometry The current Geometry being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {Object} featureProperties The current Feature Properties being processed.\n * @param {Array} featureBBox The current Feature BBox being processed.\n * @param {number|string} featureId The current Feature Id being processed.\n */\n\n/**\n * Iterate over each geometry in any GeoJSON object, similar to Array.forEach()\n *\n * @name geomEach\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (currentGeometry, featureIndex, featureProperties, featureBBox, featureId)\n * @returns {void}\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * turf.geomEach(features, function (currentGeometry, featureIndex, featureProperties, featureBBox, featureId) {\n * //=currentGeometry\n * //=featureIndex\n * //=featureProperties\n * //=featureBBox\n * //=featureId\n * });\n */\nfunction geomEach(geojson, callback) {\n var i,\n j,\n g,\n geometry,\n stopG,\n geometryMaybeCollection,\n isGeometryCollection,\n featureProperties,\n featureBBox,\n featureId,\n featureIndex = 0,\n isFeatureCollection = geojson.type === \"FeatureCollection\",\n isFeature = geojson.type === \"Feature\",\n stop = isFeatureCollection ? geojson.features.length : 1;\n\n // This logic may look a little weird. The reason why it is that way\n // is because it's trying to be fast. GeoJSON supports multiple kinds\n // of objects at its root: FeatureCollection, Features, Geometries.\n // This function has the responsibility of handling all of them, and that\n // means that some of the `for` loops you see below actually just don't apply\n // to certain inputs. For instance, if you give this just a\n // Point geometry, then both loops are short-circuited and all we do\n // is gradually rename the input until it's called 'geometry'.\n //\n // This also aims to allocate as few resources as possible: just a\n // few numbers and booleans, rather than any temporary arrays as would\n // be required with the normalization approach.\n for (i = 0; i < stop; i++) {\n geometryMaybeCollection = isFeatureCollection\n ? geojson.features[i].geometry\n : isFeature\n ? geojson.geometry\n : geojson;\n featureProperties = isFeatureCollection\n ? geojson.features[i].properties\n : isFeature\n ? geojson.properties\n : {};\n featureBBox = isFeatureCollection\n ? geojson.features[i].bbox\n : isFeature\n ? geojson.bbox\n : undefined;\n featureId = isFeatureCollection\n ? geojson.features[i].id\n : isFeature\n ? geojson.id\n : undefined;\n isGeometryCollection = geometryMaybeCollection\n ? geometryMaybeCollection.type === \"GeometryCollection\"\n : false;\n stopG = isGeometryCollection\n ? geometryMaybeCollection.geometries.length\n : 1;\n\n for (g = 0; g < stopG; g++) {\n geometry = isGeometryCollection\n ? geometryMaybeCollection.geometries[g]\n : geometryMaybeCollection;\n\n // Handle null Geometry\n if (geometry === null) {\n if (\n callback(\n null,\n featureIndex,\n featureProperties,\n featureBBox,\n featureId\n ) === false\n )\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 (\n callback(\n geometry,\n featureIndex,\n featureProperties,\n featureBBox,\n featureId\n ) === false\n )\n return false;\n break;\n }\n case \"GeometryCollection\": {\n for (j = 0; j < geometry.geometries.length; j++) {\n if (\n callback(\n geometry.geometries[j],\n featureIndex,\n featureProperties,\n featureBBox,\n featureId\n ) === false\n )\n return false;\n }\n break;\n }\n default:\n throw new Error(\"Unknown Geometry Type\");\n }\n }\n // Only increase `featureIndex` per each feature\n featureIndex++;\n }\n}\n\n/**\n * Callback for geomReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback geomReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Geometry} currentGeometry The current Geometry being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {Object} featureProperties The current Feature Properties being processed.\n * @param {Array} featureBBox The current Feature BBox being processed.\n * @param {number|string} featureId The current Feature Id being processed.\n */\n\n/**\n * Reduce geometry in any GeoJSON object, similar to Array.reduce().\n *\n * @name geomReduce\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentGeometry, featureIndex, featureProperties, featureBBox, featureId)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * turf.geomReduce(features, function (previousValue, currentGeometry, featureIndex, featureProperties, featureBBox, featureId) {\n * //=previousValue\n * //=currentGeometry\n * //=featureIndex\n * //=featureProperties\n * //=featureBBox\n * //=featureId\n * return currentGeometry\n * });\n */\nfunction geomReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n geomEach(\n geojson,\n function (\n currentGeometry,\n featureIndex,\n featureProperties,\n featureBBox,\n featureId\n ) {\n if (featureIndex === 0 && initialValue === undefined)\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}\n\n/**\n * Callback for flattenEach\n *\n * @callback flattenEachCallback\n * @param {Feature} currentFeature The current flattened feature being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n */\n\n/**\n * Iterate over flattened features in any GeoJSON object, similar to\n * Array.forEach.\n *\n * @name flattenEach\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (currentFeature, featureIndex, multiFeatureIndex)\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.multiPoint([[40, 30], [36, 53]], {hello: 'world'})\n * ]);\n *\n * turf.flattenEach(features, function (currentFeature, featureIndex, multiFeatureIndex) {\n * //=currentFeature\n * //=featureIndex\n * //=multiFeatureIndex\n * });\n */\nfunction flattenEach(geojson, callback) {\n geomEach(geojson, function (geometry, featureIndex, properties, bbox, id) {\n // Callback for single geometry\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 (\n callback(\n feature(geometry, properties, { bbox: bbox, id: id }),\n featureIndex,\n 0\n ) === false\n )\n return false;\n return;\n }\n\n var geomType;\n\n // Callback for multi-geometry\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\n for (\n var multiFeatureIndex = 0;\n multiFeatureIndex < geometry.coordinates.length;\n multiFeatureIndex++\n ) {\n var coordinate = geometry.coordinates[multiFeatureIndex];\n var geom = {\n type: geomType,\n coordinates: coordinate,\n };\n if (\n callback(feature(geom, properties), featureIndex, multiFeatureIndex) ===\n false\n )\n return false;\n }\n });\n}\n\n/**\n * Callback for flattenReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback flattenReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Feature} currentFeature The current Feature being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n */\n\n/**\n * Reduce flattened features in any GeoJSON object, similar to Array.reduce().\n *\n * @name flattenReduce\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentFeature, featureIndex, multiFeatureIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.multiPoint([[40, 30], [36, 53]], {hello: 'world'})\n * ]);\n *\n * turf.flattenReduce(features, function (previousValue, currentFeature, featureIndex, multiFeatureIndex) {\n * //=previousValue\n * //=currentFeature\n * //=featureIndex\n * //=multiFeatureIndex\n * return currentFeature\n * });\n */\nfunction flattenReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n flattenEach(\n geojson,\n function (currentFeature, featureIndex, multiFeatureIndex) {\n if (\n featureIndex === 0 &&\n multiFeatureIndex === 0 &&\n initialValue === undefined\n )\n previousValue = currentFeature;\n else\n previousValue = callback(\n previousValue,\n currentFeature,\n featureIndex,\n multiFeatureIndex\n );\n }\n );\n return previousValue;\n}\n\n/**\n * Callback for segmentEach\n *\n * @callback segmentEachCallback\n * @param {Feature} currentSegment The current Segment being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n * @param {number} geometryIndex The current index of the Geometry being processed.\n * @param {number} segmentIndex The current index of the Segment being processed.\n * @returns {void}\n */\n\n/**\n * Iterate over 2-vertex line segment in any GeoJSON object, similar to Array.forEach()\n * (Multi)Point geometries do not contain segments therefore they are ignored during this operation.\n *\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON\n * @param {Function} callback a method that takes (currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex)\n * @returns {void}\n * @example\n * var polygon = turf.polygon([[[-50, 5], [-40, -10], [-50, -10], [-40, 5], [-50, 5]]]);\n *\n * // Iterate over GeoJSON by 2-vertex segments\n * turf.segmentEach(polygon, function (currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) {\n * //=currentSegment\n * //=featureIndex\n * //=multiFeatureIndex\n * //=geometryIndex\n * //=segmentIndex\n * });\n *\n * // Calculate the total number of segments\n * var total = 0;\n * turf.segmentEach(polygon, function () {\n * total++;\n * });\n */\nfunction segmentEach(geojson, callback) {\n flattenEach(geojson, function (feature, featureIndex, multiFeatureIndex) {\n var segmentIndex = 0;\n\n // Exclude null Geometries\n if (!feature.geometry) return;\n // (Multi)Point geometries do not contain segments therefore they are ignored during this operation.\n var type = feature.geometry.type;\n if (type === \"Point\" || type === \"MultiPoint\") return;\n\n // Generate 2-vertex line segments\n var previousCoords;\n var previousFeatureIndex = 0;\n var previousMultiIndex = 0;\n var prevGeomIndex = 0;\n if (\n coordEach(\n feature,\n function (\n currentCoord,\n coordIndex,\n featureIndexCoord,\n multiPartIndexCoord,\n geometryIndex\n ) {\n // Simulating a meta.coordReduce() since `reduce` operations cannot be stopped by returning `false`\n if (\n previousCoords === undefined ||\n featureIndex > previousFeatureIndex ||\n multiPartIndexCoord > previousMultiIndex ||\n geometryIndex > prevGeomIndex\n ) {\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 feature.properties\n );\n if (\n callback(\n currentSegment,\n featureIndex,\n multiFeatureIndex,\n geometryIndex,\n segmentIndex\n ) === false\n )\n return false;\n segmentIndex++;\n previousCoords = currentCoord;\n }\n ) === false\n )\n return false;\n });\n}\n\n/**\n * Callback for segmentReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback segmentReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Feature} currentSegment The current Segment being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n * @param {number} geometryIndex The current index of the Geometry being processed.\n * @param {number} segmentIndex The current index of the Segment being processed.\n */\n\n/**\n * Reduce 2-vertex line segment in any GeoJSON object, similar to Array.reduce()\n * (Multi)Point geometries do not contain segments therefore they are ignored during this operation.\n *\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON\n * @param {Function} callback a method that takes (previousValue, currentSegment, currentIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {void}\n * @example\n * var polygon = turf.polygon([[[-50, 5], [-40, -10], [-50, -10], [-40, 5], [-50, 5]]]);\n *\n * // Iterate over GeoJSON by 2-vertex segments\n * turf.segmentReduce(polygon, function (previousSegment, currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) {\n * //= previousSegment\n * //= currentSegment\n * //= featureIndex\n * //= multiFeatureIndex\n * //= geometryIndex\n * //= segmentIndex\n * return currentSegment\n * });\n *\n * // Calculate the total number of segments\n * var initialValue = 0\n * var total = turf.segmentReduce(polygon, function (previousValue) {\n * previousValue++;\n * return previousValue;\n * }, initialValue);\n */\nfunction segmentReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n var started = false;\n segmentEach(\n geojson,\n function (\n currentSegment,\n featureIndex,\n multiFeatureIndex,\n geometryIndex,\n segmentIndex\n ) {\n if (started === false && initialValue === undefined)\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}\n\n/**\n * Callback for lineEach\n *\n * @callback lineEachCallback\n * @param {Feature} currentLine The current LineString|LinearRing being processed\n * @param {number} featureIndex The current index of the Feature being processed\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed\n * @param {number} geometryIndex The current index of the Geometry being processed\n */\n\n/**\n * Iterate over line or ring coordinates in LineString, Polygon, MultiLineString, MultiPolygon Features or Geometries,\n * similar to Array.forEach.\n *\n * @name lineEach\n * @param {Geometry|Feature} geojson object\n * @param {Function} callback a method that takes (currentLine, featureIndex, multiFeatureIndex, geometryIndex)\n * @example\n * var multiLine = turf.multiLineString([\n * [[26, 37], [35, 45]],\n * [[36, 53], [38, 50], [41, 55]]\n * ]);\n *\n * turf.lineEach(multiLine, function (currentLine, featureIndex, multiFeatureIndex, geometryIndex) {\n * //=currentLine\n * //=featureIndex\n * //=multiFeatureIndex\n * //=geometryIndex\n * });\n */\nfunction lineEach(geojson, callback) {\n // validation\n if (!geojson) throw new Error(\"geojson is required\");\n\n flattenEach(geojson, function (feature, featureIndex, multiFeatureIndex) {\n if (feature.geometry === null) return;\n var type = feature.geometry.type;\n var coords = feature.geometry.coordinates;\n switch (type) {\n case \"LineString\":\n if (callback(feature, featureIndex, multiFeatureIndex, 0, 0) === false)\n return false;\n break;\n case \"Polygon\":\n for (\n var geometryIndex = 0;\n geometryIndex < coords.length;\n geometryIndex++\n ) {\n if (\n callback(\n lineString(coords[geometryIndex], feature.properties),\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) === false\n )\n return false;\n }\n break;\n }\n });\n}\n\n/**\n * Callback for lineReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback lineReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Feature} currentLine The current LineString|LinearRing being processed.\n * @param {number} featureIndex The current index of the Feature being processed\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed\n * @param {number} geometryIndex The current index of the Geometry being processed\n */\n\n/**\n * Reduce features in any GeoJSON object, similar to Array.reduce().\n *\n * @name lineReduce\n * @param {Geometry|Feature} geojson object\n * @param {Function} callback a method that takes (previousValue, currentLine, featureIndex, multiFeatureIndex, geometryIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var multiPoly = turf.multiPolygon([\n * turf.polygon([[[12,48],[2,41],[24,38],[12,48]], [[9,44],[13,41],[13,45],[9,44]]]),\n * turf.polygon([[[5, 5], [0, 0], [2, 2], [4, 4], [5, 5]]])\n * ]);\n *\n * turf.lineReduce(multiPoly, function (previousValue, currentLine, featureIndex, multiFeatureIndex, geometryIndex) {\n * //=previousValue\n * //=currentLine\n * //=featureIndex\n * //=multiFeatureIndex\n * //=geometryIndex\n * return currentLine\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 === undefined)\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}\n\n/**\n * Finds a particular 2-vertex LineString Segment from a GeoJSON using `@turf/meta` indexes.\n *\n * Negative indexes are permitted.\n * Point & MultiPoint will always return null.\n *\n * @param {FeatureCollection|Feature|Geometry} geojson Any GeoJSON Feature or Geometry\n * @param {Object} [options={}] Optional parameters\n * @param {number} [options.featureIndex=0] Feature Index\n * @param {number} [options.multiFeatureIndex=0] Multi-Feature Index\n * @param {number} [options.geometryIndex=0] Geometry Index\n * @param {number} [options.segmentIndex=0] Segment Index\n * @param {Object} [options.properties={}] Translate Properties to output LineString\n * @param {BBox} [options.bbox={}] Translate BBox to output LineString\n * @param {number|string} [options.id={}] Translate Id to output LineString\n * @returns {Feature} 2-vertex GeoJSON Feature LineString\n * @example\n * var multiLine = turf.multiLineString([\n * [[10, 10], [50, 30], [30, 40]],\n * [[-10, -10], [-50, -30], [-30, -40]]\n * ]);\n *\n * // First Segment (defaults are 0)\n * turf.findSegment(multiLine);\n * // => Feature>\n *\n * // First Segment of 2nd Multi Feature\n * turf.findSegment(multiLine, {multiFeatureIndex: 1});\n * // => Feature>\n *\n * // Last Segment of Last Multi Feature\n * turf.findSegment(multiLine, {multiFeatureIndex: -1, segmentIndex: -1});\n * // => Feature>\n */\nfunction findSegment(geojson, options) {\n // Optional Parameters\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\n // Find FeatureIndex\n var properties = options.properties;\n var geometry;\n\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\n // Find SegmentIndex\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 =\n 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}\n\n/**\n * Finds a particular Point from a GeoJSON using `@turf/meta` indexes.\n *\n * Negative indexes are permitted.\n *\n * @param {FeatureCollection|Feature|Geometry} geojson Any GeoJSON Feature or Geometry\n * @param {Object} [options={}] Optional parameters\n * @param {number} [options.featureIndex=0] Feature Index\n * @param {number} [options.multiFeatureIndex=0] Multi-Feature Index\n * @param {number} [options.geometryIndex=0] Geometry Index\n * @param {number} [options.coordIndex=0] Coord Index\n * @param {Object} [options.properties={}] Translate Properties to output Point\n * @param {BBox} [options.bbox={}] Translate BBox to output Point\n * @param {number|string} [options.id={}] Translate Id to output Point\n * @returns {Feature} 2-vertex GeoJSON Feature Point\n * @example\n * var multiLine = turf.multiLineString([\n * [[10, 10], [50, 30], [30, 40]],\n * [[-10, -10], [-50, -30], [-30, -40]]\n * ]);\n *\n * // First Segment (defaults are 0)\n * turf.findPoint(multiLine);\n * // => Feature>\n *\n * // First Segment of the 2nd Multi-Feature\n * turf.findPoint(multiLine, {multiFeatureIndex: 1});\n * // => Feature>\n *\n * // Last Segment of last Multi-Feature\n * turf.findPoint(multiLine, {multiFeatureIndex: -1, coordIndex: -1});\n * // => Feature>\n */\nfunction findPoint(geojson, options) {\n // Optional Parameters\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\n // Find FeatureIndex\n var properties = options.properties;\n var geometry;\n\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\n // Find Coord Index\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 =\n 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}\n\nexport { coordAll, coordEach, coordReduce, featureEach, featureReduce, findPoint, findSegment, flattenEach, flattenReduce, geomEach, geomReduce, lineEach, lineReduce, propEach, propReduce, segmentEach, segmentReduce };\n","import { coordEach } from \"@turf/meta\";\n/**\n * Takes a set of features, calculates the bbox of all input features, and returns a bounding box.\n *\n * @name bbox\n * @param {GeoJSON} geojson any GeoJSON object\n * @returns {BBox} bbox extent in [minX, minY, maxX, maxY] order\n * @example\n * var line = turf.lineString([[-74, 40], [-78, 42], [-82, 35]]);\n * var bbox = turf.bbox(line);\n * var bboxPolygon = turf.bboxPolygon(bbox);\n *\n * //addToMap\n * var addToMap = [line, bboxPolygon]\n */\nfunction bbox(geojson) {\n var result = [Infinity, Infinity, -Infinity, -Infinity];\n coordEach(geojson, function (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}\nbbox[\"default\"] = bbox;\nexport default bbox;\n","import { polygon } from \"@turf/helpers\";\n/**\n * Takes a bbox and returns an equivalent {@link Polygon|polygon}.\n *\n * @name bboxPolygon\n * @param {BBox} bbox extent in [minX, minY, maxX, maxY] order\n * @param {Object} [options={}] Optional parameters\n * @param {Properties} [options.properties={}] Translate properties to Polygon\n * @param {string|number} [options.id={}] Translate Id to Polygon\n * @returns {Feature} a Polygon representation of the bounding box\n * @example\n * var bbox = [0, 0, 10, 10];\n *\n * var poly = turf.bboxPolygon(bbox);\n *\n * //addToMap\n * var addToMap = [poly]\n */\nexport default function bboxPolygon(bbox, options) {\n if (options === void 0) { options = {}; }\n // Convert BBox positions to Numbers\n // No performance loss for including Number()\n // https://github.com/Turfjs/turf/issues/1119\n var west = Number(bbox[0]);\n var south = Number(bbox[1]);\n var east = Number(bbox[2]);\n var north = Number(bbox[3]);\n if (bbox.length === 6) {\n throw new Error(\"@turf/bbox-polygon does not support BBox with 6 positions\");\n }\n var lowLeft = [west, south];\n var topLeft = [west, north];\n var topRight = [east, north];\n var lowRight = [east, south];\n return polygon([[lowLeft, lowRight, topRight, topLeft, lowLeft]], options.properties, { bbox: bbox, id: options.id });\n}\n","import bbox from \"@turf/bbox\";\nimport { point, } from \"@turf/helpers\";\n/**\n * Takes a {@link Feature} or {@link FeatureCollection} and returns the absolute center point of all features.\n *\n * @name center\n * @param {GeoJSON} geojson GeoJSON to be centered\n * @param {Object} [options={}] Optional parameters\n * @param {Object} [options.properties={}] Translate GeoJSON Properties to Point\n * @param {Object} [options.bbox={}] Translate GeoJSON BBox to Point\n * @param {Object} [options.id={}] Translate GeoJSON Id to Point\n * @returns {Feature} a Point feature at the absolute center point of all input features\n * @example\n * var features = turf.points([\n * [-97.522259, 35.4691],\n * [-97.502754, 35.463455],\n * [-97.508269, 35.463245]\n * ]);\n *\n * var center = turf.center(features);\n *\n * //addToMap\n * var addToMap = [features, center]\n * center.properties['marker-size'] = 'large';\n * center.properties['marker-color'] = '#000';\n */\nfunction center(geojson, options) {\n if (options === void 0) { options = {}; }\n var ext = bbox(geojson);\n var x = (ext[0] + ext[2]) / 2;\n var y = (ext[1] + ext[3]) / 2;\n return point([x, y], options.properties, options);\n}\nexport default center;\n","/* Polyfill service v3.13.0\n * For detailed credits and licence information see http://github.com/financial-times/polyfill-service\n *\n * - Array.prototype.fill, License: CC0 */\n\nif (!('fill' in Array.prototype)) {\n Object.defineProperty(Array.prototype, 'fill', {\n configurable: true,\n value: function fill (value) {\n if (this === undefined || this === null) {\n throw new TypeError(this + ' is not an object')\n }\n\n var arrayLike = Object(this);\n\n var length = Math.max(Math.min(arrayLike.length, 9007199254740991), 0) || 0;\n\n var relativeStart = 1 in arguments ? parseInt(Number(arguments[1]), 10) || 0 : 0;\n\n relativeStart = relativeStart < 0 ? Math.max(length + relativeStart, 0) : Math.min(relativeStart, length);\n\n var relativeEnd = 2 in arguments && arguments[2] !== undefined ? parseInt(Number(arguments[2]), 10) || 0 : length;\n\n relativeEnd = relativeEnd < 0 ? Math.max(length + arguments[2], 0) : Math.min(relativeEnd, length);\n\n while (relativeStart < relativeEnd) {\n arrayLike[relativeStart] = value;\n\n ++relativeStart;\n }\n\n return arrayLike\n },\n writable: true\n });\n}\n\n/**\n * Polyfill for IE support\n */\nNumber.isFinite = Number.isFinite || function (value) {\n return typeof value === 'number' && isFinite(value)\n};\n\nNumber.isInteger = Number.isInteger || function (val) {\n return typeof val === 'number' &&\n isFinite(val) &&\n Math.floor(val) === val\n};\n\nNumber.parseFloat = Number.parseFloat || parseFloat;\n\nNumber.isNaN = Number.isNaN || function (value) {\n return value !== value // eslint-disable-line\n};\n\n/**\n * Polyfill for IE support\n */\nMath.trunc = Math.trunc || function (x) {\n return x < 0 ? Math.ceil(x) : Math.floor(x)\n};\n\nvar NumberUtil = function NumberUtil () {};\n\nNumberUtil.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nNumberUtil.prototype.getClass = function getClass () {\n return NumberUtil\n};\nNumberUtil.prototype.equalsWithTolerance = function equalsWithTolerance (x1, x2, tolerance) {\n return Math.abs(x1 - x2) <= tolerance\n};\n\nvar IllegalArgumentException = (function (Error) {\n\tfunction IllegalArgumentException (message) {\n\t\tError.call(this, message);\n\t\tthis.name = 'IllegalArgumentException';\n\t\tthis.message = message;\n\t\tthis.stack = (new Error()).stack;\n\t}\n\n\tif ( Error ) IllegalArgumentException.__proto__ = Error;\n\tIllegalArgumentException.prototype = Object.create( Error && Error.prototype );\n\tIllegalArgumentException.prototype.constructor = IllegalArgumentException;\n\n\treturn IllegalArgumentException;\n}(Error));\n\nvar Double = function Double () {};\n\nvar staticAccessors$1 = { MAX_VALUE: { configurable: true } };\n\nDouble.isNaN = function isNaN (n) { return Number.isNaN(n) };\nDouble.doubleToLongBits = function doubleToLongBits (n) { return n };\nDouble.longBitsToDouble = function longBitsToDouble (n) { return n };\nDouble.isInfinite = function isInfinite (n) { return !Number.isFinite(n) };\nstaticAccessors$1.MAX_VALUE.get = function () { return Number.MAX_VALUE };\n\nObject.defineProperties( Double, staticAccessors$1 );\n\nvar Comparable = function Comparable () {};\n\nvar Clonable = function Clonable () {};\n\nvar Comparator = function Comparator () {};\n\nfunction Serializable () {}\n\n// import Assert from '../util/Assert'\n\nvar Coordinate = function Coordinate () {\n this.x = null;\n this.y = null;\n this.z = null;\n if (arguments.length === 0) {\n this.x = 0.0;\n this.y = 0.0;\n this.z = Coordinate.NULL_ORDINATE;\n } else if (arguments.length === 1) {\n var c = arguments[0];\n this.x = c.x;\n this.y = c.y;\n this.z = c.z;\n } else if (arguments.length === 2) {\n this.x = arguments[0];\n this.y = arguments[1];\n this.z = Coordinate.NULL_ORDINATE;\n } else if (arguments.length === 3) {\n this.x = arguments[0];\n this.y = arguments[1];\n this.z = arguments[2];\n }\n};\n\nvar staticAccessors = { DimensionalComparator: { configurable: true },serialVersionUID: { configurable: true },NULL_ORDINATE: { configurable: true },X: { configurable: true },Y: { configurable: true },Z: { configurable: true } };\nCoordinate.prototype.setOrdinate = function setOrdinate (ordinateIndex, value) {\n switch (ordinateIndex) {\n case Coordinate.X:\n this.x = value;\n break\n case Coordinate.Y:\n this.y = value;\n break\n case Coordinate.Z:\n this.z = value;\n break\n default:\n throw new IllegalArgumentException('Invalid ordinate index: ' + ordinateIndex)\n }\n};\nCoordinate.prototype.equals2D = function equals2D () {\n if (arguments.length === 1) {\n var other = arguments[0];\n if (this.x !== other.x) {\n return false\n }\n if (this.y !== other.y) {\n return false\n }\n return true\n } else if (arguments.length === 2) {\n var c = arguments[0];\n var tolerance = arguments[1];\n if (!NumberUtil.equalsWithTolerance(this.x, c.x, tolerance)) {\n return false\n }\n if (!NumberUtil.equalsWithTolerance(this.y, c.y, tolerance)) {\n return false\n }\n return true\n }\n};\nCoordinate.prototype.getOrdinate = function getOrdinate (ordinateIndex) {\n switch (ordinateIndex) {\n case Coordinate.X:\n return this.x\n case Coordinate.Y:\n return this.y\n case Coordinate.Z:\n return this.z\n default:\n }\n throw new IllegalArgumentException('Invalid ordinate index: ' + ordinateIndex)\n};\nCoordinate.prototype.equals3D = function equals3D (other) {\n return this.x === other.x &&\n this.y === other.y &&\n ((this.z === other.z || Double.isNaN(this.z)) &&\n Double.isNaN(other.z))\n};\nCoordinate.prototype.equals = function equals (other) {\n if (!(other instanceof Coordinate)) {\n return false\n }\n return this.equals2D(other)\n};\nCoordinate.prototype.equalInZ = function equalInZ (c, tolerance) {\n return NumberUtil.equalsWithTolerance(this.z, c.z, tolerance)\n};\nCoordinate.prototype.compareTo = function compareTo (o) {\n var other = o;\n if (this.x < other.x) { return -1 }\n if (this.x > other.x) { return 1 }\n if (this.y < other.y) { return -1 }\n if (this.y > other.y) { return 1 }\n return 0\n};\nCoordinate.prototype.clone = function clone () {\n // try {\n // var coord = null\n // return coord\n // } catch (e) {\n // if (e instanceof CloneNotSupportedException) {\n // Assert.shouldNeverReachHere(\"this shouldn't happen because this class is Cloneable\")\n // return null\n // } else throw e\n // } finally {}\n};\nCoordinate.prototype.copy = function copy () {\n return new Coordinate(this)\n};\nCoordinate.prototype.toString = function toString () {\n return '(' + this.x + ', ' + this.y + ', ' + this.z + ')'\n};\nCoordinate.prototype.distance3D = function distance3D (c) {\n var dx = this.x - c.x;\n var dy = this.y - c.y;\n var dz = this.z - c.z;\n return Math.sqrt(dx * dx + dy * dy + dz * dz)\n};\nCoordinate.prototype.distance = function distance (c) {\n var dx = this.x - c.x;\n var dy = this.y - c.y;\n return Math.sqrt(dx * dx + dy * dy)\n};\nCoordinate.prototype.hashCode = function hashCode () {\n var result = 17;\n result = 37 * result + Coordinate.hashCode(this.x);\n result = 37 * result + Coordinate.hashCode(this.y);\n return result\n};\nCoordinate.prototype.setCoordinate = function setCoordinate (other) {\n this.x = other.x;\n this.y = other.y;\n this.z = other.z;\n};\nCoordinate.prototype.interfaces_ = function interfaces_ () {\n return [Comparable, Clonable, Serializable]\n};\nCoordinate.prototype.getClass = function getClass () {\n return Coordinate\n};\nCoordinate.hashCode = function hashCode () {\n if (arguments.length === 1) {\n var x = arguments[0];\n var f = Double.doubleToLongBits(x);\n return Math.trunc((f ^ f) >>> 32)\n }\n};\nstaticAccessors.DimensionalComparator.get = function () { return DimensionalComparator };\nstaticAccessors.serialVersionUID.get = function () { return 6683108902428366910 };\nstaticAccessors.NULL_ORDINATE.get = function () { return Double.NaN };\nstaticAccessors.X.get = function () { return 0 };\nstaticAccessors.Y.get = function () { return 1 };\nstaticAccessors.Z.get = function () { return 2 };\n\nObject.defineProperties( Coordinate, staticAccessors );\n\nvar DimensionalComparator = function DimensionalComparator (dimensionsToTest) {\n this._dimensionsToTest = 2;\n if (arguments.length === 0) {} else if (arguments.length === 1) {\n var dimensionsToTest$1 = arguments[0];\n if (dimensionsToTest$1 !== 2 && dimensionsToTest$1 !== 3) { throw new IllegalArgumentException('only 2 or 3 dimensions may be specified') }\n this._dimensionsToTest = dimensionsToTest$1;\n }\n};\nDimensionalComparator.prototype.compare = function compare (o1, o2) {\n var c1 = o1;\n var c2 = o2;\n var compX = DimensionalComparator.compare(c1.x, c2.x);\n if (compX !== 0) { return compX }\n var compY = DimensionalComparator.compare(c1.y, c2.y);\n if (compY !== 0) { return compY }\n if (this._dimensionsToTest <= 2) { return 0 }\n var compZ = DimensionalComparator.compare(c1.z, c2.z);\n return compZ\n};\nDimensionalComparator.prototype.interfaces_ = function interfaces_ () {\n return [Comparator]\n};\nDimensionalComparator.prototype.getClass = function getClass () {\n return DimensionalComparator\n};\nDimensionalComparator.compare = function compare (a, b) {\n if (a < b) { return -1 }\n if (a > b) { return 1 }\n if (Double.isNaN(a)) {\n if (Double.isNaN(b)) { return 0 }\n return -1\n }\n if (Double.isNaN(b)) { return 1 }\n return 0\n};\n\n// import hasInterface from '../../../../hasInterface'\n// import CoordinateSequence from './CoordinateSequence'\n\nvar CoordinateSequenceFactory = function CoordinateSequenceFactory () {};\n\nCoordinateSequenceFactory.prototype.create = function create () {\n // if (arguments.length === 1) {\n // if (arguments[0] instanceof Array) {\n // let coordinates = arguments[0]\n // } else if (hasInterface(arguments[0], CoordinateSequence)) {\n // let coordSeq = arguments[0]\n // }\n // } else if (arguments.length === 2) {\n // let size = arguments[0]\n // let dimension = arguments[1]\n // }\n};\nCoordinateSequenceFactory.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nCoordinateSequenceFactory.prototype.getClass = function getClass () {\n return CoordinateSequenceFactory\n};\n\nvar Location = function Location () {};\n\nvar staticAccessors$4 = { INTERIOR: { configurable: true },BOUNDARY: { configurable: true },EXTERIOR: { configurable: true },NONE: { configurable: true } };\n\nLocation.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nLocation.prototype.getClass = function getClass () {\n return Location\n};\nLocation.toLocationSymbol = function toLocationSymbol (locationValue) {\n switch (locationValue) {\n case Location.EXTERIOR:\n return 'e'\n case Location.BOUNDARY:\n return 'b'\n case Location.INTERIOR:\n return 'i'\n case Location.NONE:\n return '-'\n default:\n }\n throw new IllegalArgumentException('Unknown location value: ' + locationValue)\n};\nstaticAccessors$4.INTERIOR.get = function () { return 0 };\nstaticAccessors$4.BOUNDARY.get = function () { return 1 };\nstaticAccessors$4.EXTERIOR.get = function () { return 2 };\nstaticAccessors$4.NONE.get = function () { return -1 };\n\nObject.defineProperties( Location, staticAccessors$4 );\n\nvar hasInterface = function (o, i) {\n return o.interfaces_ && o.interfaces_().indexOf(i) > -1\n};\n\nvar MathUtil = function MathUtil () {};\n\nvar staticAccessors$5 = { LOG_10: { configurable: true } };\n\nMathUtil.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nMathUtil.prototype.getClass = function getClass () {\n return MathUtil\n};\nMathUtil.log10 = function log10 (x) {\n var ln = Math.log(x);\n if (Double.isInfinite(ln)) { return ln }\n if (Double.isNaN(ln)) { return ln }\n return ln / MathUtil.LOG_10\n};\nMathUtil.min = function min (v1, v2, v3, v4) {\n var min = v1;\n if (v2 < min) { min = v2; }\n if (v3 < min) { min = v3; }\n if (v4 < min) { min = v4; }\n return min\n};\nMathUtil.clamp = function clamp () {\n if (typeof arguments[2] === 'number' && (typeof arguments[0] === 'number' && typeof arguments[1] === 'number')) {\n var x = arguments[0];\n var min = arguments[1];\n var max = arguments[2];\n if (x < min) { return min }\n if (x > max) { return max }\n return x\n } else if (Number.isInteger(arguments[2]) && (Number.isInteger(arguments[0]) && Number.isInteger(arguments[1]))) {\n var x$1 = arguments[0];\n var min$1 = arguments[1];\n var max$1 = arguments[2];\n if (x$1 < min$1) { return min$1 }\n if (x$1 > max$1) { return max$1 }\n return x$1\n }\n};\nMathUtil.wrap = function wrap (index, max) {\n if (index < 0) {\n return max - -index % max\n }\n return index % max\n};\nMathUtil.max = function max () {\n if (arguments.length === 3) {\n var v1 = arguments[0];\n var v2 = arguments[1];\n var v3 = arguments[2];\n var max = v1;\n if (v2 > max) { max = v2; }\n if (v3 > max) { max = v3; }\n return max\n } else if (arguments.length === 4) {\n var v1$1 = arguments[0];\n var v2$1 = arguments[1];\n var v3$1 = arguments[2];\n var v4 = arguments[3];\n var max$1 = v1$1;\n if (v2$1 > max$1) { max$1 = v2$1; }\n if (v3$1 > max$1) { max$1 = v3$1; }\n if (v4 > max$1) { max$1 = v4; }\n return max$1\n }\n};\nMathUtil.average = function average (x1, x2) {\n return (x1 + x2) / 2.0\n};\nstaticAccessors$5.LOG_10.get = function () { return Math.log(10) };\n\nObject.defineProperties( MathUtil, staticAccessors$5 );\n\nvar StringBuffer = function StringBuffer (str) {\n this.str = str;\n};\nStringBuffer.prototype.append = function append (e) {\n this.str += e;\n};\n\nStringBuffer.prototype.setCharAt = function setCharAt (i, c) {\n this.str = this.str.substr(0, i) + c + this.str.substr(i + 1);\n};\n\nStringBuffer.prototype.toString = function toString (e) {\n return this.str\n};\n\nvar Integer = function Integer (value) {\n this.value = value;\n};\nInteger.prototype.intValue = function intValue () {\n return this.value\n};\nInteger.prototype.compareTo = function compareTo (o) {\n if (this.value < o) { return -1 }\n if (this.value > o) { return 1 }\n return 0\n};\nInteger.isNaN = function isNaN (n) { return Number.isNaN(n) };\n\nvar Character = function Character () {};\n\nCharacter.isWhitespace = function isWhitespace (c) { return ((c <= 32 && c >= 0) || c === 127) };\nCharacter.toUpperCase = function toUpperCase (c) { return c.toUpperCase() };\n\nvar DD = function DD () {\n this._hi = 0.0;\n this._lo = 0.0;\n if (arguments.length === 0) {\n this.init(0.0);\n } else if (arguments.length === 1) {\n if (typeof arguments[0] === 'number') {\n var x = arguments[0];\n this.init(x);\n } else if (arguments[0] instanceof DD) {\n var dd = arguments[0];\n this.init(dd);\n } else if (typeof arguments[0] === 'string') {\n var str = arguments[0];\n DD.call(this, DD.parse(str));\n }\n } else if (arguments.length === 2) {\n var hi = arguments[0];\n var lo = arguments[1];\n this.init(hi, lo);\n }\n};\n\nvar staticAccessors$7 = { PI: { configurable: true },TWO_PI: { configurable: true },PI_2: { configurable: true },E: { configurable: true },NaN: { configurable: true },EPS: { configurable: true },SPLIT: { configurable: true },MAX_PRINT_DIGITS: { configurable: true },TEN: { configurable: true },ONE: { configurable: true },SCI_NOT_EXPONENT_CHAR: { configurable: true },SCI_NOT_ZERO: { configurable: true } };\nDD.prototype.le = function le (y) {\n return (this._hi < y._hi || this._hi === y._hi) && this._lo <= y._lo\n};\nDD.prototype.extractSignificantDigits = function extractSignificantDigits (insertDecimalPoint, magnitude) {\n var y = this.abs();\n var mag = DD.magnitude(y._hi);\n var scale = DD.TEN.pow(mag);\n y = y.divide(scale);\n if (y.gt(DD.TEN)) {\n y = y.divide(DD.TEN);\n mag += 1;\n } else if (y.lt(DD.ONE)) {\n y = y.multiply(DD.TEN);\n mag -= 1;\n }\n var decimalPointPos = mag + 1;\n var buf = new StringBuffer();\n var numDigits = DD.MAX_PRINT_DIGITS - 1;\n for (var i = 0; i <= numDigits; i++) {\n if (insertDecimalPoint && i === decimalPointPos) {\n buf.append('.');\n }\n var digit = Math.trunc(y._hi);\n if (digit < 0) {\n break\n }\n var rebiasBy10 = false;\n var digitChar = 0;\n if (digit > 9) {\n rebiasBy10 = true;\n digitChar = '9';\n } else {\n digitChar = '0' + digit;\n }\n buf.append(digitChar);\n y = y.subtract(DD.valueOf(digit)).multiply(DD.TEN);\n if (rebiasBy10) { y.selfAdd(DD.TEN); }\n var continueExtractingDigits = true;\n var remMag = DD.magnitude(y._hi);\n if (remMag < 0 && Math.abs(remMag) >= numDigits - i) { continueExtractingDigits = false; }\n if (!continueExtractingDigits) { break }\n }\n magnitude[0] = mag;\n return buf.toString()\n};\nDD.prototype.sqr = function sqr () {\n return this.multiply(this)\n};\nDD.prototype.doubleValue = function doubleValue () {\n return this._hi + this._lo\n};\nDD.prototype.subtract = function subtract () {\n if (arguments[0] instanceof DD) {\n var y = arguments[0];\n return this.add(y.negate())\n } else if (typeof arguments[0] === 'number') {\n var y$1 = arguments[0];\n return this.add(-y$1)\n }\n};\nDD.prototype.equals = function equals () {\n if (arguments.length === 1) {\n var y = arguments[0];\n return this._hi === y._hi && this._lo === y._lo\n }\n};\nDD.prototype.isZero = function isZero () {\n return this._hi === 0.0 && this._lo === 0.0\n};\nDD.prototype.selfSubtract = function selfSubtract () {\n if (arguments[0] instanceof DD) {\n var y = arguments[0];\n if (this.isNaN()) { return this }\n return this.selfAdd(-y._hi, -y._lo)\n } else if (typeof arguments[0] === 'number') {\n var y$1 = arguments[0];\n if (this.isNaN()) { return this }\n return this.selfAdd(-y$1, 0.0)\n }\n};\nDD.prototype.getSpecialNumberString = function getSpecialNumberString () {\n if (this.isZero()) { return '0.0' }\n if (this.isNaN()) { return 'NaN ' }\n return null\n};\nDD.prototype.min = function min (x) {\n if (this.le(x)) {\n return this\n } else {\n return x\n }\n};\nDD.prototype.selfDivide = function selfDivide () {\n if (arguments.length === 1) {\n if (arguments[0] instanceof DD) {\n var y = arguments[0];\n return this.selfDivide(y._hi, y._lo)\n } else if (typeof arguments[0] === 'number') {\n var y$1 = arguments[0];\n return this.selfDivide(y$1, 0.0)\n }\n } else if (arguments.length === 2) {\n var yhi = arguments[0];\n var ylo = arguments[1];\n var hc = null;\n var tc = null;\n var hy = null;\n var ty = null;\n var C = null;\n var c = null;\n var U = null;\n var u = null;\n C = this._hi / yhi;\n c = DD.SPLIT * C;\n hc = c - C;\n u = DD.SPLIT * yhi;\n hc = c - hc;\n tc = C - hc;\n hy = u - yhi;\n U = C * yhi;\n hy = u - hy;\n ty = yhi - hy;\n u = hc * hy - U + hc * ty + tc * hy + tc * ty;\n c = (this._hi - U - u + this._lo - C * ylo) / yhi;\n u = C + c;\n this._hi = u;\n this._lo = C - u + c;\n return this\n }\n};\nDD.prototype.dump = function dump () {\n return 'DD<' + this._hi + ', ' + this._lo + '>'\n};\nDD.prototype.divide = function divide () {\n if (arguments[0] instanceof DD) {\n var y = arguments[0];\n var hc = null;\n var tc = null;\n var hy = null;\n var ty = null;\n var C = null;\n var c = null;\n var U = null;\n var u = null;\n C = this._hi / y._hi;\n c = DD.SPLIT * C;\n hc = c - C;\n u = DD.SPLIT * y._hi;\n hc = c - hc;\n tc = C - hc;\n hy = u - y._hi;\n U = C * y._hi;\n hy = u - hy;\n ty = y._hi - hy;\n u = hc * hy - U + hc * ty + tc * hy + tc * ty;\n c = (this._hi - U - u + this._lo - C * y._lo) / y._hi;\n u = C + c;\n var zhi = u;\n var zlo = C - u + c;\n return new DD(zhi, zlo)\n } else if (typeof arguments[0] === 'number') {\n var y$1 = arguments[0];\n if (Double.isNaN(y$1)) { return DD.createNaN() }\n return DD.copy(this).selfDivide(y$1, 0.0)\n }\n};\nDD.prototype.ge = function ge (y) {\n return (this._hi > y._hi || this._hi === y._hi) && this._lo >= y._lo\n};\nDD.prototype.pow = function pow (exp) {\n if (exp === 0.0) { return DD.valueOf(1.0) }\n var r = new DD(this);\n var s = DD.valueOf(1.0);\n var n = Math.abs(exp);\n if (n > 1) {\n while (n > 0) {\n if (n % 2 === 1) {\n s.selfMultiply(r);\n }\n n /= 2;\n if (n > 0) { r = r.sqr(); }\n }\n } else {\n s = r;\n }\n if (exp < 0) { return s.reciprocal() }\n return s\n};\nDD.prototype.ceil = function ceil () {\n if (this.isNaN()) { return DD.NaN }\n var fhi = Math.ceil(this._hi);\n var flo = 0.0;\n if (fhi === this._hi) {\n flo = Math.ceil(this._lo);\n }\n return new DD(fhi, flo)\n};\nDD.prototype.compareTo = function compareTo (o) {\n var other = o;\n if (this._hi < other._hi) { return -1 }\n if (this._hi > other._hi) { return 1 }\n if (this._lo < other._lo) { return -1 }\n if (this._lo > other._lo) { return 1 }\n return 0\n};\nDD.prototype.rint = function rint () {\n if (this.isNaN()) { return this }\n var plus5 = this.add(0.5);\n return plus5.floor()\n};\nDD.prototype.setValue = function setValue () {\n if (arguments[0] instanceof DD) {\n var value = arguments[0];\n this.init(value);\n return this\n } else if (typeof arguments[0] === 'number') {\n var value$1 = arguments[0];\n this.init(value$1);\n return this\n }\n};\nDD.prototype.max = function max (x) {\n if (this.ge(x)) {\n return this\n } else {\n return x\n }\n};\nDD.prototype.sqrt = function sqrt () {\n if (this.isZero()) { return DD.valueOf(0.0) }\n if (this.isNegative()) {\n return DD.NaN\n }\n var x = 1.0 / Math.sqrt(this._hi);\n var ax = this._hi * x;\n var axdd = DD.valueOf(ax);\n var diffSq = this.subtract(axdd.sqr());\n var d2 = diffSq._hi * (x * 0.5);\n return axdd.add(d2)\n};\nDD.prototype.selfAdd = function selfAdd () {\n if (arguments.length === 1) {\n if (arguments[0] instanceof DD) {\n var y = arguments[0];\n return this.selfAdd(y._hi, y._lo)\n } else if (typeof arguments[0] === 'number') {\n var y$1 = arguments[0];\n var H = null;\n var h = null;\n var S = null;\n var s = null;\n var e = null;\n var f = null;\n S = this._hi + y$1;\n e = S - this._hi;\n s = S - e;\n s = y$1 - e + (this._hi - s);\n f = s + this._lo;\n H = S + f;\n h = f + (S - H);\n this._hi = H + h;\n this._lo = h + (H - this._hi);\n return this\n }\n } else if (arguments.length === 2) {\n var yhi = arguments[0];\n var ylo = arguments[1];\n var H$1 = null;\n var h$1 = null;\n var T = null;\n var t = null;\n var S$1 = null;\n var s$1 = null;\n var e$1 = null;\n var f$1 = null;\n S$1 = this._hi + yhi;\n T = this._lo + ylo;\n e$1 = S$1 - this._hi;\n f$1 = T - this._lo;\n s$1 = S$1 - e$1;\n t = T - f$1;\n s$1 = yhi - e$1 + (this._hi - s$1);\n t = ylo - f$1 + (this._lo - t);\n e$1 = s$1 + T;\n H$1 = S$1 + e$1;\n h$1 = e$1 + (S$1 - H$1);\n e$1 = t + h$1;\n var zhi = H$1 + e$1;\n var zlo = e$1 + (H$1 - zhi);\n this._hi = zhi;\n this._lo = zlo;\n return this\n }\n};\nDD.prototype.selfMultiply = function selfMultiply () {\n if (arguments.length === 1) {\n if (arguments[0] instanceof DD) {\n var y = arguments[0];\n return this.selfMultiply(y._hi, y._lo)\n } else if (typeof arguments[0] === 'number') {\n var y$1 = arguments[0];\n return this.selfMultiply(y$1, 0.0)\n }\n } else if (arguments.length === 2) {\n var yhi = arguments[0];\n var ylo = arguments[1];\n var hx = null;\n var tx = null;\n var hy = null;\n var ty = null;\n var C = null;\n var c = null;\n C = DD.SPLIT * this._hi;\n hx = C - this._hi;\n c = DD.SPLIT * yhi;\n hx = C - hx;\n tx = this._hi - hx;\n hy = c - yhi;\n C = this._hi * yhi;\n hy = c - hy;\n ty = yhi - hy;\n c = hx * hy - C + hx * ty + tx * hy + tx * ty + (this._hi * ylo + this._lo * yhi);\n var zhi = C + c;\n hx = C - zhi;\n var zlo = c + hx;\n this._hi = zhi;\n this._lo = zlo;\n return this\n }\n};\nDD.prototype.selfSqr = function selfSqr () {\n return this.selfMultiply(this)\n};\nDD.prototype.floor = function floor () {\n if (this.isNaN()) { return DD.NaN }\n var fhi = Math.floor(this._hi);\n var flo = 0.0;\n if (fhi === this._hi) {\n flo = Math.floor(this._lo);\n }\n return new DD(fhi, flo)\n};\nDD.prototype.negate = function negate () {\n if (this.isNaN()) { return this }\n return new DD(-this._hi, -this._lo)\n};\nDD.prototype.clone = function clone () {\n // try {\n // return null\n // } catch (ex) {\n // if (ex instanceof CloneNotSupportedException) {\n // return null\n // } else throw ex\n // } finally {}\n};\nDD.prototype.multiply = function multiply () {\n if (arguments[0] instanceof DD) {\n var y = arguments[0];\n if (y.isNaN()) { return DD.createNaN() }\n return DD.copy(this).selfMultiply(y)\n } else if (typeof arguments[0] === 'number') {\n var y$1 = arguments[0];\n if (Double.isNaN(y$1)) { return DD.createNaN() }\n return DD.copy(this).selfMultiply(y$1, 0.0)\n }\n};\nDD.prototype.isNaN = function isNaN () {\n return Double.isNaN(this._hi)\n};\nDD.prototype.intValue = function intValue () {\n return Math.trunc(this._hi)\n};\nDD.prototype.toString = function toString () {\n var mag = DD.magnitude(this._hi);\n if (mag >= -3 && mag <= 20) { return this.toStandardNotation() }\n return this.toSciNotation()\n};\nDD.prototype.toStandardNotation = function toStandardNotation () {\n var specialStr = this.getSpecialNumberString();\n if (specialStr !== null) { return specialStr }\n var magnitude = new Array(1).fill(null);\n var sigDigits = this.extractSignificantDigits(true, magnitude);\n var decimalPointPos = magnitude[0] + 1;\n var num = sigDigits;\n if (sigDigits.charAt(0) === '.') {\n num = '0' + sigDigits;\n } else if (decimalPointPos < 0) {\n num = '0.' + DD.stringOfChar('0', -decimalPointPos) + sigDigits;\n } else if (sigDigits.indexOf('.') === -1) {\n var numZeroes = decimalPointPos - sigDigits.length;\n var zeroes = DD.stringOfChar('0', numZeroes);\n num = sigDigits + zeroes + '.0';\n }\n if (this.isNegative()) { return '-' + num }\n return num\n};\nDD.prototype.reciprocal = function reciprocal () {\n var hc = null;\n var tc = null;\n var hy = null;\n var ty = null;\n var C = null;\n var c = null;\n var U = null;\n var u = null;\n C = 1.0 / this._hi;\n c = DD.SPLIT * C;\n hc = c - C;\n u = DD.SPLIT * this._hi;\n hc = c - hc;\n tc = C - hc;\n hy = u - this._hi;\n U = C * this._hi;\n hy = u - hy;\n ty = this._hi - hy;\n u = hc * hy - U + hc * ty + tc * hy + tc * ty;\n c = (1.0 - U - u - C * this._lo) / this._hi;\n var zhi = C + c;\n var zlo = C - zhi + c;\n return new DD(zhi, zlo)\n};\nDD.prototype.toSciNotation = function toSciNotation () {\n if (this.isZero()) { return DD.SCI_NOT_ZERO }\n var specialStr = this.getSpecialNumberString();\n if (specialStr !== null) { return specialStr }\n var magnitude = new Array(1).fill(null);\n var digits = this.extractSignificantDigits(false, magnitude);\n var expStr = DD.SCI_NOT_EXPONENT_CHAR + magnitude[0];\n if (digits.charAt(0) === '0') {\n throw new Error('Found leading zero: ' + digits)\n }\n var trailingDigits = '';\n if (digits.length > 1) { trailingDigits = digits.substring(1); }\n var digitsWithDecimal = digits.charAt(0) + '.' + trailingDigits;\n if (this.isNegative()) { return '-' + digitsWithDecimal + expStr }\n return digitsWithDecimal + expStr\n};\nDD.prototype.abs = function abs () {\n if (this.isNaN()) { return DD.NaN }\n if (this.isNegative()) { return this.negate() }\n return new DD(this)\n};\nDD.prototype.isPositive = function isPositive () {\n return (this._hi > 0.0 || this._hi === 0.0) && this._lo > 0.0\n};\nDD.prototype.lt = function lt (y) {\n return (this._hi < y._hi || this._hi === y._hi) && this._lo < y._lo\n};\nDD.prototype.add = function add () {\n if (arguments[0] instanceof DD) {\n var y = arguments[0];\n return DD.copy(this).selfAdd(y)\n } else if (typeof arguments[0] === 'number') {\n var y$1 = arguments[0];\n return DD.copy(this).selfAdd(y$1)\n }\n};\nDD.prototype.init = function init () {\n if (arguments.length === 1) {\n if (typeof arguments[0] === 'number') {\n var x = arguments[0];\n this._hi = x;\n this._lo = 0.0;\n } else if (arguments[0] instanceof DD) {\n var dd = arguments[0];\n this._hi = dd._hi;\n this._lo = dd._lo;\n }\n } else if (arguments.length === 2) {\n var hi = arguments[0];\n var lo = arguments[1];\n this._hi = hi;\n this._lo = lo;\n }\n};\nDD.prototype.gt = function gt (y) {\n return (this._hi > y._hi || this._hi === y._hi) && this._lo > y._lo\n};\nDD.prototype.isNegative = function isNegative () {\n return (this._hi < 0.0 || this._hi === 0.0) && this._lo < 0.0\n};\nDD.prototype.trunc = function trunc () {\n if (this.isNaN()) { return DD.NaN }\n if (this.isPositive()) { return this.floor(); } else { return this.ceil() }\n};\nDD.prototype.signum = function signum () {\n if (this._hi > 0) { return 1 }\n if (this._hi < 0) { return -1 }\n if (this._lo > 0) { return 1 }\n if (this._lo < 0) { return -1 }\n return 0\n};\nDD.prototype.interfaces_ = function interfaces_ () {\n return [Serializable, Comparable, Clonable]\n};\nDD.prototype.getClass = function getClass () {\n return DD\n};\nDD.sqr = function sqr (x) {\n return DD.valueOf(x).selfMultiply(x)\n};\nDD.valueOf = function valueOf () {\n if (typeof arguments[0] === 'string') {\n var str = arguments[0];\n return DD.parse(str)\n } else if (typeof arguments[0] === 'number') {\n var x = arguments[0];\n return new DD(x)\n }\n};\nDD.sqrt = function sqrt (x) {\n return DD.valueOf(x).sqrt()\n};\nDD.parse = function parse (str) {\n var i = 0;\n var strlen = str.length;\n while (Character.isWhitespace(str.charAt(i))) { i++; }\n var isNegative = false;\n if (i < strlen) {\n var signCh = str.charAt(i);\n if (signCh === '-' || signCh === '+') {\n i++;\n if (signCh === '-') { isNegative = true; }\n }\n }\n var val = new DD();\n var numDigits = 0;\n var numBeforeDec = 0;\n var exp = 0;\n while (true) {\n if (i >= strlen) { break }\n var ch = str.charAt(i);\n i++;\n if (Character.isDigit(ch)) {\n var d = ch - '0';\n val.selfMultiply(DD.TEN);\n val.selfAdd(d);\n numDigits++;\n continue\n }\n if (ch === '.') {\n numBeforeDec = numDigits;\n continue\n }\n if (ch === 'e' || ch === 'E') {\n var expStr = str.substring(i);\n try {\n exp = Integer.parseInt(expStr);\n } catch (ex) {\n if (ex instanceof Error) {\n throw new Error('Invalid exponent ' + expStr + ' in string ' + str)\n } else { throw ex }\n } finally {}\n break\n }\n throw new Error(\"Unexpected character '\" + ch + \"' at position \" + i + ' in string ' + str)\n }\n var val2 = val;\n var numDecPlaces = numDigits - numBeforeDec - exp;\n if (numDecPlaces === 0) {\n val2 = val;\n } else if (numDecPlaces > 0) {\n var scale = DD.TEN.pow(numDecPlaces);\n val2 = val.divide(scale);\n } else if (numDecPlaces < 0) {\n var scale$1 = DD.TEN.pow(-numDecPlaces);\n val2 = val.multiply(scale$1);\n }\n if (isNegative) {\n return val2.negate()\n }\n return val2\n};\nDD.createNaN = function createNaN () {\n return new DD(Double.NaN, Double.NaN)\n};\nDD.copy = function copy (dd) {\n return new DD(dd)\n};\nDD.magnitude = function magnitude (x) {\n var xAbs = Math.abs(x);\n var xLog10 = Math.log(xAbs) / Math.log(10);\n var xMag = Math.trunc(Math.floor(xLog10));\n var xApprox = Math.pow(10, xMag);\n if (xApprox * 10 <= xAbs) { xMag += 1; }\n return xMag\n};\nDD.stringOfChar = function stringOfChar (ch, len) {\n var buf = new StringBuffer();\n for (var i = 0; i < len; i++) {\n buf.append(ch);\n }\n return buf.toString()\n};\nstaticAccessors$7.PI.get = function () { return new DD(3.141592653589793116e+00, 1.224646799147353207e-16) };\nstaticAccessors$7.TWO_PI.get = function () { return new DD(6.283185307179586232e+00, 2.449293598294706414e-16) };\nstaticAccessors$7.PI_2.get = function () { return new DD(1.570796326794896558e+00, 6.123233995736766036e-17) };\nstaticAccessors$7.E.get = function () { return new DD(2.718281828459045091e+00, 1.445646891729250158e-16) };\nstaticAccessors$7.NaN.get = function () { return new DD(Double.NaN, Double.NaN) };\nstaticAccessors$7.EPS.get = function () { return 1.23259516440783e-32 };\nstaticAccessors$7.SPLIT.get = function () { return 134217729.0 };\nstaticAccessors$7.MAX_PRINT_DIGITS.get = function () { return 32 };\nstaticAccessors$7.TEN.get = function () { return DD.valueOf(10.0) };\nstaticAccessors$7.ONE.get = function () { return DD.valueOf(1.0) };\nstaticAccessors$7.SCI_NOT_EXPONENT_CHAR.get = function () { return 'E' };\nstaticAccessors$7.SCI_NOT_ZERO.get = function () { return '0.0E0' };\n\nObject.defineProperties( DD, staticAccessors$7 );\n\nvar CGAlgorithmsDD = function CGAlgorithmsDD () {};\n\nvar staticAccessors$6 = { DP_SAFE_EPSILON: { configurable: true } };\n\nCGAlgorithmsDD.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nCGAlgorithmsDD.prototype.getClass = function getClass () {\n return CGAlgorithmsDD\n};\nCGAlgorithmsDD.orientationIndex = function orientationIndex (p1, p2, q) {\n var index = CGAlgorithmsDD.orientationIndexFilter(p1, p2, q);\n if (index <= 1) { return index }\n var dx1 = DD.valueOf(p2.x).selfAdd(-p1.x);\n var dy1 = DD.valueOf(p2.y).selfAdd(-p1.y);\n var dx2 = DD.valueOf(q.x).selfAdd(-p2.x);\n var dy2 = DD.valueOf(q.y).selfAdd(-p2.y);\n return dx1.selfMultiply(dy2).selfSubtract(dy1.selfMultiply(dx2)).signum()\n};\nCGAlgorithmsDD.signOfDet2x2 = function signOfDet2x2 (x1, y1, x2, y2) {\n var det = x1.multiply(y2).selfSubtract(y1.multiply(x2));\n return det.signum()\n};\nCGAlgorithmsDD.intersection = function intersection (p1, p2, q1, q2) {\n var denom1 = DD.valueOf(q2.y).selfSubtract(q1.y).selfMultiply(DD.valueOf(p2.x).selfSubtract(p1.x));\n var denom2 = DD.valueOf(q2.x).selfSubtract(q1.x).selfMultiply(DD.valueOf(p2.y).selfSubtract(p1.y));\n var denom = denom1.subtract(denom2);\n var numx1 = DD.valueOf(q2.x).selfSubtract(q1.x).selfMultiply(DD.valueOf(p1.y).selfSubtract(q1.y));\n var numx2 = DD.valueOf(q2.y).selfSubtract(q1.y).selfMultiply(DD.valueOf(p1.x).selfSubtract(q1.x));\n var numx = numx1.subtract(numx2);\n var fracP = numx.selfDivide(denom).doubleValue();\n var x = DD.valueOf(p1.x).selfAdd(DD.valueOf(p2.x).selfSubtract(p1.x).selfMultiply(fracP)).doubleValue();\n var numy1 = DD.valueOf(p2.x).selfSubtract(p1.x).selfMultiply(DD.valueOf(p1.y).selfSubtract(q1.y));\n var numy2 = DD.valueOf(p2.y).selfSubtract(p1.y).selfMultiply(DD.valueOf(p1.x).selfSubtract(q1.x));\n var numy = numy1.subtract(numy2);\n var fracQ = numy.selfDivide(denom).doubleValue();\n var y = DD.valueOf(q1.y).selfAdd(DD.valueOf(q2.y).selfSubtract(q1.y).selfMultiply(fracQ)).doubleValue();\n return new Coordinate(x, y)\n};\nCGAlgorithmsDD.orientationIndexFilter = function orientationIndexFilter (pa, pb, pc) {\n var detsum = null;\n var detleft = (pa.x - pc.x) * (pb.y - pc.y);\n var detright = (pa.y - pc.y) * (pb.x - pc.x);\n var det = detleft - detright;\n if (detleft > 0.0) {\n if (detright <= 0.0) {\n return CGAlgorithmsDD.signum(det)\n } else {\n detsum = detleft + detright;\n }\n } else if (detleft < 0.0) {\n if (detright >= 0.0) {\n return CGAlgorithmsDD.signum(det)\n } else {\n detsum = -detleft - detright;\n }\n } else {\n return CGAlgorithmsDD.signum(det)\n }\n var errbound = CGAlgorithmsDD.DP_SAFE_EPSILON * detsum;\n if (det >= errbound || -det >= errbound) {\n return CGAlgorithmsDD.signum(det)\n }\n return 2\n};\nCGAlgorithmsDD.signum = function signum (x) {\n if (x > 0) { return 1 }\n if (x < 0) { return -1 }\n return 0\n};\nstaticAccessors$6.DP_SAFE_EPSILON.get = function () { return 1e-15 };\n\nObject.defineProperties( CGAlgorithmsDD, staticAccessors$6 );\n\nvar CoordinateSequence = function CoordinateSequence () {};\n\nvar staticAccessors$8 = { X: { configurable: true },Y: { configurable: true },Z: { configurable: true },M: { configurable: true } };\n\nstaticAccessors$8.X.get = function () { return 0 };\nstaticAccessors$8.Y.get = function () { return 1 };\nstaticAccessors$8.Z.get = function () { return 2 };\nstaticAccessors$8.M.get = function () { return 3 };\nCoordinateSequence.prototype.setOrdinate = function setOrdinate (index, ordinateIndex, value) {};\nCoordinateSequence.prototype.size = function size () {};\nCoordinateSequence.prototype.getOrdinate = function getOrdinate (index, ordinateIndex) {};\nCoordinateSequence.prototype.getCoordinate = function getCoordinate () {};\nCoordinateSequence.prototype.getCoordinateCopy = function getCoordinateCopy (i) {};\nCoordinateSequence.prototype.getDimension = function getDimension () {};\nCoordinateSequence.prototype.getX = function getX (index) {};\nCoordinateSequence.prototype.clone = function clone () {};\nCoordinateSequence.prototype.expandEnvelope = function expandEnvelope (env) {};\nCoordinateSequence.prototype.copy = function copy () {};\nCoordinateSequence.prototype.getY = function getY (index) {};\nCoordinateSequence.prototype.toCoordinateArray = function toCoordinateArray () {};\nCoordinateSequence.prototype.interfaces_ = function interfaces_ () {\n return [Clonable]\n};\nCoordinateSequence.prototype.getClass = function getClass () {\n return CoordinateSequence\n};\n\nObject.defineProperties( CoordinateSequence, staticAccessors$8 );\n\nvar Exception = function Exception () {};\n\nvar NotRepresentableException = (function (Exception$$1) {\n function NotRepresentableException () {\n Exception$$1.call(this, 'Projective point not representable on the Cartesian plane.');\n }\n\n if ( Exception$$1 ) NotRepresentableException.__proto__ = Exception$$1;\n NotRepresentableException.prototype = Object.create( Exception$$1 && Exception$$1.prototype );\n NotRepresentableException.prototype.constructor = NotRepresentableException;\n NotRepresentableException.prototype.interfaces_ = function interfaces_ () {\n return []\n };\n NotRepresentableException.prototype.getClass = function getClass () {\n return NotRepresentableException\n };\n\n return NotRepresentableException;\n}(Exception));\n\nvar System = function System () {};\n\nSystem.arraycopy = function arraycopy (src, srcPos, dest, destPos, len) {\n var c = 0;\n for (var i = srcPos; i < srcPos + len; i++) {\n dest[destPos + c] = src[i];\n c++;\n }\n};\n\nSystem.getProperty = function getProperty (name) {\n return {\n 'line.separator': '\\n'\n }[name]\n};\n\nvar HCoordinate = function HCoordinate () {\n this.x = null;\n this.y = null;\n this.w = null;\n if (arguments.length === 0) {\n this.x = 0.0;\n this.y = 0.0;\n this.w = 1.0;\n } else if (arguments.length === 1) {\n var p = arguments[0];\n this.x = p.x;\n this.y = p.y;\n this.w = 1.0;\n } else if (arguments.length === 2) {\n if (typeof arguments[0] === 'number' && typeof arguments[1] === 'number') {\n var _x = arguments[0];\n var _y = arguments[1];\n this.x = _x;\n this.y = _y;\n this.w = 1.0;\n } else if (arguments[0] instanceof HCoordinate && arguments[1] instanceof HCoordinate) {\n var p1 = arguments[0];\n var p2 = arguments[1];\n this.x = p1.y * p2.w - p2.y * p1.w;\n this.y = p2.x * p1.w - p1.x * p2.w;\n this.w = p1.x * p2.y - p2.x * p1.y;\n } else if (arguments[0] instanceof Coordinate && arguments[1] instanceof Coordinate) {\n var p1$1 = arguments[0];\n var p2$1 = arguments[1];\n this.x = p1$1.y - p2$1.y;\n this.y = p2$1.x - p1$1.x;\n this.w = p1$1.x * p2$1.y - p2$1.x * p1$1.y;\n }\n } else if (arguments.length === 3) {\n var _x$1 = arguments[0];\n var _y$1 = arguments[1];\n var _w = arguments[2];\n this.x = _x$1;\n this.y = _y$1;\n this.w = _w;\n } else if (arguments.length === 4) {\n var p1$2 = arguments[0];\n var p2$2 = arguments[1];\n var q1 = arguments[2];\n var q2 = arguments[3];\n var px = p1$2.y - p2$2.y;\n var py = p2$2.x - p1$2.x;\n var pw = p1$2.x * p2$2.y - p2$2.x * p1$2.y;\n var qx = q1.y - q2.y;\n var qy = q2.x - q1.x;\n var qw = q1.x * q2.y - q2.x * q1.y;\n this.x = py * qw - qy * pw;\n this.y = qx * pw - px * qw;\n this.w = px * qy - qx * py;\n }\n};\nHCoordinate.prototype.getY = function getY () {\n var a = this.y / this.w;\n if (Double.isNaN(a) || Double.isInfinite(a)) {\n throw new NotRepresentableException()\n }\n return a\n};\nHCoordinate.prototype.getX = function getX () {\n var a = this.x / this.w;\n if (Double.isNaN(a) || Double.isInfinite(a)) {\n throw new NotRepresentableException()\n }\n return a\n};\nHCoordinate.prototype.getCoordinate = function getCoordinate () {\n var p = new Coordinate();\n p.x = this.getX();\n p.y = this.getY();\n return p\n};\nHCoordinate.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nHCoordinate.prototype.getClass = function getClass () {\n return HCoordinate\n};\nHCoordinate.intersection = function intersection (p1, p2, q1, q2) {\n var px = p1.y - p2.y;\n var py = p2.x - p1.x;\n var pw = p1.x * p2.y - p2.x * p1.y;\n var qx = q1.y - q2.y;\n var qy = q2.x - q1.x;\n var qw = q1.x * q2.y - q2.x * q1.y;\n var x = py * qw - qy * pw;\n var y = qx * pw - px * qw;\n var w = px * qy - qx * py;\n var xInt = x / w;\n var yInt = y / w;\n if (Double.isNaN(xInt) || (Double.isInfinite(xInt) || Double.isNaN(yInt)) || Double.isInfinite(yInt)) {\n throw new NotRepresentableException()\n }\n return new Coordinate(xInt, yInt)\n};\n\nvar Envelope = function Envelope () {\n this._minx = null;\n this._maxx = null;\n this._miny = null;\n this._maxy = null;\n if (arguments.length === 0) {\n this.init();\n } else if (arguments.length === 1) {\n if (arguments[0] instanceof Coordinate) {\n var p = arguments[0];\n this.init(p.x, p.x, p.y, p.y);\n } else if (arguments[0] instanceof Envelope) {\n var env = arguments[0];\n this.init(env);\n }\n } else if (arguments.length === 2) {\n var p1 = arguments[0];\n var p2 = arguments[1];\n this.init(p1.x, p2.x, p1.y, p2.y);\n } else if (arguments.length === 4) {\n var x1 = arguments[0];\n var x2 = arguments[1];\n var y1 = arguments[2];\n var y2 = arguments[3];\n this.init(x1, x2, y1, y2);\n }\n};\n\nvar staticAccessors$9 = { serialVersionUID: { configurable: true } };\nEnvelope.prototype.getArea = function getArea () {\n return this.getWidth() * this.getHeight()\n};\nEnvelope.prototype.equals = function equals (other) {\n if (!(other instanceof Envelope)) {\n return false\n }\n var otherEnvelope = other;\n if (this.isNull()) {\n return otherEnvelope.isNull()\n }\n return this._maxx === otherEnvelope.getMaxX() && this._maxy === otherEnvelope.getMaxY() && this._minx === otherEnvelope.getMinX() && this._miny === otherEnvelope.getMinY()\n};\nEnvelope.prototype.intersection = function intersection (env) {\n if (this.isNull() || env.isNull() || !this.intersects(env)) { return new Envelope() }\n var intMinX = this._minx > env._minx ? this._minx : env._minx;\n var intMinY = this._miny > env._miny ? this._miny : env._miny;\n var intMaxX = this._maxx < env._maxx ? this._maxx : env._maxx;\n var intMaxY = this._maxy < env._maxy ? this._maxy : env._maxy;\n return new Envelope(intMinX, intMaxX, intMinY, intMaxY)\n};\nEnvelope.prototype.isNull = function isNull () {\n return this._maxx < this._minx\n};\nEnvelope.prototype.getMaxX = function getMaxX () {\n return this._maxx\n};\nEnvelope.prototype.covers = function covers () {\n if (arguments.length === 1) {\n if (arguments[0] instanceof Coordinate) {\n var p = arguments[0];\n return this.covers(p.x, p.y)\n } else if (arguments[0] instanceof Envelope) {\n var other = arguments[0];\n if (this.isNull() || other.isNull()) {\n return false\n }\n return other.getMinX() >= this._minx && other.getMaxX() <= this._maxx && other.getMinY() >= this._miny && other.getMaxY() <= this._maxy\n }\n } else if (arguments.length === 2) {\n var x = arguments[0];\n var y = arguments[1];\n if (this.isNull()) { return false }\n return x >= this._minx && x <= this._maxx && y >= this._miny && y <= this._maxy\n }\n};\nEnvelope.prototype.intersects = function intersects () {\n if (arguments.length === 1) {\n if (arguments[0] instanceof Envelope) {\n var other = arguments[0];\n if (this.isNull() || other.isNull()) {\n return false\n }\n return !(other._minx > this._maxx || other._maxx < this._minx || other._miny > this._maxy || other._maxy < this._miny)\n } else if (arguments[0] instanceof Coordinate) {\n var p = arguments[0];\n return this.intersects(p.x, p.y)\n }\n } else if (arguments.length === 2) {\n var x = arguments[0];\n var y = arguments[1];\n if (this.isNull()) { return false }\n return !(x > this._maxx || x < this._minx || y > this._maxy || y < this._miny)\n }\n};\nEnvelope.prototype.getMinY = function getMinY () {\n return this._miny\n};\nEnvelope.prototype.getMinX = function getMinX () {\n return this._minx\n};\nEnvelope.prototype.expandToInclude = function expandToInclude () {\n if (arguments.length === 1) {\n if (arguments[0] instanceof Coordinate) {\n var p = arguments[0];\n this.expandToInclude(p.x, p.y);\n } else if (arguments[0] instanceof Envelope) {\n var other = arguments[0];\n if (other.isNull()) {\n return null\n }\n if (this.isNull()) {\n this._minx = other.getMinX();\n this._maxx = other.getMaxX();\n this._miny = other.getMinY();\n this._maxy = other.getMaxY();\n } else {\n if (other._minx < this._minx) {\n this._minx = other._minx;\n }\n if (other._maxx > this._maxx) {\n this._maxx = other._maxx;\n }\n if (other._miny < this._miny) {\n this._miny = other._miny;\n }\n if (other._maxy > this._maxy) {\n this._maxy = other._maxy;\n }\n }\n }\n } else if (arguments.length === 2) {\n var x = arguments[0];\n var y = arguments[1];\n if (this.isNull()) {\n this._minx = x;\n this._maxx = x;\n this._miny = y;\n this._maxy = y;\n } else {\n if (x < this._minx) {\n this._minx = x;\n }\n if (x > this._maxx) {\n this._maxx = x;\n }\n if (y < this._miny) {\n this._miny = y;\n }\n if (y > this._maxy) {\n this._maxy = y;\n }\n }\n }\n};\nEnvelope.prototype.minExtent = function minExtent () {\n if (this.isNull()) { return 0.0 }\n var w = this.getWidth();\n var h = this.getHeight();\n if (w < h) { return w }\n return h\n};\nEnvelope.prototype.getWidth = function getWidth () {\n if (this.isNull()) {\n return 0\n }\n return this._maxx - this._minx\n};\nEnvelope.prototype.compareTo = function compareTo (o) {\n var env = o;\n if (this.isNull()) {\n if (env.isNull()) { return 0 }\n return -1\n } else {\n if (env.isNull()) { return 1 }\n }\n if (this._minx < env._minx) { return -1 }\n if (this._minx > env._minx) { return 1 }\n if (this._miny < env._miny) { return -1 }\n if (this._miny > env._miny) { return 1 }\n if (this._maxx < env._maxx) { return -1 }\n if (this._maxx > env._maxx) { return 1 }\n if (this._maxy < env._maxy) { return -1 }\n if (this._maxy > env._maxy) { return 1 }\n return 0\n};\nEnvelope.prototype.translate = function translate (transX, transY) {\n if (this.isNull()) {\n return null\n }\n this.init(this.getMinX() + transX, this.getMaxX() + transX, this.getMinY() + transY, this.getMaxY() + transY);\n};\nEnvelope.prototype.toString = function toString () {\n return 'Env[' + this._minx + ' : ' + this._maxx + ', ' + this._miny + ' : ' + this._maxy + ']'\n};\nEnvelope.prototype.setToNull = function setToNull () {\n this._minx = 0;\n this._maxx = -1;\n this._miny = 0;\n this._maxy = -1;\n};\nEnvelope.prototype.getHeight = function getHeight () {\n if (this.isNull()) {\n return 0\n }\n return this._maxy - this._miny\n};\nEnvelope.prototype.maxExtent = function maxExtent () {\n if (this.isNull()) { return 0.0 }\n var w = this.getWidth();\n var h = this.getHeight();\n if (w > h) { return w }\n return h\n};\nEnvelope.prototype.expandBy = function expandBy () {\n if (arguments.length === 1) {\n var distance = arguments[0];\n this.expandBy(distance, distance);\n } else if (arguments.length === 2) {\n var deltaX = arguments[0];\n var deltaY = arguments[1];\n if (this.isNull()) { return null }\n this._minx -= deltaX;\n this._maxx += deltaX;\n this._miny -= deltaY;\n this._maxy += deltaY;\n if (this._minx > this._maxx || this._miny > this._maxy) { this.setToNull(); }\n }\n};\nEnvelope.prototype.contains = function contains () {\n if (arguments.length === 1) {\n if (arguments[0] instanceof Envelope) {\n var other = arguments[0];\n return this.covers(other)\n } else if (arguments[0] instanceof Coordinate) {\n var p = arguments[0];\n return this.covers(p)\n }\n } else if (arguments.length === 2) {\n var x = arguments[0];\n var y = arguments[1];\n return this.covers(x, y)\n }\n};\nEnvelope.prototype.centre = function centre () {\n if (this.isNull()) { return null }\n return new Coordinate((this.getMinX() + this.getMaxX()) / 2.0, (this.getMinY() + this.getMaxY()) / 2.0)\n};\nEnvelope.prototype.init = function init () {\n if (arguments.length === 0) {\n this.setToNull();\n } else if (arguments.length === 1) {\n if (arguments[0] instanceof Coordinate) {\n var p = arguments[0];\n this.init(p.x, p.x, p.y, p.y);\n } else if (arguments[0] instanceof Envelope) {\n var env = arguments[0];\n this._minx = env._minx;\n this._maxx = env._maxx;\n this._miny = env._miny;\n this._maxy = env._maxy;\n }\n } else if (arguments.length === 2) {\n var p1 = arguments[0];\n var p2 = arguments[1];\n this.init(p1.x, p2.x, p1.y, p2.y);\n } else if (arguments.length === 4) {\n var x1 = arguments[0];\n var x2 = arguments[1];\n var y1 = arguments[2];\n var y2 = arguments[3];\n if (x1 < x2) {\n this._minx = x1;\n this._maxx = x2;\n } else {\n this._minx = x2;\n this._maxx = x1;\n }\n if (y1 < y2) {\n this._miny = y1;\n this._maxy = y2;\n } else {\n this._miny = y2;\n this._maxy = y1;\n }\n }\n};\nEnvelope.prototype.getMaxY = function getMaxY () {\n return this._maxy\n};\nEnvelope.prototype.distance = function distance (env) {\n if (this.intersects(env)) { return 0 }\n var dx = 0.0;\n if (this._maxx < env._minx) { dx = env._minx - this._maxx; } else if (this._minx > env._maxx) { dx = this._minx - env._maxx; }\n var dy = 0.0;\n if (this._maxy < env._miny) { dy = env._miny - this._maxy; } else if (this._miny > env._maxy) { dy = this._miny - env._maxy; }\n if (dx === 0.0) { return dy }\n if (dy === 0.0) { return dx }\n return Math.sqrt(dx * dx + dy * dy)\n};\nEnvelope.prototype.hashCode = function hashCode () {\n var result = 17;\n result = 37 * result + Coordinate.hashCode(this._minx);\n result = 37 * result + Coordinate.hashCode(this._maxx);\n result = 37 * result + Coordinate.hashCode(this._miny);\n result = 37 * result + Coordinate.hashCode(this._maxy);\n return result\n};\nEnvelope.prototype.interfaces_ = function interfaces_ () {\n return [Comparable, Serializable]\n};\nEnvelope.prototype.getClass = function getClass () {\n return Envelope\n};\nEnvelope.intersects = function intersects () {\n if (arguments.length === 3) {\n var p1 = arguments[0];\n var p2 = arguments[1];\n var q = arguments[2];\n if (q.x >= (p1.x < p2.x ? p1.x : p2.x) && q.x <= (p1.x > p2.x ? p1.x : p2.x) && (q.y >= (p1.y < p2.y ? p1.y : p2.y) && q.y <= (p1.y > p2.y ? p1.y : p2.y))) {\n return true\n }\n return false\n } else if (arguments.length === 4) {\n var p1$1 = arguments[0];\n var p2$1 = arguments[1];\n var q1 = arguments[2];\n var q2 = arguments[3];\n var minq = Math.min(q1.x, q2.x);\n var maxq = Math.max(q1.x, q2.x);\n var minp = Math.min(p1$1.x, p2$1.x);\n var maxp = Math.max(p1$1.x, p2$1.x);\n if (minp > maxq) { return false }\n if (maxp < minq) { return false }\n minq = Math.min(q1.y, q2.y);\n maxq = Math.max(q1.y, q2.y);\n minp = Math.min(p1$1.y, p2$1.y);\n maxp = Math.max(p1$1.y, p2$1.y);\n if (minp > maxq) { return false }\n if (maxp < minq) { return false }\n return true\n }\n};\nstaticAccessors$9.serialVersionUID.get = function () { return 5873921885273102420 };\n\nObject.defineProperties( Envelope, staticAccessors$9 );\n\nvar regExes = {\n 'typeStr': /^\\s*(\\w+)\\s*\\(\\s*(.*)\\s*\\)\\s*$/,\n 'emptyTypeStr': /^\\s*(\\w+)\\s*EMPTY\\s*$/,\n 'spaces': /\\s+/,\n 'parenComma': /\\)\\s*,\\s*\\(/,\n 'doubleParenComma': /\\)\\s*\\)\\s*,\\s*\\(\\s*\\(/, // can't use {2} here\n 'trimParens': /^\\s*\\(?(.*?)\\)?\\s*$/\n};\n\n/**\n * Class for reading and writing Well-Known Text.\n *\n * NOTE: Adapted from OpenLayers 2.11 implementation.\n */\n\n/** Create a new parser for WKT\n *\n * @param {GeometryFactory} geometryFactory\n * @return An instance of WKTParser.\n * @constructor\n * @private\n */\nvar WKTParser = function WKTParser (geometryFactory) {\n this.geometryFactory = geometryFactory || new GeometryFactory();\n};\n/**\n * Deserialize a WKT string and return a geometry. Supports WKT for POINT,\n * MULTIPOINT, LINESTRING, LINEARRING, MULTILINESTRING, POLYGON, MULTIPOLYGON,\n * and GEOMETRYCOLLECTION.\n *\n * @param {String} wkt A WKT string.\n * @return {Geometry} A geometry instance.\n * @private\n */\nWKTParser.prototype.read = function read (wkt) {\n var geometry, type, str;\n wkt = wkt.replace(/[\\n\\r]/g, ' ');\n var matches = regExes.typeStr.exec(wkt);\n if (wkt.search('EMPTY') !== -1) {\n matches = regExes.emptyTypeStr.exec(wkt);\n matches[2] = undefined;\n }\n if (matches) {\n type = matches[1].toLowerCase();\n str = matches[2];\n if (parse$1[type]) {\n geometry = parse$1[type].apply(this, [str]);\n }\n }\n\n if (geometry === undefined) { throw new Error('Could not parse WKT ' + wkt) }\n\n return geometry\n};\n\n/**\n * Serialize a geometry into a WKT string.\n *\n * @param {Geometry} geometry A feature or array of features.\n * @return {String} The WKT string representation of the input geometries.\n * @private\n */\nWKTParser.prototype.write = function write (geometry) {\n return this.extractGeometry(geometry)\n};\n\n/**\n * Entry point to construct the WKT for a single Geometry object.\n *\n * @param {Geometry} geometry\n * @return {String} A WKT string of representing the geometry.\n * @private\n */\nWKTParser.prototype.extractGeometry = function extractGeometry (geometry) {\n var type = geometry.getGeometryType().toLowerCase();\n if (!extract$1[type]) {\n return null\n }\n var wktType = type.toUpperCase();\n var data;\n if (geometry.isEmpty()) {\n data = wktType + ' EMPTY';\n } else {\n data = wktType + '(' + extract$1[type].apply(this, [geometry]) + ')';\n }\n return data\n};\n\n/**\n * Object with properties corresponding to the geometry types. Property values\n * are functions that do the actual data extraction.\n * @private\n */\nvar extract$1 = {\n coordinate: function coordinate (coordinate$1) {\n return coordinate$1.x + ' ' + coordinate$1.y\n },\n\n /**\n * Return a space delimited string of point coordinates.\n *\n * @param {Point}\n * point\n * @return {String} A string of coordinates representing the point.\n */\n point: function point (point$1) {\n return extract$1.coordinate.call(this, point$1._coordinates._coordinates[0])\n },\n\n /**\n * Return a comma delimited string of point coordinates from a multipoint.\n *\n * @param {MultiPoint}\n * multipoint\n * @return {String} A string of point coordinate strings representing the\n * multipoint.\n */\n multipoint: function multipoint (multipoint$1) {\n var this$1 = this;\n\n var array = [];\n for (var i = 0, len = multipoint$1._geometries.length; i < len; ++i) {\n array.push('(' + extract$1.point.apply(this$1, [multipoint$1._geometries[i]]) + ')');\n }\n return array.join(',')\n },\n\n /**\n * Return a comma delimited string of point coordinates from a line.\n *\n * @param {LineString} linestring\n * @return {String} A string of point coordinate strings representing the linestring.\n */\n linestring: function linestring (linestring$1) {\n var this$1 = this;\n\n var array = [];\n for (var i = 0, len = linestring$1._points._coordinates.length; i < len; ++i) {\n array.push(extract$1.coordinate.apply(this$1, [linestring$1._points._coordinates[i]]));\n }\n return array.join(',')\n },\n\n linearring: function linearring (linearring$1) {\n var this$1 = this;\n\n var array = [];\n for (var i = 0, len = linearring$1._points._coordinates.length; i < len; ++i) {\n array.push(extract$1.coordinate.apply(this$1, [linearring$1._points._coordinates[i]]));\n }\n return array.join(',')\n },\n\n /**\n * Return a comma delimited string of linestring strings from a\n * multilinestring.\n *\n * @param {MultiLineString} multilinestring\n * @return {String} A string of of linestring strings representing the multilinestring.\n */\n multilinestring: function multilinestring (multilinestring$1) {\n var this$1 = this;\n\n var array = [];\n for (var i = 0, len = multilinestring$1._geometries.length; i < len; ++i) {\n array.push('(' +\n extract$1.linestring.apply(this$1, [multilinestring$1._geometries[i]]) +\n ')');\n }\n return array.join(',')\n },\n\n /**\n * Return a comma delimited string of linear ring arrays from a polygon.\n *\n * @param {Polygon} polygon\n * @return {String} An array of linear ring arrays representing the polygon.\n */\n polygon: function polygon (polygon$1) {\n var this$1 = this;\n\n var array = [];\n array.push('(' + extract$1.linestring.apply(this, [polygon$1._shell]) + ')');\n for (var i = 0, len = polygon$1._holes.length; i < len; ++i) {\n array.push('(' + extract$1.linestring.apply(this$1, [polygon$1._holes[i]]) + ')');\n }\n return array.join(',')\n },\n\n /**\n * Return an array of polygon arrays from a multipolygon.\n *\n * @param {MultiPolygon} multipolygon\n * @return {String} An array of polygon arrays representing the multipolygon.\n */\n multipolygon: function multipolygon (multipolygon$1) {\n var this$1 = this;\n\n var array = [];\n for (var i = 0, len = multipolygon$1._geometries.length; i < len; ++i) {\n array.push('(' + extract$1.polygon.apply(this$1, [multipolygon$1._geometries[i]]) + ')');\n }\n return array.join(',')\n },\n\n /**\n * Return the WKT portion between 'GEOMETRYCOLLECTION(' and ')' for an\n * geometrycollection.\n *\n * @param {GeometryCollection} collection\n * @return {String} internal WKT representation of the collection.\n */\n geometrycollection: function geometrycollection (collection) {\n var this$1 = this;\n\n var array = [];\n for (var i = 0, len = collection._geometries.length; i < len; ++i) {\n array.push(this$1.extractGeometry(collection._geometries[i]));\n }\n return array.join(',')\n }\n};\n\n/**\n * Object with properties corresponding to the geometry types. Property values\n * are functions that do the actual parsing.\n * @private\n */\nvar parse$1 = {\n /**\n * Return point geometry given a point WKT fragment.\n *\n * @param {String} str A WKT fragment representing the point.\n * @return {Point} A point geometry.\n * @private\n */\n point: function point (str) {\n if (str === undefined) {\n return this.geometryFactory.createPoint()\n }\n\n var coords = str.trim().split(regExes.spaces);\n return this.geometryFactory.createPoint(new Coordinate(Number.parseFloat(coords[0]),\n Number.parseFloat(coords[1])))\n },\n\n /**\n * Return a multipoint geometry given a multipoint WKT fragment.\n *\n * @param {String} str A WKT fragment representing the multipoint.\n * @return {Point} A multipoint feature.\n * @private\n */\n multipoint: function multipoint (str) {\n var this$1 = this;\n\n if (str === undefined) {\n return this.geometryFactory.createMultiPoint()\n }\n\n var point;\n var points = str.trim().split(',');\n var components = [];\n for (var i = 0, len = points.length; i < len; ++i) {\n point = points[i].replace(regExes.trimParens, '$1');\n components.push(parse$1.point.apply(this$1, [point]));\n }\n return this.geometryFactory.createMultiPoint(components)\n },\n\n /**\n * Return a linestring geometry given a linestring WKT fragment.\n *\n * @param {String} str A WKT fragment representing the linestring.\n * @return {LineString} A linestring geometry.\n * @private\n */\n linestring: function linestring (str) {\n if (str === undefined) {\n return this.geometryFactory.createLineString()\n }\n\n var points = str.trim().split(',');\n var components = [];\n var coords;\n for (var i = 0, len = points.length; i < len; ++i) {\n coords = points[i].trim().split(regExes.spaces);\n components.push(new Coordinate(Number.parseFloat(coords[0]), Number.parseFloat(coords[1])));\n }\n return this.geometryFactory.createLineString(components)\n },\n\n /**\n * Return a linearring geometry given a linearring WKT fragment.\n *\n * @param {String} str A WKT fragment representing the linearring.\n * @return {LinearRing} A linearring geometry.\n * @private\n */\n linearring: function linearring (str) {\n if (str === undefined) {\n return this.geometryFactory.createLinearRing()\n }\n\n var points = str.trim().split(',');\n var components = [];\n var coords;\n for (var i = 0, len = points.length; i < len; ++i) {\n coords = points[i].trim().split(regExes.spaces);\n components.push(new Coordinate(Number.parseFloat(coords[0]), Number.parseFloat(coords[1])));\n }\n return this.geometryFactory.createLinearRing(components)\n },\n\n /**\n * Return a multilinestring geometry given a multilinestring WKT fragment.\n *\n * @param {String} str A WKT fragment representing the multilinestring.\n * @return {MultiLineString} A multilinestring geometry.\n * @private\n */\n multilinestring: function multilinestring (str) {\n var this$1 = this;\n\n if (str === undefined) {\n return this.geometryFactory.createMultiLineString()\n }\n\n var line;\n var lines = str.trim().split(regExes.parenComma);\n var components = [];\n for (var i = 0, len = lines.length; i < len; ++i) {\n line = lines[i].replace(regExes.trimParens, '$1');\n components.push(parse$1.linestring.apply(this$1, [line]));\n }\n return this.geometryFactory.createMultiLineString(components)\n },\n\n /**\n * Return a polygon geometry given a polygon WKT fragment.\n *\n * @param {String} str A WKT fragment representing the polygon.\n * @return {Polygon} A polygon geometry.\n * @private\n */\n polygon: function polygon (str) {\n var this$1 = this;\n\n if (str === undefined) {\n return this.geometryFactory.createPolygon()\n }\n\n var ring, linestring, linearring;\n var rings = str.trim().split(regExes.parenComma);\n var shell;\n var holes = [];\n for (var i = 0, len = rings.length; i < len; ++i) {\n ring = rings[i].replace(regExes.trimParens, '$1');\n linestring = parse$1.linestring.apply(this$1, [ring]);\n linearring = this$1.geometryFactory.createLinearRing(linestring._points);\n if (i === 0) {\n shell = linearring;\n } else {\n holes.push(linearring);\n }\n }\n return this.geometryFactory.createPolygon(shell, holes)\n },\n\n /**\n * Return a multipolygon geometry given a multipolygon WKT fragment.\n *\n * @param {String} str A WKT fragment representing the multipolygon.\n * @return {MultiPolygon} A multipolygon geometry.\n * @private\n */\n multipolygon: function multipolygon (str) {\n var this$1 = this;\n\n if (str === undefined) {\n return this.geometryFactory.createMultiPolygon()\n }\n\n var polygon;\n var polygons = str.trim().split(regExes.doubleParenComma);\n var components = [];\n for (var i = 0, len = polygons.length; i < len; ++i) {\n polygon = polygons[i].replace(regExes.trimParens, '$1');\n components.push(parse$1.polygon.apply(this$1, [polygon]));\n }\n return this.geometryFactory.createMultiPolygon(components)\n },\n\n /**\n * Return a geometrycollection given a geometrycollection WKT fragment.\n *\n * @param {String} str A WKT fragment representing the geometrycollection.\n * @return {GeometryCollection}\n * @private\n */\n geometrycollection: function geometrycollection (str) {\n var this$1 = this;\n\n if (str === undefined) {\n return this.geometryFactory.createGeometryCollection()\n }\n\n // separate components of the collection with |\n str = str.replace(/,\\s*([A-Za-z])/g, '|$1');\n var wktArray = str.trim().split('|');\n var components = [];\n for (var i = 0, len = wktArray.length; i < len; ++i) {\n components.push(this$1.read(wktArray[i]));\n }\n return this.geometryFactory.createGeometryCollection(components)\n }\n};\n\n/**\n * Writes the Well-Known Text representation of a {@link Geometry}. The\n * Well-Known Text format is defined in the OGC Simple Features\n * Specification for SQL.\n *

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

\n * The SFS WKT spec does not define a special tag for {@link LinearRing}s.\n * Under the spec, rings are output as LINESTRINGs.\n */\n\n/**\n * @param {GeometryFactory} geometryFactory\n * @constructor\n */\nvar WKTWriter = function WKTWriter (geometryFactory) {\n this.parser = new WKTParser(geometryFactory);\n};\n\n/**\n * Converts a Geometry to its Well-known Text representation.\n *\n * @param {Geometry} geometry a Geometry to process.\n * @return {string} a string (see the OpenGIS Simple\n * Features Specification).\n * @memberof WKTWriter\n */\nWKTWriter.prototype.write = function write (geometry) {\n return this.parser.write(geometry)\n};\n/**\n * Generates the WKT for a LINESTRING specified by two\n * {@link Coordinate}s.\n *\n * @param p0 the first coordinate.\n * @param p1 the second coordinate.\n *\n * @return the WKT.\n * @private\n */\nWKTWriter.toLineString = function toLineString (p0, p1) {\n if (arguments.length !== 2) {\n throw new Error('Not implemented')\n }\n return 'LINESTRING ( ' + p0.x + ' ' + p0.y + ', ' + p1.x + ' ' + p1.y + ' )'\n};\n\nvar RuntimeException = (function (Error) {\n function RuntimeException (message) {\n Error.call(this, message);\n this.name = 'RuntimeException';\n this.message = message;\n this.stack = (new Error()).stack;\n }\n\n if ( Error ) RuntimeException.__proto__ = Error;\n RuntimeException.prototype = Object.create( Error && Error.prototype );\n RuntimeException.prototype.constructor = RuntimeException;\n\n return RuntimeException;\n}(Error));\n\nvar AssertionFailedException = (function (RuntimeException$$1) {\n function AssertionFailedException () {\n RuntimeException$$1.call(this);\n if (arguments.length === 0) {\n RuntimeException$$1.call(this);\n } else if (arguments.length === 1) {\n var message = arguments[0];\n RuntimeException$$1.call(this, message);\n }\n }\n\n if ( RuntimeException$$1 ) AssertionFailedException.__proto__ = RuntimeException$$1;\n AssertionFailedException.prototype = Object.create( RuntimeException$$1 && RuntimeException$$1.prototype );\n AssertionFailedException.prototype.constructor = AssertionFailedException;\n AssertionFailedException.prototype.interfaces_ = function interfaces_ () {\n return []\n };\n AssertionFailedException.prototype.getClass = function getClass () {\n return AssertionFailedException\n };\n\n return AssertionFailedException;\n}(RuntimeException));\n\nvar Assert = function Assert () {};\n\nAssert.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nAssert.prototype.getClass = function getClass () {\n return Assert\n};\nAssert.shouldNeverReachHere = function shouldNeverReachHere () {\n if (arguments.length === 0) {\n Assert.shouldNeverReachHere(null);\n } else if (arguments.length === 1) {\n var message = arguments[0];\n throw new AssertionFailedException('Should never reach here' + (message !== null ? ': ' + message : ''))\n }\n};\nAssert.isTrue = function isTrue () {\n var assertion;\n var message;\n if (arguments.length === 1) {\n assertion = arguments[0];\n Assert.isTrue(assertion, null);\n } else if (arguments.length === 2) {\n assertion = arguments[0];\n message = arguments[1];\n if (!assertion) {\n if (message === null) {\n throw new AssertionFailedException()\n } else {\n throw new AssertionFailedException(message)\n }\n }\n }\n};\nAssert.equals = function equals () {\n var expectedValue;\n var actualValue;\n var message;\n if (arguments.length === 2) {\n expectedValue = arguments[0];\n actualValue = arguments[1];\n Assert.equals(expectedValue, actualValue, null);\n } else if (arguments.length === 3) {\n expectedValue = arguments[0];\n actualValue = arguments[1];\n message = arguments[2];\n if (!actualValue.equals(expectedValue)) {\n throw new AssertionFailedException('Expected ' + expectedValue + ' but encountered ' + actualValue + (message !== null ? ': ' + message : ''))\n }\n }\n};\n\nvar LineIntersector = function LineIntersector () {\n this._result = null;\n this._inputLines = Array(2).fill().map(function () { return Array(2); });\n this._intPt = new Array(2).fill(null);\n this._intLineIndex = null;\n this._isProper = null;\n this._pa = null;\n this._pb = null;\n this._precisionModel = null;\n this._intPt[0] = new Coordinate();\n this._intPt[1] = new Coordinate();\n this._pa = this._intPt[0];\n this._pb = this._intPt[1];\n this._result = 0;\n};\n\nvar staticAccessors$10 = { DONT_INTERSECT: { configurable: true },DO_INTERSECT: { configurable: true },COLLINEAR: { configurable: true },NO_INTERSECTION: { configurable: true },POINT_INTERSECTION: { configurable: true },COLLINEAR_INTERSECTION: { configurable: true } };\nLineIntersector.prototype.getIndexAlongSegment = function getIndexAlongSegment (segmentIndex, intIndex) {\n this.computeIntLineIndex();\n return this._intLineIndex[segmentIndex][intIndex]\n};\nLineIntersector.prototype.getTopologySummary = function getTopologySummary () {\n var catBuf = new StringBuffer();\n if (this.isEndPoint()) { catBuf.append(' endpoint'); }\n if (this._isProper) { catBuf.append(' proper'); }\n if (this.isCollinear()) { catBuf.append(' collinear'); }\n return catBuf.toString()\n};\nLineIntersector.prototype.computeIntersection = function computeIntersection (p1, p2, p3, p4) {\n this._inputLines[0][0] = p1;\n this._inputLines[0][1] = p2;\n this._inputLines[1][0] = p3;\n this._inputLines[1][1] = p4;\n this._result = this.computeIntersect(p1, p2, p3, p4);\n};\nLineIntersector.prototype.getIntersectionNum = function getIntersectionNum () {\n return this._result\n};\nLineIntersector.prototype.computeIntLineIndex = function computeIntLineIndex () {\n if (arguments.length === 0) {\n if (this._intLineIndex === null) {\n this._intLineIndex = Array(2).fill().map(function () { return Array(2); });\n this.computeIntLineIndex(0);\n this.computeIntLineIndex(1);\n }\n } else if (arguments.length === 1) {\n var segmentIndex = arguments[0];\n var dist0 = this.getEdgeDistance(segmentIndex, 0);\n var dist1 = this.getEdgeDistance(segmentIndex, 1);\n if (dist0 > dist1) {\n this._intLineIndex[segmentIndex][0] = 0;\n this._intLineIndex[segmentIndex][1] = 1;\n } else {\n this._intLineIndex[segmentIndex][0] = 1;\n this._intLineIndex[segmentIndex][1] = 0;\n }\n }\n};\nLineIntersector.prototype.isProper = function isProper () {\n return this.hasIntersection() && this._isProper\n};\nLineIntersector.prototype.setPrecisionModel = function setPrecisionModel (precisionModel) {\n this._precisionModel = precisionModel;\n};\nLineIntersector.prototype.isInteriorIntersection = function isInteriorIntersection () {\n var this$1 = this;\n\n if (arguments.length === 0) {\n if (this.isInteriorIntersection(0)) { return true }\n if (this.isInteriorIntersection(1)) { return true }\n return false\n } else if (arguments.length === 1) {\n var inputLineIndex = arguments[0];\n for (var i = 0; i < this._result; i++) {\n if (!(this$1._intPt[i].equals2D(this$1._inputLines[inputLineIndex][0]) || this$1._intPt[i].equals2D(this$1._inputLines[inputLineIndex][1]))) {\n return true\n }\n }\n return false\n }\n};\nLineIntersector.prototype.getIntersection = function getIntersection (intIndex) {\n return this._intPt[intIndex]\n};\nLineIntersector.prototype.isEndPoint = function isEndPoint () {\n return this.hasIntersection() && !this._isProper\n};\nLineIntersector.prototype.hasIntersection = function hasIntersection () {\n return this._result !== LineIntersector.NO_INTERSECTION\n};\nLineIntersector.prototype.getEdgeDistance = function getEdgeDistance (segmentIndex, intIndex) {\n var dist = LineIntersector.computeEdgeDistance(this._intPt[intIndex], this._inputLines[segmentIndex][0], this._inputLines[segmentIndex][1]);\n return dist\n};\nLineIntersector.prototype.isCollinear = function isCollinear () {\n return this._result === LineIntersector.COLLINEAR_INTERSECTION\n};\nLineIntersector.prototype.toString = function toString () {\n return WKTWriter.toLineString(this._inputLines[0][0], this._inputLines[0][1]) + ' - ' + WKTWriter.toLineString(this._inputLines[1][0], this._inputLines[1][1]) + this.getTopologySummary()\n};\nLineIntersector.prototype.getEndpoint = function getEndpoint (segmentIndex, ptIndex) {\n return this._inputLines[segmentIndex][ptIndex]\n};\nLineIntersector.prototype.isIntersection = function isIntersection (pt) {\n var this$1 = this;\n\n for (var i = 0; i < this._result; i++) {\n if (this$1._intPt[i].equals2D(pt)) {\n return true\n }\n }\n return false\n};\nLineIntersector.prototype.getIntersectionAlongSegment = function getIntersectionAlongSegment (segmentIndex, intIndex) {\n this.computeIntLineIndex();\n return this._intPt[this._intLineIndex[segmentIndex][intIndex]]\n};\nLineIntersector.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nLineIntersector.prototype.getClass = function getClass () {\n return LineIntersector\n};\nLineIntersector.computeEdgeDistance = function computeEdgeDistance (p, p0, p1) {\n var dx = Math.abs(p1.x - p0.x);\n var dy = Math.abs(p1.y - p0.y);\n var dist = -1.0;\n if (p.equals(p0)) {\n dist = 0.0;\n } else if (p.equals(p1)) {\n if (dx > dy) { dist = dx; } else { dist = dy; }\n } else {\n var pdx = Math.abs(p.x - p0.x);\n var pdy = Math.abs(p.y - p0.y);\n if (dx > dy) { dist = pdx; } else { dist = pdy; }\n if (dist === 0.0 && !p.equals(p0)) {\n dist = Math.max(pdx, pdy);\n }\n }\n Assert.isTrue(!(dist === 0.0 && !p.equals(p0)), 'Bad distance calculation');\n return dist\n};\nLineIntersector.nonRobustComputeEdgeDistance = function nonRobustComputeEdgeDistance (p, p1, p2) {\n var dx = p.x - p1.x;\n var dy = p.y - p1.y;\n var dist = Math.sqrt(dx * dx + dy * dy);\n Assert.isTrue(!(dist === 0.0 && !p.equals(p1)), 'Invalid distance calculation');\n return dist\n};\nstaticAccessors$10.DONT_INTERSECT.get = function () { return 0 };\nstaticAccessors$10.DO_INTERSECT.get = function () { return 1 };\nstaticAccessors$10.COLLINEAR.get = function () { return 2 };\nstaticAccessors$10.NO_INTERSECTION.get = function () { return 0 };\nstaticAccessors$10.POINT_INTERSECTION.get = function () { return 1 };\nstaticAccessors$10.COLLINEAR_INTERSECTION.get = function () { return 2 };\n\nObject.defineProperties( LineIntersector, staticAccessors$10 );\n\nvar RobustLineIntersector = (function (LineIntersector$$1) {\n function RobustLineIntersector () {\n LineIntersector$$1.apply(this, arguments);\n }\n\n if ( LineIntersector$$1 ) RobustLineIntersector.__proto__ = LineIntersector$$1;\n RobustLineIntersector.prototype = Object.create( LineIntersector$$1 && LineIntersector$$1.prototype );\n RobustLineIntersector.prototype.constructor = RobustLineIntersector;\n\n RobustLineIntersector.prototype.isInSegmentEnvelopes = function isInSegmentEnvelopes (intPt) {\n var env0 = new Envelope(this._inputLines[0][0], this._inputLines[0][1]);\n var env1 = new Envelope(this._inputLines[1][0], this._inputLines[1][1]);\n return env0.contains(intPt) && env1.contains(intPt)\n };\n RobustLineIntersector.prototype.computeIntersection = function computeIntersection () {\n if (arguments.length === 3) {\n var p = arguments[0];\n var p1 = arguments[1];\n var p2 = arguments[2];\n this._isProper = false;\n if (Envelope.intersects(p1, p2, p)) {\n if (CGAlgorithms.orientationIndex(p1, p2, p) === 0 && CGAlgorithms.orientationIndex(p2, p1, p) === 0) {\n this._isProper = true;\n if (p.equals(p1) || p.equals(p2)) {\n this._isProper = false;\n }\n this._result = LineIntersector$$1.POINT_INTERSECTION;\n return null\n }\n }\n this._result = LineIntersector$$1.NO_INTERSECTION;\n } else { return LineIntersector$$1.prototype.computeIntersection.apply(this, arguments) }\n };\n RobustLineIntersector.prototype.normalizeToMinimum = function normalizeToMinimum (n1, n2, n3, n4, normPt) {\n normPt.x = this.smallestInAbsValue(n1.x, n2.x, n3.x, n4.x);\n normPt.y = this.smallestInAbsValue(n1.y, n2.y, n3.y, n4.y);\n n1.x -= normPt.x;\n n1.y -= normPt.y;\n n2.x -= normPt.x;\n n2.y -= normPt.y;\n n3.x -= normPt.x;\n n3.y -= normPt.y;\n n4.x -= normPt.x;\n n4.y -= normPt.y;\n };\n RobustLineIntersector.prototype.safeHCoordinateIntersection = function safeHCoordinateIntersection (p1, p2, q1, q2) {\n var intPt = null;\n try {\n intPt = HCoordinate.intersection(p1, p2, q1, q2);\n } catch (e) {\n if (e instanceof NotRepresentableException) {\n intPt = RobustLineIntersector.nearestEndpoint(p1, p2, q1, q2);\n } else { throw e }\n } finally {}\n return intPt\n };\n RobustLineIntersector.prototype.intersection = function intersection (p1, p2, q1, q2) {\n var intPt = this.intersectionWithNormalization(p1, p2, q1, q2);\n if (!this.isInSegmentEnvelopes(intPt)) {\n intPt = new Coordinate(RobustLineIntersector.nearestEndpoint(p1, p2, q1, q2));\n }\n if (this._precisionModel !== null) {\n this._precisionModel.makePrecise(intPt);\n }\n return intPt\n };\n RobustLineIntersector.prototype.smallestInAbsValue = function smallestInAbsValue (x1, x2, x3, x4) {\n var x = x1;\n var xabs = Math.abs(x);\n if (Math.abs(x2) < xabs) {\n x = x2;\n xabs = Math.abs(x2);\n }\n if (Math.abs(x3) < xabs) {\n x = x3;\n xabs = Math.abs(x3);\n }\n if (Math.abs(x4) < xabs) {\n x = x4;\n }\n return x\n };\n RobustLineIntersector.prototype.checkDD = function checkDD (p1, p2, q1, q2, intPt) {\n var intPtDD = CGAlgorithmsDD.intersection(p1, p2, q1, q2);\n var isIn = this.isInSegmentEnvelopes(intPtDD);\n System.out.println('DD in env = ' + isIn + ' --------------------- ' + intPtDD);\n if (intPt.distance(intPtDD) > 0.0001) {\n System.out.println('Distance = ' + intPt.distance(intPtDD));\n }\n };\n RobustLineIntersector.prototype.intersectionWithNormalization = function intersectionWithNormalization (p1, p2, q1, q2) {\n var n1 = new Coordinate(p1);\n var n2 = new Coordinate(p2);\n var n3 = new Coordinate(q1);\n var n4 = new Coordinate(q2);\n var normPt = new Coordinate();\n this.normalizeToEnvCentre(n1, n2, n3, n4, normPt);\n var intPt = this.safeHCoordinateIntersection(n1, n2, n3, n4);\n intPt.x += normPt.x;\n intPt.y += normPt.y;\n return intPt\n };\n RobustLineIntersector.prototype.computeCollinearIntersection = function computeCollinearIntersection (p1, p2, q1, q2) {\n var p1q1p2 = Envelope.intersects(p1, p2, q1);\n var p1q2p2 = Envelope.intersects(p1, p2, q2);\n var q1p1q2 = Envelope.intersects(q1, q2, p1);\n var q1p2q2 = Envelope.intersects(q1, q2, p2);\n if (p1q1p2 && p1q2p2) {\n this._intPt[0] = q1;\n this._intPt[1] = q2;\n return LineIntersector$$1.COLLINEAR_INTERSECTION\n }\n if (q1p1q2 && q1p2q2) {\n this._intPt[0] = p1;\n this._intPt[1] = p2;\n return LineIntersector$$1.COLLINEAR_INTERSECTION\n }\n if (p1q1p2 && q1p1q2) {\n this._intPt[0] = q1;\n this._intPt[1] = p1;\n return q1.equals(p1) && !p1q2p2 && !q1p2q2 ? LineIntersector$$1.POINT_INTERSECTION : LineIntersector$$1.COLLINEAR_INTERSECTION\n }\n if (p1q1p2 && q1p2q2) {\n this._intPt[0] = q1;\n this._intPt[1] = p2;\n return q1.equals(p2) && !p1q2p2 && !q1p1q2 ? LineIntersector$$1.POINT_INTERSECTION : LineIntersector$$1.COLLINEAR_INTERSECTION\n }\n if (p1q2p2 && q1p1q2) {\n this._intPt[0] = q2;\n this._intPt[1] = p1;\n return q2.equals(p1) && !p1q1p2 && !q1p2q2 ? LineIntersector$$1.POINT_INTERSECTION : LineIntersector$$1.COLLINEAR_INTERSECTION\n }\n if (p1q2p2 && q1p2q2) {\n this._intPt[0] = q2;\n this._intPt[1] = p2;\n return q2.equals(p2) && !p1q1p2 && !q1p1q2 ? LineIntersector$$1.POINT_INTERSECTION : LineIntersector$$1.COLLINEAR_INTERSECTION\n }\n return LineIntersector$$1.NO_INTERSECTION\n };\n RobustLineIntersector.prototype.normalizeToEnvCentre = function normalizeToEnvCentre (n00, n01, n10, n11, normPt) {\n var minX0 = n00.x < n01.x ? n00.x : n01.x;\n var minY0 = n00.y < n01.y ? n00.y : n01.y;\n var maxX0 = n00.x > n01.x ? n00.x : n01.x;\n var maxY0 = n00.y > n01.y ? n00.y : n01.y;\n var minX1 = n10.x < n11.x ? n10.x : n11.x;\n var minY1 = n10.y < n11.y ? n10.y : n11.y;\n var maxX1 = n10.x > n11.x ? n10.x : n11.x;\n var maxY1 = n10.y > n11.y ? n10.y : n11.y;\n var intMinX = minX0 > minX1 ? minX0 : minX1;\n var intMaxX = maxX0 < maxX1 ? maxX0 : maxX1;\n var intMinY = minY0 > minY1 ? minY0 : minY1;\n var intMaxY = maxY0 < maxY1 ? maxY0 : maxY1;\n var intMidX = (intMinX + intMaxX) / 2.0;\n var intMidY = (intMinY + intMaxY) / 2.0;\n normPt.x = intMidX;\n normPt.y = intMidY;\n n00.x -= normPt.x;\n n00.y -= normPt.y;\n n01.x -= normPt.x;\n n01.y -= normPt.y;\n n10.x -= normPt.x;\n n10.y -= normPt.y;\n n11.x -= normPt.x;\n n11.y -= normPt.y;\n };\n RobustLineIntersector.prototype.computeIntersect = function computeIntersect (p1, p2, q1, q2) {\n this._isProper = false;\n if (!Envelope.intersects(p1, p2, q1, q2)) { return LineIntersector$$1.NO_INTERSECTION }\n var Pq1 = CGAlgorithms.orientationIndex(p1, p2, q1);\n var Pq2 = CGAlgorithms.orientationIndex(p1, p2, q2);\n if ((Pq1 > 0 && Pq2 > 0) || (Pq1 < 0 && Pq2 < 0)) {\n return LineIntersector$$1.NO_INTERSECTION\n }\n var Qp1 = CGAlgorithms.orientationIndex(q1, q2, p1);\n var Qp2 = CGAlgorithms.orientationIndex(q1, q2, p2);\n if ((Qp1 > 0 && Qp2 > 0) || (Qp1 < 0 && Qp2 < 0)) {\n return LineIntersector$$1.NO_INTERSECTION\n }\n var collinear = Pq1 === 0 && Pq2 === 0 && Qp1 === 0 && Qp2 === 0;\n if (collinear) {\n return this.computeCollinearIntersection(p1, p2, q1, q2)\n }\n if (Pq1 === 0 || Pq2 === 0 || Qp1 === 0 || Qp2 === 0) {\n this._isProper = false;\n if (p1.equals2D(q1) || p1.equals2D(q2)) {\n this._intPt[0] = p1;\n } else if (p2.equals2D(q1) || p2.equals2D(q2)) {\n this._intPt[0] = p2;\n } else if (Pq1 === 0) {\n this._intPt[0] = new Coordinate(q1);\n } else if (Pq2 === 0) {\n this._intPt[0] = new Coordinate(q2);\n } else if (Qp1 === 0) {\n this._intPt[0] = new Coordinate(p1);\n } else if (Qp2 === 0) {\n this._intPt[0] = new Coordinate(p2);\n }\n } else {\n this._isProper = true;\n this._intPt[0] = this.intersection(p1, p2, q1, q2);\n }\n return LineIntersector$$1.POINT_INTERSECTION\n };\n RobustLineIntersector.prototype.interfaces_ = function interfaces_ () {\n return []\n };\n RobustLineIntersector.prototype.getClass = function getClass () {\n return RobustLineIntersector\n };\n RobustLineIntersector.nearestEndpoint = function nearestEndpoint (p1, p2, q1, q2) {\n var nearestPt = p1;\n var minDist = CGAlgorithms.distancePointLine(p1, q1, q2);\n var dist = CGAlgorithms.distancePointLine(p2, q1, q2);\n if (dist < minDist) {\n minDist = dist;\n nearestPt = p2;\n }\n dist = CGAlgorithms.distancePointLine(q1, p1, p2);\n if (dist < minDist) {\n minDist = dist;\n nearestPt = q1;\n }\n dist = CGAlgorithms.distancePointLine(q2, p1, p2);\n if (dist < minDist) {\n minDist = dist;\n nearestPt = q2;\n }\n return nearestPt\n };\n\n return RobustLineIntersector;\n}(LineIntersector));\n\nvar RobustDeterminant = function RobustDeterminant () {};\n\nRobustDeterminant.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nRobustDeterminant.prototype.getClass = function getClass () {\n return RobustDeterminant\n};\nRobustDeterminant.orientationIndex = function orientationIndex (p1, p2, q) {\n var dx1 = p2.x - p1.x;\n var dy1 = p2.y - p1.y;\n var dx2 = q.x - p2.x;\n var dy2 = q.y - p2.y;\n return RobustDeterminant.signOfDet2x2(dx1, dy1, dx2, dy2)\n};\nRobustDeterminant.signOfDet2x2 = function signOfDet2x2 (x1, y1, x2, y2) {\n var sign = null;\n var swap = null;\n var k = null;\n sign = 1;\n if (x1 === 0.0 || y2 === 0.0) {\n if (y1 === 0.0 || x2 === 0.0) {\n return 0\n } else if (y1 > 0) {\n if (x2 > 0) {\n return -sign\n } else {\n return sign\n }\n } else {\n if (x2 > 0) {\n return sign\n } else {\n return -sign\n }\n }\n }\n if (y1 === 0.0 || x2 === 0.0) {\n if (y2 > 0) {\n if (x1 > 0) {\n return sign\n } else {\n return -sign\n }\n } else {\n if (x1 > 0) {\n return -sign\n } else {\n return sign\n }\n }\n }\n if (y1 > 0.0) {\n if (y2 > 0.0) {\n if (y1 <= y2) {\n \n } else {\n sign = -sign;\n swap = x1;\n x1 = x2;\n x2 = swap;\n swap = y1;\n y1 = y2;\n y2 = swap;\n }\n } else {\n if (y1 <= -y2) {\n sign = -sign;\n x2 = -x2;\n y2 = -y2;\n } else {\n swap = x1;\n x1 = -x2;\n x2 = swap;\n swap = y1;\n y1 = -y2;\n y2 = swap;\n }\n }\n } else {\n if (y2 > 0.0) {\n if (-y1 <= y2) {\n sign = -sign;\n x1 = -x1;\n y1 = -y1;\n } else {\n swap = -x1;\n x1 = x2;\n x2 = swap;\n swap = -y1;\n y1 = y2;\n y2 = swap;\n }\n } else {\n if (y1 >= y2) {\n x1 = -x1;\n y1 = -y1;\n x2 = -x2;\n y2 = -y2;\n } else {\n sign = -sign;\n swap = -x1;\n x1 = -x2;\n x2 = swap;\n swap = -y1;\n y1 = -y2;\n y2 = swap;\n }\n }\n }\n if (x1 > 0.0) {\n if (x2 > 0.0) {\n if (x1 <= x2) {\n \n } else {\n return sign\n }\n } else {\n return sign\n }\n } else {\n if (x2 > 0.0) {\n return -sign\n } else {\n if (x1 >= x2) {\n sign = -sign;\n x1 = -x1;\n x2 = -x2;\n } else {\n return -sign\n }\n }\n }\n while (true) {\n k = Math.floor(x2 / x1);\n x2 = x2 - k * x1;\n y2 = y2 - k * y1;\n if (y2 < 0.0) {\n return -sign\n }\n if (y2 > y1) {\n return sign\n }\n if (x1 > x2 + x2) {\n if (y1 < y2 + y2) {\n return sign\n }\n } else {\n if (y1 > y2 + y2) {\n return -sign\n } else {\n x2 = x1 - x2;\n y2 = y1 - y2;\n sign = -sign;\n }\n }\n if (y2 === 0.0) {\n if (x2 === 0.0) {\n return 0\n } else {\n return -sign\n }\n }\n if (x2 === 0.0) {\n return sign\n }\n k = Math.floor(x1 / x2);\n x1 = x1 - k * x2;\n y1 = y1 - k * y2;\n if (y1 < 0.0) {\n return sign\n }\n if (y1 > y2) {\n return -sign\n }\n if (x2 > x1 + x1) {\n if (y2 < y1 + y1) {\n return -sign\n }\n } else {\n if (y2 > y1 + y1) {\n return sign\n } else {\n x1 = x2 - x1;\n y1 = y2 - y1;\n sign = -sign;\n }\n }\n if (y1 === 0.0) {\n if (x1 === 0.0) {\n return 0\n } else {\n return sign\n }\n }\n if (x1 === 0.0) {\n return -sign\n }\n }\n};\n\nvar RayCrossingCounter = function RayCrossingCounter () {\n this._p = null;\n this._crossingCount = 0;\n this._isPointOnSegment = false;\n var p = arguments[0];\n this._p = p;\n};\nRayCrossingCounter.prototype.countSegment = function countSegment (p1, p2) {\n if (p1.x < this._p.x && p2.x < this._p.x) { return null }\n if (this._p.x === p2.x && this._p.y === p2.y) {\n this._isPointOnSegment = true;\n return null\n }\n if (p1.y === this._p.y && p2.y === this._p.y) {\n var minx = p1.x;\n var maxx = p2.x;\n if (minx > maxx) {\n minx = p2.x;\n maxx = p1.x;\n }\n if (this._p.x >= minx && this._p.x <= maxx) {\n this._isPointOnSegment = true;\n }\n return null\n }\n if ((p1.y > this._p.y && p2.y <= this._p.y) || (p2.y > this._p.y && p1.y <= this._p.y)) {\n var x1 = p1.x - this._p.x;\n var y1 = p1.y - this._p.y;\n var x2 = p2.x - this._p.x;\n var y2 = p2.y - this._p.y;\n var xIntSign = RobustDeterminant.signOfDet2x2(x1, y1, x2, y2);\n if (xIntSign === 0.0) {\n this._isPointOnSegment = true;\n return null\n }\n if (y2 < y1) { xIntSign = -xIntSign; }\n if (xIntSign > 0.0) {\n this._crossingCount++;\n }\n }\n};\nRayCrossingCounter.prototype.isPointInPolygon = function isPointInPolygon () {\n return this.getLocation() !== Location.EXTERIOR\n};\nRayCrossingCounter.prototype.getLocation = function getLocation () {\n if (this._isPointOnSegment) { return Location.BOUNDARY }\n if (this._crossingCount % 2 === 1) {\n return Location.INTERIOR\n }\n return Location.EXTERIOR\n};\nRayCrossingCounter.prototype.isOnSegment = function isOnSegment () {\n return this._isPointOnSegment\n};\nRayCrossingCounter.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nRayCrossingCounter.prototype.getClass = function getClass () {\n return RayCrossingCounter\n};\nRayCrossingCounter.locatePointInRing = function locatePointInRing () {\n if (arguments[0] instanceof Coordinate && hasInterface(arguments[1], CoordinateSequence)) {\n var p = arguments[0];\n var ring = arguments[1];\n var counter = new RayCrossingCounter(p);\n var p1 = new Coordinate();\n var p2 = new Coordinate();\n for (var i = 1; i < ring.size(); i++) {\n ring.getCoordinate(i, p1);\n ring.getCoordinate(i - 1, p2);\n counter.countSegment(p1, p2);\n if (counter.isOnSegment()) { return counter.getLocation() }\n }\n return counter.getLocation()\n } else if (arguments[0] instanceof Coordinate && arguments[1] instanceof Array) {\n var p$1 = arguments[0];\n var ring$1 = arguments[1];\n var counter$1 = new RayCrossingCounter(p$1);\n for (var i$1 = 1; i$1 < ring$1.length; i$1++) {\n var p1$1 = ring$1[i$1];\n var p2$1 = ring$1[i$1 - 1];\n counter$1.countSegment(p1$1, p2$1);\n if (counter$1.isOnSegment()) { return counter$1.getLocation() }\n }\n return counter$1.getLocation()\n }\n};\n\nvar CGAlgorithms = function CGAlgorithms () {};\n\nvar staticAccessors$3 = { CLOCKWISE: { configurable: true },RIGHT: { configurable: true },COUNTERCLOCKWISE: { configurable: true },LEFT: { configurable: true },COLLINEAR: { configurable: true },STRAIGHT: { configurable: true } };\n\nCGAlgorithms.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nCGAlgorithms.prototype.getClass = function getClass () {\n return CGAlgorithms\n};\nCGAlgorithms.orientationIndex = function orientationIndex (p1, p2, q) {\n return CGAlgorithmsDD.orientationIndex(p1, p2, q)\n};\nCGAlgorithms.signedArea = function signedArea () {\n if (arguments[0] instanceof Array) {\n var ring = arguments[0];\n if (ring.length < 3) { return 0.0 }\n var sum = 0.0;\n var x0 = ring[0].x;\n for (var i = 1; i < ring.length - 1; i++) {\n var x = ring[i].x - x0;\n var y1 = ring[i + 1].y;\n var y2 = ring[i - 1].y;\n sum += x * (y2 - y1);\n }\n return sum / 2.0\n } else if (hasInterface(arguments[0], CoordinateSequence)) {\n var ring$1 = arguments[0];\n var n = ring$1.size();\n if (n < 3) { return 0.0 }\n var p0 = new Coordinate();\n var p1 = new Coordinate();\n var p2 = new Coordinate();\n ring$1.getCoordinate(0, p1);\n ring$1.getCoordinate(1, p2);\n var x0$1 = p1.x;\n p2.x -= x0$1;\n var sum$1 = 0.0;\n for (var i$1 = 1; i$1 < n - 1; i$1++) {\n p0.y = p1.y;\n p1.x = p2.x;\n p1.y = p2.y;\n ring$1.getCoordinate(i$1 + 1, p2);\n p2.x -= x0$1;\n sum$1 += p1.x * (p0.y - p2.y);\n }\n return sum$1 / 2.0\n }\n};\nCGAlgorithms.distanceLineLine = function distanceLineLine (A, B, C, D) {\n if (A.equals(B)) { return CGAlgorithms.distancePointLine(A, C, D) }\n if (C.equals(D)) { return CGAlgorithms.distancePointLine(D, A, B) }\n var noIntersection = false;\n if (!Envelope.intersects(A, B, C, D)) {\n noIntersection = true;\n } else {\n var denom = (B.x - A.x) * (D.y - C.y) - (B.y - A.y) * (D.x - C.x);\n if (denom === 0) {\n noIntersection = true;\n } else {\n var rNumb = (A.y - C.y) * (D.x - C.x) - (A.x - C.x) * (D.y - C.y);\n var sNum = (A.y - C.y) * (B.x - A.x) - (A.x - C.x) * (B.y - A.y);\n var s = sNum / denom;\n var r = rNumb / denom;\n if (r < 0 || r > 1 || s < 0 || s > 1) {\n noIntersection = true;\n }\n }\n }\n if (noIntersection) {\n return MathUtil.min(CGAlgorithms.distancePointLine(A, C, D), CGAlgorithms.distancePointLine(B, C, D), CGAlgorithms.distancePointLine(C, A, B), CGAlgorithms.distancePointLine(D, A, B))\n }\n return 0.0\n};\nCGAlgorithms.isPointInRing = function isPointInRing (p, ring) {\n return CGAlgorithms.locatePointInRing(p, ring) !== Location.EXTERIOR\n};\nCGAlgorithms.computeLength = function computeLength (pts) {\n var n = pts.size();\n if (n <= 1) { return 0.0 }\n var len = 0.0;\n var p = new Coordinate();\n pts.getCoordinate(0, p);\n var x0 = p.x;\n var y0 = p.y;\n for (var i = 1; i < n; i++) {\n pts.getCoordinate(i, p);\n var x1 = p.x;\n var y1 = p.y;\n var dx = x1 - x0;\n var dy = y1 - y0;\n len += Math.sqrt(dx * dx + dy * dy);\n x0 = x1;\n y0 = y1;\n }\n return len\n};\nCGAlgorithms.isCCW = function isCCW (ring) {\n var nPts = ring.length - 1;\n if (nPts < 3) { throw new IllegalArgumentException('Ring has fewer than 4 points, so orientation cannot be determined') }\n var hiPt = ring[0];\n var hiIndex = 0;\n for (var i = 1; i <= nPts; i++) {\n var p = ring[i];\n if (p.y > hiPt.y) {\n hiPt = p;\n hiIndex = i;\n }\n }\n var iPrev = hiIndex;\n do {\n iPrev = iPrev - 1;\n if (iPrev < 0) { iPrev = nPts; }\n } while (ring[iPrev].equals2D(hiPt) && iPrev !== hiIndex)\n var iNext = hiIndex;\n do {\n iNext = (iNext + 1) % nPts;\n } while (ring[iNext].equals2D(hiPt) && iNext !== hiIndex)\n var prev = ring[iPrev];\n var next = ring[iNext];\n if (prev.equals2D(hiPt) || next.equals2D(hiPt) || prev.equals2D(next)) { return false }\n var disc = CGAlgorithms.computeOrientation(prev, hiPt, next);\n var isCCW = false;\n if (disc === 0) {\n isCCW = prev.x > next.x;\n } else {\n isCCW = disc > 0;\n }\n return isCCW\n};\nCGAlgorithms.locatePointInRing = function locatePointInRing (p, ring) {\n return RayCrossingCounter.locatePointInRing(p, ring)\n};\nCGAlgorithms.distancePointLinePerpendicular = function distancePointLinePerpendicular (p, A, B) {\n var len2 = (B.x - A.x) * (B.x - A.x) + (B.y - A.y) * (B.y - A.y);\n var s = ((A.y - p.y) * (B.x - A.x) - (A.x - p.x) * (B.y - A.y)) / len2;\n return Math.abs(s) * Math.sqrt(len2)\n};\nCGAlgorithms.computeOrientation = function computeOrientation (p1, p2, q) {\n return CGAlgorithms.orientationIndex(p1, p2, q)\n};\nCGAlgorithms.distancePointLine = function distancePointLine () {\n if (arguments.length === 2) {\n var p = arguments[0];\n var line = arguments[1];\n if (line.length === 0) { throw new IllegalArgumentException('Line array must contain at least one vertex') }\n var minDistance = p.distance(line[0]);\n for (var i = 0; i < line.length - 1; i++) {\n var dist = CGAlgorithms.distancePointLine(p, line[i], line[i + 1]);\n if (dist < minDistance) {\n minDistance = dist;\n }\n }\n return minDistance\n } else if (arguments.length === 3) {\n var p$1 = arguments[0];\n var A = arguments[1];\n var B = arguments[2];\n if (A.x === B.x && A.y === B.y) { return p$1.distance(A) }\n var len2 = (B.x - A.x) * (B.x - A.x) + (B.y - A.y) * (B.y - A.y);\n var r = ((p$1.x - A.x) * (B.x - A.x) + (p$1.y - A.y) * (B.y - A.y)) / len2;\n if (r <= 0.0) { return p$1.distance(A) }\n if (r >= 1.0) { return p$1.distance(B) }\n var s = ((A.y - p$1.y) * (B.x - A.x) - (A.x - p$1.x) * (B.y - A.y)) / len2;\n return Math.abs(s) * Math.sqrt(len2)\n }\n};\nCGAlgorithms.isOnLine = function isOnLine (p, pt) {\n var lineIntersector = new RobustLineIntersector();\n for (var i = 1; i < pt.length; i++) {\n var p0 = pt[i - 1];\n var p1 = pt[i];\n lineIntersector.computeIntersection(p, p0, p1);\n if (lineIntersector.hasIntersection()) {\n return true\n }\n }\n return false\n};\nstaticAccessors$3.CLOCKWISE.get = function () { return -1 };\nstaticAccessors$3.RIGHT.get = function () { return CGAlgorithms.CLOCKWISE };\nstaticAccessors$3.COUNTERCLOCKWISE.get = function () { return 1 };\nstaticAccessors$3.LEFT.get = function () { return CGAlgorithms.COUNTERCLOCKWISE };\nstaticAccessors$3.COLLINEAR.get = function () { return 0 };\nstaticAccessors$3.STRAIGHT.get = function () { return CGAlgorithms.COLLINEAR };\n\nObject.defineProperties( CGAlgorithms, staticAccessors$3 );\n\nvar GeometryComponentFilter = function GeometryComponentFilter () {};\n\nGeometryComponentFilter.prototype.filter = function filter (geom) {};\nGeometryComponentFilter.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nGeometryComponentFilter.prototype.getClass = function getClass () {\n return GeometryComponentFilter\n};\n\nvar Geometry = function Geometry () {\n var factory = arguments[0];\n\n this._envelope = null;\n this._factory = null;\n this._SRID = null;\n this._userData = null;\n this._factory = factory;\n this._SRID = factory.getSRID();\n};\n\nvar staticAccessors$11 = { serialVersionUID: { configurable: true },SORTINDEX_POINT: { configurable: true },SORTINDEX_MULTIPOINT: { configurable: true },SORTINDEX_LINESTRING: { configurable: true },SORTINDEX_LINEARRING: { configurable: true },SORTINDEX_MULTILINESTRING: { configurable: true },SORTINDEX_POLYGON: { configurable: true },SORTINDEX_MULTIPOLYGON: { configurable: true },SORTINDEX_GEOMETRYCOLLECTION: { configurable: true },geometryChangedFilter: { configurable: true } };\nGeometry.prototype.isGeometryCollection = function isGeometryCollection () {\n return this.getSortIndex() === Geometry.SORTINDEX_GEOMETRYCOLLECTION\n};\nGeometry.prototype.getFactory = function getFactory () {\n return this._factory\n};\nGeometry.prototype.getGeometryN = function getGeometryN (n) {\n return this\n};\nGeometry.prototype.getArea = function getArea () {\n return 0.0\n};\nGeometry.prototype.isRectangle = function isRectangle () {\n return false\n};\nGeometry.prototype.equals = function equals () {\n if (arguments[0] instanceof Geometry) {\n var g$1 = arguments[0];\n if (g$1 === null) { return false }\n return this.equalsTopo(g$1)\n } else if (arguments[0] instanceof Object) {\n var o = arguments[0];\n if (!(o instanceof Geometry)) { return false }\n var g = o;\n return this.equalsExact(g)\n }\n};\nGeometry.prototype.equalsExact = function equalsExact (other) {\n return this === other || this.equalsExact(other, 0)\n};\nGeometry.prototype.geometryChanged = function geometryChanged () {\n this.apply(Geometry.geometryChangedFilter);\n};\nGeometry.prototype.geometryChangedAction = function geometryChangedAction () {\n this._envelope = null;\n};\nGeometry.prototype.equalsNorm = function equalsNorm (g) {\n if (g === null) { return false }\n return this.norm().equalsExact(g.norm())\n};\nGeometry.prototype.getLength = function getLength () {\n return 0.0\n};\nGeometry.prototype.getNumGeometries = function getNumGeometries () {\n return 1\n};\nGeometry.prototype.compareTo = function compareTo () {\n if (arguments.length === 1) {\n var o = arguments[0];\n var other = o;\n if (this.getSortIndex() !== other.getSortIndex()) {\n return this.getSortIndex() - other.getSortIndex()\n }\n if (this.isEmpty() && other.isEmpty()) {\n return 0\n }\n if (this.isEmpty()) {\n return -1\n }\n if (other.isEmpty()) {\n return 1\n }\n return this.compareToSameClass(o)\n } else if (arguments.length === 2) {\n var other$1 = arguments[0];\n var comp = arguments[1];\n if (this.getSortIndex() !== other$1.getSortIndex()) {\n return this.getSortIndex() - other$1.getSortIndex()\n }\n if (this.isEmpty() && other$1.isEmpty()) {\n return 0\n }\n if (this.isEmpty()) {\n return -1\n }\n if (other$1.isEmpty()) {\n return 1\n }\n return this.compareToSameClass(other$1, comp)\n }\n};\nGeometry.prototype.getUserData = function getUserData () {\n return this._userData\n};\nGeometry.prototype.getSRID = function getSRID () {\n return this._SRID\n};\nGeometry.prototype.getEnvelope = function getEnvelope () {\n return this.getFactory().toGeometry(this.getEnvelopeInternal())\n};\nGeometry.prototype.checkNotGeometryCollection = function checkNotGeometryCollection (g) {\n if (g.getSortIndex() === Geometry.SORTINDEX_GEOMETRYCOLLECTION) {\n throw new IllegalArgumentException('This method does not support GeometryCollection arguments')\n }\n};\nGeometry.prototype.equal = function equal (a, b, tolerance) {\n if (tolerance === 0) {\n return a.equals(b)\n }\n return a.distance(b) <= tolerance\n};\nGeometry.prototype.norm = function norm () {\n var copy = this.copy();\n copy.normalize();\n return copy\n};\nGeometry.prototype.getPrecisionModel = function getPrecisionModel () {\n return this._factory.getPrecisionModel()\n};\nGeometry.prototype.getEnvelopeInternal = function getEnvelopeInternal () {\n if (this._envelope === null) {\n this._envelope = this.computeEnvelopeInternal();\n }\n return new Envelope(this._envelope)\n};\nGeometry.prototype.setSRID = function setSRID (SRID) {\n this._SRID = SRID;\n};\nGeometry.prototype.setUserData = function setUserData (userData) {\n this._userData = userData;\n};\nGeometry.prototype.compare = function compare (a, b) {\n var i = a.iterator();\n var j = b.iterator();\n while (i.hasNext() && j.hasNext()) {\n var aElement = i.next();\n var bElement = j.next();\n var comparison = aElement.compareTo(bElement);\n if (comparison !== 0) {\n return comparison\n }\n }\n if (i.hasNext()) {\n return 1\n }\n if (j.hasNext()) {\n return -1\n }\n return 0\n};\nGeometry.prototype.hashCode = function hashCode () {\n return this.getEnvelopeInternal().hashCode()\n};\nGeometry.prototype.isGeometryCollectionOrDerived = function isGeometryCollectionOrDerived () {\n if (this.getSortIndex() === Geometry.SORTINDEX_GEOMETRYCOLLECTION || this.getSortIndex() === Geometry.SORTINDEX_MULTIPOINT || this.getSortIndex() === Geometry.SORTINDEX_MULTILINESTRING || this.getSortIndex() === Geometry.SORTINDEX_MULTIPOLYGON) {\n return true\n }\n return false\n};\nGeometry.prototype.interfaces_ = function interfaces_ () {\n return [Clonable, Comparable, Serializable]\n};\nGeometry.prototype.getClass = function getClass () {\n return Geometry\n};\nGeometry.hasNonEmptyElements = function hasNonEmptyElements (geometries) {\n for (var i = 0; i < geometries.length; i++) {\n if (!geometries[i].isEmpty()) {\n return true\n }\n }\n return false\n};\nGeometry.hasNullElements = function hasNullElements (array) {\n for (var i = 0; i < array.length; i++) {\n if (array[i] === null) {\n return true\n }\n }\n return false\n};\nstaticAccessors$11.serialVersionUID.get = function () { return 8763622679187376702 };\nstaticAccessors$11.SORTINDEX_POINT.get = function () { return 0 };\nstaticAccessors$11.SORTINDEX_MULTIPOINT.get = function () { return 1 };\nstaticAccessors$11.SORTINDEX_LINESTRING.get = function () { return 2 };\nstaticAccessors$11.SORTINDEX_LINEARRING.get = function () { return 3 };\nstaticAccessors$11.SORTINDEX_MULTILINESTRING.get = function () { return 4 };\nstaticAccessors$11.SORTINDEX_POLYGON.get = function () { return 5 };\nstaticAccessors$11.SORTINDEX_MULTIPOLYGON.get = function () { return 6 };\nstaticAccessors$11.SORTINDEX_GEOMETRYCOLLECTION.get = function () { return 7 };\nstaticAccessors$11.geometryChangedFilter.get = function () { return geometryChangedFilter };\n\nObject.defineProperties( Geometry, staticAccessors$11 );\n\nvar geometryChangedFilter = function geometryChangedFilter () {};\n\ngeometryChangedFilter.interfaces_ = function interfaces_ () {\n return [GeometryComponentFilter]\n};\ngeometryChangedFilter.filter = function filter (geom) {\n geom.geometryChangedAction();\n};\n\nvar CoordinateFilter = function CoordinateFilter () {};\n\nCoordinateFilter.prototype.filter = function filter (coord) {};\nCoordinateFilter.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nCoordinateFilter.prototype.getClass = function getClass () {\n return CoordinateFilter\n};\n\nvar BoundaryNodeRule = function BoundaryNodeRule () {};\n\nvar staticAccessors$12 = { Mod2BoundaryNodeRule: { configurable: true },EndPointBoundaryNodeRule: { configurable: true },MultiValentEndPointBoundaryNodeRule: { configurable: true },MonoValentEndPointBoundaryNodeRule: { configurable: true },MOD2_BOUNDARY_RULE: { configurable: true },ENDPOINT_BOUNDARY_RULE: { configurable: true },MULTIVALENT_ENDPOINT_BOUNDARY_RULE: { configurable: true },MONOVALENT_ENDPOINT_BOUNDARY_RULE: { configurable: true },OGC_SFS_BOUNDARY_RULE: { configurable: true } };\n\nBoundaryNodeRule.prototype.isInBoundary = function isInBoundary (boundaryCount) {};\nBoundaryNodeRule.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nBoundaryNodeRule.prototype.getClass = function getClass () {\n return BoundaryNodeRule\n};\nstaticAccessors$12.Mod2BoundaryNodeRule.get = function () { return Mod2BoundaryNodeRule };\nstaticAccessors$12.EndPointBoundaryNodeRule.get = function () { return EndPointBoundaryNodeRule };\nstaticAccessors$12.MultiValentEndPointBoundaryNodeRule.get = function () { return MultiValentEndPointBoundaryNodeRule };\nstaticAccessors$12.MonoValentEndPointBoundaryNodeRule.get = function () { return MonoValentEndPointBoundaryNodeRule };\nstaticAccessors$12.MOD2_BOUNDARY_RULE.get = function () { return new Mod2BoundaryNodeRule() };\nstaticAccessors$12.ENDPOINT_BOUNDARY_RULE.get = function () { return new EndPointBoundaryNodeRule() };\nstaticAccessors$12.MULTIVALENT_ENDPOINT_BOUNDARY_RULE.get = function () { return new MultiValentEndPointBoundaryNodeRule() };\nstaticAccessors$12.MONOVALENT_ENDPOINT_BOUNDARY_RULE.get = function () { return new MonoValentEndPointBoundaryNodeRule() };\nstaticAccessors$12.OGC_SFS_BOUNDARY_RULE.get = function () { return BoundaryNodeRule.MOD2_BOUNDARY_RULE };\n\nObject.defineProperties( BoundaryNodeRule, staticAccessors$12 );\n\nvar Mod2BoundaryNodeRule = function Mod2BoundaryNodeRule () {};\n\nMod2BoundaryNodeRule.prototype.isInBoundary = function isInBoundary (boundaryCount) {\n return boundaryCount % 2 === 1\n};\nMod2BoundaryNodeRule.prototype.interfaces_ = function interfaces_ () {\n return [BoundaryNodeRule]\n};\nMod2BoundaryNodeRule.prototype.getClass = function getClass () {\n return Mod2BoundaryNodeRule\n};\n\nvar EndPointBoundaryNodeRule = function EndPointBoundaryNodeRule () {};\n\nEndPointBoundaryNodeRule.prototype.isInBoundary = function isInBoundary (boundaryCount) {\n return boundaryCount > 0\n};\nEndPointBoundaryNodeRule.prototype.interfaces_ = function interfaces_ () {\n return [BoundaryNodeRule]\n};\nEndPointBoundaryNodeRule.prototype.getClass = function getClass () {\n return EndPointBoundaryNodeRule\n};\n\nvar MultiValentEndPointBoundaryNodeRule = function MultiValentEndPointBoundaryNodeRule () {};\n\nMultiValentEndPointBoundaryNodeRule.prototype.isInBoundary = function isInBoundary (boundaryCount) {\n return boundaryCount > 1\n};\nMultiValentEndPointBoundaryNodeRule.prototype.interfaces_ = function interfaces_ () {\n return [BoundaryNodeRule]\n};\nMultiValentEndPointBoundaryNodeRule.prototype.getClass = function getClass () {\n return MultiValentEndPointBoundaryNodeRule\n};\n\nvar MonoValentEndPointBoundaryNodeRule = function MonoValentEndPointBoundaryNodeRule () {};\n\nMonoValentEndPointBoundaryNodeRule.prototype.isInBoundary = function isInBoundary (boundaryCount) {\n return boundaryCount === 1\n};\nMonoValentEndPointBoundaryNodeRule.prototype.interfaces_ = function interfaces_ () {\n return [BoundaryNodeRule]\n};\nMonoValentEndPointBoundaryNodeRule.prototype.getClass = function getClass () {\n return MonoValentEndPointBoundaryNodeRule\n};\n\n// import Iterator from './Iterator'\n\n/**\n * @see http://download.oracle.com/javase/6/docs/api/java/util/Collection.html\n *\n * @constructor\n * @private\n */\nvar Collection = function Collection () {};\n\nCollection.prototype.add = function add () {};\n\n/**\n * Appends all of the elements in the specified collection to the end of this\n * list, in the order that they are returned by the specified collection's\n * iterator (optional operation).\n * @param {javascript.util.Collection} c\n * @return {boolean}\n */\nCollection.prototype.addAll = function addAll () {};\n\n/**\n * Returns true if this collection contains no elements.\n * @return {boolean}\n */\nCollection.prototype.isEmpty = function isEmpty () {};\n\n/**\n * Returns an iterator over the elements in this collection.\n * @return {javascript.util.Iterator}\n */\nCollection.prototype.iterator = function iterator () {};\n\n/**\n * Returns an iterator over the elements in this collection.\n * @return {number}\n */\nCollection.prototype.size = function size () {};\n\n/**\n * Returns an array containing all of the elements in this collection.\n * @return {Array}\n */\nCollection.prototype.toArray = function toArray () {};\n\n/**\n * Removes a single instance of the specified element from this collection if it\n * is present. (optional)\n * @param {Object} e\n * @return {boolean}\n */\nCollection.prototype.remove = function remove () {};\n\n/**\n * @param {string=} message Optional message\n * @extends {Error}\n * @constructor\n * @private\n */\nfunction IndexOutOfBoundsException (message) {\n this.message = message || '';\n}\nIndexOutOfBoundsException.prototype = new Error();\n\n/**\n * @type {string}\n */\nIndexOutOfBoundsException.prototype.name = 'IndexOutOfBoundsException';\n\n/**\n * @see http://download.oracle.com/javase/6/docs/api/java/util/Iterator.html\n * @constructor\n * @private\n */\nvar Iterator = function Iterator () {};\n\nIterator.prototype.hasNext = function hasNext () {};\n\n/**\n * Returns the next element in the iteration.\n * @return {Object}\n */\nIterator.prototype.next = function next () {};\n\n/**\n * Removes from the underlying collection the last element returned by the\n * iterator (optional operation).\n */\nIterator.prototype.remove = function remove () {};\n\n/**\n * @see http://download.oracle.com/javase/6/docs/api/java/util/List.html\n *\n * @extends {javascript.util.Collection}\n * @constructor\n * @private\n */\nvar List = (function (Collection$$1) {\n function List () {\n Collection$$1.apply(this, arguments);\n }\n\n if ( Collection$$1 ) List.__proto__ = Collection$$1;\n List.prototype = Object.create( Collection$$1 && Collection$$1.prototype );\n List.prototype.constructor = List;\n\n List.prototype.get = function get () { };\n\n /**\n * Replaces the element at the specified position in this list with the\n * specified element (optional operation).\n * @param {number} index\n * @param {Object} e\n * @return {Object}\n */\n List.prototype.set = function set () { };\n\n /**\n * Returns true if this collection contains no elements.\n * @return {boolean}\n */\n List.prototype.isEmpty = function isEmpty () { };\n\n return List;\n}(Collection));\n\n/**\n * @param {string=} message Optional message\n * @extends {Error}\n * @constructor\n * @private\n */\nfunction NoSuchElementException (message) {\n this.message = message || '';\n}\nNoSuchElementException.prototype = new Error();\n\n/**\n * @type {string}\n */\nNoSuchElementException.prototype.name = 'NoSuchElementException';\n\n// import OperationNotSupported from './OperationNotSupported'\n\n/**\n * @see http://download.oracle.com/javase/6/docs/api/java/util/ArrayList.html\n *\n * @extends List\n * @private\n */\nvar ArrayList = (function (List$$1) {\n function ArrayList () {\n List$$1.call(this);\n this.array_ = [];\n\n if (arguments[0] instanceof Collection) {\n this.addAll(arguments[0]);\n }\n }\n\n if ( List$$1 ) ArrayList.__proto__ = List$$1;\n ArrayList.prototype = Object.create( List$$1 && List$$1.prototype );\n ArrayList.prototype.constructor = ArrayList;\n\n ArrayList.prototype.ensureCapacity = function ensureCapacity () {};\n ArrayList.prototype.interfaces_ = function interfaces_ () { return [List$$1, Collection] };\n\n /**\n * @override\n */\n ArrayList.prototype.add = function add (e) {\n if (arguments.length === 1) {\n this.array_.push(e);\n } else {\n this.array_.splice(arguments[0], arguments[1]);\n }\n return true\n };\n\n ArrayList.prototype.clear = function clear () {\n this.array_ = [];\n };\n\n /**\n * @override\n */\n ArrayList.prototype.addAll = function addAll (c) {\n var this$1 = this;\n\n for (var i = c.iterator(); i.hasNext();) {\n this$1.add(i.next());\n }\n return true\n };\n\n /**\n * @override\n */\n ArrayList.prototype.set = function set (index, element) {\n var oldElement = this.array_[index];\n this.array_[index] = element;\n return oldElement\n };\n\n /**\n * @override\n */\n ArrayList.prototype.iterator = function iterator () {\n return new Iterator_(this)\n };\n\n /**\n * @override\n */\n ArrayList.prototype.get = function get (index) {\n if (index < 0 || index >= this.size()) {\n throw new IndexOutOfBoundsException()\n }\n\n return this.array_[index]\n };\n\n /**\n * @override\n */\n ArrayList.prototype.isEmpty = function isEmpty () {\n return this.array_.length === 0\n };\n\n /**\n * @override\n */\n ArrayList.prototype.size = function size () {\n return this.array_.length\n };\n\n /**\n * @override\n */\n ArrayList.prototype.toArray = function toArray () {\n var this$1 = this;\n\n var array = [];\n\n for (var i = 0, len = this.array_.length; i < len; i++) {\n array.push(this$1.array_[i]);\n }\n\n return array\n };\n\n /**\n * @override\n */\n ArrayList.prototype.remove = function remove (o) {\n var this$1 = this;\n\n var found = false;\n\n for (var i = 0, len = this.array_.length; i < len; i++) {\n if (this$1.array_[i] === o) {\n this$1.array_.splice(i, 1);\n found = true;\n break\n }\n }\n\n return found\n };\n\n return ArrayList;\n}(List));\n\n/**\n * @extends {Iterator}\n * @param {ArrayList} arrayList\n * @constructor\n * @private\n */\nvar Iterator_ = (function (Iterator$$1) {\n function Iterator_ (arrayList) {\n Iterator$$1.call(this);\n /**\n * @type {ArrayList}\n * @private\n */\n this.arrayList_ = arrayList;\n /**\n * @type {number}\n * @private\n */\n this.position_ = 0;\n }\n\n if ( Iterator$$1 ) Iterator_.__proto__ = Iterator$$1;\n Iterator_.prototype = Object.create( Iterator$$1 && Iterator$$1.prototype );\n Iterator_.prototype.constructor = Iterator_;\n\n /**\n * @override\n */\n Iterator_.prototype.next = function next () {\n if (this.position_ === this.arrayList_.size()) {\n throw new NoSuchElementException()\n }\n return this.arrayList_.get(this.position_++)\n };\n\n /**\n * @override\n */\n Iterator_.prototype.hasNext = function hasNext () {\n if (this.position_ < this.arrayList_.size()) {\n return true\n } else {\n return false\n }\n };\n\n /**\n * TODO: should be in ListIterator\n * @override\n */\n Iterator_.prototype.set = function set (element) {\n return this.arrayList_.set(this.position_ - 1, element)\n };\n\n /**\n * @override\n */\n Iterator_.prototype.remove = function remove () {\n this.arrayList_.remove(this.arrayList_.get(this.position_));\n };\n\n return Iterator_;\n}(Iterator));\n\nvar CoordinateList = (function (ArrayList$$1) {\n function CoordinateList () {\n ArrayList$$1.call(this);\n if (arguments.length === 0) {\n } else if (arguments.length === 1) {\n var coord = arguments[0];\n this.ensureCapacity(coord.length);\n this.add(coord, true);\n } else if (arguments.length === 2) {\n var coord$1 = arguments[0];\n var allowRepeated = arguments[1];\n this.ensureCapacity(coord$1.length);\n this.add(coord$1, allowRepeated);\n }\n }\n\n if ( ArrayList$$1 ) CoordinateList.__proto__ = ArrayList$$1;\n CoordinateList.prototype = Object.create( ArrayList$$1 && ArrayList$$1.prototype );\n CoordinateList.prototype.constructor = CoordinateList;\n\n var staticAccessors = { coordArrayType: { configurable: true } };\n staticAccessors.coordArrayType.get = function () { return new Array(0).fill(null) };\n CoordinateList.prototype.getCoordinate = function getCoordinate (i) {\n return this.get(i)\n };\n CoordinateList.prototype.addAll = function addAll () {\n var this$1 = this;\n\n if (arguments.length === 2) {\n var coll = arguments[0];\n var allowRepeated = arguments[1];\n var isChanged = false;\n for (var i = coll.iterator(); i.hasNext();) {\n this$1.add(i.next(), allowRepeated);\n isChanged = true;\n }\n return isChanged\n } else { return ArrayList$$1.prototype.addAll.apply(this, arguments) }\n };\n CoordinateList.prototype.clone = function clone () {\n var this$1 = this;\n\n var clone = ArrayList$$1.prototype.clone.call(this);\n for (var i = 0; i < this.size(); i++) {\n clone.add(i, this$1.get(i).copy());\n }\n return clone\n };\n CoordinateList.prototype.toCoordinateArray = function toCoordinateArray () {\n return this.toArray(CoordinateList.coordArrayType)\n };\n CoordinateList.prototype.add = function add () {\n var this$1 = this;\n\n if (arguments.length === 1) {\n var coord = arguments[0];\n ArrayList$$1.prototype.add.call(this, coord);\n } else if (arguments.length === 2) {\n if (arguments[0] instanceof Array && typeof arguments[1] === 'boolean') {\n var coord$1 = arguments[0];\n var allowRepeated = arguments[1];\n this.add(coord$1, allowRepeated, true);\n return true\n } else if (arguments[0] instanceof Coordinate && typeof arguments[1] === 'boolean') {\n var coord$2 = arguments[0];\n var allowRepeated$1 = arguments[1];\n if (!allowRepeated$1) {\n if (this.size() >= 1) {\n var last = this.get(this.size() - 1);\n if (last.equals2D(coord$2)) { return null }\n }\n }\n ArrayList$$1.prototype.add.call(this, coord$2);\n } else if (arguments[0] instanceof Object && typeof arguments[1] === 'boolean') {\n var obj = arguments[0];\n var allowRepeated$2 = arguments[1];\n this.add(obj, allowRepeated$2);\n return true\n }\n } else if (arguments.length === 3) {\n if (typeof arguments[2] === 'boolean' && (arguments[0] instanceof Array && typeof arguments[1] === 'boolean')) {\n var coord$3 = arguments[0];\n var allowRepeated$3 = arguments[1];\n var direction = arguments[2];\n if (direction) {\n for (var i$1 = 0; i$1 < coord$3.length; i$1++) {\n this$1.add(coord$3[i$1], allowRepeated$3);\n }\n } else {\n for (var i$2 = coord$3.length - 1; i$2 >= 0; i$2--) {\n this$1.add(coord$3[i$2], allowRepeated$3);\n }\n }\n return true\n } else if (typeof arguments[2] === 'boolean' && (Number.isInteger(arguments[0]) && arguments[1] instanceof Coordinate)) {\n var i$3 = arguments[0];\n var coord$4 = arguments[1];\n var allowRepeated$4 = arguments[2];\n if (!allowRepeated$4) {\n var size = this.size();\n if (size > 0) {\n if (i$3 > 0) {\n var prev = this.get(i$3 - 1);\n if (prev.equals2D(coord$4)) { return null }\n }\n if (i$3 < size) {\n var next = this.get(i$3);\n if (next.equals2D(coord$4)) { return null }\n }\n }\n }\n ArrayList$$1.prototype.add.call(this, i$3, coord$4);\n }\n } else if (arguments.length === 4) {\n var coord$5 = arguments[0];\n var allowRepeated$5 = arguments[1];\n var start = arguments[2];\n var end = arguments[3];\n var inc = 1;\n if (start > end) { inc = -1; }\n for (var i = start; i !== end; i += inc) {\n this$1.add(coord$5[i], allowRepeated$5);\n }\n return true\n }\n };\n CoordinateList.prototype.closeRing = function closeRing () {\n if (this.size() > 0) { this.add(new Coordinate(this.get(0)), false); }\n };\n CoordinateList.prototype.interfaces_ = function interfaces_ () {\n return []\n };\n CoordinateList.prototype.getClass = function getClass () {\n return CoordinateList\n };\n\n Object.defineProperties( CoordinateList, staticAccessors );\n\n return CoordinateList;\n}(ArrayList));\n\nvar CoordinateArrays = function CoordinateArrays () {};\n\nvar staticAccessors$13 = { ForwardComparator: { configurable: true },BidirectionalComparator: { configurable: true },coordArrayType: { configurable: true } };\n\nstaticAccessors$13.ForwardComparator.get = function () { return ForwardComparator };\nstaticAccessors$13.BidirectionalComparator.get = function () { return BidirectionalComparator };\nstaticAccessors$13.coordArrayType.get = function () { return new Array(0).fill(null) };\n\nCoordinateArrays.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nCoordinateArrays.prototype.getClass = function getClass () {\n return CoordinateArrays\n};\nCoordinateArrays.isRing = function isRing (pts) {\n if (pts.length < 4) { return false }\n if (!pts[0].equals2D(pts[pts.length - 1])) { return false }\n return true\n};\nCoordinateArrays.ptNotInList = function ptNotInList (testPts, pts) {\n for (var i = 0; i < testPts.length; i++) {\n var testPt = testPts[i];\n if (CoordinateArrays.indexOf(testPt, pts) < 0) { return testPt }\n }\n return null\n};\nCoordinateArrays.scroll = function scroll (coordinates, firstCoordinate) {\n var i = CoordinateArrays.indexOf(firstCoordinate, coordinates);\n if (i < 0) { return null }\n var newCoordinates = new Array(coordinates.length).fill(null);\n System.arraycopy(coordinates, i, newCoordinates, 0, coordinates.length - i);\n System.arraycopy(coordinates, 0, newCoordinates, coordinates.length - i, i);\n System.arraycopy(newCoordinates, 0, coordinates, 0, coordinates.length);\n};\nCoordinateArrays.equals = function equals () {\n if (arguments.length === 2) {\n var coord1 = arguments[0];\n var coord2 = arguments[1];\n if (coord1 === coord2) { return true }\n if (coord1 === null || coord2 === null) { return false }\n if (coord1.length !== coord2.length) { return false }\n for (var i = 0; i < coord1.length; i++) {\n if (!coord1[i].equals(coord2[i])) { return false }\n }\n return true\n } else if (arguments.length === 3) {\n var coord1$1 = arguments[0];\n var coord2$1 = arguments[1];\n var coordinateComparator = arguments[2];\n if (coord1$1 === coord2$1) { return true }\n if (coord1$1 === null || coord2$1 === null) { return false }\n if (coord1$1.length !== coord2$1.length) { return false }\n for (var i$1 = 0; i$1 < coord1$1.length; i$1++) {\n if (coordinateComparator.compare(coord1$1[i$1], coord2$1[i$1]) !== 0) { return false }\n }\n return true\n }\n};\nCoordinateArrays.intersection = function intersection (coordinates, env) {\n var coordList = new CoordinateList();\n for (var i = 0; i < coordinates.length; i++) {\n if (env.intersects(coordinates[i])) { coordList.add(coordinates[i], true); }\n }\n return coordList.toCoordinateArray()\n};\nCoordinateArrays.hasRepeatedPoints = function hasRepeatedPoints (coord) {\n for (var i = 1; i < coord.length; i++) {\n if (coord[i - 1].equals(coord[i])) {\n return true\n }\n }\n return false\n};\nCoordinateArrays.removeRepeatedPoints = function removeRepeatedPoints (coord) {\n if (!CoordinateArrays.hasRepeatedPoints(coord)) { return coord }\n var coordList = new CoordinateList(coord, false);\n return coordList.toCoordinateArray()\n};\nCoordinateArrays.reverse = function reverse (coord) {\n var last = coord.length - 1;\n var mid = Math.trunc(last / 2);\n for (var i = 0; i <= mid; i++) {\n var tmp = coord[i];\n coord[i] = coord[last - i];\n coord[last - i] = tmp;\n }\n};\nCoordinateArrays.removeNull = function removeNull (coord) {\n var nonNull = 0;\n for (var i = 0; i < coord.length; i++) {\n if (coord[i] !== null) { nonNull++; }\n }\n var newCoord = new Array(nonNull).fill(null);\n if (nonNull === 0) { return newCoord }\n var j = 0;\n for (var i$1 = 0; i$1 < coord.length; i$1++) {\n if (coord[i$1] !== null) { newCoord[j++] = coord[i$1]; }\n }\n return newCoord\n};\nCoordinateArrays.copyDeep = function copyDeep () {\n if (arguments.length === 1) {\n var coordinates = arguments[0];\n var copy = new Array(coordinates.length).fill(null);\n for (var i = 0; i < coordinates.length; i++) {\n copy[i] = new Coordinate(coordinates[i]);\n }\n return copy\n } else if (arguments.length === 5) {\n var src = arguments[0];\n var srcStart = arguments[1];\n var dest = arguments[2];\n var destStart = arguments[3];\n var length = arguments[4];\n for (var i$1 = 0; i$1 < length; i$1++) {\n dest[destStart + i$1] = new Coordinate(src[srcStart + i$1]);\n }\n }\n};\nCoordinateArrays.isEqualReversed = function isEqualReversed (pts1, pts2) {\n for (var i = 0; i < pts1.length; i++) {\n var p1 = pts1[i];\n var p2 = pts2[pts1.length - i - 1];\n if (p1.compareTo(p2) !== 0) { return false }\n }\n return true\n};\nCoordinateArrays.envelope = function envelope (coordinates) {\n var env = new Envelope();\n for (var i = 0; i < coordinates.length; i++) {\n env.expandToInclude(coordinates[i]);\n }\n return env\n};\nCoordinateArrays.toCoordinateArray = function toCoordinateArray (coordList) {\n return coordList.toArray(CoordinateArrays.coordArrayType)\n};\nCoordinateArrays.atLeastNCoordinatesOrNothing = function atLeastNCoordinatesOrNothing (n, c) {\n return c.length >= n ? c : []\n};\nCoordinateArrays.indexOf = function indexOf (coordinate, coordinates) {\n for (var i = 0; i < coordinates.length; i++) {\n if (coordinate.equals(coordinates[i])) {\n return i\n }\n }\n return -1\n};\nCoordinateArrays.increasingDirection = function increasingDirection (pts) {\n for (var i = 0; i < Math.trunc(pts.length / 2); i++) {\n var j = pts.length - 1 - i;\n var comp = pts[i].compareTo(pts[j]);\n if (comp !== 0) { return comp }\n }\n return 1\n};\nCoordinateArrays.compare = function compare (pts1, pts2) {\n var i = 0;\n while (i < pts1.length && i < pts2.length) {\n var compare = pts1[i].compareTo(pts2[i]);\n if (compare !== 0) { return compare }\n i++;\n }\n if (i < pts2.length) { return -1 }\n if (i < pts1.length) { return 1 }\n return 0\n};\nCoordinateArrays.minCoordinate = function minCoordinate (coordinates) {\n var minCoord = null;\n for (var i = 0; i < coordinates.length; i++) {\n if (minCoord === null || minCoord.compareTo(coordinates[i]) > 0) {\n minCoord = coordinates[i];\n }\n }\n return minCoord\n};\nCoordinateArrays.extract = function extract (pts, start, end) {\n start = MathUtil.clamp(start, 0, pts.length);\n end = MathUtil.clamp(end, -1, pts.length);\n var npts = end - start + 1;\n if (end < 0) { npts = 0; }\n if (start >= pts.length) { npts = 0; }\n if (end < start) { npts = 0; }\n var extractPts = new Array(npts).fill(null);\n if (npts === 0) { return extractPts }\n var iPts = 0;\n for (var i = start; i <= end; i++) {\n extractPts[iPts++] = pts[i];\n }\n return extractPts\n};\n\nObject.defineProperties( CoordinateArrays, staticAccessors$13 );\n\nvar ForwardComparator = function ForwardComparator () {};\n\nForwardComparator.prototype.compare = function compare (o1, o2) {\n var pts1 = o1;\n var pts2 = o2;\n return CoordinateArrays.compare(pts1, pts2)\n};\nForwardComparator.prototype.interfaces_ = function interfaces_ () {\n return [Comparator]\n};\nForwardComparator.prototype.getClass = function getClass () {\n return ForwardComparator\n};\n\nvar BidirectionalComparator = function BidirectionalComparator () {};\n\nBidirectionalComparator.prototype.compare = function compare (o1, o2) {\n var pts1 = o1;\n var pts2 = o2;\n if (pts1.length < pts2.length) { return -1 }\n if (pts1.length > pts2.length) { return 1 }\n if (pts1.length === 0) { return 0 }\n var forwardComp = CoordinateArrays.compare(pts1, pts2);\n var isEqualRev = CoordinateArrays.isEqualReversed(pts1, pts2);\n if (isEqualRev) { return 0 }\n return forwardComp\n};\nBidirectionalComparator.prototype.OLDcompare = function OLDcompare (o1, o2) {\n var pts1 = o1;\n var pts2 = o2;\n if (pts1.length < pts2.length) { return -1 }\n if (pts1.length > pts2.length) { return 1 }\n if (pts1.length === 0) { return 0 }\n var dir1 = CoordinateArrays.increasingDirection(pts1);\n var dir2 = CoordinateArrays.increasingDirection(pts2);\n var i1 = dir1 > 0 ? 0 : pts1.length - 1;\n var i2 = dir2 > 0 ? 0 : pts1.length - 1;\n for (var i = 0; i < pts1.length; i++) {\n var comparePt = pts1[i1].compareTo(pts2[i2]);\n if (comparePt !== 0) { return comparePt }\n i1 += dir1;\n i2 += dir2;\n }\n return 0\n};\nBidirectionalComparator.prototype.interfaces_ = function interfaces_ () {\n return [Comparator]\n};\nBidirectionalComparator.prototype.getClass = function getClass () {\n return BidirectionalComparator\n};\n\n/**\n * @see http://download.oracle.com/javase/6/docs/api/java/util/Map.html\n *\n * @constructor\n * @private\n */\nvar Map$1 = function Map () {};\n\nMap$1.prototype.get = function get () {};\n/**\n * Associates the specified value with the specified key in this map (optional\n * operation).\n * @param {Object} key\n * @param {Object} value\n * @return {Object}\n */\nMap$1.prototype.put = function put () {};\n\n/**\n * Returns the number of key-value mappings in this map.\n * @return {number}\n */\nMap$1.prototype.size = function size () {};\n\n/**\n * Returns a Collection view of the values contained in this map.\n * @return {javascript.util.Collection}\n */\nMap$1.prototype.values = function values () {};\n\n/**\n * Returns a {@link Set} view of the mappings contained in this map.\n * The set is backed by the map, so changes to the map are\n * reflected in the set, and vice-versa.If the map is modified\n * while an iteration over the set is in progress (except through\n * the iterator's own remove operation, or through the\n * setValue operation on a map entry returned by the\n * iterator) the results of the iteration are undefined.The set\n * supports element removal, which removes the corresponding\n * mapping from the map, via the Iterator.remove,\n * Set.remove, removeAll, retainAll and\n * clear operations.It does not support the\n * add or addAll operations.\n *\n * @return {Set} a set view of the mappings contained in this map\n */\nMap$1.prototype.entrySet = function entrySet () {};\n\n/**\n * @see http://download.oracle.com/javase/6/docs/api/java/util/SortedMap.html\n *\n * @extends {Map}\n * @constructor\n * @private\n */\nvar SortedMap = (function (Map) {\n\tfunction SortedMap () {\n\t\tMap.apply(this, arguments);\n\t}if ( Map ) SortedMap.__proto__ = Map;\n\tSortedMap.prototype = Object.create( Map && Map.prototype );\n\tSortedMap.prototype.constructor = SortedMap;\n\n\t\n\n\treturn SortedMap;\n}(Map$1));\n\n/**\n * @param {string=} message Optional message\n * @extends {Error}\n * @constructor\n * @private\n */\nfunction OperationNotSupported (message) {\n this.message = message || '';\n}\nOperationNotSupported.prototype = new Error();\n\n/**\n * @type {string}\n */\nOperationNotSupported.prototype.name = 'OperationNotSupported';\n\n/**\n * @see http://download.oracle.com/javase/6/docs/api/java/util/Set.html\n *\n * @extends {Collection}\n * @constructor\n * @private\n */\nfunction Set() {}\nSet.prototype = new Collection();\n\n\n/**\n * Returns true if this set contains the specified element. More formally,\n * returns true if and only if this set contains an element e such that (o==null ?\n * e==null : o.equals(e)).\n * @param {Object} e\n * @return {boolean}\n */\nSet.prototype.contains = function() {};\n\n/**\n * @see http://docs.oracle.com/javase/6/docs/api/java/util/HashSet.html\n *\n * @extends {javascript.util.Set}\n * @constructor\n * @private\n */\nvar HashSet = (function (Set$$1) {\n function HashSet () {\n Set$$1.call(this);\n this.array_ = [];\n\n if (arguments[0] instanceof Collection) {\n this.addAll(arguments[0]);\n }\n }\n\n if ( Set$$1 ) HashSet.__proto__ = Set$$1;\n HashSet.prototype = Object.create( Set$$1 && Set$$1.prototype );\n HashSet.prototype.constructor = HashSet;\n\n /**\n * @override\n */\n HashSet.prototype.contains = function contains (o) {\n var this$1 = this;\n\n for (var i = 0, len = this.array_.length; i < len; i++) {\n var e = this$1.array_[i];\n if (e === o) {\n return true\n }\n }\n return false\n };\n\n /**\n * @override\n */\n HashSet.prototype.add = function add (o) {\n if (this.contains(o)) {\n return false\n }\n\n this.array_.push(o);\n\n return true\n };\n\n /**\n * @override\n */\n HashSet.prototype.addAll = function addAll (c) {\n var this$1 = this;\n\n for (var i = c.iterator(); i.hasNext();) {\n this$1.add(i.next());\n }\n return true\n };\n\n /**\n * @override\n */\n HashSet.prototype.remove = function remove (o) {\n // throw new javascript.util.OperationNotSupported()\n throw new Error()\n };\n\n /**\n * @override\n */\n HashSet.prototype.size = function size () {\n return this.array_.length\n };\n\n /**\n * @override\n */\n HashSet.prototype.isEmpty = function isEmpty () {\n return this.array_.length === 0\n };\n\n /**\n * @override\n */\n HashSet.prototype.toArray = function toArray () {\n var this$1 = this;\n\n var array = [];\n\n for (var i = 0, len = this.array_.length; i < len; i++) {\n array.push(this$1.array_[i]);\n }\n\n return array\n };\n\n /**\n * @override\n */\n HashSet.prototype.iterator = function iterator () {\n return new Iterator_$1(this)\n };\n\n return HashSet;\n}(Set));\n\n/**\n * @extends {Iterator}\n * @param {HashSet} hashSet\n * @constructor\n * @private\n */\nvar Iterator_$1 = (function (Iterator$$1) {\n function Iterator_ (hashSet) {\n Iterator$$1.call(this);\n /**\n * @type {HashSet}\n * @private\n */\n this.hashSet_ = hashSet;\n /**\n * @type {number}\n * @private\n */\n this.position_ = 0;\n }\n\n if ( Iterator$$1 ) Iterator_.__proto__ = Iterator$$1;\n Iterator_.prototype = Object.create( Iterator$$1 && Iterator$$1.prototype );\n Iterator_.prototype.constructor = Iterator_;\n\n /**\n * @override\n */\n Iterator_.prototype.next = function next () {\n if (this.position_ === this.hashSet_.size()) {\n throw new NoSuchElementException()\n }\n return this.hashSet_.array_[this.position_++]\n };\n\n /**\n * @override\n */\n Iterator_.prototype.hasNext = function hasNext () {\n if (this.position_ < this.hashSet_.size()) {\n return true\n } else {\n return false\n }\n };\n\n /**\n * @override\n */\n Iterator_.prototype.remove = function remove () {\n throw new OperationNotSupported()\n };\n\n return Iterator_;\n}(Iterator));\n\nvar BLACK = 0;\nvar RED = 1;\nfunction colorOf (p) { return (p === null ? BLACK : p.color) }\nfunction parentOf (p) { return (p === null ? null : p.parent) }\nfunction setColor (p, c) { if (p !== null) { p.color = c; } }\nfunction leftOf (p) { return (p === null ? null : p.left) }\nfunction rightOf (p) { return (p === null ? null : p.right) }\n\n/**\n * @see http://download.oracle.com/javase/6/docs/api/java/util/TreeMap.html\n *\n * @extends {SortedMap}\n * @constructor\n * @private\n */\nfunction TreeMap () {\n /**\n * @type {Object}\n * @private\n */\n this.root_ = null;\n /**\n * @type {number}\n * @private\n */\n this.size_ = 0;\n}\nTreeMap.prototype = new SortedMap();\n\n/**\n * @override\n */\nTreeMap.prototype.get = function (key) {\n var p = this.root_;\n while (p !== null) {\n var cmp = key['compareTo'](p.key);\n if (cmp < 0) { p = p.left; }\n else if (cmp > 0) { p = p.right; }\n else { return p.value }\n }\n return null\n};\n\n/**\n * @override\n */\nTreeMap.prototype.put = function (key, value) {\n if (this.root_ === null) {\n this.root_ = {\n key: key,\n value: value,\n left: null,\n right: null,\n parent: null,\n color: BLACK,\n getValue: function getValue () { return this.value },\n getKey: function getKey () { return this.key }\n };\n this.size_ = 1;\n return null\n }\n var t = this.root_;\n var parent;\n var cmp;\n do {\n parent = t;\n cmp = key['compareTo'](t.key);\n if (cmp < 0) {\n t = t.left;\n } else if (cmp > 0) {\n t = t.right;\n } else {\n var oldValue = t.value;\n t.value = value;\n return oldValue\n }\n } while (t !== null)\n var e = {\n key: key,\n left: null,\n right: null,\n value: value,\n parent: parent,\n color: BLACK,\n getValue: function getValue () { return this.value },\n getKey: function getKey () { return this.key }\n };\n if (cmp < 0) {\n parent.left = e;\n } else {\n parent.right = e;\n }\n this.fixAfterInsertion(e);\n this.size_++;\n return null\n};\n\n/**\n * @param {Object} x\n */\nTreeMap.prototype.fixAfterInsertion = function (x) {\n var this$1 = this;\n\n x.color = RED;\n while (x != null && x !== this.root_ && x.parent.color === RED) {\n if (parentOf(x) === leftOf(parentOf(parentOf(x)))) {\n var y = rightOf(parentOf(parentOf(x)));\n if (colorOf(y) === RED) {\n setColor(parentOf(x), BLACK);\n setColor(y, BLACK);\n setColor(parentOf(parentOf(x)), RED);\n x = parentOf(parentOf(x));\n } else {\n if (x === rightOf(parentOf(x))) {\n x = parentOf(x);\n this$1.rotateLeft(x);\n }\n setColor(parentOf(x), BLACK);\n setColor(parentOf(parentOf(x)), RED);\n this$1.rotateRight(parentOf(parentOf(x)));\n }\n } else {\n var y$1 = leftOf(parentOf(parentOf(x)));\n if (colorOf(y$1) === RED) {\n setColor(parentOf(x), BLACK);\n setColor(y$1, BLACK);\n setColor(parentOf(parentOf(x)), RED);\n x = parentOf(parentOf(x));\n } else {\n if (x === leftOf(parentOf(x))) {\n x = parentOf(x);\n this$1.rotateRight(x);\n }\n setColor(parentOf(x), BLACK);\n setColor(parentOf(parentOf(x)), RED);\n this$1.rotateLeft(parentOf(parentOf(x)));\n }\n }\n }\n this.root_.color = BLACK;\n};\n\n/**\n * @override\n */\nTreeMap.prototype.values = function () {\n var arrayList = new ArrayList();\n var p = this.getFirstEntry();\n if (p !== null) {\n arrayList.add(p.value);\n while ((p = TreeMap.successor(p)) !== null) {\n arrayList.add(p.value);\n }\n }\n return arrayList\n};\n\n/**\n * @override\n */\nTreeMap.prototype.entrySet = function () {\n var hashSet = new HashSet();\n var p = this.getFirstEntry();\n if (p !== null) {\n hashSet.add(p);\n while ((p = TreeMap.successor(p)) !== null) {\n hashSet.add(p);\n }\n }\n return hashSet\n};\n\n/**\n * @param {Object} p\n */\nTreeMap.prototype.rotateLeft = function (p) {\n if (p != null) {\n var r = p.right;\n p.right = r.left;\n if (r.left != null) { r.left.parent = p; }\n r.parent = p.parent;\n if (p.parent === null) { this.root_ = r; } else if (p.parent.left === p) { p.parent.left = r; } else { p.parent.right = r; }\n r.left = p;\n p.parent = r;\n }\n};\n\n/**\n * @param {Object} p\n */\nTreeMap.prototype.rotateRight = function (p) {\n if (p != null) {\n var l = p.left;\n p.left = l.right;\n if (l.right != null) { l.right.parent = p; }\n l.parent = p.parent;\n if (p.parent === null) { this.root_ = l; } else if (p.parent.right === p) { p.parent.right = l; } else { p.parent.left = l; }\n l.right = p;\n p.parent = l;\n }\n};\n\n/**\n * @return {Object}\n */\nTreeMap.prototype.getFirstEntry = function () {\n var p = this.root_;\n if (p != null) {\n while (p.left != null) {\n p = p.left;\n }\n }\n return p\n};\n\n/**\n * @param {Object} t\n * @return {Object}\n * @private\n */\nTreeMap.successor = function (t) {\n if (t === null) { return null } else if (t.right !== null) {\n var p = t.right;\n while (p.left !== null) {\n p = p.left;\n }\n return p\n } else {\n var p$1 = t.parent;\n var ch = t;\n while (p$1 !== null && ch === p$1.right) {\n ch = p$1;\n p$1 = p$1.parent;\n }\n return p$1\n }\n};\n\n/**\n * @override\n */\nTreeMap.prototype.size = function () {\n return this.size_\n};\n\nvar Lineal = function Lineal () {};\n\nLineal.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nLineal.prototype.getClass = function getClass () {\n return Lineal\n};\n\n/**\n * @see http://download.oracle.com/javase/6/docs/api/java/util/SortedSet.html\n *\n * @extends {Set}\n * @constructor\n * @private\n */\nfunction SortedSet () {}\nSortedSet.prototype = new Set();\n\n// import Iterator from './Iterator'\n/**\n * @see http://download.oracle.com/javase/6/docs/api/java/util/TreeSet.html\n *\n * @extends {SortedSet}\n * @constructor\n * @private\n */\nfunction TreeSet () {\n /**\n * @type {Array}\n * @private\n */\n this.array_ = [];\n\n if (arguments[0] instanceof Collection) {\n this.addAll(arguments[0]);\n }\n}\nTreeSet.prototype = new SortedSet();\n\n/**\n * @override\n */\nTreeSet.prototype.contains = function (o) {\n var this$1 = this;\n\n for (var i = 0, len = this.array_.length; i < len; i++) {\n var e = this$1.array_[i];\n if (e['compareTo'](o) === 0) {\n return true\n }\n }\n return false\n};\n\n/**\n * @override\n */\nTreeSet.prototype.add = function (o) {\n var this$1 = this;\n\n if (this.contains(o)) {\n return false\n }\n\n for (var i = 0, len = this.array_.length; i < len; i++) {\n var e = this$1.array_[i];\n if (e['compareTo'](o) === 1) {\n this$1.array_.splice(i, 0, o);\n return true\n }\n }\n\n this.array_.push(o);\n\n return true\n};\n\n/**\n * @override\n */\nTreeSet.prototype.addAll = function (c) {\n var this$1 = this;\n\n for (var i = c.iterator(); i.hasNext();) {\n this$1.add(i.next());\n }\n return true\n};\n\n/**\n * @override\n */\nTreeSet.prototype.remove = function (e) {\n throw new OperationNotSupported()\n};\n\n/**\n * @override\n */\nTreeSet.prototype.size = function () {\n return this.array_.length\n};\n\n/**\n * @override\n */\nTreeSet.prototype.isEmpty = function () {\n return this.array_.length === 0\n};\n\n/**\n * @override\n */\nTreeSet.prototype.toArray = function () {\n var this$1 = this;\n\n var array = [];\n\n for (var i = 0, len = this.array_.length; i < len; i++) {\n array.push(this$1.array_[i]);\n }\n\n return array\n};\n\n/**\n * @override\n */\nTreeSet.prototype.iterator = function () {\n return new Iterator_$2(this)\n};\n\n/**\n * @extends {javascript.util.Iterator}\n * @param {javascript.util.TreeSet} treeSet\n * @constructor\n * @private\n */\nvar Iterator_$2 = function (treeSet) {\n /**\n * @type {javascript.util.TreeSet}\n * @private\n */\n this.treeSet_ = treeSet;\n /**\n * @type {number}\n * @private\n */\n this.position_ = 0;\n};\n\n/**\n * @override\n */\nIterator_$2.prototype.next = function () {\n if (this.position_ === this.treeSet_.size()) {\n throw new NoSuchElementException()\n }\n return this.treeSet_.array_[this.position_++]\n};\n\n/**\n * @override\n */\nIterator_$2.prototype.hasNext = function () {\n if (this.position_ < this.treeSet_.size()) {\n return true\n } else {\n return false\n }\n};\n\n/**\n * @override\n */\nIterator_$2.prototype.remove = function () {\n throw new OperationNotSupported()\n};\n\n/**\n * @see http://download.oracle.com/javase/6/docs/api/java/util/Arrays.html\n *\n * @constructor\n * @private\n */\nvar Arrays = function Arrays () {};\n\nArrays.sort = function sort () {\n var a = arguments[0];\n var i;\n var t;\n var comparator;\n var compare;\n if (arguments.length === 1) {\n compare = function (a, b) {\n return a.compareTo(b)\n };\n a.sort(compare);\n } else if (arguments.length === 2) {\n comparator = arguments[1];\n compare = function (a, b) {\n return comparator['compare'](a, b)\n };\n a.sort(compare);\n } else if (arguments.length === 3) {\n t = a.slice(arguments[1], arguments[2]);\n t.sort();\n var r = a.slice(0, arguments[1]).concat(t, a.slice(arguments[2], a.length));\n a.splice(0, a.length);\n for (i = 0; i < r.length; i++) {\n a.push(r[i]);\n }\n } else if (arguments.length === 4) {\n t = a.slice(arguments[1], arguments[2]);\n comparator = arguments[3];\n compare = function (a, b) {\n return comparator['compare'](a, b)\n };\n t.sort(compare);\n r = a.slice(0, arguments[1]).concat(t, a.slice(arguments[2], a.length));\n a.splice(0, a.length);\n for (i = 0; i < r.length; i++) {\n a.push(r[i]);\n }\n }\n};\n/**\n * @param {Array} array\n * @return {ArrayList}\n */\nArrays.asList = function asList (array) {\n var arrayList = new ArrayList();\n for (var i = 0, len = array.length; i < len; i++) {\n arrayList.add(array[i]);\n }\n return arrayList\n};\n\nvar Dimension = function Dimension () {};\n\nvar staticAccessors$14 = { P: { configurable: true },L: { configurable: true },A: { configurable: true },FALSE: { configurable: true },TRUE: { configurable: true },DONTCARE: { configurable: true },SYM_FALSE: { configurable: true },SYM_TRUE: { configurable: true },SYM_DONTCARE: { configurable: true },SYM_P: { configurable: true },SYM_L: { configurable: true },SYM_A: { configurable: true } };\n\nstaticAccessors$14.P.get = function () { return 0 };\nstaticAccessors$14.L.get = function () { return 1 };\nstaticAccessors$14.A.get = function () { return 2 };\nstaticAccessors$14.FALSE.get = function () { return -1 };\nstaticAccessors$14.TRUE.get = function () { return -2 };\nstaticAccessors$14.DONTCARE.get = function () { return -3 };\nstaticAccessors$14.SYM_FALSE.get = function () { return 'F' };\nstaticAccessors$14.SYM_TRUE.get = function () { return 'T' };\nstaticAccessors$14.SYM_DONTCARE.get = function () { return '*' };\nstaticAccessors$14.SYM_P.get = function () { return '0' };\nstaticAccessors$14.SYM_L.get = function () { return '1' };\nstaticAccessors$14.SYM_A.get = function () { return '2' };\n\nDimension.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nDimension.prototype.getClass = function getClass () {\n return Dimension\n};\nDimension.toDimensionSymbol = function toDimensionSymbol (dimensionValue) {\n switch (dimensionValue) {\n case Dimension.FALSE:\n return Dimension.SYM_FALSE\n case Dimension.TRUE:\n return Dimension.SYM_TRUE\n case Dimension.DONTCARE:\n return Dimension.SYM_DONTCARE\n case Dimension.P:\n return Dimension.SYM_P\n case Dimension.L:\n return Dimension.SYM_L\n case Dimension.A:\n return Dimension.SYM_A\n default:\n }\n throw new IllegalArgumentException('Unknown dimension value: ' + dimensionValue)\n};\nDimension.toDimensionValue = function toDimensionValue (dimensionSymbol) {\n switch (Character.toUpperCase(dimensionSymbol)) {\n case Dimension.SYM_FALSE:\n return Dimension.FALSE\n case Dimension.SYM_TRUE:\n return Dimension.TRUE\n case Dimension.SYM_DONTCARE:\n return Dimension.DONTCARE\n case Dimension.SYM_P:\n return Dimension.P\n case Dimension.SYM_L:\n return Dimension.L\n case Dimension.SYM_A:\n return Dimension.A\n default:\n }\n throw new IllegalArgumentException('Unknown dimension symbol: ' + dimensionSymbol)\n};\n\nObject.defineProperties( Dimension, staticAccessors$14 );\n\nvar GeometryFilter = function GeometryFilter () {};\n\nGeometryFilter.prototype.filter = function filter (geom) {};\nGeometryFilter.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nGeometryFilter.prototype.getClass = function getClass () {\n return GeometryFilter\n};\n\nvar CoordinateSequenceFilter = function CoordinateSequenceFilter () {};\n\nCoordinateSequenceFilter.prototype.filter = function filter (seq, i) {};\nCoordinateSequenceFilter.prototype.isDone = function isDone () {};\nCoordinateSequenceFilter.prototype.isGeometryChanged = function isGeometryChanged () {};\nCoordinateSequenceFilter.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nCoordinateSequenceFilter.prototype.getClass = function getClass () {\n return CoordinateSequenceFilter\n};\n\nvar GeometryCollection = (function (Geometry$$1) {\n function GeometryCollection (geometries, factory) {\n Geometry$$1.call(this, factory);\n this._geometries = geometries || [];\n\n if (Geometry$$1.hasNullElements(this._geometries)) {\n throw new IllegalArgumentException('geometries must not contain null elements')\n }\n }\n\n if ( Geometry$$1 ) GeometryCollection.__proto__ = Geometry$$1;\n GeometryCollection.prototype = Object.create( Geometry$$1 && Geometry$$1.prototype );\n GeometryCollection.prototype.constructor = GeometryCollection;\n\n var staticAccessors = { serialVersionUID: { configurable: true } };\n GeometryCollection.prototype.computeEnvelopeInternal = function computeEnvelopeInternal () {\n var this$1 = this;\n\n var envelope = new Envelope();\n for (var i = 0; i < this._geometries.length; i++) {\n envelope.expandToInclude(this$1._geometries[i].getEnvelopeInternal());\n }\n return envelope\n };\n GeometryCollection.prototype.getGeometryN = function getGeometryN (n) {\n return this._geometries[n]\n };\n GeometryCollection.prototype.getSortIndex = function getSortIndex () {\n return Geometry$$1.SORTINDEX_GEOMETRYCOLLECTION\n };\n GeometryCollection.prototype.getCoordinates = function getCoordinates () {\n var this$1 = this;\n\n var coordinates = new Array(this.getNumPoints()).fill(null);\n var k = -1;\n for (var i = 0; i < this._geometries.length; i++) {\n var childCoordinates = this$1._geometries[i].getCoordinates();\n for (var j = 0; j < childCoordinates.length; j++) {\n k++;\n coordinates[k] = childCoordinates[j];\n }\n }\n return coordinates\n };\n GeometryCollection.prototype.getArea = function getArea () {\n var this$1 = this;\n\n var area = 0.0;\n for (var i = 0; i < this._geometries.length; i++) {\n area += this$1._geometries[i].getArea();\n }\n return area\n };\n GeometryCollection.prototype.equalsExact = function equalsExact () {\n var this$1 = this;\n\n if (arguments.length === 2) {\n var other = arguments[0];\n var tolerance = arguments[1];\n if (!this.isEquivalentClass(other)) {\n return false\n }\n var otherCollection = other;\n if (this._geometries.length !== otherCollection._geometries.length) {\n return false\n }\n for (var i = 0; i < this._geometries.length; i++) {\n if (!this$1._geometries[i].equalsExact(otherCollection._geometries[i], tolerance)) {\n return false\n }\n }\n return true\n } else { return Geometry$$1.prototype.equalsExact.apply(this, arguments) }\n };\n GeometryCollection.prototype.normalize = function normalize () {\n var this$1 = this;\n\n for (var i = 0; i < this._geometries.length; i++) {\n this$1._geometries[i].normalize();\n }\n Arrays.sort(this._geometries);\n };\n GeometryCollection.prototype.getCoordinate = function getCoordinate () {\n if (this.isEmpty()) { return null }\n return this._geometries[0].getCoordinate()\n };\n GeometryCollection.prototype.getBoundaryDimension = function getBoundaryDimension () {\n var this$1 = this;\n\n var dimension = Dimension.FALSE;\n for (var i = 0; i < this._geometries.length; i++) {\n dimension = Math.max(dimension, this$1._geometries[i].getBoundaryDimension());\n }\n return dimension\n };\n GeometryCollection.prototype.getDimension = function getDimension () {\n var this$1 = this;\n\n var dimension = Dimension.FALSE;\n for (var i = 0; i < this._geometries.length; i++) {\n dimension = Math.max(dimension, this$1._geometries[i].getDimension());\n }\n return dimension\n };\n GeometryCollection.prototype.getLength = function getLength () {\n var this$1 = this;\n\n var sum = 0.0;\n for (var i = 0; i < this._geometries.length; i++) {\n sum += this$1._geometries[i].getLength();\n }\n return sum\n };\n GeometryCollection.prototype.getNumPoints = function getNumPoints () {\n var this$1 = this;\n\n var numPoints = 0;\n for (var i = 0; i < this._geometries.length; i++) {\n numPoints += this$1._geometries[i].getNumPoints();\n }\n return numPoints\n };\n GeometryCollection.prototype.getNumGeometries = function getNumGeometries () {\n return this._geometries.length\n };\n GeometryCollection.prototype.reverse = function reverse () {\n var this$1 = this;\n\n var n = this._geometries.length;\n var revGeoms = new Array(n).fill(null);\n for (var i = 0; i < this._geometries.length; i++) {\n revGeoms[i] = this$1._geometries[i].reverse();\n }\n return this.getFactory().createGeometryCollection(revGeoms)\n };\n GeometryCollection.prototype.compareToSameClass = function compareToSameClass () {\n var this$1 = this;\n\n if (arguments.length === 1) {\n var o = arguments[0];\n var theseElements = new TreeSet(Arrays.asList(this._geometries));\n var otherElements = new TreeSet(Arrays.asList(o._geometries));\n return this.compare(theseElements, otherElements)\n } else if (arguments.length === 2) {\n var o$1 = arguments[0];\n var comp = arguments[1];\n var gc = o$1;\n var n1 = this.getNumGeometries();\n var n2 = gc.getNumGeometries();\n var i = 0;\n while (i < n1 && i < n2) {\n var thisGeom = this$1.getGeometryN(i);\n var otherGeom = gc.getGeometryN(i);\n var holeComp = thisGeom.compareToSameClass(otherGeom, comp);\n if (holeComp !== 0) { return holeComp }\n i++;\n }\n if (i < n1) { return 1 }\n if (i < n2) { return -1 }\n return 0\n }\n };\n GeometryCollection.prototype.apply = function apply () {\n var this$1 = this;\n\n if (hasInterface(arguments[0], CoordinateFilter)) {\n var filter = arguments[0];\n for (var i = 0; i < this._geometries.length; i++) {\n this$1._geometries[i].apply(filter);\n }\n } else if (hasInterface(arguments[0], CoordinateSequenceFilter)) {\n var filter$1 = arguments[0];\n if (this._geometries.length === 0) { return null }\n for (var i$1 = 0; i$1 < this._geometries.length; i$1++) {\n this$1._geometries[i$1].apply(filter$1);\n if (filter$1.isDone()) {\n break\n }\n }\n if (filter$1.isGeometryChanged()) { this.geometryChanged(); }\n } else if (hasInterface(arguments[0], GeometryFilter)) {\n var filter$2 = arguments[0];\n filter$2.filter(this);\n for (var i$2 = 0; i$2 < this._geometries.length; i$2++) {\n this$1._geometries[i$2].apply(filter$2);\n }\n } else if (hasInterface(arguments[0], GeometryComponentFilter)) {\n var filter$3 = arguments[0];\n filter$3.filter(this);\n for (var i$3 = 0; i$3 < this._geometries.length; i$3++) {\n this$1._geometries[i$3].apply(filter$3);\n }\n }\n };\n GeometryCollection.prototype.getBoundary = function getBoundary () {\n this.checkNotGeometryCollection(this);\n Assert.shouldNeverReachHere();\n return null\n };\n GeometryCollection.prototype.clone = function clone () {\n var this$1 = this;\n\n var gc = Geometry$$1.prototype.clone.call(this);\n gc._geometries = new Array(this._geometries.length).fill(null);\n for (var i = 0; i < this._geometries.length; i++) {\n gc._geometries[i] = this$1._geometries[i].clone();\n }\n return gc\n };\n GeometryCollection.prototype.getGeometryType = function getGeometryType () {\n return 'GeometryCollection'\n };\n GeometryCollection.prototype.copy = function copy () {\n var this$1 = this;\n\n var geometries = new Array(this._geometries.length).fill(null);\n for (var i = 0; i < geometries.length; i++) {\n geometries[i] = this$1._geometries[i].copy();\n }\n return new GeometryCollection(geometries, this._factory)\n };\n GeometryCollection.prototype.isEmpty = function isEmpty () {\n var this$1 = this;\n\n for (var i = 0; i < this._geometries.length; i++) {\n if (!this$1._geometries[i].isEmpty()) {\n return false\n }\n }\n return true\n };\n GeometryCollection.prototype.interfaces_ = function interfaces_ () {\n return []\n };\n GeometryCollection.prototype.getClass = function getClass () {\n return GeometryCollection\n };\n staticAccessors.serialVersionUID.get = function () { return -5694727726395021467 };\n\n Object.defineProperties( GeometryCollection, staticAccessors );\n\n return GeometryCollection;\n}(Geometry));\n\nvar MultiLineString = (function (GeometryCollection$$1) {\n function MultiLineString () {\n GeometryCollection$$1.apply(this, arguments);\n }\n\n if ( GeometryCollection$$1 ) MultiLineString.__proto__ = GeometryCollection$$1;\n MultiLineString.prototype = Object.create( GeometryCollection$$1 && GeometryCollection$$1.prototype );\n MultiLineString.prototype.constructor = MultiLineString;\n\n var staticAccessors = { serialVersionUID: { configurable: true } };\n\n MultiLineString.prototype.getSortIndex = function getSortIndex () {\n return Geometry.SORTINDEX_MULTILINESTRING\n };\n MultiLineString.prototype.equalsExact = function equalsExact () {\n if (arguments.length === 2) {\n var other = arguments[0];\n var tolerance = arguments[1];\n if (!this.isEquivalentClass(other)) {\n return false\n }\n return GeometryCollection$$1.prototype.equalsExact.call(this, other, tolerance)\n } else { return GeometryCollection$$1.prototype.equalsExact.apply(this, arguments) }\n };\n MultiLineString.prototype.getBoundaryDimension = function getBoundaryDimension () {\n if (this.isClosed()) {\n return Dimension.FALSE\n }\n return 0\n };\n MultiLineString.prototype.isClosed = function isClosed () {\n var this$1 = this;\n\n if (this.isEmpty()) {\n return false\n }\n for (var i = 0; i < this._geometries.length; i++) {\n if (!this$1._geometries[i].isClosed()) {\n return false\n }\n }\n return true\n };\n MultiLineString.prototype.getDimension = function getDimension () {\n return 1\n };\n MultiLineString.prototype.reverse = function reverse () {\n var this$1 = this;\n\n var nLines = this._geometries.length;\n var revLines = new Array(nLines).fill(null);\n for (var i = 0; i < this._geometries.length; i++) {\n revLines[nLines - 1 - i] = this$1._geometries[i].reverse();\n }\n return this.getFactory().createMultiLineString(revLines)\n };\n MultiLineString.prototype.getBoundary = function getBoundary () {\n return new BoundaryOp(this).getBoundary()\n };\n MultiLineString.prototype.getGeometryType = function getGeometryType () {\n return 'MultiLineString'\n };\n MultiLineString.prototype.copy = function copy () {\n var this$1 = this;\n\n var lineStrings = new Array(this._geometries.length).fill(null);\n for (var i = 0; i < lineStrings.length; i++) {\n lineStrings[i] = this$1._geometries[i].copy();\n }\n return new MultiLineString(lineStrings, this._factory)\n };\n MultiLineString.prototype.interfaces_ = function interfaces_ () {\n return [Lineal]\n };\n MultiLineString.prototype.getClass = function getClass () {\n return MultiLineString\n };\n staticAccessors.serialVersionUID.get = function () { return 8166665132445433741 };\n\n Object.defineProperties( MultiLineString, staticAccessors );\n\n return MultiLineString;\n}(GeometryCollection));\n\nvar BoundaryOp = function BoundaryOp () {\n this._geom = null;\n this._geomFact = null;\n this._bnRule = null;\n this._endpointMap = null;\n if (arguments.length === 1) {\n var geom = arguments[0];\n var bnRule = BoundaryNodeRule.MOD2_BOUNDARY_RULE;\n this._geom = geom;\n this._geomFact = geom.getFactory();\n this._bnRule = bnRule;\n } else if (arguments.length === 2) {\n var geom$1 = arguments[0];\n var bnRule$1 = arguments[1];\n this._geom = geom$1;\n this._geomFact = geom$1.getFactory();\n this._bnRule = bnRule$1;\n }\n};\nBoundaryOp.prototype.boundaryMultiLineString = function boundaryMultiLineString (mLine) {\n if (this._geom.isEmpty()) {\n return this.getEmptyMultiPoint()\n }\n var bdyPts = this.computeBoundaryCoordinates(mLine);\n if (bdyPts.length === 1) {\n return this._geomFact.createPoint(bdyPts[0])\n }\n return this._geomFact.createMultiPointFromCoords(bdyPts)\n};\nBoundaryOp.prototype.getBoundary = function getBoundary () {\n if (this._geom instanceof LineString) { return this.boundaryLineString(this._geom) }\n if (this._geom instanceof MultiLineString) { return this.boundaryMultiLineString(this._geom) }\n return this._geom.getBoundary()\n};\nBoundaryOp.prototype.boundaryLineString = function boundaryLineString (line) {\n if (this._geom.isEmpty()) {\n return this.getEmptyMultiPoint()\n }\n if (line.isClosed()) {\n var closedEndpointOnBoundary = this._bnRule.isInBoundary(2);\n if (closedEndpointOnBoundary) {\n return line.getStartPoint()\n } else {\n return this._geomFact.createMultiPoint()\n }\n }\n return this._geomFact.createMultiPoint([line.getStartPoint(), line.getEndPoint()])\n};\nBoundaryOp.prototype.getEmptyMultiPoint = function getEmptyMultiPoint () {\n return this._geomFact.createMultiPoint()\n};\nBoundaryOp.prototype.computeBoundaryCoordinates = function computeBoundaryCoordinates (mLine) {\n var this$1 = this;\n\n var bdyPts = new ArrayList();\n this._endpointMap = new TreeMap();\n for (var i = 0; i < mLine.getNumGeometries(); i++) {\n var line = mLine.getGeometryN(i);\n if (line.getNumPoints() === 0) { continue }\n this$1.addEndpoint(line.getCoordinateN(0));\n this$1.addEndpoint(line.getCoordinateN(line.getNumPoints() - 1));\n }\n for (var it = this._endpointMap.entrySet().iterator(); it.hasNext();) {\n var entry = it.next();\n var counter = entry.getValue();\n var valence = counter.count;\n if (this$1._bnRule.isInBoundary(valence)) {\n bdyPts.add(entry.getKey());\n }\n }\n return CoordinateArrays.toCoordinateArray(bdyPts)\n};\nBoundaryOp.prototype.addEndpoint = function addEndpoint (pt) {\n var counter = this._endpointMap.get(pt);\n if (counter === null) {\n counter = new Counter();\n this._endpointMap.put(pt, counter);\n }\n counter.count++;\n};\nBoundaryOp.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nBoundaryOp.prototype.getClass = function getClass () {\n return BoundaryOp\n};\nBoundaryOp.getBoundary = function getBoundary () {\n if (arguments.length === 1) {\n var g = arguments[0];\n var bop = new BoundaryOp(g);\n return bop.getBoundary()\n } else if (arguments.length === 2) {\n var g$1 = arguments[0];\n var bnRule = arguments[1];\n var bop$1 = new BoundaryOp(g$1, bnRule);\n return bop$1.getBoundary()\n }\n};\n\nvar Counter = function Counter () {\n this.count = null;\n};\nCounter.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nCounter.prototype.getClass = function getClass () {\n return Counter\n};\n\n// boundary\n\nfunction PrintStream () {}\n\nfunction StringReader () {}\n\nvar DecimalFormat = function DecimalFormat () {};\n\nfunction ByteArrayOutputStream () {}\n\nfunction IOException () {}\n\nfunction LineNumberReader () {}\n\nvar StringUtil = function StringUtil () {};\n\nvar staticAccessors$15 = { NEWLINE: { configurable: true },SIMPLE_ORDINATE_FORMAT: { configurable: true } };\n\nStringUtil.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nStringUtil.prototype.getClass = function getClass () {\n return StringUtil\n};\nStringUtil.chars = function chars (c, n) {\n var ch = new Array(n).fill(null);\n for (var i = 0; i < n; i++) {\n ch[i] = c;\n }\n return String(ch)\n};\nStringUtil.getStackTrace = function getStackTrace () {\n if (arguments.length === 1) {\n var t = arguments[0];\n var os = new ByteArrayOutputStream();\n var ps = new PrintStream(os);\n t.printStackTrace(ps);\n return os.toString()\n } else if (arguments.length === 2) {\n var t$1 = arguments[0];\n var depth = arguments[1];\n var stackTrace = '';\n var stringReader = new StringReader(StringUtil.getStackTrace(t$1));\n var lineNumberReader = new LineNumberReader(stringReader);\n for (var i = 0; i < depth; i++) {\n try {\n stackTrace += lineNumberReader.readLine() + StringUtil.NEWLINE;\n } catch (e) {\n if (e instanceof IOException) {\n Assert.shouldNeverReachHere();\n } else { throw e }\n } finally {}\n }\n return stackTrace\n }\n};\nStringUtil.split = function split (s, separator) {\n var separatorlen = separator.length;\n var tokenList = new ArrayList();\n var tmpString = '' + s;\n var pos = tmpString.indexOf(separator);\n while (pos >= 0) {\n var token = tmpString.substring(0, pos);\n tokenList.add(token);\n tmpString = tmpString.substring(pos + separatorlen);\n pos = tmpString.indexOf(separator);\n }\n if (tmpString.length > 0) { tokenList.add(tmpString); }\n var res = new Array(tokenList.size()).fill(null);\n for (var i = 0; i < res.length; i++) {\n res[i] = tokenList.get(i);\n }\n return res\n};\nStringUtil.toString = function toString () {\n if (arguments.length === 1) {\n var d = arguments[0];\n return StringUtil.SIMPLE_ORDINATE_FORMAT.format(d)\n }\n};\nStringUtil.spaces = function spaces (n) {\n return StringUtil.chars(' ', n)\n};\nstaticAccessors$15.NEWLINE.get = function () { return System.getProperty('line.separator') };\nstaticAccessors$15.SIMPLE_ORDINATE_FORMAT.get = function () { return new DecimalFormat('0.#') };\n\nObject.defineProperties( StringUtil, staticAccessors$15 );\n\nvar CoordinateSequences = function CoordinateSequences () {};\n\nCoordinateSequences.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nCoordinateSequences.prototype.getClass = function getClass () {\n return CoordinateSequences\n};\nCoordinateSequences.copyCoord = function copyCoord (src, srcPos, dest, destPos) {\n var minDim = Math.min(src.getDimension(), dest.getDimension());\n for (var dim = 0; dim < minDim; dim++) {\n dest.setOrdinate(destPos, dim, src.getOrdinate(srcPos, dim));\n }\n};\nCoordinateSequences.isRing = function isRing (seq) {\n var n = seq.size();\n if (n === 0) { return true }\n if (n <= 3) { return false }\n return seq.getOrdinate(0, CoordinateSequence.X) === seq.getOrdinate(n - 1, CoordinateSequence.X) && seq.getOrdinate(0, CoordinateSequence.Y) === seq.getOrdinate(n - 1, CoordinateSequence.Y)\n};\nCoordinateSequences.isEqual = function isEqual (cs1, cs2) {\n var cs1Size = cs1.size();\n var cs2Size = cs2.size();\n if (cs1Size !== cs2Size) { return false }\n var dim = Math.min(cs1.getDimension(), cs2.getDimension());\n for (var i = 0; i < cs1Size; i++) {\n for (var d = 0; d < dim; d++) {\n var v1 = cs1.getOrdinate(i, d);\n var v2 = cs2.getOrdinate(i, d);\n if (cs1.getOrdinate(i, d) === cs2.getOrdinate(i, d)) { continue }\n if (Double.isNaN(v1) && Double.isNaN(v2)) { continue }\n return false\n }\n }\n return true\n};\nCoordinateSequences.extend = function extend (fact, seq, size) {\n var newseq = fact.create(size, seq.getDimension());\n var n = seq.size();\n CoordinateSequences.copy(seq, 0, newseq, 0, n);\n if (n > 0) {\n for (var i = n; i < size; i++) { CoordinateSequences.copy(seq, n - 1, newseq, i, 1); }\n }\n return newseq\n};\nCoordinateSequences.reverse = function reverse (seq) {\n var last = seq.size() - 1;\n var mid = Math.trunc(last / 2);\n for (var i = 0; i <= mid; i++) {\n CoordinateSequences.swap(seq, i, last - i);\n }\n};\nCoordinateSequences.swap = function swap (seq, i, j) {\n if (i === j) { return null }\n for (var dim = 0; dim < seq.getDimension(); dim++) {\n var tmp = seq.getOrdinate(i, dim);\n seq.setOrdinate(i, dim, seq.getOrdinate(j, dim));\n seq.setOrdinate(j, dim, tmp);\n }\n};\nCoordinateSequences.copy = function copy (src, srcPos, dest, destPos, length) {\n for (var i = 0; i < length; i++) {\n CoordinateSequences.copyCoord(src, srcPos + i, dest, destPos + i);\n }\n};\nCoordinateSequences.toString = function toString () {\n if (arguments.length === 1) {\n var cs = arguments[0];\n var size = cs.size();\n if (size === 0) { return '()' }\n var dim = cs.getDimension();\n var buf = new StringBuffer();\n buf.append('(');\n for (var i = 0; i < size; i++) {\n if (i > 0) { buf.append(' '); }\n for (var d = 0; d < dim; d++) {\n if (d > 0) { buf.append(','); }\n buf.append(StringUtil.toString(cs.getOrdinate(i, d)));\n }\n }\n buf.append(')');\n return buf.toString()\n }\n};\nCoordinateSequences.ensureValidRing = function ensureValidRing (fact, seq) {\n var n = seq.size();\n if (n === 0) { return seq }\n if (n <= 3) { return CoordinateSequences.createClosedRing(fact, seq, 4) }\n var isClosed = seq.getOrdinate(0, CoordinateSequence.X) === seq.getOrdinate(n - 1, CoordinateSequence.X) && seq.getOrdinate(0, CoordinateSequence.Y) === seq.getOrdinate(n - 1, CoordinateSequence.Y);\n if (isClosed) { return seq }\n return CoordinateSequences.createClosedRing(fact, seq, n + 1)\n};\nCoordinateSequences.createClosedRing = function createClosedRing (fact, seq, size) {\n var newseq = fact.create(size, seq.getDimension());\n var n = seq.size();\n CoordinateSequences.copy(seq, 0, newseq, 0, n);\n for (var i = n; i < size; i++) { CoordinateSequences.copy(seq, 0, newseq, i, 1); }\n return newseq\n};\n\nvar LineString = (function (Geometry$$1) {\n function LineString (points, factory) {\n Geometry$$1.call(this, factory);\n this._points = null;\n this.init(points);\n }\n\n if ( Geometry$$1 ) LineString.__proto__ = Geometry$$1;\n LineString.prototype = Object.create( Geometry$$1 && Geometry$$1.prototype );\n LineString.prototype.constructor = LineString;\n\n var staticAccessors = { serialVersionUID: { configurable: true } };\n LineString.prototype.computeEnvelopeInternal = function computeEnvelopeInternal () {\n if (this.isEmpty()) {\n return new Envelope()\n }\n return this._points.expandEnvelope(new Envelope())\n };\n LineString.prototype.isRing = function isRing () {\n return this.isClosed() && this.isSimple()\n };\n LineString.prototype.getSortIndex = function getSortIndex () {\n return Geometry$$1.SORTINDEX_LINESTRING\n };\n LineString.prototype.getCoordinates = function getCoordinates () {\n return this._points.toCoordinateArray()\n };\n LineString.prototype.equalsExact = function equalsExact () {\n var this$1 = this;\n\n if (arguments.length === 2) {\n var other = arguments[0];\n var tolerance = arguments[1];\n if (!this.isEquivalentClass(other)) {\n return false\n }\n var otherLineString = other;\n if (this._points.size() !== otherLineString._points.size()) {\n return false\n }\n for (var i = 0; i < this._points.size(); i++) {\n if (!this$1.equal(this$1._points.getCoordinate(i), otherLineString._points.getCoordinate(i), tolerance)) {\n return false\n }\n }\n return true\n } else { return Geometry$$1.prototype.equalsExact.apply(this, arguments) }\n };\n LineString.prototype.normalize = function normalize () {\n var this$1 = this;\n\n for (var i = 0; i < Math.trunc(this._points.size() / 2); i++) {\n var j = this$1._points.size() - 1 - i;\n if (!this$1._points.getCoordinate(i).equals(this$1._points.getCoordinate(j))) {\n if (this$1._points.getCoordinate(i).compareTo(this$1._points.getCoordinate(j)) > 0) {\n CoordinateSequences.reverse(this$1._points);\n }\n return null\n }\n }\n };\n LineString.prototype.getCoordinate = function getCoordinate () {\n if (this.isEmpty()) { return null }\n return this._points.getCoordinate(0)\n };\n LineString.prototype.getBoundaryDimension = function getBoundaryDimension () {\n if (this.isClosed()) {\n return Dimension.FALSE\n }\n return 0\n };\n LineString.prototype.isClosed = function isClosed () {\n if (this.isEmpty()) {\n return false\n }\n return this.getCoordinateN(0).equals2D(this.getCoordinateN(this.getNumPoints() - 1))\n };\n LineString.prototype.getEndPoint = function getEndPoint () {\n if (this.isEmpty()) {\n return null\n }\n return this.getPointN(this.getNumPoints() - 1)\n };\n LineString.prototype.getDimension = function getDimension () {\n return 1\n };\n LineString.prototype.getLength = function getLength () {\n return CGAlgorithms.computeLength(this._points)\n };\n LineString.prototype.getNumPoints = function getNumPoints () {\n return this._points.size()\n };\n LineString.prototype.reverse = function reverse () {\n var seq = this._points.copy();\n CoordinateSequences.reverse(seq);\n var revLine = this.getFactory().createLineString(seq);\n return revLine\n };\n LineString.prototype.compareToSameClass = function compareToSameClass () {\n var this$1 = this;\n\n if (arguments.length === 1) {\n var o = arguments[0];\n var line = o;\n var i = 0;\n var j = 0;\n while (i < this._points.size() && j < line._points.size()) {\n var comparison = this$1._points.getCoordinate(i).compareTo(line._points.getCoordinate(j));\n if (comparison !== 0) {\n return comparison\n }\n i++;\n j++;\n }\n if (i < this._points.size()) {\n return 1\n }\n if (j < line._points.size()) {\n return -1\n }\n return 0\n } else if (arguments.length === 2) {\n var o$1 = arguments[0];\n var comp = arguments[1];\n var line$1 = o$1;\n return comp.compare(this._points, line$1._points)\n }\n };\n LineString.prototype.apply = function apply () {\n var this$1 = this;\n\n if (hasInterface(arguments[0], CoordinateFilter)) {\n var filter = arguments[0];\n for (var i = 0; i < this._points.size(); i++) {\n filter.filter(this$1._points.getCoordinate(i));\n }\n } else if (hasInterface(arguments[0], CoordinateSequenceFilter)) {\n var filter$1 = arguments[0];\n if (this._points.size() === 0) { return null }\n for (var i$1 = 0; i$1 < this._points.size(); i$1++) {\n filter$1.filter(this$1._points, i$1);\n if (filter$1.isDone()) { break }\n }\n if (filter$1.isGeometryChanged()) { this.geometryChanged(); }\n } else if (hasInterface(arguments[0], GeometryFilter)) {\n var filter$2 = arguments[0];\n filter$2.filter(this);\n } else if (hasInterface(arguments[0], GeometryComponentFilter)) {\n var filter$3 = arguments[0];\n filter$3.filter(this);\n }\n };\n LineString.prototype.getBoundary = function getBoundary () {\n return new BoundaryOp(this).getBoundary()\n };\n LineString.prototype.isEquivalentClass = function isEquivalentClass (other) {\n return other instanceof LineString\n };\n LineString.prototype.clone = function clone () {\n var ls = Geometry$$1.prototype.clone.call(this);\n ls._points = this._points.clone();\n return ls\n };\n LineString.prototype.getCoordinateN = function getCoordinateN (n) {\n return this._points.getCoordinate(n)\n };\n LineString.prototype.getGeometryType = function getGeometryType () {\n return 'LineString'\n };\n LineString.prototype.copy = function copy () {\n return new LineString(this._points.copy(), this._factory)\n };\n LineString.prototype.getCoordinateSequence = function getCoordinateSequence () {\n return this._points\n };\n LineString.prototype.isEmpty = function isEmpty () {\n return this._points.size() === 0\n };\n LineString.prototype.init = function init (points) {\n if (points === null) {\n points = this.getFactory().getCoordinateSequenceFactory().create([]);\n }\n if (points.size() === 1) {\n throw new IllegalArgumentException('Invalid number of points in LineString (found ' + points.size() + ' - must be 0 or >= 2)')\n }\n this._points = points;\n };\n LineString.prototype.isCoordinate = function isCoordinate (pt) {\n var this$1 = this;\n\n for (var i = 0; i < this._points.size(); i++) {\n if (this$1._points.getCoordinate(i).equals(pt)) {\n return true\n }\n }\n return false\n };\n LineString.prototype.getStartPoint = function getStartPoint () {\n if (this.isEmpty()) {\n return null\n }\n return this.getPointN(0)\n };\n LineString.prototype.getPointN = function getPointN (n) {\n return this.getFactory().createPoint(this._points.getCoordinate(n))\n };\n LineString.prototype.interfaces_ = function interfaces_ () {\n return [Lineal]\n };\n LineString.prototype.getClass = function getClass () {\n return LineString\n };\n staticAccessors.serialVersionUID.get = function () { return 3110669828065365560 };\n\n Object.defineProperties( LineString, staticAccessors );\n\n return LineString;\n}(Geometry));\n\nvar Puntal = function Puntal () {};\n\nPuntal.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nPuntal.prototype.getClass = function getClass () {\n return Puntal\n};\n\nvar Point = (function (Geometry$$1) {\n function Point (coordinates, factory) {\n Geometry$$1.call(this, factory);\n this._coordinates = coordinates || null;\n this.init(this._coordinates);\n }\n\n if ( Geometry$$1 ) Point.__proto__ = Geometry$$1;\n Point.prototype = Object.create( Geometry$$1 && Geometry$$1.prototype );\n Point.prototype.constructor = Point;\n\n var staticAccessors = { serialVersionUID: { configurable: true } };\n Point.prototype.computeEnvelopeInternal = function computeEnvelopeInternal () {\n if (this.isEmpty()) {\n return new Envelope()\n }\n var env = new Envelope();\n env.expandToInclude(this._coordinates.getX(0), this._coordinates.getY(0));\n return env\n };\n Point.prototype.getSortIndex = function getSortIndex () {\n return Geometry$$1.SORTINDEX_POINT\n };\n Point.prototype.getCoordinates = function getCoordinates () {\n return this.isEmpty() ? [] : [this.getCoordinate()]\n };\n Point.prototype.equalsExact = function equalsExact () {\n if (arguments.length === 2) {\n var other = arguments[0];\n var tolerance = arguments[1];\n if (!this.isEquivalentClass(other)) {\n return false\n }\n if (this.isEmpty() && other.isEmpty()) {\n return true\n }\n if (this.isEmpty() !== other.isEmpty()) {\n return false\n }\n return this.equal(other.getCoordinate(), this.getCoordinate(), tolerance)\n } else { return Geometry$$1.prototype.equalsExact.apply(this, arguments) }\n };\n Point.prototype.normalize = function normalize () {};\n Point.prototype.getCoordinate = function getCoordinate () {\n return this._coordinates.size() !== 0 ? this._coordinates.getCoordinate(0) : null\n };\n Point.prototype.getBoundaryDimension = function getBoundaryDimension () {\n return Dimension.FALSE\n };\n Point.prototype.getDimension = function getDimension () {\n return 0\n };\n Point.prototype.getNumPoints = function getNumPoints () {\n return this.isEmpty() ? 0 : 1\n };\n Point.prototype.reverse = function reverse () {\n return this.copy()\n };\n Point.prototype.getX = function getX () {\n if (this.getCoordinate() === null) {\n throw new Error('getX called on empty Point')\n }\n return this.getCoordinate().x\n };\n Point.prototype.compareToSameClass = function compareToSameClass () {\n if (arguments.length === 1) {\n var other = arguments[0];\n var point$1 = other;\n return this.getCoordinate().compareTo(point$1.getCoordinate())\n } else if (arguments.length === 2) {\n var other$1 = arguments[0];\n var comp = arguments[1];\n var point = other$1;\n return comp.compare(this._coordinates, point._coordinates)\n }\n };\n Point.prototype.apply = function apply () {\n if (hasInterface(arguments[0], CoordinateFilter)) {\n var filter = arguments[0];\n if (this.isEmpty()) {\n return null\n }\n filter.filter(this.getCoordinate());\n } else if (hasInterface(arguments[0], CoordinateSequenceFilter)) {\n var filter$1 = arguments[0];\n if (this.isEmpty()) { return null }\n filter$1.filter(this._coordinates, 0);\n if (filter$1.isGeometryChanged()) { this.geometryChanged(); }\n } else if (hasInterface(arguments[0], GeometryFilter)) {\n var filter$2 = arguments[0];\n filter$2.filter(this);\n } else if (hasInterface(arguments[0], GeometryComponentFilter)) {\n var filter$3 = arguments[0];\n filter$3.filter(this);\n }\n };\n Point.prototype.getBoundary = function getBoundary () {\n return this.getFactory().createGeometryCollection(null)\n };\n Point.prototype.clone = function clone () {\n var p = Geometry$$1.prototype.clone.call(this);\n p._coordinates = this._coordinates.clone();\n return p\n };\n Point.prototype.getGeometryType = function getGeometryType () {\n return 'Point'\n };\n Point.prototype.copy = function copy () {\n return new Point(this._coordinates.copy(), this._factory)\n };\n Point.prototype.getCoordinateSequence = function getCoordinateSequence () {\n return this._coordinates\n };\n Point.prototype.getY = function getY () {\n if (this.getCoordinate() === null) {\n throw new Error('getY called on empty Point')\n }\n return this.getCoordinate().y\n };\n Point.prototype.isEmpty = function isEmpty () {\n return this._coordinates.size() === 0\n };\n Point.prototype.init = function init (coordinates) {\n if (coordinates === null) {\n coordinates = this.getFactory().getCoordinateSequenceFactory().create([]);\n }\n Assert.isTrue(coordinates.size() <= 1);\n this._coordinates = coordinates;\n };\n Point.prototype.isSimple = function isSimple () {\n return true\n };\n Point.prototype.interfaces_ = function interfaces_ () {\n return [Puntal]\n };\n Point.prototype.getClass = function getClass () {\n return Point\n };\n staticAccessors.serialVersionUID.get = function () { return 4902022702746614570 };\n\n Object.defineProperties( Point, staticAccessors );\n\n return Point;\n}(Geometry));\n\nvar Polygonal = function Polygonal () {};\n\nPolygonal.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nPolygonal.prototype.getClass = function getClass () {\n return Polygonal\n};\n\nvar Polygon = (function (Geometry$$1) {\n function Polygon (shell, holes, factory) {\n Geometry$$1.call(this, factory);\n this._shell = null;\n this._holes = null;\n if (shell === null) {\n shell = this.getFactory().createLinearRing();\n }\n if (holes === null) {\n holes = [];\n }\n if (Geometry$$1.hasNullElements(holes)) {\n throw new IllegalArgumentException('holes must not contain null elements')\n }\n if (shell.isEmpty() && Geometry$$1.hasNonEmptyElements(holes)) {\n throw new IllegalArgumentException('shell is empty but holes are not')\n }\n this._shell = shell;\n this._holes = holes;\n }\n\n if ( Geometry$$1 ) Polygon.__proto__ = Geometry$$1;\n Polygon.prototype = Object.create( Geometry$$1 && Geometry$$1.prototype );\n Polygon.prototype.constructor = Polygon;\n\n var staticAccessors = { serialVersionUID: { configurable: true } };\n Polygon.prototype.computeEnvelopeInternal = function computeEnvelopeInternal () {\n return this._shell.getEnvelopeInternal()\n };\n Polygon.prototype.getSortIndex = function getSortIndex () {\n return Geometry$$1.SORTINDEX_POLYGON\n };\n Polygon.prototype.getCoordinates = function getCoordinates () {\n var this$1 = this;\n\n if (this.isEmpty()) {\n return []\n }\n var coordinates = new Array(this.getNumPoints()).fill(null);\n var k = -1;\n var shellCoordinates = this._shell.getCoordinates();\n for (var x = 0; x < shellCoordinates.length; x++) {\n k++;\n coordinates[k] = shellCoordinates[x];\n }\n for (var i = 0; i < this._holes.length; i++) {\n var childCoordinates = this$1._holes[i].getCoordinates();\n for (var j = 0; j < childCoordinates.length; j++) {\n k++;\n coordinates[k] = childCoordinates[j];\n }\n }\n return coordinates\n };\n Polygon.prototype.getArea = function getArea () {\n var this$1 = this;\n\n var area = 0.0;\n area += Math.abs(CGAlgorithms.signedArea(this._shell.getCoordinateSequence()));\n for (var i = 0; i < this._holes.length; i++) {\n area -= Math.abs(CGAlgorithms.signedArea(this$1._holes[i].getCoordinateSequence()));\n }\n return area\n };\n Polygon.prototype.isRectangle = function isRectangle () {\n if (this.getNumInteriorRing() !== 0) { return false }\n if (this._shell === null) { return false }\n if (this._shell.getNumPoints() !== 5) { return false }\n var seq = this._shell.getCoordinateSequence();\n var env = this.getEnvelopeInternal();\n for (var i = 0; i < 5; i++) {\n var x = seq.getX(i);\n if (!(x === env.getMinX() || x === env.getMaxX())) { return false }\n var y = seq.getY(i);\n if (!(y === env.getMinY() || y === env.getMaxY())) { return false }\n }\n var prevX = seq.getX(0);\n var prevY = seq.getY(0);\n for (var i$1 = 1; i$1 <= 4; i$1++) {\n var x$1 = seq.getX(i$1);\n var y$1 = seq.getY(i$1);\n var xChanged = x$1 !== prevX;\n var yChanged = y$1 !== prevY;\n if (xChanged === yChanged) { return false }\n prevX = x$1;\n prevY = y$1;\n }\n return true\n };\n Polygon.prototype.equalsExact = function equalsExact () {\n var this$1 = this;\n\n if (arguments.length === 2) {\n var other = arguments[0];\n var tolerance = arguments[1];\n if (!this.isEquivalentClass(other)) {\n return false\n }\n var otherPolygon = other;\n var thisShell = this._shell;\n var otherPolygonShell = otherPolygon._shell;\n if (!thisShell.equalsExact(otherPolygonShell, tolerance)) {\n return false\n }\n if (this._holes.length !== otherPolygon._holes.length) {\n return false\n }\n for (var i = 0; i < this._holes.length; i++) {\n if (!this$1._holes[i].equalsExact(otherPolygon._holes[i], tolerance)) {\n return false\n }\n }\n return true\n } else { return Geometry$$1.prototype.equalsExact.apply(this, arguments) }\n };\n Polygon.prototype.normalize = function normalize () {\n var this$1 = this;\n\n if (arguments.length === 0) {\n this.normalize(this._shell, true);\n for (var i = 0; i < this._holes.length; i++) {\n this$1.normalize(this$1._holes[i], false);\n }\n Arrays.sort(this._holes);\n } else if (arguments.length === 2) {\n var ring = arguments[0];\n var clockwise = arguments[1];\n if (ring.isEmpty()) {\n return null\n }\n var uniqueCoordinates = new Array(ring.getCoordinates().length - 1).fill(null);\n System.arraycopy(ring.getCoordinates(), 0, uniqueCoordinates, 0, uniqueCoordinates.length);\n var minCoordinate = CoordinateArrays.minCoordinate(ring.getCoordinates());\n CoordinateArrays.scroll(uniqueCoordinates, minCoordinate);\n System.arraycopy(uniqueCoordinates, 0, ring.getCoordinates(), 0, uniqueCoordinates.length);\n ring.getCoordinates()[uniqueCoordinates.length] = uniqueCoordinates[0];\n if (CGAlgorithms.isCCW(ring.getCoordinates()) === clockwise) {\n CoordinateArrays.reverse(ring.getCoordinates());\n }\n }\n };\n Polygon.prototype.getCoordinate = function getCoordinate () {\n return this._shell.getCoordinate()\n };\n Polygon.prototype.getNumInteriorRing = function getNumInteriorRing () {\n return this._holes.length\n };\n Polygon.prototype.getBoundaryDimension = function getBoundaryDimension () {\n return 1\n };\n Polygon.prototype.getDimension = function getDimension () {\n return 2\n };\n Polygon.prototype.getLength = function getLength () {\n var this$1 = this;\n\n var len = 0.0;\n len += this._shell.getLength();\n for (var i = 0; i < this._holes.length; i++) {\n len += this$1._holes[i].getLength();\n }\n return len\n };\n Polygon.prototype.getNumPoints = function getNumPoints () {\n var this$1 = this;\n\n var numPoints = this._shell.getNumPoints();\n for (var i = 0; i < this._holes.length; i++) {\n numPoints += this$1._holes[i].getNumPoints();\n }\n return numPoints\n };\n Polygon.prototype.reverse = function reverse () {\n var this$1 = this;\n\n var poly = this.copy();\n poly._shell = this._shell.copy().reverse();\n poly._holes = new Array(this._holes.length).fill(null);\n for (var i = 0; i < this._holes.length; i++) {\n poly._holes[i] = this$1._holes[i].copy().reverse();\n }\n return poly\n };\n Polygon.prototype.convexHull = function convexHull () {\n return this.getExteriorRing().convexHull()\n };\n Polygon.prototype.compareToSameClass = function compareToSameClass () {\n var this$1 = this;\n\n if (arguments.length === 1) {\n var o = arguments[0];\n var thisShell = this._shell;\n var otherShell = o._shell;\n return thisShell.compareToSameClass(otherShell)\n } else if (arguments.length === 2) {\n var o$1 = arguments[0];\n var comp = arguments[1];\n var poly = o$1;\n var thisShell$1 = this._shell;\n var otherShell$1 = poly._shell;\n var shellComp = thisShell$1.compareToSameClass(otherShell$1, comp);\n if (shellComp !== 0) { return shellComp }\n var nHole1 = this.getNumInteriorRing();\n var nHole2 = poly.getNumInteriorRing();\n var i = 0;\n while (i < nHole1 && i < nHole2) {\n var thisHole = this$1.getInteriorRingN(i);\n var otherHole = poly.getInteriorRingN(i);\n var holeComp = thisHole.compareToSameClass(otherHole, comp);\n if (holeComp !== 0) { return holeComp }\n i++;\n }\n if (i < nHole1) { return 1 }\n if (i < nHole2) { return -1 }\n return 0\n }\n };\n Polygon.prototype.apply = function apply (filter) {\n var this$1 = this;\n\n if (hasInterface(filter, CoordinateFilter)) {\n this._shell.apply(filter);\n for (var i$1 = 0; i$1 < this._holes.length; i$1++) {\n this$1._holes[i$1].apply(filter);\n }\n } else if (hasInterface(filter, CoordinateSequenceFilter)) {\n this._shell.apply(filter);\n if (!filter.isDone()) {\n for (var i$2 = 0; i$2 < this._holes.length; i$2++) {\n this$1._holes[i$2].apply(filter);\n if (filter.isDone()) { break }\n }\n }\n if (filter.isGeometryChanged()) { this.geometryChanged(); }\n } else if (hasInterface(filter, GeometryFilter)) {\n filter.filter(this);\n } else if (hasInterface(filter, GeometryComponentFilter)) {\n filter.filter(this);\n this._shell.apply(filter);\n for (var i = 0; i < this._holes.length; i++) {\n this$1._holes[i].apply(filter);\n }\n }\n };\n Polygon.prototype.getBoundary = function getBoundary () {\n var this$1 = this;\n\n if (this.isEmpty()) {\n return this.getFactory().createMultiLineString()\n }\n var rings = new Array(this._holes.length + 1).fill(null);\n rings[0] = this._shell;\n for (var i = 0; i < this._holes.length; i++) {\n rings[i + 1] = this$1._holes[i];\n }\n if (rings.length <= 1) { return this.getFactory().createLinearRing(rings[0].getCoordinateSequence()) }\n return this.getFactory().createMultiLineString(rings)\n };\n Polygon.prototype.clone = function clone () {\n var this$1 = this;\n\n var poly = Geometry$$1.prototype.clone.call(this);\n poly._shell = this._shell.clone();\n poly._holes = new Array(this._holes.length).fill(null);\n for (var i = 0; i < this._holes.length; i++) {\n poly._holes[i] = this$1._holes[i].clone();\n }\n return poly\n };\n Polygon.prototype.getGeometryType = function getGeometryType () {\n return 'Polygon'\n };\n Polygon.prototype.copy = function copy () {\n var this$1 = this;\n\n var shell = this._shell.copy();\n var holes = new Array(this._holes.length).fill(null);\n for (var i = 0; i < holes.length; i++) {\n holes[i] = this$1._holes[i].copy();\n }\n return new Polygon(shell, holes, this._factory)\n };\n Polygon.prototype.getExteriorRing = function getExteriorRing () {\n return this._shell\n };\n Polygon.prototype.isEmpty = function isEmpty () {\n return this._shell.isEmpty()\n };\n Polygon.prototype.getInteriorRingN = function getInteriorRingN (n) {\n return this._holes[n]\n };\n Polygon.prototype.interfaces_ = function interfaces_ () {\n return [Polygonal]\n };\n Polygon.prototype.getClass = function getClass () {\n return Polygon\n };\n staticAccessors.serialVersionUID.get = function () { return -3494792200821764533 };\n\n Object.defineProperties( Polygon, staticAccessors );\n\n return Polygon;\n}(Geometry));\n\nvar MultiPoint = (function (GeometryCollection$$1) {\n function MultiPoint () {\n GeometryCollection$$1.apply(this, arguments);\n }\n\n if ( GeometryCollection$$1 ) MultiPoint.__proto__ = GeometryCollection$$1;\n MultiPoint.prototype = Object.create( GeometryCollection$$1 && GeometryCollection$$1.prototype );\n MultiPoint.prototype.constructor = MultiPoint;\n\n var staticAccessors = { serialVersionUID: { configurable: true } };\n\n MultiPoint.prototype.getSortIndex = function getSortIndex () {\n return Geometry.SORTINDEX_MULTIPOINT\n };\n MultiPoint.prototype.isValid = function isValid () {\n return true\n };\n MultiPoint.prototype.equalsExact = function equalsExact () {\n if (arguments.length === 2) {\n var other = arguments[0];\n var tolerance = arguments[1];\n if (!this.isEquivalentClass(other)) {\n return false\n }\n return GeometryCollection$$1.prototype.equalsExact.call(this, other, tolerance)\n } else { return GeometryCollection$$1.prototype.equalsExact.apply(this, arguments) }\n };\n MultiPoint.prototype.getCoordinate = function getCoordinate () {\n if (arguments.length === 1) {\n var n = arguments[0];\n return this._geometries[n].getCoordinate()\n } else { return GeometryCollection$$1.prototype.getCoordinate.apply(this, arguments) }\n };\n MultiPoint.prototype.getBoundaryDimension = function getBoundaryDimension () {\n return Dimension.FALSE\n };\n MultiPoint.prototype.getDimension = function getDimension () {\n return 0\n };\n MultiPoint.prototype.getBoundary = function getBoundary () {\n return this.getFactory().createGeometryCollection(null)\n };\n MultiPoint.prototype.getGeometryType = function getGeometryType () {\n return 'MultiPoint'\n };\n MultiPoint.prototype.copy = function copy () {\n var this$1 = this;\n\n var points = new Array(this._geometries.length).fill(null);\n for (var i = 0; i < points.length; i++) {\n points[i] = this$1._geometries[i].copy();\n }\n return new MultiPoint(points, this._factory)\n };\n MultiPoint.prototype.interfaces_ = function interfaces_ () {\n return [Puntal]\n };\n MultiPoint.prototype.getClass = function getClass () {\n return MultiPoint\n };\n staticAccessors.serialVersionUID.get = function () { return -8048474874175355449 };\n\n Object.defineProperties( MultiPoint, staticAccessors );\n\n return MultiPoint;\n}(GeometryCollection));\n\nvar LinearRing = (function (LineString$$1) {\n function LinearRing (points, factory) {\n if (points instanceof Coordinate && factory instanceof GeometryFactory) {\n points = factory.getCoordinateSequenceFactory().create(points);\n }\n LineString$$1.call(this, points, factory);\n this.validateConstruction();\n }\n\n if ( LineString$$1 ) LinearRing.__proto__ = LineString$$1;\n LinearRing.prototype = Object.create( LineString$$1 && LineString$$1.prototype );\n LinearRing.prototype.constructor = LinearRing;\n\n var staticAccessors = { MINIMUM_VALID_SIZE: { configurable: true },serialVersionUID: { configurable: true } };\n LinearRing.prototype.getSortIndex = function getSortIndex () {\n return Geometry.SORTINDEX_LINEARRING\n };\n LinearRing.prototype.getBoundaryDimension = function getBoundaryDimension () {\n return Dimension.FALSE\n };\n LinearRing.prototype.isClosed = function isClosed () {\n if (this.isEmpty()) {\n return true\n }\n return LineString$$1.prototype.isClosed.call(this)\n };\n LinearRing.prototype.reverse = function reverse () {\n var seq = this._points.copy();\n CoordinateSequences.reverse(seq);\n var rev = this.getFactory().createLinearRing(seq);\n return rev\n };\n LinearRing.prototype.validateConstruction = function validateConstruction () {\n if (!this.isEmpty() && !LineString$$1.prototype.isClosed.call(this)) {\n throw new IllegalArgumentException('Points of LinearRing do not form a closed linestring')\n }\n if (this.getCoordinateSequence().size() >= 1 && this.getCoordinateSequence().size() < LinearRing.MINIMUM_VALID_SIZE) {\n throw new IllegalArgumentException('Invalid number of points in LinearRing (found ' + this.getCoordinateSequence().size() + ' - must be 0 or >= 4)')\n }\n };\n LinearRing.prototype.getGeometryType = function getGeometryType () {\n return 'LinearRing'\n };\n LinearRing.prototype.copy = function copy () {\n return new LinearRing(this._points.copy(), this._factory)\n };\n LinearRing.prototype.interfaces_ = function interfaces_ () {\n return []\n };\n LinearRing.prototype.getClass = function getClass () {\n return LinearRing\n };\n staticAccessors.MINIMUM_VALID_SIZE.get = function () { return 4 };\n staticAccessors.serialVersionUID.get = function () { return -4261142084085851829 };\n\n Object.defineProperties( LinearRing, staticAccessors );\n\n return LinearRing;\n}(LineString));\n\nvar MultiPolygon = (function (GeometryCollection$$1) {\n function MultiPolygon () {\n GeometryCollection$$1.apply(this, arguments);\n }\n\n if ( GeometryCollection$$1 ) MultiPolygon.__proto__ = GeometryCollection$$1;\n MultiPolygon.prototype = Object.create( GeometryCollection$$1 && GeometryCollection$$1.prototype );\n MultiPolygon.prototype.constructor = MultiPolygon;\n\n var staticAccessors = { serialVersionUID: { configurable: true } };\n\n MultiPolygon.prototype.getSortIndex = function getSortIndex () {\n return Geometry.SORTINDEX_MULTIPOLYGON\n };\n MultiPolygon.prototype.equalsExact = function equalsExact () {\n if (arguments.length === 2) {\n var other = arguments[0];\n var tolerance = arguments[1];\n if (!this.isEquivalentClass(other)) {\n return false\n }\n return GeometryCollection$$1.prototype.equalsExact.call(this, other, tolerance)\n } else { return GeometryCollection$$1.prototype.equalsExact.apply(this, arguments) }\n };\n MultiPolygon.prototype.getBoundaryDimension = function getBoundaryDimension () {\n return 1\n };\n MultiPolygon.prototype.getDimension = function getDimension () {\n return 2\n };\n MultiPolygon.prototype.reverse = function reverse () {\n var this$1 = this;\n\n var n = this._geometries.length;\n var revGeoms = new Array(n).fill(null);\n for (var i = 0; i < this._geometries.length; i++) {\n revGeoms[i] = this$1._geometries[i].reverse();\n }\n return this.getFactory().createMultiPolygon(revGeoms)\n };\n MultiPolygon.prototype.getBoundary = function getBoundary () {\n var this$1 = this;\n\n if (this.isEmpty()) {\n return this.getFactory().createMultiLineString()\n }\n var allRings = new ArrayList();\n for (var i = 0; i < this._geometries.length; i++) {\n var polygon = this$1._geometries[i];\n var rings = polygon.getBoundary();\n for (var j = 0; j < rings.getNumGeometries(); j++) {\n allRings.add(rings.getGeometryN(j));\n }\n }\n var allRingsArray = new Array(allRings.size()).fill(null);\n return this.getFactory().createMultiLineString(allRings.toArray(allRingsArray))\n };\n MultiPolygon.prototype.getGeometryType = function getGeometryType () {\n return 'MultiPolygon'\n };\n MultiPolygon.prototype.copy = function copy () {\n var this$1 = this;\n\n var polygons = new Array(this._geometries.length).fill(null);\n for (var i = 0; i < polygons.length; i++) {\n polygons[i] = this$1._geometries[i].copy();\n }\n return new MultiPolygon(polygons, this._factory)\n };\n MultiPolygon.prototype.interfaces_ = function interfaces_ () {\n return [Polygonal]\n };\n MultiPolygon.prototype.getClass = function getClass () {\n return MultiPolygon\n };\n staticAccessors.serialVersionUID.get = function () { return -551033529766975875 };\n\n Object.defineProperties( MultiPolygon, staticAccessors );\n\n return MultiPolygon;\n}(GeometryCollection));\n\nvar GeometryEditor = function GeometryEditor (factory) {\n this._factory = factory || null;\n this._isUserDataCopied = false;\n};\n\nvar staticAccessors$16 = { NoOpGeometryOperation: { configurable: true },CoordinateOperation: { configurable: true },CoordinateSequenceOperation: { configurable: true } };\nGeometryEditor.prototype.setCopyUserData = function setCopyUserData (isUserDataCopied) {\n this._isUserDataCopied = isUserDataCopied;\n};\nGeometryEditor.prototype.edit = function edit (geometry, operation) {\n if (geometry === null) { return null }\n var result = this.editInternal(geometry, operation);\n if (this._isUserDataCopied) {\n result.setUserData(geometry.getUserData());\n }\n return result\n};\nGeometryEditor.prototype.editInternal = function editInternal (geometry, operation) {\n if (this._factory === null) { this._factory = geometry.getFactory(); }\n if (geometry instanceof GeometryCollection) {\n return this.editGeometryCollection(geometry, operation)\n }\n if (geometry instanceof Polygon) {\n return this.editPolygon(geometry, operation)\n }\n if (geometry instanceof Point) {\n return operation.edit(geometry, this._factory)\n }\n if (geometry instanceof LineString) {\n return operation.edit(geometry, this._factory)\n }\n Assert.shouldNeverReachHere('Unsupported Geometry class: ' + geometry.getClass().getName());\n return null\n};\nGeometryEditor.prototype.editGeometryCollection = function editGeometryCollection (collection, operation) {\n var this$1 = this;\n\n var collectionForType = operation.edit(collection, this._factory);\n var geometries = new ArrayList();\n for (var i = 0; i < collectionForType.getNumGeometries(); i++) {\n var geometry = this$1.edit(collectionForType.getGeometryN(i), operation);\n if (geometry === null || geometry.isEmpty()) {\n continue\n }\n geometries.add(geometry);\n }\n if (collectionForType.getClass() === MultiPoint) {\n return this._factory.createMultiPoint(geometries.toArray([]))\n }\n if (collectionForType.getClass() === MultiLineString) {\n return this._factory.createMultiLineString(geometries.toArray([]))\n }\n if (collectionForType.getClass() === MultiPolygon) {\n return this._factory.createMultiPolygon(geometries.toArray([]))\n }\n return this._factory.createGeometryCollection(geometries.toArray([]))\n};\nGeometryEditor.prototype.editPolygon = function editPolygon (polygon, operation) {\n var this$1 = this;\n\n var newPolygon = operation.edit(polygon, this._factory);\n if (newPolygon === null) { newPolygon = this._factory.createPolygon(null); }\n if (newPolygon.isEmpty()) {\n return newPolygon\n }\n var shell = this.edit(newPolygon.getExteriorRing(), operation);\n if (shell === null || shell.isEmpty()) {\n return this._factory.createPolygon()\n }\n var holes = new ArrayList();\n for (var i = 0; i < newPolygon.getNumInteriorRing(); i++) {\n var hole = this$1.edit(newPolygon.getInteriorRingN(i), operation);\n if (hole === null || hole.isEmpty()) {\n continue\n }\n holes.add(hole);\n }\n return this._factory.createPolygon(shell, holes.toArray([]))\n};\nGeometryEditor.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nGeometryEditor.prototype.getClass = function getClass () {\n return GeometryEditor\n};\nGeometryEditor.GeometryEditorOperation = function GeometryEditorOperation () {};\nstaticAccessors$16.NoOpGeometryOperation.get = function () { return NoOpGeometryOperation };\nstaticAccessors$16.CoordinateOperation.get = function () { return CoordinateOperation };\nstaticAccessors$16.CoordinateSequenceOperation.get = function () { return CoordinateSequenceOperation };\n\nObject.defineProperties( GeometryEditor, staticAccessors$16 );\n\nvar NoOpGeometryOperation = function NoOpGeometryOperation () {};\n\nNoOpGeometryOperation.prototype.edit = function edit (geometry, factory) {\n return geometry\n};\nNoOpGeometryOperation.prototype.interfaces_ = function interfaces_ () {\n return [GeometryEditor.GeometryEditorOperation]\n};\nNoOpGeometryOperation.prototype.getClass = function getClass () {\n return NoOpGeometryOperation\n};\n\nvar CoordinateOperation = function CoordinateOperation () {};\n\nCoordinateOperation.prototype.edit = function edit (geometry, factory) {\n var coords = this.editCoordinates(geometry.getCoordinates(), geometry);\n if (coords === null) { return geometry }\n if (geometry instanceof LinearRing) {\n return factory.createLinearRing(coords)\n }\n if (geometry instanceof LineString) {\n return factory.createLineString(coords)\n }\n if (geometry instanceof Point) {\n if (coords.length > 0) {\n return factory.createPoint(coords[0])\n } else {\n return factory.createPoint()\n }\n }\n return geometry\n};\nCoordinateOperation.prototype.interfaces_ = function interfaces_ () {\n return [GeometryEditor.GeometryEditorOperation]\n};\nCoordinateOperation.prototype.getClass = function getClass () {\n return CoordinateOperation\n};\n\nvar CoordinateSequenceOperation = function CoordinateSequenceOperation () {};\n\nCoordinateSequenceOperation.prototype.edit = function edit (geometry, factory) {\n if (geometry instanceof LinearRing) {\n return factory.createLinearRing(this.edit(geometry.getCoordinateSequence(), geometry))\n }\n if (geometry instanceof LineString) {\n return factory.createLineString(this.edit(geometry.getCoordinateSequence(), geometry))\n }\n if (geometry instanceof Point) {\n return factory.createPoint(this.edit(geometry.getCoordinateSequence(), geometry))\n }\n return geometry\n};\nCoordinateSequenceOperation.prototype.interfaces_ = function interfaces_ () {\n return [GeometryEditor.GeometryEditorOperation]\n};\nCoordinateSequenceOperation.prototype.getClass = function getClass () {\n return CoordinateSequenceOperation\n};\n\nvar CoordinateArraySequence = function CoordinateArraySequence () {\n var this$1 = this;\n\n this._dimension = 3;\n this._coordinates = null;\n if (arguments.length === 1) {\n if (arguments[0] instanceof Array) {\n this._coordinates = arguments[0];\n this._dimension = 3;\n } else if (Number.isInteger(arguments[0])) {\n var size = arguments[0];\n this._coordinates = new Array(size).fill(null);\n for (var i = 0; i < size; i++) {\n this$1._coordinates[i] = new Coordinate();\n }\n } else if (hasInterface(arguments[0], CoordinateSequence)) {\n var coordSeq = arguments[0];\n if (coordSeq === null) {\n this._coordinates = new Array(0).fill(null);\n return null\n }\n this._dimension = coordSeq.getDimension();\n this._coordinates = new Array(coordSeq.size()).fill(null);\n for (var i$1 = 0; i$1 < this._coordinates.length; i$1++) {\n this$1._coordinates[i$1] = coordSeq.getCoordinateCopy(i$1);\n }\n }\n } else if (arguments.length === 2) {\n if (arguments[0] instanceof Array && Number.isInteger(arguments[1])) {\n var coordinates = arguments[0];\n var dimension = arguments[1];\n this._coordinates = coordinates;\n this._dimension = dimension;\n if (coordinates === null) { this._coordinates = new Array(0).fill(null); }\n } else if (Number.isInteger(arguments[0]) && Number.isInteger(arguments[1])) {\n var size$1 = arguments[0];\n var dimension$1 = arguments[1];\n this._coordinates = new Array(size$1).fill(null);\n this._dimension = dimension$1;\n for (var i$2 = 0; i$2 < size$1; i$2++) {\n this$1._coordinates[i$2] = new Coordinate();\n }\n }\n }\n};\n\nvar staticAccessors$18 = { serialVersionUID: { configurable: true } };\nCoordinateArraySequence.prototype.setOrdinate = function setOrdinate (index, ordinateIndex, value) {\n switch (ordinateIndex) {\n case CoordinateSequence.X:\n this._coordinates[index].x = value;\n break\n case CoordinateSequence.Y:\n this._coordinates[index].y = value;\n break\n case CoordinateSequence.Z:\n this._coordinates[index].z = value;\n break\n default:\n throw new IllegalArgumentException('invalid ordinateIndex')\n }\n};\nCoordinateArraySequence.prototype.size = function size () {\n return this._coordinates.length\n};\nCoordinateArraySequence.prototype.getOrdinate = function getOrdinate (index, ordinateIndex) {\n switch (ordinateIndex) {\n case CoordinateSequence.X:\n return this._coordinates[index].x\n case CoordinateSequence.Y:\n return this._coordinates[index].y\n case CoordinateSequence.Z:\n return this._coordinates[index].z\n default:\n }\n return Double.NaN\n};\nCoordinateArraySequence.prototype.getCoordinate = function getCoordinate () {\n if (arguments.length === 1) {\n var i = arguments[0];\n return this._coordinates[i]\n } else if (arguments.length === 2) {\n var index = arguments[0];\n var coord = arguments[1];\n coord.x = this._coordinates[index].x;\n coord.y = this._coordinates[index].y;\n coord.z = this._coordinates[index].z;\n }\n};\nCoordinateArraySequence.prototype.getCoordinateCopy = function getCoordinateCopy (i) {\n return new Coordinate(this._coordinates[i])\n};\nCoordinateArraySequence.prototype.getDimension = function getDimension () {\n return this._dimension\n};\nCoordinateArraySequence.prototype.getX = function getX (index) {\n return this._coordinates[index].x\n};\nCoordinateArraySequence.prototype.clone = function clone () {\n var this$1 = this;\n\n var cloneCoordinates = new Array(this.size()).fill(null);\n for (var i = 0; i < this._coordinates.length; i++) {\n cloneCoordinates[i] = this$1._coordinates[i].clone();\n }\n return new CoordinateArraySequence(cloneCoordinates, this._dimension)\n};\nCoordinateArraySequence.prototype.expandEnvelope = function expandEnvelope (env) {\n var this$1 = this;\n\n for (var i = 0; i < this._coordinates.length; i++) {\n env.expandToInclude(this$1._coordinates[i]);\n }\n return env\n};\nCoordinateArraySequence.prototype.copy = function copy () {\n var this$1 = this;\n\n var cloneCoordinates = new Array(this.size()).fill(null);\n for (var i = 0; i < this._coordinates.length; i++) {\n cloneCoordinates[i] = this$1._coordinates[i].copy();\n }\n return new CoordinateArraySequence(cloneCoordinates, this._dimension)\n};\nCoordinateArraySequence.prototype.toString = function toString () {\n var this$1 = this;\n\n if (this._coordinates.length > 0) {\n var strBuf = new StringBuffer(17 * this._coordinates.length);\n strBuf.append('(');\n strBuf.append(this._coordinates[0]);\n for (var i = 1; i < this._coordinates.length; i++) {\n strBuf.append(', ');\n strBuf.append(this$1._coordinates[i]);\n }\n strBuf.append(')');\n return strBuf.toString()\n } else {\n return '()'\n }\n};\nCoordinateArraySequence.prototype.getY = function getY (index) {\n return this._coordinates[index].y\n};\nCoordinateArraySequence.prototype.toCoordinateArray = function toCoordinateArray () {\n return this._coordinates\n};\nCoordinateArraySequence.prototype.interfaces_ = function interfaces_ () {\n return [CoordinateSequence, Serializable]\n};\nCoordinateArraySequence.prototype.getClass = function getClass () {\n return CoordinateArraySequence\n};\nstaticAccessors$18.serialVersionUID.get = function () { return -915438501601840650 };\n\nObject.defineProperties( CoordinateArraySequence, staticAccessors$18 );\n\nvar CoordinateArraySequenceFactory = function CoordinateArraySequenceFactory () {};\n\nvar staticAccessors$17 = { serialVersionUID: { configurable: true },instanceObject: { configurable: true } };\n\nCoordinateArraySequenceFactory.prototype.readResolve = function readResolve () {\n return CoordinateArraySequenceFactory.instance()\n};\nCoordinateArraySequenceFactory.prototype.create = function create () {\n if (arguments.length === 1) {\n if (arguments[0] instanceof Array) {\n var coordinates = arguments[0];\n return new CoordinateArraySequence(coordinates)\n } else if (hasInterface(arguments[0], CoordinateSequence)) {\n var coordSeq = arguments[0];\n return new CoordinateArraySequence(coordSeq)\n }\n } else if (arguments.length === 2) {\n var size = arguments[0];\n var dimension = arguments[1];\n if (dimension > 3) { dimension = 3; }\n if (dimension < 2) { return new CoordinateArraySequence(size) }\n return new CoordinateArraySequence(size, dimension)\n }\n};\nCoordinateArraySequenceFactory.prototype.interfaces_ = function interfaces_ () {\n return [CoordinateSequenceFactory, Serializable]\n};\nCoordinateArraySequenceFactory.prototype.getClass = function getClass () {\n return CoordinateArraySequenceFactory\n};\nCoordinateArraySequenceFactory.instance = function instance () {\n return CoordinateArraySequenceFactory.instanceObject\n};\n\nstaticAccessors$17.serialVersionUID.get = function () { return -4099577099607551657 };\nstaticAccessors$17.instanceObject.get = function () { return new CoordinateArraySequenceFactory() };\n\nObject.defineProperties( CoordinateArraySequenceFactory, staticAccessors$17 );\n\n/**\n * @see http://download.oracle.com/javase/6/docs/api/java/util/HashMap.html\n *\n * @extends {javascript.util.Map}\n * @constructor\n * @private\n */\nvar HashMap = (function (MapInterface) {\n function HashMap () {\n MapInterface.call(this);\n this.map_ = new Map();\n }\n\n if ( MapInterface ) HashMap.__proto__ = MapInterface;\n HashMap.prototype = Object.create( MapInterface && MapInterface.prototype );\n HashMap.prototype.constructor = HashMap;\n /**\n * @override\n */\n HashMap.prototype.get = function get (key) {\n return this.map_.get(key) || null\n };\n\n /**\n * @override\n */\n HashMap.prototype.put = function put (key, value) {\n this.map_.set(key, value);\n return value\n };\n\n /**\n * @override\n */\n HashMap.prototype.values = function values () {\n var arrayList = new ArrayList();\n var it = this.map_.values();\n var o = it.next();\n while (!o.done) {\n arrayList.add(o.value);\n o = it.next();\n }\n return arrayList\n };\n\n /**\n * @override\n */\n HashMap.prototype.entrySet = function entrySet () {\n var hashSet = new HashSet();\n this.map_.entries().forEach(function (entry) { return hashSet.add(entry); });\n return hashSet\n };\n\n /**\n * @override\n */\n HashMap.prototype.size = function size () {\n return this.map_.size()\n };\n\n return HashMap;\n}(Map$1));\n\nvar PrecisionModel = function PrecisionModel () {\n this._modelType = null;\n this._scale = null;\n if (arguments.length === 0) {\n this._modelType = PrecisionModel.FLOATING;\n } else if (arguments.length === 1) {\n if (arguments[0] instanceof Type) {\n var modelType = arguments[0];\n this._modelType = modelType;\n if (modelType === PrecisionModel.FIXED) {\n this.setScale(1.0);\n }\n } else if (typeof arguments[0] === 'number') {\n var scale = arguments[0];\n this._modelType = PrecisionModel.FIXED;\n this.setScale(scale);\n } else if (arguments[0] instanceof PrecisionModel) {\n var pm = arguments[0];\n this._modelType = pm._modelType;\n this._scale = pm._scale;\n }\n }\n};\n\nvar staticAccessors$19 = { serialVersionUID: { configurable: true },maximumPreciseValue: { configurable: true } };\nPrecisionModel.prototype.equals = function equals (other) {\n if (!(other instanceof PrecisionModel)) {\n return false\n }\n var otherPrecisionModel = other;\n return this._modelType === otherPrecisionModel._modelType && this._scale === otherPrecisionModel._scale\n};\nPrecisionModel.prototype.compareTo = function compareTo (o) {\n var other = o;\n var sigDigits = this.getMaximumSignificantDigits();\n var otherSigDigits = other.getMaximumSignificantDigits();\n return new Integer(sigDigits).compareTo(new Integer(otherSigDigits))\n};\nPrecisionModel.prototype.getScale = function getScale () {\n return this._scale\n};\nPrecisionModel.prototype.isFloating = function isFloating () {\n return this._modelType === PrecisionModel.FLOATING || this._modelType === PrecisionModel.FLOATING_SINGLE\n};\nPrecisionModel.prototype.getType = function getType () {\n return this._modelType\n};\nPrecisionModel.prototype.toString = function toString () {\n var description = 'UNKNOWN';\n if (this._modelType === PrecisionModel.FLOATING) {\n description = 'Floating';\n } else if (this._modelType === PrecisionModel.FLOATING_SINGLE) {\n description = 'Floating-Single';\n } else if (this._modelType === PrecisionModel.FIXED) {\n description = 'Fixed (Scale=' + this.getScale() + ')';\n }\n return description\n};\nPrecisionModel.prototype.makePrecise = function makePrecise () {\n if (typeof arguments[0] === 'number') {\n var val = arguments[0];\n if (Double.isNaN(val)) { return val }\n if (this._modelType === PrecisionModel.FLOATING_SINGLE) {\n var floatSingleVal = val;\n return floatSingleVal\n }\n if (this._modelType === PrecisionModel.FIXED) {\n return Math.round(val * this._scale) / this._scale\n }\n return val\n } else if (arguments[0] instanceof Coordinate) {\n var coord = arguments[0];\n if (this._modelType === PrecisionModel.FLOATING) { return null }\n coord.x = this.makePrecise(coord.x);\n coord.y = this.makePrecise(coord.y);\n }\n};\nPrecisionModel.prototype.getMaximumSignificantDigits = function getMaximumSignificantDigits () {\n var maxSigDigits = 16;\n if (this._modelType === PrecisionModel.FLOATING) {\n maxSigDigits = 16;\n } else if (this._modelType === PrecisionModel.FLOATING_SINGLE) {\n maxSigDigits = 6;\n } else if (this._modelType === PrecisionModel.FIXED) {\n maxSigDigits = 1 + Math.trunc(Math.ceil(Math.log(this.getScale()) / Math.log(10)));\n }\n return maxSigDigits\n};\nPrecisionModel.prototype.setScale = function setScale (scale) {\n this._scale = Math.abs(scale);\n};\nPrecisionModel.prototype.interfaces_ = function interfaces_ () {\n return [Serializable, Comparable]\n};\nPrecisionModel.prototype.getClass = function getClass () {\n return PrecisionModel\n};\nPrecisionModel.mostPrecise = function mostPrecise (pm1, pm2) {\n if (pm1.compareTo(pm2) >= 0) { return pm1 }\n return pm2\n};\nstaticAccessors$19.serialVersionUID.get = function () { return 7777263578777803835 };\nstaticAccessors$19.maximumPreciseValue.get = function () { return 9007199254740992.0 };\n\nObject.defineProperties( PrecisionModel, staticAccessors$19 );\n\nvar Type = function Type (name) {\n this._name = name || null;\n Type.nameToTypeMap.put(name, this);\n};\n\nvar staticAccessors$1$1 = { serialVersionUID: { configurable: true },nameToTypeMap: { configurable: true } };\nType.prototype.readResolve = function readResolve () {\n return Type.nameToTypeMap.get(this._name)\n};\nType.prototype.toString = function toString () {\n return this._name\n};\nType.prototype.interfaces_ = function interfaces_ () {\n return [Serializable]\n};\nType.prototype.getClass = function getClass () {\n return Type\n};\nstaticAccessors$1$1.serialVersionUID.get = function () { return -5528602631731589822 };\nstaticAccessors$1$1.nameToTypeMap.get = function () { return new HashMap() };\n\nObject.defineProperties( Type, staticAccessors$1$1 );\n\nPrecisionModel.Type = Type;\nPrecisionModel.FIXED = new Type('FIXED');\nPrecisionModel.FLOATING = new Type('FLOATING');\nPrecisionModel.FLOATING_SINGLE = new Type('FLOATING SINGLE');\n\nvar GeometryFactory = function GeometryFactory () {\n this._precisionModel = new PrecisionModel();\n this._SRID = 0;\n this._coordinateSequenceFactory = GeometryFactory.getDefaultCoordinateSequenceFactory();\n\n if (arguments.length === 0) {\n } else if (arguments.length === 1) {\n if (hasInterface(arguments[0], CoordinateSequenceFactory)) {\n this._coordinateSequenceFactory = arguments[0];\n } else if (arguments[0] instanceof PrecisionModel) {\n this._precisionModel = arguments[0];\n }\n } else if (arguments.length === 2) {\n this._precisionModel = arguments[0];\n this._SRID = arguments[1];\n } else if (arguments.length === 3) {\n this._precisionModel = arguments[0];\n this._SRID = arguments[1];\n this._coordinateSequenceFactory = arguments[2];\n }\n};\n\nvar staticAccessors$2 = { serialVersionUID: { configurable: true } };\nGeometryFactory.prototype.toGeometry = function toGeometry (envelope) {\n if (envelope.isNull()) {\n return this.createPoint(null)\n }\n if (envelope.getMinX() === envelope.getMaxX() && envelope.getMinY() === envelope.getMaxY()) {\n return this.createPoint(new Coordinate(envelope.getMinX(), envelope.getMinY()))\n }\n if (envelope.getMinX() === envelope.getMaxX() || envelope.getMinY() === envelope.getMaxY()) {\n return this.createLineString([new Coordinate(envelope.getMinX(), envelope.getMinY()), new Coordinate(envelope.getMaxX(), envelope.getMaxY())])\n }\n return this.createPolygon(this.createLinearRing([new Coordinate(envelope.getMinX(), envelope.getMinY()), new Coordinate(envelope.getMinX(), envelope.getMaxY()), new Coordinate(envelope.getMaxX(), envelope.getMaxY()), new Coordinate(envelope.getMaxX(), envelope.getMinY()), new Coordinate(envelope.getMinX(), envelope.getMinY())]), null)\n};\nGeometryFactory.prototype.createLineString = function createLineString (coordinates) {\n if (!coordinates) { return new LineString(this.getCoordinateSequenceFactory().create([]), this) }\n else if (coordinates instanceof Array) { return new LineString(this.getCoordinateSequenceFactory().create(coordinates), this) }\n else if (hasInterface(coordinates, CoordinateSequence)) { return new LineString(coordinates, this) }\n};\nGeometryFactory.prototype.createMultiLineString = function createMultiLineString () {\n if (arguments.length === 0) {\n return new MultiLineString(null, this)\n } else if (arguments.length === 1) {\n var lineStrings = arguments[0];\n return new MultiLineString(lineStrings, this)\n }\n};\nGeometryFactory.prototype.buildGeometry = function buildGeometry (geomList) {\n var geomClass = null;\n var isHeterogeneous = false;\n var hasGeometryCollection = false;\n for (var i = geomList.iterator(); i.hasNext();) {\n var geom = i.next();\n var partClass = geom.getClass();\n if (geomClass === null) {\n geomClass = partClass;\n }\n if (partClass !== geomClass) {\n isHeterogeneous = true;\n }\n if (geom.isGeometryCollectionOrDerived()) { hasGeometryCollection = true; }\n }\n if (geomClass === null) {\n return this.createGeometryCollection()\n }\n if (isHeterogeneous || hasGeometryCollection) {\n return this.createGeometryCollection(GeometryFactory.toGeometryArray(geomList))\n }\n var geom0 = geomList.iterator().next();\n var isCollection = geomList.size() > 1;\n if (isCollection) {\n if (geom0 instanceof Polygon) {\n return this.createMultiPolygon(GeometryFactory.toPolygonArray(geomList))\n } else if (geom0 instanceof LineString) {\n return this.createMultiLineString(GeometryFactory.toLineStringArray(geomList))\n } else if (geom0 instanceof Point) {\n return this.createMultiPoint(GeometryFactory.toPointArray(geomList))\n }\n Assert.shouldNeverReachHere('Unhandled class: ' + geom0.getClass().getName());\n }\n return geom0\n};\nGeometryFactory.prototype.createMultiPointFromCoords = function createMultiPointFromCoords (coordinates) {\n return this.createMultiPoint(coordinates !== null ? this.getCoordinateSequenceFactory().create(coordinates) : null)\n};\nGeometryFactory.prototype.createPoint = function createPoint () {\n if (arguments.length === 0) {\n return this.createPoint(this.getCoordinateSequenceFactory().create([]))\n } else if (arguments.length === 1) {\n if (arguments[0] instanceof Coordinate) {\n var coordinate = arguments[0];\n return this.createPoint(coordinate !== null ? this.getCoordinateSequenceFactory().create([coordinate]) : null)\n } else if (hasInterface(arguments[0], CoordinateSequence)) {\n var coordinates = arguments[0];\n return new Point(coordinates, this)\n }\n }\n};\nGeometryFactory.prototype.getCoordinateSequenceFactory = function getCoordinateSequenceFactory () {\n return this._coordinateSequenceFactory\n};\nGeometryFactory.prototype.createPolygon = function createPolygon () {\n if (arguments.length === 0) {\n return new Polygon(null, null, this)\n } else if (arguments.length === 1) {\n if (hasInterface(arguments[0], CoordinateSequence)) {\n var coordinates = arguments[0];\n return this.createPolygon(this.createLinearRing(coordinates))\n } else if (arguments[0] instanceof Array) {\n var coordinates$1 = arguments[0];\n return this.createPolygon(this.createLinearRing(coordinates$1))\n } else if (arguments[0] instanceof LinearRing) {\n var shell = arguments[0];\n return this.createPolygon(shell, null)\n }\n } else if (arguments.length === 2) {\n var shell$1 = arguments[0];\n var holes = arguments[1];\n return new Polygon(shell$1, holes, this)\n }\n};\nGeometryFactory.prototype.getSRID = function getSRID () {\n return this._SRID\n};\nGeometryFactory.prototype.createGeometryCollection = function createGeometryCollection () {\n if (arguments.length === 0) {\n return new GeometryCollection(null, this)\n } else if (arguments.length === 1) {\n var geometries = arguments[0];\n return new GeometryCollection(geometries, this)\n }\n};\nGeometryFactory.prototype.createGeometry = function createGeometry (g) {\n var editor = new GeometryEditor(this);\n return editor.edit(g, {\n edit: function () {\n if (arguments.length === 2) {\n var coordSeq = arguments[0];\n // const geometry = arguments[1]\n return this._coordinateSequenceFactory.create(coordSeq)\n }\n }\n })\n};\nGeometryFactory.prototype.getPrecisionModel = function getPrecisionModel () {\n return this._precisionModel\n};\nGeometryFactory.prototype.createLinearRing = function createLinearRing () {\n if (arguments.length === 0) {\n return this.createLinearRing(this.getCoordinateSequenceFactory().create([]))\n } else if (arguments.length === 1) {\n if (arguments[0] instanceof Array) {\n var coordinates = arguments[0];\n return this.createLinearRing(coordinates !== null ? this.getCoordinateSequenceFactory().create(coordinates) : null)\n } else if (hasInterface(arguments[0], CoordinateSequence)) {\n var coordinates$1 = arguments[0];\n return new LinearRing(coordinates$1, this)\n }\n }\n};\nGeometryFactory.prototype.createMultiPolygon = function createMultiPolygon () {\n if (arguments.length === 0) {\n return new MultiPolygon(null, this)\n } else if (arguments.length === 1) {\n var polygons = arguments[0];\n return new MultiPolygon(polygons, this)\n }\n};\nGeometryFactory.prototype.createMultiPoint = function createMultiPoint () {\n var this$1 = this;\n\n if (arguments.length === 0) {\n return new MultiPoint(null, this)\n } else if (arguments.length === 1) {\n if (arguments[0] instanceof Array) {\n var point = arguments[0];\n return new MultiPoint(point, this)\n } else if (arguments[0] instanceof Array) {\n var coordinates = arguments[0];\n return this.createMultiPoint(coordinates !== null ? this.getCoordinateSequenceFactory().create(coordinates) : null)\n } else if (hasInterface(arguments[0], CoordinateSequence)) {\n var coordinates$1 = arguments[0];\n if (coordinates$1 === null) {\n return this.createMultiPoint(new Array(0).fill(null))\n }\n var points = new Array(coordinates$1.size()).fill(null);\n for (var i = 0; i < coordinates$1.size(); i++) {\n var ptSeq = this$1.getCoordinateSequenceFactory().create(1, coordinates$1.getDimension());\n CoordinateSequences.copy(coordinates$1, i, ptSeq, 0, 1);\n points[i] = this$1.createPoint(ptSeq);\n }\n return this.createMultiPoint(points)\n }\n }\n};\nGeometryFactory.prototype.interfaces_ = function interfaces_ () {\n return [Serializable]\n};\nGeometryFactory.prototype.getClass = function getClass () {\n return GeometryFactory\n};\nGeometryFactory.toMultiPolygonArray = function toMultiPolygonArray (multiPolygons) {\n var multiPolygonArray = new Array(multiPolygons.size()).fill(null);\n return multiPolygons.toArray(multiPolygonArray)\n};\nGeometryFactory.toGeometryArray = function toGeometryArray (geometries) {\n if (geometries === null) { return null }\n var geometryArray = new Array(geometries.size()).fill(null);\n return geometries.toArray(geometryArray)\n};\nGeometryFactory.getDefaultCoordinateSequenceFactory = function getDefaultCoordinateSequenceFactory () {\n return CoordinateArraySequenceFactory.instance()\n};\nGeometryFactory.toMultiLineStringArray = function toMultiLineStringArray (multiLineStrings) {\n var multiLineStringArray = new Array(multiLineStrings.size()).fill(null);\n return multiLineStrings.toArray(multiLineStringArray)\n};\nGeometryFactory.toLineStringArray = function toLineStringArray (lineStrings) {\n var lineStringArray = new Array(lineStrings.size()).fill(null);\n return lineStrings.toArray(lineStringArray)\n};\nGeometryFactory.toMultiPointArray = function toMultiPointArray (multiPoints) {\n var multiPointArray = new Array(multiPoints.size()).fill(null);\n return multiPoints.toArray(multiPointArray)\n};\nGeometryFactory.toLinearRingArray = function toLinearRingArray (linearRings) {\n var linearRingArray = new Array(linearRings.size()).fill(null);\n return linearRings.toArray(linearRingArray)\n};\nGeometryFactory.toPointArray = function toPointArray (points) {\n var pointArray = new Array(points.size()).fill(null);\n return points.toArray(pointArray)\n};\nGeometryFactory.toPolygonArray = function toPolygonArray (polygons) {\n var polygonArray = new Array(polygons.size()).fill(null);\n return polygons.toArray(polygonArray)\n};\nGeometryFactory.createPointFromInternalCoord = function createPointFromInternalCoord (coord, exemplar) {\n exemplar.getPrecisionModel().makePrecise(coord);\n return exemplar.getFactory().createPoint(coord)\n};\nstaticAccessors$2.serialVersionUID.get = function () { return -6820524753094095635 };\n\nObject.defineProperties( GeometryFactory, staticAccessors$2 );\n\nvar geometryTypes = ['Point', 'MultiPoint', 'LineString', 'MultiLineString', 'Polygon', 'MultiPolygon'];\n\n/**\n * Class for reading and writing Well-Known Text.Create a new parser for GeoJSON\n * NOTE: Adapted from OpenLayers 2.11 implementation.\n */\n\n/**\n * Create a new parser for GeoJSON\n *\n * @param {GeometryFactory} geometryFactory\n * @return An instance of GeoJsonParser.\n * @constructor\n * @private\n */\nvar GeoJSONParser = function GeoJSONParser (geometryFactory) {\n this.geometryFactory = geometryFactory || new GeometryFactory();\n};\n/**\n * Deserialize a GeoJSON object and return the Geometry or Feature(Collection) with JSTS Geometries\n *\n * @param {}\n * A GeoJSON object.\n * @return {} A Geometry instance or object representing a Feature(Collection) with Geometry instances.\n * @private\n */\nGeoJSONParser.prototype.read = function read (json) {\n var obj;\n if (typeof json === 'string') {\n obj = JSON.parse(json);\n } else {\n obj = json;\n }\n\n var type = obj.type;\n\n if (!parse[type]) {\n throw new Error('Unknown GeoJSON type: ' + obj.type)\n }\n\n if (geometryTypes.indexOf(type) !== -1) {\n return parse[type].apply(this, [obj.coordinates])\n } else if (type === 'GeometryCollection') {\n return parse[type].apply(this, [obj.geometries])\n }\n\n // feature or feature collection\n return parse[type].apply(this, [obj])\n};\n\n/**\n * Serialize a Geometry object into GeoJSON\n *\n * @param {Geometry}\n * geometry A Geometry or array of Geometries.\n * @return {Object} A GeoJSON object represting the input Geometry/Geometries.\n * @private\n */\nGeoJSONParser.prototype.write = function write (geometry) {\n var type = geometry.getGeometryType();\n\n if (!extract[type]) {\n throw new Error('Geometry is not supported')\n }\n\n return extract[type].apply(this, [geometry])\n};\n\nvar parse = {\n /**\n * Parse a GeoJSON Feature object\n *\n * @param {Object}\n * obj Object to parse.\n *\n * @return {Object} Feature with geometry/bbox converted to JSTS Geometries.\n */\n Feature: function (obj) {\n var feature = {};\n\n // copy features\n for (var key in obj) {\n feature[key] = obj[key];\n }\n\n // parse geometry\n if (obj.geometry) {\n var type = obj.geometry.type;\n if (!parse[type]) {\n throw new Error('Unknown GeoJSON type: ' + obj.type)\n }\n feature.geometry = this.read(obj.geometry);\n }\n\n // bbox\n if (obj.bbox) {\n feature.bbox = parse.bbox.apply(this, [obj.bbox]);\n }\n\n return feature\n },\n\n /**\n * Parse a GeoJSON FeatureCollection object\n *\n * @param {Object}\n * obj Object to parse.\n *\n * @return {Object} FeatureCollection with geometry/bbox converted to JSTS Geometries.\n */\n FeatureCollection: function (obj) {\n var this$1 = this;\n\n var featureCollection = {};\n\n if (obj.features) {\n featureCollection.features = [];\n\n for (var i = 0; i < obj.features.length; ++i) {\n featureCollection.features.push(this$1.read(obj.features[i]));\n }\n }\n\n if (obj.bbox) {\n featureCollection.bbox = this.parse.bbox.apply(this, [obj.bbox]);\n }\n\n return featureCollection\n },\n\n /**\n * Convert the ordinates in an array to an array of Coordinates\n *\n * @param {Array}\n * array Array with {Number}s.\n *\n * @return {Array} Array with Coordinates.\n */\n coordinates: function (array) {\n var coordinates = [];\n for (var i = 0; i < array.length; ++i) {\n var sub = array[i];\n coordinates.push(new Coordinate(sub[0], sub[1]));\n }\n return coordinates\n },\n\n /**\n * Convert the bbox to a LinearRing\n *\n * @param {Array}\n * array Array with [xMin, yMin, xMax, yMax].\n *\n * @return {Array} Array with Coordinates.\n */\n bbox: function (array) {\n return this.geometryFactory.createLinearRing([\n new Coordinate(array[0], array[1]),\n new Coordinate(array[2], array[1]),\n new Coordinate(array[2], array[3]),\n new Coordinate(array[0], array[3]),\n new Coordinate(array[0], array[1])\n ])\n },\n\n /**\n * Convert an Array with ordinates to a Point\n *\n * @param {Array}\n * array Array with ordinates.\n *\n * @return {Point} Point.\n */\n Point: function (array) {\n var coordinate = new Coordinate(array[0], array[1]);\n return this.geometryFactory.createPoint(coordinate)\n },\n\n /**\n * Convert an Array with coordinates to a MultiPoint\n *\n * @param {Array}\n * array Array with coordinates.\n *\n * @return {MultiPoint} MultiPoint.\n */\n MultiPoint: function (array) {\n var this$1 = this;\n\n var points = [];\n for (var i = 0; i < array.length; ++i) {\n points.push(parse.Point.apply(this$1, [array[i]]));\n }\n return this.geometryFactory.createMultiPoint(points)\n },\n\n /**\n * Convert an Array with coordinates to a LineString\n *\n * @param {Array}\n * array Array with coordinates.\n *\n * @return {LineString} LineString.\n */\n LineString: function (array) {\n var coordinates = parse.coordinates.apply(this, [array]);\n return this.geometryFactory.createLineString(coordinates)\n },\n\n /**\n * Convert an Array with coordinates to a MultiLineString\n *\n * @param {Array}\n * array Array with coordinates.\n *\n * @return {MultiLineString} MultiLineString.\n */\n MultiLineString: function (array) {\n var this$1 = this;\n\n var lineStrings = [];\n for (var i = 0; i < array.length; ++i) {\n lineStrings.push(parse.LineString.apply(this$1, [array[i]]));\n }\n return this.geometryFactory.createMultiLineString(lineStrings)\n },\n\n /**\n * Convert an Array to a Polygon\n *\n * @param {Array}\n * array Array with shell and holes.\n *\n * @return {Polygon} Polygon.\n */\n Polygon: function (array) {\n var this$1 = this;\n\n var shellCoordinates = parse.coordinates.apply(this, [array[0]]);\n var shell = this.geometryFactory.createLinearRing(shellCoordinates);\n var holes = [];\n for (var i = 1; i < array.length; ++i) {\n var hole = array[i];\n var coordinates = parse.coordinates.apply(this$1, [hole]);\n var linearRing = this$1.geometryFactory.createLinearRing(coordinates);\n holes.push(linearRing);\n }\n return this.geometryFactory.createPolygon(shell, holes)\n },\n\n /**\n * Convert an Array to a MultiPolygon\n *\n * @param {Array}\n * array Array of arrays with shell and rings.\n *\n * @return {MultiPolygon} MultiPolygon.\n */\n MultiPolygon: function (array) {\n var this$1 = this;\n\n var polygons = [];\n for (var i = 0; i < array.length; ++i) {\n var polygon = array[i];\n polygons.push(parse.Polygon.apply(this$1, [polygon]));\n }\n return this.geometryFactory.createMultiPolygon(polygons)\n },\n\n /**\n * Convert an Array to a GeometryCollection\n *\n * @param {Array}\n * array Array of GeoJSON geometries.\n *\n * @return {GeometryCollection} GeometryCollection.\n */\n GeometryCollection: function (array) {\n var this$1 = this;\n\n var geometries = [];\n for (var i = 0; i < array.length; ++i) {\n var geometry = array[i];\n geometries.push(this$1.read(geometry));\n }\n return this.geometryFactory.createGeometryCollection(geometries)\n }\n};\n\nvar extract = {\n /**\n * Convert a Coordinate to an Array\n *\n * @param {Coordinate}\n * coordinate Coordinate to convert.\n *\n * @return {Array} Array of ordinates.\n */\n coordinate: function (coordinate) {\n return [coordinate.x, coordinate.y]\n },\n\n /**\n * Convert a Point to a GeoJSON object\n *\n * @param {Point}\n * point Point to convert.\n *\n * @return {Array} Array of 2 ordinates (paired to a coordinate).\n */\n Point: function (point) {\n var array = extract.coordinate.apply(this, [point.getCoordinate()]);\n return {\n type: 'Point',\n coordinates: array\n }\n },\n\n /**\n * Convert a MultiPoint to a GeoJSON object\n *\n * @param {MultiPoint}\n * multipoint MultiPoint to convert.\n *\n * @return {Array} Array of coordinates.\n */\n MultiPoint: function (multipoint) {\n var this$1 = this;\n\n var array = [];\n for (var i = 0; i < multipoint._geometries.length; ++i) {\n var point = multipoint._geometries[i];\n var geoJson = extract.Point.apply(this$1, [point]);\n array.push(geoJson.coordinates);\n }\n return {\n type: 'MultiPoint',\n coordinates: array\n }\n },\n\n /**\n * Convert a LineString to a GeoJSON object\n *\n * @param {LineString}\n * linestring LineString to convert.\n *\n * @return {Array} Array of coordinates.\n */\n LineString: function (linestring) {\n var this$1 = this;\n\n var array = [];\n var coordinates = linestring.getCoordinates();\n for (var i = 0; i < coordinates.length; ++i) {\n var coordinate = coordinates[i];\n array.push(extract.coordinate.apply(this$1, [coordinate]));\n }\n return {\n type: 'LineString',\n coordinates: array\n }\n },\n\n /**\n * Convert a MultiLineString to a GeoJSON object\n *\n * @param {MultiLineString}\n * multilinestring MultiLineString to convert.\n *\n * @return {Array} Array of Array of coordinates.\n */\n MultiLineString: function (multilinestring) {\n var this$1 = this;\n\n var array = [];\n for (var i = 0; i < multilinestring._geometries.length; ++i) {\n var linestring = multilinestring._geometries[i];\n var geoJson = extract.LineString.apply(this$1, [linestring]);\n array.push(geoJson.coordinates);\n }\n return {\n type: 'MultiLineString',\n coordinates: array\n }\n },\n\n /**\n * Convert a Polygon to a GeoJSON object\n *\n * @param {Polygon}\n * polygon Polygon to convert.\n *\n * @return {Array} Array with shell, holes.\n */\n Polygon: function (polygon) {\n var this$1 = this;\n\n var array = [];\n var shellGeoJson = extract.LineString.apply(this, [polygon._shell]);\n array.push(shellGeoJson.coordinates);\n for (var i = 0; i < polygon._holes.length; ++i) {\n var hole = polygon._holes[i];\n var holeGeoJson = extract.LineString.apply(this$1, [hole]);\n array.push(holeGeoJson.coordinates);\n }\n return {\n type: 'Polygon',\n coordinates: array\n }\n },\n\n /**\n * Convert a MultiPolygon to a GeoJSON object\n *\n * @param {MultiPolygon}\n * multipolygon MultiPolygon to convert.\n *\n * @return {Array} Array of polygons.\n */\n MultiPolygon: function (multipolygon) {\n var this$1 = this;\n\n var array = [];\n for (var i = 0; i < multipolygon._geometries.length; ++i) {\n var polygon = multipolygon._geometries[i];\n var geoJson = extract.Polygon.apply(this$1, [polygon]);\n array.push(geoJson.coordinates);\n }\n return {\n type: 'MultiPolygon',\n coordinates: array\n }\n },\n\n /**\n * Convert a GeometryCollection to a GeoJSON object\n *\n * @param {GeometryCollection}\n * collection GeometryCollection to convert.\n *\n * @return {Array} Array of geometries.\n */\n GeometryCollection: function (collection) {\n var this$1 = this;\n\n var array = [];\n for (var i = 0; i < collection._geometries.length; ++i) {\n var geometry = collection._geometries[i];\n var type = geometry.getGeometryType();\n array.push(extract[type].apply(this$1, [geometry]));\n }\n return {\n type: 'GeometryCollection',\n geometries: array\n }\n }\n};\n\n/**\n * Converts a geometry in GeoJSON to a {@link Geometry}.\n */\n\n/**\n * A GeoJSONReader is parameterized by a GeometryFactory,\n * to allow it to create Geometry objects of the appropriate\n * implementation. In particular, the GeometryFactory determines\n * the PrecisionModel and SRID that is used.\n *\n * @param {GeometryFactory} geometryFactory\n * @constructor\n */\nvar GeoJSONReader = function GeoJSONReader (geometryFactory) {\n this.geometryFactory = geometryFactory || new GeometryFactory();\n this.precisionModel = this.geometryFactory.getPrecisionModel();\n this.parser = new GeoJSONParser(this.geometryFactory);\n};\n/**\n * Reads a GeoJSON representation of a {@link Geometry}\n *\n * Will also parse GeoJSON Features/FeatureCollections as custom objects.\n *\n * @param {Object|String} geoJson a GeoJSON Object or String.\n * @return {Geometry|Object} a Geometry or Feature/FeatureCollection representation.\n * @memberof GeoJSONReader\n */\nGeoJSONReader.prototype.read = function read (geoJson) {\n var geometry = this.parser.read(geoJson);\n\n if (this.precisionModel.getType() === PrecisionModel.FIXED) {\n this.reducePrecision(geometry);\n }\n\n return geometry\n};\n\n// NOTE: this is a hack\nGeoJSONReader.prototype.reducePrecision = function reducePrecision (geometry) {\n var this$1 = this;\n\n var i, len;\n\n if (geometry.coordinate) {\n this.precisionModel.makePrecise(geometry.coordinate);\n } else if (geometry.points) {\n for (i = 0, len = geometry.points.length; i < len; i++) {\n this$1.precisionModel.makePrecise(geometry.points[i]);\n }\n } else if (geometry.geometries) {\n for (i = 0, len = geometry.geometries.length; i < len; i++) {\n this$1.reducePrecision(geometry.geometries[i]);\n }\n }\n};\n\n/**\n * @module GeoJSONWriter\n */\n\n/**\n * Writes the GeoJSON representation of a {@link Geometry}. The\n * The GeoJSON format is defined here.\n */\n\n/**\n * The GeoJSONWriter outputs coordinates rounded to the precision\n * model. Only the maximum number of decimal places necessary to represent the\n * ordinates to the required precision will be output.\n *\n * @param {GeometryFactory} geometryFactory\n * @constructor\n */\nvar GeoJSONWriter = function GeoJSONWriter () {\n this.parser = new GeoJSONParser(this.geometryFactory);\n};\n/**\n * Converts a Geometry to its GeoJSON representation.\n *\n * @param {Geometry}\n * geometry a Geometry to process.\n * @return {Object} The GeoJSON representation of the Geometry.\n * @memberof GeoJSONWriter\n */\nGeoJSONWriter.prototype.write = function write (geometry) {\n return this.parser.write(geometry)\n};\n\n/* eslint-disable no-undef */\n\n// io\n\nvar Position = function Position () {};\n\nvar staticAccessors$20 = { ON: { configurable: true },LEFT: { configurable: true },RIGHT: { configurable: true } };\n\nPosition.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nPosition.prototype.getClass = function getClass () {\n return Position\n};\nPosition.opposite = function opposite (position) {\n if (position === Position.LEFT) { return Position.RIGHT }\n if (position === Position.RIGHT) { return Position.LEFT }\n return position\n};\nstaticAccessors$20.ON.get = function () { return 0 };\nstaticAccessors$20.LEFT.get = function () { return 1 };\nstaticAccessors$20.RIGHT.get = function () { return 2 };\n\nObject.defineProperties( Position, staticAccessors$20 );\n\n/**\n * @param {string=} message Optional message\n * @extends {Error}\n * @constructor\n * @private\n */\nfunction EmptyStackException (message) {\n this.message = message || '';\n}\nEmptyStackException.prototype = new Error();\n\n/**\n * @type {string}\n */\nEmptyStackException.prototype.name = 'EmptyStackException';\n\n/**\n * @see http://download.oracle.com/javase/6/docs/api/java/util/Stack.html\n *\n * @extends {List}\n * @constructor\n * @private\n */\nfunction Stack () {\n /**\n * @type {Array}\n * @private\n */\n this.array_ = [];\n}\nStack.prototype = new List();\n\n/**\n * @override\n */\nStack.prototype.add = function (e) {\n this.array_.push(e);\n return true\n};\n\n/**\n * @override\n */\nStack.prototype.get = function (index) {\n if (index < 0 || index >= this.size()) {\n throw new Error()\n }\n\n return this.array_[index]\n};\n\n/**\n * Pushes an item onto the top of this stack.\n * @param {Object} e\n * @return {Object}\n */\nStack.prototype.push = function (e) {\n this.array_.push(e);\n return e\n};\n\n/**\n * Pushes an item onto the top of this stack.\n * @param {Object} e\n * @return {Object}\n */\nStack.prototype.pop = function (e) {\n if (this.array_.length === 0) {\n throw new EmptyStackException()\n }\n\n return this.array_.pop()\n};\n\n/**\n * Looks at the object at the top of this stack without removing it from the\n * stack.\n * @return {Object}\n */\nStack.prototype.peek = function () {\n if (this.array_.length === 0) {\n throw new EmptyStackException()\n }\n\n return this.array_[this.array_.length - 1]\n};\n\n/**\n * Tests if this stack is empty.\n * @return {boolean} true if and only if this stack contains no items; false\n * otherwise.\n */\nStack.prototype.empty = function () {\n if (this.array_.length === 0) {\n return true\n } else {\n return false\n }\n};\n\n/**\n * @return {boolean}\n */\nStack.prototype.isEmpty = function () {\n return this.empty()\n};\n\n/**\n * Returns the 1-based position where an object is on this stack. If the object\n * o occurs as an item in this stack, this method returns the distance from the\n * top of the stack of the occurrence nearest the top of the stack; the topmost\n * item on the stack is considered to be at distance 1. The equals method is\n * used to compare o to the items in this stack.\n *\n * NOTE: does not currently actually use equals. (=== is used)\n *\n * @param {Object} o\n * @return {number} the 1-based position from the top of the stack where the\n * object is located; the return value -1 indicates that the object is\n * not on the stack.\n */\nStack.prototype.search = function (o) {\n return this.array_.indexOf(o)\n};\n\n/**\n * @return {number}\n * @export\n */\nStack.prototype.size = function () {\n return this.array_.length\n};\n\n/**\n * @return {Array}\n */\nStack.prototype.toArray = function () {\n var this$1 = this;\n\n var array = [];\n\n for (var i = 0, len = this.array_.length; i < len; i++) {\n array.push(this$1.array_[i]);\n }\n\n return array\n};\n\nvar RightmostEdgeFinder = function RightmostEdgeFinder () {\n this._minIndex = -1;\n this._minCoord = null;\n this._minDe = null;\n this._orientedDe = null;\n};\nRightmostEdgeFinder.prototype.getCoordinate = function getCoordinate () {\n return this._minCoord\n};\nRightmostEdgeFinder.prototype.getRightmostSide = function getRightmostSide (de, index) {\n var side = this.getRightmostSideOfSegment(de, index);\n if (side < 0) { side = this.getRightmostSideOfSegment(de, index - 1); }\n if (side < 0) {\n this._minCoord = null;\n this.checkForRightmostCoordinate(de);\n }\n return side\n};\nRightmostEdgeFinder.prototype.findRightmostEdgeAtVertex = function findRightmostEdgeAtVertex () {\n var pts = this._minDe.getEdge().getCoordinates();\n Assert.isTrue(this._minIndex > 0 && this._minIndex < pts.length, 'rightmost point expected to be interior vertex of edge');\n var pPrev = pts[this._minIndex - 1];\n var pNext = pts[this._minIndex + 1];\n var orientation = CGAlgorithms.computeOrientation(this._minCoord, pNext, pPrev);\n var usePrev = false;\n if (pPrev.y < this._minCoord.y && pNext.y < this._minCoord.y && orientation === CGAlgorithms.COUNTERCLOCKWISE) {\n usePrev = true;\n } else if (pPrev.y > this._minCoord.y && pNext.y > this._minCoord.y && orientation === CGAlgorithms.CLOCKWISE) {\n usePrev = true;\n }\n if (usePrev) {\n this._minIndex = this._minIndex - 1;\n }\n};\nRightmostEdgeFinder.prototype.getRightmostSideOfSegment = function getRightmostSideOfSegment (de, i) {\n var e = de.getEdge();\n var coord = e.getCoordinates();\n if (i < 0 || i + 1 >= coord.length) { return -1 }\n if (coord[i].y === coord[i + 1].y) { return -1 }\n var pos = Position.LEFT;\n if (coord[i].y < coord[i + 1].y) { pos = Position.RIGHT; }\n return pos\n};\nRightmostEdgeFinder.prototype.getEdge = function getEdge () {\n return this._orientedDe\n};\nRightmostEdgeFinder.prototype.checkForRightmostCoordinate = function checkForRightmostCoordinate (de) {\n var this$1 = this;\n\n var coord = de.getEdge().getCoordinates();\n for (var i = 0; i < coord.length - 1; i++) {\n if (this$1._minCoord === null || coord[i].x > this$1._minCoord.x) {\n this$1._minDe = de;\n this$1._minIndex = i;\n this$1._minCoord = coord[i];\n }\n }\n};\nRightmostEdgeFinder.prototype.findRightmostEdgeAtNode = function findRightmostEdgeAtNode () {\n var node = this._minDe.getNode();\n var star = node.getEdges();\n this._minDe = star.getRightmostEdge();\n if (!this._minDe.isForward()) {\n this._minDe = this._minDe.getSym();\n this._minIndex = this._minDe.getEdge().getCoordinates().length - 1;\n }\n};\nRightmostEdgeFinder.prototype.findEdge = function findEdge (dirEdgeList) {\n var this$1 = this;\n\n for (var i = dirEdgeList.iterator(); i.hasNext();) {\n var de = i.next();\n if (!de.isForward()) { continue }\n this$1.checkForRightmostCoordinate(de);\n }\n Assert.isTrue(this._minIndex !== 0 || this._minCoord.equals(this._minDe.getCoordinate()), 'inconsistency in rightmost processing');\n if (this._minIndex === 0) {\n this.findRightmostEdgeAtNode();\n } else {\n this.findRightmostEdgeAtVertex();\n }\n this._orientedDe = this._minDe;\n var rightmostSide = this.getRightmostSide(this._minDe, this._minIndex);\n if (rightmostSide === Position.LEFT) {\n this._orientedDe = this._minDe.getSym();\n }\n};\nRightmostEdgeFinder.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nRightmostEdgeFinder.prototype.getClass = function getClass () {\n return RightmostEdgeFinder\n};\n\nvar TopologyException = (function (RuntimeException$$1) {\n function TopologyException (msg, pt) {\n RuntimeException$$1.call(this, TopologyException.msgWithCoord(msg, pt));\n this.pt = pt ? new Coordinate(pt) : null;\n this.name = 'TopologyException';\n }\n\n if ( RuntimeException$$1 ) TopologyException.__proto__ = RuntimeException$$1;\n TopologyException.prototype = Object.create( RuntimeException$$1 && RuntimeException$$1.prototype );\n TopologyException.prototype.constructor = TopologyException;\n TopologyException.prototype.getCoordinate = function getCoordinate () {\n return this.pt\n };\n TopologyException.prototype.interfaces_ = function interfaces_ () {\n return []\n };\n TopologyException.prototype.getClass = function getClass () {\n return TopologyException\n };\n TopologyException.msgWithCoord = function msgWithCoord (msg, pt) {\n if (!pt) { return msg + ' [ ' + pt + ' ]' }\n return msg\n };\n\n return TopologyException;\n}(RuntimeException));\n\nvar LinkedList = function LinkedList () {\n this.array_ = [];\n};\nLinkedList.prototype.addLast = function addLast (e) {\n this.array_.push(e);\n};\nLinkedList.prototype.removeFirst = function removeFirst () {\n return this.array_.shift()\n};\nLinkedList.prototype.isEmpty = function isEmpty () {\n return this.array_.length === 0\n};\n\nvar BufferSubgraph = function BufferSubgraph () {\n this._finder = null;\n this._dirEdgeList = new ArrayList();\n this._nodes = new ArrayList();\n this._rightMostCoord = null;\n this._env = null;\n this._finder = new RightmostEdgeFinder();\n};\nBufferSubgraph.prototype.clearVisitedEdges = function clearVisitedEdges () {\n for (var it = this._dirEdgeList.iterator(); it.hasNext();) {\n var de = it.next();\n de.setVisited(false);\n }\n};\nBufferSubgraph.prototype.getRightmostCoordinate = function getRightmostCoordinate () {\n return this._rightMostCoord\n};\nBufferSubgraph.prototype.computeNodeDepth = function computeNodeDepth (n) {\n var this$1 = this;\n\n var startEdge = null;\n for (var i = n.getEdges().iterator(); i.hasNext();) {\n var de = i.next();\n if (de.isVisited() || de.getSym().isVisited()) {\n startEdge = de;\n break\n }\n }\n if (startEdge === null) { throw new TopologyException('unable to find edge to compute depths at ' + n.getCoordinate()) }\n n.getEdges().computeDepths(startEdge);\n for (var i$1 = n.getEdges().iterator(); i$1.hasNext();) {\n var de$1 = i$1.next();\n de$1.setVisited(true);\n this$1.copySymDepths(de$1);\n }\n};\nBufferSubgraph.prototype.computeDepth = function computeDepth (outsideDepth) {\n this.clearVisitedEdges();\n var de = this._finder.getEdge();\n // const n = de.getNode()\n // const label = de.getLabel()\n de.setEdgeDepths(Position.RIGHT, outsideDepth);\n this.copySymDepths(de);\n this.computeDepths(de);\n};\nBufferSubgraph.prototype.create = function create (node) {\n this.addReachable(node);\n this._finder.findEdge(this._dirEdgeList);\n this._rightMostCoord = this._finder.getCoordinate();\n};\nBufferSubgraph.prototype.findResultEdges = function findResultEdges () {\n for (var it = this._dirEdgeList.iterator(); it.hasNext();) {\n var de = it.next();\n if (de.getDepth(Position.RIGHT) >= 1 && de.getDepth(Position.LEFT) <= 0 && !de.isInteriorAreaEdge()) {\n de.setInResult(true);\n }\n }\n};\nBufferSubgraph.prototype.computeDepths = function computeDepths (startEdge) {\n var this$1 = this;\n\n var nodesVisited = new HashSet();\n var nodeQueue = new LinkedList();\n var startNode = startEdge.getNode();\n nodeQueue.addLast(startNode);\n nodesVisited.add(startNode);\n startEdge.setVisited(true);\n while (!nodeQueue.isEmpty()) {\n var n = nodeQueue.removeFirst();\n nodesVisited.add(n);\n this$1.computeNodeDepth(n);\n for (var i = n.getEdges().iterator(); i.hasNext();) {\n var de = i.next();\n var sym = de.getSym();\n if (sym.isVisited()) { continue }\n var adjNode = sym.getNode();\n if (!nodesVisited.contains(adjNode)) {\n nodeQueue.addLast(adjNode);\n nodesVisited.add(adjNode);\n }\n }\n }\n};\nBufferSubgraph.prototype.compareTo = function compareTo (o) {\n var graph = o;\n if (this._rightMostCoord.x < graph._rightMostCoord.x) {\n return -1\n }\n if (this._rightMostCoord.x > graph._rightMostCoord.x) {\n return 1\n }\n return 0\n};\nBufferSubgraph.prototype.getEnvelope = function getEnvelope () {\n if (this._env === null) {\n var edgeEnv = new Envelope();\n for (var it = this._dirEdgeList.iterator(); it.hasNext();) {\n var dirEdge = it.next();\n var pts = dirEdge.getEdge().getCoordinates();\n for (var i = 0; i < pts.length - 1; i++) {\n edgeEnv.expandToInclude(pts[i]);\n }\n }\n this._env = edgeEnv;\n }\n return this._env\n};\nBufferSubgraph.prototype.addReachable = function addReachable (startNode) {\n var this$1 = this;\n\n var nodeStack = new Stack();\n nodeStack.add(startNode);\n while (!nodeStack.empty()) {\n var node = nodeStack.pop();\n this$1.add(node, nodeStack);\n }\n};\nBufferSubgraph.prototype.copySymDepths = function copySymDepths (de) {\n var sym = de.getSym();\n sym.setDepth(Position.LEFT, de.getDepth(Position.RIGHT));\n sym.setDepth(Position.RIGHT, de.getDepth(Position.LEFT));\n};\nBufferSubgraph.prototype.add = function add (node, nodeStack) {\n var this$1 = this;\n\n node.setVisited(true);\n this._nodes.add(node);\n for (var i = node.getEdges().iterator(); i.hasNext();) {\n var de = i.next();\n this$1._dirEdgeList.add(de);\n var sym = de.getSym();\n var symNode = sym.getNode();\n if (!symNode.isVisited()) { nodeStack.push(symNode); }\n }\n};\nBufferSubgraph.prototype.getNodes = function getNodes () {\n return this._nodes\n};\nBufferSubgraph.prototype.getDirectedEdges = function getDirectedEdges () {\n return this._dirEdgeList\n};\nBufferSubgraph.prototype.interfaces_ = function interfaces_ () {\n return [Comparable]\n};\nBufferSubgraph.prototype.getClass = function getClass () {\n return BufferSubgraph\n};\n\nvar TopologyLocation = function TopologyLocation () {\n var this$1 = this;\n\n this.location = null;\n if (arguments.length === 1) {\n if (arguments[0] instanceof Array) {\n var location = arguments[0];\n this.init(location.length);\n } else if (Number.isInteger(arguments[0])) {\n var on = arguments[0];\n this.init(1);\n this.location[Position.ON] = on;\n } else if (arguments[0] instanceof TopologyLocation) {\n var gl = arguments[0];\n this.init(gl.location.length);\n if (gl !== null) {\n for (var i = 0; i < this.location.length; i++) {\n this$1.location[i] = gl.location[i];\n }\n }\n }\n } else if (arguments.length === 3) {\n var on$1 = arguments[0];\n var left = arguments[1];\n var right = arguments[2];\n this.init(3);\n this.location[Position.ON] = on$1;\n this.location[Position.LEFT] = left;\n this.location[Position.RIGHT] = right;\n }\n};\nTopologyLocation.prototype.setAllLocations = function setAllLocations (locValue) {\n var this$1 = this;\n\n for (var i = 0; i < this.location.length; i++) {\n this$1.location[i] = locValue;\n }\n};\nTopologyLocation.prototype.isNull = function isNull () {\n var this$1 = this;\n\n for (var i = 0; i < this.location.length; i++) {\n if (this$1.location[i] !== Location.NONE) { return false }\n }\n return true\n};\nTopologyLocation.prototype.setAllLocationsIfNull = function setAllLocationsIfNull (locValue) {\n var this$1 = this;\n\n for (var i = 0; i < this.location.length; i++) {\n if (this$1.location[i] === Location.NONE) { this$1.location[i] = locValue; }\n }\n};\nTopologyLocation.prototype.isLine = function isLine () {\n return this.location.length === 1\n};\nTopologyLocation.prototype.merge = function merge (gl) {\n var this$1 = this;\n\n if (gl.location.length > this.location.length) {\n var newLoc = new Array(3).fill(null);\n newLoc[Position.ON] = this.location[Position.ON];\n newLoc[Position.LEFT] = Location.NONE;\n newLoc[Position.RIGHT] = Location.NONE;\n this.location = newLoc;\n }\n for (var i = 0; i < this.location.length; i++) {\n if (this$1.location[i] === Location.NONE && i < gl.location.length) { this$1.location[i] = gl.location[i]; }\n }\n};\nTopologyLocation.prototype.getLocations = function getLocations () {\n return this.location\n};\nTopologyLocation.prototype.flip = function flip () {\n if (this.location.length <= 1) { return null }\n var temp = this.location[Position.LEFT];\n this.location[Position.LEFT] = this.location[Position.RIGHT];\n this.location[Position.RIGHT] = temp;\n};\nTopologyLocation.prototype.toString = function toString () {\n var buf = new StringBuffer();\n if (this.location.length > 1) { buf.append(Location.toLocationSymbol(this.location[Position.LEFT])); }\n buf.append(Location.toLocationSymbol(this.location[Position.ON]));\n if (this.location.length > 1) { buf.append(Location.toLocationSymbol(this.location[Position.RIGHT])); }\n return buf.toString()\n};\nTopologyLocation.prototype.setLocations = function setLocations (on, left, right) {\n this.location[Position.ON] = on;\n this.location[Position.LEFT] = left;\n this.location[Position.RIGHT] = right;\n};\nTopologyLocation.prototype.get = function get (posIndex) {\n if (posIndex < this.location.length) { return this.location[posIndex] }\n return Location.NONE\n};\nTopologyLocation.prototype.isArea = function isArea () {\n return this.location.length > 1\n};\nTopologyLocation.prototype.isAnyNull = function isAnyNull () {\n var this$1 = this;\n\n for (var i = 0; i < this.location.length; i++) {\n if (this$1.location[i] === Location.NONE) { return true }\n }\n return false\n};\nTopologyLocation.prototype.setLocation = function setLocation () {\n if (arguments.length === 1) {\n var locValue = arguments[0];\n this.setLocation(Position.ON, locValue);\n } else if (arguments.length === 2) {\n var locIndex = arguments[0];\n var locValue$1 = arguments[1];\n this.location[locIndex] = locValue$1;\n }\n};\nTopologyLocation.prototype.init = function init (size) {\n this.location = new Array(size).fill(null);\n this.setAllLocations(Location.NONE);\n};\nTopologyLocation.prototype.isEqualOnSide = function isEqualOnSide (le, locIndex) {\n return this.location[locIndex] === le.location[locIndex]\n};\nTopologyLocation.prototype.allPositionsEqual = function allPositionsEqual (loc) {\n var this$1 = this;\n\n for (var i = 0; i < this.location.length; i++) {\n if (this$1.location[i] !== loc) { return false }\n }\n return true\n};\nTopologyLocation.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nTopologyLocation.prototype.getClass = function getClass () {\n return TopologyLocation\n};\n\nvar Label = function Label () {\n this.elt = new Array(2).fill(null);\n if (arguments.length === 1) {\n if (Number.isInteger(arguments[0])) {\n var onLoc = arguments[0];\n this.elt[0] = new TopologyLocation(onLoc);\n this.elt[1] = new TopologyLocation(onLoc);\n } else if (arguments[0] instanceof Label) {\n var lbl = arguments[0];\n this.elt[0] = new TopologyLocation(lbl.elt[0]);\n this.elt[1] = new TopologyLocation(lbl.elt[1]);\n }\n } else if (arguments.length === 2) {\n var geomIndex = arguments[0];\n var onLoc$1 = arguments[1];\n this.elt[0] = new TopologyLocation(Location.NONE);\n this.elt[1] = new TopologyLocation(Location.NONE);\n this.elt[geomIndex].setLocation(onLoc$1);\n } else if (arguments.length === 3) {\n var onLoc$2 = arguments[0];\n var leftLoc = arguments[1];\n var rightLoc = arguments[2];\n this.elt[0] = new TopologyLocation(onLoc$2, leftLoc, rightLoc);\n this.elt[1] = new TopologyLocation(onLoc$2, leftLoc, rightLoc);\n } else if (arguments.length === 4) {\n var geomIndex$1 = arguments[0];\n var onLoc$3 = arguments[1];\n var leftLoc$1 = arguments[2];\n var rightLoc$1 = arguments[3];\n this.elt[0] = new TopologyLocation(Location.NONE, Location.NONE, Location.NONE);\n this.elt[1] = new TopologyLocation(Location.NONE, Location.NONE, Location.NONE);\n this.elt[geomIndex$1].setLocations(onLoc$3, leftLoc$1, rightLoc$1);\n }\n};\nLabel.prototype.getGeometryCount = function getGeometryCount () {\n var count = 0;\n if (!this.elt[0].isNull()) { count++; }\n if (!this.elt[1].isNull()) { count++; }\n return count\n};\nLabel.prototype.setAllLocations = function setAllLocations (geomIndex, location) {\n this.elt[geomIndex].setAllLocations(location);\n};\nLabel.prototype.isNull = function isNull (geomIndex) {\n return this.elt[geomIndex].isNull()\n};\nLabel.prototype.setAllLocationsIfNull = function setAllLocationsIfNull () {\n if (arguments.length === 1) {\n var location = arguments[0];\n this.setAllLocationsIfNull(0, location);\n this.setAllLocationsIfNull(1, location);\n } else if (arguments.length === 2) {\n var geomIndex = arguments[0];\n var location$1 = arguments[1];\n this.elt[geomIndex].setAllLocationsIfNull(location$1);\n }\n};\nLabel.prototype.isLine = function isLine (geomIndex) {\n return this.elt[geomIndex].isLine()\n};\nLabel.prototype.merge = function merge (lbl) {\n var this$1 = this;\n\n for (var i = 0; i < 2; i++) {\n if (this$1.elt[i] === null && lbl.elt[i] !== null) {\n this$1.elt[i] = new TopologyLocation(lbl.elt[i]);\n } else {\n this$1.elt[i].merge(lbl.elt[i]);\n }\n }\n};\nLabel.prototype.flip = function flip () {\n this.elt[0].flip();\n this.elt[1].flip();\n};\nLabel.prototype.getLocation = function getLocation () {\n if (arguments.length === 1) {\n var geomIndex = arguments[0];\n return this.elt[geomIndex].get(Position.ON)\n } else if (arguments.length === 2) {\n var geomIndex$1 = arguments[0];\n var posIndex = arguments[1];\n return this.elt[geomIndex$1].get(posIndex)\n }\n};\nLabel.prototype.toString = function toString () {\n var buf = new StringBuffer();\n if (this.elt[0] !== null) {\n buf.append('A:');\n buf.append(this.elt[0].toString());\n }\n if (this.elt[1] !== null) {\n buf.append(' B:');\n buf.append(this.elt[1].toString());\n }\n return buf.toString()\n};\nLabel.prototype.isArea = function isArea () {\n if (arguments.length === 0) {\n return this.elt[0].isArea() || this.elt[1].isArea()\n } else if (arguments.length === 1) {\n var geomIndex = arguments[0];\n return this.elt[geomIndex].isArea()\n }\n};\nLabel.prototype.isAnyNull = function isAnyNull (geomIndex) {\n return this.elt[geomIndex].isAnyNull()\n};\nLabel.prototype.setLocation = function setLocation () {\n if (arguments.length === 2) {\n var geomIndex = arguments[0];\n var location = arguments[1];\n this.elt[geomIndex].setLocation(Position.ON, location);\n } else if (arguments.length === 3) {\n var geomIndex$1 = arguments[0];\n var posIndex = arguments[1];\n var location$1 = arguments[2];\n this.elt[geomIndex$1].setLocation(posIndex, location$1);\n }\n};\nLabel.prototype.isEqualOnSide = function isEqualOnSide (lbl, side) {\n return this.elt[0].isEqualOnSide(lbl.elt[0], side) && this.elt[1].isEqualOnSide(lbl.elt[1], side)\n};\nLabel.prototype.allPositionsEqual = function allPositionsEqual (geomIndex, loc) {\n return this.elt[geomIndex].allPositionsEqual(loc)\n};\nLabel.prototype.toLine = function toLine (geomIndex) {\n if (this.elt[geomIndex].isArea()) { this.elt[geomIndex] = new TopologyLocation(this.elt[geomIndex].location[0]); }\n};\nLabel.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nLabel.prototype.getClass = function getClass () {\n return Label\n};\nLabel.toLineLabel = function toLineLabel (label) {\n var lineLabel = new Label(Location.NONE);\n for (var i = 0; i < 2; i++) {\n lineLabel.setLocation(i, label.getLocation(i));\n }\n return lineLabel\n};\n\nvar EdgeRing = function EdgeRing () {\n this._startDe = null;\n this._maxNodeDegree = -1;\n this._edges = new ArrayList();\n this._pts = new ArrayList();\n this._label = new Label(Location.NONE);\n this._ring = null;\n this._isHole = null;\n this._shell = null;\n this._holes = new ArrayList();\n this._geometryFactory = null;\n var start = arguments[0];\n var geometryFactory = arguments[1];\n this._geometryFactory = geometryFactory;\n this.computePoints(start);\n this.computeRing();\n};\nEdgeRing.prototype.computeRing = function computeRing () {\n var this$1 = this;\n\n if (this._ring !== null) { return null }\n var coord = new Array(this._pts.size()).fill(null);\n for (var i = 0; i < this._pts.size(); i++) {\n coord[i] = this$1._pts.get(i);\n }\n this._ring = this._geometryFactory.createLinearRing(coord);\n this._isHole = CGAlgorithms.isCCW(this._ring.getCoordinates());\n};\nEdgeRing.prototype.isIsolated = function isIsolated () {\n return this._label.getGeometryCount() === 1\n};\nEdgeRing.prototype.computePoints = function computePoints (start) {\n var this$1 = this;\n\n this._startDe = start;\n var de = start;\n var isFirstEdge = true;\n do {\n if (de === null) { throw new TopologyException('Found null DirectedEdge') }\n if (de.getEdgeRing() === this$1) { throw new TopologyException('Directed Edge visited twice during ring-building at ' + de.getCoordinate()) }\n this$1._edges.add(de);\n var label = de.getLabel();\n Assert.isTrue(label.isArea());\n this$1.mergeLabel(label);\n this$1.addPoints(de.getEdge(), de.isForward(), isFirstEdge);\n isFirstEdge = false;\n this$1.setEdgeRing(de, this$1);\n de = this$1.getNext(de);\n } while (de !== this._startDe)\n};\nEdgeRing.prototype.getLinearRing = function getLinearRing () {\n return this._ring\n};\nEdgeRing.prototype.getCoordinate = function getCoordinate (i) {\n return this._pts.get(i)\n};\nEdgeRing.prototype.computeMaxNodeDegree = function computeMaxNodeDegree () {\n var this$1 = this;\n\n this._maxNodeDegree = 0;\n var de = this._startDe;\n do {\n var node = de.getNode();\n var degree = node.getEdges().getOutgoingDegree(this$1);\n if (degree > this$1._maxNodeDegree) { this$1._maxNodeDegree = degree; }\n de = this$1.getNext(de);\n } while (de !== this._startDe)\n this._maxNodeDegree *= 2;\n};\nEdgeRing.prototype.addPoints = function addPoints (edge, isForward, isFirstEdge) {\n var this$1 = this;\n\n var edgePts = edge.getCoordinates();\n if (isForward) {\n var startIndex = 1;\n if (isFirstEdge) { startIndex = 0; }\n for (var i = startIndex; i < edgePts.length; i++) {\n this$1._pts.add(edgePts[i]);\n }\n } else {\n var startIndex$1 = edgePts.length - 2;\n if (isFirstEdge) { startIndex$1 = edgePts.length - 1; }\n for (var i$1 = startIndex$1; i$1 >= 0; i$1--) {\n this$1._pts.add(edgePts[i$1]);\n }\n }\n};\nEdgeRing.prototype.isHole = function isHole () {\n return this._isHole\n};\nEdgeRing.prototype.setInResult = function setInResult () {\n var de = this._startDe;\n do {\n de.getEdge().setInResult(true);\n de = de.getNext();\n } while (de !== this._startDe)\n};\nEdgeRing.prototype.containsPoint = function containsPoint (p) {\n var shell = this.getLinearRing();\n var env = shell.getEnvelopeInternal();\n if (!env.contains(p)) { return false }\n if (!CGAlgorithms.isPointInRing(p, shell.getCoordinates())) { return false }\n for (var i = this._holes.iterator(); i.hasNext();) {\n var hole = i.next();\n if (hole.containsPoint(p)) { return false }\n }\n return true\n};\nEdgeRing.prototype.addHole = function addHole (ring) {\n this._holes.add(ring);\n};\nEdgeRing.prototype.isShell = function isShell () {\n return this._shell === null\n};\nEdgeRing.prototype.getLabel = function getLabel () {\n return this._label\n};\nEdgeRing.prototype.getEdges = function getEdges () {\n return this._edges\n};\nEdgeRing.prototype.getMaxNodeDegree = function getMaxNodeDegree () {\n if (this._maxNodeDegree < 0) { this.computeMaxNodeDegree(); }\n return this._maxNodeDegree\n};\nEdgeRing.prototype.getShell = function getShell () {\n return this._shell\n};\nEdgeRing.prototype.mergeLabel = function mergeLabel () {\n if (arguments.length === 1) {\n var deLabel = arguments[0];\n this.mergeLabel(deLabel, 0);\n this.mergeLabel(deLabel, 1);\n } else if (arguments.length === 2) {\n var deLabel$1 = arguments[0];\n var geomIndex = arguments[1];\n var loc = deLabel$1.getLocation(geomIndex, Position.RIGHT);\n if (loc === Location.NONE) { return null }\n if (this._label.getLocation(geomIndex) === Location.NONE) {\n this._label.setLocation(geomIndex, loc);\n return null\n }\n }\n};\nEdgeRing.prototype.setShell = function setShell (shell) {\n this._shell = shell;\n if (shell !== null) { shell.addHole(this); }\n};\nEdgeRing.prototype.toPolygon = function toPolygon (geometryFactory) {\n var this$1 = this;\n\n var holeLR = new Array(this._holes.size()).fill(null);\n for (var i = 0; i < this._holes.size(); i++) {\n holeLR[i] = this$1._holes.get(i).getLinearRing();\n }\n var poly = geometryFactory.createPolygon(this.getLinearRing(), holeLR);\n return poly\n};\nEdgeRing.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nEdgeRing.prototype.getClass = function getClass () {\n return EdgeRing\n};\n\nvar MinimalEdgeRing = (function (EdgeRing$$1) {\n function MinimalEdgeRing () {\n var start = arguments[0];\n var geometryFactory = arguments[1];\n EdgeRing$$1.call(this, start, geometryFactory);\n }\n\n if ( EdgeRing$$1 ) MinimalEdgeRing.__proto__ = EdgeRing$$1;\n MinimalEdgeRing.prototype = Object.create( EdgeRing$$1 && EdgeRing$$1.prototype );\n MinimalEdgeRing.prototype.constructor = MinimalEdgeRing;\n MinimalEdgeRing.prototype.setEdgeRing = function setEdgeRing (de, er) {\n de.setMinEdgeRing(er);\n };\n MinimalEdgeRing.prototype.getNext = function getNext (de) {\n return de.getNextMin()\n };\n MinimalEdgeRing.prototype.interfaces_ = function interfaces_ () {\n return []\n };\n MinimalEdgeRing.prototype.getClass = function getClass () {\n return MinimalEdgeRing\n };\n\n return MinimalEdgeRing;\n}(EdgeRing));\n\nvar MaximalEdgeRing = (function (EdgeRing$$1) {\n function MaximalEdgeRing () {\n var start = arguments[0];\n var geometryFactory = arguments[1];\n EdgeRing$$1.call(this, start, geometryFactory);\n }\n\n if ( EdgeRing$$1 ) MaximalEdgeRing.__proto__ = EdgeRing$$1;\n MaximalEdgeRing.prototype = Object.create( EdgeRing$$1 && EdgeRing$$1.prototype );\n MaximalEdgeRing.prototype.constructor = MaximalEdgeRing;\n MaximalEdgeRing.prototype.buildMinimalRings = function buildMinimalRings () {\n var this$1 = this;\n\n var minEdgeRings = new ArrayList();\n var de = this._startDe;\n do {\n if (de.getMinEdgeRing() === null) {\n var minEr = new MinimalEdgeRing(de, this$1._geometryFactory);\n minEdgeRings.add(minEr);\n }\n de = de.getNext();\n } while (de !== this._startDe)\n return minEdgeRings\n };\n MaximalEdgeRing.prototype.setEdgeRing = function setEdgeRing (de, er) {\n de.setEdgeRing(er);\n };\n MaximalEdgeRing.prototype.linkDirectedEdgesForMinimalEdgeRings = function linkDirectedEdgesForMinimalEdgeRings () {\n var this$1 = this;\n\n var de = this._startDe;\n do {\n var node = de.getNode();\n node.getEdges().linkMinimalDirectedEdges(this$1);\n de = de.getNext();\n } while (de !== this._startDe)\n };\n MaximalEdgeRing.prototype.getNext = function getNext (de) {\n return de.getNext()\n };\n MaximalEdgeRing.prototype.interfaces_ = function interfaces_ () {\n return []\n };\n MaximalEdgeRing.prototype.getClass = function getClass () {\n return MaximalEdgeRing\n };\n\n return MaximalEdgeRing;\n}(EdgeRing));\n\nvar GraphComponent = function GraphComponent () {\n this._label = null;\n this._isInResult = false;\n this._isCovered = false;\n this._isCoveredSet = false;\n this._isVisited = false;\n if (arguments.length === 0) {} else if (arguments.length === 1) {\n var label = arguments[0];\n this._label = label;\n }\n};\nGraphComponent.prototype.setVisited = function setVisited (isVisited) {\n this._isVisited = isVisited;\n};\nGraphComponent.prototype.setInResult = function setInResult (isInResult) {\n this._isInResult = isInResult;\n};\nGraphComponent.prototype.isCovered = function isCovered () {\n return this._isCovered\n};\nGraphComponent.prototype.isCoveredSet = function isCoveredSet () {\n return this._isCoveredSet\n};\nGraphComponent.prototype.setLabel = function setLabel (label) {\n this._label = label;\n};\nGraphComponent.prototype.getLabel = function getLabel () {\n return this._label\n};\nGraphComponent.prototype.setCovered = function setCovered (isCovered) {\n this._isCovered = isCovered;\n this._isCoveredSet = true;\n};\nGraphComponent.prototype.updateIM = function updateIM (im) {\n Assert.isTrue(this._label.getGeometryCount() >= 2, 'found partial label');\n this.computeIM(im);\n};\nGraphComponent.prototype.isInResult = function isInResult () {\n return this._isInResult\n};\nGraphComponent.prototype.isVisited = function isVisited () {\n return this._isVisited\n};\nGraphComponent.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nGraphComponent.prototype.getClass = function getClass () {\n return GraphComponent\n};\n\nvar Node = (function (GraphComponent$$1) {\n function Node () {\n GraphComponent$$1.call(this);\n this._coord = null;\n this._edges = null;\n var coord = arguments[0];\n var edges = arguments[1];\n this._coord = coord;\n this._edges = edges;\n this._label = new Label(0, Location.NONE);\n }\n\n if ( GraphComponent$$1 ) Node.__proto__ = GraphComponent$$1;\n Node.prototype = Object.create( GraphComponent$$1 && GraphComponent$$1.prototype );\n Node.prototype.constructor = Node;\n Node.prototype.isIncidentEdgeInResult = function isIncidentEdgeInResult () {\n for (var it = this.getEdges().getEdges().iterator(); it.hasNext();) {\n var de = it.next();\n if (de.getEdge().isInResult()) { return true }\n }\n return false\n };\n Node.prototype.isIsolated = function isIsolated () {\n return this._label.getGeometryCount() === 1\n };\n Node.prototype.getCoordinate = function getCoordinate () {\n return this._coord\n };\n Node.prototype.print = function print (out) {\n out.println('node ' + this._coord + ' lbl: ' + this._label);\n };\n Node.prototype.computeIM = function computeIM (im) {};\n Node.prototype.computeMergedLocation = function computeMergedLocation (label2, eltIndex) {\n var loc = Location.NONE;\n loc = this._label.getLocation(eltIndex);\n if (!label2.isNull(eltIndex)) {\n var nLoc = label2.getLocation(eltIndex);\n if (loc !== Location.BOUNDARY) { loc = nLoc; }\n }\n return loc\n };\n Node.prototype.setLabel = function setLabel () {\n if (arguments.length === 2) {\n var argIndex = arguments[0];\n var onLocation = arguments[1];\n if (this._label === null) {\n this._label = new Label(argIndex, onLocation);\n } else { this._label.setLocation(argIndex, onLocation); }\n } else { return GraphComponent$$1.prototype.setLabel.apply(this, arguments) }\n };\n Node.prototype.getEdges = function getEdges () {\n return this._edges\n };\n Node.prototype.mergeLabel = function mergeLabel () {\n var this$1 = this;\n\n if (arguments[0] instanceof Node) {\n var n = arguments[0];\n this.mergeLabel(n._label);\n } else if (arguments[0] instanceof Label) {\n var label2 = arguments[0];\n for (var i = 0; i < 2; i++) {\n var loc = this$1.computeMergedLocation(label2, i);\n var thisLoc = this$1._label.getLocation(i);\n if (thisLoc === Location.NONE) { this$1._label.setLocation(i, loc); }\n }\n }\n };\n Node.prototype.add = function add (e) {\n this._edges.insert(e);\n e.setNode(this);\n };\n Node.prototype.setLabelBoundary = function setLabelBoundary (argIndex) {\n if (this._label === null) { return null }\n var loc = Location.NONE;\n if (this._label !== null) { loc = this._label.getLocation(argIndex); }\n var newLoc = null;\n switch (loc) {\n case Location.BOUNDARY:\n newLoc = Location.INTERIOR;\n break\n case Location.INTERIOR:\n newLoc = Location.BOUNDARY;\n break\n default:\n newLoc = Location.BOUNDARY;\n break\n }\n this._label.setLocation(argIndex, newLoc);\n };\n Node.prototype.interfaces_ = function interfaces_ () {\n return []\n };\n Node.prototype.getClass = function getClass () {\n return Node\n };\n\n return Node;\n}(GraphComponent));\n\nvar NodeMap = function NodeMap () {\n this.nodeMap = new TreeMap();\n this.nodeFact = null;\n var nodeFact = arguments[0];\n this.nodeFact = nodeFact;\n};\nNodeMap.prototype.find = function find (coord) {\n return this.nodeMap.get(coord)\n};\nNodeMap.prototype.addNode = function addNode () {\n if (arguments[0] instanceof Coordinate) {\n var coord = arguments[0];\n var node = this.nodeMap.get(coord);\n if (node === null) {\n node = this.nodeFact.createNode(coord);\n this.nodeMap.put(coord, node);\n }\n return node\n } else if (arguments[0] instanceof Node) {\n var n = arguments[0];\n var node$1 = this.nodeMap.get(n.getCoordinate());\n if (node$1 === null) {\n this.nodeMap.put(n.getCoordinate(), n);\n return n\n }\n node$1.mergeLabel(n);\n return node$1\n }\n};\nNodeMap.prototype.print = function print (out) {\n for (var it = this.iterator(); it.hasNext();) {\n var n = it.next();\n n.print(out);\n }\n};\nNodeMap.prototype.iterator = function iterator () {\n return this.nodeMap.values().iterator()\n};\nNodeMap.prototype.values = function values () {\n return this.nodeMap.values()\n};\nNodeMap.prototype.getBoundaryNodes = function getBoundaryNodes (geomIndex) {\n var bdyNodes = new ArrayList();\n for (var i = this.iterator(); i.hasNext();) {\n var node = i.next();\n if (node.getLabel().getLocation(geomIndex) === Location.BOUNDARY) { bdyNodes.add(node); }\n }\n return bdyNodes\n};\nNodeMap.prototype.add = function add (e) {\n var p = e.getCoordinate();\n var n = this.addNode(p);\n n.add(e);\n};\nNodeMap.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nNodeMap.prototype.getClass = function getClass () {\n return NodeMap\n};\n\nvar Quadrant = function Quadrant () {};\n\nvar staticAccessors$21 = { NE: { configurable: true },NW: { configurable: true },SW: { configurable: true },SE: { configurable: true } };\n\nQuadrant.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nQuadrant.prototype.getClass = function getClass () {\n return Quadrant\n};\nQuadrant.isNorthern = function isNorthern (quad) {\n return quad === Quadrant.NE || quad === Quadrant.NW\n};\nQuadrant.isOpposite = function isOpposite (quad1, quad2) {\n if (quad1 === quad2) { return false }\n var diff = (quad1 - quad2 + 4) % 4;\n if (diff === 2) { return true }\n return false\n};\nQuadrant.commonHalfPlane = function commonHalfPlane (quad1, quad2) {\n if (quad1 === quad2) { return quad1 }\n var diff = (quad1 - quad2 + 4) % 4;\n if (diff === 2) { return -1 }\n var min = quad1 < quad2 ? quad1 : quad2;\n var max = quad1 > quad2 ? quad1 : quad2;\n if (min === 0 && max === 3) { return 3 }\n return min\n};\nQuadrant.isInHalfPlane = function isInHalfPlane (quad, halfPlane) {\n if (halfPlane === Quadrant.SE) {\n return quad === Quadrant.SE || quad === Quadrant.SW\n }\n return quad === halfPlane || quad === halfPlane + 1\n};\nQuadrant.quadrant = function quadrant () {\n if (typeof arguments[0] === 'number' && typeof arguments[1] === 'number') {\n var dx = arguments[0];\n var dy = arguments[1];\n if (dx === 0.0 && dy === 0.0) { throw new IllegalArgumentException('Cannot compute the quadrant for point ( ' + dx + ', ' + dy + ' )') }\n if (dx >= 0.0) {\n if (dy >= 0.0) { return Quadrant.NE; } else { return Quadrant.SE }\n } else {\n if (dy >= 0.0) { return Quadrant.NW; } else { return Quadrant.SW }\n }\n } else if (arguments[0] instanceof Coordinate && arguments[1] instanceof Coordinate) {\n var p0 = arguments[0];\n var p1 = arguments[1];\n if (p1.x === p0.x && p1.y === p0.y) { throw new IllegalArgumentException('Cannot compute the quadrant for two identical points ' + p0) }\n if (p1.x >= p0.x) {\n if (p1.y >= p0.y) { return Quadrant.NE; } else { return Quadrant.SE }\n } else {\n if (p1.y >= p0.y) { return Quadrant.NW; } else { return Quadrant.SW }\n }\n }\n};\nstaticAccessors$21.NE.get = function () { return 0 };\nstaticAccessors$21.NW.get = function () { return 1 };\nstaticAccessors$21.SW.get = function () { return 2 };\nstaticAccessors$21.SE.get = function () { return 3 };\n\nObject.defineProperties( Quadrant, staticAccessors$21 );\n\nvar EdgeEnd = function EdgeEnd () {\n this._edge = null;\n this._label = null;\n this._node = null;\n this._p0 = null;\n this._p1 = null;\n this._dx = null;\n this._dy = null;\n this._quadrant = null;\n if (arguments.length === 1) {\n var edge = arguments[0];\n this._edge = edge;\n } else if (arguments.length === 3) {\n var edge$1 = arguments[0];\n var p0 = arguments[1];\n var p1 = arguments[2];\n var label = null;\n this._edge = edge$1;\n this.init(p0, p1);\n this._label = label;\n } else if (arguments.length === 4) {\n var edge$2 = arguments[0];\n var p0$1 = arguments[1];\n var p1$1 = arguments[2];\n var label$1 = arguments[3];\n this._edge = edge$2;\n this.init(p0$1, p1$1);\n this._label = label$1;\n }\n};\nEdgeEnd.prototype.compareDirection = function compareDirection (e) {\n if (this._dx === e._dx && this._dy === e._dy) { return 0 }\n if (this._quadrant > e._quadrant) { return 1 }\n if (this._quadrant < e._quadrant) { return -1 }\n return CGAlgorithms.computeOrientation(e._p0, e._p1, this._p1)\n};\nEdgeEnd.prototype.getDy = function getDy () {\n return this._dy\n};\nEdgeEnd.prototype.getCoordinate = function getCoordinate () {\n return this._p0\n};\nEdgeEnd.prototype.setNode = function setNode (node) {\n this._node = node;\n};\nEdgeEnd.prototype.print = function print (out) {\n var angle = Math.atan2(this._dy, this._dx);\n var className = this.getClass().getName();\n var lastDotPos = className.lastIndexOf('.');\n var name = className.substring(lastDotPos + 1);\n out.print(' ' + name + ': ' + this._p0 + ' - ' + this._p1 + ' ' + this._quadrant + ':' + angle + ' ' + this._label);\n};\nEdgeEnd.prototype.compareTo = function compareTo (obj) {\n var e = obj;\n return this.compareDirection(e)\n};\nEdgeEnd.prototype.getDirectedCoordinate = function getDirectedCoordinate () {\n return this._p1\n};\nEdgeEnd.prototype.getDx = function getDx () {\n return this._dx\n};\nEdgeEnd.prototype.getLabel = function getLabel () {\n return this._label\n};\nEdgeEnd.prototype.getEdge = function getEdge () {\n return this._edge\n};\nEdgeEnd.prototype.getQuadrant = function getQuadrant () {\n return this._quadrant\n};\nEdgeEnd.prototype.getNode = function getNode () {\n return this._node\n};\nEdgeEnd.prototype.toString = function toString () {\n var angle = Math.atan2(this._dy, this._dx);\n var className = this.getClass().getName();\n var lastDotPos = className.lastIndexOf('.');\n var name = className.substring(lastDotPos + 1);\n return ' ' + name + ': ' + this._p0 + ' - ' + this._p1 + ' ' + this._quadrant + ':' + angle + ' ' + this._label\n};\nEdgeEnd.prototype.computeLabel = function computeLabel (boundaryNodeRule) {};\nEdgeEnd.prototype.init = function init (p0, p1) {\n this._p0 = p0;\n this._p1 = p1;\n this._dx = p1.x - p0.x;\n this._dy = p1.y - p0.y;\n this._quadrant = Quadrant.quadrant(this._dx, this._dy);\n Assert.isTrue(!(this._dx === 0 && this._dy === 0), 'EdgeEnd with identical endpoints found');\n};\nEdgeEnd.prototype.interfaces_ = function interfaces_ () {\n return [Comparable]\n};\nEdgeEnd.prototype.getClass = function getClass () {\n return EdgeEnd\n};\n\nvar DirectedEdge = (function (EdgeEnd$$1) {\n function DirectedEdge () {\n var edge = arguments[0];\n var isForward = arguments[1];\n EdgeEnd$$1.call(this, edge);\n this._isForward = null;\n this._isInResult = false;\n this._isVisited = false;\n this._sym = null;\n this._next = null;\n this._nextMin = null;\n this._edgeRing = null;\n this._minEdgeRing = null;\n this._depth = [0, -999, -999];\n this._isForward = isForward;\n if (isForward) {\n this.init(edge.getCoordinate(0), edge.getCoordinate(1));\n } else {\n var n = edge.getNumPoints() - 1;\n this.init(edge.getCoordinate(n), edge.getCoordinate(n - 1));\n }\n this.computeDirectedLabel();\n }\n\n if ( EdgeEnd$$1 ) DirectedEdge.__proto__ = EdgeEnd$$1;\n DirectedEdge.prototype = Object.create( EdgeEnd$$1 && EdgeEnd$$1.prototype );\n DirectedEdge.prototype.constructor = DirectedEdge;\n DirectedEdge.prototype.getNextMin = function getNextMin () {\n return this._nextMin\n };\n DirectedEdge.prototype.getDepth = function getDepth (position) {\n return this._depth[position]\n };\n DirectedEdge.prototype.setVisited = function setVisited (isVisited) {\n this._isVisited = isVisited;\n };\n DirectedEdge.prototype.computeDirectedLabel = function computeDirectedLabel () {\n this._label = new Label(this._edge.getLabel());\n if (!this._isForward) { this._label.flip(); }\n };\n DirectedEdge.prototype.getNext = function getNext () {\n return this._next\n };\n DirectedEdge.prototype.setDepth = function setDepth (position, depthVal) {\n if (this._depth[position] !== -999) {\n if (this._depth[position] !== depthVal) { throw new TopologyException('assigned depths do not match', this.getCoordinate()) }\n }\n this._depth[position] = depthVal;\n };\n DirectedEdge.prototype.isInteriorAreaEdge = function isInteriorAreaEdge () {\n var this$1 = this;\n\n var isInteriorAreaEdge = true;\n for (var i = 0; i < 2; i++) {\n if (!(this$1._label.isArea(i) && this$1._label.getLocation(i, Position.LEFT) === Location.INTERIOR && this$1._label.getLocation(i, Position.RIGHT) === Location.INTERIOR)) {\n isInteriorAreaEdge = false;\n }\n }\n return isInteriorAreaEdge\n };\n DirectedEdge.prototype.setNextMin = function setNextMin (nextMin) {\n this._nextMin = nextMin;\n };\n DirectedEdge.prototype.print = function print (out) {\n EdgeEnd$$1.prototype.print.call(this, out);\n out.print(' ' + this._depth[Position.LEFT] + '/' + this._depth[Position.RIGHT]);\n out.print(' (' + this.getDepthDelta() + ')');\n if (this._isInResult) { out.print(' inResult'); }\n };\n DirectedEdge.prototype.setMinEdgeRing = function setMinEdgeRing (minEdgeRing) {\n this._minEdgeRing = minEdgeRing;\n };\n DirectedEdge.prototype.isLineEdge = function isLineEdge () {\n var isLine = this._label.isLine(0) || this._label.isLine(1);\n var isExteriorIfArea0 = !this._label.isArea(0) || this._label.allPositionsEqual(0, Location.EXTERIOR);\n var isExteriorIfArea1 = !this._label.isArea(1) || this._label.allPositionsEqual(1, Location.EXTERIOR);\n return isLine && isExteriorIfArea0 && isExteriorIfArea1\n };\n DirectedEdge.prototype.setEdgeRing = function setEdgeRing (edgeRing) {\n this._edgeRing = edgeRing;\n };\n DirectedEdge.prototype.getMinEdgeRing = function getMinEdgeRing () {\n return this._minEdgeRing\n };\n DirectedEdge.prototype.getDepthDelta = function getDepthDelta () {\n var depthDelta = this._edge.getDepthDelta();\n if (!this._isForward) { depthDelta = -depthDelta; }\n return depthDelta\n };\n DirectedEdge.prototype.setInResult = function setInResult (isInResult) {\n this._isInResult = isInResult;\n };\n DirectedEdge.prototype.getSym = function getSym () {\n return this._sym\n };\n DirectedEdge.prototype.isForward = function isForward () {\n return this._isForward\n };\n DirectedEdge.prototype.getEdge = function getEdge () {\n return this._edge\n };\n DirectedEdge.prototype.printEdge = function printEdge (out) {\n this.print(out);\n out.print(' ');\n if (this._isForward) { this._edge.print(out); } else { this._edge.printReverse(out); }\n };\n DirectedEdge.prototype.setSym = function setSym (de) {\n this._sym = de;\n };\n DirectedEdge.prototype.setVisitedEdge = function setVisitedEdge (isVisited) {\n this.setVisited(isVisited);\n this._sym.setVisited(isVisited);\n };\n DirectedEdge.prototype.setEdgeDepths = function setEdgeDepths (position, depth) {\n var depthDelta = this.getEdge().getDepthDelta();\n if (!this._isForward) { depthDelta = -depthDelta; }\n var directionFactor = 1;\n if (position === Position.LEFT) { directionFactor = -1; }\n var oppositePos = Position.opposite(position);\n var delta = depthDelta * directionFactor;\n var oppositeDepth = depth + delta;\n this.setDepth(position, depth);\n this.setDepth(oppositePos, oppositeDepth);\n };\n DirectedEdge.prototype.getEdgeRing = function getEdgeRing () {\n return this._edgeRing\n };\n DirectedEdge.prototype.isInResult = function isInResult () {\n return this._isInResult\n };\n DirectedEdge.prototype.setNext = function setNext (next) {\n this._next = next;\n };\n DirectedEdge.prototype.isVisited = function isVisited () {\n return this._isVisited\n };\n DirectedEdge.prototype.interfaces_ = function interfaces_ () {\n return []\n };\n DirectedEdge.prototype.getClass = function getClass () {\n return DirectedEdge\n };\n DirectedEdge.depthFactor = function depthFactor (currLocation, nextLocation) {\n if (currLocation === Location.EXTERIOR && nextLocation === Location.INTERIOR) { return 1; } else if (currLocation === Location.INTERIOR && nextLocation === Location.EXTERIOR) { return -1 }\n return 0\n };\n\n return DirectedEdge;\n}(EdgeEnd));\n\nvar NodeFactory = function NodeFactory () {};\n\nNodeFactory.prototype.createNode = function createNode (coord) {\n return new Node(coord, null)\n};\nNodeFactory.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nNodeFactory.prototype.getClass = function getClass () {\n return NodeFactory\n};\n\nvar PlanarGraph = function PlanarGraph () {\n this._edges = new ArrayList();\n this._nodes = null;\n this._edgeEndList = new ArrayList();\n if (arguments.length === 0) {\n this._nodes = new NodeMap(new NodeFactory());\n } else if (arguments.length === 1) {\n var nodeFact = arguments[0];\n this._nodes = new NodeMap(nodeFact);\n }\n};\nPlanarGraph.prototype.printEdges = function printEdges (out) {\n var this$1 = this;\n\n out.println('Edges:');\n for (var i = 0; i < this._edges.size(); i++) {\n out.println('edge ' + i + ':');\n var e = this$1._edges.get(i);\n e.print(out);\n e.eiList.print(out);\n }\n};\nPlanarGraph.prototype.find = function find (coord) {\n return this._nodes.find(coord)\n};\nPlanarGraph.prototype.addNode = function addNode () {\n if (arguments[0] instanceof Node) {\n var node = arguments[0];\n return this._nodes.addNode(node)\n } else if (arguments[0] instanceof Coordinate) {\n var coord = arguments[0];\n return this._nodes.addNode(coord)\n }\n};\nPlanarGraph.prototype.getNodeIterator = function getNodeIterator () {\n return this._nodes.iterator()\n};\nPlanarGraph.prototype.linkResultDirectedEdges = function linkResultDirectedEdges () {\n for (var nodeit = this._nodes.iterator(); nodeit.hasNext();) {\n var node = nodeit.next();\n node.getEdges().linkResultDirectedEdges();\n }\n};\nPlanarGraph.prototype.debugPrintln = function debugPrintln (o) {\n System.out.println(o);\n};\nPlanarGraph.prototype.isBoundaryNode = function isBoundaryNode (geomIndex, coord) {\n var node = this._nodes.find(coord);\n if (node === null) { return false }\n var label = node.getLabel();\n if (label !== null && label.getLocation(geomIndex) === Location.BOUNDARY) { return true }\n return false\n};\nPlanarGraph.prototype.linkAllDirectedEdges = function linkAllDirectedEdges () {\n for (var nodeit = this._nodes.iterator(); nodeit.hasNext();) {\n var node = nodeit.next();\n node.getEdges().linkAllDirectedEdges();\n }\n};\nPlanarGraph.prototype.matchInSameDirection = function matchInSameDirection (p0, p1, ep0, ep1) {\n if (!p0.equals(ep0)) { return false }\n if (CGAlgorithms.computeOrientation(p0, p1, ep1) === CGAlgorithms.COLLINEAR && Quadrant.quadrant(p0, p1) === Quadrant.quadrant(ep0, ep1)) { return true }\n return false\n};\nPlanarGraph.prototype.getEdgeEnds = function getEdgeEnds () {\n return this._edgeEndList\n};\nPlanarGraph.prototype.debugPrint = function debugPrint (o) {\n System.out.print(o);\n};\nPlanarGraph.prototype.getEdgeIterator = function getEdgeIterator () {\n return this._edges.iterator()\n};\nPlanarGraph.prototype.findEdgeInSameDirection = function findEdgeInSameDirection (p0, p1) {\n var this$1 = this;\n\n for (var i = 0; i < this._edges.size(); i++) {\n var e = this$1._edges.get(i);\n var eCoord = e.getCoordinates();\n if (this$1.matchInSameDirection(p0, p1, eCoord[0], eCoord[1])) { return e }\n if (this$1.matchInSameDirection(p0, p1, eCoord[eCoord.length - 1], eCoord[eCoord.length - 2])) { return e }\n }\n return null\n};\nPlanarGraph.prototype.insertEdge = function insertEdge (e) {\n this._edges.add(e);\n};\nPlanarGraph.prototype.findEdgeEnd = function findEdgeEnd (e) {\n for (var i = this.getEdgeEnds().iterator(); i.hasNext();) {\n var ee = i.next();\n if (ee.getEdge() === e) { return ee }\n }\n return null\n};\nPlanarGraph.prototype.addEdges = function addEdges (edgesToAdd) {\n var this$1 = this;\n\n for (var it = edgesToAdd.iterator(); it.hasNext();) {\n var e = it.next();\n this$1._edges.add(e);\n var de1 = new DirectedEdge(e, true);\n var de2 = new DirectedEdge(e, false);\n de1.setSym(de2);\n de2.setSym(de1);\n this$1.add(de1);\n this$1.add(de2);\n }\n};\nPlanarGraph.prototype.add = function add (e) {\n this._nodes.add(e);\n this._edgeEndList.add(e);\n};\nPlanarGraph.prototype.getNodes = function getNodes () {\n return this._nodes.values()\n};\nPlanarGraph.prototype.findEdge = function findEdge (p0, p1) {\n var this$1 = this;\n\n for (var i = 0; i < this._edges.size(); i++) {\n var e = this$1._edges.get(i);\n var eCoord = e.getCoordinates();\n if (p0.equals(eCoord[0]) && p1.equals(eCoord[1])) { return e }\n }\n return null\n};\nPlanarGraph.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nPlanarGraph.prototype.getClass = function getClass () {\n return PlanarGraph\n};\nPlanarGraph.linkResultDirectedEdges = function linkResultDirectedEdges (nodes) {\n for (var nodeit = nodes.iterator(); nodeit.hasNext();) {\n var node = nodeit.next();\n node.getEdges().linkResultDirectedEdges();\n }\n};\n\nvar PolygonBuilder = function PolygonBuilder () {\n this._geometryFactory = null;\n this._shellList = new ArrayList();\n var geometryFactory = arguments[0];\n this._geometryFactory = geometryFactory;\n};\nPolygonBuilder.prototype.sortShellsAndHoles = function sortShellsAndHoles (edgeRings, shellList, freeHoleList) {\n for (var it = edgeRings.iterator(); it.hasNext();) {\n var er = it.next();\n if (er.isHole()) {\n freeHoleList.add(er);\n } else {\n shellList.add(er);\n }\n }\n};\nPolygonBuilder.prototype.computePolygons = function computePolygons (shellList) {\n var this$1 = this;\n\n var resultPolyList = new ArrayList();\n for (var it = shellList.iterator(); it.hasNext();) {\n var er = it.next();\n var poly = er.toPolygon(this$1._geometryFactory);\n resultPolyList.add(poly);\n }\n return resultPolyList\n};\nPolygonBuilder.prototype.placeFreeHoles = function placeFreeHoles (shellList, freeHoleList) {\n var this$1 = this;\n\n for (var it = freeHoleList.iterator(); it.hasNext();) {\n var hole = it.next();\n if (hole.getShell() === null) {\n var shell = this$1.findEdgeRingContaining(hole, shellList);\n if (shell === null) { throw new TopologyException('unable to assign hole to a shell', hole.getCoordinate(0)) }\n hole.setShell(shell);\n }\n }\n};\nPolygonBuilder.prototype.buildMinimalEdgeRings = function buildMinimalEdgeRings (maxEdgeRings, shellList, freeHoleList) {\n var this$1 = this;\n\n var edgeRings = new ArrayList();\n for (var it = maxEdgeRings.iterator(); it.hasNext();) {\n var er = it.next();\n if (er.getMaxNodeDegree() > 2) {\n er.linkDirectedEdgesForMinimalEdgeRings();\n var minEdgeRings = er.buildMinimalRings();\n var shell = this$1.findShell(minEdgeRings);\n if (shell !== null) {\n this$1.placePolygonHoles(shell, minEdgeRings);\n shellList.add(shell);\n } else {\n freeHoleList.addAll(minEdgeRings);\n }\n } else {\n edgeRings.add(er);\n }\n }\n return edgeRings\n};\nPolygonBuilder.prototype.containsPoint = function containsPoint (p) {\n for (var it = this._shellList.iterator(); it.hasNext();) {\n var er = it.next();\n if (er.containsPoint(p)) { return true }\n }\n return false\n};\nPolygonBuilder.prototype.buildMaximalEdgeRings = function buildMaximalEdgeRings (dirEdges) {\n var this$1 = this;\n\n var maxEdgeRings = new ArrayList();\n for (var it = dirEdges.iterator(); it.hasNext();) {\n var de = it.next();\n if (de.isInResult() && de.getLabel().isArea()) {\n if (de.getEdgeRing() === null) {\n var er = new MaximalEdgeRing(de, this$1._geometryFactory);\n maxEdgeRings.add(er);\n er.setInResult();\n }\n }\n }\n return maxEdgeRings\n};\nPolygonBuilder.prototype.placePolygonHoles = function placePolygonHoles (shell, minEdgeRings) {\n for (var it = minEdgeRings.iterator(); it.hasNext();) {\n var er = it.next();\n if (er.isHole()) {\n er.setShell(shell);\n }\n }\n};\nPolygonBuilder.prototype.getPolygons = function getPolygons () {\n var resultPolyList = this.computePolygons(this._shellList);\n return resultPolyList\n};\nPolygonBuilder.prototype.findEdgeRingContaining = function findEdgeRingContaining (testEr, shellList) {\n var testRing = testEr.getLinearRing();\n var testEnv = testRing.getEnvelopeInternal();\n var testPt = testRing.getCoordinateN(0);\n var minShell = null;\n var minEnv = null;\n for (var it = shellList.iterator(); it.hasNext();) {\n var tryShell = it.next();\n var tryRing = tryShell.getLinearRing();\n var tryEnv = tryRing.getEnvelopeInternal();\n if (minShell !== null) { minEnv = minShell.getLinearRing().getEnvelopeInternal(); }\n var isContained = false;\n if (tryEnv.contains(testEnv) && CGAlgorithms.isPointInRing(testPt, tryRing.getCoordinates())) { isContained = true; }\n if (isContained) {\n if (minShell === null || minEnv.contains(tryEnv)) {\n minShell = tryShell;\n }\n }\n }\n return minShell\n};\nPolygonBuilder.prototype.findShell = function findShell (minEdgeRings) {\n var shellCount = 0;\n var shell = null;\n for (var it = minEdgeRings.iterator(); it.hasNext();) {\n var er = it.next();\n if (!er.isHole()) {\n shell = er;\n shellCount++;\n }\n }\n Assert.isTrue(shellCount <= 1, 'found two shells in MinimalEdgeRing list');\n return shell\n};\nPolygonBuilder.prototype.add = function add () {\n if (arguments.length === 1) {\n var graph = arguments[0];\n this.add(graph.getEdgeEnds(), graph.getNodes());\n } else if (arguments.length === 2) {\n var dirEdges = arguments[0];\n var nodes = arguments[1];\n PlanarGraph.linkResultDirectedEdges(nodes);\n var maxEdgeRings = this.buildMaximalEdgeRings(dirEdges);\n var freeHoleList = new ArrayList();\n var edgeRings = this.buildMinimalEdgeRings(maxEdgeRings, this._shellList, freeHoleList);\n this.sortShellsAndHoles(edgeRings, this._shellList, freeHoleList);\n this.placeFreeHoles(this._shellList, freeHoleList);\n }\n};\nPolygonBuilder.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nPolygonBuilder.prototype.getClass = function getClass () {\n return PolygonBuilder\n};\n\nvar Boundable = function Boundable () {};\n\nBoundable.prototype.getBounds = function getBounds () {};\nBoundable.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nBoundable.prototype.getClass = function getClass () {\n return Boundable\n};\n\nvar ItemBoundable = function ItemBoundable () {\n this._bounds = null;\n this._item = null;\n var bounds = arguments[0];\n var item = arguments[1];\n this._bounds = bounds;\n this._item = item;\n};\nItemBoundable.prototype.getItem = function getItem () {\n return this._item\n};\nItemBoundable.prototype.getBounds = function getBounds () {\n return this._bounds\n};\nItemBoundable.prototype.interfaces_ = function interfaces_ () {\n return [Boundable, Serializable]\n};\nItemBoundable.prototype.getClass = function getClass () {\n return ItemBoundable\n};\n\nvar PriorityQueue = function PriorityQueue () {\n this._size = null;\n this._items = null;\n this._size = 0;\n this._items = new ArrayList();\n this._items.add(null);\n};\nPriorityQueue.prototype.poll = function poll () {\n if (this.isEmpty()) { return null }\n var minItem = this._items.get(1);\n this._items.set(1, this._items.get(this._size));\n this._size -= 1;\n this.reorder(1);\n return minItem\n};\nPriorityQueue.prototype.size = function size () {\n return this._size\n};\nPriorityQueue.prototype.reorder = function reorder (hole) {\n var this$1 = this;\n\n var child = null;\n var tmp = this._items.get(hole);\n for (; hole * 2 <= this._size; hole = child) {\n child = hole * 2;\n if (child !== this$1._size && this$1._items.get(child + 1).compareTo(this$1._items.get(child)) < 0) { child++; }\n if (this$1._items.get(child).compareTo(tmp) < 0) { this$1._items.set(hole, this$1._items.get(child)); } else { break }\n }\n this._items.set(hole, tmp);\n};\nPriorityQueue.prototype.clear = function clear () {\n this._size = 0;\n this._items.clear();\n};\nPriorityQueue.prototype.isEmpty = function isEmpty () {\n return this._size === 0\n};\nPriorityQueue.prototype.add = function add (x) {\n var this$1 = this;\n\n this._items.add(null);\n this._size += 1;\n var hole = this._size;\n this._items.set(0, x);\n for (; x.compareTo(this._items.get(Math.trunc(hole / 2))) < 0; hole /= 2) {\n this$1._items.set(hole, this$1._items.get(Math.trunc(hole / 2)));\n }\n this._items.set(hole, x);\n};\nPriorityQueue.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nPriorityQueue.prototype.getClass = function getClass () {\n return PriorityQueue\n};\n\nvar ItemVisitor = function ItemVisitor () {};\n\nItemVisitor.prototype.visitItem = function visitItem (item) {};\nItemVisitor.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nItemVisitor.prototype.getClass = function getClass () {\n return ItemVisitor\n};\n\nvar SpatialIndex = function SpatialIndex () {};\n\nSpatialIndex.prototype.insert = function insert (itemEnv, item) {};\nSpatialIndex.prototype.remove = function remove (itemEnv, item) {};\nSpatialIndex.prototype.query = function query () {\n // if (arguments.length === 1) {\n // const searchEnv = arguments[0]\n // } else if (arguments.length === 2) {\n // const searchEnv = arguments[0]\n // const visitor = arguments[1]\n // }\n};\nSpatialIndex.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nSpatialIndex.prototype.getClass = function getClass () {\n return SpatialIndex\n};\n\nvar AbstractNode = function AbstractNode () {\n this._childBoundables = new ArrayList();\n this._bounds = null;\n this._level = null;\n if (arguments.length === 0) {} else if (arguments.length === 1) {\n var level = arguments[0];\n this._level = level;\n }\n};\n\nvar staticAccessors$22 = { serialVersionUID: { configurable: true } };\nAbstractNode.prototype.getLevel = function getLevel () {\n return this._level\n};\nAbstractNode.prototype.size = function size () {\n return this._childBoundables.size()\n};\nAbstractNode.prototype.getChildBoundables = function getChildBoundables () {\n return this._childBoundables\n};\nAbstractNode.prototype.addChildBoundable = function addChildBoundable (childBoundable) {\n Assert.isTrue(this._bounds === null);\n this._childBoundables.add(childBoundable);\n};\nAbstractNode.prototype.isEmpty = function isEmpty () {\n return this._childBoundables.isEmpty()\n};\nAbstractNode.prototype.getBounds = function getBounds () {\n if (this._bounds === null) {\n this._bounds = this.computeBounds();\n }\n return this._bounds\n};\nAbstractNode.prototype.interfaces_ = function interfaces_ () {\n return [Boundable, Serializable]\n};\nAbstractNode.prototype.getClass = function getClass () {\n return AbstractNode\n};\nstaticAccessors$22.serialVersionUID.get = function () { return 6493722185909573708 };\n\nObject.defineProperties( AbstractNode, staticAccessors$22 );\n\nvar Collections = function Collections () {};\n\nCollections.reverseOrder = function reverseOrder () {\n return {\n compare: function compare (a, b) {\n return b.compareTo(a)\n }\n }\n};\nCollections.min = function min (l) {\n Collections.sort(l);\n return l.get(0)\n};\nCollections.sort = function sort (l, c) {\n var a = l.toArray();\n if (c) {\n Arrays.sort(a, c);\n } else {\n Arrays.sort(a);\n }\n var i = l.iterator();\n for (var pos = 0, alen = a.length; pos < alen; pos++) {\n i.next();\n i.set(a[pos]);\n }\n};\nCollections.singletonList = function singletonList (o) {\n var arrayList = new ArrayList();\n arrayList.add(o);\n return arrayList\n};\n\nvar BoundablePair = function BoundablePair () {\n this._boundable1 = null;\n this._boundable2 = null;\n this._distance = null;\n this._itemDistance = null;\n var boundable1 = arguments[0];\n var boundable2 = arguments[1];\n var itemDistance = arguments[2];\n this._boundable1 = boundable1;\n this._boundable2 = boundable2;\n this._itemDistance = itemDistance;\n this._distance = this.distance();\n};\nBoundablePair.prototype.expandToQueue = function expandToQueue (priQ, minDistance) {\n var isComp1 = BoundablePair.isComposite(this._boundable1);\n var isComp2 = BoundablePair.isComposite(this._boundable2);\n if (isComp1 && isComp2) {\n if (BoundablePair.area(this._boundable1) > BoundablePair.area(this._boundable2)) {\n this.expand(this._boundable1, this._boundable2, priQ, minDistance);\n return null\n } else {\n this.expand(this._boundable2, this._boundable1, priQ, minDistance);\n return null\n }\n } else if (isComp1) {\n this.expand(this._boundable1, this._boundable2, priQ, minDistance);\n return null\n } else if (isComp2) {\n this.expand(this._boundable2, this._boundable1, priQ, minDistance);\n return null\n }\n throw new IllegalArgumentException('neither boundable is composite')\n};\nBoundablePair.prototype.isLeaves = function isLeaves () {\n return !(BoundablePair.isComposite(this._boundable1) || BoundablePair.isComposite(this._boundable2))\n};\nBoundablePair.prototype.compareTo = function compareTo (o) {\n var nd = o;\n if (this._distance < nd._distance) { return -1 }\n if (this._distance > nd._distance) { return 1 }\n return 0\n};\nBoundablePair.prototype.expand = function expand (bndComposite, bndOther, priQ, minDistance) {\n var this$1 = this;\n\n var children = bndComposite.getChildBoundables();\n for (var i = children.iterator(); i.hasNext();) {\n var child = i.next();\n var bp = new BoundablePair(child, bndOther, this$1._itemDistance);\n if (bp.getDistance() < minDistance) {\n priQ.add(bp);\n }\n }\n};\nBoundablePair.prototype.getBoundable = function getBoundable (i) {\n if (i === 0) { return this._boundable1 }\n return this._boundable2\n};\nBoundablePair.prototype.getDistance = function getDistance () {\n return this._distance\n};\nBoundablePair.prototype.distance = function distance () {\n if (this.isLeaves()) {\n return this._itemDistance.distance(this._boundable1, this._boundable2)\n }\n return this._boundable1.getBounds().distance(this._boundable2.getBounds())\n};\nBoundablePair.prototype.interfaces_ = function interfaces_ () {\n return [Comparable]\n};\nBoundablePair.prototype.getClass = function getClass () {\n return BoundablePair\n};\nBoundablePair.area = function area (b) {\n return b.getBounds().getArea()\n};\nBoundablePair.isComposite = function isComposite (item) {\n return item instanceof AbstractNode\n};\n\nvar AbstractSTRtree = function AbstractSTRtree () {\n this._root = null;\n this._built = false;\n this._itemBoundables = new ArrayList();\n this._nodeCapacity = null;\n if (arguments.length === 0) {\n var nodeCapacity = AbstractSTRtree.DEFAULT_NODE_CAPACITY;\n this._nodeCapacity = nodeCapacity;\n } else if (arguments.length === 1) {\n var nodeCapacity$1 = arguments[0];\n Assert.isTrue(nodeCapacity$1 > 1, 'Node capacity must be greater than 1');\n this._nodeCapacity = nodeCapacity$1;\n }\n};\n\nvar staticAccessors$23 = { IntersectsOp: { configurable: true },serialVersionUID: { configurable: true },DEFAULT_NODE_CAPACITY: { configurable: true } };\nAbstractSTRtree.prototype.getNodeCapacity = function getNodeCapacity () {\n return this._nodeCapacity\n};\nAbstractSTRtree.prototype.lastNode = function lastNode (nodes) {\n return nodes.get(nodes.size() - 1)\n};\nAbstractSTRtree.prototype.size = function size () {\n var this$1 = this;\n\n if (arguments.length === 0) {\n if (this.isEmpty()) {\n return 0\n }\n this.build();\n return this.size(this._root)\n } else if (arguments.length === 1) {\n var node = arguments[0];\n var size = 0;\n for (var i = node.getChildBoundables().iterator(); i.hasNext();) {\n var childBoundable = i.next();\n if (childBoundable instanceof AbstractNode) {\n size += this$1.size(childBoundable);\n } else if (childBoundable instanceof ItemBoundable) {\n size += 1;\n }\n }\n return size\n }\n};\nAbstractSTRtree.prototype.removeItem = function removeItem (node, item) {\n var childToRemove = null;\n for (var i = node.getChildBoundables().iterator(); i.hasNext();) {\n var childBoundable = i.next();\n if (childBoundable instanceof ItemBoundable) {\n if (childBoundable.getItem() === item) { childToRemove = childBoundable; }\n }\n }\n if (childToRemove !== null) {\n node.getChildBoundables().remove(childToRemove);\n return true\n }\n return false\n};\nAbstractSTRtree.prototype.itemsTree = function itemsTree () {\n var this$1 = this;\n\n if (arguments.length === 0) {\n this.build();\n var valuesTree = this.itemsTree(this._root);\n if (valuesTree === null) { return new ArrayList() }\n return valuesTree\n } else if (arguments.length === 1) {\n var node = arguments[0];\n var valuesTreeForNode = new ArrayList();\n for (var i = node.getChildBoundables().iterator(); i.hasNext();) {\n var childBoundable = i.next();\n if (childBoundable instanceof AbstractNode) {\n var valuesTreeForChild = this$1.itemsTree(childBoundable);\n if (valuesTreeForChild !== null) { valuesTreeForNode.add(valuesTreeForChild); }\n } else if (childBoundable instanceof ItemBoundable) {\n valuesTreeForNode.add(childBoundable.getItem());\n } else {\n Assert.shouldNeverReachHere();\n }\n }\n if (valuesTreeForNode.size() <= 0) { return null }\n return valuesTreeForNode\n }\n};\nAbstractSTRtree.prototype.insert = function insert (bounds, item) {\n Assert.isTrue(!this._built, 'Cannot insert items into an STR packed R-tree after it has been built.');\n this._itemBoundables.add(new ItemBoundable(bounds, item));\n};\nAbstractSTRtree.prototype.boundablesAtLevel = function boundablesAtLevel () {\n var this$1 = this;\n\n if (arguments.length === 1) {\n var level = arguments[0];\n var boundables = new ArrayList();\n this.boundablesAtLevel(level, this._root, boundables);\n return boundables\n } else if (arguments.length === 3) {\n var level$1 = arguments[0];\n var top = arguments[1];\n var boundables$1 = arguments[2];\n Assert.isTrue(level$1 > -2);\n if (top.getLevel() === level$1) {\n boundables$1.add(top);\n return null\n }\n for (var i = top.getChildBoundables().iterator(); i.hasNext();) {\n var boundable = i.next();\n if (boundable instanceof AbstractNode) {\n this$1.boundablesAtLevel(level$1, boundable, boundables$1);\n } else {\n Assert.isTrue(boundable instanceof ItemBoundable);\n if (level$1 === -1) {\n boundables$1.add(boundable);\n }\n }\n }\n return null\n }\n};\nAbstractSTRtree.prototype.query = function query () {\n var this$1 = this;\n\n if (arguments.length === 1) {\n var searchBounds = arguments[0];\n this.build();\n var matches = new ArrayList();\n if (this.isEmpty()) {\n return matches\n }\n if (this.getIntersectsOp().intersects(this._root.getBounds(), searchBounds)) {\n this.query(searchBounds, this._root, matches);\n }\n return matches\n } else if (arguments.length === 2) {\n var searchBounds$1 = arguments[0];\n var visitor = arguments[1];\n this.build();\n if (this.isEmpty()) {\n return null\n }\n if (this.getIntersectsOp().intersects(this._root.getBounds(), searchBounds$1)) {\n this.query(searchBounds$1, this._root, visitor);\n }\n } else if (arguments.length === 3) {\n if (hasInterface(arguments[2], ItemVisitor) && (arguments[0] instanceof Object && arguments[1] instanceof AbstractNode)) {\n var searchBounds$2 = arguments[0];\n var node = arguments[1];\n var visitor$1 = arguments[2];\n var childBoundables = node.getChildBoundables();\n for (var i = 0; i < childBoundables.size(); i++) {\n var childBoundable = childBoundables.get(i);\n if (!this$1.getIntersectsOp().intersects(childBoundable.getBounds(), searchBounds$2)) {\n continue\n }\n if (childBoundable instanceof AbstractNode) {\n this$1.query(searchBounds$2, childBoundable, visitor$1);\n } else if (childBoundable instanceof ItemBoundable) {\n visitor$1.visitItem(childBoundable.getItem());\n } else {\n Assert.shouldNeverReachHere();\n }\n }\n } else if (hasInterface(arguments[2], List) && (arguments[0] instanceof Object && arguments[1] instanceof AbstractNode)) {\n var searchBounds$3 = arguments[0];\n var node$1 = arguments[1];\n var matches$1 = arguments[2];\n var childBoundables$1 = node$1.getChildBoundables();\n for (var i$1 = 0; i$1 < childBoundables$1.size(); i$1++) {\n var childBoundable$1 = childBoundables$1.get(i$1);\n if (!this$1.getIntersectsOp().intersects(childBoundable$1.getBounds(), searchBounds$3)) {\n continue\n }\n if (childBoundable$1 instanceof AbstractNode) {\n this$1.query(searchBounds$3, childBoundable$1, matches$1);\n } else if (childBoundable$1 instanceof ItemBoundable) {\n matches$1.add(childBoundable$1.getItem());\n } else {\n Assert.shouldNeverReachHere();\n }\n }\n }\n }\n};\nAbstractSTRtree.prototype.build = function build () {\n if (this._built) { return null }\n this._root = this._itemBoundables.isEmpty() ? this.createNode(0) : this.createHigherLevels(this._itemBoundables, -1);\n this._itemBoundables = null;\n this._built = true;\n};\nAbstractSTRtree.prototype.getRoot = function getRoot () {\n this.build();\n return this._root\n};\nAbstractSTRtree.prototype.remove = function remove () {\n var this$1 = this;\n\n if (arguments.length === 2) {\n var searchBounds = arguments[0];\n var item = arguments[1];\n this.build();\n if (this.getIntersectsOp().intersects(this._root.getBounds(), searchBounds)) {\n return this.remove(searchBounds, this._root, item)\n }\n return false\n } else if (arguments.length === 3) {\n var searchBounds$1 = arguments[0];\n var node = arguments[1];\n var item$1 = arguments[2];\n var found = this.removeItem(node, item$1);\n if (found) { return true }\n var childToPrune = null;\n for (var i = node.getChildBoundables().iterator(); i.hasNext();) {\n var childBoundable = i.next();\n if (!this$1.getIntersectsOp().intersects(childBoundable.getBounds(), searchBounds$1)) {\n continue\n }\n if (childBoundable instanceof AbstractNode) {\n found = this$1.remove(searchBounds$1, childBoundable, item$1);\n if (found) {\n childToPrune = childBoundable;\n break\n }\n }\n }\n if (childToPrune !== null) {\n if (childToPrune.getChildBoundables().isEmpty()) {\n node.getChildBoundables().remove(childToPrune);\n }\n }\n return found\n }\n};\nAbstractSTRtree.prototype.createHigherLevels = function createHigherLevels (boundablesOfALevel, level) {\n Assert.isTrue(!boundablesOfALevel.isEmpty());\n var parentBoundables = this.createParentBoundables(boundablesOfALevel, level + 1);\n if (parentBoundables.size() === 1) {\n return parentBoundables.get(0)\n }\n return this.createHigherLevels(parentBoundables, level + 1)\n};\nAbstractSTRtree.prototype.depth = function depth () {\n var this$1 = this;\n\n if (arguments.length === 0) {\n if (this.isEmpty()) {\n return 0\n }\n this.build();\n return this.depth(this._root)\n } else if (arguments.length === 1) {\n var node = arguments[0];\n var maxChildDepth = 0;\n for (var i = node.getChildBoundables().iterator(); i.hasNext();) {\n var childBoundable = i.next();\n if (childBoundable instanceof AbstractNode) {\n var childDepth = this$1.depth(childBoundable);\n if (childDepth > maxChildDepth) { maxChildDepth = childDepth; }\n }\n }\n return maxChildDepth + 1\n }\n};\nAbstractSTRtree.prototype.createParentBoundables = function createParentBoundables (childBoundables, newLevel) {\n var this$1 = this;\n\n Assert.isTrue(!childBoundables.isEmpty());\n var parentBoundables = new ArrayList();\n parentBoundables.add(this.createNode(newLevel));\n var sortedChildBoundables = new ArrayList(childBoundables);\n Collections.sort(sortedChildBoundables, this.getComparator());\n for (var i = sortedChildBoundables.iterator(); i.hasNext();) {\n var childBoundable = i.next();\n if (this$1.lastNode(parentBoundables).getChildBoundables().size() === this$1.getNodeCapacity()) {\n parentBoundables.add(this$1.createNode(newLevel));\n }\n this$1.lastNode(parentBoundables).addChildBoundable(childBoundable);\n }\n return parentBoundables\n};\nAbstractSTRtree.prototype.isEmpty = function isEmpty () {\n if (!this._built) { return this._itemBoundables.isEmpty() }\n return this._root.isEmpty()\n};\nAbstractSTRtree.prototype.interfaces_ = function interfaces_ () {\n return [Serializable]\n};\nAbstractSTRtree.prototype.getClass = function getClass () {\n return AbstractSTRtree\n};\nAbstractSTRtree.compareDoubles = function compareDoubles (a, b) {\n return a > b ? 1 : a < b ? -1 : 0\n};\nstaticAccessors$23.IntersectsOp.get = function () { return IntersectsOp };\nstaticAccessors$23.serialVersionUID.get = function () { return -3886435814360241337 };\nstaticAccessors$23.DEFAULT_NODE_CAPACITY.get = function () { return 10 };\n\nObject.defineProperties( AbstractSTRtree, staticAccessors$23 );\n\nvar IntersectsOp = function IntersectsOp () {};\n\nvar ItemDistance = function ItemDistance () {};\n\nItemDistance.prototype.distance = function distance (item1, item2) {};\nItemDistance.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nItemDistance.prototype.getClass = function getClass () {\n return ItemDistance\n};\n\nvar STRtree = (function (AbstractSTRtree$$1) {\n function STRtree (nodeCapacity) {\n nodeCapacity = nodeCapacity || STRtree.DEFAULT_NODE_CAPACITY;\n AbstractSTRtree$$1.call(this, nodeCapacity);\n }\n\n if ( AbstractSTRtree$$1 ) STRtree.__proto__ = AbstractSTRtree$$1;\n STRtree.prototype = Object.create( AbstractSTRtree$$1 && AbstractSTRtree$$1.prototype );\n STRtree.prototype.constructor = STRtree;\n\n var staticAccessors = { STRtreeNode: { configurable: true },serialVersionUID: { configurable: true },xComparator: { configurable: true },yComparator: { configurable: true },intersectsOp: { configurable: true },DEFAULT_NODE_CAPACITY: { configurable: true } };\n STRtree.prototype.createParentBoundablesFromVerticalSlices = function createParentBoundablesFromVerticalSlices (verticalSlices, newLevel) {\n var this$1 = this;\n\n Assert.isTrue(verticalSlices.length > 0);\n var parentBoundables = new ArrayList();\n for (var i = 0; i < verticalSlices.length; i++) {\n parentBoundables.addAll(this$1.createParentBoundablesFromVerticalSlice(verticalSlices[i], newLevel));\n }\n return parentBoundables\n };\n STRtree.prototype.createNode = function createNode (level) {\n return new STRtreeNode(level)\n };\n STRtree.prototype.size = function size () {\n if (arguments.length === 0) {\n return AbstractSTRtree$$1.prototype.size.call(this)\n } else { return AbstractSTRtree$$1.prototype.size.apply(this, arguments) }\n };\n STRtree.prototype.insert = function insert () {\n if (arguments.length === 2) {\n var itemEnv = arguments[0];\n var item = arguments[1];\n if (itemEnv.isNull()) {\n return null\n }\n AbstractSTRtree$$1.prototype.insert.call(this, itemEnv, item);\n } else { return AbstractSTRtree$$1.prototype.insert.apply(this, arguments) }\n };\n STRtree.prototype.getIntersectsOp = function getIntersectsOp () {\n return STRtree.intersectsOp\n };\n STRtree.prototype.verticalSlices = function verticalSlices (childBoundables, sliceCount) {\n var sliceCapacity = Math.trunc(Math.ceil(childBoundables.size() / sliceCount));\n var slices = new Array(sliceCount).fill(null);\n var i = childBoundables.iterator();\n for (var j = 0; j < sliceCount; j++) {\n slices[j] = new ArrayList();\n var boundablesAddedToSlice = 0;\n while (i.hasNext() && boundablesAddedToSlice < sliceCapacity) {\n var childBoundable = i.next();\n slices[j].add(childBoundable);\n boundablesAddedToSlice++;\n }\n }\n return slices\n };\n STRtree.prototype.query = function query () {\n if (arguments.length === 1) {\n var searchEnv = arguments[0];\n return AbstractSTRtree$$1.prototype.query.call(this, searchEnv)\n } else if (arguments.length === 2) {\n var searchEnv$1 = arguments[0];\n var visitor = arguments[1];\n AbstractSTRtree$$1.prototype.query.call(this, searchEnv$1, visitor);\n } else if (arguments.length === 3) {\n if (hasInterface(arguments[2], ItemVisitor) && (arguments[0] instanceof Object && arguments[1] instanceof AbstractNode)) {\n var searchBounds = arguments[0];\n var node = arguments[1];\n var visitor$1 = arguments[2];\n AbstractSTRtree$$1.prototype.query.call(this, searchBounds, node, visitor$1);\n } else if (hasInterface(arguments[2], List) && (arguments[0] instanceof Object && arguments[1] instanceof AbstractNode)) {\n var searchBounds$1 = arguments[0];\n var node$1 = arguments[1];\n var matches = arguments[2];\n AbstractSTRtree$$1.prototype.query.call(this, searchBounds$1, node$1, matches);\n }\n }\n };\n STRtree.prototype.getComparator = function getComparator () {\n return STRtree.yComparator\n };\n STRtree.prototype.createParentBoundablesFromVerticalSlice = function createParentBoundablesFromVerticalSlice (childBoundables, newLevel) {\n return AbstractSTRtree$$1.prototype.createParentBoundables.call(this, childBoundables, newLevel)\n };\n STRtree.prototype.remove = function remove () {\n if (arguments.length === 2) {\n var itemEnv = arguments[0];\n var item = arguments[1];\n return AbstractSTRtree$$1.prototype.remove.call(this, itemEnv, item)\n } else { return AbstractSTRtree$$1.prototype.remove.apply(this, arguments) }\n };\n STRtree.prototype.depth = function depth () {\n if (arguments.length === 0) {\n return AbstractSTRtree$$1.prototype.depth.call(this)\n } else { return AbstractSTRtree$$1.prototype.depth.apply(this, arguments) }\n };\n STRtree.prototype.createParentBoundables = function createParentBoundables (childBoundables, newLevel) {\n Assert.isTrue(!childBoundables.isEmpty());\n var minLeafCount = Math.trunc(Math.ceil(childBoundables.size() / this.getNodeCapacity()));\n var sortedChildBoundables = new ArrayList(childBoundables);\n Collections.sort(sortedChildBoundables, STRtree.xComparator);\n var verticalSlices = this.verticalSlices(sortedChildBoundables, Math.trunc(Math.ceil(Math.sqrt(minLeafCount))));\n return this.createParentBoundablesFromVerticalSlices(verticalSlices, newLevel)\n };\n STRtree.prototype.nearestNeighbour = function nearestNeighbour () {\n if (arguments.length === 1) {\n if (hasInterface(arguments[0], ItemDistance)) {\n var itemDist = arguments[0];\n var bp = new BoundablePair(this.getRoot(), this.getRoot(), itemDist);\n return this.nearestNeighbour(bp)\n } else if (arguments[0] instanceof BoundablePair) {\n var initBndPair = arguments[0];\n return this.nearestNeighbour(initBndPair, Double.POSITIVE_INFINITY)\n }\n } else if (arguments.length === 2) {\n if (arguments[0] instanceof STRtree && hasInterface(arguments[1], ItemDistance)) {\n var tree = arguments[0];\n var itemDist$1 = arguments[1];\n var bp$1 = new BoundablePair(this.getRoot(), tree.getRoot(), itemDist$1);\n return this.nearestNeighbour(bp$1)\n } else if (arguments[0] instanceof BoundablePair && typeof arguments[1] === 'number') {\n var initBndPair$1 = arguments[0];\n var maxDistance = arguments[1];\n var distanceLowerBound = maxDistance;\n var minPair = null;\n var priQ = new PriorityQueue();\n priQ.add(initBndPair$1);\n while (!priQ.isEmpty() && distanceLowerBound > 0.0) {\n var bndPair = priQ.poll();\n var currentDistance = bndPair.getDistance();\n if (currentDistance >= distanceLowerBound) { break }\n if (bndPair.isLeaves()) {\n distanceLowerBound = currentDistance;\n minPair = bndPair;\n } else {\n bndPair.expandToQueue(priQ, distanceLowerBound);\n }\n }\n return [minPair.getBoundable(0).getItem(), minPair.getBoundable(1).getItem()]\n }\n } else if (arguments.length === 3) {\n var env = arguments[0];\n var item = arguments[1];\n var itemDist$2 = arguments[2];\n var bnd = new ItemBoundable(env, item);\n var bp$2 = new BoundablePair(this.getRoot(), bnd, itemDist$2);\n return this.nearestNeighbour(bp$2)[0]\n }\n };\n STRtree.prototype.interfaces_ = function interfaces_ () {\n return [SpatialIndex, Serializable]\n };\n STRtree.prototype.getClass = function getClass () {\n return STRtree\n };\n STRtree.centreX = function centreX (e) {\n return STRtree.avg(e.getMinX(), e.getMaxX())\n };\n STRtree.avg = function avg (a, b) {\n return (a + b) / 2\n };\n STRtree.centreY = function centreY (e) {\n return STRtree.avg(e.getMinY(), e.getMaxY())\n };\n staticAccessors.STRtreeNode.get = function () { return STRtreeNode };\n staticAccessors.serialVersionUID.get = function () { return 259274702368956900 };\n staticAccessors.xComparator.get = function () {\n return {\n interfaces_: function () {\n return [Comparator]\n },\n compare: function (o1, o2) {\n return AbstractSTRtree$$1.compareDoubles(STRtree.centreX(o1.getBounds()), STRtree.centreX(o2.getBounds()))\n }\n }\n };\n staticAccessors.yComparator.get = function () {\n return {\n interfaces_: function () {\n return [Comparator]\n },\n compare: function (o1, o2) {\n return AbstractSTRtree$$1.compareDoubles(STRtree.centreY(o1.getBounds()), STRtree.centreY(o2.getBounds()))\n }\n }\n };\n staticAccessors.intersectsOp.get = function () {\n return {\n interfaces_: function () {\n return [AbstractSTRtree$$1.IntersectsOp]\n },\n intersects: function (aBounds, bBounds) {\n return aBounds.intersects(bBounds)\n }\n }\n };\n staticAccessors.DEFAULT_NODE_CAPACITY.get = function () { return 10 };\n\n Object.defineProperties( STRtree, staticAccessors );\n\n return STRtree;\n}(AbstractSTRtree));\n\nvar STRtreeNode = (function (AbstractNode$$1) {\n function STRtreeNode () {\n var level = arguments[0];\n AbstractNode$$1.call(this, level);\n }\n\n if ( AbstractNode$$1 ) STRtreeNode.__proto__ = AbstractNode$$1;\n STRtreeNode.prototype = Object.create( AbstractNode$$1 && AbstractNode$$1.prototype );\n STRtreeNode.prototype.constructor = STRtreeNode;\n STRtreeNode.prototype.computeBounds = function computeBounds () {\n var bounds = null;\n for (var i = this.getChildBoundables().iterator(); i.hasNext();) {\n var childBoundable = i.next();\n if (bounds === null) {\n bounds = new Envelope(childBoundable.getBounds());\n } else {\n bounds.expandToInclude(childBoundable.getBounds());\n }\n }\n return bounds\n };\n STRtreeNode.prototype.interfaces_ = function interfaces_ () {\n return []\n };\n STRtreeNode.prototype.getClass = function getClass () {\n return STRtreeNode\n };\n\n return STRtreeNode;\n}(AbstractNode));\n\nvar SegmentPointComparator = function SegmentPointComparator () {};\n\nSegmentPointComparator.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nSegmentPointComparator.prototype.getClass = function getClass () {\n return SegmentPointComparator\n};\nSegmentPointComparator.relativeSign = function relativeSign (x0, x1) {\n if (x0 < x1) { return -1 }\n if (x0 > x1) { return 1 }\n return 0\n};\nSegmentPointComparator.compare = function compare (octant, p0, p1) {\n if (p0.equals2D(p1)) { return 0 }\n var xSign = SegmentPointComparator.relativeSign(p0.x, p1.x);\n var ySign = SegmentPointComparator.relativeSign(p0.y, p1.y);\n switch (octant) {\n case 0:\n return SegmentPointComparator.compareValue(xSign, ySign)\n case 1:\n return SegmentPointComparator.compareValue(ySign, xSign)\n case 2:\n return SegmentPointComparator.compareValue(ySign, -xSign)\n case 3:\n return SegmentPointComparator.compareValue(-xSign, ySign)\n case 4:\n return SegmentPointComparator.compareValue(-xSign, -ySign)\n case 5:\n return SegmentPointComparator.compareValue(-ySign, -xSign)\n case 6:\n return SegmentPointComparator.compareValue(-ySign, xSign)\n case 7:\n return SegmentPointComparator.compareValue(xSign, -ySign)\n default:\n }\n Assert.shouldNeverReachHere('invalid octant value');\n return 0\n};\nSegmentPointComparator.compareValue = function compareValue (compareSign0, compareSign1) {\n if (compareSign0 < 0) { return -1 }\n if (compareSign0 > 0) { return 1 }\n if (compareSign1 < 0) { return -1 }\n if (compareSign1 > 0) { return 1 }\n return 0\n};\n\nvar SegmentNode = function SegmentNode () {\n this._segString = null;\n this.coord = null;\n this.segmentIndex = null;\n this._segmentOctant = null;\n this._isInterior = null;\n var segString = arguments[0];\n var coord = arguments[1];\n var segmentIndex = arguments[2];\n var segmentOctant = arguments[3];\n this._segString = segString;\n this.coord = new Coordinate(coord);\n this.segmentIndex = segmentIndex;\n this._segmentOctant = segmentOctant;\n this._isInterior = !coord.equals2D(segString.getCoordinate(segmentIndex));\n};\nSegmentNode.prototype.getCoordinate = function getCoordinate () {\n return this.coord\n};\nSegmentNode.prototype.print = function print (out) {\n out.print(this.coord);\n out.print(' seg # = ' + this.segmentIndex);\n};\nSegmentNode.prototype.compareTo = function compareTo (obj) {\n var other = obj;\n if (this.segmentIndex < other.segmentIndex) { return -1 }\n if (this.segmentIndex > other.segmentIndex) { return 1 }\n if (this.coord.equals2D(other.coord)) { return 0 }\n return SegmentPointComparator.compare(this._segmentOctant, this.coord, other.coord)\n};\nSegmentNode.prototype.isEndPoint = function isEndPoint (maxSegmentIndex) {\n if (this.segmentIndex === 0 && !this._isInterior) { return true }\n if (this.segmentIndex === maxSegmentIndex) { return true }\n return false\n};\nSegmentNode.prototype.isInterior = function isInterior () {\n return this._isInterior\n};\nSegmentNode.prototype.interfaces_ = function interfaces_ () {\n return [Comparable]\n};\nSegmentNode.prototype.getClass = function getClass () {\n return SegmentNode\n};\n\n// import Iterator from '../../../../java/util/Iterator'\nvar SegmentNodeList = function SegmentNodeList () {\n this._nodeMap = new TreeMap();\n this._edge = null;\n var edge = arguments[0];\n this._edge = edge;\n};\nSegmentNodeList.prototype.getSplitCoordinates = function getSplitCoordinates () {\n var this$1 = this;\n\n var coordList = new CoordinateList();\n this.addEndpoints();\n var it = this.iterator();\n var eiPrev = it.next();\n while (it.hasNext()) {\n var ei = it.next();\n this$1.addEdgeCoordinates(eiPrev, ei, coordList);\n eiPrev = ei;\n }\n return coordList.toCoordinateArray()\n};\nSegmentNodeList.prototype.addCollapsedNodes = function addCollapsedNodes () {\n var this$1 = this;\n\n var collapsedVertexIndexes = new ArrayList();\n this.findCollapsesFromInsertedNodes(collapsedVertexIndexes);\n this.findCollapsesFromExistingVertices(collapsedVertexIndexes);\n for (var it = collapsedVertexIndexes.iterator(); it.hasNext();) {\n var vertexIndex = it.next().intValue();\n this$1.add(this$1._edge.getCoordinate(vertexIndex), vertexIndex);\n }\n};\nSegmentNodeList.prototype.print = function print (out) {\n out.println('Intersections:');\n for (var it = this.iterator(); it.hasNext();) {\n var ei = it.next();\n ei.print(out);\n }\n};\nSegmentNodeList.prototype.findCollapsesFromExistingVertices = function findCollapsesFromExistingVertices (collapsedVertexIndexes) {\n var this$1 = this;\n\n for (var i = 0; i < this._edge.size() - 2; i++) {\n var p0 = this$1._edge.getCoordinate(i);\n // const p1 = this._edge.getCoordinate(i + 1)\n var p2 = this$1._edge.getCoordinate(i + 2);\n if (p0.equals2D(p2)) {\n collapsedVertexIndexes.add(new Integer(i + 1));\n }\n }\n};\nSegmentNodeList.prototype.addEdgeCoordinates = function addEdgeCoordinates (ei0, ei1, coordList) {\n var this$1 = this;\n\n // let npts = ei1.segmentIndex - ei0.segmentIndex + 2\n var lastSegStartPt = this._edge.getCoordinate(ei1.segmentIndex);\n var useIntPt1 = ei1.isInterior() || !ei1.coord.equals2D(lastSegStartPt);\n // if (!useIntPt1) {\n // npts--\n // }\n // const ipt = 0\n coordList.add(new Coordinate(ei0.coord), false);\n for (var i = ei0.segmentIndex + 1; i <= ei1.segmentIndex; i++) {\n coordList.add(this$1._edge.getCoordinate(i));\n }\n if (useIntPt1) {\n coordList.add(new Coordinate(ei1.coord));\n }\n};\nSegmentNodeList.prototype.iterator = function iterator () {\n return this._nodeMap.values().iterator()\n};\nSegmentNodeList.prototype.addSplitEdges = function addSplitEdges (edgeList) {\n var this$1 = this;\n\n this.addEndpoints();\n this.addCollapsedNodes();\n var it = this.iterator();\n var eiPrev = it.next();\n while (it.hasNext()) {\n var ei = it.next();\n var newEdge = this$1.createSplitEdge(eiPrev, ei);\n edgeList.add(newEdge);\n eiPrev = ei;\n }\n};\nSegmentNodeList.prototype.findCollapseIndex = function findCollapseIndex (ei0, ei1, collapsedVertexIndex) {\n if (!ei0.coord.equals2D(ei1.coord)) { return false }\n var numVerticesBetween = ei1.segmentIndex - ei0.segmentIndex;\n if (!ei1.isInterior()) {\n numVerticesBetween--;\n }\n if (numVerticesBetween === 1) {\n collapsedVertexIndex[0] = ei0.segmentIndex + 1;\n return true\n }\n return false\n};\nSegmentNodeList.prototype.findCollapsesFromInsertedNodes = function findCollapsesFromInsertedNodes (collapsedVertexIndexes) {\n var this$1 = this;\n\n var collapsedVertexIndex = new Array(1).fill(null);\n var it = this.iterator();\n var eiPrev = it.next();\n while (it.hasNext()) {\n var ei = it.next();\n var isCollapsed = this$1.findCollapseIndex(eiPrev, ei, collapsedVertexIndex);\n if (isCollapsed) { collapsedVertexIndexes.add(new Integer(collapsedVertexIndex[0])); }\n eiPrev = ei;\n }\n};\nSegmentNodeList.prototype.getEdge = function getEdge () {\n return this._edge\n};\nSegmentNodeList.prototype.addEndpoints = function addEndpoints () {\n var maxSegIndex = this._edge.size() - 1;\n this.add(this._edge.getCoordinate(0), 0);\n this.add(this._edge.getCoordinate(maxSegIndex), maxSegIndex);\n};\nSegmentNodeList.prototype.createSplitEdge = function createSplitEdge (ei0, ei1) {\n var this$1 = this;\n\n var npts = ei1.segmentIndex - ei0.segmentIndex + 2;\n var lastSegStartPt = this._edge.getCoordinate(ei1.segmentIndex);\n var useIntPt1 = ei1.isInterior() || !ei1.coord.equals2D(lastSegStartPt);\n if (!useIntPt1) {\n npts--;\n }\n var pts = new Array(npts).fill(null);\n var ipt = 0;\n pts[ipt++] = new Coordinate(ei0.coord);\n for (var i = ei0.segmentIndex + 1; i <= ei1.segmentIndex; i++) {\n pts[ipt++] = this$1._edge.getCoordinate(i);\n }\n if (useIntPt1) { pts[ipt] = new Coordinate(ei1.coord); }\n return new NodedSegmentString(pts, this._edge.getData())\n};\nSegmentNodeList.prototype.add = function add (intPt, segmentIndex) {\n var eiNew = new SegmentNode(this._edge, intPt, segmentIndex, this._edge.getSegmentOctant(segmentIndex));\n var ei = this._nodeMap.get(eiNew);\n if (ei !== null) {\n Assert.isTrue(ei.coord.equals2D(intPt), 'Found equal nodes with different coordinates');\n return ei\n }\n this._nodeMap.put(eiNew, eiNew);\n return eiNew\n};\nSegmentNodeList.prototype.checkSplitEdgesCorrectness = function checkSplitEdgesCorrectness (splitEdges) {\n var edgePts = this._edge.getCoordinates();\n var split0 = splitEdges.get(0);\n var pt0 = split0.getCoordinate(0);\n if (!pt0.equals2D(edgePts[0])) { throw new RuntimeException('bad split edge start point at ' + pt0) }\n var splitn = splitEdges.get(splitEdges.size() - 1);\n var splitnPts = splitn.getCoordinates();\n var ptn = splitnPts[splitnPts.length - 1];\n if (!ptn.equals2D(edgePts[edgePts.length - 1])) { throw new RuntimeException('bad split edge end point at ' + ptn) }\n};\nSegmentNodeList.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nSegmentNodeList.prototype.getClass = function getClass () {\n return SegmentNodeList\n};\n\n\n\n// class NodeVertexIterator {\n// constructor () {\n// this._nodeList = null\n// this._edge = null\n// this._nodeIt = null\n// this._currNode = null\n// this._nextNode = null\n// this._currSegIndex = 0\n// let nodeList = arguments[0]\n// this._nodeList = nodeList\n// this._edge = nodeList.getEdge()\n// this._nodeIt = nodeList.iterator()\n// this.readNextNode()\n// }\n// next () {\n// if (this._currNode === null) {\n// this._currNode = this._nextNode\n// this._currSegIndex = this._currNode.segmentIndex\n// this.readNextNode()\n// return this._currNode\n// }\n// if (this._nextNode === null) return null\n// if (this._nextNode.segmentIndex === this._currNode.segmentIndex) {\n// this._currNode = this._nextNode\n// this._currSegIndex = this._currNode.segmentIndex\n// this.readNextNode()\n// return this._currNode\n// }\n// if (this._nextNode.segmentIndex > this._currNode.segmentIndex) {}\n// return null\n// }\n// remove () {\n// // throw new UnsupportedOperationException(this.getClass().getName())\n// }\n// hasNext () {\n// if (this._nextNode === null) return false\n// return true\n// }\n// readNextNode () {\n// if (this._nodeIt.hasNext()) this._nextNode = this._nodeIt.next(); else this._nextNode = null\n// }\n// interfaces_ () {\n// return [Iterator]\n// }\n// getClass () {\n// return NodeVertexIterator\n// }\n// }\n\nvar Octant = function Octant () {};\n\nOctant.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nOctant.prototype.getClass = function getClass () {\n return Octant\n};\nOctant.octant = function octant () {\n if (typeof arguments[0] === 'number' && typeof arguments[1] === 'number') {\n var dx = arguments[0];\n var dy = arguments[1];\n if (dx === 0.0 && dy === 0.0) { throw new IllegalArgumentException('Cannot compute the octant for point ( ' + dx + ', ' + dy + ' )') }\n var adx = Math.abs(dx);\n var ady = Math.abs(dy);\n if (dx >= 0) {\n if (dy >= 0) {\n if (adx >= ady) { return 0; } else { return 1 }\n } else {\n if (adx >= ady) { return 7; } else { return 6 }\n }\n } else {\n if (dy >= 0) {\n if (adx >= ady) { return 3; } else { return 2 }\n } else {\n if (adx >= ady) { return 4; } else { return 5 }\n }\n }\n } else if (arguments[0] instanceof Coordinate && arguments[1] instanceof Coordinate) {\n var p0 = arguments[0];\n var p1 = arguments[1];\n var dx$1 = p1.x - p0.x;\n var dy$1 = p1.y - p0.y;\n if (dx$1 === 0.0 && dy$1 === 0.0) { throw new IllegalArgumentException('Cannot compute the octant for two identical points ' + p0) }\n return Octant.octant(dx$1, dy$1)\n }\n};\n\nvar SegmentString = function SegmentString () {};\n\nSegmentString.prototype.getCoordinates = function getCoordinates () {};\nSegmentString.prototype.size = function size () {};\nSegmentString.prototype.getCoordinate = function getCoordinate (i) {};\nSegmentString.prototype.isClosed = function isClosed () {};\nSegmentString.prototype.setData = function setData (data) {};\nSegmentString.prototype.getData = function getData () {};\nSegmentString.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nSegmentString.prototype.getClass = function getClass () {\n return SegmentString\n};\n\nvar NodableSegmentString = function NodableSegmentString () {};\n\nNodableSegmentString.prototype.addIntersection = function addIntersection (intPt, segmentIndex) {};\nNodableSegmentString.prototype.interfaces_ = function interfaces_ () {\n return [SegmentString]\n};\nNodableSegmentString.prototype.getClass = function getClass () {\n return NodableSegmentString\n};\n\nvar NodedSegmentString = function NodedSegmentString () {\n this._nodeList = new SegmentNodeList(this);\n this._pts = null;\n this._data = null;\n var pts = arguments[0];\n var data = arguments[1];\n this._pts = pts;\n this._data = data;\n};\nNodedSegmentString.prototype.getCoordinates = function getCoordinates () {\n return this._pts\n};\nNodedSegmentString.prototype.size = function size () {\n return this._pts.length\n};\nNodedSegmentString.prototype.getCoordinate = function getCoordinate (i) {\n return this._pts[i]\n};\nNodedSegmentString.prototype.isClosed = function isClosed () {\n return this._pts[0].equals(this._pts[this._pts.length - 1])\n};\nNodedSegmentString.prototype.getSegmentOctant = function getSegmentOctant (index) {\n if (index === this._pts.length - 1) { return -1 }\n return this.safeOctant(this.getCoordinate(index), this.getCoordinate(index + 1))\n};\nNodedSegmentString.prototype.setData = function setData (data) {\n this._data = data;\n};\nNodedSegmentString.prototype.safeOctant = function safeOctant (p0, p1) {\n if (p0.equals2D(p1)) { return 0 }\n return Octant.octant(p0, p1)\n};\nNodedSegmentString.prototype.getData = function getData () {\n return this._data\n};\nNodedSegmentString.prototype.addIntersection = function addIntersection () {\n if (arguments.length === 2) {\n var intPt$1 = arguments[0];\n var segmentIndex = arguments[1];\n this.addIntersectionNode(intPt$1, segmentIndex);\n } else if (arguments.length === 4) {\n var li = arguments[0];\n var segmentIndex$1 = arguments[1];\n // const geomIndex = arguments[2]\n var intIndex = arguments[3];\n var intPt = new Coordinate(li.getIntersection(intIndex));\n this.addIntersection(intPt, segmentIndex$1);\n }\n};\nNodedSegmentString.prototype.toString = function toString () {\n return WKTWriter.toLineString(new CoordinateArraySequence(this._pts))\n};\nNodedSegmentString.prototype.getNodeList = function getNodeList () {\n return this._nodeList\n};\nNodedSegmentString.prototype.addIntersectionNode = function addIntersectionNode (intPt, segmentIndex) {\n var normalizedSegmentIndex = segmentIndex;\n var nextSegIndex = normalizedSegmentIndex + 1;\n if (nextSegIndex < this._pts.length) {\n var nextPt = this._pts[nextSegIndex];\n if (intPt.equals2D(nextPt)) {\n normalizedSegmentIndex = nextSegIndex;\n }\n }\n var ei = this._nodeList.add(intPt, normalizedSegmentIndex);\n return ei\n};\nNodedSegmentString.prototype.addIntersections = function addIntersections (li, segmentIndex, geomIndex) {\n var this$1 = this;\n\n for (var i = 0; i < li.getIntersectionNum(); i++) {\n this$1.addIntersection(li, segmentIndex, geomIndex, i);\n }\n};\nNodedSegmentString.prototype.interfaces_ = function interfaces_ () {\n return [NodableSegmentString]\n};\nNodedSegmentString.prototype.getClass = function getClass () {\n return NodedSegmentString\n};\nNodedSegmentString.getNodedSubstrings = function getNodedSubstrings () {\n if (arguments.length === 1) {\n var segStrings = arguments[0];\n var resultEdgelist = new ArrayList();\n NodedSegmentString.getNodedSubstrings(segStrings, resultEdgelist);\n return resultEdgelist\n } else if (arguments.length === 2) {\n var segStrings$1 = arguments[0];\n var resultEdgelist$1 = arguments[1];\n for (var i = segStrings$1.iterator(); i.hasNext();) {\n var ss = i.next();\n ss.getNodeList().addSplitEdges(resultEdgelist$1);\n }\n }\n};\n\nvar LineSegment = function LineSegment () {\n this.p0 = null;\n this.p1 = null;\n if (arguments.length === 0) {\n this.p0 = new Coordinate();\n this.p1 = new Coordinate();\n } else if (arguments.length === 1) {\n var ls = arguments[0];\n this.p0 = new Coordinate(ls.p0);\n this.p1 = new Coordinate(ls.p1);\n } else if (arguments.length === 2) {\n this.p0 = arguments[0];\n this.p1 = arguments[1];\n } else if (arguments.length === 4) {\n var x0 = arguments[0];\n var y0 = arguments[1];\n var x1 = arguments[2];\n var y1 = arguments[3];\n this.p0 = new Coordinate(x0, y0);\n this.p1 = new Coordinate(x1, y1);\n }\n};\n\nvar staticAccessors$24 = { serialVersionUID: { configurable: true } };\nLineSegment.prototype.minX = function minX () {\n return Math.min(this.p0.x, this.p1.x)\n};\nLineSegment.prototype.orientationIndex = function orientationIndex () {\n if (arguments[0] instanceof LineSegment) {\n var seg = arguments[0];\n var orient0 = CGAlgorithms.orientationIndex(this.p0, this.p1, seg.p0);\n var orient1 = CGAlgorithms.orientationIndex(this.p0, this.p1, seg.p1);\n if (orient0 >= 0 && orient1 >= 0) { return Math.max(orient0, orient1) }\n if (orient0 <= 0 && orient1 <= 0) { return Math.max(orient0, orient1) }\n return 0\n } else if (arguments[0] instanceof Coordinate) {\n var p = arguments[0];\n return CGAlgorithms.orientationIndex(this.p0, this.p1, p)\n }\n};\nLineSegment.prototype.toGeometry = function toGeometry (geomFactory) {\n return geomFactory.createLineString([this.p0, this.p1])\n};\nLineSegment.prototype.isVertical = function isVertical () {\n return this.p0.x === this.p1.x\n};\nLineSegment.prototype.equals = function equals (o) {\n if (!(o instanceof LineSegment)) {\n return false\n }\n var other = o;\n return this.p0.equals(other.p0) && this.p1.equals(other.p1)\n};\nLineSegment.prototype.intersection = function intersection (line) {\n var li = new RobustLineIntersector();\n li.computeIntersection(this.p0, this.p1, line.p0, line.p1);\n if (li.hasIntersection()) { return li.getIntersection(0) }\n return null\n};\nLineSegment.prototype.project = function project () {\n if (arguments[0] instanceof Coordinate) {\n var p = arguments[0];\n if (p.equals(this.p0) || p.equals(this.p1)) { return new Coordinate(p) }\n var r = this.projectionFactor(p);\n var coord = new Coordinate();\n coord.x = this.p0.x + r * (this.p1.x - this.p0.x);\n coord.y = this.p0.y + r * (this.p1.y - this.p0.y);\n return coord\n } else if (arguments[0] instanceof LineSegment) {\n var seg = arguments[0];\n var pf0 = this.projectionFactor(seg.p0);\n var pf1 = this.projectionFactor(seg.p1);\n if (pf0 >= 1.0 && pf1 >= 1.0) { return null }\n if (pf0 <= 0.0 && pf1 <= 0.0) { return null }\n var newp0 = this.project(seg.p0);\n if (pf0 < 0.0) { newp0 = this.p0; }\n if (pf0 > 1.0) { newp0 = this.p1; }\n var newp1 = this.project(seg.p1);\n if (pf1 < 0.0) { newp1 = this.p0; }\n if (pf1 > 1.0) { newp1 = this.p1; }\n return new LineSegment(newp0, newp1)\n }\n};\nLineSegment.prototype.normalize = function normalize () {\n if (this.p1.compareTo(this.p0) < 0) { this.reverse(); }\n};\nLineSegment.prototype.angle = function angle () {\n return Math.atan2(this.p1.y - this.p0.y, this.p1.x - this.p0.x)\n};\nLineSegment.prototype.getCoordinate = function getCoordinate (i) {\n if (i === 0) { return this.p0 }\n return this.p1\n};\nLineSegment.prototype.distancePerpendicular = function distancePerpendicular (p) {\n return CGAlgorithms.distancePointLinePerpendicular(p, this.p0, this.p1)\n};\nLineSegment.prototype.minY = function minY () {\n return Math.min(this.p0.y, this.p1.y)\n};\nLineSegment.prototype.midPoint = function midPoint () {\n return LineSegment.midPoint(this.p0, this.p1)\n};\nLineSegment.prototype.projectionFactor = function projectionFactor (p) {\n if (p.equals(this.p0)) { return 0.0 }\n if (p.equals(this.p1)) { return 1.0 }\n var dx = this.p1.x - this.p0.x;\n var dy = this.p1.y - this.p0.y;\n var len = dx * dx + dy * dy;\n if (len <= 0.0) { return Double.NaN }\n var r = ((p.x - this.p0.x) * dx + (p.y - this.p0.y) * dy) / len;\n return r\n};\nLineSegment.prototype.closestPoints = function closestPoints (line) {\n var intPt = this.intersection(line);\n if (intPt !== null) {\n return [intPt, intPt]\n }\n var closestPt = new Array(2).fill(null);\n var minDistance = Double.MAX_VALUE;\n var dist = null;\n var close00 = this.closestPoint(line.p0);\n minDistance = close00.distance(line.p0);\n closestPt[0] = close00;\n closestPt[1] = line.p0;\n var close01 = this.closestPoint(line.p1);\n dist = close01.distance(line.p1);\n if (dist < minDistance) {\n minDistance = dist;\n closestPt[0] = close01;\n closestPt[1] = line.p1;\n }\n var close10 = line.closestPoint(this.p0);\n dist = close10.distance(this.p0);\n if (dist < minDistance) {\n minDistance = dist;\n closestPt[0] = this.p0;\n closestPt[1] = close10;\n }\n var close11 = line.closestPoint(this.p1);\n dist = close11.distance(this.p1);\n if (dist < minDistance) {\n minDistance = dist;\n closestPt[0] = this.p1;\n closestPt[1] = close11;\n }\n return closestPt\n};\nLineSegment.prototype.closestPoint = function closestPoint (p) {\n var factor = this.projectionFactor(p);\n if (factor > 0 && factor < 1) {\n return this.project(p)\n }\n var dist0 = this.p0.distance(p);\n var dist1 = this.p1.distance(p);\n if (dist0 < dist1) { return this.p0 }\n return this.p1\n};\nLineSegment.prototype.maxX = function maxX () {\n return Math.max(this.p0.x, this.p1.x)\n};\nLineSegment.prototype.getLength = function getLength () {\n return this.p0.distance(this.p1)\n};\nLineSegment.prototype.compareTo = function compareTo (o) {\n var other = o;\n var comp0 = this.p0.compareTo(other.p0);\n if (comp0 !== 0) { return comp0 }\n return this.p1.compareTo(other.p1)\n};\nLineSegment.prototype.reverse = function reverse () {\n var temp = this.p0;\n this.p0 = this.p1;\n this.p1 = temp;\n};\nLineSegment.prototype.equalsTopo = function equalsTopo (other) {\n return this.p0.equals(other.p0) &&\n (this.p1.equals(other.p1) || this.p0.equals(other.p1)) &&\n this.p1.equals(other.p0)\n};\nLineSegment.prototype.lineIntersection = function lineIntersection (line) {\n try {\n var intPt = HCoordinate.intersection(this.p0, this.p1, line.p0, line.p1);\n return intPt\n } catch (ex) {\n if (ex instanceof NotRepresentableException) {} else { throw ex }\n } finally {}\n return null\n};\nLineSegment.prototype.maxY = function maxY () {\n return Math.max(this.p0.y, this.p1.y)\n};\nLineSegment.prototype.pointAlongOffset = function pointAlongOffset (segmentLengthFraction, offsetDistance) {\n var segx = this.p0.x + segmentLengthFraction * (this.p1.x - this.p0.x);\n var segy = this.p0.y + segmentLengthFraction * (this.p1.y - this.p0.y);\n var dx = this.p1.x - this.p0.x;\n var dy = this.p1.y - this.p0.y;\n var len = Math.sqrt(dx * dx + dy * dy);\n var ux = 0.0;\n var uy = 0.0;\n if (offsetDistance !== 0.0) {\n if (len <= 0.0) { throw new Error('Cannot compute offset from zero-length line segment') }\n ux = offsetDistance * dx / len;\n uy = offsetDistance * dy / len;\n }\n var offsetx = segx - uy;\n var offsety = segy + ux;\n var coord = new Coordinate(offsetx, offsety);\n return coord\n};\nLineSegment.prototype.setCoordinates = function setCoordinates () {\n if (arguments.length === 1) {\n var ls = arguments[0];\n this.setCoordinates(ls.p0, ls.p1);\n } else if (arguments.length === 2) {\n var p0 = arguments[0];\n var p1 = arguments[1];\n this.p0.x = p0.x;\n this.p0.y = p0.y;\n this.p1.x = p1.x;\n this.p1.y = p1.y;\n }\n};\nLineSegment.prototype.segmentFraction = function segmentFraction (inputPt) {\n var segFrac = this.projectionFactor(inputPt);\n if (segFrac < 0.0) { segFrac = 0.0; } else if (segFrac > 1.0 || Double.isNaN(segFrac)) { segFrac = 1.0; }\n return segFrac\n};\nLineSegment.prototype.toString = function toString () {\n return 'LINESTRING( ' + this.p0.x + ' ' + this.p0.y + ', ' + this.p1.x + ' ' + this.p1.y + ')'\n};\nLineSegment.prototype.isHorizontal = function isHorizontal () {\n return this.p0.y === this.p1.y\n};\nLineSegment.prototype.distance = function distance () {\n if (arguments[0] instanceof LineSegment) {\n var ls = arguments[0];\n return CGAlgorithms.distanceLineLine(this.p0, this.p1, ls.p0, ls.p1)\n } else if (arguments[0] instanceof Coordinate) {\n var p = arguments[0];\n return CGAlgorithms.distancePointLine(p, this.p0, this.p1)\n }\n};\nLineSegment.prototype.pointAlong = function pointAlong (segmentLengthFraction) {\n var coord = new Coordinate();\n coord.x = this.p0.x + segmentLengthFraction * (this.p1.x - this.p0.x);\n coord.y = this.p0.y + segmentLengthFraction * (this.p1.y - this.p0.y);\n return coord\n};\nLineSegment.prototype.hashCode = function hashCode () {\n var bits0 = Double.doubleToLongBits(this.p0.x);\n bits0 ^= Double.doubleToLongBits(this.p0.y) * 31;\n var hash0 = Math.trunc(bits0) ^ Math.trunc(bits0 >> 32);\n var bits1 = Double.doubleToLongBits(this.p1.x);\n bits1 ^= Double.doubleToLongBits(this.p1.y) * 31;\n var hash1 = Math.trunc(bits1) ^ Math.trunc(bits1 >> 32);\n return hash0 ^ hash1\n};\nLineSegment.prototype.interfaces_ = function interfaces_ () {\n return [Comparable, Serializable]\n};\nLineSegment.prototype.getClass = function getClass () {\n return LineSegment\n};\nLineSegment.midPoint = function midPoint (p0, p1) {\n return new Coordinate((p0.x + p1.x) / 2, (p0.y + p1.y) / 2)\n};\nstaticAccessors$24.serialVersionUID.get = function () { return 3252005833466256227 };\n\nObject.defineProperties( LineSegment, staticAccessors$24 );\n\nvar MonotoneChainOverlapAction = function MonotoneChainOverlapAction () {\n this.tempEnv1 = new Envelope();\n this.tempEnv2 = new Envelope();\n this._overlapSeg1 = new LineSegment();\n this._overlapSeg2 = new LineSegment();\n};\nMonotoneChainOverlapAction.prototype.overlap = function overlap () {\n if (arguments.length === 2) {\n // const seg1 = arguments[0]\n // const seg2 = arguments[1]\n } else if (arguments.length === 4) {\n var mc1 = arguments[0];\n var start1 = arguments[1];\n var mc2 = arguments[2];\n var start2 = arguments[3];\n mc1.getLineSegment(start1, this._overlapSeg1);\n mc2.getLineSegment(start2, this._overlapSeg2);\n this.overlap(this._overlapSeg1, this._overlapSeg2);\n }\n};\nMonotoneChainOverlapAction.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nMonotoneChainOverlapAction.prototype.getClass = function getClass () {\n return MonotoneChainOverlapAction\n};\n\nvar MonotoneChain = function MonotoneChain () {\n this._pts = null;\n this._start = null;\n this._end = null;\n this._env = null;\n this._context = null;\n this._id = null;\n var pts = arguments[0];\n var start = arguments[1];\n var end = arguments[2];\n var context = arguments[3];\n this._pts = pts;\n this._start = start;\n this._end = end;\n this._context = context;\n};\nMonotoneChain.prototype.getLineSegment = function getLineSegment (index, ls) {\n ls.p0 = this._pts[index];\n ls.p1 = this._pts[index + 1];\n};\nMonotoneChain.prototype.computeSelect = function computeSelect (searchEnv, start0, end0, mcs) {\n var p0 = this._pts[start0];\n var p1 = this._pts[end0];\n mcs.tempEnv1.init(p0, p1);\n if (end0 - start0 === 1) {\n mcs.select(this, start0);\n return null\n }\n if (!searchEnv.intersects(mcs.tempEnv1)) { return null }\n var mid = Math.trunc((start0 + end0) / 2);\n if (start0 < mid) {\n this.computeSelect(searchEnv, start0, mid, mcs);\n }\n if (mid < end0) {\n this.computeSelect(searchEnv, mid, end0, mcs);\n }\n};\nMonotoneChain.prototype.getCoordinates = function getCoordinates () {\n var this$1 = this;\n\n var coord = new Array(this._end - this._start + 1).fill(null);\n var index = 0;\n for (var i = this._start; i <= this._end; i++) {\n coord[index++] = this$1._pts[i];\n }\n return coord\n};\nMonotoneChain.prototype.computeOverlaps = function computeOverlaps (mc, mco) {\n this.computeOverlapsInternal(this._start, this._end, mc, mc._start, mc._end, mco);\n};\nMonotoneChain.prototype.setId = function setId (id) {\n this._id = id;\n};\nMonotoneChain.prototype.select = function select (searchEnv, mcs) {\n this.computeSelect(searchEnv, this._start, this._end, mcs);\n};\nMonotoneChain.prototype.getEnvelope = function getEnvelope () {\n if (this._env === null) {\n var p0 = this._pts[this._start];\n var p1 = this._pts[this._end];\n this._env = new Envelope(p0, p1);\n }\n return this._env\n};\nMonotoneChain.prototype.getEndIndex = function getEndIndex () {\n return this._end\n};\nMonotoneChain.prototype.getStartIndex = function getStartIndex () {\n return this._start\n};\nMonotoneChain.prototype.getContext = function getContext () {\n return this._context\n};\nMonotoneChain.prototype.getId = function getId () {\n return this._id\n};\nMonotoneChain.prototype.computeOverlapsInternal = function computeOverlapsInternal (start0, end0, mc, start1, end1, mco) {\n var p00 = this._pts[start0];\n var p01 = this._pts[end0];\n var p10 = mc._pts[start1];\n var p11 = mc._pts[end1];\n if (end0 - start0 === 1 && end1 - start1 === 1) {\n mco.overlap(this, start0, mc, start1);\n return null\n }\n mco.tempEnv1.init(p00, p01);\n mco.tempEnv2.init(p10, p11);\n if (!mco.tempEnv1.intersects(mco.tempEnv2)) { return null }\n var mid0 = Math.trunc((start0 + end0) / 2);\n var mid1 = Math.trunc((start1 + end1) / 2);\n if (start0 < mid0) {\n if (start1 < mid1) { this.computeOverlapsInternal(start0, mid0, mc, start1, mid1, mco); }\n if (mid1 < end1) { this.computeOverlapsInternal(start0, mid0, mc, mid1, end1, mco); }\n }\n if (mid0 < end0) {\n if (start1 < mid1) { this.computeOverlapsInternal(mid0, end0, mc, start1, mid1, mco); }\n if (mid1 < end1) { this.computeOverlapsInternal(mid0, end0, mc, mid1, end1, mco); }\n }\n};\nMonotoneChain.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nMonotoneChain.prototype.getClass = function getClass () {\n return MonotoneChain\n};\n\nvar MonotoneChainBuilder = function MonotoneChainBuilder () {};\n\nMonotoneChainBuilder.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nMonotoneChainBuilder.prototype.getClass = function getClass () {\n return MonotoneChainBuilder\n};\nMonotoneChainBuilder.getChainStartIndices = function getChainStartIndices (pts) {\n var start = 0;\n var startIndexList = new ArrayList();\n startIndexList.add(new Integer(start));\n do {\n var last = MonotoneChainBuilder.findChainEnd(pts, start);\n startIndexList.add(new Integer(last));\n start = last;\n } while (start < pts.length - 1)\n var startIndex = MonotoneChainBuilder.toIntArray(startIndexList);\n return startIndex\n};\nMonotoneChainBuilder.findChainEnd = function findChainEnd (pts, start) {\n var safeStart = start;\n while (safeStart < pts.length - 1 && pts[safeStart].equals2D(pts[safeStart + 1])) {\n safeStart++;\n }\n if (safeStart >= pts.length - 1) {\n return pts.length - 1\n }\n var chainQuad = Quadrant.quadrant(pts[safeStart], pts[safeStart + 1]);\n var last = start + 1;\n while (last < pts.length) {\n if (!pts[last - 1].equals2D(pts[last])) {\n var quad = Quadrant.quadrant(pts[last - 1], pts[last]);\n if (quad !== chainQuad) { break }\n }\n last++;\n }\n return last - 1\n};\nMonotoneChainBuilder.getChains = function getChains () {\n if (arguments.length === 1) {\n var pts = arguments[0];\n return MonotoneChainBuilder.getChains(pts, null)\n } else if (arguments.length === 2) {\n var pts$1 = arguments[0];\n var context = arguments[1];\n var mcList = new ArrayList();\n var startIndex = MonotoneChainBuilder.getChainStartIndices(pts$1);\n for (var i = 0; i < startIndex.length - 1; i++) {\n var mc = new MonotoneChain(pts$1, startIndex[i], startIndex[i + 1], context);\n mcList.add(mc);\n }\n return mcList\n }\n};\nMonotoneChainBuilder.toIntArray = function toIntArray (list) {\n var array = new Array(list.size()).fill(null);\n for (var i = 0; i < array.length; i++) {\n array[i] = list.get(i).intValue();\n }\n return array\n};\n\nvar Noder = function Noder () {};\n\nNoder.prototype.computeNodes = function computeNodes (segStrings) {};\nNoder.prototype.getNodedSubstrings = function getNodedSubstrings () {};\nNoder.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nNoder.prototype.getClass = function getClass () {\n return Noder\n};\n\nvar SinglePassNoder = function SinglePassNoder () {\n this._segInt = null;\n if (arguments.length === 0) {} else if (arguments.length === 1) {\n var segInt = arguments[0];\n this.setSegmentIntersector(segInt);\n }\n};\nSinglePassNoder.prototype.setSegmentIntersector = function setSegmentIntersector (segInt) {\n this._segInt = segInt;\n};\nSinglePassNoder.prototype.interfaces_ = function interfaces_ () {\n return [Noder]\n};\nSinglePassNoder.prototype.getClass = function getClass () {\n return SinglePassNoder\n};\n\nvar MCIndexNoder = (function (SinglePassNoder$$1) {\n function MCIndexNoder (si) {\n if (si) { SinglePassNoder$$1.call(this, si); }\n else { SinglePassNoder$$1.call(this); }\n this._monoChains = new ArrayList();\n this._index = new STRtree();\n this._idCounter = 0;\n this._nodedSegStrings = null;\n this._nOverlaps = 0;\n }\n\n if ( SinglePassNoder$$1 ) MCIndexNoder.__proto__ = SinglePassNoder$$1;\n MCIndexNoder.prototype = Object.create( SinglePassNoder$$1 && SinglePassNoder$$1.prototype );\n MCIndexNoder.prototype.constructor = MCIndexNoder;\n\n var staticAccessors = { SegmentOverlapAction: { configurable: true } };\n MCIndexNoder.prototype.getMonotoneChains = function getMonotoneChains () {\n return this._monoChains\n };\n MCIndexNoder.prototype.getNodedSubstrings = function getNodedSubstrings () {\n return NodedSegmentString.getNodedSubstrings(this._nodedSegStrings)\n };\n MCIndexNoder.prototype.getIndex = function getIndex () {\n return this._index\n };\n MCIndexNoder.prototype.add = function add (segStr) {\n var this$1 = this;\n\n var segChains = MonotoneChainBuilder.getChains(segStr.getCoordinates(), segStr);\n for (var i = segChains.iterator(); i.hasNext();) {\n var mc = i.next();\n mc.setId(this$1._idCounter++);\n this$1._index.insert(mc.getEnvelope(), mc);\n this$1._monoChains.add(mc);\n }\n };\n MCIndexNoder.prototype.computeNodes = function computeNodes (inputSegStrings) {\n var this$1 = this;\n\n this._nodedSegStrings = inputSegStrings;\n for (var i = inputSegStrings.iterator(); i.hasNext();) {\n this$1.add(i.next());\n }\n this.intersectChains();\n };\n MCIndexNoder.prototype.intersectChains = function intersectChains () {\n var this$1 = this;\n\n var overlapAction = new SegmentOverlapAction(this._segInt);\n for (var i = this._monoChains.iterator(); i.hasNext();) {\n var queryChain = i.next();\n var overlapChains = this$1._index.query(queryChain.getEnvelope());\n for (var j = overlapChains.iterator(); j.hasNext();) {\n var testChain = j.next();\n if (testChain.getId() > queryChain.getId()) {\n queryChain.computeOverlaps(testChain, overlapAction);\n this$1._nOverlaps++;\n }\n if (this$1._segInt.isDone()) { return null }\n }\n }\n };\n MCIndexNoder.prototype.interfaces_ = function interfaces_ () {\n return []\n };\n MCIndexNoder.prototype.getClass = function getClass () {\n return MCIndexNoder\n };\n staticAccessors.SegmentOverlapAction.get = function () { return SegmentOverlapAction };\n\n Object.defineProperties( MCIndexNoder, staticAccessors );\n\n return MCIndexNoder;\n}(SinglePassNoder));\n\nvar SegmentOverlapAction = (function (MonotoneChainOverlapAction$$1) {\n function SegmentOverlapAction () {\n MonotoneChainOverlapAction$$1.call(this);\n this._si = null;\n var si = arguments[0];\n this._si = si;\n }\n\n if ( MonotoneChainOverlapAction$$1 ) SegmentOverlapAction.__proto__ = MonotoneChainOverlapAction$$1;\n SegmentOverlapAction.prototype = Object.create( MonotoneChainOverlapAction$$1 && MonotoneChainOverlapAction$$1.prototype );\n SegmentOverlapAction.prototype.constructor = SegmentOverlapAction;\n SegmentOverlapAction.prototype.overlap = function overlap () {\n if (arguments.length === 4) {\n var mc1 = arguments[0];\n var start1 = arguments[1];\n var mc2 = arguments[2];\n var start2 = arguments[3];\n var ss1 = mc1.getContext();\n var ss2 = mc2.getContext();\n this._si.processIntersections(ss1, start1, ss2, start2);\n } else { return MonotoneChainOverlapAction$$1.prototype.overlap.apply(this, arguments) }\n };\n SegmentOverlapAction.prototype.interfaces_ = function interfaces_ () {\n return []\n };\n SegmentOverlapAction.prototype.getClass = function getClass () {\n return SegmentOverlapAction\n };\n\n return SegmentOverlapAction;\n}(MonotoneChainOverlapAction));\n\nvar BufferParameters = function BufferParameters () {\n this._quadrantSegments = BufferParameters.DEFAULT_QUADRANT_SEGMENTS;\n this._endCapStyle = BufferParameters.CAP_ROUND;\n this._joinStyle = BufferParameters.JOIN_ROUND;\n this._mitreLimit = BufferParameters.DEFAULT_MITRE_LIMIT;\n this._isSingleSided = false;\n this._simplifyFactor = BufferParameters.DEFAULT_SIMPLIFY_FACTOR;\n\n if (arguments.length === 0) {} else if (arguments.length === 1) {\n var quadrantSegments = arguments[0];\n this.setQuadrantSegments(quadrantSegments);\n } else if (arguments.length === 2) {\n var quadrantSegments$1 = arguments[0];\n var endCapStyle = arguments[1];\n this.setQuadrantSegments(quadrantSegments$1);\n this.setEndCapStyle(endCapStyle);\n } else if (arguments.length === 4) {\n var quadrantSegments$2 = arguments[0];\n var endCapStyle$1 = arguments[1];\n var joinStyle = arguments[2];\n var mitreLimit = arguments[3];\n this.setQuadrantSegments(quadrantSegments$2);\n this.setEndCapStyle(endCapStyle$1);\n this.setJoinStyle(joinStyle);\n this.setMitreLimit(mitreLimit);\n }\n};\n\nvar staticAccessors$25 = { CAP_ROUND: { configurable: true },CAP_FLAT: { configurable: true },CAP_SQUARE: { configurable: true },JOIN_ROUND: { configurable: true },JOIN_MITRE: { configurable: true },JOIN_BEVEL: { configurable: true },DEFAULT_QUADRANT_SEGMENTS: { configurable: true },DEFAULT_MITRE_LIMIT: { configurable: true },DEFAULT_SIMPLIFY_FACTOR: { configurable: true } };\nBufferParameters.prototype.getEndCapStyle = function getEndCapStyle () {\n return this._endCapStyle\n};\nBufferParameters.prototype.isSingleSided = function isSingleSided () {\n return this._isSingleSided\n};\nBufferParameters.prototype.setQuadrantSegments = function setQuadrantSegments (quadSegs) {\n this._quadrantSegments = quadSegs;\n if (this._quadrantSegments === 0) { this._joinStyle = BufferParameters.JOIN_BEVEL; }\n if (this._quadrantSegments < 0) {\n this._joinStyle = BufferParameters.JOIN_MITRE;\n this._mitreLimit = Math.abs(this._quadrantSegments);\n }\n if (quadSegs <= 0) {\n this._quadrantSegments = 1;\n }\n if (this._joinStyle !== BufferParameters.JOIN_ROUND) {\n this._quadrantSegments = BufferParameters.DEFAULT_QUADRANT_SEGMENTS;\n }\n};\nBufferParameters.prototype.getJoinStyle = function getJoinStyle () {\n return this._joinStyle\n};\nBufferParameters.prototype.setJoinStyle = function setJoinStyle (joinStyle) {\n this._joinStyle = joinStyle;\n};\nBufferParameters.prototype.setSimplifyFactor = function setSimplifyFactor (simplifyFactor) {\n this._simplifyFactor = simplifyFactor < 0 ? 0 : simplifyFactor;\n};\nBufferParameters.prototype.getSimplifyFactor = function getSimplifyFactor () {\n return this._simplifyFactor\n};\nBufferParameters.prototype.getQuadrantSegments = function getQuadrantSegments () {\n return this._quadrantSegments\n};\nBufferParameters.prototype.setEndCapStyle = function setEndCapStyle (endCapStyle) {\n this._endCapStyle = endCapStyle;\n};\nBufferParameters.prototype.getMitreLimit = function getMitreLimit () {\n return this._mitreLimit\n};\nBufferParameters.prototype.setMitreLimit = function setMitreLimit (mitreLimit) {\n this._mitreLimit = mitreLimit;\n};\nBufferParameters.prototype.setSingleSided = function setSingleSided (isSingleSided) {\n this._isSingleSided = isSingleSided;\n};\nBufferParameters.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nBufferParameters.prototype.getClass = function getClass () {\n return BufferParameters\n};\nBufferParameters.bufferDistanceError = function bufferDistanceError (quadSegs) {\n var alpha = Math.PI / 2.0 / quadSegs;\n return 1 - Math.cos(alpha / 2.0)\n};\nstaticAccessors$25.CAP_ROUND.get = function () { return 1 };\nstaticAccessors$25.CAP_FLAT.get = function () { return 2 };\nstaticAccessors$25.CAP_SQUARE.get = function () { return 3 };\nstaticAccessors$25.JOIN_ROUND.get = function () { return 1 };\nstaticAccessors$25.JOIN_MITRE.get = function () { return 2 };\nstaticAccessors$25.JOIN_BEVEL.get = function () { return 3 };\nstaticAccessors$25.DEFAULT_QUADRANT_SEGMENTS.get = function () { return 8 };\nstaticAccessors$25.DEFAULT_MITRE_LIMIT.get = function () { return 5.0 };\nstaticAccessors$25.DEFAULT_SIMPLIFY_FACTOR.get = function () { return 0.01 };\n\nObject.defineProperties( BufferParameters, staticAccessors$25 );\n\nvar BufferInputLineSimplifier = function BufferInputLineSimplifier (inputLine) {\n this._distanceTol = null;\n this._isDeleted = null;\n this._angleOrientation = CGAlgorithms.COUNTERCLOCKWISE;\n this._inputLine = inputLine || null;\n};\n\nvar staticAccessors$26 = { INIT: { configurable: true },DELETE: { configurable: true },KEEP: { configurable: true },NUM_PTS_TO_CHECK: { configurable: true } };\nBufferInputLineSimplifier.prototype.isDeletable = function isDeletable (i0, i1, i2, distanceTol) {\n var p0 = this._inputLine[i0];\n var p1 = this._inputLine[i1];\n var p2 = this._inputLine[i2];\n if (!this.isConcave(p0, p1, p2)) { return false }\n if (!this.isShallow(p0, p1, p2, distanceTol)) { return false }\n return this.isShallowSampled(p0, p1, i0, i2, distanceTol)\n};\nBufferInputLineSimplifier.prototype.deleteShallowConcavities = function deleteShallowConcavities () {\n var this$1 = this;\n\n var index = 1;\n // const maxIndex = this._inputLine.length - 1\n var midIndex = this.findNextNonDeletedIndex(index);\n var lastIndex = this.findNextNonDeletedIndex(midIndex);\n var isChanged = false;\n while (lastIndex < this._inputLine.length) {\n var isMiddleVertexDeleted = false;\n if (this$1.isDeletable(index, midIndex, lastIndex, this$1._distanceTol)) {\n this$1._isDeleted[midIndex] = BufferInputLineSimplifier.DELETE;\n isMiddleVertexDeleted = true;\n isChanged = true;\n }\n if (isMiddleVertexDeleted) { index = lastIndex; } else { index = midIndex; }\n midIndex = this$1.findNextNonDeletedIndex(index);\n lastIndex = this$1.findNextNonDeletedIndex(midIndex);\n }\n return isChanged\n};\nBufferInputLineSimplifier.prototype.isShallowConcavity = function isShallowConcavity (p0, p1, p2, distanceTol) {\n var orientation = CGAlgorithms.computeOrientation(p0, p1, p2);\n var isAngleToSimplify = orientation === this._angleOrientation;\n if (!isAngleToSimplify) { return false }\n var dist = CGAlgorithms.distancePointLine(p1, p0, p2);\n return dist < distanceTol\n};\nBufferInputLineSimplifier.prototype.isShallowSampled = function isShallowSampled (p0, p2, i0, i2, distanceTol) {\n var this$1 = this;\n\n var inc = Math.trunc((i2 - i0) / BufferInputLineSimplifier.NUM_PTS_TO_CHECK);\n if (inc <= 0) { inc = 1; }\n for (var i = i0; i < i2; i += inc) {\n if (!this$1.isShallow(p0, p2, this$1._inputLine[i], distanceTol)) { return false }\n }\n return true\n};\nBufferInputLineSimplifier.prototype.isConcave = function isConcave (p0, p1, p2) {\n var orientation = CGAlgorithms.computeOrientation(p0, p1, p2);\n var isConcave = orientation === this._angleOrientation;\n return isConcave\n};\nBufferInputLineSimplifier.prototype.simplify = function simplify (distanceTol) {\n var this$1 = this;\n\n this._distanceTol = Math.abs(distanceTol);\n if (distanceTol < 0) { this._angleOrientation = CGAlgorithms.CLOCKWISE; }\n this._isDeleted = new Array(this._inputLine.length).fill(null);\n var isChanged = false;\n do {\n isChanged = this$1.deleteShallowConcavities();\n } while (isChanged)\n return this.collapseLine()\n};\nBufferInputLineSimplifier.prototype.findNextNonDeletedIndex = function findNextNonDeletedIndex (index) {\n var next = index + 1;\n while (next < this._inputLine.length && this._isDeleted[next] === BufferInputLineSimplifier.DELETE) { next++; }\n return next\n};\nBufferInputLineSimplifier.prototype.isShallow = function isShallow (p0, p1, p2, distanceTol) {\n var dist = CGAlgorithms.distancePointLine(p1, p0, p2);\n return dist < distanceTol\n};\nBufferInputLineSimplifier.prototype.collapseLine = function collapseLine () {\n var this$1 = this;\n\n var coordList = new CoordinateList();\n for (var i = 0; i < this._inputLine.length; i++) {\n if (this$1._isDeleted[i] !== BufferInputLineSimplifier.DELETE) { coordList.add(this$1._inputLine[i]); }\n }\n return coordList.toCoordinateArray()\n};\nBufferInputLineSimplifier.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nBufferInputLineSimplifier.prototype.getClass = function getClass () {\n return BufferInputLineSimplifier\n};\nBufferInputLineSimplifier.simplify = function simplify (inputLine, distanceTol) {\n var simp = new BufferInputLineSimplifier(inputLine);\n return simp.simplify(distanceTol)\n};\nstaticAccessors$26.INIT.get = function () { return 0 };\nstaticAccessors$26.DELETE.get = function () { return 1 };\nstaticAccessors$26.KEEP.get = function () { return 1 };\nstaticAccessors$26.NUM_PTS_TO_CHECK.get = function () { return 10 };\n\nObject.defineProperties( BufferInputLineSimplifier, staticAccessors$26 );\n\nvar OffsetSegmentString = function OffsetSegmentString () {\n this._ptList = null;\n this._precisionModel = null;\n this._minimimVertexDistance = 0.0;\n this._ptList = new ArrayList();\n};\n\nvar staticAccessors$28 = { COORDINATE_ARRAY_TYPE: { configurable: true } };\nOffsetSegmentString.prototype.getCoordinates = function getCoordinates () {\n var coord = this._ptList.toArray(OffsetSegmentString.COORDINATE_ARRAY_TYPE);\n return coord\n};\nOffsetSegmentString.prototype.setPrecisionModel = function setPrecisionModel (precisionModel) {\n this._precisionModel = precisionModel;\n};\nOffsetSegmentString.prototype.addPt = function addPt (pt) {\n var bufPt = new Coordinate(pt);\n this._precisionModel.makePrecise(bufPt);\n if (this.isRedundant(bufPt)) { return null }\n this._ptList.add(bufPt);\n};\nOffsetSegmentString.prototype.revere = function revere () {};\nOffsetSegmentString.prototype.addPts = function addPts (pt, isForward) {\n var this$1 = this;\n\n if (isForward) {\n for (var i = 0; i < pt.length; i++) {\n this$1.addPt(pt[i]);\n }\n } else {\n for (var i$1 = pt.length - 1; i$1 >= 0; i$1--) {\n this$1.addPt(pt[i$1]);\n }\n }\n};\nOffsetSegmentString.prototype.isRedundant = function isRedundant (pt) {\n if (this._ptList.size() < 1) { return false }\n var lastPt = this._ptList.get(this._ptList.size() - 1);\n var ptDist = pt.distance(lastPt);\n if (ptDist < this._minimimVertexDistance) { return true }\n return false\n};\nOffsetSegmentString.prototype.toString = function toString () {\n var fact = new GeometryFactory();\n var line = fact.createLineString(this.getCoordinates());\n return line.toString()\n};\nOffsetSegmentString.prototype.closeRing = function closeRing () {\n if (this._ptList.size() < 1) { return null }\n var startPt = new Coordinate(this._ptList.get(0));\n var lastPt = this._ptList.get(this._ptList.size() - 1);\n // const last2Pt = null\n // if (this._ptList.size() >= 2) last2Pt = this._ptList.get(this._ptList.size() - 2)\n if (startPt.equals(lastPt)) { return null }\n this._ptList.add(startPt);\n};\nOffsetSegmentString.prototype.setMinimumVertexDistance = function setMinimumVertexDistance (minimimVertexDistance) {\n this._minimimVertexDistance = minimimVertexDistance;\n};\nOffsetSegmentString.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nOffsetSegmentString.prototype.getClass = function getClass () {\n return OffsetSegmentString\n};\nstaticAccessors$28.COORDINATE_ARRAY_TYPE.get = function () { return new Array(0).fill(null) };\n\nObject.defineProperties( OffsetSegmentString, staticAccessors$28 );\n\nvar Angle = function Angle () {};\n\nvar staticAccessors$29 = { PI_TIMES_2: { configurable: true },PI_OVER_2: { configurable: true },PI_OVER_4: { configurable: true },COUNTERCLOCKWISE: { configurable: true },CLOCKWISE: { configurable: true },NONE: { configurable: true } };\n\nAngle.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nAngle.prototype.getClass = function getClass () {\n return Angle\n};\nAngle.toDegrees = function toDegrees (radians) {\n return radians * 180 / Math.PI\n};\nAngle.normalize = function normalize (angle) {\n while (angle > Math.PI) { angle -= Angle.PI_TIMES_2; }\n while (angle <= -Math.PI) { angle += Angle.PI_TIMES_2; }\n return angle\n};\nAngle.angle = function angle () {\n if (arguments.length === 1) {\n var p = arguments[0];\n return Math.atan2(p.y, p.x)\n } else if (arguments.length === 2) {\n var p0 = arguments[0];\n var p1 = arguments[1];\n var dx = p1.x - p0.x;\n var dy = p1.y - p0.y;\n return Math.atan2(dy, dx)\n }\n};\nAngle.isAcute = function isAcute (p0, p1, p2) {\n var dx0 = p0.x - p1.x;\n var dy0 = p0.y - p1.y;\n var dx1 = p2.x - p1.x;\n var dy1 = p2.y - p1.y;\n var dotprod = dx0 * dx1 + dy0 * dy1;\n return dotprod > 0\n};\nAngle.isObtuse = function isObtuse (p0, p1, p2) {\n var dx0 = p0.x - p1.x;\n var dy0 = p0.y - p1.y;\n var dx1 = p2.x - p1.x;\n var dy1 = p2.y - p1.y;\n var dotprod = dx0 * dx1 + dy0 * dy1;\n return dotprod < 0\n};\nAngle.interiorAngle = function interiorAngle (p0, p1, p2) {\n var anglePrev = Angle.angle(p1, p0);\n var angleNext = Angle.angle(p1, p2);\n return Math.abs(angleNext - anglePrev)\n};\nAngle.normalizePositive = function normalizePositive (angle) {\n if (angle < 0.0) {\n while (angle < 0.0) { angle += Angle.PI_TIMES_2; }\n if (angle >= Angle.PI_TIMES_2) { angle = 0.0; }\n } else {\n while (angle >= Angle.PI_TIMES_2) { angle -= Angle.PI_TIMES_2; }\n if (angle < 0.0) { angle = 0.0; }\n }\n return angle\n};\nAngle.angleBetween = function angleBetween (tip1, tail, tip2) {\n var a1 = Angle.angle(tail, tip1);\n var a2 = Angle.angle(tail, tip2);\n return Angle.diff(a1, a2)\n};\nAngle.diff = function diff (ang1, ang2) {\n var delAngle = null;\n if (ang1 < ang2) {\n delAngle = ang2 - ang1;\n } else {\n delAngle = ang1 - ang2;\n }\n if (delAngle > Math.PI) {\n delAngle = 2 * Math.PI - delAngle;\n }\n return delAngle\n};\nAngle.toRadians = function toRadians (angleDegrees) {\n return angleDegrees * Math.PI / 180.0\n};\nAngle.getTurn = function getTurn (ang1, ang2) {\n var crossproduct = Math.sin(ang2 - ang1);\n if (crossproduct > 0) {\n return Angle.COUNTERCLOCKWISE\n }\n if (crossproduct < 0) {\n return Angle.CLOCKWISE\n }\n return Angle.NONE\n};\nAngle.angleBetweenOriented = function angleBetweenOriented (tip1, tail, tip2) {\n var a1 = Angle.angle(tail, tip1);\n var a2 = Angle.angle(tail, tip2);\n var angDel = a2 - a1;\n if (angDel <= -Math.PI) { return angDel + Angle.PI_TIMES_2 }\n if (angDel > Math.PI) { return angDel - Angle.PI_TIMES_2 }\n return angDel\n};\nstaticAccessors$29.PI_TIMES_2.get = function () { return 2.0 * Math.PI };\nstaticAccessors$29.PI_OVER_2.get = function () { return Math.PI / 2.0 };\nstaticAccessors$29.PI_OVER_4.get = function () { return Math.PI / 4.0 };\nstaticAccessors$29.COUNTERCLOCKWISE.get = function () { return CGAlgorithms.COUNTERCLOCKWISE };\nstaticAccessors$29.CLOCKWISE.get = function () { return CGAlgorithms.CLOCKWISE };\nstaticAccessors$29.NONE.get = function () { return CGAlgorithms.COLLINEAR };\n\nObject.defineProperties( Angle, staticAccessors$29 );\n\nvar OffsetSegmentGenerator = function OffsetSegmentGenerator () {\n this._maxCurveSegmentError = 0.0;\n this._filletAngleQuantum = null;\n this._closingSegLengthFactor = 1;\n this._segList = null;\n this._distance = 0.0;\n this._precisionModel = null;\n this._bufParams = null;\n this._li = null;\n this._s0 = null;\n this._s1 = null;\n this._s2 = null;\n this._seg0 = new LineSegment();\n this._seg1 = new LineSegment();\n this._offset0 = new LineSegment();\n this._offset1 = new LineSegment();\n this._side = 0;\n this._hasNarrowConcaveAngle = false;\n var precisionModel = arguments[0];\n var bufParams = arguments[1];\n var distance = arguments[2];\n this._precisionModel = precisionModel;\n this._bufParams = bufParams;\n this._li = new RobustLineIntersector();\n this._filletAngleQuantum = Math.PI / 2.0 / bufParams.getQuadrantSegments();\n if (bufParams.getQuadrantSegments() >= 8 && bufParams.getJoinStyle() === BufferParameters.JOIN_ROUND) { this._closingSegLengthFactor = OffsetSegmentGenerator.MAX_CLOSING_SEG_LEN_FACTOR; }\n this.init(distance);\n};\n\nvar staticAccessors$27 = { OFFSET_SEGMENT_SEPARATION_FACTOR: { configurable: true },INSIDE_TURN_VERTEX_SNAP_DISTANCE_FACTOR: { configurable: true },CURVE_VERTEX_SNAP_DISTANCE_FACTOR: { configurable: true },MAX_CLOSING_SEG_LEN_FACTOR: { configurable: true } };\nOffsetSegmentGenerator.prototype.addNextSegment = function addNextSegment (p, addStartPoint) {\n this._s0 = this._s1;\n this._s1 = this._s2;\n this._s2 = p;\n this._seg0.setCoordinates(this._s0, this._s1);\n this.computeOffsetSegment(this._seg0, this._side, this._distance, this._offset0);\n this._seg1.setCoordinates(this._s1, this._s2);\n this.computeOffsetSegment(this._seg1, this._side, this._distance, this._offset1);\n if (this._s1.equals(this._s2)) { return null }\n var orientation = CGAlgorithms.computeOrientation(this._s0, this._s1, this._s2);\n var outsideTurn = (orientation === CGAlgorithms.CLOCKWISE && this._side === Position.LEFT) || (orientation === CGAlgorithms.COUNTERCLOCKWISE && this._side === Position.RIGHT);\n if (orientation === 0) {\n this.addCollinear(addStartPoint);\n } else if (outsideTurn) {\n this.addOutsideTurn(orientation, addStartPoint);\n } else {\n this.addInsideTurn(orientation, addStartPoint);\n }\n};\nOffsetSegmentGenerator.prototype.addLineEndCap = function addLineEndCap (p0, p1) {\n var seg = new LineSegment(p0, p1);\n var offsetL = new LineSegment();\n this.computeOffsetSegment(seg, Position.LEFT, this._distance, offsetL);\n var offsetR = new LineSegment();\n this.computeOffsetSegment(seg, Position.RIGHT, this._distance, offsetR);\n var dx = p1.x - p0.x;\n var dy = p1.y - p0.y;\n var angle = Math.atan2(dy, dx);\n switch (this._bufParams.getEndCapStyle()) {\n case BufferParameters.CAP_ROUND:\n this._segList.addPt(offsetL.p1);\n this.addFilletArc(p1, angle + Math.PI / 2, angle - Math.PI / 2, CGAlgorithms.CLOCKWISE, this._distance);\n this._segList.addPt(offsetR.p1);\n break\n case BufferParameters.CAP_FLAT:\n this._segList.addPt(offsetL.p1);\n this._segList.addPt(offsetR.p1);\n break\n case BufferParameters.CAP_SQUARE:\n var squareCapSideOffset = new Coordinate();\n squareCapSideOffset.x = Math.abs(this._distance) * Math.cos(angle);\n squareCapSideOffset.y = Math.abs(this._distance) * Math.sin(angle);\n var squareCapLOffset = new Coordinate(offsetL.p1.x + squareCapSideOffset.x, offsetL.p1.y + squareCapSideOffset.y);\n var squareCapROffset = new Coordinate(offsetR.p1.x + squareCapSideOffset.x, offsetR.p1.y + squareCapSideOffset.y);\n this._segList.addPt(squareCapLOffset);\n this._segList.addPt(squareCapROffset);\n break\n default:\n }\n};\nOffsetSegmentGenerator.prototype.getCoordinates = function getCoordinates () {\n var pts = this._segList.getCoordinates();\n return pts\n};\nOffsetSegmentGenerator.prototype.addMitreJoin = function addMitreJoin (p, offset0, offset1, distance) {\n var isMitreWithinLimit = true;\n var intPt = null;\n try {\n intPt = HCoordinate.intersection(offset0.p0, offset0.p1, offset1.p0, offset1.p1);\n var mitreRatio = distance <= 0.0 ? 1.0 : intPt.distance(p) / Math.abs(distance);\n if (mitreRatio > this._bufParams.getMitreLimit()) { isMitreWithinLimit = false; }\n } catch (ex) {\n if (ex instanceof NotRepresentableException) {\n intPt = new Coordinate(0, 0);\n isMitreWithinLimit = false;\n } else { throw ex }\n } finally {}\n if (isMitreWithinLimit) {\n this._segList.addPt(intPt);\n } else {\n this.addLimitedMitreJoin(offset0, offset1, distance, this._bufParams.getMitreLimit());\n }\n};\nOffsetSegmentGenerator.prototype.addFilletCorner = function addFilletCorner (p, p0, p1, direction, radius) {\n var dx0 = p0.x - p.x;\n var dy0 = p0.y - p.y;\n var startAngle = Math.atan2(dy0, dx0);\n var dx1 = p1.x - p.x;\n var dy1 = p1.y - p.y;\n var endAngle = Math.atan2(dy1, dx1);\n if (direction === CGAlgorithms.CLOCKWISE) {\n if (startAngle <= endAngle) { startAngle += 2.0 * Math.PI; }\n } else {\n if (startAngle >= endAngle) { startAngle -= 2.0 * Math.PI; }\n }\n this._segList.addPt(p0);\n this.addFilletArc(p, startAngle, endAngle, direction, radius);\n this._segList.addPt(p1);\n};\nOffsetSegmentGenerator.prototype.addOutsideTurn = function addOutsideTurn (orientation, addStartPoint) {\n if (this._offset0.p1.distance(this._offset1.p0) < this._distance * OffsetSegmentGenerator.OFFSET_SEGMENT_SEPARATION_FACTOR) {\n this._segList.addPt(this._offset0.p1);\n return null\n }\n if (this._bufParams.getJoinStyle() === BufferParameters.JOIN_MITRE) {\n this.addMitreJoin(this._s1, this._offset0, this._offset1, this._distance);\n } else if (this._bufParams.getJoinStyle() === BufferParameters.JOIN_BEVEL) {\n this.addBevelJoin(this._offset0, this._offset1);\n } else {\n if (addStartPoint) { this._segList.addPt(this._offset0.p1); }\n this.addFilletCorner(this._s1, this._offset0.p1, this._offset1.p0, orientation, this._distance);\n this._segList.addPt(this._offset1.p0);\n }\n};\nOffsetSegmentGenerator.prototype.createSquare = function createSquare (p) {\n this._segList.addPt(new Coordinate(p.x + this._distance, p.y + this._distance));\n this._segList.addPt(new Coordinate(p.x + this._distance, p.y - this._distance));\n this._segList.addPt(new Coordinate(p.x - this._distance, p.y - this._distance));\n this._segList.addPt(new Coordinate(p.x - this._distance, p.y + this._distance));\n this._segList.closeRing();\n};\nOffsetSegmentGenerator.prototype.addSegments = function addSegments (pt, isForward) {\n this._segList.addPts(pt, isForward);\n};\nOffsetSegmentGenerator.prototype.addFirstSegment = function addFirstSegment () {\n this._segList.addPt(this._offset1.p0);\n};\nOffsetSegmentGenerator.prototype.addLastSegment = function addLastSegment () {\n this._segList.addPt(this._offset1.p1);\n};\nOffsetSegmentGenerator.prototype.initSideSegments = function initSideSegments (s1, s2, side) {\n this._s1 = s1;\n this._s2 = s2;\n this._side = side;\n this._seg1.setCoordinates(s1, s2);\n this.computeOffsetSegment(this._seg1, side, this._distance, this._offset1);\n};\nOffsetSegmentGenerator.prototype.addLimitedMitreJoin = function addLimitedMitreJoin (offset0, offset1, distance, mitreLimit) {\n var basePt = this._seg0.p1;\n var ang0 = Angle.angle(basePt, this._seg0.p0);\n // const ang1 = Angle.angle(basePt, this._seg1.p1)\n var angDiff = Angle.angleBetweenOriented(this._seg0.p0, basePt, this._seg1.p1);\n var angDiffHalf = angDiff / 2;\n var midAng = Angle.normalize(ang0 + angDiffHalf);\n var mitreMidAng = Angle.normalize(midAng + Math.PI);\n var mitreDist = mitreLimit * distance;\n var bevelDelta = mitreDist * Math.abs(Math.sin(angDiffHalf));\n var bevelHalfLen = distance - bevelDelta;\n var bevelMidX = basePt.x + mitreDist * Math.cos(mitreMidAng);\n var bevelMidY = basePt.y + mitreDist * Math.sin(mitreMidAng);\n var bevelMidPt = new Coordinate(bevelMidX, bevelMidY);\n var mitreMidLine = new LineSegment(basePt, bevelMidPt);\n var bevelEndLeft = mitreMidLine.pointAlongOffset(1.0, bevelHalfLen);\n var bevelEndRight = mitreMidLine.pointAlongOffset(1.0, -bevelHalfLen);\n if (this._side === Position.LEFT) {\n this._segList.addPt(bevelEndLeft);\n this._segList.addPt(bevelEndRight);\n } else {\n this._segList.addPt(bevelEndRight);\n this._segList.addPt(bevelEndLeft);\n }\n};\nOffsetSegmentGenerator.prototype.computeOffsetSegment = function computeOffsetSegment (seg, side, distance, offset) {\n var sideSign = side === Position.LEFT ? 1 : -1;\n var dx = seg.p1.x - seg.p0.x;\n var dy = seg.p1.y - seg.p0.y;\n var len = Math.sqrt(dx * dx + dy * dy);\n var ux = sideSign * distance * dx / len;\n var uy = sideSign * distance * dy / len;\n offset.p0.x = seg.p0.x - uy;\n offset.p0.y = seg.p0.y + ux;\n offset.p1.x = seg.p1.x - uy;\n offset.p1.y = seg.p1.y + ux;\n};\nOffsetSegmentGenerator.prototype.addFilletArc = function addFilletArc (p, startAngle, endAngle, direction, radius) {\n var this$1 = this;\n\n var directionFactor = direction === CGAlgorithms.CLOCKWISE ? -1 : 1;\n var totalAngle = Math.abs(startAngle - endAngle);\n var nSegs = Math.trunc(totalAngle / this._filletAngleQuantum + 0.5);\n if (nSegs < 1) { return null }\n var initAngle = 0.0;\n var currAngleInc = totalAngle / nSegs;\n var currAngle = initAngle;\n var pt = new Coordinate();\n while (currAngle < totalAngle) {\n var angle = startAngle + directionFactor * currAngle;\n pt.x = p.x + radius * Math.cos(angle);\n pt.y = p.y + radius * Math.sin(angle);\n this$1._segList.addPt(pt);\n currAngle += currAngleInc;\n }\n};\nOffsetSegmentGenerator.prototype.addInsideTurn = function addInsideTurn (orientation, addStartPoint) {\n this._li.computeIntersection(this._offset0.p0, this._offset0.p1, this._offset1.p0, this._offset1.p1);\n if (this._li.hasIntersection()) {\n this._segList.addPt(this._li.getIntersection(0));\n } else {\n this._hasNarrowConcaveAngle = true;\n if (this._offset0.p1.distance(this._offset1.p0) < this._distance * OffsetSegmentGenerator.INSIDE_TURN_VERTEX_SNAP_DISTANCE_FACTOR) {\n this._segList.addPt(this._offset0.p1);\n } else {\n this._segList.addPt(this._offset0.p1);\n if (this._closingSegLengthFactor > 0) {\n var mid0 = new Coordinate((this._closingSegLengthFactor * this._offset0.p1.x + this._s1.x) / (this._closingSegLengthFactor + 1), (this._closingSegLengthFactor * this._offset0.p1.y + this._s1.y) / (this._closingSegLengthFactor + 1));\n this._segList.addPt(mid0);\n var mid1 = new Coordinate((this._closingSegLengthFactor * this._offset1.p0.x + this._s1.x) / (this._closingSegLengthFactor + 1), (this._closingSegLengthFactor * this._offset1.p0.y + this._s1.y) / (this._closingSegLengthFactor + 1));\n this._segList.addPt(mid1);\n } else {\n this._segList.addPt(this._s1);\n }\n this._segList.addPt(this._offset1.p0);\n }\n }\n};\nOffsetSegmentGenerator.prototype.createCircle = function createCircle (p) {\n var pt = new Coordinate(p.x + this._distance, p.y);\n this._segList.addPt(pt);\n this.addFilletArc(p, 0.0, 2.0 * Math.PI, -1, this._distance);\n this._segList.closeRing();\n};\nOffsetSegmentGenerator.prototype.addBevelJoin = function addBevelJoin (offset0, offset1) {\n this._segList.addPt(offset0.p1);\n this._segList.addPt(offset1.p0);\n};\nOffsetSegmentGenerator.prototype.init = function init (distance) {\n this._distance = distance;\n this._maxCurveSegmentError = distance * (1 - Math.cos(this._filletAngleQuantum / 2.0));\n this._segList = new OffsetSegmentString();\n this._segList.setPrecisionModel(this._precisionModel);\n this._segList.setMinimumVertexDistance(distance * OffsetSegmentGenerator.CURVE_VERTEX_SNAP_DISTANCE_FACTOR);\n};\nOffsetSegmentGenerator.prototype.addCollinear = function addCollinear (addStartPoint) {\n this._li.computeIntersection(this._s0, this._s1, this._s1, this._s2);\n var numInt = this._li.getIntersectionNum();\n if (numInt >= 2) {\n if (this._bufParams.getJoinStyle() === BufferParameters.JOIN_BEVEL || this._bufParams.getJoinStyle() === BufferParameters.JOIN_MITRE) {\n if (addStartPoint) { this._segList.addPt(this._offset0.p1); }\n this._segList.addPt(this._offset1.p0);\n } else {\n this.addFilletCorner(this._s1, this._offset0.p1, this._offset1.p0, CGAlgorithms.CLOCKWISE, this._distance);\n }\n }\n};\nOffsetSegmentGenerator.prototype.closeRing = function closeRing () {\n this._segList.closeRing();\n};\nOffsetSegmentGenerator.prototype.hasNarrowConcaveAngle = function hasNarrowConcaveAngle () {\n return this._hasNarrowConcaveAngle\n};\nOffsetSegmentGenerator.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nOffsetSegmentGenerator.prototype.getClass = function getClass () {\n return OffsetSegmentGenerator\n};\nstaticAccessors$27.OFFSET_SEGMENT_SEPARATION_FACTOR.get = function () { return 1.0E-3 };\nstaticAccessors$27.INSIDE_TURN_VERTEX_SNAP_DISTANCE_FACTOR.get = function () { return 1.0E-3 };\nstaticAccessors$27.CURVE_VERTEX_SNAP_DISTANCE_FACTOR.get = function () { return 1.0E-6 };\nstaticAccessors$27.MAX_CLOSING_SEG_LEN_FACTOR.get = function () { return 80 };\n\nObject.defineProperties( OffsetSegmentGenerator, staticAccessors$27 );\n\nvar OffsetCurveBuilder = function OffsetCurveBuilder () {\n this._distance = 0.0;\n this._precisionModel = null;\n this._bufParams = null;\n var precisionModel = arguments[0];\n var bufParams = arguments[1];\n this._precisionModel = precisionModel;\n this._bufParams = bufParams;\n};\nOffsetCurveBuilder.prototype.getOffsetCurve = function getOffsetCurve (inputPts, distance) {\n this._distance = distance;\n if (distance === 0.0) { return null }\n var isRightSide = distance < 0.0;\n var posDistance = Math.abs(distance);\n var segGen = this.getSegGen(posDistance);\n if (inputPts.length <= 1) {\n this.computePointCurve(inputPts[0], segGen);\n } else {\n this.computeOffsetCurve(inputPts, isRightSide, segGen);\n }\n var curvePts = segGen.getCoordinates();\n if (isRightSide) { CoordinateArrays.reverse(curvePts); }\n return curvePts\n};\nOffsetCurveBuilder.prototype.computeSingleSidedBufferCurve = function computeSingleSidedBufferCurve (inputPts, isRightSide, segGen) {\n var distTol = this.simplifyTolerance(this._distance);\n if (isRightSide) {\n segGen.addSegments(inputPts, true);\n var simp2 = BufferInputLineSimplifier.simplify(inputPts, -distTol);\n var n2 = simp2.length - 1;\n segGen.initSideSegments(simp2[n2], simp2[n2 - 1], Position.LEFT);\n segGen.addFirstSegment();\n for (var i = n2 - 2; i >= 0; i--) {\n segGen.addNextSegment(simp2[i], true);\n }\n } else {\n segGen.addSegments(inputPts, false);\n var simp1 = BufferInputLineSimplifier.simplify(inputPts, distTol);\n var n1 = simp1.length - 1;\n segGen.initSideSegments(simp1[0], simp1[1], Position.LEFT);\n segGen.addFirstSegment();\n for (var i$1 = 2; i$1 <= n1; i$1++) {\n segGen.addNextSegment(simp1[i$1], true);\n }\n }\n segGen.addLastSegment();\n segGen.closeRing();\n};\nOffsetCurveBuilder.prototype.computeRingBufferCurve = function computeRingBufferCurve (inputPts, side, segGen) {\n var distTol = this.simplifyTolerance(this._distance);\n if (side === Position.RIGHT) { distTol = -distTol; }\n var simp = BufferInputLineSimplifier.simplify(inputPts, distTol);\n var n = simp.length - 1;\n segGen.initSideSegments(simp[n - 1], simp[0], side);\n for (var i = 1; i <= n; i++) {\n var addStartPoint = i !== 1;\n segGen.addNextSegment(simp[i], addStartPoint);\n }\n segGen.closeRing();\n};\nOffsetCurveBuilder.prototype.computeLineBufferCurve = function computeLineBufferCurve (inputPts, segGen) {\n var distTol = this.simplifyTolerance(this._distance);\n var simp1 = BufferInputLineSimplifier.simplify(inputPts, distTol);\n var n1 = simp1.length - 1;\n segGen.initSideSegments(simp1[0], simp1[1], Position.LEFT);\n for (var i = 2; i <= n1; i++) {\n segGen.addNextSegment(simp1[i], true);\n }\n segGen.addLastSegment();\n segGen.addLineEndCap(simp1[n1 - 1], simp1[n1]);\n var simp2 = BufferInputLineSimplifier.simplify(inputPts, -distTol);\n var n2 = simp2.length - 1;\n segGen.initSideSegments(simp2[n2], simp2[n2 - 1], Position.LEFT);\n for (var i$1 = n2 - 2; i$1 >= 0; i$1--) {\n segGen.addNextSegment(simp2[i$1], true);\n }\n segGen.addLastSegment();\n segGen.addLineEndCap(simp2[1], simp2[0]);\n segGen.closeRing();\n};\nOffsetCurveBuilder.prototype.computePointCurve = function computePointCurve (pt, segGen) {\n switch (this._bufParams.getEndCapStyle()) {\n case BufferParameters.CAP_ROUND:\n segGen.createCircle(pt);\n break\n case BufferParameters.CAP_SQUARE:\n segGen.createSquare(pt);\n break\n default:\n }\n};\nOffsetCurveBuilder.prototype.getLineCurve = function getLineCurve (inputPts, distance) {\n this._distance = distance;\n if (distance < 0.0 && !this._bufParams.isSingleSided()) { return null }\n if (distance === 0.0) { return null }\n var posDistance = Math.abs(distance);\n var segGen = this.getSegGen(posDistance);\n if (inputPts.length <= 1) {\n this.computePointCurve(inputPts[0], segGen);\n } else {\n if (this._bufParams.isSingleSided()) {\n var isRightSide = distance < 0.0;\n this.computeSingleSidedBufferCurve(inputPts, isRightSide, segGen);\n } else { this.computeLineBufferCurve(inputPts, segGen); }\n }\n var lineCoord = segGen.getCoordinates();\n return lineCoord\n};\nOffsetCurveBuilder.prototype.getBufferParameters = function getBufferParameters () {\n return this._bufParams\n};\nOffsetCurveBuilder.prototype.simplifyTolerance = function simplifyTolerance (bufDistance) {\n return bufDistance * this._bufParams.getSimplifyFactor()\n};\nOffsetCurveBuilder.prototype.getRingCurve = function getRingCurve (inputPts, side, distance) {\n this._distance = distance;\n if (inputPts.length <= 2) { return this.getLineCurve(inputPts, distance) }\n if (distance === 0.0) {\n return OffsetCurveBuilder.copyCoordinates(inputPts)\n }\n var segGen = this.getSegGen(distance);\n this.computeRingBufferCurve(inputPts, side, segGen);\n return segGen.getCoordinates()\n};\nOffsetCurveBuilder.prototype.computeOffsetCurve = function computeOffsetCurve (inputPts, isRightSide, segGen) {\n var distTol = this.simplifyTolerance(this._distance);\n if (isRightSide) {\n var simp2 = BufferInputLineSimplifier.simplify(inputPts, -distTol);\n var n2 = simp2.length - 1;\n segGen.initSideSegments(simp2[n2], simp2[n2 - 1], Position.LEFT);\n segGen.addFirstSegment();\n for (var i = n2 - 2; i >= 0; i--) {\n segGen.addNextSegment(simp2[i], true);\n }\n } else {\n var simp1 = BufferInputLineSimplifier.simplify(inputPts, distTol);\n var n1 = simp1.length - 1;\n segGen.initSideSegments(simp1[0], simp1[1], Position.LEFT);\n segGen.addFirstSegment();\n for (var i$1 = 2; i$1 <= n1; i$1++) {\n segGen.addNextSegment(simp1[i$1], true);\n }\n }\n segGen.addLastSegment();\n};\nOffsetCurveBuilder.prototype.getSegGen = function getSegGen (distance) {\n return new OffsetSegmentGenerator(this._precisionModel, this._bufParams, distance)\n};\nOffsetCurveBuilder.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nOffsetCurveBuilder.prototype.getClass = function getClass () {\n return OffsetCurveBuilder\n};\nOffsetCurveBuilder.copyCoordinates = function copyCoordinates (pts) {\n var copy = new Array(pts.length).fill(null);\n for (var i = 0; i < copy.length; i++) {\n copy[i] = new Coordinate(pts[i]);\n }\n return copy\n};\n\nvar SubgraphDepthLocater = function SubgraphDepthLocater () {\n this._subgraphs = null;\n this._seg = new LineSegment();\n this._cga = new CGAlgorithms();\n var subgraphs = arguments[0];\n this._subgraphs = subgraphs;\n};\n\nvar staticAccessors$30 = { DepthSegment: { configurable: true } };\nSubgraphDepthLocater.prototype.findStabbedSegments = function findStabbedSegments () {\n var this$1 = this;\n\n if (arguments.length === 1) {\n var stabbingRayLeftPt = arguments[0];\n var stabbedSegments = new ArrayList();\n for (var i = this._subgraphs.iterator(); i.hasNext();) {\n var bsg = i.next();\n var env = bsg.getEnvelope();\n if (stabbingRayLeftPt.y < env.getMinY() || stabbingRayLeftPt.y > env.getMaxY()) { continue }\n this$1.findStabbedSegments(stabbingRayLeftPt, bsg.getDirectedEdges(), stabbedSegments);\n }\n return stabbedSegments\n } else if (arguments.length === 3) {\n if (hasInterface(arguments[2], List) && (arguments[0] instanceof Coordinate && arguments[1] instanceof DirectedEdge)) {\n var stabbingRayLeftPt$1 = arguments[0];\n var dirEdge = arguments[1];\n var stabbedSegments$1 = arguments[2];\n var pts = dirEdge.getEdge().getCoordinates();\n for (var i$1 = 0; i$1 < pts.length - 1; i$1++) {\n this$1._seg.p0 = pts[i$1];\n this$1._seg.p1 = pts[i$1 + 1];\n if (this$1._seg.p0.y > this$1._seg.p1.y) { this$1._seg.reverse(); }\n var maxx = Math.max(this$1._seg.p0.x, this$1._seg.p1.x);\n if (maxx < stabbingRayLeftPt$1.x) { continue }\n if (this$1._seg.isHorizontal()) { continue }\n if (stabbingRayLeftPt$1.y < this$1._seg.p0.y || stabbingRayLeftPt$1.y > this$1._seg.p1.y) { continue }\n if (CGAlgorithms.computeOrientation(this$1._seg.p0, this$1._seg.p1, stabbingRayLeftPt$1) === CGAlgorithms.RIGHT) { continue }\n var depth = dirEdge.getDepth(Position.LEFT);\n if (!this$1._seg.p0.equals(pts[i$1])) { depth = dirEdge.getDepth(Position.RIGHT); }\n var ds = new DepthSegment(this$1._seg, depth);\n stabbedSegments$1.add(ds);\n }\n } else if (hasInterface(arguments[2], List) && (arguments[0] instanceof Coordinate && hasInterface(arguments[1], List))) {\n var stabbingRayLeftPt$2 = arguments[0];\n var dirEdges = arguments[1];\n var stabbedSegments$2 = arguments[2];\n for (var i$2 = dirEdges.iterator(); i$2.hasNext();) {\n var de = i$2.next();\n if (!de.isForward()) { continue }\n this$1.findStabbedSegments(stabbingRayLeftPt$2, de, stabbedSegments$2);\n }\n }\n }\n};\nSubgraphDepthLocater.prototype.getDepth = function getDepth (p) {\n var stabbedSegments = this.findStabbedSegments(p);\n if (stabbedSegments.size() === 0) { return 0 }\n var ds = Collections.min(stabbedSegments);\n return ds._leftDepth\n};\nSubgraphDepthLocater.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nSubgraphDepthLocater.prototype.getClass = function getClass () {\n return SubgraphDepthLocater\n};\nstaticAccessors$30.DepthSegment.get = function () { return DepthSegment };\n\nObject.defineProperties( SubgraphDepthLocater, staticAccessors$30 );\n\nvar DepthSegment = function DepthSegment () {\n this._upwardSeg = null;\n this._leftDepth = null;\n var seg = arguments[0];\n var depth = arguments[1];\n this._upwardSeg = new LineSegment(seg);\n this._leftDepth = depth;\n};\nDepthSegment.prototype.compareTo = function compareTo (obj) {\n var other = obj;\n if (this._upwardSeg.minX() >= other._upwardSeg.maxX()) { return 1 }\n if (this._upwardSeg.maxX() <= other._upwardSeg.minX()) { return -1 }\n var orientIndex = this._upwardSeg.orientationIndex(other._upwardSeg);\n if (orientIndex !== 0) { return orientIndex }\n orientIndex = -1 * other._upwardSeg.orientationIndex(this._upwardSeg);\n if (orientIndex !== 0) { return orientIndex }\n return this._upwardSeg.compareTo(other._upwardSeg)\n};\nDepthSegment.prototype.compareX = function compareX (seg0, seg1) {\n var compare0 = seg0.p0.compareTo(seg1.p0);\n if (compare0 !== 0) { return compare0 }\n return seg0.p1.compareTo(seg1.p1)\n};\nDepthSegment.prototype.toString = function toString () {\n return this._upwardSeg.toString()\n};\nDepthSegment.prototype.interfaces_ = function interfaces_ () {\n return [Comparable]\n};\nDepthSegment.prototype.getClass = function getClass () {\n return DepthSegment\n};\n\nvar Triangle = function Triangle (p0, p1, p2) {\n this.p0 = p0 || null;\n this.p1 = p1 || null;\n this.p2 = p2 || null;\n};\nTriangle.prototype.area = function area () {\n return Triangle.area(this.p0, this.p1, this.p2)\n};\nTriangle.prototype.signedArea = function signedArea () {\n return Triangle.signedArea(this.p0, this.p1, this.p2)\n};\nTriangle.prototype.interpolateZ = function interpolateZ (p) {\n if (p === null) { throw new IllegalArgumentException('Supplied point is null.') }\n return Triangle.interpolateZ(p, this.p0, this.p1, this.p2)\n};\nTriangle.prototype.longestSideLength = function longestSideLength () {\n return Triangle.longestSideLength(this.p0, this.p1, this.p2)\n};\nTriangle.prototype.isAcute = function isAcute () {\n return Triangle.isAcute(this.p0, this.p1, this.p2)\n};\nTriangle.prototype.circumcentre = function circumcentre () {\n return Triangle.circumcentre(this.p0, this.p1, this.p2)\n};\nTriangle.prototype.area3D = function area3D () {\n return Triangle.area3D(this.p0, this.p1, this.p2)\n};\nTriangle.prototype.centroid = function centroid () {\n return Triangle.centroid(this.p0, this.p1, this.p2)\n};\nTriangle.prototype.inCentre = function inCentre () {\n return Triangle.inCentre(this.p0, this.p1, this.p2)\n};\nTriangle.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nTriangle.prototype.getClass = function getClass () {\n return Triangle\n};\nTriangle.area = function area (a, b, c) {\n return Math.abs(((c.x - a.x) * (b.y - a.y) - (b.x - a.x) * (c.y - a.y)) / 2)\n};\nTriangle.signedArea = function signedArea (a, b, c) {\n return ((c.x - a.x) * (b.y - a.y) - (b.x - a.x) * (c.y - a.y)) / 2\n};\nTriangle.det = function det (m00, m01, m10, m11) {\n return m00 * m11 - m01 * m10\n};\nTriangle.interpolateZ = function interpolateZ (p, v0, v1, v2) {\n var x0 = v0.x;\n var y0 = v0.y;\n var a = v1.x - x0;\n var b = v2.x - x0;\n var c = v1.y - y0;\n var d = v2.y - y0;\n var det = a * d - b * c;\n var dx = p.x - x0;\n var dy = p.y - y0;\n var t = (d * dx - b * dy) / det;\n var u = (-c * dx + a * dy) / det;\n var z = v0.z + t * (v1.z - v0.z) + u * (v2.z - v0.z);\n return z\n};\nTriangle.longestSideLength = function longestSideLength (a, b, c) {\n var lenAB = a.distance(b);\n var lenBC = b.distance(c);\n var lenCA = c.distance(a);\n var maxLen = lenAB;\n if (lenBC > maxLen) { maxLen = lenBC; }\n if (lenCA > maxLen) { maxLen = lenCA; }\n return maxLen\n};\nTriangle.isAcute = function isAcute (a, b, c) {\n if (!Angle.isAcute(a, b, c)) { return false }\n if (!Angle.isAcute(b, c, a)) { return false }\n if (!Angle.isAcute(c, a, b)) { return false }\n return true\n};\nTriangle.circumcentre = function circumcentre (a, b, c) {\n var cx = c.x;\n var cy = c.y;\n var ax = a.x - cx;\n var ay = a.y - cy;\n var bx = b.x - cx;\n var by = b.y - cy;\n var denom = 2 * Triangle.det(ax, ay, bx, by);\n var numx = Triangle.det(ay, ax * ax + ay * ay, by, bx * bx + by * by);\n var numy = Triangle.det(ax, ax * ax + ay * ay, bx, bx * bx + by * by);\n var ccx = cx - numx / denom;\n var ccy = cy + numy / denom;\n return new Coordinate(ccx, ccy)\n};\nTriangle.perpendicularBisector = function perpendicularBisector (a, b) {\n var dx = b.x - a.x;\n var dy = b.y - a.y;\n var l1 = new HCoordinate(a.x + dx / 2.0, a.y + dy / 2.0, 1.0);\n var l2 = new HCoordinate(a.x - dy + dx / 2.0, a.y + dx + dy / 2.0, 1.0);\n return new HCoordinate(l1, l2)\n};\nTriangle.angleBisector = function angleBisector (a, b, c) {\n var len0 = b.distance(a);\n var len2 = b.distance(c);\n var frac = len0 / (len0 + len2);\n var dx = c.x - a.x;\n var dy = c.y - a.y;\n var splitPt = new Coordinate(a.x + frac * dx, a.y + frac * dy);\n return splitPt\n};\nTriangle.area3D = function area3D (a, b, c) {\n var ux = b.x - a.x;\n var uy = b.y - a.y;\n var uz = b.z - a.z;\n var vx = c.x - a.x;\n var vy = c.y - a.y;\n var vz = c.z - a.z;\n var crossx = uy * vz - uz * vy;\n var crossy = uz * vx - ux * vz;\n var crossz = ux * vy - uy * vx;\n var absSq = crossx * crossx + crossy * crossy + crossz * crossz;\n var area3D = Math.sqrt(absSq) / 2;\n return area3D\n};\nTriangle.centroid = function centroid (a, b, c) {\n var x = (a.x + b.x + c.x) / 3;\n var y = (a.y + b.y + c.y) / 3;\n return new Coordinate(x, y)\n};\nTriangle.inCentre = function inCentre (a, b, c) {\n var len0 = b.distance(c);\n var len1 = a.distance(c);\n var len2 = a.distance(b);\n var circum = len0 + len1 + len2;\n var inCentreX = (len0 * a.x + len1 * b.x + len2 * c.x) / circum;\n var inCentreY = (len0 * a.y + len1 * b.y + len2 * c.y) / circum;\n return new Coordinate(inCentreX, inCentreY)\n};\n\nvar OffsetCurveSetBuilder = function OffsetCurveSetBuilder () {\n this._inputGeom = null;\n this._distance = null;\n this._curveBuilder = null;\n this._curveList = new ArrayList();\n var inputGeom = arguments[0];\n var distance = arguments[1];\n var curveBuilder = arguments[2];\n this._inputGeom = inputGeom;\n this._distance = distance;\n this._curveBuilder = curveBuilder;\n};\nOffsetCurveSetBuilder.prototype.addPoint = function addPoint (p) {\n if (this._distance <= 0.0) { return null }\n var coord = p.getCoordinates();\n var curve = this._curveBuilder.getLineCurve(coord, this._distance);\n this.addCurve(curve, Location.EXTERIOR, Location.INTERIOR);\n};\nOffsetCurveSetBuilder.prototype.addPolygon = function addPolygon (p) {\n var this$1 = this;\n\n var offsetDistance = this._distance;\n var offsetSide = Position.LEFT;\n if (this._distance < 0.0) {\n offsetDistance = -this._distance;\n offsetSide = Position.RIGHT;\n }\n var shell = p.getExteriorRing();\n var shellCoord = CoordinateArrays.removeRepeatedPoints(shell.getCoordinates());\n if (this._distance < 0.0 && this.isErodedCompletely(shell, this._distance)) { return null }\n if (this._distance <= 0.0 && shellCoord.length < 3) { return null }\n this.addPolygonRing(shellCoord, offsetDistance, offsetSide, Location.EXTERIOR, Location.INTERIOR);\n for (var i = 0; i < p.getNumInteriorRing(); i++) {\n var hole = p.getInteriorRingN(i);\n var holeCoord = CoordinateArrays.removeRepeatedPoints(hole.getCoordinates());\n if (this$1._distance > 0.0 && this$1.isErodedCompletely(hole, -this$1._distance)) { continue }\n this$1.addPolygonRing(holeCoord, offsetDistance, Position.opposite(offsetSide), Location.INTERIOR, Location.EXTERIOR);\n }\n};\nOffsetCurveSetBuilder.prototype.isTriangleErodedCompletely = function isTriangleErodedCompletely (triangleCoord, bufferDistance) {\n var tri = new Triangle(triangleCoord[0], triangleCoord[1], triangleCoord[2]);\n var inCentre = tri.inCentre();\n var distToCentre = CGAlgorithms.distancePointLine(inCentre, tri.p0, tri.p1);\n return distToCentre < Math.abs(bufferDistance)\n};\nOffsetCurveSetBuilder.prototype.addLineString = function addLineString (line) {\n if (this._distance <= 0.0 && !this._curveBuilder.getBufferParameters().isSingleSided()) { return null }\n var coord = CoordinateArrays.removeRepeatedPoints(line.getCoordinates());\n var curve = this._curveBuilder.getLineCurve(coord, this._distance);\n this.addCurve(curve, Location.EXTERIOR, Location.INTERIOR);\n};\nOffsetCurveSetBuilder.prototype.addCurve = function addCurve (coord, leftLoc, rightLoc) {\n if (coord === null || coord.length < 2) { return null }\n var e = new NodedSegmentString(coord, new Label(0, Location.BOUNDARY, leftLoc, rightLoc));\n this._curveList.add(e);\n};\nOffsetCurveSetBuilder.prototype.getCurves = function getCurves () {\n this.add(this._inputGeom);\n return this._curveList\n};\nOffsetCurveSetBuilder.prototype.addPolygonRing = function addPolygonRing (coord, offsetDistance, side, cwLeftLoc, cwRightLoc) {\n if (offsetDistance === 0.0 && coord.length < LinearRing.MINIMUM_VALID_SIZE) { return null }\n var leftLoc = cwLeftLoc;\n var rightLoc = cwRightLoc;\n if (coord.length >= LinearRing.MINIMUM_VALID_SIZE && CGAlgorithms.isCCW(coord)) {\n leftLoc = cwRightLoc;\n rightLoc = cwLeftLoc;\n side = Position.opposite(side);\n }\n var curve = this._curveBuilder.getRingCurve(coord, side, offsetDistance);\n this.addCurve(curve, leftLoc, rightLoc);\n};\nOffsetCurveSetBuilder.prototype.add = function add (g) {\n if (g.isEmpty()) { return null }\n if (g instanceof Polygon) { this.addPolygon(g); }\n else if (g instanceof LineString) { this.addLineString(g); }\n else if (g instanceof Point) { this.addPoint(g); }\n else if (g instanceof MultiPoint) { this.addCollection(g); }\n else if (g instanceof MultiLineString) { this.addCollection(g); }\n else if (g instanceof MultiPolygon) { this.addCollection(g); }\n else if (g instanceof GeometryCollection) { this.addCollection(g); }\n // else throw new UnsupportedOperationException(g.getClass().getName())\n};\nOffsetCurveSetBuilder.prototype.isErodedCompletely = function isErodedCompletely (ring, bufferDistance) {\n var ringCoord = ring.getCoordinates();\n // const minDiam = 0.0\n if (ringCoord.length < 4) { return bufferDistance < 0 }\n if (ringCoord.length === 4) { return this.isTriangleErodedCompletely(ringCoord, bufferDistance) }\n var env = ring.getEnvelopeInternal();\n var envMinDimension = Math.min(env.getHeight(), env.getWidth());\n if (bufferDistance < 0.0 && 2 * Math.abs(bufferDistance) > envMinDimension) { return true }\n return false\n};\nOffsetCurveSetBuilder.prototype.addCollection = function addCollection (gc) {\n var this$1 = this;\n\n for (var i = 0; i < gc.getNumGeometries(); i++) {\n var g = gc.getGeometryN(i);\n this$1.add(g);\n }\n};\nOffsetCurveSetBuilder.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nOffsetCurveSetBuilder.prototype.getClass = function getClass () {\n return OffsetCurveSetBuilder\n};\n\nvar PointOnGeometryLocator = function PointOnGeometryLocator () {};\n\nPointOnGeometryLocator.prototype.locate = function locate (p) {};\nPointOnGeometryLocator.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nPointOnGeometryLocator.prototype.getClass = function getClass () {\n return PointOnGeometryLocator\n};\n\nvar GeometryCollectionIterator = function GeometryCollectionIterator () {\n this._parent = null;\n this._atStart = null;\n this._max = null;\n this._index = null;\n this._subcollectionIterator = null;\n var parent = arguments[0];\n this._parent = parent;\n this._atStart = true;\n this._index = 0;\n this._max = parent.getNumGeometries();\n};\nGeometryCollectionIterator.prototype.next = function next () {\n if (this._atStart) {\n this._atStart = false;\n if (GeometryCollectionIterator.isAtomic(this._parent)) { this._index++; }\n return this._parent\n }\n if (this._subcollectionIterator !== null) {\n if (this._subcollectionIterator.hasNext()) {\n return this._subcollectionIterator.next()\n } else {\n this._subcollectionIterator = null;\n }\n }\n if (this._index >= this._max) {\n throw new NoSuchElementException()\n }\n var obj = this._parent.getGeometryN(this._index++);\n if (obj instanceof GeometryCollection) {\n this._subcollectionIterator = new GeometryCollectionIterator(obj);\n return this._subcollectionIterator.next()\n }\n return obj\n};\nGeometryCollectionIterator.prototype.remove = function remove () {\n throw new Error(this.getClass().getName())\n};\nGeometryCollectionIterator.prototype.hasNext = function hasNext () {\n if (this._atStart) {\n return true\n }\n if (this._subcollectionIterator !== null) {\n if (this._subcollectionIterator.hasNext()) {\n return true\n }\n this._subcollectionIterator = null;\n }\n if (this._index >= this._max) {\n return false\n }\n return true\n};\nGeometryCollectionIterator.prototype.interfaces_ = function interfaces_ () {\n return [Iterator]\n};\nGeometryCollectionIterator.prototype.getClass = function getClass () {\n return GeometryCollectionIterator\n};\nGeometryCollectionIterator.isAtomic = function isAtomic (geom) {\n return !(geom instanceof GeometryCollection)\n};\n\nvar SimplePointInAreaLocator = function SimplePointInAreaLocator () {\n this._geom = null;\n var geom = arguments[0];\n this._geom = geom;\n};\nSimplePointInAreaLocator.prototype.locate = function locate (p) {\n return SimplePointInAreaLocator.locate(p, this._geom)\n};\nSimplePointInAreaLocator.prototype.interfaces_ = function interfaces_ () {\n return [PointOnGeometryLocator]\n};\nSimplePointInAreaLocator.prototype.getClass = function getClass () {\n return SimplePointInAreaLocator\n};\nSimplePointInAreaLocator.isPointInRing = function isPointInRing (p, ring) {\n if (!ring.getEnvelopeInternal().intersects(p)) { return false }\n return CGAlgorithms.isPointInRing(p, ring.getCoordinates())\n};\nSimplePointInAreaLocator.containsPointInPolygon = function containsPointInPolygon (p, poly) {\n if (poly.isEmpty()) { return false }\n var shell = poly.getExteriorRing();\n if (!SimplePointInAreaLocator.isPointInRing(p, shell)) { return false }\n for (var i = 0; i < poly.getNumInteriorRing(); i++) {\n var hole = poly.getInteriorRingN(i);\n if (SimplePointInAreaLocator.isPointInRing(p, hole)) { return false }\n }\n return true\n};\nSimplePointInAreaLocator.containsPoint = function containsPoint (p, geom) {\n if (geom instanceof Polygon) {\n return SimplePointInAreaLocator.containsPointInPolygon(p, geom)\n } else if (geom instanceof GeometryCollection) {\n var geomi = new GeometryCollectionIterator(geom);\n while (geomi.hasNext()) {\n var g2 = geomi.next();\n if (g2 !== geom) { if (SimplePointInAreaLocator.containsPoint(p, g2)) { return true } }\n }\n }\n return false\n};\nSimplePointInAreaLocator.locate = function locate (p, geom) {\n if (geom.isEmpty()) { return Location.EXTERIOR }\n if (SimplePointInAreaLocator.containsPoint(p, geom)) { return Location.INTERIOR }\n return Location.EXTERIOR\n};\n\nvar EdgeEndStar = function EdgeEndStar () {\n this._edgeMap = new TreeMap();\n this._edgeList = null;\n this._ptInAreaLocation = [Location.NONE, Location.NONE];\n};\nEdgeEndStar.prototype.getNextCW = function getNextCW (ee) {\n this.getEdges();\n var i = this._edgeList.indexOf(ee);\n var iNextCW = i - 1;\n if (i === 0) { iNextCW = this._edgeList.size() - 1; }\n return this._edgeList.get(iNextCW)\n};\nEdgeEndStar.prototype.propagateSideLabels = function propagateSideLabels (geomIndex) {\n var startLoc = Location.NONE;\n for (var it = this.iterator(); it.hasNext();) {\n var e = it.next();\n var label = e.getLabel();\n if (label.isArea(geomIndex) && label.getLocation(geomIndex, Position.LEFT) !== Location.NONE) { startLoc = label.getLocation(geomIndex, Position.LEFT); }\n }\n if (startLoc === Location.NONE) { return null }\n var currLoc = startLoc;\n for (var it$1 = this.iterator(); it$1.hasNext();) {\n var e$1 = it$1.next();\n var label$1 = e$1.getLabel();\n if (label$1.getLocation(geomIndex, Position.ON) === Location.NONE) { label$1.setLocation(geomIndex, Position.ON, currLoc); }\n if (label$1.isArea(geomIndex)) {\n var leftLoc = label$1.getLocation(geomIndex, Position.LEFT);\n var rightLoc = label$1.getLocation(geomIndex, Position.RIGHT);\n if (rightLoc !== Location.NONE) {\n if (rightLoc !== currLoc) { throw new TopologyException('side location conflict', e$1.getCoordinate()) }\n if (leftLoc === Location.NONE) {\n Assert.shouldNeverReachHere('found single null side (at ' + e$1.getCoordinate() + ')');\n }\n currLoc = leftLoc;\n } else {\n Assert.isTrue(label$1.getLocation(geomIndex, Position.LEFT) === Location.NONE, 'found single null side');\n label$1.setLocation(geomIndex, Position.RIGHT, currLoc);\n label$1.setLocation(geomIndex, Position.LEFT, currLoc);\n }\n }\n }\n};\nEdgeEndStar.prototype.getCoordinate = function getCoordinate () {\n var it = this.iterator();\n if (!it.hasNext()) { return null }\n var e = it.next();\n return e.getCoordinate()\n};\nEdgeEndStar.prototype.print = function print (out) {\n System.out.println('EdgeEndStar: ' + this.getCoordinate());\n for (var it = this.iterator(); it.hasNext();) {\n var e = it.next();\n e.print(out);\n }\n};\nEdgeEndStar.prototype.isAreaLabelsConsistent = function isAreaLabelsConsistent (geomGraph) {\n this.computeEdgeEndLabels(geomGraph.getBoundaryNodeRule());\n return this.checkAreaLabelsConsistent(0)\n};\nEdgeEndStar.prototype.checkAreaLabelsConsistent = function checkAreaLabelsConsistent (geomIndex) {\n var edges = this.getEdges();\n if (edges.size() <= 0) { return true }\n var lastEdgeIndex = edges.size() - 1;\n var startLabel = edges.get(lastEdgeIndex).getLabel();\n var startLoc = startLabel.getLocation(geomIndex, Position.LEFT);\n Assert.isTrue(startLoc !== Location.NONE, 'Found unlabelled area edge');\n var currLoc = startLoc;\n for (var it = this.iterator(); it.hasNext();) {\n var e = it.next();\n var label = e.getLabel();\n Assert.isTrue(label.isArea(geomIndex), 'Found non-area edge');\n var leftLoc = label.getLocation(geomIndex, Position.LEFT);\n var rightLoc = label.getLocation(geomIndex, Position.RIGHT);\n if (leftLoc === rightLoc) {\n return false\n }\n if (rightLoc !== currLoc) {\n return false\n }\n currLoc = leftLoc;\n }\n return true\n};\nEdgeEndStar.prototype.findIndex = function findIndex (eSearch) {\n var this$1 = this;\n\n this.iterator();\n for (var i = 0; i < this._edgeList.size(); i++) {\n var e = this$1._edgeList.get(i);\n if (e === eSearch) { return i }\n }\n return -1\n};\nEdgeEndStar.prototype.iterator = function iterator () {\n return this.getEdges().iterator()\n};\nEdgeEndStar.prototype.getEdges = function getEdges () {\n if (this._edgeList === null) {\n this._edgeList = new ArrayList(this._edgeMap.values());\n }\n return this._edgeList\n};\nEdgeEndStar.prototype.getLocation = function getLocation (geomIndex, p, geom) {\n if (this._ptInAreaLocation[geomIndex] === Location.NONE) {\n this._ptInAreaLocation[geomIndex] = SimplePointInAreaLocator.locate(p, geom[geomIndex].getGeometry());\n }\n return this._ptInAreaLocation[geomIndex]\n};\nEdgeEndStar.prototype.toString = function toString () {\n var buf = new StringBuffer();\n buf.append('EdgeEndStar: ' + this.getCoordinate());\n buf.append('\\n');\n for (var it = this.iterator(); it.hasNext();) {\n var e = it.next();\n buf.append(e);\n buf.append('\\n');\n }\n return buf.toString()\n};\nEdgeEndStar.prototype.computeEdgeEndLabels = function computeEdgeEndLabels (boundaryNodeRule) {\n for (var it = this.iterator(); it.hasNext();) {\n var ee = it.next();\n ee.computeLabel(boundaryNodeRule);\n }\n};\nEdgeEndStar.prototype.computeLabelling = function computeLabelling (geomGraph) {\n var this$1 = this;\n\n this.computeEdgeEndLabels(geomGraph[0].getBoundaryNodeRule());\n this.propagateSideLabels(0);\n this.propagateSideLabels(1);\n var hasDimensionalCollapseEdge = [false, false];\n for (var it = this.iterator(); it.hasNext();) {\n var e = it.next();\n var label = e.getLabel();\n for (var geomi = 0; geomi < 2; geomi++) {\n if (label.isLine(geomi) && label.getLocation(geomi) === Location.BOUNDARY) { hasDimensionalCollapseEdge[geomi] = true; }\n }\n }\n for (var it$1 = this.iterator(); it$1.hasNext();) {\n var e$1 = it$1.next();\n var label$1 = e$1.getLabel();\n for (var geomi$1 = 0; geomi$1 < 2; geomi$1++) {\n if (label$1.isAnyNull(geomi$1)) {\n var loc = Location.NONE;\n if (hasDimensionalCollapseEdge[geomi$1]) {\n loc = Location.EXTERIOR;\n } else {\n var p = e$1.getCoordinate();\n loc = this$1.getLocation(geomi$1, p, geomGraph);\n }\n label$1.setAllLocationsIfNull(geomi$1, loc);\n }\n }\n }\n};\nEdgeEndStar.prototype.getDegree = function getDegree () {\n return this._edgeMap.size()\n};\nEdgeEndStar.prototype.insertEdgeEnd = function insertEdgeEnd (e, obj) {\n this._edgeMap.put(e, obj);\n this._edgeList = null;\n};\nEdgeEndStar.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nEdgeEndStar.prototype.getClass = function getClass () {\n return EdgeEndStar\n};\n\nvar DirectedEdgeStar = (function (EdgeEndStar$$1) {\n function DirectedEdgeStar () {\n EdgeEndStar$$1.call(this);\n this._resultAreaEdgeList = null;\n this._label = null;\n this._SCANNING_FOR_INCOMING = 1;\n this._LINKING_TO_OUTGOING = 2;\n }\n\n if ( EdgeEndStar$$1 ) DirectedEdgeStar.__proto__ = EdgeEndStar$$1;\n DirectedEdgeStar.prototype = Object.create( EdgeEndStar$$1 && EdgeEndStar$$1.prototype );\n DirectedEdgeStar.prototype.constructor = DirectedEdgeStar;\n DirectedEdgeStar.prototype.linkResultDirectedEdges = function linkResultDirectedEdges () {\n var this$1 = this;\n\n this.getResultAreaEdges();\n var firstOut = null;\n var incoming = null;\n var state = this._SCANNING_FOR_INCOMING;\n for (var i = 0; i < this._resultAreaEdgeList.size(); i++) {\n var nextOut = this$1._resultAreaEdgeList.get(i);\n var nextIn = nextOut.getSym();\n if (!nextOut.getLabel().isArea()) { continue }\n if (firstOut === null && nextOut.isInResult()) { firstOut = nextOut; }\n switch (state) {\n case this$1._SCANNING_FOR_INCOMING:\n if (!nextIn.isInResult()) { continue }\n incoming = nextIn;\n state = this$1._LINKING_TO_OUTGOING;\n break\n case this$1._LINKING_TO_OUTGOING:\n if (!nextOut.isInResult()) { continue }\n incoming.setNext(nextOut);\n state = this$1._SCANNING_FOR_INCOMING;\n break\n default:\n }\n }\n if (state === this._LINKING_TO_OUTGOING) {\n if (firstOut === null) { throw new TopologyException('no outgoing dirEdge found', this.getCoordinate()) }\n Assert.isTrue(firstOut.isInResult(), 'unable to link last incoming dirEdge');\n incoming.setNext(firstOut);\n }\n };\n DirectedEdgeStar.prototype.insert = function insert (ee) {\n var de = ee;\n this.insertEdgeEnd(de, de);\n };\n DirectedEdgeStar.prototype.getRightmostEdge = function getRightmostEdge () {\n var edges = this.getEdges();\n var size = edges.size();\n if (size < 1) { return null }\n var de0 = edges.get(0);\n if (size === 1) { return de0 }\n var deLast = edges.get(size - 1);\n var quad0 = de0.getQuadrant();\n var quad1 = deLast.getQuadrant();\n if (Quadrant.isNorthern(quad0) && Quadrant.isNorthern(quad1)) { return de0; } else if (!Quadrant.isNorthern(quad0) && !Quadrant.isNorthern(quad1)) { return deLast; } else {\n // const nonHorizontalEdge = null\n if (de0.getDy() !== 0) { return de0; } else if (deLast.getDy() !== 0) { return deLast }\n }\n Assert.shouldNeverReachHere('found two horizontal edges incident on node');\n return null\n };\n DirectedEdgeStar.prototype.print = function print (out) {\n System.out.println('DirectedEdgeStar: ' + this.getCoordinate());\n for (var it = this.iterator(); it.hasNext();) {\n var de = it.next();\n out.print('out ');\n de.print(out);\n out.println();\n out.print('in ');\n de.getSym().print(out);\n out.println();\n }\n };\n DirectedEdgeStar.prototype.getResultAreaEdges = function getResultAreaEdges () {\n var this$1 = this;\n\n if (this._resultAreaEdgeList !== null) { return this._resultAreaEdgeList }\n this._resultAreaEdgeList = new ArrayList();\n for (var it = this.iterator(); it.hasNext();) {\n var de = it.next();\n if (de.isInResult() || de.getSym().isInResult()) { this$1._resultAreaEdgeList.add(de); }\n }\n return this._resultAreaEdgeList\n };\n DirectedEdgeStar.prototype.updateLabelling = function updateLabelling (nodeLabel) {\n for (var it = this.iterator(); it.hasNext();) {\n var de = it.next();\n var label = de.getLabel();\n label.setAllLocationsIfNull(0, nodeLabel.getLocation(0));\n label.setAllLocationsIfNull(1, nodeLabel.getLocation(1));\n }\n };\n DirectedEdgeStar.prototype.linkAllDirectedEdges = function linkAllDirectedEdges () {\n var this$1 = this;\n\n this.getEdges();\n var prevOut = null;\n var firstIn = null;\n for (var i = this._edgeList.size() - 1; i >= 0; i--) {\n var nextOut = this$1._edgeList.get(i);\n var nextIn = nextOut.getSym();\n if (firstIn === null) { firstIn = nextIn; }\n if (prevOut !== null) { nextIn.setNext(prevOut); }\n prevOut = nextOut;\n }\n firstIn.setNext(prevOut);\n };\n DirectedEdgeStar.prototype.computeDepths = function computeDepths () {\n var this$1 = this;\n\n if (arguments.length === 1) {\n var de = arguments[0];\n var edgeIndex = this.findIndex(de);\n // const label = de.getLabel()\n var startDepth = de.getDepth(Position.LEFT);\n var targetLastDepth = de.getDepth(Position.RIGHT);\n var nextDepth = this.computeDepths(edgeIndex + 1, this._edgeList.size(), startDepth);\n var lastDepth = this.computeDepths(0, edgeIndex, nextDepth);\n if (lastDepth !== targetLastDepth) { throw new TopologyException('depth mismatch at ' + de.getCoordinate()) }\n } else if (arguments.length === 3) {\n var startIndex = arguments[0];\n var endIndex = arguments[1];\n var startDepth$1 = arguments[2];\n var currDepth = startDepth$1;\n for (var i = startIndex; i < endIndex; i++) {\n var nextDe = this$1._edgeList.get(i);\n // const label = nextDe.getLabel()\n nextDe.setEdgeDepths(Position.RIGHT, currDepth);\n currDepth = nextDe.getDepth(Position.LEFT);\n }\n return currDepth\n }\n };\n DirectedEdgeStar.prototype.mergeSymLabels = function mergeSymLabels () {\n for (var it = this.iterator(); it.hasNext();) {\n var de = it.next();\n var label = de.getLabel();\n label.merge(de.getSym().getLabel());\n }\n };\n DirectedEdgeStar.prototype.linkMinimalDirectedEdges = function linkMinimalDirectedEdges (er) {\n var this$1 = this;\n\n var firstOut = null;\n var incoming = null;\n var state = this._SCANNING_FOR_INCOMING;\n for (var i = this._resultAreaEdgeList.size() - 1; i >= 0; i--) {\n var nextOut = this$1._resultAreaEdgeList.get(i);\n var nextIn = nextOut.getSym();\n if (firstOut === null && nextOut.getEdgeRing() === er) { firstOut = nextOut; }\n switch (state) {\n case this$1._SCANNING_FOR_INCOMING:\n if (nextIn.getEdgeRing() !== er) { continue }\n incoming = nextIn;\n state = this$1._LINKING_TO_OUTGOING;\n break\n case this$1._LINKING_TO_OUTGOING:\n if (nextOut.getEdgeRing() !== er) { continue }\n incoming.setNextMin(nextOut);\n state = this$1._SCANNING_FOR_INCOMING;\n break\n default:\n }\n }\n if (state === this._LINKING_TO_OUTGOING) {\n Assert.isTrue(firstOut !== null, 'found null for first outgoing dirEdge');\n Assert.isTrue(firstOut.getEdgeRing() === er, 'unable to link last incoming dirEdge');\n incoming.setNextMin(firstOut);\n }\n };\n DirectedEdgeStar.prototype.getOutgoingDegree = function getOutgoingDegree () {\n if (arguments.length === 0) {\n var degree = 0;\n for (var it = this.iterator(); it.hasNext();) {\n var de = it.next();\n if (de.isInResult()) { degree++; }\n }\n return degree\n } else if (arguments.length === 1) {\n var er = arguments[0];\n var degree$1 = 0;\n for (var it$1 = this.iterator(); it$1.hasNext();) {\n var de$1 = it$1.next();\n if (de$1.getEdgeRing() === er) { degree$1++; }\n }\n return degree$1\n }\n };\n DirectedEdgeStar.prototype.getLabel = function getLabel () {\n return this._label\n };\n DirectedEdgeStar.prototype.findCoveredLineEdges = function findCoveredLineEdges () {\n var startLoc = Location.NONE;\n for (var it = this.iterator(); it.hasNext();) {\n var nextOut = it.next();\n var nextIn = nextOut.getSym();\n if (!nextOut.isLineEdge()) {\n if (nextOut.isInResult()) {\n startLoc = Location.INTERIOR;\n break\n }\n if (nextIn.isInResult()) {\n startLoc = Location.EXTERIOR;\n break\n }\n }\n }\n if (startLoc === Location.NONE) { return null }\n var currLoc = startLoc;\n for (var it$1 = this.iterator(); it$1.hasNext();) {\n var nextOut$1 = it$1.next();\n var nextIn$1 = nextOut$1.getSym();\n if (nextOut$1.isLineEdge()) {\n nextOut$1.getEdge().setCovered(currLoc === Location.INTERIOR);\n } else {\n if (nextOut$1.isInResult()) { currLoc = Location.EXTERIOR; }\n if (nextIn$1.isInResult()) { currLoc = Location.INTERIOR; }\n }\n }\n };\n DirectedEdgeStar.prototype.computeLabelling = function computeLabelling (geom) {\n var this$1 = this;\n\n EdgeEndStar$$1.prototype.computeLabelling.call(this, geom);\n this._label = new Label(Location.NONE);\n for (var it = this.iterator(); it.hasNext();) {\n var ee = it.next();\n var e = ee.getEdge();\n var eLabel = e.getLabel();\n for (var i = 0; i < 2; i++) {\n var eLoc = eLabel.getLocation(i);\n if (eLoc === Location.INTERIOR || eLoc === Location.BOUNDARY) { this$1._label.setLocation(i, Location.INTERIOR); }\n }\n }\n };\n DirectedEdgeStar.prototype.interfaces_ = function interfaces_ () {\n return []\n };\n DirectedEdgeStar.prototype.getClass = function getClass () {\n return DirectedEdgeStar\n };\n\n return DirectedEdgeStar;\n}(EdgeEndStar));\n\nvar OverlayNodeFactory = (function (NodeFactory$$1) {\n function OverlayNodeFactory () {\n NodeFactory$$1.apply(this, arguments);\n }\n\n if ( NodeFactory$$1 ) OverlayNodeFactory.__proto__ = NodeFactory$$1;\n OverlayNodeFactory.prototype = Object.create( NodeFactory$$1 && NodeFactory$$1.prototype );\n OverlayNodeFactory.prototype.constructor = OverlayNodeFactory;\n\n OverlayNodeFactory.prototype.createNode = function createNode (coord) {\n return new Node(coord, new DirectedEdgeStar())\n };\n OverlayNodeFactory.prototype.interfaces_ = function interfaces_ () {\n return []\n };\n OverlayNodeFactory.prototype.getClass = function getClass () {\n return OverlayNodeFactory\n };\n\n return OverlayNodeFactory;\n}(NodeFactory));\n\nvar OrientedCoordinateArray = function OrientedCoordinateArray () {\n this._pts = null;\n this._orientation = null;\n var pts = arguments[0];\n this._pts = pts;\n this._orientation = OrientedCoordinateArray.orientation(pts);\n};\nOrientedCoordinateArray.prototype.compareTo = function compareTo (o1) {\n var oca = o1;\n var comp = OrientedCoordinateArray.compareOriented(this._pts, this._orientation, oca._pts, oca._orientation);\n return comp\n};\nOrientedCoordinateArray.prototype.interfaces_ = function interfaces_ () {\n return [Comparable]\n};\nOrientedCoordinateArray.prototype.getClass = function getClass () {\n return OrientedCoordinateArray\n};\nOrientedCoordinateArray.orientation = function orientation (pts) {\n return CoordinateArrays.increasingDirection(pts) === 1\n};\nOrientedCoordinateArray.compareOriented = function compareOriented (pts1, orientation1, pts2, orientation2) {\n var dir1 = orientation1 ? 1 : -1;\n var dir2 = orientation2 ? 1 : -1;\n var limit1 = orientation1 ? pts1.length : -1;\n var limit2 = orientation2 ? pts2.length : -1;\n var i1 = orientation1 ? 0 : pts1.length - 1;\n var i2 = orientation2 ? 0 : pts2.length - 1;\n // const comp = 0\n while (true) {\n var compPt = pts1[i1].compareTo(pts2[i2]);\n if (compPt !== 0) { return compPt }\n i1 += dir1;\n i2 += dir2;\n var done1 = i1 === limit1;\n var done2 = i2 === limit2;\n if (done1 && !done2) { return -1 }\n if (!done1 && done2) { return 1 }\n if (done1 && done2) { return 0 }\n }\n};\n\nvar EdgeList = function EdgeList () {\n this._edges = new ArrayList();\n this._ocaMap = new TreeMap();\n};\nEdgeList.prototype.print = function print (out) {\n var this$1 = this;\n\n out.print('MULTILINESTRING ( ');\n for (var j = 0; j < this._edges.size(); j++) {\n var e = this$1._edges.get(j);\n if (j > 0) { out.print(','); }\n out.print('(');\n var pts = e.getCoordinates();\n for (var i = 0; i < pts.length; i++) {\n if (i > 0) { out.print(','); }\n out.print(pts[i].x + ' ' + pts[i].y);\n }\n out.println(')');\n }\n out.print(') ');\n};\nEdgeList.prototype.addAll = function addAll (edgeColl) {\n var this$1 = this;\n\n for (var i = edgeColl.iterator(); i.hasNext();) {\n this$1.add(i.next());\n }\n};\nEdgeList.prototype.findEdgeIndex = function findEdgeIndex (e) {\n var this$1 = this;\n\n for (var i = 0; i < this._edges.size(); i++) {\n if (this$1._edges.get(i).equals(e)) { return i }\n }\n return -1\n};\nEdgeList.prototype.iterator = function iterator () {\n return this._edges.iterator()\n};\nEdgeList.prototype.getEdges = function getEdges () {\n return this._edges\n};\nEdgeList.prototype.get = function get (i) {\n return this._edges.get(i)\n};\nEdgeList.prototype.findEqualEdge = function findEqualEdge (e) {\n var oca = new OrientedCoordinateArray(e.getCoordinates());\n var matchEdge = this._ocaMap.get(oca);\n return matchEdge\n};\nEdgeList.prototype.add = function add (e) {\n this._edges.add(e);\n var oca = new OrientedCoordinateArray(e.getCoordinates());\n this._ocaMap.put(oca, e);\n};\nEdgeList.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nEdgeList.prototype.getClass = function getClass () {\n return EdgeList\n};\n\nvar SegmentIntersector = function SegmentIntersector () {};\n\nSegmentIntersector.prototype.processIntersections = function processIntersections (e0, segIndex0, e1, segIndex1) {};\nSegmentIntersector.prototype.isDone = function isDone () {};\nSegmentIntersector.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nSegmentIntersector.prototype.getClass = function getClass () {\n return SegmentIntersector\n};\n\nvar IntersectionAdder = function IntersectionAdder () {\n this._hasIntersection = false;\n this._hasProper = false;\n this._hasProperInterior = false;\n this._hasInterior = false;\n this._properIntersectionPoint = null;\n this._li = null;\n this._isSelfIntersection = null;\n this.numIntersections = 0;\n this.numInteriorIntersections = 0;\n this.numProperIntersections = 0;\n this.numTests = 0;\n var li = arguments[0];\n this._li = li;\n};\nIntersectionAdder.prototype.isTrivialIntersection = function isTrivialIntersection (e0, segIndex0, e1, segIndex1) {\n if (e0 === e1) {\n if (this._li.getIntersectionNum() === 1) {\n if (IntersectionAdder.isAdjacentSegments(segIndex0, segIndex1)) { return true }\n if (e0.isClosed()) {\n var maxSegIndex = e0.size() - 1;\n if ((segIndex0 === 0 && segIndex1 === maxSegIndex) ||\n (segIndex1 === 0 && segIndex0 === maxSegIndex)) {\n return true\n }\n }\n }\n }\n return false\n};\nIntersectionAdder.prototype.getProperIntersectionPoint = function getProperIntersectionPoint () {\n return this._properIntersectionPoint\n};\nIntersectionAdder.prototype.hasProperInteriorIntersection = function hasProperInteriorIntersection () {\n return this._hasProperInterior\n};\nIntersectionAdder.prototype.getLineIntersector = function getLineIntersector () {\n return this._li\n};\nIntersectionAdder.prototype.hasProperIntersection = function hasProperIntersection () {\n return this._hasProper\n};\nIntersectionAdder.prototype.processIntersections = function processIntersections (e0, segIndex0, e1, segIndex1) {\n if (e0 === e1 && segIndex0 === segIndex1) { return null }\n this.numTests++;\n var p00 = e0.getCoordinates()[segIndex0];\n var p01 = e0.getCoordinates()[segIndex0 + 1];\n var p10 = e1.getCoordinates()[segIndex1];\n var p11 = e1.getCoordinates()[segIndex1 + 1];\n this._li.computeIntersection(p00, p01, p10, p11);\n if (this._li.hasIntersection()) {\n this.numIntersections++;\n if (this._li.isInteriorIntersection()) {\n this.numInteriorIntersections++;\n this._hasInterior = true;\n }\n if (!this.isTrivialIntersection(e0, segIndex0, e1, segIndex1)) {\n this._hasIntersection = true;\n e0.addIntersections(this._li, segIndex0, 0);\n e1.addIntersections(this._li, segIndex1, 1);\n if (this._li.isProper()) {\n this.numProperIntersections++;\n this._hasProper = true;\n this._hasProperInterior = true;\n }\n }\n }\n};\nIntersectionAdder.prototype.hasIntersection = function hasIntersection () {\n return this._hasIntersection\n};\nIntersectionAdder.prototype.isDone = function isDone () {\n return false\n};\nIntersectionAdder.prototype.hasInteriorIntersection = function hasInteriorIntersection () {\n return this._hasInterior\n};\nIntersectionAdder.prototype.interfaces_ = function interfaces_ () {\n return [SegmentIntersector]\n};\nIntersectionAdder.prototype.getClass = function getClass () {\n return IntersectionAdder\n};\nIntersectionAdder.isAdjacentSegments = function isAdjacentSegments (i1, i2) {\n return Math.abs(i1 - i2) === 1\n};\n\nvar EdgeIntersection = function EdgeIntersection () {\n this.coord = null;\n this.segmentIndex = null;\n this.dist = null;\n var coord = arguments[0];\n var segmentIndex = arguments[1];\n var dist = arguments[2];\n this.coord = new Coordinate(coord);\n this.segmentIndex = segmentIndex;\n this.dist = dist;\n};\nEdgeIntersection.prototype.getSegmentIndex = function getSegmentIndex () {\n return this.segmentIndex\n};\nEdgeIntersection.prototype.getCoordinate = function getCoordinate () {\n return this.coord\n};\nEdgeIntersection.prototype.print = function print (out) {\n out.print(this.coord);\n out.print(' seg # = ' + this.segmentIndex);\n out.println(' dist = ' + this.dist);\n};\nEdgeIntersection.prototype.compareTo = function compareTo (obj) {\n var other = obj;\n return this.compare(other.segmentIndex, other.dist)\n};\nEdgeIntersection.prototype.isEndPoint = function isEndPoint (maxSegmentIndex) {\n if (this.segmentIndex === 0 && this.dist === 0.0) { return true }\n if (this.segmentIndex === maxSegmentIndex) { return true }\n return false\n};\nEdgeIntersection.prototype.toString = function toString () {\n return this.coord + ' seg # = ' + this.segmentIndex + ' dist = ' + this.dist\n};\nEdgeIntersection.prototype.getDistance = function getDistance () {\n return this.dist\n};\nEdgeIntersection.prototype.compare = function compare (segmentIndex, dist) {\n if (this.segmentIndex < segmentIndex) { return -1 }\n if (this.segmentIndex > segmentIndex) { return 1 }\n if (this.dist < dist) { return -1 }\n if (this.dist > dist) { return 1 }\n return 0\n};\nEdgeIntersection.prototype.interfaces_ = function interfaces_ () {\n return [Comparable]\n};\nEdgeIntersection.prototype.getClass = function getClass () {\n return EdgeIntersection\n};\n\nvar EdgeIntersectionList = function EdgeIntersectionList () {\n this._nodeMap = new TreeMap();\n this.edge = null;\n var edge = arguments[0];\n this.edge = edge;\n};\nEdgeIntersectionList.prototype.print = function print (out) {\n out.println('Intersections:');\n for (var it = this.iterator(); it.hasNext();) {\n var ei = it.next();\n ei.print(out);\n }\n};\nEdgeIntersectionList.prototype.iterator = function iterator () {\n return this._nodeMap.values().iterator()\n};\nEdgeIntersectionList.prototype.addSplitEdges = function addSplitEdges (edgeList) {\n var this$1 = this;\n\n this.addEndpoints();\n var it = this.iterator();\n var eiPrev = it.next();\n while (it.hasNext()) {\n var ei = it.next();\n var newEdge = this$1.createSplitEdge(eiPrev, ei);\n edgeList.add(newEdge);\n eiPrev = ei;\n }\n};\nEdgeIntersectionList.prototype.addEndpoints = function addEndpoints () {\n var maxSegIndex = this.edge.pts.length - 1;\n this.add(this.edge.pts[0], 0, 0.0);\n this.add(this.edge.pts[maxSegIndex], maxSegIndex, 0.0);\n};\nEdgeIntersectionList.prototype.createSplitEdge = function createSplitEdge (ei0, ei1) {\n var this$1 = this;\n\n var npts = ei1.segmentIndex - ei0.segmentIndex + 2;\n var lastSegStartPt = this.edge.pts[ei1.segmentIndex];\n var useIntPt1 = ei1.dist > 0.0 || !ei1.coord.equals2D(lastSegStartPt);\n if (!useIntPt1) {\n npts--;\n }\n var pts = new Array(npts).fill(null);\n var ipt = 0;\n pts[ipt++] = new Coordinate(ei0.coord);\n for (var i = ei0.segmentIndex + 1; i <= ei1.segmentIndex; i++) {\n pts[ipt++] = this$1.edge.pts[i];\n }\n if (useIntPt1) { pts[ipt] = ei1.coord; }\n return new Edge(pts, new Label(this.edge._label))\n};\nEdgeIntersectionList.prototype.add = function add (intPt, segmentIndex, dist) {\n var eiNew = new EdgeIntersection(intPt, segmentIndex, dist);\n var ei = this._nodeMap.get(eiNew);\n if (ei !== null) {\n return ei\n }\n this._nodeMap.put(eiNew, eiNew);\n return eiNew\n};\nEdgeIntersectionList.prototype.isIntersection = function isIntersection (pt) {\n for (var it = this.iterator(); it.hasNext();) {\n var ei = it.next();\n if (ei.coord.equals(pt)) { return true }\n }\n return false\n};\nEdgeIntersectionList.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nEdgeIntersectionList.prototype.getClass = function getClass () {\n return EdgeIntersectionList\n};\n\nvar MonotoneChainIndexer = function MonotoneChainIndexer () {};\n\nMonotoneChainIndexer.prototype.getChainStartIndices = function getChainStartIndices (pts) {\n var this$1 = this;\n\n var start = 0;\n var startIndexList = new ArrayList();\n startIndexList.add(new Integer(start));\n do {\n var last = this$1.findChainEnd(pts, start);\n startIndexList.add(new Integer(last));\n start = last;\n } while (start < pts.length - 1)\n var startIndex = MonotoneChainIndexer.toIntArray(startIndexList);\n return startIndex\n};\nMonotoneChainIndexer.prototype.findChainEnd = function findChainEnd (pts, start) {\n var chainQuad = Quadrant.quadrant(pts[start], pts[start + 1]);\n var last = start + 1;\n while (last < pts.length) {\n var quad = Quadrant.quadrant(pts[last - 1], pts[last]);\n if (quad !== chainQuad) { break }\n last++;\n }\n return last - 1\n};\nMonotoneChainIndexer.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nMonotoneChainIndexer.prototype.getClass = function getClass () {\n return MonotoneChainIndexer\n};\nMonotoneChainIndexer.toIntArray = function toIntArray (list) {\n var array = new Array(list.size()).fill(null);\n for (var i = 0; i < array.length; i++) {\n array[i] = list.get(i).intValue();\n }\n return array\n};\n\nvar MonotoneChainEdge = function MonotoneChainEdge () {\n this.e = null;\n this.pts = null;\n this.startIndex = null;\n this.env1 = new Envelope();\n this.env2 = new Envelope();\n var e = arguments[0];\n this.e = e;\n this.pts = e.getCoordinates();\n var mcb = new MonotoneChainIndexer();\n this.startIndex = mcb.getChainStartIndices(this.pts);\n};\nMonotoneChainEdge.prototype.getCoordinates = function getCoordinates () {\n return this.pts\n};\nMonotoneChainEdge.prototype.getMaxX = function getMaxX (chainIndex) {\n var x1 = this.pts[this.startIndex[chainIndex]].x;\n var x2 = this.pts[this.startIndex[chainIndex + 1]].x;\n return x1 > x2 ? x1 : x2\n};\nMonotoneChainEdge.prototype.getMinX = function getMinX (chainIndex) {\n var x1 = this.pts[this.startIndex[chainIndex]].x;\n var x2 = this.pts[this.startIndex[chainIndex + 1]].x;\n return x1 < x2 ? x1 : x2\n};\nMonotoneChainEdge.prototype.computeIntersectsForChain = function computeIntersectsForChain () {\n if (arguments.length === 4) {\n var chainIndex0 = arguments[0];\n var mce = arguments[1];\n var chainIndex1 = arguments[2];\n var si = arguments[3];\n this.computeIntersectsForChain(this.startIndex[chainIndex0], this.startIndex[chainIndex0 + 1], mce, mce.startIndex[chainIndex1], mce.startIndex[chainIndex1 + 1], si);\n } else if (arguments.length === 6) {\n var start0 = arguments[0];\n var end0 = arguments[1];\n var mce$1 = arguments[2];\n var start1 = arguments[3];\n var end1 = arguments[4];\n var ei = arguments[5];\n var p00 = this.pts[start0];\n var p01 = this.pts[end0];\n var p10 = mce$1.pts[start1];\n var p11 = mce$1.pts[end1];\n if (end0 - start0 === 1 && end1 - start1 === 1) {\n ei.addIntersections(this.e, start0, mce$1.e, start1);\n return null\n }\n this.env1.init(p00, p01);\n this.env2.init(p10, p11);\n if (!this.env1.intersects(this.env2)) { return null }\n var mid0 = Math.trunc((start0 + end0) / 2);\n var mid1 = Math.trunc((start1 + end1) / 2);\n if (start0 < mid0) {\n if (start1 < mid1) { this.computeIntersectsForChain(start0, mid0, mce$1, start1, mid1, ei); }\n if (mid1 < end1) { this.computeIntersectsForChain(start0, mid0, mce$1, mid1, end1, ei); }\n }\n if (mid0 < end0) {\n if (start1 < mid1) { this.computeIntersectsForChain(mid0, end0, mce$1, start1, mid1, ei); }\n if (mid1 < end1) { this.computeIntersectsForChain(mid0, end0, mce$1, mid1, end1, ei); }\n }\n }\n};\nMonotoneChainEdge.prototype.getStartIndexes = function getStartIndexes () {\n return this.startIndex\n};\nMonotoneChainEdge.prototype.computeIntersects = function computeIntersects (mce, si) {\n var this$1 = this;\n\n for (var i = 0; i < this.startIndex.length - 1; i++) {\n for (var j = 0; j < mce.startIndex.length - 1; j++) {\n this$1.computeIntersectsForChain(i, mce, j, si);\n }\n }\n};\nMonotoneChainEdge.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nMonotoneChainEdge.prototype.getClass = function getClass () {\n return MonotoneChainEdge\n};\n\nvar Depth = function Depth () {\n var this$1 = this;\n\n this._depth = Array(2).fill().map(function () { return Array(3); });\n for (var i = 0; i < 2; i++) {\n for (var j = 0; j < 3; j++) {\n this$1._depth[i][j] = Depth.NULL_VALUE;\n }\n }\n};\n\nvar staticAccessors$31 = { NULL_VALUE: { configurable: true } };\nDepth.prototype.getDepth = function getDepth (geomIndex, posIndex) {\n return this._depth[geomIndex][posIndex]\n};\nDepth.prototype.setDepth = function setDepth (geomIndex, posIndex, depthValue) {\n this._depth[geomIndex][posIndex] = depthValue;\n};\nDepth.prototype.isNull = function isNull () {\n var this$1 = this;\n\n if (arguments.length === 0) {\n for (var i = 0; i < 2; i++) {\n for (var j = 0; j < 3; j++) {\n if (this$1._depth[i][j] !== Depth.NULL_VALUE) { return false }\n }\n }\n return true\n } else if (arguments.length === 1) {\n var geomIndex = arguments[0];\n return this._depth[geomIndex][1] === Depth.NULL_VALUE\n } else if (arguments.length === 2) {\n var geomIndex$1 = arguments[0];\n var posIndex = arguments[1];\n return this._depth[geomIndex$1][posIndex] === Depth.NULL_VALUE\n }\n};\nDepth.prototype.normalize = function normalize () {\n var this$1 = this;\n\n for (var i = 0; i < 2; i++) {\n if (!this$1.isNull(i)) {\n var minDepth = this$1._depth[i][1];\n if (this$1._depth[i][2] < minDepth) { minDepth = this$1._depth[i][2]; }\n if (minDepth < 0) { minDepth = 0; }\n for (var j = 1; j < 3; j++) {\n var newValue = 0;\n if (this$1._depth[i][j] > minDepth) { newValue = 1; }\n this$1._depth[i][j] = newValue;\n }\n }\n }\n};\nDepth.prototype.getDelta = function getDelta (geomIndex) {\n return this._depth[geomIndex][Position.RIGHT] - this._depth[geomIndex][Position.LEFT]\n};\nDepth.prototype.getLocation = function getLocation (geomIndex, posIndex) {\n if (this._depth[geomIndex][posIndex] <= 0) { return Location.EXTERIOR }\n return Location.INTERIOR\n};\nDepth.prototype.toString = function toString () {\n return 'A: ' + this._depth[0][1] + ',' + this._depth[0][2] + ' B: ' + this._depth[1][1] + ',' + this._depth[1][2]\n};\nDepth.prototype.add = function add () {\n var this$1 = this;\n\n if (arguments.length === 1) {\n var lbl = arguments[0];\n for (var i = 0; i < 2; i++) {\n for (var j = 1; j < 3; j++) {\n var loc = lbl.getLocation(i, j);\n if (loc === Location.EXTERIOR || loc === Location.INTERIOR) {\n if (this$1.isNull(i, j)) {\n this$1._depth[i][j] = Depth.depthAtLocation(loc);\n } else { this$1._depth[i][j] += Depth.depthAtLocation(loc); }\n }\n }\n }\n } else if (arguments.length === 3) {\n var geomIndex = arguments[0];\n var posIndex = arguments[1];\n var location = arguments[2];\n if (location === Location.INTERIOR) { this._depth[geomIndex][posIndex]++; }\n }\n};\nDepth.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nDepth.prototype.getClass = function getClass () {\n return Depth\n};\nDepth.depthAtLocation = function depthAtLocation (location) {\n if (location === Location.EXTERIOR) { return 0 }\n if (location === Location.INTERIOR) { return 1 }\n return Depth.NULL_VALUE\n};\nstaticAccessors$31.NULL_VALUE.get = function () { return -1 };\n\nObject.defineProperties( Depth, staticAccessors$31 );\n\nvar Edge = (function (GraphComponent$$1) {\n function Edge () {\n GraphComponent$$1.call(this);\n this.pts = null;\n this._env = null;\n this.eiList = new EdgeIntersectionList(this);\n this._name = null;\n this._mce = null;\n this._isIsolated = true;\n this._depth = new Depth();\n this._depthDelta = 0;\n if (arguments.length === 1) {\n var pts = arguments[0];\n Edge.call(this, pts, null);\n } else if (arguments.length === 2) {\n var pts$1 = arguments[0];\n var label = arguments[1];\n this.pts = pts$1;\n this._label = label;\n }\n }\n\n if ( GraphComponent$$1 ) Edge.__proto__ = GraphComponent$$1;\n Edge.prototype = Object.create( GraphComponent$$1 && GraphComponent$$1.prototype );\n Edge.prototype.constructor = Edge;\n Edge.prototype.getDepth = function getDepth () {\n return this._depth\n };\n Edge.prototype.getCollapsedEdge = function getCollapsedEdge () {\n var newPts = new Array(2).fill(null);\n newPts[0] = this.pts[0];\n newPts[1] = this.pts[1];\n var newe = new Edge(newPts, Label.toLineLabel(this._label));\n return newe\n };\n Edge.prototype.isIsolated = function isIsolated () {\n return this._isIsolated\n };\n Edge.prototype.getCoordinates = function getCoordinates () {\n return this.pts\n };\n Edge.prototype.setIsolated = function setIsolated (isIsolated) {\n this._isIsolated = isIsolated;\n };\n Edge.prototype.setName = function setName (name) {\n this._name = name;\n };\n Edge.prototype.equals = function equals (o) {\n var this$1 = this;\n\n if (!(o instanceof Edge)) { return false }\n var e = o;\n if (this.pts.length !== e.pts.length) { return false }\n var isEqualForward = true;\n var isEqualReverse = true;\n var iRev = this.pts.length;\n for (var i = 0; i < this.pts.length; i++) {\n if (!this$1.pts[i].equals2D(e.pts[i])) {\n isEqualForward = false;\n }\n if (!this$1.pts[i].equals2D(e.pts[--iRev])) {\n isEqualReverse = false;\n }\n if (!isEqualForward && !isEqualReverse) { return false }\n }\n return true\n };\n Edge.prototype.getCoordinate = function getCoordinate () {\n if (arguments.length === 0) {\n if (this.pts.length > 0) { return this.pts[0] }\n return null\n } else if (arguments.length === 1) {\n var i = arguments[0];\n return this.pts[i]\n }\n };\n Edge.prototype.print = function print (out) {\n var this$1 = this;\n\n out.print('edge ' + this._name + ': ');\n out.print('LINESTRING (');\n for (var i = 0; i < this.pts.length; i++) {\n if (i > 0) { out.print(','); }\n out.print(this$1.pts[i].x + ' ' + this$1.pts[i].y);\n }\n out.print(') ' + this._label + ' ' + this._depthDelta);\n };\n Edge.prototype.computeIM = function computeIM (im) {\n Edge.updateIM(this._label, im);\n };\n Edge.prototype.isCollapsed = function isCollapsed () {\n if (!this._label.isArea()) { return false }\n if (this.pts.length !== 3) { return false }\n if (this.pts[0].equals(this.pts[2])) { return true }\n return false\n };\n Edge.prototype.isClosed = function isClosed () {\n return this.pts[0].equals(this.pts[this.pts.length - 1])\n };\n Edge.prototype.getMaximumSegmentIndex = function getMaximumSegmentIndex () {\n return this.pts.length - 1\n };\n Edge.prototype.getDepthDelta = function getDepthDelta () {\n return this._depthDelta\n };\n Edge.prototype.getNumPoints = function getNumPoints () {\n return this.pts.length\n };\n Edge.prototype.printReverse = function printReverse (out) {\n var this$1 = this;\n\n out.print('edge ' + this._name + ': ');\n for (var i = this.pts.length - 1; i >= 0; i--) {\n out.print(this$1.pts[i] + ' ');\n }\n out.println('');\n };\n Edge.prototype.getMonotoneChainEdge = function getMonotoneChainEdge () {\n if (this._mce === null) { this._mce = new MonotoneChainEdge(this); }\n return this._mce\n };\n Edge.prototype.getEnvelope = function getEnvelope () {\n var this$1 = this;\n\n if (this._env === null) {\n this._env = new Envelope();\n for (var i = 0; i < this.pts.length; i++) {\n this$1._env.expandToInclude(this$1.pts[i]);\n }\n }\n return this._env\n };\n Edge.prototype.addIntersection = function addIntersection (li, segmentIndex, geomIndex, intIndex) {\n var intPt = new Coordinate(li.getIntersection(intIndex));\n var normalizedSegmentIndex = segmentIndex;\n var dist = li.getEdgeDistance(geomIndex, intIndex);\n var nextSegIndex = normalizedSegmentIndex + 1;\n if (nextSegIndex < this.pts.length) {\n var nextPt = this.pts[nextSegIndex];\n if (intPt.equals2D(nextPt)) {\n normalizedSegmentIndex = nextSegIndex;\n dist = 0.0;\n }\n }\n this.eiList.add(intPt, normalizedSegmentIndex, dist);\n };\n Edge.prototype.toString = function toString () {\n var this$1 = this;\n\n var buf = new StringBuffer();\n buf.append('edge ' + this._name + ': ');\n buf.append('LINESTRING (');\n for (var i = 0; i < this.pts.length; i++) {\n if (i > 0) { buf.append(','); }\n buf.append(this$1.pts[i].x + ' ' + this$1.pts[i].y);\n }\n buf.append(') ' + this._label + ' ' + this._depthDelta);\n return buf.toString()\n };\n Edge.prototype.isPointwiseEqual = function isPointwiseEqual (e) {\n var this$1 = this;\n\n if (this.pts.length !== e.pts.length) { return false }\n for (var i = 0; i < this.pts.length; i++) {\n if (!this$1.pts[i].equals2D(e.pts[i])) {\n return false\n }\n }\n return true\n };\n Edge.prototype.setDepthDelta = function setDepthDelta (depthDelta) {\n this._depthDelta = depthDelta;\n };\n Edge.prototype.getEdgeIntersectionList = function getEdgeIntersectionList () {\n return this.eiList\n };\n Edge.prototype.addIntersections = function addIntersections (li, segmentIndex, geomIndex) {\n var this$1 = this;\n\n for (var i = 0; i < li.getIntersectionNum(); i++) {\n this$1.addIntersection(li, segmentIndex, geomIndex, i);\n }\n };\n Edge.prototype.interfaces_ = function interfaces_ () {\n return []\n };\n Edge.prototype.getClass = function getClass () {\n return Edge\n };\n Edge.updateIM = function updateIM () {\n if (arguments.length === 2) {\n var label = arguments[0];\n var im = arguments[1];\n im.setAtLeastIfValid(label.getLocation(0, Position.ON), label.getLocation(1, Position.ON), 1);\n if (label.isArea()) {\n im.setAtLeastIfValid(label.getLocation(0, Position.LEFT), label.getLocation(1, Position.LEFT), 2);\n im.setAtLeastIfValid(label.getLocation(0, Position.RIGHT), label.getLocation(1, Position.RIGHT), 2);\n }\n } else { return GraphComponent$$1.prototype.updateIM.apply(this, arguments) }\n };\n\n return Edge;\n}(GraphComponent));\n\nvar BufferBuilder = function BufferBuilder (bufParams) {\n this._workingPrecisionModel = null;\n this._workingNoder = null;\n this._geomFact = null;\n this._graph = null;\n this._edgeList = new EdgeList();\n this._bufParams = bufParams || null;\n};\nBufferBuilder.prototype.setWorkingPrecisionModel = function setWorkingPrecisionModel (pm) {\n this._workingPrecisionModel = pm;\n};\nBufferBuilder.prototype.insertUniqueEdge = function insertUniqueEdge (e) {\n var existingEdge = this._edgeList.findEqualEdge(e);\n if (existingEdge !== null) {\n var existingLabel = existingEdge.getLabel();\n var labelToMerge = e.getLabel();\n if (!existingEdge.isPointwiseEqual(e)) {\n labelToMerge = new Label(e.getLabel());\n labelToMerge.flip();\n }\n existingLabel.merge(labelToMerge);\n var mergeDelta = BufferBuilder.depthDelta(labelToMerge);\n var existingDelta = existingEdge.getDepthDelta();\n var newDelta = existingDelta + mergeDelta;\n existingEdge.setDepthDelta(newDelta);\n } else {\n this._edgeList.add(e);\n e.setDepthDelta(BufferBuilder.depthDelta(e.getLabel()));\n }\n};\nBufferBuilder.prototype.buildSubgraphs = function buildSubgraphs (subgraphList, polyBuilder) {\n var processedGraphs = new ArrayList();\n for (var i = subgraphList.iterator(); i.hasNext();) {\n var subgraph = i.next();\n var p = subgraph.getRightmostCoordinate();\n var locater = new SubgraphDepthLocater(processedGraphs);\n var outsideDepth = locater.getDepth(p);\n subgraph.computeDepth(outsideDepth);\n subgraph.findResultEdges();\n processedGraphs.add(subgraph);\n polyBuilder.add(subgraph.getDirectedEdges(), subgraph.getNodes());\n }\n};\nBufferBuilder.prototype.createSubgraphs = function createSubgraphs (graph) {\n var subgraphList = new ArrayList();\n for (var i = graph.getNodes().iterator(); i.hasNext();) {\n var node = i.next();\n if (!node.isVisited()) {\n var subgraph = new BufferSubgraph();\n subgraph.create(node);\n subgraphList.add(subgraph);\n }\n }\n Collections.sort(subgraphList, Collections.reverseOrder());\n return subgraphList\n};\nBufferBuilder.prototype.createEmptyResultGeometry = function createEmptyResultGeometry () {\n var emptyGeom = this._geomFact.createPolygon();\n return emptyGeom\n};\nBufferBuilder.prototype.getNoder = function getNoder (precisionModel) {\n if (this._workingNoder !== null) { return this._workingNoder }\n var noder = new MCIndexNoder();\n var li = new RobustLineIntersector();\n li.setPrecisionModel(precisionModel);\n noder.setSegmentIntersector(new IntersectionAdder(li));\n return noder\n};\nBufferBuilder.prototype.buffer = function buffer (g, distance) {\n var precisionModel = this._workingPrecisionModel;\n if (precisionModel === null) { precisionModel = g.getPrecisionModel(); }\n this._geomFact = g.getFactory();\n var curveBuilder = new OffsetCurveBuilder(precisionModel, this._bufParams);\n var curveSetBuilder = new OffsetCurveSetBuilder(g, distance, curveBuilder);\n var bufferSegStrList = curveSetBuilder.getCurves();\n if (bufferSegStrList.size() <= 0) {\n return this.createEmptyResultGeometry()\n }\n this.computeNodedEdges(bufferSegStrList, precisionModel);\n this._graph = new PlanarGraph(new OverlayNodeFactory());\n this._graph.addEdges(this._edgeList.getEdges());\n var subgraphList = this.createSubgraphs(this._graph);\n var polyBuilder = new PolygonBuilder(this._geomFact);\n this.buildSubgraphs(subgraphList, polyBuilder);\n var resultPolyList = polyBuilder.getPolygons();\n if (resultPolyList.size() <= 0) {\n return this.createEmptyResultGeometry()\n }\n var resultGeom = this._geomFact.buildGeometry(resultPolyList);\n return resultGeom\n};\nBufferBuilder.prototype.computeNodedEdges = function computeNodedEdges (bufferSegStrList, precisionModel) {\n var this$1 = this;\n\n var noder = this.getNoder(precisionModel);\n noder.computeNodes(bufferSegStrList);\n var nodedSegStrings = noder.getNodedSubstrings();\n for (var i = nodedSegStrings.iterator(); i.hasNext();) {\n var segStr = i.next();\n var pts = segStr.getCoordinates();\n if (pts.length === 2 && pts[0].equals2D(pts[1])) { continue }\n var oldLabel = segStr.getData();\n var edge = new Edge(segStr.getCoordinates(), new Label(oldLabel));\n this$1.insertUniqueEdge(edge);\n }\n};\nBufferBuilder.prototype.setNoder = function setNoder (noder) {\n this._workingNoder = noder;\n};\nBufferBuilder.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nBufferBuilder.prototype.getClass = function getClass () {\n return BufferBuilder\n};\nBufferBuilder.depthDelta = function depthDelta (label) {\n var lLoc = label.getLocation(0, Position.LEFT);\n var rLoc = label.getLocation(0, Position.RIGHT);\n if (lLoc === Location.INTERIOR && rLoc === Location.EXTERIOR) { return 1; } else if (lLoc === Location.EXTERIOR && rLoc === Location.INTERIOR) { return -1 }\n return 0\n};\nBufferBuilder.convertSegStrings = function convertSegStrings (it) {\n var fact = new GeometryFactory();\n var lines = new ArrayList();\n while (it.hasNext()) {\n var ss = it.next();\n var line = fact.createLineString(ss.getCoordinates());\n lines.add(line);\n }\n return fact.buildGeometry(lines)\n};\n\nvar ScaledNoder = function ScaledNoder () {\n this._noder = null;\n this._scaleFactor = null;\n this._offsetX = null;\n this._offsetY = null;\n this._isScaled = false;\n if (arguments.length === 2) {\n var noder = arguments[0];\n var scaleFactor = arguments[1];\n this._noder = noder;\n this._scaleFactor = scaleFactor;\n this._offsetX = 0.0;\n this._offsetY = 0.0;\n this._isScaled = !this.isIntegerPrecision();\n } else if (arguments.length === 4) {\n var noder$1 = arguments[0];\n var scaleFactor$1 = arguments[1];\n var offsetX = arguments[2];\n var offsetY = arguments[3];\n this._noder = noder$1;\n this._scaleFactor = scaleFactor$1;\n this._offsetX = offsetX;\n this._offsetY = offsetY;\n this._isScaled = !this.isIntegerPrecision();\n }\n};\nScaledNoder.prototype.rescale = function rescale () {\n var this$1 = this;\n\n if (hasInterface(arguments[0], Collection)) {\n var segStrings = arguments[0];\n for (var i = segStrings.iterator(); i.hasNext();) {\n var ss = i.next();\n this$1.rescale(ss.getCoordinates());\n }\n } else if (arguments[0] instanceof Array) {\n var pts = arguments[0];\n // let p0 = null\n // let p1 = null\n // if (pts.length === 2) {\n // p0 = new Coordinate(pts[0])\n // p1 = new Coordinate(pts[1])\n // }\n for (var i$1 = 0; i$1 < pts.length; i$1++) {\n pts[i$1].x = pts[i$1].x / this$1._scaleFactor + this$1._offsetX;\n pts[i$1].y = pts[i$1].y / this$1._scaleFactor + this$1._offsetY;\n }\n if (pts.length === 2 && pts[0].equals2D(pts[1])) {\n System.out.println(pts);\n }\n }\n};\nScaledNoder.prototype.scale = function scale () {\n var this$1 = this;\n\n if (hasInterface(arguments[0], Collection)) {\n var segStrings = arguments[0];\n var nodedSegmentStrings = new ArrayList();\n for (var i = segStrings.iterator(); i.hasNext();) {\n var ss = i.next();\n nodedSegmentStrings.add(new NodedSegmentString(this$1.scale(ss.getCoordinates()), ss.getData()));\n }\n return nodedSegmentStrings\n } else if (arguments[0] instanceof Array) {\n var pts = arguments[0];\n var roundPts = new Array(pts.length).fill(null);\n for (var i$1 = 0; i$1 < pts.length; i$1++) {\n roundPts[i$1] = new Coordinate(Math.round((pts[i$1].x - this$1._offsetX) * this$1._scaleFactor), Math.round((pts[i$1].y - this$1._offsetY) * this$1._scaleFactor), pts[i$1].z);\n }\n var roundPtsNoDup = CoordinateArrays.removeRepeatedPoints(roundPts);\n return roundPtsNoDup\n }\n};\nScaledNoder.prototype.isIntegerPrecision = function isIntegerPrecision () {\n return this._scaleFactor === 1.0\n};\nScaledNoder.prototype.getNodedSubstrings = function getNodedSubstrings () {\n var splitSS = this._noder.getNodedSubstrings();\n if (this._isScaled) { this.rescale(splitSS); }\n return splitSS\n};\nScaledNoder.prototype.computeNodes = function computeNodes (inputSegStrings) {\n var intSegStrings = inputSegStrings;\n if (this._isScaled) { intSegStrings = this.scale(inputSegStrings); }\n this._noder.computeNodes(intSegStrings);\n};\nScaledNoder.prototype.interfaces_ = function interfaces_ () {\n return [Noder]\n};\nScaledNoder.prototype.getClass = function getClass () {\n return ScaledNoder\n};\n\nvar NodingValidator = function NodingValidator () {\n this._li = new RobustLineIntersector();\n this._segStrings = null;\n var segStrings = arguments[0];\n this._segStrings = segStrings;\n};\n\nvar staticAccessors$33 = { fact: { configurable: true } };\nNodingValidator.prototype.checkEndPtVertexIntersections = function checkEndPtVertexIntersections () {\n var this$1 = this;\n\n if (arguments.length === 0) {\n for (var i = this._segStrings.iterator(); i.hasNext();) {\n var ss = i.next();\n var pts = ss.getCoordinates();\n this$1.checkEndPtVertexIntersections(pts[0], this$1._segStrings);\n this$1.checkEndPtVertexIntersections(pts[pts.length - 1], this$1._segStrings);\n }\n } else if (arguments.length === 2) {\n var testPt = arguments[0];\n var segStrings = arguments[1];\n for (var i$1 = segStrings.iterator(); i$1.hasNext();) {\n var ss$1 = i$1.next();\n var pts$1 = ss$1.getCoordinates();\n for (var j = 1; j < pts$1.length - 1; j++) {\n if (pts$1[j].equals(testPt)) { throw new RuntimeException('found endpt/interior pt intersection at index ' + j + ' :pt ' + testPt) }\n }\n }\n }\n};\nNodingValidator.prototype.checkInteriorIntersections = function checkInteriorIntersections () {\n var this$1 = this;\n\n if (arguments.length === 0) {\n for (var i = this._segStrings.iterator(); i.hasNext();) {\n var ss0 = i.next();\n for (var j = this._segStrings.iterator(); j.hasNext();) {\n var ss1 = j.next();\n this$1.checkInteriorIntersections(ss0, ss1);\n }\n }\n } else if (arguments.length === 2) {\n var ss0$1 = arguments[0];\n var ss1$1 = arguments[1];\n var pts0 = ss0$1.getCoordinates();\n var pts1 = ss1$1.getCoordinates();\n for (var i0 = 0; i0 < pts0.length - 1; i0++) {\n for (var i1 = 0; i1 < pts1.length - 1; i1++) {\n this$1.checkInteriorIntersections(ss0$1, i0, ss1$1, i1);\n }\n }\n } else if (arguments.length === 4) {\n var e0 = arguments[0];\n var segIndex0 = arguments[1];\n var e1 = arguments[2];\n var segIndex1 = arguments[3];\n if (e0 === e1 && segIndex0 === segIndex1) { return null }\n var p00 = e0.getCoordinates()[segIndex0];\n var p01 = e0.getCoordinates()[segIndex0 + 1];\n var p10 = e1.getCoordinates()[segIndex1];\n var p11 = e1.getCoordinates()[segIndex1 + 1];\n this._li.computeIntersection(p00, p01, p10, p11);\n if (this._li.hasIntersection()) {\n if (this._li.isProper() || this.hasInteriorIntersection(this._li, p00, p01) || this.hasInteriorIntersection(this._li, p10, p11)) {\n throw new RuntimeException('found non-noded intersection at ' + p00 + '-' + p01 + ' and ' + p10 + '-' + p11)\n }\n }\n }\n};\nNodingValidator.prototype.checkValid = function checkValid () {\n this.checkEndPtVertexIntersections();\n this.checkInteriorIntersections();\n this.checkCollapses();\n};\nNodingValidator.prototype.checkCollapses = function checkCollapses () {\n var this$1 = this;\n\n if (arguments.length === 0) {\n for (var i = this._segStrings.iterator(); i.hasNext();) {\n var ss = i.next();\n this$1.checkCollapses(ss);\n }\n } else if (arguments.length === 1) {\n var ss$1 = arguments[0];\n var pts = ss$1.getCoordinates();\n for (var i$1 = 0; i$1 < pts.length - 2; i$1++) {\n this$1.checkCollapse(pts[i$1], pts[i$1 + 1], pts[i$1 + 2]);\n }\n }\n};\nNodingValidator.prototype.hasInteriorIntersection = function hasInteriorIntersection (li, p0, p1) {\n for (var i = 0; i < li.getIntersectionNum(); i++) {\n var intPt = li.getIntersection(i);\n if (!(intPt.equals(p0) || intPt.equals(p1))) { return true }\n }\n return false\n};\nNodingValidator.prototype.checkCollapse = function checkCollapse (p0, p1, p2) {\n if (p0.equals(p2)) { throw new RuntimeException('found non-noded collapse at ' + NodingValidator.fact.createLineString([p0, p1, p2])) }\n};\nNodingValidator.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nNodingValidator.prototype.getClass = function getClass () {\n return NodingValidator\n};\nstaticAccessors$33.fact.get = function () { return new GeometryFactory() };\n\nObject.defineProperties( NodingValidator, staticAccessors$33 );\n\nvar HotPixel = function HotPixel () {\n this._li = null;\n this._pt = null;\n this._originalPt = null;\n this._ptScaled = null;\n this._p0Scaled = null;\n this._p1Scaled = null;\n this._scaleFactor = null;\n this._minx = null;\n this._maxx = null;\n this._miny = null;\n this._maxy = null;\n this._corner = new Array(4).fill(null);\n this._safeEnv = null;\n var pt = arguments[0];\n var scaleFactor = arguments[1];\n var li = arguments[2];\n this._originalPt = pt;\n this._pt = pt;\n this._scaleFactor = scaleFactor;\n this._li = li;\n if (scaleFactor <= 0) { throw new IllegalArgumentException('Scale factor must be non-zero') }\n if (scaleFactor !== 1.0) {\n this._pt = new Coordinate(this.scale(pt.x), this.scale(pt.y));\n this._p0Scaled = new Coordinate();\n this._p1Scaled = new Coordinate();\n }\n this.initCorners(this._pt);\n};\n\nvar staticAccessors$34 = { SAFE_ENV_EXPANSION_FACTOR: { configurable: true } };\nHotPixel.prototype.intersectsScaled = function intersectsScaled (p0, p1) {\n var segMinx = Math.min(p0.x, p1.x);\n var segMaxx = Math.max(p0.x, p1.x);\n var segMiny = Math.min(p0.y, p1.y);\n var segMaxy = Math.max(p0.y, p1.y);\n var isOutsidePixelEnv = this._maxx < segMinx || this._minx > segMaxx || this._maxy < segMiny || this._miny > segMaxy;\n if (isOutsidePixelEnv) { return false }\n var intersects = this.intersectsToleranceSquare(p0, p1);\n Assert.isTrue(!(isOutsidePixelEnv && intersects), 'Found bad envelope test');\n return intersects\n};\nHotPixel.prototype.initCorners = function initCorners (pt) {\n var tolerance = 0.5;\n this._minx = pt.x - tolerance;\n this._maxx = pt.x + tolerance;\n this._miny = pt.y - tolerance;\n this._maxy = pt.y + tolerance;\n this._corner[0] = new Coordinate(this._maxx, this._maxy);\n this._corner[1] = new Coordinate(this._minx, this._maxy);\n this._corner[2] = new Coordinate(this._minx, this._miny);\n this._corner[3] = new Coordinate(this._maxx, this._miny);\n};\nHotPixel.prototype.intersects = function intersects (p0, p1) {\n if (this._scaleFactor === 1.0) { return this.intersectsScaled(p0, p1) }\n this.copyScaled(p0, this._p0Scaled);\n this.copyScaled(p1, this._p1Scaled);\n return this.intersectsScaled(this._p0Scaled, this._p1Scaled)\n};\nHotPixel.prototype.scale = function scale (val) {\n return Math.round(val * this._scaleFactor)\n};\nHotPixel.prototype.getCoordinate = function getCoordinate () {\n return this._originalPt\n};\nHotPixel.prototype.copyScaled = function copyScaled (p, pScaled) {\n pScaled.x = this.scale(p.x);\n pScaled.y = this.scale(p.y);\n};\nHotPixel.prototype.getSafeEnvelope = function getSafeEnvelope () {\n if (this._safeEnv === null) {\n var safeTolerance = HotPixel.SAFE_ENV_EXPANSION_FACTOR / this._scaleFactor;\n this._safeEnv = new Envelope(this._originalPt.x - safeTolerance, this._originalPt.x + safeTolerance, this._originalPt.y - safeTolerance, this._originalPt.y + safeTolerance);\n }\n return this._safeEnv\n};\nHotPixel.prototype.intersectsPixelClosure = function intersectsPixelClosure (p0, p1) {\n this._li.computeIntersection(p0, p1, this._corner[0], this._corner[1]);\n if (this._li.hasIntersection()) { return true }\n this._li.computeIntersection(p0, p1, this._corner[1], this._corner[2]);\n if (this._li.hasIntersection()) { return true }\n this._li.computeIntersection(p0, p1, this._corner[2], this._corner[3]);\n if (this._li.hasIntersection()) { return true }\n this._li.computeIntersection(p0, p1, this._corner[3], this._corner[0]);\n if (this._li.hasIntersection()) { return true }\n return false\n};\nHotPixel.prototype.intersectsToleranceSquare = function intersectsToleranceSquare (p0, p1) {\n var intersectsLeft = false;\n var intersectsBottom = false;\n this._li.computeIntersection(p0, p1, this._corner[0], this._corner[1]);\n if (this._li.isProper()) { return true }\n this._li.computeIntersection(p0, p1, this._corner[1], this._corner[2]);\n if (this._li.isProper()) { return true }\n if (this._li.hasIntersection()) { intersectsLeft = true; }\n this._li.computeIntersection(p0, p1, this._corner[2], this._corner[3]);\n if (this._li.isProper()) { return true }\n if (this._li.hasIntersection()) { intersectsBottom = true; }\n this._li.computeIntersection(p0, p1, this._corner[3], this._corner[0]);\n if (this._li.isProper()) { return true }\n if (intersectsLeft && intersectsBottom) { return true }\n if (p0.equals(this._pt)) { return true }\n if (p1.equals(this._pt)) { return true }\n return false\n};\nHotPixel.prototype.addSnappedNode = function addSnappedNode (segStr, segIndex) {\n var p0 = segStr.getCoordinate(segIndex);\n var p1 = segStr.getCoordinate(segIndex + 1);\n if (this.intersects(p0, p1)) {\n segStr.addIntersection(this.getCoordinate(), segIndex);\n return true\n }\n return false\n};\nHotPixel.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nHotPixel.prototype.getClass = function getClass () {\n return HotPixel\n};\nstaticAccessors$34.SAFE_ENV_EXPANSION_FACTOR.get = function () { return 0.75 };\n\nObject.defineProperties( HotPixel, staticAccessors$34 );\n\nvar MonotoneChainSelectAction = function MonotoneChainSelectAction () {\n this.tempEnv1 = new Envelope();\n this.selectedSegment = new LineSegment();\n};\nMonotoneChainSelectAction.prototype.select = function select () {\n if (arguments.length === 1) {\n // const seg = arguments[0]\n } else if (arguments.length === 2) {\n var mc = arguments[0];\n var startIndex = arguments[1];\n mc.getLineSegment(startIndex, this.selectedSegment);\n this.select(this.selectedSegment);\n }\n};\nMonotoneChainSelectAction.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nMonotoneChainSelectAction.prototype.getClass = function getClass () {\n return MonotoneChainSelectAction\n};\n\nvar MCIndexPointSnapper = function MCIndexPointSnapper () {\n this._index = null;\n var index = arguments[0];\n this._index = index;\n};\n\nvar staticAccessors$35 = { HotPixelSnapAction: { configurable: true } };\nMCIndexPointSnapper.prototype.snap = function snap () {\n if (arguments.length === 1) {\n var hotPixel = arguments[0];\n return this.snap(hotPixel, null, -1)\n } else if (arguments.length === 3) {\n var hotPixel$1 = arguments[0];\n var parentEdge = arguments[1];\n var hotPixelVertexIndex = arguments[2];\n var pixelEnv = hotPixel$1.getSafeEnvelope();\n var hotPixelSnapAction = new HotPixelSnapAction(hotPixel$1, parentEdge, hotPixelVertexIndex);\n this._index.query(pixelEnv, {\n interfaces_: function () {\n return [ItemVisitor]\n },\n visitItem: function (item) {\n var testChain = item;\n testChain.select(pixelEnv, hotPixelSnapAction);\n }\n });\n return hotPixelSnapAction.isNodeAdded()\n }\n};\nMCIndexPointSnapper.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nMCIndexPointSnapper.prototype.getClass = function getClass () {\n return MCIndexPointSnapper\n};\nstaticAccessors$35.HotPixelSnapAction.get = function () { return HotPixelSnapAction };\n\nObject.defineProperties( MCIndexPointSnapper, staticAccessors$35 );\n\nvar HotPixelSnapAction = (function (MonotoneChainSelectAction$$1) {\n function HotPixelSnapAction () {\n MonotoneChainSelectAction$$1.call(this);\n this._hotPixel = null;\n this._parentEdge = null;\n this._hotPixelVertexIndex = null;\n this._isNodeAdded = false;\n var hotPixel = arguments[0];\n var parentEdge = arguments[1];\n var hotPixelVertexIndex = arguments[2];\n this._hotPixel = hotPixel;\n this._parentEdge = parentEdge;\n this._hotPixelVertexIndex = hotPixelVertexIndex;\n }\n\n if ( MonotoneChainSelectAction$$1 ) HotPixelSnapAction.__proto__ = MonotoneChainSelectAction$$1;\n HotPixelSnapAction.prototype = Object.create( MonotoneChainSelectAction$$1 && MonotoneChainSelectAction$$1.prototype );\n HotPixelSnapAction.prototype.constructor = HotPixelSnapAction;\n HotPixelSnapAction.prototype.isNodeAdded = function isNodeAdded () {\n return this._isNodeAdded\n };\n HotPixelSnapAction.prototype.select = function select () {\n if (arguments.length === 2) {\n var mc = arguments[0];\n var startIndex = arguments[1];\n var ss = mc.getContext();\n if (this._parentEdge !== null) {\n if (ss === this._parentEdge && startIndex === this._hotPixelVertexIndex) { return null }\n }\n this._isNodeAdded = this._hotPixel.addSnappedNode(ss, startIndex);\n } else { return MonotoneChainSelectAction$$1.prototype.select.apply(this, arguments) }\n };\n HotPixelSnapAction.prototype.interfaces_ = function interfaces_ () {\n return []\n };\n HotPixelSnapAction.prototype.getClass = function getClass () {\n return HotPixelSnapAction\n };\n\n return HotPixelSnapAction;\n}(MonotoneChainSelectAction));\n\nvar InteriorIntersectionFinderAdder = function InteriorIntersectionFinderAdder () {\n this._li = null;\n this._interiorIntersections = null;\n var li = arguments[0];\n this._li = li;\n this._interiorIntersections = new ArrayList();\n};\nInteriorIntersectionFinderAdder.prototype.processIntersections = function processIntersections (e0, segIndex0, e1, segIndex1) {\n var this$1 = this;\n\n if (e0 === e1 && segIndex0 === segIndex1) { return null }\n var p00 = e0.getCoordinates()[segIndex0];\n var p01 = e0.getCoordinates()[segIndex0 + 1];\n var p10 = e1.getCoordinates()[segIndex1];\n var p11 = e1.getCoordinates()[segIndex1 + 1];\n this._li.computeIntersection(p00, p01, p10, p11);\n if (this._li.hasIntersection()) {\n if (this._li.isInteriorIntersection()) {\n for (var intIndex = 0; intIndex < this._li.getIntersectionNum(); intIndex++) {\n this$1._interiorIntersections.add(this$1._li.getIntersection(intIndex));\n }\n e0.addIntersections(this._li, segIndex0, 0);\n e1.addIntersections(this._li, segIndex1, 1);\n }\n }\n};\nInteriorIntersectionFinderAdder.prototype.isDone = function isDone () {\n return false\n};\nInteriorIntersectionFinderAdder.prototype.getInteriorIntersections = function getInteriorIntersections () {\n return this._interiorIntersections\n};\nInteriorIntersectionFinderAdder.prototype.interfaces_ = function interfaces_ () {\n return [SegmentIntersector]\n};\nInteriorIntersectionFinderAdder.prototype.getClass = function getClass () {\n return InteriorIntersectionFinderAdder\n};\n\nvar MCIndexSnapRounder = function MCIndexSnapRounder () {\n this._pm = null;\n this._li = null;\n this._scaleFactor = null;\n this._noder = null;\n this._pointSnapper = null;\n this._nodedSegStrings = null;\n var pm = arguments[0];\n this._pm = pm;\n this._li = new RobustLineIntersector();\n this._li.setPrecisionModel(pm);\n this._scaleFactor = pm.getScale();\n};\nMCIndexSnapRounder.prototype.checkCorrectness = function checkCorrectness (inputSegmentStrings) {\n var resultSegStrings = NodedSegmentString.getNodedSubstrings(inputSegmentStrings);\n var nv = new NodingValidator(resultSegStrings);\n try {\n nv.checkValid();\n } catch (ex) {\n if (ex instanceof Exception) {\n ex.printStackTrace();\n } else { throw ex }\n } finally {}\n};\nMCIndexSnapRounder.prototype.getNodedSubstrings = function getNodedSubstrings () {\n return NodedSegmentString.getNodedSubstrings(this._nodedSegStrings)\n};\nMCIndexSnapRounder.prototype.snapRound = function snapRound (segStrings, li) {\n var intersections = this.findInteriorIntersections(segStrings, li);\n this.computeIntersectionSnaps(intersections);\n this.computeVertexSnaps(segStrings);\n};\nMCIndexSnapRounder.prototype.findInteriorIntersections = function findInteriorIntersections (segStrings, li) {\n var intFinderAdder = new InteriorIntersectionFinderAdder(li);\n this._noder.setSegmentIntersector(intFinderAdder);\n this._noder.computeNodes(segStrings);\n return intFinderAdder.getInteriorIntersections()\n};\nMCIndexSnapRounder.prototype.computeVertexSnaps = function computeVertexSnaps () {\n var this$1 = this;\n\n if (hasInterface(arguments[0], Collection)) {\n var edges = arguments[0];\n for (var i0 = edges.iterator(); i0.hasNext();) {\n var edge0 = i0.next();\n this$1.computeVertexSnaps(edge0);\n }\n } else if (arguments[0] instanceof NodedSegmentString) {\n var e = arguments[0];\n var pts0 = e.getCoordinates();\n for (var i = 0; i < pts0.length; i++) {\n var hotPixel = new HotPixel(pts0[i], this$1._scaleFactor, this$1._li);\n var isNodeAdded = this$1._pointSnapper.snap(hotPixel, e, i);\n if (isNodeAdded) {\n e.addIntersection(pts0[i], i);\n }\n }\n }\n};\nMCIndexSnapRounder.prototype.computeNodes = function computeNodes (inputSegmentStrings) {\n this._nodedSegStrings = inputSegmentStrings;\n this._noder = new MCIndexNoder();\n this._pointSnapper = new MCIndexPointSnapper(this._noder.getIndex());\n this.snapRound(inputSegmentStrings, this._li);\n};\nMCIndexSnapRounder.prototype.computeIntersectionSnaps = function computeIntersectionSnaps (snapPts) {\n var this$1 = this;\n\n for (var it = snapPts.iterator(); it.hasNext();) {\n var snapPt = it.next();\n var hotPixel = new HotPixel(snapPt, this$1._scaleFactor, this$1._li);\n this$1._pointSnapper.snap(hotPixel);\n }\n};\nMCIndexSnapRounder.prototype.interfaces_ = function interfaces_ () {\n return [Noder]\n};\nMCIndexSnapRounder.prototype.getClass = function getClass () {\n return MCIndexSnapRounder\n};\n\nvar BufferOp = function BufferOp () {\n this._argGeom = null;\n this._distance = null;\n this._bufParams = new BufferParameters();\n this._resultGeometry = null;\n this._saveException = null;\n if (arguments.length === 1) {\n var g = arguments[0];\n this._argGeom = g;\n } else if (arguments.length === 2) {\n var g$1 = arguments[0];\n var bufParams = arguments[1];\n this._argGeom = g$1;\n this._bufParams = bufParams;\n }\n};\n\nvar staticAccessors$32 = { CAP_ROUND: { configurable: true },CAP_BUTT: { configurable: true },CAP_FLAT: { configurable: true },CAP_SQUARE: { configurable: true },MAX_PRECISION_DIGITS: { configurable: true } };\nBufferOp.prototype.bufferFixedPrecision = function bufferFixedPrecision (fixedPM) {\n var noder = new ScaledNoder(new MCIndexSnapRounder(new PrecisionModel(1.0)), fixedPM.getScale());\n var bufBuilder = new BufferBuilder(this._bufParams);\n bufBuilder.setWorkingPrecisionModel(fixedPM);\n bufBuilder.setNoder(noder);\n this._resultGeometry = bufBuilder.buffer(this._argGeom, this._distance);\n};\nBufferOp.prototype.bufferReducedPrecision = function bufferReducedPrecision () {\n var this$1 = this;\n\n if (arguments.length === 0) {\n for (var precDigits = BufferOp.MAX_PRECISION_DIGITS; precDigits >= 0; precDigits--) {\n try {\n this$1.bufferReducedPrecision(precDigits);\n } catch (ex) {\n if (ex instanceof TopologyException) {\n this$1._saveException = ex;\n } else { throw ex }\n } finally {}\n if (this$1._resultGeometry !== null) { return null }\n }\n throw this._saveException\n } else if (arguments.length === 1) {\n var precisionDigits = arguments[0];\n var sizeBasedScaleFactor = BufferOp.precisionScaleFactor(this._argGeom, this._distance, precisionDigits);\n var fixedPM = new PrecisionModel(sizeBasedScaleFactor);\n this.bufferFixedPrecision(fixedPM);\n }\n};\nBufferOp.prototype.computeGeometry = function computeGeometry () {\n this.bufferOriginalPrecision();\n if (this._resultGeometry !== null) { return null }\n var argPM = this._argGeom.getFactory().getPrecisionModel();\n if (argPM.getType() === PrecisionModel.FIXED) { this.bufferFixedPrecision(argPM); } else { this.bufferReducedPrecision(); }\n};\nBufferOp.prototype.setQuadrantSegments = function setQuadrantSegments (quadrantSegments) {\n this._bufParams.setQuadrantSegments(quadrantSegments);\n};\nBufferOp.prototype.bufferOriginalPrecision = function bufferOriginalPrecision () {\n try {\n var bufBuilder = new BufferBuilder(this._bufParams);\n this._resultGeometry = bufBuilder.buffer(this._argGeom, this._distance);\n } catch (ex) {\n if (ex instanceof RuntimeException) {\n this._saveException = ex;\n } else { throw ex }\n } finally {}\n};\nBufferOp.prototype.getResultGeometry = function getResultGeometry (distance) {\n this._distance = distance;\n this.computeGeometry();\n return this._resultGeometry\n};\nBufferOp.prototype.setEndCapStyle = function setEndCapStyle (endCapStyle) {\n this._bufParams.setEndCapStyle(endCapStyle);\n};\nBufferOp.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nBufferOp.prototype.getClass = function getClass () {\n return BufferOp\n};\nBufferOp.bufferOp = function bufferOp () {\n if (arguments.length === 2) {\n var g = arguments[0];\n var distance = arguments[1];\n var gBuf = new BufferOp(g);\n var geomBuf = gBuf.getResultGeometry(distance);\n return geomBuf\n } else if (arguments.length === 3) {\n if (Number.isInteger(arguments[2]) && (arguments[0] instanceof Geometry && typeof arguments[1] === 'number')) {\n var g$1 = arguments[0];\n var distance$1 = arguments[1];\n var quadrantSegments = arguments[2];\n var bufOp = new BufferOp(g$1);\n bufOp.setQuadrantSegments(quadrantSegments);\n var geomBuf$1 = bufOp.getResultGeometry(distance$1);\n return geomBuf$1\n } else if (arguments[2] instanceof BufferParameters && (arguments[0] instanceof Geometry && typeof arguments[1] === 'number')) {\n var g$2 = arguments[0];\n var distance$2 = arguments[1];\n var params = arguments[2];\n var bufOp$1 = new BufferOp(g$2, params);\n var geomBuf$2 = bufOp$1.getResultGeometry(distance$2);\n return geomBuf$2\n }\n } else if (arguments.length === 4) {\n var g$3 = arguments[0];\n var distance$3 = arguments[1];\n var quadrantSegments$1 = arguments[2];\n var endCapStyle = arguments[3];\n var bufOp$2 = new BufferOp(g$3);\n bufOp$2.setQuadrantSegments(quadrantSegments$1);\n bufOp$2.setEndCapStyle(endCapStyle);\n var geomBuf$3 = bufOp$2.getResultGeometry(distance$3);\n return geomBuf$3\n }\n};\nBufferOp.precisionScaleFactor = function precisionScaleFactor (g, distance, maxPrecisionDigits) {\n var env = g.getEnvelopeInternal();\n var envMax = MathUtil.max(Math.abs(env.getMaxX()), Math.abs(env.getMaxY()), Math.abs(env.getMinX()), Math.abs(env.getMinY()));\n var expandByDistance = distance > 0.0 ? distance : 0.0;\n var bufEnvMax = envMax + 2 * expandByDistance;\n var bufEnvPrecisionDigits = Math.trunc(Math.log(bufEnvMax) / Math.log(10) + 1.0);\n var minUnitLog10 = maxPrecisionDigits - bufEnvPrecisionDigits;\n var scaleFactor = Math.pow(10.0, minUnitLog10);\n return scaleFactor\n};\nstaticAccessors$32.CAP_ROUND.get = function () { return BufferParameters.CAP_ROUND };\nstaticAccessors$32.CAP_BUTT.get = function () { return BufferParameters.CAP_FLAT };\nstaticAccessors$32.CAP_FLAT.get = function () { return BufferParameters.CAP_FLAT };\nstaticAccessors$32.CAP_SQUARE.get = function () { return BufferParameters.CAP_SQUARE };\nstaticAccessors$32.MAX_PRECISION_DIGITS.get = function () { return 12 };\n\nObject.defineProperties( BufferOp, staticAccessors$32 );\n\nvar PointPairDistance = function PointPairDistance () {\n this._pt = [new Coordinate(), new Coordinate()];\n this._distance = Double.NaN;\n this._isNull = true;\n};\nPointPairDistance.prototype.getCoordinates = function getCoordinates () {\n return this._pt\n};\nPointPairDistance.prototype.getCoordinate = function getCoordinate (i) {\n return this._pt[i]\n};\nPointPairDistance.prototype.setMinimum = function setMinimum () {\n if (arguments.length === 1) {\n var ptDist = arguments[0];\n this.setMinimum(ptDist._pt[0], ptDist._pt[1]);\n } else if (arguments.length === 2) {\n var p0 = arguments[0];\n var p1 = arguments[1];\n if (this._isNull) {\n this.initialize(p0, p1);\n return null\n }\n var dist = p0.distance(p1);\n if (dist < this._distance) { this.initialize(p0, p1, dist); }\n }\n};\nPointPairDistance.prototype.initialize = function initialize () {\n if (arguments.length === 0) {\n this._isNull = true;\n } else if (arguments.length === 2) {\n var p0 = arguments[0];\n var p1 = arguments[1];\n this._pt[0].setCoordinate(p0);\n this._pt[1].setCoordinate(p1);\n this._distance = p0.distance(p1);\n this._isNull = false;\n } else if (arguments.length === 3) {\n var p0$1 = arguments[0];\n var p1$1 = arguments[1];\n var distance = arguments[2];\n this._pt[0].setCoordinate(p0$1);\n this._pt[1].setCoordinate(p1$1);\n this._distance = distance;\n this._isNull = false;\n }\n};\nPointPairDistance.prototype.getDistance = function getDistance () {\n return this._distance\n};\nPointPairDistance.prototype.setMaximum = function setMaximum () {\n if (arguments.length === 1) {\n var ptDist = arguments[0];\n this.setMaximum(ptDist._pt[0], ptDist._pt[1]);\n } else if (arguments.length === 2) {\n var p0 = arguments[0];\n var p1 = arguments[1];\n if (this._isNull) {\n this.initialize(p0, p1);\n return null\n }\n var dist = p0.distance(p1);\n if (dist > this._distance) { this.initialize(p0, p1, dist); }\n }\n};\nPointPairDistance.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nPointPairDistance.prototype.getClass = function getClass () {\n return PointPairDistance\n};\n\nvar DistanceToPointFinder = function DistanceToPointFinder () {};\n\nDistanceToPointFinder.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nDistanceToPointFinder.prototype.getClass = function getClass () {\n return DistanceToPointFinder\n};\nDistanceToPointFinder.computeDistance = function computeDistance () {\n if (arguments[2] instanceof PointPairDistance && (arguments[0] instanceof LineString && arguments[1] instanceof Coordinate)) {\n var line = arguments[0];\n var pt = arguments[1];\n var ptDist = arguments[2];\n var coords = line.getCoordinates();\n var tempSegment = new LineSegment();\n for (var i = 0; i < coords.length - 1; i++) {\n tempSegment.setCoordinates(coords[i], coords[i + 1]);\n var closestPt = tempSegment.closestPoint(pt);\n ptDist.setMinimum(closestPt, pt);\n }\n } else if (arguments[2] instanceof PointPairDistance && (arguments[0] instanceof Polygon && arguments[1] instanceof Coordinate)) {\n var poly = arguments[0];\n var pt$1 = arguments[1];\n var ptDist$1 = arguments[2];\n DistanceToPointFinder.computeDistance(poly.getExteriorRing(), pt$1, ptDist$1);\n for (var i$1 = 0; i$1 < poly.getNumInteriorRing(); i$1++) {\n DistanceToPointFinder.computeDistance(poly.getInteriorRingN(i$1), pt$1, ptDist$1);\n }\n } else if (arguments[2] instanceof PointPairDistance && (arguments[0] instanceof Geometry && arguments[1] instanceof Coordinate)) {\n var geom = arguments[0];\n var pt$2 = arguments[1];\n var ptDist$2 = arguments[2];\n if (geom instanceof LineString) {\n DistanceToPointFinder.computeDistance(geom, pt$2, ptDist$2);\n } else if (geom instanceof Polygon) {\n DistanceToPointFinder.computeDistance(geom, pt$2, ptDist$2);\n } else if (geom instanceof GeometryCollection) {\n var gc = geom;\n for (var i$2 = 0; i$2 < gc.getNumGeometries(); i$2++) {\n var g = gc.getGeometryN(i$2);\n DistanceToPointFinder.computeDistance(g, pt$2, ptDist$2);\n }\n } else {\n ptDist$2.setMinimum(geom.getCoordinate(), pt$2);\n }\n } else if (arguments[2] instanceof PointPairDistance && (arguments[0] instanceof LineSegment && arguments[1] instanceof Coordinate)) {\n var segment = arguments[0];\n var pt$3 = arguments[1];\n var ptDist$3 = arguments[2];\n var closestPt$1 = segment.closestPoint(pt$3);\n ptDist$3.setMinimum(closestPt$1, pt$3);\n }\n};\n\nvar BufferCurveMaximumDistanceFinder = function BufferCurveMaximumDistanceFinder (inputGeom) {\n this._maxPtDist = new PointPairDistance();\n this._inputGeom = inputGeom || null;\n};\n\nvar staticAccessors$36 = { MaxPointDistanceFilter: { configurable: true },MaxMidpointDistanceFilter: { configurable: true } };\nBufferCurveMaximumDistanceFinder.prototype.computeMaxMidpointDistance = function computeMaxMidpointDistance (curve) {\n var distFilter = new MaxMidpointDistanceFilter(this._inputGeom);\n curve.apply(distFilter);\n this._maxPtDist.setMaximum(distFilter.getMaxPointDistance());\n};\nBufferCurveMaximumDistanceFinder.prototype.computeMaxVertexDistance = function computeMaxVertexDistance (curve) {\n var distFilter = new MaxPointDistanceFilter(this._inputGeom);\n curve.apply(distFilter);\n this._maxPtDist.setMaximum(distFilter.getMaxPointDistance());\n};\nBufferCurveMaximumDistanceFinder.prototype.findDistance = function findDistance (bufferCurve) {\n this.computeMaxVertexDistance(bufferCurve);\n this.computeMaxMidpointDistance(bufferCurve);\n return this._maxPtDist.getDistance()\n};\nBufferCurveMaximumDistanceFinder.prototype.getDistancePoints = function getDistancePoints () {\n return this._maxPtDist\n};\nBufferCurveMaximumDistanceFinder.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nBufferCurveMaximumDistanceFinder.prototype.getClass = function getClass () {\n return BufferCurveMaximumDistanceFinder\n};\nstaticAccessors$36.MaxPointDistanceFilter.get = function () { return MaxPointDistanceFilter };\nstaticAccessors$36.MaxMidpointDistanceFilter.get = function () { return MaxMidpointDistanceFilter };\n\nObject.defineProperties( BufferCurveMaximumDistanceFinder, staticAccessors$36 );\n\nvar MaxPointDistanceFilter = function MaxPointDistanceFilter (geom) {\n this._maxPtDist = new PointPairDistance();\n this._minPtDist = new PointPairDistance();\n this._geom = geom || null;\n};\nMaxPointDistanceFilter.prototype.filter = function filter (pt) {\n this._minPtDist.initialize();\n DistanceToPointFinder.computeDistance(this._geom, pt, this._minPtDist);\n this._maxPtDist.setMaximum(this._minPtDist);\n};\nMaxPointDistanceFilter.prototype.getMaxPointDistance = function getMaxPointDistance () {\n return this._maxPtDist\n};\nMaxPointDistanceFilter.prototype.interfaces_ = function interfaces_ () {\n return [CoordinateFilter]\n};\nMaxPointDistanceFilter.prototype.getClass = function getClass () {\n return MaxPointDistanceFilter\n};\n\nvar MaxMidpointDistanceFilter = function MaxMidpointDistanceFilter (geom) {\n this._maxPtDist = new PointPairDistance();\n this._minPtDist = new PointPairDistance();\n this._geom = geom || null;\n};\nMaxMidpointDistanceFilter.prototype.filter = function filter (seq, index) {\n if (index === 0) { return null }\n var p0 = seq.getCoordinate(index - 1);\n var p1 = seq.getCoordinate(index);\n var midPt = new Coordinate((p0.x + p1.x) / 2, (p0.y + p1.y) / 2);\n this._minPtDist.initialize();\n DistanceToPointFinder.computeDistance(this._geom, midPt, this._minPtDist);\n this._maxPtDist.setMaximum(this._minPtDist);\n};\nMaxMidpointDistanceFilter.prototype.isDone = function isDone () {\n return false\n};\nMaxMidpointDistanceFilter.prototype.isGeometryChanged = function isGeometryChanged () {\n return false\n};\nMaxMidpointDistanceFilter.prototype.getMaxPointDistance = function getMaxPointDistance () {\n return this._maxPtDist\n};\nMaxMidpointDistanceFilter.prototype.interfaces_ = function interfaces_ () {\n return [CoordinateSequenceFilter]\n};\nMaxMidpointDistanceFilter.prototype.getClass = function getClass () {\n return MaxMidpointDistanceFilter\n};\n\nvar PolygonExtracter = function PolygonExtracter (comps) {\n this._comps = comps || null;\n};\nPolygonExtracter.prototype.filter = function filter (geom) {\n if (geom instanceof Polygon) { this._comps.add(geom); }\n};\nPolygonExtracter.prototype.interfaces_ = function interfaces_ () {\n return [GeometryFilter]\n};\nPolygonExtracter.prototype.getClass = function getClass () {\n return PolygonExtracter\n};\nPolygonExtracter.getPolygons = function getPolygons () {\n if (arguments.length === 1) {\n var geom = arguments[0];\n return PolygonExtracter.getPolygons(geom, new ArrayList())\n } else if (arguments.length === 2) {\n var geom$1 = arguments[0];\n var list = arguments[1];\n if (geom$1 instanceof Polygon) {\n list.add(geom$1);\n } else if (geom$1 instanceof GeometryCollection) {\n geom$1.apply(new PolygonExtracter(list));\n }\n return list\n }\n};\n\nvar LinearComponentExtracter = function LinearComponentExtracter () {\n this._lines = null;\n this._isForcedToLineString = false;\n if (arguments.length === 1) {\n var lines = arguments[0];\n this._lines = lines;\n } else if (arguments.length === 2) {\n var lines$1 = arguments[0];\n var isForcedToLineString = arguments[1];\n this._lines = lines$1;\n this._isForcedToLineString = isForcedToLineString;\n }\n};\nLinearComponentExtracter.prototype.filter = function filter (geom) {\n if (this._isForcedToLineString && geom instanceof LinearRing) {\n var line = geom.getFactory().createLineString(geom.getCoordinateSequence());\n this._lines.add(line);\n return null\n }\n if (geom instanceof LineString) { this._lines.add(geom); }\n};\nLinearComponentExtracter.prototype.setForceToLineString = function setForceToLineString (isForcedToLineString) {\n this._isForcedToLineString = isForcedToLineString;\n};\nLinearComponentExtracter.prototype.interfaces_ = function interfaces_ () {\n return [GeometryComponentFilter]\n};\nLinearComponentExtracter.prototype.getClass = function getClass () {\n return LinearComponentExtracter\n};\nLinearComponentExtracter.getGeometry = function getGeometry () {\n if (arguments.length === 1) {\n var geom = arguments[0];\n return geom.getFactory().buildGeometry(LinearComponentExtracter.getLines(geom))\n } else if (arguments.length === 2) {\n var geom$1 = arguments[0];\n var forceToLineString = arguments[1];\n return geom$1.getFactory().buildGeometry(LinearComponentExtracter.getLines(geom$1, forceToLineString))\n }\n};\nLinearComponentExtracter.getLines = function getLines () {\n if (arguments.length === 1) {\n var geom = arguments[0];\n return LinearComponentExtracter.getLines(geom, false)\n } else if (arguments.length === 2) {\n if (hasInterface(arguments[0], Collection) && hasInterface(arguments[1], Collection)) {\n var geoms = arguments[0];\n var lines$1 = arguments[1];\n for (var i = geoms.iterator(); i.hasNext();) {\n var g = i.next();\n LinearComponentExtracter.getLines(g, lines$1);\n }\n return lines$1\n } else if (arguments[0] instanceof Geometry && typeof arguments[1] === 'boolean') {\n var geom$1 = arguments[0];\n var forceToLineString = arguments[1];\n var lines = new ArrayList();\n geom$1.apply(new LinearComponentExtracter(lines, forceToLineString));\n return lines\n } else if (arguments[0] instanceof Geometry && hasInterface(arguments[1], Collection)) {\n var geom$2 = arguments[0];\n var lines$2 = arguments[1];\n if (geom$2 instanceof LineString) {\n lines$2.add(geom$2);\n } else {\n geom$2.apply(new LinearComponentExtracter(lines$2));\n }\n return lines$2\n }\n } else if (arguments.length === 3) {\n if (typeof arguments[2] === 'boolean' && (hasInterface(arguments[0], Collection) && hasInterface(arguments[1], Collection))) {\n var geoms$1 = arguments[0];\n var lines$3 = arguments[1];\n var forceToLineString$1 = arguments[2];\n for (var i$1 = geoms$1.iterator(); i$1.hasNext();) {\n var g$1 = i$1.next();\n LinearComponentExtracter.getLines(g$1, lines$3, forceToLineString$1);\n }\n return lines$3\n } else if (typeof arguments[2] === 'boolean' && (arguments[0] instanceof Geometry && hasInterface(arguments[1], Collection))) {\n var geom$3 = arguments[0];\n var lines$4 = arguments[1];\n var forceToLineString$2 = arguments[2];\n geom$3.apply(new LinearComponentExtracter(lines$4, forceToLineString$2));\n return lines$4\n }\n }\n};\n\nvar PointLocator = function PointLocator () {\n this._boundaryRule = BoundaryNodeRule.OGC_SFS_BOUNDARY_RULE;\n this._isIn = null;\n this._numBoundaries = null;\n if (arguments.length === 0) {} else if (arguments.length === 1) {\n var boundaryRule = arguments[0];\n if (boundaryRule === null) { throw new IllegalArgumentException('Rule must be non-null') }\n this._boundaryRule = boundaryRule;\n }\n};\nPointLocator.prototype.locateInternal = function locateInternal () {\n var this$1 = this;\n\n if (arguments[0] instanceof Coordinate && arguments[1] instanceof Polygon) {\n var p = arguments[0];\n var poly = arguments[1];\n if (poly.isEmpty()) { return Location.EXTERIOR }\n var shell = poly.getExteriorRing();\n var shellLoc = this.locateInPolygonRing(p, shell);\n if (shellLoc === Location.EXTERIOR) { return Location.EXTERIOR }\n if (shellLoc === Location.BOUNDARY) { return Location.BOUNDARY }\n for (var i = 0; i < poly.getNumInteriorRing(); i++) {\n var hole = poly.getInteriorRingN(i);\n var holeLoc = this$1.locateInPolygonRing(p, hole);\n if (holeLoc === Location.INTERIOR) { return Location.EXTERIOR }\n if (holeLoc === Location.BOUNDARY) { return Location.BOUNDARY }\n }\n return Location.INTERIOR\n } else if (arguments[0] instanceof Coordinate && arguments[1] instanceof LineString) {\n var p$1 = arguments[0];\n var l = arguments[1];\n if (!l.getEnvelopeInternal().intersects(p$1)) { return Location.EXTERIOR }\n var pt = l.getCoordinates();\n if (!l.isClosed()) {\n if (p$1.equals(pt[0]) || p$1.equals(pt[pt.length - 1])) {\n return Location.BOUNDARY\n }\n }\n if (CGAlgorithms.isOnLine(p$1, pt)) { return Location.INTERIOR }\n return Location.EXTERIOR\n } else if (arguments[0] instanceof Coordinate && arguments[1] instanceof Point) {\n var p$2 = arguments[0];\n var pt$1 = arguments[1];\n var ptCoord = pt$1.getCoordinate();\n if (ptCoord.equals2D(p$2)) { return Location.INTERIOR }\n return Location.EXTERIOR\n }\n};\nPointLocator.prototype.locateInPolygonRing = function locateInPolygonRing (p, ring) {\n if (!ring.getEnvelopeInternal().intersects(p)) { return Location.EXTERIOR }\n return CGAlgorithms.locatePointInRing(p, ring.getCoordinates())\n};\nPointLocator.prototype.intersects = function intersects (p, geom) {\n return this.locate(p, geom) !== Location.EXTERIOR\n};\nPointLocator.prototype.updateLocationInfo = function updateLocationInfo (loc) {\n if (loc === Location.INTERIOR) { this._isIn = true; }\n if (loc === Location.BOUNDARY) { this._numBoundaries++; }\n};\nPointLocator.prototype.computeLocation = function computeLocation (p, geom) {\n var this$1 = this;\n\n if (geom instanceof Point) {\n this.updateLocationInfo(this.locateInternal(p, geom));\n }\n if (geom instanceof LineString) {\n this.updateLocationInfo(this.locateInternal(p, geom));\n } else if (geom instanceof Polygon) {\n this.updateLocationInfo(this.locateInternal(p, geom));\n } else if (geom instanceof MultiLineString) {\n var ml = geom;\n for (var i = 0; i < ml.getNumGeometries(); i++) {\n var l = ml.getGeometryN(i);\n this$1.updateLocationInfo(this$1.locateInternal(p, l));\n }\n } else if (geom instanceof MultiPolygon) {\n var mpoly = geom;\n for (var i$1 = 0; i$1 < mpoly.getNumGeometries(); i$1++) {\n var poly = mpoly.getGeometryN(i$1);\n this$1.updateLocationInfo(this$1.locateInternal(p, poly));\n }\n } else if (geom instanceof GeometryCollection) {\n var geomi = new GeometryCollectionIterator(geom);\n while (geomi.hasNext()) {\n var g2 = geomi.next();\n if (g2 !== geom) { this$1.computeLocation(p, g2); }\n }\n }\n};\nPointLocator.prototype.locate = function locate (p, geom) {\n if (geom.isEmpty()) { return Location.EXTERIOR }\n if (geom instanceof LineString) {\n return this.locateInternal(p, geom)\n } else if (geom instanceof Polygon) {\n return this.locateInternal(p, geom)\n }\n this._isIn = false;\n this._numBoundaries = 0;\n this.computeLocation(p, geom);\n if (this._boundaryRule.isInBoundary(this._numBoundaries)) { return Location.BOUNDARY }\n if (this._numBoundaries > 0 || this._isIn) { return Location.INTERIOR }\n return Location.EXTERIOR\n};\nPointLocator.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nPointLocator.prototype.getClass = function getClass () {\n return PointLocator\n};\n\nvar GeometryLocation = function GeometryLocation () {\n this._component = null;\n this._segIndex = null;\n this._pt = null;\n if (arguments.length === 2) {\n var component = arguments[0];\n var pt = arguments[1];\n GeometryLocation.call(this, component, GeometryLocation.INSIDE_AREA, pt);\n } else if (arguments.length === 3) {\n var component$1 = arguments[0];\n var segIndex = arguments[1];\n var pt$1 = arguments[2];\n this._component = component$1;\n this._segIndex = segIndex;\n this._pt = pt$1;\n }\n};\n\nvar staticAccessors$38 = { INSIDE_AREA: { configurable: true } };\nGeometryLocation.prototype.isInsideArea = function isInsideArea () {\n return this._segIndex === GeometryLocation.INSIDE_AREA\n};\nGeometryLocation.prototype.getCoordinate = function getCoordinate () {\n return this._pt\n};\nGeometryLocation.prototype.getGeometryComponent = function getGeometryComponent () {\n return this._component\n};\nGeometryLocation.prototype.getSegmentIndex = function getSegmentIndex () {\n return this._segIndex\n};\nGeometryLocation.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nGeometryLocation.prototype.getClass = function getClass () {\n return GeometryLocation\n};\nstaticAccessors$38.INSIDE_AREA.get = function () { return -1 };\n\nObject.defineProperties( GeometryLocation, staticAccessors$38 );\n\nvar PointExtracter = function PointExtracter (pts) {\n this._pts = pts || null;\n};\nPointExtracter.prototype.filter = function filter (geom) {\n if (geom instanceof Point) { this._pts.add(geom); }\n};\nPointExtracter.prototype.interfaces_ = function interfaces_ () {\n return [GeometryFilter]\n};\nPointExtracter.prototype.getClass = function getClass () {\n return PointExtracter\n};\nPointExtracter.getPoints = function getPoints () {\n if (arguments.length === 1) {\n var geom = arguments[0];\n if (geom instanceof Point) {\n return Collections.singletonList(geom)\n }\n return PointExtracter.getPoints(geom, new ArrayList())\n } else if (arguments.length === 2) {\n var geom$1 = arguments[0];\n var list = arguments[1];\n if (geom$1 instanceof Point) {\n list.add(geom$1);\n } else if (geom$1 instanceof GeometryCollection) {\n geom$1.apply(new PointExtracter(list));\n }\n return list\n }\n};\n\nvar ConnectedElementLocationFilter = function ConnectedElementLocationFilter () {\n this._locations = null;\n var locations = arguments[0];\n this._locations = locations;\n};\nConnectedElementLocationFilter.prototype.filter = function filter (geom) {\n if (geom instanceof Point || geom instanceof LineString || geom instanceof Polygon) { this._locations.add(new GeometryLocation(geom, 0, geom.getCoordinate())); }\n};\nConnectedElementLocationFilter.prototype.interfaces_ = function interfaces_ () {\n return [GeometryFilter]\n};\nConnectedElementLocationFilter.prototype.getClass = function getClass () {\n return ConnectedElementLocationFilter\n};\nConnectedElementLocationFilter.getLocations = function getLocations (geom) {\n var locations = new ArrayList();\n geom.apply(new ConnectedElementLocationFilter(locations));\n return locations\n};\n\nvar DistanceOp = function DistanceOp () {\n this._geom = null;\n this._terminateDistance = 0.0;\n this._ptLocator = new PointLocator();\n this._minDistanceLocation = null;\n this._minDistance = Double.MAX_VALUE;\n if (arguments.length === 2) {\n var g0 = arguments[0];\n var g1 = arguments[1];\n this._geom = [g0, g1];\n this._terminateDistance = 0.0;\n } else if (arguments.length === 3) {\n var g0$1 = arguments[0];\n var g1$1 = arguments[1];\n var terminateDistance = arguments[2];\n this._geom = new Array(2).fill(null);\n this._geom[0] = g0$1;\n this._geom[1] = g1$1;\n this._terminateDistance = terminateDistance;\n }\n};\nDistanceOp.prototype.computeContainmentDistance = function computeContainmentDistance () {\n var this$1 = this;\n\n if (arguments.length === 0) {\n var locPtPoly = new Array(2).fill(null);\n this.computeContainmentDistance(0, locPtPoly);\n if (this._minDistance <= this._terminateDistance) { return null }\n this.computeContainmentDistance(1, locPtPoly);\n } else if (arguments.length === 2) {\n var polyGeomIndex = arguments[0];\n var locPtPoly$1 = arguments[1];\n var locationsIndex = 1 - polyGeomIndex;\n var polys = PolygonExtracter.getPolygons(this._geom[polyGeomIndex]);\n if (polys.size() > 0) {\n var insideLocs = ConnectedElementLocationFilter.getLocations(this._geom[locationsIndex]);\n this.computeContainmentDistance(insideLocs, polys, locPtPoly$1);\n if (this._minDistance <= this._terminateDistance) {\n this._minDistanceLocation[locationsIndex] = locPtPoly$1[0];\n this._minDistanceLocation[polyGeomIndex] = locPtPoly$1[1];\n return null\n }\n }\n } else if (arguments.length === 3) {\n if (arguments[2] instanceof Array && (hasInterface(arguments[0], List) && hasInterface(arguments[1], List))) {\n var locs = arguments[0];\n var polys$1 = arguments[1];\n var locPtPoly$2 = arguments[2];\n for (var i = 0; i < locs.size(); i++) {\n var loc = locs.get(i);\n for (var j = 0; j < polys$1.size(); j++) {\n this$1.computeContainmentDistance(loc, polys$1.get(j), locPtPoly$2);\n if (this$1._minDistance <= this$1._terminateDistance) { return null }\n }\n }\n } else if (arguments[2] instanceof Array && (arguments[0] instanceof GeometryLocation && arguments[1] instanceof Polygon)) {\n var ptLoc = arguments[0];\n var poly = arguments[1];\n var locPtPoly$3 = arguments[2];\n var pt = ptLoc.getCoordinate();\n if (Location.EXTERIOR !== this._ptLocator.locate(pt, poly)) {\n this._minDistance = 0.0;\n locPtPoly$3[0] = ptLoc;\n locPtPoly$3[1] = new GeometryLocation(poly, pt);\n\n return null\n }\n }\n }\n};\nDistanceOp.prototype.computeMinDistanceLinesPoints = function computeMinDistanceLinesPoints (lines, points, locGeom) {\n var this$1 = this;\n\n for (var i = 0; i < lines.size(); i++) {\n var line = lines.get(i);\n for (var j = 0; j < points.size(); j++) {\n var pt = points.get(j);\n this$1.computeMinDistance(line, pt, locGeom);\n if (this$1._minDistance <= this$1._terminateDistance) { return null }\n }\n }\n};\nDistanceOp.prototype.computeFacetDistance = function computeFacetDistance () {\n var locGeom = new Array(2).fill(null);\n var lines0 = LinearComponentExtracter.getLines(this._geom[0]);\n var lines1 = LinearComponentExtracter.getLines(this._geom[1]);\n var pts0 = PointExtracter.getPoints(this._geom[0]);\n var pts1 = PointExtracter.getPoints(this._geom[1]);\n this.computeMinDistanceLines(lines0, lines1, locGeom);\n this.updateMinDistance(locGeom, false);\n if (this._minDistance <= this._terminateDistance) { return null }\n locGeom[0] = null;\n locGeom[1] = null;\n this.computeMinDistanceLinesPoints(lines0, pts1, locGeom);\n this.updateMinDistance(locGeom, false);\n if (this._minDistance <= this._terminateDistance) { return null }\n locGeom[0] = null;\n locGeom[1] = null;\n this.computeMinDistanceLinesPoints(lines1, pts0, locGeom);\n this.updateMinDistance(locGeom, true);\n if (this._minDistance <= this._terminateDistance) { return null }\n locGeom[0] = null;\n locGeom[1] = null;\n this.computeMinDistancePoints(pts0, pts1, locGeom);\n this.updateMinDistance(locGeom, false);\n};\nDistanceOp.prototype.nearestLocations = function nearestLocations () {\n this.computeMinDistance();\n return this._minDistanceLocation\n};\nDistanceOp.prototype.updateMinDistance = function updateMinDistance (locGeom, flip) {\n if (locGeom[0] === null) { return null }\n if (flip) {\n this._minDistanceLocation[0] = locGeom[1];\n this._minDistanceLocation[1] = locGeom[0];\n } else {\n this._minDistanceLocation[0] = locGeom[0];\n this._minDistanceLocation[1] = locGeom[1];\n }\n};\nDistanceOp.prototype.nearestPoints = function nearestPoints () {\n this.computeMinDistance();\n var nearestPts = [this._minDistanceLocation[0].getCoordinate(), this._minDistanceLocation[1].getCoordinate()];\n return nearestPts\n};\nDistanceOp.prototype.computeMinDistance = function computeMinDistance () {\n var this$1 = this;\n\n if (arguments.length === 0) {\n if (this._minDistanceLocation !== null) { return null }\n this._minDistanceLocation = new Array(2).fill(null);\n this.computeContainmentDistance();\n if (this._minDistance <= this._terminateDistance) { return null }\n this.computeFacetDistance();\n } else if (arguments.length === 3) {\n if (arguments[2] instanceof Array && (arguments[0] instanceof LineString && arguments[1] instanceof Point)) {\n var line = arguments[0];\n var pt = arguments[1];\n var locGeom = arguments[2];\n if (line.getEnvelopeInternal().distance(pt.getEnvelopeInternal()) > this._minDistance) { return null }\n var coord0 = line.getCoordinates();\n var coord = pt.getCoordinate();\n for (var i = 0; i < coord0.length - 1; i++) {\n var dist = CGAlgorithms.distancePointLine(coord, coord0[i], coord0[i + 1]);\n if (dist < this$1._minDistance) {\n this$1._minDistance = dist;\n var seg = new LineSegment(coord0[i], coord0[i + 1]);\n var segClosestPoint = seg.closestPoint(coord);\n locGeom[0] = new GeometryLocation(line, i, segClosestPoint);\n locGeom[1] = new GeometryLocation(pt, 0, coord);\n }\n if (this$1._minDistance <= this$1._terminateDistance) { return null }\n }\n } else if (arguments[2] instanceof Array && (arguments[0] instanceof LineString && arguments[1] instanceof LineString)) {\n var line0 = arguments[0];\n var line1 = arguments[1];\n var locGeom$1 = arguments[2];\n if (line0.getEnvelopeInternal().distance(line1.getEnvelopeInternal()) > this._minDistance) { return null }\n var coord0$1 = line0.getCoordinates();\n var coord1 = line1.getCoordinates();\n for (var i$1 = 0; i$1 < coord0$1.length - 1; i$1++) {\n for (var j = 0; j < coord1.length - 1; j++) {\n var dist$1 = CGAlgorithms.distanceLineLine(coord0$1[i$1], coord0$1[i$1 + 1], coord1[j], coord1[j + 1]);\n if (dist$1 < this$1._minDistance) {\n this$1._minDistance = dist$1;\n var seg0 = new LineSegment(coord0$1[i$1], coord0$1[i$1 + 1]);\n var seg1 = new LineSegment(coord1[j], coord1[j + 1]);\n var closestPt = seg0.closestPoints(seg1);\n locGeom$1[0] = new GeometryLocation(line0, i$1, closestPt[0]);\n locGeom$1[1] = new GeometryLocation(line1, j, closestPt[1]);\n }\n if (this$1._minDistance <= this$1._terminateDistance) { return null }\n }\n }\n }\n }\n};\nDistanceOp.prototype.computeMinDistancePoints = function computeMinDistancePoints (points0, points1, locGeom) {\n var this$1 = this;\n\n for (var i = 0; i < points0.size(); i++) {\n var pt0 = points0.get(i);\n for (var j = 0; j < points1.size(); j++) {\n var pt1 = points1.get(j);\n var dist = pt0.getCoordinate().distance(pt1.getCoordinate());\n if (dist < this$1._minDistance) {\n this$1._minDistance = dist;\n locGeom[0] = new GeometryLocation(pt0, 0, pt0.getCoordinate());\n locGeom[1] = new GeometryLocation(pt1, 0, pt1.getCoordinate());\n }\n if (this$1._minDistance <= this$1._terminateDistance) { return null }\n }\n }\n};\nDistanceOp.prototype.distance = function distance () {\n if (this._geom[0] === null || this._geom[1] === null) { throw new IllegalArgumentException('null geometries are not supported') }\n if (this._geom[0].isEmpty() || this._geom[1].isEmpty()) { return 0.0 }\n this.computeMinDistance();\n return this._minDistance\n};\nDistanceOp.prototype.computeMinDistanceLines = function computeMinDistanceLines (lines0, lines1, locGeom) {\n var this$1 = this;\n\n for (var i = 0; i < lines0.size(); i++) {\n var line0 = lines0.get(i);\n for (var j = 0; j < lines1.size(); j++) {\n var line1 = lines1.get(j);\n this$1.computeMinDistance(line0, line1, locGeom);\n if (this$1._minDistance <= this$1._terminateDistance) { return null }\n }\n }\n};\nDistanceOp.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nDistanceOp.prototype.getClass = function getClass () {\n return DistanceOp\n};\nDistanceOp.distance = function distance (g0, g1) {\n var distOp = new DistanceOp(g0, g1);\n return distOp.distance()\n};\nDistanceOp.isWithinDistance = function isWithinDistance (g0, g1, distance) {\n var distOp = new DistanceOp(g0, g1, distance);\n return distOp.distance() <= distance\n};\nDistanceOp.nearestPoints = function nearestPoints (g0, g1) {\n var distOp = new DistanceOp(g0, g1);\n return distOp.nearestPoints()\n};\n\nvar PointPairDistance$2 = function PointPairDistance () {\n this._pt = [new Coordinate(), new Coordinate()];\n this._distance = Double.NaN;\n this._isNull = true;\n};\nPointPairDistance$2.prototype.getCoordinates = function getCoordinates () {\n return this._pt\n};\nPointPairDistance$2.prototype.getCoordinate = function getCoordinate (i) {\n return this._pt[i]\n};\nPointPairDistance$2.prototype.setMinimum = function setMinimum () {\n if (arguments.length === 1) {\n var ptDist = arguments[0];\n this.setMinimum(ptDist._pt[0], ptDist._pt[1]);\n } else if (arguments.length === 2) {\n var p0 = arguments[0];\n var p1 = arguments[1];\n if (this._isNull) {\n this.initialize(p0, p1);\n return null\n }\n var dist = p0.distance(p1);\n if (dist < this._distance) { this.initialize(p0, p1, dist); }\n }\n};\nPointPairDistance$2.prototype.initialize = function initialize () {\n if (arguments.length === 0) {\n this._isNull = true;\n } else if (arguments.length === 2) {\n var p0 = arguments[0];\n var p1 = arguments[1];\n this._pt[0].setCoordinate(p0);\n this._pt[1].setCoordinate(p1);\n this._distance = p0.distance(p1);\n this._isNull = false;\n } else if (arguments.length === 3) {\n var p0$1 = arguments[0];\n var p1$1 = arguments[1];\n var distance = arguments[2];\n this._pt[0].setCoordinate(p0$1);\n this._pt[1].setCoordinate(p1$1);\n this._distance = distance;\n this._isNull = false;\n }\n};\nPointPairDistance$2.prototype.toString = function toString () {\n return WKTWriter.toLineString(this._pt[0], this._pt[1])\n};\nPointPairDistance$2.prototype.getDistance = function getDistance () {\n return this._distance\n};\nPointPairDistance$2.prototype.setMaximum = function setMaximum () {\n if (arguments.length === 1) {\n var ptDist = arguments[0];\n this.setMaximum(ptDist._pt[0], ptDist._pt[1]);\n } else if (arguments.length === 2) {\n var p0 = arguments[0];\n var p1 = arguments[1];\n if (this._isNull) {\n this.initialize(p0, p1);\n return null\n }\n var dist = p0.distance(p1);\n if (dist > this._distance) { this.initialize(p0, p1, dist); }\n }\n};\nPointPairDistance$2.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nPointPairDistance$2.prototype.getClass = function getClass () {\n return PointPairDistance$2\n};\n\nvar DistanceToPoint = function DistanceToPoint () {};\n\nDistanceToPoint.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nDistanceToPoint.prototype.getClass = function getClass () {\n return DistanceToPoint\n};\nDistanceToPoint.computeDistance = function computeDistance () {\n if (arguments[2] instanceof PointPairDistance$2 && (arguments[0] instanceof LineString && arguments[1] instanceof Coordinate)) {\n var line = arguments[0];\n var pt = arguments[1];\n var ptDist = arguments[2];\n var tempSegment = new LineSegment();\n var coords = line.getCoordinates();\n for (var i = 0; i < coords.length - 1; i++) {\n tempSegment.setCoordinates(coords[i], coords[i + 1]);\n var closestPt = tempSegment.closestPoint(pt);\n ptDist.setMinimum(closestPt, pt);\n }\n } else if (arguments[2] instanceof PointPairDistance$2 && (arguments[0] instanceof Polygon && arguments[1] instanceof Coordinate)) {\n var poly = arguments[0];\n var pt$1 = arguments[1];\n var ptDist$1 = arguments[2];\n DistanceToPoint.computeDistance(poly.getExteriorRing(), pt$1, ptDist$1);\n for (var i$1 = 0; i$1 < poly.getNumInteriorRing(); i$1++) {\n DistanceToPoint.computeDistance(poly.getInteriorRingN(i$1), pt$1, ptDist$1);\n }\n } else if (arguments[2] instanceof PointPairDistance$2 && (arguments[0] instanceof Geometry && arguments[1] instanceof Coordinate)) {\n var geom = arguments[0];\n var pt$2 = arguments[1];\n var ptDist$2 = arguments[2];\n if (geom instanceof LineString) {\n DistanceToPoint.computeDistance(geom, pt$2, ptDist$2);\n } else if (geom instanceof Polygon) {\n DistanceToPoint.computeDistance(geom, pt$2, ptDist$2);\n } else if (geom instanceof GeometryCollection) {\n var gc = geom;\n for (var i$2 = 0; i$2 < gc.getNumGeometries(); i$2++) {\n var g = gc.getGeometryN(i$2);\n DistanceToPoint.computeDistance(g, pt$2, ptDist$2);\n }\n } else {\n ptDist$2.setMinimum(geom.getCoordinate(), pt$2);\n }\n } else if (arguments[2] instanceof PointPairDistance$2 && (arguments[0] instanceof LineSegment && arguments[1] instanceof Coordinate)) {\n var segment = arguments[0];\n var pt$3 = arguments[1];\n var ptDist$3 = arguments[2];\n var closestPt$1 = segment.closestPoint(pt$3);\n ptDist$3.setMinimum(closestPt$1, pt$3);\n }\n};\n\nvar DiscreteHausdorffDistance = function DiscreteHausdorffDistance () {\n this._g0 = null;\n this._g1 = null;\n this._ptDist = new PointPairDistance$2();\n this._densifyFrac = 0.0;\n var g0 = arguments[0];\n var g1 = arguments[1];\n this._g0 = g0;\n this._g1 = g1;\n};\n\nvar staticAccessors$39 = { MaxPointDistanceFilter: { configurable: true },MaxDensifiedByFractionDistanceFilter: { configurable: true } };\nDiscreteHausdorffDistance.prototype.getCoordinates = function getCoordinates () {\n return this._ptDist.getCoordinates()\n};\nDiscreteHausdorffDistance.prototype.setDensifyFraction = function setDensifyFraction (densifyFrac) {\n if (densifyFrac > 1.0 || densifyFrac <= 0.0) { throw new IllegalArgumentException('Fraction is not in range (0.0 - 1.0]') }\n this._densifyFrac = densifyFrac;\n};\nDiscreteHausdorffDistance.prototype.compute = function compute (g0, g1) {\n this.computeOrientedDistance(g0, g1, this._ptDist);\n this.computeOrientedDistance(g1, g0, this._ptDist);\n};\nDiscreteHausdorffDistance.prototype.distance = function distance () {\n this.compute(this._g0, this._g1);\n return this._ptDist.getDistance()\n};\nDiscreteHausdorffDistance.prototype.computeOrientedDistance = function computeOrientedDistance (discreteGeom, geom, ptDist) {\n var distFilter = new MaxPointDistanceFilter$1(geom);\n discreteGeom.apply(distFilter);\n ptDist.setMaximum(distFilter.getMaxPointDistance());\n if (this._densifyFrac > 0) {\n var fracFilter = new MaxDensifiedByFractionDistanceFilter(geom, this._densifyFrac);\n discreteGeom.apply(fracFilter);\n ptDist.setMaximum(fracFilter.getMaxPointDistance());\n }\n};\nDiscreteHausdorffDistance.prototype.orientedDistance = function orientedDistance () {\n this.computeOrientedDistance(this._g0, this._g1, this._ptDist);\n return this._ptDist.getDistance()\n};\nDiscreteHausdorffDistance.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nDiscreteHausdorffDistance.prototype.getClass = function getClass () {\n return DiscreteHausdorffDistance\n};\nDiscreteHausdorffDistance.distance = function distance () {\n if (arguments.length === 2) {\n var g0 = arguments[0];\n var g1 = arguments[1];\n var dist = new DiscreteHausdorffDistance(g0, g1);\n return dist.distance()\n } else if (arguments.length === 3) {\n var g0$1 = arguments[0];\n var g1$1 = arguments[1];\n var densifyFrac = arguments[2];\n var dist$1 = new DiscreteHausdorffDistance(g0$1, g1$1);\n dist$1.setDensifyFraction(densifyFrac);\n return dist$1.distance()\n }\n};\nstaticAccessors$39.MaxPointDistanceFilter.get = function () { return MaxPointDistanceFilter$1 };\nstaticAccessors$39.MaxDensifiedByFractionDistanceFilter.get = function () { return MaxDensifiedByFractionDistanceFilter };\n\nObject.defineProperties( DiscreteHausdorffDistance, staticAccessors$39 );\n\nvar MaxPointDistanceFilter$1 = function MaxPointDistanceFilter () {\n this._maxPtDist = new PointPairDistance$2();\n this._minPtDist = new PointPairDistance$2();\n this._euclideanDist = new DistanceToPoint();\n this._geom = null;\n var geom = arguments[0];\n this._geom = geom;\n};\nMaxPointDistanceFilter$1.prototype.filter = function filter (pt) {\n this._minPtDist.initialize();\n DistanceToPoint.computeDistance(this._geom, pt, this._minPtDist);\n this._maxPtDist.setMaximum(this._minPtDist);\n};\nMaxPointDistanceFilter$1.prototype.getMaxPointDistance = function getMaxPointDistance () {\n return this._maxPtDist\n};\nMaxPointDistanceFilter$1.prototype.interfaces_ = function interfaces_ () {\n return [CoordinateFilter]\n};\nMaxPointDistanceFilter$1.prototype.getClass = function getClass () {\n return MaxPointDistanceFilter$1\n};\n\nvar MaxDensifiedByFractionDistanceFilter = function MaxDensifiedByFractionDistanceFilter () {\n this._maxPtDist = new PointPairDistance$2();\n this._minPtDist = new PointPairDistance$2();\n this._geom = null;\n this._numSubSegs = 0;\n var geom = arguments[0];\n var fraction = arguments[1];\n this._geom = geom;\n this._numSubSegs = Math.trunc(Math.round(1.0 / fraction));\n};\nMaxDensifiedByFractionDistanceFilter.prototype.filter = function filter (seq, index) {\n var this$1 = this;\n\n if (index === 0) { return null }\n var p0 = seq.getCoordinate(index - 1);\n var p1 = seq.getCoordinate(index);\n var delx = (p1.x - p0.x) / this._numSubSegs;\n var dely = (p1.y - p0.y) / this._numSubSegs;\n for (var i = 0; i < this._numSubSegs; i++) {\n var x = p0.x + i * delx;\n var y = p0.y + i * dely;\n var pt = new Coordinate(x, y);\n this$1._minPtDist.initialize();\n DistanceToPoint.computeDistance(this$1._geom, pt, this$1._minPtDist);\n this$1._maxPtDist.setMaximum(this$1._minPtDist);\n }\n};\nMaxDensifiedByFractionDistanceFilter.prototype.isDone = function isDone () {\n return false\n};\nMaxDensifiedByFractionDistanceFilter.prototype.isGeometryChanged = function isGeometryChanged () {\n return false\n};\nMaxDensifiedByFractionDistanceFilter.prototype.getMaxPointDistance = function getMaxPointDistance () {\n return this._maxPtDist\n};\nMaxDensifiedByFractionDistanceFilter.prototype.interfaces_ = function interfaces_ () {\n return [CoordinateSequenceFilter]\n};\nMaxDensifiedByFractionDistanceFilter.prototype.getClass = function getClass () {\n return MaxDensifiedByFractionDistanceFilter\n};\n\nvar BufferDistanceValidator = function BufferDistanceValidator (input, bufDistance, result) {\n this._minValidDistance = null;\n this._maxValidDistance = null;\n this._minDistanceFound = null;\n this._maxDistanceFound = null;\n this._isValid = true;\n this._errMsg = null;\n this._errorLocation = null;\n this._errorIndicator = null;\n this._input = input || null;\n this._bufDistance = bufDistance || null;\n this._result = result || null;\n};\n\nvar staticAccessors$37 = { VERBOSE: { configurable: true },MAX_DISTANCE_DIFF_FRAC: { configurable: true } };\nBufferDistanceValidator.prototype.checkMaximumDistance = function checkMaximumDistance (input, bufCurve, maxDist) {\n var haus = new DiscreteHausdorffDistance(bufCurve, input);\n haus.setDensifyFraction(0.25);\n this._maxDistanceFound = haus.orientedDistance();\n if (this._maxDistanceFound > maxDist) {\n this._isValid = false;\n var pts = haus.getCoordinates();\n this._errorLocation = pts[1];\n this._errorIndicator = input.getFactory().createLineString(pts);\n this._errMsg = 'Distance between buffer curve and input is too large (' + this._maxDistanceFound + ' at ' + WKTWriter.toLineString(pts[0], pts[1]) + ')';\n }\n};\nBufferDistanceValidator.prototype.isValid = function isValid () {\n var posDistance = Math.abs(this._bufDistance);\n var distDelta = BufferDistanceValidator.MAX_DISTANCE_DIFF_FRAC * posDistance;\n this._minValidDistance = posDistance - distDelta;\n this._maxValidDistance = posDistance + distDelta;\n if (this._input.isEmpty() || this._result.isEmpty()) { return true }\n if (this._bufDistance > 0.0) {\n this.checkPositiveValid();\n } else {\n this.checkNegativeValid();\n }\n if (BufferDistanceValidator.VERBOSE) {\n System.out.println('Min Dist= ' + this._minDistanceFound + ' err= ' + (1.0 - this._minDistanceFound / this._bufDistance) + ' Max Dist= ' + this._maxDistanceFound + ' err= ' + (this._maxDistanceFound / this._bufDistance - 1.0));\n }\n return this._isValid\n};\nBufferDistanceValidator.prototype.checkNegativeValid = function checkNegativeValid () {\n if (!(this._input instanceof Polygon || this._input instanceof MultiPolygon || this._input instanceof GeometryCollection)) {\n return null\n }\n var inputCurve = this.getPolygonLines(this._input);\n this.checkMinimumDistance(inputCurve, this._result, this._minValidDistance);\n if (!this._isValid) { return null }\n this.checkMaximumDistance(inputCurve, this._result, this._maxValidDistance);\n};\nBufferDistanceValidator.prototype.getErrorIndicator = function getErrorIndicator () {\n return this._errorIndicator\n};\nBufferDistanceValidator.prototype.checkMinimumDistance = function checkMinimumDistance (g1, g2, minDist) {\n var distOp = new DistanceOp(g1, g2, minDist);\n this._minDistanceFound = distOp.distance();\n if (this._minDistanceFound < minDist) {\n this._isValid = false;\n var pts = distOp.nearestPoints();\n this._errorLocation = distOp.nearestPoints()[1];\n this._errorIndicator = g1.getFactory().createLineString(pts);\n this._errMsg = 'Distance between buffer curve and input is too small (' + this._minDistanceFound + ' at ' + WKTWriter.toLineString(pts[0], pts[1]) + ' )';\n }\n};\nBufferDistanceValidator.prototype.checkPositiveValid = function checkPositiveValid () {\n var bufCurve = this._result.getBoundary();\n this.checkMinimumDistance(this._input, bufCurve, this._minValidDistance);\n if (!this._isValid) { return null }\n this.checkMaximumDistance(this._input, bufCurve, this._maxValidDistance);\n};\nBufferDistanceValidator.prototype.getErrorLocation = function getErrorLocation () {\n return this._errorLocation\n};\nBufferDistanceValidator.prototype.getPolygonLines = function getPolygonLines (g) {\n var lines = new ArrayList();\n var lineExtracter = new LinearComponentExtracter(lines);\n var polys = PolygonExtracter.getPolygons(g);\n for (var i = polys.iterator(); i.hasNext();) {\n var poly = i.next();\n poly.apply(lineExtracter);\n }\n return g.getFactory().buildGeometry(lines)\n};\nBufferDistanceValidator.prototype.getErrorMessage = function getErrorMessage () {\n return this._errMsg\n};\nBufferDistanceValidator.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nBufferDistanceValidator.prototype.getClass = function getClass () {\n return BufferDistanceValidator\n};\nstaticAccessors$37.VERBOSE.get = function () { return false };\nstaticAccessors$37.MAX_DISTANCE_DIFF_FRAC.get = function () { return 0.012 };\n\nObject.defineProperties( BufferDistanceValidator, staticAccessors$37 );\n\nvar BufferResultValidator = function BufferResultValidator (input, distance, result) {\n this._isValid = true;\n this._errorMsg = null;\n this._errorLocation = null;\n this._errorIndicator = null;\n this._input = input || null;\n this._distance = distance || null;\n this._result = result || null;\n};\n\nvar staticAccessors$40 = { VERBOSE: { configurable: true },MAX_ENV_DIFF_FRAC: { configurable: true } };\nBufferResultValidator.prototype.isValid = function isValid () {\n this.checkPolygonal();\n if (!this._isValid) { return this._isValid }\n this.checkExpectedEmpty();\n if (!this._isValid) { return this._isValid }\n this.checkEnvelope();\n if (!this._isValid) { return this._isValid }\n this.checkArea();\n if (!this._isValid) { return this._isValid }\n this.checkDistance();\n return this._isValid\n};\nBufferResultValidator.prototype.checkEnvelope = function checkEnvelope () {\n if (this._distance < 0.0) { return null }\n var padding = this._distance * BufferResultValidator.MAX_ENV_DIFF_FRAC;\n if (padding === 0.0) { padding = 0.001; }\n var expectedEnv = new Envelope(this._input.getEnvelopeInternal());\n expectedEnv.expandBy(this._distance);\n var bufEnv = new Envelope(this._result.getEnvelopeInternal());\n bufEnv.expandBy(padding);\n if (!bufEnv.contains(expectedEnv)) {\n this._isValid = false;\n this._errorMsg = 'Buffer envelope is incorrect';\n this._errorIndicator = this._input.getFactory().toGeometry(bufEnv);\n }\n this.report('Envelope');\n};\nBufferResultValidator.prototype.checkDistance = function checkDistance () {\n var distValid = new BufferDistanceValidator(this._input, this._distance, this._result);\n if (!distValid.isValid()) {\n this._isValid = false;\n this._errorMsg = distValid.getErrorMessage();\n this._errorLocation = distValid.getErrorLocation();\n this._errorIndicator = distValid.getErrorIndicator();\n }\n this.report('Distance');\n};\nBufferResultValidator.prototype.checkArea = function checkArea () {\n var inputArea = this._input.getArea();\n var resultArea = this._result.getArea();\n if (this._distance > 0.0 && inputArea > resultArea) {\n this._isValid = false;\n this._errorMsg = 'Area of positive buffer is smaller than input';\n this._errorIndicator = this._result;\n }\n if (this._distance < 0.0 && inputArea < resultArea) {\n this._isValid = false;\n this._errorMsg = 'Area of negative buffer is larger than input';\n this._errorIndicator = this._result;\n }\n this.report('Area');\n};\nBufferResultValidator.prototype.checkPolygonal = function checkPolygonal () {\n if (!(this._result instanceof Polygon || this._result instanceof MultiPolygon)) { this._isValid = false; }\n this._errorMsg = 'Result is not polygonal';\n this._errorIndicator = this._result;\n this.report('Polygonal');\n};\nBufferResultValidator.prototype.getErrorIndicator = function getErrorIndicator () {\n return this._errorIndicator\n};\nBufferResultValidator.prototype.getErrorLocation = function getErrorLocation () {\n return this._errorLocation\n};\nBufferResultValidator.prototype.checkExpectedEmpty = function checkExpectedEmpty () {\n if (this._input.getDimension() >= 2) { return null }\n if (this._distance > 0.0) { return null }\n if (!this._result.isEmpty()) {\n this._isValid = false;\n this._errorMsg = 'Result is non-empty';\n this._errorIndicator = this._result;\n }\n this.report('ExpectedEmpty');\n};\nBufferResultValidator.prototype.report = function report (checkName) {\n if (!BufferResultValidator.VERBOSE) { return null }\n System.out.println('Check ' + checkName + ': ' + (this._isValid ? 'passed' : 'FAILED'));\n};\nBufferResultValidator.prototype.getErrorMessage = function getErrorMessage () {\n return this._errorMsg\n};\nBufferResultValidator.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nBufferResultValidator.prototype.getClass = function getClass () {\n return BufferResultValidator\n};\nBufferResultValidator.isValidMsg = function isValidMsg (g, distance, result) {\n var validator = new BufferResultValidator(g, distance, result);\n if (!validator.isValid()) { return validator.getErrorMessage() }\n return null\n};\nBufferResultValidator.isValid = function isValid (g, distance, result) {\n var validator = new BufferResultValidator(g, distance, result);\n if (validator.isValid()) { return true }\n return false\n};\nstaticAccessors$40.VERBOSE.get = function () { return false };\nstaticAccessors$40.MAX_ENV_DIFF_FRAC.get = function () { return 0.012 };\n\nObject.defineProperties( BufferResultValidator, staticAccessors$40 );\n\n// operation.buffer\n\nvar BasicSegmentString = function BasicSegmentString () {\n this._pts = null;\n this._data = null;\n var pts = arguments[0];\n var data = arguments[1];\n this._pts = pts;\n this._data = data;\n};\nBasicSegmentString.prototype.getCoordinates = function getCoordinates () {\n return this._pts\n};\nBasicSegmentString.prototype.size = function size () {\n return this._pts.length\n};\nBasicSegmentString.prototype.getCoordinate = function getCoordinate (i) {\n return this._pts[i]\n};\nBasicSegmentString.prototype.isClosed = function isClosed () {\n return this._pts[0].equals(this._pts[this._pts.length - 1])\n};\nBasicSegmentString.prototype.getSegmentOctant = function getSegmentOctant (index) {\n if (index === this._pts.length - 1) { return -1 }\n return Octant.octant(this.getCoordinate(index), this.getCoordinate(index + 1))\n};\nBasicSegmentString.prototype.setData = function setData (data) {\n this._data = data;\n};\nBasicSegmentString.prototype.getData = function getData () {\n return this._data\n};\nBasicSegmentString.prototype.toString = function toString () {\n return WKTWriter.toLineString(new CoordinateArraySequence(this._pts))\n};\nBasicSegmentString.prototype.interfaces_ = function interfaces_ () {\n return [SegmentString]\n};\nBasicSegmentString.prototype.getClass = function getClass () {\n return BasicSegmentString\n};\n\nvar InteriorIntersectionFinder = function InteriorIntersectionFinder () {\n this._findAllIntersections = false;\n this._isCheckEndSegmentsOnly = false;\n this._li = null;\n this._interiorIntersection = null;\n this._intSegments = null;\n this._intersections = new ArrayList();\n this._intersectionCount = 0;\n this._keepIntersections = true;\n var li = arguments[0];\n this._li = li;\n this._interiorIntersection = null;\n};\nInteriorIntersectionFinder.prototype.getInteriorIntersection = function getInteriorIntersection () {\n return this._interiorIntersection\n};\nInteriorIntersectionFinder.prototype.setCheckEndSegmentsOnly = function setCheckEndSegmentsOnly (isCheckEndSegmentsOnly) {\n this._isCheckEndSegmentsOnly = isCheckEndSegmentsOnly;\n};\nInteriorIntersectionFinder.prototype.getIntersectionSegments = function getIntersectionSegments () {\n return this._intSegments\n};\nInteriorIntersectionFinder.prototype.count = function count () {\n return this._intersectionCount\n};\nInteriorIntersectionFinder.prototype.getIntersections = function getIntersections () {\n return this._intersections\n};\nInteriorIntersectionFinder.prototype.setFindAllIntersections = function setFindAllIntersections (findAllIntersections) {\n this._findAllIntersections = findAllIntersections;\n};\nInteriorIntersectionFinder.prototype.setKeepIntersections = function setKeepIntersections (keepIntersections) {\n this._keepIntersections = keepIntersections;\n};\nInteriorIntersectionFinder.prototype.processIntersections = function processIntersections (e0, segIndex0, e1, segIndex1) {\n if (!this._findAllIntersections && this.hasIntersection()) { return null }\n if (e0 === e1 && segIndex0 === segIndex1) { return null }\n if (this._isCheckEndSegmentsOnly) {\n var isEndSegPresent = this.isEndSegment(e0, segIndex0) || this.isEndSegment(e1, segIndex1);\n if (!isEndSegPresent) { return null }\n }\n var p00 = e0.getCoordinates()[segIndex0];\n var p01 = e0.getCoordinates()[segIndex0 + 1];\n var p10 = e1.getCoordinates()[segIndex1];\n var p11 = e1.getCoordinates()[segIndex1 + 1];\n this._li.computeIntersection(p00, p01, p10, p11);\n if (this._li.hasIntersection()) {\n if (this._li.isInteriorIntersection()) {\n this._intSegments = new Array(4).fill(null);\n this._intSegments[0] = p00;\n this._intSegments[1] = p01;\n this._intSegments[2] = p10;\n this._intSegments[3] = p11;\n this._interiorIntersection = this._li.getIntersection(0);\n if (this._keepIntersections) { this._intersections.add(this._interiorIntersection); }\n this._intersectionCount++;\n }\n }\n};\nInteriorIntersectionFinder.prototype.isEndSegment = function isEndSegment (segStr, index) {\n if (index === 0) { return true }\n if (index >= segStr.size() - 2) { return true }\n return false\n};\nInteriorIntersectionFinder.prototype.hasIntersection = function hasIntersection () {\n return this._interiorIntersection !== null\n};\nInteriorIntersectionFinder.prototype.isDone = function isDone () {\n if (this._findAllIntersections) { return false }\n return this._interiorIntersection !== null\n};\nInteriorIntersectionFinder.prototype.interfaces_ = function interfaces_ () {\n return [SegmentIntersector]\n};\nInteriorIntersectionFinder.prototype.getClass = function getClass () {\n return InteriorIntersectionFinder\n};\nInteriorIntersectionFinder.createAllIntersectionsFinder = function createAllIntersectionsFinder (li) {\n var finder = new InteriorIntersectionFinder(li);\n finder.setFindAllIntersections(true);\n return finder\n};\nInteriorIntersectionFinder.createAnyIntersectionFinder = function createAnyIntersectionFinder (li) {\n return new InteriorIntersectionFinder(li)\n};\nInteriorIntersectionFinder.createIntersectionCounter = function createIntersectionCounter (li) {\n var finder = new InteriorIntersectionFinder(li);\n finder.setFindAllIntersections(true);\n finder.setKeepIntersections(false);\n return finder\n};\n\nvar FastNodingValidator = function FastNodingValidator () {\n this._li = new RobustLineIntersector();\n this._segStrings = null;\n this._findAllIntersections = false;\n this._segInt = null;\n this._isValid = true;\n var segStrings = arguments[0];\n this._segStrings = segStrings;\n};\nFastNodingValidator.prototype.execute = function execute () {\n if (this._segInt !== null) { return null }\n this.checkInteriorIntersections();\n};\nFastNodingValidator.prototype.getIntersections = function getIntersections () {\n return this._segInt.getIntersections()\n};\nFastNodingValidator.prototype.isValid = function isValid () {\n this.execute();\n return this._isValid\n};\nFastNodingValidator.prototype.setFindAllIntersections = function setFindAllIntersections (findAllIntersections) {\n this._findAllIntersections = findAllIntersections;\n};\nFastNodingValidator.prototype.checkInteriorIntersections = function checkInteriorIntersections () {\n this._isValid = true;\n this._segInt = new InteriorIntersectionFinder(this._li);\n this._segInt.setFindAllIntersections(this._findAllIntersections);\n var noder = new MCIndexNoder();\n noder.setSegmentIntersector(this._segInt);\n noder.computeNodes(this._segStrings);\n if (this._segInt.hasIntersection()) {\n this._isValid = false;\n return null\n }\n};\nFastNodingValidator.prototype.checkValid = function checkValid () {\n this.execute();\n if (!this._isValid) { throw new TopologyException(this.getErrorMessage(), this._segInt.getInteriorIntersection()) }\n};\nFastNodingValidator.prototype.getErrorMessage = function getErrorMessage () {\n if (this._isValid) { return 'no intersections found' }\n var intSegs = this._segInt.getIntersectionSegments();\n return 'found non-noded intersection between ' + WKTWriter.toLineString(intSegs[0], intSegs[1]) + ' and ' + WKTWriter.toLineString(intSegs[2], intSegs[3])\n};\nFastNodingValidator.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nFastNodingValidator.prototype.getClass = function getClass () {\n return FastNodingValidator\n};\nFastNodingValidator.computeIntersections = function computeIntersections (segStrings) {\n var nv = new FastNodingValidator(segStrings);\n nv.setFindAllIntersections(true);\n nv.isValid();\n return nv.getIntersections()\n};\n\nvar EdgeNodingValidator = function EdgeNodingValidator () {\n this._nv = null;\n var edges = arguments[0];\n this._nv = new FastNodingValidator(EdgeNodingValidator.toSegmentStrings(edges));\n};\nEdgeNodingValidator.prototype.checkValid = function checkValid () {\n this._nv.checkValid();\n};\nEdgeNodingValidator.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nEdgeNodingValidator.prototype.getClass = function getClass () {\n return EdgeNodingValidator\n};\nEdgeNodingValidator.toSegmentStrings = function toSegmentStrings (edges) {\n var segStrings = new ArrayList();\n for (var i = edges.iterator(); i.hasNext();) {\n var e = i.next();\n segStrings.add(new BasicSegmentString(e.getCoordinates(), e));\n }\n return segStrings\n};\nEdgeNodingValidator.checkValid = function checkValid (edges) {\n var validator = new EdgeNodingValidator(edges);\n validator.checkValid();\n};\n\nvar GeometryCollectionMapper = function GeometryCollectionMapper (mapOp) {\n this._mapOp = mapOp;\n};\nGeometryCollectionMapper.prototype.map = function map (gc) {\n var this$1 = this;\n\n var mapped = new ArrayList();\n for (var i = 0; i < gc.getNumGeometries(); i++) {\n var g = this$1._mapOp.map(gc.getGeometryN(i));\n if (!g.isEmpty()) { mapped.add(g); }\n }\n return gc.getFactory().createGeometryCollection(GeometryFactory.toGeometryArray(mapped))\n};\nGeometryCollectionMapper.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nGeometryCollectionMapper.prototype.getClass = function getClass () {\n return GeometryCollectionMapper\n};\nGeometryCollectionMapper.map = function map (gc, op) {\n var mapper = new GeometryCollectionMapper(op);\n return mapper.map(gc)\n};\n\nvar LineBuilder = function LineBuilder () {\n this._op = null;\n this._geometryFactory = null;\n this._ptLocator = null;\n this._lineEdgesList = new ArrayList();\n this._resultLineList = new ArrayList();\n var op = arguments[0];\n var geometryFactory = arguments[1];\n var ptLocator = arguments[2];\n this._op = op;\n this._geometryFactory = geometryFactory;\n this._ptLocator = ptLocator;\n};\nLineBuilder.prototype.collectLines = function collectLines (opCode) {\n var this$1 = this;\n\n for (var it = this._op.getGraph().getEdgeEnds().iterator(); it.hasNext();) {\n var de = it.next();\n this$1.collectLineEdge(de, opCode, this$1._lineEdgesList);\n this$1.collectBoundaryTouchEdge(de, opCode, this$1._lineEdgesList);\n }\n};\nLineBuilder.prototype.labelIsolatedLine = function labelIsolatedLine (e, targetIndex) {\n var loc = this._ptLocator.locate(e.getCoordinate(), this._op.getArgGeometry(targetIndex));\n e.getLabel().setLocation(targetIndex, loc);\n};\nLineBuilder.prototype.build = function build (opCode) {\n this.findCoveredLineEdges();\n this.collectLines(opCode);\n this.buildLines(opCode);\n return this._resultLineList\n};\nLineBuilder.prototype.collectLineEdge = function collectLineEdge (de, opCode, edges) {\n var label = de.getLabel();\n var e = de.getEdge();\n if (de.isLineEdge()) {\n if (!de.isVisited() && OverlayOp.isResultOfOp(label, opCode) && !e.isCovered()) {\n edges.add(e);\n de.setVisitedEdge(true);\n }\n }\n};\nLineBuilder.prototype.findCoveredLineEdges = function findCoveredLineEdges () {\n var this$1 = this;\n\n for (var nodeit = this._op.getGraph().getNodes().iterator(); nodeit.hasNext();) {\n var node = nodeit.next();\n node.getEdges().findCoveredLineEdges();\n }\n for (var it = this._op.getGraph().getEdgeEnds().iterator(); it.hasNext();) {\n var de = it.next();\n var e = de.getEdge();\n if (de.isLineEdge() && !e.isCoveredSet()) {\n var isCovered = this$1._op.isCoveredByA(de.getCoordinate());\n e.setCovered(isCovered);\n }\n }\n};\nLineBuilder.prototype.labelIsolatedLines = function labelIsolatedLines (edgesList) {\n var this$1 = this;\n\n for (var it = edgesList.iterator(); it.hasNext();) {\n var e = it.next();\n var label = e.getLabel();\n if (e.isIsolated()) {\n if (label.isNull(0)) { this$1.labelIsolatedLine(e, 0); } else { this$1.labelIsolatedLine(e, 1); }\n }\n }\n};\nLineBuilder.prototype.buildLines = function buildLines (opCode) {\n var this$1 = this;\n\n for (var it = this._lineEdgesList.iterator(); it.hasNext();) {\n var e = it.next();\n // const label = e.getLabel()\n var line = this$1._geometryFactory.createLineString(e.getCoordinates());\n this$1._resultLineList.add(line);\n e.setInResult(true);\n }\n};\nLineBuilder.prototype.collectBoundaryTouchEdge = function collectBoundaryTouchEdge (de, opCode, edges) {\n var label = de.getLabel();\n if (de.isLineEdge()) { return null }\n if (de.isVisited()) { return null }\n if (de.isInteriorAreaEdge()) { return null }\n if (de.getEdge().isInResult()) { return null }\n Assert.isTrue(!(de.isInResult() || de.getSym().isInResult()) || !de.getEdge().isInResult());\n if (OverlayOp.isResultOfOp(label, opCode) && opCode === OverlayOp.INTERSECTION) {\n edges.add(de.getEdge());\n de.setVisitedEdge(true);\n }\n};\nLineBuilder.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nLineBuilder.prototype.getClass = function getClass () {\n return LineBuilder\n};\n\nvar PointBuilder = function PointBuilder () {\n this._op = null;\n this._geometryFactory = null;\n this._resultPointList = new ArrayList();\n var op = arguments[0];\n var geometryFactory = arguments[1];\n // const ptLocator = arguments[2]\n this._op = op;\n this._geometryFactory = geometryFactory;\n};\nPointBuilder.prototype.filterCoveredNodeToPoint = function filterCoveredNodeToPoint (n) {\n var coord = n.getCoordinate();\n if (!this._op.isCoveredByLA(coord)) {\n var pt = this._geometryFactory.createPoint(coord);\n this._resultPointList.add(pt);\n }\n};\nPointBuilder.prototype.extractNonCoveredResultNodes = function extractNonCoveredResultNodes (opCode) {\n var this$1 = this;\n\n for (var nodeit = this._op.getGraph().getNodes().iterator(); nodeit.hasNext();) {\n var n = nodeit.next();\n if (n.isInResult()) { continue }\n if (n.isIncidentEdgeInResult()) { continue }\n if (n.getEdges().getDegree() === 0 || opCode === OverlayOp.INTERSECTION) {\n var label = n.getLabel();\n if (OverlayOp.isResultOfOp(label, opCode)) {\n this$1.filterCoveredNodeToPoint(n);\n }\n }\n }\n};\nPointBuilder.prototype.build = function build (opCode) {\n this.extractNonCoveredResultNodes(opCode);\n return this._resultPointList\n};\nPointBuilder.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nPointBuilder.prototype.getClass = function getClass () {\n return PointBuilder\n};\n\nvar GeometryTransformer = function GeometryTransformer () {\n this._inputGeom = null;\n this._factory = null;\n this._pruneEmptyGeometry = true;\n this._preserveGeometryCollectionType = true;\n this._preserveCollections = false;\n this._preserveType = false;\n};\nGeometryTransformer.prototype.transformPoint = function transformPoint (geom, parent) {\n return this._factory.createPoint(this.transformCoordinates(geom.getCoordinateSequence(), geom))\n};\nGeometryTransformer.prototype.transformPolygon = function transformPolygon (geom, parent) {\n var this$1 = this;\n\n var isAllValidLinearRings = true;\n var shell = this.transformLinearRing(geom.getExteriorRing(), geom);\n if (shell === null || !(shell instanceof LinearRing) || shell.isEmpty()) { isAllValidLinearRings = false; }\n var holes = new ArrayList();\n for (var i = 0; i < geom.getNumInteriorRing(); i++) {\n var hole = this$1.transformLinearRing(geom.getInteriorRingN(i), geom);\n if (hole === null || hole.isEmpty()) {\n continue\n }\n if (!(hole instanceof LinearRing)) { isAllValidLinearRings = false; }\n holes.add(hole);\n }\n if (isAllValidLinearRings) { return this._factory.createPolygon(shell, holes.toArray([])); } else {\n var components = new ArrayList();\n if (shell !== null) { components.add(shell); }\n components.addAll(holes);\n return this._factory.buildGeometry(components)\n }\n};\nGeometryTransformer.prototype.createCoordinateSequence = function createCoordinateSequence (coords) {\n return this._factory.getCoordinateSequenceFactory().create(coords)\n};\nGeometryTransformer.prototype.getInputGeometry = function getInputGeometry () {\n return this._inputGeom\n};\nGeometryTransformer.prototype.transformMultiLineString = function transformMultiLineString (geom, parent) {\n var this$1 = this;\n\n var transGeomList = new ArrayList();\n for (var i = 0; i < geom.getNumGeometries(); i++) {\n var transformGeom = this$1.transformLineString(geom.getGeometryN(i), geom);\n if (transformGeom === null) { continue }\n if (transformGeom.isEmpty()) { continue }\n transGeomList.add(transformGeom);\n }\n return this._factory.buildGeometry(transGeomList)\n};\nGeometryTransformer.prototype.transformCoordinates = function transformCoordinates (coords, parent) {\n return this.copy(coords)\n};\nGeometryTransformer.prototype.transformLineString = function transformLineString (geom, parent) {\n return this._factory.createLineString(this.transformCoordinates(geom.getCoordinateSequence(), geom))\n};\nGeometryTransformer.prototype.transformMultiPoint = function transformMultiPoint (geom, parent) {\n var this$1 = this;\n\n var transGeomList = new ArrayList();\n for (var i = 0; i < geom.getNumGeometries(); i++) {\n var transformGeom = this$1.transformPoint(geom.getGeometryN(i), geom);\n if (transformGeom === null) { continue }\n if (transformGeom.isEmpty()) { continue }\n transGeomList.add(transformGeom);\n }\n return this._factory.buildGeometry(transGeomList)\n};\nGeometryTransformer.prototype.transformMultiPolygon = function transformMultiPolygon (geom, parent) {\n var this$1 = this;\n\n var transGeomList = new ArrayList();\n for (var i = 0; i < geom.getNumGeometries(); i++) {\n var transformGeom = this$1.transformPolygon(geom.getGeometryN(i), geom);\n if (transformGeom === null) { continue }\n if (transformGeom.isEmpty()) { continue }\n transGeomList.add(transformGeom);\n }\n return this._factory.buildGeometry(transGeomList)\n};\nGeometryTransformer.prototype.copy = function copy (seq) {\n return seq.copy()\n};\nGeometryTransformer.prototype.transformGeometryCollection = function transformGeometryCollection (geom, parent) {\n var this$1 = this;\n\n var transGeomList = new ArrayList();\n for (var i = 0; i < geom.getNumGeometries(); i++) {\n var transformGeom = this$1.transform(geom.getGeometryN(i));\n if (transformGeom === null) { continue }\n if (this$1._pruneEmptyGeometry && transformGeom.isEmpty()) { continue }\n transGeomList.add(transformGeom);\n }\n if (this._preserveGeometryCollectionType) { return this._factory.createGeometryCollection(GeometryFactory.toGeometryArray(transGeomList)) }\n return this._factory.buildGeometry(transGeomList)\n};\nGeometryTransformer.prototype.transform = function transform (inputGeom) {\n this._inputGeom = inputGeom;\n this._factory = inputGeom.getFactory();\n if (inputGeom instanceof Point) { return this.transformPoint(inputGeom, null) }\n if (inputGeom instanceof MultiPoint) { return this.transformMultiPoint(inputGeom, null) }\n if (inputGeom instanceof LinearRing) { return this.transformLinearRing(inputGeom, null) }\n if (inputGeom instanceof LineString) { return this.transformLineString(inputGeom, null) }\n if (inputGeom instanceof MultiLineString) { return this.transformMultiLineString(inputGeom, null) }\n if (inputGeom instanceof Polygon) { return this.transformPolygon(inputGeom, null) }\n if (inputGeom instanceof MultiPolygon) { return this.transformMultiPolygon(inputGeom, null) }\n if (inputGeom instanceof GeometryCollection) { return this.transformGeometryCollection(inputGeom, null) }\n throw new IllegalArgumentException('Unknown Geometry subtype: ' + inputGeom.getClass().getName())\n};\nGeometryTransformer.prototype.transformLinearRing = function transformLinearRing (geom, parent) {\n var seq = this.transformCoordinates(geom.getCoordinateSequence(), geom);\n if (seq === null) { return this._factory.createLinearRing(null) }\n var seqSize = seq.size();\n if (seqSize > 0 && seqSize < 4 && !this._preserveType) { return this._factory.createLineString(seq) }\n return this._factory.createLinearRing(seq)\n};\nGeometryTransformer.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nGeometryTransformer.prototype.getClass = function getClass () {\n return GeometryTransformer\n};\n\nvar LineStringSnapper = function LineStringSnapper () {\n this._snapTolerance = 0.0;\n this._srcPts = null;\n this._seg = new LineSegment();\n this._allowSnappingToSourceVertices = false;\n this._isClosed = false;\n if (arguments[0] instanceof LineString && typeof arguments[1] === 'number') {\n var srcLine = arguments[0];\n var snapTolerance = arguments[1];\n LineStringSnapper.call(this, srcLine.getCoordinates(), snapTolerance);\n } else if (arguments[0] instanceof Array && typeof arguments[1] === 'number') {\n var srcPts = arguments[0];\n var snapTolerance$1 = arguments[1];\n this._srcPts = srcPts;\n this._isClosed = LineStringSnapper.isClosed(srcPts);\n this._snapTolerance = snapTolerance$1;\n }\n};\nLineStringSnapper.prototype.snapVertices = function snapVertices (srcCoords, snapPts) {\n var this$1 = this;\n\n var end = this._isClosed ? srcCoords.size() - 1 : srcCoords.size();\n for (var i = 0; i < end; i++) {\n var srcPt = srcCoords.get(i);\n var snapVert = this$1.findSnapForVertex(srcPt, snapPts);\n if (snapVert !== null) {\n srcCoords.set(i, new Coordinate(snapVert));\n if (i === 0 && this$1._isClosed) { srcCoords.set(srcCoords.size() - 1, new Coordinate(snapVert)); }\n }\n }\n};\nLineStringSnapper.prototype.findSnapForVertex = function findSnapForVertex (pt, snapPts) {\n var this$1 = this;\n\n for (var i = 0; i < snapPts.length; i++) {\n if (pt.equals2D(snapPts[i])) { return null }\n if (pt.distance(snapPts[i]) < this$1._snapTolerance) { return snapPts[i] }\n }\n return null\n};\nLineStringSnapper.prototype.snapTo = function snapTo (snapPts) {\n var coordList = new CoordinateList(this._srcPts);\n this.snapVertices(coordList, snapPts);\n this.snapSegments(coordList, snapPts);\n var newPts = coordList.toCoordinateArray();\n return newPts\n};\nLineStringSnapper.prototype.snapSegments = function snapSegments (srcCoords, snapPts) {\n var this$1 = this;\n\n if (snapPts.length === 0) { return null }\n var distinctPtCount = snapPts.length;\n if (snapPts[0].equals2D(snapPts[snapPts.length - 1])) { distinctPtCount = snapPts.length - 1; }\n for (var i = 0; i < distinctPtCount; i++) {\n var snapPt = snapPts[i];\n var index = this$1.findSegmentIndexToSnap(snapPt, srcCoords);\n if (index >= 0) {\n srcCoords.add(index + 1, new Coordinate(snapPt), false);\n }\n }\n};\nLineStringSnapper.prototype.findSegmentIndexToSnap = function findSegmentIndexToSnap (snapPt, srcCoords) {\n var this$1 = this;\n\n var minDist = Double.MAX_VALUE;\n var snapIndex = -1;\n for (var i = 0; i < srcCoords.size() - 1; i++) {\n this$1._seg.p0 = srcCoords.get(i);\n this$1._seg.p1 = srcCoords.get(i + 1);\n if (this$1._seg.p0.equals2D(snapPt) || this$1._seg.p1.equals2D(snapPt)) {\n if (this$1._allowSnappingToSourceVertices) { continue; } else { return -1 }\n }\n var dist = this$1._seg.distance(snapPt);\n if (dist < this$1._snapTolerance && dist < minDist) {\n minDist = dist;\n snapIndex = i;\n }\n }\n return snapIndex\n};\nLineStringSnapper.prototype.setAllowSnappingToSourceVertices = function setAllowSnappingToSourceVertices (allowSnappingToSourceVertices) {\n this._allowSnappingToSourceVertices = allowSnappingToSourceVertices;\n};\nLineStringSnapper.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nLineStringSnapper.prototype.getClass = function getClass () {\n return LineStringSnapper\n};\nLineStringSnapper.isClosed = function isClosed (pts) {\n if (pts.length <= 1) { return false }\n return pts[0].equals2D(pts[pts.length - 1])\n};\n\nvar GeometrySnapper = function GeometrySnapper (srcGeom) {\n this._srcGeom = srcGeom || null;\n};\n\nvar staticAccessors$41 = { SNAP_PRECISION_FACTOR: { configurable: true } };\nGeometrySnapper.prototype.snapTo = function snapTo (snapGeom, snapTolerance) {\n var snapPts = this.extractTargetCoordinates(snapGeom);\n var snapTrans = new SnapTransformer(snapTolerance, snapPts);\n return snapTrans.transform(this._srcGeom)\n};\nGeometrySnapper.prototype.snapToSelf = function snapToSelf (snapTolerance, cleanResult) {\n var snapPts = this.extractTargetCoordinates(this._srcGeom);\n var snapTrans = new SnapTransformer(snapTolerance, snapPts, true);\n var snappedGeom = snapTrans.transform(this._srcGeom);\n var result = snappedGeom;\n if (cleanResult && hasInterface(result, Polygonal)) {\n result = snappedGeom.buffer(0);\n }\n return result\n};\nGeometrySnapper.prototype.computeSnapTolerance = function computeSnapTolerance (ringPts) {\n var minSegLen = this.computeMinimumSegmentLength(ringPts);\n var snapTol = minSegLen / 10;\n return snapTol\n};\nGeometrySnapper.prototype.extractTargetCoordinates = function extractTargetCoordinates (g) {\n var ptSet = new TreeSet();\n var pts = g.getCoordinates();\n for (var i = 0; i < pts.length; i++) {\n ptSet.add(pts[i]);\n }\n return ptSet.toArray(new Array(0).fill(null))\n};\nGeometrySnapper.prototype.computeMinimumSegmentLength = function computeMinimumSegmentLength (pts) {\n var minSegLen = Double.MAX_VALUE;\n for (var i = 0; i < pts.length - 1; i++) {\n var segLen = pts[i].distance(pts[i + 1]);\n if (segLen < minSegLen) { minSegLen = segLen; }\n }\n return minSegLen\n};\nGeometrySnapper.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nGeometrySnapper.prototype.getClass = function getClass () {\n return GeometrySnapper\n};\nGeometrySnapper.snap = function snap (g0, g1, snapTolerance) {\n var snapGeom = new Array(2).fill(null);\n var snapper0 = new GeometrySnapper(g0);\n snapGeom[0] = snapper0.snapTo(g1, snapTolerance);\n var snapper1 = new GeometrySnapper(g1);\n snapGeom[1] = snapper1.snapTo(snapGeom[0], snapTolerance);\n return snapGeom\n};\nGeometrySnapper.computeOverlaySnapTolerance = function computeOverlaySnapTolerance () {\n if (arguments.length === 1) {\n var g = arguments[0];\n var snapTolerance = GeometrySnapper.computeSizeBasedSnapTolerance(g);\n var pm = g.getPrecisionModel();\n if (pm.getType() === PrecisionModel.FIXED) {\n var fixedSnapTol = 1 / pm.getScale() * 2 / 1.415;\n if (fixedSnapTol > snapTolerance) { snapTolerance = fixedSnapTol; }\n }\n return snapTolerance\n } else if (arguments.length === 2) {\n var g0 = arguments[0];\n var g1 = arguments[1];\n return Math.min(GeometrySnapper.computeOverlaySnapTolerance(g0), GeometrySnapper.computeOverlaySnapTolerance(g1))\n }\n};\nGeometrySnapper.computeSizeBasedSnapTolerance = function computeSizeBasedSnapTolerance (g) {\n var env = g.getEnvelopeInternal();\n var minDimension = Math.min(env.getHeight(), env.getWidth());\n var snapTol = minDimension * GeometrySnapper.SNAP_PRECISION_FACTOR;\n return snapTol\n};\nGeometrySnapper.snapToSelf = function snapToSelf (geom, snapTolerance, cleanResult) {\n var snapper0 = new GeometrySnapper(geom);\n return snapper0.snapToSelf(snapTolerance, cleanResult)\n};\nstaticAccessors$41.SNAP_PRECISION_FACTOR.get = function () { return 1e-9 };\n\nObject.defineProperties( GeometrySnapper, staticAccessors$41 );\n\nvar SnapTransformer = (function (GeometryTransformer$$1) {\n function SnapTransformer (snapTolerance, snapPts, isSelfSnap) {\n GeometryTransformer$$1.call(this);\n this._snapTolerance = snapTolerance || null;\n this._snapPts = snapPts || null;\n this._isSelfSnap = (isSelfSnap !== undefined) ? isSelfSnap : false;\n }\n\n if ( GeometryTransformer$$1 ) SnapTransformer.__proto__ = GeometryTransformer$$1;\n SnapTransformer.prototype = Object.create( GeometryTransformer$$1 && GeometryTransformer$$1.prototype );\n SnapTransformer.prototype.constructor = SnapTransformer;\n SnapTransformer.prototype.snapLine = function snapLine (srcPts, snapPts) {\n var snapper = new LineStringSnapper(srcPts, this._snapTolerance);\n snapper.setAllowSnappingToSourceVertices(this._isSelfSnap);\n return snapper.snapTo(snapPts)\n };\n SnapTransformer.prototype.transformCoordinates = function transformCoordinates (coords, parent) {\n var srcPts = coords.toCoordinateArray();\n var newPts = this.snapLine(srcPts, this._snapPts);\n return this._factory.getCoordinateSequenceFactory().create(newPts)\n };\n SnapTransformer.prototype.interfaces_ = function interfaces_ () {\n return []\n };\n SnapTransformer.prototype.getClass = function getClass () {\n return SnapTransformer\n };\n\n return SnapTransformer;\n}(GeometryTransformer));\n\nvar CommonBits = function CommonBits () {\n this._isFirst = true;\n this._commonMantissaBitsCount = 53;\n this._commonBits = 0;\n this._commonSignExp = null;\n};\nCommonBits.prototype.getCommon = function getCommon () {\n return Double.longBitsToDouble(this._commonBits)\n};\nCommonBits.prototype.add = function add (num) {\n var numBits = Double.doubleToLongBits(num);\n if (this._isFirst) {\n this._commonBits = numBits;\n this._commonSignExp = CommonBits.signExpBits(this._commonBits);\n this._isFirst = false;\n return null\n }\n var numSignExp = CommonBits.signExpBits(numBits);\n if (numSignExp !== this._commonSignExp) {\n this._commonBits = 0;\n return null\n }\n this._commonMantissaBitsCount = CommonBits.numCommonMostSigMantissaBits(this._commonBits, numBits);\n this._commonBits = CommonBits.zeroLowerBits(this._commonBits, 64 - (12 + this._commonMantissaBitsCount));\n};\nCommonBits.prototype.toString = function toString () {\n if (arguments.length === 1) {\n var bits = arguments[0];\n var x = Double.longBitsToDouble(bits);\n var numStr = Double.toBinaryString(bits);\n var padStr = '0000000000000000000000000000000000000000000000000000000000000000' + numStr;\n var bitStr = padStr.substring(padStr.length - 64);\n var str = bitStr.substring(0, 1) + ' ' + bitStr.substring(1, 12) + '(exp) ' + bitStr.substring(12) + ' [ ' + x + ' ]';\n return str\n }\n};\nCommonBits.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nCommonBits.prototype.getClass = function getClass () {\n return CommonBits\n};\nCommonBits.getBit = function getBit (bits, i) {\n var mask = 1 << i;\n return (bits & mask) !== 0 ? 1 : 0\n};\nCommonBits.signExpBits = function signExpBits (num) {\n return num >> 52\n};\nCommonBits.zeroLowerBits = function zeroLowerBits (bits, nBits) {\n var invMask = (1 << nBits) - 1;\n var mask = ~invMask;\n var zeroed = bits & mask;\n return zeroed\n};\nCommonBits.numCommonMostSigMantissaBits = function numCommonMostSigMantissaBits (num1, num2) {\n var count = 0;\n for (var i = 52; i >= 0; i--) {\n if (CommonBits.getBit(num1, i) !== CommonBits.getBit(num2, i)) { return count }\n count++;\n }\n return 52\n};\n\nvar CommonBitsRemover = function CommonBitsRemover () {\n this._commonCoord = null;\n this._ccFilter = new CommonCoordinateFilter();\n};\n\nvar staticAccessors$42 = { CommonCoordinateFilter: { configurable: true },Translater: { configurable: true } };\nCommonBitsRemover.prototype.addCommonBits = function addCommonBits (geom) {\n var trans = new Translater(this._commonCoord);\n geom.apply(trans);\n geom.geometryChanged();\n};\nCommonBitsRemover.prototype.removeCommonBits = function removeCommonBits (geom) {\n if (this._commonCoord.x === 0.0 && this._commonCoord.y === 0.0) { return geom }\n var invCoord = new Coordinate(this._commonCoord);\n invCoord.x = -invCoord.x;\n invCoord.y = -invCoord.y;\n var trans = new Translater(invCoord);\n geom.apply(trans);\n geom.geometryChanged();\n return geom\n};\nCommonBitsRemover.prototype.getCommonCoordinate = function getCommonCoordinate () {\n return this._commonCoord\n};\nCommonBitsRemover.prototype.add = function add (geom) {\n geom.apply(this._ccFilter);\n this._commonCoord = this._ccFilter.getCommonCoordinate();\n};\nCommonBitsRemover.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nCommonBitsRemover.prototype.getClass = function getClass () {\n return CommonBitsRemover\n};\nstaticAccessors$42.CommonCoordinateFilter.get = function () { return CommonCoordinateFilter };\nstaticAccessors$42.Translater.get = function () { return Translater };\n\nObject.defineProperties( CommonBitsRemover, staticAccessors$42 );\n\nvar CommonCoordinateFilter = function CommonCoordinateFilter () {\n this._commonBitsX = new CommonBits();\n this._commonBitsY = new CommonBits();\n};\nCommonCoordinateFilter.prototype.filter = function filter (coord) {\n this._commonBitsX.add(coord.x);\n this._commonBitsY.add(coord.y);\n};\nCommonCoordinateFilter.prototype.getCommonCoordinate = function getCommonCoordinate () {\n return new Coordinate(this._commonBitsX.getCommon(), this._commonBitsY.getCommon())\n};\nCommonCoordinateFilter.prototype.interfaces_ = function interfaces_ () {\n return [CoordinateFilter]\n};\nCommonCoordinateFilter.prototype.getClass = function getClass () {\n return CommonCoordinateFilter\n};\n\nvar Translater = function Translater () {\n this.trans = null;\n var trans = arguments[0];\n this.trans = trans;\n};\nTranslater.prototype.filter = function filter (seq, i) {\n var xp = seq.getOrdinate(i, 0) + this.trans.x;\n var yp = seq.getOrdinate(i, 1) + this.trans.y;\n seq.setOrdinate(i, 0, xp);\n seq.setOrdinate(i, 1, yp);\n};\nTranslater.prototype.isDone = function isDone () {\n return false\n};\nTranslater.prototype.isGeometryChanged = function isGeometryChanged () {\n return true\n};\nTranslater.prototype.interfaces_ = function interfaces_ () {\n return [CoordinateSequenceFilter]\n};\nTranslater.prototype.getClass = function getClass () {\n return Translater\n};\n\nvar SnapOverlayOp = function SnapOverlayOp (g1, g2) {\n this._geom = new Array(2).fill(null);\n this._snapTolerance = null;\n this._cbr = null;\n this._geom[0] = g1;\n this._geom[1] = g2;\n this.computeSnapTolerance();\n};\nSnapOverlayOp.prototype.selfSnap = function selfSnap (geom) {\n var snapper0 = new GeometrySnapper(geom);\n var snapGeom = snapper0.snapTo(geom, this._snapTolerance);\n return snapGeom\n};\nSnapOverlayOp.prototype.removeCommonBits = function removeCommonBits (geom) {\n this._cbr = new CommonBitsRemover();\n this._cbr.add(geom[0]);\n this._cbr.add(geom[1]);\n var remGeom = new Array(2).fill(null);\n remGeom[0] = this._cbr.removeCommonBits(geom[0].copy());\n remGeom[1] = this._cbr.removeCommonBits(geom[1].copy());\n return remGeom\n};\nSnapOverlayOp.prototype.prepareResult = function prepareResult (geom) {\n this._cbr.addCommonBits(geom);\n return geom\n};\nSnapOverlayOp.prototype.getResultGeometry = function getResultGeometry (opCode) {\n var prepGeom = this.snap(this._geom);\n var result = OverlayOp.overlayOp(prepGeom[0], prepGeom[1], opCode);\n return this.prepareResult(result)\n};\nSnapOverlayOp.prototype.checkValid = function checkValid (g) {\n if (!g.isValid()) {\n System.out.println('Snapped geometry is invalid');\n }\n};\nSnapOverlayOp.prototype.computeSnapTolerance = function computeSnapTolerance () {\n this._snapTolerance = GeometrySnapper.computeOverlaySnapTolerance(this._geom[0], this._geom[1]);\n};\nSnapOverlayOp.prototype.snap = function snap (geom) {\n var remGeom = this.removeCommonBits(geom);\n var snapGeom = GeometrySnapper.snap(remGeom[0], remGeom[1], this._snapTolerance);\n return snapGeom\n};\nSnapOverlayOp.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nSnapOverlayOp.prototype.getClass = function getClass () {\n return SnapOverlayOp\n};\nSnapOverlayOp.overlayOp = function overlayOp (g0, g1, opCode) {\n var op = new SnapOverlayOp(g0, g1);\n return op.getResultGeometry(opCode)\n};\nSnapOverlayOp.union = function union (g0, g1) {\n return SnapOverlayOp.overlayOp(g0, g1, OverlayOp.UNION)\n};\nSnapOverlayOp.intersection = function intersection (g0, g1) {\n return SnapOverlayOp.overlayOp(g0, g1, OverlayOp.INTERSECTION)\n};\nSnapOverlayOp.symDifference = function symDifference (g0, g1) {\n return SnapOverlayOp.overlayOp(g0, g1, OverlayOp.SYMDIFFERENCE)\n};\nSnapOverlayOp.difference = function difference (g0, g1) {\n return SnapOverlayOp.overlayOp(g0, g1, OverlayOp.DIFFERENCE)\n};\n\nvar SnapIfNeededOverlayOp = function SnapIfNeededOverlayOp (g1, g2) {\n this._geom = new Array(2).fill(null);\n this._geom[0] = g1;\n this._geom[1] = g2;\n};\nSnapIfNeededOverlayOp.prototype.getResultGeometry = function getResultGeometry (opCode) {\n var result = null;\n var isSuccess = false;\n var savedException = null;\n try {\n result = OverlayOp.overlayOp(this._geom[0], this._geom[1], opCode);\n var isValid = true;\n if (isValid) { isSuccess = true; }\n } catch (ex) {\n if (ex instanceof RuntimeException) {\n savedException = ex;\n } else { throw ex }\n } finally {}\n if (!isSuccess) {\n try {\n result = SnapOverlayOp.overlayOp(this._geom[0], this._geom[1], opCode);\n } catch (ex) {\n if (ex instanceof RuntimeException) {\n throw savedException\n } else { throw ex }\n } finally {}\n }\n return result\n};\nSnapIfNeededOverlayOp.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nSnapIfNeededOverlayOp.prototype.getClass = function getClass () {\n return SnapIfNeededOverlayOp\n};\nSnapIfNeededOverlayOp.overlayOp = function overlayOp (g0, g1, opCode) {\n var op = new SnapIfNeededOverlayOp(g0, g1);\n return op.getResultGeometry(opCode)\n};\nSnapIfNeededOverlayOp.union = function union (g0, g1) {\n return SnapIfNeededOverlayOp.overlayOp(g0, g1, OverlayOp.UNION)\n};\nSnapIfNeededOverlayOp.intersection = function intersection (g0, g1) {\n return SnapIfNeededOverlayOp.overlayOp(g0, g1, OverlayOp.INTERSECTION)\n};\nSnapIfNeededOverlayOp.symDifference = function symDifference (g0, g1) {\n return SnapIfNeededOverlayOp.overlayOp(g0, g1, OverlayOp.SYMDIFFERENCE)\n};\nSnapIfNeededOverlayOp.difference = function difference (g0, g1) {\n return SnapIfNeededOverlayOp.overlayOp(g0, g1, OverlayOp.DIFFERENCE)\n};\n\nvar MonotoneChain$2 = function MonotoneChain () {\n this.mce = null;\n this.chainIndex = null;\n var mce = arguments[0];\n var chainIndex = arguments[1];\n this.mce = mce;\n this.chainIndex = chainIndex;\n};\nMonotoneChain$2.prototype.computeIntersections = function computeIntersections (mc, si) {\n this.mce.computeIntersectsForChain(this.chainIndex, mc.mce, mc.chainIndex, si);\n};\nMonotoneChain$2.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nMonotoneChain$2.prototype.getClass = function getClass () {\n return MonotoneChain$2\n};\n\nvar SweepLineEvent = function SweepLineEvent () {\n this._label = null;\n this._xValue = null;\n this._eventType = null;\n this._insertEvent = null;\n this._deleteEventIndex = null;\n this._obj = null;\n if (arguments.length === 2) {\n var x = arguments[0];\n var insertEvent = arguments[1];\n this._eventType = SweepLineEvent.DELETE;\n this._xValue = x;\n this._insertEvent = insertEvent;\n } else if (arguments.length === 3) {\n var label = arguments[0];\n var x$1 = arguments[1];\n var obj = arguments[2];\n this._eventType = SweepLineEvent.INSERT;\n this._label = label;\n this._xValue = x$1;\n this._obj = obj;\n }\n};\n\nvar staticAccessors$43 = { INSERT: { configurable: true },DELETE: { configurable: true } };\nSweepLineEvent.prototype.isDelete = function isDelete () {\n return this._eventType === SweepLineEvent.DELETE\n};\nSweepLineEvent.prototype.setDeleteEventIndex = function setDeleteEventIndex (deleteEventIndex) {\n this._deleteEventIndex = deleteEventIndex;\n};\nSweepLineEvent.prototype.getObject = function getObject () {\n return this._obj\n};\nSweepLineEvent.prototype.compareTo = function compareTo (o) {\n var pe = o;\n if (this._xValue < pe._xValue) { return -1 }\n if (this._xValue > pe._xValue) { return 1 }\n if (this._eventType < pe._eventType) { return -1 }\n if (this._eventType > pe._eventType) { return 1 }\n return 0\n};\nSweepLineEvent.prototype.getInsertEvent = function getInsertEvent () {\n return this._insertEvent\n};\nSweepLineEvent.prototype.isInsert = function isInsert () {\n return this._eventType === SweepLineEvent.INSERT\n};\nSweepLineEvent.prototype.isSameLabel = function isSameLabel (ev) {\n if (this._label === null) { return false }\n return this._label === ev._label\n};\nSweepLineEvent.prototype.getDeleteEventIndex = function getDeleteEventIndex () {\n return this._deleteEventIndex\n};\nSweepLineEvent.prototype.interfaces_ = function interfaces_ () {\n return [Comparable]\n};\nSweepLineEvent.prototype.getClass = function getClass () {\n return SweepLineEvent\n};\nstaticAccessors$43.INSERT.get = function () { return 1 };\nstaticAccessors$43.DELETE.get = function () { return 2 };\n\nObject.defineProperties( SweepLineEvent, staticAccessors$43 );\n\nvar EdgeSetIntersector = function EdgeSetIntersector () {};\n\nEdgeSetIntersector.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nEdgeSetIntersector.prototype.getClass = function getClass () {\n return EdgeSetIntersector\n};\n\nvar SegmentIntersector$2 = function SegmentIntersector () {\n this._hasIntersection = false;\n this._hasProper = false;\n this._hasProperInterior = false;\n this._properIntersectionPoint = null;\n this._li = null;\n this._includeProper = null;\n this._recordIsolated = null;\n this._isSelfIntersection = null;\n this._numIntersections = 0;\n this.numTests = 0;\n this._bdyNodes = null;\n this._isDone = false;\n this._isDoneWhenProperInt = false;\n var li = arguments[0];\n var includeProper = arguments[1];\n var recordIsolated = arguments[2];\n this._li = li;\n this._includeProper = includeProper;\n this._recordIsolated = recordIsolated;\n};\nSegmentIntersector$2.prototype.isTrivialIntersection = function isTrivialIntersection (e0, segIndex0, e1, segIndex1) {\n if (e0 === e1) {\n if (this._li.getIntersectionNum() === 1) {\n if (SegmentIntersector$2.isAdjacentSegments(segIndex0, segIndex1)) { return true }\n if (e0.isClosed()) {\n var maxSegIndex = e0.getNumPoints() - 1;\n if ((segIndex0 === 0 && segIndex1 === maxSegIndex) ||\n (segIndex1 === 0 && segIndex0 === maxSegIndex)) {\n return true\n }\n }\n }\n }\n return false\n};\nSegmentIntersector$2.prototype.getProperIntersectionPoint = function getProperIntersectionPoint () {\n return this._properIntersectionPoint\n};\nSegmentIntersector$2.prototype.setIsDoneIfProperInt = function setIsDoneIfProperInt (isDoneWhenProperInt) {\n this._isDoneWhenProperInt = isDoneWhenProperInt;\n};\nSegmentIntersector$2.prototype.hasProperInteriorIntersection = function hasProperInteriorIntersection () {\n return this._hasProperInterior\n};\nSegmentIntersector$2.prototype.isBoundaryPointInternal = function isBoundaryPointInternal (li, bdyNodes) {\n for (var i = bdyNodes.iterator(); i.hasNext();) {\n var node = i.next();\n var pt = node.getCoordinate();\n if (li.isIntersection(pt)) { return true }\n }\n return false\n};\nSegmentIntersector$2.prototype.hasProperIntersection = function hasProperIntersection () {\n return this._hasProper\n};\nSegmentIntersector$2.prototype.hasIntersection = function hasIntersection () {\n return this._hasIntersection\n};\nSegmentIntersector$2.prototype.isDone = function isDone () {\n return this._isDone\n};\nSegmentIntersector$2.prototype.isBoundaryPoint = function isBoundaryPoint (li, bdyNodes) {\n if (bdyNodes === null) { return false }\n if (this.isBoundaryPointInternal(li, bdyNodes[0])) { return true }\n if (this.isBoundaryPointInternal(li, bdyNodes[1])) { return true }\n return false\n};\nSegmentIntersector$2.prototype.setBoundaryNodes = function setBoundaryNodes (bdyNodes0, bdyNodes1) {\n this._bdyNodes = new Array(2).fill(null);\n this._bdyNodes[0] = bdyNodes0;\n this._bdyNodes[1] = bdyNodes1;\n};\nSegmentIntersector$2.prototype.addIntersections = function addIntersections (e0, segIndex0, e1, segIndex1) {\n if (e0 === e1 && segIndex0 === segIndex1) { return null }\n this.numTests++;\n var p00 = e0.getCoordinates()[segIndex0];\n var p01 = e0.getCoordinates()[segIndex0 + 1];\n var p10 = e1.getCoordinates()[segIndex1];\n var p11 = e1.getCoordinates()[segIndex1 + 1];\n this._li.computeIntersection(p00, p01, p10, p11);\n if (this._li.hasIntersection()) {\n if (this._recordIsolated) {\n e0.setIsolated(false);\n e1.setIsolated(false);\n }\n this._numIntersections++;\n if (!this.isTrivialIntersection(e0, segIndex0, e1, segIndex1)) {\n this._hasIntersection = true;\n if (this._includeProper || !this._li.isProper()) {\n e0.addIntersections(this._li, segIndex0, 0);\n e1.addIntersections(this._li, segIndex1, 1);\n }\n if (this._li.isProper()) {\n this._properIntersectionPoint = this._li.getIntersection(0).copy();\n this._hasProper = true;\n if (this._isDoneWhenProperInt) {\n this._isDone = true;\n }\n if (!this.isBoundaryPoint(this._li, this._bdyNodes)) { this._hasProperInterior = true; }\n }\n }\n }\n};\nSegmentIntersector$2.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nSegmentIntersector$2.prototype.getClass = function getClass () {\n return SegmentIntersector$2\n};\nSegmentIntersector$2.isAdjacentSegments = function isAdjacentSegments (i1, i2) {\n return Math.abs(i1 - i2) === 1\n};\n\nvar SimpleMCSweepLineIntersector = (function (EdgeSetIntersector$$1) {\n function SimpleMCSweepLineIntersector () {\n EdgeSetIntersector$$1.call(this);\n this.events = new ArrayList();\n this.nOverlaps = null;\n }\n\n if ( EdgeSetIntersector$$1 ) SimpleMCSweepLineIntersector.__proto__ = EdgeSetIntersector$$1;\n SimpleMCSweepLineIntersector.prototype = Object.create( EdgeSetIntersector$$1 && EdgeSetIntersector$$1.prototype );\n SimpleMCSweepLineIntersector.prototype.constructor = SimpleMCSweepLineIntersector;\n SimpleMCSweepLineIntersector.prototype.prepareEvents = function prepareEvents () {\n var this$1 = this;\n\n Collections.sort(this.events);\n for (var i = 0; i < this.events.size(); i++) {\n var ev = this$1.events.get(i);\n if (ev.isDelete()) {\n ev.getInsertEvent().setDeleteEventIndex(i);\n }\n }\n };\n SimpleMCSweepLineIntersector.prototype.computeIntersections = function computeIntersections () {\n var this$1 = this;\n\n if (arguments.length === 1) {\n var si = arguments[0];\n this.nOverlaps = 0;\n this.prepareEvents();\n for (var i = 0; i < this.events.size(); i++) {\n var ev = this$1.events.get(i);\n if (ev.isInsert()) {\n this$1.processOverlaps(i, ev.getDeleteEventIndex(), ev, si);\n }\n if (si.isDone()) {\n break\n }\n }\n } else if (arguments.length === 3) {\n if (arguments[2] instanceof SegmentIntersector$2 && (hasInterface(arguments[0], List) && hasInterface(arguments[1], List))) {\n var edges0 = arguments[0];\n var edges1 = arguments[1];\n var si$1 = arguments[2];\n this.addEdges(edges0, edges0);\n this.addEdges(edges1, edges1);\n this.computeIntersections(si$1);\n } else if (typeof arguments[2] === 'boolean' && (hasInterface(arguments[0], List) && arguments[1] instanceof SegmentIntersector$2)) {\n var edges = arguments[0];\n var si$2 = arguments[1];\n var testAllSegments = arguments[2];\n if (testAllSegments) { this.addEdges(edges, null); } else { this.addEdges(edges); }\n this.computeIntersections(si$2);\n }\n }\n };\n SimpleMCSweepLineIntersector.prototype.addEdge = function addEdge (edge, edgeSet) {\n var this$1 = this;\n\n var mce = edge.getMonotoneChainEdge();\n var startIndex = mce.getStartIndexes();\n for (var i = 0; i < startIndex.length - 1; i++) {\n var mc = new MonotoneChain$2(mce, i);\n var insertEvent = new SweepLineEvent(edgeSet, mce.getMinX(i), mc);\n this$1.events.add(insertEvent);\n this$1.events.add(new SweepLineEvent(mce.getMaxX(i), insertEvent));\n }\n };\n SimpleMCSweepLineIntersector.prototype.processOverlaps = function processOverlaps (start, end, ev0, si) {\n var this$1 = this;\n\n var mc0 = ev0.getObject();\n for (var i = start; i < end; i++) {\n var ev1 = this$1.events.get(i);\n if (ev1.isInsert()) {\n var mc1 = ev1.getObject();\n if (!ev0.isSameLabel(ev1)) {\n mc0.computeIntersections(mc1, si);\n this$1.nOverlaps++;\n }\n }\n }\n };\n SimpleMCSweepLineIntersector.prototype.addEdges = function addEdges () {\n var this$1 = this;\n\n if (arguments.length === 1) {\n var edges = arguments[0];\n for (var i = edges.iterator(); i.hasNext();) {\n var edge = i.next();\n this$1.addEdge(edge, edge);\n }\n } else if (arguments.length === 2) {\n var edges$1 = arguments[0];\n var edgeSet = arguments[1];\n for (var i$1 = edges$1.iterator(); i$1.hasNext();) {\n var edge$1 = i$1.next();\n this$1.addEdge(edge$1, edgeSet);\n }\n }\n };\n SimpleMCSweepLineIntersector.prototype.interfaces_ = function interfaces_ () {\n return []\n };\n SimpleMCSweepLineIntersector.prototype.getClass = function getClass () {\n return SimpleMCSweepLineIntersector\n };\n\n return SimpleMCSweepLineIntersector;\n}(EdgeSetIntersector));\n\nvar IntervalRTreeNode = function IntervalRTreeNode () {\n this._min = Double.POSITIVE_INFINITY;\n this._max = Double.NEGATIVE_INFINITY;\n};\n\nvar staticAccessors$45 = { NodeComparator: { configurable: true } };\nIntervalRTreeNode.prototype.getMin = function getMin () {\n return this._min\n};\nIntervalRTreeNode.prototype.intersects = function intersects (queryMin, queryMax) {\n if (this._min > queryMax || this._max < queryMin) { return false }\n return true\n};\nIntervalRTreeNode.prototype.getMax = function getMax () {\n return this._max\n};\nIntervalRTreeNode.prototype.toString = function toString () {\n return WKTWriter.toLineString(new Coordinate(this._min, 0), new Coordinate(this._max, 0))\n};\nIntervalRTreeNode.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nIntervalRTreeNode.prototype.getClass = function getClass () {\n return IntervalRTreeNode\n};\nstaticAccessors$45.NodeComparator.get = function () { return NodeComparator };\n\nObject.defineProperties( IntervalRTreeNode, staticAccessors$45 );\n\nvar NodeComparator = function NodeComparator () {};\n\nNodeComparator.prototype.compare = function compare (o1, o2) {\n var n1 = o1;\n var n2 = o2;\n var mid1 = (n1._min + n1._max) / 2;\n var mid2 = (n2._min + n2._max) / 2;\n if (mid1 < mid2) { return -1 }\n if (mid1 > mid2) { return 1 }\n return 0\n};\nNodeComparator.prototype.interfaces_ = function interfaces_ () {\n return [Comparator]\n};\nNodeComparator.prototype.getClass = function getClass () {\n return NodeComparator\n};\n\nvar IntervalRTreeLeafNode = (function (IntervalRTreeNode$$1) {\n function IntervalRTreeLeafNode () {\n IntervalRTreeNode$$1.call(this);\n this._item = null;\n var min = arguments[0];\n var max = arguments[1];\n var item = arguments[2];\n this._min = min;\n this._max = max;\n this._item = item;\n }\n\n if ( IntervalRTreeNode$$1 ) IntervalRTreeLeafNode.__proto__ = IntervalRTreeNode$$1;\n IntervalRTreeLeafNode.prototype = Object.create( IntervalRTreeNode$$1 && IntervalRTreeNode$$1.prototype );\n IntervalRTreeLeafNode.prototype.constructor = IntervalRTreeLeafNode;\n IntervalRTreeLeafNode.prototype.query = function query (queryMin, queryMax, visitor) {\n if (!this.intersects(queryMin, queryMax)) { return null }\n visitor.visitItem(this._item);\n };\n IntervalRTreeLeafNode.prototype.interfaces_ = function interfaces_ () {\n return []\n };\n IntervalRTreeLeafNode.prototype.getClass = function getClass () {\n return IntervalRTreeLeafNode\n };\n\n return IntervalRTreeLeafNode;\n}(IntervalRTreeNode));\n\nvar IntervalRTreeBranchNode = (function (IntervalRTreeNode$$1) {\n function IntervalRTreeBranchNode () {\n IntervalRTreeNode$$1.call(this);\n this._node1 = null;\n this._node2 = null;\n var n1 = arguments[0];\n var n2 = arguments[1];\n this._node1 = n1;\n this._node2 = n2;\n this.buildExtent(this._node1, this._node2);\n }\n\n if ( IntervalRTreeNode$$1 ) IntervalRTreeBranchNode.__proto__ = IntervalRTreeNode$$1;\n IntervalRTreeBranchNode.prototype = Object.create( IntervalRTreeNode$$1 && IntervalRTreeNode$$1.prototype );\n IntervalRTreeBranchNode.prototype.constructor = IntervalRTreeBranchNode;\n IntervalRTreeBranchNode.prototype.buildExtent = function buildExtent (n1, n2) {\n this._min = Math.min(n1._min, n2._min);\n this._max = Math.max(n1._max, n2._max);\n };\n IntervalRTreeBranchNode.prototype.query = function query (queryMin, queryMax, visitor) {\n if (!this.intersects(queryMin, queryMax)) {\n return null\n }\n if (this._node1 !== null) { this._node1.query(queryMin, queryMax, visitor); }\n if (this._node2 !== null) { this._node2.query(queryMin, queryMax, visitor); }\n };\n IntervalRTreeBranchNode.prototype.interfaces_ = function interfaces_ () {\n return []\n };\n IntervalRTreeBranchNode.prototype.getClass = function getClass () {\n return IntervalRTreeBranchNode\n };\n\n return IntervalRTreeBranchNode;\n}(IntervalRTreeNode));\n\nvar SortedPackedIntervalRTree = function SortedPackedIntervalRTree () {\n this._leaves = new ArrayList();\n this._root = null;\n this._level = 0;\n};\nSortedPackedIntervalRTree.prototype.buildTree = function buildTree () {\n var this$1 = this;\n\n Collections.sort(this._leaves, new IntervalRTreeNode.NodeComparator());\n var src = this._leaves;\n var temp = null;\n var dest = new ArrayList();\n while (true) {\n this$1.buildLevel(src, dest);\n if (dest.size() === 1) { return dest.get(0) }\n temp = src;\n src = dest;\n dest = temp;\n }\n};\nSortedPackedIntervalRTree.prototype.insert = function insert (min, max, item) {\n if (this._root !== null) { throw new Error('Index cannot be added to once it has been queried') }\n this._leaves.add(new IntervalRTreeLeafNode(min, max, item));\n};\nSortedPackedIntervalRTree.prototype.query = function query (min, max, visitor) {\n this.init();\n this._root.query(min, max, visitor);\n};\nSortedPackedIntervalRTree.prototype.buildRoot = function buildRoot () {\n if (this._root !== null) { return null }\n this._root = this.buildTree();\n};\nSortedPackedIntervalRTree.prototype.printNode = function printNode (node) {\n System.out.println(WKTWriter.toLineString(new Coordinate(node._min, this._level), new Coordinate(node._max, this._level)));\n};\nSortedPackedIntervalRTree.prototype.init = function init () {\n if (this._root !== null) { return null }\n this.buildRoot();\n};\nSortedPackedIntervalRTree.prototype.buildLevel = function buildLevel (src, dest) {\n this._level++;\n dest.clear();\n for (var i = 0; i < src.size(); i += 2) {\n var n1 = src.get(i);\n var n2 = i + 1 < src.size() ? src.get(i) : null;\n if (n2 === null) {\n dest.add(n1);\n } else {\n var node = new IntervalRTreeBranchNode(src.get(i), src.get(i + 1));\n dest.add(node);\n }\n }\n};\nSortedPackedIntervalRTree.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nSortedPackedIntervalRTree.prototype.getClass = function getClass () {\n return SortedPackedIntervalRTree\n};\n\nvar ArrayListVisitor = function ArrayListVisitor () {\n this._items = new ArrayList();\n};\nArrayListVisitor.prototype.visitItem = function visitItem (item) {\n this._items.add(item);\n};\nArrayListVisitor.prototype.getItems = function getItems () {\n return this._items\n};\nArrayListVisitor.prototype.interfaces_ = function interfaces_ () {\n return [ItemVisitor]\n};\nArrayListVisitor.prototype.getClass = function getClass () {\n return ArrayListVisitor\n};\n\nvar IndexedPointInAreaLocator = function IndexedPointInAreaLocator () {\n this._index = null;\n var g = arguments[0];\n if (!hasInterface(g, Polygonal)) { throw new IllegalArgumentException('Argument must be Polygonal') }\n this._index = new IntervalIndexedGeometry(g);\n};\n\nvar staticAccessors$44 = { SegmentVisitor: { configurable: true },IntervalIndexedGeometry: { configurable: true } };\nIndexedPointInAreaLocator.prototype.locate = function locate (p) {\n var rcc = new RayCrossingCounter(p);\n var visitor = new SegmentVisitor(rcc);\n this._index.query(p.y, p.y, visitor);\n return rcc.getLocation()\n};\nIndexedPointInAreaLocator.prototype.interfaces_ = function interfaces_ () {\n return [PointOnGeometryLocator]\n};\nIndexedPointInAreaLocator.prototype.getClass = function getClass () {\n return IndexedPointInAreaLocator\n};\nstaticAccessors$44.SegmentVisitor.get = function () { return SegmentVisitor };\nstaticAccessors$44.IntervalIndexedGeometry.get = function () { return IntervalIndexedGeometry };\n\nObject.defineProperties( IndexedPointInAreaLocator, staticAccessors$44 );\n\nvar SegmentVisitor = function SegmentVisitor () {\n this._counter = null;\n var counter = arguments[0];\n this._counter = counter;\n};\nSegmentVisitor.prototype.visitItem = function visitItem (item) {\n var seg = item;\n this._counter.countSegment(seg.getCoordinate(0), seg.getCoordinate(1));\n};\nSegmentVisitor.prototype.interfaces_ = function interfaces_ () {\n return [ItemVisitor]\n};\nSegmentVisitor.prototype.getClass = function getClass () {\n return SegmentVisitor\n};\n\nvar IntervalIndexedGeometry = function IntervalIndexedGeometry () {\n this._index = new SortedPackedIntervalRTree();\n var geom = arguments[0];\n this.init(geom);\n};\nIntervalIndexedGeometry.prototype.init = function init (geom) {\n var this$1 = this;\n\n var lines = LinearComponentExtracter.getLines(geom);\n for (var i = lines.iterator(); i.hasNext();) {\n var line = i.next();\n var pts = line.getCoordinates();\n this$1.addLine(pts);\n }\n};\nIntervalIndexedGeometry.prototype.addLine = function addLine (pts) {\n var this$1 = this;\n\n for (var i = 1; i < pts.length; i++) {\n var seg = new LineSegment(pts[i - 1], pts[i]);\n var min = Math.min(seg.p0.y, seg.p1.y);\n var max = Math.max(seg.p0.y, seg.p1.y);\n this$1._index.insert(min, max, seg);\n }\n};\nIntervalIndexedGeometry.prototype.query = function query () {\n if (arguments.length === 2) {\n var min = arguments[0];\n var max = arguments[1];\n var visitor = new ArrayListVisitor();\n this._index.query(min, max, visitor);\n return visitor.getItems()\n } else if (arguments.length === 3) {\n var min$1 = arguments[0];\n var max$1 = arguments[1];\n var visitor$1 = arguments[2];\n this._index.query(min$1, max$1, visitor$1);\n }\n};\nIntervalIndexedGeometry.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nIntervalIndexedGeometry.prototype.getClass = function getClass () {\n return IntervalIndexedGeometry\n};\n\nvar GeometryGraph = (function (PlanarGraph$$1) {\n function GeometryGraph () {\n PlanarGraph$$1.call(this);\n this._parentGeom = null;\n this._lineEdgeMap = new HashMap();\n this._boundaryNodeRule = null;\n this._useBoundaryDeterminationRule = true;\n this._argIndex = null;\n this._boundaryNodes = null;\n this._hasTooFewPoints = false;\n this._invalidPoint = null;\n this._areaPtLocator = null;\n this._ptLocator = new PointLocator();\n if (arguments.length === 2) {\n var argIndex = arguments[0];\n var parentGeom = arguments[1];\n var boundaryNodeRule = BoundaryNodeRule.OGC_SFS_BOUNDARY_RULE;\n this._argIndex = argIndex;\n this._parentGeom = parentGeom;\n this._boundaryNodeRule = boundaryNodeRule;\n if (parentGeom !== null) {\n this.add(parentGeom);\n }\n } else if (arguments.length === 3) {\n var argIndex$1 = arguments[0];\n var parentGeom$1 = arguments[1];\n var boundaryNodeRule$1 = arguments[2];\n this._argIndex = argIndex$1;\n this._parentGeom = parentGeom$1;\n this._boundaryNodeRule = boundaryNodeRule$1;\n if (parentGeom$1 !== null) {\n this.add(parentGeom$1);\n }\n }\n }\n\n if ( PlanarGraph$$1 ) GeometryGraph.__proto__ = PlanarGraph$$1;\n GeometryGraph.prototype = Object.create( PlanarGraph$$1 && PlanarGraph$$1.prototype );\n GeometryGraph.prototype.constructor = GeometryGraph;\n GeometryGraph.prototype.insertBoundaryPoint = function insertBoundaryPoint (argIndex, coord) {\n var n = this._nodes.addNode(coord);\n var lbl = n.getLabel();\n var boundaryCount = 1;\n var loc = Location.NONE;\n loc = lbl.getLocation(argIndex, Position.ON);\n if (loc === Location.BOUNDARY) { boundaryCount++; }\n var newLoc = GeometryGraph.determineBoundary(this._boundaryNodeRule, boundaryCount);\n lbl.setLocation(argIndex, newLoc);\n };\n GeometryGraph.prototype.computeSelfNodes = function computeSelfNodes () {\n if (arguments.length === 2) {\n var li = arguments[0];\n var computeRingSelfNodes = arguments[1];\n return this.computeSelfNodes(li, computeRingSelfNodes, false)\n } else if (arguments.length === 3) {\n var li$1 = arguments[0];\n var computeRingSelfNodes$1 = arguments[1];\n var isDoneIfProperInt = arguments[2];\n var si = new SegmentIntersector$2(li$1, true, false);\n si.setIsDoneIfProperInt(isDoneIfProperInt);\n var esi = this.createEdgeSetIntersector();\n var isRings = this._parentGeom instanceof LinearRing || this._parentGeom instanceof Polygon || this._parentGeom instanceof MultiPolygon;\n var computeAllSegments = computeRingSelfNodes$1 || !isRings;\n esi.computeIntersections(this._edges, si, computeAllSegments);\n this.addSelfIntersectionNodes(this._argIndex);\n return si\n }\n };\n GeometryGraph.prototype.computeSplitEdges = function computeSplitEdges (edgelist) {\n for (var i = this._edges.iterator(); i.hasNext();) {\n var e = i.next();\n e.eiList.addSplitEdges(edgelist);\n }\n };\n GeometryGraph.prototype.computeEdgeIntersections = function computeEdgeIntersections (g, li, includeProper) {\n var si = new SegmentIntersector$2(li, includeProper, true);\n si.setBoundaryNodes(this.getBoundaryNodes(), g.getBoundaryNodes());\n var esi = this.createEdgeSetIntersector();\n esi.computeIntersections(this._edges, g._edges, si);\n return si\n };\n GeometryGraph.prototype.getGeometry = function getGeometry () {\n return this._parentGeom\n };\n GeometryGraph.prototype.getBoundaryNodeRule = function getBoundaryNodeRule () {\n return this._boundaryNodeRule\n };\n GeometryGraph.prototype.hasTooFewPoints = function hasTooFewPoints () {\n return this._hasTooFewPoints\n };\n GeometryGraph.prototype.addPoint = function addPoint () {\n if (arguments[0] instanceof Point) {\n var p = arguments[0];\n var coord = p.getCoordinate();\n this.insertPoint(this._argIndex, coord, Location.INTERIOR);\n } else if (arguments[0] instanceof Coordinate) {\n var pt = arguments[0];\n this.insertPoint(this._argIndex, pt, Location.INTERIOR);\n }\n };\n GeometryGraph.prototype.addPolygon = function addPolygon (p) {\n var this$1 = this;\n\n this.addPolygonRing(p.getExteriorRing(), Location.EXTERIOR, Location.INTERIOR);\n for (var i = 0; i < p.getNumInteriorRing(); i++) {\n var hole = p.getInteriorRingN(i);\n this$1.addPolygonRing(hole, Location.INTERIOR, Location.EXTERIOR);\n }\n };\n GeometryGraph.prototype.addEdge = function addEdge (e) {\n this.insertEdge(e);\n var coord = e.getCoordinates();\n this.insertPoint(this._argIndex, coord[0], Location.BOUNDARY);\n this.insertPoint(this._argIndex, coord[coord.length - 1], Location.BOUNDARY);\n };\n GeometryGraph.prototype.addLineString = function addLineString (line) {\n var coord = CoordinateArrays.removeRepeatedPoints(line.getCoordinates());\n if (coord.length < 2) {\n this._hasTooFewPoints = true;\n this._invalidPoint = coord[0];\n return null\n }\n var e = new Edge(coord, new Label(this._argIndex, Location.INTERIOR));\n this._lineEdgeMap.put(line, e);\n this.insertEdge(e);\n Assert.isTrue(coord.length >= 2, 'found LineString with single point');\n this.insertBoundaryPoint(this._argIndex, coord[0]);\n this.insertBoundaryPoint(this._argIndex, coord[coord.length - 1]);\n };\n GeometryGraph.prototype.getInvalidPoint = function getInvalidPoint () {\n return this._invalidPoint\n };\n GeometryGraph.prototype.getBoundaryPoints = function getBoundaryPoints () {\n var coll = this.getBoundaryNodes();\n var pts = new Array(coll.size()).fill(null);\n var i = 0;\n for (var it = coll.iterator(); it.hasNext();) {\n var node = it.next();\n pts[i++] = node.getCoordinate().copy();\n }\n return pts\n };\n GeometryGraph.prototype.getBoundaryNodes = function getBoundaryNodes () {\n if (this._boundaryNodes === null) { this._boundaryNodes = this._nodes.getBoundaryNodes(this._argIndex); }\n return this._boundaryNodes\n };\n GeometryGraph.prototype.addSelfIntersectionNode = function addSelfIntersectionNode (argIndex, coord, loc) {\n if (this.isBoundaryNode(argIndex, coord)) { return null }\n if (loc === Location.BOUNDARY && this._useBoundaryDeterminationRule) { this.insertBoundaryPoint(argIndex, coord); } else { this.insertPoint(argIndex, coord, loc); }\n };\n GeometryGraph.prototype.addPolygonRing = function addPolygonRing (lr, cwLeft, cwRight) {\n if (lr.isEmpty()) { return null }\n var coord = CoordinateArrays.removeRepeatedPoints(lr.getCoordinates());\n if (coord.length < 4) {\n this._hasTooFewPoints = true;\n this._invalidPoint = coord[0];\n return null\n }\n var left = cwLeft;\n var right = cwRight;\n if (CGAlgorithms.isCCW(coord)) {\n left = cwRight;\n right = cwLeft;\n }\n var e = new Edge(coord, new Label(this._argIndex, Location.BOUNDARY, left, right));\n this._lineEdgeMap.put(lr, e);\n this.insertEdge(e);\n this.insertPoint(this._argIndex, coord[0], Location.BOUNDARY);\n };\n GeometryGraph.prototype.insertPoint = function insertPoint (argIndex, coord, onLocation) {\n var n = this._nodes.addNode(coord);\n var lbl = n.getLabel();\n if (lbl === null) {\n n._label = new Label(argIndex, onLocation);\n } else { lbl.setLocation(argIndex, onLocation); }\n };\n GeometryGraph.prototype.createEdgeSetIntersector = function createEdgeSetIntersector () {\n return new SimpleMCSweepLineIntersector()\n };\n GeometryGraph.prototype.addSelfIntersectionNodes = function addSelfIntersectionNodes (argIndex) {\n var this$1 = this;\n\n for (var i = this._edges.iterator(); i.hasNext();) {\n var e = i.next();\n var eLoc = e.getLabel().getLocation(argIndex);\n for (var eiIt = e.eiList.iterator(); eiIt.hasNext();) {\n var ei = eiIt.next();\n this$1.addSelfIntersectionNode(argIndex, ei.coord, eLoc);\n }\n }\n };\n GeometryGraph.prototype.add = function add () {\n if (arguments.length === 1) {\n var g = arguments[0];\n if (g.isEmpty()) { return null }\n if (g instanceof MultiPolygon) { this._useBoundaryDeterminationRule = false; }\n if (g instanceof Polygon) { this.addPolygon(g); }\n else if (g instanceof LineString) { this.addLineString(g); }\n else if (g instanceof Point) { this.addPoint(g); }\n else if (g instanceof MultiPoint) { this.addCollection(g); }\n else if (g instanceof MultiLineString) { this.addCollection(g); }\n else if (g instanceof MultiPolygon) { this.addCollection(g); }\n else if (g instanceof GeometryCollection) { this.addCollection(g); }\n else { throw new Error(g.getClass().getName()) }\n } else { return PlanarGraph$$1.prototype.add.apply(this, arguments) }\n };\n GeometryGraph.prototype.addCollection = function addCollection (gc) {\n var this$1 = this;\n\n for (var i = 0; i < gc.getNumGeometries(); i++) {\n var g = gc.getGeometryN(i);\n this$1.add(g);\n }\n };\n GeometryGraph.prototype.locate = function locate (pt) {\n if (hasInterface(this._parentGeom, Polygonal) && this._parentGeom.getNumGeometries() > 50) {\n if (this._areaPtLocator === null) {\n this._areaPtLocator = new IndexedPointInAreaLocator(this._parentGeom);\n }\n return this._areaPtLocator.locate(pt)\n }\n return this._ptLocator.locate(pt, this._parentGeom)\n };\n GeometryGraph.prototype.findEdge = function findEdge () {\n if (arguments.length === 1) {\n var line = arguments[0];\n return this._lineEdgeMap.get(line)\n } else { return PlanarGraph$$1.prototype.findEdge.apply(this, arguments) }\n };\n GeometryGraph.prototype.interfaces_ = function interfaces_ () {\n return []\n };\n GeometryGraph.prototype.getClass = function getClass () {\n return GeometryGraph\n };\n GeometryGraph.determineBoundary = function determineBoundary (boundaryNodeRule, boundaryCount) {\n return boundaryNodeRule.isInBoundary(boundaryCount) ? Location.BOUNDARY : Location.INTERIOR\n };\n\n return GeometryGraph;\n}(PlanarGraph));\n\nvar GeometryGraphOp = function GeometryGraphOp () {\n this._li = new RobustLineIntersector();\n this._resultPrecisionModel = null;\n this._arg = null;\n if (arguments.length === 1) {\n var g0 = arguments[0];\n this.setComputationPrecision(g0.getPrecisionModel());\n this._arg = new Array(1).fill(null);\n this._arg[0] = new GeometryGraph(0, g0);\n } else if (arguments.length === 2) {\n var g0$1 = arguments[0];\n var g1 = arguments[1];\n var boundaryNodeRule = BoundaryNodeRule.OGC_SFS_BOUNDARY_RULE;\n if (g0$1.getPrecisionModel().compareTo(g1.getPrecisionModel()) >= 0) { this.setComputationPrecision(g0$1.getPrecisionModel()); } else { this.setComputationPrecision(g1.getPrecisionModel()); }\n this._arg = new Array(2).fill(null);\n this._arg[0] = new GeometryGraph(0, g0$1, boundaryNodeRule);\n this._arg[1] = new GeometryGraph(1, g1, boundaryNodeRule);\n } else if (arguments.length === 3) {\n var g0$2 = arguments[0];\n var g1$1 = arguments[1];\n var boundaryNodeRule$1 = arguments[2];\n if (g0$2.getPrecisionModel().compareTo(g1$1.getPrecisionModel()) >= 0) { this.setComputationPrecision(g0$2.getPrecisionModel()); } else { this.setComputationPrecision(g1$1.getPrecisionModel()); }\n this._arg = new Array(2).fill(null);\n this._arg[0] = new GeometryGraph(0, g0$2, boundaryNodeRule$1);\n this._arg[1] = new GeometryGraph(1, g1$1, boundaryNodeRule$1);\n }\n};\nGeometryGraphOp.prototype.getArgGeometry = function getArgGeometry (i) {\n return this._arg[i].getGeometry()\n};\nGeometryGraphOp.prototype.setComputationPrecision = function setComputationPrecision (pm) {\n this._resultPrecisionModel = pm;\n this._li.setPrecisionModel(this._resultPrecisionModel);\n};\nGeometryGraphOp.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nGeometryGraphOp.prototype.getClass = function getClass () {\n return GeometryGraphOp\n};\n\n// operation.geometrygraph\n\nvar GeometryMapper = function GeometryMapper () {};\n\nGeometryMapper.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nGeometryMapper.prototype.getClass = function getClass () {\n return GeometryMapper\n};\nGeometryMapper.map = function map () {\n if (arguments[0] instanceof Geometry && hasInterface(arguments[1], GeometryMapper.MapOp)) {\n var geom = arguments[0];\n var op = arguments[1];\n var mapped = new ArrayList();\n for (var i = 0; i < geom.getNumGeometries(); i++) {\n var g = op.map(geom.getGeometryN(i));\n if (g !== null) { mapped.add(g); }\n }\n return geom.getFactory().buildGeometry(mapped)\n } else if (hasInterface(arguments[0], Collection) && hasInterface(arguments[1], GeometryMapper.MapOp)) {\n var geoms = arguments[0];\n var op$1 = arguments[1];\n var mapped$1 = new ArrayList();\n for (var i$1 = geoms.iterator(); i$1.hasNext();) {\n var g$1 = i$1.next();\n var gr = op$1.map(g$1);\n if (gr !== null) { mapped$1.add(gr); }\n }\n return mapped$1\n }\n};\nGeometryMapper.MapOp = function MapOp () {};\n\nvar OverlayOp = (function (GeometryGraphOp) {\n function OverlayOp () {\n var g0 = arguments[0];\n var g1 = arguments[1];\n GeometryGraphOp.call(this, g0, g1);\n this._ptLocator = new PointLocator();\n this._geomFact = null;\n this._resultGeom = null;\n this._graph = null;\n this._edgeList = new EdgeList();\n this._resultPolyList = new ArrayList();\n this._resultLineList = new ArrayList();\n this._resultPointList = new ArrayList();\n this._graph = new PlanarGraph(new OverlayNodeFactory());\n this._geomFact = g0.getFactory();\n }\n\n if ( GeometryGraphOp ) OverlayOp.__proto__ = GeometryGraphOp;\n OverlayOp.prototype = Object.create( GeometryGraphOp && GeometryGraphOp.prototype );\n OverlayOp.prototype.constructor = OverlayOp;\n OverlayOp.prototype.insertUniqueEdge = function insertUniqueEdge (e) {\n var existingEdge = this._edgeList.findEqualEdge(e);\n if (existingEdge !== null) {\n var existingLabel = existingEdge.getLabel();\n var labelToMerge = e.getLabel();\n if (!existingEdge.isPointwiseEqual(e)) {\n labelToMerge = new Label(e.getLabel());\n labelToMerge.flip();\n }\n var depth = existingEdge.getDepth();\n if (depth.isNull()) {\n depth.add(existingLabel);\n }\n depth.add(labelToMerge);\n existingLabel.merge(labelToMerge);\n } else {\n this._edgeList.add(e);\n }\n };\n OverlayOp.prototype.getGraph = function getGraph () {\n return this._graph\n };\n OverlayOp.prototype.cancelDuplicateResultEdges = function cancelDuplicateResultEdges () {\n for (var it = this._graph.getEdgeEnds().iterator(); it.hasNext();) {\n var de = it.next();\n var sym = de.getSym();\n if (de.isInResult() && sym.isInResult()) {\n de.setInResult(false);\n sym.setInResult(false);\n }\n }\n };\n OverlayOp.prototype.isCoveredByLA = function isCoveredByLA (coord) {\n if (this.isCovered(coord, this._resultLineList)) { return true }\n if (this.isCovered(coord, this._resultPolyList)) { return true }\n return false\n };\n OverlayOp.prototype.computeGeometry = function computeGeometry (resultPointList, resultLineList, resultPolyList, opcode) {\n var geomList = new ArrayList();\n geomList.addAll(resultPointList);\n geomList.addAll(resultLineList);\n geomList.addAll(resultPolyList);\n if (geomList.isEmpty()) { return OverlayOp.createEmptyResult(opcode, this._arg[0].getGeometry(), this._arg[1].getGeometry(), this._geomFact) }\n return this._geomFact.buildGeometry(geomList)\n };\n OverlayOp.prototype.mergeSymLabels = function mergeSymLabels () {\n for (var nodeit = this._graph.getNodes().iterator(); nodeit.hasNext();) {\n var node = nodeit.next();\n node.getEdges().mergeSymLabels();\n }\n };\n OverlayOp.prototype.isCovered = function isCovered (coord, geomList) {\n var this$1 = this;\n\n for (var it = geomList.iterator(); it.hasNext();) {\n var geom = it.next();\n var loc = this$1._ptLocator.locate(coord, geom);\n if (loc !== Location.EXTERIOR) { return true }\n }\n return false\n };\n OverlayOp.prototype.replaceCollapsedEdges = function replaceCollapsedEdges () {\n var newEdges = new ArrayList();\n for (var it = this._edgeList.iterator(); it.hasNext();) {\n var e = it.next();\n if (e.isCollapsed()) {\n it.remove();\n newEdges.add(e.getCollapsedEdge());\n }\n }\n this._edgeList.addAll(newEdges);\n };\n OverlayOp.prototype.updateNodeLabelling = function updateNodeLabelling () {\n for (var nodeit = this._graph.getNodes().iterator(); nodeit.hasNext();) {\n var node = nodeit.next();\n var lbl = node.getEdges().getLabel();\n node.getLabel().merge(lbl);\n }\n };\n OverlayOp.prototype.getResultGeometry = function getResultGeometry (overlayOpCode) {\n this.computeOverlay(overlayOpCode);\n return this._resultGeom\n };\n OverlayOp.prototype.insertUniqueEdges = function insertUniqueEdges (edges) {\n var this$1 = this;\n\n for (var i = edges.iterator(); i.hasNext();) {\n var e = i.next();\n this$1.insertUniqueEdge(e);\n }\n };\n OverlayOp.prototype.computeOverlay = function computeOverlay (opCode) {\n this.copyPoints(0);\n this.copyPoints(1);\n this._arg[0].computeSelfNodes(this._li, false);\n this._arg[1].computeSelfNodes(this._li, false);\n this._arg[0].computeEdgeIntersections(this._arg[1], this._li, true);\n var baseSplitEdges = new ArrayList();\n this._arg[0].computeSplitEdges(baseSplitEdges);\n this._arg[1].computeSplitEdges(baseSplitEdges);\n // const splitEdges = baseSplitEdges\n this.insertUniqueEdges(baseSplitEdges);\n this.computeLabelsFromDepths();\n this.replaceCollapsedEdges();\n EdgeNodingValidator.checkValid(this._edgeList.getEdges());\n this._graph.addEdges(this._edgeList.getEdges());\n this.computeLabelling();\n this.labelIncompleteNodes();\n this.findResultAreaEdges(opCode);\n this.cancelDuplicateResultEdges();\n var polyBuilder = new PolygonBuilder(this._geomFact);\n polyBuilder.add(this._graph);\n this._resultPolyList = polyBuilder.getPolygons();\n var lineBuilder = new LineBuilder(this, this._geomFact, this._ptLocator);\n this._resultLineList = lineBuilder.build(opCode);\n var pointBuilder = new PointBuilder(this, this._geomFact, this._ptLocator);\n this._resultPointList = pointBuilder.build(opCode);\n this._resultGeom = this.computeGeometry(this._resultPointList, this._resultLineList, this._resultPolyList, opCode);\n };\n OverlayOp.prototype.labelIncompleteNode = function labelIncompleteNode (n, targetIndex) {\n var loc = this._ptLocator.locate(n.getCoordinate(), this._arg[targetIndex].getGeometry());\n n.getLabel().setLocation(targetIndex, loc);\n };\n OverlayOp.prototype.copyPoints = function copyPoints (argIndex) {\n var this$1 = this;\n\n for (var i = this._arg[argIndex].getNodeIterator(); i.hasNext();) {\n var graphNode = i.next();\n var newNode = this$1._graph.addNode(graphNode.getCoordinate());\n newNode.setLabel(argIndex, graphNode.getLabel().getLocation(argIndex));\n }\n };\n OverlayOp.prototype.findResultAreaEdges = function findResultAreaEdges (opCode) {\n for (var it = this._graph.getEdgeEnds().iterator(); it.hasNext();) {\n var de = it.next();\n var label = de.getLabel();\n if (label.isArea() && !de.isInteriorAreaEdge() && OverlayOp.isResultOfOp(label.getLocation(0, Position.RIGHT), label.getLocation(1, Position.RIGHT), opCode)) {\n de.setInResult(true);\n }\n }\n };\n OverlayOp.prototype.computeLabelsFromDepths = function computeLabelsFromDepths () {\n for (var it = this._edgeList.iterator(); it.hasNext();) {\n var e = it.next();\n var lbl = e.getLabel();\n var depth = e.getDepth();\n if (!depth.isNull()) {\n depth.normalize();\n for (var i = 0; i < 2; i++) {\n if (!lbl.isNull(i) && lbl.isArea() && !depth.isNull(i)) {\n if (depth.getDelta(i) === 0) {\n lbl.toLine(i);\n } else {\n Assert.isTrue(!depth.isNull(i, Position.LEFT), 'depth of LEFT side has not been initialized');\n lbl.setLocation(i, Position.LEFT, depth.getLocation(i, Position.LEFT));\n Assert.isTrue(!depth.isNull(i, Position.RIGHT), 'depth of RIGHT side has not been initialized');\n lbl.setLocation(i, Position.RIGHT, depth.getLocation(i, Position.RIGHT));\n }\n }\n }\n }\n }\n };\n OverlayOp.prototype.computeLabelling = function computeLabelling () {\n var this$1 = this;\n\n for (var nodeit = this._graph.getNodes().iterator(); nodeit.hasNext();) {\n var node = nodeit.next();\n node.getEdges().computeLabelling(this$1._arg);\n }\n this.mergeSymLabels();\n this.updateNodeLabelling();\n };\n OverlayOp.prototype.labelIncompleteNodes = function labelIncompleteNodes () {\n var this$1 = this;\n\n // let nodeCount = 0\n for (var ni = this._graph.getNodes().iterator(); ni.hasNext();) {\n var n = ni.next();\n var label = n.getLabel();\n if (n.isIsolated()) {\n // nodeCount++\n if (label.isNull(0)) { this$1.labelIncompleteNode(n, 0); } else { this$1.labelIncompleteNode(n, 1); }\n }\n n.getEdges().updateLabelling(label);\n }\n };\n OverlayOp.prototype.isCoveredByA = function isCoveredByA (coord) {\n if (this.isCovered(coord, this._resultPolyList)) { return true }\n return false\n };\n OverlayOp.prototype.interfaces_ = function interfaces_ () {\n return []\n };\n OverlayOp.prototype.getClass = function getClass () {\n return OverlayOp\n };\n\n return OverlayOp;\n}(GeometryGraphOp));\n\nOverlayOp.overlayOp = function (geom0, geom1, opCode) {\n var gov = new OverlayOp(geom0, geom1);\n var geomOv = gov.getResultGeometry(opCode);\n return geomOv\n};\nOverlayOp.intersection = function (g, other) {\n if (g.isEmpty() || other.isEmpty()) { return OverlayOp.createEmptyResult(OverlayOp.INTERSECTION, g, other, g.getFactory()) }\n if (g.isGeometryCollection()) {\n var g2 = other;\n return GeometryCollectionMapper.map(g, {\n interfaces_: function () {\n return [GeometryMapper.MapOp]\n },\n map: function (g) {\n return g.intersection(g2)\n }\n })\n }\n g.checkNotGeometryCollection(g);\n g.checkNotGeometryCollection(other);\n return SnapIfNeededOverlayOp.overlayOp(g, other, OverlayOp.INTERSECTION)\n};\nOverlayOp.symDifference = function (g, other) {\n if (g.isEmpty() || other.isEmpty()) {\n if (g.isEmpty() && other.isEmpty()) { return OverlayOp.createEmptyResult(OverlayOp.SYMDIFFERENCE, g, other, g.getFactory()) }\n if (g.isEmpty()) { return other.copy() }\n if (other.isEmpty()) { return g.copy() }\n }\n g.checkNotGeometryCollection(g);\n g.checkNotGeometryCollection(other);\n return SnapIfNeededOverlayOp.overlayOp(g, other, OverlayOp.SYMDIFFERENCE)\n};\nOverlayOp.resultDimension = function (opCode, g0, g1) {\n var dim0 = g0.getDimension();\n var dim1 = g1.getDimension();\n var resultDimension = -1;\n switch (opCode) {\n case OverlayOp.INTERSECTION:\n resultDimension = Math.min(dim0, dim1);\n break\n case OverlayOp.UNION:\n resultDimension = Math.max(dim0, dim1);\n break\n case OverlayOp.DIFFERENCE:\n resultDimension = dim0;\n break\n case OverlayOp.SYMDIFFERENCE:\n resultDimension = Math.max(dim0, dim1);\n break\n default:\n }\n return resultDimension\n};\nOverlayOp.createEmptyResult = function (overlayOpCode, a, b, geomFact) {\n var result = null;\n switch (OverlayOp.resultDimension(overlayOpCode, a, b)) {\n case -1:\n result = geomFact.createGeometryCollection(new Array(0).fill(null));\n break\n case 0:\n result = geomFact.createPoint();\n break\n case 1:\n result = geomFact.createLineString();\n break\n case 2:\n result = geomFact.createPolygon();\n break\n default:\n }\n return result\n};\nOverlayOp.difference = function (g, other) {\n if (g.isEmpty()) { return OverlayOp.createEmptyResult(OverlayOp.DIFFERENCE, g, other, g.getFactory()) }\n if (other.isEmpty()) { return g.copy() }\n g.checkNotGeometryCollection(g);\n g.checkNotGeometryCollection(other);\n return SnapIfNeededOverlayOp.overlayOp(g, other, OverlayOp.DIFFERENCE)\n};\nOverlayOp.isResultOfOp = function () {\n if (arguments.length === 2) {\n var label = arguments[0];\n var opCode = arguments[1];\n var loc0 = label.getLocation(0);\n var loc1 = label.getLocation(1);\n return OverlayOp.isResultOfOp(loc0, loc1, opCode)\n } else if (arguments.length === 3) {\n var loc0$1 = arguments[0];\n var loc1$1 = arguments[1];\n var overlayOpCode = arguments[2];\n if (loc0$1 === Location.BOUNDARY) { loc0$1 = Location.INTERIOR; }\n if (loc1$1 === Location.BOUNDARY) { loc1$1 = Location.INTERIOR; }\n switch (overlayOpCode) {\n case OverlayOp.INTERSECTION:\n return loc0$1 === Location.INTERIOR && loc1$1 === Location.INTERIOR\n case OverlayOp.UNION:\n return loc0$1 === Location.INTERIOR || loc1$1 === Location.INTERIOR\n case OverlayOp.DIFFERENCE:\n return loc0$1 === Location.INTERIOR && loc1$1 !== Location.INTERIOR\n case OverlayOp.SYMDIFFERENCE:\n return (loc0$1 === Location.INTERIOR && loc1$1 !== Location.INTERIOR) || (loc0$1 !== Location.INTERIOR && loc1$1 === Location.INTERIOR)\n default:\n }\n return false\n }\n};\nOverlayOp.INTERSECTION = 1;\nOverlayOp.UNION = 2;\nOverlayOp.DIFFERENCE = 3;\nOverlayOp.SYMDIFFERENCE = 4;\n\nvar FuzzyPointLocator = function FuzzyPointLocator () {\n this._g = null;\n this._boundaryDistanceTolerance = null;\n this._linework = null;\n this._ptLocator = new PointLocator();\n this._seg = new LineSegment();\n var g = arguments[0];\n var boundaryDistanceTolerance = arguments[1];\n this._g = g;\n this._boundaryDistanceTolerance = boundaryDistanceTolerance;\n this._linework = this.extractLinework(g);\n};\nFuzzyPointLocator.prototype.isWithinToleranceOfBoundary = function isWithinToleranceOfBoundary (pt) {\n var this$1 = this;\n\n for (var i = 0; i < this._linework.getNumGeometries(); i++) {\n var line = this$1._linework.getGeometryN(i);\n var seq = line.getCoordinateSequence();\n for (var j = 0; j < seq.size() - 1; j++) {\n seq.getCoordinate(j, this$1._seg.p0);\n seq.getCoordinate(j + 1, this$1._seg.p1);\n var dist = this$1._seg.distance(pt);\n if (dist <= this$1._boundaryDistanceTolerance) { return true }\n }\n }\n return false\n};\nFuzzyPointLocator.prototype.getLocation = function getLocation (pt) {\n if (this.isWithinToleranceOfBoundary(pt)) { return Location.BOUNDARY }\n return this._ptLocator.locate(pt, this._g)\n};\nFuzzyPointLocator.prototype.extractLinework = function extractLinework (g) {\n var extracter = new PolygonalLineworkExtracter();\n g.apply(extracter);\n var linework = extracter.getLinework();\n var lines = GeometryFactory.toLineStringArray(linework);\n return g.getFactory().createMultiLineString(lines)\n};\nFuzzyPointLocator.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nFuzzyPointLocator.prototype.getClass = function getClass () {\n return FuzzyPointLocator\n};\n\nvar PolygonalLineworkExtracter = function PolygonalLineworkExtracter () {\n this._linework = null;\n this._linework = new ArrayList();\n};\nPolygonalLineworkExtracter.prototype.getLinework = function getLinework () {\n return this._linework\n};\nPolygonalLineworkExtracter.prototype.filter = function filter (g) {\n var this$1 = this;\n\n if (g instanceof Polygon) {\n var poly = g;\n this._linework.add(poly.getExteriorRing());\n for (var i = 0; i < poly.getNumInteriorRing(); i++) {\n this$1._linework.add(poly.getInteriorRingN(i));\n }\n }\n};\nPolygonalLineworkExtracter.prototype.interfaces_ = function interfaces_ () {\n return [GeometryFilter]\n};\nPolygonalLineworkExtracter.prototype.getClass = function getClass () {\n return PolygonalLineworkExtracter\n};\n\nvar OffsetPointGenerator = function OffsetPointGenerator () {\n this._g = null;\n this._doLeft = true;\n this._doRight = true;\n var g = arguments[0];\n this._g = g;\n};\nOffsetPointGenerator.prototype.extractPoints = function extractPoints (line, offsetDistance, offsetPts) {\n var this$1 = this;\n\n var pts = line.getCoordinates();\n for (var i = 0; i < pts.length - 1; i++) {\n this$1.computeOffsetPoints(pts[i], pts[i + 1], offsetDistance, offsetPts);\n }\n};\nOffsetPointGenerator.prototype.setSidesToGenerate = function setSidesToGenerate (doLeft, doRight) {\n this._doLeft = doLeft;\n this._doRight = doRight;\n};\nOffsetPointGenerator.prototype.getPoints = function getPoints (offsetDistance) {\n var this$1 = this;\n\n var offsetPts = new ArrayList();\n var lines = LinearComponentExtracter.getLines(this._g);\n for (var i = lines.iterator(); i.hasNext();) {\n var line = i.next();\n this$1.extractPoints(line, offsetDistance, offsetPts);\n }\n return offsetPts\n};\nOffsetPointGenerator.prototype.computeOffsetPoints = function computeOffsetPoints (p0, p1, offsetDistance, offsetPts) {\n var dx = p1.x - p0.x;\n var dy = p1.y - p0.y;\n var len = Math.sqrt(dx * dx + dy * dy);\n var ux = offsetDistance * dx / len;\n var uy = offsetDistance * dy / len;\n var midX = (p1.x + p0.x) / 2;\n var midY = (p1.y + p0.y) / 2;\n if (this._doLeft) {\n var offsetLeft = new Coordinate(midX - uy, midY + ux);\n offsetPts.add(offsetLeft);\n }\n if (this._doRight) {\n var offsetRight = new Coordinate(midX + uy, midY - ux);\n offsetPts.add(offsetRight);\n }\n};\nOffsetPointGenerator.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nOffsetPointGenerator.prototype.getClass = function getClass () {\n return OffsetPointGenerator\n};\n\nvar OverlayResultValidator = function OverlayResultValidator () {\n this._geom = null;\n this._locFinder = null;\n this._location = new Array(3).fill(null);\n this._invalidLocation = null;\n this._boundaryDistanceTolerance = OverlayResultValidator.TOLERANCE;\n this._testCoords = new ArrayList();\n var a = arguments[0];\n var b = arguments[1];\n var result = arguments[2];\n this._boundaryDistanceTolerance = OverlayResultValidator.computeBoundaryDistanceTolerance(a, b);\n this._geom = [a, b, result];\n this._locFinder = [new FuzzyPointLocator(this._geom[0], this._boundaryDistanceTolerance), new FuzzyPointLocator(this._geom[1], this._boundaryDistanceTolerance), new FuzzyPointLocator(this._geom[2], this._boundaryDistanceTolerance)];\n};\n\nvar staticAccessors$46 = { TOLERANCE: { configurable: true } };\nOverlayResultValidator.prototype.reportResult = function reportResult (overlayOp, location, expectedInterior) {\n System.out.println('Overlay result invalid - A:' + Location.toLocationSymbol(location[0]) + ' B:' + Location.toLocationSymbol(location[1]) + ' expected:' + (expectedInterior ? 'i' : 'e') + ' actual:' + Location.toLocationSymbol(location[2]));\n};\nOverlayResultValidator.prototype.isValid = function isValid (overlayOp) {\n this.addTestPts(this._geom[0]);\n this.addTestPts(this._geom[1]);\n var isValid = this.checkValid(overlayOp);\n return isValid\n};\nOverlayResultValidator.prototype.checkValid = function checkValid () {\n var this$1 = this;\n\n if (arguments.length === 1) {\n var overlayOp = arguments[0];\n for (var i = 0; i < this._testCoords.size(); i++) {\n var pt = this$1._testCoords.get(i);\n if (!this$1.checkValid(overlayOp, pt)) {\n this$1._invalidLocation = pt;\n return false\n }\n }\n return true\n } else if (arguments.length === 2) {\n var overlayOp$1 = arguments[0];\n var pt$1 = arguments[1];\n this._location[0] = this._locFinder[0].getLocation(pt$1);\n this._location[1] = this._locFinder[1].getLocation(pt$1);\n this._location[2] = this._locFinder[2].getLocation(pt$1);\n if (OverlayResultValidator.hasLocation(this._location, Location.BOUNDARY)) { return true }\n return this.isValidResult(overlayOp$1, this._location)\n }\n};\nOverlayResultValidator.prototype.addTestPts = function addTestPts (g) {\n var ptGen = new OffsetPointGenerator(g);\n this._testCoords.addAll(ptGen.getPoints(5 * this._boundaryDistanceTolerance));\n};\nOverlayResultValidator.prototype.isValidResult = function isValidResult (overlayOp, location) {\n var expectedInterior = OverlayOp.isResultOfOp(location[0], location[1], overlayOp);\n var resultInInterior = location[2] === Location.INTERIOR;\n var isValid = !(expectedInterior ^ resultInInterior);\n if (!isValid) { this.reportResult(overlayOp, location, expectedInterior); }\n return isValid\n};\nOverlayResultValidator.prototype.getInvalidLocation = function getInvalidLocation () {\n return this._invalidLocation\n};\nOverlayResultValidator.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nOverlayResultValidator.prototype.getClass = function getClass () {\n return OverlayResultValidator\n};\nOverlayResultValidator.hasLocation = function hasLocation (location, loc) {\n for (var i = 0; i < 3; i++) {\n if (location[i] === loc) { return true }\n }\n return false\n};\nOverlayResultValidator.computeBoundaryDistanceTolerance = function computeBoundaryDistanceTolerance (g0, g1) {\n return Math.min(GeometrySnapper.computeSizeBasedSnapTolerance(g0), GeometrySnapper.computeSizeBasedSnapTolerance(g1))\n};\nOverlayResultValidator.isValid = function isValid (a, b, overlayOp, result) {\n var validator = new OverlayResultValidator(a, b, result);\n return validator.isValid(overlayOp)\n};\nstaticAccessors$46.TOLERANCE.get = function () { return 0.000001 };\n\nObject.defineProperties( OverlayResultValidator, staticAccessors$46 );\n\n// operation.overlay\n\nvar GeometryCombiner = function GeometryCombiner (geoms) {\n this._geomFactory = null;\n this._skipEmpty = false;\n this._inputGeoms = null;\n this._geomFactory = GeometryCombiner.extractFactory(geoms);\n this._inputGeoms = geoms;\n};\nGeometryCombiner.prototype.extractElements = function extractElements (geom, elems) {\n var this$1 = this;\n\n if (geom === null) { return null }\n for (var i = 0; i < geom.getNumGeometries(); i++) {\n var elemGeom = geom.getGeometryN(i);\n if (this$1._skipEmpty && elemGeom.isEmpty()) { continue }\n elems.add(elemGeom);\n }\n};\nGeometryCombiner.prototype.combine = function combine () {\n var this$1 = this;\n\n var elems = new ArrayList();\n for (var i = this._inputGeoms.iterator(); i.hasNext();) {\n var g = i.next();\n this$1.extractElements(g, elems);\n }\n if (elems.size() === 0) {\n if (this._geomFactory !== null) {\n return this._geomFactory.createGeometryCollection(null)\n }\n return null\n }\n return this._geomFactory.buildGeometry(elems)\n};\nGeometryCombiner.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nGeometryCombiner.prototype.getClass = function getClass () {\n return GeometryCombiner\n};\nGeometryCombiner.combine = function combine () {\n if (arguments.length === 1) {\n var geoms = arguments[0];\n var combiner = new GeometryCombiner(geoms);\n return combiner.combine()\n } else if (arguments.length === 2) {\n var g0 = arguments[0];\n var g1 = arguments[1];\n var combiner$1 = new GeometryCombiner(GeometryCombiner.createList(g0, g1));\n return combiner$1.combine()\n } else if (arguments.length === 3) {\n var g0$1 = arguments[0];\n var g1$1 = arguments[1];\n var g2 = arguments[2];\n var combiner$2 = new GeometryCombiner(GeometryCombiner.createList(g0$1, g1$1, g2));\n return combiner$2.combine()\n }\n};\nGeometryCombiner.extractFactory = function extractFactory (geoms) {\n if (geoms.isEmpty()) { return null }\n return geoms.iterator().next().getFactory()\n};\nGeometryCombiner.createList = function createList () {\n if (arguments.length === 2) {\n var obj0 = arguments[0];\n var obj1 = arguments[1];\n var list = new ArrayList();\n list.add(obj0);\n list.add(obj1);\n return list\n } else if (arguments.length === 3) {\n var obj0$1 = arguments[0];\n var obj1$1 = arguments[1];\n var obj2 = arguments[2];\n var list$1 = new ArrayList();\n list$1.add(obj0$1);\n list$1.add(obj1$1);\n list$1.add(obj2);\n return list$1\n }\n};\n\nvar CascadedPolygonUnion = function CascadedPolygonUnion () {\n this._inputPolys = null;\n this._geomFactory = null;\n var polys = arguments[0];\n this._inputPolys = polys;\n if (this._inputPolys === null) { this._inputPolys = new ArrayList(); }\n};\n\nvar staticAccessors$47 = { STRTREE_NODE_CAPACITY: { configurable: true } };\nCascadedPolygonUnion.prototype.reduceToGeometries = function reduceToGeometries (geomTree) {\n var this$1 = this;\n\n var geoms = new ArrayList();\n for (var i = geomTree.iterator(); i.hasNext();) {\n var o = i.next();\n var geom = null;\n if (hasInterface(o, List)) {\n geom = this$1.unionTree(o);\n } else if (o instanceof Geometry) {\n geom = o;\n }\n geoms.add(geom);\n }\n return geoms\n};\nCascadedPolygonUnion.prototype.extractByEnvelope = function extractByEnvelope (env, geom, disjointGeoms) {\n var intersectingGeoms = new ArrayList();\n for (var i = 0; i < geom.getNumGeometries(); i++) {\n var elem = geom.getGeometryN(i);\n if (elem.getEnvelopeInternal().intersects(env)) { intersectingGeoms.add(elem); } else { disjointGeoms.add(elem); }\n }\n return this._geomFactory.buildGeometry(intersectingGeoms)\n};\nCascadedPolygonUnion.prototype.unionOptimized = function unionOptimized (g0, g1) {\n var g0Env = g0.getEnvelopeInternal();\n var g1Env = g1.getEnvelopeInternal();\n if (!g0Env.intersects(g1Env)) {\n var combo = GeometryCombiner.combine(g0, g1);\n return combo\n }\n if (g0.getNumGeometries() <= 1 && g1.getNumGeometries() <= 1) { return this.unionActual(g0, g1) }\n var commonEnv = g0Env.intersection(g1Env);\n return this.unionUsingEnvelopeIntersection(g0, g1, commonEnv)\n};\nCascadedPolygonUnion.prototype.union = function union () {\n if (this._inputPolys === null) { throw new Error('union() method cannot be called twice') }\n if (this._inputPolys.isEmpty()) { return null }\n this._geomFactory = this._inputPolys.iterator().next().getFactory();\n var index = new STRtree(CascadedPolygonUnion.STRTREE_NODE_CAPACITY);\n for (var i = this._inputPolys.iterator(); i.hasNext();) {\n var item = i.next();\n index.insert(item.getEnvelopeInternal(), item);\n }\n this._inputPolys = null;\n var itemTree = index.itemsTree();\n var unionAll = this.unionTree(itemTree);\n return unionAll\n};\nCascadedPolygonUnion.prototype.binaryUnion = function binaryUnion () {\n if (arguments.length === 1) {\n var geoms = arguments[0];\n return this.binaryUnion(geoms, 0, geoms.size())\n } else if (arguments.length === 3) {\n var geoms$1 = arguments[0];\n var start = arguments[1];\n var end = arguments[2];\n if (end - start <= 1) {\n var g0 = CascadedPolygonUnion.getGeometry(geoms$1, start);\n return this.unionSafe(g0, null)\n } else if (end - start === 2) {\n return this.unionSafe(CascadedPolygonUnion.getGeometry(geoms$1, start), CascadedPolygonUnion.getGeometry(geoms$1, start + 1))\n } else {\n var mid = Math.trunc((end + start) / 2);\n var g0$1 = this.binaryUnion(geoms$1, start, mid);\n var g1 = this.binaryUnion(geoms$1, mid, end);\n return this.unionSafe(g0$1, g1)\n }\n }\n};\nCascadedPolygonUnion.prototype.repeatedUnion = function repeatedUnion (geoms) {\n var union = null;\n for (var i = geoms.iterator(); i.hasNext();) {\n var g = i.next();\n if (union === null) { union = g.copy(); } else { union = union.union(g); }\n }\n return union\n};\nCascadedPolygonUnion.prototype.unionSafe = function unionSafe (g0, g1) {\n if (g0 === null && g1 === null) { return null }\n if (g0 === null) { return g1.copy() }\n if (g1 === null) { return g0.copy() }\n return this.unionOptimized(g0, g1)\n};\nCascadedPolygonUnion.prototype.unionActual = function unionActual (g0, g1) {\n return CascadedPolygonUnion.restrictToPolygons(g0.union(g1))\n};\nCascadedPolygonUnion.prototype.unionTree = function unionTree (geomTree) {\n var geoms = this.reduceToGeometries(geomTree);\n var union = this.binaryUnion(geoms);\n return union\n};\nCascadedPolygonUnion.prototype.unionUsingEnvelopeIntersection = function unionUsingEnvelopeIntersection (g0, g1, common) {\n var disjointPolys = new ArrayList();\n var g0Int = this.extractByEnvelope(common, g0, disjointPolys);\n var g1Int = this.extractByEnvelope(common, g1, disjointPolys);\n var union = this.unionActual(g0Int, g1Int);\n disjointPolys.add(union);\n var overallUnion = GeometryCombiner.combine(disjointPolys);\n return overallUnion\n};\nCascadedPolygonUnion.prototype.bufferUnion = function bufferUnion () {\n if (arguments.length === 1) {\n var geoms = arguments[0];\n var factory = geoms.get(0).getFactory();\n var gColl = factory.buildGeometry(geoms);\n var unionAll = gColl.buffer(0.0);\n return unionAll\n } else if (arguments.length === 2) {\n var g0 = arguments[0];\n var g1 = arguments[1];\n var factory$1 = g0.getFactory();\n var gColl$1 = factory$1.createGeometryCollection([g0, g1]);\n var unionAll$1 = gColl$1.buffer(0.0);\n return unionAll$1\n }\n};\nCascadedPolygonUnion.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nCascadedPolygonUnion.prototype.getClass = function getClass () {\n return CascadedPolygonUnion\n};\nCascadedPolygonUnion.restrictToPolygons = function restrictToPolygons (g) {\n if (hasInterface(g, Polygonal)) {\n return g\n }\n var polygons = PolygonExtracter.getPolygons(g);\n if (polygons.size() === 1) { return polygons.get(0) }\n return g.getFactory().createMultiPolygon(GeometryFactory.toPolygonArray(polygons))\n};\nCascadedPolygonUnion.getGeometry = function getGeometry (list, index) {\n if (index >= list.size()) { return null }\n return list.get(index)\n};\nCascadedPolygonUnion.union = function union (polys) {\n var op = new CascadedPolygonUnion(polys);\n return op.union()\n};\nstaticAccessors$47.STRTREE_NODE_CAPACITY.get = function () { return 4 };\n\nObject.defineProperties( CascadedPolygonUnion, staticAccessors$47 );\n\nvar UnionOp = function UnionOp () {};\n\nUnionOp.prototype.interfaces_ = function interfaces_ () {\n return []\n};\nUnionOp.prototype.getClass = function getClass () {\n return UnionOp\n};\nUnionOp.union = function union (g, other) {\n if (g.isEmpty() || other.isEmpty()) {\n if (g.isEmpty() && other.isEmpty()) { return OverlayOp.createEmptyResult(OverlayOp.UNION, g, other, g.getFactory()) }\n if (g.isEmpty()) { return other.copy() }\n if (other.isEmpty()) { return g.copy() }\n }\n g.checkNotGeometryCollection(g);\n g.checkNotGeometryCollection(other);\n return SnapIfNeededOverlayOp.overlayOp(g, other, OverlayOp.UNION)\n};\n\n// operation.union\n\n// operation\n\n/**\n * Polyfill for IE support\n */\n\nexport { GeoJSONReader, GeoJSONWriter, OverlayOp, UnionOp, BufferOp };\n","import center from '@turf/center';\nimport { GeoJSONReader, BufferOp, GeoJSONWriter } from 'turf-jsts';\nimport { featureEach, geomEach } from '@turf/meta';\nimport { geoAzimuthalEquidistant } from 'd3-geo';\nimport { featureCollection, earthRadius, radiansToLength, lengthToRadians, feature } from '@turf/helpers';\n\n/**\n * Calculates a buffer for input features for a given radius. Units supported are miles, kilometers, and degrees.\n *\n * When using a negative radius, the resulting geometry may be invalid if\n * it's too small compared to the radius magnitude. If the input is a\n * FeatureCollection, only valid members will be returned in the output\n * FeatureCollection - i.e., the output collection may have fewer members than\n * the input, or even be empty.\n *\n * @name buffer\n * @param {FeatureCollection|Geometry|Feature} geojson input to be buffered\n * @param {number} radius distance to draw the buffer (negative values are allowed)\n * @param {Object} [options={}] Optional parameters\n * @param {string} [options.units=\"kilometers\"] any of the options supported by turf units\n * @param {number} [options.steps=8] number of steps\n * @returns {FeatureCollection|Feature|undefined} buffered features\n * @example\n * var point = turf.point([-90.548630, 14.616599]);\n * var buffered = turf.buffer(point, 500, {units: 'miles'});\n *\n * //addToMap\n * var addToMap = [point, buffered]\n */\nfunction buffer(geojson, radius, options) {\n // Optional params\n options = options || {};\n\n // use user supplied options or default values\n var units = options.units || \"kilometers\";\n var steps = options.steps || 8;\n\n // validation\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\n // Allow negative buffers (\"erosion\") or zero-sized buffers (\"repair geometry\")\n if (radius === undefined) throw new Error(\"radius is required\");\n if (steps <= 0) throw new Error(\"steps must be greater than 0\");\n\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 (feature) {\n var multiBuffered = bufferFeature(feature, 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}\n\n/**\n * Buffer single Feature/Geometry\n *\n * @private\n * @param {Feature} geojson input to be buffered\n * @param {number} radius distance to draw the buffer\n * @param {string} [units='kilometers'] any of the options supported by turf units\n * @param {number} [steps=8] number of steps\n * @returns {Feature} buffered feature\n */\nfunction bufferFeature(geojson, radius, units, steps) {\n var properties = geojson.properties || {};\n var geometry = geojson.type === \"Feature\" ? geojson.geometry : geojson;\n\n // Geometry Types faster than jsts\n if (geometry.type === \"GeometryCollection\") {\n var results = [];\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 }\n\n // Project GeoJSON to Azimuthal Equidistant projection (convert to Meters)\n var projection = defineProjection(geometry);\n var projected = {\n type: geometry.type,\n coordinates: projectCoords(geometry.coordinates, projection),\n };\n\n // JSTS buffer operation\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\n // Detect if empty geometries\n if (coordsIsNaN(buffered.coordinates)) return undefined;\n\n // Unproject coordinates (convert to Degrees)\n var result = {\n type: buffered.type,\n coordinates: unprojectCoords(buffered.coordinates, projection),\n };\n\n return feature(result, properties);\n}\n\n/**\n * Coordinates isNaN\n *\n * @private\n * @param {Array} coords GeoJSON Coordinates\n * @returns {boolean} if NaN exists\n */\nfunction coordsIsNaN(coords) {\n if (Array.isArray(coords[0])) return coordsIsNaN(coords[0]);\n return isNaN(coords[0]);\n}\n\n/**\n * Project coordinates to projection\n *\n * @private\n * @param {Array} coords to project\n * @param {GeoProjection} proj D3 Geo Projection\n * @returns {Array} projected coordinates\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}\n\n/**\n * Un-Project coordinates to projection\n *\n * @private\n * @param {Array} coords to un-project\n * @param {GeoProjection} proj D3 Geo Projection\n * @returns {Array} un-projected coordinates\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}\n\n/**\n * Define Azimuthal Equidistant projection\n *\n * @private\n * @param {Geometry|Feature} geojson Base projection on center of GeoJSON\n * @returns {GeoProjection} D3 Geo Azimuthal Equidistant Projection\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}\n\nexport default buffer;\n","import { polygon, } from \"@turf/helpers\";\nimport { coordEach } from \"@turf/meta\";\nimport concaveman from \"concaveman\";\n/**\n * Takes a {@link Feature} or a {@link FeatureCollection} and returns a convex hull {@link Polygon}.\n *\n * Internally this uses\n * the [convex-hull](https://github.com/mikolalysenko/convex-hull) module that implements a\n * [monotone chain hull](http://en.wikibooks.org/wiki/Algorithm_Implementation/Geometry/Convex_hull/Monotone_chain).\n *\n * @name convex\n * @param {GeoJSON} geojson input Feature or FeatureCollection\n * @param {Object} [options={}] Optional parameters\n * @param {number} [options.concavity=Infinity] 1 - thin shape. Infinity - convex hull.\n * @param {Object} [options.properties={}] Translate Properties to Feature\n * @returns {Feature} a convex hull\n * @example\n * var points = turf.featureCollection([\n * turf.point([10.195312, 43.755225]),\n * turf.point([10.404052, 43.8424511]),\n * turf.point([10.579833, 43.659924]),\n * turf.point([10.360107, 43.516688]),\n * turf.point([10.14038, 43.588348]),\n * turf.point([10.195312, 43.755225])\n * ]);\n *\n * var hull = turf.convex(points);\n *\n * //addToMap\n * var addToMap = [points, hull]\n */\nexport default function convex(geojson, options) {\n if (options === void 0) { options = {}; }\n // Default parameters\n options.concavity = options.concavity || Infinity;\n // Container\n var points = [];\n // Convert all points to flat 2D coordinate Array\n coordEach(geojson, function (coord) {\n points.push([coord[0], coord[1]]);\n });\n if (!points.length) {\n return null;\n }\n var convexHull = concaveman(points, options.concavity);\n // Convex hull should have at least 3 different vertices in order to create a valid polygon\n if (convexHull.length > 3) {\n return polygon([convexHull]);\n }\n return null;\n}\n","/**\n * Returns a cloned copy of the passed GeoJSON Object, including possible 'Foreign Members'.\n * ~3-5x faster than the common JSON.parse + JSON.stringify combo method.\n *\n * @name clone\n * @param {GeoJSON} geojson GeoJSON Object\n * @returns {GeoJSON} cloned GeoJSON Object\n * @example\n * var line = turf.lineString([[-74, 40], [-78, 42], [-82, 35]], {color: 'red'});\n *\n * var lineCloned = turf.clone(line);\n */\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}\n/**\n * Clone Feature\n *\n * @private\n * @param {Feature} geojson GeoJSON Feature\n * @returns {Feature} cloned Feature\n */\nfunction cloneFeature(geojson) {\n var cloned = { type: \"Feature\" };\n // Preserve Foreign Members\n Object.keys(geojson).forEach(function (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 // Add properties & geometry last\n cloned.properties = cloneProperties(geojson.properties);\n cloned.geometry = cloneGeometry(geojson.geometry);\n return cloned;\n}\n/**\n * Clone Properties\n *\n * @private\n * @param {Object} properties GeoJSON Properties\n * @returns {Object} cloned Properties\n */\nfunction cloneProperties(properties) {\n var cloned = {};\n if (!properties) {\n return cloned;\n }\n Object.keys(properties).forEach(function (key) {\n var value = properties[key];\n if (typeof value === \"object\") {\n if (value === null) {\n // handle null\n cloned[key] = null;\n }\n else if (Array.isArray(value)) {\n // handle Array\n cloned[key] = value.map(function (item) {\n return item;\n });\n }\n else {\n // handle generic Object\n cloned[key] = cloneProperties(value);\n }\n }\n else {\n cloned[key] = value;\n }\n });\n return cloned;\n}\n/**\n * Clone Feature Collection\n *\n * @private\n * @param {FeatureCollection} geojson GeoJSON Feature Collection\n * @returns {FeatureCollection} cloned Feature Collection\n */\nfunction cloneFeatureCollection(geojson) {\n var cloned = { type: \"FeatureCollection\" };\n // Preserve Foreign Members\n Object.keys(geojson).forEach(function (key) {\n switch (key) {\n case \"type\":\n case \"features\":\n return;\n default:\n cloned[key] = geojson[key];\n }\n });\n // Add features\n cloned.features = geojson.features.map(function (feature) {\n return cloneFeature(feature);\n });\n return cloned;\n}\n/**\n * Clone Geometry\n *\n * @private\n * @param {Geometry} geometry GeoJSON Geometry\n * @returns {Geometry} cloned Geometry\n */\nfunction cloneGeometry(geometry) {\n var 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(function (g) {\n return cloneGeometry(g);\n });\n return geom;\n }\n geom.coordinates = deepSlice(geometry.coordinates);\n return geom;\n}\n/**\n * Deep Slice coordinates\n *\n * @private\n * @param {Coordinates} coords Coordinates\n * @returns {Coordinates} all coordinates sliced\n */\nfunction deepSlice(coords) {\n var cloned = coords;\n if (typeof cloned[0] !== \"object\") {\n return cloned.slice();\n }\n return cloned.map(function (coord) {\n return deepSlice(coord);\n });\n}\nexport default clone;\n","import cleanCoords from '@turf/clean-coords';\nimport clone from '@turf/clone';\nimport { geomEach } from '@turf/meta';\nimport { isObject } from '@turf/helpers';\n\n/*\n (c) 2013, Vladimir Agafonkin\n Simplify.js, a high-performance JS polyline simplification library\n mourner.github.io/simplify-js\n*/\n\n// to suit your point format, run search/replace for '.x' and '.y';\n// for 3D version, see 3d branch (configurability would draw significant performance overhead)\n\n// square distance between 2 points\nfunction getSqDist(p1, p2) {\n var dx = p1.x - p2.x,\n dy = p1.y - p2.y;\n\n return dx * dx + dy * dy;\n}\n\n// square distance from a point to a segment\nfunction getSqSegDist(p, p1, p2) {\n var x = p1.x,\n y = p1.y,\n dx = p2.x - x,\n dy = p2.y - y;\n\n if (dx !== 0 || dy !== 0) {\n var t = ((p.x - x) * dx + (p.y - y) * dy) / (dx * dx + dy * dy);\n\n if (t > 1) {\n x = p2.x;\n y = p2.y;\n } else if (t > 0) {\n x += dx * t;\n y += dy * t;\n }\n }\n\n dx = p.x - x;\n dy = p.y - y;\n\n return dx * dx + dy * dy;\n}\n// rest of the code doesn't care about point format\n\n// basic distance-based simplification\nfunction simplifyRadialDist(points, sqTolerance) {\n var prevPoint = points[0],\n newPoints = [prevPoint],\n point;\n\n for (var i = 1, len = points.length; i < len; i++) {\n point = points[i];\n\n if (getSqDist(point, prevPoint) > sqTolerance) {\n newPoints.push(point);\n prevPoint = point;\n }\n }\n\n if (prevPoint !== point) newPoints.push(point);\n\n return newPoints;\n}\n\nfunction simplifyDPStep(points, first, last, sqTolerance, simplified) {\n var maxSqDist = sqTolerance,\n index;\n\n for (var i = first + 1; i < last; i++) {\n var sqDist = getSqSegDist(points[i], points[first], points[last]);\n\n if (sqDist > maxSqDist) {\n index = i;\n maxSqDist = sqDist;\n }\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}\n\n// simplification using Ramer-Douglas-Peucker algorithm\nfunction simplifyDouglasPeucker(points, sqTolerance) {\n var last = points.length - 1;\n\n var simplified = [points[0]];\n simplifyDPStep(points, 0, last, sqTolerance, simplified);\n simplified.push(points[last]);\n\n return simplified;\n}\n\n// both algorithms combined for awesome performance\nfunction simplify(points, tolerance, highestQuality) {\n if (points.length <= 2) return points;\n\n var sqTolerance = tolerance !== undefined ? tolerance * tolerance : 1;\n\n points = highestQuality ? points : simplifyRadialDist(points, sqTolerance);\n points = simplifyDouglasPeucker(points, sqTolerance);\n\n return points;\n}\n\n/**\n * Takes a {@link GeoJSON} object and returns a simplified version. Internally uses\n * [simplify-js](http://mourner.github.io/simplify-js/) to perform simplification using the Ramer-Douglas-Peucker algorithm.\n *\n * @name simplify\n * @param {GeoJSON} geojson object to be simplified\n * @param {Object} [options={}] Optional parameters\n * @param {number} [options.tolerance=1] simplification tolerance\n * @param {boolean} [options.highQuality=false] whether or not to spend more time to create a higher-quality simplification with a different algorithm\n * @param {boolean} [options.mutate=false] allows GeoJSON input to be mutated (significant performance increase if true)\n * @returns {GeoJSON} a simplified GeoJSON\n * @example\n * var geojson = turf.polygon([[\n * [-70.603637, -33.399918],\n * [-70.614624, -33.395332],\n * [-70.639343, -33.392466],\n * [-70.659942, -33.394759],\n * [-70.683975, -33.404504],\n * [-70.697021, -33.419406],\n * [-70.701141, -33.434306],\n * [-70.700454, -33.446339],\n * [-70.694274, -33.458369],\n * [-70.682601, -33.465816],\n * [-70.668869, -33.472117],\n * [-70.646209, -33.473835],\n * [-70.624923, -33.472117],\n * [-70.609817, -33.468107],\n * [-70.595397, -33.458369],\n * [-70.587158, -33.442901],\n * [-70.587158, -33.426283],\n * [-70.590591, -33.414248],\n * [-70.594711, -33.406224],\n * [-70.603637, -33.399918]\n * ]]);\n * var options = {tolerance: 0.01, highQuality: false};\n * var simplified = turf.simplify(geojson, options);\n *\n * //addToMap\n * var addToMap = [geojson, simplified]\n */\nfunction simplify$1(geojson, options) {\n // Optional parameters\n options = options || {};\n if (!isObject(options)) throw new Error(\"options is invalid\");\n var tolerance = options.tolerance !== undefined ? options.tolerance : 1;\n var highQuality = options.highQuality || false;\n var mutate = options.mutate || false;\n\n if (!geojson) throw new Error(\"geojson is required\");\n if (tolerance && tolerance < 0) throw new Error(\"invalid tolerance\");\n\n // Clone geojson to avoid side effects\n if (mutate !== true) geojson = clone(geojson);\n\n geomEach(geojson, function (geom) {\n simplifyGeom(geom, tolerance, highQuality);\n });\n return geojson;\n}\n\n/**\n * Simplifies a feature's coordinates\n *\n * @private\n * @param {Geometry} geometry to be simplified\n * @param {number} [tolerance=1] simplification tolerance\n * @param {boolean} [highQuality=false] whether or not to spend more time to create a higher-quality simplification with a different algorithm\n * @returns {Geometry} output\n */\nfunction simplifyGeom(geometry, tolerance, highQuality) {\n var type = geometry.type;\n\n // \"unsimplyfiable\" geometry types\n if (type === \"Point\" || type === \"MultiPoint\") return geometry;\n\n // Remove any extra coordinates\n cleanCoords(geometry, true);\n\n var coordinates = geometry.coordinates;\n switch (type) {\n case \"LineString\":\n geometry[\"coordinates\"] = simplifyLine(\n coordinates,\n tolerance,\n highQuality\n );\n break;\n case \"MultiLineString\":\n geometry[\"coordinates\"] = coordinates.map(function (lines) {\n return simplifyLine(lines, tolerance, highQuality);\n });\n break;\n case \"Polygon\":\n geometry[\"coordinates\"] = simplifyPolygon(\n coordinates,\n tolerance,\n highQuality\n );\n break;\n case \"MultiPolygon\":\n geometry[\"coordinates\"] = coordinates.map(function (rings) {\n return simplifyPolygon(rings, tolerance, highQuality);\n });\n }\n return geometry;\n}\n\n/**\n * Simplifies the coordinates of a LineString with simplify-js\n *\n * @private\n * @param {Array} coordinates to be processed\n * @param {number} tolerance simplification tolerance\n * @param {boolean} highQuality whether or not to spend more time to create a higher-quality\n * @returns {Array>} simplified coords\n */\nfunction simplifyLine(coordinates, tolerance, highQuality) {\n return simplify(\n coordinates.map(function (coord) {\n return { x: coord[0], y: coord[1], z: coord[2] };\n }),\n tolerance,\n highQuality\n ).map(function (coords) {\n return coords.z ? [coords.x, coords.y, coords.z] : [coords.x, coords.y];\n });\n}\n\n/**\n * Simplifies the coordinates of a Polygon with simplify-js\n *\n * @private\n * @param {Array} coordinates to be processed\n * @param {number} tolerance simplification tolerance\n * @param {boolean} highQuality whether or not to spend more time to create a higher-quality\n * @returns {Array>>} simplified coords\n */\nfunction simplifyPolygon(coordinates, tolerance, highQuality) {\n return coordinates.map(function (ring) {\n var pts = ring.map(function (coord) {\n return { x: coord[0], y: coord[1] };\n });\n if (pts.length < 4) {\n throw new Error(\"invalid polygon\");\n }\n var simpleRing = simplify(pts, tolerance, highQuality).map(function (\n coords\n ) {\n return [coords.x, coords.y];\n });\n //remove 1 percent of tolerance until enough points to make a triangle\n while (!checkValidity(simpleRing)) {\n tolerance -= tolerance * 0.01;\n simpleRing = simplify(pts, tolerance, highQuality).map(function (\n coords\n ) {\n return [coords.x, coords.y];\n });\n }\n if (\n simpleRing[simpleRing.length - 1][0] !== simpleRing[0][0] ||\n simpleRing[simpleRing.length - 1][1] !== simpleRing[0][1]\n ) {\n simpleRing.push(simpleRing[0]);\n }\n return simpleRing;\n });\n}\n\n/**\n * Returns true if ring has at least 3 coordinates and its first coordinate is the same as its last\n *\n * @private\n * @param {Array} ring coordinates to be checked\n * @returns {boolean} true if valid\n */\nfunction checkValidity(ring) {\n if (ring.length < 3) return false;\n //if the last point is the same as the first, it's not a triangle\n return !(\n ring.length === 3 &&\n ring[2][0] === ring[0][0] &&\n ring[2][1] === ring[0][1]\n );\n}\n\nexport default simplify$1;\n","import { getCoord, getGeom } from \"@turf/invariant\";\n// http://en.wikipedia.org/wiki/Even%E2%80%93odd_rule\n// modified from: https://github.com/substack/point-in-polygon/blob/master/index.js\n// which was modified from http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html\n/**\n * Takes a {@link Point} and a {@link Polygon} or {@link MultiPolygon} and determines if the point\n * resides inside the polygon. The polygon can be convex or concave. The function accounts for holes.\n *\n * @name booleanPointInPolygon\n * @param {Coord} point input point\n * @param {Feature} polygon input polygon or multipolygon\n * @param {Object} [options={}] Optional parameters\n * @param {boolean} [options.ignoreBoundary=false] True if polygon boundary should be ignored when determining if\n * the point is inside the polygon otherwise false.\n * @returns {boolean} `true` if the Point is inside the Polygon; `false` if the Point is not inside the Polygon\n * @example\n * var pt = turf.point([-77, 44]);\n * var poly = turf.polygon([[\n * [-81, 41],\n * [-81, 47],\n * [-72, 47],\n * [-72, 41],\n * [-81, 41]\n * ]]);\n *\n * turf.booleanPointInPolygon(pt, poly);\n * //= true\n */\nexport default function booleanPointInPolygon(point, polygon, options) {\n if (options === void 0) { options = {}; }\n // validation\n if (!point) {\n throw new Error(\"point is required\");\n }\n if (!polygon) {\n throw new Error(\"polygon is required\");\n }\n var pt = getCoord(point);\n var geom = getGeom(polygon);\n var type = geom.type;\n var bbox = polygon.bbox;\n var polys = geom.coordinates;\n // Quick elimination if point is not inside bbox\n if (bbox && inBBox(pt, bbox) === false) {\n return false;\n }\n // normalize to multipolygon\n if (type === \"Polygon\") {\n polys = [polys];\n }\n var insidePoly = false;\n for (var i = 0; i < polys.length && !insidePoly; i++) {\n // check if it is in the outer ring first\n if (inRing(pt, polys[i][0], options.ignoreBoundary)) {\n var inHole = false;\n var k = 1;\n // check for the point in any of the holes\n while (k < polys[i].length && !inHole) {\n if (inRing(pt, polys[i][k], !options.ignoreBoundary)) {\n inHole = true;\n }\n k++;\n }\n if (!inHole) {\n insidePoly = true;\n }\n }\n }\n return insidePoly;\n}\n/**\n * inRing\n *\n * @private\n * @param {Array} pt [x,y]\n * @param {Array>} ring [[x,y], [x,y],..]\n * @param {boolean} ignoreBoundary ignoreBoundary\n * @returns {boolean} inRing\n */\nfunction inRing(pt, ring, ignoreBoundary) {\n var isInside = false;\n if (ring[0][0] === ring[ring.length - 1][0] &&\n ring[0][1] === ring[ring.length - 1][1]) {\n ring = ring.slice(0, ring.length - 1);\n }\n for (var i = 0, j = ring.length - 1; i < ring.length; j = i++) {\n var xi = ring[i][0];\n var yi = ring[i][1];\n var xj = ring[j][0];\n var yj = ring[j][1];\n var onBoundary = pt[1] * (xi - xj) + yi * (xj - pt[0]) + yj * (pt[0] - xi) === 0 &&\n (xi - pt[0]) * (xj - pt[0]) <= 0 &&\n (yi - pt[1]) * (yj - pt[1]) <= 0;\n if (onBoundary) {\n return !ignoreBoundary;\n }\n var intersect = yi > pt[1] !== yj > pt[1] &&\n pt[0] < ((xj - xi) * (pt[1] - yi)) / (yj - yi) + xi;\n if (intersect) {\n isInside = !isInside;\n }\n }\n return isInside;\n}\n/**\n * inBBox\n *\n * @private\n * @param {Position} pt point [x,y]\n * @param {BBox} bbox BBox [west, south, east, north]\n * @returns {boolean} true/false if point is inside BBox\n */\nfunction inBBox(pt, bbox) {\n return (bbox[0] <= pt[0] && bbox[1] <= pt[1] && bbox[2] >= pt[0] && bbox[3] >= pt[1]);\n}\n","import { featureCollection, lineString, } from \"@turf/helpers\";\nimport { getCoords } from \"@turf/invariant\";\nimport { flattenEach } from \"@turf/meta\";\n/**\n * Creates a {@link FeatureCollection} of 2-vertex {@link LineString} segments from a\n * {@link LineString|(Multi)LineString} or {@link Polygon|(Multi)Polygon}.\n *\n * @name lineSegment\n * @param {GeoJSON} geojson GeoJSON Polygon or LineString\n * @returns {FeatureCollection} 2-vertex line segments\n * @example\n * var polygon = turf.polygon([[[-50, 5], [-40, -10], [-50, -10], [-40, 5], [-50, 5]]]);\n * var segments = turf.lineSegment(polygon);\n *\n * //addToMap\n * var addToMap = [polygon, segments]\n */\nfunction lineSegment(geojson) {\n if (!geojson) {\n throw new Error(\"geojson is required\");\n }\n var results = [];\n flattenEach(geojson, function (feature) {\n lineSegmentFeature(feature, results);\n });\n return featureCollection(results);\n}\n/**\n * Line Segment\n *\n * @private\n * @param {Feature} geojson Line or polygon feature\n * @param {Array} results push to results\n * @returns {void}\n */\nfunction lineSegmentFeature(geojson, results) {\n var coords = [];\n var geometry = geojson.geometry;\n if (geometry !== null) {\n switch (geometry.type) {\n case \"Polygon\":\n coords = getCoords(geometry);\n break;\n case \"LineString\":\n coords = [getCoords(geometry)];\n }\n coords.forEach(function (coord) {\n var segments = createSegments(coord, geojson.properties);\n segments.forEach(function (segment) {\n segment.id = results.length;\n results.push(segment);\n });\n });\n }\n}\n/**\n * Create Segments from LineString coordinates\n *\n * @private\n * @param {Array>} coords LineString coordinates\n * @param {*} properties GeoJSON properties\n * @returns {Array>} line segments\n */\nfunction createSegments(coords, properties) {\n var segments = [];\n coords.reduce(function (previousCoords, currentCoords) {\n var segment = lineString([previousCoords, currentCoords], properties);\n segment.bbox = bbox(previousCoords, currentCoords);\n segments.push(segment);\n return currentCoords;\n });\n return segments;\n}\n/**\n * Create BBox between two coordinates (faster than @turf/bbox)\n *\n * @private\n * @param {Array} coords1 Point coordinate\n * @param {Array} coords2 Point coordinate\n * @returns {BBox} [west, south, east, north]\n */\nfunction bbox(coords1, coords2) {\n var x1 = coords1[0];\n var y1 = coords1[1];\n var x2 = coords2[0];\n var y2 = coords2[1];\n var west = x1 < x2 ? x1 : x2;\n var south = y1 < y2 ? y1 : y2;\n var east = x1 > x2 ? x1 : x2;\n var north = y1 > y2 ? y1 : y2;\n return [west, south, east, north];\n}\nexport default lineSegment;\n","import { feature, featureCollection, point, } from \"@turf/helpers\";\nimport { getCoords } from \"@turf/invariant\";\nimport lineSegment from \"@turf/line-segment\";\nimport { featureEach } from \"@turf/meta\";\nimport rbush from \"geojson-rbush\";\n/**\n * Takes any LineString or Polygon GeoJSON and returns the intersecting point(s).\n *\n * @name lineIntersect\n * @param {GeoJSON} line1 any LineString or Polygon\n * @param {GeoJSON} line2 any LineString or Polygon\n * @returns {FeatureCollection} point(s) that intersect both\n * @example\n * var line1 = turf.lineString([[126, -11], [129, -21]]);\n * var line2 = turf.lineString([[123, -18], [131, -14]]);\n * var intersects = turf.lineIntersect(line1, line2);\n *\n * //addToMap\n * var addToMap = [line1, line2, intersects]\n */\nfunction lineIntersect(line1, line2) {\n var unique = {};\n var results = [];\n // First, normalize geometries to features\n // Then, handle simple 2-vertex segments\n if (line1.type === \"LineString\") {\n line1 = feature(line1);\n }\n if (line2.type === \"LineString\") {\n line2 = feature(line2);\n }\n if (line1.type === \"Feature\" &&\n line2.type === \"Feature\" &&\n line1.geometry !== null &&\n line2.geometry !== null &&\n line1.geometry.type === \"LineString\" &&\n line2.geometry.type === \"LineString\" &&\n line1.geometry.coordinates.length === 2 &&\n line2.geometry.coordinates.length === 2) {\n var intersect = intersects(line1, line2);\n if (intersect) {\n results.push(intersect);\n }\n return featureCollection(results);\n }\n // Handles complex GeoJSON Geometries\n var tree = rbush();\n tree.load(lineSegment(line2));\n featureEach(lineSegment(line1), function (segment) {\n featureEach(tree.search(segment), function (match) {\n var intersect = intersects(segment, match);\n if (intersect) {\n // prevent duplicate points https://github.com/Turfjs/turf/issues/688\n var key = getCoords(intersect).join(\",\");\n if (!unique[key]) {\n unique[key] = true;\n results.push(intersect);\n }\n }\n });\n });\n return featureCollection(results);\n}\n/**\n * Find a point that intersects LineStrings with two coordinates each\n *\n * @private\n * @param {Feature} line1 GeoJSON LineString (Must only contain 2 coordinates)\n * @param {Feature} line2 GeoJSON LineString (Must only contain 2 coordinates)\n * @returns {Feature} intersecting GeoJSON Point\n */\nfunction intersects(line1, line2) {\n var coords1 = getCoords(line1);\n var coords2 = getCoords(line2);\n if (coords1.length !== 2) {\n throw new Error(\" line1 must only contain 2 coordinates\");\n }\n if (coords2.length !== 2) {\n throw new Error(\" line2 must only contain 2 coordinates\");\n }\n var x1 = coords1[0][0];\n var y1 = coords1[0][1];\n var x2 = coords1[1][0];\n var y2 = coords1[1][1];\n var x3 = coords2[0][0];\n var y3 = coords2[0][1];\n var x4 = coords2[1][0];\n var y4 = coords2[1][1];\n var denom = (y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1);\n var numeA = (x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3);\n var numeB = (x2 - x1) * (y1 - y3) - (y2 - y1) * (x1 - x3);\n if (denom === 0) {\n if (numeA === 0 && numeB === 0) {\n return null;\n }\n return null;\n }\n var uA = numeA / denom;\n var uB = numeB / denom;\n if (uA >= 0 && uA <= 1 && uB >= 0 && uB <= 1) {\n var x = x1 + uA * (x2 - x1);\n var y = y1 + uA * (y2 - y1);\n return point([x, y]);\n }\n return null;\n}\nexport default lineIntersect;\n","import { featureCollection, lineString, multiLineString } from \"@turf/helpers\";\nimport { getGeom } from \"@turf/invariant\";\n/**\n * Converts a {@link Polygon} to {@link LineString|(Multi)LineString} or {@link MultiPolygon} to a\n * {@link FeatureCollection} of {@link LineString|(Multi)LineString}.\n *\n * @name polygonToLine\n * @param {Feature} poly Feature to convert\n * @param {Object} [options={}] Optional parameters\n * @param {Object} [options.properties={}] translates GeoJSON properties to Feature\n * @returns {FeatureCollection|Feature} converted (Multi)Polygon to (Multi)LineString\n * @example\n * var poly = turf.polygon([[[125, -30], [145, -30], [145, -20], [125, -20], [125, -30]]]);\n *\n * var line = turf.polygonToLine(poly);\n *\n * //addToMap\n * var addToMap = [line];\n */\nexport default function (poly, options) {\n if (options === void 0) { options = {}; }\n var 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 polygonToLine(geom, options);\n case \"MultiPolygon\":\n return multiPolygonToLine(geom, options);\n default:\n throw new Error(\"invalid poly\");\n }\n}\n/**\n * @private\n */\nexport function polygonToLine(poly, options) {\n if (options === void 0) { options = {}; }\n var geom = getGeom(poly);\n var coords = geom.coordinates;\n var properties = options.properties\n ? options.properties\n : poly.type === \"Feature\"\n ? poly.properties\n : {};\n return coordsToLine(coords, properties);\n}\n/**\n * @private\n */\nexport function multiPolygonToLine(multiPoly, options) {\n if (options === void 0) { options = {}; }\n var geom = getGeom(multiPoly);\n var coords = geom.coordinates;\n var properties = options.properties\n ? options.properties\n : multiPoly.type === \"Feature\"\n ? multiPoly.properties\n : {};\n var lines = [];\n coords.forEach(function (coord) {\n lines.push(coordsToLine(coord, properties));\n });\n return featureCollection(lines);\n}\n/**\n * @private\n */\nexport function coordsToLine(coords, properties) {\n if (coords.length > 1) {\n return multiLineString(coords, properties);\n }\n return lineString(coords[0], properties);\n}\n","import booleanPointInPolygon from \"@turf/boolean-point-in-polygon\";\nimport lineIntersect from \"@turf/line-intersect\";\nimport { flattenEach } from \"@turf/meta\";\nimport polygonToLine from \"@turf/polygon-to-line\";\n/**\n * Boolean-disjoint returns (TRUE) if the intersection of the two geometries is an empty set.\n *\n * @name booleanDisjoint\n * @param {Geometry|Feature} feature1 GeoJSON Feature or Geometry\n * @param {Geometry|Feature} feature2 GeoJSON Feature or Geometry\n * @returns {boolean} true/false\n * @example\n * var point = turf.point([2, 2]);\n * var line = turf.lineString([[1, 1], [1, 2], [1, 3], [1, 4]]);\n *\n * turf.booleanDisjoint(line, point);\n * //=true\n */\nfunction booleanDisjoint(feature1, feature2) {\n var bool = true;\n flattenEach(feature1, function (flatten1) {\n flattenEach(feature2, function (flatten2) {\n if (bool === false) {\n return false;\n }\n bool = disjoint(flatten1.geometry, flatten2.geometry);\n });\n });\n return bool;\n}\n/**\n * Disjoint operation for simple Geometries (Point/LineString/Polygon)\n *\n * @private\n * @param {Geometry} geom1 GeoJSON Geometry\n * @param {Geometry} geom2 GeoJSON Geometry\n * @returns {boolean} true/false\n */\nfunction disjoint(geom1, geom2) {\n switch (geom1.type) {\n case \"Point\":\n switch (geom2.type) {\n case \"Point\":\n return !compareCoords(geom1.coordinates, geom2.coordinates);\n case \"LineString\":\n return !isPointOnLine(geom2, geom1);\n case \"Polygon\":\n return !booleanPointInPolygon(geom1, geom2);\n }\n /* istanbul ignore next */\n break;\n case \"LineString\":\n switch (geom2.type) {\n case \"Point\":\n return !isPointOnLine(geom1, geom2);\n case \"LineString\":\n return !isLineOnLine(geom1, geom2);\n case \"Polygon\":\n return !isLineInPoly(geom2, geom1);\n }\n /* istanbul ignore next */\n break;\n case \"Polygon\":\n switch (geom2.type) {\n case \"Point\":\n return !booleanPointInPolygon(geom2, geom1);\n case \"LineString\":\n return !isLineInPoly(geom1, geom2);\n case \"Polygon\":\n return !isPolyInPoly(geom2, geom1);\n }\n }\n return false;\n}\n// http://stackoverflow.com/a/11908158/1979085\nfunction isPointOnLine(lineString, pt) {\n for (var i = 0; i < lineString.coordinates.length - 1; i++) {\n if (isPointOnLineSegment(lineString.coordinates[i], lineString.coordinates[i + 1], pt.coordinates)) {\n return true;\n }\n }\n return false;\n}\nfunction isLineOnLine(lineString1, lineString2) {\n var doLinesIntersect = lineIntersect(lineString1, lineString2);\n if (doLinesIntersect.features.length > 0) {\n return true;\n }\n return false;\n}\nfunction isLineInPoly(polygon, lineString) {\n for (var _i = 0, _a = lineString.coordinates; _i < _a.length; _i++) {\n var coord = _a[_i];\n if (booleanPointInPolygon(coord, polygon)) {\n return true;\n }\n }\n var doLinesIntersect = lineIntersect(lineString, polygonToLine(polygon));\n if (doLinesIntersect.features.length > 0) {\n return true;\n }\n return false;\n}\n/**\n * Is Polygon (geom1) in Polygon (geom2)\n * Only takes into account outer rings\n * See http://stackoverflow.com/a/4833823/1979085\n *\n * @private\n * @param {Geometry|Feature} feature1 Polygon1\n * @param {Geometry|Feature} feature2 Polygon2\n * @returns {boolean} true/false\n */\nfunction isPolyInPoly(feature1, feature2) {\n for (var _i = 0, _a = feature1.coordinates[0]; _i < _a.length; _i++) {\n var coord1 = _a[_i];\n if (booleanPointInPolygon(coord1, feature2)) {\n return true;\n }\n }\n for (var _b = 0, _c = feature2.coordinates[0]; _b < _c.length; _b++) {\n var coord2 = _c[_b];\n if (booleanPointInPolygon(coord2, feature1)) {\n return true;\n }\n }\n var doLinesIntersect = lineIntersect(polygonToLine(feature1), polygonToLine(feature2));\n if (doLinesIntersect.features.length > 0) {\n return true;\n }\n return false;\n}\nfunction isPointOnLineSegment(lineSegmentStart, lineSegmentEnd, pt) {\n var dxc = pt[0] - lineSegmentStart[0];\n var dyc = pt[1] - lineSegmentStart[1];\n var dxl = lineSegmentEnd[0] - lineSegmentStart[0];\n var dyl = lineSegmentEnd[1] - lineSegmentStart[1];\n var cross = dxc * dyl - dyc * dxl;\n if (cross !== 0) {\n return false;\n }\n if (Math.abs(dxl) >= Math.abs(dyl)) {\n if (dxl > 0) {\n return lineSegmentStart[0] <= pt[0] && pt[0] <= lineSegmentEnd[0];\n }\n else {\n return lineSegmentEnd[0] <= pt[0] && pt[0] <= lineSegmentStart[0];\n }\n }\n else if (dyl > 0) {\n return lineSegmentStart[1] <= pt[1] && pt[1] <= lineSegmentEnd[1];\n }\n else {\n return lineSegmentEnd[1] <= pt[1] && pt[1] <= lineSegmentStart[1];\n }\n}\n/**\n * compareCoords\n *\n * @private\n * @param {Position} pair1 point [x,y]\n * @param {Position} pair2 point [x,y]\n * @returns {boolean} true/false if coord pairs match\n */\nfunction compareCoords(pair1, pair2) {\n return pair1[0] === pair2[0] && pair1[1] === pair2[1];\n}\nexport default booleanDisjoint;\n","import booleanDisjoint from \"@turf/boolean-disjoint\";\nimport { flattenEach } from \"@turf/meta\";\n/**\n * Boolean-intersects returns (TRUE) two geometries intersect.\n *\n * @name booleanIntersects\n * @param {Geometry|Feature} feature1 GeoJSON Feature or Geometry\n * @param {Geometry|Feature} feature2 GeoJSON Feature or Geometry\n * @returns {boolean} true/false\n * @example\n * var point = turf.point([2, 2]);\n * var line = turf.lineString([[1, 1], [1, 2], [1, 3], [1, 4]]);\n *\n * turf.booleanIntersects(line, point);\n * //=true\n */\nexport default function booleanIntersects(feature1, feature2) {\n var bool = false;\n flattenEach(feature1, function (flatten1) {\n flattenEach(feature2, function (flatten2) {\n if (bool === true) {\n return true;\n }\n bool = !booleanDisjoint(flatten1.geometry, flatten2.geometry);\n });\n });\n return bool;\n}\n","import { getCoord } from \"@turf/invariant\";\nimport { radiansToLength, degreesToRadians, } from \"@turf/helpers\";\n//http://en.wikipedia.org/wiki/Haversine_formula\n//http://www.movable-type.co.uk/scripts/latlong.html\n/**\n * Calculates the distance between two {@link Point|points} in degrees, radians, miles, or kilometers.\n * This uses the [Haversine formula](http://en.wikipedia.org/wiki/Haversine_formula) to account for global curvature.\n *\n * @name distance\n * @param {Coord | Point} from origin point or coordinate\n * @param {Coord | Point} to destination point or coordinate\n * @param {Object} [options={}] Optional parameters\n * @param {string} [options.units='kilometers'] can be degrees, radians, miles, or kilometers\n * @returns {number} distance between the two points\n * @example\n * var from = turf.point([-75.343, 39.984]);\n * var to = turf.point([-75.534, 39.123]);\n * var options = {units: 'miles'};\n *\n * var distance = turf.distance(from, to, options);\n *\n * //addToMap\n * var addToMap = [from, to];\n * from.properties.distance = distance;\n * to.properties.distance = distance;\n */\nfunction distance(from, to, options) {\n if (options === void 0) { 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) +\n Math.pow(Math.sin(dLon / 2), 2) * Math.cos(lat1) * Math.cos(lat2);\n return radiansToLength(2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)), options.units);\n}\nexport default distance;\n","import { multiPolygon, polygon, } from \"@turf/helpers\";\nimport { getGeom } from \"@turf/invariant\";\nimport polygonClipping from \"polygon-clipping\";\n/**\n * Takes two {@link Polygon|polygon} or {@link MultiPolygon|multi-polygon} geometries and\n * finds their polygonal intersection. If they don't intersect, returns null.\n *\n * @name intersect\n * @param {Feature} poly1 the first polygon or multipolygon\n * @param {Feature} poly2 the second polygon or multipolygon\n * @param {Object} [options={}] Optional Parameters\n * @param {Object} [options.properties={}] Translate GeoJSON Properties to Feature\n * @returns {Feature|null} returns a feature representing the area they share (either a {@link Polygon} or\n * {@link MultiPolygon}). If they do not share any area, returns `null`.\n * @example\n * var poly1 = turf.polygon([[\n * [-122.801742, 45.48565],\n * [-122.801742, 45.60491],\n * [-122.584762, 45.60491],\n * [-122.584762, 45.48565],\n * [-122.801742, 45.48565]\n * ]]);\n *\n * var poly2 = turf.polygon([[\n * [-122.520217, 45.535693],\n * [-122.64038, 45.553967],\n * [-122.720031, 45.526554],\n * [-122.669906, 45.507309],\n * [-122.723464, 45.446643],\n * [-122.532577, 45.408574],\n * [-122.487258, 45.477466],\n * [-122.520217, 45.535693]\n * ]]);\n *\n * var intersection = turf.intersect(poly1, poly2);\n *\n * //addToMap\n * var addToMap = [poly1, poly2, intersection];\n */\nexport default function intersect(poly1, poly2, options) {\n if (options === void 0) { options = {}; }\n var geom1 = getGeom(poly1);\n var geom2 = getGeom(poly2);\n var intersection = polygonClipping.intersection(geom1.coordinates, geom2.coordinates);\n if (intersection.length === 0)\n return null;\n if (intersection.length === 1)\n return polygon(intersection[0], options.properties);\n return multiPolygon(intersection, options.properties);\n}\n","import distance from \"@turf/distance\";\nimport intersect from \"@turf/intersect\";\nimport { polygon, featureCollection, } from \"@turf/helpers\";\n/**\n * Takes a bounding box and the diameter of the cell and returns a {@link FeatureCollection} of flat-topped\n * hexagons or triangles ({@link Polygon} features) aligned in an \"odd-q\" vertical grid as\n * described in [Hexagonal Grids](http://www.redblobgames.com/grids/hexagons/).\n *\n * @name hexGrid\n * @param {BBox} bbox extent in [minX, minY, maxX, maxY] order\n * @param {number} cellSide length of the side of the the hexagons or triangles, in units. It will also coincide with the\n * radius of the circumcircle of the hexagons.\n * @param {Object} [options={}] Optional parameters\n * @param {string} [options.units='kilometers'] used in calculating cell size, can be degrees, radians, miles, or kilometers\n * @param {Object} [options.properties={}] passed to each hexagon or triangle of the grid\n * @param {Feature} [options.mask] if passed a Polygon or MultiPolygon, the grid Points will be created only inside it\n * @param {boolean} [options.triangles=false] whether to return as triangles instead of hexagons\n * @returns {FeatureCollection} a hexagonal grid\n * @example\n * var bbox = [-96,31,-84,40];\n * var cellSide = 50;\n * var options = {units: 'miles'};\n *\n * var hexgrid = turf.hexGrid(bbox, cellSide, options);\n *\n * //addToMap\n * var addToMap = [hexgrid];\n */\nfunction hexGrid(bbox, cellSide, options) {\n if (options === void 0) { options = {}; }\n // Issue => https://github.com/Turfjs/turf/issues/1284\n var clonedProperties = JSON.stringify(options.properties || {});\n var west = bbox[0], south = bbox[1], east = bbox[2], north = bbox[3];\n var centerY = (south + north) / 2;\n var centerX = (west + east) / 2;\n // https://github.com/Turfjs/turf/issues/758\n var xFraction = (cellSide * 2) / distance([west, centerY], [east, centerY], options);\n var cellWidth = xFraction * (east - west);\n var yFraction = (cellSide * 2) / distance([centerX, south], [centerX, north], options);\n var cellHeight = yFraction * (north - south);\n var radius = cellWidth / 2;\n var hex_width = radius * 2;\n var hex_height = (Math.sqrt(3) / 2) * cellHeight;\n var box_width = east - west;\n var box_height = north - south;\n var x_interval = (3 / 4) * hex_width;\n var y_interval = hex_height;\n // adjust box_width so all hexagons will be inside the bbox\n var x_span = (box_width - hex_width) / (hex_width - radius / 2);\n var x_count = Math.floor(x_span);\n var x_adjust = (x_count * x_interval - radius / 2 - box_width) / 2 -\n radius / 2 +\n x_interval / 2;\n // adjust box_height so all hexagons will be inside the bbox\n var y_count = Math.floor((box_height - hex_height) / hex_height);\n var y_adjust = (box_height - y_count * hex_height) / 2;\n var hasOffsetY = y_count * hex_height - box_height > hex_height / 2;\n if (hasOffsetY) {\n y_adjust -= hex_height / 4;\n }\n // Precompute cosines and sines of angles used in hexagon creation for performance gain\n var cosines = [];\n var sines = [];\n for (var i = 0; i < 6; i++) {\n var angle = ((2 * Math.PI) / 6) * i;\n cosines.push(Math.cos(angle));\n sines.push(Math.sin(angle));\n }\n var results = [];\n for (var x = 0; x <= x_count; x++) {\n for (var y = 0; y <= y_count; y++) {\n var isOdd = x % 2 === 1;\n if (y === 0 && isOdd)\n continue;\n if (y === 0 && hasOffsetY)\n continue;\n var center_x = x * x_interval + west - x_adjust;\n var center_y = y * y_interval + south + y_adjust;\n if (isOdd) {\n center_y -= hex_height / 2;\n }\n if (options.triangles === true) {\n hexTriangles([center_x, center_y], cellWidth / 2, cellHeight / 2, JSON.parse(clonedProperties), cosines, sines).forEach(function (triangle) {\n if (options.mask) {\n if (intersect(options.mask, triangle))\n results.push(triangle);\n }\n else {\n results.push(triangle);\n }\n });\n }\n else {\n var hex = hexagon([center_x, center_y], cellWidth / 2, cellHeight / 2, JSON.parse(clonedProperties), cosines, sines);\n if (options.mask) {\n if (intersect(options.mask, hex))\n results.push(hex);\n }\n else {\n results.push(hex);\n }\n }\n }\n }\n return featureCollection(results);\n}\n/**\n * Creates hexagon\n *\n * @private\n * @param {Array} center of the hexagon\n * @param {number} rx half hexagon width\n * @param {number} ry half hexagon height\n * @param {Object} properties passed to each hexagon\n * @param {Array} cosines precomputed\n * @param {Array} sines precomputed\n * @returns {Feature} hexagon\n */\nfunction hexagon(center, rx, ry, properties, cosines, sines) {\n var vertices = [];\n for (var i = 0; i < 6; i++) {\n var x = center[0] + rx * cosines[i];\n var y = center[1] + ry * sines[i];\n vertices.push([x, y]);\n }\n //first and last vertex must be the same\n vertices.push(vertices[0].slice());\n return polygon([vertices], properties);\n}\n/**\n * Creates triangles composing an hexagon\n *\n * @private\n * @param {Array} center of the hexagon\n * @param {number} rx half triangle width\n * @param {number} ry half triangle height\n * @param {Object} properties passed to each triangle\n * @param {Array} cosines precomputed\n * @param {Array} sines precomputed\n * @returns {Array>} triangles\n */\nfunction hexTriangles(center, rx, ry, properties, cosines, sines) {\n var triangles = [];\n for (var i = 0; i < 6; i++) {\n var vertices = [];\n vertices.push(center);\n vertices.push([center[0] + rx * cosines[i], center[1] + ry * sines[i]]);\n vertices.push([\n center[0] + rx * cosines[(i + 1) % 6],\n center[1] + ry * sines[(i + 1) % 6],\n ]);\n vertices.push(center);\n triangles.push(polygon([vertices], properties));\n }\n return triangles;\n}\nexport default hexGrid;\n","import polygonClipping from \"polygon-clipping\";\nimport { getGeom } from \"@turf/invariant\";\nimport { multiPolygon, polygon } from \"@turf/helpers\";\n/**\n * Takes two {@link (Multi)Polygon(s)} and returns a combined polygon. If the input polygons are not contiguous, this function returns a {@link MultiPolygon} feature.\n *\n * @name union\n * @param {Feature} polygon1 input Polygon feature\n * @param {Feature} polygon2 Polygon feature to difference from polygon1\n * @param {Object} [options={}] Optional Parameters\n * @param {Object} [options.properties={}] Translate Properties to output Feature\n * @returns {Feature<(Polygon|MultiPolygon)>} a combined {@link Polygon} or {@link MultiPolygon} feature, or null if the inputs are empty\n * @example\n * var poly1 = turf.polygon([[\n * [-82.574787, 35.594087],\n * [-82.574787, 35.615581],\n * [-82.545261, 35.615581],\n * [-82.545261, 35.594087],\n * [-82.574787, 35.594087]\n * ]], {\"fill\": \"#0f0\"});\n * var poly2 = turf.polygon([[\n * [-82.560024, 35.585153],\n * [-82.560024, 35.602602],\n * [-82.52964, 35.602602],\n * [-82.52964, 35.585153],\n * [-82.560024, 35.585153]\n * ]], {\"fill\": \"#00f\"});\n *\n * var union = turf.union(poly1, poly2);\n *\n * //addToMap\n * var addToMap = [poly1, poly2, union];\n */\nfunction union(poly1, poly2, options) {\n if (options === void 0) { options = {}; }\n var geom1 = getGeom(poly1);\n var geom2 = getGeom(poly2);\n var unioned = polygonClipping.union(geom1.coordinates, geom2.coordinates);\n if (unioned.length === 0)\n return null;\n if (unioned.length === 1)\n return polygon(unioned[0], options.properties);\n else\n return multiPolygon(unioned, options.properties);\n}\nexport default union;\n"],"names":["earthRadius","factors","unitsFactors","areaFactors","feature","geom","properties","options","feat","geometry","type","coordinates","_options","point","lineString","polygon","multiPoint","multiLineString","multiPolygon","isNumber","points","featureCollection","coords","_i","coordinates_1","ring","j","polygons","lineStrings","features","fc","geometryCollection","geometries","round","num","precision","multiplier","radiansToLength","radians","units","factor","lengthToRadians","distance","lengthToDegrees","radiansToDegrees","bearingToAzimuth","bearing","angle","degrees","degreesToRadians","convertLength","length","originalUnit","finalUnit","convertArea","area","startFactor","finalFactor","isObject","input","validateBBox","bbox","validateId","id","getCoord","coord","getCoords","getGeom","geojson","getType","_name","cleanCoords","mutate","newCoords","cleanLine","line","polyPoints","existing","key","equals","newPoints","secondToLast","newPointsLength","i","prevAddedPoint","isPointOnLineSegment","pt1","pt2","start","end","x","y","startX","startY","endX","endY","dxc","dyc","dxl","dyl","cross","coordEach","callback","excludeWrapCoord","k","l","stopG","geometryMaybeCollection","wrapShrink","coordIndex","isGeometryCollection","isFeatureCollection","isFeature","stop","featureIndex","geomIndex","multiFeatureIndex","geometryIndex","geomType","coordReduce","initialValue","previousValue","currentCoord","propEach","propReduce","currentProperties","featureEach","featureReduce","currentFeature","coordAll","geomEach","g","featureProperties","featureBBox","featureId","geomReduce","currentGeometry","flattenEach","coordinate","flattenReduce","segmentEach","segmentIndex","previousCoords","previousFeatureIndex","previousMultiIndex","prevGeomIndex","featureIndexCoord","multiPartIndexCoord","currentSegment","segmentReduce","started","lineEach","lineReduce","currentLine","findSegment","findPoint","result","bboxPolygon","west","south","east","north","lowLeft","topLeft","topRight","lowRight","center","ext","value","arrayLike","relativeStart","relativeEnd","val","NumberUtil","x1","x2","tolerance","IllegalArgumentException","Error","message","Double","staticAccessors$1","n","Comparable","Clonable","Comparator","Serializable","Coordinate","c","staticAccessors","ordinateIndex","other","o","dx","dy","dz","f","DimensionalComparator","dimensionsToTest","dimensionsToTest$1","o1","o2","c1","c2","compX","compY","compZ","a","b","CoordinateSequenceFactory","Location","staticAccessors$4","locationValue","hasInterface","MathUtil","staticAccessors$5","ln","v1","v2","v3","v4","min","max","x$1","min$1","max$1","index","v1$1","v2$1","v3$1","StringBuffer","str","e","Integer","Character","DD","dd","hi","lo","staticAccessors$7","insertDecimalPoint","magnitude","mag","scale","decimalPointPos","buf","numDigits","digit","rebiasBy10","digitChar","continueExtractingDigits","remMag","y$1","yhi","ylo","hc","tc","hy","ty","C","U","u","zhi","zlo","exp","r","s","fhi","flo","plus5","value$1","ax","axdd","diffSq","d2","H","h","S","H$1","h$1","T","t","S$1","s$1","e$1","f$1","hx","tx","specialStr","sigDigits","numZeroes","zeroes","digits","expStr","trailingDigits","digitsWithDecimal","strlen","isNegative","signCh","numBeforeDec","ch","d","ex","val2","numDecPlaces","scale$1","xAbs","xLog10","xMag","xApprox","len","CGAlgorithmsDD","staticAccessors$6","p1","p2","q","dx1","dy1","dx2","dy2","y1","y2","det","q1","q2","denom1","denom2","denom","numx1","numx2","numx","fracP","numy1","numy2","numy","fracQ","pa","pb","pc","detsum","detleft","detright","errbound","CoordinateSequence","staticAccessors$8","env","Exception","NotRepresentableException","Exception$$1","System","src","srcPos","dest","destPos","name","HCoordinate","p","_x","_y","p1$1","p2$1","_x$1","_y$1","_w","p1$2","p2$2","px","py","pw","qx","qy","qw","w","xInt","yInt","Envelope","staticAccessors$9","otherEnvelope","intMinX","intMinY","intMaxX","intMaxY","transX","transY","deltaX","deltaY","minq","maxq","minp","maxp","regExes","WKTParser","geometryFactory","GeometryFactory","wkt","matches","parse$1","extract$1","wktType","data","coordinate$1","point$1","multipoint$1","this$1","array","linestring$1","linearring$1","multilinestring$1","polygon$1","multipolygon$1","collection","components","lines","linestring","linearring","rings","shell","holes","wktArray","WKTWriter","p0","RuntimeException","AssertionFailedException","RuntimeException$$1","Assert","assertion","expectedValue","actualValue","LineIntersector","staticAccessors$10","intIndex","catBuf","p3","p4","dist0","dist1","precisionModel","inputLineIndex","dist","ptIndex","pt","pdx","pdy","RobustLineIntersector","LineIntersector$$1","intPt","env0","env1","CGAlgorithms","n1","n2","n3","n4","normPt","x3","x4","xabs","intPtDD","isIn","p1q1p2","p1q2p2","q1p1q2","q1p2q2","n00","n01","n10","n11","minX0","minY0","maxX0","maxY0","minX1","minY1","maxX1","maxY1","intMidX","intMidY","Pq1","Pq2","Qp1","Qp2","collinear","nearestPt","minDist","RobustDeterminant","sign","swap","RayCrossingCounter","minx","maxx","xIntSign","counter","p$1","ring$1","counter$1","i$1","staticAccessors$3","sum","x0","x0$1","sum$1","A","B","D","noIntersection","rNumb","sNum","pts","y0","nPts","hiPt","hiIndex","iPrev","iNext","prev","next","disc","isCCW","len2","minDistance","lineIntersector","GeometryComponentFilter","Geometry","factory","staticAccessors$11","g$1","other$1","comp","copy","SRID","userData","aElement","bElement","comparison","geometryChangedFilter","CoordinateFilter","BoundaryNodeRule","staticAccessors$12","boundaryCount","Mod2BoundaryNodeRule","EndPointBoundaryNodeRule","MultiValentEndPointBoundaryNodeRule","MonoValentEndPointBoundaryNodeRule","Collection","IndexOutOfBoundsException","Iterator","List","Collection$$1","NoSuchElementException","ArrayList","List$$1","element","oldElement","Iterator_","found","Iterator$$1","arrayList","CoordinateList","ArrayList$$1","coord$1","allowRepeated","coll","isChanged","clone","coord$2","allowRepeated$1","last","obj","allowRepeated$2","coord$3","allowRepeated$3","direction","i$2","i$3","coord$4","allowRepeated$4","size","coord$5","allowRepeated$5","inc","CoordinateArrays","staticAccessors$13","ForwardComparator","BidirectionalComparator","testPts","testPt","firstCoordinate","newCoordinates","coord1","coord2","coord1$1","coord2$1","coordinateComparator","coordList","mid","tmp","nonNull","newCoord","srcStart","destStart","pts1","pts2","compare","minCoord","npts","extractPts","iPts","forwardComp","isEqualRev","dir1","dir2","i1","i2","comparePt","Map$1","SortedMap","Map","OperationNotSupported","Set","HashSet","Set$$1","Iterator_$1","hashSet","BLACK","RED","colorOf","parentOf","setColor","leftOf","rightOf","TreeMap","cmp","parent","oldValue","Lineal","SortedSet","TreeSet","Iterator_$2","treeSet","Arrays","comparator","Dimension","staticAccessors$14","dimensionValue","dimensionSymbol","GeometryFilter","CoordinateSequenceFilter","seq","GeometryCollection","Geometry$$1","envelope","childCoordinates","otherCollection","dimension","numPoints","revGeoms","theseElements","otherElements","o$1","gc","thisGeom","otherGeom","holeComp","filter","filter$1","filter$2","filter$3","MultiLineString","GeometryCollection$$1","nLines","revLines","BoundaryOp","bnRule","geom$1","bnRule$1","mLine","bdyPts","LineString","closedEndpointOnBoundary","it","entry","valence","Counter","bop","bop$1","PrintStream","StringReader","DecimalFormat","ByteArrayOutputStream","IOException","LineNumberReader","StringUtil","staticAccessors$15","os","ps","t$1","depth","stackTrace","lineNumberReader","separator","separatorlen","tokenList","tmpString","pos","token","res","CoordinateSequences","minDim","dim","cs1","cs2","cs1Size","cs2Size","fact","newseq","cs","isClosed","otherLineString","revLine","line$1","ls","Puntal","Point","Polygonal","Polygon","shellCoordinates","prevX","prevY","xChanged","yChanged","otherPolygon","thisShell","otherPolygonShell","clockwise","uniqueCoordinates","minCoordinate","poly","otherShell","thisShell$1","otherShell$1","shellComp","nHole1","nHole2","thisHole","otherHole","MultiPoint","LinearRing","LineString$$1","rev","MultiPolygon","allRings","allRingsArray","GeometryEditor","staticAccessors$16","isUserDataCopied","operation","collectionForType","newPolygon","hole","NoOpGeometryOperation","CoordinateOperation","CoordinateSequenceOperation","CoordinateArraySequence","coordSeq","size$1","dimension$1","staticAccessors$18","cloneCoordinates","strBuf","CoordinateArraySequenceFactory","staticAccessors$17","HashMap","MapInterface","PrecisionModel","Type","modelType","pm","staticAccessors$19","otherPrecisionModel","otherSigDigits","description","floatSingleVal","maxSigDigits","pm1","pm2","staticAccessors$1$1","staticAccessors$2","geomList","geomClass","isHeterogeneous","hasGeometryCollection","partClass","geom0","isCollection","coordinates$1","shell$1","editor","ptSeq","multiPolygons","multiPolygonArray","geometryArray","multiLineStrings","multiLineStringArray","lineStringArray","multiPoints","multiPointArray","linearRings","linearRingArray","pointArray","polygonArray","exemplar","geometryTypes","GeoJSONParser","json","parse","extract","sub","linearRing","multipoint","geoJson","multilinestring","shellGeoJson","holeGeoJson","multipolygon","GeoJSONReader","GeoJSONWriter","Position","staticAccessors$20","position","EmptyStackException","Stack","RightmostEdgeFinder","de","side","pPrev","pNext","orientation","usePrev","node","star","dirEdgeList","rightmostSide","TopologyException","msg","LinkedList","BufferSubgraph","startEdge","de$1","outsideDepth","nodesVisited","nodeQueue","startNode","sym","adjNode","graph","edgeEnv","dirEdge","nodeStack","symNode","TopologyLocation","location","on","gl","on$1","left","right","locValue","newLoc","temp","posIndex","locIndex","locValue$1","le","loc","Label","onLoc","lbl","onLoc$1","onLoc$2","leftLoc","rightLoc","geomIndex$1","onLoc$3","leftLoc$1","rightLoc$1","count","location$1","label","lineLabel","EdgeRing","isFirstEdge","degree","edge","isForward","edgePts","startIndex","startIndex$1","deLabel","deLabel$1","holeLR","MinimalEdgeRing","EdgeRing$$1","er","MaximalEdgeRing","minEdgeRings","minEr","GraphComponent","isVisited","isInResult","isCovered","im","Node","GraphComponent$$1","edges","out","label2","eltIndex","nLoc","argIndex","onLocation","thisLoc","NodeMap","nodeFact","node$1","bdyNodes","Quadrant","staticAccessors$21","quad","quad1","quad2","diff","halfPlane","EdgeEnd","edge$1","edge$2","p0$1","label$1","className","lastDotPos","boundaryNodeRule","DirectedEdge","EdgeEnd$$1","depthVal","isInteriorAreaEdge","nextMin","minEdgeRing","isLine","isExteriorIfArea0","isExteriorIfArea1","edgeRing","depthDelta","directionFactor","oppositePos","delta","oppositeDepth","currLocation","nextLocation","NodeFactory","PlanarGraph","nodeit","ep0","ep1","eCoord","ee","edgesToAdd","de1","de2","nodes","PolygonBuilder","edgeRings","shellList","freeHoleList","resultPolyList","maxEdgeRings","dirEdges","testEr","testRing","testEnv","minShell","minEnv","tryShell","tryRing","tryEnv","isContained","shellCount","Boundable","ItemBoundable","bounds","item","PriorityQueue","minItem","child","ItemVisitor","SpatialIndex","itemEnv","AbstractNode","level","staticAccessors$22","childBoundable","Collections","alen","BoundablePair","boundable1","boundable2","itemDistance","priQ","isComp1","isComp2","nd","bndComposite","bndOther","children","bp","AbstractSTRtree","nodeCapacity","nodeCapacity$1","staticAccessors$23","childToRemove","valuesTree","valuesTreeForNode","valuesTreeForChild","boundables","level$1","top","boundables$1","boundable","searchBounds","searchBounds$1","visitor","searchBounds$2","visitor$1","childBoundables","searchBounds$3","matches$1","childBoundables$1","childBoundable$1","item$1","childToPrune","boundablesOfALevel","parentBoundables","maxChildDepth","childDepth","newLevel","sortedChildBoundables","IntersectsOp","ItemDistance","item1","item2","STRtree","AbstractSTRtree$$1","verticalSlices","STRtreeNode","sliceCount","sliceCapacity","slices","boundablesAddedToSlice","searchEnv","searchEnv$1","minLeafCount","itemDist","initBndPair","tree","itemDist$1","bp$1","initBndPair$1","maxDistance","distanceLowerBound","minPair","bndPair","currentDistance","itemDist$2","bnd","bp$2","aBounds","bBounds","AbstractNode$$1","SegmentPointComparator","octant","xSign","ySign","compareSign0","compareSign1","SegmentNode","segString","segmentOctant","maxSegmentIndex","SegmentNodeList","eiPrev","ei","collapsedVertexIndexes","vertexIndex","ei0","ei1","lastSegStartPt","useIntPt1","edgeList","newEdge","collapsedVertexIndex","numVerticesBetween","isCollapsed","maxSegIndex","ipt","NodedSegmentString","eiNew","splitEdges","split0","pt0","splitn","splitnPts","ptn","Octant","adx","ady","dx$1","dy$1","SegmentString","NodableSegmentString","intPt$1","li","segmentIndex$1","normalizedSegmentIndex","nextSegIndex","nextPt","segStrings","resultEdgelist","segStrings$1","resultEdgelist$1","ss","LineSegment","staticAccessors$24","seg","orient0","orient1","geomFactory","pf0","pf1","newp0","newp1","closestPt","close00","close01","close10","close11","comp0","segmentLengthFraction","offsetDistance","segx","segy","ux","uy","offsetx","offsety","inputPt","segFrac","bits0","hash0","bits1","hash1","MonotoneChainOverlapAction","mc1","start1","mc2","start2","MonotoneChain","context","start0","end0","mcs","mc","mco","end1","p00","p01","p10","p11","mid0","mid1","MonotoneChainBuilder","startIndexList","safeStart","chainQuad","pts$1","mcList","list","Noder","SinglePassNoder","segInt","MCIndexNoder","SinglePassNoder$$1","si","segStr","segChains","inputSegStrings","overlapAction","SegmentOverlapAction","queryChain","overlapChains","testChain","MonotoneChainOverlapAction$$1","ss1","ss2","BufferParameters","quadrantSegments","quadrantSegments$1","endCapStyle","quadrantSegments$2","endCapStyle$1","joinStyle","mitreLimit","staticAccessors$25","quadSegs","simplifyFactor","isSingleSided","alpha","BufferInputLineSimplifier","inputLine","staticAccessors$26","i0","distanceTol","midIndex","lastIndex","isMiddleVertexDeleted","isAngleToSimplify","isConcave","simp","OffsetSegmentString","staticAccessors$28","bufPt","lastPt","ptDist","startPt","minimimVertexDistance","Angle","staticAccessors$29","dx0","dy0","dotprod","anglePrev","angleNext","tip1","tail","tip2","a1","a2","ang1","ang2","delAngle","angleDegrees","crossproduct","angDel","OffsetSegmentGenerator","bufParams","staticAccessors$27","addStartPoint","outsideTurn","offsetL","offsetR","squareCapSideOffset","squareCapLOffset","squareCapROffset","offset0","offset1","isMitreWithinLimit","mitreRatio","radius","startAngle","endAngle","s1","s2","basePt","ang0","angDiff","angDiffHalf","midAng","mitreMidAng","mitreDist","bevelDelta","bevelHalfLen","bevelMidX","bevelMidY","bevelMidPt","mitreMidLine","bevelEndLeft","bevelEndRight","offset","sideSign","totalAngle","nSegs","initAngle","currAngleInc","currAngle","numInt","OffsetCurveBuilder","inputPts","isRightSide","posDistance","segGen","curvePts","distTol","simp2","simp1","lineCoord","bufDistance","SubgraphDepthLocater","subgraphs","staticAccessors$30","stabbingRayLeftPt","stabbedSegments","bsg","stabbingRayLeftPt$1","stabbedSegments$1","ds","DepthSegment","stabbingRayLeftPt$2","stabbedSegments$2","orientIndex","seg0","seg1","compare0","Triangle","m00","m01","m10","m11","v0","z","lenAB","lenBC","lenCA","maxLen","cx","cy","ay","bx","by","ccx","ccy","l1","l2","len0","frac","splitPt","uz","vx","vy","vz","crossx","crossy","crossz","absSq","area3D","len1","circum","inCentreX","inCentreY","OffsetCurveSetBuilder","inputGeom","curveBuilder","curve","offsetSide","shellCoord","holeCoord","triangleCoord","bufferDistance","tri","inCentre","distToCentre","cwLeftLoc","cwRightLoc","ringCoord","envMinDimension","PointOnGeometryLocator","GeometryCollectionIterator","SimplePointInAreaLocator","geomi","g2","EdgeEndStar","iNextCW","startLoc","currLoc","it$1","geomGraph","lastEdgeIndex","startLabel","eSearch","hasDimensionalCollapseEdge","geomi$1","DirectedEdgeStar","EdgeEndStar$$1","firstOut","incoming","state","nextOut","nextIn","de0","deLast","quad0","nodeLabel","prevOut","firstIn","edgeIndex","startDepth","targetLastDepth","nextDepth","lastDepth","endIndex","startDepth$1","currDepth","nextDe","degree$1","nextOut$1","nextIn$1","eLabel","eLoc","OverlayNodeFactory","NodeFactory$$1","OrientedCoordinateArray","oca","orientation1","orientation2","limit1","limit2","compPt","done1","done2","EdgeList","edgeColl","matchEdge","SegmentIntersector","e0","segIndex0","e1","segIndex1","IntersectionAdder","EdgeIntersection","EdgeIntersectionList","Edge","MonotoneChainIndexer","MonotoneChainEdge","mcb","chainIndex","chainIndex0","mce","chainIndex1","mce$1","Depth","staticAccessors$31","depthValue","minDepth","newValue","newPts","newe","isIsolated","isEqualForward","isEqualReverse","iRev","BufferBuilder","existingEdge","existingLabel","labelToMerge","mergeDelta","existingDelta","newDelta","subgraphList","polyBuilder","processedGraphs","subgraph","locater","emptyGeom","noder","curveSetBuilder","bufferSegStrList","resultGeom","nodedSegStrings","oldLabel","lLoc","rLoc","ScaledNoder","scaleFactor","noder$1","scaleFactor$1","offsetX","offsetY","nodedSegmentStrings","roundPts","roundPtsNoDup","splitSS","intSegStrings","NodingValidator","staticAccessors$33","ss$1","ss0","ss0$1","ss1$1","pts0","HotPixel","staticAccessors$34","segMinx","segMaxx","segMiny","segMaxy","isOutsidePixelEnv","intersects","pScaled","safeTolerance","intersectsLeft","intersectsBottom","segIndex","MonotoneChainSelectAction","MCIndexPointSnapper","staticAccessors$35","hotPixel","hotPixel$1","parentEdge","hotPixelVertexIndex","pixelEnv","hotPixelSnapAction","HotPixelSnapAction","MonotoneChainSelectAction$$1","InteriorIntersectionFinderAdder","MCIndexSnapRounder","inputSegmentStrings","resultSegStrings","nv","intersections","intFinderAdder","edge0","isNodeAdded","snapPts","snapPt","BufferOp","staticAccessors$32","fixedPM","bufBuilder","precDigits","precisionDigits","sizeBasedScaleFactor","argPM","gBuf","geomBuf","distance$1","bufOp","geomBuf$1","g$2","distance$2","params","bufOp$1","geomBuf$2","g$3","distance$3","bufOp$2","geomBuf$3","maxPrecisionDigits","envMax","expandByDistance","bufEnvMax","bufEnvPrecisionDigits","minUnitLog10","PointPairDistance","DistanceToPointFinder","tempSegment","pt$1","ptDist$1","pt$2","ptDist$2","segment","pt$3","ptDist$3","closestPt$1","BufferCurveMaximumDistanceFinder","staticAccessors$36","distFilter","MaxMidpointDistanceFilter","MaxPointDistanceFilter","bufferCurve","midPt","PolygonExtracter","comps","LinearComponentExtracter","lines$1","isForcedToLineString","forceToLineString","geoms","geom$2","lines$2","geoms$1","lines$3","forceToLineString$1","geom$3","lines$4","forceToLineString$2","PointLocator","boundaryRule","shellLoc","holeLoc","p$2","ptCoord","ml","mpoly","GeometryLocation","component","component$1","staticAccessors$38","PointExtracter","ConnectedElementLocationFilter","locations","DistanceOp","g0","g1","g0$1","g1$1","terminateDistance","locPtPoly","polyGeomIndex","locPtPoly$1","locationsIndex","polys","insideLocs","locs","polys$1","locPtPoly$2","ptLoc","locPtPoly$3","locGeom","lines0","lines1","flip","nearestPts","coord0","segClosestPoint","line0","line1","locGeom$1","coord0$1","dist$1","points0","points1","distOp","PointPairDistance$2","DistanceToPoint","DiscreteHausdorffDistance","staticAccessors$39","densifyFrac","discreteGeom","MaxPointDistanceFilter$1","fracFilter","MaxDensifiedByFractionDistanceFilter","fraction","delx","dely","BufferDistanceValidator","staticAccessors$37","bufCurve","maxDist","haus","distDelta","inputCurve","lineExtracter","BufferResultValidator","staticAccessors$40","padding","expectedEnv","bufEnv","distValid","inputArea","resultArea","checkName","validator","BasicSegmentString","InteriorIntersectionFinder","isCheckEndSegmentsOnly","findAllIntersections","keepIntersections","isEndSegPresent","finder","FastNodingValidator","intSegs","EdgeNodingValidator","GeometryCollectionMapper","mapOp","mapped","op","mapper","LineBuilder","ptLocator","opCode","targetIndex","OverlayOp","edgesList","PointBuilder","GeometryTransformer","isAllValidLinearRings","transGeomList","transformGeom","seqSize","LineStringSnapper","srcLine","snapTolerance","srcPts","snapTolerance$1","srcCoords","srcPt","snapVert","distinctPtCount","snapIndex","allowSnappingToSourceVertices","GeometrySnapper","srcGeom","staticAccessors$41","snapGeom","snapTrans","SnapTransformer","cleanResult","snappedGeom","ringPts","minSegLen","snapTol","ptSet","segLen","snapper0","snapper1","fixedSnapTol","minDimension","GeometryTransformer$$1","isSelfSnap","snapper","CommonBits","numBits","numSignExp","bits","numStr","padStr","bitStr","mask","nBits","invMask","zeroed","num1","num2","CommonBitsRemover","CommonCoordinateFilter","staticAccessors$42","trans","Translater","invCoord","xp","yp","SnapOverlayOp","remGeom","prepGeom","SnapIfNeededOverlayOp","isSuccess","savedException","isValid","MonotoneChain$2","SweepLineEvent","insertEvent","staticAccessors$43","deleteEventIndex","pe","ev","EdgeSetIntersector","SegmentIntersector$2","includeProper","recordIsolated","isDoneWhenProperInt","bdyNodes0","bdyNodes1","SimpleMCSweepLineIntersector","EdgeSetIntersector$$1","edges0","edges1","si$1","si$2","testAllSegments","edgeSet","ev0","mc0","ev1","edges$1","IntervalRTreeNode","staticAccessors$45","queryMin","queryMax","NodeComparator","mid2","IntervalRTreeLeafNode","IntervalRTreeNode$$1","IntervalRTreeBranchNode","SortedPackedIntervalRTree","ArrayListVisitor","IndexedPointInAreaLocator","IntervalIndexedGeometry","staticAccessors$44","rcc","SegmentVisitor","GeometryGraph","PlanarGraph$$1","parentGeom","argIndex$1","parentGeom$1","boundaryNodeRule$1","computeRingSelfNodes","li$1","computeRingSelfNodes$1","isDoneIfProperInt","esi","isRings","computeAllSegments","edgelist","lr","cwLeft","cwRight","eiIt","GeometryGraphOp","g0$2","GeometryMapper","op$1","mapped$1","gr","resultPointList","resultLineList","opcode","newEdges","overlayOpCode","baseSplitEdges","lineBuilder","pointBuilder","graphNode","newNode","ni","geom1","gov","geomOv","dim0","dim1","resultDimension","geomFact","loc0","loc1","loc0$1","loc1$1","FuzzyPointLocator","boundaryDistanceTolerance","extracter","PolygonalLineworkExtracter","linework","OffsetPointGenerator","offsetPts","doLeft","doRight","midX","midY","offsetLeft","offsetRight","OverlayResultValidator","staticAccessors$46","overlayOp","expectedInterior","overlayOp$1","ptGen","resultInInterior","GeometryCombiner","elems","elemGeom","combiner","combiner$1","combiner$2","obj0","obj1","obj0$1","obj1$1","obj2","list$1","CascadedPolygonUnion","staticAccessors$47","geomTree","disjointGeoms","intersectingGeoms","elem","g0Env","g1Env","combo","commonEnv","itemTree","unionAll","union","common","disjointPolys","g0Int","g1Int","overallUnion","gColl","factory$1","gColl$1","unionAll$1","UnionOp","buffer","steps","results","buffered","bufferFeature","multiBuffered","projection","defineProjection","projected","projectCoords","reader","writer","coordsIsNaN","unprojectCoords","proj","rotation","geoAzimuthalEquidistant","convex","convexHull","concaveman","cloneFeature","cloneFeatureCollection","cloneGeometry","cloned","cloneProperties","deepSlice","getSqDist","getSqSegDist","simplifyRadialDist","sqTolerance","prevPoint","simplifyDPStep","first","simplified","maxSqDist","sqDist","simplifyDouglasPeucker","simplify","highestQuality","simplify$1","highQuality","simplifyGeom","simplifyLine","simplifyPolygon","simpleRing","checkValidity","booleanPointInPolygon","inBBox","insidePoly","inRing","inHole","ignoreBoundary","isInside","xi","yi","xj","yj","onBoundary","intersect","lineSegment","lineSegmentFeature","segments","createSegments","currentCoords","coords1","coords2","lineIntersect","line2","unique","rbush","match","y3","y4","numeA","numeB","uA","uB","polygonToLine","multiPolygonToLine","coordsToLine","multiPoly","booleanDisjoint","feature1","feature2","bool","flatten1","flatten2","disjoint","geom2","compareCoords","isPointOnLine","isLineOnLine","isLineInPoly","isPolyInPoly","lineString1","lineString2","doLinesIntersect","_a","_b","_c","lineSegmentStart","lineSegmentEnd","pair1","pair2","booleanIntersects","from","to","coordinates1","coordinates2","dLat","dLon","lat1","lat2","poly1","poly2","intersection","polygonClipping","hexGrid","cellSide","clonedProperties","centerY","centerX","xFraction","cellWidth","yFraction","cellHeight","hex_width","hex_height","box_width","box_height","x_interval","y_interval","x_span","x_count","x_adjust","y_count","y_adjust","hasOffsetY","cosines","sines","isOdd","center_x","center_y","hexTriangles","triangle","hex","hexagon","rx","ry","vertices","triangles","unioned"],"mappings":"0EASO,IAAIA,GAAc,YAOdC,GAAU,CACjB,YAAaD,GAAc,IAC3B,YAAaA,GAAc,IAC3B,QAASA,GAAc,OACvB,KAAMA,GAAc,QACpB,OAAQA,GAAc,MACtB,WAAYA,GAAc,IAC1B,WAAYA,GAAc,IAC1B,OAAQA,GACR,OAAQA,GACR,MAAOA,GAAc,SACrB,YAAaA,GAAc,IAC3B,YAAaA,GAAc,IAC3B,cAAeA,GAAc,KAC7B,QAAS,EACT,MAAOA,GAAc,MACzB,EAOWE,GAAe,CACtB,YAAa,IACb,YAAa,IACb,QAAS,EAAI,OACb,KAAM,QACN,OAAQ,MACR,WAAY,EAAI,IAChB,WAAY,EAAI,IAChB,OAAQ,EACR,OAAQ,EACR,MAAO,EAAI,SACX,YAAa,IACb,YAAa,IACb,cAAe,EAAI,KACnB,QAAS,EAAIF,GACb,MAAO,SACX,EAOWG,GAAc,CACrB,MAAO,UACP,YAAa,IACb,YAAa,IACb,KAAM,aACN,SAAU,KACV,OAAQ,eACR,WAAY,KACZ,WAAY,KACZ,OAAQ,EACR,OAAQ,EACR,MAAO,OACP,YAAa,IACb,YAAa,IACb,MAAO,WACX,EAqBO,SAASC,GAAQC,EAAMC,EAAYC,EAAS,CAC3CA,IAAY,SAAUA,EAAU,CAAE,GACtC,IAAIC,EAAO,CAAE,KAAM,WACnB,OAAID,EAAQ,KAAO,GAAKA,EAAQ,MAC5BC,EAAK,GAAKD,EAAQ,IAElBA,EAAQ,OACRC,EAAK,KAAOD,EAAQ,MAExBC,EAAK,WAAaF,GAAc,GAChCE,EAAK,SAAWH,EACTG,CACX,CAgBO,SAASC,GAASC,EAAMC,EAAaC,EAAU,CAElD,OAAQF,EAAI,CACR,IAAK,QACD,OAAOG,GAAMF,CAAW,EAAE,SAC9B,IAAK,aACD,OAAOG,GAAWH,CAAW,EAAE,SACnC,IAAK,UACD,OAAOI,GAAQJ,CAAW,EAAE,SAChC,IAAK,aACD,OAAOK,GAAWL,CAAW,EAAE,SACnC,IAAK,kBACD,OAAOM,GAAgBN,CAAW,EAAE,SACxC,IAAK,eACD,OAAOO,GAAaP,CAAW,EAAE,SACrC,QACI,MAAM,IAAI,MAAMD,EAAO,aAAa,CAC3C,CACL,CAgBO,SAASG,GAAMF,EAAaL,EAAYC,EAAS,CAEpD,GADIA,IAAY,SAAUA,EAAU,CAAE,GAClC,CAACI,EACD,MAAM,IAAI,MAAM,yBAAyB,EAE7C,GAAI,CAAC,MAAM,QAAQA,CAAW,EAC1B,MAAM,IAAI,MAAM,8BAA8B,EAElD,GAAIA,EAAY,OAAS,EACrB,MAAM,IAAI,MAAM,6CAA6C,EAEjE,GAAI,CAACQ,GAASR,EAAY,CAAC,CAAC,GAAK,CAACQ,GAASR,EAAY,CAAC,CAAC,EACrD,MAAM,IAAI,MAAM,kCAAkC,EAEtD,IAAIN,EAAO,CACP,KAAM,QACN,YAAaM,CACrB,EACI,OAAOP,GAAQC,EAAMC,EAAYC,CAAO,CAC5C,CAqBO,SAASa,GAAOT,EAAaL,EAAYC,EAAS,CACrD,OAAIA,IAAY,SAAUA,EAAU,CAAE,GAC/Bc,GAAkBV,EAAY,IAAI,SAAUW,EAAQ,CACvD,OAAOT,GAAMS,EAAQhB,CAAU,CACvC,CAAK,EAAGC,CAAO,CACf,CAgBO,SAASQ,GAAQJ,EAAaL,EAAYC,EAAS,CAClDA,IAAY,SAAUA,EAAU,CAAE,GACtC,QAASgB,EAAK,EAAGC,EAAgBb,EAAaY,EAAKC,EAAc,OAAQD,IAAM,CAC3E,IAAIE,EAAOD,EAAcD,CAAE,EAC3B,GAAIE,EAAK,OAAS,EACd,MAAM,IAAI,MAAM,6DAA6D,EAEjF,QAASC,EAAI,EAAGA,EAAID,EAAKA,EAAK,OAAS,CAAC,EAAE,OAAQC,IAE9C,GAAID,EAAKA,EAAK,OAAS,CAAC,EAAEC,CAAC,IAAMD,EAAK,CAAC,EAAEC,CAAC,EACtC,MAAM,IAAI,MAAM,6CAA6C,CAGxE,CACD,IAAIrB,EAAO,CACP,KAAM,UACN,YAAaM,CACrB,EACI,OAAOP,GAAQC,EAAMC,EAAYC,CAAO,CAC5C,CAmBO,SAASoB,GAAShB,EAAaL,EAAYC,EAAS,CACvD,OAAIA,IAAY,SAAUA,EAAU,CAAE,GAC/Bc,GAAkBV,EAAY,IAAI,SAAUW,EAAQ,CACvD,OAAOP,GAAQO,EAAQhB,CAAU,CACzC,CAAK,EAAGC,CAAO,CACf,CAkBO,SAASO,GAAWH,EAAaL,EAAYC,EAAS,CAEzD,GADIA,IAAY,SAAUA,EAAU,CAAE,GAClCI,EAAY,OAAS,EACrB,MAAM,IAAI,MAAM,uDAAuD,EAE3E,IAAIN,EAAO,CACP,KAAM,aACN,YAAaM,CACrB,EACI,OAAOP,GAAQC,EAAMC,EAAYC,CAAO,CAC5C,CAoBO,SAASqB,GAAYjB,EAAaL,EAAYC,EAAS,CAC1D,OAAIA,IAAY,SAAUA,EAAU,CAAE,GAC/Bc,GAAkBV,EAAY,IAAI,SAAUW,EAAQ,CACvD,OAAOR,GAAWQ,EAAQhB,CAAU,CAC5C,CAAK,EAAGC,CAAO,CACf,CAuBO,SAASc,GAAkBQ,EAAUtB,EAAS,CAC7CA,IAAY,SAAUA,EAAU,CAAE,GACtC,IAAIuB,EAAK,CAAE,KAAM,qBACjB,OAAIvB,EAAQ,KACRuB,EAAG,GAAKvB,EAAQ,IAEhBA,EAAQ,OACRuB,EAAG,KAAOvB,EAAQ,MAEtBuB,EAAG,SAAWD,EACPC,CACX,CAkBO,SAASb,GAAgBN,EAAaL,EAAYC,EAAS,CAC1DA,IAAY,SAAUA,EAAU,CAAE,GACtC,IAAIF,EAAO,CACP,KAAM,kBACN,YAAaM,CACrB,EACI,OAAOP,GAAQC,EAAMC,EAAYC,CAAO,CAC5C,CAkBO,SAASS,GAAWL,EAAaL,EAAYC,EAAS,CACrDA,IAAY,SAAUA,EAAU,CAAE,GACtC,IAAIF,EAAO,CACP,KAAM,aACN,YAAaM,CACrB,EACI,OAAOP,GAAQC,EAAMC,EAAYC,CAAO,CAC5C,CAmBO,SAASW,GAAaP,EAAaL,EAAYC,EAAS,CACvDA,IAAY,SAAUA,EAAU,CAAE,GACtC,IAAIF,EAAO,CACP,KAAM,eACN,YAAaM,CACrB,EACI,OAAOP,GAAQC,EAAMC,EAAYC,CAAO,CAC5C,CAmBO,SAASwB,GAAmBC,EAAY1B,EAAYC,EAAS,CAC5DA,IAAY,SAAUA,EAAU,CAAE,GACtC,IAAIF,EAAO,CACP,KAAM,qBACN,WAAY2B,CACpB,EACI,OAAO5B,GAAQC,EAAMC,EAAYC,CAAO,CAC5C,CAcO,SAAS0B,GAAMC,EAAKC,EAAW,CAElC,GADIA,IAAc,SAAUA,EAAY,GACpCA,GAAa,EAAEA,GAAa,GAC5B,MAAM,IAAI,MAAM,qCAAqC,EAEzD,IAAIC,EAAa,KAAK,IAAI,GAAID,GAAa,CAAC,EAC5C,OAAO,KAAK,MAAMD,EAAME,CAAU,EAAIA,CAC1C,CAWO,SAASC,GAAgBC,EAASC,EAAO,CACxCA,IAAU,SAAUA,EAAQ,cAChC,IAAIC,EAASvC,GAAQsC,CAAK,EAC1B,GAAI,CAACC,EACD,MAAM,IAAI,MAAMD,EAAQ,mBAAmB,EAE/C,OAAOD,EAAUE,CACrB,CAWO,SAASC,GAAgBC,EAAUH,EAAO,CACzCA,IAAU,SAAUA,EAAQ,cAChC,IAAIC,EAASvC,GAAQsC,CAAK,EAC1B,GAAI,CAACC,EACD,MAAM,IAAI,MAAMD,EAAQ,mBAAmB,EAE/C,OAAOG,EAAWF,CACtB,CAWO,SAASG,GAAgBD,EAAUH,EAAO,CAC7C,OAAOK,GAAiBH,GAAgBC,EAAUH,CAAK,CAAC,CAC5D,CASO,SAASM,GAAiBC,EAAS,CACtC,IAAIC,EAAQD,EAAU,IACtB,OAAIC,EAAQ,IACRA,GAAS,KAENA,CACX,CAQO,SAASH,GAAiBN,EAAS,CACtC,IAAIU,EAAUV,GAAW,EAAI,KAAK,IAClC,OAAQU,EAAU,IAAO,KAAK,EAClC,CAQO,SAASC,GAAiBD,EAAS,CACtC,IAAIV,EAAUU,EAAU,IACxB,OAAQV,EAAU,KAAK,GAAM,GACjC,CAUO,SAASY,GAAcC,EAAQC,EAAcC,EAAW,CAG3D,GAFID,IAAiB,SAAUA,EAAe,cAC1CC,IAAc,SAAUA,EAAY,cACpC,EAAEF,GAAU,GACZ,MAAM,IAAI,MAAM,kCAAkC,EAEtD,OAAOd,GAAgBI,GAAgBU,EAAQC,CAAY,EAAGC,CAAS,CAC3E,CASO,SAASC,GAAYC,EAAMH,EAAcC,EAAW,CAGvD,GAFID,IAAiB,SAAUA,EAAe,UAC1CC,IAAc,SAAUA,EAAY,cACpC,EAAEE,GAAQ,GACV,MAAM,IAAI,MAAM,gCAAgC,EAEpD,IAAIC,EAAcrD,GAAYiD,CAAY,EAC1C,GAAI,CAACI,EACD,MAAM,IAAI,MAAM,wBAAwB,EAE5C,IAAIC,EAActD,GAAYkD,CAAS,EACvC,GAAI,CAACI,EACD,MAAM,IAAI,MAAM,qBAAqB,EAEzC,OAAQF,EAAOC,EAAeC,CAClC,CAYO,SAAStC,GAASe,EAAK,CAC1B,MAAO,CAAC,MAAMA,CAAG,GAAKA,IAAQ,MAAQ,CAAC,MAAM,QAAQA,CAAG,CAC5D,CAYO,SAASwB,GAASC,EAAO,CAC5B,MAAO,CAAC,CAACA,GAASA,EAAM,cAAgB,MAC5C,CAsBO,SAASC,GAAaC,EAAM,CAC/B,GAAI,CAACA,EACD,MAAM,IAAI,MAAM,kBAAkB,EAEtC,GAAI,CAAC,MAAM,QAAQA,CAAI,EACnB,MAAM,IAAI,MAAM,uBAAuB,EAE3C,GAAIA,EAAK,SAAW,GAAKA,EAAK,SAAW,EACrC,MAAM,IAAI,MAAM,yCAAyC,EAE7DA,EAAK,QAAQ,SAAU3B,EAAK,CACxB,GAAI,CAACf,GAASe,CAAG,EACb,MAAM,IAAI,MAAM,gCAAgC,CAE5D,CAAK,CACL,CAsBO,SAAS4B,GAAWC,EAAI,CAC3B,GAAI,CAACA,EACD,MAAM,IAAI,MAAM,gBAAgB,EAEpC,GAAI,CAAC,SAAU,QAAQ,EAAE,QAAQ,OAAOA,CAAE,IAAM,GAC5C,MAAM,IAAI,MAAM,iCAAiC,CAEzD,4iBC1qBO,SAASC,GAASC,EAAO,CAC5B,GAAI,CAACA,EACD,MAAM,IAAI,MAAM,mBAAmB,EAEvC,GAAI,CAAC,MAAM,QAAQA,CAAK,EAAG,CACvB,GAAIA,EAAM,OAAS,WACfA,EAAM,WAAa,MACnBA,EAAM,SAAS,OAAS,QACxB,OAAOA,EAAM,SAAS,YAE1B,GAAIA,EAAM,OAAS,QACf,OAAOA,EAAM,WAEpB,CACD,GAAI,MAAM,QAAQA,CAAK,GACnBA,EAAM,QAAU,GAChB,CAAC,MAAM,QAAQA,EAAM,CAAC,CAAC,GACvB,CAAC,MAAM,QAAQA,EAAM,CAAC,CAAC,EACvB,OAAOA,EAEX,MAAM,IAAI,MAAM,oDAAoD,CACxE,CAaO,SAASC,GAAU5C,EAAQ,CAC9B,GAAI,MAAM,QAAQA,CAAM,EACpB,OAAOA,EAGX,GAAIA,EAAO,OAAS,WAChB,GAAIA,EAAO,WAAa,KACpB,OAAOA,EAAO,SAAS,oBAKvBA,EAAO,YACP,OAAOA,EAAO,YAGtB,MAAM,IAAI,MAAM,6DAA6D,CACjF,CA2HO,SAAS6C,GAAQC,EAAS,CAC7B,OAAIA,EAAQ,OAAS,UACVA,EAAQ,SAEZA,CACX,CAmBO,SAASC,GAAQD,EAASE,EAAO,CACpC,OAAIF,EAAQ,OAAS,oBACV,oBAEPA,EAAQ,OAAS,qBACV,qBAEPA,EAAQ,OAAS,WAAaA,EAAQ,WAAa,KAC5CA,EAAQ,SAAS,KAErBA,EAAQ,IACnB,CCzMA,SAASG,GAAYH,EAAS7D,EAAS,CAC/BA,IAAY,SAAUA,EAAU,CAAE,GAEtC,IAAIiE,EAAS,OAAOjE,GAAY,SAAWA,EAAQ,OAASA,EAC5D,GAAI,CAAC6D,EACD,MAAM,IAAI,MAAM,qBAAqB,EACzC,IAAI1D,EAAO2D,GAAQD,CAAO,EAEtBK,EAAY,CAAA,EAChB,OAAQ/D,EAAI,CACR,IAAK,aACD+D,EAAYC,GAAUN,CAAO,EAC7B,MACJ,IAAK,kBACL,IAAK,UACDF,GAAUE,CAAO,EAAE,QAAQ,SAAUO,EAAM,CACvCF,EAAU,KAAKC,GAAUC,CAAI,CAAC,CAC9C,CAAa,EACD,MACJ,IAAK,eACDT,GAAUE,CAAO,EAAE,QAAQ,SAAUzC,EAAU,CAC3C,IAAIiD,EAAa,CAAA,EACjBjD,EAAS,QAAQ,SAAUF,EAAM,CAC7BmD,EAAW,KAAKF,GAAUjD,CAAI,CAAC,CACnD,CAAiB,EACDgD,EAAU,KAAKG,CAAU,CACzC,CAAa,EACD,MACJ,IAAK,QACD,OAAOR,EACX,IAAK,aACD,IAAIS,EAAW,CAAA,EACfX,GAAUE,CAAO,EAAE,QAAQ,SAAUH,EAAO,CACxC,IAAIa,EAAMb,EAAM,KAAK,GAAG,EACnB,OAAO,UAAU,eAAe,KAAKY,EAAUC,CAAG,IACnDL,EAAU,KAAKR,CAAK,EACpBY,EAASC,CAAG,EAAI,GAEpC,CAAa,EACD,MACJ,QACI,MAAM,IAAI,MAAMpE,EAAO,yBAAyB,CACvD,CAED,OAAI0D,EAAQ,YACJI,IAAW,IACXJ,EAAQ,YAAcK,EACfL,GAEJ,CAAE,KAAM1D,EAAM,YAAa+D,CAAS,EAGvCD,IAAW,IACXJ,EAAQ,SAAS,YAAcK,EACxBL,GAEJhE,GAAQ,CAAE,KAAMM,EAAM,YAAa+D,CAAW,EAAEL,EAAQ,WAAY,CACvE,KAAMA,EAAQ,KACd,GAAIA,EAAQ,EACxB,CAAS,CAET,CAQA,SAASM,GAAUC,EAAM,CACrB,IAAIvD,EAAS8C,GAAUS,CAAI,EAE3B,GAAIvD,EAAO,SAAW,GAAK,CAAC2D,GAAO3D,EAAO,CAAC,EAAGA,EAAO,CAAC,CAAC,EACnD,OAAOA,EACX,IAAI4D,EAAY,CAAA,EACZC,EAAe7D,EAAO,OAAS,EAC/B8D,EAAkBF,EAAU,OAChCA,EAAU,KAAK5D,EAAO,CAAC,CAAC,EACxB,QAAS+D,EAAI,EAAGA,EAAIF,EAAcE,IAAK,CACnC,IAAIC,EAAiBJ,EAAUA,EAAU,OAAS,CAAC,EAC/C5D,EAAO+D,CAAC,EAAE,CAAC,IAAMC,EAAe,CAAC,GACjChE,EAAO+D,CAAC,EAAE,CAAC,IAAMC,EAAe,CAAC,IAGjCJ,EAAU,KAAK5D,EAAO+D,CAAC,CAAC,EACxBD,EAAkBF,EAAU,OACxBE,EAAkB,GACdG,GAAqBL,EAAUE,EAAkB,CAAC,EAAGF,EAAUE,EAAkB,CAAC,EAAGF,EAAUE,EAAkB,CAAC,CAAC,GACnHF,EAAU,OAAOA,EAAU,OAAS,EAAG,CAAC,EAGvD,CAGD,GAFAA,EAAU,KAAK5D,EAAOA,EAAO,OAAS,CAAC,CAAC,EACxC8D,EAAkBF,EAAU,OACxBD,GAAO3D,EAAO,CAAC,EAAGA,EAAOA,EAAO,OAAS,CAAC,CAAC,GAAK8D,EAAkB,EAClE,MAAM,IAAI,MAAM,iBAAiB,EACrC,OAAIG,GAAqBL,EAAUE,EAAkB,CAAC,EAAGF,EAAUE,EAAkB,CAAC,EAAGF,EAAUE,EAAkB,CAAC,CAAC,GACnHF,EAAU,OAAOA,EAAU,OAAS,EAAG,CAAC,EACrCA,CACX,CASA,SAASD,GAAOO,EAAKC,EAAK,CACtB,OAAOD,EAAI,CAAC,IAAMC,EAAI,CAAC,GAAKD,EAAI,CAAC,IAAMC,EAAI,CAAC,CAChD,CAWA,SAASF,GAAqBG,EAAOC,EAAK5E,EAAO,CAC7C,IAAI6E,EAAI7E,EAAM,CAAC,EAAG8E,EAAI9E,EAAM,CAAC,EACzB+E,EAASJ,EAAM,CAAC,EAAGK,EAASL,EAAM,CAAC,EACnCM,EAAOL,EAAI,CAAC,EAAGM,EAAON,EAAI,CAAC,EAC3BO,EAAMN,EAAIE,EACVK,EAAMN,EAAIE,EACVK,EAAMJ,EAAOF,EACbO,EAAMJ,EAAOF,EACbO,EAAQJ,EAAMG,EAAMF,EAAMC,EAC9B,OAAIE,IAAU,EACH,GACF,KAAK,IAAIF,CAAG,GAAK,KAAK,IAAIC,CAAG,EAC3BD,EAAM,EAAIN,GAAUF,GAAKA,GAAKI,EAAOA,GAAQJ,GAAKA,GAAKE,EAEvDO,EAAM,EAAIN,GAAUF,GAAKA,GAAKI,EAAOA,GAAQJ,GAAKA,GAAKE,CACtE,CC1HA,SAASQ,GAAUjC,EAASkC,EAAUC,EAAkB,CAEtD,GAAInC,IAAY,KA4BhB,QA3BI1C,EACF8E,EACAC,EACAhG,EACAiG,EACApF,EACAqF,EACAC,EAAa,EACbC,EAAa,EACbC,EACApG,EAAO0D,EAAQ,KACf2C,EAAsBrG,IAAS,oBAC/BsG,EAAYtG,IAAS,UACrBuG,EAAOF,EAAsB3C,EAAQ,SAAS,OAAS,EAchD8C,EAAe,EAAGA,EAAeD,EAAMC,IAAgB,CAC9DP,EAA0BI,EACtB3C,EAAQ,SAAS8C,CAAY,EAAE,SAC/BF,EACA5C,EAAQ,SACRA,EACJ0C,EAAuBH,EACnBA,EAAwB,OAAS,qBACjC,GACJD,EAAQI,EACJH,EAAwB,WAAW,OACnC,EAEJ,QAASQ,EAAY,EAAGA,EAAYT,EAAOS,IAAa,CACtD,IAAIC,EAAoB,EACpBC,EAAgB,EAMpB,GALA5G,EAAWqG,EACPH,EAAwB,WAAWQ,CAAS,EAC5CR,EAGAlG,IAAa,KACjB,CAAAa,EAASb,EAAS,YAClB,IAAI6G,GAAW7G,EAAS,KAQxB,OANAmG,EACEL,IACCe,KAAa,WAAaA,KAAa,gBACpC,EACA,EAEEA,GAAQ,CACd,KAAK,KACH,MACF,IAAK,QACH,GACEhB,EACEhF,EACAuF,EACAK,EACAE,EACAC,CACd,IAAkB,GAEN,MAAO,GACTR,IACAO,IACA,MACF,IAAK,aACL,IAAK,aACH,IAAK1F,EAAI,EAAGA,EAAIJ,EAAO,OAAQI,IAAK,CAClC,GACE4E,EACEhF,EAAOI,CAAC,EACRmF,EACAK,EACAE,EACAC,CAChB,IAAoB,GAEN,MAAO,GACTR,IACIS,KAAa,cAAcF,GAChC,CACGE,KAAa,cAAcF,IAC/B,MACF,IAAK,UACL,IAAK,kBACH,IAAK1F,EAAI,EAAGA,EAAIJ,EAAO,OAAQI,IAAK,CAClC,IAAK8E,EAAI,EAAGA,EAAIlF,EAAOI,CAAC,EAAE,OAASkF,EAAYJ,IAAK,CAClD,GACEF,EACEhF,EAAOI,CAAC,EAAE8E,CAAC,EACXK,EACAK,EACAE,EACAC,CAClB,IAAsB,GAEN,MAAO,GACTR,GACD,CACGS,KAAa,mBAAmBF,IAChCE,KAAa,WAAWD,GAC7B,CACGC,KAAa,WAAWF,IAC5B,MACF,IAAK,eACH,IAAK1F,EAAI,EAAGA,EAAIJ,EAAO,OAAQI,IAAK,CAElC,IADA2F,EAAgB,EACXb,EAAI,EAAGA,EAAIlF,EAAOI,CAAC,EAAE,OAAQ8E,IAAK,CACrC,IAAKC,EAAI,EAAGA,EAAInF,EAAOI,CAAC,EAAE8E,CAAC,EAAE,OAASI,EAAYH,IAAK,CACrD,GACEH,EACEhF,EAAOI,CAAC,EAAE8E,CAAC,EAAEC,CAAC,EACdI,EACAK,EACAE,EACAC,CACpB,IAAwB,GAEN,MAAO,GACTR,GACD,CACDQ,GACD,CACDD,GACD,CACD,MACF,IAAK,qBACH,IAAK1F,EAAI,EAAGA,EAAIjB,EAAS,WAAW,OAAQiB,IAC1C,GACE2E,GAAU5F,EAAS,WAAWiB,CAAC,EAAG4E,EAAUC,CAAgB,IAC5D,GAEA,MAAO,GACX,MACF,QACE,MAAM,IAAI,MAAM,uBAAuB,CAC1C,EACF,CACF,CACH,CAoDA,SAASgB,GAAYnD,EAASkC,EAAUkB,EAAcjB,EAAkB,CACtE,IAAIkB,EAAgBD,EACpB,OAAAnB,GACEjC,EACA,SACEsD,EACAb,EACAK,EACAE,EACAC,EACA,CACIR,IAAe,GAAKW,IAAiB,OACvCC,EAAgBC,EAEhBD,EAAgBnB,EACdmB,EACAC,EACAb,EACAK,EACAE,EACAC,CACV,CACK,EACDd,CACJ,EACSkB,CACT,CA4BA,SAASE,GAASvD,EAASkC,EAAU,CACnC,IAAInB,EACJ,OAAQf,EAAQ,KAAI,CAClB,IAAK,oBACH,IAAKe,EAAI,EAAGA,EAAIf,EAAQ,SAAS,QAC3BkC,EAASlC,EAAQ,SAASe,CAAC,EAAE,WAAYA,CAAC,IAAM,GADbA,IACvC,CAEF,MACF,IAAK,UACHmB,EAASlC,EAAQ,WAAY,CAAC,EAC9B,KACH,CACH,CA8CA,SAASwD,GAAWxD,EAASkC,EAAUkB,EAAc,CACnD,IAAIC,EAAgBD,EACpB,OAAAG,GAASvD,EAAS,SAAUyD,EAAmBX,EAAc,CACvDA,IAAiB,GAAKM,IAAiB,OACzCC,EAAgBI,EAEhBJ,EAAgBnB,EAASmB,EAAeI,EAAmBX,CAAY,CAC7E,CAAG,EACMO,CACT,CA6BA,SAASK,GAAY1D,EAASkC,EAAU,CACtC,GAAIlC,EAAQ,OAAS,UACnBkC,EAASlC,EAAS,CAAC,UACVA,EAAQ,OAAS,oBAC1B,QAASe,EAAI,EAAGA,EAAIf,EAAQ,SAAS,QAC/BkC,EAASlC,EAAQ,SAASe,CAAC,EAAGA,CAAC,IAAM,GADEA,IAC3C,CAGN,CA4CA,SAAS4C,GAAc3D,EAASkC,EAAUkB,EAAc,CACtD,IAAIC,EAAgBD,EACpB,OAAAM,GAAY1D,EAAS,SAAU4D,EAAgBd,EAAc,CACvDA,IAAiB,GAAKM,IAAiB,OACzCC,EAAgBO,EACbP,EAAgBnB,EAASmB,EAAeO,EAAgBd,CAAY,CAC7E,CAAG,EACMO,CACT,CAiBA,SAASQ,GAAS7D,EAAS,CACzB,IAAI9C,EAAS,CAAA,EACb,OAAA+E,GAAUjC,EAAS,SAAUH,EAAO,CAClC3C,EAAO,KAAK2C,CAAK,CACrB,CAAG,EACM3C,CACT,CAkCA,SAAS4G,GAAS9D,EAASkC,EAAU,CACnC,IAAInB,EACFzD,EACAyG,EACA1H,EACAiG,EACAC,EACAG,EACAsB,EACAC,EACAC,EACApB,EAAe,EACfH,EAAsB3C,EAAQ,OAAS,oBACvC4C,EAAY5C,EAAQ,OAAS,UAC7B6C,EAAOF,EAAsB3C,EAAQ,SAAS,OAAS,EAczD,IAAKe,EAAI,EAAGA,EAAI8B,EAAM9B,IAAK,CA4BzB,IA3BAwB,EAA0BI,EACtB3C,EAAQ,SAASe,CAAC,EAAE,SACpB6B,EACA5C,EAAQ,SACRA,EACJgE,EAAoBrB,EAChB3C,EAAQ,SAASe,CAAC,EAAE,WACpB6B,EACA5C,EAAQ,WACR,GACJiE,EAActB,EACV3C,EAAQ,SAASe,CAAC,EAAE,KACpB6B,EACA5C,EAAQ,KACR,OACJkE,EAAYvB,EACR3C,EAAQ,SAASe,CAAC,EAAE,GACpB6B,EACA5C,EAAQ,GACR,OACJ0C,EAAuBH,EACnBA,EAAwB,OAAS,qBACjC,GACJD,EAAQI,EACJH,EAAwB,WAAW,OACnC,EAECwB,EAAI,EAAGA,EAAIzB,EAAOyB,IAAK,CAM1B,GALA1H,EAAWqG,EACPH,EAAwB,WAAWwB,CAAC,EACpCxB,EAGAlG,IAAa,KAAM,CACrB,GACE6F,EACE,KACAY,EACAkB,EACAC,EACAC,CACZ,IAAgB,GAEN,MAAO,GACT,QACD,CACD,OAAQ7H,EAAS,KAAI,CACnB,IAAK,QACL,IAAK,aACL,IAAK,aACL,IAAK,UACL,IAAK,kBACL,IAAK,eAAgB,CACnB,GACE6F,EACE7F,EACAyG,EACAkB,EACAC,EACAC,CACd,IAAkB,GAEN,MAAO,GACT,KACD,CACD,IAAK,qBAAsB,CACzB,IAAK5G,EAAI,EAAGA,EAAIjB,EAAS,WAAW,OAAQiB,IAC1C,GACE4E,EACE7F,EAAS,WAAWiB,CAAC,EACrBwF,EACAkB,EACAC,EACAC,CAChB,IAAoB,GAEN,MAAO,GAEX,KACD,CACD,QACE,MAAM,IAAI,MAAM,uBAAuB,CAC1C,CACF,CAEDpB,GACD,CACH,CAkDA,SAASqB,GAAWnE,EAASkC,EAAUkB,EAAc,CACnD,IAAIC,EAAgBD,EACpB,OAAAU,GACE9D,EACA,SACEoE,EACAtB,EACAkB,EACAC,EACAC,EACA,CACIpB,IAAiB,GAAKM,IAAiB,OACzCC,EAAgBe,EAEhBf,EAAgBnB,EACdmB,EACAe,EACAtB,EACAkB,EACAC,EACAC,CACV,CACK,CACL,EACSb,CACT,CA8BA,SAASgB,GAAYrE,EAASkC,EAAU,CACtC4B,GAAS9D,EAAS,SAAU3D,EAAUyG,EAAc5G,EAAYuD,EAAME,EAAI,CAExE,IAAIrD,EAAOD,IAAa,KAAO,KAAOA,EAAS,KAC/C,OAAQC,EAAI,CACV,KAAK,KACL,IAAK,QACL,IAAK,aACL,IAAK,UACH,OACE4F,EACElG,GAAQK,EAAUH,EAAY,CAAE,KAAMuD,EAAM,GAAIE,EAAI,EACpDmD,EACA,CACZ,IAAgB,GAEC,GACT,MACH,CAED,IAAII,EAGJ,OAAQ5G,EAAI,CACV,IAAK,aACH4G,EAAW,QACX,MACF,IAAK,kBACHA,EAAW,aACX,MACF,IAAK,eACHA,EAAW,UACX,KACH,CAED,QACMF,EAAoB,EACxBA,EAAoB3G,EAAS,YAAY,OACzC2G,IACA,CACA,IAAIsB,EAAajI,EAAS,YAAY2G,CAAiB,EACnD/G,EAAO,CACT,KAAMiH,EACN,YAAaoB,CACrB,EACM,GACEpC,EAASlG,GAAQC,EAAMC,CAAU,EAAG4G,EAAcE,CAAiB,IACnE,GAEA,MAAO,EACV,CACL,CAAG,CACH,CA8CA,SAASuB,GAAcvE,EAASkC,EAAUkB,EAAc,CACtD,IAAIC,EAAgBD,EACpB,OAAAiB,GACErE,EACA,SAAU4D,EAAgBd,EAAcE,EAAmB,CAEvDF,IAAiB,GACjBE,IAAsB,GACtBI,IAAiB,OAEjBC,EAAgBO,EAEhBP,EAAgBnB,EACdmB,EACAO,EACAd,EACAE,CACV,CACK,CACL,EACSK,CACT,CAuCA,SAASmB,GAAYxE,EAASkC,EAAU,CACtCmC,GAAYrE,EAAS,SAAUhE,EAAS8G,EAAcE,EAAmB,CACvE,IAAIyB,EAAe,EAGnB,GAAKzI,EAAQ,SAEb,KAAIM,EAAON,EAAQ,SAAS,KAC5B,GAAI,EAAAM,IAAS,SAAWA,IAAS,cAGjC,KAAIoI,EACAC,EAAuB,EACvBC,EAAqB,EACrBC,EAAgB,EACpB,GACE5C,GACEjG,EACA,SACEsH,EACAb,EACAqC,EACAC,EACA9B,EACA,CAEA,GACEyB,IAAmB,QACnB5B,EAAe6B,GACfI,EAAsBH,GACtB3B,EAAgB4B,EAChB,CACAH,EAAiBpB,EACjBqB,EAAuB7B,EACvB8B,EAAqBG,EACrBF,EAAgB5B,EAChBwB,EAAe,EACf,MACD,CACD,IAAIO,EAAiBtI,GACnB,CAACgI,EAAgBpB,CAAY,EAC7BtH,EAAQ,UACpB,EACU,GACEkG,EACE8C,EACAlC,EACAE,EACAC,EACAwB,CACd,IAAkB,GAEN,MAAO,GACTA,IACAC,EAAiBpB,CAClB,CACT,IAAY,GAEN,MAAO,IACb,CAAG,CACH,CAuDA,SAAS2B,GAAcjF,EAASkC,EAAUkB,EAAc,CACtD,IAAIC,EAAgBD,EAChB8B,EAAU,GACd,OAAAV,GACExE,EACA,SACEgF,EACAlC,EACAE,EACAC,EACAwB,EACA,CACIS,IAAY,IAAS9B,IAAiB,OACxCC,EAAgB2B,EAEhB3B,EAAgBnB,EACdmB,EACA2B,EACAlC,EACAE,EACAC,EACAwB,CACV,EACMS,EAAU,EACX,CACL,EACS7B,CACT,CAgCA,SAAS8B,GAASnF,EAASkC,EAAU,CAEnC,GAAI,CAAClC,EAAS,MAAM,IAAI,MAAM,qBAAqB,EAEnDqE,GAAYrE,EAAS,SAAUhE,EAAS8G,EAAcE,EAAmB,CACvE,GAAIhH,EAAQ,WAAa,KACzB,KAAIM,EAAON,EAAQ,SAAS,KACxBkB,EAASlB,EAAQ,SAAS,YAC9B,OAAQM,EAAI,CACV,IAAK,aACH,GAAI4F,EAASlG,EAAS8G,EAAcE,EAAmB,EAAG,CAAC,IAAM,GAC/D,MAAO,GACT,MACF,IAAK,UACH,QACMC,EAAgB,EACpBA,EAAgB/F,EAAO,OACvB+F,IAEA,GACEf,EACExF,GAAWQ,EAAO+F,CAAa,EAAGjH,EAAQ,UAAU,EACpD8G,EACAE,EACAC,CACd,IAAkB,GAEN,MAAO,GAEX,KACH,EACL,CAAG,CACH,CAgDA,SAASmC,GAAWpF,EAASkC,EAAUkB,EAAc,CACnD,IAAIC,EAAgBD,EACpB,OAAA+B,GACEnF,EACA,SAAUqF,EAAavC,EAAcE,EAAmBC,EAAe,CACjEH,IAAiB,GAAKM,IAAiB,OACzCC,EAAgBgC,EAEhBhC,EAAgBnB,EACdmB,EACAgC,EACAvC,EACAE,EACAC,CACV,CACK,CACL,EACSI,CACT,CAoCA,SAASiC,GAAYtF,EAAS7D,EAAS,CAGrC,GADAA,EAAUA,GAAW,GACjB,CAACmD,GAASnD,CAAO,EAAG,MAAM,IAAI,MAAM,oBAAoB,EAC5D,IAAI2G,EAAe3G,EAAQ,cAAgB,EACvC6G,EAAoB7G,EAAQ,mBAAqB,EACjD8G,EAAgB9G,EAAQ,eAAiB,EACzCsI,EAAetI,EAAQ,cAAgB,EAGvCD,EAAaC,EAAQ,WACrBE,EAEJ,OAAQ2D,EAAQ,KAAI,CAClB,IAAK,oBACC8C,EAAe,IACjBA,EAAe9C,EAAQ,SAAS,OAAS8C,GAC3C5G,EAAaA,GAAc8D,EAAQ,SAAS8C,CAAY,EAAE,WAC1DzG,EAAW2D,EAAQ,SAAS8C,CAAY,EAAE,SAC1C,MACF,IAAK,UACH5G,EAAaA,GAAc8D,EAAQ,WACnC3D,EAAW2D,EAAQ,SACnB,MACF,IAAK,QACL,IAAK,aACH,OAAO,KACT,IAAK,aACL,IAAK,UACL,IAAK,kBACL,IAAK,eACH3D,EAAW2D,EACX,MACF,QACE,MAAM,IAAI,MAAM,oBAAoB,CACvC,CAGD,GAAI3D,IAAa,KAAM,OAAO,KAC9B,IAAIa,EAASb,EAAS,YACtB,OAAQA,EAAS,KAAI,CACnB,IAAK,QACL,IAAK,aACH,OAAO,KACT,IAAK,aACH,OAAIoI,EAAe,IAAGA,EAAevH,EAAO,OAASuH,EAAe,GAC7D/H,GACL,CAACQ,EAAOuH,CAAY,EAAGvH,EAAOuH,EAAe,CAAC,CAAC,EAC/CvI,EACAC,CACR,EACI,IAAK,UACH,OAAI8G,EAAgB,IAAGA,EAAgB/F,EAAO,OAAS+F,GACnDwB,EAAe,IACjBA,EAAevH,EAAO+F,CAAa,EAAE,OAASwB,EAAe,GACxD/H,GACL,CACEQ,EAAO+F,CAAa,EAAEwB,CAAY,EAClCvH,EAAO+F,CAAa,EAAEwB,EAAe,CAAC,CACvC,EACDvI,EACAC,CACR,EACI,IAAK,kBACH,OAAI6G,EAAoB,IACtBA,EAAoB9F,EAAO,OAAS8F,GAClCyB,EAAe,IACjBA,EAAevH,EAAO8F,CAAiB,EAAE,OAASyB,EAAe,GAC5D/H,GACL,CACEQ,EAAO8F,CAAiB,EAAEyB,CAAY,EACtCvH,EAAO8F,CAAiB,EAAEyB,EAAe,CAAC,CAC3C,EACDvI,EACAC,CACR,EACI,IAAK,eACH,OAAI6G,EAAoB,IACtBA,EAAoB9F,EAAO,OAAS8F,GAClCC,EAAgB,IAClBA,EAAgB/F,EAAO8F,CAAiB,EAAE,OAASC,GACjDwB,EAAe,IACjBA,EACEvH,EAAO8F,CAAiB,EAAEC,CAAa,EAAE,OAASwB,EAAe,GAC9D/H,GACL,CACEQ,EAAO8F,CAAiB,EAAEC,CAAa,EAAEwB,CAAY,EACrDvH,EAAO8F,CAAiB,EAAEC,CAAa,EAAEwB,EAAe,CAAC,CAC1D,EACDvI,EACAC,CACR,CACG,CACD,MAAM,IAAI,MAAM,oBAAoB,CACtC,CAmCA,SAASoJ,GAAUvF,EAAS7D,EAAS,CAGnC,GADAA,EAAUA,GAAW,GACjB,CAACmD,GAASnD,CAAO,EAAG,MAAM,IAAI,MAAM,oBAAoB,EAC5D,IAAI2G,EAAe3G,EAAQ,cAAgB,EACvC6G,EAAoB7G,EAAQ,mBAAqB,EACjD8G,EAAgB9G,EAAQ,eAAiB,EACzCsG,EAAatG,EAAQ,YAAc,EAGnCD,EAAaC,EAAQ,WACrBE,EAEJ,OAAQ2D,EAAQ,KAAI,CAClB,IAAK,oBACC8C,EAAe,IACjBA,EAAe9C,EAAQ,SAAS,OAAS8C,GAC3C5G,EAAaA,GAAc8D,EAAQ,SAAS8C,CAAY,EAAE,WAC1DzG,EAAW2D,EAAQ,SAAS8C,CAAY,EAAE,SAC1C,MACF,IAAK,UACH5G,EAAaA,GAAc8D,EAAQ,WACnC3D,EAAW2D,EAAQ,SACnB,MACF,IAAK,QACL,IAAK,aACH,OAAO,KACT,IAAK,aACL,IAAK,UACL,IAAK,kBACL,IAAK,eACH3D,EAAW2D,EACX,MACF,QACE,MAAM,IAAI,MAAM,oBAAoB,CACvC,CAGD,GAAI3D,IAAa,KAAM,OAAO,KAC9B,IAAIa,EAASb,EAAS,YACtB,OAAQA,EAAS,KAAI,CACnB,IAAK,QACH,OAAOI,GAAMS,EAAQhB,EAAYC,CAAO,EAC1C,IAAK,aACH,OAAI6G,EAAoB,IACtBA,EAAoB9F,EAAO,OAAS8F,GAC/BvG,GAAMS,EAAO8F,CAAiB,EAAG9G,EAAYC,CAAO,EAC7D,IAAK,aACH,OAAIsG,EAAa,IAAGA,EAAavF,EAAO,OAASuF,GAC1ChG,GAAMS,EAAOuF,CAAU,EAAGvG,EAAYC,CAAO,EACtD,IAAK,UACH,OAAI8G,EAAgB,IAAGA,EAAgB/F,EAAO,OAAS+F,GACnDR,EAAa,IACfA,EAAavF,EAAO+F,CAAa,EAAE,OAASR,GACvChG,GAAMS,EAAO+F,CAAa,EAAER,CAAU,EAAGvG,EAAYC,CAAO,EACrE,IAAK,kBACH,OAAI6G,EAAoB,IACtBA,EAAoB9F,EAAO,OAAS8F,GAClCP,EAAa,IACfA,EAAavF,EAAO8F,CAAiB,EAAE,OAASP,GAC3ChG,GAAMS,EAAO8F,CAAiB,EAAEP,CAAU,EAAGvG,EAAYC,CAAO,EACzE,IAAK,eACH,OAAI6G,EAAoB,IACtBA,EAAoB9F,EAAO,OAAS8F,GAClCC,EAAgB,IAClBA,EAAgB/F,EAAO8F,CAAiB,EAAE,OAASC,GACjDR,EAAa,IACfA,EACEvF,EAAO8F,CAAiB,EAAEC,CAAa,EAAE,OAASR,GAC/ChG,GACLS,EAAO8F,CAAiB,EAAEC,CAAa,EAAER,CAAU,EACnDvG,EACAC,CACR,CACG,CACD,MAAM,IAAI,MAAM,oBAAoB,CACtC,uVCv2CA,SAASsD,GAAKO,EAAS,CACnB,IAAIwF,EAAS,CAAC,IAAU,IAAU,KAAW,IAAS,EACtD,OAAAvD,GAAUjC,EAAS,SAAUH,EAAO,CAC5B2F,EAAO,CAAC,EAAI3F,EAAM,CAAC,IACnB2F,EAAO,CAAC,EAAI3F,EAAM,CAAC,GAEnB2F,EAAO,CAAC,EAAI3F,EAAM,CAAC,IACnB2F,EAAO,CAAC,EAAI3F,EAAM,CAAC,GAEnB2F,EAAO,CAAC,EAAI3F,EAAM,CAAC,IACnB2F,EAAO,CAAC,EAAI3F,EAAM,CAAC,GAEnB2F,EAAO,CAAC,EAAI3F,EAAM,CAAC,IACnB2F,EAAO,CAAC,EAAI3F,EAAM,CAAC,EAE/B,CAAK,EACM2F,CACX,CACA/F,GAAK,QAAaA,kHCfH,SAASgG,GAAYhG,EAAMtD,EAAS,CAC3CA,IAAY,SAAUA,EAAU,CAAE,GAItC,IAAIuJ,EAAO,OAAOjG,EAAK,CAAC,CAAC,EACrBkG,EAAQ,OAAOlG,EAAK,CAAC,CAAC,EACtBmG,EAAO,OAAOnG,EAAK,CAAC,CAAC,EACrBoG,EAAQ,OAAOpG,EAAK,CAAC,CAAC,EAC1B,GAAIA,EAAK,SAAW,EAChB,MAAM,IAAI,MAAM,2DAA2D,EAE/E,IAAIqG,EAAU,CAACJ,EAAMC,CAAK,EACtBI,EAAU,CAACL,EAAMG,CAAK,EACtBG,EAAW,CAACJ,EAAMC,CAAK,EACvBI,EAAW,CAACL,EAAMD,CAAK,EAC3B,OAAOhJ,GAAQ,CAAC,CAACmJ,EAASG,EAAUD,EAAUD,EAASD,CAAO,CAAC,EAAG3J,EAAQ,WAAY,CAAE,KAAMsD,EAAM,GAAItD,EAAQ,EAAE,CAAE,CACxH,CCTA,SAAS+J,GAAOlG,EAAS7D,EAAS,CAC1BA,IAAY,SAAUA,EAAU,CAAE,GACtC,IAAIgK,EAAM1G,GAAKO,CAAO,EAClBsB,GAAK6E,EAAI,CAAC,EAAIA,EAAI,CAAC,GAAK,EACxB5E,GAAK4E,EAAI,CAAC,EAAIA,EAAI,CAAC,GAAK,EAC5B,OAAO1J,GAAM,CAAC6E,EAAGC,CAAC,EAAGpF,EAAQ,WAAYA,CAAO,CACpD,CC3BM,SAAU,MAAM,WACpB,OAAO,eAAe,MAAM,UAAW,OAAQ,CAC7C,aAAc,GACd,MAAO,SAAeiK,EAAO,CAC3B,GAAI,OAAS,QAAa,OAAS,KACjC,MAAM,IAAI,UAAU,KAAO,mBAAmB,EAGhD,IAAIC,EAAY,OAAO,IAAI,EAEvBtH,EAAS,KAAK,IAAI,KAAK,IAAIsH,EAAU,OAAQ,gBAAgB,EAAG,CAAC,GAAK,EAEtEC,EAAgB,KAAK,WAAY,SAAS,OAAO,UAAU,CAAC,CAAC,EAAG,EAAE,GAAK,EAE3EA,EAAgBA,EAAgB,EAAI,KAAK,IAAIvH,EAASuH,EAAe,CAAC,EAAI,KAAK,IAAIA,EAAevH,CAAM,EAExG,IAAIwH,EAAc,KAAK,WAAa,UAAU,CAAC,IAAM,OAAY,SAAS,OAAO,UAAU,CAAC,CAAC,EAAG,EAAE,GAAK,EAAIxH,EAI3G,IAFAwH,EAAcA,EAAc,EAAI,KAAK,IAAIxH,EAAS,UAAU,CAAC,EAAG,CAAC,EAAI,KAAK,IAAIwH,EAAaxH,CAAM,EAE1FuH,EAAgBC,GACrBF,EAAUC,CAAa,EAAIF,EAE3B,EAAEE,EAGJ,OAAOD,CACR,EACD,SAAU,EACd,CAAG,EAMH,OAAO,SAAW,OAAO,UAAY,SAAUD,EAAO,CACpD,OAAO,OAAOA,GAAU,UAAY,SAASA,CAAK,CACpD,EAEA,OAAO,UAAY,OAAO,WAAa,SAAUI,EAAK,CACpD,OAAO,OAAOA,GAAQ,UACtB,SAASA,CAAG,GACZ,KAAK,MAAMA,CAAG,IAAMA,CACtB,EAEA,OAAO,WAAa,OAAO,YAAc,WAEzC,OAAO,MAAQ,OAAO,OAAS,SAAUJ,EAAO,CAC9C,OAAOA,IAAUA,CACnB,EAKA,KAAK,MAAQ,KAAK,OAAS,SAAU9E,EAAG,CACtC,OAAOA,EAAI,EAAI,KAAK,KAAKA,CAAC,EAAI,KAAK,MAAMA,CAAC,CAC5C,EAEA,IAAImF,GAAa,UAAuB,GAExCA,GAAW,UAAU,YAAc,UAAwB,CACzD,MAAO,CAAE,CACX,EACAA,GAAW,UAAU,SAAW,UAAqB,CACnD,OAAOA,EACT,EACAA,GAAW,UAAU,oBAAsB,SAA8BC,EAAIC,EAAIC,EAAW,CAC1F,OAAO,KAAK,IAAIF,EAAKC,CAAE,GAAKC,CAC9B,EAEA,IAAIC,EAA4B,SAAUC,EAAO,CAChD,SAASD,EAA0BE,EAAS,CAC3CD,EAAM,KAAK,KAAMC,CAAO,EACxB,KAAK,KAAO,2BACZ,KAAK,QAAUA,EACf,KAAK,MAAS,IAAID,EAAK,EAAI,KAC3B,CAED,OAAKA,IAAQD,EAAyB,UAAYC,GAClDD,EAAyB,UAAY,OAAO,OAAQC,GAASA,EAAM,WACnED,EAAyB,UAAU,YAAcA,EAE1CA,CACR,EAAE,KAAK,EAEHG,EAAS,UAAmB,GAE5BC,GAAoB,CAAE,UAAW,CAAE,aAAc,EAAM,CAAA,EAE3DD,EAAO,MAAQ,SAAgBE,EAAG,CAAE,OAAO,OAAO,MAAMA,CAAC,GACzDF,EAAO,iBAAmB,SAA2BE,EAAG,CAAE,OAAOA,CAAC,EAClEF,EAAO,iBAAmB,SAA2BE,EAAG,CAAE,OAAOA,CAAC,EAClEF,EAAO,WAAa,SAAqBE,EAAG,CAAE,MAAO,CAAC,OAAO,SAASA,CAAC,GACvED,GAAkB,UAAU,IAAM,UAAY,CAAE,OAAO,OAAO,SAAS,EAEvE,OAAO,iBAAkBD,EAAQC,IAEjC,IAAIE,GAAa,UAAuB,GAEpCC,GAAW,UAAqB,GAEhCC,GAAa,UAAuB,GAExC,SAASC,IAAgB,CAAE,CAI3B,IAAIC,EAAa,SAASA,GAAc,CAItC,GAHA,KAAK,EAAI,KACT,KAAK,EAAI,KACT,KAAK,EAAI,KACL,UAAU,SAAW,EACvB,KAAK,EAAI,EACT,KAAK,EAAI,EACT,KAAK,EAAIA,EAAW,sBACX,UAAU,SAAW,EAAG,CACjC,IAAIC,EAAI,UAAU,CAAC,EACnB,KAAK,EAAIA,EAAE,EACX,KAAK,EAAIA,EAAE,EACX,KAAK,EAAIA,EAAE,CACf,MAAa,UAAU,SAAW,GAC9B,KAAK,EAAI,UAAU,CAAC,EACpB,KAAK,EAAI,UAAU,CAAC,EACpB,KAAK,EAAID,EAAW,eACX,UAAU,SAAW,IAC9B,KAAK,EAAI,UAAU,CAAC,EACpB,KAAK,EAAI,UAAU,CAAC,EACpB,KAAK,EAAI,UAAU,CAAC,EAExB,EAEIE,GAAkB,CAAE,sBAAuB,CAAE,aAAc,EAAM,EAAC,iBAAkB,CAAE,aAAc,EAAI,EAAG,cAAe,CAAE,aAAc,IAAO,EAAG,CAAE,aAAc,EAAM,EAAC,EAAG,CAAE,aAAc,EAAI,EAAG,EAAG,CAAE,aAAc,EAAM,CAAA,EAClOF,EAAW,UAAU,YAAc,SAAsBG,EAAetB,EAAO,CAC7E,OAAQsB,EAAa,CACnB,KAAKH,EAAW,EACd,KAAK,EAAInB,EACT,MACF,KAAKmB,EAAW,EACd,KAAK,EAAInB,EACT,MACF,KAAKmB,EAAW,EACd,KAAK,EAAInB,EACT,MACF,QACE,MAAM,IAAIS,EAAyB,2BAA6Ba,CAAa,CAChF,CACH,EACAH,EAAW,UAAU,SAAW,UAAqB,CACnD,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAII,EAAQ,UAAU,CAAC,EAIvB,MAHI,OAAK,IAAMA,EAAM,GAGjB,KAAK,IAAMA,EAAM,EAIzB,SAAa,UAAU,SAAW,EAAG,CACjC,IAAIH,EAAI,UAAU,CAAC,EACfZ,EAAY,UAAU,CAAC,EAI3B,MAHI,GAACH,GAAW,oBAAoB,KAAK,EAAGe,EAAE,EAAGZ,CAAS,GAGtD,CAACH,GAAW,oBAAoB,KAAK,EAAGe,EAAE,EAAGZ,CAAS,EAI3D,CACH,EACAW,EAAW,UAAU,YAAc,SAAsBG,EAAe,CACtE,OAAQA,EAAa,CACnB,KAAKH,EAAW,EACd,OAAO,KAAK,EACd,KAAKA,EAAW,EACd,OAAO,KAAK,EACd,KAAKA,EAAW,EACd,OAAO,KAAK,CAEf,CACD,MAAM,IAAIV,EAAyB,2BAA6Ba,CAAa,CAC/E,EACAH,EAAW,UAAU,SAAW,SAAmBI,EAAO,CACxD,OAAO,KAAK,IAAMA,EAAM,GACjB,KAAK,IAAMA,EAAM,IACf,KAAK,IAAMA,EAAM,GAAKX,EAAO,MAAM,KAAK,CAAC,IAC3CA,EAAO,MAAMW,EAAM,CAAC,CAC7B,EACAJ,EAAW,UAAU,OAAS,SAAiBI,EAAO,CACpD,OAAMA,aAAiBJ,EAGhB,KAAK,SAASI,CAAK,EAFjB,EAGX,EACAJ,EAAW,UAAU,SAAW,SAAmBC,EAAGZ,EAAW,CAC/D,OAAOH,GAAW,oBAAoB,KAAK,EAAGe,EAAE,EAAGZ,CAAS,CAC9D,EACAW,EAAW,UAAU,UAAY,SAAoBK,EAAG,CACtD,IAAID,EAAQC,EACZ,OAAI,KAAK,EAAID,EAAM,EAAY,GAC3B,KAAK,EAAIA,EAAM,EAAY,EAC3B,KAAK,EAAIA,EAAM,EAAY,GAC3B,KAAK,EAAIA,EAAM,EAAY,EACxB,CACT,EACAJ,EAAW,UAAU,MAAQ,UAAkB,CAU/C,EACAA,EAAW,UAAU,KAAO,UAAiB,CAC3C,OAAO,IAAIA,EAAW,IAAI,CAC5B,EACAA,EAAW,UAAU,SAAW,UAAqB,CACnD,MAAO,IAAM,KAAK,EAAI,KAAO,KAAK,EAAI,KAAO,KAAK,EAAI,GACxD,EACAA,EAAW,UAAU,WAAa,SAAqBC,EAAG,CACxD,IAAIK,EAAK,KAAK,EAAIL,EAAE,EAChBM,EAAK,KAAK,EAAIN,EAAE,EAChBO,EAAK,KAAK,EAAIP,EAAE,EACpB,OAAO,KAAK,KAAKK,EAAKA,EAAKC,EAAKA,EAAKC,EAAKA,CAAE,CAC9C,EACAR,EAAW,UAAU,SAAW,SAAmBC,EAAG,CACpD,IAAIK,EAAK,KAAK,EAAIL,EAAE,EAChBM,EAAK,KAAK,EAAIN,EAAE,EACpB,OAAO,KAAK,KAAKK,EAAKA,EAAKC,EAAKA,CAAE,CACpC,EACAP,EAAW,UAAU,SAAW,UAAqB,CACnD,IAAI/B,EAAS,GACb,OAAAA,EAAS,GAAKA,EAAS+B,EAAW,SAAS,KAAK,CAAC,EACjD/B,EAAS,GAAKA,EAAS+B,EAAW,SAAS,KAAK,CAAC,EAC1C/B,CACT,EACA+B,EAAW,UAAU,cAAgB,SAAwBI,EAAO,CAClE,KAAK,EAAIA,EAAM,EACf,KAAK,EAAIA,EAAM,EACf,KAAK,EAAIA,EAAM,CACjB,EACAJ,EAAW,UAAU,YAAc,UAAwB,CACzD,MAAO,CAACJ,GAAYC,GAAUE,EAAY,CAC5C,EACAC,EAAW,UAAU,SAAW,UAAqB,CACnD,OAAOA,CACT,EACAA,EAAW,SAAW,UAAqB,CACzC,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAIjG,EAAI,UAAU,CAAC,EACf0G,EAAIhB,EAAO,iBAAiB1F,CAAC,EACjC,OAAO,KAAK,OAAO0G,EAAIA,KAAO,EAAE,CACjC,CACH,EACAP,GAAgB,sBAAsB,IAAM,UAAY,CAAE,OAAOQ,EAAqB,EACtFR,GAAgB,iBAAiB,IAAM,UAAY,CAAE,MAAO,mBAAmB,EAC/EA,GAAgB,cAAc,IAAM,UAAY,CAAE,OAAOT,EAAO,GAAG,EACnES,GAAgB,EAAE,IAAM,UAAY,CAAE,MAAO,EAAC,EAC9CA,GAAgB,EAAE,IAAM,UAAY,CAAE,MAAO,EAAC,EAC9CA,GAAgB,EAAE,IAAM,UAAY,CAAE,MAAO,EAAC,EAE9C,OAAO,iBAAkBF,EAAYE,IAErC,IAAIQ,GAAwB,SAAgCC,EAAkB,CAE5E,GADA,KAAK,kBAAoB,EACrB,UAAU,SAAW,GAAW,GAAI,UAAU,SAAW,EAAG,CAC9D,IAAIC,EAAqB,UAAU,CAAC,EACpC,GAAIA,IAAuB,GAAKA,IAAuB,EAAK,MAAM,IAAItB,EAAyB,yCAAyC,EACxI,KAAK,kBAAoBsB,CAC1B,EACH,EACAF,GAAsB,UAAU,QAAU,SAAkBG,EAAIC,EAAI,CAClE,IAAIC,EAAKF,EACLG,EAAKF,EACLG,EAAQP,GAAsB,QAAQK,EAAG,EAAGC,EAAG,CAAC,EACpD,GAAIC,IAAU,EAAK,OAAOA,EAC1B,IAAIC,EAAQR,GAAsB,QAAQK,EAAG,EAAGC,EAAG,CAAC,EACpD,GAAIE,IAAU,EAAK,OAAOA,EAC1B,GAAI,KAAK,mBAAqB,EAAK,MAAO,GAC1C,IAAIC,EAAQT,GAAsB,QAAQK,EAAG,EAAGC,EAAG,CAAC,EACpD,OAAOG,CACT,EACAT,GAAsB,UAAU,YAAc,UAAwB,CACpE,MAAO,CAACZ,EAAU,CACpB,EACAY,GAAsB,UAAU,SAAW,UAAqB,CAC9D,OAAOA,EACT,EACAA,GAAsB,QAAU,SAAkBU,EAAGC,EAAG,CACtD,OAAID,EAAIC,EAAY,GAChBD,EAAIC,EAAY,EAChB5B,EAAO,MAAM2B,CAAC,EACZ3B,EAAO,MAAM4B,CAAC,EAAY,EACvB,GAEL5B,EAAO,MAAM4B,CAAC,EAAY,EACvB,CACT,EAKA,IAAIC,GAA4B,UAAsC,GAEtEA,GAA0B,UAAU,OAAS,UAAmB,CAWhE,EACAA,GAA0B,UAAU,YAAc,UAAwB,CACxE,MAAO,CAAE,CACX,EACAA,GAA0B,UAAU,SAAW,UAAqB,CAClE,OAAOA,EACT,EAEA,IAAIC,EAAW,UAAqB,GAEhCC,GAAoB,CAAE,SAAU,CAAE,aAAc,IAAO,SAAU,CAAE,aAAc,EAAM,EAAC,SAAU,CAAE,aAAc,EAAM,EAAC,KAAM,CAAE,aAAc,EAAI,GAEvJD,EAAS,UAAU,YAAc,UAAwB,CACvD,MAAO,CAAE,CACX,EACAA,EAAS,UAAU,SAAW,UAAqB,CACjD,OAAOA,CACT,EACAA,EAAS,iBAAmB,SAA2BE,EAAe,CACpE,OAAQA,EAAa,CACnB,KAAKF,EAAS,SACZ,MAAO,IACT,KAAKA,EAAS,SACZ,MAAO,IACT,KAAKA,EAAS,SACZ,MAAO,IACT,KAAKA,EAAS,KACZ,MAAO,GAEV,CACD,MAAM,IAAIjC,EAAyB,2BAA6BmC,CAAa,CAC/E,EACAD,GAAkB,SAAS,IAAM,UAAY,CAAE,MAAO,EAAC,EACvDA,GAAkB,SAAS,IAAM,UAAY,CAAE,MAAO,EAAC,EACvDA,GAAkB,SAAS,IAAM,UAAY,CAAE,MAAO,EAAC,EACvDA,GAAkB,KAAK,IAAM,UAAY,CAAE,MAAO,EAAE,EAEpD,OAAO,iBAAkBD,EAAUC,IAEnC,IAAIE,EAAe,SAAUrB,EAAG7G,EAAG,CACjC,OAAO6G,EAAE,aAAeA,EAAE,YAAa,EAAC,QAAQ7G,CAAC,EAAI,EACvD,EAEImI,GAAW,UAAqB,GAEhCC,GAAoB,CAAE,OAAQ,CAAE,aAAc,EAAM,CAAA,EAExDD,GAAS,UAAU,YAAc,UAAwB,CACvD,MAAO,CAAE,CACX,EACAA,GAAS,UAAU,SAAW,UAAqB,CACjD,OAAOA,EACT,EACAA,GAAS,MAAQ,SAAgB5H,EAAG,CAClC,IAAI8H,EAAK,KAAK,IAAI9H,CAAC,EAEnB,OADI0F,EAAO,WAAWoC,CAAE,GACpBpC,EAAO,MAAMoC,CAAE,EAAYA,EACxBA,EAAKF,GAAS,MACvB,EACAA,GAAS,IAAM,SAAcG,EAAIC,EAAIC,EAAIC,EAAI,CAC3C,IAAIC,EAAMJ,EACV,OAAIC,EAAKG,IAAOA,EAAMH,GAClBC,EAAKE,IAAOA,EAAMF,GAClBC,EAAKC,IAAOA,EAAMD,GACfC,CACT,EACAP,GAAS,MAAQ,UAAkB,CACjC,GAAI,OAAO,UAAU,CAAC,GAAM,UAAa,OAAO,UAAU,CAAC,GAAM,UAAY,OAAO,UAAU,CAAC,GAAM,SAAW,CAC9G,IAAI5H,EAAI,UAAU,CAAC,EACfmI,EAAM,UAAU,CAAC,EACjBC,EAAM,UAAU,CAAC,EACrB,OAAIpI,EAAImI,EAAcA,EAClBnI,EAAIoI,EAAcA,EACfpI,CACX,SAAa,OAAO,UAAU,UAAU,CAAC,CAAC,GAAM,OAAO,UAAU,UAAU,CAAC,CAAC,GAAK,OAAO,UAAU,UAAU,CAAC,CAAC,EAAI,CAC/G,IAAIqI,EAAM,UAAU,CAAC,EACjBC,EAAQ,UAAU,CAAC,EACnBC,EAAQ,UAAU,CAAC,EACvB,OAAIF,EAAMC,EAAgBA,EACtBD,EAAME,EAAgBA,EACnBF,CACR,CACH,EACAT,GAAS,KAAO,SAAeY,EAAOJ,EAAK,CACzC,OAAII,EAAQ,EACHJ,GAAM,CAACI,EAAQJ,EAEjBI,EAAQJ,CACjB,EACAR,GAAS,IAAM,UAAgB,CAC7B,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAIG,EAAK,UAAU,CAAC,EAChBC,EAAK,UAAU,CAAC,EAChBC,EAAK,UAAU,CAAC,EAChBG,EAAML,EACV,OAAIC,EAAKI,IAAOA,EAAMJ,GAClBC,EAAKG,IAAOA,EAAMH,GACfG,CACX,SAAa,UAAU,SAAW,EAAG,CACjC,IAAIK,EAAO,UAAU,CAAC,EAClBC,EAAO,UAAU,CAAC,EAClBC,EAAO,UAAU,CAAC,EAClBT,EAAK,UAAU,CAAC,EAChBK,EAAQE,EACZ,OAAIC,EAAOH,IAASA,EAAQG,GACxBC,EAAOJ,IAASA,EAAQI,GACxBT,EAAKK,IAASA,EAAQL,GACnBK,CACR,CACH,EACAX,GAAS,QAAU,SAAkBxC,EAAIC,EAAI,CAC3C,OAAQD,EAAKC,GAAM,CACrB,EACAwC,GAAkB,OAAO,IAAM,UAAY,CAAE,OAAO,KAAK,IAAI,EAAE,GAE/D,OAAO,iBAAkBD,GAAUC,IAEnC,IAAIe,GAAe,SAAuBC,EAAK,CAC7C,KAAK,IAAMA,CACb,EACAD,GAAa,UAAU,OAAS,SAAiBE,EAAG,CAClD,KAAK,KAAOA,CACd,EAEAF,GAAa,UAAU,UAAY,SAAoBnJ,EAAGyG,EAAG,CAC3D,KAAK,IAAM,KAAK,IAAI,OAAO,EAAGzG,CAAC,EAAIyG,EAAI,KAAK,IAAI,OAAOzG,EAAI,CAAC,CAC9D,EAEAmJ,GAAa,UAAU,SAAW,SAAmBE,EAAG,CACtD,OAAO,KAAK,GACd,EAEA,IAAIC,GAAU,SAAkBjE,EAAO,CACrC,KAAK,MAAQA,CACf,EACAiE,GAAQ,UAAU,SAAW,UAAqB,CAChD,OAAO,KAAK,KACd,EACAA,GAAQ,UAAU,UAAY,SAAoBzC,EAAG,CACnD,OAAI,KAAK,MAAQA,EAAY,GACzB,KAAK,MAAQA,EAAY,EACtB,CACT,EACAyC,GAAQ,MAAQ,SAAgBnD,EAAG,CAAE,OAAO,OAAO,MAAMA,CAAC,GAE1D,IAAIoD,GAAY,UAAsB,GAEtCA,GAAU,aAAe,SAAuB9C,EAAG,CAAE,OAASA,GAAK,IAAMA,GAAK,GAAMA,IAAM,GAAI,EAC9F8C,GAAU,YAAc,SAAsB9C,EAAG,CAAE,OAAOA,EAAE,YAAW,GAEvE,IAAI+C,EAAK,SAASA,GAAM,CAGtB,GAFA,KAAK,IAAM,EACX,KAAK,IAAM,EACP,UAAU,SAAW,EACvB,KAAK,KAAK,CAAG,UACJ,UAAU,SAAW,GAC9B,GAAI,OAAO,UAAU,CAAC,GAAM,SAAU,CACpC,IAAIjJ,EAAI,UAAU,CAAC,EACnB,KAAK,KAAKA,CAAC,CACZ,SAAU,UAAU,CAAC,YAAaiJ,EAAI,CACrC,IAAIC,EAAK,UAAU,CAAC,EACpB,KAAK,KAAKA,CAAE,CACb,SAAU,OAAO,UAAU,CAAC,GAAM,SAAU,CAC3C,IAAIL,EAAM,UAAU,CAAC,EACrBI,EAAG,KAAK,KAAMA,EAAG,MAAMJ,CAAG,CAAC,CAC5B,UACQ,UAAU,SAAW,EAAG,CACjC,IAAIM,EAAK,UAAU,CAAC,EAChBC,EAAK,UAAU,CAAC,EACpB,KAAK,KAAKD,EAAIC,CAAE,CACjB,CACH,EAEIC,GAAoB,CAAE,GAAI,CAAE,aAAc,EAAI,EAAG,OAAQ,CAAE,aAAc,EAAM,EAAC,KAAM,CAAE,aAAc,EAAI,EAAG,EAAG,CAAE,aAAc,EAAI,EAAG,IAAK,CAAE,aAAc,EAAI,EAAG,IAAK,CAAE,aAAc,IAAO,MAAO,CAAE,aAAc,EAAI,EAAG,iBAAkB,CAAE,aAAc,IAAO,IAAK,CAAE,aAAc,EAAM,EAAC,IAAK,CAAE,aAAc,IAAO,sBAAuB,CAAE,aAAc,EAAM,EAAC,aAAc,CAAE,aAAc,EAAM,CAAA,EACpZJ,EAAG,UAAU,GAAK,SAAahJ,EAAG,CAChC,OAAQ,KAAK,IAAMA,EAAE,KAAO,KAAK,MAAQA,EAAE,MAAQ,KAAK,KAAOA,EAAE,GACnE,EACAgJ,EAAG,UAAU,yBAA2B,SAAmCK,EAAoBC,EAAW,CACxG,IAAItJ,EAAI,KAAK,MACTuJ,EAAMP,EAAG,UAAUhJ,EAAE,GAAG,EACxBwJ,EAAQR,EAAG,IAAI,IAAIO,CAAG,EAC1BvJ,EAAIA,EAAE,OAAOwJ,CAAK,EACdxJ,EAAE,GAAGgJ,EAAG,GAAG,GACbhJ,EAAIA,EAAE,OAAOgJ,EAAG,GAAG,EACnBO,GAAO,GACEvJ,EAAE,GAAGgJ,EAAG,GAAG,IACpBhJ,EAAIA,EAAE,SAASgJ,EAAG,GAAG,EACrBO,GAAO,GAKT,QAHIE,EAAkBF,EAAM,EACxBG,EAAM,IAAIf,GACVgB,EAAYX,EAAG,iBAAmB,EAC7BxJ,EAAI,EAAGA,GAAKmK,EAAWnK,IAAK,CAC/B6J,GAAsB7J,IAAMiK,GAC9BC,EAAI,OAAO,GAAG,EAEhB,IAAIE,EAAQ,KAAK,MAAM5J,EAAE,GAAG,EAC5B,GAAI4J,EAAQ,EACV,MAEF,IAAIC,EAAa,GACbC,EAAY,EACZF,EAAQ,GACVC,EAAa,GACbC,EAAY,KAEZA,EAAY,IAAMF,EAEpBF,EAAI,OAAOI,CAAS,EACpB9J,EAAIA,EAAE,SAASgJ,EAAG,QAAQY,CAAK,CAAC,EAAE,SAASZ,EAAG,GAAG,EAC7Ca,GAAc7J,EAAE,QAAQgJ,EAAG,GAAG,EAClC,IAAIe,EAA2B,GAC3BC,EAAShB,EAAG,UAAUhJ,EAAE,GAAG,EAE/B,GADIgK,EAAS,GAAK,KAAK,IAAIA,CAAM,GAAKL,EAAYnK,IAAKuK,EAA2B,IAC9E,CAACA,EAA4B,KAClC,CACD,OAAAT,EAAU,CAAC,EAAIC,EACRG,EAAI,SAAU,CACvB,EACAV,EAAG,UAAU,IAAM,UAAgB,CACjC,OAAO,KAAK,SAAS,IAAI,CAC3B,EACAA,EAAG,UAAU,YAAc,UAAwB,CACjD,OAAO,KAAK,IAAM,KAAK,GACzB,EACAA,EAAG,UAAU,SAAW,UAAqB,CAC3C,GAAI,UAAU,CAAC,YAAaA,EAAI,CAC9B,IAAIhJ,EAAI,UAAU,CAAC,EACnB,OAAO,KAAK,IAAIA,EAAE,OAAM,CAAE,CAC3B,SAAU,OAAO,UAAU,CAAC,GAAM,SAAU,CAC3C,IAAIiK,EAAM,UAAU,CAAC,EACrB,OAAO,KAAK,IAAI,CAACA,CAAG,CACrB,CACH,EACAjB,EAAG,UAAU,OAAS,UAAmB,CACvC,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAIhJ,EAAI,UAAU,CAAC,EACnB,OAAO,KAAK,MAAQA,EAAE,KAAO,KAAK,MAAQA,EAAE,GAC7C,CACH,EACAgJ,EAAG,UAAU,OAAS,UAAmB,CACvC,OAAO,KAAK,MAAQ,GAAO,KAAK,MAAQ,CAC1C,EACAA,EAAG,UAAU,aAAe,UAAyB,CACnD,GAAI,UAAU,CAAC,YAAaA,EAAI,CAC9B,IAAIhJ,EAAI,UAAU,CAAC,EACnB,OAAI,KAAK,QAAkB,KACpB,KAAK,QAAQ,CAACA,EAAE,IAAK,CAACA,EAAE,GAAG,CACnC,SAAU,OAAO,UAAU,CAAC,GAAM,SAAU,CAC3C,IAAIiK,EAAM,UAAU,CAAC,EACrB,OAAI,KAAK,QAAkB,KACpB,KAAK,QAAQ,CAACA,EAAK,CAAG,CAC9B,CACH,EACAjB,EAAG,UAAU,uBAAyB,UAAmC,CACvE,OAAI,KAAK,SAAmB,MACxB,KAAK,QAAkB,OACpB,IACT,EACAA,EAAG,UAAU,IAAM,SAAcjJ,EAAG,CAClC,OAAI,KAAK,GAAGA,CAAC,EACJ,KAEAA,CAEX,EACAiJ,EAAG,UAAU,WAAa,UAAuB,CAC/C,GAAI,UAAU,SAAW,GACvB,GAAI,UAAU,CAAC,YAAaA,EAAI,CAC9B,IAAIhJ,EAAI,UAAU,CAAC,EACnB,OAAO,KAAK,WAAWA,EAAE,IAAKA,EAAE,GAAG,CACpC,SAAU,OAAO,UAAU,CAAC,GAAM,SAAU,CAC3C,IAAIiK,EAAM,UAAU,CAAC,EACrB,OAAO,KAAK,WAAWA,EAAK,CAAG,CAChC,UACQ,UAAU,SAAW,EAAG,CACjC,IAAIC,EAAM,UAAU,CAAC,EACjBC,EAAM,UAAU,CAAC,EACjBC,EAAK,KACLC,EAAK,KACLC,EAAK,KACLC,EAAK,KACLC,EAAI,KACJ,EAAI,KACJC,EAAI,KACJC,EAAI,KACR,OAAAF,EAAI,KAAK,IAAMN,EACf,EAAIlB,EAAG,MAAQwB,EACfJ,EAAK,EAAII,EACTE,EAAI1B,EAAG,MAAQkB,EACfE,EAAK,EAAIA,EACTC,EAAKG,EAAIJ,EACTE,EAAKI,EAAIR,EACTO,EAAID,EAAIN,EACRI,EAAKI,EAAIJ,EACTC,EAAKL,EAAMI,EACXI,EAAIN,EAAKE,EAAKG,EAAIL,EAAKG,EAAKF,EAAKC,EAAKD,EAAKE,EAC3C,GAAK,KAAK,IAAME,EAAIC,EAAI,KAAK,IAAMF,EAAIL,GAAOD,EAC9CQ,EAAIF,EAAI,EACR,KAAK,IAAME,EACX,KAAK,IAAMF,EAAIE,EAAI,EACZ,IACR,CACH,EACA1B,EAAG,UAAU,KAAO,UAAiB,CACnC,MAAO,MAAQ,KAAK,IAAM,KAAO,KAAK,IAAM,GAC9C,EACAA,EAAG,UAAU,OAAS,UAAmB,CACvC,GAAI,UAAU,CAAC,YAAaA,EAAI,CAC9B,IAAIhJ,EAAI,UAAU,CAAC,EACfoK,EAAK,KACLC,EAAK,KACLC,EAAK,KACLC,EAAK,KACLC,EAAI,KACJvE,EAAI,KACJwE,EAAI,KACJC,EAAI,KACRF,EAAI,KAAK,IAAMxK,EAAE,IACjBiG,EAAI+C,EAAG,MAAQwB,EACfJ,EAAKnE,EAAIuE,EACTE,EAAI1B,EAAG,MAAQhJ,EAAE,IACjBoK,EAAKnE,EAAImE,EACTC,EAAKG,EAAIJ,EACTE,EAAKI,EAAI1K,EAAE,IACXyK,EAAID,EAAIxK,EAAE,IACVsK,EAAKI,EAAIJ,EACTC,EAAKvK,EAAE,IAAMsK,EACbI,EAAIN,EAAKE,EAAKG,EAAIL,EAAKG,EAAKF,EAAKC,EAAKD,EAAKE,EAC3CtE,GAAK,KAAK,IAAMwE,EAAIC,EAAI,KAAK,IAAMF,EAAIxK,EAAE,KAAOA,EAAE,IAClD0K,EAAIF,EAAIvE,EACR,IAAI0E,EAAMD,EACNE,EAAMJ,EAAIE,EAAIzE,EAClB,OAAO,IAAI+C,EAAG2B,EAAKC,CAAG,CACvB,SAAU,OAAO,UAAU,CAAC,GAAM,SAAU,CAC3C,IAAIX,EAAM,UAAU,CAAC,EACrB,OAAIxE,EAAO,MAAMwE,CAAG,EAAYjB,EAAG,YAC5BA,EAAG,KAAK,IAAI,EAAE,WAAWiB,EAAK,CAAG,CACzC,CACH,EACAjB,EAAG,UAAU,GAAK,SAAahJ,EAAG,CAChC,OAAQ,KAAK,IAAMA,EAAE,KAAO,KAAK,MAAQA,EAAE,MAAQ,KAAK,KAAOA,EAAE,GACnE,EACAgJ,EAAG,UAAU,IAAM,SAAc6B,EAAK,CACpC,GAAIA,IAAQ,EAAO,OAAO7B,EAAG,QAAQ,CAAG,EACxC,IAAI8B,EAAI,IAAI9B,EAAG,IAAI,EACf+B,EAAI/B,EAAG,QAAQ,CAAG,EAClBrD,EAAI,KAAK,IAAIkF,CAAG,EACpB,GAAIlF,EAAI,EACN,KAAOA,EAAI,GACLA,EAAI,IAAM,GACZoF,EAAE,aAAaD,CAAC,EAElBnF,GAAK,EACDA,EAAI,IAAKmF,EAAIA,EAAE,IAAG,QAGxBC,EAAID,EAEN,OAAID,EAAM,EAAYE,EAAE,WAAU,EAC3BA,CACT,EACA/B,EAAG,UAAU,KAAO,UAAiB,CACnC,GAAI,KAAK,MAAK,EAAM,OAAOA,EAAG,IAC9B,IAAIgC,EAAM,KAAK,KAAK,KAAK,GAAG,EACxBC,EAAM,EACV,OAAID,IAAQ,KAAK,MACfC,EAAM,KAAK,KAAK,KAAK,GAAG,GAEnB,IAAIjC,EAAGgC,EAAKC,CAAG,CACxB,EACAjC,EAAG,UAAU,UAAY,SAAoB3C,EAAG,CAC9C,IAAID,EAAQC,EACZ,OAAI,KAAK,IAAMD,EAAM,IAAc,GAC/B,KAAK,IAAMA,EAAM,IAAc,EAC/B,KAAK,IAAMA,EAAM,IAAc,GAC/B,KAAK,IAAMA,EAAM,IAAc,EAC5B,CACT,EACA4C,EAAG,UAAU,KAAO,UAAiB,CACnC,GAAI,KAAK,QAAW,OAAO,KAC3B,IAAIkC,EAAQ,KAAK,IAAI,EAAG,EACxB,OAAOA,EAAM,MAAO,CACtB,EACAlC,EAAG,UAAU,SAAW,UAAqB,CAC3C,GAAI,UAAU,CAAC,YAAaA,EAAI,CAC9B,IAAInE,EAAQ,UAAU,CAAC,EACvB,YAAK,KAAKA,CAAK,EACR,IACR,SAAU,OAAO,UAAU,CAAC,GAAM,SAAU,CAC3C,IAAIsG,EAAU,UAAU,CAAC,EACzB,YAAK,KAAKA,CAAO,EACV,IACR,CACH,EACAnC,EAAG,UAAU,IAAM,SAAcjJ,EAAG,CAClC,OAAI,KAAK,GAAGA,CAAC,EACJ,KAEAA,CAEX,EACAiJ,EAAG,UAAU,KAAO,UAAiB,CACnC,GAAI,KAAK,SAAY,OAAOA,EAAG,QAAQ,CAAG,EAC1C,GAAI,KAAK,aACP,OAAOA,EAAG,IAEZ,IAAIjJ,EAAI,EAAM,KAAK,KAAK,KAAK,GAAG,EAC5BqL,EAAK,KAAK,IAAMrL,EAChBsL,EAAOrC,EAAG,QAAQoC,CAAE,EACpBE,EAAS,KAAK,SAASD,EAAK,IAAK,CAAA,EACjCE,EAAKD,EAAO,KAAOvL,EAAI,IAC3B,OAAOsL,EAAK,IAAIE,CAAE,CACpB,EACAvC,EAAG,UAAU,QAAU,UAAoB,CACzC,GAAI,UAAU,SAAW,GACvB,GAAI,UAAU,CAAC,YAAaA,EAAI,CAC9B,IAAIhJ,EAAI,UAAU,CAAC,EACnB,OAAO,KAAK,QAAQA,EAAE,IAAKA,EAAE,GAAG,CACjC,SAAU,OAAO,UAAU,CAAC,GAAM,SAAU,CAC3C,IAAIiK,EAAM,UAAU,CAAC,EACjBuB,EAAI,KACJC,EAAI,KACJC,EAAI,KACJ,EAAI,KACJ7C,EAAI,KACJpC,EAAI,KACR,OAAAiF,EAAI,KAAK,IAAMzB,EACfpB,EAAI6C,EAAI,KAAK,IACb,EAAIA,EAAI7C,EACR,EAAIoB,EAAMpB,GAAK,KAAK,IAAM,GAC1BpC,EAAI,EAAI,KAAK,IACb+E,EAAIE,EAAIjF,EACRgF,EAAIhF,GAAKiF,EAAIF,GACb,KAAK,IAAMA,EAAIC,EACf,KAAK,IAAMA,GAAKD,EAAI,KAAK,KAClB,IACR,UACQ,UAAU,SAAW,EAAG,CACjC,IAAItB,EAAM,UAAU,CAAC,EACjBC,EAAM,UAAU,CAAC,EACjBwB,EAAM,KACNC,EAAM,KACNC,EAAI,KACJC,EAAI,KACJC,EAAM,KACNC,EAAM,KACNC,EAAM,KACNC,EAAM,KACVH,EAAM,KAAK,IAAM7B,EACjB2B,EAAI,KAAK,IAAM1B,EACf8B,EAAMF,EAAM,KAAK,IACjBG,EAAML,EAAI,KAAK,IACfG,EAAMD,EAAME,EACZH,EAAID,EAAIK,EACRF,EAAM9B,EAAM+B,GAAO,KAAK,IAAMD,GAC9BF,EAAI3B,EAAM+B,GAAO,KAAK,IAAMJ,GAC5BG,EAAMD,EAAMH,EACZF,EAAMI,EAAME,EACZL,EAAMK,GAAOF,EAAMJ,GACnBM,EAAMH,EAAIF,EACV,IAAIjB,EAAMgB,EAAMM,EACZrB,EAAMqB,GAAON,EAAMhB,GACvB,YAAK,IAAMA,EACX,KAAK,IAAMC,EACJ,IACR,CACH,EACA5B,EAAG,UAAU,aAAe,UAAyB,CACnD,GAAI,UAAU,SAAW,GACvB,GAAI,UAAU,CAAC,YAAaA,EAAI,CAC9B,IAAIhJ,EAAI,UAAU,CAAC,EACnB,OAAO,KAAK,aAAaA,EAAE,IAAKA,EAAE,GAAG,CACtC,SAAU,OAAO,UAAU,CAAC,GAAM,SAAU,CAC3C,IAAIiK,EAAM,UAAU,CAAC,EACrB,OAAO,KAAK,aAAaA,EAAK,CAAG,CAClC,UACQ,UAAU,SAAW,EAAG,CACjC,IAAIC,EAAM,UAAU,CAAC,EACjBC,EAAM,UAAU,CAAC,EACjBgC,EAAK,KACLC,EAAK,KACL9B,EAAK,KACLC,EAAK,KACLC,EAAI,KACJ,EAAI,KACRA,EAAIxB,EAAG,MAAQ,KAAK,IACpBmD,EAAK3B,EAAI,KAAK,IACd,EAAIxB,EAAG,MAAQkB,EACfiC,EAAK3B,EAAI2B,EACTC,EAAK,KAAK,IAAMD,EAChB7B,EAAK,EAAIJ,EACTM,EAAI,KAAK,IAAMN,EACfI,EAAK,EAAIA,EACTC,EAAKL,EAAMI,EACX,EAAI6B,EAAK7B,EAAKE,EAAI2B,EAAK5B,EAAK6B,EAAK9B,EAAK8B,EAAK7B,GAAM,KAAK,IAAMJ,EAAM,KAAK,IAAMD,GAC7E,IAAIS,EAAMH,EAAI,EACd2B,EAAK3B,EAAIG,EACT,IAAIC,EAAM,EAAIuB,EACd,YAAK,IAAMxB,EACX,KAAK,IAAMC,EACJ,IACR,CACH,EACA5B,EAAG,UAAU,QAAU,UAAoB,CACzC,OAAO,KAAK,aAAa,IAAI,CAC/B,EACAA,EAAG,UAAU,MAAQ,UAAkB,CACrC,GAAI,KAAK,MAAK,EAAM,OAAOA,EAAG,IAC9B,IAAIgC,EAAM,KAAK,MAAM,KAAK,GAAG,EACzBC,EAAM,EACV,OAAID,IAAQ,KAAK,MACfC,EAAM,KAAK,MAAM,KAAK,GAAG,GAEpB,IAAIjC,EAAGgC,EAAKC,CAAG,CACxB,EACAjC,EAAG,UAAU,OAAS,UAAmB,CACvC,OAAI,KAAK,QAAkB,KACpB,IAAIA,EAAG,CAAC,KAAK,IAAK,CAAC,KAAK,GAAG,CACpC,EACAA,EAAG,UAAU,MAAQ,UAAkB,CAQvC,EACAA,EAAG,UAAU,SAAW,UAAqB,CAC3C,GAAI,UAAU,CAAC,YAAaA,EAAI,CAC9B,IAAIhJ,EAAI,UAAU,CAAC,EACnB,OAAIA,EAAE,MAAO,EAAWgJ,EAAG,UAAS,EAC7BA,EAAG,KAAK,IAAI,EAAE,aAAahJ,CAAC,CACpC,SAAU,OAAO,UAAU,CAAC,GAAM,SAAU,CAC3C,IAAIiK,EAAM,UAAU,CAAC,EACrB,OAAIxE,EAAO,MAAMwE,CAAG,EAAYjB,EAAG,YAC5BA,EAAG,KAAK,IAAI,EAAE,aAAaiB,EAAK,CAAG,CAC3C,CACH,EACAjB,EAAG,UAAU,MAAQ,UAAkB,CACrC,OAAOvD,EAAO,MAAM,KAAK,GAAG,CAC9B,EACAuD,EAAG,UAAU,SAAW,UAAqB,CAC3C,OAAO,KAAK,MAAM,KAAK,GAAG,CAC5B,EACAA,EAAG,UAAU,SAAW,UAAqB,CAC3C,IAAIO,EAAMP,EAAG,UAAU,KAAK,GAAG,EAC/B,OAAIO,GAAO,IAAMA,GAAO,GAAa,KAAK,qBACnC,KAAK,cAAe,CAC7B,EACAP,EAAG,UAAU,mBAAqB,UAA+B,CAC/D,IAAIqD,EAAa,KAAK,yBACtB,GAAIA,IAAe,KAAQ,OAAOA,EAClC,IAAI/C,EAAY,IAAI,MAAM,CAAC,EAAE,KAAK,IAAI,EAClCgD,EAAY,KAAK,yBAAyB,GAAMhD,CAAS,EACzDG,EAAkBH,EAAU,CAAC,EAAI,EACjC/M,EAAM+P,EACV,GAAIA,EAAU,OAAO,CAAC,IAAM,IAC1B/P,EAAM,IAAM+P,UACH7C,EAAkB,EAC3BlN,EAAM,KAAOyM,EAAG,aAAa,IAAK,CAACS,CAAe,EAAI6C,UAC7CA,EAAU,QAAQ,GAAG,IAAM,GAAI,CACxC,IAAIC,EAAY9C,EAAkB6C,EAAU,OACxCE,EAASxD,EAAG,aAAa,IAAKuD,CAAS,EAC3ChQ,EAAM+P,EAAYE,EAAS,IAC5B,CACD,OAAI,KAAK,WAAU,EAAa,IAAMjQ,EAC/BA,CACT,EACAyM,EAAG,UAAU,WAAa,UAAuB,CAC/C,IAAIoB,EAAK,KACLC,EAAK,KACLC,EAAK,KACLC,EAAK,KACLC,EAAI,KACJvE,EAAI,KACJwE,EAAI,KACJ,EAAI,KACRD,EAAI,EAAM,KAAK,IACfvE,EAAI+C,EAAG,MAAQwB,EACfJ,EAAKnE,EAAIuE,EACT,EAAIxB,EAAG,MAAQ,KAAK,IACpBoB,EAAKnE,EAAImE,EACTC,EAAKG,EAAIJ,EACTE,EAAK,EAAI,KAAK,IACdG,EAAID,EAAI,KAAK,IACbF,EAAK,EAAIA,EACTC,EAAK,KAAK,IAAMD,EAChB,EAAIF,EAAKE,EAAKG,EAAIL,EAAKG,EAAKF,EAAKC,EAAKD,EAAKE,EAC3CtE,GAAK,EAAMwE,EAAI,EAAID,EAAI,KAAK,KAAO,KAAK,IACxC,IAAIG,EAAMH,EAAIvE,EACV2E,EAAMJ,EAAIG,EAAM1E,EACpB,OAAO,IAAI+C,EAAG2B,EAAKC,CAAG,CACxB,EACA5B,EAAG,UAAU,cAAgB,UAA0B,CACrD,GAAI,KAAK,OAAM,EAAM,OAAOA,EAAG,aAC/B,IAAIqD,EAAa,KAAK,yBACtB,GAAIA,IAAe,KAAQ,OAAOA,EAClC,IAAI/C,EAAY,IAAI,MAAM,CAAC,EAAE,KAAK,IAAI,EAClCmD,EAAS,KAAK,yBAAyB,GAAOnD,CAAS,EACvDoD,EAAS1D,EAAG,sBAAwBM,EAAU,CAAC,EACnD,GAAImD,EAAO,OAAO,CAAC,IAAM,IACvB,MAAM,IAAI,MAAM,uBAAyBA,CAAM,EAEjD,IAAIE,EAAiB,GACjBF,EAAO,OAAS,IAAKE,EAAiBF,EAAO,UAAU,CAAC,GAC5D,IAAIG,EAAoBH,EAAO,OAAO,CAAC,EAAI,IAAME,EACjD,OAAI,KAAK,WAAY,EAAW,IAAMC,EAAoBF,EACnDE,EAAoBF,CAC7B,EACA1D,EAAG,UAAU,IAAM,UAAgB,CACjC,OAAI,KAAK,MAAK,EAAaA,EAAG,IAC1B,KAAK,WAAY,EAAW,KAAK,OAAM,EACpC,IAAIA,EAAG,IAAI,CACpB,EACAA,EAAG,UAAU,WAAa,UAAuB,CAC/C,OAAQ,KAAK,IAAM,GAAO,KAAK,MAAQ,IAAQ,KAAK,IAAM,CAC5D,EACAA,EAAG,UAAU,GAAK,SAAahJ,EAAG,CAChC,OAAQ,KAAK,IAAMA,EAAE,KAAO,KAAK,MAAQA,EAAE,MAAQ,KAAK,IAAMA,EAAE,GAClE,EACAgJ,EAAG,UAAU,IAAM,UAAgB,CACjC,GAAI,UAAU,CAAC,YAAaA,EAAI,CAC9B,IAAIhJ,EAAI,UAAU,CAAC,EACnB,OAAOgJ,EAAG,KAAK,IAAI,EAAE,QAAQhJ,CAAC,CAC/B,SAAU,OAAO,UAAU,CAAC,GAAM,SAAU,CAC3C,IAAIiK,EAAM,UAAU,CAAC,EACrB,OAAOjB,EAAG,KAAK,IAAI,EAAE,QAAQiB,CAAG,CACjC,CACH,EACAjB,EAAG,UAAU,KAAO,UAAiB,CACnC,GAAI,UAAU,SAAW,GACvB,GAAI,OAAO,UAAU,CAAC,GAAM,SAAU,CACpC,IAAIjJ,EAAI,UAAU,CAAC,EACnB,KAAK,IAAMA,EACX,KAAK,IAAM,CACZ,SAAU,UAAU,CAAC,YAAaiJ,EAAI,CACrC,IAAIC,EAAK,UAAU,CAAC,EACpB,KAAK,IAAMA,EAAG,IACd,KAAK,IAAMA,EAAG,GACf,UACQ,UAAU,SAAW,EAAG,CACjC,IAAIC,EAAK,UAAU,CAAC,EAChBC,EAAK,UAAU,CAAC,EACpB,KAAK,IAAMD,EACX,KAAK,IAAMC,CACZ,CACH,EACAH,EAAG,UAAU,GAAK,SAAahJ,EAAG,CAChC,OAAQ,KAAK,IAAMA,EAAE,KAAO,KAAK,MAAQA,EAAE,MAAQ,KAAK,IAAMA,EAAE,GAClE,EACAgJ,EAAG,UAAU,WAAa,UAAuB,CAC/C,OAAQ,KAAK,IAAM,GAAO,KAAK,MAAQ,IAAQ,KAAK,IAAM,CAC5D,EACAA,EAAG,UAAU,MAAQ,UAAkB,CACrC,OAAI,KAAK,MAAK,EAAaA,EAAG,IAC1B,KAAK,aAAuB,KAAK,MAAO,EAAkB,KAAK,KAAI,CACzE,EACAA,EAAG,UAAU,OAAS,UAAmB,CACvC,OAAI,KAAK,IAAM,EAAY,EACvB,KAAK,IAAM,EAAY,GACvB,KAAK,IAAM,EAAY,EACvB,KAAK,IAAM,EAAY,GACpB,CACT,EACAA,EAAG,UAAU,YAAc,UAAwB,CACjD,MAAO,CAACjD,GAAcH,GAAYC,EAAQ,CAC5C,EACAmD,EAAG,UAAU,SAAW,UAAqB,CAC3C,OAAOA,CACT,EACAA,EAAG,IAAM,SAAcjJ,EAAG,CACxB,OAAOiJ,EAAG,QAAQjJ,CAAC,EAAE,aAAaA,CAAC,CACrC,EACAiJ,EAAG,QAAU,UAAoB,CAC/B,GAAI,OAAO,UAAU,CAAC,GAAM,SAAU,CACpC,IAAIJ,EAAM,UAAU,CAAC,EACrB,OAAOI,EAAG,MAAMJ,CAAG,CACpB,SAAU,OAAO,UAAU,CAAC,GAAM,SAAU,CAC3C,IAAI7I,EAAI,UAAU,CAAC,EACnB,OAAO,IAAIiJ,EAAGjJ,CAAC,CAChB,CACH,EACAiJ,EAAG,KAAO,SAAejJ,EAAG,CAC1B,OAAOiJ,EAAG,QAAQjJ,CAAC,EAAE,KAAM,CAC7B,EACAiJ,EAAG,MAAQ,SAAgBJ,EAAK,CAG9B,QAFIpJ,EAAI,EACJqN,EAASjE,EAAI,OACVG,GAAU,aAAaH,EAAI,OAAOpJ,CAAC,CAAC,GAAKA,IAChD,IAAIsN,EAAa,GACjB,GAAItN,EAAIqN,EAAQ,CACd,IAAIE,EAASnE,EAAI,OAAOpJ,CAAC,GACrBuN,IAAW,KAAOA,IAAW,OAC/BvN,IACIuN,IAAW,MAAOD,EAAa,IAEtC,CAKD,QAJI7H,EAAM,IAAI+D,EACVW,EAAY,EACZqD,EAAe,EACfnC,EAAM,EAEJ,EAAArL,GAAKqN,IADE,CAEX,IAAII,EAAKrE,EAAI,OAAOpJ,CAAC,EAErB,GADAA,IACIuJ,GAAU,QAAQkE,CAAE,EAAG,CACzB,IAAIC,EAAID,EAAK,IACbhI,EAAI,aAAa+D,EAAG,GAAG,EACvB/D,EAAI,QAAQiI,CAAC,EACbvD,IACA,QACD,CACD,GAAIsD,IAAO,IAAK,CACdD,EAAerD,EACf,QACD,CACD,GAAIsD,IAAO,KAAOA,IAAO,IAAK,CAC5B,IAAIP,EAAS9D,EAAI,UAAUpJ,CAAC,EAC5B,GAAI,CACFqL,EAAM/B,GAAQ,SAAS4D,CAAM,CAC9B,OAAQS,EAAI,CACX,MAAIA,aAAc,MACV,IAAI,MAAM,oBAAsBT,EAAS,cAAgB9D,CAAG,EACrDuE,CACvB,SAAkB,CACZ,KACD,CACD,MAAM,IAAI,MAAM,yBAA2BF,EAAK,iBAAmBzN,EAAI,cAAgBoJ,CAAG,CAC3F,CACD,IAAIwE,EAAOnI,EACPoI,EAAe1D,EAAYqD,EAAenC,EAC9C,GAAIwC,IAAiB,EACnBD,EAAOnI,UACEoI,EAAe,EAAG,CAC3B,IAAI7D,EAAQR,EAAG,IAAI,IAAIqE,CAAY,EACnCD,EAAOnI,EAAI,OAAOuE,CAAK,CAC3B,SAAa6D,EAAe,EAAG,CAC3B,IAAIC,EAAUtE,EAAG,IAAI,IAAI,CAACqE,CAAY,EACtCD,EAAOnI,EAAI,SAASqI,CAAO,CAC5B,CACD,OAAIR,EACKM,EAAK,OAAQ,EAEfA,CACT,EACApE,EAAG,UAAY,UAAsB,CACnC,OAAO,IAAIA,EAAGvD,EAAO,IAAKA,EAAO,GAAG,CACtC,EACAuD,EAAG,KAAO,SAAeC,EAAI,CAC3B,OAAO,IAAID,EAAGC,CAAE,CAClB,EACAD,EAAG,UAAY,SAAoBjJ,EAAG,CACpC,IAAIwN,EAAO,KAAK,IAAIxN,CAAC,EACjByN,EAAS,KAAK,IAAID,CAAI,EAAI,KAAK,IAAI,EAAE,EACrCE,EAAO,KAAK,MAAM,KAAK,MAAMD,CAAM,CAAC,EACpCE,EAAU,KAAK,IAAI,GAAID,CAAI,EAC/B,OAAIC,EAAU,IAAMH,IAAQE,GAAQ,GAC7BA,CACT,EACAzE,EAAG,aAAe,SAAuBiE,EAAIU,EAAK,CAEhD,QADIjE,EAAM,IAAIf,GACL,EAAI,EAAG,EAAIgF,EAAK,IACvBjE,EAAI,OAAOuD,CAAE,EAEf,OAAOvD,EAAI,SAAU,CACvB,EACAN,GAAkB,GAAG,IAAM,UAAY,CAAE,OAAO,IAAIJ,EAAG,kBAA0B,qBAAwB,GACzGI,GAAkB,OAAO,IAAM,UAAY,CAAE,OAAO,IAAIJ,EAAG,kBAA0B,qBAAwB,GAC7GI,GAAkB,KAAK,IAAM,UAAY,CAAE,OAAO,IAAIJ,EAAG,mBAA0B,oBAAwB,GAC3GI,GAAkB,EAAE,IAAM,UAAY,CAAE,OAAO,IAAIJ,EAAG,kBAA0B,qBAAwB,GACxGI,GAAkB,IAAI,IAAM,UAAY,CAAE,OAAO,IAAIJ,EAAGvD,EAAO,IAAKA,EAAO,GAAG,GAC9E2D,GAAkB,IAAI,IAAM,UAAY,CAAE,MAAO,oBAAoB,EACrEA,GAAkB,MAAM,IAAM,UAAY,CAAE,MAAO,UAAW,EAC9DA,GAAkB,iBAAiB,IAAM,UAAY,CAAE,MAAO,GAAE,EAChEA,GAAkB,IAAI,IAAM,UAAY,CAAE,OAAOJ,EAAG,QAAQ,EAAI,GAChEI,GAAkB,IAAI,IAAM,UAAY,CAAE,OAAOJ,EAAG,QAAQ,CAAG,GAC/DI,GAAkB,sBAAsB,IAAM,UAAY,CAAE,MAAO,GAAG,EACtEA,GAAkB,aAAa,IAAM,UAAY,CAAE,MAAO,OAAO,EAEjE,OAAO,iBAAkBJ,EAAII,IAE7B,IAAIwE,GAAiB,UAA2B,GAE5CC,GAAoB,CAAE,gBAAiB,CAAE,aAAc,EAAM,CAAA,EAEjED,GAAe,UAAU,YAAc,UAAwB,CAC7D,MAAO,CAAE,CACX,EACAA,GAAe,UAAU,SAAW,UAAqB,CACvD,OAAOA,EACT,EACAA,GAAe,iBAAmB,SAA2BE,EAAIC,EAAIC,EAAG,CACtE,IAAIzF,EAAQqF,GAAe,uBAAuBE,EAAIC,EAAIC,CAAC,EAC3D,GAAIzF,GAAS,EAAK,OAAOA,EACzB,IAAI0F,EAAMjF,EAAG,QAAQ+E,EAAG,CAAC,EAAE,QAAQ,CAACD,EAAG,CAAC,EACpCI,EAAMlF,EAAG,QAAQ+E,EAAG,CAAC,EAAE,QAAQ,CAACD,EAAG,CAAC,EACpCK,EAAMnF,EAAG,QAAQgF,EAAE,CAAC,EAAE,QAAQ,CAACD,EAAG,CAAC,EACnCK,EAAMpF,EAAG,QAAQgF,EAAE,CAAC,EAAE,QAAQ,CAACD,EAAG,CAAC,EACvC,OAAOE,EAAI,aAAaG,CAAG,EAAE,aAAaF,EAAI,aAAaC,CAAG,CAAC,EAAE,OAAQ,CAC3E,EACAP,GAAe,aAAe,SAAuBzI,EAAIkJ,EAAIjJ,EAAIkJ,EAAI,CACnE,IAAIC,EAAMpJ,EAAG,SAASmJ,CAAE,EAAE,aAAaD,EAAG,SAASjJ,CAAE,CAAC,EACtD,OAAOmJ,EAAI,OAAQ,CACrB,EACAX,GAAe,aAAe,SAAuBE,EAAIC,EAAIS,EAAIC,EAAI,CACnE,IAAIC,EAAS1F,EAAG,QAAQyF,EAAG,CAAC,EAAE,aAAaD,EAAG,CAAC,EAAE,aAAaxF,EAAG,QAAQ+E,EAAG,CAAC,EAAE,aAAaD,EAAG,CAAC,CAAC,EAC7Fa,EAAS3F,EAAG,QAAQyF,EAAG,CAAC,EAAE,aAAaD,EAAG,CAAC,EAAE,aAAaxF,EAAG,QAAQ+E,EAAG,CAAC,EAAE,aAAaD,EAAG,CAAC,CAAC,EAC7Fc,EAAQF,EAAO,SAASC,CAAM,EAC9BE,EAAQ7F,EAAG,QAAQyF,EAAG,CAAC,EAAE,aAAaD,EAAG,CAAC,EAAE,aAAaxF,EAAG,QAAQ8E,EAAG,CAAC,EAAE,aAAaU,EAAG,CAAC,CAAC,EAC5FM,EAAQ9F,EAAG,QAAQyF,EAAG,CAAC,EAAE,aAAaD,EAAG,CAAC,EAAE,aAAaxF,EAAG,QAAQ8E,EAAG,CAAC,EAAE,aAAaU,EAAG,CAAC,CAAC,EAC5FO,EAAOF,EAAM,SAASC,CAAK,EAC3BE,EAAQD,EAAK,WAAWH,CAAK,EAAE,YAAW,EAC1C7O,EAAIiJ,EAAG,QAAQ8E,EAAG,CAAC,EAAE,QAAQ9E,EAAG,QAAQ+E,EAAG,CAAC,EAAE,aAAaD,EAAG,CAAC,EAAE,aAAakB,CAAK,CAAC,EAAE,cACtFC,EAAQjG,EAAG,QAAQ+E,EAAG,CAAC,EAAE,aAAaD,EAAG,CAAC,EAAE,aAAa9E,EAAG,QAAQ8E,EAAG,CAAC,EAAE,aAAaU,EAAG,CAAC,CAAC,EAC5FU,EAAQlG,EAAG,QAAQ+E,EAAG,CAAC,EAAE,aAAaD,EAAG,CAAC,EAAE,aAAa9E,EAAG,QAAQ8E,EAAG,CAAC,EAAE,aAAaU,EAAG,CAAC,CAAC,EAC5FW,EAAOF,EAAM,SAASC,CAAK,EAC3BE,EAAQD,EAAK,WAAWP,CAAK,EAAE,YAAW,EAC1C5O,EAAIgJ,EAAG,QAAQwF,EAAG,CAAC,EAAE,QAAQxF,EAAG,QAAQyF,EAAG,CAAC,EAAE,aAAaD,EAAG,CAAC,EAAE,aAAaY,CAAK,CAAC,EAAE,cAC1F,OAAO,IAAIpJ,EAAWjG,EAAGC,CAAC,CAC5B,EACA4N,GAAe,uBAAyB,SAAiCyB,EAAIC,EAAIC,EAAI,CACnF,IAAIC,EAAS,KACTC,GAAWJ,EAAG,EAAIE,EAAG,IAAMD,EAAG,EAAIC,EAAG,GACrCG,GAAYL,EAAG,EAAIE,EAAG,IAAMD,EAAG,EAAIC,EAAG,GACtChB,EAAMkB,EAAUC,EACpB,GAAID,EAAU,EAAK,CACjB,GAAIC,GAAY,EACd,OAAO9B,GAAe,OAAOW,CAAG,EAEhCiB,EAASC,EAAUC,CAEzB,SAAaD,EAAU,EAAK,CACxB,GAAIC,GAAY,EACd,OAAO9B,GAAe,OAAOW,CAAG,EAEhCiB,EAAS,CAACC,EAAUC,CAE1B,KACI,QAAO9B,GAAe,OAAOW,CAAG,EAElC,IAAIoB,EAAW/B,GAAe,gBAAkB4B,EAChD,OAAIjB,GAAOoB,GAAY,CAACpB,GAAOoB,EACtB/B,GAAe,OAAOW,CAAG,EAE3B,CACT,EACAX,GAAe,OAAS,SAAiB7N,EAAG,CAC1C,OAAIA,EAAI,EAAY,EAChBA,EAAI,EAAY,GACb,CACT,EACA8N,GAAkB,gBAAgB,IAAM,UAAY,CAAE,MAAO,MAAK,EAElE,OAAO,iBAAkBD,GAAgBC,IAEzC,IAAI+B,EAAqB,UAA+B,GAEpDC,GAAoB,CAAE,EAAG,CAAE,aAAc,IAAO,EAAG,CAAE,aAAc,EAAM,EAAC,EAAG,CAAE,aAAc,EAAM,EAAC,EAAG,CAAE,aAAc,EAAI,GAE/HA,GAAkB,EAAE,IAAM,UAAY,CAAE,MAAO,EAAC,EAChDA,GAAkB,EAAE,IAAM,UAAY,CAAE,MAAO,EAAC,EAChDA,GAAkB,EAAE,IAAM,UAAY,CAAE,MAAO,EAAC,EAChDA,GAAkB,EAAE,IAAM,UAAY,CAAE,MAAO,EAAC,EAChDD,EAAmB,UAAU,YAAc,SAAsBrH,EAAOpC,EAAetB,EAAO,GAC9F+K,EAAmB,UAAU,KAAO,UAAiB,CAAA,EACrDA,EAAmB,UAAU,YAAc,SAAsBrH,EAAOpC,EAAe,GACvFyJ,EAAmB,UAAU,cAAgB,UAA0B,CAAA,EACvEA,EAAmB,UAAU,kBAAoB,SAA4BpQ,EAAG,CAAA,EAChFoQ,EAAmB,UAAU,aAAe,UAAyB,CAAA,EACrEA,EAAmB,UAAU,KAAO,SAAerH,EAAO,CAAA,EAC1DqH,EAAmB,UAAU,MAAQ,UAAkB,CAAA,EACvDA,EAAmB,UAAU,eAAiB,SAAyBE,EAAK,CAAA,EAC5EF,EAAmB,UAAU,KAAO,UAAiB,CAAA,EACrDA,EAAmB,UAAU,KAAO,SAAerH,EAAO,CAAA,EAC1DqH,EAAmB,UAAU,kBAAoB,UAA8B,CAAA,EAC/EA,EAAmB,UAAU,YAAc,UAAwB,CACjE,MAAO,CAAC/J,EAAQ,CAClB,EACA+J,EAAmB,UAAU,SAAW,UAAqB,CAC3D,OAAOA,CACT,EAEA,OAAO,iBAAkBA,EAAoBC,IAE7C,IAAIE,GAAY,UAAsB,GAElCC,GAA6B,SAAUC,EAAc,CACvD,SAASD,GAA6B,CACpCC,EAAa,KAAK,KAAM,4DAA4D,CACrF,CAED,OAAKA,IAAeD,EAA0B,UAAYC,GAC1DD,EAA0B,UAAY,OAAO,OAAQC,GAAgBA,EAAa,WAClFD,EAA0B,UAAU,YAAcA,EAClDA,EAA0B,UAAU,YAAc,UAAwB,CACxE,MAAO,CAAE,CACb,EACEA,EAA0B,UAAU,SAAW,UAAqB,CAClE,OAAOA,CACX,EAESA,CACT,EAAED,EAAS,EAEPG,GAAS,UAAmB,GAEhCA,GAAO,UAAY,SAAoBC,EAAKC,EAAQC,EAAMC,EAAS3C,EAAK,CAEtE,QADI1H,EAAI,EACCzG,EAAI4Q,EAAQ5Q,EAAI4Q,EAASzC,EAAKnO,IACrC6Q,EAAKC,EAAUrK,CAAC,EAAIkK,EAAI3Q,CAAC,EACzByG,GAEJ,EAEAiK,GAAO,YAAc,SAAsBK,EAAM,CAC/C,MAAO,CACL,iBAAkB;AAAA,CACnB,EAACA,CAAI,CACR,EAEA,IAAIC,GAAc,SAASA,GAAe,CAIxC,GAHA,KAAK,EAAI,KACT,KAAK,EAAI,KACT,KAAK,EAAI,KACL,UAAU,SAAW,EACvB,KAAK,EAAI,EACT,KAAK,EAAI,EACT,KAAK,EAAI,UACA,UAAU,SAAW,EAAG,CACjC,IAAIC,EAAI,UAAU,CAAC,EACnB,KAAK,EAAIA,EAAE,EACX,KAAK,EAAIA,EAAE,EACX,KAAK,EAAI,CACb,SAAa,UAAU,SAAW,GAC9B,GAAI,OAAO,UAAU,CAAC,GAAM,UAAY,OAAO,UAAU,CAAC,GAAM,SAAU,CACxE,IAAIC,EAAK,UAAU,CAAC,EAChBC,EAAK,UAAU,CAAC,EACpB,KAAK,EAAID,EACT,KAAK,EAAIC,EACT,KAAK,EAAI,CACf,SAAe,UAAU,CAAC,YAAaH,GAAe,UAAU,CAAC,YAAaA,EAAa,CACrF,IAAI1C,EAAK,UAAU,CAAC,EAChBC,EAAK,UAAU,CAAC,EACpB,KAAK,EAAID,EAAG,EAAIC,EAAG,EAAIA,EAAG,EAAID,EAAG,EACjC,KAAK,EAAIC,EAAG,EAAID,EAAG,EAAIA,EAAG,EAAIC,EAAG,EACjC,KAAK,EAAID,EAAG,EAAIC,EAAG,EAAIA,EAAG,EAAID,EAAG,CACvC,SAAe,UAAU,CAAC,YAAa9H,GAAc,UAAU,CAAC,YAAaA,EAAY,CACnF,IAAI4K,EAAO,UAAU,CAAC,EAClBC,EAAO,UAAU,CAAC,EACtB,KAAK,EAAID,EAAK,EAAIC,EAAK,EACvB,KAAK,EAAIA,EAAK,EAAID,EAAK,EACvB,KAAK,EAAIA,EAAK,EAAIC,EAAK,EAAIA,EAAK,EAAID,EAAK,CAC1C,UACQ,UAAU,SAAW,EAAG,CACjC,IAAIE,EAAO,UAAU,CAAC,EAClBC,EAAO,UAAU,CAAC,EAClBC,EAAK,UAAU,CAAC,EACpB,KAAK,EAAIF,EACT,KAAK,EAAIC,EACT,KAAK,EAAIC,CACb,SAAa,UAAU,SAAW,EAAG,CACjC,IAAIC,EAAO,UAAU,CAAC,EAClBC,EAAO,UAAU,CAAC,EAClB1C,EAAK,UAAU,CAAC,EAChBC,EAAK,UAAU,CAAC,EAChB0C,EAAKF,EAAK,EAAIC,EAAK,EACnBE,EAAKF,EAAK,EAAID,EAAK,EACnBI,EAAKJ,EAAK,EAAIC,EAAK,EAAIA,EAAK,EAAID,EAAK,EACrCK,EAAK9C,EAAG,EAAIC,EAAG,EACf8C,EAAK9C,EAAG,EAAID,EAAG,EACfgD,EAAKhD,EAAG,EAAIC,EAAG,EAAIA,EAAG,EAAID,EAAG,EACjC,KAAK,EAAI4C,EAAKI,EAAKD,EAAKF,EACxB,KAAK,EAAIC,EAAKD,EAAKF,EAAKK,EACxB,KAAK,EAAIL,EAAKI,EAAKD,EAAKF,CACzB,CACH,EACAZ,GAAY,UAAU,KAAO,UAAiB,CAC5C,IAAIpJ,EAAI,KAAK,EAAI,KAAK,EACtB,GAAI3B,EAAO,MAAM2B,CAAC,GAAK3B,EAAO,WAAW2B,CAAC,EACxC,MAAM,IAAI4I,GAEZ,OAAO5I,CACT,EACAoJ,GAAY,UAAU,KAAO,UAAiB,CAC5C,IAAIpJ,EAAI,KAAK,EAAI,KAAK,EACtB,GAAI3B,EAAO,MAAM2B,CAAC,GAAK3B,EAAO,WAAW2B,CAAC,EACxC,MAAM,IAAI4I,GAEZ,OAAO5I,CACT,EACAoJ,GAAY,UAAU,cAAgB,UAA0B,CAC9D,IAAIC,EAAI,IAAIzK,EACZ,OAAAyK,EAAE,EAAI,KAAK,OACXA,EAAE,EAAI,KAAK,OACJA,CACT,EACAD,GAAY,UAAU,YAAc,UAAwB,CAC1D,MAAO,CAAE,CACX,EACAA,GAAY,UAAU,SAAW,UAAqB,CACpD,OAAOA,EACT,EACAA,GAAY,aAAe,SAAuB1C,EAAIC,EAAIS,EAAIC,EAAI,CAChE,IAAI0C,EAAKrD,EAAG,EAAIC,EAAG,EACfqD,EAAKrD,EAAG,EAAID,EAAG,EACfuD,EAAKvD,EAAG,EAAIC,EAAG,EAAIA,EAAG,EAAID,EAAG,EAC7BwD,EAAK9C,EAAG,EAAIC,EAAG,EACf8C,EAAK9C,EAAG,EAAID,EAAG,EACfgD,EAAKhD,EAAG,EAAIC,EAAG,EAAIA,EAAG,EAAID,EAAG,EAC7BzO,EAAIqR,EAAKI,EAAKD,EAAKF,EACnBrR,EAAIsR,EAAKD,EAAKF,EAAKK,EACnBC,EAAIN,EAAKI,EAAKD,EAAKF,EACnBM,EAAO3R,EAAI0R,EACXE,EAAO3R,EAAIyR,EACf,GAAIhM,EAAO,MAAMiM,CAAI,GAAMjM,EAAO,WAAWiM,CAAI,GAAKjM,EAAO,MAAMkM,CAAI,GAAMlM,EAAO,WAAWkM,CAAI,EACjG,MAAM,IAAI3B,GAEZ,OAAO,IAAIhK,EAAW0L,EAAMC,CAAI,CAClC,EAEA,IAAIC,EAAW,SAASA,GAAY,CAKlC,GAJA,KAAK,MAAQ,KACb,KAAK,MAAQ,KACb,KAAK,MAAQ,KACb,KAAK,MAAQ,KACT,UAAU,SAAW,EACvB,KAAK,KAAI,UACA,UAAU,SAAW,GAC9B,GAAI,UAAU,CAAC,YAAa5L,EAAY,CACtC,IAAIyK,EAAI,UAAU,CAAC,EACnB,KAAK,KAAKA,EAAE,EAAGA,EAAE,EAAGA,EAAE,EAAGA,EAAE,CAAC,CAC7B,SAAU,UAAU,CAAC,YAAamB,EAAU,CAC3C,IAAI9B,EAAM,UAAU,CAAC,EACrB,KAAK,KAAKA,CAAG,CACd,UACQ,UAAU,SAAW,EAAG,CACjC,IAAIhC,EAAK,UAAU,CAAC,EAChBC,EAAK,UAAU,CAAC,EACpB,KAAK,KAAKD,EAAG,EAAGC,EAAG,EAAGD,EAAG,EAAGC,EAAG,CAAC,CACpC,SAAa,UAAU,SAAW,EAAG,CACjC,IAAI5I,EAAK,UAAU,CAAC,EAChBC,EAAK,UAAU,CAAC,EAChBiJ,EAAK,UAAU,CAAC,EAChBC,EAAK,UAAU,CAAC,EACpB,KAAK,KAAKnJ,EAAIC,EAAIiJ,EAAIC,CAAE,CACzB,CACH,EAEIuD,GAAoB,CAAE,iBAAkB,CAAE,aAAc,EAAM,CAAA,EAClED,EAAS,UAAU,QAAU,UAAoB,CAC/C,OAAO,KAAK,WAAa,KAAK,UAAW,CAC3C,EACAA,EAAS,UAAU,OAAS,SAAiBxL,EAAO,CAClD,GAAI,EAAEA,aAAiBwL,GACrB,MAAO,GAET,IAAIE,EAAgB1L,EACpB,OAAI,KAAK,SACA0L,EAAc,OAAQ,EAExB,KAAK,QAAUA,EAAc,QAAO,GAAM,KAAK,QAAUA,EAAc,QAAS,GAAI,KAAK,QAAUA,EAAc,QAAO,GAAM,KAAK,QAAUA,EAAc,QAAS,CAC7K,EACAF,EAAS,UAAU,aAAe,SAAuB9B,EAAK,CAC5D,GAAI,KAAK,OAAM,GAAMA,EAAI,OAAM,GAAM,CAAC,KAAK,WAAWA,CAAG,EAAK,OAAO,IAAI8B,EACzE,IAAIG,EAAU,KAAK,MAAQjC,EAAI,MAAQ,KAAK,MAAQA,EAAI,MACpDkC,EAAU,KAAK,MAAQlC,EAAI,MAAQ,KAAK,MAAQA,EAAI,MACpDmC,EAAU,KAAK,MAAQnC,EAAI,MAAQ,KAAK,MAAQA,EAAI,MACpDoC,EAAU,KAAK,MAAQpC,EAAI,MAAQ,KAAK,MAAQA,EAAI,MACxD,OAAO,IAAI8B,EAASG,EAASE,EAASD,EAASE,CAAO,CACxD,EACAN,EAAS,UAAU,OAAS,UAAmB,CAC7C,OAAO,KAAK,MAAQ,KAAK,KAC3B,EACAA,EAAS,UAAU,QAAU,UAAoB,CAC/C,OAAO,KAAK,KACd,EACAA,EAAS,UAAU,OAAS,UAAmB,CAC7C,GAAI,UAAU,SAAW,GACvB,GAAI,UAAU,CAAC,YAAa5L,EAAY,CACtC,IAAIyK,EAAI,UAAU,CAAC,EACnB,OAAO,KAAK,OAAOA,EAAE,EAAGA,EAAE,CAAC,CAC5B,SAAU,UAAU,CAAC,YAAamB,EAAU,CAC3C,IAAIxL,EAAQ,UAAU,CAAC,EACvB,OAAI,KAAK,OAAM,GAAMA,EAAM,OAAM,EACxB,GAEFA,EAAM,WAAa,KAAK,OAASA,EAAM,QAAO,GAAM,KAAK,OAASA,EAAM,QAAS,GAAI,KAAK,OAASA,EAAM,QAAO,GAAM,KAAK,KACnI,UACQ,UAAU,SAAW,EAAG,CACjC,IAAIrG,EAAI,UAAU,CAAC,EACfC,EAAI,UAAU,CAAC,EACnB,OAAI,KAAK,SAAmB,GACrBD,GAAK,KAAK,OAASA,GAAK,KAAK,OAASC,GAAK,KAAK,OAASA,GAAK,KAAK,KAC3E,CACH,EACA4R,EAAS,UAAU,WAAa,UAAuB,CACrD,GAAI,UAAU,SAAW,GACvB,GAAI,UAAU,CAAC,YAAaA,EAAU,CACpC,IAAIxL,EAAQ,UAAU,CAAC,EACvB,OAAI,KAAK,OAAM,GAAMA,EAAM,OAAM,EACxB,GAEF,EAAEA,EAAM,MAAQ,KAAK,OAASA,EAAM,MAAQ,KAAK,OAASA,EAAM,MAAQ,KAAK,OAASA,EAAM,MAAQ,KAAK,MACjH,SAAU,UAAU,CAAC,YAAaJ,EAAY,CAC7C,IAAIyK,EAAI,UAAU,CAAC,EACnB,OAAO,KAAK,WAAWA,EAAE,EAAGA,EAAE,CAAC,CAChC,UACQ,UAAU,SAAW,EAAG,CACjC,IAAI1Q,EAAI,UAAU,CAAC,EACfC,EAAI,UAAU,CAAC,EACnB,OAAI,KAAK,SAAmB,GACrB,EAAED,EAAI,KAAK,OAASA,EAAI,KAAK,OAASC,EAAI,KAAK,OAASA,EAAI,KAAK,MACzE,CACH,EACA4R,EAAS,UAAU,QAAU,UAAoB,CAC/C,OAAO,KAAK,KACd,EACAA,EAAS,UAAU,QAAU,UAAoB,CAC/C,OAAO,KAAK,KACd,EACAA,EAAS,UAAU,gBAAkB,UAA4B,CAC/D,GAAI,UAAU,SAAW,GACvB,GAAI,UAAU,CAAC,YAAa5L,EAAY,CACtC,IAAIyK,EAAI,UAAU,CAAC,EACnB,KAAK,gBAAgBA,EAAE,EAAGA,EAAE,CAAC,CAC9B,SAAU,UAAU,CAAC,YAAamB,EAAU,CAC3C,IAAIxL,EAAQ,UAAU,CAAC,EACvB,GAAIA,EAAM,SACR,OAAO,KAEL,KAAK,UACP,KAAK,MAAQA,EAAM,UACnB,KAAK,MAAQA,EAAM,UACnB,KAAK,MAAQA,EAAM,UACnB,KAAK,MAAQA,EAAM,YAEfA,EAAM,MAAQ,KAAK,QACrB,KAAK,MAAQA,EAAM,OAEjBA,EAAM,MAAQ,KAAK,QACrB,KAAK,MAAQA,EAAM,OAEjBA,EAAM,MAAQ,KAAK,QACrB,KAAK,MAAQA,EAAM,OAEjBA,EAAM,MAAQ,KAAK,QACrB,KAAK,MAAQA,EAAM,OAGxB,UACQ,UAAU,SAAW,EAAG,CACjC,IAAIrG,EAAI,UAAU,CAAC,EACfC,EAAI,UAAU,CAAC,EACf,KAAK,UACP,KAAK,MAAQD,EACb,KAAK,MAAQA,EACb,KAAK,MAAQC,EACb,KAAK,MAAQA,IAETD,EAAI,KAAK,QACX,KAAK,MAAQA,GAEXA,EAAI,KAAK,QACX,KAAK,MAAQA,GAEXC,EAAI,KAAK,QACX,KAAK,MAAQA,GAEXA,EAAI,KAAK,QACX,KAAK,MAAQA,GAGlB,CACH,EACA4R,EAAS,UAAU,UAAY,UAAsB,CACnD,GAAI,KAAK,SAAY,MAAO,GAC5B,IAAIH,EAAI,KAAK,WACThG,EAAI,KAAK,YACb,OAAIgG,EAAIhG,EAAYgG,EACbhG,CACT,EACAmG,EAAS,UAAU,SAAW,UAAqB,CACjD,OAAI,KAAK,SACA,EAEF,KAAK,MAAQ,KAAK,KAC3B,EACAA,EAAS,UAAU,UAAY,SAAoBvL,EAAG,CACpD,IAAIyJ,EAAMzJ,EACV,OAAI,KAAK,SACHyJ,EAAI,SAAmB,EACpB,GAEHA,EAAI,SAAmB,EAEzB,KAAK,MAAQA,EAAI,MAAgB,GACjC,KAAK,MAAQA,EAAI,MAAgB,EACjC,KAAK,MAAQA,EAAI,MAAgB,GACjC,KAAK,MAAQA,EAAI,MAAgB,EACjC,KAAK,MAAQA,EAAI,MAAgB,GACjC,KAAK,MAAQA,EAAI,MAAgB,EACjC,KAAK,MAAQA,EAAI,MAAgB,GACjC,KAAK,MAAQA,EAAI,MAAgB,EAC9B,CACT,EACA8B,EAAS,UAAU,UAAY,SAAoBO,EAAQC,EAAQ,CACjE,GAAI,KAAK,SACP,OAAO,KAET,KAAK,KAAK,KAAK,QAAS,EAAGD,EAAQ,KAAK,QAAS,EAAGA,EAAQ,KAAK,QAAO,EAAKC,EAAQ,KAAK,QAAO,EAAKA,CAAM,CAC9G,EACAR,EAAS,UAAU,SAAW,UAAqB,CACjD,MAAO,OAAS,KAAK,MAAQ,MAAQ,KAAK,MAAQ,KAAO,KAAK,MAAQ,MAAQ,KAAK,MAAQ,GAC7F,EACAA,EAAS,UAAU,UAAY,UAAsB,CACnD,KAAK,MAAQ,EACb,KAAK,MAAQ,GACb,KAAK,MAAQ,EACb,KAAK,MAAQ,EACf,EACAA,EAAS,UAAU,UAAY,UAAsB,CACnD,OAAI,KAAK,SACA,EAEF,KAAK,MAAQ,KAAK,KAC3B,EACAA,EAAS,UAAU,UAAY,UAAsB,CACnD,GAAI,KAAK,SAAY,MAAO,GAC5B,IAAIH,EAAI,KAAK,WACThG,EAAI,KAAK,YACb,OAAIgG,EAAIhG,EAAYgG,EACbhG,CACT,EACAmG,EAAS,UAAU,SAAW,UAAqB,CACjD,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAI7U,EAAW,UAAU,CAAC,EAC1B,KAAK,SAASA,EAAUA,CAAQ,CACpC,SAAa,UAAU,SAAW,EAAG,CACjC,IAAIsV,EAAS,UAAU,CAAC,EACpBC,EAAS,UAAU,CAAC,EACxB,GAAI,KAAK,SAAY,OAAO,KAC5B,KAAK,OAASD,EACd,KAAK,OAASA,EACd,KAAK,OAASC,EACd,KAAK,OAASA,GACV,KAAK,MAAQ,KAAK,OAAS,KAAK,MAAQ,KAAK,QAAS,KAAK,UAAW,CAC3E,CACH,EACAV,EAAS,UAAU,SAAW,UAAqB,CACjD,GAAI,UAAU,SAAW,GACvB,GAAI,UAAU,CAAC,YAAaA,EAAU,CACpC,IAAIxL,EAAQ,UAAU,CAAC,EACvB,OAAO,KAAK,OAAOA,CAAK,CACzB,SAAU,UAAU,CAAC,YAAaJ,EAAY,CAC7C,IAAIyK,EAAI,UAAU,CAAC,EACnB,OAAO,KAAK,OAAOA,CAAC,CACrB,UACQ,UAAU,SAAW,EAAG,CACjC,IAAI1Q,EAAI,UAAU,CAAC,EACfC,EAAI,UAAU,CAAC,EACnB,OAAO,KAAK,OAAOD,EAAGC,CAAC,CACxB,CACH,EACA4R,EAAS,UAAU,OAAS,UAAmB,CAC7C,OAAI,KAAK,SAAmB,KACrB,IAAI5L,GAAY,KAAK,QAAS,EAAG,KAAK,QAAO,GAAM,GAAM,KAAK,QAAO,EAAK,KAAK,QAAS,GAAI,CAAG,CACxG,EACA4L,EAAS,UAAU,KAAO,UAAiB,CACzC,GAAI,UAAU,SAAW,EACvB,KAAK,UAAS,UACL,UAAU,SAAW,GAC9B,GAAI,UAAU,CAAC,YAAa5L,EAAY,CACtC,IAAIyK,EAAI,UAAU,CAAC,EACnB,KAAK,KAAKA,EAAE,EAAGA,EAAE,EAAGA,EAAE,EAAGA,EAAE,CAAC,CAC7B,SAAU,UAAU,CAAC,YAAamB,EAAU,CAC3C,IAAI9B,EAAM,UAAU,CAAC,EACrB,KAAK,MAAQA,EAAI,MACjB,KAAK,MAAQA,EAAI,MACjB,KAAK,MAAQA,EAAI,MACjB,KAAK,MAAQA,EAAI,KAClB,UACQ,UAAU,SAAW,EAAG,CACjC,IAAIhC,EAAK,UAAU,CAAC,EAChBC,EAAK,UAAU,CAAC,EACpB,KAAK,KAAKD,EAAG,EAAGC,EAAG,EAAGD,EAAG,EAAGC,EAAG,CAAC,CACpC,SAAa,UAAU,SAAW,EAAG,CACjC,IAAI5I,EAAK,UAAU,CAAC,EAChBC,EAAK,UAAU,CAAC,EAChBiJ,EAAK,UAAU,CAAC,EAChBC,EAAK,UAAU,CAAC,EAChBnJ,EAAKC,GACP,KAAK,MAAQD,EACb,KAAK,MAAQC,IAEb,KAAK,MAAQA,EACb,KAAK,MAAQD,GAEXkJ,EAAKC,GACP,KAAK,MAAQD,EACb,KAAK,MAAQC,IAEb,KAAK,MAAQA,EACb,KAAK,MAAQD,EAEhB,CACH,EACAuD,EAAS,UAAU,QAAU,UAAoB,CAC/C,OAAO,KAAK,KACd,EACAA,EAAS,UAAU,SAAW,SAAmB9B,EAAK,CACpD,GAAI,KAAK,WAAWA,CAAG,EAAK,MAAO,GACnC,IAAIxJ,EAAK,EACL,KAAK,MAAQwJ,EAAI,MAASxJ,EAAKwJ,EAAI,MAAQ,KAAK,MAAkB,KAAK,MAAQA,EAAI,QAASxJ,EAAK,KAAK,MAAQwJ,EAAI,OACtH,IAAIvJ,EAAK,EAET,OADI,KAAK,MAAQuJ,EAAI,MAASvJ,EAAKuJ,EAAI,MAAQ,KAAK,MAAkB,KAAK,MAAQA,EAAI,QAASvJ,EAAK,KAAK,MAAQuJ,EAAI,OAClHxJ,IAAO,EAAcC,EACrBA,IAAO,EAAcD,EAClB,KAAK,KAAKA,EAAKA,EAAKC,EAAKA,CAAE,CACpC,EACAqL,EAAS,UAAU,SAAW,UAAqB,CACjD,IAAI3N,EAAS,GACb,OAAAA,EAAS,GAAKA,EAAS+B,EAAW,SAAS,KAAK,KAAK,EACrD/B,EAAS,GAAKA,EAAS+B,EAAW,SAAS,KAAK,KAAK,EACrD/B,EAAS,GAAKA,EAAS+B,EAAW,SAAS,KAAK,KAAK,EACrD/B,EAAS,GAAKA,EAAS+B,EAAW,SAAS,KAAK,KAAK,EAC9C/B,CACT,EACA2N,EAAS,UAAU,YAAc,UAAwB,CACvD,MAAO,CAAChM,GAAYG,EAAY,CAClC,EACA6L,EAAS,UAAU,SAAW,UAAqB,CACjD,OAAOA,CACT,EACAA,EAAS,WAAa,UAAuB,CAC3C,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAI9D,EAAK,UAAU,CAAC,EAChBC,EAAK,UAAU,CAAC,EAChBC,EAAI,UAAU,CAAC,EACnB,OAAIA,EAAE,IAAMF,EAAG,EAAIC,EAAG,EAAID,EAAG,EAAIC,EAAG,IAAMC,EAAE,IAAMF,EAAG,EAAIC,EAAG,EAAID,EAAG,EAAIC,EAAG,IAAOC,EAAE,IAAMF,EAAG,EAAIC,EAAG,EAAID,EAAG,EAAIC,EAAG,IAAMC,EAAE,IAAMF,EAAG,EAAIC,EAAG,EAAID,EAAG,EAAIC,EAAG,EAI3J,SAAa,UAAU,SAAW,EAAG,CACjC,IAAI6C,EAAO,UAAU,CAAC,EAClBC,EAAO,UAAU,CAAC,EAClBrC,EAAK,UAAU,CAAC,EAChBC,EAAK,UAAU,CAAC,EAChB8D,EAAO,KAAK,IAAI/D,EAAG,EAAGC,EAAG,CAAC,EAC1B+D,EAAO,KAAK,IAAIhE,EAAG,EAAGC,EAAG,CAAC,EAC1BgE,EAAO,KAAK,IAAI7B,EAAK,EAAGC,EAAK,CAAC,EAC9B6B,EAAO,KAAK,IAAI9B,EAAK,EAAGC,EAAK,CAAC,EAQlC,MAPI,EAAA4B,EAAOD,GACPE,EAAOH,IACXA,EAAO,KAAK,IAAI/D,EAAG,EAAGC,EAAG,CAAC,EAC1B+D,EAAO,KAAK,IAAIhE,EAAG,EAAGC,EAAG,CAAC,EAC1BgE,EAAO,KAAK,IAAI7B,EAAK,EAAGC,EAAK,CAAC,EAC9B6B,EAAO,KAAK,IAAI9B,EAAK,EAAGC,EAAK,CAAC,EAC1B4B,EAAOD,IACPE,EAAOH,EAEZ,CACH,EACAV,GAAkB,iBAAiB,IAAM,UAAY,CAAE,MAAO,mBAAmB,EAEjF,OAAO,iBAAkBD,EAAUC,IAEnC,IAAIc,GAAU,CACZ,QAAW,iCACX,aAAgB,wBAChB,OAAU,MACV,WAAc,cACd,iBAAoB,wBACpB,WAAc,qBAChB,EAeIC,GAAY,SAAoBC,EAAiB,CACnD,KAAK,gBAAkBA,GAAmB,IAAIC,CAChD,EAUAF,GAAU,UAAU,KAAO,SAAeG,EAAK,CAC7C,IAAIjY,EAAUC,EAAM6N,EACpBmK,EAAMA,EAAI,QAAQ,UAAW,GAAG,EAChC,IAAIC,EAAUL,GAAQ,QAAQ,KAAKI,CAAG,EAatC,GAZIA,EAAI,OAAO,OAAO,IAAM,KAC1BC,EAAUL,GAAQ,aAAa,KAAKI,CAAG,EACvCC,EAAQ,CAAC,EAAI,QAEXA,IACFjY,EAAOiY,EAAQ,CAAC,EAAE,YAAW,EAC7BpK,EAAMoK,EAAQ,CAAC,EACXC,GAAQlY,CAAI,IACdD,EAAWmY,GAAQlY,CAAI,EAAE,MAAM,KAAM,CAAC6N,CAAG,CAAC,IAI1C9N,IAAa,OAAa,MAAM,IAAI,MAAM,uBAAyBiY,CAAG,EAE1E,OAAOjY,CACT,EASA8X,GAAU,UAAU,MAAQ,SAAgB9X,EAAU,CACpD,OAAO,KAAK,gBAAgBA,CAAQ,CACtC,EASA8X,GAAU,UAAU,gBAAkB,SAA0B9X,EAAU,CACxE,IAAIC,EAAOD,EAAS,gBAAiB,EAAC,YAAW,EACjD,GAAI,CAACoY,GAAUnY,CAAI,EACjB,OAAO,KAET,IAAIoY,EAAUpY,EAAK,cACfqY,EACJ,OAAItY,EAAS,UACXsY,EAAOD,EAAU,SAEjBC,EAAOD,EAAU,IAAMD,GAAUnY,CAAI,EAAE,MAAM,KAAM,CAACD,CAAQ,CAAC,EAAI,IAE5DsY,CACT,EAOA,IAAIF,GAAY,CACd,WAAY,SAAqBG,EAAc,CAC7C,OAAOA,EAAa,EAAI,IAAMA,EAAa,CAC5C,EASD,MAAO,SAAgBC,EAAS,CAC9B,OAAOJ,GAAU,WAAW,KAAK,KAAMI,EAAQ,aAAa,aAAa,CAAC,CAAC,CAC5E,EAUD,WAAY,SAAqBC,EAAc,CAI7C,QAHIC,EAAS,KAETC,EAAQ,CAAA,EACH,EAAI,EAAG9F,EAAM4F,EAAa,YAAY,OAAQ,EAAI5F,EAAK,EAAE,EAChE8F,EAAM,KAAK,IAAMP,GAAU,MAAM,MAAMM,EAAQ,CAACD,EAAa,YAAY,CAAC,CAAC,CAAC,EAAI,GAAG,EAErF,OAAOE,EAAM,KAAK,GAAG,CACtB,EAQD,WAAY,SAAqBC,EAAc,CAI7C,QAHIF,EAAS,KAETC,EAAQ,CAAA,EACH,EAAI,EAAG9F,EAAM+F,EAAa,QAAQ,aAAa,OAAQ,EAAI/F,EAAK,EAAE,EACzE8F,EAAM,KAAKP,GAAU,WAAW,MAAMM,EAAQ,CAACE,EAAa,QAAQ,aAAa,CAAC,CAAC,CAAC,CAAC,EAEvF,OAAOD,EAAM,KAAK,GAAG,CACtB,EAED,WAAY,SAAqBE,EAAc,CAI7C,QAHIH,EAAS,KAETC,EAAQ,CAAA,EACH,EAAI,EAAG9F,EAAMgG,EAAa,QAAQ,aAAa,OAAQ,EAAIhG,EAAK,EAAE,EACzE8F,EAAM,KAAKP,GAAU,WAAW,MAAMM,EAAQ,CAACG,EAAa,QAAQ,aAAa,CAAC,CAAC,CAAC,CAAC,EAEvF,OAAOF,EAAM,KAAK,GAAG,CACtB,EASD,gBAAiB,SAA0BG,EAAmB,CAI5D,QAHIJ,EAAS,KAETC,EAAQ,CAAA,EACH,EAAI,EAAG9F,EAAMiG,EAAkB,YAAY,OAAQ,EAAIjG,EAAK,EAAE,EACrE8F,EAAM,KAAK,IACTP,GAAU,WAAW,MAAMM,EAAQ,CAACI,EAAkB,YAAY,CAAC,CAAC,CAAC,EACrE,GAAG,EAEP,OAAOH,EAAM,KAAK,GAAG,CACtB,EAQD,QAAS,SAAkBI,EAAW,CACpC,IAAIL,EAAS,KAETC,EAAQ,CAAA,EACZA,EAAM,KAAK,IAAMP,GAAU,WAAW,MAAM,KAAM,CAACW,EAAU,MAAM,CAAC,EAAI,GAAG,EAC3E,QAAS,EAAI,EAAGlG,EAAMkG,EAAU,OAAO,OAAQ,EAAIlG,EAAK,EAAE,EACxD8F,EAAM,KAAK,IAAMP,GAAU,WAAW,MAAMM,EAAQ,CAACK,EAAU,OAAO,CAAC,CAAC,CAAC,EAAI,GAAG,EAElF,OAAOJ,EAAM,KAAK,GAAG,CACtB,EAQD,aAAc,SAAuBK,EAAgB,CAInD,QAHIN,EAAS,KAETC,EAAQ,CAAA,EACH,EAAI,EAAG9F,EAAMmG,EAAe,YAAY,OAAQ,EAAInG,EAAK,EAAE,EAClE8F,EAAM,KAAK,IAAMP,GAAU,QAAQ,MAAMM,EAAQ,CAACM,EAAe,YAAY,CAAC,CAAC,CAAC,EAAI,GAAG,EAEzF,OAAOL,EAAM,KAAK,GAAG,CACtB,EASD,mBAAoB,SAA6BM,EAAY,CAI3D,QAHIP,EAAS,KAETC,EAAQ,CAAA,EACH,EAAI,EAAG9F,EAAMoG,EAAW,YAAY,OAAQ,EAAIpG,EAAK,EAAE,EAC9D8F,EAAM,KAAKD,EAAO,gBAAgBO,EAAW,YAAY,CAAC,CAAC,CAAC,EAE9D,OAAON,EAAM,KAAK,GAAG,CACtB,CACH,EAOIR,GAAU,CAQZ,MAAO,SAAgBrK,EAAK,CAC1B,GAAIA,IAAQ,OACV,OAAO,KAAK,gBAAgB,YAAa,EAG3C,IAAIjN,EAASiN,EAAI,KAAI,EAAG,MAAM+J,GAAQ,MAAM,EAC5C,OAAO,KAAK,gBAAgB,YAAY,IAAI3M,EAAW,OAAO,WAAWrK,EAAO,CAAC,CAAC,EAChF,OAAO,WAAWA,EAAO,CAAC,CAAC,CAAC,CAAC,CAChC,EASD,WAAY,SAAqBiN,EAAK,CACpC,IAAI4K,EAAS,KAEb,GAAI5K,IAAQ,OACV,OAAO,KAAK,gBAAgB,iBAAkB,EAMhD,QAHI1N,EACAO,EAASmN,EAAI,KAAM,EAAC,MAAM,GAAG,EAC7BoL,EAAa,CAAA,EACRxU,EAAI,EAAGmO,EAAMlS,EAAO,OAAQ+D,EAAImO,EAAK,EAAEnO,EAC9CtE,EAAQO,EAAO+D,CAAC,EAAE,QAAQmT,GAAQ,WAAY,IAAI,EAClDqB,EAAW,KAAKf,GAAQ,MAAM,MAAMO,EAAQ,CAACtY,CAAK,CAAC,CAAC,EAEtD,OAAO,KAAK,gBAAgB,iBAAiB8Y,CAAU,CACxD,EASD,WAAY,SAAqBpL,EAAK,CACpC,GAAIA,IAAQ,OACV,OAAO,KAAK,gBAAgB,iBAAkB,EAMhD,QAHInN,EAASmN,EAAI,KAAM,EAAC,MAAM,GAAG,EAC7BoL,EAAa,CAAA,EACbrY,EACK6D,EAAI,EAAGmO,EAAMlS,EAAO,OAAQ+D,EAAImO,EAAK,EAAEnO,EAC9C7D,EAASF,EAAO+D,CAAC,EAAE,KAAM,EAAC,MAAMmT,GAAQ,MAAM,EAC9CqB,EAAW,KAAK,IAAIhO,EAAW,OAAO,WAAWrK,EAAO,CAAC,CAAC,EAAG,OAAO,WAAWA,EAAO,CAAC,CAAC,CAAC,CAAC,EAE5F,OAAO,KAAK,gBAAgB,iBAAiBqY,CAAU,CACxD,EASD,WAAY,SAAqBpL,EAAK,CACpC,GAAIA,IAAQ,OACV,OAAO,KAAK,gBAAgB,iBAAkB,EAMhD,QAHInN,EAASmN,EAAI,KAAM,EAAC,MAAM,GAAG,EAC7BoL,EAAa,CAAA,EACbrY,EACK6D,EAAI,EAAGmO,EAAMlS,EAAO,OAAQ+D,EAAImO,EAAK,EAAEnO,EAC9C7D,EAASF,EAAO+D,CAAC,EAAE,KAAM,EAAC,MAAMmT,GAAQ,MAAM,EAC9CqB,EAAW,KAAK,IAAIhO,EAAW,OAAO,WAAWrK,EAAO,CAAC,CAAC,EAAG,OAAO,WAAWA,EAAO,CAAC,CAAC,CAAC,CAAC,EAE5F,OAAO,KAAK,gBAAgB,iBAAiBqY,CAAU,CACxD,EASD,gBAAiB,SAA0BpL,EAAK,CAC9C,IAAI4K,EAAS,KAEb,GAAI5K,IAAQ,OACV,OAAO,KAAK,gBAAgB,sBAAuB,EAMrD,QAHI5J,EACAiV,EAAQrL,EAAI,KAAI,EAAG,MAAM+J,GAAQ,UAAU,EAC3CqB,EAAa,CAAA,EACRxU,EAAI,EAAGmO,EAAMsG,EAAM,OAAQzU,EAAImO,EAAK,EAAEnO,EAC7CR,EAAOiV,EAAMzU,CAAC,EAAE,QAAQmT,GAAQ,WAAY,IAAI,EAChDqB,EAAW,KAAKf,GAAQ,WAAW,MAAMO,EAAQ,CAACxU,CAAI,CAAC,CAAC,EAE1D,OAAO,KAAK,gBAAgB,sBAAsBgV,CAAU,CAC7D,EASD,QAAS,SAAkBpL,EAAK,CAC9B,IAAI4K,EAAS,KAEb,GAAI5K,IAAQ,OACV,OAAO,KAAK,gBAAgB,cAAe,EAO7C,QAJI9M,EAAMoY,EAAYC,EAClBC,EAAQxL,EAAI,KAAI,EAAG,MAAM+J,GAAQ,UAAU,EAC3C0B,EACAC,EAAQ,CAAA,EACH9U,EAAI,EAAGmO,EAAMyG,EAAM,OAAQ5U,EAAImO,EAAK,EAAEnO,EAC7C1D,EAAOsY,EAAM5U,CAAC,EAAE,QAAQmT,GAAQ,WAAY,IAAI,EAChDuB,EAAajB,GAAQ,WAAW,MAAMO,EAAQ,CAAC1X,CAAI,CAAC,EACpDqY,EAAaX,EAAO,gBAAgB,iBAAiBU,EAAW,OAAO,EACnE1U,IAAM,EACR6U,EAAQF,EAERG,EAAM,KAAKH,CAAU,EAGzB,OAAO,KAAK,gBAAgB,cAAcE,EAAOC,CAAK,CACvD,EASD,aAAc,SAAuB1L,EAAK,CACxC,IAAI4K,EAAS,KAEb,GAAI5K,IAAQ,OACV,OAAO,KAAK,gBAAgB,mBAAoB,EAMlD,QAHIxN,EACAY,EAAW4M,EAAI,KAAI,EAAG,MAAM+J,GAAQ,gBAAgB,EACpDqB,EAAa,CAAA,EACRxU,EAAI,EAAGmO,EAAM3R,EAAS,OAAQwD,EAAImO,EAAK,EAAEnO,EAChDpE,EAAUY,EAASwD,CAAC,EAAE,QAAQmT,GAAQ,WAAY,IAAI,EACtDqB,EAAW,KAAKf,GAAQ,QAAQ,MAAMO,EAAQ,CAACpY,CAAO,CAAC,CAAC,EAE1D,OAAO,KAAK,gBAAgB,mBAAmB4Y,CAAU,CAC1D,EASD,mBAAoB,SAA6BpL,EAAK,CACpD,IAAI4K,EAAS,KAEb,GAAI5K,IAAQ,OACV,OAAO,KAAK,gBAAgB,yBAA0B,EAIxDA,EAAMA,EAAI,QAAQ,kBAAmB,KAAK,EAG1C,QAFI2L,EAAW3L,EAAI,KAAM,EAAC,MAAM,GAAG,EAC/BoL,EAAa,CAAA,EACRxU,EAAI,EAAGmO,EAAM4G,EAAS,OAAQ/U,EAAImO,EAAK,EAAEnO,EAChDwU,EAAW,KAAKR,EAAO,KAAKe,EAAS/U,CAAC,CAAC,CAAC,EAE1C,OAAO,KAAK,gBAAgB,yBAAyBwU,CAAU,CAChE,CACH,EAoBIQ,GAAY,SAAoB3B,EAAiB,CACnD,KAAK,OAAS,IAAID,GAAUC,CAAe,CAC7C,EAUA2B,GAAU,UAAU,MAAQ,SAAgB1Z,EAAU,CACpD,OAAO,KAAK,OAAO,MAAMA,CAAQ,CACnC,EAWA0Z,GAAU,aAAe,SAAuBC,EAAI3G,EAAI,CACtD,GAAI,UAAU,SAAW,EACvB,MAAM,IAAI,MAAM,iBAAiB,EAEnC,MAAO,gBAAkB2G,EAAG,EAAI,IAAMA,EAAG,EAAI,KAAO3G,EAAG,EAAI,IAAMA,EAAG,EAAI,IAC1E,EAEA,IAAI4G,GAAoB,SAAUnP,EAAO,CACvC,SAASmP,EAAkBlP,EAAS,CAClCD,EAAM,KAAK,KAAMC,CAAO,EACxB,KAAK,KAAO,mBACZ,KAAK,QAAUA,EACf,KAAK,MAAS,IAAID,EAAK,EAAI,KAC5B,CAED,OAAKA,IAAQmP,EAAiB,UAAYnP,GAC1CmP,EAAiB,UAAY,OAAO,OAAQnP,GAASA,EAAM,WAC3DmP,EAAiB,UAAU,YAAcA,EAElCA,CACT,EAAE,KAAK,EAEHC,GAA4B,SAAUC,EAAqB,CAC7D,SAASD,GAA4B,CAEnC,GADAC,EAAoB,KAAK,IAAI,EACzB,UAAU,SAAW,EACvBA,EAAoB,KAAK,IAAI,UACpB,UAAU,SAAW,EAAG,CACjC,IAAIpP,EAAU,UAAU,CAAC,EACzBoP,EAAoB,KAAK,KAAMpP,CAAO,CACvC,CACF,CAED,OAAKoP,IAAsBD,EAAyB,UAAYC,GAChED,EAAyB,UAAY,OAAO,OAAQC,GAAuBA,EAAoB,WAC/FD,EAAyB,UAAU,YAAcA,EACjDA,EAAyB,UAAU,YAAc,UAAwB,CACvE,MAAO,CAAE,CACb,EACEA,EAAyB,UAAU,SAAW,UAAqB,CACjE,OAAOA,CACX,EAESA,CACT,EAAED,EAAgB,EAEdG,EAAS,UAAmB,GAEhCA,EAAO,UAAU,YAAc,UAAwB,CACrD,MAAO,CAAE,CACX,EACAA,EAAO,UAAU,SAAW,UAAqB,CAC/C,OAAOA,CACT,EACAA,EAAO,qBAAuB,UAAiC,CAC7D,GAAI,UAAU,SAAW,EACvBA,EAAO,qBAAqB,IAAI,UACvB,UAAU,SAAW,EAAG,CACjC,IAAIrP,EAAU,UAAU,CAAC,EACzB,MAAM,IAAImP,GAAyB,2BAA6BnP,IAAY,KAAO,KAAOA,EAAU,GAAG,CACxG,CACH,EACAqP,EAAO,OAAS,UAAmB,CACjC,IAAIC,EACAtP,EACJ,GAAI,UAAU,SAAW,EACvBsP,EAAY,UAAU,CAAC,EACvBD,EAAO,OAAOC,EAAW,IAAI,UACpB,UAAU,SAAW,IAC9BA,EAAY,UAAU,CAAC,EACvBtP,EAAU,UAAU,CAAC,EACjB,CAACsP,GACH,MAAItP,IAAY,KACR,IAAImP,GAEJ,IAAIA,GAAyBnP,CAAO,CAIlD,EACAqP,EAAO,OAAS,UAAmB,CACjC,IAAIE,EACAC,EACAxP,EACJ,GAAI,UAAU,SAAW,EACvBuP,EAAgB,UAAU,CAAC,EAC3BC,EAAc,UAAU,CAAC,EACzBH,EAAO,OAAOE,EAAeC,EAAa,IAAI,UACrC,UAAU,SAAW,IAC9BD,EAAgB,UAAU,CAAC,EAC3BC,EAAc,UAAU,CAAC,EACzBxP,EAAU,UAAU,CAAC,EACjB,CAACwP,EAAY,OAAOD,CAAa,GACnC,MAAM,IAAIJ,GAAyB,YAAcI,EAAgB,oBAAsBC,GAAexP,IAAY,KAAO,KAAOA,EAAU,GAAG,CAGnJ,EAEA,IAAIyP,EAAkB,UAA4B,CAChD,KAAK,QAAU,KACf,KAAK,YAAc,MAAM,CAAC,EAAE,KAAM,EAAC,IAAI,UAAY,CAAE,OAAO,MAAM,CAAC,CAAI,CAAA,EACvE,KAAK,OAAS,IAAI,MAAM,CAAC,EAAE,KAAK,IAAI,EACpC,KAAK,cAAgB,KACrB,KAAK,UAAY,KACjB,KAAK,IAAM,KACX,KAAK,IAAM,KACX,KAAK,gBAAkB,KACvB,KAAK,OAAO,CAAC,EAAI,IAAIjP,EACrB,KAAK,OAAO,CAAC,EAAI,IAAIA,EACrB,KAAK,IAAM,KAAK,OAAO,CAAC,EACxB,KAAK,IAAM,KAAK,OAAO,CAAC,EACxB,KAAK,QAAU,CACjB,EAEIkP,GAAqB,CAAE,eAAgB,CAAE,aAAc,EAAM,EAAC,aAAc,CAAE,aAAc,EAAI,EAAG,UAAW,CAAE,aAAc,IAAO,gBAAiB,CAAE,aAAc,EAAM,EAAC,mBAAoB,CAAE,aAAc,EAAI,EAAG,uBAAwB,CAAE,aAAc,EAAM,CAAA,EAC1QD,EAAgB,UAAU,qBAAuB,SAA+B/R,EAAciS,EAAU,CACtG,YAAK,oBAAmB,EACjB,KAAK,cAAcjS,CAAY,EAAEiS,CAAQ,CAClD,EACAF,EAAgB,UAAU,mBAAqB,UAA+B,CAC5E,IAAIG,EAAS,IAAIzM,GACjB,OAAI,KAAK,cAAgByM,EAAO,OAAO,WAAW,EAC9C,KAAK,WAAaA,EAAO,OAAO,SAAS,EACzC,KAAK,eAAiBA,EAAO,OAAO,YAAY,EAC7CA,EAAO,SAAU,CAC1B,EACAH,EAAgB,UAAU,oBAAsB,SAA8BnH,EAAIC,EAAIsH,EAAIC,EAAI,CAC5F,KAAK,YAAY,CAAC,EAAE,CAAC,EAAIxH,EACzB,KAAK,YAAY,CAAC,EAAE,CAAC,EAAIC,EACzB,KAAK,YAAY,CAAC,EAAE,CAAC,EAAIsH,EACzB,KAAK,YAAY,CAAC,EAAE,CAAC,EAAIC,EACzB,KAAK,QAAU,KAAK,iBAAiBxH,EAAIC,EAAIsH,EAAIC,CAAE,CACrD,EACAL,EAAgB,UAAU,mBAAqB,UAA+B,CAC5E,OAAO,KAAK,OACd,EACAA,EAAgB,UAAU,oBAAsB,UAAgC,CAC9E,GAAI,UAAU,SAAW,EACnB,KAAK,gBAAkB,OACzB,KAAK,cAAgB,MAAM,CAAC,EAAE,KAAM,EAAC,IAAI,UAAY,CAAE,OAAO,MAAM,CAAC,CAAI,CAAA,EACzE,KAAK,oBAAoB,CAAC,EAC1B,KAAK,oBAAoB,CAAC,WAEnB,UAAU,SAAW,EAAG,CACjC,IAAI/R,EAAe,UAAU,CAAC,EAC1BqS,EAAQ,KAAK,gBAAgBrS,EAAc,CAAC,EAC5CsS,EAAQ,KAAK,gBAAgBtS,EAAc,CAAC,EAC5CqS,EAAQC,GACV,KAAK,cAActS,CAAY,EAAE,CAAC,EAAI,EACtC,KAAK,cAAcA,CAAY,EAAE,CAAC,EAAI,IAEtC,KAAK,cAAcA,CAAY,EAAE,CAAC,EAAI,EACtC,KAAK,cAAcA,CAAY,EAAE,CAAC,EAAI,EAEzC,CACH,EACA+R,EAAgB,UAAU,SAAW,UAAqB,CACxD,OAAO,KAAK,mBAAqB,KAAK,SACxC,EACAA,EAAgB,UAAU,kBAAoB,SAA4BQ,EAAgB,CACxF,KAAK,gBAAkBA,CACzB,EACAR,EAAgB,UAAU,uBAAyB,UAAmC,CAClF,IAAIzB,EAAS,KAEf,GAAI,UAAU,SAAW,EAEvB,MADI,QAAK,uBAAuB,CAAC,GAC7B,KAAK,uBAAuB,CAAC,GAE5B,GAAI,UAAU,SAAW,EAAG,CAEjC,QADIkC,EAAiB,UAAU,CAAC,EACvBlW,EAAI,EAAGA,EAAI,KAAK,QAASA,IAChC,GAAI,EAAEgU,EAAO,OAAOhU,CAAC,EAAE,SAASgU,EAAO,YAAYkC,CAAc,EAAE,CAAC,CAAC,GAAKlC,EAAO,OAAOhU,CAAC,EAAE,SAASgU,EAAO,YAAYkC,CAAc,EAAE,CAAC,CAAC,GACvI,MAAO,GAGX,MAAO,EACR,CACH,EACAT,EAAgB,UAAU,gBAAkB,SAA0BE,EAAU,CAC9E,OAAO,KAAK,OAAOA,CAAQ,CAC7B,EACAF,EAAgB,UAAU,WAAa,UAAuB,CAC5D,OAAO,KAAK,mBAAqB,CAAC,KAAK,SACzC,EACAA,EAAgB,UAAU,gBAAkB,UAA4B,CACtE,OAAO,KAAK,UAAYA,EAAgB,eAC1C,EACAA,EAAgB,UAAU,gBAAkB,SAA0B/R,EAAciS,EAAU,CAC5F,IAAIQ,EAAOV,EAAgB,oBAAoB,KAAK,OAAOE,CAAQ,EAAG,KAAK,YAAYjS,CAAY,EAAE,CAAC,EAAG,KAAK,YAAYA,CAAY,EAAE,CAAC,CAAC,EAC1I,OAAOyS,CACT,EACAV,EAAgB,UAAU,YAAc,UAAwB,CAC9D,OAAO,KAAK,UAAYA,EAAgB,sBAC1C,EACAA,EAAgB,UAAU,SAAW,UAAqB,CACxD,OAAOT,GAAU,aAAa,KAAK,YAAY,CAAC,EAAE,CAAC,EAAG,KAAK,YAAY,CAAC,EAAE,CAAC,CAAC,EAAI,MAAQA,GAAU,aAAa,KAAK,YAAY,CAAC,EAAE,CAAC,EAAG,KAAK,YAAY,CAAC,EAAE,CAAC,CAAC,EAAI,KAAK,mBAAoB,CAC5L,EACAS,EAAgB,UAAU,YAAc,SAAsB/R,EAAc0S,EAAS,CACnF,OAAO,KAAK,YAAY1S,CAAY,EAAE0S,CAAO,CAC/C,EACAX,EAAgB,UAAU,eAAiB,SAAyBY,EAAI,CAGtE,QAFMrC,EAAS,KAENhU,EAAI,EAAGA,EAAI,KAAK,QAASA,IAChC,GAAIgU,EAAO,OAAOhU,CAAC,EAAE,SAASqW,CAAE,EAC9B,MAAO,GAGX,MAAO,EACT,EACAZ,EAAgB,UAAU,4BAA8B,SAAsC/R,EAAciS,EAAU,CACpH,YAAK,oBAAmB,EACjB,KAAK,OAAO,KAAK,cAAcjS,CAAY,EAAEiS,CAAQ,CAAC,CAC/D,EACAF,EAAgB,UAAU,YAAc,UAAwB,CAC9D,MAAO,CAAE,CACX,EACAA,EAAgB,UAAU,SAAW,UAAqB,CACxD,OAAOA,CACT,EACAA,EAAgB,oBAAsB,SAA8BxE,EAAGgE,EAAI3G,EAAI,CAC7E,IAAIxH,EAAK,KAAK,IAAIwH,EAAG,EAAI2G,EAAG,CAAC,EACzBlO,EAAK,KAAK,IAAIuH,EAAG,EAAI2G,EAAG,CAAC,EACzBkB,EAAO,GACX,GAAIlF,EAAE,OAAOgE,CAAE,EACbkB,EAAO,UACElF,EAAE,OAAO3C,CAAE,EAChBxH,EAAKC,EAAMoP,EAAOrP,EAAaqP,EAAOpP,MACrC,CACL,IAAIuP,EAAM,KAAK,IAAIrF,EAAE,EAAIgE,EAAG,CAAC,EACzBsB,EAAM,KAAK,IAAItF,EAAE,EAAIgE,EAAG,CAAC,EACzBnO,EAAKC,EAAMoP,EAAOG,EAAcH,EAAOI,EACvCJ,IAAS,GAAO,CAAClF,EAAE,OAAOgE,CAAE,IAC9BkB,EAAO,KAAK,IAAIG,EAAKC,CAAG,EAE3B,CACD,OAAAlB,EAAO,OAAO,EAAEc,IAAS,GAAO,CAAClF,EAAE,OAAOgE,CAAE,GAAI,0BAA0B,EACnEkB,CACT,EACAV,EAAgB,6BAA+B,SAAuCxE,EAAG3C,EAAIC,EAAI,CAC/F,IAAIzH,EAAKmK,EAAE,EAAI3C,EAAG,EACdvH,EAAKkK,EAAE,EAAI3C,EAAG,EACd6H,EAAO,KAAK,KAAKrP,EAAKA,EAAKC,EAAKA,CAAE,EACtC,OAAAsO,EAAO,OAAO,EAAEc,IAAS,GAAO,CAAClF,EAAE,OAAO3C,CAAE,GAAI,8BAA8B,EACvE6H,CACT,EACAT,GAAmB,eAAe,IAAM,UAAY,CAAE,MAAO,EAAC,EAC9DA,GAAmB,aAAa,IAAM,UAAY,CAAE,MAAO,EAAC,EAC5DA,GAAmB,UAAU,IAAM,UAAY,CAAE,MAAO,EAAC,EACzDA,GAAmB,gBAAgB,IAAM,UAAY,CAAE,MAAO,EAAC,EAC/DA,GAAmB,mBAAmB,IAAM,UAAY,CAAE,MAAO,EAAC,EAClEA,GAAmB,uBAAuB,IAAM,UAAY,CAAE,MAAO,EAAC,EAEtE,OAAO,iBAAkBD,EAAiBC,IAE1C,IAAIc,GAAyB,SAAUC,EAAoB,CACzD,SAASD,GAAyB,CAChCC,EAAmB,MAAM,KAAM,SAAS,CACzC,CAED,OAAKA,IAAqBD,EAAsB,UAAYC,GAC5DD,EAAsB,UAAY,OAAO,OAAQC,GAAsBA,EAAmB,WAC1FD,EAAsB,UAAU,YAAcA,EAE9CA,EAAsB,UAAU,qBAAuB,SAA+BE,EAAO,CAC3F,IAAIC,EAAO,IAAIvE,EAAS,KAAK,YAAY,CAAC,EAAE,CAAC,EAAG,KAAK,YAAY,CAAC,EAAE,CAAC,CAAC,EAClEwE,EAAO,IAAIxE,EAAS,KAAK,YAAY,CAAC,EAAE,CAAC,EAAG,KAAK,YAAY,CAAC,EAAE,CAAC,CAAC,EACtE,OAAOuE,EAAK,SAASD,CAAK,GAAKE,EAAK,SAASF,CAAK,CACtD,EACEF,EAAsB,UAAU,oBAAsB,UAAgC,CACpF,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAIvF,EAAI,UAAU,CAAC,EACf3C,EAAK,UAAU,CAAC,EAChBC,EAAK,UAAU,CAAC,EAEpB,GADA,KAAK,UAAY,GACb6D,EAAS,WAAW9D,EAAIC,EAAI0C,CAAC,GAC3B4F,EAAa,iBAAiBvI,EAAIC,EAAI0C,CAAC,IAAM,GAAK4F,EAAa,iBAAiBtI,EAAID,EAAI2C,CAAC,IAAM,EACjG,YAAK,UAAY,IACbA,EAAE,OAAO3C,CAAE,GAAK2C,EAAE,OAAO1C,CAAE,KAC7B,KAAK,UAAY,IAEnB,KAAK,QAAUkI,EAAmB,mBAC3B,KAGX,KAAK,QAAUA,EAAmB,eACxC,KAAa,QAAOA,EAAmB,UAAU,oBAAoB,MAAM,KAAM,SAAS,CAC1F,EACED,EAAsB,UAAU,mBAAqB,SAA6BM,EAAIC,EAAIC,EAAIC,EAAIC,EAAQ,CACxGA,EAAO,EAAI,KAAK,mBAAmBJ,EAAG,EAAGC,EAAG,EAAGC,EAAG,EAAGC,EAAG,CAAC,EACzDC,EAAO,EAAI,KAAK,mBAAmBJ,EAAG,EAAGC,EAAG,EAAGC,EAAG,EAAGC,EAAG,CAAC,EACzDH,EAAG,GAAKI,EAAO,EACfJ,EAAG,GAAKI,EAAO,EACfH,EAAG,GAAKG,EAAO,EACfH,EAAG,GAAKG,EAAO,EACfF,EAAG,GAAKE,EAAO,EACfF,EAAG,GAAKE,EAAO,EACfD,EAAG,GAAKC,EAAO,EACfD,EAAG,GAAKC,EAAO,CACnB,EACEV,EAAsB,UAAU,4BAA8B,SAAsClI,EAAIC,EAAIS,EAAIC,EAAI,CAClH,IAAIyH,EAAQ,KACZ,GAAI,CACFA,EAAQ1F,GAAY,aAAa1C,EAAIC,EAAIS,EAAIC,CAAE,CAChD,OAAQ5F,EAAG,CACV,GAAIA,aAAamH,GACfkG,EAAQF,EAAsB,gBAAgBlI,EAAIC,EAAIS,EAAIC,CAAE,MACrD,OAAM5F,CACrB,SAAgB,CACZ,OAAOqN,CACX,EACEF,EAAsB,UAAU,aAAe,SAAuBlI,EAAIC,EAAIS,EAAIC,EAAI,CACpF,IAAIyH,EAAQ,KAAK,8BAA8BpI,EAAIC,EAAIS,EAAIC,CAAE,EAC7D,OAAK,KAAK,qBAAqByH,CAAK,IAClCA,EAAQ,IAAIlQ,EAAWgQ,EAAsB,gBAAgBlI,EAAIC,EAAIS,EAAIC,CAAE,CAAC,GAE1E,KAAK,kBAAoB,MAC3B,KAAK,gBAAgB,YAAYyH,CAAK,EAEjCA,CACX,EACEF,EAAsB,UAAU,mBAAqB,SAA6B7Q,EAAIC,EAAIuR,EAAIC,EAAI,CAChG,IAAI7W,EAAIoF,EACJ0R,EAAO,KAAK,IAAI9W,CAAC,EACrB,OAAI,KAAK,IAAIqF,CAAE,EAAIyR,IACjB9W,EAAIqF,EACJyR,EAAO,KAAK,IAAIzR,CAAE,GAEhB,KAAK,IAAIuR,CAAE,EAAIE,IACjB9W,EAAI4W,EACJE,EAAO,KAAK,IAAIF,CAAE,GAEhB,KAAK,IAAIC,CAAE,EAAIC,IACjB9W,EAAI6W,GAEC7W,CACX,EACEiW,EAAsB,UAAU,QAAU,SAAkBlI,EAAIC,EAAIS,EAAIC,EAAIyH,EAAO,CACjF,IAAIY,EAAUlJ,GAAe,aAAaE,EAAIC,EAAIS,EAAIC,CAAE,EACpDsI,EAAO,KAAK,qBAAqBD,CAAO,EAC5C5G,GAAO,IAAI,QAAQ,eAAiB6G,EAAO,2BAA6BD,CAAO,EAC3EZ,EAAM,SAASY,CAAO,EAAI,MAC5B5G,GAAO,IAAI,QAAQ,cAAgBgG,EAAM,SAASY,CAAO,CAAC,CAEhE,EACEd,EAAsB,UAAU,8BAAgC,SAAwClI,EAAIC,EAAIS,EAAIC,EAAI,CACtH,IAAI6H,EAAK,IAAItQ,EAAW8H,CAAE,EACtByI,EAAK,IAAIvQ,EAAW+H,CAAE,EACtByI,EAAK,IAAIxQ,EAAWwI,CAAE,EACtBiI,EAAK,IAAIzQ,EAAWyI,CAAE,EACtBiI,EAAS,IAAI1Q,EACjB,KAAK,qBAAqBsQ,EAAIC,EAAIC,EAAIC,EAAIC,CAAM,EAChD,IAAIR,EAAQ,KAAK,4BAA4BI,EAAIC,EAAIC,EAAIC,CAAE,EAC3D,OAAAP,EAAM,GAAKQ,EAAO,EAClBR,EAAM,GAAKQ,EAAO,EACXR,CACX,EACEF,EAAsB,UAAU,6BAA+B,SAAuClI,EAAIC,EAAIS,EAAIC,EAAI,CACpH,IAAIuI,EAASpF,EAAS,WAAW9D,EAAIC,EAAIS,CAAE,EACvCyI,EAASrF,EAAS,WAAW9D,EAAIC,EAAIU,CAAE,EACvCyI,EAAStF,EAAS,WAAWpD,EAAIC,EAAIX,CAAE,EACvCqJ,EAASvF,EAAS,WAAWpD,EAAIC,EAAIV,CAAE,EAC3C,OAAIiJ,GAAUC,GACZ,KAAK,OAAO,CAAC,EAAIzI,EACjB,KAAK,OAAO,CAAC,EAAIC,EACVwH,EAAmB,wBAExBiB,GAAUC,GACZ,KAAK,OAAO,CAAC,EAAIrJ,EACjB,KAAK,OAAO,CAAC,EAAIC,EACVkI,EAAmB,wBAExBe,GAAUE,GACZ,KAAK,OAAO,CAAC,EAAI1I,EACjB,KAAK,OAAO,CAAC,EAAIV,EACVU,EAAG,OAAOV,CAAE,GAAK,CAACmJ,GAAU,CAACE,EAASlB,EAAmB,mBAAqBA,EAAmB,wBAEtGe,GAAUG,GACZ,KAAK,OAAO,CAAC,EAAI3I,EACjB,KAAK,OAAO,CAAC,EAAIT,EACVS,EAAG,OAAOT,CAAE,GAAK,CAACkJ,GAAU,CAACC,EAASjB,EAAmB,mBAAqBA,EAAmB,wBAEtGgB,GAAUC,GACZ,KAAK,OAAO,CAAC,EAAIzI,EACjB,KAAK,OAAO,CAAC,EAAIX,EACVW,EAAG,OAAOX,CAAE,GAAK,CAACkJ,GAAU,CAACG,EAASlB,EAAmB,mBAAqBA,EAAmB,wBAEtGgB,GAAUE,GACZ,KAAK,OAAO,CAAC,EAAI1I,EACjB,KAAK,OAAO,CAAC,EAAIV,EACVU,EAAG,OAAOV,CAAE,GAAK,CAACiJ,GAAU,CAACE,EAASjB,EAAmB,mBAAqBA,EAAmB,wBAEnGA,EAAmB,eAC9B,EACED,EAAsB,UAAU,qBAAuB,SAA+BoB,EAAKC,EAAKC,EAAKC,EAAKb,EAAQ,CAChH,IAAIc,EAAQJ,EAAI,EAAIC,EAAI,EAAID,EAAI,EAAIC,EAAI,EACpCI,EAAQL,EAAI,EAAIC,EAAI,EAAID,EAAI,EAAIC,EAAI,EACpCK,EAAQN,EAAI,EAAIC,EAAI,EAAID,EAAI,EAAIC,EAAI,EACpCM,EAAQP,EAAI,EAAIC,EAAI,EAAID,EAAI,EAAIC,EAAI,EACpCO,EAAQN,EAAI,EAAIC,EAAI,EAAID,EAAI,EAAIC,EAAI,EACpCM,EAAQP,EAAI,EAAIC,EAAI,EAAID,EAAI,EAAIC,EAAI,EACpCO,EAAQR,EAAI,EAAIC,EAAI,EAAID,EAAI,EAAIC,EAAI,EACpCQ,EAAQT,EAAI,EAAIC,EAAI,EAAID,EAAI,EAAIC,EAAI,EACpCxF,EAAUyF,EAAQI,EAAQJ,EAAQI,EAClC3F,EAAUyF,EAAQI,EAAQJ,EAAQI,EAClC9F,EAAUyF,EAAQI,EAAQJ,EAAQI,EAClC3F,EAAUyF,EAAQI,EAAQJ,EAAQI,EAClCC,GAAWjG,EAAUE,GAAW,EAChCgG,IAAWjG,EAAUE,GAAW,EACpCwE,EAAO,EAAIsB,EACXtB,EAAO,EAAIuB,GACXb,EAAI,GAAKV,EAAO,EAChBU,EAAI,GAAKV,EAAO,EAChBW,EAAI,GAAKX,EAAO,EAChBW,EAAI,GAAKX,EAAO,EAChBY,EAAI,GAAKZ,EAAO,EAChBY,EAAI,GAAKZ,EAAO,EAChBa,EAAI,GAAKb,EAAO,EAChBa,EAAI,GAAKb,EAAO,CACpB,EACEV,EAAsB,UAAU,iBAAmB,SAA2BlI,EAAIC,EAAIS,EAAIC,EAAI,CAE5F,GADA,KAAK,UAAY,GACb,CAACmD,EAAS,WAAW9D,EAAIC,EAAIS,EAAIC,CAAE,EAAK,OAAOwH,EAAmB,gBACtE,IAAIiC,EAAM7B,EAAa,iBAAiBvI,EAAIC,EAAIS,CAAE,EAC9C2J,EAAM9B,EAAa,iBAAiBvI,EAAIC,EAAIU,CAAE,EAClD,GAAKyJ,EAAM,GAAKC,EAAM,GAAOD,EAAM,GAAKC,EAAM,EAC5C,OAAOlC,EAAmB,gBAE5B,IAAImC,EAAM/B,EAAa,iBAAiB7H,EAAIC,EAAIX,CAAE,EAC9CuK,EAAMhC,EAAa,iBAAiB7H,EAAIC,EAAIV,CAAE,EAClD,GAAKqK,EAAM,GAAKC,EAAM,GAAOD,EAAM,GAAKC,EAAM,EAC5C,OAAOpC,EAAmB,gBAE5B,IAAIqC,EAAYJ,IAAQ,GAAKC,IAAQ,GAAKC,IAAQ,GAAKC,IAAQ,EAC/D,OAAIC,EACK,KAAK,6BAA6BxK,EAAIC,EAAIS,EAAIC,CAAE,GAErDyJ,IAAQ,GAAKC,IAAQ,GAAKC,IAAQ,GAAKC,IAAQ,GACjD,KAAK,UAAY,GACbvK,EAAG,SAASU,CAAE,GAAKV,EAAG,SAASW,CAAE,EACnC,KAAK,OAAO,CAAC,EAAIX,EACRC,EAAG,SAASS,CAAE,GAAKT,EAAG,SAASU,CAAE,EAC1C,KAAK,OAAO,CAAC,EAAIV,EACRmK,IAAQ,EACjB,KAAK,OAAO,CAAC,EAAI,IAAIlS,EAAWwI,CAAE,EACzB2J,IAAQ,EACjB,KAAK,OAAO,CAAC,EAAI,IAAInS,EAAWyI,CAAE,EACzB2J,IAAQ,EACjB,KAAK,OAAO,CAAC,EAAI,IAAIpS,EAAW8H,CAAE,EACzBuK,IAAQ,IACjB,KAAK,OAAO,CAAC,EAAI,IAAIrS,EAAW+H,CAAE,KAGpC,KAAK,UAAY,GACjB,KAAK,OAAO,CAAC,EAAI,KAAK,aAAaD,EAAIC,EAAIS,EAAIC,CAAE,GAE5CwH,EAAmB,mBAC9B,EACED,EAAsB,UAAU,YAAc,UAAwB,CACpE,MAAO,CAAE,CACb,EACEA,EAAsB,UAAU,SAAW,UAAqB,CAC9D,OAAOA,CACX,EACEA,EAAsB,gBAAkB,SAA0BlI,EAAIC,EAAIS,EAAIC,EAAI,CAChF,IAAI8J,EAAYzK,EACZ0K,EAAUnC,EAAa,kBAAkBvI,EAAIU,EAAIC,CAAE,EACnDkH,EAAOU,EAAa,kBAAkBtI,EAAIS,EAAIC,CAAE,EACpD,OAAIkH,EAAO6C,IACTA,EAAU7C,EACV4C,EAAYxK,GAEd4H,EAAOU,EAAa,kBAAkB7H,EAAIV,EAAIC,CAAE,EAC5C4H,EAAO6C,IACTA,EAAU7C,EACV4C,EAAY/J,GAEdmH,EAAOU,EAAa,kBAAkB5H,EAAIX,EAAIC,CAAE,EAC5C4H,EAAO6C,IACTA,EAAU7C,EACV4C,EAAY9J,GAEP8J,CACX,EAESvC,CACT,EAAEf,CAAe,EAEbwD,GAAoB,UAA8B,GAEtDA,GAAkB,UAAU,YAAc,UAAwB,CAChE,MAAO,CAAE,CACX,EACAA,GAAkB,UAAU,SAAW,UAAqB,CAC1D,OAAOA,EACT,EACAA,GAAkB,iBAAmB,SAA2B3K,EAAIC,EAAIC,EAAG,CACzE,IAAIC,EAAMF,EAAG,EAAID,EAAG,EAChBI,EAAMH,EAAG,EAAID,EAAG,EAChBK,EAAMH,EAAE,EAAID,EAAG,EACfK,EAAMJ,EAAE,EAAID,EAAG,EACnB,OAAO0K,GAAkB,aAAaxK,EAAKC,EAAKC,EAAKC,CAAG,CAC1D,EACAqK,GAAkB,aAAe,SAAuBtT,EAAIkJ,EAAIjJ,EAAIkJ,EAAI,CACtE,IAAIoK,EAAO,KACPC,EAAO,KACP9X,EAAI,KAER,GADA6X,EAAO,EACHvT,IAAO,GAAOmJ,IAAO,EACvB,OAAID,IAAO,GAAOjJ,IAAO,EAChB,EACEiJ,EAAK,EACVjJ,EAAK,EACA,CAACsT,EAEDA,EAGLtT,EAAK,EACAsT,EAEA,CAACA,EAId,GAAIrK,IAAO,GAAOjJ,IAAO,EACvB,OAAIkJ,EAAK,EACHnJ,EAAK,EACAuT,EAEA,CAACA,EAGNvT,EAAK,EACA,CAACuT,EAEDA,EA8Db,GA1DIrK,EAAK,EACHC,EAAK,EACHD,GAAMC,IAGRoK,EAAO,CAACA,EACRC,EAAOxT,EACPA,EAAKC,EACLA,EAAKuT,EACLA,EAAOtK,EACPA,EAAKC,EACLA,EAAKqK,GAGHtK,GAAM,CAACC,GACToK,EAAO,CAACA,EACRtT,EAAK,CAACA,EACNkJ,EAAK,CAACA,IAENqK,EAAOxT,EACPA,EAAK,CAACC,EACNA,EAAKuT,EACLA,EAAOtK,EACPA,EAAK,CAACC,EACNA,EAAKqK,GAILrK,EAAK,EACH,CAACD,GAAMC,GACToK,EAAO,CAACA,EACRvT,EAAK,CAACA,EACNkJ,EAAK,CAACA,IAENsK,EAAO,CAACxT,EACRA,EAAKC,EACLA,EAAKuT,EACLA,EAAO,CAACtK,EACRA,EAAKC,EACLA,EAAKqK,GAGHtK,GAAMC,GACRnJ,EAAK,CAACA,EACNkJ,EAAK,CAACA,EACNjJ,EAAK,CAACA,EACNkJ,EAAK,CAACA,IAENoK,EAAO,CAACA,EACRC,EAAO,CAACxT,EACRA,EAAK,CAACC,EACNA,EAAKuT,EACLA,EAAO,CAACtK,EACRA,EAAK,CAACC,EACNA,EAAKqK,GAIPxT,EAAK,EACP,GAAIC,EAAK,GACP,GAAI,EAAAD,GAAMC,GAGR,OAAOsT,MAGT,QAAOA,MAEJ,CACL,GAAItT,EAAK,EACP,MAAO,CAACsT,EAER,GAAIvT,GAAMC,EACRsT,EAAO,CAACA,EACRvT,EAAK,CAACA,EACNC,EAAK,CAACA,MAEN,OAAO,CAACsT,CAGb,CACD,OAAa,CAIX,GAHA7X,EAAI,KAAK,MAAMuE,EAAKD,CAAE,EACtBC,EAAKA,EAAKvE,EAAIsE,EACdmJ,EAAKA,EAAKzN,EAAIwN,EACVC,EAAK,EACP,MAAO,CAACoK,EAEV,GAAIpK,EAAKD,EACP,OAAOqK,EAET,GAAIvT,EAAKC,EAAKA,GACZ,GAAIiJ,EAAKC,EAAKA,EACZ,OAAOoK,MAEJ,CACL,GAAIrK,EAAKC,EAAKA,EACZ,MAAO,CAACoK,EAERtT,EAAKD,EAAKC,EACVkJ,EAAKD,EAAKC,EACVoK,EAAO,CAACA,CAEX,CACD,GAAIpK,IAAO,EACT,OAAIlJ,IAAO,EACF,EAEA,CAACsT,EASZ,GANItT,IAAO,IAGXvE,EAAI,KAAK,MAAMsE,EAAKC,CAAE,EACtBD,EAAKA,EAAKtE,EAAIuE,EACdiJ,EAAKA,EAAKxN,EAAIyN,EACVD,EAAK,GACP,OAAOqK,EAET,GAAIrK,EAAKC,EACP,MAAO,CAACoK,EAEV,GAAItT,EAAKD,EAAKA,GACZ,GAAImJ,EAAKD,EAAKA,EACZ,MAAO,CAACqK,MAEL,CACL,GAAIpK,EAAKD,EAAKA,EACZ,OAAOqK,EAEPvT,EAAKC,EAAKD,EACVkJ,EAAKC,EAAKD,EACVqK,EAAO,CAACA,CAEX,CACD,GAAIrK,IAAO,EACT,OAAIlJ,IAAO,EACF,EAEAuT,EAGX,GAAIvT,IAAO,EACT,MAAO,CAACuT,CAEX,CACH,EAEA,IAAIE,GAAqB,UAA+B,CACtD,KAAK,GAAK,KACV,KAAK,eAAiB,EACtB,KAAK,kBAAoB,GACzB,IAAInI,EAAI,UAAU,CAAC,EACnB,KAAK,GAAKA,CACZ,EACAmI,GAAmB,UAAU,aAAe,SAAuB9K,EAAIC,EAAI,CACzE,GAAID,EAAG,EAAI,KAAK,GAAG,GAAKC,EAAG,EAAI,KAAK,GAAG,EAAK,OAAO,KACnD,GAAI,KAAK,GAAG,IAAMA,EAAG,GAAK,KAAK,GAAG,IAAMA,EAAG,EACzC,YAAK,kBAAoB,GAClB,KAET,GAAID,EAAG,IAAM,KAAK,GAAG,GAAKC,EAAG,IAAM,KAAK,GAAG,EAAG,CAC5C,IAAI8K,EAAO/K,EAAG,EACVgL,EAAO/K,EAAG,EACd,OAAI8K,EAAOC,IACTD,EAAO9K,EAAG,EACV+K,EAAOhL,EAAG,GAER,KAAK,GAAG,GAAK+K,GAAQ,KAAK,GAAG,GAAKC,IACpC,KAAK,kBAAoB,IAEpB,IACR,CACD,GAAKhL,EAAG,EAAI,KAAK,GAAG,GAAKC,EAAG,GAAK,KAAK,GAAG,GAAOA,EAAG,EAAI,KAAK,GAAG,GAAKD,EAAG,GAAK,KAAK,GAAG,EAAI,CACtF,IAAI3I,EAAK2I,EAAG,EAAI,KAAK,GAAG,EACpBO,EAAKP,EAAG,EAAI,KAAK,GAAG,EACpB1I,EAAK2I,EAAG,EAAI,KAAK,GAAG,EACpBO,EAAKP,EAAG,EAAI,KAAK,GAAG,EACpBgL,EAAWN,GAAkB,aAAatT,EAAIkJ,EAAIjJ,EAAIkJ,CAAE,EAC5D,GAAIyK,IAAa,EACf,YAAK,kBAAoB,GAClB,KAELzK,EAAKD,IAAM0K,EAAW,CAACA,GACvBA,EAAW,GACb,KAAK,gBAER,CACH,EACAH,GAAmB,UAAU,iBAAmB,UAA6B,CAC3E,OAAO,KAAK,gBAAkBrR,EAAS,QACzC,EACAqR,GAAmB,UAAU,YAAc,UAAwB,CACjE,OAAI,KAAK,kBAA4BrR,EAAS,SAC1C,KAAK,eAAiB,IAAM,EACvBA,EAAS,SAEXA,EAAS,QAClB,EACAqR,GAAmB,UAAU,YAAc,UAAwB,CACjE,OAAO,KAAK,iBACd,EACAA,GAAmB,UAAU,YAAc,UAAwB,CACjE,MAAO,CAAE,CACX,EACAA,GAAmB,UAAU,SAAW,UAAqB,CAC3D,OAAOA,EACT,EACAA,GAAmB,kBAAoB,UAA8B,CACnE,GAAI,UAAU,CAAC,YAAa5S,GAAc0B,EAAa,UAAU,CAAC,EAAGkI,CAAkB,EAAG,CAMxF,QALIa,EAAI,UAAU,CAAC,EACf3U,EAAO,UAAU,CAAC,EAClBkd,EAAU,IAAIJ,GAAmBnI,CAAC,EAClC3C,EAAK,IAAI9H,EACT+H,EAAK,IAAI/H,EACJxG,EAAI,EAAGA,EAAI1D,EAAK,KAAI,EAAI0D,IAI/B,GAHA1D,EAAK,cAAc0D,EAAGsO,CAAE,EACxBhS,EAAK,cAAc0D,EAAI,EAAGuO,CAAE,EAC5BiL,EAAQ,aAAalL,EAAIC,CAAE,EACvBiL,EAAQ,YAAa,EAAI,OAAOA,EAAQ,YAAW,EAEzD,OAAOA,EAAQ,YAAa,CAChC,SAAa,UAAU,CAAC,YAAahT,GAAc,UAAU,CAAC,YAAa,MAAO,CAI9E,QAHIiT,EAAM,UAAU,CAAC,EACjBC,EAAS,UAAU,CAAC,EACpBC,EAAY,IAAIP,GAAmBK,CAAG,EACjCG,EAAM,EAAGA,EAAMF,EAAO,OAAQE,IAAO,CAC5C,IAAIxI,EAAOsI,EAAOE,CAAG,EACjBvI,EAAOqI,EAAOE,EAAM,CAAC,EAEzB,GADAD,EAAU,aAAavI,EAAMC,CAAI,EAC7BsI,EAAU,YAAa,EAAI,OAAOA,EAAU,YAAW,CAC5D,CACD,OAAOA,EAAU,YAAa,CAC/B,CACH,EAEA,IAAI9C,EAAe,UAAyB,GAExCgD,GAAoB,CAAE,UAAW,CAAE,aAAc,EAAM,EAAC,MAAO,CAAE,aAAc,EAAI,EAAG,iBAAkB,CAAE,aAAc,IAAO,KAAM,CAAE,aAAc,EAAM,EAAC,UAAW,CAAE,aAAc,EAAI,EAAG,SAAU,CAAE,aAAc,EAAM,CAAA,EAElOhD,EAAa,UAAU,YAAc,UAAwB,CAC3D,MAAO,CAAE,CACX,EACAA,EAAa,UAAU,SAAW,UAAqB,CACrD,OAAOA,CACT,EACAA,EAAa,iBAAmB,SAA2BvI,EAAIC,EAAIC,EAAG,CACpE,OAAOJ,GAAe,iBAAiBE,EAAIC,EAAIC,CAAC,CAClD,EACAqI,EAAa,WAAa,UAAuB,CAC/C,GAAI,UAAU,CAAC,YAAa,MAAO,CACjC,IAAIva,EAAO,UAAU,CAAC,EACtB,GAAIA,EAAK,OAAS,EAAK,MAAO,GAG9B,QAFIwd,EAAM,EACNC,EAAKzd,EAAK,CAAC,EAAE,EACR,EAAI,EAAG,EAAIA,EAAK,OAAS,EAAG,IAAK,CACxC,IAAIiE,EAAIjE,EAAK,CAAC,EAAE,EAAIyd,EAChBlL,EAAKvS,EAAK,EAAI,CAAC,EAAE,EACjBwS,EAAKxS,EAAK,EAAI,CAAC,EAAE,EACrBwd,GAAOvZ,GAAKuO,EAAKD,EAClB,CACD,OAAOiL,EAAM,CACd,SAAU5R,EAAa,UAAU,CAAC,EAAGkI,CAAkB,EAAG,CACzD,IAAIsJ,EAAS,UAAU,CAAC,EACpBvT,EAAIuT,EAAO,OACf,GAAIvT,EAAI,EAAK,MAAO,GACpB,IAAI8O,EAAK,IAAIzO,EACT8H,EAAK,IAAI9H,EACT+H,EAAK,IAAI/H,EACbkT,EAAO,cAAc,EAAGpL,CAAE,EAC1BoL,EAAO,cAAc,EAAGnL,CAAE,EAC1B,IAAIyL,EAAO1L,EAAG,EACdC,EAAG,GAAKyL,EAER,QADIC,EAAQ,EACHL,EAAM,EAAGA,EAAMzT,EAAI,EAAGyT,IAC7B3E,EAAG,EAAI3G,EAAG,EACVA,EAAG,EAAIC,EAAG,EACVD,EAAG,EAAIC,EAAG,EACVmL,EAAO,cAAcE,EAAM,EAAGrL,CAAE,EAChCA,EAAG,GAAKyL,EACRC,GAAS3L,EAAG,GAAK2G,EAAG,EAAI1G,EAAG,GAE7B,OAAO0L,EAAQ,CAChB,CACH,EACApD,EAAa,iBAAmB,SAA2BqD,EAAGC,EAAGnP,EAAGoP,EAAG,CACrE,GAAIF,EAAE,OAAOC,CAAC,EAAK,OAAOtD,EAAa,kBAAkBqD,EAAGlP,EAAGoP,CAAC,EAChE,GAAIpP,EAAE,OAAOoP,CAAC,EAAK,OAAOvD,EAAa,kBAAkBuD,EAAGF,EAAGC,CAAC,EAChE,IAAIE,EAAiB,GACrB,GAAI,CAACjI,EAAS,WAAW8H,EAAGC,EAAGnP,EAAGoP,CAAC,EACjCC,EAAiB,OACZ,CACL,IAAIjL,GAAS+K,EAAE,EAAID,EAAE,IAAME,EAAE,EAAIpP,EAAE,IAAMmP,EAAE,EAAID,EAAE,IAAME,EAAE,EAAIpP,EAAE,GAC/D,GAAIoE,IAAU,EACZiL,EAAiB,OACZ,CACL,IAAIC,GAASJ,EAAE,EAAIlP,EAAE,IAAMoP,EAAE,EAAIpP,EAAE,IAAMkP,EAAE,EAAIlP,EAAE,IAAMoP,EAAE,EAAIpP,EAAE,GAC3DuP,GAAQL,EAAE,EAAIlP,EAAE,IAAMmP,EAAE,EAAID,EAAE,IAAMA,EAAE,EAAIlP,EAAE,IAAMmP,EAAE,EAAID,EAAE,GAC1D3O,EAAIgP,EAAOnL,EACX9D,EAAIgP,EAAQlL,GACZ9D,EAAI,GAAKA,EAAI,GAAKC,EAAI,GAAKA,EAAI,KACjC8O,EAAiB,GAEpB,CACF,CACD,OAAIA,EACKlS,GAAS,IAAI0O,EAAa,kBAAkBqD,EAAGlP,EAAGoP,CAAC,EAAGvD,EAAa,kBAAkBsD,EAAGnP,EAAGoP,CAAC,EAAGvD,EAAa,kBAAkB7L,EAAGkP,EAAGC,CAAC,EAAGtD,EAAa,kBAAkBuD,EAAGF,EAAGC,CAAC,CAAC,EAEjL,CACT,EACAtD,EAAa,cAAgB,SAAwB5F,EAAG3U,EAAM,CAC5D,OAAOua,EAAa,kBAAkB5F,EAAG3U,CAAI,IAAMyL,EAAS,QAC9D,EACA8O,EAAa,cAAgB,SAAwB2D,EAAK,CACxD,IAAIrU,EAAIqU,EAAI,OACZ,GAAIrU,GAAK,EAAK,MAAO,GACrB,IAAIgI,EAAM,EACN8C,EAAI,IAAIzK,EACZgU,EAAI,cAAc,EAAGvJ,CAAC,EAGtB,QAFI8I,EAAK9I,EAAE,EACPwJ,EAAKxJ,EAAE,EACFjR,EAAI,EAAGA,EAAImG,EAAGnG,IAAK,CAC1Bwa,EAAI,cAAcxa,EAAGiR,CAAC,EACtB,IAAItL,EAAKsL,EAAE,EACPpC,EAAKoC,EAAE,EACPnK,EAAKnB,EAAKoU,EACVhT,EAAK8H,EAAK4L,EACdtM,GAAO,KAAK,KAAKrH,EAAKA,EAAKC,EAAKA,CAAE,EAClCgT,EAAKpU,EACL8U,EAAK5L,CACN,CACD,OAAOV,CACT,EACA0I,EAAa,MAAQ,SAAgBva,EAAM,CACzC,IAAIoe,EAAOpe,EAAK,OAAS,EACzB,GAAIoe,EAAO,EAAK,MAAM,IAAI5U,EAAyB,mEAAmE,EAGtH,QAFI6U,EAAOre,EAAK,CAAC,EACbse,EAAU,EACL5a,EAAI,EAAGA,GAAK0a,EAAM1a,IAAK,CAC9B,IAAIiR,EAAI3U,EAAK0D,CAAC,EACViR,EAAE,EAAI0J,EAAK,IACbA,EAAO1J,EACP2J,EAAU5a,EAEb,CACD,IAAI6a,EAAQD,EACZ,GACEC,EAAQA,EAAQ,EACZA,EAAQ,IAAKA,EAAQH,SAClBpe,EAAKue,CAAK,EAAE,SAASF,CAAI,GAAKE,IAAUD,GACjD,IAAIE,EAAQF,EACZ,GACEE,GAASA,EAAQ,GAAKJ,QACfpe,EAAKwe,CAAK,EAAE,SAASH,CAAI,GAAKG,IAAUF,GACjD,IAAIG,EAAOze,EAAKue,CAAK,EACjBG,EAAO1e,EAAKwe,CAAK,EACrB,GAAIC,EAAK,SAASJ,CAAI,GAAKK,EAAK,SAASL,CAAI,GAAKI,EAAK,SAASC,CAAI,EAAK,MAAO,GAChF,IAAIC,EAAOpE,EAAa,mBAAmBkE,EAAMJ,EAAMK,CAAI,EACvDE,EAAQ,GACZ,OAAID,IAAS,EACXC,EAAQH,EAAK,EAAIC,EAAK,EAEtBE,EAAQD,EAAO,EAEVC,CACT,EACArE,EAAa,kBAAoB,SAA4B5F,EAAG3U,EAAM,CACpE,OAAO8c,GAAmB,kBAAkBnI,EAAG3U,CAAI,CACrD,EACAua,EAAa,+BAAiC,SAAyC5F,EAAGiJ,EAAGC,EAAG,CAC9F,IAAIgB,GAAQhB,EAAE,EAAID,EAAE,IAAMC,EAAE,EAAID,EAAE,IAAMC,EAAE,EAAID,EAAE,IAAMC,EAAE,EAAID,EAAE,GAC1D3O,IAAM2O,EAAE,EAAIjJ,EAAE,IAAMkJ,EAAE,EAAID,EAAE,IAAMA,EAAE,EAAIjJ,EAAE,IAAMkJ,EAAE,EAAID,EAAE,IAAMiB,EAClE,OAAO,KAAK,IAAI5P,CAAC,EAAI,KAAK,KAAK4P,CAAI,CACrC,EACAtE,EAAa,mBAAqB,SAA6BvI,EAAIC,EAAIC,EAAG,CACxE,OAAOqI,EAAa,iBAAiBvI,EAAIC,EAAIC,CAAC,CAChD,EACAqI,EAAa,kBAAoB,UAA8B,CAC7D,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAI5F,EAAI,UAAU,CAAC,EACfzR,EAAO,UAAU,CAAC,EACtB,GAAIA,EAAK,SAAW,EAAK,MAAM,IAAIsG,EAAyB,6CAA6C,EAEzG,QADIsV,EAAcnK,EAAE,SAASzR,EAAK,CAAC,CAAC,EAC3B,EAAI,EAAG,EAAIA,EAAK,OAAS,EAAG,IAAK,CACxC,IAAI2W,EAAOU,EAAa,kBAAkB5F,EAAGzR,EAAK,CAAC,EAAGA,EAAK,EAAI,CAAC,CAAC,EAC7D2W,EAAOiF,IACTA,EAAcjF,EAEjB,CACD,OAAOiF,CACX,SAAa,UAAU,SAAW,EAAG,CACjC,IAAI3B,EAAM,UAAU,CAAC,EACjBS,EAAI,UAAU,CAAC,EACfC,EAAI,UAAU,CAAC,EACnB,GAAID,EAAE,IAAMC,EAAE,GAAKD,EAAE,IAAMC,EAAE,EAAK,OAAOV,EAAI,SAASS,CAAC,EACvD,IAAIiB,GAAQhB,EAAE,EAAID,EAAE,IAAMC,EAAE,EAAID,EAAE,IAAMC,EAAE,EAAID,EAAE,IAAMC,EAAE,EAAID,EAAE,GAC1D5O,IAAMmO,EAAI,EAAIS,EAAE,IAAMC,EAAE,EAAID,EAAE,IAAMT,EAAI,EAAIS,EAAE,IAAMC,EAAE,EAAID,EAAE,IAAMiB,EACtE,GAAI7P,GAAK,EAAO,OAAOmO,EAAI,SAASS,CAAC,EACrC,GAAI5O,GAAK,EAAO,OAAOmO,EAAI,SAASU,CAAC,EACrC,IAAI5O,IAAM2O,EAAE,EAAIT,EAAI,IAAMU,EAAE,EAAID,EAAE,IAAMA,EAAE,EAAIT,EAAI,IAAMU,EAAE,EAAID,EAAE,IAAMiB,EACtE,OAAO,KAAK,IAAI5P,CAAC,EAAI,KAAK,KAAK4P,CAAI,CACpC,CACH,EACAtE,EAAa,SAAW,SAAmB5F,EAAGoF,EAAI,CAEhD,QADIgF,EAAkB,IAAI7E,GACjB,EAAI,EAAG,EAAIH,EAAG,OAAQ,IAAK,CAClC,IAAIpB,EAAKoB,EAAG,EAAI,CAAC,EACb/H,EAAK+H,EAAG,CAAC,EAEb,GADAgF,EAAgB,oBAAoBpK,EAAGgE,EAAI3G,CAAE,EACzC+M,EAAgB,kBAClB,MAAO,EAEV,CACD,MAAO,EACT,EACAxB,GAAkB,UAAU,IAAM,UAAY,CAAE,MAAO,EAAE,EACzDA,GAAkB,MAAM,IAAM,UAAY,CAAE,OAAOhD,EAAa,SAAS,EACzEgD,GAAkB,iBAAiB,IAAM,UAAY,CAAE,MAAO,EAAC,EAC/DA,GAAkB,KAAK,IAAM,UAAY,CAAE,OAAOhD,EAAa,gBAAgB,EAC/EgD,GAAkB,UAAU,IAAM,UAAY,CAAE,MAAO,EAAC,EACxDA,GAAkB,SAAS,IAAM,UAAY,CAAE,OAAOhD,EAAa,SAAS,EAE5E,OAAO,iBAAkBA,EAAcgD,IAEvC,IAAIyB,GAA0B,UAAoC,GAElEA,GAAwB,UAAU,OAAS,SAAiBpgB,EAAM,CAAA,EAClEogB,GAAwB,UAAU,YAAc,UAAwB,CACtE,MAAO,CAAE,CACX,EACAA,GAAwB,UAAU,SAAW,UAAqB,CAChE,OAAOA,EACT,EAEA,IAAIC,EAAW,UAAqB,CAClC,IAAIC,EAAU,UAAU,CAAC,EAEzB,KAAK,UAAY,KACjB,KAAK,SAAW,KAChB,KAAK,MAAQ,KACb,KAAK,UAAY,KACjB,KAAK,SAAWA,EAChB,KAAK,MAAQA,EAAQ,SACvB,EAEIC,GAAqB,CAAE,iBAAkB,CAAE,aAAc,EAAI,EAAG,gBAAiB,CAAE,aAAc,EAAM,EAAC,qBAAsB,CAAE,aAAc,EAAM,EAAC,qBAAsB,CAAE,aAAc,EAAM,EAAC,qBAAsB,CAAE,aAAc,EAAM,EAAC,0BAA2B,CAAE,aAAc,IAAO,kBAAmB,CAAE,aAAc,IAAO,uBAAwB,CAAE,aAAc,IAAO,6BAA8B,CAAE,aAAc,EAAI,EAAG,sBAAuB,CAAE,aAAc,EAAI,GAC9dF,EAAS,UAAU,qBAAuB,UAAiC,CACzE,OAAO,KAAK,iBAAmBA,EAAS,4BAC1C,EACAA,EAAS,UAAU,WAAa,UAAuB,CACrD,OAAO,KAAK,QACd,EACAA,EAAS,UAAU,aAAe,SAAuBpV,EAAG,CAC1D,OAAO,IACT,EACAoV,EAAS,UAAU,QAAU,UAAoB,CAC/C,MAAO,EACT,EACAA,EAAS,UAAU,YAAc,UAAwB,CACvD,MAAO,EACT,EACAA,EAAS,UAAU,OAAS,UAAmB,CAC7C,GAAI,UAAU,CAAC,YAAaA,EAAU,CACpC,IAAIG,EAAM,UAAU,CAAC,EACrB,OAAIA,IAAQ,KAAe,GACpB,KAAK,WAAWA,CAAG,CAC3B,SAAU,UAAU,CAAC,YAAa,OAAQ,CACzC,IAAI7U,EAAI,UAAU,CAAC,EACnB,GAAI,EAAEA,aAAa0U,GAAa,MAAO,GACvC,IAAIvY,EAAI6D,EACR,OAAO,KAAK,YAAY7D,CAAC,CAC1B,CACH,EACAuY,EAAS,UAAU,YAAc,SAAsB3U,EAAO,CAC5D,OAAO,OAASA,GAAS,KAAK,YAAYA,EAAO,CAAC,CACpD,EACA2U,EAAS,UAAU,gBAAkB,UAA4B,CAC/D,KAAK,MAAMA,EAAS,qBAAqB,CAC3C,EACAA,EAAS,UAAU,sBAAwB,UAAkC,CAC3E,KAAK,UAAY,IACnB,EACAA,EAAS,UAAU,WAAa,SAAqBvY,EAAG,CACtD,OAAIA,IAAM,KAAe,GAClB,KAAK,KAAM,EAAC,YAAYA,EAAE,KAAI,CAAE,CACzC,EACAuY,EAAS,UAAU,UAAY,UAAsB,CACnD,MAAO,EACT,EACAA,EAAS,UAAU,iBAAmB,UAA6B,CACjE,MAAO,EACT,EACAA,EAAS,UAAU,UAAY,UAAsB,CACnD,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAI1U,EAAI,UAAU,CAAC,EACfD,EAAQC,EACZ,OAAI,KAAK,aAAY,IAAOD,EAAM,aAAY,EACrC,KAAK,eAAiBA,EAAM,aAAc,EAE/C,KAAK,QAAO,GAAMA,EAAM,QAAO,EAC1B,EAEL,KAAK,UACA,GAELA,EAAM,UACD,EAEF,KAAK,mBAAmBC,CAAC,CACpC,SAAa,UAAU,SAAW,EAAG,CACjC,IAAI8U,EAAU,UAAU,CAAC,EACrBC,EAAO,UAAU,CAAC,EACtB,OAAI,KAAK,aAAY,IAAOD,EAAQ,aAAY,EACvC,KAAK,eAAiBA,EAAQ,aAAc,EAEjD,KAAK,QAAO,GAAMA,EAAQ,QAAO,EAC5B,EAEL,KAAK,UACA,GAELA,EAAQ,UACH,EAEF,KAAK,mBAAmBA,EAASC,CAAI,CAC7C,CACH,EACAL,EAAS,UAAU,YAAc,UAAwB,CACvD,OAAO,KAAK,SACd,EACAA,EAAS,UAAU,QAAU,UAAoB,CAC/C,OAAO,KAAK,KACd,EACAA,EAAS,UAAU,YAAc,UAAwB,CACvD,OAAO,KAAK,WAAY,EAAC,WAAW,KAAK,oBAAmB,CAAE,CAChE,EACAA,EAAS,UAAU,2BAA6B,SAAqCvY,EAAG,CACtF,GAAIA,EAAE,iBAAmBuY,EAAS,6BAChC,MAAM,IAAIzV,EAAyB,2DAA2D,CAElG,EACAyV,EAAS,UAAU,MAAQ,SAAgB3T,EAAGC,EAAGhC,EAAW,CAC1D,OAAIA,IAAc,EACT+B,EAAE,OAAOC,CAAC,EAEZD,EAAE,SAASC,CAAC,GAAKhC,CAC1B,EACA0V,EAAS,UAAU,KAAO,UAAiB,CACzC,IAAIM,EAAO,KAAK,OAChB,OAAAA,EAAK,UAAS,EACPA,CACT,EACAN,EAAS,UAAU,kBAAoB,UAA8B,CACnE,OAAO,KAAK,SAAS,kBAAmB,CAC1C,EACAA,EAAS,UAAU,oBAAsB,UAAgC,CACvE,OAAI,KAAK,YAAc,OACrB,KAAK,UAAY,KAAK,2BAEjB,IAAInJ,EAAS,KAAK,SAAS,CACpC,EACAmJ,EAAS,UAAU,QAAU,SAAkBO,EAAM,CACnD,KAAK,MAAQA,CACf,EACAP,EAAS,UAAU,YAAc,SAAsBQ,EAAU,CAC/D,KAAK,UAAYA,CACnB,EACAR,EAAS,UAAU,QAAU,SAAkB3T,EAAGC,EAAG,CAGnD,QAFI7H,EAAI4H,EAAE,WACNrL,EAAIsL,EAAE,WACH7H,EAAE,QAAO,GAAMzD,EAAE,QAAO,GAAI,CACjC,IAAIyf,EAAWhc,EAAE,OACbic,EAAW1f,EAAE,OACb2f,EAAaF,EAAS,UAAUC,CAAQ,EAC5C,GAAIC,IAAe,EACjB,OAAOA,CAEV,CACD,OAAIlc,EAAE,UACG,EAELzD,EAAE,UACG,GAEF,CACT,EACAgf,EAAS,UAAU,SAAW,UAAqB,CACjD,OAAO,KAAK,oBAAqB,EAAC,SAAU,CAC9C,EACAA,EAAS,UAAU,8BAAgC,UAA0C,CAC3F,OAAI,KAAK,aAAY,IAAOA,EAAS,8BAAgC,KAAK,aAAc,IAAKA,EAAS,sBAAwB,KAAK,aAAY,IAAOA,EAAS,2BAA6B,KAAK,aAAc,IAAKA,EAAS,sBAI/N,EACAA,EAAS,UAAU,YAAc,UAAwB,CACvD,MAAO,CAAClV,GAAUD,GAAYG,EAAY,CAC5C,EACAgV,EAAS,UAAU,SAAW,UAAqB,CACjD,OAAOA,CACT,EACAA,EAAS,oBAAsB,SAA8B1e,EAAY,CACvE,QAASmD,EAAI,EAAGA,EAAInD,EAAW,OAAQmD,IACrC,GAAI,CAACnD,EAAWmD,CAAC,EAAE,QAAO,EACxB,MAAO,GAGX,MAAO,EACT,EACAub,EAAS,gBAAkB,SAA0BtH,EAAO,CAC1D,QAASjU,EAAI,EAAGA,EAAIiU,EAAM,OAAQjU,IAChC,GAAIiU,EAAMjU,CAAC,IAAM,KACf,MAAO,GAGX,MAAO,EACT,EACAyb,GAAmB,iBAAiB,IAAM,UAAY,CAAE,MAAO,mBAAmB,EAClFA,GAAmB,gBAAgB,IAAM,UAAY,CAAE,MAAO,EAAC,EAC/DA,GAAmB,qBAAqB,IAAM,UAAY,CAAE,MAAO,EAAC,EACpEA,GAAmB,qBAAqB,IAAM,UAAY,CAAE,MAAO,EAAC,EACpEA,GAAmB,qBAAqB,IAAM,UAAY,CAAE,MAAO,EAAC,EACpEA,GAAmB,0BAA0B,IAAM,UAAY,CAAE,MAAO,EAAC,EACzEA,GAAmB,kBAAkB,IAAM,UAAY,CAAE,MAAO,EAAC,EACjEA,GAAmB,uBAAuB,IAAM,UAAY,CAAE,MAAO,EAAC,EACtEA,GAAmB,6BAA6B,IAAM,UAAY,CAAE,MAAO,EAAC,EAC5EA,GAAmB,sBAAsB,IAAM,UAAY,CAAE,OAAOU,EAAqB,EAEzF,OAAO,iBAAkBZ,EAAUE,IAEnC,IAAIU,GAAwB,UAAkC,GAE9DA,GAAsB,YAAc,UAAwB,CAC1D,MAAO,CAACb,EAAuB,CACjC,EACAa,GAAsB,OAAS,SAAiBjhB,EAAM,CACpDA,EAAK,sBAAqB,CAC5B,EAEA,IAAIkhB,GAAmB,UAA6B,GAEpDA,GAAiB,UAAU,OAAS,SAAiBtd,EAAO,CAAA,EAC5Dsd,GAAiB,UAAU,YAAc,UAAwB,CAC/D,MAAO,CAAE,CACX,EACAA,GAAiB,UAAU,SAAW,UAAqB,CACzD,OAAOA,EACT,EAEA,IAAIC,GAAmB,UAA6B,GAEhDC,GAAqB,CAAE,qBAAsB,CAAE,aAAc,IAAO,yBAA0B,CAAE,aAAc,EAAM,EAAC,oCAAqC,CAAE,aAAc,EAAM,EAAC,mCAAoC,CAAE,aAAc,EAAI,EAAG,mBAAoB,CAAE,aAAc,EAAI,EAAG,uBAAwB,CAAE,aAAc,IAAO,mCAAoC,CAAE,aAAc,EAAM,EAAC,kCAAmC,CAAE,aAAc,EAAM,EAAC,sBAAuB,CAAE,aAAc,EAAI,GAE1eD,GAAiB,UAAU,aAAe,SAAuBE,EAAe,CAAA,EAChFF,GAAiB,UAAU,YAAc,UAAwB,CAC/D,MAAO,CAAE,CACX,EACAA,GAAiB,UAAU,SAAW,UAAqB,CACzD,OAAOA,EACT,EACAC,GAAmB,qBAAqB,IAAM,UAAY,CAAE,OAAOE,EAAoB,EACvFF,GAAmB,yBAAyB,IAAM,UAAY,CAAE,OAAOG,EAAwB,EAC/FH,GAAmB,oCAAoC,IAAM,UAAY,CAAE,OAAOI,EAAmC,EACrHJ,GAAmB,mCAAmC,IAAM,UAAY,CAAE,OAAOK,EAAkC,EACnHL,GAAmB,mBAAmB,IAAM,UAAY,CAAE,OAAO,IAAIE,EAAsB,EAC3FF,GAAmB,uBAAuB,IAAM,UAAY,CAAE,OAAO,IAAIG,EAA0B,EACnGH,GAAmB,mCAAmC,IAAM,UAAY,CAAE,OAAO,IAAII,EAAqC,EAC1HJ,GAAmB,kCAAkC,IAAM,UAAY,CAAE,OAAO,IAAIK,EAAoC,EACxHL,GAAmB,sBAAsB,IAAM,UAAY,CAAE,OAAOD,GAAiB,kBAAkB,EAEvG,OAAO,iBAAkBA,GAAkBC,IAE3C,IAAIE,GAAuB,UAAiC,GAE5DA,GAAqB,UAAU,aAAe,SAAuBD,EAAe,CAClF,OAAOA,EAAgB,IAAM,CAC/B,EACAC,GAAqB,UAAU,YAAc,UAAwB,CACnE,MAAO,CAACH,EAAgB,CAC1B,EACAG,GAAqB,UAAU,SAAW,UAAqB,CAC7D,OAAOA,EACT,EAEA,IAAIC,GAA2B,UAAqC,GAEpEA,GAAyB,UAAU,aAAe,SAAuBF,EAAe,CACtF,OAAOA,EAAgB,CACzB,EACAE,GAAyB,UAAU,YAAc,UAAwB,CACvE,MAAO,CAACJ,EAAgB,CAC1B,EACAI,GAAyB,UAAU,SAAW,UAAqB,CACjE,OAAOA,EACT,EAEA,IAAIC,GAAsC,UAAgD,GAE1FA,GAAoC,UAAU,aAAe,SAAuBH,EAAe,CACjG,OAAOA,EAAgB,CACzB,EACAG,GAAoC,UAAU,YAAc,UAAwB,CAClF,MAAO,CAACL,EAAgB,CAC1B,EACAK,GAAoC,UAAU,SAAW,UAAqB,CAC5E,OAAOA,EACT,EAEA,IAAIC,GAAqC,UAA+C,GAExFA,GAAmC,UAAU,aAAe,SAAuBJ,EAAe,CAChG,OAAOA,IAAkB,CAC3B,EACAI,GAAmC,UAAU,YAAc,UAAwB,CACjF,MAAO,CAACN,EAAgB,CAC1B,EACAM,GAAmC,UAAU,SAAW,UAAqB,CAC3E,OAAOA,EACT,EAUA,IAAIC,GAAa,UAAuB,GAExCA,GAAW,UAAU,IAAM,UAAgB,CAAA,EAS3CA,GAAW,UAAU,OAAS,UAAmB,CAAA,EAMjDA,GAAW,UAAU,QAAU,UAAoB,CAAA,EAMnDA,GAAW,UAAU,SAAW,UAAqB,CAAA,EAMrDA,GAAW,UAAU,KAAO,UAAiB,CAAA,EAM7CA,GAAW,UAAU,QAAU,UAAoB,CAAA,EAQnDA,GAAW,UAAU,OAAS,UAAmB,CAAA,EAQjD,SAASC,GAA2B7W,EAAS,CAC3C,KAAK,QAAUA,GAAW,EAC5B,CACA6W,GAA0B,UAAY,IAAI,MAK1CA,GAA0B,UAAU,KAAO,4BAO3C,IAAIC,GAAW,UAAqB,GAEpCA,GAAS,UAAU,QAAU,UAAoB,CAAA,EAMjDA,GAAS,UAAU,KAAO,UAAiB,CAAA,EAM3CA,GAAS,UAAU,OAAS,UAAmB,CAAA,EAS/C,IAAIC,GAAQ,SAAUC,EAAe,CACnC,SAASD,GAAQ,CACfC,EAAc,MAAM,KAAM,SAAS,CACpC,CAED,OAAKA,IAAgBD,EAAK,UAAYC,GACtCD,EAAK,UAAY,OAAO,OAAQC,GAAiBA,EAAc,WAC/DD,EAAK,UAAU,YAAcA,EAE7BA,EAAK,UAAU,IAAM,UAAgB,CAAA,EASrCA,EAAK,UAAU,IAAM,UAAgB,CAAA,EAMrCA,EAAK,UAAU,QAAU,UAAoB,CAAA,EAEtCA,CACT,EAAEH,EAAU,EAQZ,SAASK,GAAwBjX,EAAS,CACxC,KAAK,QAAUA,GAAW,EAC5B,CACAiX,GAAuB,UAAY,IAAI,MAKvCA,GAAuB,UAAU,KAAO,yBAUxC,IAAIC,EAAa,SAAUC,EAAS,CAClC,SAASD,GAAa,CACpBC,EAAQ,KAAK,IAAI,EACjB,KAAK,OAAS,GAEV,UAAU,CAAC,YAAaP,IAC1B,KAAK,OAAO,UAAU,CAAC,CAAC,CAE3B,CAED,OAAKO,IAAUD,EAAU,UAAYC,GACrCD,EAAU,UAAY,OAAO,OAAQC,GAAWA,EAAQ,WACxDD,EAAU,UAAU,YAAcA,EAElCA,EAAU,UAAU,eAAiB,UAA2B,CAAA,EAChEA,EAAU,UAAU,YAAc,UAAwB,CAAE,MAAO,CAACC,EAASP,EAAU,GAKvFM,EAAU,UAAU,IAAM,SAAc7T,EAAG,CACzC,OAAI,UAAU,SAAW,EACvB,KAAK,OAAO,KAAKA,CAAC,EAElB,KAAK,OAAO,OAAO,UAAU,CAAC,EAAG,UAAU,CAAC,CAAC,EAExC,EACX,EAEE6T,EAAU,UAAU,MAAQ,UAAkB,CAC5C,KAAK,OAAS,EAClB,EAKEA,EAAU,UAAU,OAAS,SAAiBzW,EAAG,CAG/C,QAFIuN,EAAS,KAEJhU,EAAIyG,EAAE,SAAQ,EAAIzG,EAAE,WAC3BgU,EAAO,IAAIhU,EAAE,KAAM,CAAA,EAErB,MAAO,EACX,EAKEkd,EAAU,UAAU,IAAM,SAAcnU,EAAOqU,EAAS,CACtD,IAAIC,EAAa,KAAK,OAAOtU,CAAK,EAClC,YAAK,OAAOA,CAAK,EAAIqU,EACdC,CACX,EAKEH,EAAU,UAAU,SAAW,UAAqB,CAClD,OAAO,IAAII,GAAU,IAAI,CAC7B,EAKEJ,EAAU,UAAU,IAAM,SAAcnU,EAAO,CAC7C,GAAIA,EAAQ,GAAKA,GAAS,KAAK,KAAI,EACjC,MAAM,IAAI8T,GAGZ,OAAO,KAAK,OAAO9T,CAAK,CAC5B,EAKEmU,EAAU,UAAU,QAAU,UAAoB,CAChD,OAAO,KAAK,OAAO,SAAW,CAClC,EAKEA,EAAU,UAAU,KAAO,UAAiB,CAC1C,OAAO,KAAK,OAAO,MACvB,EAKEA,EAAU,UAAU,QAAU,UAAoB,CAKhD,QAJIlJ,EAAS,KAETC,EAAQ,CAAA,EAEHjU,EAAI,EAAGmO,EAAM,KAAK,OAAO,OAAQnO,EAAImO,EAAKnO,IACjDiU,EAAM,KAAKD,EAAO,OAAOhU,CAAC,CAAC,EAG7B,OAAOiU,CACX,EAKEiJ,EAAU,UAAU,OAAS,SAAiBrW,EAAG,CAK/C,QAJImN,EAAS,KAETuJ,EAAQ,GAEHvd,EAAI,EAAGmO,EAAM,KAAK,OAAO,OAAQnO,EAAImO,EAAKnO,IACjD,GAAIgU,EAAO,OAAOhU,CAAC,IAAM6G,EAAG,CAC1BmN,EAAO,OAAO,OAAOhU,EAAG,CAAC,EACzBud,EAAQ,GACR,KACD,CAGH,OAAOA,CACX,EAESL,CACT,EAAEH,EAAI,EAQFO,GAAa,SAAUE,EAAa,CACtC,SAASF,EAAWG,EAAW,CAC7BD,EAAY,KAAK,IAAI,EAKrB,KAAK,WAAaC,EAKlB,KAAK,UAAY,CAClB,CAED,OAAKD,IAAcF,EAAU,UAAYE,GACzCF,EAAU,UAAY,OAAO,OAAQE,GAAeA,EAAY,WAChEF,EAAU,UAAU,YAAcA,EAKlCA,EAAU,UAAU,KAAO,UAAiB,CAC1C,GAAI,KAAK,YAAc,KAAK,WAAW,KAAI,EACzC,MAAM,IAAIL,GAEZ,OAAO,KAAK,WAAW,IAAI,KAAK,WAAW,CAC/C,EAKEK,EAAU,UAAU,QAAU,UAAoB,CAChD,OAAI,KAAK,UAAY,KAAK,WAAW,KAAI,CAK7C,EAMEA,EAAU,UAAU,IAAM,SAAcF,EAAS,CAC/C,OAAO,KAAK,WAAW,IAAI,KAAK,UAAY,EAAGA,CAAO,CAC1D,EAKEE,EAAU,UAAU,OAAS,UAAmB,CAC9C,KAAK,WAAW,OAAO,KAAK,WAAW,IAAI,KAAK,SAAS,CAAC,CAC9D,EAESA,CACT,EAAER,EAAQ,EAENY,GAAkB,SAAUC,EAAc,CAC5C,SAASD,GAAkB,CAEzB,GADAC,EAAa,KAAK,IAAI,EAClB,UAAU,SAAW,GAClB,GAAI,UAAU,SAAW,EAAG,CACjC,IAAI7e,EAAQ,UAAU,CAAC,EACvB,KAAK,eAAeA,EAAM,MAAM,EAChC,KAAK,IAAIA,EAAO,EAAI,CAC1B,SAAe,UAAU,SAAW,EAAG,CACjC,IAAI8e,EAAU,UAAU,CAAC,EACrBC,EAAgB,UAAU,CAAC,EAC/B,KAAK,eAAeD,EAAQ,MAAM,EAClC,KAAK,IAAIA,EAASC,CAAa,CAChC,EACF,CAEIF,IAAeD,EAAe,UAAYC,GAC/CD,EAAe,UAAY,OAAO,OAAQC,GAAgBA,EAAa,WACvED,EAAe,UAAU,YAAcA,EAEvC,IAAIhX,EAAkB,CAAE,eAAgB,CAAE,aAAc,EAAM,CAAA,EAC9D,OAAAA,EAAgB,eAAe,IAAM,UAAY,CAAE,OAAO,IAAI,MAAM,CAAC,EAAE,KAAK,IAAI,GAChFgX,EAAe,UAAU,cAAgB,SAAwB,EAAG,CAClE,OAAO,KAAK,IAAI,CAAC,CACrB,EACEA,EAAe,UAAU,OAAS,UAAmB,CACnD,IAAI1J,EAAS,KAEb,GAAI,UAAU,SAAW,EAAG,CAI1B,QAHI8J,EAAO,UAAU,CAAC,EAClBD,EAAgB,UAAU,CAAC,EAC3BE,EAAY,GACP/d,EAAI8d,EAAK,SAAQ,EAAI9d,EAAE,WAC9BgU,EAAO,IAAIhU,EAAE,KAAM,EAAE6d,CAAa,EAClCE,EAAY,GAEd,OAAOA,CACb,KAAa,QAAOJ,EAAa,UAAU,OAAO,MAAM,KAAM,SAAS,CACvE,EACED,EAAe,UAAU,MAAQ,UAAkB,CAIjD,QAHI1J,EAAS,KAETgK,EAAQL,EAAa,UAAU,MAAM,KAAK,IAAI,EACzC3d,EAAI,EAAGA,EAAI,KAAK,KAAI,EAAIA,IAC/Bge,EAAM,IAAIhe,EAAGgU,EAAO,IAAIhU,CAAC,EAAE,KAAI,CAAE,EAEnC,OAAOge,CACX,EACEN,EAAe,UAAU,kBAAoB,UAA8B,CACzE,OAAO,KAAK,QAAQA,EAAe,cAAc,CACrD,EACEA,EAAe,UAAU,IAAM,UAAgB,CAC7C,IAAI1J,EAAS,KAEb,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAIlV,EAAQ,UAAU,CAAC,EACvB6e,EAAa,UAAU,IAAI,KAAK,KAAM7e,CAAK,CACjD,SAAe,UAAU,SAAW,GAC9B,GAAI,UAAU,CAAC,YAAa,OAAS,OAAO,UAAU,CAAC,GAAM,UAAW,CACtE,IAAI8e,EAAU,UAAU,CAAC,EACrBC,EAAgB,UAAU,CAAC,EAC/B,YAAK,IAAID,EAASC,EAAe,EAAI,EAC9B,EACf,SAAiB,UAAU,CAAC,YAAarX,GAAc,OAAO,UAAU,CAAC,GAAM,UAAW,CAClF,IAAIyX,EAAU,UAAU,CAAC,EACrBC,EAAkB,UAAU,CAAC,EACjC,GAAI,CAACA,GACC,KAAK,KAAM,GAAI,EAAG,CACpB,IAAIC,EAAO,KAAK,IAAI,KAAK,KAAI,EAAK,CAAC,EACnC,GAAIA,EAAK,SAASF,CAAO,EAAK,OAAO,IACtC,CAEHN,EAAa,UAAU,IAAI,KAAK,KAAMM,CAAO,CACrD,SAAiB,UAAU,CAAC,YAAa,QAAU,OAAO,UAAU,CAAC,GAAM,UAAW,CAC9E,IAAIG,EAAM,UAAU,CAAC,EACjBC,EAAkB,UAAU,CAAC,EACjC,YAAK,IAAID,EAAKC,CAAe,EACtB,EACR,UACQ,UAAU,SAAW,GAC9B,GAAI,OAAO,UAAU,CAAC,GAAM,WAAc,UAAU,CAAC,YAAa,OAAS,OAAO,UAAU,CAAC,GAAM,UAAY,CAC7G,IAAIC,EAAU,UAAU,CAAC,EACrBC,EAAkB,UAAU,CAAC,EAC7BC,EAAY,UAAU,CAAC,EAC3B,GAAIA,EACF,QAAS5E,EAAM,EAAGA,EAAM0E,EAAQ,OAAQ1E,IACtC5F,EAAO,IAAIsK,EAAQ1E,CAAG,EAAG2E,CAAe,MAG1C,SAASE,EAAMH,EAAQ,OAAS,EAAGG,GAAO,EAAGA,IAC3CzK,EAAO,IAAIsK,EAAQG,CAAG,EAAGF,CAAe,EAG5C,MAAO,EACR,SAAU,OAAO,UAAU,CAAC,GAAM,WAAc,OAAO,UAAU,UAAU,CAAC,CAAC,GAAK,UAAU,CAAC,YAAa/X,EAAa,CACtH,IAAIkY,EAAM,UAAU,CAAC,EACjBC,EAAU,UAAU,CAAC,EACrBC,EAAkB,UAAU,CAAC,EACjC,GAAI,CAACA,EAAiB,CACpB,IAAIC,GAAO,KAAK,OAChB,GAAIA,GAAO,EAAG,CACZ,GAAIH,EAAM,EAAG,CACX,IAAI3D,GAAO,KAAK,IAAI2D,EAAM,CAAC,EAC3B,GAAI3D,GAAK,SAAS4D,CAAO,EAAK,OAAO,IACtC,CACD,GAAID,EAAMG,GAAM,CACd,IAAI7D,GAAO,KAAK,IAAI0D,CAAG,EACvB,GAAI1D,GAAK,SAAS2D,CAAO,EAAK,OAAO,IACtC,CACF,CACF,CACDhB,EAAa,UAAU,IAAI,KAAK,KAAMe,EAAKC,CAAO,CACnD,UACQ,UAAU,SAAW,EAAG,CACjC,IAAIG,GAAU,UAAU,CAAC,EACrBC,GAAkB,UAAU,CAAC,EAC7B1e,GAAQ,UAAU,CAAC,EACnBC,GAAM,UAAU,CAAC,EACjB0e,GAAM,EACN3e,GAAQC,KAAO0e,GAAM,IACzB,QAAShf,GAAIK,GAAOL,KAAMM,GAAKN,IAAKgf,GAClChL,EAAO,IAAI8K,GAAQ9e,EAAC,EAAG+e,EAAe,EAExC,MAAO,EACR,CACL,EACErB,EAAe,UAAU,UAAY,UAAsB,CACrD,KAAK,KAAI,EAAK,GAAK,KAAK,IAAI,IAAIlX,EAAW,KAAK,IAAI,CAAC,CAAC,EAAG,EAAK,CACtE,EACEkX,EAAe,UAAU,YAAc,UAAwB,CAC7D,MAAO,CAAE,CACb,EACEA,EAAe,UAAU,SAAW,UAAqB,CACvD,OAAOA,CACX,EAEE,OAAO,iBAAkBA,EAAgBhX,GAElCgX,CACT,EAAER,CAAS,EAEP+B,EAAmB,UAA6B,GAEhDC,GAAqB,CAAE,kBAAmB,CAAE,aAAc,EAAM,EAAC,wBAAyB,CAAE,aAAc,EAAM,EAAC,eAAgB,CAAE,aAAc,EAAM,CAAA,EAE3JA,GAAmB,kBAAkB,IAAM,UAAY,CAAE,OAAOC,EAAiB,EACjFD,GAAmB,wBAAwB,IAAM,UAAY,CAAE,OAAOE,EAAuB,EAC7FF,GAAmB,eAAe,IAAM,UAAY,CAAE,OAAO,IAAI,MAAM,CAAC,EAAE,KAAK,IAAI,GAEnFD,EAAiB,UAAU,YAAc,UAAwB,CAC/D,MAAO,CAAE,CACX,EACAA,EAAiB,UAAU,SAAW,UAAqB,CACzD,OAAOA,CACT,EACAA,EAAiB,OAAS,SAAiBzE,EAAK,CAE9C,MADI,EAAAA,EAAI,OAAS,GACb,CAACA,EAAI,CAAC,EAAE,SAASA,EAAIA,EAAI,OAAS,CAAC,CAAC,EAE1C,EACAyE,EAAiB,YAAc,SAAsBI,EAAS7E,EAAK,CACjE,QAASxa,EAAI,EAAGA,EAAIqf,EAAQ,OAAQrf,IAAK,CACvC,IAAIsf,EAASD,EAAQrf,CAAC,EACtB,GAAIif,EAAiB,QAAQK,EAAQ9E,CAAG,EAAI,EAAK,OAAO8E,CACzD,CACD,OAAO,IACT,EACAL,EAAiB,OAAS,SAAiBzjB,EAAa+jB,EAAiB,CACvE,IAAIvf,EAAIif,EAAiB,QAAQM,EAAiB/jB,CAAW,EAC7D,GAAIwE,EAAI,EAAK,OAAO,KACpB,IAAIwf,EAAiB,IAAI,MAAMhkB,EAAY,MAAM,EAAE,KAAK,IAAI,EAC5DkV,GAAO,UAAUlV,EAAawE,EAAGwf,EAAgB,EAAGhkB,EAAY,OAASwE,CAAC,EAC1E0Q,GAAO,UAAUlV,EAAa,EAAGgkB,EAAgBhkB,EAAY,OAASwE,EAAGA,CAAC,EAC1E0Q,GAAO,UAAU8O,EAAgB,EAAGhkB,EAAa,EAAGA,EAAY,MAAM,CACxE,EACAyjB,EAAiB,OAAS,UAAmB,CAC3C,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAIQ,EAAS,UAAU,CAAC,EACpBC,EAAS,UAAU,CAAC,EACxB,GAAID,IAAWC,EAAU,MAAO,GAEhC,GADID,IAAW,MAAQC,IAAW,MAC9BD,EAAO,SAAWC,EAAO,OAAU,MAAO,GAC9C,QAAS1f,EAAI,EAAGA,EAAIyf,EAAO,OAAQzf,IACjC,GAAI,CAACyf,EAAOzf,CAAC,EAAE,OAAO0f,EAAO1f,CAAC,CAAC,EAAK,MAAO,GAE7C,MAAO,EACX,SAAa,UAAU,SAAW,EAAG,CACjC,IAAI2f,EAAW,UAAU,CAAC,EACtBC,EAAW,UAAU,CAAC,EACtBC,EAAuB,UAAU,CAAC,EACtC,GAAIF,IAAaC,EAAY,MAAO,GAEpC,GADID,IAAa,MAAQC,IAAa,MAClCD,EAAS,SAAWC,EAAS,OAAU,MAAO,GAClD,QAAShG,EAAM,EAAGA,EAAM+F,EAAS,OAAQ/F,IACvC,GAAIiG,EAAqB,QAAQF,EAAS/F,CAAG,EAAGgG,EAAShG,CAAG,CAAC,IAAM,EAAK,MAAO,GAEjF,MAAO,EACR,CACH,EACAqF,EAAiB,aAAe,SAAuBzjB,EAAa8U,EAAK,CAEvE,QADIwP,EAAY,IAAIpC,GACX,EAAI,EAAG,EAAIliB,EAAY,OAAQ,IAClC8U,EAAI,WAAW9U,EAAY,CAAC,CAAC,GAAKskB,EAAU,IAAItkB,EAAY,CAAC,EAAG,EAAI,EAE1E,OAAOskB,EAAU,kBAAmB,CACtC,EACAb,EAAiB,kBAAoB,SAA4BngB,EAAO,CACtE,QAASkB,EAAI,EAAGA,EAAIlB,EAAM,OAAQkB,IAChC,GAAIlB,EAAMkB,EAAI,CAAC,EAAE,OAAOlB,EAAMkB,CAAC,CAAC,EAC9B,MAAO,GAGX,MAAO,EACT,EACAif,EAAiB,qBAAuB,SAA+BngB,EAAO,CAC5E,GAAI,CAACmgB,EAAiB,kBAAkBngB,CAAK,EAAK,OAAOA,EACzD,IAAIghB,EAAY,IAAIpC,GAAe5e,EAAO,EAAK,EAC/C,OAAOghB,EAAU,kBAAmB,CACtC,EACAb,EAAiB,QAAU,SAAkBngB,EAAO,CAGlD,QAFIqf,EAAOrf,EAAM,OAAS,EACtBihB,EAAM,KAAK,MAAM5B,EAAO,CAAC,EACpB,EAAI,EAAG,GAAK4B,EAAK,IAAK,CAC7B,IAAIC,EAAMlhB,EAAM,CAAC,EACjBA,EAAM,CAAC,EAAIA,EAAMqf,EAAO,CAAC,EACzBrf,EAAMqf,EAAO,CAAC,EAAI6B,CACnB,CACH,EACAf,EAAiB,WAAa,SAAqBngB,EAAO,CAExD,QADImhB,EAAU,EACLjgB,EAAI,EAAGA,EAAIlB,EAAM,OAAQkB,IAC5BlB,EAAMkB,CAAC,IAAM,MAAQigB,IAE3B,IAAIC,EAAW,IAAI,MAAMD,CAAO,EAAE,KAAK,IAAI,EAC3C,GAAIA,IAAY,EAAK,OAAOC,EAE5B,QADI3jB,EAAI,EACCqd,EAAM,EAAGA,EAAM9a,EAAM,OAAQ8a,IAChC9a,EAAM8a,CAAG,IAAM,OAAQsG,EAAS3jB,GAAG,EAAIuC,EAAM8a,CAAG,GAEtD,OAAOsG,CACT,EACAjB,EAAiB,SAAW,UAAqB,CAC/C,GAAI,UAAU,SAAW,EAAG,CAG1B,QAFIzjB,EAAc,UAAU,CAAC,EACzBqgB,EAAO,IAAI,MAAMrgB,EAAY,MAAM,EAAE,KAAK,IAAI,EACzCwE,EAAI,EAAGA,EAAIxE,EAAY,OAAQwE,IACtC6b,EAAK7b,CAAC,EAAI,IAAIwG,EAAWhL,EAAYwE,CAAC,CAAC,EAEzC,OAAO6b,CACX,SAAa,UAAU,SAAW,EAM9B,QALIlL,EAAM,UAAU,CAAC,EACjBwP,EAAW,UAAU,CAAC,EACtBtP,EAAO,UAAU,CAAC,EAClBuP,EAAY,UAAU,CAAC,EACvBpiB,EAAS,UAAU,CAAC,EACf4b,EAAM,EAAGA,EAAM5b,EAAQ4b,IAC9B/I,EAAKuP,EAAYxG,CAAG,EAAI,IAAIpT,EAAWmK,EAAIwP,EAAWvG,CAAG,CAAC,CAGhE,EACAqF,EAAiB,gBAAkB,SAA0BoB,EAAMC,EAAM,CACvE,QAAStgB,EAAI,EAAGA,EAAIqgB,EAAK,OAAQrgB,IAAK,CACpC,IAAIsO,EAAK+R,EAAKrgB,CAAC,EACXuO,EAAK+R,EAAKD,EAAK,OAASrgB,EAAI,CAAC,EACjC,GAAIsO,EAAG,UAAUC,CAAE,IAAM,EAAK,MAAO,EACtC,CACD,MAAO,EACT,EACA0Q,EAAiB,SAAW,SAAmBzjB,EAAa,CAE1D,QADI8U,EAAM,IAAI8B,EACLpS,EAAI,EAAGA,EAAIxE,EAAY,OAAQwE,IACtCsQ,EAAI,gBAAgB9U,EAAYwE,CAAC,CAAC,EAEpC,OAAOsQ,CACT,EACA2O,EAAiB,kBAAoB,SAA4Ba,EAAW,CAC1E,OAAOA,EAAU,QAAQb,EAAiB,cAAc,CAC1D,EACAA,EAAiB,6BAA+B,SAAuC9Y,EAAGM,EAAG,CAC3F,OAAOA,EAAE,QAAUN,EAAIM,EAAI,CAAE,CAC/B,EACAwY,EAAiB,QAAU,SAAkB1b,EAAY/H,EAAa,CACpE,QAASwE,EAAI,EAAGA,EAAIxE,EAAY,OAAQwE,IACtC,GAAIuD,EAAW,OAAO/H,EAAYwE,CAAC,CAAC,EAClC,OAAOA,EAGX,MAAO,EACT,EACAif,EAAiB,oBAAsB,SAA8BzE,EAAK,CACxE,QAASxa,EAAI,EAAGA,EAAI,KAAK,MAAMwa,EAAI,OAAS,CAAC,EAAGxa,IAAK,CACnD,IAAIzD,EAAIie,EAAI,OAAS,EAAIxa,EACrB4b,EAAOpB,EAAIxa,CAAC,EAAE,UAAUwa,EAAIje,CAAC,CAAC,EAClC,GAAIqf,IAAS,EAAK,OAAOA,CAC1B,CACD,MAAO,EACT,EACAqD,EAAiB,QAAU,SAAkBoB,EAAMC,EAAM,CAEvD,QADItgB,EAAI,EACDA,EAAIqgB,EAAK,QAAUrgB,EAAIsgB,EAAK,QAAQ,CACzC,IAAIC,EAAUF,EAAKrgB,CAAC,EAAE,UAAUsgB,EAAKtgB,CAAC,CAAC,EACvC,GAAIugB,IAAY,EAAK,OAAOA,EAC5BvgB,GACD,CACD,OAAIA,EAAIsgB,EAAK,OAAiB,GAC1BtgB,EAAIqgB,EAAK,OAAiB,EACvB,CACT,EACApB,EAAiB,cAAgB,SAAwBzjB,EAAa,CAEpE,QADIglB,EAAW,KACNxgB,EAAI,EAAGA,EAAIxE,EAAY,OAAQwE,KAClCwgB,IAAa,MAAQA,EAAS,UAAUhlB,EAAYwE,CAAC,CAAC,EAAI,KAC5DwgB,EAAWhlB,EAAYwE,CAAC,GAG5B,OAAOwgB,CACT,EACAvB,EAAiB,QAAU,SAAkBzE,EAAKna,EAAOC,EAAK,CAC5DD,EAAQ8H,GAAS,MAAM9H,EAAO,EAAGma,EAAI,MAAM,EAC3Cla,EAAM6H,GAAS,MAAM7H,EAAK,GAAIka,EAAI,MAAM,EACxC,IAAIiG,EAAOngB,EAAMD,EAAQ,EACrBC,EAAM,IAAKmgB,EAAO,GAClBpgB,GAASma,EAAI,SAAUiG,EAAO,GAC9BngB,EAAMD,IAASogB,EAAO,GAC1B,IAAIC,EAAa,IAAI,MAAMD,CAAI,EAAE,KAAK,IAAI,EAC1C,GAAIA,IAAS,EAAK,OAAOC,EAEzB,QADIC,EAAO,EACF3gB,EAAIK,EAAOL,GAAKM,EAAKN,IAC5B0gB,EAAWC,GAAM,EAAInG,EAAIxa,CAAC,EAE5B,OAAO0gB,CACT,EAEA,OAAO,iBAAkBzB,EAAkBC,IAE3C,IAAIC,GAAoB,UAA8B,GAEtDA,GAAkB,UAAU,QAAU,SAAkB9X,EAAIC,EAAI,CAC9D,IAAI+Y,EAAOhZ,EACPiZ,EAAOhZ,EACX,OAAO2X,EAAiB,QAAQoB,EAAMC,CAAI,CAC5C,EACAnB,GAAkB,UAAU,YAAc,UAAwB,CAChE,MAAO,CAAC7Y,EAAU,CACpB,EACA6Y,GAAkB,UAAU,SAAW,UAAqB,CAC1D,OAAOA,EACT,EAEA,IAAIC,GAA0B,UAAoC,GAElEA,GAAwB,UAAU,QAAU,SAAkB/X,EAAIC,EAAI,CACpE,IAAI+Y,EAAOhZ,EACPiZ,EAAOhZ,EACX,GAAI+Y,EAAK,OAASC,EAAK,OAAU,MAAO,GACxC,GAAID,EAAK,OAASC,EAAK,OAAU,MAAO,GACxC,GAAID,EAAK,SAAW,EAAK,MAAO,GAChC,IAAIO,EAAc3B,EAAiB,QAAQoB,EAAMC,CAAI,EACjDO,EAAa5B,EAAiB,gBAAgBoB,EAAMC,CAAI,EAC5D,OAAIO,EAAqB,EAClBD,CACT,EACAxB,GAAwB,UAAU,WAAa,SAAqB/X,EAAIC,EAAI,CAC1E,IAAI+Y,EAAOhZ,EACPiZ,EAAOhZ,EACX,GAAI+Y,EAAK,OAASC,EAAK,OAAU,MAAO,GACxC,GAAID,EAAK,OAASC,EAAK,OAAU,MAAO,GACxC,GAAID,EAAK,SAAW,EAAK,MAAO,GAKhC,QAJIS,EAAO7B,EAAiB,oBAAoBoB,CAAI,EAChDU,EAAO9B,EAAiB,oBAAoBqB,CAAI,EAChDU,EAAKF,EAAO,EAAI,EAAIT,EAAK,OAAS,EAClCY,EAAKF,EAAO,EAAI,EAAIV,EAAK,OAAS,EAC7BrgB,EAAI,EAAGA,EAAIqgB,EAAK,OAAQrgB,IAAK,CACpC,IAAIkhB,EAAYb,EAAKW,CAAE,EAAE,UAAUV,EAAKW,CAAE,CAAC,EAC3C,GAAIC,IAAc,EAAK,OAAOA,EAC9BF,GAAMF,EACNG,GAAMF,CACP,CACD,MAAO,EACT,EACA3B,GAAwB,UAAU,YAAc,UAAwB,CACtE,MAAO,CAAC9Y,EAAU,CACpB,EACA8Y,GAAwB,UAAU,SAAW,UAAqB,CAChE,OAAOA,EACT,EAQA,IAAI+B,GAAQ,UAAgB,GAE5BA,GAAM,UAAU,IAAM,UAAgB,CAAA,EAQtCA,GAAM,UAAU,IAAM,UAAgB,CAAA,EAMtCA,GAAM,UAAU,KAAO,UAAiB,CAAA,EAMxCA,GAAM,UAAU,OAAS,UAAmB,CAAA,EAkB5CA,GAAM,UAAU,SAAW,UAAqB,CAAA,EAShD,IAAIC,GAAa,SAAUC,EAAK,CAC/B,SAASD,GAAa,CACrBC,EAAI,MAAM,KAAM,SAAS,CACzB,CAAA,OAAKA,IAAMD,EAAU,UAAYC,GAClCD,EAAU,UAAY,OAAO,OAAQC,GAAOA,EAAI,WAChDD,EAAU,UAAU,YAAcA,EAI3BA,CACR,EAAED,EAAK,EAQP,SAASG,GAAuBtb,EAAS,CACvC,KAAK,QAAUA,GAAW,EAC5B,CACAsb,GAAsB,UAAY,IAAI,MAKtCA,GAAsB,UAAU,KAAO,wBASvC,SAASC,IAAM,CAAE,CACjBA,GAAI,UAAY,IAAI3E,GAUpB2E,GAAI,UAAU,SAAW,UAAW,GASpC,IAAIC,GAAW,SAAUC,EAAQ,CAC/B,SAASD,GAAW,CAClBC,EAAO,KAAK,IAAI,EAChB,KAAK,OAAS,GAEV,UAAU,CAAC,YAAa7E,IAC1B,KAAK,OAAO,UAAU,CAAC,CAAC,CAE3B,CAED,OAAK6E,IAASD,EAAQ,UAAYC,GAClCD,EAAQ,UAAY,OAAO,OAAQC,GAAUA,EAAO,WACpDD,EAAQ,UAAU,YAAcA,EAKhCA,EAAQ,UAAU,SAAW,SAAmB3a,EAAG,CAGjD,QAFImN,EAAS,KAEJhU,EAAI,EAAGmO,EAAM,KAAK,OAAO,OAAQnO,EAAImO,EAAKnO,IAAK,CACtD,IAAIqJ,EAAI2K,EAAO,OAAOhU,CAAC,EACvB,GAAIqJ,IAAMxC,EACR,MAAO,EAEV,CACD,MAAO,EACX,EAKE2a,EAAQ,UAAU,IAAM,SAAc3a,EAAG,CACvC,OAAI,KAAK,SAASA,CAAC,EACV,IAGT,KAAK,OAAO,KAAKA,CAAC,EAEX,GACX,EAKE2a,EAAQ,UAAU,OAAS,SAAiB/a,EAAG,CAG7C,QAFIuN,EAAS,KAEJhU,EAAIyG,EAAE,SAAQ,EAAIzG,EAAE,WAC3BgU,EAAO,IAAIhU,EAAE,KAAM,CAAA,EAErB,MAAO,EACX,EAKEwhB,EAAQ,UAAU,OAAS,SAAiB3a,EAAG,CAE7C,MAAM,IAAI,KACd,EAKE2a,EAAQ,UAAU,KAAO,UAAiB,CACxC,OAAO,KAAK,OAAO,MACvB,EAKEA,EAAQ,UAAU,QAAU,UAAoB,CAC9C,OAAO,KAAK,OAAO,SAAW,CAClC,EAKEA,EAAQ,UAAU,QAAU,UAAoB,CAK9C,QAJIxN,EAAS,KAETC,EAAQ,CAAA,EAEHjU,EAAI,EAAGmO,EAAM,KAAK,OAAO,OAAQnO,EAAImO,EAAKnO,IACjDiU,EAAM,KAAKD,EAAO,OAAOhU,CAAC,CAAC,EAG7B,OAAOiU,CACX,EAKEuN,EAAQ,UAAU,SAAW,UAAqB,CAChD,OAAO,IAAIE,GAAY,IAAI,CAC/B,EAESF,CACT,EAAED,EAAG,EAQDG,GAAe,SAAUlE,EAAa,CACxC,SAASF,EAAWqE,EAAS,CAC3BnE,EAAY,KAAK,IAAI,EAKrB,KAAK,SAAWmE,EAKhB,KAAK,UAAY,CAClB,CAED,OAAKnE,IAAcF,EAAU,UAAYE,GACzCF,EAAU,UAAY,OAAO,OAAQE,GAAeA,EAAY,WAChEF,EAAU,UAAU,YAAcA,EAKlCA,EAAU,UAAU,KAAO,UAAiB,CAC1C,GAAI,KAAK,YAAc,KAAK,SAAS,KAAI,EACvC,MAAM,IAAIL,GAEZ,OAAO,KAAK,SAAS,OAAO,KAAK,WAAW,CAChD,EAKEK,EAAU,UAAU,QAAU,UAAoB,CAChD,OAAI,KAAK,UAAY,KAAK,SAAS,KAAI,CAK3C,EAKEA,EAAU,UAAU,OAAS,UAAmB,CAC9C,MAAM,IAAIgE,EACd,EAEShE,CACT,EAAER,EAAQ,EAEN8E,GAAQ,EACRC,GAAM,EACV,SAASC,GAAS7Q,EAAG,CAAE,OAAQA,IAAM,KAAO2Q,GAAQ3Q,EAAE,KAAQ,CAC9D,SAAS8Q,EAAU9Q,EAAG,CAAE,OAAQA,IAAM,KAAO,KAAOA,EAAE,MAAS,CAC/D,SAAS+Q,GAAU/Q,EAAGxK,EAAG,CAAMwK,IAAM,OAAQA,EAAE,MAAQxK,EAAM,CAC7D,SAASwb,GAAQhR,EAAG,CAAE,OAAQA,IAAM,KAAO,KAAOA,EAAE,IAAO,CAC3D,SAASiR,GAASjR,EAAG,CAAE,OAAQA,IAAM,KAAO,KAAOA,EAAE,KAAQ,CAS7D,SAASkR,IAAW,CAKlB,KAAK,MAAQ,KAKb,KAAK,MAAQ,CACf,CACAA,GAAQ,UAAY,IAAIf,GAKxBe,GAAQ,UAAU,IAAM,SAAUxiB,EAAK,CAErC,QADIsR,EAAI,KAAK,MACNA,IAAM,MAAM,CACjB,IAAImR,EAAMziB,EAAI,UAAasR,EAAE,GAAG,EAChC,GAAImR,EAAM,EAAKnR,EAAIA,EAAE,aACZmR,EAAM,EAAKnR,EAAIA,EAAE,UACnB,QAAOA,EAAE,KACjB,CACD,OAAO,IACT,EAKAkR,GAAQ,UAAU,IAAM,SAAUxiB,EAAK0F,EAAO,CAC5C,GAAI,KAAK,QAAU,KACjB,YAAK,MAAQ,CACX,IAAK1F,EACL,MAAO0F,EACP,KAAM,KACN,MAAO,KACP,OAAQ,KACR,MAAOuc,GACP,SAAU,UAAqB,CAAE,OAAO,KAAK,KAAO,EACpD,OAAQ,UAAmB,CAAE,OAAO,KAAK,GAAK,CACpD,EACI,KAAK,MAAQ,EACN,KAET,IAAItV,EAAI,KAAK,MACT+V,EACAD,EACJ,EAGE,IAFAC,EAAS/V,EACT8V,EAAMziB,EAAI,UAAa2M,EAAE,GAAG,EACxB8V,EAAM,EACR9V,EAAIA,EAAE,aACG8V,EAAM,EACf9V,EAAIA,EAAE,UACD,CACL,IAAIgW,EAAWhW,EAAE,MACjB,OAAAA,EAAE,MAAQjH,EACHid,CACR,OACMhW,IAAM,MACf,IAAIjD,EAAI,CACN,IAAK1J,EACL,KAAM,KACN,MAAO,KACP,MAAO0F,EACP,OAAQgd,EACR,MAAOT,GACP,SAAU,UAAqB,CAAE,OAAO,KAAK,KAAO,EACpD,OAAQ,UAAmB,CAAE,OAAO,KAAK,GAAK,CAClD,EACE,OAAIQ,EAAM,EACRC,EAAO,KAAOhZ,EAEdgZ,EAAO,MAAQhZ,EAEjB,KAAK,kBAAkBA,CAAC,EACxB,KAAK,QACE,IACT,EAKA8Y,GAAQ,UAAU,kBAAoB,SAAU5hB,EAAG,CACjD,IAAIyT,EAAS,KAGb,IADAzT,EAAE,MAAQshB,GACHthB,GAAK,MAAQA,IAAM,KAAK,OAASA,EAAE,OAAO,QAAUshB,IACzD,GAAIE,EAASxhB,CAAC,IAAM0hB,GAAOF,EAASA,EAASxhB,CAAC,CAAC,CAAC,EAAG,CACjD,IAAIC,EAAI0hB,GAAQH,EAASA,EAASxhB,CAAC,CAAC,CAAC,EACjCuhB,GAAQthB,CAAC,IAAMqhB,IACjBG,GAASD,EAASxhB,CAAC,EAAGqhB,EAAK,EAC3BI,GAASxhB,EAAGohB,EAAK,EACjBI,GAASD,EAASA,EAASxhB,CAAC,CAAC,EAAGshB,EAAG,EACnCthB,EAAIwhB,EAASA,EAASxhB,CAAC,CAAC,IAEpBA,IAAM2hB,GAAQH,EAASxhB,CAAC,CAAC,IAC3BA,EAAIwhB,EAASxhB,CAAC,EACdyT,EAAO,WAAWzT,CAAC,GAErByhB,GAASD,EAASxhB,CAAC,EAAGqhB,EAAK,EAC3BI,GAASD,EAASA,EAASxhB,CAAC,CAAC,EAAGshB,EAAG,EACnC7N,EAAO,YAAY+N,EAASA,EAASxhB,CAAC,CAAC,CAAC,EAEhD,KAAW,CACL,IAAIkK,EAAMwX,GAAOF,EAASA,EAASxhB,CAAC,CAAC,CAAC,EAClCuhB,GAAQrX,CAAG,IAAMoX,IACnBG,GAASD,EAASxhB,CAAC,EAAGqhB,EAAK,EAC3BI,GAASvX,EAAKmX,EAAK,EACnBI,GAASD,EAASA,EAASxhB,CAAC,CAAC,EAAGshB,EAAG,EACnCthB,EAAIwhB,EAASA,EAASxhB,CAAC,CAAC,IAEpBA,IAAM0hB,GAAOF,EAASxhB,CAAC,CAAC,IAC1BA,EAAIwhB,EAASxhB,CAAC,EACdyT,EAAO,YAAYzT,CAAC,GAEtByhB,GAASD,EAASxhB,CAAC,EAAGqhB,EAAK,EAC3BI,GAASD,EAASA,EAASxhB,CAAC,CAAC,EAAGshB,EAAG,EACnC7N,EAAO,WAAW+N,EAASA,EAASxhB,CAAC,CAAC,CAAC,EAE1C,CAEH,KAAK,MAAM,MAAQqhB,EACrB,EAKAO,GAAQ,UAAU,OAAS,UAAY,CACrC,IAAI1E,EAAY,IAAIP,EAChBjM,EAAI,KAAK,gBACb,GAAIA,IAAM,KAER,IADAwM,EAAU,IAAIxM,EAAE,KAAK,GACbA,EAAIkR,GAAQ,UAAUlR,CAAC,KAAO,MACpCwM,EAAU,IAAIxM,EAAE,KAAK,EAGzB,OAAOwM,CACT,EAKA0E,GAAQ,UAAU,SAAW,UAAY,CACvC,IAAIR,EAAU,IAAIH,GACdvQ,EAAI,KAAK,gBACb,GAAIA,IAAM,KAER,IADA0Q,EAAQ,IAAI1Q,CAAC,GACLA,EAAIkR,GAAQ,UAAUlR,CAAC,KAAO,MACpC0Q,EAAQ,IAAI1Q,CAAC,EAGjB,OAAO0Q,CACT,EAKAQ,GAAQ,UAAU,WAAa,SAAUlR,EAAG,CAC1C,GAAIA,GAAK,KAAM,CACb,IAAI3F,EAAI2F,EAAE,MACVA,EAAE,MAAQ3F,EAAE,KACRA,EAAE,MAAQ,OAAQA,EAAE,KAAK,OAAS2F,GACtC3F,EAAE,OAAS2F,EAAE,OACTA,EAAE,SAAW,KAAQ,KAAK,MAAQ3F,EAAc2F,EAAE,OAAO,OAASA,EAAKA,EAAE,OAAO,KAAO3F,EAAY2F,EAAE,OAAO,MAAQ3F,EACxHA,EAAE,KAAO2F,EACTA,EAAE,OAAS3F,CACZ,CACH,EAKA6W,GAAQ,UAAU,YAAc,SAAUlR,EAAG,CAC3C,GAAIA,GAAK,KAAM,CACb,IAAI3P,EAAI2P,EAAE,KACVA,EAAE,KAAO3P,EAAE,MACPA,EAAE,OAAS,OAAQA,EAAE,MAAM,OAAS2P,GACxC3P,EAAE,OAAS2P,EAAE,OACTA,EAAE,SAAW,KAAQ,KAAK,MAAQ3P,EAAc2P,EAAE,OAAO,QAAUA,EAAKA,EAAE,OAAO,MAAQ3P,EAAY2P,EAAE,OAAO,KAAO3P,EACzHA,EAAE,MAAQ2P,EACVA,EAAE,OAAS3P,CACZ,CACH,EAKA6gB,GAAQ,UAAU,cAAgB,UAAY,CAC5C,IAAIlR,EAAI,KAAK,MACb,GAAIA,GAAK,KACP,KAAOA,EAAE,MAAQ,MACfA,EAAIA,EAAE,KAGV,OAAOA,CACT,EAOAkR,GAAQ,UAAY,SAAU7V,EAAG,CAC/B,GAAIA,IAAM,KAAQ,OAAO,KAAY,GAAIA,EAAE,QAAU,KAAM,CAEzD,QADI2E,EAAI3E,EAAE,MACH2E,EAAE,OAAS,MAChBA,EAAIA,EAAE,KAER,OAAOA,CACX,KAAS,CAGL,QAFIwI,EAAMnN,EAAE,OACRmB,EAAKnB,EACFmN,IAAQ,MAAQhM,IAAOgM,EAAI,OAChChM,EAAKgM,EACLA,EAAMA,EAAI,OAEZ,OAAOA,CACR,CACH,EAKA0I,GAAQ,UAAU,KAAO,UAAY,CACnC,OAAO,KAAK,KACd,EAEA,IAAII,GAAS,UAAmB,GAEhCA,GAAO,UAAU,YAAc,UAAwB,CACrD,MAAO,CAAE,CACX,EACAA,GAAO,UAAU,SAAW,UAAqB,CAC/C,OAAOA,EACT,EASA,SAASC,IAAa,CAAE,CACxBA,GAAU,UAAY,IAAIjB,GAU1B,SAASkB,IAAW,CAKlB,KAAK,OAAS,GAEV,UAAU,CAAC,YAAa7F,IAC1B,KAAK,OAAO,UAAU,CAAC,CAAC,CAE5B,CACA6F,GAAQ,UAAY,IAAID,GAKxBC,GAAQ,UAAU,SAAW,SAAU5b,EAAG,CAGxC,QAFImN,EAAS,KAEJhU,EAAI,EAAGmO,EAAM,KAAK,OAAO,OAAQnO,EAAImO,EAAKnO,IAAK,CACtD,IAAIqJ,EAAI2K,EAAO,OAAOhU,CAAC,EACvB,GAAIqJ,EAAE,UAAaxC,CAAC,IAAM,EACxB,MAAO,EAEV,CACD,MAAO,EACT,EAKA4b,GAAQ,UAAU,IAAM,SAAU5b,EAAG,CACnC,IAAImN,EAAS,KAEb,GAAI,KAAK,SAASnN,CAAC,EACjB,MAAO,GAGT,QAAS7G,EAAI,EAAGmO,EAAM,KAAK,OAAO,OAAQnO,EAAImO,EAAKnO,IAAK,CACtD,IAAIqJ,EAAI2K,EAAO,OAAOhU,CAAC,EACvB,GAAIqJ,EAAE,UAAaxC,CAAC,IAAM,EACxBmN,OAAAA,EAAO,OAAO,OAAOhU,EAAG,EAAG6G,CAAC,EACrB,EAEV,CAED,YAAK,OAAO,KAAKA,CAAC,EAEX,EACT,EAKA4b,GAAQ,UAAU,OAAS,SAAUhc,EAAG,CAGtC,QAFIuN,EAAS,KAEJhU,EAAIyG,EAAE,SAAQ,EAAIzG,EAAE,WAC3BgU,EAAO,IAAIhU,EAAE,KAAM,CAAA,EAErB,MAAO,EACT,EAKAyiB,GAAQ,UAAU,OAAS,SAAUpZ,EAAG,CACtC,MAAM,IAAIiY,EACZ,EAKAmB,GAAQ,UAAU,KAAO,UAAY,CACnC,OAAO,KAAK,OAAO,MACrB,EAKAA,GAAQ,UAAU,QAAU,UAAY,CACtC,OAAO,KAAK,OAAO,SAAW,CAChC,EAKAA,GAAQ,UAAU,QAAU,UAAY,CAKtC,QAJIzO,EAAS,KAETC,EAAQ,CAAA,EAEHjU,EAAI,EAAGmO,EAAM,KAAK,OAAO,OAAQnO,EAAImO,EAAKnO,IACjDiU,EAAM,KAAKD,EAAO,OAAOhU,CAAC,CAAC,EAG7B,OAAOiU,CACT,EAKAwO,GAAQ,UAAU,SAAW,UAAY,CACvC,OAAO,IAAIC,GAAY,IAAI,CAC7B,EAQA,IAAIA,GAAc,SAAUC,EAAS,CAKnC,KAAK,SAAWA,EAKhB,KAAK,UAAY,CACnB,EAKAD,GAAY,UAAU,KAAO,UAAY,CACvC,GAAI,KAAK,YAAc,KAAK,SAAS,KAAI,EACvC,MAAM,IAAIzF,GAEZ,OAAO,KAAK,SAAS,OAAO,KAAK,WAAW,CAC9C,EAKAyF,GAAY,UAAU,QAAU,UAAY,CAC1C,OAAI,KAAK,UAAY,KAAK,SAAS,KAAI,CAKzC,EAKAA,GAAY,UAAU,OAAS,UAAY,CACzC,MAAM,IAAIpB,EACZ,EAQA,IAAIsB,GAAS,UAAmB,GAEhCA,GAAO,KAAO,UAAiB,CAC7B,IAAIhb,EAAI,UAAU,CAAC,EACf5H,EACAsM,EACAuW,EACAtC,EACJ,GAAI,UAAU,SAAW,EACvBA,EAAU,SAAU,EAAG1Y,EAAG,CACxB,OAAO,EAAE,UAAUA,CAAC,CAC1B,EACID,EAAE,KAAK2Y,CAAO,UACL,UAAU,SAAW,EAC9BsC,EAAa,UAAU,CAAC,EACxBtC,EAAU,SAAU,EAAG1Y,EAAG,CACxB,OAAOgb,EAAW,QAAW,EAAGhb,CAAC,CACvC,EACID,EAAE,KAAK2Y,CAAO,UACL,UAAU,SAAW,EAAG,CACjCjU,EAAI1E,EAAE,MAAM,UAAU,CAAC,EAAG,UAAU,CAAC,CAAC,EACtC0E,EAAE,KAAI,EACN,IAAIhB,EAAI1D,EAAE,MAAM,EAAG,UAAU,CAAC,CAAC,EAAE,OAAO0E,EAAG1E,EAAE,MAAM,UAAU,CAAC,EAAGA,EAAE,MAAM,CAAC,EAE1E,IADAA,EAAE,OAAO,EAAGA,EAAE,MAAM,EACf5H,EAAI,EAAGA,EAAIsL,EAAE,OAAQtL,IACxB4H,EAAE,KAAK0D,EAAEtL,CAAC,CAAC,CAEjB,SAAa,UAAU,SAAW,EAS9B,IARAsM,EAAI1E,EAAE,MAAM,UAAU,CAAC,EAAG,UAAU,CAAC,CAAC,EACtCib,EAAa,UAAU,CAAC,EACxBtC,EAAU,SAAU,EAAG1Y,EAAG,CACxB,OAAOgb,EAAW,QAAW,EAAGhb,CAAC,CACvC,EACIyE,EAAE,KAAKiU,CAAO,EACdjV,EAAI1D,EAAE,MAAM,EAAG,UAAU,CAAC,CAAC,EAAE,OAAO0E,EAAG1E,EAAE,MAAM,UAAU,CAAC,EAAGA,EAAE,MAAM,CAAC,EACtEA,EAAE,OAAO,EAAGA,EAAE,MAAM,EACf5H,EAAI,EAAGA,EAAIsL,EAAE,OAAQtL,IACxB4H,EAAE,KAAK0D,EAAEtL,CAAC,CAAC,CAGjB,EAKA4iB,GAAO,OAAS,SAAiB3O,EAAO,CAEtC,QADIwJ,EAAY,IAAIP,EACXld,EAAI,EAAGmO,EAAM8F,EAAM,OAAQjU,EAAImO,EAAKnO,IAC3Cyd,EAAU,IAAIxJ,EAAMjU,CAAC,CAAC,EAExB,OAAOyd,CACT,EAEA,IAAIqF,EAAY,UAAsB,GAElCC,GAAqB,CAAE,EAAG,CAAE,aAAc,EAAI,EAAG,EAAG,CAAE,aAAc,EAAM,EAAC,EAAG,CAAE,aAAc,EAAI,EAAG,MAAO,CAAE,aAAc,EAAI,EAAG,KAAM,CAAE,aAAc,EAAI,EAAG,SAAU,CAAE,aAAc,IAAO,UAAW,CAAE,aAAc,EAAI,EAAG,SAAU,CAAE,aAAc,IAAO,aAAc,CAAE,aAAc,EAAM,EAAC,MAAO,CAAE,aAAc,IAAO,MAAO,CAAE,aAAc,EAAM,EAAC,MAAO,CAAE,aAAc,EAAM,CAAA,EAEtYA,GAAmB,EAAE,IAAM,UAAY,CAAE,MAAO,EAAC,EACjDA,GAAmB,EAAE,IAAM,UAAY,CAAE,MAAO,EAAC,EACjDA,GAAmB,EAAE,IAAM,UAAY,CAAE,MAAO,EAAC,EACjDA,GAAmB,MAAM,IAAM,UAAY,CAAE,MAAO,EAAE,EACtDA,GAAmB,KAAK,IAAM,UAAY,CAAE,MAAO,EAAE,EACrDA,GAAmB,SAAS,IAAM,UAAY,CAAE,MAAO,EAAE,EACzDA,GAAmB,UAAU,IAAM,UAAY,CAAE,MAAO,GAAG,EAC3DA,GAAmB,SAAS,IAAM,UAAY,CAAE,MAAO,GAAG,EAC1DA,GAAmB,aAAa,IAAM,UAAY,CAAE,MAAO,GAAG,EAC9DA,GAAmB,MAAM,IAAM,UAAY,CAAE,MAAO,GAAG,EACvDA,GAAmB,MAAM,IAAM,UAAY,CAAE,MAAO,GAAG,EACvDA,GAAmB,MAAM,IAAM,UAAY,CAAE,MAAO,GAAG,EAEvDD,EAAU,UAAU,YAAc,UAAwB,CACxD,MAAO,CAAE,CACX,EACAA,EAAU,UAAU,SAAW,UAAqB,CAClD,OAAOA,CACT,EACAA,EAAU,kBAAoB,SAA4BE,EAAgB,CACxE,OAAQA,EAAc,CACpB,KAAKF,EAAU,MACb,OAAOA,EAAU,UACnB,KAAKA,EAAU,KACb,OAAOA,EAAU,SACnB,KAAKA,EAAU,SACb,OAAOA,EAAU,aACnB,KAAKA,EAAU,EACb,OAAOA,EAAU,MACnB,KAAKA,EAAU,EACb,OAAOA,EAAU,MACnB,KAAKA,EAAU,EACb,OAAOA,EAAU,KAEpB,CACD,MAAM,IAAIhd,EAAyB,4BAA8Bkd,CAAc,CACjF,EACAF,EAAU,iBAAmB,SAA2BG,EAAiB,CACvE,OAAQ1Z,GAAU,YAAY0Z,CAAe,EAAC,CAC5C,KAAKH,EAAU,UACb,OAAOA,EAAU,MACnB,KAAKA,EAAU,SACb,OAAOA,EAAU,KACnB,KAAKA,EAAU,aACb,OAAOA,EAAU,SACnB,KAAKA,EAAU,MACb,OAAOA,EAAU,EACnB,KAAKA,EAAU,MACb,OAAOA,EAAU,EACnB,KAAKA,EAAU,MACb,OAAOA,EAAU,CAEpB,CACD,MAAM,IAAIhd,EAAyB,6BAA+Bmd,CAAe,CACnF,EAEA,OAAO,iBAAkBH,EAAWC,IAEpC,IAAIG,GAAiB,UAA2B,GAEhDA,GAAe,UAAU,OAAS,SAAiBhoB,EAAM,CAAA,EACzDgoB,GAAe,UAAU,YAAc,UAAwB,CAC7D,MAAO,CAAE,CACX,EACAA,GAAe,UAAU,SAAW,UAAqB,CACvD,OAAOA,EACT,EAEA,IAAIC,GAA2B,UAAqC,GAEpEA,GAAyB,UAAU,OAAS,SAAiBC,EAAKpjB,EAAG,GACrEmjB,GAAyB,UAAU,OAAS,UAAmB,CAAA,EAC/DA,GAAyB,UAAU,kBAAoB,UAA8B,CAAA,EACrFA,GAAyB,UAAU,YAAc,UAAwB,CACvE,MAAO,CAAE,CACX,EACAA,GAAyB,UAAU,SAAW,UAAqB,CACjE,OAAOA,EACT,EAEA,IAAIE,GAAsB,SAAUC,EAAa,CAC/C,SAASD,EAAoBxmB,EAAY2e,EAAS,CAIhD,GAHA8H,EAAY,KAAK,KAAM9H,CAAO,EAC9B,KAAK,YAAc3e,GAAc,GAE7BymB,EAAY,gBAAgB,KAAK,WAAW,EAC9C,MAAM,IAAIxd,EAAyB,2CAA2C,CAEjF,CAEIwd,IAAcD,EAAmB,UAAYC,GAClDD,EAAmB,UAAY,OAAO,OAAQC,GAAeA,EAAY,WACzED,EAAmB,UAAU,YAAcA,EAE3C,IAAI3c,EAAkB,CAAE,iBAAkB,CAAE,aAAc,EAAM,CAAA,EAChE,OAAA2c,EAAmB,UAAU,wBAA0B,UAAoC,CAIzF,QAHIrP,EAAS,KAETuP,EAAW,IAAInR,EACVpS,EAAI,EAAGA,EAAI,KAAK,YAAY,OAAQA,IAC3CujB,EAAS,gBAAgBvP,EAAO,YAAYhU,CAAC,EAAE,oBAAmB,CAAE,EAEtE,OAAOujB,CACX,EACEF,EAAmB,UAAU,aAAe,SAAuBld,EAAG,CACpE,OAAO,KAAK,YAAYA,CAAC,CAC7B,EACEkd,EAAmB,UAAU,aAAe,UAAyB,CACnE,OAAOC,EAAY,4BACvB,EACED,EAAmB,UAAU,eAAiB,UAA2B,CAKvE,QAJIrP,EAAS,KAETxY,EAAc,IAAI,MAAM,KAAK,aAAY,CAAE,EAAE,KAAK,IAAI,EACtD6F,EAAI,GACCrB,EAAI,EAAGA,EAAI,KAAK,YAAY,OAAQA,IAE3C,QADIwjB,EAAmBxP,EAAO,YAAYhU,CAAC,EAAE,eAAc,EAClDzD,EAAI,EAAGA,EAAIinB,EAAiB,OAAQjnB,IAC3C8E,IACA7F,EAAY6F,CAAC,EAAImiB,EAAiBjnB,CAAC,EAGvC,OAAOf,CACX,EACE6nB,EAAmB,UAAU,QAAU,UAAoB,CAIzD,QAHIrP,EAAS,KAET5V,EAAO,EACF4B,EAAI,EAAGA,EAAI,KAAK,YAAY,OAAQA,IAC3C5B,GAAQ4V,EAAO,YAAYhU,CAAC,EAAE,QAAO,EAEvC,OAAO5B,CACX,EACEilB,EAAmB,UAAU,YAAc,UAAwB,CACjE,IAAIrP,EAAS,KAEb,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAIpN,EAAQ,UAAU,CAAC,EACnBf,EAAY,UAAU,CAAC,EAC3B,GAAI,CAAC,KAAK,kBAAkBe,CAAK,EAC/B,MAAO,GAET,IAAI6c,EAAkB7c,EACtB,GAAI,KAAK,YAAY,SAAW6c,EAAgB,YAAY,OAC1D,MAAO,GAET,QAASzjB,EAAI,EAAGA,EAAI,KAAK,YAAY,OAAQA,IAC3C,GAAI,CAACgU,EAAO,YAAYhU,CAAC,EAAE,YAAYyjB,EAAgB,YAAYzjB,CAAC,EAAG6F,CAAS,EAC9E,MAAO,GAGX,MAAO,EACb,KAAa,QAAOyd,EAAY,UAAU,YAAY,MAAM,KAAM,SAAS,CAC3E,EACED,EAAmB,UAAU,UAAY,UAAsB,CAG7D,QAFIrP,EAAS,KAEJhU,EAAI,EAAGA,EAAI,KAAK,YAAY,OAAQA,IAC3CgU,EAAO,YAAYhU,CAAC,EAAE,UAAS,EAEjC4iB,GAAO,KAAK,KAAK,WAAW,CAChC,EACES,EAAmB,UAAU,cAAgB,UAA0B,CACrE,OAAI,KAAK,UAAoB,KACtB,KAAK,YAAY,CAAC,EAAE,cAAe,CAC9C,EACEA,EAAmB,UAAU,qBAAuB,UAAiC,CAInF,QAHIrP,EAAS,KAET0P,EAAYZ,EAAU,MACjB9iB,EAAI,EAAGA,EAAI,KAAK,YAAY,OAAQA,IAC3C0jB,EAAY,KAAK,IAAIA,EAAW1P,EAAO,YAAYhU,CAAC,EAAE,qBAAoB,CAAE,EAE9E,OAAO0jB,CACX,EACEL,EAAmB,UAAU,aAAe,UAAyB,CAInE,QAHIrP,EAAS,KAET0P,EAAYZ,EAAU,MACjB9iB,EAAI,EAAGA,EAAI,KAAK,YAAY,OAAQA,IAC3C0jB,EAAY,KAAK,IAAIA,EAAW1P,EAAO,YAAYhU,CAAC,EAAE,aAAY,CAAE,EAEtE,OAAO0jB,CACX,EACEL,EAAmB,UAAU,UAAY,UAAsB,CAI7D,QAHIrP,EAAS,KAET8F,EAAM,EACD9Z,EAAI,EAAGA,EAAI,KAAK,YAAY,OAAQA,IAC3C8Z,GAAO9F,EAAO,YAAYhU,CAAC,EAAE,UAAS,EAExC,OAAO8Z,CACX,EACEuJ,EAAmB,UAAU,aAAe,UAAyB,CAInE,QAHIrP,EAAS,KAET2P,EAAY,EACP3jB,EAAI,EAAGA,EAAI,KAAK,YAAY,OAAQA,IAC3C2jB,GAAa3P,EAAO,YAAYhU,CAAC,EAAE,aAAY,EAEjD,OAAO2jB,CACX,EACEN,EAAmB,UAAU,iBAAmB,UAA6B,CAC3E,OAAO,KAAK,YAAY,MAC5B,EACEA,EAAmB,UAAU,QAAU,UAAoB,CAKzD,QAJIrP,EAAS,KAET7N,EAAI,KAAK,YAAY,OACrByd,EAAW,IAAI,MAAMzd,CAAC,EAAE,KAAK,IAAI,EAC5BnG,EAAI,EAAGA,EAAI,KAAK,YAAY,OAAQA,IAC3C4jB,EAAS5jB,CAAC,EAAIgU,EAAO,YAAYhU,CAAC,EAAE,UAEtC,OAAO,KAAK,aAAa,yBAAyB4jB,CAAQ,CAC9D,EACEP,EAAmB,UAAU,mBAAqB,UAA+B,CAC/E,IAAIrP,EAAS,KAEb,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAI,EAAI,UAAU,CAAC,EACf6P,EAAgB,IAAIpB,GAAQG,GAAO,OAAO,KAAK,WAAW,CAAC,EAC3DkB,EAAgB,IAAIrB,GAAQG,GAAO,OAAO,EAAE,WAAW,CAAC,EAC5D,OAAO,KAAK,QAAQiB,EAAeC,CAAa,CACtD,SAAe,UAAU,SAAW,EAAG,CAOjC,QANIC,EAAM,UAAU,CAAC,EACjBnI,EAAO,UAAU,CAAC,EAClBoI,EAAKD,EACLjN,EAAK,KAAK,mBACVC,EAAKiN,EAAG,mBACRhkB,EAAI,EACDA,EAAI8W,GAAM9W,EAAI+W,GAAI,CACvB,IAAIkN,EAAWjQ,EAAO,aAAahU,CAAC,EAChCkkB,EAAYF,EAAG,aAAahkB,CAAC,EAC7BmkB,EAAWF,EAAS,mBAAmBC,EAAWtI,CAAI,EAC1D,GAAIuI,IAAa,EAAK,OAAOA,EAC7BnkB,GACD,CACD,OAAIA,EAAI8W,EAAa,EACjB9W,EAAI+W,EAAa,GACd,CACR,CACL,EACEsM,EAAmB,UAAU,MAAQ,UAAkB,CACrD,IAAIrP,EAAS,KAEb,GAAI9L,EAAa,UAAU,CAAC,EAAGkU,EAAgB,EAE7C,QADIgI,EAAS,UAAU,CAAC,EACfpkB,EAAI,EAAGA,EAAI,KAAK,YAAY,OAAQA,IAC3CgU,EAAO,YAAYhU,CAAC,EAAE,MAAMokB,CAAM,UAE3Blc,EAAa,UAAU,CAAC,EAAGib,EAAwB,EAAG,CAC/D,IAAIkB,EAAW,UAAU,CAAC,EAC1B,GAAI,KAAK,YAAY,SAAW,EAAK,OAAO,KAC5C,QAASzK,EAAM,EAAGA,EAAM,KAAK,YAAY,SACvC5F,EAAO,YAAY4F,CAAG,EAAE,MAAMyK,CAAQ,EAClC,CAAAA,EAAS,UAFkCzK,IAE/C,CAIEyK,EAAS,kBAAmB,GAAI,KAAK,gBAAiB,CAC3D,SAAUnc,EAAa,UAAU,CAAC,EAAGgb,EAAc,EAAG,CACrD,IAAIoB,EAAW,UAAU,CAAC,EAC1BA,EAAS,OAAO,IAAI,EACpB,QAAS7F,EAAM,EAAGA,EAAM,KAAK,YAAY,OAAQA,IAC/CzK,EAAO,YAAYyK,CAAG,EAAE,MAAM6F,CAAQ,CAEzC,SAAUpc,EAAa,UAAU,CAAC,EAAGoT,EAAuB,EAAG,CAC9D,IAAIiJ,EAAW,UAAU,CAAC,EAC1BA,EAAS,OAAO,IAAI,EACpB,QAAS7F,EAAM,EAAGA,EAAM,KAAK,YAAY,OAAQA,IAC/C1K,EAAO,YAAY0K,CAAG,EAAE,MAAM6F,CAAQ,CAEzC,CACL,EACElB,EAAmB,UAAU,YAAc,UAAwB,CACjE,YAAK,2BAA2B,IAAI,EACpChO,EAAO,qBAAoB,EACpB,IACX,EACEgO,EAAmB,UAAU,MAAQ,UAAkB,CACrD,IAAIrP,EAAS,KAETgQ,EAAKV,EAAY,UAAU,MAAM,KAAK,IAAI,EAC9CU,EAAG,YAAc,IAAI,MAAM,KAAK,YAAY,MAAM,EAAE,KAAK,IAAI,EAC7D,QAAShkB,EAAI,EAAGA,EAAI,KAAK,YAAY,OAAQA,IAC3CgkB,EAAG,YAAYhkB,CAAC,EAAIgU,EAAO,YAAYhU,CAAC,EAAE,QAE5C,OAAOgkB,CACX,EACEX,EAAmB,UAAU,gBAAkB,UAA4B,CACzE,MAAO,oBACX,EACEA,EAAmB,UAAU,KAAO,UAAiB,CAInD,QAHIrP,EAAS,KAETnX,EAAa,IAAI,MAAM,KAAK,YAAY,MAAM,EAAE,KAAK,IAAI,EACpDmD,EAAI,EAAGA,EAAInD,EAAW,OAAQmD,IACrCnD,EAAWmD,CAAC,EAAIgU,EAAO,YAAYhU,CAAC,EAAE,OAExC,OAAO,IAAIqjB,EAAmBxmB,EAAY,KAAK,QAAQ,CAC3D,EACEwmB,EAAmB,UAAU,QAAU,UAAoB,CAGzD,QAFIrP,EAAS,KAEJhU,EAAI,EAAGA,EAAI,KAAK,YAAY,OAAQA,IAC3C,GAAI,CAACgU,EAAO,YAAYhU,CAAC,EAAE,QAAO,EAChC,MAAO,GAGX,MAAO,EACX,EACEqjB,EAAmB,UAAU,YAAc,UAAwB,CACjE,MAAO,CAAE,CACb,EACEA,EAAmB,UAAU,SAAW,UAAqB,CAC3D,OAAOA,CACX,EACE3c,EAAgB,iBAAiB,IAAM,UAAY,CAAE,MAAO,mBAAoB,EAEhF,OAAO,iBAAkB2c,EAAoB3c,GAEtC2c,CACT,EAAE9H,CAAQ,EAENiJ,GAAmB,SAAUC,EAAuB,CACtD,SAASD,GAAmB,CAC1BC,EAAsB,MAAM,KAAM,SAAS,CAC5C,CAEIA,IAAwBD,EAAgB,UAAYC,GACzDD,EAAgB,UAAY,OAAO,OAAQC,GAAyBA,EAAsB,WAC1FD,EAAgB,UAAU,YAAcA,EAExC,IAAI9d,EAAkB,CAAE,iBAAkB,CAAE,aAAc,EAAM,CAAA,EAEhE,OAAA8d,EAAgB,UAAU,aAAe,UAAyB,CAChE,OAAOjJ,EAAS,yBACpB,EACEiJ,EAAgB,UAAU,YAAc,UAAwB,CAC9D,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAI5d,EAAQ,UAAU,CAAC,EACnBf,EAAY,UAAU,CAAC,EAC3B,OAAK,KAAK,kBAAkBe,CAAK,EAG1B6d,EAAsB,UAAU,YAAY,KAAK,KAAM7d,EAAOf,CAAS,EAFrE,EAGf,KAAa,QAAO4e,EAAsB,UAAU,YAAY,MAAM,KAAM,SAAS,CACrF,EACED,EAAgB,UAAU,qBAAuB,UAAiC,CAChF,OAAI,KAAK,WACA1B,EAAU,MAEZ,CACX,EACE0B,EAAgB,UAAU,SAAW,UAAqB,CACxD,IAAIxQ,EAAS,KAEb,GAAI,KAAK,UACP,MAAO,GAET,QAAShU,EAAI,EAAGA,EAAI,KAAK,YAAY,OAAQA,IAC3C,GAAI,CAACgU,EAAO,YAAYhU,CAAC,EAAE,SAAQ,EACjC,MAAO,GAGX,MAAO,EACX,EACEwkB,EAAgB,UAAU,aAAe,UAAyB,CAChE,MAAO,EACX,EACEA,EAAgB,UAAU,QAAU,UAAoB,CAKtD,QAJIxQ,EAAS,KAET0Q,EAAS,KAAK,YAAY,OAC1BC,EAAW,IAAI,MAAMD,CAAM,EAAE,KAAK,IAAI,EACjC1kB,EAAI,EAAGA,EAAI,KAAK,YAAY,OAAQA,IAC3C2kB,EAASD,EAAS,EAAI1kB,CAAC,EAAIgU,EAAO,YAAYhU,CAAC,EAAE,UAEnD,OAAO,KAAK,aAAa,sBAAsB2kB,CAAQ,CAC3D,EACEH,EAAgB,UAAU,YAAc,UAAwB,CAC9D,OAAO,IAAII,GAAW,IAAI,EAAE,YAAa,CAC7C,EACEJ,EAAgB,UAAU,gBAAkB,UAA4B,CACtE,MAAO,iBACX,EACEA,EAAgB,UAAU,KAAO,UAAiB,CAIhD,QAHIxQ,EAAS,KAETvX,EAAc,IAAI,MAAM,KAAK,YAAY,MAAM,EAAE,KAAK,IAAI,EACrDuD,EAAI,EAAGA,EAAIvD,EAAY,OAAQuD,IACtCvD,EAAYuD,CAAC,EAAIgU,EAAO,YAAYhU,CAAC,EAAE,OAEzC,OAAO,IAAIwkB,EAAgB/nB,EAAa,KAAK,QAAQ,CACzD,EACE+nB,EAAgB,UAAU,YAAc,UAAwB,CAC9D,MAAO,CAACjC,EAAM,CAClB,EACEiC,EAAgB,UAAU,SAAW,UAAqB,CACxD,OAAOA,CACX,EACE9d,EAAgB,iBAAiB,IAAM,UAAY,CAAE,MAAO,mBAAmB,EAE/E,OAAO,iBAAkB8d,EAAiB9d,GAEnC8d,CACT,EAAEnB,EAAkB,EAEhBuB,GAAa,UAAuB,CAKtC,GAJA,KAAK,MAAQ,KACb,KAAK,UAAY,KACjB,KAAK,QAAU,KACf,KAAK,aAAe,KAChB,UAAU,SAAW,EAAG,CAC1B,IAAI1pB,EAAO,UAAU,CAAC,EAClB2pB,EAASxI,GAAiB,mBAC9B,KAAK,MAAQnhB,EACb,KAAK,UAAYA,EAAK,aACtB,KAAK,QAAU2pB,CACnB,SAAa,UAAU,SAAW,EAAG,CACjC,IAAIC,EAAS,UAAU,CAAC,EACpBC,EAAW,UAAU,CAAC,EAC1B,KAAK,MAAQD,EACb,KAAK,UAAYA,EAAO,aACxB,KAAK,QAAUC,CAChB,CACH,EACAH,GAAW,UAAU,wBAA0B,SAAkCI,EAAO,CACtF,GAAI,KAAK,MAAM,UACb,OAAO,KAAK,mBAAoB,EAElC,IAAIC,EAAS,KAAK,2BAA2BD,CAAK,EAClD,OAAIC,EAAO,SAAW,EACb,KAAK,UAAU,YAAYA,EAAO,CAAC,CAAC,EAEtC,KAAK,UAAU,2BAA2BA,CAAM,CACzD,EACAL,GAAW,UAAU,YAAc,UAAwB,CACzD,OAAI,KAAK,iBAAiBM,EAAqB,KAAK,mBAAmB,KAAK,KAAK,EAC7E,KAAK,iBAAiBV,GAA0B,KAAK,wBAAwB,KAAK,KAAK,EACpF,KAAK,MAAM,YAAa,CACjC,EACAI,GAAW,UAAU,mBAAqB,SAA6BplB,EAAM,CAC3E,GAAI,KAAK,MAAM,UACb,OAAO,KAAK,mBAAoB,EAElC,GAAIA,EAAK,WAAY,CACnB,IAAI2lB,EAA2B,KAAK,QAAQ,aAAa,CAAC,EAC1D,OAAIA,EACK3lB,EAAK,cAAe,EAEpB,KAAK,UAAU,iBAAkB,CAE3C,CACD,OAAO,KAAK,UAAU,iBAAiB,CAACA,EAAK,gBAAiBA,EAAK,YAAW,CAAE,CAAC,CACnF,EACAolB,GAAW,UAAU,mBAAqB,UAA+B,CACvE,OAAO,KAAK,UAAU,iBAAkB,CAC1C,EACAA,GAAW,UAAU,2BAA6B,SAAqCI,EAAO,CAC1F,IAAIhR,EAAS,KAEXiR,EAAS,IAAI/H,EACjB,KAAK,aAAe,IAAIiF,GACxB,QAAS,EAAI,EAAG,EAAI6C,EAAM,iBAAgB,EAAI,IAAK,CACjD,IAAIxlB,EAAOwlB,EAAM,aAAa,CAAC,EAC3BxlB,EAAK,aAAY,IAAO,IAC5BwU,EAAO,YAAYxU,EAAK,eAAe,CAAC,CAAC,EACzCwU,EAAO,YAAYxU,EAAK,eAAeA,EAAK,aAAc,EAAG,CAAC,CAAC,EAChE,CACD,QAAS4lB,EAAK,KAAK,aAAa,SAAU,EAAC,SAAU,EAAEA,EAAG,WAAY,CACpE,IAAIC,EAAQD,EAAG,OACX5L,EAAU6L,EAAM,WAChBC,EAAU9L,EAAQ,MAClBxF,EAAO,QAAQ,aAAasR,CAAO,GACrCL,EAAO,IAAII,EAAM,OAAQ,CAAA,CAE5B,CACD,OAAOpG,EAAiB,kBAAkBgG,CAAM,CAClD,EACAL,GAAW,UAAU,YAAc,SAAsBvO,EAAI,CAC3D,IAAImD,EAAU,KAAK,aAAa,IAAInD,CAAE,EAClCmD,IAAY,OACdA,EAAU,IAAI+L,GACd,KAAK,aAAa,IAAIlP,EAAImD,CAAO,GAEnCA,EAAQ,OACV,EACAoL,GAAW,UAAU,YAAc,UAAwB,CACzD,MAAO,CAAE,CACX,EACAA,GAAW,UAAU,SAAW,UAAqB,CACnD,OAAOA,EACT,EACAA,GAAW,YAAc,UAAwB,CAC/C,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAI5hB,EAAI,UAAU,CAAC,EACfwiB,EAAM,IAAIZ,GAAW5hB,CAAC,EAC1B,OAAOwiB,EAAI,YAAa,CAC5B,SAAa,UAAU,SAAW,EAAG,CACjC,IAAI9J,EAAM,UAAU,CAAC,EACjBmJ,EAAS,UAAU,CAAC,EACpBY,EAAQ,IAAIb,GAAWlJ,EAAKmJ,CAAM,EACtC,OAAOY,EAAM,YAAa,CAC3B,CACH,EAEA,IAAIF,GAAU,UAAoB,CAChC,KAAK,MAAQ,IACf,EACAA,GAAQ,UAAU,YAAc,UAAwB,CACtD,MAAO,CAAE,CACX,EACAA,GAAQ,UAAU,SAAW,UAAqB,CAChD,OAAOA,EACT,EAIA,SAASG,IAAe,CAAE,CAE1B,SAASC,IAAgB,CAAE,CAE3B,IAAIC,GAAgB,UAA0B,GAE9C,SAASC,IAAyB,CAAE,CAEpC,SAASC,IAAe,CAAE,CAE1B,SAASC,IAAoB,CAAE,CAE/B,IAAIC,GAAa,UAAuB,GAEpCC,GAAqB,CAAE,QAAS,CAAE,aAAc,IAAO,uBAAwB,CAAE,aAAc,EAAI,GAEvGD,GAAW,UAAU,YAAc,UAAwB,CACzD,MAAO,CAAE,CACX,EACAA,GAAW,UAAU,SAAW,UAAqB,CACnD,OAAOA,EACT,EACAA,GAAW,MAAQ,SAAgBvf,EAAGN,EAAG,CAEvC,QADIsH,EAAK,IAAI,MAAMtH,CAAC,EAAE,KAAK,IAAI,EACtB,EAAI,EAAG,EAAIA,EAAG,IACrBsH,EAAG,CAAC,EAAIhH,EAEV,OAAO,OAAOgH,CAAE,CAClB,EACAuY,GAAW,cAAgB,UAA0B,CACnD,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAI,EAAI,UAAU,CAAC,EACfE,EAAK,IAAIL,GACTM,EAAK,IAAIT,GACb,SAAE,gBAAgBS,CAAE,EACbD,EAAG,SAAU,CACxB,SAAa,UAAU,SAAW,EAAG,CACjC,IAAIE,EAAM,UAAU,CAAC,EACjBC,EAAQ,UAAU,CAAC,EACnBC,EAAa,GACE,IAAIX,GAAaK,GAAW,cAAcI,CAAG,CAAC,EAEjE,QADIG,EAAmB,IAAIR,GAClB/lB,EAAI,EAAGA,EAAIqmB,EAAOrmB,IACzB,GAAI,CACFsmB,GAAcC,EAAiB,WAAaP,GAAW,OACxD,OAAQ3c,EAAG,CACV,GAAIA,aAAayc,GACfzQ,EAAO,qBAAoB,MACpB,OAAMhM,CACvB,SAAkB,CAEd,OAAOid,CACR,CACH,EACAN,GAAW,MAAQ,SAAgBza,EAAGib,EAAW,CAK/C,QAJIC,EAAeD,EAAU,OACzBE,EAAY,IAAIxJ,EAChByJ,EAAY,GAAKpb,EACjBqb,EAAMD,EAAU,QAAQH,CAAS,EAC9BI,GAAO,GAAG,CACf,IAAIC,EAAQF,EAAU,UAAU,EAAGC,CAAG,EACtCF,EAAU,IAAIG,CAAK,EACnBF,EAAYA,EAAU,UAAUC,EAAMH,CAAY,EAClDG,EAAMD,EAAU,QAAQH,CAAS,CAClC,CACGG,EAAU,OAAS,GAAKD,EAAU,IAAIC,CAAS,EAEnD,QADIG,EAAM,IAAI,MAAMJ,EAAU,KAAI,CAAE,EAAE,KAAK,IAAI,EACtC1mB,EAAI,EAAGA,EAAI8mB,EAAI,OAAQ9mB,IAC9B8mB,EAAI9mB,CAAC,EAAI0mB,EAAU,IAAI1mB,CAAC,EAE1B,OAAO8mB,CACT,EACAd,GAAW,SAAW,UAAqB,CACzC,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAItY,EAAI,UAAU,CAAC,EACnB,OAAOsY,GAAW,uBAAuB,OAAOtY,CAAC,CAClD,CACH,EACAsY,GAAW,OAAS,SAAiB7f,EAAG,CACtC,OAAO6f,GAAW,MAAM,IAAK7f,CAAC,CAChC,EACA8f,GAAmB,QAAQ,IAAM,UAAY,CAAE,OAAOvV,GAAO,YAAY,gBAAgB,GACzFuV,GAAmB,uBAAuB,IAAM,UAAY,CAAE,OAAO,IAAIL,IAEzE,OAAO,iBAAkBI,GAAYC,IAErC,IAAIc,GAAsB,UAAgC,GAE1DA,GAAoB,UAAU,YAAc,UAAwB,CAClE,MAAO,CAAE,CACX,EACAA,GAAoB,UAAU,SAAW,UAAqB,CAC5D,OAAOA,EACT,EACAA,GAAoB,UAAY,SAAoBpW,EAAKC,EAAQC,EAAMC,EAAS,CAE9E,QADIkW,EAAS,KAAK,IAAIrW,EAAI,eAAgBE,EAAK,aAAY,CAAE,EACpDoW,EAAM,EAAGA,EAAMD,EAAQC,IAC9BpW,EAAK,YAAYC,EAASmW,EAAKtW,EAAI,YAAYC,EAAQqW,CAAG,CAAC,CAE/D,EACAF,GAAoB,OAAS,SAAiB3D,EAAK,CACjD,IAAIjd,EAAIid,EAAI,OACZ,OAAIjd,IAAM,EAAY,GAClBA,GAAK,EAAY,GACdid,EAAI,YAAY,EAAGhT,EAAmB,CAAC,IAAMgT,EAAI,YAAYjd,EAAI,EAAGiK,EAAmB,CAAC,GAAKgT,EAAI,YAAY,EAAGhT,EAAmB,CAAC,IAAMgT,EAAI,YAAYjd,EAAI,EAAGiK,EAAmB,CAAC,CAC9L,EACA2W,GAAoB,QAAU,SAAkBG,EAAKC,EAAK,CACxD,IAAIC,EAAUF,EAAI,OACdG,EAAUF,EAAI,OAClB,GAAIC,IAAYC,EAAW,MAAO,GAElC,QADIJ,EAAM,KAAK,IAAIC,EAAI,eAAgBC,EAAI,aAAY,CAAE,EAChDnnB,EAAI,EAAGA,EAAIonB,EAASpnB,IAC3B,QAAS0N,EAAI,EAAGA,EAAIuZ,EAAKvZ,IAAK,CAC5B,IAAIpF,EAAK4e,EAAI,YAAYlnB,EAAG0N,CAAC,EACzBnF,EAAK4e,EAAI,YAAYnnB,EAAG0N,CAAC,EAC7B,GAAIwZ,EAAI,YAAYlnB,EAAG0N,CAAC,IAAMyZ,EAAI,YAAYnnB,EAAG0N,CAAC,GAC9C,EAAAzH,EAAO,MAAMqC,CAAE,GAAKrC,EAAO,MAAMsC,CAAE,GACvC,MAAO,EACR,CAEH,MAAO,EACT,EACAwe,GAAoB,OAAS,SAAiBO,EAAMlE,EAAKvE,EAAM,CAC7D,IAAI0I,EAASD,EAAK,OAAOzI,EAAMuE,EAAI,aAAY,CAAE,EAC7Cjd,EAAIid,EAAI,OAEZ,GADA2D,GAAoB,KAAK3D,EAAK,EAAGmE,EAAQ,EAAGphB,CAAC,EACzCA,EAAI,EACN,QAASnG,EAAImG,EAAGnG,EAAI6e,EAAM7e,IAAO+mB,GAAoB,KAAK3D,EAAKjd,EAAI,EAAGohB,EAAQvnB,EAAG,CAAC,EAEpF,OAAOunB,CACT,EACAR,GAAoB,QAAU,SAAkB3D,EAAK,CAGnD,QAFIjF,EAAOiF,EAAI,KAAI,EAAK,EACpBrD,EAAM,KAAK,MAAM5B,EAAO,CAAC,EACpB,EAAI,EAAG,GAAK4B,EAAK,IACxBgH,GAAoB,KAAK3D,EAAK,EAAGjF,EAAO,CAAC,CAE7C,EACA4I,GAAoB,KAAO,SAAe3D,EAAKpjB,EAAGzD,EAAG,CACnD,GAAIyD,IAAMzD,EAAK,OAAO,KACtB,QAAS0qB,EAAM,EAAGA,EAAM7D,EAAI,aAAY,EAAI6D,IAAO,CACjD,IAAIjH,EAAMoD,EAAI,YAAYpjB,EAAGinB,CAAG,EAChC7D,EAAI,YAAYpjB,EAAGinB,EAAK7D,EAAI,YAAY7mB,EAAG0qB,CAAG,CAAC,EAC/C7D,EAAI,YAAY7mB,EAAG0qB,EAAKjH,CAAG,CAC5B,CACH,EACA+G,GAAoB,KAAO,SAAepW,EAAKC,EAAQC,EAAMC,EAAS9S,EAAQ,CAC5E,QAASgC,EAAI,EAAGA,EAAIhC,EAAQgC,IAC1B+mB,GAAoB,UAAUpW,EAAKC,EAAS5Q,EAAG6Q,EAAMC,EAAU9Q,CAAC,CAEpE,EACA+mB,GAAoB,SAAW,UAAqB,CAClD,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAIS,EAAK,UAAU,CAAC,EAChB3I,EAAO2I,EAAG,OACd,GAAI3I,IAAS,EAAK,MAAO,KACzB,IAAIoI,EAAMO,EAAG,eACTtd,EAAM,IAAIf,GACde,EAAI,OAAO,GAAG,EACd,QAASlK,EAAI,EAAGA,EAAI6e,EAAM7e,IAAK,CACzBA,EAAI,GAAKkK,EAAI,OAAO,GAAG,EAC3B,QAASwD,EAAI,EAAGA,EAAIuZ,EAAKvZ,IACnBA,EAAI,GAAKxD,EAAI,OAAO,GAAG,EAC3BA,EAAI,OAAO8b,GAAW,SAASwB,EAAG,YAAYxnB,EAAG0N,CAAC,CAAC,CAAC,CAEvD,CACD,OAAAxD,EAAI,OAAO,GAAG,EACPA,EAAI,SAAU,CACtB,CACH,EACA6c,GAAoB,gBAAkB,SAA0BO,EAAMlE,EAAK,CACzE,IAAIjd,EAAIid,EAAI,OACZ,GAAIjd,IAAM,EAAK,OAAOid,EACtB,GAAIjd,GAAK,EAAK,OAAO4gB,GAAoB,iBAAiBO,EAAMlE,EAAK,CAAC,EACtE,IAAIqE,EAAWrE,EAAI,YAAY,EAAGhT,EAAmB,CAAC,IAAMgT,EAAI,YAAYjd,EAAI,EAAGiK,EAAmB,CAAC,GAAKgT,EAAI,YAAY,EAAGhT,EAAmB,CAAC,IAAMgT,EAAI,YAAYjd,EAAI,EAAGiK,EAAmB,CAAC,EACpM,OAAIqX,EAAmBrE,EAChB2D,GAAoB,iBAAiBO,EAAMlE,EAAKjd,EAAI,CAAC,CAC9D,EACA4gB,GAAoB,iBAAmB,SAA2BO,EAAMlE,EAAKvE,EAAM,CACjF,IAAI0I,EAASD,EAAK,OAAOzI,EAAMuE,EAAI,aAAY,CAAE,EAC7Cjd,EAAIid,EAAI,OACZ2D,GAAoB,KAAK3D,EAAK,EAAGmE,EAAQ,EAAGphB,CAAC,EAC7C,QAASnG,EAAImG,EAAGnG,EAAI6e,EAAM7e,IAAO+mB,GAAoB,KAAK3D,EAAK,EAAGmE,EAAQvnB,EAAG,CAAC,EAC9E,OAAOunB,CACT,EAEA,IAAIrC,EAAc,SAAU5B,EAAa,CACvC,SAAS4B,EAAYjpB,EAAQuf,EAAS,CACpC8H,EAAY,KAAK,KAAM9H,CAAO,EAC9B,KAAK,QAAU,KACf,KAAK,KAAKvf,CAAM,CACjB,CAEIqnB,IAAc4B,EAAW,UAAY5B,GAC1C4B,EAAW,UAAY,OAAO,OAAQ5B,GAAeA,EAAY,WACjE4B,EAAW,UAAU,YAAcA,EAEnC,IAAIxe,EAAkB,CAAE,iBAAkB,CAAE,aAAc,EAAM,CAAA,EAChE,OAAAwe,EAAW,UAAU,wBAA0B,UAAoC,CACjF,OAAI,KAAK,UACA,IAAI9S,EAEN,KAAK,QAAQ,eAAe,IAAIA,CAAU,CACrD,EACE8S,EAAW,UAAU,OAAS,UAAmB,CAC/C,OAAO,KAAK,YAAc,KAAK,SAAU,CAC7C,EACEA,EAAW,UAAU,aAAe,UAAyB,CAC3D,OAAO5B,EAAY,oBACvB,EACE4B,EAAW,UAAU,eAAiB,UAA2B,CAC/D,OAAO,KAAK,QAAQ,kBAAmB,CAC3C,EACEA,EAAW,UAAU,YAAc,UAAwB,CACzD,IAAIlR,EAAS,KAEb,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAIpN,EAAQ,UAAU,CAAC,EACnBf,EAAY,UAAU,CAAC,EAC3B,GAAI,CAAC,KAAK,kBAAkBe,CAAK,EAC/B,MAAO,GAET,IAAI8gB,EAAkB9gB,EACtB,GAAI,KAAK,QAAQ,KAAI,IAAO8gB,EAAgB,QAAQ,OAClD,MAAO,GAET,QAAS1nB,EAAI,EAAGA,EAAI,KAAK,QAAQ,OAAQA,IACvC,GAAI,CAACgU,EAAO,MAAMA,EAAO,QAAQ,cAAchU,CAAC,EAAG0nB,EAAgB,QAAQ,cAAc1nB,CAAC,EAAG6F,CAAS,EACpG,MAAO,GAGX,MAAO,EACb,KAAa,QAAOyd,EAAY,UAAU,YAAY,MAAM,KAAM,SAAS,CAC3E,EACE4B,EAAW,UAAU,UAAY,UAAsB,CAGrD,QAFIlR,EAAS,KAEJhU,EAAI,EAAGA,EAAI,KAAK,MAAM,KAAK,QAAQ,KAAM,EAAG,CAAC,EAAGA,IAAK,CAC5D,IAAIzD,EAAIyX,EAAO,QAAQ,KAAM,EAAG,EAAIhU,EACpC,GAAI,CAACgU,EAAO,QAAQ,cAAchU,CAAC,EAAE,OAAOgU,EAAO,QAAQ,cAAczX,CAAC,CAAC,EACzE,OAAIyX,EAAO,QAAQ,cAAchU,CAAC,EAAE,UAAUgU,EAAO,QAAQ,cAAczX,CAAC,CAAC,EAAI,GAC/EwqB,GAAoB,QAAQ/S,EAAO,OAAO,EAErC,IAEV,CACL,EACEkR,EAAW,UAAU,cAAgB,UAA0B,CAC7D,OAAI,KAAK,UAAoB,KACtB,KAAK,QAAQ,cAAc,CAAC,CACvC,EACEA,EAAW,UAAU,qBAAuB,UAAiC,CAC3E,OAAI,KAAK,WACApC,EAAU,MAEZ,CACX,EACEoC,EAAW,UAAU,SAAW,UAAqB,CACnD,OAAI,KAAK,UACA,GAEF,KAAK,eAAe,CAAC,EAAE,SAAS,KAAK,eAAe,KAAK,aAAc,EAAG,CAAC,CAAC,CACvF,EACEA,EAAW,UAAU,YAAc,UAAwB,CACzD,OAAI,KAAK,UACA,KAEF,KAAK,UAAU,KAAK,aAAY,EAAK,CAAC,CACjD,EACEA,EAAW,UAAU,aAAe,UAAyB,CAC3D,MAAO,EACX,EACEA,EAAW,UAAU,UAAY,UAAsB,CACrD,OAAOrO,EAAa,cAAc,KAAK,OAAO,CAClD,EACEqO,EAAW,UAAU,aAAe,UAAyB,CAC3D,OAAO,KAAK,QAAQ,KAAM,CAC9B,EACEA,EAAW,UAAU,QAAU,UAAoB,CACjD,IAAI9B,EAAM,KAAK,QAAQ,KAAI,EAC3B2D,GAAoB,QAAQ3D,CAAG,EAC/B,IAAIuE,EAAU,KAAK,WAAY,EAAC,iBAAiBvE,CAAG,EACpD,OAAOuE,CACX,EACEzC,EAAW,UAAU,mBAAqB,UAA+B,CACvE,IAAIlR,EAAS,KAEb,GAAI,UAAU,SAAW,EAAG,CAK1B,QAJI,EAAI,UAAU,CAAC,EACfxU,EAAO,EACPQ,EAAI,EACJzD,EAAI,EACDyD,EAAI,KAAK,QAAQ,KAAI,GAAMzD,EAAIiD,EAAK,QAAQ,QAAQ,CACzD,IAAI0c,EAAalI,EAAO,QAAQ,cAAchU,CAAC,EAAE,UAAUR,EAAK,QAAQ,cAAcjD,CAAC,CAAC,EACxF,GAAI2f,IAAe,EACjB,OAAOA,EAETlc,IACAzD,GACD,CACD,OAAIyD,EAAI,KAAK,QAAQ,KAAI,EAChB,EAELzD,EAAIiD,EAAK,QAAQ,KAAI,EAChB,GAEF,CACb,SAAe,UAAU,SAAW,EAAG,CACjC,IAAIukB,EAAM,UAAU,CAAC,EACjBnI,EAAO,UAAU,CAAC,EAClBgM,EAAS7D,EACb,OAAOnI,EAAK,QAAQ,KAAK,QAASgM,EAAO,OAAO,CACjD,CACL,EACE1C,EAAW,UAAU,MAAQ,UAAkB,CAC7C,IAAIlR,EAAS,KAEb,GAAI9L,EAAa,UAAU,CAAC,EAAGkU,EAAgB,EAE7C,QADIgI,EAAS,UAAU,CAAC,EACfpkB,EAAI,EAAGA,EAAI,KAAK,QAAQ,OAAQA,IACvCokB,EAAO,OAAOpQ,EAAO,QAAQ,cAAchU,CAAC,CAAC,UAEtCkI,EAAa,UAAU,CAAC,EAAGib,EAAwB,EAAG,CAC/D,IAAIkB,EAAW,UAAU,CAAC,EAC1B,GAAI,KAAK,QAAQ,KAAM,IAAK,EAAK,OAAO,KACxC,QAASzK,EAAM,EAAGA,EAAM,KAAK,QAAQ,SACnCyK,EAAS,OAAOrQ,EAAO,QAAS4F,CAAG,EAC/B,CAAAyK,EAAS,UAF8BzK,IAE3C,CAEEyK,EAAS,kBAAmB,GAAI,KAAK,gBAAiB,CAC3D,SAAUnc,EAAa,UAAU,CAAC,EAAGgb,EAAc,EAAG,CACrD,IAAIoB,EAAW,UAAU,CAAC,EAC1BA,EAAS,OAAO,IAAI,CACrB,SAAUpc,EAAa,UAAU,CAAC,EAAGoT,EAAuB,EAAG,CAC9D,IAAIiJ,EAAW,UAAU,CAAC,EAC1BA,EAAS,OAAO,IAAI,CACrB,CACL,EACEW,EAAW,UAAU,YAAc,UAAwB,CACzD,OAAO,IAAIN,GAAW,IAAI,EAAE,YAAa,CAC7C,EACEM,EAAW,UAAU,kBAAoB,SAA4Bte,EAAO,CAC1E,OAAOA,aAAiBse,CAC5B,EACEA,EAAW,UAAU,MAAQ,UAAkB,CAC7C,IAAI2C,EAAKvE,EAAY,UAAU,MAAM,KAAK,IAAI,EAC9C,OAAAuE,EAAG,QAAU,KAAK,QAAQ,MAAK,EACxBA,CACX,EACE3C,EAAW,UAAU,eAAiB,SAAyB/e,EAAG,CAChE,OAAO,KAAK,QAAQ,cAAcA,CAAC,CACvC,EACE+e,EAAW,UAAU,gBAAkB,UAA4B,CACjE,MAAO,YACX,EACEA,EAAW,UAAU,KAAO,UAAiB,CAC3C,OAAO,IAAIA,EAAW,KAAK,QAAQ,KAAM,EAAE,KAAK,QAAQ,CAC5D,EACEA,EAAW,UAAU,sBAAwB,UAAkC,CAC7E,OAAO,KAAK,OAChB,EACEA,EAAW,UAAU,QAAU,UAAoB,CACjD,OAAO,KAAK,QAAQ,KAAI,IAAO,CACnC,EACEA,EAAW,UAAU,KAAO,SAAejpB,EAAQ,CAIjD,GAHIA,IAAW,OACbA,EAAS,KAAK,WAAY,EAAC,6BAA4B,EAAG,OAAO,CAAA,CAAE,GAEjEA,EAAO,KAAM,IAAK,EACpB,MAAM,IAAI6J,EAAyB,iDAAmD7J,EAAO,KAAI,EAAK,uBAAuB,EAE/H,KAAK,QAAUA,CACnB,EACEipB,EAAW,UAAU,aAAe,SAAuB7O,EAAI,CAG7D,QAFIrC,EAAS,KAEJhU,EAAI,EAAGA,EAAI,KAAK,QAAQ,OAAQA,IACvC,GAAIgU,EAAO,QAAQ,cAAchU,CAAC,EAAE,OAAOqW,CAAE,EAC3C,MAAO,GAGX,MAAO,EACX,EACE6O,EAAW,UAAU,cAAgB,UAA0B,CAC7D,OAAI,KAAK,UACA,KAEF,KAAK,UAAU,CAAC,CAC3B,EACEA,EAAW,UAAU,UAAY,SAAoB/e,EAAG,CACtD,OAAO,KAAK,WAAU,EAAG,YAAY,KAAK,QAAQ,cAAcA,CAAC,CAAC,CACtE,EACE+e,EAAW,UAAU,YAAc,UAAwB,CACzD,MAAO,CAAC3C,EAAM,CAClB,EACE2C,EAAW,UAAU,SAAW,UAAqB,CACnD,OAAOA,CACX,EACExe,EAAgB,iBAAiB,IAAM,UAAY,CAAE,MAAO,mBAAmB,EAE/E,OAAO,iBAAkBwe,EAAYxe,GAE9Bwe,CACT,EAAE3J,CAAQ,EAENuM,GAAS,UAAmB,GAEhCA,GAAO,UAAU,YAAc,UAAwB,CACrD,MAAO,CAAE,CACX,EACAA,GAAO,UAAU,SAAW,UAAqB,CAC/C,OAAOA,EACT,EAEA,IAAIC,GAAS,SAAUzE,EAAa,CAClC,SAASyE,EAAOvsB,EAAaggB,EAAS,CACpC8H,EAAY,KAAK,KAAM9H,CAAO,EAC9B,KAAK,aAAehgB,GAAe,KACnC,KAAK,KAAK,KAAK,YAAY,CAC5B,CAEI8nB,IAAcyE,EAAM,UAAYzE,GACrCyE,EAAM,UAAY,OAAO,OAAQzE,GAAeA,EAAY,WAC5DyE,EAAM,UAAU,YAAcA,EAE9B,IAAIrhB,EAAkB,CAAE,iBAAkB,CAAE,aAAc,EAAM,CAAA,EAChE,OAAAqhB,EAAM,UAAU,wBAA0B,UAAoC,CAC5E,GAAI,KAAK,UACP,OAAO,IAAI3V,EAEb,IAAI9B,EAAM,IAAI8B,EACd,OAAA9B,EAAI,gBAAgB,KAAK,aAAa,KAAK,CAAC,EAAG,KAAK,aAAa,KAAK,CAAC,CAAC,EACjEA,CACX,EACEyX,EAAM,UAAU,aAAe,UAAyB,CACtD,OAAOzE,EAAY,eACvB,EACEyE,EAAM,UAAU,eAAiB,UAA2B,CAC1D,OAAO,KAAK,QAAS,EAAG,CAAE,EAAG,CAAC,KAAK,eAAe,CACtD,EACEA,EAAM,UAAU,YAAc,UAAwB,CACpD,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAInhB,EAAQ,UAAU,CAAC,EACnBf,EAAY,UAAU,CAAC,EAC3B,OAAK,KAAK,kBAAkBe,CAAK,EAG7B,KAAK,QAAO,GAAMA,EAAM,QAAO,EAC1B,GAEL,KAAK,QAAO,IAAOA,EAAM,QAAO,EAC3B,GAEF,KAAK,MAAMA,EAAM,cAAe,EAAE,KAAK,cAAe,EAAEf,CAAS,EAR/D,EASf,KAAa,QAAOyd,EAAY,UAAU,YAAY,MAAM,KAAM,SAAS,CAC3E,EACEyE,EAAM,UAAU,UAAY,UAAsB,CAAA,EAClDA,EAAM,UAAU,cAAgB,UAA0B,CACxD,OAAO,KAAK,aAAa,SAAW,EAAI,KAAK,aAAa,cAAc,CAAC,EAAI,IACjF,EACEA,EAAM,UAAU,qBAAuB,UAAiC,CACtE,OAAOjF,EAAU,KACrB,EACEiF,EAAM,UAAU,aAAe,UAAyB,CACtD,MAAO,EACX,EACEA,EAAM,UAAU,aAAe,UAAyB,CACtD,OAAO,KAAK,UAAY,EAAI,CAChC,EACEA,EAAM,UAAU,QAAU,UAAoB,CAC5C,OAAO,KAAK,KAAM,CACtB,EACEA,EAAM,UAAU,KAAO,UAAiB,CACtC,GAAI,KAAK,cAAe,IAAK,KAC3B,MAAM,IAAI,MAAM,4BAA4B,EAE9C,OAAO,KAAK,cAAa,EAAG,CAChC,EACEA,EAAM,UAAU,mBAAqB,UAA+B,CAClE,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAInhB,EAAQ,UAAU,CAAC,EACnBkN,EAAUlN,EACd,OAAO,KAAK,cAAe,EAAC,UAAUkN,EAAQ,cAAa,CAAE,CACnE,SAAe,UAAU,SAAW,EAAG,CACjC,IAAI6H,EAAU,UAAU,CAAC,EACrBC,EAAO,UAAU,CAAC,EAClBlgB,EAAQigB,EACZ,OAAOC,EAAK,QAAQ,KAAK,aAAclgB,EAAM,YAAY,CAC1D,CACL,EACEqsB,EAAM,UAAU,MAAQ,UAAkB,CACxC,GAAI7f,EAAa,UAAU,CAAC,EAAGkU,EAAgB,EAAG,CAChD,IAAIgI,EAAS,UAAU,CAAC,EACxB,GAAI,KAAK,UACP,OAAO,KAETA,EAAO,OAAO,KAAK,cAAe,CAAA,CACnC,SAAUlc,EAAa,UAAU,CAAC,EAAGib,EAAwB,EAAG,CAC/D,IAAIkB,EAAW,UAAU,CAAC,EAC1B,GAAI,KAAK,UAAa,OAAO,KAC7BA,EAAS,OAAO,KAAK,aAAc,CAAC,EAChCA,EAAS,kBAAmB,GAAI,KAAK,gBAAiB,CAC3D,SAAUnc,EAAa,UAAU,CAAC,EAAGgb,EAAc,EAAG,CACrD,IAAIoB,EAAW,UAAU,CAAC,EAC1BA,EAAS,OAAO,IAAI,CACrB,SAAUpc,EAAa,UAAU,CAAC,EAAGoT,EAAuB,EAAG,CAC9D,IAAIiJ,EAAW,UAAU,CAAC,EAC1BA,EAAS,OAAO,IAAI,CACrB,CACL,EACEwD,EAAM,UAAU,YAAc,UAAwB,CACpD,OAAO,KAAK,aAAa,yBAAyB,IAAI,CAC1D,EACEA,EAAM,UAAU,MAAQ,UAAkB,CACxC,IAAI9W,EAAIqS,EAAY,UAAU,MAAM,KAAK,IAAI,EAC7C,OAAArS,EAAE,aAAe,KAAK,aAAa,MAAK,EACjCA,CACX,EACE8W,EAAM,UAAU,gBAAkB,UAA4B,CAC5D,MAAO,OACX,EACEA,EAAM,UAAU,KAAO,UAAiB,CACtC,OAAO,IAAIA,EAAM,KAAK,aAAa,KAAM,EAAE,KAAK,QAAQ,CAC5D,EACEA,EAAM,UAAU,sBAAwB,UAAkC,CACxE,OAAO,KAAK,YAChB,EACEA,EAAM,UAAU,KAAO,UAAiB,CACtC,GAAI,KAAK,cAAe,IAAK,KAC3B,MAAM,IAAI,MAAM,4BAA4B,EAE9C,OAAO,KAAK,cAAa,EAAG,CAChC,EACEA,EAAM,UAAU,QAAU,UAAoB,CAC5C,OAAO,KAAK,aAAa,KAAI,IAAO,CACxC,EACEA,EAAM,UAAU,KAAO,SAAevsB,EAAa,CAC7CA,IAAgB,OAClBA,EAAc,KAAK,WAAY,EAAC,6BAA4B,EAAG,OAAO,CAAA,CAAE,GAE1E6Z,EAAO,OAAO7Z,EAAY,KAAM,GAAI,CAAC,EACrC,KAAK,aAAeA,CACxB,EACEusB,EAAM,UAAU,SAAW,UAAqB,CAC9C,MAAO,EACX,EACEA,EAAM,UAAU,YAAc,UAAwB,CACpD,MAAO,CAACD,EAAM,CAClB,EACEC,EAAM,UAAU,SAAW,UAAqB,CAC9C,OAAOA,CACX,EACErhB,EAAgB,iBAAiB,IAAM,UAAY,CAAE,MAAO,mBAAmB,EAE/E,OAAO,iBAAkBqhB,EAAOrhB,GAEzBqhB,CACT,EAAExM,CAAQ,EAENyM,GAAY,UAAsB,GAEtCA,GAAU,UAAU,YAAc,UAAwB,CACxD,MAAO,CAAE,CACX,EACAA,GAAU,UAAU,SAAW,UAAqB,CAClD,OAAOA,EACT,EAEA,IAAIC,GAAW,SAAU3E,EAAa,CACpC,SAAS2E,EAASpT,EAAOC,EAAO0G,EAAS,CAUvC,GATA8H,EAAY,KAAK,KAAM9H,CAAO,EAC9B,KAAK,OAAS,KACd,KAAK,OAAS,KACV3G,IAAU,OACZA,EAAQ,KAAK,WAAY,EAAC,iBAAgB,GAExCC,IAAU,OACZA,EAAQ,CAAA,GAENwO,EAAY,gBAAgBxO,CAAK,EACnC,MAAM,IAAIhP,EAAyB,sCAAsC,EAE3E,GAAI+O,EAAM,QAAS,GAAIyO,EAAY,oBAAoBxO,CAAK,EAC1D,MAAM,IAAIhP,EAAyB,kCAAkC,EAEvE,KAAK,OAAS+O,EACd,KAAK,OAASC,CACf,CAEIwO,IAAc2E,EAAQ,UAAY3E,GACvC2E,EAAQ,UAAY,OAAO,OAAQ3E,GAAeA,EAAY,WAC9D2E,EAAQ,UAAU,YAAcA,EAEhC,IAAIvhB,EAAkB,CAAE,iBAAkB,CAAE,aAAc,EAAM,CAAA,EAChE,OAAAuhB,EAAQ,UAAU,wBAA0B,UAAoC,CAC9E,OAAO,KAAK,OAAO,oBAAqB,CAC5C,EACEA,EAAQ,UAAU,aAAe,UAAyB,CACxD,OAAO3E,EAAY,iBACvB,EACE2E,EAAQ,UAAU,eAAiB,UAA2B,CAC5D,IAAIjU,EAAS,KAEb,GAAI,KAAK,UACP,MAAO,CAAE,EAKX,QAHIxY,EAAc,IAAI,MAAM,KAAK,aAAY,CAAE,EAAE,KAAK,IAAI,EACtD6F,EAAI,GACJ6mB,EAAmB,KAAK,OAAO,eAAc,EACxC3nB,EAAI,EAAGA,EAAI2nB,EAAiB,OAAQ3nB,IAC3Cc,IACA7F,EAAY6F,CAAC,EAAI6mB,EAAiB3nB,CAAC,EAErC,QAASP,EAAI,EAAGA,EAAI,KAAK,OAAO,OAAQA,IAEtC,QADIwjB,EAAmBxP,EAAO,OAAOhU,CAAC,EAAE,eAAc,EAC7CzD,EAAI,EAAGA,EAAIinB,EAAiB,OAAQjnB,IAC3C8E,IACA7F,EAAY6F,CAAC,EAAImiB,EAAiBjnB,CAAC,EAGvC,OAAOf,CACX,EACEysB,EAAQ,UAAU,QAAU,UAAoB,CAC9C,IAAIjU,EAAS,KAET5V,EAAO,EACXA,GAAQ,KAAK,IAAIyY,EAAa,WAAW,KAAK,OAAO,sBAAuB,CAAA,CAAC,EAC7E,QAAS7W,EAAI,EAAGA,EAAI,KAAK,OAAO,OAAQA,IACtC5B,GAAQ,KAAK,IAAIyY,EAAa,WAAW7C,EAAO,OAAOhU,CAAC,EAAE,sBAAqB,CAAE,CAAC,EAEpF,OAAO5B,CACX,EACE6pB,EAAQ,UAAU,YAAc,UAAwB,CAGtD,GAFI,KAAK,mBAAkB,IAAO,GAC9B,KAAK,SAAW,MAChB,KAAK,OAAO,aAAc,IAAK,EAAK,MAAO,GAG/C,QAFI7E,EAAM,KAAK,OAAO,sBAAqB,EACvC9S,EAAM,KAAK,sBACNtQ,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1B,IAAIO,EAAI6iB,EAAI,KAAKpjB,CAAC,EAClB,GAAI,EAAEO,IAAM+P,EAAI,WAAa/P,IAAM+P,EAAI,QAAS,GAAK,MAAO,GAC5D,IAAI9P,EAAI4iB,EAAI,KAAKpjB,CAAC,EAClB,GAAI,EAAEQ,IAAM8P,EAAI,WAAa9P,IAAM8P,EAAI,QAAS,GAAK,MAAO,EAC7D,CAGD,QAFI6X,EAAQ/E,EAAI,KAAK,CAAC,EAClBgF,EAAQhF,EAAI,KAAK,CAAC,EACbxJ,EAAM,EAAGA,GAAO,EAAGA,IAAO,CACjC,IAAIhR,EAAMwa,EAAI,KAAKxJ,CAAG,EAClBnP,EAAM2Y,EAAI,KAAKxJ,CAAG,EAClByO,EAAWzf,IAAQuf,EACnBG,EAAW7d,IAAQ2d,EACvB,GAAIC,IAAaC,EAAY,MAAO,GACpCH,EAAQvf,EACRwf,EAAQ3d,CACT,CACD,MAAO,EACX,EACEwd,EAAQ,UAAU,YAAc,UAAwB,CACtD,IAAIjU,EAAS,KAEb,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAIpN,EAAQ,UAAU,CAAC,EACnBf,EAAY,UAAU,CAAC,EAC3B,GAAI,CAAC,KAAK,kBAAkBe,CAAK,EAC/B,MAAO,GAET,IAAI2hB,EAAe3hB,EACf4hB,EAAY,KAAK,OACjBC,EAAoBF,EAAa,OAIrC,GAHI,CAACC,EAAU,YAAYC,EAAmB5iB,CAAS,GAGnD,KAAK,OAAO,SAAW0iB,EAAa,OAAO,OAC7C,MAAO,GAET,QAASvoB,EAAI,EAAGA,EAAI,KAAK,OAAO,OAAQA,IACtC,GAAI,CAACgU,EAAO,OAAOhU,CAAC,EAAE,YAAYuoB,EAAa,OAAOvoB,CAAC,EAAG6F,CAAS,EACjE,MAAO,GAGX,MAAO,EACb,KAAa,QAAOyd,EAAY,UAAU,YAAY,MAAM,KAAM,SAAS,CAC3E,EACE2E,EAAQ,UAAU,UAAY,UAAsB,CAClD,IAAIjU,EAAS,KAEb,GAAI,UAAU,SAAW,EAAG,CAC1B,KAAK,UAAU,KAAK,OAAQ,EAAI,EAChC,QAAShU,EAAI,EAAGA,EAAI,KAAK,OAAO,OAAQA,IACtCgU,EAAO,UAAUA,EAAO,OAAOhU,CAAC,EAAG,EAAK,EAE1C4iB,GAAO,KAAK,KAAK,MAAM,CAC7B,SAAe,UAAU,SAAW,EAAG,CACjC,IAAItmB,EAAO,UAAU,CAAC,EAClBosB,EAAY,UAAU,CAAC,EAC3B,GAAIpsB,EAAK,UACP,OAAO,KAET,IAAIqsB,EAAoB,IAAI,MAAMrsB,EAAK,eAAc,EAAG,OAAS,CAAC,EAAE,KAAK,IAAI,EAC7EoU,GAAO,UAAUpU,EAAK,eAAgB,EAAE,EAAGqsB,EAAmB,EAAGA,EAAkB,MAAM,EACzF,IAAIC,EAAgB3J,EAAiB,cAAc3iB,EAAK,eAAgB,CAAA,EACxE2iB,EAAiB,OAAO0J,EAAmBC,CAAa,EACxDlY,GAAO,UAAUiY,EAAmB,EAAGrsB,EAAK,eAAc,EAAI,EAAGqsB,EAAkB,MAAM,EACzFrsB,EAAK,eAAc,EAAGqsB,EAAkB,MAAM,EAAIA,EAAkB,CAAC,EACjE9R,EAAa,MAAMva,EAAK,eAAgB,CAAA,IAAMosB,GAChDzJ,EAAiB,QAAQ3iB,EAAK,eAAgB,CAAA,CAEjD,CACL,EACE2rB,EAAQ,UAAU,cAAgB,UAA0B,CAC1D,OAAO,KAAK,OAAO,cAAe,CACtC,EACEA,EAAQ,UAAU,mBAAqB,UAA+B,CACpE,OAAO,KAAK,OAAO,MACvB,EACEA,EAAQ,UAAU,qBAAuB,UAAiC,CACxE,MAAO,EACX,EACEA,EAAQ,UAAU,aAAe,UAAyB,CACxD,MAAO,EACX,EACEA,EAAQ,UAAU,UAAY,UAAsB,CAClD,IAAIjU,EAAS,KAET7F,EAAM,EACVA,GAAO,KAAK,OAAO,YACnB,QAASnO,EAAI,EAAGA,EAAI,KAAK,OAAO,OAAQA,IACtCmO,GAAO6F,EAAO,OAAOhU,CAAC,EAAE,UAAS,EAEnC,OAAOmO,CACX,EACE8Z,EAAQ,UAAU,aAAe,UAAyB,CAIxD,QAHIjU,EAAS,KAET2P,EAAY,KAAK,OAAO,aAAY,EAC/B3jB,EAAI,EAAGA,EAAI,KAAK,OAAO,OAAQA,IACtC2jB,GAAa3P,EAAO,OAAOhU,CAAC,EAAE,aAAY,EAE5C,OAAO2jB,CACX,EACEsE,EAAQ,UAAU,QAAU,UAAoB,CAC9C,IAAIjU,EAAS,KAET6U,EAAO,KAAK,OAChBA,EAAK,OAAS,KAAK,OAAO,KAAI,EAAG,UACjCA,EAAK,OAAS,IAAI,MAAM,KAAK,OAAO,MAAM,EAAE,KAAK,IAAI,EACrD,QAAS7oB,EAAI,EAAGA,EAAI,KAAK,OAAO,OAAQA,IACtC6oB,EAAK,OAAO7oB,CAAC,EAAIgU,EAAO,OAAOhU,CAAC,EAAE,OAAO,UAE3C,OAAO6oB,CACX,EACEZ,EAAQ,UAAU,WAAa,UAAuB,CACpD,OAAO,KAAK,gBAAiB,EAAC,WAAY,CAC9C,EACEA,EAAQ,UAAU,mBAAqB,UAA+B,CACpE,IAAIjU,EAAS,KAEb,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAI,EAAI,UAAU,CAAC,EACfwU,EAAY,KAAK,OACjBM,EAAa,EAAE,OACnB,OAAON,EAAU,mBAAmBM,CAAU,CACpD,SAAe,UAAU,SAAW,EAAG,CACjC,IAAI/E,EAAM,UAAU,CAAC,EACjBnI,EAAO,UAAU,CAAC,EAClBiN,EAAO9E,EACPgF,EAAc,KAAK,OACnBC,EAAeH,EAAK,OACpBI,EAAYF,EAAY,mBAAmBC,EAAcpN,CAAI,EACjE,GAAIqN,IAAc,EAAK,OAAOA,EAI9B,QAHIC,EAAS,KAAK,qBACdC,EAASN,EAAK,qBACd7oB,EAAI,EACDA,EAAIkpB,GAAUlpB,EAAImpB,GAAQ,CAC/B,IAAIC,EAAWpV,EAAO,iBAAiBhU,CAAC,EACpCqpB,EAAYR,EAAK,iBAAiB7oB,CAAC,EACnCmkB,EAAWiF,EAAS,mBAAmBC,EAAWzN,CAAI,EAC1D,GAAIuI,IAAa,EAAK,OAAOA,EAC7BnkB,GACD,CACD,OAAIA,EAAIkpB,EAAiB,EACrBlpB,EAAImpB,EAAiB,GAClB,CACR,CACL,EACElB,EAAQ,UAAU,MAAQ,SAAgB7D,EAAQ,CAChD,IAAIpQ,EAAS,KAEb,GAAI9L,EAAakc,EAAQhI,EAAgB,EAAG,CAC1C,KAAK,OAAO,MAAMgI,CAAM,EACxB,QAASxK,EAAM,EAAGA,EAAM,KAAK,OAAO,OAAQA,IAC1C5F,EAAO,OAAO4F,CAAG,EAAE,MAAMwK,CAAM,CAElC,SAAUlc,EAAakc,EAAQjB,EAAwB,EAAG,CAEzD,GADA,KAAK,OAAO,MAAMiB,CAAM,EACpB,CAACA,EAAO,SACV,QAAS3F,EAAM,EAAGA,EAAM,KAAK,OAAO,SAClCzK,EAAO,OAAOyK,CAAG,EAAE,MAAM2F,CAAM,EAC3B,CAAAA,EAAO,UAF+B3F,IAE1C,CAGA2F,EAAO,kBAAmB,GAAI,KAAK,gBAAiB,CACzD,SAAUlc,EAAakc,EAAQlB,EAAc,EAC5CkB,EAAO,OAAO,IAAI,UACTlc,EAAakc,EAAQ9I,EAAuB,EAAG,CACxD8I,EAAO,OAAO,IAAI,EAClB,KAAK,OAAO,MAAMA,CAAM,EACxB,QAASpkB,EAAI,EAAGA,EAAI,KAAK,OAAO,OAAQA,IACtCgU,EAAO,OAAOhU,CAAC,EAAE,MAAMokB,CAAM,CAEhC,CACL,EACE6D,EAAQ,UAAU,YAAc,UAAwB,CACtD,IAAIjU,EAAS,KAEb,GAAI,KAAK,UACP,OAAO,KAAK,WAAY,EAAC,sBAAuB,EAElD,IAAIY,EAAQ,IAAI,MAAM,KAAK,OAAO,OAAS,CAAC,EAAE,KAAK,IAAI,EACvDA,EAAM,CAAC,EAAI,KAAK,OAChB,QAAS5U,EAAI,EAAGA,EAAI,KAAK,OAAO,OAAQA,IACtC4U,EAAM5U,EAAI,CAAC,EAAIgU,EAAO,OAAOhU,CAAC,EAEhC,OAAI4U,EAAM,QAAU,EAAY,KAAK,aAAa,iBAAiBA,EAAM,CAAC,EAAE,sBAAuB,CAAA,EAC5F,KAAK,aAAa,sBAAsBA,CAAK,CACxD,EACEqT,EAAQ,UAAU,MAAQ,UAAkB,CAC1C,IAAIjU,EAAS,KAET6U,EAAOvF,EAAY,UAAU,MAAM,KAAK,IAAI,EAChDuF,EAAK,OAAS,KAAK,OAAO,MAAK,EAC/BA,EAAK,OAAS,IAAI,MAAM,KAAK,OAAO,MAAM,EAAE,KAAK,IAAI,EACrD,QAAS7oB,EAAI,EAAGA,EAAI,KAAK,OAAO,OAAQA,IACtC6oB,EAAK,OAAO7oB,CAAC,EAAIgU,EAAO,OAAOhU,CAAC,EAAE,QAEpC,OAAO6oB,CACX,EACEZ,EAAQ,UAAU,gBAAkB,UAA4B,CAC9D,MAAO,SACX,EACEA,EAAQ,UAAU,KAAO,UAAiB,CAKxC,QAJIjU,EAAS,KAETa,EAAQ,KAAK,OAAO,KAAI,EACxBC,EAAQ,IAAI,MAAM,KAAK,OAAO,MAAM,EAAE,KAAK,IAAI,EAC1C9U,EAAI,EAAGA,EAAI8U,EAAM,OAAQ9U,IAChC8U,EAAM9U,CAAC,EAAIgU,EAAO,OAAOhU,CAAC,EAAE,OAE9B,OAAO,IAAIioB,EAAQpT,EAAOC,EAAO,KAAK,QAAQ,CAClD,EACEmT,EAAQ,UAAU,gBAAkB,UAA4B,CAC9D,OAAO,KAAK,MAChB,EACEA,EAAQ,UAAU,QAAU,UAAoB,CAC9C,OAAO,KAAK,OAAO,QAAS,CAChC,EACEA,EAAQ,UAAU,iBAAmB,SAA2B9hB,EAAG,CACjE,OAAO,KAAK,OAAOA,CAAC,CACxB,EACE8hB,EAAQ,UAAU,YAAc,UAAwB,CACtD,MAAO,CAACD,EAAS,CACrB,EACEC,EAAQ,UAAU,SAAW,UAAqB,CAChD,OAAOA,CACX,EACEvhB,EAAgB,iBAAiB,IAAM,UAAY,CAAE,MAAO,mBAAoB,EAEhF,OAAO,iBAAkBuhB,EAASvhB,GAE3BuhB,CACT,EAAE1M,CAAQ,EAEN+N,GAAc,SAAU7E,EAAuB,CACjD,SAAS6E,GAAc,CACrB7E,EAAsB,MAAM,KAAM,SAAS,CAC5C,CAEIA,IAAwB6E,EAAW,UAAY7E,GACpD6E,EAAW,UAAY,OAAO,OAAQ7E,GAAyBA,EAAsB,WACrF6E,EAAW,UAAU,YAAcA,EAEnC,IAAI5iB,EAAkB,CAAE,iBAAkB,CAAE,aAAc,EAAM,CAAA,EAEhE,OAAA4iB,EAAW,UAAU,aAAe,UAAyB,CAC3D,OAAO/N,EAAS,oBACpB,EACE+N,EAAW,UAAU,QAAU,UAAoB,CACjD,MAAO,EACX,EACEA,EAAW,UAAU,YAAc,UAAwB,CACzD,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAI1iB,EAAQ,UAAU,CAAC,EACnBf,EAAY,UAAU,CAAC,EAC3B,OAAK,KAAK,kBAAkBe,CAAK,EAG1B6d,EAAsB,UAAU,YAAY,KAAK,KAAM7d,EAAOf,CAAS,EAFrE,EAGf,KAAa,QAAO4e,EAAsB,UAAU,YAAY,MAAM,KAAM,SAAS,CACrF,EACE6E,EAAW,UAAU,cAAgB,UAA0B,CAC7D,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAInjB,EAAI,UAAU,CAAC,EACnB,OAAO,KAAK,YAAYA,CAAC,EAAE,cAAe,CAChD,KAAa,QAAOse,EAAsB,UAAU,cAAc,MAAM,KAAM,SAAS,CACvF,EACE6E,EAAW,UAAU,qBAAuB,UAAiC,CAC3E,OAAOxG,EAAU,KACrB,EACEwG,EAAW,UAAU,aAAe,UAAyB,CAC3D,MAAO,EACX,EACEA,EAAW,UAAU,YAAc,UAAwB,CACzD,OAAO,KAAK,aAAa,yBAAyB,IAAI,CAC1D,EACEA,EAAW,UAAU,gBAAkB,UAA4B,CACjE,MAAO,YACX,EACEA,EAAW,UAAU,KAAO,UAAiB,CAI3C,QAHItV,EAAS,KAET/X,EAAS,IAAI,MAAM,KAAK,YAAY,MAAM,EAAE,KAAK,IAAI,EAChD+D,EAAI,EAAGA,EAAI/D,EAAO,OAAQ+D,IACjC/D,EAAO+D,CAAC,EAAIgU,EAAO,YAAYhU,CAAC,EAAE,OAEpC,OAAO,IAAIspB,EAAWrtB,EAAQ,KAAK,QAAQ,CAC/C,EACEqtB,EAAW,UAAU,YAAc,UAAwB,CACzD,MAAO,CAACxB,EAAM,CAClB,EACEwB,EAAW,UAAU,SAAW,UAAqB,CACnD,OAAOA,CACX,EACE5iB,EAAgB,iBAAiB,IAAM,UAAY,CAAE,MAAO,mBAAoB,EAEhF,OAAO,iBAAkB4iB,EAAY5iB,GAE9B4iB,CACT,EAAEjG,EAAkB,EAEhBkG,GAAc,SAAUC,EAAe,CACzC,SAASD,EAAYttB,EAAQuf,EAAS,CAChCvf,aAAkBuK,GAAcgV,aAAmBlI,IACrDrX,EAASuf,EAAQ,6BAA8B,EAAC,OAAOvf,CAAM,GAE/DutB,EAAc,KAAK,KAAMvtB,EAAQuf,CAAO,EACxC,KAAK,qBAAoB,CAC1B,CAEIgO,IAAgBD,EAAW,UAAYC,GAC5CD,EAAW,UAAY,OAAO,OAAQC,GAAiBA,EAAc,WACrED,EAAW,UAAU,YAAcA,EAEnC,IAAI7iB,EAAkB,CAAE,mBAAoB,CAAE,aAAc,IAAO,iBAAkB,CAAE,aAAc,EAAI,GACzG,OAAA6iB,EAAW,UAAU,aAAe,UAAyB,CAC3D,OAAOhO,EAAS,oBACpB,EACEgO,EAAW,UAAU,qBAAuB,UAAiC,CAC3E,OAAOzG,EAAU,KACrB,EACEyG,EAAW,UAAU,SAAW,UAAqB,CACnD,OAAI,KAAK,UACA,GAEFC,EAAc,UAAU,SAAS,KAAK,IAAI,CACrD,EACED,EAAW,UAAU,QAAU,UAAoB,CACjD,IAAInG,EAAM,KAAK,QAAQ,KAAI,EAC3B2D,GAAoB,QAAQ3D,CAAG,EAC/B,IAAIqG,EAAM,KAAK,WAAY,EAAC,iBAAiBrG,CAAG,EAChD,OAAOqG,CACX,EACEF,EAAW,UAAU,qBAAuB,UAAiC,CAC3E,GAAI,CAAC,KAAK,QAAO,GAAM,CAACC,EAAc,UAAU,SAAS,KAAK,IAAI,EAChE,MAAM,IAAI1jB,EAAyB,sDAAsD,EAE3F,GAAI,KAAK,wBAAwB,KAAM,GAAI,GAAK,KAAK,wBAAwB,OAASyjB,EAAW,mBAC/F,MAAM,IAAIzjB,EAAyB,iDAAmD,KAAK,wBAAwB,KAAM,EAAG,uBAAuB,CAEzJ,EACEyjB,EAAW,UAAU,gBAAkB,UAA4B,CACjE,MAAO,YACX,EACEA,EAAW,UAAU,KAAO,UAAiB,CAC3C,OAAO,IAAIA,EAAW,KAAK,QAAQ,KAAM,EAAE,KAAK,QAAQ,CAC5D,EACEA,EAAW,UAAU,YAAc,UAAwB,CACzD,MAAO,CAAE,CACb,EACEA,EAAW,UAAU,SAAW,UAAqB,CACnD,OAAOA,CACX,EACE7iB,EAAgB,mBAAmB,IAAM,UAAY,CAAE,MAAO,EAAC,EAC/DA,EAAgB,iBAAiB,IAAM,UAAY,CAAE,MAAO,mBAAoB,EAEhF,OAAO,iBAAkB6iB,EAAY7iB,GAE9B6iB,CACT,EAAErE,CAAU,EAERwE,GAAgB,SAAUjF,EAAuB,CACnD,SAASiF,GAAgB,CACvBjF,EAAsB,MAAM,KAAM,SAAS,CAC5C,CAEIA,IAAwBiF,EAAa,UAAYjF,GACtDiF,EAAa,UAAY,OAAO,OAAQjF,GAAyBA,EAAsB,WACvFiF,EAAa,UAAU,YAAcA,EAErC,IAAIhjB,EAAkB,CAAE,iBAAkB,CAAE,aAAc,EAAM,CAAA,EAEhE,OAAAgjB,EAAa,UAAU,aAAe,UAAyB,CAC7D,OAAOnO,EAAS,sBACpB,EACEmO,EAAa,UAAU,YAAc,UAAwB,CAC3D,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAI9iB,EAAQ,UAAU,CAAC,EACnBf,EAAY,UAAU,CAAC,EAC3B,OAAK,KAAK,kBAAkBe,CAAK,EAG1B6d,EAAsB,UAAU,YAAY,KAAK,KAAM7d,EAAOf,CAAS,EAFrE,EAGf,KAAa,QAAO4e,EAAsB,UAAU,YAAY,MAAM,KAAM,SAAS,CACrF,EACEiF,EAAa,UAAU,qBAAuB,UAAiC,CAC7E,MAAO,EACX,EACEA,EAAa,UAAU,aAAe,UAAyB,CAC7D,MAAO,EACX,EACEA,EAAa,UAAU,QAAU,UAAoB,CAKnD,QAJI1V,EAAS,KAET7N,EAAI,KAAK,YAAY,OACrByd,EAAW,IAAI,MAAMzd,CAAC,EAAE,KAAK,IAAI,EAC5BnG,EAAI,EAAGA,EAAI,KAAK,YAAY,OAAQA,IAC3C4jB,EAAS5jB,CAAC,EAAIgU,EAAO,YAAYhU,CAAC,EAAE,UAEtC,OAAO,KAAK,aAAa,mBAAmB4jB,CAAQ,CACxD,EACE8F,EAAa,UAAU,YAAc,UAAwB,CAC3D,IAAI1V,EAAS,KAEb,GAAI,KAAK,UACP,OAAO,KAAK,WAAY,EAAC,sBAAuB,EAGlD,QADI2V,EAAW,IAAIzM,EACVld,EAAI,EAAGA,EAAI,KAAK,YAAY,OAAQA,IAG3C,QAFIpE,EAAUoY,EAAO,YAAYhU,CAAC,EAC9B4U,EAAQhZ,EAAQ,cACXW,EAAI,EAAGA,EAAIqY,EAAM,iBAAgB,EAAIrY,IAC5CotB,EAAS,IAAI/U,EAAM,aAAarY,CAAC,CAAC,EAGtC,IAAIqtB,EAAgB,IAAI,MAAMD,EAAS,KAAI,CAAE,EAAE,KAAK,IAAI,EACxD,OAAO,KAAK,aAAa,sBAAsBA,EAAS,QAAQC,CAAa,CAAC,CAClF,EACEF,EAAa,UAAU,gBAAkB,UAA4B,CACnE,MAAO,cACX,EACEA,EAAa,UAAU,KAAO,UAAiB,CAI7C,QAHI1V,EAAS,KAETxX,EAAW,IAAI,MAAM,KAAK,YAAY,MAAM,EAAE,KAAK,IAAI,EAClDwD,EAAI,EAAGA,EAAIxD,EAAS,OAAQwD,IACnCxD,EAASwD,CAAC,EAAIgU,EAAO,YAAYhU,CAAC,EAAE,OAEtC,OAAO,IAAI0pB,EAAaltB,EAAU,KAAK,QAAQ,CACnD,EACEktB,EAAa,UAAU,YAAc,UAAwB,CAC3D,MAAO,CAAC1B,EAAS,CACrB,EACE0B,EAAa,UAAU,SAAW,UAAqB,CACrD,OAAOA,CACX,EACEhjB,EAAgB,iBAAiB,IAAM,UAAY,CAAE,MAAO,kBAAmB,EAE/E,OAAO,iBAAkBgjB,EAAchjB,GAEhCgjB,CACT,EAAErG,EAAkB,EAEhBwG,GAAiB,SAAyBrO,EAAS,CACrD,KAAK,SAAWA,GAAW,KAC3B,KAAK,kBAAoB,EAC3B,EAEIsO,GAAqB,CAAE,sBAAuB,CAAE,aAAc,EAAM,EAAC,oBAAqB,CAAE,aAAc,EAAM,EAAC,4BAA6B,CAAE,aAAc,EAAM,CAAA,EACxKD,GAAe,UAAU,gBAAkB,SAA0BE,EAAkB,CACrF,KAAK,kBAAoBA,CAC3B,EACAF,GAAe,UAAU,KAAO,SAAevuB,EAAU0uB,EAAW,CAClE,GAAI1uB,IAAa,KAAQ,OAAO,KAChC,IAAImJ,EAAS,KAAK,aAAanJ,EAAU0uB,CAAS,EAClD,OAAI,KAAK,mBACPvlB,EAAO,YAAYnJ,EAAS,YAAa,CAAA,EAEpCmJ,CACT,EACAolB,GAAe,UAAU,aAAe,SAAuBvuB,EAAU0uB,EAAW,CAElF,OADI,KAAK,WAAa,OAAQ,KAAK,SAAW1uB,EAAS,WAAU,GAC7DA,aAAoB+nB,GACf,KAAK,uBAAuB/nB,EAAU0uB,CAAS,EAEpD1uB,aAAoB2sB,GACf,KAAK,YAAY3sB,EAAU0uB,CAAS,EAEzC1uB,aAAoBysB,GACfiC,EAAU,KAAK1uB,EAAU,KAAK,QAAQ,EAE3CA,aAAoB4pB,EACf8E,EAAU,KAAK1uB,EAAU,KAAK,QAAQ,GAE/C+Z,EAAO,qBAAqB,+BAAiC/Z,EAAS,SAAU,EAAC,QAAO,CAAE,EACnF,KACT,EACAuuB,GAAe,UAAU,uBAAyB,SAAiCtV,EAAYyV,EAAW,CAKxG,QAJMhW,EAAS,KAEXiW,EAAoBD,EAAU,KAAKzV,EAAY,KAAK,QAAQ,EAC5D1X,EAAa,IAAIqgB,EACZld,EAAI,EAAGA,EAAIiqB,EAAkB,iBAAgB,EAAIjqB,IAAK,CAC7D,IAAI1E,EAAW0Y,EAAO,KAAKiW,EAAkB,aAAajqB,CAAC,EAAGgqB,CAAS,EACnE1uB,IAAa,MAAQA,EAAS,QAAO,GAGzCuB,EAAW,IAAIvB,CAAQ,CACxB,CACD,OAAI2uB,EAAkB,SAAU,IAAKX,GAC5B,KAAK,SAAS,iBAAiBzsB,EAAW,QAAQ,CAAA,CAAE,CAAC,EAE1DotB,EAAkB,SAAU,IAAKzF,GAC5B,KAAK,SAAS,sBAAsB3nB,EAAW,QAAQ,CAAA,CAAE,CAAC,EAE/DotB,EAAkB,SAAU,IAAKP,GAC5B,KAAK,SAAS,mBAAmB7sB,EAAW,QAAQ,CAAA,CAAE,CAAC,EAEzD,KAAK,SAAS,yBAAyBA,EAAW,QAAQ,CAAA,CAAE,CAAC,CACtE,EACAgtB,GAAe,UAAU,YAAc,SAAsBjuB,EAASouB,EAAW,CAC7E,IAAIhW,EAAS,KAEXkW,EAAaF,EAAU,KAAKpuB,EAAS,KAAK,QAAQ,EAEtD,GADIsuB,IAAe,OAAQA,EAAa,KAAK,SAAS,cAAc,IAAI,GACpEA,EAAW,UACb,OAAOA,EAET,IAAIrV,EAAQ,KAAK,KAAKqV,EAAW,gBAAe,EAAIF,CAAS,EAC7D,GAAInV,IAAU,MAAQA,EAAM,QAAO,EACjC,OAAO,KAAK,SAAS,cAAe,EAGtC,QADIC,EAAQ,IAAIoI,EACPld,EAAI,EAAGA,EAAIkqB,EAAW,mBAAkB,EAAIlqB,IAAK,CACxD,IAAImqB,EAAOnW,EAAO,KAAKkW,EAAW,iBAAiBlqB,CAAC,EAAGgqB,CAAS,EAC5DG,IAAS,MAAQA,EAAK,QAAO,GAGjCrV,EAAM,IAAIqV,CAAI,CACf,CACD,OAAO,KAAK,SAAS,cAActV,EAAOC,EAAM,QAAQ,CAAA,CAAE,CAAC,CAC7D,EACA+U,GAAe,UAAU,YAAc,UAAwB,CAC7D,MAAO,CAAE,CACX,EACAA,GAAe,UAAU,SAAW,UAAqB,CACvD,OAAOA,EACT,EACAA,GAAe,wBAA0B,UAAoC,GAC7EC,GAAmB,sBAAsB,IAAM,UAAY,CAAE,OAAOM,EAAqB,EACzFN,GAAmB,oBAAoB,IAAM,UAAY,CAAE,OAAOO,EAAmB,EACrFP,GAAmB,4BAA4B,IAAM,UAAY,CAAE,OAAOQ,EAA2B,EAErG,OAAO,iBAAkBT,GAAgBC,IAEzC,IAAIM,GAAwB,UAAkC,GAE9DA,GAAsB,UAAU,KAAO,SAAe9uB,EAAUkgB,EAAS,CACvE,OAAOlgB,CACT,EACA8uB,GAAsB,UAAU,YAAc,UAAwB,CACpE,MAAO,CAACP,GAAe,uBAAuB,CAChD,EACAO,GAAsB,UAAU,SAAW,UAAqB,CAC9D,OAAOA,EACT,EAEA,IAAIC,GAAsB,UAAgC,GAE1DA,GAAoB,UAAU,KAAO,SAAe/uB,EAAUkgB,EAAS,CACrE,IAAIrf,EAAS,KAAK,gBAAgBb,EAAS,eAAc,EAAIA,CAAQ,EACrE,OAAIa,IAAW,KAAeb,EAC1BA,aAAoBiuB,GACf/N,EAAQ,iBAAiBrf,CAAM,EAEpCb,aAAoB4pB,EACf1J,EAAQ,iBAAiBrf,CAAM,EAEpCb,aAAoBysB,GAClB5rB,EAAO,OAAS,EACXqf,EAAQ,YAAYrf,EAAO,CAAC,CAAC,EAE7Bqf,EAAQ,YAAa,EAGzBlgB,CACT,EACA+uB,GAAoB,UAAU,YAAc,UAAwB,CAClE,MAAO,CAACR,GAAe,uBAAuB,CAChD,EACAQ,GAAoB,UAAU,SAAW,UAAqB,CAC5D,OAAOA,EACT,EAEA,IAAIC,GAA8B,UAAwC,GAE1EA,GAA4B,UAAU,KAAO,SAAehvB,EAAUkgB,EAAS,CAC7E,OAAIlgB,aAAoBiuB,GACf/N,EAAQ,iBAAiB,KAAK,KAAKlgB,EAAS,sBAAqB,EAAIA,CAAQ,CAAC,EAEnFA,aAAoB4pB,EACf1J,EAAQ,iBAAiB,KAAK,KAAKlgB,EAAS,sBAAqB,EAAIA,CAAQ,CAAC,EAEnFA,aAAoBysB,GACfvM,EAAQ,YAAY,KAAK,KAAKlgB,EAAS,sBAAqB,EAAIA,CAAQ,CAAC,EAE3EA,CACT,EACAgvB,GAA4B,UAAU,YAAc,UAAwB,CAC1E,MAAO,CAACT,GAAe,uBAAuB,CAChD,EACAS,GAA4B,UAAU,SAAW,UAAqB,CACpE,OAAOA,EACT,EAEA,IAAIC,EAA0B,UAAoC,CAChE,IAAIvW,EAAS,KAIb,GAFA,KAAK,WAAa,EAClB,KAAK,aAAe,KAChB,UAAU,SAAW,GACvB,GAAI,UAAU,CAAC,YAAa,MAC1B,KAAK,aAAe,UAAU,CAAC,EAC/B,KAAK,WAAa,UACT,OAAO,UAAU,UAAU,CAAC,CAAC,EAAG,CACzC,IAAI6K,EAAO,UAAU,CAAC,EACtB,KAAK,aAAe,IAAI,MAAMA,CAAI,EAAE,KAAK,IAAI,EAC7C,QAAS7e,EAAI,EAAGA,EAAI6e,EAAM7e,IACxBgU,EAAO,aAAahU,CAAC,EAAI,IAAIwG,CAEhC,SAAU0B,EAAa,UAAU,CAAC,EAAGkI,CAAkB,EAAG,CACzD,IAAIoa,EAAW,UAAU,CAAC,EAC1B,GAAIA,IAAa,KACf,YAAK,aAAe,IAAI,MAAM,CAAC,EAAE,KAAK,IAAI,EACnC,KAET,KAAK,WAAaA,EAAS,eAC3B,KAAK,aAAe,IAAI,MAAMA,EAAS,MAAM,EAAE,KAAK,IAAI,EACxD,QAAS5Q,EAAM,EAAGA,EAAM,KAAK,aAAa,OAAQA,IAChD5F,EAAO,aAAa4F,CAAG,EAAI4Q,EAAS,kBAAkB5Q,CAAG,CAE5D,UACQ,UAAU,SAAW,GAC9B,GAAI,UAAU,CAAC,YAAa,OAAS,OAAO,UAAU,UAAU,CAAC,CAAC,EAAG,CACnE,IAAIpe,EAAc,UAAU,CAAC,EACzBkoB,EAAY,UAAU,CAAC,EAC3B,KAAK,aAAeloB,EACpB,KAAK,WAAakoB,EACdloB,IAAgB,OAAQ,KAAK,aAAe,IAAI,MAAM,CAAC,EAAE,KAAK,IAAI,EACvE,SAAU,OAAO,UAAU,UAAU,CAAC,CAAC,GAAK,OAAO,UAAU,UAAU,CAAC,CAAC,EAAG,CAC3E,IAAIivB,EAAS,UAAU,CAAC,EACpBC,EAAc,UAAU,CAAC,EAC7B,KAAK,aAAe,IAAI,MAAMD,CAAM,EAAE,KAAK,IAAI,EAC/C,KAAK,WAAaC,EAClB,QAASjM,EAAM,EAAGA,EAAMgM,EAAQhM,IAC9BzK,EAAO,aAAayK,CAAG,EAAI,IAAIjY,CAElC,EAEL,EAEImkB,GAAqB,CAAE,iBAAkB,CAAE,aAAc,EAAM,CAAA,EACnEJ,EAAwB,UAAU,YAAc,SAAsBxhB,EAAOpC,EAAetB,EAAO,CACjG,OAAQsB,EAAa,CACnB,KAAKyJ,EAAmB,EACtB,KAAK,aAAarH,CAAK,EAAE,EAAI1D,EAC7B,MACF,KAAK+K,EAAmB,EACtB,KAAK,aAAarH,CAAK,EAAE,EAAI1D,EAC7B,MACF,KAAK+K,EAAmB,EACtB,KAAK,aAAarH,CAAK,EAAE,EAAI1D,EAC7B,MACF,QACE,MAAM,IAAIS,EAAyB,uBAAuB,CAC7D,CACH,EACAykB,EAAwB,UAAU,KAAO,UAAiB,CACxD,OAAO,KAAK,aAAa,MAC3B,EACAA,EAAwB,UAAU,YAAc,SAAsBxhB,EAAOpC,EAAe,CAC1F,OAAQA,EAAa,CACnB,KAAKyJ,EAAmB,EACtB,OAAO,KAAK,aAAarH,CAAK,EAAE,EAClC,KAAKqH,EAAmB,EACtB,OAAO,KAAK,aAAarH,CAAK,EAAE,EAClC,KAAKqH,EAAmB,EACtB,OAAO,KAAK,aAAarH,CAAK,EAAE,CAEnC,CACD,OAAO9C,EAAO,GAChB,EACAskB,EAAwB,UAAU,cAAgB,UAA0B,CAC1E,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAIvqB,EAAI,UAAU,CAAC,EACnB,OAAO,KAAK,aAAaA,CAAC,CAC9B,SAAa,UAAU,SAAW,EAAG,CACjC,IAAI+I,EAAQ,UAAU,CAAC,EACnBjK,EAAQ,UAAU,CAAC,EACvBA,EAAM,EAAI,KAAK,aAAaiK,CAAK,EAAE,EACnCjK,EAAM,EAAI,KAAK,aAAaiK,CAAK,EAAE,EACnCjK,EAAM,EAAI,KAAK,aAAaiK,CAAK,EAAE,CACpC,CACH,EACAwhB,EAAwB,UAAU,kBAAoB,SAA4BvqB,EAAG,CACnF,OAAO,IAAIwG,EAAW,KAAK,aAAaxG,CAAC,CAAC,CAC5C,EACAuqB,EAAwB,UAAU,aAAe,UAAyB,CACxE,OAAO,KAAK,UACd,EACAA,EAAwB,UAAU,KAAO,SAAexhB,EAAO,CAC7D,OAAO,KAAK,aAAaA,CAAK,EAAE,CAClC,EACAwhB,EAAwB,UAAU,MAAQ,UAAkB,CAI1D,QAHMvW,EAAS,KAEX4W,EAAmB,IAAI,MAAM,KAAK,KAAI,CAAE,EAAE,KAAK,IAAI,EAC9C5qB,EAAI,EAAGA,EAAI,KAAK,aAAa,OAAQA,IAC5C4qB,EAAiB5qB,CAAC,EAAIgU,EAAO,aAAahU,CAAC,EAAE,QAE/C,OAAO,IAAIuqB,EAAwBK,EAAkB,KAAK,UAAU,CACtE,EACAL,EAAwB,UAAU,eAAiB,SAAyBja,EAAK,CAG/E,QAFM0D,EAAS,KAENhU,EAAI,EAAGA,EAAI,KAAK,aAAa,OAAQA,IAC5CsQ,EAAI,gBAAgB0D,EAAO,aAAahU,CAAC,CAAC,EAE5C,OAAOsQ,CACT,EACAia,EAAwB,UAAU,KAAO,UAAiB,CAIxD,QAHMvW,EAAS,KAEX4W,EAAmB,IAAI,MAAM,KAAK,KAAI,CAAE,EAAE,KAAK,IAAI,EAC9C5qB,EAAI,EAAGA,EAAI,KAAK,aAAa,OAAQA,IAC5C4qB,EAAiB5qB,CAAC,EAAIgU,EAAO,aAAahU,CAAC,EAAE,OAE/C,OAAO,IAAIuqB,EAAwBK,EAAkB,KAAK,UAAU,CACtE,EACAL,EAAwB,UAAU,SAAW,UAAqB,CAC9D,IAAIvW,EAAS,KAEf,GAAI,KAAK,aAAa,OAAS,EAAG,CAChC,IAAI6W,EAAS,IAAI1hB,GAAa,GAAK,KAAK,aAAa,MAAM,EAC3D0hB,EAAO,OAAO,GAAG,EACjBA,EAAO,OAAO,KAAK,aAAa,CAAC,CAAC,EAClC,QAAS7qB,EAAI,EAAGA,EAAI,KAAK,aAAa,OAAQA,IAC5C6qB,EAAO,OAAO,IAAI,EAClBA,EAAO,OAAO7W,EAAO,aAAahU,CAAC,CAAC,EAEtC,OAAA6qB,EAAO,OAAO,GAAG,EACVA,EAAO,SAAU,CAC5B,KACI,OAAO,IAEX,EACAN,EAAwB,UAAU,KAAO,SAAexhB,EAAO,CAC7D,OAAO,KAAK,aAAaA,CAAK,EAAE,CAClC,EACAwhB,EAAwB,UAAU,kBAAoB,UAA8B,CAClF,OAAO,KAAK,YACd,EACAA,EAAwB,UAAU,YAAc,UAAwB,CACtE,MAAO,CAACna,EAAoB7J,EAAY,CAC1C,EACAgkB,EAAwB,UAAU,SAAW,UAAqB,CAChE,OAAOA,CACT,EACAI,GAAmB,iBAAiB,IAAM,UAAY,CAAE,MAAO,kBAAmB,EAElF,OAAO,iBAAkBJ,EAAyBI,IAElD,IAAIG,GAAiC,UAA2C,GAE5EC,GAAqB,CAAE,iBAAkB,CAAE,aAAc,IAAO,eAAgB,CAAE,aAAc,EAAI,GAExGD,GAA+B,UAAU,YAAc,UAAwB,CAC7E,OAAOA,GAA+B,SAAU,CAClD,EACAA,GAA+B,UAAU,OAAS,UAAmB,CACnE,GAAI,UAAU,SAAW,GACvB,GAAI,UAAU,CAAC,YAAa,MAAO,CACjC,IAAItvB,EAAc,UAAU,CAAC,EAC7B,OAAO,IAAI+uB,EAAwB/uB,CAAW,CAC/C,SAAU0M,EAAa,UAAU,CAAC,EAAGkI,CAAkB,EAAG,CACzD,IAAIoa,EAAW,UAAU,CAAC,EAC1B,OAAO,IAAID,EAAwBC,CAAQ,CAC5C,UACQ,UAAU,SAAW,EAAG,CACjC,IAAI3L,EAAO,UAAU,CAAC,EAClB6E,EAAY,UAAU,CAAC,EAE3B,OADIA,EAAY,IAAKA,EAAY,GAC7BA,EAAY,EAAY,IAAI6G,EAAwB1L,CAAI,EACrD,IAAI0L,EAAwB1L,EAAM6E,CAAS,CACnD,CACH,EACAoH,GAA+B,UAAU,YAAc,UAAwB,CAC7E,MAAO,CAAChjB,GAA2BvB,EAAY,CACjD,EACAukB,GAA+B,UAAU,SAAW,UAAqB,CACvE,OAAOA,EACT,EACAA,GAA+B,SAAW,UAAqB,CAC7D,OAAOA,GAA+B,cACxC,EAEAC,GAAmB,iBAAiB,IAAM,UAAY,CAAE,MAAO,mBAAoB,EACnFA,GAAmB,eAAe,IAAM,UAAY,CAAE,OAAO,IAAID,EAAgC,EAEjG,OAAO,iBAAkBA,GAAgCC,IASzD,IAAIC,GAAW,SAAUC,EAAc,CACrC,SAASD,GAAW,CAClBC,EAAa,KAAK,IAAI,EACtB,KAAK,KAAO,IAAI,GACjB,CAED,OAAKA,IAAeD,EAAQ,UAAYC,GACxCD,EAAQ,UAAY,OAAO,OAAQC,GAAgBA,EAAa,WAChED,EAAQ,UAAU,YAAcA,EAIhCA,EAAQ,UAAU,IAAM,SAAcrrB,EAAK,CACzC,OAAO,KAAK,KAAK,IAAIA,CAAG,GAAK,IACjC,EAKEqrB,EAAQ,UAAU,IAAM,SAAcrrB,EAAK0F,EAAO,CAChD,YAAK,KAAK,IAAI1F,EAAK0F,CAAK,EACjBA,CACX,EAKE2lB,EAAQ,UAAU,OAAS,UAAmB,CAI5C,QAHIvN,EAAY,IAAIP,EAChBkI,EAAK,KAAK,KAAK,OAAM,EACrB,EAAIA,EAAG,OACJ,CAAC,EAAE,MACR3H,EAAU,IAAI,EAAE,KAAK,EACrB,EAAI2H,EAAG,OAET,OAAO3H,CACX,EAKEuN,EAAQ,UAAU,SAAW,UAAqB,CAChD,IAAIrJ,EAAU,IAAIH,GAClB,YAAK,KAAK,QAAS,EAAC,QAAQ,SAAU6D,EAAO,CAAE,OAAO1D,EAAQ,IAAI0D,CAAK,CAAI,CAAA,EACpE1D,CACX,EAKEqJ,EAAQ,UAAU,KAAO,UAAiB,CACxC,OAAO,KAAK,KAAK,KAAM,CAC3B,EAESA,CACT,EAAE7J,EAAK,EAEH+J,EAAiB,SAASA,GAAkB,CAG9C,GAFA,KAAK,WAAa,KAClB,KAAK,OAAS,KACV,UAAU,SAAW,EACvB,KAAK,WAAaA,EAAe,iBACxB,UAAU,SAAW,GAC9B,GAAI,UAAU,CAAC,YAAaC,GAAM,CAChC,IAAIC,EAAY,UAAU,CAAC,EAC3B,KAAK,WAAaA,EACdA,IAAcF,EAAe,OAC/B,KAAK,SAAS,CAAG,CAEpB,SAAU,OAAO,UAAU,CAAC,GAAM,SAAU,CAC3C,IAAIlhB,EAAQ,UAAU,CAAC,EACvB,KAAK,WAAakhB,EAAe,MACjC,KAAK,SAASlhB,CAAK,CACpB,SAAU,UAAU,CAAC,YAAakhB,EAAgB,CACjD,IAAIG,EAAK,UAAU,CAAC,EACpB,KAAK,WAAaA,EAAG,WACrB,KAAK,OAASA,EAAG,MAClB,EAEL,EAEIC,GAAqB,CAAE,iBAAkB,CAAE,aAAc,IAAO,oBAAqB,CAAE,aAAc,EAAI,GAC7GJ,EAAe,UAAU,OAAS,SAAiBtkB,EAAO,CACxD,GAAI,EAAEA,aAAiBskB,GACrB,MAAO,GAET,IAAIK,EAAsB3kB,EAC1B,OAAO,KAAK,aAAe2kB,EAAoB,YAAc,KAAK,SAAWA,EAAoB,MACnG,EACAL,EAAe,UAAU,UAAY,SAAoBrkB,EAAG,CAC1D,IAAID,EAAQC,EACRiG,EAAY,KAAK,8BACjB0e,EAAiB5kB,EAAM,8BAC3B,OAAO,IAAI0C,GAAQwD,CAAS,EAAE,UAAU,IAAIxD,GAAQkiB,CAAc,CAAC,CACrE,EACAN,EAAe,UAAU,SAAW,UAAqB,CACvD,OAAO,KAAK,MACd,EACAA,EAAe,UAAU,WAAa,UAAuB,CAC3D,OAAO,KAAK,aAAeA,EAAe,UAAY,KAAK,aAAeA,EAAe,eAC3F,EACAA,EAAe,UAAU,QAAU,UAAoB,CACrD,OAAO,KAAK,UACd,EACAA,EAAe,UAAU,SAAW,UAAqB,CACvD,IAAIO,EAAc,UAClB,OAAI,KAAK,aAAeP,EAAe,SACrCO,EAAc,WACL,KAAK,aAAeP,EAAe,gBAC5CO,EAAc,kBACL,KAAK,aAAeP,EAAe,QAC5CO,EAAc,gBAAkB,KAAK,SAAQ,EAAK,KAE7CA,CACT,EACAP,EAAe,UAAU,YAAc,UAAwB,CAC7D,GAAI,OAAO,UAAU,CAAC,GAAM,SAAU,CACpC,IAAIzlB,EAAM,UAAU,CAAC,EACrB,GAAIQ,EAAO,MAAMR,CAAG,EAAK,OAAOA,EAChC,GAAI,KAAK,aAAeylB,EAAe,gBAAiB,CACtD,IAAIQ,EAAiBjmB,EACrB,OAAOimB,CACR,CACD,OAAI,KAAK,aAAeR,EAAe,MAC9B,KAAK,MAAMzlB,EAAM,KAAK,MAAM,EAAI,KAAK,OAEvCA,CACR,SAAU,UAAU,CAAC,YAAae,EAAY,CAC7C,IAAI1H,EAAQ,UAAU,CAAC,EACvB,GAAI,KAAK,aAAeosB,EAAe,SAAY,OAAO,KAC1DpsB,EAAM,EAAI,KAAK,YAAYA,EAAM,CAAC,EAClCA,EAAM,EAAI,KAAK,YAAYA,EAAM,CAAC,CACnC,CACH,EACAosB,EAAe,UAAU,4BAA8B,UAAwC,CAC7F,IAAIS,EAAe,GACnB,OAAI,KAAK,aAAeT,EAAe,SACrCS,EAAe,GACN,KAAK,aAAeT,EAAe,gBAC5CS,EAAe,EACN,KAAK,aAAeT,EAAe,QAC5CS,EAAe,EAAI,KAAK,MAAM,KAAK,KAAK,KAAK,IAAI,KAAK,SAAU,CAAA,EAAI,KAAK,IAAI,EAAE,CAAC,CAAC,GAE5EA,CACT,EACAT,EAAe,UAAU,SAAW,SAAmBlhB,EAAO,CAC5D,KAAK,OAAS,KAAK,IAAIA,CAAK,CAC9B,EACAkhB,EAAe,UAAU,YAAc,UAAwB,CAC7D,MAAO,CAAC3kB,GAAcH,EAAU,CAClC,EACA8kB,EAAe,UAAU,SAAW,UAAqB,CACvD,OAAOA,CACT,EACAA,EAAe,YAAc,SAAsBU,EAAKC,EAAK,CAC3D,OAAID,EAAI,UAAUC,CAAG,GAAK,EAAYD,EAC/BC,CACT,EACAP,GAAmB,iBAAiB,IAAM,UAAY,CAAE,MAAO,mBAAmB,EAClFA,GAAmB,oBAAoB,IAAM,UAAY,CAAE,MAAO,iBAAkB,EAEpF,OAAO,iBAAkBJ,EAAgBI,IAEzC,IAAIH,GAAO,SAASA,EAAMpa,EAAM,CAC9B,KAAK,MAAQA,GAAQ,KACrBoa,EAAK,cAAc,IAAIpa,EAAM,IAAI,CACnC,EAEI+a,GAAsB,CAAE,iBAAkB,CAAE,aAAc,IAAO,cAAe,CAAE,aAAc,EAAI,GACxGX,GAAK,UAAU,YAAc,UAAwB,CACnD,OAAOA,GAAK,cAAc,IAAI,KAAK,KAAK,CAC1C,EACAA,GAAK,UAAU,SAAW,UAAqB,CAC7C,OAAO,KAAK,KACd,EACAA,GAAK,UAAU,YAAc,UAAwB,CACnD,MAAO,CAAC5kB,EAAY,CACtB,EACA4kB,GAAK,UAAU,SAAW,UAAqB,CAC7C,OAAOA,EACT,EACAW,GAAoB,iBAAiB,IAAM,UAAY,CAAE,MAAO,kBAAoB,EACpFA,GAAoB,cAAc,IAAM,UAAY,CAAE,OAAO,IAAId,EAAS,EAE1E,OAAO,iBAAkBG,GAAMW,IAE/BZ,EAAe,KAAOC,GACtBD,EAAe,MAAQ,IAAIC,GAAK,OAAO,EACvCD,EAAe,SAAW,IAAIC,GAAK,UAAU,EAC7CD,EAAe,gBAAkB,IAAIC,GAAK,iBAAiB,EAE3D,IAAI7X,EAAkB,SAASA,GAAmB,CAChD,KAAK,gBAAkB,IAAI4X,EAC3B,KAAK,MAAQ,EACb,KAAK,2BAA6B5X,EAAgB,sCAE9C,UAAU,SAAW,IACd,UAAU,SAAW,EAC1BpL,EAAa,UAAU,CAAC,EAAGJ,EAAyB,EACtD,KAAK,2BAA6B,UAAU,CAAC,EACpC,UAAU,CAAC,YAAaojB,IACjC,KAAK,gBAAkB,UAAU,CAAC,GAE3B,UAAU,SAAW,GAC9B,KAAK,gBAAkB,UAAU,CAAC,EAClC,KAAK,MAAQ,UAAU,CAAC,GACf,UAAU,SAAW,IAC9B,KAAK,gBAAkB,UAAU,CAAC,EAClC,KAAK,MAAQ,UAAU,CAAC,EACxB,KAAK,2BAA6B,UAAU,CAAC,GAEjD,EAEIa,GAAoB,CAAE,iBAAkB,CAAE,aAAc,EAAM,CAAA,EAClEzY,EAAgB,UAAU,WAAa,SAAqBiQ,EAAU,CACpE,OAAIA,EAAS,SACJ,KAAK,YAAY,IAAI,EAE1BA,EAAS,YAAcA,EAAS,QAAO,GAAMA,EAAS,QAAS,IAAKA,EAAS,UACxE,KAAK,YAAY,IAAI/c,EAAW+c,EAAS,UAAWA,EAAS,QAAO,CAAE,CAAC,EAE5EA,EAAS,YAAcA,EAAS,QAAO,GAAMA,EAAS,QAAS,IAAKA,EAAS,UACxE,KAAK,iBAAiB,CAAC,IAAI/c,EAAW+c,EAAS,QAAS,EAAEA,EAAS,QAAS,CAAA,EAAG,IAAI/c,EAAW+c,EAAS,QAAS,EAAEA,EAAS,QAAS,CAAA,CAAC,CAAC,EAExI,KAAK,cAAc,KAAK,iBAAiB,CAAC,IAAI/c,EAAW+c,EAAS,UAAWA,EAAS,SAAS,EAAG,IAAI/c,EAAW+c,EAAS,QAAS,EAAEA,EAAS,SAAS,EAAG,IAAI/c,EAAW+c,EAAS,QAAS,EAAEA,EAAS,SAAS,EAAG,IAAI/c,EAAW+c,EAAS,QAAS,EAAEA,EAAS,QAAS,CAAA,EAAG,IAAI/c,EAAW+c,EAAS,QAAS,EAAEA,EAAS,QAAS,CAAA,CAAC,CAAC,EAAG,IAAI,CACjV,EACAjQ,EAAgB,UAAU,iBAAmB,SAA2B9X,EAAa,CACnF,GAAKA,EACA,IAAIA,aAAuB,MAAS,OAAO,IAAI0pB,EAAW,KAAK,6BAA4B,EAAG,OAAO1pB,CAAW,EAAG,IAAI,EACvH,GAAI0M,EAAa1M,EAAa4U,CAAkB,EAAK,OAAO,IAAI8U,EAAW1pB,EAAa,IAAI,MAF7E,QAAO,IAAI0pB,EAAW,KAAK,6BAA4B,EAAG,OAAO,EAAE,EAAG,IAAI,CAGhG,EACA5R,EAAgB,UAAU,sBAAwB,UAAkC,CAClF,GAAI,UAAU,SAAW,EACvB,OAAO,IAAIkR,GAAgB,KAAM,IAAI,EAChC,GAAI,UAAU,SAAW,EAAG,CACjC,IAAI/nB,EAAc,UAAU,CAAC,EAC7B,OAAO,IAAI+nB,GAAgB/nB,EAAa,IAAI,CAC7C,CACH,EACA6W,EAAgB,UAAU,cAAgB,SAAwB0Y,EAAU,CAI1E,QAHIC,EAAY,KACZC,EAAkB,GAClBC,EAAwB,GACnBnsB,EAAIgsB,EAAS,SAAQ,EAAIhsB,EAAE,WAAY,CAC9C,IAAI9E,EAAO8E,EAAE,OACTosB,EAAYlxB,EAAK,WACjB+wB,IAAc,OAChBA,EAAYG,GAEVA,IAAcH,IAChBC,EAAkB,IAEhBhxB,EAAK,8BAA6B,IAAMixB,EAAwB,GACrE,CACD,GAAIF,IAAc,KAChB,OAAO,KAAK,yBAA0B,EAExC,GAAIC,GAAmBC,EACrB,OAAO,KAAK,yBAAyB7Y,EAAgB,gBAAgB0Y,CAAQ,CAAC,EAEhF,IAAIK,EAAQL,EAAS,SAAU,EAAC,KAAI,EAChCM,EAAeN,EAAS,KAAI,EAAK,EACrC,GAAIM,EAAc,CAChB,GAAID,aAAiBpE,GACnB,OAAO,KAAK,mBAAmB3U,EAAgB,eAAe0Y,CAAQ,CAAC,EAClE,GAAIK,aAAiBnH,EAC1B,OAAO,KAAK,sBAAsB5R,EAAgB,kBAAkB0Y,CAAQ,CAAC,EACxE,GAAIK,aAAiBtE,GAC1B,OAAO,KAAK,iBAAiBzU,EAAgB,aAAa0Y,CAAQ,CAAC,EAErE3W,EAAO,qBAAqB,oBAAsBgX,EAAM,SAAU,EAAC,QAAO,CAAE,CAC7E,CACD,OAAOA,CACT,EACA/Y,EAAgB,UAAU,2BAA6B,SAAqC9X,EAAa,CACvG,OAAO,KAAK,iBAAiBA,IAAgB,KAAO,KAAK,6BAA4B,EAAG,OAAOA,CAAW,EAAI,IAAI,CACpH,EACA8X,EAAgB,UAAU,YAAc,UAAwB,CAC9D,GAAI,UAAU,SAAW,EACvB,OAAO,KAAK,YAAY,KAAK,6BAA4B,EAAG,OAAO,CAAA,CAAE,CAAC,EACjE,GAAI,UAAU,SAAW,GAC9B,GAAI,UAAU,CAAC,YAAa9M,EAAY,CACtC,IAAIjD,EAAa,UAAU,CAAC,EAC5B,OAAO,KAAK,YAAYA,IAAe,KAAO,KAAK,6BAA8B,EAAC,OAAO,CAACA,CAAU,CAAC,EAAI,IAAI,CAC9G,SAAU2E,EAAa,UAAU,CAAC,EAAGkI,CAAkB,EAAG,CACzD,IAAI5U,EAAc,UAAU,CAAC,EAC7B,OAAO,IAAIusB,GAAMvsB,EAAa,IAAI,CACnC,EAEL,EACA8X,EAAgB,UAAU,6BAA+B,UAAyC,CAChG,OAAO,KAAK,0BACd,EACAA,EAAgB,UAAU,cAAgB,UAA0B,CAClE,GAAI,UAAU,SAAW,EACvB,OAAO,IAAI2U,GAAQ,KAAM,KAAM,IAAI,EAC9B,GAAI,UAAU,SAAW,GAC9B,GAAI/f,EAAa,UAAU,CAAC,EAAGkI,CAAkB,EAAG,CAClD,IAAI5U,EAAc,UAAU,CAAC,EAC7B,OAAO,KAAK,cAAc,KAAK,iBAAiBA,CAAW,CAAC,CAC7D,SAAU,UAAU,CAAC,YAAa,MAAO,CACxC,IAAI+wB,EAAgB,UAAU,CAAC,EAC/B,OAAO,KAAK,cAAc,KAAK,iBAAiBA,CAAa,CAAC,CAC/D,SAAU,UAAU,CAAC,YAAahD,GAAY,CAC7C,IAAI1U,EAAQ,UAAU,CAAC,EACvB,OAAO,KAAK,cAAcA,EAAO,IAAI,CACtC,UACQ,UAAU,SAAW,EAAG,CACjC,IAAI2X,EAAU,UAAU,CAAC,EACrB1X,EAAQ,UAAU,CAAC,EACvB,OAAO,IAAImT,GAAQuE,EAAS1X,EAAO,IAAI,CACxC,CACH,EACAxB,EAAgB,UAAU,QAAU,UAAoB,CACtD,OAAO,KAAK,KACd,EACAA,EAAgB,UAAU,yBAA2B,UAAqC,CACxF,GAAI,UAAU,SAAW,EACvB,OAAO,IAAI+P,GAAmB,KAAM,IAAI,EACnC,GAAI,UAAU,SAAW,EAAG,CACjC,IAAIxmB,EAAa,UAAU,CAAC,EAC5B,OAAO,IAAIwmB,GAAmBxmB,EAAY,IAAI,CAC/C,CACH,EACAyW,EAAgB,UAAU,eAAiB,SAAyBtQ,EAAG,CACrE,IAAIypB,EAAS,IAAI5C,GAAe,IAAI,EACpC,OAAO4C,EAAO,KAAKzpB,EAAG,CACpB,KAAM,UAAY,CAChB,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAIwnB,EAAW,UAAU,CAAC,EAE1B,OAAO,KAAK,2BAA2B,OAAOA,CAAQ,CACvD,CACF,CACL,CAAG,CACH,EACAlX,EAAgB,UAAU,kBAAoB,UAA8B,CAC1E,OAAO,KAAK,eACd,EACAA,EAAgB,UAAU,iBAAmB,UAA6B,CACxE,GAAI,UAAU,SAAW,EACvB,OAAO,KAAK,iBAAiB,KAAK,6BAA4B,EAAG,OAAO,CAAA,CAAE,CAAC,EACtE,GAAI,UAAU,SAAW,GAC9B,GAAI,UAAU,CAAC,YAAa,MAAO,CACjC,IAAI9X,EAAc,UAAU,CAAC,EAC7B,OAAO,KAAK,iBAAiBA,IAAgB,KAAO,KAAK,6BAA4B,EAAG,OAAOA,CAAW,EAAI,IAAI,CACnH,SAAU0M,EAAa,UAAU,CAAC,EAAGkI,CAAkB,EAAG,CACzD,IAAImc,EAAgB,UAAU,CAAC,EAC/B,OAAO,IAAIhD,GAAWgD,EAAe,IAAI,CAC1C,EAEL,EACAjZ,EAAgB,UAAU,mBAAqB,UAA+B,CAC5E,GAAI,UAAU,SAAW,EACvB,OAAO,IAAIoW,GAAa,KAAM,IAAI,EAC7B,GAAI,UAAU,SAAW,EAAG,CACjC,IAAIltB,EAAW,UAAU,CAAC,EAC1B,OAAO,IAAIktB,GAAaltB,EAAU,IAAI,CACvC,CACH,EACA8W,EAAgB,UAAU,iBAAmB,UAA6B,CACtE,IAAIU,EAAS,KAEf,GAAI,UAAU,SAAW,EACvB,OAAO,IAAIsV,GAAW,KAAM,IAAI,EAC3B,GAAI,UAAU,SAAW,GAC9B,GAAI,UAAU,CAAC,YAAa,MAAO,CACjC,IAAI5tB,EAAQ,UAAU,CAAC,EACvB,OAAO,IAAI4tB,GAAW5tB,EAAO,IAAI,CAClC,SAAU,UAAU,CAAC,YAAa,MAAO,CACxC,IAAIF,EAAc,UAAU,CAAC,EAC7B,OAAO,KAAK,iBAAiBA,IAAgB,KAAO,KAAK,6BAA4B,EAAG,OAAOA,CAAW,EAAI,IAAI,CACnH,SAAU0M,EAAa,UAAU,CAAC,EAAGkI,CAAkB,EAAG,CACzD,IAAImc,EAAgB,UAAU,CAAC,EAC/B,GAAIA,IAAkB,KACpB,OAAO,KAAK,iBAAiB,IAAI,MAAM,CAAC,EAAE,KAAK,IAAI,CAAC,EAGtD,QADItwB,EAAS,IAAI,MAAMswB,EAAc,KAAI,CAAE,EAAE,KAAK,IAAI,EAC7CvsB,EAAI,EAAGA,EAAIusB,EAAc,KAAI,EAAIvsB,IAAK,CAC7C,IAAI0sB,EAAQ1Y,EAAO,6BAA8B,EAAC,OAAO,EAAGuY,EAAc,aAAY,CAAE,EACxFxF,GAAoB,KAAKwF,EAAevsB,EAAG0sB,EAAO,EAAG,CAAC,EACtDzwB,EAAO+D,CAAC,EAAIgU,EAAO,YAAY0Y,CAAK,CACrC,CACD,OAAO,KAAK,iBAAiBzwB,CAAM,CACpC,EAEL,EACAqX,EAAgB,UAAU,YAAc,UAAwB,CAC9D,MAAO,CAAC/M,EAAY,CACtB,EACA+M,EAAgB,UAAU,SAAW,UAAqB,CACxD,OAAOA,CACT,EACAA,EAAgB,oBAAsB,SAA8BqZ,EAAe,CACjF,IAAIC,EAAoB,IAAI,MAAMD,EAAc,KAAI,CAAE,EAAE,KAAK,IAAI,EACjE,OAAOA,EAAc,QAAQC,CAAiB,CAChD,EACAtZ,EAAgB,gBAAkB,SAA0BzW,EAAY,CACtE,GAAIA,IAAe,KAAQ,OAAO,KAClC,IAAIgwB,EAAgB,IAAI,MAAMhwB,EAAW,KAAI,CAAE,EAAE,KAAK,IAAI,EAC1D,OAAOA,EAAW,QAAQgwB,CAAa,CACzC,EACAvZ,EAAgB,oCAAsC,UAAgD,CACpG,OAAOwX,GAA+B,SAAU,CAClD,EACAxX,EAAgB,uBAAyB,SAAiCwZ,EAAkB,CAC1F,IAAIC,EAAuB,IAAI,MAAMD,EAAiB,KAAI,CAAE,EAAE,KAAK,IAAI,EACvE,OAAOA,EAAiB,QAAQC,CAAoB,CACtD,EACAzZ,EAAgB,kBAAoB,SAA4B7W,EAAa,CAC3E,IAAIuwB,EAAkB,IAAI,MAAMvwB,EAAY,KAAI,CAAE,EAAE,KAAK,IAAI,EAC7D,OAAOA,EAAY,QAAQuwB,CAAe,CAC5C,EACA1Z,EAAgB,kBAAoB,SAA4B2Z,EAAa,CAC3E,IAAIC,EAAkB,IAAI,MAAMD,EAAY,KAAI,CAAE,EAAE,KAAK,IAAI,EAC7D,OAAOA,EAAY,QAAQC,CAAe,CAC5C,EACA5Z,EAAgB,kBAAoB,SAA4B6Z,EAAa,CAC3E,IAAIC,EAAkB,IAAI,MAAMD,EAAY,KAAI,CAAE,EAAE,KAAK,IAAI,EAC7D,OAAOA,EAAY,QAAQC,CAAe,CAC5C,EACA9Z,EAAgB,aAAe,SAAuBrX,EAAQ,CAC5D,IAAIoxB,EAAa,IAAI,MAAMpxB,EAAO,KAAI,CAAE,EAAE,KAAK,IAAI,EACnD,OAAOA,EAAO,QAAQoxB,CAAU,CAClC,EACA/Z,EAAgB,eAAiB,SAAyB9W,EAAU,CAClE,IAAI8wB,EAAe,IAAI,MAAM9wB,EAAS,KAAI,CAAE,EAAE,KAAK,IAAI,EACvD,OAAOA,EAAS,QAAQ8wB,CAAY,CACtC,EACAha,EAAgB,6BAA+B,SAAuCxU,EAAOyuB,EAAU,CACrG,OAAAA,EAAS,kBAAiB,EAAG,YAAYzuB,CAAK,EACvCyuB,EAAS,aAAa,YAAYzuB,CAAK,CAChD,EACAitB,GAAkB,iBAAiB,IAAM,UAAY,CAAE,MAAO,mBAAoB,EAElF,OAAO,iBAAkBzY,EAAiByY,IAE1C,IAAIyB,GAAgB,CAAC,QAAS,aAAc,aAAc,kBAAmB,UAAW,cAAc,EAelGC,GAAgB,SAAwBpa,EAAiB,CAC3D,KAAK,gBAAkBA,GAAmB,IAAIC,CAChD,EASAma,GAAc,UAAU,KAAO,SAAeC,EAAM,CAClD,IAAItP,EACA,OAAOsP,GAAS,SAClBtP,EAAM,KAAK,MAAMsP,CAAI,EAErBtP,EAAMsP,EAGR,IAAInyB,EAAO6iB,EAAI,KAEf,GAAI,CAACuP,GAAMpyB,CAAI,EACb,MAAM,IAAI,MAAM,yBAA2B6iB,EAAI,IAAI,EAGrD,OAAIoP,GAAc,QAAQjyB,CAAI,IAAM,GAC3BoyB,GAAMpyB,CAAI,EAAE,MAAM,KAAM,CAAC6iB,EAAI,WAAW,CAAC,EACvC7iB,IAAS,qBACXoyB,GAAMpyB,CAAI,EAAE,MAAM,KAAM,CAAC6iB,EAAI,UAAU,CAAC,EAI1CuP,GAAMpyB,CAAI,EAAE,MAAM,KAAM,CAAC6iB,CAAG,CAAC,CACtC,EAUAqP,GAAc,UAAU,MAAQ,SAAgBnyB,EAAU,CACxD,IAAIC,EAAOD,EAAS,kBAEpB,GAAI,CAACsyB,GAAQryB,CAAI,EACf,MAAM,IAAI,MAAM,2BAA2B,EAG7C,OAAOqyB,GAAQryB,CAAI,EAAE,MAAM,KAAM,CAACD,CAAQ,CAAC,CAC7C,EAEA,IAAIqyB,GAAQ,CASV,QAAS,SAAUvP,EAAK,CACtB,IAAInjB,EAAU,CAAA,EAGd,QAAS0E,KAAOye,EACdnjB,EAAQ0E,CAAG,EAAIye,EAAIze,CAAG,EAIxB,GAAIye,EAAI,SAAU,CAChB,IAAI7iB,EAAO6iB,EAAI,SAAS,KACxB,GAAI,CAACuP,GAAMpyB,CAAI,EACb,MAAM,IAAI,MAAM,yBAA2B6iB,EAAI,IAAI,EAErDnjB,EAAQ,SAAW,KAAK,KAAKmjB,EAAI,QAAQ,CAC1C,CAGD,OAAIA,EAAI,OACNnjB,EAAQ,KAAO0yB,GAAM,KAAK,MAAM,KAAM,CAACvP,EAAI,IAAI,CAAC,GAG3CnjB,CACR,EAUD,kBAAmB,SAAUmjB,EAAK,CAChC,IAAIpK,EAAS,KAET9X,EAAoB,CAAA,EAExB,GAAIkiB,EAAI,SAAU,CAChBliB,EAAkB,SAAW,GAE7B,QAAS8D,EAAI,EAAGA,EAAIoe,EAAI,SAAS,OAAQ,EAAEpe,EACzC9D,EAAkB,SAAS,KAAK8X,EAAO,KAAKoK,EAAI,SAASpe,CAAC,CAAC,CAAC,CAE/D,CAED,OAAIoe,EAAI,OACNliB,EAAkB,KAAO,KAAK,MAAM,KAAK,MAAM,KAAM,CAACkiB,EAAI,IAAI,CAAC,GAG1DliB,CACR,EAUD,YAAa,SAAU+X,EAAO,CAE5B,QADIzY,EAAc,CAAA,EACTwE,EAAI,EAAGA,EAAIiU,EAAM,OAAQ,EAAEjU,EAAG,CACrC,IAAI6tB,EAAM5Z,EAAMjU,CAAC,EACjBxE,EAAY,KAAK,IAAIgL,EAAWqnB,EAAI,CAAC,EAAGA,EAAI,CAAC,CAAC,CAAC,CAChD,CACD,OAAOryB,CACR,EAUD,KAAM,SAAUyY,EAAO,CACrB,OAAO,KAAK,gBAAgB,iBAAiB,CAC3C,IAAIzN,EAAWyN,EAAM,CAAC,EAAGA,EAAM,CAAC,CAAC,EACjC,IAAIzN,EAAWyN,EAAM,CAAC,EAAGA,EAAM,CAAC,CAAC,EACjC,IAAIzN,EAAWyN,EAAM,CAAC,EAAGA,EAAM,CAAC,CAAC,EACjC,IAAIzN,EAAWyN,EAAM,CAAC,EAAGA,EAAM,CAAC,CAAC,EACjC,IAAIzN,EAAWyN,EAAM,CAAC,EAAGA,EAAM,CAAC,CAAC,CACvC,CAAK,CACF,EAUD,MAAO,SAAUA,EAAO,CACtB,IAAI1Q,EAAa,IAAIiD,EAAWyN,EAAM,CAAC,EAAGA,EAAM,CAAC,CAAC,EAClD,OAAO,KAAK,gBAAgB,YAAY1Q,CAAU,CACnD,EAUD,WAAY,SAAU0Q,EAAO,CAI3B,QAHID,EAAS,KAET/X,EAAS,CAAA,EACJ+D,EAAI,EAAGA,EAAIiU,EAAM,OAAQ,EAAEjU,EAClC/D,EAAO,KAAK0xB,GAAM,MAAM,MAAM3Z,EAAQ,CAACC,EAAMjU,CAAC,CAAC,CAAC,CAAC,EAEnD,OAAO,KAAK,gBAAgB,iBAAiB/D,CAAM,CACpD,EAUD,WAAY,SAAUgY,EAAO,CAC3B,IAAIzY,EAAcmyB,GAAM,YAAY,MAAM,KAAM,CAAC1Z,CAAK,CAAC,EACvD,OAAO,KAAK,gBAAgB,iBAAiBzY,CAAW,CACzD,EAUD,gBAAiB,SAAUyY,EAAO,CAIhC,QAHID,EAAS,KAETvX,EAAc,CAAA,EACTuD,EAAI,EAAGA,EAAIiU,EAAM,OAAQ,EAAEjU,EAClCvD,EAAY,KAAKkxB,GAAM,WAAW,MAAM3Z,EAAQ,CAACC,EAAMjU,CAAC,CAAC,CAAC,CAAC,EAE7D,OAAO,KAAK,gBAAgB,sBAAsBvD,CAAW,CAC9D,EAUD,QAAS,SAAUwX,EAAO,CAMxB,QALID,EAAS,KAETkU,EAAmByF,GAAM,YAAY,MAAM,KAAM,CAAC1Z,EAAM,CAAC,CAAC,CAAC,EAC3DY,EAAQ,KAAK,gBAAgB,iBAAiBqT,CAAgB,EAC9DpT,EAAQ,CAAA,EACH9U,EAAI,EAAGA,EAAIiU,EAAM,OAAQ,EAAEjU,EAAG,CACrC,IAAImqB,EAAOlW,EAAMjU,CAAC,EACdxE,EAAcmyB,GAAM,YAAY,MAAM3Z,EAAQ,CAACmW,CAAI,CAAC,EACpD2D,EAAa9Z,EAAO,gBAAgB,iBAAiBxY,CAAW,EACpEsZ,EAAM,KAAKgZ,CAAU,CACtB,CACD,OAAO,KAAK,gBAAgB,cAAcjZ,EAAOC,CAAK,CACvD,EAUD,aAAc,SAAUb,EAAO,CAI7B,QAHID,EAAS,KAETxX,EAAW,CAAA,EACNwD,EAAI,EAAGA,EAAIiU,EAAM,OAAQ,EAAEjU,EAAG,CACrC,IAAIpE,EAAUqY,EAAMjU,CAAC,EACrBxD,EAAS,KAAKmxB,GAAM,QAAQ,MAAM3Z,EAAQ,CAACpY,CAAO,CAAC,CAAC,CACrD,CACD,OAAO,KAAK,gBAAgB,mBAAmBY,CAAQ,CACxD,EAUD,mBAAoB,SAAUyX,EAAO,CAInC,QAHID,EAAS,KAETnX,EAAa,CAAA,EACRmD,EAAI,EAAGA,EAAIiU,EAAM,OAAQ,EAAEjU,EAAG,CACrC,IAAI1E,EAAW2Y,EAAMjU,CAAC,EACtBnD,EAAW,KAAKmX,EAAO,KAAK1Y,CAAQ,CAAC,CACtC,CACD,OAAO,KAAK,gBAAgB,yBAAyBuB,CAAU,CAChE,CACH,EAEI+wB,GAAU,CASZ,WAAY,SAAUrqB,EAAY,CAChC,MAAO,CAACA,EAAW,EAAGA,EAAW,CAAC,CACnC,EAUD,MAAO,SAAU7H,EAAO,CACtB,IAAIuY,EAAQ2Z,GAAQ,WAAW,MAAM,KAAM,CAAClyB,EAAM,cAAe,CAAA,CAAC,EAClE,MAAO,CACL,KAAM,QACN,YAAauY,CACd,CACF,EAUD,WAAY,SAAU8Z,EAAY,CAIhC,QAHI/Z,EAAS,KAETC,EAAQ,CAAA,EACHjU,EAAI,EAAGA,EAAI+tB,EAAW,YAAY,OAAQ,EAAE/tB,EAAG,CACtD,IAAItE,EAAQqyB,EAAW,YAAY/tB,CAAC,EAChCguB,EAAUJ,GAAQ,MAAM,MAAM5Z,EAAQ,CAACtY,CAAK,CAAC,EACjDuY,EAAM,KAAK+Z,EAAQ,WAAW,CAC/B,CACD,MAAO,CACL,KAAM,aACN,YAAa/Z,CACd,CACF,EAUD,WAAY,SAAUS,EAAY,CAKhC,QAJIV,EAAS,KAETC,EAAQ,CAAA,EACRzY,EAAckZ,EAAW,iBACpB,EAAI,EAAG,EAAIlZ,EAAY,OAAQ,EAAE,EAAG,CAC3C,IAAI+H,EAAa/H,EAAY,CAAC,EAC9ByY,EAAM,KAAK2Z,GAAQ,WAAW,MAAM5Z,EAAQ,CAACzQ,CAAU,CAAC,CAAC,CAC1D,CACD,MAAO,CACL,KAAM,aACN,YAAa0Q,CACd,CACF,EAUD,gBAAiB,SAAUga,EAAiB,CAI1C,QAHIja,EAAS,KAETC,EAAQ,CAAA,EACHjU,EAAI,EAAGA,EAAIiuB,EAAgB,YAAY,OAAQ,EAAEjuB,EAAG,CAC3D,IAAI0U,EAAauZ,EAAgB,YAAYjuB,CAAC,EAC1CguB,EAAUJ,GAAQ,WAAW,MAAM5Z,EAAQ,CAACU,CAAU,CAAC,EAC3DT,EAAM,KAAK+Z,EAAQ,WAAW,CAC/B,CACD,MAAO,CACL,KAAM,kBACN,YAAa/Z,CACd,CACF,EAUD,QAAS,SAAUrY,EAAS,CAC1B,IAAIoY,EAAS,KAETC,EAAQ,CAAA,EACRia,EAAeN,GAAQ,WAAW,MAAM,KAAM,CAAChyB,EAAQ,MAAM,CAAC,EAClEqY,EAAM,KAAKia,EAAa,WAAW,EACnC,QAAS,EAAI,EAAG,EAAItyB,EAAQ,OAAO,OAAQ,EAAE,EAAG,CAC9C,IAAIuuB,EAAOvuB,EAAQ,OAAO,CAAC,EACvBuyB,EAAcP,GAAQ,WAAW,MAAM5Z,EAAQ,CAACmW,CAAI,CAAC,EACzDlW,EAAM,KAAKka,EAAY,WAAW,CACnC,CACD,MAAO,CACL,KAAM,UACN,YAAala,CACd,CACF,EAUD,aAAc,SAAUma,EAAc,CAIpC,QAHIpa,EAAS,KAETC,EAAQ,CAAA,EACHjU,EAAI,EAAGA,EAAIouB,EAAa,YAAY,OAAQ,EAAEpuB,EAAG,CACxD,IAAIpE,EAAUwyB,EAAa,YAAYpuB,CAAC,EACpCguB,EAAUJ,GAAQ,QAAQ,MAAM5Z,EAAQ,CAACpY,CAAO,CAAC,EACrDqY,EAAM,KAAK+Z,EAAQ,WAAW,CAC/B,CACD,MAAO,CACL,KAAM,eACN,YAAa/Z,CACd,CACF,EAUD,mBAAoB,SAAUM,EAAY,CAIxC,QAHIP,EAAS,KAETC,EAAQ,CAAA,EACHjU,EAAI,EAAGA,EAAIuU,EAAW,YAAY,OAAQ,EAAEvU,EAAG,CACtD,IAAI1E,EAAWiZ,EAAW,YAAYvU,CAAC,EACnCzE,EAAOD,EAAS,kBACpB2Y,EAAM,KAAK2Z,GAAQryB,CAAI,EAAE,MAAMyY,EAAQ,CAAC1Y,CAAQ,CAAC,CAAC,CACnD,CACD,MAAO,CACL,KAAM,qBACN,WAAY2Y,CACb,CACF,CACH,EAeIoa,GAAgB,SAAwBhb,EAAiB,CAC3D,KAAK,gBAAkBA,GAAmB,IAAIC,EAC9C,KAAK,eAAiB,KAAK,gBAAgB,kBAAiB,EAC5D,KAAK,OAAS,IAAIma,GAAc,KAAK,eAAe,CACtD,EAUAY,GAAc,UAAU,KAAO,SAAeL,EAAS,CACrD,IAAI1yB,EAAW,KAAK,OAAO,KAAK0yB,CAAO,EAEvC,OAAI,KAAK,eAAe,QAAO,IAAO9C,EAAe,OACnD,KAAK,gBAAgB5vB,CAAQ,EAGxBA,CACT,EAGA+yB,GAAc,UAAU,gBAAkB,SAA0B/yB,EAAU,CAC1E,IAAI0Y,EAAS,KAEXhU,EAAGmO,EAEP,GAAI7S,EAAS,WACX,KAAK,eAAe,YAAYA,EAAS,UAAU,UAC1CA,EAAS,OAClB,IAAK0E,EAAI,EAAGmO,EAAM7S,EAAS,OAAO,OAAQ0E,EAAImO,EAAKnO,IACjDgU,EAAO,eAAe,YAAY1Y,EAAS,OAAO0E,CAAC,CAAC,UAE7C1E,EAAS,WAClB,IAAK0E,EAAI,EAAGmO,EAAM7S,EAAS,WAAW,OAAQ0E,EAAImO,EAAKnO,IACrDgU,EAAO,gBAAgB1Y,EAAS,WAAW0E,CAAC,CAAC,CAGnD,EAoBA,IAAIsuB,GAAgB,UAA0B,CAC5C,KAAK,OAAS,IAAIb,GAAc,KAAK,eAAe,CACtD,EASAa,GAAc,UAAU,MAAQ,SAAgBhzB,EAAU,CACxD,OAAO,KAAK,OAAO,MAAMA,CAAQ,CACnC,EAMA,IAAIizB,EAAW,UAAqB,GAEhCC,GAAqB,CAAE,GAAI,CAAE,aAAc,EAAM,EAAC,KAAM,CAAE,aAAc,EAAM,EAAC,MAAO,CAAE,aAAc,EAAM,CAAA,EAEhHD,EAAS,UAAU,YAAc,UAAwB,CACvD,MAAO,CAAE,CACX,EACAA,EAAS,UAAU,SAAW,UAAqB,CACjD,OAAOA,CACT,EACAA,EAAS,SAAW,SAAmBE,EAAU,CAC/C,OAAIA,IAAaF,EAAS,KAAeA,EAAS,MAC9CE,IAAaF,EAAS,MAAgBA,EAAS,KAC5CE,CACT,EACAD,GAAmB,GAAG,IAAM,UAAY,CAAE,MAAO,EAAC,EAClDA,GAAmB,KAAK,IAAM,UAAY,CAAE,MAAO,EAAC,EACpDA,GAAmB,MAAM,IAAM,UAAY,CAAE,MAAO,EAAC,EAErD,OAAO,iBAAkBD,EAAUC,IAQnC,SAASE,GAAqB1oB,EAAS,CACrC,KAAK,QAAUA,GAAW,EAC5B,CACA0oB,GAAoB,UAAY,IAAI,MAKpCA,GAAoB,UAAU,KAAO,sBASrC,SAASC,IAAS,CAKhB,KAAK,OAAS,EAChB,CACAA,GAAM,UAAY,IAAI5R,GAKtB4R,GAAM,UAAU,IAAM,SAAUtlB,EAAG,CACjC,YAAK,OAAO,KAAKA,CAAC,EACX,EACT,EAKAslB,GAAM,UAAU,IAAM,SAAU5lB,EAAO,CACrC,GAAIA,EAAQ,GAAKA,GAAS,KAAK,KAAI,EACjC,MAAM,IAAI,MAGZ,OAAO,KAAK,OAAOA,CAAK,CAC1B,EAOA4lB,GAAM,UAAU,KAAO,SAAUtlB,EAAG,CAClC,YAAK,OAAO,KAAKA,CAAC,EACXA,CACT,EAOAslB,GAAM,UAAU,IAAM,SAAUtlB,EAAG,CACjC,GAAI,KAAK,OAAO,SAAW,EACzB,MAAM,IAAIqlB,GAGZ,OAAO,KAAK,OAAO,IAAK,CAC1B,EAOAC,GAAM,UAAU,KAAO,UAAY,CACjC,GAAI,KAAK,OAAO,SAAW,EACzB,MAAM,IAAID,GAGZ,OAAO,KAAK,OAAO,KAAK,OAAO,OAAS,CAAC,CAC3C,EAOAC,GAAM,UAAU,MAAQ,UAAY,CAClC,OAAI,KAAK,OAAO,SAAW,CAK7B,EAKAA,GAAM,UAAU,QAAU,UAAY,CACpC,OAAO,KAAK,MAAO,CACrB,EAgBAA,GAAM,UAAU,OAAS,SAAU9nB,EAAG,CACpC,OAAO,KAAK,OAAO,QAAQA,CAAC,CAC9B,EAMA8nB,GAAM,UAAU,KAAO,UAAY,CACjC,OAAO,KAAK,OAAO,MACrB,EAKAA,GAAM,UAAU,QAAU,UAAY,CAKpC,QAJI3a,EAAS,KAETC,EAAQ,CAAA,EAEHjU,EAAI,EAAGmO,EAAM,KAAK,OAAO,OAAQnO,EAAImO,EAAKnO,IACjDiU,EAAM,KAAKD,EAAO,OAAOhU,CAAC,CAAC,EAG7B,OAAOiU,CACT,EAEA,IAAI2a,GAAsB,UAAgC,CACxD,KAAK,UAAY,GACjB,KAAK,UAAY,KACjB,KAAK,OAAS,KACd,KAAK,YAAc,IACrB,EACAA,GAAoB,UAAU,cAAgB,UAA0B,CACtE,OAAO,KAAK,SACd,EACAA,GAAoB,UAAU,iBAAmB,SAA2BC,EAAI9lB,EAAO,CACrF,IAAI+lB,EAAO,KAAK,0BAA0BD,EAAI9lB,CAAK,EACnD,OAAI+lB,EAAO,IAAKA,EAAO,KAAK,0BAA0BD,EAAI9lB,EAAQ,CAAC,GAC/D+lB,EAAO,IACT,KAAK,UAAY,KACjB,KAAK,4BAA4BD,CAAE,GAE9BC,CACT,EACAF,GAAoB,UAAU,0BAA4B,UAAsC,CAC9F,IAAIpU,EAAM,KAAK,OAAO,QAAS,EAAC,eAAc,EAC9CnF,EAAO,OAAO,KAAK,UAAY,GAAK,KAAK,UAAYmF,EAAI,OAAQ,wDAAwD,EACzH,IAAIuU,EAAQvU,EAAI,KAAK,UAAY,CAAC,EAC9BwU,EAAQxU,EAAI,KAAK,UAAY,CAAC,EAC9ByU,EAAcpY,EAAa,mBAAmB,KAAK,UAAWmY,EAAOD,CAAK,EAC1EG,EAAU,IACVH,EAAM,EAAI,KAAK,UAAU,GAAKC,EAAM,EAAI,KAAK,UAAU,GAAKC,IAAgBpY,EAAa,kBAElFkY,EAAM,EAAI,KAAK,UAAU,GAAKC,EAAM,EAAI,KAAK,UAAU,GAAKC,IAAgBpY,EAAa,aAClGqY,EAAU,IAERA,IACF,KAAK,UAAY,KAAK,UAAY,EAEtC,EACAN,GAAoB,UAAU,0BAA4B,SAAoCC,EAAI7uB,EAAG,CACnG,IAAIqJ,EAAIwlB,EAAG,UACP/vB,EAAQuK,EAAE,iBAEd,GADIrJ,EAAI,GAAKA,EAAI,GAAKlB,EAAM,QACxBA,EAAMkB,CAAC,EAAE,IAAMlB,EAAMkB,EAAI,CAAC,EAAE,EAAK,MAAO,GAC5C,IAAI4mB,EAAM2H,EAAS,KACnB,OAAIzvB,EAAMkB,CAAC,EAAE,EAAIlB,EAAMkB,EAAI,CAAC,EAAE,IAAK4mB,EAAM2H,EAAS,OAC3C3H,CACT,EACAgI,GAAoB,UAAU,QAAU,UAAoB,CAC1D,OAAO,KAAK,WACd,EACAA,GAAoB,UAAU,4BAA8B,SAAsCC,EAAI,CAIpG,QAHM7a,EAAS,KAEXlV,EAAQ+vB,EAAG,QAAS,EAAC,eAAc,EAC9B,EAAI,EAAG,EAAI/vB,EAAM,OAAS,EAAG,KAChCkV,EAAO,YAAc,MAAQlV,EAAM,CAAC,EAAE,EAAIkV,EAAO,UAAU,KAC7DA,EAAO,OAAS6a,EAChB7a,EAAO,UAAY,EACnBA,EAAO,UAAYlV,EAAM,CAAC,EAGhC,EACA8vB,GAAoB,UAAU,wBAA0B,UAAoC,CAC1F,IAAIO,EAAO,KAAK,OAAO,QAAO,EAC1BC,EAAOD,EAAK,WAChB,KAAK,OAASC,EAAK,mBACd,KAAK,OAAO,cACf,KAAK,OAAS,KAAK,OAAO,OAAM,EAChC,KAAK,UAAY,KAAK,OAAO,QAAO,EAAG,eAAc,EAAG,OAAS,EAErE,EACAR,GAAoB,UAAU,SAAW,SAAmBS,EAAa,CAGvE,QAFMrb,EAAS,KAENhU,EAAIqvB,EAAY,SAAQ,EAAIrvB,EAAE,WAAY,CACjD,IAAI6uB,EAAK7uB,EAAE,OACN6uB,EAAG,UAAW,GACnB7a,EAAO,4BAA4B6a,CAAE,CACtC,CACDxZ,EAAO,OAAO,KAAK,YAAc,GAAK,KAAK,UAAU,OAAO,KAAK,OAAO,cAAa,CAAE,EAAG,uCAAuC,EAC7H,KAAK,YAAc,EACrB,KAAK,wBAAuB,EAE5B,KAAK,0BAAyB,EAEhC,KAAK,YAAc,KAAK,OACxB,IAAIia,EAAgB,KAAK,iBAAiB,KAAK,OAAQ,KAAK,SAAS,EACjEA,IAAkBf,EAAS,OAC7B,KAAK,YAAc,KAAK,OAAO,OAAM,EAEzC,EACAK,GAAoB,UAAU,YAAc,UAAwB,CAClE,MAAO,CAAE,CACX,EACAA,GAAoB,UAAU,SAAW,UAAqB,CAC5D,OAAOA,EACT,EAEA,IAAIW,GAAqB,SAAUna,EAAqB,CACtD,SAASma,EAAmBC,EAAKnZ,EAAI,CACnCjB,EAAoB,KAAK,KAAMma,EAAkB,aAAaC,EAAKnZ,CAAE,CAAC,EACtE,KAAK,GAAKA,EAAK,IAAI7P,EAAW6P,CAAE,EAAI,KACpC,KAAK,KAAO,mBACb,CAED,OAAKjB,IAAsBma,EAAkB,UAAYna,GACzDma,EAAkB,UAAY,OAAO,OAAQna,GAAuBA,EAAoB,WACxFma,EAAkB,UAAU,YAAcA,EAC1CA,EAAkB,UAAU,cAAgB,UAA0B,CACpE,OAAO,KAAK,EAChB,EACEA,EAAkB,UAAU,YAAc,UAAwB,CAChE,MAAO,CAAE,CACb,EACEA,EAAkB,UAAU,SAAW,UAAqB,CAC1D,OAAOA,CACX,EACEA,EAAkB,aAAe,SAAuBC,EAAKnZ,EAAI,CAC/D,OAAKA,EACEmZ,EADWA,EAAM,MAAQnZ,EAAK,IAEzC,EAESkZ,CACT,EAAEra,EAAgB,EAEdua,GAAa,UAAuB,CACtC,KAAK,OAAS,EAChB,EACAA,GAAW,UAAU,QAAU,SAAkBpmB,EAAG,CAClD,KAAK,OAAO,KAAKA,CAAC,CACpB,EACAomB,GAAW,UAAU,YAAc,UAAwB,CACzD,OAAO,KAAK,OAAO,MAAO,CAC5B,EACAA,GAAW,UAAU,QAAU,UAAoB,CACjD,OAAO,KAAK,OAAO,SAAW,CAChC,EAEA,IAAIC,GAAiB,UAA2B,CAC9C,KAAK,QAAU,KACf,KAAK,aAAe,IAAIxS,EACxB,KAAK,OAAS,IAAIA,EAClB,KAAK,gBAAkB,KACvB,KAAK,KAAO,KACZ,KAAK,QAAU,IAAI0R,EACrB,EACAc,GAAe,UAAU,kBAAoB,UAA8B,CACzE,QAAStK,EAAK,KAAK,aAAa,WAAYA,EAAG,WAAY,CACzD,IAAIyJ,EAAKzJ,EAAG,OACZyJ,EAAG,WAAW,EAAK,CACpB,CACH,EACAa,GAAe,UAAU,uBAAyB,UAAmC,CACnF,OAAO,KAAK,eACd,EACAA,GAAe,UAAU,iBAAmB,SAA2BvpB,EAAG,CAIxE,QAHM6N,EAAS,KAEX2b,EAAY,KACP,EAAIxpB,EAAE,SAAQ,EAAG,WAAY,EAAE,WAAY,CAClD,IAAI0oB,EAAK,EAAE,OACX,GAAIA,EAAG,UAAW,GAAIA,EAAG,OAAM,EAAG,YAAa,CAC7Cc,EAAYd,EACZ,KACD,CACF,CACD,GAAIc,IAAc,KAAQ,MAAM,IAAIJ,GAAkB,4CAA8CppB,EAAE,cAAa,CAAE,EACrHA,EAAE,SAAQ,EAAG,cAAcwpB,CAAS,EACpC,QAAS/V,EAAMzT,EAAE,SAAQ,EAAG,WAAYyT,EAAI,WAAY,CACtD,IAAIgW,EAAOhW,EAAI,OACfgW,EAAK,WAAW,EAAI,EACpB5b,EAAO,cAAc4b,CAAI,CAC1B,CACH,EACAF,GAAe,UAAU,aAAe,SAAuBG,EAAc,CAC3E,KAAK,kBAAiB,EACtB,IAAIhB,EAAK,KAAK,QAAQ,QAAO,EAG7BA,EAAG,cAAcN,EAAS,MAAOsB,CAAY,EAC7C,KAAK,cAAchB,CAAE,EACrB,KAAK,cAAcA,CAAE,CACvB,EACAa,GAAe,UAAU,OAAS,SAAiBP,EAAM,CACvD,KAAK,aAAaA,CAAI,EACtB,KAAK,QAAQ,SAAS,KAAK,YAAY,EACvC,KAAK,gBAAkB,KAAK,QAAQ,cAAa,CACnD,EACAO,GAAe,UAAU,gBAAkB,UAA4B,CACrE,QAAStK,EAAK,KAAK,aAAa,WAAYA,EAAG,WAAY,CACzD,IAAIyJ,EAAKzJ,EAAG,OACRyJ,EAAG,SAASN,EAAS,KAAK,GAAK,GAAKM,EAAG,SAASN,EAAS,IAAI,GAAK,GAAK,CAACM,EAAG,mBAAkB,GAC/FA,EAAG,YAAY,EAAI,CAEtB,CACH,EACAa,GAAe,UAAU,cAAgB,SAAwBC,EAAW,CACxE,IAAI3b,EAAS,KAEX8b,EAAe,IAAItO,GACnBuO,EAAY,IAAIN,GAChBO,EAAYL,EAAU,UAI1B,IAHAI,EAAU,QAAQC,CAAS,EAC3BF,EAAa,IAAIE,CAAS,EAC1BL,EAAU,WAAW,EAAI,EAClB,CAACI,EAAU,WAAW,CAC3B,IAAI5pB,EAAI4pB,EAAU,cAClBD,EAAa,IAAI3pB,CAAC,EAClB6N,EAAO,iBAAiB7N,CAAC,EACzB,QAASnG,EAAImG,EAAE,SAAQ,EAAG,WAAYnG,EAAE,WAAY,CAClD,IAAI6uB,EAAK7uB,EAAE,OACPiwB,EAAMpB,EAAG,SACb,GAAI,CAAAoB,EAAI,YACR,KAAIC,EAAUD,EAAI,UACbH,EAAa,SAASI,CAAO,IAChCH,EAAU,QAAQG,CAAO,EACzBJ,EAAa,IAAII,CAAO,GAE3B,CACF,CACH,EACAR,GAAe,UAAU,UAAY,SAAoB7oB,EAAG,CAC1D,IAAIspB,EAAQtpB,EACZ,OAAI,KAAK,gBAAgB,EAAIspB,EAAM,gBAAgB,EAC1C,GAEL,KAAK,gBAAgB,EAAIA,EAAM,gBAAgB,EAC1C,EAEF,CACT,EACAT,GAAe,UAAU,YAAc,UAAwB,CAC7D,GAAI,KAAK,OAAS,KAAM,CAEtB,QADIU,EAAU,IAAIhe,EACTgT,EAAK,KAAK,aAAa,WAAYA,EAAG,WAG7C,QAFIiL,EAAUjL,EAAG,OACb5K,EAAM6V,EAAQ,QAAS,EAAC,eAAc,EACjCrwB,EAAI,EAAGA,EAAIwa,EAAI,OAAS,EAAGxa,IAClCowB,EAAQ,gBAAgB5V,EAAIxa,CAAC,CAAC,EAGlC,KAAK,KAAOowB,CACb,CACD,OAAO,KAAK,IACd,EACAV,GAAe,UAAU,aAAe,SAAuBM,EAAW,CACtE,IAAIhc,EAAS,KAEXsc,EAAY,IAAI3B,GAEpB,IADA2B,EAAU,IAAIN,CAAS,EAChB,CAACM,EAAU,SAAS,CACzB,IAAInB,EAAOmB,EAAU,MACrBtc,EAAO,IAAImb,EAAMmB,CAAS,CAC3B,CACH,EACAZ,GAAe,UAAU,cAAgB,SAAwBb,EAAI,CACnE,IAAIoB,EAAMpB,EAAG,SACboB,EAAI,SAAS1B,EAAS,KAAMM,EAAG,SAASN,EAAS,KAAK,CAAC,EACvD0B,EAAI,SAAS1B,EAAS,MAAOM,EAAG,SAASN,EAAS,IAAI,CAAC,CACzD,EACAmB,GAAe,UAAU,IAAM,SAAcP,EAAMmB,EAAW,CAC1D,IAAItc,EAAS,KAEfmb,EAAK,WAAW,EAAI,EACpB,KAAK,OAAO,IAAIA,CAAI,EACpB,QAAS,EAAIA,EAAK,SAAQ,EAAG,WAAY,EAAE,WAAY,CACrD,IAAIN,EAAK,EAAE,OACX7a,EAAO,aAAa,IAAI6a,CAAE,EAC1B,IAAIoB,EAAMpB,EAAG,SACT0B,EAAUN,EAAI,UACbM,EAAQ,UAAW,GAAID,EAAU,KAAKC,CAAO,CACnD,CACH,EACAb,GAAe,UAAU,SAAW,UAAqB,CACvD,OAAO,KAAK,MACd,EACAA,GAAe,UAAU,iBAAmB,UAA6B,CACvE,OAAO,KAAK,YACd,EACAA,GAAe,UAAU,YAAc,UAAwB,CAC7D,MAAO,CAACtpB,EAAU,CACpB,EACAspB,GAAe,UAAU,SAAW,UAAqB,CACvD,OAAOA,EACT,EAEA,IAAIc,EAAmB,SAASA,GAAoB,CAClD,IAAIxc,EAAS,KAGb,GADA,KAAK,SAAW,KACZ,UAAU,SAAW,GACvB,GAAI,UAAU,CAAC,YAAa,MAAO,CACjC,IAAIyc,EAAW,UAAU,CAAC,EAC1B,KAAK,KAAKA,EAAS,MAAM,CAC1B,SAAU,OAAO,UAAU,UAAU,CAAC,CAAC,EAAG,CACzC,IAAIC,EAAK,UAAU,CAAC,EACpB,KAAK,KAAK,CAAC,EACX,KAAK,SAASnC,EAAS,EAAE,EAAImC,CAC9B,SAAU,UAAU,CAAC,YAAaF,EAAkB,CACnD,IAAIG,EAAK,UAAU,CAAC,EAEpB,GADA,KAAK,KAAKA,EAAG,SAAS,MAAM,EACxBA,IAAO,KACT,QAAS3wB,EAAI,EAAGA,EAAI,KAAK,SAAS,OAAQA,IACxCgU,EAAO,SAAShU,CAAC,EAAI2wB,EAAG,SAAS3wB,CAAC,CAGvC,UACQ,UAAU,SAAW,EAAG,CACjC,IAAI4wB,EAAO,UAAU,CAAC,EAClBC,EAAO,UAAU,CAAC,EAClBC,EAAQ,UAAU,CAAC,EACvB,KAAK,KAAK,CAAC,EACX,KAAK,SAASvC,EAAS,EAAE,EAAIqC,EAC7B,KAAK,SAASrC,EAAS,IAAI,EAAIsC,EAC/B,KAAK,SAAStC,EAAS,KAAK,EAAIuC,CACjC,CACH,EACAN,EAAiB,UAAU,gBAAkB,SAA0BO,EAAU,CAG/E,QAFM/c,EAAS,KAENhU,EAAI,EAAGA,EAAI,KAAK,SAAS,OAAQA,IACxCgU,EAAO,SAAShU,CAAC,EAAI+wB,CAEzB,EACAP,EAAiB,UAAU,OAAS,UAAmB,CAGrD,QAFMxc,EAAS,KAENhU,EAAI,EAAGA,EAAI,KAAK,SAAS,OAAQA,IACxC,GAAIgU,EAAO,SAAShU,CAAC,IAAM+H,EAAS,KAAQ,MAAO,GAErD,MAAO,EACT,EACAyoB,EAAiB,UAAU,sBAAwB,SAAgCO,EAAU,CAG3F,QAFM/c,EAAS,KAENhU,EAAI,EAAGA,EAAI,KAAK,SAAS,OAAQA,IACpCgU,EAAO,SAAShU,CAAC,IAAM+H,EAAS,OAAQiM,EAAO,SAAShU,CAAC,EAAI+wB,EAErE,EACAP,EAAiB,UAAU,OAAS,UAAmB,CACrD,OAAO,KAAK,SAAS,SAAW,CAClC,EACAA,EAAiB,UAAU,MAAQ,SAAgBG,EAAI,CACnD,IAAI3c,EAAS,KAEf,GAAI2c,EAAG,SAAS,OAAS,KAAK,SAAS,OAAQ,CAC7C,IAAIK,EAAS,IAAI,MAAM,CAAC,EAAE,KAAK,IAAI,EACnCA,EAAOzC,EAAS,EAAE,EAAI,KAAK,SAASA,EAAS,EAAE,EAC/CyC,EAAOzC,EAAS,IAAI,EAAIxmB,EAAS,KACjCipB,EAAOzC,EAAS,KAAK,EAAIxmB,EAAS,KAClC,KAAK,SAAWipB,CACjB,CACD,QAAS,EAAI,EAAG,EAAI,KAAK,SAAS,OAAQ,IACpChd,EAAO,SAAS,CAAC,IAAMjM,EAAS,MAAQ,EAAI4oB,EAAG,SAAS,SAAU3c,EAAO,SAAS,CAAC,EAAI2c,EAAG,SAAS,CAAC,EAE5G,EACAH,EAAiB,UAAU,aAAe,UAAyB,CACjE,OAAO,KAAK,QACd,EACAA,EAAiB,UAAU,KAAO,UAAiB,CACjD,GAAI,KAAK,SAAS,QAAU,EAAK,OAAO,KACxC,IAAIS,EAAO,KAAK,SAAS1C,EAAS,IAAI,EACtC,KAAK,SAASA,EAAS,IAAI,EAAI,KAAK,SAASA,EAAS,KAAK,EAC3D,KAAK,SAASA,EAAS,KAAK,EAAI0C,CAClC,EACAT,EAAiB,UAAU,SAAW,UAAqB,CACzD,IAAItmB,EAAM,IAAIf,GACd,OAAI,KAAK,SAAS,OAAS,GAAKe,EAAI,OAAOnC,EAAS,iBAAiB,KAAK,SAASwmB,EAAS,IAAI,CAAC,CAAC,EAClGrkB,EAAI,OAAOnC,EAAS,iBAAiB,KAAK,SAASwmB,EAAS,EAAE,CAAC,CAAC,EAC5D,KAAK,SAAS,OAAS,GAAKrkB,EAAI,OAAOnC,EAAS,iBAAiB,KAAK,SAASwmB,EAAS,KAAK,CAAC,CAAC,EAC5FrkB,EAAI,SAAU,CACvB,EACAsmB,EAAiB,UAAU,aAAe,SAAuBE,EAAIG,EAAMC,EAAO,CAChF,KAAK,SAASvC,EAAS,EAAE,EAAImC,EAC7B,KAAK,SAASnC,EAAS,IAAI,EAAIsC,EAC/B,KAAK,SAAStC,EAAS,KAAK,EAAIuC,CAClC,EACAN,EAAiB,UAAU,IAAM,SAAcU,EAAU,CACvD,OAAIA,EAAW,KAAK,SAAS,OAAiB,KAAK,SAASA,CAAQ,EAC7DnpB,EAAS,IAClB,EACAyoB,EAAiB,UAAU,OAAS,UAAmB,CACrD,OAAO,KAAK,SAAS,OAAS,CAChC,EACAA,EAAiB,UAAU,UAAY,UAAsB,CAG3D,QAFMxc,EAAS,KAENhU,EAAI,EAAGA,EAAI,KAAK,SAAS,OAAQA,IACxC,GAAIgU,EAAO,SAAShU,CAAC,IAAM+H,EAAS,KAAQ,MAAO,GAErD,MAAO,EACT,EACAyoB,EAAiB,UAAU,YAAc,UAAwB,CAC/D,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAIO,EAAW,UAAU,CAAC,EAC1B,KAAK,YAAYxC,EAAS,GAAIwC,CAAQ,CAC1C,SAAa,UAAU,SAAW,EAAG,CACjC,IAAII,EAAW,UAAU,CAAC,EACtBC,EAAa,UAAU,CAAC,EAC5B,KAAK,SAASD,CAAQ,EAAIC,CAC3B,CACH,EACAZ,EAAiB,UAAU,KAAO,SAAe3R,EAAM,CACrD,KAAK,SAAW,IAAI,MAAMA,CAAI,EAAE,KAAK,IAAI,EACzC,KAAK,gBAAgB9W,EAAS,IAAI,CACpC,EACAyoB,EAAiB,UAAU,cAAgB,SAAwBa,EAAIF,EAAU,CAC/E,OAAO,KAAK,SAASA,CAAQ,IAAME,EAAG,SAASF,CAAQ,CACzD,EACAX,EAAiB,UAAU,kBAAoB,SAA4Bc,EAAK,CAG9E,QAFMtd,EAAS,KAENhU,EAAI,EAAGA,EAAI,KAAK,SAAS,OAAQA,IACxC,GAAIgU,EAAO,SAAShU,CAAC,IAAMsxB,EAAO,MAAO,GAE3C,MAAO,EACT,EACAd,EAAiB,UAAU,YAAc,UAAwB,CAC/D,MAAO,CAAE,CACX,EACAA,EAAiB,UAAU,SAAW,UAAqB,CACzD,OAAOA,CACT,EAEA,IAAIe,EAAQ,SAASA,GAAS,CAE5B,GADA,KAAK,IAAM,IAAI,MAAM,CAAC,EAAE,KAAK,IAAI,EAC7B,UAAU,SAAW,GACvB,GAAI,OAAO,UAAU,UAAU,CAAC,CAAC,EAAG,CAClC,IAAIC,EAAQ,UAAU,CAAC,EACvB,KAAK,IAAI,CAAC,EAAI,IAAIhB,EAAiBgB,CAAK,EACxC,KAAK,IAAI,CAAC,EAAI,IAAIhB,EAAiBgB,CAAK,CACzC,SAAU,UAAU,CAAC,YAAaD,EAAO,CACxC,IAAIE,EAAM,UAAU,CAAC,EACrB,KAAK,IAAI,CAAC,EAAI,IAAIjB,EAAiBiB,EAAI,IAAI,CAAC,CAAC,EAC7C,KAAK,IAAI,CAAC,EAAI,IAAIjB,EAAiBiB,EAAI,IAAI,CAAC,CAAC,CAC9C,UACQ,UAAU,SAAW,EAAG,CACjC,IAAIzvB,EAAY,UAAU,CAAC,EACvB0vB,EAAU,UAAU,CAAC,EACzB,KAAK,IAAI,CAAC,EAAI,IAAIlB,EAAiBzoB,EAAS,IAAI,EAChD,KAAK,IAAI,CAAC,EAAI,IAAIyoB,EAAiBzoB,EAAS,IAAI,EAChD,KAAK,IAAI/F,CAAS,EAAE,YAAY0vB,CAAO,CAC3C,SAAa,UAAU,SAAW,EAAG,CACjC,IAAIC,EAAU,UAAU,CAAC,EACrBC,EAAU,UAAU,CAAC,EACrBC,EAAW,UAAU,CAAC,EAC1B,KAAK,IAAI,CAAC,EAAI,IAAIrB,EAAiBmB,EAASC,EAASC,CAAQ,EAC7D,KAAK,IAAI,CAAC,EAAI,IAAIrB,EAAiBmB,EAASC,EAASC,CAAQ,CACjE,SAAa,UAAU,SAAW,EAAG,CACjC,IAAIC,EAAc,UAAU,CAAC,EACzBC,EAAU,UAAU,CAAC,EACrBC,EAAY,UAAU,CAAC,EACvBC,EAAa,UAAU,CAAC,EAC5B,KAAK,IAAI,CAAC,EAAI,IAAIzB,EAAiBzoB,EAAS,KAAMA,EAAS,KAAMA,EAAS,IAAI,EAC9E,KAAK,IAAI,CAAC,EAAI,IAAIyoB,EAAiBzoB,EAAS,KAAMA,EAAS,KAAMA,EAAS,IAAI,EAC9E,KAAK,IAAI+pB,CAAW,EAAE,aAAaC,EAASC,EAAWC,CAAU,CAClE,CACH,EACAV,EAAM,UAAU,iBAAmB,UAA6B,CAC9D,IAAIW,EAAQ,EACZ,OAAK,KAAK,IAAI,CAAC,EAAE,UAAYA,IACxB,KAAK,IAAI,CAAC,EAAE,UAAYA,IACtBA,CACT,EACAX,EAAM,UAAU,gBAAkB,SAA0BvvB,EAAWyuB,EAAU,CAC/E,KAAK,IAAIzuB,CAAS,EAAE,gBAAgByuB,CAAQ,CAC9C,EACAc,EAAM,UAAU,OAAS,SAAiBvvB,EAAW,CACnD,OAAO,KAAK,IAAIA,CAAS,EAAE,OAAQ,CACrC,EACAuvB,EAAM,UAAU,sBAAwB,UAAkC,CACxE,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAId,EAAW,UAAU,CAAC,EAC1B,KAAK,sBAAsB,EAAGA,CAAQ,EACtC,KAAK,sBAAsB,EAAGA,CAAQ,CAC1C,SAAa,UAAU,SAAW,EAAG,CACjC,IAAIzuB,EAAY,UAAU,CAAC,EACvBmwB,EAAa,UAAU,CAAC,EAC5B,KAAK,IAAInwB,CAAS,EAAE,sBAAsBmwB,CAAU,CACrD,CACH,EACAZ,EAAM,UAAU,OAAS,SAAiBvvB,EAAW,CACnD,OAAO,KAAK,IAAIA,CAAS,EAAE,OAAQ,CACrC,EACAuvB,EAAM,UAAU,MAAQ,SAAgBE,EAAK,CAG3C,QAFMzd,EAAS,KAENhU,EAAI,EAAGA,EAAI,EAAGA,IACjBgU,EAAO,IAAIhU,CAAC,IAAM,MAAQyxB,EAAI,IAAIzxB,CAAC,IAAM,KAC3CgU,EAAO,IAAIhU,CAAC,EAAI,IAAIwwB,EAAiBiB,EAAI,IAAIzxB,CAAC,CAAC,EAE/CgU,EAAO,IAAIhU,CAAC,EAAE,MAAMyxB,EAAI,IAAIzxB,CAAC,CAAC,CAGpC,EACAuxB,EAAM,UAAU,KAAO,UAAiB,CACtC,KAAK,IAAI,CAAC,EAAE,KAAI,EAChB,KAAK,IAAI,CAAC,EAAE,KAAI,CAClB,EACAA,EAAM,UAAU,YAAc,UAAwB,CACpD,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAIvvB,EAAY,UAAU,CAAC,EAC3B,OAAO,KAAK,IAAIA,CAAS,EAAE,IAAIusB,EAAS,EAAE,CAC9C,SAAa,UAAU,SAAW,EAAG,CACjC,IAAIuD,EAAc,UAAU,CAAC,EACzBZ,EAAW,UAAU,CAAC,EAC1B,OAAO,KAAK,IAAIY,CAAW,EAAE,IAAIZ,CAAQ,CAC1C,CACH,EACAK,EAAM,UAAU,SAAW,UAAqB,CAC9C,IAAIrnB,EAAM,IAAIf,GACd,OAAI,KAAK,IAAI,CAAC,IAAM,OAClBe,EAAI,OAAO,IAAI,EACfA,EAAI,OAAO,KAAK,IAAI,CAAC,EAAE,SAAQ,CAAE,GAE/B,KAAK,IAAI,CAAC,IAAM,OAClBA,EAAI,OAAO,KAAK,EAChBA,EAAI,OAAO,KAAK,IAAI,CAAC,EAAE,SAAQ,CAAE,GAE5BA,EAAI,SAAU,CACvB,EACAqnB,EAAM,UAAU,OAAS,UAAmB,CAC1C,GAAI,UAAU,SAAW,EACvB,OAAO,KAAK,IAAI,CAAC,EAAE,UAAY,KAAK,IAAI,CAAC,EAAE,OAAQ,EAC9C,GAAI,UAAU,SAAW,EAAG,CACjC,IAAIvvB,EAAY,UAAU,CAAC,EAC3B,OAAO,KAAK,IAAIA,CAAS,EAAE,OAAQ,CACpC,CACH,EACAuvB,EAAM,UAAU,UAAY,SAAoBvvB,EAAW,CACzD,OAAO,KAAK,IAAIA,CAAS,EAAE,UAAW,CACxC,EACAuvB,EAAM,UAAU,YAAc,UAAwB,CACpD,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAIvvB,EAAY,UAAU,CAAC,EACvByuB,EAAW,UAAU,CAAC,EAC1B,KAAK,IAAIzuB,CAAS,EAAE,YAAYusB,EAAS,GAAIkC,CAAQ,CACzD,SAAa,UAAU,SAAW,EAAG,CACjC,IAAIqB,EAAc,UAAU,CAAC,EACzBZ,EAAW,UAAU,CAAC,EACtBiB,EAAa,UAAU,CAAC,EAC5B,KAAK,IAAIL,CAAW,EAAE,YAAYZ,EAAUiB,CAAU,CACvD,CACH,EACAZ,EAAM,UAAU,cAAgB,SAAwBE,EAAK3C,EAAM,CACjE,OAAO,KAAK,IAAI,CAAC,EAAE,cAAc2C,EAAI,IAAI,CAAC,EAAG3C,CAAI,GAAK,KAAK,IAAI,CAAC,EAAE,cAAc2C,EAAI,IAAI,CAAC,EAAG3C,CAAI,CAClG,EACAyC,EAAM,UAAU,kBAAoB,SAA4BvvB,EAAWsvB,EAAK,CAC9E,OAAO,KAAK,IAAItvB,CAAS,EAAE,kBAAkBsvB,CAAG,CAClD,EACAC,EAAM,UAAU,OAAS,SAAiBvvB,EAAW,CAC/C,KAAK,IAAIA,CAAS,EAAE,WAAY,KAAK,IAAIA,CAAS,EAAI,IAAIwuB,EAAiB,KAAK,IAAIxuB,CAAS,EAAE,SAAS,CAAC,CAAC,EAChH,EACAuvB,EAAM,UAAU,YAAc,UAAwB,CACpD,MAAO,CAAE,CACX,EACAA,EAAM,UAAU,SAAW,UAAqB,CAC9C,OAAOA,CACT,EACAA,EAAM,YAAc,SAAsBa,EAAO,CAE/C,QADIC,EAAY,IAAId,EAAMxpB,EAAS,IAAI,EAC9B/H,EAAI,EAAGA,EAAI,EAAGA,IACrBqyB,EAAU,YAAYryB,EAAGoyB,EAAM,YAAYpyB,CAAC,CAAC,EAE/C,OAAOqyB,CACT,EAEA,IAAIC,GAAW,UAAqB,CAClC,KAAK,SAAW,KAChB,KAAK,eAAiB,GACtB,KAAK,OAAS,IAAIpV,EAClB,KAAK,KAAO,IAAIA,EAChB,KAAK,OAAS,IAAIqU,EAAMxpB,EAAS,IAAI,EACrC,KAAK,MAAQ,KACb,KAAK,QAAU,KACf,KAAK,OAAS,KACd,KAAK,OAAS,IAAImV,EAClB,KAAK,iBAAmB,KACxB,IAAI7c,EAAQ,UAAU,CAAC,EACnBgT,EAAkB,UAAU,CAAC,EACjC,KAAK,iBAAmBA,EACxB,KAAK,cAAchT,CAAK,EACxB,KAAK,YAAW,CAClB,EACAiyB,GAAS,UAAU,YAAc,UAAwB,CACrD,IAAIte,EAAS,KAEf,GAAI,KAAK,QAAU,KAAQ,OAAO,KAElC,QADIlV,EAAQ,IAAI,MAAM,KAAK,KAAK,MAAM,EAAE,KAAK,IAAI,EACxCkB,EAAI,EAAGA,EAAI,KAAK,KAAK,OAAQA,IACpClB,EAAMkB,CAAC,EAAIgU,EAAO,KAAK,IAAIhU,CAAC,EAE9B,KAAK,MAAQ,KAAK,iBAAiB,iBAAiBlB,CAAK,EACzD,KAAK,QAAU+X,EAAa,MAAM,KAAK,MAAM,eAAc,CAAE,CAC/D,EACAyb,GAAS,UAAU,WAAa,UAAuB,CACrD,OAAO,KAAK,OAAO,iBAAgB,IAAO,CAC5C,EACAA,GAAS,UAAU,cAAgB,SAAwBjyB,EAAO,CAC9D,IAAI2T,EAAS,KAEf,KAAK,SAAW3T,EAChB,IAAIwuB,EAAKxuB,EACLkyB,EAAc,GAClB,EAAG,CACD,GAAI1D,IAAO,KAAQ,MAAM,IAAIU,GAAkB,yBAAyB,EACxE,GAAIV,EAAG,gBAAkB7a,EAAU,MAAM,IAAIub,GAAkB,uDAAyDV,EAAG,cAAa,CAAE,EAC1I7a,EAAO,OAAO,IAAI6a,CAAE,EACpB,IAAIuD,EAAQvD,EAAG,WACfxZ,EAAO,OAAO+c,EAAM,OAAQ,CAAA,EAC5Bpe,EAAO,WAAWoe,CAAK,EACvBpe,EAAO,UAAU6a,EAAG,QAAO,EAAIA,EAAG,UAAS,EAAI0D,CAAW,EAC1DA,EAAc,GACdve,EAAO,YAAY6a,EAAI7a,CAAM,EAC7B6a,EAAK7a,EAAO,QAAQ6a,CAAE,CAC1B,OAAWA,IAAO,KAAK,SACvB,EACAyD,GAAS,UAAU,cAAgB,UAA0B,CAC3D,OAAO,KAAK,KACd,EACAA,GAAS,UAAU,cAAgB,SAAwBtyB,EAAG,CAC5D,OAAO,KAAK,KAAK,IAAIA,CAAC,CACxB,EACAsyB,GAAS,UAAU,qBAAuB,UAAiC,CACvE,IAAIte,EAAS,KAEf,KAAK,eAAiB,EACtB,IAAI6a,EAAK,KAAK,SACd,EAAG,CACD,IAAIM,EAAON,EAAG,UACV2D,EAASrD,EAAK,SAAU,EAAC,kBAAkBnb,CAAM,EACjDwe,EAASxe,EAAO,iBAAkBA,EAAO,eAAiBwe,GAC9D3D,EAAK7a,EAAO,QAAQ6a,CAAE,CAC1B,OAAWA,IAAO,KAAK,UACrB,KAAK,gBAAkB,CACzB,EACAyD,GAAS,UAAU,UAAY,SAAoBG,EAAMC,EAAWH,EAAa,CAC7E,IAAIve,EAAS,KAEX2e,EAAUF,EAAK,iBACnB,GAAIC,EAAW,CACb,IAAIE,EAAa,EACbL,IAAeK,EAAa,GAChC,QAAS5yB,EAAI4yB,EAAY5yB,EAAI2yB,EAAQ,OAAQ3yB,IAC3CgU,EAAO,KAAK,IAAI2e,EAAQ3yB,CAAC,CAAC,CAEhC,KAAS,CACL,IAAI6yB,EAAeF,EAAQ,OAAS,EAChCJ,IAAeM,EAAeF,EAAQ,OAAS,GACnD,QAAS/Y,EAAMiZ,EAAcjZ,GAAO,EAAGA,IACrC5F,EAAO,KAAK,IAAI2e,EAAQ/Y,CAAG,CAAC,CAE/B,CACH,EACA0Y,GAAS,UAAU,OAAS,UAAmB,CAC7C,OAAO,KAAK,OACd,EACAA,GAAS,UAAU,YAAc,UAAwB,CACvD,IAAIzD,EAAK,KAAK,SACd,GACEA,EAAG,QAAO,EAAG,YAAY,EAAI,EAC7BA,EAAKA,EAAG,gBACDA,IAAO,KAAK,SACvB,EACAyD,GAAS,UAAU,cAAgB,SAAwBrhB,EAAG,CAC5D,IAAI4D,EAAQ,KAAK,gBACbvE,EAAMuE,EAAM,sBAEhB,GADI,CAACvE,EAAI,SAASW,CAAC,GACf,CAAC4F,EAAa,cAAc5F,EAAG4D,EAAM,eAAgB,CAAA,EAAK,MAAO,GACrE,QAAS,EAAI,KAAK,OAAO,WAAY,EAAE,WAAY,CACjD,IAAIsV,EAAO,EAAE,OACb,GAAIA,EAAK,cAAclZ,CAAC,EAAK,MAAO,EACrC,CACD,MAAO,EACT,EACAqhB,GAAS,UAAU,QAAU,SAAkBh2B,EAAM,CACnD,KAAK,OAAO,IAAIA,CAAI,CACtB,EACAg2B,GAAS,UAAU,QAAU,UAAoB,CAC/C,OAAO,KAAK,SAAW,IACzB,EACAA,GAAS,UAAU,SAAW,UAAqB,CACjD,OAAO,KAAK,MACd,EACAA,GAAS,UAAU,SAAW,UAAqB,CACjD,OAAO,KAAK,MACd,EACAA,GAAS,UAAU,iBAAmB,UAA6B,CACjE,OAAI,KAAK,eAAiB,GAAK,KAAK,qBAAoB,EACjD,KAAK,cACd,EACAA,GAAS,UAAU,SAAW,UAAqB,CACjD,OAAO,KAAK,MACd,EACAA,GAAS,UAAU,WAAa,UAAuB,CACrD,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAIQ,EAAU,UAAU,CAAC,EACzB,KAAK,WAAWA,EAAS,CAAC,EAC1B,KAAK,WAAWA,EAAS,CAAC,CAC9B,SAAa,UAAU,SAAW,EAAG,CACjC,IAAIC,EAAY,UAAU,CAAC,EACvB/wB,EAAY,UAAU,CAAC,EACvBsvB,EAAMyB,EAAU,YAAY/wB,EAAWusB,EAAS,KAAK,EACzD,GAAI+C,IAAQvpB,EAAS,KAAQ,OAAO,KACpC,GAAI,KAAK,OAAO,YAAY/F,CAAS,IAAM+F,EAAS,KAClD,YAAK,OAAO,YAAY/F,EAAWsvB,CAAG,EAC/B,IAEV,CACH,EACAgB,GAAS,UAAU,SAAW,SAAmBzd,EAAO,CACtD,KAAK,OAASA,EACVA,IAAU,MAAQA,EAAM,QAAQ,IAAI,CAC1C,EACAyd,GAAS,UAAU,UAAY,SAAoBjf,EAAiB,CAIlE,QAHMW,EAAS,KAEXgf,EAAS,IAAI,MAAM,KAAK,OAAO,MAAM,EAAE,KAAK,IAAI,EAC3C,EAAI,EAAG,EAAI,KAAK,OAAO,OAAQ,IACtCA,EAAO,CAAC,EAAIhf,EAAO,OAAO,IAAI,CAAC,EAAE,gBAEnC,IAAI6U,EAAOxV,EAAgB,cAAc,KAAK,cAAa,EAAI2f,CAAM,EACrE,OAAOnK,CACT,EACAyJ,GAAS,UAAU,YAAc,UAAwB,CACvD,MAAO,CAAE,CACX,EACAA,GAAS,UAAU,SAAW,UAAqB,CACjD,OAAOA,EACT,EAEA,IAAIW,GAAmB,SAAUC,EAAa,CAC5C,SAASD,GAAmB,CAC1B,IAAI5yB,EAAQ,UAAU,CAAC,EACnBgT,EAAkB,UAAU,CAAC,EACjC6f,EAAY,KAAK,KAAM7yB,EAAOgT,CAAe,CAC9C,CAED,OAAK6f,IAAcD,EAAgB,UAAYC,GAC/CD,EAAgB,UAAY,OAAO,OAAQC,GAAeA,EAAY,WACtED,EAAgB,UAAU,YAAcA,EACxCA,EAAgB,UAAU,YAAc,SAAsBpE,EAAIsE,EAAI,CACpEtE,EAAG,eAAesE,CAAE,CACxB,EACEF,EAAgB,UAAU,QAAU,SAAkBpE,EAAI,CACxD,OAAOA,EAAG,WAAY,CAC1B,EACEoE,EAAgB,UAAU,YAAc,UAAwB,CAC9D,MAAO,CAAE,CACb,EACEA,EAAgB,UAAU,SAAW,UAAqB,CACxD,OAAOA,CACX,EAESA,CACT,EAAEX,EAAQ,EAENc,GAAmB,SAAUF,EAAa,CAC5C,SAASE,GAAmB,CAC1B,IAAI/yB,EAAQ,UAAU,CAAC,EACnBgT,EAAkB,UAAU,CAAC,EACjC6f,EAAY,KAAK,KAAM7yB,EAAOgT,CAAe,CAC9C,CAED,OAAK6f,IAAcE,EAAgB,UAAYF,GAC/CE,EAAgB,UAAY,OAAO,OAAQF,GAAeA,EAAY,WACtEE,EAAgB,UAAU,YAAcA,EACxCA,EAAgB,UAAU,kBAAoB,UAA8B,CAC1E,IAAIpf,EAAS,KAETqf,EAAe,IAAInW,EACnB2R,EAAK,KAAK,SACd,EAAG,CACD,GAAIA,EAAG,eAAgB,IAAK,KAAM,CAChC,IAAIyE,EAAQ,IAAIL,GAAgBpE,EAAI7a,EAAO,gBAAgB,EAC3Dqf,EAAa,IAAIC,CAAK,CACvB,CACDzE,EAAKA,EAAG,SACd,OAAaA,IAAO,KAAK,UACrB,OAAOwE,CACX,EACED,EAAgB,UAAU,YAAc,SAAsBvE,EAAIsE,EAAI,CACpEtE,EAAG,YAAYsE,CAAE,CACrB,EACEC,EAAgB,UAAU,qCAAuC,UAAiD,CAChH,IAAIpf,EAAS,KAET6a,EAAK,KAAK,SACd,EAAG,CACD,IAAIM,EAAON,EAAG,UACdM,EAAK,SAAQ,EAAG,yBAAyBnb,CAAM,EAC/C6a,EAAKA,EAAG,SACd,OAAaA,IAAO,KAAK,SACzB,EACEuE,EAAgB,UAAU,QAAU,SAAkBvE,EAAI,CACxD,OAAOA,EAAG,QAAS,CACvB,EACEuE,EAAgB,UAAU,YAAc,UAAwB,CAC9D,MAAO,CAAE,CACb,EACEA,EAAgB,UAAU,SAAW,UAAqB,CACxD,OAAOA,CACX,EAESA,CACT,EAAEd,EAAQ,EAENiB,GAAiB,UAA2B,CAM9C,GALA,KAAK,OAAS,KACd,KAAK,YAAc,GACnB,KAAK,WAAa,GAClB,KAAK,cAAgB,GACrB,KAAK,WAAa,GACd,UAAU,SAAW,GAAW,GAAI,UAAU,SAAW,EAAG,CAC9D,IAAInB,EAAQ,UAAU,CAAC,EACvB,KAAK,OAASA,CACf,EACH,EACAmB,GAAe,UAAU,WAAa,SAAqBC,EAAW,CACpE,KAAK,WAAaA,CACpB,EACAD,GAAe,UAAU,YAAc,SAAsBE,EAAY,CACvE,KAAK,YAAcA,CACrB,EACAF,GAAe,UAAU,UAAY,UAAsB,CACzD,OAAO,KAAK,UACd,EACAA,GAAe,UAAU,aAAe,UAAyB,CAC/D,OAAO,KAAK,aACd,EACAA,GAAe,UAAU,SAAW,SAAmBnB,EAAO,CAC5D,KAAK,OAASA,CAChB,EACAmB,GAAe,UAAU,SAAW,UAAqB,CACvD,OAAO,KAAK,MACd,EACAA,GAAe,UAAU,WAAa,SAAqBG,EAAW,CACpE,KAAK,WAAaA,EAClB,KAAK,cAAgB,EACvB,EACAH,GAAe,UAAU,SAAW,SAAmBI,EAAI,CACzDte,EAAO,OAAO,KAAK,OAAO,oBAAsB,EAAG,qBAAqB,EACxE,KAAK,UAAUse,CAAE,CACnB,EACAJ,GAAe,UAAU,WAAa,UAAuB,CAC3D,OAAO,KAAK,WACd,EACAA,GAAe,UAAU,UAAY,UAAsB,CACzD,OAAO,KAAK,UACd,EACAA,GAAe,UAAU,YAAc,UAAwB,CAC7D,MAAO,CAAE,CACX,EACAA,GAAe,UAAU,SAAW,UAAqB,CACvD,OAAOA,EACT,EAEA,IAAIK,GAAQ,SAAUC,EAAmB,CACvC,SAASD,GAAQ,CACfC,EAAkB,KAAK,IAAI,EAC3B,KAAK,OAAS,KACd,KAAK,OAAS,KACd,IAAI/0B,EAAQ,UAAU,CAAC,EACnBg1B,EAAQ,UAAU,CAAC,EACvB,KAAK,OAASh1B,EACd,KAAK,OAASg1B,EACd,KAAK,OAAS,IAAIvC,EAAM,EAAGxpB,EAAS,IAAI,CACzC,CAED,OAAK8rB,IAAoBD,EAAK,UAAYC,GAC1CD,EAAK,UAAY,OAAO,OAAQC,GAAqBA,EAAkB,WACvED,EAAK,UAAU,YAAcA,EAC7BA,EAAK,UAAU,uBAAyB,UAAmC,CACzE,QAASxO,EAAK,KAAK,SAAU,EAAC,SAAU,EAAC,SAAU,EAAEA,EAAG,WAAY,CAClE,IAAIyJ,EAAKzJ,EAAG,OACZ,GAAIyJ,EAAG,QAAS,EAAC,WAAU,EAAM,MAAO,EACzC,CACD,MAAO,EACX,EACE+E,EAAK,UAAU,WAAa,UAAuB,CACjD,OAAO,KAAK,OAAO,iBAAgB,IAAO,CAC9C,EACEA,EAAK,UAAU,cAAgB,UAA0B,CACvD,OAAO,KAAK,MAChB,EACEA,EAAK,UAAU,MAAQ,SAAgBG,EAAK,CAC1CA,EAAI,QAAQ,QAAU,KAAK,OAAS,SAAW,KAAK,MAAM,CAC9D,EACEH,EAAK,UAAU,UAAY,SAAoBD,EAAI,CAAA,EACnDC,EAAK,UAAU,sBAAwB,SAAgCI,EAAQC,EAAU,CACvF,IAAI3C,EAAMvpB,EAAS,KAEnB,GADAupB,EAAM,KAAK,OAAO,YAAY2C,CAAQ,EAClC,CAACD,EAAO,OAAOC,CAAQ,EAAG,CAC5B,IAAIC,EAAOF,EAAO,YAAYC,CAAQ,EAClC3C,IAAQvpB,EAAS,WAAYupB,EAAM4C,EACxC,CACD,OAAO5C,CACX,EACEsC,EAAK,UAAU,SAAW,UAAqB,CAC7C,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAIO,EAAW,UAAU,CAAC,EACtBC,EAAa,UAAU,CAAC,EACxB,KAAK,SAAW,KAClB,KAAK,OAAS,IAAI7C,EAAM4C,EAAUC,CAAU,EACrC,KAAK,OAAO,YAAYD,EAAUC,CAAU,CAC3D,KAAa,QAAOP,EAAkB,UAAU,SAAS,MAAM,KAAM,SAAS,CAC9E,EACED,EAAK,UAAU,SAAW,UAAqB,CAC7C,OAAO,KAAK,MAChB,EACEA,EAAK,UAAU,WAAa,UAAuB,CACjD,IAAI5f,EAAS,KAEb,GAAI,UAAU,CAAC,YAAa4f,EAAM,CAChC,IAAIztB,EAAI,UAAU,CAAC,EACnB,KAAK,WAAWA,EAAE,MAAM,CACzB,SAAU,UAAU,CAAC,YAAaorB,EAEjC,QADIyC,EAAS,UAAU,CAAC,EACfh0B,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1B,IAAIsxB,EAAMtd,EAAO,sBAAsBggB,EAAQh0B,CAAC,EAC5Cq0B,EAAUrgB,EAAO,OAAO,YAAYhU,CAAC,EACrCq0B,IAAYtsB,EAAS,MAAQiM,EAAO,OAAO,YAAYhU,EAAGsxB,CAAG,CAClE,CAEP,EACEsC,EAAK,UAAU,IAAM,SAAcvqB,EAAG,CACpC,KAAK,OAAO,OAAOA,CAAC,EACpBA,EAAE,QAAQ,IAAI,CAClB,EACEuqB,EAAK,UAAU,iBAAmB,SAA2BO,EAAU,CACrE,GAAI,KAAK,SAAW,KAAQ,OAAO,KACnC,IAAI7C,EAAMvpB,EAAS,KACf,KAAK,SAAW,OAAQupB,EAAM,KAAK,OAAO,YAAY6C,CAAQ,GAClE,IAAInD,EAAS,KACb,OAAQM,EAAG,CACT,KAAKvpB,EAAS,SACZipB,EAASjpB,EAAS,SAClB,MACF,KAAKA,EAAS,SACZipB,EAASjpB,EAAS,SAClB,MACF,QACEipB,EAASjpB,EAAS,SAClB,KACH,CACD,KAAK,OAAO,YAAYosB,EAAUnD,CAAM,CAC5C,EACE4C,EAAK,UAAU,YAAc,UAAwB,CACnD,MAAO,CAAE,CACb,EACEA,EAAK,UAAU,SAAW,UAAqB,CAC7C,OAAOA,CACX,EAESA,CACT,EAAEL,EAAc,EAEZe,GAAU,UAAoB,CAChC,KAAK,QAAU,IAAInS,GACnB,KAAK,SAAW,KAChB,IAAIoS,EAAW,UAAU,CAAC,EAC1B,KAAK,SAAWA,CAClB,EACAD,GAAQ,UAAU,KAAO,SAAex1B,EAAO,CAC7C,OAAO,KAAK,QAAQ,IAAIA,CAAK,CAC/B,EACAw1B,GAAQ,UAAU,QAAU,UAAoB,CAC9C,GAAI,UAAU,CAAC,YAAa9tB,EAAY,CACtC,IAAI1H,EAAQ,UAAU,CAAC,EACnBqwB,EAAO,KAAK,QAAQ,IAAIrwB,CAAK,EACjC,OAAIqwB,IAAS,OACXA,EAAO,KAAK,SAAS,WAAWrwB,CAAK,EACrC,KAAK,QAAQ,IAAIA,EAAOqwB,CAAI,GAEvBA,CACR,SAAU,UAAU,CAAC,YAAayE,GAAM,CACvC,IAAIztB,EAAI,UAAU,CAAC,EACfquB,EAAS,KAAK,QAAQ,IAAIruB,EAAE,cAAa,CAAE,EAC/C,OAAIquB,IAAW,MACb,KAAK,QAAQ,IAAIruB,EAAE,cAAa,EAAIA,CAAC,EAC9BA,IAETquB,EAAO,WAAWruB,CAAC,EACZquB,EACR,CACH,EACAF,GAAQ,UAAU,MAAQ,SAAgBP,EAAK,CAC7C,QAAS3O,EAAK,KAAK,SAAQ,EAAIA,EAAG,WAAY,CAC5C,IAAIjf,EAAIif,EAAG,OACXjf,EAAE,MAAM4tB,CAAG,CACZ,CACH,EACAO,GAAQ,UAAU,SAAW,UAAqB,CAChD,OAAO,KAAK,QAAQ,OAAM,EAAG,SAAU,CACzC,EACAA,GAAQ,UAAU,OAAS,UAAmB,CAC5C,OAAO,KAAK,QAAQ,OAAQ,CAC9B,EACAA,GAAQ,UAAU,iBAAmB,SAA2BtyB,EAAW,CAEzE,QADIyyB,EAAW,IAAIvX,EACVld,EAAI,KAAK,SAAQ,EAAIA,EAAE,WAAY,CAC1C,IAAImvB,EAAOnvB,EAAE,OACTmvB,EAAK,WAAW,YAAYntB,CAAS,IAAM+F,EAAS,UAAY0sB,EAAS,IAAItF,CAAI,CACtF,CACD,OAAOsF,CACT,EACAH,GAAQ,UAAU,IAAM,SAAcjrB,EAAG,CACvC,IAAI4H,EAAI5H,EAAE,gBACNlD,EAAI,KAAK,QAAQ8K,CAAC,EACtB9K,EAAE,IAAIkD,CAAC,CACT,EACAirB,GAAQ,UAAU,YAAc,UAAwB,CACtD,MAAO,CAAE,CACX,EACAA,GAAQ,UAAU,SAAW,UAAqB,CAChD,OAAOA,EACT,EAEA,IAAII,EAAW,UAAqB,GAEhCC,GAAqB,CAAE,GAAI,CAAE,aAAc,IAAO,GAAI,CAAE,aAAc,EAAM,EAAC,GAAI,CAAE,aAAc,EAAM,EAAC,GAAI,CAAE,aAAc,EAAI,GAEpID,EAAS,UAAU,YAAc,UAAwB,CACvD,MAAO,CAAE,CACX,EACAA,EAAS,UAAU,SAAW,UAAqB,CACjD,OAAOA,CACT,EACAA,EAAS,WAAa,SAAqBE,EAAM,CAC/C,OAAOA,IAASF,EAAS,IAAME,IAASF,EAAS,EACnD,EACAA,EAAS,WAAa,SAAqBG,EAAOC,EAAO,CACvD,GAAID,IAAUC,EAAS,MAAO,GAC9B,IAAIC,GAAQF,EAAQC,EAAQ,GAAK,EACjC,OAAIC,IAAS,CAEf,EACAL,EAAS,gBAAkB,SAA0BG,EAAOC,EAAO,CACjE,GAAID,IAAUC,EAAS,OAAOD,EAC9B,IAAIE,GAAQF,EAAQC,EAAQ,GAAK,EACjC,GAAIC,IAAS,EAAK,MAAO,GACzB,IAAIrsB,EAAMmsB,EAAQC,EAAQD,EAAQC,EAC9BnsB,EAAMksB,EAAQC,EAAQD,EAAQC,EAClC,OAAIpsB,IAAQ,GAAKC,IAAQ,EAAY,EAC9BD,CACT,EACAgsB,EAAS,cAAgB,SAAwBE,EAAMI,EAAW,CAChE,OAAIA,IAAcN,EAAS,GAClBE,IAASF,EAAS,IAAME,IAASF,EAAS,GAE5CE,IAASI,GAAaJ,IAASI,EAAY,CACpD,EACAN,EAAS,SAAW,UAAqB,CACvC,GAAI,OAAO,UAAU,CAAC,GAAM,UAAY,OAAO,UAAU,CAAC,GAAM,SAAU,CACxE,IAAI5tB,EAAK,UAAU,CAAC,EAChBC,EAAK,UAAU,CAAC,EACpB,GAAID,IAAO,GAAOC,IAAO,EAAO,MAAM,IAAIjB,EAAyB,2CAA6CgB,EAAK,KAAOC,EAAK,IAAI,EACrI,OAAID,GAAM,EACJC,GAAM,EAAc2tB,EAAS,GAAoBA,EAAS,GAE1D3tB,GAAM,EAAc2tB,EAAS,GAAoBA,EAAS,EAEpE,SAAa,UAAU,CAAC,YAAaluB,GAAc,UAAU,CAAC,YAAaA,EAAY,CACnF,IAAIyO,EAAK,UAAU,CAAC,EAChB3G,EAAK,UAAU,CAAC,EACpB,GAAIA,EAAG,IAAM2G,EAAG,GAAK3G,EAAG,IAAM2G,EAAG,EAAK,MAAM,IAAInP,EAAyB,wDAA0DmP,CAAE,EACrI,OAAI3G,EAAG,GAAK2G,EAAG,EACT3G,EAAG,GAAK2G,EAAG,EAAYyf,EAAS,GAAoBA,EAAS,GAE7DpmB,EAAG,GAAK2G,EAAG,EAAYyf,EAAS,GAAoBA,EAAS,EAEpE,CACH,EACAC,GAAmB,GAAG,IAAM,UAAY,CAAE,MAAO,EAAC,EAClDA,GAAmB,GAAG,IAAM,UAAY,CAAE,MAAO,EAAC,EAClDA,GAAmB,GAAG,IAAM,UAAY,CAAE,MAAO,EAAC,EAClDA,GAAmB,GAAG,IAAM,UAAY,CAAE,MAAO,EAAC,EAElD,OAAO,iBAAkBD,EAAUC,IAEnC,IAAIM,GAAU,UAAoB,CAShC,GARA,KAAK,MAAQ,KACb,KAAK,OAAS,KACd,KAAK,MAAQ,KACb,KAAK,IAAM,KACX,KAAK,IAAM,KACX,KAAK,IAAM,KACX,KAAK,IAAM,KACX,KAAK,UAAY,KACb,UAAU,SAAW,EAAG,CAC1B,IAAIxC,EAAO,UAAU,CAAC,EACtB,KAAK,MAAQA,CACjB,SAAa,UAAU,SAAW,EAAG,CACjC,IAAIyC,EAAS,UAAU,CAAC,EACpBjgB,EAAK,UAAU,CAAC,EAChB3G,EAAK,UAAU,CAAC,EAChB8jB,EAAQ,KACZ,KAAK,MAAQ8C,EACb,KAAK,KAAKjgB,EAAI3G,CAAE,EAChB,KAAK,OAAS8jB,CAClB,SAAa,UAAU,SAAW,EAAG,CACjC,IAAI+C,EAAS,UAAU,CAAC,EACpBC,EAAO,UAAU,CAAC,EAClBhkB,EAAO,UAAU,CAAC,EAClBikB,EAAU,UAAU,CAAC,EACzB,KAAK,MAAQF,EACb,KAAK,KAAKC,EAAMhkB,CAAI,EACpB,KAAK,OAASikB,CACf,CACH,EACAJ,GAAQ,UAAU,iBAAmB,SAA2B5rB,EAAG,CACjE,OAAI,KAAK,MAAQA,EAAE,KAAO,KAAK,MAAQA,EAAE,IAAc,EACnD,KAAK,UAAYA,EAAE,UAAoB,EACvC,KAAK,UAAYA,EAAE,UAAoB,GACpCwN,EAAa,mBAAmBxN,EAAE,IAAKA,EAAE,IAAK,KAAK,GAAG,CAC/D,EACA4rB,GAAQ,UAAU,MAAQ,UAAkB,CAC1C,OAAO,KAAK,GACd,EACAA,GAAQ,UAAU,cAAgB,UAA0B,CAC1D,OAAO,KAAK,GACd,EACAA,GAAQ,UAAU,QAAU,SAAkB9F,EAAM,CAClD,KAAK,MAAQA,CACf,EACA8F,GAAQ,UAAU,MAAQ,SAAgBlB,EAAK,CAC7C,IAAIn2B,EAAQ,KAAK,MAAM,KAAK,IAAK,KAAK,GAAG,EACrC03B,EAAY,KAAK,SAAU,EAAC,QAAO,EACnCC,EAAaD,EAAU,YAAY,GAAG,EACtCvkB,EAAOukB,EAAU,UAAUC,EAAa,CAAC,EAC7CxB,EAAI,MAAM,KAAOhjB,EAAO,KAAO,KAAK,IAAM,MAAQ,KAAK,IAAM,IAAM,KAAK,UAAY,IAAMnT,EAAQ,MAAQ,KAAK,MAAM,CACvH,EACAq3B,GAAQ,UAAU,UAAY,SAAoB7W,EAAK,CACrD,IAAI,EAAIA,EACR,OAAO,KAAK,iBAAiB,CAAC,CAChC,EACA6W,GAAQ,UAAU,sBAAwB,UAAkC,CAC1E,OAAO,KAAK,GACd,EACAA,GAAQ,UAAU,MAAQ,UAAkB,CAC1C,OAAO,KAAK,GACd,EACAA,GAAQ,UAAU,SAAW,UAAqB,CAChD,OAAO,KAAK,MACd,EACAA,GAAQ,UAAU,QAAU,UAAoB,CAC9C,OAAO,KAAK,KACd,EACAA,GAAQ,UAAU,YAAc,UAAwB,CACtD,OAAO,KAAK,SACd,EACAA,GAAQ,UAAU,QAAU,UAAoB,CAC9C,OAAO,KAAK,KACd,EACAA,GAAQ,UAAU,SAAW,UAAqB,CAChD,IAAIr3B,EAAQ,KAAK,MAAM,KAAK,IAAK,KAAK,GAAG,EACrC03B,EAAY,KAAK,SAAU,EAAC,QAAO,EACnCC,EAAaD,EAAU,YAAY,GAAG,EACtCvkB,EAAOukB,EAAU,UAAUC,EAAa,CAAC,EAC7C,MAAO,KAAOxkB,EAAO,KAAO,KAAK,IAAM,MAAQ,KAAK,IAAM,IAAM,KAAK,UAAY,IAAMnT,EAAQ,MAAQ,KAAK,MAC9G,EACAq3B,GAAQ,UAAU,aAAe,SAAuBO,EAAkB,CAAA,EAC1EP,GAAQ,UAAU,KAAO,SAAehgB,EAAI3G,EAAI,CAC9C,KAAK,IAAM2G,EACX,KAAK,IAAM3G,EACX,KAAK,IAAMA,EAAG,EAAI2G,EAAG,EACrB,KAAK,IAAM3G,EAAG,EAAI2G,EAAG,EACrB,KAAK,UAAYyf,EAAS,SAAS,KAAK,IAAK,KAAK,GAAG,EACrDrf,EAAO,OAAO,EAAE,KAAK,MAAQ,GAAK,KAAK,MAAQ,GAAI,wCAAwC,CAC7F,EACA4f,GAAQ,UAAU,YAAc,UAAwB,CACtD,MAAO,CAAC7uB,EAAU,CACpB,EACA6uB,GAAQ,UAAU,SAAW,UAAqB,CAChD,OAAOA,EACT,EAEA,IAAIQ,GAAgB,SAAUC,EAAY,CACxC,SAASD,GAAgB,CACvB,IAAIhD,EAAO,UAAU,CAAC,EAClBC,EAAY,UAAU,CAAC,EAY3B,GAXAgD,EAAW,KAAK,KAAMjD,CAAI,EAC1B,KAAK,WAAa,KAClB,KAAK,YAAc,GACnB,KAAK,WAAa,GAClB,KAAK,KAAO,KACZ,KAAK,MAAQ,KACb,KAAK,SAAW,KAChB,KAAK,UAAY,KACjB,KAAK,aAAe,KACpB,KAAK,OAAS,CAAC,EAAG,KAAM,IAAI,EAC5B,KAAK,WAAaC,EACdA,EACF,KAAK,KAAKD,EAAK,cAAc,CAAC,EAAGA,EAAK,cAAc,CAAC,CAAC,MACjD,CACL,IAAItsB,EAAIssB,EAAK,aAAY,EAAK,EAC9B,KAAK,KAAKA,EAAK,cAActsB,CAAC,EAAGssB,EAAK,cAActsB,EAAI,CAAC,CAAC,CAC3D,CACD,KAAK,qBAAoB,CAC1B,CAED,OAAKuvB,IAAaD,EAAa,UAAYC,GAC3CD,EAAa,UAAY,OAAO,OAAQC,GAAcA,EAAW,WACjED,EAAa,UAAU,YAAcA,EACrCA,EAAa,UAAU,WAAa,UAAuB,CACzD,OAAO,KAAK,QAChB,EACEA,EAAa,UAAU,SAAW,SAAmBhH,EAAU,CAC7D,OAAO,KAAK,OAAOA,CAAQ,CAC/B,EACEgH,EAAa,UAAU,WAAa,SAAqBjC,EAAW,CAClE,KAAK,WAAaA,CACtB,EACEiC,EAAa,UAAU,qBAAuB,UAAiC,CAC7E,KAAK,OAAS,IAAIlE,EAAM,KAAK,MAAM,SAAQ,CAAE,EACxC,KAAK,YAAc,KAAK,OAAO,KAAI,CAC5C,EACEkE,EAAa,UAAU,QAAU,UAAoB,CACnD,OAAO,KAAK,KAChB,EACEA,EAAa,UAAU,SAAW,SAAmBhH,EAAUkH,EAAU,CACvE,GAAI,KAAK,OAAOlH,CAAQ,IAAM,MACxB,KAAK,OAAOA,CAAQ,IAAMkH,EAAY,MAAM,IAAIpG,GAAkB,+BAAgC,KAAK,cAAe,CAAA,EAE5H,KAAK,OAAOd,CAAQ,EAAIkH,CAC5B,EACEF,EAAa,UAAU,mBAAqB,UAA+B,CAIzE,QAHIzhB,EAAS,KAET4hB,EAAqB,GAChB51B,EAAI,EAAGA,EAAI,EAAGA,IACfgU,EAAO,OAAO,OAAOhU,CAAC,GAAKgU,EAAO,OAAO,YAAYhU,EAAGuuB,EAAS,IAAI,IAAMxmB,EAAS,UAAYiM,EAAO,OAAO,YAAYhU,EAAGuuB,EAAS,KAAK,IAAMxmB,EAAS,WAC9J6tB,EAAqB,IAGzB,OAAOA,CACX,EACEH,EAAa,UAAU,WAAa,SAAqBI,EAAS,CAChE,KAAK,SAAWA,CACpB,EACEJ,EAAa,UAAU,MAAQ,SAAgB1B,EAAK,CAClD2B,EAAW,UAAU,MAAM,KAAK,KAAM3B,CAAG,EACzCA,EAAI,MAAM,IAAM,KAAK,OAAOxF,EAAS,IAAI,EAAI,IAAM,KAAK,OAAOA,EAAS,KAAK,CAAC,EAC9EwF,EAAI,MAAM,KAAO,KAAK,cAAa,EAAK,GAAG,EACvC,KAAK,aAAeA,EAAI,MAAM,WAAW,CACjD,EACE0B,EAAa,UAAU,eAAiB,SAAyBK,EAAa,CAC5E,KAAK,aAAeA,CACxB,EACEL,EAAa,UAAU,WAAa,UAAuB,CACzD,IAAIM,EAAS,KAAK,OAAO,OAAO,CAAC,GAAK,KAAK,OAAO,OAAO,CAAC,EACtDC,EAAoB,CAAC,KAAK,OAAO,OAAO,CAAC,GAAK,KAAK,OAAO,kBAAkB,EAAGjuB,EAAS,QAAQ,EAChGkuB,EAAoB,CAAC,KAAK,OAAO,OAAO,CAAC,GAAK,KAAK,OAAO,kBAAkB,EAAGluB,EAAS,QAAQ,EACpG,OAAOguB,GAAUC,GAAqBC,CAC1C,EACER,EAAa,UAAU,YAAc,SAAsBS,EAAU,CACnE,KAAK,UAAYA,CACrB,EACET,EAAa,UAAU,eAAiB,UAA2B,CACjE,OAAO,KAAK,YAChB,EACEA,EAAa,UAAU,cAAgB,UAA0B,CAC/D,IAAIU,EAAa,KAAK,MAAM,cAAa,EACzC,OAAK,KAAK,aAAcA,EAAa,CAACA,GAC/BA,CACX,EACEV,EAAa,UAAU,YAAc,SAAsBhC,EAAY,CACrE,KAAK,YAAcA,CACvB,EACEgC,EAAa,UAAU,OAAS,UAAmB,CACjD,OAAO,KAAK,IAChB,EACEA,EAAa,UAAU,UAAY,UAAsB,CACvD,OAAO,KAAK,UAChB,EACEA,EAAa,UAAU,QAAU,UAAoB,CACnD,OAAO,KAAK,KAChB,EACEA,EAAa,UAAU,UAAY,SAAoB1B,EAAK,CAC1D,KAAK,MAAMA,CAAG,EACdA,EAAI,MAAM,GAAG,EACT,KAAK,WAAc,KAAK,MAAM,MAAMA,CAAG,EAAY,KAAK,MAAM,aAAaA,CAAG,CACtF,EACE0B,EAAa,UAAU,OAAS,SAAiB5G,EAAI,CACnD,KAAK,KAAOA,CAChB,EACE4G,EAAa,UAAU,eAAiB,SAAyBjC,EAAW,CAC1E,KAAK,WAAWA,CAAS,EACzB,KAAK,KAAK,WAAWA,CAAS,CAClC,EACEiC,EAAa,UAAU,cAAgB,SAAwBhH,EAAUpI,EAAO,CAC9E,IAAI8P,EAAa,KAAK,QAAS,EAAC,cAAa,EACxC,KAAK,aAAcA,EAAa,CAACA,GACtC,IAAIC,EAAkB,EAClB3H,IAAaF,EAAS,OAAQ6H,EAAkB,IACpD,IAAIC,EAAc9H,EAAS,SAASE,CAAQ,EACxC6H,EAAQH,EAAaC,EACrBG,EAAgBlQ,EAAQiQ,EAC5B,KAAK,SAAS7H,EAAUpI,CAAK,EAC7B,KAAK,SAASgQ,EAAaE,CAAa,CAC5C,EACEd,EAAa,UAAU,YAAc,UAAwB,CAC3D,OAAO,KAAK,SAChB,EACEA,EAAa,UAAU,WAAa,UAAuB,CACzD,OAAO,KAAK,WAChB,EACEA,EAAa,UAAU,QAAU,SAAkBza,EAAM,CACvD,KAAK,MAAQA,CACjB,EACEya,EAAa,UAAU,UAAY,UAAsB,CACvD,OAAO,KAAK,UAChB,EACEA,EAAa,UAAU,YAAc,UAAwB,CAC3D,MAAO,CAAE,CACb,EACEA,EAAa,UAAU,SAAW,UAAqB,CACrD,OAAOA,CACX,EACEA,EAAa,YAAc,SAAsBe,EAAcC,EAAc,CAC3E,OAAID,IAAiBzuB,EAAS,UAAY0uB,IAAiB1uB,EAAS,SAAmB,EAAcyuB,IAAiBzuB,EAAS,UAAY0uB,IAAiB1uB,EAAS,SAAmB,GACjL,CACX,EAES0tB,CACT,EAAER,EAAO,EAELyB,GAAc,UAAwB,GAE1CA,GAAY,UAAU,WAAa,SAAqB53B,EAAO,CAC7D,OAAO,IAAI80B,GAAK90B,EAAO,IAAI,CAC7B,EACA43B,GAAY,UAAU,YAAc,UAAwB,CAC1D,MAAO,CAAE,CACX,EACAA,GAAY,UAAU,SAAW,UAAqB,CACpD,OAAOA,EACT,EAEA,IAAIC,EAAc,UAAwB,CAIxC,GAHA,KAAK,OAAS,IAAIzZ,EAClB,KAAK,OAAS,KACd,KAAK,aAAe,IAAIA,EACpB,UAAU,SAAW,EACvB,KAAK,OAAS,IAAIoX,GAAQ,IAAIoC,EAAa,UAClC,UAAU,SAAW,EAAG,CACjC,IAAInC,EAAW,UAAU,CAAC,EAC1B,KAAK,OAAS,IAAID,GAAQC,CAAQ,CACnC,CACH,EACAoC,EAAY,UAAU,WAAa,SAAqB5C,EAAK,CACzD,IAAI/f,EAAS,KAEf+f,EAAI,QAAQ,QAAQ,EACpB,QAAS/zB,EAAI,EAAGA,EAAI,KAAK,OAAO,OAAQA,IAAK,CAC3C+zB,EAAI,QAAQ,QAAU/zB,EAAI,GAAG,EAC7B,IAAIqJ,EAAI2K,EAAO,OAAO,IAAIhU,CAAC,EAC3BqJ,EAAE,MAAM0qB,CAAG,EACX1qB,EAAE,OAAO,MAAM0qB,CAAG,CACnB,CACH,EACA4C,EAAY,UAAU,KAAO,SAAe73B,EAAO,CACjD,OAAO,KAAK,OAAO,KAAKA,CAAK,CAC/B,EACA63B,EAAY,UAAU,QAAU,UAAoB,CAClD,GAAI,UAAU,CAAC,YAAa/C,GAAM,CAChC,IAAIzE,EAAO,UAAU,CAAC,EACtB,OAAO,KAAK,OAAO,QAAQA,CAAI,CAChC,SAAU,UAAU,CAAC,YAAa3oB,EAAY,CAC7C,IAAI1H,EAAQ,UAAU,CAAC,EACvB,OAAO,KAAK,OAAO,QAAQA,CAAK,CACjC,CACH,EACA63B,EAAY,UAAU,gBAAkB,UAA4B,CAClE,OAAO,KAAK,OAAO,SAAU,CAC/B,EACAA,EAAY,UAAU,wBAA0B,UAAoC,CAClF,QAASC,EAAS,KAAK,OAAO,WAAYA,EAAO,WAAY,CAC3D,IAAIzH,EAAOyH,EAAO,OAClBzH,EAAK,WAAW,yBACjB,CACH,EACAwH,EAAY,UAAU,aAAe,SAAuB9vB,EAAG,CAC7D6J,GAAO,IAAI,QAAQ7J,CAAC,CACtB,EACA8vB,EAAY,UAAU,eAAiB,SAAyB30B,EAAWlD,EAAO,CAChF,IAAIqwB,EAAO,KAAK,OAAO,KAAKrwB,CAAK,EACjC,GAAIqwB,IAAS,KAAQ,MAAO,GAC5B,IAAIiD,EAAQjD,EAAK,WACjB,OAAIiD,IAAU,MAAQA,EAAM,YAAYpwB,CAAS,IAAM+F,EAAS,QAElE,EACA4uB,EAAY,UAAU,qBAAuB,UAAiC,CAC5E,QAASC,EAAS,KAAK,OAAO,WAAYA,EAAO,WAAY,CAC3D,IAAIzH,EAAOyH,EAAO,OAClBzH,EAAK,WAAW,sBACjB,CACH,EACAwH,EAAY,UAAU,qBAAuB,SAA+B1hB,EAAI3G,EAAIuoB,EAAKC,EAAK,CAC5F,OAAK7hB,EAAG,OAAO4hB,CAAG,EACdhgB,EAAa,mBAAmB5B,EAAI3G,EAAIwoB,CAAG,IAAMjgB,EAAa,WAAa6d,EAAS,SAASzf,EAAI3G,CAAE,IAAMomB,EAAS,SAASmC,EAAKC,CAAG,EADzG,EAGhC,EACAH,EAAY,UAAU,YAAc,UAAwB,CAC1D,OAAO,KAAK,YACd,EACAA,EAAY,UAAU,WAAa,SAAqB9vB,EAAG,CACzD6J,GAAO,IAAI,MAAM7J,CAAC,CACpB,EACA8vB,EAAY,UAAU,gBAAkB,UAA4B,CAClE,OAAO,KAAK,OAAO,SAAU,CAC/B,EACAA,EAAY,UAAU,wBAA0B,SAAkC1hB,EAAI3G,EAAI,CAGxF,QAFM0F,EAAS,KAEN,EAAI,EAAG,EAAI,KAAK,OAAO,OAAQ,IAAK,CAC3C,IAAI3K,EAAI2K,EAAO,OAAO,IAAI,CAAC,EACvB+iB,EAAS1tB,EAAE,iBAEf,GADI2K,EAAO,qBAAqBiB,EAAI3G,EAAIyoB,EAAO,CAAC,EAAGA,EAAO,CAAC,CAAC,GACxD/iB,EAAO,qBAAqBiB,EAAI3G,EAAIyoB,EAAOA,EAAO,OAAS,CAAC,EAAGA,EAAOA,EAAO,OAAS,CAAC,CAAC,EAAK,OAAO1tB,CACzG,CACD,OAAO,IACT,EACAstB,EAAY,UAAU,WAAa,SAAqBttB,EAAG,CACzD,KAAK,OAAO,IAAIA,CAAC,CACnB,EACAstB,EAAY,UAAU,YAAc,SAAsBttB,EAAG,CAC3D,QAASrJ,EAAI,KAAK,YAAW,EAAG,WAAYA,EAAE,WAAY,CACxD,IAAIg3B,EAAKh3B,EAAE,OACX,GAAIg3B,EAAG,QAAO,IAAO3tB,EAAK,OAAO2tB,CAClC,CACD,OAAO,IACT,EACAL,EAAY,UAAU,SAAW,SAAmBM,EAAY,CAG9D,QAFMjjB,EAAS,KAENoR,EAAK6R,EAAW,SAAQ,EAAI7R,EAAG,WAAY,CAClD,IAAI/b,EAAI+b,EAAG,OACXpR,EAAO,OAAO,IAAI3K,CAAC,EACnB,IAAI6tB,EAAM,IAAIzB,GAAapsB,EAAG,EAAI,EAC9B8tB,EAAM,IAAI1B,GAAapsB,EAAG,EAAK,EACnC6tB,EAAI,OAAOC,CAAG,EACdA,EAAI,OAAOD,CAAG,EACdljB,EAAO,IAAIkjB,CAAG,EACdljB,EAAO,IAAImjB,CAAG,CACf,CACH,EACAR,EAAY,UAAU,IAAM,SAActtB,EAAG,CAC3C,KAAK,OAAO,IAAIA,CAAC,EACjB,KAAK,aAAa,IAAIA,CAAC,CACzB,EACAstB,EAAY,UAAU,SAAW,UAAqB,CACpD,OAAO,KAAK,OAAO,OAAQ,CAC7B,EACAA,EAAY,UAAU,SAAW,SAAmB1hB,EAAI3G,EAAI,CAG1D,QAFM0F,EAAS,KAEN,EAAI,EAAG,EAAI,KAAK,OAAO,OAAQ,IAAK,CAC3C,IAAI3K,EAAI2K,EAAO,OAAO,IAAI,CAAC,EACvB+iB,EAAS1tB,EAAE,iBACf,GAAI4L,EAAG,OAAO8hB,EAAO,CAAC,CAAC,GAAKzoB,EAAG,OAAOyoB,EAAO,CAAC,CAAC,EAAK,OAAO1tB,CAC5D,CACD,OAAO,IACT,EACAstB,EAAY,UAAU,YAAc,UAAwB,CAC1D,MAAO,CAAE,CACX,EACAA,EAAY,UAAU,SAAW,UAAqB,CACpD,OAAOA,CACT,EACAA,EAAY,wBAA0B,SAAkCS,EAAO,CAC7E,QAASR,EAASQ,EAAM,SAAQ,EAAIR,EAAO,WAAY,CACrD,IAAIzH,EAAOyH,EAAO,OAClBzH,EAAK,WAAW,yBACjB,CACH,EAEA,IAAIkI,GAAiB,UAA2B,CAC9C,KAAK,iBAAmB,KACxB,KAAK,WAAa,IAAIna,EACtB,IAAI7J,EAAkB,UAAU,CAAC,EACjC,KAAK,iBAAmBA,CAC1B,EACAgkB,GAAe,UAAU,mBAAqB,SAA6BC,EAAWC,EAAWC,EAAc,CAC7G,QAASpS,EAAKkS,EAAU,SAAQ,EAAIlS,EAAG,WAAY,CACjD,IAAI+N,EAAK/N,EAAG,OACR+N,EAAG,SACLqE,EAAa,IAAIrE,CAAE,EAEnBoE,EAAU,IAAIpE,CAAE,CAEnB,CACH,EACAkE,GAAe,UAAU,gBAAkB,SAA0BE,EAAW,CAI9E,QAHMvjB,EAAS,KAEXyjB,EAAiB,IAAIva,EAChBkI,EAAKmS,EAAU,SAAQ,EAAInS,EAAG,WAAY,CACjD,IAAI+N,EAAK/N,EAAG,OACRyD,EAAOsK,EAAG,UAAUnf,EAAO,gBAAgB,EAC/CyjB,EAAe,IAAI5O,CAAI,CACxB,CACD,OAAO4O,CACT,EACAJ,GAAe,UAAU,eAAiB,SAAyBE,EAAWC,EAAc,CAG1F,QAFMxjB,EAAS,KAENoR,EAAKoS,EAAa,SAAQ,EAAIpS,EAAG,WAAY,CACpD,IAAI+E,EAAO/E,EAAG,OACd,GAAI+E,EAAK,SAAU,IAAK,KAAM,CAC5B,IAAItV,EAAQb,EAAO,uBAAuBmW,EAAMoN,CAAS,EACzD,GAAI1iB,IAAU,KAAQ,MAAM,IAAI0a,GAAkB,mCAAoCpF,EAAK,cAAc,CAAC,CAAC,EAC3GA,EAAK,SAAStV,CAAK,CACpB,CACF,CACH,EACAwiB,GAAe,UAAU,sBAAwB,SAAgCK,EAAcH,EAAWC,EAAc,CAItH,QAHMxjB,EAAS,KAEXsjB,EAAY,IAAIpa,EACXkI,EAAKsS,EAAa,SAAQ,EAAItS,EAAG,WAAY,CACpD,IAAI+N,EAAK/N,EAAG,OACZ,GAAI+N,EAAG,iBAAkB,EAAG,EAAG,CAC7BA,EAAG,qCAAoC,EACvC,IAAIE,EAAeF,EAAG,oBAClBte,EAAQb,EAAO,UAAUqf,CAAY,EACrCxe,IAAU,MACZb,EAAO,kBAAkBa,EAAOwe,CAAY,EAC5CkE,EAAU,IAAI1iB,CAAK,GAEnB2iB,EAAa,OAAOnE,CAAY,CAExC,MACMiE,EAAU,IAAInE,CAAE,CAEnB,CACD,OAAOmE,CACT,EACAD,GAAe,UAAU,cAAgB,SAAwBpmB,EAAG,CAClE,QAASmU,EAAK,KAAK,WAAW,WAAYA,EAAG,WAAY,CACvD,IAAI+N,EAAK/N,EAAG,OACZ,GAAI+N,EAAG,cAAcliB,CAAC,EAAK,MAAO,EACnC,CACD,MAAO,EACT,EACAomB,GAAe,UAAU,sBAAwB,SAAgCM,EAAU,CAIzF,QAHM3jB,EAAS,KAEX0jB,EAAe,IAAIxa,EACdkI,EAAKuS,EAAS,SAAQ,EAAIvS,EAAG,WAAY,CAChD,IAAIyJ,EAAKzJ,EAAG,OACZ,GAAIyJ,EAAG,WAAY,GAAIA,EAAG,SAAQ,EAAG,UAC/BA,EAAG,YAAa,IAAK,KAAM,CAC7B,IAAIsE,EAAK,IAAIC,GAAgBvE,EAAI7a,EAAO,gBAAgB,EACxD0jB,EAAa,IAAIvE,CAAE,EACnBA,EAAG,YAAW,CACf,CAEJ,CACD,OAAOuE,CACT,EACAL,GAAe,UAAU,kBAAoB,SAA4BxiB,EAAOwe,EAAc,CAC5F,QAASjO,EAAKiO,EAAa,SAAQ,EAAIjO,EAAG,WAAY,CACpD,IAAI+N,EAAK/N,EAAG,OACR+N,EAAG,UACLA,EAAG,SAASte,CAAK,CAEpB,CACH,EACAwiB,GAAe,UAAU,YAAc,UAAwB,CAC7D,IAAII,EAAiB,KAAK,gBAAgB,KAAK,UAAU,EACzD,OAAOA,CACT,EACAJ,GAAe,UAAU,uBAAyB,SAAiCO,EAAQL,EAAW,CAMpG,QALIM,EAAWD,EAAO,gBAClBE,EAAUD,EAAS,sBACnBvY,EAASuY,EAAS,eAAe,CAAC,EAClCE,EAAW,KACXC,EAAS,KACJ5S,EAAKmS,EAAU,SAAQ,EAAInS,EAAG,WAAY,CACjD,IAAI6S,EAAW7S,EAAG,OACd8S,EAAUD,EAAS,gBACnBE,EAASD,EAAQ,sBACjBH,IAAa,OAAQC,EAASD,EAAS,cAAe,EAAC,oBAAmB,GAC9E,IAAIK,EAAc,GACdD,EAAO,SAASL,CAAO,GAAKjhB,EAAa,cAAcyI,EAAQ4Y,EAAQ,eAAgB,CAAA,IAAKE,EAAc,IAC1GA,IACEL,IAAa,MAAQC,EAAO,SAASG,CAAM,KAC7CJ,EAAWE,EAGhB,CACD,OAAOF,CACT,EACAV,GAAe,UAAU,UAAY,SAAoBhE,EAAc,CAGrE,QAFIgF,EAAa,EACbxjB,EAAQ,KACHuQ,EAAKiO,EAAa,SAAQ,EAAIjO,EAAG,WAAY,CACpD,IAAI+N,EAAK/N,EAAG,OACP+N,EAAG,WACNte,EAAQse,EACRkF,IAEH,CACD,OAAAhjB,EAAO,OAAOgjB,GAAc,EAAG,0CAA0C,EAClExjB,CACT,EACAwiB,GAAe,UAAU,IAAM,UAAgB,CAC7C,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAIlH,EAAQ,UAAU,CAAC,EACvB,KAAK,IAAIA,EAAM,YAAa,EAAEA,EAAM,SAAQ,CAAE,CAClD,SAAa,UAAU,SAAW,EAAG,CACjC,IAAIwH,EAAW,UAAU,CAAC,EACtBP,EAAQ,UAAU,CAAC,EACvBT,EAAY,wBAAwBS,CAAK,EACzC,IAAIM,EAAe,KAAK,sBAAsBC,CAAQ,EAClDH,EAAe,IAAIta,EACnBoa,EAAY,KAAK,sBAAsBI,EAAc,KAAK,WAAYF,CAAY,EACtF,KAAK,mBAAmBF,EAAW,KAAK,WAAYE,CAAY,EAChE,KAAK,eAAe,KAAK,WAAYA,CAAY,CAClD,CACH,EACAH,GAAe,UAAU,YAAc,UAAwB,CAC7D,MAAO,CAAE,CACX,EACAA,GAAe,UAAU,SAAW,UAAqB,CACvD,OAAOA,EACT,EAEA,IAAIiB,GAAY,UAAsB,GAEtCA,GAAU,UAAU,UAAY,UAAsB,CAAA,EACtDA,GAAU,UAAU,YAAc,UAAwB,CACxD,MAAO,CAAE,CACX,EACAA,GAAU,UAAU,SAAW,UAAqB,CAClD,OAAOA,EACT,EAEA,IAAIC,GAAgB,UAA0B,CAC5C,KAAK,QAAU,KACf,KAAK,MAAQ,KACb,IAAIC,EAAS,UAAU,CAAC,EACpBC,EAAO,UAAU,CAAC,EACtB,KAAK,QAAUD,EACf,KAAK,MAAQC,CACf,EACAF,GAAc,UAAU,QAAU,UAAoB,CACpD,OAAO,KAAK,KACd,EACAA,GAAc,UAAU,UAAY,UAAsB,CACxD,OAAO,KAAK,OACd,EACAA,GAAc,UAAU,YAAc,UAAwB,CAC5D,MAAO,CAACD,GAAW/xB,EAAY,CACjC,EACAgyB,GAAc,UAAU,SAAW,UAAqB,CACtD,OAAOA,EACT,EAEA,IAAIG,GAAgB,UAA0B,CAC5C,KAAK,MAAQ,KACb,KAAK,OAAS,KACd,KAAK,MAAQ,EACb,KAAK,OAAS,IAAIxb,EAClB,KAAK,OAAO,IAAI,IAAI,CACtB,EACAwb,GAAc,UAAU,KAAO,UAAiB,CAC9C,GAAI,KAAK,UAAa,OAAO,KAC7B,IAAIC,EAAU,KAAK,OAAO,IAAI,CAAC,EAC/B,YAAK,OAAO,IAAI,EAAG,KAAK,OAAO,IAAI,KAAK,KAAK,CAAC,EAC9C,KAAK,OAAS,EACd,KAAK,QAAQ,CAAC,EACPA,CACT,EACAD,GAAc,UAAU,KAAO,UAAiB,CAC9C,OAAO,KAAK,KACd,EACAA,GAAc,UAAU,QAAU,SAAkBvO,EAAM,CAKxD,QAJMnW,EAAS,KAEX4kB,EAAQ,KACR5Y,EAAM,KAAK,OAAO,IAAImK,CAAI,EACvBA,EAAO,GAAK,KAAK,QACtByO,EAAQzO,EAAO,EACXyO,IAAU5kB,EAAO,OAASA,EAAO,OAAO,IAAI4kB,EAAQ,CAAC,EAAE,UAAU5kB,EAAO,OAAO,IAAI4kB,CAAK,CAAC,EAAI,GAAKA,IAClG5kB,EAAO,OAAO,IAAI4kB,CAAK,EAAE,UAAU5Y,CAAG,EAAI,GAHjBmK,EAAOyO,EAGe5kB,EAAO,OAAO,IAAImW,EAAMnW,EAAO,OAAO,IAAI4kB,CAAK,CAAC,EAErG,KAAK,OAAO,IAAIzO,EAAMnK,CAAG,CAC3B,EACA0Y,GAAc,UAAU,MAAQ,UAAkB,CAChD,KAAK,MAAQ,EACb,KAAK,OAAO,OACd,EACAA,GAAc,UAAU,QAAU,UAAoB,CACpD,OAAO,KAAK,QAAU,CACxB,EACAA,GAAc,UAAU,IAAM,SAAcn4B,EAAG,CAC3C,IAAIyT,EAAS,KAEf,KAAK,OAAO,IAAI,IAAI,EACpB,KAAK,OAAS,EACd,IAAImW,EAAO,KAAK,MAEhB,IADA,KAAK,OAAO,IAAI,EAAG5pB,CAAC,EACbA,EAAE,UAAU,KAAK,OAAO,IAAI,KAAK,MAAM4pB,EAAO,CAAC,CAAC,CAAC,EAAI,EAAGA,GAAQ,EACrEnW,EAAO,OAAO,IAAImW,EAAMnW,EAAO,OAAO,IAAI,KAAK,MAAMmW,EAAO,CAAC,CAAC,CAAC,EAEjE,KAAK,OAAO,IAAIA,EAAM5pB,CAAC,CACzB,EACAm4B,GAAc,UAAU,YAAc,UAAwB,CAC5D,MAAO,CAAE,CACX,EACAA,GAAc,UAAU,SAAW,UAAqB,CACtD,OAAOA,EACT,EAEA,IAAIG,GAAc,UAAwB,GAE1CA,GAAY,UAAU,UAAY,SAAoBJ,EAAM,CAAA,EAC5DI,GAAY,UAAU,YAAc,UAAwB,CAC1D,MAAO,CAAE,CACX,EACAA,GAAY,UAAU,SAAW,UAAqB,CACpD,OAAOA,EACT,EAEA,IAAIC,GAAe,UAAyB,GAE5CA,GAAa,UAAU,OAAS,SAAiBC,EAASN,EAAM,GAChEK,GAAa,UAAU,OAAS,SAAiBC,EAASN,EAAM,GAChEK,GAAa,UAAU,MAAQ,UAAkB,CAOjD,EACAA,GAAa,UAAU,YAAc,UAAwB,CAC3D,MAAO,CAAE,CACX,EACAA,GAAa,UAAU,SAAW,UAAqB,CACrD,OAAOA,EACT,EAEA,IAAIE,GAAe,UAAyB,CAI1C,GAHA,KAAK,iBAAmB,IAAI9b,EAC5B,KAAK,QAAU,KACf,KAAK,OAAS,KACV,UAAU,SAAW,GAAW,GAAI,UAAU,SAAW,EAAG,CAC9D,IAAI+b,EAAQ,UAAU,CAAC,EACvB,KAAK,OAASA,CACf,EACH,EAEIC,GAAqB,CAAE,iBAAkB,CAAE,aAAc,EAAM,CAAA,EACnEF,GAAa,UAAU,SAAW,UAAqB,CACrD,OAAO,KAAK,MACd,EACAA,GAAa,UAAU,KAAO,UAAiB,CAC7C,OAAO,KAAK,iBAAiB,KAAM,CACrC,EACAA,GAAa,UAAU,mBAAqB,UAA+B,CACzE,OAAO,KAAK,gBACd,EACAA,GAAa,UAAU,kBAAoB,SAA4BG,EAAgB,CACrF9jB,EAAO,OAAO,KAAK,UAAY,IAAI,EACnC,KAAK,iBAAiB,IAAI8jB,CAAc,CAC1C,EACAH,GAAa,UAAU,QAAU,UAAoB,CACnD,OAAO,KAAK,iBAAiB,QAAS,CACxC,EACAA,GAAa,UAAU,UAAY,UAAsB,CACvD,OAAI,KAAK,UAAY,OACnB,KAAK,QAAU,KAAK,iBAEf,KAAK,OACd,EACAA,GAAa,UAAU,YAAc,UAAwB,CAC3D,MAAO,CAACV,GAAW/xB,EAAY,CACjC,EACAyyB,GAAa,UAAU,SAAW,UAAqB,CACrD,OAAOA,EACT,EACAE,GAAmB,iBAAiB,IAAM,UAAY,CAAE,MAAO,mBAAmB,EAElF,OAAO,iBAAkBF,GAAcE,IAEvC,IAAIE,GAAc,UAAwB,GAE1CA,GAAY,aAAe,UAAyB,CAClD,MAAO,CACL,QAAS,SAAkBxxB,EAAGC,EAAG,CAC/B,OAAOA,EAAE,UAAUD,CAAC,CACrB,CACF,CACH,EACAwxB,GAAY,IAAM,SAAc93B,EAAG,CACjC,OAAA83B,GAAY,KAAK93B,CAAC,EACXA,EAAE,IAAI,CAAC,CAChB,EACA83B,GAAY,KAAO,SAAe93B,EAAGmF,EAAG,CACtC,IAAImB,EAAItG,EAAE,UACNmF,EACFmc,GAAO,KAAKhb,EAAGnB,CAAC,EAEhBmc,GAAO,KAAKhb,CAAC,EAGf,QADI,EAAItG,EAAE,WACDslB,EAAM,EAAGyS,EAAOzxB,EAAE,OAAQgf,EAAMyS,EAAMzS,IAC7C,EAAE,KAAI,EACN,EAAE,IAAIhf,EAAEgf,CAAG,CAAC,CAEhB,EACAwS,GAAY,cAAgB,SAAwBvyB,EAAG,CACrD,IAAI4W,EAAY,IAAIP,EACpB,OAAAO,EAAU,IAAI5W,CAAC,EACR4W,CACT,EAEA,IAAI6b,GAAgB,UAA0B,CAC5C,KAAK,YAAc,KACnB,KAAK,YAAc,KACnB,KAAK,UAAY,KACjB,KAAK,cAAgB,KACrB,IAAIC,EAAa,UAAU,CAAC,EACxBC,EAAa,UAAU,CAAC,EACxBC,EAAe,UAAU,CAAC,EAC9B,KAAK,YAAcF,EACnB,KAAK,YAAcC,EACnB,KAAK,cAAgBC,EACrB,KAAK,UAAY,KAAK,UACxB,EACAH,GAAc,UAAU,cAAgB,SAAwBI,EAAMte,EAAa,CACjF,IAAIue,EAAUL,GAAc,YAAY,KAAK,WAAW,EACpDM,EAAUN,GAAc,YAAY,KAAK,WAAW,EACxD,GAAIK,GAAWC,EACb,OAAIN,GAAc,KAAK,KAAK,WAAW,EAAIA,GAAc,KAAK,KAAK,WAAW,GAC5E,KAAK,OAAO,KAAK,YAAa,KAAK,YAAaI,EAAMte,CAAW,EAC1D,OAEP,KAAK,OAAO,KAAK,YAAa,KAAK,YAAase,EAAMte,CAAW,EAC1D,MAEJ,GAAIue,EACT,YAAK,OAAO,KAAK,YAAa,KAAK,YAAaD,EAAMte,CAAW,EAC1D,KACF,GAAIwe,EACT,YAAK,OAAO,KAAK,YAAa,KAAK,YAAaF,EAAMte,CAAW,EAC1D,KAET,MAAM,IAAItV,EAAyB,gCAAgC,CACrE,EACAwzB,GAAc,UAAU,SAAW,UAAqB,CACtD,MAAO,EAAEA,GAAc,YAAY,KAAK,WAAW,GAAKA,GAAc,YAAY,KAAK,WAAW,EACpG,EACAA,GAAc,UAAU,UAAY,SAAoBzyB,EAAG,CACzD,IAAIgzB,EAAKhzB,EACT,OAAI,KAAK,UAAYgzB,EAAG,UAAoB,GACxC,KAAK,UAAYA,EAAG,UAAoB,EACrC,CACT,EACAP,GAAc,UAAU,OAAS,SAAiBQ,EAAcC,EAAUL,EAAMte,EAAa,CAI3F,QAHMpH,EAAS,KAEXgmB,EAAWF,EAAa,qBACnB95B,EAAIg6B,EAAS,SAAQ,EAAIh6B,EAAE,WAAY,CAC9C,IAAI44B,EAAQ54B,EAAE,OACVi6B,EAAK,IAAIX,GAAcV,EAAOmB,EAAU/lB,EAAO,aAAa,EAC5DimB,EAAG,YAAa,EAAG7e,GACrBse,EAAK,IAAIO,CAAE,CAEd,CACH,EACAX,GAAc,UAAU,aAAe,SAAuBt5B,EAAG,CAC/D,OAAIA,IAAM,EAAY,KAAK,YACpB,KAAK,WACd,EACAs5B,GAAc,UAAU,YAAc,UAAwB,CAC5D,OAAO,KAAK,SACd,EACAA,GAAc,UAAU,SAAW,UAAqB,CACtD,OAAI,KAAK,WACA,KAAK,cAAc,SAAS,KAAK,YAAa,KAAK,WAAW,EAEhE,KAAK,YAAY,UAAW,EAAC,SAAS,KAAK,YAAY,WAAW,CAC3E,EACAA,GAAc,UAAU,YAAc,UAAwB,CAC5D,MAAO,CAAClzB,EAAU,CACpB,EACAkzB,GAAc,UAAU,SAAW,UAAqB,CACtD,OAAOA,EACT,EACAA,GAAc,KAAO,SAAezxB,EAAG,CACrC,OAAOA,EAAE,UAAW,EAAC,QAAS,CAChC,EACAyxB,GAAc,YAAc,SAAsBb,EAAM,CACtD,OAAOA,aAAgBO,EACzB,EAEA,IAAIkB,GAAkB,SAASA,GAAmB,CAKhD,GAJA,KAAK,MAAQ,KACb,KAAK,OAAS,GACd,KAAK,gBAAkB,IAAIhd,EAC3B,KAAK,cAAgB,KACjB,UAAU,SAAW,EAAG,CAC1B,IAAIid,EAAeD,EAAgB,sBACnC,KAAK,cAAgBC,CACzB,SAAa,UAAU,SAAW,EAAG,CACjC,IAAIC,EAAiB,UAAU,CAAC,EAChC/kB,EAAO,OAAO+kB,EAAiB,EAAG,sCAAsC,EACxE,KAAK,cAAgBA,CACtB,CACH,EAEIC,GAAqB,CAAE,aAAc,CAAE,aAAc,EAAM,EAAC,iBAAkB,CAAE,aAAc,EAAM,EAAC,sBAAuB,CAAE,aAAc,EAAM,CAAA,EACtJH,GAAgB,UAAU,gBAAkB,UAA4B,CACtE,OAAO,KAAK,aACd,EACAA,GAAgB,UAAU,SAAW,SAAmB9C,EAAO,CAC7D,OAAOA,EAAM,IAAIA,EAAM,KAAI,EAAK,CAAC,CACnC,EACA8C,GAAgB,UAAU,KAAO,UAAiB,CAC9C,IAAIlmB,EAAS,KAEf,GAAI,UAAU,SAAW,EACvB,OAAI,KAAK,UACA,GAET,KAAK,MAAK,EACH,KAAK,KAAK,KAAK,KAAK,GACtB,GAAI,UAAU,SAAW,EAAG,CAGjC,QAFImb,EAAO,UAAU,CAAC,EAClBtQ,EAAO,EACF,EAAIsQ,EAAK,mBAAkB,EAAG,WAAY,EAAE,WAAY,CAC/D,IAAIgK,EAAiB,EAAE,OACnBA,aAA0BH,GAC5Bna,GAAQ7K,EAAO,KAAKmlB,CAAc,EACzBA,aAA0BZ,KACnC1Z,GAAQ,EAEX,CACD,OAAOA,CACR,CACH,EACAqb,GAAgB,UAAU,WAAa,SAAqB/K,EAAMsJ,EAAM,CAEtE,QADI6B,EAAgB,KACX,EAAInL,EAAK,mBAAkB,EAAG,WAAY,EAAE,WAAY,CAC/D,IAAIgK,EAAiB,EAAE,OACnBA,aAA0BZ,IACxBY,EAAe,QAAS,IAAKV,IAAQ6B,EAAgBnB,EAE5D,CACD,OAAImB,IAAkB,MACpBnL,EAAK,mBAAkB,EAAG,OAAOmL,CAAa,EACvC,IAEF,EACT,EACAJ,GAAgB,UAAU,UAAY,UAAsB,CACxD,IAAIlmB,EAAS,KAEf,GAAI,UAAU,SAAW,EAAG,CAC1B,KAAK,MAAK,EACV,IAAIumB,EAAa,KAAK,UAAU,KAAK,KAAK,EAC1C,OAAIA,IAAe,KAAe,IAAIrd,EAC/Bqd,CACX,SAAa,UAAU,SAAW,EAAG,CAGjC,QAFIpL,EAAO,UAAU,CAAC,EAClBqL,EAAoB,IAAItd,EACnBld,EAAImvB,EAAK,mBAAkB,EAAG,WAAYnvB,EAAE,WAAY,CAC/D,IAAIm5B,EAAiBn5B,EAAE,OACvB,GAAIm5B,aAA0BH,GAAc,CAC1C,IAAIyB,EAAqBzmB,EAAO,UAAUmlB,CAAc,EACpDsB,IAAuB,MAAQD,EAAkB,IAAIC,CAAkB,CACnF,MAAiBtB,aAA0BZ,GACnCiC,EAAkB,IAAIrB,EAAe,QAAS,CAAA,EAE9C9jB,EAAO,qBAAoB,CAE9B,CACD,OAAImlB,EAAkB,KAAI,GAAM,EAAY,KACrCA,CACR,CACH,EACAN,GAAgB,UAAU,OAAS,SAAiB1B,EAAQC,EAAM,CAChEpjB,EAAO,OAAO,CAAC,KAAK,OAAQ,wEAAwE,EACpG,KAAK,gBAAgB,IAAI,IAAIkjB,GAAcC,EAAQC,CAAI,CAAC,CAC1D,EACAyB,GAAgB,UAAU,kBAAoB,UAA8B,CACxE,IAAIlmB,EAAS,KAEf,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAIilB,EAAQ,UAAU,CAAC,EACnByB,EAAa,IAAIxd,EACrB,YAAK,kBAAkB+b,EAAO,KAAK,MAAOyB,CAAU,EAC7CA,CACX,SAAa,UAAU,SAAW,EAAG,CACjC,IAAIC,EAAU,UAAU,CAAC,EACrBC,EAAM,UAAU,CAAC,EACjBC,EAAe,UAAU,CAAC,EAE9B,GADAxlB,EAAO,OAAOslB,EAAU,EAAE,EACtBC,EAAI,SAAU,IAAKD,EACrB,OAAAE,EAAa,IAAID,CAAG,EACb,KAET,QAAS56B,EAAI46B,EAAI,mBAAkB,EAAG,WAAY56B,EAAE,WAAY,CAC9D,IAAI86B,EAAY96B,EAAE,OACd86B,aAAqB9B,GACvBhlB,EAAO,kBAAkB2mB,EAASG,EAAWD,CAAY,GAEzDxlB,EAAO,OAAOylB,aAAqBvC,EAAa,EAC5CoC,IAAY,IACdE,EAAa,IAAIC,CAAS,EAG/B,CACD,OAAO,IACR,CACH,EACAZ,GAAgB,UAAU,MAAQ,UAAkB,CAChD,IAAIlmB,EAAS,KAEf,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAI+mB,EAAe,UAAU,CAAC,EAC9B,KAAK,MAAK,EACV,IAAIvnB,EAAU,IAAI0J,EAClB,OAAI,KAAK,WAGL,KAAK,gBAAe,EAAG,WAAW,KAAK,MAAM,YAAa6d,CAAY,GACxE,KAAK,MAAMA,EAAc,KAAK,MAAOvnB,CAAO,EAEvCA,CACX,SAAa,UAAU,SAAW,EAAG,CACjC,IAAIwnB,EAAiB,UAAU,CAAC,EAC5BC,EAAU,UAAU,CAAC,EAEzB,GADA,KAAK,MAAK,EACN,KAAK,UACP,OAAO,KAEL,KAAK,gBAAe,EAAG,WAAW,KAAK,MAAM,YAAaD,CAAc,GAC1E,KAAK,MAAMA,EAAgB,KAAK,MAAOC,CAAO,CAEpD,SAAa,UAAU,SAAW,GAC9B,GAAI/yB,EAAa,UAAU,CAAC,EAAG2wB,EAAW,GAAM,UAAU,CAAC,YAAa,QAAU,UAAU,CAAC,YAAaG,GAKxG,QAJIkC,EAAiB,UAAU,CAAC,EAC5B/L,EAAO,UAAU,CAAC,EAClBgM,EAAY,UAAU,CAAC,EACvBC,EAAkBjM,EAAK,qBAClBnvB,EAAI,EAAGA,EAAIo7B,EAAgB,KAAI,EAAIp7B,IAAK,CAC/C,IAAIm5B,EAAiBiC,EAAgB,IAAIp7B,CAAC,EACrCgU,EAAO,kBAAkB,WAAWmlB,EAAe,UAAS,EAAI+B,CAAc,IAG/E/B,aAA0BH,GAC5BhlB,EAAO,MAAMknB,EAAgB/B,EAAgBgC,CAAS,EAC7ChC,aAA0BZ,GACnC4C,EAAU,UAAUhC,EAAe,QAAS,CAAA,EAE5C9jB,EAAO,qBAAoB,EAE9B,SACQnN,EAAa,UAAU,CAAC,EAAG6U,EAAI,GAAM,UAAU,CAAC,YAAa,QAAU,UAAU,CAAC,YAAaic,GAKxG,QAJIqC,EAAiB,UAAU,CAAC,EAC5B7G,EAAS,UAAU,CAAC,EACpB8G,EAAY,UAAU,CAAC,EACvBC,EAAoB/G,EAAO,qBACtB5a,EAAM,EAAGA,EAAM2hB,EAAkB,KAAI,EAAI3hB,IAAO,CACvD,IAAI4hB,EAAmBD,EAAkB,IAAI3hB,CAAG,EAC3C5F,EAAO,kBAAkB,WAAWwnB,EAAiB,UAAS,EAAIH,CAAc,IAGjFG,aAA4BxC,GAC9BhlB,EAAO,MAAMqnB,EAAgBG,EAAkBF,CAAS,EAC/CE,aAA4BjD,GACrC+C,EAAU,IAAIE,EAAiB,QAAS,CAAA,EAExCnmB,EAAO,qBAAoB,EAE9B,EAGP,EACA6kB,GAAgB,UAAU,MAAQ,UAAkB,CAClD,GAAI,KAAK,OAAU,OAAO,KAC1B,KAAK,MAAQ,KAAK,gBAAgB,QAAO,EAAK,KAAK,WAAW,CAAC,EAAI,KAAK,mBAAmB,KAAK,gBAAiB,EAAE,EACnH,KAAK,gBAAkB,KACvB,KAAK,OAAS,EAChB,EACAA,GAAgB,UAAU,QAAU,UAAoB,CACtD,YAAK,MAAK,EACH,KAAK,KACd,EACAA,GAAgB,UAAU,OAAS,UAAmB,CAClD,IAAIlmB,EAAS,KAEf,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAI+mB,EAAe,UAAU,CAAC,EAC1BtC,EAAO,UAAU,CAAC,EAEtB,OADA,KAAK,MAAK,EACN,KAAK,gBAAe,EAAG,WAAW,KAAK,MAAM,YAAasC,CAAY,EACjE,KAAK,OAAOA,EAAc,KAAK,MAAOtC,CAAI,EAE5C,EACX,SAAa,UAAU,SAAW,EAAG,CACjC,IAAIuC,EAAiB,UAAU,CAAC,EAC5B7L,EAAO,UAAU,CAAC,EAClBsM,EAAS,UAAU,CAAC,EACpBle,EAAQ,KAAK,WAAW4R,EAAMsM,CAAM,EACxC,GAAIle,EAAS,MAAO,GAEpB,QADIme,EAAe,KACV17B,EAAImvB,EAAK,mBAAkB,EAAG,WAAYnvB,EAAE,WAAY,CAC/D,IAAIm5B,EAAiBn5B,EAAE,OACvB,GAAKgU,EAAO,kBAAkB,WAAWmlB,EAAe,UAAS,EAAI6B,CAAc,GAG/E7B,aAA0BH,KAC5Bzb,EAAQvJ,EAAO,OAAOgnB,EAAgB7B,EAAgBsC,CAAM,EACxDle,GAAO,CACTme,EAAevC,EACf,KACD,CAEJ,CACD,OAAIuC,IAAiB,MACfA,EAAa,qBAAqB,WACpCvM,EAAK,mBAAkB,EAAG,OAAOuM,CAAY,EAG1Cne,CACR,CACH,EACA2c,GAAgB,UAAU,mBAAqB,SAA6ByB,EAAoB1C,EAAO,CACrG5jB,EAAO,OAAO,CAACsmB,EAAmB,QAAS,CAAA,EAC3C,IAAIC,EAAmB,KAAK,uBAAuBD,EAAoB1C,EAAQ,CAAC,EAChF,OAAI2C,EAAiB,KAAM,IAAK,EACvBA,EAAiB,IAAI,CAAC,EAExB,KAAK,mBAAmBA,EAAkB3C,EAAQ,CAAC,CAC5D,EACAiB,GAAgB,UAAU,MAAQ,UAAkB,CAChD,IAAIlmB,EAAS,KAEf,GAAI,UAAU,SAAW,EACvB,OAAI,KAAK,UACA,GAET,KAAK,MAAK,EACH,KAAK,MAAM,KAAK,KAAK,GACvB,GAAI,UAAU,SAAW,EAAG,CAGjC,QAFImb,EAAO,UAAU,CAAC,EAClB0M,EAAgB,EACX,EAAI1M,EAAK,mBAAkB,EAAG,WAAY,EAAE,WAAY,CAC/D,IAAIgK,EAAiB,EAAE,OACvB,GAAIA,aAA0BH,GAAc,CAC1C,IAAI8C,EAAa9nB,EAAO,MAAMmlB,CAAc,EACxC2C,EAAaD,IAAiBA,EAAgBC,EACnD,CACF,CACD,OAAOD,EAAgB,CACxB,CACH,EACA3B,GAAgB,UAAU,uBAAyB,SAAiCkB,EAAiBW,EAAU,CAC3G,IAAI/nB,EAAS,KAEfqB,EAAO,OAAO,CAAC+lB,EAAgB,QAAS,CAAA,EACxC,IAAIQ,EAAmB,IAAI1e,EAC3B0e,EAAiB,IAAI,KAAK,WAAWG,CAAQ,CAAC,EAC9C,IAAIC,EAAwB,IAAI9e,EAAUke,CAAe,EACzDhC,GAAY,KAAK4C,EAAuB,KAAK,cAAe,CAAA,EAC5D,QAASh8B,EAAIg8B,EAAsB,SAAQ,EAAIh8B,EAAE,WAAY,CAC3D,IAAIm5B,EAAiBn5B,EAAE,OACnBgU,EAAO,SAAS4nB,CAAgB,EAAE,mBAAoB,EAAC,KAAM,IAAK5nB,EAAO,mBAC3E4nB,EAAiB,IAAI5nB,EAAO,WAAW+nB,CAAQ,CAAC,EAElD/nB,EAAO,SAAS4nB,CAAgB,EAAE,kBAAkBzC,CAAc,CACnE,CACD,OAAOyC,CACT,EACA1B,GAAgB,UAAU,QAAU,UAAoB,CACtD,OAAK,KAAK,OACH,KAAK,MAAM,QAAS,EADA,KAAK,gBAAgB,SAElD,EACAA,GAAgB,UAAU,YAAc,UAAwB,CAC9D,MAAO,CAAC3zB,EAAY,CACtB,EACA2zB,GAAgB,UAAU,SAAW,UAAqB,CACxD,OAAOA,EACT,EACAA,GAAgB,eAAiB,SAAyBtyB,EAAGC,EAAG,CAC9D,OAAOD,EAAIC,EAAI,EAAID,EAAIC,EAAI,GAAK,CAClC,EACAwyB,GAAmB,aAAa,IAAM,UAAY,CAAE,OAAO4B,EAAY,EACvE5B,GAAmB,iBAAiB,IAAM,UAAY,CAAE,MAAO,mBAAoB,EACnFA,GAAmB,sBAAsB,IAAM,UAAY,CAAE,MAAO,GAAE,EAEtE,OAAO,iBAAkBH,GAAiBG,IAE1C,IAAI4B,GAAe,UAAyB,GAExCC,GAAe,UAAyB,GAE5CA,GAAa,UAAU,SAAW,SAAmBC,EAAOC,EAAO,GACnEF,GAAa,UAAU,YAAc,UAAwB,CAC3D,MAAO,CAAE,CACX,EACAA,GAAa,UAAU,SAAW,UAAqB,CACrD,OAAOA,EACT,EAEA,IAAIG,GAAW,SAAUC,EAAoB,CAC3C,SAASD,EAASlC,EAAc,CAC9BA,EAAeA,GAAgBkC,EAAQ,sBACvCC,EAAmB,KAAK,KAAMnC,CAAY,CAC3C,CAEImC,IAAqBD,EAAQ,UAAYC,GAC9CD,EAAQ,UAAY,OAAO,OAAQC,GAAsBA,EAAmB,WAC5ED,EAAQ,UAAU,YAAcA,EAEhC,IAAI31B,EAAkB,CAAE,YAAa,CAAE,aAAc,EAAM,EAAC,iBAAkB,CAAE,aAAc,EAAI,EAAG,YAAa,CAAE,aAAc,IAAO,YAAa,CAAE,aAAc,EAAM,EAAC,aAAc,CAAE,aAAc,EAAI,EAAG,sBAAuB,CAAE,aAAc,EAAM,CAAA,EAC/P,OAAA21B,EAAQ,UAAU,yCAA2C,SAAmDE,EAAgBR,EAAU,CACxI,IAAI/nB,EAAS,KAEbqB,EAAO,OAAOknB,EAAe,OAAS,CAAC,EAEvC,QADIX,EAAmB,IAAI1e,EAClBld,EAAI,EAAGA,EAAIu8B,EAAe,OAAQv8B,IACzC47B,EAAiB,OAAO5nB,EAAO,wCAAwCuoB,EAAev8B,CAAC,EAAG+7B,CAAQ,CAAC,EAErG,OAAOH,CACX,EACES,EAAQ,UAAU,WAAa,SAAqBpD,EAAO,CACzD,OAAO,IAAIuD,GAAYvD,CAAK,CAChC,EACEoD,EAAQ,UAAU,KAAO,UAAiB,CACxC,OAAI,UAAU,SAAW,EAChBC,EAAmB,UAAU,KAAK,KAAK,IAAI,EACpCA,EAAmB,UAAU,KAAK,MAAM,KAAM,SAAS,CAC3E,EACED,EAAQ,UAAU,OAAS,UAAmB,CAC5C,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAItD,EAAU,UAAU,CAAC,EACrBN,EAAO,UAAU,CAAC,EACtB,GAAIM,EAAQ,SACV,OAAO,KAETuD,EAAmB,UAAU,OAAO,KAAK,KAAMvD,EAASN,CAAI,CAClE,KAAa,QAAO6D,EAAmB,UAAU,OAAO,MAAM,KAAM,SAAS,CAC7E,EACED,EAAQ,UAAU,gBAAkB,UAA4B,CAC9D,OAAOA,EAAQ,YACnB,EACEA,EAAQ,UAAU,eAAiB,SAAyBjB,EAAiBqB,EAAY,CAIvF,QAHIC,EAAgB,KAAK,MAAM,KAAK,KAAKtB,EAAgB,KAAI,EAAKqB,CAAU,CAAC,EACzEE,EAAS,IAAI,MAAMF,CAAU,EAAE,KAAK,IAAI,EACxCz8B,EAAIo7B,EAAgB,WACf7+B,EAAI,EAAGA,EAAIkgC,EAAYlgC,IAAK,CACnCogC,EAAOpgC,CAAC,EAAI,IAAI2gB,EAEhB,QADI0f,EAAyB,EACtB58B,EAAE,WAAa48B,EAAyBF,GAAe,CAC5D,IAAIvD,EAAiBn5B,EAAE,OACvB28B,EAAOpgC,CAAC,EAAE,IAAI48B,CAAc,EAC5ByD,GACD,CACF,CACD,OAAOD,CACX,EACEN,EAAQ,UAAU,MAAQ,UAAkB,CAC1C,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAIQ,EAAY,UAAU,CAAC,EAC3B,OAAOP,EAAmB,UAAU,MAAM,KAAK,KAAMO,CAAS,CACpE,SAAe,UAAU,SAAW,EAAG,CACjC,IAAIC,EAAc,UAAU,CAAC,EACzB7B,EAAU,UAAU,CAAC,EACzBqB,EAAmB,UAAU,MAAM,KAAK,KAAMQ,EAAa7B,CAAO,CACxE,SAAe,UAAU,SAAW,GAC9B,GAAI/yB,EAAa,UAAU,CAAC,EAAG2wB,EAAW,GAAM,UAAU,CAAC,YAAa,QAAU,UAAU,CAAC,YAAaG,GAAe,CACvH,IAAI+B,EAAe,UAAU,CAAC,EAC1B5L,EAAO,UAAU,CAAC,EAClBgM,EAAY,UAAU,CAAC,EAC3BmB,EAAmB,UAAU,MAAM,KAAK,KAAMvB,EAAc5L,EAAMgM,CAAS,CAC5E,SAAUjzB,EAAa,UAAU,CAAC,EAAG6U,EAAI,GAAM,UAAU,CAAC,YAAa,QAAU,UAAU,CAAC,YAAaic,GAAe,CACvH,IAAIgC,EAAiB,UAAU,CAAC,EAC5BxG,EAAS,UAAU,CAAC,EACpBhhB,EAAU,UAAU,CAAC,EACzB8oB,EAAmB,UAAU,MAAM,KAAK,KAAMtB,EAAgBxG,EAAQhhB,CAAO,CAC9E,EAEP,EACE6oB,EAAQ,UAAU,cAAgB,UAA0B,CAC1D,OAAOA,EAAQ,WACnB,EACEA,EAAQ,UAAU,wCAA0C,SAAkDjB,EAAiBW,EAAU,CACvI,OAAOO,EAAmB,UAAU,uBAAuB,KAAK,KAAMlB,EAAiBW,CAAQ,CACnG,EACEM,EAAQ,UAAU,OAAS,UAAmB,CAC5C,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAItD,EAAU,UAAU,CAAC,EACrBN,EAAO,UAAU,CAAC,EACtB,OAAO6D,EAAmB,UAAU,OAAO,KAAK,KAAMvD,EAASN,CAAI,CACzE,KAAa,QAAO6D,EAAmB,UAAU,OAAO,MAAM,KAAM,SAAS,CAC7E,EACED,EAAQ,UAAU,MAAQ,UAAkB,CAC1C,OAAI,UAAU,SAAW,EAChBC,EAAmB,UAAU,MAAM,KAAK,IAAI,EACrCA,EAAmB,UAAU,MAAM,MAAM,KAAM,SAAS,CAC5E,EACED,EAAQ,UAAU,uBAAyB,SAAiCjB,EAAiBW,EAAU,CACrG1mB,EAAO,OAAO,CAAC+lB,EAAgB,QAAS,CAAA,EACxC,IAAI2B,EAAe,KAAK,MAAM,KAAK,KAAK3B,EAAgB,OAAS,KAAK,gBAAe,CAAE,CAAC,EACpFY,EAAwB,IAAI9e,EAAUke,CAAe,EACzDhC,GAAY,KAAK4C,EAAuBK,EAAQ,WAAW,EAC3D,IAAIE,EAAiB,KAAK,eAAeP,EAAuB,KAAK,MAAM,KAAK,KAAK,KAAK,KAAKe,CAAY,CAAC,CAAC,CAAC,EAC9G,OAAO,KAAK,yCAAyCR,EAAgBR,CAAQ,CACjF,EACEM,EAAQ,UAAU,iBAAmB,UAA6B,CAChE,GAAI,UAAU,SAAW,GACvB,GAAIn0B,EAAa,UAAU,CAAC,EAAGg0B,EAAY,EAAG,CAC5C,IAAIc,EAAW,UAAU,CAAC,EACtB/C,EAAK,IAAIX,GAAc,KAAK,QAAS,EAAE,KAAK,UAAW0D,CAAQ,EACnE,OAAO,KAAK,iBAAiB/C,CAAE,CAChC,SAAU,UAAU,CAAC,YAAaX,GAAe,CAChD,IAAI2D,EAAc,UAAU,CAAC,EAC7B,OAAO,KAAK,iBAAiBA,EAAah3B,EAAO,iBAAiB,CACnE,UACQ,UAAU,SAAW,GAC9B,GAAI,UAAU,CAAC,YAAao2B,GAAWn0B,EAAa,UAAU,CAAC,EAAGg0B,EAAY,EAAG,CAC/E,IAAIgB,EAAO,UAAU,CAAC,EAClBC,EAAa,UAAU,CAAC,EACxBC,EAAO,IAAI9D,GAAc,KAAK,QAAS,EAAE4D,EAAK,UAAWC,CAAU,EACvE,OAAO,KAAK,iBAAiBC,CAAI,CACzC,SAAiB,UAAU,CAAC,YAAa9D,IAAiB,OAAO,UAAU,CAAC,GAAM,SAAU,CACpF,IAAI+D,EAAgB,UAAU,CAAC,EAC3BC,EAAc,UAAU,CAAC,EACzBC,EAAqBD,EACrBE,EAAU,KACV9D,EAAO,IAAIhB,GAEf,IADAgB,EAAK,IAAI2D,CAAa,EACf,CAAC3D,EAAK,WAAa6D,EAAqB,GAAK,CAClD,IAAIE,EAAU/D,EAAK,OACfgE,EAAkBD,EAAQ,cAC9B,GAAIC,GAAmBH,EAAsB,MACzCE,EAAQ,YACVF,EAAqBG,EACrBF,EAAUC,GAEVA,EAAQ,cAAc/D,EAAM6D,CAAkB,CAEjD,CACD,MAAO,CAACC,EAAQ,aAAa,CAAC,EAAE,UAAWA,EAAQ,aAAa,CAAC,EAAE,QAAO,CAAE,CAC7E,UACQ,UAAU,SAAW,EAAG,CACjC,IAAIltB,EAAM,UAAU,CAAC,EACjBmoB,EAAO,UAAU,CAAC,EAClBkF,EAAa,UAAU,CAAC,EACxBC,EAAM,IAAIrF,GAAcjoB,EAAKmoB,CAAI,EACjCoF,GAAO,IAAIvE,GAAc,KAAK,UAAWsE,EAAKD,CAAU,EAC5D,OAAO,KAAK,iBAAiBE,EAAI,EAAE,CAAC,CACrC,CACL,EACExB,EAAQ,UAAU,YAAc,UAAwB,CACtD,MAAO,CAACvD,GAAcvyB,EAAY,CACtC,EACE81B,EAAQ,UAAU,SAAW,UAAqB,CAChD,OAAOA,CACX,EACEA,EAAQ,QAAU,SAAkBhzB,EAAG,CACrC,OAAOgzB,EAAQ,IAAIhzB,EAAE,QAAO,EAAIA,EAAE,SAAS,CAC/C,EACEgzB,EAAQ,IAAM,SAAcz0B,EAAGC,EAAG,CAChC,OAAQD,EAAIC,GAAK,CACrB,EACEw0B,EAAQ,QAAU,SAAkBhzB,EAAG,CACrC,OAAOgzB,EAAQ,IAAIhzB,EAAE,QAAO,EAAIA,EAAE,SAAS,CAC/C,EACE3C,EAAgB,YAAY,IAAM,UAAY,CAAE,OAAO81B,EAAW,EAClE91B,EAAgB,iBAAiB,IAAM,UAAY,CAAE,MAAO,kBAAkB,EAC9EA,EAAgB,YAAY,IAAM,UAAY,CAC5C,MAAO,CACL,YAAa,UAAY,CACvB,MAAO,CAACJ,EAAU,CACnB,EACD,QAAS,SAAUe,EAAIC,EAAI,CACzB,OAAOg1B,EAAmB,eAAeD,EAAQ,QAAQh1B,EAAG,WAAW,EAAGg1B,EAAQ,QAAQ/0B,EAAG,UAAW,CAAA,CAAC,CAC1G,CACF,CACL,EACEZ,EAAgB,YAAY,IAAM,UAAY,CAC5C,MAAO,CACL,YAAa,UAAY,CACvB,MAAO,CAACJ,EAAU,CACnB,EACD,QAAS,SAAUe,EAAIC,EAAI,CACzB,OAAOg1B,EAAmB,eAAeD,EAAQ,QAAQh1B,EAAG,WAAW,EAAGg1B,EAAQ,QAAQ/0B,EAAG,UAAW,CAAA,CAAC,CAC1G,CACF,CACL,EACEZ,EAAgB,aAAa,IAAM,UAAY,CAC7C,MAAO,CACL,YAAa,UAAY,CACvB,MAAO,CAAC41B,EAAmB,YAAY,CACxC,EACD,WAAY,SAAUwB,EAASC,EAAS,CACtC,OAAOD,EAAQ,WAAWC,CAAO,CAClC,CACF,CACL,EACEr3B,EAAgB,sBAAsB,IAAM,UAAY,CAAE,MAAO,GAAE,EAEnE,OAAO,iBAAkB21B,EAAS31B,GAE3B21B,CACT,EAAEnC,EAAe,EAEbsC,GAAe,SAAUwB,EAAiB,CAC5C,SAASxB,GAAe,CACtB,IAAIvD,EAAQ,UAAU,CAAC,EACvB+E,EAAgB,KAAK,KAAM/E,CAAK,CACjC,CAED,OAAK+E,IAAkBxB,EAAY,UAAYwB,GAC/CxB,EAAY,UAAY,OAAO,OAAQwB,GAAmBA,EAAgB,WAC1ExB,EAAY,UAAU,YAAcA,EACpCA,EAAY,UAAU,cAAgB,UAA0B,CAE9D,QADIhE,EAAS,KACJ,EAAI,KAAK,mBAAkB,EAAG,WAAY,EAAE,WAAY,CAC/D,IAAIW,EAAiB,EAAE,OACnBX,IAAW,KACbA,EAAS,IAAIpmB,EAAS+mB,EAAe,UAAW,CAAA,EAEhDX,EAAO,gBAAgBW,EAAe,UAAW,CAAA,CAEpD,CACD,OAAOX,CACX,EACEgE,EAAY,UAAU,YAAc,UAAwB,CAC1D,MAAO,CAAE,CACb,EACEA,EAAY,UAAU,SAAW,UAAqB,CACpD,OAAOA,CACX,EAESA,CACT,EAAExD,EAAY,EAEViF,GAAyB,UAAmC,GAEhEA,GAAuB,UAAU,YAAc,UAAwB,CACrE,MAAO,CAAE,CACX,EACAA,GAAuB,UAAU,SAAW,UAAqB,CAC/D,OAAOA,EACT,EACAA,GAAuB,aAAe,SAAuBlkB,EAAIpU,EAAI,CACnE,OAAIoU,EAAKpU,EAAa,GAClBoU,EAAKpU,EAAa,EACf,CACT,EACAs4B,GAAuB,QAAU,SAAkBC,EAAQjpB,EAAI3G,EAAI,CACjE,GAAI2G,EAAG,SAAS3G,CAAE,EAAK,MAAO,GAC9B,IAAI6vB,EAAQF,GAAuB,aAAahpB,EAAG,EAAG3G,EAAG,CAAC,EACtD8vB,EAAQH,GAAuB,aAAahpB,EAAG,EAAG3G,EAAG,CAAC,EAC1D,OAAQ4vB,EAAM,CACZ,IAAK,GACH,OAAOD,GAAuB,aAAaE,EAAOC,CAAK,EACzD,IAAK,GACH,OAAOH,GAAuB,aAAaG,EAAOD,CAAK,EACzD,IAAK,GACH,OAAOF,GAAuB,aAAaG,EAAO,CAACD,CAAK,EAC1D,IAAK,GACH,OAAOF,GAAuB,aAAa,CAACE,EAAOC,CAAK,EAC1D,IAAK,GACH,OAAOH,GAAuB,aAAa,CAACE,EAAO,CAACC,CAAK,EAC3D,IAAK,GACH,OAAOH,GAAuB,aAAa,CAACG,EAAO,CAACD,CAAK,EAC3D,IAAK,GACH,OAAOF,GAAuB,aAAa,CAACG,EAAOD,CAAK,EAC1D,IAAK,GACH,OAAOF,GAAuB,aAAaE,EAAO,CAACC,CAAK,CAE3D,CACD,OAAA/oB,EAAO,qBAAqB,sBAAsB,EAC3C,CACT,EACA4oB,GAAuB,aAAe,SAAuBI,EAAcC,EAAc,CACvF,OAAID,EAAe,EAAY,GAC3BA,EAAe,EAAY,EAC3BC,EAAe,EAAY,GAC3BA,EAAe,EAAY,EACxB,CACT,EAEA,IAAIC,GAAc,UAAwB,CACxC,KAAK,WAAa,KAClB,KAAK,MAAQ,KACb,KAAK,aAAe,KACpB,KAAK,eAAiB,KACtB,KAAK,YAAc,KACnB,IAAIC,EAAY,UAAU,CAAC,EACvB1/B,EAAQ,UAAU,CAAC,EACnB4E,EAAe,UAAU,CAAC,EAC1B+6B,EAAgB,UAAU,CAAC,EAC/B,KAAK,WAAaD,EAClB,KAAK,MAAQ,IAAIh4B,EAAW1H,CAAK,EACjC,KAAK,aAAe4E,EACpB,KAAK,eAAiB+6B,EACtB,KAAK,YAAc,CAAC3/B,EAAM,SAAS0/B,EAAU,cAAc96B,CAAY,CAAC,CAC1E,EACA66B,GAAY,UAAU,cAAgB,UAA0B,CAC9D,OAAO,KAAK,KACd,EACAA,GAAY,UAAU,MAAQ,SAAgBxK,EAAK,CACjDA,EAAI,MAAM,KAAK,KAAK,EACpBA,EAAI,MAAM,YAAc,KAAK,YAAY,CAC3C,EACAwK,GAAY,UAAU,UAAY,SAAoBngB,EAAK,CACzD,IAAIxX,EAAQwX,EACZ,OAAI,KAAK,aAAexX,EAAM,aAAuB,GACjD,KAAK,aAAeA,EAAM,aAAuB,EACjD,KAAK,MAAM,SAASA,EAAM,KAAK,EAAY,EACxCq3B,GAAuB,QAAQ,KAAK,eAAgB,KAAK,MAAOr3B,EAAM,KAAK,CACpF,EACA23B,GAAY,UAAU,WAAa,SAAqBG,EAAiB,CAEvE,OADI,KAAK,eAAiB,GAAK,CAAC,KAAK,aACjC,KAAK,eAAiBA,CAE5B,EACAH,GAAY,UAAU,WAAa,UAAuB,CACxD,OAAO,KAAK,WACd,EACAA,GAAY,UAAU,YAAc,UAAwB,CAC1D,MAAO,CAACn4B,EAAU,CACpB,EACAm4B,GAAY,UAAU,SAAW,UAAqB,CACpD,OAAOA,EACT,EAGA,IAAII,GAAkB,UAA4B,CAChD,KAAK,SAAW,IAAIxc,GACpB,KAAK,MAAQ,KACb,IAAIsQ,EAAO,UAAU,CAAC,EACtB,KAAK,MAAQA,CACf,EACAkM,GAAgB,UAAU,oBAAsB,UAAgC,CAC5E,IAAI3qB,EAAS,KAEX8L,EAAY,IAAIpC,GACpB,KAAK,aAAY,EAGjB,QAFI0H,EAAK,KAAK,WACVwZ,EAASxZ,EAAG,OACTA,EAAG,WAAW,CACnB,IAAIyZ,EAAKzZ,EAAG,OACZpR,EAAO,mBAAmB4qB,EAAQC,EAAI/e,CAAS,EAC/C8e,EAASC,CACV,CACD,OAAO/e,EAAU,kBAAmB,CACtC,EACA6e,GAAgB,UAAU,kBAAoB,UAA8B,CACxE,IAAI3qB,EAAS,KAEX8qB,EAAyB,IAAI5hB,EACjC,KAAK,+BAA+B4hB,CAAsB,EAC1D,KAAK,kCAAkCA,CAAsB,EAC7D,QAAS1Z,EAAK0Z,EAAuB,SAAQ,EAAI1Z,EAAG,WAAY,CAC9D,IAAI2Z,EAAc3Z,EAAG,KAAM,EAAC,SAAQ,EACpCpR,EAAO,IAAIA,EAAO,MAAM,cAAc+qB,CAAW,EAAGA,CAAW,CAChE,CACH,EACAJ,GAAgB,UAAU,MAAQ,SAAgB5K,EAAK,CACrDA,EAAI,QAAQ,gBAAgB,EAC5B,QAAS3O,EAAK,KAAK,SAAQ,EAAIA,EAAG,WAAY,CAC5C,IAAIyZ,EAAKzZ,EAAG,OACZyZ,EAAG,MAAM9K,CAAG,CACb,CACH,EACA4K,GAAgB,UAAU,kCAAoC,SAA4CG,EAAwB,CAGhI,QAFM9qB,EAAS,KAENhU,EAAI,EAAGA,EAAI,KAAK,MAAM,KAAM,EAAG,EAAGA,IAAK,CAC9C,IAAIiV,EAAKjB,EAAO,MAAM,cAAchU,CAAC,EAEjCuO,EAAKyF,EAAO,MAAM,cAAchU,EAAI,CAAC,EACrCiV,EAAG,SAAS1G,CAAE,GAChBuwB,EAAuB,IAAI,IAAIx1B,GAAQtJ,EAAI,CAAC,CAAC,CAEhD,CACH,EACA2+B,GAAgB,UAAU,mBAAqB,SAA6BK,EAAKC,EAAKnf,EAAW,CAC7F,IAAI9L,EAAS,KAGXkrB,EAAiB,KAAK,MAAM,cAAcD,EAAI,YAAY,EAC1DE,EAAYF,EAAI,WAAY,GAAI,CAACA,EAAI,MAAM,SAASC,CAAc,EAKtEpf,EAAU,IAAI,IAAItZ,EAAWw4B,EAAI,KAAK,EAAG,EAAK,EAC9C,QAASh/B,EAAIg/B,EAAI,aAAe,EAAGh/B,GAAKi/B,EAAI,aAAcj/B,IACxD8f,EAAU,IAAI9L,EAAO,MAAM,cAAchU,CAAC,CAAC,EAEzCm/B,GACFrf,EAAU,IAAI,IAAItZ,EAAWy4B,EAAI,KAAK,CAAC,CAE3C,EACAN,GAAgB,UAAU,SAAW,UAAqB,CACxD,OAAO,KAAK,SAAS,OAAM,EAAG,SAAU,CAC1C,EACAA,GAAgB,UAAU,cAAgB,SAAwBS,EAAU,CACxE,IAAIprB,EAAS,KAEf,KAAK,aAAY,EACjB,KAAK,kBAAiB,EAGtB,QAFIoR,EAAK,KAAK,WACVwZ,EAASxZ,EAAG,OACTA,EAAG,WAAW,CACnB,IAAIyZ,EAAKzZ,EAAG,OACRia,EAAUrrB,EAAO,gBAAgB4qB,EAAQC,CAAE,EAC/CO,EAAS,IAAIC,CAAO,EACpBT,EAASC,CACV,CACH,EACAF,GAAgB,UAAU,kBAAoB,SAA4BK,EAAKC,EAAKK,EAAsB,CACxG,GAAI,CAACN,EAAI,MAAM,SAASC,EAAI,KAAK,EAAK,MAAO,GAC7C,IAAIM,EAAqBN,EAAI,aAAeD,EAAI,aAIhD,OAHKC,EAAI,cACPM,IAEEA,IAAuB,GACzBD,EAAqB,CAAC,EAAIN,EAAI,aAAe,EACtC,IAEF,EACT,EACAL,GAAgB,UAAU,+BAAiC,SAAyCG,EAAwB,CAM1H,QALM9qB,EAAS,KAEXsrB,EAAuB,IAAI,MAAM,CAAC,EAAE,KAAK,IAAI,EAC7Cla,EAAK,KAAK,WACVwZ,EAASxZ,EAAG,OACTA,EAAG,WAAW,CACnB,IAAIyZ,EAAKzZ,EAAG,OACRoa,EAAcxrB,EAAO,kBAAkB4qB,EAAQC,EAAIS,CAAoB,EACvEE,GAAeV,EAAuB,IAAI,IAAIx1B,GAAQg2B,EAAqB,CAAC,CAAC,CAAC,EAClFV,EAASC,CACV,CACH,EACAF,GAAgB,UAAU,QAAU,UAAoB,CACtD,OAAO,KAAK,KACd,EACAA,GAAgB,UAAU,aAAe,UAAyB,CAChE,IAAIc,EAAc,KAAK,MAAM,KAAI,EAAK,EACtC,KAAK,IAAI,KAAK,MAAM,cAAc,CAAC,EAAG,CAAC,EACvC,KAAK,IAAI,KAAK,MAAM,cAAcA,CAAW,EAAGA,CAAW,CAC7D,EACAd,GAAgB,UAAU,gBAAkB,SAA0BK,EAAKC,EAAK,CAC5E,IAAIjrB,EAAS,KAEXyM,EAAOwe,EAAI,aAAeD,EAAI,aAAe,EAC7CE,EAAiB,KAAK,MAAM,cAAcD,EAAI,YAAY,EAC1DE,EAAYF,EAAI,WAAY,GAAI,CAACA,EAAI,MAAM,SAASC,CAAc,EACjEC,GACH1e,IAEF,IAAIjG,EAAM,IAAI,MAAMiG,CAAI,EAAE,KAAK,IAAI,EAC/Bif,EAAM,EACVllB,EAAIklB,GAAK,EAAI,IAAIl5B,EAAWw4B,EAAI,KAAK,EACrC,QAASh/B,EAAIg/B,EAAI,aAAe,EAAGh/B,GAAKi/B,EAAI,aAAcj/B,IACxDwa,EAAIklB,GAAK,EAAI1rB,EAAO,MAAM,cAAchU,CAAC,EAE3C,OAAIm/B,IAAa3kB,EAAIklB,CAAG,EAAI,IAAIl5B,EAAWy4B,EAAI,KAAK,GAC7C,IAAIU,GAAmBnlB,EAAK,KAAK,MAAM,QAAO,CAAE,CACzD,EACAmkB,GAAgB,UAAU,IAAM,SAAcjoB,EAAOhT,EAAc,CACjE,IAAIk8B,EAAQ,IAAIrB,GAAY,KAAK,MAAO7nB,EAAOhT,EAAc,KAAK,MAAM,iBAAiBA,CAAY,CAAC,EAClGm7B,EAAK,KAAK,SAAS,IAAIe,CAAK,EAChC,OAAIf,IAAO,MACTxpB,EAAO,OAAOwpB,EAAG,MAAM,SAASnoB,CAAK,EAAG,8CAA8C,EAC/EmoB,IAET,KAAK,SAAS,IAAIe,EAAOA,CAAK,EACvBA,EACT,EACAjB,GAAgB,UAAU,2BAA6B,SAAqCkB,EAAY,CACtG,IAAIlN,EAAU,KAAK,MAAM,eAAc,EACnCmN,EAASD,EAAW,IAAI,CAAC,EACzBE,EAAMD,EAAO,cAAc,CAAC,EAChC,GAAI,CAACC,EAAI,SAASpN,EAAQ,CAAC,CAAC,EAAK,MAAM,IAAIzd,GAAiB,iCAAmC6qB,CAAG,EAClG,IAAIC,EAASH,EAAW,IAAIA,EAAW,KAAI,EAAK,CAAC,EAC7CI,EAAYD,EAAO,iBACnBE,EAAMD,EAAUA,EAAU,OAAS,CAAC,EACxC,GAAI,CAACC,EAAI,SAASvN,EAAQA,EAAQ,OAAS,CAAC,CAAC,EAAK,MAAM,IAAIzd,GAAiB,+BAAiCgrB,CAAG,CACnH,EACAvB,GAAgB,UAAU,YAAc,UAAwB,CAC9D,MAAO,CAAE,CACX,EACAA,GAAgB,UAAU,SAAW,UAAqB,CACxD,OAAOA,EACT,EAqDA,IAAIwB,GAAS,UAAmB,GAEhCA,GAAO,UAAU,YAAc,UAAwB,CACrD,MAAO,CAAE,CACX,EACAA,GAAO,UAAU,SAAW,UAAqB,CAC/C,OAAOA,EACT,EACAA,GAAO,OAAS,UAAmB,CACjC,GAAI,OAAO,UAAU,CAAC,GAAM,UAAY,OAAO,UAAU,CAAC,GAAM,SAAU,CACxE,IAAIr5B,EAAK,UAAU,CAAC,EAChBC,EAAK,UAAU,CAAC,EACpB,GAAID,IAAO,GAAOC,IAAO,EAAO,MAAM,IAAIjB,EAAyB,yCAA2CgB,EAAK,KAAOC,EAAK,IAAI,EACnI,IAAIq5B,EAAM,KAAK,IAAIt5B,CAAE,EACjBu5B,EAAM,KAAK,IAAIt5B,CAAE,EACrB,OAAID,GAAM,EACJC,GAAM,EACJq5B,GAAOC,EAAc,EAAmB,EAExCD,GAAOC,EAAc,EAAmB,EAG1Ct5B,GAAM,EACJq5B,GAAOC,EAAc,EAAmB,EAExCD,GAAOC,EAAc,EAAmB,CAGpD,SAAa,UAAU,CAAC,YAAa75B,GAAc,UAAU,CAAC,YAAaA,EAAY,CACnF,IAAIyO,EAAK,UAAU,CAAC,EAChB3G,EAAK,UAAU,CAAC,EAChBgyB,EAAOhyB,EAAG,EAAI2G,EAAG,EACjBsrB,EAAOjyB,EAAG,EAAI2G,EAAG,EACrB,GAAIqrB,IAAS,GAAOC,IAAS,EAAO,MAAM,IAAIz6B,EAAyB,sDAAwDmP,CAAE,EACjI,OAAOkrB,GAAO,OAAOG,EAAMC,CAAI,CAChC,CACH,EAEA,IAAIC,GAAgB,UAA0B,GAE9CA,GAAc,UAAU,eAAiB,UAA2B,CAAA,EACpEA,GAAc,UAAU,KAAO,UAAiB,CAAA,EAChDA,GAAc,UAAU,cAAgB,SAAwBxgC,EAAG,CAAA,EACnEwgC,GAAc,UAAU,SAAW,UAAqB,CAAA,EACxDA,GAAc,UAAU,QAAU,SAAkB5sB,EAAM,CAAA,EAC1D4sB,GAAc,UAAU,QAAU,UAAoB,CAAA,EACtDA,GAAc,UAAU,YAAc,UAAwB,CAC5D,MAAO,CAAE,CACX,EACAA,GAAc,UAAU,SAAW,UAAqB,CACtD,OAAOA,EACT,EAEA,IAAIC,GAAuB,UAAiC,GAE5DA,GAAqB,UAAU,gBAAkB,SAA0B/pB,EAAOhT,EAAc,GAChG+8B,GAAqB,UAAU,YAAc,UAAwB,CACnE,MAAO,CAACD,EAAa,CACvB,EACAC,GAAqB,UAAU,SAAW,UAAqB,CAC7D,OAAOA,EACT,EAEA,IAAId,GAAqB,UAA+B,CACtD,KAAK,UAAY,IAAIhB,GAAgB,IAAI,EACzC,KAAK,KAAO,KACZ,KAAK,MAAQ,KACb,IAAInkB,EAAM,UAAU,CAAC,EACjB5G,EAAO,UAAU,CAAC,EACtB,KAAK,KAAO4G,EACZ,KAAK,MAAQ5G,CACf,EACA+rB,GAAmB,UAAU,eAAiB,UAA2B,CACvE,OAAO,KAAK,IACd,EACAA,GAAmB,UAAU,KAAO,UAAiB,CACnD,OAAO,KAAK,KAAK,MACnB,EACAA,GAAmB,UAAU,cAAgB,SAAwB3/B,EAAG,CACtE,OAAO,KAAK,KAAKA,CAAC,CACpB,EACA2/B,GAAmB,UAAU,SAAW,UAAqB,CAC3D,OAAO,KAAK,KAAK,CAAC,EAAE,OAAO,KAAK,KAAK,KAAK,KAAK,OAAS,CAAC,CAAC,CAC5D,EACAA,GAAmB,UAAU,iBAAmB,SAA2B52B,EAAO,CAChF,OAAIA,IAAU,KAAK,KAAK,OAAS,EAAY,GACtC,KAAK,WAAW,KAAK,cAAcA,CAAK,EAAG,KAAK,cAAcA,EAAQ,CAAC,CAAC,CACjF,EACA42B,GAAmB,UAAU,QAAU,SAAkB/rB,EAAM,CAC7D,KAAK,MAAQA,CACf,EACA+rB,GAAmB,UAAU,WAAa,SAAqB1qB,EAAI3G,EAAI,CACrE,OAAI2G,EAAG,SAAS3G,CAAE,EAAY,EACvB6xB,GAAO,OAAOlrB,EAAI3G,CAAE,CAC7B,EACAqxB,GAAmB,UAAU,QAAU,UAAoB,CACzD,OAAO,KAAK,KACd,EACAA,GAAmB,UAAU,gBAAkB,UAA4B,CACzE,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAIe,EAAU,UAAU,CAAC,EACrBh9B,EAAe,UAAU,CAAC,EAC9B,KAAK,oBAAoBg9B,EAASh9B,CAAY,CAClD,SAAa,UAAU,SAAW,EAAG,CACjC,IAAIi9B,EAAK,UAAU,CAAC,EAChBC,EAAiB,UAAU,CAAC,EAE5BjrB,EAAW,UAAU,CAAC,EACtBe,EAAQ,IAAIlQ,EAAWm6B,EAAG,gBAAgBhrB,CAAQ,CAAC,EACvD,KAAK,gBAAgBe,EAAOkqB,CAAc,CAC3C,CACH,EACAjB,GAAmB,UAAU,SAAW,UAAqB,CAC3D,OAAO3qB,GAAU,aAAa,IAAIuV,EAAwB,KAAK,IAAI,CAAC,CACtE,EACAoV,GAAmB,UAAU,YAAc,UAAwB,CACjE,OAAO,KAAK,SACd,EACAA,GAAmB,UAAU,oBAAsB,SAA8BjpB,EAAOhT,EAAc,CACpG,IAAIm9B,EAAyBn9B,EACzBo9B,EAAeD,EAAyB,EAC5C,GAAIC,EAAe,KAAK,KAAK,OAAQ,CACnC,IAAIC,EAAS,KAAK,KAAKD,CAAY,EAC/BpqB,EAAM,SAASqqB,CAAM,IACvBF,EAAyBC,EAE5B,CACD,IAAIjC,EAAK,KAAK,UAAU,IAAInoB,EAAOmqB,CAAsB,EACzD,OAAOhC,CACT,EACAc,GAAmB,UAAU,iBAAmB,SAA2BgB,EAAIj9B,EAAc1B,EAAW,CAGtG,QAFMgS,EAAS,KAENhU,EAAI,EAAGA,EAAI2gC,EAAG,mBAAkB,EAAI3gC,IAC3CgU,EAAO,gBAAgB2sB,EAAIj9B,EAAc1B,EAAWhC,CAAC,CAEzD,EACA2/B,GAAmB,UAAU,YAAc,UAAwB,CACjE,MAAO,CAACc,EAAoB,CAC9B,EACAd,GAAmB,UAAU,SAAW,UAAqB,CAC3D,OAAOA,EACT,EACAA,GAAmB,mBAAqB,UAA+B,CACrE,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAIqB,EAAa,UAAU,CAAC,EACxBC,EAAiB,IAAI/jB,EACzB,OAAAyiB,GAAmB,mBAAmBqB,EAAYC,CAAc,EACzDA,CACX,SAAa,UAAU,SAAW,EAG9B,QAFIC,EAAe,UAAU,CAAC,EAC1BC,EAAmB,UAAU,CAAC,EACzBnhC,EAAIkhC,EAAa,SAAQ,EAAIlhC,EAAE,WAAY,CAClD,IAAIohC,EAAKphC,EAAE,OACXohC,EAAG,YAAW,EAAG,cAAcD,CAAgB,CAChD,CAEL,EAEA,IAAIE,EAAc,UAAwB,CAGxC,GAFA,KAAK,GAAK,KACV,KAAK,GAAK,KACN,UAAU,SAAW,EACvB,KAAK,GAAK,IAAI76B,EACd,KAAK,GAAK,IAAIA,UACL,UAAU,SAAW,EAAG,CACjC,IAAIqhB,EAAK,UAAU,CAAC,EACpB,KAAK,GAAK,IAAIrhB,EAAWqhB,EAAG,EAAE,EAC9B,KAAK,GAAK,IAAIrhB,EAAWqhB,EAAG,EAAE,CAClC,SAAa,UAAU,SAAW,EAC9B,KAAK,GAAK,UAAU,CAAC,EACrB,KAAK,GAAK,UAAU,CAAC,UACZ,UAAU,SAAW,EAAG,CACjC,IAAI9N,EAAK,UAAU,CAAC,EAChBU,EAAK,UAAU,CAAC,EAChB9U,EAAK,UAAU,CAAC,EAChBkJ,EAAK,UAAU,CAAC,EACpB,KAAK,GAAK,IAAIrI,EAAWuT,EAAIU,CAAE,EAC/B,KAAK,GAAK,IAAIjU,EAAWb,EAAIkJ,CAAE,CAChC,CACH,EAEIyyB,GAAqB,CAAE,iBAAkB,CAAE,aAAc,EAAM,CAAA,EACnED,EAAY,UAAU,KAAO,UAAiB,CAC5C,OAAO,KAAK,IAAI,KAAK,GAAG,EAAG,KAAK,GAAG,CAAC,CACtC,EACAA,EAAY,UAAU,iBAAmB,UAA6B,CACpE,GAAI,UAAU,CAAC,YAAaA,EAAa,CACvC,IAAIE,EAAM,UAAU,CAAC,EACjBC,EAAU3qB,EAAa,iBAAiB,KAAK,GAAI,KAAK,GAAI0qB,EAAI,EAAE,EAChEE,EAAU5qB,EAAa,iBAAiB,KAAK,GAAI,KAAK,GAAI0qB,EAAI,EAAE,EAEpE,OADIC,GAAW,GAAKC,GAAW,GAC3BD,GAAW,GAAKC,GAAW,EAAY,KAAK,IAAID,EAASC,CAAO,EAC7D,CACR,SAAU,UAAU,CAAC,YAAaj7B,EAAY,CAC7C,IAAIyK,EAAI,UAAU,CAAC,EACnB,OAAO4F,EAAa,iBAAiB,KAAK,GAAI,KAAK,GAAI5F,CAAC,CACzD,CACH,EACAowB,EAAY,UAAU,WAAa,SAAqBK,EAAa,CACnE,OAAOA,EAAY,iBAAiB,CAAC,KAAK,GAAI,KAAK,EAAE,CAAC,CACxD,EACAL,EAAY,UAAU,WAAa,UAAuB,CACxD,OAAO,KAAK,GAAG,IAAM,KAAK,GAAG,CAC/B,EACAA,EAAY,UAAU,OAAS,SAAiBx6B,EAAG,CACjD,GAAI,EAAEA,aAAaw6B,GACjB,MAAO,GAET,IAAIz6B,EAAQC,EACZ,OAAO,KAAK,GAAG,OAAOD,EAAM,EAAE,GAAK,KAAK,GAAG,OAAOA,EAAM,EAAE,CAC5D,EACAy6B,EAAY,UAAU,aAAe,SAAuB7hC,EAAM,CAChE,IAAImhC,EAAK,IAAInqB,GAEb,OADAmqB,EAAG,oBAAoB,KAAK,GAAI,KAAK,GAAInhC,EAAK,GAAIA,EAAK,EAAE,EACrDmhC,EAAG,kBAA4BA,EAAG,gBAAgB,CAAC,EAChD,IACT,EACAU,EAAY,UAAU,QAAU,UAAoB,CAClD,GAAI,UAAU,CAAC,YAAa76B,EAAY,CACtC,IAAIyK,EAAI,UAAU,CAAC,EACnB,GAAIA,EAAE,OAAO,KAAK,EAAE,GAAKA,EAAE,OAAO,KAAK,EAAE,EAAK,OAAO,IAAIzK,EAAWyK,CAAC,EACrE,IAAI3F,EAAI,KAAK,iBAAiB2F,CAAC,EAC3BnS,EAAQ,IAAI0H,EAChB,OAAA1H,EAAM,EAAI,KAAK,GAAG,EAAIwM,GAAK,KAAK,GAAG,EAAI,KAAK,GAAG,GAC/CxM,EAAM,EAAI,KAAK,GAAG,EAAIwM,GAAK,KAAK,GAAG,EAAI,KAAK,GAAG,GACxCxM,CACR,SAAU,UAAU,CAAC,YAAauiC,EAAa,CAC9C,IAAIE,EAAM,UAAU,CAAC,EACjBI,EAAM,KAAK,iBAAiBJ,EAAI,EAAE,EAClCK,EAAM,KAAK,iBAAiBL,EAAI,EAAE,EAEtC,GADII,GAAO,GAAOC,GAAO,GACrBD,GAAO,GAAOC,GAAO,EAAO,OAAO,KACvC,IAAIC,EAAQ,KAAK,QAAQN,EAAI,EAAE,EAC3BI,EAAM,IAAOE,EAAQ,KAAK,IAC1BF,EAAM,IAAOE,EAAQ,KAAK,IAC9B,IAAIC,EAAQ,KAAK,QAAQP,EAAI,EAAE,EAC/B,OAAIK,EAAM,IAAOE,EAAQ,KAAK,IAC1BF,EAAM,IAAOE,EAAQ,KAAK,IACvB,IAAIT,EAAYQ,EAAOC,CAAK,CACpC,CACH,EACAT,EAAY,UAAU,UAAY,UAAsB,CAClD,KAAK,GAAG,UAAU,KAAK,EAAE,EAAI,GAAK,KAAK,QAAO,CACpD,EACAA,EAAY,UAAU,MAAQ,UAAkB,CAC9C,OAAO,KAAK,MAAM,KAAK,GAAG,EAAI,KAAK,GAAG,EAAG,KAAK,GAAG,EAAI,KAAK,GAAG,CAAC,CAChE,EACAA,EAAY,UAAU,cAAgB,SAAwBrhC,EAAG,CAC/D,OAAIA,IAAM,EAAY,KAAK,GACpB,KAAK,EACd,EACAqhC,EAAY,UAAU,sBAAwB,SAAgCpwB,EAAG,CAC/E,OAAO4F,EAAa,+BAA+B5F,EAAG,KAAK,GAAI,KAAK,EAAE,CACxE,EACAowB,EAAY,UAAU,KAAO,UAAiB,CAC5C,OAAO,KAAK,IAAI,KAAK,GAAG,EAAG,KAAK,GAAG,CAAC,CACtC,EACAA,EAAY,UAAU,SAAW,UAAqB,CACpD,OAAOA,EAAY,SAAS,KAAK,GAAI,KAAK,EAAE,CAC9C,EACAA,EAAY,UAAU,iBAAmB,SAA2BpwB,EAAG,CACrE,GAAIA,EAAE,OAAO,KAAK,EAAE,EAAK,MAAO,GAChC,GAAIA,EAAE,OAAO,KAAK,EAAE,EAAK,MAAO,GAChC,IAAInK,EAAK,KAAK,GAAG,EAAI,KAAK,GAAG,EACzBC,EAAK,KAAK,GAAG,EAAI,KAAK,GAAG,EACzBoH,EAAMrH,EAAKA,EAAKC,EAAKA,EACzB,GAAIoH,GAAO,EAAO,OAAOlI,EAAO,IAChC,IAAIqF,IAAM2F,EAAE,EAAI,KAAK,GAAG,GAAKnK,GAAMmK,EAAE,EAAI,KAAK,GAAG,GAAKlK,GAAMoH,EAC5D,OAAO7C,CACT,EACA+1B,EAAY,UAAU,cAAgB,SAAwB7hC,EAAM,CAClE,IAAIkX,EAAQ,KAAK,aAAalX,CAAI,EAClC,GAAIkX,IAAU,KACZ,MAAO,CAACA,EAAOA,CAAK,EAEtB,IAAIqrB,EAAY,IAAI,MAAM,CAAC,EAAE,KAAK,IAAI,EAClC3mB,EAAcnV,EAAO,UACrBkQ,EAAO,KACP6rB,EAAU,KAAK,aAAaxiC,EAAK,EAAE,EACvC4b,EAAc4mB,EAAQ,SAASxiC,EAAK,EAAE,EACtCuiC,EAAU,CAAC,EAAIC,EACfD,EAAU,CAAC,EAAIviC,EAAK,GACpB,IAAIyiC,EAAU,KAAK,aAAaziC,EAAK,EAAE,EACvC2W,EAAO8rB,EAAQ,SAASziC,EAAK,EAAE,EAC3B2W,EAAOiF,IACTA,EAAcjF,EACd4rB,EAAU,CAAC,EAAIE,EACfF,EAAU,CAAC,EAAIviC,EAAK,IAEtB,IAAI0iC,EAAU1iC,EAAK,aAAa,KAAK,EAAE,EACvC2W,EAAO+rB,EAAQ,SAAS,KAAK,EAAE,EAC3B/rB,EAAOiF,IACTA,EAAcjF,EACd4rB,EAAU,CAAC,EAAI,KAAK,GACpBA,EAAU,CAAC,EAAIG,GAEjB,IAAIC,EAAU3iC,EAAK,aAAa,KAAK,EAAE,EACvC,OAAA2W,EAAOgsB,EAAQ,SAAS,KAAK,EAAE,EAC3BhsB,EAAOiF,IACTA,EAAcjF,EACd4rB,EAAU,CAAC,EAAI,KAAK,GACpBA,EAAU,CAAC,EAAII,GAEVJ,CACT,EACAV,EAAY,UAAU,aAAe,SAAuBpwB,EAAG,CAC7D,IAAI5T,EAAS,KAAK,iBAAiB4T,CAAC,EACpC,GAAI5T,EAAS,GAAKA,EAAS,EACzB,OAAO,KAAK,QAAQ4T,CAAC,EAEvB,IAAI8E,EAAQ,KAAK,GAAG,SAAS9E,CAAC,EAC1B+E,EAAQ,KAAK,GAAG,SAAS/E,CAAC,EAC9B,OAAI8E,EAAQC,EAAgB,KAAK,GAC1B,KAAK,EACd,EACAqrB,EAAY,UAAU,KAAO,UAAiB,CAC5C,OAAO,KAAK,IAAI,KAAK,GAAG,EAAG,KAAK,GAAG,CAAC,CACtC,EACAA,EAAY,UAAU,UAAY,UAAsB,CACtD,OAAO,KAAK,GAAG,SAAS,KAAK,EAAE,CACjC,EACAA,EAAY,UAAU,UAAY,SAAoBx6B,EAAG,CACvD,IAAID,EAAQC,EACRu7B,EAAQ,KAAK,GAAG,UAAUx7B,EAAM,EAAE,EACtC,OAAIw7B,IAAU,EAAYA,EACnB,KAAK,GAAG,UAAUx7B,EAAM,EAAE,CACnC,EACAy6B,EAAY,UAAU,QAAU,UAAoB,CAClD,IAAIpQ,EAAO,KAAK,GAChB,KAAK,GAAK,KAAK,GACf,KAAK,GAAKA,CACZ,EACAoQ,EAAY,UAAU,WAAa,SAAqBz6B,EAAO,CAC7D,OAAO,KAAK,GAAG,OAAOA,EAAM,EAAE,IACvB,KAAK,GAAG,OAAOA,EAAM,EAAE,GAAK,KAAK,GAAG,OAAOA,EAAM,EAAE,IACnD,KAAK,GAAG,OAAOA,EAAM,EAAE,CAChC,EACAy6B,EAAY,UAAU,iBAAmB,SAA2B7hC,EAAM,CACxE,GAAI,CACF,IAAIkX,EAAQ1F,GAAY,aAAa,KAAK,GAAI,KAAK,GAAIxR,EAAK,GAAIA,EAAK,EAAE,EACvE,OAAOkX,CACR,OAAQ/I,EAAI,CACX,GAAI,EAAAA,aAAc6C,IAAqC,MAAM7C,CACjE,SAAc,CACZ,OAAO,IACT,EACA0zB,EAAY,UAAU,KAAO,UAAiB,CAC5C,OAAO,KAAK,IAAI,KAAK,GAAG,EAAG,KAAK,GAAG,CAAC,CACtC,EACAA,EAAY,UAAU,iBAAmB,SAA2BgB,EAAuBC,EAAgB,CACzG,IAAIC,EAAO,KAAK,GAAG,EAAIF,GAAyB,KAAK,GAAG,EAAI,KAAK,GAAG,GAChEG,EAAO,KAAK,GAAG,EAAIH,GAAyB,KAAK,GAAG,EAAI,KAAK,GAAG,GAChEv7B,EAAK,KAAK,GAAG,EAAI,KAAK,GAAG,EACzBC,EAAK,KAAK,GAAG,EAAI,KAAK,GAAG,EACzBoH,EAAM,KAAK,KAAKrH,EAAKA,EAAKC,EAAKA,CAAE,EACjC07B,EAAK,EACLC,EAAK,EACT,GAAIJ,IAAmB,EAAK,CAC1B,GAAIn0B,GAAO,EAAO,MAAM,IAAI,MAAM,qDAAqD,EACvFs0B,EAAKH,EAAiBx7B,EAAKqH,EAC3Bu0B,EAAKJ,EAAiBv7B,EAAKoH,CAC5B,CACD,IAAIw0B,EAAUJ,EAAOG,EACjBE,EAAUJ,EAAOC,EACjB3jC,EAAQ,IAAI0H,EAAWm8B,EAASC,CAAO,EAC3C,OAAO9jC,CACT,EACAuiC,EAAY,UAAU,eAAiB,UAA2B,CAChE,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAIxZ,EAAK,UAAU,CAAC,EACpB,KAAK,eAAeA,EAAG,GAAIA,EAAG,EAAE,CACpC,SAAa,UAAU,SAAW,EAAG,CACjC,IAAI5S,EAAK,UAAU,CAAC,EAChB3G,EAAK,UAAU,CAAC,EACpB,KAAK,GAAG,EAAI2G,EAAG,EACf,KAAK,GAAG,EAAIA,EAAG,EACf,KAAK,GAAG,EAAI3G,EAAG,EACf,KAAK,GAAG,EAAIA,EAAG,CAChB,CACH,EACA+yB,EAAY,UAAU,gBAAkB,SAA0BwB,EAAS,CACzE,IAAIC,EAAU,KAAK,iBAAiBD,CAAO,EAC3C,OAAIC,EAAU,EAAOA,EAAU,GAAgBA,EAAU,GAAO78B,EAAO,MAAM68B,CAAO,KAAKA,EAAU,GAC5FA,CACT,EACAzB,EAAY,UAAU,SAAW,UAAqB,CACpD,MAAO,eAAiB,KAAK,GAAG,EAAI,IAAM,KAAK,GAAG,EAAI,KAAO,KAAK,GAAG,EAAI,IAAM,KAAK,GAAG,EAAI,GAC7F,EACAA,EAAY,UAAU,aAAe,UAAyB,CAC5D,OAAO,KAAK,GAAG,IAAM,KAAK,GAAG,CAC/B,EACAA,EAAY,UAAU,SAAW,UAAqB,CACpD,GAAI,UAAU,CAAC,YAAaA,EAAa,CACvC,IAAIxZ,EAAK,UAAU,CAAC,EACpB,OAAOhR,EAAa,iBAAiB,KAAK,GAAI,KAAK,GAAIgR,EAAG,GAAIA,EAAG,EAAE,CACpE,SAAU,UAAU,CAAC,YAAarhB,EAAY,CAC7C,IAAIyK,EAAI,UAAU,CAAC,EACnB,OAAO4F,EAAa,kBAAkB5F,EAAG,KAAK,GAAI,KAAK,EAAE,CAC1D,CACH,EACAowB,EAAY,UAAU,WAAa,SAAqBgB,EAAuB,CAC7E,IAAIvjC,EAAQ,IAAI0H,EAChB,OAAA1H,EAAM,EAAI,KAAK,GAAG,EAAIujC,GAAyB,KAAK,GAAG,EAAI,KAAK,GAAG,GACnEvjC,EAAM,EAAI,KAAK,GAAG,EAAIujC,GAAyB,KAAK,GAAG,EAAI,KAAK,GAAG,GAC5DvjC,CACT,EACAuiC,EAAY,UAAU,SAAW,UAAqB,CACpD,IAAI0B,EAAQ98B,EAAO,iBAAiB,KAAK,GAAG,CAAC,EAC7C88B,GAAS98B,EAAO,iBAAiB,KAAK,GAAG,CAAC,EAAI,GAC9C,IAAI+8B,EAAQ,KAAK,MAAMD,CAAK,EAAI,KAAK,MAAMA,GAAS,EAAE,EAClDE,EAAQh9B,EAAO,iBAAiB,KAAK,GAAG,CAAC,EAC7Cg9B,GAASh9B,EAAO,iBAAiB,KAAK,GAAG,CAAC,EAAI,GAC9C,IAAIi9B,EAAQ,KAAK,MAAMD,CAAK,EAAI,KAAK,MAAMA,GAAS,EAAE,EACtD,OAAOD,EAAQE,CACjB,EACA7B,EAAY,UAAU,YAAc,UAAwB,CAC1D,MAAO,CAACj7B,GAAYG,EAAY,CAClC,EACA86B,EAAY,UAAU,SAAW,UAAqB,CACpD,OAAOA,CACT,EACAA,EAAY,SAAW,SAAmBpsB,EAAI3G,EAAI,CAChD,OAAO,IAAI9H,GAAYyO,EAAG,EAAI3G,EAAG,GAAK,GAAI2G,EAAG,EAAI3G,EAAG,GAAK,CAAC,CAC5D,EACAgzB,GAAmB,iBAAiB,IAAM,UAAY,CAAE,MAAO,mBAAmB,EAElF,OAAO,iBAAkBD,EAAaC,IAEtC,IAAI6B,GAA6B,UAAuC,CACtE,KAAK,SAAW,IAAI/wB,EACpB,KAAK,SAAW,IAAIA,EACpB,KAAK,aAAe,IAAIivB,EACxB,KAAK,aAAe,IAAIA,CAC1B,EACA8B,GAA2B,UAAU,QAAU,UAAoB,CACjE,GAAI,UAAU,SAAW,GAGlB,GAAI,UAAU,SAAW,EAAG,CACjC,IAAIC,EAAM,UAAU,CAAC,EACjBC,EAAS,UAAU,CAAC,EACpBC,EAAM,UAAU,CAAC,EACjBC,EAAS,UAAU,CAAC,EACxBH,EAAI,eAAeC,EAAQ,KAAK,YAAY,EAC5CC,EAAI,eAAeC,EAAQ,KAAK,YAAY,EAC5C,KAAK,QAAQ,KAAK,aAAc,KAAK,YAAY,CAClD,EACH,EACAJ,GAA2B,UAAU,YAAc,UAAwB,CACzE,MAAO,CAAE,CACX,EACAA,GAA2B,UAAU,SAAW,UAAqB,CACnE,OAAOA,EACT,EAEA,IAAIK,GAAgB,UAA0B,CAC5C,KAAK,KAAO,KACZ,KAAK,OAAS,KACd,KAAK,KAAO,KACZ,KAAK,KAAO,KACZ,KAAK,SAAW,KAChB,KAAK,IAAM,KACX,IAAIhpB,EAAM,UAAU,CAAC,EACjBna,EAAQ,UAAU,CAAC,EACnBC,EAAM,UAAU,CAAC,EACjBmjC,EAAU,UAAU,CAAC,EACzB,KAAK,KAAOjpB,EACZ,KAAK,OAASna,EACd,KAAK,KAAOC,EACZ,KAAK,SAAWmjC,CAClB,EACAD,GAAc,UAAU,eAAiB,SAAyBz6B,EAAO8e,EAAI,CAC3EA,EAAG,GAAK,KAAK,KAAK9e,CAAK,EACvB8e,EAAG,GAAK,KAAK,KAAK9e,EAAQ,CAAC,CAC7B,EACAy6B,GAAc,UAAU,cAAgB,SAAwB3G,EAAW6G,EAAQC,EAAMC,EAAK,CAC5F,IAAI3uB,EAAK,KAAK,KAAKyuB,CAAM,EACrBp1B,EAAK,KAAK,KAAKq1B,CAAI,EAEvB,GADAC,EAAI,SAAS,KAAK3uB,EAAI3G,CAAE,EACpBq1B,EAAOD,IAAW,EACpB,OAAAE,EAAI,OAAO,KAAMF,CAAM,EAChB,KAET,GAAI,CAAC7G,EAAU,WAAW+G,EAAI,QAAQ,EAAK,OAAO,KAClD,IAAI7jB,EAAM,KAAK,OAAO2jB,EAASC,GAAQ,CAAC,EACpCD,EAAS3jB,GACX,KAAK,cAAc8c,EAAW6G,EAAQ3jB,EAAK6jB,CAAG,EAE5C7jB,EAAM4jB,GACR,KAAK,cAAc9G,EAAW9c,EAAK4jB,EAAMC,CAAG,CAEhD,EACAJ,GAAc,UAAU,eAAiB,UAA2B,CAKlE,QAJMxvB,EAAS,KAEXlV,EAAQ,IAAI,MAAM,KAAK,KAAO,KAAK,OAAS,CAAC,EAAE,KAAK,IAAI,EACxDiK,EAAQ,EACH,EAAI,KAAK,OAAQ,GAAK,KAAK,KAAM,IACxCjK,EAAMiK,GAAO,EAAIiL,EAAO,KAAK,CAAC,EAEhC,OAAOlV,CACT,EACA0kC,GAAc,UAAU,gBAAkB,SAA0BK,EAAIC,EAAK,CAC3E,KAAK,wBAAwB,KAAK,OAAQ,KAAK,KAAMD,EAAIA,EAAG,OAAQA,EAAG,KAAMC,CAAG,CAClF,EACAN,GAAc,UAAU,MAAQ,SAAgB5kC,EAAI,CAClD,KAAK,IAAMA,CACb,EACA4kC,GAAc,UAAU,OAAS,SAAiB3G,EAAW+G,EAAK,CAChE,KAAK,cAAc/G,EAAW,KAAK,OAAQ,KAAK,KAAM+G,CAAG,CAC3D,EACAJ,GAAc,UAAU,YAAc,UAAwB,CAC5D,GAAI,KAAK,OAAS,KAAM,CACtB,IAAIvuB,EAAK,KAAK,KAAK,KAAK,MAAM,EAC1B3G,EAAK,KAAK,KAAK,KAAK,IAAI,EAC5B,KAAK,KAAO,IAAI8D,EAAS6C,EAAI3G,CAAE,CAChC,CACD,OAAO,KAAK,IACd,EACAk1B,GAAc,UAAU,YAAc,UAAwB,CAC5D,OAAO,KAAK,IACd,EACAA,GAAc,UAAU,cAAgB,UAA0B,CAChE,OAAO,KAAK,MACd,EACAA,GAAc,UAAU,WAAa,UAAuB,CAC1D,OAAO,KAAK,QACd,EACAA,GAAc,UAAU,MAAQ,UAAkB,CAChD,OAAO,KAAK,GACd,EACAA,GAAc,UAAU,wBAA0B,SAAkCE,EAAQC,EAAME,EAAIR,EAAQU,EAAMD,EAAK,CACvH,IAAIE,EAAM,KAAK,KAAKN,CAAM,EACtBO,EAAM,KAAK,KAAKN,CAAI,EACpBO,EAAML,EAAG,KAAKR,CAAM,EACpBc,EAAMN,EAAG,KAAKE,CAAI,EACtB,GAAIJ,EAAOD,IAAW,GAAKK,EAAOV,IAAW,EAC3C,OAAAS,EAAI,QAAQ,KAAMJ,EAAQG,EAAIR,CAAM,EAC7B,KAIT,GAFAS,EAAI,SAAS,KAAKE,EAAKC,CAAG,EAC1BH,EAAI,SAAS,KAAKI,EAAKC,CAAG,EACtB,CAACL,EAAI,SAAS,WAAWA,EAAI,QAAQ,EAAK,OAAO,KACrD,IAAIM,EAAO,KAAK,OAAOV,EAASC,GAAQ,CAAC,EACrCU,EAAO,KAAK,OAAOhB,EAASU,GAAQ,CAAC,EACrCL,EAASU,IACPf,EAASgB,GAAQ,KAAK,wBAAwBX,EAAQU,EAAMP,EAAIR,EAAQgB,EAAMP,CAAG,EACjFO,EAAON,GAAQ,KAAK,wBAAwBL,EAAQU,EAAMP,EAAIQ,EAAMN,EAAMD,CAAG,GAE/EM,EAAOT,IACLN,EAASgB,GAAQ,KAAK,wBAAwBD,EAAMT,EAAME,EAAIR,EAAQgB,EAAMP,CAAG,EAC/EO,EAAON,GAAQ,KAAK,wBAAwBK,EAAMT,EAAME,EAAIQ,EAAMN,EAAMD,CAAG,EAEnF,EACAN,GAAc,UAAU,YAAc,UAAwB,CAC5D,MAAO,CAAE,CACX,EACAA,GAAc,UAAU,SAAW,UAAqB,CACtD,OAAOA,EACT,EAEA,IAAIc,GAAuB,UAAiC,GAE5DA,GAAqB,UAAU,YAAc,UAAwB,CACnE,MAAO,CAAE,CACX,EACAA,GAAqB,UAAU,SAAW,UAAqB,CAC7D,OAAOA,EACT,EACAA,GAAqB,qBAAuB,SAA+B9pB,EAAK,CAC9E,IAAIna,EAAQ,EACRkkC,EAAiB,IAAIrnB,EACzBqnB,EAAe,IAAI,IAAIj7B,GAAQjJ,CAAK,CAAC,EACrC,EAAG,CACD,IAAI8d,EAAOmmB,GAAqB,aAAa9pB,EAAKna,CAAK,EACvDkkC,EAAe,IAAI,IAAIj7B,GAAQ6U,CAAI,CAAC,EACpC9d,EAAQ8d,CACT,OAAQ9d,EAAQma,EAAI,OAAS,GAC9B,IAAIoY,EAAa0R,GAAqB,WAAWC,CAAc,EAC/D,OAAO3R,CACT,EACA0R,GAAqB,aAAe,SAAuB9pB,EAAKna,EAAO,CAErE,QADImkC,EAAYnkC,EACTmkC,EAAYhqB,EAAI,OAAS,GAAKA,EAAIgqB,CAAS,EAAE,SAAShqB,EAAIgqB,EAAY,CAAC,CAAC,GAC7EA,IAEF,GAAIA,GAAahqB,EAAI,OAAS,EAC5B,OAAOA,EAAI,OAAS,EAItB,QAFIiqB,EAAY/P,EAAS,SAASla,EAAIgqB,CAAS,EAAGhqB,EAAIgqB,EAAY,CAAC,CAAC,EAChErmB,EAAO9d,EAAQ,EACZ8d,EAAO3D,EAAI,QAAQ,CACxB,GAAI,CAACA,EAAI2D,EAAO,CAAC,EAAE,SAAS3D,EAAI2D,CAAI,CAAC,EAAG,CACtC,IAAIyW,EAAOF,EAAS,SAASla,EAAI2D,EAAO,CAAC,EAAG3D,EAAI2D,CAAI,CAAC,EACrD,GAAIyW,IAAS6P,EAAa,KAC3B,CACDtmB,GACD,CACD,OAAOA,EAAO,CAChB,EACAmmB,GAAqB,UAAY,UAAsB,CACrD,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAI9pB,EAAM,UAAU,CAAC,EACrB,OAAO8pB,GAAqB,UAAU9pB,EAAK,IAAI,CACnD,SAAa,UAAU,SAAW,EAAG,CAKjC,QAJIkqB,EAAQ,UAAU,CAAC,EACnBjB,EAAU,UAAU,CAAC,EACrBkB,EAAS,IAAIznB,EACb0V,EAAa0R,GAAqB,qBAAqBI,CAAK,EACvD1kC,EAAI,EAAGA,EAAI4yB,EAAW,OAAS,EAAG5yB,IAAK,CAC9C,IAAI6jC,EAAK,IAAIL,GAAckB,EAAO9R,EAAW5yB,CAAC,EAAG4yB,EAAW5yB,EAAI,CAAC,EAAGyjC,CAAO,EAC3EkB,EAAO,IAAId,CAAE,CACd,CACD,OAAOc,CACR,CACH,EACAL,GAAqB,WAAa,SAAqBM,EAAM,CAE3D,QADI3wB,EAAQ,IAAI,MAAM2wB,EAAK,KAAI,CAAE,EAAE,KAAK,IAAI,EACnC5kC,EAAI,EAAGA,EAAIiU,EAAM,OAAQjU,IAChCiU,EAAMjU,CAAC,EAAI4kC,EAAK,IAAI5kC,CAAC,EAAE,WAEzB,OAAOiU,CACT,EAEA,IAAI4wB,GAAQ,UAAkB,GAE9BA,GAAM,UAAU,aAAe,SAAuB7D,EAAY,CAAA,EAClE6D,GAAM,UAAU,mBAAqB,UAA+B,CAAA,EACpEA,GAAM,UAAU,YAAc,UAAwB,CACpD,MAAO,CAAE,CACX,EACAA,GAAM,UAAU,SAAW,UAAqB,CAC9C,OAAOA,EACT,EAEA,IAAIC,GAAkB,UAA4B,CAEhD,GADA,KAAK,QAAU,KACX,UAAU,SAAW,GAAW,GAAI,UAAU,SAAW,EAAG,CAC9D,IAAIC,EAAS,UAAU,CAAC,EACxB,KAAK,sBAAsBA,CAAM,CAClC,EACH,EACAD,GAAgB,UAAU,sBAAwB,SAAgCC,EAAQ,CACxF,KAAK,QAAUA,CACjB,EACAD,GAAgB,UAAU,YAAc,UAAwB,CAC9D,MAAO,CAACD,EAAK,CACf,EACAC,GAAgB,UAAU,SAAW,UAAqB,CACxD,OAAOA,EACT,EAEA,IAAIE,GAAgB,SAAUC,EAAoB,CAChD,SAASD,EAAcE,EAAI,CACrBA,EAAMD,EAAmB,KAAK,KAAMC,CAAE,EACnCD,EAAmB,KAAK,IAAI,EACnC,KAAK,YAAc,IAAI/nB,EACvB,KAAK,OAAS,IAAImf,GAClB,KAAK,WAAa,EAClB,KAAK,iBAAmB,KACxB,KAAK,WAAa,CACnB,CAEI4I,IAAqBD,EAAa,UAAYC,GACnDD,EAAa,UAAY,OAAO,OAAQC,GAAsBA,EAAmB,WACjFD,EAAa,UAAU,YAAcA,EAErC,IAAIt+B,EAAkB,CAAE,qBAAsB,CAAE,aAAc,EAAM,CAAA,EACpE,OAAAs+B,EAAa,UAAU,kBAAoB,UAA8B,CACvE,OAAO,KAAK,WAChB,EACEA,EAAa,UAAU,mBAAqB,UAA+B,CACzE,OAAOrF,GAAmB,mBAAmB,KAAK,gBAAgB,CACtE,EACEqF,EAAa,UAAU,SAAW,UAAqB,CACrD,OAAO,KAAK,MAChB,EACEA,EAAa,UAAU,IAAM,SAAcG,EAAQ,CAIjD,QAHInxB,EAAS,KAEToxB,EAAYd,GAAqB,UAAUa,EAAO,eAAc,EAAIA,CAAM,EACrEnlC,EAAIolC,EAAU,SAAQ,EAAIplC,EAAE,WAAY,CAC/C,IAAI6jC,EAAK7jC,EAAE,OACX6jC,EAAG,MAAM7vB,EAAO,YAAY,EAC5BA,EAAO,OAAO,OAAO6vB,EAAG,YAAW,EAAIA,CAAE,EACzC7vB,EAAO,YAAY,IAAI6vB,CAAE,CAC1B,CACL,EACEmB,EAAa,UAAU,aAAe,SAAuBK,EAAiB,CAC5E,IAAIrxB,EAAS,KAEb,KAAK,iBAAmBqxB,EACxB,QAASrlC,EAAIqlC,EAAgB,SAAQ,EAAIrlC,EAAE,WACzCgU,EAAO,IAAIhU,EAAE,KAAM,CAAA,EAErB,KAAK,gBAAe,CACxB,EACEglC,EAAa,UAAU,gBAAkB,UAA4B,CAInE,QAHIhxB,EAAS,KAETsxB,EAAgB,IAAIC,GAAqB,KAAK,OAAO,EAChDvlC,EAAI,KAAK,YAAY,WAAYA,EAAE,WAG1C,QAFIwlC,EAAaxlC,EAAE,OACfylC,EAAgBzxB,EAAO,OAAO,MAAMwxB,EAAW,YAAW,CAAE,EACvDjpC,EAAIkpC,EAAc,SAAQ,EAAIlpC,EAAE,WAAY,CACnD,IAAImpC,EAAYnpC,EAAE,OAKlB,GAJImpC,EAAU,MAAK,EAAKF,EAAW,MAAK,IACtCA,EAAW,gBAAgBE,EAAWJ,CAAa,EACnDtxB,EAAO,cAELA,EAAO,QAAQ,OAAM,EAAM,OAAO,IACvC,CAEP,EACEgxB,EAAa,UAAU,YAAc,UAAwB,CAC3D,MAAO,CAAE,CACb,EACEA,EAAa,UAAU,SAAW,UAAqB,CACrD,OAAOA,CACX,EACEt+B,EAAgB,qBAAqB,IAAM,UAAY,CAAE,OAAO6+B,EAAoB,EAEpF,OAAO,iBAAkBP,EAAct+B,GAEhCs+B,CACT,EAAEF,EAAe,EAEbS,GAAwB,SAAUI,EAA+B,CACnE,SAASJ,GAAwB,CAC/BI,EAA8B,KAAK,IAAI,EACvC,KAAK,IAAM,KACX,IAAIT,EAAK,UAAU,CAAC,EACpB,KAAK,IAAMA,CACZ,CAED,OAAKS,IAAgCJ,EAAqB,UAAYI,GACtEJ,EAAqB,UAAY,OAAO,OAAQI,GAAiCA,EAA8B,WAC/GJ,EAAqB,UAAU,YAAcA,EAC7CA,EAAqB,UAAU,QAAU,UAAoB,CAC3D,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAInC,EAAM,UAAU,CAAC,EACjBC,EAAS,UAAU,CAAC,EACpBC,EAAM,UAAU,CAAC,EACjBC,EAAS,UAAU,CAAC,EACpBqC,EAAMxC,EAAI,aACVyC,EAAMvC,EAAI,aACd,KAAK,IAAI,qBAAqBsC,EAAKvC,EAAQwC,EAAKtC,CAAM,CAC5D,KAAa,QAAOoC,EAA8B,UAAU,QAAQ,MAAM,KAAM,SAAS,CACzF,EACEJ,EAAqB,UAAU,YAAc,UAAwB,CACnE,MAAO,CAAE,CACb,EACEA,EAAqB,UAAU,SAAW,UAAqB,CAC7D,OAAOA,CACX,EAESA,CACT,EAAEpC,EAA0B,EAExB2C,EAAmB,SAASA,GAAoB,CAQlD,GAPA,KAAK,kBAAoBA,EAAiB,0BAC1C,KAAK,aAAeA,EAAiB,UACrC,KAAK,WAAaA,EAAiB,WACnC,KAAK,YAAcA,EAAiB,oBACpC,KAAK,eAAiB,GACtB,KAAK,gBAAkBA,EAAiB,wBAEpC,UAAU,SAAW,GAAW,GAAI,UAAU,SAAW,EAAG,CAC9D,IAAIC,EAAmB,UAAU,CAAC,EAClC,KAAK,oBAAoBA,CAAgB,CAC7C,SAAa,UAAU,SAAW,EAAG,CACjC,IAAIC,EAAqB,UAAU,CAAC,EAChCC,EAAc,UAAU,CAAC,EAC7B,KAAK,oBAAoBD,CAAkB,EAC3C,KAAK,eAAeC,CAAW,CACnC,SAAa,UAAU,SAAW,EAAG,CACjC,IAAIC,EAAqB,UAAU,CAAC,EAChCC,EAAgB,UAAU,CAAC,EAC3BC,EAAY,UAAU,CAAC,EACvBC,EAAa,UAAU,CAAC,EAC5B,KAAK,oBAAoBH,CAAkB,EAC3C,KAAK,eAAeC,CAAa,EACjC,KAAK,aAAaC,CAAS,EAC3B,KAAK,cAAcC,CAAU,CAC9B,EACH,EAEIC,GAAqB,CAAE,UAAW,CAAE,aAAc,IAAO,SAAU,CAAE,aAAc,EAAM,EAAC,WAAY,CAAE,aAAc,EAAM,EAAC,WAAY,CAAE,aAAc,EAAI,EAAG,WAAY,CAAE,aAAc,EAAI,EAAG,WAAY,CAAE,aAAc,IAAO,0BAA2B,CAAE,aAAc,EAAM,EAAC,oBAAqB,CAAE,aAAc,EAAM,EAAC,wBAAyB,CAAE,aAAc,EAAI,GACrXR,EAAiB,UAAU,eAAiB,UAA2B,CACrE,OAAO,KAAK,YACd,EACAA,EAAiB,UAAU,cAAgB,UAA0B,CACnE,OAAO,KAAK,cACd,EACAA,EAAiB,UAAU,oBAAsB,SAA8BS,EAAU,CACvF,KAAK,kBAAoBA,EACrB,KAAK,oBAAsB,IAAK,KAAK,WAAaT,EAAiB,YACnE,KAAK,kBAAoB,IAC3B,KAAK,WAAaA,EAAiB,WACnC,KAAK,YAAc,KAAK,IAAI,KAAK,iBAAiB,GAEhDS,GAAY,IACd,KAAK,kBAAoB,GAEvB,KAAK,aAAeT,EAAiB,aACvC,KAAK,kBAAoBA,EAAiB,0BAE9C,EACAA,EAAiB,UAAU,aAAe,UAAyB,CACjE,OAAO,KAAK,UACd,EACAA,EAAiB,UAAU,aAAe,SAAuBM,EAAW,CAC1E,KAAK,WAAaA,CACpB,EACAN,EAAiB,UAAU,kBAAoB,SAA4BU,EAAgB,CACzF,KAAK,gBAAkBA,EAAiB,EAAI,EAAIA,CAClD,EACAV,EAAiB,UAAU,kBAAoB,UAA8B,CAC3E,OAAO,KAAK,eACd,EACAA,EAAiB,UAAU,oBAAsB,UAAgC,CAC/E,OAAO,KAAK,iBACd,EACAA,EAAiB,UAAU,eAAiB,SAAyBG,EAAa,CAChF,KAAK,aAAeA,CACtB,EACAH,EAAiB,UAAU,cAAgB,UAA0B,CACnE,OAAO,KAAK,WACd,EACAA,EAAiB,UAAU,cAAgB,SAAwBO,EAAY,CAC7E,KAAK,YAAcA,CACrB,EACAP,EAAiB,UAAU,eAAiB,SAAyBW,EAAe,CAClF,KAAK,eAAiBA,CACxB,EACAX,EAAiB,UAAU,YAAc,UAAwB,CAC/D,MAAO,CAAE,CACX,EACAA,EAAiB,UAAU,SAAW,UAAqB,CACzD,OAAOA,CACT,EACAA,EAAiB,oBAAsB,SAA8BS,EAAU,CAC7E,IAAIG,EAAQ,KAAK,GAAK,EAAMH,EAC5B,MAAO,GAAI,KAAK,IAAIG,EAAQ,CAAG,CACjC,EACAJ,GAAmB,UAAU,IAAM,UAAY,CAAE,MAAO,EAAC,EACzDA,GAAmB,SAAS,IAAM,UAAY,CAAE,MAAO,EAAC,EACxDA,GAAmB,WAAW,IAAM,UAAY,CAAE,MAAO,EAAC,EAC1DA,GAAmB,WAAW,IAAM,UAAY,CAAE,MAAO,EAAC,EAC1DA,GAAmB,WAAW,IAAM,UAAY,CAAE,MAAO,EAAC,EAC1DA,GAAmB,WAAW,IAAM,UAAY,CAAE,MAAO,EAAC,EAC1DA,GAAmB,0BAA0B,IAAM,UAAY,CAAE,MAAO,EAAC,EACzEA,GAAmB,oBAAoB,IAAM,UAAY,CAAE,MAAO,EAAG,EACrEA,GAAmB,wBAAwB,IAAM,UAAY,CAAE,MAAO,IAAI,EAE1E,OAAO,iBAAkBR,EAAkBQ,IAE3C,IAAIK,EAA4B,SAAoCC,EAAW,CAC7E,KAAK,aAAe,KACpB,KAAK,WAAa,KAClB,KAAK,kBAAoB/vB,EAAa,iBACtC,KAAK,WAAa+vB,GAAa,IACjC,EAEIC,GAAqB,CAAE,KAAM,CAAE,aAAc,IAAO,OAAQ,CAAE,aAAc,EAAM,EAAC,KAAM,CAAE,aAAc,EAAM,EAAC,iBAAkB,CAAE,aAAc,EAAI,GAC1JF,EAA0B,UAAU,YAAc,SAAsBG,EAAI9lB,EAAIC,EAAI8lB,EAAa,CAC/F,IAAI9xB,EAAK,KAAK,WAAW6xB,CAAE,EACvBx4B,EAAK,KAAK,WAAW0S,CAAE,EACvBzS,EAAK,KAAK,WAAW0S,CAAE,EAE3B,MADI,CAAC,KAAK,UAAUhM,EAAI3G,EAAIC,CAAE,GAC1B,CAAC,KAAK,UAAU0G,EAAI3G,EAAIC,EAAIw4B,CAAW,EAAY,GAChD,KAAK,iBAAiB9xB,EAAI3G,EAAIw4B,EAAI7lB,EAAI8lB,CAAW,CAC1D,EACAJ,EAA0B,UAAU,yBAA2B,UAAqC,CAQlG,QAPM3yB,EAAS,KAEXjL,EAAQ,EAERi+B,EAAW,KAAK,wBAAwBj+B,CAAK,EAC7Ck+B,EAAY,KAAK,wBAAwBD,CAAQ,EACjDjpB,EAAY,GACTkpB,EAAY,KAAK,WAAW,QAAQ,CACzC,IAAIC,EAAwB,GACxBlzB,EAAO,YAAYjL,EAAOi+B,EAAUC,EAAWjzB,EAAO,YAAY,IACpEA,EAAO,WAAWgzB,CAAQ,EAAIL,EAA0B,OACxDO,EAAwB,GACxBnpB,EAAY,IAEVmpB,EAAyBn+B,EAAQk+B,EAAoBl+B,EAAQi+B,EACjEA,EAAWhzB,EAAO,wBAAwBjL,CAAK,EAC/Ck+B,EAAYjzB,EAAO,wBAAwBgzB,CAAQ,CACpD,CACD,OAAOjpB,CACT,EACA4oB,EAA0B,UAAU,mBAAqB,SAA6B1xB,EAAI3G,EAAIC,EAAIw4B,EAAa,CAC7G,IAAI9X,EAAcpY,EAAa,mBAAmB5B,EAAI3G,EAAIC,CAAE,EACxD44B,EAAoBlY,IAAgB,KAAK,kBAC7C,GAAI,CAACkY,EAAqB,MAAO,GACjC,IAAIhxB,EAAOU,EAAa,kBAAkBvI,EAAI2G,EAAI1G,CAAE,EACpD,OAAO4H,EAAO4wB,CAChB,EACAJ,EAA0B,UAAU,iBAAmB,SAA2B1xB,EAAI1G,EAAIu4B,EAAI7lB,EAAI8lB,EAAa,CAC3G,IAAI/yB,EAAS,KAEXgL,EAAM,KAAK,OAAOiC,EAAK6lB,GAAMH,EAA0B,gBAAgB,EACvE3nB,GAAO,IAAKA,EAAM,GACtB,QAAShf,EAAI8mC,EAAI9mC,EAAIihB,EAAIjhB,GAAKgf,EAC5B,GAAI,CAAChL,EAAO,UAAUiB,EAAI1G,EAAIyF,EAAO,WAAWhU,CAAC,EAAG+mC,CAAW,EAAK,MAAO,GAE7E,MAAO,EACT,EACAJ,EAA0B,UAAU,UAAY,SAAoB1xB,EAAI3G,EAAIC,EAAI,CAC9E,IAAI0gB,EAAcpY,EAAa,mBAAmB5B,EAAI3G,EAAIC,CAAE,EACxD64B,EAAYnY,IAAgB,KAAK,kBACrC,OAAOmY,CACT,EACAT,EAA0B,UAAU,SAAW,SAAmBI,EAAa,CAC3E,IAAI/yB,EAAS,KAEf,KAAK,aAAe,KAAK,IAAI+yB,CAAW,EACpCA,EAAc,IAAK,KAAK,kBAAoBlwB,EAAa,WAC7D,KAAK,WAAa,IAAI,MAAM,KAAK,WAAW,MAAM,EAAE,KAAK,IAAI,EAC7D,IAAIkH,EAAY,GAChB,GACEA,EAAY/J,EAAO,iCACZ+J,GACT,OAAO,KAAK,aAAc,CAC5B,EACA4oB,EAA0B,UAAU,wBAA0B,SAAkC59B,EAAO,CAErG,QADIiS,EAAOjS,EAAQ,EACZiS,EAAO,KAAK,WAAW,QAAU,KAAK,WAAWA,CAAI,IAAM2rB,EAA0B,QAAU3rB,IACtG,OAAOA,CACT,EACA2rB,EAA0B,UAAU,UAAY,SAAoB1xB,EAAI3G,EAAIC,EAAIw4B,EAAa,CAC3F,IAAI5wB,EAAOU,EAAa,kBAAkBvI,EAAI2G,EAAI1G,CAAE,EACpD,OAAO4H,EAAO4wB,CAChB,EACAJ,EAA0B,UAAU,aAAe,UAAyB,CAI1E,QAHM3yB,EAAS,KAEX8L,EAAY,IAAIpC,GACX1d,EAAI,EAAGA,EAAI,KAAK,WAAW,OAAQA,IACtCgU,EAAO,WAAWhU,CAAC,IAAM2mC,EAA0B,QAAU7mB,EAAU,IAAI9L,EAAO,WAAWhU,CAAC,CAAC,EAErG,OAAO8f,EAAU,kBAAmB,CACtC,EACA6mB,EAA0B,UAAU,YAAc,UAAwB,CACxE,MAAO,CAAE,CACX,EACAA,EAA0B,UAAU,SAAW,UAAqB,CAClE,OAAOA,CACT,EACAA,EAA0B,SAAW,SAAmBC,EAAWG,EAAa,CAC9E,IAAIM,EAAO,IAAIV,EAA0BC,CAAS,EAClD,OAAOS,EAAK,SAASN,CAAW,CAClC,EACAF,GAAmB,KAAK,IAAM,UAAY,CAAE,MAAO,EAAC,EACpDA,GAAmB,OAAO,IAAM,UAAY,CAAE,MAAO,EAAC,EACtDA,GAAmB,KAAK,IAAM,UAAY,CAAE,MAAO,EAAC,EACpDA,GAAmB,iBAAiB,IAAM,UAAY,CAAE,MAAO,GAAE,EAEjE,OAAO,iBAAkBF,EAA2BE,IAEpD,IAAIS,GAAsB,UAAgC,CACxD,KAAK,QAAU,KACf,KAAK,gBAAkB,KACvB,KAAK,uBAAyB,EAC9B,KAAK,QAAU,IAAIpqB,CACrB,EAEIqqB,GAAqB,CAAE,sBAAuB,CAAE,aAAc,EAAM,CAAA,EACxED,GAAoB,UAAU,eAAiB,UAA2B,CACxE,IAAIxoC,EAAQ,KAAK,QAAQ,QAAQwoC,GAAoB,qBAAqB,EAC1E,OAAOxoC,CACT,EACAwoC,GAAoB,UAAU,kBAAoB,SAA4BrxB,EAAgB,CAC5F,KAAK,gBAAkBA,CACzB,EACAqxB,GAAoB,UAAU,MAAQ,SAAgBjxB,EAAI,CACxD,IAAImxB,EAAQ,IAAIhhC,EAAW6P,CAAE,EAE7B,GADA,KAAK,gBAAgB,YAAYmxB,CAAK,EAClC,KAAK,YAAYA,CAAK,EAAK,OAAO,KACtC,KAAK,QAAQ,IAAIA,CAAK,CACxB,EACAF,GAAoB,UAAU,OAAS,UAAmB,CAAA,EAC1DA,GAAoB,UAAU,OAAS,SAAiBjxB,EAAIqc,EAAW,CACnE,IAAI1e,EAAS,KAEf,GAAI0e,EACF,QAAS,EAAI,EAAG,EAAIrc,EAAG,OAAQ,IAC7BrC,EAAO,MAAMqC,EAAG,CAAC,CAAC,MAGpB,SAASuD,EAAMvD,EAAG,OAAS,EAAGuD,GAAO,EAAGA,IACtC5F,EAAO,MAAMqC,EAAGuD,CAAG,CAAC,CAG1B,EACA0tB,GAAoB,UAAU,YAAc,SAAsBjxB,EAAI,CACpE,GAAI,KAAK,QAAQ,KAAM,EAAG,EAAK,MAAO,GACtC,IAAIoxB,EAAS,KAAK,QAAQ,IAAI,KAAK,QAAQ,OAAS,CAAC,EACjDC,EAASrxB,EAAG,SAASoxB,CAAM,EAC/B,OAAIC,EAAS,KAAK,sBAEpB,EACAJ,GAAoB,UAAU,SAAW,UAAqB,CAC5D,IAAIhgB,EAAO,IAAIhU,EACX9T,EAAO8nB,EAAK,iBAAiB,KAAK,eAAgB,CAAA,EACtD,OAAO9nB,EAAK,SAAU,CACxB,EACA8nC,GAAoB,UAAU,UAAY,UAAsB,CAC9D,GAAI,KAAK,QAAQ,KAAM,EAAG,EAAK,OAAO,KACtC,IAAIK,EAAU,IAAInhC,EAAW,KAAK,QAAQ,IAAI,CAAC,CAAC,EAC5CihC,EAAS,KAAK,QAAQ,IAAI,KAAK,QAAQ,OAAS,CAAC,EAGrD,GAAIE,EAAQ,OAAOF,CAAM,EAAK,OAAO,KACrC,KAAK,QAAQ,IAAIE,CAAO,CAC1B,EACAL,GAAoB,UAAU,yBAA2B,SAAmCM,EAAuB,CACjH,KAAK,uBAAyBA,CAChC,EACAN,GAAoB,UAAU,YAAc,UAAwB,CAClE,MAAO,CAAE,CACX,EACAA,GAAoB,UAAU,SAAW,UAAqB,CAC5D,OAAOA,EACT,EACAC,GAAmB,sBAAsB,IAAM,UAAY,CAAE,OAAO,IAAI,MAAM,CAAC,EAAE,KAAK,IAAI,GAE1F,OAAO,iBAAkBD,GAAqBC,IAE9C,IAAIM,EAAQ,UAAkB,GAE1BC,GAAqB,CAAE,WAAY,CAAE,aAAc,EAAM,EAAC,UAAW,CAAE,aAAc,EAAI,EAAG,UAAW,CAAE,aAAc,IAAO,iBAAkB,CAAE,aAAc,EAAM,EAAC,UAAW,CAAE,aAAc,EAAI,EAAG,KAAM,CAAE,aAAc,EAAM,CAAA,EAEzOD,EAAM,UAAU,YAAc,UAAwB,CACpD,MAAO,CAAE,CACX,EACAA,EAAM,UAAU,SAAW,UAAqB,CAC9C,OAAOA,CACT,EACAA,EAAM,UAAY,SAAoB1qC,EAAS,CAC7C,OAAOA,EAAU,IAAM,KAAK,EAC9B,EACA0qC,EAAM,UAAY,SAAoBjqC,EAAO,CAC3C,KAAOA,EAAQ,KAAK,IAAMA,GAASiqC,EAAM,WACzC,KAAOjqC,GAAS,CAAC,KAAK,IAAMA,GAASiqC,EAAM,WAC3C,OAAOjqC,CACT,EACAiqC,EAAM,MAAQ,UAAkB,CAC9B,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAI52B,EAAI,UAAU,CAAC,EACnB,OAAO,KAAK,MAAMA,EAAE,EAAGA,EAAE,CAAC,CAC9B,SAAa,UAAU,SAAW,EAAG,CACjC,IAAIgE,EAAK,UAAU,CAAC,EAChB3G,EAAK,UAAU,CAAC,EAChBxH,EAAKwH,EAAG,EAAI2G,EAAG,EACflO,EAAKuH,EAAG,EAAI2G,EAAG,EACnB,OAAO,KAAK,MAAMlO,EAAID,CAAE,CACzB,CACH,EACA+gC,EAAM,QAAU,SAAkB5yB,EAAI3G,EAAIC,EAAI,CAC5C,IAAIw5B,EAAM9yB,EAAG,EAAI3G,EAAG,EAChB05B,EAAM/yB,EAAG,EAAI3G,EAAG,EAChBG,EAAMF,EAAG,EAAID,EAAG,EAChBI,EAAMH,EAAG,EAAID,EAAG,EAChB25B,EAAUF,EAAMt5B,EAAMu5B,EAAMt5B,EAChC,OAAOu5B,EAAU,CACnB,EACAJ,EAAM,SAAW,SAAmB5yB,EAAI3G,EAAIC,EAAI,CAC9C,IAAIw5B,EAAM9yB,EAAG,EAAI3G,EAAG,EAChB05B,EAAM/yB,EAAG,EAAI3G,EAAG,EAChBG,EAAMF,EAAG,EAAID,EAAG,EAChBI,EAAMH,EAAG,EAAID,EAAG,EAChB25B,EAAUF,EAAMt5B,EAAMu5B,EAAMt5B,EAChC,OAAOu5B,EAAU,CACnB,EACAJ,EAAM,cAAgB,SAAwB5yB,EAAI3G,EAAIC,EAAI,CACxD,IAAI25B,EAAYL,EAAM,MAAMv5B,EAAI2G,CAAE,EAC9BkzB,EAAYN,EAAM,MAAMv5B,EAAIC,CAAE,EAClC,OAAO,KAAK,IAAI45B,EAAYD,CAAS,CACvC,EACAL,EAAM,kBAAoB,SAA4BjqC,EAAO,CAC3D,GAAIA,EAAQ,EAAK,CACf,KAAOA,EAAQ,GAAOA,GAASiqC,EAAM,WACjCjqC,GAASiqC,EAAM,aAAcjqC,EAAQ,EAC7C,KAAS,CACL,KAAOA,GAASiqC,EAAM,YAAcjqC,GAASiqC,EAAM,WAC/CjqC,EAAQ,IAAOA,EAAQ,EAC5B,CACD,OAAOA,CACT,EACAiqC,EAAM,aAAe,SAAuBO,EAAMC,EAAMC,EAAM,CAC5D,IAAIC,EAAKV,EAAM,MAAMQ,EAAMD,CAAI,EAC3BI,EAAKX,EAAM,MAAMQ,EAAMC,CAAI,EAC/B,OAAOT,EAAM,KAAKU,EAAIC,CAAE,CAC1B,EACAX,EAAM,KAAO,SAAeY,EAAMC,EAAM,CACtC,IAAIC,EAAW,KACf,OAAIF,EAAOC,EACTC,EAAWD,EAAOD,EAElBE,EAAWF,EAAOC,EAEhBC,EAAW,KAAK,KAClBA,EAAW,EAAI,KAAK,GAAKA,GAEpBA,CACT,EACAd,EAAM,UAAY,SAAoBe,EAAc,CAClD,OAAOA,EAAe,KAAK,GAAK,GAClC,EACAf,EAAM,QAAU,SAAkBY,EAAMC,EAAM,CAC5C,IAAIG,EAAe,KAAK,IAAIH,EAAOD,CAAI,EACvC,OAAII,EAAe,EACVhB,EAAM,iBAEXgB,EAAe,EACVhB,EAAM,UAERA,EAAM,IACf,EACAA,EAAM,qBAAuB,SAA+BO,EAAMC,EAAMC,EAAM,CAC5E,IAAIC,EAAKV,EAAM,MAAMQ,EAAMD,CAAI,EAC3BI,EAAKX,EAAM,MAAMQ,EAAMC,CAAI,EAC3BQ,EAASN,EAAKD,EAClB,OAAIO,GAAU,CAAC,KAAK,GAAaA,EAASjB,EAAM,WAC5CiB,EAAS,KAAK,GAAaA,EAASjB,EAAM,WACvCiB,CACT,EACAhB,GAAmB,WAAW,IAAM,UAAY,CAAE,MAAO,GAAM,KAAK,IACpEA,GAAmB,UAAU,IAAM,UAAY,CAAE,OAAO,KAAK,GAAK,GAClEA,GAAmB,UAAU,IAAM,UAAY,CAAE,OAAO,KAAK,GAAK,GAClEA,GAAmB,iBAAiB,IAAM,UAAY,CAAE,OAAOjxB,EAAa,gBAAgB,EAC5FixB,GAAmB,UAAU,IAAM,UAAY,CAAE,OAAOjxB,EAAa,SAAS,EAC9EixB,GAAmB,KAAK,IAAM,UAAY,CAAE,OAAOjxB,EAAa,SAAS,EAEzE,OAAO,iBAAkBgxB,EAAOC,IAEhC,IAAIiB,EAAyB,SAASA,GAA0B,CAC9D,KAAK,sBAAwB,EAC7B,KAAK,oBAAsB,KAC3B,KAAK,wBAA0B,EAC/B,KAAK,SAAW,KAChB,KAAK,UAAY,EACjB,KAAK,gBAAkB,KACvB,KAAK,WAAa,KAClB,KAAK,IAAM,KACX,KAAK,IAAM,KACX,KAAK,IAAM,KACX,KAAK,IAAM,KACX,KAAK,MAAQ,IAAI1H,EACjB,KAAK,MAAQ,IAAIA,EACjB,KAAK,SAAW,IAAIA,EACpB,KAAK,SAAW,IAAIA,EACpB,KAAK,MAAQ,EACb,KAAK,uBAAyB,GAC9B,IAAIprB,EAAiB,UAAU,CAAC,EAC5B+yB,EAAY,UAAU,CAAC,EACvBzrC,EAAW,UAAU,CAAC,EAC1B,KAAK,gBAAkB0Y,EACvB,KAAK,WAAa+yB,EAClB,KAAK,IAAM,IAAIxyB,GACf,KAAK,oBAAsB,KAAK,GAAK,EAAMwyB,EAAU,sBACjDA,EAAU,oBAAmB,GAAM,GAAKA,EAAU,aAAc,IAAKlD,EAAiB,aAAc,KAAK,wBAA0BiD,EAAuB,4BAC9J,KAAK,KAAKxrC,CAAQ,CACpB,EAEI0rC,GAAqB,CAAE,iCAAkC,CAAE,aAAc,IAAO,wCAAyC,CAAE,aAAc,EAAM,EAAC,kCAAmC,CAAE,aAAc,EAAM,EAAC,2BAA4B,CAAE,aAAc,EAAI,GAC9PF,EAAuB,UAAU,eAAiB,SAAyB93B,EAAGi4B,EAAe,CAQ3F,GAPA,KAAK,IAAM,KAAK,IAChB,KAAK,IAAM,KAAK,IAChB,KAAK,IAAMj4B,EACX,KAAK,MAAM,eAAe,KAAK,IAAK,KAAK,GAAG,EAC5C,KAAK,qBAAqB,KAAK,MAAO,KAAK,MAAO,KAAK,UAAW,KAAK,QAAQ,EAC/E,KAAK,MAAM,eAAe,KAAK,IAAK,KAAK,GAAG,EAC5C,KAAK,qBAAqB,KAAK,MAAO,KAAK,MAAO,KAAK,UAAW,KAAK,QAAQ,EAC3E,KAAK,IAAI,OAAO,KAAK,GAAG,EAAK,OAAO,KACxC,IAAIge,EAAcpY,EAAa,mBAAmB,KAAK,IAAK,KAAK,IAAK,KAAK,GAAG,EAC1EsyB,EAAela,IAAgBpY,EAAa,WAAa,KAAK,QAAU0X,EAAS,MAAUU,IAAgBpY,EAAa,kBAAoB,KAAK,QAAU0X,EAAS,MACpKU,IAAgB,EAClB,KAAK,aAAaia,CAAa,EACtBC,EACT,KAAK,eAAela,EAAaia,CAAa,EAE9C,KAAK,cAAcja,EAAaia,CAAa,CAEjD,EACAH,EAAuB,UAAU,cAAgB,SAAwB9zB,EAAI3G,EAAI,CAC/E,IAAIizB,EAAM,IAAIF,EAAYpsB,EAAI3G,CAAE,EAC5B86B,EAAU,IAAI/H,EAClB,KAAK,qBAAqBE,EAAKhT,EAAS,KAAM,KAAK,UAAW6a,CAAO,EACrE,IAAIC,EAAU,IAAIhI,EAClB,KAAK,qBAAqBE,EAAKhT,EAAS,MAAO,KAAK,UAAW8a,CAAO,EACtE,IAAIviC,EAAKwH,EAAG,EAAI2G,EAAG,EACflO,EAAKuH,EAAG,EAAI2G,EAAG,EACfrX,EAAQ,KAAK,MAAMmJ,EAAID,CAAE,EAC7B,OAAQ,KAAK,WAAW,eAAgB,EAAA,CACtC,KAAKg/B,EAAiB,UACpB,KAAK,SAAS,MAAMsD,EAAQ,EAAE,EAC9B,KAAK,aAAa96B,EAAI1Q,EAAQ,KAAK,GAAK,EAAGA,EAAQ,KAAK,GAAK,EAAGiZ,EAAa,UAAW,KAAK,SAAS,EACtG,KAAK,SAAS,MAAMwyB,EAAQ,EAAE,EAC9B,MACF,KAAKvD,EAAiB,SACpB,KAAK,SAAS,MAAMsD,EAAQ,EAAE,EAC9B,KAAK,SAAS,MAAMC,EAAQ,EAAE,EAC9B,MACF,KAAKvD,EAAiB,WACpB,IAAIwD,EAAsB,IAAI9iC,EAC9B8iC,EAAoB,EAAI,KAAK,IAAI,KAAK,SAAS,EAAI,KAAK,IAAI1rC,CAAK,EACjE0rC,EAAoB,EAAI,KAAK,IAAI,KAAK,SAAS,EAAI,KAAK,IAAI1rC,CAAK,EACjE,IAAI2rC,EAAmB,IAAI/iC,EAAW4iC,EAAQ,GAAG,EAAIE,EAAoB,EAAGF,EAAQ,GAAG,EAAIE,EAAoB,CAAC,EAC5GE,EAAmB,IAAIhjC,EAAW6iC,EAAQ,GAAG,EAAIC,EAAoB,EAAGD,EAAQ,GAAG,EAAIC,EAAoB,CAAC,EAChH,KAAK,SAAS,MAAMC,CAAgB,EACpC,KAAK,SAAS,MAAMC,CAAgB,EACpC,KAEH,CACH,EACAT,EAAuB,UAAU,eAAiB,UAA2B,CAC3E,IAAIvuB,EAAM,KAAK,SAAS,eAAc,EACtC,OAAOA,CACT,EACAuuB,EAAuB,UAAU,aAAe,SAAuB93B,EAAGw4B,EAASC,EAASnsC,EAAU,CACpG,IAAIosC,EAAqB,GACrBjzB,EAAQ,KACZ,GAAI,CACFA,EAAQ1F,GAAY,aAAay4B,EAAQ,GAAIA,EAAQ,GAAIC,EAAQ,GAAIA,EAAQ,EAAE,EAC/E,IAAIE,EAAarsC,GAAY,EAAM,EAAMmZ,EAAM,SAASzF,CAAC,EAAI,KAAK,IAAI1T,CAAQ,EAC1EqsC,EAAa,KAAK,WAAW,cAAa,IAAMD,EAAqB,GAC1E,OAAQh8B,EAAI,CACX,GAAIA,aAAc6C,GAChBkG,EAAQ,IAAIlQ,EAAW,EAAG,CAAC,EAC3BmjC,EAAqB,OACd,OAAMh8B,CACnB,SAAc,CACRg8B,EACF,KAAK,SAAS,MAAMjzB,CAAK,EAEzB,KAAK,oBAAoB+yB,EAASC,EAASnsC,EAAU,KAAK,WAAW,cAAa,CAAE,CAExF,EACAwrC,EAAuB,UAAU,gBAAkB,SAA0B93B,EAAGgE,EAAI3G,EAAIkQ,EAAWqrB,EAAQ,CACzG,IAAI9B,EAAM9yB,EAAG,EAAIhE,EAAE,EACf+2B,EAAM/yB,EAAG,EAAIhE,EAAE,EACf64B,EAAa,KAAK,MAAM9B,EAAKD,CAAG,EAChCt5B,EAAMH,EAAG,EAAI2C,EAAE,EACfvC,EAAMJ,EAAG,EAAI2C,EAAE,EACf84B,EAAW,KAAK,MAAMr7B,EAAKD,CAAG,EAC9B+P,IAAc3H,EAAa,UACzBizB,GAAcC,IAAYD,GAAc,EAAM,KAAK,IAEnDA,GAAcC,IAAYD,GAAc,EAAM,KAAK,IAEzD,KAAK,SAAS,MAAM70B,CAAE,EACtB,KAAK,aAAahE,EAAG64B,EAAYC,EAAUvrB,EAAWqrB,CAAM,EAC5D,KAAK,SAAS,MAAMv7B,CAAE,CACxB,EACAy6B,EAAuB,UAAU,eAAiB,SAAyB9Z,EAAaia,EAAe,CACrG,GAAI,KAAK,SAAS,GAAG,SAAS,KAAK,SAAS,EAAE,EAAI,KAAK,UAAYH,EAAuB,iCACxF,YAAK,SAAS,MAAM,KAAK,SAAS,EAAE,EAC7B,KAEL,KAAK,WAAW,aAAY,IAAOjD,EAAiB,WACtD,KAAK,aAAa,KAAK,IAAK,KAAK,SAAU,KAAK,SAAU,KAAK,SAAS,EAC/D,KAAK,WAAW,aAAY,IAAOA,EAAiB,WAC7D,KAAK,aAAa,KAAK,SAAU,KAAK,QAAQ,GAE1CoD,GAAiB,KAAK,SAAS,MAAM,KAAK,SAAS,EAAE,EACzD,KAAK,gBAAgB,KAAK,IAAK,KAAK,SAAS,GAAI,KAAK,SAAS,GAAIja,EAAa,KAAK,SAAS,EAC9F,KAAK,SAAS,MAAM,KAAK,SAAS,EAAE,EAExC,EACA8Z,EAAuB,UAAU,aAAe,SAAuB93B,EAAG,CACxE,KAAK,SAAS,MAAM,IAAIzK,EAAWyK,EAAE,EAAI,KAAK,UAAWA,EAAE,EAAI,KAAK,SAAS,CAAC,EAC9E,KAAK,SAAS,MAAM,IAAIzK,EAAWyK,EAAE,EAAI,KAAK,UAAWA,EAAE,EAAI,KAAK,SAAS,CAAC,EAC9E,KAAK,SAAS,MAAM,IAAIzK,EAAWyK,EAAE,EAAI,KAAK,UAAWA,EAAE,EAAI,KAAK,SAAS,CAAC,EAC9E,KAAK,SAAS,MAAM,IAAIzK,EAAWyK,EAAE,EAAI,KAAK,UAAWA,EAAE,EAAI,KAAK,SAAS,CAAC,EAC9E,KAAK,SAAS,WAChB,EACA83B,EAAuB,UAAU,YAAc,SAAsB1yB,EAAIqc,EAAW,CAClF,KAAK,SAAS,OAAOrc,EAAIqc,CAAS,CACpC,EACAqW,EAAuB,UAAU,gBAAkB,UAA4B,CAC7E,KAAK,SAAS,MAAM,KAAK,SAAS,EAAE,CACtC,EACAA,EAAuB,UAAU,eAAiB,UAA2B,CAC3E,KAAK,SAAS,MAAM,KAAK,SAAS,EAAE,CACtC,EACAA,EAAuB,UAAU,iBAAmB,SAA2BiB,EAAIC,EAAInb,EAAM,CAC3F,KAAK,IAAMkb,EACX,KAAK,IAAMC,EACX,KAAK,MAAQnb,EACb,KAAK,MAAM,eAAekb,EAAIC,CAAE,EAChC,KAAK,qBAAqB,KAAK,MAAOnb,EAAM,KAAK,UAAW,KAAK,QAAQ,CAC3E,EACAia,EAAuB,UAAU,oBAAsB,SAA8BU,EAASC,EAASnsC,EAAU8oC,EAAY,CAC3H,IAAI6D,EAAS,KAAK,MAAM,GACpBC,EAAOtC,EAAM,MAAMqC,EAAQ,KAAK,MAAM,EAAE,EAExCE,EAAUvC,EAAM,qBAAqB,KAAK,MAAM,GAAIqC,EAAQ,KAAK,MAAM,EAAE,EACzEG,EAAcD,EAAU,EACxBE,EAASzC,EAAM,UAAUsC,EAAOE,CAAW,EAC3CE,EAAc1C,EAAM,UAAUyC,EAAS,KAAK,EAAE,EAC9CE,EAAYnE,EAAa9oC,EACzBktC,EAAaD,EAAY,KAAK,IAAI,KAAK,IAAIH,CAAW,CAAC,EACvDK,EAAentC,EAAWktC,EAC1BE,EAAYT,EAAO,EAAIM,EAAY,KAAK,IAAID,CAAW,EACvDK,EAAYV,EAAO,EAAIM,EAAY,KAAK,IAAID,CAAW,EACvDM,EAAa,IAAIrkC,EAAWmkC,EAAWC,CAAS,EAChDE,EAAe,IAAIzJ,EAAY6I,EAAQW,CAAU,EACjDE,EAAeD,EAAa,iBAAiB,EAAKJ,CAAY,EAC9DM,EAAgBF,EAAa,iBAAiB,EAAK,CAACJ,CAAY,EAChE,KAAK,QAAUnc,EAAS,MAC1B,KAAK,SAAS,MAAMwc,CAAY,EAChC,KAAK,SAAS,MAAMC,CAAa,IAEjC,KAAK,SAAS,MAAMA,CAAa,EACjC,KAAK,SAAS,MAAMD,CAAY,EAEpC,EACAhC,EAAuB,UAAU,qBAAuB,SAA+BxH,EAAKzS,EAAMvxB,EAAU0tC,EAAQ,CAClH,IAAIC,EAAWpc,IAASP,EAAS,KAAO,EAAI,GACxCznB,EAAKy6B,EAAI,GAAG,EAAIA,EAAI,GAAG,EACvBx6B,EAAKw6B,EAAI,GAAG,EAAIA,EAAI,GAAG,EACvBpzB,EAAM,KAAK,KAAKrH,EAAKA,EAAKC,EAAKA,CAAE,EACjC07B,EAAKyI,EAAW3tC,EAAWuJ,EAAKqH,EAChCu0B,EAAKwI,EAAW3tC,EAAWwJ,EAAKoH,EACpC88B,EAAO,GAAG,EAAI1J,EAAI,GAAG,EAAImB,EACzBuI,EAAO,GAAG,EAAI1J,EAAI,GAAG,EAAIkB,EACzBwI,EAAO,GAAG,EAAI1J,EAAI,GAAG,EAAImB,EACzBuI,EAAO,GAAG,EAAI1J,EAAI,GAAG,EAAIkB,CAC3B,EACAsG,EAAuB,UAAU,aAAe,SAAuB93B,EAAG64B,EAAYC,EAAUvrB,EAAWqrB,EAAQ,CAC/G,IAAI71B,EAAS,KAEXoiB,EAAkB5X,IAAc3H,EAAa,UAAY,GAAK,EAC9Ds0B,EAAa,KAAK,IAAIrB,EAAaC,CAAQ,EAC3CqB,EAAQ,KAAK,MAAMD,EAAa,KAAK,oBAAsB,EAAG,EAClE,GAAIC,EAAQ,EAAK,OAAO,KAKxB,QAJIC,EAAY,EACZC,EAAeH,EAAaC,EAC5BG,EAAYF,EACZh1B,EAAK,IAAI7P,EACN+kC,EAAYJ,GAAY,CAC7B,IAAIvtC,EAAQksC,EAAa1T,EAAkBmV,EAC3Cl1B,EAAG,EAAIpF,EAAE,EAAI44B,EAAS,KAAK,IAAIjsC,CAAK,EACpCyY,EAAG,EAAIpF,EAAE,EAAI44B,EAAS,KAAK,IAAIjsC,CAAK,EACpCoW,EAAO,SAAS,MAAMqC,CAAE,EACxBk1B,GAAaD,CACd,CACH,EACAvC,EAAuB,UAAU,cAAgB,SAAwB9Z,EAAaia,EAAe,CAEnG,GADA,KAAK,IAAI,oBAAoB,KAAK,SAAS,GAAI,KAAK,SAAS,GAAI,KAAK,SAAS,GAAI,KAAK,SAAS,EAAE,EAC/F,KAAK,IAAI,kBACX,KAAK,SAAS,MAAM,KAAK,IAAI,gBAAgB,CAAC,CAAC,UAE/C,KAAK,uBAAyB,GAC1B,KAAK,SAAS,GAAG,SAAS,KAAK,SAAS,EAAE,EAAI,KAAK,UAAYH,EAAuB,wCACxF,KAAK,SAAS,MAAM,KAAK,SAAS,EAAE,MAC/B,CAEL,GADA,KAAK,SAAS,MAAM,KAAK,SAAS,EAAE,EAChC,KAAK,wBAA0B,EAAG,CACpC,IAAI3E,EAAO,IAAI59B,GAAY,KAAK,wBAA0B,KAAK,SAAS,GAAG,EAAI,KAAK,IAAI,IAAM,KAAK,wBAA0B,IAAK,KAAK,wBAA0B,KAAK,SAAS,GAAG,EAAI,KAAK,IAAI,IAAM,KAAK,wBAA0B,EAAE,EACtO,KAAK,SAAS,MAAM49B,CAAI,EACxB,IAAIC,EAAO,IAAI79B,GAAY,KAAK,wBAA0B,KAAK,SAAS,GAAG,EAAI,KAAK,IAAI,IAAM,KAAK,wBAA0B,IAAK,KAAK,wBAA0B,KAAK,SAAS,GAAG,EAAI,KAAK,IAAI,IAAM,KAAK,wBAA0B,EAAE,EACtO,KAAK,SAAS,MAAM69B,CAAI,CAChC,MACQ,KAAK,SAAS,MAAM,KAAK,GAAG,EAE9B,KAAK,SAAS,MAAM,KAAK,SAAS,EAAE,CACrC,CAEL,EACA0E,EAAuB,UAAU,aAAe,SAAuB93B,EAAG,CACxE,IAAIoF,EAAK,IAAI7P,EAAWyK,EAAE,EAAI,KAAK,UAAWA,EAAE,CAAC,EACjD,KAAK,SAAS,MAAMoF,CAAE,EACtB,KAAK,aAAapF,EAAG,EAAK,EAAM,KAAK,GAAI,GAAI,KAAK,SAAS,EAC3D,KAAK,SAAS,WAChB,EACA83B,EAAuB,UAAU,aAAe,SAAuBU,EAASC,EAAS,CACvF,KAAK,SAAS,MAAMD,EAAQ,EAAE,EAC9B,KAAK,SAAS,MAAMC,EAAQ,EAAE,CAChC,EACAX,EAAuB,UAAU,KAAO,SAAexrC,EAAU,CAC/D,KAAK,UAAYA,EACjB,KAAK,sBAAwBA,GAAY,EAAI,KAAK,IAAI,KAAK,oBAAsB,CAAG,GACpF,KAAK,SAAW,IAAI+pC,GACpB,KAAK,SAAS,kBAAkB,KAAK,eAAe,EACpD,KAAK,SAAS,yBAAyB/pC,EAAWwrC,EAAuB,iCAAiC,CAC5G,EACAA,EAAuB,UAAU,aAAe,SAAuBG,EAAe,CACpF,KAAK,IAAI,oBAAoB,KAAK,IAAK,KAAK,IAAK,KAAK,IAAK,KAAK,GAAG,EACnE,IAAIsC,EAAS,KAAK,IAAI,mBAAkB,EACpCA,GAAU,IACR,KAAK,WAAW,aAAY,IAAO1F,EAAiB,YAAc,KAAK,WAAW,iBAAmBA,EAAiB,YACpHoD,GAAiB,KAAK,SAAS,MAAM,KAAK,SAAS,EAAE,EACzD,KAAK,SAAS,MAAM,KAAK,SAAS,EAAE,GAEpC,KAAK,gBAAgB,KAAK,IAAK,KAAK,SAAS,GAAI,KAAK,SAAS,GAAIryB,EAAa,UAAW,KAAK,SAAS,EAG/G,EACAkyB,EAAuB,UAAU,UAAY,UAAsB,CACjE,KAAK,SAAS,WAChB,EACAA,EAAuB,UAAU,sBAAwB,UAAkC,CACzF,OAAO,KAAK,sBACd,EACAA,EAAuB,UAAU,YAAc,UAAwB,CACrE,MAAO,CAAE,CACX,EACAA,EAAuB,UAAU,SAAW,UAAqB,CAC/D,OAAOA,CACT,EACAE,GAAmB,iCAAiC,IAAM,UAAY,CAAE,MAAO,KAAM,EACrFA,GAAmB,wCAAwC,IAAM,UAAY,CAAE,MAAO,KAAM,EAC5FA,GAAmB,kCAAkC,IAAM,UAAY,CAAE,MAAO,KAAM,EACtFA,GAAmB,2BAA2B,IAAM,UAAY,CAAE,MAAO,GAAE,EAE3E,OAAO,iBAAkBF,EAAwBE,IAEjD,IAAIwC,GAAqB,UAA+B,CACtD,KAAK,UAAY,EACjB,KAAK,gBAAkB,KACvB,KAAK,WAAa,KAClB,IAAIx1B,EAAiB,UAAU,CAAC,EAC5B+yB,EAAY,UAAU,CAAC,EAC3B,KAAK,gBAAkB/yB,EACvB,KAAK,WAAa+yB,CACpB,EACAyC,GAAmB,UAAU,eAAiB,SAAyBC,EAAUnuC,EAAU,CAEzF,GADA,KAAK,UAAYA,EACbA,IAAa,EAAO,OAAO,KAC/B,IAAIouC,EAAcpuC,EAAW,EACzBquC,EAAc,KAAK,IAAIruC,CAAQ,EAC/BsuC,EAAS,KAAK,UAAUD,CAAW,EACnCF,EAAS,QAAU,EACrB,KAAK,kBAAkBA,EAAS,CAAC,EAAGG,CAAM,EAE1C,KAAK,mBAAmBH,EAAUC,EAAaE,CAAM,EAEvD,IAAIC,EAAWD,EAAO,iBACtB,OAAIF,GAAe1sB,EAAiB,QAAQ6sB,CAAQ,EAC7CA,CACT,EACAL,GAAmB,UAAU,8BAAgC,SAAwCC,EAAUC,EAAaE,EAAQ,CAClI,IAAIE,EAAU,KAAK,kBAAkB,KAAK,SAAS,EACnD,GAAIJ,EAAa,CACfE,EAAO,YAAYH,EAAU,EAAI,EACjC,IAAIM,EAAQrF,EAA0B,SAAS+E,EAAU,CAACK,CAAO,EAC7Dh1B,EAAKi1B,EAAM,OAAS,EACxBH,EAAO,iBAAiBG,EAAMj1B,CAAE,EAAGi1B,EAAMj1B,EAAK,CAAC,EAAGwX,EAAS,IAAI,EAC/Dsd,EAAO,gBAAe,EACtB,QAAS7rC,EAAI+W,EAAK,EAAG/W,GAAK,EAAGA,IAC3B6rC,EAAO,eAAeG,EAAMhsC,CAAC,EAAG,EAAI,CAE1C,KAAS,CACL6rC,EAAO,YAAYH,EAAU,EAAK,EAClC,IAAIO,EAAQtF,EAA0B,SAAS+E,EAAUK,CAAO,EAC5Dj1B,EAAKm1B,EAAM,OAAS,EACxBJ,EAAO,iBAAiBI,EAAM,CAAC,EAAGA,EAAM,CAAC,EAAG1d,EAAS,IAAI,EACzDsd,EAAO,gBAAe,EACtB,QAASjyB,EAAM,EAAGA,GAAO9C,EAAI8C,IAC3BiyB,EAAO,eAAeI,EAAMryB,CAAG,EAAG,EAAI,CAEzC,CACDiyB,EAAO,eAAc,EACrBA,EAAO,UAAS,CAClB,EACAJ,GAAmB,UAAU,uBAAyB,SAAiCC,EAAU5c,EAAM+c,EAAQ,CAC7G,IAAIE,EAAU,KAAK,kBAAkB,KAAK,SAAS,EAC/Cjd,IAASP,EAAS,QAASwd,EAAU,CAACA,GAC1C,IAAI1E,EAAOV,EAA0B,SAAS+E,EAAUK,CAAO,EAC3D5lC,EAAIkhC,EAAK,OAAS,EACtBwE,EAAO,iBAAiBxE,EAAKlhC,EAAI,CAAC,EAAGkhC,EAAK,CAAC,EAAGvY,CAAI,EAClD,QAAS9uB,EAAI,EAAGA,GAAKmG,EAAGnG,IAAK,CAC3B,IAAIkpC,EAAgBlpC,IAAM,EAC1B6rC,EAAO,eAAexE,EAAKrnC,CAAC,EAAGkpC,CAAa,CAC7C,CACD2C,EAAO,UAAS,CAClB,EACAJ,GAAmB,UAAU,uBAAyB,SAAiCC,EAAUG,EAAQ,CACvG,IAAIE,EAAU,KAAK,kBAAkB,KAAK,SAAS,EAC/CE,EAAQtF,EAA0B,SAAS+E,EAAUK,CAAO,EAC5Dj1B,EAAKm1B,EAAM,OAAS,EACxBJ,EAAO,iBAAiBI,EAAM,CAAC,EAAGA,EAAM,CAAC,EAAG1d,EAAS,IAAI,EACzD,QAASvuB,EAAI,EAAGA,GAAK8W,EAAI9W,IACvB6rC,EAAO,eAAeI,EAAMjsC,CAAC,EAAG,EAAI,EAEtC6rC,EAAO,eAAc,EACrBA,EAAO,cAAcI,EAAMn1B,EAAK,CAAC,EAAGm1B,EAAMn1B,CAAE,CAAC,EAC7C,IAAIk1B,EAAQrF,EAA0B,SAAS+E,EAAU,CAACK,CAAO,EAC7Dh1B,EAAKi1B,EAAM,OAAS,EACxBH,EAAO,iBAAiBG,EAAMj1B,CAAE,EAAGi1B,EAAMj1B,EAAK,CAAC,EAAGwX,EAAS,IAAI,EAC/D,QAAS3U,EAAM7C,EAAK,EAAG6C,GAAO,EAAGA,IAC/BiyB,EAAO,eAAeG,EAAMpyB,CAAG,EAAG,EAAI,EAExCiyB,EAAO,eAAc,EACrBA,EAAO,cAAcG,EAAM,CAAC,EAAGA,EAAM,CAAC,CAAC,EACvCH,EAAO,UAAS,CAClB,EACAJ,GAAmB,UAAU,kBAAoB,SAA4Bp1B,EAAIw1B,EAAQ,CACvF,OAAQ,KAAK,WAAW,eAAgB,EAAA,CACtC,KAAK/F,EAAiB,UACpB+F,EAAO,aAAax1B,CAAE,EACtB,MACF,KAAKyvB,EAAiB,WACpB+F,EAAO,aAAax1B,CAAE,EACtB,KAEH,CACH,EACAo1B,GAAmB,UAAU,aAAe,SAAuBC,EAAUnuC,EAAU,CAGrF,GAFA,KAAK,UAAYA,EACbA,EAAW,GAAO,CAAC,KAAK,WAAW,cAAe,GAClDA,IAAa,EAAO,OAAO,KAC/B,IAAIquC,EAAc,KAAK,IAAIruC,CAAQ,EAC/BsuC,EAAS,KAAK,UAAUD,CAAW,EACvC,GAAIF,EAAS,QAAU,EACrB,KAAK,kBAAkBA,EAAS,CAAC,EAAGG,CAAM,UAEtC,KAAK,WAAW,gBAAiB,CACnC,IAAIF,EAAcpuC,EAAW,EAC7B,KAAK,8BAA8BmuC,EAAUC,EAAaE,CAAM,CACjE,MAAQ,KAAK,uBAAuBH,EAAUG,CAAM,EAEvD,IAAIK,EAAYL,EAAO,iBACvB,OAAOK,CACT,EACAT,GAAmB,UAAU,oBAAsB,UAAgC,CACjF,OAAO,KAAK,UACd,EACAA,GAAmB,UAAU,kBAAoB,SAA4BU,EAAa,CACxF,OAAOA,EAAc,KAAK,WAAW,kBAAmB,CAC1D,EACAV,GAAmB,UAAU,aAAe,SAAuBC,EAAU5c,EAAMvxB,EAAU,CAE3F,GADA,KAAK,UAAYA,EACbmuC,EAAS,QAAU,EAAK,OAAO,KAAK,aAAaA,EAAUnuC,CAAQ,EACvE,GAAIA,IAAa,EACf,OAAOkuC,GAAmB,gBAAgBC,CAAQ,EAEpD,IAAIG,EAAS,KAAK,UAAUtuC,CAAQ,EACpC,YAAK,uBAAuBmuC,EAAU5c,EAAM+c,CAAM,EAC3CA,EAAO,eAAgB,CAChC,EACAJ,GAAmB,UAAU,mBAAqB,SAA6BC,EAAUC,EAAaE,EAAQ,CAC5G,IAAIE,EAAU,KAAK,kBAAkB,KAAK,SAAS,EACnD,GAAIJ,EAAa,CACf,IAAIK,EAAQrF,EAA0B,SAAS+E,EAAU,CAACK,CAAO,EAC7Dh1B,EAAKi1B,EAAM,OAAS,EACxBH,EAAO,iBAAiBG,EAAMj1B,CAAE,EAAGi1B,EAAMj1B,EAAK,CAAC,EAAGwX,EAAS,IAAI,EAC/Dsd,EAAO,gBAAe,EACtB,QAAS7rC,EAAI+W,EAAK,EAAG/W,GAAK,EAAGA,IAC3B6rC,EAAO,eAAeG,EAAMhsC,CAAC,EAAG,EAAI,CAE1C,KAAS,CACL,IAAIisC,EAAQtF,EAA0B,SAAS+E,EAAUK,CAAO,EAC5Dj1B,EAAKm1B,EAAM,OAAS,EACxBJ,EAAO,iBAAiBI,EAAM,CAAC,EAAGA,EAAM,CAAC,EAAG1d,EAAS,IAAI,EACzDsd,EAAO,gBAAe,EACtB,QAASjyB,EAAM,EAAGA,GAAO9C,EAAI8C,IAC3BiyB,EAAO,eAAeI,EAAMryB,CAAG,EAAG,EAAI,CAEzC,CACDiyB,EAAO,eAAc,CACvB,EACAJ,GAAmB,UAAU,UAAY,SAAoBluC,EAAU,CACrE,OAAO,IAAIwrC,EAAuB,KAAK,gBAAiB,KAAK,WAAYxrC,CAAQ,CACnF,EACAkuC,GAAmB,UAAU,YAAc,UAAwB,CACjE,MAAO,CAAE,CACX,EACAA,GAAmB,UAAU,SAAW,UAAqB,CAC3D,OAAOA,EACT,EACAA,GAAmB,gBAAkB,SAA0BjxB,EAAK,CAElE,QADIqB,EAAO,IAAI,MAAMrB,EAAI,MAAM,EAAE,KAAK,IAAI,EACjCxa,EAAI,EAAGA,EAAI6b,EAAK,OAAQ7b,IAC/B6b,EAAK7b,CAAC,EAAI,IAAIwG,EAAWgU,EAAIxa,CAAC,CAAC,EAEjC,OAAO6b,CACT,EAEA,IAAIuwB,GAAuB,UAAiC,CAC1D,KAAK,WAAa,KAClB,KAAK,KAAO,IAAI/K,EAChB,KAAK,KAAO,IAAIxqB,EAChB,IAAIw1B,EAAY,UAAU,CAAC,EAC3B,KAAK,WAAaA,CACpB,EAEIC,GAAqB,CAAE,aAAc,CAAE,aAAc,EAAM,CAAA,EAC/DF,GAAqB,UAAU,oBAAsB,UAAgC,CACjF,IAAIp4B,EAAS,KAEf,GAAI,UAAU,SAAW,EAAG,CAG1B,QAFIu4B,EAAoB,UAAU,CAAC,EAC/BC,EAAkB,IAAItvB,EACjB,EAAI,KAAK,WAAW,WAAY,EAAE,WAAY,CACrD,IAAIuvB,EAAM,EAAE,OACRn8B,EAAMm8B,EAAI,cACVF,EAAkB,EAAIj8B,EAAI,QAAS,GAAIi8B,EAAkB,EAAIj8B,EAAI,QAAS,GAC9E0D,EAAO,oBAAoBu4B,EAAmBE,EAAI,iBAAgB,EAAID,CAAe,CACtF,CACD,OAAOA,CACX,SAAa,UAAU,SAAW,GAC9B,GAAItkC,EAAa,UAAU,CAAC,EAAG6U,EAAI,GAAM,UAAU,CAAC,YAAavW,GAAc,UAAU,CAAC,YAAaivB,GAKrG,QAJIiX,EAAsB,UAAU,CAAC,EACjCrc,EAAU,UAAU,CAAC,EACrBsc,EAAoB,UAAU,CAAC,EAC/BnyB,EAAM6V,EAAQ,QAAS,EAAC,eAAc,EACjCzW,EAAM,EAAGA,EAAMY,EAAI,OAAS,EAAGZ,IAAO,CAC7C5F,EAAO,KAAK,GAAKwG,EAAIZ,CAAG,EACxB5F,EAAO,KAAK,GAAKwG,EAAIZ,EAAM,CAAC,EACxB5F,EAAO,KAAK,GAAG,EAAIA,EAAO,KAAK,GAAG,GAAKA,EAAO,KAAK,QAAS,EAChE,IAAIsF,EAAO,KAAK,IAAItF,EAAO,KAAK,GAAG,EAAGA,EAAO,KAAK,GAAG,CAAC,EACtD,GAAI,EAAAsF,EAAOozB,EAAoB,IAC3B14B,CAAAA,EAAO,KAAK,aAAc,GAC1B,EAAA04B,EAAoB,EAAI14B,EAAO,KAAK,GAAG,GAAK04B,EAAoB,EAAI14B,EAAO,KAAK,GAAG,IACnF6C,EAAa,mBAAmB7C,EAAO,KAAK,GAAIA,EAAO,KAAK,GAAI04B,CAAmB,IAAM71B,EAAa,MAC1G,KAAIwP,EAAQgK,EAAQ,SAAS9B,EAAS,IAAI,EACrCva,EAAO,KAAK,GAAG,OAAOwG,EAAIZ,CAAG,CAAC,IAAKyM,EAAQgK,EAAQ,SAAS9B,EAAS,KAAK,GAC/E,IAAIqe,EAAK,IAAIC,GAAa74B,EAAO,KAAMqS,CAAK,EAC5CsmB,EAAkB,IAAIC,CAAE,EACzB,SACQ1kC,EAAa,UAAU,CAAC,EAAG6U,EAAI,GAAM,UAAU,CAAC,YAAavW,GAAc0B,EAAa,UAAU,CAAC,EAAG6U,EAAI,EAInH,QAHI+vB,EAAsB,UAAU,CAAC,EACjCnV,EAAW,UAAU,CAAC,EACtBoV,EAAoB,UAAU,CAAC,EAC1BtuB,EAAMkZ,EAAS,SAAQ,EAAIlZ,EAAI,WAAY,CAClD,IAAIoQ,EAAKpQ,EAAI,OACRoQ,EAAG,UAAW,GACnB7a,EAAO,oBAAoB84B,EAAqBje,EAAIke,CAAiB,CACtE,EAGP,EACAX,GAAqB,UAAU,SAAW,SAAmBn7B,EAAG,CAC9D,IAAIu7B,EAAkB,KAAK,oBAAoBv7B,CAAC,EAChD,GAAIu7B,EAAgB,KAAI,IAAO,EAAK,MAAO,GAC3C,IAAII,EAAKxT,GAAY,IAAIoT,CAAe,EACxC,OAAOI,EAAG,UACZ,EACAR,GAAqB,UAAU,YAAc,UAAwB,CACnE,MAAO,CAAE,CACX,EACAA,GAAqB,UAAU,SAAW,UAAqB,CAC7D,OAAOA,EACT,EACAE,GAAmB,aAAa,IAAM,UAAY,CAAE,OAAOO,EAAY,EAEvE,OAAO,iBAAkBT,GAAsBE,IAE/C,IAAIO,GAAe,UAAyB,CAC1C,KAAK,WAAa,KAClB,KAAK,WAAa,KAClB,IAAItL,EAAM,UAAU,CAAC,EACjBlb,EAAQ,UAAU,CAAC,EACvB,KAAK,WAAa,IAAIgb,EAAYE,CAAG,EACrC,KAAK,WAAalb,CACpB,EACAwmB,GAAa,UAAU,UAAY,SAAoBzuB,EAAK,CAC1D,IAAIxX,EAAQwX,EACZ,GAAI,KAAK,WAAW,QAAUxX,EAAM,WAAW,KAAI,EAAM,MAAO,GAChE,GAAI,KAAK,WAAW,QAAUA,EAAM,WAAW,KAAM,EAAI,MAAO,GAChE,IAAIomC,EAAc,KAAK,WAAW,iBAAiBpmC,EAAM,UAAU,EAGnE,OAFIomC,IAAgB,IACpBA,EAAc,GAAKpmC,EAAM,WAAW,iBAAiB,KAAK,UAAU,EAChEomC,IAAgB,GAAYA,EACzB,KAAK,WAAW,UAAUpmC,EAAM,UAAU,CACnD,EACAimC,GAAa,UAAU,SAAW,SAAmBI,EAAMC,EAAM,CAC/D,IAAIC,EAAWF,EAAK,GAAG,UAAUC,EAAK,EAAE,EACxC,OAAIC,IAAa,EAAYA,EACtBF,EAAK,GAAG,UAAUC,EAAK,EAAE,CAClC,EACAL,GAAa,UAAU,SAAW,UAAqB,CACrD,OAAO,KAAK,WAAW,SAAU,CACnC,EACAA,GAAa,UAAU,YAAc,UAAwB,CAC3D,MAAO,CAACzmC,EAAU,CACpB,EACAymC,GAAa,UAAU,SAAW,UAAqB,CACrD,OAAOA,EACT,EAEA,IAAIO,EAAW,SAAmBn4B,EAAI3G,EAAIC,EAAI,CAC5C,KAAK,GAAK0G,GAAM,KAChB,KAAK,GAAK3G,GAAM,KAChB,KAAK,GAAKC,GAAM,IAClB,EACA6+B,EAAS,UAAU,KAAO,UAAiB,CACzC,OAAOA,EAAS,KAAK,KAAK,GAAI,KAAK,GAAI,KAAK,EAAE,CAChD,EACAA,EAAS,UAAU,WAAa,UAAuB,CACrD,OAAOA,EAAS,WAAW,KAAK,GAAI,KAAK,GAAI,KAAK,EAAE,CACtD,EACAA,EAAS,UAAU,aAAe,SAAuBn8B,EAAG,CAC1D,GAAIA,IAAM,KAAQ,MAAM,IAAInL,EAAyB,yBAAyB,EAC9E,OAAOsnC,EAAS,aAAan8B,EAAG,KAAK,GAAI,KAAK,GAAI,KAAK,EAAE,CAC3D,EACAm8B,EAAS,UAAU,kBAAoB,UAA8B,CACnE,OAAOA,EAAS,kBAAkB,KAAK,GAAI,KAAK,GAAI,KAAK,EAAE,CAC7D,EACAA,EAAS,UAAU,QAAU,UAAoB,CAC/C,OAAOA,EAAS,QAAQ,KAAK,GAAI,KAAK,GAAI,KAAK,EAAE,CACnD,EACAA,EAAS,UAAU,aAAe,UAAyB,CACzD,OAAOA,EAAS,aAAa,KAAK,GAAI,KAAK,GAAI,KAAK,EAAE,CACxD,EACAA,EAAS,UAAU,OAAS,UAAmB,CAC7C,OAAOA,EAAS,OAAO,KAAK,GAAI,KAAK,GAAI,KAAK,EAAE,CAClD,EACAA,EAAS,UAAU,SAAW,UAAqB,CACjD,OAAOA,EAAS,SAAS,KAAK,GAAI,KAAK,GAAI,KAAK,EAAE,CACpD,EACAA,EAAS,UAAU,SAAW,UAAqB,CACjD,OAAOA,EAAS,SAAS,KAAK,GAAI,KAAK,GAAI,KAAK,EAAE,CACpD,EACAA,EAAS,UAAU,YAAc,UAAwB,CACvD,MAAO,CAAE,CACX,EACAA,EAAS,UAAU,SAAW,UAAqB,CACjD,OAAOA,CACT,EACAA,EAAS,KAAO,SAAexlC,EAAGC,EAAGpB,EAAG,CACtC,OAAO,KAAK,MAAMA,EAAE,EAAImB,EAAE,IAAMC,EAAE,EAAID,EAAE,IAAMC,EAAE,EAAID,EAAE,IAAMnB,EAAE,EAAImB,EAAE,IAAM,CAAC,CAC7E,EACAwlC,EAAS,WAAa,SAAqBxlC,EAAGC,EAAGpB,EAAG,CAClD,QAASA,EAAE,EAAImB,EAAE,IAAMC,EAAE,EAAID,EAAE,IAAMC,EAAE,EAAID,EAAE,IAAMnB,EAAE,EAAImB,EAAE,IAAM,CACnE,EACAwlC,EAAS,IAAM,SAAcC,EAAKC,EAAKC,EAAKC,EAAK,CAC/C,OAAOH,EAAMG,EAAMF,EAAMC,CAC3B,EACAH,EAAS,aAAe,SAAuBn8B,EAAGw8B,EAAInlC,EAAIC,EAAI,CAC5D,IAAIwR,EAAK0zB,EAAG,EACRhzB,EAAKgzB,EAAG,EACR,EAAInlC,EAAG,EAAIyR,EACXlS,EAAIU,EAAG,EAAIwR,EACXtT,EAAI6B,EAAG,EAAImS,EACX/M,EAAInF,EAAG,EAAIkS,EACX1L,EAAM,EAAIrB,EAAI7F,EAAIpB,EAClBK,EAAKmK,EAAE,EAAI8I,EACXhT,EAAKkK,EAAE,EAAIwJ,EACXnO,GAAKoB,EAAI5G,EAAKe,EAAId,GAAMgI,EACxB7D,GAAK,CAACzE,EAAIK,EAAK,EAAIC,GAAMgI,EACzB2+B,EAAID,EAAG,EAAInhC,GAAKhE,EAAG,EAAImlC,EAAG,GAAKviC,GAAK3C,EAAG,EAAIklC,EAAG,GAClD,OAAOC,CACT,EACAN,EAAS,kBAAoB,SAA4BxlC,EAAGC,EAAGpB,EAAG,CAChE,IAAIknC,EAAQ/lC,EAAE,SAASC,CAAC,EACpB+lC,EAAQ/lC,EAAE,SAASpB,CAAC,EACpBonC,EAAQpnC,EAAE,SAASmB,CAAC,EACpBkmC,EAASH,EACb,OAAIC,EAAQE,IAAUA,EAASF,GAC3BC,EAAQC,IAAUA,EAASD,GACxBC,CACT,EACAV,EAAS,QAAU,SAAkBxlC,EAAGC,EAAGpB,EAAG,CAG5C,MAFI,GAACohC,EAAM,QAAQjgC,EAAGC,EAAGpB,CAAC,GACtB,CAACohC,EAAM,QAAQhgC,EAAGpB,EAAGmB,CAAC,GACtB,CAACigC,EAAM,QAAQphC,EAAGmB,EAAGC,CAAC,EAE5B,EACAulC,EAAS,aAAe,SAAuBxlC,EAAGC,EAAGpB,EAAG,CACtD,IAAIsnC,EAAKtnC,EAAE,EACPunC,EAAKvnC,EAAE,EACPmF,EAAKhE,EAAE,EAAImmC,EACXE,EAAKrmC,EAAE,EAAIomC,EACXE,EAAKrmC,EAAE,EAAIkmC,EACXI,EAAKtmC,EAAE,EAAImmC,EACX5+B,EAAQ,EAAIg+B,EAAS,IAAIxhC,EAAIqiC,EAAIC,EAAIC,CAAE,EACvC5+B,EAAO69B,EAAS,IAAIa,EAAIriC,EAAKA,EAAKqiC,EAAKA,EAAIE,EAAID,EAAKA,EAAKC,EAAKA,CAAE,EAChEx+B,EAAOy9B,EAAS,IAAIxhC,EAAIA,EAAKA,EAAKqiC,EAAKA,EAAIC,EAAIA,EAAKA,EAAKC,EAAKA,CAAE,EAChEC,EAAML,EAAKx+B,EAAOH,EAClBi/B,EAAML,EAAKr+B,EAAOP,EACtB,OAAO,IAAI5I,EAAW4nC,EAAKC,CAAG,CAChC,EACAjB,EAAS,sBAAwB,SAAgCxlC,EAAGC,EAAG,CACrE,IAAIf,EAAKe,EAAE,EAAID,EAAE,EACbb,EAAKc,EAAE,EAAID,EAAE,EACb0mC,EAAK,IAAIt9B,GAAYpJ,EAAE,EAAId,EAAK,EAAKc,EAAE,EAAIb,EAAK,EAAK,CAAG,EACxDwnC,EAAK,IAAIv9B,GAAYpJ,EAAE,EAAIb,EAAKD,EAAK,EAAKc,EAAE,EAAId,EAAKC,EAAK,EAAK,CAAG,EACtE,OAAO,IAAIiK,GAAYs9B,EAAIC,CAAE,CAC/B,EACAnB,EAAS,cAAgB,SAAwBxlC,EAAGC,EAAGpB,EAAG,CACxD,IAAI+nC,EAAO3mC,EAAE,SAASD,CAAC,EACnBuT,EAAOtT,EAAE,SAASpB,CAAC,EACnBgoC,EAAOD,GAAQA,EAAOrzB,GACtBrU,EAAKL,EAAE,EAAImB,EAAE,EACbb,EAAKN,EAAE,EAAImB,EAAE,EACb8mC,EAAU,IAAIloC,EAAWoB,EAAE,EAAI6mC,EAAO3nC,EAAIc,EAAE,EAAI6mC,EAAO1nC,CAAE,EAC7D,OAAO2nC,CACT,EACAtB,EAAS,OAAS,SAAiBxlC,EAAGC,EAAGpB,EAAG,CAC1C,IAAIg8B,EAAK56B,EAAE,EAAID,EAAE,EACb86B,EAAK76B,EAAE,EAAID,EAAE,EACb+mC,EAAK9mC,EAAE,EAAID,EAAE,EACbgnC,EAAKnoC,EAAE,EAAImB,EAAE,EACbinC,EAAKpoC,EAAE,EAAImB,EAAE,EACbknC,EAAKroC,EAAE,EAAImB,EAAE,EACbmnC,EAASrM,EAAKoM,EAAKH,EAAKE,EACxBG,EAASL,EAAKC,EAAKnM,EAAKqM,EACxBG,EAASxM,EAAKoM,EAAKnM,EAAKkM,EACxBM,EAAQH,EAASA,EAASC,EAASA,EAASC,EAASA,EACrDE,EAAS,KAAK,KAAKD,CAAK,EAAI,EAChC,OAAOC,CACT,EACA/B,EAAS,SAAW,SAAmBxlC,EAAGC,EAAGpB,EAAG,CAC9C,IAAIlG,GAAKqH,EAAE,EAAIC,EAAE,EAAIpB,EAAE,GAAK,EACxBjG,GAAKoH,EAAE,EAAIC,EAAE,EAAIpB,EAAE,GAAK,EAC5B,OAAO,IAAID,EAAWjG,EAAGC,CAAC,CAC5B,EACA4sC,EAAS,SAAW,SAAmBxlC,EAAGC,EAAGpB,EAAG,CAC9C,IAAI+nC,EAAO3mC,EAAE,SAASpB,CAAC,EACnB2oC,EAAOxnC,EAAE,SAASnB,CAAC,EACnB0U,EAAOvT,EAAE,SAASC,CAAC,EACnBwnC,EAASb,EAAOY,EAAOj0B,EACvBm0B,GAAad,EAAO5mC,EAAE,EAAIwnC,EAAOvnC,EAAE,EAAIsT,EAAO1U,EAAE,GAAK4oC,EACrDE,GAAaf,EAAO5mC,EAAE,EAAIwnC,EAAOvnC,EAAE,EAAIsT,EAAO1U,EAAE,GAAK4oC,EACzD,OAAO,IAAI7oC,EAAW8oC,EAAWC,CAAS,CAC5C,EAEA,IAAIC,GAAwB,UAAkC,CAC5D,KAAK,WAAa,KAClB,KAAK,UAAY,KACjB,KAAK,cAAgB,KACrB,KAAK,WAAa,IAAItyB,EACtB,IAAIuyB,EAAY,UAAU,CAAC,EACvBlyC,EAAW,UAAU,CAAC,EACtBmyC,EAAe,UAAU,CAAC,EAC9B,KAAK,WAAaD,EAClB,KAAK,UAAYlyC,EACjB,KAAK,cAAgBmyC,CACvB,EACAF,GAAsB,UAAU,SAAW,SAAmBv+B,EAAG,CAC/D,GAAI,KAAK,WAAa,EAAO,OAAO,KACpC,IAAInS,EAAQmS,EAAE,iBACV0+B,EAAQ,KAAK,cAAc,aAAa7wC,EAAO,KAAK,SAAS,EACjE,KAAK,SAAS6wC,EAAO5nC,EAAS,SAAUA,EAAS,QAAQ,CAC3D,EACAynC,GAAsB,UAAU,WAAa,SAAqBv+B,EAAG,CACjE,IAAI+C,EAAS,KAEXsuB,EAAiB,KAAK,UACtBsN,EAAarhB,EAAS,KACtB,KAAK,UAAY,IACnB+T,EAAiB,CAAC,KAAK,UACvBsN,EAAarhB,EAAS,OAExB,IAAI1Z,EAAQ5D,EAAE,kBACV4+B,EAAa5wB,EAAiB,qBAAqBpK,EAAM,eAAgB,CAAA,EAE7E,GADI,KAAK,UAAY,GAAO,KAAK,mBAAmBA,EAAO,KAAK,SAAS,GACrE,KAAK,WAAa,GAAOg7B,EAAW,OAAS,EAAK,OAAO,KAC7D,KAAK,eAAeA,EAAYvN,EAAgBsN,EAAY7nC,EAAS,SAAUA,EAAS,QAAQ,EAChG,QAAS/H,EAAI,EAAGA,EAAIiR,EAAE,mBAAkB,EAAIjR,IAAK,CAC/C,IAAImqB,EAAOlZ,EAAE,iBAAiBjR,CAAC,EAC3B8vC,EAAY7wB,EAAiB,qBAAqBkL,EAAK,eAAgB,CAAA,EACvEnW,EAAO,UAAY,GAAOA,EAAO,mBAAmBmW,EAAM,CAACnW,EAAO,SAAS,GAC/EA,EAAO,eAAe87B,EAAWxN,EAAgB/T,EAAS,SAASqhB,CAAU,EAAG7nC,EAAS,SAAUA,EAAS,QAAQ,CACrH,CACH,EACAynC,GAAsB,UAAU,2BAA6B,SAAqCO,EAAeC,EAAgB,CAC/H,IAAIC,EAAM,IAAI7C,EAAS2C,EAAc,CAAC,EAAGA,EAAc,CAAC,EAAGA,EAAc,CAAC,CAAC,EACvEG,EAAWD,EAAI,WACfE,EAAet5B,EAAa,kBAAkBq5B,EAAUD,EAAI,GAAIA,EAAI,EAAE,EAC1E,OAAOE,EAAe,KAAK,IAAIH,CAAc,CAC/C,EACAR,GAAsB,UAAU,cAAgB,SAAwBhwC,EAAM,CAC5E,GAAI,KAAK,WAAa,GAAO,CAAC,KAAK,cAAc,sBAAsB,gBAAmB,OAAO,KACjG,IAAIV,EAAQmgB,EAAiB,qBAAqBzf,EAAK,eAAgB,CAAA,EACnEmwC,EAAQ,KAAK,cAAc,aAAa7wC,EAAO,KAAK,SAAS,EACjE,KAAK,SAAS6wC,EAAO5nC,EAAS,SAAUA,EAAS,QAAQ,CAC3D,EACAynC,GAAsB,UAAU,SAAW,SAAmB1wC,EAAO8yB,EAASC,EAAU,CACtF,GAAI/yB,IAAU,MAAQA,EAAM,OAAS,EAAK,OAAO,KACjD,IAAIuK,EAAI,IAAIs2B,GAAmB7gC,EAAO,IAAIyyB,EAAM,EAAGxpB,EAAS,SAAU6pB,EAASC,CAAQ,CAAC,EACxF,KAAK,WAAW,IAAIxoB,CAAC,CACvB,EACAmmC,GAAsB,UAAU,UAAY,UAAsB,CAChE,YAAK,IAAI,KAAK,UAAU,EACjB,KAAK,UACd,EACAA,GAAsB,UAAU,eAAiB,SAAyB1wC,EAAOwjC,EAAgBxT,EAAMshB,EAAWC,EAAY,CAC5H,GAAI/N,IAAmB,GAAOxjC,EAAM,OAASyqB,GAAW,mBAAsB,OAAO,KACrF,IAAIqI,EAAUwe,EACVve,EAAWwe,EACXvxC,EAAM,QAAUyqB,GAAW,oBAAsB1S,EAAa,MAAM/X,CAAK,IAC3E8yB,EAAUye,EACVxe,EAAWue,EACXthB,EAAOP,EAAS,SAASO,CAAI,GAE/B,IAAI6gB,EAAQ,KAAK,cAAc,aAAa7wC,EAAOgwB,EAAMwT,CAAc,EACvE,KAAK,SAASqN,EAAO/d,EAASC,CAAQ,CACxC,EACA2d,GAAsB,UAAU,IAAM,SAAcxsC,EAAG,CACrD,GAAIA,EAAE,UAAa,OAAO,KACtBA,aAAailB,GAAW,KAAK,WAAWjlB,CAAC,EACpCA,aAAakiB,EAAc,KAAK,cAAcliB,CAAC,EAC/CA,aAAa+kB,GAAS,KAAK,SAAS/kB,CAAC,EACrCA,aAAasmB,GAAc,KAAK,cAActmB,CAAC,EAC/CA,aAAawhB,GAAmB,KAAK,cAAcxhB,CAAC,EACpDA,aAAa0mB,GAAgB,KAAK,cAAc1mB,CAAC,EACjDA,aAAaqgB,IAAsB,KAAK,cAAcrgB,CAAC,CAElE,EACAwsC,GAAsB,UAAU,mBAAqB,SAA6BlzC,EAAM0zC,EAAgB,CACtG,IAAIM,EAAYh0C,EAAK,iBAErB,GAAIg0C,EAAU,OAAS,EAAK,OAAON,EAAiB,EACpD,GAAIM,EAAU,SAAW,EAAK,OAAO,KAAK,2BAA2BA,EAAWN,CAAc,EAC9F,IAAI1/B,EAAMhU,EAAK,sBACXi0C,EAAkB,KAAK,IAAIjgC,EAAI,YAAaA,EAAI,SAAQ,CAAE,EAC9D,OAAI0/B,EAAiB,GAAO,EAAI,KAAK,IAAIA,CAAc,EAAIO,CAE7D,EACAf,GAAsB,UAAU,cAAgB,SAAwBxrB,EAAI,CAG1E,QAFMhQ,EAAS,KAENhU,EAAI,EAAGA,EAAIgkB,EAAG,iBAAgB,EAAIhkB,IAAK,CAC9C,IAAIgD,EAAIghB,EAAG,aAAahkB,CAAC,EACzBgU,EAAO,IAAIhR,CAAC,CACb,CACH,EACAwsC,GAAsB,UAAU,YAAc,UAAwB,CACpE,MAAO,CAAE,CACX,EACAA,GAAsB,UAAU,SAAW,UAAqB,CAC9D,OAAOA,EACT,EAEA,IAAIgB,GAAyB,UAAmC,GAEhEA,GAAuB,UAAU,OAAS,SAAiBv/B,EAAG,CAAA,EAC9Du/B,GAAuB,UAAU,YAAc,UAAwB,CACrE,MAAO,CAAE,CACX,EACAA,GAAuB,UAAU,SAAW,UAAqB,CAC/D,OAAOA,EACT,EAEA,IAAIC,GAA6B,UAAuC,CACtE,KAAK,QAAU,KACf,KAAK,SAAW,KAChB,KAAK,KAAO,KACZ,KAAK,OAAS,KACd,KAAK,uBAAyB,KAC9B,IAAIpuB,EAAS,UAAU,CAAC,EACxB,KAAK,QAAUA,EACf,KAAK,SAAW,GAChB,KAAK,OAAS,EACd,KAAK,KAAOA,EAAO,kBACrB,EACAouB,GAA2B,UAAU,KAAO,UAAiB,CAC3D,GAAI,KAAK,SACP,YAAK,SAAW,GACZA,GAA2B,SAAS,KAAK,OAAO,GAAK,KAAK,SACvD,KAAK,QAEd,GAAI,KAAK,yBAA2B,KAAM,CACxC,GAAI,KAAK,uBAAuB,UAC9B,OAAO,KAAK,uBAAuB,KAAM,EAEzC,KAAK,uBAAyB,IAEjC,CACD,GAAI,KAAK,QAAU,KAAK,KACtB,MAAM,IAAIxzB,GAEZ,IAAImB,EAAM,KAAK,QAAQ,aAAa,KAAK,QAAQ,EACjD,OAAIA,aAAeiF,IACjB,KAAK,uBAAyB,IAAIotB,GAA2BryB,CAAG,EACzD,KAAK,uBAAuB,KAAM,GAEpCA,CACT,EACAqyB,GAA2B,UAAU,OAAS,UAAmB,CAC/D,MAAM,IAAI,MAAM,KAAK,SAAU,EAAC,QAAO,CAAE,CAC3C,EACAA,GAA2B,UAAU,QAAU,UAAoB,CACjE,GAAI,KAAK,SACP,MAAO,GAET,GAAI,KAAK,yBAA2B,KAAM,CACxC,GAAI,KAAK,uBAAuB,UAC9B,MAAO,GAET,KAAK,uBAAyB,IAC/B,CACD,MAAI,OAAK,QAAU,KAAK,KAI1B,EACAA,GAA2B,UAAU,YAAc,UAAwB,CACzE,MAAO,CAAC3zB,EAAQ,CAClB,EACA2zB,GAA2B,UAAU,SAAW,UAAqB,CACnE,OAAOA,EACT,EACAA,GAA2B,SAAW,SAAmBv1C,EAAM,CAC7D,MAAO,EAAEA,aAAgBmoB,GAC3B,EAEA,IAAIqtB,GAA2B,UAAqC,CAClE,KAAK,MAAQ,KACb,IAAIx1C,EAAO,UAAU,CAAC,EACtB,KAAK,MAAQA,CACf,EACAw1C,GAAyB,UAAU,OAAS,SAAiBz/B,EAAG,CAC9D,OAAOy/B,GAAyB,OAAOz/B,EAAG,KAAK,KAAK,CACtD,EACAy/B,GAAyB,UAAU,YAAc,UAAwB,CACvE,MAAO,CAACF,EAAsB,CAChC,EACAE,GAAyB,UAAU,SAAW,UAAqB,CACjE,OAAOA,EACT,EACAA,GAAyB,cAAgB,SAAwBz/B,EAAG3U,EAAM,CACxE,OAAKA,EAAK,oBAAqB,EAAC,WAAW2U,CAAC,EACrC4F,EAAa,cAAc5F,EAAG3U,EAAK,eAAc,CAAE,EADF,EAE1D,EACAo0C,GAAyB,uBAAyB,SAAiCz/B,EAAG4X,EAAM,CAC1F,GAAIA,EAAK,UAAa,MAAO,GAC7B,IAAIhU,EAAQgU,EAAK,kBACjB,GAAI,CAAC6nB,GAAyB,cAAcz/B,EAAG4D,CAAK,EAAK,MAAO,GAChE,QAAS,EAAI,EAAG,EAAIgU,EAAK,mBAAkB,EAAI,IAAK,CAClD,IAAIsB,EAAOtB,EAAK,iBAAiB,CAAC,EAClC,GAAI6nB,GAAyB,cAAcz/B,EAAGkZ,CAAI,EAAK,MAAO,EAC/D,CACD,MAAO,EACT,EACAumB,GAAyB,cAAgB,SAAwBz/B,EAAG/V,EAAM,CACxE,GAAIA,aAAgB+sB,GAClB,OAAOyoB,GAAyB,uBAAuBz/B,EAAG/V,CAAI,EACzD,GAAIA,aAAgBmoB,GAEzB,QADIstB,EAAQ,IAAIF,GAA2Bv1C,CAAI,EACxCy1C,EAAM,WAAW,CACtB,IAAIC,EAAKD,EAAM,OACf,GAAIC,IAAO11C,GAAYw1C,GAAyB,cAAcz/B,EAAG2/B,CAAE,EAAK,MAAO,EAChF,CAEH,MAAO,EACT,EACAF,GAAyB,OAAS,SAAiBz/B,EAAG/V,EAAM,CAC1D,OAAIA,EAAK,QAAO,EAAa6M,EAAS,SAClC2oC,GAAyB,cAAcz/B,EAAG/V,CAAI,EAAY6M,EAAS,SAChEA,EAAS,QAClB,EAEA,IAAI8oC,GAAc,UAAwB,CACxC,KAAK,SAAW,IAAI1uB,GACpB,KAAK,UAAY,KACjB,KAAK,kBAAoB,CAACpa,EAAS,KAAMA,EAAS,IAAI,CACxD,EACA8oC,GAAY,UAAU,UAAY,SAAoB7Z,EAAI,CACxD,KAAK,SAAQ,EACb,IAAIh3B,EAAI,KAAK,UAAU,QAAQg3B,CAAE,EAC7B8Z,EAAU9wC,EAAI,EAClB,OAAIA,IAAM,IAAK8wC,EAAU,KAAK,UAAU,OAAS,GAC1C,KAAK,UAAU,IAAIA,CAAO,CACnC,EACAD,GAAY,UAAU,oBAAsB,SAA8B7uC,EAAW,CAEnF,QADI+uC,EAAWhpC,EAAS,KACfqd,EAAK,KAAK,SAAQ,EAAIA,EAAG,WAAY,CAC5C,IAAI/b,EAAI+b,EAAG,OACPgN,EAAQ/oB,EAAE,WACV+oB,EAAM,OAAOpwB,CAAS,GAAKowB,EAAM,YAAYpwB,EAAWusB,EAAS,IAAI,IAAMxmB,EAAS,OAAQgpC,EAAW3e,EAAM,YAAYpwB,EAAWusB,EAAS,IAAI,EACtJ,CACD,GAAIwiB,IAAahpC,EAAS,KAAQ,OAAO,KAEzC,QADIipC,EAAUD,EACLE,EAAO,KAAK,SAAQ,EAAIA,EAAK,WAAY,CAChD,IAAIxkC,EAAMwkC,EAAK,OACX5b,EAAU5oB,EAAI,WAElB,GADI4oB,EAAQ,YAAYrzB,EAAWusB,EAAS,EAAE,IAAMxmB,EAAS,MAAQstB,EAAQ,YAAYrzB,EAAWusB,EAAS,GAAIyiB,CAAO,EACpH3b,EAAQ,OAAOrzB,CAAS,EAAG,CAC7B,IAAI4vB,EAAUyD,EAAQ,YAAYrzB,EAAWusB,EAAS,IAAI,EACtDsD,EAAWwD,EAAQ,YAAYrzB,EAAWusB,EAAS,KAAK,EAC5D,GAAIsD,IAAa9pB,EAAS,KAAM,CAC9B,GAAI8pB,IAAamf,EAAW,MAAM,IAAIzhB,GAAkB,yBAA0B9iB,EAAI,cAAa,CAAE,EACjGmlB,IAAY7pB,EAAS,MACvBsN,EAAO,qBAAqB,8BAAgC5I,EAAI,cAAa,EAAK,GAAG,EAEvFukC,EAAUpf,CAClB,MACQvc,EAAO,OAAOggB,EAAQ,YAAYrzB,EAAWusB,EAAS,IAAI,IAAMxmB,EAAS,KAAM,wBAAwB,EACvGstB,EAAQ,YAAYrzB,EAAWusB,EAAS,MAAOyiB,CAAO,EACtD3b,EAAQ,YAAYrzB,EAAWusB,EAAS,KAAMyiB,CAAO,CAExD,CACF,CACH,EACAH,GAAY,UAAU,cAAgB,UAA0B,CAC9D,IAAIzrB,EAAK,KAAK,WACd,GAAI,CAACA,EAAG,UAAa,OAAO,KAC5B,IAAI,EAAIA,EAAG,OACX,OAAO,EAAE,cAAe,CAC1B,EACAyrB,GAAY,UAAU,MAAQ,SAAgB9c,EAAK,CACjDrjB,GAAO,IAAI,QAAQ,kBAAoB,KAAK,cAAa,CAAE,EAC3D,QAAS0U,EAAK,KAAK,SAAQ,EAAIA,EAAG,WAAY,CAC5C,IAAI/b,EAAI+b,EAAG,OACX/b,EAAE,MAAM0qB,CAAG,CACZ,CACH,EACA8c,GAAY,UAAU,uBAAyB,SAAiCK,EAAW,CACzF,YAAK,qBAAqBA,EAAU,oBAAqB,CAAA,EAClD,KAAK,0BAA0B,CAAC,CACzC,EACAL,GAAY,UAAU,0BAA4B,SAAoC7uC,EAAW,CAC/F,IAAI8xB,EAAQ,KAAK,WACjB,GAAIA,EAAM,KAAI,GAAM,EAAK,MAAO,GAChC,IAAIqd,EAAgBrd,EAAM,KAAI,EAAK,EAC/Bsd,EAAatd,EAAM,IAAIqd,CAAa,EAAE,SAAQ,EAC9CJ,EAAWK,EAAW,YAAYpvC,EAAWusB,EAAS,IAAI,EAC9DlZ,EAAO,OAAO07B,IAAahpC,EAAS,KAAM,4BAA4B,EAEtE,QADIipC,EAAUD,EACL3rB,EAAK,KAAK,SAAQ,EAAIA,EAAG,WAAY,CAC5C,IAAI/b,EAAI+b,EAAG,OACPgN,EAAQ/oB,EAAE,WACdgM,EAAO,OAAO+c,EAAM,OAAOpwB,CAAS,EAAG,qBAAqB,EAC5D,IAAI4vB,EAAUQ,EAAM,YAAYpwB,EAAWusB,EAAS,IAAI,EACpDsD,EAAWO,EAAM,YAAYpwB,EAAWusB,EAAS,KAAK,EAI1D,GAHIqD,IAAYC,GAGZA,IAAamf,EACf,MAAO,GAETA,EAAUpf,CACX,CACD,MAAO,EACT,EACAif,GAAY,UAAU,UAAY,SAAoBQ,EAAS,CAC3D,IAAIr9B,EAAS,KAEf,KAAK,SAAQ,EACb,QAAShU,EAAI,EAAGA,EAAI,KAAK,UAAU,OAAQA,IAAK,CAC9C,IAAIqJ,EAAI2K,EAAO,UAAU,IAAIhU,CAAC,EAC9B,GAAIqJ,IAAMgoC,EAAW,OAAOrxC,CAC7B,CACD,MAAO,EACT,EACA6wC,GAAY,UAAU,SAAW,UAAqB,CACpD,OAAO,KAAK,SAAU,EAAC,SAAU,CACnC,EACAA,GAAY,UAAU,SAAW,UAAqB,CACpD,OAAI,KAAK,YAAc,OACrB,KAAK,UAAY,IAAI3zB,EAAU,KAAK,SAAS,OAAM,CAAE,GAEhD,KAAK,SACd,EACA2zB,GAAY,UAAU,YAAc,SAAsB7uC,EAAWiP,EAAG/V,EAAM,CAC5E,OAAI,KAAK,kBAAkB8G,CAAS,IAAM+F,EAAS,OACjD,KAAK,kBAAkB/F,CAAS,EAAI0uC,GAAyB,OAAOz/B,EAAG/V,EAAK8G,CAAS,EAAE,YAAa,CAAA,GAE/F,KAAK,kBAAkBA,CAAS,CACzC,EACA6uC,GAAY,UAAU,SAAW,UAAqB,CACpD,IAAI3mC,EAAM,IAAIf,GACde,EAAI,OAAO,kBAAoB,KAAK,cAAe,CAAA,EACnDA,EAAI,OAAO;AAAA,CAAI,EACf,QAASkb,EAAK,KAAK,SAAQ,EAAIA,EAAG,WAAY,CAC5C,IAAI/b,EAAI+b,EAAG,OACXlb,EAAI,OAAOb,CAAC,EACZa,EAAI,OAAO;AAAA,CAAI,CAChB,CACD,OAAOA,EAAI,SAAU,CACvB,EACA2mC,GAAY,UAAU,qBAAuB,SAA+Brb,EAAkB,CAC5F,QAASpQ,EAAK,KAAK,SAAQ,EAAIA,EAAG,WAAY,CAC5C,IAAI4R,EAAK5R,EAAG,OACZ4R,EAAG,aAAaxB,CAAgB,CACjC,CACH,EACAqb,GAAY,UAAU,iBAAmB,SAA2BK,EAAW,CAC3E,IAAIl9B,EAAS,KAEf,KAAK,qBAAqBk9B,EAAU,CAAC,EAAE,oBAAqB,CAAA,EAC5D,KAAK,oBAAoB,CAAC,EAC1B,KAAK,oBAAoB,CAAC,EAE1B,QADII,EAA6B,CAAC,GAAO,EAAK,EACrClsB,EAAK,KAAK,SAAQ,EAAIA,EAAG,WAGhC,QAFI/b,EAAI+b,EAAG,OACPgN,EAAQ/oB,EAAE,WACLsnC,EAAQ,EAAGA,EAAQ,EAAGA,IACzBve,EAAM,OAAOue,CAAK,GAAKve,EAAM,YAAYue,CAAK,IAAM5oC,EAAS,WAAYupC,EAA2BX,CAAK,EAAI,IAGrH,QAASM,EAAO,KAAK,SAAQ,EAAIA,EAAK,WAGpC,QAFIxkC,EAAMwkC,EAAK,OACX5b,EAAU5oB,EAAI,WACT8kC,EAAU,EAAGA,EAAU,EAAGA,IACjC,GAAIlc,EAAQ,UAAUkc,CAAO,EAAG,CAC9B,IAAIjgB,EAAMvpB,EAAS,KACnB,GAAIupC,EAA2BC,CAAO,EACpCjgB,EAAMvpB,EAAS,aACV,CACL,IAAIkJ,EAAIxE,EAAI,gBACZ6kB,EAAMtd,EAAO,YAAYu9B,EAAStgC,EAAGigC,CAAS,CAC/C,CACD7b,EAAQ,sBAAsBkc,EAASjgB,CAAG,CAC3C,CAGP,EACAuf,GAAY,UAAU,UAAY,UAAsB,CACtD,OAAO,KAAK,SAAS,KAAM,CAC7B,EACAA,GAAY,UAAU,cAAgB,SAAwBxnC,EAAG+U,EAAK,CACpE,KAAK,SAAS,IAAI/U,EAAG+U,CAAG,EACxB,KAAK,UAAY,IACnB,EACAyyB,GAAY,UAAU,YAAc,UAAwB,CAC1D,MAAO,CAAE,CACX,EACAA,GAAY,UAAU,SAAW,UAAqB,CACpD,OAAOA,EACT,EAEA,IAAIW,GAAoB,SAAUC,EAAgB,CAChD,SAASD,GAAoB,CAC3BC,EAAe,KAAK,IAAI,EACxB,KAAK,oBAAsB,KAC3B,KAAK,OAAS,KACd,KAAK,uBAAyB,EAC9B,KAAK,qBAAuB,CAC7B,CAED,OAAKA,IAAiBD,EAAiB,UAAYC,GACnDD,EAAiB,UAAY,OAAO,OAAQC,GAAkBA,EAAe,WAC7ED,EAAiB,UAAU,YAAcA,EACzCA,EAAiB,UAAU,wBAA0B,UAAoC,CACvF,IAAIx9B,EAAS,KAEb,KAAK,mBAAkB,EAIvB,QAHI09B,EAAW,KACXC,EAAW,KACXC,EAAQ,KAAK,uBACR5xC,EAAI,EAAGA,EAAI,KAAK,oBAAoB,OAAQA,IAAK,CACxD,IAAI6xC,EAAU79B,EAAO,oBAAoB,IAAIhU,CAAC,EAC1C8xC,EAASD,EAAQ,SACrB,GAAKA,EAAQ,SAAQ,EAAG,OAAQ,EAEhC,OADIH,IAAa,MAAQG,EAAQ,WAAU,IAAMH,EAAWG,GACpDD,EAAK,CACX,KAAK59B,EAAO,uBACV,GAAI,CAAC89B,EAAO,WAAY,EAAI,SAC5BH,EAAWG,EACXF,EAAQ59B,EAAO,qBACf,MACF,KAAKA,EAAO,qBACV,GAAI,CAAC69B,EAAQ,WAAY,EAAI,SAC7BF,EAAS,QAAQE,CAAO,EACxBD,EAAQ59B,EAAO,uBACf,KAEH,CACF,CACD,GAAI49B,IAAU,KAAK,qBAAsB,CACvC,GAAIF,IAAa,KAAQ,MAAM,IAAIniB,GAAkB,4BAA6B,KAAK,cAAa,CAAE,EACtGla,EAAO,OAAOq8B,EAAS,WAAY,EAAE,sCAAsC,EAC3EC,EAAS,QAAQD,CAAQ,CAC1B,CACL,EACEF,EAAiB,UAAU,OAAS,SAAiBxa,EAAI,CACvD,IAAInI,EAAKmI,EACT,KAAK,cAAcnI,EAAIA,CAAE,CAC7B,EACE2iB,EAAiB,UAAU,iBAAmB,UAA6B,CACzE,IAAI1d,EAAQ,KAAK,WACbjV,EAAOiV,EAAM,OACjB,GAAIjV,EAAO,EAAK,OAAO,KACvB,IAAIkzB,EAAMje,EAAM,IAAI,CAAC,EACrB,GAAIjV,IAAS,EAAK,OAAOkzB,EACzB,IAAIC,EAASle,EAAM,IAAIjV,EAAO,CAAC,EAC3BozB,EAAQF,EAAI,cACZld,EAAQmd,EAAO,cACnB,OAAItd,EAAS,WAAWud,CAAK,GAAKvd,EAAS,WAAWG,CAAK,EAAYkd,EAAgB,CAACrd,EAAS,WAAWud,CAAK,GAAK,CAACvd,EAAS,WAAWG,CAAK,EAAYmd,EAEtJD,EAAI,MAAK,IAAO,EAAYA,EAAgBC,EAAO,MAAK,IAAO,EAAYA,GAEjF38B,EAAO,qBAAqB,6CAA6C,EAClE,KACX,EACEm8B,EAAiB,UAAU,MAAQ,SAAgBzd,EAAK,CACtDrjB,GAAO,IAAI,QAAQ,qBAAuB,KAAK,cAAa,CAAE,EAC9D,QAAS0U,EAAK,KAAK,SAAQ,EAAIA,EAAG,WAAY,CAC5C,IAAIyJ,EAAKzJ,EAAG,OACZ2O,EAAI,MAAM,MAAM,EAChBlF,EAAG,MAAMkF,CAAG,EACZA,EAAI,QAAO,EACXA,EAAI,MAAM,KAAK,EACflF,EAAG,OAAM,EAAG,MAAMkF,CAAG,EACrBA,EAAI,QAAO,CACZ,CACL,EACEyd,EAAiB,UAAU,mBAAqB,UAA+B,CAC7E,IAAIx9B,EAAS,KAEb,GAAI,KAAK,sBAAwB,KAAQ,OAAO,KAAK,oBACrD,KAAK,oBAAsB,IAAIkJ,EAC/B,QAASkI,EAAK,KAAK,SAAQ,EAAIA,EAAG,WAAY,CAC5C,IAAIyJ,EAAKzJ,EAAG,QACRyJ,EAAG,WAAU,GAAMA,EAAG,OAAM,EAAG,eAAgB7a,EAAO,oBAAoB,IAAI6a,CAAE,CACrF,CACD,OAAO,KAAK,mBAChB,EACE2iB,EAAiB,UAAU,gBAAkB,SAA0BU,EAAW,CAChF,QAAS9sB,EAAK,KAAK,SAAQ,EAAIA,EAAG,WAAY,CAC5C,IAAIyJ,EAAKzJ,EAAG,OACRgN,EAAQvD,EAAG,WACfuD,EAAM,sBAAsB,EAAG8f,EAAU,YAAY,CAAC,CAAC,EACvD9f,EAAM,sBAAsB,EAAG8f,EAAU,YAAY,CAAC,CAAC,CACxD,CACL,EACEV,EAAiB,UAAU,qBAAuB,UAAiC,CACjF,IAAIx9B,EAAS,KAEb,KAAK,SAAQ,EAGb,QAFIm+B,EAAU,KACVC,EAAU,KACLpyC,EAAI,KAAK,UAAU,OAAS,EAAGA,GAAK,EAAGA,IAAK,CACnD,IAAI6xC,EAAU79B,EAAO,UAAU,IAAIhU,CAAC,EAChC8xC,EAASD,EAAQ,SACjBO,IAAY,OAAQA,EAAUN,GAC9BK,IAAY,MAAQL,EAAO,QAAQK,CAAO,EAC9CA,EAAUN,CACX,CACDO,EAAQ,QAAQD,CAAO,CAC3B,EACEX,EAAiB,UAAU,cAAgB,UAA0B,CACnE,IAAIx9B,EAAS,KAEb,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAI6a,EAAK,UAAU,CAAC,EAChBwjB,EAAY,KAAK,UAAUxjB,CAAE,EAE7ByjB,EAAazjB,EAAG,SAASN,EAAS,IAAI,EACtCgkB,EAAkB1jB,EAAG,SAASN,EAAS,KAAK,EAC5CikB,EAAY,KAAK,cAAcH,EAAY,EAAG,KAAK,UAAU,OAAQC,CAAU,EAC/EG,EAAY,KAAK,cAAc,EAAGJ,EAAWG,CAAS,EAC1D,GAAIC,IAAcF,EAAmB,MAAM,IAAIhjB,GAAkB,qBAAuBV,EAAG,cAAa,CAAE,CAChH,SAAe,UAAU,SAAW,EAAG,CAKjC,QAJI+D,EAAa,UAAU,CAAC,EACxB8f,EAAW,UAAU,CAAC,EACtBC,EAAe,UAAU,CAAC,EAC1BC,EAAYD,EACP3yC,EAAI4yB,EAAY5yB,EAAI0yC,EAAU1yC,IAAK,CAC1C,IAAI6yC,EAAS7+B,EAAO,UAAU,IAAIhU,CAAC,EAEnC6yC,EAAO,cAActkB,EAAS,MAAOqkB,CAAS,EAC9CA,EAAYC,EAAO,SAAStkB,EAAS,IAAI,CAC1C,CACD,OAAOqkB,CACR,CACL,EACEpB,EAAiB,UAAU,eAAiB,UAA2B,CACrE,QAASpsB,EAAK,KAAK,SAAQ,EAAIA,EAAG,WAAY,CAC5C,IAAIyJ,EAAKzJ,EAAG,OACRgN,EAAQvD,EAAG,WACfuD,EAAM,MAAMvD,EAAG,OAAM,EAAG,SAAU,CAAA,CACnC,CACL,EACE2iB,EAAiB,UAAU,yBAA2B,SAAmCre,EAAI,CAM3F,QALInf,EAAS,KAET09B,EAAW,KACXC,EAAW,KACXC,EAAQ,KAAK,uBACR5xC,EAAI,KAAK,oBAAoB,OAAS,EAAGA,GAAK,EAAGA,IAAK,CAC7D,IAAI6xC,EAAU79B,EAAO,oBAAoB,IAAIhU,CAAC,EAC1C8xC,EAASD,EAAQ,SAErB,OADIH,IAAa,MAAQG,EAAQ,YAAa,IAAK1e,IAAMue,EAAWG,GAC5DD,EAAK,CACX,KAAK59B,EAAO,uBACV,GAAI89B,EAAO,YAAW,IAAO3e,EAAM,SACnCwe,EAAWG,EACXF,EAAQ59B,EAAO,qBACf,MACF,KAAKA,EAAO,qBACV,GAAI69B,EAAQ,YAAW,IAAO1e,EAAM,SACpCwe,EAAS,WAAWE,CAAO,EAC3BD,EAAQ59B,EAAO,uBACf,KAEH,CACF,CACG49B,IAAU,KAAK,uBACjBv8B,EAAO,OAAOq8B,IAAa,KAAM,uCAAuC,EACxEr8B,EAAO,OAAOq8B,EAAS,YAAW,IAAOve,EAAI,sCAAsC,EACnFwe,EAAS,WAAWD,CAAQ,EAElC,EACEF,EAAiB,UAAU,kBAAoB,UAA8B,CAC3E,GAAI,UAAU,SAAW,EAAG,CAE1B,QADIhf,EAAS,EACJpN,EAAK,KAAK,SAAQ,EAAIA,EAAG,WAAY,CAC5C,IAAIyJ,EAAKzJ,EAAG,OACRyJ,EAAG,WAAU,GAAM2D,GACxB,CACD,OAAOA,CACb,SAAe,UAAU,SAAW,EAAG,CAGjC,QAFIW,EAAK,UAAU,CAAC,EAChB2f,EAAW,EACN7B,EAAO,KAAK,SAAQ,EAAIA,EAAK,WAAY,CAChD,IAAIrhB,EAAOqhB,EAAK,OACZrhB,EAAK,YAAa,IAAKuD,GAAM2f,GAClC,CACD,OAAOA,CACR,CACL,EACEtB,EAAiB,UAAU,SAAW,UAAqB,CACzD,OAAO,KAAK,MAChB,EACEA,EAAiB,UAAU,qBAAuB,UAAiC,CAEjF,QADIT,EAAWhpC,EAAS,KACfqd,EAAK,KAAK,SAAQ,EAAIA,EAAG,WAAY,CAC5C,IAAIysB,EAAUzsB,EAAG,OACb0sB,EAASD,EAAQ,SACrB,GAAI,CAACA,EAAQ,aAAc,CACzB,GAAIA,EAAQ,aAAc,CACxBd,EAAWhpC,EAAS,SACpB,KACD,CACD,GAAI+pC,EAAO,aAAc,CACvBf,EAAWhpC,EAAS,SACpB,KACD,CACF,CACF,CACD,GAAIgpC,IAAahpC,EAAS,KAAQ,OAAO,KAEzC,QADIipC,EAAUD,EACLE,EAAO,KAAK,SAAQ,EAAIA,EAAK,WAAY,CAChD,IAAI8B,EAAY9B,EAAK,OACjB+B,EAAWD,EAAU,SACrBA,EAAU,aACZA,EAAU,QAAO,EAAG,WAAW/B,IAAYjpC,EAAS,QAAQ,GAExDgrC,EAAU,WAAY,IAAI/B,EAAUjpC,EAAS,UAC7CirC,EAAS,WAAY,IAAIhC,EAAUjpC,EAAS,UAEnD,CACL,EACEypC,EAAiB,UAAU,iBAAmB,SAA2Bt2C,EAAM,CAC7E,IAAI8Y,EAAS,KAEby9B,EAAe,UAAU,iBAAiB,KAAK,KAAMv2C,CAAI,EACzD,KAAK,OAAS,IAAIq2B,EAAMxpB,EAAS,IAAI,EACrC,QAASqd,EAAK,KAAK,SAAQ,EAAIA,EAAG,WAIhC,QAHI4R,EAAK5R,EAAG,OACR/b,EAAI2tB,EAAG,UACPic,EAAS5pC,EAAE,WACNrJ,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1B,IAAIkzC,EAAOD,EAAO,YAAYjzC,CAAC,GAC3BkzC,IAASnrC,EAAS,UAAYmrC,IAASnrC,EAAS,WAAYiM,EAAO,OAAO,YAAYhU,EAAG+H,EAAS,QAAQ,CAC/G,CAEP,EACEypC,EAAiB,UAAU,YAAc,UAAwB,CAC/D,MAAO,CAAE,CACb,EACEA,EAAiB,UAAU,SAAW,UAAqB,CACzD,OAAOA,CACX,EAESA,CACT,EAAEX,EAAW,EAETsC,GAAsB,SAAUC,EAAgB,CAClD,SAASD,GAAsB,CAC7BC,EAAe,MAAM,KAAM,SAAS,CACrC,CAED,OAAKA,IAAiBD,EAAmB,UAAYC,GACrDD,EAAmB,UAAY,OAAO,OAAQC,GAAkBA,EAAe,WAC/ED,EAAmB,UAAU,YAAcA,EAE3CA,EAAmB,UAAU,WAAa,SAAqBr0C,EAAO,CACpE,OAAO,IAAI80B,GAAK90B,EAAO,IAAI0yC,EAAkB,CACjD,EACE2B,EAAmB,UAAU,YAAc,UAAwB,CACjE,MAAO,CAAE,CACb,EACEA,EAAmB,UAAU,SAAW,UAAqB,CAC3D,OAAOA,CACX,EAESA,CACT,EAAEzc,EAAW,EAET2c,GAA0B,SAASA,GAA2B,CAChE,KAAK,KAAO,KACZ,KAAK,aAAe,KACpB,IAAI74B,EAAM,UAAU,CAAC,EACrB,KAAK,KAAOA,EACZ,KAAK,aAAe64B,EAAwB,YAAY74B,CAAG,CAC7D,EACA64B,GAAwB,UAAU,UAAY,SAAoBhsC,EAAI,CACpE,IAAIisC,EAAMjsC,EACNuU,EAAOy3B,GAAwB,gBAAgB,KAAK,KAAM,KAAK,aAAcC,EAAI,KAAMA,EAAI,YAAY,EAC3G,OAAO13B,CACT,EACAy3B,GAAwB,UAAU,YAAc,UAAwB,CACtE,MAAO,CAACjtC,EAAU,CACpB,EACAitC,GAAwB,UAAU,SAAW,UAAqB,CAChE,OAAOA,EACT,EACAA,GAAwB,YAAc,SAAsB74B,EAAK,CAC/D,OAAOyE,EAAiB,oBAAoBzE,CAAG,IAAM,CACvD,EACA64B,GAAwB,gBAAkB,SAA0BhzB,EAAMkzB,EAAcjzB,EAAMkzB,EAAc,CAQ1G,QAPI1yB,EAAOyyB,EAAe,EAAI,GAC1BxyB,EAAOyyB,EAAe,EAAI,GAC1BC,EAASF,EAAelzB,EAAK,OAAS,GACtCqzB,EAASF,EAAelzB,EAAK,OAAS,GACtCU,EAAKuyB,EAAe,EAAIlzB,EAAK,OAAS,EACtCY,EAAKuyB,EAAe,EAAIlzB,EAAK,OAAS,IAE7B,CACX,IAAIqzB,EAAStzB,EAAKW,CAAE,EAAE,UAAUV,EAAKW,CAAE,CAAC,EACxC,GAAI0yB,IAAW,EAAK,OAAOA,EAC3B3yB,GAAMF,EACNG,GAAMF,EACN,IAAI6yB,EAAQ5yB,IAAOyyB,EACfI,EAAQ5yB,IAAOyyB,EACnB,GAAIE,GAAS,CAACC,EAAS,MAAO,GAC9B,GAAI,CAACD,GAASC,EAAS,MAAO,GAC9B,GAAID,GAASC,EAAS,MAAO,EAC9B,CACH,EAEA,IAAIC,GAAW,UAAqB,CAClC,KAAK,OAAS,IAAI52B,EAClB,KAAK,QAAU,IAAIiF,EACrB,EACA2xB,GAAS,UAAU,MAAQ,SAAgB/f,EAAK,CAC5C,IAAI/f,EAAS,KAEf+f,EAAI,MAAM,oBAAoB,EAC9B,QAASx3B,EAAI,EAAGA,EAAI,KAAK,OAAO,OAAQA,IAAK,CAC3C,IAAI8M,EAAI2K,EAAO,OAAO,IAAIzX,CAAC,EACvBA,EAAI,GAAKw3B,EAAI,MAAM,GAAG,EAC1BA,EAAI,MAAM,GAAG,EAEb,QADIvZ,EAAMnR,EAAE,iBACHrJ,EAAI,EAAGA,EAAIwa,EAAI,OAAQxa,IAC1BA,EAAI,GAAK+zB,EAAI,MAAM,GAAG,EAC1BA,EAAI,MAAMvZ,EAAIxa,CAAC,EAAE,EAAI,IAAMwa,EAAIxa,CAAC,EAAE,CAAC,EAErC+zB,EAAI,QAAQ,GAAG,CAChB,CACDA,EAAI,MAAM,KAAK,CACjB,EACA+f,GAAS,UAAU,OAAS,SAAiBC,EAAU,CAGrD,QAFM//B,EAAS,KAENhU,EAAI+zC,EAAS,SAAQ,EAAI/zC,EAAE,WAClCgU,EAAO,IAAIhU,EAAE,KAAM,CAAA,CAEvB,EACA8zC,GAAS,UAAU,cAAgB,SAAwBzqC,EAAG,CAG5D,QAFM2K,EAAS,KAENhU,EAAI,EAAGA,EAAI,KAAK,OAAO,OAAQA,IACtC,GAAIgU,EAAO,OAAO,IAAIhU,CAAC,EAAE,OAAOqJ,CAAC,EAAK,OAAOrJ,EAE/C,MAAO,EACT,EACA8zC,GAAS,UAAU,SAAW,UAAqB,CACjD,OAAO,KAAK,OAAO,SAAU,CAC/B,EACAA,GAAS,UAAU,SAAW,UAAqB,CACjD,OAAO,KAAK,MACd,EACAA,GAAS,UAAU,IAAM,SAAc9zC,EAAG,CACxC,OAAO,KAAK,OAAO,IAAIA,CAAC,CAC1B,EACA8zC,GAAS,UAAU,cAAgB,SAAwBzqC,EAAG,CAC5D,IAAIiqC,EAAM,IAAID,GAAwBhqC,EAAE,eAAgB,CAAA,EACpD2qC,EAAY,KAAK,QAAQ,IAAIV,CAAG,EACpC,OAAOU,CACT,EACAF,GAAS,UAAU,IAAM,SAAczqC,EAAG,CACxC,KAAK,OAAO,IAAIA,CAAC,EACjB,IAAIiqC,EAAM,IAAID,GAAwBhqC,EAAE,eAAgB,CAAA,EACxD,KAAK,QAAQ,IAAIiqC,EAAKjqC,CAAC,CACzB,EACAyqC,GAAS,UAAU,YAAc,UAAwB,CACvD,MAAO,CAAE,CACX,EACAA,GAAS,UAAU,SAAW,UAAqB,CACjD,OAAOA,EACT,EAEA,IAAIG,GAAqB,UAA+B,GAExDA,GAAmB,UAAU,qBAAuB,SAA+BC,EAAIC,EAAWC,EAAIC,EAAW,GACjHJ,GAAmB,UAAU,OAAS,UAAmB,CAAA,EACzDA,GAAmB,UAAU,YAAc,UAAwB,CACjE,MAAO,CAAE,CACX,EACAA,GAAmB,UAAU,SAAW,UAAqB,CAC3D,OAAOA,EACT,EAEA,IAAIK,GAAoB,UAA8B,CACpD,KAAK,iBAAmB,GACxB,KAAK,WAAa,GAClB,KAAK,mBAAqB,GAC1B,KAAK,aAAe,GACpB,KAAK,yBAA2B,KAChC,KAAK,IAAM,KACX,KAAK,oBAAsB,KAC3B,KAAK,iBAAmB,EACxB,KAAK,yBAA2B,EAChC,KAAK,uBAAyB,EAC9B,KAAK,SAAW,EAChB,IAAI3T,EAAK,UAAU,CAAC,EACpB,KAAK,IAAMA,CACb,EACA2T,GAAkB,UAAU,sBAAwB,SAAgCJ,EAAIC,EAAWC,EAAIC,EAAW,CAChH,GAAIH,IAAOE,GACL,KAAK,IAAI,mBAAkB,IAAO,EAAG,CACvC,GAAIE,GAAkB,mBAAmBH,EAAWE,CAAS,EAAK,MAAO,GACzE,GAAIH,EAAG,WAAY,CACjB,IAAIzU,EAAcyU,EAAG,KAAI,EAAK,EAC9B,GAAKC,IAAc,GAAKE,IAAc5U,GACjC4U,IAAc,GAAKF,IAAc1U,EACpC,MAAO,EAEV,CACF,CAEH,MAAO,EACT,EACA6U,GAAkB,UAAU,2BAA6B,UAAuC,CAC9F,OAAO,KAAK,wBACd,EACAA,GAAkB,UAAU,8BAAgC,UAA0C,CACpG,OAAO,KAAK,kBACd,EACAA,GAAkB,UAAU,mBAAqB,UAA+B,CAC9E,OAAO,KAAK,GACd,EACAA,GAAkB,UAAU,sBAAwB,UAAkC,CACpF,OAAO,KAAK,UACd,EACAA,GAAkB,UAAU,qBAAuB,SAA+BJ,EAAIC,EAAWC,EAAIC,EAAW,CAC9G,GAAIH,IAAOE,GAAMD,IAAcE,EAAa,OAAO,KACnD,KAAK,WACL,IAAIrQ,EAAMkQ,EAAG,eAAgB,EAACC,CAAS,EACnClQ,EAAMiQ,EAAG,eAAgB,EAACC,EAAY,CAAC,EACvCjQ,EAAMkQ,EAAG,eAAgB,EAACC,CAAS,EACnClQ,EAAMiQ,EAAG,eAAgB,EAACC,EAAY,CAAC,EAC3C,KAAK,IAAI,oBAAoBrQ,EAAKC,EAAKC,EAAKC,CAAG,EAC3C,KAAK,IAAI,oBACX,KAAK,mBACD,KAAK,IAAI,2BACX,KAAK,2BACL,KAAK,aAAe,IAEjB,KAAK,sBAAsB+P,EAAIC,EAAWC,EAAIC,CAAS,IAC1D,KAAK,iBAAmB,GACxBH,EAAG,iBAAiB,KAAK,IAAKC,EAAW,CAAC,EAC1CC,EAAG,iBAAiB,KAAK,IAAKC,EAAW,CAAC,EACtC,KAAK,IAAI,aACX,KAAK,yBACL,KAAK,WAAa,GAClB,KAAK,mBAAqB,KAIlC,EACAC,GAAkB,UAAU,gBAAkB,UAA4B,CACxE,OAAO,KAAK,gBACd,EACAA,GAAkB,UAAU,OAAS,UAAmB,CACtD,MAAO,EACT,EACAA,GAAkB,UAAU,wBAA0B,UAAoC,CACxF,OAAO,KAAK,YACd,EACAA,GAAkB,UAAU,YAAc,UAAwB,CAChE,MAAO,CAACL,EAAkB,CAC5B,EACAK,GAAkB,UAAU,SAAW,UAAqB,CAC1D,OAAOA,EACT,EACAA,GAAkB,mBAAqB,SAA6BtzB,EAAIC,EAAI,CAC1E,OAAO,KAAK,IAAID,EAAKC,CAAE,IAAM,CAC/B,EAEA,IAAIszB,GAAmB,UAA6B,CAClD,KAAK,MAAQ,KACb,KAAK,aAAe,KACpB,KAAK,KAAO,KACZ,IAAIz1C,EAAQ,UAAU,CAAC,EACnB4E,EAAe,UAAU,CAAC,EAC1ByS,EAAO,UAAU,CAAC,EACtB,KAAK,MAAQ,IAAI3P,EAAW1H,CAAK,EACjC,KAAK,aAAe4E,EACpB,KAAK,KAAOyS,CACd,EACAo+B,GAAiB,UAAU,gBAAkB,UAA4B,CACvE,OAAO,KAAK,YACd,EACAA,GAAiB,UAAU,cAAgB,UAA0B,CACnE,OAAO,KAAK,KACd,EACAA,GAAiB,UAAU,MAAQ,SAAgBxgB,EAAK,CACtDA,EAAI,MAAM,KAAK,KAAK,EACpBA,EAAI,MAAM,YAAc,KAAK,YAAY,EACzCA,EAAI,QAAQ,WAAa,KAAK,IAAI,CACpC,EACAwgB,GAAiB,UAAU,UAAY,SAAoBn2B,EAAK,CAC9D,IAAIxX,EAAQwX,EACZ,OAAO,KAAK,QAAQxX,EAAM,aAAcA,EAAM,IAAI,CACpD,EACA2tC,GAAiB,UAAU,WAAa,SAAqB7V,EAAiB,CAE5E,OADI,KAAK,eAAiB,GAAK,KAAK,OAAS,GACzC,KAAK,eAAiBA,CAE5B,EACA6V,GAAiB,UAAU,SAAW,UAAqB,CACzD,OAAO,KAAK,MAAQ,YAAc,KAAK,aAAe,WAAa,KAAK,IAC1E,EACAA,GAAiB,UAAU,YAAc,UAAwB,CAC/D,OAAO,KAAK,IACd,EACAA,GAAiB,UAAU,QAAU,SAAkB7wC,EAAcyS,EAAM,CACzE,OAAI,KAAK,aAAezS,EAAuB,GAC3C,KAAK,aAAeA,EAAuB,EAC3C,KAAK,KAAOyS,EAAe,GAC3B,KAAK,KAAOA,EAAe,EACxB,CACT,EACAo+B,GAAiB,UAAU,YAAc,UAAwB,CAC/D,MAAO,CAACnuC,EAAU,CACpB,EACAmuC,GAAiB,UAAU,SAAW,UAAqB,CACzD,OAAOA,EACT,EAEA,IAAIC,GAAuB,UAAiC,CAC1D,KAAK,SAAW,IAAIryB,GACpB,KAAK,KAAO,KACZ,IAAIsQ,EAAO,UAAU,CAAC,EACtB,KAAK,KAAOA,CACd,EACA+hB,GAAqB,UAAU,MAAQ,SAAgBzgB,EAAK,CAC1DA,EAAI,QAAQ,gBAAgB,EAC5B,QAAS3O,EAAK,KAAK,SAAQ,EAAIA,EAAG,WAAY,CAC5C,IAAIyZ,EAAKzZ,EAAG,OACZyZ,EAAG,MAAM9K,CAAG,CACb,CACH,EACAygB,GAAqB,UAAU,SAAW,UAAqB,CAC7D,OAAO,KAAK,SAAS,OAAM,EAAG,SAAU,CAC1C,EACAA,GAAqB,UAAU,cAAgB,SAAwBpV,EAAU,CAC7E,IAAIprB,EAAS,KAEf,KAAK,aAAY,EAGjB,QAFIoR,EAAK,KAAK,WACVwZ,EAASxZ,EAAG,OACTA,EAAG,WAAW,CACnB,IAAIyZ,EAAKzZ,EAAG,OACRia,EAAUrrB,EAAO,gBAAgB4qB,EAAQC,CAAE,EAC/CO,EAAS,IAAIC,CAAO,EACpBT,EAASC,CACV,CACH,EACA2V,GAAqB,UAAU,aAAe,UAAyB,CACrE,IAAI/U,EAAc,KAAK,KAAK,IAAI,OAAS,EACzC,KAAK,IAAI,KAAK,KAAK,IAAI,CAAC,EAAG,EAAG,CAAG,EACjC,KAAK,IAAI,KAAK,KAAK,IAAIA,CAAW,EAAGA,EAAa,CAAG,CACvD,EACA+U,GAAqB,UAAU,gBAAkB,SAA0BxV,EAAKC,EAAK,CACjF,IAAIjrB,EAAS,KAEXyM,EAAOwe,EAAI,aAAeD,EAAI,aAAe,EAC7CE,EAAiB,KAAK,KAAK,IAAID,EAAI,YAAY,EAC/CE,EAAYF,EAAI,KAAO,GAAO,CAACA,EAAI,MAAM,SAASC,CAAc,EAC/DC,GACH1e,IAEF,IAAIjG,EAAM,IAAI,MAAMiG,CAAI,EAAE,KAAK,IAAI,EAC/Bif,EAAM,EACVllB,EAAIklB,GAAK,EAAI,IAAIl5B,EAAWw4B,EAAI,KAAK,EACrC,QAASh/B,EAAIg/B,EAAI,aAAe,EAAGh/B,GAAKi/B,EAAI,aAAcj/B,IACxDwa,EAAIklB,GAAK,EAAI1rB,EAAO,KAAK,IAAIhU,CAAC,EAEhC,OAAIm/B,IAAa3kB,EAAIklB,CAAG,EAAIT,EAAI,OACzB,IAAIwV,GAAKj6B,EAAK,IAAI+W,EAAM,KAAK,KAAK,MAAM,CAAC,CAClD,EACAijB,GAAqB,UAAU,IAAM,SAAc99B,EAAOhT,EAAcyS,EAAM,CAC5E,IAAIypB,EAAQ,IAAI2U,GAAiB79B,EAAOhT,EAAcyS,CAAI,EACtD0oB,EAAK,KAAK,SAAS,IAAIe,CAAK,EAChC,OAAIf,IAAO,KACFA,GAET,KAAK,SAAS,IAAIe,EAAOA,CAAK,EACvBA,EACT,EACA4U,GAAqB,UAAU,eAAiB,SAAyBn+B,EAAI,CAC3E,QAAS+O,EAAK,KAAK,SAAQ,EAAIA,EAAG,WAAY,CAC5C,IAAIyZ,EAAKzZ,EAAG,OACZ,GAAIyZ,EAAG,MAAM,OAAOxoB,CAAE,EAAK,MAAO,EACnC,CACD,MAAO,EACT,EACAm+B,GAAqB,UAAU,YAAc,UAAwB,CACnE,MAAO,CAAE,CACX,EACAA,GAAqB,UAAU,SAAW,UAAqB,CAC7D,OAAOA,EACT,EAEA,IAAIE,GAAuB,UAAiC,GAE5DA,GAAqB,UAAU,qBAAuB,SAA+Bl6B,EAAK,CACtF,IAAIxG,EAAS,KAEX3T,EAAQ,EACRkkC,EAAiB,IAAIrnB,EACzBqnB,EAAe,IAAI,IAAIj7B,GAAQjJ,CAAK,CAAC,EACrC,EAAG,CACD,IAAI8d,EAAOnK,EAAO,aAAawG,EAAKna,CAAK,EACzCkkC,EAAe,IAAI,IAAIj7B,GAAQ6U,CAAI,CAAC,EACpC9d,EAAQ8d,CACT,OAAQ9d,EAAQma,EAAI,OAAS,GAC9B,IAAIoY,EAAa8hB,GAAqB,WAAWnQ,CAAc,EAC/D,OAAO3R,CACT,EACA8hB,GAAqB,UAAU,aAAe,SAAuBl6B,EAAKna,EAAO,CAG/E,QAFIokC,EAAY/P,EAAS,SAASla,EAAIna,CAAK,EAAGma,EAAIna,EAAQ,CAAC,CAAC,EACxD8d,EAAO9d,EAAQ,EACZ8d,EAAO3D,EAAI,QAAQ,CACxB,IAAIoa,EAAOF,EAAS,SAASla,EAAI2D,EAAO,CAAC,EAAG3D,EAAI2D,CAAI,CAAC,EACrD,GAAIyW,IAAS6P,EAAa,MAC1BtmB,GACD,CACD,OAAOA,EAAO,CAChB,EACAu2B,GAAqB,UAAU,YAAc,UAAwB,CACnE,MAAO,CAAE,CACX,EACAA,GAAqB,UAAU,SAAW,UAAqB,CAC7D,OAAOA,EACT,EACAA,GAAqB,WAAa,SAAqB9P,EAAM,CAE3D,QADI3wB,EAAQ,IAAI,MAAM2wB,EAAK,KAAI,CAAE,EAAE,KAAK,IAAI,EACnC5kC,EAAI,EAAGA,EAAIiU,EAAM,OAAQjU,IAChCiU,EAAMjU,CAAC,EAAI4kC,EAAK,IAAI5kC,CAAC,EAAE,WAEzB,OAAOiU,CACT,EAEA,IAAI0gC,GAAoB,UAA8B,CACpD,KAAK,EAAI,KACT,KAAK,IAAM,KACX,KAAK,WAAa,KAClB,KAAK,KAAO,IAAIviC,EAChB,KAAK,KAAO,IAAIA,EAChB,IAAI/I,EAAI,UAAU,CAAC,EACnB,KAAK,EAAIA,EACT,KAAK,IAAMA,EAAE,iBACb,IAAIurC,EAAM,IAAIF,GACd,KAAK,WAAaE,EAAI,qBAAqB,KAAK,GAAG,CACrD,EACAD,GAAkB,UAAU,eAAiB,UAA2B,CACtE,OAAO,KAAK,GACd,EACAA,GAAkB,UAAU,QAAU,SAAkBE,EAAY,CAClE,IAAIlvC,EAAK,KAAK,IAAI,KAAK,WAAWkvC,CAAU,CAAC,EAAE,EAC3CjvC,EAAK,KAAK,IAAI,KAAK,WAAWivC,EAAa,CAAC,CAAC,EAAE,EACnD,OAAOlvC,EAAKC,EAAKD,EAAKC,CACxB,EACA+uC,GAAkB,UAAU,QAAU,SAAkBE,EAAY,CAClE,IAAIlvC,EAAK,KAAK,IAAI,KAAK,WAAWkvC,CAAU,CAAC,EAAE,EAC3CjvC,EAAK,KAAK,IAAI,KAAK,WAAWivC,EAAa,CAAC,CAAC,EAAE,EACnD,OAAOlvC,EAAKC,EAAKD,EAAKC,CACxB,EACA+uC,GAAkB,UAAU,0BAA4B,UAAsC,CAC5F,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAIG,EAAc,UAAU,CAAC,EACzBC,EAAM,UAAU,CAAC,EACjBC,EAAc,UAAU,CAAC,EACzB9P,EAAK,UAAU,CAAC,EACpB,KAAK,0BAA0B,KAAK,WAAW4P,CAAW,EAAG,KAAK,WAAWA,EAAc,CAAC,EAAGC,EAAKA,EAAI,WAAWC,CAAW,EAAGD,EAAI,WAAWC,EAAc,CAAC,EAAG9P,CAAE,CACxK,SAAa,UAAU,SAAW,EAAG,CACjC,IAAIxB,EAAS,UAAU,CAAC,EACpBC,EAAO,UAAU,CAAC,EAClBsR,EAAQ,UAAU,CAAC,EACnB5R,EAAS,UAAU,CAAC,EACpBU,EAAO,UAAU,CAAC,EAClBlF,EAAK,UAAU,CAAC,EAChBmF,EAAM,KAAK,IAAIN,CAAM,EACrBO,EAAM,KAAK,IAAIN,CAAI,EACnBO,EAAM+Q,EAAM,IAAI5R,CAAM,EACtBc,EAAM8Q,EAAM,IAAIlR,CAAI,EACxB,GAAIJ,EAAOD,IAAW,GAAKK,EAAOV,IAAW,EAC3C,OAAAxE,EAAG,iBAAiB,KAAK,EAAG6E,EAAQuR,EAAM,EAAG5R,CAAM,EAC5C,KAIT,GAFA,KAAK,KAAK,KAAKW,EAAKC,CAAG,EACvB,KAAK,KAAK,KAAKC,EAAKC,CAAG,EACnB,CAAC,KAAK,KAAK,WAAW,KAAK,IAAI,EAAK,OAAO,KAC/C,IAAIC,EAAO,KAAK,OAAOV,EAASC,GAAQ,CAAC,EACrCU,EAAO,KAAK,OAAOhB,EAASU,GAAQ,CAAC,EACrCL,EAASU,IACPf,EAASgB,GAAQ,KAAK,0BAA0BX,EAAQU,EAAM6Q,EAAO5R,EAAQgB,EAAMxF,CAAE,EACrFwF,EAAON,GAAQ,KAAK,0BAA0BL,EAAQU,EAAM6Q,EAAO5Q,EAAMN,EAAMlF,CAAE,GAEnFuF,EAAOT,IACLN,EAASgB,GAAQ,KAAK,0BAA0BD,EAAMT,EAAMsR,EAAO5R,EAAQgB,EAAMxF,CAAE,EACnFwF,EAAON,GAAQ,KAAK,0BAA0BK,EAAMT,EAAMsR,EAAO5Q,EAAMN,EAAMlF,CAAE,EAEtF,CACH,EACA8V,GAAkB,UAAU,gBAAkB,UAA4B,CACxE,OAAO,KAAK,UACd,EACAA,GAAkB,UAAU,kBAAoB,SAA4BI,EAAK7P,EAAI,CAGnF,QAFMlxB,EAAS,KAEN,EAAI,EAAG,EAAI,KAAK,WAAW,OAAS,EAAG,IAC9C,QAASzX,EAAI,EAAGA,EAAIw4C,EAAI,WAAW,OAAS,EAAGx4C,IAC7CyX,EAAO,0BAA0B,EAAG+gC,EAAKx4C,EAAG2oC,CAAE,CAGpD,EACAyP,GAAkB,UAAU,YAAc,UAAwB,CAChE,MAAO,CAAE,CACX,EACAA,GAAkB,UAAU,SAAW,UAAqB,CAC1D,OAAOA,EACT,EAEA,IAAIO,GAAQ,SAASA,GAAS,CAC5B,IAAIlhC,EAAS,KAEb,KAAK,OAAS,MAAM,CAAC,EAAE,KAAM,EAAC,IAAI,UAAY,CAAE,OAAO,MAAM,CAAC,CAAI,CAAA,EAClE,QAAShU,EAAI,EAAGA,EAAI,EAAGA,IACrB,QAASzD,EAAI,EAAGA,EAAI,EAAGA,IACrByX,EAAO,OAAOhU,CAAC,EAAEzD,CAAC,EAAI24C,EAAM,UAGlC,EAEIC,GAAqB,CAAE,WAAY,CAAE,aAAc,EAAM,CAAA,EAC7DD,GAAM,UAAU,SAAW,SAAmBlzC,EAAWkvB,EAAU,CACjE,OAAO,KAAK,OAAOlvB,CAAS,EAAEkvB,CAAQ,CACxC,EACAgkB,GAAM,UAAU,SAAW,SAAmBlzC,EAAWkvB,EAAUkkB,EAAY,CAC7E,KAAK,OAAOpzC,CAAS,EAAEkvB,CAAQ,EAAIkkB,CACrC,EACAF,GAAM,UAAU,OAAS,UAAmB,CACxC,IAAIlhC,EAAS,KAEf,GAAI,UAAU,SAAW,EAAG,CAC1B,QAAShU,EAAI,EAAGA,EAAI,EAAGA,IACrB,QAASzD,EAAI,EAAGA,EAAI,EAAGA,IACrB,GAAIyX,EAAO,OAAOhU,CAAC,EAAEzD,CAAC,IAAM24C,GAAM,WAAc,MAAO,GAG3D,MAAO,EACX,SAAa,UAAU,SAAW,EAAG,CACjC,IAAIlzC,EAAY,UAAU,CAAC,EAC3B,OAAO,KAAK,OAAOA,CAAS,EAAE,CAAC,IAAMkzC,GAAM,UAC/C,SAAa,UAAU,SAAW,EAAG,CACjC,IAAIpjB,EAAc,UAAU,CAAC,EACzBZ,EAAW,UAAU,CAAC,EAC1B,OAAO,KAAK,OAAOY,CAAW,EAAEZ,CAAQ,IAAMgkB,GAAM,UACrD,CACH,EACAA,GAAM,UAAU,UAAY,UAAsB,CAGhD,QAFMlhC,EAAS,KAENhU,EAAI,EAAGA,EAAI,EAAGA,IACrB,GAAI,CAACgU,EAAO,OAAOhU,CAAC,EAAG,CACrB,IAAIq1C,EAAWrhC,EAAO,OAAOhU,CAAC,EAAE,CAAC,EAC7BgU,EAAO,OAAOhU,CAAC,EAAE,CAAC,EAAIq1C,IAAYA,EAAWrhC,EAAO,OAAOhU,CAAC,EAAE,CAAC,GAC/Dq1C,EAAW,IAAKA,EAAW,GAC/B,QAAS94C,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1B,IAAI+4C,EAAW,EACXthC,EAAO,OAAOhU,CAAC,EAAEzD,CAAC,EAAI84C,IAAYC,EAAW,GACjDthC,EAAO,OAAOhU,CAAC,EAAEzD,CAAC,EAAI+4C,CACvB,CACF,CAEL,EACAJ,GAAM,UAAU,SAAW,SAAmBlzC,EAAW,CACvD,OAAO,KAAK,OAAOA,CAAS,EAAEusB,EAAS,KAAK,EAAI,KAAK,OAAOvsB,CAAS,EAAEusB,EAAS,IAAI,CACtF,EACA2mB,GAAM,UAAU,YAAc,SAAsBlzC,EAAWkvB,EAAU,CACvE,OAAI,KAAK,OAAOlvB,CAAS,EAAEkvB,CAAQ,GAAK,EAAYnpB,EAAS,SACtDA,EAAS,QAClB,EACAmtC,GAAM,UAAU,SAAW,UAAqB,CAC9C,MAAO,MAAQ,KAAK,OAAO,CAAC,EAAE,CAAC,EAAI,IAAM,KAAK,OAAO,CAAC,EAAE,CAAC,EAAI,OAAS,KAAK,OAAO,CAAC,EAAE,CAAC,EAAI,IAAM,KAAK,OAAO,CAAC,EAAE,CAAC,CAClH,EACAA,GAAM,UAAU,IAAM,UAAgB,CAClC,IAAIlhC,EAAS,KAEf,GAAI,UAAU,SAAW,EAEvB,QADIyd,EAAM,UAAU,CAAC,EACZzxB,EAAI,EAAGA,EAAI,EAAGA,IACrB,QAASzD,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1B,IAAI+0B,EAAMG,EAAI,YAAYzxB,EAAGzD,CAAC,GAC1B+0B,IAAQvpB,EAAS,UAAYupB,IAAQvpB,EAAS,YAC5CiM,EAAO,OAAOhU,EAAGzD,CAAC,EACpByX,EAAO,OAAOhU,CAAC,EAAEzD,CAAC,EAAI24C,GAAM,gBAAgB5jB,CAAG,EACxCtd,EAAO,OAAOhU,CAAC,EAAEzD,CAAC,GAAK24C,GAAM,gBAAgB5jB,CAAG,EAE5D,SAEM,UAAU,SAAW,EAAG,CACjC,IAAItvB,EAAY,UAAU,CAAC,EACvBkvB,EAAW,UAAU,CAAC,EACtBT,EAAW,UAAU,CAAC,EACtBA,IAAa1oB,EAAS,UAAY,KAAK,OAAO/F,CAAS,EAAEkvB,CAAQ,GACtE,CACH,EACAgkB,GAAM,UAAU,YAAc,UAAwB,CACpD,MAAO,CAAE,CACX,EACAA,GAAM,UAAU,SAAW,UAAqB,CAC9C,OAAOA,EACT,EACAA,GAAM,gBAAkB,SAA0BzkB,EAAU,CAC1D,OAAIA,IAAa1oB,EAAS,SAAmB,EACzC0oB,IAAa1oB,EAAS,SAAmB,EACtCmtC,GAAM,UACf,EACAC,GAAmB,WAAW,IAAM,UAAY,CAAE,MAAO,EAAE,EAE3D,OAAO,iBAAkBD,GAAOC,IAEhC,IAAIV,GAAQ,SAAU5gB,EAAmB,CACvC,SAAS4gB,GAAQ,CAUf,GATA5gB,EAAkB,KAAK,IAAI,EAC3B,KAAK,IAAM,KACX,KAAK,KAAO,KACZ,KAAK,OAAS,IAAI2gB,GAAqB,IAAI,EAC3C,KAAK,MAAQ,KACb,KAAK,KAAO,KACZ,KAAK,YAAc,GACnB,KAAK,OAAS,IAAIU,GAClB,KAAK,YAAc,EACf,UAAU,SAAW,EAAG,CAC1B,IAAI16B,EAAM,UAAU,CAAC,EACrBi6B,EAAK,KAAK,KAAMj6B,EAAK,IAAI,CAC/B,SAAe,UAAU,SAAW,EAAG,CACjC,IAAIkqB,EAAQ,UAAU,CAAC,EACnBtS,EAAQ,UAAU,CAAC,EACvB,KAAK,IAAMsS,EACX,KAAK,OAAStS,CACf,CACF,CAED,OAAKyB,IAAoB4gB,EAAK,UAAY5gB,GAC1C4gB,EAAK,UAAY,OAAO,OAAQ5gB,GAAqBA,EAAkB,WACvE4gB,EAAK,UAAU,YAAcA,EAC7BA,EAAK,UAAU,SAAW,UAAqB,CAC7C,OAAO,KAAK,MAChB,EACEA,EAAK,UAAU,iBAAmB,UAA6B,CAC7D,IAAIc,EAAS,IAAI,MAAM,CAAC,EAAE,KAAK,IAAI,EACnCA,EAAO,CAAC,EAAI,KAAK,IAAI,CAAC,EACtBA,EAAO,CAAC,EAAI,KAAK,IAAI,CAAC,EACtB,IAAIC,EAAO,IAAIf,EAAKc,EAAQhkB,EAAM,YAAY,KAAK,MAAM,CAAC,EAC1D,OAAOikB,CACX,EACEf,EAAK,UAAU,WAAa,UAAuB,CACjD,OAAO,KAAK,WAChB,EACEA,EAAK,UAAU,eAAiB,UAA2B,CACzD,OAAO,KAAK,GAChB,EACEA,EAAK,UAAU,YAAc,SAAsBgB,EAAY,CAC7D,KAAK,YAAcA,CACvB,EACEhB,EAAK,UAAU,QAAU,SAAkB1jC,EAAM,CAC/C,KAAK,MAAQA,CACjB,EACE0jC,EAAK,UAAU,OAAS,SAAiB5tC,EAAG,CAC1C,IAAImN,EAAS,KAEb,GAAI,EAAEnN,aAAa4tC,GAAS,MAAO,GACnC,IAAIprC,EAAIxC,EACR,GAAI,KAAK,IAAI,SAAWwC,EAAE,IAAI,OAAU,MAAO,GAI/C,QAHIqsC,EAAiB,GACjBC,EAAiB,GACjBC,EAAO,KAAK,IAAI,OACX51C,EAAI,EAAGA,EAAI,KAAK,IAAI,OAAQA,IAOnC,GANKgU,EAAO,IAAIhU,CAAC,EAAE,SAASqJ,EAAE,IAAIrJ,CAAC,CAAC,IAClC01C,EAAiB,IAEd1hC,EAAO,IAAIhU,CAAC,EAAE,SAASqJ,EAAE,IAAI,EAAEusC,CAAI,CAAC,IACvCD,EAAiB,IAEf,CAACD,GAAkB,CAACC,EAAkB,MAAO,GAEnD,MAAO,EACX,EACElB,EAAK,UAAU,cAAgB,UAA0B,CACvD,GAAI,UAAU,SAAW,EACvB,OAAI,KAAK,IAAI,OAAS,EAAY,KAAK,IAAI,CAAC,EACrC,KACF,GAAI,UAAU,SAAW,EAAG,CACjC,IAAIz0C,EAAI,UAAU,CAAC,EACnB,OAAO,KAAK,IAAIA,CAAC,CAClB,CACL,EACEy0C,EAAK,UAAU,MAAQ,SAAgB1gB,EAAK,CAC1C,IAAI/f,EAAS,KAEb+f,EAAI,MAAM,QAAU,KAAK,MAAQ,IAAI,EACrCA,EAAI,MAAM,cAAc,EACxB,QAAS/zB,EAAI,EAAGA,EAAI,KAAK,IAAI,OAAQA,IAC/BA,EAAI,GAAK+zB,EAAI,MAAM,GAAG,EAC1BA,EAAI,MAAM/f,EAAO,IAAIhU,CAAC,EAAE,EAAI,IAAMgU,EAAO,IAAIhU,CAAC,EAAE,CAAC,EAEnD+zB,EAAI,MAAM,MAAQ,KAAK,OAAS,IAAM,KAAK,WAAW,CAC1D,EACE0gB,EAAK,UAAU,UAAY,SAAoB9gB,EAAI,CACjD8gB,EAAK,SAAS,KAAK,OAAQ9gB,CAAE,CACjC,EACE8gB,EAAK,UAAU,YAAc,UAAwB,CAEnD,MADI,CAAC,KAAK,OAAO,OAAM,GACnB,KAAK,IAAI,SAAW,EAAY,GAChC,OAAK,IAAI,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC,CAAC,CAEtC,EACEA,EAAK,UAAU,SAAW,UAAqB,CAC7C,OAAO,KAAK,IAAI,CAAC,EAAE,OAAO,KAAK,IAAI,KAAK,IAAI,OAAS,CAAC,CAAC,CAC3D,EACEA,EAAK,UAAU,uBAAyB,UAAmC,CACzE,OAAO,KAAK,IAAI,OAAS,CAC7B,EACEA,EAAK,UAAU,cAAgB,UAA0B,CACvD,OAAO,KAAK,WAChB,EACEA,EAAK,UAAU,aAAe,UAAyB,CACrD,OAAO,KAAK,IAAI,MACpB,EACEA,EAAK,UAAU,aAAe,SAAuB1gB,EAAK,CACxD,IAAI/f,EAAS,KAEb+f,EAAI,MAAM,QAAU,KAAK,MAAQ,IAAI,EACrC,QAAS/zB,EAAI,KAAK,IAAI,OAAS,EAAGA,GAAK,EAAGA,IACxC+zB,EAAI,MAAM/f,EAAO,IAAIhU,CAAC,EAAI,GAAG,EAE/B+zB,EAAI,QAAQ,EAAE,CAClB,EACE0gB,EAAK,UAAU,qBAAuB,UAAiC,CACrE,OAAI,KAAK,OAAS,OAAQ,KAAK,KAAO,IAAIE,GAAkB,IAAI,GACzD,KAAK,IAChB,EACEF,EAAK,UAAU,YAAc,UAAwB,CACnD,IAAIzgC,EAAS,KAEb,GAAI,KAAK,OAAS,KAAM,CACtB,KAAK,KAAO,IAAI5B,EAChB,QAAS,EAAI,EAAG,EAAI,KAAK,IAAI,OAAQ,IACnC4B,EAAO,KAAK,gBAAgBA,EAAO,IAAI,CAAC,CAAC,CAE5C,CACD,OAAO,KAAK,IAChB,EACEygC,EAAK,UAAU,gBAAkB,SAA0B9T,EAAIj9B,EAAc1B,EAAW2T,EAAU,CAChG,IAAIe,EAAQ,IAAIlQ,EAAWm6B,EAAG,gBAAgBhrB,CAAQ,CAAC,EACnDkrB,EAAyBn9B,EACzByS,EAAOwqB,EAAG,gBAAgB3+B,EAAW2T,CAAQ,EAC7CmrB,EAAeD,EAAyB,EAC5C,GAAIC,EAAe,KAAK,IAAI,OAAQ,CAClC,IAAIC,EAAS,KAAK,IAAID,CAAY,EAC9BpqB,EAAM,SAASqqB,CAAM,IACvBF,EAAyBC,EACzB3qB,EAAO,EAEV,CACD,KAAK,OAAO,IAAIO,EAAOmqB,EAAwB1qB,CAAI,CACvD,EACEs+B,EAAK,UAAU,SAAW,UAAqB,CAC7C,IAAIzgC,EAAS,KAET9J,EAAM,IAAIf,GACde,EAAI,OAAO,QAAU,KAAK,MAAQ,IAAI,EACtCA,EAAI,OAAO,cAAc,EACzB,QAASlK,EAAI,EAAGA,EAAI,KAAK,IAAI,OAAQA,IAC/BA,EAAI,GAAKkK,EAAI,OAAO,GAAG,EAC3BA,EAAI,OAAO8J,EAAO,IAAIhU,CAAC,EAAE,EAAI,IAAMgU,EAAO,IAAIhU,CAAC,EAAE,CAAC,EAEpD,OAAAkK,EAAI,OAAO,MAAQ,KAAK,OAAS,IAAM,KAAK,WAAW,EAChDA,EAAI,SAAU,CACzB,EACEuqC,EAAK,UAAU,iBAAmB,SAA2BprC,EAAG,CAC9D,IAAI2K,EAAS,KAEb,GAAI,KAAK,IAAI,SAAW3K,EAAE,IAAI,OAAU,MAAO,GAC/C,QAASrJ,EAAI,EAAGA,EAAI,KAAK,IAAI,OAAQA,IACnC,GAAI,CAACgU,EAAO,IAAIhU,CAAC,EAAE,SAASqJ,EAAE,IAAIrJ,CAAC,CAAC,EAClC,MAAO,GAGX,MAAO,EACX,EACEy0C,EAAK,UAAU,cAAgB,SAAwBte,EAAY,CACjE,KAAK,YAAcA,CACvB,EACEse,EAAK,UAAU,wBAA0B,UAAoC,CAC3E,OAAO,KAAK,MAChB,EACEA,EAAK,UAAU,iBAAmB,SAA2B9T,EAAIj9B,EAAc1B,EAAW,CAGxF,QAFIgS,EAAS,KAEJhU,EAAI,EAAGA,EAAI2gC,EAAG,mBAAkB,EAAI3gC,IAC3CgU,EAAO,gBAAgB2sB,EAAIj9B,EAAc1B,EAAWhC,CAAC,CAE3D,EACEy0C,EAAK,UAAU,YAAc,UAAwB,CACnD,MAAO,CAAE,CACb,EACEA,EAAK,UAAU,SAAW,UAAqB,CAC7C,OAAOA,CACX,EACEA,EAAK,SAAW,UAAqB,CACnC,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAIriB,EAAQ,UAAU,CAAC,EACnBuB,EAAK,UAAU,CAAC,EACpBA,EAAG,kBAAkBvB,EAAM,YAAY,EAAG7D,EAAS,EAAE,EAAG6D,EAAM,YAAY,EAAG7D,EAAS,EAAE,EAAG,CAAC,EACxF6D,EAAM,WACRuB,EAAG,kBAAkBvB,EAAM,YAAY,EAAG7D,EAAS,IAAI,EAAG6D,EAAM,YAAY,EAAG7D,EAAS,IAAI,EAAG,CAAC,EAChGoF,EAAG,kBAAkBvB,EAAM,YAAY,EAAG7D,EAAS,KAAK,EAAG6D,EAAM,YAAY,EAAG7D,EAAS,KAAK,EAAG,CAAC,EAE1G,KAAa,QAAOsF,EAAkB,UAAU,SAAS,MAAM,KAAM,SAAS,CAC9E,EAES4gB,CACT,EAAElhB,EAAc,EAEZsiB,GAAgB,SAAwB7M,EAAW,CACrD,KAAK,uBAAyB,KAC9B,KAAK,cAAgB,KACrB,KAAK,UAAY,KACjB,KAAK,OAAS,KACd,KAAK,UAAY,IAAI8K,GACrB,KAAK,WAAa9K,GAAa,IACjC,EACA6M,GAAc,UAAU,yBAA2B,SAAmCxqB,EAAI,CACxF,KAAK,uBAAyBA,CAChC,EACAwqB,GAAc,UAAU,iBAAmB,SAA2BxsC,EAAG,CACvE,IAAIysC,EAAe,KAAK,UAAU,cAAczsC,CAAC,EACjD,GAAIysC,IAAiB,KAAM,CACzB,IAAIC,EAAgBD,EAAa,WAC7BE,EAAe3sC,EAAE,WAChBysC,EAAa,iBAAiBzsC,CAAC,IAClC2sC,EAAe,IAAIzkB,EAAMloB,EAAE,SAAU,CAAA,EACrC2sC,EAAa,KAAI,GAEnBD,EAAc,MAAMC,CAAY,EAChC,IAAIC,EAAaJ,GAAc,WAAWG,CAAY,EAClDE,EAAgBJ,EAAa,gBAC7BK,EAAWD,EAAgBD,EAC/BH,EAAa,cAAcK,CAAQ,CACvC,MACI,KAAK,UAAU,IAAI9sC,CAAC,EACpBA,EAAE,cAAcwsC,GAAc,WAAWxsC,EAAE,SAAU,CAAA,CAAC,CAE1D,EACAwsC,GAAc,UAAU,eAAiB,SAAyBO,EAAcC,EAAa,CAE3F,QADIC,EAAkB,IAAIp5B,EACjB,EAAIk5B,EAAa,SAAQ,EAAI,EAAE,WAAY,CAClD,IAAIG,EAAW,EAAE,OACbtlC,EAAIslC,EAAS,yBACbC,EAAU,IAAIpK,GAAqBkK,CAAe,EAClDzmB,EAAe2mB,EAAQ,SAASvlC,CAAC,EACrCslC,EAAS,aAAa1mB,CAAY,EAClC0mB,EAAS,gBAAe,EACxBD,EAAgB,IAAIC,CAAQ,EAC5BF,EAAY,IAAIE,EAAS,iBAAkB,EAAEA,EAAS,SAAQ,CAAE,CACjE,CACH,EACAV,GAAc,UAAU,gBAAkB,SAA0B1lB,EAAO,CAEzE,QADIimB,EAAe,IAAIl5B,EACdld,EAAImwB,EAAM,SAAQ,EAAG,WAAYnwB,EAAE,WAAY,CACtD,IAAImvB,EAAOnvB,EAAE,OACb,GAAI,CAACmvB,EAAK,YAAa,CACrB,IAAIonB,EAAW,IAAI7mB,GACnB6mB,EAAS,OAAOpnB,CAAI,EACpBinB,EAAa,IAAIG,CAAQ,CAC1B,CACF,CACD,OAAAnd,GAAY,KAAKgd,EAAchd,GAAY,aAAc,CAAA,EAClDgd,CACT,EACAP,GAAc,UAAU,0BAA4B,UAAsC,CACxF,IAAIY,EAAY,KAAK,UAAU,cAAa,EAC5C,OAAOA,CACT,EACAZ,GAAc,UAAU,SAAW,SAAmB5/B,EAAgB,CACpE,GAAI,KAAK,gBAAkB,KAAQ,OAAO,KAAK,cAC/C,IAAIygC,EAAQ,IAAI1R,GACZrE,EAAK,IAAInqB,GACb,OAAAmqB,EAAG,kBAAkB1qB,CAAc,EACnCygC,EAAM,sBAAsB,IAAIpC,GAAkB3T,CAAE,CAAC,EAC9C+V,CACT,EACAb,GAAc,UAAU,OAAS,SAAiB7yC,EAAGzF,EAAU,CAC7D,IAAI0Y,EAAiB,KAAK,uBACtBA,IAAmB,OAAQA,EAAiBjT,EAAE,kBAAiB,GACnE,KAAK,UAAYA,EAAE,aACnB,IAAI0sC,EAAe,IAAIjE,GAAmBx1B,EAAgB,KAAK,UAAU,EACrE0gC,EAAkB,IAAInH,GAAsBxsC,EAAGzF,EAAUmyC,CAAY,EACrEkH,EAAmBD,EAAgB,YACvC,GAAIC,EAAiB,KAAM,GAAI,EAC7B,OAAO,KAAK,0BAA2B,EAEzC,KAAK,kBAAkBA,EAAkB3gC,CAAc,EACvD,KAAK,OAAS,IAAI0gB,EAAY,IAAIwc,EAAoB,EACtD,KAAK,OAAO,SAAS,KAAK,UAAU,SAAQ,CAAE,EAC9C,IAAIiD,EAAe,KAAK,gBAAgB,KAAK,MAAM,EAC/CC,EAAc,IAAIhf,GAAe,KAAK,SAAS,EACnD,KAAK,eAAe+e,EAAcC,CAAW,EAC7C,IAAI5e,EAAiB4e,EAAY,cACjC,GAAI5e,EAAe,KAAM,GAAI,EAC3B,OAAO,KAAK,0BAA2B,EAEzC,IAAIof,EAAa,KAAK,UAAU,cAAcpf,CAAc,EAC5D,OAAOof,CACT,EACAhB,GAAc,UAAU,kBAAoB,SAA4Be,EAAkB3gC,EAAgB,CACtG,IAAIjC,EAAS,KAEX0iC,EAAQ,KAAK,SAASzgC,CAAc,EACxCygC,EAAM,aAAaE,CAAgB,EAEnC,QADIE,EAAkBJ,EAAM,qBACnB12C,EAAI82C,EAAgB,SAAQ,EAAI92C,EAAE,WAAY,CACrD,IAAImlC,EAASnlC,EAAE,OACXwa,EAAM2qB,EAAO,iBACjB,GAAI,EAAA3qB,EAAI,SAAW,GAAKA,EAAI,CAAC,EAAE,SAASA,EAAI,CAAC,CAAC,GAC9C,KAAIu8B,EAAW5R,EAAO,UAClB1S,EAAO,IAAIgiB,GAAKtP,EAAO,eAAc,EAAI,IAAI5T,EAAMwlB,CAAQ,CAAC,EAChE/iC,EAAO,iBAAiBye,CAAI,EAC7B,CACH,EACAojB,GAAc,UAAU,SAAW,SAAmBa,EAAO,CAC3D,KAAK,cAAgBA,CACvB,EACAb,GAAc,UAAU,YAAc,UAAwB,CAC5D,MAAO,CAAE,CACX,EACAA,GAAc,UAAU,SAAW,UAAqB,CACtD,OAAOA,EACT,EACAA,GAAc,WAAa,SAAqBzjB,EAAO,CACrD,IAAI4kB,EAAO5kB,EAAM,YAAY,EAAG7D,EAAS,IAAI,EACzC0oB,EAAO7kB,EAAM,YAAY,EAAG7D,EAAS,KAAK,EAC9C,OAAIyoB,IAASjvC,EAAS,UAAYkvC,IAASlvC,EAAS,SAAmB,EAAcivC,IAASjvC,EAAS,UAAYkvC,IAASlvC,EAAS,SAAmB,GACjJ,CACT,EACA8tC,GAAc,kBAAoB,SAA4BzwB,EAAI,CAGhE,QAFIkC,EAAO,IAAIhU,EACXmB,EAAQ,IAAIyI,EACTkI,EAAG,WAAW,CACnB,IAAIgc,EAAKhc,EAAG,OACR5lB,EAAO8nB,EAAK,iBAAiB8Z,EAAG,eAAgB,CAAA,EACpD3sB,EAAM,IAAIjV,CAAI,CACf,CACD,OAAO8nB,EAAK,cAAc7S,CAAK,CACjC,EAEA,IAAIyiC,GAAc,UAAwB,CAMxC,GALA,KAAK,OAAS,KACd,KAAK,aAAe,KACpB,KAAK,SAAW,KAChB,KAAK,SAAW,KAChB,KAAK,UAAY,GACb,UAAU,SAAW,EAAG,CAC1B,IAAIR,EAAQ,UAAU,CAAC,EACnBS,EAAc,UAAU,CAAC,EAC7B,KAAK,OAAST,EACd,KAAK,aAAeS,EACpB,KAAK,SAAW,EAChB,KAAK,SAAW,EAChB,KAAK,UAAY,CAAC,KAAK,mBAAkB,CAC7C,SAAa,UAAU,SAAW,EAAG,CACjC,IAAIC,EAAU,UAAU,CAAC,EACrBC,EAAgB,UAAU,CAAC,EAC3BC,EAAU,UAAU,CAAC,EACrBC,EAAU,UAAU,CAAC,EACzB,KAAK,OAASH,EACd,KAAK,aAAeC,EACpB,KAAK,SAAWC,EAChB,KAAK,SAAWC,EAChB,KAAK,UAAY,CAAC,KAAK,mBAAkB,CAC1C,CACH,EACAL,GAAY,UAAU,QAAU,UAAoB,CAChD,IAAIljC,EAAS,KAEf,GAAI9L,EAAa,UAAU,CAAC,EAAG0U,EAAU,EAEvC,QADIokB,EAAa,UAAU,CAAC,EACnBhhC,EAAIghC,EAAW,SAAQ,EAAIhhC,EAAE,WAAY,CAChD,IAAIohC,EAAKphC,EAAE,OACXgU,EAAO,QAAQotB,EAAG,eAAgB,CAAA,CACnC,SACQ,UAAU,CAAC,YAAa,MAAO,CAQxC,QAPI5mB,EAAM,UAAU,CAAC,EAOZZ,EAAM,EAAGA,EAAMY,EAAI,OAAQZ,IAClCY,EAAIZ,CAAG,EAAE,EAAIY,EAAIZ,CAAG,EAAE,EAAI5F,EAAO,aAAeA,EAAO,SACvDwG,EAAIZ,CAAG,EAAE,EAAIY,EAAIZ,CAAG,EAAE,EAAI5F,EAAO,aAAeA,EAAO,SAErDwG,EAAI,SAAW,GAAKA,EAAI,CAAC,EAAE,SAASA,EAAI,CAAC,CAAC,GAC5C9J,GAAO,IAAI,QAAQ8J,CAAG,CAEzB,CACH,EACA08B,GAAY,UAAU,MAAQ,UAAkB,CAC5C,IAAIljC,EAAS,KAEf,GAAI9L,EAAa,UAAU,CAAC,EAAG0U,EAAU,EAAG,CAG1C,QAFIokB,EAAa,UAAU,CAAC,EACxBwW,EAAsB,IAAIt6B,EACrB,EAAI8jB,EAAW,SAAQ,EAAI,EAAE,WAAY,CAChD,IAAII,EAAK,EAAE,OACXoW,EAAoB,IAAI,IAAI7X,GAAmB3rB,EAAO,MAAMotB,EAAG,eAAgB,CAAA,EAAGA,EAAG,QAAO,CAAE,CAAC,CAChG,CACD,OAAOoW,CACR,SAAU,UAAU,CAAC,YAAa,MAAO,CAGxC,QAFIh9B,EAAM,UAAU,CAAC,EACjBi9B,EAAW,IAAI,MAAMj9B,EAAI,MAAM,EAAE,KAAK,IAAI,EACrCZ,EAAM,EAAGA,EAAMY,EAAI,OAAQZ,IAClC69B,EAAS79B,CAAG,EAAI,IAAIpT,EAAW,KAAK,OAAOgU,EAAIZ,CAAG,EAAE,EAAI5F,EAAO,UAAYA,EAAO,YAAY,EAAG,KAAK,OAAOwG,EAAIZ,CAAG,EAAE,EAAI5F,EAAO,UAAYA,EAAO,YAAY,EAAGwG,EAAIZ,CAAG,EAAE,CAAC,EAE/K,IAAI89B,EAAgBz4B,EAAiB,qBAAqBw4B,CAAQ,EAClE,OAAOC,CACR,CACH,EACAR,GAAY,UAAU,mBAAqB,UAA+B,CACxE,OAAO,KAAK,eAAiB,CAC/B,EACAA,GAAY,UAAU,mBAAqB,UAA+B,CACxE,IAAIS,EAAU,KAAK,OAAO,mBAAkB,EAC5C,OAAI,KAAK,WAAa,KAAK,QAAQA,CAAO,EACnCA,CACT,EACAT,GAAY,UAAU,aAAe,SAAuB7R,EAAiB,CAC3E,IAAIuS,EAAgBvS,EAChB,KAAK,YAAauS,EAAgB,KAAK,MAAMvS,CAAe,GAChE,KAAK,OAAO,aAAauS,CAAa,CACxC,EACAV,GAAY,UAAU,YAAc,UAAwB,CAC1D,MAAO,CAACrS,EAAK,CACf,EACAqS,GAAY,UAAU,SAAW,UAAqB,CACpD,OAAOA,EACT,EAEA,IAAIW,GAAkB,UAA4B,CAChD,KAAK,IAAM,IAAIrhC,GACf,KAAK,YAAc,KACnB,IAAIwqB,EAAa,UAAU,CAAC,EAC5B,KAAK,YAAcA,CACrB,EAEI8W,GAAqB,CAAE,KAAM,CAAE,aAAc,EAAM,CAAA,EACvDD,GAAgB,UAAU,8BAAgC,UAA0C,CAChG,IAAI7jC,EAAS,KAEf,GAAI,UAAU,SAAW,EACvB,QAAShU,EAAI,KAAK,YAAY,WAAYA,EAAE,WAAY,CACtD,IAAIohC,EAAKphC,EAAE,OACPwa,EAAM4mB,EAAG,iBACbptB,EAAO,8BAA8BwG,EAAI,CAAC,EAAGxG,EAAO,WAAW,EAC/DA,EAAO,8BAA8BwG,EAAIA,EAAI,OAAS,CAAC,EAAGxG,EAAO,WAAW,CAC7E,SACQ,UAAU,SAAW,GAG9B,QAFIsL,EAAS,UAAU,CAAC,EACpB0hB,EAAa,UAAU,CAAC,EACnBpnB,EAAMonB,EAAW,SAAQ,EAAIpnB,EAAI,WAGxC,QAFIm+B,EAAOn+B,EAAI,OACX8qB,EAAQqT,EAAK,iBACRx7C,EAAI,EAAGA,EAAImoC,EAAM,OAAS,EAAGnoC,IACpC,GAAImoC,EAAMnoC,CAAC,EAAE,OAAO+iB,CAAM,EAAK,MAAM,IAAIpK,GAAiB,iDAAmD3Y,EAAI,QAAU+iB,CAAM,EAIzI,EACAu4B,GAAgB,UAAU,2BAA6B,UAAuC,CAC1F,IAAI7jC,EAAS,KAEf,GAAI,UAAU,SAAW,EACvB,QAAShU,EAAI,KAAK,YAAY,WAAYA,EAAE,WAE1C,QADIg4C,EAAMh4C,EAAE,OACHzD,EAAI,KAAK,YAAY,WAAYA,EAAE,WAAY,CACtD,IAAIqpC,EAAMrpC,EAAE,OACZyX,EAAO,2BAA2BgkC,EAAKpS,CAAG,CAC3C,SAEM,UAAU,SAAW,EAK9B,QAJIqS,EAAQ,UAAU,CAAC,EACnBC,EAAQ,UAAU,CAAC,EACnBC,EAAOF,EAAM,iBACb53B,EAAO63B,EAAM,iBACRpR,EAAK,EAAGA,EAAKqR,EAAK,OAAS,EAAGrR,IACrC,QAAS9lB,EAAK,EAAGA,EAAKX,EAAK,OAAS,EAAGW,IACrChN,EAAO,2BAA2BikC,EAAOnR,EAAIoR,EAAOl3B,CAAE,UAGjD,UAAU,SAAW,EAAG,CACjC,IAAIkzB,EAAK,UAAU,CAAC,EAChBC,EAAY,UAAU,CAAC,EACvBC,EAAK,UAAU,CAAC,EAChBC,EAAY,UAAU,CAAC,EAC3B,GAAIH,IAAOE,GAAMD,IAAcE,EAAa,OAAO,KACnD,IAAIrQ,EAAMkQ,EAAG,eAAgB,EAACC,CAAS,EACnClQ,EAAMiQ,EAAG,eAAgB,EAACC,EAAY,CAAC,EACvCjQ,EAAMkQ,EAAG,eAAgB,EAACC,CAAS,EACnClQ,EAAMiQ,EAAG,eAAgB,EAACC,EAAY,CAAC,EAE3C,GADA,KAAK,IAAI,oBAAoBrQ,EAAKC,EAAKC,EAAKC,CAAG,EAC3C,KAAK,IAAI,oBACP,KAAK,IAAI,SAAQ,GAAM,KAAK,wBAAwB,KAAK,IAAKH,EAAKC,CAAG,GAAK,KAAK,wBAAwB,KAAK,IAAKC,EAAKC,CAAG,GAC5H,MAAM,IAAIjvB,GAAiB,mCAAqC8uB,EAAM,IAAMC,EAAM,QAAUC,EAAM,IAAMC,CAAG,CAGhH,CACH,EACA0T,GAAgB,UAAU,WAAa,UAAuB,CAC5D,KAAK,8BAA6B,EAClC,KAAK,2BAA0B,EAC/B,KAAK,eAAc,CACrB,EACAA,GAAgB,UAAU,eAAiB,UAA2B,CAClE,IAAI7jC,EAAS,KAEf,GAAI,UAAU,SAAW,EACvB,QAAShU,EAAI,KAAK,YAAY,WAAYA,EAAE,WAAY,CACtD,IAAIohC,EAAKphC,EAAE,OACXgU,EAAO,eAAeotB,CAAE,CACzB,SACQ,UAAU,SAAW,EAG9B,QAFI2W,EAAO,UAAU,CAAC,EAClBv9B,EAAMu9B,EAAK,iBACNn+B,EAAM,EAAGA,EAAMY,EAAI,OAAS,EAAGZ,IACtC5F,EAAO,cAAcwG,EAAIZ,CAAG,EAAGY,EAAIZ,EAAM,CAAC,EAAGY,EAAIZ,EAAM,CAAC,CAAC,CAG/D,EACAi+B,GAAgB,UAAU,wBAA0B,SAAkClX,EAAI1rB,EAAI3G,EAAI,CAChG,QAAS,EAAI,EAAG,EAAIqyB,EAAG,mBAAkB,EAAI,IAAK,CAChD,IAAIjqB,EAAQiqB,EAAG,gBAAgB,CAAC,EAChC,GAAI,EAAEjqB,EAAM,OAAOzB,CAAE,GAAKyB,EAAM,OAAOpI,CAAE,GAAM,MAAO,EACvD,CACD,MAAO,EACT,EACAupC,GAAgB,UAAU,cAAgB,SAAwB5iC,EAAI3G,EAAIC,EAAI,CAC5E,GAAI0G,EAAG,OAAO1G,CAAE,EAAK,MAAM,IAAI2G,GAAiB,+BAAiC2iC,GAAgB,KAAK,iBAAiB,CAAC5iC,EAAI3G,EAAIC,CAAE,CAAC,CAAC,CACtI,EACAspC,GAAgB,UAAU,YAAc,UAAwB,CAC9D,MAAO,CAAE,CACX,EACAA,GAAgB,UAAU,SAAW,UAAqB,CACxD,OAAOA,EACT,EACAC,GAAmB,KAAK,IAAM,UAAY,CAAE,OAAO,IAAIxkC,CAAiB,EAExE,OAAO,iBAAkBukC,GAAiBC,IAE1C,IAAIM,GAAW,UAAqB,CAClC,KAAK,IAAM,KACX,KAAK,IAAM,KACX,KAAK,YAAc,KACnB,KAAK,UAAY,KACjB,KAAK,UAAY,KACjB,KAAK,UAAY,KACjB,KAAK,aAAe,KACpB,KAAK,MAAQ,KACb,KAAK,MAAQ,KACb,KAAK,MAAQ,KACb,KAAK,MAAQ,KACb,KAAK,QAAU,IAAI,MAAM,CAAC,EAAE,KAAK,IAAI,EACrC,KAAK,SAAW,KAChB,IAAI/hC,EAAK,UAAU,CAAC,EAChB8gC,EAAc,UAAU,CAAC,EACzBxW,EAAK,UAAU,CAAC,EAKpB,GAJA,KAAK,YAActqB,EACnB,KAAK,IAAMA,EACX,KAAK,aAAe8gC,EACpB,KAAK,IAAMxW,EACPwW,GAAe,EAAK,MAAM,IAAIrxC,EAAyB,+BAA+B,EACtFqxC,IAAgB,IAClB,KAAK,IAAM,IAAI3wC,EAAW,KAAK,MAAM6P,EAAG,CAAC,EAAG,KAAK,MAAMA,EAAG,CAAC,CAAC,EAC5D,KAAK,UAAY,IAAI7P,EACrB,KAAK,UAAY,IAAIA,GAEvB,KAAK,YAAY,KAAK,GAAG,CAC3B,EAEI6xC,GAAqB,CAAE,0BAA2B,CAAE,aAAc,EAAM,CAAA,EAC5ED,GAAS,UAAU,iBAAmB,SAA2BnjC,EAAI3G,EAAI,CACvE,IAAIgqC,EAAU,KAAK,IAAIrjC,EAAG,EAAG3G,EAAG,CAAC,EAC7BiqC,EAAU,KAAK,IAAItjC,EAAG,EAAG3G,EAAG,CAAC,EAC7BkqC,EAAU,KAAK,IAAIvjC,EAAG,EAAG3G,EAAG,CAAC,EAC7BmqC,EAAU,KAAK,IAAIxjC,EAAG,EAAG3G,EAAG,CAAC,EAC7BoqC,EAAoB,KAAK,MAAQJ,GAAW,KAAK,MAAQC,GAAW,KAAK,MAAQC,GAAW,KAAK,MAAQC,EAC7G,GAAIC,EAAqB,MAAO,GAChC,IAAIC,EAAa,KAAK,0BAA0B1jC,EAAI3G,CAAE,EACtD,OAAA+G,EAAO,OAAO,EAAEqjC,GAAqBC,GAAa,yBAAyB,EACpEA,CACT,EACAP,GAAS,UAAU,YAAc,SAAsB/hC,EAAI,CACzD,IAAIxQ,EAAY,GAChB,KAAK,MAAQwQ,EAAG,EAAIxQ,EACpB,KAAK,MAAQwQ,EAAG,EAAIxQ,EACpB,KAAK,MAAQwQ,EAAG,EAAIxQ,EACpB,KAAK,MAAQwQ,EAAG,EAAIxQ,EACpB,KAAK,QAAQ,CAAC,EAAI,IAAIW,EAAW,KAAK,MAAO,KAAK,KAAK,EACvD,KAAK,QAAQ,CAAC,EAAI,IAAIA,EAAW,KAAK,MAAO,KAAK,KAAK,EACvD,KAAK,QAAQ,CAAC,EAAI,IAAIA,EAAW,KAAK,MAAO,KAAK,KAAK,EACvD,KAAK,QAAQ,CAAC,EAAI,IAAIA,EAAW,KAAK,MAAO,KAAK,KAAK,CACzD,EACA4xC,GAAS,UAAU,WAAa,SAAqBnjC,EAAI3G,EAAI,CAC3D,OAAI,KAAK,eAAiB,EAAc,KAAK,iBAAiB2G,EAAI3G,CAAE,GACpE,KAAK,WAAW2G,EAAI,KAAK,SAAS,EAClC,KAAK,WAAW3G,EAAI,KAAK,SAAS,EAC3B,KAAK,iBAAiB,KAAK,UAAW,KAAK,SAAS,EAC7D,EACA8pC,GAAS,UAAU,MAAQ,SAAgB3yC,EAAK,CAC9C,OAAO,KAAK,MAAMA,EAAM,KAAK,YAAY,CAC3C,EACA2yC,GAAS,UAAU,cAAgB,UAA0B,CAC3D,OAAO,KAAK,WACd,EACAA,GAAS,UAAU,WAAa,SAAqBnnC,EAAG2nC,EAAS,CAC/DA,EAAQ,EAAI,KAAK,MAAM3nC,EAAE,CAAC,EAC1B2nC,EAAQ,EAAI,KAAK,MAAM3nC,EAAE,CAAC,CAC5B,EACAmnC,GAAS,UAAU,gBAAkB,UAA4B,CAC/D,GAAI,KAAK,WAAa,KAAM,CAC1B,IAAIS,EAAgBT,GAAS,0BAA4B,KAAK,aAC9D,KAAK,SAAW,IAAIhmC,EAAS,KAAK,YAAY,EAAIymC,EAAe,KAAK,YAAY,EAAIA,EAAe,KAAK,YAAY,EAAIA,EAAe,KAAK,YAAY,EAAIA,CAAa,CAC5K,CACD,OAAO,KAAK,QACd,EACAT,GAAS,UAAU,uBAAyB,SAAiCnjC,EAAI3G,EAAI,CAQnF,OAPA,KAAK,IAAI,oBAAoB2G,EAAI3G,EAAI,KAAK,QAAQ,CAAC,EAAG,KAAK,QAAQ,CAAC,CAAC,EACjE,QAAK,IAAI,gBAAe,IAC5B,KAAK,IAAI,oBAAoB2G,EAAI3G,EAAI,KAAK,QAAQ,CAAC,EAAG,KAAK,QAAQ,CAAC,CAAC,EACjE,KAAK,IAAI,gBAAe,KAC5B,KAAK,IAAI,oBAAoB2G,EAAI3G,EAAI,KAAK,QAAQ,CAAC,EAAG,KAAK,QAAQ,CAAC,CAAC,EACjE,KAAK,IAAI,gBAAe,KAC5B,KAAK,IAAI,oBAAoB2G,EAAI3G,EAAI,KAAK,QAAQ,CAAC,EAAG,KAAK,QAAQ,CAAC,CAAC,EACjE,KAAK,IAAI,gBAAe,GAE9B,EACA8pC,GAAS,UAAU,0BAA4B,SAAoCnjC,EAAI3G,EAAI,CACzF,IAAIwqC,EAAiB,GACjBC,EAAmB,GAavB,OAZA,KAAK,IAAI,oBAAoB9jC,EAAI3G,EAAI,KAAK,QAAQ,CAAC,EAAG,KAAK,QAAQ,CAAC,CAAC,EACjE,QAAK,IAAI,SAAQ,IACrB,KAAK,IAAI,oBAAoB2G,EAAI3G,EAAI,KAAK,QAAQ,CAAC,EAAG,KAAK,QAAQ,CAAC,CAAC,EACjE,KAAK,IAAI,SAAQ,KACjB,KAAK,IAAI,gBAAiB,IAAIwqC,EAAiB,IACnD,KAAK,IAAI,oBAAoB7jC,EAAI3G,EAAI,KAAK,QAAQ,CAAC,EAAG,KAAK,QAAQ,CAAC,CAAC,EACjE,KAAK,IAAI,SAAQ,KACjB,KAAK,IAAI,gBAAiB,IAAIyqC,EAAmB,IACrD,KAAK,IAAI,oBAAoB9jC,EAAI3G,EAAI,KAAK,QAAQ,CAAC,EAAG,KAAK,QAAQ,CAAC,CAAC,EACjE,KAAK,IAAI,SAAQ,IACjBwqC,GAAkBC,GAClB9jC,EAAG,OAAO,KAAK,GAAG,GAClB3G,EAAG,OAAO,KAAK,GAAG,EAExB,EACA8pC,GAAS,UAAU,eAAiB,SAAyBjT,EAAQ6T,EAAU,CAC7E,IAAI/jC,EAAKkwB,EAAO,cAAc6T,CAAQ,EAClC1qC,EAAK62B,EAAO,cAAc6T,EAAW,CAAC,EAC1C,OAAI,KAAK,WAAW/jC,EAAI3G,CAAE,GACxB62B,EAAO,gBAAgB,KAAK,cAAe,EAAE6T,CAAQ,EAC9C,IAEF,EACT,EACAZ,GAAS,UAAU,YAAc,UAAwB,CACvD,MAAO,CAAE,CACX,EACAA,GAAS,UAAU,SAAW,UAAqB,CACjD,OAAOA,EACT,EACAC,GAAmB,0BAA0B,IAAM,UAAY,CAAE,MAAO,IAAI,EAE5E,OAAO,iBAAkBD,GAAUC,IAEnC,IAAIY,GAA4B,UAAsC,CACpE,KAAK,SAAW,IAAI7mC,EACpB,KAAK,gBAAkB,IAAIivB,CAC7B,EACA4X,GAA0B,UAAU,OAAS,UAAmB,CAC9D,GAAI,UAAU,SAAW,GAElB,GAAI,UAAU,SAAW,EAAG,CACjC,IAAIpV,EAAK,UAAU,CAAC,EAChBjR,EAAa,UAAU,CAAC,EAC5BiR,EAAG,eAAejR,EAAY,KAAK,eAAe,EAClD,KAAK,OAAO,KAAK,eAAe,CACjC,EACH,EACAqmB,GAA0B,UAAU,YAAc,UAAwB,CACxE,MAAO,CAAE,CACX,EACAA,GAA0B,UAAU,SAAW,UAAqB,CAClE,OAAOA,EACT,EAEA,IAAIC,GAAsB,UAAgC,CACxD,KAAK,OAAS,KACd,IAAInwC,EAAQ,UAAU,CAAC,EACvB,KAAK,OAASA,CAChB,EAEIowC,GAAqB,CAAE,mBAAoB,CAAE,aAAc,EAAM,CAAA,EACrED,GAAoB,UAAU,KAAO,UAAiB,CACpD,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAIE,EAAW,UAAU,CAAC,EAC1B,OAAO,KAAK,KAAKA,EAAU,KAAM,EAAE,CACvC,SAAa,UAAU,SAAW,EAAG,CACjC,IAAIC,EAAa,UAAU,CAAC,EACxBC,EAAa,UAAU,CAAC,EACxBC,EAAsB,UAAU,CAAC,EACjCC,EAAWH,EAAW,kBACtBI,EAAqB,IAAIC,GAAmBL,EAAYC,EAAYC,CAAmB,EAC3F,YAAK,OAAO,MAAMC,EAAU,CAC1B,YAAa,UAAY,CACvB,MAAO,CAAC3gB,EAAW,CACpB,EACD,UAAW,SAAUJ,EAAM,CACzB,IAAIiN,EAAYjN,EAChBiN,EAAU,OAAO8T,EAAUC,CAAkB,CAC9C,CACP,CAAK,EACMA,EAAmB,YAAa,CACxC,CACH,EACAP,GAAoB,UAAU,YAAc,UAAwB,CAClE,MAAO,CAAE,CACX,EACAA,GAAoB,UAAU,SAAW,UAAqB,CAC5D,OAAOA,EACT,EACAC,GAAmB,mBAAmB,IAAM,UAAY,CAAE,OAAOO,EAAkB,EAEnF,OAAO,iBAAkBR,GAAqBC,IAE9C,IAAIO,GAAsB,SAAUC,EAA8B,CAChE,SAASD,GAAsB,CAC7BC,EAA6B,KAAK,IAAI,EACtC,KAAK,UAAY,KACjB,KAAK,YAAc,KACnB,KAAK,qBAAuB,KAC5B,KAAK,aAAe,GACpB,IAAIP,EAAW,UAAU,CAAC,EACtBE,EAAa,UAAU,CAAC,EACxBC,EAAsB,UAAU,CAAC,EACrC,KAAK,UAAYH,EACjB,KAAK,YAAcE,EACnB,KAAK,qBAAuBC,CAC7B,CAED,OAAKI,IAA+BD,EAAmB,UAAYC,GACnED,EAAmB,UAAY,OAAO,OAAQC,GAAgCA,EAA6B,WAC3GD,EAAmB,UAAU,YAAcA,EAC3CA,EAAmB,UAAU,YAAc,UAAwB,CACjE,OAAO,KAAK,YAChB,EACEA,EAAmB,UAAU,OAAS,UAAmB,CACvD,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAI7V,EAAK,UAAU,CAAC,EAChBjR,EAAa,UAAU,CAAC,EACxBwO,EAAKyC,EAAG,aACZ,GAAI,KAAK,cAAgB,MACnBzC,IAAO,KAAK,aAAexO,IAAe,KAAK,qBAAwB,OAAO,KAEpF,KAAK,aAAe,KAAK,UAAU,eAAewO,EAAIxO,CAAU,CACtE,KAAa,QAAO+mB,EAA6B,UAAU,OAAO,MAAM,KAAM,SAAS,CACvF,EACED,EAAmB,UAAU,YAAc,UAAwB,CACjE,MAAO,CAAE,CACb,EACEA,EAAmB,UAAU,SAAW,UAAqB,CAC3D,OAAOA,CACX,EAESA,CACT,EAAET,EAAyB,EAEvBW,GAAkC,UAA4C,CAChF,KAAK,IAAM,KACX,KAAK,uBAAyB,KAC9B,IAAIjZ,EAAK,UAAU,CAAC,EACpB,KAAK,IAAMA,EACX,KAAK,uBAAyB,IAAIzjB,CACpC,EACA08B,GAAgC,UAAU,qBAAuB,SAA+B1F,EAAIC,EAAWC,EAAIC,EAAW,CAC1H,IAAIrgC,EAAS,KAEf,GAAIkgC,IAAOE,GAAMD,IAAcE,EAAa,OAAO,KACnD,IAAIrQ,EAAMkQ,EAAG,eAAgB,EAACC,CAAS,EACnClQ,EAAMiQ,EAAG,eAAgB,EAACC,EAAY,CAAC,EACvCjQ,EAAMkQ,EAAG,eAAgB,EAACC,CAAS,EACnClQ,EAAMiQ,EAAG,eAAgB,EAACC,EAAY,CAAC,EAE3C,GADA,KAAK,IAAI,oBAAoBrQ,EAAKC,EAAKC,EAAKC,CAAG,EAC3C,KAAK,IAAI,mBACP,KAAK,IAAI,yBAA0B,CACrC,QAASxuB,EAAW,EAAGA,EAAW,KAAK,IAAI,qBAAsBA,IAC/D3B,EAAO,uBAAuB,IAAIA,EAAO,IAAI,gBAAgB2B,CAAQ,CAAC,EAExEu+B,EAAG,iBAAiB,KAAK,IAAKC,EAAW,CAAC,EAC1CC,EAAG,iBAAiB,KAAK,IAAKC,EAAW,CAAC,CAC3C,CAEL,EACAuF,GAAgC,UAAU,OAAS,UAAmB,CACpE,MAAO,EACT,EACAA,GAAgC,UAAU,yBAA2B,UAAqC,CACxG,OAAO,KAAK,sBACd,EACAA,GAAgC,UAAU,YAAc,UAAwB,CAC9E,MAAO,CAAC3F,EAAkB,CAC5B,EACA2F,GAAgC,UAAU,SAAW,UAAqB,CACxE,OAAOA,EACT,EAEA,IAAIC,GAAqB,UAA+B,CACtD,KAAK,IAAM,KACX,KAAK,IAAM,KACX,KAAK,aAAe,KACpB,KAAK,OAAS,KACd,KAAK,cAAgB,KACrB,KAAK,iBAAmB,KACxB,IAAIxuB,EAAK,UAAU,CAAC,EACpB,KAAK,IAAMA,EACX,KAAK,IAAM,IAAI7U,GACf,KAAK,IAAI,kBAAkB6U,CAAE,EAC7B,KAAK,aAAeA,EAAG,UACzB,EACAwuB,GAAmB,UAAU,iBAAmB,SAA2BC,EAAqB,CAC9F,IAAIC,EAAmBpa,GAAmB,mBAAmBma,CAAmB,EAC5EE,EAAK,IAAInC,GAAgBkC,CAAgB,EAC7C,GAAI,CACFC,EAAG,WAAU,CACd,OAAQrsC,EAAI,CACX,GAAIA,aAAc4C,GAChB5C,EAAG,gBAAe,MACX,OAAMA,CACnB,SAAc,CACd,EACAksC,GAAmB,UAAU,mBAAqB,UAA+B,CAC/E,OAAOla,GAAmB,mBAAmB,KAAK,gBAAgB,CACpE,EACAka,GAAmB,UAAU,UAAY,SAAoB7Y,EAAYL,EAAI,CAC3E,IAAIsZ,EAAgB,KAAK,0BAA0BjZ,EAAYL,CAAE,EACjE,KAAK,yBAAyBsZ,CAAa,EAC3C,KAAK,mBAAmBjZ,CAAU,CACpC,EACA6Y,GAAmB,UAAU,0BAA4B,SAAoC7Y,EAAYL,EAAI,CAC3G,IAAIuZ,EAAiB,IAAIN,GAAgCjZ,CAAE,EAC3D,YAAK,OAAO,sBAAsBuZ,CAAc,EAChD,KAAK,OAAO,aAAalZ,CAAU,EAC5BkZ,EAAe,yBAA0B,CAClD,EACAL,GAAmB,UAAU,mBAAqB,UAA+B,CAC7E,IAAI7lC,EAAS,KAEf,GAAI9L,EAAa,UAAU,CAAC,EAAG0U,EAAU,EAEvC,QADIkX,EAAQ,UAAU,CAAC,EACdgT,EAAKhT,EAAM,SAAQ,EAAIgT,EAAG,WAAY,CAC7C,IAAIqT,EAAQrT,EAAG,OACf9yB,EAAO,mBAAmBmmC,CAAK,CAChC,SACQ,UAAU,CAAC,YAAaxa,GAGjC,QAFIt2B,EAAI,UAAU,CAAC,EACf8uC,EAAO9uC,EAAE,iBACJrJ,EAAI,EAAGA,EAAIm4C,EAAK,OAAQn4C,IAAK,CACpC,IAAIo5C,EAAW,IAAIhB,GAASD,EAAKn4C,CAAC,EAAGgU,EAAO,aAAcA,EAAO,GAAG,EAChEomC,EAAcpmC,EAAO,cAAc,KAAKolC,EAAU/vC,EAAGrJ,CAAC,EACtDo6C,GACF/wC,EAAE,gBAAgB8uC,EAAKn4C,CAAC,EAAGA,CAAC,CAE/B,CAEL,EACA65C,GAAmB,UAAU,aAAe,SAAuBC,EAAqB,CACtF,KAAK,iBAAmBA,EACxB,KAAK,OAAS,IAAI9U,GAClB,KAAK,cAAgB,IAAIkU,GAAoB,KAAK,OAAO,SAAQ,CAAE,EACnE,KAAK,UAAUY,EAAqB,KAAK,GAAG,CAC9C,EACAD,GAAmB,UAAU,yBAA2B,SAAmCQ,EAAS,CAGlG,QAFMrmC,EAAS,KAENoR,EAAKi1B,EAAQ,SAAQ,EAAIj1B,EAAG,WAAY,CAC/C,IAAIk1B,EAASl1B,EAAG,OACZg0B,EAAW,IAAIhB,GAASkC,EAAQtmC,EAAO,aAAcA,EAAO,GAAG,EACnEA,EAAO,cAAc,KAAKolC,CAAQ,CACnC,CACH,EACAS,GAAmB,UAAU,YAAc,UAAwB,CACjE,MAAO,CAAChV,EAAK,CACf,EACAgV,GAAmB,UAAU,SAAW,UAAqB,CAC3D,OAAOA,EACT,EAEA,IAAIU,GAAW,UAAqB,CAMlC,GALA,KAAK,SAAW,KAChB,KAAK,UAAY,KACjB,KAAK,WAAa,IAAIzU,EACtB,KAAK,gBAAkB,KACvB,KAAK,eAAiB,KAClB,UAAU,SAAW,EAAG,CAC1B,IAAI9iC,EAAI,UAAU,CAAC,EACnB,KAAK,SAAWA,CACpB,SAAa,UAAU,SAAW,EAAG,CACjC,IAAI0Y,EAAM,UAAU,CAAC,EACjBstB,EAAY,UAAU,CAAC,EAC3B,KAAK,SAAWttB,EAChB,KAAK,WAAastB,CACnB,CACH,EAEIwR,GAAqB,CAAE,UAAW,CAAE,aAAc,IAAO,SAAU,CAAE,aAAc,EAAI,EAAG,SAAU,CAAE,aAAc,EAAM,EAAC,WAAY,CAAE,aAAc,IAAO,qBAAsB,CAAE,aAAc,EAAI,GAC5MD,GAAS,UAAU,qBAAuB,SAA+BE,EAAS,CAChF,IAAI/D,EAAQ,IAAIQ,GAAY,IAAI2C,GAAmB,IAAI3uB,EAAe,CAAG,CAAC,EAAGuvB,EAAQ,SAAU,CAAA,EAC3FC,EAAa,IAAI7E,GAAc,KAAK,UAAU,EAClD6E,EAAW,yBAAyBD,CAAO,EAC3CC,EAAW,SAAShE,CAAK,EACzB,KAAK,gBAAkBgE,EAAW,OAAO,KAAK,SAAU,KAAK,SAAS,CACxE,EACAH,GAAS,UAAU,uBAAyB,UAAmC,CAC3E,IAAIvmC,EAAS,KAEf,GAAI,UAAU,SAAW,EAAG,CAC1B,QAAS2mC,EAAaJ,GAAS,qBAAsBI,GAAc,EAAGA,IAAc,CAClF,GAAI,CACF3mC,EAAO,uBAAuB2mC,CAAU,CACzC,OAAQhtC,EAAI,CACX,GAAIA,aAAc4hB,GAChBvb,EAAO,eAAiBrG,MACjB,OAAMA,CACvB,SAAkB,CACZ,GAAIqG,EAAO,kBAAoB,KAAQ,OAAO,IAC/C,CACD,MAAM,KAAK,cACf,SAAa,UAAU,SAAW,EAAG,CACjC,IAAI4mC,EAAkB,UAAU,CAAC,EAC7BC,EAAuBN,GAAS,qBAAqB,KAAK,SAAU,KAAK,UAAWK,CAAe,EACnGH,EAAU,IAAIvvB,EAAe2vB,CAAoB,EACrD,KAAK,qBAAqBJ,CAAO,CAClC,CACH,EACAF,GAAS,UAAU,gBAAkB,UAA4B,CAE/D,GADA,KAAK,wBAAuB,EACxB,KAAK,kBAAoB,KAAQ,OAAO,KAC5C,IAAIO,EAAQ,KAAK,SAAS,WAAY,EAAC,kBAAiB,EACpDA,EAAM,QAAO,IAAO5vB,EAAe,MAAS,KAAK,qBAAqB4vB,CAAK,EAAY,KAAK,uBAAwB,CAC1H,EACAP,GAAS,UAAU,oBAAsB,SAA8BxU,EAAkB,CACvF,KAAK,WAAW,oBAAoBA,CAAgB,CACtD,EACAwU,GAAS,UAAU,wBAA0B,UAAoC,CAC/E,GAAI,CACF,IAAIG,EAAa,IAAI7E,GAAc,KAAK,UAAU,EAClD,KAAK,gBAAkB6E,EAAW,OAAO,KAAK,SAAU,KAAK,SAAS,CACvE,OAAQ/sC,EAAI,CACX,GAAIA,aAAcuH,GAChB,KAAK,eAAiBvH,MACf,OAAMA,CACnB,SAAc,CACd,EACA4sC,GAAS,UAAU,kBAAoB,SAA4Bh9C,EAAU,CAC3E,YAAK,UAAYA,EACjB,KAAK,gBAAe,EACb,KAAK,eACd,EACAg9C,GAAS,UAAU,eAAiB,SAAyBtU,EAAa,CACxE,KAAK,WAAW,eAAeA,CAAW,CAC5C,EACAsU,GAAS,UAAU,YAAc,UAAwB,CACvD,MAAO,CAAE,CACX,EACAA,GAAS,UAAU,SAAW,UAAqB,CACjD,OAAOA,EACT,EACAA,GAAS,SAAW,UAAqB,CACvC,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAIv3C,EAAI,UAAU,CAAC,EACfzF,EAAW,UAAU,CAAC,EACtBw9C,EAAO,IAAIR,GAASv3C,CAAC,EACrBg4C,EAAUD,EAAK,kBAAkBx9C,CAAQ,EAC7C,OAAOy9C,CACX,SAAa,UAAU,SAAW,GAC9B,GAAI,OAAO,UAAU,UAAU,CAAC,CAAC,GAAM,UAAU,CAAC,YAAaz/B,GAAY,OAAO,UAAU,CAAC,GAAM,SAAW,CAC5G,IAAIG,EAAM,UAAU,CAAC,EACjBu/B,EAAa,UAAU,CAAC,EACxBlV,EAAmB,UAAU,CAAC,EAC9BmV,EAAQ,IAAIX,GAAS7+B,CAAG,EAC5Bw/B,EAAM,oBAAoBnV,CAAgB,EAC1C,IAAIoV,EAAYD,EAAM,kBAAkBD,CAAU,EAClD,OAAOE,CACR,SAAU,UAAU,CAAC,YAAarV,GAAqB,UAAU,CAAC,YAAavqB,GAAY,OAAO,UAAU,CAAC,GAAM,SAAW,CAC7H,IAAI6/B,EAAM,UAAU,CAAC,EACjBC,EAAa,UAAU,CAAC,EACxBC,EAAS,UAAU,CAAC,EACpBC,EAAU,IAAIhB,GAASa,EAAKE,CAAM,EAClCE,EAAYD,EAAQ,kBAAkBF,CAAU,EACpD,OAAOG,CACR,UACQ,UAAU,SAAW,EAAG,CACjC,IAAIC,EAAM,UAAU,CAAC,EACjBC,EAAa,UAAU,CAAC,EACxB1V,EAAqB,UAAU,CAAC,EAChCC,EAAc,UAAU,CAAC,EACzB0V,EAAU,IAAIpB,GAASkB,CAAG,EAC9BE,EAAQ,oBAAoB3V,CAAkB,EAC9C2V,EAAQ,eAAe1V,CAAW,EAClC,IAAI2V,EAAYD,EAAQ,kBAAkBD,CAAU,EACpD,OAAOE,CACR,CACH,EACArB,GAAS,qBAAuB,SAA+Bv3C,EAAGzF,EAAUs+C,EAAoB,CAC9F,IAAIvrC,EAAMtN,EAAE,sBACR84C,EAAS3zC,GAAS,IAAI,KAAK,IAAImI,EAAI,QAAS,CAAA,EAAG,KAAK,IAAIA,EAAI,QAAS,CAAA,EAAG,KAAK,IAAIA,EAAI,QAAS,CAAA,EAAG,KAAK,IAAIA,EAAI,QAAO,CAAE,CAAC,EACxHyrC,EAAmBx+C,EAAW,EAAMA,EAAW,EAC/Cy+C,EAAYF,EAAS,EAAIC,EACzBE,EAAwB,KAAK,MAAM,KAAK,IAAID,CAAS,EAAI,KAAK,IAAI,EAAE,EAAI,CAAG,EAC3EE,EAAeL,EAAqBI,EACpC9E,EAAc,KAAK,IAAI,GAAM+E,CAAY,EAC7C,OAAO/E,CACT,EACAqD,GAAmB,UAAU,IAAM,UAAY,CAAE,OAAO1U,EAAiB,SAAS,EAClF0U,GAAmB,SAAS,IAAM,UAAY,CAAE,OAAO1U,EAAiB,QAAQ,EAChF0U,GAAmB,SAAS,IAAM,UAAY,CAAE,OAAO1U,EAAiB,QAAQ,EAChF0U,GAAmB,WAAW,IAAM,UAAY,CAAE,OAAO1U,EAAiB,UAAU,EACpF0U,GAAmB,qBAAqB,IAAM,UAAY,CAAE,MAAO,GAAE,EAErE,OAAO,iBAAkBD,GAAUC,IAEnC,IAAI2B,GAAoB,UAA8B,CACpD,KAAK,IAAM,CAAC,IAAI31C,EAAc,IAAIA,CAAY,EAC9C,KAAK,UAAYP,EAAO,IACxB,KAAK,QAAU,EACjB,EACAk2C,GAAkB,UAAU,eAAiB,UAA2B,CACtE,OAAO,KAAK,GACd,EACAA,GAAkB,UAAU,cAAgB,SAAwBn8C,EAAG,CACrE,OAAO,KAAK,IAAIA,CAAC,CACnB,EACAm8C,GAAkB,UAAU,WAAa,UAAuB,CAC9D,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAIzU,EAAS,UAAU,CAAC,EACxB,KAAK,WAAWA,EAAO,IAAI,CAAC,EAAGA,EAAO,IAAI,CAAC,CAAC,CAChD,SAAa,UAAU,SAAW,EAAG,CACjC,IAAIzyB,EAAK,UAAU,CAAC,EAChB3G,EAAK,UAAU,CAAC,EACpB,GAAI,KAAK,QACP,YAAK,WAAW2G,EAAI3G,CAAE,EACf,KAET,IAAI6H,EAAOlB,EAAG,SAAS3G,CAAE,EACrB6H,EAAO,KAAK,WAAa,KAAK,WAAWlB,EAAI3G,EAAI6H,CAAI,CAC1D,CACH,EACAgmC,GAAkB,UAAU,WAAa,UAAuB,CAC9D,GAAI,UAAU,SAAW,EACvB,KAAK,QAAU,WACN,UAAU,SAAW,EAAG,CACjC,IAAIlnC,EAAK,UAAU,CAAC,EAChB3G,EAAK,UAAU,CAAC,EACpB,KAAK,IAAI,CAAC,EAAE,cAAc2G,CAAE,EAC5B,KAAK,IAAI,CAAC,EAAE,cAAc3G,CAAE,EAC5B,KAAK,UAAY2G,EAAG,SAAS3G,CAAE,EAC/B,KAAK,QAAU,EACnB,SAAa,UAAU,SAAW,EAAG,CACjC,IAAI8mB,EAAO,UAAU,CAAC,EAClBhkB,EAAO,UAAU,CAAC,EAClB7T,EAAW,UAAU,CAAC,EAC1B,KAAK,IAAI,CAAC,EAAE,cAAc63B,CAAI,EAC9B,KAAK,IAAI,CAAC,EAAE,cAAchkB,CAAI,EAC9B,KAAK,UAAY7T,EACjB,KAAK,QAAU,EAChB,CACH,EACA4+C,GAAkB,UAAU,YAAc,UAAwB,CAChE,OAAO,KAAK,SACd,EACAA,GAAkB,UAAU,WAAa,UAAuB,CAC9D,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAIzU,EAAS,UAAU,CAAC,EACxB,KAAK,WAAWA,EAAO,IAAI,CAAC,EAAGA,EAAO,IAAI,CAAC,CAAC,CAChD,SAAa,UAAU,SAAW,EAAG,CACjC,IAAIzyB,EAAK,UAAU,CAAC,EAChB3G,EAAK,UAAU,CAAC,EACpB,GAAI,KAAK,QACP,YAAK,WAAW2G,EAAI3G,CAAE,EACf,KAET,IAAI6H,EAAOlB,EAAG,SAAS3G,CAAE,EACrB6H,EAAO,KAAK,WAAa,KAAK,WAAWlB,EAAI3G,EAAI6H,CAAI,CAC1D,CACH,EACAgmC,GAAkB,UAAU,YAAc,UAAwB,CAChE,MAAO,CAAE,CACX,EACAA,GAAkB,UAAU,SAAW,UAAqB,CAC1D,OAAOA,EACT,EAEA,IAAIC,GAAwB,UAAkC,GAE9DA,GAAsB,UAAU,YAAc,UAAwB,CACpE,MAAO,CAAE,CACX,EACAA,GAAsB,UAAU,SAAW,UAAqB,CAC9D,OAAOA,EACT,EACAA,GAAsB,gBAAkB,UAA4B,CAClE,GAAI,UAAU,CAAC,YAAaD,IAAsB,UAAU,CAAC,YAAaj3B,GAAc,UAAU,CAAC,YAAa1e,EAM9G,QALIhH,EAAO,UAAU,CAAC,EAClB6W,EAAK,UAAU,CAAC,EAChBqxB,EAAS,UAAU,CAAC,EACpBvrC,EAASqD,EAAK,iBACd68C,EAAc,IAAIhb,EACbrhC,EAAI,EAAGA,EAAI7D,EAAO,OAAS,EAAG6D,IAAK,CAC1Cq8C,EAAY,eAAelgD,EAAO6D,CAAC,EAAG7D,EAAO6D,EAAI,CAAC,CAAC,EACnD,IAAI+hC,EAAYsa,EAAY,aAAahmC,CAAE,EAC3CqxB,EAAO,WAAW3F,EAAW1rB,CAAE,CAChC,SACQ,UAAU,CAAC,YAAa8lC,IAAsB,UAAU,CAAC,YAAal0B,IAAW,UAAU,CAAC,YAAazhB,EAAa,CAC/H,IAAIqiB,EAAO,UAAU,CAAC,EAClByzB,EAAO,UAAU,CAAC,EAClBC,EAAW,UAAU,CAAC,EAC1BH,GAAsB,gBAAgBvzB,EAAK,gBAAe,EAAIyzB,EAAMC,CAAQ,EAC5E,QAAS3iC,EAAM,EAAGA,EAAMiP,EAAK,mBAAkB,EAAIjP,IACjDwiC,GAAsB,gBAAgBvzB,EAAK,iBAAiBjP,CAAG,EAAG0iC,EAAMC,CAAQ,CAEnF,SAAU,UAAU,CAAC,YAAaJ,IAAsB,UAAU,CAAC,YAAa5gC,GAAY,UAAU,CAAC,YAAa/U,EAAa,CAChI,IAAItL,EAAO,UAAU,CAAC,EAClBshD,EAAO,UAAU,CAAC,EAClBC,EAAW,UAAU,CAAC,EAC1B,GAAIvhD,aAAgBgqB,EAClBk3B,GAAsB,gBAAgBlhD,EAAMshD,EAAMC,CAAQ,UACjDvhD,aAAgB+sB,GACzBm0B,GAAsB,gBAAgBlhD,EAAMshD,EAAMC,CAAQ,UACjDvhD,aAAgBmoB,GAEzB,QADIW,EAAK9oB,EACAujB,EAAM,EAAGA,EAAMuF,EAAG,iBAAgB,EAAIvF,IAAO,CACpD,IAAIzb,EAAIghB,EAAG,aAAavF,CAAG,EAC3B29B,GAAsB,gBAAgBp5C,EAAGw5C,EAAMC,CAAQ,CACxD,MAEDA,EAAS,WAAWvhD,EAAK,cAAe,EAAEshD,CAAI,CAEjD,SAAU,UAAU,CAAC,YAAaL,IAAsB,UAAU,CAAC,YAAa9a,GAAe,UAAU,CAAC,YAAa76B,EAAa,CACnI,IAAIk2C,EAAU,UAAU,CAAC,EACrBC,EAAO,UAAU,CAAC,EAClBC,EAAW,UAAU,CAAC,EACtBC,GAAcH,EAAQ,aAAaC,CAAI,EAC3CC,EAAS,WAAWC,GAAaF,CAAI,CACtC,CACH,EAEA,IAAIG,GAAmC,SAA2CrN,EAAW,CAC3F,KAAK,WAAa,IAAI0M,GACtB,KAAK,WAAa1M,GAAa,IACjC,EAEIsN,GAAqB,CAAE,uBAAwB,CAAE,aAAc,IAAO,0BAA2B,CAAE,aAAc,EAAI,GACzHD,GAAiC,UAAU,2BAA6B,SAAqCnN,EAAO,CAClH,IAAIqN,EAAa,IAAIC,GAA0B,KAAK,UAAU,EAC9DtN,EAAM,MAAMqN,CAAU,EACtB,KAAK,WAAW,WAAWA,EAAW,oBAAqB,CAAA,CAC7D,EACAF,GAAiC,UAAU,yBAA2B,SAAmCnN,EAAO,CAC9G,IAAIqN,EAAa,IAAIE,GAAuB,KAAK,UAAU,EAC3DvN,EAAM,MAAMqN,CAAU,EACtB,KAAK,WAAW,WAAWA,EAAW,oBAAqB,CAAA,CAC7D,EACAF,GAAiC,UAAU,aAAe,SAAuBK,EAAa,CAC5F,YAAK,yBAAyBA,CAAW,EACzC,KAAK,2BAA2BA,CAAW,EACpC,KAAK,WAAW,YAAa,CACtC,EACAL,GAAiC,UAAU,kBAAoB,UAA8B,CAC3F,OAAO,KAAK,UACd,EACAA,GAAiC,UAAU,YAAc,UAAwB,CAC/E,MAAO,CAAE,CACX,EACAA,GAAiC,UAAU,SAAW,UAAqB,CACzE,OAAOA,EACT,EACAC,GAAmB,uBAAuB,IAAM,UAAY,CAAE,OAAOG,EAAsB,EAC3FH,GAAmB,0BAA0B,IAAM,UAAY,CAAE,OAAOE,EAAyB,EAEjG,OAAO,iBAAkBH,GAAkCC,IAE3D,IAAIG,GAAyB,SAAiChiD,EAAM,CAClE,KAAK,WAAa,IAAIihD,GACtB,KAAK,WAAa,IAAIA,GACtB,KAAK,MAAQjhD,GAAQ,IACvB,EACAgiD,GAAuB,UAAU,OAAS,SAAiB7mC,EAAI,CAC7D,KAAK,WAAW,aAChB+lC,GAAsB,gBAAgB,KAAK,MAAO/lC,EAAI,KAAK,UAAU,EACrE,KAAK,WAAW,WAAW,KAAK,UAAU,CAC5C,EACA6mC,GAAuB,UAAU,oBAAsB,UAAgC,CACrF,OAAO,KAAK,UACd,EACAA,GAAuB,UAAU,YAAc,UAAwB,CACrE,MAAO,CAAC9gC,EAAgB,CAC1B,EACA8gC,GAAuB,UAAU,SAAW,UAAqB,CAC/D,OAAOA,EACT,EAEA,IAAID,GAA4B,SAAoC/hD,EAAM,CACxE,KAAK,WAAa,IAAIihD,GACtB,KAAK,WAAa,IAAIA,GACtB,KAAK,MAAQjhD,GAAQ,IACvB,EACA+hD,GAA0B,UAAU,OAAS,SAAiB75B,EAAKra,EAAO,CACxE,GAAIA,IAAU,EAAK,OAAO,KAC1B,IAAIkM,EAAKmO,EAAI,cAAcra,EAAQ,CAAC,EAChCuF,EAAK8U,EAAI,cAAcra,CAAK,EAC5Bq0C,EAAQ,IAAI52C,GAAYyO,EAAG,EAAI3G,EAAG,GAAK,GAAI2G,EAAG,EAAI3G,EAAG,GAAK,CAAC,EAC/D,KAAK,WAAW,aAChB8tC,GAAsB,gBAAgB,KAAK,MAAOgB,EAAO,KAAK,UAAU,EACxE,KAAK,WAAW,WAAW,KAAK,UAAU,CAC5C,EACAH,GAA0B,UAAU,OAAS,UAAmB,CAC9D,MAAO,EACT,EACAA,GAA0B,UAAU,kBAAoB,UAA8B,CACpF,MAAO,EACT,EACAA,GAA0B,UAAU,oBAAsB,UAAgC,CACxF,OAAO,KAAK,UACd,EACAA,GAA0B,UAAU,YAAc,UAAwB,CACxE,MAAO,CAAC95B,EAAwB,CAClC,EACA85B,GAA0B,UAAU,SAAW,UAAqB,CAClE,OAAOA,EACT,EAEA,IAAII,GAAmB,SAA2BC,EAAO,CACvD,KAAK,OAASA,GAAS,IACzB,EACAD,GAAiB,UAAU,OAAS,SAAiBniD,EAAM,CACrDA,aAAgB+sB,IAAW,KAAK,OAAO,IAAI/sB,CAAI,CACrD,EACAmiD,GAAiB,UAAU,YAAc,UAAwB,CAC/D,MAAO,CAACn6B,EAAc,CACxB,EACAm6B,GAAiB,UAAU,SAAW,UAAqB,CACzD,OAAOA,EACT,EACAA,GAAiB,YAAc,UAAwB,CACrD,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAIniD,EAAO,UAAU,CAAC,EACtB,OAAOmiD,GAAiB,YAAYniD,EAAM,IAAIgiB,CAAW,CAC7D,SAAa,UAAU,SAAW,EAAG,CACjC,IAAI4H,EAAS,UAAU,CAAC,EACpB8f,EAAO,UAAU,CAAC,EACtB,OAAI9f,aAAkBmD,GACpB2c,EAAK,IAAI9f,CAAM,EACNA,aAAkBzB,IAC3ByB,EAAO,MAAM,IAAIu4B,GAAiBzY,CAAI,CAAC,EAElCA,CACR,CACH,EAEA,IAAI2Y,GAA2B,UAAqC,CAGlE,GAFA,KAAK,OAAS,KACd,KAAK,sBAAwB,GACzB,UAAU,SAAW,EAAG,CAC1B,IAAI9oC,EAAQ,UAAU,CAAC,EACvB,KAAK,OAASA,CAClB,SAAa,UAAU,SAAW,EAAG,CACjC,IAAI+oC,EAAU,UAAU,CAAC,EACrBC,EAAuB,UAAU,CAAC,EACtC,KAAK,OAASD,EACd,KAAK,sBAAwBC,CAC9B,CACH,EACAF,GAAyB,UAAU,OAAS,SAAiBriD,EAAM,CACjE,GAAI,KAAK,uBAAyBA,aAAgBquB,GAAY,CAC5D,IAAI/pB,EAAOtE,EAAK,WAAU,EAAG,iBAAiBA,EAAK,sBAAqB,CAAE,EAC1E,YAAK,OAAO,IAAIsE,CAAI,EACb,IACR,CACGtE,aAAgBgqB,GAAc,KAAK,OAAO,IAAIhqB,CAAI,CACxD,EACAqiD,GAAyB,UAAU,qBAAuB,SAA+BE,EAAsB,CAC7G,KAAK,sBAAwBA,CAC/B,EACAF,GAAyB,UAAU,YAAc,UAAwB,CACvE,MAAO,CAACjiC,EAAuB,CACjC,EACAiiC,GAAyB,UAAU,SAAW,UAAqB,CACjE,OAAOA,EACT,EACAA,GAAyB,YAAc,UAAwB,CAC7D,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAIriD,EAAO,UAAU,CAAC,EACtB,OAAOA,EAAK,aAAa,cAAcqiD,GAAyB,SAASriD,CAAI,CAAC,CAClF,SAAa,UAAU,SAAW,EAAG,CACjC,IAAI4pB,EAAS,UAAU,CAAC,EACpB44B,EAAoB,UAAU,CAAC,EACnC,OAAO54B,EAAO,WAAU,EAAG,cAAcy4B,GAAyB,SAASz4B,EAAQ44B,CAAiB,CAAC,CACtG,CACH,EACAH,GAAyB,SAAW,UAAqB,CACvD,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAIriD,EAAO,UAAU,CAAC,EACtB,OAAOqiD,GAAyB,SAASriD,EAAM,EAAK,CACxD,SAAa,UAAU,SAAW,GAC9B,GAAIgN,EAAa,UAAU,CAAC,EAAG0U,EAAU,GAAK1U,EAAa,UAAU,CAAC,EAAG0U,EAAU,EAAG,CAGpF,QAFI+gC,EAAQ,UAAU,CAAC,EACnBH,EAAU,UAAU,CAAC,EAChB,EAAIG,EAAM,SAAQ,EAAI,EAAE,WAAY,CAC3C,IAAI36C,EAAI,EAAE,OACVu6C,GAAyB,SAASv6C,EAAGw6C,CAAO,CAC7C,CACD,OAAOA,CACb,SAAe,UAAU,CAAC,YAAajiC,GAAY,OAAO,UAAU,CAAC,GAAM,UAAW,CAChF,IAAIuJ,EAAS,UAAU,CAAC,EACpB44B,EAAoB,UAAU,CAAC,EAC/BjpC,EAAQ,IAAIyI,EAChB,OAAA4H,EAAO,MAAM,IAAIy4B,GAAyB9oC,EAAOipC,CAAiB,CAAC,EAC5DjpC,CACb,SAAe,UAAU,CAAC,YAAa8G,GAAYrT,EAAa,UAAU,CAAC,EAAG0U,EAAU,EAAG,CACrF,IAAIghC,EAAS,UAAU,CAAC,EACpBC,EAAU,UAAU,CAAC,EACzB,OAAID,aAAkB14B,EACpB24B,EAAQ,IAAID,CAAM,EAElBA,EAAO,MAAM,IAAIL,GAAyBM,CAAO,CAAC,EAE7CA,CACR,UACQ,UAAU,SAAW,GAC9B,GAAI,OAAO,UAAU,CAAC,GAAM,WAAc31C,EAAa,UAAU,CAAC,EAAG0U,EAAU,GAAK1U,EAAa,UAAU,CAAC,EAAG0U,EAAU,EAAI,CAI3H,QAHIkhC,EAAU,UAAU,CAAC,EACrBC,EAAU,UAAU,CAAC,EACrBC,EAAsB,UAAU,CAAC,EAC5BpkC,EAAMkkC,EAAQ,SAAQ,EAAIlkC,EAAI,WAAY,CACjD,IAAI8B,EAAM9B,EAAI,OACd2jC,GAAyB,SAAS7hC,EAAKqiC,EAASC,CAAmB,CACpE,CACD,OAAOD,CACR,SAAU,OAAO,UAAU,CAAC,GAAM,WAAc,UAAU,CAAC,YAAaxiC,GAAYrT,EAAa,UAAU,CAAC,EAAG0U,EAAU,EAAI,CAC5H,IAAIqhC,EAAS,UAAU,CAAC,EACpBC,EAAU,UAAU,CAAC,EACrBC,EAAsB,UAAU,CAAC,EACrC,OAAAF,EAAO,MAAM,IAAIV,GAAyBW,EAASC,CAAmB,CAAC,EAChED,CACR,EAEL,EAEA,IAAIE,GAAe,UAAyB,CAI1C,GAHA,KAAK,cAAgB/hC,GAAiB,sBACtC,KAAK,MAAQ,KACb,KAAK,eAAiB,KAClB,UAAU,SAAW,GAAW,GAAI,UAAU,SAAW,EAAG,CAC9D,IAAIgiC,EAAe,UAAU,CAAC,EAC9B,GAAIA,IAAiB,KAAQ,MAAM,IAAIv4C,EAAyB,uBAAuB,EACvF,KAAK,cAAgBu4C,CACtB,EACH,EACAD,GAAa,UAAU,eAAiB,UAA2B,CAC/D,IAAIpqC,EAAS,KAEf,GAAI,UAAU,CAAC,YAAaxN,GAAc,UAAU,CAAC,YAAayhB,GAAS,CACzE,IAAIhX,EAAI,UAAU,CAAC,EACf4X,EAAO,UAAU,CAAC,EACtB,GAAIA,EAAK,QAAO,EAAM,OAAO9gB,EAAS,SACtC,IAAI8M,EAAQgU,EAAK,kBACby1B,EAAW,KAAK,oBAAoBrtC,EAAG4D,CAAK,EAChD,GAAIypC,IAAav2C,EAAS,SAAY,OAAOA,EAAS,SACtD,GAAIu2C,IAAav2C,EAAS,SAAY,OAAOA,EAAS,SACtD,QAAS/H,EAAI,EAAGA,EAAI6oB,EAAK,mBAAkB,EAAI7oB,IAAK,CAClD,IAAImqB,EAAOtB,EAAK,iBAAiB7oB,CAAC,EAC9Bu+C,EAAUvqC,EAAO,oBAAoB/C,EAAGkZ,CAAI,EAChD,GAAIo0B,IAAYx2C,EAAS,SAAY,OAAOA,EAAS,SACrD,GAAIw2C,IAAYx2C,EAAS,SAAY,OAAOA,EAAS,QACtD,CACD,OAAOA,EAAS,QACpB,SAAa,UAAU,CAAC,YAAavB,GAAc,UAAU,CAAC,YAAa0e,EAAY,CACnF,IAAIzL,EAAM,UAAU,CAAC,EACjBnY,EAAI,UAAU,CAAC,EACnB,GAAI,CAACA,EAAE,sBAAsB,WAAWmY,CAAG,EAAK,OAAO1R,EAAS,SAChE,IAAIsO,EAAK/U,EAAE,iBACX,MAAI,CAACA,EAAE,aACDmY,EAAI,OAAOpD,EAAG,CAAC,CAAC,GAAKoD,EAAI,OAAOpD,EAAGA,EAAG,OAAS,CAAC,CAAC,GAC5CtO,EAAS,SAGhB8O,EAAa,SAAS4C,EAAKpD,CAAE,EAAYtO,EAAS,SAC/CA,EAAS,QACpB,SAAa,UAAU,CAAC,YAAavB,GAAc,UAAU,CAAC,YAAauhB,GAAO,CAC9E,IAAIy2B,EAAM,UAAU,CAAC,EACjBlC,EAAO,UAAU,CAAC,EAClBmC,EAAUnC,EAAK,gBACnB,OAAImC,EAAQ,SAASD,CAAG,EAAYz2C,EAAS,SACtCA,EAAS,QACjB,CACH,EACAq2C,GAAa,UAAU,oBAAsB,SAA8BntC,EAAG3U,EAAM,CAClF,OAAKA,EAAK,sBAAsB,WAAW2U,CAAC,EACrC4F,EAAa,kBAAkB5F,EAAG3U,EAAK,eAAc,CAAE,EADNyL,EAAS,QAEnE,EACAq2C,GAAa,UAAU,WAAa,SAAqBntC,EAAG/V,EAAM,CAChE,OAAO,KAAK,OAAO+V,EAAG/V,CAAI,IAAM6M,EAAS,QAC3C,EACAq2C,GAAa,UAAU,mBAAqB,SAA6B9sB,EAAK,CACxEA,IAAQvpB,EAAS,WAAY,KAAK,MAAQ,IAC1CupB,IAAQvpB,EAAS,UAAY,KAAK,gBACxC,EACAq2C,GAAa,UAAU,gBAAkB,SAA0BntC,EAAG/V,EAAM,CACxE,IAAI8Y,EAAS,KAKf,GAHI9Y,aAAgB6sB,IAClB,KAAK,mBAAmB,KAAK,eAAe9W,EAAG/V,CAAI,CAAC,EAElDA,aAAgBgqB,EAClB,KAAK,mBAAmB,KAAK,eAAejU,EAAG/V,CAAI,CAAC,UAC3CA,aAAgB+sB,GACzB,KAAK,mBAAmB,KAAK,eAAehX,EAAG/V,CAAI,CAAC,UAC3CA,aAAgBspB,GAEzB,QADIk6B,EAAKxjD,EACA8E,EAAI,EAAGA,EAAI0+C,EAAG,iBAAgB,EAAI1+C,IAAK,CAC9C,IAAIsB,EAAIo9C,EAAG,aAAa1+C,CAAC,EACzBgU,EAAO,mBAAmBA,EAAO,eAAe/C,EAAG3P,CAAC,CAAC,CACtD,SACQpG,aAAgBwuB,GAEzB,QADIi1B,EAAQzjD,EACH0e,EAAM,EAAGA,EAAM+kC,EAAM,iBAAgB,EAAI/kC,IAAO,CACvD,IAAIiP,EAAO81B,EAAM,aAAa/kC,CAAG,EACjC5F,EAAO,mBAAmBA,EAAO,eAAe/C,EAAG4X,CAAI,CAAC,CACzD,SACQ3tB,aAAgBmoB,GAEzB,QADIstB,EAAQ,IAAIF,GAA2Bv1C,CAAI,EACxCy1C,EAAM,WAAW,CACtB,IAAIC,EAAKD,EAAM,OACXC,IAAO11C,GAAQ8Y,EAAO,gBAAgB/C,EAAG2/B,CAAE,CAChD,CAEL,EACAwN,GAAa,UAAU,OAAS,SAAiBntC,EAAG/V,EAAM,CACxD,OAAIA,EAAK,QAAO,EAAa6M,EAAS,SAClC7M,aAAgBgqB,EACX,KAAK,eAAejU,EAAG/V,CAAI,EACzBA,aAAgB+sB,GAClB,KAAK,eAAehX,EAAG/V,CAAI,GAEpC,KAAK,MAAQ,GACb,KAAK,eAAiB,EACtB,KAAK,gBAAgB+V,EAAG/V,CAAI,EACxB,KAAK,cAAc,aAAa,KAAK,cAAc,EAAY6M,EAAS,SACxE,KAAK,eAAiB,GAAK,KAAK,MAAgBA,EAAS,SACtDA,EAAS,SAClB,EACAq2C,GAAa,UAAU,YAAc,UAAwB,CAC3D,MAAO,CAAE,CACX,EACAA,GAAa,UAAU,SAAW,UAAqB,CACrD,OAAOA,EACT,EAEA,IAAIQ,GAAmB,SAASA,GAAoB,CAIlD,GAHA,KAAK,WAAa,KAClB,KAAK,UAAY,KACjB,KAAK,IAAM,KACP,UAAU,SAAW,EAAG,CAC1B,IAAIC,EAAY,UAAU,CAAC,EACvBxoC,EAAK,UAAU,CAAC,EACpBuoC,EAAiB,KAAK,KAAMC,EAAWD,EAAiB,YAAavoC,CAAE,CAC3E,SAAa,UAAU,SAAW,EAAG,CACjC,IAAIyoC,EAAc,UAAU,CAAC,EACzB9F,EAAW,UAAU,CAAC,EACtBsD,EAAO,UAAU,CAAC,EACtB,KAAK,WAAawC,EAClB,KAAK,UAAY9F,EACjB,KAAK,IAAMsD,CACZ,CACH,EAEIyC,GAAqB,CAAE,YAAa,CAAE,aAAc,EAAM,CAAA,EAC9DH,GAAiB,UAAU,aAAe,UAAyB,CACjE,OAAO,KAAK,YAAcA,GAAiB,WAC7C,EACAA,GAAiB,UAAU,cAAgB,UAA0B,CACnE,OAAO,KAAK,GACd,EACAA,GAAiB,UAAU,qBAAuB,UAAiC,CACjF,OAAO,KAAK,UACd,EACAA,GAAiB,UAAU,gBAAkB,UAA4B,CACvE,OAAO,KAAK,SACd,EACAA,GAAiB,UAAU,YAAc,UAAwB,CAC/D,MAAO,CAAE,CACX,EACAA,GAAiB,UAAU,SAAW,UAAqB,CACzD,OAAOA,EACT,EACAG,GAAmB,YAAY,IAAM,UAAY,CAAE,MAAO,EAAE,EAE5D,OAAO,iBAAkBH,GAAkBG,IAE3C,IAAIC,GAAiB,SAAyBxkC,EAAK,CACjD,KAAK,KAAOA,GAAO,IACrB,EACAwkC,GAAe,UAAU,OAAS,SAAiB9jD,EAAM,CACnDA,aAAgB6sB,IAAS,KAAK,KAAK,IAAI7sB,CAAI,CACjD,EACA8jD,GAAe,UAAU,YAAc,UAAwB,CAC7D,MAAO,CAAC97B,EAAc,CACxB,EACA87B,GAAe,UAAU,SAAW,UAAqB,CACvD,OAAOA,EACT,EACAA,GAAe,UAAY,UAAsB,CAC/C,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAI9jD,EAAO,UAAU,CAAC,EACtB,OAAIA,aAAgB6sB,GACXqR,GAAY,cAAcl+B,CAAI,EAEhC8jD,GAAe,UAAU9jD,EAAM,IAAIgiB,CAAW,CACzD,SAAa,UAAU,SAAW,EAAG,CACjC,IAAI4H,EAAS,UAAU,CAAC,EACpB8f,EAAO,UAAU,CAAC,EACtB,OAAI9f,aAAkBiD,GACpB6c,EAAK,IAAI9f,CAAM,EACNA,aAAkBzB,IAC3ByB,EAAO,MAAM,IAAIk6B,GAAepa,CAAI,CAAC,EAEhCA,CACR,CACH,EAEA,IAAIqa,GAAiC,UAA2C,CAC9E,KAAK,WAAa,KAClB,IAAIC,EAAY,UAAU,CAAC,EAC3B,KAAK,WAAaA,CACpB,EACAD,GAA+B,UAAU,OAAS,SAAiB/jD,EAAM,EACnEA,aAAgB6sB,IAAS7sB,aAAgBgqB,GAAchqB,aAAgB+sB,KAAW,KAAK,WAAW,IAAI,IAAI22B,GAAiB1jD,EAAM,EAAGA,EAAK,cAAa,CAAE,CAAC,CAC/J,EACA+jD,GAA+B,UAAU,YAAc,UAAwB,CAC7E,MAAO,CAAC/7B,EAAc,CACxB,EACA+7B,GAA+B,UAAU,SAAW,UAAqB,CACvE,OAAOA,EACT,EACAA,GAA+B,aAAe,SAAuB/jD,EAAM,CACzE,IAAIgkD,EAAY,IAAIhiC,EACpB,OAAAhiB,EAAK,MAAM,IAAI+jD,GAA+BC,CAAS,CAAC,EACjDA,CACT,EAEA,IAAIC,GAAa,UAAuB,CAMtC,GALA,KAAK,MAAQ,KACb,KAAK,mBAAqB,EAC1B,KAAK,WAAa,IAAIf,GACtB,KAAK,qBAAuB,KAC5B,KAAK,aAAen4C,EAAO,UACvB,UAAU,SAAW,EAAG,CAC1B,IAAIm5C,EAAK,UAAU,CAAC,EAChBC,EAAK,UAAU,CAAC,EACpB,KAAK,MAAQ,CAACD,EAAIC,CAAE,EACpB,KAAK,mBAAqB,CAC9B,SAAa,UAAU,SAAW,EAAG,CACjC,IAAIC,EAAO,UAAU,CAAC,EAClBC,EAAO,UAAU,CAAC,EAClBC,EAAoB,UAAU,CAAC,EACnC,KAAK,MAAQ,IAAI,MAAM,CAAC,EAAE,KAAK,IAAI,EACnC,KAAK,MAAM,CAAC,EAAIF,EAChB,KAAK,MAAM,CAAC,EAAIC,EAChB,KAAK,mBAAqBC,CAC3B,CACH,EACAL,GAAW,UAAU,2BAA6B,UAAuC,CACrF,IAAInrC,EAAS,KAEf,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAIyrC,EAAY,IAAI,MAAM,CAAC,EAAE,KAAK,IAAI,EAEtC,GADA,KAAK,2BAA2B,EAAGA,CAAS,EACxC,KAAK,cAAgB,KAAK,mBAAsB,OAAO,KAC3D,KAAK,2BAA2B,EAAGA,CAAS,CAChD,SAAa,UAAU,SAAW,EAAG,CACjC,IAAIC,EAAgB,UAAU,CAAC,EAC3BC,EAAc,UAAU,CAAC,EACzBC,EAAiB,EAAIF,EACrBG,EAAQxC,GAAiB,YAAY,KAAK,MAAMqC,CAAa,CAAC,EAClE,GAAIG,EAAM,KAAM,EAAG,EAAG,CACpB,IAAIC,EAAab,GAA+B,aAAa,KAAK,MAAMW,CAAc,CAAC,EAEvF,GADA,KAAK,2BAA2BE,EAAYD,EAAOF,CAAW,EAC1D,KAAK,cAAgB,KAAK,mBAC5B,YAAK,qBAAqBC,CAAc,EAAID,EAAY,CAAC,EACzD,KAAK,qBAAqBD,CAAa,EAAIC,EAAY,CAAC,EACjD,IAEV,CACL,SAAa,UAAU,SAAW,GAC9B,GAAI,UAAU,CAAC,YAAa,OAAUz3C,EAAa,UAAU,CAAC,EAAG6U,EAAI,GAAK7U,EAAa,UAAU,CAAC,EAAG6U,EAAI,GAIvG,QAHIgjC,EAAO,UAAU,CAAC,EAClBC,EAAU,UAAU,CAAC,EACrBC,EAAc,UAAU,CAAC,EACpBjgD,EAAI,EAAGA,EAAI+/C,EAAK,KAAI,EAAI//C,IAE/B,QADIsxB,EAAMyuB,EAAK,IAAI//C,CAAC,EACXzD,EAAI,EAAGA,EAAIyjD,EAAQ,KAAI,EAAIzjD,IAElC,GADAyX,EAAO,2BAA2Bsd,EAAK0uB,EAAQ,IAAIzjD,CAAC,EAAG0jD,CAAW,EAC9DjsC,EAAO,cAAgBA,EAAO,mBAAsB,OAAO,aAG1D,UAAU,CAAC,YAAa,OAAU,UAAU,CAAC,YAAa4qC,IAAoB,UAAU,CAAC,YAAa32B,GAAU,CACzH,IAAIi4B,EAAQ,UAAU,CAAC,EACnBr3B,EAAO,UAAU,CAAC,EAClBs3B,EAAc,UAAU,CAAC,EACzB9pC,EAAK6pC,EAAM,gBACf,GAAIn4C,EAAS,WAAa,KAAK,WAAW,OAAOsO,EAAIwS,CAAI,EACvD,YAAK,aAAe,EACpBs3B,EAAY,CAAC,EAAID,EACjBC,EAAY,CAAC,EAAI,IAAIvB,GAAiB/1B,EAAMxS,CAAE,EAEvC,IAEV,EAEL,EACA8oC,GAAW,UAAU,8BAAgC,SAAwC1qC,EAAOxY,EAAQmkD,EAAS,CAGnH,QAFMpsC,EAAS,KAENhU,EAAI,EAAGA,EAAIyU,EAAM,KAAI,EAAIzU,IAEhC,QADIR,EAAOiV,EAAM,IAAIzU,CAAC,EACbzD,EAAI,EAAGA,EAAIN,EAAO,KAAI,EAAIM,IAAK,CACtC,IAAI8Z,EAAKpa,EAAO,IAAIM,CAAC,EAErB,GADAyX,EAAO,mBAAmBxU,EAAM6W,EAAI+pC,CAAO,EACvCpsC,EAAO,cAAgBA,EAAO,mBAAsB,OAAO,IAChE,CAEL,EACAmrC,GAAW,UAAU,qBAAuB,UAAiC,CAC3E,IAAIiB,EAAU,IAAI,MAAM,CAAC,EAAE,KAAK,IAAI,EAChCC,EAAS9C,GAAyB,SAAS,KAAK,MAAM,CAAC,CAAC,EACxD+C,EAAS/C,GAAyB,SAAS,KAAK,MAAM,CAAC,CAAC,EACxDpF,EAAO6G,GAAe,UAAU,KAAK,MAAM,CAAC,CAAC,EAC7C3+B,EAAO2+B,GAAe,UAAU,KAAK,MAAM,CAAC,CAAC,EAajD,GAZA,KAAK,wBAAwBqB,EAAQC,EAAQF,CAAO,EACpD,KAAK,kBAAkBA,EAAS,EAAK,EACjC,KAAK,cAAgB,KAAK,qBAC9BA,EAAQ,CAAC,EAAI,KACbA,EAAQ,CAAC,EAAI,KACb,KAAK,8BAA8BC,EAAQhgC,EAAM+/B,CAAO,EACxD,KAAK,kBAAkBA,EAAS,EAAK,EACjC,KAAK,cAAgB,KAAK,sBAC9BA,EAAQ,CAAC,EAAI,KACbA,EAAQ,CAAC,EAAI,KACb,KAAK,8BAA8BE,EAAQnI,EAAMiI,CAAO,EACxD,KAAK,kBAAkBA,EAAS,EAAI,EAChC,KAAK,cAAgB,KAAK,oBAAsB,OAAO,KAC3DA,EAAQ,CAAC,EAAI,KACbA,EAAQ,CAAC,EAAI,KACb,KAAK,yBAAyBjI,EAAM93B,EAAM+/B,CAAO,EACjD,KAAK,kBAAkBA,EAAS,EAAK,CACvC,EACAjB,GAAW,UAAU,iBAAmB,UAA6B,CACnE,YAAK,mBAAkB,EAChB,KAAK,oBACd,EACAA,GAAW,UAAU,kBAAoB,SAA4BiB,EAASG,EAAM,CAClF,GAAIH,EAAQ,CAAC,IAAM,KAAQ,OAAO,KAC9BG,GACF,KAAK,qBAAqB,CAAC,EAAIH,EAAQ,CAAC,EACxC,KAAK,qBAAqB,CAAC,EAAIA,EAAQ,CAAC,IAExC,KAAK,qBAAqB,CAAC,EAAIA,EAAQ,CAAC,EACxC,KAAK,qBAAqB,CAAC,EAAIA,EAAQ,CAAC,EAE5C,EACAjB,GAAW,UAAU,cAAgB,UAA0B,CAC7D,KAAK,mBAAkB,EACvB,IAAIqB,EAAa,CAAC,KAAK,qBAAqB,CAAC,EAAE,gBAAiB,KAAK,qBAAqB,CAAC,EAAE,cAAe,CAAA,EAC5G,OAAOA,CACT,EACArB,GAAW,UAAU,mBAAqB,UAA+B,CACrE,IAAInrC,EAAS,KAEf,GAAI,UAAU,SAAW,EAAG,CAI1B,GAHI,KAAK,uBAAyB,OAClC,KAAK,qBAAuB,IAAI,MAAM,CAAC,EAAE,KAAK,IAAI,EAClD,KAAK,2BAA0B,EAC3B,KAAK,cAAgB,KAAK,oBAAsB,OAAO,KAC3D,KAAK,qBAAoB,CAC7B,SAAa,UAAU,SAAW,GAC9B,GAAI,UAAU,CAAC,YAAa,OAAU,UAAU,CAAC,YAAakR,GAAc,UAAU,CAAC,YAAa6C,GAAQ,CAC1G,IAAIvoB,EAAO,UAAU,CAAC,EAClB6W,EAAK,UAAU,CAAC,EAChB+pC,EAAU,UAAU,CAAC,EACzB,GAAI5gD,EAAK,sBAAsB,SAAS6W,EAAG,oBAAqB,CAAA,EAAI,KAAK,aAAgB,OAAO,KAGhG,QAFIoqC,EAASjhD,EAAK,iBACdV,EAAQuX,EAAG,gBACNrW,EAAI,EAAGA,EAAIygD,EAAO,OAAS,EAAGzgD,IAAK,CAC1C,IAAImW,EAAOU,EAAa,kBAAkB/X,EAAO2hD,EAAOzgD,CAAC,EAAGygD,EAAOzgD,EAAI,CAAC,CAAC,EACzE,GAAImW,EAAOnC,EAAO,aAAc,CAC9BA,EAAO,aAAemC,EACtB,IAAIorB,EAAM,IAAIF,EAAYof,EAAOzgD,CAAC,EAAGygD,EAAOzgD,EAAI,CAAC,CAAC,EAC9C0gD,EAAkBnf,EAAI,aAAaziC,CAAK,EAC5CshD,EAAQ,CAAC,EAAI,IAAIxB,GAAiBp/C,EAAMQ,EAAG0gD,CAAe,EAC1DN,EAAQ,CAAC,EAAI,IAAIxB,GAAiBvoC,EAAI,EAAGvX,CAAK,CAC/C,CACD,GAAIkV,EAAO,cAAgBA,EAAO,mBAAsB,OAAO,IAChE,CACF,SAAU,UAAU,CAAC,YAAa,OAAU,UAAU,CAAC,YAAakR,GAAc,UAAU,CAAC,YAAaA,EAAa,CACtH,IAAIy7B,EAAQ,UAAU,CAAC,EACnBC,EAAQ,UAAU,CAAC,EACnBC,EAAY,UAAU,CAAC,EAC3B,GAAIF,EAAM,sBAAsB,SAASC,EAAM,oBAAqB,CAAA,EAAI,KAAK,aAAgB,OAAO,KAGpG,QAFIE,EAAWH,EAAM,iBACjBlhC,EAASmhC,EAAM,iBACVhnC,EAAM,EAAGA,EAAMknC,EAAS,OAAS,EAAGlnC,IAC3C,QAASrd,EAAI,EAAGA,EAAIkjB,EAAO,OAAS,EAAGljB,IAAK,CAC1C,IAAIwkD,EAASlqC,EAAa,iBAAiBiqC,EAASlnC,CAAG,EAAGknC,EAASlnC,EAAM,CAAC,EAAG6F,EAAOljB,CAAC,EAAGkjB,EAAOljB,EAAI,CAAC,CAAC,EACrG,GAAIwkD,EAAS/sC,EAAO,aAAc,CAChCA,EAAO,aAAe+sC,EACtB,IAAI9T,EAAO,IAAI5L,EAAYyf,EAASlnC,CAAG,EAAGknC,EAASlnC,EAAM,CAAC,CAAC,EACvDszB,EAAO,IAAI7L,EAAY5hB,EAAOljB,CAAC,EAAGkjB,EAAOljB,EAAI,CAAC,CAAC,EAC/CwlC,GAAYkL,EAAK,cAAcC,CAAI,EACvC2T,EAAU,CAAC,EAAI,IAAIjC,GAAiB+B,EAAO/mC,EAAKmoB,GAAU,CAAC,CAAC,EAC5D8e,EAAU,CAAC,EAAI,IAAIjC,GAAiBgC,EAAOrkD,EAAGwlC,GAAU,CAAC,CAAC,CAC3D,CACD,GAAI/tB,EAAO,cAAgBA,EAAO,mBAAsB,OAAO,IAChE,CAEJ,EAEL,EACAmrC,GAAW,UAAU,yBAA2B,SAAmC6B,EAASC,EAASb,EAAS,CAG5G,QAFMpsC,EAAS,KAENhU,EAAI,EAAGA,EAAIghD,EAAQ,KAAI,EAAIhhD,IAElC,QADI+/B,EAAMihB,EAAQ,IAAIhhD,CAAC,EACdzD,EAAI,EAAGA,EAAI0kD,EAAQ,KAAI,EAAI1kD,IAAK,CACvC,IAAI4D,EAAM8gD,EAAQ,IAAI1kD,CAAC,EACnB4Z,EAAO4pB,EAAI,cAAa,EAAG,SAAS5/B,EAAI,cAAa,CAAE,EAM3D,GALIgW,EAAOnC,EAAO,eAChBA,EAAO,aAAemC,EACtBiqC,EAAQ,CAAC,EAAI,IAAIxB,GAAiB7e,EAAK,EAAGA,EAAI,cAAa,CAAE,EAC7DqgB,EAAQ,CAAC,EAAI,IAAIxB,GAAiBz+C,EAAK,EAAGA,EAAI,cAAa,CAAE,GAE3D6T,EAAO,cAAgBA,EAAO,mBAAsB,OAAO,IAChE,CAEL,EACAmrC,GAAW,UAAU,SAAW,UAAqB,CACnD,GAAI,KAAK,MAAM,CAAC,IAAM,MAAQ,KAAK,MAAM,CAAC,IAAM,KAAQ,MAAM,IAAIr5C,EAAyB,mCAAmC,EAC9H,OAAI,KAAK,MAAM,CAAC,EAAE,QAAO,GAAM,KAAK,MAAM,CAAC,EAAE,UAAoB,GACjE,KAAK,mBAAkB,EAChB,KAAK,aACd,EACAq5C,GAAW,UAAU,wBAA0B,SAAkCkB,EAAQC,EAAQF,EAAS,CAGxG,QAFMpsC,EAAS,KAENhU,EAAI,EAAGA,EAAIqgD,EAAO,KAAI,EAAIrgD,IAEjC,QADI2gD,EAAQN,EAAO,IAAIrgD,CAAC,EACfzD,EAAI,EAAGA,EAAI+jD,EAAO,KAAI,EAAI/jD,IAAK,CACtC,IAAIqkD,EAAQN,EAAO,IAAI/jD,CAAC,EAExB,GADAyX,EAAO,mBAAmB2sC,EAAOC,EAAOR,CAAO,EAC3CpsC,EAAO,cAAgBA,EAAO,mBAAsB,OAAO,IAChE,CAEL,EACAmrC,GAAW,UAAU,YAAc,UAAwB,CACzD,MAAO,CAAE,CACX,EACAA,GAAW,UAAU,SAAW,UAAqB,CACnD,OAAOA,EACT,EACAA,GAAW,SAAW,SAAmBC,EAAIC,EAAI,CAC/C,IAAI6B,EAAS,IAAI/B,GAAWC,EAAIC,CAAE,EAClC,OAAO6B,EAAO,SAAU,CAC1B,EACA/B,GAAW,iBAAmB,SAA2BC,EAAIC,EAAI9hD,EAAU,CACzE,IAAI2jD,EAAS,IAAI/B,GAAWC,EAAIC,EAAI9hD,CAAQ,EAC5C,OAAO2jD,EAAO,SAAQ,GAAM3jD,CAC9B,EACA4hD,GAAW,cAAgB,SAAwBC,EAAIC,EAAI,CACzD,IAAI6B,EAAS,IAAI/B,GAAWC,EAAIC,CAAE,EAClC,OAAO6B,EAAO,cAAe,CAC/B,EAEA,IAAIC,GAAsB,UAA8B,CACtD,KAAK,IAAM,CAAC,IAAI36C,EAAc,IAAIA,CAAY,EAC9C,KAAK,UAAYP,EAAO,IACxB,KAAK,QAAU,EACjB,EACAk7C,GAAoB,UAAU,eAAiB,UAA2B,CACxE,OAAO,KAAK,GACd,EACAA,GAAoB,UAAU,cAAgB,SAAwBnhD,EAAG,CACvE,OAAO,KAAK,IAAIA,CAAC,CACnB,EACAmhD,GAAoB,UAAU,WAAa,UAAuB,CAChE,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAIzZ,EAAS,UAAU,CAAC,EACxB,KAAK,WAAWA,EAAO,IAAI,CAAC,EAAGA,EAAO,IAAI,CAAC,CAAC,CAChD,SAAa,UAAU,SAAW,EAAG,CACjC,IAAIzyB,EAAK,UAAU,CAAC,EAChB3G,EAAK,UAAU,CAAC,EACpB,GAAI,KAAK,QACP,YAAK,WAAW2G,EAAI3G,CAAE,EACf,KAET,IAAI6H,EAAOlB,EAAG,SAAS3G,CAAE,EACrB6H,EAAO,KAAK,WAAa,KAAK,WAAWlB,EAAI3G,EAAI6H,CAAI,CAC1D,CACH,EACAgrC,GAAoB,UAAU,WAAa,UAAuB,CAChE,GAAI,UAAU,SAAW,EACvB,KAAK,QAAU,WACN,UAAU,SAAW,EAAG,CACjC,IAAIlsC,EAAK,UAAU,CAAC,EAChB3G,EAAK,UAAU,CAAC,EACpB,KAAK,IAAI,CAAC,EAAE,cAAc2G,CAAE,EAC5B,KAAK,IAAI,CAAC,EAAE,cAAc3G,CAAE,EAC5B,KAAK,UAAY2G,EAAG,SAAS3G,CAAE,EAC/B,KAAK,QAAU,EACnB,SAAa,UAAU,SAAW,EAAG,CACjC,IAAI8mB,EAAO,UAAU,CAAC,EAClBhkB,EAAO,UAAU,CAAC,EAClB7T,EAAW,UAAU,CAAC,EAC1B,KAAK,IAAI,CAAC,EAAE,cAAc63B,CAAI,EAC9B,KAAK,IAAI,CAAC,EAAE,cAAchkB,CAAI,EAC9B,KAAK,UAAY7T,EACjB,KAAK,QAAU,EAChB,CACH,EACA4jD,GAAoB,UAAU,SAAW,UAAqB,CAC5D,OAAOnsC,GAAU,aAAa,KAAK,IAAI,CAAC,EAAG,KAAK,IAAI,CAAC,CAAC,CACxD,EACAmsC,GAAoB,UAAU,YAAc,UAAwB,CAClE,OAAO,KAAK,SACd,EACAA,GAAoB,UAAU,WAAa,UAAuB,CAChE,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAIzZ,EAAS,UAAU,CAAC,EACxB,KAAK,WAAWA,EAAO,IAAI,CAAC,EAAGA,EAAO,IAAI,CAAC,CAAC,CAChD,SAAa,UAAU,SAAW,EAAG,CACjC,IAAIzyB,EAAK,UAAU,CAAC,EAChB3G,EAAK,UAAU,CAAC,EACpB,GAAI,KAAK,QACP,YAAK,WAAW2G,EAAI3G,CAAE,EACf,KAET,IAAI6H,EAAOlB,EAAG,SAAS3G,CAAE,EACrB6H,EAAO,KAAK,WAAa,KAAK,WAAWlB,EAAI3G,EAAI6H,CAAI,CAC1D,CACH,EACAgrC,GAAoB,UAAU,YAAc,UAAwB,CAClE,MAAO,CAAE,CACX,EACAA,GAAoB,UAAU,SAAW,UAAqB,CAC5D,OAAOA,EACT,EAEA,IAAIC,GAAkB,UAA4B,GAElDA,GAAgB,UAAU,YAAc,UAAwB,CAC9D,MAAO,CAAE,CACX,EACAA,GAAgB,UAAU,SAAW,UAAqB,CACxD,OAAOA,EACT,EACAA,GAAgB,gBAAkB,UAA4B,CAC5D,GAAI,UAAU,CAAC,YAAaD,IAAwB,UAAU,CAAC,YAAaj8B,GAAc,UAAU,CAAC,YAAa1e,EAMhH,QALIhH,EAAO,UAAU,CAAC,EAClB6W,EAAK,UAAU,CAAC,EAChBqxB,EAAS,UAAU,CAAC,EACpB2U,EAAc,IAAIhb,EAClBllC,EAASqD,EAAK,iBACTQ,EAAI,EAAGA,EAAI7D,EAAO,OAAS,EAAG6D,IAAK,CAC1Cq8C,EAAY,eAAelgD,EAAO6D,CAAC,EAAG7D,EAAO6D,EAAI,CAAC,CAAC,EACnD,IAAI+hC,EAAYsa,EAAY,aAAahmC,CAAE,EAC3CqxB,EAAO,WAAW3F,EAAW1rB,CAAE,CAChC,SACQ,UAAU,CAAC,YAAa8qC,IAAwB,UAAU,CAAC,YAAal5B,IAAW,UAAU,CAAC,YAAazhB,EAAa,CACjI,IAAIqiB,EAAO,UAAU,CAAC,EAClByzB,EAAO,UAAU,CAAC,EAClBC,EAAW,UAAU,CAAC,EAC1B6E,GAAgB,gBAAgBv4B,EAAK,gBAAe,EAAIyzB,EAAMC,CAAQ,EACtE,QAAS3iC,EAAM,EAAGA,EAAMiP,EAAK,mBAAkB,EAAIjP,IACjDwnC,GAAgB,gBAAgBv4B,EAAK,iBAAiBjP,CAAG,EAAG0iC,EAAMC,CAAQ,CAE7E,SAAU,UAAU,CAAC,YAAa4E,IAAwB,UAAU,CAAC,YAAa5lC,GAAY,UAAU,CAAC,YAAa/U,EAAa,CAClI,IAAItL,EAAO,UAAU,CAAC,EAClBshD,EAAO,UAAU,CAAC,EAClBC,EAAW,UAAU,CAAC,EAC1B,GAAIvhD,aAAgBgqB,EAClBk8B,GAAgB,gBAAgBlmD,EAAMshD,EAAMC,CAAQ,UAC3CvhD,aAAgB+sB,GACzBm5B,GAAgB,gBAAgBlmD,EAAMshD,EAAMC,CAAQ,UAC3CvhD,aAAgBmoB,GAEzB,QADIW,EAAK9oB,EACAujB,EAAM,EAAGA,EAAMuF,EAAG,iBAAgB,EAAIvF,IAAO,CACpD,IAAIzb,EAAIghB,EAAG,aAAavF,CAAG,EAC3B2iC,GAAgB,gBAAgBp+C,EAAGw5C,EAAMC,CAAQ,CAClD,MAEDA,EAAS,WAAWvhD,EAAK,cAAe,EAAEshD,CAAI,CAEjD,SAAU,UAAU,CAAC,YAAa2E,IAAwB,UAAU,CAAC,YAAa9f,GAAe,UAAU,CAAC,YAAa76B,EAAa,CACrI,IAAIk2C,EAAU,UAAU,CAAC,EACrBC,EAAO,UAAU,CAAC,EAClBC,EAAW,UAAU,CAAC,EACtBC,GAAcH,EAAQ,aAAaC,CAAI,EAC3CC,EAAS,WAAWC,GAAaF,CAAI,CACtC,CACH,EAEA,IAAI0E,GAA4B,UAAsC,CACpE,KAAK,IAAM,KACX,KAAK,IAAM,KACX,KAAK,QAAU,IAAIF,GACnB,KAAK,aAAe,EACpB,IAAI/B,EAAK,UAAU,CAAC,EAChBC,EAAK,UAAU,CAAC,EACpB,KAAK,IAAMD,EACX,KAAK,IAAMC,CACb,EAEIiC,GAAqB,CAAE,uBAAwB,CAAE,aAAc,IAAO,qCAAsC,CAAE,aAAc,EAAI,GACpID,GAA0B,UAAU,eAAiB,UAA2B,CAC9E,OAAO,KAAK,QAAQ,eAAgB,CACtC,EACAA,GAA0B,UAAU,mBAAqB,SAA6BE,EAAa,CACjG,GAAIA,EAAc,GAAOA,GAAe,EAAO,MAAM,IAAIz7C,EAAyB,sCAAsC,EACxH,KAAK,aAAey7C,CACtB,EACAF,GAA0B,UAAU,QAAU,SAAkBjC,EAAIC,EAAI,CACtE,KAAK,wBAAwBD,EAAIC,EAAI,KAAK,OAAO,EACjD,KAAK,wBAAwBA,EAAID,EAAI,KAAK,OAAO,CACnD,EACAiC,GAA0B,UAAU,SAAW,UAAqB,CAClE,YAAK,QAAQ,KAAK,IAAK,KAAK,GAAG,EACxB,KAAK,QAAQ,YAAa,CACnC,EACAA,GAA0B,UAAU,wBAA0B,SAAkCG,EAActmD,EAAMwsC,EAAQ,CAC1H,IAAIsV,EAAa,IAAIyE,GAAyBvmD,CAAI,EAGlD,GAFAsmD,EAAa,MAAMxE,CAAU,EAC7BtV,EAAO,WAAWsV,EAAW,oBAAqB,CAAA,EAC9C,KAAK,aAAe,EAAG,CACzB,IAAI0E,EAAa,IAAIC,GAAqCzmD,EAAM,KAAK,YAAY,EACjFsmD,EAAa,MAAME,CAAU,EAC7Bha,EAAO,WAAWga,EAAW,oBAAqB,CAAA,CACnD,CACH,EACAL,GAA0B,UAAU,iBAAmB,UAA6B,CAClF,YAAK,wBAAwB,KAAK,IAAK,KAAK,IAAK,KAAK,OAAO,EACtD,KAAK,QAAQ,YAAa,CACnC,EACAA,GAA0B,UAAU,YAAc,UAAwB,CACxE,MAAO,CAAE,CACX,EACAA,GAA0B,UAAU,SAAW,UAAqB,CAClE,OAAOA,EACT,EACAA,GAA0B,SAAW,UAAqB,CACxD,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAIjC,EAAK,UAAU,CAAC,EAChBC,EAAK,UAAU,CAAC,EAChBlpC,EAAO,IAAIkrC,GAA0BjC,EAAIC,CAAE,EAC/C,OAAOlpC,EAAK,SAAU,CAC1B,SAAa,UAAU,SAAW,EAAG,CACjC,IAAImpC,EAAO,UAAU,CAAC,EAClBC,EAAO,UAAU,CAAC,EAClBgC,EAAc,UAAU,CAAC,EACzBR,EAAS,IAAIM,GAA0B/B,EAAMC,CAAI,EACrD,OAAAwB,EAAO,mBAAmBQ,CAAW,EAC9BR,EAAO,SAAU,CACzB,CACH,EACAO,GAAmB,uBAAuB,IAAM,UAAY,CAAE,OAAOG,EAAwB,EAC7FH,GAAmB,qCAAqC,IAAM,UAAY,CAAE,OAAOK,EAAoC,EAEvH,OAAO,iBAAkBN,GAA2BC,IAEpD,IAAIG,GAA2B,UAAmC,CAChE,KAAK,WAAa,IAAIN,GACtB,KAAK,WAAa,IAAIA,GACtB,KAAK,eAAiB,IAAIC,GAC1B,KAAK,MAAQ,KACb,IAAIlmD,EAAO,UAAU,CAAC,EACtB,KAAK,MAAQA,CACf,EACAumD,GAAyB,UAAU,OAAS,SAAiBprC,EAAI,CAC/D,KAAK,WAAW,aAChB+qC,GAAgB,gBAAgB,KAAK,MAAO/qC,EAAI,KAAK,UAAU,EAC/D,KAAK,WAAW,WAAW,KAAK,UAAU,CAC5C,EACAorC,GAAyB,UAAU,oBAAsB,UAAgC,CACvF,OAAO,KAAK,UACd,EACAA,GAAyB,UAAU,YAAc,UAAwB,CACvE,MAAO,CAACrlC,EAAgB,CAC1B,EACAqlC,GAAyB,UAAU,SAAW,UAAqB,CACjE,OAAOA,EACT,EAEA,IAAIE,GAAuC,UAAiD,CAC1F,KAAK,WAAa,IAAIR,GACtB,KAAK,WAAa,IAAIA,GACtB,KAAK,MAAQ,KACb,KAAK,YAAc,EACnB,IAAIjmD,EAAO,UAAU,CAAC,EAClB0mD,EAAW,UAAU,CAAC,EAC1B,KAAK,MAAQ1mD,EACb,KAAK,YAAc,KAAK,MAAM,KAAK,MAAM,EAAM0mD,CAAQ,CAAC,CAC1D,EACAD,GAAqC,UAAU,OAAS,SAAiBv+B,EAAKra,EAAO,CACjF,IAAIiL,EAAS,KAEf,GAAIjL,IAAU,EAAK,OAAO,KAK1B,QAJIkM,EAAKmO,EAAI,cAAcra,EAAQ,CAAC,EAChCuF,EAAK8U,EAAI,cAAcra,CAAK,EAC5B84C,GAAQvzC,EAAG,EAAI2G,EAAG,GAAK,KAAK,YAC5B6sC,GAAQxzC,EAAG,EAAI2G,EAAG,GAAK,KAAK,YACvBjV,EAAI,EAAGA,EAAI,KAAK,YAAaA,IAAK,CACzC,IAAIO,EAAI0U,EAAG,EAAIjV,EAAI6hD,EACfrhD,EAAIyU,EAAG,EAAIjV,EAAI8hD,EACfzrC,EAAK,IAAI7P,EAAWjG,EAAGC,CAAC,EAC5BwT,EAAO,WAAW,aAClBotC,GAAgB,gBAAgBptC,EAAO,MAAOqC,EAAIrC,EAAO,UAAU,EACnEA,EAAO,WAAW,WAAWA,EAAO,UAAU,CAC/C,CACH,EACA2tC,GAAqC,UAAU,OAAS,UAAmB,CACzE,MAAO,EACT,EACAA,GAAqC,UAAU,kBAAoB,UAA8B,CAC/F,MAAO,EACT,EACAA,GAAqC,UAAU,oBAAsB,UAAgC,CACnG,OAAO,KAAK,UACd,EACAA,GAAqC,UAAU,YAAc,UAAwB,CACnF,MAAO,CAACx+B,EAAwB,CAClC,EACAw+B,GAAqC,UAAU,SAAW,UAAqB,CAC7E,OAAOA,EACT,EAEA,IAAII,GAA0B,SAAkCvjD,EAAO2tC,EAAa1nC,EAAQ,CAC1F,KAAK,kBAAoB,KACzB,KAAK,kBAAoB,KACzB,KAAK,kBAAoB,KACzB,KAAK,kBAAoB,KACzB,KAAK,SAAW,GAChB,KAAK,QAAU,KACf,KAAK,eAAiB,KACtB,KAAK,gBAAkB,KACvB,KAAK,OAASjG,GAAS,KACvB,KAAK,aAAe2tC,GAAe,KACnC,KAAK,QAAU1nC,GAAU,IAC3B,EAEIu9C,GAAqB,CAAE,QAAS,CAAE,aAAc,IAAO,uBAAwB,CAAE,aAAc,EAAI,GACvGD,GAAwB,UAAU,qBAAuB,SAA+BvjD,EAAOyjD,EAAUC,EAAS,CAChH,IAAIC,EAAO,IAAId,GAA0BY,EAAUzjD,CAAK,EAGxD,GAFA2jD,EAAK,mBAAmB,GAAI,EAC5B,KAAK,kBAAoBA,EAAK,mBAC1B,KAAK,kBAAoBD,EAAS,CACpC,KAAK,SAAW,GAChB,IAAI1nC,EAAM2nC,EAAK,iBACf,KAAK,eAAiB3nC,EAAI,CAAC,EAC3B,KAAK,gBAAkBhc,EAAM,WAAU,EAAG,iBAAiBgc,CAAG,EAC9D,KAAK,QAAU,yDAA2D,KAAK,kBAAoB,OAASxF,GAAU,aAAawF,EAAI,CAAC,EAAGA,EAAI,CAAC,CAAC,EAAI,GACtJ,CACH,EACAunC,GAAwB,UAAU,QAAU,UAAoB,CAC9D,IAAInW,EAAc,KAAK,IAAI,KAAK,YAAY,EACxCwW,EAAYL,GAAwB,uBAAyBnW,EAGjE,OAFA,KAAK,kBAAoBA,EAAcwW,EACvC,KAAK,kBAAoBxW,EAAcwW,EACnC,KAAK,OAAO,WAAa,KAAK,QAAQ,QAAO,EAAa,IAC1D,KAAK,aAAe,EACtB,KAAK,mBAAkB,EAEvB,KAAK,mBAAkB,EAErBL,GAAwB,SAC1BrxC,GAAO,IAAI,QAAQ,aAAe,KAAK,kBAAoB,WAAa,EAAM,KAAK,kBAAoB,KAAK,cAAgB,eAAiB,KAAK,kBAAoB,WAAa,KAAK,kBAAoB,KAAK,aAAe,EAAI,EAE/N,KAAK,SACd,EACAqxC,GAAwB,UAAU,mBAAqB,UAA+B,CACpF,GAAI,EAAE,KAAK,kBAAkB95B,IAAW,KAAK,kBAAkByB,IAAgB,KAAK,kBAAkBrG,IACpG,OAAO,KAET,IAAIg/B,EAAa,KAAK,gBAAgB,KAAK,MAAM,EAEjD,GADA,KAAK,qBAAqBA,EAAY,KAAK,QAAS,KAAK,iBAAiB,EACtE,CAAC,KAAK,SAAY,OAAO,KAC7B,KAAK,qBAAqBA,EAAY,KAAK,QAAS,KAAK,iBAAiB,CAC5E,EACAN,GAAwB,UAAU,kBAAoB,UAA8B,CAClF,OAAO,KAAK,eACd,EACAA,GAAwB,UAAU,qBAAuB,SAA+B1C,EAAIzO,EAAI53B,EAAS,CACvG,IAAIkoC,EAAS,IAAI/B,GAAWE,EAAIzO,EAAI53B,CAAO,EAE3C,GADA,KAAK,kBAAoBkoC,EAAO,WAC5B,KAAK,kBAAoBloC,EAAS,CACpC,KAAK,SAAW,GAChB,IAAIwB,EAAM0mC,EAAO,gBACjB,KAAK,eAAiBA,EAAO,cAAe,EAAC,CAAC,EAC9C,KAAK,gBAAkB7B,EAAG,WAAU,EAAG,iBAAiB7kC,CAAG,EAC3D,KAAK,QAAU,yDAA2D,KAAK,kBAAoB,OAASxF,GAAU,aAAawF,EAAI,CAAC,EAAGA,EAAI,CAAC,CAAC,EAAI,IACtJ,CACH,EACAunC,GAAwB,UAAU,mBAAqB,UAA+B,CACpF,IAAIE,EAAW,KAAK,QAAQ,YAAW,EAEvC,GADA,KAAK,qBAAqB,KAAK,OAAQA,EAAU,KAAK,iBAAiB,EACnE,CAAC,KAAK,SAAY,OAAO,KAC7B,KAAK,qBAAqB,KAAK,OAAQA,EAAU,KAAK,iBAAiB,CACzE,EACAF,GAAwB,UAAU,iBAAmB,UAA6B,CAChF,OAAO,KAAK,cACd,EACAA,GAAwB,UAAU,gBAAkB,SAA0B/+C,EAAG,CAI/E,QAHIyR,EAAQ,IAAIyI,EACZolC,EAAgB,IAAI/E,GAAyB9oC,CAAK,EAClDorC,EAAQxC,GAAiB,YAAYr6C,CAAC,EACjChD,EAAI6/C,EAAM,SAAQ,EAAI7/C,EAAE,WAAY,CAC3C,IAAI6oB,EAAO7oB,EAAE,OACb6oB,EAAK,MAAMy5B,CAAa,CACzB,CACD,OAAOt/C,EAAE,aAAa,cAAcyR,CAAK,CAC3C,EACAstC,GAAwB,UAAU,gBAAkB,UAA4B,CAC9E,OAAO,KAAK,OACd,EACAA,GAAwB,UAAU,YAAc,UAAwB,CACtE,MAAO,CAAE,CACX,EACAA,GAAwB,UAAU,SAAW,UAAqB,CAChE,OAAOA,EACT,EACAC,GAAmB,QAAQ,IAAM,UAAY,CAAE,MAAO,EAAK,EAC3DA,GAAmB,uBAAuB,IAAM,UAAY,CAAE,MAAO,KAAK,EAE1E,OAAO,iBAAkBD,GAAyBC,IAElD,IAAIO,GAAwB,SAAgC/jD,EAAOjB,EAAUkH,EAAQ,CACnF,KAAK,SAAW,GAChB,KAAK,UAAY,KACjB,KAAK,eAAiB,KACtB,KAAK,gBAAkB,KACvB,KAAK,OAASjG,GAAS,KACvB,KAAK,UAAYjB,GAAY,KAC7B,KAAK,QAAUkH,GAAU,IAC3B,EAEI+9C,GAAqB,CAAE,QAAS,CAAE,aAAc,IAAO,kBAAmB,CAAE,aAAc,EAAI,GAClGD,GAAsB,UAAU,QAAU,UAAoB,CAE5D,OADA,KAAK,eAAc,EACd,KAAK,UACV,KAAK,mBAAkB,EAClB,KAAK,UACV,KAAK,cAAa,EACb,KAAK,UACV,KAAK,UAAS,EACT,KAAK,UACV,KAAK,cAAa,EACX,KAAK,UAFiB,KAAK,UAFL,KAAK,UAFL,KAAK,UAFL,KAAK,QASpC,EACAA,GAAsB,UAAU,cAAgB,UAA0B,CACxE,GAAI,KAAK,UAAY,EAAO,OAAO,KACnC,IAAIE,EAAU,KAAK,UAAYF,GAAsB,kBACjDE,IAAY,IAAOA,EAAU,MACjC,IAAIC,EAAc,IAAItwC,EAAS,KAAK,OAAO,oBAAmB,CAAE,EAChEswC,EAAY,SAAS,KAAK,SAAS,EACnC,IAAIC,EAAS,IAAIvwC,EAAS,KAAK,QAAQ,oBAAmB,CAAE,EAC5DuwC,EAAO,SAASF,CAAO,EAClBE,EAAO,SAASD,CAAW,IAC9B,KAAK,SAAW,GAChB,KAAK,UAAY,+BACjB,KAAK,gBAAkB,KAAK,OAAO,aAAa,WAAWC,CAAM,GAEnE,KAAK,OAAO,UAAU,CACxB,EACAJ,GAAsB,UAAU,cAAgB,UAA0B,CACxE,IAAIK,EAAY,IAAIb,GAAwB,KAAK,OAAQ,KAAK,UAAW,KAAK,OAAO,EAChFa,EAAU,YACb,KAAK,SAAW,GAChB,KAAK,UAAYA,EAAU,kBAC3B,KAAK,eAAiBA,EAAU,mBAChC,KAAK,gBAAkBA,EAAU,qBAEnC,KAAK,OAAO,UAAU,CACxB,EACAL,GAAsB,UAAU,UAAY,UAAsB,CAChE,IAAIM,EAAY,KAAK,OAAO,QAAO,EAC/BC,EAAa,KAAK,QAAQ,QAAO,EACjC,KAAK,UAAY,GAAOD,EAAYC,IACtC,KAAK,SAAW,GAChB,KAAK,UAAY,gDACjB,KAAK,gBAAkB,KAAK,SAE1B,KAAK,UAAY,GAAOD,EAAYC,IACtC,KAAK,SAAW,GAChB,KAAK,UAAY,+CACjB,KAAK,gBAAkB,KAAK,SAE9B,KAAK,OAAO,MAAM,CACpB,EACAP,GAAsB,UAAU,eAAiB,UAA2B,CACpE,KAAK,mBAAmBt6B,IAAW,KAAK,mBAAmByB,KAAiB,KAAK,SAAW,IAClG,KAAK,UAAY,0BACjB,KAAK,gBAAkB,KAAK,QAC5B,KAAK,OAAO,WAAW,CACzB,EACA64B,GAAsB,UAAU,kBAAoB,UAA8B,CAChF,OAAO,KAAK,eACd,EACAA,GAAsB,UAAU,iBAAmB,UAA6B,CAC9E,OAAO,KAAK,cACd,EACAA,GAAsB,UAAU,mBAAqB,UAA+B,CAElF,GADI,KAAK,OAAO,aAAc,GAAI,GAC9B,KAAK,UAAY,EAAO,OAAO,KAC9B,KAAK,QAAQ,YAChB,KAAK,SAAW,GAChB,KAAK,UAAY,sBACjB,KAAK,gBAAkB,KAAK,SAE9B,KAAK,OAAO,eAAe,CAC7B,EACAA,GAAsB,UAAU,OAAS,SAAiBQ,EAAW,CACnE,GAAI,CAACR,GAAsB,QAAW,OAAO,KAC7C7xC,GAAO,IAAI,QAAQ,SAAWqyC,EAAY,MAAQ,KAAK,SAAW,SAAW,SAAS,CACxF,EACAR,GAAsB,UAAU,gBAAkB,UAA4B,CAC5E,OAAO,KAAK,SACd,EACAA,GAAsB,UAAU,YAAc,UAAwB,CACpE,MAAO,CAAE,CACX,EACAA,GAAsB,UAAU,SAAW,UAAqB,CAC9D,OAAOA,EACT,EACAA,GAAsB,WAAa,SAAqBv/C,EAAGzF,EAAUkH,EAAQ,CAC3E,IAAIu+C,EAAY,IAAIT,GAAsBv/C,EAAGzF,EAAUkH,CAAM,EAC7D,OAAKu+C,EAAU,QAAO,EACf,KAD4BA,EAAU,iBAE/C,EACAT,GAAsB,QAAU,SAAkBv/C,EAAGzF,EAAUkH,EAAQ,CACrE,IAAIu+C,EAAY,IAAIT,GAAsBv/C,EAAGzF,EAAUkH,CAAM,EAC7D,MAAI,EAAAu+C,EAAU,SAEhB,EACAR,GAAmB,QAAQ,IAAM,UAAY,CAAE,MAAO,EAAK,EAC3DA,GAAmB,kBAAkB,IAAM,UAAY,CAAE,MAAO,KAAK,EAErE,OAAO,iBAAkBD,GAAuBC,IAIhD,IAAIS,GAAqB,UAA+B,CACtD,KAAK,KAAO,KACZ,KAAK,MAAQ,KACb,IAAIzoC,EAAM,UAAU,CAAC,EACjB5G,EAAO,UAAU,CAAC,EACtB,KAAK,KAAO4G,EACZ,KAAK,MAAQ5G,CACf,EACAqvC,GAAmB,UAAU,eAAiB,UAA2B,CACvE,OAAO,KAAK,IACd,EACAA,GAAmB,UAAU,KAAO,UAAiB,CACnD,OAAO,KAAK,KAAK,MACnB,EACAA,GAAmB,UAAU,cAAgB,SAAwBjjD,EAAG,CACtE,OAAO,KAAK,KAAKA,CAAC,CACpB,EACAijD,GAAmB,UAAU,SAAW,UAAqB,CAC3D,OAAO,KAAK,KAAK,CAAC,EAAE,OAAO,KAAK,KAAK,KAAK,KAAK,OAAS,CAAC,CAAC,CAC5D,EACAA,GAAmB,UAAU,iBAAmB,SAA2Bl6C,EAAO,CAChF,OAAIA,IAAU,KAAK,KAAK,OAAS,EAAY,GACtCo3B,GAAO,OAAO,KAAK,cAAcp3B,CAAK,EAAG,KAAK,cAAcA,EAAQ,CAAC,CAAC,CAC/E,EACAk6C,GAAmB,UAAU,QAAU,SAAkBrvC,EAAM,CAC7D,KAAK,MAAQA,CACf,EACAqvC,GAAmB,UAAU,QAAU,UAAoB,CACzD,OAAO,KAAK,KACd,EACAA,GAAmB,UAAU,SAAW,UAAqB,CAC3D,OAAOjuC,GAAU,aAAa,IAAIuV,EAAwB,KAAK,IAAI,CAAC,CACtE,EACA04B,GAAmB,UAAU,YAAc,UAAwB,CACjE,MAAO,CAACziB,EAAa,CACvB,EACAyiB,GAAmB,UAAU,SAAW,UAAqB,CAC3D,OAAOA,EACT,EAEA,IAAIC,GAA6B,UAAuC,CACtE,KAAK,sBAAwB,GAC7B,KAAK,wBAA0B,GAC/B,KAAK,IAAM,KACX,KAAK,sBAAwB,KAC7B,KAAK,aAAe,KACpB,KAAK,eAAiB,IAAIhmC,EAC1B,KAAK,mBAAqB,EAC1B,KAAK,mBAAqB,GAC1B,IAAIyjB,EAAK,UAAU,CAAC,EACpB,KAAK,IAAMA,EACX,KAAK,sBAAwB,IAC/B,EACAuiB,GAA2B,UAAU,wBAA0B,UAAoC,CACjG,OAAO,KAAK,qBACd,EACAA,GAA2B,UAAU,wBAA0B,SAAkCC,EAAwB,CACvH,KAAK,wBAA0BA,CACjC,EACAD,GAA2B,UAAU,wBAA0B,UAAoC,CACjG,OAAO,KAAK,YACd,EACAA,GAA2B,UAAU,MAAQ,UAAkB,CAC7D,OAAO,KAAK,kBACd,EACAA,GAA2B,UAAU,iBAAmB,UAA6B,CACnF,OAAO,KAAK,cACd,EACAA,GAA2B,UAAU,wBAA0B,SAAkCE,EAAsB,CACrH,KAAK,sBAAwBA,CAC/B,EACAF,GAA2B,UAAU,qBAAuB,SAA+BG,EAAmB,CAC5G,KAAK,mBAAqBA,CAC5B,EACAH,GAA2B,UAAU,qBAAuB,SAA+BhP,EAAIC,EAAWC,EAAIC,EAAW,CAEvH,GADI,CAAC,KAAK,uBAAyB,KAAK,gBAAiB,GACrDH,IAAOE,GAAMD,IAAcE,EAAa,OAAO,KACnD,GAAI,KAAK,wBAAyB,CAChC,IAAIiP,EAAkB,KAAK,aAAapP,EAAIC,CAAS,GAAK,KAAK,aAAaC,EAAIC,CAAS,EACzF,GAAI,CAACiP,EAAmB,OAAO,IAChC,CACD,IAAItf,EAAMkQ,EAAG,eAAgB,EAACC,CAAS,EACnClQ,EAAMiQ,EAAG,eAAgB,EAACC,EAAY,CAAC,EACvCjQ,EAAMkQ,EAAG,eAAgB,EAACC,CAAS,EACnClQ,EAAMiQ,EAAG,eAAgB,EAACC,EAAY,CAAC,EAC3C,KAAK,IAAI,oBAAoBrQ,EAAKC,EAAKC,EAAKC,CAAG,EAC3C,KAAK,IAAI,mBACP,KAAK,IAAI,2BACX,KAAK,aAAe,IAAI,MAAM,CAAC,EAAE,KAAK,IAAI,EAC1C,KAAK,aAAa,CAAC,EAAIH,EACvB,KAAK,aAAa,CAAC,EAAIC,EACvB,KAAK,aAAa,CAAC,EAAIC,EACvB,KAAK,aAAa,CAAC,EAAIC,EACvB,KAAK,sBAAwB,KAAK,IAAI,gBAAgB,CAAC,EACnD,KAAK,oBAAsB,KAAK,eAAe,IAAI,KAAK,qBAAqB,EACjF,KAAK,qBAGX,EACA+e,GAA2B,UAAU,aAAe,SAAuB/d,EAAQp8B,EAAO,CAExF,OADIA,IAAU,GACVA,GAASo8B,EAAO,KAAM,EAAG,CAE/B,EACA+d,GAA2B,UAAU,gBAAkB,UAA4B,CACjF,OAAO,KAAK,wBAA0B,IACxC,EACAA,GAA2B,UAAU,OAAS,UAAmB,CAC/D,OAAI,KAAK,sBAAgC,GAClC,KAAK,wBAA0B,IACxC,EACAA,GAA2B,UAAU,YAAc,UAAwB,CACzE,MAAO,CAACjP,EAAkB,CAC5B,EACAiP,GAA2B,UAAU,SAAW,UAAqB,CACnE,OAAOA,EACT,EACAA,GAA2B,6BAA+B,SAAuCviB,EAAI,CACnG,IAAI4iB,EAAS,IAAIL,GAA2BviB,CAAE,EAC9C,OAAA4iB,EAAO,wBAAwB,EAAI,EAC5BA,CACT,EACAL,GAA2B,4BAA8B,SAAsCviB,EAAI,CACjG,OAAO,IAAIuiB,GAA2BviB,CAAE,CAC1C,EACAuiB,GAA2B,0BAA4B,SAAoCviB,EAAI,CAC7F,IAAI4iB,EAAS,IAAIL,GAA2BviB,CAAE,EAC9C,OAAA4iB,EAAO,wBAAwB,EAAI,EACnCA,EAAO,qBAAqB,EAAK,EAC1BA,CACT,EAEA,IAAIC,GAAsB,UAAgC,CACxD,KAAK,IAAM,IAAIhtC,GACf,KAAK,YAAc,KACnB,KAAK,sBAAwB,GAC7B,KAAK,QAAU,KACf,KAAK,SAAW,GAChB,IAAIwqB,EAAa,UAAU,CAAC,EAC5B,KAAK,YAAcA,CACrB,EACAwiB,GAAoB,UAAU,QAAU,UAAoB,CAC1D,GAAI,KAAK,UAAY,KAAQ,OAAO,KACpC,KAAK,2BAA0B,CACjC,EACAA,GAAoB,UAAU,iBAAmB,UAA6B,CAC5E,OAAO,KAAK,QAAQ,iBAAkB,CACxC,EACAA,GAAoB,UAAU,QAAU,UAAoB,CAC1D,YAAK,QAAO,EACL,KAAK,QACd,EACAA,GAAoB,UAAU,wBAA0B,SAAkCJ,EAAsB,CAC9G,KAAK,sBAAwBA,CAC/B,EACAI,GAAoB,UAAU,2BAA6B,UAAuC,CAChG,KAAK,SAAW,GAChB,KAAK,QAAU,IAAIN,GAA2B,KAAK,GAAG,EACtD,KAAK,QAAQ,wBAAwB,KAAK,qBAAqB,EAC/D,IAAIxM,EAAQ,IAAI1R,GAGhB,GAFA0R,EAAM,sBAAsB,KAAK,OAAO,EACxCA,EAAM,aAAa,KAAK,WAAW,EAC/B,KAAK,QAAQ,kBACf,YAAK,SAAW,GACT,IAEX,EACA8M,GAAoB,UAAU,WAAa,UAAuB,CAEhE,GADA,KAAK,QAAO,EACR,CAAC,KAAK,SAAY,MAAM,IAAIj0B,GAAkB,KAAK,gBAAiB,EAAE,KAAK,QAAQ,wBAAyB,CAAA,CAClH,EACAi0B,GAAoB,UAAU,gBAAkB,UAA4B,CAC1E,GAAI,KAAK,SAAY,MAAO,yBAC5B,IAAIC,EAAU,KAAK,QAAQ,wBAAuB,EAClD,MAAO,wCAA0CzuC,GAAU,aAAayuC,EAAQ,CAAC,EAAGA,EAAQ,CAAC,CAAC,EAAI,QAAUzuC,GAAU,aAAayuC,EAAQ,CAAC,EAAGA,EAAQ,CAAC,CAAC,CAC3J,EACAD,GAAoB,UAAU,YAAc,UAAwB,CAClE,MAAO,CAAE,CACX,EACAA,GAAoB,UAAU,SAAW,UAAqB,CAC5D,OAAOA,EACT,EACAA,GAAoB,qBAAuB,SAA+BxiB,EAAY,CACpF,IAAIgZ,EAAK,IAAIwJ,GAAoBxiB,CAAU,EAC3C,OAAAgZ,EAAG,wBAAwB,EAAI,EAC/BA,EAAG,QAAO,EACHA,EAAG,iBAAkB,CAC9B,EAEA,IAAI0J,GAAsB,SAASA,GAAuB,CACxD,KAAK,IAAM,KACX,IAAI5vB,EAAQ,UAAU,CAAC,EACvB,KAAK,IAAM,IAAI0vB,GAAoBE,EAAoB,iBAAiB5vB,CAAK,CAAC,CAChF,EACA4vB,GAAoB,UAAU,WAAa,UAAuB,CAChE,KAAK,IAAI,YACX,EACAA,GAAoB,UAAU,YAAc,UAAwB,CAClE,MAAO,CAAE,CACX,EACAA,GAAoB,UAAU,SAAW,UAAqB,CAC5D,OAAOA,EACT,EACAA,GAAoB,iBAAmB,SAA2B5vB,EAAO,CAEvE,QADIkN,EAAa,IAAI9jB,EACZld,EAAI8zB,EAAM,SAAQ,EAAI9zB,EAAE,WAAY,CAC3C,IAAIqJ,EAAIrJ,EAAE,OACVghC,EAAW,IAAI,IAAIiiB,GAAmB55C,EAAE,eAAgB,EAAEA,CAAC,CAAC,CAC7D,CACD,OAAO23B,CACT,EACA0iB,GAAoB,WAAa,SAAqB5vB,EAAO,CAC3D,IAAIkvB,EAAY,IAAIU,GAAoB5vB,CAAK,EAC7CkvB,EAAU,WAAU,CACtB,EAEA,IAAIW,GAA2B,SAAmCC,EAAO,CACvE,KAAK,OAASA,CAChB,EACAD,GAAyB,UAAU,IAAM,SAAc3/B,EAAI,CAIzD,QAHMhQ,EAAS,KAEX6vC,EAAS,IAAI3mC,EACR,EAAI,EAAG,EAAI8G,EAAG,iBAAgB,EAAI,IAAK,CAC9C,IAAIhhB,EAAIgR,EAAO,OAAO,IAAIgQ,EAAG,aAAa,CAAC,CAAC,EACvChhB,EAAE,QAAS,GAAI6gD,EAAO,IAAI7gD,CAAC,CACjC,CACD,OAAOghB,EAAG,aAAa,yBAAyB1Q,EAAgB,gBAAgBuwC,CAAM,CAAC,CACzF,EACAF,GAAyB,UAAU,YAAc,UAAwB,CACvE,MAAO,CAAE,CACX,EACAA,GAAyB,UAAU,SAAW,UAAqB,CACjE,OAAOA,EACT,EACAA,GAAyB,IAAM,SAAc3/B,EAAI8/B,EAAI,CACnD,IAAIC,EAAS,IAAIJ,GAAyBG,CAAE,EAC5C,OAAOC,EAAO,IAAI//B,CAAE,CACtB,EAEA,IAAIggC,GAAc,UAAwB,CACxC,KAAK,IAAM,KACX,KAAK,iBAAmB,KACxB,KAAK,WAAa,KAClB,KAAK,eAAiB,IAAI9mC,EAC1B,KAAK,gBAAkB,IAAIA,EAC3B,IAAI4mC,EAAK,UAAU,CAAC,EAChBzwC,EAAkB,UAAU,CAAC,EAC7B4wC,EAAY,UAAU,CAAC,EAC3B,KAAK,IAAMH,EACX,KAAK,iBAAmBzwC,EACxB,KAAK,WAAa4wC,CACpB,EACAD,GAAY,UAAU,aAAe,SAAuBE,EAAQ,CAGlE,QAFMlwC,EAAS,KAENoR,EAAK,KAAK,IAAI,SAAQ,EAAG,YAAW,EAAG,SAAQ,EAAIA,EAAG,QAAO,GAAK,CACzE,IAAIyJ,EAAKzJ,EAAG,OACZpR,EAAO,gBAAgB6a,EAAIq1B,EAAQlwC,EAAO,cAAc,EACxDA,EAAO,yBAAyB6a,EAAIq1B,EAAQlwC,EAAO,cAAc,CAClE,CACH,EACAgwC,GAAY,UAAU,kBAAoB,SAA4B36C,EAAG86C,EAAa,CACpF,IAAI7yB,EAAM,KAAK,WAAW,OAAOjoB,EAAE,cAAe,EAAE,KAAK,IAAI,eAAe86C,CAAW,CAAC,EACxF96C,EAAE,SAAU,EAAC,YAAY86C,EAAa7yB,CAAG,CAC3C,EACA0yB,GAAY,UAAU,MAAQ,SAAgBE,EAAQ,CACpD,YAAK,qBAAoB,EACzB,KAAK,aAAaA,CAAM,EACxB,KAAK,WAAWA,CAAM,EACf,KAAK,eACd,EACAF,GAAY,UAAU,gBAAkB,SAA0Bn1B,EAAIq1B,EAAQpwB,EAAO,CACnF,IAAI1B,EAAQvD,EAAG,WACXxlB,EAAIwlB,EAAG,UACPA,EAAG,cACD,CAACA,EAAG,UAAW,GAAIu1B,EAAU,aAAahyB,EAAO8xB,CAAM,GAAK,CAAC76C,EAAE,UAAS,IAC1EyqB,EAAM,IAAIzqB,CAAC,EACXwlB,EAAG,eAAe,EAAI,EAG5B,EACAm1B,GAAY,UAAU,qBAAuB,UAAiC,CAG5E,QAFMhwC,EAAS,KAEN4iB,EAAS,KAAK,IAAI,SAAQ,EAAG,SAAQ,EAAG,SAAQ,EAAIA,EAAO,QAAO,GAAK,CAC9E,IAAIzH,EAAOyH,EAAO,OAClBzH,EAAK,WAAW,sBACjB,CACD,QAAS/J,EAAK,KAAK,IAAI,SAAQ,EAAG,YAAW,EAAG,SAAQ,EAAIA,EAAG,QAAO,GAAK,CACzE,IAAIyJ,EAAKzJ,EAAG,OACR/b,EAAIwlB,EAAG,UACX,GAAIA,EAAG,WAAU,GAAM,CAACxlB,EAAE,aAAY,EAAI,CACxC,IAAIqqB,EAAY1f,EAAO,IAAI,aAAa6a,EAAG,cAAa,CAAE,EAC1DxlB,EAAE,WAAWqqB,CAAS,CACvB,CACF,CACH,EACAswB,GAAY,UAAU,mBAAqB,SAA6BK,EAAW,CAGjF,QAFMrwC,EAAS,KAENoR,EAAKi/B,EAAU,SAAQ,EAAIj/B,EAAG,WAAY,CACjD,IAAI/b,EAAI+b,EAAG,OACPgN,EAAQ/oB,EAAE,WACVA,EAAE,eACA+oB,EAAM,OAAO,CAAC,EAAKpe,EAAO,kBAAkB3K,EAAG,CAAC,EAAY2K,EAAO,kBAAkB3K,EAAG,CAAC,EAEhG,CACH,EACA26C,GAAY,UAAU,WAAa,SAAqBE,EAAQ,CAG9D,QAFMlwC,EAAS,KAENoR,EAAK,KAAK,eAAe,WAAYA,EAAG,WAAY,CAC3D,IAAI/b,EAAI+b,EAAG,OAEP5lB,EAAOwU,EAAO,iBAAiB,iBAAiB3K,EAAE,eAAc,CAAE,EACtE2K,EAAO,gBAAgB,IAAIxU,CAAI,EAC/B6J,EAAE,YAAY,EAAI,CACnB,CACH,EACA26C,GAAY,UAAU,yBAA2B,SAAmCn1B,EAAIq1B,EAAQpwB,EAAO,CACrG,IAAI1B,EAAQvD,EAAG,WAIf,GAHIA,EAAG,cACHA,EAAG,aACHA,EAAG,sBACHA,EAAG,QAAS,EAAC,WAAU,EAAM,OAAO,KACxCxZ,EAAO,OAAO,EAAEwZ,EAAG,WAAY,GAAIA,EAAG,OAAM,EAAG,WAAY,IAAK,CAACA,EAAG,QAAO,EAAG,WAAY,CAAA,EACtFu1B,EAAU,aAAahyB,EAAO8xB,CAAM,GAAKA,IAAWE,EAAU,eAChEtwB,EAAM,IAAIjF,EAAG,QAAS,CAAA,EACtBA,EAAG,eAAe,EAAI,EAE1B,EACAm1B,GAAY,UAAU,YAAc,UAAwB,CAC1D,MAAO,CAAE,CACX,EACAA,GAAY,UAAU,SAAW,UAAqB,CACpD,OAAOA,EACT,EAEA,IAAIM,GAAe,UAAyB,CAC1C,KAAK,IAAM,KACX,KAAK,iBAAmB,KACxB,KAAK,iBAAmB,IAAIpnC,EAC5B,IAAI4mC,EAAK,UAAU,CAAC,EAChBzwC,EAAkB,UAAU,CAAC,EAEjC,KAAK,IAAMywC,EACX,KAAK,iBAAmBzwC,CAC1B,EACAixC,GAAa,UAAU,yBAA2B,SAAmCn+C,EAAG,CACtF,IAAIrH,EAAQqH,EAAE,gBACd,GAAI,CAAC,KAAK,IAAI,cAAcrH,CAAK,EAAG,CAClC,IAAIuX,EAAK,KAAK,iBAAiB,YAAYvX,CAAK,EAChD,KAAK,iBAAiB,IAAIuX,CAAE,CAC7B,CACH,EACAiuC,GAAa,UAAU,6BAA+B,SAAuCJ,EAAQ,CAGnG,QAFMlwC,EAAS,KAEN4iB,EAAS,KAAK,IAAI,SAAQ,EAAG,SAAQ,EAAG,SAAQ,EAAIA,EAAO,QAAO,GAAK,CAC9E,IAAIzwB,EAAIywB,EAAO,OACf,GAAI,CAAAzwB,EAAE,cACF,CAAAA,EAAE,2BACFA,EAAE,SAAQ,EAAG,UAAS,IAAO,GAAK+9C,IAAWE,EAAU,cAAc,CACvE,IAAIhyB,EAAQjsB,EAAE,WACVi+C,EAAU,aAAahyB,EAAO8xB,CAAM,GACtClwC,EAAO,yBAAyB7N,CAAC,CAEpC,CACF,CACH,EACAm+C,GAAa,UAAU,MAAQ,SAAgBJ,EAAQ,CACrD,YAAK,6BAA6BA,CAAM,EACjC,KAAK,gBACd,EACAI,GAAa,UAAU,YAAc,UAAwB,CAC3D,MAAO,CAAE,CACX,EACAA,GAAa,UAAU,SAAW,UAAqB,CACrD,OAAOA,EACT,EAEA,IAAIC,GAAsB,UAAgC,CACxD,KAAK,WAAa,KAClB,KAAK,SAAW,KAChB,KAAK,oBAAsB,GAC3B,KAAK,gCAAkC,GACvC,KAAK,qBAAuB,GAC5B,KAAK,cAAgB,EACvB,EACAA,GAAoB,UAAU,eAAiB,SAAyBrpD,EAAMmnB,EAAQ,CACpF,OAAO,KAAK,SAAS,YAAY,KAAK,qBAAqBnnB,EAAK,wBAAyBA,CAAI,CAAC,CAChG,EACAqpD,GAAoB,UAAU,iBAAmB,SAA2BrpD,EAAMmnB,EAAQ,CACtF,IAAIrO,EAAS,KAEXwwC,EAAwB,GACxB3vC,EAAQ,KAAK,oBAAoB3Z,EAAK,gBAAe,EAAIA,CAAI,GAC7D2Z,IAAU,MAAQ,EAAEA,aAAiB0U,KAAe1U,EAAM,QAAS,KAAI2vC,EAAwB,IAEnG,QADI1vC,EAAQ,IAAIoI,EACPld,EAAI,EAAGA,EAAI9E,EAAK,mBAAkB,EAAI8E,IAAK,CAClD,IAAImqB,EAAOnW,EAAO,oBAAoB9Y,EAAK,iBAAiB8E,CAAC,EAAG9E,CAAI,EAChEivB,IAAS,MAAQA,EAAK,QAAO,IAG3BA,aAAgBZ,KAAei7B,EAAwB,IAC7D1vC,EAAM,IAAIqV,CAAI,EACf,CACD,GAAIq6B,EAAyB,OAAO,KAAK,SAAS,cAAc3vC,EAAOC,EAAM,QAAQ,EAAE,CAAC,EACtF,IAAIN,EAAa,IAAI0I,EACrB,OAAIrI,IAAU,MAAQL,EAAW,IAAIK,CAAK,EAC1CL,EAAW,OAAOM,CAAK,EAChB,KAAK,SAAS,cAAcN,CAAU,CAEjD,EACA+vC,GAAoB,UAAU,yBAA2B,SAAmCpoD,EAAQ,CAClG,OAAO,KAAK,SAAS,6BAA4B,EAAG,OAAOA,CAAM,CACnE,EACAooD,GAAoB,UAAU,iBAAmB,UAA6B,CAC5E,OAAO,KAAK,UACd,EACAA,GAAoB,UAAU,yBAA2B,SAAmCrpD,EAAMmnB,EAAQ,CAIxG,QAHMrO,EAAS,KAEXywC,EAAgB,IAAIvnC,EACfld,EAAI,EAAGA,EAAI9E,EAAK,iBAAgB,EAAI8E,IAAK,CAChD,IAAI0kD,EAAgB1wC,EAAO,oBAAoB9Y,EAAK,aAAa8E,CAAC,EAAG9E,CAAI,EACrEwpD,IAAkB,OAClBA,EAAc,WAClBD,EAAc,IAAIC,CAAa,EAChC,CACD,OAAO,KAAK,SAAS,cAAcD,CAAa,CAClD,EACAF,GAAoB,UAAU,qBAAuB,SAA+BpoD,EAAQkmB,EAAQ,CAClG,OAAO,KAAK,KAAKlmB,CAAM,CACzB,EACAooD,GAAoB,UAAU,oBAAsB,SAA8BrpD,EAAMmnB,EAAQ,CAC9F,OAAO,KAAK,SAAS,iBAAiB,KAAK,qBAAqBnnB,EAAK,wBAAyBA,CAAI,CAAC,CACrG,EACAqpD,GAAoB,UAAU,oBAAsB,SAA8BrpD,EAAMmnB,EAAQ,CAI9F,QAHMrO,EAAS,KAEXywC,EAAgB,IAAIvnC,EACfld,EAAI,EAAGA,EAAI9E,EAAK,iBAAgB,EAAI8E,IAAK,CAChD,IAAI0kD,EAAgB1wC,EAAO,eAAe9Y,EAAK,aAAa8E,CAAC,EAAG9E,CAAI,EAChEwpD,IAAkB,OAClBA,EAAc,WAClBD,EAAc,IAAIC,CAAa,EAChC,CACD,OAAO,KAAK,SAAS,cAAcD,CAAa,CAClD,EACAF,GAAoB,UAAU,sBAAwB,SAAgCrpD,EAAMmnB,EAAQ,CAIlG,QAHMrO,EAAS,KAEXywC,EAAgB,IAAIvnC,EACfld,EAAI,EAAGA,EAAI9E,EAAK,iBAAgB,EAAI8E,IAAK,CAChD,IAAI0kD,EAAgB1wC,EAAO,iBAAiB9Y,EAAK,aAAa8E,CAAC,EAAG9E,CAAI,EAClEwpD,IAAkB,OAClBA,EAAc,WAClBD,EAAc,IAAIC,CAAa,EAChC,CACD,OAAO,KAAK,SAAS,cAAcD,CAAa,CAClD,EACAF,GAAoB,UAAU,KAAO,SAAenhC,EAAK,CACvD,OAAOA,EAAI,KAAM,CACnB,EACAmhC,GAAoB,UAAU,4BAA8B,SAAsCrpD,EAAMmnB,EAAQ,CAI9G,QAHMrO,EAAS,KAEXywC,EAAgB,IAAIvnC,EACfld,EAAI,EAAGA,EAAI9E,EAAK,iBAAgB,EAAI8E,IAAK,CAChD,IAAI0kD,EAAgB1wC,EAAO,UAAU9Y,EAAK,aAAa8E,CAAC,CAAC,EACrD0kD,IAAkB,OAClB1wC,EAAO,qBAAuB0wC,EAAc,QAAS,GACzDD,EAAc,IAAIC,CAAa,EAChC,CACD,OAAI,KAAK,gCAA0C,KAAK,SAAS,yBAAyBpxC,EAAgB,gBAAgBmxC,CAAa,CAAC,EACjI,KAAK,SAAS,cAAcA,CAAa,CAClD,EACAF,GAAoB,UAAU,UAAY,SAAoB9U,EAAW,CAGvE,GAFA,KAAK,WAAaA,EAClB,KAAK,SAAWA,EAAU,aACtBA,aAAqB1nB,GAAS,OAAO,KAAK,eAAe0nB,EAAW,IAAI,EAC5E,GAAIA,aAAqBnmB,GAAc,OAAO,KAAK,oBAAoBmmB,EAAW,IAAI,EACtF,GAAIA,aAAqBlmB,GAAc,OAAO,KAAK,oBAAoBkmB,EAAW,IAAI,EACtF,GAAIA,aAAqBvqB,EAAc,OAAO,KAAK,oBAAoBuqB,EAAW,IAAI,EACtF,GAAIA,aAAqBjrB,GAAmB,OAAO,KAAK,yBAAyBirB,EAAW,IAAI,EAChG,GAAIA,aAAqBxnB,GAAW,OAAO,KAAK,iBAAiBwnB,EAAW,IAAI,EAChF,GAAIA,aAAqB/lB,GAAgB,OAAO,KAAK,sBAAsB+lB,EAAW,IAAI,EAC1F,GAAIA,aAAqBpsB,GAAsB,OAAO,KAAK,4BAA4BosB,EAAW,IAAI,EACtG,MAAM,IAAI3pC,EAAyB,6BAA+B2pC,EAAU,SAAQ,EAAG,SAAS,CAClG,EACA8U,GAAoB,UAAU,oBAAsB,SAA8BrpD,EAAMmnB,EAAQ,CAC9F,IAAIe,EAAM,KAAK,qBAAqBloB,EAAK,sBAAqB,EAAIA,CAAI,EACtE,GAAIkoB,IAAQ,KAAQ,OAAO,KAAK,SAAS,iBAAiB,IAAI,EAC9D,IAAIuhC,EAAUvhC,EAAI,OAClB,OAAIuhC,EAAU,GAAKA,EAAU,GAAK,CAAC,KAAK,cAAwB,KAAK,SAAS,iBAAiBvhC,CAAG,EAC3F,KAAK,SAAS,iBAAiBA,CAAG,CAC3C,EACAmhC,GAAoB,UAAU,YAAc,UAAwB,CAClE,MAAO,CAAE,CACX,EACAA,GAAoB,UAAU,SAAW,UAAqB,CAC5D,OAAOA,EACT,EAEA,IAAIK,GAAoB,SAASA,GAAqB,CAMpD,GALA,KAAK,eAAiB,EACtB,KAAK,QAAU,KACf,KAAK,KAAO,IAAIvjB,EAChB,KAAK,+BAAiC,GACtC,KAAK,UAAY,GACb,UAAU,CAAC,YAAanc,GAAc,OAAO,UAAU,CAAC,GAAM,SAAU,CAC1E,IAAI2/B,EAAU,UAAU,CAAC,EACrBC,EAAgB,UAAU,CAAC,EAC/BF,EAAkB,KAAK,KAAMC,EAAQ,eAAc,EAAIC,CAAa,CACxE,SAAa,UAAU,CAAC,YAAa,OAAS,OAAO,UAAU,CAAC,GAAM,SAAU,CAC5E,IAAIC,EAAS,UAAU,CAAC,EACpBC,EAAkB,UAAU,CAAC,EACjC,KAAK,QAAUD,EACf,KAAK,UAAYH,EAAkB,SAASG,CAAM,EAClD,KAAK,eAAiBC,CACvB,CACH,EACAJ,GAAkB,UAAU,aAAe,SAAuBK,EAAW5K,EAAS,CAIpF,QAHMrmC,EAAS,KAEX1T,EAAM,KAAK,UAAY2kD,EAAU,KAAI,EAAK,EAAIA,EAAU,OACnDjlD,EAAI,EAAGA,EAAIM,EAAKN,IAAK,CAC5B,IAAIklD,EAAQD,EAAU,IAAIjlD,CAAC,EACvBmlD,EAAWnxC,EAAO,kBAAkBkxC,EAAO7K,CAAO,EAClD8K,IAAa,OACfF,EAAU,IAAIjlD,EAAG,IAAIwG,EAAW2+C,CAAQ,CAAC,EACrCnlD,IAAM,GAAKgU,EAAO,WAAaixC,EAAU,IAAIA,EAAU,KAAI,EAAK,EAAG,IAAIz+C,EAAW2+C,CAAQ,CAAC,EAElG,CACH,EACAP,GAAkB,UAAU,kBAAoB,SAA4BvuC,EAAIgkC,EAAS,CAGvF,QAFMrmC,EAAS,KAEN,EAAI,EAAG,EAAIqmC,EAAQ,OAAQ,IAAK,CACvC,GAAIhkC,EAAG,SAASgkC,EAAQ,CAAC,CAAC,EAAK,OAAO,KACtC,GAAIhkC,EAAG,SAASgkC,EAAQ,CAAC,CAAC,EAAIrmC,EAAO,eAAkB,OAAOqmC,EAAQ,CAAC,CACxE,CACD,OAAO,IACT,EACAuK,GAAkB,UAAU,OAAS,SAAiBvK,EAAS,CAC7D,IAAIv6B,EAAY,IAAIpC,GAAe,KAAK,OAAO,EAC/C,KAAK,aAAaoC,EAAWu6B,CAAO,EACpC,KAAK,aAAav6B,EAAWu6B,CAAO,EACpC,IAAI9E,EAASz1B,EAAU,oBACvB,OAAOy1B,CACT,EACAqP,GAAkB,UAAU,aAAe,SAAuBK,EAAW5K,EAAS,CAClF,IAAIrmC,EAAS,KAEf,GAAIqmC,EAAQ,SAAW,EAAK,OAAO,KACnC,IAAI+K,EAAkB/K,EAAQ,OAC1BA,EAAQ,CAAC,EAAE,SAASA,EAAQA,EAAQ,OAAS,CAAC,CAAC,IAAK+K,EAAkB/K,EAAQ,OAAS,GAC3F,QAASr6C,EAAI,EAAGA,EAAIolD,EAAiBplD,IAAK,CACxC,IAAIs6C,EAASD,EAAQr6C,CAAC,EAClB+I,EAAQiL,EAAO,uBAAuBsmC,EAAQ2K,CAAS,EACvDl8C,GAAS,GACXk8C,EAAU,IAAIl8C,EAAQ,EAAG,IAAIvC,EAAW8zC,CAAM,EAAG,EAAK,CAEzD,CACH,EACAsK,GAAkB,UAAU,uBAAyB,SAAiCtK,EAAQ2K,EAAW,CAKvG,QAJMjxC,EAAS,KAEXgF,EAAU/S,EAAO,UACjBo/C,EAAY,GACPrlD,EAAI,EAAGA,EAAIilD,EAAU,KAAM,EAAG,EAAGjlD,IAAK,CAG7C,GAFAgU,EAAO,KAAK,GAAKixC,EAAU,IAAIjlD,CAAC,EAChCgU,EAAO,KAAK,GAAKixC,EAAU,IAAIjlD,EAAI,CAAC,EAChCgU,EAAO,KAAK,GAAG,SAASsmC,CAAM,GAAKtmC,EAAO,KAAK,GAAG,SAASsmC,CAAM,EAAG,CACtE,GAAItmC,EAAO,+BAAkC,SAAmB,MAAO,EACxE,CACD,IAAImC,EAAOnC,EAAO,KAAK,SAASsmC,CAAM,EAClCnkC,EAAOnC,EAAO,gBAAkBmC,EAAO6C,IACzCA,EAAU7C,EACVkvC,EAAYrlD,EAEf,CACD,OAAOqlD,CACT,EACAT,GAAkB,UAAU,iCAAmC,SAA2CU,EAA+B,CACvI,KAAK,+BAAiCA,CACxC,EACAV,GAAkB,UAAU,YAAc,UAAwB,CAChE,MAAO,CAAE,CACX,EACAA,GAAkB,UAAU,SAAW,UAAqB,CAC1D,OAAOA,EACT,EACAA,GAAkB,SAAW,SAAmBpqC,EAAK,CACnD,OAAIA,EAAI,QAAU,EAAY,GACvBA,EAAI,CAAC,EAAE,SAASA,EAAIA,EAAI,OAAS,CAAC,CAAC,CAC5C,EAEA,IAAI+qC,EAAkB,SAA0BC,EAAS,CACvD,KAAK,SAAWA,GAAW,IAC7B,EAEIC,GAAqB,CAAE,sBAAuB,CAAE,aAAc,EAAM,CAAA,EACxEF,EAAgB,UAAU,OAAS,SAAiBG,EAAUZ,EAAe,CAC3E,IAAIzK,EAAU,KAAK,yBAAyBqL,CAAQ,EAChDC,EAAY,IAAIC,GAAgBd,EAAezK,CAAO,EAC1D,OAAOsL,EAAU,UAAU,KAAK,QAAQ,CAC1C,EACAJ,EAAgB,UAAU,WAAa,SAAqBT,EAAee,EAAa,CACtF,IAAIxL,EAAU,KAAK,yBAAyB,KAAK,QAAQ,EACrDsL,EAAY,IAAIC,GAAgBd,EAAezK,EAAS,EAAI,EAC5DyL,EAAcH,EAAU,UAAU,KAAK,QAAQ,EAC/ClhD,EAASqhD,EACb,OAAID,GAAe39C,EAAazD,EAAQujB,EAAS,IAC/CvjB,EAASqhD,EAAY,OAAO,CAAC,GAExBrhD,CACT,EACA8gD,EAAgB,UAAU,qBAAuB,SAA+BQ,EAAS,CACvF,IAAIC,EAAY,KAAK,4BAA4BD,CAAO,EACpDE,EAAUD,EAAY,GAC1B,OAAOC,CACT,EACAV,EAAgB,UAAU,yBAA2B,SAAmCviD,EAAG,CAGzF,QAFIkjD,EAAQ,IAAIzjC,GACZjI,EAAMxX,EAAE,iBACH,EAAI,EAAG,EAAIwX,EAAI,OAAQ,IAC9B0rC,EAAM,IAAI1rC,EAAI,CAAC,CAAC,EAElB,OAAO0rC,EAAM,QAAQ,IAAI,MAAM,CAAC,EAAE,KAAK,IAAI,CAAC,CAC9C,EACAX,EAAgB,UAAU,4BAA8B,SAAsC/qC,EAAK,CAEjG,QADIwrC,EAAY//C,EAAO,UACdjG,EAAI,EAAGA,EAAIwa,EAAI,OAAS,EAAGxa,IAAK,CACvC,IAAImmD,EAAS3rC,EAAIxa,CAAC,EAAE,SAASwa,EAAIxa,EAAI,CAAC,CAAC,EACnCmmD,EAASH,IAAaA,EAAYG,EACvC,CACD,OAAOH,CACT,EACAT,EAAgB,UAAU,YAAc,UAAwB,CAC9D,MAAO,CAAE,CACX,EACAA,EAAgB,UAAU,SAAW,UAAqB,CACxD,OAAOA,CACT,EACAA,EAAgB,KAAO,SAAenG,EAAIC,EAAIyF,EAAe,CAC3D,IAAIY,EAAW,IAAI,MAAM,CAAC,EAAE,KAAK,IAAI,EACjCU,EAAW,IAAIb,EAAgBnG,CAAE,EACrCsG,EAAS,CAAC,EAAIU,EAAS,OAAO/G,EAAIyF,CAAa,EAC/C,IAAIuB,EAAW,IAAId,EAAgBlG,CAAE,EACrC,OAAAqG,EAAS,CAAC,EAAIW,EAAS,OAAOX,EAAS,CAAC,EAAGZ,CAAa,EACjDY,CACT,EACAH,EAAgB,4BAA8B,UAAwC,CACpF,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAIviD,EAAI,UAAU,CAAC,EACf8hD,EAAgBS,EAAgB,8BAA8BviD,CAAC,EAC/DqoB,EAAKroB,EAAE,oBACX,GAAIqoB,EAAG,YAAcH,EAAe,MAAO,CACzC,IAAIo7B,EAAe,EAAIj7B,EAAG,SAAU,EAAG,EAAI,MACvCi7B,EAAexB,IAAiBA,EAAgBwB,EACrD,CACD,OAAOxB,CACX,SAAa,UAAU,SAAW,EAAG,CACjC,IAAI1F,EAAK,UAAU,CAAC,EAChBC,EAAK,UAAU,CAAC,EACpB,OAAO,KAAK,IAAIkG,EAAgB,4BAA4BnG,CAAE,EAAGmG,EAAgB,4BAA4BlG,CAAE,CAAC,CACjH,CACH,EACAkG,EAAgB,8BAAgC,SAAwCviD,EAAG,CACzF,IAAIsN,EAAMtN,EAAE,sBACRujD,EAAe,KAAK,IAAIj2C,EAAI,YAAaA,EAAI,SAAQ,CAAE,EACvD21C,EAAUM,EAAehB,EAAgB,sBAC7C,OAAOU,CACT,EACAV,EAAgB,WAAa,SAAqBrqD,EAAM4pD,EAAee,EAAa,CAClF,IAAIO,EAAW,IAAIb,EAAgBrqD,CAAI,EACvC,OAAOkrD,EAAS,WAAWtB,EAAee,CAAW,CACvD,EACAJ,GAAmB,sBAAsB,IAAM,UAAY,CAAE,MAAO,KAAI,EAExE,OAAO,iBAAkBF,EAAiBE,IAE1C,IAAIG,GAAmB,SAAUY,EAAwB,CACvD,SAASZ,EAAiBd,EAAezK,EAASoM,EAAY,CAC5DD,EAAuB,KAAK,IAAI,EAChC,KAAK,eAAiB1B,GAAiB,KACvC,KAAK,SAAWzK,GAAW,KAC3B,KAAK,YAAeoM,IAAe,OAAaA,EAAa,EAC9D,CAED,OAAKD,IAAyBZ,EAAgB,UAAYY,GAC1DZ,EAAgB,UAAY,OAAO,OAAQY,GAA0BA,EAAuB,WAC5FZ,EAAgB,UAAU,YAAcA,EACxCA,EAAgB,UAAU,SAAW,SAAmBb,EAAQ1K,EAAS,CACvE,IAAIqM,EAAU,IAAI9B,GAAkBG,EAAQ,KAAK,cAAc,EAC/D,OAAA2B,EAAQ,iCAAiC,KAAK,WAAW,EAClDA,EAAQ,OAAOrM,CAAO,CACjC,EACEuL,EAAgB,UAAU,qBAAuB,SAA+BzpD,EAAQkmB,EAAQ,CAC9F,IAAI0iC,EAAS5oD,EAAO,oBAChBo5C,EAAS,KAAK,SAASwP,EAAQ,KAAK,QAAQ,EAChD,OAAO,KAAK,SAAS,6BAA4B,EAAG,OAAOxP,CAAM,CACrE,EACEqQ,EAAgB,UAAU,YAAc,UAAwB,CAC9D,MAAO,CAAE,CACb,EACEA,EAAgB,UAAU,SAAW,UAAqB,CACxD,OAAOA,CACX,EAESA,CACT,EAAErB,EAAmB,EAEjBoC,GAAa,UAAuB,CACtC,KAAK,SAAW,GAChB,KAAK,yBAA2B,GAChC,KAAK,YAAc,EACnB,KAAK,eAAiB,IACxB,EACAA,GAAW,UAAU,UAAY,UAAsB,CACrD,OAAO1gD,EAAO,iBAAiB,KAAK,WAAW,CACjD,EACA0gD,GAAW,UAAU,IAAM,SAAc5pD,EAAK,CAC5C,IAAI6pD,EAAU3gD,EAAO,iBAAiBlJ,CAAG,EACzC,GAAI,KAAK,SACP,YAAK,YAAc6pD,EACnB,KAAK,eAAiBD,GAAW,YAAY,KAAK,WAAW,EAC7D,KAAK,SAAW,GACT,KAET,IAAIE,EAAaF,GAAW,YAAYC,CAAO,EAC/C,GAAIC,IAAe,KAAK,eACtB,YAAK,YAAc,EACZ,KAET,KAAK,yBAA2BF,GAAW,6BAA6B,KAAK,YAAaC,CAAO,EACjG,KAAK,YAAcD,GAAW,cAAc,KAAK,YAAa,IAAM,GAAK,KAAK,yBAAyB,CACzG,EACAA,GAAW,UAAU,SAAW,UAAqB,CACnD,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAIG,EAAO,UAAU,CAAC,EAClBvmD,EAAI0F,EAAO,iBAAiB6gD,CAAI,EAChCC,EAAS9gD,EAAO,eAAe6gD,CAAI,EACnCE,EAAS,mEAAqED,EAC9EE,EAASD,EAAO,UAAUA,EAAO,OAAS,EAAE,EAC5C59C,EAAM69C,EAAO,UAAU,EAAG,CAAC,EAAI,KAAOA,EAAO,UAAU,EAAG,EAAE,EAAI,SAAWA,EAAO,UAAU,EAAE,EAAI,MAAQ1mD,EAAI,KAClH,OAAO6I,CACR,CACH,EACAu9C,GAAW,UAAU,YAAc,UAAwB,CACzD,MAAO,CAAE,CACX,EACAA,GAAW,UAAU,SAAW,UAAqB,CACnD,OAAOA,EACT,EACAA,GAAW,OAAS,SAAiBG,EAAM9mD,EAAG,CAC5C,IAAIknD,EAAO,GAAKlnD,EAChB,OAAQ8mD,EAAOI,EAAc,EAAI,CACnC,EACAP,GAAW,YAAc,SAAsB5pD,EAAK,CAClD,OAAOA,GAAO,EAChB,EACA4pD,GAAW,cAAgB,SAAwBG,EAAMK,EAAO,CAC9D,IAAIC,GAAW,GAAKD,GAAS,EACzBD,EAAO,CAACE,EACRC,EAASP,EAAOI,EACpB,OAAOG,CACT,EACAV,GAAW,6BAA+B,SAAuCW,EAAMC,EAAM,CAE3F,QADIr1B,EAAQ,EACH,EAAI,GAAI,GAAK,EAAG,IAAK,CAC5B,GAAIy0B,GAAW,OAAOW,EAAM,CAAC,IAAMX,GAAW,OAAOY,EAAM,CAAC,EAAK,OAAOr1B,EACxEA,GACD,CACD,MAAO,GACT,EAEA,IAAIs1B,GAAoB,UAA8B,CACpD,KAAK,aAAe,KACpB,KAAK,UAAY,IAAIC,EACvB,EAEIC,GAAqB,CAAE,uBAAwB,CAAE,aAAc,IAAO,WAAY,CAAE,aAAc,EAAI,GAC1GF,GAAkB,UAAU,cAAgB,SAAwBtsD,EAAM,CACxE,IAAIysD,EAAQ,IAAIC,GAAW,KAAK,YAAY,EAC5C1sD,EAAK,MAAMysD,CAAK,EAChBzsD,EAAK,gBAAe,CACtB,EACAssD,GAAkB,UAAU,iBAAmB,SAA2BtsD,EAAM,CAC9E,GAAI,KAAK,aAAa,IAAM,GAAO,KAAK,aAAa,IAAM,EAAO,OAAOA,EACzE,IAAI2sD,EAAW,IAAIrhD,EAAW,KAAK,YAAY,EAC/CqhD,EAAS,EAAI,CAACA,EAAS,EACvBA,EAAS,EAAI,CAACA,EAAS,EACvB,IAAIF,EAAQ,IAAIC,GAAWC,CAAQ,EACnC,OAAA3sD,EAAK,MAAMysD,CAAK,EAChBzsD,EAAK,gBAAe,EACbA,CACT,EACAssD,GAAkB,UAAU,oBAAsB,UAAgC,CAChF,OAAO,KAAK,YACd,EACAA,GAAkB,UAAU,IAAM,SAActsD,EAAM,CACpDA,EAAK,MAAM,KAAK,SAAS,EACzB,KAAK,aAAe,KAAK,UAAU,oBAAmB,CACxD,EACAssD,GAAkB,UAAU,YAAc,UAAwB,CAChE,MAAO,CAAE,CACX,EACAA,GAAkB,UAAU,SAAW,UAAqB,CAC1D,OAAOA,EACT,EACAE,GAAmB,uBAAuB,IAAM,UAAY,CAAE,OAAOD,EAAsB,EAC3FC,GAAmB,WAAW,IAAM,UAAY,CAAE,OAAOE,EAAU,EAEnE,OAAO,iBAAkBJ,GAAmBE,IAE5C,IAAID,GAAyB,UAAmC,CAC9D,KAAK,aAAe,IAAId,GACxB,KAAK,aAAe,IAAIA,EAC1B,EACAc,GAAuB,UAAU,OAAS,SAAiB3oD,EAAO,CAChE,KAAK,aAAa,IAAIA,EAAM,CAAC,EAC7B,KAAK,aAAa,IAAIA,EAAM,CAAC,CAC/B,EACA2oD,GAAuB,UAAU,oBAAsB,UAAgC,CACrF,OAAO,IAAIjhD,EAAW,KAAK,aAAa,UAAS,EAAI,KAAK,aAAa,WAAW,CACpF,EACAihD,GAAuB,UAAU,YAAc,UAAwB,CACrE,MAAO,CAACrrC,EAAgB,CAC1B,EACAqrC,GAAuB,UAAU,SAAW,UAAqB,CAC/D,OAAOA,EACT,EAEA,IAAIG,GAAa,UAAuB,CACtC,KAAK,MAAQ,KACb,IAAID,EAAQ,UAAU,CAAC,EACvB,KAAK,MAAQA,CACf,EACAC,GAAW,UAAU,OAAS,SAAiBxkC,EAAKpjB,EAAG,CACrD,IAAI8nD,EAAK1kC,EAAI,YAAYpjB,EAAG,CAAC,EAAI,KAAK,MAAM,EACxC+nD,EAAK3kC,EAAI,YAAYpjB,EAAG,CAAC,EAAI,KAAK,MAAM,EAC5CojB,EAAI,YAAYpjB,EAAG,EAAG8nD,CAAE,EACxB1kC,EAAI,YAAYpjB,EAAG,EAAG+nD,CAAE,CAC1B,EACAH,GAAW,UAAU,OAAS,UAAmB,CAC/C,MAAO,EACT,EACAA,GAAW,UAAU,kBAAoB,UAA8B,CACrE,MAAO,EACT,EACAA,GAAW,UAAU,YAAc,UAAwB,CACzD,MAAO,CAACzkC,EAAwB,CAClC,EACAykC,GAAW,UAAU,SAAW,UAAqB,CACnD,OAAOA,EACT,EAEA,IAAII,GAAgB,SAAwB3I,EAAIzO,EAAI,CAClD,KAAK,MAAQ,IAAI,MAAM,CAAC,EAAE,KAAK,IAAI,EACnC,KAAK,eAAiB,KACtB,KAAK,KAAO,KACZ,KAAK,MAAM,CAAC,EAAIyO,EAChB,KAAK,MAAM,CAAC,EAAIzO,EAChB,KAAK,qBAAoB,CAC3B,EACAoX,GAAc,UAAU,SAAW,SAAmB9sD,EAAM,CAC1D,IAAIkrD,EAAW,IAAIb,EAAgBrqD,CAAI,EACnCwqD,EAAWU,EAAS,OAAOlrD,EAAM,KAAK,cAAc,EACxD,OAAOwqD,CACT,EACAsC,GAAc,UAAU,iBAAmB,SAA2B9sD,EAAM,CAC1E,KAAK,KAAO,IAAIssD,GAChB,KAAK,KAAK,IAAItsD,EAAK,CAAC,CAAC,EACrB,KAAK,KAAK,IAAIA,EAAK,CAAC,CAAC,EACrB,IAAI+sD,EAAU,IAAI,MAAM,CAAC,EAAE,KAAK,IAAI,EACpC,OAAAA,EAAQ,CAAC,EAAI,KAAK,KAAK,iBAAiB/sD,EAAK,CAAC,EAAE,KAAI,CAAE,EACtD+sD,EAAQ,CAAC,EAAI,KAAK,KAAK,iBAAiB/sD,EAAK,CAAC,EAAE,KAAI,CAAE,EAC/C+sD,CACT,EACAD,GAAc,UAAU,cAAgB,SAAwB9sD,EAAM,CACpE,YAAK,KAAK,cAAcA,CAAI,EACrBA,CACT,EACA8sD,GAAc,UAAU,kBAAoB,SAA4B9D,EAAQ,CAC9E,IAAIgE,EAAW,KAAK,KAAK,KAAK,KAAK,EAC/BzjD,EAAS2/C,EAAU,UAAU8D,EAAS,CAAC,EAAGA,EAAS,CAAC,EAAGhE,CAAM,EACjE,OAAO,KAAK,cAAcz/C,CAAM,CAClC,EACAujD,GAAc,UAAU,WAAa,SAAqBhlD,EAAG,CACtDA,EAAE,WACL0N,GAAO,IAAI,QAAQ,6BAA6B,CAEpD,EACAs3C,GAAc,UAAU,qBAAuB,UAAiC,CAC9E,KAAK,eAAiBzC,EAAgB,4BAA4B,KAAK,MAAM,CAAC,EAAG,KAAK,MAAM,CAAC,CAAC,CAChG,EACAyC,GAAc,UAAU,KAAO,SAAe9sD,EAAM,CAClD,IAAI+sD,EAAU,KAAK,iBAAiB/sD,CAAI,EACpCwqD,EAAWH,EAAgB,KAAK0C,EAAQ,CAAC,EAAGA,EAAQ,CAAC,EAAG,KAAK,cAAc,EAC/E,OAAOvC,CACT,EACAsC,GAAc,UAAU,YAAc,UAAwB,CAC5D,MAAO,CAAE,CACX,EACAA,GAAc,UAAU,SAAW,UAAqB,CACtD,OAAOA,EACT,EACAA,GAAc,UAAY,SAAoB5I,EAAIC,EAAI6E,EAAQ,CAC5D,IAAIJ,EAAK,IAAIkE,GAAc5I,EAAIC,CAAE,EACjC,OAAOyE,EAAG,kBAAkBI,CAAM,CACpC,EACA8D,GAAc,MAAQ,SAAgB5I,EAAIC,EAAI,CAC5C,OAAO2I,GAAc,UAAU5I,EAAIC,EAAI+E,EAAU,KAAK,CACxD,EACA4D,GAAc,aAAe,SAAuB5I,EAAIC,EAAI,CAC1D,OAAO2I,GAAc,UAAU5I,EAAIC,EAAI+E,EAAU,YAAY,CAC/D,EACA4D,GAAc,cAAgB,SAAwB5I,EAAIC,EAAI,CAC5D,OAAO2I,GAAc,UAAU5I,EAAIC,EAAI+E,EAAU,aAAa,CAChE,EACA4D,GAAc,WAAa,SAAqB5I,EAAIC,EAAI,CACtD,OAAO2I,GAAc,UAAU5I,EAAIC,EAAI+E,EAAU,UAAU,CAC7D,EAEA,IAAI+D,GAAwB,SAAgC9I,EAAIzO,EAAI,CAClE,KAAK,MAAQ,IAAI,MAAM,CAAC,EAAE,KAAK,IAAI,EACnC,KAAK,MAAM,CAAC,EAAIyO,EAChB,KAAK,MAAM,CAAC,EAAIzO,CAClB,EACAuX,GAAsB,UAAU,kBAAoB,SAA4BjE,EAAQ,CACtF,IAAIz/C,EAAS,KACT2jD,EAAY,GACZC,EAAiB,KACrB,GAAI,CACF5jD,EAAS2/C,EAAU,UAAU,KAAK,MAAM,CAAC,EAAG,KAAK,MAAM,CAAC,EAAGF,CAAM,EACjE,IAAIoE,EAAU,GACVA,IAAWF,EAAY,GAC5B,OAAQz6C,EAAI,CACX,GAAIA,aAAcuH,GAChBmzC,EAAiB16C,MACV,OAAMA,CACnB,SAAc,CACZ,GAAI,CAACy6C,EACH,GAAI,CACF3jD,EAASujD,GAAc,UAAU,KAAK,MAAM,CAAC,EAAG,KAAK,MAAM,CAAC,EAAG9D,CAAM,CACtE,OAAQv2C,EAAI,CACX,MAAIA,aAAcuH,GACVmzC,EACO16C,CACrB,SAAgB,CAEd,OAAOlJ,CACT,EACA0jD,GAAsB,UAAU,YAAc,UAAwB,CACpE,MAAO,CAAE,CACX,EACAA,GAAsB,UAAU,SAAW,UAAqB,CAC9D,OAAOA,EACT,EACAA,GAAsB,UAAY,SAAoB/I,EAAIC,EAAI6E,EAAQ,CACpE,IAAIJ,EAAK,IAAIqE,GAAsB/I,EAAIC,CAAE,EACzC,OAAOyE,EAAG,kBAAkBI,CAAM,CACpC,EACAiE,GAAsB,MAAQ,SAAgB/I,EAAIC,EAAI,CACpD,OAAO8I,GAAsB,UAAU/I,EAAIC,EAAI+E,EAAU,KAAK,CAChE,EACA+D,GAAsB,aAAe,SAAuB/I,EAAIC,EAAI,CAClE,OAAO8I,GAAsB,UAAU/I,EAAIC,EAAI+E,EAAU,YAAY,CACvE,EACA+D,GAAsB,cAAgB,SAAwB/I,EAAIC,EAAI,CACpE,OAAO8I,GAAsB,UAAU/I,EAAIC,EAAI+E,EAAU,aAAa,CACxE,EACA+D,GAAsB,WAAa,SAAqB/I,EAAIC,EAAI,CAC9D,OAAO8I,GAAsB,UAAU/I,EAAIC,EAAI+E,EAAU,UAAU,CACrE,EAEA,IAAImE,GAAkB,UAA0B,CAC9C,KAAK,IAAM,KACX,KAAK,WAAa,KAClB,IAAIxT,EAAM,UAAU,CAAC,EACjBF,EAAa,UAAU,CAAC,EAC5B,KAAK,IAAME,EACX,KAAK,WAAaF,CACpB,EACA0T,GAAgB,UAAU,qBAAuB,SAA+B1kB,EAAIqB,EAAI,CACtF,KAAK,IAAI,0BAA0B,KAAK,WAAYrB,EAAG,IAAKA,EAAG,WAAYqB,CAAE,CAC/E,EACAqjB,GAAgB,UAAU,YAAc,UAAwB,CAC9D,MAAO,CAAE,CACX,EACAA,GAAgB,UAAU,SAAW,UAAqB,CACxD,OAAOA,EACT,EAEA,IAAIC,GAAiB,SAASA,GAAkB,CAO9C,GANA,KAAK,OAAS,KACd,KAAK,QAAU,KACf,KAAK,WAAa,KAClB,KAAK,aAAe,KACpB,KAAK,kBAAoB,KACzB,KAAK,KAAO,KACR,UAAU,SAAW,EAAG,CAC1B,IAAIjoD,EAAI,UAAU,CAAC,EACfkoD,EAAc,UAAU,CAAC,EAC7B,KAAK,WAAaD,EAAe,OACjC,KAAK,QAAUjoD,EACf,KAAK,aAAekoD,CACxB,SAAa,UAAU,SAAW,EAAG,CACjC,IAAIr2B,EAAQ,UAAU,CAAC,EACnBxpB,EAAM,UAAU,CAAC,EACjBwV,EAAM,UAAU,CAAC,EACrB,KAAK,WAAaoqC,EAAe,OACjC,KAAK,OAASp2B,EACd,KAAK,QAAUxpB,EACf,KAAK,KAAOwV,CACb,CACH,EAEIsqC,GAAqB,CAAE,OAAQ,CAAE,aAAc,IAAO,OAAQ,CAAE,aAAc,EAAI,GACtFF,GAAe,UAAU,SAAW,UAAqB,CACvD,OAAO,KAAK,aAAeA,GAAe,MAC5C,EACAA,GAAe,UAAU,oBAAsB,SAA8BG,EAAkB,CAC7F,KAAK,kBAAoBA,CAC3B,EACAH,GAAe,UAAU,UAAY,UAAsB,CACzD,OAAO,KAAK,IACd,EACAA,GAAe,UAAU,UAAY,SAAoB3hD,EAAG,CAC1D,IAAI+hD,EAAK/hD,EACT,OAAI,KAAK,QAAU+hD,EAAG,QAAkB,GACpC,KAAK,QAAUA,EAAG,QAAkB,EACpC,KAAK,WAAaA,EAAG,WAAqB,GAC1C,KAAK,WAAaA,EAAG,WAAqB,EACvC,CACT,EACAJ,GAAe,UAAU,eAAiB,UAA2B,CACnE,OAAO,KAAK,YACd,EACAA,GAAe,UAAU,SAAW,UAAqB,CACvD,OAAO,KAAK,aAAeA,GAAe,MAC5C,EACAA,GAAe,UAAU,YAAc,SAAsBK,EAAI,CAC/D,OAAI,KAAK,SAAW,KAAe,GAC5B,KAAK,SAAWA,EAAG,MAC5B,EACAL,GAAe,UAAU,oBAAsB,UAAgC,CAC7E,OAAO,KAAK,iBACd,EACAA,GAAe,UAAU,YAAc,UAAwB,CAC7D,MAAO,CAACpiD,EAAU,CACpB,EACAoiD,GAAe,UAAU,SAAW,UAAqB,CACvD,OAAOA,EACT,EACAE,GAAmB,OAAO,IAAM,UAAY,CAAE,MAAO,EAAC,EACtDA,GAAmB,OAAO,IAAM,UAAY,CAAE,MAAO,EAAC,EAEtD,OAAO,iBAAkBF,GAAgBE,IAEzC,IAAII,GAAqB,UAA+B,GAExDA,GAAmB,UAAU,YAAc,UAAwB,CACjE,MAAO,CAAE,CACX,EACAA,GAAmB,UAAU,SAAW,UAAqB,CAC3D,OAAOA,EACT,EAEA,IAAIC,GAAuB,UAA+B,CACxD,KAAK,iBAAmB,GACxB,KAAK,WAAa,GAClB,KAAK,mBAAqB,GAC1B,KAAK,yBAA2B,KAChC,KAAK,IAAM,KACX,KAAK,eAAiB,KACtB,KAAK,gBAAkB,KACvB,KAAK,oBAAsB,KAC3B,KAAK,kBAAoB,EACzB,KAAK,SAAW,EAChB,KAAK,UAAY,KACjB,KAAK,QAAU,GACf,KAAK,qBAAuB,GAC5B,IAAIpoB,EAAK,UAAU,CAAC,EAChBqoB,EAAgB,UAAU,CAAC,EAC3BC,EAAiB,UAAU,CAAC,EAChC,KAAK,IAAMtoB,EACX,KAAK,eAAiBqoB,EACtB,KAAK,gBAAkBC,CACzB,EACAF,GAAqB,UAAU,sBAAwB,SAAgC7U,EAAIC,EAAWC,EAAIC,EAAW,CACnH,GAAIH,IAAOE,GACL,KAAK,IAAI,mBAAkB,IAAO,EAAG,CACvC,GAAI2U,GAAqB,mBAAmB5U,EAAWE,CAAS,EAAK,MAAO,GAC5E,GAAIH,EAAG,WAAY,CACjB,IAAIzU,EAAcyU,EAAG,aAAY,EAAK,EACtC,GAAKC,IAAc,GAAKE,IAAc5U,GACjC4U,IAAc,GAAKF,IAAc1U,EACpC,MAAO,EAEV,CACF,CAEH,MAAO,EACT,EACAspB,GAAqB,UAAU,2BAA6B,UAAuC,CACjG,OAAO,KAAK,wBACd,EACAA,GAAqB,UAAU,qBAAuB,SAA+BG,EAAqB,CACxG,KAAK,qBAAuBA,CAC9B,EACAH,GAAqB,UAAU,8BAAgC,UAA0C,CACvG,OAAO,KAAK,kBACd,EACAA,GAAqB,UAAU,wBAA0B,SAAkCpoB,EAAIlM,EAAU,CACvG,QAASz0B,EAAIy0B,EAAS,SAAQ,EAAIz0B,EAAE,WAAY,CAC9C,IAAImvB,EAAOnvB,EAAE,OACTqW,EAAK8Y,EAAK,gBACd,GAAIwR,EAAG,eAAetqB,CAAE,EAAK,MAAO,EACrC,CACD,MAAO,EACT,EACA0yC,GAAqB,UAAU,sBAAwB,UAAkC,CACvF,OAAO,KAAK,UACd,EACAA,GAAqB,UAAU,gBAAkB,UAA4B,CAC3E,OAAO,KAAK,gBACd,EACAA,GAAqB,UAAU,OAAS,UAAmB,CACzD,OAAO,KAAK,OACd,EACAA,GAAqB,UAAU,gBAAkB,SAA0BpoB,EAAIlM,EAAU,CACvF,OAAIA,IAAa,KAAe,GAC5B,QAAK,wBAAwBkM,EAAIlM,EAAS,CAAC,CAAC,GAC5C,KAAK,wBAAwBkM,EAAIlM,EAAS,CAAC,CAAC,EAElD,EACAs0B,GAAqB,UAAU,iBAAmB,SAA2BI,EAAWC,EAAW,CACjG,KAAK,UAAY,IAAI,MAAM,CAAC,EAAE,KAAK,IAAI,EACvC,KAAK,UAAU,CAAC,EAAID,EACpB,KAAK,UAAU,CAAC,EAAIC,CACtB,EACAL,GAAqB,UAAU,iBAAmB,SAA2B7U,EAAIC,EAAWC,EAAIC,EAAW,CACzG,GAAIH,IAAOE,GAAMD,IAAcE,EAAa,OAAO,KACnD,KAAK,WACL,IAAIrQ,EAAMkQ,EAAG,eAAgB,EAACC,CAAS,EACnClQ,EAAMiQ,EAAG,eAAgB,EAACC,EAAY,CAAC,EACvCjQ,EAAMkQ,EAAG,eAAgB,EAACC,CAAS,EACnClQ,EAAMiQ,EAAG,eAAgB,EAACC,EAAY,CAAC,EAC3C,KAAK,IAAI,oBAAoBrQ,EAAKC,EAAKC,EAAKC,CAAG,EAC3C,KAAK,IAAI,oBACP,KAAK,kBACP+P,EAAG,YAAY,EAAK,EACpBE,EAAG,YAAY,EAAK,GAEtB,KAAK,oBACA,KAAK,sBAAsBF,EAAIC,EAAWC,EAAIC,CAAS,IAC1D,KAAK,iBAAmB,IACpB,KAAK,gBAAkB,CAAC,KAAK,IAAI,SAAQ,KAC3CH,EAAG,iBAAiB,KAAK,IAAKC,EAAW,CAAC,EAC1CC,EAAG,iBAAiB,KAAK,IAAKC,EAAW,CAAC,GAExC,KAAK,IAAI,aACX,KAAK,yBAA2B,KAAK,IAAI,gBAAgB,CAAC,EAAE,OAC5D,KAAK,WAAa,GACd,KAAK,uBACP,KAAK,QAAU,IAEZ,KAAK,gBAAgB,KAAK,IAAK,KAAK,SAAS,IAAK,KAAK,mBAAqB,MAIzF,EACA0U,GAAqB,UAAU,YAAc,UAAwB,CACnE,MAAO,CAAE,CACX,EACAA,GAAqB,UAAU,SAAW,UAAqB,CAC7D,OAAOA,EACT,EACAA,GAAqB,mBAAqB,SAA6B/nC,EAAIC,EAAI,CAC7E,OAAO,KAAK,IAAID,EAAKC,CAAE,IAAM,CAC/B,EAEA,IAAIooC,GAAgC,SAAUC,EAAuB,CACnE,SAASD,GAAgC,CACvCC,EAAsB,KAAK,IAAI,EAC/B,KAAK,OAAS,IAAIpsC,EAClB,KAAK,UAAY,IAClB,CAED,OAAKosC,IAAwBD,EAA6B,UAAYC,GACtED,EAA6B,UAAY,OAAO,OAAQC,GAAyBA,EAAsB,WACvGD,EAA6B,UAAU,YAAcA,EACrDA,EAA6B,UAAU,cAAgB,UAA0B,CAC/E,IAAIr1C,EAAS,KAEbolB,GAAY,KAAK,KAAK,MAAM,EAC5B,QAAS,EAAI,EAAG,EAAI,KAAK,OAAO,OAAQ,IAAK,CAC3C,IAAIyvB,EAAK70C,EAAO,OAAO,IAAI,CAAC,EACxB60C,EAAG,YACLA,EAAG,eAAc,EAAG,oBAAoB,CAAC,CAE5C,CACL,EACEQ,EAA6B,UAAU,qBAAuB,UAAiC,CAC7F,IAAIr1C,EAAS,KAEb,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAIkxB,EAAK,UAAU,CAAC,EACpB,KAAK,UAAY,EACjB,KAAK,cAAa,EAClB,QAASllC,EAAI,EAAGA,EAAI,KAAK,OAAO,OAAQA,IAAK,CAC3C,IAAI6oD,EAAK70C,EAAO,OAAO,IAAIhU,CAAC,EAI5B,GAHI6oD,EAAG,YACL70C,EAAO,gBAAgBhU,EAAG6oD,EAAG,sBAAuBA,EAAI3jB,CAAE,EAExDA,EAAG,SACL,KAEH,CACP,SAAe,UAAU,SAAW,GAC9B,GAAI,UAAU,CAAC,YAAa6jB,IAAyB7gD,EAAa,UAAU,CAAC,EAAG6U,EAAI,GAAK7U,EAAa,UAAU,CAAC,EAAG6U,EAAI,EAAI,CAC1H,IAAIwsC,EAAS,UAAU,CAAC,EACpBC,EAAS,UAAU,CAAC,EACpBC,EAAO,UAAU,CAAC,EACtB,KAAK,SAASF,EAAQA,CAAM,EAC5B,KAAK,SAASC,EAAQA,CAAM,EAC5B,KAAK,qBAAqBC,CAAI,CAC/B,SAAU,OAAO,UAAU,CAAC,GAAM,WAAcvhD,EAAa,UAAU,CAAC,EAAG6U,EAAI,GAAK,UAAU,CAAC,YAAagsC,GAAuB,CAClI,IAAIj1B,EAAQ,UAAU,CAAC,EACnB41B,EAAO,UAAU,CAAC,EAClBC,EAAkB,UAAU,CAAC,EAC7BA,EAAmB,KAAK,SAAS71B,EAAO,IAAI,EAAY,KAAK,SAASA,CAAK,EAC/E,KAAK,qBAAqB41B,CAAI,CAC/B,EAEP,EACEL,EAA6B,UAAU,QAAU,SAAkB52B,EAAMm3B,EAAS,CAKhF,QAJI51C,EAAS,KAET+gC,EAAMtiB,EAAK,uBACXG,EAAamiB,EAAI,kBACZ/0C,EAAI,EAAGA,EAAI4yB,EAAW,OAAS,EAAG5yB,IAAK,CAC9C,IAAI6jC,EAAK,IAAI0kB,GAAgBxT,EAAK/0C,CAAC,EAC/ByoD,EAAc,IAAID,GAAeoB,EAAS7U,EAAI,QAAQ/0C,CAAC,EAAG6jC,CAAE,EAChE7vB,EAAO,OAAO,IAAIy0C,CAAW,EAC7Bz0C,EAAO,OAAO,IAAI,IAAIw0C,GAAezT,EAAI,QAAQ/0C,CAAC,EAAGyoD,CAAW,CAAC,CAClE,CACL,EACEY,EAA6B,UAAU,gBAAkB,SAA0BhpD,EAAOC,EAAKupD,EAAK3kB,EAAI,CAItG,QAHIlxB,EAAS,KAET81C,EAAMD,EAAI,YACL7pD,EAAIK,EAAOL,EAAIM,EAAKN,IAAK,CAChC,IAAI+pD,EAAM/1C,EAAO,OAAO,IAAIhU,CAAC,EAC7B,GAAI+pD,EAAI,WAAY,CAClB,IAAI3mB,EAAM2mB,EAAI,YACTF,EAAI,YAAYE,CAAG,IACtBD,EAAI,qBAAqB1mB,EAAK8B,CAAE,EAChClxB,EAAO,YAEV,CACF,CACL,EACEq1C,EAA6B,UAAU,SAAW,UAAqB,CACrE,IAAIr1C,EAAS,KAEb,GAAI,UAAU,SAAW,EAEvB,QADI8f,EAAQ,UAAU,CAAC,EACd9zB,EAAI8zB,EAAM,SAAQ,EAAI9zB,EAAE,WAAY,CAC3C,IAAIyyB,EAAOzyB,EAAE,OACbgU,EAAO,QAAQye,EAAMA,CAAI,CAC1B,SACQ,UAAU,SAAW,EAG9B,QAFIu3B,EAAU,UAAU,CAAC,EACrBJ,EAAU,UAAU,CAAC,EAChBhwC,EAAMowC,EAAQ,SAAQ,EAAIpwC,EAAI,WAAY,CACjD,IAAIsb,EAAStb,EAAI,OACjB5F,EAAO,QAAQkhB,EAAQ00B,CAAO,CAC/B,CAEP,EACEP,EAA6B,UAAU,YAAc,UAAwB,CAC3E,MAAO,CAAE,CACb,EACEA,EAA6B,UAAU,SAAW,UAAqB,CACrE,OAAOA,CACX,EAESA,CACT,EAAEP,EAAkB,EAEhBmB,GAAoB,UAA8B,CACpD,KAAK,KAAOhkD,EAAO,kBACnB,KAAK,KAAOA,EAAO,iBACrB,EAEIikD,GAAqB,CAAE,eAAgB,CAAE,aAAc,EAAM,CAAA,EACjED,GAAkB,UAAU,OAAS,UAAmB,CACtD,OAAO,KAAK,IACd,EACAA,GAAkB,UAAU,WAAa,SAAqBE,EAAUC,EAAU,CAChF,MAAI,OAAK,KAAOA,GAAY,KAAK,KAAOD,EAE1C,EACAF,GAAkB,UAAU,OAAS,UAAmB,CACtD,OAAO,KAAK,IACd,EACAA,GAAkB,UAAU,SAAW,UAAqB,CAC1D,OAAOj1C,GAAU,aAAa,IAAIxO,EAAW,KAAK,KAAM,CAAC,EAAG,IAAIA,EAAW,KAAK,KAAM,CAAC,CAAC,CAC1F,EACAyjD,GAAkB,UAAU,YAAc,UAAwB,CAChE,MAAO,CAAE,CACX,EACAA,GAAkB,UAAU,SAAW,UAAqB,CAC1D,OAAOA,EACT,EACAC,GAAmB,eAAe,IAAM,UAAY,CAAE,OAAOG,EAAc,EAE3E,OAAO,iBAAkBJ,GAAmBC,IAE5C,IAAIG,GAAiB,UAA2B,GAEhDA,GAAe,UAAU,QAAU,SAAkBhjD,EAAIC,EAAI,CAC3D,IAAIwP,EAAKzP,EACL0P,EAAKzP,EACL+8B,GAAQvtB,EAAG,KAAOA,EAAG,MAAQ,EAC7BwzC,GAAQvzC,EAAG,KAAOA,EAAG,MAAQ,EACjC,OAAIstB,EAAOimB,EAAe,GACtBjmB,EAAOimB,EAAe,EACnB,CACT,EACAD,GAAe,UAAU,YAAc,UAAwB,CAC7D,MAAO,CAAC/jD,EAAU,CACpB,EACA+jD,GAAe,UAAU,SAAW,UAAqB,CACvD,OAAOA,EACT,EAEA,IAAIE,GAAyB,SAAUC,EAAsB,CAC3D,SAASD,GAAyB,CAChCC,EAAqB,KAAK,IAAI,EAC9B,KAAK,MAAQ,KACb,IAAI9hD,EAAM,UAAU,CAAC,EACjBC,EAAM,UAAU,CAAC,EACjB8vB,EAAO,UAAU,CAAC,EACtB,KAAK,KAAO/vB,EACZ,KAAK,KAAOC,EACZ,KAAK,MAAQ8vB,CACd,CAED,OAAK+xB,IAAuBD,EAAsB,UAAYC,GAC9DD,EAAsB,UAAY,OAAO,OAAQC,GAAwBA,EAAqB,WAC9FD,EAAsB,UAAU,YAAcA,EAC9CA,EAAsB,UAAU,MAAQ,SAAgBJ,EAAUC,EAAUnvB,EAAS,CACnF,GAAI,CAAC,KAAK,WAAWkvB,EAAUC,CAAQ,EAAK,OAAO,KACnDnvB,EAAQ,UAAU,KAAK,KAAK,CAChC,EACEsvB,EAAsB,UAAU,YAAc,UAAwB,CACpE,MAAO,CAAE,CACb,EACEA,EAAsB,UAAU,SAAW,UAAqB,CAC9D,OAAOA,CACX,EAESA,CACT,EAAEN,EAAiB,EAEfQ,GAA2B,SAAUD,EAAsB,CAC7D,SAASC,GAA2B,CAClCD,EAAqB,KAAK,IAAI,EAC9B,KAAK,OAAS,KACd,KAAK,OAAS,KACd,IAAI1zC,EAAK,UAAU,CAAC,EAChBC,EAAK,UAAU,CAAC,EACpB,KAAK,OAASD,EACd,KAAK,OAASC,EACd,KAAK,YAAY,KAAK,OAAQ,KAAK,MAAM,CAC1C,CAED,OAAKyzC,IAAuBC,EAAwB,UAAYD,GAChEC,EAAwB,UAAY,OAAO,OAAQD,GAAwBA,EAAqB,WAChGC,EAAwB,UAAU,YAAcA,EAChDA,EAAwB,UAAU,YAAc,SAAsB3zC,EAAIC,EAAI,CAC5E,KAAK,KAAO,KAAK,IAAID,EAAG,KAAMC,EAAG,IAAI,EACrC,KAAK,KAAO,KAAK,IAAID,EAAG,KAAMC,EAAG,IAAI,CACzC,EACE0zC,EAAwB,UAAU,MAAQ,SAAgBN,EAAUC,EAAUnvB,EAAS,CACrF,GAAI,CAAC,KAAK,WAAWkvB,EAAUC,CAAQ,EACrC,OAAO,KAEL,KAAK,SAAW,MAAQ,KAAK,OAAO,MAAMD,EAAUC,EAAUnvB,CAAO,EACrE,KAAK,SAAW,MAAQ,KAAK,OAAO,MAAMkvB,EAAUC,EAAUnvB,CAAO,CAC7E,EACEwvB,EAAwB,UAAU,YAAc,UAAwB,CACtE,MAAO,CAAE,CACb,EACEA,EAAwB,UAAU,SAAW,UAAqB,CAChE,OAAOA,CACX,EAESA,CACT,EAAER,EAAiB,EAEfS,GAA4B,UAAsC,CACpE,KAAK,QAAU,IAAIxtC,EACnB,KAAK,MAAQ,KACb,KAAK,OAAS,CAChB,EACAwtC,GAA0B,UAAU,UAAY,UAAsB,CAClE,IAAI12C,EAAS,KAEfolB,GAAY,KAAK,KAAK,QAAS,IAAI6wB,GAAkB,cAAgB,EAIrE,QAHIt5C,EAAM,KAAK,QACXsgB,EAAO,KACPpgB,EAAO,IAAIqM,IACF,CAEX,GADAlJ,EAAO,WAAWrD,EAAKE,CAAI,EACvBA,EAAK,KAAI,IAAO,EAAK,OAAOA,EAAK,IAAI,CAAC,EAC1CogB,EAAOtgB,EACPA,EAAME,EACNA,EAAOogB,CACR,CACH,EACAy5B,GAA0B,UAAU,OAAS,SAAiBhiD,EAAKC,EAAK8vB,EAAM,CAC5E,GAAI,KAAK,QAAU,KAAQ,MAAM,IAAI,MAAM,mDAAmD,EAC9F,KAAK,QAAQ,IAAI,IAAI8xB,GAAsB7hD,EAAKC,EAAK8vB,CAAI,CAAC,CAC5D,EACAiyB,GAA0B,UAAU,MAAQ,SAAgBhiD,EAAKC,EAAKsyB,EAAS,CAC7E,KAAK,KAAI,EACT,KAAK,MAAM,MAAMvyB,EAAKC,EAAKsyB,CAAO,CACpC,EACAyvB,GAA0B,UAAU,UAAY,UAAsB,CACpE,GAAI,KAAK,QAAU,KAAQ,OAAO,KAClC,KAAK,MAAQ,KAAK,WACpB,EACAA,GAA0B,UAAU,UAAY,SAAoBv7B,EAAM,CACxEze,GAAO,IAAI,QAAQsE,GAAU,aAAa,IAAIxO,EAAW2oB,EAAK,KAAM,KAAK,MAAM,EAAG,IAAI3oB,EAAW2oB,EAAK,KAAM,KAAK,MAAM,CAAC,CAAC,CAC3H,EACAu7B,GAA0B,UAAU,KAAO,UAAiB,CAC1D,GAAI,KAAK,QAAU,KAAQ,OAAO,KAClC,KAAK,UAAS,CAChB,EACAA,GAA0B,UAAU,WAAa,SAAqB/5C,EAAKE,EAAM,CAC/E,KAAK,SACLA,EAAK,MAAK,EACV,QAAS7Q,EAAI,EAAGA,EAAI2Q,EAAI,KAAM,EAAE3Q,GAAK,EAAG,CACtC,IAAI8W,EAAKnG,EAAI,IAAI3Q,CAAC,EACd+W,EAAK/W,EAAI,EAAI2Q,EAAI,OAASA,EAAI,IAAI3Q,CAAC,EAAI,KAC3C,GAAI+W,IAAO,KACTlG,EAAK,IAAIiG,CAAE,MACN,CACL,IAAIqY,EAAO,IAAIs7B,GAAwB95C,EAAI,IAAI3Q,CAAC,EAAG2Q,EAAI,IAAI3Q,EAAI,CAAC,CAAC,EACjE6Q,EAAK,IAAIse,CAAI,CACd,CACF,CACH,EACAu7B,GAA0B,UAAU,YAAc,UAAwB,CACxE,MAAO,CAAE,CACX,EACAA,GAA0B,UAAU,SAAW,UAAqB,CAClE,OAAOA,EACT,EAEA,IAAIC,GAAmB,UAA6B,CAClD,KAAK,OAAS,IAAIztC,CACpB,EACAytC,GAAiB,UAAU,UAAY,SAAoBlyB,EAAM,CAC/D,KAAK,OAAO,IAAIA,CAAI,CACtB,EACAkyB,GAAiB,UAAU,SAAW,UAAqB,CACzD,OAAO,KAAK,MACd,EACAA,GAAiB,UAAU,YAAc,UAAwB,CAC/D,MAAO,CAAC9xB,EAAW,CACrB,EACA8xB,GAAiB,UAAU,SAAW,UAAqB,CACzD,OAAOA,EACT,EAEA,IAAIC,GAA4B,UAAsC,CACpE,KAAK,OAAS,KACd,IAAI5nD,EAAI,UAAU,CAAC,EACnB,GAAI,CAACkF,EAAalF,EAAGglB,EAAS,EAAK,MAAM,IAAIliB,EAAyB,4BAA4B,EAClG,KAAK,OAAS,IAAI+kD,GAAwB7nD,CAAC,CAC7C,EAEI8nD,GAAqB,CAAE,eAAgB,CAAE,aAAc,IAAO,wBAAyB,CAAE,aAAc,EAAI,GAC/GF,GAA0B,UAAU,OAAS,SAAiB35C,EAAG,CAC/D,IAAI85C,EAAM,IAAI3xC,GAAmBnI,CAAC,EAC9BgqB,EAAU,IAAI+vB,GAAeD,CAAG,EACpC,YAAK,OAAO,MAAM95C,EAAE,EAAGA,EAAE,EAAGgqB,CAAO,EAC5B8vB,EAAI,YAAa,CAC1B,EACAH,GAA0B,UAAU,YAAc,UAAwB,CACxE,MAAO,CAACpa,EAAsB,CAChC,EACAoa,GAA0B,UAAU,SAAW,UAAqB,CAClE,OAAOA,EACT,EACAE,GAAmB,eAAe,IAAM,UAAY,CAAE,OAAOE,EAAc,EAC3EF,GAAmB,wBAAwB,IAAM,UAAY,CAAE,OAAOD,EAAuB,EAE7F,OAAO,iBAAkBD,GAA2BE,IAEpD,IAAIE,GAAiB,UAA2B,CAC9C,KAAK,SAAW,KAChB,IAAIxxC,EAAU,UAAU,CAAC,EACzB,KAAK,SAAWA,CAClB,EACAwxC,GAAe,UAAU,UAAY,SAAoBvyB,EAAM,CAC7D,IAAI8I,EAAM9I,EACV,KAAK,SAAS,aAAa8I,EAAI,cAAc,CAAC,EAAGA,EAAI,cAAc,CAAC,CAAC,CACvE,EACAypB,GAAe,UAAU,YAAc,UAAwB,CAC7D,MAAO,CAACnyB,EAAW,CACrB,EACAmyB,GAAe,UAAU,SAAW,UAAqB,CACvD,OAAOA,EACT,EAEA,IAAIH,GAA0B,UAAoC,CAChE,KAAK,OAAS,IAAIH,GAClB,IAAIxvD,EAAO,UAAU,CAAC,EACtB,KAAK,KAAKA,CAAI,CAChB,EACA2vD,GAAwB,UAAU,KAAO,SAAe3vD,EAAM,CAI5D,QAHM8Y,EAAS,KAEXS,EAAQ8oC,GAAyB,SAASriD,CAAI,EACzC,EAAIuZ,EAAM,SAAQ,EAAI,EAAE,WAAY,CAC3C,IAAIjV,EAAO,EAAE,OACTgb,EAAMhb,EAAK,iBACfwU,EAAO,QAAQwG,CAAG,CACnB,CACH,EACAqwC,GAAwB,UAAU,QAAU,SAAkBrwC,EAAK,CAGjE,QAFMxG,EAAS,KAENhU,EAAI,EAAGA,EAAIwa,EAAI,OAAQxa,IAAK,CACnC,IAAIuhC,EAAM,IAAIF,EAAY7mB,EAAIxa,EAAI,CAAC,EAAGwa,EAAIxa,CAAC,CAAC,EACxC0I,EAAM,KAAK,IAAI64B,EAAI,GAAG,EAAGA,EAAI,GAAG,CAAC,EACjC54B,EAAM,KAAK,IAAI44B,EAAI,GAAG,EAAGA,EAAI,GAAG,CAAC,EACrCvtB,EAAO,OAAO,OAAOtL,EAAKC,EAAK44B,CAAG,CACnC,CACH,EACAspB,GAAwB,UAAU,MAAQ,UAAkB,CAC1D,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAIniD,EAAM,UAAU,CAAC,EACjBC,EAAM,UAAU,CAAC,EACjBsyB,EAAU,IAAI0vB,GAClB,YAAK,OAAO,MAAMjiD,EAAKC,EAAKsyB,CAAO,EAC5BA,EAAQ,SAAU,CAC7B,SAAa,UAAU,SAAW,EAAG,CACjC,IAAIpyB,EAAQ,UAAU,CAAC,EACnBC,EAAQ,UAAU,CAAC,EACnBqyB,EAAY,UAAU,CAAC,EAC3B,KAAK,OAAO,MAAMtyB,EAAOC,EAAOqyB,CAAS,CAC1C,CACH,EACA0vB,GAAwB,UAAU,YAAc,UAAwB,CACtE,MAAO,CAAE,CACX,EACAA,GAAwB,UAAU,SAAW,UAAqB,CAChE,OAAOA,EACT,EAEA,IAAII,GAAiB,SAAUC,EAAgB,CAC7C,SAASD,GAAiB,CAYxB,GAXAC,EAAe,KAAK,IAAI,EACxB,KAAK,YAAc,KACnB,KAAK,aAAe,IAAIlgC,GACxB,KAAK,kBAAoB,KACzB,KAAK,8BAAgC,GACrC,KAAK,UAAY,KACjB,KAAK,eAAiB,KACtB,KAAK,iBAAmB,GACxB,KAAK,cAAgB,KACrB,KAAK,eAAiB,KACtB,KAAK,WAAa,IAAIozB,GAClB,UAAU,SAAW,EAAG,CAC1B,IAAIjqB,EAAW,UAAU,CAAC,EACtBg3B,EAAa,UAAU,CAAC,EACxB31B,EAAmBnZ,GAAiB,sBACxC,KAAK,UAAY8X,EACjB,KAAK,YAAcg3B,EACnB,KAAK,kBAAoB31B,EACrB21B,IAAe,MACjB,KAAK,IAAIA,CAAU,CAE3B,SAAe,UAAU,SAAW,EAAG,CACjC,IAAIC,EAAa,UAAU,CAAC,EACxBC,EAAe,UAAU,CAAC,EAC1BC,EAAqB,UAAU,CAAC,EACpC,KAAK,UAAYF,EACjB,KAAK,YAAcC,EACnB,KAAK,kBAAoBC,EACrBD,IAAiB,MACnB,KAAK,IAAIA,CAAY,CAExB,CACF,CAED,OAAKH,IAAiBD,EAAc,UAAYC,GAChDD,EAAc,UAAY,OAAO,OAAQC,GAAkBA,EAAe,WAC1ED,EAAc,UAAU,YAAcA,EACtCA,EAAc,UAAU,oBAAsB,SAA8B92B,EAAUr1B,EAAO,CAC3F,IAAIqH,EAAI,KAAK,OAAO,QAAQrH,CAAK,EAC7B2yB,EAAMtrB,EAAE,WACRoW,EAAgB,EAChB+U,EAAMvpB,EAAS,KACnBupB,EAAMG,EAAI,YAAY0C,EAAU5F,EAAS,EAAE,EACvC+C,IAAQvpB,EAAS,UAAYwU,IACjC,IAAIyU,EAASi6B,EAAc,kBAAkB,KAAK,kBAAmB1uC,CAAa,EAClFkV,EAAI,YAAY0C,EAAUnD,CAAM,CACpC,EACEi6B,EAAc,UAAU,iBAAmB,UAA6B,CACtE,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAItqB,EAAK,UAAU,CAAC,EAChB4qB,EAAuB,UAAU,CAAC,EACtC,OAAO,KAAK,iBAAiB5qB,EAAI4qB,EAAsB,EAAK,CAClE,SAAe,UAAU,SAAW,EAAG,CACjC,IAAIC,EAAO,UAAU,CAAC,EAClBC,EAAyB,UAAU,CAAC,EACpCC,EAAoB,UAAU,CAAC,EAC/BxmB,EAAK,IAAI6jB,GAAqByC,EAAM,GAAM,EAAK,EACnDtmB,EAAG,qBAAqBwmB,CAAiB,EACzC,IAAIC,EAAM,KAAK,2BACXC,EAAU,KAAK,uBAAuBriC,IAAc,KAAK,uBAAuBtB,IAAW,KAAK,uBAAuByB,GACvHmiC,EAAqBJ,GAA0B,CAACG,EACpD,OAAAD,EAAI,qBAAqB,KAAK,OAAQzmB,EAAI2mB,CAAkB,EAC5D,KAAK,yBAAyB,KAAK,SAAS,EACrC3mB,CACR,CACL,EACE+lB,EAAc,UAAU,kBAAoB,SAA4Ba,EAAU,CAChF,QAAS,EAAI,KAAK,OAAO,WAAY,EAAE,WAAY,CACjD,IAAIziD,EAAI,EAAE,OACVA,EAAE,OAAO,cAAcyiD,CAAQ,CAChC,CACL,EACEb,EAAc,UAAU,yBAA2B,SAAmCjoD,EAAG29B,EAAIqoB,EAAe,CAC1G,IAAI9jB,EAAK,IAAI6jB,GAAqBpoB,EAAIqoB,EAAe,EAAI,EACzD9jB,EAAG,iBAAiB,KAAK,iBAAkB,EAAEliC,EAAE,iBAAgB,CAAE,EACjE,IAAI2oD,EAAM,KAAK,2BACf,OAAAA,EAAI,qBAAqB,KAAK,OAAQ3oD,EAAE,OAAQkiC,CAAE,EAC3CA,CACX,EACE+lB,EAAc,UAAU,YAAc,UAAwB,CAC5D,OAAO,KAAK,WAChB,EACEA,EAAc,UAAU,oBAAsB,UAAgC,CAC5E,OAAO,KAAK,iBAChB,EACEA,EAAc,UAAU,gBAAkB,UAA4B,CACpE,OAAO,KAAK,gBAChB,EACEA,EAAc,UAAU,SAAW,UAAqB,CACtD,GAAI,UAAU,CAAC,YAAaljC,GAAO,CACjC,IAAI9W,EAAI,UAAU,CAAC,EACfnS,EAAQmS,EAAE,gBACd,KAAK,YAAY,KAAK,UAAWnS,EAAOiJ,EAAS,QAAQ,CAC1D,SAAU,UAAU,CAAC,YAAavB,EAAY,CAC7C,IAAI6P,EAAK,UAAU,CAAC,EACpB,KAAK,YAAY,KAAK,UAAWA,EAAItO,EAAS,QAAQ,CACvD,CACL,EACEkjD,EAAc,UAAU,WAAa,SAAqBh6C,EAAG,CAC3D,IAAI+C,EAAS,KAEb,KAAK,eAAe/C,EAAE,gBAAe,EAAIlJ,EAAS,SAAUA,EAAS,QAAQ,EAC7E,QAAS/H,EAAI,EAAGA,EAAIiR,EAAE,mBAAkB,EAAIjR,IAAK,CAC/C,IAAImqB,EAAOlZ,EAAE,iBAAiBjR,CAAC,EAC/BgU,EAAO,eAAemW,EAAMpiB,EAAS,SAAUA,EAAS,QAAQ,CACjE,CACL,EACEkjD,EAAc,UAAU,QAAU,SAAkB5hD,EAAG,CACrD,KAAK,WAAWA,CAAC,EACjB,IAAIvK,EAAQuK,EAAE,iBACd,KAAK,YAAY,KAAK,UAAWvK,EAAM,CAAC,EAAGiJ,EAAS,QAAQ,EAC5D,KAAK,YAAY,KAAK,UAAWjJ,EAAMA,EAAM,OAAS,CAAC,EAAGiJ,EAAS,QAAQ,CAC/E,EACEkjD,EAAc,UAAU,cAAgB,SAAwBzrD,EAAM,CACpE,IAAIV,EAAQmgB,EAAiB,qBAAqBzf,EAAK,eAAgB,CAAA,EACvE,GAAIV,EAAM,OAAS,EACjB,YAAK,iBAAmB,GACxB,KAAK,cAAgBA,EAAM,CAAC,EACrB,KAET,IAAIuK,EAAI,IAAIorC,GAAK31C,EAAO,IAAIyyB,EAAM,KAAK,UAAWxpB,EAAS,QAAQ,CAAC,EACpE,KAAK,aAAa,IAAIvI,EAAM6J,CAAC,EAC7B,KAAK,WAAWA,CAAC,EACjBgM,EAAO,OAAOvW,EAAM,QAAU,EAAG,oCAAoC,EACrE,KAAK,oBAAoB,KAAK,UAAWA,EAAM,CAAC,CAAC,EACjD,KAAK,oBAAoB,KAAK,UAAWA,EAAMA,EAAM,OAAS,CAAC,CAAC,CACpE,EACEmsD,EAAc,UAAU,gBAAkB,UAA4B,CACpE,OAAO,KAAK,aAChB,EACEA,EAAc,UAAU,kBAAoB,UAA8B,CAIxE,QAHIntC,EAAO,KAAK,mBACZtD,EAAM,IAAI,MAAMsD,EAAK,KAAI,CAAE,EAAE,KAAK,IAAI,EACtC9d,EAAI,EACColB,EAAKtH,EAAK,SAAQ,EAAIsH,EAAG,WAAY,CAC5C,IAAI+J,EAAO/J,EAAG,OACd5K,EAAIxa,GAAG,EAAImvB,EAAK,cAAa,EAAG,MACjC,CACD,OAAO3U,CACX,EACEywC,EAAc,UAAU,iBAAmB,UAA6B,CACtE,OAAI,KAAK,iBAAmB,OAAQ,KAAK,eAAiB,KAAK,OAAO,iBAAiB,KAAK,SAAS,GAC9F,KAAK,cAChB,EACEA,EAAc,UAAU,wBAA0B,SAAkC92B,EAAUr1B,EAAOwyB,EAAK,CACxG,GAAI,KAAK,eAAe6C,EAAUr1B,CAAK,EAAK,OAAO,KAC/CwyB,IAAQvpB,EAAS,UAAY,KAAK,8BAAiC,KAAK,oBAAoBosB,EAAUr1B,CAAK,EAAY,KAAK,YAAYq1B,EAAUr1B,EAAOwyB,CAAG,CACpK,EACE25B,EAAc,UAAU,eAAiB,SAAyBc,EAAIC,EAAQC,EAAS,CACrF,GAAIF,EAAG,UAAa,OAAO,KAC3B,IAAIjtD,EAAQmgB,EAAiB,qBAAqB8sC,EAAG,eAAgB,CAAA,EACrE,GAAIjtD,EAAM,OAAS,EACjB,YAAK,iBAAmB,GACxB,KAAK,cAAgBA,EAAM,CAAC,EACrB,KAET,IAAI+xB,EAAOm7B,EACPl7B,EAAQm7B,EACRp1C,EAAa,MAAM/X,CAAK,IAC1B+xB,EAAOo7B,EACPn7B,EAAQk7B,GAEV,IAAI3iD,EAAI,IAAIorC,GAAK31C,EAAO,IAAIyyB,EAAM,KAAK,UAAWxpB,EAAS,SAAU8oB,EAAMC,CAAK,CAAC,EACjF,KAAK,aAAa,IAAIi7B,EAAI1iD,CAAC,EAC3B,KAAK,WAAWA,CAAC,EACjB,KAAK,YAAY,KAAK,UAAWvK,EAAM,CAAC,EAAGiJ,EAAS,QAAQ,CAChE,EACEkjD,EAAc,UAAU,YAAc,SAAsB92B,EAAUr1B,EAAOs1B,EAAY,CACvF,IAAIjuB,EAAI,KAAK,OAAO,QAAQrH,CAAK,EAC7B2yB,EAAMtrB,EAAE,WACRsrB,IAAQ,KACVtrB,EAAE,OAAS,IAAIorB,EAAM4C,EAAUC,CAAU,EAClC3C,EAAI,YAAY0C,EAAUC,CAAU,CACjD,EACE62B,EAAc,UAAU,yBAA2B,UAAqC,CACtF,OAAO,IAAI5B,EACf,EACE4B,EAAc,UAAU,yBAA2B,SAAmC92B,EAAU,CAG9F,QAFIngB,EAAS,KAEJhU,EAAI,KAAK,OAAO,WAAYA,EAAE,WAGrC,QAFIqJ,EAAIrJ,EAAE,OACNkzC,EAAO7pC,EAAE,SAAU,EAAC,YAAY8qB,CAAQ,EACnC+3B,EAAO7iD,EAAE,OAAO,WAAY6iD,EAAK,WAAY,CACpD,IAAIrtB,EAAKqtB,EAAK,OACdl4C,EAAO,wBAAwBmgB,EAAU0K,EAAG,MAAOqU,CAAI,CACxD,CAEP,EACE+X,EAAc,UAAU,IAAM,UAAgB,CAC5C,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAIjoD,EAAI,UAAU,CAAC,EACnB,GAAIA,EAAE,UAAa,OAAO,KAE1B,GADIA,aAAa0mB,KAAgB,KAAK,8BAAgC,IAClE1mB,aAAailB,GAAW,KAAK,WAAWjlB,CAAC,UACpCA,aAAakiB,EAAc,KAAK,cAAcliB,CAAC,UAC/CA,aAAa+kB,GAAS,KAAK,SAAS/kB,CAAC,UACrCA,aAAasmB,GAAc,KAAK,cAActmB,CAAC,UAC/CA,aAAawhB,GAAmB,KAAK,cAAcxhB,CAAC,UACpDA,aAAa0mB,GAAgB,KAAK,cAAc1mB,CAAC,UACjDA,aAAaqgB,GAAsB,KAAK,cAAcrgB,CAAC,MACzD,OAAM,IAAI,MAAMA,EAAE,SAAU,EAAC,QAAO,CAAE,CACnD,KAAa,QAAOkoD,EAAe,UAAU,IAAI,MAAM,KAAM,SAAS,CACtE,EACED,EAAc,UAAU,cAAgB,SAAwBjnC,EAAI,CAGlE,QAFIhQ,EAAS,KAEJhU,EAAI,EAAGA,EAAIgkB,EAAG,iBAAgB,EAAIhkB,IAAK,CAC9C,IAAIgD,EAAIghB,EAAG,aAAahkB,CAAC,EACzBgU,EAAO,IAAIhR,CAAC,CACb,CACL,EACEioD,EAAc,UAAU,OAAS,SAAiB50C,EAAI,CACpD,OAAInO,EAAa,KAAK,YAAa8f,EAAS,GAAK,KAAK,YAAY,iBAAkB,EAAG,IACjF,KAAK,iBAAmB,OAC1B,KAAK,eAAiB,IAAI4iC,GAA0B,KAAK,WAAW,GAE/D,KAAK,eAAe,OAAOv0C,CAAE,GAE/B,KAAK,WAAW,OAAOA,EAAI,KAAK,WAAW,CACtD,EACE40C,EAAc,UAAU,SAAW,UAAqB,CACtD,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAIzrD,EAAO,UAAU,CAAC,EACtB,OAAO,KAAK,aAAa,IAAIA,CAAI,CACvC,KAAa,QAAO0rD,EAAe,UAAU,SAAS,MAAM,KAAM,SAAS,CAC3E,EACED,EAAc,UAAU,YAAc,UAAwB,CAC5D,MAAO,CAAE,CACb,EACEA,EAAc,UAAU,SAAW,UAAqB,CACtD,OAAOA,CACX,EACEA,EAAc,kBAAoB,SAA4Bz1B,EAAkBjZ,EAAe,CAC7F,OAAOiZ,EAAiB,aAAajZ,CAAa,EAAIxU,EAAS,SAAWA,EAAS,QACvF,EAESkjD,CACT,EAAEt0B,CAAW,EAETw1B,GAAkB,UAA4B,CAIhD,GAHA,KAAK,IAAM,IAAI31C,GACf,KAAK,sBAAwB,KAC7B,KAAK,KAAO,KACR,UAAU,SAAW,EAAG,CAC1B,IAAI4oC,EAAK,UAAU,CAAC,EACpB,KAAK,wBAAwBA,EAAG,kBAAmB,CAAA,EACnD,KAAK,KAAO,IAAI,MAAM,CAAC,EAAE,KAAK,IAAI,EAClC,KAAK,KAAK,CAAC,EAAI,IAAI6L,GAAc,EAAG7L,CAAE,CAC1C,SAAa,UAAU,SAAW,EAAG,CACjC,IAAIE,EAAO,UAAU,CAAC,EAClBD,EAAK,UAAU,CAAC,EAChB7pB,EAAmBnZ,GAAiB,sBACpCijC,EAAK,kBAAmB,EAAC,UAAUD,EAAG,mBAAmB,GAAK,EAAK,KAAK,wBAAwBC,EAAK,kBAAiB,CAAE,EAAY,KAAK,wBAAwBD,EAAG,kBAAmB,CAAA,EAC3L,KAAK,KAAO,IAAI,MAAM,CAAC,EAAE,KAAK,IAAI,EAClC,KAAK,KAAK,CAAC,EAAI,IAAI4L,GAAc,EAAG3L,EAAM9pB,CAAgB,EAC1D,KAAK,KAAK,CAAC,EAAI,IAAIy1B,GAAc,EAAG5L,EAAI7pB,CAAgB,CAC5D,SAAa,UAAU,SAAW,EAAG,CACjC,IAAI42B,EAAO,UAAU,CAAC,EAClB7M,EAAO,UAAU,CAAC,EAClB+L,EAAqB,UAAU,CAAC,EAChCc,EAAK,kBAAmB,EAAC,UAAU7M,EAAK,mBAAmB,GAAK,EAAK,KAAK,wBAAwB6M,EAAK,kBAAiB,CAAE,EAAY,KAAK,wBAAwB7M,EAAK,kBAAmB,CAAA,EAC/L,KAAK,KAAO,IAAI,MAAM,CAAC,EAAE,KAAK,IAAI,EAClC,KAAK,KAAK,CAAC,EAAI,IAAI0L,GAAc,EAAGmB,EAAMd,CAAkB,EAC5D,KAAK,KAAK,CAAC,EAAI,IAAIL,GAAc,EAAG1L,EAAM+L,CAAkB,CAC7D,CACH,EACAa,GAAgB,UAAU,eAAiB,SAAyBnsD,EAAG,CACrE,OAAO,KAAK,KAAKA,CAAC,EAAE,YAAa,CACnC,EACAmsD,GAAgB,UAAU,wBAA0B,SAAkC9gC,EAAI,CACxF,KAAK,sBAAwBA,EAC7B,KAAK,IAAI,kBAAkB,KAAK,qBAAqB,CACvD,EACA8gC,GAAgB,UAAU,YAAc,UAAwB,CAC9D,MAAO,CAAE,CACX,EACAA,GAAgB,UAAU,SAAW,UAAqB,CACxD,OAAOA,EACT,EAIA,IAAIE,GAAiB,UAA2B,GAEhDA,GAAe,UAAU,YAAc,UAAwB,CAC7D,MAAO,CAAE,CACX,EACAA,GAAe,UAAU,SAAW,UAAqB,CACvD,OAAOA,EACT,EACAA,GAAe,IAAM,UAAgB,CACnC,GAAI,UAAU,CAAC,YAAa9wC,GAAYrT,EAAa,UAAU,CAAC,EAAGmkD,GAAe,KAAK,EAAG,CAIxF,QAHInxD,EAAO,UAAU,CAAC,EAClB4oD,EAAK,UAAU,CAAC,EAChBD,EAAS,IAAI3mC,EACR,EAAI,EAAG,EAAIhiB,EAAK,iBAAgB,EAAI,IAAK,CAChD,IAAI8H,EAAI8gD,EAAG,IAAI5oD,EAAK,aAAa,CAAC,CAAC,EAC/B8H,IAAM,MAAQ6gD,EAAO,IAAI7gD,CAAC,CAC/B,CACD,OAAO9H,EAAK,aAAa,cAAc2oD,CAAM,CAC9C,SAAU37C,EAAa,UAAU,CAAC,EAAG0U,EAAU,GAAK1U,EAAa,UAAU,CAAC,EAAGmkD,GAAe,KAAK,EAAG,CAIrG,QAHI1O,EAAQ,UAAU,CAAC,EACnB2O,EAAO,UAAU,CAAC,EAClBC,EAAW,IAAIrvC,EACVtD,EAAM+jC,EAAM,SAAQ,EAAI/jC,EAAI,WAAY,CAC/C,IAAI8B,EAAM9B,EAAI,OACV4yC,EAAKF,EAAK,IAAI5wC,CAAG,EACjB8wC,IAAO,MAAQD,EAAS,IAAIC,CAAE,CACnC,CACD,OAAOD,CACR,CACH,EACAF,GAAe,MAAQ,UAAkB,GAEzC,IAAIjI,EAAa,SAAU+H,EAAiB,CAC1C,SAAS/H,GAAa,CACpB,IAAIhF,EAAK,UAAU,CAAC,EAChBC,EAAK,UAAU,CAAC,EACpB8M,EAAgB,KAAK,KAAM/M,EAAIC,CAAE,EACjC,KAAK,WAAa,IAAIjB,GACtB,KAAK,UAAY,KACjB,KAAK,YAAc,KACnB,KAAK,OAAS,KACd,KAAK,UAAY,IAAItK,GACrB,KAAK,gBAAkB,IAAI52B,EAC3B,KAAK,gBAAkB,IAAIA,EAC3B,KAAK,iBAAmB,IAAIA,EAC5B,KAAK,OAAS,IAAIyZ,EAAY,IAAIwc,EAAoB,EACtD,KAAK,UAAYiM,EAAG,YACrB,CAED,OAAK+M,IAAkB/H,EAAU,UAAY+H,GAC7C/H,EAAU,UAAY,OAAO,OAAQ+H,GAAmBA,EAAgB,WACxE/H,EAAU,UAAU,YAAcA,EAClCA,EAAU,UAAU,iBAAmB,SAA2B/6C,EAAG,CACnE,IAAIysC,EAAe,KAAK,UAAU,cAAczsC,CAAC,EACjD,GAAIysC,IAAiB,KAAM,CACzB,IAAIC,EAAgBD,EAAa,WAC7BE,EAAe3sC,EAAE,WAChBysC,EAAa,iBAAiBzsC,CAAC,IAClC2sC,EAAe,IAAIzkB,EAAMloB,EAAE,SAAU,CAAA,EACrC2sC,EAAa,KAAI,GAEnB,IAAI3vB,EAAQyvB,EAAa,WACrBzvB,EAAM,UACRA,EAAM,IAAI0vB,CAAa,EAEzB1vB,EAAM,IAAI2vB,CAAY,EACtBD,EAAc,MAAMC,CAAY,CACtC,MACM,KAAK,UAAU,IAAI3sC,CAAC,CAE1B,EACE+6C,EAAU,UAAU,SAAW,UAAqB,CAClD,OAAO,KAAK,MAChB,EACEA,EAAU,UAAU,2BAA6B,UAAuC,CACtF,QAASh/B,EAAK,KAAK,OAAO,YAAa,EAAC,SAAU,EAAEA,EAAG,WAAY,CACjE,IAAIyJ,EAAKzJ,EAAG,OACR6K,EAAMpB,EAAG,SACTA,EAAG,WAAU,GAAMoB,EAAI,WAAU,IACnCpB,EAAG,YAAY,EAAK,EACpBoB,EAAI,YAAY,EAAK,EAExB,CACL,EACEm0B,EAAU,UAAU,cAAgB,SAAwBtlD,EAAO,CAEjE,MADI,QAAK,UAAUA,EAAO,KAAK,eAAe,GAC1C,KAAK,UAAUA,EAAO,KAAK,eAAe,EAElD,EACEslD,EAAU,UAAU,gBAAkB,SAA0BqI,EAAiBC,EAAgBj1B,EAAgBk1B,EAAQ,CACvH,IAAI3gC,EAAW,IAAI9O,EAInB,OAHA8O,EAAS,OAAOygC,CAAe,EAC/BzgC,EAAS,OAAO0gC,CAAc,EAC9B1gC,EAAS,OAAOyL,CAAc,EAC1BzL,EAAS,QAAO,EAAao4B,EAAU,kBAAkBuI,EAAQ,KAAK,KAAK,CAAC,EAAE,YAAa,EAAE,KAAK,KAAK,CAAC,EAAE,YAAa,EAAE,KAAK,SAAS,EACpI,KAAK,UAAU,cAAc3gC,CAAQ,CAChD,EACEo4B,EAAU,UAAU,eAAiB,UAA2B,CAC9D,QAASxtB,EAAS,KAAK,OAAO,SAAU,EAAC,SAAU,EAAEA,EAAO,WAAY,CACtE,IAAIzH,EAAOyH,EAAO,OAClBzH,EAAK,WAAW,gBACjB,CACL,EACEi1B,EAAU,UAAU,UAAY,SAAoBtlD,EAAOktB,EAAU,CAGnE,QAFIhY,EAAS,KAEJoR,EAAK4G,EAAS,SAAQ,EAAI5G,EAAG,WAAY,CAChD,IAAIlqB,EAAOkqB,EAAG,OACVkM,EAAMtd,EAAO,WAAW,OAAOlV,EAAO5D,CAAI,EAC9C,GAAIo2B,IAAQvpB,EAAS,SAAY,MAAO,EACzC,CACD,MAAO,EACX,EACEq8C,EAAU,UAAU,sBAAwB,UAAkC,CAE5E,QADIwI,EAAW,IAAI1vC,EACVkI,EAAK,KAAK,UAAU,WAAYA,EAAG,WAAY,CACtD,IAAI/b,EAAI+b,EAAG,OACP/b,EAAE,gBACJ+b,EAAG,OAAM,EACTwnC,EAAS,IAAIvjD,EAAE,iBAAkB,CAAA,EAEpC,CACD,KAAK,UAAU,OAAOujD,CAAQ,CAClC,EACExI,EAAU,UAAU,oBAAsB,UAAgC,CACxE,QAASxtB,EAAS,KAAK,OAAO,SAAU,EAAC,SAAU,EAAEA,EAAO,WAAY,CACtE,IAAIzH,EAAOyH,EAAO,OACdnF,EAAMtC,EAAK,SAAU,EAAC,SAAQ,EAClCA,EAAK,SAAQ,EAAG,MAAMsC,CAAG,CAC1B,CACL,EACE2yB,EAAU,UAAU,kBAAoB,SAA4ByI,EAAe,CACjF,YAAK,eAAeA,CAAa,EAC1B,KAAK,WAChB,EACEzI,EAAU,UAAU,kBAAoB,SAA4BtwB,EAAO,CAGzE,QAFI9f,EAAS,KAEJhU,EAAI8zB,EAAM,SAAQ,EAAI9zB,EAAE,WAAY,CAC3C,IAAIqJ,EAAIrJ,EAAE,OACVgU,EAAO,iBAAiB3K,CAAC,CAC1B,CACL,EACE+6C,EAAU,UAAU,eAAiB,SAAyBF,EAAQ,CACpE,KAAK,WAAW,CAAC,EACjB,KAAK,WAAW,CAAC,EACjB,KAAK,KAAK,CAAC,EAAE,iBAAiB,KAAK,IAAK,EAAK,EAC7C,KAAK,KAAK,CAAC,EAAE,iBAAiB,KAAK,IAAK,EAAK,EAC7C,KAAK,KAAK,CAAC,EAAE,yBAAyB,KAAK,KAAK,CAAC,EAAG,KAAK,IAAK,EAAI,EAClE,IAAI4I,EAAiB,IAAI5vC,EACzB,KAAK,KAAK,CAAC,EAAE,kBAAkB4vC,CAAc,EAC7C,KAAK,KAAK,CAAC,EAAE,kBAAkBA,CAAc,EAE7C,KAAK,kBAAkBA,CAAc,EACrC,KAAK,wBAAuB,EAC5B,KAAK,sBAAqB,EAC1BpJ,GAAoB,WAAW,KAAK,UAAU,SAAU,CAAA,EACxD,KAAK,OAAO,SAAS,KAAK,UAAU,SAAQ,CAAE,EAC9C,KAAK,iBAAgB,EACrB,KAAK,qBAAoB,EACzB,KAAK,oBAAoBQ,CAAM,EAC/B,KAAK,2BAA0B,EAC/B,IAAI7N,EAAc,IAAIhf,GAAe,KAAK,SAAS,EACnDgf,EAAY,IAAI,KAAK,MAAM,EAC3B,KAAK,gBAAkBA,EAAY,cACnC,IAAI0W,EAAc,IAAI/I,GAAY,KAAM,KAAK,UAAW,KAAK,UAAU,EACvE,KAAK,gBAAkB+I,EAAY,MAAM7I,CAAM,EAC/C,IAAI8I,EAAe,IAAI1I,GAAa,KAAM,KAAK,UAAW,KAAK,UAAU,EACzE,KAAK,iBAAmB0I,EAAa,MAAM9I,CAAM,EACjD,KAAK,YAAc,KAAK,gBAAgB,KAAK,iBAAkB,KAAK,gBAAiB,KAAK,gBAAiBA,CAAM,CACrH,EACEE,EAAU,UAAU,oBAAsB,SAA8Bj+C,EAAGg+C,EAAa,CACtF,IAAI7yB,EAAM,KAAK,WAAW,OAAOnrB,EAAE,gBAAiB,KAAK,KAAKg+C,CAAW,EAAE,YAAa,CAAA,EACxFh+C,EAAE,SAAU,EAAC,YAAYg+C,EAAa7yB,CAAG,CAC7C,EACE8yB,EAAU,UAAU,WAAa,SAAqBjwB,EAAU,CAG9D,QAFIngB,EAAS,KAEJhU,EAAI,KAAK,KAAKm0B,CAAQ,EAAE,gBAAiB,EAAEn0B,EAAE,WAAY,CAChE,IAAIitD,EAAYjtD,EAAE,OACdktD,EAAUl5C,EAAO,OAAO,QAAQi5C,EAAU,cAAa,CAAE,EAC7DC,EAAQ,SAAS/4B,EAAU84B,EAAU,SAAQ,EAAG,YAAY94B,CAAQ,CAAC,CACtE,CACL,EACEiwB,EAAU,UAAU,oBAAsB,SAA8BF,EAAQ,CAC9E,QAAS9+B,EAAK,KAAK,OAAO,YAAa,EAAC,SAAU,EAAEA,EAAG,WAAY,CACjE,IAAIyJ,EAAKzJ,EAAG,OACRgN,EAAQvD,EAAG,WACXuD,EAAM,OAAQ,GAAI,CAACvD,EAAG,mBAAkB,GAAMu1B,EAAU,aAAahyB,EAAM,YAAY,EAAG7D,EAAS,KAAK,EAAG6D,EAAM,YAAY,EAAG7D,EAAS,KAAK,EAAG21B,CAAM,GACzJr1B,EAAG,YAAY,EAAI,CAEtB,CACL,EACEu1B,EAAU,UAAU,wBAA0B,UAAoC,CAChF,QAASh/B,EAAK,KAAK,UAAU,WAAYA,EAAG,WAAY,CACtD,IAAI/b,EAAI+b,EAAG,OACPqM,EAAMpoB,EAAE,WACRgd,EAAQhd,EAAE,WACd,GAAI,CAACgd,EAAM,SAAU,CACnBA,EAAM,UAAS,EACf,QAASrmB,EAAI,EAAGA,EAAI,EAAGA,IACjB,CAACyxB,EAAI,OAAOzxB,CAAC,GAAKyxB,EAAI,OAAM,GAAM,CAACpL,EAAM,OAAOrmB,CAAC,IAC/CqmB,EAAM,SAASrmB,CAAC,IAAM,EACxByxB,EAAI,OAAOzxB,CAAC,GAEZqV,EAAO,OAAO,CAACgR,EAAM,OAAOrmB,EAAGuuB,EAAS,IAAI,EAAG,6CAA6C,EAC5FkD,EAAI,YAAYzxB,EAAGuuB,EAAS,KAAMlI,EAAM,YAAYrmB,EAAGuuB,EAAS,IAAI,CAAC,EACrElZ,EAAO,OAAO,CAACgR,EAAM,OAAOrmB,EAAGuuB,EAAS,KAAK,EAAG,8CAA8C,EAC9FkD,EAAI,YAAYzxB,EAAGuuB,EAAS,MAAOlI,EAAM,YAAYrmB,EAAGuuB,EAAS,KAAK,CAAC,GAI9E,CACF,CACL,EACE61B,EAAU,UAAU,iBAAmB,UAA6B,CAGlE,QAFIpwC,EAAS,KAEJ4iB,EAAS,KAAK,OAAO,SAAU,EAAC,SAAU,EAAEA,EAAO,WAAY,CACtE,IAAIzH,EAAOyH,EAAO,OAClBzH,EAAK,SAAU,EAAC,iBAAiBnb,EAAO,IAAI,CAC7C,CACD,KAAK,eAAc,EACnB,KAAK,oBAAmB,CAC5B,EACEowC,EAAU,UAAU,qBAAuB,UAAiC,CAI1E,QAHIpwC,EAAS,KAGJm5C,EAAK,KAAK,OAAO,SAAU,EAAC,SAAU,EAAEA,EAAG,WAAY,CAC9D,IAAIhnD,EAAIgnD,EAAG,OACP/6B,EAAQjsB,EAAE,WACVA,EAAE,eAEAisB,EAAM,OAAO,CAAC,EAAKpe,EAAO,oBAAoB7N,EAAG,CAAC,EAAY6N,EAAO,oBAAoB7N,EAAG,CAAC,GAEnGA,EAAE,SAAQ,EAAG,gBAAgBisB,CAAK,CACnC,CACL,EACEgyB,EAAU,UAAU,aAAe,SAAuBtlD,EAAO,CAC/D,MAAI,OAAK,UAAUA,EAAO,KAAK,eAAe,CAElD,EACEslD,EAAU,UAAU,YAAc,UAAwB,CACxD,MAAO,CAAE,CACb,EACEA,EAAU,UAAU,SAAW,UAAqB,CAClD,OAAOA,CACX,EAESA,CACT,EAAE+H,EAAe,EAEjB/H,EAAU,UAAY,SAAU/3B,EAAO+gC,EAAOlJ,EAAQ,CACpD,IAAImJ,EAAM,IAAIjJ,EAAU/3B,EAAO+gC,CAAK,EAChCE,EAASD,EAAI,kBAAkBnJ,CAAM,EACzC,OAAOoJ,CACT,EACAlJ,EAAU,aAAe,SAAUphD,EAAG4D,EAAO,CAC3C,GAAI5D,EAAE,QAAS,GAAI4D,EAAM,QAAO,EAAM,OAAOw9C,EAAU,kBAAkBA,EAAU,aAAcphD,EAAG4D,EAAO5D,EAAE,WAAU,CAAE,EACzH,GAAIA,EAAE,uBAAwB,CAC5B,IAAI4tC,EAAKhqC,EACT,OAAO+8C,GAAyB,IAAI3gD,EAAG,CACrC,YAAa,UAAY,CACvB,MAAO,CAACqpD,GAAe,KAAK,CAC7B,EACD,IAAK,SAAUrpD,EAAG,CAChB,OAAOA,EAAE,aAAa4tC,CAAE,CACzB,CACP,CAAK,CACF,CACD,OAAA5tC,EAAE,2BAA2BA,CAAC,EAC9BA,EAAE,2BAA2B4D,CAAK,EAC3BuhD,GAAsB,UAAUnlD,EAAG4D,EAAOw9C,EAAU,YAAY,CACzE,EACAA,EAAU,cAAgB,SAAUphD,EAAG4D,EAAO,CAC5C,GAAI5D,EAAE,QAAO,GAAM4D,EAAM,QAAO,EAAI,CAClC,GAAI5D,EAAE,QAAS,GAAI4D,EAAM,QAAO,EAAM,OAAOw9C,EAAU,kBAAkBA,EAAU,cAAephD,EAAG4D,EAAO5D,EAAE,WAAU,CAAE,EAC1H,GAAIA,EAAE,QAAS,EAAI,OAAO4D,EAAM,KAAI,EACpC,GAAIA,EAAM,QAAS,EAAI,OAAO5D,EAAE,KAAI,CACrC,CACD,OAAAA,EAAE,2BAA2BA,CAAC,EAC9BA,EAAE,2BAA2B4D,CAAK,EAC3BuhD,GAAsB,UAAUnlD,EAAG4D,EAAOw9C,EAAU,aAAa,CAC1E,EACAA,EAAU,gBAAkB,SAAUF,EAAQ9E,EAAIC,EAAI,CACpD,IAAIkO,EAAOnO,EAAG,eACVoO,EAAOnO,EAAG,eACVoO,EAAkB,GACtB,OAAQvJ,EAAM,CACZ,KAAKE,EAAU,aACbqJ,EAAkB,KAAK,IAAIF,EAAMC,CAAI,EACrC,MACF,KAAKpJ,EAAU,MACbqJ,EAAkB,KAAK,IAAIF,EAAMC,CAAI,EACrC,MACF,KAAKpJ,EAAU,WACbqJ,EAAkBF,EAClB,MACF,KAAKnJ,EAAU,cACbqJ,EAAkB,KAAK,IAAIF,EAAMC,CAAI,EACrC,KAEH,CACD,OAAOC,CACT,EACArJ,EAAU,kBAAoB,SAAUyI,EAAejlD,EAAGC,EAAG6lD,EAAU,CACrE,IAAIjpD,EAAS,KACb,OAAQ2/C,EAAU,gBAAgByI,EAAejlD,EAAGC,CAAC,EAAC,CACpD,IAAK,GACHpD,EAASipD,EAAS,yBAAyB,IAAI,MAAM,CAAC,EAAE,KAAK,IAAI,CAAC,EAClE,MACF,IAAK,GACHjpD,EAASipD,EAAS,cAClB,MACF,IAAK,GACHjpD,EAASipD,EAAS,mBAClB,MACF,IAAK,GACHjpD,EAASipD,EAAS,gBAClB,KAEH,CACD,OAAOjpD,CACT,EACA2/C,EAAU,WAAa,SAAUphD,EAAG4D,EAAO,CACzC,OAAI5D,EAAE,QAAO,EAAaohD,EAAU,kBAAkBA,EAAU,WAAYphD,EAAG4D,EAAO5D,EAAE,WAAY,CAAA,EAChG4D,EAAM,QAAS,EAAW5D,EAAE,KAAI,GACpCA,EAAE,2BAA2BA,CAAC,EAC9BA,EAAE,2BAA2B4D,CAAK,EAC3BuhD,GAAsB,UAAUnlD,EAAG4D,EAAOw9C,EAAU,UAAU,EACvE,EACAA,EAAU,aAAe,UAAY,CACnC,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAIhyB,EAAQ,UAAU,CAAC,EACnB8xB,EAAS,UAAU,CAAC,EACpByJ,EAAOv7B,EAAM,YAAY,CAAC,EAC1Bw7B,EAAOx7B,EAAM,YAAY,CAAC,EAC9B,OAAOgyB,EAAU,aAAauJ,EAAMC,EAAM1J,CAAM,CACpD,SAAa,UAAU,SAAW,EAAG,CACjC,IAAI2J,EAAS,UAAU,CAAC,EACpBC,EAAS,UAAU,CAAC,EACpBjB,EAAgB,UAAU,CAAC,EAG/B,OAFIgB,IAAW9lD,EAAS,WAAY8lD,EAAS9lD,EAAS,UAClD+lD,IAAW/lD,EAAS,WAAY+lD,EAAS/lD,EAAS,UAC9C8kD,EAAa,CACnB,KAAKzI,EAAU,aACb,OAAOyJ,IAAW9lD,EAAS,UAAY+lD,IAAW/lD,EAAS,SAC7D,KAAKq8C,EAAU,MACb,OAAOyJ,IAAW9lD,EAAS,UAAY+lD,IAAW/lD,EAAS,SAC7D,KAAKq8C,EAAU,WACb,OAAOyJ,IAAW9lD,EAAS,UAAY+lD,IAAW/lD,EAAS,SAC7D,KAAKq8C,EAAU,cACb,OAAQyJ,IAAW9lD,EAAS,UAAY+lD,IAAW/lD,EAAS,UAAc8lD,IAAW9lD,EAAS,UAAY+lD,IAAW/lD,EAAS,QAEjI,CACD,MAAO,EACR,CACH,EACAq8C,EAAU,aAAe,EACzBA,EAAU,MAAQ,EAClBA,EAAU,WAAa,EACvBA,EAAU,cAAgB,EAE1B,IAAI2J,GAAoB,UAA8B,CACpD,KAAK,GAAK,KACV,KAAK,2BAA6B,KAClC,KAAK,UAAY,KACjB,KAAK,WAAa,IAAI3P,GACtB,KAAK,KAAO,IAAI/c,EAChB,IAAIr+B,EAAI,UAAU,CAAC,EACfgrD,EAA4B,UAAU,CAAC,EAC3C,KAAK,GAAKhrD,EACV,KAAK,2BAA6BgrD,EAClC,KAAK,UAAY,KAAK,gBAAgBhrD,CAAC,CACzC,EACA+qD,GAAkB,UAAU,4BAA8B,SAAsC13C,EAAI,CAGlG,QAFMrC,EAAS,KAENhU,EAAI,EAAGA,EAAI,KAAK,UAAU,mBAAoBA,IAGrD,QAFIR,EAAOwU,EAAO,UAAU,aAAahU,CAAC,EACtCojB,EAAM5jB,EAAK,wBACNjD,EAAI,EAAGA,EAAI6mB,EAAI,KAAM,EAAG,EAAG7mB,IAAK,CACvC6mB,EAAI,cAAc7mB,EAAGyX,EAAO,KAAK,EAAE,EACnCoP,EAAI,cAAc7mB,EAAI,EAAGyX,EAAO,KAAK,EAAE,EACvC,IAAImC,EAAOnC,EAAO,KAAK,SAASqC,CAAE,EAClC,GAAIF,GAAQnC,EAAO,2BAA8B,MAAO,EACzD,CAEH,MAAO,EACT,EACA+5C,GAAkB,UAAU,YAAc,SAAsB13C,EAAI,CAClE,OAAI,KAAK,4BAA4BA,CAAE,EAAYtO,EAAS,SACrD,KAAK,WAAW,OAAOsO,EAAI,KAAK,EAAE,CAC3C,EACA03C,GAAkB,UAAU,gBAAkB,SAA0B/qD,EAAG,CACzE,IAAIirD,EAAY,IAAIC,GACpBlrD,EAAE,MAAMirD,CAAS,EACjB,IAAIE,EAAWF,EAAU,cACrBx5C,EAAQnB,EAAgB,kBAAkB66C,CAAQ,EACtD,OAAOnrD,EAAE,aAAa,sBAAsByR,CAAK,CACnD,EACAs5C,GAAkB,UAAU,YAAc,UAAwB,CAChE,MAAO,CAAE,CACX,EACAA,GAAkB,UAAU,SAAW,UAAqB,CAC1D,OAAOA,EACT,EAEA,IAAIG,GAA6B,UAAuC,CACtE,KAAK,UAAY,KACjB,KAAK,UAAY,IAAIhxC,CACvB,EACAgxC,GAA2B,UAAU,YAAc,UAAwB,CACzE,OAAO,KAAK,SACd,EACAA,GAA2B,UAAU,OAAS,SAAiBlrD,EAAG,CAC9D,IAAIgR,EAAS,KAEf,GAAIhR,aAAailB,GAAS,CACxB,IAAIY,EAAO7lB,EACX,KAAK,UAAU,IAAI6lB,EAAK,gBAAiB,CAAA,EACzC,QAAS,EAAI,EAAG,EAAIA,EAAK,mBAAkB,EAAI,IAC7C7U,EAAO,UAAU,IAAI6U,EAAK,iBAAiB,CAAC,CAAC,CAEhD,CACH,EACAqlC,GAA2B,UAAU,YAAc,UAAwB,CACzE,MAAO,CAAChrC,EAAc,CACxB,EACAgrC,GAA2B,UAAU,SAAW,UAAqB,CACnE,OAAOA,EACT,EAEA,IAAIE,GAAuB,UAAiC,CAC1D,KAAK,GAAK,KACV,KAAK,QAAU,GACf,KAAK,SAAW,GAChB,IAAIprD,EAAI,UAAU,CAAC,EACnB,KAAK,GAAKA,CACZ,EACAorD,GAAqB,UAAU,cAAgB,SAAwB5uD,EAAM8iC,EAAgB+rB,EAAW,CAItG,QAHMr6C,EAAS,KAEXwG,EAAMhb,EAAK,iBACNQ,EAAI,EAAGA,EAAIwa,EAAI,OAAS,EAAGxa,IAClCgU,EAAO,oBAAoBwG,EAAIxa,CAAC,EAAGwa,EAAIxa,EAAI,CAAC,EAAGsiC,EAAgB+rB,CAAS,CAE5E,EACAD,GAAqB,UAAU,mBAAqB,SAA6BE,EAAQC,EAAS,CAChG,KAAK,QAAUD,EACf,KAAK,SAAWC,CAClB,EACAH,GAAqB,UAAU,UAAY,SAAoB9rB,EAAgB,CAK7E,QAJMtuB,EAAS,KAEXq6C,EAAY,IAAInxC,EAChBzI,EAAQ8oC,GAAyB,SAAS,KAAK,EAAE,EAC5Cv9C,EAAIyU,EAAM,SAAQ,EAAIzU,EAAE,WAAY,CAC3C,IAAIR,EAAOQ,EAAE,OACbgU,EAAO,cAAcxU,EAAM8iC,EAAgB+rB,CAAS,CACrD,CACD,OAAOA,CACT,EACAD,GAAqB,UAAU,oBAAsB,SAA8Bn5C,EAAI3G,EAAIg0B,EAAgB+rB,EAAW,CACpH,IAAIvnD,EAAKwH,EAAG,EAAI2G,EAAG,EACflO,EAAKuH,EAAG,EAAI2G,EAAG,EACf9G,EAAM,KAAK,KAAKrH,EAAKA,EAAKC,EAAKA,CAAE,EACjC07B,EAAKH,EAAiBx7B,EAAKqH,EAC3Bu0B,EAAKJ,EAAiBv7B,EAAKoH,EAC3BqgD,GAAQlgD,EAAG,EAAI2G,EAAG,GAAK,EACvBw5C,GAAQngD,EAAG,EAAI2G,EAAG,GAAK,EAC3B,GAAI,KAAK,QAAS,CAChB,IAAIy5C,EAAa,IAAIloD,EAAWgoD,EAAO9rB,EAAI+rB,EAAOhsB,CAAE,EACpD4rB,EAAU,IAAIK,CAAU,CACzB,CACD,GAAI,KAAK,SAAU,CACjB,IAAIC,EAAc,IAAInoD,EAAWgoD,EAAO9rB,EAAI+rB,EAAOhsB,CAAE,EACrD4rB,EAAU,IAAIM,CAAW,CAC1B,CACH,EACAP,GAAqB,UAAU,YAAc,UAAwB,CACnE,MAAO,CAAE,CACX,EACAA,GAAqB,UAAU,SAAW,UAAqB,CAC7D,OAAOA,EACT,EAEA,IAAIQ,GAAyB,SAASA,GAA0B,CAC9D,KAAK,MAAQ,KACb,KAAK,WAAa,KAClB,KAAK,UAAY,IAAI,MAAM,CAAC,EAAE,KAAK,IAAI,EACvC,KAAK,iBAAmB,KACxB,KAAK,2BAA6BA,EAAuB,UACzD,KAAK,YAAc,IAAI1xC,EACvB,IAAItV,EAAI,UAAU,CAAC,EACfC,EAAI,UAAU,CAAC,EACfpD,EAAS,UAAU,CAAC,EACxB,KAAK,2BAA6BmqD,EAAuB,iCAAiChnD,EAAGC,CAAC,EAC9F,KAAK,MAAQ,CAACD,EAAGC,EAAGpD,CAAM,EAC1B,KAAK,WAAa,CAAC,IAAIspD,GAAkB,KAAK,MAAM,CAAC,EAAG,KAAK,0BAA0B,EAAG,IAAIA,GAAkB,KAAK,MAAM,CAAC,EAAG,KAAK,0BAA0B,EAAG,IAAIA,GAAkB,KAAK,MAAM,CAAC,EAAG,KAAK,0BAA0B,CAAC,CACxO,EAEIc,GAAqB,CAAE,UAAW,CAAE,aAAc,EAAM,CAAA,EAC5DD,GAAuB,UAAU,aAAe,SAAuBE,EAAWr+B,EAAUs+B,EAAkB,CAC5Gr+C,GAAO,IAAI,QAAQ,8BAAgC3I,EAAS,iBAAiB0oB,EAAS,CAAC,CAAC,EAAI,MAAQ1oB,EAAS,iBAAiB0oB,EAAS,CAAC,CAAC,EAAI,cAAgBs+B,EAAmB,IAAM,KAAO,WAAahnD,EAAS,iBAAiB0oB,EAAS,CAAC,CAAC,CAAC,CAClP,EACAm+B,GAAuB,UAAU,QAAU,SAAkBE,EAAW,CACtE,KAAK,WAAW,KAAK,MAAM,CAAC,CAAC,EAC7B,KAAK,WAAW,KAAK,MAAM,CAAC,CAAC,EAC7B,IAAIxG,EAAU,KAAK,WAAWwG,CAAS,EACvC,OAAOxG,CACT,EACAsG,GAAuB,UAAU,WAAa,UAAuB,CACjE,IAAI56C,EAAS,KAEf,GAAI,UAAU,SAAW,EAAG,CAE1B,QADI86C,EAAY,UAAU,CAAC,EAClB9uD,EAAI,EAAGA,EAAI,KAAK,YAAY,OAAQA,IAAK,CAChD,IAAIqW,EAAKrC,EAAO,YAAY,IAAIhU,CAAC,EACjC,GAAI,CAACgU,EAAO,WAAW86C,EAAWz4C,CAAE,EAClCrC,OAAAA,EAAO,iBAAmBqC,EACnB,EAEV,CACD,MAAO,EACX,SAAa,UAAU,SAAW,EAAG,CACjC,IAAI24C,EAAc,UAAU,CAAC,EACzB1S,EAAO,UAAU,CAAC,EAItB,OAHA,KAAK,UAAU,CAAC,EAAI,KAAK,WAAW,CAAC,EAAE,YAAYA,CAAI,EACvD,KAAK,UAAU,CAAC,EAAI,KAAK,WAAW,CAAC,EAAE,YAAYA,CAAI,EACvD,KAAK,UAAU,CAAC,EAAI,KAAK,WAAW,CAAC,EAAE,YAAYA,CAAI,EACnDsS,GAAuB,YAAY,KAAK,UAAW7mD,EAAS,QAAQ,EAAY,GAC7E,KAAK,cAAcinD,EAAa,KAAK,SAAS,CACtD,CACH,EACAJ,GAAuB,UAAU,WAAa,SAAqB5rD,EAAG,CACpE,IAAIisD,EAAQ,IAAIb,GAAqBprD,CAAC,EACtC,KAAK,YAAY,OAAOisD,EAAM,UAAU,EAAI,KAAK,0BAA0B,CAAC,CAC9E,EACAL,GAAuB,UAAU,cAAgB,SAAwBE,EAAWr+B,EAAU,CAC5F,IAAIs+B,EAAmB3K,EAAU,aAAa3zB,EAAS,CAAC,EAAGA,EAAS,CAAC,EAAGq+B,CAAS,EAC7EI,EAAmBz+B,EAAS,CAAC,IAAM1oB,EAAS,SAC5CugD,EAAU,EAAEyG,EAAmBG,GACnC,OAAK5G,GAAW,KAAK,aAAawG,EAAWr+B,EAAUs+B,CAAgB,EAChEzG,CACT,EACAsG,GAAuB,UAAU,mBAAqB,UAA+B,CACnF,OAAO,KAAK,gBACd,EACAA,GAAuB,UAAU,YAAc,UAAwB,CACrE,MAAO,CAAE,CACX,EACAA,GAAuB,UAAU,SAAW,UAAqB,CAC/D,OAAOA,EACT,EACAA,GAAuB,YAAc,SAAsBn+B,EAAUa,EAAK,CACxE,QAAStxB,EAAI,EAAGA,EAAI,EAAGA,IACrB,GAAIywB,EAASzwB,CAAC,IAAMsxB,EAAO,MAAO,GAEpC,MAAO,EACT,EACAs9B,GAAuB,iCAAmC,SAA2CxP,EAAIC,EAAI,CAC3G,OAAO,KAAK,IAAIkG,EAAgB,8BAA8BnG,CAAE,EAAGmG,EAAgB,8BAA8BlG,CAAE,CAAC,CACtH,EACAuP,GAAuB,QAAU,SAAkBhnD,EAAGC,EAAGinD,EAAWrqD,EAAQ,CAC1E,IAAIu+C,EAAY,IAAI4L,GAAuBhnD,EAAGC,EAAGpD,CAAM,EACvD,OAAOu+C,EAAU,QAAQ8L,CAAS,CACpC,EACAD,GAAmB,UAAU,IAAM,UAAY,CAAE,MAAO,KAAQ,EAEhE,OAAO,iBAAkBD,GAAwBC,IAIjD,IAAIM,GAAmB,SAASA,EAAkBxR,EAAO,CACvD,KAAK,aAAe,KACpB,KAAK,WAAa,GAClB,KAAK,YAAc,KACnB,KAAK,aAAewR,EAAiB,eAAexR,CAAK,EACzD,KAAK,YAAcA,CACrB,EACAwR,GAAiB,UAAU,gBAAkB,SAA0Bj0D,EAAMk0D,EAAO,CAChF,IAAIp7C,EAAS,KAEf,GAAI9Y,IAAS,KAAQ,OAAO,KAC5B,QAAS,EAAI,EAAG,EAAIA,EAAK,iBAAgB,EAAI,IAAK,CAChD,IAAIm0D,EAAWn0D,EAAK,aAAa,CAAC,EAC9B8Y,EAAO,YAAcq7C,EAAS,QAAS,GAC3CD,EAAM,IAAIC,CAAQ,CACnB,CACH,EACAF,GAAiB,UAAU,QAAU,UAAoB,CAIvD,QAHMn7C,EAAS,KAEXo7C,EAAQ,IAAIlyC,EACPld,EAAI,KAAK,YAAY,WAAYA,EAAE,WAAY,CACtD,IAAIgD,EAAIhD,EAAE,OACVgU,EAAO,gBAAgBhR,EAAGosD,CAAK,CAChC,CACD,OAAIA,EAAM,KAAM,IAAK,EACf,KAAK,eAAiB,KACjB,KAAK,aAAa,yBAAyB,IAAI,EAEjD,KAEF,KAAK,aAAa,cAAcA,CAAK,CAC9C,EACAD,GAAiB,UAAU,YAAc,UAAwB,CAC/D,MAAO,CAAE,CACX,EACAA,GAAiB,UAAU,SAAW,UAAqB,CACzD,OAAOA,EACT,EACAA,GAAiB,QAAU,UAAoB,CAC7C,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAIxR,EAAQ,UAAU,CAAC,EACnB2R,EAAW,IAAIH,GAAiBxR,CAAK,EACzC,OAAO2R,EAAS,QAAS,CAC7B,SAAa,UAAU,SAAW,EAAG,CACjC,IAAIlQ,EAAK,UAAU,CAAC,EAChBC,EAAK,UAAU,CAAC,EAChBkQ,EAAa,IAAIJ,GAAiBA,GAAiB,WAAW/P,EAAIC,CAAE,CAAC,EACzE,OAAOkQ,EAAW,QAAS,CAC/B,SAAa,UAAU,SAAW,EAAG,CACjC,IAAIjQ,EAAO,UAAU,CAAC,EAClBC,EAAO,UAAU,CAAC,EAClB3O,EAAK,UAAU,CAAC,EAChB4e,EAAa,IAAIL,GAAiBA,GAAiB,WAAW7P,EAAMC,EAAM3O,CAAE,CAAC,EACjF,OAAO4e,EAAW,QAAS,CAC5B,CACH,EACAL,GAAiB,eAAiB,SAAyBxR,EAAO,CAChE,OAAIA,EAAM,UAAoB,KACvBA,EAAM,SAAQ,EAAG,KAAI,EAAG,WAAY,CAC7C,EACAwR,GAAiB,WAAa,UAAuB,CACnD,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAIM,EAAO,UAAU,CAAC,EAClBC,EAAO,UAAU,CAAC,EAClB9qB,EAAO,IAAI1nB,EACf,OAAA0nB,EAAK,IAAI6qB,CAAI,EACb7qB,EAAK,IAAI8qB,CAAI,EACN9qB,CACX,SAAa,UAAU,SAAW,EAAG,CACjC,IAAI+qB,EAAS,UAAU,CAAC,EACpBC,EAAS,UAAU,CAAC,EACpBC,EAAO,UAAU,CAAC,EAClBC,EAAS,IAAI5yC,EACjB,OAAA4yC,EAAO,IAAIH,CAAM,EACjBG,EAAO,IAAIF,CAAM,EACjBE,EAAO,IAAID,CAAI,EACRC,CACR,CACH,EAEA,IAAIC,GAAuB,UAAiC,CAC1D,KAAK,YAAc,KACnB,KAAK,aAAe,KACpB,IAAIlQ,EAAQ,UAAU,CAAC,EACvB,KAAK,YAAcA,EACf,KAAK,cAAgB,OAAQ,KAAK,YAAc,IAAI3iC,EAC1D,EAEI8yC,GAAqB,CAAE,sBAAuB,CAAE,aAAc,EAAM,CAAA,EACxED,GAAqB,UAAU,mBAAqB,SAA6BE,EAAU,CAIzF,QAHMj8C,EAAS,KAEX2pC,EAAQ,IAAIzgC,EACP,EAAI+yC,EAAS,SAAQ,EAAI,EAAE,WAAY,CAC9C,IAAI,EAAI,EAAE,OACN/0D,EAAO,KACPgN,EAAa,EAAG6U,EAAI,EACtB7hB,EAAO8Y,EAAO,UAAU,CAAC,EAChB,aAAauH,IACtBrgB,EAAO,GAETyiD,EAAM,IAAIziD,CAAI,CACf,CACD,OAAOyiD,CACT,EACAoS,GAAqB,UAAU,kBAAoB,SAA4Bz/C,EAAKpV,EAAMg1D,EAAe,CAEvG,QADIC,EAAoB,IAAIjzC,EACnBld,EAAI,EAAGA,EAAI9E,EAAK,iBAAgB,EAAI8E,IAAK,CAChD,IAAIowD,EAAOl1D,EAAK,aAAa8E,CAAC,EAC1BowD,EAAK,oBAAqB,EAAC,WAAW9/C,CAAG,EAAK6/C,EAAkB,IAAIC,CAAI,EAAYF,EAAc,IAAIE,CAAI,CAC/G,CACD,OAAO,KAAK,aAAa,cAAcD,CAAiB,CAC1D,EACAJ,GAAqB,UAAU,eAAiB,SAAyB3Q,EAAIC,EAAI,CAC/E,IAAIgR,EAAQjR,EAAG,sBACXkR,EAAQjR,EAAG,sBACf,GAAI,CAACgR,EAAM,WAAWC,CAAK,EAAG,CAC5B,IAAIC,EAAQpB,GAAiB,QAAQ/P,EAAIC,CAAE,EAC3C,OAAOkR,CACR,CACD,GAAInR,EAAG,iBAAgB,GAAM,GAAKC,EAAG,iBAAgB,GAAM,EAAK,OAAO,KAAK,YAAYD,EAAIC,CAAE,EAC9F,IAAImR,EAAYH,EAAM,aAAaC,CAAK,EACxC,OAAO,KAAK,+BAA+BlR,EAAIC,EAAImR,CAAS,CAC9D,EACAT,GAAqB,UAAU,MAAQ,UAAkB,CACvD,GAAI,KAAK,cAAgB,KAAQ,MAAM,IAAI,MAAM,uCAAuC,EACxF,GAAI,KAAK,YAAY,QAAO,EAAM,OAAO,KACzC,KAAK,aAAe,KAAK,YAAY,SAAQ,EAAG,KAAI,EAAG,aAEvD,QADIhnD,EAAQ,IAAIszB,GAAQ0zB,GAAqB,qBAAqB,EACzD/vD,EAAI,KAAK,YAAY,WAAYA,EAAE,WAAY,CACtD,IAAIy4B,EAAOz4B,EAAE,OACb+I,EAAM,OAAO0vB,EAAK,oBAAqB,EAAEA,CAAI,CAC9C,CACD,KAAK,YAAc,KACnB,IAAIg4B,EAAW1nD,EAAM,YACjB2nD,EAAW,KAAK,UAAUD,CAAQ,EACtC,OAAOC,CACT,EACAX,GAAqB,UAAU,YAAc,UAAwB,CACnE,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAIpS,EAAQ,UAAU,CAAC,EACvB,OAAO,KAAK,YAAYA,EAAO,EAAGA,EAAM,MAAM,CAClD,SAAa,UAAU,SAAW,EAAG,CACjC,IAAIG,EAAU,UAAU,CAAC,EACrBz9C,EAAQ,UAAU,CAAC,EACnBC,EAAM,UAAU,CAAC,EACrB,GAAIA,EAAMD,GAAS,EAAG,CACpB,IAAI++C,EAAK2Q,GAAqB,YAAYjS,EAASz9C,CAAK,EACxD,OAAO,KAAK,UAAU++C,EAAI,IAAI,CACpC,KAAW,IAAI9+C,EAAMD,IAAU,EACzB,OAAO,KAAK,UAAU0vD,GAAqB,YAAYjS,EAASz9C,CAAK,EAAG0vD,GAAqB,YAAYjS,EAASz9C,EAAQ,CAAC,CAAC,EAE5H,IAAI0f,EAAM,KAAK,OAAOzf,EAAMD,GAAS,CAAC,EAClCi/C,EAAO,KAAK,YAAYxB,EAASz9C,EAAO0f,CAAG,EAC3Cs/B,EAAK,KAAK,YAAYvB,EAAS/9B,EAAKzf,CAAG,EAC3C,OAAO,KAAK,UAAUg/C,EAAMD,CAAE,EAEjC,CACH,EACA0Q,GAAqB,UAAU,cAAgB,SAAwBpS,EAAO,CAE5E,QADIgT,EAAQ,KACH3wD,EAAI29C,EAAM,SAAQ,EAAI39C,EAAE,WAAY,CAC3C,IAAIgD,EAAIhD,EAAE,OACN2wD,IAAU,KAAQA,EAAQ3tD,EAAE,KAAI,EAAa2tD,EAAQA,EAAM,MAAM3tD,CAAC,CACvE,CACD,OAAO2tD,CACT,EACAZ,GAAqB,UAAU,UAAY,SAAoB3Q,EAAIC,EAAI,CACrE,OAAID,IAAO,MAAQC,IAAO,KAAe,KACrCD,IAAO,KAAeC,EAAG,KAAI,EAC7BA,IAAO,KAAeD,EAAG,KAAI,EAC1B,KAAK,eAAeA,EAAIC,CAAE,CACnC,EACA0Q,GAAqB,UAAU,YAAc,SAAsB3Q,EAAIC,EAAI,CACzE,OAAO0Q,GAAqB,mBAAmB3Q,EAAG,MAAMC,CAAE,CAAC,CAC7D,EACA0Q,GAAqB,UAAU,UAAY,SAAoBE,EAAU,CACvE,IAAItS,EAAQ,KAAK,mBAAmBsS,CAAQ,EACxCU,EAAQ,KAAK,YAAYhT,CAAK,EAClC,OAAOgT,CACT,EACAZ,GAAqB,UAAU,+BAAiC,SAAyC3Q,EAAIC,EAAIuR,EAAQ,CACvH,IAAIC,EAAgB,IAAI3zC,EACpB4zC,EAAQ,KAAK,kBAAkBF,EAAQxR,EAAIyR,CAAa,EACxDE,EAAQ,KAAK,kBAAkBH,EAAQvR,EAAIwR,CAAa,EACxDF,EAAQ,KAAK,YAAYG,EAAOC,CAAK,EACzCF,EAAc,IAAIF,CAAK,EACvB,IAAIK,EAAe7B,GAAiB,QAAQ0B,CAAa,EACzD,OAAOG,CACT,EACAjB,GAAqB,UAAU,YAAc,UAAwB,CACnE,GAAI,UAAU,SAAW,EAAG,CAC1B,IAAIpS,EAAQ,UAAU,CAAC,EACnBniC,EAAUmiC,EAAM,IAAI,CAAC,EAAE,WAAU,EACjCsT,EAAQz1C,EAAQ,cAAcmiC,CAAK,EACnC+S,EAAWO,EAAM,OAAO,CAAG,EAC/B,OAAOP,CACX,SAAa,UAAU,SAAW,EAAG,CACjC,IAAItR,EAAK,UAAU,CAAC,EAChBC,EAAK,UAAU,CAAC,EAChB6R,EAAY9R,EAAG,aACf+R,EAAUD,EAAU,yBAAyB,CAAC9R,EAAIC,CAAE,CAAC,EACrD+R,EAAaD,EAAQ,OAAO,CAAG,EACnC,OAAOC,CACR,CACH,EACArB,GAAqB,UAAU,YAAc,UAAwB,CACnE,MAAO,CAAE,CACX,EACAA,GAAqB,UAAU,SAAW,UAAqB,CAC7D,OAAOA,EACT,EACAA,GAAqB,mBAAqB,SAA6B/sD,EAAG,CACxE,GAAIkF,EAAalF,EAAGglB,EAAS,EAC3B,OAAOhlB,EAET,IAAIxG,EAAW6gD,GAAiB,YAAYr6C,CAAC,EAC7C,OAAIxG,EAAS,KAAI,IAAO,EAAYA,EAAS,IAAI,CAAC,EAC3CwG,EAAE,aAAa,mBAAmBsQ,EAAgB,eAAe9W,CAAQ,CAAC,CACnF,EACAuzD,GAAqB,YAAc,SAAsBnrB,EAAM77B,EAAO,CACpE,OAAIA,GAAS67B,EAAK,KAAI,EAAa,KAC5BA,EAAK,IAAI77B,CAAK,CACvB,EACAgnD,GAAqB,MAAQ,SAAgBlQ,EAAO,CAClD,IAAIiE,EAAK,IAAIiM,GAAqBlQ,CAAK,EACvC,OAAOiE,EAAG,MAAO,CACnB,EACAkM,GAAmB,sBAAsB,IAAM,UAAY,CAAE,MAAO,EAAC,EAErE,OAAO,iBAAkBD,GAAsBC,IAE/C,IAAIqB,GAAU,UAAoB,GAElCA,GAAQ,UAAU,YAAc,UAAwB,CACtD,MAAO,CAAE,CACX,EACAA,GAAQ,UAAU,SAAW,UAAqB,CAChD,OAAOA,EACT,EACAA,GAAQ,MAAQ,SAAgBruD,EAAG4D,EAAO,CACxC,GAAI5D,EAAE,QAAO,GAAM4D,EAAM,QAAO,EAAI,CAClC,GAAI5D,EAAE,QAAS,GAAI4D,EAAM,QAAO,EAAM,OAAOw9C,EAAU,kBAAkBA,EAAU,MAAOphD,EAAG4D,EAAO5D,EAAE,WAAU,CAAE,EAClH,GAAIA,EAAE,QAAS,EAAI,OAAO4D,EAAM,KAAI,EACpC,GAAIA,EAAM,QAAS,EAAI,OAAO5D,EAAE,KAAI,CACrC,CACD,OAAAA,EAAE,2BAA2BA,CAAC,EAC9BA,EAAE,2BAA2B4D,CAAK,EAC3BuhD,GAAsB,UAAUnlD,EAAG4D,EAAOw9C,EAAU,KAAK,CAClE,EC9wkBA,SAASkN,GAAOryD,EAAS4qC,EAAQzuC,EAAS,CAExCA,EAAUA,GAAW,GAGrB,IAAIgC,EAAQhC,EAAQ,OAAS,aACzBm2D,EAAQn2D,EAAQ,OAAS,EAG7B,GAAI,CAAC6D,EAAS,MAAM,IAAI,MAAM,qBAAqB,EACnD,GAAI,OAAO7D,GAAY,SAAU,MAAM,IAAI,MAAM,2BAA2B,EAC5E,GAAI,OAAOm2D,GAAU,SAAU,MAAM,IAAI,MAAM,yBAAyB,EAGxE,GAAI1nB,IAAW,OAAW,MAAM,IAAI,MAAM,oBAAoB,EAC9D,GAAI0nB,GAAS,EAAG,MAAM,IAAI,MAAM,8BAA8B,EAE9D,IAAIC,EAAU,CAAA,EACd,OAAQvyD,EAAQ,KAAI,CAClB,IAAK,qBACH,OAAA8D,GAAS9D,EAAS,SAAU3D,EAAU,CACpC,IAAIm2D,EAAWC,GAAcp2D,EAAUuuC,EAAQzsC,EAAOm0D,CAAK,EACvDE,GAAUD,EAAQ,KAAKC,CAAQ,CAC3C,CAAO,EACMv1D,GAAkBs1D,CAAO,EAClC,IAAK,oBACH,OAAA7uD,GAAY1D,EAAS,SAAUhE,EAAS,CACtC,IAAI02D,EAAgBD,GAAcz2D,EAAS4uC,EAAQzsC,EAAOm0D,CAAK,EAC3DI,GACFhvD,GAAYgvD,EAAe,SAAUF,EAAU,CACzCA,GAAUD,EAAQ,KAAKC,CAAQ,CAC/C,CAAW,CAEX,CAAO,EACMv1D,GAAkBs1D,CAAO,CACnC,CACD,OAAOE,GAAczyD,EAAS4qC,EAAQzsC,EAAOm0D,CAAK,CACpD,CAYA,SAASG,GAAczyD,EAAS4qC,EAAQzsC,EAAOm0D,EAAO,CACpD,IAAIp2D,EAAa8D,EAAQ,YAAc,GACnC3D,EAAW2D,EAAQ,OAAS,UAAYA,EAAQ,SAAWA,EAG/D,GAAI3D,EAAS,OAAS,qBAAsB,CAC1C,IAAIk2D,EAAU,CAAA,EACd,OAAAzuD,GAAS9D,EAAS,SAAU3D,EAAU,CACpC,IAAIm2D,EAAWC,GAAcp2D,EAAUuuC,EAAQzsC,EAAOm0D,CAAK,EACvDE,GAAUD,EAAQ,KAAKC,CAAQ,CACzC,CAAK,EACMv1D,GAAkBs1D,CAAO,CACjC,CAGD,IAAII,EAAaC,GAAiBv2D,CAAQ,EACtCw2D,EAAY,CACd,KAAMx2D,EAAS,KACf,YAAay2D,GAAcz2D,EAAS,YAAas2D,CAAU,CAC/D,EAGMI,EAAS,IAAI3jC,GACbnzB,EAAO82D,EAAO,KAAKF,CAAS,EAC5Bv0D,EAAWL,GAAgBI,GAAgBusC,EAAQzsC,CAAK,EAAG,QAAQ,EACnEq0D,EAAWlX,GAAS,SAASr/C,EAAMqC,EAAUg0D,CAAK,EAClDU,EAAS,IAAI3jC,GAIjB,GAHAmjC,EAAWQ,EAAO,MAAMR,CAAQ,EAG5B,CAAAS,GAAYT,EAAS,WAAW,EAGpC,KAAIhtD,EAAS,CACX,KAAMgtD,EAAS,KACf,YAAaU,GAAgBV,EAAS,YAAaG,CAAU,CACjE,EAEE,OAAO32D,GAAQwJ,EAAQtJ,CAAU,EACnC,CASA,SAAS+2D,GAAY/1D,EAAQ,CAC3B,OAAI,MAAM,QAAQA,EAAO,CAAC,CAAC,EAAU+1D,GAAY/1D,EAAO,CAAC,CAAC,EACnD,MAAMA,EAAO,CAAC,CAAC,CACxB,CAUA,SAAS41D,GAAc51D,EAAQi2D,EAAM,CACnC,OAAI,OAAOj2D,EAAO,CAAC,GAAM,SAAiBi2D,EAAKj2D,CAAM,EAC9CA,EAAO,IAAI,SAAU2C,EAAO,CACjC,OAAOizD,GAAcjzD,EAAOszD,CAAI,CACpC,CAAG,CACH,CAUA,SAASD,GAAgBh2D,EAAQi2D,EAAM,CACrC,OAAI,OAAOj2D,EAAO,CAAC,GAAM,SAAiBi2D,EAAK,OAAOj2D,CAAM,EACrDA,EAAO,IAAI,SAAU2C,EAAO,CACjC,OAAOqzD,GAAgBrzD,EAAOszD,CAAI,CACtC,CAAG,CACH,CASA,SAASP,GAAiB5yD,EAAS,CACjC,IAAI9C,EAASgJ,GAAOlG,CAAO,EAAE,SAAS,YAClCozD,EAAW,CAAC,CAACl2D,EAAO,CAAC,EAAG,CAACA,EAAO,CAAC,CAAC,EACtC,OAAOm2D,GAAyB,EAAC,OAAOD,CAAQ,EAAE,MAAMx3D,EAAW,CACrE,CC7Ie,SAAS03D,GAAOtzD,EAAS7D,EAAS,CACzCA,IAAY,SAAUA,EAAU,CAAE,GAEtCA,EAAQ,UAAYA,EAAQ,WAAa,IAEzC,IAAIa,EAAS,CAAA,EAKb,GAHAiF,GAAUjC,EAAS,SAAUH,EAAO,CAChC7C,EAAO,KAAK,CAAC6C,EAAM,CAAC,EAAGA,EAAM,CAAC,CAAC,CAAC,CACxC,CAAK,EACG,CAAC7C,EAAO,OACR,OAAO,KAEX,IAAIu2D,EAAaC,GAAWx2D,EAAQb,EAAQ,SAAS,EAErD,OAAIo3D,EAAW,OAAS,EACb52D,GAAQ,CAAC42D,CAAU,CAAC,EAExB,IACX,CCtCA,SAASx0C,GAAM/e,EAAS,CACpB,GAAI,CAACA,EACD,MAAM,IAAI,MAAM,qBAAqB,EAEzC,OAAQA,EAAQ,KAAI,CAChB,IAAK,UACD,OAAOyzD,GAAazzD,CAAO,EAC/B,IAAK,oBACD,OAAO0zD,GAAuB1zD,CAAO,EACzC,IAAK,QACL,IAAK,aACL,IAAK,UACL,IAAK,aACL,IAAK,kBACL,IAAK,eACL,IAAK,qBACD,OAAO2zD,GAAc3zD,CAAO,EAChC,QACI,MAAM,IAAI,MAAM,sBAAsB,CAC7C,CACL,CAQA,SAASyzD,GAAazzD,EAAS,CAC3B,IAAI4zD,EAAS,CAAE,KAAM,WAErB,cAAO,KAAK5zD,CAAO,EAAE,QAAQ,SAAUU,EAAK,CACxC,OAAQA,EAAG,CACP,IAAK,OACL,IAAK,aACL,IAAK,WACD,OACJ,QACIkzD,EAAOlzD,CAAG,EAAIV,EAAQU,CAAG,CAChC,CACT,CAAK,EAEDkzD,EAAO,WAAaC,GAAgB7zD,EAAQ,UAAU,EACtD4zD,EAAO,SAAWD,GAAc3zD,EAAQ,QAAQ,EACzC4zD,CACX,CAQA,SAASC,GAAgB33D,EAAY,CACjC,IAAI03D,EAAS,CAAA,EACb,OAAK13D,GAGL,OAAO,KAAKA,CAAU,EAAE,QAAQ,SAAUwE,EAAK,CAC3C,IAAI0F,EAAQlK,EAAWwE,CAAG,EACtB,OAAO0F,GAAU,SACbA,IAAU,KAEVwtD,EAAOlzD,CAAG,EAAI,KAET,MAAM,QAAQ0F,CAAK,EAExBwtD,EAAOlzD,CAAG,EAAI0F,EAAM,IAAI,SAAUozB,EAAM,CACpC,OAAOA,CAC3B,CAAiB,EAIDo6B,EAAOlzD,CAAG,EAAImzD,GAAgBztD,CAAK,EAIvCwtD,EAAOlzD,CAAG,EAAI0F,CAE1B,CAAK,EACMwtD,CACX,CAQA,SAASF,GAAuB1zD,EAAS,CACrC,IAAI4zD,EAAS,CAAE,KAAM,qBAErB,cAAO,KAAK5zD,CAAO,EAAE,QAAQ,SAAUU,EAAK,CACxC,OAAQA,EAAG,CACP,IAAK,OACL,IAAK,WACD,OACJ,QACIkzD,EAAOlzD,CAAG,EAAIV,EAAQU,CAAG,CAChC,CACT,CAAK,EAEDkzD,EAAO,SAAW5zD,EAAQ,SAAS,IAAI,SAAUhE,EAAS,CACtD,OAAOy3D,GAAaz3D,CAAO,CACnC,CAAK,EACM43D,CACX,CAQA,SAASD,GAAct3D,EAAU,CAC7B,IAAIJ,EAAO,CAAE,KAAMI,EAAS,IAAI,EAIhC,OAHIA,EAAS,OACTJ,EAAK,KAAOI,EAAS,MAErBA,EAAS,OAAS,sBAClBJ,EAAK,WAAaI,EAAS,WAAW,IAAI,SAAU0H,EAAG,CACnD,OAAO4vD,GAAc5vD,CAAC,CAClC,CAAS,EACM9H,IAEXA,EAAK,YAAc63D,GAAUz3D,EAAS,WAAW,EAC1CJ,EACX,CAQA,SAAS63D,GAAU52D,EAAQ,CACvB,IAAI02D,EAAS12D,EACb,OAAI,OAAO02D,EAAO,CAAC,GAAM,SACdA,EAAO,QAEXA,EAAO,IAAI,SAAU/zD,EAAO,CAC/B,OAAOi0D,GAAUj0D,CAAK,CAC9B,CAAK,CACL,CC5IA,SAASk0D,GAAU1kD,EAAIC,EAAI,CACzB,IAAIzH,EAAKwH,EAAG,EAAIC,EAAG,EACjBxH,EAAKuH,EAAG,EAAIC,EAAG,EAEjB,OAAOzH,EAAKA,EAAKC,EAAKA,CACxB,CAGA,SAASksD,GAAahiD,EAAG3C,EAAIC,EAAI,CAC/B,IAAIhO,EAAI+N,EAAG,EACT9N,EAAI8N,EAAG,EACPxH,EAAKyH,EAAG,EAAIhO,EACZwG,EAAKwH,EAAG,EAAI/N,EAEd,GAAIsG,IAAO,GAAKC,IAAO,EAAG,CACxB,IAAIuF,IAAM2E,EAAE,EAAI1Q,GAAKuG,GAAMmK,EAAE,EAAIzQ,GAAKuG,IAAOD,EAAKA,EAAKC,EAAKA,GAExDuF,EAAI,GACN/L,EAAIgO,EAAG,EACP/N,EAAI+N,EAAG,GACEjC,EAAI,IACb/L,GAAKuG,EAAKwF,EACV9L,GAAKuG,EAAKuF,EAEb,CAED,OAAAxF,EAAKmK,EAAE,EAAI1Q,EACXwG,EAAKkK,EAAE,EAAIzQ,EAEJsG,EAAKA,EAAKC,EAAKA,CACxB,CAIA,SAASmsD,GAAmBj3D,EAAQk3D,EAAa,CAK/C,QAJIC,EAAYn3D,EAAO,CAAC,EACtB4D,EAAY,CAACuzD,CAAS,EACtB13D,EAEOsE,EAAI,EAAGmO,EAAMlS,EAAO,OAAQ+D,EAAImO,EAAKnO,IAC5CtE,EAAQO,EAAO+D,CAAC,EAEZgzD,GAAUt3D,EAAO03D,CAAS,EAAID,IAChCtzD,EAAU,KAAKnE,CAAK,EACpB03D,EAAY13D,GAIhB,OAAI03D,IAAc13D,GAAOmE,EAAU,KAAKnE,CAAK,EAEtCmE,CACT,CAEA,SAASwzD,GAAep3D,EAAQq3D,EAAOn1C,EAAMg1C,EAAaI,EAAY,CAIpE,QAHIC,EAAYL,EACdpqD,EAEO/I,EAAIszD,EAAQ,EAAGtzD,EAAIme,EAAMne,IAAK,CACrC,IAAIyzD,EAASR,GAAah3D,EAAO+D,CAAC,EAAG/D,EAAOq3D,CAAK,EAAGr3D,EAAOkiB,CAAI,CAAC,EAE5Ds1C,EAASD,IACXzqD,EAAQ/I,EACRwzD,EAAYC,EAEf,CAEGD,EAAYL,IACVpqD,EAAQuqD,EAAQ,GAClBD,GAAep3D,EAAQq3D,EAAOvqD,EAAOoqD,EAAaI,CAAU,EAC9DA,EAAW,KAAKt3D,EAAO8M,CAAK,CAAC,EACzBoV,EAAOpV,EAAQ,GACjBsqD,GAAep3D,EAAQ8M,EAAOoV,EAAMg1C,EAAaI,CAAU,EAEjE,CAGA,SAASG,GAAuBz3D,EAAQk3D,EAAa,CACnD,IAAIh1C,EAAOliB,EAAO,OAAS,EAEvBs3D,EAAa,CAACt3D,EAAO,CAAC,CAAC,EAC3B,OAAAo3D,GAAep3D,EAAQ,EAAGkiB,EAAMg1C,EAAaI,CAAU,EACvDA,EAAW,KAAKt3D,EAAOkiB,CAAI,CAAC,EAErBo1C,CACT,CAGA,SAASI,GAAS13D,EAAQ4J,EAAW+tD,EAAgB,CACnD,GAAI33D,EAAO,QAAU,EAAG,OAAOA,EAE/B,IAAIk3D,EAActtD,IAAc,OAAYA,EAAYA,EAAY,EAEpE,OAAA5J,EAAS23D,EAAiB33D,EAASi3D,GAAmBj3D,EAAQk3D,CAAW,EACzEl3D,EAASy3D,GAAuBz3D,EAAQk3D,CAAW,EAE5Cl3D,CACT,CA0CA,SAAS43D,GAAW50D,EAAS7D,EAAS,CAGpC,GADAA,EAAUA,GAAW,GACjB,CAACmD,GAASnD,CAAO,EAAG,MAAM,IAAI,MAAM,oBAAoB,EAC5D,IAAIyK,EAAYzK,EAAQ,YAAc,OAAYA,EAAQ,UAAY,EAClE04D,EAAc14D,EAAQ,aAAe,GACrCiE,EAASjE,EAAQ,QAAU,GAE/B,GAAI,CAAC6D,EAAS,MAAM,IAAI,MAAM,qBAAqB,EACnD,GAAI4G,GAAaA,EAAY,EAAG,MAAM,IAAI,MAAM,mBAAmB,EAGnE,OAAIxG,IAAW,KAAMJ,EAAU+e,GAAM/e,CAAO,GAE5C8D,GAAS9D,EAAS,SAAU/D,EAAM,CAChC64D,GAAa74D,EAAM2K,EAAWiuD,CAAW,CAC7C,CAAG,EACM70D,CACT,CAWA,SAAS80D,GAAaz4D,EAAUuK,EAAWiuD,EAAa,CACtD,IAAIv4D,EAAOD,EAAS,KAGpB,GAAIC,IAAS,SAAWA,IAAS,aAAc,OAAOD,EAGtD8D,GAAY9D,EAAU,EAAI,EAE1B,IAAIE,EAAcF,EAAS,YAC3B,OAAQC,EAAI,CACV,IAAK,aACHD,EAAS,YAAiB04D,GACxBx4D,EACAqK,EACAiuD,CACR,EACM,MACF,IAAK,kBACHx4D,EAAS,YAAiBE,EAAY,IAAI,SAAUiZ,EAAO,CACzD,OAAOu/C,GAAav/C,EAAO5O,EAAWiuD,CAAW,CACzD,CAAO,EACD,MACF,IAAK,UACHx4D,EAAS,YAAiB24D,GACxBz4D,EACAqK,EACAiuD,CACR,EACM,MACF,IAAK,eACHx4D,EAAS,YAAiBE,EAAY,IAAI,SAAUoZ,EAAO,CACzD,OAAOq/C,GAAgBr/C,EAAO/O,EAAWiuD,CAAW,CAC5D,CAAO,CACJ,CACD,OAAOx4D,CACT,CAWA,SAAS04D,GAAax4D,EAAaqK,EAAWiuD,EAAa,CACzD,OAAOH,GACLn4D,EAAY,IAAI,SAAUsD,EAAO,CAC/B,MAAO,CAAE,EAAGA,EAAM,CAAC,EAAG,EAAGA,EAAM,CAAC,EAAG,EAAGA,EAAM,CAAC,CAAC,CACpD,CAAK,EACD+G,EACAiuD,CACJ,EAAI,IAAI,SAAU33D,EAAQ,CACtB,OAAOA,EAAO,EAAI,CAACA,EAAO,EAAGA,EAAO,EAAGA,EAAO,CAAC,EAAI,CAACA,EAAO,EAAGA,EAAO,CAAC,CAC1E,CAAG,CACH,CAWA,SAAS83D,GAAgBz4D,EAAaqK,EAAWiuD,EAAa,CAC5D,OAAOt4D,EAAY,IAAI,SAAUc,EAAM,CACrC,IAAIke,EAAMle,EAAK,IAAI,SAAUwC,EAAO,CAClC,MAAO,CAAE,EAAGA,EAAM,CAAC,EAAG,EAAGA,EAAM,CAAC,EACtC,CAAK,EACD,GAAI0b,EAAI,OAAS,EACf,MAAM,IAAI,MAAM,iBAAiB,EAQnC,QANI05C,EAAaP,GAASn5C,EAAK3U,EAAWiuD,CAAW,EAAE,IAAI,SACzD33D,EACA,CACA,MAAO,CAACA,EAAO,EAAGA,EAAO,CAAC,CAChC,CAAK,EAEM,CAACg4D,GAAcD,CAAU,GAC9BruD,GAAaA,EAAY,IACzBquD,EAAaP,GAASn5C,EAAK3U,EAAWiuD,CAAW,EAAE,IAAI,SACrD33D,EACA,CACA,MAAO,CAACA,EAAO,EAAGA,EAAO,CAAC,CAClC,CAAO,EAEH,OACE+3D,EAAWA,EAAW,OAAS,CAAC,EAAE,CAAC,IAAMA,EAAW,CAAC,EAAE,CAAC,GACxDA,EAAWA,EAAW,OAAS,CAAC,EAAE,CAAC,IAAMA,EAAW,CAAC,EAAE,CAAC,IAExDA,EAAW,KAAKA,EAAW,CAAC,CAAC,EAExBA,CACX,CAAG,CACH,CASA,SAASC,GAAc73D,EAAM,CAC3B,OAAIA,EAAK,OAAS,EAAU,GAErB,EACLA,EAAK,SAAW,GAChBA,EAAK,CAAC,EAAE,CAAC,IAAMA,EAAK,CAAC,EAAE,CAAC,GACxBA,EAAK,CAAC,EAAE,CAAC,IAAMA,EAAK,CAAC,EAAE,CAAC,EAE5B,CC7Qe,SAAS83D,GAAsB14D,EAAOE,EAASR,EAAS,CAGnE,GAFIA,IAAY,SAAUA,EAAU,CAAE,GAElC,CAACM,EACD,MAAM,IAAI,MAAM,mBAAmB,EAEvC,GAAI,CAACE,EACD,MAAM,IAAI,MAAM,qBAAqB,EAEzC,IAAIya,EAAKxX,GAASnD,CAAK,EACnBR,EAAO8D,GAAQpD,CAAO,EACtBL,EAAOL,EAAK,KACZwD,EAAO9C,EAAQ,KACfikD,EAAQ3kD,EAAK,YAEjB,GAAIwD,GAAQ21D,GAAOh+C,EAAI3X,CAAI,IAAM,GAC7B,MAAO,GAGPnD,IAAS,YACTskD,EAAQ,CAACA,CAAK,GAGlB,QADIyU,EAAa,GACRt0D,EAAI,EAAGA,EAAI6/C,EAAM,QAAU,CAACyU,EAAYt0D,IAE7C,GAAIu0D,GAAOl+C,EAAIwpC,EAAM7/C,CAAC,EAAE,CAAC,EAAG5E,EAAQ,cAAc,EAAG,CAIjD,QAHIo5D,EAAS,GACTnzD,EAAI,EAEDA,EAAIw+C,EAAM7/C,CAAC,EAAE,QAAU,CAACw0D,GACvBD,GAAOl+C,EAAIwpC,EAAM7/C,CAAC,EAAEqB,CAAC,EAAG,CAACjG,EAAQ,cAAc,IAC/Co5D,EAAS,IAEbnzD,IAECmzD,IACDF,EAAa,GAEpB,CAEL,OAAOA,CACX,CAUA,SAASC,GAAOl+C,EAAI/Z,EAAMm4D,EAAgB,CACtC,IAAIC,EAAW,GACXp4D,EAAK,CAAC,EAAE,CAAC,IAAMA,EAAKA,EAAK,OAAS,CAAC,EAAE,CAAC,GACtCA,EAAK,CAAC,EAAE,CAAC,IAAMA,EAAKA,EAAK,OAAS,CAAC,EAAE,CAAC,IACtCA,EAAOA,EAAK,MAAM,EAAGA,EAAK,OAAS,CAAC,GAExC,QAAS,EAAI,EAAGC,EAAID,EAAK,OAAS,EAAG,EAAIA,EAAK,OAAQC,EAAI,IAAK,CAC3D,IAAIo4D,EAAKr4D,EAAK,CAAC,EAAE,CAAC,EACds4D,EAAKt4D,EAAK,CAAC,EAAE,CAAC,EACdu4D,EAAKv4D,EAAKC,CAAC,EAAE,CAAC,EACdu4D,EAAKx4D,EAAKC,CAAC,EAAE,CAAC,EACdw4D,EAAa1+C,EAAG,CAAC,GAAKs+C,EAAKE,GAAMD,GAAMC,EAAKx+C,EAAG,CAAC,GAAKy+C,GAAMz+C,EAAG,CAAC,EAAIs+C,KAAQ,IAC1EA,EAAKt+C,EAAG,CAAC,IAAMw+C,EAAKx+C,EAAG,CAAC,IAAM,IAC9Bu+C,EAAKv+C,EAAG,CAAC,IAAMy+C,EAAKz+C,EAAG,CAAC,IAAM,EACnC,GAAI0+C,EACA,MAAO,CAACN,EAEZ,IAAIO,EAAYJ,EAAKv+C,EAAG,CAAC,GAAMy+C,EAAKz+C,EAAG,CAAC,GACpCA,EAAG,CAAC,GAAMw+C,EAAKF,IAAOt+C,EAAG,CAAC,EAAIu+C,IAAQE,EAAKF,GAAMD,EACjDK,IACAN,EAAW,CAACA,EAEnB,CACD,OAAOA,CACX,CASA,SAASL,GAAOh+C,EAAI3X,EAAM,CACtB,OAAQA,EAAK,CAAC,GAAK2X,EAAG,CAAC,GAAK3X,EAAK,CAAC,GAAK2X,EAAG,CAAC,GAAK3X,EAAK,CAAC,GAAK2X,EAAG,CAAC,GAAK3X,EAAK,CAAC,GAAK2X,EAAG,CAAC,CACvF,CCjGA,SAAS4+C,GAAYh2D,EAAS,CAC1B,GAAI,CAACA,EACD,MAAM,IAAI,MAAM,qBAAqB,EAEzC,IAAIuyD,EAAU,CAAA,EACd,OAAAluD,GAAYrE,EAAS,SAAUhE,EAAS,CACpCi6D,GAAmBj6D,EAASu2D,CAAO,CAC3C,CAAK,EACMt1D,GAAkBs1D,CAAO,CACpC,CASA,SAAS0D,GAAmBj2D,EAASuyD,EAAS,CAC1C,IAAIr1D,EAAS,CAAA,EACTb,EAAW2D,EAAQ,SACvB,GAAI3D,IAAa,KAAM,CACnB,OAAQA,EAAS,KAAI,CACjB,IAAK,UACDa,EAAS4C,GAAUzD,CAAQ,EAC3B,MACJ,IAAK,aACDa,EAAS,CAAC4C,GAAUzD,CAAQ,CAAC,CACpC,CACDa,EAAO,QAAQ,SAAU2C,EAAO,CAC5B,IAAIq2D,EAAWC,GAAet2D,EAAOG,EAAQ,UAAU,EACvDk2D,EAAS,QAAQ,SAAUzY,EAAS,CAChCA,EAAQ,GAAK8U,EAAQ,OACrBA,EAAQ,KAAK9U,CAAO,CACpC,CAAa,CACb,CAAS,CACJ,CACL,CASA,SAAS0Y,GAAej5D,EAAQhB,EAAY,CACxC,IAAIg6D,EAAW,CAAA,EACf,OAAAh5D,EAAO,OAAO,SAAUwH,EAAgB0xD,EAAe,CACnD,IAAI3Y,EAAU/gD,GAAW,CAACgI,EAAgB0xD,CAAa,EAAGl6D,CAAU,EACpE,OAAAuhD,EAAQ,KAAOh+C,GAAKiF,EAAgB0xD,CAAa,EACjDF,EAAS,KAAKzY,CAAO,EACd2Y,CACf,CAAK,EACMF,CACX,CASA,SAASz2D,GAAK42D,EAASC,EAAS,CAC5B,IAAI5vD,EAAK2vD,EAAQ,CAAC,EACdzmD,EAAKymD,EAAQ,CAAC,EACd1vD,EAAK2vD,EAAQ,CAAC,EACdzmD,EAAKymD,EAAQ,CAAC,EACd5wD,EAAOgB,EAAKC,EAAKD,EAAKC,EACtBhB,EAAQiK,EAAKC,EAAKD,EAAKC,EACvBjK,EAAOc,EAAKC,EAAKD,EAAKC,EACtBd,EAAQ+J,EAAKC,EAAKD,EAAKC,EAC3B,MAAO,CAACnK,EAAMC,EAAOC,EAAMC,CAAK,CACpC,qCCvEA,SAAS0wD,GAAc5U,EAAO6U,EAAO,CACjC,IAAIC,EAAS,CAAA,EACTlE,EAAU,CAAA,EASd,GANI5Q,EAAM,OAAS,eACfA,EAAQ3lD,GAAQ2lD,CAAK,GAErB6U,EAAM,OAAS,eACfA,EAAQx6D,GAAQw6D,CAAK,GAErB7U,EAAM,OAAS,WACf6U,EAAM,OAAS,WACf7U,EAAM,WAAa,MACnB6U,EAAM,WAAa,MACnB7U,EAAM,SAAS,OAAS,cACxB6U,EAAM,SAAS,OAAS,cACxB7U,EAAM,SAAS,YAAY,SAAW,GACtC6U,EAAM,SAAS,YAAY,SAAW,EAAG,CACzC,IAAIT,EAAYrc,GAAWiI,EAAO6U,CAAK,EACvC,OAAIT,GACAxD,EAAQ,KAAKwD,CAAS,EAEnB94D,GAAkBs1D,CAAO,CACnC,CAED,IAAIt0B,EAAOy4B,KACX,OAAAz4B,EAAK,KAAK+3B,GAAYQ,CAAK,CAAC,EAC5B9yD,GAAYsyD,GAAYrU,CAAK,EAAG,SAAUlE,EAAS,CAC/C/5C,GAAYu6B,EAAK,OAAOwf,CAAO,EAAG,SAAUkZ,EAAO,CAC/C,IAAIZ,EAAYrc,GAAW+D,EAASkZ,CAAK,EACzC,GAAIZ,EAAW,CAEX,IAAIr1D,EAAMZ,GAAUi2D,CAAS,EAAE,KAAK,GAAG,EAClCU,EAAO/1D,CAAG,IACX+1D,EAAO/1D,CAAG,EAAI,GACd6xD,EAAQ,KAAKwD,CAAS,EAE7B,CACb,CAAS,CACT,CAAK,EACM94D,GAAkBs1D,CAAO,CACpC,CASA,SAAS7Y,GAAWiI,EAAO6U,EAAO,CAC9B,IAAIH,EAAUv2D,GAAU6hD,CAAK,EACzB2U,EAAUx2D,GAAU02D,CAAK,EAC7B,GAAIH,EAAQ,SAAW,EACnB,MAAM,IAAI,MAAM,oDAAoD,EAExE,GAAIC,EAAQ,SAAW,EACnB,MAAM,IAAI,MAAM,oDAAoD,EAExE,IAAI5vD,EAAK2vD,EAAQ,CAAC,EAAE,CAAC,EACjBzmD,EAAKymD,EAAQ,CAAC,EAAE,CAAC,EACjB1vD,EAAK0vD,EAAQ,CAAC,EAAE,CAAC,EACjBxmD,EAAKwmD,EAAQ,CAAC,EAAE,CAAC,EACjBn+C,EAAKo+C,EAAQ,CAAC,EAAE,CAAC,EACjBM,EAAKN,EAAQ,CAAC,EAAE,CAAC,EACjBn+C,EAAKm+C,EAAQ,CAAC,EAAE,CAAC,EACjBO,EAAKP,EAAQ,CAAC,EAAE,CAAC,EACjBnmD,GAAS0mD,EAAKD,IAAOjwD,EAAKD,IAAOyR,EAAKD,IAAOrI,EAAKD,GAClDknD,GAAS3+C,EAAKD,IAAOtI,EAAKgnD,IAAOC,EAAKD,IAAOlwD,EAAKwR,GAClD6+C,GAASpwD,EAAKD,IAAOkJ,EAAKgnD,IAAO/mD,EAAKD,IAAOlJ,EAAKwR,GACtD,GAAI/H,IAAU,EACV,OACW,KAIf,IAAI6mD,EAAKF,EAAQ3mD,EACb8mD,EAAKF,EAAQ5mD,EACjB,GAAI6mD,GAAM,GAAKA,GAAM,GAAKC,GAAM,GAAKA,GAAM,EAAG,CAC1C,IAAI31D,EAAIoF,EAAKswD,GAAMrwD,EAAKD,GACpBnF,EAAIqO,EAAKonD,GAAMnnD,EAAKD,GACxB,OAAOnT,GAAM,CAAC6E,EAAGC,CAAC,CAAC,CACtB,CACD,OAAO,IACX,CCtFe,SAAA21D,GAAUttC,EAAMztB,EAAS,CAChCA,IAAY,SAAUA,EAAU,CAAE,GACtC,IAAIF,EAAO8D,GAAQ6pB,CAAI,EAIvB,OAHI,CAACztB,EAAQ,YAAcytB,EAAK,OAAS,YACrCztB,EAAQ,WAAaytB,EAAK,YAEtB3tB,EAAK,KAAI,CACb,IAAK,UACD,OAAOi7D,GAAcj7D,EAAME,CAAO,EACtC,IAAK,eACD,OAAOg7D,GAAmBl7D,EAAME,CAAO,EAC3C,QACI,MAAM,IAAI,MAAM,cAAc,CACrC,CACL,CAIO,SAAS+6D,GAActtC,EAAMztB,EAAS,CACrCA,IAAY,SAAUA,EAAU,CAAE,GACtC,IAAIF,EAAO8D,GAAQ6pB,CAAI,EACnB1sB,EAASjB,EAAK,YACdC,EAAaC,EAAQ,WACnBA,EAAQ,WACRytB,EAAK,OAAS,UACVA,EAAK,WACL,GACV,OAAOwtC,GAAal6D,EAAQhB,CAAU,CAC1C,CAIO,SAASi7D,GAAmBE,EAAWl7D,EAAS,CAC/CA,IAAY,SAAUA,EAAU,CAAE,GACtC,IAAIF,EAAO8D,GAAQs3D,CAAS,EACxBn6D,EAASjB,EAAK,YACdC,EAAaC,EAAQ,WACnBA,EAAQ,WACRk7D,EAAU,OAAS,UACfA,EAAU,WACV,GACN7hD,EAAQ,CAAA,EACZ,OAAAtY,EAAO,QAAQ,SAAU2C,EAAO,CAC5B2V,EAAM,KAAK4hD,GAAav3D,EAAO3D,CAAU,CAAC,CAClD,CAAK,EACMe,GAAkBuY,CAAK,CAClC,CAIO,SAAS4hD,GAAal6D,EAAQhB,EAAY,CAC7C,OAAIgB,EAAO,OAAS,EACTL,GAAgBK,EAAQhB,CAAU,EAEtCQ,GAAWQ,EAAO,CAAC,EAAGhB,CAAU,CAC3C,CCxDA,SAASo7D,GAAgBC,EAAUC,EAAU,CACzC,IAAIC,EAAO,GACX,OAAApzD,GAAYkzD,EAAU,SAAUG,EAAU,CACtCrzD,GAAYmzD,EAAU,SAAUG,EAAU,CACtC,GAAIF,IAAS,GACT,MAAO,GAEXA,EAAOG,GAASF,EAAS,SAAUC,EAAS,QAAQ,CAChE,CAAS,CACT,CAAK,EACMF,CACX,CASA,SAASG,GAASzJ,EAAO0J,EAAO,CAC5B,OAAQ1J,EAAM,KAAI,CACd,IAAK,QACD,OAAQ0J,EAAM,KAAI,CACd,IAAK,QACD,MAAO,CAACC,GAAc3J,EAAM,YAAa0J,EAAM,WAAW,EAC9D,IAAK,aACD,MAAO,CAACE,GAAcF,EAAO1J,CAAK,EACtC,IAAK,UACD,MAAO,CAACgH,GAAsBhH,EAAO0J,CAAK,CACjD,CAED,MACJ,IAAK,aACD,OAAQA,EAAM,KAAI,CACd,IAAK,QACD,MAAO,CAACE,GAAc5J,EAAO0J,CAAK,EACtC,IAAK,aACD,MAAO,CAACG,GAAa7J,EAAO0J,CAAK,EACrC,IAAK,UACD,MAAO,CAACI,GAAaJ,EAAO1J,CAAK,CACxC,CAED,MACJ,IAAK,UACD,OAAQ0J,EAAM,KAAI,CACd,IAAK,QACD,MAAO,CAAC1C,GAAsB0C,EAAO1J,CAAK,EAC9C,IAAK,aACD,MAAO,CAAC8J,GAAa9J,EAAO0J,CAAK,EACrC,IAAK,UACD,MAAO,CAACK,GAAaL,EAAO1J,CAAK,CACxC,CACR,CACD,MAAO,EACX,CAEA,SAAS4J,GAAcr7D,EAAY0a,EAAI,CACnC,QAASrW,EAAI,EAAGA,EAAIrE,EAAW,YAAY,OAAS,EAAGqE,IACnD,GAAIE,GAAqBvE,EAAW,YAAYqE,CAAC,EAAGrE,EAAW,YAAYqE,EAAI,CAAC,EAAGqW,EAAG,WAAW,EAC7F,MAAO,GAGf,MAAO,EACX,CACA,SAAS4gD,GAAaG,EAAaC,EAAa,CAC5C,IAAIC,EAAmB9B,GAAc4B,EAAaC,CAAW,EAC7D,OAAIC,EAAiB,SAAS,OAAS,CAI3C,CACA,SAASJ,GAAat7D,EAASD,EAAY,CACvC,QAASS,EAAK,EAAGm7D,EAAK57D,EAAW,YAAaS,EAAKm7D,EAAG,OAAQn7D,IAAM,CAChE,IAAI0C,EAAQy4D,EAAGn7D,CAAE,EACjB,GAAIg4D,GAAsBt1D,EAAOlD,CAAO,EACpC,MAAO,EAEd,CACD,IAAI07D,EAAmB9B,GAAc75D,EAAYw6D,GAAcv6D,CAAO,CAAC,EACvE,OAAI07D,EAAiB,SAAS,OAAS,CAI3C,CAWA,SAASH,GAAaX,EAAUC,EAAU,CACtC,QAASr6D,EAAK,EAAGm7D,EAAKf,EAAS,YAAY,CAAC,EAAGp6D,EAAKm7D,EAAG,OAAQn7D,IAAM,CACjE,IAAIqjB,EAAS83C,EAAGn7D,CAAE,EAClB,GAAIg4D,GAAsB30C,EAAQg3C,CAAQ,EACtC,MAAO,EAEd,CACD,QAASe,EAAK,EAAGC,EAAKhB,EAAS,YAAY,CAAC,EAAGe,EAAKC,EAAG,OAAQD,IAAM,CACjE,IAAI93C,EAAS+3C,EAAGD,CAAE,EAClB,GAAIpD,GAAsB10C,EAAQ82C,CAAQ,EACtC,MAAO,EAEd,CACD,IAAIc,EAAmB9B,GAAcW,GAAcK,CAAQ,EAAGL,GAAcM,CAAQ,CAAC,EACrF,OAAIa,EAAiB,SAAS,OAAS,CAI3C,CACA,SAASp3D,GAAqBw3D,EAAkBC,EAAgBthD,EAAI,CAChE,IAAIxV,EAAMwV,EAAG,CAAC,EAAIqhD,EAAiB,CAAC,EAChC52D,EAAMuV,EAAG,CAAC,EAAIqhD,EAAiB,CAAC,EAChC32D,EAAM42D,EAAe,CAAC,EAAID,EAAiB,CAAC,EAC5C12D,EAAM22D,EAAe,CAAC,EAAID,EAAiB,CAAC,EAC5Cz2D,EAAQJ,EAAMG,EAAMF,EAAMC,EAC9B,OAAIE,IAAU,EACH,GAEP,KAAK,IAAIF,CAAG,GAAK,KAAK,IAAIC,CAAG,EACzBD,EAAM,EACC22D,EAAiB,CAAC,GAAKrhD,EAAG,CAAC,GAAKA,EAAG,CAAC,GAAKshD,EAAe,CAAC,EAGzDA,EAAe,CAAC,GAAKthD,EAAG,CAAC,GAAKA,EAAG,CAAC,GAAKqhD,EAAiB,CAAC,EAG/D12D,EAAM,EACJ02D,EAAiB,CAAC,GAAKrhD,EAAG,CAAC,GAAKA,EAAG,CAAC,GAAKshD,EAAe,CAAC,EAGzDA,EAAe,CAAC,GAAKthD,EAAG,CAAC,GAAKA,EAAG,CAAC,GAAKqhD,EAAiB,CAAC,CAExE,CASA,SAASX,GAAca,EAAOC,EAAO,CACjC,OAAOD,EAAM,CAAC,IAAMC,EAAM,CAAC,GAAKD,EAAM,CAAC,IAAMC,EAAM,CAAC,CACxD,CCtJe,SAASC,GAAkBtB,EAAUC,EAAU,CAC1D,IAAIC,EAAO,GACX,OAAApzD,GAAYkzD,EAAU,SAAUG,EAAU,CACtCrzD,GAAYmzD,EAAU,SAAUG,EAAU,CACtC,GAAIF,IAAS,GACT,MAAO,GAEXA,EAAO,CAACH,GAAgBI,EAAS,SAAUC,EAAS,QAAQ,CACxE,CAAS,CACT,CAAK,EACMF,CACX,CCDA,SAASn5D,GAASw6D,EAAMC,EAAI58D,EAAS,CAC7BA,IAAY,SAAUA,EAAU,CAAE,GACtC,IAAI68D,EAAep5D,GAASk5D,CAAI,EAC5BG,EAAer5D,GAASm5D,CAAE,EAC1BG,EAAOr6D,GAAiBo6D,EAAa,CAAC,EAAID,EAAa,CAAC,CAAC,EACzDG,EAAOt6D,GAAiBo6D,EAAa,CAAC,EAAID,EAAa,CAAC,CAAC,EACzDI,EAAOv6D,GAAiBm6D,EAAa,CAAC,CAAC,EACvCK,EAAOx6D,GAAiBo6D,EAAa,CAAC,CAAC,EACvCtwD,EAAI,KAAK,IAAI,KAAK,IAAIuwD,EAAO,CAAC,EAAG,CAAC,EAClC,KAAK,IAAI,KAAK,IAAIC,EAAO,CAAC,EAAG,CAAC,EAAI,KAAK,IAAIC,CAAI,EAAI,KAAK,IAAIC,CAAI,EACpE,OAAOp7D,GAAgB,EAAI,KAAK,MAAM,KAAK,KAAK0K,CAAC,EAAG,KAAK,KAAK,EAAIA,CAAC,CAAC,EAAGxM,EAAQ,KAAK,CACxF,CCEe,SAAS45D,GAAUuD,EAAOC,EAAOp9D,EAAS,CACjDA,IAAY,SAAUA,EAAU,CAAE,GACtC,IAAIgyD,EAAQpuD,GAAQu5D,CAAK,EACrBzB,EAAQ93D,GAAQw5D,CAAK,EACrBC,EAAeC,GAAgB,aAAatL,EAAM,YAAa0J,EAAM,WAAW,EACpF,OAAI2B,EAAa,SAAW,EACjB,KACPA,EAAa,SAAW,EACjB78D,GAAQ68D,EAAa,CAAC,EAAGr9D,EAAQ,UAAU,EAC/CW,GAAa08D,EAAcr9D,EAAQ,UAAU,CACxD,CCrBA,SAASu9D,GAAQj6D,EAAMk6D,EAAUx9D,EAAS,CAClCA,IAAY,SAAUA,EAAU,CAAE,GAEtC,IAAIy9D,EAAmB,KAAK,UAAUz9D,EAAQ,YAAc,CAAA,CAAE,EAC1DuJ,EAAOjG,EAAK,CAAC,EAAGkG,EAAQlG,EAAK,CAAC,EAAGmG,EAAOnG,EAAK,CAAC,EAAGoG,EAAQpG,EAAK,CAAC,EAC/Do6D,GAAWl0D,EAAQE,GAAS,EAC5Bi0D,GAAWp0D,EAAOE,GAAQ,EAE1Bm0D,EAAaJ,EAAW,EAAKr7D,GAAS,CAACoH,EAAMm0D,CAAO,EAAG,CAACj0D,EAAMi0D,CAAO,EAAG19D,CAAO,EAC/E69D,EAAYD,GAAan0D,EAAOF,GAChCu0D,EAAaN,EAAW,EAAKr7D,GAAS,CAACw7D,EAASn0D,CAAK,EAAG,CAACm0D,EAASj0D,CAAK,EAAG1J,CAAO,EACjF+9D,EAAaD,GAAap0D,EAAQF,GAClCilC,EAASovB,EAAY,EACrBG,EAAYvvB,EAAS,EACrBwvB,EAAc,KAAK,KAAK,CAAC,EAAI,EAAKF,EAClCG,EAAYz0D,EAAOF,EACnB40D,EAAaz0D,EAAQF,EACrB40D,EAAc,EAAI,EAAKJ,EACvBK,EAAaJ,EAEbK,IAAUJ,EAAYF,IAAcA,EAAYvvB,EAAS,GACzD8vB,GAAU,KAAK,MAAMD,EAAM,EAC3BE,IAAYD,GAAUH,EAAa3vB,EAAS,EAAIyvB,GAAa,EAC7DzvB,EAAS,EACT2vB,EAAa,EAEbK,GAAU,KAAK,OAAON,EAAaF,GAAcA,CAAU,EAC3DS,IAAYP,EAAaM,GAAUR,GAAc,EACjDU,GAAaF,GAAUR,EAAaE,EAAaF,EAAa,EAC9DU,KACAD,IAAYT,EAAa,GAK7B,QAFIW,GAAU,CAAA,EACVC,GAAQ,CAAA,EACHj6D,GAAI,EAAGA,GAAI,EAAGA,KAAK,CACxB,IAAIpC,GAAU,EAAI,KAAK,GAAM,EAAKoC,GAClCg6D,GAAQ,KAAK,KAAK,IAAIp8D,EAAK,CAAC,EAC5Bq8D,GAAM,KAAK,KAAK,IAAIr8D,EAAK,CAAC,CAC7B,CAED,QADI4zD,GAAU,CAAA,EACLjxD,GAAI,EAAGA,IAAKo5D,GAASp5D,KAC1B,QAASC,GAAI,EAAGA,IAAKq5D,GAASr5D,KAAK,CAC/B,IAAI05D,GAAQ35D,GAAI,IAAM,EACtB,GAAI,EAAAC,KAAM,GAAK05D,KAEX,EAAA15D,KAAM,GAAKu5D,IAEf,KAAII,GAAW55D,GAAIi5D,EAAa70D,EAAOi1D,GACnCQ,GAAW55D,GAAIi5D,EAAa70D,EAAQk1D,GAIxC,GAHII,KACAE,IAAYf,EAAa,GAEzBj+D,EAAQ,YAAc,GACtBi/D,GAAa,CAACF,GAAUC,EAAQ,EAAGnB,EAAY,EAAGE,EAAa,EAAG,KAAK,MAAMN,CAAgB,EAAGmB,GAASC,EAAK,EAAE,QAAQ,SAAUK,GAAU,CACpIl/D,EAAQ,KACJ45D,GAAU55D,EAAQ,KAAMk/D,EAAQ,GAChC9I,GAAQ,KAAK8I,EAAQ,EAGzB9I,GAAQ,KAAK8I,EAAQ,CAE7C,CAAiB,MAEA,CACD,IAAIC,GAAMC,GAAQ,CAACL,GAAUC,EAAQ,EAAGnB,EAAY,EAAGE,EAAa,EAAG,KAAK,MAAMN,CAAgB,EAAGmB,GAASC,EAAK,EAC/G7+D,EAAQ,KACJ45D,GAAU55D,EAAQ,KAAMm/D,EAAG,GAC3B/I,GAAQ,KAAK+I,EAAG,EAGpB/I,GAAQ,KAAK+I,EAAG,CAEvB,EACJ,CAEL,OAAOr+D,GAAkBs1D,EAAO,CACpC,CAaA,SAASgJ,GAAQr1D,EAAQs1D,EAAIC,EAAIv/D,EAAY6+D,EAASC,EAAO,CAEzD,QADIU,EAAW,CAAA,EACN36D,EAAI,EAAGA,EAAI,EAAGA,IAAK,CACxB,IAAIO,EAAI4E,EAAO,CAAC,EAAIs1D,EAAKT,EAAQh6D,CAAC,EAC9BQ,EAAI2E,EAAO,CAAC,EAAIu1D,EAAKT,EAAMj6D,CAAC,EAChC26D,EAAS,KAAK,CAACp6D,EAAGC,CAAC,CAAC,CACvB,CAED,OAAAm6D,EAAS,KAAKA,EAAS,CAAC,EAAE,MAAO,CAAA,EAC1B/+D,GAAQ,CAAC++D,CAAQ,EAAGx/D,CAAU,CACzC,CAaA,SAASk/D,GAAal1D,EAAQs1D,EAAIC,EAAIv/D,EAAY6+D,EAASC,EAAO,CAE9D,QADIW,EAAY,CAAA,EACP56D,EAAI,EAAGA,EAAI,EAAGA,IAAK,CACxB,IAAI26D,EAAW,CAAA,EACfA,EAAS,KAAKx1D,CAAM,EACpBw1D,EAAS,KAAK,CAACx1D,EAAO,CAAC,EAAIs1D,EAAKT,EAAQh6D,CAAC,EAAGmF,EAAO,CAAC,EAAIu1D,EAAKT,EAAMj6D,CAAC,CAAC,CAAC,EACtE26D,EAAS,KAAK,CACVx1D,EAAO,CAAC,EAAIs1D,EAAKT,GAASh6D,EAAI,GAAK,CAAC,EACpCmF,EAAO,CAAC,EAAIu1D,EAAKT,GAAOj6D,EAAI,GAAK,CAAC,CAC9C,CAAS,EACD26D,EAAS,KAAKx1D,CAAM,EACpBy1D,EAAU,KAAKh/D,GAAQ,CAAC++D,CAAQ,EAAGx/D,CAAU,CAAC,CACjD,CACD,OAAOy/D,CACX,CC1HA,SAASjK,GAAM4H,EAAOC,EAAOp9D,EAAS,CAC9BA,IAAY,SAAUA,EAAU,CAAE,GACtC,IAAIgyD,EAAQpuD,GAAQu5D,CAAK,EACrBzB,EAAQ93D,GAAQw5D,CAAK,EACrBqC,EAAUnC,GAAgB,MAAMtL,EAAM,YAAa0J,EAAM,WAAW,EACxE,OAAI+D,EAAQ,SAAW,EACZ,KACPA,EAAQ,SAAW,EACZj/D,GAAQi/D,EAAQ,CAAC,EAAGz/D,EAAQ,UAAU,EAEtCW,GAAa8+D,EAASz/D,EAAQ,UAAU,CACvD","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21]}