text-to-map 1.1.27 → 1.1.29

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 (56) 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 +1 -0
  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 +1 -0
  7. package/dist/bin/knex.js +1 -0
  8. package/dist/bin/parse-ordinance.js +17 -17
  9. package/dist/bin/polygons.js +4 -2
  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 +1 -1
  15. package/dist/db/cities.d.ts +5 -3
  16. package/dist/db/cities.js +43 -6
  17. package/dist/db/db.js +1 -0
  18. package/dist/db/founders.js +4 -3
  19. package/dist/db/meta.js +1 -0
  20. package/dist/db/migrations/20230704125715_initial.js +1 -0
  21. package/dist/db/migrations/20230731232915_city_positions.js +1 -0
  22. package/dist/db/migrations/20240106224603_city_polygon.js +1 -0
  23. package/dist/db/migrations/20240320200534_district_polygon.js +24 -0
  24. package/dist/db/regions.js +1 -0
  25. package/dist/db/schools.js +1 -0
  26. package/dist/db/street-sync.js +1 -0
  27. package/dist/db/sync-log.js +1 -0
  28. package/dist/db/types.d.ts +3 -1
  29. package/dist/db/types.js +2 -1
  30. package/dist/index.d.ts +2 -2
  31. package/dist/index.js +3 -2
  32. package/dist/open-data-sync/address-points.js +1 -0
  33. package/dist/open-data-sync/cities.js +1 -0
  34. package/dist/open-data-sync/common.js +1 -0
  35. package/dist/open-data-sync/regions.js +1 -0
  36. package/dist/open-data-sync/schools.js +1 -0
  37. package/dist/open-data-sync/streets.js +18 -11
  38. package/dist/smd-to-csv/json-to-csv.js +1 -0
  39. package/dist/smd-to-csv/ordinance-to-csv-rules.js +1 -0
  40. package/dist/smd-to-csv/txt-to-json.js +1 -0
  41. package/dist/street-markdown/municipality.js +1 -0
  42. package/dist/street-markdown/polygons.d.ts +7 -4
  43. package/dist/street-markdown/polygons.js +117 -28
  44. package/dist/street-markdown/roman-numerals.js +1 -0
  45. package/dist/street-markdown/smd-line-parser.js +1 -0
  46. package/dist/street-markdown/smd-parser.js +1 -0
  47. package/dist/street-markdown/smd.d.ts +1 -1
  48. package/dist/street-markdown/smd.js +47 -21
  49. package/dist/street-markdown/token-definition.js +1 -0
  50. package/dist/street-markdown/types.d.ts +5 -0
  51. package/dist/street-markdown/types.js +3 -2
  52. package/dist/utils/atom.js +1 -0
  53. package/dist/utils/helpers.d.ts +2 -0
  54. package/dist/utils/helpers.js +3 -0
  55. package/dist/utils/jtsk2wgs84.js +1 -0
  56. package/package.json +14 -14
@@ -13,3 +13,4 @@ downloadAndImportAddressPoints(defaultBinOptions)
13
13
  console.log(error);
14
14
  }
15
15
  });
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzcy1wb2ludHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYmluL2FkZHJlc3MtcG9pbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVoRCxPQUFPLENBQUMsSUFBSSxDQUFDLHlDQUF5QyxDQUFDLENBQUM7QUFDeEQsOEJBQThCLENBQUMsaUJBQWlCLENBQUM7S0FDOUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtJQUNULE9BQU8sQ0FBQyxPQUFPLENBQUMseUNBQXlDLENBQUMsQ0FBQztBQUM3RCxDQUFDLENBQUM7S0FDRCxLQUFLLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRTtJQUNwQixJQUFJLEtBQUssQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDakMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQ2pDO1NBQU07UUFDTCxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQ3BCO0FBQ0gsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkb3dubG9hZEFuZEltcG9ydEFkZHJlc3NQb2ludHMgfSBmcm9tIFwiLi4vb3Blbi1kYXRhLXN5bmMvYWRkcmVzcy1wb2ludHNcIjtcclxuaW1wb3J0IHsgZGVmYXVsdEJpbk9wdGlvbnMgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcclxuXHJcbmNvbnNvbGUudGltZShcImRvd25sb2FkQW5kSW1wb3J0QWxsTGF0ZXN0QWRkcmVzc1BvaW50c1wiKTtcclxuZG93bmxvYWRBbmRJbXBvcnRBZGRyZXNzUG9pbnRzKGRlZmF1bHRCaW5PcHRpb25zKVxyXG4gIC50aGVuKCgpID0+IHtcclxuICAgIGNvbnNvbGUudGltZUVuZChcImRvd25sb2FkQW5kSW1wb3J0QWxsTGF0ZXN0QWRkcmVzc1BvaW50c1wiKTtcclxuICB9KVxyXG4gIC5jYXRjaCgoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgaWYgKGVycm9yLmhhc093blByb3BlcnR5KFwic3RhY2tcIikpIHtcclxuICAgICAgY29uc29sZS5sb2coZXJyb3IsIGVycm9yLnN0YWNrKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgIH1cclxuICB9KTtcclxuIl19
@@ -7,3 +7,4 @@ importCities(defaultBinOptions)
7
7
  .catch((error) => {
8
8
  console.log(error);
9
9
  });
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2l0aWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Jpbi9jaXRpZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVoRCxZQUFZLENBQUMsaUJBQWlCLENBQUM7S0FDNUIsSUFBSSxDQUFDLEdBQUcsRUFBRTtJQUNULE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDM0IsQ0FBQyxDQUFDO0tBQ0QsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7SUFDZixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3JCLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW1wb3J0Q2l0aWVzIH0gZnJvbSBcIi4uL29wZW4tZGF0YS1zeW5jL2NpdGllc1wiO1xyXG5pbXBvcnQgeyBkZWZhdWx0QmluT3B0aW9ucyB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xyXG5cclxuaW1wb3J0Q2l0aWVzKGRlZmF1bHRCaW5PcHRpb25zKVxyXG4gIC50aGVuKCgpID0+IHtcclxuICAgIGNvbnNvbGUubG9nKFwiQ29tcGxldGVkXCIpO1xyXG4gIH0pXHJcbiAgLmNhdGNoKChlcnJvcikgPT4ge1xyXG4gICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gIH0pO1xyXG4iXX0=
@@ -21,3 +21,4 @@ function main() {
21
21
  });
22
22
  }
23
23
  main();
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xlYXItYWxsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Jpbi9jbGVhci1hbGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDbkQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDakUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRWhELFNBQWUsSUFBSTs7UUFDakIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ3BDLE1BQU0sT0FBTyxFQUFFLENBQUM7UUFDaEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO1FBQzVELG9CQUFvQixDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDeEMsTUFBTSxjQUFjLEVBQUUsQ0FBQztRQUN2QixPQUFPLENBQUMsR0FBRyxDQUFDLDJDQUEyQyxDQUFDLENBQUM7SUFDM0QsQ0FBQztDQUFBO0FBRUQsSUFBSSxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjbGVhckRiLCBkaXNjb25uZWN0S25leCB9IGZyb20gXCIuLi9kYi9kYlwiO1xyXG5pbXBvcnQgeyBkZWxldGVTY2hvb2xzWG1sRmlsZSB9IGZyb20gXCIuLi9vcGVuLWRhdGEtc3luYy9zY2hvb2xzXCI7XHJcbmltcG9ydCB7IGRlZmF1bHRCaW5PcHRpb25zIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XHJcblxyXG5hc3luYyBmdW5jdGlvbiBtYWluKCkge1xyXG4gIGNvbnNvbGUubG9nKFwiQ2xlYXJpbmcgYWxsIGRhdGEuLi5cIik7XHJcbiAgYXdhaXQgY2xlYXJEYigpO1xyXG4gIGNvbnNvbGUubG9nKFwiREIgY2xlYXJlZC4gTm93IGRlbGV0aW5nIHNjaG9vbHMgWE1MIGZpbGUuLi5cIik7XHJcbiAgZGVsZXRlU2Nob29sc1htbEZpbGUoZGVmYXVsdEJpbk9wdGlvbnMpO1xyXG4gIGF3YWl0IGRpc2Nvbm5lY3RLbmV4KCk7XHJcbiAgY29uc29sZS5sb2coXCJFdmVyeXRoaW5nIGNsZWFyZWQsIHJlYWR5IGZvciBhIG5ldyBzeW5jLlwiKTtcclxufVxyXG5cclxubWFpbigpO1xyXG4iXX0=
@@ -1,3 +1,4 @@
1
1
  export const defaultBinOptions = {
2
2
  dataDir: "./tmp/db",
3
3
  };
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Jpbi9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQStCO0lBQzNELE9BQU8sRUFBRSxVQUFVO0NBQ3BCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPcGVuRGF0YVN5bmNPcHRpb25zUGFydGlhbCB9IGZyb20gXCIuLi91dGlscy9oZWxwZXJzXCI7XHJcblxyXG5leHBvcnQgY29uc3QgZGVmYXVsdEJpbk9wdGlvbnM6IE9wZW5EYXRhU3luY09wdGlvbnNQYXJ0aWFsID0ge1xyXG4gIGRhdGFEaXI6IFwiLi90bXAvZGJcIixcclxufTsiXX0=
@@ -17,3 +17,4 @@ ${createSyntaxDiagramsCode(serializedGrammar)}
17
17
  </html>`;
18
18
  // Write the HTML file to disk
19
19
  writeFileSync("generated_diagrams.html", htmlText);
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGUtc3ludGF4LWRpYWdyYW1zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Jpbi9nZW5lcmF0ZS1zeW50YXgtZGlhZ3JhbXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLElBQUksQ0FBQztBQUNuQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDdEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRS9ELGtDQUFrQztBQUNsQyxNQUFNLGlCQUFpQixHQUFHLFNBQVMsQ0FBQyw0QkFBNEIsRUFBRSxDQUFDO0FBRW5FLHVCQUF1QjtBQUN2QixNQUFNLFFBQVEsR0FBRzs7Ozs7Ozs7RUFRZix3QkFBd0IsQ0FBQyxpQkFBaUIsQ0FBQzs7UUFFckMsQ0FBQztBQUVULDhCQUE4QjtBQUM5QixhQUFhLENBQUMseUJBQXlCLEVBQUUsUUFBUSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB3cml0ZUZpbGVTeW5jIH0gZnJvbSBcImZzXCI7XHJcbmltcG9ydCB7IGNyZWF0ZVN5bnRheERpYWdyYW1zQ29kZSB9IGZyb20gXCJjaGV2cm90YWluXCI7XHJcbmltcG9ydCB7IHNtZFBhcnNlciB9IGZyb20gXCIuLi9zdHJlZXQtbWFya2Rvd24vc21kLWxpbmUtcGFyc2VyXCI7XHJcblxyXG4vLyBleHRyYWN0IHRoZSBzZXJpYWxpemVkIGdyYW1tYXIuXHJcbmNvbnN0IHNlcmlhbGl6ZWRHcmFtbWFyID0gc21kUGFyc2VyLmdldFNlcmlhbGl6ZWRHYXN0UHJvZHVjdGlvbnMoKTtcclxuXHJcbi8vIGNyZWF0ZSB0aGUgSFRNTCBUZXh0XHJcbmNvbnN0IGh0bWxUZXh0ID0gYFxyXG48IURPQ1RZUEUgaHRtbD5cclxuPGh0bWwgbGFuZz1cImVuXCI+XHJcbjxoZWFkPlxyXG4gICAgPG1ldGEgY2hhcnNldD1cIlVURi04XCI+XHJcbiAgICA8dGl0bGU+U01EIHN0cmVldCBsaW5lIFN5bnRheCBEaWFncmFtczwvdGl0bGU+XHJcbjwvaGVhZD5cclxuPGJvZHk+XHJcbiR7Y3JlYXRlU3ludGF4RGlhZ3JhbXNDb2RlKHNlcmlhbGl6ZWRHcmFtbWFyKX1cclxuPC9ib2R5PlxyXG48L2h0bWw+YDtcclxuXHJcbi8vIFdyaXRlIHRoZSBIVE1MIGZpbGUgdG8gZGlza1xyXG53cml0ZUZpbGVTeW5jKFwiZ2VuZXJhdGVkX2RpYWdyYW1zLmh0bWxcIiwgaHRtbFRleHQpO1xyXG4iXX0=
@@ -16,3 +16,4 @@ function main() {
16
16
  });
17
17
  }
18
18
  main();
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdC1kYi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iaW4vaW5pdC1kYi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUVsRCxTQUFlLElBQUk7O1FBQ2pCLE1BQU0sTUFBTSxFQUFFLENBQUM7UUFDZixPQUFPLENBQUMsR0FBRyxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFDdEMsTUFBTSxjQUFjLEVBQUUsQ0FBQztJQUN6QixDQUFDO0NBQUE7QUFFRCxJQUFJLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRpc2Nvbm5lY3RLbmV4LCBpbml0RGIgfSBmcm9tIFwiLi4vZGIvZGJcIjtcclxuXHJcbmFzeW5jIGZ1bmN0aW9uIG1haW4oKSB7XHJcbiAgYXdhaXQgaW5pdERiKCk7XHJcbiAgY29uc29sZS5sb2coXCJEYXRhYmFzZSByZWFkeSB0byB1c2UuXCIpO1xyXG4gIGF3YWl0IGRpc2Nvbm5lY3RLbmV4KCk7XHJcbn1cclxuXHJcbm1haW4oKTtcclxuIl19
package/dist/bin/knex.js CHANGED
@@ -18,3 +18,4 @@ function main() {
18
18
  });
19
19
  }
20
20
  main();
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia25leC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iaW4va25leC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUVyRCxTQUFlLElBQUk7O1FBQ2pCLE1BQU0sSUFBSSxHQUFHLFNBQVMsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUN2RCxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUM7UUFDN0MsQ0FBQyxDQUFDLENBQUM7UUFDSCxNQUFNLGNBQWMsRUFBRSxDQUFDO0lBQ3pCLENBQUM7Q0FBQTtBQUVELElBQUksRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGlzY29ubmVjdEtuZXgsIGdldEtuZXhEYiB9IGZyb20gXCIuLi9kYi9kYlwiO1xyXG5cclxuYXN5bmMgZnVuY3Rpb24gbWFpbigpIHtcclxuICBjb25zdCBrbmV4ID0gZ2V0S25leERiKCk7XHJcbiAgYXdhaXQga25leC5zY2hlbWEuYWx0ZXJUYWJsZShcInNjaG9vbF9mb3VuZGVyXCIsICh0YWJsZSkgPT4ge1xyXG4gICAgdGFibGUudW5pcXVlKFtcInNjaG9vbF9pem9cIiwgXCJmb3VuZGVyX2lkXCJdKTtcclxuICB9KTtcclxuICBhd2FpdCBkaXNjb25uZWN0S25leCgpO1xyXG59XHJcblxyXG5tYWluKCk7XHJcbiJdfQ==
@@ -8,8 +8,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  });
9
9
  };
10
10
  import { readFileSync, writeFileSync } from "fs";
11
- import { parseOrdinanceToAddressPoints, } from "../street-markdown/smd";
12
- import { municipalityToPolygons } from "../street-markdown/polygons";
11
+ import { parseOrdinanceToAddressPoints } from "../street-markdown/smd";
12
+ import { municipalitiesToPolygons } from "../street-markdown/polygons";
13
13
  import { disconnectKnex } from "../db/db";
14
14
  function main() {
15
15
  return __awaiter(this, void 0, void 0, function* () {
@@ -25,7 +25,7 @@ function main() {
25
25
  const errorLines = [];
26
26
  let warningCount = 0;
27
27
  const reportErrors = ({ lineNumber, line, errors, }) => {
28
- errors.forEach((error) => console.error(error));
28
+ errors.forEach((error) => console.error(error.message));
29
29
  console.error(`Invalid street definition on line ${lineNumber}: ${line}`);
30
30
  errorCount++;
31
31
  errorLines.push(`line ${lineNumber}: ${line}`);
@@ -36,9 +36,9 @@ function main() {
36
36
  });
37
37
  warningCount++;
38
38
  };
39
- console.time("downloadAndImportAllLatestAddressPoints");
39
+ console.time("parseOrdinanceToAddressPoints");
40
40
  // const { municipality } = await getNewMunicipalityByName("Česká Lípa");
41
- const addressPoints = yield parseOrdinanceToAddressPoints({
41
+ const municipalities = yield parseOrdinanceToAddressPoints({
42
42
  lines,
43
43
  initialState: {
44
44
  // currentMunicipality: municipality,
@@ -47,32 +47,32 @@ function main() {
47
47
  onWarning: reportWarnings,
48
48
  includeUnmappedAddressPoints: true,
49
49
  });
50
- console.timeEnd("downloadAndImportAllLatestAddressPoints");
51
- const polygons = [];
52
- for (const municipality of addressPoints) {
53
- polygons.push(yield municipalityToPolygons(municipality));
54
- }
55
- yield disconnectKnex();
50
+ console.timeEnd("parseOrdinanceToAddressPoints");
56
51
  console.log(`Parsed ${lines.length} lines, ${errorCount} errors, ${warningCount} warnings.`);
57
- if (errorCount > 0) {
58
- console.log("Errors:");
59
- errorLines.forEach((line) => console.log(line));
60
- }
52
+ // if (errorCount > 0) {
53
+ // console.log("Errors:");
54
+ // errorLines.forEach((line) => console.log(line));
55
+ // }
61
56
  if (process.argv.length >= 4) {
62
57
  const outputFileName = process.argv[3];
63
- const output = JSON.stringify(addressPoints);
58
+ const output = JSON.stringify(municipalities);
64
59
  console.log(`Writing output to ${outputFileName}`);
65
60
  writeFileSync(outputFileName, output);
66
61
  }
67
62
  else {
68
- console.log(JSON.stringify(addressPoints));
63
+ console.log(JSON.stringify(municipalities));
69
64
  }
70
65
  if (process.argv.length >= 5) {
66
+ console.time("municipalityToPolygons");
67
+ const polygons = yield municipalitiesToPolygons(municipalities);
68
+ console.timeEnd("municipalityToPolygons");
71
69
  const outputFileName = process.argv[4];
72
70
  const output = JSON.stringify(polygons);
73
71
  console.log(`Writing polygons to ${outputFileName}`);
74
72
  writeFileSync(outputFileName, output);
75
73
  }
74
+ yield disconnectKnex();
76
75
  });
77
76
  }
78
77
  main();
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2Utb3JkaW5hbmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Jpbi9wYXJzZS1vcmRpbmFuY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDakQsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFdkUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDdkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUUxQyxTQUFlLElBQUk7O1FBQ2pCLDBDQUEwQztRQUMxQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMzQixPQUFPLENBQUMsS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUM7WUFDNUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNqQjtRQUVELE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakMsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNDLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFakQsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLE1BQU0sVUFBVSxHQUFhLEVBQUUsQ0FBQztRQUNoQyxJQUFJLFlBQVksR0FBRyxDQUFDLENBQUM7UUFFckIsTUFBTSxZQUFZLEdBQUcsQ0FBQyxFQUNwQixVQUFVLEVBQ1YsSUFBSSxFQUNKLE1BQU0sR0FDYyxFQUFRLEVBQUU7WUFDOUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUN4RCxPQUFPLENBQUMsS0FBSyxDQUFDLHFDQUFxQyxVQUFVLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQztZQUMxRSxVQUFVLEVBQUUsQ0FBQztZQUNiLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxVQUFVLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNqRCxDQUFDLENBQUM7UUFFRixNQUFNLGNBQWMsR0FBRyxDQUFDLEVBQ3RCLFVBQVUsRUFDVixNQUFNLEVBQUUsUUFBUSxHQUNJLEVBQVEsRUFBRTtZQUM5QixRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ3pCLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxVQUFVLEtBQUssS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDeEQsQ0FBQyxDQUFDLENBQUM7WUFDSCxZQUFZLEVBQUUsQ0FBQztRQUNqQixDQUFDLENBQUM7UUFFRixPQUFPLENBQUMsSUFBSSxDQUFDLCtCQUErQixDQUFDLENBQUM7UUFFOUMseUVBQXlFO1FBRXpFLE1BQU0sY0FBYyxHQUFHLE1BQU0sNkJBQTZCLENBQUM7WUFDekQsS0FBSztZQUNMLFlBQVksRUFBRTtZQUNaLHFDQUFxQzthQUN0QztZQUNELE9BQU8sRUFBRSxZQUFZO1lBQ3JCLFNBQVMsRUFBRSxjQUFjO1lBQ3pCLDRCQUE0QixFQUFFLElBQUk7U0FDbkMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxDQUFDLE9BQU8sQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1FBRWpELE9BQU8sQ0FBQyxHQUFHLENBQ1QsVUFBVSxLQUFLLENBQUMsTUFBTSxXQUFXLFVBQVUsWUFBWSxZQUFZLFlBQVksQ0FDaEYsQ0FBQztRQUNGLHdCQUF3QjtRQUN4Qiw0QkFBNEI7UUFDNUIscURBQXFEO1FBQ3JELElBQUk7UUFFSixJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtZQUM1QixNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDOUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsY0FBYyxFQUFFLENBQUMsQ0FBQztZQUNuRCxhQUFhLENBQUMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQ3ZDO2FBQU07WUFDTCxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztTQUM3QztRQUVELElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO1lBQzVCLE9BQU8sQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQztZQUN2QyxNQUFNLFFBQVEsR0FBRyxNQUFNLHdCQUF3QixDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ2hFLE9BQU8sQ0FBQyxPQUFPLENBQUMsd0JBQXdCLENBQUMsQ0FBQztZQUUxQyxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDeEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsY0FBYyxFQUFFLENBQUMsQ0FBQztZQUNyRCxhQUFhLENBQUMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQ3ZDO1FBQ0QsTUFBTSxjQUFjLEVBQUUsQ0FBQztJQUN6QixDQUFDO0NBQUE7QUFFRCxJQUFJLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlYWRGaWxlU3luYywgd3JpdGVGaWxlU3luYyB9IGZyb20gXCJmc1wiO1xyXG5pbXBvcnQgeyBwYXJzZU9yZGluYW5jZVRvQWRkcmVzc1BvaW50cyB9IGZyb20gXCIuLi9zdHJlZXQtbWFya2Rvd24vc21kXCI7XHJcbmltcG9ydCB7IEVycm9yQ2FsbGJhY2tQYXJhbXMgfSBmcm9tIFwiLi4vc3RyZWV0LW1hcmtkb3duL3R5cGVzXCI7XHJcbmltcG9ydCB7IG11bmljaXBhbGl0aWVzVG9Qb2x5Z29ucyB9IGZyb20gXCIuLi9zdHJlZXQtbWFya2Rvd24vcG9seWdvbnNcIjtcclxuaW1wb3J0IHsgZGlzY29ubmVjdEtuZXggfSBmcm9tIFwiLi4vZGIvZGJcIjtcclxuXHJcbmFzeW5jIGZ1bmN0aW9uIG1haW4oKSB7XHJcbiAgLy8gdGFrZSBmaXJzdCBub2RlIGFyZ3VtZW50IGFzIGEgZmlsZSBuYW1lXHJcbiAgaWYgKHByb2Nlc3MuYXJndi5sZW5ndGggPCAzKSB7XHJcbiAgICBjb25zb2xlLmVycm9yKFwiTWlzc2luZyBmaWxlIG5hbWUgYXJndW1lbnRcIik7XHJcbiAgICBwcm9jZXNzLmV4aXQoMSk7XHJcbiAgfVxyXG5cclxuICBjb25zdCBmaWxlTmFtZSA9IHByb2Nlc3MuYXJndlsyXTtcclxuICBjb25zdCBmaWxlQ29udGVudCA9IHJlYWRGaWxlU3luYyhmaWxlTmFtZSk7XHJcbiAgY29uc3QgbGluZXMgPSBmaWxlQ29udGVudC50b1N0cmluZygpLnNwbGl0KFwiXFxuXCIpO1xyXG5cclxuICBsZXQgZXJyb3JDb3VudCA9IDA7XHJcbiAgY29uc3QgZXJyb3JMaW5lczogc3RyaW5nW10gPSBbXTtcclxuICBsZXQgd2FybmluZ0NvdW50ID0gMDtcclxuXHJcbiAgY29uc3QgcmVwb3J0RXJyb3JzID0gKHtcclxuICAgIGxpbmVOdW1iZXIsXHJcbiAgICBsaW5lLFxyXG4gICAgZXJyb3JzLFxyXG4gIH06IEVycm9yQ2FsbGJhY2tQYXJhbXMpOiB2b2lkID0+IHtcclxuICAgIGVycm9ycy5mb3JFYWNoKChlcnJvcikgPT4gY29uc29sZS5lcnJvcihlcnJvci5tZXNzYWdlKSk7XHJcbiAgICBjb25zb2xlLmVycm9yKGBJbnZhbGlkIHN0cmVldCBkZWZpbml0aW9uIG9uIGxpbmUgJHtsaW5lTnVtYmVyfTogJHtsaW5lfWApO1xyXG4gICAgZXJyb3JDb3VudCsrO1xyXG4gICAgZXJyb3JMaW5lcy5wdXNoKGBsaW5lICR7bGluZU51bWJlcn06ICR7bGluZX1gKTtcclxuICB9O1xyXG5cclxuICBjb25zdCByZXBvcnRXYXJuaW5ncyA9ICh7XHJcbiAgICBsaW5lTnVtYmVyLFxyXG4gICAgZXJyb3JzOiB3YXJuaW5ncyxcclxuICB9OiBFcnJvckNhbGxiYWNrUGFyYW1zKTogdm9pZCA9PiB7XHJcbiAgICB3YXJuaW5ncy5mb3JFYWNoKChlcnJvcikgPT4ge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGBMaW5lICR7bGluZU51bWJlcn06ICR7ZXJyb3IubWVzc2FnZX1gKTtcclxuICAgIH0pO1xyXG4gICAgd2FybmluZ0NvdW50Kys7XHJcbiAgfTtcclxuXHJcbiAgY29uc29sZS50aW1lKFwicGFyc2VPcmRpbmFuY2VUb0FkZHJlc3NQb2ludHNcIik7XHJcblxyXG4gIC8vIGNvbnN0IHsgbXVuaWNpcGFsaXR5IH0gPSBhd2FpdCBnZXROZXdNdW5pY2lwYWxpdHlCeU5hbWUoXCLEjGVza8OhIEzDrXBhXCIpO1xyXG5cclxuICBjb25zdCBtdW5pY2lwYWxpdGllcyA9IGF3YWl0IHBhcnNlT3JkaW5hbmNlVG9BZGRyZXNzUG9pbnRzKHtcclxuICAgIGxpbmVzLFxyXG4gICAgaW5pdGlhbFN0YXRlOiB7XHJcbiAgICAgIC8vIGN1cnJlbnRNdW5pY2lwYWxpdHk6IG11bmljaXBhbGl0eSxcclxuICAgIH0sXHJcbiAgICBvbkVycm9yOiByZXBvcnRFcnJvcnMsXHJcbiAgICBvbldhcm5pbmc6IHJlcG9ydFdhcm5pbmdzLFxyXG4gICAgaW5jbHVkZVVubWFwcGVkQWRkcmVzc1BvaW50czogdHJ1ZSxcclxuICB9KTtcclxuICBjb25zb2xlLnRpbWVFbmQoXCJwYXJzZU9yZGluYW5jZVRvQWRkcmVzc1BvaW50c1wiKTtcclxuXHJcbiAgY29uc29sZS5sb2coXHJcbiAgICBgUGFyc2VkICR7bGluZXMubGVuZ3RofSBsaW5lcywgJHtlcnJvckNvdW50fSBlcnJvcnMsICR7d2FybmluZ0NvdW50fSB3YXJuaW5ncy5gXHJcbiAgKTtcclxuICAvLyBpZiAoZXJyb3JDb3VudCA+IDApIHtcclxuICAvLyAgIGNvbnNvbGUubG9nKFwiRXJyb3JzOlwiKTtcclxuICAvLyAgIGVycm9yTGluZXMuZm9yRWFjaCgobGluZSkgPT4gY29uc29sZS5sb2cobGluZSkpO1xyXG4gIC8vIH1cclxuXHJcbiAgaWYgKHByb2Nlc3MuYXJndi5sZW5ndGggPj0gNCkge1xyXG4gICAgY29uc3Qgb3V0cHV0RmlsZU5hbWUgPSBwcm9jZXNzLmFyZ3ZbM107XHJcbiAgICBjb25zdCBvdXRwdXQgPSBKU09OLnN0cmluZ2lmeShtdW5pY2lwYWxpdGllcyk7XHJcbiAgICBjb25zb2xlLmxvZyhgV3JpdGluZyBvdXRwdXQgdG8gJHtvdXRwdXRGaWxlTmFtZX1gKTtcclxuICAgIHdyaXRlRmlsZVN5bmMob3V0cHV0RmlsZU5hbWUsIG91dHB1dCk7XHJcbiAgfSBlbHNlIHtcclxuICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KG11bmljaXBhbGl0aWVzKSk7XHJcbiAgfVxyXG5cclxuICBpZiAocHJvY2Vzcy5hcmd2Lmxlbmd0aCA+PSA1KSB7XHJcbiAgICBjb25zb2xlLnRpbWUoXCJtdW5pY2lwYWxpdHlUb1BvbHlnb25zXCIpO1xyXG4gICAgY29uc3QgcG9seWdvbnMgPSBhd2FpdCBtdW5pY2lwYWxpdGllc1RvUG9seWdvbnMobXVuaWNpcGFsaXRpZXMpO1xyXG4gICAgY29uc29sZS50aW1lRW5kKFwibXVuaWNpcGFsaXR5VG9Qb2x5Z29uc1wiKTtcclxuXHJcbiAgICBjb25zdCBvdXRwdXRGaWxlTmFtZSA9IHByb2Nlc3MuYXJndls0XTtcclxuICAgIGNvbnN0IG91dHB1dCA9IEpTT04uc3RyaW5naWZ5KHBvbHlnb25zKTtcclxuICAgIGNvbnNvbGUubG9nKGBXcml0aW5nIHBvbHlnb25zIHRvICR7b3V0cHV0RmlsZU5hbWV9YCk7XHJcbiAgICB3cml0ZUZpbGVTeW5jKG91dHB1dEZpbGVOYW1lLCBvdXRwdXQpO1xyXG4gIH1cclxuICBhd2FpdCBkaXNjb25uZWN0S25leCgpO1xyXG59XHJcblxyXG5tYWluKCk7XHJcbiJdfQ==
@@ -8,7 +8,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  });
9
9
  };
10
10
  import { readFileSync, writeFileSync } from "fs";
11
- import { municipalityToPolygons } from "../street-markdown/polygons";
11
+ import { municipalitiesToPolygons } from "../street-markdown/polygons";
12
12
  import { disconnectKnex } from "../db/db";
13
13
  function main() {
14
14
  return __awaiter(this, void 0, void 0, function* () {
@@ -20,7 +20,8 @@ function main() {
20
20
  const fileName = process.argv[2];
21
21
  const fileContent = readFileSync(fileName);
22
22
  const json = JSON.parse(fileContent.toString());
23
- const municipalityPolygons = yield municipalityToPolygons(json[0]);
23
+ const municipalityPolygons = yield municipalitiesToPolygons(json);
24
+ console.log(`Processed ${json.length} municipalities`);
24
25
  yield disconnectKnex();
25
26
  const output = JSON.stringify(municipalityPolygons);
26
27
  if (process.argv.length >= 4) {
@@ -34,3 +35,4 @@ function main() {
34
35
  });
35
36
  }
36
37
  main();
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9seWdvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYmluL3BvbHlnb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ2pELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFHMUMsU0FBZSxJQUFJOztRQUNqQiwwQ0FBMEM7UUFDMUMsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDM0IsT0FBTyxDQUFDLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1lBQzVDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDakI7UUFFRCxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBbUIsQ0FBQztRQUVsRSxNQUFNLG9CQUFvQixHQUFHLE1BQU0sd0JBQXdCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFbEUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLElBQUksQ0FBQyxNQUFNLGlCQUFpQixDQUFDLENBQUM7UUFDdkQsTUFBTSxjQUFjLEVBQUUsQ0FBQztRQUV2QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDcEQsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7WUFDNUIsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN2QyxPQUFPLENBQUMsR0FBRyxDQUFDLHVCQUF1QixjQUFjLEVBQUUsQ0FBQyxDQUFDO1lBQ3JELGFBQWEsQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDdkM7YUFBTTtZQUNMLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQ3JDO0lBQ0gsQ0FBQztDQUFBO0FBRUQsSUFBSSxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZWFkRmlsZVN5bmMsIHdyaXRlRmlsZVN5bmMgfSBmcm9tIFwiZnNcIjtcclxuaW1wb3J0IHsgbXVuaWNpcGFsaXRpZXNUb1BvbHlnb25zIH0gZnJvbSBcIi4uL3N0cmVldC1tYXJrZG93bi9wb2x5Z29uc1wiO1xyXG5pbXBvcnQgeyBkaXNjb25uZWN0S25leCB9IGZyb20gXCIuLi9kYi9kYlwiO1xyXG5pbXBvcnQgeyBNdW5pY2lwYWxpdHkgfSBmcm9tIFwiLi4vc3RyZWV0LW1hcmtkb3duL3R5cGVzXCI7XHJcblxyXG5hc3luYyBmdW5jdGlvbiBtYWluKCkge1xyXG4gIC8vIHRha2UgZmlyc3Qgbm9kZSBhcmd1bWVudCBhcyBhIGZpbGUgbmFtZVxyXG4gIGlmIChwcm9jZXNzLmFyZ3YubGVuZ3RoIDwgMykge1xyXG4gICAgY29uc29sZS5lcnJvcihcIk1pc3NpbmcgZmlsZSBuYW1lIGFyZ3VtZW50XCIpO1xyXG4gICAgcHJvY2Vzcy5leGl0KDEpO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgZmlsZU5hbWUgPSBwcm9jZXNzLmFyZ3ZbMl07XHJcbiAgY29uc3QgZmlsZUNvbnRlbnQgPSByZWFkRmlsZVN5bmMoZmlsZU5hbWUpO1xyXG4gIGNvbnN0IGpzb24gPSBKU09OLnBhcnNlKGZpbGVDb250ZW50LnRvU3RyaW5nKCkpIGFzIE11bmljaXBhbGl0eVtdO1xyXG5cclxuICBjb25zdCBtdW5pY2lwYWxpdHlQb2x5Z29ucyA9IGF3YWl0IG11bmljaXBhbGl0aWVzVG9Qb2x5Z29ucyhqc29uKTtcclxuXHJcbiAgY29uc29sZS5sb2coYFByb2Nlc3NlZCAke2pzb24ubGVuZ3RofSBtdW5pY2lwYWxpdGllc2ApO1xyXG4gIGF3YWl0IGRpc2Nvbm5lY3RLbmV4KCk7XHJcblxyXG4gIGNvbnN0IG91dHB1dCA9IEpTT04uc3RyaW5naWZ5KG11bmljaXBhbGl0eVBvbHlnb25zKTtcclxuICBpZiAocHJvY2Vzcy5hcmd2Lmxlbmd0aCA+PSA0KSB7XHJcbiAgICBjb25zdCBvdXRwdXRGaWxlTmFtZSA9IHByb2Nlc3MuYXJndlszXTtcclxuICAgIGNvbnNvbGUubG9nKGBXcml0aW5nIHBvbHlnb25zIHRvICR7b3V0cHV0RmlsZU5hbWV9YCk7XHJcbiAgICB3cml0ZUZpbGVTeW5jKG91dHB1dEZpbGVOYW1lLCBvdXRwdXQpO1xyXG4gIH0gZWxzZSB7XHJcbiAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShvdXRwdXQpKTtcclxuICB9XHJcbn1cclxuXHJcbm1haW4oKTtcclxuIl19
@@ -7,3 +7,4 @@ downloadAndImportRegions(defaultBinOptions)
7
7
  .catch((error) => {
8
8
  console.log(error);
9
9
  });
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iaW4vcmVnaW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFaEQsd0JBQXdCLENBQUMsaUJBQWlCLENBQUM7S0FDeEMsSUFBSSxDQUFDLEdBQUcsRUFBRTtJQUNULE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDM0IsQ0FBQyxDQUFDO0tBQ0QsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7SUFDZixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3JCLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZG93bmxvYWRBbmRJbXBvcnRSZWdpb25zIH0gZnJvbSBcIi4uL29wZW4tZGF0YS1zeW5jL3JlZ2lvbnNcIjtcclxuaW1wb3J0IHsgZGVmYXVsdEJpbk9wdGlvbnMgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcclxuXHJcbmRvd25sb2FkQW5kSW1wb3J0UmVnaW9ucyhkZWZhdWx0QmluT3B0aW9ucylcclxuICAudGhlbigoKSA9PiB7XHJcbiAgICBjb25zb2xlLmxvZyhcIkNvbXBsZXRlZFwiKTtcclxuICB9KVxyXG4gIC5jYXRjaCgoZXJyb3IpID0+IHtcclxuICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICB9KTtcclxuIl19
@@ -7,3 +7,4 @@ downloadAndImportSchools(defaultBinOptions)
7
7
  .catch((error) => {
8
8
  console.log(error);
9
9
  });
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nob29scy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iaW4vc2Nob29scy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFaEQsd0JBQXdCLENBQUMsaUJBQWlCLENBQUM7S0FDeEMsSUFBSSxDQUFDLEdBQUcsRUFBRTtJQUNULE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDM0IsQ0FBQyxDQUFDO0tBQ0QsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7SUFDZixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3JCLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZG93bmxvYWRBbmRJbXBvcnRTY2hvb2xzIH0gZnJvbSBcIi4uL29wZW4tZGF0YS1zeW5jL3NjaG9vbHNcIjtcclxuaW1wb3J0IHsgZGVmYXVsdEJpbk9wdGlvbnMgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcclxuXHJcbmRvd25sb2FkQW5kSW1wb3J0U2Nob29scyhkZWZhdWx0QmluT3B0aW9ucylcclxuICAudGhlbigoKSA9PiB7XHJcbiAgICBjb25zb2xlLmxvZyhcIkNvbXBsZXRlZFwiKTtcclxuICB9KVxyXG4gIC5jYXRjaCgoZXJyb3IpID0+IHtcclxuICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICB9KTtcclxuIl19
@@ -13,3 +13,4 @@ downloadAndImportStreets(defaultBinOptions)
13
13
  console.log(error);
14
14
  }
15
15
  });
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyZWV0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iaW4vc3RyZWV0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFaEQsT0FBTyxDQUFDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLGlCQUFpQixDQUFDO0tBQ3hDLElBQUksQ0FBQyxHQUFHLEVBQUU7SUFDVCxPQUFPLENBQUMsT0FBTyxDQUFDLDZCQUE2QixDQUFDLENBQUM7QUFDakQsQ0FBQyxDQUFDO0tBQ0QsS0FBSyxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUU7SUFDcEIsSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ2pDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUNqQztTQUFNO1FBQ0wsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUNwQjtBQUNILENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZG93bmxvYWRBbmRJbXBvcnRTdHJlZXRzIH0gZnJvbSBcIi4uL29wZW4tZGF0YS1zeW5jL3N0cmVldHNcIjtcclxuaW1wb3J0IHsgZGVmYXVsdEJpbk9wdGlvbnMgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcclxuXHJcbmNvbnNvbGUudGltZShcImRvd25sb2FkQW5kSW1wb3J0QWxsU3RyZWV0c1wiKTtcclxuZG93bmxvYWRBbmRJbXBvcnRTdHJlZXRzKGRlZmF1bHRCaW5PcHRpb25zKVxyXG4gIC50aGVuKCgpID0+IHtcclxuICAgIGNvbnNvbGUudGltZUVuZChcImRvd25sb2FkQW5kSW1wb3J0QWxsU3RyZWV0c1wiKTtcclxuICB9KVxyXG4gIC5jYXRjaCgoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgaWYgKGVycm9yLmhhc093blByb3BlcnR5KFwic3RhY2tcIikpIHtcclxuICAgICAgY29uc29sZS5sb2coZXJyb3IsIGVycm9yLnN0YWNrKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgIH1cclxuICB9KTtcclxuIl19
@@ -1,3 +1,4 @@
1
1
  import { downloadAndImportEverything } from "../index";
2
2
  import { defaultBinOptions } from "./constants";
3
3
  downloadAndImportEverything(defaultBinOptions);
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luYy1hbGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYmluL3N5bmMtYWxsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN2RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFaEQsMkJBQTJCLENBQUMsaUJBQWlCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRvd25sb2FkQW5kSW1wb3J0RXZlcnl0aGluZyB9IGZyb20gXCIuLi9pbmRleFwiO1xyXG5pbXBvcnQgeyBkZWZhdWx0QmluT3B0aW9ucyB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xyXG5cclxuZG93bmxvYWRBbmRJbXBvcnRFdmVyeXRoaW5nKGRlZmF1bHRCaW5PcHRpb25zKTsiXX0=
@@ -184,7 +184,6 @@ const getAllStreets = (cityCode) => __awaiter(void 0, void 0, void 0, function*
184
184
  return yield knex.pluck("name").from("street").where("city_code", cityCode);
185
185
  });
186
186
  export const findAddressPoints = (params) => __awaiter(void 0, void 0, void 0, function* () {
187
- const knex = getKnexDb();
188
187
  const queryParams = getQueryParams(params);
189
188
  const streetJoinCondition = getStreetJoinCondition(params);
190
189
  const whereCondition = getWhereCondition(params);
@@ -352,3 +351,4 @@ const rowToAddressPoint = (row) => {
352
351
  point.address = createSingleLineAddress(point);
353
352
  return point;
354
353
  };
354
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzcy1wb2ludHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGIvYWRkcmVzcy1wb2ludHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHVCQUF1QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFFLE9BQU8sRUFLTCxVQUFVLEVBR1Ysb0JBQW9CLEVBQ3BCLE9BQU8sRUFDUCxpQkFBaUIsR0FDbEIsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNyRCxPQUFPLFVBQVUsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QyxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLHNCQUFzQixFQUN0QixTQUFTLEVBQ1Qsa0JBQWtCLEVBQ2xCLE9BQU8sRUFDUCxRQUFRLEVBQ1IsY0FBYyxFQUNkLFFBQVEsR0FDVCxNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNoRCxPQUFPLEVBQXlCLGdCQUFnQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRWxFLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQztBQUMvQixNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQztBQUVqQyxNQUFNLFdBQVcsR0FBRztJQUNsQixDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7SUFDcEIsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7Q0FDdEIsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRztJQUNwQixPQUFPLEVBQUUsQ0FBQztJQUNWLFFBQVEsRUFBRSxDQUFDO0lBQ1gsUUFBUSxFQUFFLENBQUM7SUFDWCxZQUFZLEVBQUUsQ0FBQztJQUNmLFlBQVksRUFBRSxDQUFDO0lBQ2Ysa0JBQWtCLEVBQUUsQ0FBQztJQUNyQixrQkFBa0IsRUFBRSxDQUFDO0lBQ3JCLG9CQUFvQixFQUFFLENBQUM7SUFDdkIsb0JBQW9CLEVBQUUsQ0FBQztJQUN2QixVQUFVLEVBQUUsQ0FBQztJQUNiLFVBQVUsRUFBRSxFQUFFO0lBQ2QsVUFBVSxFQUFFLEVBQUU7SUFDZCxXQUFXLEVBQUUsRUFBRTtJQUNmLG1CQUFtQixFQUFFLEVBQUU7SUFDdkIseUJBQXlCLEVBQUUsRUFBRTtJQUM3QixVQUFVLEVBQUUsRUFBRTtJQUNkLFdBQVcsRUFBRSxFQUFFO0lBQ2YsV0FBVyxFQUFFLEVBQUU7SUFDZixTQUFTLEVBQUUsRUFBRTtDQUNkLENBQUM7QUFFRixNQUFNLFdBQVcsR0FBRztJQUNsQixJQUFJO0lBQ0osYUFBYTtJQUNiLGdCQUFnQjtJQUNoQixvQkFBb0I7SUFDcEIsc0JBQXNCO0lBQ3RCLDZCQUE2QjtJQUM3QixXQUFXO0lBQ1gsb0JBQW9CO0lBQ3BCLHdCQUF3QjtJQUN4QixzQkFBc0I7SUFDdEIsYUFBYTtJQUNiLFFBQVE7SUFDUixRQUFRO0lBQ1IsZ0JBQWdCO0lBQ2hCLGlCQUFpQjtDQUNsQixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsQ0FDakMsTUFBa0IsRUFDRCxFQUFFO0lBQ25CLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDdkIsT0FBTyxDQUFDLENBQUM7S0FDVjtJQUNELE1BQU0sWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzNCLE1BQU0sZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzlCLE1BQU0sdUJBQXVCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEMsTUFBTSxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDNUIsTUFBTSxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUVwQyxNQUFNLE1BQU0sR0FBc0IsRUFBRSxDQUFDO0lBQ3JDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUN0QixJQUFJLFNBQWlCLEVBQUUsU0FBaUIsQ0FBQztRQUN6QyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDeEQsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxVQUFVLENBQzdCLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQ3BDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQ3JDLENBQUM7WUFDRixDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsRUFBRSxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztTQUMzRDtRQUNELE1BQU0sQ0FBQyxJQUFJLENBQ1QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFDcEIsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsRUFDdkMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsRUFDcEMsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsRUFDeEMsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxFQUNoRCxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLEVBQ3RELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQ3JCLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQ3pDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUMsRUFDakQsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxFQUMvQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUN2QixjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUN4QyxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUN4QyxTQUFTLEVBQ1QsU0FBUyxDQUNWLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztJQUVILE1BQU0sWUFBWSxHQUFHLHNCQUFzQixDQUN6QyxXQUFXLENBQUMsTUFBTSxFQUNsQixNQUFNLENBQUMsTUFBTSxDQUNkLENBQUM7SUFFRixNQUFNLElBQUksR0FBRyxTQUFTLEVBQUUsQ0FBQztJQUN6QixNQUFNLFFBQVEsQ0FDWixVQUNFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUM3Qix3QkFBd0IsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxZQUFZLElBQ25FLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLENBQUMsRUFDbkQsRUFBRSxFQUNGLE1BQU0sQ0FDUCxDQUFDO0lBRUYsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQ3ZCLENBQUMsQ0FBQSxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQU8sTUFBa0IsRUFBbUIsRUFBRTtJQUN4RSxPQUFPLE1BQU0sa0JBQWtCLENBQzdCLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQ2pFLE1BQU0sRUFDTixDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FDakIsQ0FBQztBQUNKLENBQUMsQ0FBQSxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLENBQU8sTUFBa0IsRUFBbUIsRUFBRTtJQUMzRSxPQUFPLE1BQU0sa0JBQWtCLENBQzdCLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsWUFBWSxFQUFFO1FBQ2pELE1BQU0sQ0FBQyxRQUFRO1FBQ2YsTUFBTSxDQUFDLFlBQVk7S0FDcEIsQ0FBQyxFQUNGLGVBQWUsRUFDZixDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQzlCLENBQUM7QUFDSixDQUFDLENBQUEsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLENBQ3JDLE1BQWtCLEVBQ0QsRUFBRTtJQUNuQixPQUFPLE1BQU0sa0JBQWtCLENBQzdCLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsb0JBQW9CLEVBQUU7UUFDekQsTUFBTSxDQUFDLG9CQUFvQjtRQUMzQixNQUFNLENBQUMsUUFBUTtLQUNoQixDQUFDLEVBQ0YsbUJBQW1CLEVBQ25CLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FDOUIsQ0FBQztBQUNKLENBQUMsQ0FBQSxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsQ0FDbkMsTUFBa0IsRUFDRCxFQUFFO0lBQ25CLE9BQU8sTUFBTSxrQkFBa0IsQ0FDN0IscUJBQXFCLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRTtRQUN2RCxNQUFNLENBQUMsa0JBQWtCO0tBQzFCLENBQUMsRUFDRixpQkFBaUIsRUFDakIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQ2pCLENBQUM7QUFDSixDQUFDLENBQUEsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUFPLE1BQWtCLEVBQW1CLEVBQUU7SUFDekUsT0FBTyxNQUFNLGtCQUFrQixDQUM3QixxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLFVBQVUsRUFBRTtRQUMvQyxNQUFNLENBQUMsUUFBUTtRQUNmLE1BQU0sQ0FBQyxVQUFVO0tBQ2xCLENBQUMsRUFDRixRQUFRLEVBQ1IsQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUM5QixDQUFDO0FBQ0osQ0FBQyxDQUFBLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxHQUEyQixFQUFFO0lBQ2pFLE1BQU0sTUFBTSxHQUFHLE1BQU0sU0FBUyxFQUFFO1NBQzdCLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUM7U0FDOUIsSUFBSSxDQUFDLGVBQWUsQ0FBQztTQUNyQixLQUFLLEVBQUUsQ0FBQztJQUNYLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxPQUFPLENBQUMsQ0FBQyw0QkFBNEI7QUFDekUsQ0FBQyxDQUFBLENBQUM7QUFFRixNQUFNLGtCQUFrQixHQUFHOzs7Ozs7Ozs7OztxRUFXMEMsQ0FBQztBQUV0RSxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxDQUNqQyxjQUFzQixFQUNRLEVBQUU7SUFDaEMsTUFBTSxHQUFHLEdBQUcsTUFBTSxRQUFRLENBQ3hCLEdBQUcsa0JBQWtCO3FCQUNKLEVBQ2pCLENBQUMsY0FBYyxDQUFDLENBQ2pCLENBQUM7SUFDRixJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ3BCLE9BQU8sSUFBSSxDQUFDO0tBQ2I7SUFDRCxPQUFPLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25DLENBQUMsQ0FBQSxDQUFDO0FBRUYsSUFBSSxXQUFXLEdBQW1CLElBQUksQ0FBQztBQUN2QyxJQUFJLFVBQVUsR0FBYSxFQUFFLENBQUM7QUFFOUIsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FDL0IsVUFBa0IsRUFDbEIsT0FBZ0IsRUFDa0MsRUFBRTtJQUNwRCxNQUFNLElBQUksR0FBRyxTQUFTLEVBQUUsQ0FBQztJQUN6QixNQUFNLE1BQU0sR0FBZSxFQUFFLENBQUM7SUFFOUIsMEJBQTBCO0lBQzFCLE1BQU0sUUFBUSxHQUFHLE1BQU0sa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbkQsTUFBTSxPQUFPLEdBQUcsTUFBTSxRQUFRLENBQzVCOzt3Q0FHRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxFQUN0QyxFQUFFLEVBQ0YsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQ3ZCLENBQUM7SUFFRixJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQ3RCLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QixJQUFJLEdBQUcsQ0FBQyxXQUFXLEtBQUssVUFBVSxFQUFFO1lBQ2xDLGVBQWU7WUFDZixpRkFBaUY7WUFDakYsS0FBSztTQUNOO1FBQ0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7S0FDakM7SUFFRCxJQUFJLFdBQVcsS0FBSyxPQUFPLEVBQUU7UUFDM0IsVUFBVSxHQUFHLE1BQU0sYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNDLFdBQVcsR0FBRyxPQUFPLENBQUM7S0FDdkI7SUFFRCxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsSUFBSSxDQUMzQixDQUFDLENBQUMsRUFBRSxFQUFFLENBQ0osQ0FBQyxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxLQUFLLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FDekUsQ0FBQztJQUNGLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQztJQUNuQixJQUFJLEtBQUssRUFBRTtRQUNULE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDZCxJQUFJLFVBQVUsS0FBSyxLQUFLLEVBQUU7WUFDeEIsZUFBZTtZQUNmLHVFQUF1RTtZQUN2RSxLQUFLO1NBQ047S0FDRjtTQUFNO1FBQ0wsTUFBTSxPQUFPLEdBQUcsaUJBQWlCLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzFELE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDVixPQUFPLEVBQUUsVUFBVSxVQUFVLDJDQUEyQyxPQUFPLElBQUk7WUFDbkYsV0FBVyxFQUFFLENBQUM7WUFDZCxTQUFTLEVBQUUsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDO1NBQ2pDLENBQUMsQ0FBQztLQUNKO0lBQ0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDbkMsQ0FBQyxDQUFBLENBQUM7QUFFRixNQUFNLGFBQWEsR0FBRyxDQUFPLFFBQWdCLEVBQXFCLEVBQUU7SUFDbEUsTUFBTSxJQUFJLEdBQUcsU0FBUyxFQUFFLENBQUM7SUFDekIsT0FBTyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDOUUsQ0FBQyxDQUFBLENBQUM7QUFzQkYsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FDL0IsTUFBK0IsRUFDTixFQUFFO0lBQzNCLE1BQU0sV0FBVyxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMzQyxNQUFNLG1CQUFtQixHQUFHLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRTNELE1BQU0sY0FBYyxHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRWpELE1BQU0sV0FBVyxHQUFHLE1BQU0sUUFBUSxDQUNoQzs7Ozs7TUFLRSxtQkFBbUI7Ozs7OztZQU1iLGNBQWMsRUFBRSxFQUN4QixXQUFXLENBQ1osQ0FBQztJQUVGLE9BQU8sbUJBQW1CLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3pFLENBQUMsQ0FBQSxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsQ0FDakMsYUFBNkIsRUFDN0IsTUFBK0IsRUFDZixFQUFFO0lBQ2xCLElBQ0UsTUFBTSxDQUFDLElBQUksS0FBSyxtQkFBbUI7UUFDbkMsTUFBTSxDQUFDLElBQUksS0FBSywrQkFBK0I7UUFDL0MsTUFBTSxDQUFDLElBQUksS0FBSyx1QkFBdUIsRUFDdkM7UUFDQSxPQUFPLGFBQWEsQ0FBQztLQUN0QjtJQUVELE1BQU0sTUFBTSxHQUFtQixFQUFFLENBQUM7SUFDbEMsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7SUFDN0MsSUFBSSxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsRUFBRTtRQUNqQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7WUFDaEMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLDJCQUEyQixDQUFDLGFBQWEsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ3pFLENBQUMsQ0FBQyxDQUFDO1FBRUgsdURBQXVEO1FBQ3ZELElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDM0IsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLGFBQWEsQ0FBQyxDQUFDO1NBQy9CO0tBQ0Y7U0FBTSxJQUFJLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxFQUFFO1FBQzNDLHVEQUF1RDtRQUN2RCxNQUFNLFNBQVMsR0FBRywyQkFBMkIsQ0FBQyxhQUFhLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDekUsTUFBTSxDQUFDLElBQUksQ0FDVCxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQ3JCLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQ3BELENBQ0YsQ0FBQztLQUNIO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDO0FBRUYsTUFBTSwyQkFBMkIsR0FBRyxDQUNsQyxhQUE2QixFQUM3QixVQUFzQixFQUNOLEVBQUU7SUFDbEIsTUFBTSxNQUFNLEdBQW1CLEVBQUUsQ0FBQztJQUNsQyxVQUFVLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ2xDLE1BQU0sQ0FBQyxJQUFJLENBQ1QsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsWUFBWSxFQUFFLEVBQUU7O1lBQ3ZDLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNsQixNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQztnQkFDOUQsT0FBTyxDQUNMLFNBQVMsQ0FDUCxNQUFNLEVBQ04sVUFBVSxDQUFDLElBQUksS0FBSyxVQUFVLENBQUMsV0FBVztvQkFDeEMsQ0FBQyxDQUFDLE1BQUEsWUFBWSxDQUFDLHlCQUF5QixtQ0FBSSxJQUFJO29CQUNoRCxDQUFDLENBQUMsSUFBSSxFQUNSLEtBQUssQ0FDTixJQUFJLFFBQVEsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUN2QyxDQUFDO2FBQ0g7aUJBQU07Z0JBQ0wsTUFBTSxnQkFBZ0IsR0FBcUIsS0FBSyxDQUFDO2dCQUNqRCxPQUFPLHNCQUFzQixDQUFDLGdCQUFnQixFQUFFLFlBQVksQ0FBQyxDQUFDO2FBQy9EO1FBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0lBRUgsMEVBQTBFO0lBQzFFLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ2xDLE1BQU0sQ0FBQyxJQUFJLENBQ1QsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FDdkMsUUFBUSxDQUNOLGVBQWUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxFQUM5QyxVQUFVLENBQUMsSUFBSSxDQUNoQixDQUNGLENBQ0YsQ0FBQztLQUNIO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQzVCLE1BQStCLEVBQ1YsRUFBRTtJQUN2QixJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssU0FBUyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRTtRQUNqRSxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUMxRDtJQUVELElBQ0UsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxrQkFBa0IsQ0FBQztRQUN6RSxNQUFNLENBQUMsSUFBSSxLQUFLLHVCQUF1QixFQUN2QztRQUNBLE9BQU8sQ0FBQyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztLQUN0QztJQUVELE9BQU8sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3BDLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLENBQ3BDLE1BQStCLEVBQ3ZCLEVBQUU7SUFDVixJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssU0FBUyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRTtRQUNqRSxPQUFPLDBEQUNMLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsRUFDN0MsRUFBRSxDQUFDO0tBQ0o7SUFDRCxPQUFPLDhDQUE4QyxDQUFDO0FBQ3hELENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsTUFBK0IsRUFBVSxFQUFFO0lBQzNFLElBQ0UsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxrQkFBa0IsQ0FBQztRQUN6RSxNQUFNLENBQUMsSUFBSSxLQUFLLHVCQUF1QixFQUN2QztRQUNBLE9BQU8sOEJBQThCLENBQUM7S0FDdkM7SUFFRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssK0JBQStCLEVBQUU7UUFDbkQsT0FBTyxHQUFHLG9CQUFvQixDQUM1QixHQUFHLEVBQ0gsTUFBTSxDQUFDLFlBQVksQ0FDcEIsNEJBQTRCLENBQUM7S0FDL0I7SUFFRCxPQUFPLG9CQUFvQixDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDeEQsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQ3ZCLE1BQXFCLEVBQ3JCLE1BQXFCLEVBQ3JCLEtBQWdCLEVBQ1AsRUFBRTtJQUNYLElBQUksTUFBTSxLQUFLLElBQUksRUFBRTtRQUNuQixPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7S0FDakM7SUFFRCwrRUFBK0U7SUFDL0UsaUdBQWlHO0lBQ2pHLHlGQUF5RjtJQUN6RixpRkFBaUY7SUFDakYsTUFBTSxhQUFhLEdBQ2pCLENBQUMsS0FBSyxDQUFDLElBQUk7UUFDWCxNQUFNLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNO1FBQzFCLENBQUMsTUFBTSxLQUFLLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTTtZQUMzQixDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUV2RSxNQUFNLFdBQVcsR0FDZixDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ1QsTUFBTSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBTTtRQUN4QixDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU07WUFDekIsQ0FBQyxDQUFDLE1BQU07Z0JBQ04sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxNQUFNLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFckUsT0FBTyxhQUFhLElBQUksV0FBVyxDQUFDO0FBQ3RDLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxDQUFDLE1BQXFCLEVBQUUsSUFBZ0IsRUFBVyxFQUFFO0lBQzNFLE9BQU8sQ0FDTCxJQUFJLEtBQUssVUFBVSxDQUFDLFdBQVc7UUFDL0IsSUFBSSxLQUFLLFVBQVUsQ0FBQyxHQUFHO1FBQ3ZCLENBQUMsSUFBSSxLQUFLLFVBQVUsQ0FBQyxHQUFHLElBQUksTUFBTSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0MsQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDLElBQUksSUFBSSxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUMvQyxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsQ0FDcEMsZ0JBQWtDLEVBQ2xDLFlBQTBCLEVBQ2pCLEVBQUU7SUFDWCxPQUFPLENBQ0wsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsTUFBTSxLQUFLLFlBQVksQ0FBQyxXQUFXO1FBQ3RFLGdCQUFnQixDQUFDLG1CQUFtQixDQUFDLE1BQU07WUFDekMsWUFBWSxDQUFDLG1CQUFtQjtRQUNsQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNO1lBQzVDLENBQUMsWUFBWSxDQUFDLHlCQUF5QixDQUFDO1lBQ3hDLGdCQUFnQixDQUFDLG1CQUFtQixDQUFDLE1BQU07Z0JBQ3pDLFlBQVksQ0FBQyx5QkFBeUIsQ0FBQyxDQUM1QyxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsTUFBTSxlQUFlLEdBQUcsQ0FDdEIsSUFBZ0IsRUFDaEIsWUFBMEIsRUFDWCxFQUFFOztJQUNqQixPQUFPLElBQUksS0FBSyxVQUFVLENBQUMsV0FBVztRQUNwQyxDQUFDLENBQUMsWUFBWSxDQUFDLFdBQVc7UUFDMUIsQ0FBQyxDQUFDLE1BQUEsWUFBWSxDQUFDLG1CQUFtQixtQ0FBSSxJQUFJLENBQUM7QUFDL0MsQ0FBQyxDQUFDO0FBRUYsTUFBTSxvQkFBb0IsR0FBRyxDQUMzQixLQUFhLEVBQ2IsWUFBMEIsRUFDbEIsRUFBRTtJQUNWLE9BQU8sWUFBWSxDQUFDLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxJQUFJO1FBQ2hELENBQUMsQ0FBQyxHQUFHLEtBQUssZ0JBQWdCO1FBQzFCLENBQUMsQ0FBQyxHQUFHLEtBQUsseUJBQXlCLENBQUM7QUFDeEMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLEdBQVEsRUFBZ0IsRUFBRTtJQUNuRCxNQUFNLEtBQUssR0FBaUI7UUFDMUIsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFO1FBQ1YsT0FBTyxFQUFFLEVBQUU7UUFDWCxJQUFJLEVBQ0YsR0FBRyxDQUFDLGdCQUFnQixLQUFLLGVBQWU7WUFDdEMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLFdBQVc7WUFDOUIsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLFlBQVk7UUFDbkMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxrQkFBa0I7UUFDbkMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxTQUFTO1FBQ25CLGdCQUFnQixFQUFFLEdBQUcsQ0FBQyxzQkFBc0I7UUFDNUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxXQUFXO1FBQzNCLEdBQUcsRUFBRSxHQUFHLENBQUMsY0FBYztRQUN2QixHQUFHLEVBQUUsR0FBRyxDQUFDLGVBQWU7S0FDekIsQ0FBQztJQUNGLElBQUksR0FBRyxDQUFDLFdBQVcsS0FBSyxJQUFJLEVBQUU7UUFDNUIsS0FBSyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsV0FBVyxDQUFDO0tBQ2hDO0lBQ0QsSUFBSSxHQUFHLENBQUMsb0JBQW9CLEtBQUssSUFBSSxFQUFFO1FBQ3JDLEtBQUssQ0FBQyxtQkFBbUIsR0FBRyxHQUFHLENBQUMsb0JBQW9CLENBQUM7S0FDdEQ7SUFDRCxJQUFJLEdBQUcsQ0FBQywyQkFBMkIsS0FBSyxJQUFJLEVBQUU7UUFDNUMsS0FBSyxDQUFDLHlCQUF5QixHQUFHLEdBQUcsQ0FBQywyQkFBMkIsQ0FBQztLQUNuRTtJQUNELElBQUksR0FBRyxDQUFDLGFBQWEsS0FBSyxJQUFJLEVBQUU7UUFDOUIsS0FBSyxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUMsYUFBYSxDQUFDO0tBQ3BDO0lBQ0QsSUFBSSxHQUFHLENBQUMsb0JBQW9CLEtBQUssSUFBSSxFQUFFO1FBQ3JDLEtBQUssQ0FBQyxjQUFjLEdBQUcsR0FBRyxDQUFDLG9CQUFvQixDQUFDO0tBQ2pEO0lBQ0QsS0FBSyxDQUFDLE9BQU8sR0FBRyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQyxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFkZHJlc3NQb2ludFR5cGUsIGNyZWF0ZVNpbmdsZUxpbmVBZGRyZXNzIH0gZnJvbSBcImN6ZWNoLWFkZHJlc3NcIjtcclxuaW1wb3J0IHtcclxuICBBZGRyZXNzUG9pbnQsXHJcbiAgRnVsbFN0cmVldE51bWJlcixcclxuICBSYW5nZVNwZWMsXHJcbiAgU2VyaWVzU3BlYyxcclxuICBTZXJpZXNUeXBlLFxyXG4gIFNtZEVycm9yLFxyXG4gIFNtZExpbmUsXHJcbiAgaXNOZWdhdGl2ZVNlcmllc1NwZWMsXHJcbiAgaXNSYW5nZSxcclxuICBpc1Nlcmllc1NwZWNBcnJheSxcclxufSBmcm9tIFwiLi4vc3RyZWV0LW1hcmtkb3duL3R5cGVzXCI7XHJcbmltcG9ydCB7IGZpbmRDbG9zZXN0U3RyaW5nIH0gZnJvbSBcIi4uL3V0aWxzL2hlbHBlcnNcIjtcclxuaW1wb3J0IGp0c2syd2dzODQgZnJvbSBcIi4uL3V0aWxzL2p0c2syd2dzODRcIjtcclxuaW1wb3J0IHtcclxuICBleHRyYWN0S2V5VmFsdWVzUGFpcnMsXHJcbiAgZ2VuZXJhdGUyRFBsYWNlaG9sZGVycyxcclxuICBnZXRLbmV4RGIsXHJcbiAgaW5zZXJ0TXVsdGlwbGVSb3dzLFxyXG4gIGlzTXlzcWwsXHJcbiAgaXNTcWxpdGUsXHJcbiAgbm9uRW1wdHlPck51bGwsXHJcbiAgcmF3UXVlcnksXHJcbn0gZnJvbSBcIi4vZGJcIjtcclxuaW1wb3J0IHsgZ2V0Rm91bmRlckNpdHlDb2RlIH0gZnJvbSBcIi4vZm91bmRlcnNcIjtcclxuaW1wb3J0IHsgRm91bmRlciwgTXVuaWNpcGFsaXR5LCBNdW5pY2lwYWxpdHlUeXBlIH0gZnJvbSBcIi4vdHlwZXNcIjtcclxuXHJcbmNvbnN0IERlc2NyaXB0aXZlVHlwZSA9IFwixI0ucC5cIjtcclxuY29uc3QgUmVnaXN0cmF0aW9uVHlwZSA9IFwixI0uZXYuXCI7XHJcblxyXG5jb25zdCBPYmplY3RUeXBlcyA9IHtcclxuICBbRGVzY3JpcHRpdmVUeXBlXTogMSxcclxuICBbUmVnaXN0cmF0aW9uVHlwZV06IDIsXHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgQ29sdW1uID0ge1xyXG4gIGFkbUNvZGU6IDAsXHJcbiAgY2l0eUNvZGU6IDEsXHJcbiAgY2l0eU5hbWU6IDIsXHJcbiAgZGlzdHJpY3RDb2RlOiAzLFxyXG4gIGRpc3RyaWN0TmFtZTogNCxcclxuICBwcmFndWVEaXN0cmljdENvZGU6IDUsXHJcbiAgcHJhZ3VlRGlzdHJpY3ROYW1lOiA2LFxyXG4gIG11bmljaXBhbGl0eVBhcnRDb2RlOiA3LFxyXG4gIG11bmljaXBhbGl0eVBhcnROYW1lOiA4LFxyXG4gIHN0cmVldENvZGU6IDksXHJcbiAgc3RyZWV0TmFtZTogMTAsXHJcbiAgb2JqZWN0VHlwZTogMTEsXHJcbiAgaG91c2VOdW1iZXI6IDEyLFxyXG4gIG9yaWVudGF0aW9uYWxOdW1iZXI6IDEzLFxyXG4gIG9yaWVudGF0aW9uYWxOdW1iZXJMZXR0ZXI6IDE0LFxyXG4gIHBvc3RhbENvZGU6IDE1LFxyXG4gIHlDb29yZGluYXRlOiAxNixcclxuICB4Q29vcmRpbmF0ZTogMTcsXHJcbiAgdmFsaWRGcm9tOiAxOCxcclxufTtcclxuXHJcbmNvbnN0IGNvbHVtbk5hbWVzID0gW1xyXG4gIFwiaWRcIixcclxuICBcInN0cmVldF9jb2RlXCIsXHJcbiAgXCJvYmplY3RfdHlwZV9pZFwiLFxyXG4gIFwiZGVzY3JpcHRpdmVfbnVtYmVyXCIsXHJcbiAgXCJvcmllbnRhdGlvbmFsX251bWJlclwiLFxyXG4gIFwib3JpZW50YXRpb25hbF9udW1iZXJfbGV0dGVyXCIsXHJcbiAgXCJjaXR5X2NvZGVcIixcclxuICBcImNpdHlfZGlzdHJpY3RfY29kZVwiLFxyXG4gIFwibXVuaWNpcGFsaXR5X3BhcnRfY29kZVwiLFxyXG4gIFwicHJhZ3VlX2Rpc3RyaWN0X2NvZGVcIixcclxuICBcInBvc3RhbF9jb2RlXCIsXHJcbiAgXCJqdHNrX3hcIixcclxuICBcImp0c2tfeVwiLFxyXG4gIFwid2dzODRfbGF0aXR1ZGVcIixcclxuICBcIndnczg0X2xvbmdpdHVkZVwiLFxyXG5dO1xyXG5cclxuZXhwb3J0IGNvbnN0IGNvbW1pdEFkZHJlc3NQb2ludHMgPSBhc3luYyAoXHJcbiAgYnVmZmVyOiBzdHJpbmdbXVtdXHJcbik6IFByb21pc2U8bnVtYmVyPiA9PiB7XHJcbiAgaWYgKGJ1ZmZlci5sZW5ndGggPT09IDApIHtcclxuICAgIHJldHVybiAwO1xyXG4gIH1cclxuICBhd2FpdCBpbnNlcnRDaXRpZXMoYnVmZmVyKTtcclxuICBhd2FpdCBpbnNlcnREaXN0cmljdHMoYnVmZmVyKTtcclxuICBhd2FpdCBpbnNlcnRNdW5pY2lwYWxpdHlQYXJ0cyhidWZmZXIpO1xyXG4gIGF3YWl0IGluc2VydFN0cmVldHMoYnVmZmVyKTtcclxuICBhd2FpdCBpbnNlcnRQcmFndWVEaXN0cmljdHMoYnVmZmVyKTtcclxuXHJcbiAgY29uc3QgcGFyYW1zOiAoc3RyaW5nIHwgbnVsbClbXSA9IFtdO1xyXG4gIGJ1ZmZlci5mb3JFYWNoKChkYXRhKSA9PiB7XHJcbiAgICBsZXQgbGF0T3JOdWxsOiBzdHJpbmcsIGxvbk9yTnVsbDogc3RyaW5nO1xyXG4gICAgbGF0T3JOdWxsID0gbnVsbDtcclxuICAgIGxvbk9yTnVsbCA9IG51bGw7XHJcbiAgICBpZiAoZGF0YVtDb2x1bW4ueENvb3JkaW5hdGVdICYmIGRhdGFbQ29sdW1uLnlDb29yZGluYXRlXSkge1xyXG4gICAgICBjb25zdCB7IGxhdCwgbG9uIH0gPSBqdHNrMndnczg0KFxyXG4gICAgICAgIHBhcnNlRmxvYXQoZGF0YVtDb2x1bW4ueENvb3JkaW5hdGVdKSxcclxuICAgICAgICBwYXJzZUZsb2F0KGRhdGFbQ29sdW1uLnlDb29yZGluYXRlXSlcclxuICAgICAgKTtcclxuICAgICAgW2xhdE9yTnVsbCwgbG9uT3JOdWxsXSA9IFtsYXQudG9TdHJpbmcoKSwgbG9uLnRvU3RyaW5nKCldO1xyXG4gICAgfVxyXG4gICAgcGFyYW1zLnB1c2goXHJcbiAgICAgIGRhdGFbQ29sdW1uLmFkbUNvZGVdLFxyXG4gICAgICBub25FbXB0eU9yTnVsbChkYXRhW0NvbHVtbi5zdHJlZXRDb2RlXSksXHJcbiAgICAgIE9iamVjdFR5cGVzW2RhdGFbQ29sdW1uLm9iamVjdFR5cGVdXSxcclxuICAgICAgbm9uRW1wdHlPck51bGwoZGF0YVtDb2x1bW4uaG91c2VOdW1iZXJdKSxcclxuICAgICAgbm9uRW1wdHlPck51bGwoZGF0YVtDb2x1bW4ub3JpZW50YXRpb25hbE51bWJlcl0pLFxyXG4gICAgICBub25FbXB0eU9yTnVsbChkYXRhW0NvbHVtbi5vcmllbnRhdGlvbmFsTnVtYmVyTGV0dGVyXSksXHJcbiAgICAgIGRhdGFbQ29sdW1uLmNpdHlDb2RlXSxcclxuICAgICAgbm9uRW1wdHlPck51bGwoZGF0YVtDb2x1bW4uZGlzdHJpY3RDb2RlXSksXHJcbiAgICAgIG5vbkVtcHR5T3JOdWxsKGRhdGFbQ29sdW1uLm11bmljaXBhbGl0eVBhcnRDb2RlXSksXHJcbiAgICAgIG5vbkVtcHR5T3JOdWxsKGRhdGFbQ29sdW1uLnByYWd1ZURpc3RyaWN0Q29kZV0pLFxyXG4gICAgICBkYXRhW0NvbHVtbi5wb3N0YWxDb2RlXSxcclxuICAgICAgbm9uRW1wdHlPck51bGwoZGF0YVtDb2x1bW4ueENvb3JkaW5hdGVdKSxcclxuICAgICAgbm9uRW1wdHlPck51bGwoZGF0YVtDb2x1bW4ueUNvb3JkaW5hdGVdKSxcclxuICAgICAgbGF0T3JOdWxsLFxyXG4gICAgICBsb25Pck51bGxcclxuICAgICk7XHJcbiAgfSk7XHJcblxyXG4gIGNvbnN0IHBsYWNlSG9sZGVycyA9IGdlbmVyYXRlMkRQbGFjZWhvbGRlcnMoXHJcbiAgICBjb2x1bW5OYW1lcy5sZW5ndGgsXHJcbiAgICBidWZmZXIubGVuZ3RoXHJcbiAgKTtcclxuXHJcbiAgY29uc3Qga25leCA9IGdldEtuZXhEYigpO1xyXG4gIGF3YWl0IHJhd1F1ZXJ5KFxyXG4gICAgYElOU0VSVCAke1xyXG4gICAgICBpc015c3FsKGtuZXgpID8gXCJJR05PUkVcIiA6IFwiXCJcclxuICAgIH0gSU5UTyBhZGRyZXNzX3BvaW50ICgke2NvbHVtbk5hbWVzLmpvaW4oXCIsXCIpfSkgVkFMVUVTICR7cGxhY2VIb2xkZXJzfSAke1xyXG4gICAgICAhaXNNeXNxbChrbmV4KSA/IFwiT04gQ09ORkxJQ1QgKGlkKSBETyBOT1RISU5HXCIgOiBcIlwiXHJcbiAgICB9YCxcclxuICAgIHBhcmFtc1xyXG4gICk7XHJcblxyXG4gIHJldHVybiBidWZmZXIubGVuZ3RoO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGluc2VydENpdGllcyA9IGFzeW5jIChidWZmZXI6IHN0cmluZ1tdW10pOiBQcm9taXNlPG51bWJlcj4gPT4ge1xyXG4gIHJldHVybiBhd2FpdCBpbnNlcnRNdWx0aXBsZVJvd3MoXHJcbiAgICBleHRyYWN0S2V5VmFsdWVzUGFpcnMoYnVmZmVyLCBDb2x1bW4uY2l0eUNvZGUsIFtDb2x1bW4uY2l0eU5hbWVdKSxcclxuICAgIFwiY2l0eVwiLFxyXG4gICAgW1wiY29kZVwiLCBcIm5hbWVcIl1cclxuICApO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGluc2VydERpc3RyaWN0cyA9IGFzeW5jIChidWZmZXI6IHN0cmluZ1tdW10pOiBQcm9taXNlPG51bWJlcj4gPT4ge1xyXG4gIHJldHVybiBhd2FpdCBpbnNlcnRNdWx0aXBsZVJvd3MoXHJcbiAgICBleHRyYWN0S2V5VmFsdWVzUGFpcnMoYnVmZmVyLCBDb2x1bW4uZGlzdHJpY3RDb2RlLCBbXHJcbiAgICAgIENvbHVtbi5jaXR5Q29kZSxcclxuICAgICAgQ29sdW1uLmRpc3RyaWN0TmFtZSxcclxuICAgIF0pLFxyXG4gICAgXCJjaXR5X2Rpc3RyaWN0XCIsXHJcbiAgICBbXCJjb2RlXCIsIFwiY2l0eV9jb2RlXCIsIFwibmFtZVwiXVxyXG4gICk7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgaW5zZXJ0TXVuaWNpcGFsaXR5UGFydHMgPSBhc3luYyAoXHJcbiAgYnVmZmVyOiBzdHJpbmdbXVtdXHJcbik6IFByb21pc2U8bnVtYmVyPiA9PiB7XHJcbiAgcmV0dXJuIGF3YWl0IGluc2VydE11bHRpcGxlUm93cyhcclxuICAgIGV4dHJhY3RLZXlWYWx1ZXNQYWlycyhidWZmZXIsIENvbHVtbi5tdW5pY2lwYWxpdHlQYXJ0Q29kZSwgW1xyXG4gICAgICBDb2x1bW4ubXVuaWNpcGFsaXR5UGFydE5hbWUsXHJcbiAgICAgIENvbHVtbi5jaXR5Q29kZSxcclxuICAgIF0pLFxyXG4gICAgXCJtdW5pY2lwYWxpdHlfcGFydFwiLFxyXG4gICAgW1wiY29kZVwiLCBcIm5hbWVcIiwgXCJjaXR5X2NvZGVcIl1cclxuICApO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGluc2VydFByYWd1ZURpc3RyaWN0cyA9IGFzeW5jIChcclxuICBidWZmZXI6IHN0cmluZ1tdW11cclxuKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcclxuICByZXR1cm4gYXdhaXQgaW5zZXJ0TXVsdGlwbGVSb3dzKFxyXG4gICAgZXh0cmFjdEtleVZhbHVlc1BhaXJzKGJ1ZmZlciwgQ29sdW1uLnByYWd1ZURpc3RyaWN0Q29kZSwgW1xyXG4gICAgICBDb2x1bW4ucHJhZ3VlRGlzdHJpY3ROYW1lLFxyXG4gICAgXSksXHJcbiAgICBcInByYWd1ZV9kaXN0cmljdFwiLFxyXG4gICAgW1wiY29kZVwiLCBcIm5hbWVcIl1cclxuICApO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGluc2VydFN0cmVldHMgPSBhc3luYyAoYnVmZmVyOiBzdHJpbmdbXVtdKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcclxuICByZXR1cm4gYXdhaXQgaW5zZXJ0TXVsdGlwbGVSb3dzKFxyXG4gICAgZXh0cmFjdEtleVZhbHVlc1BhaXJzKGJ1ZmZlciwgQ29sdW1uLnN0cmVldENvZGUsIFtcclxuICAgICAgQ29sdW1uLmNpdHlDb2RlLFxyXG4gICAgICBDb2x1bW4uc3RyZWV0TmFtZSxcclxuICAgIF0pLFxyXG4gICAgXCJzdHJlZXRcIixcclxuICAgIFtcImNvZGVcIiwgXCJjaXR5X2NvZGVcIiwgXCJuYW1lXCJdXHJcbiAgKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBhcmVBZGRyZXNzUG9pbnRzU3luY2VkID0gYXN5bmMgKCk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xyXG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdldEtuZXhEYigpXHJcbiAgICAuY291bnQoXCIqXCIsIHsgYXM6IFwiY291bnRBbGxcIiB9KVxyXG4gICAgLmZyb20oXCJhZGRyZXNzX3BvaW50XCIpXHJcbiAgICAuZmlyc3QoKTtcclxuICByZXR1cm4gTnVtYmVyKHJlc3VsdC5jb3VudEFsbCkgPj0gMjkwMDAwMDsgLy8gdG90YWwgaXMgYWxtb3N0IDMgbWlsbGlvblxyXG59O1xyXG5cclxuY29uc3QgYWRkcmVzc1BvaW50U2VsZWN0ID0gYFxyXG4gIFNFTEVDVCBhLmlkLCBzLm5hbWUgQVMgc3RyZWV0X25hbWUsIG8ubmFtZSBBUyBvYmplY3RfdHlwZV9uYW1lLCBhLmRlc2NyaXB0aXZlX251bWJlcixcclxuICAgICAgICBhLm9yaWVudGF0aW9uYWxfbnVtYmVyLCBhLm9yaWVudGF0aW9uYWxfbnVtYmVyX2xldHRlciwgYy5uYW1lIEFTIGNpdHlfbmFtZSxcclxuICAgICAgICBtLm5hbWUgQVMgbXVuaWNpcGFsaXR5X3BhcnRfbmFtZSwgcC5uYW1lIEFTIHByYWd1ZV9kaXN0cmljdF9uYW1lLFxyXG4gICAgICAgIGQubmFtZSBBUyBkaXN0cmljdF9uYW1lLCBhLnBvc3RhbF9jb2RlLCBhLndnczg0X2xhdGl0dWRlLCBhLndnczg0X2xvbmdpdHVkZVxyXG4gIEZST00gYWRkcmVzc19wb2ludCBhXHJcbiAgTEVGVCBKT0lOIHN0cmVldCBzIE9OIGEuc3RyZWV0X2NvZGUgPSBzLmNvZGVcclxuICBJTk5FUiBKT0lOIG9iamVjdF90eXBlIG8gT04gby5pZCA9IGEub2JqZWN0X3R5cGVfaWRcclxuICBJTk5FUiBKT0lOIGNpdHkgYyBPTiBjLmNvZGUgPSBhLmNpdHlfY29kZVxyXG4gIExFRlQgSk9JTiBjaXR5X2Rpc3RyaWN0IGQgT04gYS5jaXR5X2Rpc3RyaWN0X2NvZGUgPSBkLmNvZGVcclxuICBMRUZUIEpPSU4gcHJhZ3VlX2Rpc3RyaWN0IHAgT04gYS5wcmFndWVfZGlzdHJpY3RfY29kZSA9IHAuY29kZVxyXG4gIExFRlQgSk9JTiBtdW5pY2lwYWxpdHlfcGFydCBtIE9OIGEubXVuaWNpcGFsaXR5X3BhcnRfY29kZSA9IG0uY29kZWA7XHJcblxyXG5leHBvcnQgY29uc3QgZ2V0QWRkcmVzc1BvaW50QnlJZCA9IGFzeW5jIChcclxuICBhZGRyZXNzUG9pbnRJZDogbnVtYmVyXHJcbik6IFByb21pc2U8QWRkcmVzc1BvaW50IHwgbnVsbD4gPT4ge1xyXG4gIGNvbnN0IHJvdyA9IGF3YWl0IHJhd1F1ZXJ5KFxyXG4gICAgYCR7YWRkcmVzc1BvaW50U2VsZWN0fVxyXG4gICAgICBXSEVSRSBhLmlkID0gP2AsXHJcbiAgICBbYWRkcmVzc1BvaW50SWRdXHJcbiAgKTtcclxuICBpZiAocm93Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG4gIHJldHVybiByb3dUb0FkZHJlc3NQb2ludChyb3dbMF0pO1xyXG59O1xyXG5cclxubGV0IGxhc3RGb3VuZGVyOiBGb3VuZGVyIHwgbnVsbCA9IG51bGw7XHJcbmxldCBhbGxTdHJlZXRzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuZXhwb3J0IGNvbnN0IGNoZWNrU3RyZWV0RXhpc3RzID0gYXN5bmMgKFxyXG4gIHN0cmVldE5hbWU6IHN0cmluZyxcclxuICBmb3VuZGVyOiBGb3VuZGVyXHJcbik6IFByb21pc2U8eyBleGlzdHM6IGJvb2xlYW47IGVycm9yczogU21kRXJyb3JbXSB9PiA9PiB7XHJcbiAgY29uc3Qga25leCA9IGdldEtuZXhEYigpO1xyXG4gIGNvbnN0IGVycm9yczogU21kRXJyb3JbXSA9IFtdO1xyXG5cclxuICAvLyB3ZSBjaGVjayB0aGUgd2hvbGUgY2l0eVxyXG4gIGNvbnN0IGNpdHlDb2RlID0gYXdhaXQgZ2V0Rm91bmRlckNpdHlDb2RlKGZvdW5kZXIpO1xyXG4gIGNvbnN0IHJvd0xpc3QgPSBhd2FpdCByYXdRdWVyeShcclxuICAgIGBTRUxFQ1QgbmFtZSBBUyBzdHJlZXRfbmFtZVxyXG4gICAgRlJPTSBzdHJlZXRcclxuICAgIFdIRVJFIGNpdHlfY29kZSA9ID8gQU5EIG5hbWUgPSA/ICAke1xyXG4gICAgICBpc1NxbGl0ZShrbmV4KSA/IFwiQ09MTEFURSBOT0NBU0VcIiA6IFwiXCJcclxuICAgIH1gLFxyXG4gICAgW2NpdHlDb2RlLCBzdHJlZXROYW1lXVxyXG4gICk7XHJcblxyXG4gIGlmIChyb3dMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgIGNvbnN0IHJvdyA9IHJvd0xpc3RbMF07XHJcbiAgICBpZiAocm93LnN0cmVldF9uYW1lICE9PSBzdHJlZXROYW1lKSB7XHJcbiAgICAgIC8vIGVycm9ycy5wdXNoKFxyXG4gICAgICAvLyAgIGBTdHJlZXQgJyR7c3RyZWV0TmFtZX0nIGhhcyB3cm9uZyBjYXNlLCBjb3JyZWN0IGNhc2U6ICcke3Jvdy5zdHJlZXRfbmFtZX0nLmBcclxuICAgICAgLy8gKTtcclxuICAgIH1cclxuICAgIHJldHVybiB7IGV4aXN0czogdHJ1ZSwgZXJyb3JzIH07XHJcbiAgfVxyXG5cclxuICBpZiAobGFzdEZvdW5kZXIgIT09IGZvdW5kZXIpIHtcclxuICAgIGFsbFN0cmVldHMgPSBhd2FpdCBnZXRBbGxTdHJlZXRzKGNpdHlDb2RlKTtcclxuICAgIGxhc3RGb3VuZGVyID0gZm91bmRlcjtcclxuICB9XHJcblxyXG4gIGNvbnN0IG1hdGNoID0gYWxsU3RyZWV0cy5maW5kKFxyXG4gICAgKHMpID0+XHJcbiAgICAgIHMudG9Mb2NhbGVMb3dlckNhc2UoXCJjcy1DWlwiKSA9PT0gc3RyZWV0TmFtZS50b0xvY2FsZUxvd2VyQ2FzZShcImNzLUNaXCIpXHJcbiAgKTtcclxuICBsZXQgZXhpc3RzID0gZmFsc2U7XHJcbiAgaWYgKG1hdGNoKSB7XHJcbiAgICBleGlzdHMgPSB0cnVlO1xyXG4gICAgaWYgKHN0cmVldE5hbWUgIT09IG1hdGNoKSB7XHJcbiAgICAgIC8vIGVycm9ycy5wdXNoKFxyXG4gICAgICAvLyAgIGBTdHJlZXQgJyR7c3RyZWV0TmFtZX0nIGhhcyB3cm9uZyBjYXNlLCBjb3JyZWN0IGNhc2U6ICcke21hdGNofScuYFxyXG4gICAgICAvLyApO1xyXG4gICAgfVxyXG4gIH0gZWxzZSB7XHJcbiAgICBjb25zdCBjbG9zZXN0ID0gZmluZENsb3Nlc3RTdHJpbmcoc3RyZWV0TmFtZSwgYWxsU3RyZWV0cyk7XHJcbiAgICBlcnJvcnMucHVzaCh7XHJcbiAgICAgIG1lc3NhZ2U6IGBVbGljZSAnJHtzdHJlZXROYW1lfScgdiB0w6l0byBvYmNpIG5lZXhpc3R1amUsIG15c2xlbGkganN0ZSAnJHtjbG9zZXN0fSc/YCxcclxuICAgICAgc3RhcnRPZmZzZXQ6IDAsXHJcbiAgICAgIGVuZE9mZnNldDogc3RyZWV0TmFtZS5sZW5ndGggKyAxLFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHJldHVybiB7IGV4aXN0czogZmFsc2UsIGVycm9ycyB9O1xyXG59O1xyXG5cclxuY29uc3QgZ2V0QWxsU3RyZWV0cyA9IGFzeW5jIChjaXR5Q29kZTogbnVtYmVyKTogUHJvbWlzZTxzdHJpbmdbXT4gPT4ge1xyXG4gIGNvbnN0IGtuZXggPSBnZXRLbmV4RGIoKTtcclxuICByZXR1cm4gYXdhaXQga25leC5wbHVjayhcIm5hbWVcIikuZnJvbShcInN0cmVldFwiKS53aGVyZShcImNpdHlfY29kZVwiLCBjaXR5Q29kZSk7XHJcbn07XHJcblxyXG5leHBvcnQgdHlwZSBGaW5kQWRkcmVzc1BvaW50c1BhcmFtcyA9XHJcbiAgfCB7XHJcbiAgICAgIHR5cGU6IFwic21kTGluZVwiO1xyXG4gICAgICBzbWRMaW5lOiBTbWRMaW5lO1xyXG4gICAgICBtdW5pY2lwYWxpdHk6IE11bmljaXBhbGl0eTtcclxuICAgICAgbXVuaWNpcGFsaXR5UGFydENvZGU/OiBudW1iZXI7XHJcbiAgICB9XHJcbiAgfCB7XHJcbiAgICAgIHR5cGU6IFwid2hvbGVNdW5pY2lwYWxpdHlQYXJ0XCI7XHJcbiAgICAgIG11bmljaXBhbGl0eVBhcnRDb2RlOiBudW1iZXI7XHJcbiAgICB9XHJcbiAgfCB7XHJcbiAgICAgIHR5cGU6IFwid2hvbGVNdW5pY2lwYWxpdHlcIjtcclxuICAgICAgbXVuaWNpcGFsaXR5OiBNdW5pY2lwYWxpdHk7XHJcbiAgICB9XHJcbiAgfCB7XHJcbiAgICAgIHR5cGU6IFwid2hvbGVNdW5pY2lwYWxpdHlOb1N0cmVldE5hbWVcIjtcclxuICAgICAgbXVuaWNpcGFsaXR5OiBNdW5pY2lwYWxpdHk7XHJcbiAgICB9O1xyXG5cclxuZXhwb3J0IGNvbnN0IGZpbmRBZGRyZXNzUG9pbnRzID0gYXN5bmMgKFxyXG4gIHBhcmFtczogRmluZEFkZHJlc3NQb2ludHNQYXJhbXNcclxuKTogUHJvbWlzZTxBZGRyZXNzUG9pbnRbXT4gPT4ge1xyXG4gIGNvbnN0IHF1ZXJ5UGFyYW1zID0gZ2V0UXVlcnlQYXJhbXMocGFyYW1zKTtcclxuICBjb25zdCBzdHJlZXRKb2luQ29uZGl0aW9uID0gZ2V0U3RyZWV0Sm9pbkNvbmRpdGlvbihwYXJhbXMpO1xyXG5cclxuICBjb25zdCB3aGVyZUNvbmRpdGlvbiA9IGdldFdoZXJlQ29uZGl0aW9uKHBhcmFtcyk7XHJcblxyXG4gIGNvbnN0IHF1ZXJ5UmVzdWx0ID0gYXdhaXQgcmF3UXVlcnkoXHJcbiAgICBgU0VMRUNUIGEuaWQsIHMubmFtZSBBUyBzdHJlZXRfbmFtZSwgby5uYW1lIEFTIG9iamVjdF90eXBlX25hbWUsIGEuZGVzY3JpcHRpdmVfbnVtYmVyLFxyXG4gICAgICBhLm9yaWVudGF0aW9uYWxfbnVtYmVyLCBhLm9yaWVudGF0aW9uYWxfbnVtYmVyX2xldHRlciwgYy5uYW1lIEFTIGNpdHlfbmFtZSxcclxuICAgICAgZC5uYW1lIEFTIGRpc3RyaWN0X25hbWUsIG0ubmFtZSBBUyBtdW5pY2lwYWxpdHlfcGFydF9uYW1lLCBwLm5hbWUgQVMgcHJhZ3VlX2Rpc3RyaWN0X25hbWUsXHJcbiAgICAgIGEucG9zdGFsX2NvZGUsIGEud2dzODRfbGF0aXR1ZGUsIGEud2dzODRfbG9uZ2l0dWRlXHJcbiAgICBGUk9NIGFkZHJlc3NfcG9pbnQgYVxyXG4gICAgJHtzdHJlZXRKb2luQ29uZGl0aW9ufVxyXG4gICAgSU5ORVIgSk9JTiBvYmplY3RfdHlwZSBvIE9OIG8uaWQgPSBhLm9iamVjdF90eXBlX2lkXHJcbiAgICBJTk5FUiBKT0lOIGNpdHkgYyBPTiBjLmNvZGUgPSBhLmNpdHlfY29kZVxyXG4gICAgTEVGVCBKT0lOIGNpdHlfZGlzdHJpY3QgZCBPTiBhLmNpdHlfZGlzdHJpY3RfY29kZSA9IGQuY29kZVxyXG4gICAgTEVGVCBKT0lOIG11bmljaXBhbGl0eV9wYXJ0IG0gT04gYS5tdW5pY2lwYWxpdHlfcGFydF9jb2RlID0gbS5jb2RlXHJcbiAgICBMRUZUIEpPSU4gcHJhZ3VlX2Rpc3RyaWN0IHAgT04gYS5wcmFndWVfZGlzdHJpY3RfY29kZSA9IHAuY29kZVxyXG4gICAgV0hFUkUgJHt3aGVyZUNvbmRpdGlvbn1gLFxyXG4gICAgcXVlcnlQYXJhbXNcclxuICApO1xyXG5cclxuICByZXR1cm4gZmlsdGVyQWRkcmVzc1BvaW50cyhxdWVyeVJlc3VsdC5tYXAocm93VG9BZGRyZXNzUG9pbnQpLCBwYXJhbXMpO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGZpbHRlckFkZHJlc3NQb2ludHMgPSAoXHJcbiAgYWRkcmVzc1BvaW50czogQWRkcmVzc1BvaW50W10sXHJcbiAgcGFyYW1zOiBGaW5kQWRkcmVzc1BvaW50c1BhcmFtc1xyXG4pOiBBZGRyZXNzUG9pbnRbXSA9PiB7XHJcbiAgaWYgKFxyXG4gICAgcGFyYW1zLnR5cGUgPT09IFwid2hvbGVNdW5pY2lwYWxpdHlcIiB8fFxyXG4gICAgcGFyYW1zLnR5cGUgPT09IFwid2hvbGVNdW5pY2lwYWxpdHlOb1N0cmVldE5hbWVcIiB8fFxyXG4gICAgcGFyYW1zLnR5cGUgPT09IFwid2hvbGVNdW5pY2lwYWxpdHlQYXJ0XCJcclxuICApIHtcclxuICAgIHJldHVybiBhZGRyZXNzUG9pbnRzO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgcmVzdWx0OiBBZGRyZXNzUG9pbnRbXSA9IFtdO1xyXG4gIGNvbnN0IG51bWJlclNwZWMgPSBwYXJhbXMuc21kTGluZS5udW1iZXJTcGVjO1xyXG4gIGlmIChpc1Nlcmllc1NwZWNBcnJheShudW1iZXJTcGVjKSkge1xyXG4gICAgbnVtYmVyU3BlYy5mb3JFYWNoKChzZXJpZXNTcGVjKSA9PiB7XHJcbiAgICAgIHJlc3VsdC5wdXNoKC4uLmZpbHRlckFkZHJlc3NQb2ludHNCeVJhbmdlcyhhZGRyZXNzUG9pbnRzLCBzZXJpZXNTcGVjKSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyB3aGVuIG5vIG51bWJlciBzcGVjcyBhcmUgcHJlc2VudCwgd2UgdGFrZSBldmVyeXRoaW5nXHJcbiAgICBpZiAobnVtYmVyU3BlYy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmVzdWx0LnB1c2goLi4uYWRkcmVzc1BvaW50cyk7XHJcbiAgICB9XHJcbiAgfSBlbHNlIGlmIChpc05lZ2F0aXZlU2VyaWVzU3BlYyhudW1iZXJTcGVjKSkge1xyXG4gICAgLy8gbmVnYXRpdmUgbnVtYmVyIHNwZWMgKGUuZy4gb2RkIG51bWJlcnMgZXhjZXB0IDEzLTE3KVxyXG4gICAgY29uc3QgdG9FeGNsdWRlID0gZmlsdGVyQWRkcmVzc1BvaW50c0J5UmFuZ2VzKGFkZHJlc3NQb2ludHMsIG51bWJlclNwZWMpO1xyXG4gICAgcmVzdWx0LnB1c2goXHJcbiAgICAgIC4uLmFkZHJlc3NQb2ludHMuZmlsdGVyKFxyXG4gICAgICAgIChhZGRyZXNzUG9pbnQpID0+ICF0b0V4Y2x1ZGUuaW5jbHVkZXMoYWRkcmVzc1BvaW50KVxyXG4gICAgICApXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHJlc3VsdDtcclxufTtcclxuXHJcbmNvbnN0IGZpbHRlckFkZHJlc3NQb2ludHNCeVJhbmdlcyA9IChcclxuICBhZGRyZXNzUG9pbnRzOiBBZGRyZXNzUG9pbnRbXSxcclxuICBzZXJpZXNTcGVjOiBTZXJpZXNTcGVjXHJcbik6IEFkZHJlc3NQb2ludFtdID0+IHtcclxuICBjb25zdCByZXN1bHQ6IEFkZHJlc3NQb2ludFtdID0gW107XHJcbiAgc2VyaWVzU3BlYy5yYW5nZXMuZm9yRWFjaCgocmFuZ2UpID0+IHtcclxuICAgIHJlc3VsdC5wdXNoKFxyXG4gICAgICAuLi5hZGRyZXNzUG9pbnRzLmZpbHRlcigoYWRkcmVzc1BvaW50KSA9PiB7XHJcbiAgICAgICAgaWYgKGlzUmFuZ2UocmFuZ2UpKSB7XHJcbiAgICAgICAgICBjb25zdCBudW1iZXIgPSBnZXROdW1iZXJCeVR5cGUoc2VyaWVzU3BlYy50eXBlLCBhZGRyZXNzUG9pbnQpO1xyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgaXNJblJhbmdlKFxyXG4gICAgICAgICAgICAgIG51bWJlcixcclxuICAgICAgICAgICAgICBzZXJpZXNTcGVjLnR5cGUgIT09IFNlcmllc1R5cGUuRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICAgID8gYWRkcmVzc1BvaW50Lm9yaWVudGF0aW9uYWxOdW1iZXJMZXR0ZXIgPz8gbnVsbFxyXG4gICAgICAgICAgICAgICAgOiBudWxsLFxyXG4gICAgICAgICAgICAgIHJhbmdlXHJcbiAgICAgICAgICAgICkgJiYgZml0c1R5cGUobnVtYmVyLCBzZXJpZXNTcGVjLnR5cGUpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCBmdWxsU3RyZWV0TnVtYmVyOiBGdWxsU3RyZWV0TnVtYmVyID0gcmFuZ2U7XHJcbiAgICAgICAgICByZXR1cm4gZXF1YWxzRnVsbFN0cmVldE51bWJlcihmdWxsU3RyZWV0TnVtYmVyLCBhZGRyZXNzUG9pbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfSk7XHJcblxyXG4gIC8vIHdoZW4gbm8gc2VyaWVzIHNwZWNzIGFyZSBwcmVzZW50LCB3ZSB0YWtlIGV2ZXJ5dGhpbmcgdGhhdCBmaXRzIHRoZSB0eXBlXHJcbiAgaWYgKHNlcmllc1NwZWMucmFuZ2VzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgcmVzdWx0LnB1c2goXHJcbiAgICAgIC4uLmFkZHJlc3NQb2ludHMuZmlsdGVyKChhZGRyZXNzUG9pbnQpID0+XHJcbiAgICAgICAgZml0c1R5cGUoXHJcbiAgICAgICAgICBnZXROdW1iZXJCeVR5cGUoc2VyaWVzU3BlYy50eXBlLCBhZGRyZXNzUG9pbnQpLFxyXG4gICAgICAgICAgc2VyaWVzU3BlYy50eXBlXHJcbiAgICAgICAgKVxyXG4gICAgICApXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHJlc3VsdDtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBnZXRRdWVyeVBhcmFtcyA9IChcclxuICBwYXJhbXM6IEZpbmRBZGRyZXNzUG9pbnRzUGFyYW1zXHJcbik6IChzdHJpbmcgfCBudW1iZXIpW10gPT4ge1xyXG4gIGlmIChwYXJhbXMudHlwZSA9PT0gXCJzbWRMaW5lXCIgJiYgcGFyYW1zLnNtZExpbmUudHlwZSA9PT0gXCJzdHJlZXRcIikge1xyXG4gICAgcmV0dXJuIFtwYXJhbXMuc21kTGluZS5zdHJlZXQsIHBhcmFtcy5tdW5pY2lwYWxpdHkuY29kZV07XHJcbiAgfVxyXG5cclxuICBpZiAoXHJcbiAgICAocGFyYW1zLnR5cGUgPT09IFwic21kTGluZVwiICYmIHBhcmFtcy5zbWRMaW5lLnR5cGUgPT09IFwibXVuaWNpcGFsaXR5UGFydFwiKSB8fFxyXG4gICAgcGFyYW1zLnR5cGUgPT09IFwid2hvbGVNdW5pY2lwYWxpdHlQYXJ0XCJcclxuICApIHtcclxuICAgIHJldHVybiBbcGFyYW1zLm11bmljaXBhbGl0eVBhcnRDb2RlXTtcclxuICB9XHJcblxyXG4gIHJldHVybiBbcGFyYW1zLm11bmljaXBhbGl0eS5jb2RlXTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBnZXRTdHJlZXRKb2luQ29uZGl0aW9uID0gKFxyXG4gIHBhcmFtczogRmluZEFkZHJlc3NQb2ludHNQYXJhbXNcclxuKTogc3RyaW5nID0+IHtcclxuICBpZiAocGFyYW1zLnR5cGUgPT09IFwic21kTGluZVwiICYmIHBhcmFtcy5zbWRMaW5lLnR5cGUgPT09IFwic3RyZWV0XCIpIHtcclxuICAgIHJldHVybiBgSk9JTiBzdHJlZXQgcyBPTiBhLnN0cmVldF9jb2RlID0gcy5jb2RlIEFORCBzLm5hbWUgPSA/ICR7XHJcbiAgICAgIGlzU3FsaXRlKGdldEtuZXhEYigpKSA/IFwiQ09MTEFURSBOT0NBU0VcIiA6IFwiXCJcclxuICAgIH1gO1xyXG4gIH1cclxuICByZXR1cm4gXCJMRUZUIEpPSU4gc3RyZWV0IHMgT04gYS5zdHJlZXRfY29kZSA9IHMuY29kZVwiO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGdldFdoZXJlQ29uZGl0aW9uID0gKHBhcmFtczogRmluZEFkZHJlc3NQb2ludHNQYXJhbXMpOiBzdHJpbmcgPT4ge1xyXG4gIGlmIChcclxuICAgIChwYXJhbXMudHlwZSA9PT0gXCJzbWRMaW5lXCIgJiYgcGFyYW1zLnNtZExpbmUudHlwZSA9PT0gXCJtdW5pY2lwYWxpdHlQYXJ0XCIpIHx8XHJcbiAgICBwYXJhbXMudHlwZSA9PT0gXCJ3aG9sZU11bmljaXBhbGl0eVBhcnRcIlxyXG4gICkge1xyXG4gICAgcmV0dXJuIFwiYS5tdW5pY2lwYWxpdHlfcGFydF9jb2RlID0gP1wiO1xyXG4gIH1cclxuXHJcbiAgaWYgKHBhcmFtcy50eXBlID09PSBcIndob2xlTXVuaWNpcGFsaXR5Tm9TdHJlZXROYW1lXCIpIHtcclxuICAgIHJldHVybiBgJHtnZXRNdW5pY2lwYWxpdHlXaGVyZShcclxuICAgICAgXCJhXCIsXHJcbiAgICAgIHBhcmFtcy5tdW5pY2lwYWxpdHlcclxuICAgICl9IEFORCBhLnN0cmVldF9jb2RlIElTIE5VTExgO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGdldE11bmljaXBhbGl0eVdoZXJlKFwiYVwiLCBwYXJhbXMubXVuaWNpcGFsaXR5KTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBpc0luUmFuZ2UgPSAoXHJcbiAgbnVtYmVyOiBudW1iZXIgfCBudWxsLFxyXG4gIGxldHRlcjogc3RyaW5nIHwgbnVsbCxcclxuICByYW5nZTogUmFuZ2VTcGVjXHJcbik6IGJvb2xlYW4gPT4ge1xyXG4gIGlmIChudW1iZXIgPT09IG51bGwpIHtcclxuICAgIHJldHVybiAhcmFuZ2UuZnJvbSAmJiAhcmFuZ2UudG87XHJcbiAgfVxyXG5cclxuICAvLyBleHBsYWluZXI6IGVpdGhlciB0aGUgbG93ZXIgYm91bmQgaXMgbm90IHNldCwgb3IgaXQgaXMgbG93ZXIgdGhhbiB0aGUgbnVtYmVyXHJcbiAgLy8gaWYgaXQncyBlcXVhbCB0byB0aGUgbnVtYmVyLCB3ZSBhbHNvIGhhdmUgdG8gY2hlY2sgdGhlIGxldHRlciAtIGlmIGl0J3Mgbm90IHNldCwgd2UgZG9uJ3QgY2FyZVxyXG4gIC8vIGlmIGZyb20ubGV0dGVyIGlzIHNldCwgd2UgbmVlZCB0byBoYXZlIGEgbGV0dGVyIHNldCBhbmQgaXQgaGFzIHRvIGJlIGdyZWF0ZXIgb3IgZXF1YWw6XHJcbiAgLy8gbnVtYmVyIHdpdGhvdXQgbGV0dGVyIGNvdW50cyBsb3dlciB0aGFuIG51bWJlciB3aXRoIGxldHRlciAnYScgKGUuZy4gMjMgPCAyM2EpXHJcbiAgY29uc3Qgc2F0aXNmaWVzRnJvbSA9XHJcbiAgICAhcmFuZ2UuZnJvbSB8fFxyXG4gICAgbnVtYmVyID4gcmFuZ2UuZnJvbS5udW1iZXIgfHxcclxuICAgIChudW1iZXIgPT09IHJhbmdlLmZyb20ubnVtYmVyICYmXHJcbiAgICAgICghcmFuZ2UuZnJvbS5sZXR0ZXIgfHwgKCEhbGV0dGVyICYmIGxldHRlciA+PSByYW5nZS5mcm9tLmxldHRlcikpKTtcclxuXHJcbiAgY29uc3Qgc2F0aXNmaWVzVG8gPVxyXG4gICAgIXJhbmdlLnRvIHx8XHJcbiAgICBudW1iZXIgPCByYW5nZS50by5udW1iZXIgfHxcclxuICAgIChudW1iZXIgPT09IHJhbmdlLnRvLm51bWJlciAmJlxyXG4gICAgICAoIWxldHRlciB8fFxyXG4gICAgICAgICghIXJhbmdlLnRvLmxldHRlciAmJiAhIWxldHRlciAmJiBsZXR0ZXIgPD0gcmFuZ2UudG8ubGV0dGVyKSkpO1xyXG5cclxuICByZXR1cm4gc2F0aXNmaWVzRnJvbSAmJiBzYXRpc2ZpZXNUbztcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBmaXRzVHlwZSA9IChudW1iZXI6IG51bWJlciB8IG51bGwsIHR5cGU6IFNlcmllc1R5cGUpOiBib29sZWFuID0+IHtcclxuICByZXR1cm4gKFxyXG4gICAgdHlwZSA9PT0gU2VyaWVzVHlwZS5EZXNjcmlwdGlvbiB8fFxyXG4gICAgdHlwZSA9PT0gU2VyaWVzVHlwZS5BbGwgfHxcclxuICAgICh0eXBlID09PSBTZXJpZXNUeXBlLk9kZCAmJiBudW1iZXIgJSAyID09PSAxKSB8fFxyXG4gICAgKHR5cGUgPT09IFNlcmllc1R5cGUuRXZlbiAmJiBudW1iZXIgJSAyID09PSAwKVxyXG4gICk7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgZXF1YWxzRnVsbFN0cmVldE51bWJlciA9IChcclxuICBmdWxsU3RyZWV0TnVtYmVyOiBGdWxsU3RyZWV0TnVtYmVyLFxyXG4gIGFkZHJlc3NQb2ludDogQWRkcmVzc1BvaW50XHJcbik6IGJvb2xlYW4gPT4ge1xyXG4gIHJldHVybiAoXHJcbiAgICBmdWxsU3RyZWV0TnVtYmVyLmRlc2NyaXB0aW9uTnVtYmVyLm51bWJlciA9PT0gYWRkcmVzc1BvaW50LmhvdXNlTnVtYmVyICYmXHJcbiAgICBmdWxsU3RyZWV0TnVtYmVyLm9yaWVudGF0aW9uYWxOdW1iZXIubnVtYmVyID09PVxyXG4gICAgICBhZGRyZXNzUG9pbnQub3JpZW50YXRpb25hbE51bWJlciAmJlxyXG4gICAgKCghZnVsbFN0cmVldE51bWJlci5vcmllbnRhdGlvbmFsTnVtYmVyLmxldHRlciAmJlxyXG4gICAgICAhYWRkcmVzc1BvaW50Lm9yaWVudGF0aW9uYWxOdW1iZXJMZXR0ZXIpIHx8XHJcbiAgICAgIGZ1bGxTdHJlZXROdW1iZXIub3JpZW50YXRpb25hbE51bWJlci5sZXR0ZXIgPT09XHJcbiAgICAgICAgYWRkcmVzc1BvaW50Lm9yaWVudGF0aW9uYWxOdW1iZXJMZXR0ZXIpXHJcbiAgKTtcclxufTtcclxuXHJcbmNvbnN0IGdldE51bWJlckJ5VHlwZSA9IChcclxuICB0eXBlOiBTZXJpZXNUeXBlLFxyXG4gIGFkZHJlc3NQb2ludDogQWRkcmVzc1BvaW50XHJcbik6IG51bWJlciB8IG51bGwgPT4ge1xyXG4gIHJldHVybiB0eXBlID09PSBTZXJpZXNUeXBlLkRlc2NyaXB0aW9uXHJcbiAgICA/IGFkZHJlc3NQb2ludC5ob3VzZU51bWJlclxyXG4gICAgOiBhZGRyZXNzUG9pbnQub3JpZW50YXRpb25hbE51bWJlciA/PyBudWxsO1xyXG59O1xyXG5cclxuY29uc3QgZ2V0TXVuaWNpcGFsaXR5V2hlcmUgPSAoXHJcbiAgYWxpYXM6IHN0cmluZyxcclxuICBtdW5pY2lwYWxpdHk6IE11bmljaXBhbGl0eVxyXG4pOiBzdHJpbmcgPT4ge1xyXG4gIHJldHVybiBtdW5pY2lwYWxpdHkudHlwZSA9PT0gTXVuaWNpcGFsaXR5VHlwZS5DaXR5XHJcbiAgICA/IGAke2FsaWFzfS5jaXR5X2NvZGUgPSA/YFxyXG4gICAgOiBgJHthbGlhc30uY2l0eV9kaXN0cmljdF9jb2RlID0gP2A7XHJcbn07XHJcblxyXG5jb25zdCByb3dUb0FkZHJlc3NQb2ludCA9IChyb3c6IGFueSk6IEFkZHJlc3NQb2ludCA9PiB7XHJcbiAgY29uc3QgcG9pbnQ6IEFkZHJlc3NQb2ludCA9IHtcclxuICAgIGlkOiByb3cuaWQsXHJcbiAgICBhZGRyZXNzOiBcIlwiLFxyXG4gICAgdHlwZTpcclxuICAgICAgcm93Lm9iamVjdF90eXBlX25hbWUgPT09IERlc2NyaXB0aXZlVHlwZVxyXG4gICAgICAgID8gQWRkcmVzc1BvaW50VHlwZS5EZXNjcmlwdGlvblxyXG4gICAgICAgIDogQWRkcmVzc1BvaW50VHlwZS5SZWdpc3RyYXRpb24sXHJcbiAgICBob3VzZU51bWJlcjogcm93LmRlc2NyaXB0aXZlX251bWJlcixcclxuICAgIGNpdHk6IHJvdy5jaXR5X25hbWUsXHJcbiAgICBtdW5pY2lwYWxpdHlQYXJ0OiByb3cubXVuaWNpcGFsaXR5X3BhcnRfbmFtZSxcclxuICAgIHBvc3RhbENvZGU6IHJvdy5wb3N0YWxfY29kZSxcclxuICAgIGxhdDogcm93Lndnczg0X2xhdGl0dWRlLFxyXG4gICAgbG5nOiByb3cud2dzODRfbG9uZ2l0dWRlLFxyXG4gIH07XHJcbiAgaWYgKHJvdy5zdHJlZXRfbmFtZSAhPT0gbnVsbCkge1xyXG4gICAgcG9pbnQuc3RyZWV0ID0gcm93LnN0cmVldF9uYW1lO1xyXG4gIH1cclxuICBpZiAocm93Lm9yaWVudGF0aW9uYWxfbnVtYmVyICE9PSBudWxsKSB7XHJcbiAgICBwb2ludC5vcmllbnRhdGlvbmFsTnVtYmVyID0gcm93Lm9yaWVudGF0aW9uYWxfbnVtYmVyO1xyXG4gIH1cclxuICBpZiAocm93Lm9yaWVudGF0aW9uYWxfbnVtYmVyX2xldHRlciAhPT0gbnVsbCkge1xyXG4gICAgcG9pbnQub3JpZW50YXRpb25hbE51bWJlckxldHRlciA9IHJvdy5vcmllbnRhdGlvbmFsX251bWJlcl9sZXR0ZXI7XHJcbiAgfVxyXG4gIGlmIChyb3cuZGlzdHJpY3RfbmFtZSAhPT0gbnVsbCkge1xyXG4gICAgcG9pbnQuZGlzdHJpY3QgPSByb3cuZGlzdHJpY3RfbmFtZTtcclxuICB9XHJcbiAgaWYgKHJvdy5wcmFndWVfZGlzdHJpY3RfbmFtZSAhPT0gbnVsbCkge1xyXG4gICAgcG9pbnQucHJhZ3VlRGlzdHJpY3QgPSByb3cucHJhZ3VlX2Rpc3RyaWN0X25hbWU7XHJcbiAgfVxyXG4gIHBvaW50LmFkZHJlc3MgPSBjcmVhdGVTaW5nbGVMaW5lQWRkcmVzcyhwb2ludCk7XHJcbiAgcmV0dXJuIHBvaW50O1xyXG59O1xyXG4iXX0=
@@ -1,5 +1,7 @@
1
- import { FeatureCollection, MultiPolygon, Polygon } from "@turf/helpers";
1
+ import { FeatureCollection } from "@turf/helpers";
2
+ import { PolygonsByCodes } from "./types";
2
3
  export declare const insertCityPositions: (data: string[][]) => Promise<number>;
3
4
  export declare const insertCities: (buffer: string[][]) => Promise<number>;
4
- export declare const setCityPolygonGeojson: (polygon: FeatureCollection, code: string) => Promise<void>;
5
- export declare const getCityPolygonGeojsons: (cityCodes: number[]) => Promise<Record<number, FeatureCollection<Polygon | MultiPolygon>>>;
5
+ export declare const setCityPolygonGeojson: (code: string, polygon: FeatureCollection, districtsPolygon?: FeatureCollection) => Promise<void>;
6
+ export declare const getCityPolygons: (cityCodes: Set<number>) => Promise<PolygonsByCodes>;
7
+ export declare const getDistrictPolygons: (districtCodes: Set<number>) => Promise<PolygonsByCodes>;
package/dist/db/cities.js CHANGED
@@ -46,19 +46,56 @@ export const insertCities = (buffer) => __awaiter(void 0, void 0, void 0, functi
46
46
  citiesColumn.cityName,
47
47
  ]), "city", ["code", "name"]);
48
48
  });
49
- export const setCityPolygonGeojson = (polygon, code) => __awaiter(void 0, void 0, void 0, function* () {
49
+ export const setCityPolygonGeojson = (code, polygon, districtsPolygon) => __awaiter(void 0, void 0, void 0, function* () {
50
50
  yield getKnexDb()
51
51
  .from("city")
52
- .update({ polygon_geojson: JSON.stringify(polygon) })
52
+ .update(Object.assign({ polygon_geojson: JSON.stringify(polygon) }, (districtsPolygon
53
+ ? { districts_polygon_geojson: JSON.stringify(districtsPolygon) }
54
+ : {})))
53
55
  .where({ code });
54
56
  });
55
- export const getCityPolygonGeojsons = (cityCodes) => __awaiter(void 0, void 0, void 0, function* () {
56
- const rows = yield getKnexDb()
57
+ export const getCityPolygons = (cityCodes) => __awaiter(void 0, void 0, void 0, function* () {
58
+ if (cityCodes.size === 0) {
59
+ return {};
60
+ }
61
+ const cityRows = yield getKnexDb()
57
62
  .from("city")
58
63
  .select("code", "polygon_geojson")
59
- .whereIn("code", cityCodes);
60
- return rows.reduce((acc, row) => {
64
+ .whereIn("code", Array.from(cityCodes));
65
+ return cityRows.reduce((acc, row) => {
61
66
  acc[row.code] = JSON.parse(row.polygon_geojson);
62
67
  return acc;
63
68
  }, {});
64
69
  });
70
+ export const getDistrictPolygons = (districtCodes) => __awaiter(void 0, void 0, void 0, function* () {
71
+ if (districtCodes.size === 0) {
72
+ return {};
73
+ }
74
+ const cityCodes = (yield getKnexDb()
75
+ .from("city_district")
76
+ .select("city_code")
77
+ .whereIn("code", Array.from(districtCodes))
78
+ .groupBy("city_code")).map((row) => row.city_code);
79
+ const cityRows = yield getKnexDb()
80
+ .from("city")
81
+ .select("code", "districts_polygon_geojson")
82
+ .whereIn("code", cityCodes);
83
+ const districtPolygons = {};
84
+ for (const row of cityRows) {
85
+ if (row.districts_polygon_geojson) {
86
+ const polygons = JSON.parse(row.districts_polygon_geojson);
87
+ for (const feature of polygons.features) {
88
+ if (districtCodes.has(Number(feature.properties.KOD))) {
89
+ districtPolygons[feature.properties.KOD] = {
90
+ type: "FeatureCollection",
91
+ features: [
92
+ Object.assign(Object.assign({}, feature), { properties: { code: feature.properties.KOD } }),
93
+ ],
94
+ };
95
+ }
96
+ }
97
+ }
98
+ }
99
+ return districtPolygons;
100
+ });
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2l0aWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RiL2NpdGllcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUssTUFBTSxjQUFjLENBQUM7QUFDakMsT0FBTyxFQUNMLHFCQUFxQixFQUNyQixTQUFTLEVBQ1Qsa0JBQWtCLEVBQ2xCLFFBQVEsR0FDVCxNQUFNLE1BQU0sQ0FBQztBQUlkLE1BQU0sWUFBWSxHQUFHO0lBQ25CLFFBQVEsRUFBRSxDQUFDO0lBQ1gsUUFBUSxFQUFFLENBQUM7SUFDWCxVQUFVLEVBQUUsQ0FBQztJQUNiLFVBQVUsRUFBRSxDQUFDO0lBQ2IsVUFBVSxFQUFFLENBQUM7SUFDYixVQUFVLEVBQUUsQ0FBQztJQUNiLFVBQVUsRUFBRSxDQUFDO0lBQ2IsUUFBUSxFQUFFLENBQUM7SUFDWCxTQUFTLEVBQUUsQ0FBQztDQUNiLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxDQUNqQyxJQUFnQixFQUNDLEVBQUU7SUFDbkIsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBRWhCLG9FQUFvRTtJQUNwRSwrREFBK0Q7SUFDL0QsT0FBTyxJQUFJLE1BQU0sWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BDLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQztJQUVyQixLQUFLLE1BQU0sVUFBVSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUU7UUFDMUMsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ25CLEtBQUssTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFO1lBQzVCLE9BQU8sQ0FBQyxJQUFJLENBQ1YsUUFBUSxDQUNOLHdFQUF3RSxFQUN4RTtnQkFDRSxHQUFHLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQztnQkFDMUIsR0FBRyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUM7Z0JBQzNCLEdBQUcsQ0FBQyxZQUFZLENBQUMs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QztTQUMzQyxPQUFPLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRTlCLE1BQU0sZ0JBQWdCLEdBQW9CLEVBQUUsQ0FBQztJQUM3QyxLQUFLLE1BQU0sR0FBRyxJQUFJLFFBQVEsRUFBRTtRQUMxQixJQUFJLEdBQUcsQ0FBQyx5QkFBeUIsRUFBRTtZQUNqQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUN6QixHQUFHLENBQUMseUJBQXlCLENBQ2UsQ0FBQztZQUMvQyxLQUFLLE1BQU0sT0FBTyxJQUFJLFFBQVEsQ0FBQyxRQUFRLEVBQUU7Z0JBQ3ZDLElBQUksYUFBYSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO29CQUNyRCxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHO3dCQUN6QyxJQUFJLEVBQUUsbUJBQW1CO3dCQUN6QixRQUFRLEVBQUU7NERBQ0gsT0FBTyxLQUFFLFVBQVUsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRTt5QkFDM0Q7cUJBQ0YsQ0FBQztpQkFDSDthQUNGO1NBQ0Y7S0FDRjtJQUVELE9BQU8sZ0JBQWdCLENBQUM7QUFDMUIsQ0FBQyxDQUFBLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY2h1bmsgZnJvbSBcImxvZGFzaC9jaHVua1wiO1xyXG5pbXBvcnQge1xyXG4gIGV4dHJhY3RLZXlWYWx1ZXNQYWlycyxcclxuICBnZXRLbmV4RGIsXHJcbiAgaW5zZXJ0TXVsdGlwbGVSb3dzLFxyXG4gIHJhd1F1ZXJ5LFxyXG59IGZyb20gXCIuL2RiXCI7XHJcbmltcG9ydCB7IEZlYXR1cmVDb2xsZWN0aW9uLCBNdWx0aVBvbHlnb24sIFBvbHlnb24gfSBmcm9tIFwiQHR1cmYvaGVscGVyc1wiO1xyXG5pbXBvcnQgeyBQb2x5Z29uc0J5Q29kZXMgfSBmcm9tIFwiLi90eXBlc1wiO1xyXG5cclxuY29uc3QgY2l0aWVzQ29sdW1uID0ge1xyXG4gIGNpdHlOYW1lOiAwLFxyXG4gIGNpdHlDb2RlOiAxLFxyXG4gIGNvdW50eU5hbWU6IDIsXHJcbiAgY291bnR5Q29kZTogMyxcclxuICByZWdpb25OYW1lOiA0LFxyXG4gIHJlZ2lvbkNvZGU6IDUsXHJcbiAgcG9zdGFsQ29kZTogNixcclxuICBsYXRpdHVkZTogNyxcclxuICBsb25naXR1ZGU6IDgsXHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgaW5zZXJ0Q2l0eVBvc2l0aW9ucyA9IGFzeW5jIChcclxuICBkYXRhOiBzdHJpbmdbXVtdXHJcbik6IFByb21pc2U8bnVtYmVyPiA9PiB7XHJcbiAgbGV0IGNoYW5nZXMgPSAwO1xyXG5cclxuICAvLyBjaXRpZXMgYXJlIG1vc3QgbGlrZWx5IGFscmVhZHkgaW5zZXJ0ZWQsIGJ1dCBpbiBjYXNlIHRoZXkncmUgbm90LFxyXG4gIC8vIHdlIG5lZWQgdG8gaW5zZXJ0IHRoZW0gYmVmb3JlIHVwZGF0aW5nIHRoZW0gd2l0aCByZWdpb24gZGF0YVxyXG4gIGNoYW5nZXMgKz0gYXdhaXQgaW5zZXJ0Q2l0aWVzKGRhdGEpO1xyXG4gIGNvbnN0IHByZXYgPSBjaGFuZ2VzO1xyXG5cclxuICBmb3IgKGNvbnN0IGFycmF5Q2h1bmsgb2YgY2h1bmsoZGF0YSwgMTAwMCkpIHtcclxuICAgIGNvbnN0IHF1ZXJpZXMgPSBbXTtcclxuICAgIGZvciAoY29uc3Qgcm93IG9mIGFycmF5Q2h1bmspIHtcclxuICAgICAgcXVlcmllcy5wdXNoKFxyXG4gICAgICAgIHJhd1F1ZXJ5KFxyXG4gICAgICAgICAgYFVQREFURSBjaXR5IFNFVCB3Z3M4NF9sYXRpdHVkZSA9ID8sIHdnczg0X2xvbmdpdHVkZSA9ID8gV0hFUkUgY29kZSA9ID9gLFxyXG4gICAgICAgICAgW1xyXG4gICAgICAgICAgICByb3dbY2l0aWVzQ29sdW1uLmxhdGl0dWRlXSxcclxuICAgICAgICAgICAgcm93W2NpdGllc0NvbHVtbi5sb25naXR1ZGVdLFxyXG4gICAgICAgICAgICByb3dbY2l0aWVzQ29sdW1uLmNpdHlDb2RlXSxcclxuICAgICAgICAgIF1cclxuICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBhd2FpdCBQcm9taXNlLmFsbChxdWVyaWVzKTtcclxuICAgIGNoYW5nZXMgKz0gcXVlcmllcy5sZW5ndGg7XHJcbiAgICBjb25zb2xlLmxvZyhgRG9uZSAke2NoYW5nZXMgLSBwcmV2fSAvICR7ZGF0YS5sZW5ndGh9IHJvd3MuLi5gKTtcclxuICB9XHJcblxyXG4gIHJldHVybiBjaGFuZ2VzO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGluc2VydENpdGllcyA9IGFzeW5jIChidWZmZXI6IHN0cmluZ1tdW10pOiBQcm9taXNlPG51bWJlcj4gPT4ge1xyXG4gIHJldHVybiBhd2FpdCBpbnNlcnRNdWx0aXBsZVJvd3MoXHJcbiAgICBleHRyYWN0S2V5VmFsdWVzUGFpcnMoYnVmZmVyLCBjaXRpZXNDb2x1bW4uY2l0eUNvZGUsIFtcclxuICAgICAgY2l0aWVzQ29sdW1uLmNpdHlOYW1lLFxyXG4gICAgXSksXHJcbiAgICBcImNpdHlcIixcclxuICAgIFtcImNvZGVcIiwgXCJuYW1lXCJdXHJcbiAgKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBzZXRDaXR5UG9seWdvbkdlb2pzb24gPSBhc3luYyAoXHJcbiAgY29kZTogc3RyaW5nLFxyXG4gIHBvbHlnb246IEZlYXR1cmVDb2xsZWN0aW9uLFxyXG4gIGRpc3RyaWN0c1BvbHlnb24/OiBGZWF0dXJlQ29sbGVjdGlvblxyXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcclxuICBhd2FpdCBnZXRLbmV4RGIoKVxyXG4gICAgLmZyb20oXCJjaXR5XCIpXHJcbiAgICAudXBkYXRlKHtcclxuICAgICAgcG9seWdvbl9nZW9qc29uOiBKU09OLnN0cmluZ2lmeShwb2x5Z29uKSxcclxuICAgICAgLi4uKGRpc3RyaWN0c1BvbHlnb25cclxuICAgICAgICA/IHsgZGlzdHJpY3RzX3BvbHlnb25fZ2VvanNvbjogSlNPTi5zdHJpbmdpZnkoZGlzdHJpY3RzUG9seWdvbikgfVxyXG4gICAgICAgIDoge30pLFxyXG4gICAgfSlcclxuICAgIC53aGVyZSh7IGNvZGUgfSk7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgZ2V0Q2l0eVBvbHlnb25zID0gYXN5bmMgKFxyXG4gIGNpdHlDb2RlczogU2V0PG51bWJlcj5cclxuKTogUHJvbWlzZTxQb2x5Z29uc0J5Q29kZXM+ID0+IHtcclxuICBpZiAoY2l0eUNvZGVzLnNpemUgPT09IDApIHtcclxuICAgIHJldHVybiB7fTtcclxuICB9XHJcbiAgY29uc3QgY2l0eVJvd3MgPSBhd2FpdCBnZXRLbmV4RGIoKVxyXG4gICAgLmZyb20oXCJjaXR5XCIpXHJcbiAgICAuc2VsZWN0KFwiY29kZVwiLCBcInBvbHlnb25fZ2VvanNvblwiKVxyXG4gICAgLndoZXJlSW4oXCJjb2RlXCIsIEFycmF5LmZyb20oY2l0eUNvZGVzKSk7XHJcblxyXG4gIHJldHVybiBjaXR5Um93cy5yZWR1Y2UoKGFjYywgcm93KSA9PiB7XHJcbiAgICBhY2Nbcm93LmNvZGVdID0gSlNPTi5wYXJzZShyb3cucG9seWdvbl9nZW9qc29uKTtcclxuICAgIHJldHVybiBhY2M7XHJcbiAgfSwge30pO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGdldERpc3RyaWN0UG9seWdvbnMgPSBhc3luYyAoXHJcbiAgZGlzdHJpY3RDb2RlczogU2V0PG51bWJlcj5cclxuKTogUHJvbWlzZTxQb2x5Z29uc0J5Q29kZXM+ID0+IHtcclxuICBpZiAoZGlzdHJpY3RDb2Rlcy5zaXplID09PSAwKSB7XHJcbiAgICByZXR1cm4ge307XHJcbiAgfVxyXG4gIGNvbnN0IGNpdHlDb2RlcyA9IChcclxuICAgIGF3YWl0IGdldEtuZXhEYigpXHJcbiAgICAgIC5mcm9tKFwiY2l0eV9kaXN0cmljdFwiKVxyXG4gICAgICAuc2VsZWN0KFwiY2l0eV9jb2RlXCIpXHJcbiAgICAgIC53aGVyZUluKFwiY29kZVwiLCBBcnJheS5mcm9tKGRpc3RyaWN0Q29kZXMpKVxyXG4gICAgICAuZ3JvdXBCeShcImNpdHlfY29kZVwiKVxyXG4gICkubWFwKChyb3cpID0+IHJvdy5jaXR5X2NvZGUpO1xyXG5cclxuICBjb25zdCBjaXR5Um93cyA9IGF3YWl0IGdldEtuZXhEYigpXHJcbiAgICAuZnJvbShcImNpdHlcIilcclxuICAgIC5zZWxlY3QoXCJjb2RlXCIsIFwiZGlzdHJpY3RzX3BvbHlnb25fZ2VvanNvblwiKVxyXG4gICAgLndoZXJlSW4oXCJjb2RlXCIsIGNpdHlDb2Rlcyk7XHJcblxyXG4gIGNvbnN0IGRpc3RyaWN0UG9seWdvbnM6IFBvbHlnb25zQnlDb2RlcyA9IHt9O1xyXG4gIGZvciAoY29uc3Qgcm93IG9mIGNpdHlSb3dzKSB7XHJcbiAgICBpZiAocm93LmRpc3RyaWN0c19wb2x5Z29uX2dlb2pzb24pIHtcclxuICAgICAgY29uc3QgcG9seWdvbnMgPSBKU09OLnBhcnNlKFxyXG4gICAgICAgIHJvdy5kaXN0cmljdHNfcG9seWdvbl9nZW9qc29uXHJcbiAgICAgICkgYXMgRmVhdHVyZUNvbGxlY3Rpb248UG9seWdvbiB8IE11bHRpUG9seWdvbj47XHJcbiAgICAgIGZvciAoY29uc3QgZmVhdHVyZSBvZiBwb2x5Z29ucy5mZWF0dXJlcykge1xyXG4gICAgICAgIGlmIChkaXN0cmljdENvZGVzLmhhcyhOdW1iZXIoZmVhdHVyZS5wcm9wZXJ0aWVzLktPRCkpKSB7XHJcbiAgICAgICAgICBkaXN0cmljdFBvbHlnb25zW2ZlYXR1cmUucHJvcGVydGllcy5LT0RdID0ge1xyXG4gICAgICAgICAgICB0eXBlOiBcIkZlYXR1cmVDb2xsZWN0aW9uXCIsXHJcbiAgICAgICAgICAgIGZlYXR1cmVzOiBbXHJcbiAgICAgICAgICAgICAgeyAuLi5mZWF0dXJlLCBwcm9wZXJ0aWVzOiB7IGNvZGU6IGZlYXR1cmUucHJvcGVydGllcy5LT0QgfSB9LFxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiBkaXN0cmljdFBvbHlnb25zO1xyXG59O1xyXG4iXX0=
package/dist/db/db.js CHANGED
@@ -197,3 +197,4 @@ export const extractKeyValuesPairs = (array, keyIndex, valuesIndices) => {
197
197
  }, {});
198
198
  return Object.keys(object).map((key) => [key, ...object[key]]);
199
199
  };
200
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGIvZGIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUN0QyxPQUFPLElBQWMsTUFBTSxNQUFNLENBQUM7QUFDbEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLEtBQUssQ0FBQztBQVdwQyxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsRCxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7QUFFdEMsTUFBTSxDQUFOLElBQVksZUFJWDtBQUpELFdBQVksZUFBZTtJQUN6QixvQ0FBaUIsQ0FBQTtJQUNqQix3Q0FBcUIsQ0FBQTtJQUNyQixrQ0FBZSxDQUFBO0FBQ2pCLENBQUMsRUFKVyxlQUFlLEtBQWYsZUFBZSxRQUkxQjtBQUVELE1BQU0sNEJBQTRCLEdBQUcseUNBQXlDLENBQUM7QUFFL0UsTUFBTSxRQUFRLEdBQUc7SUFDZixDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsRUFBRSxnQkFBZ0I7SUFDMUMsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSTtJQUNoQyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPO0NBQ2pDLENBQUM7QUFFRixNQUFNLFFBQVEsR0FBYTtJQUN6QixNQUFNLEVBQUUsZUFBZSxDQUFDLE1BQU07SUFDOUIsUUFBUSxFQUFFLG1CQUFtQjtJQUM3QixZQUFZLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsd0JBQXdCLENBQUM7SUFDN0QsT0FBTyxFQUFFLEtBQUs7Q0FDZixDQUFDO0FBRUYsSUFBSSxPQUFPLEdBQVMsU0FBUyxDQUFDO0FB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RUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pFLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbmZpZ0RvdGVudiB9IGZyb20gXCJkb3RlbnZcIjtcclxuaW1wb3J0IGtuZXgsIHsgS25leCB9IGZyb20gXCJrbmV4XCI7XHJcbmltcG9ydCB7IGRpcm5hbWUsIGpvaW4gfSBmcm9tIFwicGF0aFwiO1xyXG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSBcInVybFwiO1xyXG5cclxuaW50ZXJmYWNlIERiQ29uZmlnIHtcclxuICBkYlR5cGU6IFN1cHBvcnRlZERiVHlwZTtcclxuICBwZ0Nvbm5lY3Rpb25TdHJpbmc/OiBzdHJpbmc7XHJcbiAgbXlzcWxDb25uZWN0aW9uU3RyaW5nPzogc3RyaW5nO1xyXG4gIGluaXRGaWxlUGF0aDogc3RyaW5nO1xyXG4gIGZpbGVQYXRoPzogc3RyaW5nO1xyXG4gIHZlcmJvc2U6IGJvb2xlYW47XHJcbn1cclxuXHJcbmNvbnN0IF9fZmlsZW5hbWUgPSBmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCk7XHJcbmNvbnN0IF9fZGlybmFtZSA9IGRpcm5hbWUoX19maWxlbmFtZSk7XHJcblxyXG5leHBvcnQgZW51bSBTdXBwb3J0ZWREYlR5cGUge1xyXG4gIHNxbGl0ZSA9IFwic3FsaXRlXCIsXHJcbiAgcG9zdGdyZXMgPSBcInBvc3RncmVzXCIsXHJcbiAgbXlzcWwgPSBcIm15c3FsXCIsXHJcbn1cclxuXHJcbmNvbnN0IG15c3FsQ29ubmVjdGlvblN0cmluZ1BhdHRlcm4gPSAvXihbXjpdKyk6KFxcZCspOihbXjpdKyk6KFteOl0rKTooW146XSspJC87XHJcblxyXG5jb25zdCBEYkNsaWVudCA9IHtcclxuICBbU3VwcG9ydGVkRGJUeXBlLnNxbGl0ZV06IFwiYmV0dGVyLXNxbGl0ZTNcIixcclxuICBbU3VwcG9ydGVkRGJUeXBlLnBvc3RncmVzXTogXCJwZ1wiLFxyXG4gIFtTdXBwb3J0ZWREYlR5cGUubXlzcWxdOiBcIm15c3FsXCIsXHJcbn07XHJcblxyXG5jb25zdCBkZWZhdWx0czogRGJDb25maWcgPSB7XHJcbiAgZGJUeXBlOiBTdXBwb3J0ZWREYlR5cGUuc3FsaXRlLFxyXG4gIGZpbGVQYXRoOiBcImFkZHJlc3NfcG9pbnRzLmRiXCIsXHJcbiAgaW5pdEZpbGVQYXRoOiBqb2luKF9fZGlybmFtZSwgXCIuLlwiLCBcImFkZHJlc3NfcG9pbnRzX2luaXQuZGJcIiksXHJcbiAgdmVyYm9zZTogZmFsc2UsXHJcbn07XHJcblxyXG5sZXQgX2tuZXhEYjogS25leCA9IHVuZGVmaW5lZDtcclxubGV0IF9rbmV4RGJDb25maWc6IERiQ29uZmlnID0gdW5kZWZpbmVkO1xyXG5cclxuZXhwb3J0IGNvbnN0IGdldEtuZXhEYiA9IChjb25maWc6IFBhcnRpYWw8RGJDb25maWc+ID0ge30pOiBLbmV4ID0+IHtcclxuICBpZiAoX2tuZXhEYiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICBfa25leERiQ29uZmlnID0geyAuLi5kZWZhdWx0cywgLi4uZ2V0RW52Q29uZmlnKCksIC4uLmNvbmZpZyB9O1xyXG5cclxuICAgIGlmIChfa25leERiQ29uZmlnLmRiVHlwZSA9PT0gU3VwcG9ydGVkRGJUeXBlLnNxbGl0ZSkge1xyXG4gICAgICBfa25leERiID0ga25leCh7XHJcbiAgICAgICAgY2xpZW50OiBEYkNsaWVudFtTdXBwb3J0ZWREYlR5cGUuc3FsaXRlXSxcclxuICAgICAgICBjb25uZWN0aW9uOiB7XHJcbiAgICAgICAgICBmaWxlbmFtZTogX2tuZXhEYkNvbmZpZy5maWxlUGF0aCxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHBvb2w6IHtcclxuICAgICAgICAgIGFmdGVyQ3JlYXRlOiAoZGI6IGFueSwgZG9uZTogRnVuY3Rpb24pID0+IHtcclxuICAgICAgICAgICAgZGIucHJhZ21hKFwiam91cm5hbF9tb2RlID0gV0FMO1wiKTtcclxuICAgICAgICAgICAgZG9uZShmYWxzZSwgZG9uZSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdXNlTnVsbEFzRGVmYXVsdDogdHJ1ZSxcclxuICAgICAgICBkZWJ1ZzogX2tuZXhEYkNvbmZpZy52ZXJib3NlLFxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSBpZiAoX2tuZXhEYkNvbmZpZy5kYlR5cGUgPT09IFN1cHBvcnRlZERiVHlwZS5wb3N0Z3Jlcykge1xyXG4gICAgICBfa25leERiID0ga25leCh7XHJcbiAgICAgICAgY2xpZW50OiBEYkNsaWVudFtTdXBwb3J0ZWREYlR5cGUucG9zdGdyZXNdLFxyXG4gICAgICAgIGNvbm5lY3Rpb246IF9rbmV4RGJDb25maWcucGdDb25uZWN0aW9uU3RyaW5nLFxyXG4gICAgICAgIHVzZU51bGxBc0RlZmF1bHQ6IHRydWUsXHJcbiAgICAgICAgZGVidWc6IF9rbmV4RGJDb25maWcudmVyYm9zZSxcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2UgaWYgKF9rbmV4RGJDb25maWcuZGJUeXBlID09PSBTdXBwb3J0ZWREYlR5cGUubXlzcWwpIHtcclxuICAgICAgY29uc3QgW2hvc3QsIHBvcnQsIHVzZXIsIHBhc3N3b3JkLCBkYXRhYmFzZV0gPVxyXG4gICAgICAgIF9rbmV4RGJDb25maWcubXlzcWxDb25uZWN0aW9uU3RyaW5nLnNwbGl0KFwiOlwiKTtcclxuICAgICAgX2tuZXhEYiA9IGtuZXgoe1xyXG4gICAgICAgIGNsaWVudDogRGJDbGllbnRbU3VwcG9ydGVkRGJUeXBlLm15c3FsXSxcclxuICAgICAgICBjb25uZWN0aW9uOiB7XHJcbiAgICAgICAgICBob3N0LFxyXG4gICAgICAgICAgcG9ydDogTnVtYmVyKHBvcnQpLFxyXG4gICAgICAgICAgdXNlcixcclxuICAgICAgICAgIHBhc3N3b3JkLFxyXG4gICAgICAgICAgZGF0YWJhc2UsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB1c2VOdWxsQXNEZWZhdWx0OiB0cnVlLFxyXG4gICAgICAgIGRlYnVnOiBfa25leERiQ29uZmlnLnZlcmJvc2UsXHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBEQiB0eXBlOiAke19rbmV4RGJDb25maWcuZGJUeXBlfWApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIF9rbmV4RGI7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgaXNQb3N0Z3JlcyA9IChrbmV4OiBLbmV4KTogYm9vbGVhbiA9PiB7XHJcbiAgcmV0dXJuIGtuZXguY2xpZW50LmNvbmZpZy5jbGllbnQgPT09IERiQ2xpZW50W1N1cHBvcnRlZERiVHlwZS5wb3N0Z3Jlc107XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgaXNTcWxpdGUgPSAoa25leDogS25leCk6IGJvb2xlYW4gPT4ge1xyXG4gIHJldHVybiBrbmV4LmNsaWVudC5jb25maWcuY2xpZW50ID09PSBEYkNsaWVudFtTdXBwb3J0ZWREYlR5cGUuc3FsaXRlXTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBpc015c3FsID0gKGtuZXg6IEtuZXgpOiBib29sZWFuID0+IHtcclxuICByZXR1cm4ga25leC5jbGllbnQuY29uZmlnLmNsaWVudCA9PT0gRGJDbGllbnRbU3VwcG9ydGVkRGJUeXBlLm15c3FsXTtcclxufTtcclxuXHJcbmNvbnN0IGdldE1pZ3JhdGlvbkNvbmZpZyA9ICgpOiBLbmV4Lk1pZ3JhdG9yQ29uZmlnID0+IHtcclxuICByZXR1cm4geyBkaXJlY3Rvcnk6IGpvaW4oX19kaXJuYW1lLCBcIm1pZ3JhdGlvbnNcIikgfTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBpbml0RGIgPSBhc3luYyAoY29uZmlnOiBQYXJ0aWFsPERiQ29uZmlnPiA9IHt9KTogUHJvbWlzZTxLbmV4PiA9PiB7XHJcbiAgY29uc3Qga25leCA9IGdldEtuZXhEYihjb25maWcpO1xyXG4gIGF3YWl0IGtuZXgubWlncmF0ZS5sYXRlc3QoZ2V0TWlncmF0aW9uQ29uZmlnKCkpO1xyXG4gIHJldHVybiBrbmV4O1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGNsZWFyRGIgPSBhc3luYyAoXHJcbiAgY29uZmlnOiBQYXJ0aWFsPERiQ29uZmlnPiA9IHt9XHJcbik6IFByb21pc2U8S25leD4gPT4ge1xyXG4gIGNvbnN0IGtuZXggPSBnZXRLbmV4RGIoY29uZmlnKTtcclxuICBhd2FpdCBrbmV4Lm1pZ3JhdGUucm9sbGJhY2soZ2V0TWlncmF0aW9uQ29uZmlnKCksIHRydWUpO1xyXG4gIGF3YWl0IGtuZXgubWlncmF0ZS5sYXRlc3QoZ2V0TWlncmF0aW9uQ29uZmlnKCkpO1xyXG4gIHJldHVybiBrbmV4O1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGRpc2Nvbm5lY3RLbmV4ID0gYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xyXG4gIGlmIChfa25leERiKSB7XHJcbiAgICBhd2FpdCBfa25leERiLmRlc3Ryb3koKTtcclxuICAgIF9rbmV4RGIgPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG59O1xyXG5cclxuY29uc3QgZ2V0RW52Q29uZmlnID0gKCk6IFBhcnRpYWw8RGJDb25maWc+ID0+IHtcclxuICBjb25maWdEb3RlbnYoeyBwYXRoOiBcIi5lbnYubG9jYWxcIiB9KTtcclxuICBjb25zdCBlbnZDb25maWc6IFBhcnRpYWw8RGJDb25maWc+ID0ge307XHJcbiAgaWYgKFxyXG4gICAgcHJvY2Vzcy5lbnYuVEVYVFRPTUFQX0RCX1RZUEUgJiZcclxuICAgIE9iamVjdC52YWx1ZXMoU3VwcG9ydGVkRGJUeXBlKS5pbmNsdWRlcyhcclxuICAgICAgcHJvY2Vzcy5lbnYuVEVYVFRPTUFQX0RCX1RZUEUgYXMgU3VwcG9ydGVkRGJUeXBlXHJcbiAgICApXHJcbiAgKSB7XHJcbiAgICBlbnZDb25maWcuZGJUeXBlID0gcHJvY2Vzcy5lbnYuVEVYVFRPTUFQX0RCX1RZUEUgYXMgU3VwcG9ydGVkRGJUeXBlO1xyXG4gICAgaWYgKGVudkNvbmZpZy5kYlR5cGUgPT09IFN1cHBvcnRlZERiVHlwZS5wb3N0Z3Jlcykge1xyXG4gICAgICBpZiAoIXByb2Nlc3MuZW52LlRFWFRUT01BUF9QR19DT05ORUNUSU9OX1NUUklORykge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgIFwiRW52aXJvbm1lbnRhbCB2YXJpYWJsZSAnVEVYVFRPTUFQX1BHX0NPTk5FQ1RJT05fU1RSSU5HJyBtdXN0IGJlIHNldCBmb3IgUG9zdGdyZVNRTC5cIlxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgZW52Q29uZmlnLnBnQ29ubmVjdGlvblN0cmluZyA9IHByb2Nlc3MuZW52LlRFWFRUT01BUF9QR19DT05ORUNUSU9OX1NUUklORztcclxuICAgIH0gZWxzZSBpZiAoZW52Q29uZmlnLmRiVHlwZSA9PT0gU3VwcG9ydGVkRGJUeXBlLm15c3FsKSB7XHJcbiAgICAgIGlmICghcHJvY2Vzcy5lbnYuVEVYVFRPTUFQX01ZU1FMX0NPTk5FQ1RJT05fREFUQSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgIFwiRW52aXJvbm1lbnRhbCB2YXJpYWJsZSAnVEVYVFRPTUFQX01ZU1FMX0NPTk5FQ1RJT05fREFUQScgbXVzdCBiZSBzZXQgZm9yIE15U1FMIG9yIE1hcmlhREIuXCJcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgIW15c3FsQ29ubmVjdGlvblN0cmluZ1BhdHRlcm4udGVzdChcclxuICAgICAgICAgIHByb2Nlc3MuZW52LlRFWFRUT01BUF9NWVNRTF9DT05ORUNUSU9OX0RBVEFcclxuICAgICAgICApXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgIFwiRW52aXJvbm1lbnRhbCB2YXJpYWJsZSAnVEVYVFRPTUFQX01ZU1FMX0NPTk5FQ1RJT05fREFUQScgbXVzdCBiZSBpbiBmb3JtYXQgJ2hvc3Q6cG9ydDp1c2VyOnBhc3N3b3JkOmRhdGFiYXNlJy5cIlxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgZW52Q29uZmlnLm15c3FsQ29ubmVjdGlvblN0cmluZyA9XHJcbiAgICAgICAgcHJvY2Vzcy5lbnYuVEVYVFRPTUFQX01ZU1FMX0NPTk5FQ1RJT05fREFUQTtcclxuICAgIH0gZWxzZSBpZiAoZW52Q29uZmlnLmRiVHlwZSA9PT0gU3VwcG9ydGVkRGJUeXBlLnNxbGl0ZSkge1xyXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuVEVYVFRPTUFQX1NRTElURV9QQVRIKSB7XHJcbiAgICAgICAgZW52Q29uZmlnLmZpbGVQYXRoID0gcHJvY2Vzcy5lbnYuVEVYVFRPTUFQX1NRTElURV9QQVRIO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBlbnZDb25maWc7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3Qgbm9uRW1wdHlPck51bGwgPSAodmFsdWU6IHN0cmluZyk6IHN0cmluZyB8IG51bGwgPT4ge1xyXG4gIHJldHVybiB2YWx1ZSA/IHZhbHVlIDogbnVsbDtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCByYXdRdWVyeSA9IGFzeW5jIChcclxuICBxdWVyeTogc3RyaW5nLFxyXG4gIC4uLmJpbmRpbmdzOiByZWFkb25seSBLbmV4LlJhd0JpbmRpbmdbXVxyXG4pOiBQcm9taXNlPGFueVtdPiA9PiB7XHJcbiAgY29uc3Qga25leCA9IGdldEtuZXhEYigpO1xyXG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGtuZXgucmF3KHF1ZXJ5LCAuLi5iaW5kaW5ncyk7XHJcbiAgcmV0dXJuIGlzTXlzcWwoa25leCkgPyByZXN1bHRbMF0gOiByZXN1bHQ7XHJcbn07XHJcblxyXG4vKipcclxuICogRWZmaWNpZW50bHkgaW5zZXJ0IG11bHRpcGxlIHJvd3MuIElmIHByZXZlbnREdXBsaWNhdGVzQnlGaXJzdENvbHVtbiBpcyB0cnVlLCB0aGUgZmlyc3RcclxuICogY29sdW1uIHNob3VsZCBiZSB1bmlxdWUgKFBLIG9yIFVOSVFVRSkuXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgaW5zZXJ0TXVsdGlwbGVSb3dzID0gYXN5bmMgKFxyXG4gIHJvd3M6IHN0cmluZ1tdW10sXHJcbiAgdGFibGU6IHN0cmluZyxcclxuICBjb2x1bW5OYW1lczogc3RyaW5nW10sXHJcbiAgcHJldmVudER1cGxpY2F0ZXM6IGJvb2xlYW4gPSB0cnVlXHJcbik6IFByb21pc2U8bnVtYmVyPiA9PiB7XHJcbiAgaWYgKHJvd3MubGVuZ3RoID09PSAwKSB7XHJcbiAgICByZXR1cm4gMDtcclxuICB9XHJcblxyXG4gIGNvbnN0IGluc2VydFBsYWNlaG9sZGVycyA9IGdlbmVyYXRlMkRQbGFjZWhvbGRlcnMoXHJcbiAgICBjb2x1bW5OYW1lcy5sZW5ndGgsXHJcbiAgICByb3dzLmxlbmd0aFxyXG4gICk7XHJcblxyXG4gIGNvbnN0IGtuZXggPSBnZXRLbmV4RGIoKTtcclxuXHJcbiAgY29uc3Qgb25Db25maWN0ID1cclxuICAgIHByZXZlbnREdXBsaWNhdGVzICYmICFpc015c3FsKGtuZXgpID8gYE9OIENPTkZMSUNUIERPIE5PVEhJTkdgIDogXCJcIjtcclxuXHJcbiAgYXdhaXQgcmF3UXVlcnkoXHJcbiAgICBgSU5TRVJUICR7aXNNeXNxbChrbmV4KSA/IFwiSUdOT1JFXCIgOiBcIlwifSBJTlRPICR7dGFibGV9ICgke2NvbHVtbk5hbWVzLmpvaW4oXHJcbiAgICAgIFwiLFwiXHJcbiAgICApfSkgVkFMVUVTICR7aW5zZXJ0UGxhY2Vob2xkZXJzfSAke29uQ29uZmljdH1gLFxyXG4gICAgcm93cy5mbGF0KClcclxuICApO1xyXG5cclxuICByZXR1cm4gcm93cy5sZW5ndGg7XHJcbn07XHJcblxyXG4vKipcclxuICogSW5zZXJ0IGEgc2luZ2xlIHJvdyBhbmQgcmV0dXJuIHRoZSBhdXRvaW5jcmVtZW50ZWQgSUQuXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgaW5zZXJ0QXV0b2luY3JlbWVudFJvdyA9IGFzeW5jIChcclxuICByb3c6IGFueVtdLFxyXG4gIHRhYmxlOiBzdHJpbmcsXHJcbiAgY29sdW1uTmFtZXM6IHN0cmluZ1tdXHJcbik6IFByb21pc2U8bnVtYmVyIHwgbnVsbD4gPT4ge1xyXG4gIGNvbnN0IGRhdGEgPSBjb2x1bW5OYW1lcy5yZWR1Y2UoKG9iaiwgY29sdW1uTmFtZSwgaW5kZXgpID0+IHtcclxuICAgIG9ialtjb2x1bW5OYW1lXSA9IHJvd1tpbmRleF07XHJcbiAgICByZXR1cm4gb2JqO1xyXG4gIH0sIHt9KTtcclxuXHJcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZ2V0S25leERiKCkuaW5zZXJ0KGRhdGEpLmludG8odGFibGUpO1xyXG5cclxuICByZXR1cm4gcmVzdWx0ID8gTnVtYmVyKHJlc3VsdCkgOiBudWxsO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGRlbGV0ZU11bHRpcGxlUm93c0tuZXggPSBhc3luYyAoXHJcbiAga2V5czogc3RyaW5nW10sXHJcbiAgdGFibGU6IHN0cmluZyxcclxuICBrZXlDb2x1bW5OYW1lOiBzdHJpbmdcclxuKTogUHJvbWlzZTx2b2lkPiA9PiB7XHJcbiAgaWYgKGtleXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG4gIGF3YWl0IGdldEtuZXhEYigpLmZyb20odGFibGUpLndoZXJlSW4oa2V5Q29sdW1uTmFtZSwga2V5cykuZGVsKCk7XHJcbn07XHJcblxyXG5jb25zdCBnZW5lcmF0ZVJlcGV0aXRpdmVTdHJpbmcgPSAoXHJcbiAgdmFsdWU6IHN0cmluZyxcclxuICBnbHVlOiBzdHJpbmcsXHJcbiAgbjogbnVtYmVyXHJcbik6IHN0cmluZyA9PiB7XHJcbiAgcmV0dXJuIG5ldyBBcnJheShuKS5maWxsKHZhbHVlKS5qb2luKGdsdWUpO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGdlbmVyYXRlUGxhY2Vob2xkZXJzID0gKG46IG51bWJlcik6IHN0cmluZyA9PiB7XHJcbiAgcmV0dXJuIGdlbmVyYXRlUmVwZXRpdGl2ZVN0cmluZyhcIj9cIiwgXCIsXCIsIG4pO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGdlbmVyYXRlMkRQbGFjZWhvbGRlcnMgPSAoXHJcbiAgaW5uZXI6IG51bWJlcixcclxuICBvdXRlcjogbnVtYmVyXHJcbik6IHN0cmluZyA9PiB7XHJcbiAgcmV0dXJuIGdlbmVyYXRlUmVwZXRpdGl2ZVN0cmluZyhcclxuICAgIGAoJHtnZW5lcmF0ZVBsYWNlaG9sZGVycyhpbm5lcil9KWAsXHJcbiAgICBcIixcIixcclxuICAgIG91dGVyXHJcbiAgKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBleHRyYWN0S2V5VmFsdWVzUGFpcnMgPSAoXHJcbiAgYXJyYXk6IHN0cmluZ1tdW10sXHJcbiAga2V5SW5kZXg6IG51bWJlcixcclxuICB2YWx1ZXNJbmRpY2VzOiBudW1iZXJbXVxyXG4pOiBzdHJpbmdbXVtdID0+IHtcclxuICBjb25zdCBvYmplY3QgPSBhcnJheS5yZWR1Y2UoKGFjYzogb2JqZWN0LCBkYXRhOiBzdHJpbmdbXSkgPT4ge1xyXG4gICAgaWYgKGRhdGFba2V5SW5kZXhdKSB7XHJcbiAgICAgIGFjY1tkYXRhW2tleUluZGV4XV0gPSB2YWx1ZXNJbmRpY2VzLm1hcCgoaW5kZXg6IG51bWJlcikgPT5cclxuICAgICAgICBub25FbXB0eU9yTnVsbChkYXRhW2luZGV4XSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHJldHVybiBhY2M7XHJcbiAgfSwge30pO1xyXG5cclxuICByZXR1cm4gT2JqZWN0LmtleXMob2JqZWN0KS5tYXAoKGtleSkgPT4gW2tleSwgLi4ub2JqZWN0W2tleV1dKTtcclxufTtcclxuIl19
@@ -286,13 +286,13 @@ export const getFounderCityCode = (founder) => __awaiter(void 0, void 0, void 0,
286
286
  cityCodeFounder = founder;
287
287
  cachedCityCode = (yield getKnexDb()
288
288
  .from("city_district")
289
- .where("code", founder.cityOrDistrictCode)
289
+ .where("code", founder.municipalityCode)
290
290
  .first()).city_code;
291
291
  }
292
292
  return cachedCityCode;
293
293
  }
294
294
  else {
295
- return founder.cityOrDistrictCode;
295
+ return founder.municipalityCode;
296
296
  }
297
297
  });
298
298
  const resultToFounder = (result) => __awaiter(void 0, void 0, void 0, function* () {
@@ -303,7 +303,7 @@ const resultToFounder = (result) => __awaiter(void 0, void 0, void 0, function*
303
303
  municipalityType: result.founder_type_code === cityTypeCode
304
304
  ? MunicipalityType.City
305
305
  : MunicipalityType.District,
306
- cityOrDistrictCode: result.founder_type_code === cityTypeCode
306
+ municipalityCode: result.founder_type_code === cityTypeCode
307
307
  ? result.city_code
308
308
  : result.city_district_code,
309
309
  schools: yield getSchoolsByFounderId(parseInt(result.id)),
@@ -435,3 +435,4 @@ const getAllMunicipalityPartNames = (cityCode) => __awaiter(void 0, void 0, void
435
435
  code: row.code,
436
436
  }));
437
437
  });
438
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm91bmRlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGIvZm91bmRlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxRQUFRLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBTXhELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLHdCQUF3QixHQUN6QixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSxTQUFTLEVBQUUsc0JBQXNCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0UsT0FBTyxFQUVMLGdCQUFnQixHQUlqQixNQUFNLFNBQVMsQ0FBQztBQUVqQixNQUFNLFlBQVksR0FBRyxHQUFHLENBQUM7QUFDekIsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLENBQUM7QUFFakMsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQU8sUUFBbUIsRUFBbUIsRUFBRTs7SUFDM0UsSUFBSSxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7SUFDekIsTUFBTSwyQkFBMkIsR0FBRyxFQUFFLENBQUM7SUFFdkMsS0FBSyxNQUFNLE9BQU8sSUFBSSxRQUFRLEVBQUU7UUFDOUIsSUFDRSxPQUFPLENBQUMsZ0JBQWdCLEtBQUssZ0JBQWdCLENBQUMsSUFBSTtZQUNsRCxPQUFPLENBQUMsZ0JBQWdCLEtBQUssZ0JBQWdCLENBQUMsUUFBUSxFQUN0RDtZQUNBLFNBQVM7U0FDVjtRQUNELE1BQU0seUJBQXlCLEdBQUcsdUJBQXVCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFbkUsd0ZBQXdGO1FBQ3hGLElBQUksZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1FBQzFCLElBQUksZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFMUIsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFO1lBQ3BDLE1B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TSxTQUFTLEVBQUU7U0FDZCxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQztTQUN0QixJQUFJLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FDbkUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDZCxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUk7UUFDZCxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUk7S0FDZixDQUFDLENBQUMsQ0FBQztBQUNOLENBQUMsQ0FBQSxDQUFDO0FBRUYsTUFBTSwyQkFBMkIsR0FBRyxDQUNsQyxRQUFnQixFQUMyQixFQUFFO0lBQzdDLE9BQU8sQ0FDTCxNQUFNLFNBQVMsRUFBRTtTQUNkLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDO1NBQ3RCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztTQUN6QixLQUFLLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUNoQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNkLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSTtRQUNkLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSTtLQUNmLENBQUMsQ0FBQyxDQUFDO0FBQ04sQ0FBQyxDQUFBLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZGlzdGFuY2UgZnJvbSBcIkB0dXJmL2Rpc3RhbmNlXCI7XHJcbmltcG9ydCB7IHdob2xlTGluZUVycm9yIH0gZnJvbSBcIi4uL3N0cmVldC1tYXJrZG93bi9zbWRcIjtcclxuaW1wb3J0IHtcclxuICBEYk11bmljaXBhbGl0eVJlc3VsdCxcclxuICBNdW5pY2lwYWxpdHlQYXJ0UmVzdWx0LFxyXG4gIFNtZEVycm9yLFxyXG59IGZyb20gXCIuLi9zdHJlZXQtbWFya2Rvd24vdHlwZXNcIjtcclxuaW1wb3J0IHtcclxuICBleHRyYWN0TXVuaWNpcGFsaXR5TmFtZSxcclxuICBmaW5kQ2xvc2VzdFN0cmluZyxcclxuICBzYW5pdGl6ZU11bmljaXBhbGl0eU5hbWUsXHJcbn0gZnJvbSBcIi4uL3V0aWxzL2hlbHBlcnNcIjtcclxuaW1wb3J0IHsgZ2V0S25leERiLCBpbnNlcnRBdXRvaW5jcmVtZW50Um93LCBpbnNlcnRNdWx0aXBsZVJvd3MgfSBmcm9tIFwiLi9kYlwiO1xyXG5pbXBvcnQge1xyXG4gIEZvdW5kZXIsXHJcbiAgTXVuaWNpcGFsaXR5VHlwZSxcclxuICBNdW5pY2lwYWxpdHlXaXRoUG9zaXRpb24sXHJcbiAgUGxhY2VXaXRoUG9zaXRpb24sXHJcbiAgU2Nob29sLFxyXG59IGZyb20gXCIuL3R5cGVzXCI7XHJcblxyXG5jb25zdCBjaXR5VHlwZUNvZGUgPSAyNjE7XHJcbmNvbnN0IGNpdHlEaXN0cmljdFR5cGVDb2RlID0gMjYzO1xyXG5cclxuZXhwb3J0IGNvbnN0IGluc2VydEZvdW5kZXJzID0gYXN5bmMgKGZvdW5kZXJzOiBGb3VuZGVyW10pOiBQcm9taXNlPG51bWJlcj4gPT4ge1xyXG4gIGxldCBpbnNlcnRlZEZvdW5kZXJzID0gMDtcclxuICBjb25zdCBzY2hvb2xGb3VuZGVyQ29ubmVjdGlvbkRhdGEgPSBbXTtcclxuXHJcbiAgZm9yIChjb25zdCBmb3VuZGVyIG9mIGZvdW5kZXJzKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIGZvdW5kZXIubXVuaWNpcGFsaXR5VHlwZSAhPT0gTXVuaWNpcGFsaXR5VHlwZS5DaXR5ICYmXHJcbiAgICAgIGZvdW5kZXIubXVuaWNpcGFsaXR5VHlwZSAhPT0gTXVuaWNpcGFsaXR5VHlwZS5EaXN0cmljdFxyXG4gICAgKSB7XHJcbiAgICAgIGNvbnRpbnVlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZXh0cmFjdGVkTXVuaWNpcGFsaXR5TmFtZSA9IGV4dHJhY3RNdW5pY2lwYWxpdHlOYW1lKGZvdW5kZXIpO1xyXG5cclxuICAgIC8vIGNoZWNrIGlmIHRoZSBleHRyYWN0ZWQgbXVuaWNpcGFsaXR5IG5hbWUgaXMgdGhlIHNhbWUgYXMgaW4gYWxsIHRoZSBzY2hvb2xzJyBsb2NhdGlvbnNcclxuICAgIGxldCBkaWZmZXJpbmdTY2hvb2xzID0gW107XHJcbiAgICBsZXQgbXVuaWNpcGFsaXR5Q29kZSA9IC0xO1xyXG5cclxuICAgIGZvciAoY29uc3Qgc2Nob29sIG9mIGZvdW5kZXIuc2Nob29scykge1xyXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCAoZm91bmRlci5tdW5pY2lwYWxpdHlUeXBlID09PSBNdW5pY2lwYWxpdHlUeXBlLkNpdHlcclxuICAgICAgICA/IGdldENpdHlPZlNjaG9vbChzY2hvb2wuaXpvKVxyXG4gICAgICAgIDogZ2V0RGlzdHJpY3RPZlNjaG9vbChzY2hvb2wuaXpvKSk7XHJcbiAgICAgIGlmICghcmVzdWx0KSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgICBgaXpvOiAke3NjaG9vbC5pem99LCBleHRyYWN0ZWQ6ICR7ZXh0cmFjdGVkTXVuaWNpcGFsaXR5TmFtZX0sIFJVSUFOOiBVTkRFRklORURgXHJcbiAgICAgICAgKTtcclxuICAgICAgICBkaWZmZXJpbmdTY2hvb2xzLnB1c2goc2Nob29sKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCB7IG5hbWUsIGNvZGUgfSA9IHJlc3VsdDtcclxuICAgICAgICBpZiAobmFtZSAhPT0gZXh0cmFjdGVkTXVuaWNpcGFsaXR5TmFtZSkge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgICAgIGBpem86ICR7c2Nob29sLml6b30sIGV4dHJhY3RlZDogJHtleHRyYWN0ZWRNdW5pY2lwYWxpdHlOYW1lfSwgUlVJQU46ICR7bmFtZX1gXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgZGlmZmVyaW5nU2Nob29scy5wdXNoKHNjaG9vbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHN0b3JlIG11bmljaXBhbGl0eUNvZGUgZXZlbiBpZiB0aGUgbmFtZXMgZG9uJ3QgbWF0Y2gsIHdlIHdpbGwgdXNlIGl0IGxhdGVyXHJcbiAgICAgICAgbXVuaWNpcGFsaXR5Q29kZSA9IHBhcnNlSW50KGNvZGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbXVuaWNpcGFsaXR5Q29kZSA9IGF3YWl0IGZpeEZvdW5kZXJQcm9ibGVtcyhcclxuICAgICAgZm91bmRlcixcclxuICAgICAgbXVuaWNpcGFsaXR5Q29kZSxcclxuICAgICAgZGlmZmVyaW5nU2Nob29scyxcclxuICAgICAgZXh0cmFjdGVkTXVuaWNpcGFsaXR5TmFtZVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBjaXR5RGlzdHJpY3RDb2RlID1cclxuICAgICAgZm91bmRlci5tdW5pY2lwYWxpdHlUeXBlID09PSBNdW5pY2lwYWxpdHlUeXBlLkRpc3RyaWN0XHJcbiAgICAgICAgPyBtdW5pY2lwYWxpdHlDb2RlLnRvU3RyaW5nKClcclxuICAgICAgICA6IG51bGw7XHJcbiAgICBsZXQgY2l0eUNvZGUgPSBudWxsO1xyXG4gICAgaWYgKGZvdW5kZXIubXVuaWNpcGFsaXR5VHlwZSA9PT0gTXVuaWNpcGFsaXR5VHlwZS5DaXR5KSB7XHJcbiAgICAgIGNpdHlDb2RlID0gbXVuaWNpcGFsaXR5Q29kZT8udG9TdHJpbmcoKSA/PyBudWxsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY2l0eUNvZGUgPSBhd2FpdCBnZXRDaXR5Q29kZUJ5RGlzdHJpY3RDb2RlKG11bmljaXBhbGl0eUNvZGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGV4aXN0aW5nID0gYXdhaXQgZ2V0S25leERiKClcclxuICAgICAgLnNlbGVjdChcIipcIilcclxuICAgICAgLmZyb20oXCJmb3VuZGVyXCIpXHJcbiAgICAgIC53aGVyZSh7XHJcbiAgICAgICAgbmFtZTogc2FuaXRpemVNdW5pY2lwYWxpdHlOYW1lKGZvdW5kZXIubmFtZSksXHJcbiAgICAgICAgaWNvOiBmb3VuZGVyLmljbyxcclxuICAgICAgfSk7XHJcblxyXG4gICAgbGV0IGZvdW5kZXJJZCA9IGV4aXN0aW5nWzBdPy5pZCA/PyBudWxsO1xyXG5cclxuICAgIGlmIChleGlzdGluZy5sZW5ndGggPT09IDApIHtcclxuICAgICAgZm91bmRlcklkID0gYXdhaXQgaW5zZXJ0QXV0b2luY3JlbWVudFJvdyhcclxuICAgICAgICBbXHJcbiAgICAgICAgICBzYW5pdGl6ZU11bmljaXBhbGl0eU5hbWUoZm91bmRlci5uYW1lKSxcclxuICAgICAgICAgIHNhbml0aXplTXVuaWNpcGFsaXR5TmFtZShleHRyYWN0ZWRNdW5pY2lwYWxpdHlOYW1lKSxcclxuICAgICAgICAgIGZvdW5kZXIuaWNvLFxyXG4gICAgICAgICAgU3RyaW5nKGZvdW5kZXIub3JpZ2luYWxUeXBlKSxcclxuICAgICAgICAgIGNpdHlDb2RlLFxyXG4gICAgICAgICAgY2l0eURpc3RyaWN0Q29kZSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIFwiZm91bmRlclwiLFxyXG4gICAgICAgIFtcclxuICAgICAgICAgIFwibmFtZVwiLFxyXG4gICAgICAgICAgXCJzaG9ydF9uYW1lXCIsXHJcbiAgICAgICAgICBcImljb1wiLFxyXG4gICAgICAgICAgXCJmb3VuZGVyX3R5cGVfY29kZVwiLFxyXG4gICAgICAgICAgXCJjaXR5X2NvZGVcIixcclxuICAgICAgICAgIFwiY2l0eV9kaXN0cmljdF9jb2RlXCIsXHJcbiAgICAgICAgXVxyXG4gICAgICApO1xyXG4gICAgICBpbnNlcnRlZEZvdW5kZXJzKys7XHJcbiAgICB9XHJcblxyXG4gICAgZm91bmRlci5zY2hvb2xzLmZvckVhY2goKHNjaG9vbCkgPT4ge1xyXG4gICAgICBzY2hvb2xGb3VuZGVyQ29ubmVjdGlvbkRhdGEucHVzaChbc2Nob29sLml6bywgZm91bmRlcklkXSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNvbnN0IGluc2VydGVkQ29ubmVjdGlvbnMgPSBhd2FpdCBpbnNlcnRNdWx0aXBsZVJvd3MoXHJcbiAgICBzY2hvb2xGb3VuZGVyQ29ubmVjdGlvbkRhdGEsXHJcbiAgICBcInNjaG9vbF9mb3VuZGVyXCIsXHJcbiAgICBbXCJzY2hvb2xfaXpvXCIsIFwiZm91bmRlcl9pZFwiXSxcclxuICAgIHRydWVcclxuICApO1xyXG5cclxuICByZXR1cm4gaW5zZXJ0ZWRGb3VuZGVycyArIGluc2VydGVkQ29ubmVjdGlvbnM7XHJcbn07XHJcblxyXG5jb25zdCBnZXRDaXR5T2ZTY2hvb2wgPSBhc3luYyAoaXpvOiBzdHJpbmcpOiBQcm9taXNlPGFueT4gPT4ge1xyXG4gIHJldHVybiBhd2FpdCBnZXRLbmV4RGIoKVxyXG4gICAgLnNlbGVjdChcImMubmFtZVwiLCBcImMuY29kZVwiKVxyXG4gICAgLmZyb20oXCJzY2hvb2wgYXMgc1wiKVxyXG4gICAgLmpvaW4oXCJzY2hvb2xfbG9jYXRpb24gYXMgbFwiLCBcInMuaXpvXCIsIFwibC5zY2hvb2xfaXpvXCIpXHJcbiAgICAuam9pbihcImFkZHJlc3NfcG9pbnQgYXMgYVwiLCBcImwuYWRkcmVzc19wb2ludF9pZFwiLCBcImEuaWRcIilcclxuICAgIC5qb2luKFwiY2l0eSBhcyBjXCIsIFwiYS5jaXR5X2NvZGVcIiwgXCJjLmNvZGVcIilcclxuICAgIC53aGVyZShcInMuaXpvXCIsIGl6bylcclxuICAgIC5saW1pdCgxKVxyXG4gICAgLmZpcnN0KCk7XHJcbn07XHJcblxyXG5jb25zdCBnZXREaXN0cmljdE9mU2Nob29sID0gYXN5bmMgKGl6bzogc3RyaW5nKTogUHJvbWlzZTxhbnk+ID0+IHtcclxuICByZXR1cm4gYXdhaXQgZ2V0S25leERiKClcclxuICAgIC5zZWxlY3QoXCJkLm5hbWVcIiwgXCJkLmNvZGVcIilcclxuICAgIC5mcm9tKFwic2Nob29sIGFzIHNcIilcclxuICAgIC5qb2luKFwic2Nob29sX2xvY2F0aW9uIGFzIGxcIiwgXCJzLml6b1wiLCBcImwuc2Nob29sX2l6b1wiKVxyXG4gICAgLmpvaW4oXCJhZGRyZXNzX3BvaW50IGFzIGFcIiwgXCJsLmFkZHJlc3NfcG9pbnRfaWRcIiwgXCJhLmlkXCIpXHJcbiAgICAuam9pbihcImNpdHlfZGlzdHJpY3QgYXMgZFwiLCBcImEuY2l0eV9kaXN0cmljdF9jb2RlXCIsIFwiZC5jb2RlXCIpXHJcbiAgICAud2hlcmUoXCJzLml6b1wiLCBpem8pXHJcbiAgICAubGltaXQoMSlcclxuICAgIC5maXJzdCgpO1xyXG59O1xyXG5cclxuY29uc3QgZml4Rm91bmRlclByb2JsZW1zID0gYXN5bmMgKFxyXG4gIGZvdW5kZXI6IEZvdW5kZXIsXHJcbiAgbXVuaWNpcGFsaXR5Q29kZTogbnVtYmVyLFxyXG4gIGRpZmZlcmluZ1NjaG9vbHM6IFNjaG9vbFtdLFxyXG4gIGV4dHJhY3RlZE11bmljaXBhbGl0eU5hbWU6IHN0cmluZ1xyXG4pOiBQcm9taXNlPG51bWJlciB8IG51bGw+ID0+IHtcclxuICBpZiAoXHJcbiAgICBkaWZmZXJpbmdTY2hvb2xzLmxlbmd0aCA9PT0gMCB8fFxyXG4gICAgZGlmZmVyaW5nU2Nob29scy5sZW5ndGggPCBmb3VuZGVyLnNjaG9vbHMubGVuZ3RoXHJcbiAgKSB7XHJcbiAgICByZXR1cm4gbXVuaWNpcGFsaXR5Q29kZTtcclxuICB9XHJcblxyXG4gIC8vIGVpdGhlciB0aGUgc2Nob29sIGRvZXMgbm90IGhhdmUgYSBwb3NpdGlvbiAoaW52YWxpZCBSVUlBTiBvciBtaXNzaW5nIGJ1aWxkaW5nKVxyXG4gIC8vIG9yIHRoZSBzY2hvb2wgaXMgbm90IGluIHRoZSBzYW1lIG11bmljaXBhbGl0eSBhcyB0aGUgZm91bmRlclxyXG5cclxuICAvLyBmaW5kIGFsbCBjaXRpZXMgYW5kIHRoZWlyIHBvc2l0aW9uIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBtdW5pY2lwYWxpdHlOYW1lXHJcbiAgY29uc3QgbXVuaWNpcGFsaXRpZXMgPSBhd2FpdCBmaW5kTXVuaWNpcGFsaXRpZXNBbmRQb3NpdGlvbnNCeU5hbWVBbmRUeXBlKFxyXG4gICAgZXh0cmFjdGVkTXVuaWNpcGFsaXR5TmFtZSxcclxuICAgIGZvdW5kZXIubXVuaWNpcGFsaXR5VHlwZVxyXG4gICk7XHJcblxyXG4gIC8vIGdldCBvbmUgc2Nob29sIHBvc2l0aW9uIChpZiB0aGVyZSBhcmUgbW9yZSBzY2hvb2xzLCB0aGV5IHNob3VsZCBiZSBjbG9zZSB0byBlYWNoIG90aGVyKVxyXG4gIGNvbnN0IHNjaG9vbFBvc2l0aW9uOlxyXG4gICAgfCB7IHdnczg0X2xhdGl0dWRlOiBudW1iZXI7IHdnczg0X2xvbmdpdHVkZTogbnVtYmVyIH1cclxuICAgIHwgdW5kZWZpbmVkID0gYXdhaXQgZ2V0S25leERiKClcclxuICAgIC5zZWxlY3QoXCJhZGRyZXNzX3BvaW50Lndnczg0X2xhdGl0dWRlXCIsIFwiYWRkcmVzc19wb2ludC53Z3M4NF9sb25naXR1ZGVcIilcclxuICAgIC5mcm9tKFwic2Nob29sXCIpXHJcbiAgICAuam9pbihcInNjaG9vbF9sb2NhdGlvblwiLCBcInNjaG9vbC5pem9cIiwgXCJzY2hvb2xfbG9jYXRpb24uc2Nob29sX2l6b1wiKVxyXG4gICAgLmpvaW4oXHJcbiAgICAgIFwiYWRkcmVzc19wb2ludFwiLFxyXG4gICAgICBcInNjaG9vbF9sb2NhdGlvbi5hZGRyZXNzX3BvaW50X2lkXCIsXHJcbiAgICAgIFwiYWRkcmVzc19wb2ludC5pZFwiXHJcbiAgICApXHJcbiAgICAud2hlcmVJbihcclxuICAgICAgXCJzY2hvb2wuaXpvXCIsXHJcbiAgICAgIGRpZmZlcmluZ1NjaG9vbHMubWFwKChzY2hvb2wpID0+IHNjaG9vbC5pem8pXHJcbiAgICApXHJcbiAgICAubGltaXQoMSlcclxuICAgIC5maXJzdCgpO1xyXG5cclxuICBpZiAoc2Nob29sUG9zaXRpb24pIHtcclxuICAgIGlmIChtdW5pY2lwYWxpdGllcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgaWYgKG11bmljaXBhbGl0eUNvZGUgPT09IC0xKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgICBgbm8gbXVuaWNpcGFsaXR5IGJ5IG5hbWUgb3IgYnkgbG9jYXRpb24gZm91bmQgZm9yICR7Zm91bmRlci5uYW1lfWBcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgXCJubyBtdW5pY2lwYWxpdHkgbWF0Y2hpbmcgdGhlIGV4dHJhY3RlZCBuYW1lLCB1c2luZyB0aGUgbXVuaWNpcGFsaXR5IGZyb20gUlVJQU4gY29kZVwiXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChtdW5pY2lwYWxpdGllcy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgXCJ1c2luZyB0aGUgb25seSBtdW5pY2lwYWxpdHkgZm91bmQgbWF0Y2hpbmcgdGhlIGV4dHJhY3RlZCBuYW1lXCJcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuIG11bmljaXBhbGl0aWVzWzBdLmNvZGU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmxvZyhcInVzaW5nIHRoZSBjbG9zZXN0IG11bmljaXBhbGl0eSBtYXRjaGluZyB0aGUgZXh0cmFjdGVkIG5hbWVcIik7XHJcbiAgICAgIHJldHVybiBnZXRDbG9zZXN0Q29kZShcclxuICAgICAgICB7XHJcbiAgICAgICAgICBjb2RlOiAxLFxyXG4gICAgICAgICAgbGF0OiBzY2hvb2xQb3NpdGlvbi53Z3M4NF9sYXRpdHVkZSxcclxuICAgICAgICAgIGxuZzogc2Nob29sUG9zaXRpb24ud2dzODRfbG9uZ2l0dWRlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbXVuaWNpcGFsaXRpZXMubWFwKChtdW5pY2lwYWxpdHkpID0+ICh7XHJcbiAgICAgICAgICBjb2RlOiBtdW5pY2lwYWxpdHkuY29kZSxcclxuICAgICAgICAgIGxhdDogbXVuaWNpcGFsaXR5LmxhdCxcclxuICAgICAgICAgIGxuZzogbXVuaWNpcGFsaXR5LmxuZyxcclxuICAgICAgICB9KSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9IGVsc2Uge1xyXG4gICAgaWYgKG11bmljaXBhbGl0aWVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgaWYgKG11bmljaXBhbGl0aWVzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICAgIGB1c2luZyB0aGUgZmlyc3QgbXVuaWNpcGFsaXR5IG1hdGNoaW5nIHRoZSBleHRyYWN0ZWQgbmFtZSAoJHttdW5pY2lwYWxpdGllcy5sZW5ndGh9IG1hdGNoZXMpIC0gcG9zc2libHkgaW5jb3JyZWN0IWBcclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgXCJ1c2luZyB0aGUgb25seSBtdW5pY2lwYWxpdHkgZm91bmQgbWF0Y2hpbmcgdGhlIGV4dHJhY3RlZCBuYW1lXCJcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBtdW5pY2lwYWxpdGllc1swXS5jb2RlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgYG5vIG11bmljaXBhbGl0eSBieSBuYW1lIG9yIGJ5IGxvY2F0aW9uIGZvdW5kIGZvciAke2ZvdW5kZXIubmFtZX1gXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxufTtcclxuXHJcbmNvbnN0IGdldENsb3Nlc3RDb2RlID0gYXN5bmMgKFxyXG4gIGZyb206IFBsYWNlV2l0aFBvc2l0aW9uLFxyXG4gIHRvTGlzdDogUGxhY2VXaXRoUG9zaXRpb25bXVxyXG4pOiBQcm9taXNlPG51bWJlcj4gPT4ge1xyXG4gIGxldCBsb3dlc3REaXN0YW5jZSA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSO1xyXG4gIGxldCBjb2RlOiBudW1iZXIgPSBudWxsO1xyXG4gIGZvciAoY29uc3QgcGxhY2Ugb2YgdG9MaXN0KSB7XHJcbiAgICBsZXQgbXVuaWNpcGFsaXR5RGlzdGFuY2UgPSBkaXN0YW5jZShcclxuICAgICAgW3BsYWNlLmxhdCwgcGxhY2UubG5nXSxcclxuICAgICAgW2Zyb20ubGF0LCBmcm9tLmxuZ11cclxuICAgICk7XHJcbiAgICBpZiAobXVuaWNpcGFsaXR5RGlzdGFuY2UgPCBsb3dlc3REaXN0YW5jZSkge1xyXG4gICAgICBsb3dlc3REaXN0YW5jZSA9IG11bmljaXBhbGl0eURpc3RhbmNlO1xyXG4gICAgICBjb2RlID0gcGxhY2UuY29kZTtcclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIGNvZGU7XHJcbn07XHJcblxyXG5jb25zdCBnZXRDaXR5Q29kZUJ5RGlzdHJpY3RDb2RlID0gYXN5bmMgKFxyXG4gIGRpc3RyaWN0Q29kZTogbnVtYmVyXHJcbik6IFByb21pc2U8bnVtYmVyIHwgbnVsbD4gPT4ge1xyXG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdldEtuZXhEYigpXHJcbiAgICAuZmlyc3QoXCJjaXR5LmNvZGVcIilcclxuICAgIC5mcm9tKFwiY2l0eV9kaXN0cmljdFwiKVxyXG4gICAgLmpvaW4oXCJjaXR5XCIsIFwiY2l0eV9kaXN0cmljdC5jaXR5X2NvZGVcIiwgXCJjaXR5LmNvZGVcIilcclxuICAgIC53aGVyZShcImNpdHlfZGlzdHJpY3QuY29kZVwiLCBkaXN0cmljdENvZGUpXHJcbiAgICAubGltaXQoMSk7XHJcbiAgcmV0dXJuIHJlc3VsdD8uY29kZSA/PyBudWxsO1xyXG59O1xyXG5cclxuY29uc3QgZmluZE11bmljaXBhbGl0aWVzQW5kUG9zaXRpb25zQnlOYW1lQW5kVHlwZSA9IGFzeW5jIChcclxuICBuYW1lOiBzdHJpbmcsXHJcbiAgdHlwZTogTXVuaWNpcGFsaXR5VHlwZVxyXG4pOiBQcm9taXNlPE11bmljaXBhbGl0eVdpdGhQb3NpdGlvbltdPiA9PiB7XHJcbiAgY29uc3Qga25leCA9IGdldEtuZXhEYigpO1xyXG4gIHJldHVybiAoXHJcbiAgICB0eXBlID09PSBNdW5pY2lwYWxpdHlUeXBlLkNpdHlcclxuICAgICAgPyBhd2FpdCBrbmV4XHJcbiAgICAgICAgICAuc2VsZWN0KFxyXG4gICAgICAgICAgICBcImNpdHkubmFtZVwiLFxyXG4gICAgICAgICAgICBcImNpdHkuY29kZVwiLFxyXG4gICAgICAgICAgICBcImFkZHJlc3NfcG9pbnQud2dzODRfbGF0aXR1ZGVcIixcclxuICAgICAgICAgICAgXCJhZGRyZXNzX3BvaW50Lndnczg0X2xvbmdpdHVkZVwiXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICAuZnJvbShcImNpdHlcIilcclxuICAgICAgICAgIC5qb2luKFwiYWRkcmVzc19wb2ludFwiLCBcImNpdHkuY29kZVwiLCBcImFkZHJlc3NfcG9pbnQuY2l0eV9jb2RlXCIpXHJcbiAgICAgICAgICAud2hlcmUoXCJjaXR5Lm5hbWVcIiwgbmFtZSlcclxuICAgICAgICAgIC5ncm91cEJ5KFwiY2l0eS5jb2RlXCIpXHJcbiAgICAgIDogYXdhaXQga25leFxyXG4gICAgICAgICAgLnNlbGVjdChcclxuICAgICAgICAgICAgXCJjaXR5X2Rpc3RyaWN0Lm5hbWVcIixcclxuICAgICAgICAgICAgXCJjaXR5X2Rpc3RyaWN0LmNvZGVcIixcclxuICAgICAgICAgICAgXCJhZGRyZXNzX3BvaW50Lndnczg0X2xhdGl0dWRlXCIsXHJcbiAgICAgICAgICAgIFwiYWRkcmVzc19wb2ludC53Z3M4NF9sb25naXR1ZGVcIlxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgLmZyb20oXCJjaXR5X2Rpc3RyaWN0XCIpXHJcbiAgICAgICAgICAuam9pbihcclxuICAgICAgICAgICAgXCJhZGRyZXNzX3BvaW50XCIsXHJcbiAgICAgICAgICAgIFwiY2l0eV9kaXN0cmljdC5jb2RlXCIsXHJcbiAgICAgICAgICAgIFwiYWRkcmVzc19wb2ludC5jaXR5X2Rpc3RyaWN0X2NvZGVcIlxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgLndoZXJlKFwiY2l0eV9kaXN0cmljdC5uYW1lXCIsIG5hbWUpXHJcbiAgICAgICAgICAuZ3JvdXBCeShcImNpdHlfZGlzdHJpY3QuY29kZVwiKVxyXG4gICkubWFwKChyb3cpID0+ICh7XHJcbiAgICBjb2RlOiByb3cuY29kZSxcclxuICAgIHR5cGUsXHJcbiAgICBsYXQ6IHJvdy53Z3M4NF9sYXRpdHVkZSxcclxuICAgIGxuZzogcm93Lndnczg0X2xvbmdpdHVkZSxcclxuICB9KSk7XHJcbn07XHJcblxyXG5jb25zdCBleHRyYWN0Rm91bmRlck5hbWUgPSAobGluZTogc3RyaW5nKTogc3RyaW5nID0+IHtcclxuICBpZiAobGluZVswXSA9PT0gXCIjXCIpIHtcclxuICAgIHJldHVybiBsaW5lLnN1YnN0cmluZygxKS50cmltKCk7XHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiBsaW5lLnRyaW0oKTtcclxuICB9XHJcbn07XHJcblxyXG5jb25zdCBnZXRCYXNlRm91bmRlclF1ZXJ5ID0gKCkgPT4ge1xyXG4gIHJldHVybiBnZXRLbmV4RGIoKVxyXG4gICAgLnNlbGVjdChcclxuICAgICAgXCJmLmlkXCIsXHJcbiAgICAgIFwiZi5uYW1lXCIsXHJcbiAgICAgIFwiZi5pY29cIixcclxuICAgICAgXCJmLmZvdW5kZXJfdHlwZV9jb2RlXCIsXHJcbiAgICAgIFwiZi5jaXR5X2NvZGVcIixcclxuICAgICAgXCJmLmNpdHlfZGlzdHJpY3RfY29kZVwiXHJcbiAgICApXHJcbiAgICAuZnJvbShcImZvdW5kZXIgYXMgZlwiKVxyXG4gICAgLmxlZnRKb2luKFwiY2l0eSBhcyBjXCIsIFwiYy5jb2RlXCIsIFwiZi5jaXR5X2NvZGVcIilcclxuICAgIC5sZWZ0Sm9pbihcImNpdHlfZGlzdHJpY3QgYXMgZFwiLCBcImQuY29kZVwiLCBcImYuY2l0eV9kaXN0cmljdF9jb2RlXCIpO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGdldEZvdW5kZXJCeUlkID0gYXN5bmMgKFxyXG4gIGlkOiBudW1iZXJcclxuKTogUHJvbWlzZTx7IGZvdW5kZXI6IEZvdW5kZXI7IGVycm9yczogU21kRXJyb3JbXSB9PiA9PiB7XHJcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZ2V0QmFzZUZvdW5kZXJRdWVyeSgpLndoZXJlKFwiZi5pZFwiLCBpZCkuZmlyc3QoKTtcclxuICBjb25zdCBmb3VuZGVyID0gYXdhaXQgcmVzdWx0VG9Gb3VuZGVyKHJlc3VsdCk7XHJcbiAgcmV0dXJuIHtcclxuICAgIGZvdW5kZXI6IGZvdW5kZXIgPz8gbnVsbCxcclxuICAgIGVycm9yczogZm91bmRlclxyXG4gICAgICA/IFtdXHJcbiAgICAgIDogW3dob2xlTGluZUVycm9yKGBaxZlpem92YXRlbCBzIGlkICR7aWR9IG5lZXhpc3R1amUuYCwgXCJcIildLFxyXG4gIH07XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgZmluZEZvdW5kZXIgPSBhc3luYyAoXHJcbiAgbmFtZVdpdGhIYXNodGFnOiBzdHJpbmdcclxuKTogUHJvbWlzZTx7IGZvdW5kZXI6IEZvdW5kZXI7IGVycm9yczogU21kRXJyb3JbXSB9PiA9PiB7XHJcbiAgY29uc3QgZXJyb3JzOiBTbWRFcnJvcltdID0gW107XHJcbiAgY29uc3QgbmFtZSA9IGV4dHJhY3RGb3VuZGVyTmFtZShuYW1lV2l0aEhhc2h0YWcpO1xyXG5cclxuICBjb25zdCByZXN1bHQgPSBhd2FpdCBnZXRCYXNlRm91bmRlclF1ZXJ5KClcclxuICAgIC53aGVyZShcImYubmFtZVwiLCBuYW1lKVxyXG4gICAgLm9yV2hlcmUoXCJjLm5hbWVcIiwgbmFtZSlcclxuICAgIC5vcldoZXJlKFwiZC5uYW1lXCIsIG5hbWUpXHJcbiAgICAuZmlyc3QoKTtcclxuICBpZiAocmVzdWx0KSB7XHJcbiAgICByZXR1cm4geyBmb3VuZGVyOiBhd2FpdCByZXN1bHRUb0ZvdW5kZXIocmVzdWx0KSwgZXJyb3JzIH07XHJcbiAgfSBlbHNlIHtcclxuICAgIGNvbnN0IGFsbEZvdW5kZXJOYW1lcyA9IGF3YWl0IGdldEFsbEZvdW5kZXJOYW1lcygpO1xyXG4gICAgY29uc3QgbmFtZXNMaXN0ID0gYWxsRm91bmRlck5hbWVzXHJcbiAgICAgIC5tYXAoKHJvdykgPT4gcm93LmZvdW5kZXJOYW1lKVxyXG4gICAgICAuY29uY2F0KGFsbEZvdW5kZXJOYW1lcy5tYXAoKHJvdykgPT4gcm93Lm11bmljaXBhbGl0eU5hbWUpKTtcclxuICAgIGNvbnN0IGJlc3RNYXRjaCA9IGZpbmRDbG9zZXN0U3RyaW5nKG5hbWUsIG5hbWVzTGlzdCk7XHJcbiAgICBjb25zdCBiZXN0TWF0Y2hSb3cgPSBhbGxGb3VuZGVyTmFtZXMuZmluZChcclxuICAgICAgKGZvdW5kZXJzTmFtZXMpID0+XHJcbiAgICAgICAgZm91bmRlcnNOYW1lcy5mb3VuZGVyTmFtZSA9PT0gYmVzdE1hdGNoIHx8XHJcbiAgICAgICAgZm91bmRlcnNOYW1lcy5tdW5pY2lwYWxpdHlOYW1lID09PSBiZXN0TWF0Y2hcclxuICAgICk7XHJcblxyXG4gICAgaWYgKCFiZXN0TWF0Y2hSb3cpIHtcclxuICAgICAgZXJyb3JzLnB1c2goXHJcbiAgICAgICAgd2hvbGVMaW5lRXJyb3IoXHJcbiAgICAgICAgICBgTmVuYcWhbGkganNtZSDFvsOhZG7DqSB6xZlpem92YXRlbGUsIG5lanNww63FoSBqc3RlIHphcG9tbsSbbGkgaW5pY2lhbGl6b3ZhdCBkYXRhYsOhemkuYCxcclxuICAgICAgICAgIG5hbWVXaXRoSGFzaHRhZ1xyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBmb3VuZGVyOiBudWxsLFxyXG4gICAgICAgIGVycm9ycyxcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBlcnJvcnMucHVzaChcclxuICAgICAgd2hvbGVMaW5lRXJyb3IoXHJcbiAgICAgICAgYFrFmWl6b3ZhdGVsICcke25hbWV9JyBuZWV4aXN0dWplLCBteXNsZWxpIGpzdGUgJyR7YmVzdE1hdGNofSc/YCxcclxuICAgICAgICBuYW1lV2l0aEhhc2h0YWdcclxuICAgICAgKVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBmb3VuZGVyID0gYXdhaXQgZ2V0S25leERiKClcclxuICAgICAgLnNlbGVjdChcclxuICAgICAgICBcImlkXCIsXHJcbiAgICAgICAgXCJuYW1lXCIsXHJcbiAgICAgICAgXCJpY29cIixcclxuICAgICAgICBcImZvdW5kZXJfdHlwZV9jb2RlXCIsXHJcbiAgICAgICAgXCJjaXR5X2NvZGVcIixcclxuICAgICAgICBcImNpdHlfZGlzdHJpY3RfY29kZVwiXHJcbiAgICAgIClcclxuICAgICAgLmZyb20oXCJmb3VuZGVyXCIpXHJcbiAgICAgIC53aGVyZShcImlkXCIsIGJlc3RNYXRjaFJvdy5pZClcclxuICAgICAgLmZpcnN0KCk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBmb3VuZGVyOiBhd2FpdCByZXN1bHRUb0ZvdW5kZXIoZm91bmRlciksXHJcbiAgICAgIGVycm9ycyxcclxuICAgIH07XHJcbiAgfVxyXG59O1xyXG5cclxubGV0IGNhY2hlZENpdHlDb2RlOiBudW1iZXIgPSBudWxsO1xyXG5sZXQgY2l0eUNvZGVGb3VuZGVyOiBGb3VuZGVyID0gbnVsbDtcclxuZXhwb3J0IGNvbnN0IGdldEZvdW5kZXJDaXR5Q29kZSA9IGFzeW5jIChmb3VuZGVyOiBGb3VuZGVyKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcclxuICBpZiAoZm91bmRlci5tdW5pY2lwYWxpdHlUeXBlID09PSBNdW5pY2lwYWxpdHlUeXBlLkRpc3RyaWN0KSB7XHJcbiAgICBpZiAoY2l0eUNvZGVGb3VuZGVyICE9PSBmb3VuZGVyKSB7XHJcbiAgICAgIGNpdHlDb2RlRm91bmRlciA9IGZvdW5kZXI7XHJcbiAgICAgIGNhY2hlZENpdHlDb2RlID0gKFxyXG4gICAgICAgIGF3YWl0IGdldEtuZXhEYigpXHJcbiAgICAgICAgICAuZnJvbShcImNpdHlfZGlzdHJpY3RcIilcclxuICAgICAgICAgIC53aGVyZShcImNvZGVcIiwgZm91bmRlci5tdW5pY2lwYWxpdHlDb2RlKVxyXG4gICAgICAgICAgLmZpcnN0KClcclxuICAgICAgKS5jaXR5X2NvZGU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2FjaGVkQ2l0eUNvZGU7XHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiBmb3VuZGVyLm11bmljaXBhbGl0eUNvZGU7XHJcbiAgfVxyXG59O1xyXG5cclxuaW50ZXJmYWNlIEZvdW5kZXJOYW1lcyB7XHJcbiAgaWQ6IG51bWJlcjtcclxuICBmb3VuZGVyTmFtZTogc3RyaW5nO1xyXG4gIG11bmljaXBhbGl0eU5hbWU6IHN0cmluZztcclxufVxyXG5cclxuY29uc3QgcmVzdWx0VG9Gb3VuZGVyID0gYXN5bmMgKHJlc3VsdDogYW55KTogUHJvbWlzZTxGb3VuZGVyPiA9PiB7XHJcbiAgcmV0dXJuIHtcclxuICAgIG5hbWU6IHJlc3VsdC5uYW1lLFxyXG4gICAgaWNvOiByZXN1bHQuaWNvLFxyXG4gICAgb3JpZ2luYWxUeXBlOiByZXN1bHQuZm91bmRlcl90eXBlX2NvZGUsXHJcbiAgICBtdW5pY2lwYWxpdHlUeXBlOlxyXG4gICAgICByZXN1bHQuZm91bmRlcl90eXBlX2NvZGUgPT09IGNpdHlUeXBlQ29kZVxyXG4gICAgICAgID8gTXVuaWNpcGFsaXR5VHlwZS5DaXR5XHJcbiAgICAgICAgOiBNdW5pY2lwYWxpdHlUeXBlLkRpc3RyaWN0LFxyXG4gICAgbXVuaWNpcGFsaXR5Q29kZTpcclxuICAgICAgcmVzdWx0LmZvdW5kZXJfdHlwZV9jb2RlID09PSBjaXR5VHlwZUNvZGVcclxuICAgICAgICA/IHJlc3VsdC5jaXR5X2NvZGVcclxuICAgICAgICA6IHJlc3VsdC5jaXR5X2Rpc3RyaWN0X2NvZGUsXHJcbiAgICBzY2hvb2xzOiBhd2FpdCBnZXRTY2hvb2xzQnlGb3VuZGVySWQocGFyc2VJbnQocmVzdWx0LmlkKSksXHJcbiAgfTtcclxufTtcclxuXHJcbmNvbnN0IGdldFNjaG9vbHNCeUZvdW5kZXJJZCA9IGFzeW5jIChmb3VuZGVySWQ6IG51bWJlcik6IFByb21pc2U8U2Nob29sW10+ID0+IHtcclxuICBjb25zdCByZXN1bHQgPSBhd2FpdCBnZXRLbmV4RGIoKVxyXG4gICAgLnNlbGVjdChcInMuaXpvXCIsIFwicy5yZWRpem9cIiwgXCJzLm5hbWVcIiwgXCJzLmNhcGFjaXR5XCIsIFwic2wuYWRkcmVzc19wb2ludF9pZFwiKVxyXG4gICAgLmZyb20oXCJzY2hvb2wgYXMgc1wiKVxyXG4gICAgLmpvaW4oXCJzY2hvb2xfZm91bmRlciBhcyBzZlwiLCBcInMuaXpvXCIsIFwic2Yuc2Nob29sX2l6b1wiKVxyXG4gICAgLmpvaW4oXCJzY2hvb2xfbG9jYXRpb24gYXMgc2xcIiwgXCJzLml6b1wiLCBcInNsLnNjaG9vbF9pem9cIilcclxuICAgIC53aGVyZShcInNmLmZvdW5kZXJfaWRcIiwgZm91bmRlcklkKTtcclxuXHJcbiAgcmV0dXJuIHJlc3VsdC5tYXAoKHJvdykgPT4gKHtcclxuICAgIGl6bzogU3RyaW5nKHJvdy5pem8pLFxyXG4gICAgcmVkaXpvOiBTdHJpbmcocm93LnJlZGl6byksXHJcbiAgICBuYW1lOiBTdHJpbmcocm93Lm5hbWUpLFxyXG4gICAgY2FwYWNpdHk6IHBhcnNlSW50KHJvdy5jYXBhY2l0eSksXHJcbiAgICBsb2NhdGlvbnM6IFtcclxuICAgICAge1xyXG4gICAgICAgIGFkZHJlc3NQb2ludElkOiBwYXJzZUludChyb3cuYWRkcmVzc19wb2ludF9pZCksXHJcbiAgICAgIH0sXHJcbiAgICBdLFxyXG4gIH0pKTtcclxufTtcclxuXHJcbmNvbnN0IGdldEFsbEZvdW5kZXJOYW1lcyA9IGFzeW5jICgpOiBQcm9taXNlPEZvdW5kZXJOYW1lc1tdPiA9PiB7XHJcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZ2V0S25leERiKClcclxuICAgIC5zZWxlY3QoXHJcbiAgICAgIFwiZi5pZFwiLFxyXG4gICAgICBcImYubmFtZSBhcyBmb3VuZGVyX25hbWVcIixcclxuICAgICAgXCJjLm5hbWUgYXMgY2l0eV9uYW1lXCIsXHJcbiAgICAgIFwiZC5uYW1lIGFzIGNpdHlfZGlzdHJpY3RfbmFtZVwiXHJcbiAgICApXHJcbiAgICAuZnJvbShcImZvdW5kZXIgYXMgZlwiKVxyXG4gICAgLmxlZnRKb2luKFwiY2l0eSBhcyBjXCIsIFwiYy5jb2RlXCIsIFwiZi5jaXR5X2NvZGVcIilcclxuICAgIC5sZWZ0Sm9pbihcImNpdHlfZGlzdHJpY3QgYXMgZFwiLCBcImQuY29kZVwiLCBcImYuY2l0eV9kaXN0cmljdF9jb2RlXCIpO1xyXG4gIHJldHVybiByZXN1bHQubWFwKChyb3cpID0+ICh7XHJcbiAgICBpZDogcGFyc2VJbnQocm93LmlkKSxcclxuICAgIGZvdW5kZXJOYW1lOiBTdHJpbmcocm93LmZvdW5kZXJfbmFtZSksXHJcbiAgICBtdW5pY2lwYWxpdHlOYW1lOiBTdHJpbmcoXHJcbiAgICAgIHJvdy5jaXR5X25hbWUgPyByb3cuY2l0eV9uYW1lIDogcm93LmNpdHlfZGlzdHJpY3RfbmFtZVxyXG4gICAgKSxcclxuICB9KSk7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgZmluZE11bmljaXBhbGl0eVBhcnRCeU5hbWUgPSBhc3luYyAoXHJcbiAgbmFtZTogc3RyaW5nLFxyXG4gIGZvdW5kZXI6IEZvdW5kZXJcclxuKTogUHJvbWlzZTxNdW5pY2lwYWxpdHlQYXJ0UmVzdWx0PiA9PiB7XHJcbiAgY29uc3QgZXJyb3JzOiBTbWRFcnJvcltdID0gW107XHJcbiAgY29uc3QgY2l0eUNvZGUgPSBhd2FpdCBnZXRGb3VuZGVyQ2l0eUNvZGUoZm91bmRlcik7XHJcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZ2V0S25leERiKClcclxuICAgIC5maXJzdChcImNvZGVcIilcclxuICAgIC5mcm9tKFwibXVuaWNpcGFsaXR5X3BhcnRcIilcclxuICAgIC53aGVyZSh7IG5hbWUsIGNpdHlfY29kZTogY2l0eUNvZGUgfSk7XHJcblxyXG4gIGlmIChyZXN1bHQpIHtcclxuICAgIHJldHVybiB7IG11bmljaXBhbGl0eVBhcnRDb2RlOiByZXN1bHQuY29kZSwgZXJyb3JzIH07XHJcbiAgfSBlbHNlIHtcclxuICAgIGNvbnN0IGFsbE5hbWVzID0gYXdhaXQgZ2V0QWxsTXVuaWNpcGFsaXR5UGFydE5hbWVzKGNpdHlDb2RlKTtcclxuICAgIGNvbnN0IG5hbWVzTGlzdCA9IGFsbE5hbWVzLm1hcCgocm93KSA9PiByb3cubmFtZSk7XHJcbiAgICBjb25zdCBiZXN0TWF0Y2ggPSBmaW5kQ2xvc2VzdFN0cmluZyhuYW1lLCBuYW1lc0xpc3QpO1xyXG5cclxuICAgIGVycm9ycy5wdXNoKHtcclxuICAgICAgbWVzc2FnZTogYE9iZWMgYW5pIG3Em3N0c2vDoSDEjcOhc3QgJyR7bmFtZX0nIG5lZXhpc3R1amUsIG15c2xlbGkganN0ZSAnJHtiZXN0TWF0Y2h9Jz9gLFxyXG4gICAgICBzdGFydE9mZnNldDogMCxcclxuICAgICAgZW5kT2Zmc2V0OiAwLFxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbXVuaWNpcGFsaXR5UGFydENvZGU6IG51bGwsXHJcbiAgICAgIGVycm9ycyxcclxuICAgIH07XHJcbiAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGZpbmRNdW5pY2lwYWxpdHlCeU5hbWVBbmRUeXBlID0gYXN5bmMgKFxyXG4gIG5hbWU6IHN0cmluZyxcclxuICB0eXBlOiBNdW5pY2lwYWxpdHlUeXBlLFxyXG4gIGZvdW5kZXI6IEZvdW5kZXJcclxuKTogUHJvbWlzZTxEYk11bmljaXBhbGl0eVJlc3VsdD4gPT4ge1xyXG4gIGNvbnN0IGVycm9yczogU21kRXJyb3JbXSA9IFtdO1xyXG5cclxuICBjb25zdCByZXN1bHQgPVxyXG4gICAgdHlwZSA9PT0gTXVuaWNpcGFsaXR5VHlwZS5DaXR5XHJcbiAgICAgID8gYXdhaXQgZ2V0S25leERiKCkuc2VsZWN0KFwiY29kZVwiKS5mcm9tKFwiY2l0eVwiKS53aGVyZShcIm5hbWVcIiwgbmFtZSlcclxuICAgICAgOiBhd2FpdCBnZXRLbmV4RGIoKVxyXG4gICAgICAgICAgLnNlbGVjdChcImNvZGVcIilcclxuICAgICAgICAgIC5mcm9tKFwiY2l0eV9kaXN0cmljdFwiKVxyXG4gICAgICAgICAgLndoZXJlKFwibmFtZVwiLCBuYW1lKVxyXG4gICAgICAgICAgLmFuZFdoZXJlKFwiY2l0eV9jb2RlXCIsIGF3YWl0IGdldEZvdW5kZXJDaXR5Q29kZShmb3VuZGVyKSk7XHJcblxyXG4gIGlmIChyZXN1bHQubGVuZ3RoID4gMCkge1xyXG4gICAgaWYgKHJlc3VsdC5sZW5ndGggPiAxKSB7XHJcbiAgICAgIGNvbnN0IGNpdHlDb2RlID0gYXdhaXQgZ2V0Rm91bmRlckNpdHlDb2RlKGZvdW5kZXIpO1xyXG4gICAgICBjb25zdCBwb3NpdGlvbnMgPSBhd2FpdCBnZXRLbmV4RGIoKVxyXG4gICAgICAgIC5zZWxlY3QoXCJjaXR5X2NvZGVcIiwgXCJ3Z3M4NF9sYXRpdHVkZVwiLCBcIndnczg0X2xvbmdpdHVkZVwiKVxyXG4gICAgICAgIC5mcm9tKFwiYWRkcmVzc19wb2ludFwiKVxyXG4gICAgICAgIC5ncm91cEJ5KFwiY2l0eV9jb2RlXCIpXHJcbiAgICAgICAgLndoZXJlSW4oXHJcbiAgICAgICAgICBcImNpdHlfY29kZVwiLFxyXG4gICAgICAgICAgcmVzdWx0Lm1hcCgocm93KSA9PiByb3cuY29kZSlcclxuICAgICAgICApO1xyXG4gICAgICBjb25zdCBmb3VuZGVyUG9zaXRpb24gPSBhd2FpdCBnZXRLbmV4RGIoKVxyXG4gICAgICAgIC5maXJzdChcIndnczg0X2xhdGl0dWRlXCIsIFwid2dzODRfbG9uZ2l0dWRlXCIpXHJcbiAgICAgICAgLmZyb20oXCJhZGRyZXNzX3BvaW50XCIpXHJcbiAgICAgICAgLmdyb3VwQnkoXCJjaXR5X2NvZGVcIilcclxuICAgICAgICAud2hlcmUoXCJjaXR5X2NvZGVcIiwgY2l0eUNvZGUpO1xyXG4gICAgICBjb25zdCBjbG9zZXN0Q29kZSA9IGF3YWl0IGdldENsb3Nlc3RDb2RlKFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGNvZGU6IGNpdHlDb2RlLFxyXG4gICAgICAgICAgbGF0OiBmb3VuZGVyUG9zaXRpb24ud2dzODRfbGF0aXR1ZGUsXHJcbiAgICAgICAgICBsbmc6IGZvdW5kZXJQb3NpdGlvbi53Z3M4NF9sb25naXR1ZGUsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBwb3NpdGlvbnMubWFwKChyb3cpID0+ICh7XHJcbiAgICAgICAgICBjb2RlOiByb3cuY2l0eV9jb2RlLFxyXG4gICAgICAgICAgbGF0OiByb3cud2dzODRfbGF0aXR1ZGUsXHJcbiAgICAgICAgICBsbmc6IHJvdy53Z3M4NF9sb25naXR1ZGUsXHJcbiAgICAgICAgfSkpXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybiB7IG11bmljaXBhbGl0eTogeyBjb2RlOiBjbG9zZXN0Q29kZSwgdHlwZSB9LCBlcnJvcnMgfTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB7IG11bmljaXBhbGl0eTogeyBjb2RlOiByZXN1bHRbMF0uY29kZSwgdHlwZSB9LCBlcnJvcnMgfTtcclxuICAgIH1cclxuICB9IGVsc2Uge1xyXG4gICAgY29uc3QgYWxsTmFtZXMgPSBhd2FpdCBnZXRBbGxNdW5pY2lwYWxpdHlOYW1lcyh0eXBlKTtcclxuICAgIGNvbnN0IG5hbWVzTGlzdCA9IGFsbE5hbWVzLm1hcCgocm93KSA9PiByb3cubmFtZSk7XHJcbiAgICBjb25zdCBiZXN0TWF0Y2ggPSBmaW5kQ2xvc2VzdFN0cmluZyhuYW1lLCBuYW1lc0xpc3QpO1xyXG4gICAgY29uc3QgYmVzdE1hdGNoUm93ID0gYWxsTmFtZXMuZmluZChcclxuICAgICAgKG11bmljaXBhbGl0eSkgPT4gbXVuaWNpcGFsaXR5Lm5hbWUgPT09IGJlc3RNYXRjaFxyXG4gICAgKTtcclxuXHJcbiAgICBlcnJvcnMucHVzaCh7XHJcbiAgICAgIG1lc3NhZ2U6IGBPYmVjIGFuaSBtxJtzdHNrw6EgxI3DoXN0ICcke25hbWV9JyBuZWV4aXN0dWplLCBteXNsZWxpIGpzdGUgJyR7YmVzdE1hdGNofSc/YCxcclxuICAgICAgc3RhcnRPZmZzZXQ6IDAsXHJcbiAgICAgIGVuZE9mZnNldDogMCxcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIG11bmljaXBhbGl0eTogeyBjb2RlOiBiZXN0TWF0Y2hSb3cuY29kZSwgdHlwZSB9LFxyXG4gICAgICBlcnJvcnMsXHJcbiAgICB9O1xyXG4gIH1cclxufTtcclxuXHJcbmNvbnN0IGdldEFsbE11bmljaXBhbGl0eU5hbWVzID0gYXN5bmMgKFxyXG4gIHR5cGU6IE11bmljaXBhbGl0eVR5cGVcclxuKTogUHJvbWlzZTx7IG5hbWU6IHN0cmluZzsgY29kZTogbnVtYmVyIH1bXT4gPT4ge1xyXG4gIHJldHVybiAoXHJcbiAgICBhd2FpdCBnZXRLbmV4RGIoKVxyXG4gICAgICAuc2VsZWN0KFwibmFtZVwiLCBcImNvZGVcIilcclxuICAgICAgLmZyb20odHlwZSA9PT0gTXVuaWNpcGFsaXR5VHlwZS5DaXR5ID8gXCJjaXR5XCIgOiBcImNpdHlfZGlzdHJpY3RcIilcclxuICApLm1hcCgocm93KSA9PiAoe1xyXG4gICAgbmFtZTogcm93Lm5hbWUsXHJcbiAgICBjb2RlOiByb3cuY29kZSxcclxuICB9KSk7XHJcbn07XHJcblxyXG5jb25zdCBnZXRBbGxNdW5pY2lwYWxpdHlQYXJ0TmFtZXMgPSBhc3luYyAoXHJcbiAgY2l0eUNvZGU6IG51bWJlclxyXG4pOiBQcm9taXNlPHsgbmFtZTogc3RyaW5nOyBjb2RlOiBudW1iZXIgfVtdPiA9PiB7XHJcbiAgcmV0dXJuIChcclxuICAgIGF3YWl0IGdldEtuZXhEYigpXHJcbiAgICAgIC5zZWxlY3QoXCJuYW1lXCIsIFwiY29kZVwiKVxyXG4gICAgICAuZnJvbShcIm11bmljaXBhbGl0eV9wYXJ0XCIpXHJcbiAgICAgIC53aGVyZShcImNpdHlfY29kZVwiLCBjaXR5Q29kZSlcclxuICApLm1hcCgocm93KSA9PiAoe1xyXG4gICAgbmFtZTogcm93Lm5hbWUsXHJcbiAgICBjb2RlOiByb3cuY29kZSxcclxuICB9KSk7XHJcbn07XHJcbiJdfQ==