text-to-map 1.1.28 → 1.1.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/dist/bin/address-points.js +1 -0
  2. package/dist/bin/cities.js +1 -0
  3. package/dist/bin/clear-all.js +8 -18
  4. package/dist/bin/constants.js +1 -0
  5. package/dist/bin/generate-syntax-diagrams.js +1 -0
  6. package/dist/bin/init-db.js +5 -15
  7. package/dist/bin/knex.js +6 -16
  8. package/dist/bin/parse-ordinance.js +60 -71
  9. package/dist/bin/polygons.js +23 -32
  10. package/dist/bin/regions.js +1 -0
  11. package/dist/bin/schools.js +1 -0
  12. package/dist/bin/streets.js +1 -0
  13. package/dist/bin/sync-all.js +1 -0
  14. package/dist/db/address-points.js +43 -54
  15. package/dist/db/cities.d.ts +5 -3
  16. package/dist/db/cities.js +56 -25
  17. package/dist/db/db.js +24 -32
  18. package/dist/db/founders.js +104 -91
  19. package/dist/db/meta.js +12 -20
  20. package/dist/db/migrations/20230704125715_initial.js +291 -303
  21. package/dist/db/migrations/20230731232915_city_positions.js +9 -21
  22. package/dist/db/migrations/20240106224603_city_polygon.js +7 -19
  23. package/dist/db/migrations/20240320200534_district_polygon.js +11 -0
  24. package/dist/db/migrations/20240729211323_ordinance_city.js +11 -0
  25. package/dist/db/regions.js +20 -28
  26. package/dist/db/schools.d.ts +1 -1
  27. package/dist/db/schools.js +18 -23
  28. package/dist/db/street-sync.js +13 -21
  29. package/dist/db/sync-log.js +25 -33
  30. package/dist/db/types.d.ts +3 -1
  31. package/dist/db/types.js +2 -1
  32. package/dist/index.d.ts +2 -2
  33. package/dist/index.js +12 -22
  34. package/dist/open-data-sync/address-points.js +21 -29
  35. package/dist/open-data-sync/cities.js +10 -18
  36. package/dist/open-data-sync/common.js +8 -16
  37. package/dist/open-data-sync/regions.js +13 -21
  38. package/dist/open-data-sync/schools.js +20 -28
  39. package/dist/open-data-sync/streets.js +40 -39
  40. package/dist/smd-to-csv/json-to-csv.js +1 -0
  41. package/dist/smd-to-csv/ordinance-to-csv-rules.js +4 -12
  42. package/dist/smd-to-csv/txt-to-json.js +59 -69
  43. package/dist/street-markdown/municipality.js +26 -28
  44. package/dist/street-markdown/polygons.d.ts +7 -4
  45. package/dist/street-markdown/polygons.js +190 -44
  46. package/dist/street-markdown/roman-numerals.js +1 -0
  47. package/dist/street-markdown/smd-line-parser.js +6 -8
  48. package/dist/street-markdown/smd-parser.js +2 -2
  49. package/dist/street-markdown/smd.d.ts +7 -1
  50. package/dist/street-markdown/smd.js +190 -164
  51. package/dist/street-markdown/token-definition.js +1 -0
  52. package/dist/street-markdown/types.d.ts +21 -11
  53. package/dist/street-markdown/types.js +3 -2
  54. package/dist/utils/atom.js +9 -17
  55. package/dist/utils/helpers.d.ts +3 -1
  56. package/dist/utils/helpers.js +12 -4
  57. package/dist/utils/jtsk2wgs84.js +1 -0
  58. package/package.json +5 -1
@@ -1,33 +1,163 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
1
  import { Delaunay } from "d3-delaunay";
11
2
  import { featureCollection, } from "@turf/helpers";
12
3
  import intersect from "@turf/intersect";
4
+ import { booleanIntersects } from "@turf/boolean-intersects";
5
+ import Graph from "graphology";
6
+ import { color } from "graphology-color";
13
7
  import { toMercator, toWgs84 } from "@turf/projection";
14
8
  import union from "@turf/union";
15
- import { getCityPolygonGeojsons } from "../db/cities";
9
+ import { getCityPolygons, getDistrictPolygons } from "../db/cities";
16
10
  import truncate from "@turf/truncate";
17
- export const municipalityToPolygons = (municipality) => __awaiter(void 0, void 0, void 0, function* () {
18
- const cityPolygons = yield getCityPolygonGeojsons(municipality.cityCodes);
19
- return createPolygons(municipality, cityPolygons);
20
- });
21
- export const createPolygons = (municipality, cityPolygons) => {
22
- const citiesMultipolygon = createCitiesMultipolygon(Object.values(cityPolygons));
11
+ import difference from "@turf/difference";
12
+ export const municipalitiesToPolygons = async (municipalities) => {
13
+ const { cityCodes, districtCodes } = extractMunicipalityCodes(municipalities);
14
+ const cityPolygons = await getCityPolygons(cityCodes);
15
+ const districtPolygons = await getDistrictPolygons(districtCodes);
16
+ if (Object.keys(cityPolygons).length === 0 &&
17
+ Object.keys(districtPolygons).length === 0) {
18
+ console.log("No polygons found for given municipalities.");
19
+ return {};
20
+ }
21
+ // municipalityCode -> areas
22
+ const extraAreas = getExtraAreas(municipalities);
23
+ const collectionMap = new Map();
24
+ // areaIndex -> polygon
25
+ const extraPolygonsMap = new Map();
26
+ for (const municipality of municipalities) {
27
+ const { featureCollection, extraPolygons } = createPolygons(municipality, extraAreas.get(municipality.code) ?? [], getMunicipalityPolygons(municipality, cityPolygons, districtPolygons));
28
+ collectionMap.set(municipality.code, featureCollection);
29
+ if (extraAreas.has(municipality.code)) {
30
+ for (const [areaIndex, extraPolygon] of extraPolygons) {
31
+ if (!extraPolygonsMap.has(areaIndex)) {
32
+ extraPolygonsMap.set(areaIndex, []);
33
+ }
34
+ extraPolygonsMap.get(areaIndex).push(extraPolygon);
35
+ }
36
+ }
37
+ }
38
+ addExtraPolygons(collectionMap, extraPolygonsMap);
39
+ findColoring(collectionMap);
40
+ const result = {};
41
+ for (const [municipalityCode, collection] of collectionMap) {
42
+ result[municipalityCode] = collection;
43
+ }
44
+ return result;
45
+ };
46
+ const findColoring = (collectionMap) => {
47
+ // here do the coloring
48
+ // put all the features in one array
49
+ const allFeatures = Array.from(collectionMap.values()).reduce((acc, collection) => {
50
+ acc.push(...collection.features);
51
+ return acc;
52
+ }, []);
53
+ const graph = new Graph();
54
+ allFeatures.forEach((feature) => {
55
+ graph.addNode(feature.properties.areaIndex);
56
+ });
57
+ for (const feature1 of allFeatures) {
58
+ console.log(`Area ${feature1.properties.areaIndex}: ${feature1.properties.schoolIzos}`);
59
+ for (const feature2 of allFeatures) {
60
+ if (feature1.properties.areaIndex !== feature2.properties.areaIndex &&
61
+ booleanIntersects(feature1, feature2)) {
62
+ graph.addEdge(feature1.properties.areaIndex, feature2.properties.areaIndex);
63
+ }
64
+ }
65
+ }
66
+ color(graph);
67
+ graph.forEachNode((node) => {
68
+ console.log(graph.getNodeAttribute(node, "color"));
69
+ });
70
+ allFeatures.forEach((feature) => {
71
+ feature.properties.colorIndex = graph.getNodeAttribute(feature.properties.areaIndex, "color");
72
+ });
73
+ };
74
+ const getExtraAreas = (municipalities) => {
75
+ // municipalityCode -> areas
76
+ const extraAreas = new Map();
77
+ for (const municipality of municipalities) {
78
+ for (const area of municipality.areas) {
79
+ // municipalityCode -> points
80
+ const extraPoints = new Map();
81
+ for (const point of area.addresses) {
82
+ if (point.municipalityCode) {
83
+ if (!extraPoints.has(point.municipalityCode)) {
84
+ extraPoints.set(point.municipalityCode, []);
85
+ }
86
+ extraPoints.get(point.municipalityCode).push(point);
87
+ }
88
+ }
89
+ for (const [municipalityCode, points] of extraPoints) {
90
+ if (!extraAreas.has(municipalityCode)) {
91
+ extraAreas.set(municipalityCode, []);
92
+ }
93
+ extraAreas.get(municipalityCode).push({
94
+ ...area,
95
+ addresses: points,
96
+ });
97
+ }
98
+ }
99
+ }
100
+ return extraAreas;
101
+ };
102
+ const addExtraPolygons = (collectionMap, extraPolygonsMap) => {
103
+ for (const collection of collectionMap.values()) {
104
+ for (let i = 0; i < collection.features.length; i++) {
105
+ const feature = collection.features[i];
106
+ if (extraPolygonsMap.has(feature.properties.areaIndex)) {
107
+ const polygons = extraPolygonsMap.get(feature.properties.areaIndex);
108
+ const newPolygon = union(featureCollection([...polygons, feature]));
109
+ const newFeature = {
110
+ ...newPolygon,
111
+ properties: { ...feature.properties },
112
+ };
113
+ collection.features[i] = newFeature;
114
+ }
115
+ }
116
+ }
117
+ };
118
+ const getMunicipalityPolygons = (municipality, cityPolygons, districtPolygons) => {
119
+ const polygons = {};
120
+ for (const cityCode of municipality.cityCodes) {
121
+ if (cityPolygons[cityCode]) {
122
+ polygons[cityCode] = cityPolygons[cityCode];
123
+ if (municipality.municipalityType === "city" &&
124
+ Object.keys(districtPolygons).length > 0 &&
125
+ municipality.municipalityName !== "Brno") {
126
+ let cityPolygon = extractPolygonFromCollection(cityPolygons[cityCode]);
127
+ // subtract all district polygons from city polygon
128
+ for (const [districtCode, districtPolygon] of Object.entries(districtPolygons)) {
129
+ if (municipality.districtCodes.includes(parseInt(districtCode))) {
130
+ continue;
131
+ }
132
+ cityPolygon = difference(featureCollection([
133
+ cityPolygon,
134
+ extractPolygonFromCollection(districtPolygon),
135
+ ]));
136
+ }
137
+ polygons[cityCode] = featureCollection([cityPolygon]);
138
+ }
139
+ }
140
+ }
141
+ for (const districtCode of municipality.districtCodes) {
142
+ if (districtPolygons[districtCode]) {
143
+ polygons[districtCode] = districtPolygons[districtCode];
144
+ }
145
+ }
146
+ return polygons;
147
+ };
148
+ export const createPolygons = (municipality, extraAreas, municipalityPolygons) => {
149
+ const municipalitiesMultipolygon = createMunicipalitiesMultipolygon(Object.values(municipalityPolygons));
23
150
  const uniquePoints = new Map();
24
- for (const school of municipality.schools) {
25
- for (const point of school.addresses) {
151
+ const allAreas = [...municipality.areas, ...extraAreas];
152
+ const extraAreasIndexes = new Set(extraAreas.map((area) => area.index));
153
+ for (const area of allAreas) {
154
+ const points = [...area.addresses];
155
+ for (const point of points) {
26
156
  if (!uniquePoints.has(point.address)) {
27
- addPoint(uniquePoints, point, school.izo);
157
+ addPoint(uniquePoints, point, area.index);
28
158
  }
29
159
  else {
30
- uniquePoints.get(point.address).properties.schools.push(school.izo);
160
+ uniquePoints.get(point.address).properties.areaIndexes.push(area.index);
31
161
  }
32
162
  }
33
163
  }
@@ -37,32 +167,41 @@ export const createPolygons = (municipality, cityPolygons) => {
37
167
  };
38
168
  const polygons = d3DelaunayVoronoi(points);
39
169
  const unitedPolygons = [];
170
+ const extraPolygons = new Map();
40
171
  let colorIndex = 0;
41
- for (const school of municipality.schools) {
42
- const schoolPolygons = polygons.features.filter((polygon) => polygon.properties.schools.includes(school.izo));
43
- if (school.isWholeMunicipality) {
44
- // TODO: in future add support for districts
45
- schoolPolygons.push(...cityPolygons[municipality.cityOrDistrictCode].features);
46
- }
172
+ for (const area of allAreas) {
173
+ const schoolPolygons = polygons.features.filter((polygon) => polygon.properties.areaIndexes.includes(area.index));
47
174
  if (schoolPolygons.length === 0) {
48
175
  continue;
49
176
  }
50
177
  const schoolPolygon = intersect(schoolPolygons.length > 1
51
178
  ? union(featureCollection(schoolPolygons))
52
- : schoolPolygons[0], citiesMultipolygon);
53
- unitedPolygons.push(Object.assign(Object.assign({}, schoolPolygon), { properties: {
54
- schoolIzo: school.izo,
179
+ : schoolPolygons[0], municipalitiesMultipolygon);
180
+ const feature = {
181
+ ...schoolPolygon,
182
+ properties: {
183
+ areaIndex: area.index,
184
+ schoolIzos: area.schools.map((school) => school.izo),
55
185
  colorIndex,
56
- } }));
186
+ },
187
+ };
188
+ if (extraAreasIndexes.has(area.index)) {
189
+ extraPolygons.set(area.index, feature);
190
+ }
191
+ else {
192
+ unitedPolygons.push(feature);
193
+ }
57
194
  colorIndex++;
58
195
  }
59
- const { type } = polygons;
60
- return truncate({
61
- type,
62
- features: [...unitedPolygons],
63
- });
196
+ return {
197
+ featureCollection: truncate({
198
+ type: "FeatureCollection",
199
+ features: [...unitedPolygons],
200
+ }),
201
+ extraPolygons,
202
+ };
64
203
  };
65
- const addPoint = (uniquePoints, point, schoolIzo) => {
204
+ const addPoint = (uniquePoints, point, areaIndex) => {
66
205
  if (point.lat === null || point.lng === null) {
67
206
  return;
68
207
  }
@@ -73,7 +212,7 @@ const addPoint = (uniquePoints, point, schoolIzo) => {
73
212
  coordinates: [point.lng, point.lat],
74
213
  },
75
214
  properties: {
76
- schools: [schoolIzo],
215
+ areaIndexes: [areaIndex],
77
216
  },
78
217
  });
79
218
  };
@@ -93,19 +232,26 @@ const d3DelaunayVoronoi = (points) => {
93
232
  coordinates: [polygon.map((p) => toWgs84(p))],
94
233
  },
95
234
  properties: {
96
- schools: points.features[polygon.index].properties.schools,
235
+ areaIndexes: points.features[polygon.index].properties.areaIndexes,
97
236
  index: polygon.index,
98
237
  neighbors: new Set(voronoi.neighbors(polygon.index)),
99
238
  },
100
239
  })),
101
240
  };
102
241
  };
103
- const createCitiesMultipolygon = (cityPolygons) => {
104
- const cityPolygonFeatures = cityPolygons.reduce((acc, cityPolygon) => {
105
- acc.push(...cityPolygon.features.filter((f) => f.geometry.type === "Polygon" || f.geometry.type === "MultiPolygon"));
242
+ const createMunicipalitiesMultipolygon = (municipalityPolygons) => {
243
+ const municipalityPolygonFeatures = municipalityPolygons.reduce((acc, municipalityPolygon) => {
244
+ acc.push(...municipalityPolygon.features.filter((f) => f.geometry.type === "Polygon" || f.geometry.type === "MultiPolygon"));
106
245
  return acc;
107
246
  }, []);
108
- return cityPolygonFeatures.length > 1
109
- ? union(featureCollection(cityPolygonFeatures))
110
- : cityPolygonFeatures[0];
247
+ return extractPolygonFromCollection(featureCollection(municipalityPolygonFeatures));
248
+ };
249
+ const extractMunicipalityCodes = (municipalities) => {
250
+ return municipalities.reduce((acc, municipality) => {
251
+ municipality.cityCodes.forEach((cityCode) => acc.cityCodes.add(cityCode));
252
+ municipality.districtCodes.forEach((districtCode) => acc.districtCodes.add(districtCode));
253
+ return acc;
254
+ }, { cityCodes: new Set(), districtCodes: new Set() });
111
255
  };
256
+ const extractPolygonFromCollection = (collection) => collection.features.length > 1 ? union(collection) : collection.features[0];
257
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9seWdvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3RyZWV0LW1hcmtkb3duL3BvbHlnb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHdkMsT0FBTyxFQU1MLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLFNBQVMsTUFBTSxpQkFBaUIsQ0FBQztBQUN4QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM3RCxPQUFPLEtBQUssTUFBTSxZQUFZLENBQUM7QUFDL0IsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdkQsT0FBTyxLQUFLLE1BQU0sYUFBYSxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDcEUsT0FBTyxRQUFRLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEMsT0FBTyxVQUFVLE1BQU0sa0JBQWtCLENBQUM7QUFRMUMsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsS0FBSyxFQUMzQyxjQUE4QixFQUNjLEVBQUU7SUFDOUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsR0FBRyx3QkFBd0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUM5RSxNQUFNLFlBQVksR0FBRyxNQUFNLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN0RCxNQUFNLGdCQUFnQixHQUFHLE1BQU0sbUJBQW1CLENBQUMsYUFBYSxDQUFDLENBQUM7SUFFbEUsSUFDRSxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQ3RDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FB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QVksRUFBRSxFQUFFLENBQ2xELEdBQUcsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUNwQyxDQUFDO1FBQ0YsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDLEVBQ0QsRUFBRSxTQUFTLEVBQUUsSUFBSSxHQUFHLEVBQVUsRUFBRSxhQUFhLEVBQUUsSUFBSSxHQUFHLEVBQVUsRUFBRSxDQUNuRSxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsTUFBTSw0QkFBNEIsR0FBRyxDQUNuQyxVQUFxRCxFQUNwQixFQUFFLENBQ25DLFVBQVUsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVsYXVuYXkgfSBmcm9tIFwiZDMtZGVsYXVuYXlcIjtcclxuaW1wb3J0IHsgQXJlYSwgRXhwb3J0QWRkcmVzc1BvaW50LCBNdW5pY2lwYWxpdHkgfSBmcm9tIFwiLi90eXBlc1wiO1xyXG5cclxuaW1wb3J0IHtcclxuICBGZWF0dXJlLFxyXG4gIEZlYXR1cmVDb2xsZWN0aW9uLFxyXG4gIE11bHRpUG9seWdvbixcclxuICBQb2ludCxcclxuICBQb2x5Z29uLFxyXG4gIGZlYXR1cmVDb2xsZWN0aW9uLFxyXG59IGZyb20gXCJAdHVyZi9oZWxwZXJzXCI7XHJcbmltcG9ydCBpbnRlcnNlY3QgZnJvbSBcIkB0dXJmL2ludGVyc2VjdFwiO1xyXG5pbXBvcnQgeyBib29sZWFuSW50ZXJzZWN0cyB9IGZyb20gXCJAdHVyZi9ib29sZWFuLWludGVyc2VjdHNcIjtcclxuaW1wb3J0IEdyYXBoIGZyb20gXCJncmFwaG9sb2d5XCI7XHJcbmltcG9ydCB7IGNvbG9yIH0gZnJvbSBcImdyYXBob2xvZ3ktY29sb3JcIjtcclxuaW1wb3J0IHsgdG9NZXJjYXRvciwgdG9XZ3M4NCB9IGZyb20gXCJAdHVyZi9wcm9qZWN0aW9uXCI7XHJcbmltcG9ydCB1bmlvbiBmcm9tIFwiQHR1cmYvdW5pb25cIjtcclxuaW1wb3J0IHsgZ2V0Q2l0eVBvbHlnb25zLCBnZXREaXN0cmljdFBvbHlnb25zIH0gZnJvbSBcIi4uL2RiL2NpdGllc1wiO1xyXG5pbXBvcnQgdHJ1bmNhdGUgZnJvbSBcIkB0dXJmL3RydW5jYXRlXCI7XHJcbmltcG9ydCB7IFBvbHlnb25zQnlDb2RlcyB9IGZyb20gXCIuLi9kYi90eXBlc1wiO1xyXG5pbXBvcnQgZGlmZmVyZW5jZSBmcm9tIFwiQHR1cmYvZGlmZmVyZW5jZVwiO1xyXG5cclxudHlwZSBQb2x5Z29uUHJvcHMgPSB7XHJcbiAgYXJlYUluZGV4ZXM6IG51bWJlcltdO1xyXG4gIGluZGV4OiBudW1iZXI7XHJcbiAgbmVpZ2hib3JzOiBTZXQ8bnVtYmVyPjtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBtdW5pY2lwYWxpdGllc1RvUG9seWdvbnMgPSBhc3luYyAoXHJcbiAgbXVuaWNpcGFsaXRpZXM6IE11bmljaXBhbGl0eVtdXHJcbik6IFByb21pc2U8UmVjb3JkPG51bWJlciwgRmVhdHVyZUNvbGxlY3Rpb24+PiA9PiB7XHJcbiAgY29uc3QgeyBjaXR5Q29kZXMsIGRpc3RyaWN0Q29kZXMgfSA9IGV4dHJhY3RNdW5pY2lwYWxpdHlDb2RlcyhtdW5pY2lwYWxpdGllcyk7XHJcbiAgY29uc3QgY2l0eVBvbHlnb25zID0gYXdhaXQgZ2V0Q2l0eVBvbHlnb25zKGNpdHlDb2Rlcyk7XHJcbiAgY29uc3QgZGlzdHJpY3RQb2x5Z29ucyA9IGF3YWl0IGdldERpc3RyaWN0UG9seWdvbnMoZGlzdHJpY3RDb2Rlcyk7XHJcblxyXG4gIGlmIChcclxuICAgIE9iamVjdC5rZXlzKGNpdHlQb2x5Z29ucykubGVuZ3RoID09PSAwICYmXHJcbiAgICBPYmplY3Qua2V5cyhkaXN0cmljdFBvbHlnb25zKS5sZW5ndGggPT09IDBcclxuICApIHtcclxuICAgIGNvbnNvbGUubG9nKFwiTm8gcG9seWdvbnMgZm91bmQgZm9yIGdpdmVuIG11bmljaXBhbGl0aWVzLlwiKTtcclxuICAgIHJldHVybiB7fTtcclxuICB9XHJcblxyXG4gIC8vIG11bmljaXBhbGl0eUNvZGUgLT4gYXJlYXNcclxuICBjb25zdCBleHRyYUFyZWFzID0gZ2V0RXh0cmFBcmVhcyhtdW5pY2lwYWxpdGllcyk7XHJcblxyXG4gIGNvbnN0IGNvbGxlY3Rpb25NYXAgPSBuZXcgTWFwPFxyXG4gICAgbnVtYmVyLFxyXG4gICAgRmVhdHVyZUNvbGxlY3Rpb248UG9seWdvbiB8IE11bHRpUG9seWdvbj5cclxuICA+KCk7XHJcbiAgLy8gYXJlYUluZGV4IC0+IHBvbHlnb25cclxuICBjb25zdCBleHRyYVBvbHlnb25zTWFwID0gbmV3IE1hcDxudW1iZXIsIEZlYXR1cmU8UG9seWdvbiB8IE11bHRpUG9seWdvbj5bXT4oKTtcclxuXHJcbiAgZm9yIChjb25zdCBtdW5pY2lwYWxpdHkgb2YgbXVuaWNpcGFsaXRpZXMpIHtcclxuICAgIGNvbnN0IHsgZmVhdHVyZUNvbGxlY3Rpb24sIGV4dHJhUG9seWdvbnMgfSA9IGNyZWF0ZVBvbHlnb25zKFxyXG4gICAgICBtdW5pY2lwYWxpdHksXHJcbiAgICAgIGV4dHJhQXJlYXMuZ2V0KG11bmljaXBhbGl0eS5jb2RlKSA/PyBbXSxcclxuICAgICAgZ2V0TXVuaWNpcGFsaXR5UG9seWdvbnMobXVuaWNpcGFsaXR5LCBjaXR5UG9seWdvbnMsIGRpc3RyaWN0UG9seWdvbnMpXHJcbiAgICApO1xyXG4gICAgY29sbGVjdGlvbk1hcC5zZXQobXVuaWNpcGFsaXR5LmNvZGUsIGZlYXR1cmVDb2xsZWN0aW9uKTtcclxuICAgIGlmIChleHRyYUFyZWFzLmhhcyhtdW5pY2lwYWxpdHkuY29kZSkpIHtcclxuICAgICAgZm9yIChjb25zdCBbYXJlYUluZGV4LCBleHRyYVBvbHlnb25dIG9mIGV4dHJhUG9seWdvbnMpIHtcclxuICAgICAgICBpZiAoIWV4dHJhUG9seWdvbnNNYXAuaGFzKGFyZWFJbmRleCkpIHtcclxuICAgICAgICAgIGV4dHJhUG9seWdvbnNNYXAuc2V0KGFyZWFJbmRleCwgW10pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBleHRyYVBvbHlnb25zTWFwLmdldChhcmVhSW5kZXgpLnB1c2goZXh0cmFQb2x5Z29uKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkRXh0cmFQb2x5Z29ucyhjb2xsZWN0aW9uTWFwLCBleHRyYVBvbHlnb25zTWFwKTtcclxuXHJcbiAgZmluZENvbG9yaW5nKGNvbGxlY3Rpb25NYXApO1xyXG5cclxuICBjb25zdCByZXN1bHQ6IFJlY29yZDxudW1iZXIsIEZlYXR1cmVDb2xsZWN0aW9uPiA9IHt9O1xyXG4gIGZvciAoY29uc3QgW211bmljaXBhbGl0eUNvZGUsIGNvbGxlY3Rpb25dIG9mIGNvbGxlY3Rpb25NYXApIHtcclxuICAgIHJlc3VsdFttdW5pY2lwYWxpdHlDb2RlXSA9IGNvbGxlY3Rpb247XHJcbiAgfVxyXG4gIHJldHVybiByZXN1bHQ7XHJcbn07XHJcblxyXG5jb25zdCBmaW5kQ29sb3JpbmcgPSAoY29sbGVjdGlvbk1hcDogTWFwPG51bWJlciwgRmVhdHVyZUNvbGxlY3Rpb24+KSA9PiB7XHJcbiAgLy8gaGVyZSBkbyB0aGUgY29sb3JpbmdcclxuICAvLyBwdXQgYWxsIHRoZSBmZWF0dXJlcyBpbiBvbmUgYXJyYXlcclxuICBjb25zdCBhbGxGZWF0dXJlcyA9IEFycmF5LmZyb20oY29sbGVjdGlvbk1hcC52YWx1ZXMoKSkucmVkdWNlKFxyXG4gICAgKGFjYywgY29sbGVjdGlvbikgPT4ge1xyXG4gICAgICBhY2MucHVzaCguLi5jb2xsZWN0aW9uLmZlYXR1cmVzKTtcclxuICAgICAgcmV0dXJuIGFjYztcclxuICAgIH0sXHJcbiAgICBbXVxyXG4gICk7XHJcblxyXG4gIGNvbnN0IGdyYXBoID0gbmV3IEdyYXBoKCk7XHJcbiAgYWxsRmVhdHVyZXMuZm9yRWFjaCgoZmVhdHVyZSkgPT4ge1xyXG4gICAgZ3JhcGguYWRkTm9kZShmZWF0dXJlLnByb3BlcnRpZXMuYXJlYUluZGV4KTtcclxuICB9KTtcclxuXHJcbiAgZm9yIChjb25zdCBmZWF0dXJlMSBvZiBhbGxGZWF0dXJlcykge1xyXG4gICAgY29uc29sZS5sb2coXHJcbiAgICAgIGBBcmVhICR7ZmVhdHVyZTEucHJvcGVydGllcy5hcmVhSW5kZXh9OiAke2ZlYXR1cmUxLnByb3BlcnRpZXMuc2Nob29sSXpvc31gXHJcbiAgICApO1xyXG4gICAgZm9yIChjb25zdCBmZWF0dXJlMiBvZiBhbGxGZWF0dXJlcykge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgZmVhdHVyZTEucHJvcGVydGllcy5hcmVhSW5kZXggIT09IGZlYXR1cmUyLnByb3BlcnRpZXMuYXJlYUluZGV4ICYmXHJcbiAgICAgICAgYm9vbGVhbkludGVyc2VjdHMoZmVhdHVyZTEsIGZlYXR1cmUyKVxyXG4gICAgICApIHtcclxuICAgICAgICBncmFwaC5hZGRFZGdlKFxyXG4gICAgICAgICAgZmVhdHVyZTEucHJvcGVydGllcy5hcmVhSW5kZXgsXHJcbiAgICAgICAgICBmZWF0dXJlMi5wcm9wZXJ0aWVzLmFyZWFJbmRleFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbG9yKGdyYXBoKTtcclxuXHJcbiAgZ3JhcGguZm9yRWFjaE5vZGUoKG5vZGUpID0+IHtcclxuICAgIGNvbnNvbGUubG9nKGdyYXBoLmdldE5vZGVBdHRyaWJ1dGUobm9kZSwgXCJjb2xvclwiKSk7XHJcbiAgfSk7XHJcblxyXG4gIGFsbEZlYXR1cmVzLmZvckVhY2goKGZlYXR1cmUpID0+IHtcclxuICAgIGZlYXR1cmUucHJvcGVydGllcy5jb2xvckluZGV4ID0gZ3JhcGguZ2V0Tm9kZUF0dHJpYnV0ZShcclxuICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzLmFyZWFJbmRleCxcclxuICAgICAgXCJjb2xvclwiXHJcbiAgICApO1xyXG4gIH0pO1xyXG59O1xyXG5cclxuY29uc3QgZ2V0RXh0cmFBcmVhcyA9IChtdW5pY2lwYWxpdGllczogTXVuaWNpcGFsaXR5W10pOiBNYXA8bnVtYmVyLCBBcmVhW10+ID0+IHtcclxuICAvLyBtdW5pY2lwYWxpdHlDb2RlIC0+IGFyZWFzXHJcbiAgY29uc3QgZXh0cmFBcmVhcyA9IG5ldyBNYXA8bnVtYmVyLCBBcmVhW10+KCk7XHJcblxyXG4gIGZvciAoY29uc3QgbXVuaWNpcGFsaXR5IG9mIG11bmljaXBhbGl0aWVzKSB7XHJcbiAgICBmb3IgKGNvbnN0IGFyZWEgb2YgbXVuaWNpcGFsaXR5LmFyZWFzKSB7XHJcbiAgICAgIC8vIG11bmljaXBhbGl0eUNvZGUgLT4gcG9pbnRzXHJcbiAgICAgIGNvbnN0IGV4dHJhUG9pbnRzID0gbmV3IE1hcDxudW1iZXIsIEV4cG9ydEFkZHJlc3NQb2ludFtdPigpO1xyXG4gICAgICBmb3IgKGNvbnN0IHBvaW50IG9mIGFyZWEuYWRkcmVzc2VzKSB7XHJcbiAgICAgICAgaWYgKHBvaW50Lm11bmljaXBhbGl0eUNvZGUpIHtcclxuICAgICAgICAgIGlmICghZXh0cmFQb2ludHMuaGFzKHBvaW50Lm11bmljaXBhbGl0eUNvZGUpKSB7XHJcbiAgICAgICAgICAgIGV4dHJhUG9pbnRzLnNldChwb2ludC5tdW5pY2lwYWxpdHlDb2RlLCBbXSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgZXh0cmFQb2ludHMuZ2V0KHBvaW50Lm11bmljaXBhbGl0eUNvZGUpLnB1c2gocG9pbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgZm9yIChjb25zdCBbbXVuaWNpcGFsaXR5Q29kZSwgcG9pbnRzXSBvZiBleHRyYVBvaW50cykge1xyXG4gICAgICAgIGlmICghZXh0cmFBcmVhcy5oYXMobXVuaWNpcGFsaXR5Q29kZSkpIHtcclxuICAgICAgICAgIGV4dHJhQXJlYXMuc2V0KG11bmljaXBhbGl0eUNvZGUsIFtdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGV4dHJhQXJlYXMuZ2V0KG11bmljaXBhbGl0eUNvZGUpLnB1c2goe1xyXG4gICAgICAgICAgLi4uYXJlYSxcclxuICAgICAgICAgIGFkZHJlc3NlczogcG9pbnRzLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBleHRyYUFyZWFzO1xyXG59O1xyXG5cclxuY29uc3QgYWRkRXh0cmFQb2x5Z29ucyA9IChcclxuICBjb2xsZWN0aW9uTWFwOiBNYXA8bnVtYmVyLCBGZWF0dXJlQ29sbGVjdGlvbjxQb2x5Z29uIHwgTXVsdGlQb2x5Z29uPj4sXHJcbiAgZXh0cmFQb2x5Z29uc01hcDogTWFwPG51bWJlciwgRmVhdHVyZTxQb2x5Z29uIHwgTXVsdGlQb2x5Z29uPltdPlxyXG4pID0+IHtcclxuICBmb3IgKGNvbnN0IGNvbGxlY3Rpb24gb2YgY29sbGVjdGlvbk1hcC52YWx1ZXMoKSkge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2xsZWN0aW9uLmZlYXR1cmVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGZlYXR1cmUgPSBjb2xsZWN0aW9uLmZlYXR1cmVzW2ldO1xyXG4gICAgICBpZiAoZXh0cmFQb2x5Z29uc01hcC5oYXMoZmVhdHVyZS5wcm9wZXJ0aWVzLmFyZWFJbmRleCkpIHtcclxuICAgICAgICBjb25zdCBwb2x5Z29ucyA9IGV4dHJhUG9seWdvbnNNYXAuZ2V0KGZlYXR1cmUucHJvcGVydGllcy5hcmVhSW5kZXgpO1xyXG4gICAgICAgIGNvbnN0IG5ld1BvbHlnb24gPSB1bmlvbihmZWF0dXJlQ29sbGVjdGlvbihbLi4ucG9seWdvbnMsIGZlYXR1cmVdKSk7XHJcbiAgICAgICAgY29uc3QgbmV3RmVhdHVyZSA9IHtcclxuICAgICAgICAgIC4uLm5ld1BvbHlnb24sXHJcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7IC4uLmZlYXR1cmUucHJvcGVydGllcyB9LFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29sbGVjdGlvbi5mZWF0dXJlc1tpXSA9IG5ld0ZlYXR1cmU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn07XHJcblxyXG5jb25zdCBnZXRNdW5pY2lwYWxpdHlQb2x5Z29ucyA9IChcclxuICBtdW5pY2lwYWxpdHk6IE11bmljaXBhbGl0eSxcclxuICBjaXR5UG9seWdvbnM6IFBvbHlnb25zQnlDb2RlcyxcclxuICBkaXN0cmljdFBvbHlnb25zOiBQb2x5Z29uc0J5Q29kZXNcclxuKTogUG9seWdvbnNCeUNvZGVzID0+IHtcclxuICBjb25zdCBwb2x5Z29uczogUG9seWdvbnNCeUNvZGVzID0ge307XHJcblxyXG4gIGZvciAoY29uc3QgY2l0eUNvZGUgb2YgbXVuaWNpcGFsaXR5LmNpdHlDb2Rlcykge1xyXG4gICAgaWYgKGNpdHlQb2x5Z29uc1tjaXR5Q29kZV0pIHtcclxuICAgICAgcG9seWdvbnNbY2l0eUNvZGVdID0gY2l0eVBvbHlnb25zW2NpdHlDb2RlXTtcclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICBtdW5pY2lwYWxpdHkubXVuaWNpcGFsaXR5VHlwZSA9PT0gXCJjaXR5XCIgJiZcclxuICAgICAgICBPYmplY3Qua2V5cyhkaXN0cmljdFBvbHlnb25zKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgbXVuaWNpcGFsaXR5Lm11bmljaXBhbGl0eU5hbWUgIT09IFwiQnJub1wiXHJcbiAgICAgICkge1xyXG4gICAgICAgIGxldCBjaXR5UG9seWdvbiA9IGV4dHJhY3RQb2x5Z29uRnJvbUNvbGxlY3Rpb24oY2l0eVBvbHlnb25zW2NpdHlDb2RlXSk7XHJcbiAgICAgICAgLy8gc3VidHJhY3QgYWxsIGRpc3RyaWN0IHBvbHlnb25zIGZyb20gY2l0eSBwb2x5Z29uXHJcbiAgICAgICAgZm9yIChjb25zdCBbZGlzdHJpY3RDb2RlLCBkaXN0cmljdFBvbHlnb25dIG9mIE9iamVjdC5lbnRyaWVzKFxyXG4gICAgICAgICAgZGlzdHJpY3RQb2x5Z29uc1xyXG4gICAgICAgICkpIHtcclxuICAgICAgICAgIGlmIChtdW5pY2lwYWxpdHkuZGlzdHJpY3RDb2Rlcy5pbmNsdWRlcyhwYXJzZUludChkaXN0cmljdENvZGUpKSkge1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNpdHlQb2x5Z29uID0gZGlmZmVyZW5jZShcclxuICAgICAgICAgICAgZmVhdHVyZUNvbGxlY3Rpb24oW1xyXG4gICAgICAgICAgICAgIGNpdHlQb2x5Z29uLFxyXG4gICAgICAgICAgICAgIGV4dHJhY3RQb2x5Z29uRnJvbUNvbGxlY3Rpb24oZGlzdHJpY3RQb2x5Z29uKSxcclxuICAgICAgICAgICAgXSlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHBvbHlnb25zW2NpdHlDb2RlXSA9IGZlYXR1cmVDb2xsZWN0aW9uKFtjaXR5UG9seWdvbl0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmb3IgKGNvbnN0IGRpc3RyaWN0Q29kZSBvZiBtdW5pY2lwYWxpdHkuZGlzdHJpY3RDb2Rlcykge1xyXG4gICAgaWYgKGRpc3RyaWN0UG9seWdvbnNbZGlzdHJpY3RDb2RlXSkge1xyXG4gICAgICBwb2x5Z29uc1tkaXN0cmljdENvZGVdID0gZGlzdHJpY3RQb2x5Z29uc1tkaXN0cmljdENvZGVdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHBvbHlnb25zO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGNyZWF0ZVBvbHlnb25zID0gKFxyXG4gIG11bmljaXBhbGl0eTogTXVuaWNpcGFsaXR5LFxyXG4gIGV4dHJhQXJlYXM6IEFyZWFbXSxcclxuICBtdW5pY2lwYWxpdHlQb2x5Z29uczogUmVjb3JkPFxyXG4gICAgbnVtYmVyLFxyXG4gICAgRmVhdHVyZUNvbGxlY3Rpb248UG9seWdvbiB8IE11bHRpUG9seWdvbj5cclxuICA+XHJcbik6IHtcclxuICBmZWF0dXJlQ29sbGVjdGlvbjogRmVhdHVyZUNvbGxlY3Rpb248UG9seWdvbiB8IE11bHRpUG9seWdvbj47XHJcbiAgZXh0cmFQb2x5Z29uczogTWFwPG51bWJlciwgRmVhdHVyZTxQb2x5Z29uIHwgTXVsdGlQb2x5Z29uPj47XHJcbn0gPT4ge1xyXG4gIGNvbnN0IG11bmljaXBhbGl0aWVzTXVsdGlwb2x5Z29uID0gY3JlYXRlTXVuaWNpcGFsaXRpZXNNdWx0aXBvbHlnb24oXHJcbiAgICBPYmplY3QudmFsdWVzKG11bmljaXBhbGl0eVBvbHlnb25zKVxyXG4gICk7XHJcbiAgY29uc3QgdW5pcXVlUG9pbnRzID0gbmV3IE1hcDxzdHJpbmcsIEZlYXR1cmU+KCk7XHJcbiAgY29uc3QgYWxsQXJlYXMgPSBbLi4ubXVuaWNpcGFsaXR5LmFyZWFzLCAuLi5leHRyYUFyZWFzXTtcclxuICBjb25zdCBleHRyYUFyZWFzSW5kZXhlcyA9IG5ldyBTZXQoZXh0cmFBcmVhcy5tYXAoKGFyZWEpID0+IGFyZWEuaW5kZXgpKTtcclxuXHJcbiAgZm9yIChjb25zdCBhcmVhIG9mIGFsbEFyZWFzKSB7XHJcbiAgICBjb25zdCBwb2ludHMgPSBbLi4uYXJlYS5hZGRyZXNzZXNdO1xyXG5cclxuICAgIGZvciAoY29uc3QgcG9pbnQgb2YgcG9pbnRzKSB7XHJcbiAgICAgIGlmICghdW5pcXVlUG9pbnRzLmhhcyhwb2ludC5hZGRyZXNzKSkge1xyXG4gICAgICAgIGFkZFBvaW50KHVuaXF1ZVBvaW50cywgcG9pbnQsIGFyZWEuaW5kZXgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHVuaXF1ZVBvaW50cy5nZXQocG9pbnQuYWRkcmVzcykucHJvcGVydGllcy5hcmVhSW5kZXhlcy5wdXNoKGFyZWEuaW5kZXgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb25zdCBwb2ludHMgPSB7XHJcbiAgICB0eXBlOiBcIkZlYXR1cmVDb2xsZWN0aW9uXCIsXHJcbiAgICBmZWF0dXJlczogQXJyYXkuZnJvbSh1bmlxdWVQb2ludHMudmFsdWVzKCkpLFxyXG4gIH0gYXMgRmVhdHVyZUNvbGxlY3Rpb248UG9pbnQ+O1xyXG5cclxuICBjb25zdCBwb2x5Z29ucyA9IGQzRGVsYXVuYXlWb3Jvbm9pKHBvaW50cyk7XHJcblxyXG4gIGNvbnN0IHVuaXRlZFBvbHlnb25zOiBGZWF0dXJlPFBvbHlnb24gfCBNdWx0aVBvbHlnb24+W10gPSBbXTtcclxuICBjb25zdCBleHRyYVBvbHlnb25zID0gbmV3IE1hcDxudW1iZXIsIEZlYXR1cmU8UG9seWdvbiB8IE11bHRpUG9seWdvbj4+KCk7XHJcbiAgbGV0IGNvbG9ySW5kZXggPSAwO1xyXG5cclxuICBmb3IgKGNvbnN0IGFyZWEgb2YgYWxsQXJlYXMpIHtcclxuICAgIGNvbnN0IHNjaG9vbFBvbHlnb25zOiBGZWF0dXJlPFBvbHlnb24gfCBNdWx0aVBvbHlnb24+W10gPVxyXG4gICAgICBwb2x5Z29ucy5mZWF0dXJlcy5maWx0ZXIoKHBvbHlnb24pID0+XHJcbiAgICAgICAgcG9seWdvbi5wcm9wZXJ0aWVzLmFyZWFJbmRleGVzLmluY2x1ZGVzKGFyZWEuaW5kZXgpXHJcbiAgICAgICk7XHJcblxyXG4gICAgaWYgKHNjaG9vbFBvbHlnb25zLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBjb250aW51ZTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzY2hvb2xQb2x5Z29uID0gaW50ZXJzZWN0KFxyXG4gICAgICBzY2hvb2xQb2x5Z29ucy5sZW5ndGggPiAxXHJcbiAgICAgICAgPyB1bmlvbihmZWF0dXJlQ29sbGVjdGlvbihzY2hvb2xQb2x5Z29ucykpXHJcbiAgICAgICAgOiBzY2hvb2xQb2x5Z29uc1swXSxcclxuICAgICAgbXVuaWNpcGFsaXRpZXNNdWx0aXBvbHlnb25cclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgZmVhdHVyZSA9IHtcclxuICAgICAgLi4uc2Nob29sUG9seWdvbixcclxuICAgICAgcHJvcGVydGllczoge1xyXG4gICAgICAgIGFyZWFJbmRleDogYXJlYS5pbmRleCxcclxuICAgICAgICBzY2hvb2xJem9zOiBhcmVhLnNjaG9vbHMubWFwKChzY2hvb2wpID0+IHNjaG9vbC5pem8pLFxyXG4gICAgICAgIGNvbG9ySW5kZXgsXHJcbiAgICAgIH0sXHJcbiAgICB9O1xyXG4gICAgaWYgKGV4dHJhQXJlYXNJbmRleGVzLmhhcyhhcmVhLmluZGV4KSkge1xyXG4gICAgICBleHRyYVBvbHlnb25zLnNldChhcmVhLmluZGV4LCBmZWF0dXJlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHVuaXRlZFBvbHlnb25zLnB1c2goZmVhdHVyZSk7XHJcbiAgICB9XHJcbiAgICBjb2xvckluZGV4Kys7XHJcbiAgfVxyXG5cclxuICByZXR1cm4ge1xyXG4gICAgZmVhdHVyZUNvbGxlY3Rpb246IHRydW5jYXRlKHtcclxuICAgICAgdHlwZTogXCJGZWF0dXJlQ29sbGVjdGlvblwiLFxyXG4gICAgICBmZWF0dXJlczogWy4uLnVuaXRlZFBvbHlnb25zXSxcclxuICAgIH0pLFxyXG4gICAgZXh0cmFQb2x5Z29ucyxcclxuICB9O1xyXG59O1xyXG5cclxuY29uc3QgYWRkUG9pbnQgPSAoXHJcbiAgdW5pcXVlUG9pbnRzOiBNYXA8c3RyaW5nLCBGZWF0dXJlPixcclxuICBwb2ludDogRXhwb3J0QWRkcmVzc1BvaW50LFxyXG4gIGFyZWFJbmRleDogbnVtYmVyXHJcbikgPT4ge1xyXG4gIGlmIChwb2ludC5sYXQgPT09IG51bGwgfHwgcG9pbnQubG5nID09PSBudWxsKSB7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG4gIHVuaXF1ZVBvaW50cy5zZXQocG9pbnQuYWRkcmVzcywge1xyXG4gICAgdHlwZTogXCJGZWF0dXJlXCIsXHJcbiAgICBnZW9tZXRyeToge1xyXG4gICAgICB0eXBlOiBcIlBvaW50XCIsXHJcbiAgICAgIGNvb3JkaW5hdGVzOiBbcG9pbnQubG5nLCBwb2ludC5sYXRdLFxyXG4gICAgfSxcclxuICAgIHByb3BlcnRpZXM6IHtcclxuICAgICAgYXJlYUluZGV4ZXM6IFthcmVhSW5kZXhdLFxyXG4gICAgfSxcclxuICB9KTtcclxufTtcclxuXHJcbmNvbnN0IGQzRGVsYXVuYXlWb3Jvbm9pID0gKFxyXG4gIHBvaW50czogRmVhdHVyZUNvbGxlY3Rpb248UG9pbnQ+XHJcbik6IEZlYXR1cmVDb2xsZWN0aW9uPFBvbHlnb24sIFBvbHlnb25Qcm9wcz4gPT4ge1xyXG4gIGNvbnN0IGNvbnZlcnRlZCA9IHBvaW50cy5mZWF0dXJlcy5tYXAoKHApID0+IHtcclxuICAgIHJldHVybiB0b01lcmNhdG9yKFtwLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzBdLCBwLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzFdXSk7XHJcbiAgfSk7XHJcblxyXG4gIGNvbnN0IGJib3ggPSBbLi4udG9NZXJjYXRvcihbLTE4MCwgLTg1XSksIC4uLnRvTWVyY2F0b3IoWzE4MCwgODVdKV0gYXMgW1xyXG4gICAgbnVtYmVyLFxyXG4gICAgbnVtYmVyLFxyXG4gICAgbnVtYmVyLFxyXG4gICAgbnVtYmVyXHJcbiAgXTtcclxuXHJcbiAgY29uc3QgZGVsYXVuYXkgPSBuZXcgRGVsYXVuYXkoRmxvYXQ2NEFycmF5Lm9mKC4uLmNvbnZlcnRlZC5mbGF0KCkpKTtcclxuICBjb25zdCB2b3Jvbm9pID0gZGVsYXVuYXkudm9yb25vaShiYm94KTtcclxuICByZXR1cm4ge1xyXG4gICAgdHlwZTogXCJGZWF0dXJlQ29sbGVjdGlvblwiLFxyXG4gICAgZmVhdHVyZXM6IEFycmF5LmZyb20odm9yb25vaS5jZWxsUG9seWdvbnMoKSkubWFwKChwb2x5Z29uKSA9PiAoe1xyXG4gICAgICB0eXBlOiBcIkZlYXR1cmVcIixcclxuICAgICAgZ2VvbWV0cnk6IHtcclxuICAgICAgICB0eXBlOiBcIlBvbHlnb25cIixcclxuICAgICAgICBjb29yZGluYXRlczogW3BvbHlnb24ubWFwKChwKSA9PiB0b1dnczg0KHApKV0sXHJcbiAgICAgIH0sXHJcbiAgICAgIHByb3BlcnRpZXM6IHtcclxuICAgICAgICBhcmVhSW5kZXhlczogcG9pbnRzLmZlYXR1cmVzW3BvbHlnb24uaW5kZXhdLnByb3BlcnRpZXMuYXJlYUluZGV4ZXMsXHJcbiAgICAgICAgaW5kZXg6IHBvbHlnb24uaW5kZXgsXHJcbiAgICAgICAgbmVpZ2hib3JzOiBuZXcgU2V0KHZvcm9ub2kubmVpZ2hib3JzKHBvbHlnb24uaW5kZXgpKSxcclxuICAgICAgfSxcclxuICAgIH0pKSxcclxuICB9O1xyXG59O1xyXG5cclxuY29uc3QgY3JlYXRlTXVuaWNpcGFsaXRpZXNNdWx0aXBvbHlnb24gPSAoXHJcbiAgbXVuaWNpcGFsaXR5UG9seWdvbnM6IEZlYXR1cmVDb2xsZWN0aW9uW11cclxuKTogRmVhdHVyZTxQb2x5Z29uIHwgTXVsdGlQb2x5Z29uPiA9PiB7XHJcbiAgY29uc3QgbXVuaWNpcGFsaXR5UG9seWdvbkZlYXR1cmVzID0gbXVuaWNpcGFsaXR5UG9seWdvbnMucmVkdWNlKFxyXG4gICAgKGFjYywgbXVuaWNpcGFsaXR5UG9seWdvbikgPT4ge1xyXG4gICAgICBhY2MucHVzaChcclxuICAgICAgICAuLi5tdW5pY2lwYWxpdHlQb2x5Z29uLmZlYXR1cmVzLmZpbHRlcihcclxuICAgICAgICAgIChmKSA9PlxyXG4gICAgICAgICAgICBmLmdlb21ldHJ5LnR5cGUgPT09IFwiUG9seWdvblwiIHx8IGYuZ2VvbWV0cnkudHlwZSA9PT0gXCJNdWx0aVBvbHlnb25cIlxyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuIGFjYztcclxuICAgIH0sXHJcbiAgICBbXVxyXG4gICk7XHJcblxyXG4gIHJldHVybiBleHRyYWN0UG9seWdvbkZyb21Db2xsZWN0aW9uKFxyXG4gICAgZmVhdHVyZUNvbGxlY3Rpb24obXVuaWNpcGFsaXR5UG9seWdvbkZlYXR1cmVzKVxyXG4gICk7XHJcbn07XHJcblxyXG5jb25zdCBleHRyYWN0TXVuaWNpcGFsaXR5Q29kZXMgPSAobXVuaWNpcGFsaXRpZXM6IE11bmljaXBhbGl0eVtdKSA9PiB7XHJcbiAgcmV0dXJuIG11bmljaXBhbGl0aWVzLnJlZHVjZShcclxuICAgIChhY2MsIG11bmljaXBhbGl0eSkgPT4ge1xyXG4gICAgICBtdW5pY2lwYWxpdHkuY2l0eUNvZGVzLmZvckVhY2goKGNpdHlDb2RlKSA9PiBhY2MuY2l0eUNvZGVzLmFkZChjaXR5Q29kZSkpO1xyXG4gICAgICBtdW5pY2lwYWxpdHkuZGlzdHJpY3RDb2Rlcy5mb3JFYWNoKChkaXN0cmljdENvZGUpID0+XHJcbiAgICAgICAgYWNjLmRpc3RyaWN0Q29kZXMuYWRkKGRpc3RyaWN0Q29kZSlcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuIGFjYztcclxuICAgIH0sXHJcbiAgICB7IGNpdHlDb2RlczogbmV3IFNldDxudW1iZXI+KCksIGRpc3RyaWN0Q29kZXM6IG5ldyBTZXQ8bnVtYmVyPigpIH1cclxuICApO1xyXG59O1xyXG5cclxuY29uc3QgZXh0cmFjdFBvbHlnb25Gcm9tQ29sbGVjdGlvbiA9IChcclxuICBjb2xsZWN0aW9uOiBGZWF0dXJlQ29sbGVjdGlvbjxQb2x5Z29uIHwgTXVsdGlQb2x5Z29uPlxyXG4pOiBGZWF0dXJlPFBvbHlnb24gfCBNdWx0aVBvbHlnb24+ID0+XHJcbiAgY29sbGVjdGlvbi5mZWF0dXJlcy5sZW5ndGggPiAxID8gdW5pb24oY29sbGVjdGlvbikgOiBjb2xsZWN0aW9uLmZlYXR1cmVzWzBdO1xyXG4iXX0=
@@ -65,3 +65,4 @@ const generateRomanNumerals = (n) => {
65
65
  }
66
66
  return romanNumerals;
67
67
  };
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9tYW4tbnVtZXJhbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3RyZWV0LW1hcmtkb3duL3JvbWFuLW51bWVyYWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLElBQUksYUFBdUIsQ0FBQztBQUM1QixNQUFNLHlCQUF5QixHQUM3QixrREFBa0QsQ0FBQztBQUNyRCxNQUFNLHdCQUF3QixHQUM1QiwyR0FBMkcsQ0FBQztBQUM5RyxNQUFNLHlCQUF5QixHQUFHLGdDQUFnQyxDQUFDO0FBQ25FLE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLENBQUMsS0FBYSxFQUFZLEVBQUU7SUFDckUsTUFBTSxJQUFJLEdBQUcsd0JBQXdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xELElBQUksSUFBSSxFQUFFO1FBQ1IsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JFLE9BQU8sb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUN0QyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsR0FBRyxVQUFVLElBQUksT0FBTyxFQUFFLENBQ3hDLENBQUM7S0FDSDtTQUFNO1FBQ0wsTUFBTSxLQUFLLEdBQUcseUJBQXlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BELElBQUksS0FBSyxFQUFFO1lBQ1QsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3RFLE1BQU0sTUFBTSxHQUFHLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlDLElBQUksQ0FBQyxhQUFhLEVBQUU7Z0JBQ2xCLGFBQWEsR0FBRyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUM1QztZQUNELE9BQU8sYUFBYTtpQkFDakIsS0FBSyxDQUNKLGFBQWEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ2hDLGFBQWEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUNyQztpQkFDQSxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEdBQUcsVUFBVSxJQUFJLE9BQU8sRUFBRSxDQUFDLENBQUM7U0FDakQ7S0FDRjtJQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNqQixDQUFDLENBQUM7QUFFRixNQUFNLG9CQUFvQixHQUFHLENBQUMsS0FBYSxFQUFZLEVBQUU7SUFDdkQsSUFBSSxDQUF5QixDQUFDO0lBQzlCLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNwQixHQUFHO1FBQ0QsQ0FBQyxHQUFHLHlCQUF5QixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsRUFBRTtZQUNMLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDckI7S0FDRixRQUFRLENBQUMsRUFBRTtJQUNaLE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUMsQ0FBQztBQUVGLGtCQUFrQjtBQUNsQixNQUFNLHFCQUFxQixHQUFHLENBQUMsQ0FBUyxFQUFFLEVBQUU7SUFDMUMsTUFBTSxhQUFhLEdBQUcsRUFBRSxDQUFDO0lBQ3pCLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUM7UUFDL0IsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDO1FBQ1gsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDO1FBQ1gsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO1FBQ1YsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDO1FBQ1gsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO1FBQ1YsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDO1FBQ1YsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDO1FBQ1QsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDO1FBQ1YsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDO1FBQ1QsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO1FBQ1QsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO1FBQ1QsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDO0tBQ1QsQ0FBQyxDQUFDO0lBRUgsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUMzQixJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDZixJQUFJLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDdEIsS0FBSyxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLGdCQUFnQixFQUFFO1lBQzlDLE9BQU8sTUFBTSxJQUFJLEtBQUssRUFBRTtnQkFDdEIsTUFBTSxJQUFJLEtBQUssQ0FBQztnQkFDaEIsWUFBWSxJQUFJLE1BQU0sQ0FBQzthQUN4QjtTQUNGO1FBQ0QsYUFBYSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztLQUNsQztJQUVELE9BQU8sYUFBYSxDQUFDO0FBQ3ZCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImxldCByb21hbk51bWVyYWxzOiBzdHJpbmdbXTtcclxuY29uc3Qgc2luZ2xlUm9tYW5OdW1lcmFsUGF0dGVybiA9XHJcbiAgL1h7MSwzfShJWHxJVnxWP0l7MCwzfSl8KElYfElWfFZJezAsM30pfChJezEsM30pL2c7XHJcbmNvbnN0IHJvbWFuTnVtZXJhbHNMaXN0UGF0dGVybiA9XHJcbiAgLyhYezEsM30oSVh8SVZ8Vj9JezAsM30pfChJWHxJVnxWSXswLDN9KXwoSXsxLDN9KSkoLCA/KFh7MSwzfShJWHxJVnxWP0l7MCwzfSl8KElYfElWfFZJezAsM30pfChJezEsM30pKSkrJC87XHJcbmNvbnN0IHJvbWFuTnVtZXJhbHNSYW5nZVBhdHRlcm4gPSAvKFtJVlhMQ0RNXSspID8tID8oW0lWWExDRE1dKykkLztcclxuZXhwb3J0IGNvbnN0IHNwbGl0U3RyZWV0VmlhUm9tYW5OdW1lcmFscyA9IChpbnB1dDogc3RyaW5nKTogc3RyaW5nW10gPT4ge1xyXG4gIGNvbnN0IGxpc3QgPSByb21hbk51bWVyYWxzTGlzdFBhdHRlcm4uZXhlYyhpbnB1dCk7XHJcbiAgaWYgKGxpc3QpIHtcclxuICAgIGNvbnN0IHN0cmVldE5hbWUgPSBpbnB1dC5zdWJzdHJpbmcoMCwgaW5wdXQuaW5kZXhPZihsaXN0WzBdKSkudHJpbSgpO1xyXG4gICAgcmV0dXJuIGV4dHJhY3RSb21hbk51bWVyYWxzKGxpc3RbMF0pLm1hcChcclxuICAgICAgKG51bWVyYWwpID0+IGAke3N0cmVldE5hbWV9ICR7bnVtZXJhbH1gXHJcbiAgICApO1xyXG4gIH0gZWxzZSB7XHJcbiAgICBjb25zdCByYW5nZSA9IHJvbWFuTnVtZXJhbHNSYW5nZVBhdHRlcm4uZXhlYyhpbnB1dCk7XHJcbiAgICBpZiAocmFuZ2UpIHtcclxuICAgICAgY29uc3Qgc3RyZWV0TmFtZSA9IGlucHV0LnN1YnN0cmluZygwLCBpbnB1dC5pbmRleE9mKHJhbmdlWzBdKSkudHJpbSgpO1xyXG4gICAgICBjb25zdCBib3VuZHMgPSBleHRyYWN0Um9tYW5OdW1lcmFscyhyYW5nZVswXSk7XHJcbiAgICAgIGlmICghcm9tYW5OdW1lcmFscykge1xyXG4gICAgICAgIHJvbWFuTnVtZXJhbHMgPSBnZW5lcmF0ZVJvbWFuTnVtZXJhbHMoMTAwKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gcm9tYW5OdW1lcmFsc1xyXG4gICAgICAgIC5zbGljZShcclxuICAgICAgICAgIHJvbWFuTnVtZXJhbHMuaW5kZXhPZihib3VuZHNbMF0pLFxyXG4gICAgICAgICAgcm9tYW5OdW1lcmFscy5pbmRleE9mKGJvdW5kc1sxXSkgKyAxXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5tYXAoKG51bWVyYWwpID0+IGAke3N0cmVldE5hbWV9ICR7bnVtZXJhbH1gKTtcclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIFtpbnB1dF07XHJcbn07XHJcblxyXG5jb25zdCBleHRyYWN0Um9tYW5OdW1lcmFscyA9IChpbnB1dDogc3RyaW5nKTogc3RyaW5nW10gPT4ge1xyXG4gIGxldCBuOiBSZWdFeHBFeGVjQXJyYXkgfCBudWxsO1xyXG4gIGNvbnN0IG51bWVyYWxzID0gW107XHJcbiAgZG8ge1xyXG4gICAgbiA9IHNpbmdsZVJvbWFuTnVtZXJhbFBhdHRlcm4uZXhlYyhpbnB1dCk7XHJcbiAgICBpZiAobikge1xyXG4gICAgICBudW1lcmFscy5wdXNoKG5bMF0pO1xyXG4gICAgfVxyXG4gIH0gd2hpbGUgKG4pO1xyXG4gIHJldHVybiBudW1lcmFscztcclxufTtcclxuXHJcbi8vIHNvdXJjZTogQ2hhdEdQVFxyXG5jb25zdCBnZW5lcmF0ZVJvbWFuTnVtZXJhbHMgPSAobjogbnVtYmVyKSA9PiB7XHJcbiAgY29uc3Qgcm9tYW5OdW1lcmFscyA9IFtdO1xyXG4gIGNvbnN0IHJvbWFuTnVtZXJhbHNNYXAgPSBuZXcgTWFwKFtcclxuICAgIFsxMDAwLCBcIk1cIl0sXHJcbiAgICBbOTAwLCBcIkNNXCJdLFxyXG4gICAgWzUwMCwgXCJEXCJdLFxyXG4gICAgWzQwMCwgXCJDRFwiXSxcclxuICAgIFsxMDAsIFwiQ1wiXSxcclxuICAgIFs5MCwgXCJYQ1wiXSxcclxuICAgIFs1MCwgXCJMXCJdLFxyXG4gICAgWzQwLCBcIlhMXCJdLFxyXG4gICAgWzEwLCBcIlhcIl0sXHJcbiAgICBbOSwgXCJJWFwiXSxcclxuICAgIFs1LCBcIlZcIl0sXHJcbiAgICBbNCwgXCJJVlwiXSxcclxuICAgIFsxLCBcIklcIl0sXHJcbiAgXSk7XHJcblxyXG4gIGZvciAobGV0IGkgPSAxOyBpIDw9IG47IGkrKykge1xyXG4gICAgbGV0IG51bWJlciA9IGk7XHJcbiAgICBsZXQgcm9tYW5OdW1lcmFsID0gXCJcIjtcclxuICAgIGZvciAoY29uc3QgW3ZhbHVlLCBzeW1ib2xdIG9mIHJvbWFuTnVtZXJhbHNNYXApIHtcclxuICAgICAgd2hpbGUgKG51bWJlciA+PSB2YWx1ZSkge1xyXG4gICAgICAgIG51bWJlciAtPSB2YWx1ZTtcclxuICAgICAgICByb21hbk51bWVyYWwgKz0gc3ltYm9sO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByb21hbk51bWVyYWxzLnB1c2gocm9tYW5OdW1lcmFsKTtcclxuICB9XHJcblxyXG4gIHJldHVybiByb21hbk51bWVyYWxzO1xyXG59O1xyXG4iXX0=
@@ -25,14 +25,11 @@ export const parseLine = (text, showDebug = false) => {
25
25
  smdParser.input = lexingResult.tokens;
26
26
  const smdLines = smdParser.street();
27
27
  if (smdParser.errors.length > 0) {
28
- errors.push(...smdParser.errors.map((error) => {
29
- var _a;
30
- return ({
31
- message: `Nesprávný zápis pravidla - nevynechali jste něco?`,
32
- startOffset: error.token.startOffset,
33
- endOffset: (_a = error.token.endOffset) !== null && _a !== void 0 ? _a : text.length,
34
- });
35
- }));
28
+ errors.push(...smdParser.errors.map((error) => ({
29
+ message: `Nesprávný zápis pravidla - nevynechali jste něco?`,
30
+ startOffset: error.token.startOffset,
31
+ endOffset: error.token.endOffset ?? text.length,
32
+ })));
36
33
  if (showDebug) {
37
34
  printLexingResultInfo(lexingResult);
38
35
  }
@@ -40,3 +37,4 @@ export const parseLine = (text, showDebug = false) => {
40
37
  }
41
38
  return { smdLines, errors };
42
39
  };
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21kLWxpbmUtcGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0cmVldC1tYXJrZG93bi9zbWQtbGluZS1wYXJzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixLQUFLLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDbEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUV6QyxPQUFPLEVBQ0wsZUFBZSxFQUNmLFNBQVMsRUFDVCxlQUFlLEVBQ2YsV0FBVyxHQUNaLE1BQU0sb0JBQW9CLENBQUM7QUFHNUIsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLFlBQTJCLEVBQUUsRUFBRTtJQUM1RCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FDcEMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksR0FBRyxHQUFHLENBQ2xFLENBQUM7SUFDRixPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3hCLENBQUMsQ0FBQztBQUVGLE1BQU0sUUFBUSxHQUFHLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7QUFDMUUsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLElBQUksU0FBUyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBRXhELE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxDQUN2QixJQUFZLEVBQ1osU0FBUyxHQUFHLEtBQUssRUFDRSxFQUFFO0lBQ3JCLGVBQWUsRUFBRSxDQUFDLENBQUMsd0RBQXdEO0lBQzNFLE1BQU0sTUFBTSxHQUFlLEVBQUUsQ0FBQztJQUU5QixNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBRTFELElBQUksWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQ2xDLE1BQU0sQ0FBQyxJQUFJLENBQ1QsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNyQyxPQUFPLEVBQUUsa0NBQWtDO1lBQzNDLFdBQVcsRUFBRSxLQUFLLENBQUMsTUFBTTtZQUN6QixTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUM7U0FDM0MsQ0FBQyxDQUFDLENBQ0osQ0FBQztRQUNGLElBQUksU0FBUyxFQUFFO1lBQ2IscUJBQXFCLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDckM7UUFDRCxPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQztLQUNqQztJQUVELFNBQVMsQ0FBQyxLQUFLLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQztJQUN0QyxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUM7SUFFcEMsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDL0IsTUFBTSxDQUFDLElBQUksQ0FDVCxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2xDLE9BQU8sRUFBRSxtREFBbUQ7WUFDNUQsV0FBVyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsV0FBVztZQUNwQyxTQUFTLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLE1BQU07U0FDaEQsQ0FBQyxDQUFDLENBQ0osQ0FBQztRQUNGLElBQUksU0FBUyxFQUFFO1lBQ2IscUJBQXFCLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDckM7UUFDRCxPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQztLQUNqQztJQUVELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDOUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSUxleGluZ1Jlc3VsdCwgTGV4ZXIgfSBmcm9tIFwiY2hldnJvdGFpblwiO1xyXG5pbXBvcnQgeyBTbWRQYXJzZXIgfSBmcm9tIFwiLi9zbWQtcGFyc2VyXCI7XHJcblxyXG5pbXBvcnQge1xyXG4gIHRva2VuVm9jYWJ1bGFyeSxcclxuICBzbWRUb2tlbnMsXHJcbiAgcmVzZXRUb2tlblN0YXRlLFxyXG4gIHByZXBhcmVMaW5lLFxyXG59IGZyb20gXCIuL3Rva2VuLWRlZmluaXRpb25cIjtcclxuaW1wb3J0IHsgUHJvY2Vzc2VkU21kTGluZXMsIFNtZEVycm9yLCBTbWRMaW5lIH0gZnJvbSBcIi4vdHlwZXNcIjtcclxuXHJcbmNvbnN0IHByaW50TGV4aW5nUmVzdWx0SW5mbyA9IChsZXhpbmdSZXN1bHQ6IElMZXhpbmdSZXN1bHQpID0+IHtcclxuICBjb25zdCB0b2tlbnMgPSBsZXhpbmdSZXN1bHQudG9rZW5zLm1hcChcclxuICAgICh0b2tlbikgPT4gXCInXCIgKyB0b2tlbi5pbWFnZSArIFwiJyAoXCIgKyB0b2tlbi50b2tlblR5cGUubmFtZSArIFwiKVwiXHJcbiAgKTtcclxuICBjb25zb2xlLmVycm9yKHRva2Vucyk7XHJcbn07XHJcblxyXG5jb25zdCBzbWRMZXhlciA9IG5ldyBMZXhlcihzbWRUb2tlbnMsIHsgcG9zaXRpb25UcmFja2luZzogXCJvbmx5T2Zmc2V0XCIgfSk7XHJcbmV4cG9ydCBjb25zdCBzbWRQYXJzZXIgPSBuZXcgU21kUGFyc2VyKHRva2VuVm9jYWJ1bGFyeSk7XHJcblxyXG5leHBvcnQgY29uc3QgcGFyc2VMaW5lID0gKFxyXG4gIHRleHQ6IHN0cmluZyxcclxuICBzaG93RGVidWcgPSBmYWxzZVxyXG4pOiBQcm9jZXNzZWRTbWRMaW5lcyA9PiB7XHJcbiAgcmVzZXRUb2tlblN0YXRlKCk7IC8vIHRoaXMgaXMgbmVlZGVkIHRvIHJlc2V0IHRoZSB0b2tlbiBzdGF0ZSBiZXR3ZWVuIGxpbmVzXHJcbiAgY29uc3QgZXJyb3JzOiBTbWRFcnJvcltdID0gW107XHJcblxyXG4gIGNvbnN0IGxleGluZ1Jlc3VsdCA9IHNtZExleGVyLnRva2VuaXplKHByZXBhcmVMaW5lKHRleHQpKTtcclxuXHJcbiAgaWYgKGxleGluZ1Jlc3VsdC5lcnJvcnMubGVuZ3RoID4gMCkge1xyXG4gICAgZXJyb3JzLnB1c2goXHJcbiAgICAgIC4uLmxleGluZ1Jlc3VsdC5lcnJvcnMubWFwKChlcnJvcikgPT4gKHtcclxuICAgICAgICBtZXNzYWdlOiBgTmVvxI1la8OhdmFuw70gem5hayBuYSB0b210byBtw61zdMSbLmAsXHJcbiAgICAgICAgc3RhcnRPZmZzZXQ6IGVycm9yLm9mZnNldCxcclxuICAgICAgICBlbmRPZmZzZXQ6IGVycm9yLm9mZnNldCArIGVycm9yLmxlbmd0aCArIDEsXHJcbiAgICAgIH0pKVxyXG4gICAgKTtcclxuICAgIGlmIChzaG93RGVidWcpIHtcclxuICAgICAgcHJpbnRMZXhpbmdSZXN1bHRJbmZvKGxleGluZ1Jlc3VsdCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBzbWRMaW5lczogW10sIGVycm9ycyB9O1xyXG4gIH1cclxuXHJcbiAgc21kUGFyc2VyLmlucHV0ID0gbGV4aW5nUmVzdWx0LnRva2VucztcclxuICBjb25zdCBzbWRMaW5lcyA9IHNtZFBhcnNlci5zdHJlZXQoKTtcclxuXHJcbiAgaWYgKHNtZFBhcnNlci5lcnJvcnMubGVuZ3RoID4gMCkge1xyXG4gICAgZXJyb3JzLnB1c2goXHJcbiAgICAgIC4uLnNtZFBhcnNlci5lcnJvcnMubWFwKChlcnJvcikgPT4gKHtcclxuICAgICAgICBtZXNzYWdlOiBgTmVzcHLDoXZuw70gesOhcGlzIHByYXZpZGxhIC0gbmV2eW5lY2hhbGkganN0ZSBuxJtjbz9gLFxyXG4gICAgICAgIHN0YXJ0T2Zmc2V0OiBlcnJvci50b2tlbi5zdGFydE9mZnNldCxcclxuICAgICAgICBlbmRPZmZzZXQ6IGVycm9yLnRva2VuLmVuZE9mZnNldCA/PyB0ZXh0Lmxlbmd0aCxcclxuICAgICAgfSkpXHJcbiAgICApO1xyXG4gICAgaWYgKHNob3dEZWJ1Zykge1xyXG4gICAgICBwcmludExleGluZ1Jlc3VsdEluZm8obGV4aW5nUmVzdWx0KTtcclxuICAgIH1cclxuICAgIHJldHVybiB7IHNtZExpbmVzOiBbXSwgZXJyb3JzIH07XHJcbiAgfVxyXG5cclxuICByZXR1cm4geyBzbWRMaW5lcywgZXJyb3JzIH07XHJcbn07XHJcbiJdfQ==
@@ -387,7 +387,7 @@ export const parseRichNumber = (number) => {
387
387
  };
388
388
  const municipalityPartPattern = /^část (?<type>obce|města) (?<name>.+)$/;
389
389
  export const parseMunicipalityPartName = (name) => {
390
- var _a, _b;
391
390
  const match = municipalityPartPattern.exec(name);
392
- return (_b = (_a = match === null || match === void 0 ? void 0 : match.groups.name) === null || _a === void 0 ? void 0 : _a.trim()) !== null && _b !== void 0 ? _b : "";
391
+ return match?.groups.name?.trim() ?? "";
393
392
  };
393
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21kLXBhcnNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdHJlZXQtbWFya2Rvd24vc21kLXBhcnNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsR0FBRyxFQUFtQixNQUFNLFlBQVksQ0FBQztBQUN6RSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUUvRCxPQUFPLEVBQ0wsT0FBTyxFQUNQLFFBQVEsRUFDUixRQUFRLEVBQ1IsZUFBZSxFQUNmLFFBQVEsRUFDUixJQUFJLEVBQ0osTUFBTSxFQUNOLGFBQWEsRUFDYixvQkFBb0IsRUFDcEIsTUFBTSxFQUNOLE9BQU8sRUFDUCxTQUFTLEVBQ1QsS0FBSyxFQUNMLFVBQVUsRUFDVixFQUFFLEVBQ0YsT0FBTyxHQUNSLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFvRCxVQUFVLEVBQVcsTUFBTSxTQUFTLENBQUM7QUFFaEcsTUFBTSxPQUFPLFNBQVUsU0FBUSxxQkFBcUI7SUFDbEQsWUFBWSxlQUFnQztRQUMxQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7UUFJbEIsV0FBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQWMsRUFBRTtZQUNsRCxJQUFJLE1BQU0sQ0FBQztZQUNYLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ047b0JBQ0UsR0FBRyxFQUFFLEdBQUcsRUFBRTt3QkFDUixNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsQ0FBQztvQkFDeEQsQ0FBQztpQkFDRjtnQkFDRDtvQkFDRSxHQUFHLEVBQUUsR0FBRyxFQUFFO3dCQUNSLE1BQU0sR0FBRzs0QkFDUCxJQUFJLEVBQUUsUUFBUTs0QkFDZCxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLOzRCQUN0QyxVQUFVLEVB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Q0gsQ0FBQyxDQUFDO0FBRUYsTUFBTSx1QkFBdUIsR0FBRyx3Q0FBd0MsQ0FBQztBQUV6RSxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxDQUFDLElBQVksRUFBVSxFQUFFO0lBQ2hFLE1BQU0sS0FBSyxHQUFHLHVCQUF1QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqRCxPQUFPLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUMxQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbWJlZGRlZEFjdGlvbnNQYXJzZXIsIEVPRiwgVG9rZW5Wb2NhYnVsYXJ5IH0gZnJvbSBcImNoZXZyb3RhaW5cIjtcclxuaW1wb3J0IHsgc3BsaXRTdHJlZXRWaWFSb21hbk51bWVyYWxzIH0gZnJvbSBcIi4vcm9tYW4tbnVtZXJhbHNcIjtcclxuXHJcbmltcG9ydCB7XHJcbiAgQWxsVHlwZSxcclxuICBBbmRBYm92ZSxcclxuICBBbmRCZWxvdyxcclxuICBEZXNjcmlwdGl2ZVR5cGUsXHJcbiAgRXZlblR5cGUsXHJcbiAgRnJvbSxcclxuICBIeXBoZW4sXHJcbiAgTWFpblNlcGFyYXRvcixcclxuICBNdW5pY2lwYWxpdHlQYXJ0TmFtZSxcclxuICBOdW1iZXIsXHJcbiAgT2RkVHlwZSxcclxuICBTZXBhcmF0b3IsXHJcbiAgU2xhc2gsXHJcbiAgU3RyZWV0TmFtZSxcclxuICBUbyxcclxuICBXaXRob3V0LFxyXG59IGZyb20gXCIuL3Rva2VuLWRlZmluaXRpb25cIjtcclxuaW1wb3J0IHsgRnVsbFN0cmVldE51bWJlciwgTmVnYXRpdmVTZXJpZXNTcGVjLCBSaWNoTnVtYmVyLCBTZXJpZXNUeXBlLCBTbWRMaW5lIH0gZnJvbSBcIi4vdHlwZXNcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBTbWRQYXJzZXIgZXh0ZW5kcyBFbWJlZGRlZEFjdGlvbnNQYXJzZXIge1xyXG4gIGNvbnN0cnVjdG9yKHRva2VuVm9jYWJ1bGFyeTogVG9rZW5Wb2NhYnVsYXJ5KSB7XHJcbiAgICBzdXBlcih0b2tlblZvY2FidWxhcnkpO1xyXG4gICAgdGhpcy5wZXJmb3JtU2VsZkFuYWx5c2lzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RyZWV0ID0gdGhpcy5SVUxFKFwic3RyZWV0XCIsICgpOiBTbWRMaW5lW10gPT4ge1xyXG4gICAgbGV0IHJlc3VsdDtcclxuICAgIHRoaXMuT1IoW1xyXG4gICAgICB7XHJcbiAgICAgICAgQUxUOiAoKSA9PiB7XHJcbiAgICAgICAgICByZXN1bHQgPSB0aGlzLlNVQlJVTEUodGhpcy5zdHJlZXROYW1lQW5kTnVtYmVyc1NwZWNzKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgQUxUOiAoKSA9PiB7XHJcbiAgICAgICAgICByZXN1bHQgPSB7XHJcbiAgICAgICAgICAgIHR5cGU6IFwic3RyZWV0XCIsXHJcbiAgICAgICAgICAgIHN0cmVldDogdGhpcy5DT05TVU1FKFN0cmVldE5hbWUpLmltYWdlLFxyXG4gICAgICAgICAgICBudW1iZXJTcGVjOiBbXSxcclxuICAgICAgICAgIH0gYXMgU21kTGluZTtcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgQUxUOiAoKSA9PiB7XHJcbiAgICAgICAgICByZXN1bHQgPSB0aGlzLlNVQlJVTEUodGhpcy5tdW5pY2lwYWxpdHlQYXJ0TmFtZUFuZE51bWJlcnNTcGVjcyk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIEFMVDogKCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgbXVuaWNpcGFsaXR5UGFydCA9IHBhcnNlTXVuaWNpcGFsaXR5UGFydE5hbWUoXHJcbiAgICAgICAgICAgIHRoaXMuQ09OU1VNRShNdW5pY2lwYWxpdHlQYXJ0TmFtZSkuaW1hZ2VcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICByZXN1bHQgPSB7XHJcbiAgICAgICAgICAgIHR5cGU6IFwibXVuaWNpcGFsaXR5UGFydFwiLFxyXG4gICAgICAgICAgICBtdW5pY2lwYWxpdHlQYXJ0LFxyXG4gICAgICAgICAgICBudW1iZXJTcGVjOiBbXSxcclxuICAgICAgICAgIH0gYXMgU21kTGluZTtcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgXSk7XHJcblxyXG4gICAgaWYgKHJlc3VsdC50eXBlID09PSBcInN0cmVldFwiKSB7XHJcbiAgICAgIHJldHVybiBzcGxpdFN0cmVldFZpYVJvbWFuTnVtZXJhbHMocmVzdWx0LnN0cmVldCkubWFwKChzdHJlZXQpID0+ICh7XHJcbiAgICAgICAgdHlwZTogXCJzdHJlZXRcIixcclxuICAgICAgICBzdHJlZXQsXHJcbiAgICAgICAgbnVtYmVyU3BlYzogcmVzdWx0Lm51bWJlclNwZWMsXHJcbiAgICAgIH0pKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBbcmVzdWx0XTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgcHJpdmF0ZSBzdHJlZXROYW1lQW5kTnVtYmVyc1NwZWNzID0gdGhpcy5SVUxFKFxyXG4gICAgXCJzdHJlZXROYW1lQW5kTnVtYmVyc1NwZWNzXCIsXHJcbiAgICAoKSA9PiB7XHJcbiAgICAgIGNvbnN0IHN0cmVldCA9IHRoaXMuQ09OU1VNRShTdHJlZXROYW1lKS5pbWFnZTtcclxuICAgICAgdGhpcy5PUFRJT04oKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuQ09OU1VNRShNYWluU2VwYXJhdG9yKTtcclxuICAgICAgfSk7XHJcbiAgICAgIGNvbnN0IG51bWJlclNwZWMgPSB0aGlzLlNVQlJVTEUodGhpcy5udW1iZXJTcGVjcyk7XHJcbiAgICAgIHJldHVybiB7IHR5cGU6IFwic3RyZWV0XCIsIHN0cmVldCwgbnVtYmVyU3BlYyB9IGFzIFNtZExpbmU7XHJcbiAgICB9XHJcbiAgKTtcclxuXHJcbiAgcHJpdmF0ZSBtdW5pY2lwYWxpdHlQYXJ0TmFtZUFuZE51bWJlcnNTcGVjcyA9IHRoaXMuUlVMRShcclxuICAgIFwibXVuaWNpcGFsaXR5UGFydE5hbWVBbmROdW1iZXJzU3BlY3NcIixcclxuICAgICgpID0+IHtcclxuICAgICAgY29uc3QgbXVuaWNpcGFsaXR5UGFydCA9IHBhcnNlTXVuaWNpcGFsaXR5UGFydE5hbWUoXHJcbiAgICAgICAgdGhpcy5DT05TVU1FKE11bmljaXBhbGl0eVBhcnROYW1lKS5pbWFnZVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLk9QVElPTigoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5DT05TVU1FKE1haW5TZXBhcmF0b3IpO1xyXG4gICAgICB9KTtcclxuICAgICAgY29uc3QgbnVtYmVyU3BlYyA9IHRoaXMuU1VCUlVMRSh0aGlzLm51bWJlclNwZWNzKTtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICB0eXBlOiBcIm11bmljaXBhbGl0eVBhcnRcIixcclxuICAgICAgICBtdW5pY2lwYWxpdHlQYXJ0LFxyXG4gICAgICAgIG51bWJlclNwZWMsXHJcbiAgICAgIH0gYXMgU21kTGluZTtcclxuICAgIH1cclxuICApO1xyXG5cclxuICBwcml2YXRlIG51bWJlclNwZWNzID0gdGhpcy5SVUxFKFwibnVtYmVyU3BlY3NcIiwgKCkgPT4ge1xyXG4gICAgY29uc3QgcG9zaXRpdmVSZXN1bHQgPSBbXTtcclxuICAgIGxldCBuZWdhdGl2ZVJlc3VsdDogTmVnYXRpdmVTZXJpZXNTcGVjO1xyXG4gICAgdGhpcy5PUihbXHJcbiAgICAgIHtcclxuICAgICAgICBHQVRFOiAoKSA9PiB0aGlzLkxBKDIpLnRva2VuVHlwZSA9PT0gV2l0aG91dCxcclxuICAgICAgICBBTFQ6ICgpID0+IHtcclxuICAgICAgICAgIGNvbnN0IHR5cGUgPSB0aGlzLlNVQlJVTEUodGhpcy5zZXJpZXNUeXBlKTtcclxuICAgICAgICAgIHRoaXMuQ09OU1VNRShXaXRob3V0KTtcclxuICAgICAgICAgIHRoaXMuT1BUSU9OKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5DT05TVU1FKEFsbFR5cGUpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBjb25zdCByYW5nZXMgPSB0aGlzLlNVQlJVTEUodGhpcy5yYW5nZUxpc3QpO1xyXG4gICAgICAgICAgcmV0dXJuIHsgbmVnYXRpdmU6IHRydWUsIHR5cGUsIHJhbmdlcyB9O1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBBTFQ6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuQ09OU1VNRTIoV2l0aG91dCk7XHJcbiAgICAgICAgICB0aGlzLk9SMShbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBHQVRFOiB0aGlzLl9nYXRlUG9zdGZpeFR5cGVTZXJpZXNTcGVjLFxyXG4gICAgICAgICAgICAgIEFMVDogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyB0eXBlLCByYW5nZXMgfSA9IHRoaXMuU1VCUlVMRShcclxuICAgICAgICAgICAgICAgICAgdGhpcy5wb3N0Zml4VHlwZVNlcmllc1NwZWNcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBuZWdhdGl2ZVJlc3VsdCA9IHsgbmVnYXRpdmU6IHRydWUsIHR5cGUsIHJhbmdlcyB9O1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBBTFQ6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHR5cGUgPSB0aGlzLlNVQlJVTEUyKHRoaXMuc2VyaWVzVHlwZSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByYW5nZXMgPSB0aGlzLlNVQlJVTEUyKHRoaXMucmFuZ2VMaXN0KTtcclxuICAgICAgICAgICAgICAgIG5lZ2F0aXZlUmVzdWx0ID0geyBuZWdhdGl2ZTogdHJ1ZSwgdHlwZSwgcmFuZ2VzIH07XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIF0pO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBBTFQ6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuQVRfTEVBU1RfT05FX1NFUCh7XHJcbiAgICAgICAgICAgIFNFUDogU2VwYXJhdG9yLFxyXG4gICAgICAgICAgICBERUY6ICgpID0+IHtcclxuICAgICAgICAgICAgICBwb3NpdGl2ZVJlc3VsdC5wdXNoKHRoaXMuU1VCUlVMRSh0aGlzLnNlcmllc1NwZWNzKSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgXSk7XHJcbiAgICBpZiAobmVnYXRpdmVSZXN1bHQpIHtcclxuICAgICAgcmV0dXJuIG5lZ2F0aXZlUmVzdWx0O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHBvc2l0aXZlUmVzdWx0O1xyXG4gIH0pO1xyXG5cclxuICBwcml2YXRlIHNlcmllc1NwZWNzID0gdGhpcy5SVUxFKFwic2VyaWVzU3BlY3NcIiwgKCkgPT4ge1xyXG4gICAgbGV0IHJhbmdlcyA9IFtdO1xyXG4gICAgbGV0IHR5cGU6IFNlcmllc1R5cGU7XHJcbiAgICB0aGlzLk9SKFtcclxuICAgICAge1xyXG4gICAgICAgIEdBVEU6IHRoaXMuX2dhdGVQb3N0Zml4VHlwZVNlcmllc1NwZWMsXHJcbiAgICAgICAgQUxUOiAoKSA9PiB7XHJcbiAgICAgICAgICAoeyB0eXBlLCByYW5nZXMgfSA9IHRoaXMuU1VCUlVMRSh0aGlzLnBvc3RmaXhUeXBlU2VyaWVzU3BlYykpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBBTFQ6ICgpID0+IHtcclxuICAgICAgICAgIHR5cGUgPSB0aGlzLlNVQlJVTEUodGhpcy5zZXJpZXNUeXBlKTtcclxuICAgICAgICAgIHRoaXMuT1BUSU9OKCgpID0+IHtcclxuICAgICAgICAgICAgcmFuZ2VzID0gdGhpcy5TVUJSVUxFKHRoaXMucmFuZ2VMaXN0KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBBTFQ6ICgpID0+IHtcclxuICAgICAgICAgICh7IHR5cGUsIHJhbmdlcyB9ID0gdGhpcy5TVUJSVUxFMih0aGlzLmZyb21BbmRBYm92ZVdpdGhUeXBlKSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIEFMVDogKCkgPT4ge1xyXG4gICAgICAgICAgKHsgdHlwZSwgcmFuZ2VzIH0gPSB0aGlzLlNVQlJVTEUodGhpcy50b09yQmVsb3dXaXRoVHlwZSkpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICBdKTtcclxuXHJcbiAgICByZXR1cm4geyB0eXBlLCByYW5nZXMgfTtcclxuICB9KTtcclxuXHJcbiAgcHJpdmF0ZSBfZ2F0ZVBvc3RmaXhUeXBlU2VyaWVzU3BlYyA9ICgpOiBib29sZWFuID0+IHtcclxuICAgIGxldCBpbmRleCA9IDI7XHJcbiAgICB3aGlsZSAoIVtTZXBhcmF0b3IsIEVPRl0uaW5jbHVkZXModGhpcy5MQShpbmRleCkudG9rZW5UeXBlKSkge1xyXG4gICAgICBpZiAoW09kZFR5cGUsIEV2ZW5UeXBlXS5pbmNsdWRlcyh0aGlzLkxBKGluZGV4KS50b2tlblR5cGUpKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaW5kZXgrKztcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9O1xyXG5cclxuICBwcml2YXRlIHBvc3RmaXhUeXBlU2VyaWVzU3BlYyA9IHRoaXMuUlVMRShcInBvc3RmaXhUeXBlU2VyaWVzU3BlY1wiLCAoKSA9PiB7XHJcbiAgICB0aGlzLkNPTlNVTUUoQWxsVHlwZSk7XHJcbiAgICBjb25zdCByYW5nZXMgPSBbdGhpcy5TVUJSVUxFKHRoaXMucmFuZ2VPck51bWJlcildO1xyXG4gICAgbGV0IHR5cGU6IFNlcmllc1R5cGU7XHJcbiAgICB0aGlzLk9SMShbXHJcbiAgICAgIHtcclxuICAgICAgICBBTFQ6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuQ09OU1VNRShPZGRUeXBlKTtcclxuICAgICAgICAgIHR5cGUgPSBTZXJpZXNUeXBlLk9kZDtcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgQUxUOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLkNPTlNVTUUxKEV2ZW5UeXBlKTtcclxuICAgICAgICAgIHR5cGUgPSBTZXJpZXNUeXBlLkV2ZW47XHJcbiAgICAgICAgfSxcclxuICAgICAgfSxcclxuICAgIF0pO1xyXG4gICAgcmV0dXJuIHsgdHlwZSwgcmFuZ2VzIH07XHJcbiAgfSk7XHJcblxyXG4gIHByaXZhdGUgcmFuZ2VMaXN0ID0gdGhpcy5SVUxFKFwicmFuZ2VMaXN0XCIsICgpID0+IHtcclxuICAgIGxldCByYW5nZXMgPSBbXTtcclxuICAgIHJhbmdlcy5wdXNoKHRoaXMuU1VCUlVMRSh0aGlzLnJhbmdlT3JOdW1iZXIpKTtcclxuICAgIHRoaXMuTUFOWSh7XHJcbiAgICAgIEdBVEU6ICgpID0+IFtOdW1iZXIsIFRvLCBGcm9tXS5pbmNsdWRlcyh0aGlzLkxBKDIpLnRva2VuVHlwZSksXHJcbiAgICAgIERFRjogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuQ09OU1VNRShTZXBhcmF0b3IpO1xyXG4gICAgICAgIHJhbmdlcy5wdXNoKHRoaXMuU1VCUlVMRTIodGhpcy5yYW5nZU9yTnVtYmVyKSk7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICAgIHJldHVybiByYW5nZXM7XHJcbiAgfSk7XHJcblxyXG4gIHByaXZhdGUgc2VyaWVzVHlwZSA9IHRoaXMuUlVMRShcInNlcmllc1R5cGVcIiwgKCkgPT4ge1xyXG4gICAgbGV0IHR5cGU6IFNlcmllc1R5cGU7XHJcbiAgICB0aGlzLk9SKFtcclxuICAgICAge1xyXG4gICAgICAgIEFMVDogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5DT05TVU1FKE9kZFR5cGUpO1xyXG4gICAgICAgICAgdHlwZSA9IFNlcmllc1R5cGUuT2RkO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBBTFQ6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuQ09OU1VNRTEoRXZlblR5cGUpO1xyXG4gICAgICAgICAgdHlwZSA9IFNlcmllc1R5cGUuRXZlbjtcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgQUxUOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLkNPTlNVTUUyKEFsbFR5cGUpO1xyXG4gICAgICAgICAgdHlwZSA9IFNlcmllc1R5cGUuQWxsO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBBTFQ6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuQ09OU1VNRTMoRGVzY3JpcHRpdmVUeXBlKTtcclxuICAgICAgICAgIHR5cGUgPSBTZXJpZXNUeXBlLkRlc2NyaXB0aW9uO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICBdKTtcclxuICAgIHJldHVybiB0eXBlO1xyXG4gIH0pO1xyXG5cclxuICBwcml2YXRlIHJhbmdlT3JOdW1iZXIgPSB0aGlzLlJVTEUoXCJyYW5nZU9yTnVtYmVyXCIsICgpID0+IHtcclxuICAgIGxldCByZXN1bHQ7XHJcbiAgICB0aGlzLk9SKFtcclxuICAgICAge1xyXG4gICAgICAgIEFMVDogKCkgPT4ge1xyXG4gICAgICAgICAgcmVzdWx0ID0gdGhpcy5TVUJSVUxFKHRoaXMucmFuZ2UpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBBTFQ6ICgpID0+IHtcclxuICAgICAgICAgIHJlc3VsdCA9IHRoaXMuU1VCUlVMRSh0aGlzLmZyb21BbmRBYm92ZSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIEFMVDogKCkgPT4ge1xyXG4gICAgICAgICAgcmVzdWx0ID0gdGhpcy5TVUJSVUxFKHRoaXMudG9PckJlbG93KTtcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgQUxUOiAoKSA9PiB7XHJcbiAgICAgICAgICByZXN1bHQgPSB0aGlzLlNVQlJVTEUodGhpcy5mdWxsU3RyZWV0TnVtYmVyKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgQUxUOiAoKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBuID0gcGFyc2VSaWNoTnVtYmVyKHRoaXMuQ09OU1VNRShOdW1iZXIpLmltYWdlKTtcclxuICAgICAgICAgIHJlc3VsdCA9IHsgZnJvbTogbiwgdG86IG4gfTtcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgXSk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH0pO1xyXG5cclxuICBwcml2YXRlIHJhbmdlID0gdGhpcy5SVUxFKFwicmFuZ2VcIiwgKCkgPT4ge1xyXG4gICAgY29uc3QgZnJvbSA9IHBhcnNlUmljaE51bWJlcih0aGlzLkNPTlNVTUUoTnVtYmVyKS5pbWFnZSk7XHJcbiAgICB0aGlzLk9SKFtcclxuICAgICAgeyBBTFQ6ICgpID0+IHRoaXMuQ09OU1VNRTEoSHlwaGVuKSB9LFxyXG4gICAgICB7IEFMVDogKCkgPT4gdGhpcy5DT05TVU1FMihNYWluU2VwYXJhdG9yKSB9LFxyXG4gICAgXSk7XHJcbiAgICB0aGlzLk9QVElPTigoKSA9PiB7XHJcbiAgICAgIHRoaXMuQ09OU1VNRShBbGxUeXBlKTtcclxuICAgIH0pO1xyXG4gICAgY29uc3QgdG8gPSBwYXJzZVJpY2hOdW1iZXIodGhpcy5DT05TVU1FMyhOdW1iZXIpLmltYWdlKTtcclxuICAgIHJldHVybiB7IGZyb20sIHRvIH07XHJcbiAgfSk7XHJcblxyXG4gIHByaXZhdGUgZnJvbUFuZEFib3ZlID0gdGhpcy5SVUxFKFwiZnJvbUFuZEFib3ZlXCIsICgpID0+IHtcclxuICAgIGxldCBmcm9tOiBSaWNoTnVtYmVyO1xyXG4gICAgdGhpcy5PUihbXHJcbiAgICAgIHtcclxuICAgICAgICBBTFQ6ICgpID0+IHtcclxuICAgICAgICAgIGZyb20gPSBwYXJzZVJpY2hOdW1iZXIodGhpcy5DT05TVU1FKE51bWJlcikuaW1hZ2UpO1xyXG4gICAgICAgICAgdGhpcy5DT05TVU1FKEFuZEFib3ZlKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgQUxUOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLkNPTlNVTUUoRnJvbSk7XHJcbiAgICAgICAgICB0aGlzLk9QVElPTigoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuQ09OU1VNRShBbGxUeXBlKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgZnJvbSA9IHBhcnNlUmljaE51bWJlcih0aGlzLkNPTlNVTUUyKE51bWJlcikuaW1hZ2UpO1xyXG4gICAgICAgICAgdGhpcy5PUFRJT04yKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5DT05TVU1FMihBbmRBYm92ZSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgXSk7XHJcblxyXG4gICAgcmV0dXJuIHsgZnJvbSB9O1xyXG4gIH0pO1xyXG5cclxuICBwcml2YXRlIGZyb21BbmRBYm92ZVdpdGhUeXBlID0gdGhpcy5SVUxFKFwiZnJvbUFuZEFib3ZlV2l0aFR5cGVcIiwgKCkgPT4ge1xyXG4gICAgbGV0IHR5cGUgPSBTZXJpZXNUeXBlLkFsbDtcclxuICAgIHRoaXMuQ09OU1VNRShGcm9tKTtcclxuICAgIHRoaXMuT1BUSU9OKCgpID0+IHtcclxuICAgICAgdGhpcy5PUihbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgQUxUOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHR5cGUgPSBTZXJpZXNUeXBlLkFsbDtcclxuICAgICAgICAgICAgdGhpcy5DT05TVU1FKEFsbFR5cGUpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIEFMVDogKCkgPT4ge1xyXG4gICAgICAgICAgICB0eXBlID0gU2VyaWVzVHlwZS5EZXNjcmlwdGlvbjtcclxuICAgICAgICAgICAgdGhpcy5DT05TVU1FKERlc2NyaXB0aXZlVHlwZSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0sXHJcbiAgICAgIF0pO1xyXG4gICAgfSk7XHJcbiAgICBjb25zdCBmcm9tID0gcGFyc2VSaWNoTnVtYmVyKHRoaXMuQ09OU1VNRShOdW1iZXIpLmltYWdlKTtcclxuICAgIHRoaXMuT1BUSU9OMigoKSA9PiB7XHJcbiAgICAgIHRoaXMuQ09OU1VNRShBbmRBYm92ZSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB7IHR5cGUsIHJhbmdlczogW3sgZnJvbSB9XSB9O1xyXG4gIH0pO1xyXG5cclxuICBwcml2YXRlIHRvT3JCZWxvdyA9IHRoaXMuUlVMRShcInRvT3JCZWxvd1wiLCAoKSA9PiB7XHJcbiAgICBsZXQgdG86IFJpY2hOdW1iZXI7XHJcbiAgICB0aGlzLk9SKFtcclxuICAgICAge1xyXG4gICAgICAgIEFMVDogKCkgPT4ge1xyXG4gICAgICAgICAgdG8gPSBwYXJzZVJpY2hOdW1iZXIodGhpcy5DT05TVU1FKE51bWJlcikuaW1hZ2UpO1xyXG4gICAgICAgICAgdGhpcy5DT05TVU1FKEFuZEJlbG93KTtcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgQUxUOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLkNPTlNVTUUyKFRvKTtcclxuICAgICAgICAgIHRvID0gcGFyc2VSaWNoTnVtYmVyKHRoaXMuQ09OU1VNRTIoTnVtYmVyKS5pbWFnZSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSxcclxuICAgIF0pO1xyXG5cclxuICAgIHJldHVybiB7IHRvIH07XHJcbiAgfSk7XHJcblxyXG4gIHByaXZhdGUgdG9PckJlbG93V2l0aFR5cGUgPSB0aGlzLlJVTEUoXCJ0b09yQmVsb3dXaXRoVHlwZVwiLCAoKSA9PiB7XHJcbiAgICBsZXQgdHlwZSA9IFNlcmllc1R5cGUuQWxsO1xyXG4gICAgdGhpcy5DT05TVU1FKFRvKTtcclxuICAgIHRoaXMuT1BUSU9OKCgpID0+IHtcclxuICAgICAgdGhpcy5PUihbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgQUxUOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHR5cGUgPSBTZXJpZXNUeXBlLkFsbDtcclxuICAgICAgICAgICAgdGhpcy5DT05TVU1FKEFsbFR5cGUpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIEFMVDogKCkgPT4ge1xyXG4gICAgICAgICAgICB0eXBlID0gU2VyaWVzVHlwZS5EZXNjcmlwdGlvbjtcclxuICAgICAgICAgICAgdGhpcy5DT05TVU1FKERlc2NyaXB0aXZlVHlwZSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0sXHJcbiAgICAgIF0pO1xyXG4gICAgfSk7XHJcbiAgICBjb25zdCB0byA9IHBhcnNlUmljaE51bWJlcih0aGlzLkNPTlNVTUUoTnVtYmVyKS5pbWFnZSk7XHJcbiAgICByZXR1cm4geyB0eXBlLCByYW5nZXM6IFt7IHRvIH1dIH07XHJcbiAgfSk7XHJcblxyXG4gIHByaXZhdGUgZnVsbFN0cmVldE51bWJlciA9IHRoaXMuUlVMRShcclxuICAgIFwiZnVsbFN0cmVldE51bWJlclwiLFxyXG4gICAgKCk6IEZ1bGxTdHJlZXROdW1iZXIgPT4ge1xyXG4gICAgICBjb25zdCBkZXNjcmlwdGl2ZU51bWJlciA9IHBhcnNlUmljaE51bWJlcih0aGlzLkNPTlNVTUUoTnVtYmVyKS5pbWFnZSk7XHJcbiAgICAgIHRoaXMuQ09OU1VNRShTbGFzaCk7XHJcbiAgICAgIGNvbnN0IG9yaWVudGF0aW9uTnVtYmVyID0gcGFyc2VSaWNoTnVtYmVyKHRoaXMuQ09OU1VNRTIoTnVtYmVyKS5pbWFnZSk7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgZGVzY3JpcHRpb25OdW1iZXI6IGRlc2NyaXB0aXZlTnVtYmVyLFxyXG4gICAgICAgIG9yaWVudGF0aW9uYWxOdW1iZXI6IG9yaWVudGF0aW9uTnVtYmVyLFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICk7XHJcbn1cclxuXHJcbmNvbnN0IG51bWJlcldpdGhDaGFyYWN0ZXJQYXR0ZXJuID0gL14oXFxkKykoW2Etel0pJC87XHJcblxyXG5leHBvcnQgY29uc3QgcGFyc2VSaWNoTnVtYmVyID0gKG51bWJlcjogc3RyaW5nKTogUmljaE51bWJlciA9PiB7XHJcbiAgaWYgKG51bWJlcldpdGhDaGFyYWN0ZXJQYXR0ZXJuLnRlc3QobnVtYmVyKSkge1xyXG4gICAgY29uc3QgbWF0Y2ggPSBudW1iZXJXaXRoQ2hhcmFjdGVyUGF0dGVybi5leGVjKG51bWJlcik7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBudW1iZXI6IHBhcnNlSW50KG1hdGNoWzFdKSxcclxuICAgICAgbGV0dGVyOiBtYXRjaFsyXSxcclxuICAgIH07XHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIG51bWJlcjogcGFyc2VJbnQobnVtYmVyKSxcclxuICAgIH07XHJcbiAgfVxyXG59O1xyXG5cclxuY29uc3QgbXVuaWNpcGFsaXR5UGFydFBhdHRlcm4gPSAvXsSNw6FzdCAoPzx0eXBlPm9iY2V8bcSbc3RhKSAoPzxuYW1lPi4rKSQvO1xyXG5cclxuZXhwb3J0IGNvbnN0IHBhcnNlTXVuaWNpcGFsaXR5UGFydE5hbWUgPSAobmFtZTogc3RyaW5nKTogc3RyaW5nID0+IHtcclxuICBjb25zdCBtYXRjaCA9IG11bmljaXBhbGl0eVBhcnRQYXR0ZXJuLmV4ZWMobmFtZSk7XHJcbiAgcmV0dXJuIG1hdGNoPy5ncm91cHMubmFtZT8udHJpbSgpID8/IFwiXCI7XHJcbn07XHJcbiJdfQ==
@@ -12,6 +12,12 @@ export declare const parseOrdinanceToAddressPoints: ({ lines, initialState, onEr
12
12
  export declare const convertMunicipality: (municipality: IntermediateMunicipality) => Municipality;
13
13
  export declare const getNewMunicipalityByName: (name: string) => Promise<IntermediateMunicipalityResult>;
14
14
  export declare const getNewMunicipalityByFounderId: (founderId: number) => Promise<IntermediateMunicipalityResult>;
15
- export declare const getNewSchool: (name: string, founder: Founder | null, lineNumber: number, onError: (params: ErrorCallbackParams) => void) => Promise<IntermediateSchool>;
15
+ export declare const getNewSchool: ({ name, founder, lineNumber, required, onError, }: {
16
+ name: string;
17
+ founder: Founder | null;
18
+ lineNumber: number;
19
+ required: boolean;
20
+ onError: (params: ErrorCallbackParams) => void;
21
+ }) => Promise<IntermediateSchool | null>;
16
22
  export declare const wholeLineError: (message: string, line: string) => SmdError;
17
23
  export {};