@smarterplan/ngx-smarterplan-core 0.4.51 → 0.4.52
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.
- package/esm2020/lib/helpers.service.mjs +1 -10
- package/esm2020/lib/services/matterport-import.service.mjs +2 -7
- package/fesm2015/smarterplan-ngx-smarterplan-core.mjs +1 -17
- package/fesm2015/smarterplan-ngx-smarterplan-core.mjs.map +1 -1
- package/fesm2020/smarterplan-ngx-smarterplan-core.mjs +1 -15
- package/fesm2020/smarterplan-ngx-smarterplan-core.mjs.map +1 -1
- package/lib/helpers.service.d.ts +0 -6
- package/package.json +2 -3
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { ModalSwitchVisitComponent } from "./components/modal-switch-visit/modal-switch-visit.component";
|
|
2
2
|
import { downloadFileAsObject } from "./services/s3.service";
|
|
3
3
|
import { LevelStatus, Locale, PoiType, RoleStatus } from "./types.service";
|
|
4
|
-
import urlExist from "url-exist";
|
|
5
4
|
export function getDistanceBetweenTwoPoints(startPoint, endPoint) {
|
|
6
5
|
const dx = endPoint.x - startPoint.x;
|
|
7
6
|
const dy = endPoint.y - startPoint.y;
|
|
@@ -466,12 +465,4 @@ export function durationToString(duration, translate) {
|
|
|
466
465
|
}
|
|
467
466
|
return `${seconds} ${secondsString}`;
|
|
468
467
|
}
|
|
469
|
-
/**
|
|
470
|
-
* Runs a request to a given url (if response is 404 or not)
|
|
471
|
-
* @param url
|
|
472
|
-
* @returns Promise<boolean>
|
|
473
|
-
*/
|
|
474
|
-
export async function urlExists(url) {
|
|
475
|
-
return await urlExist(url);
|
|
476
|
-
}
|
|
477
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWNvcmUvc3JjL2xpYi9oZWxwZXJzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sOERBQThELENBQUM7QUFDekcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDN0QsT0FBTyxFQUFxQixXQUFXLEVBQUUsTUFBTSxFQUFXLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RyxPQUFPLFFBQVEsTUFBTSxXQUFXLENBQUM7QUFFakMsTUFBTSxVQUFVLDJCQUEyQixDQUFDLFVBQVUsRUFBRSxRQUFRO0lBQzVELE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUNyQyxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDckMsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUN4RCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM1QyxDQUFDO0FBRUQsTUFBTSxVQUFVLGVBQWUsQ0FBQyxJQUFhO0lBQ3pDLFFBQVEsSUFBSSxFQUFFO1FBQ1YsS0FBSyxPQUFPLENBQUMsU0FBUztZQUNsQixPQUFPLFdBQVcsQ0FBQztRQUN2QixLQUFLLE9BQU8sQ0FBQyxNQUFNO1lBQ2YsT0FBTyxR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RXJELElBQUksUUFBUSxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFO1FBQzFCLE9BQU8sR0FBRyxJQUFJLElBQUksVUFBVSxFQUFFLENBQUM7S0FDbEM7SUFDRCxJQUFJLFFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBRSxFQUFFO1FBQ3RCLE9BQU8sR0FBRyxJQUFJLElBQUksVUFBVSxJQUFJLEtBQUssSUFBSSxXQUFXLEVBQUUsQ0FBQztLQUMxRDtJQUNELElBQUksUUFBUSxLQUFLLElBQUksRUFBRTtRQUNuQixPQUFPLEdBQUcsS0FBSyxJQUFJLGFBQWEsRUFBRSxDQUFDO0tBQ3RDO0lBQ0QsSUFBSSxRQUFRLEdBQUcsSUFBSSxFQUFFO1FBQ2pCLElBQUksT0FBTyxLQUFLLENBQUMsRUFBRTtZQUNmLE9BQU8sR0FBRyxLQUFLLElBQUksV0FBVyxFQUFFLENBQUM7U0FDcEM7UUFDRCxPQUFPLEdBQUcsS0FBSyxJQUFJLFdBQVcsSUFBSSxPQUFPLElBQUksYUFBYSxFQUFFLENBQUM7S0FDaEU7SUFDRCxJQUFJLFFBQVEsSUFBSSxFQUFFLEVBQUU7UUFDaEIsSUFBSSxPQUFPLEtBQUssQ0FBQyxFQUFFO1lBQ2YsT0FBTyxHQUFHLE9BQU8sSUFBSSxhQUFhLEVBQUUsQ0FBQztTQUN4QztRQUNELE9BQU8sR0FBRyxPQUFPLElBQUksYUFBYSxJQUFJLE9BQU8sSUFBSSxhQUFhLEVBQUUsQ0FBQztLQUNwRTtJQUNELE9BQU8sR0FBRyxPQUFPLElBQUksYUFBYSxFQUFFLENBQUM7QUFDekMsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLFNBQVMsQ0FBQyxHQUFXO0lBQ3ZDLE9BQU8sTUFBTSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDL0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSBcIkBuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwXCI7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tIFwiQG5neC10cmFuc2xhdGUvY29yZVwiO1xyXG5pbXBvcnQgeyBNb2RhbFN3aXRjaFZpc2l0Q29tcG9uZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy9tb2RhbC1zd2l0Y2gtdmlzaXQvbW9kYWwtc3dpdGNoLXZpc2l0LmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBkb3dubG9hZEZpbGVBc09iamVjdCB9IGZyb20gXCIuL3NlcnZpY2VzL3MzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgRXF1aXBtZW50RG9jdW1lbnQsIExldmVsU3RhdHVzLCBMb2NhbGUsIE1pc3Npb24sIFBvaVR5cGUsIFJvbGVTdGF0dXMgfSBmcm9tIFwiLi90eXBlcy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB1cmxFeGlzdCBmcm9tIFwidXJsLWV4aXN0XCI7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGlzdGFuY2VCZXR3ZWVuVHdvUG9pbnRzKHN0YXJ0UG9pbnQsIGVuZFBvaW50KSB7XHJcbiAgICBjb25zdCBkeCA9IGVuZFBvaW50LnggLSBzdGFydFBvaW50Lng7XHJcbiAgICBjb25zdCBkeSA9IGVuZFBvaW50LnkgLSBzdGFydFBvaW50Lnk7XHJcbiAgICBjb25zdCBkeiA9IGVuZFBvaW50LnogLSBzdGFydFBvaW50Lno7XHJcbiAgICBjb25zdCBkaXN0YW5jZSA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSArIGR6ICogZHopO1xyXG4gICAgcmV0dXJuIE1hdGgucm91bmQoZGlzdGFuY2UgKiAxMDApIC8gMTAwO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcG9pVHlwZVRvU3RyaW5nKHR5cGU6IFBvaVR5cGUpOiBzdHJpbmcge1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgICAgY2FzZSBQb2lUeXBlLkVRVUlQTUVOVDpcclxuICAgICAgICAgICAgcmV0dXJuIFwiZXF1aXBtZW50XCI7XHJcbiAgICAgICAgY2FzZSBQb2lUeXBlLlRJQ0tFVDpcclxuICAgICAgICAgICAgcmV0dXJuIFwidGlja2V0XCI7XHJcbiAgICAgICAgY2FzZSBQb2lUeXBlLkRBVEE6XHJcbiAgICAgICAgICAgIHJldHVybiBcImRhdGFcIjtcclxuICAgICAgICBjYXNlIFBvaVR5cGUuREVTSzpcclxuICAgICAgICAgICAgcmV0dXJuIFwiZGF0YVwiO1xyXG4gICAgICAgIGNhc2UgUG9pVHlwZS5JTkZPUk1BVElPTjpcclxuICAgICAgICAgICAgcmV0dXJuIFwiaW5mb3JtYXRpb25cIjtcclxuICAgICAgICBjYXNlIFBvaVR5cGUuTUVBU1VSRTpcclxuICAgICAgICAgICAgcmV0dXJuIFwibWVhc3VyZVwiO1xyXG4gICAgICAgIGNhc2UgUG9pVHlwZS5QRU9QTEU6XHJcbiAgICAgICAgICAgIHJldHVybiBcInBlb3BsZVwiO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIHJldHVybiBcInRpY2tldFwiO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gd2FpdCh0aW1lb3V0OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgIHRpbWVvdXQgPSB0aW1lb3V0IHx8IDIwMDA7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICB9LCB0aW1lb3V0KTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3Qgd2FpdFVudGlsID0gKGNvbmRpdGlvbjogKCkgPT4gYm9vbGVhbikgPT4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICBjb25zdCBpbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoY29uZGl0aW9uKCkpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZCk7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LCAzMCk7XHJcbiAgICB9KTtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBlbnVtVG9BcnJheShlbnVtZXJhYmxlOiBhbnkpIHtcclxuICAgIHJldHVybiBPYmplY3Qua2V5cyhlbnVtZXJhYmxlKVxyXG4gICAgICAgIC5maWx0ZXIoKHZhbHVlKSA9PiBpc05hTihOdW1iZXIodmFsdWUpKSA9PT0gdHJ1ZSlcclxuICAgICAgICAubWFwKChrZXkpID0+IGVudW1lcmFibGVba2V5XSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRMZXZlbHNCZWxvdyhsZXZlbDogTGV2ZWxTdGF0dXMpOiBMZXZlbFN0YXR1c1tdIHtcclxuICAgIGNvbnN0IGFsbCA9IFtcclxuICAgICAgICBMZXZlbFN0YXR1cy5NSU5JTVVNLFxyXG4gICAgICAgIExldmVsU3RhdHVzLkxPVyxcclxuICAgICAgICBMZXZlbFN0YXR1cy5NRURJVU0sXHJcbiAgICAgICAgTGV2ZWxTdGF0dXMuSElHSCxcclxuICAgICAgICBMZXZlbFN0YXR1cy5NQVhJTVVNLFxyXG4gICAgXTtcclxuICAgIHN3aXRjaCAobGV2ZWwpIHtcclxuICAgICAgICBjYXNlIExldmVsU3RhdHVzLk1BWElNVU06XHJcbiAgICAgICAgICAgIHJldHVybiBhbGw7XHJcbiAgICAgICAgY2FzZSBMZXZlbFN0YXR1cy5ISUdIOlxyXG4gICAgICAgICAgICBhbGwuc3BsaWNlKDQsIDEpO1xyXG4gICAgICAgICAgICByZXR1cm4gYWxsO1xyXG4gICAgICAgIGNhc2UgTGV2ZWxTdGF0dXMuTUVESVVNOlxyXG4gICAgICAgICAgICBhbGwuc3BsaWNlKDMsIDIpO1xyXG4gICAgICAgICAgICByZXR1cm4gYWxsO1xyXG4gICAgICAgIGNhc2UgTGV2ZWxTdGF0dXMuTE9XOlxyXG4gICAgICAgICAgICByZXR1cm4gW0xldmVsU3RhdHVzLk1JTklNVU0sIExldmVsU3RhdHVzLkxPV107XHJcbiAgICAgICAgY2FzZSBMZXZlbFN0YXR1cy5NSU5JTVVNOlxyXG4gICAgICAgICAgICByZXR1cm4gW0xldmVsU3RhdHVzLk1JTklNVU1dO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIHJldHVybiBbTGV2ZWxTdGF0dXMuTUlOSU1VTV07XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRIaWdoZXN0TGV2ZWxGb3JNaXNzaW9ucyhtaXNzaW9uczogTWlzc2lvbltdKTogTGV2ZWxTdGF0dXMge1xyXG4gICAgbGV0IGxhdGVzdFZpc2libGVMZXZlbHMgPSBbTGV2ZWxTdGF0dXMuTUlOSU1VTV07XHJcbiAgICBmb3IgKGNvbnN0IG0gb2YgbWlzc2lvbnMpIHtcclxuICAgICAgICBjb25zdCB2aXNpYmxlTGV2ZWxzID0gZ2V0TGV2ZWxzQmVsb3cobS5sZXZlbCk7XHJcbiAgICAgICAgaWYgKHZpc2libGVMZXZlbHMubGVuZ3RoID4gbGF0ZXN0VmlzaWJsZUxldmVscy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgbGF0ZXN0VmlzaWJsZUxldmVscyA9IHZpc2libGVMZXZlbHM7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgc3dpdGNoIChsYXRlc3RWaXNpYmxlTGV2ZWxzLmxlbmd0aCkge1xyXG4gICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgcmV0dXJuIExldmVsU3RhdHVzLk1JTklNVU07XHJcbiAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICByZXR1cm4gTGV2ZWxTdGF0dXMuTE9XO1xyXG4gICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgcmV0dXJuIExldmVsU3RhdHVzLk1FRElVTTtcclxuICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICAgIHJldHVybiBMZXZlbFN0YXR1cy5ISUdIO1xyXG4gICAgICAgIGNhc2UgNTpcclxuICAgICAgICAgICAgcmV0dXJuIExldmVsU3RhdHVzLk1BWElNVU07XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgcmV0dXJuIExldmVsU3RhdHVzLk1JTklNVU07XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRIaWdoZXN0Um9sZUZvck1pc3Npb25zKG1pc3Npb25zOiBNaXNzaW9uW10pOiBSb2xlU3RhdHVzIHtcclxuICAgIGxldCBoaWdoZXN0Um9sZSA9IFJvbGVTdGF0dXMuVklTSVRPUjtcclxuICAgIGZvciAoY29uc3QgbSBvZiBtaXNzaW9ucykge1xyXG4gICAgICAgIGlmIChtLnJvbGUgPT09IFJvbGVTdGF0dXMuQURNSU4pIHtcclxuICAgICAgICAgICAgcmV0dXJuIFJvbGVTdGF0dXMuQURNSU47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChoaWdoZXN0Um9sZSA9PT0gUm9sZVN0YXR1cy5PV05FUikge1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG0ucm9sZSA9PT0gUm9sZVN0YXR1cy5PV05FUikge1xyXG4gICAgICAgICAgICBoaWdoZXN0Um9sZSA9IFJvbGVTdGF0dXMuT1dORVI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtLnJvbGUgPT09IFJvbGVTdGF0dXMuTUFOQUdFUikge1xyXG4gICAgICAgICAgICBoaWdoZXN0Um9sZSA9IFJvbGVTdGF0dXMuTUFOQUdFUjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBtLnJvbGUgPT09IFJvbGVTdGF0dXMuU0VSVklDRSAmJlxyXG4gICAgICAgICAgICBoaWdoZXN0Um9sZSAhPT0gUm9sZVN0YXR1cy5NQU5BR0VSXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGhpZ2hlc3RSb2xlID0gUm9sZVN0YXR1cy5TRVJWSUNFO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIG0ucm9sZSA9PT0gUm9sZVN0YXR1cy5PQ0NVUEFOVCAmJlxyXG4gICAgICAgICAgICBoaWdoZXN0Um9sZSA9PT0gUm9sZVN0YXR1cy5WSVNJVE9SXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGhpZ2hlc3RSb2xlID0gUm9sZVN0YXR1cy5PQ0NVUEFOVDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG0ucm9sZSA9PT0gUm9sZVN0YXR1cy5HVUlERV9NVVNFVU0pIHtcclxuICAgICAgICAgICAgaGlnaGVzdFJvbGUgPSBSb2xlU3RhdHVzLkdVSURFX01VU0VVTTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG0ucm9sZSA9PT0gUm9sZVN0YXR1cy5WSVNJVE9SX01VU0VVTSkge1xyXG4gICAgICAgICAgICBoaWdoZXN0Um9sZSA9IFJvbGVTdGF0dXMuVklTSVRPUl9NVVNFVU07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGhpZ2hlc3RSb2xlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Um9sZXNCZWxvd0Zvck1hbmFnZXIocm9sZTogUm9sZVN0YXR1cyk6IFJvbGVTdGF0dXNbXSB7XHJcbiAgICBjb25zdCBhbGwgPSBbXHJcbiAgICAgICAgUm9sZVN0YXR1cy5WSVNJVE9SLFxyXG4gICAgICAgIFJvbGVTdGF0dXMuT0NDVVBBTlQsXHJcbiAgICAgICAgUm9sZVN0YXR1cy5TRVJWSUNFLFxyXG4gICAgICAgIFJvbGVTdGF0dXMuTUFOQUdFUixcclxuICAgICAgICBSb2xlU3RhdHVzLk9XTkVSLFxyXG4gICAgICAgIFJvbGVTdGF0dXMuQURNSU4sXHJcbiAgICBdO1xyXG4gICAgY29uc3QgbXVzZXVtID0gW1JvbGVTdGF0dXMuVklTSVRPUl9NVVNFVU0sIFJvbGVTdGF0dXMuR1VJREVfTVVTRVVNXTtcclxuICAgIHN3aXRjaCAocm9sZSkge1xyXG4gICAgICAgIGNhc2UgUm9sZVN0YXR1cy5BRE1JTjpcclxuICAgICAgICAgICAgcmV0dXJuIFsuLi5hbGwsIC4uLm11c2V1bV07XHJcbiAgICAgICAgY2FzZSBSb2xlU3RhdHVzLk9XTkVSOlxyXG4gICAgICAgICAgICBhbGwuc3BsaWNlKDUsIDEpO1xyXG4gICAgICAgICAgICByZXR1cm4gYWxsO1xyXG4gICAgICAgIGNhc2UgUm9sZVN0YXR1cy5NQU5BR0VSOlxyXG4gICAgICAgICAgICBhbGwuc3BsaWNlKDQsIDIpO1xyXG4gICAgICAgICAgICByZXR1cm4gYWxsO1xyXG4gICAgICAgIGNhc2UgUm9sZVN0YXR1cy5HVUlERV9NVVNFVU06XHJcbiAgICAgICAgICAgIHJldHVybiBtdXNldW07XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgcmV0dXJuIGFsbC5zcGxpY2UoNCwgMik7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJVbmlxdWVBcnJheUJ5SUQoYXJyYXlPZk9iamVjdHM6IGFueVtdKTogYW55W10ge1xyXG4gICAgcmV0dXJuIGFycmF5T2ZPYmplY3RzLmZpbHRlcihcclxuICAgICAgICAodiwgaW5kZXgsIGEpID0+IGEuZmluZEluZGV4KCh0KSA9PiB0LmlkID09PSB2LmlkKSA9PT0gaW5kZXgsXHJcbiAgICApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlTnVsbEtleXNGcm9tT2JqZWN0KG9iamVjdDogT2JqZWN0KSB7XHJcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhvYmplY3QpKSB7XHJcbiAgICAgICAgaWYgKG9iamVjdFtrZXldID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBvYmplY3Rba2V5XTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBUZXN0IGlmIGEgZGF0ZSBoYXMgZXhwaXJlZFxyXG4gKiBAcGFyYW0gZGF0ZVxyXG4gKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBkYXRlIGhhcyBleHBpcmVkLCBmYWxzZSBvdGhlcndpc2VcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBkYXRlSGFzRXhwaXJlZChcclxuICAgIGRhdGU6IHN0cmluZyB8IERhdGUgfCBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkLFxyXG4pOiBib29sZWFuIHtcclxuICAgIGlmIChkYXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKGRhdGUpIDw9IG5ldyBEYXRlKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdMb2NhbGVUb0VudW0obG9jYWxlOiBzdHJpbmcpOiBMb2NhbGUge1xyXG4gICAgc3dpdGNoIChsb2NhbGUpIHtcclxuICAgICAgICBjYXNlIFwiZW5cIjpcclxuICAgICAgICAgICAgcmV0dXJuIExvY2FsZS5FTjtcclxuICAgICAgICBjYXNlIFwiZnJcIjpcclxuICAgICAgICAgICAgcmV0dXJuIExvY2FsZS5GUjtcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICByZXR1cm4gTG9jYWxlLkVOO1xyXG4gICAgfVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldE1ldGFGb3JJbWFnZSh1cmwpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICBjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTtcclxuXHJcbiAgICAgICAgaW1nLmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsICgpID0+IHtcclxuICAgICAgICAgICAgcmVzb2x2ZShpbWcpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGltZy5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgKCkgPT4gcmVqZWN0KCkpO1xyXG4gICAgICAgIGltZy5zcmMgPSB1cmw7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNvcnRBbHBoYWJldGljYWxseU9uTmFtZShhcnJheTogeyBuYW1lOiBzdHJpbmc7IH1bXSk6IGFueVtdIHtcclxuICAgIHJldHVybiBhcnJheS5zb3J0KChhLCBiKSA9PiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkRW1haWwoZW1haWw6IHN0cmluZykge1xyXG4gICAgY29uc3QgcmUgPVxyXG4gICAgICAgIC9eKChbXlxcc1wiKCksLjo7PD5AW1xcXFxcXF1dKyhcXC5bXlxcc1wiKCksLjo7PD5AW1xcXFxcXF1dKykqKXwoXCIuK1wiKSlAKChcXFsoPzpcXGR7MSwzfVxcLil7M31cXGR7MSwzfV0pfCgoW1xcZEEtWmEtelxcLV0rXFwuKStbQS1aYS16XXsyLH0pKSQvO1xyXG4gICAgcmV0dXJuIHJlLnRlc3QoZW1haWwpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZG93bmxvYWRCbG9iKGJsb2IsIGZpbGVuYW1lKSB7XHJcbiAgICBjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG4gICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xyXG4gICAgYS5ocmVmID0gdXJsO1xyXG4gICAgYS5kb3dubG9hZCA9IGZpbGVuYW1lIHx8IFwiZG93bmxvYWRcIjtcclxuICAgIGNvbnN0IGNsaWNrSGFuZGxlciA9ICgpID0+IHtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpO1xyXG4gICAgICAgICAgICBhLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBjbGlja0hhbmRsZXIpO1xyXG4gICAgICAgIH0sIDE1MCk7XHJcbiAgICB9O1xyXG4gICAgYS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgY2xpY2tIYW5kbGVyLCBmYWxzZSk7XHJcbiAgICBhLmNsaWNrKCk7XHJcbiAgICByZXR1cm4gYTtcclxufVxyXG5cclxuLypcclxuICAgIE9wZW4gbW9kYWwgaWYgb25lIGhhcyB0byBzd2l0Y2ggdmlydHVhbCB2aXNpdFxyXG4qL1xyXG5leHBvcnQgZnVuY3Rpb24gb3Blbk1vZGFsRm9yVmlzaXRTd2l0Y2goXHJcbiAgICBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsLFxyXG4gICAgbW9kZWwzRDogc3RyaW5nLFxyXG4gICAgc3BhY2VJRDogc3RyaW5nLFxyXG4gICAgZGF0YVRvTW92ZTogeyBzd2VlcFRvTW92ZTogc3RyaW5nLCByb3RhdGlvbjogYW55OyB9IHwgbnVsbCA9IG51bGxcclxuKSB7XHJcbiAgICBjb25zdCBtb2RhbFJlZmVyZW5jZSA9IG1vZGFsU2VydmljZS5vcGVuKE1vZGFsU3dpdGNoVmlzaXRDb21wb25lbnQpO1xyXG4gICAgbW9kYWxSZWZlcmVuY2UuY29tcG9uZW50SW5zdGFuY2UuY29udGVudCA9XHJcbiAgICAgICAgXCJUaGlzIG9iamVjdCBiZWxvbmdzIHRvIGFub3RoZXIgM0QgdmlzaXQuIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBzd2l0Y2ggdGhlIHZpc2l0P1wiO1xyXG4gICAgbW9kYWxSZWZlcmVuY2UuY29tcG9uZW50SW5zdGFuY2UubW9kZWwzRCA9IG1vZGVsM0Q7XHJcbiAgICBtb2RhbFJlZmVyZW5jZS5jb21wb25lbnRJbnN0YW5jZS5zcGFjZUlEID0gc3BhY2VJRDtcclxuICAgIGlmIChkYXRhVG9Nb3ZlKSB7XHJcbiAgICAgICAgbW9kYWxSZWZlcmVuY2UuY29tcG9uZW50SW5zdGFuY2UuZGF0YVRvTW92ZSA9IGRhdGFUb01vdmU7XHJcbiAgICB9XHJcblxyXG59XHJcblxyXG4vKipcclxuICogUmV0dXJuIGEgc3RyaW5nIG9mIGEgZ2l2ZW4gZGF0ZSB0aW1lIGluIGxvY2FsIGZvcm1hdC5cclxuICogVGhlIGZvcm1hdCBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBjdXJyZW50IGxhbmd1YWdlLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGRhdGVUaW1lVG9Mb2NhbFN0cmluZyhcclxuICAgIGRhdGU6IG51bWJlciB8IHN0cmluZyB8IERhdGUsXHJcbiAgICB0cmFuc2xhdGU/OiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgbW9kZT8sXHJcbik6IHN0cmluZyB7XHJcbiAgICBsZXQgbGFuZyA9IFwiZW4tRU5cIjtcclxuICAgIGlmICh0cmFuc2xhdGUpIHtcclxuICAgICAgICAvKiogR2V0IGN1cnJlbnQgbGFuZ3VhZ2UgKi9cclxuICAgICAgICBsYW5nID0gdHJhbnNsYXRlLmN1cnJlbnRMYW5nXHJcbiAgICAgICAgICAgID8gdHJhbnNsYXRlLmN1cnJlbnRMYW5nXHJcbiAgICAgICAgICAgIDogdHJhbnNsYXRlLmRlZmF1bHRMYW5nO1xyXG4gICAgICAgIC8qKiBUcmFuc2Zvcm1lICdfZnInIHRvICdmcicgKi9cclxuICAgICAgICBpZiAobGFuZykge1xyXG4gICAgICAgICAgICBsYW5nID0gbGFuZy5zbGljZSgxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGxldCBvcHRpb25zOiB7XHJcbiAgICAgICAgbW9udGg/O1xyXG4gICAgICAgIHllYXI/O1xyXG4gICAgICAgIGRheT87XHJcbiAgICAgICAgaG91cj87XHJcbiAgICAgICAgbWludXRlPztcclxuICAgICAgICBzZWNvbmQ/O1xyXG4gICAgICAgIGRhdGVTdHlsZT87XHJcbiAgICAgICAgdGltZVN0eWxlPztcclxuICAgICAgICB3ZWVrZGF5PztcclxuICAgICAgICB0aW1lWm9uZT87XHJcbiAgICAgICAgdGltZVpvbmVOYW1lPztcclxuICAgIH07XHJcbiAgICBzd2l0Y2ggKG1vZGUpIHtcclxuICAgICAgICBjYXNlIFwiZGF5X251bWVyaWNcIjpcclxuICAgICAgICAgICAgb3B0aW9ucyA9IHsgZGF5OiBcIm51bWVyaWNcIiB9O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwiZGF5XCI6XHJcbiAgICAgICAgICAgIG9wdGlvbnMgPSB7IHdlZWtkYXk6IFwibG9uZ1wiIH07XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJkYXRlXCI6XHJcbiAgICAgICAgICAgIG9wdGlvbnMgPSB7IGRhdGVTdHlsZTogXCJsb25nXCIgfTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcInNob3J0X2RhdGVfdGltZVwiOlxyXG4gICAgICAgICAgICBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgeWVhcjogXCIyLWRpZ2l0XCIsXHJcbiAgICAgICAgICAgICAgICBtb250aDogXCIyLWRpZ2l0XCIsXHJcbiAgICAgICAgICAgICAgICBkYXk6IFwiMi1kaWdpdFwiLFxyXG4gICAgICAgICAgICAgICAgaG91cjogXCIyLWRpZ2l0XCIsXHJcbiAgICAgICAgICAgICAgICBtaW51dGU6IFwiMi1kaWdpdFwiLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwidGltZVwiOlxyXG4gICAgICAgICAgICBvcHRpb25zID0geyBob3VyOiBcIm51bWVyaWNcIiwgbWludXRlOiBcIm51bWVyaWNcIiB9O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwiZGF5X3RpbWVfem9uZVwiOlxyXG4gICAgICAgICAgICBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgd2Vla2RheTogXCJsb25nXCIsXHJcbiAgICAgICAgICAgICAgICB5ZWFyOiBcIm51bWVyaWNcIixcclxuICAgICAgICAgICAgICAgIG1vbnRoOiBcImxvbmdcIixcclxuICAgICAgICAgICAgICAgIGRheTogXCJudW1lcmljXCIsXHJcbiAgICAgICAgICAgICAgICBob3VyOiBcIm51bWVyaWNcIixcclxuICAgICAgICAgICAgICAgIG1pbnV0ZTogXCJudW1lcmljXCIsXHJcbiAgICAgICAgICAgICAgICB0aW1lWm9uZU5hbWU6IFwic2hvcnRPZmZzZXRcIixcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgIGRhdGVTdHlsZTogXCJsb25nXCIsXHJcbiAgICAgICAgICAgICAgICB0aW1lU3R5bGU6IFwic2hvcnRcIixcclxuICAgICAgICAgICAgfTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZXcgRGF0ZShkYXRlKS50b0xvY2FsZVN0cmluZyhsYW5nLCBvcHRpb25zKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENvbXBhcmVzIHR3byBzdHJpbmcgYXJyYXlzXHJcbiAqIEBwYXJhbSBhcnJheTFcclxuICogQHBhcmFtIGFycmF5MlxyXG4gKiBAcmV0dXJuc1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGFycmF5c0NvbnRhaW5TYW1lRWxlbWVudHMoXHJcbiAgICBhcnJheTE6IHN0cmluZ1tdLFxyXG4gICAgYXJyYXkyOiBzdHJpbmdbXSxcclxuKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoYXJyYXkxKSA9PT0gSlNPTi5zdHJpbmdpZnkoYXJyYXkyKTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRWaXNpdFVybChjdXJyZW50VXJsOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgcGF0aCA9IGN1cnJlbnRVcmwuc3BsaXQoXCIvXCIpO1xyXG4gICAgcGF0aC5zcGxpY2UoMywgcGF0aC5sZW5ndGggLSAyKTtcclxuICAgIHJldHVybiBwYXRoLmpvaW4oXCIvXCIpO1xyXG59XHJcblxyXG4vKipcclxuICogRXh0cmFjdCBzcGFjZUlEIGZyb20gdXJsIHdoZW4gaW4gdmlzaXQgM0RcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRTcGFjZUlERnJvbVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCB2aXNpdFVybCA9IGdldFZpc2l0VXJsKHVybCk7XHJcbiAgICByZXR1cm4gdmlzaXRVcmwuc3BsaXQoXCIvXCIpWzJdO1xyXG59XHJcblxyXG4vKipcclxuICogRG93bmxvYWQgcmVsYXRlZFxyXG4gKi9cclxuaW1wb3J0IEZpbGVTYXZlciBmcm9tIFwiZmlsZS1zYXZlclwiO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGRvd25sb2FkRmlsZShmaWxlVXJsOiBzdHJpbmcsIGZpbGVOYW1lOiBzdHJpbmcpIHtcclxuICAgIEZpbGVTYXZlci5zYXZlQXMoZmlsZVVybCArIGZpbGVOYW1lLCBmaWxlTmFtZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBvcGVuRG9jdW1lbnQoZmlsZVVybDogc3RyaW5nLCBmaWxlTmFtZTogc3RyaW5nLCBpZDogbnVtYmVyKSB7XHJcbiAgICB3aW5kb3cub3BlbihgJHtmaWxlVXJsICsgZmlsZU5hbWV9I2RvYz0ke2lkfWAsIFwiX2JsYW5rXCIsIFwiXCIpO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgZG93bmxvYWRFcXVpcG1lbnREb2N1bWVudCA9IGFzeW5jIChcclxuICAgIGRvY3VtZW50XzogRXF1aXBtZW50RG9jdW1lbnQsXHJcbik6IFByb21pc2U8T2JqZWN0IHwgdm9pZD4gPT4ge1xyXG4gICAgY29uc3Qgc2lnbmVkRmlsZSA9IGF3YWl0IGRvd25sb2FkRmlsZUFzT2JqZWN0KGRvY3VtZW50Xy51cmwpO1xyXG4gICAgaWYgKHNpZ25lZEZpbGUpIHtcclxuICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgZG93bmxvYWRCbG9iKHNpZ25lZEZpbGUuQm9keSwgZG9jdW1lbnRfLmZpbGVuYW1lKTtcclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjaGVja0VsZW1lbnRCeUlkKHNlbGVjdG9yKSB7XHJcbiAgICBsZXQgcXVlcnlTZWxlY3RvciA9IG51bGw7XHJcbiAgICB3aGlsZSAocXVlcnlTZWxlY3RvciA9PT0gbnVsbCkge1xyXG4gICAgICAgIGF3YWl0IHJhZkFzeW5jKCk7XHJcbiAgICAgICAgcXVlcnlTZWxlY3RvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNlbGVjdG9yKTtcclxuICAgIH1cclxuICAgIHJldHVybiBxdWVyeVNlbGVjdG9yO1xyXG59XHJcblxyXG5mdW5jdGlvbiByYWZBc3luYygpIHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShyZXNvbHZlKTsgLy8gZmFzdGVyIHRoYW4gc2V0IHRpbWUgb3V0XHJcbiAgICB9KTtcclxufVxyXG5cclxuLyogQHBhcmFtIHtBcnJheX0gbnVtYmVycyBBbiBhcnJheSBvZiBudW1iZXJzLlxyXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IFRoZSBjYWxjdWxhdGVkIGF2ZXJhZ2UgKG9yIG1lYW4pIHZhbHVlIGZyb20gdGhlIHNwZWNpZmllZFxyXG4gKiAgICAgbnVtYmVycy5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBtZWFuKG51bWJlcnM6IG51bWJlcltdKSB7XHJcbiAgICBsZXQgdG90YWwgPSAwO1xyXG4gICAgZm9yIChjb25zdCBudW1iZXIgb2YgbnVtYmVycykge1xyXG4gICAgICAgIHRvdGFsICs9IG51bWJlcjtcclxuICAgIH1cclxuICAgIHJldHVybiB0b3RhbCAvIG51bWJlcnMubGVuZ3RoO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFRpbWVzdGFtcFRvTG9jYWxab25lKHRpbWVzdGFtcDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IHNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKHRpbWVzdGFtcCk7XHJcbiAgICBjb25zdCBsb2NhbE9mZnNldCA9IC0xICogc2VsZWN0ZWREYXRlLmdldFRpbWV6b25lT2Zmc2V0KCkgKiA2MDAwMDtcclxuICAgIGNvbnN0IHN0YW1wID0gdGltZXN0YW1wICsgbG9jYWxPZmZzZXQ7XHJcbiAgICByZXR1cm4gc3RhbXA7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm4gc3RyaW5nIGZvciBwZXJpb2Qgb2YgdGltZS4gUGFyYW1ldGVycyBhcmUgRGF0ZVRpbWUgb2JqZWN0cyBvZiBsdXhvbiBsaWJyYXJ5LlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zbGF0ZURhdGVQZXJpb2QoXHJcbiAgICB0cmFuc2xhdGVTZXJ2aWNlOiBhbnksXHJcbiAgICBkYXRlU3RhcnRQZXJpb2Q6IGFueSxcclxuICAgIGRhdGVFbmRQZXJpb2Q6IGFueSxcclxuKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGxvY2FsZSA9IGdldExvY2FsZUxvbmcodHJhbnNsYXRlU2VydmljZSk7XHJcbiAgICByZXR1cm4gYCR7ZGF0ZVN0YXJ0UGVyaW9kLnRvTG9jYWxlU3RyaW5nKHtcclxuICAgICAgICBsb2NhbGUsXHJcbiAgICAgICAgbW9udGg6IFwibG9uZ1wiLFxyXG4gICAgICAgIGRheTogXCIyLWRpZ2l0XCIsXHJcbiAgICB9KX0gLSAke2RhdGVFbmRQZXJpb2QudG9Mb2NhbGVTdHJpbmcoe1xyXG4gICAgICAgIGxvY2FsZSxcclxuICAgICAgICBtb250aDogXCJsb25nXCIsXHJcbiAgICAgICAgZGF5OiBcIjItZGlnaXRcIixcclxuICAgIH0pfSBgO1xyXG59XHJcblxyXG5cclxuLyoqXHJcbiogUmV0dXJuIGxvY2FsIGluIHRoZSBjYW5vbmljYWwgZm9ybTogXCJlbi1HQlwiLCBcImZyLUZSXCJcclxuKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGdldExvY2FsZUxvbmcodHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlKTogc3RyaW5nIHtcclxuICAgIGxldCBsYW5nID0gdHJhbnNsYXRlLmN1cnJlbnRMYW5nXHJcbiAgICAgICAgPyB0cmFuc2xhdGUuY3VycmVudExhbmdcclxuICAgICAgICA6IHRyYW5zbGF0ZS5kZWZhdWx0TGFuZztcclxuXHJcbiAgICAvKiogVHJhbnNmb3JtICdfZnInIHRvICdmcicgKi9cclxuICAgIGxhbmcgPSBsYW5nLnNsaWNlKDEpO1xyXG4gICAgaWYgKGxhbmcgPT09IFwiZW5cIikge1xyXG4gICAgICAgIHJldHVybiBcImVuLUdCXCI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYCR7bGFuZ30tJHtsYW5nLnRvVXBwZXJDYXNlKCl9YDtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJldHVybiBsb2NhbCBpbiB0aGUgc2hvcnQgZm9ybTogXCJlblwiLCBcImZyXCJcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRMb2NhbGVTaG9ydCh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UpOiBzdHJpbmcge1xyXG4gICAgbGV0IGxhbmcgPSB0cmFuc2xhdGUuY3VycmVudExhbmdcclxuICAgICAgICA/IHRyYW5zbGF0ZS5jdXJyZW50TGFuZ1xyXG4gICAgICAgIDogdHJhbnNsYXRlLmRlZmF1bHRMYW5nO1xyXG5cclxuICAgIC8qKiBUcmFuc2Zvcm0gJ19mcicgdG8gJ2ZyJyAqL1xyXG4gICAgbGFuZyA9IGxhbmcuc2xpY2UoMSk7XHJcbiAgICByZXR1cm4gbGFuZztcclxufVxyXG5cclxuLyoqXHJcbiAqIEZvcm1hdCBzdHJpbmcgdG8gbG93ZXJjYXNlLCBubyBzcGFjZXNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdUb0xvd2VyY2FzZU5vU3BhY2VzKGlucHV0OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3Qgd29yZHMgPSBpbnB1dC50b0xvd2VyQ2FzZSgpLnNwbGl0KC9cXHMrLyk7XHJcbiAgICByZXR1cm4gd29yZHMuam9pbihcIlwiKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFRlc3QgaWYgdGhlIG9iamVjdCA9PT0ge31cclxuICogQHBhcmFtIG9iaiBvYmplY3Qge2tleTp2YWx1ZX1cclxuICogQHJldHVybnMgYm9vbGVhblxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzRW1wdHlPYmplY3Qob2JqZWN0KTogYm9vbGVhbiB7XHJcbiAgICBmb3IgKGNvbnN0IHggaW4gb2JqZWN0KSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzaHVmZmxlQXJyYXkoYXJyYXk6IGFueVtdKSB7XHJcbiAgICBjb25zdCBuZXdBcnJheSA9IFsuLi5hcnJheV07XHJcbiAgICBmb3IgKGxldCBpbmRleCA9IGFycmF5Lmxlbmd0aCAtIDE7IGluZGV4ID4gMDsgaW5kZXgtLSkge1xyXG4gICAgICAgIGNvbnN0IGluZGV4TmV3ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKGluZGV4ICsgMSkpO1xyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxyXG4gICAgICAgIFtuZXdBcnJheVtpbmRleF0sIG5ld0FycmF5W2luZGV4TmV3XV0gPSBbXHJcbiAgICAgICAgICAgIG5ld0FycmF5W2luZGV4TmV3XSxcclxuICAgICAgICAgICAgbmV3QXJyYXlbaW5kZXhdLFxyXG4gICAgICAgIF07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV3QXJyYXk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBudW1iZXJUb0RhdGVTdHJpbmcodGltZXN0YW1wOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgY29uc3QganNEYXRlID0gbmV3IERhdGUodGltZXN0YW1wKTtcclxuICAgIHJldHVybiBqc0RhdGUudG9Mb2NhbGVTdHJpbmcoXCJmci1GUlwiKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGR1cmF0aW9uVG9TdHJpbmcoXHJcbiAgICBkdXJhdGlvbjogbnVtYmVyLFxyXG4gICAgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4pOiBzdHJpbmcge1xyXG4gICAgY29uc3QgZGF5cyA9IE1hdGguZmxvb3IoZHVyYXRpb24gLyAzNjAwIC8gMjQpO1xyXG4gICAgY29uc3QgaG91cnMgPSBNYXRoLmZsb29yKChkdXJhdGlvbiAtIGRheXMgKiAyNCAqIDM2MDApIC8gMzYwMCk7XHJcbiAgICBjb25zdCBtaW51dGVzID0gTWF0aC5mbG9vcigoZHVyYXRpb24gJSAzNjAwKSAvIDYwKTtcclxuICAgIGNvbnN0IHNlY29uZHMgPSBNYXRoLmZsb29yKGR1cmF0aW9uICUgNjApO1xyXG5cclxuICAgIGNvbnN0IGRheXNTdHJpbmcgPSB0cmFuc2xhdGUuaW5zdGFudChcImRheShzKVwiKTtcclxuICAgIGNvbnN0IGhvdXJzU3RyaW5nID0gdHJhbnNsYXRlLmluc3RhbnQoXCJob3VyKHMpXCIpO1xyXG4gICAgY29uc3Qgb25lSG91clN0cmluZyA9IHRyYW5zbGF0ZS5pbnN0YW50KFwiaG91clwiKTtcclxuICAgIGNvbnN0IG1pbnV0ZXNTdHJpbmcgPSB0cmFuc2xhdGUuaW5zdGFudChcIm1pbnV0ZShzKVwiKTtcclxuICAgIGNvbnN0IHNlY29uZHNTdHJpbmcgPSB0cmFuc2xhdGUuaW5zdGFudChcInNlY29uZChzKVwiKTtcclxuXHJcbiAgICBpZiAoZHVyYXRpb24gPiAzNjAwICogMjQgKiA3KSB7XHJcbiAgICAgICAgcmV0dXJuIGAke2RheXN9ICR7ZGF5c1N0cmluZ31gO1xyXG4gICAgfVxyXG4gICAgaWYgKGR1cmF0aW9uID4gMzYwMCAqIDI0KSB7XHJcbiAgICAgICAgcmV0dXJuIGAke2RheXN9ICR7ZGF5c1N0cmluZ30gJHtob3Vyc30gJHtob3Vyc1N0cmluZ31gO1xyXG4gICAgfVxyXG4gICAgaWYgKGR1cmF0aW9uID09PSAzNjAwKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke2hvdXJzfSAke29uZUhvdXJTdHJpbmd9YDtcclxuICAgIH1cclxuICAgIGlmIChkdXJhdGlvbiA+IDM2MDApIHtcclxuICAgICAgICBpZiAobWludXRlcyA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gYCR7aG91cnN9ICR7aG91cnNTdHJpbmd9YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGAke2hvdXJzfSAke2hvdXJzU3RyaW5nfSAke21pbnV0ZXN9ICR7bWludXRlc1N0cmluZ31gO1xyXG4gICAgfVxyXG4gICAgaWYgKGR1cmF0aW9uID49IDYwKSB7XHJcbiAgICAgICAgaWYgKHNlY29uZHMgPT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGAke21pbnV0ZXN9ICR7bWludXRlc1N0cmluZ31gO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYCR7bWludXRlc30gJHttaW51dGVzU3RyaW5nfSAke3NlY29uZHN9ICR7c2Vjb25kc1N0cmluZ31gO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGAke3NlY29uZHN9ICR7c2Vjb25kc1N0cmluZ31gO1xyXG59XHJcblxyXG4vKipcclxuICogUnVucyBhIHJlcXVlc3QgdG8gYSBnaXZlbiB1cmwgKGlmIHJlc3BvbnNlIGlzIDQwNCBvciBub3QpXHJcbiAqIEBwYXJhbSB1cmwgXHJcbiAqIEByZXR1cm5zICBQcm9taXNlPGJvb2xlYW4+XHJcbiAqL1xyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdXJsRXhpc3RzKHVybDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICByZXR1cm4gYXdhaXQgdXJsRXhpc3QodXJsKTtcclxufVxyXG5cclxuIl19
|
|
468
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWNvcmUvc3JjL2xpYi9oZWxwZXJzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sOERBQThELENBQUM7QUFDekcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDN0QsT0FBTyxFQUFxQixXQUFXLEVBQUUsTUFBTSxFQUFXLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV2RyxNQUFNLFVBQVUsMkJBQTJCLENBQUMsVUFBVSxFQUFFLFFBQVE7SUFDNUQsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUNyQyxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDckMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3hELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLENBQUM7QUFFRCxNQUFNLFVBQVUsZUFBZSxDQUFDLElBQWE7SUFDekMsUUFBUSxJQUFJLEVBQUU7UUFDVixLQUFLLE9BQU8sQ0FBQyxTQUFTO1lBQ2xCLE9BQU8sV0FBVyxDQUFDO1FBQ3ZCLEtBQUssT0FBTyxDQUFDLE1BQU07WUFDZixPQUFPLFFBQVEsQ0FBQztRQUNwQixLQUFLLE9BQU8sQ0FBQyxJ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QUUsR0FBRyxDQUFDLEVBQUU7UUFDMUIsT0FBTyxHQUFHLElBQUksSUFBSSxVQUFVLEVBQUUsQ0FBQztLQUNsQztJQUNELElBQUksUUFBUSxHQUFHLElBQUksR0FBRyxFQUFFLEVBQUU7UUFDdEIsT0FBTyxHQUFHLElBQUksSUFBSSxVQUFVLElBQUksS0FBSyxJQUFJLFdBQVcsRUFBRSxDQUFDO0tBQzFEO0lBQ0QsSUFBSSxRQUFRLEtBQUssSUFBSSxFQUFFO1FBQ25CLE9BQU8sR0FBRyxLQUFLLElBQUksYUFBYSxFQUFFLENBQUM7S0FDdEM7SUFDRCxJQUFJLFFBQVEsR0FBRyxJQUFJLEVBQUU7UUFDakIsSUFBSSxPQUFPLEtBQUssQ0FBQyxFQUFFO1lBQ2YsT0FBTyxHQUFHLEtBQUssSUFBSSxXQUFXLEVBQUUsQ0FBQztTQUNwQztRQUNELE9BQU8sR0FBRyxLQUFLLElBQUksV0FBVyxJQUFJLE9BQU8sSUFBSSxhQUFhLEVBQUUsQ0FBQztLQUNoRTtJQUNELElBQUksUUFBUSxJQUFJLEVBQUUsRUFBRTtRQUNoQixJQUFJLE9BQU8sS0FBSyxDQUFDLEVBQUU7WUFDZixPQUFPLEdBQUcsT0FBTyxJQUFJLGFBQWEsRUFBRSxDQUFDO1NBQ3hDO1FBQ0QsT0FBTyxHQUFHLE9BQU8sSUFBSSxhQUFhLElBQUksT0FBTyxJQUFJLGFBQWEsRUFBRSxDQUFDO0tBQ3BFO0lBQ0QsT0FBTyxHQUFHLE9BQU8sSUFBSSxhQUFhLEVBQUUsQ0FBQztBQUN6QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tIFwiQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXBcIjtcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XHJcbmltcG9ydCB7IE1vZGFsU3dpdGNoVmlzaXRDb21wb25lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL21vZGFsLXN3aXRjaC12aXNpdC9tb2RhbC1zd2l0Y2gtdmlzaXQuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IGRvd25sb2FkRmlsZUFzT2JqZWN0IH0gZnJvbSBcIi4vc2VydmljZXMvczMuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBFcXVpcG1lbnREb2N1bWVudCwgTGV2ZWxTdGF0dXMsIExvY2FsZSwgTWlzc2lvbiwgUG9pVHlwZSwgUm9sZVN0YXR1cyB9IGZyb20gXCIuL3R5cGVzLnNlcnZpY2VcIjtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXREaXN0YW5jZUJldHdlZW5Ud29Qb2ludHMoc3RhcnRQb2ludCwgZW5kUG9pbnQpIHtcclxuICAgIGNvbnN0IGR4ID0gZW5kUG9pbnQueCAtIHN0YXJ0UG9pbnQueDtcclxuICAgIGNvbnN0IGR5ID0gZW5kUG9pbnQueSAtIHN0YXJ0UG9pbnQueTtcclxuICAgIGNvbnN0IGR6ID0gZW5kUG9pbnQueiAtIHN0YXJ0UG9pbnQuejtcclxuICAgIGNvbnN0IGRpc3RhbmNlID0gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5ICsgZHogKiBkeik7XHJcbiAgICByZXR1cm4gTWF0aC5yb3VuZChkaXN0YW5jZSAqIDEwMCkgLyAxMDA7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBwb2lUeXBlVG9TdHJpbmcodHlwZTogUG9pVHlwZSk6IHN0cmluZyB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgICBjYXNlIFBvaVR5cGUuRVFVSVBNRU5UOlxyXG4gICAgICAgICAgICByZXR1cm4gXCJlcXVpcG1lbnRcIjtcclxuICAgICAgICBjYXNlIFBvaVR5cGUuVElDS0VUOlxyXG4gICAgICAgICAgICByZXR1cm4gXCJ0aWNrZXRcIjtcclxuICAgICAgICBjYXNlIFBvaVR5cGUuREFUQTpcclxuICAgICAgICAgICAgcmV0dXJuIFwiZGF0YVwiO1xyXG4gICAgICAgIGNhc2UgUG9pVHlwZS5ERVNLOlxyXG4gICAgICAgICAgICByZXR1cm4gXCJkYXRhXCI7XHJcbiAgICAgICAgY2FzZSBQb2lUeXBlLklORk9STUFUSU9OOlxyXG4gICAgICAgICAgICByZXR1cm4gXCJpbmZvcm1hdGlvblwiO1xyXG4gICAgICAgIGNhc2UgUG9pVHlwZS5NRUFTVVJFOlxyXG4gICAgICAgICAgICByZXR1cm4gXCJtZWFzdXJlXCI7XHJcbiAgICAgICAgY2FzZSBQb2lUeXBlLlBFT1BMRTpcclxuICAgICAgICAgICAgcmV0dXJuIFwicGVvcGxlXCI7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgcmV0dXJuIFwidGlja2V0XCI7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB3YWl0KHRpbWVvdXQ6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgdGltZW91dCA9IHRpbWVvdXQgfHwgMjAwMDtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgIH0sIHRpbWVvdXQpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCB3YWl0VW50aWwgPSAoY29uZGl0aW9uOiAoKSA9PiBib29sZWFuKSA9PiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGludGVydmFsSWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChjb25kaXRpb24oKSkge1xyXG4gICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sIDMwKTtcclxuICAgIH0pO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGVudW1Ub0FycmF5KGVudW1lcmFibGU6IGFueSkge1xyXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGVudW1lcmFibGUpXHJcbiAgICAgICAgLmZpbHRlcigodmFsdWUpID0+IGlzTmFOKE51bWJlcih2YWx1ZSkpID09PSB0cnVlKVxyXG4gICAgICAgIC5tYXAoKGtleSkgPT4gZW51bWVyYWJsZVtrZXldKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldExldmVsc0JlbG93KGxldmVsOiBMZXZlbFN0YXR1cyk6IExldmVsU3RhdHVzW10ge1xyXG4gICAgY29uc3QgYWxsID0gW1xyXG4gICAgICAgIExldmVsU3RhdHVzLk1JTklNVU0sXHJcbiAgICAgICAgTGV2ZWxTdGF0dXMuTE9XLFxyXG4gICAgICAgIExldmVsU3RhdHVzLk1FRElVTSxcclxuICAgICAgICBMZXZlbFN0YXR1cy5ISUdILFxyXG4gICAgICAgIExldmVsU3RhdHVzLk1BWElNVU0sXHJcbiAgICBdO1xyXG4gICAgc3dpdGNoIChsZXZlbCkge1xyXG4gICAgICAgIGNhc2UgTGV2ZWxTdGF0dXMuTUFYSU1VTTpcclxuICAgICAgICAgICAgcmV0dXJuIGFsbDtcclxuICAgICAgICBjYXNlIExldmVsU3RhdHVzLkhJR0g6XHJcbiAgICAgICAgICAgIGFsbC5zcGxpY2UoNCwgMSk7XHJcbiAgICAgICAgICAgIHJldHVybiBhbGw7XHJcbiAgICAgICAgY2FzZSBMZXZlbFN0YXR1cy5NRURJVU06XHJcbiAgICAgICAgICAgIGFsbC5zcGxpY2UoMywgMik7XHJcbiAgICAgICAgICAgIHJldHVybiBhbGw7XHJcbiAgICAgICAgY2FzZSBMZXZlbFN0YXR1cy5MT1c6XHJcbiAgICAgICAgICAgIHJldHVybiBbTGV2ZWxTdGF0dXMuTUlOSU1VTSwgTGV2ZWxTdGF0dXMuTE9XXTtcclxuICAgICAgICBjYXNlIExldmVsU3RhdHVzLk1JTklNVU06XHJcbiAgICAgICAgICAgIHJldHVybiBbTGV2ZWxTdGF0dXMuTUlOSU1VTV07XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgcmV0dXJuIFtMZXZlbFN0YXR1cy5NSU5JTVVNXTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEhpZ2hlc3RMZXZlbEZvck1pc3Npb25zKG1pc3Npb25zOiBNaXNzaW9uW10pOiBMZXZlbFN0YXR1cyB7XHJcbiAgICBsZXQgbGF0ZXN0VmlzaWJsZUxldmVscyA9IFtMZXZlbFN0YXR1cy5NSU5JTVVNXTtcclxuICAgIGZvciAoY29uc3QgbSBvZiBtaXNzaW9ucykge1xyXG4gICAgICAgIGNvbnN0IHZpc2libGVMZXZlbHMgPSBnZXRMZXZlbHNCZWxvdyhtLmxldmVsKTtcclxuICAgICAgICBpZiAodmlzaWJsZUxldmVscy5sZW5ndGggPiBsYXRlc3RWaXNpYmxlTGV2ZWxzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBsYXRlc3RWaXNpYmxlTGV2ZWxzID0gdmlzaWJsZUxldmVscztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBzd2l0Y2ggKGxhdGVzdFZpc2libGVMZXZlbHMubGVuZ3RoKSB7XHJcbiAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICByZXR1cm4gTGV2ZWxTdGF0dXMuTUlOSU1VTTtcclxuICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgIHJldHVybiBMZXZlbFN0YXR1cy5MT1c7XHJcbiAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICByZXR1cm4gTGV2ZWxTdGF0dXMuTUVESVVNO1xyXG4gICAgICAgIGNhc2UgNDpcclxuICAgICAgICAgICAgcmV0dXJuIExldmVsU3RhdHVzLkhJR0g7XHJcbiAgICAgICAgY2FzZSA1OlxyXG4gICAgICAgICAgICByZXR1cm4gTGV2ZWxTdGF0dXMuTUFYSU1VTTtcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICByZXR1cm4gTGV2ZWxTdGF0dXMuTUlOSU1VTTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEhpZ2hlc3RSb2xlRm9yTWlzc2lvbnMobWlzc2lvbnM6IE1pc3Npb25bXSk6IFJvbGVTdGF0dXMge1xyXG4gICAgbGV0IGhpZ2hlc3RSb2xlID0gUm9sZVN0YXR1cy5WSVNJVE9SO1xyXG4gICAgZm9yIChjb25zdCBtIG9mIG1pc3Npb25zKSB7XHJcbiAgICAgICAgaWYgKG0ucm9sZSA9PT0gUm9sZVN0YXR1cy5BRE1JTikge1xyXG4gICAgICAgICAgICByZXR1cm4gUm9sZVN0YXR1cy5BRE1JTjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGhpZ2hlc3RSb2xlID09PSBSb2xlU3RhdHVzLk9XTkVSKSB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobS5yb2xlID09PSBSb2xlU3RhdHVzLk9XTkVSKSB7XHJcbiAgICAgICAgICAgIGhpZ2hlc3RSb2xlID0gUm9sZVN0YXR1cy5PV05FUjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG0ucm9sZSA9PT0gUm9sZVN0YXR1cy5NQU5BR0VSKSB7XHJcbiAgICAgICAgICAgIGhpZ2hlc3RSb2xlID0gUm9sZVN0YXR1cy5NQU5BR0VSO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIG0ucm9sZSA9PT0gUm9sZVN0YXR1cy5TRVJWSUNFICYmXHJcbiAgICAgICAgICAgIGhpZ2hlc3RSb2xlICE9PSBSb2xlU3RhdHVzLk1BTkFHRVJcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgaGlnaGVzdFJvbGUgPSBSb2xlU3RhdHVzLlNFUlZJQ0U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgbS5yb2xlID09PSBSb2xlU3RhdHVzLk9DQ1VQQU5UICYmXHJcbiAgICAgICAgICAgIGhpZ2hlc3RSb2xlID09PSBSb2xlU3RhdHVzLlZJU0lUT1JcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgaGlnaGVzdFJvbGUgPSBSb2xlU3RhdHVzLk9DQ1VQQU5UO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobS5yb2xlID09PSBSb2xlU3RhdHVzLkdVSURFX01VU0VVTSkge1xyXG4gICAgICAgICAgICBoaWdoZXN0Um9sZSA9IFJvbGVTdGF0dXMuR1VJREVfTVVTRVVNO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobS5yb2xlID09PSBSb2xlU3RhdHVzLlZJU0lUT1JfTVVTRVVNKSB7XHJcbiAgICAgICAgICAgIGhpZ2hlc3RSb2xlID0gUm9sZVN0YXR1cy5WSVNJVE9SX01VU0VVTTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaGlnaGVzdFJvbGU7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRSb2xlc0JlbG93Rm9yTWFuYWdlcihyb2xlOiBSb2xlU3RhdHVzKTogUm9sZVN0YXR1c1tdIHtcclxuICAgIGNvbnN0IGFsbCA9IFtcclxuICAgICAgICBSb2xlU3RhdHVzLlZJU0lUT1IsXHJcbiAgICAgICAgUm9sZVN0YXR1cy5PQ0NVUEFOVCxcclxuICAgICAgICBSb2xlU3RhdHVzLlNFUlZJQ0UsXHJcbiAgICAgICAgUm9sZVN0YXR1cy5NQU5BR0VSLFxyXG4gICAgICAgIFJvbGVTdGF0dXMuT1dORVIsXHJcbiAgICAgICAgUm9sZVN0YXR1cy5BRE1JTixcclxuICAgIF07XHJcbiAgICBjb25zdCBtdXNldW0gPSBbUm9sZVN0YXR1cy5WSVNJVE9SX01VU0VVTSwgUm9sZVN0YXR1cy5HVUlERV9NVVNFVU1dO1xyXG4gICAgc3dpdGNoIChyb2xlKSB7XHJcbiAgICAgICAgY2FzZSBSb2xlU3RhdHVzLkFETUlOOlxyXG4gICAgICAgICAgICByZXR1cm4gWy4uLmFsbCwgLi4ubXVzZXVtXTtcclxuICAgICAgICBjYXNlIFJvbGVTdGF0dXMuT1dORVI6XHJcbiAgICAgICAgICAgIGFsbC5zcGxpY2UoNSwgMSk7XHJcbiAgICAgICAgICAgIHJldHVybiBhbGw7XHJcbiAgICAgICAgY2FzZSBSb2xlU3RhdHVzLk1BTkFHRVI6XHJcbiAgICAgICAgICAgIGFsbC5zcGxpY2UoNCwgMik7XHJcbiAgICAgICAgICAgIHJldHVybiBhbGw7XHJcbiAgICAgICAgY2FzZSBSb2xlU3RhdHVzLkdVSURFX01VU0VVTTpcclxuICAgICAgICAgICAgcmV0dXJuIG11c2V1bTtcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICByZXR1cm4gYWxsLnNwbGljZSg0LCAyKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlclVuaXF1ZUFycmF5QnlJRChhcnJheU9mT2JqZWN0czogYW55W10pOiBhbnlbXSB7XHJcbiAgICByZXR1cm4gYXJyYXlPZk9iamVjdHMuZmlsdGVyKFxyXG4gICAgICAgICh2LCBpbmRleCwgYSkgPT4gYS5maW5kSW5kZXgoKHQpID0+IHQuaWQgPT09IHYuaWQpID09PSBpbmRleCxcclxuICAgICk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVOdWxsS2V5c0Zyb21PYmplY3Qob2JqZWN0OiBPYmplY3QpIHtcclxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG9iamVjdCkpIHtcclxuICAgICAgICBpZiAob2JqZWN0W2tleV0gPT09IG51bGwpIHtcclxuICAgICAgICAgICAgZGVsZXRlIG9iamVjdFtrZXldO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIFRlc3QgaWYgYSBkYXRlIGhhcyBleHBpcmVkXHJcbiAqIEBwYXJhbSBkYXRlXHJcbiAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGRhdGUgaGFzIGV4cGlyZWQsIGZhbHNlIG90aGVyd2lzZVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGRhdGVIYXNFeHBpcmVkKFxyXG4gICAgZGF0ZTogc3RyaW5nIHwgRGF0ZSB8IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQsXHJcbik6IGJvb2xlYW4ge1xyXG4gICAgaWYgKGRhdGUpIHtcclxuICAgICAgICByZXR1cm4gbmV3IERhdGUoZGF0ZSkgPD0gbmV3IERhdGUoKTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ0xvY2FsZVRvRW51bShsb2NhbGU6IHN0cmluZyk6IExvY2FsZSB7XHJcbiAgICBzd2l0Y2ggKGxvY2FsZSkge1xyXG4gICAgICAgIGNhc2UgXCJlblwiOlxyXG4gICAgICAgICAgICByZXR1cm4gTG9jYWxlLkVOO1xyXG4gICAgICAgIGNhc2UgXCJmclwiOlxyXG4gICAgICAgICAgICByZXR1cm4gTG9jYWxlLkZSO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIHJldHVybiBMb2NhbGUuRU47XHJcbiAgICB9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWV0YUZvckltYWdlKHVybCk6IFByb21pc2U8YW55PiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGltZyA9IG5ldyBJbWFnZSgpO1xyXG5cclxuICAgICAgICBpbWcuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICByZXNvbHZlKGltZyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaW1nLmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCAoKSA9PiByZWplY3QoKSk7XHJcbiAgICAgICAgaW1nLnNyYyA9IHVybDtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc29ydEFscGhhYmV0aWNhbGx5T25OYW1lKGFycmF5OiB7IG5hbWU6IHN0cmluZzsgfVtdKTogYW55W10ge1xyXG4gICAgcmV0dXJuIGFycmF5LnNvcnQoKGEsIGIpID0+IGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSkpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRFbWFpbChlbWFpbDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCByZSA9XHJcbiAgICAgICAgL14oKFteXFxzXCIoKSwuOjs8PkBbXFxcXFxcXV0rKFxcLlteXFxzXCIoKSwuOjs8PkBbXFxcXFxcXV0rKSopfChcIi4rXCIpKUAoKFxcWyg/OlxcZHsxLDN9XFwuKXszfVxcZHsxLDN9XSl8KChbXFxkQS1aYS16XFwtXStcXC4pK1tBLVphLXpdezIsfSkpJC87XHJcbiAgICByZXR1cm4gcmUudGVzdChlbWFpbCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBkb3dubG9hZEJsb2IoYmxvYiwgZmlsZW5hbWUpIHtcclxuICAgIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcbiAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7XHJcbiAgICBhLmhyZWYgPSB1cmw7XHJcbiAgICBhLmRvd25sb2FkID0gZmlsZW5hbWUgfHwgXCJkb3dubG9hZFwiO1xyXG4gICAgY29uc3QgY2xpY2tIYW5kbGVyID0gKCkgPT4ge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XHJcbiAgICAgICAgICAgIGEucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGNsaWNrSGFuZGxlcik7XHJcbiAgICAgICAgfSwgMTUwKTtcclxuICAgIH07XHJcbiAgICBhLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBjbGlja0hhbmRsZXIsIGZhbHNlKTtcclxuICAgIGEuY2xpY2soKTtcclxuICAgIHJldHVybiBhO1xyXG59XHJcblxyXG4vKlxyXG4gICAgT3BlbiBtb2RhbCBpZiBvbmUgaGFzIHRvIHN3aXRjaCB2aXJ0dWFsIHZpc2l0XHJcbiovXHJcbmV4cG9ydCBmdW5jdGlvbiBvcGVuTW9kYWxGb3JWaXNpdFN3aXRjaChcclxuICAgIG1vZGFsU2VydmljZTogTmdiTW9kYWwsXHJcbiAgICBtb2RlbDNEOiBzdHJpbmcsXHJcbiAgICBzcGFjZUlEOiBzdHJpbmcsXHJcbiAgICBkYXRhVG9Nb3ZlOiB7IHN3ZWVwVG9Nb3ZlOiBzdHJpbmcsIHJvdGF0aW9uOiBhbnk7IH0gfCBudWxsID0gbnVsbFxyXG4pIHtcclxuICAgIGNvbnN0IG1vZGFsUmVmZXJlbmNlID0gbW9kYWxTZXJ2aWNlLm9wZW4oTW9kYWxTd2l0Y2hWaXNpdENvbXBvbmVudCk7XHJcbiAgICBtb2RhbFJlZmVyZW5jZS5jb21wb25lbnRJbnN0YW5jZS5jb250ZW50ID1cclxuICAgICAgICBcIlRoaXMgb2JqZWN0IGJlbG9uZ3MgdG8gYW5vdGhlciAzRCB2aXNpdC4gQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHN3aXRjaCB0aGUgdmlzaXQ/XCI7XHJcbiAgICBtb2RhbFJlZmVyZW5jZS5jb21wb25lbnRJbnN0YW5jZS5tb2RlbDNEID0gbW9kZWwzRDtcclxuICAgIG1vZGFsUmVmZXJlbmNlLmNvbXBvbmVudEluc3RhbmNlLnNwYWNlSUQgPSBzcGFjZUlEO1xyXG4gICAgaWYgKGRhdGFUb01vdmUpIHtcclxuICAgICAgICBtb2RhbFJlZmVyZW5jZS5jb21wb25lbnRJbnN0YW5jZS5kYXRhVG9Nb3ZlID0gZGF0YVRvTW92ZTtcclxuICAgIH1cclxuXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm4gYSBzdHJpbmcgb2YgYSBnaXZlbiBkYXRlIHRpbWUgaW4gbG9jYWwgZm9ybWF0LlxyXG4gKiBUaGUgZm9ybWF0IGlzIGRldGVybWluZWQgYnkgdGhlIGN1cnJlbnQgbGFuZ3VhZ2UuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZGF0ZVRpbWVUb0xvY2FsU3RyaW5nKFxyXG4gICAgZGF0ZTogbnVtYmVyIHwgc3RyaW5nIHwgRGF0ZSxcclxuICAgIHRyYW5zbGF0ZT86IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBtb2RlPyxcclxuKTogc3RyaW5nIHtcclxuICAgIGxldCBsYW5nID0gXCJlbi1FTlwiO1xyXG4gICAgaWYgKHRyYW5zbGF0ZSkge1xyXG4gICAgICAgIC8qKiBHZXQgY3VycmVudCBsYW5ndWFnZSAqL1xyXG4gICAgICAgIGxhbmcgPSB0cmFuc2xhdGUuY3VycmVudExhbmdcclxuICAgICAgICAgICAgPyB0cmFuc2xhdGUuY3VycmVudExhbmdcclxuICAgICAgICAgICAgOiB0cmFuc2xhdGUuZGVmYXVsdExhbmc7XHJcbiAgICAgICAgLyoqIFRyYW5zZm9ybWUgJ19mcicgdG8gJ2ZyJyAqL1xyXG4gICAgICAgIGlmIChsYW5nKSB7XHJcbiAgICAgICAgICAgIGxhbmcgPSBsYW5nLnNsaWNlKDEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgbGV0IG9wdGlvbnM6IHtcclxuICAgICAgICBtb250aD87XHJcbiAgICAgICAgeWVhcj87XHJcbiAgICAgICAgZGF5PztcclxuICAgICAgICBob3VyPztcclxuICAgICAgICBtaW51dGU/O1xyXG4gICAgICAgIHNlY29uZD87XHJcbiAgICAgICAgZGF0ZVN0eWxlPztcclxuICAgICAgICB0aW1lU3R5bGU/O1xyXG4gICAgICAgIHdlZWtkYXk/O1xyXG4gICAgICAgIHRpbWVab25lPztcclxuICAgICAgICB0aW1lWm9uZU5hbWU/O1xyXG4gICAgfTtcclxuICAgIHN3aXRjaCAobW9kZSkge1xyXG4gICAgICAgIGNhc2UgXCJkYXlfbnVtZXJpY1wiOlxyXG4gICAgICAgICAgICBvcHRpb25zID0geyBkYXk6IFwibnVtZXJpY1wiIH07XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJkYXlcIjpcclxuICAgICAgICAgICAgb3B0aW9ucyA9IHsgd2Vla2RheTogXCJsb25nXCIgfTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcImRhdGVcIjpcclxuICAgICAgICAgICAgb3B0aW9ucyA9IHsgZGF0ZVN0eWxlOiBcImxvbmdcIiB9O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwic2hvcnRfZGF0ZV90aW1lXCI6XHJcbiAgICAgICAgICAgIG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICB5ZWFyOiBcIjItZGlnaXRcIixcclxuICAgICAgICAgICAgICAgIG1vbnRoOiBcIjItZGlnaXRcIixcclxuICAgICAgICAgICAgICAgIGRheTogXCIyLWRpZ2l0XCIsXHJcbiAgICAgICAgICAgICAgICBob3VyOiBcIjItZGlnaXRcIixcclxuICAgICAgICAgICAgICAgIG1pbnV0ZTogXCIyLWRpZ2l0XCIsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJ0aW1lXCI6XHJcbiAgICAgICAgICAgIG9wdGlvbnMgPSB7IGhvdXI6IFwibnVtZXJpY1wiLCBtaW51dGU6IFwibnVtZXJpY1wiIH07XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJkYXlfdGltZV96b25lXCI6XHJcbiAgICAgICAgICAgIG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICB3ZWVrZGF5OiBcImxvbmdcIixcclxuICAgICAgICAgICAgICAgIHllYXI6IFwibnVtZXJpY1wiLFxyXG4gICAgICAgICAgICAgICAgbW9udGg6IFwibG9uZ1wiLFxyXG4gICAgICAgICAgICAgICAgZGF5OiBcIm51bWVyaWNcIixcclxuICAgICAgICAgICAgICAgIGhvdXI6IFwibnVtZXJpY1wiLFxyXG4gICAgICAgICAgICAgICAgbWludXRlOiBcIm51bWVyaWNcIixcclxuICAgICAgICAgICAgICAgIHRpbWVab25lTmFtZTogXCJzaG9ydE9mZnNldFwiLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgZGF0ZVN0eWxlOiBcImxvbmdcIixcclxuICAgICAgICAgICAgICAgIHRpbWVTdHlsZTogXCJzaG9ydFwiLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5ldyBEYXRlKGRhdGUpLnRvTG9jYWxlU3RyaW5nKGxhbmcsIG9wdGlvbnMpO1xyXG59XHJcblxyXG4vKipcclxuICogQ29tcGFyZXMgdHdvIHN0cmluZyBhcnJheXNcclxuICogQHBhcmFtIGFycmF5MVxyXG4gKiBAcGFyYW0gYXJyYXkyXHJcbiAqIEByZXR1cm5zXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlzQ29udGFpblNhbWVFbGVtZW50cyhcclxuICAgIGFycmF5MTogc3RyaW5nW10sXHJcbiAgICBhcnJheTI6IHN0cmluZ1tdLFxyXG4pOiBib29sZWFuIHtcclxuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShhcnJheTEpID09PSBKU09OLnN0cmluZ2lmeShhcnJheTIpO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFZpc2l0VXJsKGN1cnJlbnRVcmw6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBwYXRoID0gY3VycmVudFVybC5zcGxpdChcIi9cIik7XHJcbiAgICBwYXRoLnNwbGljZSgzLCBwYXRoLmxlbmd0aCAtIDIpO1xyXG4gICAgcmV0dXJuIHBhdGguam9pbihcIi9cIik7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBFeHRyYWN0IHNwYWNlSUQgZnJvbSB1cmwgd2hlbiBpbiB2aXNpdCAzRFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFNwYWNlSURGcm9tVXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHZpc2l0VXJsID0gZ2V0VmlzaXRVcmwodXJsKTtcclxuICAgIHJldHVybiB2aXNpdFVybC5zcGxpdChcIi9cIilbMl07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBEb3dubG9hZCByZWxhdGVkXHJcbiAqL1xyXG5pbXBvcnQgRmlsZVNhdmVyIGZyb20gXCJmaWxlLXNhdmVyXCI7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZG93bmxvYWRGaWxlKGZpbGVVcmw6IHN0cmluZywgZmlsZU5hbWU6IHN0cmluZykge1xyXG4gICAgRmlsZVNhdmVyLnNhdmVBcyhmaWxlVXJsICsgZmlsZU5hbWUsIGZpbGVOYW1lKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG9wZW5Eb2N1bWVudChmaWxlVXJsOiBzdHJpbmcsIGZpbGVOYW1lOiBzdHJpbmcsIGlkOiBudW1iZXIpIHtcclxuICAgIHdpbmRvdy5vcGVuKGAke2ZpbGVVcmwgKyBmaWxlTmFtZX0jZG9jPSR7aWR9YCwgXCJfYmxhbmtcIiwgXCJcIik7XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBkb3dubG9hZEVxdWlwbWVudERvY3VtZW50ID0gYXN5bmMgKFxyXG4gICAgZG9jdW1lbnRfOiBFcXVpcG1lbnREb2N1bWVudCxcclxuKTogUHJvbWlzZTxPYmplY3QgfCB2b2lkPiA9PiB7XHJcbiAgICBjb25zdCBzaWduZWRGaWxlID0gYXdhaXQgZG93bmxvYWRGaWxlQXNPYmplY3QoZG9jdW1lbnRfLnVybCk7XHJcbiAgICBpZiAoc2lnbmVkRmlsZSkge1xyXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICBkb3dubG9hZEJsb2Ioc2lnbmVkRmlsZS5Cb2R5LCBkb2N1bWVudF8uZmlsZW5hbWUpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNoZWNrRWxlbWVudEJ5SWQoc2VsZWN0b3IpIHtcclxuICAgIGxldCBxdWVyeVNlbGVjdG9yID0gbnVsbDtcclxuICAgIHdoaWxlIChxdWVyeVNlbGVjdG9yID09PSBudWxsKSB7XHJcbiAgICAgICAgYXdhaXQgcmFmQXN5bmMoKTtcclxuICAgICAgICBxdWVyeVNlbGVjdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc2VsZWN0b3IpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHF1ZXJ5U2VsZWN0b3I7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJhZkFzeW5jKCkge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHJlc29sdmUpOyAvLyBmYXN0ZXIgdGhhbiBzZXQgdGltZSBvdXRcclxuICAgIH0pO1xyXG59XHJcblxyXG4vKiBAcGFyYW0ge0FycmF5fSBudW1iZXJzIEFuIGFycmF5IG9mIG51bWJlcnMuXHJcbiAqIEByZXR1cm4ge051bWJlcn0gVGhlIGNhbGN1bGF0ZWQgYXZlcmFnZSAob3IgbWVhbikgdmFsdWUgZnJvbSB0aGUgc3BlY2lmaWVkXHJcbiAqICAgICBudW1iZXJzLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIG1lYW4obnVtYmVyczogbnVtYmVyW10pIHtcclxuICAgIGxldCB0b3RhbCA9IDA7XHJcbiAgICBmb3IgKGNvbnN0IG51bWJlciBvZiBudW1iZXJzKSB7XHJcbiAgICAgICAgdG90YWwgKz0gbnVtYmVyO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRvdGFsIC8gbnVtYmVycy5sZW5ndGg7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0VGltZXN0YW1wVG9Mb2NhbFpvbmUodGltZXN0YW1wOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgY29uc3Qgc2VsZWN0ZWREYXRlID0gbmV3IERhdGUodGltZXN0YW1wKTtcclxuICAgIGNvbnN0IGxvY2FsT2Zmc2V0ID0gLTEgKiBzZWxlY3RlZERhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwMDAwO1xyXG4gICAgY29uc3Qgc3RhbXAgPSB0aW1lc3RhbXAgKyBsb2NhbE9mZnNldDtcclxuICAgIHJldHVybiBzdGFtcDtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJldHVybiBzdHJpbmcgZm9yIHBlcmlvZCBvZiB0aW1lLiBQYXJhbWV0ZXJzIGFyZSBEYXRlVGltZSBvYmplY3RzIG9mIGx1eG9uIGxpYnJhcnkuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNsYXRlRGF0ZVBlcmlvZChcclxuICAgIHRyYW5zbGF0ZVNlcnZpY2U6IGFueSxcclxuICAgIGRhdGVTdGFydFBlcmlvZDogYW55LFxyXG4gICAgZGF0ZUVuZFBlcmlvZDogYW55LFxyXG4pOiBzdHJpbmcge1xyXG4gICAgY29uc3QgbG9jYWxlID0gZ2V0TG9jYWxlTG9uZyh0cmFuc2xhdGVTZXJ2aWNlKTtcclxuICAgIHJldHVybiBgJHtkYXRlU3RhcnRQZXJpb2QudG9Mb2NhbGVTdHJpbmcoe1xyXG4gICAgICAgIGxvY2FsZSxcclxuICAgICAgICBtb250aDogXCJsb25nXCIsXHJcbiAgICAgICAgZGF5OiBcIjItZGlnaXRcIixcclxuICAgIH0pfSAtICR7ZGF0ZUVuZFBlcmlvZC50b0xvY2FsZVN0cmluZyh7XHJcbiAgICAgICAgbG9jYWxlLFxyXG4gICAgICAgIG1vbnRoOiBcImxvbmdcIixcclxuICAgICAgICBkYXk6IFwiMi1kaWdpdFwiLFxyXG4gICAgfSl9IGA7XHJcbn1cclxuXHJcblxyXG4vKipcclxuKiBSZXR1cm4gbG9jYWwgaW4gdGhlIGNhbm9uaWNhbCBmb3JtOiBcImVuLUdCXCIsIFwiZnItRlJcIlxyXG4qL1xyXG5leHBvcnQgZnVuY3Rpb24gZ2V0TG9jYWxlTG9uZyh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UpOiBzdHJpbmcge1xyXG4gICAgbGV0IGxhbmcgPSB0cmFuc2xhdGUuY3VycmVudExhbmdcclxuICAgICAgICA/IHRyYW5zbGF0ZS5jdXJyZW50TGFuZ1xyXG4gICAgICAgIDogdHJhbnNsYXRlLmRlZmF1bHRMYW5nO1xyXG5cclxuICAgIC8qKiBUcmFuc2Zvcm0gJ19mcicgdG8gJ2ZyJyAqL1xyXG4gICAgbGFuZyA9IGxhbmcuc2xpY2UoMSk7XHJcbiAgICBpZiAobGFuZyA9PT0gXCJlblwiKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiZW4tR0JcIjtcclxuICAgIH1cclxuICAgIHJldHVybiBgJHtsYW5nfS0ke2xhbmcudG9VcHBlckNhc2UoKX1gO1xyXG59XHJcblxyXG4vKipcclxuICogUmV0dXJuIGxvY2FsIGluIHRoZSBzaG9ydCBmb3JtOiBcImVuXCIsIFwiZnJcIlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGdldExvY2FsZVNob3J0KHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSk6IHN0cmluZyB7XHJcbiAgICBsZXQgbGFuZyA9IHRyYW5zbGF0ZS5jdXJyZW50TGFuZ1xyXG4gICAgICAgID8gdHJhbnNsYXRlLmN1cnJlbnRMYW5nXHJcbiAgICAgICAgOiB0cmFuc2xhdGUuZGVmYXVsdExhbmc7XHJcblxyXG4gICAgLyoqIFRyYW5zZm9ybSAnX2ZyJyB0byAnZnInICovXHJcbiAgICBsYW5nID0gbGFuZy5zbGljZSgxKTtcclxuICAgIHJldHVybiBsYW5nO1xyXG59XHJcblxyXG4vKipcclxuICogRm9ybWF0IHN0cmluZyB0byBsb3dlcmNhc2UsIG5vIHNwYWNlc1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ1RvTG93ZXJjYXNlTm9TcGFjZXMoaW5wdXQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCB3b3JkcyA9IGlucHV0LnRvTG93ZXJDYXNlKCkuc3BsaXQoL1xccysvKTtcclxuICAgIHJldHVybiB3b3Jkcy5qb2luKFwiXCIpO1xyXG59XHJcblxyXG4vKipcclxuICogVGVzdCBpZiB0aGUgb2JqZWN0ID09PSB7fVxyXG4gKiBAcGFyYW0gb2JqIG9iamVjdCB7a2V5OnZhbHVlfVxyXG4gKiBAcmV0dXJucyBib29sZWFuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNFbXB0eU9iamVjdChvYmplY3QpOiBib29sZWFuIHtcclxuICAgIGZvciAoY29uc3QgeCBpbiBvYmplY3QpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNodWZmbGVBcnJheShhcnJheTogYW55W10pIHtcclxuICAgIGNvbnN0IG5ld0FycmF5ID0gWy4uLmFycmF5XTtcclxuICAgIGZvciAobGV0IGluZGV4ID0gYXJyYXkubGVuZ3RoIC0gMTsgaW5kZXggPiAwOyBpbmRleC0tKSB7XHJcbiAgICAgICAgY29uc3QgaW5kZXhOZXcgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAoaW5kZXggKyAxKSk7XHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXHJcbiAgICAgICAgW25ld0FycmF5W2luZGV4XSwgbmV3QXJyYXlbaW5kZXhOZXddXSA9IFtcclxuICAgICAgICAgICAgbmV3QXJyYXlbaW5kZXhOZXddLFxyXG4gICAgICAgICAgICBuZXdBcnJheVtpbmRleF0sXHJcbiAgICAgICAgXTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZXdBcnJheTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG51bWJlclRvRGF0ZVN0cmluZyh0aW1lc3RhbXA6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBjb25zdCBqc0RhdGUgPSBuZXcgRGF0ZSh0aW1lc3RhbXApO1xyXG4gICAgcmV0dXJuIGpzRGF0ZS50b0xvY2FsZVN0cmluZyhcImZyLUZSXCIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZHVyYXRpb25Ub1N0cmluZyhcclxuICAgIGR1cmF0aW9uOiBudW1iZXIsXHJcbiAgICB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbik6IHN0cmluZyB7XHJcbiAgICBjb25zdCBkYXlzID0gTWF0aC5mbG9vcihkdXJhdGlvbiAvIDM2MDAgLyAyNCk7XHJcbiAgICBjb25zdCBob3VycyA9IE1hdGguZmxvb3IoKGR1cmF0aW9uIC0gZGF5cyAqIDI0ICogMzYwMCkgLyAzNjAwKTtcclxuICAgIGNvbnN0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKChkdXJhdGlvbiAlIDM2MDApIC8gNjApO1xyXG4gICAgY29uc3Qgc2Vjb25kcyA9IE1hdGguZmxvb3IoZHVyYXRpb24gJSA2MCk7XHJcblxyXG4gICAgY29uc3QgZGF5c1N0cmluZyA9IHRyYW5zbGF0ZS5pbnN0YW50KFwiZGF5KHMpXCIpO1xyXG4gICAgY29uc3QgaG91cnNTdHJpbmcgPSB0cmFuc2xhdGUuaW5zdGFudChcImhvdXIocylcIik7XHJcbiAgICBjb25zdCBvbmVIb3VyU3RyaW5nID0gdHJhbnNsYXRlLmluc3RhbnQoXCJob3VyXCIpO1xyXG4gICAgY29uc3QgbWludXRlc1N0cmluZyA9IHRyYW5zbGF0ZS5pbnN0YW50KFwibWludXRlKHMpXCIpO1xyXG4gICAgY29uc3Qgc2Vjb25kc1N0cmluZyA9IHRyYW5zbGF0ZS5pbnN0YW50KFwic2Vjb25kKHMpXCIpO1xyXG5cclxuICAgIGlmIChkdXJhdGlvbiA+IDM2MDAgKiAyNCAqIDcpIHtcclxuICAgICAgICByZXR1cm4gYCR7ZGF5c30gJHtkYXlzU3RyaW5nfWA7XHJcbiAgICB9XHJcbiAgICBpZiAoZHVyYXRpb24gPiAzNjAwICogMjQpIHtcclxuICAgICAgICByZXR1cm4gYCR7ZGF5c30gJHtkYXlzU3RyaW5nfSAke2hvdXJzfSAke2hvdXJzU3RyaW5nfWA7XHJcbiAgICB9XHJcbiAgICBpZiAoZHVyYXRpb24gPT09IDM2MDApIHtcclxuICAgICAgICByZXR1cm4gYCR7aG91cnN9ICR7b25lSG91clN0cmluZ31gO1xyXG4gICAgfVxyXG4gICAgaWYgKGR1cmF0aW9uID4gMzYwMCkge1xyXG4gICAgICAgIGlmIChtaW51dGVzID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBgJHtob3Vyc30gJHtob3Vyc1N0cmluZ31gO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYCR7aG91cnN9ICR7aG91cnNTdHJpbmd9ICR7bWludXRlc30gJHttaW51dGVzU3RyaW5nfWA7XHJcbiAgICB9XHJcbiAgICBpZiAoZHVyYXRpb24gPj0gNjApIHtcclxuICAgICAgICBpZiAoc2Vjb25kcyA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gYCR7bWludXRlc30gJHttaW51dGVzU3RyaW5nfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBgJHttaW51dGVzfSAke21pbnV0ZXNTdHJpbmd9ICR7c2Vjb25kc30gJHtzZWNvbmRzU3RyaW5nfWA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYCR7c2Vjb25kc30gJHtzZWNvbmRzU3RyaW5nfWA7XHJcbn1cclxuXHJcblxyXG4iXX0=
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Injectable } from "@angular/core";
|
|
2
2
|
import { Subject } from "rxjs";
|
|
3
|
-
import { removeNullKeysFromObject,
|
|
3
|
+
import { removeNullKeysFromObject, wait, waitUntil } from "../helpers.service";
|
|
4
4
|
import { LevelStatus } from "../types.service";
|
|
5
5
|
import { uploadJsonToS3, uploadBase64Image, removeAllFilesFromFolderS3 } from "./s3.service";
|
|
6
6
|
import * as i0 from "@angular/core";
|
|
@@ -46,11 +46,6 @@ export class MatterportImportService {
|
|
|
46
46
|
}
|
|
47
47
|
this.viewerService.setTourUrl(modelID);
|
|
48
48
|
const url = this.viewerService.getTourUrl();
|
|
49
|
-
const modelExists = await urlExists(url);
|
|
50
|
-
console.log(modelExists);
|
|
51
|
-
if (!modelExists) {
|
|
52
|
-
throw new Error("Model 3D does not exist");
|
|
53
|
-
}
|
|
54
49
|
iframe.setAttribute("src", url);
|
|
55
50
|
iframe.allow = "xr-spatial-tracking";
|
|
56
51
|
iframe.height = "100%";
|
|
@@ -333,4 +328,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
|
|
|
333
328
|
providedIn: "root",
|
|
334
329
|
}]
|
|
335
330
|
}], ctorParameters: function () { return [{ type: i1.NavigationService }, { type: i2.ZoneService }, { type: i3.ViewerService }, { type: i4.LayerService }, { type: i5.BaseUserService }, { type: i6.PlanService }]; } });
|
|
336
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0dGVycG9ydC1pbXBvcnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zbWFydGVycGxhbi1jb3JlL3NyYy9saWIvc2VydmljZXMvbWF0dGVycG9ydC1pbXBvcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFFLHdCQUF3QixFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDMUYsT0FBTyxFQUFFLFdBQVcsRUFBdUMsTUFBTSxrQkFBa0IsQ0FBQztBQUtwRixPQUFPLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLDBCQUEwQixFQUFFLE1BQU0sY0FBYyxDQUFDOzs7Ozs7OztBQU83RixNQUFNLE9BQU8sdUJBQXVCO0lBdUNoQyxZQUNZLGlCQUFvQyxFQUNwQyxXQUF3QixFQUN4QixhQUE0QixFQUM1QixZQUEwQixFQUMxQixXQUE0QixFQUM1QixXQUF3QjtRQUx4QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLGdCQUFXLEdBQVgsV0FBVyxDQUFpQjtRQUM1QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQWQ3QixTQUFJLEdBQUcsS0FBSyxDQUFDO1FBRWIsb0JBQWUsR0FBcUIsSUFBSSxPQUFPLEVBQVcsQ0FBQztRQUUzRCx3QkFBbUIsR0FBb0IsSUFBSSxPQUFPLEVBQVUsQ0FBQztRQUU3RCxxQkFBZ0IsR0FBb0IsSUFBSSxPQUFPLEVBQVUsQ0FBQztJQVM3RCxDQUFDO0lBL0JMLElBQVcs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QkFIbkMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgcmVqZWN0cyB9IGZyb20gXCJhc3NlcnRcIjtcclxuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCJkbnNcIjtcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IHJlbW92ZU51bGxLZXlzRnJvbU9iamVjdCwgdXJsRXhpc3RzLCB3YWl0LCB3YWl0VW50aWwgfSBmcm9tIFwiLi4vaGVscGVycy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IExldmVsU3RhdHVzLCBMYXllciwgTm9kZSwgWm9uZSwgTmF2aWdhdGlvbiwgUGxhbiB9IGZyb20gXCIuLi90eXBlcy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IExheWVyU2VydmljZSB9IGZyb20gXCIuL21vZGVscy9sYXllci5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IE5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4vbW9kZWxzL25hdmlnYXRpb24uc2VydmljZVwiO1xyXG5pbXBvcnQgeyBQbGFuU2VydmljZSB9IGZyb20gXCIuL21vZGVscy9wbGFuLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgWm9uZVNlcnZpY2UgfSBmcm9tIFwiLi9tb2RlbHMvem9uZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IHVwbG9hZEpzb25Ub1MzLCB1cGxvYWRCYXNlNjRJbWFnZSwgcmVtb3ZlQWxsRmlsZXNGcm9tRm9sZGVyUzMgfSBmcm9tIFwiLi9zMy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEJhc2VVc2VyU2VydmljZSB9IGZyb20gXCIuL3VzZXIuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBWaWV3ZXJTZXJ2aWNlIH0gZnJvbSBcIi4vdmlld2VyLnNlcnZpY2VcIjtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46IFwicm9vdFwiLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTWF0dGVycG9ydEltcG9ydFNlcnZpY2Uge1xyXG4gICAgcHJpdmF0ZSBjdXJyZW50RnJhbWU7XHJcblxyXG4gICAgcHVibGljIHNkazogYW55O1xyXG5cclxuICAgIHByaXZhdGUgc3dlZXBzOiBPYmplY3Q7XHJcblxyXG4gICAgcHVibGljIGZsb29yczogT2JqZWN0O1xyXG5cclxuICAgIHByaXZhdGUgY3VycmVudEZsb29yO1xyXG5cclxuICAgIHByaXZhdGUgX21vZGVsSUQ6IHN0cmluZztcclxuXHJcbiAgICBwcml2YXRlIF9zcGFjZUlEOiBzdHJpbmc7XHJcblxyXG4gICAgcHVibGljIGdldCBzcGFjZUlEKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NwYWNlSUQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldCBzcGFjZUlEKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLl9zcGFjZUlEID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBtb2RlbElEKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21vZGVsSUQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldCBtb2RlbElEKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLl9tb2RlbElEID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0b3AgPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgaW1wb3J0aW5nSW1hZ2VzOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuXHJcbiAgICBwdWJsaWMgc3dlZXBQcm9jZXNzZWRDb3VudDogU3ViamVjdDxudW1iZXI+ID0gbmV3IFN1YmplY3Q8bnVtYmVyPigpO1xyXG5cclxuICAgIHB1YmxpYyB0b3RhbFN3ZWVwc0NvdW50OiBTdWJqZWN0PG51bWJlcj4gPSBuZXcgU3ViamVjdDxudW1iZXI+KCk7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBuYXZpZ2F0aW9uU2VydmljZTogTmF2aWdhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSB6b25lU2VydmljZTogWm9uZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSB2aWV3ZXJTZXJ2aWNlOiBWaWV3ZXJTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbGF5ZXJTZXJ2aWNlOiBMYXllclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSB1c2VyU2VydmljZTogQmFzZVVzZXJTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcGxhblNlcnZpY2U6IFBsYW5TZXJ2aWNlLFxyXG4gICAgKSB7IH1cclxuXHJcbiAgICBhc3luYyBpbml0U2RrRm9yTW9kZWwobW9kZWxJRDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgdGhpcy5zdG9wID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8vIExvYWQgU0RLXHJcbiAgICAgICAgY29uc29sZS5sb2coXCJMb2FkaW5nIE1hdHRlcnBvcnQgU0RLXCIpO1xyXG4gICAgICAgIHRoaXMubW9kZWxJRCA9IG1vZGVsSUQ7XHJcbiAgICAgICAgY29uc3QgaWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlmcmFtZVwiKTtcclxuICAgICAgICBpZiAoIWlmcmFtZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgY3JlYXRlIGlmcmFtZVwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy52aWV3ZXJTZXJ2aWNlLnNldFRvdXJVcmwobW9kZWxJRCk7XHJcbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy52aWV3ZXJTZXJ2aWNlLmdldFRvdXJVcmwoKTtcclxuICAgICAgICBjb25zdCBtb2RlbEV4aXN0cyA9IGF3YWl0IHVybEV4aXN0cyh1cmwpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKG1vZGVsRXhpc3RzKTtcclxuICAgICAgICBpZiAoIW1vZGVsRXhpc3RzKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1vZGVsIDNEIGRvZXMgbm90IGV4aXN0XCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZnJhbWUuc2V0QXR0cmlidXRlKFwic3JjXCIsIHVybCk7XHJcbiAgICAgICAgaWZyYW1lLmFsbG93ID0gXCJ4ci1zcGF0aWFsLXRyYWNraW5nXCI7XHJcbiAgICAgICAgaWZyYW1lLmhlaWdodCA9IFwiMTAwJVwiO1xyXG4gICAgICAgIGlmcmFtZS53aWR0aCA9IFwiMTAwJVwiO1xyXG4gICAgICAgIGlmcmFtZS5pZCA9IFwidmlld2VyLW1vZHVsZVwiO1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI3ZpZXdlci1mcmFtZVwiKTtcclxuICAgICAgICBlbGVtZW50LmFwcGVuZChpZnJhbWUpO1xyXG4gICAgICAgIHRoaXMuY3VycmVudEZyYW1lID0gaWZyYW1lO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICAgICAgdGhpcy5zZGsgPSBhd2FpdCB3aW5kb3cuTVBfU0RLLmNvbm5lY3QoXHJcbiAgICAgICAgICAgICAgICBpZnJhbWUsIFwicW45d3Nhc3V5NWgyZnpyYnJuMW56cjBpZFwiLCBcIjMuMTFcIlxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAvLyBTdWJzY3JpYmUgdG8gRmxvb3IgZGF0YVxyXG4gICAgICAgICAgICB0aGlzLnNkay5GbG9vci5kYXRhLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICBvbkNvbGxlY3Rpb25VcGRhdGVkOiBmdW5jdGlvbiB1cGQoY29sbGVjdGlvbjogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJGbG9vcnNcIiwgY29sbGVjdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mbG9vcnMgPSBjb2xsZWN0aW9uO1xyXG4gICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgLy8gU3Vic2NyaWJlIHRvIGN1cnJlbnQgRmxvb3JcclxuICAgICAgICAgICAgdGhpcy5zZGsuRmxvb3IuY3VycmVudC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiB1cGQoY3VycmVudEZsb29yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Rmxvb3IgPSBjdXJyZW50Rmxvb3I7XHJcbiAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAvLyBTdWJzY3JpYmUgdG8gU3dlZXAgZGF0YVxyXG4gICAgICAgICAgICB0aGlzLnNkay5Td2VlcC5kYXRhLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICBvbkNvbGxlY3Rpb25VcGRhdGVkOiBmdW5jdGlvbiB1cGQoY29sbGVjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcInRoZSBlbnRpcmUgdXAtdG8tZGF0ZSBjb2xsZWN0aW9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN3ZWVwcyA9IGNvbGxlY3Rpb247XHJcbiAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAvLyByZW1vdmUgbGFiZWxzXHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc2RrLlNldHRpbmdzLnVwZGF0ZShcImxhYmVsc1wiLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIGxldCB0aW1lb3V0RXhwaXJlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAvLyBzdGFydCB0aW1lb3V0XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGltZW91dEV4cGlyZWQgPSB0cnVlLCA1MDAwKTtcclxuICAgICAgICAgICAgYXdhaXQgd2FpdFVudGlsKCgpID0+ICh0aGlzLnN3ZWVwcyAhPT0gdW5kZWZpbmVkICYmIHRoaXMuZmxvb3JzICE9PSB1bmRlZmluZWQpIHx8IHRpbWVvdXRFeHBpcmVkID09PSB0cnVlKTtcclxuICAgICAgICAgICAgaWYgKHRpbWVvdXRFeHBpcmVkKSB7XHJcbiAgICAgICAgICAgICAgICAvLyB3ZSBhcmUgbGlrZWx5IGluIG1hdHRlcnBvcnQgZXJyb3IgY2FzZSAodGhhdCB3ZSBjYW5ub3QgY2F0Y2ghKVxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJ0aW1lb3V0IGludGlhbGlzaW5nIE1hdHRlcnBvcnRcIik7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJlcnJvciBpbml0IE1hdHRlcnBvcnRcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJpbml0IGRvbmVcIik7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImVycm9yIGluaXQgTWF0dGVycG9ydFwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgaW1wb3J0RGF0YShcclxuICAgICAgICBzcGFjZUlEOiBzdHJpbmcsXHJcbiAgICAgICAgc3VyZmFjZTogbnVtYmVyLFxyXG4gICAgICAgIHJlbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlLFxyXG4gICAgICAgIG5vZGU6IE5vZGUgPSBudWxsLFxyXG4gICAgKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgdGhpcy5zcGFjZUlEID0gc3BhY2VJRDtcclxuICAgICAgICBpZiAoIXRoaXMuc3dlZXBzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJubyBzd2VlcHMgaW5pdGlhbGl6ZWRcIikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgZmxvb3Jab25lczogWm9uZVtdID0gW107XHJcbiAgICAgICAgY29uc3Qgem9uZXMgPSBhd2FpdCB0aGlzLnpvbmVTZXJ2aWNlLmdldFpvbmVzQnlTcGFjZShzcGFjZUlEKTtcclxuICAgICAgICBjb25zdCBtYWluWm9uZSA9IHpvbmVzLmZpbmQoKHopID0+ICF6LnBhcmVudElEKTtcclxuICAgICAgICBpZiAoIW1haW5ab25lKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJtaXNzaW5nIGRhdGEgKG5vIG1haW4gQnVpbGRpbmcgWm9uZSlcIikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zb2xlLmxvZyhcImltcG9ydGluZyBkYXRhIGZyb20gbWF0dGVycG9ydFwiKTtcclxuICAgICAgICBsZXQgYXBwSXNMb2FkZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNkay5BcHAuc3RhdGUuc3Vic2NyaWJlKGZ1bmN0aW9uIChhcHBTdGF0ZSkge1xyXG4gICAgICAgICAgICAvLyBhcHAgc3RhdGUgaGFzIGNoYW5nZWRcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ1RoZSBjdXJyZW50IHBoYXNlOiAnLCBhcHBTdGF0ZS5waGFzZSk7XHJcbiAgICAgICAgICAgIGlmIChhcHBTdGF0ZS5waGFzZSA9PT0gXCJhcHBwaGFzZS5wbGF5aW5nXCIpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdUaGUgYXBwIGlzIHBsYXlpbmcnKTtcclxuICAgICAgICAgICAgICAgIGFwcElzTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGF3YWl0IHdhaXRVbnRpbCgoKSA9PiBhcHBJc0xvYWRlZCA9PT0gdHJ1ZSk7XHJcbiAgICAgICAgLy8gc2F2ZSBzd2VlcHMgZGF0YSBhcyBqc29uXHJcbiAgICAgICAgY29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KE9iamVjdC52YWx1ZXModGhpcy5zd2VlcHMpKTtcclxuICAgICAgICBhd2FpdCB1cGxvYWRKc29uVG9TMyhcclxuICAgICAgICAgICAgYHZpc2l0cy8ke3RoaXMubW9kZWxJRH0vaW52ZW50b3J5L2AsXHJcbiAgICAgICAgICAgIGpzb24sXHJcbiAgICAgICAgICAgIFwiZGF0YS5qc29uXCIsXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAocmVsb2FkaW5nKSB7XHJcbiAgICAgICAgICAgIC8vIHBlcmZvcm0gb25seSAzNjAgaW1wb3J0IHNpbmNlIHdlIGFyZSByZWxvYWRpbmdcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5pbXBvcnQzNjBpbWFnZXMoKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJhZnRlciByZWxvYWRpbmdcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNoZWNrIGxheWVyIG9mIGJ1aWxkaW5nIHR5cGVcclxuICAgICAgICBjb25zdCBsYXllckJ1aWxkaW5nID0gYXdhaXQgdGhpcy5nZXRMYXllckJ5TmFtZShcIkJVSUxESU5HXCIpO1xyXG4gICAgICAgIGNvbnN0IGNyZWF0ZWREZWZhdWx0Wm9uZSA9IGF3YWl0IHRoaXMuY3JlYXRlWm9uZShcclxuICAgICAgICAgICAgbm9kZS5tZXRhZGF0YSxcclxuICAgICAgICAgICAgbGF5ZXJCdWlsZGluZy5pZCxcclxuICAgICAgICAgICAgc3VyZmFjZSxcclxuICAgICAgICAgICAgbWFpblpvbmUuaWQsXHJcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMuc3dlZXBzKSxcclxuICAgICAgICAgICAgbm9kZSxcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmICghY3JlYXRlZERlZmF1bHRab25lKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5mbG9vcnMpIHtcclxuICAgICAgICAgICAgZmxvb3Jab25lcyA9IGF3YWl0IHRoaXMuaW1wb3J0Rmxvb3JEYXRhKFxyXG4gICAgICAgICAgICAgICAgY3JlYXRlZERlZmF1bHRab25lLmlkLFxyXG4gICAgICAgICAgICAgICAgbm9kZSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coZmxvb3Jab25lcyk7XHJcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMuc3dlZXBzKS5tYXAoYXN5bmMgKGtleSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3dlZXBJbmZvID0gdGhpcy5zd2VlcHNba2V5XTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5hdmlnYXRpb25JbnB1dCA9IHtcclxuICAgICAgICAgICAgICAgICAgICBtYXR0ZXJwb3J0U3dlZXBJRDogc3dlZXBJbmZvLnV1aWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IEpTT04uc3RyaW5naWZ5KHN3ZWVwSW5mby5wb3NpdGlvbiksXHJcbiAgICAgICAgICAgICAgICAgICAgcm90YXRpb246IEpTT04uc3RyaW5naWZ5KHN3ZWVwSW5mby5yb3RhdGlvbiksXHJcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6IExldmVsU3RhdHVzLkxPVyxcclxuICAgICAgICAgICAgICAgICAgICBub2RlSUQ6IG5vZGUuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgc3BhY2VJRCxcclxuICAgICAgICAgICAgICAgIH0gYXMgTmF2aWdhdGlvbjtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5hdiA9IGF3YWl0IHRoaXMubmF2aWdhdGlvblNlcnZpY2UuY3JlYXRlTmF2aWdhdGlvbihcclxuICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0aW9uSW5wdXQsXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFuYXYpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJjb3VsZCBjcmVhdGUgbmF2aWdhdGlvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0aW9uSW5wdXQuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgICAgICBhd2FpdCB0aGlzLmltcG9ydDM2MGltYWdlcygpO1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNyZWF0ZVpvbmUoXHJcbiAgICAgICAgbmFtZTogc3RyaW5nLFxyXG4gICAgICAgIGxheWVySUQ6IHN0cmluZyxcclxuICAgICAgICBzdXJmYWNlOiBudW1iZXIgPSBudWxsLFxyXG4gICAgICAgIHBhcmVudElEOiBzdHJpbmcgPSBudWxsLFxyXG4gICAgICAgIHN3ZWVwczogc3RyaW5nW10gPSBbXSxcclxuICAgICAgICBub2RlOiBOb2RlID0gbnVsbCxcclxuICAgICAgICBtZXRhZGF0YTogc3RyaW5nID0gbnVsbCxcclxuICAgICk6IFByb21pc2U8Wm9uZT4ge1xyXG4gICAgICAgIGNvbnN0IHpvbmVJbnB1dCA9IHtcclxuICAgICAgICAgICAgbmFtZSxcclxuICAgICAgICAgICAgc3BhY2VJRDogdGhpcy5zcGFjZUlELFxyXG4gICAgICAgICAgICBsYXllcklELFxyXG4gICAgICAgICAgICBzd2VlcElEczogc3dlZXBzLFxyXG4gICAgICAgICAgICBub2RlSURzOiBub2RlID8gW25vZGUuaWRdIDogbnVsbCxcclxuICAgICAgICB9IGFzIFpvbmU7XHJcbiAgICAgICAgcmVtb3ZlTnVsbEtleXNGcm9tT2JqZWN0KHpvbmVJbnB1dCk7XHJcbiAgICAgICAgaWYgKHN1cmZhY2UpIHtcclxuICAgICAgICAgICAgem9uZUlucHV0LnN1cmZhY2UgPSBzdXJmYWNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocGFyZW50SUQpIHtcclxuICAgICAgICAgICAgem9uZUlucHV0LnBhcmVudElEID0gcGFyZW50SUQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtZXRhZGF0YSkge1xyXG4gICAgICAgICAgICB6b25lSW5wdXQubWV0YWRhdGEgPSBtZXRhZGF0YTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbmV3TG9jYWwgPSBhd2FpdCB0aGlzLnpvbmVTZXJ2aWNlLmNyZWF0ZSh6b25lSW5wdXQpO1xyXG4gICAgICAgIHJldHVybiBuZXdMb2NhbDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBpbXBvcnQzNjBpbWFnZXMoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJJbXBvcnRpbmcgMzYwIGltYWdlc1wiKTtcclxuICAgICAgICB0aGlzLmltcG9ydGluZ0ltYWdlcy5uZXh0KHRydWUpO1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBzY2FucyA9IE9iamVjdC52YWx1ZXModGhpcy5zd2VlcHMpO1xyXG4gICAgICAgICAgICBsZXQgbWF4U2NhbjtcclxuICAgICAgICAgICAgbGV0IGluZGV4U2NhbjtcclxuICAgICAgICAgICAgY29uc3Qgbm1iU2NhbnMgPSBPYmplY3Qua2V5cyhzY2FucykubGVuZ3RoO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIlRvdGFsIG51bWJlciBvZiBzY2FuIHBvaW50cyA6XCIsIG5tYlNjYW5zKTtcclxuICAgICAgICAgICAgdGhpcy50b3RhbFN3ZWVwc0NvdW50Lm5leHQobm1iU2NhbnMpO1xyXG4gICAgICAgICAgICAvLyBjaGVjayBpZiB3ZSBzdGFydGVkIHRvIGxvYWQgaW1hZ2VzIGFscmVhZHlcclxuICAgICAgICAgICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiaW5kZXhTY2FuTG9hZFwiKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgICAgICAgICAgICAgXCJyZXRha2luZyBpbXBvcnQgZnJvbSBzY2FuXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJpbmRleFNjYW5Mb2FkXCIpLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGluZGV4U2NhbiA9ICtsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImluZGV4U2NhbkxvYWRcIik7XHJcbiAgICAgICAgICAgICAgICBubWJTY2FucyA8IGluZGV4U2NhbiArIDUwXHJcbiAgICAgICAgICAgICAgICAgICAgPyAobWF4U2NhbiA9IG5tYlNjYW5zKVxyXG4gICAgICAgICAgICAgICAgICAgIDogKG1heFNjYW4gPSBpbmRleFNjYW4gKyA1MCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpbmRleFNjYW4gPSAwO1xyXG4gICAgICAgICAgICAgICAgbm1iU2NhbnMgPCA1MCA/IChtYXhTY2FuID0gbm1iU2NhbnMpIDogKG1heFNjYW4gPSA1MCk7XHJcbiAgICAgICAgICAgICAgICBtYXhTY2FuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IGluZGV4U2NhbjsgaW5kZXggPCBtYXhTY2FuOyBpbmRleCArPSAxKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc3RvcCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2RrLlN3ZWVwLm1vdmVUbyhzY2Fuc1tpbmRleF0udXVpZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zZGsuQ2FtZXJhLnNldFJvdGF0aW9uKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgeDogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgeTogMCxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbWcgPSBhd2FpdCB0aGlzLnNkay5SZW5kZXJlci50YWtlRXF1aXJlY3Rhbmd1bGFyKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7IHdpZHRoOiAyMDQ4LCBoZWlnaHQ6IDEwMjQgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgeyBtYXR0ZXJ0YWdzOiBmYWxzZSwgc3dlZXBzOiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB1cGxvYWRCYXNlNjRJbWFnZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzY2Fuc1tpbmRleF0udXVpZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYHZpc2l0cy8ke3RoaXMubW9kZWxJRH0vc3dlZXBzL2AsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwic3dlZXBcIixcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3dlZXBQcm9jZXNzZWRDb3VudC5uZXh0KGluZGV4KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJpbmRleFNjYW5Mb2FkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUFsbEZpbGVzRnJvbUZvbGRlclMzKGB2aXNpdHMvJHt0aGlzLm1vZGVsSUR9L3N3ZWVwc2ApO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQWJhbmRvbmluZyBpbXBvcnQgYmVhY3VzZSBpdCB3YXMgY2FuY2VsbGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXhTY2FuID09PSBubWJTY2Fucykge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJJbXBvcnQgMzYwIGRvbmVcIik7XHJcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcImluZGV4U2NhbkxvYWRcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUZyYW1lKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3AgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5zdG9wKSB7XHJcbiAgICAgICAgICAgICAgICAvLyB0byByZXN0YXJ0IHRoZSBwcm9jZWR1cmUgZnJvbSB3aGVyZSB3ZSBsZWZ0IG9mXHJcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImluZGV4U2NhbkxvYWRcIiwgbWF4U2Nhbi50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRnJhbWUoKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuaW5pdFNka0Zvck1vZGVsKHRoaXMubW9kZWxJRCk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmltcG9ydERhdGEodGhpcy5zcGFjZUlELCAwLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBtb3ZlVG9GbG9vcihmbG9vck5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIC8vIGJ5IG5hbWVcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhmbG9vck5hbWUpO1xyXG4gICAgICAgIGxldCBmbG9vck1hdHRlcnBvcnQgPSBPYmplY3QudmFsdWVzKHRoaXMuZmxvb3JzKS5maW5kKFxyXG4gICAgICAgICAgICAoZmxvb3IpID0+IGZsb29yLm5hbWUgIT09IFwiXCIgJiYgZmxvb3JOYW1lLmluY2x1ZGVzKGZsb29yLm5hbWUpLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgLy8gYnkgaWRcclxuICAgICAgICBpZiAoIWZsb29yTWF0dGVycG9ydCkge1xyXG4gICAgICAgICAgICBmbG9vck1hdHRlcnBvcnQgPSBPYmplY3QudmFsdWVzKHRoaXMuZmxvb3JzKS5maW5kKChmbG9vcikgPT5cclxuICAgICAgICAgICAgICAgIGZsb29yTmFtZS5pbmNsdWRlcyhmbG9vci5pZCksXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGZsb29yTWF0dGVycG9ydCk7XHJcbiAgICAgICAgaWYgKGZsb29yTWF0dGVycG9ydCkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zZGsuRmxvb3IubW92ZVRvKGZsb29yTWF0dGVycG9ydC5zZXF1ZW5jZSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkNhbm5vdCBtb3ZlIHRvIEZsb29yXCIsIGVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgaW1wb3J0Rmxvb3JEYXRhKFxyXG4gICAgICAgIGRlZmF1dFpvbmVJRDogc3RyaW5nLFxyXG4gICAgICAgIG5vZGU6IE5vZGUsXHJcbiAgICApOiBQcm9taXNlPFpvbmVbXT4ge1xyXG4gICAgICAgIGNvbnN0IHpvbmVzID0gW107XHJcbiAgICAgICAgYXdhaXQgdGhpcy5zZGsuTW9kZS5tb3ZlVG8odGhpcy5zZGsuTW9kZS5Nb2RlLkZMT09SUExBTik7XHJcbiAgICAgICAgY29uc3Qgbm1iRmxvb3JzID0gT2JqZWN0LmtleXModGhpcy5mbG9vcnMpLmxlbmd0aDtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIlRvdGFsIG51bWJlciBvZiBmbG9vcnNcIiwgbm1iRmxvb3JzKTtcclxuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbm1iRmxvb3JzOyBpbmRleCArPSAxKSB7XHJcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1hd2FpdC1pbi1sb29wXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiSW1wb3J0aW5nIGZsb29yXCIsIGluZGV4KTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5zZGsuRmxvb3IubW92ZVRvKGluZGV4KS50aGVuKGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHdhaXQoNzAwKTtcclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiYWJvdXQgdG8gc2F2ZSB0aGUgZmxvb3JcIiwgaW5kZXgpO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgem9uZSA9IGF3YWl0IHRoaXMuc2F2ZUZsb29yKGRlZmF1dFpvbmVJRCwgbm9kZSk7XHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcInJlY2VpdmVkIGZsb29yIHpvbmVcIiwgem9uZSk7XHJcbiAgICAgICAgICAgICAgICB6b25lcy5wdXNoKHpvbmUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh6b25lcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBzYXZlRmxvb3IoZGVmYXV0Wm9uZUlEOiBzdHJpbmcsIG5vZGU6IE5vZGUpOiBQcm9taXNlPFpvbmU+IHtcclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMuY3VycmVudEZsb29yLmlkO1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRGbG9vci5uYW1lICE9PSBcIlwiKSB7XHJcbiAgICAgICAgICAgIG5hbWUgPSB0aGlzLmN1cnJlbnRGbG9vci5uYW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBsYXllckZsb29yID0gYXdhaXQgdGhpcy5nZXRMYXllckJ5TmFtZShcIkZMT09SXCIpO1xyXG4gICAgICAgIGNvbnN0IHN3ZWVwc0luZm8gPSBPYmplY3QudmFsdWVzKHRoaXMuc3dlZXBzKTtcclxuICAgICAgICBjb25zdCBzd2VlcHNGb3JGbG9vciA9IHN3ZWVwc0luZm8uZmlsdGVyKFxyXG4gICAgICAgICAgICAoc3dlZXBJbmZvKSA9PiBzd2VlcEluZm8uZmxvb3JJbmZvLmlkID09PSB0aGlzLmN1cnJlbnRGbG9vci5pZCxcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IHN3ZWVwSURzOiBzdHJpbmdbXSA9IHN3ZWVwc0ZvckZsb29yLm1hcCgoc3dlZXApID0+IHN3ZWVwLnV1aWQpO1xyXG4gICAgICAgIGNvbnN0IHpvbmUgPSBhd2FpdCB0aGlzLmNyZWF0ZVpvbmUoXHJcbiAgICAgICAgICAgIGDDiXRhZ2UgJHtuYW1lfSAtICR7bm9kZS5tZXRhZGF0YX1gLFxyXG4gICAgICAgICAgICBsYXllckZsb29yLmlkLFxyXG4gICAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgICBkZWZhdXRab25lSUQsXHJcbiAgICAgICAgICAgIHN3ZWVwSURzLFxyXG4gICAgICAgICAgICBub2RlLFxyXG4gICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh7IG1hdHRlcnBvcnRGbG9vclNlcXVlbmNlOiB0aGlzLmN1cnJlbnRGbG9vci5zZXF1ZW5jZSB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgLy8gVE9ETyBsaW5rIHRvIHNjYW5zXHJcbiAgICAgICAgY29uc3QgYmFzZTY0ID0gYXdhaXQgdGhpcy5zZGsuUmVuZGVyZXIudGFrZVNjcmVlblNob3QoXHJcbiAgICAgICAgICAgIHsgd2lkdGg6IDQwOTYsIGhlaWdodDogMjA0OCB9LFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3Qgc3BhY2VJRHNob3J0ID0gdGhpcy5zcGFjZUlELnNsaWNlKDAsIDgpO1xyXG4gICAgICAgIGF3YWl0IHVwbG9hZEJhc2U2NEltYWdlKFxyXG4gICAgICAgICAgICBiYXNlNjQsXHJcbiAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgIGB2aXNpdHMvJHt0aGlzLm1vZGVsSUR9L3BsYW5zL2AsXHJcbiAgICAgICAgICAgIGBwbGFuX2Zsb29yXyR7dGhpcy5jdXJyZW50Rmxvb3IuaWR9XyR7c3BhY2VJRHNob3J0fWAsXHJcbiAgICAgICAgKTtcclxuICAgICAgICAvLyBjcmVhdGUgUGxhbiBvYmplY3RcclxuICAgICAgICBjb25zdCBwbGFuID0ge1xyXG4gICAgICAgICAgICBuYW1lOiBgcGxhbl9mbG9vcl8ke3RoaXMuY3VycmVudEZsb29yLmlkfWAsXHJcbiAgICAgICAgICAgIGFubmV4ZTogYHZpc2l0cy8ke3RoaXMubW9kZWxJRH0vcGxhbnMvcGxhbl9mbG9vcl8ke3RoaXMuY3VycmVudEZsb29yLmlkfV8ke3NwYWNlSURzaG9ydH0uanBlZ2AsXHJcbiAgICAgICAgICAgIHpvbmVJRDogem9uZS5pZCxcclxuICAgICAgICAgICAgc3BhY2VJRDogdGhpcy5zcGFjZUlELFxyXG4gICAgICAgICAgICBpc0N1cnJlbnRGb3Jab25lOiB0cnVlLFxyXG4gICAgICAgICAgICBpc01vZGlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgaXNJbXBvcnRlZE1hdHRlcnBvcnQ6IHRydWUsXHJcbiAgICAgICAgfSBhcyBQbGFuO1xyXG4gICAgICAgIGF3YWl0IHRoaXMucGxhblNlcnZpY2UuY3JlYXRlUGxhbihwbGFuKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcImZsb29yIHNhdmVkXCIpO1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoem9uZSk7XHJcbiAgICB9XHJcblxyXG4gICAgYWJhbmRvbigpIHtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJhYmFuZG9ubmluZyBpbXBvcnRcIik7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlRnJhbWUoKTtcclxuICAgICAgICAgICAgdGhpcy5zdG9wID0gdHJ1ZTtcclxuICAgICAgICB9LCAxNTAwKTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVGcmFtZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50RnJhbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50RnJhbWUucmVtb3ZlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldExheWVyQnlOYW1lKG5hbWU6IHN0cmluZyk6IFByb21pc2U8TGF5ZXI+IHtcclxuICAgICAgICBjb25zdCBtaXNzaW9uID0gdGhpcy51c2VyU2VydmljZS5jdXJyZW50TWlzc2lvbih0aGlzLnNwYWNlSUQpO1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRPcmdJZCA9IG1pc3Npb24ub3JnYW5pc2F0aW9uSUQ7XHJcbiAgICAgICAgY29uc3QgbGF5ZXJzID0gYXdhaXQgdGhpcy5sYXllclNlcnZpY2UuZ2V0TGF5ZXJCeU5hbWVGb3JPcmdhbmlzYXRpb24oXHJcbiAgICAgICAgICAgIG5hbWUsXHJcbiAgICAgICAgICAgIGN1cnJlbnRPcmdJZCxcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChsYXllcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbGF5ZXJzWzBdO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjcmVhdGUgdGhlblxyXG4gICAgICAgIHJldHVybiB0aGlzLmxheWVyU2VydmljZS5jcmVhdGVMYXllckZvck9yZ2FuaXNhdGlvbihuYW1lLCBjdXJyZW50T3JnSWQpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
331
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0dGVycG9ydC1pbXBvcnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zbWFydGVycGxhbi1jb3JlL3NyYy9saWIvc2VydmljZXMvbWF0dGVycG9ydC1pbXBvcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFFLHdCQUF3QixFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMvRSxPQUFPLEVBQUUsV0FBVyxFQUF1QyxNQUFNLGtCQUFrQixDQUFDO0FBS3BGLE9BQU8sRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxjQUFjLENBQUM7Ozs7Ozs7O0FBTzdGLE1BQU0sT0FBTyx1QkFBdUI7SUF1Q2hDLFlBQ1ksaUJBQW9DLEVBQ3BDLFdBQXdCLEVBQ3hCLGFBQTRCLEVBQzVCLFlBQTBCLEVBQzFCLFdBQTRCLEVBQzVCLFdBQXdCO1FBTHhCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsZ0JBQVcsR0FBWCxXQUFXLENBQWlCO1FBQzVCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBZDdCLFNBQUksR0FBRyxLQUFLLENBQUM7UUFFYixvQkFBZSxHQUFxQixJQUFJLE9BQU8sRUFBVyxDQUFDO1FBRTNELHdCQUFtQixHQUFvQixJQUFJLE9BQU8sRUFBVSxDQUFDO1FBRTdELHFCQUFnQixHQUFvQixJQUFJLE9BQU8sRUFBVSxDQUFDO0lBUzdELENBQUM7SUEvQkwsSUFBVyxPQUFPO1FBQ2Qs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Q0gsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNaLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDckIsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUM5QjtJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsY0FBYyxDQUFDLElBQVk7UUFDN0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzlELE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUM7UUFDNUMsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLDZCQUE2QixDQUNoRSxJQUFJLEVBQ0osWUFBWSxDQUNmLENBQUM7UUFDRixJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ25CLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3BCO1FBQ0QsY0FBYztRQUNkLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDNUUsQ0FBQzs7b0hBbmFRLHVCQUF1Qjt3SEFBdkIsdUJBQXVCLGNBRnBCLE1BQU07MkZBRVQsdUJBQXVCO2tCQUhuQyxVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yLCBTdWJqZWN0IH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgcmVtb3ZlTnVsbEtleXNGcm9tT2JqZWN0LCB3YWl0LCB3YWl0VW50aWwgfSBmcm9tIFwiLi4vaGVscGVycy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IExldmVsU3RhdHVzLCBMYXllciwgTm9kZSwgWm9uZSwgTmF2aWdhdGlvbiwgUGxhbiB9IGZyb20gXCIuLi90eXBlcy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IExheWVyU2VydmljZSB9IGZyb20gXCIuL21vZGVscy9sYXllci5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IE5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4vbW9kZWxzL25hdmlnYXRpb24uc2VydmljZVwiO1xyXG5pbXBvcnQgeyBQbGFuU2VydmljZSB9IGZyb20gXCIuL21vZGVscy9wbGFuLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgWm9uZVNlcnZpY2UgfSBmcm9tIFwiLi9tb2RlbHMvem9uZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IHVwbG9hZEpzb25Ub1MzLCB1cGxvYWRCYXNlNjRJbWFnZSwgcmVtb3ZlQWxsRmlsZXNGcm9tRm9sZGVyUzMgfSBmcm9tIFwiLi9zMy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEJhc2VVc2VyU2VydmljZSB9IGZyb20gXCIuL3VzZXIuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBWaWV3ZXJTZXJ2aWNlIH0gZnJvbSBcIi4vdmlld2VyLnNlcnZpY2VcIjtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46IFwicm9vdFwiLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTWF0dGVycG9ydEltcG9ydFNlcnZpY2Uge1xyXG4gICAgcHJpdmF0ZSBjdXJyZW50RnJhbWU7XHJcblxyXG4gICAgcHVibGljIHNkazogYW55O1xyXG5cclxuICAgIHByaXZhdGUgc3dlZXBzOiBPYmplY3Q7XHJcblxyXG4gICAgcHVibGljIGZsb29yczogT2JqZWN0O1xyXG5cclxuICAgIHByaXZhdGUgY3VycmVudEZsb29yO1xyXG5cclxuICAgIHByaXZhdGUgX21vZGVsSUQ6IHN0cmluZztcclxuXHJcbiAgICBwcml2YXRlIF9zcGFjZUlEOiBzdHJpbmc7XHJcblxyXG4gICAgcHVibGljIGdldCBzcGFjZUlEKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NwYWNlSUQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldCBzcGFjZUlEKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLl9zcGFjZUlEID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBtb2RlbElEKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21vZGVsSUQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldCBtb2RlbElEKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLl9tb2RlbElEID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0b3AgPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgaW1wb3J0aW5nSW1hZ2VzOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuXHJcbiAgICBwdWJsaWMgc3dlZXBQcm9jZXNzZWRDb3VudDogU3ViamVjdDxudW1iZXI+ID0gbmV3IFN1YmplY3Q8bnVtYmVyPigpO1xyXG5cclxuICAgIHB1YmxpYyB0b3RhbFN3ZWVwc0NvdW50OiBTdWJqZWN0PG51bWJlcj4gPSBuZXcgU3ViamVjdDxudW1iZXI+KCk7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBuYXZpZ2F0aW9uU2VydmljZTogTmF2aWdhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSB6b25lU2VydmljZTogWm9uZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSB2aWV3ZXJTZXJ2aWNlOiBWaWV3ZXJTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbGF5ZXJTZXJ2aWNlOiBMYXllclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSB1c2VyU2VydmljZTogQmFzZVVzZXJTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcGxhblNlcnZpY2U6IFBsYW5TZXJ2aWNlLFxyXG4gICAgKSB7IH1cclxuXHJcbiAgICBhc3luYyBpbml0U2RrRm9yTW9kZWwobW9kZWxJRDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgdGhpcy5zdG9wID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8vIExvYWQgU0RLXHJcbiAgICAgICAgY29uc29sZS5sb2coXCJMb2FkaW5nIE1hdHRlcnBvcnQgU0RLXCIpO1xyXG4gICAgICAgIHRoaXMubW9kZWxJRCA9IG1vZGVsSUQ7XHJcbiAgICAgICAgY29uc3QgaWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlmcmFtZVwiKTtcclxuICAgICAgICBpZiAoIWlmcmFtZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgY3JlYXRlIGlmcmFtZVwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy52aWV3ZXJTZXJ2aWNlLnNldFRvdXJVcmwobW9kZWxJRCk7XHJcbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy52aWV3ZXJTZXJ2aWNlLmdldFRvdXJVcmwoKTtcclxuICAgICAgICBpZnJhbWUuc2V0QXR0cmlidXRlKFwic3JjXCIsIHVybCk7XHJcbiAgICAgICAgaWZyYW1lLmFsbG93ID0gXCJ4ci1zcGF0aWFsLXRyYWNraW5nXCI7XHJcbiAgICAgICAgaWZyYW1lLmhlaWdodCA9IFwiMTAwJVwiO1xyXG4gICAgICAgIGlmcmFtZS53aWR0aCA9IFwiMTAwJVwiO1xyXG4gICAgICAgIGlmcmFtZS5pZCA9IFwidmlld2VyLW1vZHVsZVwiO1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI3ZpZXdlci1mcmFtZVwiKTtcclxuICAgICAgICBlbGVtZW50LmFwcGVuZChpZnJhbWUpO1xyXG4gICAgICAgIHRoaXMuY3VycmVudEZyYW1lID0gaWZyYW1lO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICAgICAgdGhpcy5zZGsgPSBhd2FpdCB3aW5kb3cuTVBfU0RLLmNvbm5lY3QoXHJcbiAgICAgICAgICAgICAgICBpZnJhbWUsIFwicW45d3Nhc3V5NWgyZnpyYnJuMW56cjBpZFwiLCBcIjMuMTFcIlxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAvLyBTdWJzY3JpYmUgdG8gRmxvb3IgZGF0YVxyXG4gICAgICAgICAgICB0aGlzLnNkay5GbG9vci5kYXRhLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICBvbkNvbGxlY3Rpb25VcGRhdGVkOiBmdW5jdGlvbiB1cGQoY29sbGVjdGlvbjogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJGbG9vcnNcIiwgY29sbGVjdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mbG9vcnMgPSBjb2xsZWN0aW9uO1xyXG4gICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgLy8gU3Vic2NyaWJlIHRvIGN1cnJlbnQgRmxvb3JcclxuICAgICAgICAgICAgdGhpcy5zZGsuRmxvb3IuY3VycmVudC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiB1cGQoY3VycmVudEZsb29yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Rmxvb3IgPSBjdXJyZW50Rmxvb3I7XHJcbiAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAvLyBTdWJzY3JpYmUgdG8gU3dlZXAgZGF0YVxyXG4gICAgICAgICAgICB0aGlzLnNkay5Td2VlcC5kYXRhLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICBvbkNvbGxlY3Rpb25VcGRhdGVkOiBmdW5jdGlvbiB1cGQoY29sbGVjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcInRoZSBlbnRpcmUgdXAtdG8tZGF0ZSBjb2xsZWN0aW9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN3ZWVwcyA9IGNvbGxlY3Rpb247XHJcbiAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAvLyByZW1vdmUgbGFiZWxzXHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc2RrLlNldHRpbmdzLnVwZGF0ZShcImxhYmVsc1wiLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIGxldCB0aW1lb3V0RXhwaXJlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAvLyBzdGFydCB0aW1lb3V0XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGltZW91dEV4cGlyZWQgPSB0cnVlLCA1MDAwKTtcclxuICAgICAgICAgICAgYXdhaXQgd2FpdFVudGlsKCgpID0+ICh0aGlzLnN3ZWVwcyAhPT0gdW5kZWZpbmVkICYmIHRoaXMuZmxvb3JzICE9PSB1bmRlZmluZWQpIHx8IHRpbWVvdXRFeHBpcmVkID09PSB0cnVlKTtcclxuICAgICAgICAgICAgaWYgKHRpbWVvdXRFeHBpcmVkKSB7XHJcbiAgICAgICAgICAgICAgICAvLyB3ZSBhcmUgbGlrZWx5IGluIG1hdHRlcnBvcnQgZXJyb3IgY2FzZSAodGhhdCB3ZSBjYW5ub3QgY2F0Y2ghKVxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJ0aW1lb3V0IGludGlhbGlzaW5nIE1hdHRlcnBvcnRcIik7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJlcnJvciBpbml0IE1hdHRlcnBvcnRcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJpbml0IGRvbmVcIik7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImVycm9yIGluaXQgTWF0dGVycG9ydFwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgaW1wb3J0RGF0YShcclxuICAgICAgICBzcGFjZUlEOiBzdHJpbmcsXHJcbiAgICAgICAgc3VyZmFjZTogbnVtYmVyLFxyXG4gICAgICAgIHJlbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlLFxyXG4gICAgICAgIG5vZGU6IE5vZGUgPSBudWxsLFxyXG4gICAgKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgdGhpcy5zcGFjZUlEID0gc3BhY2VJRDtcclxuICAgICAgICBpZiAoIXRoaXMuc3dlZXBzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJubyBzd2VlcHMgaW5pdGlhbGl6ZWRcIikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgZmxvb3Jab25lczogWm9uZVtdID0gW107XHJcbiAgICAgICAgY29uc3Qgem9uZXMgPSBhd2FpdCB0aGlzLnpvbmVTZXJ2aWNlLmdldFpvbmVzQnlTcGFjZShzcGFjZUlEKTtcclxuICAgICAgICBjb25zdCBtYWluWm9uZSA9IHpvbmVzLmZpbmQoKHopID0+ICF6LnBhcmVudElEKTtcclxuICAgICAgICBpZiAoIW1haW5ab25lKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJtaXNzaW5nIGRhdGEgKG5vIG1haW4gQnVpbGRpbmcgWm9uZSlcIikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zb2xlLmxvZyhcImltcG9ydGluZyBkYXRhIGZyb20gbWF0dGVycG9ydFwiKTtcclxuICAgICAgICBsZXQgYXBwSXNMb2FkZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNkay5BcHAuc3RhdGUuc3Vic2NyaWJlKGZ1bmN0aW9uIChhcHBTdGF0ZSkge1xyXG4gICAgICAgICAgICAvLyBhcHAgc3RhdGUgaGFzIGNoYW5nZWRcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ1RoZSBjdXJyZW50IHBoYXNlOiAnLCBhcHBTdGF0ZS5waGFzZSk7XHJcbiAgICAgICAgICAgIGlmIChhcHBTdGF0ZS5waGFzZSA9PT0gXCJhcHBwaGFzZS5wbGF5aW5nXCIpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdUaGUgYXBwIGlzIHBsYXlpbmcnKTtcclxuICAgICAgICAgICAgICAgIGFwcElzTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGF3YWl0IHdhaXRVbnRpbCgoKSA9PiBhcHBJc0xvYWRlZCA9PT0gdHJ1ZSk7XHJcbiAgICAgICAgLy8gc2F2ZSBzd2VlcHMgZGF0YSBhcyBqc29uXHJcbiAgICAgICAgY29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KE9iamVjdC52YWx1ZXModGhpcy5zd2VlcHMpKTtcclxuICAgICAgICBhd2FpdCB1cGxvYWRKc29uVG9TMyhcclxuICAgICAgICAgICAgYHZpc2l0cy8ke3RoaXMubW9kZWxJRH0vaW52ZW50b3J5L2AsXHJcbiAgICAgICAgICAgIGpzb24sXHJcbiAgICAgICAgICAgIFwiZGF0YS5qc29uXCIsXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAocmVsb2FkaW5nKSB7XHJcbiAgICAgICAgICAgIC8vIHBlcmZvcm0gb25seSAzNjAgaW1wb3J0IHNpbmNlIHdlIGFyZSByZWxvYWRpbmdcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5pbXBvcnQzNjBpbWFnZXMoKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJhZnRlciByZWxvYWRpbmdcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNoZWNrIGxheWVyIG9mIGJ1aWxkaW5nIHR5cGVcclxuICAgICAgICBjb25zdCBsYXllckJ1aWxkaW5nID0gYXdhaXQgdGhpcy5nZXRMYXllckJ5TmFtZShcIkJVSUxESU5HXCIpO1xyXG4gICAgICAgIGNvbnN0IGNyZWF0ZWREZWZhdWx0Wm9uZSA9IGF3YWl0IHRoaXMuY3JlYXRlWm9uZShcclxuICAgICAgICAgICAgbm9kZS5tZXRhZGF0YSxcclxuICAgICAgICAgICAgbGF5ZXJCdWlsZGluZy5pZCxcclxuICAgICAgICAgICAgc3VyZmFjZSxcclxuICAgICAgICAgICAgbWFpblpvbmUuaWQsXHJcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMuc3dlZXBzKSxcclxuICAgICAgICAgICAgbm9kZSxcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmICghY3JlYXRlZERlZmF1bHRab25lKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5mbG9vcnMpIHtcclxuICAgICAgICAgICAgZmxvb3Jab25lcyA9IGF3YWl0IHRoaXMuaW1wb3J0Rmxvb3JEYXRhKFxyXG4gICAgICAgICAgICAgICAgY3JlYXRlZERlZmF1bHRab25lLmlkLFxyXG4gICAgICAgICAgICAgICAgbm9kZSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coZmxvb3Jab25lcyk7XHJcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMuc3dlZXBzKS5tYXAoYXN5bmMgKGtleSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3dlZXBJbmZvID0gdGhpcy5zd2VlcHNba2V5XTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5hdmlnYXRpb25JbnB1dCA9IHtcclxuICAgICAgICAgICAgICAgICAgICBtYXR0ZXJwb3J0U3dlZXBJRDogc3dlZXBJbmZvLnV1aWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IEpTT04uc3RyaW5naWZ5KHN3ZWVwSW5mby5wb3NpdGlvbiksXHJcbiAgICAgICAgICAgICAgICAgICAgcm90YXRpb246IEpTT04uc3RyaW5naWZ5KHN3ZWVwSW5mby5yb3RhdGlvbiksXHJcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6IExldmVsU3RhdHVzLkxPVyxcclxuICAgICAgICAgICAgICAgICAgICBub2RlSUQ6IG5vZGUuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgc3BhY2VJRCxcclxuICAgICAgICAgICAgICAgIH0gYXMgTmF2aWdhdGlvbjtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5hdiA9IGF3YWl0IHRoaXMubmF2aWdhdGlvblNlcnZpY2UuY3JlYXRlTmF2aWdhdGlvbihcclxuICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0aW9uSW5wdXQsXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFuYXYpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJjb3VsZCBjcmVhdGUgbmF2aWdhdGlvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0aW9uSW5wdXQuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgICAgICBhd2FpdCB0aGlzLmltcG9ydDM2MGltYWdlcygpO1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNyZWF0ZVpvbmUoXHJcbiAgICAgICAgbmFtZTogc3RyaW5nLFxyXG4gICAgICAgIGxheWVySUQ6IHN0cmluZyxcclxuICAgICAgICBzdXJmYWNlOiBudW1iZXIgPSBudWxsLFxyXG4gICAgICAgIHBhcmVudElEOiBzdHJpbmcgPSBudWxsLFxyXG4gICAgICAgIHN3ZWVwczogc3RyaW5nW10gPSBbXSxcclxuICAgICAgICBub2RlOiBOb2RlID0gbnVsbCxcclxuICAgICAgICBtZXRhZGF0YTogc3RyaW5nID0gbnVsbCxcclxuICAgICk6IFByb21pc2U8Wm9uZT4ge1xyXG4gICAgICAgIGNvbnN0IHpvbmVJbnB1dCA9IHtcclxuICAgICAgICAgICAgbmFtZSxcclxuICAgICAgICAgICAgc3BhY2VJRDogdGhpcy5zcGFjZUlELFxyXG4gICAgICAgICAgICBsYXllcklELFxyXG4gICAgICAgICAgICBzd2VlcElEczogc3dlZXBzLFxyXG4gICAgICAgICAgICBub2RlSURzOiBub2RlID8gW25vZGUuaWRdIDogbnVsbCxcclxuICAgICAgICB9IGFzIFpvbmU7XHJcbiAgICAgICAgcmVtb3ZlTnVsbEtleXNGcm9tT2JqZWN0KHpvbmVJbnB1dCk7XHJcbiAgICAgICAgaWYgKHN1cmZhY2UpIHtcclxuICAgICAgICAgICAgem9uZUlucHV0LnN1cmZhY2UgPSBzdXJmYWNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocGFyZW50SUQpIHtcclxuICAgICAgICAgICAgem9uZUlucHV0LnBhcmVudElEID0gcGFyZW50SUQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtZXRhZGF0YSkge1xyXG4gICAgICAgICAgICB6b25lSW5wdXQubWV0YWRhdGEgPSBtZXRhZGF0YTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbmV3TG9jYWwgPSBhd2FpdCB0aGlzLnpvbmVTZXJ2aWNlLmNyZWF0ZSh6b25lSW5wdXQpO1xyXG4gICAgICAgIHJldHVybiBuZXdMb2NhbDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBpbXBvcnQzNjBpbWFnZXMoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJJbXBvcnRpbmcgMzYwIGltYWdlc1wiKTtcclxuICAgICAgICB0aGlzLmltcG9ydGluZ0ltYWdlcy5uZXh0KHRydWUpO1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBzY2FucyA9IE9iamVjdC52YWx1ZXModGhpcy5zd2VlcHMpO1xyXG4gICAgICAgICAgICBsZXQgbWF4U2NhbjtcclxuICAgICAgICAgICAgbGV0IGluZGV4U2NhbjtcclxuICAgICAgICAgICAgY29uc3Qgbm1iU2NhbnMgPSBPYmplY3Qua2V5cyhzY2FucykubGVuZ3RoO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIlRvdGFsIG51bWJlciBvZiBzY2FuIHBvaW50cyA6XCIsIG5tYlNjYW5zKTtcclxuICAgICAgICAgICAgdGhpcy50b3RhbFN3ZWVwc0NvdW50Lm5leHQobm1iU2NhbnMpO1xyXG4gICAgICAgICAgICAvLyBjaGVjayBpZiB3ZSBzdGFydGVkIHRvIGxvYWQgaW1hZ2VzIGFscmVhZHlcclxuICAgICAgICAgICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiaW5kZXhTY2FuTG9hZFwiKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgICAgICAgICAgICAgXCJyZXRha2luZyBpbXBvcnQgZnJvbSBzY2FuXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJpbmRleFNjYW5Mb2FkXCIpLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGluZGV4U2NhbiA9ICtsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImluZGV4U2NhbkxvYWRcIik7XHJcbiAgICAgICAgICAgICAgICBubWJTY2FucyA8IGluZGV4U2NhbiArIDUwXHJcbiAgICAgICAgICAgICAgICAgICAgPyAobWF4U2NhbiA9IG5tYlNjYW5zKVxyXG4gICAgICAgICAgICAgICAgICAgIDogKG1heFNjYW4gPSBpbmRleFNjYW4gKyA1MCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpbmRleFNjYW4gPSAwO1xyXG4gICAgICAgICAgICAgICAgbm1iU2NhbnMgPCA1MCA/IChtYXhTY2FuID0gbm1iU2NhbnMpIDogKG1heFNjYW4gPSA1MCk7XHJcbiAgICAgICAgICAgICAgICBtYXhTY2FuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IGluZGV4U2NhbjsgaW5kZXggPCBtYXhTY2FuOyBpbmRleCArPSAxKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc3RvcCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2RrLlN3ZWVwLm1vdmVUbyhzY2Fuc1tpbmRleF0udXVpZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zZGsuQ2FtZXJhLnNldFJvdGF0aW9uKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgeDogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgeTogMCxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbWcgPSBhd2FpdCB0aGlzLnNkay5SZW5kZXJlci50YWtlRXF1aXJlY3Rhbmd1bGFyKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7IHdpZHRoOiAyMDQ4LCBoZWlnaHQ6IDEwMjQgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgeyBtYXR0ZXJ0YWdzOiBmYWxzZSwgc3dlZXBzOiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB1cGxvYWRCYXNlNjRJbWFnZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzY2Fuc1tpbmRleF0udXVpZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYHZpc2l0cy8ke3RoaXMubW9kZWxJRH0vc3dlZXBzL2AsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwic3dlZXBcIixcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3dlZXBQcm9jZXNzZWRDb3VudC5uZXh0KGluZGV4KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJpbmRleFNjYW5Mb2FkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUFsbEZpbGVzRnJvbUZvbGRlclMzKGB2aXNpdHMvJHt0aGlzLm1vZGVsSUR9L3N3ZWVwc2ApO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQWJhbmRvbmluZyBpbXBvcnQgYmVhY3VzZSBpdCB3YXMgY2FuY2VsbGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXhTY2FuID09PSBubWJTY2Fucykge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJJbXBvcnQgMzYwIGRvbmVcIik7XHJcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcImluZGV4U2NhbkxvYWRcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUZyYW1lKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3AgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5zdG9wKSB7XHJcbiAgICAgICAgICAgICAgICAvLyB0byByZXN0YXJ0IHRoZSBwcm9jZWR1cmUgZnJvbSB3aGVyZSB3ZSBsZWZ0IG9mXHJcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImluZGV4U2NhbkxvYWRcIiwgbWF4U2Nhbi50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRnJhbWUoKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuaW5pdFNka0Zvck1vZGVsKHRoaXMubW9kZWxJRCk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmltcG9ydERhdGEodGhpcy5zcGFjZUlELCAwLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBtb3ZlVG9GbG9vcihmbG9vck5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIC8vIGJ5IG5hbWVcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhmbG9vck5hbWUpO1xyXG4gICAgICAgIGxldCBmbG9vck1hdHRlcnBvcnQgPSBPYmplY3QudmFsdWVzKHRoaXMuZmxvb3JzKS5maW5kKFxyXG4gICAgICAgICAgICAoZmxvb3IpID0+IGZsb29yLm5hbWUgIT09IFwiXCIgJiYgZmxvb3JOYW1lLmluY2x1ZGVzKGZsb29yLm5hbWUpLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgLy8gYnkgaWRcclxuICAgICAgICBpZiAoIWZsb29yTWF0dGVycG9ydCkge1xyXG4gICAgICAgICAgICBmbG9vck1hdHRlcnBvcnQgPSBPYmplY3QudmFsdWVzKHRoaXMuZmxvb3JzKS5maW5kKChmbG9vcikgPT5cclxuICAgICAgICAgICAgICAgIGZsb29yTmFtZS5pbmNsdWRlcyhmbG9vci5pZCksXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGZsb29yTWF0dGVycG9ydCk7XHJcbiAgICAgICAgaWYgKGZsb29yTWF0dGVycG9ydCkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zZGsuRmxvb3IubW92ZVRvKGZsb29yTWF0dGVycG9ydC5zZXF1ZW5jZSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkNhbm5vdCBtb3ZlIHRvIEZsb29yXCIsIGVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgaW1wb3J0Rmxvb3JEYXRhKFxyXG4gICAgICAgIGRlZmF1dFpvbmVJRDogc3RyaW5nLFxyXG4gICAgICAgIG5vZGU6IE5vZGUsXHJcbiAgICApOiBQcm9taXNlPFpvbmVbXT4ge1xyXG4gICAgICAgIGNvbnN0IHpvbmVzID0gW107XHJcbiAgICAgICAgYXdhaXQgdGhpcy5zZGsuTW9kZS5tb3ZlVG8odGhpcy5zZGsuTW9kZS5Nb2RlLkZMT09SUExBTik7XHJcbiAgICAgICAgY29uc3Qgbm1iRmxvb3JzID0gT2JqZWN0LmtleXModGhpcy5mbG9vcnMpLmxlbmd0aDtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIlRvdGFsIG51bWJlciBvZiBmbG9vcnNcIiwgbm1iRmxvb3JzKTtcclxuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbm1iRmxvb3JzOyBpbmRleCArPSAxKSB7XHJcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1hd2FpdC1pbi1sb29wXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiSW1wb3J0aW5nIGZsb29yXCIsIGluZGV4KTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5zZGsuRmxvb3IubW92ZVRvKGluZGV4KS50aGVuKGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHdhaXQoNzAwKTtcclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiYWJvdXQgdG8gc2F2ZSB0aGUgZmxvb3JcIiwgaW5kZXgpO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgem9uZSA9IGF3YWl0IHRoaXMuc2F2ZUZsb29yKGRlZmF1dFpvbmVJRCwgbm9kZSk7XHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcInJlY2VpdmVkIGZsb29yIHpvbmVcIiwgem9uZSk7XHJcbiAgICAgICAgICAgICAgICB6b25lcy5wdXNoKHpvbmUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh6b25lcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBzYXZlRmxvb3IoZGVmYXV0Wm9uZUlEOiBzdHJpbmcsIG5vZGU6IE5vZGUpOiBQcm9taXNlPFpvbmU+IHtcclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMuY3VycmVudEZsb29yLmlkO1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRGbG9vci5uYW1lICE9PSBcIlwiKSB7XHJcbiAgICAgICAgICAgIG5hbWUgPSB0aGlzLmN1cnJlbnRGbG9vci5uYW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBsYXllckZsb29yID0gYXdhaXQgdGhpcy5nZXRMYXllckJ5TmFtZShcIkZMT09SXCIpO1xyXG4gICAgICAgIGNvbnN0IHN3ZWVwc0luZm8gPSBPYmplY3QudmFsdWVzKHRoaXMuc3dlZXBzKTtcclxuICAgICAgICBjb25zdCBzd2VlcHNGb3JGbG9vciA9IHN3ZWVwc0luZm8uZmlsdGVyKFxyXG4gICAgICAgICAgICAoc3dlZXBJbmZvKSA9PiBzd2VlcEluZm8uZmxvb3JJbmZvLmlkID09PSB0aGlzLmN1cnJlbnRGbG9vci5pZCxcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IHN3ZWVwSURzOiBzdHJpbmdbXSA9IHN3ZWVwc0ZvckZsb29yLm1hcCgoc3dlZXApID0+IHN3ZWVwLnV1aWQpO1xyXG4gICAgICAgIGNvbnN0IHpvbmUgPSBhd2FpdCB0aGlzLmNyZWF0ZVpvbmUoXHJcbiAgICAgICAgICAgIGDDiXRhZ2UgJHtuYW1lfSAtICR7bm9kZS5tZXRhZGF0YX1gLFxyXG4gICAgICAgICAgICBsYXllckZsb29yLmlkLFxyXG4gICAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgICBkZWZhdXRab25lSUQsXHJcbiAgICAgICAgICAgIHN3ZWVwSURzLFxyXG4gICAgICAgICAgICBub2RlLFxyXG4gICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh7IG1hdHRlcnBvcnRGbG9vclNlcXVlbmNlOiB0aGlzLmN1cnJlbnRGbG9vci5zZXF1ZW5jZSB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgLy8gVE9ETyBsaW5rIHRvIHNjYW5zXHJcbiAgICAgICAgY29uc3QgYmFzZTY0ID0gYXdhaXQgdGhpcy5zZGsuUmVuZGVyZXIudGFrZVNjcmVlblNob3QoXHJcbiAgICAgICAgICAgIHsgd2lkdGg6IDQwOTYsIGhlaWdodDogMjA0OCB9LFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3Qgc3BhY2VJRHNob3J0ID0gdGhpcy5zcGFjZUlELnNsaWNlKDAsIDgpO1xyXG4gICAgICAgIGF3YWl0IHVwbG9hZEJhc2U2NEltYWdlKFxyXG4gICAgICAgICAgICBiYXNlNjQsXHJcbiAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgIGB2aXNpdHMvJHt0aGlzLm1vZGVsSUR9L3BsYW5zL2AsXHJcbiAgICAgICAgICAgIGBwbGFuX2Zsb29yXyR7dGhpcy5jdXJyZW50Rmxvb3IuaWR9XyR7c3BhY2VJRHNob3J0fWAsXHJcbiAgICAgICAgKTtcclxuICAgICAgICAvLyBjcmVhdGUgUGxhbiBvYmplY3RcclxuICAgICAgICBjb25zdCBwbGFuID0ge1xyXG4gICAgICAgICAgICBuYW1lOiBgcGxhbl9mbG9vcl8ke3RoaXMuY3VycmVudEZsb29yLmlkfWAsXHJcbiAgICAgICAgICAgIGFubmV4ZTogYHZpc2l0cy8ke3RoaXMubW9kZWxJRH0vcGxhbnMvcGxhbl9mbG9vcl8ke3RoaXMuY3VycmVudEZsb29yLmlkfV8ke3NwYWNlSURzaG9ydH0uanBlZ2AsXHJcbiAgICAgICAgICAgIHpvbmVJRDogem9uZS5pZCxcclxuICAgICAgICAgICAgc3BhY2VJRDogdGhpcy5zcGFjZUlELFxyXG4gICAgICAgICAgICBpc0N1cnJlbnRGb3Jab25lOiB0cnVlLFxyXG4gICAgICAgICAgICBpc01vZGlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgaXNJbXBvcnRlZE1hdHRlcnBvcnQ6IHRydWUsXHJcbiAgICAgICAgfSBhcyBQbGFuO1xyXG4gICAgICAgIGF3YWl0IHRoaXMucGxhblNlcnZpY2UuY3JlYXRlUGxhbihwbGFuKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcImZsb29yIHNhdmVkXCIpO1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoem9uZSk7XHJcbiAgICB9XHJcblxyXG4gICAgYWJhbmRvbigpIHtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJhYmFuZG9ubmluZyBpbXBvcnRcIik7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlRnJhbWUoKTtcclxuICAgICAgICAgICAgdGhpcy5zdG9wID0gdHJ1ZTtcclxuICAgICAgICB9LCAxNTAwKTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVGcmFtZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50RnJhbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50RnJhbWUucmVtb3ZlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldExheWVyQnlOYW1lKG5hbWU6IHN0cmluZyk6IFByb21pc2U8TGF5ZXI+IHtcclxuICAgICAgICBjb25zdCBtaXNzaW9uID0gdGhpcy51c2VyU2VydmljZS5jdXJyZW50TWlzc2lvbih0aGlzLnNwYWNlSUQpO1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRPcmdJZCA9IG1pc3Npb24ub3JnYW5pc2F0aW9uSUQ7XHJcbiAgICAgICAgY29uc3QgbGF5ZXJzID0gYXdhaXQgdGhpcy5sYXllclNlcnZpY2UuZ2V0TGF5ZXJCeU5hbWVGb3JPcmdhbmlzYXRpb24oXHJcbiAgICAgICAgICAgIG5hbWUsXHJcbiAgICAgICAgICAgIGN1cnJlbnRPcmdJZCxcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChsYXllcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbGF5ZXJzWzBdO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjcmVhdGUgdGhlblxyXG4gICAgICAgIHJldHVybiB0aGlzLmxheWVyU2VydmljZS5jcmVhdGVMYXllckZvck9yZ2FuaXNhdGlvbihuYW1lLCBjdXJyZW50T3JnSWQpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -9,7 +9,6 @@ import { NgbDate, NgbModule } from '@ng-bootstrap/ng-bootstrap';
|
|
|
9
9
|
import * as i1$1 from '@angular/router';
|
|
10
10
|
import { RouterModule } from '@angular/router';
|
|
11
11
|
import { Storage, Auth, API } from 'aws-amplify';
|
|
12
|
-
import urlExist from 'url-exist';
|
|
13
12
|
import FileSaver from 'file-saver';
|
|
14
13
|
import levenshtein from 'js-levenshtein';
|
|
15
14
|
import { DateTime } from 'luxon';
|
|
@@ -2621,16 +2620,6 @@ function durationToString(duration, translate) {
|
|
|
2621
2620
|
return `${minutes} ${minutesString} ${seconds} ${secondsString}`;
|
|
2622
2621
|
}
|
|
2623
2622
|
return `${seconds} ${secondsString}`;
|
|
2624
|
-
}
|
|
2625
|
-
/**
|
|
2626
|
-
* Runs a request to a given url (if response is 404 or not)
|
|
2627
|
-
* @param url
|
|
2628
|
-
* @returns Promise<boolean>
|
|
2629
|
-
*/
|
|
2630
|
-
function urlExists(url) {
|
|
2631
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
2632
|
-
return yield urlExist(url);
|
|
2633
|
-
});
|
|
2634
2623
|
}
|
|
2635
2624
|
|
|
2636
2625
|
class ProfileService {
|
|
@@ -9114,11 +9103,6 @@ class MatterportImportService {
|
|
|
9114
9103
|
}
|
|
9115
9104
|
this.viewerService.setTourUrl(modelID);
|
|
9116
9105
|
const url = this.viewerService.getTourUrl();
|
|
9117
|
-
const modelExists = yield urlExists(url);
|
|
9118
|
-
console.log(modelExists);
|
|
9119
|
-
if (!modelExists) {
|
|
9120
|
-
throw new Error("Model 3D does not exist");
|
|
9121
|
-
}
|
|
9122
9106
|
iframe.setAttribute("src", url);
|
|
9123
9107
|
iframe.allow = "xr-spatial-tracking";
|
|
9124
9108
|
iframe.height = "100%";
|
|
@@ -10365,5 +10349,5 @@ function floatValidator() {
|
|
|
10365
10349
|
* Generated bundle index. Do not edit.
|
|
10366
10350
|
*/
|
|
10367
10351
|
|
|
10368
|
-
export { AffectationService, AvatarComponent, BaseLateralTabService, BaseTagService, BaseUserService, BaseVisibilityService, BookingService, CameraMode, CaptureService, CaptureViewer, CommentService, CommentType, Config, ContentService, CsvExportComponent, DomainService, DomainType, DurationToStringPipe, EmailStatus, EquipmentService, EventService, EventStatus, EventType, FeatureService, FeatureType, FilterService, HashtagFromIdPipe, HashtagService, InterventionService, InventoryStatus, LayerService, LevelStatus, LoaderComponent, Locale, LocaleService, MatterportImportService, MatterportService, MattertagData, MeasurementService, MenuBarComponent, MissionService, NavigationService, NavigatorService, NgxSmarterplanCoreModule, NgxSmarterplanCoreService, NodeService, OperationService, OrganisationService, PaymentStatus, PlanService, PoiService, PoiType, ProfileEntity, ProfileService, ProfileStatus, PropertyService, PropertyType, RoleStatus, SafeUrlPipe, SearchBarComponent, SearchObjectType, SearchService, SpModule, SpaceService, SpaceStatus, StatusEquipment, SupportModalComponent, SupportService, TagAction, TemplateService, TicketPriority, TicketStatus, TicketType, TicketsService, TimeDateToLocalStringPipe, TypeNote, UsernameFromIdPipe, ValidatorsService, ViewerInteractions, ViewerService, VisitService, ZoneService, arraysContainSameElements, checkElementById, convertTimestampToLocalZone, dateHasExpired, dateTimeToLocalString, deleteFromS3, downloadBlob, downloadEquipmentDocument, downloadFile, downloadFileAsObject, durationToString, emailValidator, enumToArray, filterUniqueArrayByID, floatValidator, getBufferForFileFromS3, getCoefficientsForImage, getDistanceBetweenTwoPoints, getHighestLevelForMissions, getHighestRoleForMissions, getLevelsBelow, getLocaleLong, getLocaleShort, getMetaForImage, getRolesBelowForManager, getSignedFile, getSignedImageUrlForEquipment, getSignedImageUrlForProfile, getSignedImageUrlForSpace, getSpaceIDFromUrl, getVisitUrl, isEmptyObject, listFilesInFolder, mean, noEmptyValidator, numberToDateString, openDocument, openModalForVisitSwitch, poiTypeToString, removeAllFilesFromFolderS3, removeNullKeysFromObject, showScanPointsOnPlanInDiv, shuffleArray, sortAlphabeticallyOnName, stringLocaleToEnum, stringToLowercaseNoSpaces, styleButton, textValidator, translateDatePeriod, uploadBase64Image, uploadFileToS3, uploadJsonToS3,
|
|
10352
|
+
export { AffectationService, AvatarComponent, BaseLateralTabService, BaseTagService, BaseUserService, BaseVisibilityService, BookingService, CameraMode, CaptureService, CaptureViewer, CommentService, CommentType, Config, ContentService, CsvExportComponent, DomainService, DomainType, DurationToStringPipe, EmailStatus, EquipmentService, EventService, EventStatus, EventType, FeatureService, FeatureType, FilterService, HashtagFromIdPipe, HashtagService, InterventionService, InventoryStatus, LayerService, LevelStatus, LoaderComponent, Locale, LocaleService, MatterportImportService, MatterportService, MattertagData, MeasurementService, MenuBarComponent, MissionService, NavigationService, NavigatorService, NgxSmarterplanCoreModule, NgxSmarterplanCoreService, NodeService, OperationService, OrganisationService, PaymentStatus, PlanService, PoiService, PoiType, ProfileEntity, ProfileService, ProfileStatus, PropertyService, PropertyType, RoleStatus, SafeUrlPipe, SearchBarComponent, SearchObjectType, SearchService, SpModule, SpaceService, SpaceStatus, StatusEquipment, SupportModalComponent, SupportService, TagAction, TemplateService, TicketPriority, TicketStatus, TicketType, TicketsService, TimeDateToLocalStringPipe, TypeNote, UsernameFromIdPipe, ValidatorsService, ViewerInteractions, ViewerService, VisitService, ZoneService, arraysContainSameElements, checkElementById, convertTimestampToLocalZone, dateHasExpired, dateTimeToLocalString, deleteFromS3, downloadBlob, downloadEquipmentDocument, downloadFile, downloadFileAsObject, durationToString, emailValidator, enumToArray, filterUniqueArrayByID, floatValidator, getBufferForFileFromS3, getCoefficientsForImage, getDistanceBetweenTwoPoints, getHighestLevelForMissions, getHighestRoleForMissions, getLevelsBelow, getLocaleLong, getLocaleShort, getMetaForImage, getRolesBelowForManager, getSignedFile, getSignedImageUrlForEquipment, getSignedImageUrlForProfile, getSignedImageUrlForSpace, getSpaceIDFromUrl, getVisitUrl, isEmptyObject, listFilesInFolder, mean, noEmptyValidator, numberToDateString, openDocument, openModalForVisitSwitch, poiTypeToString, removeAllFilesFromFolderS3, removeNullKeysFromObject, showScanPointsOnPlanInDiv, shuffleArray, sortAlphabeticallyOnName, stringLocaleToEnum, stringToLowercaseNoSpaces, styleButton, textValidator, translateDatePeriod, uploadBase64Image, uploadFileToS3, uploadJsonToS3, validEmail, wait, waitUntil };
|
|
10369
10353
|
//# sourceMappingURL=smarterplan-ngx-smarterplan-core.mjs.map
|