@smarterplan/ngx-smarterplan-core 1.4.17 → 1.4.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/README.md +24 -24
  2. package/esm2022/lib/components/csv-export/csv-export.component.mjs +3 -3
  3. package/esm2022/lib/components/loader/loader.component.mjs +3 -3
  4. package/esm2022/lib/components/menu-bar/avatar/avatar.component.mjs +1 -1
  5. package/esm2022/lib/components/menu-bar/menu-bar.component.mjs +3 -3
  6. package/esm2022/lib/components/menu-bar/navigation-bar/navigation-bar.component.mjs +3 -3
  7. package/esm2022/lib/components/modal-switch-visit/modal-switch-visit.component.mjs +3 -3
  8. package/esm2022/lib/components/search-bar/search-bar.component.mjs +3 -3
  9. package/esm2022/lib/components/support-modal/support-modal.component.mjs +3 -3
  10. package/esm2022/lib/config.mjs +1 -1
  11. package/esm2022/lib/helpers.service.mjs +1 -1
  12. package/esm2022/lib/matterport-extensions/nest-thermostat/CanvasImage.mjs +1 -1
  13. package/esm2022/lib/matterport-extensions/nest-thermostat/CanvasRenderer.mjs +1 -1
  14. package/esm2022/lib/matterport-extensions/nest-thermostat/NestThermostat.mjs +1 -1
  15. package/esm2022/lib/matterport-extensions/nest-thermostat/PlaneRenderer.mjs +1 -1
  16. package/esm2022/lib/matterport-extensions/scene-component/SceneComponent.mjs +1 -1
  17. package/esm2022/lib/matterport-extensions/security-camera/SecurityCamera.mjs +22 -22
  18. package/esm2022/lib/matterport-extensions/tv-player/TvPlayer.mjs +1 -1
  19. package/esm2022/lib/matterport-extensions/view-frustum-mesh/ViewFrustumMesh.mjs +22 -22
  20. package/esm2022/lib/mattertagData.mjs +10 -1
  21. package/esm2022/lib/ngx-smarterplan-core.module.mjs +1 -1
  22. package/esm2022/lib/ngx-smarterplan-core.service.mjs +1 -1
  23. package/esm2022/lib/pipes/duration-to-string.pipe.mjs +1 -1
  24. package/esm2022/lib/pipes/format-date-number-to-digits.pipe.mjs +1 -1
  25. package/esm2022/lib/pipes/hashtag-from-id.pipe.mjs +1 -1
  26. package/esm2022/lib/pipes/safe-url.pipe.mjs +1 -1
  27. package/esm2022/lib/pipes/time-date-to-local-string.pipe.mjs +1 -1
  28. package/esm2022/lib/pipes/username-from-id.pipe.mjs +1 -1
  29. package/esm2022/lib/services/amplify-cache.service.mjs +1 -1
  30. package/esm2022/lib/services/base-tab.service.mjs +1 -1
  31. package/esm2022/lib/services/baseVisibility.service.mjs +1 -1
  32. package/esm2022/lib/services/content.service.mjs +1 -1
  33. package/esm2022/lib/services/filter.service.mjs +1 -1
  34. package/esm2022/lib/services/intervention.service.mjs +1 -1
  35. package/esm2022/lib/services/locale.service.mjs +1 -1
  36. package/esm2022/lib/services/matterport-import.service.mjs +10 -3
  37. package/esm2022/lib/services/matterport-measurement.service.mjs +1 -1
  38. package/esm2022/lib/services/matterport-navigation.service.mjs +1 -1
  39. package/esm2022/lib/services/matterport-object3d.service.mjs +1 -1
  40. package/esm2022/lib/services/matterport-pointer.service.mjs +6 -6
  41. package/esm2022/lib/services/matterport-tag-copy.service.mjs +455 -9
  42. package/esm2022/lib/services/matterport-tag.service.mjs +99 -10
  43. package/esm2022/lib/services/matterport.service.mjs +83 -48
  44. package/esm2022/lib/services/models/affectation.service.mjs +1 -1
  45. package/esm2022/lib/services/models/base-object.service.mjs +1 -1
  46. package/esm2022/lib/services/models/capture.service.mjs +1 -1
  47. package/esm2022/lib/services/models/comment.service.mjs +1 -1
  48. package/esm2022/lib/services/models/domain.service.mjs +1 -1
  49. package/esm2022/lib/services/models/equipment.service.mjs +1 -1
  50. package/esm2022/lib/services/models/event.service.mjs +1 -1
  51. package/esm2022/lib/services/models/feature.service.mjs +1 -1
  52. package/esm2022/lib/services/models/hashtag.service.mjs +1 -1
  53. package/esm2022/lib/services/models/layer.service.mjs +1 -1
  54. package/esm2022/lib/services/models/measurement.service.mjs +1 -1
  55. package/esm2022/lib/services/models/mission.service.mjs +1 -1
  56. package/esm2022/lib/services/models/navigation.service.mjs +1 -1
  57. package/esm2022/lib/services/models/node.service.mjs +1 -1
  58. package/esm2022/lib/services/models/object3D.service.mjs +1 -1
  59. package/esm2022/lib/services/models/operation.service.mjs +1 -1
  60. package/esm2022/lib/services/models/organisation.service.mjs +1 -1
  61. package/esm2022/lib/services/models/plan.service.mjs +1 -1
  62. package/esm2022/lib/services/models/poi.service.mjs +62 -50
  63. package/esm2022/lib/services/models/profile.service.mjs +1 -1
  64. package/esm2022/lib/services/models/property.service.mjs +1 -1
  65. package/esm2022/lib/services/models/space.service.mjs +1 -1
  66. package/esm2022/lib/services/models/template.service.mjs +1 -1
  67. package/esm2022/lib/services/models/ticket.service.mjs +1 -1
  68. package/esm2022/lib/services/models/visit.service.mjs +1 -1
  69. package/esm2022/lib/services/models/zone.service.mjs +9 -5
  70. package/esm2022/lib/services/navigator.service.mjs +1 -1
  71. package/esm2022/lib/services/s3.service.mjs +1 -1
  72. package/esm2022/lib/services/search.service.mjs +1 -1
  73. package/esm2022/lib/services/support.service.mjs +1 -1
  74. package/esm2022/lib/services/tag.service.mjs +16 -16
  75. package/esm2022/lib/services/threejs-import.service.mjs +1 -1
  76. package/esm2022/lib/services/threejs.service.mjs +1 -1
  77. package/esm2022/lib/services/user.service.mjs +1 -1
  78. package/esm2022/lib/services/utils/matterport-transform.util.mjs +1 -1
  79. package/esm2022/lib/services/validators.service.mjs +1 -1
  80. package/esm2022/lib/services/viewer.service.mjs +1 -1
  81. package/esm2022/lib/services/zone-drawer.service.mjs +1 -1
  82. package/esm2022/lib/services/zoneChange.service.mjs +1 -1
  83. package/esm2022/lib/tokens/matterport-sdk-key.token.mjs +1 -1
  84. package/esm2022/lib/types.service.mjs +1 -1
  85. package/esm2022/lib/validators/email.directive.mjs +1 -1
  86. package/esm2022/lib/validators/no-empty.directive.mjs +1 -1
  87. package/esm2022/lib/validators/number.directive.mjs +1 -1
  88. package/esm2022/lib/validators/text.directive.mjs +1 -1
  89. package/esm2022/public-api.mjs +1 -1
  90. package/fesm2022/smarterplan-ngx-smarterplan-core.mjs +793 -193
  91. package/fesm2022/smarterplan-ngx-smarterplan-core.mjs.map +1 -1
  92. package/lib/mattertagData.d.ts +4 -0
  93. package/lib/services/matterport-tag-copy.service.d.ts +128 -2
  94. package/lib/services/matterport-tag.service.d.ts +24 -1
  95. package/lib/services/matterport.service.d.ts +12 -3
  96. package/lib/services/models/poi.service.d.ts +1 -0
  97. package/package.json +1 -1
  98. package/src/assets/vs-app.json +67 -67
@@ -847,4 +847,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
847
847
  type: Inject,
848
848
  args: ['config']
849
849
  }] }, { type: i1.PoiService }, { type: i2.MatterportService }, { type: i3.ThreeJsService }] });
850
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL3NlcnZpY2VzL3ZpZXdlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFDQUFxQztBQUNyQyw4QkFBOEI7QUFDOUIseUNBQXlDO0FBQ3pDLDJDQUEyQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBSS9CLE9BQU8sRUFHTCxrQkFBa0IsRUFDbEIsT0FBTyxFQUtQLFFBQVEsR0FDVCxNQUFNLGtCQUFrQixDQUFDO0FBRTFCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlEQUF5RCxDQUFDO0FBQ2pILE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBRXRILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDN0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7Ozs7OztBQU0zRCxNQUFNLE9BQU8sYUFBYTtJQThEdUI7SUFDVjtJQUMzQjtJQUNBO0lBQ0E7SUFqRUYsVUFBVSxHQUFXLFlBQVksQ0FBQztJQUVuQyxjQUFjLENBQVM7SUFFdEIsT0FBTyxDQUFTO0lBRWpCLFVBQVUsR0FLWixJQUFJLE9BQU8sRUFBRSxDQUFDO0lBRVosWUFBWSxHQUFxQixJQUFJLE9BQU8sRUFBRSxDQUFDO0lBRS9DLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFFakIsYUFBYSxHQUFHLEtBQUssQ0FBQztJQUU3Qjs7Ozs7O09BTUc7SUFDSSxjQUFjLEdBQWtCLElBQUks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UUFBUSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLWF3YWl0LWluLWxvb3AgKi9cbi8qIGVzbGludC1kaXNhYmxlIGNhbWVsY2FzZSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZXJzY29yZS1kYW5nbGUgKi9cbi8qIGVzbGludC1kaXNhYmxlIGNsYXNzLW1ldGhvZHMtdXNlLXRoaXMgKi9cbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTUFUVEVSUE9SVF9TREtfS0VZIH0gZnJvbSAnLi4vdG9rZW5zL21hdHRlcnBvcnQtc2RrLWtleS50b2tlbic7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBNYXR0ZXJwb3J0U2VydmljZSB9IGZyb20gJy4vbWF0dGVycG9ydC5zZXJ2aWNlJztcbmltcG9ydCB7IFRocmVlSnNTZXJ2aWNlIH0gZnJvbSAnLi90aHJlZWpzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQmFzZVRhZ1NlcnZpY2UgfSBmcm9tICcuL3RhZy5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIERiT2JqZWN0VHlwZSxcbiAgUE9JLFxuICBWaWV3ZXJJbnRlcmFjdGlvbnMsXG4gIFBvaVR5cGUsXG4gIENvbW1lbnQsXG4gIEVxdWlwbWVudCxcbiAgVGlja2V0LFxuICBGZWF0dXJlLFxuICBTcE1vZHVsZSxcbn0gZnJvbSAnLi4vdHlwZXMuc2VydmljZSc7XG5pbXBvcnQgeyBQb2lTZXJ2aWNlIH0gZnJvbSAnLi9tb2RlbHMvcG9pLnNlcnZpY2UnO1xuaW1wb3J0IHsgbWFrZVNlY3VyaXR5Q2FtZXJhLCBzZWN1cml0eUNhbWVyYVR5cGUgfSBmcm9tIFwiLi4vbWF0dGVycG9ydC1leHRlbnNpb25zL3NlY3VyaXR5LWNhbWVyYS9TZWN1cml0eUNhbWVyYVwiO1xuaW1wb3J0IHsgVmlld0ZydXN0dW1NZXNoVHlwZSwgbWFrZVZpZXdGcnVzdHVtTWVzaCB9IGZyb20gXCIuLi9tYXR0ZXJwb3J0LWV4dGVuc2lvbnMvdmlldy1mcnVzdHVtLW1lc2gvVmlld0ZydXN0dW1NZXNoXCI7XG5pbXBvcnQgeyBOYXZpZ2F0b3JTZXJ2aWNlIH0gZnJvbSAnLi9uYXZpZ2F0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBnZXRTaWduZWRGaWxlIH0gZnJvbSAnLi9zMy5zZXJ2aWNlJztcbmltcG9ydCB7IHBhcnNlVGhyZWVKc1BsYWNlbWVudCB9IGZyb20gJy4uL2hlbHBlcnMuc2VydmljZSc7XG5pbXBvcnQgeyBDb25maWcgfSBmcm9tICcuLi9jb25maWcnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgVmlld2VyU2VydmljZSB7XG4gIHByaXZhdGUgdmlld2VyTW9kZTogc3RyaW5nID0gJ01hdHRlcnBvcnQnO1xuXG4gIHB1YmxpYyBjdXJyZW50TW9kZWwzRDogc3RyaW5nO1xuXG4gIHByaXZhdGUgdG91clVybDogc3RyaW5nO1xuXG4gIHB1YmxpYyB2aWV3ZXJJc09uOiBTdWJqZWN0PHtcbiAgICBzcGFjZUlEOiBzdHJpbmcgfCBudWxsO1xuICAgIG1vZGVsM0Q6IHN0cmluZyB8IG51bGw7XG4gICAgc3dlZXA6IHN0cmluZyB8IG51bGw7XG4gICAgcm90YXRpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IH0gfCBudWxsO1xuICB9PiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgcHVibGljIGRhdGFJc0xvYWRlZDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgcHVibGljIGlzTG9hZGVkID0gZmFsc2U7XG5cbiAgcHVibGljIHNob3dpbmdWaWV3ZXIgPSBmYWxzZTtcblxuICAvKipcbiAgICogVGhlIHNwYWNlIGJlaW5nIHZpZXdlZCwgd2hpY2hldmVyIHZpZXdlciBpcyBzaG93aW5nIGl0LlxuICAgKlxuICAgKiBNYXR0ZXJwb3J0U2VydmljZSBjYXJyaWVzIGl0cyBvd24gY29weSwgc2V0IHdoaWxlIGl0cyBTREsgY29ubmVjdHMgLSB3aGljaCBuZXZlciBoYXBwZW5zIGluXG4gICAqIFRocmVlLmpzIG1vZGUuIEFueXRoaW5nIHRoYXQgcmVhZHMgb25seSB0aGF0IG9uZSBzaWxlbnRseSBkb2VzIG5vdGhpbmcgZm9yIGEgM0QgbW9kZWwsIGFuZCB0aGVcbiAgICogbGlzdHMgdGhhdCBmZWVkIHRhZ3MgYXJlIGV4YWN0bHkgdGhhdC5cbiAgICovXG4gIHB1YmxpYyBjdXJyZW50U3BhY2VJRDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgcHVibGljIHN3ZWVwVG9Nb3ZlOiBzdHJpbmcgfCBudWxsO1xuXG4gIHB1YmxpYyByb3RhdGlvblRvTW92ZTogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgfSB8IG51bGw7XG5cbiAgcHVibGljIGdvVG9UcmlnZ2VyZWQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuXG4gIHB1YmxpYyB0b29sYm94U3RhdGVzID0ge1xuICAgIGRvbGxob3VzZToge1xuICAgICAgc3RhdDogZmFsc2UsXG4gICAgICBpY29uSWQ6ICd1aS1kb2xsaG91c2UnLFxuICAgICAgc2hvdygpIHtcbiAgICAgIH0sXG4gICAgICBoaWRlKCkge1xuICAgICAgfSxcbiAgICB9LFxuICAgIGZsb29ycGxhbjoge1xuICAgICAgc3RhdDogZmFsc2UsXG4gICAgfSxcbiAgICBtZXN1cmU6IHtcbiAgICAgIHN0YXQ6IGZhbHNlLFxuICAgICAgaWNvbklkOiAndWktbWVzdXJlJyxcbiAgICAgIHNob3coKSB7XG4gICAgICB9LFxuICAgICAgaGlkZSgpIHtcbiAgICAgIH0sXG4gICAgfSxcbiAgICBmaWx0ZXI6IHtcbiAgICAgIHN0YXQ6IGZhbHNlLFxuICAgIH0sXG4gIH07XG4gIHByaXZhdGUgaXNPYmplY3RMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KE1BVFRFUlBPUlRfU0RLX0tFWSkgcHJpdmF0ZSByZWFkb25seSBzZGtLZXk6IHN0cmluZyxcbiAgICBASW5qZWN0KCdjb25maWcnKSBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZzogQ29uZmlnLFxuICAgIHByaXZhdGUgcG9pU2VydmljZTogUG9pU2VydmljZSxcbiAgICBwcml2YXRlIG1hdHRlcnBvcnRTZXJ2aWNlOiBNYXR0ZXJwb3J0U2VydmljZSxcbiAgICBwcml2YXRlIHRocmVlSnNTZXJ2aWNlOiBUaHJlZUpzU2VydmljZSxcbiAgKSB7XG4gICAgdGhpcy5zZXRNb2RlKCdNYXR0ZXJwb3J0Jyk7XG4gIH1cblxuXG4gIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICBVdGlsc1xuICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICBjaGVja01vZGUoaW5kZXhNb2RlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy52aWV3ZXJNb2RlID09PSBpbmRleE1vZGU7XG4gIH1cblxuICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgU2V0dGVyc1xuICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICBzZXRNb2RlKGluZGV4TW9kZTogc3RyaW5nKSB7XG4gICAgLy8gTGVhdmluZyBUaHJlZS5qcyBtZWFucyBubyBUaHJlZS5qcyB3b3JrIHNob3VsZCBzdGlsbCBiZSBydW5uaW5nLiBUaGUgc2VydmljZSBiZWhpbmQgaXQgaXMgYVxuICAgIC8vIHNpbmdsZXRvbiBhbmQgb3V0bGl2ZXMgdGhlIGNvbXBvbmVudCwgc28gYSBkb3dubG9hZCBzdGFydGVkIGZvciBhIG1vZGVsIHRoZSB1c2VyIGhhcyBuYXZpZ2F0ZWRcbiAgICAvLyBhd2F5IGZyb20gd291bGQgb3RoZXJ3aXNlIGZpbmlzaCAtIGFuZCBpdHMgcGFyc2Ugd291bGQgaG9sZCB0aGUgbWFpbiB0aHJlYWQgZm9yIHNlY29uZHMsXG4gICAgLy8gc3RhbGxpbmcgd2hhdGV2ZXIgdmlld2VyIHRoZXkgYWN0dWFsbHkgb3BlbmVkLlxuICAgIGlmICh0aGlzLnZpZXdlck1vZGUgPT09ICd0aHJlZWpzJyAmJiBpbmRleE1vZGUgIT09ICd0aHJlZWpzJykge1xuICAgICAgdGhpcy50aHJlZUpzU2VydmljZS5kZXN0cm95KCk7XG4gICAgfVxuICAgIHRoaXMudmlld2VyTW9kZSA9IGluZGV4TW9kZTtcbiAgfVxuXG4gIHNldFRvdXJVcmwob3B0aW9uczoge1xuICAgIG1vZGVsM2Q6IHN0cmluZyxcbiAgICBzaG93SWNvblBsYW4/OiBib29sZWFuLFxuICAgIHNob3dJY29uRG9sbGhvdXNlPzogYm9vbGVhbixcbiAgICBzaG93SWNvbkZsb29ycz86IGJvb2xlYW4sXG4gICAgc2hvd1F1aWNrU3RhcnQ/OiBib29sZWFuLFxuICAgIHNob3dGdWxsc2NyZWVuPzogYm9vbGVhbixcbiAgICBzaG93R3VpZGVkVG91cj86IGJvb2xlYW4sXG4gICAgc2hvd0hpZ2hsaWdodFJlZWw/OiBib29sZWFuLFxuICAgIHNob3dEZWZ1cm5pc2g/OiBib29sZWFuLFxuICAgIHNob3dSb29tTWVhc3VyZW1lbnRzPzogYm9vbGVhblxuICB9KSB7XG4gICAgY29uc3Qge1xuICAgICAgbW9kZWwzZCxcbiAgICAgIHNob3dJY29uUGxhbiA9IHRydWUsXG4gICAgICBzaG93SWNvbkRvbGxob3VzZSA9IHRydWUsXG4gICAgICBzaG93SWNvbkZsb29ycyA9IHRydWUsXG4gICAgICBzaG93UXVpY2tTdGFydCA9IHRydWUsXG4gICAgICBzaG93RnVsbHNjcmVlbiA9IHRydWUsXG4gICAgICBzaG93R3VpZGVkVG91ciA9IHRydWUsXG4gICAgICBzaG93SGlnaGxpZ2h0UmVlbCA9IHRydWUsXG4gICAgICBzaG93RGVmdXJuaXNoID0gdHJ1ZSxcbiAgICAgIHNob3dSb29tTWVhc3VyZW1lbnRzID0gdHJ1ZVxuICAgIH0gPSBvcHRpb25zO1xuXG4gICAgY29uc3QgYmFzZVVybCA9IGAvYXNzZXRzL2J1bmRsZS9zaG93Y2FzZS5odG1sYDtcblxuICAgIGNvbnN0IHBhcmFtczogc3RyaW5nW10gPSBbXTtcblxuICAgIC8vIE1vZMOobGVcbiAgICBwYXJhbXMucHVzaChgbT0ke21vZGVsM2R9YCk7XG5cbiAgICAvLyBDb21wb3J0ZW1lbnQgZ8OpbsOpcmFsXG4gICAgcGFyYW1zLnB1c2goYHBsYXk9MWApO1xuICAgIHBhcmFtcy5wdXNoKGB1aT0xYCk7XG4gICAgcGFyYW1zLnB1c2goYHRpdGxlPTBgKTtcbiAgICBwYXJhbXMucHVzaChgbG9nPTBgKTtcbiAgICBwYXJhbXMucHVzaChgYnJhbmQ9MGApO1xuICAgIHBhcmFtcy5wdXNoKGBzZWFyY2g9MGApO1xuICAgIHBhcmFtcy5wdXNoKGBhcHBsaWNhdGlvbktleT0ke3RoaXMuc2RrS2V5fWApO1xuICAgIHBhcmFtcy5wdXNoKGBtZHM9MGApO1xuXG4gICAgLy8gUXVpY2sgc3RhcnRcbiAgICBpZiAoc2hvd1F1aWNrU3RhcnQpIHtcbiAgICAgIHBhcmFtcy5wdXNoKGBxcz0xYCk7XG4gICAgfVxuXG4gICAgLy8gRmxvb3JwbGFuIChwbGFuKVxuICAgIGlmICghc2hvd0ljb25QbGFuKSB7XG4gICAgICBwYXJhbXMucHVzaChgZnA9MGApO1xuICAgIH1cblxuICAgIC8vIERvbGxob3VzZSAobWFpc29uL3BvdXDDqWUpXG4gICAgaWYgKCFzaG93SWNvbkRvbGxob3VzZSkge1xuICAgICAgcGFyYW1zLnB1c2goYGRoPTBgKTtcbiAgICB9XG5cbiAgICAvLyBTw6lsZWN0ZXVyIGTigJnDqXRhZ2VzXG4gICAgaWYgKCFzaG93SWNvbkZsb29ycykge1xuICAgICAgcGFyYW1zLnB1c2goYHNmPTBgKTtcbiAgICB9XG5cbiAgICAvLyBHdWlkZWQgdG91clxuICAgIGlmICghc2hvd0d1aWRlZFRvdXIpIHtcbiAgICAgIHBhcmFtcy5wdXNoKGBndD0wYCk7XG4gICAgfVxuXG4gICAgLy8gSGlnaGxpZ2h0IHJlZWwgKGJhbmRlIGR1IGJhcylcbiAgICBpZiAoIXNob3dIaWdobGlnaHRSZWVsKSB7XG4gICAgICAvLyBTZWxvbiB0b24gYnVuZGxlIDogaHI9MSBvdSBocj0wIG1hc3F1ZVxuICAgICAgcGFyYW1zLnB1c2goYGhyPTFgKTtcbiAgICB9XG5cbiAgICAvLyBQbGVpbiDDqWNyYW5cbiAgICBpZiAoIXNob3dGdWxsc2NyZWVuKSB7XG4gICAgICBwYXJhbXMucHVzaChgZnM9MGApO1xuICAgIH1cblxuICAgIC8vIERlZnVybmlzaFxuICAgIGlmIChzaG93RGVmdXJuaXNoKSB7XG4gICAgICBwYXJhbXMucHVzaChgYWQ9MWApO1xuICAgIH1cblxuICAgIC8vIFJvb20gTWVhc3VyZW1lbnRzXG4gICAgaWYgKHNob3dSb29tTWVhc3VyZW1lbnRzKSB7XG4gICAgICBwYXJhbXMucHVzaChgbWVhc3VyZW1lbnRzPTFgKTtcbiAgICB9XG5cbiAgICB0aGlzLnRvdXJVcmwgPSBgJHtiYXNlVXJsfT8ke3BhcmFtcy5qb2luKFwiJlwiKX1gO1xuICB9XG5cbiAgYXN5bmMgY2xlYXJBbGwoKSB7XG4gICAgLy8gdGhpcy5zd2VlcFRvTW92ZSA9IG51bGw7XG4gICAgLy8gdGhpcy5yb3RhdGlvblRvTW92ZSA9IG51bGw7XG4gICAgaWYgKHRoaXMuY2hlY2tNb2RlKCd0aHJlZWpzJykpIHtcbiAgICAgIHRoaXMudGhyZWVKc1NlcnZpY2UuZGVzdHJveSgpO1xuICAgICAgdGhpcy5zaG93aW5nVmlld2VyID0gZmFsc2U7XG4gICAgICB0aGlzLmlzTG9hZGVkID0gZmFsc2U7XG4gICAgICAvLyBNaXJyb3JzIHRoZSBNYXR0ZXJwb3J0IGJyYW5jaDogdGhlIHNwYWNlIGlzIG5vIGxvbmdlciBvbiBzY3JlZW4sIHNvIHdoYXRldmVyIHdhcyBsb2FkZWRcbiAgICAgIC8vIGZvciBpdCBoYXMgdG8gYmUgZHJvcHBlZCBiZWZvcmUgYW5vdGhlciB2aXNpdCBvcGVucy5cbiAgICAgIHRoaXMudmlld2VySXNPbi5uZXh0KHtcbiAgICAgICAgc3BhY2VJRDogbnVsbCxcbiAgICAgICAgbW9kZWwzRDogbnVsbCxcbiAgICAgICAgc3dlZXA6IG51bGwsXG4gICAgICAgIHJvdGF0aW9uOiBudWxsLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmNoZWNrTW9kZSgnTWF0dGVycG9ydCcpKSB7XG4gICAgICB0aGlzLnNob3dpbmdWaWV3ZXIgPSBmYWxzZTtcbiAgICAgIHRoaXMuaXNMb2FkZWQgPSBmYWxzZTtcbiAgICAgIGF3YWl0IHRoaXMubWF0dGVycG9ydFNlcnZpY2UuY2xlYXJBbGwoKTtcbiAgICAgIHRoaXMudmlld2VySXNPbi5uZXh0KHtcbiAgICAgICAgc3BhY2VJRDogbnVsbCxcbiAgICAgICAgbW9kZWwzRDogbnVsbCxcbiAgICAgICAgc3dlZXA6IG51bGwsXG4gICAgICAgIHJvdGF0aW9uOiBudWxsLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgIEdldHRlcnNcbiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgZ2V0TW9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy52aWV3ZXJNb2RlO1xuICB9XG5cbiAgZ2V0Vmlld2VyU2VsZWN0ZWRTZXJ2aWNlKCkge1xuICAgIC8vIE1hdHRlcnBvcnRcbiAgICAvLyBpZiAodGhpcy5jaGVja01vZGUoXCJNYXR0ZXJwb3J0XCIpKSB7XG4gICAgLy8gICAgIHJldHVybiB0aGlzLmdldE1hdHRlcnBvcnRTZXJ2aWNlKCk7XG4gICAgLy8gfVxuICAgIHJldHVybiB0aGlzLmdldE1hdHRlcnBvcnRTZXJ2aWNlKCk7XG4gIH1cblxuICBnZXRUb3VyVXJsKCkge1xuICAgIHJldHVybiB0aGlzLnRvdXJVcmw7XG4gIH1cblxuICBnZXRNYXR0ZXJwb3J0U2VydmljZSgpIHtcbiAgICByZXR1cm4gdGhpcy5tYXR0ZXJwb3J0U2VydmljZTtcbiAgfVxuXG4gIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICBHZW5lcmljIE1haW4gYWN0aW9uIGZ1bmN0aW9uc1xuICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbiAgc2V0U3dlZXBUb01vdmUoc3dlZXA6IHN0cmluZykge1xuICAgIHRoaXMuc3dlZXBUb01vdmUgPSBzd2VlcDtcbiAgfVxuXG4gIHNldFJvdGF0aW9uVG9Nb3ZlKHJvdGF0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB9KSB7XG4gICAgdGhpcy5yb3RhdGlvblRvTW92ZSA9IHJvdGF0aW9uO1xuICB9XG5cblxuICBhc3luYyBhY3Rpb25fbW92ZV90b190YWcoZWxlbWVudElkOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAvLyBNYXR0ZXJwb3J0XG4gICAgaWYgKHRoaXMuY2hlY2tNb2RlKCdNYXR0ZXJwb3J0JykpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMubWF0dGVycG9ydFNlcnZpY2UuZ2V0VGFnRnJvbUVsZW1lbnRJZChlbGVtZW50SWQpO1xuICAgICAgaWYgKHJlc3VsdC50YWcpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5nb1RvVGFnKHJlc3VsdC50YWcpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZXN1bHQuc3dlZXApIHtcbiAgICAgICAgdGhpcy5zd2VlcFRvTW92ZSA9IHJlc3VsdC5zd2VlcDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy8gV2l0aG91dCB0aGlzIHRoZSBjYWxsZXIgZmFsbHMgdGhyb3VnaCB0byBnZXRNb2RlbDNkQW5kU3dlZXAsIHdoaWNoIHJlc29sdmVzIGEgdmlzaXQgZnJvbSB0aGVcbiAgICAvLyBQT0kncyBzd2VlcCAtIGEgVGhyZWUuanMgUE9JIGhhcyBub25lLCBzbyBpdCBmYWlscyBhbmQgcmVwb3J0cyB0aGUgbW9kZWwgYXMgdW5yZWFjaGFibGUgZXZlblxuICAgIC8vIHRob3VnaCB0aGUgdGFnIGlzIG9uIHNjcmVlbi5cbiAgICBpZiAodGhpcy5jaGVja01vZGUoJ3RocmVlanMnKSAmJiB0aGlzLnRocmVlSnNTZXJ2aWNlLmhhc1RhZyhlbGVtZW50SWQpKSB7XG4gICAgICB0aGlzLnRocmVlSnNTZXJ2aWNlLmdvVG9UYWcoZWxlbWVudElkKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBNYXR0ZXJ0YWdzIHRvIFZpZXdlclxuICAgKiBAcGFyYW0gb2JqZWN0cyBMaXN0IG9mIG9iamVjdHMgKHRpY2tldHMsIGVxdWlwbWVudHMpIGV0YyB0byBiZSBhZGRlZCBhcyBNYXR0ZXJ0YWdzXG4gICAqL1xuICBhc3luYyBhZGRPYmplY3RUYWdzVG9WaWV3ZXIob2JqZWN0czogRGJPYmplY3RUeXBlW10pIHtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIG9iamVjdHMubWFwKGFzeW5jIChvYmplY3QpID0+IHtcbiAgICAgICAgY29uc3QgcG9pID0gYXdhaXQgdGhpcy5wb2lTZXJ2aWNlLmdldFBvaUJ5RWxlbWVudElkKG9iamVjdC5pZCEpO1xuICAgICAgICBpZiAocG9pICYmIHBvaS5jb29yZGluYXRlKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5hY3Rpb25BZGRPYmplY3RGcm9tUE9JKG9iamVjdCwgcG9pKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICAgIC8vIE5ld2x5IGNyZWF0ZWQgdGFncyBoYXZlIG5vIG9wYWNpdHkvYWxsb3dBY3Rpb24gYXBwbGllZCB5ZXQgKG9ubHkgc2V0IGJ5XG4gICAgLy8gdXBkYXRlVGFnc1Zpc2liaWxpdHlGb3JDb250ZXh0LCB3aGljaCBydW5zIG9uIE1vZGUvU3dlZXAvRmxvb3IvUm9vbS9DYW1lcmFcbiAgICAvLyBldmVudHMpLiBJZiB0aGlzIGJhdGNoIGxvYWRlZCBhZnRlciB0aG9zZSBmaXJlZCwgdGhlIHRhZ3Mgc3RheSBpbiB3aGF0ZXZlclxuICAgIC8vIGRlZmF1bHQgc3RhdGUgdGhlIFNESyBnYXZlIHRoZW0gdW50aWwgc29tZXRoaW5nIGVsc2UgbnVkZ2VzIGEgcmVmcmVzaC5cbiAgICBpZiAodGhpcy5jaGVja01vZGUoJ01hdHRlcnBvcnQnKSkge1xuICAgICAgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5yZWZyZXNoVGFnc1Zpc2liaWxpdHkoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBhY3Rpb25BZGRPYmplY3RGcm9tUE9JKG9iamVjdDogRGJPYmplY3RUeXBlLCBwb2k6IFBPSSkge1xuICAgIGlmICh0aGlzLmNoZWNrTW9kZSgnTWF0dGVycG9ydCcpKSB7XG4gICAgICByZXR1cm4gdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5jcmVhdGVNYXR0ZXJ0YWdGcm9tUE9JKFxuICAgICAgICBwb2kudHlwZSEsXG4gICAgICAgIG9iamVjdCxcbiAgICAgICAgcG9pXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodGhpcy5jaGVja01vZGUoJ3RocmVlanMnKSkge1xuICAgICAgcmV0dXJuIHRoaXMuYWRkVGhyZWVKc1RhZ0Zyb21QT0kob2JqZWN0LCBwb2kpO1xuICAgIH1cbiAgICAvLyBDdXBpeFxuICAgIC8vIFRPRE9cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cblxuICAvKipcbiAgICogRHJhd3MgYSBQT0kgYXMgYSB0YWcgaW4gdGhlIFRocmVlLmpzIHNjZW5lLlxuICAgKlxuICAgKiBCb3RoIHZpZXdlcnMgYXJlIGZlZCBieSB0aGUgc2FtZSBzdWJzY3JpcHRpb25zIG9uIHRoZSBzYW1lIFBPSSByZWNvcmRzLCBzbyBhIHRhZyBjcmVhdGVkIGluXG4gICAqIGVpdGhlciBvbmUgc2hvd3MgdXAgaW4gdGhlIG90aGVyIHdpdGhvdXQgYW55IHN5bmNpbmcgb2YgaXRzIG93biAtIHRoaXMgaXMganVzdCB0aGUgVGhyZWUuanMgZW5kXG4gICAqIG9mIHRoZSBwaXBlbGluZSB0aGF0IGFscmVhZHkgZHJpdmVzIE1hdHRlcnBvcnQuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGFkZFRocmVlSnNUYWdGcm9tUE9JKG9iamVjdDogRGJPYmplY3RUeXBlLCBwb2k6IFBPSSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghcG9pLmNvb3JkaW5hdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IHBvc2l0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB6OiBudW1iZXIgfTtcbiAgICB0cnkge1xuICAgICAgcG9zaXRpb24gPSBKU09OLnBhcnNlKHBvaS5jb29yZGluYXRlKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIGNvbnNvbGUud2FybihgVmlld2VyU2VydmljZTogdW5wYXJzZWFibGUgUE9JIGNvb3JkaW5hdGUgZm9yIGVsZW1lbnQgJHtvYmplY3QuaWR9OmAsIHBvaS5jb29yZGluYXRlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFbcG9zaXRpb24/LngsIHBvc2l0aW9uPy55LCBwb3NpdGlvbj8uel0uZXZlcnkoKHZhbHVlKSA9PiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudGhyZWVKc1NlcnZpY2UudXBzZXJ0VGFnKHtcbiAgICAgIGlkOiBvYmplY3QuaWQsXG4gICAgICBwb3NpdGlvbixcbiAgICAgIHBvaVR5cGU6IHBvaS50eXBlLFxuICAgICAgbGFiZWw6IG9iamVjdC5uYW1lID8/IG9iamVjdC50aXRsZSA/PyBudWxsLFxuICAgICAgaWNvblVybDogYXdhaXQgdGhpcy5yZXNvbHZlVGFnSWNvblVybChwb2kpLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBpbWFnZSB0byBkcmF3IGEgdGFnIHdpdGgsIG1pcnJvcmluZyB3aGF0IE1hdHRlcnBvcnQgc2hvd3MgZm9yIHRoZSBzYW1lIFBPSS5cbiAgICpcbiAgICogTWF0dGVycG9ydCByZWdpc3RlcnMgb25lIHRleHR1cmUgcGVyIHR5cGUgKGBpY29uLXRpY2tldGAsIGBpY29uLWVxdWlwbWVudGAuLi4pIGZyb20gdGhlIHNhbWVcbiAgICogY29uZmlnIGVudHJpZXMgdXNlZCBoZXJlLCBhbmQgb3ZlcnJpZGVzIGl0IHdpdGggdGhlIFBPSSdzIG93biBpY29uIHdoZW4gaXQgaGFzIG9uZS4gUmVhZGluZyB0aGVcbiAgICogc2FtZSB0d28gc291cmNlcyBpcyB3aGF0IGtlZXBzIGEgdGFnIGxvb2tpbmcgbGlrZSBpdHNlbGYgYWNyb3NzIHRoZSB0d28gdmlld2Vycy5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcmVzb2x2ZVRhZ0ljb25VcmwocG9pOiBQT0kpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcbiAgICBpZiAocG9pLnRhZ0ljb24pIHtcbiAgICAgIC8vIFN0b3JlZCBhcyBKU09OICh7IHNyYywgb3BhY2l0eSB9KSBieSB0aGUgTWF0dGVycG9ydCBwYXRoLCBidXQgb2xkZXIgcmVjb3JkcyBhcmUgYSBiYXJlIGtleS5cbiAgICAgIGxldCBzb3VyY2U6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShwb2kudGFnSWNvbik7XG4gICAgICAgIHNvdXJjZSA9IHR5cGVvZiBwYXJzZWQgPT09ICdzdHJpbmcnID8gcGFyc2VkIDogcGFyc2VkPy5zcmMgPz8gbnVsbDtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBzb3VyY2UgPSBwb2kudGFnSWNvbjtcbiAgICAgIH1cbiAgICAgIGlmIChzb3VyY2UpIHtcbiAgICAgICAgY29uc3Qgc2lnbmVkID0gYXdhaXQgZ2V0U2lnbmVkRmlsZShzb3VyY2UpO1xuICAgICAgICBpZiAoc2lnbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIHNpZ25lZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0VGFnSWNvblVybChwb2kudHlwZSk7XG4gIH1cblxuICAvKiogVGhlIGNvbmZpZ3VyZWQgaWNvbiBmb3IgYSBQT0kgdHlwZSwgb3IgbnVsbCB3aGVuIHRoYXQgdHlwZSBoYXMgbm9uZS4gKi9cbiAgcHJpdmF0ZSBkZWZhdWx0VGFnSWNvblVybChwb2lUeXBlOiBQb2lUeXBlIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IGljb25zID0gdGhpcy5jb25maWc/Lm15X2NvbmZpZztcbiAgICBpZiAoIWljb25zKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgc3dpdGNoIChwb2lUeXBlKSB7XG4gICAgICBjYXNlIFBvaVR5cGUuVElDS0VUOlxuICAgICAgICByZXR1cm4gaWNvbnMuaWNvbl90aWNrZXQgPz8gbnVsbDtcbiAgICAgIGNhc2UgUG9pVHlwZS5FUVVJUE1FTlQ6XG4gICAgICAgIHJldHVybiBpY29ucy5pY29uX2VxdWlwbWVudCA/PyBudWxsO1xuICAgICAgY2FzZSBQb2lUeXBlLk1FQVNVUkU6XG4gICAgICAgIHJldHVybiBpY29ucy5pY29uX21lYXN1cmUgPz8gbnVsbDtcbiAgICAgIGNhc2UgUG9pVHlwZS5PQkpFQ1QzRDpcbiAgICAgICAgcmV0dXJuIGljb25zLmljb25fb2JqZWN0M2QgPz8gbnVsbDtcbiAgICAgIGNhc2UgUG9pVHlwZS5EQVRBOlxuICAgICAgY2FzZSBQb2lUeXBlLkRFU0s6XG4gICAgICAgIHJldHVybiBpY29ucy5pY29uX2RhdGEgPz8gbnVsbDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBNb3ZlcyB0aGUgVGhyZWUuanMgY2FtZXJhIHRvIGZyYW1lIGEgdGFnLCBtaXJyb3JpbmcgTWF0dGVycG9ydCdzIGdvVG9UYWcuICovXG4gIGdvVG9UaHJlZUpzVGFnKGVsZW1lbnRJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2hlY2tNb2RlKCd0aHJlZWpzJykpIHtcbiAgICAgIHRoaXMudGhyZWVKc1NlcnZpY2UuZ29Ub1RhZyhlbGVtZW50SWQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBTaG93cyBvbmx5IHRhZ3Mgb2YgdGhlIGdpdmVuIFBPSSB0eXBlczsgbnVsbCBjbGVhcnMgdGhlIGZpbHRlci4gKi9cbiAgc2V0VmlzaWJsZVRocmVlSnNUYWdUeXBlcyh0eXBlczogUG9pVHlwZVtdIHwgbnVsbCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNoZWNrTW9kZSgndGhyZWVqcycpKSB7XG4gICAgICB0aGlzLnRocmVlSnNTZXJ2aWNlLnNldFZpc2libGVUYWdUeXBlcyh0eXBlcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFsaWdubWVudCB3YWxrdGhyb3VnaDogcGljayBhIHRhZywgdGhlbiBjbGljayB3aGVyZSBpdCByZWFsbHkgc2l0cywgdGhyZWUgdGltZXMgb3Zlci5cbiAgICpcbiAgICogVXNlcyB0YWdzIHRoYXQgYWxyZWFkeSBleGlzdCwgc28gbm90aGluZyBpcyBjcmVhdGVkIGFuZCBub3RoaW5nIGlzIHdyaXR0ZW4gdW50aWwgdGhlIGNhbGxlclxuICAgKiBzYXZlcyB0aGUgcmVzdWx0LiBTZWUgdGhyZWVKc0FsaWdubWVudFByb2dyZXNzJCBmb3Igd2hhdCB0aGUgVUkgc2hvdWxkIGJlIGFza2luZyBmb3IuXG4gICAqL1xuICBzdGFydFRocmVlSnNUYWdBbGlnbm1lbnQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2hlY2tNb2RlKCd0aHJlZWpzJykpIHtcbiAgICAgIHRoaXMudGhyZWVKc1NlcnZpY2Uuc3RhcnRUYWdBbGlnbm1lbnQoKTtcbiAgICB9XG4gIH1cblxuICBjYW5jZWxUaHJlZUpzVGFnQWxpZ25tZW50KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNoZWNrTW9kZSgndGhyZWVqcycpKSB7XG4gICAgICB0aGlzLnRocmVlSnNTZXJ2aWNlLmNhbmNlbFRhZ0FsaWdubWVudCgpO1xuICAgIH1cbiAgfVxuXG4gIGdldCB0aHJlZUpzQWxpZ25tZW50UHJvZ3Jlc3MkKCkge1xuICAgIHJldHVybiB0aGlzLnRocmVlSnNTZXJ2aWNlLmFsaWdubWVudFByb2dyZXNzJDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTb2x2ZXMgdGhlIGFsaWdubWVudCBhbmQgYXBwbGllcyBpdCB0byB0aGUgc2NlbmUsIHJldHVybmluZyBpdCBhcyB0aGUgSlNPTiB0byBzdG9yZSBpbiB0aGVcbiAgICogY2FwdHVyZSdzIG1ldGFkYXRhLiBOdWxsIG1lYW5zIHRoZSB0aHJlZSB0YWdzIHdlcmUgY29sbGluZWFyIGFuZCBub3RoaW5nIHdhcyBhcHBsaWVkLlxuICAgKi9cbiAgc29sdmVUaHJlZUpzVGFnQWxpZ25tZW50KGV4aXN0aW5nTWV0YWRhdGE/OiBzdHJpbmcpOiB7IGFsaWdubWVudDogYW55OyBtZXRhZGF0YTogc3RyaW5nIH0gfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuY2hlY2tNb2RlKCd0aHJlZWpzJykpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBhbGlnbm1lbnQgPSB0aGlzLnRocmVlSnNTZXJ2aWNlLnNvbHZlQWxpZ25tZW50RnJvbVBhaXJzKCk7XG4gICAgaWYgKCFhbGlnbm1lbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICAvLyBNZXJnZWQgaW50byB3aGF0ZXZlciB0aGUgY2FwdHVyZSBhbHJlYWR5IHN0b3Jlcywgc28gYW4gZXhpc3RpbmcgY2FtZXJhIHBsYWNlbWVudCBzdXJ2aXZlcy5cbiAgICBsZXQgc3RvcmVkOiBhbnkgPSB7fTtcbiAgICB0cnkge1xuICAgICAgc3RvcmVkID0gZXhpc3RpbmdNZXRhZGF0YSA/IEpTT04ucGFyc2UoZXhpc3RpbmdNZXRhZGF0YSkgOiB7fTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHN0b3JlZCA9IHt9O1xuICAgIH1cbiAgICBzdG9yZWQuYWxpZ25tZW50ID0gYWxpZ25tZW50O1xuICAgIHJldHVybiB7IGFsaWdubWVudCwgbWV0YWRhdGE6IEpTT04uc3RyaW5naWZ5KHN0b3JlZCkgfTtcbiAgfVxuXG4gIC8qKiBTaG93cyBvciBoaWRlcyBhIHNpbmdsZSBUaHJlZS5qcyB0YWcuICovXG4gIHNldFRocmVlSnNUYWdWaXNpYmlsaXR5KGVsZW1lbnRJZDogc3RyaW5nLCB2aXNpYmxlOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2hlY2tNb2RlKCd0aHJlZWpzJykpIHtcbiAgICAgIHRoaXMudGhyZWVKc1NlcnZpY2Uuc2V0VGFnVmlzaWJpbGl0eShlbGVtZW50SWQsIHZpc2libGUpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGFjdGlvbl9kZWxldGVfZWxlbWVudChlbGVtZW50OiBEYk9iamVjdFR5cGUpIHtcbiAgICAvLyBNYXR0ZXJwb3J0XG4gICAgaWYgKHRoaXMuY2hlY2tNb2RlKCdNYXR0ZXJwb3J0JykpIHtcbiAgICAgIGF3YWl0IHRoaXMubWF0dGVycG9ydFNlcnZpY2UuZGVsZXRlTWF0dGVydGFnRm9yT2JqZWN0KGVsZW1lbnQuaWQpO1xuICAgIH1cbiAgICBpZiAodGhpcy5jaGVja01vZGUoJ3RocmVlanMnKSkge1xuICAgICAgdGhpcy50aHJlZUpzU2VydmljZS5yZW1vdmVUYWcoZWxlbWVudC5pZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEVtaXRzIHdoZW4gYSBUaHJlZS5qcyBtb2RlbCBsb2FkIGFjdHVhbGx5IHN0b3BwZWQgc2hvcnQsIHJhdGhlciB0aGFuIG1lcmVseSBiZWluZyBhc2tlZCB0by4gKi9cbiAgZ2V0IHRocmVlSnNNb2RlbExvYWRDYW5jZWxsZWQkKCkge1xuICAgIHJldHVybiB0aGlzLnRocmVlSnNTZXJ2aWNlLm1vZGVsTG9hZENhbmNlbGxlZCQ7XG4gIH1cblxuICAvKiogU3RvcHMgdGhlIFRocmVlLmpzIG1vZGVsIGRvd25sb2FkIGluIHByb2dyZXNzLiAqL1xuICBjYW5jZWxUaHJlZUpzTW9kZWxMb2FkKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNoZWNrTW9kZSgndGhyZWVqcycpKSB7XG4gICAgICB0aGlzLnRocmVlSnNTZXJ2aWNlLmNhbmNlbE1vZGVsTG9hZCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBFbWl0cyBhIHRhZydzIGxhYmVsIHdoaWxlIHRoZSBwb2ludGVyIGlzIG92ZXIgaXQgaW4gdGhlIFRocmVlLmpzIHNjZW5lLiAqL1xuICBnZXQgdGhyZWVKc1RhZ0hvdmVyZWQkKCkge1xuICAgIHJldHVybiB0aGlzLnRocmVlSnNTZXJ2aWNlLnRhZ0hvdmVyZWQkO1xuICB9XG5cbiAgLyoqIEVtaXRzIHRoZSBlbGVtZW50IGlkIG9mIGEgdGFnIGNsaWNrZWQgaW4gdGhlIFRocmVlLmpzIHNjZW5lLiAqL1xuICBnZXQgdGhyZWVKc1RhZ0NsaWNrZWQkKCkge1xuICAgIHJldHVybiB0aGlzLnRocmVlSnNTZXJ2aWNlLnRhZ0NsaWNrZWQkO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgdGhlIHZpc2l0J3Mgc3RvcmVkIHRhZyBhbGlnbm1lbnQsIG1hcHBpbmcgY2FwdHVyZWQgdGFnIGNvb3JkaW5hdGVzIG9udG8gdGhpcyBtb2RlbC5cbiAgICpcbiAgICogU2FmZSB0byBjYWxsIGJlZm9yZSB0aGUgbW9kZWwgb3IgYW55IHRhZyBleGlzdHM6IGl0IGlzIGEgdHJhbnNmb3JtIG9uIHRoZSBncm91cCBib3RoIGVuZCB1cFxuICAgKiB1bmRlciwgc28gaXQgYXBwbGllcyB0byB3aGF0ZXZlciBhcnJpdmVzIGxhdGVyLlxuICAgKi9cbiAgc2V0VGhyZWVKc1RhZ0FsaWdubWVudEZyb21NZXRhZGF0YShtZXRhZGF0YTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNoZWNrTW9kZSgndGhyZWVqcycpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudGhyZWVKc1NlcnZpY2Uuc2V0VGFnQWxpZ25tZW50KHBhcnNlVGhyZWVKc1BsYWNlbWVudChtZXRhZGF0YSk/LmFsaWdubWVudCA/PyBudWxsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGUgdGFnIHBsYWNlbWVudCBtZW51IHRvIGFkZCBhIG5ldyBlbGVtZW50IGRlcGVuZGluZyBvbiBpdHMgdHlwZSAoVElDS0VULCBEQVRBLCBFUVVJUE1FTlQgZXRjKVxuICAgKi9cbiAgYXN5bmMgYWN0aW9uQWRkTmV3RWxlbWVudFRvVmlld2VyKHBvaVR5cGU6IFBvaVR5cGUpIHtcbiAgICB0aGlzLmFjdGlvbl90b29sYm94X2luc2lkZV92aWV3KCk7XG5cbiAgICAvLyBNYXR0ZXJwb3J0XG4gICAgaWYgKFxuICAgICAgdGhpcy5jaGVja01vZGUoJ01hdHRlcnBvcnQnKSAmJlxuICAgICAgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5nZXRJbnRlcmFjdGlvbk1vZGUoKSA9PT0gVmlld2VySW50ZXJhY3Rpb25zLkRFRkFVTFRcbiAgICApIHtcbiAgICAgIGF3YWl0IHRoaXMubWF0dGVycG9ydFNlcnZpY2UuYWRkTWF0dGVydGFnV2hlbkFkZGluZyhwb2lUeXBlKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY2hlY2tNb2RlKCd0aHJlZWpzJykpIHtcbiAgICAgIHRoaXMudGhyZWVKc1NlcnZpY2Uuc3RhcnRUYWdQbGFjZW1lbnQocG9pVHlwZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExhdW5jaGVzIHRoZSByZXBvc2l0aW9uaW5nIG9mIGFuIGV4aXN0aW5nIE1hdHRlcnRhZyByZWxhdGVkIHRvIHBhcmFtZXRlciBvYmplY3RcbiAgICogQHBhcmFtIGVsZW1lbnQgb2JqZWN0IChUSUNLRVQsIEVRVUlQTUVOVCwgRkVBVFVSRSwgZXRjKVxuICAgKiBAcGFyYW0gcG9pVHlwZSB0eXBlIG9mIG9iamVjdFxuICAgKi9cbiAgYXN5bmMgYWN0aW9uUmVwb3NpdGlvbkVsZW1lbnRJblZpZXdlcihcbiAgICBlbGVtZW50OiBEYk9iamVjdFR5cGUsXG4gICAgcG9pVHlwZTogUG9pVHlwZVxuICApIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmNoZWNrTW9kZSgnTWF0dGVycG9ydCcpICYmXG4gICAgICB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmdldEludGVyYWN0aW9uTW9kZSgpID09PSBWaWV3ZXJJbnRlcmFjdGlvbnMuREVGQVVMVFxuICAgICkge1xuICAgICAgYXdhaXQgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5hZGRNYXR0ZXJ0YWdXaGVuUmVwb3NpdGlvbmluZyhwb2lUeXBlLCBlbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlIHRpY2tldCBwbGFjZW1lbnQgbWVudSB0byBhZGQgYSBuZXcgdGlja2V0XG4gICAqL1xuICBhY3Rpb25fY2FuY2VsZWQoKSB7XG4gICAgLy8gTWF0dGVycG9ydFxuICAgIGlmICh0aGlzLmNoZWNrTW9kZSgnTWF0dGVycG9ydCcpKSB7XG4gICAgICB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmNhbmNlbEZvbGxvd2luZ0N1cnNvcigpO1xuICAgIH1cbiAgICBpZiAodGhpcy5jaGVja01vZGUoJ3RocmVlanMnKSkge1xuICAgICAgdGhpcy50aHJlZUpzU2VydmljZS5jYW5jZWxUYWdQbGFjZW1lbnQoKTtcbiAgICB9XG4gIH1cblxuICBhY3Rpb25fdG9vbGJveF9pbnNpZGVfdmlldygpIHtcbiAgICAvLyBNYXR0ZXJwb3J0XG4gICAgaWYgKHRoaXMuY2hlY2tNb2RlKCdNYXR0ZXJwb3J0JykpIHtcbiAgICAgIHRoaXMubWF0dGVycG9ydFNlcnZpY2UuYWN0aW9uX3Rvb2xib3hfaW5zaWRlX3ZpZXcoKTtcbiAgICB9XG4gIH1cblxuICBhY3Rpb25TaG93QWxsRmxvb3JzKCkge1xuICAgIC8vIE1hdHRlcnBvcnRcbiAgICBpZiAodGhpcy5jaGVja01vZGUoJ01hdHRlcnBvcnQnKSkge1xuICAgICAgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5hY3Rpb25TaG93QWxsRmxvb3JzKCk7XG4gICAgfVxuICB9XG5cbiAgYWN0aW9uX3Rvb2xib3hfZG9sbGhvdXNlKCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMubWF0dGVycG9ydFNlcnZpY2UuZ2V0SW50ZXJhY3Rpb25Nb2RlKCkgIT09IFZpZXdlckludGVyYWN0aW9ucy5ERUZBVUxUXG4gICAgKSB7XG4gICAgICB0aGlzLmFjdGlvbl9jYW5jZWxlZCgpO1xuICAgIH1cblxuICAgIHRoaXMuYWN0aW9uX3Rvb2xib3hfY2FuY2VsX21lc3VyZSgpO1xuICAgIC8vIE1hdHRlcnBvcnRcbiAgICBpZiAodGhpcy5jaGVja01vZGUoJ01hdHRlcnBvcnQnKSkge1xuICAgICAgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5hY3Rpb25fdG9vbGJveF9kb2xsaG91c2UoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBhY3Rpb25fZmxvb3JwbGFuKCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMubWF0dGVycG9ydFNlcnZpY2UuZ2V0SW50ZXJhY3Rpb25Nb2RlKCkgIT09IFZpZXdlckludGVyYWN0aW9ucy5ERUZBVUxUXG4gICAgKSB7XG4gICAgICB0aGlzLmFjdGlvbl9jYW5jZWxlZCgpO1xuICAgIH1cbiAgICAvLyBNYXR0ZXJwb3J0XG4gICAgaWYgKHRoaXMuY2hlY2tNb2RlKCdNYXR0ZXJwb3J0JykpIHtcbiAgICAgIGF3YWl0IHRoaXMubWF0dGVycG9ydFNlcnZpY2UuYWN0aW9uX3Rvb2xib3hfZmxvb3JwbGFuKCk7XG4gICAgfVxuICB9XG5cbiAgYWN0aW9uX3Rvb2xib3hfbWVzdXJlKCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMubWF0dGVycG9ydFNlcnZpY2UuZ2V0SW50ZXJhY3Rpb25Nb2RlKCkgIT09IFZpZXdlckludGVyYWN0aW9ucy5ERUZBVUxUXG4gICAgKSB7XG4gICAgICB0aGlzLmFjdGlvbl9jYW5jZWxlZCgpO1xuICAgIH1cblxuICAgIHRoaXMuYWN0aW9uX3Rvb2xib3hfaW5zaWRlX3ZpZXcoKTtcbiAgICAvLyBNYXR0ZXJwb3J0XG4gICAgaWYgKHRoaXMuY2hlY2tNb2RlKCdNYXR0ZXJwb3J0JykpIHtcbiAgICAgIHRoaXMubWF0dGVycG9ydFNlcnZpY2UuYWN0aW9uX3Rvb2xib3hfbWVzdXJlKCk7XG4gICAgfVxuICB9XG5cbiAgYWN0aW9uX3Rvb2xib3hfY2FuY2VsX21lc3VyZSgpIHtcbiAgICAvLyBNYXR0ZXJwb3J0XG4gICAgaWYgKHRoaXMuY2hlY2tNb2RlKCdNYXR0ZXJwb3J0JykpIHtcbiAgICAgIHRoaXMubWF0dGVycG9ydFNlcnZpY2UuYWN0aW9uX3Rvb2xib3hfY2FuY2VsX21lc3VyZSgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGFjdGlvbl91cGRhdGVfcG9pKFxuICAgIHBvaTogUE9JLFxuICAgIGlzVmFsaWQ6IGJvb2xlYW4sXG4gICAgZWxlbWVudDogRGJPYmplY3RUeXBlXG4gICk6IFByb21pc2U8UE9JPiB7XG4gICAgaWYgKHRoaXMuY2hlY2tNb2RlKCdNYXR0ZXJwb3J0JykpIHtcbiAgICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAgIGNvbnN0IGxhc3RUYWcgPSB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLm1hdHRlcnRhZ1RvRm9sbG93XG4gICAgICAgICAgPyB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLm1hdHRlcnRhZ1RvRm9sbG93XG4gICAgICAgICAgOiB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmdldExhc3RUYWcoKTtcbiAgICAgICAgaWYgKCFsYXN0VGFnKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwb2kpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRhZ0RhdGEgPSB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmdldE1hdHRlclRhZ0RhdGFGb3JNYXR0ZXJ0YWcobGFzdFRhZyk7XG4gICAgICAgIGlmICghdGFnRGF0YSkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocG9pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBvaU1ldGFkYXRhID0gKCEhcG9pICYmIHBvaS5tZXRhZGF0YSkgPyBKU09OLnBhcnNlKHBvaS5tZXRhZGF0YSkgOiB7fTtcbiAgICAgICAgcG9pTWV0YWRhdGEubm9ybWFsID0gdGFnRGF0YS5nZXROb3JtYWwoKTtcbiAgICAgICAgaWYgKCFwb2kpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwb2lJbnB1dCA9IHtcbiAgICAgICAgICBpZDogcG9pLmlkLFxuICAgICAgICAgIGNvb3JkaW5hdGU6IHRhZ0RhdGEuZ2V0Q29vcmRpbmF0ZVN0cmluZygpLFxuICAgICAgICAgIG1hdHRlcnBvcnRTd2VlcElEOiB0YWdEYXRhLmdldFN3ZWVwSUQoKSxcbiAgICAgICAgICBtZXRhZGF0YTogSlNPTi5zdHJpbmdpZnkocG9pTWV0YWRhdGEpLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB1cGRhdGVkUG9pOiBQT0kgPSBhd2FpdCB0aGlzLnBvaVNlcnZpY2UudXBkYXRlUG9pKHBvaUlucHV0KTtcbiAgICAgICAgdGFnRGF0YS5zZXRQb2kodXBkYXRlZFBvaSk7XG4gICAgICAgIGF3YWl0IHRoaXMubWF0dGVycG9ydFNlcnZpY2Uuc2V0T2JqZWN0QW5kUG9pSW5UYWcobGFzdFRhZywgZWxlbWVudCwgUG9pVHlwZS5ERVNLLCB1cGRhdGVkUG9pKTtcbiAgICAgICAgYXdhaXQgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5pbmplY3RIdG1sSW5UYWcoXG4gICAgICAgICAgcG9pLnR5cGUhLFxuICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgbGFzdFRhZ1xuICAgICAgICApO1xuICAgICAgICBhd2FpdCB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLnNldFRhZ0ljb25BbmRPcGFjaXR5KGxhc3RUYWcsIHRhZ0RhdGEpO1xuICAgICAgICB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmdvVG9UYWcobGFzdFRhZyk7XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1cGRhdGVkUG9pKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubWF0dGVycG9ydFNlcnZpY2UuZGVsZXRlTGFzdE1hdHRlcnRhZygpO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwb2kpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNoZWNrTW9kZSgndGhyZWVqcycpKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb21taXRUaHJlZUpzVGFnUGxhY2VtZW50KHBvaSwgaXNWYWxpZCwgZWxlbWVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwb2kpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdyaXRlcyB0aGUgc3BvdCBwaWNrZWQgaW4gdGhlIFRocmVlLmpzIHNjZW5lIGludG8gdGhlIFBPSSwgbWlycm9yaW5nIHRoZSBNYXR0ZXJwb3J0IGJyYW5jaC5cbiAgICpcbiAgICogVGhlIGNvb3JkaW5hdGUgZ29lcyBpbiB0aGUgc2FtZSBmaWVsZCBhbmQgdGhlIHNhbWUgc3BhY2UgTWF0dGVycG9ydCB3cml0ZXMsIHdoaWNoIGlzIHdoYXQgbWFrZXNcbiAgICogYSB0YWcgY3JlYXRlZCBoZXJlIHNob3cgdXAgaW4gdGhlIHJpZ2h0IHBsYWNlIHRoZXJlIC0gYW5kIHRoZSBvdGhlciB3YXkgcm91bmQuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGNvbW1pdFRocmVlSnNUYWdQbGFjZW1lbnQoXG4gICAgcG9pOiBQT0ksXG4gICAgaXNWYWxpZDogYm9vbGVhbixcbiAgICBlbGVtZW50OiBEYk9iamVjdFR5cGVcbiAgKTogUHJvbWlzZTxQT0k+IHtcbiAgICBjb25zdCBwbGFjZW1lbnQgPSB0aGlzLnRocmVlSnNTZXJ2aWNlLmdldFBlbmRpbmdUYWdQbGFjZW1lbnQoKTtcbiAgICBpZiAoIWlzVmFsaWQgfHwgIXBsYWNlbWVudCB8fCAhcG9pKSB7XG4gICAgICB0aGlzLnRocmVlSnNTZXJ2aWNlLmNhbmNlbFRhZ1BsYWNlbWVudCgpO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwb2kpO1xuICAgIH1cblxuICAgIGNvbnN0IHBvaU1ldGFkYXRhID0gcG9pLm1ldGFkYXRhID8gSlNPTi5wYXJzZShwb2kubWV0YWRhdGEpIDoge307XG4gICAgcG9pTWV0YWRhdGEubm9ybWFsID0gcGxhY2VtZW50Lm5vcm1hbDtcblxuICAgIGNvbnN0IHVwZGF0ZWRQb2kgPSBhd2FpdCB0aGlzLnBvaVNlcnZpY2UudXBkYXRlUG9pKHtcbiAgICAgIGlkOiBwb2kuaWQsXG4gICAgICBjb29yZGluYXRlOiBKU09OLnN0cmluZ2lmeShwbGFjZW1lbnQucG9zaXRpb24pLFxuICAgICAgbWV0YWRhdGE6IEpTT04uc3RyaW5naWZ5KHBvaU1ldGFkYXRhKSxcbiAgICAgIC8vIG1hdHRlcnBvcnRTd2VlcElEIGlzIGxlZnQgYXMgaXQgd2FzOiB0aGlzIHZpZXdlciBoYXMgbm8gc3dlZXBzLCBhbmQgTWF0dGVycG9ydCBmaWx0ZXJzIHRhZ1xuICAgICAgLy8gdmlzaWJpbGl0eSBieSB0aGVtLCBzbyBjbGVhcmluZyBpdCB3b3VsZCBoaWRlIHRoZSB0YWcgb3ZlciB0aGVyZS5cbiAgICB9KTtcblxuICAgIHRoaXMudGhyZWVKc1NlcnZpY2UudXBzZXJ0VGFnKHtcbiAgICAgIGlkOiBlbGVtZW50LmlkLFxuICAgICAgcG9zaXRpb246IHBsYWNlbWVudC5wb3NpdGlvbixcbiAgICAgIHBvaVR5cGU6IHVwZGF0ZWRQb2k/LnR5cGUgPz8gcG9pLnR5cGUsXG4gICAgICBpY29uVXJsOiB1cGRhdGVkUG9pPy50YWdJY29uID8gYXdhaXQgZ2V0U2lnbmVkRmlsZSh1cGRhdGVkUG9pLnRhZ0ljb24pIDogbnVsbCxcbiAgICB9KTtcbiAgICB0aGlzLnRocmVlSnNTZXJ2aWNlLmNhbmNlbFRhZ1BsYWNlbWVudCgpO1xuXG4gICAgcmV0dXJuIHVwZGF0ZWRQb2k7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgUE9JIGZvciBhbiBlbGVtZW50IGp1c3QgcGxhY2VkIGluIHRoZSBUaHJlZS5qcyBzY2VuZS5cbiAgICpcbiAgICogVGhlIE1hdHRlcnBvcnQgcGF0aCByZWFjaGVzIHRoZSBzYW1lIHJlc3VsdCB0aHJvdWdoIGl0cyB0YWcgZGljdGlvbmFyeSAtIHRoZSB0YWcgZXhpc3RzIGZpcnN0XG4gICAqIGFuZCBjYXJyaWVzIHRoZSBjb29yZGluYXRlcy4gVGhyZWUuanMgaGFzIG5vIHN1Y2ggb2JqZWN0LCBzbyB0aGUgcGxhY2VtZW50IGNhcHR1cmVkIGF0IGNsaWNrXG4gICAqIHRpbWUgaXMgdGhlIG9ubHkgcmVjb3JkIG9mIHdoZXJlIHRoZSB1c2VyIHBvaW50ZWQsIGFuZCBpdCBoYXMgdG8gYmVjb21lIGEgUE9JIGhlcmUgb3IgaXQgaXNcbiAgICogbG9zdCB3aGVuIHRoZSBmb3JtIGNsb3Nlcy5cbiAgICpcbiAgICogUmV0dXJucyBudWxsIHdoZW4gdGhlcmUgaXMgbm8gcGVuZGluZyBwbGFjZW1lbnQsIHdoaWNoIGlzIHRoZSBub3JtYWwgY2FzZSBpbiBNYXR0ZXJwb3J0IG1vZGUuXG4gICAqL1xuICBhc3luYyBjcmVhdGVQb2lGb3JUaHJlZUpzUGxhY2VtZW50KGVsZW1lbnQ6IERiT2JqZWN0VHlwZSwgcG9pVHlwZTogUG9pVHlwZSk6IFByb21pc2U8UE9JIHwgbnVsbD4ge1xuICAgIGlmICghdGhpcy5jaGVja01vZGUoJ3RocmVlanMnKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHBsYWNlbWVudCA9IHRoaXMudGhyZWVKc1NlcnZpY2UuZ2V0UGVuZGluZ1RhZ1BsYWNlbWVudCgpO1xuICAgIGlmICghcGxhY2VtZW50IHx8ICFlbGVtZW50Py5pZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcG9pID0gYXdhaXQgdGhpcy5wb2lTZXJ2aWNlLmNyZWF0ZVBPSUZvclNwYWNlSUQoe1xuICAgICAgY29vcmRpbmF0ZTogSlNPTi5zdHJpbmdpZnkocGxhY2VtZW50LnBvc2l0aW9uKSxcbiAgICAgIHR5cGU6IHBvaVR5cGUsXG4gICAgICBlbGVtZW50SUQ6IGVsZW1lbnQuaWQsXG4gICAgICBtZXRhZGF0YTogSlNPTi5zdHJpbmdpZnkoeyBub3JtYWw6IHBsYWNlbWVudC5ub3JtYWwgfSksXG4gICAgfSBhcyBQT0kpO1xuXG4gICAgLy8gRHJhdyBpdCBzdHJhaWdodCBhd2F5IHJhdGhlciB0aGFuIHdhaXRpbmcgZm9yIHRoZSBuZXh0IHJlZnJlc2gsIHNvIHRoZSB1c2VyIHNlZXMgd2hlcmUgdGhlXG4gICAgLy8gdGhpbmcgdGhleSBqdXN0IGNyZWF0ZWQgZW5kZWQgdXAuIFRocm91Z2ggdGhlIHNhbWUgcGF0aCB0aGUgcmVmcmVzaCB1c2VzLCBzbyBpdCBhcnJpdmVzIHdpdGhcbiAgICAvLyB0aGUgdHlwZSdzIGljb24gaW5zdGVhZCBvZiB0aGUgYmFyZSBtYXJrZXIgLSB0aGUgZGlmZmVyZW5jZSB3YXMgdmlzaWJsZSB1bnRpbCB0aGUgbmV4dCByZWxvYWQuXG4gICAgYXdhaXQgdGhpcy5hZGRUaHJlZUpzVGFnRnJvbVBPSShlbGVtZW50LCBwb2kpO1xuICAgIHRoaXMudGhyZWVKc1NlcnZpY2UuY2FuY2VsVGFnUGxhY2VtZW50KCk7XG4gICAgcmV0dXJuIHBvaTtcbiAgfVxuXG4gIC8qKiBFbWl0cyB3aGVuIGEgdGFnIGlzIGRyb3BwZWQgb24gdGhlIG1vZGVsIGluIHRoZSBUaHJlZS5qcyBzY2VuZS4gKi9cbiAgZ2V0IHRocmVlSnNUYWdQbGFjZWQkKCkge1xuICAgIHJldHVybiB0aGlzLnRocmVlSnNTZXJ2aWNlLnRhZ1BsYWNlZCQ7XG4gIH1cblxuICAvKiogRW1pdHMgd2hlbiB0aGUgY2FsaWJyYXRpb24gd2Fsa3Rocm91Z2ggaXMgYWJhbmRvbmVkLCBpbmNsdWRpbmcgdmlhIEVzY2FwZS4gKi9cbiAgZ2V0IHRocmVlSnNBbGlnbm1lbnRDYW5jZWxsZWQkKCkge1xuICAgIHJldHVybiB0aGlzLnRocmVlSnNTZXJ2aWNlLmFsaWdubWVudENhbmNlbGxlZCQ7XG4gIH1cblxuICAvKiogTGVhdmVzIFRocmVlLmpzIHRhZyBwbGFjZW1lbnQgbW9kZSB3aXRob3V0IHBsYWNpbmcgYW55dGhpbmcuICovXG4gIGNhbmNlbFRocmVlSnNUYWdQbGFjZW1lbnQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2hlY2tNb2RlKCd0aHJlZWpzJykpIHtcbiAgICAgIHRoaXMudGhyZWVKc1NlcnZpY2UuY2FuY2VsVGFnUGxhY2VtZW50KCk7XG4gICAgfVxuICB9XG5cbiAgZWRpdE9ubHlUYWdTdHlsZUZvclBvaShwb2k6IFBPSSwgb2JqZWN0OiBEYk9iamVjdFR5cGUpIHtcbiAgICBpZiAodGhpcy5jaGVja01vZGUoJ01hdHRlcnBvcnQnKSkge1xuICAgICAgY29uc3QgdGFnRGF0YSA9IHRoaXMubWF0dGVycG9ydFNlcnZpY2UuZ2V0VGFnRnJvbUVsZW1lbnRJZChwb2kuZWxlbWVudElEKTtcbiAgICAgIGlmICh0YWdEYXRhLnRhZykge1xuICAgICAgICBjb25zdCBtYXR0ZXJ0YWdEYXRhID0gdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5nZXRNYXR0ZXJUYWdEYXRhRm9yTWF0dGVydGFnKFxuICAgICAgICAgIHRhZ0RhdGEudGFnXG4gICAgICAgICk7XG4gICAgICAgIG1hdHRlcnRhZ0RhdGEuc2V0T2JqZWN0KG9iamVjdCwgUG9pVHlwZS5ST09NKTtcbiAgICAgICAgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5zZXRUYWdJY29uQW5kT3BhY2l0eSh0YWdEYXRhLnRhZywgbWF0dGVydGFnRGF0YSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYWRkSWNvbkFuZFNldEZvclBvaShwb2k6IFBPSSwgaWNvblBhdGg6IHN0cmluZykge1xuICAgIGlmICh0aGlzLmNoZWNrTW9kZSgnTWF0dGVycG9ydCcpKSB7XG4gICAgICBjb25zdCB0YWdEYXRhID0gdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5nZXRUYWdGcm9tRWxlbWVudElkKHBvaS5lbGVtZW50SUQpO1xuICAgICAgaWYgKHRhZ0RhdGEudGFnKSB7XG4gICAgICAgIHRoaXMubWF0dGVycG9ydFNlcnZpY2UuYWRkTmV3SWNvbkFuZFNldEZvclRhZyh0YWdEYXRhLnRhZywgaWNvblBhdGgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNoYW5nZVRvUmVnaXN0cmVkSWNvbkZvclBvaShwb2k6IFBPSSwgaWNvbk5hbWU6IHN0cmluZykge1xuICAgIGlmICh0aGlzLmNoZWNrTW9kZSgnTWF0dGVycG9ydCcpKSB7XG4gICAgICBjb25zdCB0YWdEYXRhID0gdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5nZXRUYWdGcm9tRWxlbWVudElkKHBvaS5lbGVtZW50SUQpO1xuICAgICAgaWYgKHRhZ0RhdGEudGFnKSB7XG4gICAgICAgIHRoaXMubWF0dGVycG9ydFNlcnZpY2Uuc2V0UmVnaXN0cmVkSWNvbkZvclRhZyh0YWdEYXRhLnRhZywgaWNvbk5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZUh0bWxUYWdGb3JQb2lXaXRoT2JqZWN0KHBvaTogUE9JLCBvYmplY3Q6IERiT2JqZWN0VHlwZSkge1xuICAgIGlmICh0aGlzLmNoZWNrTW9kZSgnTWF0dGVycG9ydCcpKSB7XG4gICAgICBjb25zdCB0YWdEYXRhID0gdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5nZXRUYWdGcm9tRWxlbWVudElkKHBvaS5lbGVtZW50SUQpO1xuICAgICAgaWYgKHRhZ0RhdGEudGFnKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubWF0dGVycG9ydFNlcnZpY2UudXBkYXRlSW5qZWN0ZWRIdG1sRm9yVGFnSUQoXG4gICAgICAgICAgdGFnRGF0YS50YWcsXG4gICAgICAgICAgb2JqZWN0LFxuICAgICAgICAgIHBvaS50eXBlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1vdmUgYW4gZXhpc3RpbmcgcG9pIGluIE1hdHRlcnBvcnRcbiAgICogQHBhcmFtIHBvaVxuICAgKiBAcGFyYW0gZWxlbWVudFxuICAgKi9cbiAgYXN5bmMgYWN0aW9uX21vdmVfcG9pX3Zpc3VhbGx5KFxuICAgIHBvaTogUE9JLFxuICAgIGVsZW1lbnQ6IFRpY2tldCB8IEZlYXR1cmUgfCBFcXVpcG1lbnQgfCBDb21tZW50XG4gICkge1xuICAgIGF3YWl0IHRoaXMuYWN0aW9uX2RlbGV0ZV9lbGVtZW50KGVsZW1lbnQpO1xuICAgIGF3YWl0IHRoaXMuYWN0aW9uQWRkT2JqZWN0RnJvbVBPSShlbGVtZW50LCBwb2kpO1xuICB9XG5cbiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIEN1cGl4XG4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBNYXR0ZXJwb3J0XG4gICAgaHR0cHM6Ly9tYXR0ZXJwb3J0LmdpdGh1Yi5pby9zaG93Y2FzZS1zZGsvZG9jcy9zZGsvcmVmZXJlbmNlL2N1cnJlbnQvbW9kdWxlcy9tYXR0ZXJ0YWcuaHRtbCNhZGRcbiAgICBodHRwczovL21hdHRlcnBvcnQuZ2l0aHViLmlvL3Nob3djYXNlLXNkay9kb2NzL3Nkay9yZWZlcmVuY2UvY3VycmVudC9tb2R1bGVzL21hdHRlcnRhZy5odG1sI3JlbW92ZVxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gIGluaXRUaHJlZUpzKGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY2hlY2tNb2RlKCd0aHJlZWpzJykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy50aHJlZUpzU2VydmljZS5pbml0KGNhbnZhcyk7XG4gICAgLy8gVGhlIHRhZyBwaXBlbGluZSBpcyBnYXRlZCBvbiB0aGlzIGZsYWcsIHdoaWNoIHVudGlsIG5vdyBvbmx5IHRoZSBNYXR0ZXJwb3J0IFNESyBzZXQuIEFcbiAgICAvLyBUaHJlZS5qcyB2aXNpdCBuZXZlciByZWFjaGVzIHRoYXQgY29kZSwgc28gZXZlcnkgdGFnIHdhcyBkcm9wcGVkIGJlZm9yZSBpdCBjb3VsZCBiZSBkcmF3bi5cbiAgICB0aGlzLnNob3dpbmdWaWV3ZXIgPSB0cnVlO1xuXG4gICAgLy8gRXZlcnl0aGluZyB0aGF0IGxvYWRzIGRhdGEgZm9yIGEgc3BhY2UgLSB0aWNrZXRzLCBlcXVpcG1lbnRzLCBmZWF0dXJlcywgbWVhc3VyZW1lbnRzIC0gaGFuZ3NcbiAgICAvLyBvZmYgdGhpcyBldmVudCwgd2hpY2ggTWF0dGVycG9ydCByYWlzZXMgb25jZSBpdHMgU0RLIHN0YXJ0cyBwbGF5aW5nLiBBIFRocmVlLmpzIHZpc2l0IG5ldmVyXG4gICAgLy8gdG91Y2hlcyB0aGUgU0RLLCBzbyBub3RoaW5nIGV2ZXIgYW5ub3VuY2VkIHRoZSBzcGFjZSBhbmQgZXZlcnkgbGlzdCBjYW1lIGJhY2sgZW1wdHkuXG4gICAgaWYgKHRoaXMuY3VycmVudFNwYWNlSUQpIHtcbiAgICAgIHRoaXMudmlld2VySXNPbi5uZXh0KHtcbiAgICAgICAgc3BhY2VJRDogdGhpcy5jdXJyZW50U3BhY2VJRCxcbiAgICAgICAgbW9kZWwzRDogbnVsbCxcbiAgICAgICAgc3dlZXA6IG51bGwsXG4gICAgICAgIHJvdGF0aW9uOiBudWxsLFxuICAgICAgfSk7XG4gICAgICB0aGlzLmRhdGFJc0xvYWRlZC5uZXh0KHRydWUpO1xuICAgICAgdGhpcy5pc0xvYWRlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIGEgM0QgbW9kZWwgaW50byB0aGUgVGhyZWUuanMgc2NlbmUgKEdMVEYpLlxuICAgKiBPbmx5IHdvcmtzIHdoZW4gdGhlIHZpZXdlciBpcyBpbiAndGhyZWVqcycgbW9kZS5cbiAgICovXG4gIGxvYWRHTFRGTW9kZWwodXJsOiBzdHJpbmcsIGNhbWVyYVBvc2l0aW9uPzoge3g6IG51bWJlciwgeTogbnVtYmVyLCB6OiBudW1iZXJ9LCByb3RhdGlvbj86IHt4OiBudW1iZXIsIHk6IG51bWJlciwgejogbnVtYmVyfSk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNoZWNrTW9kZSgndGhyZWVqcycpKSB7XG4gICAgICB0aGlzLnRocmVlSnNTZXJ2aWNlLmxvYWRHTFRGTW9kZWwodXJsLCBjYW1lcmFQb3NpdGlvbiwgcm90YXRpb24pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyBhIEdMQiBzdG9yZWQgaW4gUzMsIGdpdmVuIGl0cyBrZXkgKGUuZy4gYHZpc2l0cy88aWQ+L21vZGVsLmdsYmApLlxuICAgKlxuICAgKiBSZXNvbHZlcyB0aGUga2V5IHRvIGEgc2lnbmVkIFVSTCBmaXJzdCwgdGhlbiBsb2FkcyBpdCBsaWtlIGFueSBvdGhlci4gVGhlIHNpZ25lZCBVUkwgb25seVxuICAgKiBjb3ZlcnMgYXV0aGVudGljYXRpb24gLSB0aGUgYnVja2V0IHN0aWxsIG5lZWRzIGEgQ09SUyBydWxlIGFsbG93aW5nIEdFVCBmcm9tIHRoZSBhcHAncyBvcmlnaW4sXG4gICAqIG9yIHRoZSBicm93c2VyIGJsb2NrcyB0aGUgZG93bmxvYWQgYmVmb3JlIGl0IHN0YXJ0cy5cbiAgICpcbiAgICogYHBsYWNlbWVudE1ldGFkYXRhYCBpcyB0aGUgY2FwdHVyZSdzIHN0b3JlZCBwbGFjZW1lbnQ7IHdoZW4gYWJzZW50IG9yIHVudXNhYmxlIHRoZSB2aWV3ZXIgZmFsbHNcbiAgICogYmFjayB0byBmcmFtaW5nIHRoZSBtb2RlbCBhdXRvbWF0aWNhbGx5LlxuICAgKi9cbiAgYXN5bmMgbG9hZEdMVEZNb2RlbEZyb21TMyhrZXk6IHN0cmluZywgcGxhY2VtZW50TWV0YWRhdGE/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuY2hlY2tNb2RlKCd0aHJlZWpzJykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gQSBrZXkgdW5kZXIgYXNzZXRzLyBpcyBzZXJ2ZWQgYnkgdGhlIGFwcCBpdHNlbGYsIHNvIGl0IG5lZWRzIG5vIHNpZ25pbmcuIFRoaXMgaXMgd2hhdCBsZXRzIGFcbiAgICAvLyBtb2RlbCBidW5kbGVkIHdpdGggdGhlIGJ1aWxkIHN0YW5kIGluIGZvciBvbmUgaW4gUzMgd2hpbGUgdGhlIHR3byBhcmUgb3RoZXJ3aXNlIGlkZW50aWNhbC5cbiAgICBjb25zdCBpc0xvY2FsQXNzZXQgPSBrZXkuc3RhcnRzV2l0aCgnYXNzZXRzLycpO1xuICAgIGNvbnN0IHVybCA9IGlzTG9jYWxBc3NldCA/IGtleSA6IGF3YWl0IGdldFNpZ25lZEZpbGUoa2V5KTtcbiAgICBpZiAoIXVybCkge1xuICAgICAgY29uc29sZS5lcnJvcihgVmlld2VyU2VydmljZTogY291bGQgbm90IHJlc29sdmUgYSBzaWduZWQgVVJMIGZvciB0aGUgM0QgbW9kZWwgYXQgXCIke2tleX1cIi5gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcGxhY2VtZW50ID0gcGFyc2VUaHJlZUpzUGxhY2VtZW50KHBsYWNlbWVudE1ldGFkYXRhKTtcbiAgICAvLyBUaGUga2V5LCBub3QgdGhlIHNpZ25lZCBVUkwsIGlzIHdoYXQgaWRlbnRpZmllcyB0aGUgbW9kZWwgYWNyb3NzIGxvYWRzIC0gdGhlIHNpZ25hdHVyZSBtYWtlc1xuICAgIC8vIGV2ZXJ5IFVSTCB1bmlxdWUsIHdoaWNoIGlzIGV4YWN0bHkgd2h5IHRoZSBicm93c2VyJ3Mgb3duIGNhY2hlIG5ldmVyIGhlbHBzIGhlcmUuXG4gICAgdGhpcy50aHJlZUpzU2VydmljZS5sb2FkR0xURk1vZGVsKHVybCwgcGxhY2VtZW50Py5jYW1lcmFQb3NpdGlvbiwgcGxhY2VtZW50Py5yb3RhdGlvbiwga2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyBhIDNEIG1vZGVsIGludG8gdGhlIFRocmVlLmpzIHNjZW5lIChPQkopLlxuICAgKi9cbiAgbG9hZE9iak1vZGVsKG10bFVybDogc3RyaW5nLCBvYmpVcmw6IHN0cmluZywgY2FtZXJhUG9zaXRpb24/OiB7eDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlcn0sIHJvdGF0aW9uPzoge3g6IG51bWJlciwgeTogbnVtYmVyLCB6OiBudW1iZXJ9KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2hlY2tNb2RlKCd0aHJlZWpzJykpIHtcbiAgICAgIHRoaXMudGhyZWVKc1NlcnZpY2UubG9hZE9iak1vZGVsKG10bFVybCwgb2JqVXJsLCBjYW1lcmFQb3NpdGlvbiwgcm90YXRpb24pO1xuICAgIH1cbiAgfVxuXG4gIGdldCB0aHJlZUpzT2JqZWN0SG92ZXJlZCQoKSB7XG4gICAgcmV0dXJuIHRoaXMudGhyZWVKc1NlcnZpY2Uub2JqZWN0SG92ZXJlZCQ7XG4gIH1cblxuICBnZXQgdGhyZWVKc09iamVjdENsaWNrZWQkKCkge1xuICAgIHJldHVybiB0aGlzLnRocmVlSnNTZXJ2aWNlLm9iamVjdENsaWNrZWQkO1xuICB9XG5cbiAgLyoqIEVtaXRzIHRydWUgd2hpbGUgYSBoZWF2eSAub2JqIGZpbGUgaXMgYmVpbmcgcGFyc2VkIChpbiBhIHdvcmtlciwgd2hlbiBhdmFpbGFibGUpLCBmYWxzZSBvbmNlIGRvbmUuICovXG4gIGdldCB0aHJlZUpzTW9kZWxMb2FkaW5nJCgpIHtcbiAgICByZXR1cm4gdGhpcy50aHJlZUpzU2VydmljZS5tb2RlbExvYWRpbmckO1xuICB9XG5cbiAgLyoqIERvd25sb2FkIHByb2dyZXNzIGZvciBHTEIgbW9kZWxzIGFzIGEgMC0xIGZyYWN0aW9uLCBvciBudWxsIHdoZW4gdGhlIHNpemUgaXNuJ3Qga25vd24gdXBmcm9udC4gKi9cbiAgZ2V0IHRocmVlSnNNb2RlbExvYWRQcm9ncmVzcyQoKSB7XG4gICAgcmV0dXJuIHRoaXMudGhyZWVKc1NlcnZpY2UubW9kZWxMb2FkUHJvZ3Jlc3MkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyB0aGUgV2ViIFdvcmtlciB1c2VkIHRvIHBhcnNlIGhlYXZ5IC5vYmogZmlsZXMgb2ZmIHRoZSBtYWluIHRocmVhZC5cbiAgICogTXVzdCBiZSBjcmVhdGVkIGJ5IHRoZSBhcHAgKHNlZSBvYmotcGFyc2VyLndvcmtlci50cyksIHNpbmNlIHRoaXMgbGlicmFyeSBjYW4ndCBidW5kbGUgd29ya2VyIGZpbGVzLlxuICAgKi9cbiAgc2V0T2JqUGFyc2VyV29ya2VyKHdvcmtlcjogV29ya2VyKTogdm9pZCB7XG4gICAgdGhpcy50aHJlZUpzU2VydmljZS5zZXRPYmpQYXJzZXJXb3JrZXIod29ya2VyKTtcbiAgfVxuXG4gIGFkZFRocmVlSnNPYmplY3RzKG9ianM6IGFueVtdKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2hlY2tNb2RlKCd0aHJlZWpzJykpIHtcbiAgICAgIHRoaXMudGhyZWVKc1NlcnZpY2UudXBkYXRlT2Jqc1RvU2NlbmUob2Jqcyk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaW5pdE1hdHRlcnBvcnRTZGsoXG4gICAgc3BhY2VJRDogc3RyaW5nLFxuICAgIG1vZGVsM0Q6IHN0cmluZyxcbiAgICB0YWdTZXJ2aWNlOiBCYXNlVGFnU2VydmljZSxcbiAgICBtb2R1bGU6IFNwTW9kdWxlID0gU3BNb2R1bGUuSU1NT1xuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmlzTG9hZGVkID0gZmFsc2U7XG4gICAgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5jdXJyZW50U3BhY2VJRCA9IHNwYWNlSUQ7XG4gICAgaWYgKHRoaXMubWF0dGVycG9ydFNlcnZpY2Uuc2RrKSB7XG4gICAgICBhd2FpdCB0aGlzLmNsZWFyQWxsKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlXG4gICAgICAuaW5pdFNkayh0YWdTZXJ2aWNlLCBtb2R1bGUpXG4gICAgICAudGhlbihhc3luYyAocmVzdWx0KSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICBjb25zdCB7IHNkayB9ID0gdGhpcy5tYXR0ZXJwb3J0U2VydmljZTtcblxuICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgICAgIHNkay5TY2VuZS5yZWdpc3RlcihzZWN1cml0eUNhbWVyYVR5cGUsIG1ha2VTZWN1cml0eUNhbWVyYS5iaW5kKHNkay5TY2VuZSkpLFxuICAgICAgICAgICAgc2RrLlNjZW5lLnJlZ2lzdGVyKFZpZXdGcnVzdHVtTWVzaFR5cGUsIG1ha2VWaWV3RnJ1c3R1bU1lc2guYmluZChzZGsuU2NlbmUpKVxuICAgICAgICAgIF0pO1xuXG4gICAgICAgICAgdGhpcy5zaG93aW5nVmlld2VyID0gdHJ1ZTtcblxuICAgICAgICAgIHNkay5BcHAuc3RhdGUuc3Vic2NyaWJlKFxuICAgICAgICAgICAgZnVuY3Rpb24gKGFwcFN0YXRlKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoJ1RoZSBjdXJyZW50IHBoYXNlOiAnLCBhcHBTdGF0ZS5waGFzZSk7XG4gICAgICAgICAgICAgIGlmIChhcHBTdGF0ZS5waGFzZSA9PT0gc2RrLkFwcC5QaGFzZS5QTEFZSU5HKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1RoZSBhcHAgaXMgcGxheWluZycpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd2luZ1ZpZXdlciA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy52aWV3ZXJJc09uLm5leHQoe1xuICAgICAgICAgICAgICAgICAgc3BhY2VJRCxcbiAgICAgICAgICAgICAgICAgIG1vZGVsM0QsXG4gICAgICAgICAgICAgICAgICBzd2VlcDogdGhpcy5zd2VlcFRvTW92ZSxcbiAgICAgICAgICAgICAgICAgIHJvdGF0aW9uOiB0aGlzLnJvdGF0aW9uVG9Nb3ZlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YUlzTG9hZGVkLm5leHQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5zd2VlcFRvTW92ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3RhdGlvblRvTW92ZSA9IG51bGw7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0uYmluZCh0aGlzKVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICB0aGlzLnZpZXdlcklzT24ubmV4dCh7XG4gICAgICAgICAgICBzcGFjZUlELFxuICAgICAgICAgICAgbW9kZWwzRCxcbiAgICAgICAgICAgIHN3ZWVwOiB0aGlzLnN3ZWVwVG9Nb3ZlLFxuICAgICAgICAgICAgcm90YXRpb246IHRoaXMucm90YXRpb25Ub01vdmUsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5kYXRhSXNMb2FkZWQubmV4dCh0cnVlKTtcbiAgICAgICAgICB0aGlzLmlzTG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnN3ZWVwVG9Nb3ZlID0gbnVsbDtcbiAgICAgICAgICB0aGlzLnJvdGF0aW9uVG9Nb3ZlID0gbnVsbDtcblxuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcmVtb3ZlRm9yYmlkZGVuU3dlZXBzKGZvcmJpZGRlblN3ZWVwczogc3RyaW5nW10pIHtcbiAgICBpZiAodGhpcy5jaGVja01vZGUoJ01hdHRlcnBvcnQnKSkge1xuICAgICAgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5yZW1vdmVGb3JiaWRkZW5Td2VlcHMoZm9yYmlkZGVuU3dlZXBzKTtcbiAgICB9XG4gIH1cblxuICBzZXRPYmplY3QzRExvYWRlZEluUG9zaXRpb24ob2JqZWN0TG9hZGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5pc09iamVjdExvYWRlZCA9IG9iamVjdExvYWRlZDtcbiAgfVxuXG4gIGlzT2JqZWN0M0RMb2FkZWRJblBvc2l0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzT2JqZWN0TG9hZGVkO1xuICB9XG59XG4iXX0=
850
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL3NlcnZpY2VzL3ZpZXdlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFDQUFxQztBQUNyQyw4QkFBOEI7QUFDOUIseUNBQXlDO0FBQ3pDLDJDQUEyQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBSS9CLE9BQU8sRUFHTCxrQkFBa0IsRUFDbEIsT0FBTyxFQUtQLFFBQVEsR0FDVCxNQUFNLGtCQUFrQixDQUFDO0FBRTFCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlEQUF5RCxDQUFDO0FBQ2pILE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBRXRILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDN0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7Ozs7OztBQU0zRCxNQUFNLE9BQU8sYUFBYTtJQThEdUI7SUFDVjtJQUMzQjtJQUNBO0lBQ0E7SUFqRUYsVUFBVSxHQUFXLFlBQVksQ0FBQztJQUVuQyxjQUFjLENBQVM7SUFFdEIsT0FBTyxDQUFTO0lBRWpCLFVBQVUsR0FLWixJQUFJLE9BQU8sRUFBRSxDQUFDO0lBRVosWUFBWSxHQUFxQixJQUFJLE9BQU8sRUFBRSxDQUFDO0lBRS9DLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFFakIsYUFBYSxHQUFHLEtBQUssQ0FBQztJQUU3Qjs7Ozs7O09BTUc7SUFDSSxjQUFjLEdBQWtCLElBQUks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UUFBUSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLWF3YWl0LWluLWxvb3AgKi9cclxuLyogZXNsaW50LWRpc2FibGUgY2FtZWxjYXNlICovXHJcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVyc2NvcmUtZGFuZ2xlICovXHJcbi8qIGVzbGludC1kaXNhYmxlIGNsYXNzLW1ldGhvZHMtdXNlLXRoaXMgKi9cclxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1BVFRFUlBPUlRfU0RLX0tFWSB9IGZyb20gJy4uL3Rva2Vucy9tYXR0ZXJwb3J0LXNkay1rZXkudG9rZW4nO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IE1hdHRlcnBvcnRTZXJ2aWNlIH0gZnJvbSAnLi9tYXR0ZXJwb3J0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUaHJlZUpzU2VydmljZSB9IGZyb20gJy4vdGhyZWVqcy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQmFzZVRhZ1NlcnZpY2UgfSBmcm9tICcuL3RhZy5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBEYk9iamVjdFR5cGUsXHJcbiAgUE9JLFxyXG4gIFZpZXdlckludGVyYWN0aW9ucyxcclxuICBQb2lUeXBlLFxyXG4gIENvbW1lbnQsXHJcbiAgRXF1aXBtZW50LFxyXG4gIFRpY2tldCxcclxuICBGZWF0dXJlLFxyXG4gIFNwTW9kdWxlLFxyXG59IGZyb20gJy4uL3R5cGVzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQb2lTZXJ2aWNlIH0gZnJvbSAnLi9tb2RlbHMvcG9pLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBtYWtlU2VjdXJpdHlDYW1lcmEsIHNlY3VyaXR5Q2FtZXJhVHlwZSB9IGZyb20gXCIuLi9tYXR0ZXJwb3J0LWV4dGVuc2lvbnMvc2VjdXJpdHktY2FtZXJhL1NlY3VyaXR5Q2FtZXJhXCI7XHJcbmltcG9ydCB7IFZpZXdGcnVzdHVtTWVzaFR5cGUsIG1ha2VWaWV3RnJ1c3R1bU1lc2ggfSBmcm9tIFwiLi4vbWF0dGVycG9ydC1leHRlbnNpb25zL3ZpZXctZnJ1c3R1bS1tZXNoL1ZpZXdGcnVzdHVtTWVzaFwiO1xyXG5pbXBvcnQgeyBOYXZpZ2F0b3JTZXJ2aWNlIH0gZnJvbSAnLi9uYXZpZ2F0b3Iuc2VydmljZSc7XHJcbmltcG9ydCB7IGdldFNpZ25lZEZpbGUgfSBmcm9tICcuL3MzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBwYXJzZVRocmVlSnNQbGFjZW1lbnQgfSBmcm9tICcuLi9oZWxwZXJzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb25maWcgfSBmcm9tICcuLi9jb25maWcnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFZpZXdlclNlcnZpY2Uge1xyXG4gIHByaXZhdGUgdmlld2VyTW9kZTogc3RyaW5nID0gJ01hdHRlcnBvcnQnO1xyXG5cclxuICBwdWJsaWMgY3VycmVudE1vZGVsM0Q6IHN0cmluZztcclxuXHJcbiAgcHJpdmF0ZSB0b3VyVXJsOiBzdHJpbmc7XHJcblxyXG4gIHB1YmxpYyB2aWV3ZXJJc09uOiBTdWJqZWN0PHtcclxuICAgIHNwYWNlSUQ6IHN0cmluZyB8IG51bGw7XHJcbiAgICBtb2RlbDNEOiBzdHJpbmcgfCBudWxsO1xyXG4gICAgc3dlZXA6IHN0cmluZyB8IG51bGw7XHJcbiAgICByb3RhdGlvbjogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgfSB8IG51bGw7XHJcbiAgfT4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICBwdWJsaWMgZGF0YUlzTG9hZGVkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgcHVibGljIGlzTG9hZGVkID0gZmFsc2U7XHJcblxyXG4gIHB1YmxpYyBzaG93aW5nVmlld2VyID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBzcGFjZSBiZWluZyB2aWV3ZWQsIHdoaWNoZXZlciB2aWV3ZXIgaXMgc2hvd2luZyBpdC5cclxuICAgKlxyXG4gICAqIE1hdHRlcnBvcnRTZXJ2aWNlIGNhcnJpZXMgaXRzIG93biBjb3B5LCBzZXQgd2hpbGUgaXRzIFNESyBjb25uZWN0cyAtIHdoaWNoIG5ldmVyIGhhcHBlbnMgaW5cclxuICAgKiBUaHJlZS5qcyBtb2RlLiBBbnl0aGluZyB0aGF0IHJlYWRzIG9ubHkgdGhhdCBvbmUgc2lsZW50bHkgZG9lcyBub3RoaW5nIGZvciBhIDNEIG1vZGVsLCBhbmQgdGhlXHJcbiAgICogbGlzdHMgdGhhdCBmZWVkIHRhZ3MgYXJlIGV4YWN0bHkgdGhhdC5cclxuICAgKi9cclxuICBwdWJsaWMgY3VycmVudFNwYWNlSUQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG5cclxuICBwdWJsaWMgc3dlZXBUb01vdmU6IHN0cmluZyB8IG51bGw7XHJcblxyXG4gIHB1YmxpYyByb3RhdGlvblRvTW92ZTogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgfSB8IG51bGw7XHJcblxyXG4gIHB1YmxpYyBnb1RvVHJpZ2dlcmVkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgcHVibGljIHRvb2xib3hTdGF0ZXMgPSB7XHJcbiAgICBkb2xsaG91c2U6IHtcclxuICAgICAgc3RhdDogZmFsc2UsXHJcbiAgICAgIGljb25JZDogJ3VpLWRvbGxob3VzZScsXHJcbiAgICAgIHNob3coKSB7XHJcbiAgICAgIH0sXHJcbiAgICAgIGhpZGUoKSB7XHJcbiAgICAgIH0sXHJcbiAgICB9LFxyXG4gICAgZmxvb3JwbGFuOiB7XHJcbiAgICAgIHN0YXQ6IGZhbHNlLFxyXG4gICAgfSxcclxuICAgIG1lc3VyZToge1xyXG4gICAgICBzdGF0OiBmYWxzZSxcclxuICAgICAgaWNvbklkOiAndWktbWVzdXJlJyxcclxuICAgICAgc2hvdygpIHtcclxuICAgICAgfSxcclxuICAgICAgaGlkZSgpIHtcclxuICAgICAgfSxcclxuICAgIH0sXHJcbiAgICBmaWx0ZXI6IHtcclxuICAgICAgc3RhdDogZmFsc2UsXHJcbiAgICB9LFxyXG4gIH07XHJcbiAgcHJpdmF0ZSBpc09iamVjdExvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBJbmplY3QoTUFUVEVSUE9SVF9TREtfS0VZKSBwcml2YXRlIHJlYWRvbmx5IHNka0tleTogc3RyaW5nLFxyXG4gICAgQEluamVjdCgnY29uZmlnJykgcHJpdmF0ZSByZWFkb25seSBjb25maWc6IENvbmZpZyxcclxuICAgIHByaXZhdGUgcG9pU2VydmljZTogUG9pU2VydmljZSxcclxuICAgIHByaXZhdGUgbWF0dGVycG9ydFNlcnZpY2U6IE1hdHRlcnBvcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0aHJlZUpzU2VydmljZTogVGhyZWVKc1NlcnZpY2UsXHJcbiAgKSB7XHJcbiAgICB0aGlzLnNldE1vZGUoJ01hdHRlcnBvcnQnKTtcclxuICB9XHJcblxyXG5cclxuICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAgICBVdGlsc1xyXG4gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG5cclxuICBjaGVja01vZGUoaW5kZXhNb2RlOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLnZpZXdlck1vZGUgPT09IGluZGV4TW9kZTtcclxuICB9XHJcblxyXG4gIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgICAgIFNldHRlcnNcclxuICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuXHJcbiAgc2V0TW9kZShpbmRleE1vZGU6IHN0cmluZykge1xyXG4gICAgLy8gTGVhdmluZyBUaHJlZS5qcyBtZWFucyBubyBUaHJlZS5qcyB3b3JrIHNob3VsZCBzdGlsbCBiZSBydW5uaW5nLiBUaGUgc2VydmljZSBiZWhpbmQgaXQgaXMgYVxyXG4gICAgLy8gc2luZ2xldG9uIGFuZCBvdXRsaXZlcyB0aGUgY29tcG9uZW50LCBzbyBhIGRvd25sb2FkIHN0YXJ0ZWQgZm9yIGEgbW9kZWwgdGhlIHVzZXIgaGFzIG5hdmlnYXRlZFxyXG4gICAgLy8gYXdheSBmcm9tIHdvdWxkIG90aGVyd2lzZSBmaW5pc2ggLSBhbmQgaXRzIHBhcnNlIHdvdWxkIGhvbGQgdGhlIG1haW4gdGhyZWFkIGZvciBzZWNvbmRzLFxyXG4gICAgLy8gc3RhbGxpbmcgd2hhdGV2ZXIgdmlld2VyIHRoZXkgYWN0dWFsbHkgb3BlbmVkLlxyXG4gICAgaWYgKHRoaXMudmlld2VyTW9kZSA9PT0gJ3RocmVlanMnICYmIGluZGV4TW9kZSAhPT0gJ3RocmVlanMnKSB7XHJcbiAgICAgIHRoaXMudGhyZWVKc1NlcnZpY2UuZGVzdHJveSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy52aWV3ZXJNb2RlID0gaW5kZXhNb2RlO1xyXG4gIH1cclxuXHJcbiAgc2V0VG91clVybChvcHRpb25zOiB7XHJcbiAgICBtb2RlbDNkOiBzdHJpbmcsXHJcbiAgICBzaG93SWNvblBsYW4/OiBib29sZWFuLFxyXG4gICAgc2hvd0ljb25Eb2xsaG91c2U/OiBib29sZWFuLFxyXG4gICAgc2hvd0ljb25GbG9vcnM/OiBib29sZWFuLFxyXG4gICAgc2hvd1F1aWNrU3RhcnQ/OiBib29sZWFuLFxyXG4gICAgc2hvd0Z1bGxzY3JlZW4/OiBib29sZWFuLFxyXG4gICAgc2hvd0d1aWRlZFRvdXI/OiBib29sZWFuLFxyXG4gICAgc2hvd0hpZ2hsaWdodFJlZWw/OiBib29sZWFuLFxyXG4gICAgc2hvd0RlZnVybmlzaD86IGJvb2xlYW4sXHJcbiAgICBzaG93Um9vbU1lYXN1cmVtZW50cz86IGJvb2xlYW5cclxuICB9KSB7XHJcbiAgICBjb25zdCB7XHJcbiAgICAgIG1vZGVsM2QsXHJcbiAgICAgIHNob3dJY29uUGxhbiA9IHRydWUsXHJcbiAgICAgIHNob3dJY29uRG9sbGhvdXNlID0gdHJ1ZSxcclxuICAgICAgc2hvd0ljb25GbG9vcnMgPSB0cnVlLFxyXG4gICAgICBzaG93UXVpY2tTdGFydCA9IHRydWUsXHJcbiAgICAgIHNob3dGdWxsc2NyZWVuID0gdHJ1ZSxcclxuICAgICAgc2hvd0d1aWRlZFRvdXIgPSB0cnVlLFxyXG4gICAgICBzaG93SGlnaGxpZ2h0UmVlbCA9IHRydWUsXHJcbiAgICAgIHNob3dEZWZ1cm5pc2ggPSB0cnVlLFxyXG4gICAgICBzaG93Um9vbU1lYXN1cmVtZW50cyA9IHRydWVcclxuICAgIH0gPSBvcHRpb25zO1xyXG5cclxuICAgIGNvbnN0IGJhc2VVcmwgPSBgL2Fzc2V0cy9idW5kbGUvc2hvd2Nhc2UuaHRtbGA7XHJcblxyXG4gICAgY29uc3QgcGFyYW1zOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgIC8vIE1vZMOobGVcclxuICAgIHBhcmFtcy5wdXNoKGBtPSR7bW9kZWwzZH1gKTtcclxuXHJcbiAgICAvLyBDb21wb3J0ZW1lbnQgZ8OpbsOpcmFsXHJcbiAgICBwYXJhbXMucHVzaChgcGxheT0xYCk7XHJcbiAgICBwYXJhbXMucHVzaChgdWk9MWApO1xyXG4gICAgcGFyYW1zLnB1c2goYHRpdGxlPTBgKTtcclxuICAgIHBhcmFtcy5wdXNoKGBsb2c9MGApO1xyXG4gICAgcGFyYW1zLnB1c2goYGJyYW5kPTBgKTtcclxuICAgIHBhcmFtcy5wdXNoKGBzZWFyY2g9MGApO1xyXG4gICAgcGFyYW1zLnB1c2goYGFwcGxpY2F0aW9uS2V5PSR7dGhpcy5zZGtLZXl9YCk7XHJcbiAgICBwYXJhbXMucHVzaChgbWRzPTBgKTtcclxuXHJcbiAgICAvLyBRdWljayBzdGFydFxyXG4gICAgaWYgKHNob3dRdWlja1N0YXJ0KSB7XHJcbiAgICAgIHBhcmFtcy5wdXNoKGBxcz0xYCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRmxvb3JwbGFuIChwbGFuKVxyXG4gICAgaWYgKCFzaG93SWNvblBsYW4pIHtcclxuICAgICAgcGFyYW1zLnB1c2goYGZwPTBgKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBEb2xsaG91c2UgKG1haXNvbi9wb3Vww6llKVxyXG4gICAgaWYgKCFzaG93SWNvbkRvbGxob3VzZSkge1xyXG4gICAgICBwYXJhbXMucHVzaChgZGg9MGApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFPDqWxlY3RldXIgZOKAmcOpdGFnZXNcclxuICAgIGlmICghc2hvd0ljb25GbG9vcnMpIHtcclxuICAgICAgcGFyYW1zLnB1c2goYHNmPTBgKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBHdWlkZWQgdG91clxyXG4gICAgaWYgKCFzaG93R3VpZGVkVG91cikge1xyXG4gICAgICBwYXJhbXMucHVzaChgZ3Q9MGApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEhpZ2hsaWdodCByZWVsIChiYW5kZSBkdSBiYXMpXHJcbiAgICBpZiAoIXNob3dIaWdobGlnaHRSZWVsKSB7XHJcbiAgICAgIC8vIFNlbG9uIHRvbiBidW5kbGUgOiBocj0xIG91IGhyPTAgbWFzcXVlXHJcbiAgICAgIHBhcmFtcy5wdXNoKGBocj0xYCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUGxlaW4gw6ljcmFuXHJcbiAgICBpZiAoIXNob3dGdWxsc2NyZWVuKSB7XHJcbiAgICAgIHBhcmFtcy5wdXNoKGBmcz0wYCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRGVmdXJuaXNoXHJcbiAgICBpZiAoc2hvd0RlZnVybmlzaCkge1xyXG4gICAgICBwYXJhbXMucHVzaChgYWQ9MWApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFJvb20gTWVhc3VyZW1lbnRzXHJcbiAgICBpZiAoc2hvd1Jvb21NZWFzdXJlbWVudHMpIHtcclxuICAgICAgcGFyYW1zLnB1c2goYG1lYXN1cmVtZW50cz0xYCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy50b3VyVXJsID0gYCR7YmFzZVVybH0/JHtwYXJhbXMuam9pbihcIiZcIil9YDtcclxuICB9XHJcblxyXG4gIGFzeW5jIGNsZWFyQWxsKCkge1xyXG4gICAgLy8gdGhpcy5zd2VlcFRvTW92ZSA9IG51bGw7XHJcbiAgICAvLyB0aGlzLnJvdGF0aW9uVG9Nb3ZlID0gbnVsbDtcclxuICAgIGlmICh0aGlzLmNoZWNrTW9kZSgndGhyZWVqcycpKSB7XHJcbiAgICAgIHRoaXMudGhyZWVKc1NlcnZpY2UuZGVzdHJveSgpO1xyXG4gICAgICB0aGlzLnNob3dpbmdWaWV3ZXIgPSBmYWxzZTtcclxuICAgICAgdGhpcy5pc0xvYWRlZCA9IGZhbHNlO1xyXG4gICAgICAvLyBNaXJyb3JzIHRoZSBNYXR0ZXJwb3J0IGJyYW5jaDogdGhlIHNwYWNlIGlzIG5vIGxvbmdlciBvbiBzY3JlZW4sIHNvIHdoYXRldmVyIHdhcyBsb2FkZWRcclxuICAgICAgLy8gZm9yIGl0IGhhcyB0byBiZSBkcm9wcGVkIGJlZm9yZSBhbm90aGVyIHZpc2l0IG9wZW5zLlxyXG4gICAgICB0aGlzLnZpZXdlcklzT24ubmV4dCh7XHJcbiAgICAgICAgc3BhY2VJRDogbnVsbCxcclxuICAgICAgICBtb2RlbDNEOiBudWxsLFxyXG4gICAgICAgIHN3ZWVwOiBudWxsLFxyXG4gICAgICAgIHJvdGF0aW9uOiBudWxsLFxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5jaGVja01vZGUoJ01hdHRlcnBvcnQnKSkge1xyXG4gICAgICB0aGlzLnNob3dpbmdWaWV3ZXIgPSBmYWxzZTtcclxuICAgICAgdGhpcy5pc0xvYWRlZCA9IGZhbHNlO1xyXG4gICAgICBhd2FpdCB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmNsZWFyQWxsKCk7XHJcbiAgICAgIHRoaXMudmlld2VySXNPbi5uZXh0KHtcclxuICAgICAgICBzcGFjZUlEOiBudWxsLFxyXG4gICAgICAgIG1vZGVsM0Q6IG51bGwsXHJcbiAgICAgICAgc3dlZXA6IG51bGwsXHJcbiAgICAgICAgcm90YXRpb246IG51bGwsXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgICAgR2V0dGVyc1xyXG4gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG5cclxuICBnZXRNb2RlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMudmlld2VyTW9kZTtcclxuICB9XHJcblxyXG4gIGdldFZpZXdlclNlbGVjdGVkU2VydmljZSgpIHtcclxuICAgIC8vIE1hdHRlcnBvcnRcclxuICAgIC8vIGlmICh0aGlzLmNoZWNrTW9kZShcIk1hdHRlcnBvcnRcIikpIHtcclxuICAgIC8vICAgICByZXR1cm4gdGhpcy5nZXRNYXR0ZXJwb3J0U2VydmljZSgpO1xyXG4gICAgLy8gfVxyXG4gICAgcmV0dXJuIHRoaXMuZ2V0TWF0dGVycG9ydFNlcnZpY2UoKTtcclxuICB9XHJcblxyXG4gIGdldFRvdXJVcmwoKSB7XHJcbiAgICByZXR1cm4gdGhpcy50b3VyVXJsO1xyXG4gIH1cclxuXHJcbiAgZ2V0TWF0dGVycG9ydFNlcnZpY2UoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5tYXR0ZXJwb3J0U2VydmljZTtcclxuICB9XHJcblxyXG4gIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgICAgIEdlbmVyaWMgTWFpbiBhY3Rpb24gZnVuY3Rpb25zXHJcbiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcbiAgc2V0U3dlZXBUb01vdmUoc3dlZXA6IHN0cmluZykge1xyXG4gICAgdGhpcy5zd2VlcFRvTW92ZSA9IHN3ZWVwO1xyXG4gIH1cclxuXHJcbiAgc2V0Um90YXRpb25Ub01vdmUocm90YXRpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IH0pIHtcclxuICAgIHRoaXMucm90YXRpb25Ub01vdmUgPSByb3RhdGlvbjtcclxuICB9XHJcblxyXG5cclxuICBhc3luYyBhY3Rpb25fbW92ZV90b190YWcoZWxlbWVudElkOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIC8vIE1hdHRlcnBvcnRcclxuICAgIGlmICh0aGlzLmNoZWNrTW9kZSgnTWF0dGVycG9ydCcpKSB7XHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMubWF0dGVycG9ydFNlcnZpY2UuZ2V0VGFnRnJvbUVsZW1lbnRJZChlbGVtZW50SWQpO1xyXG4gICAgICBpZiAocmVzdWx0LnRhZykge1xyXG4gICAgICAgIGF3YWl0IHRoaXMubWF0dGVycG9ydFNlcnZpY2UuZ29Ub1RhZyhyZXN1bHQudGFnKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAocmVzdWx0LnN3ZWVwKSB7XHJcbiAgICAgICAgdGhpcy5zd2VlcFRvTW92ZSA9IHJlc3VsdC5zd2VlcDtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBXaXRob3V0IHRoaXMgdGhlIGNhbGxlciBmYWxscyB0aHJvdWdoIHRvIGdldE1vZGVsM2RBbmRTd2VlcCwgd2hpY2ggcmVzb2x2ZXMgYSB2aXNpdCBmcm9tIHRoZVxyXG4gICAgLy8gUE9JJ3Mgc3dlZXAgLSBhIFRocmVlLmpzIFBPSSBoYXMgbm9uZSwgc28gaXQgZmFpbHMgYW5kIHJlcG9ydHMgdGhlIG1vZGVsIGFzIHVucmVhY2hhYmxlIGV2ZW5cclxuICAgIC8vIHRob3VnaCB0aGUgdGFnIGlzIG9uIHNjcmVlbi5cclxuICAgIGlmICh0aGlzLmNoZWNrTW9kZSgndGhyZWVqcycpICYmIHRoaXMudGhyZWVKc1NlcnZpY2UuaGFzVGFnKGVsZW1lbnRJZCkpIHtcclxuICAgICAgdGhpcy50aHJlZUpzU2VydmljZS5nb1RvVGFnKGVsZW1lbnRJZCk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkcyBNYXR0ZXJ0YWdzIHRvIFZpZXdlclxyXG4gICAqIEBwYXJhbSBvYmplY3RzIExpc3Qgb2Ygb2JqZWN0cyAodGlja2V0cywgZXF1aXBtZW50cykgZXRjIHRvIGJlIGFkZGVkIGFzIE1hdHRlcnRhZ3NcclxuICAgKi9cclxuICBhc3luYyBhZGRPYmplY3RUYWdzVG9WaWV3ZXIob2JqZWN0czogRGJPYmplY3RUeXBlW10pIHtcclxuICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICBvYmplY3RzLm1hcChhc3luYyAob2JqZWN0KSA9PiB7XHJcbiAgICAgICAgY29uc3QgcG9pID0gYXdhaXQgdGhpcy5wb2lTZXJ2aWNlLmdldFBvaUJ5RWxlbWVudElkKG9iamVjdC5pZCEpO1xyXG4gICAgICAgIGlmIChwb2kgJiYgcG9pLmNvb3JkaW5hdGUpIHtcclxuICAgICAgICAgIGF3YWl0IHRoaXMuYWN0aW9uQWRkT2JqZWN0RnJvbVBPSShvYmplY3QsIHBvaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICAgIC8vIE5ld2x5IGNyZWF0ZWQgdGFncyBoYXZlIG5vIG9wYWNpdHkvYWxsb3dBY3Rpb24gYXBwbGllZCB5ZXQgKG9ubHkgc2V0IGJ5XHJcbiAgICAvLyB1cGRhdGVUYWdzVmlzaWJpbGl0eUZvckNvbnRleHQsIHdoaWNoIHJ1bnMgb24gTW9kZS9Td2VlcC9GbG9vci9Sb29tL0NhbWVyYVxyXG4gICAgLy8gZXZlbnRzKS4gSWYgdGhpcyBiYXRjaCBsb2FkZWQgYWZ0ZXIgdGhvc2UgZmlyZWQsIHRoZSB0YWdzIHN0YXkgaW4gd2hhdGV2ZXJcclxuICAgIC8vIGRlZmF1bHQgc3RhdGUgdGhlIFNESyBnYXZlIHRoZW0gdW50aWwgc29tZXRoaW5nIGVsc2UgbnVkZ2VzIGEgcmVmcmVzaC5cclxuICAgIGlmICh0aGlzLmNoZWNrTW9kZSgnTWF0dGVycG9ydCcpKSB7XHJcbiAgICAgIHRoaXMubWF0dGVycG9ydFNlcnZpY2UucmVmcmVzaFRhZ3NWaXNpYmlsaXR5KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBhY3Rpb25BZGRPYmplY3RGcm9tUE9JKG9iamVjdDogRGJPYmplY3RUeXBlLCBwb2k6IFBPSSkge1xyXG4gICAgaWYgKHRoaXMuY2hlY2tNb2RlKCdNYXR0ZXJwb3J0JykpIHtcclxuICAgICAgcmV0dXJuIHRoaXMubWF0dGVycG9ydFNlcnZpY2UuY3JlYXRlTWF0dGVydGFnRnJvbVBPSShcclxuICAgICAgICBwb2kudHlwZSEsXHJcbiAgICAgICAgb2JqZWN0LFxyXG4gICAgICAgIHBvaVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY2hlY2tNb2RlKCd0aHJlZWpzJykpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuYWRkVGhyZWVKc1RhZ0Zyb21QT0kob2JqZWN0LCBwb2kpO1xyXG4gICAgfVxyXG4gICAgLy8gQ3VwaXhcclxuICAgIC8vIFRPRE9cclxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERyYXdzIGEgUE9JIGFzIGEgdGFnIGluIHRoZSBUaHJlZS5qcyBzY2VuZS5cclxuICAgKlxyXG4gICAqIEJvdGggdmlld2VycyBhcmUgZmVkIGJ5IHRoZSBzYW1lIHN1YnNjcmlwdGlvbnMgb24gdGhlIHNhbWUgUE9JIHJlY29yZHMsIHNvIGEgdGFnIGNyZWF0ZWQgaW5cclxuICAgKiBlaXRoZXIgb25lIHNob3dzIHVwIGluIHRoZSBvdGhlciB3aXRob3V0IGFueSBzeW5jaW5nIG9mIGl0cyBvd24gLSB0aGlzIGlzIGp1c3QgdGhlIFRocmVlLmpzIGVuZFxyXG4gICAqIG9mIHRoZSBwaXBlbGluZSB0aGF0IGFscmVhZHkgZHJpdmVzIE1hdHRlcnBvcnQuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhc3luYyBhZGRUaHJlZUpzVGFnRnJvbVBPSShvYmplY3Q6IERiT2JqZWN0VHlwZSwgcG9pOiBQT0kpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICghcG9pLmNvb3JkaW5hdGUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IHBvc2l0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB6OiBudW1iZXIgfTtcclxuICAgIHRyeSB7XHJcbiAgICAgIHBvc2l0aW9uID0gSlNPTi5wYXJzZShwb2kuY29vcmRpbmF0ZSk7XHJcbiAgICB9IGNhdGNoIHtcclxuICAgICAgY29uc29sZS53YXJuKGBWaWV3ZXJTZXJ2aWNlOiB1bnBhcnNlYWJsZSBQT0kgY29vcmRpbmF0ZSBmb3IgZWxlbWVudCAke29iamVjdC5pZH06YCwgcG9pLmNvb3JkaW5hdGUpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoIVtwb3NpdGlvbj8ueCwgcG9zaXRpb24/LnksIHBvc2l0aW9uPy56XS5ldmVyeSgodmFsdWUpID0+IHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnRocmVlSnNTZXJ2aWNlLnVwc2VydFRhZyh7XHJcbiAgICAgIGlkOiBvYmplY3QuaWQsXHJcbiAgICAgIHBvc2l0aW9uLFxyXG4gICAgICBwb2lUeXBlOiBwb2kudHlwZSxcclxuICAgICAgbGFiZWw6IG9iamVjdC5uYW1lID8/IG9iamVjdC50aXRsZSA/PyBudWxsLFxyXG4gICAgICBpY29uVXJsOiBhd2FpdCB0aGlzLnJlc29sdmVUYWdJY29uVXJsKHBvaSksXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBpbWFnZSB0byBkcmF3IGEgdGFnIHdpdGgsIG1pcnJvcmluZyB3aGF0IE1hdHRlcnBvcnQgc2hvd3MgZm9yIHRoZSBzYW1lIFBPSS5cclxuICAgKlxyXG4gICAqIE1hdHRlcnBvcnQgcmVnaXN0ZXJzIG9uZSB0ZXh0dXJlIHBlciB0eXBlIChgaWNvbi10aWNrZXRgLCBgaWNvbi1lcXVpcG1lbnRgLi4uKSBmcm9tIHRoZSBzYW1lXHJcbiAgICogY29uZmlnIGVudHJpZXMgdXNlZCBoZXJlLCBhbmQgb3ZlcnJpZGVzIGl0IHdpdGggdGhlIFBPSSdzIG93biBpY29uIHdoZW4gaXQgaGFzIG9uZS4gUmVhZGluZyB0aGVcclxuICAgKiBzYW1lIHR3byBzb3VyY2VzIGlzIHdoYXQga2VlcHMgYSB0YWcgbG9va2luZyBsaWtlIGl0c2VsZiBhY3Jvc3MgdGhlIHR3byB2aWV3ZXJzLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgYXN5bmMgcmVzb2x2ZVRhZ0ljb25VcmwocG9pOiBQT0kpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcclxuICAgIGlmIChwb2kudGFnSWNvbikge1xyXG4gICAgICAvLyBTdG9yZWQgYXMgSlNPTiAoeyBzcmMsIG9wYWNpdHkgfSkgYnkgdGhlIE1hdHRlcnBvcnQgcGF0aCwgYnV0IG9sZGVyIHJlY29yZHMgYXJlIGEgYmFyZSBrZXkuXHJcbiAgICAgIGxldCBzb3VyY2U6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UocG9pLnRhZ0ljb24pO1xyXG4gICAgICAgIHNvdXJjZSA9IHR5cGVvZiBwYXJzZWQgPT09ICdzdHJpbmcnID8gcGFyc2VkIDogcGFyc2VkPy5zcmMgPz8gbnVsbDtcclxuICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgc291cmNlID0gcG9pLnRhZ0ljb247XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHNvdXJjZSkge1xyXG4gICAgICAgIGNvbnN0IHNpZ25lZCA9IGF3YWl0IGdldFNpZ25lZEZpbGUoc291cmNlKTtcclxuICAgICAgICBpZiAoc2lnbmVkKSB7XHJcbiAgICAgICAgICByZXR1cm4gc2lnbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdFRhZ0ljb25VcmwocG9pLnR5cGUpO1xyXG4gIH1cclxuXHJcbiAgLyoqIFRoZSBjb25maWd1cmVkIGljb24gZm9yIGEgUE9JIHR5cGUsIG9yIG51bGwgd2hlbiB0aGF0IHR5cGUgaGFzIG5vbmUuICovXHJcbiAgcHJpdmF0ZSBkZWZhdWx0VGFnSWNvblVybChwb2lUeXBlOiBQb2lUeXBlIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgY29uc3QgaWNvbnMgPSB0aGlzLmNvbmZpZz8ubXlfY29uZmlnO1xyXG4gICAgaWYgKCFpY29ucykge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHN3aXRjaCAocG9pVHlwZSkge1xyXG4gICAgICBjYXNlIFBvaVR5cGUuVElDS0VUOlxyXG4gICAgICAgIHJldHVybiBpY29ucy5pY29uX3RpY2tldCA/PyBudWxsO1xyXG4gICAgICBjYXNlIFBvaVR5cGUuRVFVSVBNRU5UOlxyXG4gICAgICAgIHJldHVybiBpY29ucy5pY29uX2VxdWlwbWVudCA/PyBudWxsO1xyXG4gICAgICBjYXNlIFBvaVR5cGUuTUVBU1VSRTpcclxuICAgICAgICByZXR1cm4gaWNvbnMuaWNvbl9tZWFzdXJlID8/IG51bGw7XHJcbiAgICAgIGNhc2UgUG9pVHlwZS5PQkpFQ1QzRDpcclxuICAgICAgICByZXR1cm4gaWNvbnMuaWNvbl9vYmplY3QzZCA/PyBudWxsO1xyXG4gICAgICBjYXNlIFBvaVR5cGUuREFUQTpcclxuICAgICAgY2FzZSBQb2lUeXBlLkRFU0s6XHJcbiAgICAgICAgcmV0dXJuIGljb25zLmljb25fZGF0YSA/PyBudWxsO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIE1vdmVzIHRoZSBUaHJlZS5qcyBjYW1lcmEgdG8gZnJhbWUgYSB0YWcsIG1pcnJvcmluZyBNYXR0ZXJwb3J0J3MgZ29Ub1RhZy4gKi9cclxuICBnb1RvVGhyZWVKc1RhZyhlbGVtZW50SWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY2hlY2tNb2RlKCd0aHJlZWpzJykpIHtcclxuICAgICAgdGhpcy50aHJlZUpzU2VydmljZS5nb1RvVGFnKGVsZW1lbnRJZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogU2hvd3Mgb25seSB0YWdzIG9mIHRoZSBnaXZlbiBQT0kgdHlwZXM7IG51bGwgY2xlYXJzIHRoZSBmaWx0ZXIuICovXHJcbiAgc2V0VmlzaWJsZVRocmVlSnNUYWdUeXBlcyh0eXBlczogUG9pVHlwZVtdIHwgbnVsbCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY2hlY2tNb2RlKCd0aHJlZWpzJykpIHtcclxuICAgICAgdGhpcy50aHJlZUpzU2VydmljZS5zZXRWaXNpYmxlVGFnVHlwZXModHlwZXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWxpZ25tZW50IHdhbGt0aHJvdWdoOiBwaWNrIGEgdGFnLCB0aGVuIGNsaWNrIHdoZXJlIGl0IHJlYWxseSBzaXRzLCB0aHJlZSB0aW1lcyBvdmVyLlxyXG4gICAqXHJcbiAgICogVXNlcyB0YWdzIHRoYXQgYWxyZWFkeSBleGlzdCwgc28gbm90aGluZyBpcyBjcmVhdGVkIGFuZCBub3RoaW5nIGlzIHdyaXR0ZW4gdW50aWwgdGhlIGNhbGxlclxyXG4gICAqIHNhdmVzIHRoZSByZXN1bHQuIFNlZSB0aHJlZUpzQWxpZ25tZW50UHJvZ3Jlc3MkIGZvciB3aGF0IHRoZSBVSSBzaG91bGQgYmUgYXNraW5nIGZvci5cclxuICAgKi9cclxuICBzdGFydFRocmVlSnNUYWdBbGlnbm1lbnQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jaGVja01vZGUoJ3RocmVlanMnKSkge1xyXG4gICAgICB0aGlzLnRocmVlSnNTZXJ2aWNlLnN0YXJ0VGFnQWxpZ25tZW50KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjYW5jZWxUaHJlZUpzVGFnQWxpZ25tZW50KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY2hlY2tNb2RlKCd0aHJlZWpzJykpIHtcclxuICAgICAgdGhpcy50aHJlZUpzU2VydmljZS5jYW5jZWxUYWdBbGlnbm1lbnQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCB0aHJlZUpzQWxpZ25tZW50UHJvZ3Jlc3MkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMudGhyZWVKc1NlcnZpY2UuYWxpZ25tZW50UHJvZ3Jlc3MkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU29sdmVzIHRoZSBhbGlnbm1lbnQgYW5kIGFwcGxpZXMgaXQgdG8gdGhlIHNjZW5lLCByZXR1cm5pbmcgaXQgYXMgdGhlIEpTT04gdG8gc3RvcmUgaW4gdGhlXHJcbiAgICogY2FwdHVyZSdzIG1ldGFkYXRhLiBOdWxsIG1lYW5zIHRoZSB0aHJlZSB0YWdzIHdlcmUgY29sbGluZWFyIGFuZCBub3RoaW5nIHdhcyBhcHBsaWVkLlxyXG4gICAqL1xyXG4gIHNvbHZlVGhyZWVKc1RhZ0FsaWdubWVudChleGlzdGluZ01ldGFkYXRhPzogc3RyaW5nKTogeyBhbGlnbm1lbnQ6IGFueTsgbWV0YWRhdGE6IHN0cmluZyB9IHwgbnVsbCB7XHJcbiAgICBpZiAoIXRoaXMuY2hlY2tNb2RlKCd0aHJlZWpzJykpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBjb25zdCBhbGlnbm1lbnQgPSB0aGlzLnRocmVlSnNTZXJ2aWNlLnNvbHZlQWxpZ25tZW50RnJvbVBhaXJzKCk7XHJcbiAgICBpZiAoIWFsaWdubWVudCkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIC8vIE1lcmdlZCBpbnRvIHdoYXRldmVyIHRoZSBjYXB0dXJlIGFscmVhZHkgc3RvcmVzLCBzbyBhbiBleGlzdGluZyBjYW1lcmEgcGxhY2VtZW50IHN1cnZpdmVzLlxyXG4gICAgbGV0IHN0b3JlZDogYW55ID0ge307XHJcbiAgICB0cnkge1xyXG4gICAgICBzdG9yZWQgPSBleGlzdGluZ01ldGFkYXRhID8gSlNPTi5wYXJzZShleGlzdGluZ01ldGFkYXRhKSA6IHt9O1xyXG4gICAgfSBjYXRjaCB7XHJcbiAgICAgIHN0b3JlZCA9IHt9O1xyXG4gICAgfVxyXG4gICAgc3RvcmVkLmFsaWdubWVudCA9IGFsaWdubWVudDtcclxuICAgIHJldHVybiB7IGFsaWdubWVudCwgbWV0YWRhdGE6IEpTT04uc3RyaW5naWZ5KHN0b3JlZCkgfTtcclxuICB9XHJcblxyXG4gIC8qKiBTaG93cyBvciBoaWRlcyBhIHNpbmdsZSBUaHJlZS5qcyB0YWcuICovXHJcbiAgc2V0VGhyZWVKc1RhZ1Zpc2liaWxpdHkoZWxlbWVudElkOiBzdHJpbmcsIHZpc2libGU6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmNoZWNrTW9kZSgndGhyZWVqcycpKSB7XHJcbiAgICAgIHRoaXMudGhyZWVKc1NlcnZpY2Uuc2V0VGFnVmlzaWJpbGl0eShlbGVtZW50SWQsIHZpc2libGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgYWN0aW9uX2RlbGV0ZV9lbGVtZW50KGVsZW1lbnQ6IERiT2JqZWN0VHlwZSkge1xyXG4gICAgLy8gTWF0dGVycG9ydFxyXG4gICAgaWYgKHRoaXMuY2hlY2tNb2RlKCdNYXR0ZXJwb3J0JykpIHtcclxuICAgICAgYXdhaXQgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5kZWxldGVNYXR0ZXJ0YWdGb3JPYmplY3QoZWxlbWVudC5pZCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jaGVja01vZGUoJ3RocmVlanMnKSkge1xyXG4gICAgICB0aGlzLnRocmVlSnNTZXJ2aWNlLnJlbW92ZVRhZyhlbGVtZW50LmlkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBFbWl0cyB3aGVuIGEgVGhyZWUuanMgbW9kZWwgbG9hZCBhY3R1YWxseSBzdG9wcGVkIHNob3J0LCByYXRoZXIgdGhhbiBtZXJlbHkgYmVpbmcgYXNrZWQgdG8uICovXHJcbiAgZ2V0IHRocmVlSnNNb2RlbExvYWRDYW5jZWxsZWQkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMudGhyZWVKc1NlcnZpY2UubW9kZWxMb2FkQ2FuY2VsbGVkJDtcclxuICB9XHJcblxyXG4gIC8qKiBTdG9wcyB0aGUgVGhyZWUuanMgbW9kZWwgZG93bmxvYWQgaW4gcHJvZ3Jlc3MuICovXHJcbiAgY2FuY2VsVGhyZWVKc01vZGVsTG9hZCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmNoZWNrTW9kZSgndGhyZWVqcycpKSB7XHJcbiAgICAgIHRoaXMudGhyZWVKc1NlcnZpY2UuY2FuY2VsTW9kZWxMb2FkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogRW1pdHMgYSB0YWcncyBsYWJlbCB3aGlsZSB0aGUgcG9pbnRlciBpcyBvdmVyIGl0IGluIHRoZSBUaHJlZS5qcyBzY2VuZS4gKi9cclxuICBnZXQgdGhyZWVKc1RhZ0hvdmVyZWQkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMudGhyZWVKc1NlcnZpY2UudGFnSG92ZXJlZCQ7XHJcbiAgfVxyXG5cclxuICAvKiogRW1pdHMgdGhlIGVsZW1lbnQgaWQgb2YgYSB0YWcgY2xpY2tlZCBpbiB0aGUgVGhyZWUuanMgc2NlbmUuICovXHJcbiAgZ2V0IHRocmVlSnNUYWdDbGlja2VkJCgpIHtcclxuICAgIHJldHVybiB0aGlzLnRocmVlSnNTZXJ2aWNlLnRhZ0NsaWNrZWQkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQXBwbGllcyB0aGUgdmlzaXQncyBzdG9yZWQgdGFnIGFsaWdubWVudCwgbWFwcGluZyBjYXB0dXJlZCB0YWcgY29vcmRpbmF0ZXMgb250byB0aGlzIG1vZGVsLlxyXG4gICAqXHJcbiAgICogU2FmZSB0byBjYWxsIGJlZm9yZSB0aGUgbW9kZWwgb3IgYW55IHRhZyBleGlzdHM6IGl0IGlzIGEgdHJhbnNmb3JtIG9uIHRoZSBncm91cCBib3RoIGVuZCB1cFxyXG4gICAqIHVuZGVyLCBzbyBpdCBhcHBsaWVzIHRvIHdoYXRldmVyIGFycml2ZXMgbGF0ZXIuXHJcbiAgICovXHJcbiAgc2V0VGhyZWVKc1RhZ0FsaWdubWVudEZyb21NZXRhZGF0YShtZXRhZGF0YTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuY2hlY2tNb2RlKCd0aHJlZWpzJykpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy50aHJlZUpzU2VydmljZS5zZXRUYWdBbGlnbm1lbnQocGFyc2VUaHJlZUpzUGxhY2VtZW50KG1ldGFkYXRhKT8uYWxpZ25tZW50ID8/IG51bGwpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRW5hYmxlIHRhZyBwbGFjZW1lbnQgbWVudSB0byBhZGQgYSBuZXcgZWxlbWVudCBkZXBlbmRpbmcgb24gaXRzIHR5cGUgKFRJQ0tFVCwgREFUQSwgRVFVSVBNRU5UIGV0YylcclxuICAgKi9cclxuICBhc3luYyBhY3Rpb25BZGROZXdFbGVtZW50VG9WaWV3ZXIocG9pVHlwZTogUG9pVHlwZSkge1xyXG4gICAgdGhpcy5hY3Rpb25fdG9vbGJveF9pbnNpZGVfdmlldygpO1xyXG5cclxuICAgIC8vIE1hdHRlcnBvcnRcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5jaGVja01vZGUoJ01hdHRlcnBvcnQnKSAmJlxyXG4gICAgICB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmdldEludGVyYWN0aW9uTW9kZSgpID09PSBWaWV3ZXJJbnRlcmFjdGlvbnMuREVGQVVMVFxyXG4gICAgKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMubWF0dGVycG9ydFNlcnZpY2UuYWRkTWF0dGVydGFnV2hlbkFkZGluZyhwb2lUeXBlKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNoZWNrTW9kZSgndGhyZWVqcycpKSB7XHJcbiAgICAgIHRoaXMudGhyZWVKc1NlcnZpY2Uuc3RhcnRUYWdQbGFjZW1lbnQocG9pVHlwZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMYXVuY2hlcyB0aGUgcmVwb3NpdGlvbmluZyBvZiBhbiBleGlzdGluZyBNYXR0ZXJ0YWcgcmVsYXRlZCB0byBwYXJhbWV0ZXIgb2JqZWN0XHJcbiAgICogQHBhcmFtIGVsZW1lbnQgb2JqZWN0IChUSUNLRVQsIEVRVUlQTUVOVCwgRkVBVFVSRSwgZXRjKVxyXG4gICAqIEBwYXJhbSBwb2lUeXBlIHR5cGUgb2Ygb2JqZWN0XHJcbiAgICovXHJcbiAgYXN5bmMgYWN0aW9uUmVwb3NpdGlvbkVsZW1lbnRJblZpZXdlcihcclxuICAgIGVsZW1lbnQ6IERiT2JqZWN0VHlwZSxcclxuICAgIHBvaVR5cGU6IFBvaVR5cGVcclxuICApIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5jaGVja01vZGUoJ01hdHRlcnBvcnQnKSAmJlxyXG4gICAgICB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmdldEludGVyYWN0aW9uTW9kZSgpID09PSBWaWV3ZXJJbnRlcmFjdGlvbnMuREVGQVVMVFxyXG4gICAgKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMubWF0dGVycG9ydFNlcnZpY2UuYWRkTWF0dGVydGFnV2hlblJlcG9zaXRpb25pbmcocG9pVHlwZSwgZWxlbWVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFbmFibGUgdGlja2V0IHBsYWNlbWVudCBtZW51IHRvIGFkZCBhIG5ldyB0aWNrZXRcclxuICAgKi9cclxuICBhY3Rpb25fY2FuY2VsZWQoKSB7XHJcbiAgICAvLyBNYXR0ZXJwb3J0XHJcbiAgICBpZiAodGhpcy5jaGVja01vZGUoJ01hdHRlcnBvcnQnKSkge1xyXG4gICAgICB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmNhbmNlbEZvbGxvd2luZ0N1cnNvcigpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY2hlY2tNb2RlKCd0aHJlZWpzJykpIHtcclxuICAgICAgdGhpcy50aHJlZUpzU2VydmljZS5jYW5jZWxUYWdQbGFjZW1lbnQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFjdGlvbl90b29sYm94X2luc2lkZV92aWV3KCkge1xyXG4gICAgLy8gTWF0dGVycG9ydFxyXG4gICAgaWYgKHRoaXMuY2hlY2tNb2RlKCdNYXR0ZXJwb3J0JykpIHtcclxuICAgICAgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5hY3Rpb25fdG9vbGJveF9pbnNpZGVfdmlldygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWN0aW9uU2hvd0FsbEZsb29ycygpIHtcclxuICAgIC8vIE1hdHRlcnBvcnRcclxuICAgIGlmICh0aGlzLmNoZWNrTW9kZSgnTWF0dGVycG9ydCcpKSB7XHJcbiAgICAgIHRoaXMubWF0dGVycG9ydFNlcnZpY2UuYWN0aW9uU2hvd0FsbEZsb29ycygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWN0aW9uX3Rvb2xib3hfZG9sbGhvdXNlKCkge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmdldEludGVyYWN0aW9uTW9kZSgpICE9PSBWaWV3ZXJJbnRlcmFjdGlvbnMuREVGQVVMVFxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuYWN0aW9uX2NhbmNlbGVkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5hY3Rpb25fdG9vbGJveF9jYW5jZWxfbWVzdXJlKCk7XHJcbiAgICAvLyBNYXR0ZXJwb3J0XHJcbiAgICBpZiAodGhpcy5jaGVja01vZGUoJ01hdHRlcnBvcnQnKSkge1xyXG4gICAgICB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmFjdGlvbl90b29sYm94X2RvbGxob3VzZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgYWN0aW9uX2Zsb29ycGxhbigpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5nZXRJbnRlcmFjdGlvbk1vZGUoKSAhPT0gVmlld2VySW50ZXJhY3Rpb25zLkRFRkFVTFRcclxuICAgICkge1xyXG4gICAgICB0aGlzLmFjdGlvbl9jYW5jZWxlZCgpO1xyXG4gICAgfVxyXG4gICAgLy8gTWF0dGVycG9ydFxyXG4gICAgaWYgKHRoaXMuY2hlY2tNb2RlKCdNYXR0ZXJwb3J0JykpIHtcclxuICAgICAgYXdhaXQgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5hY3Rpb25fdG9vbGJveF9mbG9vcnBsYW4oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFjdGlvbl90b29sYm94X21lc3VyZSgpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5nZXRJbnRlcmFjdGlvbk1vZGUoKSAhPT0gVmlld2VySW50ZXJhY3Rpb25zLkRFRkFVTFRcclxuICAgICkge1xyXG4gICAgICB0aGlzLmFjdGlvbl9jYW5jZWxlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYWN0aW9uX3Rvb2xib3hfaW5zaWRlX3ZpZXcoKTtcclxuICAgIC8vIE1hdHRlcnBvcnRcclxuICAgIGlmICh0aGlzLmNoZWNrTW9kZSgnTWF0dGVycG9ydCcpKSB7XHJcbiAgICAgIHRoaXMubWF0dGVycG9ydFNlcnZpY2UuYWN0aW9uX3Rvb2xib3hfbWVzdXJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhY3Rpb25fdG9vbGJveF9jYW5jZWxfbWVzdXJlKCkge1xyXG4gICAgLy8gTWF0dGVycG9ydFxyXG4gICAgaWYgKHRoaXMuY2hlY2tNb2RlKCdNYXR0ZXJwb3J0JykpIHtcclxuICAgICAgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5hY3Rpb25fdG9vbGJveF9jYW5jZWxfbWVzdXJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBhY3Rpb25fdXBkYXRlX3BvaShcclxuICAgIHBvaTogUE9JLFxyXG4gICAgaXNWYWxpZDogYm9vbGVhbixcclxuICAgIGVsZW1lbnQ6IERiT2JqZWN0VHlwZVxyXG4gICk6IFByb21pc2U8UE9JPiB7XHJcbiAgICBpZiAodGhpcy5jaGVja01vZGUoJ01hdHRlcnBvcnQnKSkge1xyXG4gICAgICBpZiAoaXNWYWxpZCkge1xyXG4gICAgICAgIGNvbnN0IGxhc3RUYWcgPSB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLm1hdHRlcnRhZ1RvRm9sbG93XHJcbiAgICAgICAgICA/IHRoaXMubWF0dGVycG9ydFNlcnZpY2UubWF0dGVydGFnVG9Gb2xsb3dcclxuICAgICAgICAgIDogdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5nZXRMYXN0VGFnKCk7XHJcbiAgICAgICAgaWYgKCFsYXN0VGFnKSB7XHJcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHBvaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHRhZ0RhdGEgPSB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmdldE1hdHRlclRhZ0RhdGFGb3JNYXR0ZXJ0YWcobGFzdFRhZyk7XHJcbiAgICAgICAgaWYgKCF0YWdEYXRhKSB7XHJcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHBvaSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBwb2lNZXRhZGF0YSA9ICghIXBvaSAmJiBwb2kubWV0YWRhdGEpID8gSlNPTi5wYXJzZShwb2kubWV0YWRhdGEpIDoge307XHJcbiAgICAgICAgcG9pTWV0YWRhdGEubm9ybWFsID0gdGFnRGF0YS5nZXROb3JtYWwoKTtcclxuICAgICAgICBpZiAoIXBvaSkge1xyXG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHBvaUlucHV0ID0ge1xyXG4gICAgICAgICAgaWQ6IHBvaS5pZCxcclxuICAgICAgICAgIGNvb3JkaW5hdGU6IHRhZ0RhdGEuZ2V0Q29vcmRpbmF0ZVN0cmluZygpLFxyXG4gICAgICAgICAgbWF0dGVycG9ydFN3ZWVwSUQ6IHRhZ0RhdGEuZ2V0U3dlZXBJRCgpLFxyXG4gICAgICAgICAgbWV0YWRhdGE6IEpTT04uc3RyaW5naWZ5KHBvaU1ldGFkYXRhKSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IHVwZGF0ZWRQb2k6IFBPSSA9IGF3YWl0IHRoaXMucG9pU2VydmljZS51cGRhdGVQb2kocG9pSW5wdXQpO1xyXG4gICAgICAgIHRhZ0RhdGEuc2V0UG9pKHVwZGF0ZWRQb2kpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMubWF0dGVycG9ydFNlcnZpY2Uuc2V0T2JqZWN0QW5kUG9pSW5UYWcobGFzdFRhZywgZWxlbWVudCwgUG9pVHlwZS5ERVNLLCB1cGRhdGVkUG9pKTtcclxuICAgICAgICBhd2FpdCB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmluamVjdEh0bWxJblRhZyhcclxuICAgICAgICAgIHBvaS50eXBlISxcclxuICAgICAgICAgIGVsZW1lbnQsXHJcbiAgICAgICAgICBsYXN0VGFnXHJcbiAgICAgICAgKTtcclxuICAgICAgICBhd2FpdCB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLnNldFRhZ0ljb25BbmRPcGFjaXR5KGxhc3RUYWcsIHRhZ0RhdGEpO1xyXG4gICAgICAgIHRoaXMubWF0dGVycG9ydFNlcnZpY2UuZ29Ub1RhZyhsYXN0VGFnKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1cGRhdGVkUG9pKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmRlbGV0ZUxhc3RNYXR0ZXJ0YWcoKTtcclxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwb2kpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNoZWNrTW9kZSgndGhyZWVqcycpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNvbW1pdFRocmVlSnNUYWdQbGFjZW1lbnQocG9pLCBpc1ZhbGlkLCBlbGVtZW50KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHBvaSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXcml0ZXMgdGhlIHNwb3QgcGlja2VkIGluIHRoZSBUaHJlZS5qcyBzY2VuZSBpbnRvIHRoZSBQT0ksIG1pcnJvcmluZyB0aGUgTWF0dGVycG9ydCBicmFuY2guXHJcbiAgICpcclxuICAgKiBUaGUgY29vcmRpbmF0ZSBnb2VzIGluIHRoZSBzYW1lIGZpZWxkIGFuZCB0aGUgc2FtZSBzcGFjZSBNYXR0ZXJwb3J0IHdyaXRlcywgd2hpY2ggaXMgd2hhdCBtYWtlc1xyXG4gICAqIGEgdGFnIGNyZWF0ZWQgaGVyZSBzaG93IHVwIGluIHRoZSByaWdodCBwbGFjZSB0aGVyZSAtIGFuZCB0aGUgb3RoZXIgd2F5IHJvdW5kLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgYXN5bmMgY29tbWl0VGhyZWVKc1RhZ1BsYWNlbWVudChcclxuICAgIHBvaTogUE9JLFxyXG4gICAgaXNWYWxpZDogYm9vbGVhbixcclxuICAgIGVsZW1lbnQ6IERiT2JqZWN0VHlwZVxyXG4gICk6IFByb21pc2U8UE9JPiB7XHJcbiAgICBjb25zdCBwbGFjZW1lbnQgPSB0aGlzLnRocmVlSnNTZXJ2aWNlLmdldFBlbmRpbmdUYWdQbGFjZW1lbnQoKTtcclxuICAgIGlmICghaXNWYWxpZCB8fCAhcGxhY2VtZW50IHx8ICFwb2kpIHtcclxuICAgICAgdGhpcy50aHJlZUpzU2VydmljZS5jYW5jZWxUYWdQbGFjZW1lbnQoKTtcclxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwb2kpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHBvaU1ldGFkYXRhID0gcG9pLm1ldGFkYXRhID8gSlNPTi5wYXJzZShwb2kubWV0YWRhdGEpIDoge307XHJcbiAgICBwb2lNZXRhZGF0YS5ub3JtYWwgPSBwbGFjZW1lbnQubm9ybWFsO1xyXG5cclxuICAgIGNvbnN0IHVwZGF0ZWRQb2kgPSBhd2FpdCB0aGlzLnBvaVNlcnZpY2UudXBkYXRlUG9pKHtcclxuICAgICAgaWQ6IHBvaS5pZCxcclxuICAgICAgY29vcmRpbmF0ZTogSlNPTi5zdHJpbmdpZnkocGxhY2VtZW50LnBvc2l0aW9uKSxcclxuICAgICAgbWV0YWRhdGE6IEpTT04uc3RyaW5naWZ5KHBvaU1ldGFkYXRhKSxcclxuICAgICAgLy8gbWF0dGVycG9ydFN3ZWVwSUQgaXMgbGVmdCBhcyBpdCB3YXM6IHRoaXMgdmlld2VyIGhhcyBubyBzd2VlcHMsIGFuZCBNYXR0ZXJwb3J0IGZpbHRlcnMgdGFnXHJcbiAgICAgIC8vIHZpc2liaWxpdHkgYnkgdGhlbSwgc28gY2xlYXJpbmcgaXQgd291bGQgaGlkZSB0aGUgdGFnIG92ZXIgdGhlcmUuXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnRocmVlSnNTZXJ2aWNlLnVwc2VydFRhZyh7XHJcbiAgICAgIGlkOiBlbGVtZW50LmlkLFxyXG4gICAgICBwb3NpdGlvbjogcGxhY2VtZW50LnBvc2l0aW9uLFxyXG4gICAgICBwb2lUeXBlOiB1cGRhdGVkUG9pPy50eXBlID8/IHBvaS50eXBlLFxyXG4gICAgICBpY29uVXJsOiB1cGRhdGVkUG9pPy50YWdJY29uID8gYXdhaXQgZ2V0U2lnbmVkRmlsZSh1cGRhdGVkUG9pLnRhZ0ljb24pIDogbnVsbCxcclxuICAgIH0pO1xyXG4gICAgdGhpcy50aHJlZUpzU2VydmljZS5jYW5jZWxUYWdQbGFjZW1lbnQoKTtcclxuXHJcbiAgICByZXR1cm4gdXBkYXRlZFBvaTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgdGhlIFBPSSBmb3IgYW4gZWxlbWVudCBqdXN0IHBsYWNlZCBpbiB0aGUgVGhyZWUuanMgc2NlbmUuXHJcbiAgICpcclxuICAgKiBUaGUgTWF0dGVycG9ydCBwYXRoIHJlYWNoZXMgdGhlIHNhbWUgcmVzdWx0IHRocm91Z2ggaXRzIHRhZyBkaWN0aW9uYXJ5IC0gdGhlIHRhZyBleGlzdHMgZmlyc3RcclxuICAgKiBhbmQgY2FycmllcyB0aGUgY29vcmRpbmF0ZXMuIFRocmVlLmpzIGhhcyBubyBzdWNoIG9iamVjdCwgc28gdGhlIHBsYWNlbWVudCBjYXB0dXJlZCBhdCBjbGlja1xyXG4gICAqIHRpbWUgaXMgdGhlIG9ubHkgcmVjb3JkIG9mIHdoZXJlIHRoZSB1c2VyIHBvaW50ZWQsIGFuZCBpdCBoYXMgdG8gYmVjb21lIGEgUE9JIGhlcmUgb3IgaXQgaXNcclxuICAgKiBsb3N0IHdoZW4gdGhlIGZvcm0gY2xvc2VzLlxyXG4gICAqXHJcbiAgICogUmV0dXJucyBudWxsIHdoZW4gdGhlcmUgaXMgbm8gcGVuZGluZyBwbGFjZW1lbnQsIHdoaWNoIGlzIHRoZSBub3JtYWwgY2FzZSBpbiBNYXR0ZXJwb3J0IG1vZGUuXHJcbiAgICovXHJcbiAgYXN5bmMgY3JlYXRlUG9pRm9yVGhyZWVKc1BsYWNlbWVudChlbGVtZW50OiBEYk9iamVjdFR5cGUsIHBvaVR5cGU6IFBvaVR5cGUpOiBQcm9taXNlPFBPSSB8IG51bGw+IHtcclxuICAgIGlmICghdGhpcy5jaGVja01vZGUoJ3RocmVlanMnKSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGNvbnN0IHBsYWNlbWVudCA9IHRoaXMudGhyZWVKc1NlcnZpY2UuZ2V0UGVuZGluZ1RhZ1BsYWNlbWVudCgpO1xyXG4gICAgaWYgKCFwbGFjZW1lbnQgfHwgIWVsZW1lbnQ/LmlkKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHBvaSA9IGF3YWl0IHRoaXMucG9pU2VydmljZS5jcmVhdGVQT0lGb3JTcGFjZUlEKHtcclxuICAgICAgY29vcmRpbmF0ZTogSlNPTi5zdHJpbmdpZnkocGxhY2VtZW50LnBvc2l0aW9uKSxcclxuICAgICAgdHlwZTogcG9pVHlwZSxcclxuICAgICAgZWxlbWVudElEOiBlbGVtZW50LmlkLFxyXG4gICAgICBtZXRhZGF0YTogSlNPTi5zdHJpbmdpZnkoeyBub3JtYWw6IHBsYWNlbWVudC5ub3JtYWwgfSksXHJcbiAgICB9IGFzIFBPSSk7XHJcblxyXG4gICAgLy8gRHJhdyBpdCBzdHJhaWdodCBhd2F5IHJhdGhlciB0aGFuIHdhaXRpbmcgZm9yIHRoZSBuZXh0IHJlZnJlc2gsIHNvIHRoZSB1c2VyIHNlZXMgd2hlcmUgdGhlXHJcbiAgICAvLyB0aGluZyB0aGV5IGp1c3QgY3JlYXRlZCBlbmRlZCB1cC4gVGhyb3VnaCB0aGUgc2FtZSBwYXRoIHRoZSByZWZyZXNoIHVzZXMsIHNvIGl0IGFycml2ZXMgd2l0aFxyXG4gICAgLy8gdGhlIHR5cGUncyBpY29uIGluc3RlYWQgb2YgdGhlIGJhcmUgbWFya2VyIC0gdGhlIGRpZmZlcmVuY2Ugd2FzIHZpc2libGUgdW50aWwgdGhlIG5leHQgcmVsb2FkLlxyXG4gICAgYXdhaXQgdGhpcy5hZGRUaHJlZUpzVGFnRnJvbVBPSShlbGVtZW50LCBwb2kpO1xyXG4gICAgdGhpcy50aHJlZUpzU2VydmljZS5jYW5jZWxUYWdQbGFjZW1lbnQoKTtcclxuICAgIHJldHVybiBwb2k7XHJcbiAgfVxyXG5cclxuICAvKiogRW1pdHMgd2hlbiBhIHRhZyBpcyBkcm9wcGVkIG9uIHRoZSBtb2RlbCBpbiB0aGUgVGhyZWUuanMgc2NlbmUuICovXHJcbiAgZ2V0IHRocmVlSnNUYWdQbGFjZWQkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMudGhyZWVKc1NlcnZpY2UudGFnUGxhY2VkJDtcclxuICB9XHJcblxyXG4gIC8qKiBFbWl0cyB3aGVuIHRoZSBjYWxpYnJhdGlvbiB3YWxrdGhyb3VnaCBpcyBhYmFuZG9uZWQsIGluY2x1ZGluZyB2aWEgRXNjYXBlLiAqL1xyXG4gIGdldCB0aHJlZUpzQWxpZ25tZW50Q2FuY2VsbGVkJCgpIHtcclxuICAgIHJldHVybiB0aGlzLnRocmVlSnNTZXJ2aWNlLmFsaWdubWVudENhbmNlbGxlZCQ7XHJcbiAgfVxyXG5cclxuICAvKiogTGVhdmVzIFRocmVlLmpzIHRhZyBwbGFjZW1lbnQgbW9kZSB3aXRob3V0IHBsYWNpbmcgYW55dGhpbmcuICovXHJcbiAgY2FuY2VsVGhyZWVKc1RhZ1BsYWNlbWVudCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmNoZWNrTW9kZSgndGhyZWVqcycpKSB7XHJcbiAgICAgIHRoaXMudGhyZWVKc1NlcnZpY2UuY2FuY2VsVGFnUGxhY2VtZW50KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBlZGl0T25seVRhZ1N0eWxlRm9yUG9pKHBvaTogUE9JLCBvYmplY3Q6IERiT2JqZWN0VHlwZSkge1xyXG4gICAgaWYgKHRoaXMuY2hlY2tNb2RlKCdNYXR0ZXJwb3J0JykpIHtcclxuICAgICAgY29uc3QgdGFnRGF0YSA9IHRoaXMubWF0dGVycG9ydFNlcnZpY2UuZ2V0VGFnRnJvbUVsZW1lbnRJZChwb2kuZWxlbWVudElEKTtcclxuICAgICAgaWYgKHRhZ0RhdGEudGFnKSB7XHJcbiAgICAgICAgY29uc3QgbWF0dGVydGFnRGF0YSA9IHRoaXMubWF0dGVycG9ydFNlcnZpY2UuZ2V0TWF0dGVyVGFnRGF0YUZvck1hdHRlcnRhZyhcclxuICAgICAgICAgIHRhZ0RhdGEudGFnXHJcbiAgICAgICAgKTtcclxuICAgICAgICBtYXR0ZXJ0YWdEYXRhLnNldE9iamVjdChvYmplY3QsIFBvaVR5cGUuUk9PTSk7XHJcbiAgICAgICAgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5zZXRUYWdJY29uQW5kT3BhY2l0eSh0YWdEYXRhLnRhZywgbWF0dGVydGFnRGF0YSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFkZEljb25BbmRTZXRGb3JQb2kocG9pOiBQT0ksIGljb25QYXRoOiBzdHJpbmcpIHtcclxuICAgIGlmICh0aGlzLmNoZWNrTW9kZSgnTWF0dGVycG9ydCcpKSB7XHJcbiAgICAgIGNvbnN0IHRhZ0RhdGEgPSB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmdldFRhZ0Zyb21FbGVtZW50SWQocG9pLmVsZW1lbnRJRCk7XHJcbiAgICAgIGlmICh0YWdEYXRhLnRhZykge1xyXG4gICAgICAgIHRoaXMubWF0dGVycG9ydFNlcnZpY2UuYWRkTmV3SWNvbkFuZFNldEZvclRhZyh0YWdEYXRhLnRhZywgaWNvblBhdGgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VUb1JlZ2lzdHJlZEljb25Gb3JQb2kocG9pOiBQT0ksIGljb25OYW1lOiBzdHJpbmcpIHtcclxuICAgIGlmICh0aGlzLmNoZWNrTW9kZSgnTWF0dGVycG9ydCcpKSB7XHJcbiAgICAgIGNvbnN0IHRhZ0RhdGEgPSB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmdldFRhZ0Zyb21FbGVtZW50SWQocG9pLmVsZW1lbnRJRCk7XHJcbiAgICAgIGlmICh0YWdEYXRhLnRhZykge1xyXG4gICAgICAgIHRoaXMubWF0dGVycG9ydFNlcnZpY2Uuc2V0UmVnaXN0cmVkSWNvbkZvclRhZyh0YWdEYXRhLnRhZywgaWNvbk5hbWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyB1cGRhdGVIdG1sVGFnRm9yUG9pV2l0aE9iamVjdChwb2k6IFBPSSwgb2JqZWN0OiBEYk9iamVjdFR5cGUpIHtcclxuICAgIGlmICh0aGlzLmNoZWNrTW9kZSgnTWF0dGVycG9ydCcpKSB7XHJcbiAgICAgIGNvbnN0IHRhZ0RhdGEgPSB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmdldFRhZ0Zyb21FbGVtZW50SWQocG9pLmVsZW1lbnRJRCk7XHJcbiAgICAgIGlmICh0YWdEYXRhLnRhZykge1xyXG4gICAgICAgIGF3YWl0IHRoaXMubWF0dGVycG9ydFNlcnZpY2UudXBkYXRlSW5qZWN0ZWRIdG1sRm9yVGFnSUQoXHJcbiAgICAgICAgICB0YWdEYXRhLnRhZyxcclxuICAgICAgICAgIG9iamVjdCxcclxuICAgICAgICAgIHBvaS50eXBlXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTW92ZSBhbiBleGlzdGluZyBwb2kgaW4gTWF0dGVycG9ydFxyXG4gICAqIEBwYXJhbSBwb2lcclxuICAgKiBAcGFyYW0gZWxlbWVudFxyXG4gICAqL1xyXG4gIGFzeW5jIGFjdGlvbl9tb3ZlX3BvaV92aXN1YWxseShcclxuICAgIHBvaTogUE9JLFxyXG4gICAgZWxlbWVudDogVGlja2V0IHwgRmVhdHVyZSB8IEVxdWlwbWVudCB8IENvbW1lbnRcclxuICApIHtcclxuICAgIGF3YWl0IHRoaXMuYWN0aW9uX2RlbGV0ZV9lbGVtZW50KGVsZW1lbnQpO1xyXG4gICAgYXdhaXQgdGhpcy5hY3Rpb25BZGRPYmplY3RGcm9tUE9JKGVsZW1lbnQsIHBvaSk7XHJcbiAgfVxyXG5cclxuICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICBDdXBpeFxyXG4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG5cclxuICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICBNYXR0ZXJwb3J0XHJcbiAgICBodHRwczovL21hdHRlcnBvcnQuZ2l0aHViLmlvL3Nob3djYXNlLXNkay9kb2NzL3Nkay9yZWZlcmVuY2UvY3VycmVudC9tb2R1bGVzL21hdHRlcnRhZy5odG1sI2FkZFxyXG4gICAgaHR0cHM6Ly9tYXR0ZXJwb3J0LmdpdGh1Yi5pby9zaG93Y2FzZS1zZGsvZG9jcy9zZGsvcmVmZXJlbmNlL2N1cnJlbnQvbW9kdWxlcy9tYXR0ZXJ0YWcuaHRtbCNyZW1vdmVcclxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG5cclxuICBpbml0VGhyZWVKcyhjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuY2hlY2tNb2RlKCd0aHJlZWpzJykpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy50aHJlZUpzU2VydmljZS5pbml0KGNhbnZhcyk7XHJcbiAgICAvLyBUaGUgdGFnIHBpcGVsaW5lIGlzIGdhdGVkIG9uIHRoaXMgZmxhZywgd2hpY2ggdW50aWwgbm93IG9ubHkgdGhlIE1hdHRlcnBvcnQgU0RLIHNldC4gQVxyXG4gICAgLy8gVGhyZWUuanMgdmlzaXQgbmV2ZXIgcmVhY2hlcyB0aGF0IGNvZGUsIHNvIGV2ZXJ5IHRhZyB3YXMgZHJvcHBlZCBiZWZvcmUgaXQgY291bGQgYmUgZHJhd24uXHJcbiAgICB0aGlzLnNob3dpbmdWaWV3ZXIgPSB0cnVlO1xyXG5cclxuICAgIC8vIEV2ZXJ5dGhpbmcgdGhhdCBsb2FkcyBkYXRhIGZvciBhIHNwYWNlIC0gdGlja2V0cywgZXF1aXBtZW50cywgZmVhdHVyZXMsIG1lYXN1cmVtZW50cyAtIGhhbmdzXHJcbiAgICAvLyBvZmYgdGhpcyBldmVudCwgd2hpY2ggTWF0dGVycG9ydCByYWlzZXMgb25jZSBpdHMgU0RLIHN0YXJ0cyBwbGF5aW5nLiBBIFRocmVlLmpzIHZpc2l0IG5ldmVyXHJcbiAgICAvLyB0b3VjaGVzIHRoZSBTREssIHNvIG5vdGhpbmcgZXZlciBhbm5vdW5jZWQgdGhlIHNwYWNlIGFuZCBldmVyeSBsaXN0IGNhbWUgYmFjayBlbXB0eS5cclxuICAgIGlmICh0aGlzLmN1cnJlbnRTcGFjZUlEKSB7XHJcbiAgICAgIHRoaXMudmlld2VySXNPbi5uZXh0KHtcclxuICAgICAgICBzcGFjZUlEOiB0aGlzLmN1cnJlbnRTcGFjZUlELFxyXG4gICAgICAgIG1vZGVsM0Q6IG51bGwsXHJcbiAgICAgICAgc3dlZXA6IG51bGwsXHJcbiAgICAgICAgcm90YXRpb246IG51bGwsXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmRhdGFJc0xvYWRlZC5uZXh0KHRydWUpO1xyXG4gICAgICB0aGlzLmlzTG9hZGVkID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExvYWRzIGEgM0QgbW9kZWwgaW50byB0aGUgVGhyZWUuanMgc2NlbmUgKEdMVEYpLlxyXG4gICAqIE9ubHkgd29ya3Mgd2hlbiB0aGUgdmlld2VyIGlzIGluICd0aHJlZWpzJyBtb2RlLlxyXG4gICAqL1xyXG4gIGxvYWRHTFRGTW9kZWwodXJsOiBzdHJpbmcsIGNhbWVyYVBvc2l0aW9uPzoge3g6IG51bWJlciwgeTogbnVtYmVyLCB6OiBudW1iZXJ9LCByb3RhdGlvbj86IHt4OiBudW1iZXIsIHk6IG51bWJlciwgejogbnVtYmVyfSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY2hlY2tNb2RlKCd0aHJlZWpzJykpIHtcclxuICAgICAgdGhpcy50aHJlZUpzU2VydmljZS5sb2FkR0xURk1vZGVsKHVybCwgY2FtZXJhUG9zaXRpb24sIHJvdGF0aW9uKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExvYWRzIGEgR0xCIHN0b3JlZCBpbiBTMywgZ2l2ZW4gaXRzIGtleSAoZS5nLiBgdmlzaXRzLzxpZD4vbW9kZWwuZ2xiYCkuXHJcbiAgICpcclxuICAgKiBSZXNvbHZlcyB0aGUga2V5IHRvIGEgc2lnbmVkIFVSTCBmaXJzdCwgdGhlbiBsb2FkcyBpdCBsaWtlIGFueSBvdGhlci4gVGhlIHNpZ25lZCBVUkwgb25seVxyXG4gICAqIGNvdmVycyBhdXRoZW50aWNhdGlvbiAtIHRoZSBidWNrZXQgc3RpbGwgbmVlZHMgYSBDT1JTIHJ1bGUgYWxsb3dpbmcgR0VUIGZyb20gdGhlIGFwcCdzIG9yaWdpbixcclxuICAgKiBvciB0aGUgYnJvd3NlciBibG9ja3MgdGhlIGRvd25sb2FkIGJlZm9yZSBpdCBzdGFydHMuXHJcbiAgICpcclxuICAgKiBgcGxhY2VtZW50TWV0YWRhdGFgIGlzIHRoZSBjYXB0dXJlJ3Mgc3RvcmVkIHBsYWNlbWVudDsgd2hlbiBhYnNlbnQgb3IgdW51c2FibGUgdGhlIHZpZXdlciBmYWxsc1xyXG4gICAqIGJhY2sgdG8gZnJhbWluZyB0aGUgbW9kZWwgYXV0b21hdGljYWxseS5cclxuICAgKi9cclxuICBhc3luYyBsb2FkR0xURk1vZGVsRnJvbVMzKGtleTogc3RyaW5nLCBwbGFjZW1lbnRNZXRhZGF0YT86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKCF0aGlzLmNoZWNrTW9kZSgndGhyZWVqcycpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIC8vIEEga2V5IHVuZGVyIGFzc2V0cy8gaXMgc2VydmVkIGJ5IHRoZSBhcHAgaXRzZWxmLCBzbyBpdCBuZWVkcyBubyBzaWduaW5nLiBUaGlzIGlzIHdoYXQgbGV0cyBhXHJcbiAgICAvLyBtb2RlbCBidW5kbGVkIHdpdGggdGhlIGJ1aWxkIHN0YW5kIGluIGZvciBvbmUgaW4gUzMgd2hpbGUgdGhlIHR3byBhcmUgb3RoZXJ3aXNlIGlkZW50aWNhbC5cclxuICAgIGNvbnN0IGlzTG9jYWxBc3NldCA9IGtleS5zdGFydHNXaXRoKCdhc3NldHMvJyk7XHJcbiAgICBjb25zdCB1cmwgPSBpc0xvY2FsQXNzZXQgPyBrZXkgOiBhd2FpdCBnZXRTaWduZWRGaWxlKGtleSk7XHJcbiAgICBpZiAoIXVybCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGBWaWV3ZXJTZXJ2aWNlOiBjb3VsZCBub3QgcmVzb2x2ZSBhIHNpZ25lZCBVUkwgZm9yIHRoZSAzRCBtb2RlbCBhdCBcIiR7a2V5fVwiLmApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBwbGFjZW1lbnQgPSBwYXJzZVRocmVlSnNQbGFjZW1lbnQocGxhY2VtZW50TWV0YWRhdGEpO1xyXG4gICAgLy8gVGhlIGtleSwgbm90IHRoZSBzaWduZWQgVVJMLCBpcyB3aGF0IGlkZW50aWZpZXMgdGhlIG1vZGVsIGFjcm9zcyBsb2FkcyAtIHRoZSBzaWduYXR1cmUgbWFrZXNcclxuICAgIC8vIGV2ZXJ5IFVSTCB1bmlxdWUsIHdoaWNoIGlzIGV4YWN0bHkgd2h5IHRoZSBicm93c2VyJ3Mgb3duIGNhY2hlIG5ldmVyIGhlbHBzIGhlcmUuXHJcbiAgICB0aGlzLnRocmVlSnNTZXJ2aWNlLmxvYWRHTFRGTW9kZWwodXJsLCBwbGFjZW1lbnQ/LmNhbWVyYVBvc2l0aW9uLCBwbGFjZW1lbnQ/LnJvdGF0aW9uLCBrZXkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTG9hZHMgYSAzRCBtb2RlbCBpbnRvIHRoZSBUaHJlZS5qcyBzY2VuZSAoT0JKKS5cclxuICAgKi9cclxuICBsb2FkT2JqTW9kZWwobXRsVXJsOiBzdHJpbmcsIG9ialVybDogc3RyaW5nLCBjYW1lcmFQb3NpdGlvbj86IHt4OiBudW1iZXIsIHk6IG51bWJlciwgejogbnVtYmVyfSwgcm90YXRpb24/OiB7eDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlcn0pOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmNoZWNrTW9kZSgndGhyZWVqcycpKSB7XHJcbiAgICAgIHRoaXMudGhyZWVKc1NlcnZpY2UubG9hZE9iak1vZGVsKG10bFVybCwgb2JqVXJsLCBjYW1lcmFQb3NpdGlvbiwgcm90YXRpb24pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IHRocmVlSnNPYmplY3RIb3ZlcmVkJCgpIHtcclxuICAgIHJldHVybiB0aGlzLnRocmVlSnNTZXJ2aWNlLm9iamVjdEhvdmVyZWQkO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHRocmVlSnNPYmplY3RDbGlja2VkJCgpIHtcclxuICAgIHJldHVybiB0aGlzLnRocmVlSnNTZXJ2aWNlLm9iamVjdENsaWNrZWQkO1xyXG4gIH1cclxuXHJcbiAgLyoqIEVtaXRzIHRydWUgd2hpbGUgYSBoZWF2eSAub2JqIGZpbGUgaXMgYmVpbmcgcGFyc2VkIChpbiBhIHdvcmtlciwgd2hlbiBhdmFpbGFibGUpLCBmYWxzZSBvbmNlIGRvbmUuICovXHJcbiAgZ2V0IHRocmVlSnNNb2RlbExvYWRpbmckKCkge1xyXG4gICAgcmV0dXJuIHRoaXMudGhyZWVKc1NlcnZpY2UubW9kZWxMb2FkaW5nJDtcclxuICB9XHJcblxyXG4gIC8qKiBEb3dubG9hZCBwcm9ncmVzcyBmb3IgR0xCIG1vZGVscyBhcyBhIDAtMSBmcmFjdGlvbiwgb3IgbnVsbCB3aGVuIHRoZSBzaXplIGlzbid0IGtub3duIHVwZnJvbnQuICovXHJcbiAgZ2V0IHRocmVlSnNNb2RlbExvYWRQcm9ncmVzcyQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy50aHJlZUpzU2VydmljZS5tb2RlbExvYWRQcm9ncmVzcyQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZWdpc3RlcnMgdGhlIFdlYiBXb3JrZXIgdXNlZCB0byBwYXJzZSBoZWF2eSAub2JqIGZpbGVzIG9mZiB0aGUgbWFpbiB0aHJlYWQuXHJcbiAgICogTXVzdCBiZSBjcmVhdGVkIGJ5IHRoZSBhcHAgKHNlZSBvYmotcGFyc2VyLndvcmtlci50cyksIHNpbmNlIHRoaXMgbGlicmFyeSBjYW4ndCBidW5kbGUgd29ya2VyIGZpbGVzLlxyXG4gICAqL1xyXG4gIHNldE9ialBhcnNlcldvcmtlcih3b3JrZXI6IFdvcmtlcik6IHZvaWQge1xyXG4gICAgdGhpcy50aHJlZUpzU2VydmljZS5zZXRPYmpQYXJzZXJXb3JrZXIod29ya2VyKTtcclxuICB9XHJcblxyXG4gIGFkZFRocmVlSnNPYmplY3RzKG9ianM6IGFueVtdKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jaGVja01vZGUoJ3RocmVlanMnKSkge1xyXG4gICAgICB0aGlzLnRocmVlSnNTZXJ2aWNlLnVwZGF0ZU9ianNUb1NjZW5lKG9ianMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgaW5pdE1hdHRlcnBvcnRTZGsoXHJcbiAgICBzcGFjZUlEOiBzdHJpbmcsXHJcbiAgICBtb2RlbDNEOiBzdHJpbmcsXHJcbiAgICB0YWdTZXJ2aWNlOiBCYXNlVGFnU2VydmljZSxcclxuICAgIG1vZHVsZTogU3BNb2R1bGUgPSBTcE1vZHVsZS5JTU1PXHJcbiAgKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLmlzTG9hZGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmN1cnJlbnRTcGFjZUlEID0gc3BhY2VJRDtcclxuICAgIGlmICh0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLnNkaykge1xyXG4gICAgICBhd2FpdCB0aGlzLmNsZWFyQWxsKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5tYXR0ZXJwb3J0U2VydmljZVxyXG4gICAgICAuaW5pdFNkayh0YWdTZXJ2aWNlLCBtb2R1bGUpXHJcbiAgICAgIC50aGVuKGFzeW5jIChyZXN1bHQpID0+IHtcclxuICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICBjb25zdCB7IHNkayB9ID0gdGhpcy5tYXR0ZXJwb3J0U2VydmljZTtcclxuXHJcbiAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChbXHJcbiAgICAgICAgICAgIHNkay5TY2VuZS5yZWdpc3RlcihzZWN1cml0eUNhbWVyYVR5cGUsIG1ha2VTZWN1cml0eUNhbWVyYS5iaW5kKHNkay5TY2VuZSkpLFxyXG4gICAgICAgICAgICBzZGsuU2NlbmUucmVnaXN0ZXIoVmlld0ZydXN0dW1NZXNoVHlwZSwgbWFrZVZpZXdGcnVzdHVtTWVzaC5iaW5kKHNkay5TY2VuZSkpXHJcbiAgICAgICAgICBdKTtcclxuXHJcbiAgICAgICAgICB0aGlzLnNob3dpbmdWaWV3ZXIgPSB0cnVlO1xyXG5cclxuICAgICAgICAgIHNkay5BcHAuc3RhdGUuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICBmdW5jdGlvbiAoYXBwU3RhdGUpIHtcclxuICAgICAgICAgICAgICBjb25zb2xlLmRlYnVnKCdUaGUgY3VycmVudCBwaGFzZTogJywgYXBwU3RhdGUucGhhc2UpO1xyXG4gICAgICAgICAgICAgIGlmIChhcHBTdGF0ZS5waGFzZSA9PT0gc2RrLkFwcC5QaGFzZS5QTEFZSU5HKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnVGhlIGFwcCBpcyBwbGF5aW5nJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dpbmdWaWV3ZXIgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy52aWV3ZXJJc09uLm5leHQoe1xyXG4gICAgICAgICAgICAgICAgICBzcGFjZUlELFxyXG4gICAgICAgICAgICAgICAgICBtb2RlbDNELFxyXG4gICAgICAgICAgICAgICAgICBzd2VlcDogdGhpcy5zd2VlcFRvTW92ZSxcclxuICAgICAgICAgICAgICAgICAgcm90YXRpb246IHRoaXMucm90YXRpb25Ub01vdmUsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YUlzTG9hZGVkLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3dlZXBUb01vdmUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb3RhdGlvblRvTW92ZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LmJpbmQodGhpcylcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgdGhpcy52aWV3ZXJJc09uLm5leHQoe1xyXG4gICAgICAgICAgICBzcGFjZUlELFxyXG4gICAgICAgICAgICBtb2RlbDNELFxyXG4gICAgICAgICAgICBzd2VlcDogdGhpcy5zd2VlcFRvTW92ZSxcclxuICAgICAgICAgICAgcm90YXRpb246IHRoaXMucm90YXRpb25Ub01vdmUsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHRoaXMuZGF0YUlzTG9hZGVkLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICB0aGlzLmlzTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuc3dlZXBUb01vdmUgPSBudWxsO1xyXG4gICAgICAgICAgdGhpcy5yb3RhdGlvblRvTW92ZSA9IG51bGw7XHJcblxyXG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVGb3JiaWRkZW5Td2VlcHMoZm9yYmlkZGVuU3dlZXBzOiBzdHJpbmdbXSkge1xyXG4gICAgaWYgKHRoaXMuY2hlY2tNb2RlKCdNYXR0ZXJwb3J0JykpIHtcclxuICAgICAgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5yZW1vdmVGb3JiaWRkZW5Td2VlcHMoZm9yYmlkZGVuU3dlZXBzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldE9iamVjdDNETG9hZGVkSW5Qb3NpdGlvbihvYmplY3RMb2FkZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuaXNPYmplY3RMb2FkZWQgPSBvYmplY3RMb2FkZWQ7XHJcbiAgfVxyXG5cclxuICBpc09iamVjdDNETG9hZGVkSW5Qb3NpdGlvbigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmlzT2JqZWN0TG9hZGVkO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem9uZS1kcmF3ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zbWFydGVycGxhbi1jb3JlL3NyYy9saWIvc2VydmljZXMvem9uZS1kcmF3ZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRzNELE1BQU0sVUFBVSx1QkFBdUIsQ0FDbkMsR0FBcUIsRUFDckIsU0FBYztJQUVkLElBQUksTUFBTSxDQUFDO0lBQ1gsSUFBSSxNQUFNLENBQUM7SUFDWCxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7SUFDeEMsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO0lBQ3JELCtDQUErQztJQUMvQywrREFBK0Q7SUFDL0Qsb0NBQW9DO0lBQ3BDLElBQUksUUFBUSxHQUFHLFNBQVMsRUFBRSxDQUFDO1FBQ3ZCLHNDQUFzQztRQUN0QyxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDO1FBQ3JDLE1BQU0sb0JBQW9CLEdBQUcsU0FBUyxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUM7UUFDeEQsTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLEdBQUcsb0JBQW9CLENBQUM7SUFDL0MsQ0FBQztTQUFNLENBQUM7UUFDSixNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO1FBQ3ZDLE1BQU0sbUJBQW1CLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUM7UUFDeEQsTUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUFLLEdBQUcsbUJBQW1CLENBQUM7SUFDN0MsQ0FBQztJQUNELCtCQUErQjtJQUMvQixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQzlCLENBQUM7QUFFRCxNQUFNLFVBQVUsV0FBVyxDQUFDLE1BQXlCO0lBQ2pELE1BQU0sQ0FBQyxLQUFLLENBQUMsZUFBZSxHQUFHLGlGQUFpRixDQUFDO0lBQ2pILE1BQU0sQ0FBQyxLQUFLLENBQUMsZUFBZSxHQUFHLGFBQWEsQ0FBQztJQUM3QyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7SUFDbkMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQzdCLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztJQUM1QixNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDN0IsTUFBTSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDM0IsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLEtBQUssRUFDMUMsSUFBVSxFQUNWLE9BQW9CLEVBQ3BCLFdBQXlCLEVBQ0csRUFBRTtJQUM5QixJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzdCLE9BQU8sRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUNELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRS9DLE1BQU0sR0FBRyxHQUFHLE1BQU0sZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNqRCxPQUFPLENBQUMsS0FBSyxDQUFDLGVBQWUsR0FBRyxPQUFPLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQztJQUN4RCxPQUFPLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBRyxTQUFTLENBQUM7SUFDekMsT0FBTyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsR0FBRyxXQUFXLENBQUM7SUFDN0MsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQywrQkFBK0I7SUFDakQsT0FBTyxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUMsQ0FBQyx1Q0FBdUM7SUFDL0QsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFDN0MsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyx1QkFBdUIsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDOUQsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDO0lBQ25CLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDYixXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsRUFBRTtRQUNqQyxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2pELFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyQixPQUFPLENBQUMsRUFBRSxHQUFHLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQztRQUMxQyxJQUFJLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNoQiw2QkFBNkI7WUFDN0IsaUNBQWlDO1lBQ2pDLE1BQU0sZUFBZSxHQUFHLFVBQVUsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDNUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FDcEIsQ0FBQztZQUNGLE1BQU0sY0FBYyxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQ3ZDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQ3BDLENBQUM7WUFDRixJQUFJLGNBQWMsRUFBRSxDQUFDO2dCQUNqQixNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztnQkFDckMsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7Z0JBQ3ZDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQ2hCLENBQUMsY0FBYyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsR0FBRyxTQUFTLENBQUMsU0FBUztvQkFDckQsRUFDSixJQUFJLENBQUM7Z0JBQ0wsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsR0FDakIsQ0FBQyxjQUFjLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxRQUFRLEdBQUcsRUFDMUQsSUFBSSxDQUFDO1lBQ1QsQ0FBQztRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ0osTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDakQsTUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDdkQsTUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDdkQsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsTUFBTSxHQUFHLEVBQUUsSUFBSSxDQUFDO1lBQzNDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU0sR0FBRyxFQUFFLElBQUksQ0FBQztRQUNoRCxDQUFDO1FBQ0QsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN4QixPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzFCLENBQUMsQ0FBQyxDQUNMLENBQUM7SUFDRixPQUFPLE9BQU8sQ0FBQztBQUNuQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRNZXRhRm9ySW1hZ2UsIHdhaXQgfSBmcm9tIFwiLi4vaGVscGVycy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IE5hdmlnYXRpb24sIFBsYW4gfSBmcm9tIFwiLi4vdHlwZXMuc2VydmljZVwiO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldENvZWZmaWNpZW50c0ZvckltYWdlKFxyXG4gICAgaW1nOiBIVE1MSW1hZ2VFbGVtZW50LFxyXG4gICAgcmVjdGFuZ2xlOiBhbnksXHJcbik6IHsgY29lZmZYOiBudW1iZXI7IGNvZWZmWTogbnVtYmVyIH0ge1xyXG4gICAgbGV0IGNvZWZmWTtcclxuICAgIGxldCBjb2VmZlg7XHJcbiAgICBjb25zdCBpbWdSYXRpbyA9IGltZy53aWR0aCAvIGltZy5oZWlnaHQ7XHJcbiAgICBjb25zdCByZWN0UmF0aW8gPSByZWN0YW5nbGUud2lkdGggLyByZWN0YW5nbGUuaGVpZ2h0O1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJpbWFnZVwiLCBpbWcud2lkdGgsIGltZy5oZWlnaHQpO1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJyZWN0YW5nbGVcIiwgcmVjdGFuZ2xlLndpZHRoLCByZWN0YW5nbGUuaGVpZ2h0KTtcclxuICAgIC8vIGNvbnNvbGUubG9nKGltZ1JhdGlvLCByZWN0UmF0aW8pO1xyXG4gICAgaWYgKGltZ1JhdGlvID4gcmVjdFJhdGlvKSB7XHJcbiAgICAgICAgLy8gaW1nIGlzIGZpdHRlZCBpbiByZWN0YW5nbGUgYnkgd2lkdGhcclxuICAgICAgICBjb2VmZlggPSBpbWcud2lkdGggLyByZWN0YW5nbGUud2lkdGg7XHJcbiAgICAgICAgY29uc3QgZWZmZWN0aXZlSW1hZ2VIZWlnaHQgPSByZWN0YW5nbGUud2lkdGggLyBpbWdSYXRpbztcclxuICAgICAgICBjb2VmZlkgPSBpbWcuaGVpZ2h0IC8gZWZmZWN0aXZlSW1hZ2VIZWlnaHQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvZWZmWSA9IGltZy5oZWlnaHQgLyByZWN0YW5nbGUuaGVpZ2h0O1xyXG4gICAgICAgIGNvbnN0IGVmZmVjdGl2ZUltYWdlV2lkdGggPSByZWN0YW5nbGUuaGVpZ2h0ICogaW1nUmF0aW87XHJcbiAgICAgICAgY29lZmZYID0gaW1nLndpZHRoIC8gZWZmZWN0aXZlSW1hZ2VXaWR0aDtcclxuICAgIH1cclxuICAgIC8vIGNvbnNvbGUubG9nKGNvZWZmWCwgY29lZmZZKTtcclxuICAgIHJldHVybiB7IGNvZWZmWCwgY29lZmZZIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzdHlsZUJ1dHRvbihidXR0b246IEhUTUxCdXR0b25FbGVtZW50KSB7XHJcbiAgICBidXR0b24uc3R5bGUuYmFja2dyb3VuZEltYWdlID0gYHVybChcImh0dHBzOi8vYXBpLmljb25pZnkuZGVzaWduL21kaTphZGp1c3Quc3ZnP2NvbG9yPWdyZWVuJmhlaWdodD0xNyZ3aWR0aD0xN1wiKWA7XHJcbiAgICBidXR0b24uc3R5bGUuYmFja2dyb3VuZENvbG9yID0gXCJ0cmFuc3BhcmVudFwiO1xyXG4gICAgYnV0dG9uLnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xyXG4gICAgYnV0dG9uLnN0eWxlLmJvcmRlciA9IFwibm9uZVwiO1xyXG4gICAgYnV0dG9uLnN0eWxlLndpZHRoID0gXCIxN3B4XCI7XHJcbiAgICBidXR0b24uc3R5bGUuaGVpZ2h0ID0gXCIxN3B4XCI7XHJcbiAgICBidXR0b24uZGlzYWJsZWQgPSB0cnVlO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3Qgc2hvd1NjYW5Qb2ludHNPblBsYW5JbkRpdiA9IGFzeW5jIChcclxuICAgIHBsYW46IFBsYW4sXHJcbiAgICBkaXZQbGFuOiBIVE1MRWxlbWVudCxcclxuICAgIG5hdmlnYXRpb25zOiBOYXZpZ2F0aW9uW10sXHJcbik6IFByb21pc2U8SFRNTEJ1dHRvbkVsZW1lbnRbXT4gPT4ge1xyXG4gICAgaWYgKCFkaXZQbGFuIHx8ICFwbGFuLmZpbGVwYXRoKSB7XHJcbiAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gICAgY29uc3QgY2FsaWJyYWdlID0gSlNPTi5wYXJzZShwbGFuLmNhbGlicmF0aW9uKTtcclxuXHJcbiAgICBjb25zdCBpbWcgPSBhd2FpdCBnZXRNZXRhRm9ySW1hZ2UocGxhbi5maWxlcGF0aCk7XHJcbiAgICBkaXZQbGFuLnN0eWxlLmJhY2tncm91bmRJbWFnZSA9IGB1cmwoJHtwbGFuLmZpbGVwYXRofSlgO1xyXG4gICAgZGl2UGxhbi5zdHlsZS5iYWNrZ3JvdW5kU2l6ZSA9IFwiY29udGFpblwiO1xyXG4gICAgZGl2UGxhbi5zdHlsZS5iYWNrZ3JvdW5kUmVwZWF0ID0gXCJuby1yZXBlYXRcIjtcclxuICAgIGF3YWl0IHdhaXQoMTUwMCk7IC8vIHdoaWxlIGltYWdlIGlzIGxvYWRlZCB0byBkaXZcclxuICAgIGRpdlBsYW4uaW5uZXJIVE1MID0gXCJcIjsgLy8gcmVtb3ZlIGFsbCBwcmV2aW91cyBidXR0b25zIGlmIGV4aXN0XHJcbiAgICBjb25zdCByZWN0ID0gZGl2UGxhbi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIGNvbnN0IHsgY29lZmZYLCBjb2VmZlkgfSA9IGdldENvZWZmaWNpZW50c0ZvckltYWdlKGltZywgcmVjdCk7XHJcbiAgICBjb25zdCBidXR0b25zID0gW107XHJcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICBuYXZpZ2F0aW9ucy5tYXAoYXN5bmMgKG5hdmlnYXRpb24pID0+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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem9uZUNoYW5nZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy96b25lQ2hhbmdlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFHL0I7O0dBRUc7QUFJSCxNQUFNLE9BQU8saUJBQWlCO0lBRTVCLFVBQVUsR0FBeUIsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUNqRCxrQkFBa0IsR0FBMkIsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUUzRDs7Ozs7OztPQU9HO0lBQ0gsaUJBQWlCLEdBQTJCLElBQUksT0FBTyxFQUFFLENBQUM7SUFFbEQsV0FBVyxDQUFPO0lBQ2xCLFlBQVksQ0FBUztJQUV0QixlQUFlLEdBQXVCLElBQUksWUFBWSxFQUFRLENBQUM7SUFFdEU7UUFDRSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ2pDLGtEQUFrRDtZQUNsRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUMxQyxvREFBb0Q7WUFDcEQsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO3dHQTlCVSxpQkFBaUI7NEdBQWpCLGlCQUFpQixjQUZoQixNQUFNOzs0RkFFUCxpQkFBaUI7a0JBSDdCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRFbWl0dGVyLCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBab25lIH0gZnJvbSAnLi4vdHlwZXMuc2VydmljZSc7XG5cbi8qKlxuICogQXRvbWljIHpvbmUgY2hhbmdlIHNlcnZpY2UgdG8gYnJlYWsgY3ljbGljIGRlcGVuZGVuY2llcyBpc3N1ZVxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgWm9uZUNoYW5nZVNlcnZpY2Uge1xuXG4gIHpvbmVDaGFuZ2U6IFN1YmplY3Q8Wm9uZSB8IG51bGw+ID0gbmV3IFN1YmplY3QoKTtcbiAgem9uZXNGb3JVc2VyQ2hhbmdlOiBTdWJqZWN0PFpvbmVbXSB8IG51bGw+ID0gbmV3IFN1YmplY3QoKTtcblxuICAvKipcbiAgICogRW1pdHMgdGhlIHNwYWNlIG9wZW5lZCBieSBhIHZpZXdlciB0aGF0IGhhcyBubyB6b25lIG5hdmlnYXRpb24gKFRocmVlLmpzKSwgb3IgbnVsbCB3aGVuIGl0XG4gICAqIGNsb3Nlcy5cbiAgICpcbiAgICogWm9uZXMgYXJlIGRlZmluZWQgYnkgdGhlIHN3ZWVwcyB0aGV5IGNvbnRhaW4sIHNvIHRoZXkgb25seSBtZWFuIHNvbWV0aGluZyBpbiBhIE1hdHRlcnBvcnQgdG91ci5cbiAgICogQSAzRCBtb2RlbCBoYXMgbm8gc3dlZXBzOiBpdCBzaG93cyB0aGUgd2hvbGUgc3BhY2UgYXQgb25jZSwgYW5kIHRoZSBzZXJ2aWNlcyB0aGF0IGxvYWQgZGF0YVxuICAgKiBsaXN0ZW4gaGVyZSBpbnN0ZWFkIG9mIHRvIGB6b25lQ2hhbmdlYCB0byBrbm93IHdoaWNoIHNwYWNlIHRoZXkgYXJlIGxvb2tpbmcgYXQuXG4gICAqL1xuICBzcGFjZVdpdGhvdXRab25lczogU3ViamVjdDxzdHJpbmcgfCBudWxsPiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgcHJpdmF0ZSBjdXJyZW50Wm9uZTogWm9uZTtcbiAgcHJpdmF0ZSBjdXJyZW50Wm9uZXM6IFpvbmVbXTtcblxuICBwdWJsaWMgZmxvb3JIYXNDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8Wm9uZT4gPSBuZXcgRXZlbnRFbWl0dGVyPFpvbmU+KCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy56b25lQ2hhbmdlLnN1YnNjcmliZSgoem9uZSkgPT4ge1xuICAgICAgLy9jb25zb2xlLmxvZyhgbmV3IHpvbmUgJHtKU09OLnN0cmluZ2lmeSh6b25lKX1gKTtcbiAgICAgIHRoaXMuY3VycmVudFpvbmUgPSB6b25lO1xuICAgIH0pO1xuXG4gICAgdGhpcy56b25lc0ZvclVzZXJDaGFuZ2Uuc3Vic2NyaWJlKCh6b25lcykgPT4ge1xuICAgICAgLy9jb25zb2xlLmxvZyhgbmV3IHpvbmVzICR7SlNPTi5zdHJpbmdpZnkoem9uZXMpfWApO1xuICAgICAgdGhpcy5jdXJyZW50Wm9uZXMgPSB6b25lcztcbiAgICB9KTtcbiAgfVxuXG59XG4iXX0=
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0dGVycG9ydC1zZGsta2V5LnRva2VuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWNvcmUvc3JjL2xpYi90b2tlbnMvbWF0dGVycG9ydC1zZGsta2V5LnRva2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0M7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLElBQUksY0FBYyxDQUFTLG9CQUFvQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqIEluamVjdGlvbiB0b2tlbiBob2xkaW5nIHRoZSBNYXR0ZXJwb3J0IFNESyBhcHBsaWNhdGlvbiBrZXkuXG4gKiBFYWNoIGNvbnN1bWluZyBhcHAgbXVzdCBwcm92aWRlIGl0cyBvd24gdmFsdWUgdmlhIGl0cyBlbnZpcm9ubWVudCBmaWxlXG4gKiAoc2VlIGFwcC5tb2R1bGUudHMgb2YgZWFjaCBhcHAgZm9yIHRoZSBwcm92aWRlciByZWdpc3RyYXRpb24pLlxuICovXG5leHBvcnQgY29uc3QgTUFUVEVSUE9SVF9TREtfS0VZID0gbmV3IEluamVjdGlvblRva2VuPHN0cmluZz4oJ01BVFRFUlBPUlRfU0RLX0tFWScpOyJdfQ==
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0dGVycG9ydC1zZGsta2V5LnRva2VuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWNvcmUvc3JjL2xpYi90b2tlbnMvbWF0dGVycG9ydC1zZGsta2V5LnRva2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0M7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLElBQUksY0FBYyxDQUFTLG9CQUFvQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuLyoqXHJcbiAqIEluamVjdGlvbiB0b2tlbiBob2xkaW5nIHRoZSBNYXR0ZXJwb3J0IFNESyBhcHBsaWNhdGlvbiBrZXkuXHJcbiAqIEVhY2ggY29uc3VtaW5nIGFwcCBtdXN0IHByb3ZpZGUgaXRzIG93biB2YWx1ZSB2aWEgaXRzIGVudmlyb25tZW50IGZpbGVcclxuICogKHNlZSBhcHAubW9kdWxlLnRzIG9mIGVhY2ggYXBwIGZvciB0aGUgcHJvdmlkZXIgcmVnaXN0cmF0aW9uKS5cclxuICovXHJcbmV4cG9ydCBjb25zdCBNQVRURVJQT1JUX1NES19LRVkgPSBuZXcgSW5qZWN0aW9uVG9rZW48c3RyaW5nPignTUFUVEVSUE9SVF9TREtfS0VZJyk7Il19