@smarterplan/ngx-smarterplan-core 1.4.5 → 1.4.7

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 (41) hide show
  1. package/esm2022/lib/helpers.service.mjs +27 -20
  2. package/esm2022/lib/mattertagData.mjs +84 -84
  3. package/esm2022/lib/pipes/time-date-to-local-string.pipe.mjs +3 -8
  4. package/esm2022/lib/services/locale.service.mjs +3 -5
  5. package/esm2022/lib/services/matterport-import.service.mjs +3 -3
  6. package/esm2022/lib/services/matterport-measurement.service.mjs +78 -0
  7. package/esm2022/lib/services/matterport-navigation.service.mjs +157 -0
  8. package/esm2022/lib/services/matterport-object3d.service.mjs +234 -0
  9. package/esm2022/lib/services/matterport-pointer.service.mjs +130 -0
  10. package/esm2022/lib/services/matterport-tag.service.mjs +458 -0
  11. package/esm2022/lib/services/matterport.service.mjs +427 -988
  12. package/esm2022/lib/services/models/equipment.service.mjs +3 -4
  13. package/esm2022/lib/services/models/feature.service.mjs +3 -3
  14. package/esm2022/lib/services/models/measurement.service.mjs +3 -3
  15. package/esm2022/lib/services/models/ticket.service.mjs +3 -4
  16. package/esm2022/lib/services/navigator.service.mjs +10 -2
  17. package/esm2022/lib/services/tag.service.mjs +45 -19
  18. package/esm2022/lib/services/viewer.service.mjs +51 -16
  19. package/esm2022/lib/types.service.mjs +1 -1
  20. package/fesm2022/smarterplan-ngx-smarterplan-core.mjs +2028 -1490
  21. package/fesm2022/smarterplan-ngx-smarterplan-core.mjs.map +1 -1
  22. package/lib/helpers.service.d.ts +6 -0
  23. package/lib/mattertagData.d.ts +52 -10
  24. package/lib/services/matterport-measurement.service.d.ts +35 -0
  25. package/lib/services/matterport-navigation.service.d.ts +38 -0
  26. package/lib/services/matterport-object3d.service.d.ts +31 -0
  27. package/lib/services/matterport-pointer.service.d.ts +31 -0
  28. package/lib/services/matterport-tag.service.d.ts +104 -0
  29. package/lib/services/matterport.service.d.ts +91 -92
  30. package/lib/services/models/equipment.service.d.ts +2 -2
  31. package/lib/services/models/feature.service.d.ts +2 -2
  32. package/lib/services/models/measurement.service.d.ts +2 -2
  33. package/lib/services/models/ticket.service.d.ts +2 -2
  34. package/lib/services/tag.service.d.ts +4 -0
  35. package/lib/services/viewer.service.d.ts +1 -1
  36. package/lib/types.service.d.ts +2 -0
  37. package/package.json +21 -1
  38. package/esm2022/lib/matterport-extensions/hsl-loader/HlsLoader.mjs +0 -66
  39. package/esm2022/lib/matterport-extensions/video-renderer/VideoRenderer.mjs +0 -63
  40. package/lib/matterport-extensions/hsl-loader/HlsLoader.d.ts +0 -26
  41. package/lib/matterport-extensions/video-renderer/VideoRenderer.d.ts +0 -26
@@ -232,6 +232,23 @@ export function openModalForVisitSwitch(modalService, model3D, spaceID, dataToMo
232
232
  modalReference.componentInstance.dataToMove = dataToMove;
233
233
  }
234
234
  }
235
+ export function getCurrentLang(translate) {
236
+ let lang = translate.getCurrentLang() || translate.getFallbackLang() || "fr";
237
+ // Clean up leading mess
238
+ lang = lang.replace(/^[_-]+/, '');
239
+ // Handle fr_FR or fr-FR (take primary language)
240
+ if (lang.includes("_")) {
241
+ lang = lang.split("_")[0];
242
+ }
243
+ if (lang.includes("-")) {
244
+ lang = lang.split("-")[0];
245
+ }
246
+ // Ensure 2-letter code (ISO 639-1)
247
+ if (lang.length > 2) {
248
+ lang = lang.substring(0, 2);
249
+ }
250
+ return lang;
251
+ }
235
252
  /**
236
253
  * Return a string of a given date time in local format.
237
254
  * The format is determined by the current language.
@@ -239,14 +256,7 @@ export function openModalForVisitSwitch(modalService, model3D, spaceID, dataToMo
239
256
  export function dateTimeToLocalString(date, translate, mode) {
240
257
  let lang = "en-EN";
241
258
  if (translate) {
242
- /** Get current language */
243
- lang = translate.currentLang
244
- ? translate.currentLang
245
- : translate.defaultLang;
246
- /** Transforme '_fr' to 'fr' */
247
- if (lang) {
248
- lang = lang.slice(1);
249
- }
259
+ lang = getCurrentLang(translate);
250
260
  }
251
261
  let options;
252
262
  switch (mode) {
@@ -379,11 +389,7 @@ export function translateDatePeriod(translateService, dateStartPeriod, dateEndPe
379
389
  * Return local in the canonical form: "en-GB", "fr-FR"
380
390
  */
381
391
  export function getLocaleLong(translate) {
382
- let lang = translate.currentLang
383
- ? translate.currentLang
384
- : translate.defaultLang;
385
- /** Transform '_fr' to 'fr' */
386
- lang = lang.slice(1);
392
+ let lang = getCurrentLang(translate);
387
393
  if (lang === "en") {
388
394
  return "en-GB";
389
395
  }
@@ -393,12 +399,7 @@ export function getLocaleLong(translate) {
393
399
  * Return local in the short form: "en", "fr"
394
400
  */
395
401
  export function getLocaleShort(translate) {
396
- let lang = translate.currentLang
397
- ? translate.currentLang
398
- : translate.defaultLang;
399
- /** Transform '_fr' to 'fr' */
400
- lang = lang.slice(1);
401
- return lang;
402
+ return getCurrentLang(translate);
402
403
  }
403
404
  /**
404
405
  * Format string to lowercase, no spaces
@@ -467,4 +468,10 @@ export function durationToString(duration, translate) {
467
468
  }
468
469
  return `${seconds} ${secondsString}`;
469
470
  }
470
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWNvcmUvc3JjL2xpYi9oZWxwZXJzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sOERBQThELENBQUM7QUFDekcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDN0QsT0FBTyxFQUFxQixXQUFXLEVBQUUsTUFBTSxFQUFXLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV2RyxNQUFNLFVBQVUsMkJBQTJCLENBQUMsVUFBVSxFQUFFLFFBQVE7SUFDNUQsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUNyQyxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDckMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3hELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLENBQUM7QUFFRCxNQUFNLFVBQVUsZUFBZSxDQUFDLElBQWE7SUFDekMsUUFBUSxJQUFJLEVBQUUsQ0FBQztRQUNYLEtBQUssT0FBTyxDQUFDLFNBQVM7WUFDbEIsT0FBTyxXQUFXLENBQUM7UUFDdkIsS0FBSyxPQUFPLENBQUMsTUFBTTtZQUNmLE9BQU8sUUFBUSxDQUFDO1FBQ3BCLEtBQUssT0FBTyxD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RUFBRSxDQUFDO1lBQ2hCLE9BQU8sR0FBRyxPQUFPLElBQUksYUFBYSxFQUFFLENBQUM7UUFDekMsQ0FBQztRQUNELE9BQU8sR0FBRyxPQUFPLElBQUksYUFBYSxJQUFJLE9BQU8sSUFBSSxhQUFhLEVBQUUsQ0FBQztJQUNyRSxDQUFDO0lBQ0QsT0FBTyxHQUFHLE9BQU8sSUFBSSxhQUFhLEVBQUUsQ0FBQztBQUN6QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tIFwiQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXBcIjtcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XHJcbmltcG9ydCB7IE1vZGFsU3dpdGNoVmlzaXRDb21wb25lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL21vZGFsLXN3aXRjaC12aXNpdC9tb2RhbC1zd2l0Y2gtdmlzaXQuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IGRvd25sb2FkRmlsZUFzT2JqZWN0IH0gZnJvbSBcIi4vc2VydmljZXMvczMuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBFcXVpcG1lbnREb2N1bWVudCwgTGV2ZWxTdGF0dXMsIExvY2FsZSwgTWlzc2lvbiwgUG9pVHlwZSwgUm9sZVN0YXR1cyB9IGZyb20gXCIuL3R5cGVzLnNlcnZpY2VcIjtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXREaXN0YW5jZUJldHdlZW5Ud29Qb2ludHMoc3RhcnRQb2ludCwgZW5kUG9pbnQpIHtcclxuICAgIGNvbnN0IGR4ID0gZW5kUG9pbnQueCAtIHN0YXJ0UG9pbnQueDtcclxuICAgIGNvbnN0IGR5ID0gZW5kUG9pbnQueSAtIHN0YXJ0UG9pbnQueTtcclxuICAgIGNvbnN0IGR6ID0gZW5kUG9pbnQueiAtIHN0YXJ0UG9pbnQuejtcclxuICAgIGNvbnN0IGRpc3RhbmNlID0gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5ICsgZHogKiBkeik7XHJcbiAgICByZXR1cm4gTWF0aC5yb3VuZChkaXN0YW5jZSAqIDEwMCkgLyAxMDA7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBwb2lUeXBlVG9TdHJpbmcodHlwZTogUG9pVHlwZSk6IHN0cmluZyB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgICBjYXNlIFBvaVR5cGUuRVFVSVBNRU5UOlxyXG4gICAgICAgICAgICByZXR1cm4gXCJlcXVpcG1lbnRcIjtcclxuICAgICAgICBjYXNlIFBvaVR5cGUuVElDS0VUOlxyXG4gICAgICAgICAgICByZXR1cm4gXCJ0aWNrZXRcIjtcclxuICAgICAgICBjYXNlIFBvaVR5cGUuREFUQTpcclxuICAgICAgICAgICAgcmV0dXJuIFwiZGF0YVwiO1xyXG4gICAgICAgIGNhc2UgUG9pVHlwZS5ERVNLOlxyXG4gICAgICAgICAgICByZXR1cm4gXCJkYXRhXCI7XHJcbiAgICAgICAgY2FzZSBQb2lUeXBlLklORk9STUFUSU9OOlxyXG4gICAgICAgICAgICByZXR1cm4gXCJpbmZvcm1hdGlvblwiO1xyXG4gICAgICAgIGNhc2UgUG9pVHlwZS5NRUFTVVJFOlxyXG4gICAgICAgICAgICByZXR1cm4gXCJtZWFzdXJlXCI7XHJcbiAgICAgICAgY2FzZSBQb2lUeXBlLlBFT1BMRTpcclxuICAgICAgICAgICAgcmV0dXJuIFwicGVvcGxlXCI7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgcmV0dXJuIFwidGlja2V0XCI7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB3YWl0KHRpbWVvdXQ6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgdGltZW91dCA9IHRpbWVvdXQgfHwgMjAwMDtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgIH0sIHRpbWVvdXQpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCB3YWl0VW50aWwgPSAoY29uZGl0aW9uOiAoKSA9PiBib29sZWFuKSA9PiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGludGVydmFsSWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChjb25kaXRpb24oKSkge1xyXG4gICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sIDMwKTtcclxuICAgIH0pO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGVudW1Ub0FycmF5KGVudW1lcmFibGU6IGFueSkge1xyXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGVudW1lcmFibGUpXHJcbiAgICAgICAgLmZpbHRlcigodmFsdWUpID0+IGlzTmFOKE51bWJlcih2YWx1ZSkpID09PSB0cnVlKVxyXG4gICAgICAgIC5tYXAoKGtleSkgPT4gZW51bWVyYWJsZVtrZXldKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldExldmVsc0JlbG93KGxldmVsOiBMZXZlbFN0YXR1cyk6IExldmVsU3RhdHVzW10ge1xyXG4gICAgY29uc3QgYWxsID0gW1xyXG4gICAgICAgIExldmVsU3RhdHVzLk1JTklNVU0sXHJcbiAgICAgICAgTGV2ZWxTdGF0dXMuTE9XLFxyXG4gICAgICAgIExldmVsU3RhdHVzLk1FRElVTSxcclxuICAgICAgICBMZXZlbFN0YXR1cy5ISUdILFxyXG4gICAgICAgIExldmVsU3RhdHVzLk1BWElNVU0sXHJcbiAgICBdO1xyXG4gICAgc3dpdGNoIChsZXZlbCkge1xyXG4gICAgICAgIGNhc2UgTGV2ZWxTdGF0dXMuTUFYSU1VTTpcclxuICAgICAgICAgICAgcmV0dXJuIGFsbDtcclxuICAgICAgICBjYXNlIExldmVsU3RhdHVzLkhJR0g6XHJcbiAgICAgICAgICAgIGFsbC5zcGxpY2UoNCwgMSk7XHJcbiAgICAgICAgICAgIHJldHVybiBhbGw7XHJcbiAgICAgICAgY2FzZSBMZXZlbFN0YXR1cy5NRURJVU06XHJcbiAgICAgICAgICAgIGFsbC5zcGxpY2UoMywgMik7XHJcbiAgICAgICAgICAgIHJldHVybiBhbGw7XHJcbiAgICAgICAgY2FzZSBMZXZlbFN0YXR1cy5MT1c6XHJcbiAgICAgICAgICAgIHJldHVybiBbTGV2ZWxTdGF0dXMuTUlOSU1VTSwgTGV2ZWxTdGF0dXMuTE9XXTtcclxuICAgICAgICBjYXNlIExldmVsU3RhdHVzLk1JTklNVU06XHJcbiAgICAgICAgICAgIHJldHVybiBbTGV2ZWxTdGF0dXMuTUlOSU1VTV07XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgcmV0dXJuIFtMZXZlbFN0YXR1cy5NSU5JTVVNXTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEhpZ2hlc3RMZXZlbEZvck1pc3Npb25zKG1pc3Npb25zOiBNaXNzaW9uW10pOiBMZXZlbFN0YXR1cyB7XHJcbiAgICBsZXQgbGF0ZXN0VmlzaWJsZUxldmVscyA9IFtMZXZlbFN0YXR1cy5NSU5JTVVNXTtcclxuICAgIGZvciAoY29uc3QgbSBvZiBtaXNzaW9ucykge1xyXG4gICAgICAgIGNvbnN0IHZpc2libGVMZXZlbHMgPSBnZXRMZXZlbHNCZWxvdyhtLmxldmVsKTtcclxuICAgICAgICBpZiAodmlzaWJsZUxldmVscy5sZW5ndGggPiBsYXRlc3RWaXNpYmxlTGV2ZWxzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBsYXRlc3RWaXNpYmxlTGV2ZWxzID0gdmlzaWJsZUxldmVscztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBzd2l0Y2ggKGxhdGVzdFZpc2libGVMZXZlbHMubGVuZ3RoKSB7XHJcbiAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICByZXR1cm4gTGV2ZWxTdGF0dXMuTUlOSU1VTTtcclxuICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgIHJldHVybiBMZXZlbFN0YXR1cy5MT1c7XHJcbiAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICByZXR1cm4gTGV2ZWxTdGF0dXMuTUVESVVNO1xyXG4gICAgICAgIGNhc2UgNDpcclxuICAgICAgICAgICAgcmV0dXJuIExldmVsU3RhdHVzLkhJR0g7XHJcbiAgICAgICAgY2FzZSA1OlxyXG4gICAgICAgICAgICByZXR1cm4gTGV2ZWxTdGF0dXMuTUFYSU1VTTtcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICByZXR1cm4gTGV2ZWxTdGF0dXMuTUlOSU1VTTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEhpZ2hlc3RSb2xlRm9yTWlzc2lvbnMobWlzc2lvbnM6IE1pc3Npb25bXSk6IFJvbGVTdGF0dXMge1xyXG4gICAgbGV0IGhpZ2hlc3RSb2xlID0gUm9sZVN0YXR1cy5WSVNJVE9SO1xyXG4gICAgZm9yIChjb25zdCBtIG9mIG1pc3Npb25zKSB7XHJcbiAgICAgICAgaWYgKG0ucm9sZSA9PT0gUm9sZVN0YXR1cy5BRE1JTikge1xyXG4gICAgICAgICAgICByZXR1cm4gUm9sZVN0YXR1cy5BRE1JTjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGhpZ2hlc3RSb2xlID09PSBSb2xlU3RhdHVzLk9XTkVSKSB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobS5yb2xlID09PSBSb2xlU3RhdHVzLk9XTkVSKSB7XHJcbiAgICAgICAgICAgIGhpZ2hlc3RSb2xlID0gUm9sZVN0YXR1cy5PV05FUjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG0ucm9sZSA9PT0gUm9sZVN0YXR1cy5NQU5BR0VSKSB7XHJcbiAgICAgICAgICAgIGhpZ2hlc3RSb2xlID0gUm9sZVN0YXR1cy5NQU5BR0VSO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIG0ucm9sZSA9PT0gUm9sZVN0YXR1cy5TRVJWSUNFICYmXHJcbiAgICAgICAgICAgIGhpZ2hlc3RSb2xlICE9PSBSb2xlU3RhdHVzLk1BTkFHRVJcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgaGlnaGVzdFJvbGUgPSBSb2xlU3RhdHVzLlNFUlZJQ0U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgbS5yb2xlID09PSBSb2xlU3RhdHVzLk9DQ1VQQU5UICYmXHJcbiAgICAgICAgICAgIGhpZ2hlc3RSb2xlID09PSBSb2xlU3RhdHVzLlZJU0lUT1JcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgaGlnaGVzdFJvbGUgPSBSb2xlU3RhdHVzLk9DQ1VQQU5UO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobS5yb2xlID09PSBSb2xlU3RhdHVzLkdVSURFX01VU0VVTSkge1xyXG4gICAgICAgICAgICBoaWdoZXN0Um9sZSA9IFJvbGVTdGF0dXMuR1VJREVfTVVTRVVNO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobS5yb2xlID09PSBSb2xlU3RhdHVzLlZJU0lUT1JfTVVTRVVNKSB7XHJcbiAgICAgICAgICAgIGhpZ2hlc3RSb2xlID0gUm9sZVN0YXR1cy5WSVNJVE9SX01VU0VVTTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaGlnaGVzdFJvbGU7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRSb2xlc0JlbG93Rm9yTWFuYWdlcihyb2xlOiBSb2xlU3RhdHVzKTogUm9sZVN0YXR1c1tdIHtcclxuICAgIGNvbnN0IGFsbCA9IFtcclxuICAgICAgICBSb2xlU3RhdHVzLlZJU0lUT1IsXHJcbiAgICAgICAgUm9sZVN0YXR1cy5PQ0NVUEFOVCxcclxuICAgICAgICBSb2xlU3RhdHVzLlNFUlZJQ0UsXHJcbiAgICAgICAgUm9sZVN0YXR1cy5NQU5BR0VSLFxyXG4gICAgICAgIFJvbGVTdGF0dXMuT1dORVIsXHJcbiAgICAgICAgUm9sZVN0YXR1cy5BRE1JTixcclxuICAgIF07XHJcbiAgICBjb25zdCBtdXNldW0gPSBbUm9sZVN0YXR1cy5WSVNJVE9SX01VU0VVTSwgUm9sZVN0YXR1cy5HVUlERV9NVVNFVU1dO1xyXG4gICAgc3dpdGNoIChyb2xlKSB7XHJcbiAgICAgICAgY2FzZSBSb2xlU3RhdHVzLkFETUlOOlxyXG4gICAgICAgICAgICByZXR1cm4gWy4uLmFsbCwgLi4ubXVzZXVtXTtcclxuICAgICAgICBjYXNlIFJvbGVTdGF0dXMuT1dORVI6XHJcbiAgICAgICAgICAgIGFsbC5zcGxpY2UoNSwgMSk7XHJcbiAgICAgICAgICAgIHJldHVybiBhbGw7XHJcbiAgICAgICAgY2FzZSBSb2xlU3RhdHVzLk1BTkFHRVI6XHJcbiAgICAgICAgICAgIGFsbC5zcGxpY2UoNCwgMik7XHJcbiAgICAgICAgICAgIHJldHVybiBhbGw7XHJcbiAgICAgICAgY2FzZSBSb2xlU3RhdHVzLkdVSURFX01VU0VVTTpcclxuICAgICAgICAgICAgcmV0dXJuIG11c2V1bTtcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICByZXR1cm4gYWxsLnNwbGljZSg0LCAyKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlclVuaXF1ZUFycmF5QnlJRChhcnJheU9mT2JqZWN0czogYW55W10pOiBhbnlbXSB7XHJcbiAgICByZXR1cm4gYXJyYXlPZk9iamVjdHMuZmlsdGVyKFxyXG4gICAgICAgICh2LCBpbmRleCwgYSkgPT4gYS5maW5kSW5kZXgoKHQpID0+IHQuaWQgPT09IHYuaWQpID09PSBpbmRleCxcclxuICAgICk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVOdWxsS2V5c0Zyb21PYmplY3Qob2JqZWN0OiBPYmplY3QpIHtcclxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG9iamVjdCkpIHtcclxuICAgICAgICBpZiAob2JqZWN0W2tleV0gPT09IG51bGwpIHtcclxuICAgICAgICAgICAgZGVsZXRlIG9iamVjdFtrZXldO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIFRlc3QgaWYgYSBkYXRlIGhhcyBleHBpcmVkXHJcbiAqIEBwYXJhbSBkYXRlXHJcbiAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGRhdGUgaGFzIGV4cGlyZWQsIGZhbHNlIG90aGVyd2lzZVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGRhdGVIYXNFeHBpcmVkKFxyXG4gICAgZGF0ZTogc3RyaW5nIHwgRGF0ZSB8IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQsXHJcbik6IGJvb2xlYW4ge1xyXG4gICAgaWYgKGRhdGUpIHtcclxuICAgICAgICByZXR1cm4gbmV3IERhdGUoZGF0ZSkgPD0gbmV3IERhdGUoKTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ0xvY2FsZVRvRW51bShsb2NhbGU6IHN0cmluZyk6IExvY2FsZSB7XHJcbiAgICBzd2l0Y2ggKGxvY2FsZSkge1xyXG4gICAgICAgIGNhc2UgXCJlblwiOlxyXG4gICAgICAgICAgICByZXR1cm4gTG9jYWxlLkVOO1xyXG4gICAgICAgIGNhc2UgXCJmclwiOlxyXG4gICAgICAgICAgICByZXR1cm4gTG9jYWxlLkZSO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIHJldHVybiBMb2NhbGUuRU47XHJcbiAgICB9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWV0YUZvckltYWdlKHVybCk6IFByb21pc2U8YW55PiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGltZyA9IG5ldyBJbWFnZSgpO1xyXG5cclxuICAgICAgICBpbWcuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICByZXNvbHZlKGltZyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaW1nLmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCAoKSA9PiByZWplY3QoKSk7XHJcbiAgICAgICAgaW1nLnNyYyA9IHVybDtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc29ydEFscGhhYmV0aWNhbGx5T25OYW1lKGFycmF5OiB7IG5hbWU6IHN0cmluZzsgfVtdKTogYW55W10ge1xyXG4gICAgcmV0dXJuIGFycmF5LnNvcnQoKGEsIGIpID0+IGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSkpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRFbWFpbChlbWFpbDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCByZSA9XHJcbiAgICAgICAgL14oKFteXFxzXCIoKSwuOjs8PkBbXFxcXFxcXV0rKFxcLlteXFxzXCIoKSwuOjs8PkBbXFxcXFxcXV0rKSopfChcIi4rXCIpKUAoKFxcWyg/OlxcZHsxLDN9XFwuKXszfVxcZHsxLDN9XSl8KChbXFxkQS1aYS16XFwtXStcXC4pK1tBLVphLXpdezIsfSkpJC87XHJcbiAgICByZXR1cm4gcmUudGVzdChlbWFpbCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBkb3dubG9hZEJsb2IoYmxvYiwgZmlsZW5hbWUpIHtcclxuICAgIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcbiAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7XHJcbiAgICBhLmhyZWYgPSB1cmw7XHJcbiAgICBhLmRvd25sb2FkID0gZmlsZW5hbWUgfHwgXCJkb3dubG9hZFwiO1xyXG4gICAgY29uc3QgY2xpY2tIYW5kbGVyID0gKCkgPT4ge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XHJcbiAgICAgICAgICAgIGEucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGNsaWNrSGFuZGxlcik7XHJcbiAgICAgICAgfSwgMTUwKTtcclxuICAgIH07XHJcbiAgICBhLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBjbGlja0hhbmRsZXIsIGZhbHNlKTtcclxuICAgIGEuY2xpY2soKTtcclxuICAgIHJldHVybiBhO1xyXG59XHJcblxyXG4vKlxyXG4gICAgT3BlbiBtb2RhbCBpZiBvbmUgaGFzIHRvIHN3aXRjaCB2aXJ0dWFsIHZpc2l0XHJcbiovXHJcbmV4cG9ydCBmdW5jdGlvbiBvcGVuTW9kYWxGb3JWaXNpdFN3aXRjaChcclxuICAgIG1vZGFsU2VydmljZTogTmdiTW9kYWwsXHJcbiAgICBtb2RlbDNEOiBzdHJpbmcsXHJcbiAgICBzcGFjZUlEOiBzdHJpbmcsXHJcbiAgICBkYXRhVG9Nb3ZlOiB7IHN3ZWVwVG9Nb3ZlOiBzdHJpbmcsIHJvdGF0aW9uOiBhbnk7IH0gfCBudWxsID0gbnVsbFxyXG4pIHtcclxuICAgIGNvbnN0IG1vZGFsUmVmZXJlbmNlID0gbW9kYWxTZXJ2aWNlLm9wZW4oTW9kYWxTd2l0Y2hWaXNpdENvbXBvbmVudCk7XHJcbiAgICBtb2RhbFJlZmVyZW5jZS5jb21wb25lbnRJbnN0YW5jZS5jb250ZW50ID1cclxuICAgICAgICBcIlRoaXMgb2JqZWN0IGJlbG9uZ3MgdG8gYW5vdGhlciAzRCB2aXNpdC4gQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHN3aXRjaCB0aGUgdmlzaXQ/XCI7XHJcbiAgICBtb2RhbFJlZmVyZW5jZS5jb21wb25lbnRJbnN0YW5jZS5tb2RlbDNEID0gbW9kZWwzRDtcclxuICAgIG1vZGFsUmVmZXJlbmNlLmNvbXBvbmVudEluc3RhbmNlLnNwYWNlSUQgPSBzcGFjZUlEO1xyXG4gICAgaWYgKGRhdGFUb01vdmUpIHtcclxuICAgICAgICBtb2RhbFJlZmVyZW5jZS5jb21wb25lbnRJbnN0YW5jZS5kYXRhVG9Nb3ZlID0gZGF0YVRvTW92ZTtcclxuICAgIH1cclxuXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm4gYSBzdHJpbmcgb2YgYSBnaXZlbiBkYXRlIHRpbWUgaW4gbG9jYWwgZm9ybWF0LlxyXG4gKiBUaGUgZm9ybWF0IGlzIGRldGVybWluZWQgYnkgdGhlIGN1cnJlbnQgbGFuZ3VhZ2UuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZGF0ZVRpbWVUb0xvY2FsU3RyaW5nKFxyXG4gICAgZGF0ZTogbnVtYmVyIHwgc3RyaW5nIHwgRGF0ZSxcclxuICAgIHRyYW5zbGF0ZT86IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBtb2RlPyxcclxuKTogc3RyaW5nIHtcclxuICAgIGxldCBsYW5nID0gXCJlbi1FTlwiO1xyXG4gICAgaWYgKHRyYW5zbGF0ZSkge1xyXG4gICAgICAgIC8qKiBHZXQgY3VycmVudCBsYW5ndWFnZSAqL1xyXG4gICAgICAgIGxhbmcgPSB0cmFuc2xhdGUuY3VycmVudExhbmdcclxuICAgICAgICAgICAgPyB0cmFuc2xhdGUuY3VycmVudExhbmdcclxuICAgICAgICAgICAgOiB0cmFuc2xhdGUuZGVmYXVsdExhbmc7XHJcbiAgICAgICAgLyoqIFRyYW5zZm9ybWUgJ19mcicgdG8gJ2ZyJyAqL1xyXG4gICAgICAgIGlmIChsYW5nKSB7XHJcbiAgICAgICAgICAgIGxhbmcgPSBsYW5nLnNsaWNlKDEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgbGV0IG9wdGlvbnM6IHtcclxuICAgICAgICBtb250aD87XHJcbiAgICAgICAgeWVhcj87XHJcbiAgICAgICAgZGF5PztcclxuICAgICAgICBob3VyPztcclxuICAgICAgICBtaW51dGU/O1xyXG4gICAgICAgIHNlY29uZD87XHJcbiAgICAgICAgZGF0ZVN0eWxlPztcclxuICAgICAgICB0aW1lU3R5bGU/O1xyXG4gICAgICAgIHdlZWtkYXk/O1xyXG4gICAgICAgIHRpbWVab25lPztcclxuICAgICAgICB0aW1lWm9uZU5hbWU/O1xyXG4gICAgfTtcclxuICAgIHN3aXRjaCAobW9kZSkge1xyXG4gICAgICAgIGNhc2UgXCJkYXlfbnVtZXJpY1wiOlxyXG4gICAgICAgICAgICBvcHRpb25zID0geyBkYXk6IFwibnVtZXJpY1wiIH07XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJkYXlcIjpcclxuICAgICAgICAgICAgb3B0aW9ucyA9IHsgd2Vla2RheTogXCJsb25nXCIgfTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcImRhdGVcIjpcclxuICAgICAgICAgICAgb3B0aW9ucyA9IHsgZGF0ZVN0eWxlOiBcImxvbmdcIiB9O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwic2hvcnRfZGF0ZV90aW1lXCI6XHJcbiAgICAgICAgICAgIG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICB5ZWFyOiBcIjItZGlnaXRcIixcclxuICAgICAgICAgICAgICAgIG1vbnRoOiBcIjItZGlnaXRcIixcclxuICAgICAgICAgICAgICAgIGRheTogXCIyLWRpZ2l0XCIsXHJcbiAgICAgICAgICAgICAgICBob3VyOiBcIjItZGlnaXRcIixcclxuICAgICAgICAgICAgICAgIG1pbnV0ZTogXCIyLWRpZ2l0XCIsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJ0aW1lXCI6XHJcbiAgICAgICAgICAgIG9wdGlvbnMgPSB7IGhvdXI6IFwibnVtZXJpY1wiLCBtaW51dGU6IFwibnVtZXJpY1wiIH07XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJkYXlfdGltZV96b25lXCI6XHJcbiAgICAgICAgICAgIG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICB3ZWVrZGF5OiBcImxvbmdcIixcclxuICAgICAgICAgICAgICAgIHllYXI6IFwibnVtZXJpY1wiLFxyXG4gICAgICAgICAgICAgICAgbW9udGg6IFwibG9uZ1wiLFxyXG4gICAgICAgICAgICAgICAgZGF5OiBcIm51bWVyaWNcIixcclxuICAgICAgICAgICAgICAgIGhvdXI6IFwibnVtZXJpY1wiLFxyXG4gICAgICAgICAgICAgICAgbWludXRlOiBcIm51bWVyaWNcIixcclxuICAgICAgICAgICAgICAgIHRpbWVab25lTmFtZTogXCJzaG9ydE9mZnNldFwiLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgZGF0ZVN0eWxlOiBcImxvbmdcIixcclxuICAgICAgICAgICAgICAgIHRpbWVTdHlsZTogXCJzaG9ydFwiLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5ldyBEYXRlKGRhdGUpLnRvTG9jYWxlU3RyaW5nKGxhbmcsIG9wdGlvbnMpO1xyXG59XHJcblxyXG4vKipcclxuICogQ29tcGFyZXMgdHdvIHN0cmluZyBhcnJheXNcclxuICogQHBhcmFtIGFycmF5MVxyXG4gKiBAcGFyYW0gYXJyYXkyXHJcbiAqIEByZXR1cm5zXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlzQ29udGFpblNhbWVFbGVtZW50cyhcclxuICAgIGFycmF5MTogc3RyaW5nW10sXHJcbiAgICBhcnJheTI6IHN0cmluZ1tdLFxyXG4pOiBib29sZWFuIHtcclxuICAgIGFycmF5MS5zb3J0KCk7XHJcbiAgICBhcnJheTIuc29ydCgpO1xyXG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGFycmF5MSkgPT09IEpTT04uc3RyaW5naWZ5KGFycmF5Mik7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmlzaXRVcmwoY3VycmVudFVybDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHBhdGggPSBjdXJyZW50VXJsLnNwbGl0KFwiL1wiKTtcclxuICAgIHBhdGguc3BsaWNlKDMsIHBhdGgubGVuZ3RoIC0gMik7XHJcbiAgICByZXR1cm4gcGF0aC5qb2luKFwiL1wiKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEV4dHJhY3Qgc3BhY2VJRCBmcm9tIHVybCB3aGVuIGluIHZpc2l0IDNEXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3BhY2VJREZyb21VcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgdmlzaXRVcmwgPSBnZXRWaXNpdFVybCh1cmwpO1xyXG4gICAgcmV0dXJuIHZpc2l0VXJsLnNwbGl0KFwiL1wiKVsyXTtcclxufVxyXG5cclxuLyoqXHJcbiAqIERvd25sb2FkIHJlbGF0ZWRcclxuICovXHJcbmltcG9ydCAqIGFzIEZpbGVTYXZlciBmcm9tIFwiZmlsZS1zYXZlclwiO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGRvd25sb2FkRmlsZShmaWxlVXJsOiBzdHJpbmcsIGZpbGVOYW1lOiBzdHJpbmcpIHtcclxuICAgIEZpbGVTYXZlci5zYXZlQXMoZmlsZVVybCArIGZpbGVOYW1lLCBmaWxlTmFtZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBvcGVuRG9jdW1lbnQoZmlsZVVybDogc3RyaW5nLCBmaWxlTmFtZTogc3RyaW5nLCBpZDogbnVtYmVyKSB7XHJcbiAgICB3aW5kb3cub3BlbihgJHtmaWxlVXJsICsgZmlsZU5hbWV9I2RvYz0ke2lkfWAsIFwiX2JsYW5rXCIsIFwiXCIpO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgZG93bmxvYWRFcXVpcG1lbnREb2N1bWVudCA9IGFzeW5jIChcclxuICAgIGRvY3VtZW50XzogRXF1aXBtZW50RG9jdW1lbnQsXHJcbik6IFByb21pc2U8T2JqZWN0IHwgdm9pZD4gPT4ge1xyXG4gICAgY29uc3Qgc2lnbmVkRmlsZSA9IGF3YWl0IGRvd25sb2FkRmlsZUFzT2JqZWN0KGRvY3VtZW50Xy51cmwpO1xyXG4gICAgaWYgKHNpZ25lZEZpbGUpIHtcclxuICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgZG93bmxvYWRCbG9iKHNpZ25lZEZpbGUuQm9keSwgZG9jdW1lbnRfLmZpbGVuYW1lKTtcclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjaGVja0VsZW1lbnRCeUlkKHNlbGVjdG9yKSB7XHJcbiAgICBsZXQgcXVlcnlTZWxlY3RvciA9IG51bGw7XHJcbiAgICB3aGlsZSAocXVlcnlTZWxlY3RvciA9PT0gbnVsbCkge1xyXG4gICAgICAgIGF3YWl0IHJhZkFzeW5jKCk7XHJcbiAgICAgICAgcXVlcnlTZWxlY3RvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNlbGVjdG9yKTtcclxuICAgIH1cclxuICAgIHJldHVybiBxdWVyeVNlbGVjdG9yO1xyXG59XHJcblxyXG5mdW5jdGlvbiByYWZBc3luYygpIHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShyZXNvbHZlKTsgLy8gZmFzdGVyIHRoYW4gc2V0IHRpbWUgb3V0XHJcbiAgICB9KTtcclxufVxyXG5cclxuLyogQHBhcmFtIHtBcnJheX0gbnVtYmVycyBBbiBhcnJheSBvZiBudW1iZXJzLlxyXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IFRoZSBjYWxjdWxhdGVkIGF2ZXJhZ2UgKG9yIG1lYW4pIHZhbHVlIGZyb20gdGhlIHNwZWNpZmllZFxyXG4gKiAgICAgbnVtYmVycy5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBtZWFuKG51bWJlcnM6IG51bWJlcltdKSB7XHJcbiAgICBsZXQgdG90YWwgPSAwO1xyXG4gICAgZm9yIChjb25zdCBudW1iZXIgb2YgbnVtYmVycykge1xyXG4gICAgICAgIHRvdGFsICs9IG51bWJlcjtcclxuICAgIH1cclxuICAgIHJldHVybiB0b3RhbCAvIG51bWJlcnMubGVuZ3RoO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFRpbWVzdGFtcFRvTG9jYWxab25lKHRpbWVzdGFtcDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IHNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKHRpbWVzdGFtcCk7XHJcbiAgICBjb25zdCBsb2NhbE9mZnNldCA9IC0xICogc2VsZWN0ZWREYXRlLmdldFRpbWV6b25lT2Zmc2V0KCkgKiA2MDAwMDtcclxuICAgIGNvbnN0IHN0YW1wID0gdGltZXN0YW1wICsgbG9jYWxPZmZzZXQ7XHJcbiAgICByZXR1cm4gc3RhbXA7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm4gc3RyaW5nIGZvciBwZXJpb2Qgb2YgdGltZS4gUGFyYW1ldGVycyBhcmUgRGF0ZVRpbWUgb2JqZWN0cyBvZiBsdXhvbiBsaWJyYXJ5LlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zbGF0ZURhdGVQZXJpb2QoXHJcbiAgICB0cmFuc2xhdGVTZXJ2aWNlOiBhbnksXHJcbiAgICBkYXRlU3RhcnRQZXJpb2Q6IGFueSxcclxuICAgIGRhdGVFbmRQZXJpb2Q6IGFueSxcclxuKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGxvY2FsZSA9IGdldExvY2FsZUxvbmcodHJhbnNsYXRlU2VydmljZSk7XHJcbiAgICByZXR1cm4gYCR7ZGF0ZVN0YXJ0UGVyaW9kLnRvTG9jYWxlU3RyaW5nKHtcclxuICAgICAgICBsb2NhbGUsXHJcbiAgICAgICAgbW9udGg6IFwibG9uZ1wiLFxyXG4gICAgICAgIGRheTogXCIyLWRpZ2l0XCIsXHJcbiAgICB9KX0gLSAke2RhdGVFbmRQZXJpb2QudG9Mb2NhbGVTdHJpbmcoe1xyXG4gICAgICAgIGxvY2FsZSxcclxuICAgICAgICBtb250aDogXCJsb25nXCIsXHJcbiAgICAgICAgZGF5OiBcIjItZGlnaXRcIixcclxuICAgIH0pfSBgO1xyXG59XHJcblxyXG5cclxuLyoqXHJcbiogUmV0dXJuIGxvY2FsIGluIHRoZSBjYW5vbmljYWwgZm9ybTogXCJlbi1HQlwiLCBcImZyLUZSXCJcclxuKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGdldExvY2FsZUxvbmcodHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlKTogc3RyaW5nIHtcclxuICAgIGxldCBsYW5nID0gdHJhbnNsYXRlLmN1cnJlbnRMYW5nXHJcbiAgICAgICAgPyB0cmFuc2xhdGUuY3VycmVudExhbmdcclxuICAgICAgICA6IHRyYW5zbGF0ZS5kZWZhdWx0TGFuZztcclxuXHJcbiAgICAvKiogVHJhbnNmb3JtICdfZnInIHRvICdmcicgKi9cclxuICAgIGxhbmcgPSBsYW5nLnNsaWNlKDEpO1xyXG4gICAgaWYgKGxhbmcgPT09IFwiZW5cIikge1xyXG4gICAgICAgIHJldHVybiBcImVuLUdCXCI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYCR7bGFuZ30tJHtsYW5nLnRvVXBwZXJDYXNlKCl9YDtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJldHVybiBsb2NhbCBpbiB0aGUgc2hvcnQgZm9ybTogXCJlblwiLCBcImZyXCJcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRMb2NhbGVTaG9ydCh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UpOiBzdHJpbmcge1xyXG4gICAgbGV0IGxhbmcgPSB0cmFuc2xhdGUuY3VycmVudExhbmdcclxuICAgICAgICA/IHRyYW5zbGF0ZS5jdXJyZW50TGFuZ1xyXG4gICAgICAgIDogdHJhbnNsYXRlLmRlZmF1bHRMYW5nO1xyXG5cclxuICAgIC8qKiBUcmFuc2Zvcm0gJ19mcicgdG8gJ2ZyJyAqL1xyXG4gICAgbGFuZyA9IGxhbmcuc2xpY2UoMSk7XHJcbiAgICByZXR1cm4gbGFuZztcclxufVxyXG5cclxuLyoqXHJcbiAqIEZvcm1hdCBzdHJpbmcgdG8gbG93ZXJjYXNlLCBubyBzcGFjZXNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdUb0xvd2VyY2FzZU5vU3BhY2VzKGlucHV0OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3Qgd29yZHMgPSBpbnB1dC50b0xvd2VyQ2FzZSgpLnNwbGl0KC9cXHMrLyk7XHJcbiAgICByZXR1cm4gd29yZHMuam9pbihcIlwiKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFRlc3QgaWYgdGhlIG9iamVjdCA9PT0ge31cclxuICogQHBhcmFtIG9iaiBvYmplY3Qge2tleTp2YWx1ZX1cclxuICogQHJldHVybnMgYm9vbGVhblxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzRW1wdHlPYmplY3Qob2JqZWN0KTogYm9vbGVhbiB7XHJcbiAgICBmb3IgKGNvbnN0IHggaW4gb2JqZWN0KSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzaHVmZmxlQXJyYXkoYXJyYXk6IGFueVtdKSB7XHJcbiAgICBjb25zdCBuZXdBcnJheSA9IFsuLi5hcnJheV07XHJcbiAgICBmb3IgKGxldCBpbmRleCA9IGFycmF5Lmxlbmd0aCAtIDE7IGluZGV4ID4gMDsgaW5kZXgtLSkge1xyXG4gICAgICAgIGNvbnN0IGluZGV4TmV3ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKGluZGV4ICsgMSkpO1xyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxyXG4gICAgICAgIFtuZXdBcnJheVtpbmRleF0sIG5ld0FycmF5W2luZGV4TmV3XV0gPSBbXHJcbiAgICAgICAgICAgIG5ld0FycmF5W2luZGV4TmV3XSxcclxuICAgICAgICAgICAgbmV3QXJyYXlbaW5kZXhdLFxyXG4gICAgICAgIF07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV3QXJyYXk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBudW1iZXJUb0RhdGVTdHJpbmcodGltZXN0YW1wOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgY29uc3QganNEYXRlID0gbmV3IERhdGUodGltZXN0YW1wKTtcclxuICAgIHJldHVybiBqc0RhdGUudG9Mb2NhbGVTdHJpbmcoXCJmci1GUlwiKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGR1cmF0aW9uVG9TdHJpbmcoXHJcbiAgICBkdXJhdGlvbjogbnVtYmVyLFxyXG4gICAgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4pOiBzdHJpbmcge1xyXG4gICAgY29uc3QgZGF5cyA9IE1hdGguZmxvb3IoZHVyYXRpb24gLyAzNjAwIC8gMjQpO1xyXG4gICAgY29uc3QgaG91cnMgPSBNYXRoLmZsb29yKChkdXJhdGlvbiAtIGRheXMgKiAyNCAqIDM2MDApIC8gMzYwMCk7XHJcbiAgICBjb25zdCBtaW51dGVzID0gTWF0aC5mbG9vcigoZHVyYXRpb24gJSAzNjAwKSAvIDYwKTtcclxuICAgIGNvbnN0IHNlY29uZHMgPSBNYXRoLmZsb29yKGR1cmF0aW9uICUgNjApO1xyXG5cclxuICAgIGNvbnN0IGRheXNTdHJpbmcgPSB0cmFuc2xhdGUuaW5zdGFudChcImRheShzKVwiKTtcclxuICAgIGNvbnN0IGhvdXJzU3RyaW5nID0gdHJhbnNsYXRlLmluc3RhbnQoXCJob3VyKHMpXCIpO1xyXG4gICAgY29uc3Qgb25lSG91clN0cmluZyA9IHRyYW5zbGF0ZS5pbnN0YW50KFwiaG91clwiKTtcclxuICAgIGNvbnN0IG1pbnV0ZXNTdHJpbmcgPSB0cmFuc2xhdGUuaW5zdGFudChcIm1pbnV0ZShzKVwiKTtcclxuICAgIGNvbnN0IHNlY29uZHNTdHJpbmcgPSB0cmFuc2xhdGUuaW5zdGFudChcInNlY29uZChzKVwiKTtcclxuXHJcbiAgICBpZiAoZHVyYXRpb24gPiAzNjAwICogMjQgKiA3KSB7XHJcbiAgICAgICAgcmV0dXJuIGAke2RheXN9ICR7ZGF5c1N0cmluZ31gO1xyXG4gICAgfVxyXG4gICAgaWYgKGR1cmF0aW9uID4gMzYwMCAqIDI0KSB7XHJcbiAgICAgICAgcmV0dXJuIGAke2RheXN9ICR7ZGF5c1N0cmluZ30gJHtob3Vyc30gJHtob3Vyc1N0cmluZ31gO1xyXG4gICAgfVxyXG4gICAgaWYgKGR1cmF0aW9uID09PSAzNjAwKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke2hvdXJzfSAke29uZUhvdXJTdHJpbmd9YDtcclxuICAgIH1cclxuICAgIGlmIChkdXJhdGlvbiA+IDM2MDApIHtcclxuICAgICAgICBpZiAobWludXRlcyA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gYCR7aG91cnN9ICR7aG91cnNTdHJpbmd9YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGAke2hvdXJzfSAke2hvdXJzU3RyaW5nfSAke21pbnV0ZXN9ICR7bWludXRlc1N0cmluZ31gO1xyXG4gICAgfVxyXG4gICAgaWYgKGR1cmF0aW9uID49IDYwKSB7XHJcbiAgICAgICAgaWYgKHNlY29uZHMgPT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGAke21pbnV0ZXN9ICR7bWludXRlc1N0cmluZ31gO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYCR7bWludXRlc30gJHttaW51dGVzU3RyaW5nfSAke3NlY29uZHN9ICR7c2Vjb25kc1N0cmluZ31gO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGAke3NlY29uZHN9ICR7c2Vjb25kc1N0cmluZ31gO1xyXG59XHJcblxyXG5cclxuIl19
471
+ export function pointToString(point) {
472
+ const x = point.x.toFixed(3);
473
+ const y = point.y.toFixed(3);
474
+ const z = point.z.toFixed(3);
475
+ return `{ x: ${x}, y: ${y}, z: ${z} }`;
476
+ }
477
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWNvcmUvc3JjL2xpYi9oZWxwZXJzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sOERBQThELENBQUM7QUFDekcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDN0QsT0FBTyxFQUFxQixXQUFXLEVBQUUsTUFBTSxFQUFXLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV2RyxNQUFNLFVBQVUsMkJBQTJCLENBQUMsVUFBVSxFQUFFLFFBQVE7SUFDNUQsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUNyQyxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDckMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3hELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLENBQUM7QUFFRCxNQUFNLFVBQVUsZUFBZSxDQUFDLElBQWE7SUFDekMsUUFBUSxJQUFJLEVBQUUsQ0FBQztRQUNYLEtBQUssT0FBTyxDQUFDLFNBQVM7WUFDbEIsT0FBTyxXQUFXLENBQUM7UUFDdkIsS0FBSyxPQUFPLENBQUMsTUFBTTtZQUNmLE9BQU8sUUFBUSxDQUFDO1FBQ3BCLEtBQUssT0FBTyxD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R0FBRyxLQUFLLElBQUksV0FBVyxFQUFFLENBQUM7UUFDckMsQ0FBQztRQUNELE9BQU8sR0FBRyxLQUFLLElBQUksV0FBVyxJQUFJLE9BQU8sSUFBSSxhQUFhLEVBQUUsQ0FBQztJQUNqRSxDQUFDO0lBQ0QsSUFBSSxRQUFRLElBQUksRUFBRSxFQUFFLENBQUM7UUFDakIsSUFBSSxPQUFPLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDaEIsT0FBTyxHQUFHLE9BQU8sSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUN6QyxDQUFDO1FBQ0QsT0FBTyxHQUFHLE9BQU8sSUFBSSxhQUFhLElBQUksT0FBTyxJQUFJLGFBQWEsRUFBRSxDQUFDO0lBQ3JFLENBQUM7SUFDRCxPQUFPLEdBQUcsT0FBTyxJQUFJLGFBQWEsRUFBRSxDQUFDO0FBQ3pDLENBQUM7QUFFRCxNQUFNLFVBQVUsYUFBYSxDQUFDLEtBQTBDO0lBQ3BFLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdCLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdCLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRTdCLE9BQU8sUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO0FBQzNDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ2JNb2RhbCB9IGZyb20gXCJAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcFwiO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSBcIkBuZ3gtdHJhbnNsYXRlL2NvcmVcIjtcclxuaW1wb3J0IHsgTW9kYWxTd2l0Y2hWaXNpdENvbXBvbmVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvbW9kYWwtc3dpdGNoLXZpc2l0L21vZGFsLXN3aXRjaC12aXNpdC5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgZG93bmxvYWRGaWxlQXNPYmplY3QgfSBmcm9tIFwiLi9zZXJ2aWNlcy9zMy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEVxdWlwbWVudERvY3VtZW50LCBMZXZlbFN0YXR1cywgTG9jYWxlLCBNaXNzaW9uLCBQb2lUeXBlLCBSb2xlU3RhdHVzIH0gZnJvbSBcIi4vdHlwZXMuc2VydmljZVwiO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldERpc3RhbmNlQmV0d2VlblR3b1BvaW50cyhzdGFydFBvaW50LCBlbmRQb2ludCkge1xyXG4gICAgY29uc3QgZHggPSBlbmRQb2ludC54IC0gc3RhcnRQb2ludC54O1xyXG4gICAgY29uc3QgZHkgPSBlbmRQb2ludC55IC0gc3RhcnRQb2ludC55O1xyXG4gICAgY29uc3QgZHogPSBlbmRQb2ludC56IC0gc3RhcnRQb2ludC56O1xyXG4gICAgY29uc3QgZGlzdGFuY2UgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkgKyBkeiAqIGR6KTtcclxuICAgIHJldHVybiBNYXRoLnJvdW5kKGRpc3RhbmNlICogMTAwKSAvIDEwMDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHBvaVR5cGVUb1N0cmluZyh0eXBlOiBQb2lUeXBlKTogc3RyaW5nIHtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAgIGNhc2UgUG9pVHlwZS5FUVVJUE1FTlQ6XHJcbiAgICAgICAgICAgIHJldHVybiBcImVxdWlwbWVudFwiO1xyXG4gICAgICAgIGNhc2UgUG9pVHlwZS5USUNLRVQ6XHJcbiAgICAgICAgICAgIHJldHVybiBcInRpY2tldFwiO1xyXG4gICAgICAgIGNhc2UgUG9pVHlwZS5EQVRBOlxyXG4gICAgICAgICAgICByZXR1cm4gXCJkYXRhXCI7XHJcbiAgICAgICAgY2FzZSBQb2lUeXBlLkRFU0s6XHJcbiAgICAgICAgICAgIHJldHVybiBcImRhdGFcIjtcclxuICAgICAgICBjYXNlIFBvaVR5cGUuSU5GT1JNQVRJT046XHJcbiAgICAgICAgICAgIHJldHVybiBcImluZm9ybWF0aW9uXCI7XHJcbiAgICAgICAgY2FzZSBQb2lUeXBlLk1FQVNVUkU6XHJcbiAgICAgICAgICAgIHJldHVybiBcIm1lYXN1cmVcIjtcclxuICAgICAgICBjYXNlIFBvaVR5cGUuUEVPUExFOlxyXG4gICAgICAgICAgICByZXR1cm4gXCJwZW9wbGVcIjtcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICByZXR1cm4gXCJ0aWNrZXRcIjtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHdhaXQodGltZW91dDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICB0aW1lb3V0ID0gdGltZW91dCB8fCAyMDAwO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgfSwgdGltZW91dCk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IHdhaXRVbnRpbCA9IChjb25kaXRpb246ICgpID0+IGJvb2xlYW4pID0+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgY29uc3QgaW50ZXJ2YWxJZCA9IHNldEludGVydmFsKCgpID0+IHtcclxuICAgICAgICAgICAgaWYgKGNvbmRpdGlvbigpKSB7XHJcbiAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsSWQpO1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSwgMzApO1xyXG4gICAgfSk7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZW51bVRvQXJyYXkoZW51bWVyYWJsZTogYW55KSB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoZW51bWVyYWJsZSlcclxuICAgICAgICAuZmlsdGVyKCh2YWx1ZSkgPT4gaXNOYU4oTnVtYmVyKHZhbHVlKSkgPT09IHRydWUpXHJcbiAgICAgICAgLm1hcCgoa2V5KSA9PiBlbnVtZXJhYmxlW2tleV0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGV2ZWxzQmVsb3cobGV2ZWw6IExldmVsU3RhdHVzKTogTGV2ZWxTdGF0dXNbXSB7XHJcbiAgICBjb25zdCBhbGwgPSBbXHJcbiAgICAgICAgTGV2ZWxTdGF0dXMuTUlOSU1VTSxcclxuICAgICAgICBMZXZlbFN0YXR1cy5MT1csXHJcbiAgICAgICAgTGV2ZWxTdGF0dXMuTUVESVVNLFxyXG4gICAgICAgIExldmVsU3RhdHVzLkhJR0gsXHJcbiAgICAgICAgTGV2ZWxTdGF0dXMuTUFYSU1VTSxcclxuICAgIF07XHJcbiAgICBzd2l0Y2ggKGxldmVsKSB7XHJcbiAgICAgICAgY2FzZSBMZXZlbFN0YXR1cy5NQVhJTVVNOlxyXG4gICAgICAgICAgICByZXR1cm4gYWxsO1xyXG4gICAgICAgIGNhc2UgTGV2ZWxTdGF0dXMuSElHSDpcclxuICAgICAgICAgICAgYWxsLnNwbGljZSg0LCAxKTtcclxuICAgICAgICAgICAgcmV0dXJuIGFsbDtcclxuICAgICAgICBjYXNlIExldmVsU3RhdHVzLk1FRElVTTpcclxuICAgICAgICAgICAgYWxsLnNwbGljZSgzLCAyKTtcclxuICAgICAgICAgICAgcmV0dXJuIGFsbDtcclxuICAgICAgICBjYXNlIExldmVsU3RhdHVzLkxPVzpcclxuICAgICAgICAgICAgcmV0dXJuIFtMZXZlbFN0YXR1cy5NSU5JTVVNLCBMZXZlbFN0YXR1cy5MT1ddO1xyXG4gICAgICAgIGNhc2UgTGV2ZWxTdGF0dXMuTUlOSU1VTTpcclxuICAgICAgICAgICAgcmV0dXJuIFtMZXZlbFN0YXR1cy5NSU5JTVVNXTtcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICByZXR1cm4gW0xldmVsU3RhdHVzLk1JTklNVU1dO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGlnaGVzdExldmVsRm9yTWlzc2lvbnMobWlzc2lvbnM6IE1pc3Npb25bXSk6IExldmVsU3RhdHVzIHtcclxuICAgIGxldCBsYXRlc3RWaXNpYmxlTGV2ZWxzID0gW0xldmVsU3RhdHVzLk1JTklNVU1dO1xyXG4gICAgZm9yIChjb25zdCBtIG9mIG1pc3Npb25zKSB7XHJcbiAgICAgICAgY29uc3QgdmlzaWJsZUxldmVscyA9IGdldExldmVsc0JlbG93KG0ubGV2ZWwpO1xyXG4gICAgICAgIGlmICh2aXNpYmxlTGV2ZWxzLmxlbmd0aCA+IGxhdGVzdFZpc2libGVMZXZlbHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGxhdGVzdFZpc2libGVMZXZlbHMgPSB2aXNpYmxlTGV2ZWxzO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHN3aXRjaCAobGF0ZXN0VmlzaWJsZUxldmVscy5sZW5ndGgpIHtcclxuICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgIHJldHVybiBMZXZlbFN0YXR1cy5NSU5JTVVNO1xyXG4gICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgcmV0dXJuIExldmVsU3RhdHVzLkxPVztcclxuICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgIHJldHVybiBMZXZlbFN0YXR1cy5NRURJVU07XHJcbiAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgICAgICByZXR1cm4gTGV2ZWxTdGF0dXMuSElHSDtcclxuICAgICAgICBjYXNlIDU6XHJcbiAgICAgICAgICAgIHJldHVybiBMZXZlbFN0YXR1cy5NQVhJTVVNO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIHJldHVybiBMZXZlbFN0YXR1cy5NSU5JTVVNO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGlnaGVzdFJvbGVGb3JNaXNzaW9ucyhtaXNzaW9uczogTWlzc2lvbltdKTogUm9sZVN0YXR1cyB7XHJcbiAgICBsZXQgaGlnaGVzdFJvbGUgPSBSb2xlU3RhdHVzLlZJU0lUT1I7XHJcbiAgICBmb3IgKGNvbnN0IG0gb2YgbWlzc2lvbnMpIHtcclxuICAgICAgICBpZiAobS5yb2xlID09PSBSb2xlU3RhdHVzLkFETUlOKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBSb2xlU3RhdHVzLkFETUlOO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaGlnaGVzdFJvbGUgPT09IFJvbGVTdGF0dXMuT1dORVIpIHtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtLnJvbGUgPT09IFJvbGVTdGF0dXMuT1dORVIpIHtcclxuICAgICAgICAgICAgaGlnaGVzdFJvbGUgPSBSb2xlU3RhdHVzLk9XTkVSO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobS5yb2xlID09PSBSb2xlU3RhdHVzLk1BTkFHRVIpIHtcclxuICAgICAgICAgICAgaGlnaGVzdFJvbGUgPSBSb2xlU3RhdHVzLk1BTkFHRVI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgbS5yb2xlID09PSBSb2xlU3RhdHVzLlNFUlZJQ0UgJiZcclxuICAgICAgICAgICAgaGlnaGVzdFJvbGUgIT09IFJvbGVTdGF0dXMuTUFOQUdFUlxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBoaWdoZXN0Um9sZSA9IFJvbGVTdGF0dXMuU0VSVklDRTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBtLnJvbGUgPT09IFJvbGVTdGF0dXMuT0NDVVBBTlQgJiZcclxuICAgICAgICAgICAgaGlnaGVzdFJvbGUgPT09IFJvbGVTdGF0dXMuVklTSVRPUlxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBoaWdoZXN0Um9sZSA9IFJvbGVTdGF0dXMuT0NDVVBBTlQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtLnJvbGUgPT09IFJvbGVTdGF0dXMuR1VJREVfTVVTRVVNKSB7XHJcbiAgICAgICAgICAgIGhpZ2hlc3RSb2xlID0gUm9sZVN0YXR1cy5HVUlERV9NVVNFVU07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtLnJvbGUgPT09IFJvbGVTdGF0dXMuVklTSVRPUl9NVVNFVU0pIHtcclxuICAgICAgICAgICAgaGlnaGVzdFJvbGUgPSBSb2xlU3RhdHVzLlZJU0lUT1JfTVVTRVVNO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBoaWdoZXN0Um9sZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJvbGVzQmVsb3dGb3JNYW5hZ2VyKHJvbGU6IFJvbGVTdGF0dXMpOiBSb2xlU3RhdHVzW10ge1xyXG4gICAgY29uc3QgYWxsID0gW1xyXG4gICAgICAgIFJvbGVTdGF0dXMuVklTSVRPUixcclxuICAgICAgICBSb2xlU3RhdHVzLk9DQ1VQQU5ULFxyXG4gICAgICAgIFJvbGVTdGF0dXMuU0VSVklDRSxcclxuICAgICAgICBSb2xlU3RhdHVzLk1BTkFHRVIsXHJcbiAgICAgICAgUm9sZVN0YXR1cy5PV05FUixcclxuICAgICAgICBSb2xlU3RhdHVzLkFETUlOLFxyXG4gICAgXTtcclxuICAgIGNvbnN0IG11c2V1bSA9IFtSb2xlU3RhdHVzLlZJU0lUT1JfTVVTRVVNLCBSb2xlU3RhdHVzLkdVSURFX01VU0VVTV07XHJcbiAgICBzd2l0Y2ggKHJvbGUpIHtcclxuICAgICAgICBjYXNlIFJvbGVTdGF0dXMuQURNSU46XHJcbiAgICAgICAgICAgIHJldHVybiBbLi4uYWxsLCAuLi5tdXNldW1dO1xyXG4gICAgICAgIGNhc2UgUm9sZVN0YXR1cy5PV05FUjpcclxuICAgICAgICAgICAgYWxsLnNwbGljZSg1LCAxKTtcclxuICAgICAgICAgICAgcmV0dXJuIGFsbDtcclxuICAgICAgICBjYXNlIFJvbGVTdGF0dXMuTUFOQUdFUjpcclxuICAgICAgICAgICAgYWxsLnNwbGljZSg0LCAyKTtcclxuICAgICAgICAgICAgcmV0dXJuIGFsbDtcclxuICAgICAgICBjYXNlIFJvbGVTdGF0dXMuR1VJREVfTVVTRVVNOlxyXG4gICAgICAgICAgICByZXR1cm4gbXVzZXVtO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIHJldHVybiBhbGwuc3BsaWNlKDQsIDIpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyVW5pcXVlQXJyYXlCeUlEKGFycmF5T2ZPYmplY3RzOiBhbnlbXSk6IGFueVtdIHtcclxuICAgIHJldHVybiBhcnJheU9mT2JqZWN0cy5maWx0ZXIoXHJcbiAgICAgICAgKHYsIGluZGV4LCBhKSA9PiBhLmZpbmRJbmRleCgodCkgPT4gdC5pZCA9PT0gdi5pZCkgPT09IGluZGV4LFxyXG4gICAgKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZU51bGxLZXlzRnJvbU9iamVjdChvYmplY3Q6IE9iamVjdCkge1xyXG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMob2JqZWN0KSkge1xyXG4gICAgICAgIGlmIChvYmplY3Rba2V5XSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICBkZWxldGUgb2JqZWN0W2tleV07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG4vKipcclxuICogVGVzdCBpZiBhIGRhdGUgaGFzIGV4cGlyZWRcclxuICogQHBhcmFtIGRhdGVcclxuICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgZGF0ZSBoYXMgZXhwaXJlZCwgZmFsc2Ugb3RoZXJ3aXNlXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZGF0ZUhhc0V4cGlyZWQoXHJcbiAgICBkYXRlOiBzdHJpbmcgfCBEYXRlIHwgbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCxcclxuKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoZGF0ZSkge1xyXG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShkYXRlKSA8PSBuZXcgRGF0ZSgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5nTG9jYWxlVG9FbnVtKGxvY2FsZTogc3RyaW5nKTogTG9jYWxlIHtcclxuICAgIHN3aXRjaCAobG9jYWxlKSB7XHJcbiAgICAgICAgY2FzZSBcImVuXCI6XHJcbiAgICAgICAgICAgIHJldHVybiBMb2NhbGUuRU47XHJcbiAgICAgICAgY2FzZSBcImZyXCI6XHJcbiAgICAgICAgICAgIHJldHVybiBMb2NhbGUuRlI7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgcmV0dXJuIExvY2FsZS5FTjtcclxuICAgIH1cclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRNZXRhRm9ySW1hZ2UodXJsKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7XHJcblxyXG4gICAgICAgIGltZy5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHJlc29sdmUoaW1nKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBpbWcuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsICgpID0+IHJlamVjdCgpKTtcclxuICAgICAgICBpbWcuc3JjID0gdXJsO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzb3J0QWxwaGFiZXRpY2FsbHlPbk5hbWUoYXJyYXk6IHsgbmFtZTogc3RyaW5nOyB9W10pOiBhbnlbXSB7XHJcbiAgICByZXR1cm4gYXJyYXkuc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB2YWxpZEVtYWlsKGVtYWlsOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IHJlID1cclxuICAgICAgICAvXigoW15cXHNcIigpLC46Ozw+QFtcXFxcXFxdXSsoXFwuW15cXHNcIigpLC46Ozw+QFtcXFxcXFxdXSspKil8KFwiLitcIikpQCgoXFxbKD86XFxkezEsM31cXC4pezN9XFxkezEsM31dKXwoKFtcXGRBLVphLXpcXC1dK1xcLikrW0EtWmEtel17Mix9KSkkLztcclxuICAgIHJldHVybiByZS50ZXN0KGVtYWlsKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGRvd25sb2FkQmxvYihibG9iLCBmaWxlbmFtZSkge1xyXG4gICAgY29uc3QgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcclxuICAgIGEuaHJlZiA9IHVybDtcclxuICAgIGEuZG93bmxvYWQgPSBmaWxlbmFtZSB8fCBcImRvd25sb2FkXCI7XHJcbiAgICBjb25zdCBjbGlja0hhbmRsZXIgPSAoKSA9PiB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwodXJsKTtcclxuICAgICAgICAgICAgYS5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgY2xpY2tIYW5kbGVyKTtcclxuICAgICAgICB9LCAxNTApO1xyXG4gICAgfTtcclxuICAgIGEuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGNsaWNrSGFuZGxlciwgZmFsc2UpO1xyXG4gICAgYS5jbGljaygpO1xyXG4gICAgcmV0dXJuIGE7XHJcbn1cclxuXHJcbi8qXHJcbiAgICBPcGVuIG1vZGFsIGlmIG9uZSBoYXMgdG8gc3dpdGNoIHZpcnR1YWwgdmlzaXRcclxuKi9cclxuZXhwb3J0IGZ1bmN0aW9uIG9wZW5Nb2RhbEZvclZpc2l0U3dpdGNoKFxyXG4gICAgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCxcclxuICAgIG1vZGVsM0Q6IHN0cmluZyxcclxuICAgIHNwYWNlSUQ6IHN0cmluZyxcclxuICAgIGRhdGFUb01vdmU6IHsgc3dlZXBUb01vdmU6IHN0cmluZywgcm90YXRpb246IGFueTsgfSB8IG51bGwgPSBudWxsXHJcbikge1xyXG4gICAgY29uc3QgbW9kYWxSZWZlcmVuY2UgPSBtb2RhbFNlcnZpY2Uub3BlbihNb2RhbFN3aXRjaFZpc2l0Q29tcG9uZW50KTtcclxuICAgIG1vZGFsUmVmZXJlbmNlLmNvbXBvbmVudEluc3RhbmNlLmNvbnRlbnQgPVxyXG4gICAgICAgIFwiVGhpcyBvYmplY3QgYmVsb25ncyB0byBhbm90aGVyIDNEIHZpc2l0LiBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gc3dpdGNoIHRoZSB2aXNpdD9cIjtcclxuICAgIG1vZGFsUmVmZXJlbmNlLmNvbXBvbmVudEluc3RhbmNlLm1vZGVsM0QgPSBtb2RlbDNEO1xyXG4gICAgbW9kYWxSZWZlcmVuY2UuY29tcG9uZW50SW5zdGFuY2Uuc3BhY2VJRCA9IHNwYWNlSUQ7XHJcbiAgICBpZiAoZGF0YVRvTW92ZSkge1xyXG4gICAgICAgIG1vZGFsUmVmZXJlbmNlLmNvbXBvbmVudEluc3RhbmNlLmRhdGFUb01vdmUgPSBkYXRhVG9Nb3ZlO1xyXG4gICAgfVxyXG5cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEN1cnJlbnRMYW5nKHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSk6IHN0cmluZyB7XHJcbiAgICBsZXQgbGFuZyA9IHRyYW5zbGF0ZS5nZXRDdXJyZW50TGFuZygpIHx8IHRyYW5zbGF0ZS5nZXRGYWxsYmFja0xhbmcoKSB8fCBcImZyXCI7XHJcblxyXG4gICAgLy8gQ2xlYW4gdXAgbGVhZGluZyBtZXNzXHJcbiAgICBsYW5nID0gbGFuZy5yZXBsYWNlKC9eW18tXSsvLCAnJyk7XHJcblxyXG4gICAgLy8gSGFuZGxlIGZyX0ZSIG9yIGZyLUZSICh0YWtlIHByaW1hcnkgbGFuZ3VhZ2UpXHJcbiAgICBpZiAobGFuZy5pbmNsdWRlcyhcIl9cIikpIHtcclxuICAgICAgICBsYW5nID0gbGFuZy5zcGxpdChcIl9cIilbMF07XHJcbiAgICB9XHJcbiAgICBpZiAobGFuZy5pbmNsdWRlcyhcIi1cIikpIHtcclxuICAgICAgICBsYW5nID0gbGFuZy5zcGxpdChcIi1cIilbMF07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRW5zdXJlIDItbGV0dGVyIGNvZGUgKElTTyA2MzktMSlcclxuICAgIGlmIChsYW5nLmxlbmd0aCA+IDIpIHtcclxuICAgICAgICBsYW5nID0gbGFuZy5zdWJzdHJpbmcoMCwgMik7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGxhbmc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm4gYSBzdHJpbmcgb2YgYSBnaXZlbiBkYXRlIHRpbWUgaW4gbG9jYWwgZm9ybWF0LlxyXG4gKiBUaGUgZm9ybWF0IGlzIGRldGVybWluZWQgYnkgdGhlIGN1cnJlbnQgbGFuZ3VhZ2UuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZGF0ZVRpbWVUb0xvY2FsU3RyaW5nKFxyXG4gICAgZGF0ZTogbnVtYmVyIHwgc3RyaW5nIHwgRGF0ZSxcclxuICAgIHRyYW5zbGF0ZT86IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBtb2RlPyxcclxuKTogc3RyaW5nIHtcclxuICAgIGxldCBsYW5nID0gXCJlbi1FTlwiO1xyXG4gICAgaWYgKHRyYW5zbGF0ZSkge1xyXG4gICAgICAgIGxhbmcgPSBnZXRDdXJyZW50TGFuZyh0cmFuc2xhdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBvcHRpb25zOiB7XHJcbiAgICAgICAgbW9udGg/O1xyXG4gICAgICAgIHllYXI/O1xyXG4gICAgICAgIGRheT87XHJcbiAgICAgICAgaG91cj87XHJcbiAgICAgICAgbWludXRlPztcclxuICAgICAgICBzZWNvbmQ/O1xyXG4gICAgICAgIGRhdGVTdHlsZT87XHJcbiAgICAgICAgdGltZVN0eWxlPztcclxuICAgICAgICB3ZWVrZGF5PztcclxuICAgICAgICB0aW1lWm9uZT87XHJcbiAgICAgICAgdGltZVpvbmVOYW1lPztcclxuICAgIH07XHJcbiAgICBzd2l0Y2ggKG1vZGUpIHtcclxuICAgICAgICBjYXNlIFwiZGF5X251bWVyaWNcIjpcclxuICAgICAgICAgICAgb3B0aW9ucyA9IHsgZGF5OiBcIm51bWVyaWNcIiB9O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwiZGF5XCI6XHJcbiAgICAgICAgICAgIG9wdGlvbnMgPSB7IHdlZWtkYXk6IFwibG9uZ1wiIH07XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJkYXRlXCI6XHJcbiAgICAgICAgICAgIG9wdGlvbnMgPSB7IGRhdGVTdHlsZTogXCJsb25nXCIgfTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcInNob3J0X2RhdGVfdGltZVwiOlxyXG4gICAgICAgICAgICBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgeWVhcjogXCIyLWRpZ2l0XCIsXHJcbiAgICAgICAgICAgICAgICBtb250aDogXCIyLWRpZ2l0XCIsXHJcbiAgICAgICAgICAgICAgICBkYXk6IFwiMi1kaWdpdFwiLFxyXG4gICAgICAgICAgICAgICAgaG91cjogXCIyLWRpZ2l0XCIsXHJcbiAgICAgICAgICAgICAgICBtaW51dGU6IFwiMi1kaWdpdFwiLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwidGltZVwiOlxyXG4gICAgICAgICAgICBvcHRpb25zID0geyBob3VyOiBcIm51bWVyaWNcIiwgbWludXRlOiBcIm51bWVyaWNcIiB9O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwiZGF5X3RpbWVfem9uZVwiOlxyXG4gICAgICAgICAgICBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgd2Vla2RheTogXCJsb25nXCIsXHJcbiAgICAgICAgICAgICAgICB5ZWFyOiBcIm51bWVyaWNcIixcclxuICAgICAgICAgICAgICAgIG1vbnRoOiBcImxvbmdcIixcclxuICAgICAgICAgICAgICAgIGRheTogXCJudW1lcmljXCIsXHJcbiAgICAgICAgICAgICAgICBob3VyOiBcIm51bWVyaWNcIixcclxuICAgICAgICAgICAgICAgIG1pbnV0ZTogXCJudW1lcmljXCIsXHJcbiAgICAgICAgICAgICAgICB0aW1lWm9uZU5hbWU6IFwic2hvcnRPZmZzZXRcIixcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgIGRhdGVTdHlsZTogXCJsb25nXCIsXHJcbiAgICAgICAgICAgICAgICB0aW1lU3R5bGU6IFwic2hvcnRcIixcclxuICAgICAgICAgICAgfTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZXcgRGF0ZShkYXRlKS50b0xvY2FsZVN0cmluZyhsYW5nLCBvcHRpb25zKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENvbXBhcmVzIHR3byBzdHJpbmcgYXJyYXlzXHJcbiAqIEBwYXJhbSBhcnJheTFcclxuICogQHBhcmFtIGFycmF5MlxyXG4gKiBAcmV0dXJuc1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGFycmF5c0NvbnRhaW5TYW1lRWxlbWVudHMoXHJcbiAgICBhcnJheTE6IHN0cmluZ1tdLFxyXG4gICAgYXJyYXkyOiBzdHJpbmdbXSxcclxuKTogYm9vbGVhbiB7XHJcbiAgICBhcnJheTEuc29ydCgpO1xyXG4gICAgYXJyYXkyLnNvcnQoKTtcclxuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShhcnJheTEpID09PSBKU09OLnN0cmluZ2lmeShhcnJheTIpO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFZpc2l0VXJsKGN1cnJlbnRVcmw6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBwYXRoID0gY3VycmVudFVybC5zcGxpdChcIi9cIik7XHJcbiAgICBwYXRoLnNwbGljZSgzLCBwYXRoLmxlbmd0aCAtIDIpO1xyXG4gICAgcmV0dXJuIHBhdGguam9pbihcIi9cIik7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBFeHRyYWN0IHNwYWNlSUQgZnJvbSB1cmwgd2hlbiBpbiB2aXNpdCAzRFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFNwYWNlSURGcm9tVXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHZpc2l0VXJsID0gZ2V0VmlzaXRVcmwodXJsKTtcclxuICAgIHJldHVybiB2aXNpdFVybC5zcGxpdChcIi9cIilbMl07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBEb3dubG9hZCByZWxhdGVkXHJcbiAqL1xyXG5pbXBvcnQgKiBhcyBGaWxlU2F2ZXIgZnJvbSBcImZpbGUtc2F2ZXJcIjtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBkb3dubG9hZEZpbGUoZmlsZVVybDogc3RyaW5nLCBmaWxlTmFtZTogc3RyaW5nKSB7XHJcbiAgICBGaWxlU2F2ZXIuc2F2ZUFzKGZpbGVVcmwgKyBmaWxlTmFtZSwgZmlsZU5hbWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gb3BlbkRvY3VtZW50KGZpbGVVcmw6IHN0cmluZywgZmlsZU5hbWU6IHN0cmluZywgaWQ6IG51bWJlcikge1xyXG4gICAgd2luZG93Lm9wZW4oYCR7ZmlsZVVybCArIGZpbGVOYW1lfSNkb2M9JHtpZH1gLCBcIl9ibGFua1wiLCBcIlwiKTtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGRvd25sb2FkRXF1aXBtZW50RG9jdW1lbnQgPSBhc3luYyAoXHJcbiAgICBkb2N1bWVudF86IEVxdWlwbWVudERvY3VtZW50LFxyXG4pOiBQcm9taXNlPE9iamVjdCB8IHZvaWQ+ID0+IHtcclxuICAgIGNvbnN0IHNpZ25lZEZpbGUgPSBhd2FpdCBkb3dubG9hZEZpbGVBc09iamVjdChkb2N1bWVudF8udXJsKTtcclxuICAgIGlmIChzaWduZWRGaWxlKSB7XHJcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgIGRvd25sb2FkQmxvYihzaWduZWRGaWxlLkJvZHksIGRvY3VtZW50Xy5maWxlbmFtZSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2hlY2tFbGVtZW50QnlJZChzZWxlY3Rvcikge1xyXG4gICAgbGV0IHF1ZXJ5U2VsZWN0b3IgPSBudWxsO1xyXG4gICAgd2hpbGUgKHF1ZXJ5U2VsZWN0b3IgPT09IG51bGwpIHtcclxuICAgICAgICBhd2FpdCByYWZBc3luYygpO1xyXG4gICAgICAgIHF1ZXJ5U2VsZWN0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzZWxlY3Rvcik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcXVlcnlTZWxlY3RvcjtcclxufVxyXG5cclxuZnVuY3Rpb24gcmFmQXN5bmMoKSB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUocmVzb2x2ZSk7IC8vIGZhc3RlciB0aGFuIHNldCB0aW1lIG91dFxyXG4gICAgfSk7XHJcbn1cclxuXHJcbi8qIEBwYXJhbSB7QXJyYXl9IG51bWJlcnMgQW4gYXJyYXkgb2YgbnVtYmVycy5cclxuICogQHJldHVybiB7TnVtYmVyfSBUaGUgY2FsY3VsYXRlZCBhdmVyYWdlIChvciBtZWFuKSB2YWx1ZSBmcm9tIHRoZSBzcGVjaWZpZWRcclxuICogICAgIG51bWJlcnMuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gbWVhbihudW1iZXJzOiBudW1iZXJbXSkge1xyXG4gICAgbGV0IHRvdGFsID0gMDtcclxuICAgIGZvciAoY29uc3QgbnVtYmVyIG9mIG51bWJlcnMpIHtcclxuICAgICAgICB0b3RhbCArPSBudW1iZXI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdG90YWwgLyBudW1iZXJzLmxlbmd0aDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRUaW1lc3RhbXBUb0xvY2FsWm9uZSh0aW1lc3RhbXA6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBjb25zdCBzZWxlY3RlZERhdGUgPSBuZXcgRGF0ZSh0aW1lc3RhbXApO1xyXG4gICAgY29uc3QgbG9jYWxPZmZzZXQgPSAtMSAqIHNlbGVjdGVkRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpICogNjAwMDA7XHJcbiAgICBjb25zdCBzdGFtcCA9IHRpbWVzdGFtcCArIGxvY2FsT2Zmc2V0O1xyXG4gICAgcmV0dXJuIHN0YW1wO1xyXG59XHJcblxyXG4vKipcclxuICogUmV0dXJuIHN0cmluZyBmb3IgcGVyaW9kIG9mIHRpbWUuIFBhcmFtZXRlcnMgYXJlIERhdGVUaW1lIG9iamVjdHMgb2YgbHV4b24gbGlicmFyeS5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2xhdGVEYXRlUGVyaW9kKFxyXG4gICAgdHJhbnNsYXRlU2VydmljZTogYW55LFxyXG4gICAgZGF0ZVN0YXJ0UGVyaW9kOiBhbnksXHJcbiAgICBkYXRlRW5kUGVyaW9kOiBhbnksXHJcbik6IHN0cmluZyB7XHJcbiAgICBjb25zdCBsb2NhbGUgPSBnZXRMb2NhbGVMb25nKHRyYW5zbGF0ZVNlcnZpY2UpO1xyXG4gICAgcmV0dXJuIGAke2RhdGVTdGFydFBlcmlvZC50b0xvY2FsZVN0cmluZyh7XHJcbiAgICAgICAgbG9jYWxlLFxyXG4gICAgICAgIG1vbnRoOiBcImxvbmdcIixcclxuICAgICAgICBkYXk6IFwiMi1kaWdpdFwiLFxyXG4gICAgfSl9IC0gJHtkYXRlRW5kUGVyaW9kLnRvTG9jYWxlU3RyaW5nKHtcclxuICAgICAgICBsb2NhbGUsXHJcbiAgICAgICAgbW9udGg6IFwibG9uZ1wiLFxyXG4gICAgICAgIGRheTogXCIyLWRpZ2l0XCIsXHJcbiAgICB9KX0gYDtcclxufVxyXG5cclxuXHJcbi8qKlxyXG4qIFJldHVybiBsb2NhbCBpbiB0aGUgY2Fub25pY2FsIGZvcm06IFwiZW4tR0JcIiwgXCJmci1GUlwiXHJcbiovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRMb2NhbGVMb25nKHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSk6IHN0cmluZyB7XHJcbiAgICBsZXQgbGFuZyA9IGdldEN1cnJlbnRMYW5nKHRyYW5zbGF0ZSk7XHJcblxyXG4gICAgaWYgKGxhbmcgPT09IFwiZW5cIikge1xyXG4gICAgICAgIHJldHVybiBcImVuLUdCXCI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYCR7bGFuZ30tJHtsYW5nLnRvVXBwZXJDYXNlKCl9YDtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJldHVybiBsb2NhbCBpbiB0aGUgc2hvcnQgZm9ybTogXCJlblwiLCBcImZyXCJcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRMb2NhbGVTaG9ydCh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGdldEN1cnJlbnRMYW5nKHRyYW5zbGF0ZSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBGb3JtYXQgc3RyaW5nIHRvIGxvd2VyY2FzZSwgbm8gc3BhY2VzXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5nVG9Mb3dlcmNhc2VOb1NwYWNlcyhpbnB1dDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHdvcmRzID0gaW5wdXQudG9Mb3dlckNhc2UoKS5zcGxpdCgvXFxzKy8pO1xyXG4gICAgcmV0dXJuIHdvcmRzLmpvaW4oXCJcIik7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBUZXN0IGlmIHRoZSBvYmplY3QgPT09IHt9XHJcbiAqIEBwYXJhbSBvYmogb2JqZWN0IHtrZXk6dmFsdWV9XHJcbiAqIEByZXR1cm5zIGJvb2xlYW5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0VtcHR5T2JqZWN0KG9iamVjdCk6IGJvb2xlYW4ge1xyXG4gICAgZm9yIChjb25zdCB4IGluIG9iamVjdCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2h1ZmZsZUFycmF5KGFycmF5OiBhbnlbXSkge1xyXG4gICAgY29uc3QgbmV3QXJyYXkgPSBbLi4uYXJyYXldO1xyXG4gICAgZm9yIChsZXQgaW5kZXggPSBhcnJheS5sZW5ndGggLSAxOyBpbmRleCA+IDA7IGluZGV4LS0pIHtcclxuICAgICAgICBjb25zdCBpbmRleE5ldyA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChpbmRleCArIDEpKTtcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cclxuICAgICAgICBbbmV3QXJyYXlbaW5kZXhdLCBuZXdBcnJheVtpbmRleE5ld11dID0gW1xyXG4gICAgICAgICAgICBuZXdBcnJheVtpbmRleE5ld10sXHJcbiAgICAgICAgICAgIG5ld0FycmF5W2luZGV4XSxcclxuICAgICAgICBdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5ld0FycmF5O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbnVtYmVyVG9EYXRlU3RyaW5nKHRpbWVzdGFtcDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGpzRGF0ZSA9IG5ldyBEYXRlKHRpbWVzdGFtcCk7XHJcbiAgICByZXR1cm4ganNEYXRlLnRvTG9jYWxlU3RyaW5nKFwiZnItRlJcIik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBkdXJhdGlvblRvU3RyaW5nKFxyXG4gICAgZHVyYXRpb246IG51bWJlcixcclxuICAgIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcclxuKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGRheXMgPSBNYXRoLmZsb29yKGR1cmF0aW9uIC8gMzYwMCAvIDI0KTtcclxuICAgIGNvbnN0IGhvdXJzID0gTWF0aC5mbG9vcigoZHVyYXRpb24gLSBkYXlzICogMjQgKiAzNjAwKSAvIDM2MDApO1xyXG4gICAgY29uc3QgbWludXRlcyA9IE1hdGguZmxvb3IoKGR1cmF0aW9uICUgMzYwMCkgLyA2MCk7XHJcbiAgICBjb25zdCBzZWNvbmRzID0gTWF0aC5mbG9vcihkdXJhdGlvbiAlIDYwKTtcclxuXHJcbiAgICBjb25zdCBkYXlzU3RyaW5nID0gdHJhbnNsYXRlLmluc3RhbnQoXCJkYXkocylcIik7XHJcbiAgICBjb25zdCBob3Vyc1N0cmluZyA9IHRyYW5zbGF0ZS5pbnN0YW50KFwiaG91cihzKVwiKTtcclxuICAgIGNvbnN0IG9uZUhvdXJTdHJpbmcgPSB0cmFuc2xhdGUuaW5zdGFudChcImhvdXJcIik7XHJcbiAgICBjb25zdCBtaW51dGVzU3RyaW5nID0gdHJhbnNsYXRlLmluc3RhbnQoXCJtaW51dGUocylcIik7XHJcbiAgICBjb25zdCBzZWNvbmRzU3RyaW5nID0gdHJhbnNsYXRlLmluc3RhbnQoXCJzZWNvbmQocylcIik7XHJcblxyXG4gICAgaWYgKGR1cmF0aW9uID4gMzYwMCAqIDI0ICogNykge1xyXG4gICAgICAgIHJldHVybiBgJHtkYXlzfSAke2RheXNTdHJpbmd9YDtcclxuICAgIH1cclxuICAgIGlmIChkdXJhdGlvbiA+IDM2MDAgKiAyNCkge1xyXG4gICAgICAgIHJldHVybiBgJHtkYXlzfSAke2RheXNTdHJpbmd9ICR7aG91cnN9ICR7aG91cnNTdHJpbmd9YDtcclxuICAgIH1cclxuICAgIGlmIChkdXJhdGlvbiA9PT0gMzYwMCkge1xyXG4gICAgICAgIHJldHVybiBgJHtob3Vyc30gJHtvbmVIb3VyU3RyaW5nfWA7XHJcbiAgICB9XHJcbiAgICBpZiAoZHVyYXRpb24gPiAzNjAwKSB7XHJcbiAgICAgICAgaWYgKG1pbnV0ZXMgPT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGAke2hvdXJzfSAke2hvdXJzU3RyaW5nfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBgJHtob3Vyc30gJHtob3Vyc1N0cmluZ30gJHttaW51dGVzfSAke21pbnV0ZXNTdHJpbmd9YDtcclxuICAgIH1cclxuICAgIGlmIChkdXJhdGlvbiA+PSA2MCkge1xyXG4gICAgICAgIGlmIChzZWNvbmRzID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBgJHttaW51dGVzfSAke21pbnV0ZXNTdHJpbmd9YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGAke21pbnV0ZXN9ICR7bWludXRlc1N0cmluZ30gJHtzZWNvbmRzfSAke3NlY29uZHNTdHJpbmd9YDtcclxuICAgIH1cclxuICAgIHJldHVybiBgJHtzZWNvbmRzfSAke3NlY29uZHNTdHJpbmd9YDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHBvaW50VG9TdHJpbmcocG9pbnQ6IHsgeDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlciB9KTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHggPSBwb2ludC54LnRvRml4ZWQoMyk7XHJcbiAgICBjb25zdCB5ID0gcG9pbnQueS50b0ZpeGVkKDMpO1xyXG4gICAgY29uc3QgeiA9IHBvaW50LnoudG9GaXhlZCgzKTtcclxuXHJcbiAgICByZXR1cm4gYHsgeDogJHt4fSwgeTogJHt5fSwgejogJHt6fSB9YDtcclxufVxyXG5cclxuXHJcbiJdfQ==
@@ -9,62 +9,43 @@ export class MattertagData {
9
9
  mediaSrc;
10
10
  sweepID;
11
11
  customIconIndex = 0;
12
- rotation;
12
+ rotation = null;
13
13
  poi;
14
+ matterportSid = null;
14
15
  constructor(type) {
15
16
  this.setType(type);
16
17
  }
17
- /*-----------------------------------------------------------------------------
18
- Setters
19
- ------------------------------------------------------------------------------*/
20
- setType(type) {
21
- this.type = type;
22
- }
18
+ /*---------------------------------------------------------------------------
19
+ Setters
20
+ ---------------------------------------------------------------------------*/
21
+ setType(type) { this.type = type; }
23
22
  setObject(object, tagType) {
24
23
  this.object = object;
25
24
  this.setElementID(object.id);
26
25
  this.setType(tagType);
27
26
  }
28
- setElementID(ticketID) {
29
- this.elementID = ticketID;
30
- }
27
+ setElementID(id) { this.elementID = id; }
31
28
  setPosition(position) {
32
29
  this.position = position;
33
30
  }
34
31
  setNormal(normal) {
35
32
  this.normal = normal;
36
33
  }
37
- setMediaSource(source) {
38
- this.mediaSrc = source;
39
- }
40
- setSweepID(sweepID) {
41
- this.sweepID = sweepID;
42
- }
43
- setRotation(rotation) {
44
- this.rotation = rotation;
45
- }
46
- setPoi(poi) {
47
- this.poi = poi;
48
- }
49
- /*-----------------------------------------------------------------------------
50
- Getters
51
- ------------------------------------------------------------------------------*/
52
- // MattertagData
34
+ setMediaSource(source) { this.mediaSrc = source; }
35
+ setSweepID(sweepID) { this.sweepID = sweepID; }
36
+ setRotation(rotation) { this.rotation = rotation; }
37
+ setPoi(poi) { this.poi = poi; }
38
+ setMatterportSid(sid) { this.matterportSid = sid; }
39
+ /*---------------------------------------------------------------------------
40
+ Getters
41
+ ---------------------------------------------------------------------------*/
53
42
  getData() {
54
43
  let label = "New Tag";
55
44
  switch (this.type) {
56
45
  case PoiType.TICKET:
57
- label = this.object ? "" : "New Tag"; // if the object exists we inject title in html
58
- break;
59
46
  case PoiType.EQUIPMENT:
60
- label = this.object ? "" : "New Tag";
61
- break;
62
47
  case PoiType.MEASURE:
63
- label = this.object ? "" : "New Tag";
64
- break;
65
48
  case PoiType.DATA:
66
- label = this.object ? "" : "New Tag";
67
- break;
68
49
  case PoiType.DESK:
69
50
  label = this.object ? "" : "New Tag";
70
51
  break;
@@ -76,47 +57,73 @@ export class MattertagData {
76
57
  break;
77
58
  default:
78
59
  label = "New Tag";
79
- break;
80
60
  }
81
- const data = {
61
+ return {
82
62
  label,
83
63
  description: "",
84
- anchorPosition: {
85
- x: this.position.x * 1,
86
- y: this.position.y * 1,
87
- z: this.position.z * 1,
88
- },
89
- stemVector: {
90
- x: this.normal.x * 0.3,
91
- y: this.normal.y * 0.3,
92
- z: this.normal.z * 0.3,
93
- },
94
- color: {
95
- // blue disc
96
- r: 0,
97
- g: 0,
98
- b: 1,
99
- },
100
- media: {
101
- type: "mattertag.media.none",
102
- src: ""
103
- },
64
+ anchorPosition: { ...this.position },
65
+ stemVector: this.getStemVector(),
66
+ color: { r: 1, g: 1, b: 1 },
104
67
  };
105
- return data;
106
68
  }
107
- getType() {
108
- return this.type;
69
+ /**
70
+ * Get the descriptor for sdk.Tag.add(...descriptor)
71
+ * Format : [{ label, description, anchorPosition, stemVector, color, id? }]
72
+ * If matterportSid is defined (already known tag) we send it so the SDK
73
+ * reuse it instead of trying to create a new one and generate an error : "already in use".
74
+ */
75
+ getMattertagDescriptor() {
76
+ const base = this.getData();
77
+ const descriptor = { ...base };
78
+ if (this.matterportSid) {
79
+ descriptor['id'] = this.matterportSid;
80
+ }
81
+ return [descriptor];
82
+ }
83
+ /**
84
+ * Get data for sdk.Tag.editPosition() or sdk.Tag.editBillboard().
85
+ */
86
+ getTagSdkData() {
87
+ return {
88
+ anchorPosition: { ...this.position },
89
+ stemVector: this.getStemVector(),
90
+ };
109
91
  }
110
- getNormal() {
111
- return this.normal;
92
+ /** Load the matterportSid from the poi metadata */
93
+ loadSidFromPoi(poi) {
94
+ if (!poi?.metadata)
95
+ return;
96
+ try {
97
+ const meta = JSON.parse(poi.metadata);
98
+ if (meta?.sid && typeof meta.sid === 'string') {
99
+ this.matterportSid = meta.sid;
100
+ }
101
+ }
102
+ catch { }
103
+ }
104
+ /** Get the stem vector for the tag */
105
+ getStemVector() {
106
+ return {
107
+ x: this.normal.x * 0.3,
108
+ y: this.normal.y * 0.3,
109
+ z: this.normal.z * 0.3,
110
+ };
112
111
  }
112
+ getType() { return this.type; }
113
+ getNormal() { return this.normal; }
114
+ getPosition() { return this.position; }
115
+ getSweepID() { return this.sweepID; }
116
+ getObject() { return this.object; }
117
+ getRotation() { return this.rotation; }
118
+ getPoi() { return this.poi; }
119
+ getMatterportSid() { return this.matterportSid; }
120
+ /** Get the action mode for the tag */
113
121
  getCallbackActionMode() {
114
122
  switch (this.type) {
115
123
  case PoiType.TICKET:
116
124
  return this.object ? MattertagActionMode.POSITION_TICKET : MattertagActionMode.ADD_TICKET;
117
125
  case PoiType.OBJECT3D:
118
126
  return MattertagActionMode.POSITION_OBJECT3D;
119
- // return this.object ? MattertagActionMode.POSITION_OBJECT3D : MattertagActionMode.ADD_OBJECT3D;
120
127
  case PoiType.EQUIPMENT:
121
128
  return this.object ? MattertagActionMode.POSITION_EQUIPMENT : MattertagActionMode.ADD_EQUIPMENT;
122
129
  case PoiType.DATA:
@@ -129,43 +136,36 @@ export class MattertagData {
129
136
  return MattertagActionMode.ADD_TICKET;
130
137
  }
131
138
  }
139
+ /** Get the icon for the tag */
132
140
  getIcon() {
133
141
  switch (this.type) {
134
- case PoiType.TICKET:
135
- return "icon_ticket.png";
136
- case PoiType.EQUIPMENT:
137
- return "icon_equipment.png";
138
- case PoiType.OBJECT3D:
139
- return "icon_object3d.png";
142
+ case PoiType.TICKET: return "icon_ticket.png";
143
+ case PoiType.EQUIPMENT: return "icon_equipment.png";
144
+ case PoiType.OBJECT3D: return "icon_object3d.png";
145
+ case PoiType.MEASURE: return "icon_measure.png";
146
+ case PoiType.DATA: return "icon_data.png";
147
+ case PoiType.DESK: return "icon_data.png";
148
+ case PoiType.ROOM: return "";
149
+ default: return "";
140
150
  }
141
- return "";
142
151
  }
152
+ /** Get the coordinate string for the tag */
143
153
  getCoordinateString() {
144
154
  return JSON.stringify({
145
155
  x: this.position.x,
146
156
  y: this.position.y,
147
157
  z: this.position.z,
148
- xRotation: this.rotation ? this.rotation.x : null,
149
- yRotation: this.rotation ? this.rotation.y : null,
158
+ xRotation: this.rotation?.x ?? null,
159
+ yRotation: this.rotation?.y ?? null,
150
160
  });
151
161
  }
162
+ /** Get the metadata string for the tag */
152
163
  getMetadataString() {
153
164
  return JSON.stringify({
154
165
  icon: this.getIcon(),
155
166
  normal: this.getNormal(),
167
+ sid: this.matterportSid,
156
168
  });
157
169
  }
158
- getSweepID() {
159
- return this.sweepID;
160
- }
161
- getObject() {
162
- return this.object;
163
- }
164
- getRotation() {
165
- return this.rotation;
166
- }
167
- getPoi() {
168
- return this.poi;
169
- }
170
170
  }
171
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0dGVydGFnRGF0YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zbWFydGVycGxhbi1jb3JlL3NyYy9saWIvbWF0dGVydGFnRGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwQ0FBMEM7QUFDMUMsT0FBTyxFQUFnQixtQkFBbUIsRUFBTyxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVsRixNQUFNLE9BQU8sYUFBYTtJQUVkLE1BQU0sQ0FBZTtJQUVyQixJQUFJLEdBQVksT0FBTyxDQUFDLE1BQU0sQ0FBQztJQUVoQyxTQUFTLENBQVM7SUFFakIsUUFBUSxHQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUVyQyxNQUFNLEdBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0lBRW5DLFFBQVEsQ0FBUztJQUVqQixPQUFPLENBQVM7SUFFakIsZUFBZSxHQUFHLENBQUMsQ0FBQztJQUVuQixRQUFRLENBQTRCO0lBRXBDLEdBQUcsQ0FBTTtJQUVqQixZQUFZLElBQWE7UUFDckIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBRUQ7O29GQUVnRjtJQUVoRixPQUFPLENBQUMsSUFBYTtRQUNqQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNyQixDQUFDO0lBRUQsU0FBUyxDQUFDLE1BQW9CLEVBQUUsT0FBZ0I7UUFDNUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMxQixDQUFDO0lB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O1NBQzNCLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxVQUFVO1FBQ04sT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxTQUFTO1FBQ0wsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7SUFHRCxXQUFXO1FBQ1AsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxNQUFNO1FBQ0YsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQ3BCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHVuaWNvcm4vZmlsZW5hbWUtY2FzZSAqL1xyXG5pbXBvcnQgeyBEYk9iamVjdFR5cGUsIE1hdHRlcnRhZ0FjdGlvbk1vZGUsIFBPSSwgUG9pVHlwZSB9IGZyb20gXCIuL3R5cGVzLnNlcnZpY2VcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBNYXR0ZXJ0YWdEYXRhIHtcclxuXHJcbiAgICBwcml2YXRlIG9iamVjdDogRGJPYmplY3RUeXBlO1xyXG5cclxuICAgIHByaXZhdGUgdHlwZTogUG9pVHlwZSA9IFBvaVR5cGUuVElDS0VUO1xyXG5cclxuICAgIHB1YmxpYyBlbGVtZW50SUQ6IHN0cmluZztcclxuXHJcbiAgICBwcml2YXRlIHBvc2l0aW9uOiBhbnkgPSB7IHg6IDAsIHk6IDAsIHo6IDAgfTtcclxuXHJcbiAgICBwcml2YXRlIG5vcm1hbDogYW55ID0geyB4OiAwLCB5OiAxLCB6OiAwIH07XHJcblxyXG4gICAgcHJpdmF0ZSBtZWRpYVNyYzogc3RyaW5nO1xyXG5cclxuICAgIHByaXZhdGUgc3dlZXBJRDogc3RyaW5nO1xyXG5cclxuICAgIHB1YmxpYyBjdXN0b21JY29uSW5kZXggPSAwO1xyXG5cclxuICAgIHByaXZhdGUgcm90YXRpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IH07XHJcblxyXG4gICAgcHJpdmF0ZSBwb2k6IFBPSTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcih0eXBlOiBQb2lUeXBlKSB7XHJcbiAgICAgICAgdGhpcy5zZXRUeXBlKHR5cGUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgICAgICBTZXR0ZXJzXHJcbiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG5cclxuICAgIHNldFR5cGUodHlwZTogUG9pVHlwZSkge1xyXG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0T2JqZWN0KG9iamVjdDogRGJPYmplY3RUeXBlLCB0YWdUeXBlOiBQb2lUeXBlKSB7XHJcbiAgICAgICAgdGhpcy5vYmplY3QgPSBvYmplY3Q7XHJcbiAgICAgICAgdGhpcy5zZXRFbGVtZW50SUQob2JqZWN0LmlkKTtcclxuICAgICAgICB0aGlzLnNldFR5cGUodGFnVHlwZSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0RWxlbWVudElEKHRpY2tldElEOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLmVsZW1lbnRJRCA9IHRpY2tldElEO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFBvc2l0aW9uKHBvc2l0aW9uOiB7IHg6IG51bWJlcjsgeTpudW1iZXI7IHo6bnVtYmVyOyB9KSB7XHJcbiAgICAgICAgdGhpcy5wb3NpdGlvbiA9IHBvc2l0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIHNldE5vcm1hbChub3JtYWw6IHsgeDogbnVtYmVyOyB5Om51bWJlcjsgejpudW1iZXI7IH0pIHtcclxuICAgICAgICB0aGlzLm5vcm1hbCA9IG5vcm1hbDtcclxuICAgIH1cclxuXHJcbiAgICBzZXRNZWRpYVNvdXJjZShzb3VyY2U6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMubWVkaWFTcmMgPSBzb3VyY2U7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0U3dlZXBJRChzd2VlcElEOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnN3ZWVwSUQgPSBzd2VlcElEO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFJvdGF0aW9uKHJvdGF0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB9KSB7XHJcbiAgICAgICAgdGhpcy5yb3RhdGlvbiA9IHJvdGF0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFBvaShwb2k6IFBPSSkge1xyXG4gICAgICAgIHRoaXMucG9pID0gcG9pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgICAgICBHZXR0ZXJzXHJcbiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG5cclxuICAgIC8vIE1hdHRlcnRhZ0RhdGFcclxuICAgIGdldERhdGEoKSB7XHJcbiAgICAgICAgbGV0IGxhYmVsID0gXCJOZXcgVGFnXCI7XHJcbiAgICAgICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSBQb2lUeXBlLlRJQ0tFVDpcclxuICAgICAgICAgICAgICAgIGxhYmVsID0gdGhpcy5vYmplY3QgPyBcIlwiIDogXCJOZXcgVGFnXCI7IC8vIGlmIHRoZSBvYmplY3QgZXhpc3RzIHdlIGluamVjdCB0aXRsZSBpbiBodG1sXHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBQb2lUeXBlLkVRVUlQTUVOVDpcclxuICAgICAgICAgICAgICAgIGxhYmVsID0gdGhpcy5vYmplY3QgPyBcIlwiIDogXCJOZXcgVGFnXCI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBQb2lUeXBlLk1FQVNVUkU6XHJcbiAgICAgICAgICAgICAgICBsYWJlbCA9IHRoaXMub2JqZWN0ID8gXCJcIiA6IFwiTmV3IFRhZ1wiO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgUG9pVHlwZS5EQVRBOlxyXG4gICAgICAgICAgICAgICAgbGFiZWwgPSB0aGlzLm9iamVjdCA/IFwiXCIgOiBcIk5ldyBUYWdcIjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFBvaVR5cGUuREVTSzpcclxuICAgICAgICAgICAgICAgIGxhYmVsID0gdGhpcy5vYmplY3QgPyBcIlwiIDogXCJOZXcgVGFnXCI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBQb2lUeXBlLk9CSkVDVDNEOlxyXG4gICAgICAgICAgICAgICAgbGFiZWwgPSB0aGlzLm9iamVjdCA/IFwiXCIgOiBcIkNsaWNrIG9uIGJsaW5raW5nIGljb24gdG8gbG9hZCBhIDNEIG9iamVjdCBoZXJlXCI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBQb2lUeXBlLlJPT006XHJcbiAgICAgICAgICAgICAgICBsYWJlbCA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIGxhYmVsID0gXCJOZXcgVGFnXCI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZGF0YSA9IHtcclxuICAgICAgICAgICAgbGFiZWwsXHJcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlwiLFxyXG4gICAgICAgICAgICBhbmNob3JQb3NpdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgeDogdGhpcy5wb3NpdGlvbi54ICogMSxcclxuICAgICAgICAgICAgICAgIHk6IHRoaXMucG9zaXRpb24ueSAqIDEsXHJcbiAgICAgICAgICAgICAgICB6OiB0aGlzLnBvc2l0aW9uLnogKiAxLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzdGVtVmVjdG9yOiB7XHJcbiAgICAgICAgICAgICAgICB4OiB0aGlzLm5vcm1hbC54ICogMC4zLFxyXG4gICAgICAgICAgICAgICAgeTogdGhpcy5ub3JtYWwueSAqIDAuMyxcclxuICAgICAgICAgICAgICAgIHo6IHRoaXMubm9ybWFsLnogKiAwLjMsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNvbG9yOiB7XHJcbiAgICAgICAgICAgICAgICAvLyBibHVlIGRpc2NcclxuICAgICAgICAgICAgICAgIHI6IDAsXHJcbiAgICAgICAgICAgICAgICBnOiAwLFxyXG4gICAgICAgICAgICAgICAgYjogMSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgbWVkaWE6IHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IFwibWF0dGVydGFnLm1lZGlhLm5vbmVcIixcclxuICAgICAgICAgICAgICAgIHNyYzogXCJcIlxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VHlwZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy50eXBlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldE5vcm1hbCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ub3JtYWw7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q2FsbGJhY2tBY3Rpb25Nb2RlKCk6IE1hdHRlcnRhZ0FjdGlvbk1vZGUge1xyXG4gICAgICAgIHN3aXRjaCAodGhpcy50eXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgUG9pVHlwZS5USUNLRVQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vYmplY3QgPyBNYXR0ZXJ0YWdBY3Rpb25Nb2RlLlBPU0lUSU9OX1RJQ0tFVCA6IE1hdHRlcnRhZ0FjdGlvbk1vZGUuQUREX1RJQ0tFVDtcclxuICAgICAgICAgICAgY2FzZSBQb2lUeXBlLk9CSkVDVDNEOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdHRlcnRhZ0FjdGlvbk1vZGUuUE9TSVRJT05fT0JKRUNUM0Q7XHJcbiAgICAgICAgICAgICAgICAvLyByZXR1cm4gdGhpcy5vYmplY3QgPyBNYXR0ZXJ0YWdBY3Rpb25Nb2RlLlBPU0lUSU9OX09CSkVDVDNEIDogTWF0dGVydGFnQWN0aW9uTW9kZS5BRERfT0JKRUNUM0Q7XHJcbiAgICAgICAgICAgIGNhc2UgUG9pVHlwZS5FUVVJUE1FTlQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vYmplY3QgPyBNYXR0ZXJ0YWdBY3Rpb25Nb2RlLlBPU0lUSU9OX0VRVUlQTUVOVCA6IE1hdHRlcnRhZ0FjdGlvbk1vZGUuQUREX0VRVUlQTUVOVDtcclxuICAgICAgICAgICAgY2FzZSBQb2lUeXBlLkRBVEE6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vYmplY3QgPyBNYXR0ZXJ0YWdBY3Rpb25Nb2RlLlBPU0lUSU9OX0RBVEEgOiBNYXR0ZXJ0YWdBY3Rpb25Nb2RlLkFERF9EQVRBO1xyXG4gICAgICAgICAgICBjYXNlIFBvaVR5cGUuREVTSzpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9iamVjdCA/IE1hdHRlcnRhZ0FjdGlvbk1vZGUuUE9TSVRJT05fREFUQSA6IE1hdHRlcnRhZ0FjdGlvbk1vZGUuQUREX0RFU0s7XHJcbiAgICAgICAgICAgIGNhc2UgUG9pVHlwZS5ST09NOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub2JqZWN0ID8gTWF0dGVydGFnQWN0aW9uTW9kZS5QT1NJVElPTl9ST09NIDogTWF0dGVydGFnQWN0aW9uTW9kZS5BRERfUk9PTTtcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHJldHVybiBNYXR0ZXJ0YWdBY3Rpb25Nb2RlLkFERF9USUNLRVQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldEljb24oKSB7XHJcbiAgICAgICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSBQb2lUeXBlLlRJQ0tFVDpcclxuICAgICAgICAgICAgICAgIHJldHVybiBcImljb25fdGlja2V0LnBuZ1wiO1xyXG4gICAgICAgICAgICBjYXNlIFBvaVR5cGUuRVFVSVBNRU5UOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiaWNvbl9lcXVpcG1lbnQucG5nXCI7XHJcbiAgICAgICAgICAgIGNhc2UgUG9pVHlwZS5PQkpFQ1QzRDpcclxuICAgICAgICAgICAgICAgIHJldHVybiBcImljb25fb2JqZWN0M2QucG5nXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgfVxyXG5cclxuICAgIGdldENvb3JkaW5hdGVTdHJpbmcoKSB7XHJcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgICAgICAgeDogdGhpcy5wb3NpdGlvbi54LFxyXG4gICAgICAgICAgICB5OiB0aGlzLnBvc2l0aW9uLnksXHJcbiAgICAgICAgICAgIHo6IHRoaXMucG9zaXRpb24ueixcclxuICAgICAgICAgICAgeFJvdGF0aW9uOiB0aGlzLnJvdGF0aW9uID8gdGhpcy5yb3RhdGlvbi54IDogbnVsbCxcclxuICAgICAgICAgICAgeVJvdGF0aW9uOiB0aGlzLnJvdGF0aW9uID8gdGhpcy5yb3RhdGlvbi55IDogbnVsbCxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRNZXRhZGF0YVN0cmluZygpIHtcclxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgICBpY29uOiB0aGlzLmdldEljb24oKSxcclxuICAgICAgICAgICAgbm9ybWFsOiB0aGlzLmdldE5vcm1hbCgpLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFN3ZWVwSUQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3dlZXBJRDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRPYmplY3QoKTogYW55IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5vYmplY3Q7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGdldFJvdGF0aW9uKCk6IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IH0ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJvdGF0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFBvaSgpOiBQT0kge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBvaTtcclxuICAgIH1cclxufVxyXG4iXX0=
171
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0dGVydGFnRGF0YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zbWFydGVycGxhbi1jb3JlL3NyYy9saWIvbWF0dGVydGFnRGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwQ0FBMEM7QUFDMUMsT0FBTyxFQUFnQixtQkFBbUIsRUFBTyxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVsRixNQUFNLE9BQU8sYUFBYTtJQUVoQixNQUFNLENBQWU7SUFDckIsSUFBSSxHQUFZLE9BQU8sQ0FBQyxNQUFNLENBQUM7SUFDaEMsU0FBUyxDQUFTO0lBQ2pCLFFBQVEsR0FBd0MsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQ3JFLE1BQU0sR0FBd0MsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQ25FLFFBQVEsQ0FBUztJQUNqQixPQUFPLENBQVM7SUFDakIsZUFBZSxHQUFHLENBQUMsQ0FBQztJQUNuQixRQUFRLEdBQW9DLElBQUksQ0FBQztJQUNqRCxHQUFHLENBQU07SUFFVCxhQUFhLEdBQWtCLElBQUksQ0FBQztJQUU1QyxZQUFZLElBQWE7UUFDdkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRUQ7O2lGQUU2RTtJQUU3RSxPQUFPLENBQUMsSUFBYSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUU1QyxTQUFTLENBQUMsTUFBb0IsRUFBRSxPQUFnQjtRQUM5QyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMs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bWUtY2FzZSAqL1xyXG5pbXBvcnQgeyBEYk9iamVjdFR5cGUsIE1hdHRlcnRhZ0FjdGlvbk1vZGUsIFBPSSwgUG9pVHlwZSB9IGZyb20gXCIuL3R5cGVzLnNlcnZpY2VcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBNYXR0ZXJ0YWdEYXRhIHtcclxuXHJcbiAgcHJpdmF0ZSBvYmplY3Q6IERiT2JqZWN0VHlwZTtcclxuICBwcml2YXRlIHR5cGU6IFBvaVR5cGUgPSBQb2lUeXBlLlRJQ0tFVDtcclxuICBwdWJsaWMgZWxlbWVudElEOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBwb3NpdGlvbjogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgejogbnVtYmVyIH0gPSB7IHg6IDAsIHk6IDAsIHo6IDAgfTtcclxuICBwcml2YXRlIG5vcm1hbDogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgejogbnVtYmVyIH0gPSB7IHg6IDAsIHk6IDEsIHo6IDAgfTtcclxuICBwcml2YXRlIG1lZGlhU3JjOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBzd2VlcElEOiBzdHJpbmc7XHJcbiAgcHVibGljIGN1c3RvbUljb25JbmRleCA9IDA7XHJcbiAgcHJpdmF0ZSByb3RhdGlvbjogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9IHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBwb2k6IFBPSTtcclxuXHJcbiAgcHJpdmF0ZSBtYXR0ZXJwb3J0U2lkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgY29uc3RydWN0b3IodHlwZTogUG9pVHlwZSkge1xyXG4gICAgdGhpcy5zZXRUeXBlKHR5cGUpO1xyXG4gIH1cclxuXHJcbiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIFNldHRlcnNcclxuICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG5cclxuICBzZXRUeXBlKHR5cGU6IFBvaVR5cGUpIHsgdGhpcy50eXBlID0gdHlwZTsgfVxyXG5cclxuICBzZXRPYmplY3Qob2JqZWN0OiBEYk9iamVjdFR5cGUsIHRhZ1R5cGU6IFBvaVR5cGUpIHtcclxuICAgIHRoaXMub2JqZWN0ID0gb2JqZWN0O1xyXG4gICAgdGhpcy5zZXRFbGVtZW50SUQob2JqZWN0LmlkKTtcclxuICAgIHRoaXMuc2V0VHlwZSh0YWdUeXBlKTtcclxuICB9XHJcblxyXG4gIHNldEVsZW1lbnRJRChpZDogc3RyaW5nKSB7IHRoaXMuZWxlbWVudElEID0gaWQ7IH1cclxuXHJcbiAgc2V0UG9zaXRpb24ocG9zaXRpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IHo6IG51bWJlciB9KSB7XHJcbiAgICB0aGlzLnBvc2l0aW9uID0gcG9zaXRpb247XHJcbiAgfVxyXG5cclxuICBzZXROb3JtYWwobm9ybWFsOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB6OiBudW1iZXIgfSkge1xyXG4gICAgdGhpcy5ub3JtYWwgPSBub3JtYWw7XHJcbiAgfVxyXG5cclxuICBzZXRNZWRpYVNvdXJjZShzb3VyY2U6IHN0cmluZykgeyB0aGlzLm1lZGlhU3JjID0gc291cmNlOyB9XHJcbiAgc2V0U3dlZXBJRChzd2VlcElEOiBzdHJpbmcpIHsgdGhpcy5zd2VlcElEID0gc3dlZXBJRDsgfVxyXG4gIHNldFJvdGF0aW9uKHJvdGF0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0pIHsgdGhpcy5yb3RhdGlvbiA9IHJvdGF0aW9uOyB9XHJcbiAgc2V0UG9pKHBvaTogUE9JKSB7IHRoaXMucG9pID0gcG9pOyB9XHJcblxyXG4gIHNldE1hdHRlcnBvcnRTaWQoc2lkOiBzdHJpbmcpIHsgdGhpcy5tYXR0ZXJwb3J0U2lkID0gc2lkOyB9XHJcblxyXG4gIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICBHZXR0ZXJzXHJcbiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuXHJcbiAgZ2V0RGF0YSgpIHtcclxuICAgIGxldCBsYWJlbCA9IFwiTmV3IFRhZ1wiO1xyXG4gICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcclxuICAgICAgY2FzZSBQb2lUeXBlLlRJQ0tFVDpcclxuICAgICAgY2FzZSBQb2lUeXBlLkVRVUlQTUVOVDpcclxuICAgICAgY2FzZSBQb2lUeXBlLk1FQVNVUkU6XHJcbiAgICAgIGNhc2UgUG9pVHlwZS5EQVRBOlxyXG4gICAgICBjYXNlIFBvaVR5cGUuREVTSzpcclxuICAgICAgICBsYWJlbCA9IHRoaXMub2JqZWN0ID8gXCJcIiA6IFwiTmV3IFRhZ1wiO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFBvaVR5cGUuT0JKRUNUM0Q6XHJcbiAgICAgICAgbGFiZWwgPSB0aGlzLm9iamVjdCA/IFwiXCIgOiBcIkNsaWNrIG9uIGJsaW5raW5nIGljb24gdG8gbG9hZCBhIDNEIG9iamVjdCBoZXJlXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgUG9pVHlwZS5ST09NOlxyXG4gICAgICAgIGxhYmVsID0gXCJcIjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBsYWJlbCA9IFwiTmV3IFRhZ1wiO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIGxhYmVsLFxyXG4gICAgICBkZXNjcmlwdGlvbjogXCJcIixcclxuICAgICAgYW5jaG9yUG9zaXRpb246IHsgLi4udGhpcy5wb3NpdGlvbiB9LFxyXG4gICAgICBzdGVtVmVjdG9yOiB0aGlzLmdldFN0ZW1WZWN0b3IoKSxcclxuICAgICAgY29sb3I6IHsgcjogMSwgZzogMSwgYjogMSB9LFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCB0aGUgZGVzY3JpcHRvciBmb3Igc2RrLlRhZy5hZGQoLi4uZGVzY3JpcHRvcilcclxuICAgKiBGb3JtYXQgOiBbeyBsYWJlbCwgZGVzY3JpcHRpb24sIGFuY2hvclBvc2l0aW9uLCBzdGVtVmVjdG9yLCBjb2xvciwgaWQ/IH1dXHJcbiAgICogSWYgbWF0dGVycG9ydFNpZCBpcyBkZWZpbmVkIChhbHJlYWR5IGtub3duIHRhZykgd2Ugc2VuZCBpdCBzbyB0aGUgU0RLIFxyXG4gICAqIHJldXNlIGl0IGluc3RlYWQgb2YgdHJ5aW5nIHRvIGNyZWF0ZSBhIG5ldyBvbmUgYW5kIGdlbmVyYXRlIGFuIGVycm9yIDogXCJhbHJlYWR5IGluIHVzZVwiLlxyXG4gICAqL1xyXG4gIGdldE1hdHRlcnRhZ0Rlc2NyaXB0b3IoKTogW1JlY29yZDxzdHJpbmcsIGFueT5dIHtcclxuICAgIGNvbnN0IGJhc2UgPSB0aGlzLmdldERhdGEoKTtcclxuICAgIGNvbnN0IGRlc2NyaXB0b3I6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7IC4uLmJhc2UgfTtcclxuICAgIGlmICh0aGlzLm1hdHRlcnBvcnRTaWQpIHtcclxuICAgICAgZGVzY3JpcHRvclsnaWQnXSA9IHRoaXMubWF0dGVycG9ydFNpZDtcclxuICAgIH1cclxuICAgIHJldHVybiBbZGVzY3JpcHRvcl07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgZGF0YSBmb3Igc2RrLlRhZy5lZGl0UG9zaXRpb24oKSBvciBzZGsuVGFnLmVkaXRCaWxsYm9hcmQoKS5cclxuICAgKi9cclxuICBnZXRUYWdTZGtEYXRhKCk6IHsgYW5jaG9yUG9zaXRpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IHo6IG51bWJlciB9OyBzdGVtVmVjdG9yOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB6OiBudW1iZXIgfSB9IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGFuY2hvclBvc2l0aW9uOiB7IC4uLnRoaXMucG9zaXRpb24gfSxcclxuICAgICAgc3RlbVZlY3RvcjogdGhpcy5nZXRTdGVtVmVjdG9yKCksXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLyoqIExvYWQgdGhlIG1hdHRlcnBvcnRTaWQgZnJvbSB0aGUgcG9pIG1ldGFkYXRhICovXHJcbiAgbG9hZFNpZEZyb21Qb2kocG9pOiBQT0kpOiB2b2lkIHtcclxuICAgIGlmICghcG9pPy5tZXRhZGF0YSkgcmV0dXJuO1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgbWV0YSA9IEpTT04ucGFyc2UocG9pLm1ldGFkYXRhKTtcclxuICAgICAgaWYgKG1ldGE/LnNpZCAmJiB0eXBlb2YgbWV0YS5zaWQgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgdGhpcy5tYXR0ZXJwb3J0U2lkID0gbWV0YS5zaWQ7XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggeyB9XHJcbiAgfVxyXG5cclxuICAvKiogR2V0IHRoZSBzdGVtIHZlY3RvciBmb3IgdGhlIHRhZyAqL1xyXG4gIGdldFN0ZW1WZWN0b3IoKTogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgejogbnVtYmVyIH0ge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgeDogdGhpcy5ub3JtYWwueCAqIDAuMyxcclxuICAgICAgeTogdGhpcy5ub3JtYWwueSAqIDAuMyxcclxuICAgICAgejogdGhpcy5ub3JtYWwueiAqIDAuMyxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuXHJcbiAgZ2V0VHlwZSgpIHsgcmV0dXJuIHRoaXMudHlwZTsgfVxyXG4gIGdldE5vcm1hbCgpIHsgcmV0dXJuIHRoaXMubm9ybWFsOyB9XHJcbiAgZ2V0UG9zaXRpb24oKSB7IHJldHVybiB0aGlzLnBvc2l0aW9uOyB9XHJcbiAgZ2V0U3dlZXBJRCgpIHsgcmV0dXJuIHRoaXMuc3dlZXBJRDsgfVxyXG4gIGdldE9iamVjdCgpOiBhbnkgeyByZXR1cm4gdGhpcy5vYmplY3Q7IH1cclxuICBnZXRSb3RhdGlvbigpOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0gfCBudWxsIHsgcmV0dXJuIHRoaXMucm90YXRpb247IH1cclxuICBnZXRQb2koKTogUE9JIHsgcmV0dXJuIHRoaXMucG9pOyB9XHJcbiAgZ2V0TWF0dGVycG9ydFNpZCgpOiBzdHJpbmcgfCBudWxsIHsgcmV0dXJuIHRoaXMubWF0dGVycG9ydFNpZDsgfVxyXG5cclxuICAvKiogR2V0IHRoZSBhY3Rpb24gbW9kZSBmb3IgdGhlIHRhZyAqL1xyXG4gIGdldENhbGxiYWNrQWN0aW9uTW9kZSgpOiBNYXR0ZXJ0YWdBY3Rpb25Nb2RlIHtcclxuICAgIHN3aXRjaCAodGhpcy50eXBlKSB7XHJcbiAgICAgIGNhc2UgUG9pVHlwZS5USUNLRVQ6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMub2JqZWN0ID8gTWF0dGVydGFnQWN0aW9uTW9kZS5QT1NJVElPTl9USUNLRVQgOiBNYXR0ZXJ0YWdBY3Rpb25Nb2RlLkFERF9USUNLRVQ7XHJcbiAgICAgIGNhc2UgUG9pVHlwZS5PQkpFQ1QzRDpcclxuICAgICAgICByZXR1cm4gTWF0dGVydGFnQWN0aW9uTW9kZS5QT1NJVElPTl9PQkpFQ1QzRDtcclxuICAgICAgY2FzZSBQb2lUeXBlLkVRVUlQTUVOVDpcclxuICAgICAgICByZXR1cm4gdGhpcy5vYmplY3QgPyBNYXR0ZXJ0YWdBY3Rpb25Nb2RlLlBPU0lUSU9OX0VRVUlQTUVOVCA6IE1hdHRlcnRhZ0FjdGlvbk1vZGUuQUREX0VRVUlQTUVOVDtcclxuICAgICAgY2FzZSBQb2lUeXBlLkRBVEE6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMub2JqZWN0ID8gTWF0dGVydGFnQWN0aW9uTW9kZS5QT1NJVElPTl9EQVRBIDogTWF0dGVydGFnQWN0aW9uTW9kZS5BRERfREFUQTtcclxuICAgICAgY2FzZSBQb2lUeXBlLkRFU0s6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMub2JqZWN0ID8gTWF0dGVydGFnQWN0aW9uTW9kZS5QT1NJVElPTl9EQVRBIDogTWF0dGVydGFnQWN0aW9uTW9kZS5BRERfREVTSztcclxuICAgICAgY2FzZSBQb2lUeXBlLlJPT006XHJcbiAgICAgICAgcmV0dXJuIHRoaXMub2JqZWN0ID8gTWF0dGVydGFnQWN0aW9uTW9kZS5QT1NJVElPTl9ST09NIDogTWF0dGVydGFnQWN0aW9uTW9kZS5BRERfUk9PTTtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gTWF0dGVydGFnQWN0aW9uTW9kZS5BRERfVElDS0VUO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKiogR2V0IHRoZSBpY29uIGZvciB0aGUgdGFnICovXHJcbiAgZ2V0SWNvbigpOiBzdHJpbmcge1xyXG4gICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcclxuICAgICAgY2FzZSBQb2lUeXBlLlRJQ0tFVDogcmV0dXJuIFwiaWNvbl90aWNrZXQucG5nXCI7XHJcbiAgICAgIGNhc2UgUG9pVHlwZS5FUVVJUE1FTlQ6IHJldHVybiBcImljb25fZXF1aXBtZW50LnBuZ1wiO1xyXG4gICAgICBjYXNlIFBvaVR5cGUuT0JKRUNUM0Q6IHJldHVybiBcImljb25fb2JqZWN0M2QucG5nXCI7XHJcbiAgICAgIGNhc2UgUG9pVHlwZS5NRUFTVVJFOiByZXR1cm4gXCJpY29uX21lYXN1cmUucG5nXCI7XHJcbiAgICAgIGNhc2UgUG9pVHlwZS5EQVRBOiByZXR1cm4gXCJpY29uX2RhdGEucG5nXCI7XHJcbiAgICAgIGNhc2UgUG9pVHlwZS5ERVNLOiByZXR1cm4gXCJpY29uX2RhdGEucG5nXCI7XHJcbiAgICAgIGNhc2UgUG9pVHlwZS5ST09NOiByZXR1cm4gXCJcIjtcclxuICAgICAgZGVmYXVsdDogcmV0dXJuIFwiXCI7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKiBHZXQgdGhlIGNvb3JkaW5hdGUgc3RyaW5nIGZvciB0aGUgdGFnICovXHJcbiAgZ2V0Q29vcmRpbmF0ZVN0cmluZygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgeDogdGhpcy5wb3NpdGlvbi54LFxyXG4gICAgICB5OiB0aGlzLnBvc2l0aW9uLnksXHJcbiAgICAgIHo6IHRoaXMucG9zaXRpb24ueixcclxuICAgICAgeFJvdGF0aW9uOiB0aGlzLnJvdGF0aW9uPy54ID8/IG51bGwsXHJcbiAgICAgIHlSb3RhdGlvbjogdGhpcy5yb3RhdGlvbj8ueSA/PyBudWxsLFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8qKiBHZXQgdGhlIG1ldGFkYXRhIHN0cmluZyBmb3IgdGhlIHRhZyAqL1xyXG4gIGdldE1ldGFkYXRhU3RyaW5nKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICBpY29uOiB0aGlzLmdldEljb24oKSxcclxuICAgICAgbm9ybWFsOiB0aGlzLmdldE5vcm1hbCgpLFxyXG4gICAgICBzaWQ6IHRoaXMubWF0dGVycG9ydFNpZCxcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -12,13 +12,8 @@ export class TimeDateToLocalStringPipe {
12
12
  let lang = "en-EN";
13
13
  if (this.translate) {
14
14
  /** Get current language */
15
- lang = this.translate.getCurrentLang()
16
- ? this.translate.getCurrentLang()
17
- : this.translate.getFallbackLang();
18
- /** Transforme '_fr' to 'fr' */
19
- if (lang) {
20
- lang = lang.slice(1);
21
- }
15
+ const currentLang = this.translate.getCurrentLang() || this.translate.getFallbackLang() || "fr";
16
+ lang = currentLang.replace(/^[_-]+/, '').substring(0, 2);
22
17
  }
23
18
  let options;
24
19
  switch (mode) {
@@ -102,4 +97,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
102
97
  name: 'timeDateString'
103
98
  }]
104
99
  }], ctorParameters: () => [{ type: i1.TranslateService }] });
105
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1kYXRlLXRvLWxvY2FsLXN0cmluZy5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWNvcmUvc3JjL2xpYi9waXBlcy90aW1lLWRhdGUtdG8tbG9jYWwtc3RyaW5nLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFHcEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7QUFLdEQsTUFBTSxPQUFPLHlCQUF5QjtJQTBGZDtJQXpGcEI7OztPQUdHO0lBQ0gscUJBQXFCLENBQ2pCLElBQTRCLEVBQzVCLElBQWE7UUFFYixJQUFJLElBQUksR0FBRyxPQUFPLENBQUM7UUFDbkIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDakIsMkJBQTJCO1lBQzNCLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRTtnQkFDbEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFO2dCQUNqQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN2QywrQkFBK0I7WUFDL0IsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDUCxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6QixDQUFDO1FBRUwsQ0FBQztRQUVELElBQUksT0FZSCxDQUFDO1FBQ0YsUUFBUSxJQUFJLEVBQUUsQ0FBQztZQUNYLEtBQUssYUFBYTtnQkFDZCxPQUFPLEdBQUcsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLENBQUM7Z0JBQzdCLE1BQU07WUFDVixLQUFLLEtBQUs7Z0JBQ04sT0FBTyxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDO2dCQUM5QixNQUFNO1lBQ1YsS0FBSyxNQUFNO2dCQUNQLE9BQU8sR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsQ0FBQztnQkFDaEMsTUFBTTtZQUNWLEtBQUssaUJBQWlCO2dCQUNsQixPQUFPLEdBQUc7b0JBQ04sSUFBSSxFQUFFLFNBQVM7b0JBQ2YsS0FBSyxFQUFFLFNBQVM7b0JBQ2hCLEdBQUcsRUFBRSxTQUFTO29CQUNkLElBQUksRUFBRSxTQUFTO29CQUNmLE1BQU0sRUFBRSxTQUFTO2lCQUNwQixDQUFDO2dCQUNGLE1BQU07WUFDVixLQUFLLE1BQU07Z0JBQ1AsT0FBTyxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLENBQUM7Z0JBQ2pELE1BQU07WUFDVixLQUFLLFdBQVc7Z0JBQ1osT0FBTyxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUMsQ0FBQztnQkFDN0UsTUFBTTtZQUNWLEtBQUssdUJBQXVCO2dCQUN4QixPQUFPLEdBQUc7b0JBQ04sT0FBTyxFQUFFLE1BQU07b0JBQ2YsSUFBSSxFQUFFLFNBQVM7b0JBQ2YsS0FBSyxFQUFFLE1BQU07b0JBQ2IsR0FBRyxFQUFFLFNBQVM7b0JBQ2QsSUFBSSxFQUFFLFNBQVM7b0JBQ2YsTUFBTSxFQUFFLFNBQVM7b0JBQ2pCLFlBQVksRUFBRSxhQUFhO2lCQUM5QixDQUFDO2dCQUNGLE1BQU07WUFDVixLQUFLLGdCQUFnQjtnQkFDakIsT0FBTyxHQUFHO29CQUNOLElBQUksRUFBRSxTQUFTO29CQUNmLEtBQUssRUFBRSxNQUFNO29CQUNiLEdBQUcsRUFBRSxTQUFTO29CQUNkLElBQUksRUFBRSxTQUFTO29CQUNmLE1BQU0sRUFBRSxTQUFTO29CQUNqQixZQUFZLEVBQUUsYUFBYTtpQkFDOUIsQ0FBQztnQkFDRixNQUFNO1lBQ1Y7Z0JBQ0ksT0FBTyxHQUFHO29CQUNOLFNBQVMsRUFBRSxNQUFNO29CQUNqQixTQUFTLEVBQUUsT0FBTztpQkFDckIsQ0FBQztRQUNWLENBQUM7UUFDRCxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELFlBQW9CLFNBQTJCO1FBQTNCLGNBQVMsR0FBVCxTQUFTLENBQWtCO0lBQUksQ0FBQztJQUVwRCxTQUFTLENBQUMsSUFBNEIsRUFBRSxJQUFVO1FBQzlDLElBQUksU0FBdUIsQ0FBQztRQUU1QixNQUFNLFlBQVksR0FBdUIsSUFBSSxVQUFVLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUNqRSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ3hELFFBQVEsQ0FBQyxJQUFJLENBQ1QsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FDekMsQ0FBQztZQUNOLENBQUMsQ0FBQyxDQUFDO1lBQ0gsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7WUFFdEQsT0FBTztnQkFDSCxXQUFXO29CQUNQLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDNUIsQ0FBQzthQUNKLENBQUM7UUFDTixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sWUFBWSxDQUFDO0lBQ3hCLENBQUM7d0dBOUdRLHlCQUF5QjtzR0FBekIseUJBQXlCOzs0RkFBekIseUJBQXlCO2tCQUhyQyxJQUFJO21CQUFDO29CQUNKLElBQUksRUFBRSxnQkFBZ0I7aUJBQ3ZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcy9pbnRlcm5hbC9PYnNlcnZhYmxlJztcclxuXHJcbkBQaXBlKHtcclxuICBuYW1lOiAndGltZURhdGVTdHJpbmcnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUaW1lRGF0ZVRvTG9jYWxTdHJpbmdQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XHJcbiAgICAvKipcclxuICAgICAqIFJldHVybiBhIHN0cmluZyBvZiBhIGdpdmVuIGRhdGUgdGltZSBpbiBsb2NhbCBmb3JtYXQuXHJcbiAgICAgKiBUaGUgZm9ybWF0IGlzIGRldGVybWluZWQgYnkgdGhlIGN1cnJlbnQgbGFuZ3VhZ2UuXHJcbiAgICAgKi9cclxuICAgIGRhdGVUaW1lVG9Mb2NhbFN0cmluZyhcclxuICAgICAgICBkYXRlOiBudW1iZXIgfCBzdHJpbmcgfCBEYXRlLFxyXG4gICAgICAgIG1vZGU/OiBzdHJpbmcsXHJcbiAgICApOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCBsYW5nID0gXCJlbi1FTlwiO1xyXG4gICAgICAgIGlmICh0aGlzLnRyYW5zbGF0ZSkge1xyXG4gICAgICAgICAgICAvKiogR2V0IGN1cnJlbnQgbGFuZ3VhZ2UgKi9cclxuICAgICAgICAgICAgbGFuZyA9IHRoaXMudHJhbnNsYXRlLmdldEN1cnJlbnRMYW5nKClcclxuICAgICAgICAgICAgICAgID8gdGhpcy50cmFuc2xhdGUuZ2V0Q3VycmVudExhbmcoKVxyXG4gICAgICAgICAgICAgICAgOiB0aGlzLnRyYW5zbGF0ZS5nZXRGYWxsYmFja0xhbmcoKTtcclxuICAgICAgICAgICAgLyoqIFRyYW5zZm9ybWUgJ19mcicgdG8gJ2ZyJyAqL1xyXG4gICAgICAgICAgICBpZiAobGFuZykge1xyXG4gICAgICAgICAgICAgICAgbGFuZyA9IGxhbmcuc2xpY2UoMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICBcclxuICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICBsZXQgb3B0aW9uczoge1xyXG4gICAgICAgICAgICBtb250aD87XHJcbiAgICAgICAgICAgIHllYXI/O1xyXG4gICAgICAgICAgICBkYXk/O1xyXG4gICAgICAgICAgICBob3VyPztcclxuICAgICAgICAgICAgbWludXRlPztcclxuICAgICAgICAgICAgc2Vjb25kPztcclxuICAgICAgICAgICAgZGF0ZVN0eWxlPztcclxuICAgICAgICAgICAgdGltZVN0eWxlPztcclxuICAgICAgICAgICAgd2Vla2RheT87XHJcbiAgICAgICAgICAgIHRpbWVab25lPztcclxuICAgICAgICAgICAgdGltZVpvbmVOYW1lPztcclxuICAgICAgICB9O1xyXG4gICAgICAgIHN3aXRjaCAobW9kZSkge1xyXG4gICAgICAgICAgICBjYXNlIFwiZGF5X251bWVyaWNcIjpcclxuICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7IGRheTogXCJudW1lcmljXCIgfTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwiZGF5XCI6XHJcbiAgICAgICAgICAgICAgICBvcHRpb25zID0geyB3ZWVrZGF5OiBcImxvbmdcIiB9O1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJkYXRlXCI6XHJcbiAgICAgICAgICAgICAgICBvcHRpb25zID0geyBkYXRlU3R5bGU6IFwibG9uZ1wiIH07XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcInNob3J0X2RhdGVfdGltZVwiOlxyXG4gICAgICAgICAgICAgICAgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgICAgICB5ZWFyOiBcIjItZGlnaXRcIixcclxuICAgICAgICAgICAgICAgICAgICBtb250aDogXCIyLWRpZ2l0XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgZGF5OiBcIjItZGlnaXRcIixcclxuICAgICAgICAgICAgICAgICAgICBob3VyOiBcIjItZGlnaXRcIixcclxuICAgICAgICAgICAgICAgICAgICBtaW51dGU6IFwiMi1kaWdpdFwiLFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwidGltZVwiOlxyXG4gICAgICAgICAgICAgICAgb3B0aW9ucyA9IHsgaG91cjogXCJudW1lcmljXCIsIG1pbnV0ZTogXCJudW1lcmljXCIgfTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwidGltZV96b25lXCI6XHJcbiAgICAgICAgICAgICAgICBvcHRpb25zID0geyBob3VyOiBcIm51bWVyaWNcIiwgbWludXRlOiBcIm51bWVyaWNcIiwgdGltZVpvbmVOYW1lOiBcInNob3J0T2Zmc2V0XCJ9O1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJkYXlfdGltZV96b25lX3dlZWtkYXlcIjpcclxuICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgd2Vla2RheTogXCJsb25nXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgeWVhcjogXCJudW1lcmljXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbW9udGg6IFwibG9uZ1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIGRheTogXCJudW1lcmljXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgaG91cjogXCJudW1lcmljXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbWludXRlOiBcIm51bWVyaWNcIixcclxuICAgICAgICAgICAgICAgICAgICB0aW1lWm9uZU5hbWU6IFwic2hvcnRPZmZzZXRcIixcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcImRhdGVfdGltZV96b25lXCI6XHJcbiAgICAgICAgICAgICAgICBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHllYXI6IFwibnVtZXJpY1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIG1vbnRoOiBcImxvbmdcIixcclxuICAgICAgICAgICAgICAgICAgICBkYXk6IFwibnVtZXJpY1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIGhvdXI6IFwibnVtZXJpY1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIG1pbnV0ZTogXCJudW1lcmljXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgdGltZVpvbmVOYW1lOiBcInNob3J0T2Zmc2V0XCIsXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGVTdHlsZTogXCJsb25nXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgdGltZVN0eWxlOiBcInNob3J0XCIsXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3IERhdGUoZGF0ZSkudG9Mb2NhbGVTdHJpbmcobGFuZywgb3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UpIHsgfVxyXG5cclxuICAgIHRyYW5zZm9ybShkYXRlOiBudW1iZXIgfCBzdHJpbmcgfCBEYXRlLCBtb2RlPzogYW55KTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcclxuICAgICAgICBsZXQgc3Vic2NyaXB0OiBTdWJzY3JpcHRpb247XHJcblxyXG4gICAgICAgIGNvbnN0IGRhdGVPYnNlcnZlcjogT2JzZXJ2YWJsZTxzdHJpbmc+ID0gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyKSA9PiB7XHJcbiAgICAgICAgICAgIHN1YnNjcmlwdCA9IHRoaXMudHJhbnNsYXRlLm9uTGFuZ0NoYW5nZS5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVUb0xvY2FsU3RyaW5nKGRhdGUsIG1vZGUpLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQodGhpcy5kYXRlVGltZVRvTG9jYWxTdHJpbmcoZGF0ZSwgbW9kZSkpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHVuc3Vic2NyaWJlKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmlwdC51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gZGF0ZU9ic2VydmVyO1xyXG4gICAgfVxyXG5cclxufVxyXG4iXX0=
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1kYXRlLXRvLWxvY2FsLXN0cmluZy5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWNvcmUvc3JjL2xpYi9waXBlcy90aW1lLWRhdGUtdG8tbG9jYWwtc3RyaW5nLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFHcEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7QUFLdEQsTUFBTSxPQUFPLHlCQUF5QjtJQW9GZDtJQW5GcEI7OztPQUdHO0lBQ0gscUJBQXFCLENBQ2pCLElBQTRCLEVBQzVCLElBQWE7UUFFYixJQUFJLElBQUksR0FBRyxPQUFPLENBQUM7UUFDbkIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDakIsMkJBQTJCO1lBQzNCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLEVBQUUsSUFBSSxJQUFJLENBQUM7WUFDaEcsSUFBSSxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDN0QsQ0FBQztRQUVELElBQUksT0FZSCxDQUFDO1FBQ0YsUUFBUSxJQUFJLEVBQUUsQ0FBQztZQUNYLEtBQUssYUFBYTtnQkFDZCxPQUFPLEdBQUcsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLENBQUM7Z0JBQzdCLE1BQU07WUFDVixLQUFLLEtBQUs7Z0JBQ04sT0FBTyxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDO2dCQUM5QixNQUFNO1lBQ1YsS0FBSyxNQUFNO2dCQUNQLE9BQU8sR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsQ0FBQztnQkFDaEMsTUFBTTtZQUNWLEtBQUssaUJBQWlCO2dCQUNsQixPQUFPLEdBQUc7b0JBQ04sSUFBSSxFQUFFLFNBQVM7b0JBQ2YsS0FBSyxFQUFFLFNBQVM7b0JBQ2hCLEdBQUcsRUFBRSxTQUFTO29CQUNkLElBQUksRUFBRSxTQUFTO29CQUNmLE1BQU0sRUFBRSxTQUFTO2lCQUNwQixDQUFDO2dCQUNGLE1BQU07WUFDVixLQUFLLE1BQU07Z0JBQ1AsT0FBTyxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLENBQUM7Z0JBQ2pELE1BQU07WUFDVixLQUFLLFdBQVc7Z0JBQ1osT0FBTyxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsQ0FBQztnQkFDOUUsTUFBTTtZQUNWLEtBQUssdUJBQXVCO2dCQUN4QixPQUFPLEdBQUc7b0JBQ04sT0FBTyxFQUFFLE1BQU07b0JBQ2YsSUFBSSxFQUFFLFNBQVM7b0JBQ2YsS0FBSyxFQUFFLE1BQU07b0JBQ2IsR0FBRyxFQUFFLFNBQVM7b0JBQ2QsSUFBSSxFQUFFLFNBQVM7b0JBQ2YsTUFBTSxFQUFFLFNBQVM7b0JBQ2pCLFlBQVksRUFBRSxhQUFhO2lCQUM5QixDQUFDO2dCQUNGLE1BQU07WUFDVixLQUFLLGdCQUFnQjtnQkFDakIsT0FBTyxHQUFHO29CQUNOLElBQUksRUFBRSxTQUFTO29CQUNmLEtBQUssRUFBRSxNQUFNO29CQUNiLEdBQUcsRUFBRSxTQUFTO29CQUNkLElBQUksRUFBRSxTQUFTO29CQUNmLE1BQU0sRUFBRSxTQUFTO29CQUNqQixZQUFZLEVBQUUsYUFBYTtpQkFDOUIsQ0FBQztnQkFDRixNQUFNO1lBQ1Y7Z0JBQ0ksT0FBTyxHQUFHO29CQUNOLFNBQVMsRUFBRSxNQUFNO29CQUNqQixTQUFTLEVBQUUsT0FBTztpQkFDckIsQ0FBQztRQUNWLENBQUM7UUFDRCxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELFlBQW9CLFNBQTJCO1FBQTNCLGNBQVMsR0FBVCxTQUFTLENBQWtCO0lBQUksQ0FBQztJQUVwRCxTQUFTLENBQUMsSUFBNEIsRUFBRSxJQUFVO1FBQzlDLElBQUksU0FBdUIsQ0FBQztRQUU1QixNQUFNLFlBQVksR0FBdUIsSUFBSSxVQUFVLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUNqRSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ3hELFFBQVEsQ0FBQyxJQUFJLENBQ1QsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FDekMsQ0FBQztZQUNOLENBQUMsQ0FBQyxDQUFDO1lBQ0gsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7WUFFdEQsT0FBTztnQkFDSCxXQUFXO29CQUNQLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDNUIsQ0FBQzthQUNKLENBQUM7UUFDTixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sWUFBWSxDQUFDO0lBQ3hCLENBQUM7d0dBeEdRLHlCQUF5QjtzR0FBekIseUJBQXlCOzs0RkFBekIseUJBQXlCO2tCQUhyQyxJQUFJO21CQUFDO29CQUNGLElBQUksRUFBRSxnQkFBZ0I7aUJBQ3pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcy9pbnRlcm5hbC9PYnNlcnZhYmxlJztcclxuXHJcbkBQaXBlKHtcclxuICAgIG5hbWU6ICd0aW1lRGF0ZVN0cmluZydcclxufSlcclxuZXhwb3J0IGNsYXNzIFRpbWVEYXRlVG9Mb2NhbFN0cmluZ1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJuIGEgc3RyaW5nIG9mIGEgZ2l2ZW4gZGF0ZSB0aW1lIGluIGxvY2FsIGZvcm1hdC5cclxuICAgICAqIFRoZSBmb3JtYXQgaXMgZGV0ZXJtaW5lZCBieSB0aGUgY3VycmVudCBsYW5ndWFnZS5cclxuICAgICAqL1xyXG4gICAgZGF0ZVRpbWVUb0xvY2FsU3RyaW5nKFxyXG4gICAgICAgIGRhdGU6IG51bWJlciB8IHN0cmluZyB8IERhdGUsXHJcbiAgICAgICAgbW9kZT86IHN0cmluZyxcclxuICAgICk6IHN0cmluZyB7XHJcbiAgICAgICAgbGV0IGxhbmcgPSBcImVuLUVOXCI7XHJcbiAgICAgICAgaWYgKHRoaXMudHJhbnNsYXRlKSB7XHJcbiAgICAgICAgICAgIC8qKiBHZXQgY3VycmVudCBsYW5ndWFnZSAqL1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50TGFuZyA9IHRoaXMudHJhbnNsYXRlLmdldEN1cnJlbnRMYW5nKCkgfHwgdGhpcy50cmFuc2xhdGUuZ2V0RmFsbGJhY2tMYW5nKCkgfHwgXCJmclwiO1xyXG4gICAgICAgICAgICBsYW5nID0gY3VycmVudExhbmcucmVwbGFjZSgvXltfLV0rLywgJycpLnN1YnN0cmluZygwLCAyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBvcHRpb25zOiB7XHJcbiAgICAgICAgICAgIG1vbnRoPztcclxuICAgICAgICAgICAgeWVhcj87XHJcbiAgICAgICAgICAgIGRheT87XHJcbiAgICAgICAgICAgIGhvdXI/O1xyXG4gICAgICAgICAgICBtaW51dGU/O1xyXG4gICAgICAgICAgICBzZWNvbmQ/O1xyXG4gICAgICAgICAgICBkYXRlU3R5bGU/O1xyXG4gICAgICAgICAgICB0aW1lU3R5bGU/O1xyXG4gICAgICAgICAgICB3ZWVrZGF5PztcclxuICAgICAgICAgICAgdGltZVpvbmU/O1xyXG4gICAgICAgICAgICB0aW1lWm9uZU5hbWU/O1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgc3dpdGNoIChtb2RlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJkYXlfbnVtZXJpY1wiOlxyXG4gICAgICAgICAgICAgICAgb3B0aW9ucyA9IHsgZGF5OiBcIm51bWVyaWNcIiB9O1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJkYXlcIjpcclxuICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7IHdlZWtkYXk6IFwibG9uZ1wiIH07XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcImRhdGVcIjpcclxuICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7IGRhdGVTdHlsZTogXCJsb25nXCIgfTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwic2hvcnRfZGF0ZV90aW1lXCI6XHJcbiAgICAgICAgICAgICAgICBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHllYXI6IFwiMi1kaWdpdFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIG1vbnRoOiBcIjItZGlnaXRcIixcclxuICAgICAgICAgICAgICAgICAgICBkYXk6IFwiMi1kaWdpdFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGhvdXI6IFwiMi1kaWdpdFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIG1pbnV0ZTogXCIyLWRpZ2l0XCIsXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJ0aW1lXCI6XHJcbiAgICAgICAgICAgICAgICBvcHRpb25zID0geyBob3VyOiBcIm51bWVyaWNcIiwgbWludXRlOiBcIm51bWVyaWNcIiB9O1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJ0aW1lX3pvbmVcIjpcclxuICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7IGhvdXI6IFwibnVtZXJpY1wiLCBtaW51dGU6IFwibnVtZXJpY1wiLCB0aW1lWm9uZU5hbWU6IFwic2hvcnRPZmZzZXRcIiB9O1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJkYXlfdGltZV96b25lX3dlZWtkYXlcIjpcclxuICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgd2Vla2RheTogXCJsb25nXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgeWVhcjogXCJudW1lcmljXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbW9udGg6IFwibG9uZ1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIGRheTogXCJudW1lcmljXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgaG91cjogXCJudW1lcmljXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbWludXRlOiBcIm51bWVyaWNcIixcclxuICAgICAgICAgICAgICAgICAgICB0aW1lWm9uZU5hbWU6IFwic2hvcnRPZmZzZXRcIixcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcImRhdGVfdGltZV96b25lXCI6XHJcbiAgICAgICAgICAgICAgICBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHllYXI6IFwibnVtZXJpY1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIG1vbnRoOiBcImxvbmdcIixcclxuICAgICAgICAgICAgICAgICAgICBkYXk6IFwibnVtZXJpY1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIGhvdXI6IFwibnVtZXJpY1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIG1pbnV0ZTogXCJudW1lcmljXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgdGltZVpvbmVOYW1lOiBcInNob3J0T2Zmc2V0XCIsXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGVTdHlsZTogXCJsb25nXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgdGltZVN0eWxlOiBcInNob3J0XCIsXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3IERhdGUoZGF0ZSkudG9Mb2NhbGVTdHJpbmcobGFuZywgb3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UpIHsgfVxyXG5cclxuICAgIHRyYW5zZm9ybShkYXRlOiBudW1iZXIgfCBzdHJpbmcgfCBEYXRlLCBtb2RlPzogYW55KTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcclxuICAgICAgICBsZXQgc3Vic2NyaXB0OiBTdWJzY3JpcHRpb247XHJcblxyXG4gICAgICAgIGNvbnN0IGRhdGVPYnNlcnZlcjogT2JzZXJ2YWJsZTxzdHJpbmc+ID0gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyKSA9PiB7XHJcbiAgICAgICAgICAgIHN1YnNjcmlwdCA9IHRoaXMudHJhbnNsYXRlLm9uTGFuZ0NoYW5nZS5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVUb0xvY2FsU3RyaW5nKGRhdGUsIG1vZGUpLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQodGhpcy5kYXRlVGltZVRvTG9jYWxTdHJpbmcoZGF0ZSwgbW9kZSkpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHVuc3Vic2NyaWJlKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmlwdC51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gZGF0ZU9ic2VydmVyO1xyXG4gICAgfVxyXG5cclxufVxyXG4iXX0=