@smarterplan/ngx-smarterplan-core 1.4.20 → 1.4.21
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/README.md +24 -24
- package/esm2022/lib/components/csv-export/csv-export.component.mjs +3 -3
- package/esm2022/lib/components/loader/loader.component.mjs +3 -3
- package/esm2022/lib/components/menu-bar/avatar/avatar.component.mjs +1 -1
- package/esm2022/lib/components/menu-bar/menu-bar.component.mjs +3 -3
- package/esm2022/lib/components/menu-bar/navigation-bar/navigation-bar.component.mjs +3 -3
- package/esm2022/lib/components/modal-switch-visit/modal-switch-visit.component.mjs +3 -3
- package/esm2022/lib/components/search-bar/search-bar.component.mjs +3 -3
- package/esm2022/lib/components/support-modal/support-modal.component.mjs +3 -3
- package/esm2022/lib/config.mjs +1 -1
- package/esm2022/lib/helpers.service.mjs +1 -1
- package/esm2022/lib/matterport-extensions/nest-thermostat/CanvasImage.mjs +1 -1
- package/esm2022/lib/matterport-extensions/nest-thermostat/CanvasRenderer.mjs +1 -1
- package/esm2022/lib/matterport-extensions/nest-thermostat/NestThermostat.mjs +1 -1
- package/esm2022/lib/matterport-extensions/nest-thermostat/PlaneRenderer.mjs +1 -1
- package/esm2022/lib/matterport-extensions/scene-component/SceneComponent.mjs +1 -1
- package/esm2022/lib/matterport-extensions/security-camera/SecurityCamera.mjs +49 -28
- package/esm2022/lib/matterport-extensions/tv-player/TvPlayer.mjs +1 -1
- package/esm2022/lib/matterport-extensions/view-frustum-mesh/ViewFrustumMesh.mjs +22 -22
- package/esm2022/lib/mattertagData.mjs +1 -1
- package/esm2022/lib/ngx-smarterplan-core.module.mjs +1 -1
- package/esm2022/lib/ngx-smarterplan-core.service.mjs +1 -1
- package/esm2022/lib/pipes/duration-to-string.pipe.mjs +1 -1
- package/esm2022/lib/pipes/format-date-number-to-digits.pipe.mjs +1 -1
- package/esm2022/lib/pipes/hashtag-from-id.pipe.mjs +1 -1
- package/esm2022/lib/pipes/safe-url.pipe.mjs +1 -1
- package/esm2022/lib/pipes/time-date-to-local-string.pipe.mjs +1 -1
- package/esm2022/lib/pipes/username-from-id.pipe.mjs +1 -1
- package/esm2022/lib/services/amplify-cache.service.mjs +1 -1
- package/esm2022/lib/services/base-tab.service.mjs +1 -1
- package/esm2022/lib/services/baseVisibility.service.mjs +1 -1
- package/esm2022/lib/services/content.service.mjs +1 -1
- package/esm2022/lib/services/filter.service.mjs +1 -1
- package/esm2022/lib/services/intervention.service.mjs +1 -1
- package/esm2022/lib/services/locale.service.mjs +1 -1
- package/esm2022/lib/services/matterport-import.service.mjs +1 -1
- package/esm2022/lib/services/matterport-measurement.service.mjs +1 -1
- package/esm2022/lib/services/matterport-navigation.service.mjs +1 -1
- package/esm2022/lib/services/matterport-object3d.service.mjs +657 -133
- package/esm2022/lib/services/matterport-pointer.service.mjs +6 -6
- package/esm2022/lib/services/matterport-tag-copy.service.mjs +1 -1
- package/esm2022/lib/services/matterport-tag.service.mjs +1 -1
- package/esm2022/lib/services/matterport.service.mjs +346 -25
- package/esm2022/lib/services/models/affectation.service.mjs +1 -1
- package/esm2022/lib/services/models/base-object.service.mjs +1 -1
- package/esm2022/lib/services/models/capture.service.mjs +1 -1
- package/esm2022/lib/services/models/comment.service.mjs +1 -1
- package/esm2022/lib/services/models/domain.service.mjs +1 -1
- package/esm2022/lib/services/models/equipment.service.mjs +1 -1
- package/esm2022/lib/services/models/event.service.mjs +1 -1
- package/esm2022/lib/services/models/feature.service.mjs +1 -1
- package/esm2022/lib/services/models/hashtag.service.mjs +1 -1
- package/esm2022/lib/services/models/layer.service.mjs +1 -1
- package/esm2022/lib/services/models/measurement.service.mjs +1 -1
- package/esm2022/lib/services/models/mission.service.mjs +1 -1
- package/esm2022/lib/services/models/navigation.service.mjs +1 -1
- package/esm2022/lib/services/models/node.service.mjs +1 -1
- package/esm2022/lib/services/models/object3D.service.mjs +1 -1
- package/esm2022/lib/services/models/operation.service.mjs +1 -1
- package/esm2022/lib/services/models/organisation.service.mjs +1 -1
- package/esm2022/lib/services/models/plan.service.mjs +1 -1
- package/esm2022/lib/services/models/poi.service.mjs +27 -27
- package/esm2022/lib/services/models/profile.service.mjs +1 -1
- package/esm2022/lib/services/models/property.service.mjs +1 -1
- package/esm2022/lib/services/models/space.service.mjs +1 -1
- package/esm2022/lib/services/models/template.service.mjs +1 -1
- package/esm2022/lib/services/models/ticket.service.mjs +1 -1
- package/esm2022/lib/services/models/visit.service.mjs +1 -1
- package/esm2022/lib/services/models/zone.service.mjs +1 -1
- package/esm2022/lib/services/navigator.service.mjs +1 -1
- package/esm2022/lib/services/s3.service.mjs +1 -1
- package/esm2022/lib/services/search.service.mjs +1 -1
- package/esm2022/lib/services/support.service.mjs +1 -1
- package/esm2022/lib/services/sweep-locator.service.mjs +1 -1
- package/esm2022/lib/services/tag.service.mjs +16 -16
- package/esm2022/lib/services/threejs-import.service.mjs +1 -1
- package/esm2022/lib/services/threejs.service.mjs +1 -1
- package/esm2022/lib/services/user.service.mjs +1 -1
- package/esm2022/lib/services/utils/matterport-framing.util.mjs +63 -0
- package/esm2022/lib/services/utils/matterport-transform.util.mjs +1 -1
- package/esm2022/lib/services/validators.service.mjs +1 -1
- package/esm2022/lib/services/viewer.service.mjs +1 -1
- package/esm2022/lib/services/zone-drawer.service.mjs +1 -1
- package/esm2022/lib/services/zoneChange.service.mjs +1 -1
- package/esm2022/lib/tokens/matterport-sdk-key.token.mjs +1 -1
- package/esm2022/lib/types.service.mjs +3 -1
- package/esm2022/lib/validators/email.directive.mjs +1 -1
- package/esm2022/lib/validators/no-empty.directive.mjs +1 -1
- package/esm2022/lib/validators/number.directive.mjs +1 -1
- package/esm2022/lib/validators/text.directive.mjs +1 -1
- package/esm2022/public-api.mjs +1 -1
- package/fesm2022/smarterplan-ngx-smarterplan-core.mjs +1192 -263
- package/fesm2022/smarterplan-ngx-smarterplan-core.mjs.map +1 -1
- package/lib/services/matterport-object3d.service.d.ts +125 -5
- package/lib/services/matterport.service.d.ts +106 -7
- package/lib/services/utils/matterport-framing.util.d.ts +40 -0
- package/lib/types.service.d.ts +42 -1
- package/package.json +1 -1
- package/src/assets/vs-app.json +67 -67
|
@@ -1030,4 +1030,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
1030
1030
|
type: Inject,
|
|
1031
1031
|
args: ['config']
|
|
1032
1032
|
}] }, { type: i1.PoiService }, { type: i2.MatterportService }, { type: i3.ThreeJsService }, { type: i4.SweepLocatorService }] });
|
|
1033
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL3NlcnZpY2VzL3ZpZXdlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFDQUFxQztBQUNyQyw4QkFBOEI7QUFDOUIseUNBQXlDO0FBQ3pDLDJDQUEyQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBSy9CLE9BQU8sRUFHTCxrQkFBa0IsRUFDbEIsT0FBTyxFQUtQLFFBQVEsR0FDVCxNQUFNLGtCQUFrQixDQUFDO0FBRTFCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlEQUF5RCxDQUFDO0FBQ2pILE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBRXRILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDN0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLHFCQUFxQixFQUFFLHdCQUF3QixFQUFrQixNQUFNLG9CQUFvQixDQUFDOzs7Ozs7O0FBTTFILE1BQU0sT0FBTyxhQUFhO0lBOEV1QjtJQUNWO0lBQzNCO0lBQ0E7SUFDQTtJQUNBO0lBbEZGLFVBQVUsR0FBVyxZQUFZLENBQUM7SUFFbkMsY0FBYyxDQUFTO0lBRXRCLE9BQU8sQ0FBUztJQUVqQixVQUFVLEdBS1osSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUVaLFlBQVksR0FBcUIsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUUvQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBRWpCLGFBQWEsR0FBRyxLQUFLLENBQUM7SUFFN0I7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QyxRQUFRLEdBQUcsSUFBSSxDQUFDO2dCQUNyQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztnQkFDeEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7Z0JBRTNCLE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzNCLENBQUM7WUFDRCxPQUFPLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxlQUF5QjtRQUM3QyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsaUJBQWlCLENBQUMscUJBQXFCLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDaEUsQ0FBQztJQUNILENBQUM7SUFFRCwyQkFBMkIsQ0FBQyxZQUFxQjtRQUMvQyxJQUFJLENBQUMsY0FBYyxHQUFHLFlBQVksQ0FBQztJQUNyQyxDQUFDO0lBRUQsMEJBQTBCO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUM3QixDQUFDO3dHQXpxQ1UsYUFBYSxrQkE4RWQsa0JBQWtCLGFBQ2xCLFFBQVE7NEdBL0VQLGFBQWEsY0FGWixNQUFNOzs0RkFFUCxhQUFhO2tCQUh6QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBK0VJLE1BQU07MkJBQUMsa0JBQWtCOzswQkFDekIsTUFBTTsyQkFBQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tYXdhaXQtaW4tbG9vcCAqL1xuLyogZXNsaW50LWRpc2FibGUgY2FtZWxjYXNlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlcnNjb3JlLWRhbmdsZSAqL1xuLyogZXNsaW50LWRpc2FibGUgY2xhc3MtbWV0aG9kcy11c2UtdGhpcyAqL1xuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNQVRURVJQT1JUX1NES19LRVkgfSBmcm9tICcuLi90b2tlbnMvbWF0dGVycG9ydC1zZGsta2V5LnRva2VuJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE1hdHRlcnBvcnRTZXJ2aWNlIH0gZnJvbSAnLi9tYXR0ZXJwb3J0LnNlcnZpY2UnO1xuaW1wb3J0IHsgVGhyZWVKc01lYXN1cmVtZW50LCBUaHJlZUpzU2VydmljZSB9IGZyb20gJy4vdGhyZWVqcy5zZXJ2aWNlJztcbmltcG9ydCB7IFN3ZWVwTG9jYXRvclNlcnZpY2UgfSBmcm9tICcuL3N3ZWVwLWxvY2F0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBCYXNlVGFnU2VydmljZSB9IGZyb20gJy4vdGFnLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgRGJPYmplY3RUeXBlLFxuICBQT0ksXG4gIFZpZXdlckludGVyYWN0aW9ucyxcbiAgUG9pVHlwZSxcbiAgQ29tbWVudCxcbiAgRXF1aXBtZW50LFxuICBUaWNrZXQsXG4gIEZlYXR1cmUsXG4gIFNwTW9kdWxlLFxufSBmcm9tICcuLi90eXBlcy5zZXJ2aWNlJztcbmltcG9ydCB7IFBvaVNlcnZpY2UgfSBmcm9tICcuL21vZGVscy9wb2kuc2VydmljZSc7XG5pbXBvcnQgeyBtYWtlU2VjdXJpdHlDYW1lcmEsIHNlY3VyaXR5Q2FtZXJhVHlwZSB9IGZyb20gXCIuLi9tYXR0ZXJwb3J0LWV4dGVuc2lvbnMvc2VjdXJpdHktY2FtZXJhL1NlY3VyaXR5Q2FtZXJhXCI7XG5pbXBvcnQgeyBWaWV3RnJ1c3R1bU1lc2hUeXBlLCBtYWtlVmlld0ZydXN0dW1NZXNoIH0gZnJvbSBcIi4uL21hdHRlcnBvcnQtZXh0ZW5zaW9ucy92aWV3LWZydXN0dW0tbWVzaC9WaWV3RnJ1c3R1bU1lc2hcIjtcbmltcG9ydCB7IE5hdmlnYXRvclNlcnZpY2UgfSBmcm9tICcuL25hdmlnYXRvci5zZXJ2aWNlJztcbmltcG9ydCB7IGdldFNpZ25lZEZpbGUgfSBmcm9tICcuL3MzLnNlcnZpY2UnO1xuaW1wb3J0IHsgZ2V0VGhyZWVKc1BvaU9yaWdpbiwgcGFyc2VUaHJlZUpzUGxhY2VtZW50LCBUSFJFRUpTX01PREVMX1VQX09QVElPTlMsIFRocmVlSnNNb2RlbFVwIH0gZnJvbSAnLi4vaGVscGVycy5zZXJ2aWNlJztcbmltcG9ydCB7IENvbmZpZyB9IGZyb20gJy4uL2NvbmZpZyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBWaWV3ZXJTZXJ2aWNlIHtcbiAgcHJpdmF0ZSB2aWV3ZXJNb2RlOiBzdHJpbmcgPSAnTWF0dGVycG9ydCc7XG5cbiAgcHVibGljIGN1cnJlbnRNb2RlbDNEOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSB0b3VyVXJsOiBzdHJpbmc7XG5cbiAgcHVibGljIHZpZXdlcklzT246IFN1YmplY3Q8e1xuICAgIHNwYWNlSUQ6IHN0cmluZyB8IG51bGw7XG4gICAgbW9kZWwzRDogc3RyaW5nIHwgbnVsbDtcbiAgICBzd2VlcDogc3RyaW5nIHwgbnVsbDtcbiAgICByb3RhdGlvbjogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgfSB8IG51bGw7XG4gIH0+ID0gbmV3IFN1YmplY3QoKTtcblxuICBwdWJsaWMgZGF0YUlzTG9hZGVkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3QoKTtcblxuICBwdWJsaWMgaXNMb2FkZWQgPSBmYWxzZTtcblxuICBwdWJsaWMgc2hvd2luZ1ZpZXdlciA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBUaGUgc3BhY2UgYmVpbmcgdmlld2VkLCB3aGljaGV2ZXIgdmlld2VyIGlzIHNob3dpbmcgaXQuXG4gICAqXG4gICAqIE1hdHRlcnBvcnRTZXJ2aWNlIGNhcnJpZXMgaXRzIG93biBjb3B5LCBzZXQgd2hpbGUgaXRzIFNESyBjb25uZWN0cyAtIHdoaWNoIG5ldmVyIGhhcHBlbnMgaW5cbiAgICogVGhyZWUuanMgbW9kZS4gQW55dGhpbmcgdGhhdCByZWFkcyBvbmx5IHRoYXQgb25lIHNpbGVudGx5IGRvZXMgbm90aGluZyBmb3IgYSAzRCBtb2RlbCwgYW5kIHRoZVxuICAgKiBsaXN0cyB0aGF0IGZlZWQgdGFncyBhcmUgZXhhY3RseSB0aGF0LlxuICAgKi9cbiAgcHVibGljIGN1cnJlbnRTcGFjZUlEOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogVGhlIFRocmVlLmpzIGNhcHR1cmUgb24gc2NyZWVuLCBvciBudWxsIGluIE1hdHRlcnBvcnQuXG4gICAqXG4gICAqIEEgc3BhY2UgY2FuIGhvbGQgc2V2ZXJhbCAzRCBtb2RlbHMuIEEgdGFnIHBsYWNlZCBpbiBvbmUgaXMgcmVjb3JkZWQgd2l0aCBpdCwgc28gdGhhdCBtb2RlbFxuICAgKiBrZWVwcyBzaG93aW5nIHRoZSB0YWcgd2hhdGV2ZXIgc2VsZWN0aW9uIG9mIHRhZ3MgaXQgaXMgb3RoZXJ3aXNlIHJlc3RyaWN0ZWQgdG8uXG4gICAqL1xuICBwdWJsaWMgY3VycmVudENhcHR1cmVJRDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIDNEIG1vZGVsIG9uIHNjcmVlbiBoYXMgYmVlbiBjYWxpYnJhdGVkIGFnYWluc3QgdGhlIHRhZ3MnIHNoYXJlZCBzcGFjZS5cbiAgICpcbiAgICogQ2FsaWJyYXRpbmcgaXMgd2hhdCBzYXlzIHRoZSBtb2RlbCBhbmQgdGhhdCBzcGFjZSBvdmVybGFwLiBVbnRpbCB0aGVuIGEgdGFnIHBsYWNlZCBpbiB0aGUgbW9kZWxcbiAgICogaXMgaW4gdGhlIG1vZGVsJ3Mgb3duIGNvb3JkaW5hdGVzOiBpdCBiZWxvbmdzIHRvIG5vIE1hdHRlcnBvcnQgc3dlZXAgYW5kIHRvIG5vIG90aGVyIHZpc2l0LlxuICAgKi9cbiAgcHJpdmF0ZSB0aHJlZUpzQ2FsaWJyYXRlZCA9IGZhbHNlO1xuXG4gIHB1YmxpYyBzd2VlcFRvTW92ZTogc3RyaW5nIHwgbnVsbDtcblxuICBwdWJsaWMgcm90YXRpb25Ub01vdmU6IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IH0gfCBudWxsO1xuXG4gIHB1YmxpYyBnb1RvVHJpZ2dlcmVkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcblxuICBwdWJsaWMgdG9vbGJveFN0YXRlcyA9IHtcbiAgICBkb2xsaG91c2U6IHtcbiAgICAgIHN0YXQ6IGZhbHNlLFxuICAgICAgaWNvbklkOiAndWktZG9sbGhvdXNlJyxcbiAgICAgIHNob3coKSB7XG4gICAgICB9LFxuICAgICAgaGlkZSgpIHtcbiAgICAgIH0sXG4gICAgfSxcbiAgICBmbG9vcnBsYW46IHtcbiAgICAgIHN0YXQ6IGZhbHNlLFxuICAgIH0sXG4gICAgbWVzdXJlOiB7XG4gICAgICBzdGF0OiBmYWxzZSxcbiAgICAgIGljb25JZDogJ3VpLW1lc3VyZScsXG4gICAgICBzaG93KCkge1xuICAgICAgfSxcbiAgICAgIGhpZGUoKSB7XG4gICAgICB9LFxuICAgIH0sXG4gICAgZmlsdGVyOiB7XG4gICAgICBzdGF0OiBmYWxzZSxcbiAgICB9LFxuICB9O1xuICBwcml2YXRlIGlzT2JqZWN0TG9hZGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChNQVRURVJQT1JUX1NES19LRVkpIHByaXZhdGUgcmVhZG9ubHkgc2RrS2V5OiBzdHJpbmcsXG4gICAgQEluamVjdCgnY29uZmlnJykgcHJpdmF0ZSByZWFkb25seSBjb25maWc6IENvbmZpZyxcbiAgICBwcml2YXRlIHBvaVNlcnZpY2U6IFBvaVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtYXR0ZXJwb3J0U2VydmljZTogTWF0dGVycG9ydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0aHJlZUpzU2VydmljZTogVGhyZWVKc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBzd2VlcExvY2F0b3I6IFN3ZWVwTG9jYXRvclNlcnZpY2UsXG4gICkge1xuICAgIHRoaXMuc2V0TW9kZSgnTWF0dGVycG9ydCcpO1xuICB9XG5cblxuICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgVXRpbHNcbiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgY2hlY2tNb2RlKGluZGV4TW9kZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMudmlld2VyTW9kZSA9PT0gaW5kZXhNb2RlO1xuICB9XG5cbiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgIFNldHRlcnNcbiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgc2V0TW9kZShpbmRleE1vZGU6IHN0cmluZykge1xuICAgIC8vIExlYXZpbmcgVGhyZWUuanMgbWVhbnMgbm8gVGhyZWUuanMgd29yayBzaG91bGQgc3RpbGwgYmUgcnVubmluZy4gVGhlIHNlcnZpY2UgYmVoaW5kIGl0IGlzIGFcbiAgICAvLyBzaW5nbGV0b24gYW5kIG91dGxpdmVzIHRoZSBjb21wb25lbnQsIHNvIGEgZG93bmxvYWQgc3RhcnRlZCBmb3IgYSBtb2RlbCB0aGUgdXNlciBoYXMgbmF2aWdhdGVkXG4gICAgLy8gYXdheSBmcm9tIHdvdWxkIG90aGVyd2lzZSBmaW5pc2ggLSBhbmQgaXRzIHBhcnNlIHdvdWxkIGhvbGQgdGhlIG1haW4gdGhyZWFkIGZvciBzZWNvbmRzLFxuICAgIC8vIHN0YWxsaW5nIHdoYXRldmVyIHZpZXdlciB0aGV5IGFjdHVhbGx5IG9wZW5lZC5cbiAgICBpZiAodGhpcy52aWV3ZXJNb2RlID09PSAndGhyZWVqcycgJiYgaW5kZXhNb2RlICE9PSAndGhyZWVqcycpIHtcbiAgICAgIHRoaXMudGhyZWVKc1NlcnZpY2UuZGVzdHJveSgpO1xuICAgIH1cbiAgICB0aGlzLnZpZXdlck1vZGUgPSBpbmRleE1vZGU7XG4gIH1cblxuICBzZXRUb3VyVXJsKG9wdGlvbnM6IHtcbiAgICBtb2RlbDNkOiBzdHJpbmcsXG4gICAgc2hvd0ljb25QbGFuPzogYm9vbGVhbixcbiAgICBzaG93SWNvbkRvbGxob3VzZT86IGJvb2xlYW4sXG4gICAgc2hvd0ljb25GbG9vcnM/OiBib29sZWFuLFxuICAgIHNob3dRdWlja1N0YXJ0PzogYm9vbGVhbixcbiAgICBzaG93RnVsbHNjcmVlbj86IGJvb2xlYW4sXG4gICAgc2hvd0d1aWRlZFRvdXI/OiBib29sZWFuLFxuICAgIHNob3dIaWdobGlnaHRSZWVsPzogYm9vbGVhbixcbiAgICBzaG93RGVmdXJuaXNoPzogYm9vbGVhbixcbiAgICBzaG93Um9vbU1lYXN1cmVtZW50cz86IGJvb2xlYW5cbiAgfSkge1xuICAgIGNvbnN0IHtcbiAgICAgIG1vZGVsM2QsXG4gICAgICBzaG93SWNvblBsYW4gPSB0cnVlLFxuICAgICAgc2hvd0ljb25Eb2xsaG91c2UgPSB0cnVlLFxuICAgICAgc2hvd0ljb25GbG9vcnMgPSB0cnVlLFxuICAgICAgc2hvd1F1aWNrU3RhcnQgPSB0cnVlLFxuICAgICAgc2hvd0Z1bGxzY3JlZW4gPSB0cnVlLFxuICAgICAgc2hvd0d1aWRlZFRvdXIgPSB0cnVlLFxuICAgICAgc2hvd0hpZ2hsaWdodFJlZWwgPSB0cnVlLFxuICAgICAgc2hvd0RlZnVybmlzaCA9IHRydWUsXG4gICAgICBzaG93Um9vbU1lYXN1cmVtZW50cyA9IHRydWVcbiAgICB9ID0gb3B0aW9ucztcblxuICAgIGNvbnN0IGJhc2VVcmwgPSBgL2Fzc2V0cy9idW5kbGUvc2hvd2Nhc2UuaHRtbGA7XG5cbiAgICBjb25zdCBwYXJhbXM6IHN0cmluZ1tdID0gW107XG5cbiAgICAvLyBNb2TDqGxlXG4gICAgcGFyYW1zLnB1c2goYG09JHttb2RlbDNkfWApO1xuXG4gICAgLy8gQ29tcG9ydGVtZW50IGfDqW7DqXJhbFxuICAgIHBhcmFtcy5wdXNoKGBwbGF5PTFgKTtcbiAgICBwYXJhbXMucHVzaChgdWk9MWApO1xuICAgIHBhcmFtcy5wdXNoKGB0aXRsZT0wYCk7XG4gICAgcGFyYW1zLnB1c2goYGxvZz0wYCk7XG4gICAgcGFyYW1zLnB1c2goYGJyYW5kPTBgKTtcbiAgICBwYXJhbXMucHVzaChgc2VhcmNoPTBgKTtcbiAgICBwYXJhbXMucHVzaChgYXBwbGljYXRpb25LZXk9JHt0aGlzLnNka0tleX1gKTtcbiAgICBwYXJhbXMucHVzaChgbWRzPTBgKTtcblxuICAgIC8vIFF1aWNrIHN0YXJ0XG4gICAgaWYgKHNob3dRdWlja1N0YXJ0KSB7XG4gICAgICBwYXJhbXMucHVzaChgcXM9MWApO1xuICAgIH1cblxuICAgIC8vIEZsb29ycGxhbiAocGxhbilcbiAgICBpZiAoIXNob3dJY29uUGxhbikge1xuICAgICAgcGFyYW1zLnB1c2goYGZwPTBgKTtcbiAgICB9XG5cbiAgICAvLyBEb2xsaG91c2UgKG1haXNvbi9wb3Vww6llKVxuICAgIGlmICghc2hvd0ljb25Eb2xsaG91c2UpIHtcbiAgICAgIHBhcmFtcy5wdXNoKGBkaD0wYCk7XG4gICAgfVxuXG4gICAgLy8gU8OpbGVjdGV1ciBk4oCZw6l0YWdlc1xuICAgIGlmICghc2hvd0ljb25GbG9vcnMpIHtcbiAgICAgIHBhcmFtcy5wdXNoKGBzZj0wYCk7XG4gICAgfVxuXG4gICAgLy8gR3VpZGVkIHRvdXJcbiAgICBpZiAoIXNob3dHdWlkZWRUb3VyKSB7XG4gICAgICBwYXJhbXMucHVzaChgZ3Q9MGApO1xuICAgIH1cblxuICAgIC8vIEhpZ2hsaWdodCByZWVsIChiYW5kZSBkdSBiYXMpXG4gICAgaWYgKCFzaG93SGlnaGxpZ2h0UmVlbCkge1xuICAgICAgLy8gU2Vsb24gdG9uIGJ1bmRsZSA6IGhyPTEgb3UgaHI9MCBtYXNxdWVcbiAgICAgIHBhcmFtcy5wdXNoKGBocj0xYCk7XG4gICAgfVxuXG4gICAgLy8gUGxlaW4gw6ljcmFuXG4gICAgaWYgKCFzaG93RnVsbHNjcmVlbikge1xuICAgICAgcGFyYW1zLnB1c2goYGZzPTBgKTtcbiAgICB9XG5cbiAgICAvLyBEZWZ1cm5pc2hcbiAgICBpZiAoc2hvd0RlZnVybmlzaCkge1xuICAgICAgcGFyYW1zLnB1c2goYGFkPTFgKTtcbiAgICB9XG5cbiAgICAvLyBSb29tIE1lYXN1cmVtZW50c1xuICAgIGlmIChzaG93Um9vbU1lYXN1cmVtZW50cykge1xuICAgICAgcGFyYW1zLnB1c2goYG1lYXN1cmVtZW50cz0xYCk7XG4gICAgfVxuXG4gICAgdGhpcy50b3VyVXJsID0gYCR7YmFzZVVybH0/JHtwYXJhbXMuam9pbihcIiZcIil9YDtcbiAgfVxuXG4gIGFzeW5jIGNsZWFyQWxsKCkge1xuICAgIC8vIHRoaXMuc3dlZXBUb01vdmUgPSBudWxsO1xuICAgIC8vIHRoaXMucm90YXRpb25Ub01vdmUgPSBudWxsO1xuICAgIGlmICh0aGlzLmNoZWNrTW9kZSgndGhyZWVqcycpKSB7XG4gICAgICB0aGlzLnRocmVlSnNTZXJ2aWNlLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMuc2hvd2luZ1ZpZXdlciA9IGZhbHNlO1xuICAgICAgdGhpcy5pc0xvYWRlZCA9IGZhbHNlO1xuICAgICAgLy8gTWlycm9ycyB0aGUgTWF0dGVycG9ydCBicmFuY2g6IHRoZSBzcGFjZSBpcyBubyBsb25nZXIgb24gc2NyZWVuLCBzbyB3aGF0ZXZlciB3YXMgbG9hZGVkXG4gICAgICAvLyBmb3IgaXQgaGFzIHRvIGJlIGRyb3BwZWQgYmVmb3JlIGFub3RoZXIgdmlzaXQgb3BlbnMuXG4gICAgICB0aGlzLnZpZXdlcklzT24ubmV4dCh7XG4gICAgICAgIHNwYWNlSUQ6IG51bGwsXG4gICAgICAgIG1vZGVsM0Q6IG51bGwsXG4gICAgICAgIHN3ZWVwOiBudWxsLFxuICAgICAgICByb3RhdGlvbjogbnVsbCxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAodGhpcy5jaGVja01vZGUoJ01hdHRlcnBvcnQnKSkge1xuICAgICAgdGhpcy5zaG93aW5nVmlld2VyID0gZmFsc2U7XG4gICAgICB0aGlzLmlzTG9hZGVkID0gZmFsc2U7XG4gICAgICBhd2FpdCB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmNsZWFyQWxsKCk7XG4gICAgICB0aGlzLnZpZXdlcklzT24ubmV4dCh7XG4gICAgICAgIHNwYWNlSUQ6IG51bGwsXG4gICAgICAgIG1vZGVsM0Q6IG51bGwsXG4gICAgICAgIHN3ZWVwOiBudWxsLFxuICAgICAgICByb3RhdGlvbjogbnVsbCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICBHZXR0ZXJzXG4gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gIGdldE1vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudmlld2VyTW9kZTtcbiAgfVxuXG4gIGdldFZpZXdlclNlbGVjdGVkU2VydmljZSgpIHtcbiAgICAvLyBNYXR0ZXJwb3J0XG4gICAgLy8gaWYgKHRoaXMuY2hlY2tNb2RlKFwiTWF0dGVycG9ydFwiKSkge1xuICAgIC8vICAgICByZXR1cm4gdGhpcy5nZXRNYXR0ZXJwb3J0U2VydmljZSgpO1xuICAgIC8vIH1cbiAgICByZXR1cm4gdGhpcy5nZXRNYXR0ZXJwb3J0U2VydmljZSgpO1xuICB9XG5cbiAgZ2V0VG91clVybCgpIHtcbiAgICByZXR1cm4gdGhpcy50b3VyVXJsO1xuICB9XG5cbiAgZ2V0TWF0dGVycG9ydFNlcnZpY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMubWF0dGVycG9ydFNlcnZpY2U7XG4gIH1cblxuICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgR2VuZXJpYyBNYWluIGFjdGlvbiBmdW5jdGlvbnNcbiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4gIHNldFN3ZWVwVG9Nb3ZlKHN3ZWVwOiBzdHJpbmcpIHtcbiAgICB0aGlzLnN3ZWVwVG9Nb3ZlID0gc3dlZXA7XG4gIH1cblxuICBzZXRSb3RhdGlvblRvTW92ZShyb3RhdGlvbjogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgfSkge1xuICAgIHRoaXMucm90YXRpb25Ub01vdmUgPSByb3RhdGlvbjtcbiAgfVxuXG5cbiAgYXN5bmMgYWN0aW9uX21vdmVfdG9fdGFnKGVsZW1lbnRJZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgLy8gTWF0dGVycG9ydFxuICAgIGlmICh0aGlzLmNoZWNrTW9kZSgnTWF0dGVycG9ydCcpKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmdldFRhZ0Zyb21FbGVtZW50SWQoZWxlbWVudElkKTtcbiAgICAgIGlmIChyZXN1bHQudGFnKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubWF0dGVycG9ydFNlcnZpY2UuZ29Ub1RhZyhyZXN1bHQudGFnKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBpZiAocmVzdWx0LnN3ZWVwKSB7XG4gICAgICAgIHRoaXMuc3dlZXBUb01vdmUgPSByZXN1bHQuc3dlZXA7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8vIFdpdGhvdXQgdGhpcyB0aGUgY2FsbGVyIGZhbGxzIHRocm91Z2ggdG8gZ2V0TW9kZWwzZEFuZFN3ZWVwLCB3aGljaCByZXNvbHZlcyBhIHZpc2l0IGZyb20gdGhlXG4gICAgLy8gUE9JJ3Mgc3dlZXAgLSBhIFRocmVlLmpzIFBPSSBoYXMgbm9uZSwgc28gaXQgZmFpbHMgYW5kIHJlcG9ydHMgdGhlIG1vZGVsIGFzIHVucmVhY2hhYmxlIGV2ZW5cbiAgICAvLyB0aG91Z2ggdGhlIHRhZyBpcyBvbiBzY3JlZW4uXG4gICAgaWYgKHRoaXMuY2hlY2tNb2RlKCd0aHJlZWpzJykgJiYgdGhpcy50aHJlZUpzU2VydmljZS5oYXNUYWcoZWxlbWVudElkKSkge1xuICAgICAgdGhpcy50aHJlZUpzU2VydmljZS5nb1RvVGFnKGVsZW1lbnRJZCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgTWF0dGVydGFncyB0byBWaWV3ZXJcbiAgICogQHBhcmFtIG9iamVjdHMgTGlzdCBvZiBvYmplY3RzICh0aWNrZXRzLCBlcXVpcG1lbnRzKSBldGMgdG8gYmUgYWRkZWQgYXMgTWF0dGVydGFnc1xuICAgKi9cbiAgYXN5bmMgYWRkT2JqZWN0VGFnc1RvVmlld2VyKG9iamVjdHM6IERiT2JqZWN0VHlwZVtdKSB7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBvYmplY3RzLm1hcChhc3luYyAob2JqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHBvaSA9IGF3YWl0IHRoaXMucG9pU2VydmljZS5nZXRQb2lCeUVsZW1lbnRJZChvYmplY3QuaWQhKTtcbiAgICAgICAgaWYgKHBvaSAmJiBwb2kuY29vcmRpbmF0ZSkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuYWN0aW9uQWRkT2JqZWN0RnJvbVBPSShvYmplY3QsIHBvaSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgICAvLyBOZXdseSBjcmVhdGVkIHRhZ3MgaGF2ZSBubyBvcGFjaXR5L2FsbG93QWN0aW9uIGFwcGxpZWQgeWV0IChvbmx5IHNldCBieVxuICAgIC8vIHVwZGF0ZVRhZ3NWaXNpYmlsaXR5Rm9yQ29udGV4dCwgd2hpY2ggcnVucyBvbiBNb2RlL1N3ZWVwL0Zsb29yL1Jvb20vQ2FtZXJhXG4gICAgLy8gZXZlbnRzKS4gSWYgdGhpcyBiYXRjaCBsb2FkZWQgYWZ0ZXIgdGhvc2UgZmlyZWQsIHRoZSB0YWdzIHN0YXkgaW4gd2hhdGV2ZXJcbiAgICAvLyBkZWZhdWx0IHN0YXRlIHRoZSBTREsgZ2F2ZSB0aGVtIHVudGlsIHNvbWV0aGluZyBlbHNlIG51ZGdlcyBhIHJlZnJlc2guXG4gICAgaWYgKHRoaXMuY2hlY2tNb2RlKCdNYXR0ZXJwb3J0JykpIHtcbiAgICAgIHRoaXMubWF0dGVycG9ydFNlcnZpY2UucmVmcmVzaFRhZ3NWaXNpYmlsaXR5KCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgYWN0aW9uQWRkT2JqZWN0RnJvbVBPSShvYmplY3Q6IERiT2JqZWN0VHlwZSwgcG9pOiBQT0kpIHtcbiAgICBpZiAodGhpcy5jaGVja01vZGUoJ01hdHRlcnBvcnQnKSkge1xuICAgICAgcmV0dXJuIHRoaXMubWF0dGVycG9ydFNlcnZpY2UuY3JlYXRlTWF0dGVydGFnRnJvbVBPSShcbiAgICAgICAgcG9pLnR5cGUhLFxuICAgICAgICBvYmplY3QsXG4gICAgICAgIHBvaVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY2hlY2tNb2RlKCd0aHJlZWpzJykpIHtcbiAgICAgIHJldHVybiB0aGlzLmFkZFRocmVlSnNUYWdGcm9tUE9JKG9iamVjdCwgcG9pKTtcbiAgICB9XG4gICAgLy8gQ3VwaXhcbiAgICAvLyBUT0RPXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIERyYXdzIGEgUE9JIGFzIGEgdGFnIGluIHRoZSBUaHJlZS5qcyBzY2VuZS5cbiAgICpcbiAgICogQm90aCB2aWV3ZXJzIGFyZSBmZWQgYnkgdGhlIHNhbWUgc3Vic2NyaXB0aW9ucyBvbiB0aGUgc2FtZSBQT0kgcmVjb3Jkcywgc28gYSB0YWcgY3JlYXRlZCBpblxuICAgKiBlaXRoZXIgb25lIHNob3dzIHVwIGluIHRoZSBvdGhlciB3aXRob3V0IGFueSBzeW5jaW5nIG9mIGl0cyBvd24gLSB0aGlzIGlzIGp1c3QgdGhlIFRocmVlLmpzIGVuZFxuICAgKiBvZiB0aGUgcGlwZWxpbmUgdGhhdCBhbHJlYWR5IGRyaXZlcyBNYXR0ZXJwb3J0LlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBhZGRUaHJlZUpzVGFnRnJvbVBPSShvYmplY3Q6IERiT2JqZWN0VHlwZSwgcG9pOiBQT0kpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXBvaS5jb29yZGluYXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBwb3NpdGlvbjogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgejogbnVtYmVyIH07XG4gICAgdHJ5IHtcbiAgICAgIHBvc2l0aW9uID0gSlNPTi5wYXJzZShwb2kuY29vcmRpbmF0ZSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICBjb25zb2xlLndhcm4oYFZpZXdlclNlcnZpY2U6IHVucGFyc2VhYmxlIFBPSSBjb29yZGluYXRlIGZvciBlbGVtZW50ICR7b2JqZWN0LmlkfTpgLCBwb2kuY29vcmRpbmF0ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghW3Bvc2l0aW9uPy54LCBwb3NpdGlvbj8ueSwgcG9zaXRpb24/LnpdLmV2ZXJ5KCh2YWx1ZSkgPT4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBvcmlnaW4gPSBnZXRUaHJlZUpzUG9pT3JpZ2luKHBvaSk7XG4gICAgdGhpcy50aHJlZUpzU2VydmljZS51cHNlcnRUYWcoe1xuICAgICAgaWQ6IG9iamVjdC5pZCxcbiAgICAgIHBvc2l0aW9uLFxuICAgICAgcG9pVHlwZTogcG9pLnR5cGUsXG4gICAgICBsYWJlbDogb2JqZWN0Lm5hbWUgPz8gb2JqZWN0LnRpdGxlID8/IG51bGwsXG4gICAgICBpY29uVXJsOiBhd2FpdCB0aGlzLnJlc29sdmVUYWdJY29uVXJsKHBvaSksXG4gICAgICBvcmlnaW5DYXB0dXJlSUQ6IG9yaWdpbj8uY2FwdHVyZUlEID8/IG51bGwsXG4gICAgICBmcmFtZTogb3JpZ2luPy5mcmFtZSA/PyBudWxsLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0b3JlcyB0aGUgdGFncyB0aGUgbGFzdCBjYWxpYnJhdGlvbiBoYWQgdG8gcmV3cml0ZSwgYW5kIHJldHVybnMgaG93IG1hbnkgaXQgY291bGQgbm90LlxuICAgKlxuICAgKiBDYWxpYnJhdGluZyBrZWVwcyB0aGUgdGFncyBwbGFjZWQgaW4gdGhpcyBtb2RlbCB3aGVyZSB0aGV5IGFyZSBieSBjaGFuZ2luZyB0aGVpciBjb29yZGluYXRlc1xuICAgKiByYXRoZXIgdGhhbiB0aGVpciBwbGFjZSAoc2VlIFRocmVlSnNTZXJ2aWNlLmFwcGx5QWxpZ25tZW50S2VlcGluZ093blRhZ3MpLiBUaGUgc2NlbmUgYWxyZWFkeVxuICAgKiBzaG93cyB0aGUgcmVzdWx0OyB0aGlzIHdyaXRlcyBpdCBkb3duLiBDYWxsIGl0IG9uY2UgdGhlIGNhbGlicmF0aW9uIGl0c2VsZiBpcyBzdG9yZWQgLSB3aXRoIHRoZVxuICAgKiBvbGQgY2FsaWJyYXRpb24gc3RpbGwgb24gcmVjb3JkLCB0aGUgb2xkIGNvb3JkaW5hdGVzIGFyZSB0aGUgb25lcyB0aGF0IG1hdGNoIGl0LlxuICAgKi9cbiAgYXN5bmMgcGVyc2lzdFJlYmFzZWRUaHJlZUpzVGFncygpOiBQcm9taXNlPHsgc3RvcmVkOiBudW1iZXI7IGZhaWxlZDogbnVtYmVyIH0+IHtcbiAgICBjb25zdCByZWJhc2VkID0gdGhpcy50aHJlZUpzU2VydmljZS50YWtlUmViYXNlZFRhZ3MoKTtcbiAgICBsZXQgZmFpbGVkID0gMDtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChyZWJhc2VkLm1hcChhc3luYyAodGFnKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBwb2kgPSBhd2FpdCB0aGlzLnBvaVNlcnZpY2UuZ2V0UG9pQnlFbGVtZW50SWQodGFnLmlkKTtcbiAgICAgICAgaWYgKCFwb2k/LmlkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCBtZXRhZGF0YTogYW55ID0ge307XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbWV0YWRhdGEgPSAocG9pLm1ldGFkYXRhID8gSlNPTi5wYXJzZShwb2kubWV0YWRhdGEpIDoge30pID8/IHt9O1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICBtZXRhZGF0YSA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIC8vIEluIHRoZSBzaGFyZWQgc3BhY2UgZnJvbSBoZXJlIG9uLCBzbyBubyBsb25nZXIgbWFya2VkIGFzIGJlaW5nIGluIHRoZSBtb2RlbCdzIG93bi5cbiAgICAgICAgZGVsZXRlIG1ldGFkYXRhLmZyYW1lO1xuICAgICAgICBpZiAobWV0YWRhdGEubm9ybWFsKSB7XG4gICAgICAgICAgbWV0YWRhdGEubm9ybWFsID0gdGFnLnJvdGF0ZURpcmVjdGlvbihtZXRhZGF0YS5ub3JtYWwpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRDYXB0dXJlSUQpIHtcbiAgICAgICAgICBtZXRhZGF0YS5jYXB0dXJlSUQgPSB0aGlzLmN1cnJlbnRDYXB0dXJlSUQ7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5wb2lTZXJ2aWNlLnVwZGF0ZVBvaSh7XG4gICAgICAgICAgaWQ6IHBvaS5pZCxcbiAgICAgICAgICBjb29yZGluYXRlOiBKU09OLnN0cmluZ2lmeSh0YWcucG9zaXRpb24pLFxuICAgICAgICAgIG1ldGFkYXRhOiBKU09OLnN0cmluZ2lmeShtZXRhZGF0YSksXG4gICAgICAgICAgLy8gSXRzIHBsYWNlIGluIHRoZSB0b3VyIG1heSBoYXZlIGNoYW5nZWQgd2l0aCBpdHMgY29vcmRpbmF0ZXMgLSBvciBpdCBtYXkgaGF2ZSBvbmUgZm9yXG4gICAgICAgICAgLy8gdGhlIGZpcnN0IHRpbWUsIG5vdyB0aGF0IHRoZSBtb2RlbCBpcyBjYWxpYnJhdGVkLlxuICAgICAgICAgIG1hdHRlcnBvcnRTd2VlcElEOiBhd2FpdCB0aGlzLmZpbmROZWFyZXN0U3dlZXBGb3JUaHJlZUpzKHRhZy5wb3NpdGlvbiksXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgZmFpbGVkICs9IDE7XG4gICAgICAgIGNvbnNvbGUud2FybihgVmlld2VyU2VydmljZTogY291bGQgbm90IHN0b3JlIHRoZSBuZXcgY29vcmRpbmF0ZXMgb2YgdGFnICR7dGFnLmlkfWAsIGVycm9yKTtcbiAgICAgIH1cbiAgICB9KSk7XG4gICAgcmV0dXJuIHsgc3RvcmVkOiByZWJhc2VkLmxlbmd0aCAtIGZhaWxlZCwgZmFpbGVkIH07XG4gIH1cblxuICAvKiogSG93IG1hbnkgdGFncyB0aGUgY2FsaWJyYXRpb24gd2Fsa3Rocm91Z2ggY291bGQgc3RpbGwgdXNlOiB0aGUgb25lcyBmcm9tIGVsc2V3aGVyZS4gKi9cbiAgZ2V0VGhyZWVKc0NhbGlicmF0aW9uQ2FuZGlkYXRlQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5jaGVja01vZGUoJ3RocmVlanMnKSA/IHRoaXMudGhyZWVKc1NlcnZpY2UuZ2V0Q2FsaWJyYXRpb25DYW5kaWRhdGVDb3VudCgpIDogMDtcbiAgfVxuXG4gIC8qKiBIb3cgbWFueSB0YWdzIGZyb20gZWxzZXdoZXJlIGFyZSBub3Qgb24gdGhlIDNEIG1vZGVsLCBhbmQgc28gYXJlIG5vdCBzaG93biBvbiBpdC4gKi9cbiAgZ2V0VGhyZWVKc09mZk1vZGVsVGFnQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5jaGVja01vZGUoJ3RocmVlanMnKSA/IHRoaXMudGhyZWVKc1NlcnZpY2UuZ2V0T2ZmTW9kZWxUYWdDb3VudCgpIDogMDtcbiAgfVxuXG4gIC8qKiBUaGUgdGFncyByZWdpc3RlcmVkIGluIHRoZSBUaHJlZS5qcyBzY2VuZSwgc2hvd24gb3Igbm90LiAqL1xuICBnZXRUaHJlZUpzVGFncygpIHtcbiAgICByZXR1cm4gdGhpcy5jaGVja01vZGUoJ3RocmVlanMnKSA/IHRoaXMudGhyZWVKc1NlcnZpY2UuZ2V0VGFncygpIDogW107XG4gIH1cblxuICAvKipcbiAgICogVGhlIGltYWdlIHRvIGRyYXcgYSB0YWcgd2l0aCwgbWlycm9yaW5nIHdoYXQgTWF0dGVycG9ydCBzaG93cyBmb3IgdGhlIHNhbWUgUE9JLlxuICAgKlxuICAgKiBNYXR0ZXJwb3J0IHJlZ2lzdGVycyBvbmUgdGV4dHVyZSBwZXIgdHlwZSAoYGljb24tdGlja2V0YCwgYGljb24tZXF1aXBtZW50YC4uLikgZnJvbSB0aGUgc2FtZVxuICAgKiBjb25maWcgZW50cmllcyB1c2VkIGhlcmUsIGFuZCBvdmVycmlkZXMgaXQgd2l0aCB0aGUgUE9JJ3Mgb3duIGljb24gd2hlbiBpdCBoYXMgb25lLiBSZWFkaW5nIHRoZVxuICAgKiBzYW1lIHR3byBzb3VyY2VzIGlzIHdoYXQga2VlcHMgYSB0YWcgbG9va2luZyBsaWtlIGl0c2VsZiBhY3Jvc3MgdGhlIHR3byB2aWV3ZXJzLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyByZXNvbHZlVGFnSWNvblVybChwb2k6IFBPSSk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4ge1xuICAgIGlmIChwb2kudGFnSWNvbikge1xuICAgICAgLy8gU3RvcmVkIGFzIEpTT04gKHsgc3JjLCBvcGFjaXR5IH0pIGJ5IHRoZSBNYXR0ZXJwb3J0IHBhdGgsIGJ1dCBvbGRlciByZWNvcmRzIGFyZSBhIGJhcmUga2V5LlxuICAgICAgbGV0IHNvdXJjZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHBvaS50YWdJY29uKTtcbiAgICAgICAgc291cmNlID0gdHlwZW9mIHBhcnNlZCA9PT0gJ3N0cmluZycgPyBwYXJzZWQgOiBwYXJzZWQ/LnNyYyA/PyBudWxsO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHNvdXJjZSA9IHBvaS50YWdJY29uO1xuICAgICAgfVxuICAgICAgaWYgKHNvdXJjZSkge1xuICAgICAgICBjb25zdCBzaWduZWQgPSBhd2FpdCBnZXRTaWduZWRGaWxlKHNvdXJjZSk7XG4gICAgICAgIGlmIChzaWduZWQpIHtcbiAgICAgICAgICByZXR1cm4gc2lnbmVkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmRlZmF1bHRUYWdJY29uVXJsKHBvaS50eXBlKTtcbiAgfVxuXG4gIC8qKiBUaGUgY29uZmlndXJlZCBpY29uIGZvciBhIFBPSSB0eXBlLCBvciBudWxsIHdoZW4gdGhhdCB0eXBlIGhhcyBub25lLiAqL1xuICBwcml2YXRlIGRlZmF1bHRUYWdJY29uVXJsKHBvaVR5cGU6IFBvaVR5cGUgfCBudWxsIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgaWNvbnMgPSB0aGlzLmNvbmZpZz8ubXlfY29uZmlnO1xuICAgIGlmICghaWNvbnMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBzd2l0Y2ggKHBvaVR5cGUpIHtcbiAgICAgIGNhc2UgUG9pVHlwZS5USUNLRVQ6XG4gICAgICAgIHJldHVybiBpY29ucy5pY29uX3RpY2tldCA/PyBudWxsO1xuICAgICAgY2FzZSBQb2lUeXBlLkVRVUlQTUVOVDpcbiAgICAgICAgcmV0dXJuIGljb25zLmljb25fZXF1aXBtZW50ID8/IG51bGw7XG4gICAgICBjYXNlIFBvaVR5cGUuTUVBU1VSRTpcbiAgICAgICAgcmV0dXJuIGljb25zLmljb25fbWVhc3VyZSA/PyBudWxsO1xuICAgICAgY2FzZSBQb2lUeXBlLk9CSkVDVDNEOlxuICAgICAgICByZXR1cm4gaWNvbnMuaWNvbl9vYmplY3QzZCA/PyBudWxsO1xuICAgICAgY2FzZSBQb2lUeXBlLkRBVEE6XG4gICAgICBjYXNlIFBvaVR5cGUuREVTSzpcbiAgICAgICAgcmV0dXJuIGljb25zLmljb25fZGF0YSA/PyBudWxsO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqIE1vdmVzIHRoZSBUaHJlZS5qcyBjYW1lcmEgdG8gZnJhbWUgYSB0YWcsIG1pcnJvcmluZyBNYXR0ZXJwb3J0J3MgZ29Ub1RhZy4gKi9cbiAgZ29Ub1RocmVlSnNUYWcoZWxlbWVudElkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jaGVja01vZGUoJ3RocmVlanMnKSkge1xuICAgICAgdGhpcy50aHJlZUpzU2VydmljZS5nb1RvVGFnKGVsZW1lbnRJZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFNob3dzIG9ubHkgdGFncyBvZiB0aGUgZ2l2ZW4gUE9JIHR5cGVzOyBudWxsIGNsZWFycyB0aGUgZmlsdGVyLiAqL1xuICBzZXRWaXNpYmxlVGhyZWVKc1RhZ1R5cGVzKHR5cGVzOiBQb2lUeXBlW10gfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2hlY2tNb2RlKCd0aHJlZWpzJykpIHtcbiAgICAgIHRoaXMudGhyZWVKc1NlcnZpY2Uuc2V0VmlzaWJsZVRhZ1R5cGVzKHR5cGVzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWxpZ25tZW50IHdhbGt0aHJvdWdoOiBwaWNrIGEgdGFnLCB0aGVuIGNsaWNrIHdoZXJlIGl0IHJlYWxseSBzaXRzLCB0aHJlZSB0aW1lcyBvdmVyLlxuICAgKlxuICAgKiBVc2VzIHRhZ3MgdGhhdCBhbHJlYWR5IGV4aXN0LCBzbyBub3RoaW5nIGlzIGNyZWF0ZWQgYW5kIG5vdGhpbmcgaXMgd3JpdHRlbiB1bnRpbCB0aGUgY2FsbGVyXG4gICAqIHNhdmVzIHRoZSByZXN1bHQuIFNlZSB0aHJlZUpzQWxpZ25tZW50UHJvZ3Jlc3MkIGZvciB3aGF0IHRoZSBVSSBzaG91bGQgYmUgYXNraW5nIGZvci5cbiAgICovXG4gIHN0YXJ0VGhyZWVKc1RhZ0FsaWdubWVudCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jaGVja01vZGUoJ3RocmVlanMnKSkge1xuICAgICAgdGhpcy50aHJlZUpzU2VydmljZS5zdGFydFRhZ0FsaWdubWVudCgpO1xuICAgIH1cbiAgfVxuXG4gIGNhbmNlbFRocmVlSnNUYWdBbGlnbm1lbnQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2hlY2tNb2RlKCd0aHJlZWpzJykpIHtcbiAgICAgIHRoaXMudGhyZWVKc1NlcnZpY2UuY2FuY2VsVGFnQWxpZ25tZW50KCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHRocmVlSnNBbGlnbm1lbnRQcm9ncmVzcyQoKSB7XG4gICAgcmV0dXJuIHRoaXMudGhyZWVKc1NlcnZpY2UuYWxpZ25tZW50UHJvZ3Jlc3MkO1xuICB9XG5cbiAgLyoqXG4gICAqIFNvbHZlcyB0aGUgYWxpZ25tZW50IGFuZCBhcHBsaWVzIGl0IHRvIHRoZSBzY2VuZSwgcmV0dXJuaW5nIGl0IGFzIHRoZSBKU09OIHRvIHN0b3JlIGluIHRoZVxuICAgKiBjYXB0dXJlJ3MgbWV0YWRhdGEuIE51bGwgbWVhbnMgdGhlIHRocmVlIHRhZ3Mgd2VyZSBjb2xsaW5lYXIgYW5kIG5vdGhpbmcgd2FzIGFwcGxpZWQuXG4gICAqL1xuICBzb2x2ZVRocmVlSnNUYWdBbGlnbm1lbnQoZXhpc3RpbmdNZXRhZGF0YT86IHN0cmluZyk6IHsgYWxpZ25tZW50OiBhbnk7IG1ldGFkYXRhOiBzdHJpbmcgfSB8IG51bGwge1xuICAgIGlmICghdGhpcy5jaGVja01vZGUoJ3RocmVlanMnKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGFsaWdubWVudCA9IHRoaXMudGhyZWVKc1NlcnZpY2Uuc29sdmVBbGlnbm1lbnRGcm9tUGFpcnMoKTtcbiAgICBpZiAoIWFsaWdubWVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHRoaXMudGhyZWVKc0NhbGlicmF0ZWQgPSB0cnVlO1xuICAgIC8vIE1lcmdlZCBpbnRvIHdoYXRldmVyIHRoZSBjYXB0dXJlIGFscmVhZHkgc3RvcmVzLCBzbyBhbiBleGlzdGluZyBjYW1lcmEgcGxhY2VtZW50IHN1cnZpdmVzLlxuICAgIGxldCBzdG9yZWQ6IGFueSA9IHt9O1xuICAgIHRyeSB7XG4gICAgICBzdG9yZWQgPSBleGlzdGluZ01ldGFkYXRhID8gSlNPTi5wYXJzZShleGlzdGluZ01ldGFkYXRhKSA6IHt9O1xuICAgIH0gY2F0Y2gge1xuICAgICAgc3RvcmVkID0ge307XG4gICAgfVxuICAgIHN0b3JlZC5hbGlnbm1lbnQgPSBhbGlnbm1lbnQ7XG4gICAgcmV0dXJuIHsgYWxpZ25tZW50LCBtZXRhZGF0YTogSlNPTi5zdHJpbmdpZnkoc3RvcmVkKSB9O1xuICB9XG5cbiAgLyoqIFNob3dzIG9yIGhpZGVzIGEgc2luZ2xlIFRocmVlLmpzIHRhZy4gKi9cbiAgc2V0VGhyZWVKc1RhZ1Zpc2liaWxpdHkoZWxlbWVudElkOiBzdHJpbmcsIHZpc2libGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jaGVja01vZGUoJ3RocmVlanMnKSkge1xuICAgICAgdGhpcy50aHJlZUpzU2VydmljZS5zZXRUYWdWaXNpYmlsaXR5KGVsZW1lbnRJZCwgdmlzaWJsZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgYWN0aW9uX2RlbGV0ZV9lbGVtZW50KGVsZW1lbnQ6IERiT2JqZWN0VHlwZSkge1xuICAgIC8vIE1hdHRlcnBvcnRcbiAgICBpZiAodGhpcy5jaGVja01vZGUoJ01hdHRlcnBvcnQnKSkge1xuICAgICAgYXdhaXQgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5kZWxldGVNYXR0ZXJ0YWdGb3JPYmplY3QoZWxlbWVudC5pZCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmNoZWNrTW9kZSgndGhyZWVqcycpKSB7XG4gICAgICB0aGlzLnRocmVlSnNTZXJ2aWNlLnJlbW92ZVRhZyhlbGVtZW50LmlkKTtcbiAgICB9XG4gIH1cblxuICAvKiogRW1pdHMgd2hlbiBhIFRocmVlLmpzIG1vZGVsIGxvYWQgYWN0dWFsbHkgc3RvcHBlZCBzaG9ydCwgcmF0aGVyIHRoYW4gbWVyZWx5IGJlaW5nIGFza2VkIHRvLiAqL1xuICBnZXQgdGhyZWVKc01vZGVsTG9hZENhbmNlbGxlZCQoKSB7XG4gICAgcmV0dXJuIHRoaXMudGhyZWVKc1NlcnZpY2UubW9kZWxMb2FkQ2FuY2VsbGVkJDtcbiAgfVxuXG4gIC8qKiBTdG9wcyB0aGUgVGhyZWUuanMgbW9kZWwgZG93bmxvYWQgaW4gcHJvZ3Jlc3MuICovXG4gIGNhbmNlbFRocmVlSnNNb2RlbExvYWQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2hlY2tNb2RlKCd0aHJlZWpzJykpIHtcbiAgICAgIHRoaXMudGhyZWVKc1NlcnZpY2UuY2FuY2VsTW9kZWxMb2FkKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEVtaXRzIGEgdGFnJ3MgbGFiZWwgd2hpbGUgdGhlIHBvaW50ZXIgaXMgb3ZlciBpdCBpbiB0aGUgVGhyZWUuanMgc2NlbmUuICovXG4gIGdldCB0aHJlZUpzVGFnSG92ZXJlZCQoKSB7XG4gICAgcmV0dXJuIHRoaXMudGhyZWVKc1NlcnZpY2UudGFnSG92ZXJlZCQ7XG4gIH1cblxuICAvKiogRW1pdHMgdGhlIGVsZW1lbnQgaWQgb2YgYSB0YWcgY2xpY2tlZCBpbiB0aGUgVGhyZWUuanMgc2NlbmUuICovXG4gIGdldCB0aHJlZUpzVGFnQ2xpY2tlZCQoKSB7XG4gICAgcmV0dXJuIHRoaXMudGhyZWVKc1NlcnZpY2UudGFnQ2xpY2tlZCQ7XG4gIH1cblxuICAvKipcbiAgICogQXBwbGllcyB0aGUgdmlzaXQncyBzdG9yZWQgdGFnIGFsaWdubWVudCwgbWFwcGluZyBjYXB0dXJlZCB0YWcgY29vcmRpbmF0ZXMgb250byB0aGlzIG1vZGVsLlxuICAgKlxuICAgKiBTYWZlIHRvIGNhbGwgYmVmb3JlIHRoZSBtb2RlbCBvciBhbnkgdGFnIGV4aXN0czogaXQgaXMgYSB0cmFuc2Zvcm0gb24gdGhlIGdyb3VwIGJvdGggZW5kIHVwXG4gICAqIHVuZGVyLCBzbyBpdCBhcHBsaWVzIHRvIHdoYXRldmVyIGFycml2ZXMgbGF0ZXIuXG4gICAqL1xuICBzZXRUaHJlZUpzVGFnQWxpZ25tZW50RnJvbU1ldGFkYXRhKG1ldGFkYXRhOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY2hlY2tNb2RlKCd0aHJlZWpzJykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYWxpZ25tZW50ID0gcGFyc2VUaHJlZUpzUGxhY2VtZW50KG1ldGFkYXRhKT8uYWxpZ25tZW50ID8/IG51bGw7XG4gICAgdGhpcy50aHJlZUpzQ2FsaWJyYXRlZCA9ICEhYWxpZ25tZW50O1xuICAgIC8vIFdoaWNoIHRhZ3Mgd2VyZSBwbGFjZWQgaW4gdGhpcyBtb2RlbCBpcyBkZWNpZGVkIGFnYWluc3QgdGhlIGNhcHR1cmUgb24gc2NyZWVuLlxuICAgIHRoaXMudGhyZWVKc1NlcnZpY2Uuc2V0Q3VycmVudENhcHR1cmUodGhpcy5jdXJyZW50Q2FwdHVyZUlEKTtcbiAgICB0aGlzLnRocmVlSnNTZXJ2aWNlLnNldFRhZ0FsaWdubWVudChhbGlnbm1lbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZSB0YWcgcGxhY2VtZW50IG1lbnUgdG8gYWRkIGEgbmV3IGVsZW1lbnQgZGVwZW5kaW5nIG9uIGl0cyB0eXBlIChUSUNLRVQsIERBVEEsIEVRVUlQTUVOVCBldGMpXG4gICAqL1xuICBhc3luYyBhY3Rpb25BZGROZXdFbGVtZW50VG9WaWV3ZXIocG9pVHlwZTogUG9pVHlwZSkge1xuICAgIHRoaXMuYWN0aW9uX3Rvb2xib3hfaW5zaWRlX3ZpZXcoKTtcblxuICAgIC8vIE1hdHRlcnBvcnRcbiAgICBpZiAoXG4gICAgICB0aGlzLmNoZWNrTW9kZSgnTWF0dGVycG9ydCcpICYmXG4gICAgICB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmdldEludGVyYWN0aW9uTW9kZSgpID09PSBWaWV3ZXJJbnRlcmFjdGlvbnMuREVGQVVMVFxuICAgICkge1xuICAgICAgYXdhaXQgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5hZGRNYXR0ZXJ0YWdXaGVuQWRkaW5nKHBvaVR5cGUpO1xuICAgIH1cbiAgICBpZiAodGhpcy5jaGVja01vZGUoJ3RocmVlanMnKSkge1xuICAgICAgdGhpcy50aHJlZUpzU2VydmljZS5zdGFydFRhZ1BsYWNlbWVudChwb2lUeXBlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTGF1bmNoZXMgdGhlIHJlcG9zaXRpb25pbmcgb2YgYW4gZXhpc3RpbmcgTWF0dGVydGFnIHJlbGF0ZWQgdG8gcGFyYW1ldGVyIG9iamVjdFxuICAgKiBAcGFyYW0gZWxlbWVudCBvYmplY3QgKFRJQ0tFVCwgRVFVSVBNRU5ULCBGRUFUVVJFLCBldGMpXG4gICAqIEBwYXJhbSBwb2lUeXBlIHR5cGUgb2Ygb2JqZWN0XG4gICAqL1xuICBhc3luYyBhY3Rpb25SZXBvc2l0aW9uRWxlbWVudEluVmlld2VyKFxuICAgIGVsZW1lbnQ6IERiT2JqZWN0VHlwZSxcbiAgICBwb2lUeXBlOiBQb2lUeXBlXG4gICkge1xuICAgIGlmIChcbiAgICAgIHRoaXMuY2hlY2tNb2RlKCdNYXR0ZXJwb3J0JykgJiZcbiAgICAgIHRoaXMubWF0dGVycG9ydFNlcnZpY2UuZ2V0SW50ZXJhY3Rpb25Nb2RlKCkgPT09IFZpZXdlckludGVyYWN0aW9ucy5ERUZBVUxUXG4gICAgKSB7XG4gICAgICBhd2FpdCB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmFkZE1hdHRlcnRhZ1doZW5SZXBvc2l0aW9uaW5nKHBvaVR5cGUsIGVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGUgdGlja2V0IHBsYWNlbWVudCBtZW51IHRvIGFkZCBhIG5ldyB0aWNrZXRcbiAgICovXG4gIGFjdGlvbl9jYW5jZWxlZCgpIHtcbiAgICAvLyBNYXR0ZXJwb3J0XG4gICAgaWYgKHRoaXMuY2hlY2tNb2RlKCdNYXR0ZXJwb3J0JykpIHtcbiAgICAgIHRoaXMubWF0dGVycG9ydFNlcnZpY2UuY2FuY2VsRm9sbG93aW5nQ3Vyc29yKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmNoZWNrTW9kZSgndGhyZWVqcycpKSB7XG4gICAgICB0aGlzLnRocmVlSnNTZXJ2aWNlLmNhbmNlbFRhZ1BsYWNlbWVudCgpO1xuICAgIH1cbiAgfVxuXG4gIGFjdGlvbl90b29sYm94X2luc2lkZV92aWV3KCkge1xuICAgIC8vIE1hdHRlcnBvcnRcbiAgICBpZiAodGhpcy5jaGVja01vZGUoJ01hdHRlcnBvcnQnKSkge1xuICAgICAgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5hY3Rpb25fdG9vbGJveF9pbnNpZGVfdmlldygpO1xuICAgIH1cbiAgfVxuXG4gIGFjdGlvblNob3dBbGxGbG9vcnMoKSB7XG4gICAgLy8gTWF0dGVycG9ydFxuICAgIGlmICh0aGlzLmNoZWNrTW9kZSgnTWF0dGVycG9ydCcpKSB7XG4gICAgICB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmFjdGlvblNob3dBbGxGbG9vcnMoKTtcbiAgICB9XG4gIH1cblxuICBhY3Rpb25fdG9vbGJveF9kb2xsaG91c2UoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5nZXRJbnRlcmFjdGlvbk1vZGUoKSAhPT0gVmlld2VySW50ZXJhY3Rpb25zLkRFRkFVTFRcbiAgICApIHtcbiAgICAgIHRoaXMuYWN0aW9uX2NhbmNlbGVkKCk7XG4gICAgfVxuXG4gICAgdGhpcy5hY3Rpb25fdG9vbGJveF9jYW5jZWxfbWVzdXJlKCk7XG4gICAgLy8gTWF0dGVycG9ydFxuICAgIGlmICh0aGlzLmNoZWNrTW9kZSgnTWF0dGVycG9ydCcpKSB7XG4gICAgICB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmFjdGlvbl90b29sYm94X2RvbGxob3VzZSgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGFjdGlvbl9mbG9vcnBsYW4oKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5nZXRJbnRlcmFjdGlvbk1vZGUoKSAhPT0gVmlld2VySW50ZXJhY3Rpb25zLkRFRkFVTFRcbiAgICApIHtcbiAgICAgIHRoaXMuYWN0aW9uX2NhbmNlbGVkKCk7XG4gICAgfVxuICAgIC8vIE1hdHRlcnBvcnRcbiAgICBpZiAodGhpcy5jaGVja01vZGUoJ01hdHRlcnBvcnQnKSkge1xuICAgICAgYXdhaXQgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5hY3Rpb25fdG9vbGJveF9mbG9vcnBsYW4oKTtcbiAgICB9XG4gIH1cblxuICBhY3Rpb25fdG9vbGJveF9tZXN1cmUoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5nZXRJbnRlcmFjdGlvbk1vZGUoKSAhPT0gVmlld2VySW50ZXJhY3Rpb25zLkRFRkFVTFRcbiAgICApIHtcbiAgICAgIHRoaXMuYWN0aW9uX2NhbmNlbGVkKCk7XG4gICAgfVxuXG4gICAgdGhpcy5hY3Rpb25fdG9vbGJveF9pbnNpZGVfdmlldygpO1xuICAgIC8vIE1hdHRlcnBvcnRcbiAgICBpZiAodGhpcy5jaGVja01vZGUoJ01hdHRlcnBvcnQnKSkge1xuICAgICAgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5hY3Rpb25fdG9vbGJveF9tZXN1cmUoKTtcbiAgICB9XG4gICAgLy8gTWF0dGVycG9ydCdzIFNESyBicmluZ3MgaXRzIG93biBtZWFzdXJpbmcgdG9vbDsgdGhlIFRocmVlLmpzIHZpZXdlciBoYXMgdG8gcHJvdmlkZSBvbmUuXG4gICAgaWYgKHRoaXMuY2hlY2tNb2RlKCd0aHJlZWpzJykpIHtcbiAgICAgIHRoaXMudGhyZWVKc1NlcnZpY2Uuc3RhcnRNZWFzdXJpbmcoKTtcbiAgICB9XG4gIH1cblxuICBhY3Rpb25fdG9vbGJveF9jYW5jZWxfbWVzdXJlKCkge1xuICAgIC8vIE1hdHRlcnBvcnRcbiAgICBpZiAodGhpcy5jaGVja01vZGUoJ01hdHRlcnBvcnQnKSkge1xuICAgICAgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5hY3Rpb25fdG9vbGJveF9jYW5jZWxfbWVzdXJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmNoZWNrTW9kZSgndGhyZWVqcycpKSB7XG4gICAgICB0aGlzLnRocmVlSnNTZXJ2aWNlLmNhbmNlbE1lYXN1cmluZygpO1xuICAgICAgLy8gVGhlIHRvb2xiYXIgdG9nZ2xlcyBvbiB0aGlzIGZsYWc7IGxlZnQgb24sIHRoZSBuZXh0IGNsaWNrIHdvdWxkIHN3aXRjaCBtZWFzdXJpbmcgXCJvZmZcIlxuICAgICAgLy8gaW5zdGVhZCBvZiBzdGFydGluZyBhIG5ldyBvbmUuXG4gICAgICB0aGlzLnRvb2xib3hTdGF0ZXMubWVzdXJlLnN0YXQgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKiogV2hpbGUgbWVhc3VyaW5nIGluIHRoZSBUaHJlZS5qcyB2aWV3ZXI6IHBvaW50cyBhbmQgc2VnbWVudCBsZW5ndGhzIHNvIGZhciwgbnVsbCBpZiBhYmFuZG9uZWQuICovXG4gIGdldCB0aHJlZUpzTWVhc3VyZW1lbnRQcm9ncmVzcyQoKSB7XG4gICAgcmV0dXJuIHRoaXMudGhyZWVKc1NlcnZpY2UubWVhc3VyZW1lbnRQcm9ncmVzcyQ7XG4gIH1cblxuICAvKiogRW5kcyB0aGUgVGhyZWUuanMgbWVhc3VyZW1lbnQgaW4gcHJvZ3Jlc3MsIG9yIHJldHVybnMgbnVsbCB3aGVuIGl0IGhhcyBmZXdlciB0aGFuIHR3byBwb2ludHMuICovXG4gIGZpbmlzaFRocmVlSnNNZWFzdXJlbWVudCgpOiBUaHJlZUpzTWVhc3VyZW1lbnQgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuY2hlY2tNb2RlKCd0aHJlZWpzJykpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBtZWFzdXJlbWVudCA9IHRoaXMudGhyZWVKc1NlcnZpY2UuZmluaXNoTWVhc3VyaW5nKCk7XG4gICAgaWYgKG1lYXN1cmVtZW50KSB7XG4gICAgICB0aGlzLnRvb2xib3hTdGF0ZXMubWVzdXJlLnN0YXQgPSBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIG1lYXN1cmVtZW50O1xuICB9XG5cbiAgLyoqIFRoZSBtZWFzdXJlbWVudCBsYXN0IGZpbmlzaGVkIGluIHRoZSBUaHJlZS5qcyB2aWV3ZXIsIGZvciB0aGUgZm9ybSB0aGF0IHNhdmVzIGl0LiAqL1xuICBnZXRUaHJlZUpzTGFzdE1lYXN1cmVtZW50KCk6IFRocmVlSnNNZWFzdXJlbWVudCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmNoZWNrTW9kZSgndGhyZWVqcycpID8gdGhpcy50aHJlZUpzU2VydmljZS5nZXRMYXN0TWVhc3VyZW1lbnQoKSA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogVGhlIE1hdHRlcnBvcnQgc3dlZXAgbmVhcmVzdCB0byBhIHBvaW50IHBpY2tlZCBpbiB0aGUgVGhyZWUuanMgdmlld2VyLCBvciBudWxsLlxuICAgKlxuICAgKiBGb3IgY2FsbGVycyB0aGF0IHdyaXRlIHRoZWlyIG93biBQT0ksIGFzIHRoZSBtZWFzdXJlbWVudCBmb3JtIGRvZXMgLSBhbnl0aGluZyBjcmVhdGVkIHRocm91Z2hcbiAgICogY3JlYXRlUG9pRm9yVGhyZWVKc1BsYWNlbWVudCBhbHJlYWR5IGdldHMgdGhpcy5cbiAgICovXG4gIGZpbmROZWFyZXN0U3dlZXBGb3JUaHJlZUpzKHBvaW50OiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB6OiBudW1iZXIgfSk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4ge1xuICAgIC8vIEFuIHVuY2FsaWJyYXRlZCBtb2RlbCdzIGNvb3JkaW5hdGVzIGFyZSBpdHMgb3duLiBNZWFzdXJlZCBhZ2FpbnN0IHRoZSBNYXR0ZXJwb3J0IHN3ZWVwcyB0aGV5XG4gICAgLy8gY291bGQgbGFuZCBuZWFyIG9uZSBieSBjb2luY2lkZW5jZSwgYW5kIHRoZSB0YWcgd291bGQgdHVybiB1cCBpbiB0aGUgdG91ciBzb21ld2hlcmUgYXJiaXRyYXJ5LlxuICAgIGlmICghdGhpcy50aHJlZUpzQ2FsaWJyYXRlZCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc3dlZXBMb2NhdG9yLmZpbmROZWFyZXN0U3dlZXAocG9pbnQsIHRoaXMuY3VycmVudFNwYWNlSUQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBtZXRhZGF0YSBhIFBPSSBwbGFjZWQgaW4gdGhlIFRocmVlLmpzIHZpZXdlciBpcyBzdG9yZWQgd2l0aDogd2hpY2ggM0QgbW9kZWwgaXQgd2FzIHBsYWNlZFxuICAgKiBpbiwgYW5kIC0gd2hlbiB0aGF0IG1vZGVsIGlzIG5vdCBjYWxpYnJhdGVkIC0gdGhhdCBpdHMgY29vcmRpbmF0ZXMgYXJlIHRoZSBtb2RlbCdzIG93bi5cbiAgICovXG4gIGJ1aWxkVGhyZWVKc1BvaU1ldGFkYXRhKGV4dHJhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge30pOiBzdHJpbmcge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAuLi5leHRyYSxcbiAgICAgIC4uLih0aGlzLmN1cnJlbnRDYXB0dXJlSUQgPyB7IGNhcHR1cmVJRDogdGhpcy5jdXJyZW50Q2FwdHVyZUlEIH0gOiB7fSksXG4gICAgICAuLi4odGhpcy5jdXJyZW50Q2FwdHVyZUlEICYmICF0aGlzLnRocmVlSnNDYWxpYnJhdGVkID8geyBmcmFtZTogJ21vZGVsJyB9IDoge30pLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqIFdoaWNoIG9mIHRoZSAzRCBtb2RlbCdzIGF4ZXMgaXMgYmVpbmcgdHJlYXRlZCBhcyB1cC4gKi9cbiAgZ2V0VGhyZWVKc01vZGVsVXAoKTogVGhyZWVKc01vZGVsVXAge1xuICAgIHJldHVybiB0aGlzLnRocmVlSnNTZXJ2aWNlLmdldE1vZGVsVXAoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUdXJucyB0aGUgM0QgbW9kZWwgdG8gdGhlIG5leHQgY2FuZGlkYXRlIGZvciBcIndoaWNoIGF4aXMgaXMgdXBcIiwgYW5kIHJldHVybnMgdGhlIGNhcHR1cmVcbiAgICogbWV0YWRhdGEgd2l0aCB0aGF0IGNob2ljZSB3cml0dGVuIGluLCBmb3IgdGhlIGNhbGxlciB0byBzdG9yZS5cbiAgICpcbiAgICogVGhlIHZlcnRpY2FsIGF4aXMgaXMgd29ya2VkIG91dCBmcm9tIHRoZSBnZW9tZXRyeSB3aGVuIGEgbW9kZWwgbG9hZHMsIGFuZCB0aGF0IGNhbiBiZSB3cm9uZzpcbiAgICogYSBuYXJyb3cgY29ycmlkb3IgYW5kIGEgbG93IHNsYWIgYXJlIHRoZSBzYW1lIHNoYXBlIHR1cm5lZCBvdmVyLiBUaGlzIGlzIHRoZSB3YXkgdG8gY29ycmVjdCBpdC5cbiAgICovXG4gIGN5Y2xlVGhyZWVKc01vZGVsVXAoZXhpc3RpbmdNZXRhZGF0YTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHsgdXA6IFRocmVlSnNNb2RlbFVwOyBtZXRhZGF0YTogc3RyaW5nIH0gfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuY2hlY2tNb2RlKCd0aHJlZWpzJykpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBjdXJyZW50ID0gVEhSRUVKU19NT0RFTF9VUF9PUFRJT05TLmluZGV4T2YodGhpcy50aHJlZUpzU2VydmljZS5nZXRNb2RlbFVwKCkpO1xuICAgIGNvbnN0IHVwID0gVEhSRUVKU19NT0RFTF9VUF9PUFRJT05TWyhjdXJyZW50ICsgMSkgJSBUSFJFRUpTX01PREVMX1VQX09QVElPTlMubGVuZ3RoXTtcbiAgICB0aGlzLnRocmVlSnNTZXJ2aWNlLnNldE1vZGVsVXAodXApO1xuXG4gICAgbGV0IHN0b3JlZDogYW55ID0ge307XG4gICAgdHJ5IHtcbiAgICAgIHN0b3JlZCA9IGV4aXN0aW5nTWV0YWRhdGEgPyBKU09OLnBhcnNlKGV4aXN0aW5nTWV0YWRhdGEpIDoge307XG4gICAgfSBjYXRjaCB7XG4gICAgICBzdG9yZWQgPSB7fTtcbiAgICB9XG4gICAgc3RvcmVkLnVwID0gdXA7XG4gICAgcmV0dXJuIHsgdXAsIG1ldGFkYXRhOiBKU09OLnN0cmluZ2lmeShzdG9yZWQpIH07XG4gIH1cblxuICAvKiogQ2hvb3NlcyB0aGUgdGFnIGZvciB0aGUgY2FsaWJyYXRpb24gcGFpciBiZWluZyBtYXRjaGVkIGJ5IGlkLCBpbnN0ZWFkIG9mIGJ5IGNsaWNraW5nIGl0LiAqL1xuICBzZWxlY3RUaHJlZUpzQWxpZ25tZW50VGFnKGVsZW1lbnRJZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY2hlY2tNb2RlKCd0aHJlZWpzJykgJiYgdGhpcy50aHJlZUpzU2VydmljZS5zZWxlY3RBbGlnbm1lbnRUYWcoZWxlbWVudElkKTtcbiAgfVxuXG4gIC8qKiBIb3cgZmFyIHRoZSB2aXNpYmxlIHRhZ3Mgc2l0IGZyb20gdGhlIDNEIG1vZGVsLCBpbiBtb2RlbCByYWRpaS4gTnVsbCB3aXRob3V0IGJvdGguICovXG4gIGdldFRocmVlSnNUYWdEaXN0YW5jZUZyb21Nb2RlbCgpOiBudW1iZXIgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5jaGVja01vZGUoJ3RocmVlanMnKSA/IHRoaXMudGhyZWVKc1NlcnZpY2UuZ2V0VGFnRGlzdGFuY2VGcm9tTW9kZWwoKSA6IG51bGw7XG4gIH1cblxuICAvKiogSG93IG1hbnkgdGFncyB0aGUgVGhyZWUuanMgc2NlbmUgaXMgc2hvd2luZy4gKi9cbiAgZ2V0VGhyZWVKc1RhZ0NvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuY2hlY2tNb2RlKCd0aHJlZWpzJykgPyB0aGlzLnRocmVlSnNTZXJ2aWNlLmdldFRhZ0NvdW50KCkgOiAwO1xuICB9XG5cbiAgYXN5bmMgYWN0aW9uX3VwZGF0ZV9wb2koXG4gICAgcG9pOiBQT0ksXG4gICAgaXNWYWxpZDogYm9vbGVhbixcbiAgICBlbGVtZW50OiBEYk9iamVjdFR5cGVcbiAgKTogUHJvbWlzZTxQT0k+IHtcbiAgICBpZiAodGhpcy5jaGVja01vZGUoJ01hdHRlcnBvcnQnKSkge1xuICAgICAgaWYgKGlzVmFsaWQpIHtcbiAgICAgICAgY29uc3QgbGFzdFRhZyA9IHRoaXMubWF0dGVycG9ydFNlcnZpY2UubWF0dGVydGFnVG9Gb2xsb3dcbiAgICAgICAgICA/IHRoaXMubWF0dGVycG9ydFNlcnZpY2UubWF0dGVydGFnVG9Gb2xsb3dcbiAgICAgICAgICA6IHRoaXMubWF0dGVycG9ydFNlcnZpY2UuZ2V0TGFzdFRhZygpO1xuICAgICAgICBpZiAoIWxhc3RUYWcpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHBvaSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGFnRGF0YSA9IHRoaXMubWF0dGVycG9ydFNlcnZpY2UuZ2V0TWF0dGVyVGFnRGF0YUZvck1hdHRlcnRhZyhsYXN0VGFnKTtcbiAgICAgICAgaWYgKCF0YWdEYXRhKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwb2kpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcG9pTWV0YWRhdGEgPSAoISFwb2kgJiYgcG9pLm1ldGFkYXRhKSA/IEpTT04ucGFyc2UocG9pLm1ldGFkYXRhKSA6IHt9O1xuICAgICAgICBwb2lNZXRhZGF0YS5ub3JtYWwgPSB0YWdEYXRhLmdldE5vcm1hbCgpO1xuICAgICAgICBpZiAoIXBvaSkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBvaUlucHV0ID0ge1xuICAgICAgICAgIGlkOiBwb2kuaWQsXG4gICAgICAgICAgY29vcmRpbmF0ZTogdGFnRGF0YS5nZXRDb29yZGluYXRlU3RyaW5nKCksXG4gICAgICAgICAgbWF0dGVycG9ydFN3ZWVwSUQ6IHRhZ0RhdGEuZ2V0U3dlZXBJRCgpLFxuICAgICAgICAgIG1ldGFkYXRhOiBKU09OLnN0cmluZ2lmeShwb2lNZXRhZGF0YSksXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRQb2k6IFBPSSA9IGF3YWl0IHRoaXMucG9pU2VydmljZS51cGRhdGVQb2kocG9pSW5wdXQpO1xuICAgICAgICB0YWdEYXRhLnNldFBvaSh1cGRhdGVkUG9pKTtcbiAgICAgICAgYXdhaXQgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5zZXRPYmplY3RBbmRQb2lJblRhZyhsYXN0VGFnLCBlbGVtZW50LCBQb2lUeXBlLkRFU0ssIHVwZGF0ZWRQb2kpO1xuICAgICAgICBhd2FpdCB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmluamVjdEh0bWxJblRhZyhcbiAgICAgICAgICBwb2kudHlwZSEsXG4gICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICBsYXN0VGFnXG4gICAgICAgICk7XG4gICAgICAgIGF3YWl0IHRoaXMubWF0dGVycG9ydFNlcnZpY2Uuc2V0VGFnSWNvbkFuZE9wYWNpdHkobGFzdFRhZywgdGFnRGF0YSk7XG4gICAgICAgIHRoaXMubWF0dGVycG9ydFNlcnZpY2UuZ29Ub1RhZyhsYXN0VGFnKTtcblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVwZGF0ZWRQb2kpO1xuICAgICAgfVxuICAgICAgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5kZWxldGVMYXN0TWF0dGVydGFnKCk7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHBvaSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2hlY2tNb2RlKCd0aHJlZWpzJykpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbW1pdFRocmVlSnNUYWdQbGFjZW1lbnQocG9pLCBpc1ZhbGlkLCBlbGVtZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHBvaSk7XG4gIH1cblxuICAvKipcbiAgICogV3JpdGVzIHRoZSBzcG90IHBpY2tlZCBpbiB0aGUgVGhyZWUuanMgc2NlbmUgaW50byB0aGUgUE9JLCBtaXJyb3JpbmcgdGhlIE1hdHRlcnBvcnQgYnJhbmNoLlxuICAgKlxuICAgKiBUaGUgY29vcmRpbmF0ZSBnb2VzIGluIHRoZSBzYW1lIGZpZWxkIGFuZCB0aGUgc2FtZSBzcGFjZSBNYXR0ZXJwb3J0IHdyaXRlcywgd2hpY2ggaXMgd2hhdCBtYWtlc1xuICAgKiBhIHRhZyBjcmVhdGVkIGhlcmUgc2hvdyB1cCBpbiB0aGUgcmlnaHQgcGxhY2UgdGhlcmUgLSBhbmQgdGhlIG90aGVyIHdheSByb3VuZC5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgY29tbWl0VGhyZWVKc1RhZ1BsYWNlbWVudChcbiAgICBwb2k6IFBPSSxcbiAgICBpc1ZhbGlkOiBib29sZWFuLFxuICAgIGVsZW1lbnQ6IERiT2JqZWN0VHlwZVxuICApOiBQcm9taXNlPFBPST4ge1xuICAgIGNvbnN0IHBsYWNlbWVudCA9IHRoaXMudGhyZWVKc1NlcnZpY2UuZ2V0UGVuZGluZ1RhZ1BsYWNlbWVudCgpO1xuICAgIGlmICghaXNWYWxpZCB8fCAhcGxhY2VtZW50IHx8ICFwb2kpIHtcbiAgICAgIHRoaXMudGhyZWVKc1NlcnZpY2UuY2FuY2VsVGFnUGxhY2VtZW50KCk7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHBvaSk7XG4gICAgfVxuXG4gICAgY29uc3QgcG9pTWV0YWRhdGEgPSBwb2kubWV0YWRhdGEgPyBKU09OLnBhcnNlKHBvaS5tZXRhZGF0YSkgOiB7fTtcbiAgICBwb2lNZXRhZGF0YS5ub3JtYWwgPSBwbGFjZW1lbnQubm9ybWFsO1xuXG4gICAgY29uc3QgdXBkYXRlZFBvaSA9IGF3YWl0IHRoaXMucG9pU2VydmljZS51cGRhdGVQb2koe1xuICAgICAgaWQ6IHBvaS5pZCxcbiAgICAgIGNvb3JkaW5hdGU6IEpTT04uc3RyaW5naWZ5KHBsYWNlbWVudC5wb3NpdGlvbiksXG4gICAgICBtZXRhZGF0YTogSlNPTi5zdHJpbmdpZnkocG9pTWV0YWRhdGEpLFxuICAgICAgLy8gbWF0dGVycG9ydFN3ZWVwSUQgaXMgbGVmdCBhcyBpdCB3YXM6IHRoaXMgdmlld2VyIGhhcyBubyBzd2VlcHMsIGFuZCBNYXR0ZXJwb3J0IGZpbHRlcnMgdGFnXG4gICAgICAvLyB2aXNpYmlsaXR5IGJ5IHRoZW0sIHNvIGNsZWFyaW5nIGl0IHdvdWxkIGhpZGUgdGhlIHRhZyBvdmVyIHRoZXJlLlxuICAgIH0pO1xuXG4gICAgdGhpcy50aHJlZUpzU2VydmljZS51cHNlcnRUYWcoe1xuICAgICAgaWQ6IGVsZW1lbnQuaWQsXG4gICAgICBwb3NpdGlvbjogcGxhY2VtZW50LnBvc2l0aW9uLFxuICAgICAgcG9pVHlwZTogdXBkYXRlZFBvaT8udHlwZSA/PyBwb2kudHlwZSxcbiAgICAgIGljb25Vcmw6IHVwZGF0ZWRQb2k/LnRhZ0ljb24gPyBhd2FpdCBnZXRTaWduZWRGaWxlKHVwZGF0ZWRQb2kudGFnSWNvbikgOiBudWxsLFxuICAgIH0pO1xuICAgIHRoaXMudGhyZWVKc1NlcnZpY2UuY2FuY2VsVGFnUGxhY2VtZW50KCk7XG5cbiAgICByZXR1cm4gdXBkYXRlZFBvaTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSBQT0kgZm9yIGFuIGVsZW1lbnQganVzdCBwbGFjZWQgaW4gdGhlIFRocmVlLmpzIHNjZW5lLlxuICAgKlxuICAgKiBUaGUgTWF0dGVycG9ydCBwYXRoIHJlYWNoZXMgdGhlIHNhbWUgcmVzdWx0IHRocm91Z2ggaXRzIHRhZyBkaWN0aW9uYXJ5IC0gdGhlIHRhZyBleGlzdHMgZmlyc3RcbiAgICogYW5kIGNhcnJpZXMgdGhlIGNvb3JkaW5hdGVzLiBUaHJlZS5qcyBoYXMgbm8gc3VjaCBvYmplY3QsIHNvIHRoZSBwbGFjZW1lbnQgY2FwdHVyZWQgYXQgY2xpY2tcbiAgICogdGltZSBpcyB0aGUgb25seSByZWNvcmQgb2Ygd2hlcmUgdGhlIHVzZXIgcG9pbnRlZCwgYW5kIGl0IGhhcyB0byBiZWNvbWUgYSBQT0kgaGVyZSBvciBpdCBpc1xuICAgKiBsb3N0IHdoZW4gdGhlIGZvcm0gY2xvc2VzLlxuICAgKlxuICAgKiBSZXR1cm5zIG51bGwgd2hlbiB0aGVyZSBpcyBubyBwZW5kaW5nIHBsYWNlbWVudCwgd2hpY2ggaXMgdGhlIG5vcm1hbCBjYXNlIGluIE1hdHRlcnBvcnQgbW9kZS5cbiAgICovXG4gIGFzeW5jIGNyZWF0ZVBvaUZvclRocmVlSnNQbGFjZW1lbnQoZWxlbWVudDogRGJPYmplY3RUeXBlLCBwb2lUeXBlOiBQb2lUeXBlKTogUHJvbWlzZTxQT0kgfCBudWxsPiB7XG4gICAgaWYgKCF0aGlzLmNoZWNrTW9kZSgndGhyZWVqcycpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgcGxhY2VtZW50ID0gdGhpcy50aHJlZUpzU2VydmljZS5nZXRQZW5kaW5nVGFnUGxhY2VtZW50KCk7XG4gICAgaWYgKCFwbGFjZW1lbnQgfHwgIWVsZW1lbnQ/LmlkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBXaXRob3V0IGEgc3dlZXAgdGhlIHRhZyBpcyBsZWZ0IG9mZiBldmVyeXRoaW5nIG9uIHRoZSBNYXR0ZXJwb3J0IHNpZGUgdGhhdCBpcyBvcmdhbmlzZWQgYnlcbiAgICAvLyBzd2VlcCAtIHRoZSBmbG9vciBwbGFuIG1vc3QgdmlzaWJseSwgd2hpY2ggb25seSBkcmF3cyB0YWdzIHdob3NlIHN3ZWVwIGJlbG9uZ3MgdG8gaXQuXG4gICAgY29uc3QgbWF0dGVycG9ydFN3ZWVwSUQgPSBhd2FpdCB0aGlzLmZpbmROZWFyZXN0U3dlZXBGb3JUaHJlZUpzKHBsYWNlbWVudC5wb3NpdGlvbik7XG4gICAgY29uc3QgcG9pID0gYXdhaXQgdGhpcy5wb2lTZXJ2aWNlLmNyZWF0ZVBPSUZvclNwYWNlSUQoe1xuICAgICAgY29vcmRpbmF0ZTogSlNPTi5zdHJpbmdpZnkocGxhY2VtZW50LnBvc2l0aW9uKSxcbiAgICAgIHR5cGU6IHBvaVR5cGUsXG4gICAgICBlbGVtZW50SUQ6IGVsZW1lbnQuaWQsXG4gICAgICBtZXRhZGF0YTogdGhpcy5idWlsZFRocmVlSnNQb2lNZXRhZGF0YSh7IG5vcm1hbDogcGxhY2VtZW50Lm5vcm1hbCB9KSxcbiAgICAgIC4uLihtYXR0ZXJwb3J0U3dlZXBJRCA/IHsgbWF0dGVycG9ydFN3ZWVwSUQgfSA6IHt9KSxcbiAgICB9IGFzIFBPSSk7XG5cbiAgICAvLyBEcmF3IGl0IHN0cmFpZ2h0IGF3YXkgcmF0aGVyIHRoYW4gd2FpdGluZyBmb3IgdGhlIG5leHQgcmVmcmVzaCwgc28gdGhlIHVzZXIgc2VlcyB3aGVyZSB0aGVcbiAgICAvLyB0aGluZyB0aGV5IGp1c3QgY3JlYXRlZCBlbmRlZCB1cC4gVGhyb3VnaCB0aGUgc2FtZSBwYXRoIHRoZSByZWZyZXNoIHVzZXMsIHNvIGl0IGFycml2ZXMgd2l0aFxuICAgIC8vIHRoZSB0eXBlJ3MgaWNvbiBpbnN0ZWFkIG9mIHRoZSBiYXJlIG1hcmtlciAtIHRoZSBkaWZmZXJlbmNlIHdhcyB2aXNpYmxlIHVudGlsIHRoZSBuZXh0IHJlbG9hZC5cbiAgICBhd2FpdCB0aGlzLmFkZFRocmVlSnNUYWdGcm9tUE9JKGVsZW1lbnQsIHBvaSk7XG4gICAgdGhpcy50aHJlZUpzU2VydmljZS5jYW5jZWxUYWdQbGFjZW1lbnQoKTtcbiAgICByZXR1cm4gcG9pO1xuICB9XG5cbiAgLyoqIEVtaXRzIHdoZW4gYSB0YWcgaXMgZHJvcHBlZCBvbiB0aGUgbW9kZWwgaW4gdGhlIFRocmVlLmpzIHNjZW5lLiAqL1xuICBnZXQgdGhyZWVKc1RhZ1BsYWNlZCQoKSB7XG4gICAgcmV0dXJuIHRoaXMudGhyZWVKc1NlcnZpY2UudGFnUGxhY2VkJDtcbiAgfVxuXG4gIC8qKiBFbWl0cyB3aGVuIHRoZSBjYWxpYnJhdGlvbiB3YWxrdGhyb3VnaCBpcyBhYmFuZG9uZWQsIGluY2x1ZGluZyB2aWEgRXNjYXBlLiAqL1xuICBnZXQgdGhyZWVKc0FsaWdubWVudENhbmNlbGxlZCQoKSB7XG4gICAgcmV0dXJuIHRoaXMudGhyZWVKc1NlcnZpY2UuYWxpZ25tZW50Q2FuY2VsbGVkJDtcbiAgfVxuXG4gIC8qKiBMZWF2ZXMgVGhyZWUuanMgdGFnIHBsYWNlbWVudCBtb2RlIHdpdGhvdXQgcGxhY2luZyBhbnl0aGluZy4gKi9cbiAgY2FuY2VsVGhyZWVKc1RhZ1BsYWNlbWVudCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jaGVja01vZGUoJ3RocmVlanMnKSkge1xuICAgICAgdGhpcy50aHJlZUpzU2VydmljZS5jYW5jZWxUYWdQbGFjZW1lbnQoKTtcbiAgICB9XG4gIH1cblxuICBlZGl0T25seVRhZ1N0eWxlRm9yUG9pKHBvaTogUE9JLCBvYmplY3Q6IERiT2JqZWN0VHlwZSkge1xuICAgIGlmICh0aGlzLmNoZWNrTW9kZSgnTWF0dGVycG9ydCcpKSB7XG4gICAgICBjb25zdCB0YWdEYXRhID0gdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5nZXRUYWdGcm9tRWxlbWVudElkKHBvaS5lbGVtZW50SUQpO1xuICAgICAgaWYgKHRhZ0RhdGEudGFnKSB7XG4gICAgICAgIGNvbnN0IG1hdHRlcnRhZ0RhdGEgPSB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmdldE1hdHRlclRhZ0RhdGFGb3JNYXR0ZXJ0YWcoXG4gICAgICAgICAgdGFnRGF0YS50YWdcbiAgICAgICAgKTtcbiAgICAgICAgbWF0dGVydGFnRGF0YS5zZXRPYmplY3Qob2JqZWN0LCBQb2lUeXBlLlJPT00pO1xuICAgICAgICB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLnNldFRhZ0ljb25BbmRPcGFjaXR5KHRhZ0RhdGEudGFnLCBtYXR0ZXJ0YWdEYXRhKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhZGRJY29uQW5kU2V0Rm9yUG9pKHBvaTogUE9JLCBpY29uUGF0aDogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuY2hlY2tNb2RlKCdNYXR0ZXJwb3J0JykpIHtcbiAgICAgIGNvbnN0IHRhZ0RhdGEgPSB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmdldFRhZ0Zyb21FbGVtZW50SWQocG9pLmVsZW1lbnRJRCk7XG4gICAgICBpZiAodGFnRGF0YS50YWcpIHtcbiAgICAgICAgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5hZGROZXdJY29uQW5kU2V0Rm9yVGFnKHRhZ0RhdGEudGFnLCBpY29uUGF0aCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlVG9SZWdpc3RyZWRJY29uRm9yUG9pKHBvaTogUE9JLCBpY29uTmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuY2hlY2tNb2RlKCdNYXR0ZXJwb3J0JykpIHtcbiAgICAgIGNvbnN0IHRhZ0RhdGEgPSB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmdldFRhZ0Zyb21FbGVtZW50SWQocG9pLmVsZW1lbnRJRCk7XG4gICAgICBpZiAodGFnRGF0YS50YWcpIHtcbiAgICAgICAgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5zZXRSZWdpc3RyZWRJY29uRm9yVGFnKHRhZ0RhdGEudGFnLCBpY29uTmFtZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgdXBkYXRlSHRtbFRhZ0ZvclBvaVdpdGhPYmplY3QocG9pOiBQT0ksIG9iamVjdDogRGJPYmplY3RUeXBlKSB7XG4gICAgaWYgKHRoaXMuY2hlY2tNb2RlKCdNYXR0ZXJwb3J0JykpIHtcbiAgICAgIGNvbnN0IHRhZ0RhdGEgPSB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmdldFRhZ0Zyb21FbGVtZW50SWQocG9pLmVsZW1lbnRJRCk7XG4gICAgICBpZiAodGFnRGF0YS50YWcpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS51cGRhdGVJbmplY3RlZEh0bWxGb3JUYWdJRChcbiAgICAgICAgICB0YWdEYXRhLnRhZyxcbiAgICAgICAgICBvYmplY3QsXG4gICAgICAgICAgcG9pLnR5cGVcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTW92ZSBhbiBleGlzdGluZyBwb2kgaW4gTWF0dGVycG9ydFxuICAgKiBAcGFyYW0gcG9pXG4gICAqIEBwYXJhbSBlbGVtZW50XG4gICAqL1xuICBhc3luYyBhY3Rpb25fbW92ZV9wb2lfdmlzdWFsbHkoXG4gICAgcG9pOiBQT0ksXG4gICAgZWxlbWVudDogVGlja2V0IHwgRmVhdHVyZSB8IEVxdWlwbWVudCB8IENvbW1lbnRcbiAgKSB7XG4gICAgYXdhaXQgdGhpcy5hY3Rpb25fZGVsZXRlX2VsZW1lbnQoZWxlbWVudCk7XG4gICAgYXdhaXQgdGhpcy5hY3Rpb25BZGRPYmplY3RGcm9tUE9JKGVsZW1lbnQsIHBvaSk7XG4gIH1cblxuICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgQ3VwaXhcbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIE1hdHRlcnBvcnRcbiAgICBodHRwczovL21hdHRlcnBvcnQuZ2l0aHViLmlvL3Nob3djYXNlLXNkay9kb2NzL3Nkay9yZWZlcmVuY2UvY3VycmVudC9tb2R1bGVzL21hdHRlcnRhZy5odG1sI2FkZFxuICAgIGh0dHBzOi8vbWF0dGVycG9ydC5naXRodWIuaW8vc2hvd2Nhc2Utc2RrL2RvY3Mvc2RrL3JlZmVyZW5jZS9jdXJyZW50L21vZHVsZXMvbWF0dGVydGFnLmh0bWwjcmVtb3ZlXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgaW5pdFRocmVlSnMoY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jaGVja01vZGUoJ3RocmVlanMnKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnRocmVlSnNTZXJ2aWNlLmluaXQoY2FudmFzKTtcbiAgICAvLyBUaGUgdGFnIHBpcGVsaW5lIGlzIGdhdGVkIG9uIHRoaXMgZmxhZywgd2hpY2ggdW50aWwgbm93IG9ubHkgdGhlIE1hdHRlcnBvcnQgU0RLIHNldC4gQVxuICAgIC8vIFRocmVlLmpzIHZpc2l0IG5ldmVyIHJlYWNoZXMgdGhhdCBjb2RlLCBzbyBldmVyeSB0YWcgd2FzIGRyb3BwZWQgYmVmb3JlIGl0IGNvdWxkIGJlIGRyYXduLlxuICAgIHRoaXMuc2hvd2luZ1ZpZXdlciA9IHRydWU7XG5cbiAgICAvLyBFdmVyeXRoaW5nIHRoYXQgbG9hZHMgZGF0YSBmb3IgYSBzcGFjZSAtIHRpY2tldHMsIGVxdWlwbWVudHMsIGZlYXR1cmVzLCBtZWFzdXJlbWVudHMgLSBoYW5nc1xuICAgIC8vIG9mZiB0aGlzIGV2ZW50LCB3aGljaCBNYXR0ZXJwb3J0IHJhaXNlcyBvbmNlIGl0cyBTREsgc3RhcnRzIHBsYXlpbmcuIEEgVGhyZWUuanMgdmlzaXQgbmV2ZXJcbiAgICAvLyB0b3VjaGVzIHRoZSBTREssIHNvIG5vdGhpbmcgZXZlciBhbm5vdW5jZWQgdGhlIHNwYWNlIGFuZCBldmVyeSBsaXN0IGNhbWUgYmFjayBlbXB0eS5cbiAgICBpZiAodGhpcy5jdXJyZW50U3BhY2VJRCkge1xuICAgICAgdGhpcy52aWV3ZXJJc09uLm5leHQoe1xuICAgICAgICBzcGFjZUlEOiB0aGlzLmN1cnJlbnRTcGFjZUlELFxuICAgICAgICBtb2RlbDNEOiBudWxsLFxuICAgICAgICBzd2VlcDogbnVsbCxcbiAgICAgICAgcm90YXRpb246IG51bGwsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuZGF0YUlzTG9hZGVkLm5leHQodHJ1ZSk7XG4gICAgICB0aGlzLmlzTG9hZGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgYSAzRCBtb2RlbCBpbnRvIHRoZSBUaHJlZS5qcyBzY2VuZSAoR0xURikuXG4gICAqIE9ubHkgd29ya3Mgd2hlbiB0aGUgdmlld2VyIGlzIGluICd0aHJlZWpzJyBtb2RlLlxuICAgKi9cbiAgbG9hZEdMVEZNb2RlbCh1cmw6IHN0cmluZywgY2FtZXJhUG9zaXRpb24/OiB7eDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlcn0sIHJvdGF0aW9uPzoge3g6IG51bWJlciwgeTogbnVtYmVyLCB6OiBudW1iZXJ9KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2hlY2tNb2RlKCd0aHJlZWpzJykpIHtcbiAgICAgIHRoaXMudGhyZWVKc1NlcnZpY2UubG9hZEdMVEZNb2RlbCh1cmwsIGNhbWVyYVBvc2l0aW9uLCByb3RhdGlvbik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIGEgR0xCIHN0b3JlZCBpbiBTMywgZ2l2ZW4gaXRzIGtleSAoZS5nLiBgdmlzaXRzLzxpZD4vbW9kZWwuZ2xiYCkuXG4gICAqXG4gICAqIFJlc29sdmVzIHRoZSBrZXkgdG8gYSBzaWduZWQgVVJMIGZpcnN0LCB0aGVuIGxvYWRzIGl0IGxpa2UgYW55IG90aGVyLiBUaGUgc2lnbmVkIFVSTCBvbmx5XG4gICAqIGNvdmVycyBhdXRoZW50aWNhdGlvbiAtIHRoZSBidWNrZXQgc3RpbGwgbmVlZHMgYSBDT1JTIHJ1bGUgYWxsb3dpbmcgR0VUIGZyb20gdGhlIGFwcCdzIG9yaWdpbixcbiAgICogb3IgdGhlIGJyb3dzZXIgYmxvY2tzIHRoZSBkb3dubG9hZCBiZWZvcmUgaXQgc3RhcnRzLlxuICAgKlxuICAgKiBgcGxhY2VtZW50TWV0YWRhdGFgIGlzIHRoZSBjYXB0dXJlJ3Mgc3RvcmVkIHBsYWNlbWVudDsgd2hlbiBhYnNlbnQgb3IgdW51c2FibGUgdGhlIHZpZXdlciBmYWxsc1xuICAgKiBiYWNrIHRvIGZyYW1pbmcgdGhlIG1vZGVsIGF1dG9tYXRpY2FsbHkuXG4gICAqL1xuICBhc3luYyBsb2FkR0xURk1vZGVsRnJvbVMzKGtleTogc3RyaW5nLCBwbGFjZW1lbnRNZXRhZGF0YT86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5jaGVja01vZGUoJ3RocmVlanMnKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBBIGtleSB1bmRlciBhc3NldHMvIGlzIHNlcnZlZCBieSB0aGUgYXBwIGl0c2VsZiwgc28gaXQgbmVlZHMgbm8gc2lnbmluZy4gVGhpcyBpcyB3aGF0IGxldHMgYVxuICAgIC8vIG1vZGVsIGJ1bmRsZWQgd2l0aCB0aGUgYnVpbGQgc3RhbmQgaW4gZm9yIG9uZSBpbiBTMyB3aGlsZSB0aGUgdHdvIGFyZSBvdGhlcndpc2UgaWRlbnRpY2FsLlxuICAgIGNvbnN0IGlzTG9jYWxBc3NldCA9IGtleS5zdGFydHNXaXRoKCdhc3NldHMvJyk7XG4gICAgY29uc3QgdXJsID0gaXNMb2NhbEFzc2V0ID8ga2V5IDogYXdhaXQgZ2V0U2lnbmVkRmlsZShrZXkpO1xuICAgIGlmICghdXJsKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBWaWV3ZXJTZXJ2aWNlOiBjb3VsZCBub3QgcmVzb2x2ZSBhIHNpZ25lZCBVUkwgZm9yIHRoZSAzRCBtb2RlbCBhdCBcIiR7a2V5fVwiLmApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwbGFjZW1lbnQgPSBwYXJzZVRocmVlSnNQbGFjZW1lbnQocGxhY2VtZW50TWV0YWRhdGEpO1xuICAgIC8vIFRoZSBrZXksIG5vdCB0aGUgc2lnbmVkIFVSTCwgaXMgd2hhdCBpZGVudGlmaWVzIHRoZSBtb2RlbCBhY3Jvc3MgbG9hZHMgLSB0aGUgc2lnbmF0dXJlIG1ha2VzXG4gICAgLy8gZXZlcnkgVVJMIHVuaXF1ZSwgd2hpY2ggaXMgZXhhY3RseSB3aHkgdGhlIGJyb3dzZXIncyBvd24gY2FjaGUgbmV2ZXIgaGVscHMgaGVyZS5cbiAgICB0aGlzLnRocmVlSnNTZXJ2aWNlLmxvYWRHTFRGTW9kZWwodXJsLCBwbGFjZW1lbnQ/LmNhbWVyYVBvc2l0aW9uLCBwbGFjZW1lbnQ/LnJvdGF0aW9uLCBrZXksIHBsYWNlbWVudD8udXApO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIGEgM0QgbW9kZWwgaW50byB0aGUgVGhyZWUuanMgc2NlbmUgKE9CSikuXG4gICAqL1xuICBsb2FkT2JqTW9kZWwobXRsVXJsOiBzdHJpbmcsIG9ialVybDogc3RyaW5nLCBjYW1lcmFQb3NpdGlvbj86IHt4OiBudW1iZXIsIHk6IG51bWJlciwgejogbnVtYmVyfSwgcm90YXRpb24/OiB7eDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlcn0pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jaGVja01vZGUoJ3RocmVlanMnKSkge1xuICAgICAgdGhpcy50aHJlZUpzU2VydmljZS5sb2FkT2JqTW9kZWwobXRsVXJsLCBvYmpVcmwsIGNhbWVyYVBvc2l0aW9uLCByb3RhdGlvbik7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHRocmVlSnNPYmplY3RIb3ZlcmVkJCgpIHtcbiAgICByZXR1cm4gdGhpcy50aHJlZUpzU2VydmljZS5vYmplY3RIb3ZlcmVkJDtcbiAgfVxuXG4gIGdldCB0aHJlZUpzT2JqZWN0Q2xpY2tlZCQoKSB7XG4gICAgcmV0dXJuIHRoaXMudGhyZWVKc1NlcnZpY2Uub2JqZWN0Q2xpY2tlZCQ7XG4gIH1cblxuICAvKiogRW1pdHMgdHJ1ZSB3aGlsZSBhIGhlYXZ5IC5vYmogZmlsZSBpcyBiZWluZyBwYXJzZWQgKGluIGEgd29ya2VyLCB3aGVuIGF2YWlsYWJsZSksIGZhbHNlIG9uY2UgZG9uZS4gKi9cbiAgZ2V0IHRocmVlSnNNb2RlbExvYWRpbmckKCkge1xuICAgIHJldHVybiB0aGlzLnRocmVlSnNTZXJ2aWNlLm1vZGVsTG9hZGluZyQ7XG4gIH1cblxuICAvKiogRG93bmxvYWQgcHJvZ3Jlc3MgZm9yIEdMQiBtb2RlbHMgYXMgYSAwLTEgZnJhY3Rpb24sIG9yIG51bGwgd2hlbiB0aGUgc2l6ZSBpc24ndCBrbm93biB1cGZyb250LiAqL1xuICBnZXQgdGhyZWVKc01vZGVsTG9hZFByb2dyZXNzJCgpIHtcbiAgICByZXR1cm4gdGhpcy50aHJlZUpzU2VydmljZS5tb2RlbExvYWRQcm9ncmVzcyQ7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIHRoZSBXZWIgV29ya2VyIHVzZWQgdG8gcGFyc2UgaGVhdnkgLm9iaiBmaWxlcyBvZmYgdGhlIG1haW4gdGhyZWFkLlxuICAgKiBNdXN0IGJlIGNyZWF0ZWQgYnkgdGhlIGFwcCAoc2VlIG9iai1wYXJzZXIud29ya2VyLnRzKSwgc2luY2UgdGhpcyBsaWJyYXJ5IGNhbid0IGJ1bmRsZSB3b3JrZXIgZmlsZXMuXG4gICAqL1xuICBzZXRPYmpQYXJzZXJXb3JrZXIod29ya2VyOiBXb3JrZXIpOiB2b2lkIHtcbiAgICB0aGlzLnRocmVlSnNTZXJ2aWNlLnNldE9ialBhcnNlcldvcmtlcih3b3JrZXIpO1xuICB9XG5cbiAgYWRkVGhyZWVKc09iamVjdHMob2JqczogYW55W10pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jaGVja01vZGUoJ3RocmVlanMnKSkge1xuICAgICAgdGhpcy50aHJlZUpzU2VydmljZS51cGRhdGVPYmpzVG9TY2VuZShvYmpzKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBpbml0TWF0dGVycG9ydFNkayhcbiAgICBzcGFjZUlEOiBzdHJpbmcsXG4gICAgbW9kZWwzRDogc3RyaW5nLFxuICAgIHRhZ1NlcnZpY2U6IEJhc2VUYWdTZXJ2aWNlLFxuICAgIG1vZHVsZTogU3BNb2R1bGUgPSBTcE1vZHVsZS5JTU1PXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuaXNMb2FkZWQgPSBmYWxzZTtcbiAgICB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmN1cnJlbnRTcGFjZUlEID0gc3BhY2VJRDtcbiAgICBpZiAodGhpcy5tYXR0ZXJwb3J0U2VydmljZS5zZGspIHtcbiAgICAgIGF3YWl0IHRoaXMuY2xlYXJBbGwoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubWF0dGVycG9ydFNlcnZpY2VcbiAgICAgIC5pbml0U2RrKHRhZ1NlcnZpY2UsIG1vZHVsZSlcbiAgICAgIC50aGVuKGFzeW5jIChyZXN1bHQpID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgIGNvbnN0IHsgc2RrIH0gPSB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlO1xuXG4gICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICAgICAgc2RrLlNjZW5lLnJlZ2lzdGVyKHNlY3VyaXR5Q2FtZXJhVHlwZSwgbWFrZVNlY3VyaXR5Q2FtZXJhLmJpbmQoc2RrLlNjZW5lKSksXG4gICAgICAgICAgICBzZGsuU2NlbmUucmVnaXN0ZXIoVmlld0ZydXN0dW1NZXNoVHlwZSwgbWFrZVZpZXdGcnVzdHVtTWVzaC5iaW5kKHNkay5TY2VuZSkpXG4gICAgICAgICAgXSk7XG5cbiAgICAgICAgICB0aGlzLnNob3dpbmdWaWV3ZXIgPSB0cnVlO1xuXG4gICAgICAgICAgc2RrLkFwcC5zdGF0ZS5zdWJzY3JpYmUoXG4gICAgICAgICAgICBmdW5jdGlvbiAoYXBwU3RhdGUpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5kZWJ1ZygnVGhlIGN1cnJlbnQgcGhhc2U6ICcsIGFwcFN0YXRlLnBoYXNlKTtcbiAgICAgICAgICAgICAgaWYgKGFwcFN0YXRlLnBoYXNlID09PSBzZGsuQXBwLlBoYXNlLlBMQVlJTkcpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnVGhlIGFwcCBpcyBwbGF5aW5nJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93aW5nVmlld2VyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXdlcklzT24ubmV4dCh7XG4gICAgICAgICAgICAgICAgICBzcGFjZUlELFxuICAgICAgICAgICAgICAgICAgbW9kZWwzRCxcbiAgICAgICAgICAgICAgICAgIHN3ZWVwOiB0aGlzLnN3ZWVwVG9Nb3ZlLFxuICAgICAgICAgICAgICAgICAgcm90YXRpb246IHRoaXMucm90YXRpb25Ub01vdmUsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhSXNMb2FkZWQubmV4dCh0cnVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnN3ZWVwVG9Nb3ZlID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLnJvdGF0aW9uVG9Nb3ZlID0gbnVsbDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHRoaXMudmlld2VySXNPbi5uZXh0KHtcbiAgICAgICAgICAgIHNwYWNlSUQsXG4gICAgICAgICAgICBtb2RlbDNELFxuICAgICAgICAgICAgc3dlZXA6IHRoaXMuc3dlZXBUb01vdmUsXG4gICAgICAgICAgICByb3RhdGlvbjogdGhpcy5yb3RhdGlvblRvTW92ZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmRhdGFJc0xvYWRlZC5uZXh0KHRydWUpO1xuICAgICAgICAgIHRoaXMuaXNMb2FkZWQgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuc3dlZXBUb01vdmUgPSBudWxsO1xuICAgICAgICAgIHRoaXMucm90YXRpb25Ub01vdmUgPSBudWxsO1xuXG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgpO1xuICAgICAgfSk7XG4gIH1cblxuICByZW1vdmVGb3JiaWRkZW5Td2VlcHMoZm9yYmlkZGVuU3dlZXBzOiBzdHJpbmdbXSkge1xuICAgIGlmICh0aGlzLmNoZWNrTW9kZSgnTWF0dGVycG9ydCcpKSB7XG4gICAgICB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLnJlbW92ZUZvcmJpZGRlblN3ZWVwcyhmb3JiaWRkZW5Td2VlcHMpO1xuICAgIH1cbiAgfVxuXG4gIHNldE9iamVjdDNETG9hZGVkSW5Qb3NpdGlvbihvYmplY3RMb2FkZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmlzT2JqZWN0TG9hZGVkID0gb2JqZWN0TG9hZGVkO1xuICB9XG5cbiAgaXNPYmplY3QzRExvYWRlZEluUG9zaXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNPYmplY3RMb2FkZWQ7XG4gIH1cbn1cbiJdfQ==
|
|
1033
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL3NlcnZpY2VzL3ZpZXdlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFDQUFxQztBQUNyQyw4QkFBOEI7QUFDOUIseUNBQXlDO0FBQ3pDLDJDQUEyQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBSy9CLE9BQU8sRUFHTCxrQkFBa0IsRUFDbEIsT0FBTyxFQUtQLFFBQVEsR0FDVCxNQUFNLGtCQUFrQixDQUFDO0FBRTFCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlEQUF5RCxDQUFDO0FBQ2pILE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBRXRILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDN0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLHFCQUFxQixFQUFFLHdCQUF3QixFQUFrQixNQUFNLG9CQUFvQixDQUFDOzs7Ozs7O0FBTTFILE1BQU0sT0FBTyxhQUFhO0lBOEV1QjtJQUNWO0lBQzNCO0lBQ0E7SUFDQTtJQUNBO0lBbEZGLFVBQVUsR0FBVyxZQUFZLENBQUM7SUFFbkMsY0FBYyxDQUFTO0lBRXRCLE9BQU8sQ0FBUztJQUVqQixVQUFVLEdBS1osSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUVaLFlBQVksR0FBcUIsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUUvQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBRWpCLGFBQWEsR0FBRyxLQUFLLENBQUM7SUFFN0I7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QyxRQUFRLEdBQUcsSUFBSSxDQUFDO2dCQUNyQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztnQkFDeEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7Z0JBRTNCLE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzNCLENBQUM7WUFDRCxPQUFPLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxlQUF5QjtRQUM3QyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsaUJBQWlCLENBQUMscUJBQXFCLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDaEUsQ0FBQztJQUNILENBQUM7SUFFRCwyQkFBMkIsQ0FBQyxZQUFxQjtRQUMvQyxJQUFJLENBQUMsY0FBYyxHQUFHLFlBQVksQ0FBQztJQUNyQyxDQUFDO0lBRUQsMEJBQTBCO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUM3QixDQUFDO3dHQXpxQ1UsYUFBYSxrQkE4RWQsa0JBQWtCLGFBQ2xCLFFBQVE7NEdBL0VQLGFBQWEsY0FGWixNQUFNOzs0RkFFUCxhQUFhO2tCQUh6QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBK0VJLE1BQU07MkJBQUMsa0JBQWtCOzswQkFDekIsTUFBTTsyQkFBQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tYXdhaXQtaW4tbG9vcCAqL1xyXG4vKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cclxuLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZXJzY29yZS1kYW5nbGUgKi9cclxuLyogZXNsaW50LWRpc2FibGUgY2xhc3MtbWV0aG9kcy11c2UtdGhpcyAqL1xyXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTUFUVEVSUE9SVF9TREtfS0VZIH0gZnJvbSAnLi4vdG9rZW5zL21hdHRlcnBvcnQtc2RrLWtleS50b2tlbic7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgTWF0dGVycG9ydFNlcnZpY2UgfSBmcm9tICcuL21hdHRlcnBvcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IFRocmVlSnNNZWFzdXJlbWVudCwgVGhyZWVKc1NlcnZpY2UgfSBmcm9tICcuL3RocmVlanMuc2VydmljZSc7XHJcbmltcG9ydCB7IFN3ZWVwTG9jYXRvclNlcnZpY2UgfSBmcm9tICcuL3N3ZWVwLWxvY2F0b3Iuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VUYWdTZXJ2aWNlIH0gZnJvbSAnLi90YWcuc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgRGJPYmplY3RUeXBlLFxyXG4gIFBPSSxcclxuICBWaWV3ZXJJbnRlcmFjdGlvbnMsXHJcbiAgUG9pVHlwZSxcclxuICBDb21tZW50LFxyXG4gIEVxdWlwbWVudCxcclxuICBUaWNrZXQsXHJcbiAgRmVhdHVyZSxcclxuICBTcE1vZHVsZSxcclxufSBmcm9tICcuLi90eXBlcy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUG9pU2VydmljZSB9IGZyb20gJy4vbW9kZWxzL3BvaS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgbWFrZVNlY3VyaXR5Q2FtZXJhLCBzZWN1cml0eUNhbWVyYVR5cGUgfSBmcm9tIFwiLi4vbWF0dGVycG9ydC1leHRlbnNpb25zL3NlY3VyaXR5LWNhbWVyYS9TZWN1cml0eUNhbWVyYVwiO1xyXG5pbXBvcnQgeyBWaWV3RnJ1c3R1bU1lc2hUeXBlLCBtYWtlVmlld0ZydXN0dW1NZXNoIH0gZnJvbSBcIi4uL21hdHRlcnBvcnQtZXh0ZW5zaW9ucy92aWV3LWZydXN0dW0tbWVzaC9WaWV3RnJ1c3R1bU1lc2hcIjtcclxuaW1wb3J0IHsgTmF2aWdhdG9yU2VydmljZSB9IGZyb20gJy4vbmF2aWdhdG9yLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBnZXRTaWduZWRGaWxlIH0gZnJvbSAnLi9zMy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgZ2V0VGhyZWVKc1BvaU9yaWdpbiwgcGFyc2VUaHJlZUpzUGxhY2VtZW50LCBUSFJFRUpTX01PREVMX1VQX09QVElPTlMsIFRocmVlSnNNb2RlbFVwIH0gZnJvbSAnLi4vaGVscGVycy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29uZmlnIH0gZnJvbSAnLi4vY29uZmlnJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBWaWV3ZXJTZXJ2aWNlIHtcclxuICBwcml2YXRlIHZpZXdlck1vZGU6IHN0cmluZyA9ICdNYXR0ZXJwb3J0JztcclxuXHJcbiAgcHVibGljIGN1cnJlbnRNb2RlbDNEOiBzdHJpbmc7XHJcblxyXG4gIHByaXZhdGUgdG91clVybDogc3RyaW5nO1xyXG5cclxuICBwdWJsaWMgdmlld2VySXNPbjogU3ViamVjdDx7XHJcbiAgICBzcGFjZUlEOiBzdHJpbmcgfCBudWxsO1xyXG4gICAgbW9kZWwzRDogc3RyaW5nIHwgbnVsbDtcclxuICAgIHN3ZWVwOiBzdHJpbmcgfCBudWxsO1xyXG4gICAgcm90YXRpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IH0gfCBudWxsO1xyXG4gIH0+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgcHVibGljIGRhdGFJc0xvYWRlZDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIHB1YmxpYyBpc0xvYWRlZCA9IGZhbHNlO1xyXG5cclxuICBwdWJsaWMgc2hvd2luZ1ZpZXdlciA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgc3BhY2UgYmVpbmcgdmlld2VkLCB3aGljaGV2ZXIgdmlld2VyIGlzIHNob3dpbmcgaXQuXHJcbiAgICpcclxuICAgKiBNYXR0ZXJwb3J0U2VydmljZSBjYXJyaWVzIGl0cyBvd24gY29weSwgc2V0IHdoaWxlIGl0cyBTREsgY29ubmVjdHMgLSB3aGljaCBuZXZlciBoYXBwZW5zIGluXHJcbiAgICogVGhyZWUuanMgbW9kZS4gQW55dGhpbmcgdGhhdCByZWFkcyBvbmx5IHRoYXQgb25lIHNpbGVudGx5IGRvZXMgbm90aGluZyBmb3IgYSAzRCBtb2RlbCwgYW5kIHRoZVxyXG4gICAqIGxpc3RzIHRoYXQgZmVlZCB0YWdzIGFyZSBleGFjdGx5IHRoYXQuXHJcbiAgICovXHJcbiAgcHVibGljIGN1cnJlbnRTcGFjZUlEOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIFRocmVlLmpzIGNhcHR1cmUgb24gc2NyZWVuLCBvciBudWxsIGluIE1hdHRlcnBvcnQuXHJcbiAgICpcclxuICAgKiBBIHNwYWNlIGNhbiBob2xkIHNldmVyYWwgM0QgbW9kZWxzLiBBIHRhZyBwbGFjZWQgaW4gb25lIGlzIHJlY29yZGVkIHdpdGggaXQsIHNvIHRoYXQgbW9kZWxcclxuICAgKiBrZWVwcyBzaG93aW5nIHRoZSB0YWcgd2hhdGV2ZXIgc2VsZWN0aW9uIG9mIHRhZ3MgaXQgaXMgb3RoZXJ3aXNlIHJlc3RyaWN0ZWQgdG8uXHJcbiAgICovXHJcbiAgcHVibGljIGN1cnJlbnRDYXB0dXJlSUQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG5cclxuICAvKipcclxuICAgKiBXaGV0aGVyIHRoZSAzRCBtb2RlbCBvbiBzY3JlZW4gaGFzIGJlZW4gY2FsaWJyYXRlZCBhZ2FpbnN0IHRoZSB0YWdzJyBzaGFyZWQgc3BhY2UuXHJcbiAgICpcclxuICAgKiBDYWxpYnJhdGluZyBpcyB3aGF0IHNheXMgdGhlIG1vZGVsIGFuZCB0aGF0IHNwYWNlIG92ZXJsYXAuIFVudGlsIHRoZW4gYSB0YWcgcGxhY2VkIGluIHRoZSBtb2RlbFxyXG4gICAqIGlzIGluIHRoZSBtb2RlbCdzIG93biBjb29yZGluYXRlczogaXQgYmVsb25ncyB0byBubyBNYXR0ZXJwb3J0IHN3ZWVwIGFuZCB0byBubyBvdGhlciB2aXNpdC5cclxuICAgKi9cclxuICBwcml2YXRlIHRocmVlSnNDYWxpYnJhdGVkID0gZmFsc2U7XHJcblxyXG4gIHB1YmxpYyBzd2VlcFRvTW92ZTogc3RyaW5nIHwgbnVsbDtcclxuXHJcbiAgcHVibGljIHJvdGF0aW9uVG9Nb3ZlOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB9IHwgbnVsbDtcclxuXHJcbiAgcHVibGljIGdvVG9UcmlnZ2VyZWQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICBwdWJsaWMgdG9vbGJveFN0YXRlcyA9IHtcclxuICAgIGRvbGxob3VzZToge1xyXG4gICAgICBzdGF0OiBmYWxzZSxcclxuICAgICAgaWNvbklkOiAndWktZG9sbGhvdXNlJyxcclxuICAgICAgc2hvdygpIHtcclxuICAgICAgfSxcclxuICAgICAgaGlkZSgpIHtcclxuICAgICAgfSxcclxuICAgIH0sXHJcbiAgICBmbG9vcnBsYW46IHtcclxuICAgICAgc3RhdDogZmFsc2UsXHJcbiAgICB9LFxyXG4gICAgbWVzdXJlOiB7XHJcbiAgICAgIHN0YXQ6IGZhbHNlLFxyXG4gICAgICBpY29uSWQ6ICd1aS1tZXN1cmUnLFxyXG4gICAgICBzaG93KCkge1xyXG4gICAgICB9LFxyXG4gICAgICBoaWRlKCkge1xyXG4gICAgICB9LFxyXG4gICAgfSxcclxuICAgIGZpbHRlcjoge1xyXG4gICAgICBzdGF0OiBmYWxzZSxcclxuICAgIH0sXHJcbiAgfTtcclxuICBwcml2YXRlIGlzT2JqZWN0TG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEluamVjdChNQVRURVJQT1JUX1NES19LRVkpIHByaXZhdGUgcmVhZG9ubHkgc2RrS2V5OiBzdHJpbmcsXHJcbiAgICBASW5qZWN0KCdjb25maWcnKSBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZzogQ29uZmlnLFxyXG4gICAgcHJpdmF0ZSBwb2lTZXJ2aWNlOiBQb2lTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtYXR0ZXJwb3J0U2VydmljZTogTWF0dGVycG9ydFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRocmVlSnNTZXJ2aWNlOiBUaHJlZUpzU2VydmljZSxcclxuICAgIHByaXZhdGUgc3dlZXBMb2NhdG9yOiBTd2VlcExvY2F0b3JTZXJ2aWNlLFxyXG4gICkge1xyXG4gICAgdGhpcy5zZXRNb2RlKCdNYXR0ZXJwb3J0Jyk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgICAgVXRpbHNcclxuICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuXHJcbiAgY2hlY2tNb2RlKGluZGV4TW9kZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy52aWV3ZXJNb2RlID09PSBpbmRleE1vZGU7XHJcbiAgfVxyXG5cclxuICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAgICBTZXR0ZXJzXHJcbiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcblxyXG4gIHNldE1vZGUoaW5kZXhNb2RlOiBzdHJpbmcpIHtcclxuICAgIC8vIExlYXZpbmcgVGhyZWUuanMgbWVhbnMgbm8gVGhyZWUuanMgd29yayBzaG91bGQgc3RpbGwgYmUgcnVubmluZy4gVGhlIHNlcnZpY2UgYmVoaW5kIGl0IGlzIGFcclxuICAgIC8vIHNpbmdsZXRvbiBhbmQgb3V0bGl2ZXMgdGhlIGNvbXBvbmVudCwgc28gYSBkb3dubG9hZCBzdGFydGVkIGZvciBhIG1vZGVsIHRoZSB1c2VyIGhhcyBuYXZpZ2F0ZWRcclxuICAgIC8vIGF3YXkgZnJvbSB3b3VsZCBvdGhlcndpc2UgZmluaXNoIC0gYW5kIGl0cyBwYXJzZSB3b3VsZCBob2xkIHRoZSBtYWluIHRocmVhZCBmb3Igc2Vjb25kcyxcclxuICAgIC8vIHN0YWxsaW5nIHdoYXRldmVyIHZpZXdlciB0aGV5IGFjdHVhbGx5IG9wZW5lZC5cclxuICAgIGlmICh0aGlzLnZpZXdlck1vZGUgPT09ICd0aHJlZWpzJyAmJiBpbmRleE1vZGUgIT09ICd0aHJlZWpzJykge1xyXG4gICAgICB0aGlzLnRocmVlSnNTZXJ2aWNlLmRlc3Ryb3koKTtcclxuICAgIH1cclxuICAgIHRoaXMudmlld2VyTW9kZSA9IGluZGV4TW9kZTtcclxuICB9XHJcblxyXG4gIHNldFRvdXJVcmwob3B0aW9uczoge1xyXG4gICAgbW9kZWwzZDogc3RyaW5nLFxyXG4gICAgc2hvd0ljb25QbGFuPzogYm9vbGVhbixcclxuICAgIHNob3dJY29uRG9sbGhvdXNlPzogYm9vbGVhbixcclxuICAgIHNob3dJY29uRmxvb3JzPzogYm9vbGVhbixcclxuICAgIHNob3dRdWlja1N0YXJ0PzogYm9vbGVhbixcclxuICAgIHNob3dGdWxsc2NyZWVuPzogYm9vbGVhbixcclxuICAgIHNob3dHdWlkZWRUb3VyPzogYm9vbGVhbixcclxuICAgIHNob3dIaWdobGlnaHRSZWVsPzogYm9vbGVhbixcclxuICAgIHNob3dEZWZ1cm5pc2g/OiBib29sZWFuLFxyXG4gICAgc2hvd1Jvb21NZWFzdXJlbWVudHM/OiBib29sZWFuXHJcbiAgfSkge1xyXG4gICAgY29uc3Qge1xyXG4gICAgICBtb2RlbDNkLFxyXG4gICAgICBzaG93SWNvblBsYW4gPSB0cnVlLFxyXG4gICAgICBzaG93SWNvbkRvbGxob3VzZSA9IHRydWUsXHJcbiAgICAgIHNob3dJY29uRmxvb3JzID0gdHJ1ZSxcclxuICAgICAgc2hvd1F1aWNrU3RhcnQgPSB0cnVlLFxyXG4gICAgICBzaG93RnVsbHNjcmVlbiA9IHRydWUsXHJcbiAgICAgIHNob3dHdWlkZWRUb3VyID0gdHJ1ZSxcclxuICAgICAgc2hvd0hpZ2hsaWdodFJlZWwgPSB0cnVlLFxyXG4gICAgICBzaG93RGVmdXJuaXNoID0gdHJ1ZSxcclxuICAgICAgc2hvd1Jvb21NZWFzdXJlbWVudHMgPSB0cnVlXHJcbiAgICB9ID0gb3B0aW9ucztcclxuXHJcbiAgICBjb25zdCBiYXNlVXJsID0gYC9hc3NldHMvYnVuZGxlL3Nob3djYXNlLmh0bWxgO1xyXG5cclxuICAgIGNvbnN0IHBhcmFtczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICAvLyBNb2TDqGxlXHJcbiAgICBwYXJhbXMucHVzaChgbT0ke21vZGVsM2R9YCk7XHJcblxyXG4gICAgLy8gQ29tcG9ydGVtZW50IGfDqW7DqXJhbFxyXG4gICAgcGFyYW1zLnB1c2goYHBsYXk9MWApO1xyXG4gICAgcGFyYW1zLnB1c2goYHVpPTFgKTtcclxuICAgIHBhcmFtcy5wdXNoKGB0aXRsZT0wYCk7XHJcbiAgICBwYXJhbXMucHVzaChgbG9nPTBgKTtcclxuICAgIHBhcmFtcy5wdXNoKGBicmFuZD0wYCk7XHJcbiAgICBwYXJhbXMucHVzaChgc2VhcmNoPTBgKTtcclxuICAgIHBhcmFtcy5wdXNoKGBhcHBsaWNhdGlvbktleT0ke3RoaXMuc2RrS2V5fWApO1xyXG4gICAgcGFyYW1zLnB1c2goYG1kcz0wYCk7XHJcblxyXG4gICAgLy8gUXVpY2sgc3RhcnRcclxuICAgIGlmIChzaG93UXVpY2tTdGFydCkge1xyXG4gICAgICBwYXJhbXMucHVzaChgcXM9MWApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEZsb29ycGxhbiAocGxhbilcclxuICAgIGlmICghc2hvd0ljb25QbGFuKSB7XHJcbiAgICAgIHBhcmFtcy5wdXNoKGBmcD0wYCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRG9sbGhvdXNlIChtYWlzb24vcG91cMOpZSlcclxuICAgIGlmICghc2hvd0ljb25Eb2xsaG91c2UpIHtcclxuICAgICAgcGFyYW1zLnB1c2goYGRoPTBgKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBTw6lsZWN0ZXVyIGTigJnDqXRhZ2VzXHJcbiAgICBpZiAoIXNob3dJY29uRmxvb3JzKSB7XHJcbiAgICAgIHBhcmFtcy5wdXNoKGBzZj0wYCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gR3VpZGVkIHRvdXJcclxuICAgIGlmICghc2hvd0d1aWRlZFRvdXIpIHtcclxuICAgICAgcGFyYW1zLnB1c2goYGd0PTBgKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBIaWdobGlnaHQgcmVlbCAoYmFuZGUgZHUgYmFzKVxyXG4gICAgaWYgKCFzaG93SGlnaGxpZ2h0UmVlbCkge1xyXG4gICAgICAvLyBTZWxvbiB0b24gYnVuZGxlIDogaHI9MSBvdSBocj0wIG1hc3F1ZVxyXG4gICAgICBwYXJhbXMucHVzaChgaHI9MWApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFBsZWluIMOpY3JhblxyXG4gICAgaWYgKCFzaG93RnVsbHNjcmVlbikge1xyXG4gICAgICBwYXJhbXMucHVzaChgZnM9MGApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIERlZnVybmlzaFxyXG4gICAgaWYgKHNob3dEZWZ1cm5pc2gpIHtcclxuICAgICAgcGFyYW1zLnB1c2goYGFkPTFgKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBSb29tIE1lYXN1cmVtZW50c1xyXG4gICAgaWYgKHNob3dSb29tTWVhc3VyZW1lbnRzKSB7XHJcbiAgICAgIHBhcmFtcy5wdXNoKGBtZWFzdXJlbWVudHM9MWApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudG91clVybCA9IGAke2Jhc2VVcmx9PyR7cGFyYW1zLmpvaW4oXCImXCIpfWA7XHJcbiAgfVxyXG5cclxuICBhc3luYyBjbGVhckFsbCgpIHtcclxuICAgIC8vIHRoaXMuc3dlZXBUb01vdmUgPSBudWxsO1xyXG4gICAgLy8gdGhpcy5yb3RhdGlvblRvTW92ZSA9IG51bGw7XHJcbiAgICBpZiAodGhpcy5jaGVja01vZGUoJ3RocmVlanMnKSkge1xyXG4gICAgICB0aGlzLnRocmVlSnNTZXJ2aWNlLmRlc3Ryb3koKTtcclxuICAgICAgdGhpcy5zaG93aW5nVmlld2VyID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuaXNMb2FkZWQgPSBmYWxzZTtcclxuICAgICAgLy8gTWlycm9ycyB0aGUgTWF0dGVycG9ydCBicmFuY2g6IHRoZSBzcGFjZSBpcyBubyBsb25nZXIgb24gc2NyZWVuLCBzbyB3aGF0ZXZlciB3YXMgbG9hZGVkXHJcbiAgICAgIC8vIGZvciBpdCBoYXMgdG8gYmUgZHJvcHBlZCBiZWZvcmUgYW5vdGhlciB2aXNpdCBvcGVucy5cclxuICAgICAgdGhpcy52aWV3ZXJJc09uLm5leHQoe1xyXG4gICAgICAgIHNwYWNlSUQ6IG51bGwsXHJcbiAgICAgICAgbW9kZWwzRDogbnVsbCxcclxuICAgICAgICBzd2VlcDogbnVsbCxcclxuICAgICAgICByb3RhdGlvbjogbnVsbCxcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuY2hlY2tNb2RlKCdNYXR0ZXJwb3J0JykpIHtcclxuICAgICAgdGhpcy5zaG93aW5nVmlld2VyID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuaXNMb2FkZWQgPSBmYWxzZTtcclxuICAgICAgYXdhaXQgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5jbGVhckFsbCgpO1xyXG4gICAgICB0aGlzLnZpZXdlcklzT24ubmV4dCh7XHJcbiAgICAgICAgc3BhY2VJRDogbnVsbCxcclxuICAgICAgICBtb2RlbDNEOiBudWxsLFxyXG4gICAgICAgIHN3ZWVwOiBudWxsLFxyXG4gICAgICAgIHJvdGF0aW9uOiBudWxsLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgICAgIEdldHRlcnNcclxuICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuXHJcbiAgZ2V0TW9kZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnZpZXdlck1vZGU7XHJcbiAgfVxyXG5cclxuICBnZXRWaWV3ZXJTZWxlY3RlZFNlcnZpY2UoKSB7XHJcbiAgICAvLyBNYXR0ZXJwb3J0XHJcbiAgICAvLyBpZiAodGhpcy5jaGVja01vZGUoXCJNYXR0ZXJwb3J0XCIpKSB7XHJcbiAgICAvLyAgICAgcmV0dXJuIHRoaXMuZ2V0TWF0dGVycG9ydFNlcnZpY2UoKTtcclxuICAgIC8vIH1cclxuICAgIHJldHVybiB0aGlzLmdldE1hdHRlcnBvcnRTZXJ2aWNlKCk7XHJcbiAgfVxyXG5cclxuICBnZXRUb3VyVXJsKCkge1xyXG4gICAgcmV0dXJuIHRoaXMudG91clVybDtcclxuICB9XHJcblxyXG4gIGdldE1hdHRlcnBvcnRTZXJ2aWNlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMubWF0dGVycG9ydFNlcnZpY2U7XHJcbiAgfVxyXG5cclxuICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAgICBHZW5lcmljIE1haW4gYWN0aW9uIGZ1bmN0aW9uc1xyXG4gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG4gIHNldFN3ZWVwVG9Nb3ZlKHN3ZWVwOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuc3dlZXBUb01vdmUgPSBzd2VlcDtcclxuICB9XHJcblxyXG4gIHNldFJvdGF0aW9uVG9Nb3ZlKHJvdGF0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB9KSB7XHJcbiAgICB0aGlzLnJvdGF0aW9uVG9Nb3ZlID0gcm90YXRpb247XHJcbiAgfVxyXG5cclxuXHJcbiAgYXN5bmMgYWN0aW9uX21vdmVfdG9fdGFnKGVsZW1lbnRJZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAvLyBNYXR0ZXJwb3J0XHJcbiAgICBpZiAodGhpcy5jaGVja01vZGUoJ01hdHRlcnBvcnQnKSkge1xyXG4gICAgICBjb25zdCByZXN1bHQgPSB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmdldFRhZ0Zyb21FbGVtZW50SWQoZWxlbWVudElkKTtcclxuICAgICAgaWYgKHJlc3VsdC50YWcpIHtcclxuICAgICAgICBhd2FpdCB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmdvVG9UYWcocmVzdWx0LnRhZyk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHJlc3VsdC5zd2VlcCkge1xyXG4gICAgICAgIHRoaXMuc3dlZXBUb01vdmUgPSByZXN1bHQuc3dlZXA7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gV2l0aG91dCB0aGlzIHRoZSBjYWxsZXIgZmFsbHMgdGhyb3VnaCB0byBnZXRNb2RlbDNkQW5kU3dlZXAsIHdoaWNoIHJlc29sdmVzIGEgdmlzaXQgZnJvbSB0aGVcclxuICAgIC8vIFBPSSdzIHN3ZWVwIC0gYSBUaHJlZS5qcyBQT0kgaGFzIG5vbmUsIHNvIGl0IGZhaWxzIGFuZCByZXBvcnRzIHRoZSBtb2RlbCBhcyB1bnJlYWNoYWJsZSBldmVuXHJcbiAgICAvLyB0aG91Z2ggdGhlIHRhZyBpcyBvbiBzY3JlZW4uXHJcbiAgICBpZiAodGhpcy5jaGVja01vZGUoJ3RocmVlanMnKSAmJiB0aGlzLnRocmVlSnNTZXJ2aWNlLmhhc1RhZyhlbGVtZW50SWQpKSB7XHJcbiAgICAgIHRoaXMudGhyZWVKc1NlcnZpY2UuZ29Ub1RhZyhlbGVtZW50SWQpO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZHMgTWF0dGVydGFncyB0byBWaWV3ZXJcclxuICAgKiBAcGFyYW0gb2JqZWN0cyBMaXN0IG9mIG9iamVjdHMgKHRpY2tldHMsIGVxdWlwbWVudHMpIGV0YyB0byBiZSBhZGRlZCBhcyBNYXR0ZXJ0YWdzXHJcbiAgICovXHJcbiAgYXN5bmMgYWRkT2JqZWN0VGFnc1RvVmlld2VyKG9iamVjdHM6IERiT2JqZWN0VHlwZVtdKSB7XHJcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgb2JqZWN0cy5tYXAoYXN5bmMgKG9iamVjdCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHBvaSA9IGF3YWl0IHRoaXMucG9pU2VydmljZS5nZXRQb2lCeUVsZW1lbnRJZChvYmplY3QuaWQhKTtcclxuICAgICAgICBpZiAocG9pICYmIHBvaS5jb29yZGluYXRlKSB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLmFjdGlvbkFkZE9iamVjdEZyb21QT0kob2JqZWN0LCBwb2kpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgICAvLyBOZXdseSBjcmVhdGVkIHRhZ3MgaGF2ZSBubyBvcGFjaXR5L2FsbG93QWN0aW9uIGFwcGxpZWQgeWV0IChvbmx5IHNldCBieVxyXG4gICAgLy8gdXBkYXRlVGFnc1Zpc2liaWxpdHlGb3JDb250ZXh0LCB3aGljaCBydW5zIG9uIE1vZGUvU3dlZXAvRmxvb3IvUm9vbS9DYW1lcmFcclxuICAgIC8vIGV2ZW50cykuIElmIHRoaXMgYmF0Y2ggbG9hZGVkIGFmdGVyIHRob3NlIGZpcmVkLCB0aGUgdGFncyBzdGF5IGluIHdoYXRldmVyXHJcbiAgICAvLyBkZWZhdWx0IHN0YXRlIHRoZSBTREsgZ2F2ZSB0aGVtIHVudGlsIHNvbWV0aGluZyBlbHNlIG51ZGdlcyBhIHJlZnJlc2guXHJcbiAgICBpZiAodGhpcy5jaGVja01vZGUoJ01hdHRlcnBvcnQnKSkge1xyXG4gICAgICB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLnJlZnJlc2hUYWdzVmlzaWJpbGl0eSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgYWN0aW9uQWRkT2JqZWN0RnJvbVBPSShvYmplY3Q6IERiT2JqZWN0VHlwZSwgcG9pOiBQT0kpIHtcclxuICAgIGlmICh0aGlzLmNoZWNrTW9kZSgnTWF0dGVycG9ydCcpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmNyZWF0ZU1hdHRlcnRhZ0Zyb21QT0koXHJcbiAgICAgICAgcG9pLnR5cGUhLFxyXG4gICAgICAgIG9iamVjdCxcclxuICAgICAgICBwb2lcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNoZWNrTW9kZSgndGhyZWVqcycpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmFkZFRocmVlSnNUYWdGcm9tUE9JKG9iamVjdCwgcG9pKTtcclxuICAgIH1cclxuICAgIC8vIEN1cGl4XHJcbiAgICAvLyBUT0RPXHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEcmF3cyBhIFBPSSBhcyBhIHRhZyBpbiB0aGUgVGhyZWUuanMgc2NlbmUuXHJcbiAgICpcclxuICAgKiBCb3RoIHZpZXdlcnMgYXJlIGZlZCBieSB0aGUgc2FtZSBzdWJzY3JpcHRpb25zIG9uIHRoZSBzYW1lIFBPSSByZWNvcmRzLCBzbyBhIHRhZyBjcmVhdGVkIGluXHJcbiAgICogZWl0aGVyIG9uZSBzaG93cyB1cCBpbiB0aGUgb3RoZXIgd2l0aG91dCBhbnkgc3luY2luZyBvZiBpdHMgb3duIC0gdGhpcyBpcyBqdXN0IHRoZSBUaHJlZS5qcyBlbmRcclxuICAgKiBvZiB0aGUgcGlwZWxpbmUgdGhhdCBhbHJlYWR5IGRyaXZlcyBNYXR0ZXJwb3J0LlxyXG4gICAqL1xyXG4gIHByaXZhdGUgYXN5bmMgYWRkVGhyZWVKc1RhZ0Zyb21QT0kob2JqZWN0OiBEYk9iamVjdFR5cGUsIHBvaTogUE9JKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoIXBvaS5jb29yZGluYXRlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBwb3NpdGlvbjogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgejogbnVtYmVyIH07XHJcbiAgICB0cnkge1xyXG4gICAgICBwb3NpdGlvbiA9IEpTT04ucGFyc2UocG9pLmNvb3JkaW5hdGUpO1xyXG4gICAgfSBjYXRjaCB7XHJcbiAgICAgIGNvbnNvbGUud2FybihgVmlld2VyU2VydmljZTogdW5wYXJzZWFibGUgUE9JIGNvb3JkaW5hdGUgZm9yIGVsZW1lbnQgJHtvYmplY3QuaWR9OmAsIHBvaS5jb29yZGluYXRlKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKCFbcG9zaXRpb24/LngsIHBvc2l0aW9uPy55LCBwb3NpdGlvbj8uel0uZXZlcnkoKHZhbHVlKSA9PiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgb3JpZ2luID0gZ2V0VGhyZWVKc1BvaU9yaWdpbihwb2kpO1xyXG4gICAgdGhpcy50aHJlZUpzU2VydmljZS51cHNlcnRUYWcoe1xyXG4gICAgICBpZDogb2JqZWN0LmlkLFxyXG4gICAgICBwb3NpdGlvbixcclxuICAgICAgcG9pVHlwZTogcG9pLnR5cGUsXHJcbiAgICAgIGxhYmVsOiBvYmplY3QubmFtZSA/PyBvYmplY3QudGl0bGUgPz8gbnVsbCxcclxuICAgICAgaWNvblVybDogYXdhaXQgdGhpcy5yZXNvbHZlVGFnSWNvblVybChwb2kpLFxyXG4gICAgICBvcmlnaW5DYXB0dXJlSUQ6IG9yaWdpbj8uY2FwdHVyZUlEID8/IG51bGwsXHJcbiAgICAgIGZyYW1lOiBvcmlnaW4/LmZyYW1lID8/IG51bGwsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3JlcyB0aGUgdGFncyB0aGUgbGFzdCBjYWxpYnJhdGlvbiBoYWQgdG8gcmV3cml0ZSwgYW5kIHJldHVybnMgaG93IG1hbnkgaXQgY291bGQgbm90LlxyXG4gICAqXHJcbiAgICogQ2FsaWJyYXRpbmcga2VlcHMgdGhlIHRhZ3MgcGxhY2VkIGluIHRoaXMgbW9kZWwgd2hlcmUgdGhleSBhcmUgYnkgY2hhbmdpbmcgdGhlaXIgY29vcmRpbmF0ZXNcclxuICAgKiByYXRoZXIgdGhhbiB0aGVpciBwbGFjZSAoc2VlIFRocmVlSnNTZXJ2aWNlLmFwcGx5QWxpZ25tZW50S2VlcGluZ093blRhZ3MpLiBUaGUgc2NlbmUgYWxyZWFkeVxyXG4gICAqIHNob3dzIHRoZSByZXN1bHQ7IHRoaXMgd3JpdGVzIGl0IGRvd24uIENhbGwgaXQgb25jZSB0aGUgY2FsaWJyYXRpb24gaXRzZWxmIGlzIHN0b3JlZCAtIHdpdGggdGhlXHJcbiAgICogb2xkIGNhbGlicmF0aW9uIHN0aWxsIG9uIHJlY29yZCwgdGhlIG9sZCBjb29yZGluYXRlcyBhcmUgdGhlIG9uZXMgdGhhdCBtYXRjaCBpdC5cclxuICAgKi9cclxuICBhc3luYyBwZXJzaXN0UmViYXNlZFRocmVlSnNUYWdzKCk6IFByb21pc2U8eyBzdG9yZWQ6IG51bWJlcjsgZmFpbGVkOiBudW1iZXIgfT4ge1xyXG4gICAgY29uc3QgcmViYXNlZCA9IHRoaXMudGhyZWVKc1NlcnZpY2UudGFrZVJlYmFzZWRUYWdzKCk7XHJcbiAgICBsZXQgZmFpbGVkID0gMDtcclxuICAgIGF3YWl0IFByb21pc2UuYWxsKHJlYmFzZWQubWFwKGFzeW5jICh0YWcpID0+IHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCBwb2kgPSBhd2FpdCB0aGlzLnBvaVNlcnZpY2UuZ2V0UG9pQnlFbGVtZW50SWQodGFnLmlkKTtcclxuICAgICAgICBpZiAoIXBvaT8uaWQpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IG1ldGFkYXRhOiBhbnkgPSB7fTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgbWV0YWRhdGEgPSAocG9pLm1ldGFkYXRhID8gSlNPTi5wYXJzZShwb2kubWV0YWRhdGEpIDoge30pID8/IHt9O1xyXG4gICAgICAgIH0gY2F0Y2gge1xyXG4gICAgICAgICAgbWV0YWRhdGEgPSB7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gSW4gdGhlIHNoYXJlZCBzcGFjZSBmcm9tIGhlcmUgb24sIHNvIG5vIGxvbmdlciBtYXJrZWQgYXMgYmVpbmcgaW4gdGhlIG1vZGVsJ3Mgb3duLlxyXG4gICAgICAgIGRlbGV0ZSBtZXRhZGF0YS5mcmFtZTtcclxuICAgICAgICBpZiAobWV0YWRhdGEubm9ybWFsKSB7XHJcbiAgICAgICAgICBtZXRhZGF0YS5ub3JtYWwgPSB0YWcucm90YXRlRGlyZWN0aW9uKG1ldGFkYXRhLm5vcm1hbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRDYXB0dXJlSUQpIHtcclxuICAgICAgICAgIG1ldGFkYXRhLmNhcHR1cmVJRCA9IHRoaXMuY3VycmVudENhcHR1cmVJRDtcclxuICAgICAgICB9XHJcbiAgICAgICAgYXdhaXQgdGhpcy5wb2lTZXJ2aWNlLnVwZGF0ZVBvaSh7XHJcbiAgICAgICAgICBpZDogcG9pLmlkLFxyXG4gICAgICAgICAgY29vcmRpbmF0ZTogSlNPTi5zdHJpbmdpZnkodGFnLnBvc2l0aW9uKSxcclxuICAgICAgICAgIG1ldGFkYXRhOiBKU09OLnN0cmluZ2lmeShtZXRhZGF0YSksXHJcbiAgICAgICAgICAvLyBJdHMgcGxhY2UgaW4gdGhlIHRvdXIgbWF5IGhhdmUgY2hhbmdlZCB3aXRoIGl0cyBjb29yZGluYXRlcyAtIG9yIGl0IG1heSBoYXZlIG9uZSBmb3JcclxuICAgICAgICAgIC8vIHRoZSBmaXJzdCB0aW1lLCBub3cgdGhhdCB0aGUgbW9kZWwgaXMgY2FsaWJyYXRlZC5cclxuICAgICAgICAgIG1hdHRlcnBvcnRTd2VlcElEOiBhd2FpdCB0aGlzLmZpbmROZWFyZXN0U3dlZXBGb3JUaHJlZUpzKHRhZy5wb3NpdGlvbiksXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgZmFpbGVkICs9IDE7XHJcbiAgICAgICAgY29uc29sZS53YXJuKGBWaWV3ZXJTZXJ2aWNlOiBjb3VsZCBub3Qgc3RvcmUgdGhlIG5ldyBjb29yZGluYXRlcyBvZiB0YWcgJHt0YWcuaWR9YCwgZXJyb3IpO1xyXG4gICAgICB9XHJcbiAgICB9KSk7XHJcbiAgICByZXR1cm4geyBzdG9yZWQ6IHJlYmFzZWQubGVuZ3RoIC0gZmFpbGVkLCBmYWlsZWQgfTtcclxuICB9XHJcblxyXG4gIC8qKiBIb3cgbWFueSB0YWdzIHRoZSBjYWxpYnJhdGlvbiB3YWxrdGhyb3VnaCBjb3VsZCBzdGlsbCB1c2U6IHRoZSBvbmVzIGZyb20gZWxzZXdoZXJlLiAqL1xyXG4gIGdldFRocmVlSnNDYWxpYnJhdGlvbkNhbmRpZGF0ZUNvdW50KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5jaGVja01vZGUoJ3RocmVlanMnKSA/IHRoaXMudGhyZWVKc1NlcnZpY2UuZ2V0Q2FsaWJyYXRpb25DYW5kaWRhdGVDb3VudCgpIDogMDtcclxuICB9XHJcblxyXG4gIC8qKiBIb3cgbWFueSB0YWdzIGZyb20gZWxzZXdoZXJlIGFyZSBub3Qgb24gdGhlIDNEIG1vZGVsLCBhbmQgc28gYXJlIG5vdCBzaG93biBvbiBpdC4gKi9cclxuICBnZXRUaHJlZUpzT2ZmTW9kZWxUYWdDb3VudCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuY2hlY2tNb2RlKCd0aHJlZWpzJykgPyB0aGlzLnRocmVlSnNTZXJ2aWNlLmdldE9mZk1vZGVsVGFnQ291bnQoKSA6IDA7XHJcbiAgfVxyXG5cclxuICAvKiogVGhlIHRhZ3MgcmVnaXN0ZXJlZCBpbiB0aGUgVGhyZWUuanMgc2NlbmUsIHNob3duIG9yIG5vdC4gKi9cclxuICBnZXRUaHJlZUpzVGFncygpIHtcclxuICAgIHJldHVybiB0aGlzLmNoZWNrTW9kZSgndGhyZWVqcycpID8gdGhpcy50aHJlZUpzU2VydmljZS5nZXRUYWdzKCkgOiBbXTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBpbWFnZSB0byBkcmF3IGEgdGFnIHdpdGgsIG1pcnJvcmluZyB3aGF0IE1hdHRlcnBvcnQgc2hvd3MgZm9yIHRoZSBzYW1lIFBPSS5cclxuICAgKlxyXG4gICAqIE1hdHRlcnBvcnQgcmVnaXN0ZXJzIG9uZSB0ZXh0dXJlIHBlciB0eXBlIChgaWNvbi10aWNrZXRgLCBgaWNvbi1lcXVpcG1lbnRgLi4uKSBmcm9tIHRoZSBzYW1lXHJcbiAgICogY29uZmlnIGVudHJpZXMgdXNlZCBoZXJlLCBhbmQgb3ZlcnJpZGVzIGl0IHdpdGggdGhlIFBPSSdzIG93biBpY29uIHdoZW4gaXQgaGFzIG9uZS4gUmVhZGluZyB0aGVcclxuICAgKiBzYW1lIHR3byBzb3VyY2VzIGlzIHdoYXQga2VlcHMgYSB0YWcgbG9va2luZyBsaWtlIGl0c2VsZiBhY3Jvc3MgdGhlIHR3byB2aWV3ZXJzLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgYXN5bmMgcmVzb2x2ZVRhZ0ljb25VcmwocG9pOiBQT0kpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcclxuICAgIGlmIChwb2kudGFnSWNvbikge1xyXG4gICAgICAvLyBTdG9yZWQgYXMgSlNPTiAoeyBzcmMsIG9wYWNpdHkgfSkgYnkgdGhlIE1hdHRlcnBvcnQgcGF0aCwgYnV0IG9sZGVyIHJlY29yZHMgYXJlIGEgYmFyZSBrZXkuXHJcbiAgICAgIGxldCBzb3VyY2U6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UocG9pLnRhZ0ljb24pO1xyXG4gICAgICAgIHNvdXJjZSA9IHR5cGVvZiBwYXJzZWQgPT09ICdzdHJpbmcnID8gcGFyc2VkIDogcGFyc2VkPy5zcmMgPz8gbnVsbDtcclxuICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgc291cmNlID0gcG9pLnRhZ0ljb247XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHNvdXJjZSkge1xyXG4gICAgICAgIGNvbnN0IHNpZ25lZCA9IGF3YWl0IGdldFNpZ25lZEZpbGUoc291cmNlKTtcclxuICAgICAgICBpZiAoc2lnbmVkKSB7XHJcbiAgICAgICAgICByZXR1cm4gc2lnbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdFRhZ0ljb25VcmwocG9pLnR5cGUpO1xyXG4gIH1cclxuXHJcbiAgLyoqIFRoZSBjb25maWd1cmVkIGljb24gZm9yIGEgUE9JIHR5cGUsIG9yIG51bGwgd2hlbiB0aGF0IHR5cGUgaGFzIG5vbmUuICovXHJcbiAgcHJpdmF0ZSBkZWZhdWx0VGFnSWNvblVybChwb2lUeXBlOiBQb2lUeXBlIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgY29uc3QgaWNvbnMgPSB0aGlzLmNvbmZpZz8ubXlfY29uZmlnO1xyXG4gICAgaWYgKCFpY29ucykge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHN3aXRjaCAocG9pVHlwZSkge1xyXG4gICAgICBjYXNlIFBvaVR5cGUuVElDS0VUOlxyXG4gICAgICAgIHJldHVybiBpY29ucy5pY29uX3RpY2tldCA/PyBudWxsO1xyXG4gICAgICBjYXNlIFBvaVR5cGUuRVFVSVBNRU5UOlxyXG4gICAgICAgIHJldHVybiBpY29ucy5pY29uX2VxdWlwbWVudCA/PyBudWxsO1xyXG4gICAgICBjYXNlIFBvaVR5cGUuTUVBU1VSRTpcclxuICAgICAgICByZXR1cm4gaWNvbnMuaWNvbl9tZWFzdXJlID8/IG51bGw7XHJcbiAgICAgIGNhc2UgUG9pVHlwZS5PQkpFQ1QzRDpcclxuICAgICAgICByZXR1cm4gaWNvbnMuaWNvbl9vYmplY3QzZCA/PyBudWxsO1xyXG4gICAgICBjYXNlIFBvaVR5cGUuREFUQTpcclxuICAgICAgY2FzZSBQb2lUeXBlLkRFU0s6XHJcbiAgICAgICAgcmV0dXJuIGljb25zLmljb25fZGF0YSA/PyBudWxsO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIE1vdmVzIHRoZSBUaHJlZS5qcyBjYW1lcmEgdG8gZnJhbWUgYSB0YWcsIG1pcnJvcmluZyBNYXR0ZXJwb3J0J3MgZ29Ub1RhZy4gKi9cclxuICBnb1RvVGhyZWVKc1RhZyhlbGVtZW50SWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY2hlY2tNb2RlKCd0aHJlZWpzJykpIHtcclxuICAgICAgdGhpcy50aHJlZUpzU2VydmljZS5nb1RvVGFnKGVsZW1lbnRJZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogU2hvd3Mgb25seSB0YWdzIG9mIHRoZSBnaXZlbiBQT0kgdHlwZXM7IG51bGwgY2xlYXJzIHRoZSBmaWx0ZXIuICovXHJcbiAgc2V0VmlzaWJsZVRocmVlSnNUYWdUeXBlcyh0eXBlczogUG9pVHlwZVtdIHwgbnVsbCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY2hlY2tNb2RlKCd0aHJlZWpzJykpIHtcclxuICAgICAgdGhpcy50aHJlZUpzU2VydmljZS5zZXRWaXNpYmxlVGFnVHlwZXModHlwZXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWxpZ25tZW50IHdhbGt0aHJvdWdoOiBwaWNrIGEgdGFnLCB0aGVuIGNsaWNrIHdoZXJlIGl0IHJlYWxseSBzaXRzLCB0aHJlZSB0aW1lcyBvdmVyLlxyXG4gICAqXHJcbiAgICogVXNlcyB0YWdzIHRoYXQgYWxyZWFkeSBleGlzdCwgc28gbm90aGluZyBpcyBjcmVhdGVkIGFuZCBub3RoaW5nIGlzIHdyaXR0ZW4gdW50aWwgdGhlIGNhbGxlclxyXG4gICAqIHNhdmVzIHRoZSByZXN1bHQuIFNlZSB0aHJlZUpzQWxpZ25tZW50UHJvZ3Jlc3MkIGZvciB3aGF0IHRoZSBVSSBzaG91bGQgYmUgYXNraW5nIGZvci5cclxuICAgKi9cclxuICBzdGFydFRocmVlSnNUYWdBbGlnbm1lbnQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jaGVja01vZGUoJ3RocmVlanMnKSkge1xyXG4gICAgICB0aGlzLnRocmVlSnNTZXJ2aWNlLnN0YXJ0VGFnQWxpZ25tZW50KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjYW5jZWxUaHJlZUpzVGFnQWxpZ25tZW50KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY2hlY2tNb2RlKCd0aHJlZWpzJykpIHtcclxuICAgICAgdGhpcy50aHJlZUpzU2VydmljZS5jYW5jZWxUYWdBbGlnbm1lbnQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCB0aHJlZUpzQWxpZ25tZW50UHJvZ3Jlc3MkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMudGhyZWVKc1NlcnZpY2UuYWxpZ25tZW50UHJvZ3Jlc3MkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU29sdmVzIHRoZSBhbGlnbm1lbnQgYW5kIGFwcGxpZXMgaXQgdG8gdGhlIHNjZW5lLCByZXR1cm5pbmcgaXQgYXMgdGhlIEpTT04gdG8gc3RvcmUgaW4gdGhlXHJcbiAgICogY2FwdHVyZSdzIG1ldGFkYXRhLiBOdWxsIG1lYW5zIHRoZSB0aHJlZSB0YWdzIHdlcmUgY29sbGluZWFyIGFuZCBub3RoaW5nIHdhcyBhcHBsaWVkLlxyXG4gICAqL1xyXG4gIHNvbHZlVGhyZWVKc1RhZ0FsaWdubWVudChleGlzdGluZ01ldGFkYXRhPzogc3RyaW5nKTogeyBhbGlnbm1lbnQ6IGFueTsgbWV0YWRhdGE6IHN0cmluZyB9IHwgbnVsbCB7XHJcbiAgICBpZiAoIXRoaXMuY2hlY2tNb2RlKCd0aHJlZWpzJykpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBjb25zdCBhbGlnbm1lbnQgPSB0aGlzLnRocmVlSnNTZXJ2aWNlLnNvbHZlQWxpZ25tZW50RnJvbVBhaXJzKCk7XHJcbiAgICBpZiAoIWFsaWdubWVudCkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHRoaXMudGhyZWVKc0NhbGlicmF0ZWQgPSB0cnVlO1xyXG4gICAgLy8gTWVyZ2VkIGludG8gd2hhdGV2ZXIgdGhlIGNhcHR1cmUgYWxyZWFkeSBzdG9yZXMsIHNvIGFuIGV4aXN0aW5nIGNhbWVyYSBwbGFjZW1lbnQgc3Vydml2ZXMuXHJcbiAgICBsZXQgc3RvcmVkOiBhbnkgPSB7fTtcclxuICAgIHRyeSB7XHJcbiAgICAgIHN0b3JlZCA9IGV4aXN0aW5nTWV0YWRhdGEgPyBKU09OLnBhcnNlKGV4aXN0aW5nTWV0YWRhdGEpIDoge307XHJcbiAgICB9IGNhdGNoIHtcclxuICAgICAgc3RvcmVkID0ge307XHJcbiAgICB9XHJcbiAgICBzdG9yZWQuYWxpZ25tZW50ID0gYWxpZ25tZW50O1xyXG4gICAgcmV0dXJuIHsgYWxpZ25tZW50LCBtZXRhZGF0YTogSlNPTi5zdHJpbmdpZnkoc3RvcmVkKSB9O1xyXG4gIH1cclxuXHJcbiAgLyoqIFNob3dzIG9yIGhpZGVzIGEgc2luZ2xlIFRocmVlLmpzIHRhZy4gKi9cclxuICBzZXRUaHJlZUpzVGFnVmlzaWJpbGl0eShlbGVtZW50SWQ6IHN0cmluZywgdmlzaWJsZTogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY2hlY2tNb2RlKCd0aHJlZWpzJykpIHtcclxuICAgICAgdGhpcy50aHJlZUpzU2VydmljZS5zZXRUYWdWaXNpYmlsaXR5KGVsZW1lbnRJZCwgdmlzaWJsZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBhY3Rpb25fZGVsZXRlX2VsZW1lbnQoZWxlbWVudDogRGJPYmplY3RUeXBlKSB7XHJcbiAgICAvLyBNYXR0ZXJwb3J0XHJcbiAgICBpZiAodGhpcy5jaGVja01vZGUoJ01hdHRlcnBvcnQnKSkge1xyXG4gICAgICBhd2FpdCB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmRlbGV0ZU1hdHRlcnRhZ0Zvck9iamVjdChlbGVtZW50LmlkKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNoZWNrTW9kZSgndGhyZWVqcycpKSB7XHJcbiAgICAgIHRoaXMudGhyZWVKc1NlcnZpY2UucmVtb3ZlVGFnKGVsZW1lbnQuaWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIEVtaXRzIHdoZW4gYSBUaHJlZS5qcyBtb2RlbCBsb2FkIGFjdHVhbGx5IHN0b3BwZWQgc2hvcnQsIHJhdGhlciB0aGFuIG1lcmVseSBiZWluZyBhc2tlZCB0by4gKi9cclxuICBnZXQgdGhyZWVKc01vZGVsTG9hZENhbmNlbGxlZCQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy50aHJlZUpzU2VydmljZS5tb2RlbExvYWRDYW5jZWxsZWQkO1xyXG4gIH1cclxuXHJcbiAgLyoqIFN0b3BzIHRoZSBUaHJlZS5qcyBtb2RlbCBkb3dubG9hZCBpbiBwcm9ncmVzcy4gKi9cclxuICBjYW5jZWxUaHJlZUpzTW9kZWxMb2FkKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY2hlY2tNb2RlKCd0aHJlZWpzJykpIHtcclxuICAgICAgdGhpcy50aHJlZUpzU2VydmljZS5jYW5jZWxNb2RlbExvYWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBFbWl0cyBhIHRhZydzIGxhYmVsIHdoaWxlIHRoZSBwb2ludGVyIGlzIG92ZXIgaXQgaW4gdGhlIFRocmVlLmpzIHNjZW5lLiAqL1xyXG4gIGdldCB0aHJlZUpzVGFnSG92ZXJlZCQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy50aHJlZUpzU2VydmljZS50YWdIb3ZlcmVkJDtcclxuICB9XHJcblxyXG4gIC8qKiBFbWl0cyB0aGUgZWxlbWVudCBpZCBvZiBhIHRhZyBjbGlja2VkIGluIHRoZSBUaHJlZS5qcyBzY2VuZS4gKi9cclxuICBnZXQgdGhyZWVKc1RhZ0NsaWNrZWQkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMudGhyZWVKc1NlcnZpY2UudGFnQ2xpY2tlZCQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBcHBsaWVzIHRoZSB2aXNpdCdzIHN0b3JlZCB0YWcgYWxpZ25tZW50LCBtYXBwaW5nIGNhcHR1cmVkIHRhZyBjb29yZGluYXRlcyBvbnRvIHRoaXMgbW9kZWwuXHJcbiAgICpcclxuICAgKiBTYWZlIHRvIGNhbGwgYmVmb3JlIHRoZSBtb2RlbCBvciBhbnkgdGFnIGV4aXN0czogaXQgaXMgYSB0cmFuc2Zvcm0gb24gdGhlIGdyb3VwIGJvdGggZW5kIHVwXHJcbiAgICogdW5kZXIsIHNvIGl0IGFwcGxpZXMgdG8gd2hhdGV2ZXIgYXJyaXZlcyBsYXRlci5cclxuICAgKi9cclxuICBzZXRUaHJlZUpzVGFnQWxpZ25tZW50RnJvbU1ldGFkYXRhKG1ldGFkYXRhOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5jaGVja01vZGUoJ3RocmVlanMnKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBhbGlnbm1lbnQgPSBwYXJzZVRocmVlSnNQbGFjZW1lbnQobWV0YWRhdGEpPy5hbGlnbm1lbnQgPz8gbnVsbDtcclxuICAgIHRoaXMudGhyZWVKc0NhbGlicmF0ZWQgPSAhIWFsaWdubWVudDtcclxuICAgIC8vIFdoaWNoIHRhZ3Mgd2VyZSBwbGFjZWQgaW4gdGhpcyBtb2RlbCBpcyBkZWNpZGVkIGFnYWluc3QgdGhlIGNhcHR1cmUgb24gc2NyZWVuLlxyXG4gICAgdGhpcy50aHJlZUpzU2VydmljZS5zZXRDdXJyZW50Q2FwdHVyZSh0aGlzLmN1cnJlbnRDYXB0dXJlSUQpO1xyXG4gICAgdGhpcy50aHJlZUpzU2VydmljZS5zZXRUYWdBbGlnbm1lbnQoYWxpZ25tZW50KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVuYWJsZSB0YWcgcGxhY2VtZW50IG1lbnUgdG8gYWRkIGEgbmV3IGVsZW1lbnQgZGVwZW5kaW5nIG9uIGl0cyB0eXBlIChUSUNLRVQsIERBVEEsIEVRVUlQTUVOVCBldGMpXHJcbiAgICovXHJcbiAgYXN5bmMgYWN0aW9uQWRkTmV3RWxlbWVudFRvVmlld2VyKHBvaVR5cGU6IFBvaVR5cGUpIHtcclxuICAgIHRoaXMuYWN0aW9uX3Rvb2xib3hfaW5zaWRlX3ZpZXcoKTtcclxuXHJcbiAgICAvLyBNYXR0ZXJwb3J0XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuY2hlY2tNb2RlKCdNYXR0ZXJwb3J0JykgJiZcclxuICAgICAgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5nZXRJbnRlcmFjdGlvbk1vZGUoKSA9PT0gVmlld2VySW50ZXJhY3Rpb25zLkRFRkFVTFRcclxuICAgICkge1xyXG4gICAgICBhd2FpdCB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmFkZE1hdHRlcnRhZ1doZW5BZGRpbmcocG9pVHlwZSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jaGVja01vZGUoJ3RocmVlanMnKSkge1xyXG4gICAgICB0aGlzLnRocmVlSnNTZXJ2aWNlLnN0YXJ0VGFnUGxhY2VtZW50KHBvaVR5cGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTGF1bmNoZXMgdGhlIHJlcG9zaXRpb25pbmcgb2YgYW4gZXhpc3RpbmcgTWF0dGVydGFnIHJlbGF0ZWQgdG8gcGFyYW1ldGVyIG9iamVjdFxyXG4gICAqIEBwYXJhbSBlbGVtZW50IG9iamVjdCAoVElDS0VULCBFUVVJUE1FTlQsIEZFQVRVUkUsIGV0YylcclxuICAgKiBAcGFyYW0gcG9pVHlwZSB0eXBlIG9mIG9iamVjdFxyXG4gICAqL1xyXG4gIGFzeW5jIGFjdGlvblJlcG9zaXRpb25FbGVtZW50SW5WaWV3ZXIoXHJcbiAgICBlbGVtZW50OiBEYk9iamVjdFR5cGUsXHJcbiAgICBwb2lUeXBlOiBQb2lUeXBlXHJcbiAgKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuY2hlY2tNb2RlKCdNYXR0ZXJwb3J0JykgJiZcclxuICAgICAgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5nZXRJbnRlcmFjdGlvbk1vZGUoKSA9PT0gVmlld2VySW50ZXJhY3Rpb25zLkRFRkFVTFRcclxuICAgICkge1xyXG4gICAgICBhd2FpdCB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmFkZE1hdHRlcnRhZ1doZW5SZXBvc2l0aW9uaW5nKHBvaVR5cGUsIGVsZW1lbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRW5hYmxlIHRpY2tldCBwbGFjZW1lbnQgbWVudSB0byBhZGQgYSBuZXcgdGlja2V0XHJcbiAgICovXHJcbiAgYWN0aW9uX2NhbmNlbGVkKCkge1xyXG4gICAgLy8gTWF0dGVycG9ydFxyXG4gICAgaWYgKHRoaXMuY2hlY2tNb2RlKCdNYXR0ZXJwb3J0JykpIHtcclxuICAgICAgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5jYW5jZWxGb2xsb3dpbmdDdXJzb3IoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNoZWNrTW9kZSgndGhyZWVqcycpKSB7XHJcbiAgICAgIHRoaXMudGhyZWVKc1NlcnZpY2UuY2FuY2VsVGFnUGxhY2VtZW50KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhY3Rpb25fdG9vbGJveF9pbnNpZGVfdmlldygpIHtcclxuICAgIC8vIE1hdHRlcnBvcnRcclxuICAgIGlmICh0aGlzLmNoZWNrTW9kZSgnTWF0dGVycG9ydCcpKSB7XHJcbiAgICAgIHRoaXMubWF0dGVycG9ydFNlcnZpY2UuYWN0aW9uX3Rvb2xib3hfaW5zaWRlX3ZpZXcoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFjdGlvblNob3dBbGxGbG9vcnMoKSB7XHJcbiAgICAvLyBNYXR0ZXJwb3J0XHJcbiAgICBpZiAodGhpcy5jaGVja01vZGUoJ01hdHRlcnBvcnQnKSkge1xyXG4gICAgICB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmFjdGlvblNob3dBbGxGbG9vcnMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFjdGlvbl90b29sYm94X2RvbGxob3VzZSgpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5nZXRJbnRlcmFjdGlvbk1vZGUoKSAhPT0gVmlld2VySW50ZXJhY3Rpb25zLkRFRkFVTFRcclxuICAgICkge1xyXG4gICAgICB0aGlzLmFjdGlvbl9jYW5jZWxlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYWN0aW9uX3Rvb2xib3hfY2FuY2VsX21lc3VyZSgpO1xyXG4gICAgLy8gTWF0dGVycG9ydFxyXG4gICAgaWYgKHRoaXMuY2hlY2tNb2RlKCdNYXR0ZXJwb3J0JykpIHtcclxuICAgICAgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5hY3Rpb25fdG9vbGJveF9kb2xsaG91c2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGFjdGlvbl9mbG9vcnBsYW4oKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMubWF0dGVycG9ydFNlcnZpY2UuZ2V0SW50ZXJhY3Rpb25Nb2RlKCkgIT09IFZpZXdlckludGVyYWN0aW9ucy5ERUZBVUxUXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5hY3Rpb25fY2FuY2VsZWQoKTtcclxuICAgIH1cclxuICAgIC8vIE1hdHRlcnBvcnRcclxuICAgIGlmICh0aGlzLmNoZWNrTW9kZSgnTWF0dGVycG9ydCcpKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMubWF0dGVycG9ydFNlcnZpY2UuYWN0aW9uX3Rvb2xib3hfZmxvb3JwbGFuKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhY3Rpb25fdG9vbGJveF9tZXN1cmUoKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMubWF0dGVycG9ydFNlcnZpY2UuZ2V0SW50ZXJhY3Rpb25Nb2RlKCkgIT09IFZpZXdlckludGVyYWN0aW9ucy5ERUZBVUxUXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5hY3Rpb25fY2FuY2VsZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmFjdGlvbl90b29sYm94X2luc2lkZV92aWV3KCk7XHJcbiAgICAvLyBNYXR0ZXJwb3J0XHJcbiAgICBpZiAodGhpcy5jaGVja01vZGUoJ01hdHRlcnBvcnQnKSkge1xyXG4gICAgICB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmFjdGlvbl90b29sYm94X21lc3VyZSgpO1xyXG4gICAgfVxyXG4gICAgLy8gTWF0dGVycG9ydCdzIFNESyBicmluZ3MgaXRzIG93biBtZWFzdXJpbmcgdG9vbDsgdGhlIFRocmVlLmpzIHZpZXdlciBoYXMgdG8gcHJvdmlkZSBvbmUuXHJcbiAgICBpZiAodGhpcy5jaGVja01vZGUoJ3RocmVlanMnKSkge1xyXG4gICAgICB0aGlzLnRocmVlSnNTZXJ2aWNlLnN0YXJ0TWVhc3VyaW5nKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhY3Rpb25fdG9vbGJveF9jYW5jZWxfbWVzdXJlKCkge1xyXG4gICAgLy8gTWF0dGVycG9ydFxyXG4gICAgaWYgKHRoaXMuY2hlY2tNb2RlKCdNYXR0ZXJwb3J0JykpIHtcclxuICAgICAgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5hY3Rpb25fdG9vbGJveF9jYW5jZWxfbWVzdXJlKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jaGVja01vZGUoJ3RocmVlanMnKSkge1xyXG4gICAgICB0aGlzLnRocmVlSnNTZXJ2aWNlLmNhbmNlbE1lYXN1cmluZygpO1xyXG4gICAgICAvLyBUaGUgdG9vbGJhciB0b2dnbGVzIG9uIHRoaXMgZmxhZzsgbGVmdCBvbiwgdGhlIG5leHQgY2xpY2sgd291bGQgc3dpdGNoIG1lYXN1cmluZyBcIm9mZlwiXHJcbiAgICAgIC8vIGluc3RlYWQgb2Ygc3RhcnRpbmcgYSBuZXcgb25lLlxyXG4gICAgICB0aGlzLnRvb2xib3hTdGF0ZXMubWVzdXJlLnN0YXQgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBXaGlsZSBtZWFzdXJpbmcgaW4gdGhlIFRocmVlLmpzIHZpZXdlcjogcG9pbnRzIGFuZCBzZWdtZW50IGxlbmd0aHMgc28gZmFyLCBudWxsIGlmIGFiYW5kb25lZC4gKi9cclxuICBnZXQgdGhyZWVKc01lYXN1cmVtZW50UHJvZ3Jlc3MkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMudGhyZWVKc1NlcnZpY2UubWVhc3VyZW1lbnRQcm9ncmVzcyQ7XHJcbiAgfVxyXG5cclxuICAvKiogRW5kcyB0aGUgVGhyZWUuanMgbWVhc3VyZW1lbnQgaW4gcHJvZ3Jlc3MsIG9yIHJldHVybnMgbnVsbCB3aGVuIGl0IGhhcyBmZXdlciB0aGFuIHR3byBwb2ludHMuICovXHJcbiAgZmluaXNoVGhyZWVKc01lYXN1cmVtZW50KCk6IFRocmVlSnNNZWFzdXJlbWVudCB8IG51bGwge1xyXG4gICAgaWYgKCF0aGlzLmNoZWNrTW9kZSgndGhyZWVqcycpKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbWVhc3VyZW1lbnQgPSB0aGlzLnRocmVlSnNTZXJ2aWNlLmZpbmlzaE1lYXN1cmluZygpO1xyXG4gICAgaWYgKG1lYXN1cmVtZW50KSB7XHJcbiAgICAgIHRoaXMudG9vbGJveFN0YXRlcy5tZXN1cmUuc3RhdCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG1lYXN1cmVtZW50O1xyXG4gIH1cclxuXHJcbiAgLyoqIFRoZSBtZWFzdXJlbWVudCBsYXN0IGZpbmlzaGVkIGluIHRoZSBUaHJlZS5qcyB2aWV3ZXIsIGZvciB0aGUgZm9ybSB0aGF0IHNhdmVzIGl0LiAqL1xyXG4gIGdldFRocmVlSnNMYXN0TWVhc3VyZW1lbnQoKTogVGhyZWVKc01lYXN1cmVtZW50IHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5jaGVja01vZGUoJ3RocmVlanMnKSA/IHRoaXMudGhyZWVKc1NlcnZpY2UuZ2V0TGFzdE1lYXN1cmVtZW50KCkgOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIE1hdHRlcnBvcnQgc3dlZXAgbmVhcmVzdCB0byBhIHBvaW50IHBpY2tlZCBpbiB0aGUgVGhyZWUuanMgdmlld2VyLCBvciBudWxsLlxyXG4gICAqXHJcbiAgICogRm9yIGNhbGxlcnMgdGhhdCB3cml0ZSB0aGVpciBvd24gUE9JLCBhcyB0aGUgbWVhc3VyZW1lbnQgZm9ybSBkb2VzIC0gYW55dGhpbmcgY3JlYXRlZCB0aHJvdWdoXHJcbiAgICogY3JlYXRlUG9pRm9yVGhyZWVKc1BsYWNlbWVudCBhbHJlYWR5IGdldHMgdGhpcy5cclxuICAgKi9cclxuICBmaW5kTmVhcmVzdFN3ZWVwRm9yVGhyZWVKcyhwb2ludDogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgejogbnVtYmVyIH0pOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcclxuICAgIC8vIEFuIHVuY2FsaWJyYXRlZCBtb2RlbCdzIGNvb3JkaW5hdGVzIGFyZSBpdHMgb3duLiBNZWFzdXJlZCBhZ2FpbnN0IHRoZSBNYXR0ZXJwb3J0IHN3ZWVwcyB0aGV5XHJcbiAgICAvLyBjb3VsZCBsYW5kIG5lYXIgb25lIGJ5IGNvaW5jaWRlbmNlLCBhbmQgdGhlIHRhZyB3b3VsZCB0dXJuIHVwIGluIHRoZSB0b3VyIHNvbWV3aGVyZSBhcmJpdHJhcnkuXHJcbiAgICBpZiAoIXRoaXMudGhyZWVKc0NhbGlicmF0ZWQpIHtcclxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLnN3ZWVwTG9jYXRvci5maW5kTmVhcmVzdFN3ZWVwKHBvaW50LCB0aGlzLmN1cnJlbnRTcGFjZUlEKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBtZXRhZGF0YSBhIFBPSSBwbGFjZWQgaW4gdGhlIFRocmVlLmpzIHZpZXdlciBpcyBzdG9yZWQgd2l0aDogd2hpY2ggM0QgbW9kZWwgaXQgd2FzIHBsYWNlZFxyXG4gICAqIGluLCBhbmQgLSB3aGVuIHRoYXQgbW9kZWwgaXMgbm90IGNhbGlicmF0ZWQgLSB0aGF0IGl0cyBjb29yZGluYXRlcyBhcmUgdGhlIG1vZGVsJ3Mgb3duLlxyXG4gICAqL1xyXG4gIGJ1aWxkVGhyZWVKc1BvaU1ldGFkYXRhKGV4dHJhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge30pOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgLi4uZXh0cmEsXHJcbiAgICAgIC4uLih0aGlzLmN1cnJlbnRDYXB0dXJlSUQgPyB7IGNhcHR1cmVJRDogdGhpcy5jdXJyZW50Q2FwdHVyZUlEIH0gOiB7fSksXHJcbiAgICAgIC4uLih0aGlzLmN1cnJlbnRDYXB0dXJlSUQgJiYgIXRoaXMudGhyZWVKc0NhbGlicmF0ZWQgPyB7IGZyYW1lOiAnbW9kZWwnIH0gOiB7fSksXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKiBXaGljaCBvZiB0aGUgM0QgbW9kZWwncyBheGVzIGlzIGJlaW5nIHRyZWF0ZWQgYXMgdXAuICovXHJcbiAgZ2V0VGhyZWVKc01vZGVsVXAoKTogVGhyZWVKc01vZGVsVXAge1xyXG4gICAgcmV0dXJuIHRoaXMudGhyZWVKc1NlcnZpY2UuZ2V0TW9kZWxVcCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVHVybnMgdGhlIDNEIG1vZGVsIHRvIHRoZSBuZXh0IGNhbmRpZGF0ZSBmb3IgXCJ3aGljaCBheGlzIGlzIHVwXCIsIGFuZCByZXR1cm5zIHRoZSBjYXB0dXJlXHJcbiAgICogbWV0YWRhdGEgd2l0aCB0aGF0IGNob2ljZSB3cml0dGVuIGluLCBmb3IgdGhlIGNhbGxlciB0byBzdG9yZS5cclxuICAgKlxyXG4gICAqIFRoZSB2ZXJ0aWNhbCBheGlzIGlzIHdvcmtlZCBvdXQgZnJvbSB0aGUgZ2VvbWV0cnkgd2hlbiBhIG1vZGVsIGxvYWRzLCBhbmQgdGhhdCBjYW4gYmUgd3Jvbmc6XHJcbiAgICogYSBuYXJyb3cgY29ycmlkb3IgYW5kIGEgbG93IHNsYWIgYXJlIHRoZSBzYW1lIHNoYXBlIHR1cm5lZCBvdmVyLiBUaGlzIGlzIHRoZSB3YXkgdG8gY29ycmVjdCBpdC5cclxuICAgKi9cclxuICBjeWNsZVRocmVlSnNNb2RlbFVwKGV4aXN0aW5nTWV0YWRhdGE6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiB7IHVwOiBUaHJlZUpzTW9kZWxVcDsgbWV0YWRhdGE6IHN0cmluZyB9IHwgbnVsbCB7XHJcbiAgICBpZiAoIXRoaXMuY2hlY2tNb2RlKCd0aHJlZWpzJykpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBjb25zdCBjdXJyZW50ID0gVEhSRUVKU19NT0RFTF9VUF9PUFRJT05TLmluZGV4T2YodGhpcy50aHJlZUpzU2VydmljZS5nZXRNb2RlbFVwKCkpO1xyXG4gICAgY29uc3QgdXAgPSBUSFJFRUpTX01PREVMX1VQX09QVElPTlNbKGN1cnJlbnQgKyAxKSAlIFRIUkVFSlNfTU9ERUxfVVBfT1BUSU9OUy5sZW5ndGhdO1xyXG4gICAgdGhpcy50aHJlZUpzU2VydmljZS5zZXRNb2RlbFVwKHVwKTtcclxuXHJcbiAgICBsZXQgc3RvcmVkOiBhbnkgPSB7fTtcclxuICAgIHRyeSB7XHJcbiAgICAgIHN0b3JlZCA9IGV4aXN0aW5nTWV0YWRhdGEgPyBKU09OLnBhcnNlKGV4aXN0aW5nTWV0YWRhdGEpIDoge307XHJcbiAgICB9IGNhdGNoIHtcclxuICAgICAgc3RvcmVkID0ge307XHJcbiAgICB9XHJcbiAgICBzdG9yZWQudXAgPSB1cDtcclxuICAgIHJldHVybiB7IHVwLCBtZXRhZGF0YTogSlNPTi5zdHJpbmdpZnkoc3RvcmVkKSB9O1xyXG4gIH1cclxuXHJcbiAgLyoqIENob29zZXMgdGhlIHRhZyBmb3IgdGhlIGNhbGlicmF0aW9uIHBhaXIgYmVpbmcgbWF0Y2hlZCBieSBpZCwgaW5zdGVhZCBvZiBieSBjbGlja2luZyBpdC4gKi9cclxuICBzZWxlY3RUaHJlZUpzQWxpZ25tZW50VGFnKGVsZW1lbnRJZDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5jaGVja01vZGUoJ3RocmVlanMnKSAmJiB0aGlzLnRocmVlSnNTZXJ2aWNlLnNlbGVjdEFsaWdubWVudFRhZyhlbGVtZW50SWQpO1xyXG4gIH1cclxuXHJcbiAgLyoqIEhvdyBmYXIgdGhlIHZpc2libGUgdGFncyBzaXQgZnJvbSB0aGUgM0QgbW9kZWwsIGluIG1vZGVsIHJhZGlpLiBOdWxsIHdpdGhvdXQgYm90aC4gKi9cclxuICBnZXRUaHJlZUpzVGFnRGlzdGFuY2VGcm9tTW9kZWwoKTogbnVtYmVyIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5jaGVja01vZGUoJ3RocmVlanMnKSA/IHRoaXMudGhyZWVKc1NlcnZpY2UuZ2V0VGFnRGlzdGFuY2VGcm9tTW9kZWwoKSA6IG51bGw7XHJcbiAgfVxyXG5cclxuICAvKiogSG93IG1hbnkgdGFncyB0aGUgVGhyZWUuanMgc2NlbmUgaXMgc2hvd2luZy4gKi9cclxuICBnZXRUaHJlZUpzVGFnQ291bnQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLmNoZWNrTW9kZSgndGhyZWVqcycpID8gdGhpcy50aHJlZUpzU2VydmljZS5nZXRUYWdDb3VudCgpIDogMDtcclxuICB9XHJcblxyXG4gIGFzeW5jIGFjdGlvbl91cGRhdGVfcG9pKFxyXG4gICAgcG9pOiBQT0ksXHJcbiAgICBpc1ZhbGlkOiBib29sZWFuLFxyXG4gICAgZWxlbWVudDogRGJPYmplY3RUeXBlXHJcbiAgKTogUHJvbWlzZTxQT0k+IHtcclxuICAgIGlmICh0aGlzLmNoZWNrTW9kZSgnTWF0dGVycG9ydCcpKSB7XHJcbiAgICAgIGlmIChpc1ZhbGlkKSB7XHJcbiAgICAgICAgY29uc3QgbGFzdFRhZyA9IHRoaXMubWF0dGVycG9ydFNlcnZpY2UubWF0dGVydGFnVG9Gb2xsb3dcclxuICAgICAgICAgID8gdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5tYXR0ZXJ0YWdUb0ZvbGxvd1xyXG4gICAgICAgICAgOiB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmdldExhc3RUYWcoKTtcclxuICAgICAgICBpZiAoIWxhc3RUYWcpIHtcclxuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocG9pKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdGFnRGF0YSA9IHRoaXMubWF0dGVycG9ydFNlcnZpY2UuZ2V0TWF0dGVyVGFnRGF0YUZvck1hdHRlcnRhZyhsYXN0VGFnKTtcclxuICAgICAgICBpZiAoIXRhZ0RhdGEpIHtcclxuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocG9pKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHBvaU1ldGFkYXRhID0gKCEhcG9pICYmIHBvaS5tZXRhZGF0YSkgPyBKU09OLnBhcnNlKHBvaS5tZXRhZGF0YSkgOiB7fTtcclxuICAgICAgICBwb2lNZXRhZGF0YS5ub3JtYWwgPSB0YWdEYXRhLmdldE5vcm1hbCgpO1xyXG4gICAgICAgIGlmICghcG9pKSB7XHJcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcG9pSW5wdXQgPSB7XHJcbiAgICAgICAgICBpZDogcG9pLmlkLFxyXG4gICAgICAgICAgY29vcmRpbmF0ZTogdGFnRGF0YS5nZXRDb29yZGluYXRlU3RyaW5nKCksXHJcbiAgICAgICAgICBtYXR0ZXJwb3J0U3dlZXBJRDogdGFnRGF0YS5nZXRTd2VlcElEKCksXHJcbiAgICAgICAgICBtZXRhZGF0YTogSlNPTi5zdHJpbmdpZnkocG9pTWV0YWRhdGEpLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgdXBkYXRlZFBvaTogUE9JID0gYXdhaXQgdGhpcy5wb2lTZXJ2aWNlLnVwZGF0ZVBvaShwb2lJbnB1dCk7XHJcbiAgICAgICAgdGFnRGF0YS5zZXRQb2kodXBkYXRlZFBvaSk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5zZXRPYmplY3RBbmRQb2lJblRhZyhsYXN0VGFnLCBlbGVtZW50LCBQb2lUeXBlLkRFU0ssIHVwZGF0ZWRQb2kpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMubWF0dGVycG9ydFNlcnZpY2UuaW5qZWN0SHRtbEluVGFnKFxyXG4gICAgICAgICAgcG9pLnR5cGUhLFxyXG4gICAgICAgICAgZWxlbWVudCxcclxuICAgICAgICAgIGxhc3RUYWdcclxuICAgICAgICApO1xyXG4gICAgICAgIGF3YWl0IHRoaXMubWF0dGVycG9ydFNlcnZpY2Uuc2V0VGFnSWNvbkFuZE9wYWNpdHkobGFzdFRhZywgdGFnRGF0YSk7XHJcbiAgICAgICAgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5nb1RvVGFnKGxhc3RUYWcpO1xyXG5cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVwZGF0ZWRQb2kpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMubWF0dGVycG9ydFNlcnZpY2UuZGVsZXRlTGFzdE1hdHRlcnRhZygpO1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHBvaSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY2hlY2tNb2RlKCd0aHJlZWpzJykpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuY29tbWl0VGhyZWVKc1RhZ1BsYWNlbWVudChwb2ksIGlzVmFsaWQsIGVsZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocG9pKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdyaXRlcyB0aGUgc3BvdCBwaWNrZWQgaW4gdGhlIFRocmVlLmpzIHNjZW5lIGludG8gdGhlIFBPSSwgbWlycm9yaW5nIHRoZSBNYXR0ZXJwb3J0IGJyYW5jaC5cclxuICAgKlxyXG4gICAqIFRoZSBjb29yZGluYXRlIGdvZXMgaW4gdGhlIHNhbWUgZmllbGQgYW5kIHRoZSBzYW1lIHNwYWNlIE1hdHRlcnBvcnQgd3JpdGVzLCB3aGljaCBpcyB3aGF0IG1ha2VzXHJcbiAgICogYSB0YWcgY3JlYXRlZCBoZXJlIHNob3cgdXAgaW4gdGhlIHJpZ2h0IHBsYWNlIHRoZXJlIC0gYW5kIHRoZSBvdGhlciB3YXkgcm91bmQuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhc3luYyBjb21taXRUaHJlZUpzVGFnUGxhY2VtZW50KFxyXG4gICAgcG9pOiBQT0ksXHJcbiAgICBpc1ZhbGlkOiBib29sZWFuLFxyXG4gICAgZWxlbWVudDogRGJPYmplY3RUeXBlXHJcbiAgKTogUHJvbWlzZTxQT0k+IHtcclxuICAgIGNvbnN0IHBsYWNlbWVudCA9IHRoaXMudGhyZWVKc1NlcnZpY2UuZ2V0UGVuZGluZ1RhZ1BsYWNlbWVudCgpO1xyXG4gICAgaWYgKCFpc1ZhbGlkIHx8ICFwbGFjZW1lbnQgfHwgIXBvaSkge1xyXG4gICAgICB0aGlzLnRocmVlSnNTZXJ2aWNlLmNhbmNlbFRhZ1BsYWNlbWVudCgpO1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHBvaSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcG9pTWV0YWRhdGEgPSBwb2kubWV0YWRhdGEgPyBKU09OLnBhcnNlKHBvaS5tZXRhZGF0YSkgOiB7fTtcclxuICAgIHBvaU1ldGFkYXRhLm5vcm1hbCA9IHBsYWNlbWVudC5ub3JtYWw7XHJcblxyXG4gICAgY29uc3QgdXBkYXRlZFBvaSA9IGF3YWl0IHRoaXMucG9pU2VydmljZS51cGRhdGVQb2koe1xyXG4gICAgICBpZDogcG9pLmlkLFxyXG4gICAgICBjb29yZGluYXRlOiBKU09OLnN0cmluZ2lmeShwbGFjZW1lbnQucG9zaXRpb24pLFxyXG4gICAgICBtZXRhZGF0YTogSlNPTi5zdHJpbmdpZnkocG9pTWV0YWRhdGEpLFxyXG4gICAgICAvLyBtYXR0ZXJwb3J0U3dlZXBJRCBpcyBsZWZ0IGFzIGl0IHdhczogdGhpcyB2aWV3ZXIgaGFzIG5vIHN3ZWVwcywgYW5kIE1hdHRlcnBvcnQgZmlsdGVycyB0YWdcclxuICAgICAgLy8gdmlzaWJpbGl0eSBieSB0aGVtLCBzbyBjbGVhcmluZyBpdCB3b3VsZCBoaWRlIHRoZSB0YWcgb3ZlciB0aGVyZS5cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMudGhyZWVKc1NlcnZpY2UudXBzZXJ0VGFnKHtcclxuICAgICAgaWQ6IGVsZW1lbnQuaWQsXHJcbiAgICAgIHBvc2l0aW9uOiBwbGFjZW1lbnQucG9zaXRpb24sXHJcbiAgICAgIHBvaVR5cGU6IHVwZGF0ZWRQb2k/LnR5cGUgPz8gcG9pLnR5cGUsXHJcbiAgICAgIGljb25Vcmw6IHVwZGF0ZWRQb2k/LnRhZ0ljb24gPyBhd2FpdCBnZXRTaWduZWRGaWxlKHVwZGF0ZWRQb2kudGFnSWNvbikgOiBudWxsLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnRocmVlSnNTZXJ2aWNlLmNhbmNlbFRhZ1BsYWNlbWVudCgpO1xyXG5cclxuICAgIHJldHVybiB1cGRhdGVkUG9pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyB0aGUgUE9JIGZvciBhbiBlbGVtZW50IGp1c3QgcGxhY2VkIGluIHRoZSBUaHJlZS5qcyBzY2VuZS5cclxuICAgKlxyXG4gICAqIFRoZSBNYXR0ZXJwb3J0IHBhdGggcmVhY2hlcyB0aGUgc2FtZSByZXN1bHQgdGhyb3VnaCBpdHMgdGFnIGRpY3Rpb25hcnkgLSB0aGUgdGFnIGV4aXN0cyBmaXJzdFxyXG4gICAqIGFuZCBjYXJyaWVzIHRoZSBjb29yZGluYXRlcy4gVGhyZWUuanMgaGFzIG5vIHN1Y2ggb2JqZWN0LCBzbyB0aGUgcGxhY2VtZW50IGNhcHR1cmVkIGF0IGNsaWNrXHJcbiAgICogdGltZSBpcyB0aGUgb25seSByZWNvcmQgb2Ygd2hlcmUgdGhlIHVzZXIgcG9pbnRlZCwgYW5kIGl0IGhhcyB0byBiZWNvbWUgYSBQT0kgaGVyZSBvciBpdCBpc1xyXG4gICAqIGxvc3Qgd2hlbiB0aGUgZm9ybSBjbG9zZXMuXHJcbiAgICpcclxuICAgKiBSZXR1cm5zIG51bGwgd2hlbiB0aGVyZSBpcyBubyBwZW5kaW5nIHBsYWNlbWVudCwgd2hpY2ggaXMgdGhlIG5vcm1hbCBjYXNlIGluIE1hdHRlcnBvcnQgbW9kZS5cclxuICAgKi9cclxuICBhc3luYyBjcmVhdGVQb2lGb3JUaHJlZUpzUGxhY2VtZW50KGVsZW1lbnQ6IERiT2JqZWN0VHlwZSwgcG9pVHlwZTogUG9pVHlwZSk6IFByb21pc2U8UE9JIHwgbnVsbD4ge1xyXG4gICAgaWYgKCF0aGlzLmNoZWNrTW9kZSgndGhyZWVqcycpKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcGxhY2VtZW50ID0gdGhpcy50aHJlZUpzU2VydmljZS5nZXRQZW5kaW5nVGFnUGxhY2VtZW50KCk7XHJcbiAgICBpZiAoIXBsYWNlbWVudCB8fCAhZWxlbWVudD8uaWQpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gV2l0aG91dCBhIHN3ZWVwIHRoZSB0YWcgaXMgbGVmdCBvZmYgZXZlcnl0aGluZyBvbiB0aGUgTWF0dGVycG9ydCBzaWRlIHRoYXQgaXMgb3JnYW5pc2VkIGJ5XHJcbiAgICAvLyBzd2VlcCAtIHRoZSBmbG9vciBwbGFuIG1vc3QgdmlzaWJseSwgd2hpY2ggb25seSBkcmF3cyB0YWdzIHdob3NlIHN3ZWVwIGJlbG9uZ3MgdG8gaXQuXHJcbiAgICBjb25zdCBtYXR0ZXJwb3J0U3dlZXBJRCA9IGF3YWl0IHRoaXMuZmluZE5lYXJlc3RTd2VlcEZvclRocmVlSnMocGxhY2VtZW50LnBvc2l0aW9uKTtcclxuICAgIGNvbnN0IHBvaSA9IGF3YWl0IHRoaXMucG9pU2VydmljZS5jcmVhdGVQT0lGb3JTcGFjZUlEKHtcclxuICAgICAgY29vcmRpbmF0ZTogSlNPTi5zdHJpbmdpZnkocGxhY2VtZW50LnBvc2l0aW9uKSxcclxuICAgICAgdHlwZTogcG9pVHlwZSxcclxuICAgICAgZWxlbWVudElEOiBlbGVtZW50LmlkLFxyXG4gICAgICBtZXRhZGF0YTogdGhpcy5idWlsZFRocmVlSnNQb2lNZXRhZGF0YSh7IG5vcm1hbDogcGxhY2VtZW50Lm5vcm1hbCB9KSxcclxuICAgICAgLi4uKG1hdHRlcnBvcnRTd2VlcElEID8geyBtYXR0ZXJwb3J0U3dlZXBJRCB9IDoge30pLFxyXG4gICAgfSBhcyBQT0kpO1xyXG5cclxuICAgIC8vIERyYXcgaXQgc3RyYWlnaHQgYXdheSByYXRoZXIgdGhhbiB3YWl0aW5nIGZvciB0aGUgbmV4dCByZWZyZXNoLCBzbyB0aGUgdXNlciBzZWVzIHdoZXJlIHRoZVxyXG4gICAgLy8gdGhpbmcgdGhleSBqdXN0IGNyZWF0ZWQgZW5kZWQgdXAuIFRocm91Z2ggdGhlIHNhbWUgcGF0aCB0aGUgcmVmcmVzaCB1c2VzLCBzbyBpdCBhcnJpdmVzIHdpdGhcclxuICAgIC8vIHRoZSB0eXBlJ3MgaWNvbiBpbnN0ZWFkIG9mIHRoZSBiYXJlIG1hcmtlciAtIHRoZSBkaWZmZXJlbmNlIHdhcyB2aXNpYmxlIHVudGlsIHRoZSBuZXh0IHJlbG9hZC5cclxuICAgIGF3YWl0IHRoaXMuYWRkVGhyZWVKc1RhZ0Zyb21QT0koZWxlbWVudCwgcG9pKTtcclxuICAgIHRoaXMudGhyZWVKc1NlcnZpY2UuY2FuY2VsVGFnUGxhY2VtZW50KCk7XHJcbiAgICByZXR1cm4gcG9pO1xyXG4gIH1cclxuXHJcbiAgLyoqIEVtaXRzIHdoZW4gYSB0YWcgaXMgZHJvcHBlZCBvbiB0aGUgbW9kZWwgaW4gdGhlIFRocmVlLmpzIHNjZW5lLiAqL1xyXG4gIGdldCB0aHJlZUpzVGFnUGxhY2VkJCgpIHtcclxuICAgIHJldHVybiB0aGlzLnRocmVlSnNTZXJ2aWNlLnRhZ1BsYWNlZCQ7XHJcbiAgfVxyXG5cclxuICAvKiogRW1pdHMgd2hlbiB0aGUgY2FsaWJyYXRpb24gd2Fsa3Rocm91Z2ggaXMgYWJhbmRvbmVkLCBpbmNsdWRpbmcgdmlhIEVzY2FwZS4gKi9cclxuICBnZXQgdGhyZWVKc0FsaWdubWVudENhbmNlbGxlZCQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy50aHJlZUpzU2VydmljZS5hbGlnbm1lbnRDYW5jZWxsZWQkO1xyXG4gIH1cclxuXHJcbiAgLyoqIExlYXZlcyBUaHJlZS5qcyB0YWcgcGxhY2VtZW50IG1vZGUgd2l0aG91dCBwbGFjaW5nIGFueXRoaW5nLiAqL1xyXG4gIGNhbmNlbFRocmVlSnNUYWdQbGFjZW1lbnQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jaGVja01vZGUoJ3RocmVlanMnKSkge1xyXG4gICAgICB0aGlzLnRocmVlSnNTZXJ2aWNlLmNhbmNlbFRhZ1BsYWNlbWVudCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZWRpdE9ubHlUYWdTdHlsZUZvclBvaShwb2k6IFBPSSwgb2JqZWN0OiBEYk9iamVjdFR5cGUpIHtcclxuICAgIGlmICh0aGlzLmNoZWNrTW9kZSgnTWF0dGVycG9ydCcpKSB7XHJcbiAgICAgIGNvbnN0IHRhZ0RhdGEgPSB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmdldFRhZ0Zyb21FbGVtZW50SWQocG9pLmVsZW1lbnRJRCk7XHJcbiAgICAgIGlmICh0YWdEYXRhLnRhZykge1xyXG4gICAgICAgIGNvbnN0IG1hdHRlcnRhZ0RhdGEgPSB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmdldE1hdHRlclRhZ0RhdGFGb3JNYXR0ZXJ0YWcoXHJcbiAgICAgICAgICB0YWdEYXRhLnRhZ1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgbWF0dGVydGFnRGF0YS5zZXRPYmplY3Qob2JqZWN0LCBQb2lUeXBlLlJPT00pO1xyXG4gICAgICAgIHRoaXMubWF0dGVycG9ydFNlcnZpY2Uuc2V0VGFnSWNvbkFuZE9wYWNpdHkodGFnRGF0YS50YWcsIG1hdHRlcnRhZ0RhdGEpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRJY29uQW5kU2V0Rm9yUG9pKHBvaTogUE9JLCBpY29uUGF0aDogc3RyaW5nKSB7XHJcbiAgICBpZiAodGhpcy5jaGVja01vZGUoJ01hdHRlcnBvcnQnKSkge1xyXG4gICAgICBjb25zdCB0YWdEYXRhID0gdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5nZXRUYWdGcm9tRWxlbWVudElkKHBvaS5lbGVtZW50SUQpO1xyXG4gICAgICBpZiAodGFnRGF0YS50YWcpIHtcclxuICAgICAgICB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmFkZE5ld0ljb25BbmRTZXRGb3JUYWcodGFnRGF0YS50YWcsIGljb25QYXRoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2hhbmdlVG9SZWdpc3RyZWRJY29uRm9yUG9pKHBvaTogUE9JLCBpY29uTmFtZTogc3RyaW5nKSB7XHJcbiAgICBpZiAodGhpcy5jaGVja01vZGUoJ01hdHRlcnBvcnQnKSkge1xyXG4gICAgICBjb25zdCB0YWdEYXRhID0gdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5nZXRUYWdGcm9tRWxlbWVudElkKHBvaS5lbGVtZW50SUQpO1xyXG4gICAgICBpZiAodGFnRGF0YS50YWcpIHtcclxuICAgICAgICB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLnNldFJlZ2lzdHJlZEljb25Gb3JUYWcodGFnRGF0YS50YWcsIGljb25OYW1lKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgdXBkYXRlSHRtbFRhZ0ZvclBvaVdpdGhPYmplY3QocG9pOiBQT0ksIG9iamVjdDogRGJPYmplY3RUeXBlKSB7XHJcbiAgICBpZiAodGhpcy5jaGVja01vZGUoJ01hdHRlcnBvcnQnKSkge1xyXG4gICAgICBjb25zdCB0YWdEYXRhID0gdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5nZXRUYWdGcm9tRWxlbWVudElkKHBvaS5lbGVtZW50SUQpO1xyXG4gICAgICBpZiAodGFnRGF0YS50YWcpIHtcclxuICAgICAgICBhd2FpdCB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLnVwZGF0ZUluamVjdGVkSHRtbEZvclRhZ0lEKFxyXG4gICAgICAgICAgdGFnRGF0YS50YWcsXHJcbiAgICAgICAgICBvYmplY3QsXHJcbiAgICAgICAgICBwb2kudHlwZVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1vdmUgYW4gZXhpc3RpbmcgcG9pIGluIE1hdHRlcnBvcnRcclxuICAgKiBAcGFyYW0gcG9pXHJcbiAgICogQHBhcmFtIGVsZW1lbnRcclxuICAgKi9cclxuICBhc3luYyBhY3Rpb25fbW92ZV9wb2lfdmlzdWFsbHkoXHJcbiAgICBwb2k6IFBPSSxcclxuICAgIGVsZW1lbnQ6IFRpY2tldCB8IEZlYXR1cmUgfCBFcXVpcG1lbnQgfCBDb21tZW50XHJcbiAgKSB7XHJcbiAgICBhd2FpdCB0aGlzLmFjdGlvbl9kZWxldGVfZWxlbWVudChlbGVtZW50KTtcclxuICAgIGF3YWl0IHRoaXMuYWN0aW9uQWRkT2JqZWN0RnJvbVBPSShlbGVtZW50LCBwb2kpO1xyXG4gIH1cclxuXHJcbiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgQ3VwaXhcclxuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuXHJcbiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgTWF0dGVycG9ydFxyXG4gICAgaHR0cHM6Ly9tYXR0ZXJwb3J0LmdpdGh1Yi5pby9zaG93Y2FzZS1zZGsvZG9jcy9zZGsvcmVmZXJlbmNlL2N1cnJlbnQvbW9kdWxlcy9tYXR0ZXJ0YWcuaHRtbCNhZGRcclxuICAgIGh0dHBzOi8vbWF0dGVycG9ydC5naXRodWIuaW8vc2hvd2Nhc2Utc2RrL2RvY3Mvc2RrL3JlZmVyZW5jZS9jdXJyZW50L21vZHVsZXMvbWF0dGVydGFnLmh0bWwjcmVtb3ZlXHJcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuXHJcbiAgaW5pdFRocmVlSnMoY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmNoZWNrTW9kZSgndGhyZWVqcycpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMudGhyZWVKc1NlcnZpY2UuaW5pdChjYW52YXMpO1xyXG4gICAgLy8gVGhlIHRhZyBwaXBlbGluZSBpcyBnYXRlZCBvbiB0aGlzIGZsYWcsIHdoaWNoIHVudGlsIG5vdyBvbmx5IHRoZSBNYXR0ZXJwb3J0IFNESyBzZXQuIEFcclxuICAgIC8vIFRocmVlLmpzIHZpc2l0IG5ldmVyIHJlYWNoZXMgdGhhdCBjb2RlLCBzbyBldmVyeSB0YWcgd2FzIGRyb3BwZWQgYmVmb3JlIGl0IGNvdWxkIGJlIGRyYXduLlxyXG4gICAgdGhpcy5zaG93aW5nVmlld2VyID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBFdmVyeXRoaW5nIHRoYXQgbG9hZHMgZGF0YSBmb3IgYSBzcGFjZSAtIHRpY2tldHMsIGVxdWlwbWVudHMsIGZlYXR1cmVzLCBtZWFzdXJlbWVudHMgLSBoYW5nc1xyXG4gICAgLy8gb2ZmIHRoaXMgZXZlbnQsIHdoaWNoIE1hdHRlcnBvcnQgcmFpc2VzIG9uY2UgaXRzIFNESyBzdGFydHMgcGxheWluZy4gQSBUaHJlZS5qcyB2aXNpdCBuZXZlclxyXG4gICAgLy8gdG91Y2hlcyB0aGUgU0RLLCBzbyBub3RoaW5nIGV2ZXIgYW5ub3VuY2VkIHRoZSBzcGFjZSBhbmQgZXZlcnkgbGlzdCBjYW1lIGJhY2sgZW1wdHkuXHJcbiAgICBpZiAodGhpcy5jdXJyZW50U3BhY2VJRCkge1xyXG4gICAgICB0aGlzLnZpZXdlcklzT24ubmV4dCh7XHJcbiAgICAgICAgc3BhY2VJRDogdGhpcy5jdXJyZW50U3BhY2VJRCxcclxuICAgICAgICBtb2RlbDNEOiBudWxsLFxyXG4gICAgICAgIHN3ZWVwOiBudWxsLFxyXG4gICAgICAgIHJvdGF0aW9uOiBudWxsLFxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5kYXRhSXNMb2FkZWQubmV4dCh0cnVlKTtcclxuICAgICAgdGhpcy5pc0xvYWRlZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMb2FkcyBhIDNEIG1vZGVsIGludG8gdGhlIFRocmVlLmpzIHNjZW5lIChHTFRGKS5cclxuICAgKiBPbmx5IHdvcmtzIHdoZW4gdGhlIHZpZXdlciBpcyBpbiAndGhyZWVqcycgbW9kZS5cclxuICAgKi9cclxuICBsb2FkR0xURk1vZGVsKHVybDogc3RyaW5nLCBjYW1lcmFQb3NpdGlvbj86IHt4OiBudW1iZXIsIHk6IG51bWJlciwgejogbnVtYmVyfSwgcm90YXRpb24/OiB7eDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlcn0pOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmNoZWNrTW9kZSgndGhyZWVqcycpKSB7XHJcbiAgICAgIHRoaXMudGhyZWVKc1NlcnZpY2UubG9hZEdMVEZNb2RlbCh1cmwsIGNhbWVyYVBvc2l0aW9uLCByb3RhdGlvbik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMb2FkcyBhIEdMQiBzdG9yZWQgaW4gUzMsIGdpdmVuIGl0cyBrZXkgKGUuZy4gYHZpc2l0cy88aWQ+L21vZGVsLmdsYmApLlxyXG4gICAqXHJcbiAgICogUmVzb2x2ZXMgdGhlIGtleSB0byBhIHNpZ25lZCBVUkwgZmlyc3QsIHRoZW4gbG9hZHMgaXQgbGlrZSBhbnkgb3RoZXIuIFRoZSBzaWduZWQgVVJMIG9ubHlcclxuICAgKiBjb3ZlcnMgYXV0aGVudGljYXRpb24gLSB0aGUgYnVja2V0IHN0aWxsIG5lZWRzIGEgQ09SUyBydWxlIGFsbG93aW5nIEdFVCBmcm9tIHRoZSBhcHAncyBvcmlnaW4sXHJcbiAgICogb3IgdGhlIGJyb3dzZXIgYmxvY2tzIHRoZSBkb3dubG9hZCBiZWZvcmUgaXQgc3RhcnRzLlxyXG4gICAqXHJcbiAgICogYHBsYWNlbWVudE1ldGFkYXRhYCBpcyB0aGUgY2FwdHVyZSdzIHN0b3JlZCBwbGFjZW1lbnQ7IHdoZW4gYWJzZW50IG9yIHVudXNhYmxlIHRoZSB2aWV3ZXIgZmFsbHNcclxuICAgKiBiYWNrIHRvIGZyYW1pbmcgdGhlIG1vZGVsIGF1dG9tYXRpY2FsbHkuXHJcbiAgICovXHJcbiAgYXN5bmMgbG9hZEdMVEZNb2RlbEZyb21TMyhrZXk6IHN0cmluZywgcGxhY2VtZW50TWV0YWRhdGE/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICghdGhpcy5jaGVja01vZGUoJ3RocmVlanMnKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvLyBBIGtleSB1bmRlciBhc3NldHMvIGlzIHNlcnZlZCBieSB0aGUgYXBwIGl0c2VsZiwgc28gaXQgbmVlZHMgbm8gc2lnbmluZy4gVGhpcyBpcyB3aGF0IGxldHMgYVxyXG4gICAgLy8gbW9kZWwgYnVuZGxlZCB3aXRoIHRoZSBidWlsZCBzdGFuZCBpbiBmb3Igb25lIGluIFMzIHdoaWxlIHRoZSB0d28gYXJlIG90aGVyd2lzZSBpZGVudGljYWwuXHJcbiAgICBjb25zdCBpc0xvY2FsQXNzZXQgPSBrZXkuc3RhcnRzV2l0aCgnYXNzZXRzLycpO1xyXG4gICAgY29uc3QgdXJsID0gaXNMb2NhbEFzc2V0ID8ga2V5IDogYXdhaXQgZ2V0U2lnbmVkRmlsZShrZXkpO1xyXG4gICAgaWYgKCF1cmwpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihgVmlld2VyU2VydmljZTogY291bGQgbm90IHJlc29sdmUgYSBzaWduZWQgVVJMIGZvciB0aGUgM0QgbW9kZWwgYXQgXCIke2tleX1cIi5gKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcGxhY2VtZW50ID0gcGFyc2VUaHJlZUpzUGxhY2VtZW50KHBsYWNlbWVudE1ldGFkYXRhKTtcclxuICAgIC8vIFRoZSBrZXksIG5vdCB0aGUgc2lnbmVkIFVSTCwgaXMgd2hhdCBpZGVudGlmaWVzIHRoZSBtb2RlbCBhY3Jvc3MgbG9hZHMgLSB0aGUgc2lnbmF0dXJlIG1ha2VzXHJcbiAgICAvLyBldmVyeSBVUkwgdW5pcXVlLCB3aGljaCBpcyBleGFjdGx5IHdoeSB0aGUgYnJvd3NlcidzIG93biBjYWNoZSBuZXZlciBoZWxwcyBoZXJlLlxyXG4gICAgdGhpcy50aHJlZUpzU2VydmljZS5sb2FkR0xURk1vZGVsKHVybCwgcGxhY2VtZW50Py5jYW1lcmFQb3NpdGlvbiwgcGxhY2VtZW50Py5yb3RhdGlvbiwga2V5LCBwbGFjZW1lbnQ/LnVwKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExvYWRzIGEgM0QgbW9kZWwgaW50byB0aGUgVGhyZWUuanMgc2NlbmUgKE9CSikuXHJcbiAgICovXHJcbiAgbG9hZE9iak1vZGVsKG10bFVybDogc3RyaW5nLCBvYmpVcmw6IHN0cmluZywgY2FtZXJhUG9zaXRpb24/OiB7eDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlcn0sIHJvdGF0aW9uPzoge3g6IG51bWJlciwgeTogbnVtYmVyLCB6OiBudW1iZXJ9KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jaGVja01vZGUoJ3RocmVlanMnKSkge1xyXG4gICAgICB0aGlzLnRocmVlSnNTZXJ2aWNlLmxvYWRPYmpNb2RlbChtdGxVcmwsIG9ialVybCwgY2FtZXJhUG9zaXRpb24sIHJvdGF0aW9uKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCB0aHJlZUpzT2JqZWN0SG92ZXJlZCQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy50aHJlZUpzU2VydmljZS5vYmplY3RIb3ZlcmVkJDtcclxuICB9XHJcblxyXG4gIGdldCB0aHJlZUpzT2JqZWN0Q2xpY2tlZCQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy50aHJlZUpzU2VydmljZS5vYmplY3RDbGlja2VkJDtcclxuICB9XHJcblxyXG4gIC8qKiBFbWl0cyB0cnVlIHdoaWxlIGEgaGVhdnkgLm9iaiBmaWxlIGlzIGJlaW5nIHBhcnNlZCAoaW4gYSB3b3JrZXIsIHdoZW4gYXZhaWxhYmxlKSwgZmFsc2Ugb25jZSBkb25lLiAqL1xyXG4gIGdldCB0aHJlZUpzTW9kZWxMb2FkaW5nJCgpIHtcclxuICAgIHJldHVybiB0aGlzLnRocmVlSnNTZXJ2aWNlLm1vZGVsTG9hZGluZyQ7XHJcbiAgfVxyXG5cclxuICAvKiogRG93bmxvYWQgcHJvZ3Jlc3MgZm9yIEdMQiBtb2RlbHMgYXMgYSAwLTEgZnJhY3Rpb24sIG9yIG51bGwgd2hlbiB0aGUgc2l6ZSBpc24ndCBrbm93biB1cGZyb250LiAqL1xyXG4gIGdldCB0aHJlZUpzTW9kZWxMb2FkUHJvZ3Jlc3MkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMudGhyZWVKc1NlcnZpY2UubW9kZWxMb2FkUHJvZ3Jlc3MkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVnaXN0ZXJzIHRoZSBXZWIgV29ya2VyIHVzZWQgdG8gcGFyc2UgaGVhdnkgLm9iaiBmaWxlcyBvZmYgdGhlIG1haW4gdGhyZWFkLlxyXG4gICAqIE11c3QgYmUgY3JlYXRlZCBieSB0aGUgYXBwIChzZWUgb2JqLXBhcnNlci53b3JrZXIudHMpLCBzaW5jZSB0aGlzIGxpYnJhcnkgY2FuJ3QgYnVuZGxlIHdvcmtlciBmaWxlcy5cclxuICAgKi9cclxuICBzZXRPYmpQYXJzZXJXb3JrZXIod29ya2VyOiBXb3JrZXIpOiB2b2lkIHtcclxuICAgIHRoaXMudGhyZWVKc1NlcnZpY2Uuc2V0T2JqUGFyc2VyV29ya2VyKHdvcmtlcik7XHJcbiAgfVxyXG5cclxuICBhZGRUaHJlZUpzT2JqZWN0cyhvYmpzOiBhbnlbXSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY2hlY2tNb2RlKCd0aHJlZWpzJykpIHtcclxuICAgICAgdGhpcy50aHJlZUpzU2VydmljZS51cGRhdGVPYmpzVG9TY2VuZShvYmpzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGluaXRNYXR0ZXJwb3J0U2RrKFxyXG4gICAgc3BhY2VJRDogc3RyaW5nLFxyXG4gICAgbW9kZWwzRDogc3RyaW5nLFxyXG4gICAgdGFnU2VydmljZTogQmFzZVRhZ1NlcnZpY2UsXHJcbiAgICBtb2R1bGU6IFNwTW9kdWxlID0gU3BNb2R1bGUuSU1NT1xyXG4gICk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5pc0xvYWRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5jdXJyZW50U3BhY2VJRCA9IHNwYWNlSUQ7XHJcbiAgICBpZiAodGhpcy5tYXR0ZXJwb3J0U2VydmljZS5zZGspIHtcclxuICAgICAgYXdhaXQgdGhpcy5jbGVhckFsbCgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMubWF0dGVycG9ydFNlcnZpY2VcclxuICAgICAgLmluaXRTZGsodGFnU2VydmljZSwgbW9kdWxlKVxyXG4gICAgICAudGhlbihhc3luYyAocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgY29uc3QgeyBzZGsgfSA9IHRoaXMubWF0dGVycG9ydFNlcnZpY2U7XHJcblxyXG4gICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xyXG4gICAgICAgICAgICBzZGsuU2NlbmUucmVnaXN0ZXIoc2VjdXJpdHlDYW1lcmFUeXBlLCBtYWtlU2VjdXJpdHlDYW1lcmEuYmluZChzZGsuU2NlbmUpKSxcclxuICAgICAgICAgICAgc2RrLlNjZW5lLnJlZ2lzdGVyKFZpZXdGcnVzdHVtTWVzaFR5cGUsIG1ha2VWaWV3RnJ1c3R1bU1lc2guYmluZChzZGsuU2NlbmUpKVxyXG4gICAgICAgICAgXSk7XHJcblxyXG4gICAgICAgICAgdGhpcy5zaG93aW5nVmlld2VyID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICBzZGsuQXBwLnN0YXRlLnN1YnNjcmliZShcclxuICAgICAgICAgICAgZnVuY3Rpb24gKGFwcFN0YXRlKSB7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5kZWJ1ZygnVGhlIGN1cnJlbnQgcGhhc2U6ICcsIGFwcFN0YXRlLnBoYXNlKTtcclxuICAgICAgICAgICAgICBpZiAoYXBwU3RhdGUucGhhc2UgPT09IHNkay5BcHAuUGhhc2UuUExBWUlORykge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1RoZSBhcHAgaXMgcGxheWluZycpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93aW5nVmlld2VyID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMudmlld2VySXNPbi5uZXh0KHtcclxuICAgICAgICAgICAgICAgICAgc3BhY2VJRCxcclxuICAgICAgICAgICAgICAgICAgbW9kZWwzRCxcclxuICAgICAgICAgICAgICAgICAgc3dlZXA6IHRoaXMuc3dlZXBUb01vdmUsXHJcbiAgICAgICAgICAgICAgICAgIHJvdGF0aW9uOiB0aGlzLnJvdGF0aW9uVG9Nb3ZlLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFJc0xvYWRlZC5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN3ZWVwVG9Nb3ZlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIHRoaXMucm90YXRpb25Ub01vdmUgPSBudWxsO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIHRoaXMudmlld2VySXNPbi5uZXh0KHtcclxuICAgICAgICAgICAgc3BhY2VJRCxcclxuICAgICAgICAgICAgbW9kZWwzRCxcclxuICAgICAgICAgICAgc3dlZXA6IHRoaXMuc3dlZXBUb01vdmUsXHJcbiAgICAgICAgICAgIHJvdGF0aW9uOiB0aGlzLnJvdGF0aW9uVG9Nb3ZlLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLmRhdGFJc0xvYWRlZC5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgdGhpcy5pc0xvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnN3ZWVwVG9Nb3ZlID0gbnVsbDtcclxuICAgICAgICAgIHRoaXMucm90YXRpb25Ub01vdmUgPSBudWxsO1xyXG5cclxuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlRm9yYmlkZGVuU3dlZXBzKGZvcmJpZGRlblN3ZWVwczogc3RyaW5nW10pIHtcclxuICAgIGlmICh0aGlzLmNoZWNrTW9kZSgnTWF0dGVycG9ydCcpKSB7XHJcbiAgICAgIHRoaXMubWF0dGVycG9ydFNlcnZpY2UucmVtb3ZlRm9yYmlkZGVuU3dlZXBzKGZvcmJpZGRlblN3ZWVwcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRPYmplY3QzRExvYWRlZEluUG9zaXRpb24ob2JqZWN0TG9hZGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzT2JqZWN0TG9hZGVkID0gb2JqZWN0TG9hZGVkO1xyXG4gIH1cclxuXHJcbiAgaXNPYmplY3QzRExvYWRlZEluUG9zaXRpb24oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5pc09iamVjdExvYWRlZDtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -73,4 +73,4 @@ export const showScanPointsOnPlanInDiv = async (plan, divPlan, navigations) => {
|
|
|
73
73
|
}));
|
|
74
74
|
return buttons;
|
|
75
75
|
};
|
|
76
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem9uZS1kcmF3ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zbWFydGVycGxhbi1jb3JlL3NyYy9saWIvc2VydmljZXMvem9uZS1kcmF3ZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRzNELE1BQU0sVUFBVSx1QkFBdUIsQ0FDbkMsR0FBcUIsRUFDckIsU0FBYztJQUVkLElBQUksTUFBTSxDQUFDO0lBQ1gsSUFBSSxNQUFNLENBQUM7SUFDWCxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7SUFDeEMsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO0lBQ3JELCtDQUErQztJQUMvQywrREFBK0Q7SUFDL0Qsb0NBQW9DO0lBQ3BDLElBQUksUUFBUSxHQUFHLFNBQVMsRUFBRSxDQUFDO1FBQ3ZCLHNDQUFzQztRQUN0QyxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDO1FBQ3JDLE1BQU0sb0JBQW9CLEdBQUcsU0FBUyxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUM7UUFDeEQsTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLEdBQUcsb0JBQW9CLENBQUM7SUFDL0MsQ0FBQztTQUFNLENBQUM7UUFDSixNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO1FBQ3ZDLE1BQU0sbUJBQW1CLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUM7UUFDeEQsTUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUFLLEdBQUcsbUJBQW1CLENBQUM7SUFDN0MsQ0FBQztJQUNELCtCQUErQjtJQUMvQixPQUFPLEVB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RyxVQUFVLENBQUMsR0FBRyxTQUFTLENBQUMsU0FBUztvQkFDckQsRUFDSixJQUFJLENBQUM7Z0JBQ0wsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsR0FDakIsQ0FBQyxjQUFjLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxRQUFRLEdBQUcsRUFDMUQsSUFBSSxDQUFDO1lBQ1QsQ0FBQztRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ0osTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDakQsTUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDdkQsTUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDdkQsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsTUFBTSxHQUFHLEVBQUUsSUFBSSxDQUFDO1lBQzNDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU0sR0FBRyxFQUFFLElBQUksQ0FBQztRQUNoRCxDQUFDO1FBQ0QsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN4QixPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzFCLENBQUMsQ0FBQyxDQUNMLENBQUM7SUFDRixPQUFPLE9BQU8sQ0FBQztBQUNuQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRNZXRhRm9ySW1hZ2UsIHdhaXQgfSBmcm9tIFwiLi4vaGVscGVycy5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uLCBQbGFuIH0gZnJvbSBcIi4uL3R5cGVzLnNlcnZpY2VcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvZWZmaWNpZW50c0ZvckltYWdlKFxuICAgIGltZzogSFRNTEltYWdlRWxlbWVudCxcbiAgICByZWN0YW5nbGU6IGFueSxcbik6IHsgY29lZmZYOiBudW1iZXI7IGNvZWZmWTogbnVtYmVyIH0ge1xuICAgIGxldCBjb2VmZlk7XG4gICAgbGV0IGNvZWZmWDtcbiAgICBjb25zdCBpbWdSYXRpbyA9IGltZy53aWR0aCAvIGltZy5oZWlnaHQ7XG4gICAgY29uc3QgcmVjdFJhdGlvID0gcmVjdGFuZ2xlLndpZHRoIC8gcmVjdGFuZ2xlLmhlaWdodDtcbiAgICAvLyBjb25zb2xlLmxvZyhcImltYWdlXCIsIGltZy53aWR0aCwgaW1nLmhlaWdodCk7XG4gICAgLy8gY29uc29sZS5sb2coXCJyZWN0YW5nbGVcIiwgcmVjdGFuZ2xlLndpZHRoLCByZWN0YW5nbGUuaGVpZ2h0KTtcbiAgICAvLyBjb25zb2xlLmxvZyhpbWdSYXRpbywgcmVjdFJhdGlvKTtcbiAgICBpZiAoaW1nUmF0aW8gPiByZWN0UmF0aW8pIHtcbiAgICAgICAgLy8gaW1nIGlzIGZpdHRlZCBpbiByZWN0YW5nbGUgYnkgd2lkdGhcbiAgICAgICAgY29lZmZYID0gaW1nLndpZHRoIC8gcmVjdGFuZ2xlLndpZHRoO1xuICAgICAgICBjb25zdCBlZmZlY3RpdmVJbWFnZUhlaWdodCA9IHJlY3RhbmdsZS53aWR0aCAvIGltZ1JhdGlvO1xuICAgICAgICBjb2VmZlkgPSBpbWcuaGVpZ2h0IC8gZWZmZWN0aXZlSW1hZ2VIZWlnaHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29lZmZZID0gaW1nLmhlaWdodCAvIHJlY3RhbmdsZS5oZWlnaHQ7XG4gICAgICAgIGNvbnN0IGVmZmVjdGl2ZUltYWdlV2lkdGggPSByZWN0YW5nbGUuaGVpZ2h0ICogaW1nUmF0aW87XG4gICAgICAgIGNvZWZmWCA9IGltZy53aWR0aCAvIGVmZmVjdGl2ZUltYWdlV2lkdGg7XG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKGNvZWZmWCwgY29lZmZZKTtcbiAgICByZXR1cm4geyBjb2VmZlgsIGNvZWZmWSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3R5bGVCdXR0b24oYnV0dG9uOiBIVE1MQnV0dG9uRWxlbWVudCkge1xuICAgIGJ1dHRvbi5zdHlsZS5iYWNrZ3JvdW5kSW1hZ2UgPSBgdXJsKFwiaHR0cHM6Ly9hcGkuaWNvbmlmeS5kZXNpZ24vbWRpOmFkanVzdC5zdmc/Y29sb3I9Z3JlZW4maGVpZ2h0PTE3JndpZHRoPTE3XCIpYDtcbiAgICBidXR0b24uc3R5bGUuYmFja2dyb3VuZENvbG9yID0gXCJ0cmFuc3BhcmVudFwiO1xuICAgIGJ1dHRvbi5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcbiAgICBidXR0b24uc3R5bGUuYm9yZGVyID0gXCJub25lXCI7XG4gICAgYnV0dG9uLnN0eWxlLndpZHRoID0gXCIxN3B4XCI7XG4gICAgYnV0dG9uLnN0eWxlLmhlaWdodCA9IFwiMTdweFwiO1xuICAgIGJ1dHRvbi5kaXNhYmxlZCA9IHRydWU7XG59XG5cbmV4cG9ydCBjb25zdCBzaG93U2NhblBvaW50c09uUGxhbkluRGl2ID0gYXN5bmMgKFxuICAgIHBsYW46IFBsYW4sXG4gICAgZGl2UGxhbjogSFRNTEVsZW1lbnQsXG4gICAgbmF2aWdhdGlvbnM6IE5hdmlnYXRpb25bXSxcbik6IFByb21pc2U8SFRNTEJ1dHRvbkVsZW1lbnRbXT4gPT4ge1xuICAgIGlmICghZGl2UGxhbiB8fCAhcGxhbi5maWxlcGF0aCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGNvbnN0IGNhbGlicmFnZSA9IEpTT04ucGFyc2UocGxhbi5jYWxpYnJhdGlvbik7XG5cbiAgICBjb25zdCBpbWcgPSBhd2FpdCBnZXRNZXRhRm9ySW1hZ2UocGxhbi5maWxlcGF0aCk7XG4gICAgZGl2UGxhbi5zdHlsZS5iYWNrZ3JvdW5kSW1hZ2UgPSBgdXJsKCR7cGxhbi5maWxlcGF0aH0pYDtcbiAgICBkaXZQbGFuLnN0eWxlLmJhY2tncm91bmRTaXplID0gXCJjb250YWluXCI7XG4gICAgZGl2UGxhbi5zdHlsZS5iYWNrZ3JvdW5kUmVwZWF0ID0gXCJuby1yZXBlYXRcIjtcbiAgICBhd2FpdCB3YWl0KDE1MDApOyAvLyB3aGlsZSBpbWFnZSBpcyBsb2FkZWQgdG8gZGl2XG4gICAgZGl2UGxhbi5pbm5lckhUTUwgPSBcIlwiOyAvLyByZW1vdmUgYWxsIHByZXZpb3VzIGJ1dHRvbnMgaWYgZXhpc3RcbiAgICBjb25zdCByZWN0ID0gZGl2UGxhbi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCB7IGNvZWZmWCwgY29lZmZZIH0gPSBnZXRDb2VmZmljaWVudHNGb3JJbWFnZShpbWcsIHJlY3QpO1xuICAgIGNvbnN0IGJ1dHRvbnMgPSBbXTtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgbmF2aWdhdGlvbnMubWFwKGFzeW5jIChuYXZpZ2F0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiKTtcbiAgICAgICAgICAgIHN0eWxlQnV0dG9uKGVsZW1lbnQpO1xuICAgICAgICAgICAgZWxlbWVudC5pZCA9IG5hdmlnYXRpb24ubWF0dGVycG9ydFN3ZWVwSUQ7XG4gICAgICAgICAgICBpZiAoY2FsaWJyYWdlLm5ldykge1xuICAgICAgICAgICAgICAgIC8vIG5ldyBwcm9jZWR1cmUgb2YgY2FsaWJyYWdlXG4gICAgICAgICAgICAgICAgLy8gZmluZCBwb3NpdGlvbiBmb3IgYSBnaXZlbiBwbGFuXG4gICAgICAgICAgICAgICAgY29uc3QgcG9zaXRpb25zT25QbGFuID0gbmF2aWdhdGlvbi5wb3NpdGlvbk9uUGxhbi5tYXAoKGVudHJ5KSA9PlxuICAgICAgICAgICAgICAgICAgICBKU09OLnBhcnNlKGVudHJ5KSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uT25QbGFuID0gcG9zaXRpb25zT25QbGFuLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgIChkYXRhKSA9PiBkYXRhLnBsYW5JRCA9PT0gcGxhbi5pZCxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmIChwb3NpdGlvbk9uUGxhbikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWFsV2lkdGggPSBpbWcud2lkdGggLyBjb2VmZlg7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlYWxIZWlnaHQgPSBpbWcuaGVpZ2h0IC8gY29lZmZZO1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnN0eWxlLnRvcCA9IGAke1xuICAgICAgICAgICAgICAgICAgICAgICAgKHBvc2l0aW9uT25QbGFuLnkgKiByZWFsSGVpZ2h0KSAvIGNhbGlicmFnZS5pbWdIZWlnaHQgLVxuICAgICAgICAgICAgICAgICAgICAgICAgMTBcbiAgICAgICAgICAgICAgICAgICAgfXB4YDtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0gYCR7XG4gICAgICAgICAgICAgICAgICAgICAgICAocG9zaXRpb25PblBsYW4ueCAqIHJlYWxXaWR0aCkgLyBjYWxpYnJhZ2UuaW1nV2lkdGggLSAxMFxuICAgICAgICAgICAgICAgICAgICB9cHhgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcG9zaXRpb24gPSBKU09OLnBhcnNlKG5hdmlnYXRpb24ucG9zaXRpb24pO1xuICAgICAgICAgICAgICAgIGNvbnN0IHggPSBjYWxpYnJhZ2Uub2Zmc2V0WCArIHBvc2l0aW9uLnggKiBjYWxpYnJhZ2UueDtcbiAgICAgICAgICAgICAgICBjb25zdCB5ID0gY2FsaWJyYWdlLm9mZnNldFkgKyBwb3NpdGlvbi56ICogY2FsaWJyYWdlLnk7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5zdHlsZS50b3AgPSBgJHt5IC8gY29lZmZZIC0gMTB9cHhgO1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IGAke3ggLyBjb2VmZlggLSAxMH1weGA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkaXZQbGFuLmFwcGVuZChlbGVtZW50KTtcbiAgICAgICAgICAgIGJ1dHRvbnMucHVzaChlbGVtZW50KTtcbiAgICAgICAgfSksXG4gICAgKTtcbiAgICByZXR1cm4gYnV0dG9ucztcbn07XG4iXX0=
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem9uZS1kcmF3ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zbWFydGVycGxhbi1jb3JlL3NyYy9saWIvc2VydmljZXMvem9uZS1kcmF3ZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRzNELE1BQU0sVUFBVSx1QkFBdUIsQ0FDbkMsR0FBcUIsRUFDckIsU0FBYztJQUVkLElBQUksTUFBTSxDQUFDO0lBQ1gsSUFBSSxNQUFNLENBQUM7SUFDWCxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7SUFDeEMsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO0lBQ3JELCtDQUErQztJQUMvQywrREFBK0Q7SUFDL0Qsb0NBQW9DO0lBQ3BDLElBQUksUUFBUSxHQUFHLFNBQVMsRUFBRSxDQUFDO1FBQ3ZCLHNDQUFzQztRQUN0QyxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDO1FBQ3JDLE1BQU0sb0JBQW9CLEdBQUcsU0FBUyxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUM7UUFDeEQsTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLEdBQUcsb0JBQW9CLENBQUM7SUFDL0MsQ0FBQztTQUFNLENBQUM7UUFDSixNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO1FBQ3ZDLE1BQU0sbUJBQW1CLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUM7UUFDeEQsTUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUFLLEdBQUcsbUJBQW1CLENBQUM7SUFDN0MsQ0FBQztJQUNELCtCQUErQjtJQUMvQixPQUFPLEVB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RyxVQUFVLENBQUMsR0FBRyxTQUFTLENBQUMsU0FBUztvQkFDckQsRUFDSixJQUFJLENBQUM7Z0JBQ0wsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsR0FDakIsQ0FBQyxjQUFjLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxRQUFRLEdBQUcsRUFDMUQsSUFBSSxDQUFDO1lBQ1QsQ0FBQztRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ0osTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDakQsTUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDdkQsTUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDdkQsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsTUFBTSxHQUFHLEVBQUUsSUFBSSxDQUFDO1lBQzNDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU0sR0FBRyxFQUFFLElBQUksQ0FBQztRQUNoRCxDQUFDO1FBQ0QsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN4QixPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzFCLENBQUMsQ0FBQyxDQUNMLENBQUM7SUFDRixPQUFPLE9BQU8sQ0FBQztBQUNuQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRNZXRhRm9ySW1hZ2UsIHdhaXQgfSBmcm9tIFwiLi4vaGVscGVycy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IE5hdmlnYXRpb24sIFBsYW4gfSBmcm9tIFwiLi4vdHlwZXMuc2VydmljZVwiO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldENvZWZmaWNpZW50c0ZvckltYWdlKFxyXG4gICAgaW1nOiBIVE1MSW1hZ2VFbGVtZW50LFxyXG4gICAgcmVjdGFuZ2xlOiBhbnksXHJcbik6IHsgY29lZmZYOiBudW1iZXI7IGNvZWZmWTogbnVtYmVyIH0ge1xyXG4gICAgbGV0IGNvZWZmWTtcclxuICAgIGxldCBjb2VmZlg7XHJcbiAgICBjb25zdCBpbWdSYXRpbyA9IGltZy53aWR0aCAvIGltZy5oZWlnaHQ7XHJcbiAgICBjb25zdCByZWN0UmF0aW8gPSByZWN0YW5nbGUud2lkdGggLyByZWN0YW5nbGUuaGVpZ2h0O1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJpbWFnZVwiLCBpbWcud2lkdGgsIGltZy5oZWlnaHQpO1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJyZWN0YW5nbGVcIiwgcmVjdGFuZ2xlLndpZHRoLCByZWN0YW5nbGUuaGVpZ2h0KTtcclxuICAgIC8vIGNvbnNvbGUubG9nKGltZ1JhdGlvLCByZWN0UmF0aW8pO1xyXG4gICAgaWYgKGltZ1JhdGlvID4gcmVjdFJhdGlvKSB7XHJcbiAgICAgICAgLy8gaW1nIGlzIGZpdHRlZCBpbiByZWN0YW5nbGUgYnkgd2lkdGhcclxuICAgICAgICBjb2VmZlggPSBpbWcud2lkdGggLyByZWN0YW5nbGUud2lkdGg7XHJcbiAgICAgICAgY29uc3QgZWZmZWN0aXZlSW1hZ2VIZWlnaHQgPSByZWN0YW5nbGUud2lkdGggLyBpbWdSYXRpbztcclxuICAgICAgICBjb2VmZlkgPSBpbWcuaGVpZ2h0IC8gZWZmZWN0aXZlSW1hZ2VIZWlnaHQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvZWZmWSA9IGltZy5oZWlnaHQgLyByZWN0YW5nbGUuaGVpZ2h0O1xyXG4gICAgICAgIGNvbnN0IGVmZmVjdGl2ZUltYWdlV2lkdGggPSByZWN0YW5nbGUuaGVpZ2h0ICogaW1nUmF0aW87XHJcbiAgICAgICAgY29lZmZYID0gaW1nLndpZHRoIC8gZWZmZWN0aXZlSW1hZ2VXaWR0aDtcclxuICAgIH1cclxuICAgIC8vIGNvbnNvbGUubG9nKGNvZWZmWCwgY29lZmZZKTtcclxuICAgIHJldHVybiB7IGNvZWZmWCwgY29lZmZZIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzdHlsZUJ1dHRvbihidXR0b246IEhUTUxCdXR0b25FbGVtZW50KSB7XHJcbiAgICBidXR0b24uc3R5bGUuYmFja2dyb3VuZEltYWdlID0gYHVybChcImh0dHBzOi8vYXBpLmljb25pZnkuZGVzaWduL21kaTphZGp1c3Quc3ZnP2NvbG9yPWdyZWVuJmhlaWdodD0xNyZ3aWR0aD0xN1wiKWA7XHJcbiAgICBidXR0b24uc3R5bGUuYmFja2dyb3VuZENvbG9yID0gXCJ0cmFuc3BhcmVudFwiO1xyXG4gICAgYnV0dG9uLnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xyXG4gICAgYnV0dG9uLnN0eWxlLmJvcmRlciA9IFwibm9uZVwiO1xyXG4gICAgYnV0dG9uLnN0eWxlLndpZHRoID0gXCIxN3B4XCI7XHJcbiAgICBidXR0b24uc3R5bGUuaGVpZ2h0ID0gXCIxN3B4XCI7XHJcbiAgICBidXR0b24uZGlzYWJsZWQgPSB0cnVlO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3Qgc2hvd1NjYW5Qb2ludHNPblBsYW5JbkRpdiA9IGFzeW5jIChcclxuICAgIHBsYW46IFBsYW4sXHJcbiAgICBkaXZQbGFuOiBIVE1MRWxlbWVudCxcclxuICAgIG5hdmlnYXRpb25zOiBOYXZpZ2F0aW9uW10sXHJcbik6IFByb21pc2U8SFRNTEJ1dHRvbkVsZW1lbnRbXT4gPT4ge1xyXG4gICAgaWYgKCFkaXZQbGFuIHx8ICFwbGFuLmZpbGVwYXRoKSB7XHJcbiAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gICAgY29uc3QgY2FsaWJyYWdlID0gSlNPTi5wYXJzZShwbGFuLmNhbGlicmF0aW9uKTtcclxuXHJcbiAgICBjb25zdCBpbWcgPSBhd2FpdCBnZXRNZXRhRm9ySW1hZ2UocGxhbi5maWxlcGF0aCk7XHJcbiAgICBkaXZQbGFuLnN0eWxlLmJhY2tncm91bmRJbWFnZSA9IGB1cmwoJHtwbGFuLmZpbGVwYXRofSlgO1xyXG4gICAgZGl2UGxhbi5zdHlsZS5iYWNrZ3JvdW5kU2l6ZSA9IFwiY29udGFpblwiO1xyXG4gICAgZGl2UGxhbi5zdHlsZS5iYWNrZ3JvdW5kUmVwZWF0ID0gXCJuby1yZXBlYXRcIjtcclxuICAgIGF3YWl0IHdhaXQoMTUwMCk7IC8vIHdoaWxlIGltYWdlIGlzIGxvYWRlZCB0byBkaXZcclxuICAgIGRpdlBsYW4uaW5uZXJIVE1MID0gXCJcIjsgLy8gcmVtb3ZlIGFsbCBwcmV2aW91cyBidXR0b25zIGlmIGV4aXN0XHJcbiAgICBjb25zdCByZWN0ID0gZGl2UGxhbi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIGNvbnN0IHsgY29lZmZYLCBjb2VmZlkgfSA9IGdldENvZWZmaWNpZW50c0ZvckltYWdlKGltZywgcmVjdCk7XHJcbiAgICBjb25zdCBidXR0b25zID0gW107XHJcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICBuYXZpZ2F0aW9ucy5tYXAoYXN5bmMgKG5hdmlnYXRpb24pID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIik7XHJcbiAgICAgICAgICAgIHN0eWxlQnV0dG9uKGVsZW1lbnQpO1xyXG4gICAgICAgICAgICBlbGVtZW50LmlkID0gbmF2aWdhdGlvbi5tYXR0ZXJwb3J0U3dlZXBJRDtcclxuICAgICAgICAgICAgaWYgKGNhbGlicmFnZS5uZXcpIHtcclxuICAgICAgICAgICAgICAgIC8vIG5ldyBwcm9jZWR1cmUgb2YgY2FsaWJyYWdlXHJcbiAgICAgICAgICAgICAgICAvLyBmaW5kIHBvc2l0aW9uIGZvciBhIGdpdmVuIHBsYW5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uc09uUGxhbiA9IG5hdmlnYXRpb24ucG9zaXRpb25PblBsYW4ubWFwKChlbnRyeSkgPT5cclxuICAgICAgICAgICAgICAgICAgICBKU09OLnBhcnNlKGVudHJ5KSxcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwb3NpdGlvbk9uUGxhbiA9IHBvc2l0aW9uc09uUGxhbi5maW5kKFxyXG4gICAgICAgICAgICAgICAgICAgIChkYXRhKSA9PiBkYXRhLnBsYW5JRCA9PT0gcGxhbi5pZCxcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBpZiAocG9zaXRpb25PblBsYW4pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWFsV2lkdGggPSBpbWcud2lkdGggLyBjb2VmZlg7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVhbEhlaWdodCA9IGltZy5oZWlnaHQgLyBjb2VmZlk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5zdHlsZS50b3AgPSBgJHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgKHBvc2l0aW9uT25QbGFuLnkgKiByZWFsSGVpZ2h0KSAvIGNhbGlicmFnZS5pbWdIZWlnaHQgLVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAxMFxyXG4gICAgICAgICAgICAgICAgICAgIH1weGA7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0gYCR7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChwb3NpdGlvbk9uUGxhbi54ICogcmVhbFdpZHRoKSAvIGNhbGlicmFnZS5pbWdXaWR0aCAtIDEwXHJcbiAgICAgICAgICAgICAgICAgICAgfXB4YDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0gSlNPTi5wYXJzZShuYXZpZ2F0aW9uLnBvc2l0aW9uKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHggPSBjYWxpYnJhZ2Uub2Zmc2V0WCArIHBvc2l0aW9uLnggKiBjYWxpYnJhZ2UueDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHkgPSBjYWxpYnJhZ2Uub2Zmc2V0WSArIHBvc2l0aW9uLnogKiBjYWxpYnJhZ2UueTtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gYCR7eSAvIGNvZWZmWSAtIDEwfXB4YDtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IGAke3ggLyBjb2VmZlggLSAxMH1weGA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGl2UGxhbi5hcHBlbmQoZWxlbWVudCk7XHJcbiAgICAgICAgICAgIGJ1dHRvbnMucHVzaChlbGVtZW50KTtcclxuICAgICAgICB9KSxcclxuICAgICk7XHJcbiAgICByZXR1cm4gYnV0dG9ucztcclxufTtcclxuIl19
|
|
@@ -38,4 +38,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
38
38
|
providedIn: 'root',
|
|
39
39
|
}]
|
|
40
40
|
}], ctorParameters: () => [] });
|
|
41
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem9uZUNoYW5nZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy96b25lQ2hhbmdlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFHL0I7O0dBRUc7QUFJSCxNQUFNLE9BQU8saUJBQWlCO0lBRTVCLFVBQVUsR0FBeUIsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUNqRCxrQkFBa0IsR0FBMkIsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUUzRDs7Ozs7OztPQU9HO0lBQ0gsaUJBQWlCLEdBQTJCLElBQUksT0FBTyxFQUFFLENBQUM7SUFFbEQsV0FBVyxDQUFPO0lBQ2xCLFlBQVksQ0FBUztJQUV0QixlQUFlLEdBQXVCLElBQUksWUFBWSxFQUFRLENBQUM7SUFFdEU7UUFDRSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ2pDLGtEQUFrRDtZQUNsRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUMxQyxvREFBb0Q7WUFDcEQsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO3dHQTlCVSxpQkFBaUI7NEdBQWpCLGlCQUFpQixjQUZoQixNQUFNOzs0RkFFUCxpQkFBaUI7a0JBSDdCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRFbWl0dGVyLCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgWm9uZSB9IGZyb20gJy4uL3R5cGVzLnNlcnZpY2UnO1xyXG5cclxuLyoqXHJcbiAqIEF0b21pYyB6b25lIGNoYW5nZSBzZXJ2aWNlIHRvIGJyZWFrIGN5Y2xpYyBkZXBlbmRlbmNpZXMgaXNzdWVcclxuICovXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBab25lQ2hhbmdlU2VydmljZSB7XHJcblxyXG4gIHpvbmVDaGFuZ2U6IFN1YmplY3Q8Wm9uZSB8IG51bGw+ID0gbmV3IFN1YmplY3QoKTtcclxuICB6b25lc0ZvclVzZXJDaGFuZ2U6IFN1YmplY3Q8Wm9uZVtdIHwgbnVsbD4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICAvKipcclxuICAgKiBFbWl0cyB0aGUgc3BhY2Ugb3BlbmVkIGJ5IGEgdmlld2VyIHRoYXQgaGFzIG5vIHpvbmUgbmF2aWdhdGlvbiAoVGhyZWUuanMpLCBvciBudWxsIHdoZW4gaXRcclxuICAgKiBjbG9zZXMuXHJcbiAgICpcclxuICAgKiBab25lcyBhcmUgZGVmaW5lZCBieSB0aGUgc3dlZXBzIHRoZXkgY29udGFpbiwgc28gdGhleSBvbmx5IG1lYW4gc29tZXRoaW5nIGluIGEgTWF0dGVycG9ydCB0b3VyLlxyXG4gICAqIEEgM0QgbW9kZWwgaGFzIG5vIHN3ZWVwczogaXQgc2hvd3MgdGhlIHdob2xlIHNwYWNlIGF0IG9uY2UsIGFuZCB0aGUgc2VydmljZXMgdGhhdCBsb2FkIGRhdGFcclxuICAgKiBsaXN0ZW4gaGVyZSBpbnN0ZWFkIG9mIHRvIGB6b25lQ2hhbmdlYCB0byBrbm93IHdoaWNoIHNwYWNlIHRoZXkgYXJlIGxvb2tpbmcgYXQuXHJcbiAgICovXHJcbiAgc3BhY2VXaXRob3V0Wm9uZXM6IFN1YmplY3Q8c3RyaW5nIHwgbnVsbD4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICBwcml2YXRlIGN1cnJlbnRab25lOiBab25lO1xyXG4gIHByaXZhdGUgY3VycmVudFpvbmVzOiBab25lW107XHJcblxyXG4gIHB1YmxpYyBmbG9vckhhc0NoYW5nZWQ6IEV2ZW50RW1pdHRlcjxab25lPiA9IG5ldyBFdmVudEVtaXR0ZXI8Wm9uZT4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLnpvbmVDaGFuZ2Uuc3Vic2NyaWJlKCh6b25lKSA9PiB7XHJcbiAgICAgIC8vY29uc29sZS5sb2coYG5ldyB6b25lICR7SlNPTi5zdHJpbmdpZnkoem9uZSl9YCk7XHJcbiAgICAgIHRoaXMuY3VycmVudFpvbmUgPSB6b25lO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy56b25lc0ZvclVzZXJDaGFuZ2Uuc3Vic2NyaWJlKCh6b25lcykgPT4ge1xyXG4gICAgICAvL2NvbnNvbGUubG9nKGBuZXcgem9uZXMgJHtKU09OLnN0cmluZ2lmeSh6b25lcyl9YCk7XHJcbiAgICAgIHRoaXMuY3VycmVudFpvbmVzID0gem9uZXM7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG59XHJcbiJdfQ==
|
|
@@ -5,4 +5,4 @@ import { InjectionToken } from '@angular/core';
|
|
|
5
5
|
* (see app.module.ts of each app for the provider registration).
|
|
6
6
|
*/
|
|
7
7
|
export const MATTERPORT_SDK_KEY = new InjectionToken('MATTERPORT_SDK_KEY');
|
|
8
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0dGVycG9ydC1zZGsta2V5LnRva2VuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWNvcmUvc3JjL2xpYi90b2tlbnMvbWF0dGVycG9ydC1zZGsta2V5LnRva2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0M7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLElBQUksY0FBYyxDQUFTLG9CQUFvQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuLyoqXHJcbiAqIEluamVjdGlvbiB0b2tlbiBob2xkaW5nIHRoZSBNYXR0ZXJwb3J0IFNESyBhcHBsaWNhdGlvbiBrZXkuXHJcbiAqIEVhY2ggY29uc3VtaW5nIGFwcCBtdXN0IHByb3ZpZGUgaXRzIG93biB2YWx1ZSB2aWEgaXRzIGVudmlyb25tZW50IGZpbGVcclxuICogKHNlZSBhcHAubW9kdWxlLnRzIG9mIGVhY2ggYXBwIGZvciB0aGUgcHJvdmlkZXIgcmVnaXN0cmF0aW9uKS5cclxuICovXHJcbmV4cG9ydCBjb25zdCBNQVRURVJQT1JUX1NES19LRVkgPSBuZXcgSW5qZWN0aW9uVG9rZW48c3RyaW5nPignTUFUVEVSUE9SVF9TREtfS0VZJyk7Il19
|