@smarterplan/ngx-smarterplan-core 1.4.20 → 1.4.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) 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 +49 -28
  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 +1 -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 +1 -1
  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 +657 -133
  40. package/esm2022/lib/services/matterport-pointer.service.mjs +6 -6
  41. package/esm2022/lib/services/matterport-tag-copy.service.mjs +1 -1
  42. package/esm2022/lib/services/matterport-tag.service.mjs +1 -1
  43. package/esm2022/lib/services/matterport.service.mjs +346 -25
  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 +27 -27
  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 +1 -1
  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/sweep-locator.service.mjs +1 -1
  75. package/esm2022/lib/services/tag.service.mjs +16 -16
  76. package/esm2022/lib/services/threejs-import.service.mjs +1 -1
  77. package/esm2022/lib/services/threejs.service.mjs +1 -1
  78. package/esm2022/lib/services/user.service.mjs +1 -1
  79. package/esm2022/lib/services/utils/matterport-framing.util.mjs +63 -0
  80. package/esm2022/lib/services/utils/matterport-transform.util.mjs +1 -1
  81. package/esm2022/lib/services/validators.service.mjs +1 -1
  82. package/esm2022/lib/services/viewer.service.mjs +1 -1
  83. package/esm2022/lib/services/zone-drawer.service.mjs +1 -1
  84. package/esm2022/lib/services/zoneChange.service.mjs +1 -1
  85. package/esm2022/lib/tokens/matterport-sdk-key.token.mjs +1 -1
  86. package/esm2022/lib/types.service.mjs +3 -1
  87. package/esm2022/lib/validators/email.directive.mjs +1 -1
  88. package/esm2022/lib/validators/no-empty.directive.mjs +1 -1
  89. package/esm2022/lib/validators/number.directive.mjs +1 -1
  90. package/esm2022/lib/validators/text.directive.mjs +1 -1
  91. package/esm2022/public-api.mjs +1 -1
  92. package/fesm2022/smarterplan-ngx-smarterplan-core.mjs +1192 -263
  93. package/fesm2022/smarterplan-ngx-smarterplan-core.mjs.map +1 -1
  94. package/lib/services/matterport-object3d.service.d.ts +125 -5
  95. package/lib/services/matterport.service.d.ts +106 -7
  96. package/lib/services/utils/matterport-framing.util.d.ts +40 -0
  97. package/lib/types.service.d.ts +42 -1
  98. package/package.json +1 -1
  99. package/src/assets/vs-app.json +67 -67
@@ -818,4 +818,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
818
818
  type: Inject,
819
819
  args: ['currentAPIService']
820
820
  }] }, { type: i1.ZoneService }, { type: i2.NavigationService }, { type: i3.ViewerService }, { type: i4.Router }, { type: i5.MatterportService }, { type: i6.BaseVisibilityService }, { type: i7.ContentService }] });
821
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9tb2RlbHMvcGxhbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQiwyQ0FBMkM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUM5RCxPQUFPLE9BQU8sTUFBTSxTQUFTLENBQUM7QUFDOUIsT0FBTyxPQUFPLE1BQU0sVUFBVSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0IsT0FBTyxFQUNILFdBQVcsRUFDWCxXQUFXLEVBRVgsT0FBTyxHQUVWLE1BQU0scUJBQXFCLENBQUM7QUFNN0IsT0FBTyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHOUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7Ozs7QUFNeEQsTUFBTSxPQUFPLFdBQVc7SUE0RVI7SUFDQTtJQUVBO0lBQ0E7SUFDQTtJQUVBO0lBQ0E7SUFuRlosVUFBVSxDQUFPO0lBRWpCLFdBQVcsQ0FBTztJQUVsQixZQUFZLENBQVM7SUFFckIsYUFBYSxDQUFPO0lBRXBCLFVBQVUsQ0FBTTtJQUVoQixPQUFPLENBQTJCO0lBQ2xDLGNBQWMsQ0FBYztJQUU1QixPQUFPLENBQU07SUFFYixPQUFPLEdBQVksS0FBSyxDQUFDO0lBRXpCLGVBQWUsQ0FBb0I7SUFFbkMsVUFBVSxDQUFTO0lBRW5CLFVBQVUsQ0FBUztJQUVuQixlQUFlLENBQU07SUFFckIsWUFBWSxDQUFjO0lBRTFCLG1CQUFtQixHQUFHLEtBQUssQ0FBQztJQUU1QixhQUFhLEdBQUcsS0FBSyxDQUFDO0lBRXRCLHNCQUFzQixHQUFHLElBQUksT0FBTyxFQUFXLENBQUM7SUFFaEQsT0FBTyxDQUFtQjtJQUUxQixhQUFhLEdBQUcsQ0FBQyxDQUFDO0lBRWxCLGFBQWEsR0FBRyxHQUFHLENBQUM7SUFFcEIsWUFBWSxHQUFXLENBQUMsQ0FBQztJQUV6QixtQkFBbUIsR0FRYixFQUFFLENBQUM7SUFFVCxLQUFLLENBZ0JIO0lBRUYsZ0JBQWdCLEdBQVksS0FBSyxDQUFDO0lBRWxDLEdBQUcsQ0FBTSxDQUFDLEtBQUs7SUFFZixZQUNpQyxXQUFnQixFQUNyQyxXQUF3QixFQUN4QixpQkFBb0M7SUFDNUMsOEJBQThCO0lBQ3RCLGFBQTRCLEVBQzVCLE1BQWMsRUFDZCxpQkFBb0M7SUFDNUMsNkJBQTZCO0lBQ3JCLGlCQUF3QyxFQUN4QyxjQUE4QjtRQVI5QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBRXBDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBRXBDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBdUI7UUFDeEMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBRXRDLElBQUksQ0FBQyxHQUFHLEdBQUcsV0FBVyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUN4RCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsS0FBSyxDQUFDLFVBQVUsQ0FBQyxTQUFlO1FBQzVCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVSxDQUFDLElBQVU7UUFDdkIsbUNBQW1DO1FBQ25DLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRCxLQUFLLENBQUMsZ0JBQWdCLENBQUMsT0FBZTtRQUNsQyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUzthQUNwQixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxLQUFLLENBQUMsZUFBZSxDQUFDLE1BQWM7UUFDaEMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVM7YUFDcEIsV0FBVyxDQUFDLE1BQU0sQ0FBQzthQUNuQixJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsS0FBSyxDQUFDLHNCQUFzQixDQUFDLE9BQWU7UUFDeEMsTUFBTSxXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDekQsNEJBQTRCO1FBQzVCLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNqQixJQUFJLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDekIsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUNiLFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFO2dCQUMzQixNQUFNLFVBQVUsR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFVLENBQUM7Z0JBQ3ZDLHdEQUF3RDtnQkFDeEQsTUFBTSxNQUFNLEdBQUcsTUFBTSxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNoRCxJQUFJLE1BQU0sRUFBRSxDQUFDO29CQUNULFVBQVUsQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDO2dCQUNqQyxDQUFDO2dCQUNELElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUNkLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxBQUFELEVBQUcscUJBQXFCLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDcEUsTUFBTSxDQUFDLEVBQUUsU0FBUyxDQUFDLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUN2RCxVQUFVLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztvQkFDN0IsVUFBVSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7b0JBQ2pDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQzNCLENBQUM7cUJBQU0sQ0FBQztvQkFDSixPQUFPLENBQUMsR0FBRyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7b0JBQzlDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUN6QixDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQ0wsQ0FBQztRQUNOLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQsS0FBSyxDQUFDLHlCQUF5QixDQUFDLE9BQWU7UUFDM0MsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkQsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDekUsT0FBTyxVQUFVLENBQUM7SUFDdEIsQ0FBQztJQUVELGFBQWEsQ0FBQyxVQUFnQjtRQUMxQixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztJQUNqQyxDQUFDO0lBRUQsYUFBYTtRQUNULE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUMzQixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsYUFBbUI7UUFDaEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7UUFDbkMsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELGdCQUFnQjtRQUNaLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM5QixDQUFDO0lBRUQsS0FBSyxDQUFDLG9CQUFvQixDQUFDLElBQVUsRUFBRSxJQUFVO1FBQzdDLE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoRCxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RFLE1BQU0sR0FBRyxHQUFHLE1BQU0sY0FBYyxDQUM1QixVQUFVLE9BQU8sU0FBUyxFQUMxQixJQUFJLEVBQ0osV0FBVyxDQUFDLEVBQUUsQ0FDakIsQ0FBQztRQUNGLElBQUksR0FBRyxFQUFFLENBQUM7WUFDTixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxXQUFXLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQzlFLENBQUM7UUFDRCxPQUFPLFdBQVcsQ0FBQztJQUN2QixDQUFDO0lBRUQsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFTO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxLQUFLLENBQUMsY0FBYztRQUNoQixJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FDcEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQ3pCLENBQUM7WUFDRixPQUFPLGNBQWMsQ0FDakIsVUFBVSxPQUFPLFNBQVMsRUFDMUIsSUFBSSxDQUFDLGFBQWEsRUFDbEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQ3JCLENBQUM7UUFDTixDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxNQUFjLEVBQUUsYUFBcUI7UUFDcEUsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUM7WUFDN0MsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRTtTQUN6QixDQUFDLENBQUM7UUFDSCxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ2IsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFO1lBQzNCLElBQUksSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxFQUFFLEtBQUssYUFBYSxFQUFFLENBQUM7Z0JBQ3JELE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQztvQkFDbEIsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO29CQUNYLGdCQUFnQixFQUFFLEtBQUs7aUJBQzFCLENBQUMsQ0FBQztZQUNQLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FDTCxDQUFDO0lBQ04sQ0FBQztJQUVELEtBQUssQ0FBQyxhQUFhLENBQ2YsV0FBaUIsRUFDakIsUUFBZ0IsYUFBYSxFQUM3QixlQUF1QixvQkFBb0I7UUFFM0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsWUFBWSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQ3RDLGVBQWUsQ0FDSCxDQUFDO1FBQ3JCLENBQUM7UUFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLFlBQVksRUFBRSxHQUFHLEVBQUU7WUFDbEQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztRQUNqQyxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRTtZQUNsRCxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztZQUMzQixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQy9CLElBQUksQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFnQixDQUFDO1FBQ2xFLElBQUksQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FDeEMsSUFBSSxZQUFZLEVBQUUsQ0FDTixDQUFDO1FBRWpCLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDekUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUUxRSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sZUFBZSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMzRCxvR0FBb0c7WUFDcEcsTUFBTSxJQUFJLEdBQUc7Z0JBQ1QsS0FBSyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVztnQkFDdEMsTUFBTSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWTthQUMzQyxDQUFDO1lBQ0YsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3ZFLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO1lBRXpCLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLGVBQWUsR0FBRyxPQUFPLFdBQVcsQ0FBQyxRQUFRLEdBQUcsQ0FBQztRQUMvRSxDQUFDO2FBQU0sQ0FBQztZQUNKLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNwQyxDQUFDO1FBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLFNBQVMsQ0FBQztRQUNyRCxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsR0FBRyxXQUFXLENBQUM7UUFFekQsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNqQyxNQUFNLEVBQUUsSUFBSTtZQUNaLGFBQWEsRUFBRSxDQUFDO1lBQ2hCLE9BQU8sRUFBRSxDQUFDO1lBQ1Ysb0JBQW9CLEVBQUUsQ0FBQyxFQUFFLDRCQUE0QjtZQUNyRCxnQkFBZ0I7U0FDbkIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM5QixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDM0MsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ1IsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELGNBQWM7UUFDVixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1FBQ3JELENBQUM7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFpQjtRQUMzQixPQUFPLElBQUksT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtZQUNqQyxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBc0IsQ0FBQztZQUVyRSxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBNkIsQ0FBQztZQUNwRSxtQkFBbUIsQ0FBQyxTQUFTLEdBQUcsb0VBQW9FLENBQUM7WUFDckcsTUFBTSxHQUFHLEdBQUcsTUFBTSxXQUFXLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUM1RCxNQUFNLElBQUksR0FBRyxNQUFNLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFbEMsTUFBTSxrQkFBa0IsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUMxQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFFdEQsTUFBTSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO1lBQ2hDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQztZQUM5QixNQUFNLGFBQWEsR0FBRztnQkFDbEIsYUFBYSxFQUFFLE9BQU87Z0JBQ3RCLFFBQVE7YUFDWCxDQUFDO1lBQ0YsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDdEQsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRTtnQkFDdkIsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDN0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDN0MsTUFBTSxJQUFJLEdBQUc7b0JBQ1QsS0FBSyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVztvQkFDdEMsTUFBTSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWTtpQkFDM0MsQ0FBQztnQkFDRixNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLHVCQUF1QixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ3ZFLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO2dCQUN6QixJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQztnQkFDekIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsZUFBZSxHQUFHLE9BQU8sTUFBTSxHQUFHLENBQUM7Z0JBQ3RELE9BQU8sRUFBRSxDQUFDO1lBQ2QsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVyxDQUNiLE9BQVksRUFDWixPQUFnQixFQUNoQixXQUFpQixFQUNqQixVQUEwQixFQUMxQixNQUFjLEVBQ2QsYUFBcUIsRUFBRTtRQUV2QixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDakMsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLFVBQVUsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUN2QyxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsV0FBVyxDQUFDO1lBQzdCLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ1AsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQzVDLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ2hELElBQUksWUFBb0IsQ0FBQztnQkFDekIsTUFBTSxHQUFHLEdBQUcsVUFBVSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDN0QsSUFBSSxZQUFvQixDQUFDO2dCQUN6QixRQUFRLE9BQU8sRUFBRSxDQUFDO29CQUNkLEtBQUssT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQ2xCLFlBQVksR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQzt3QkFDNUMsTUFBTTtvQkFDVixDQUFDO29CQUNELEtBQUssT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7d0JBQ3JCLFlBQVksR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQzt3QkFDL0MsTUFBTTtvQkFDVixDQUFDO29CQUNELEtBQUssT0FBTyxDQUFDLE9BQU87d0JBQ2hCLFlBQVksR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQzt3QkFDN0MsTUFBTTtvQkFDVixLQUFLLE9BQU8sQ0FBQyxRQUFRO3dCQUNqQixZQUFZLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUM7d0JBQzlDLE1BQU07b0JBQ1YsS0FBSyxPQUFPLENBQUMsSUFBSTt3QkFDYixZQUFZLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUM7d0JBQzFDLE1BQU07b0JBQ1YsS0FBSyxPQUFPLENBQUMsSUFBSTt3QkFDYixZQUFZLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUM7d0JBQzFDLE1BQU07b0JBQ1Y7d0JBQ0ksT0FBTztnQkFDZixDQUFDO2dCQUNELElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUNkLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUN4QyxJQUNJLE9BQU8sS0FBSyxPQUFPLENBQUMsSUFBSTt3QkFDeEIsT0FBTyxDQUFDLElBQUksS0FBSyxXQUFXLENBQUMsY0FBYyxFQUM3QyxDQUFDO3dCQUNDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsVUFBVSxDQUFDLHlCQUF5QixDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztvQkFDckUsQ0FBQztvQkFDRCx5QkFBeUI7b0JBRXpCLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO3dCQUNkLE1BQU0sTUFBTSxHQUFHLE1BQU0sYUFBYSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFDaEQsSUFBSSxNQUFNLEVBQUUsQ0FBQzs0QkFDVCxZQUFZLEdBQUcsTUFBTSxDQUFDO3dCQUMxQixDQUFDO29CQUNMLENBQUM7Z0JBQ0wsQ0FBQztnQkFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUsVUFBVSxDQUFDLENBQUM7Z0JBQ25ELE1BQU0sQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ25DLElBQUksQ0FBUyxDQUFDO2dCQUNkLElBQUksQ0FBUyxDQUFDO2dCQUNkLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDM0IsNERBQTREO29CQUM1RCxNQUFNLFVBQVUsR0FDWixJQUFJLENBQUMsb0NBQW9DLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ3hELENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDO29CQUNqQixDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQztvQkFDakIsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQztvQkFDcEQsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQztnQkFDekQsQ0FBQztxQkFBTSxDQUFDO29CQUNKLDBDQUEwQztvQkFDMUMsQ0FBQzt3QkFDRyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO29CQUN2RSxDQUFDO3dCQUNHLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7b0JBQ3ZFLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUM7b0JBQ2xELE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUM7Z0JBQ3ZELENBQUM7Z0JBRUQsTUFBTSxJQUFJLEdBQUcsTUFBTSxVQUFVLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDaEUsSUFBSSxJQUFJLElBQUksRUFBRSxFQUFFLENBQUM7b0JBQ2IsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQzt3QkFDMUIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxFQUFFO3dCQUNyQixLQUFLLEVBQUUsRUFBRTt3QkFDVCxPQUFPLEVBQUUsSUFBSTt3QkFDYixDQUFDO3dCQUNELENBQUM7d0JBQ0QsT0FBTyxFQUFFLFlBQVk7d0JBQ3JCLEdBQUc7cUJBQ04sQ0FBQyxDQUFDO2dCQUNQLENBQUM7cUJBQU0sQ0FBQztvQkFDSix3REFBd0Q7b0JBQ3hELE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FDN0MsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsVUFBVSxDQUM1RCxDQUFDO29CQUNGLElBQUksWUFBWSxFQUFFLENBQUM7d0JBQ2YsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQzs0QkFDMUIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxFQUFFOzRCQUNyQixLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7NEJBQ3BCLE9BQU8sRUFBRSxlQUFlLFlBQVksQ0FBQyxZQUFZLHdDQUF3Qzs0QkFDekYsQ0FBQzs0QkFDRCxDQUFDOzRCQUNELE9BQU8sRUFBRSxZQUFZOzRCQUNyQixHQUFHO3lCQUNOLENBQUMsQ0FBQztvQkFDUCxDQUFDO2dCQUNMLENBQUM7Z0JBRUQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUM1RCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUMzQyxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsYUFBcUIsRUFBRTtRQUM1RSxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztRQUNqQyxJQUFJLElBQUksQ0FBQyxlQUFlLElBQUksWUFBWSxFQUFFLENBQUM7WUFDdkMsTUFBTSxRQUFRLEdBQ1YsSUFBSSxDQUFDLGlCQUFpQixDQUFDLHdCQUF3QixFQUFFLEVBQUUsUUFBUSxDQUFDO1lBQ2hFLElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQ1gsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztvQkFDeEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUN4RCxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsR0FBRyxpQkFBaUIsQ0FBQztvQkFDNUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO29CQUNqRCxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssR0FBRyxjQUFjLENBQUM7b0JBQzVDLElBQUksQ0FBQyxXQUFXLENBQ1osSUFBSSxDQUFDLGVBQWUsRUFDcEIsa0ZBQWtGLEVBQ2xGLFVBQVUsQ0FDYixDQUFDO2dCQUNOLENBQUM7Z0JBQ0QsSUFBSSxDQUFTLENBQUM7Z0JBQ2QsSUFBSSxDQUFTLENBQUM7Z0JBQ2QsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUMzQixNQUFNLFVBQVUsR0FDWixJQUFJLENBQUMsb0NBQW9DLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ3hELENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO29CQUN6QyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztnQkFDN0MsQ0FBQztxQkFBTSxDQUFDO29CQUNKLENBQUM7d0JBQ0csQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU87NEJBQ3pCLFFBQVEsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7NEJBQ3hDLElBQUksQ0FBQyxVQUFVLENBQUM7b0JBQ3BCLENBQUM7d0JBQ0csQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU87NEJBQ3pCLFFBQVEsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7NEJBQ3hDLElBQUksQ0FBQyxVQUFVLENBQUM7Z0JBQ3hCLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO2dCQUMzQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzdDLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNILFdBQVcsQ0FBQyxVQUFVO1FBQ2xCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2YsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDaEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEdBQUcsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO1lBQ2xFLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUNuRSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsZUFBZSxHQUFHLEdBQUcsVUFBVSxDQUFDLENBQUMsTUFBTSxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDdEYsQ0FBQztJQUNMLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsY0FBYyxDQUFDLFFBQVE7UUFDbkIsSUFBSSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUM7UUFDN0IsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLFVBQVUsUUFBUSxNQUFNLENBQUM7WUFDL0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMvRCxJQUFJLGFBQWEsR0FBRyw2QkFBNkIsQ0FBQztZQUNsRCxxREFBcUQ7WUFDckQsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUN2QixNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxRQUFRLE1BQU0sQ0FBQztZQUM1RyxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7SUFDTCxDQUFDO0lBRUQscUJBQXFCO1FBQ2pCLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUMxRCxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1QsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1FBQ2hDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVyxDQUFDLE1BQXlCLEVBQUUsR0FBVyxFQUFFLGFBQXFCLEVBQUU7UUFDdkUsTUFBTSxDQUFDLEtBQUssQ0FBQyxlQUFlLEdBQUcsT0FBTyxHQUFHLEdBQUcsQ0FBQztRQUM3QyxNQUFNLENBQUMsS0FBSyxDQUFDLGVBQWUsR0FBRyxhQUFhLENBQUM7UUFDN0MsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO1FBQ25DLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUM3QixNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7UUFDNUIsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQzdCLE1BQU0sQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLFNBQVMsQ0FBQztRQUN4QyxNQUFNLENBQUMsS0FBSyxDQUFDLGdCQUFnQixHQUFHLFdBQVcsQ0FBQztRQUM1QyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxTQUFTLFVBQVUsR0FBQyxFQUFFLEdBQUcsQ0FBQTtJQUN4RCxDQUFDO0lBRUMsb0JBQW9CLENBQ2hCLE1BQXlCLEVBQ3pCLEdBQVcsRUFDWCxhQUE2QixJQUFJLEVBQ2pDLFVBQWUsSUFBSTtRQUVuQixJQUFJLGFBQWEsQ0FBQztRQUNsQixNQUFNLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUNsRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQ2xELENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxLQUFLLE1BQU0sQ0FBQyxFQUFFLENBQzdDLENBQUM7WUFDRixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztZQUMxQixNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBZ0IsQ0FBQztZQUNwRSxJQUFJLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUN6QixLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUM7Z0JBQy9CLEtBQUssQ0FBQyxTQUFTLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDO1lBQzdDLENBQUM7aUJBQU0sQ0FBQztnQkFDSixLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7WUFDakMsQ0FBQztZQUVELE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFnQixDQUFDO1lBQ3JFLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxPQUFPLEdBQUcsRUFBRSxJQUFJLENBQUM7WUFDeEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxHQUN4RSxJQUFJLENBQUM7WUFDVCxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1lBQzFDLHlDQUF5QztZQUN6QyxPQUFPLENBQUMsU0FBUyxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztZQUM3QyxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3pELElBQUksWUFBWSxFQUFFLENBQUM7Z0JBQ2YsWUFBWSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUU7b0JBQ3hDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNoRCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hDLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQztZQUVELDBDQUEwQztZQUMxQyxNQUFNLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDbEUsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO2dCQUNyQixrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUU7b0JBQ3pDLElBQUksVUFBVSxFQUFFLENBQUM7d0JBQ2IsVUFBVSxDQUFDLGtCQUFrQixDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO29CQUM5RCxDQUFDO2dCQUNMLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQztZQUVELG1DQUFtQztZQUNuQyxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQzNELElBQUksYUFBYSxFQUFFLENBQUM7Z0JBQ2hCLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFO29CQUN6QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDaEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNoQyxDQUFDLENBQUMsQ0FBQztZQUNQLENBQUM7WUFFRCx3Q0FBd0M7WUFDeEMsTUFBTSxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQzlELElBQUksZ0JBQWdCLElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQzlCLE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxnQ0FBZ0MsQ0FDM0QsT0FBTyxFQUNQLFdBQVcsQ0FBQyxRQUFRLENBQ3ZCLENBQUM7Z0JBQ0YsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFO29CQUN2QyxJQUFJLFVBQVUsRUFBRSxDQUFDO3dCQUNiLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztvQkFDN0MsQ0FBQztnQkFDTCxDQUFDLENBQUMsQ0FBQztZQUNQLENBQUM7WUFFRCxpQ0FBaUM7WUFDakMsTUFBTSxrQkFBa0IsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLHVCQUF1QixDQUFDLENBQUM7WUFDMUUsSUFBSSxrQkFBa0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDaEMsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLGdDQUFnQyxDQUN4RCxPQUFPLEVBQ1AsV0FBVyxDQUFDLEtBQUssQ0FDcEIsQ0FBQztnQkFDRixrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUU7b0JBQ3pDLElBQUksVUFBVSxFQUFFLENBQUM7d0JBQ2IsVUFBVSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUM1QyxDQUFDO2dCQUNMLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQztZQUVELHlDQUF5QztZQUN6QyxNQUFNLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQzNDLCtCQUErQixDQUNsQyxDQUFDO1lBQ0YsSUFBSSxpQkFBaUIsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDL0IsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLGdDQUFnQyxDQUMxRCxPQUFPLEVBQ1AsV0FBVyxDQUFDLE9BQU8sQ0FDdEIsQ0FBQztnQkFDRixpQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUU7b0JBQ3hDLElBQUksVUFBVSxFQUFFLENBQUM7d0JBQ2IsVUFBVSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxDQUFDO29CQUNoRCxDQUFDO2dCQUNMLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQztZQUVELDJCQUEyQjtZQUMzQixNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3BELE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDbEQsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNwRCxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBRS9ELElBQUksYUFBYSxFQUFFLENBQUM7Z0JBQ2hCLGFBQWEsR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBQ3pDLElBQUksT0FBTyxJQUFJLGFBQWEsRUFBRSxDQUFDO29CQUMzQixPQUFPLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFO3dCQUM5QixJQUFJLGFBQWEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDOzRCQUN4QixhQUFhLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDOzRCQUMzQixJQUFJLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQztnQ0FDbEIsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsY0FBYyxDQUFDO2dDQUNyQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7NEJBQ2xDLENBQUM7d0JBQ0wsQ0FBQzs2QkFBTSxDQUFDOzRCQUNKLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7NEJBQzFCLElBQUksS0FBSyxJQUFJLE1BQU0sRUFBRSxDQUFDO2dDQUNsQixLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7Z0NBQzdCLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLGNBQWMsQ0FBQzs0QkFDMUMsQ0FBQzt3QkFDTCxDQUFDO29CQUNMLENBQUMsQ0FBQyxDQUFDO2dCQUNQLENBQUM7WUFDTCxDQUFDO1lBR0QsOEJBQThCO1lBQzlCLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUNsRSxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBcUIsQ0FBQztZQUN2RSxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUNuQyxlQUFlLENBQ0UsQ0FBQztZQUN0Qix1RUFBdUU7WUFDdkUsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQy9ELE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbEQsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNwRCxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDN0QsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQy9ELE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUM5RCxJQUFJLEtBQUssSUFBSSxZQUFZLElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQ3BDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUU7b0JBQ25DLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO3dCQUNmLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQzt3QkFDYixVQUFVLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxjQUFjLENBQUM7d0JBQzFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztvQkFDckMsQ0FBQzt5QkFBTSxDQUFDO3dCQUNKLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQzt3QkFDZCxVQUFVLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7d0JBQ2xDLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLGNBQWMsQ0FBQztvQkFDN0MsQ0FBQztnQkFDTCxDQUFDLENBQUMsQ0FBQztnQkFDSCxXQUFXLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFO29CQUNsQyxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQzt3QkFDZCxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQzt3QkFDcEIsVUFBVSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsY0FBYyxDQUFDO3dCQUMxQyxXQUFXLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7b0JBQ3ZDLENBQUM7eUJBQU0sQ0FBQzt3QkFDSixLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQzt3QkFDbkIsVUFBVSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO3dCQUNsQyxXQUFXLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxjQUFjLENBQUM7b0JBQy9DLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsU0FBUyxzQkFBc0I7b0JBQzNCLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO3dCQUNqQixNQUFNLGtCQUFrQixHQUNwQixDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQzt3QkFDL0MsTUFBTSx3QkFBd0IsR0FBRyxrQkFBa0IsR0FBRyxHQUFHLENBQUM7d0JBQzFELFFBQVEsQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLHdCQUF3QixHQUFHLE9BQU8sQ0FBQzt3QkFDbkUsUUFBUSxDQUFDLEtBQUssR0FBRyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDbkQsQ0FBQztnQkFDTCxDQUFDO2dCQUNELEtBQUssQ0FBQyxZQUFZLEdBQUcsc0JBQXNCLENBQUM7Z0JBQzVDLFNBQVMsVUFBVTtvQkFDZixNQUFNLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztvQkFDL0QsS0FBSyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7Z0JBQzdCLENBQUM7Z0JBQ0QsUUFBUSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztnQkFDaEQsUUFBUSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztnQkFDL0MscUJBQXFCO2dCQUNyQixJQUFJLFVBQVUsSUFBSSxPQUFPLEVBQUUsQ0FBQztvQkFDeEIsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUM3QyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxXQUFXLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQzVELENBQUM7b0JBQ0YsTUFBTSxjQUFjLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQzNELFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUU7d0JBQ2pDLElBQUksVUFBVSxFQUFFLENBQUM7NEJBQ2IsVUFBVSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxDQUFDO3dCQUNsRCxDQUFDO29CQUNMLENBQUMsQ0FBQyxDQUFDO2dCQUNQLENBQUM7WUFDTCxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQzdDLDhFQUE4RTtZQUM5RSxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztZQUMzQixVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNaLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7b0JBQ2hELElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7b0JBQ3pDLElBQUksYUFBYSxFQUFFLENBQUM7d0JBQ2hCLGFBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztvQkFDNUIsQ0FBQztnQkFDTCxDQUFDO1lBQ0wsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ1osQ0FBQyxDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ3hDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7WUFDekMsSUFBSSxhQUFhLEVBQUUsQ0FBQztnQkFDaEIsYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzVCLENBQUM7WUFDRCxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2hELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNoQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxRQUFRLENBQUMsTUFBYTtRQUNsQixLQUFLLE1BQU0sRUFBRSxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ3RCLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDM0MsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDVCxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDcEIsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0lBRUQsZUFBZTtRQUNYLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3RCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDL0QscURBQXFEO1lBQ3JELE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxZQUFZO2dCQUNsQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDMUIsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztRQUNoQyxDQUFDO0lBQ0wsQ0FBQztJQUVELHFCQUFxQixDQUFDLFVBQXlCLEVBQUUsTUFBcUI7UUFDbEUsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMvRCxxREFBcUQ7WUFDckQsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLFlBQVk7Z0JBQ2xDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQy9CLElBQUksUUFBUSxLQUFLLFdBQVcsRUFBRSxDQUFDO3dCQUMzQiwwQ0FBMEM7d0JBQzFDLElBQUksYUFBYSxHQUFHLDZCQUE2QixDQUFDO3dCQUNsRCxJQUFJLGFBQWEsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQzt3QkFDdEUsSUFBSSxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDOzRCQUMzQixZQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO3dCQUN0RSxDQUFDO29CQUNMLENBQUM7eUJBQU0sQ0FBQzt3QkFDSixZQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDN0MsQ0FBQztnQkFFTCxDQUFDLENBQUMsQ0FBQztZQUNQLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztJQUNMLENBQUM7SUFFRCxZQUFZO1FBQ1IsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDNUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDNUIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDekIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7SUFDN0IsQ0FBQztJQUVELEtBQUssQ0FBQyxVQUFVLENBQUMsVUFBbUI7UUFDaEMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2IsT0FBTztRQUNYLENBQUM7UUFDRCxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzdCLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDakMsTUFBTSxFQUFFLElBQUk7Z0JBQ1osYUFBYSxFQUFFLENBQUM7Z0JBQ2hCLE9BQU8sRUFBRSxDQUFDO2FBQ2IsQ0FBQyxDQUFDO1lBQ0gsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDWixNQUFNLElBQUksR0FBRztvQkFDVCxLQUFLLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXO29CQUN0QyxNQUFNLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZO2lCQUMzQyxDQUFDO2dCQUNGLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsdUJBQXVCLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDdkUsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO2dCQUN6QixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUM5QixJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzNDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNaLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQUs7UUFDYixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDaEQsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUM7WUFDdkIsOEJBQThCO1lBQzlCLDJFQUEyRTtZQUMzRSxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3JELE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEMsUUFBUSxDQUFDLGNBQWMsQ0FDbkIsVUFBVSxFQUNWLElBQUksRUFDSixJQUFJLEVBQ0osS0FBSyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUN0QyxDQUFDLEVBQ0QsS0FBSyxDQUFDLE9BQU8sRUFDYixLQUFLLENBQUMsT0FBTyxFQUNiLEtBQUssQ0FBQyxPQUFPLEVBQ2IsS0FBSyxDQUFDLE9BQU8sRUFDYixLQUFLLENBQUMsT0FBTyxFQUNiLEtBQUssQ0FBQyxNQUFNLEVBQ1osS0FBSyxDQUFDLFFBQVEsRUFDZCxLQUFLLENBQUMsT0FBTyxFQUNiLENBQUMsRUFDRCxJQUFJLENBQ1AsQ0FBQztZQUNGLEtBQUssQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3pDLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLGFBQWEsR0FBRyxHQUFHLENBQUM7UUFDN0IsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsY0FBYyxDQUFDLEtBQUs7UUFDdEIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDN0IsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUM3QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztRQUN2QyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ1gsTUFBTSxXQUFXLEdBQ2IsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDakUsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN6QixNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ2IsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUU7b0JBQzFCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUMxQyxJQUFJLENBQVMsQ0FBQztvQkFDZCxJQUFJLENBQVMsQ0FBQztvQkFDZCxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLENBQUM7d0JBQzNCLE1BQU0sVUFBVSxHQUNaLElBQUksQ0FBQyxvQ0FBb0MsQ0FBQyxRQUFRLENBQUMsQ0FBQzt3QkFDeEQsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQzt3QkFDckMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQztvQkFDekMsQ0FBQzt5QkFBTSxDQUFDO3dCQUNKLENBQUM7NEJBQ0csQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU87Z0NBQ3pCLFFBQVEsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7Z0NBQ3hDLElBQUksQ0FBQyxVQUFVLENBQUM7d0JBQ3BCLENBQUM7NEJBQ0csQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU87Z0NBQ3pCLFFBQVEsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7Z0NBQ3hDLElBQUksQ0FBQyxVQUFVLENBQUM7b0JBQ3hCLENBQUM7b0JBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQ25DLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUNuQyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDbEUsQ0FBQyxDQUFDLENBQ0wsQ0FBQztnQkFDRixXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUN0QixPQUFPLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDM0IsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGtCQUFrQixDQUNyQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQ25DLENBQUM7WUFDTixDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxtQkFBbUI7UUFDckIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDO1FBQ2xELE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFDLE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxtQkFBbUIsQ0FBQyxhQUFxQixFQUFFO1FBQ3ZDLDRDQUE0QztRQUU1QyxLQUFLLE1BQU0sTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDMUMsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNoRCxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQ3JELE1BQU0sQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQztZQUM3QixJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNuQyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQzNCLE1BQU0sU0FBUyxHQUNYLElBQUksQ0FBQyxVQUFVO29CQUNmLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDekQsTUFBTSxTQUFTLEdBQ1gsSUFBSSxDQUFDLFVBQVU7b0JBQ2YsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUMzRCxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsU0FBUyxHQUFHLENBQUMsSUFBSSxDQUFDO2dCQUNuRCxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsU0FBUyxHQUFHLENBQUMsSUFBSSxDQUFDO1lBQ3hELENBQUM7aUJBQU0sQ0FBQztnQkFDSixNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQztnQkFDekQsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUM7WUFDOUQsQ0FBQztZQUVELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xELENBQUM7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLHdCQUF3QixDQUFDLElBQVU7UUFDckMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUN4RCxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3JCLDBCQUEwQjtZQUMxQixVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbkQsS0FBSyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDOUQsQ0FBQztRQUNELE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQzdCLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FDOUMsQ0FBQztRQUNWLElBQUksY0FBYyxFQUFFLENBQUM7WUFDakIsTUFBTSxNQUFNLEdBQUcsTUFBTSxhQUFhLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzFELElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ1QsY0FBYyxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUM7WUFDckMsQ0FBQztZQUNELGNBQWMsQ0FBQyxhQUFhLEdBQUcsVUFBVTtnQkFDckMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRO2dCQUNyQixDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUN4QixDQUFDO1FBQ0QsT0FBTyxjQUFjLElBQUksSUFBSSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxvQ0FBb0MsQ0FBQyxRQUlwQztRQUNHLE1BQU0sU0FBUyxHQUNYLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUNyRSxNQUFNLFNBQVMsR0FDWCxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDckUsSUFBSSxDQUFDLEdBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEdBQUcsU0FBUyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDO1FBQzNFLElBQUksQ0FBQyxHQUNELElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxHQUFHLFNBQVMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQztRQUMzRSxNQUFNLFNBQVMsR0FDWCxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzRSx1Q0FBdUM7UUFDdkMsTUFBTSxTQUFTLEdBQ1gsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0UsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUM7UUFFNUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUM7UUFDNUUscUJBQXFCO1FBRXJCLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDO0lBQzFELENBQUM7d0dBbjlCUSxXQUFXLGtCQTJFUixtQkFBbUI7NEdBM0V0QixXQUFXLGNBRlIsTUFBTTs7NEZBRVQsV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckI7OzBCQTRFUSxNQUFNOzJCQUFDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGZ1bmMtbmFtZXMgKi9cbi8qIGVzbGludC1kaXNhYmxlIGNsYXNzLW1ldGhvZHMtdXNlLXRoaXMgKi9cbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZ2V0RG9jdW1lbnQsIEdsb2JhbFdvcmtlck9wdGlvbnMgfSBmcm9tICdwZGZqcy1kaXN0JztcbmltcG9ydCBwYW56b29tIGZyb20gJ3Bhbnpvb20nO1xuaW1wb3J0IHZpZGVvanMgZnJvbSBcInZpZGVvLmpzXCI7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtcbiAgICBDb21tZW50VHlwZSxcbiAgICBGZWF0dXJlVHlwZSxcbiAgICBQbGFuLFxuICAgIFBvaVR5cGUsXG4gICAgWm9uZSxcbn0gZnJvbSAnLi4vLi4vdHlwZXMuc2VydmljZSc7XG5pbXBvcnQgeyBCYXNlVmlzaWJpbGl0eVNlcnZpY2UgfSBmcm9tICcuLi9iYXNlVmlzaWJpbGl0eS5zZXJ2aWNlJztcbmltcG9ydCB7IE1hdHRlcnBvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vbWF0dGVycG9ydC5zZXJ2aWNlJztcbmltcG9ydCB7IFZpZXdlclNlcnZpY2UgfSBmcm9tICcuLi92aWV3ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBab25lU2VydmljZSB9IGZyb20gJy4vem9uZS5zZXJ2aWNlJztcbmltcG9ydCB7IE5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9uYXZpZ2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgZ2V0U2lnbmVkRmlsZSwgdXBsb2FkRmlsZVRvUzMgfSBmcm9tICcuLi9zMy5zZXJ2aWNlJztcbmltcG9ydCB7IEJhc2VUYWdTZXJ2aWNlIH0gZnJvbSAnLi4vdGFnLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29uZmlnIH0gZnJvbSAnLi4vLi4vY29uZmlnJztcbmltcG9ydCB7IGdldENvZWZmaWNpZW50c0ZvckltYWdlIH0gZnJvbSAnLi4vem9uZS1kcmF3ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBnZXRNZXRhRm9ySW1hZ2UgfSBmcm9tICcuLi8uLi9oZWxwZXJzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29udGVudFNlcnZpY2UgfSBmcm9tICcuLi9jb250ZW50LnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBQbGFuU2VydmljZSB7XG4gICAgY2hvc2VuUGxhbjogUGxhbjtcblxuICAgIGN1cnJlbnRQbGFuOiBQbGFuO1xuXG4gICAgY3VycmVudFN3ZWVwOiBzdHJpbmc7XG5cbiAgICBwbGFuRmlsZUNhY2hlOiBGaWxlO1xuXG4gICAgcGxhbkNhbnZhczogYW55O1xuXG4gICAgcGxhbkRpdjogSFRNTEVsZW1lbnQgfCBTVkdFbGVtZW50O1xuICAgIHBsYW5EaXZDb250ZW50OiBIVE1MRWxlbWVudDtcblxuICAgIHBhbnpvb206IGFueTtcblxuICAgIGlzUmVhZHk6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIHVzZXJQb3NpdGlvbkJ0bjogSFRNTEJ1dHRvbkVsZW1lbnQ7XG5cbiAgICBjb2VmZlBsYW5YOiBudW1iZXI7XG5cbiAgICBjb2VmZlBsYW5ZOiBudW1iZXI7XG5cbiAgICBjYWxpYnJhdGlvblBsYW46IGFueTtcblxuICAgIGRldGFpbFRhZ0RpdjogSFRNTEVsZW1lbnQ7XG5cbiAgICBkZXRhaWxUYWdEaXZJc0hvdmVyID0gZmFsc2U7XG5cbiAgICBidG5UYWdJc0hvdmVyID0gZmFsc2U7XG5cbiAgICByZXNpemVQbGFuU3Vic2NyaXB0aW9uID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcblxuICAgIGltZ1BsYW46IEhUTUxJbWFnZUVsZW1lbnQ7XG5cbiAgICBsYXN0VG91Y2hUaW1lID0gMDtcblxuICAgIGRlbGF5RGJsVG91Y2ggPSA1MDA7XG5cbiAgICBsYXN0Um90YXRpb246IG51bWJlciA9IDA7XG5cbiAgICBodG1sQ29udGVudFRvSW5qZWN0OiB7XG4gICAgICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgICAgIGNvbnRlbnQ6IHN0cmluZztcbiAgICAgICAgZWxlbWVudElEOiBzdHJpbmc7XG4gICAgICAgIHk6IG51bWJlcjtcbiAgICAgICAgeDogbnVtYmVyO1xuICAgICAgICB0YWdJY29uOiBzdHJpbmc7XG4gICAgICAgIHVybDogc3RyaW5nO1xuICAgIH1bXSA9IFtdO1xuXG4gICAgY2FjaGU6IHtcbiAgICAgICAgZXF1aXBJRHM6IHN0cmluZ1tdO1xuICAgICAgICB0aWNrZXRJRHM6IHN0cmluZ1tdO1xuICAgICAgICBtZWFzdXJlbWVudHNJRHM6IHN0cmluZ1tdO1xuICAgICAgICBmZWF0dXJlSURzOiBzdHJpbmdbXTtcbiAgICAgICAgem9uZUlEOiBzdHJpbmc7XG4gICAgICAgIHBsYW46IFBsYW47XG4gICAgICAgIGh0bWxDb250ZW50OiB7XG4gICAgICAgICAgICB0aXRsZTogc3RyaW5nO1xuICAgICAgICAgICAgY29udGVudDogc3RyaW5nO1xuICAgICAgICAgICAgZWxlbWVudElEOiBzdHJpbmc7XG4gICAgICAgICAgICB5OiBudW1iZXI7XG4gICAgICAgICAgICB4OiBudW1iZXI7XG4gICAgICAgICAgICB0YWdJY29uOiBzdHJpbmc7XG4gICAgICAgICAgICB1cmw6IHN0cmluZztcbiAgICAgICAgfVtdO1xuICAgIH07XG5cbiAgICBmb2N1c01vdXNlVGFnRGl2OiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBBUEk6IGFueTsgLy9BV1NcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KCdjdXJyZW50QVBJU2VydmljZScpIGFwaUluamVjdGVkOiBhbnksXG4gICAgICAgIHByaXZhdGUgem9uZVNlcnZpY2U6IFpvbmVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG5hdmlnYXRpb25TZXJ2aWNlOiBOYXZpZ2F0aW9uU2VydmljZSxcbiAgICAgICAgLy8gdGFnU2VydmljZTogQmFzZVRhZ1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdmlld2VyU2VydmljZTogVmlld2VyU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgcHJpdmF0ZSBtYXR0ZXJwb3J0U2VydmljZTogTWF0dGVycG9ydFNlcnZpY2UsXG4gICAgICAgIC8vIHByaXZhdGUgY29uZmlnOiBBcHBDb25maWcsXG4gICAgICAgIHByaXZhdGUgdmlzaWJpbGl0eVNlcnZpY2U6IEJhc2VWaXNpYmlsaXR5U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjb250ZW50U2VydmljZTogQ29udGVudFNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgdGhpcy5BUEkgPSBhcGlJbmplY3RlZDtcbiAgICAgICAgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5jdXJyZW50Q2FtZXJhUG9zZS5zdWJzY3JpYmUoKHBvc2UpID0+IHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUm90YXRpb24ocG9zZS5yb3RhdGlvbi55KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMgY3JlYXRlUGxhbihwbGFuSW5wdXQ6IFBsYW4pOiBQcm9taXNlPFBsYW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuQVBJLl9fcHJvdG9fXy5DcmVhdGVQbGFuKHBsYW5JbnB1dCk7XG4gICAgfVxuXG4gICAgYXN5bmMgZGVsZXRlUGxhbihwbGFuOiBQbGFuKTogUHJvbWlzZTxQbGFuPiB7XG4gICAgICAgIC8vIGF3YWl0IGRlbGV0ZUZyb21TMyhwbGFuLmFubmV4ZSk7XG4gICAgICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uRGVsZXRlUGxhbih7IGlkOiBwbGFuLmlkIH0pO1xuICAgIH1cblxuICAgIGFzeW5jIGdldFBsYW5zRm9yU3BhY2Uoc3BhY2VJRDogc3RyaW5nKTogUHJvbWlzZTxQbGFuW10+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuQVBJLl9fcHJvdG9fX1xuICAgICAgICAgICAgLlBsYW5zQnlTcGFjZShzcGFjZUlEKVxuICAgICAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5pdGVtcyk7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0UGxhbnNGb3Jab25lKHpvbmVJRDogc3RyaW5nKTogUHJvbWlzZTxQbGFuW10+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuQVBJLl9fcHJvdG9fX1xuICAgICAgICAgICAgLlBsYW5zQnlab25lKHpvbmVJRClcbiAgICAgICAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuaXRlbXMpO1xuICAgIH1cblxuICAgIGFzeW5jIGdldFNpbmdlZFBsYW5zRm9yU3BhY2Uoc3BhY2VJRDogc3RyaW5nKTogUHJvbWlzZTxQbGFuW10+IHtcbiAgICAgICAgY29uc3QgcGxhbnNGcm9tREIgPSBhd2FpdCB0aGlzLmdldFBsYW5zRm9yU3BhY2Uoc3BhY2VJRCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHBsYW5zRnJvbURCKTtcbiAgICAgICAgY29uc3QgcGxhbnMgPSBbXTtcbiAgICAgICAgaWYgKHBsYW5zRnJvbURCLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgICAgIHBsYW5zRnJvbURCLm1hcChhc3luYyAocGxhbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwbGFuT2JqZWN0ID0geyAuLi5wbGFuIH0gYXMgUGxhbjtcbiAgICAgICAgICAgICAgICAgICAgLy8gYW5uZXhlIGxvb2tzIGxpa2UgdmlzaXRzL21vZGVsSUQvcGxhbnMvZmlsZS5leHRlbnNpb25cbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2lnbmVkID0gYXdhaXQgZ2V0U2lnbmVkRmlsZShwbGFuLmFubmV4ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaWduZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYW5PYmplY3QuZmlsZXBhdGggPSBzaWduZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHBsYW4uYW5uZXhlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBbLCBtb2RlbElELCAsIGZpbGVuYW1lV2l0aEV4dGVuc2lvbl0gPSBwbGFuLmFubmV4ZS5zcGxpdCgnLycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWywgZXh0ZW50aW9uXSA9IGZpbGVuYW1lV2l0aEV4dGVuc2lvbi5zcGxpdCgnLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGxhbk9iamVjdC5tb2RlbDNkID0gbW9kZWxJRDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYW5PYmplY3QuZXh0ZW5zaW9uID0gZXh0ZW50aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGxhbnMucHVzaChwbGFuT2JqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBFcnJvciBwbGFuIGhhdmUgbm90IGFubmV4ZSA9PiBgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHBsYW4uaWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBsYW5zO1xuICAgIH1cblxuICAgIGFzeW5jIGdldFBsYW5zV2l0aFpvbmVzRm9yU3BhY2Uoc3BhY2VJRDogc3RyaW5nKTogUHJvbWlzZTxQbGFuW10+IHtcbiAgICAgICAgY29uc3QgcGxhbnMgPSBhd2FpdCB0aGlzLmdldFBsYW5zRm9yU3BhY2Uoc3BhY2VJRCk7XG4gICAgICAgIGNvbnN0IHBsYW5zWm9uZXMgPSBwbGFucy5maWx0ZXIoKHBsYW4pID0+IHBsYW4uem9uZSAmJiBwbGFuLmNhbGlicmF0aW9uKTtcbiAgICAgICAgcmV0dXJuIHBsYW5zWm9uZXM7XG4gICAgfVxuXG4gICAgc2V0Q2hvc2VuUGxhbihjaG9zZW5QbGFuOiBQbGFuKSB7XG4gICAgICAgIHRoaXMuY2hvc2VuUGxhbiA9IGNob3NlblBsYW47XG4gICAgfVxuXG4gICAgZ2V0Q2hvc2VuUGxhbigpOiBQbGFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hvc2VuUGxhbjtcbiAgICB9XG5cbiAgICBzZXRQbGFuRmlsZUNhY2hlKHBsYW5GaWxlQ2FjaGU6IEZpbGUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5wbGFuRmlsZUNhY2hlID0gcGxhbkZpbGVDYWNoZTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIGdldFBsYW5GaWxlQ2FjaGUoKTogRmlsZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBsYW5GaWxlQ2FjaGU7XG4gICAgfVxuXG4gICAgYXN5bmMgY3JlYXRlUGxhbldpdGhBbm5leGUocGxhbjogUGxhbiwgZmlsZTogRmlsZSk6IFByb21pc2U8UGxhbj4ge1xuICAgICAgICBjb25zdCBjcmVhdGVkUGxhbiA9IGF3YWl0IHRoaXMuY3JlYXRlUGxhbihwbGFuKTtcbiAgICAgICAgY29uc3QgbW9kZWwzRCA9IGF3YWl0IHRoaXMuem9uZVNlcnZpY2UuZ2V0TW9kZWwzREZvclpvbmUocGxhbi56b25lSUQpO1xuICAgICAgICBjb25zdCB1cmwgPSBhd2FpdCB1cGxvYWRGaWxlVG9TMyhcbiAgICAgICAgICAgIGB2aXNpdHMvJHttb2RlbDNEfS9wbGFucy9gLFxuICAgICAgICAgICAgZmlsZSxcbiAgICAgICAgICAgIGNyZWF0ZWRQbGFuLmlkXG4gICAgICAgICk7XG4gICAgICAgIGlmICh1cmwpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uVXBkYXRlUGxhbih7IGlkOiBjcmVhdGVkUGxhbi5pZCwgYW5uZXhlOiB1cmwgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNyZWF0ZWRQbGFuO1xuICAgIH1cblxuICAgIGFzeW5jIHVwZGF0ZVBsYW4ocGxhbjogYW55KTogUHJvbWlzZTxQbGFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uVXBkYXRlUGxhbihwbGFuKTtcbiAgICB9XG5cbiAgICBhc3luYyB1cGRhdGVQbGFuRmlsZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBpZiAodGhpcy5jaG9zZW5QbGFuICYmIHRoaXMucGxhbkZpbGVDYWNoZSkge1xuICAgICAgICAgICAgY29uc3QgbW9kZWwzRCA9IGF3YWl0IHRoaXMuem9uZVNlcnZpY2UuZ2V0TW9kZWwzREZvclpvbmUoXG4gICAgICAgICAgICAgICAgdGhpcy5jaG9zZW5QbGFuLnpvbmVJRFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiB1cGxvYWRGaWxlVG9TMyhcbiAgICAgICAgICAgICAgICBgdmlzaXRzLyR7bW9kZWwzRH0vcGxhbnMvYCxcbiAgICAgICAgICAgICAgICB0aGlzLnBsYW5GaWxlQ2FjaGUsXG4gICAgICAgICAgICAgICAgdGhpcy5jaG9zZW5QbGFuLmlkXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgpO1xuICAgIH1cblxuICAgIGFzeW5jIHNldEFsbFBsYW5zRm9yWm9uZU5vdEN1cnJlbnQoem9uZUlEOiBzdHJpbmcsIGN1cnJlbnRQbGFuSUQ6IHN0cmluZykge1xuICAgICAgICBjb25zdCBwbGFucyA9IGF3YWl0IHRoaXMuQVBJLl9fcHJvdG9fXy5MaXN0UGxhbnMoe1xuICAgICAgICAgICAgem9uZUlEOiB7IGVxOiB6b25lSUQgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgcGxhbnMuaXRlbXMubWFwKGFzeW5jIChwbGFuKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHBsYW4uaXNDdXJyZW50Rm9yWm9uZSAmJiBwbGFuLmlkICE9PSBjdXJyZW50UGxhbklEKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudXBkYXRlUGxhbih7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogcGxhbi5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzQ3VycmVudEZvclpvbmU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGFzeW5jIGNvbmZpZ3VyZVBsYW4oXG4gICAgICAgIGN1cnJlbnRQbGFuOiBQbGFuLFxuICAgICAgICBkaXZJZDogc3RyaW5nID0gJ3BsYW5EaXZQYW5lJyxcbiAgICAgICAgZGl2Q29udGVudElkOiBzdHJpbmcgPSAncGxhbkRpdlBhbmVDb250ZW50J1xuICAgICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICB0aGlzLmlzUmVhZHkgPSBmYWxzZTtcbiAgICAgICAgaWYgKCF0aGlzLmRldGFpbFRhZ0Rpdikge1xuICAgICAgICAgICAgdGhpcy5kZXRhaWxUYWdEaXYgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAgICAgICAgIGAjZGV0YWlsVGFnRGl2YFxuICAgICAgICAgICAgKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRldGFpbFRhZ0Rpdi5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWVudGVyJywgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5mb2N1c01vdXNlVGFnRGl2ID0gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZGV0YWlsVGFnRGl2LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmJ0blRhZ0lzSG92ZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGV0YWlsVGFnRGl2LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgICB0aGlzLmZvY3VzTW91c2VUYWdEaXYgPSBmYWxzZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5jYWxpYnJhdGlvblBsYW4gPSBKU09OLnBhcnNlKGN1cnJlbnRQbGFuLmNhbGlicmF0aW9uKTtcbiAgICAgICAgdGhpcy5jdXJyZW50UGxhbiA9IGN1cnJlbnRQbGFuO1xuICAgICAgICB0aGlzLnBsYW5EaXYgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtkaXZJZH1gKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgdGhpcy5wbGFuRGl2Q29udGVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgICBgIyR7ZGl2Q29udGVudElkfWBcbiAgICAgICAgKSBhcyBIVE1MRWxlbWVudDtcblxuICAgICAgICB0aGlzLnBsYW5EaXYuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMuaGFuZGxlVG91Y2guYmluZCh0aGlzKSk7XG4gICAgICAgIHRoaXMucGxhbkRpdi5hZGRFdmVudExpc3RlbmVyKCdkYmxjbGljaycsIHRoaXMub25EYmxDbGlja1BsYW4uYmluZCh0aGlzKSk7XG5cbiAgICAgICAgaWYgKCFjdXJyZW50UGxhbi5hbm5leGUuaW5jbHVkZXMoJ3BkZicpKSB7XG4gICAgICAgICAgICB0aGlzLmltZ1BsYW4gPSBhd2FpdCBnZXRNZXRhRm9ySW1hZ2UoY3VycmVudFBsYW4uZmlsZXBhdGgpO1xuICAgICAgICAgICAgLy9SZWN0IHVzZSBvZmZzZXRXaWR0aCA6IGhlaWdodCwgbm90IGFjdHVhbCBib3VuZGluZ0NsaWVudFJlY3QgYmVjYXVzZSB3aWxsIGJlIG1vZGlmaWVkIGJ5IHRoZSB6b29tLlxuICAgICAgICAgICAgY29uc3QgcmVjdCA9IHtcbiAgICAgICAgICAgICAgICB3aWR0aDogdGhpcy5wbGFuRGl2Q29udGVudC5vZmZzZXRXaWR0aCxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IHRoaXMucGxhbkRpdkNvbnRlbnQub2Zmc2V0SGVpZ2h0LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IHsgY29lZmZYLCBjb2VmZlkgfSA9IGdldENvZWZmaWNpZW50c0ZvckltYWdlKHRoaXMuaW1nUGxhbiwgcmVjdCk7XG4gICAgICAgICAgICB0aGlzLmNvZWZmUGxhblggPSBjb2VmZlg7XG4gICAgICAgICAgICB0aGlzLmNvZWZmUGxhblkgPSBjb2VmZlk7XG5cbiAgICAgICAgICAgIHRoaXMucGxhbkRpdkNvbnRlbnQuc3R5bGUuYmFja2dyb3VuZEltYWdlID0gYHVybCgke2N1cnJlbnRQbGFuLmZpbGVwYXRofSlgO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5kcmF3UGRmKGN1cnJlbnRQbGFuKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBsYW5EaXZDb250ZW50LnN0eWxlLmJhY2tncm91bmRTaXplID0gJ2NvbnRhaW4nO1xuICAgICAgICB0aGlzLnBsYW5EaXZDb250ZW50LnN0eWxlLmJhY2tncm91bmRSZXBlYXQgPSAnbm8tcmVwZWF0JztcblxuICAgICAgICB0aGlzLnBhbnpvb20gPSBwYW56b29tKHRoaXMucGxhbkRpdiwge1xuICAgICAgICAgICAgYm91bmRzOiB0cnVlLFxuICAgICAgICAgICAgYm91bmRzUGFkZGluZzogMCxcbiAgICAgICAgICAgIG1heFpvb206IDQsXG4gICAgICAgICAgICB6b29tRG91YmxlQ2xpY2tTcGVlZDogMSwgLy9kaXNhYmxlcyBkb3VibGUgY2xpY2sgem9vbVxuICAgICAgICAgICAgLy9pbml0aWFsWm9vbTogNFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5wYW56b29tLnpvb21BYnMoMCwgMCwgNCk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVSb3RhdGlvbih0aGlzLmxhc3RSb3RhdGlvbik7XG4gICAgICAgIH0sIDIwMCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNsZWFyUGxhbkltYWdlKCkge1xuICAgICAgICBpZiAodGhpcy5wbGFuRGl2Q29udGVudCkge1xuICAgICAgICAgICAgdGhpcy5wbGFuRGl2Q29udGVudC5zdHlsZS5iYWNrZ3JvdW5kSW1hZ2UgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgZHJhd1BkZihjdXJyZW50UGxhbjogUGxhbik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpIGFzIEhUTUxDYW52YXNFbGVtZW50O1xuXG4gICAgICAgICAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoJzJkJykgYXMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEO1xuICAgICAgICAgICAgR2xvYmFsV29ya2VyT3B0aW9ucy53b3JrZXJTcmMgPSBgLy9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvcGRmLmpzLzQuNC4xNjgvcGRmLndvcmtlci5taW4ubWpzYDtcbiAgICAgICAgICAgIGNvbnN0IHBkZiA9IGF3YWl0IGdldERvY3VtZW50KGN1cnJlbnRQbGFuLmZpbGVwYXRoKS5wcm9taXNlO1xuICAgICAgICAgICAgY29uc3QgcGFnZSA9IGF3YWl0IHBkZi5nZXRQYWdlKDEpO1xuXG4gICAgICAgICAgICBjb25zdCB2aWV3UG9ydFBhcmFtZXRlcnMgPSB7IHNjYWxlOiAxLjUgfTtcbiAgICAgICAgICAgIGNvbnN0IHZpZXdwb3J0ID0gcGFnZS5nZXRWaWV3cG9ydCh2aWV3UG9ydFBhcmFtZXRlcnMpO1xuXG4gICAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gdmlld3BvcnQuaGVpZ2h0O1xuICAgICAgICAgICAgY2FudmFzLndpZHRoID0gdmlld3BvcnQud2lkdGg7XG4gICAgICAgICAgICBjb25zdCByZW5kZXJDb250ZXh0ID0ge1xuICAgICAgICAgICAgICAgIGNhbnZhc0NvbnRleHQ6IGNvbnRleHQsXG4gICAgICAgICAgICAgICAgdmlld3BvcnQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgcmVuZGVyVGFzayA9IHBhZ2UucmVuZGVyKHJlbmRlckNvbnRleHQpLnByb21pc2U7XG4gICAgICAgICAgICByZW5kZXJUYXNrLnRoZW4oYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGltZ1VybCA9IGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL3BuZycpO1xuICAgICAgICAgICAgICAgIHRoaXMuaW1nUGxhbiA9IGF3YWl0IGdldE1ldGFGb3JJbWFnZShpbWdVcmwpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlY3QgPSB7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiB0aGlzLnBsYW5EaXZDb250ZW50Lm9mZnNldFdpZHRoLFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IHRoaXMucGxhbkRpdkNvbnRlbnQub2Zmc2V0SGVpZ2h0LFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY29uc3QgeyBjb2VmZlgsIGNvZWZmWSB9ID0gZ2V0Q29lZmZpY2llbnRzRm9ySW1hZ2UodGhpcy5pbWdQbGFuLCByZWN0KTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvZWZmUGxhblggPSBjb2VmZlg7XG4gICAgICAgICAgICAgICAgdGhpcy5jb2VmZlBsYW5ZID0gY29lZmZZO1xuICAgICAgICAgICAgICAgIHRoaXMucGxhbkRpdi5zdHlsZS5iYWNrZ3JvdW5kSW1hZ2UgPSBgdXJsKCR7aW1nVXJsfSlgO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyBkcmF3RWxlbWVudChcbiAgICAgICAgZWxlbWVudDogYW55LFxuICAgICAgICB0YWdUeXBlOiBQb2lUeXBlLFxuICAgICAgICBjdXJyZW50UGxhbjogUGxhbixcbiAgICAgICAgdGFnU2VydmljZTogQmFzZVRhZ1NlcnZpY2UsXG4gICAgICAgIGNvbmZpZzogQ29uZmlnLFxuICAgICAgICBzaXplQnV0dG9uOiBudW1iZXIgPSAxMFxuICAgICkge1xuICAgICAgICBjb25zdCBbcG9pXSA9IGVsZW1lbnQucG9pcy5pdGVtcztcbiAgICAgICAgaWYgKHBvaSAmJiBwb2kuY29vcmRpbmF0ZSAmJiBjdXJyZW50UGxhbikge1xuICAgICAgICAgICAgY29uc3QgeyB6b25lIH0gPSBjdXJyZW50UGxhbjtcbiAgICAgICAgICAgIGlmICh6b25lKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcG9zaXRpb24gPSBKU09OLnBhcnNlKHBvaS5jb29yZGluYXRlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBidXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudFRpdGxlOiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgY29uc3QgdXJsID0gdGFnU2VydmljZS5nZXRVcmxGb3JTZWVEZXRhaWxzKGVsZW1lbnQsIHRhZ1R5cGUpO1xuICAgICAgICAgICAgICAgIGxldCB0YWdJY29uSW1hZ2U6IHN0cmluZztcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRhZ1R5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBQb2lUeXBlLlRJQ0tFVDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFnSWNvbkltYWdlID0gY29uZmlnLm15X2NvbmZpZy5pY29uX3RpY2tldDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgUG9pVHlwZS5FUVVJUE1FTlQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhZ0ljb25JbWFnZSA9IGNvbmZpZy5teV9jb25maWcuaWNvbl9lcXVpcG1lbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXNlIFBvaVR5cGUuTUVBU1VSRTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhZ0ljb25JbWFnZSA9IGNvbmZpZy5teV9jb25maWcuaWNvbl9tZWFzdXJlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgUG9pVHlwZS5PQkpFQ1QzRDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhZ0ljb25JbWFnZSA9IGNvbmZpZy5teV9jb25maWcuaWNvbl9vYmplY3QzZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFBvaVR5cGUuREFUQTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhZ0ljb25JbWFnZSA9IGNvbmZpZy5teV9jb25maWcuaWNvbl9kYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgUG9pVHlwZS5ERVNLOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGFnSWNvbkltYWdlID0gY29uZmlnLm15X2NvbmZpZy5pY29uX2RhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHBvaS50YWdJY29uKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhZ0ljb24gPSBKU09OLnBhcnNlKHBvaS50YWdJY29uKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFnVHlwZSA9PT0gUG9pVHlwZS5EQVRBICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnR5cGUgPT09IEZlYXR1cmVUeXBlLklORElDQVRPUl9URU1QXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFnSWNvbi5zcmMgPSB0YWdTZXJ2aWNlLmdldEljb25UYWdJbWFnZUZvckZlYXR1cmUoZWxlbWVudCwgcG9pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBwb2kudGFnSWNvbiA9IHRhZ0ljb247XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhZ0ljb24uc3JjKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzb3VyY2UgPSBhd2FpdCBnZXRTaWduZWRGaWxlKHRhZ0ljb24uc3JjKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdJY29uSW1hZ2UgPSBzb3VyY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zdHlsZUJ1dHRvbihidXR0b24sIHRhZ0ljb25JbWFnZSwgc2l6ZUJ1dHRvbik7XG4gICAgICAgICAgICAgICAgYnV0dG9uLmlkID0gZWxlbWVudC5pZDtcbiAgICAgICAgICAgICAgICB0aGlzLnBsYW5EaXZDb250ZW50LmFwcGVuZChidXR0b24pO1xuICAgICAgICAgICAgICAgIGxldCB4OiBudW1iZXI7XG4gICAgICAgICAgICAgICAgbGV0IHk6IG51bWJlcjtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jYWxpYnJhdGlvblBsYW4ubmV3KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGFsZXJ0KFwibmV3IGNhbGlicmF0aW9uIHBsYW46IHBvc2l0aW9uaW5nIG5vdCByZWFkeSB5ZXRcIik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uMkQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1Qb3NpdGlvbjNERm9yTmV3Q2FsaWJyYXRpb24ocG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICB4ID0gcG9zaXRpb24yRC54O1xuICAgICAgICAgICAgICAgICAgICB5ID0gcG9zaXRpb24yRC55O1xuICAgICAgICAgICAgICAgICAgICBidXR0b24uc3R5bGUudG9wID0gYCR7eSAvIHBvc2l0aW9uMkQuY29lZmZZIC0gNX1weGA7XG4gICAgICAgICAgICAgICAgICAgIGJ1dHRvbi5zdHlsZS5sZWZ0ID0gYCR7eCAvIHBvc2l0aW9uMkQuY29lZmZYIC0gNX1weGA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdG8gcmVtb3ZlIHdoZW4gYWxsIGNhbGlicmF0aW9ucyBhcmUgbmV3XG4gICAgICAgICAgICAgICAgICAgIHggPVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxpYnJhdGlvblBsYW4ub2Zmc2V0WCArIHBvc2l0aW9uLnggKiB0aGlzLmNhbGlicmF0aW9uUGxhbi54O1xuICAgICAgICAgICAgICAgICAgICB5ID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsaWJyYXRpb25QbGFuLm9mZnNldFkgKyBwb3NpdGlvbi56ICogdGhpcy5jYWxpYnJhdGlvblBsYW4ueTtcbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uLnN0eWxlLnRvcCA9IGAke3kgLyB0aGlzLmNvZWZmUGxhblkgLSA1fXB4YDtcbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uLnN0eWxlLmxlZnQgPSBgJHt4IC8gdGhpcy5jb2VmZlBsYW5YIC0gNX1weGA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgaHRtbCA9IGF3YWl0IHRhZ1NlcnZpY2UuZ2V0SHRtbFRvSW5qZWN0KHRhZ1R5cGUsIGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGlmIChodG1sICE9ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaHRtbENvbnRlbnRUb0luamVjdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRJRDogZWxlbWVudC5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGh0bWwsXG4gICAgICAgICAgICAgICAgICAgICAgICB5LFxuICAgICAgICAgICAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhZ0ljb246IHRhZ0ljb25JbWFnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiB3ZSBkb24ndCBoYXZlIGh0bWwgPT4gY2FzZSBvZiBFTUJFRCBDb21tZW50IHR5cGVcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29tbWVudEVtYmVkID0gZWxlbWVudC5jb21tZW50cz8uaXRlbXMuZmluZChcbiAgICAgICAgICAgICAgICAgICAgICAgIChjb20pID0+IGNvbS50eXBlID09PSBDb21tZW50VHlwZS5FTUJFRCAmJiBjb20uc2hvd25JblRhZ1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWVudEVtYmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmh0bWxDb250ZW50VG9JbmplY3QucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudElEOiBlbGVtZW50LmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBlbGVtZW50LnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGA8aWZyYW1lIHNyYz0ke2NvbW1lbnRFbWJlZC5leHRlcm5hbExpbmt9IGhlaWdodD1cIjIwMHB4XCIgd2lkdGg9XCIxMDAlXCI+PC9pZnJhbWU+YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnSWNvbjogdGFnSWNvbkltYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRMaXN0ZW5lcnNUb0J1dHRvbihidXR0b24sIHVybCwgdGFnU2VydmljZSwgZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVSb3RhdGlvbih0aGlzLmxhc3RSb3RhdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBkcmF3VXNlclBvc2l0aW9uKGN1cnJlbnRTd2VlcCA9IHRoaXMuY3VycmVudFN3ZWVwLCBzaXplQnV0dG9uOiBudW1iZXIgPSAxMCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRTd2VlcCA9IGN1cnJlbnRTd2VlcDtcbiAgICAgICAgaWYgKHRoaXMuY2FsaWJyYXRpb25QbGFuICYmIGN1cnJlbnRTd2VlcCkge1xuICAgICAgICAgICAgY29uc3QgcG9zaXRpb24gPVxuICAgICAgICAgICAgICAgIHRoaXMubWF0dGVycG9ydFNlcnZpY2UuZ2V0Q3VycmVudENhbWVyYVBvc2l0aW9uKCk/LnBvc2l0aW9uO1xuICAgICAgICAgICAgaWYgKHBvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnVzZXJQb3NpdGlvbkJ0bikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVzZXJQb3NpdGlvbkJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVzZXJQb3NpdGlvbkJ0bi5pZCA9ICdjdXJyZW50UG9zaXRpb24nO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsYW5EaXZDb250ZW50LmFwcGVuZCh0aGlzLnVzZXJQb3NpdGlvbkJ0bik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXNlclBvc2l0aW9uQnRuLnRpdGxlID0gJ1lvdSBhcmUgaGVyZSc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3R5bGVCdXR0b24oXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVzZXJQb3NpdGlvbkJ0bixcbiAgICAgICAgICAgICAgICAgICAgICAgICdodHRwczovL2FwaS5pY29uaWZ5LmRlc2lnbi9ieDpieHMtdXNlci1jaXJjbGUuc3ZnP2NvbG9yPWdyZWVuJmhlaWdodD0xNyZ3aWR0aD0xNycsXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCB4OiBudW1iZXI7XG4gICAgICAgICAgICAgICAgbGV0IHk6IG51bWJlcjtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jYWxpYnJhdGlvblBsYW4ubmV3KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uMkQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1Qb3NpdGlvbjNERm9yTmV3Q2FsaWJyYXRpb24ocG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICB4ID0gcG9zaXRpb24yRC54IC8gcG9zaXRpb24yRC5jb2VmZlggLSA1O1xuICAgICAgICAgICAgICAgICAgICB5ID0gcG9zaXRpb24yRC55IC8gcG9zaXRpb24yRC5jb2VmZlkgLSA1O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHggPVxuICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMuY2FsaWJyYXRpb25QbGFuLm9mZnNldFggK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uLnggKiB0aGlzLmNhbGlicmF0aW9uUGxhbi54KSAvXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvZWZmUGxhblg7XG4gICAgICAgICAgICAgICAgICAgIHkgPVxuICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMuY2FsaWJyYXRpb25QbGFuLm9mZnNldFkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uLnogKiB0aGlzLmNhbGlicmF0aW9uUGxhbi55KSAvXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvZWZmUGxhblk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMudXNlclBvc2l0aW9uQnRuLnN0eWxlLnRvcCA9IGAke3l9cHhgO1xuICAgICAgICAgICAgICAgIHRoaXMudXNlclBvc2l0aW9uQnRuLnN0eWxlLmxlZnQgPSBgJHt4fXB4YDtcbiAgICAgICAgICAgICAgICB0aGlzLm1vdmVPblBvaW50KHsgeDogeCArIDUsIHk6IHkgKyA1IH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2VudGVyIHRoZSB2aWV3IG9mIHRoZSBwbGFuIG9uIGNvb3JkaW5hdGVzXG4gICAgICogQHBhcmFtIGNvb3JkaW5hdGUgQ29vcmRpbmF0ZSBvbiB0aGUgcGxhblxuICAgICAqL1xuICAgIG1vdmVPblBvaW50KGNvb3JkaW5hdGUpIHtcbiAgICAgICAgaWYgKHRoaXMucGxhbkRpdikge1xuICAgICAgICAgICAgY29uc3Qgc2NhbGUgPSB0aGlzLnBhbnpvb20uZ2V0VHJhbnNmb3JtKCkuc2NhbGU7XG4gICAgICAgICAgICBjb25zdCBtb3ZlWCA9IHRoaXMucGxhbkRpdi5jbGllbnRXaWR0aCAvIDIgLSBjb29yZGluYXRlLnggKiBzY2FsZTtcbiAgICAgICAgICAgIGNvbnN0IG1vdmVZID0gdGhpcy5wbGFuRGl2LmNsaWVudEhlaWdodCAvIDIgLSBjb29yZGluYXRlLnkgKiBzY2FsZTtcbiAgICAgICAgICAgIHRoaXMucGFuem9vbS5tb3ZlVG8obW92ZVgsIG1vdmVZKTtcbiAgICAgICAgICAgIHRoaXMucGxhbkRpdkNvbnRlbnQuc3R5bGUudHJhbnNmb3JtT3JpZ2luID0gYCR7Y29vcmRpbmF0ZS54fXB4ICR7Y29vcmRpbmF0ZS55fXB4YDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFwcGx5IGEgcm90YXRpb24gdG8gdGhlIHBsYW5cbiAgICAgKiBCdXR0b25zIHdpbGwgcmVtYWluIGluIHRoZSBjb3JyZWN0IHJvdGF0aW9uXG4gICAgICogQHBhcmFtIHJvdGF0aW9uXG4gICAgICovXG4gICAgdXBkYXRlUm90YXRpb24ocm90YXRpb24pIHtcbiAgICAgICAgdGhpcy5sYXN0Um90YXRpb24gPSByb3RhdGlvbjtcbiAgICAgICAgaWYgKHRoaXMucGxhbkRpdkNvbnRlbnQpIHtcbiAgICAgICAgICAgIHRoaXMucGxhbkRpdkNvbnRlbnQuc3R5bGUudHJhbnNmb3JtID0gYHJvdGF0ZSgke3JvdGF0aW9ufWRlZylgO1xuICAgICAgICAgICAgY29uc3QgYnV0dG9ucyA9IHRoaXMucGxhbkRpdkNvbnRlbnQucXVlcnlTZWxlY3RvckFsbCgnYnV0dG9uJyk7XG4gICAgICAgICAgICBsZXQgcm90YXRpb25SZWdleCA9IC8ocm90YXRlXFwoLT9cXGQqXFwuP1xcZCtkZWdcXCkpL2c7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby1hcnJheS1mb3ItZWFjaFxuICAgICAgICAgICAgYnV0dG9ucy5mb3JFYWNoKChidXR0b24pID0+IHtcbiAgICAgICAgICAgICAgICBidXR0b24uc3R5bGUudHJhbnNmb3JtID0gYnV0dG9uLnN0eWxlLnRyYW5zZm9ybS5yZXBsYWNlKHJvdGF0aW9uUmVnZXgsIFwiXCIpICsgYCByb3RhdGUoJHstcm90YXRpb259ZGVnKWA7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbW92ZUN1cnJlbnRQb3NpdGlvbigpIHtcbiAgICAgICAgY29uc3QgYnV0dG9uID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2N1cnJlbnRQb3NpdGlvbicpO1xuICAgICAgICBpZiAoYnV0dG9uKSB7XG4gICAgICAgICAgICBidXR0b24ucmVtb3ZlKCk7XG4gICAgICAgICAgICB0aGlzLnVzZXJQb3NpdGlvbkJ0biA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdHlsZUJ1dHRvbihidXR0b246IEhUTUxCdXR0b25FbGVtZW50LCB1cmw6IHN0cmluZywgc2l6ZUJ1dHRvbjogbnVtYmVyID0gMTApIHtcbiAgICAgICAgYnV0dG9uLnN0eWxlLmJhY2tncm91bmRJbWFnZSA9IGB1cmwoJHt1cmx9KWA7XG4gICAgICAgIGJ1dHRvbi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAndHJhbnNwYXJlbnQnO1xuICAgICAgICBidXR0b24uc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgICAgICBidXR0b24uc3R5bGUuYm9yZGVyID0gJ25vbmUnO1xuICAgICAgICBidXR0b24uc3R5bGUud2lkdGggPSBgMTBweGA7XG4gICAgICAgIGJ1dHRvbi5zdHlsZS5oZWlnaHQgPSBgMTBweGA7XG4gICAgICAgIGJ1dHRvbi5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICBidXR0b24uc3R5bGUuYmFja2dyb3VuZFNpemUgPSAnY29udGFpbic7XG4gICAgICAgIGJ1dHRvbi5zdHlsZS5iYWNrZ3JvdW5kUmVwZWF0ID0gJ25vLXJlcGVhdCc7XG4gICAgICAgIGJ1dHRvbi5zdHlsZS50cmFuc2Zvcm0gPSBgc2NhbGUoJHtzaXplQnV0dG9uLzEwfSlgXG4gIH1cblxuICAgIGFkZExpc3RlbmVyc1RvQnV0dG9uKFxuICAgICAgICBidXR0b246IEhUTUxCdXR0b25FbGVtZW50LFxuICAgICAgICB1cmw6IHN0cmluZyxcbiAgICAgICAgdGFnU2VydmljZTogQmFzZVRhZ1NlcnZpY2UgPSBudWxsLFxuICAgICAgICBlbGVtZW50OiBhbnkgPSBudWxsXG4gICAgKSB7XG4gICAgICAgIGxldCB2aWRlb0pzUGxheWVyO1xuICAgICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcignbW91c2VlbnRlcicsIGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udGVudEZvckJ1dHRvbiA9IHRoaXMuaHRtbENvbnRlbnRUb0luamVjdC5maW5kKFxuICAgICAgICAgICAgICAgIChvYmplY3QpID0+IG9iamVjdC5lbGVtZW50SUQgPT09IGJ1dHRvbi5pZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuYnRuVGFnSXNIb3ZlciA9IHRydWU7XG4gICAgICAgICAgICBjb25zdCB0aXRsZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCN0aXRsZVRhZ0RpdmApIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgaWYgKGNvbnRlbnRGb3JCdXR0b24udGl0bGUpIHtcbiAgICAgICAgICAgICAgICB0aXRsZS5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZSc7XG4gICAgICAgICAgICAgICAgdGl0bGUuaW5uZXJIVE1MID0gY29udGVudEZvckJ1dHRvbi50aXRsZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGl0bGUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgY29udGVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCNodG1sVGFnRGl2YCkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgICB0aGlzLmRldGFpbFRhZ0Rpdi5zdHlsZS50b3AgPSBgJHtldmVudC5jbGllbnRZICsgMTB9cHhgO1xuICAgICAgICAgICAgdGhpcy5kZXRhaWxUYWdEaXYuc3R5bGUubGVmdCA9IGAke2V2ZW50LmNsaWVudFggPCAxMjAgPyAwIDogZXZlbnQuY2xpZW50WCAtIDEyMFxuICAgICAgICAgICAgICAgIH1weGA7XG4gICAgICAgICAgICB0aGlzLmRldGFpbFRhZ0Rpdi5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGNvbnRlbnRGb3JCdXR0b24uY29udGVudCk7XG4gICAgICAgICAgICBjb250ZW50LmlubmVySFRNTCA9IGNvbnRlbnRGb3JCdXR0b24uY29udGVudDtcbiAgICAgICAgICAgIGNvbnN0IGRldGFpbEJ1dHRvbiA9IGNvbnRlbnQucXVlcnlTZWxlY3RvcignI2RldGFpbEJ0bicpO1xuICAgICAgICAgICAgaWYgKGRldGFpbEJ1dHRvbikge1xuICAgICAgICAgICAgICAgIGRldGFpbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52aXNpYmlsaXR5U2VydmljZS5kZXRhaWxTaG93aW5nLm5leHQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt1cmxdKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaGFuZGxlIGltYWdlIGNhcm91c2VsIGZ1bGxzY3JlZW4gYnV0dG9uXG4gICAgICAgICAgICBjb25zdCBpbWFnZUZ1bGxzY3JlZW5CdG4gPSBjb250ZW50LnF1ZXJ5U2VsZWN0b3IoJyNpbWFnZS1mb290ZXInKTtcbiAgICAgICAgICAgIGlmIChpbWFnZUZ1bGxzY3JlZW5CdG4pIHtcbiAgICAgICAgICAgICAgICBpbWFnZUZ1bGxzY3JlZW5CdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0YWdTZXJ2aWNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YWdTZXJ2aWNlLm9uQWN0aW9uSW1hZ2VDbGljayhjb250ZW50Rm9yQnV0dG9uLmVsZW1lbnRJRCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaGFuZGxlIGJvb2tpbmcgZnVsbHNjcmVlbiBidXR0b25cbiAgICAgICAgICAgIGNvbnN0IGJvb2tpbmdCdXR0b24gPSBjb250ZW50LnF1ZXJ5U2VsZWN0b3IoJyNib29raW5nQnRuJyk7XG4gICAgICAgICAgICBpZiAoYm9va2luZ0J1dHRvbikge1xuICAgICAgICAgICAgICAgIGJvb2tpbmdCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmlzaWJpbGl0eVNlcnZpY2UuZGV0YWlsU2hvd2luZy5uZXh0KHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdXJsXSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGhhbmRsZSBkb2N1bWVudCBwZGYgZnVsbHNjcmVlbiBidXR0b25cbiAgICAgICAgICAgIGNvbnN0IGRvY0Z1bGxzY3JlZW5CdG4gPSBjb250ZW50LnF1ZXJ5U2VsZWN0b3IoJyNkb2MtZm9vdGVyJyk7XG4gICAgICAgICAgICBpZiAoZG9jRnVsbHNjcmVlbkJ0biAmJiBlbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZG9jdW1lbnRVcmwgPSB0YWdTZXJ2aWNlLmdldEFubmV4ZUZvckNvbW1lbnRUeXBlSW5GZWF0dXJlKFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICBDb21tZW50VHlwZS5ET0NVTUVOVFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgZG9jRnVsbHNjcmVlbkJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhZ1NlcnZpY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhZ1NlcnZpY2Uub25BY3Rpb25Eb2NDbGljayhkb2N1bWVudFVybCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaGFuZGxlIHZpZGVvIGZ1bGxzY3JlZW4gYnV0dG9uXG4gICAgICAgICAgICBjb25zdCB2aWRlb0Z1bGxzY3JlZW5CdG4gPSBjb250ZW50LnF1ZXJ5U2VsZWN0b3IoJyNidG4tdmlkZW8tZnVsbHNjcmVlbicpO1xuICAgICAgICAgICAgaWYgKHZpZGVvRnVsbHNjcmVlbkJ0biAmJiBlbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmlkZW9VcmwgPSB0YWdTZXJ2aWNlLmdldEFubmV4ZUZvckNvbW1lbnRUeXBlSW5GZWF0dXJlKFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICBDb21tZW50VHlwZS5WSURFT1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdmlkZW9GdWxsc2NyZWVuQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGFnU2VydmljZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFnU2VydmljZS5vbkFjdGlvblZpZGVvQ2xpY2sodmlkZW9VcmwpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGhhbmRsZSBZb3V0dWJlIHZpZGVvIGZ1bGxzY3JlZW4gYnV0dG9uXG4gICAgICAgICAgICBjb25zdCB5b3V0dWJlRnVsbFNjcmVlbiA9IGNvbnRlbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAgICAgICAnI2J0bi12aWRlby1mdWxsc2NyZWVuLXlvdXR1YmUnXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKHlvdXR1YmVGdWxsU2NyZWVuICYmIGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB5b3V0dWJlVXJsID0gdGFnU2VydmljZS5nZXRBbm5leGVGb3JDb21tZW50VHlwZUluRmVhdHVyZShcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgQ29tbWVudFR5cGUuWU9VVFVCRVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgeW91dHViZUZ1bGxTY3JlZW4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0YWdTZXJ2aWNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YWdTZXJ2aWNlLm9uQWN0aW9uWW91dHViZUNsaWNrKHlvdXR1YmVVcmwpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGhhbmRsZSBtdXRlIHZpZGVvIGJ1dHRvblxuICAgICAgICAgICAgY29uc3QgYnRuTXV0ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdidG4tbXV0ZScpO1xuICAgICAgICAgICAgY29uc3QgaW1nT24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc291bmQtb24nKTtcbiAgICAgICAgICAgIGNvbnN0IGltZ09mZiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzb3VuZC1vZmYnKTtcbiAgICAgICAgICAgIGNvbnN0IHBsYXllckVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm11cy12aWRlby10YWdcIik7XG5cbiAgICAgICAgICAgIGlmIChwbGF5ZXJFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgdmlkZW9Kc1BsYXllciA9IHZpZGVvanMoXCJtdXMtdmlkZW8tdGFnXCIpO1xuICAgICAgICAgICAgICAgIGlmIChidG5NdXRlICYmIHZpZGVvSnNQbGF5ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgYnRuTXV0ZS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2aWRlb0pzUGxheWVyLm11dGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWRlb0pzUGxheWVyLm11dGVkKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW1nT24gJiYgaW1nT2ZmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZ09uLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lLWJsb2NrJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nT2ZmLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWRlb0pzUGxheWVyLm11dGVkKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbWdPbiAmJiBpbWdPZmYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nT24uc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nT2ZmLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lLWJsb2NrJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAvLyBoYW5kbGUgYXVkaW8gcGxheWVyIGJ1dHRvbnNcbiAgICAgICAgICAgIGNvbnN0IHBsYXllckJ1dHRvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5hdWRpby1wbGF5LWJ1dHRvbicpO1xuICAgICAgICAgICAgY29uc3QgYXVkaW8gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXVkaW8tdGFnJykgYXMgSFRNTE1lZGlhRWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IHRpbWVsaW5lID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAgICAgICAnLnRpbWVsaW5lLXRhZydcbiAgICAgICAgICAgICkgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgICAgICAgIC8vIGNvbnN0IHRpbWVsaW5lVmFsdWUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcudGltZWxpbmUtdGFnJykudmFsdWU7XG4gICAgICAgICAgICBjb25zdCBzb3VuZEJ1dHRvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5hdWRpby1zb3VuZC1idG4nKTtcbiAgICAgICAgICAgIGNvbnN0IHBsYXlBdWRpbyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwbGF5Jyk7XG4gICAgICAgICAgICBjb25zdCBwYXVzZUF1ZGlvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhdXNlJyk7XG4gICAgICAgICAgICBjb25zdCBpbWdTb3VuZE9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F1ZGlvLXNvdW5kLW9uJyk7XG4gICAgICAgICAgICBjb25zdCBpbWdTb3VuZE9mZiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdWRpby1zb3VuZC1vZmYnKTtcbiAgICAgICAgICAgIGNvbnN0IGF1ZGlvTW9kYWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnRuLWF1ZGlvLW1vZGFsJyk7XG4gICAgICAgICAgICBpZiAoYXVkaW8gJiYgcGxheWVyQnV0dG9uICYmIHRpbWVsaW5lKSB7XG4gICAgICAgICAgICAgICAgcGxheWVyQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYXVkaW8ucGF1c2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdWRpby5wbGF5KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXVzZUF1ZGlvLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lLWJsb2NrJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYXlBdWRpby5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW8ucGF1c2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdXNlQXVkaW8uc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYXlBdWRpby5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZS1ibG9jayc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBzb3VuZEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGF1ZGlvLm11dGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdWRpby5tdXRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaW1nU291bmRPbi5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZS1ibG9jayc7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbWdTb3VuZE9mZi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW8ubXV0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaW1nU291bmRPbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICAgICAgICAgICAgICAgICAgaW1nU291bmRPZmYuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gY2hhbmdlVGltZWxpbmVQb3NpdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGF1ZGlvLmR1cmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwZXJjZW50YWdlUG9zaXRpb24gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxMDAgKiBhdWRpby5jdXJyZW50VGltZSkgLyBhdWRpby5kdXJhdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBlcmNlbnRhZ2VQb3NpdGlvblN0cmluZyA9IHBlcmNlbnRhZ2VQb3NpdGlvbiArICclJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVsaW5lLnN0eWxlLmJhY2tncm91bmRTaXplID0gcGVyY2VudGFnZVBvc2l0aW9uU3RyaW5nICsgJyAxMDAlJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVsaW5lLnZhbHVlID0gcGVyY2VudGFnZVBvc2l0aW9uLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXVkaW8ub250aW1ldXBkYXRlID0gY2hhbmdlVGltZWxpbmVQb3NpdGlvbjtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBjaGFuZ2VTZWVrKCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0aW1lID0gKHBhcnNlSW50KHRpbWVsaW5lLnZhbHVlKSAqIGF1ZGlvLmR1cmF0aW9uKSAvIDEwMDtcbiAgICAgICAgICAgICAgICAgICAgYXVkaW8uY3VycmVudFRpbWUgPSB0aW1lO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aW1lbGluZS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBjaGFuZ2VTZWVrKTtcbiAgICAgICAgICAgICAgICB0aW1lbGluZS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGNoYW5nZVNlZWspO1xuICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBhdWRpbyBjbGlja1xuICAgICAgICAgICAgICAgIGlmIChhdWRpb01vZGFsICYmIGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXVkaW9Db21tZW50ID0gZWxlbWVudC5jb21tZW50cz8uaXRlbXMuZmluZChcbiAgICAgICAgICAgICAgICAgICAgICAgIChjb20pID0+IGNvbS50eXBlID09PSBDb21tZW50VHlwZS5BVURJTyAmJiBjb20uc2hvd25JblRhZ1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhdWRpb0NvbW1lbnRJRCA9IGF1ZGlvQ29tbWVudCA/IGF1ZGlvQ29tbWVudC5pZCA6ICcnO1xuICAgICAgICAgICAgICAgICAgICBhdWRpb01vZGFsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhZ1NlcnZpY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdTZXJ2aWNlLm9uQWN0aW9uQXVkaW9DbGljayhhdWRpb0NvbW1lbnRJRCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAvLyB3ZSB3YWl0IGlmIHVzZXIgaG92ZXJzIG9uIHRvIGRpdiBvZiB0aGUgdGFnIChjaGFuZ2VzIHRoaXMuZm9jdXNNb3VzZVRhZ0RpdilcbiAgICAgICAgICAgIHRoaXMuYnRuVGFnSXNIb3ZlciA9IGZhbHNlO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmZvY3VzTW91c2VUYWdEaXYgJiYgIXRoaXMuYnRuVGFnSXNIb3Zlcikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldGFpbFRhZ0Rpdi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmlkZW9Kc1BsYXllcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmlkZW9Kc1BsYXllci5kaXNwb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCAxMDApO1xuICAgICAgICB9KTtcbiAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kZXRhaWxUYWdEaXYuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgICAgIGlmICh2aWRlb0pzUGxheWVyKSB7XG4gICAgICAgICAgICAgICAgdmlkZW9Kc1BsYXllci5kaXNwb3NlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnZpZXdlclNlcnZpY2UuYWN0aW9uX21vdmVfdG9fdGFnKGJ1dHRvbi5pZCk7XG4gICAgICAgICAgICB0aGlzLnZpc2liaWxpdHlTZXJ2aWNlLmRldGFpbFNob3dpbmcubmV4dCh0cnVlKTtcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt1cmxdKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2xlYXJCdG4oaWRMaXN0OiBhbnlbXSkge1xuICAgICAgICBmb3IgKGNvbnN0IGlkIG9mIGlkTGlzdCkge1xuICAgICAgICAgICAgY29uc3QgYnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICAgICAgICAgICAgaWYgKGJ1dHRvbikge1xuICAgICAgICAgICAgICAgIGJ1dHRvbi5yZW1vdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsZWFyQWxsQnV0dG9ucygpIHtcbiAgICAgICAgaWYgKHRoaXMucGxhbkRpdkNvbnRlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGJ1dHRvbnMgPSB0aGlzLnBsYW5EaXZDb250ZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2J1dHRvbicpO1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8tYXJyYXktZm9yLWVhY2hcbiAgICAgICAgICAgIGJ1dHRvbnMuZm9yRWFjaChmdW5jdGlvbiAoY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFZhbHVlLnJlbW92ZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnVzZXJQb3NpdGlvbkJ0biA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGRhdGVBbGxCdXR0b25zU3R5bGUocHJvcGVydGllczogQXJyYXk8c3RyaW5nPiwgdmFsdWVzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgICAgIGlmICh0aGlzLnBsYW5EaXZDb250ZW50KSB7XG4gICAgICAgICAgICBjb25zdCBidXR0b25zID0gdGhpcy5wbGFuRGl2Q29udGVudC5xdWVyeVNlbGVjdG9yQWxsKCdidXR0b24nKTtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25vLWFycmF5LWZvci1lYWNoXG4gICAgICAgICAgICBidXR0b25zLmZvckVhY2goZnVuY3Rpb24gKGN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHByb3BlcnRpZXMuZm9yRWFjaCgocHJvcGVydHksIGkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5ID09PSBcInRyYW5zZm9ybVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvL0ZvciBzYXZpbmcgdGhlIHJvdGF0aW9uIGFuZCBhZGRpbmcgc2NhbGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByb3RhdGlvblJlZ2V4ID0gLyhyb3RhdGVcXCgtP1xcZCpcXC4/XFxkK2RlZ1xcKSkvZztcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByb3RhdGlvbk1hdGNoID0gY3VycmVudFZhbHVlLnN0eWxlW3Byb3BlcnR5XS5tYXRjaChyb3RhdGlvblJlZ2V4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyb3RhdGlvbk1hdGNoLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VmFsdWUuc3R5bGVbcHJvcGVydHldID0gYCR7dmFsdWVzW2ldfSAke3JvdGF0aW9uTWF0Y2hbMF19YDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRWYWx1ZS5zdHlsZVtwcm9wZXJ0eV0gPSB2YWx1ZXNbaV07XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblBsYW5SZW1vdmUoKSB7XG4gICAgICAgIHRoaXMudXNlclBvc2l0aW9uQnRuID0gbnVsbDtcbiAgICAgICAgdGhpcy5jYWxpYnJhdGlvblBsYW4gPSBudWxsO1xuICAgICAgICB0aGlzLmN1cnJlbnRTd2VlcCA9IG51bGw7XG4gICAgICAgIHRoaXMuZGV0YWlsVGFnRGl2ID0gbnVsbDtcbiAgICB9XG5cbiAgICBhc3luYyByZXNpemVQbGFuKGlzUmVtb3Zpbmc6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5yZXNpemVQbGFuU3Vic2NyaXB0aW9uLm5leHQoZmFsc2UpO1xuICAgICAgICBpZiAoaXNSZW1vdmluZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUubG9nKCdpbiByZXNpemVQbGFuJyk7XG4gICAgICAgIGlmICh0aGlzLnBsYW5EaXYgJiYgdGhpcy5jdXJyZW50U3dlZXApIHtcbiAgICAgICAgICAgIHRoaXMucGFuem9vbSA9IHBhbnpvb20odGhpcy5wbGFuRGl2LCB7XG4gICAgICAgICAgICAgICAgYm91bmRzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGJvdW5kc1BhZGRpbmc6IDAsXG4gICAgICAgICAgICAgICAgbWF4Wm9vbTogNCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHRoaXMucGxhbkRpdkNvbnRlbnQub2Zmc2V0V2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogdGhpcy5wbGFuRGl2Q29udGVudC5vZmZzZXRIZWlnaHQsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGNvZWZmWCwgY29lZmZZIH0gPSBnZXRDb2VmZmljaWVudHNGb3JJbWFnZSh0aGlzLmltZ1BsYW4sIHJlY3QpO1xuICAgICAgICAgICAgICAgIHRoaXMuY29lZmZQbGFuWCA9IGNvZWZmWDtcbiAgICAgICAgICAgICAgICB0aGlzLmNvZWZmUGxhblkgPSBjb2VmZlk7XG4gICAgICAgICAgICAgICAgdGhpcy5wYW56b29tLnpvb21BYnMoMCwgMCwgNCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNpemVQbGFuU3Vic2NyaXB0aW9uLm5leHQodHJ1ZSk7XG4gICAgICAgICAgICB9LCAyMDApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlVG91Y2goZXZlbnQpIHtcbiAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgaWYgKG5vdyAtIHRoaXMubGFzdFRvdWNoVGltZSA8IHRoaXMuZGVsYXlEYmxUb3VjaCkge1xuICAgICAgICAgICAgdGhpcy5sYXN0VG91Y2hUaW1lID0gMDtcbiAgICAgICAgICAgIC8vIHRoaXMub25EYmxDbGlja1BsYW4oZXZlbnQpO1xuICAgICAgICAgICAgLyoqIFNpbXVsYXRlIGEgZGJsY2xpY2sgZm9yIHBob25lICh3ZSBkb24ndCBnZXQgb2Zmc2V0WC9ZIG9uIHRvdWNoZXZlbnQpICovXG4gICAgICAgICAgICBjb25zdCBuZXdFdmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdNb3VzZUV2ZW50cycpO1xuICAgICAgICAgICAgY29uc3QgdG91Y2ggPSBldmVudC5jaGFuZ2VkVG91Y2hlc1swXTtcbiAgICAgICAgICAgIG5ld0V2ZW50LmluaXRNb3VzZUV2ZW50KFxuICAgICAgICAgICAgICAgICdkYmxjbGljaycsXG4gICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgICAgIGV2ZW50LnRhcmdldC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgdG91Y2guc2NyZWVuWCxcbiAgICAgICAgICAgICAgICB0b3VjaC5zY3JlZW5ZLFxuICAgICAgICAgICAgICAgIHRvdWNoLmNsaWVudFgsXG4gICAgICAgICAgICAgICAgdG91Y2guY2xpZW50WSxcbiAgICAgICAgICAgICAgICBldmVudC5jdHJsS2V5LFxuICAgICAgICAgICAgICAgIGV2ZW50LmFsdEtleSxcbiAgICAgICAgICAgICAgICBldmVudC5zaGlydEtleSxcbiAgICAgICAgICAgICAgICBldmVudC5tZXRhS2V5LFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGV2ZW50LnRhcmdldC5kaXNwYXRjaEV2ZW50KG5ld0V2ZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubGFzdFRvdWNoVGltZSA9IG5vdztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIG9uRGJsQ2xpY2tQbGFuKGV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGNvbnN0IGNsaWNrWCA9IGV2ZW50Lm9mZnNldFg7XG4gICAgICAgIGNvbnN0IGNsaWNrWSA9IGV2ZW50Lm9mZnNldFk7XG4gICAgICAgIGNvbnN0IHpvbmVQbGFuID0gdGhpcy5jdXJyZW50UGxhbi56b25lO1xuICAgICAgICBpZiAoem9uZVBsYW4pIHtcbiAgICAgICAgICAgIGNvbnN0IG5hdmlnYXRpb25zOiBhbnkgPVxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubmF2aWdhdGlvblNlcnZpY2UuZ2V0TmF2aWdhdGlvbnNGb3Jab25lKHpvbmVQbGFuKTtcbiAgICAgICAgICAgIGlmIChuYXZpZ2F0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgICAgICAgIG5hdmlnYXRpb25zLm1hcChhc3luYyAobmF2KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IEpTT04ucGFyc2UobmF2LnBvc2l0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB4OiBudW1iZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgeTogbnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY2FsaWJyYXRpb25QbGFuLm5ldykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uMkQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybVBvc2l0aW9uM0RGb3JOZXdDYWxpYnJhdGlvbihwb3NpdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IHBvc2l0aW9uMkQueCAvIHBvc2l0aW9uMkQuY29lZmZYO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBwb3NpdGlvbjJELnkgLyBwb3NpdGlvbjJELmNvZWZmWTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLmNhbGlicmF0aW9uUGxhbi5vZmZzZXRYICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uLnggKiB0aGlzLmNhbGlicmF0aW9uUGxhbi54KSAvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29lZmZQbGFuWDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMuY2FsaWJyYXRpb25QbGFuLm9mZnNldFkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24ueiAqIHRoaXMuY2FsaWJyYXRpb25QbGFuLnkpIC9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2VmZlBsYW5ZO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkaXN0WCA9IE1hdGguYWJzKGNsaWNrWCAtIHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGlzdFkgPSBNYXRoLmFicyhjbGlja1kgLSB5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hdi5kaXN0ID0gTWF0aC5zcXJ0KE1hdGgucG93KGRpc3RYLCAyKSArIE1hdGgucG93KGRpc3RZLCAyKSk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBuYXZpZ2F0aW9ucy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhLmRpc3QgLSBiLmRpc3Q7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5hY3Rpb25fZ29fdG9fc3dlZXAoXG4gICAgICAgICAgICAgICAgICAgIG5hdmlnYXRpb25zWzBdLm1hdHRlcnBvcnRTd2VlcElEXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyZXMgcGxhbiBmcm9tIGNhY2hlIChwcmV2aW91cyBwbGFuKS5cbiAgICAgKi9cbiAgICBhc3luYyB1cGxvYWRQbGFuRnJvbUNhY2hlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLmh0bWxDb250ZW50VG9JbmplY3QgPSB0aGlzLmNhY2hlLmh0bWxDb250ZW50O1xuICAgICAgICBhd2FpdCB0aGlzLmNvbmZpZ3VyZVBsYW4odGhpcy5jYWNoZS5wbGFuKTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFB1dHMgYnV0dG9ucyAodGFncykgZnJvbSBjYWNoZSBhY2NvcmRpbmcgdG8gcGFzc2VkIGVsZW1lbnQgSURzIChmb3IgZmlsdGVyIGlmIGFueSlcbiAgICAgKiBAcGFyYW0gZWxlbWVudElEcyBlbGVtZW50cyAodGlja2V0cywgZXF1aXBtZW50cywgZXRjKSB0byBiZSBzaG93biBvbiBwbGFuXG4gICAgICovXG4gICAgdXBsb2FkVGFnc0Zyb21DYWNoZShzaXplQnV0dG9uOiBudW1iZXIgPSAxMCkge1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhcInVwbG9hZGluZyB0YWdzIGZyb20gY2FjaGVcIik7XG5cbiAgICAgICAgZm9yIChjb25zdCBjYWNoZWQgb2YgdGhpcy5jYWNoZS5odG1sQ29udGVudCkge1xuICAgICAgICAgICAgY29uc3QgYnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG4gICAgICAgICAgICB0aGlzLnN0eWxlQnV0dG9uKGJ1dHRvbiwgY2FjaGVkLnRhZ0ljb24sIHNpemVCdXR0b24pO1xuICAgICAgICAgICAgYnV0dG9uLmlkID0gY2FjaGVkLmVsZW1lbnRJRDtcbiAgICAgICAgICAgIHRoaXMucGxhbkRpdkNvbnRlbnQuYXBwZW5kKGJ1dHRvbik7XG4gICAgICAgICAgICBpZiAodGhpcy5jYWxpYnJhdGlvblBsYW4ubmV3KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Q29lZmZYID1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2VmZlBsYW5YIC9cbiAgICAgICAgICAgICAgICAgICAgKHRoaXMuaW1nUGxhbi53aWR0aCAvIHRoaXMuY2FsaWJyYXRpb25QbGFuLmltZ1dpZHRoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdDb2VmZlkgPVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvZWZmUGxhblkgL1xuICAgICAgICAgICAgICAgICAgICAodGhpcy5pbWdQbGFuLmhlaWdodCAvIHRoaXMuY2FsaWJyYXRpb25QbGFuLmltZ0hlaWdodCk7XG4gICAgICAgICAgICAgICAgYnV0dG9uLnN0eWxlLnRvcCA9IGAke2NhY2hlZC55IC8gbmV3Q29lZmZZIC0gNX1weGA7XG4gICAgICAgICAgICAgICAgYnV0dG9uLnN0eWxlLmxlZnQgPSBgJHtjYWNoZWQueCAvIG5ld0NvZWZmWCAtIDV9cHhgO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBidXR0b24uc3R5bGUudG9wID0gYCR7Y2FjaGVkLnkgLyB0aGlzLmNvZWZmUGxhblkgLSA1fXB4YDtcbiAgICAgICAgICAgICAgICBidXR0b24uc3R5bGUubGVmdCA9IGAke2NhY2hlZC54IC8gdGhpcy5jb2VmZlBsYW5YIC0gNX1weGA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuYWRkTGlzdGVuZXJzVG9CdXR0b24oYnV0dG9uLCBjYWNoZWQudXJsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGdldENhbGlicmF0ZWRQbGFuRm9yWm9uZSh6b25lOiBab25lKTogUHJvbWlzZTxQbGFuPiB7XG4gICAgICAgIGxldCBwbGFucyA9IChhd2FpdCB0aGlzLkFQSS5QbGFuc0J5Wm9uZSh6b25lLmlkKSkuaXRlbXM7XG4gICAgICAgIGxldCBwYXJlbnRab25lID0gbnVsbDtcbiAgICAgICAgaWYgKHBsYW5zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgLy8gdHJ5IHRvIGZpbmQgcGFyZW50IHpvbmVcbiAgICAgICAgICAgIHBhcmVudFpvbmUgPSBhd2FpdCB0aGlzLkFQSS5HZXRab25lKHpvbmUucGFyZW50SUQpO1xuICAgICAgICAgICAgcGxhbnMgPSAoYXdhaXQgdGhpcy5BUEkuUGxhbnNCeVpvbmUoem9uZS5wYXJlbnRJRCkpLml0ZW1zO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNhbGlicmF0ZWRQbGFuID0gcGxhbnMuZmluZChcbiAgICAgICAgICAgIChwbGFuKSA9PiBwbGFuLmNhbGlicmF0aW9uICYmIHBsYW4uaXNDdXJyZW50Rm9yWm9uZVxuICAgICAgICApIGFzIFBsYW47XG4gICAgICAgIGlmIChjYWxpYnJhdGVkUGxhbikge1xuICAgICAgICAgICAgY29uc3Qgc2lnbmVkID0gYXdhaXQgZ2V0U2lnbmVkRmlsZShjYWxpYnJhdGVkUGxhbi5hbm5leGUpO1xuICAgICAgICAgICAgaWYgKHNpZ25lZCkge1xuICAgICAgICAgICAgICAgIGNhbGlicmF0ZWRQbGFuLmZpbGVwYXRoID0gc2lnbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FsaWJyYXRlZFBsYW4ubmF2aWdhdGlvbklEcyA9IHBhcmVudFpvbmVcbiAgICAgICAgICAgICAgICA/IHBhcmVudFpvbmUuc3dlZXBJRHNcbiAgICAgICAgICAgICAgICA6IHpvbmUuc3dlZXBJRHM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhbGlicmF0ZWRQbGFuIHx8IG51bGw7XG4gICAgfVxuXG4gICAgdHJhbnNmb3JtUG9zaXRpb24zREZvck5ld0NhbGlicmF0aW9uKHBvc2l0aW9uOiB7XG4gICAgICAgIHg6IG51bWJlcjtcbiAgICAgICAgeTogbnVtYmVyO1xuICAgICAgICB6OiBudW1iZXI7XG4gICAgfSk6IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IGNvZWZmWDogbnVtYmVyOyBjb2VmZlk6IG51bWJlcjsgfSB7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uWCA9XG4gICAgICAgICAgICB0aGlzLmNhbGlicmF0aW9uUGxhbi5uYW1lWEF4aXMgPT09ICd4JyA/IHBvc2l0aW9uLnggOiBwb3NpdGlvbi56O1xuICAgICAgICBjb25zdCBwb3NpdGlvblkgPVxuICAgICAgICAgICAgdGhpcy5jYWxpYnJhdGlvblBsYW4ubmFtZVlBeGlzID09PSAneCcgPyBwb3NpdGlvbi54IDogcG9zaXRpb24uejtcbiAgICAgICAgbGV0IHggPVxuICAgICAgICAgICAgdGhpcy5jYWxpYnJhdGlvblBsYW4ub2Zmc2V0WCArIHBvc2l0aW9uWCAqIHRoaXMuY2FsaWJyYXRpb25QbGFuLnNjYWxlWDtcbiAgICAgICAgbGV0IHkgPVxuICAgICAgICAgICAgdGhpcy5jYWxpYnJhdGlvblBsYW4ub2Zmc2V0WSArIHBvc2l0aW9uWSAqIHRoaXMuY2FsaWJyYXRpb25QbGFuLnNjYWxlWTtcbiAgICAgICAgY29uc3QgbmV3Q29lZmZYID1cbiAgICAgICAgICAgIHRoaXMuY29lZmZQbGFuWCAvICh0aGlzLmltZ1BsYW4ud2lkdGggLyB0aGlzLmNhbGlicmF0aW9uUGxhbi5pbWdXaWR0aCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwibmV3Q29lZmZYXCIsIG5ld0NvZWZmWCk7XG4gICAgICAgIGNvbnN0IG5ld0NvZWZmWSA9XG4gICAgICAgICAgICB0aGlzLmNvZWZmUGxhblkgLyAodGhpcy5pbWdQbGFuLmhlaWdodCAvIHRoaXMuY2FsaWJyYXRpb25QbGFuLmltZ0hlaWdodCk7XG4gICAgICAgIHggPSAoeCAtIHRoaXMuY2FsaWJyYXRpb25QbGFuLm9mZnNldFhQbGFuKSAvIHRoaXMuY2FsaWJyYXRpb25QbGFuLnNjYWxlUGxhbjtcblxuICAgICAgICB5ID0gKHkgLSB0aGlzLmNhbGlicmF0aW9uUGxhbi5vZmZzZXRZUGxhbikgLyB0aGlzLmNhbGlicmF0aW9uUGxhbi5zY2FsZVBsYW47XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHgsIHkpO1xuXG4gICAgICAgIHJldHVybiB7IHgsIHksIGNvZWZmWDogbmV3Q29lZmZYLCBjb2VmZlk6IG5ld0NvZWZmWSB9O1xuICAgIH1cbn1cbiJdfQ==
821
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9tb2RlbHMvcGxhbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQiwyQ0FBMkM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUM5RCxPQUFPLE9BQU8sTUFBTSxTQUFTLENBQUM7QUFDOUIsT0FBTyxPQUFPLE1BQU0sVUFBVSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0IsT0FBTyxFQUNILFdBQVcsRUFDWCxXQUFXLEVBRVgsT0FBTyxHQUVWLE1BQU0scUJBQXFCLENBQUM7QUFNN0IsT0FBTyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHOUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7Ozs7QUFNeEQsTUFBTSxPQUFPLFdBQVc7SUE0RVI7SUFDQTtJQUVBO0lBQ0E7SUFDQTtJQUVBO0lBQ0E7SUFuRlosVUFBVSxDQUFPO0lBRWpCLFdBQVcsQ0FBTztJQUVsQixZQUFZLENBQVM7SUFFckIsYUFBYSxDQUFPO0lBRXBCLFVBQVUsQ0FBTTtJQUVoQixPQUFPLENBQTJCO0lBQ2xDLGNBQWMsQ0FBYztJQUU1QixPQUFPLENBQU07SUFFYixPQUFPLEdBQVksS0FBSyxDQUFDO0lBRXpCLGVBQWUsQ0FBb0I7SUFFbkMsVUFBVSxDQUFTO0lBRW5CLFVBQVUsQ0FBUztJQUVuQixlQUFlLENBQU07SUFF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QUM7UUFFNUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUM7UUFDNUUscUJBQXFCO1FBRXJCLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDO0lBQzFELENBQUM7d0dBbjlCUSxXQUFXLGtCQTJFUixtQkFBbUI7NEdBM0V0QixXQUFXLGNBRlIsTUFBTTs7NEZBRVQsV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckI7OzBCQTRFUSxNQUFNOzJCQUFDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGZ1bmMtbmFtZXMgKi9cclxuLyogZXNsaW50LWRpc2FibGUgY2xhc3MtbWV0aG9kcy11c2UtdGhpcyAqL1xyXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgZ2V0RG9jdW1lbnQsIEdsb2JhbFdvcmtlck9wdGlvbnMgfSBmcm9tICdwZGZqcy1kaXN0JztcclxuaW1wb3J0IHBhbnpvb20gZnJvbSAncGFuem9vbSc7XHJcbmltcG9ydCB2aWRlb2pzIGZyb20gXCJ2aWRlby5qc1wiO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7XHJcbiAgICBDb21tZW50VHlwZSxcclxuICAgIEZlYXR1cmVUeXBlLFxyXG4gICAgUGxhbixcclxuICAgIFBvaVR5cGUsXHJcbiAgICBab25lLFxyXG59IGZyb20gJy4uLy4uL3R5cGVzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCYXNlVmlzaWJpbGl0eVNlcnZpY2UgfSBmcm9tICcuLi9iYXNlVmlzaWJpbGl0eS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWF0dGVycG9ydFNlcnZpY2UgfSBmcm9tICcuLi9tYXR0ZXJwb3J0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBWaWV3ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vdmlld2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBab25lU2VydmljZSB9IGZyb20gJy4vem9uZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTmF2aWdhdGlvblNlcnZpY2UgfSBmcm9tICcuL25hdmlnYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IGdldFNpZ25lZEZpbGUsIHVwbG9hZEZpbGVUb1MzIH0gZnJvbSAnLi4vczMuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VUYWdTZXJ2aWNlIH0gZnJvbSAnLi4vdGFnLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb25maWcgfSBmcm9tICcuLi8uLi9jb25maWcnO1xyXG5pbXBvcnQgeyBnZXRDb2VmZmljaWVudHNGb3JJbWFnZSB9IGZyb20gJy4uL3pvbmUtZHJhd2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBnZXRNZXRhRm9ySW1hZ2UgfSBmcm9tICcuLi8uLi9oZWxwZXJzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb250ZW50U2VydmljZSB9IGZyb20gJy4uL2NvbnRlbnQuc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQbGFuU2VydmljZSB7XHJcbiAgICBjaG9zZW5QbGFuOiBQbGFuO1xyXG5cclxuICAgIGN1cnJlbnRQbGFuOiBQbGFuO1xyXG5cclxuICAgIGN1cnJlbnRTd2VlcDogc3RyaW5nO1xyXG5cclxuICAgIHBsYW5GaWxlQ2FjaGU6IEZpbGU7XHJcblxyXG4gICAgcGxhbkNhbnZhczogYW55O1xyXG5cclxuICAgIHBsYW5EaXY6IEhUTUxFbGVtZW50IHwgU1ZHRWxlbWVudDtcclxuICAgIHBsYW5EaXZDb250ZW50OiBIVE1MRWxlbWVudDtcclxuXHJcbiAgICBwYW56b29tOiBhbnk7XHJcblxyXG4gICAgaXNSZWFkeTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHVzZXJQb3NpdGlvbkJ0bjogSFRNTEJ1dHRvbkVsZW1lbnQ7XHJcblxyXG4gICAgY29lZmZQbGFuWDogbnVtYmVyO1xyXG5cclxuICAgIGNvZWZmUGxhblk6IG51bWJlcjtcclxuXHJcbiAgICBjYWxpYnJhdGlvblBsYW46IGFueTtcclxuXHJcbiAgICBkZXRhaWxUYWdEaXY6IEhUTUxFbGVtZW50O1xyXG5cclxuICAgIGRldGFpbFRhZ0RpdklzSG92ZXIgPSBmYWxzZTtcclxuXHJcbiAgICBidG5UYWdJc0hvdmVyID0gZmFsc2U7XHJcblxyXG4gICAgcmVzaXplUGxhblN1YnNjcmlwdGlvbiA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XHJcblxyXG4gICAgaW1nUGxhbjogSFRNTEltYWdlRWxlbWVudDtcclxuXHJcbiAgICBsYXN0VG91Y2hUaW1lID0gMDtcclxuXHJcbiAgICBkZWxheURibFRvdWNoID0gNTAwO1xyXG5cclxuICAgIGxhc3RSb3RhdGlvbjogbnVtYmVyID0gMDtcclxuXHJcbiAgICBodG1sQ29udGVudFRvSW5qZWN0OiB7XHJcbiAgICAgICAgdGl0bGU6IHN0cmluZztcclxuICAgICAgICBjb250ZW50OiBzdHJpbmc7XHJcbiAgICAgICAgZWxlbWVudElEOiBzdHJpbmc7XHJcbiAgICAgICAgeTogbnVtYmVyO1xyXG4gICAgICAgIHg6IG51bWJlcjtcclxuICAgICAgICB0YWdJY29uOiBzdHJpbmc7XHJcbiAgICAgICAgdXJsOiBzdHJpbmc7XHJcbiAgICB9W10gPSBbXTtcclxuXHJcbiAgICBjYWNoZToge1xyXG4gICAgICAgIGVxdWlwSURzOiBzdHJpbmdbXTtcclxuICAgICAgICB0aWNrZXRJRHM6IHN0cmluZ1tdO1xyXG4gICAgICAgIG1lYXN1cmVtZW50c0lEczogc3RyaW5nW107XHJcbiAgICAgICAgZmVhdHVyZUlEczogc3RyaW5nW107XHJcbiAgICAgICAgem9uZUlEOiBzdHJpbmc7XHJcbiAgICAgICAgcGxhbjogUGxhbjtcclxuICAgICAgICBodG1sQ29udGVudDoge1xyXG4gICAgICAgICAgICB0aXRsZTogc3RyaW5nO1xyXG4gICAgICAgICAgICBjb250ZW50OiBzdHJpbmc7XHJcbiAgICAgICAgICAgIGVsZW1lbnRJRDogc3RyaW5nO1xyXG4gICAgICAgICAgICB5OiBudW1iZXI7XHJcbiAgICAgICAgICAgIHg6IG51bWJlcjtcclxuICAgICAgICAgICAgdGFnSWNvbjogc3RyaW5nO1xyXG4gICAgICAgICAgICB1cmw6IHN0cmluZztcclxuICAgICAgICB9W107XHJcbiAgICB9O1xyXG5cclxuICAgIGZvY3VzTW91c2VUYWdEaXY6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBBUEk6IGFueTsgLy9BV1NcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBASW5qZWN0KCdjdXJyZW50QVBJU2VydmljZScpIGFwaUluamVjdGVkOiBhbnksXHJcbiAgICAgICAgcHJpdmF0ZSB6b25lU2VydmljZTogWm9uZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBuYXZpZ2F0aW9uU2VydmljZTogTmF2aWdhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgLy8gdGFnU2VydmljZTogQmFzZVRhZ1NlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSB2aWV3ZXJTZXJ2aWNlOiBWaWV3ZXJTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICAgICAgcHJpdmF0ZSBtYXR0ZXJwb3J0U2VydmljZTogTWF0dGVycG9ydFNlcnZpY2UsXHJcbiAgICAgICAgLy8gcHJpdmF0ZSBjb25maWc6IEFwcENvbmZpZyxcclxuICAgICAgICBwcml2YXRlIHZpc2liaWxpdHlTZXJ2aWNlOiBCYXNlVmlzaWJpbGl0eVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBjb250ZW50U2VydmljZTogQ29udGVudFNlcnZpY2VcclxuICAgICkge1xyXG4gICAgICAgIHRoaXMuQVBJID0gYXBpSW5qZWN0ZWQ7XHJcbiAgICAgICAgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5jdXJyZW50Q2FtZXJhUG9zZS5zdWJzY3JpYmUoKHBvc2UpID0+IHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVSb3RhdGlvbihwb3NlLnJvdGF0aW9uLnkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNyZWF0ZVBsYW4ocGxhbklucHV0OiBQbGFuKTogUHJvbWlzZTxQbGFuPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuQVBJLl9fcHJvdG9fXy5DcmVhdGVQbGFuKHBsYW5JbnB1dCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZGVsZXRlUGxhbihwbGFuOiBQbGFuKTogUHJvbWlzZTxQbGFuPiB7XHJcbiAgICAgICAgLy8gYXdhaXQgZGVsZXRlRnJvbVMzKHBsYW4uYW5uZXhlKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5BUEkuX19wcm90b19fLkRlbGV0ZVBsYW4oeyBpZDogcGxhbi5pZCB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRQbGFuc0ZvclNwYWNlKHNwYWNlSUQ6IHN0cmluZyk6IFByb21pc2U8UGxhbltdPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuQVBJLl9fcHJvdG9fX1xyXG4gICAgICAgICAgICAuUGxhbnNCeVNwYWNlKHNwYWNlSUQpXHJcbiAgICAgICAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuaXRlbXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldFBsYW5zRm9yWm9uZSh6b25lSUQ6IHN0cmluZyk6IFByb21pc2U8UGxhbltdPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuQVBJLl9fcHJvdG9fX1xyXG4gICAgICAgICAgICAuUGxhbnNCeVpvbmUoem9uZUlEKVxyXG4gICAgICAgICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLml0ZW1zKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRTaW5nZWRQbGFuc0ZvclNwYWNlKHNwYWNlSUQ6IHN0cmluZyk6IFByb21pc2U8UGxhbltdPiB7XHJcbiAgICAgICAgY29uc3QgcGxhbnNGcm9tREIgPSBhd2FpdCB0aGlzLmdldFBsYW5zRm9yU3BhY2Uoc3BhY2VJRCk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2cocGxhbnNGcm9tREIpO1xyXG4gICAgICAgIGNvbnN0IHBsYW5zID0gW107XHJcbiAgICAgICAgaWYgKHBsYW5zRnJvbURCLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgICAgICAgICAgICBwbGFuc0Zyb21EQi5tYXAoYXN5bmMgKHBsYW4pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwbGFuT2JqZWN0ID0geyAuLi5wbGFuIH0gYXMgUGxhbjtcclxuICAgICAgICAgICAgICAgICAgICAvLyBhbm5leGUgbG9va3MgbGlrZSB2aXNpdHMvbW9kZWxJRC9wbGFucy9maWxlLmV4dGVuc2lvblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpZ25lZCA9IGF3YWl0IGdldFNpZ25lZEZpbGUocGxhbi5hbm5leGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzaWduZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhbk9iamVjdC5maWxlcGF0aCA9IHNpZ25lZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBsYW4uYW5uZXhlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFssIG1vZGVsSUQsICwgZmlsZW5hbWVXaXRoRXh0ZW5zaW9uXSA9IHBsYW4uYW5uZXhlLnNwbGl0KCcvJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFssIGV4dGVudGlvbl0gPSBmaWxlbmFtZVdpdGhFeHRlbnNpb24uc3BsaXQoJy4nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhbk9iamVjdC5tb2RlbDNkID0gbW9kZWxJRDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhbk9iamVjdC5leHRlbnNpb24gPSBleHRlbnRpb247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYW5zLnB1c2gocGxhbk9iamVjdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYEVycm9yIHBsYW4gaGF2ZSBub3QgYW5uZXhlID0+IGApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhwbGFuLmlkKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcGxhbnM7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0UGxhbnNXaXRoWm9uZXNGb3JTcGFjZShzcGFjZUlEOiBzdHJpbmcpOiBQcm9taXNlPFBsYW5bXT4ge1xyXG4gICAgICAgIGNvbnN0IHBsYW5zID0gYXdhaXQgdGhpcy5nZXRQbGFuc0ZvclNwYWNlKHNwYWNlSUQpO1xyXG4gICAgICAgIGNvbnN0IHBsYW5zWm9uZXMgPSBwbGFucy5maWx0ZXIoKHBsYW4pID0+IHBsYW4uem9uZSAmJiBwbGFuLmNhbGlicmF0aW9uKTtcclxuICAgICAgICByZXR1cm4gcGxhbnNab25lcztcclxuICAgIH1cclxuXHJcbiAgICBzZXRDaG9zZW5QbGFuKGNob3NlblBsYW46IFBsYW4pIHtcclxuICAgICAgICB0aGlzLmNob3NlblBsYW4gPSBjaG9zZW5QbGFuO1xyXG4gICAgfVxyXG5cclxuICAgIGdldENob3NlblBsYW4oKTogUGxhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hvc2VuUGxhbjtcclxuICAgIH1cclxuXHJcbiAgICBzZXRQbGFuRmlsZUNhY2hlKHBsYW5GaWxlQ2FjaGU6IEZpbGUpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICB0aGlzLnBsYW5GaWxlQ2FjaGUgPSBwbGFuRmlsZUNhY2hlO1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQbGFuRmlsZUNhY2hlKCk6IEZpbGUge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBsYW5GaWxlQ2FjaGU7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY3JlYXRlUGxhbldpdGhBbm5leGUocGxhbjogUGxhbiwgZmlsZTogRmlsZSk6IFByb21pc2U8UGxhbj4ge1xyXG4gICAgICAgIGNvbnN0IGNyZWF0ZWRQbGFuID0gYXdhaXQgdGhpcy5jcmVhdGVQbGFuKHBsYW4pO1xyXG4gICAgICAgIGNvbnN0IG1vZGVsM0QgPSBhd2FpdCB0aGlzLnpvbmVTZXJ2aWNlLmdldE1vZGVsM0RGb3Jab25lKHBsYW4uem9uZUlEKTtcclxuICAgICAgICBjb25zdCB1cmwgPSBhd2FpdCB1cGxvYWRGaWxlVG9TMyhcclxuICAgICAgICAgICAgYHZpc2l0cy8ke21vZGVsM0R9L3BsYW5zL2AsXHJcbiAgICAgICAgICAgIGZpbGUsXHJcbiAgICAgICAgICAgIGNyZWF0ZWRQbGFuLmlkXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAodXJsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uVXBkYXRlUGxhbih7IGlkOiBjcmVhdGVkUGxhbi5pZCwgYW5uZXhlOiB1cmwgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjcmVhdGVkUGxhbjtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyB1cGRhdGVQbGFuKHBsYW46IGFueSk6IFByb21pc2U8UGxhbj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uVXBkYXRlUGxhbihwbGFuKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyB1cGRhdGVQbGFuRmlsZSgpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgICAgIGlmICh0aGlzLmNob3NlblBsYW4gJiYgdGhpcy5wbGFuRmlsZUNhY2hlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1vZGVsM0QgPSBhd2FpdCB0aGlzLnpvbmVTZXJ2aWNlLmdldE1vZGVsM0RGb3Jab25lKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jaG9zZW5QbGFuLnpvbmVJRFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICByZXR1cm4gdXBsb2FkRmlsZVRvUzMoXHJcbiAgICAgICAgICAgICAgICBgdmlzaXRzLyR7bW9kZWwzRH0vcGxhbnMvYCxcclxuICAgICAgICAgICAgICAgIHRoaXMucGxhbkZpbGVDYWNoZSxcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hvc2VuUGxhbi5pZFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBzZXRBbGxQbGFuc0ZvclpvbmVOb3RDdXJyZW50KHpvbmVJRDogc3RyaW5nLCBjdXJyZW50UGxhbklEOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBwbGFucyA9IGF3YWl0IHRoaXMuQVBJLl9fcHJvdG9fXy5MaXN0UGxhbnMoe1xyXG4gICAgICAgICAgICB6b25lSUQ6IHsgZXE6IHpvbmVJRCB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICAgICAgICBwbGFucy5pdGVtcy5tYXAoYXN5bmMgKHBsYW4pID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChwbGFuLmlzQ3VycmVudEZvclpvbmUgJiYgcGxhbi5pZCAhPT0gY3VycmVudFBsYW5JRCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudXBkYXRlUGxhbih7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBwbGFuLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0N1cnJlbnRGb3Jab25lOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNvbmZpZ3VyZVBsYW4oXHJcbiAgICAgICAgY3VycmVudFBsYW46IFBsYW4sXHJcbiAgICAgICAgZGl2SWQ6IHN0cmluZyA9ICdwbGFuRGl2UGFuZScsXHJcbiAgICAgICAgZGl2Q29udGVudElkOiBzdHJpbmcgPSAncGxhbkRpdlBhbmVDb250ZW50J1xyXG4gICAgKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgdGhpcy5pc1JlYWR5ID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKCF0aGlzLmRldGFpbFRhZ0Rpdikge1xyXG4gICAgICAgICAgICB0aGlzLmRldGFpbFRhZ0RpdiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgICAgICAgICAgICBgI2RldGFpbFRhZ0RpdmBcclxuICAgICAgICAgICAgKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5kZXRhaWxUYWdEaXYuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VlbnRlcicsICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5mb2N1c01vdXNlVGFnRGl2ID0gdHJ1ZTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmRldGFpbFRhZ0Rpdi5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmJ0blRhZ0lzSG92ZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5kZXRhaWxUYWdEaXYuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgdGhpcy5mb2N1c01vdXNlVGFnRGl2ID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuY2FsaWJyYXRpb25QbGFuID0gSlNPTi5wYXJzZShjdXJyZW50UGxhbi5jYWxpYnJhdGlvbik7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50UGxhbiA9IGN1cnJlbnRQbGFuO1xyXG4gICAgICAgIHRoaXMucGxhbkRpdiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke2RpdklkfWApIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgIHRoaXMucGxhbkRpdkNvbnRlbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICAgICAgICBgIyR7ZGl2Q29udGVudElkfWBcclxuICAgICAgICApIGFzIEhUTUxFbGVtZW50O1xyXG5cclxuICAgICAgICB0aGlzLnBsYW5EaXYuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMuaGFuZGxlVG91Y2guYmluZCh0aGlzKSk7XHJcbiAgICAgICAgdGhpcy5wbGFuRGl2LmFkZEV2ZW50TGlzdGVuZXIoJ2RibGNsaWNrJywgdGhpcy5vbkRibENsaWNrUGxhbi5iaW5kKHRoaXMpKTtcclxuXHJcbiAgICAgICAgaWYgKCFjdXJyZW50UGxhbi5hbm5leGUuaW5jbHVkZXMoJ3BkZicpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW1nUGxhbiA9IGF3YWl0IGdldE1ldGFGb3JJbWFnZShjdXJyZW50UGxhbi5maWxlcGF0aCk7XHJcbiAgICAgICAgICAgIC8vUmVjdCB1c2Ugb2Zmc2V0V2lkdGggOiBoZWlnaHQsIG5vdCBhY3R1YWwgYm91bmRpbmdDbGllbnRSZWN0IGJlY2F1c2Ugd2lsbCBiZSBtb2RpZmllZCBieSB0aGUgem9vbS5cclxuICAgICAgICAgICAgY29uc3QgcmVjdCA9IHtcclxuICAgICAgICAgICAgICAgIHdpZHRoOiB0aGlzLnBsYW5EaXZDb250ZW50Lm9mZnNldFdpZHRoLFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLnBsYW5EaXZDb250ZW50Lm9mZnNldEhlaWdodCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgY29uc3QgeyBjb2VmZlgsIGNvZWZmWSB9ID0gZ2V0Q29lZmZpY2llbnRzRm9ySW1hZ2UodGhpcy5pbWdQbGFuLCByZWN0KTtcclxuICAgICAgICAgICAgdGhpcy5jb2VmZlBsYW5YID0gY29lZmZYO1xyXG4gICAgICAgICAgICB0aGlzLmNvZWZmUGxhblkgPSBjb2VmZlk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnBsYW5EaXZDb250ZW50LnN0eWxlLmJhY2tncm91bmRJbWFnZSA9IGB1cmwoJHtjdXJyZW50UGxhbi5maWxlcGF0aH0pYDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmRyYXdQZGYoY3VycmVudFBsYW4pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnBsYW5EaXZDb250ZW50LnN0eWxlLmJhY2tncm91bmRTaXplID0gJ2NvbnRhaW4nO1xyXG4gICAgICAgIHRoaXMucGxhbkRpdkNvbnRlbnQuc3R5bGUuYmFja2dyb3VuZFJlcGVhdCA9ICduby1yZXBlYXQnO1xyXG5cclxuICAgICAgICB0aGlzLnBhbnpvb20gPSBwYW56b29tKHRoaXMucGxhbkRpdiwge1xyXG4gICAgICAgICAgICBib3VuZHM6IHRydWUsXHJcbiAgICAgICAgICAgIGJvdW5kc1BhZGRpbmc6IDAsXHJcbiAgICAgICAgICAgIG1heFpvb206IDQsXHJcbiAgICAgICAgICAgIHpvb21Eb3VibGVDbGlja1NwZWVkOiAxLCAvL2Rpc2FibGVzIGRvdWJsZSBjbGljayB6b29tXHJcbiAgICAgICAgICAgIC8vaW5pdGlhbFpvb206IDRcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnBhbnpvb20uem9vbUFicygwLCAwLCA0KTtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVSb3RhdGlvbih0aGlzLmxhc3RSb3RhdGlvbik7XHJcbiAgICAgICAgfSwgMjAwKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBjbGVhclBsYW5JbWFnZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5wbGFuRGl2Q29udGVudCkge1xyXG4gICAgICAgICAgICB0aGlzLnBsYW5EaXZDb250ZW50LnN0eWxlLmJhY2tncm91bmRJbWFnZSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGRyYXdQZGYoY3VycmVudFBsYW46IFBsYW4pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJykgYXMgSFRNTENhbnZhc0VsZW1lbnQ7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoJzJkJykgYXMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEO1xyXG4gICAgICAgICAgICBHbG9iYWxXb3JrZXJPcHRpb25zLndvcmtlclNyYyA9IGAvL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9wZGYuanMvNC40LjE2OC9wZGYud29ya2VyLm1pbi5tanNgO1xyXG4gICAgICAgICAgICBjb25zdCBwZGYgPSBhd2FpdCBnZXREb2N1bWVudChjdXJyZW50UGxhbi5maWxlcGF0aCkucHJvbWlzZTtcclxuICAgICAgICAgICAgY29uc3QgcGFnZSA9IGF3YWl0IHBkZi5nZXRQYWdlKDEpO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgdmlld1BvcnRQYXJhbWV0ZXJzID0geyBzY2FsZTogMS41IH07XHJcbiAgICAgICAgICAgIGNvbnN0IHZpZXdwb3J0ID0gcGFnZS5nZXRWaWV3cG9ydCh2aWV3UG9ydFBhcmFtZXRlcnMpO1xyXG5cclxuICAgICAgICAgICAgY2FudmFzLmhlaWdodCA9IHZpZXdwb3J0LmhlaWdodDtcclxuICAgICAgICAgICAgY2FudmFzLndpZHRoID0gdmlld3BvcnQud2lkdGg7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlckNvbnRleHQgPSB7XHJcbiAgICAgICAgICAgICAgICBjYW52YXNDb250ZXh0OiBjb250ZXh0LFxyXG4gICAgICAgICAgICAgICAgdmlld3BvcnQsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlclRhc2sgPSBwYWdlLnJlbmRlcihyZW5kZXJDb250ZXh0KS5wcm9taXNlO1xyXG4gICAgICAgICAgICByZW5kZXJUYXNrLnRoZW4oYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaW1nVXJsID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvcG5nJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmltZ1BsYW4gPSBhd2FpdCBnZXRNZXRhRm9ySW1hZ2UoaW1nVXJsKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlY3QgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHRoaXMucGxhbkRpdkNvbnRlbnQub2Zmc2V0V2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLnBsYW5EaXZDb250ZW50Lm9mZnNldEhlaWdodCxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IGNvZWZmWCwgY29lZmZZIH0gPSBnZXRDb2VmZmljaWVudHNGb3JJbWFnZSh0aGlzLmltZ1BsYW4sIHJlY3QpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb2VmZlBsYW5YID0gY29lZmZYO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb2VmZlBsYW5ZID0gY29lZmZZO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wbGFuRGl2LnN0eWxlLmJhY2tncm91bmRJbWFnZSA9IGB1cmwoJHtpbWdVcmx9KWA7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGRyYXdFbGVtZW50KFxyXG4gICAgICAgIGVsZW1lbnQ6IGFueSxcclxuICAgICAgICB0YWdUeXBlOiBQb2lUeXBlLFxyXG4gICAgICAgIGN1cnJlbnRQbGFuOiBQbGFuLFxyXG4gICAgICAgIHRhZ1NlcnZpY2U6IEJhc2VUYWdTZXJ2aWNlLFxyXG4gICAgICAgIGNvbmZpZzogQ29uZmlnLFxyXG4gICAgICAgIHNpemVCdXR0b246IG51bWJlciA9IDEwXHJcbiAgICApIHtcclxuICAgICAgICBjb25zdCBbcG9pXSA9IGVsZW1lbnQucG9pcy5pdGVtcztcclxuICAgICAgICBpZiAocG9pICYmIHBvaS5jb29yZGluYXRlICYmIGN1cnJlbnRQbGFuKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgem9uZSB9ID0gY3VycmVudFBsYW47XHJcbiAgICAgICAgICAgIGlmICh6b25lKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IEpTT04ucGFyc2UocG9pLmNvb3JkaW5hdGUpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XHJcbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudFRpdGxlOiBzdHJpbmc7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSB0YWdTZXJ2aWNlLmdldFVybEZvclNlZURldGFpbHMoZWxlbWVudCwgdGFnVHlwZSk7XHJcbiAgICAgICAgICAgICAgICBsZXQgdGFnSWNvbkltYWdlOiBzdHJpbmc7XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRhZ1R5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFBvaVR5cGUuVElDS0VUOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhZ0ljb25JbWFnZSA9IGNvbmZpZy5teV9jb25maWcuaWNvbl90aWNrZXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFBvaVR5cGUuRVFVSVBNRU5UOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhZ0ljb25JbWFnZSA9IGNvbmZpZy5teV9jb25maWcuaWNvbl9lcXVpcG1lbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFBvaVR5cGUuTUVBU1VSRTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFnSWNvbkltYWdlID0gY29uZmlnLm15X2NvbmZpZy5pY29uX21lYXN1cmU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgUG9pVHlwZS5PQkpFQ1QzRDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFnSWNvbkltYWdlID0gY29uZmlnLm15X2NvbmZpZy5pY29uX29iamVjdDNkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFBvaVR5cGUuREFUQTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFnSWNvbkltYWdlID0gY29uZmlnLm15X2NvbmZpZy5pY29uX2RhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgUG9pVHlwZS5ERVNLOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWdJY29uSW1hZ2UgPSBjb25maWcubXlfY29uZmlnLmljb25fZGF0YTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHBvaS50YWdJY29uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFnSWNvbiA9IEpTT04ucGFyc2UocG9pLnRhZ0ljb24pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFnVHlwZSA9PT0gUG9pVHlwZS5EQVRBICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQudHlwZSA9PT0gRmVhdHVyZVR5cGUuSU5ESUNBVE9SX1RFTVBcclxuICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFnSWNvbi5zcmMgPSB0YWdTZXJ2aWNlLmdldEljb25UYWdJbWFnZUZvckZlYXR1cmUoZWxlbWVudCwgcG9pKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gcG9pLnRhZ0ljb24gPSB0YWdJY29uO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAodGFnSWNvbi5zcmMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc291cmNlID0gYXdhaXQgZ2V0U2lnbmVkRmlsZSh0YWdJY29uLnNyYyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ0ljb25JbWFnZSA9IHNvdXJjZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuc3R5bGVCdXR0b24oYnV0dG9uLCB0YWdJY29uSW1hZ2UsIHNpemVCdXR0b24pO1xyXG4gICAgICAgICAgICAgICAgYnV0dG9uLmlkID0gZWxlbWVudC5pZDtcclxuICAgICAgICAgICAgICAgIHRoaXMucGxhbkRpdkNvbnRlbnQuYXBwZW5kKGJ1dHRvbik7XHJcbiAgICAgICAgICAgICAgICBsZXQgeDogbnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgbGV0IHk6IG51bWJlcjtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNhbGlicmF0aW9uUGxhbi5uZXcpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBhbGVydChcIm5ldyBjYWxpYnJhdGlvbiBwbGFuOiBwb3NpdGlvbmluZyBub3QgcmVhZHkgeWV0XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uMkQgPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybVBvc2l0aW9uM0RGb3JOZXdDYWxpYnJhdGlvbihwb3NpdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgeCA9IHBvc2l0aW9uMkQueDtcclxuICAgICAgICAgICAgICAgICAgICB5ID0gcG9zaXRpb24yRC55O1xyXG4gICAgICAgICAgICAgICAgICAgIGJ1dHRvbi5zdHlsZS50b3AgPSBgJHt5IC8gcG9zaXRpb24yRC5jb2VmZlkgLSA1fXB4YDtcclxuICAgICAgICAgICAgICAgICAgICBidXR0b24uc3R5bGUubGVmdCA9IGAke3ggLyBwb3NpdGlvbjJELmNvZWZmWCAtIDV9cHhgO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyB0byByZW1vdmUgd2hlbiBhbGwgY2FsaWJyYXRpb25zIGFyZSBuZXdcclxuICAgICAgICAgICAgICAgICAgICB4ID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxpYnJhdGlvblBsYW4ub2Zmc2V0WCArIHBvc2l0aW9uLnggKiB0aGlzLmNhbGlicmF0aW9uUGxhbi54O1xyXG4gICAgICAgICAgICAgICAgICAgIHkgPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGlicmF0aW9uUGxhbi5vZmZzZXRZICsgcG9zaXRpb24ueiAqIHRoaXMuY2FsaWJyYXRpb25QbGFuLnk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uLnN0eWxlLnRvcCA9IGAke3kgLyB0aGlzLmNvZWZmUGxhblkgLSA1fXB4YDtcclxuICAgICAgICAgICAgICAgICAgICBidXR0b24uc3R5bGUubGVmdCA9IGAke3ggLyB0aGlzLmNvZWZmUGxhblggLSA1fXB4YDtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBodG1sID0gYXdhaXQgdGFnU2VydmljZS5nZXRIdG1sVG9JbmplY3QodGFnVHlwZSwgZWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaHRtbCAhPSAnJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaHRtbENvbnRlbnRUb0luamVjdC5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudElEOiBlbGVtZW50LmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGh0bWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhZ0ljb246IHRhZ0ljb25JbWFnZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyB3aGVuIHdlIGRvbid0IGhhdmUgaHRtbCA9PiBjYXNlIG9mIEVNQkVEIENvbW1lbnQgdHlwZVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1lbnRFbWJlZCA9IGVsZW1lbnQuY29tbWVudHM/Lml0ZW1zLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjb20pID0+IGNvbS50eXBlID09PSBDb21tZW50VHlwZS5FTUJFRCAmJiBjb20uc2hvd25JblRhZ1xyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbW1lbnRFbWJlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmh0bWxDb250ZW50VG9JbmplY3QucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50SUQ6IGVsZW1lbnQuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogZWxlbWVudC50aXRsZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGA8aWZyYW1lIHNyYz0ke2NvbW1lbnRFbWJlZC5leHRlcm5hbExpbmt9IGhlaWdodD1cIjIwMHB4XCIgd2lkdGg9XCIxMDAlXCI+PC9pZnJhbWU+YCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnSWNvbjogdGFnSWNvbkltYWdlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRMaXN0ZW5lcnNUb0J1dHRvbihidXR0b24sIHVybCwgdGFnU2VydmljZSwgZWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVJvdGF0aW9uKHRoaXMubGFzdFJvdGF0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBkcmF3VXNlclBvc2l0aW9uKGN1cnJlbnRTd2VlcCA9IHRoaXMuY3VycmVudFN3ZWVwLCBzaXplQnV0dG9uOiBudW1iZXIgPSAxMCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFN3ZWVwID0gY3VycmVudFN3ZWVwO1xyXG4gICAgICAgIGlmICh0aGlzLmNhbGlicmF0aW9uUGxhbiAmJiBjdXJyZW50U3dlZXApIHtcclxuICAgICAgICAgICAgY29uc3QgcG9zaXRpb24gPVxyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5nZXRDdXJyZW50Q2FtZXJhUG9zaXRpb24oKT8ucG9zaXRpb247XHJcbiAgICAgICAgICAgIGlmIChwb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnVzZXJQb3NpdGlvbkJ0bikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXNlclBvc2l0aW9uQnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51c2VyUG9zaXRpb25CdG4uaWQgPSAnY3VycmVudFBvc2l0aW9uJztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsYW5EaXZDb250ZW50LmFwcGVuZCh0aGlzLnVzZXJQb3NpdGlvbkJ0bik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51c2VyUG9zaXRpb25CdG4udGl0bGUgPSAnWW91IGFyZSBoZXJlJztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0eWxlQnV0dG9uKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVzZXJQb3NpdGlvbkJ0bixcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ2h0dHBzOi8vYXBpLmljb25pZnkuZGVzaWduL2J4OmJ4cy11c2VyLWNpcmNsZS5zdmc/Y29sb3I9Z3JlZW4maGVpZ2h0PTE3JndpZHRoPTE3JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZUJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBsZXQgeDogbnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgbGV0IHk6IG51bWJlcjtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNhbGlicmF0aW9uUGxhbi5uZXcpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwb3NpdGlvbjJEID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1Qb3NpdGlvbjNERm9yTmV3Q2FsaWJyYXRpb24ocG9zaXRpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgIHggPSBwb3NpdGlvbjJELnggLyBwb3NpdGlvbjJELmNvZWZmWCAtIDU7XHJcbiAgICAgICAgICAgICAgICAgICAgeSA9IHBvc2l0aW9uMkQueSAvIHBvc2l0aW9uMkQuY29lZmZZIC0gNTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgeCA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLmNhbGlicmF0aW9uUGxhbi5vZmZzZXRYICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uLnggKiB0aGlzLmNhbGlicmF0aW9uUGxhbi54KSAvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29lZmZQbGFuWDtcclxuICAgICAgICAgICAgICAgICAgICB5ID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMuY2FsaWJyYXRpb25QbGFuLm9mZnNldFkgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24ueiAqIHRoaXMuY2FsaWJyYXRpb25QbGFuLnkpIC9cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2VmZlBsYW5ZO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy51c2VyUG9zaXRpb25CdG4uc3R5bGUudG9wID0gYCR7eX1weGA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVzZXJQb3NpdGlvbkJ0bi5zdHlsZS5sZWZ0ID0gYCR7eH1weGA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vdmVPblBvaW50KHsgeDogeCArIDUsIHk6IHkgKyA1IH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2VudGVyIHRoZSB2aWV3IG9mIHRoZSBwbGFuIG9uIGNvb3JkaW5hdGVzXHJcbiAgICAgKiBAcGFyYW0gY29vcmRpbmF0ZSBDb29yZGluYXRlIG9uIHRoZSBwbGFuXHJcbiAgICAgKi9cclxuICAgIG1vdmVPblBvaW50KGNvb3JkaW5hdGUpIHtcclxuICAgICAgICBpZiAodGhpcy5wbGFuRGl2KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNjYWxlID0gdGhpcy5wYW56b29tLmdldFRyYW5zZm9ybSgpLnNjYWxlO1xyXG4gICAgICAgICAgICBjb25zdCBtb3ZlWCA9IHRoaXMucGxhbkRpdi5jbGllbnRXaWR0aCAvIDIgLSBjb29yZGluYXRlLnggKiBzY2FsZTtcclxuICAgICAgICAgICAgY29uc3QgbW92ZVkgPSB0aGlzLnBsYW5EaXYuY2xpZW50SGVpZ2h0IC8gMiAtIGNvb3JkaW5hdGUueSAqIHNjYWxlO1xyXG4gICAgICAgICAgICB0aGlzLnBhbnpvb20ubW92ZVRvKG1vdmVYLCBtb3ZlWSk7XHJcbiAgICAgICAgICAgIHRoaXMucGxhbkRpdkNvbnRlbnQuc3R5bGUudHJhbnNmb3JtT3JpZ2luID0gYCR7Y29vcmRpbmF0ZS54fXB4ICR7Y29vcmRpbmF0ZS55fXB4YDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBcHBseSBhIHJvdGF0aW9uIHRvIHRoZSBwbGFuXHJcbiAgICAgKiBCdXR0b25zIHdpbGwgcmVtYWluIGluIHRoZSBjb3JyZWN0IHJvdGF0aW9uXHJcbiAgICAgKiBAcGFyYW0gcm90YXRpb25cclxuICAgICAqL1xyXG4gICAgdXBkYXRlUm90YXRpb24ocm90YXRpb24pIHtcclxuICAgICAgICB0aGlzLmxhc3RSb3RhdGlvbiA9IHJvdGF0aW9uO1xyXG4gICAgICAgIGlmICh0aGlzLnBsYW5EaXZDb250ZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMucGxhbkRpdkNvbnRlbnQuc3R5bGUudHJhbnNmb3JtID0gYHJvdGF0ZSgke3JvdGF0aW9ufWRlZylgO1xyXG4gICAgICAgICAgICBjb25zdCBidXR0b25zID0gdGhpcy5wbGFuRGl2Q29udGVudC5xdWVyeVNlbGVjdG9yQWxsKCdidXR0b24nKTtcclxuICAgICAgICAgICAgbGV0IHJvdGF0aW9uUmVnZXggPSAvKHJvdGF0ZVxcKC0/XFxkKlxcLj9cXGQrZGVnXFwpKS9nO1xyXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby1hcnJheS1mb3ItZWFjaFxyXG4gICAgICAgICAgICBidXR0b25zLmZvckVhY2goKGJ1dHRvbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgYnV0dG9uLnN0eWxlLnRyYW5zZm9ybSA9IGJ1dHRvbi5zdHlsZS50cmFuc2Zvcm0ucmVwbGFjZShyb3RhdGlvblJlZ2V4LCBcIlwiKSArIGAgcm90YXRlKCR7LXJvdGF0aW9ufWRlZylgO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlQ3VycmVudFBvc2l0aW9uKCkge1xyXG4gICAgICAgIGNvbnN0IGJ1dHRvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNjdXJyZW50UG9zaXRpb24nKTtcclxuICAgICAgICBpZiAoYnV0dG9uKSB7XHJcbiAgICAgICAgICAgIGJ1dHRvbi5yZW1vdmUoKTtcclxuICAgICAgICAgICAgdGhpcy51c2VyUG9zaXRpb25CdG4gPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdHlsZUJ1dHRvbihidXR0b246IEhUTUxCdXR0b25FbGVtZW50LCB1cmw6IHN0cmluZywgc2l6ZUJ1dHRvbjogbnVtYmVyID0gMTApIHtcclxuICAgICAgICBidXR0b24uc3R5bGUuYmFja2dyb3VuZEltYWdlID0gYHVybCgke3VybH0pYDtcclxuICAgICAgICBidXR0b24uc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJ3RyYW5zcGFyZW50JztcclxuICAgICAgICBidXR0b24uc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xyXG4gICAgICAgIGJ1dHRvbi5zdHlsZS5ib3JkZXIgPSAnbm9uZSc7XHJcbiAgICAgICAgYnV0dG9uLnN0eWxlLndpZHRoID0gYDEwcHhgO1xyXG4gICAgICAgIGJ1dHRvbi5zdHlsZS5oZWlnaHQgPSBgMTBweGA7XHJcbiAgICAgICAgYnV0dG9uLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgYnV0dG9uLnN0eWxlLmJhY2tncm91bmRTaXplID0gJ2NvbnRhaW4nO1xyXG4gICAgICAgIGJ1dHRvbi5zdHlsZS5iYWNrZ3JvdW5kUmVwZWF0ID0gJ25vLXJlcGVhdCc7XHJcbiAgICAgICAgYnV0dG9uLnN0eWxlLnRyYW5zZm9ybSA9IGBzY2FsZSgke3NpemVCdXR0b24vMTB9KWBcclxuICB9XHJcblxyXG4gICAgYWRkTGlzdGVuZXJzVG9CdXR0b24oXHJcbiAgICAgICAgYnV0dG9uOiBIVE1MQnV0dG9uRWxlbWVudCxcclxuICAgICAgICB1cmw6IHN0cmluZyxcclxuICAgICAgICB0YWdTZXJ2aWNlOiBCYXNlVGFnU2VydmljZSA9IG51bGwsXHJcbiAgICAgICAgZWxlbWVudDogYW55ID0gbnVsbFxyXG4gICAgKSB7XHJcbiAgICAgICAgbGV0IHZpZGVvSnNQbGF5ZXI7XHJcbiAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZW50ZXInLCBhc3luYyAoZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY29udGVudEZvckJ1dHRvbiA9IHRoaXMuaHRtbENvbnRlbnRUb0luamVjdC5maW5kKFxyXG4gICAgICAgICAgICAgICAgKG9iamVjdCkgPT4gb2JqZWN0LmVsZW1lbnRJRCA9PT0gYnV0dG9uLmlkXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuYnRuVGFnSXNIb3ZlciA9IHRydWU7XHJcbiAgICAgICAgICAgIGNvbnN0IHRpdGxlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgI3RpdGxlVGFnRGl2YCkgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGlmIChjb250ZW50Rm9yQnV0dG9uLnRpdGxlKSB7XHJcbiAgICAgICAgICAgICAgICB0aXRsZS5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZSc7XHJcbiAgICAgICAgICAgICAgICB0aXRsZS5pbm5lckhUTUwgPSBjb250ZW50Rm9yQnV0dG9uLnRpdGxlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGl0bGUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgY29udGVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCNodG1sVGFnRGl2YCkgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgICAgIHRoaXMuZGV0YWlsVGFnRGl2LnN0eWxlLnRvcCA9IGAke2V2ZW50LmNsaWVudFkgKyAxMH1weGA7XHJcbiAgICAgICAgICAgIHRoaXMuZGV0YWlsVGFnRGl2LnN0eWxlLmxlZnQgPSBgJHtldmVudC5jbGllbnRYIDwgMTIwID8gMCA6IGV2ZW50LmNsaWVudFggLSAxMjBcclxuICAgICAgICAgICAgICAgIH1weGA7XHJcbiAgICAgICAgICAgIHRoaXMuZGV0YWlsVGFnRGl2LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhjb250ZW50Rm9yQnV0dG9uLmNvbnRlbnQpO1xyXG4gICAgICAgICAgICBjb250ZW50LmlubmVySFRNTCA9IGNvbnRlbnRGb3JCdXR0b24uY29udGVudDtcclxuICAgICAgICAgICAgY29uc3QgZGV0YWlsQnV0dG9uID0gY29udGVudC5xdWVyeVNlbGVjdG9yKCcjZGV0YWlsQnRuJyk7XHJcbiAgICAgICAgICAgIGlmIChkZXRhaWxCdXR0b24pIHtcclxuICAgICAgICAgICAgICAgIGRldGFpbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnZpc2liaWxpdHlTZXJ2aWNlLmRldGFpbFNob3dpbmcubmV4dCh0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdXJsXSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gaGFuZGxlIGltYWdlIGNhcm91c2VsIGZ1bGxzY3JlZW4gYnV0dG9uXHJcbiAgICAgICAgICAgIGNvbnN0IGltYWdlRnVsbHNjcmVlbkJ0biA9IGNvbnRlbnQucXVlcnlTZWxlY3RvcignI2ltYWdlLWZvb3RlcicpO1xyXG4gICAgICAgICAgICBpZiAoaW1hZ2VGdWxsc2NyZWVuQnRuKSB7XHJcbiAgICAgICAgICAgICAgICBpbWFnZUZ1bGxzY3JlZW5CdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhZ1NlcnZpY2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFnU2VydmljZS5vbkFjdGlvbkltYWdlQ2xpY2soY29udGVudEZvckJ1dHRvbi5lbGVtZW50SUQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBoYW5kbGUgYm9va2luZyBmdWxsc2NyZWVuIGJ1dHRvblxyXG4gICAgICAgICAgICBjb25zdCBib29raW5nQnV0dG9uID0gY29udGVudC5xdWVyeVNlbGVjdG9yKCcjYm9va2luZ0J0bicpO1xyXG4gICAgICAgICAgICBpZiAoYm9va2luZ0J1dHRvbikge1xyXG4gICAgICAgICAgICAgICAgYm9va2luZ0J1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnZpc2liaWxpdHlTZXJ2aWNlLmRldGFpbFNob3dpbmcubmV4dCh0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdXJsXSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gaGFuZGxlIGRvY3VtZW50IHBkZiBmdWxsc2NyZWVuIGJ1dHRvblxyXG4gICAgICAgICAgICBjb25zdCBkb2NGdWxsc2NyZWVuQnRuID0gY29udGVudC5xdWVyeVNlbGVjdG9yKCcjZG9jLWZvb3RlcicpO1xyXG4gICAgICAgICAgICBpZiAoZG9jRnVsbHNjcmVlbkJ0biAmJiBlbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudFVybCA9IHRhZ1NlcnZpY2UuZ2V0QW5uZXhlRm9yQ29tbWVudFR5cGVJbkZlYXR1cmUoXHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudCxcclxuICAgICAgICAgICAgICAgICAgICBDb21tZW50VHlwZS5ET0NVTUVOVFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGRvY0Z1bGxzY3JlZW5CdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhZ1NlcnZpY2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFnU2VydmljZS5vbkFjdGlvbkRvY0NsaWNrKGRvY3VtZW50VXJsKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gaGFuZGxlIHZpZGVvIGZ1bGxzY3JlZW4gYnV0dG9uXHJcbiAgICAgICAgICAgIGNvbnN0IHZpZGVvRnVsbHNjcmVlbkJ0biA9IGNvbnRlbnQucXVlcnlTZWxlY3RvcignI2J0bi12aWRlby1mdWxsc2NyZWVuJyk7XHJcbiAgICAgICAgICAgIGlmICh2aWRlb0Z1bGxzY3JlZW5CdG4gJiYgZWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmlkZW9VcmwgPSB0YWdTZXJ2aWNlLmdldEFubmV4ZUZvckNvbW1lbnRUeXBlSW5GZWF0dXJlKFxyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgQ29tbWVudFR5cGUuVklERU9cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB2aWRlb0Z1bGxzY3JlZW5CdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhZ1NlcnZpY2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFnU2VydmljZS5vbkFjdGlvblZpZGVvQ2xpY2sodmlkZW9VcmwpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBoYW5kbGUgWW91dHViZSB2aWRlbyBmdWxsc2NyZWVuIGJ1dHRvblxyXG4gICAgICAgICAgICBjb25zdCB5b3V0dWJlRnVsbFNjcmVlbiA9IGNvbnRlbnQucXVlcnlTZWxlY3RvcihcclxuICAgICAgICAgICAgICAgICcjYnRuLXZpZGVvLWZ1bGxzY3JlZW4teW91dHViZSdcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKHlvdXR1YmVGdWxsU2NyZWVuICYmIGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHlvdXR1YmVVcmwgPSB0YWdTZXJ2aWNlLmdldEFubmV4ZUZvckNvbW1lbnRUeXBlSW5GZWF0dXJlKFxyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgQ29tbWVudFR5cGUuWU9VVFVCRVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHlvdXR1YmVGdWxsU2NyZWVuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0YWdTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhZ1NlcnZpY2Uub25BY3Rpb25Zb3V0dWJlQ2xpY2soeW91dHViZVVybCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGhhbmRsZSBtdXRlIHZpZGVvIGJ1dHRvblxyXG4gICAgICAgICAgICBjb25zdCBidG5NdXRlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J0bi1tdXRlJyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGltZ09uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NvdW5kLW9uJyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGltZ09mZiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzb3VuZC1vZmYnKTtcclxuICAgICAgICAgICAgY29uc3QgcGxheWVyRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibXVzLXZpZGVvLXRhZ1wiKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChwbGF5ZXJFbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICB2aWRlb0pzUGxheWVyID0gdmlkZW9qcyhcIm11cy12aWRlby10YWdcIik7XHJcbiAgICAgICAgICAgICAgICBpZiAoYnRuTXV0ZSAmJiB2aWRlb0pzUGxheWVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnRuTXV0ZS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZpZGVvSnNQbGF5ZXIubXV0ZWQoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlkZW9Kc1BsYXllci5tdXRlZChmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW1nT24gJiYgaW1nT2ZmKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nT24uc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZ09mZi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlkZW9Kc1BsYXllci5tdXRlZCh0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbWdPbiAmJiBpbWdPZmYpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWdPbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZ09mZi5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZS1ibG9jayc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgICAgIC8vIGhhbmRsZSBhdWRpbyBwbGF5ZXIgYnV0dG9uc1xyXG4gICAgICAgICAgICBjb25zdCBwbGF5ZXJCdXR0b24gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuYXVkaW8tcGxheS1idXR0b24nKTtcclxuICAgICAgICAgICAgY29uc3QgYXVkaW8gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXVkaW8tdGFnJykgYXMgSFRNTE1lZGlhRWxlbWVudDtcclxuICAgICAgICAgICAgY29uc3QgdGltZWxpbmUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICAgICAgICAgICAgJy50aW1lbGluZS10YWcnXHJcbiAgICAgICAgICAgICkgYXMgSFRNTElucHV0RWxlbWVudDtcclxuICAgICAgICAgICAgLy8gY29uc3QgdGltZWxpbmVWYWx1ZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy50aW1lbGluZS10YWcnKS52YWx1ZTtcclxuICAgICAgICAgICAgY29uc3Qgc291bmRCdXR0b24gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuYXVkaW8tc291bmQtYnRuJyk7XHJcbiAgICAgICAgICAgIGNvbnN0IHBsYXlBdWRpbyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwbGF5Jyk7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhdXNlQXVkaW8gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGF1c2UnKTtcclxuICAgICAgICAgICAgY29uc3QgaW1nU291bmRPbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdWRpby1zb3VuZC1vbicpO1xyXG4gICAgICAgICAgICBjb25zdCBpbWdTb3VuZE9mZiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdWRpby1zb3VuZC1vZmYnKTtcclxuICAgICAgICAgICAgY29uc3QgYXVkaW9Nb2RhbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdidG4tYXVkaW8tbW9kYWwnKTtcclxuICAgICAgICAgICAgaWYgKGF1ZGlvICYmIHBsYXllckJ1dHRvbiAmJiB0aW1lbGluZSkge1xyXG4gICAgICAgICAgICAgICAgcGxheWVyQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhdWRpby5wYXVzZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW8ucGxheSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXVzZUF1ZGlvLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lLWJsb2NrJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGxheUF1ZGlvLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW8ucGF1c2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGF1c2VBdWRpby5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGF5QXVkaW8uc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgc291bmRCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGF1ZGlvLm11dGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvLm11dGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZ1NvdW5kT24uc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWdTb3VuZE9mZi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvLm11dGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nU291bmRPbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWdTb3VuZE9mZi5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZS1ibG9jayc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBjaGFuZ2VUaW1lbGluZVBvc2l0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhdWRpby5kdXJhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwZXJjZW50YWdlUG9zaXRpb24gPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEwMCAqIGF1ZGlvLmN1cnJlbnRUaW1lKSAvIGF1ZGlvLmR1cmF0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwZXJjZW50YWdlUG9zaXRpb25TdHJpbmcgPSBwZXJjZW50YWdlUG9zaXRpb24gKyAnJSc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVsaW5lLnN0eWxlLmJhY2tncm91bmRTaXplID0gcGVyY2VudGFnZVBvc2l0aW9uU3RyaW5nICsgJyAxMDAlJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZWxpbmUudmFsdWUgPSBwZXJjZW50YWdlUG9zaXRpb24udG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBhdWRpby5vbnRpbWV1cGRhdGUgPSBjaGFuZ2VUaW1lbGluZVBvc2l0aW9uO1xyXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gY2hhbmdlU2VlaygpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0aW1lID0gKHBhcnNlSW50KHRpbWVsaW5lLnZhbHVlKSAqIGF1ZGlvLmR1cmF0aW9uKSAvIDEwMDtcclxuICAgICAgICAgICAgICAgICAgICBhdWRpby5jdXJyZW50VGltZSA9IHRpbWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aW1lbGluZS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBjaGFuZ2VTZWVrKTtcclxuICAgICAgICAgICAgICAgIHRpbWVsaW5lLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgY2hhbmdlU2Vlayk7XHJcbiAgICAgICAgICAgICAgICAvLyBoYW5kbGUgYXVkaW8gY2xpY2tcclxuICAgICAgICAgICAgICAgIGlmIChhdWRpb01vZGFsICYmIGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhdWRpb0NvbW1lbnQgPSBlbGVtZW50LmNvbW1lbnRzPy5pdGVtcy5maW5kKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY29tKSA9PiBjb20udHlwZSA9PT0gQ29tbWVudFR5cGUuQVVESU8gJiYgY29tLnNob3duSW5UYWdcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGF1ZGlvQ29tbWVudElEID0gYXVkaW9Db21tZW50ID8gYXVkaW9Db21tZW50LmlkIDogJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgYXVkaW9Nb2RhbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhZ1NlcnZpY2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ1NlcnZpY2Uub25BY3Rpb25BdWRpb0NsaWNrKGF1ZGlvQ29tbWVudElEKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAvLyB3ZSB3YWl0IGlmIHVzZXIgaG92ZXJzIG9uIHRvIGRpdiBvZiB0aGUgdGFnIChjaGFuZ2VzIHRoaXMuZm9jdXNNb3VzZVRhZ0RpdilcclxuICAgICAgICAgICAgdGhpcy5idG5UYWdJc0hvdmVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmZvY3VzTW91c2VUYWdEaXYgJiYgIXRoaXMuYnRuVGFnSXNIb3Zlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV0YWlsVGFnRGl2LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZpZGVvSnNQbGF5ZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmlkZW9Kc1BsYXllci5kaXNwb3NlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5kZXRhaWxUYWdEaXYuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgaWYgKHZpZGVvSnNQbGF5ZXIpIHtcclxuICAgICAgICAgICAgICAgIHZpZGVvSnNQbGF5ZXIuZGlzcG9zZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMudmlld2VyU2VydmljZS5hY3Rpb25fbW92ZV90b190YWcoYnV0dG9uLmlkKTtcclxuICAgICAgICAgICAgdGhpcy52aXNpYmlsaXR5U2VydmljZS5kZXRhaWxTaG93aW5nLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt1cmxdKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjbGVhckJ0bihpZExpc3Q6IGFueVtdKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBpZCBvZiBpZExpc3QpIHtcclxuICAgICAgICAgICAgY29uc3QgYnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xyXG4gICAgICAgICAgICBpZiAoYnV0dG9uKSB7XHJcbiAgICAgICAgICAgICAgICBidXR0b24ucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJBbGxCdXR0b25zKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnBsYW5EaXZDb250ZW50KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGJ1dHRvbnMgPSB0aGlzLnBsYW5EaXZDb250ZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2J1dHRvbicpO1xyXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby1hcnJheS1mb3ItZWFjaFxyXG4gICAgICAgICAgICBidXR0b25zLmZvckVhY2goZnVuY3Rpb24gKGN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgY3VycmVudFZhbHVlLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy51c2VyUG9zaXRpb25CdG4gPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVBbGxCdXR0b25zU3R5bGUocHJvcGVydGllczogQXJyYXk8c3RyaW5nPiwgdmFsdWVzOiBBcnJheTxzdHJpbmc+KSB7XHJcbiAgICAgICAgaWYgKHRoaXMucGxhbkRpdkNvbnRlbnQpIHtcclxuICAgICAgICAgICAgY29uc3QgYnV0dG9ucyA9IHRoaXMucGxhbkRpdkNvbnRlbnQucXVlcnlTZWxlY3RvckFsbCgnYnV0dG9uJyk7XHJcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25vLWFycmF5LWZvci1lYWNoXHJcbiAgICAgICAgICAgIGJ1dHRvbnMuZm9yRWFjaChmdW5jdGlvbiAoY3VycmVudFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5LCBpKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5ID09PSBcInRyYW5zZm9ybVwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vRm9yIHNhdmluZyB0aGUgcm90YXRpb24gYW5kIGFkZGluZyBzY2FsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcm90YXRpb25SZWdleCA9IC8ocm90YXRlXFwoLT9cXGQqXFwuP1xcZCtkZWdcXCkpL2c7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByb3RhdGlvbk1hdGNoID0gY3VycmVudFZhbHVlLnN0eWxlW3Byb3BlcnR5XS5tYXRjaChyb3RhdGlvblJlZ2V4KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJvdGF0aW9uTWF0Y2gubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFZhbHVlLnN0eWxlW3Byb3BlcnR5XSA9IGAke3ZhbHVlc1tpXX0gJHtyb3RhdGlvbk1hdGNoWzBdfWA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VmFsdWUuc3R5bGVbcHJvcGVydHldID0gdmFsdWVzW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uUGxhblJlbW92ZSgpIHtcclxuICAgICAgICB0aGlzLnVzZXJQb3NpdGlvbkJ0biA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jYWxpYnJhdGlvblBsYW4gPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFN3ZWVwID0gbnVsbDtcclxuICAgICAgICB0aGlzLmRldGFpbFRhZ0RpdiA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcmVzaXplUGxhbihpc1JlbW92aW5nOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5yZXNpemVQbGFuU3Vic2NyaXB0aW9uLm5leHQoZmFsc2UpO1xyXG4gICAgICAgIGlmIChpc1JlbW92aW5nKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2luIHJlc2l6ZVBsYW4nKTtcclxuICAgICAgICBpZiAodGhpcy5wbGFuRGl2ICYmIHRoaXMuY3VycmVudFN3ZWVwKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFuem9vbSA9IHBhbnpvb20odGhpcy5wbGFuRGl2LCB7XHJcbiAgICAgICAgICAgICAgICBib3VuZHM6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBib3VuZHNQYWRkaW5nOiAwLFxyXG4gICAgICAgICAgICAgICAgbWF4Wm9vbTogNCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVjdCA9IHtcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogdGhpcy5wbGFuRGl2Q29udGVudC5vZmZzZXRXaWR0aCxcclxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IHRoaXMucGxhbkRpdkNvbnRlbnQub2Zmc2V0SGVpZ2h0LFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgY29lZmZYLCBjb2VmZlkgfSA9IGdldENvZWZmaWNpZW50c0ZvckltYWdlKHRoaXMuaW1nUGxhbiwgcmVjdCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvZWZmUGxhblggPSBjb2VmZlg7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvZWZmUGxhblkgPSBjb2VmZlk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhbnpvb20uem9vbUFicygwLCAwLCA0KTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVzaXplUGxhblN1YnNjcmlwdGlvbi5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgICB9LCAyMDApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVUb3VjaChldmVudCkge1xyXG4gICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XHJcbiAgICAgICAgaWYgKG5vdyAtIHRoaXMubGFzdFRvdWNoVGltZSA8IHRoaXMuZGVsYXlEYmxUb3VjaCkge1xyXG4gICAgICAgICAgICB0aGlzLmxhc3RUb3VjaFRpbWUgPSAwO1xyXG4gICAgICAgICAgICAvLyB0aGlzLm9uRGJsQ2xpY2tQbGFuKGV2ZW50KTtcclxuICAgICAgICAgICAgLyoqIFNpbXVsYXRlIGEgZGJsY2xpY2sgZm9yIHBob25lICh3ZSBkb24ndCBnZXQgb2Zmc2V0WC9ZIG9uIHRvdWNoZXZlbnQpICovXHJcbiAgICAgICAgICAgIGNvbnN0IG5ld0V2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ01vdXNlRXZlbnRzJyk7XHJcbiAgICAgICAgICAgIGNvbnN0IHRvdWNoID0gZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF07XHJcbiAgICAgICAgICAgIG5ld0V2ZW50LmluaXRNb3VzZUV2ZW50KFxyXG4gICAgICAgICAgICAgICAgJ2RibGNsaWNrJyxcclxuICAgICAgICAgICAgICAgIHRydWUsXHJcbiAgICAgICAgICAgICAgICB0cnVlLFxyXG4gICAgICAgICAgICAgICAgZXZlbnQudGFyZ2V0Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcsXHJcbiAgICAgICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAgICAgdG91Y2guc2NyZWVuWCxcclxuICAgICAgICAgICAgICAgIHRvdWNoLnNjcmVlblksXHJcbiAgICAgICAgICAgICAgICB0b3VjaC5jbGllbnRYLFxyXG4gICAgICAgICAgICAgICAgdG91Y2guY2xpZW50WSxcclxuICAgICAgICAgICAgICAgIGV2ZW50LmN0cmxLZXksXHJcbiAgICAgICAgICAgICAgICBldmVudC5hbHRLZXksXHJcbiAgICAgICAgICAgICAgICBldmVudC5zaGlydEtleSxcclxuICAgICAgICAgICAgICAgIGV2ZW50Lm1ldGFLZXksXHJcbiAgICAgICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAgICAgbnVsbFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBldmVudC50YXJnZXQuZGlzcGF0Y2hFdmVudChuZXdFdmVudCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5sYXN0VG91Y2hUaW1lID0gbm93O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvbkRibENsaWNrUGxhbihldmVudCkge1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgY29uc3QgY2xpY2tYID0gZXZlbnQub2Zmc2V0WDtcclxuICAgICAgICBjb25zdCBjbGlja1kgPSBldmVudC5vZmZzZXRZO1xyXG4gICAgICAgIGNvbnN0IHpvbmVQbGFuID0gdGhpcy5jdXJyZW50UGxhbi56b25lO1xyXG4gICAgICAgIGlmICh6b25lUGxhbikge1xyXG4gICAgICAgICAgICBjb25zdCBuYXZpZ2F0aW9uczogYW55ID1cclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubmF2aWdhdGlvblNlcnZpY2UuZ2V0TmF2aWdhdGlvbnNGb3Jab25lKHpvbmVQbGFuKTtcclxuICAgICAgICAgICAgaWYgKG5hdmlnYXRpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICAgICAgICAgICAgICAgIG5hdmlnYXRpb25zLm1hcChhc3luYyAobmF2KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0gSlNPTi5wYXJzZShuYXYucG9zaXRpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgeDogbnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgeTogbnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jYWxpYnJhdGlvblBsYW4ubmV3KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwb3NpdGlvbjJEID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybVBvc2l0aW9uM0RGb3JOZXdDYWxpYnJhdGlvbihwb3NpdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0gcG9zaXRpb24yRC54IC8gcG9zaXRpb24yRC5jb2VmZlg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gcG9zaXRpb24yRC55IC8gcG9zaXRpb24yRC5jb2VmZlk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGhpcy5jYWxpYnJhdGlvblBsYW4ub2Zmc2V0WCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uLnggKiB0aGlzLmNhbGlicmF0aW9uUGxhbi54KSAvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2VmZlBsYW5YO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMuY2FsaWJyYXRpb25QbGFuLm9mZnNldFkgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbi56ICogdGhpcy5jYWxpYnJhdGlvblBsYW4ueSkgL1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29lZmZQbGFuWTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGlzdFggPSBNYXRoLmFicyhjbGlja1ggLSB4KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGlzdFkgPSBNYXRoLmFicyhjbGlja1kgLSB5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmF2LmRpc3QgPSBNYXRoLnNxcnQoTWF0aC5wb3coZGlzdFgsIDIpICsgTWF0aC5wb3coZGlzdFksIDIpKTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIG5hdmlnYXRpb25zLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS5kaXN0IC0gYi5kaXN0O1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmFjdGlvbl9nb190b19zd2VlcChcclxuICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0aW9uc1swXS5tYXR0ZXJwb3J0U3dlZXBJRFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbmZpZ3VyZXMgcGxhbiBmcm9tIGNhY2hlIChwcmV2aW91cyBwbGFuKS5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgdXBsb2FkUGxhbkZyb21DYWNoZSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICB0aGlzLmh0bWxDb250ZW50VG9JbmplY3QgPSB0aGlzLmNhY2hlLmh0bWxDb250ZW50O1xyXG4gICAgICAgIGF3YWl0IHRoaXMuY29uZmlndXJlUGxhbih0aGlzLmNhY2hlLnBsYW4pO1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFB1dHMgYnV0dG9ucyAodGFncykgZnJvbSBjYWNoZSBhY2NvcmRpbmcgdG8gcGFzc2VkIGVsZW1lbnQgSURzIChmb3IgZmlsdGVyIGlmIGFueSlcclxuICAgICAqIEBwYXJhbSBlbGVtZW50SURzIGVsZW1lbnRzICh0aWNrZXRzLCBlcXVpcG1lbnRzLCBldGMpIHRvIGJlIHNob3duIG9uIHBsYW5cclxuICAgICAqL1xyXG4gICAgdXBsb2FkVGFnc0Zyb21DYWNoZShzaXplQnV0dG9uOiBudW1iZXIgPSAxMCkge1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwidXBsb2FkaW5nIHRhZ3MgZnJvbSBjYWNoZVwiKTtcclxuXHJcbiAgICAgICAgZm9yIChjb25zdCBjYWNoZWQgb2YgdGhpcy5jYWNoZS5odG1sQ29udGVudCkge1xyXG4gICAgICAgICAgICBjb25zdCBidXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcclxuICAgICAgICAgICAgdGhpcy5zdHlsZUJ1dHRvbihidXR0b24sIGNhY2hlZC50YWdJY29uLCBzaXplQnV0dG9uKTtcclxuICAgICAgICAgICAgYnV0dG9uLmlkID0gY2FjaGVkLmVsZW1lbnRJRDtcclxuICAgICAgICAgICAgdGhpcy5wbGFuRGl2Q29udGVudC5hcHBlbmQoYnV0dG9uKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY2FsaWJyYXRpb25QbGFuLm5ldykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Q29lZmZYID1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvZWZmUGxhblggL1xyXG4gICAgICAgICAgICAgICAgICAgICh0aGlzLmltZ1BsYW4ud2lkdGggLyB0aGlzLmNhbGlicmF0aW9uUGxhbi5pbWdXaWR0aCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdDb2VmZlkgPVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29lZmZQbGFuWSAvXHJcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMuaW1nUGxhbi5oZWlnaHQgLyB0aGlzLmNhbGlicmF0aW9uUGxhbi5pbWdIZWlnaHQpO1xyXG4gICAgICAgICAgICAgICAgYnV0dG9uLnN0eWxlLnRvcCA9IGAke2NhY2hlZC55IC8gbmV3Q29lZmZZIC0gNX1weGA7XHJcbiAgICAgICAgICAgICAgICBidXR0b24uc3R5bGUubGVmdCA9IGAke2NhY2hlZC54IC8gbmV3Q29lZmZYIC0gNX1weGA7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBidXR0b24uc3R5bGUudG9wID0gYCR7Y2FjaGVkLnkgLyB0aGlzLmNvZWZmUGxhblkgLSA1fXB4YDtcclxuICAgICAgICAgICAgICAgIGJ1dHRvbi5zdHlsZS5sZWZ0ID0gYCR7Y2FjaGVkLnggLyB0aGlzLmNvZWZmUGxhblggLSA1fXB4YDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5hZGRMaXN0ZW5lcnNUb0J1dHRvbihidXR0b24sIGNhY2hlZC51cmwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRDYWxpYnJhdGVkUGxhbkZvclpvbmUoem9uZTogWm9uZSk6IFByb21pc2U8UGxhbj4ge1xyXG4gICAgICAgIGxldCBwbGFucyA9IChhd2FpdCB0aGlzLkFQSS5QbGFuc0J5Wm9uZSh6b25lLmlkKSkuaXRlbXM7XHJcbiAgICAgICAgbGV0IHBhcmVudFpvbmUgPSBudWxsO1xyXG4gICAgICAgIGlmIChwbGFucy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgLy8gdHJ5IHRvIGZpbmQgcGFyZW50IHpvbmVcclxuICAgICAgICAgICAgcGFyZW50Wm9uZSA9IGF3YWl0IHRoaXMuQVBJLkdldFpvbmUoem9uZS5wYXJlbnRJRCk7XHJcbiAgICAgICAgICAgIHBsYW5zID0gKGF3YWl0IHRoaXMuQVBJLlBsYW5zQnlab25lKHpvbmUucGFyZW50SUQpKS5pdGVtcztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY2FsaWJyYXRlZFBsYW4gPSBwbGFucy5maW5kKFxyXG4gICAgICAgICAgICAocGxhbikgPT4gcGxhbi5jYWxpYnJhdGlvbiAmJiBwbGFuLmlzQ3VycmVudEZvclpvbmVcclxuICAgICAgICApIGFzIFBsYW47XHJcbiAgICAgICAgaWYgKGNhbGlicmF0ZWRQbGFuKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNpZ25lZCA9IGF3YWl0IGdldFNpZ25lZEZpbGUoY2FsaWJyYXRlZFBsYW4uYW5uZXhlKTtcclxuICAgICAgICAgICAgaWYgKHNpZ25lZCkge1xyXG4gICAgICAgICAgICAgICAgY2FsaWJyYXRlZFBsYW4uZmlsZXBhdGggPSBzaWduZWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FsaWJyYXRlZFBsYW4ubmF2aWdhdGlvbklEcyA9IHBhcmVudFpvbmVcclxuICAgICAgICAgICAgICAgID8gcGFyZW50Wm9uZS5zd2VlcElEc1xyXG4gICAgICAgICAgICAgICAgOiB6b25lLnN3ZWVwSURzO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY2FsaWJyYXRlZFBsYW4gfHwgbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICB0cmFuc2Zvcm1Qb3NpdGlvbjNERm9yTmV3Q2FsaWJyYXRpb24ocG9zaXRpb246IHtcclxuICAgICAgICB4OiBudW1iZXI7XHJcbiAgICAgICAgeTogbnVtYmVyO1xyXG4gICAgICAgIHo6IG51bWJlcjtcclxuICAgIH0pOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyBjb2VmZlg6IG51bWJlcjsgY29lZmZZOiBudW1iZXI7IH0ge1xyXG4gICAgICAgIGNvbnN0IHBvc2l0aW9uWCA9XHJcbiAgICAgICAgICAgIHRoaXMuY2FsaWJyYXRpb25QbGFuLm5hbWVYQXhpcyA9PT0gJ3gnID8gcG9zaXRpb24ueCA6IHBvc2l0aW9uLno7XHJcbiAgICAgICAgY29uc3QgcG9zaXRpb25ZID1cclxuICAgICAgICAgICAgdGhpcy5jYWxpYnJhdGlvblBsYW4ubmFtZVlBeGlzID09PSAneCcgPyBwb3NpdGlvbi54IDogcG9zaXRpb24uejtcclxuICAgICAgICBsZXQgeCA9XHJcbiAgICAgICAgICAgIHRoaXMuY2FsaWJyYXRpb25QbGFuLm9mZnNldFggKyBwb3NpdGlvblggKiB0aGlzLmNhbGlicmF0aW9uUGxhbi5zY2FsZVg7XHJcbiAgICAgICAgbGV0IHkgPVxyXG4gICAgICAgICAgICB0aGlzLmNhbGlicmF0aW9uUGxhbi5vZmZzZXRZICsgcG9zaXRpb25ZICogdGhpcy5jYWxpYnJhdGlvblBsYW4uc2NhbGVZO1xyXG4gICAgICAgIGNvbnN0IG5ld0NvZWZmWCA9XHJcbiAgICAgICAgICAgIHRoaXMuY29lZmZQbGFuWCAvICh0aGlzLmltZ1BsYW4ud2lkdGggLyB0aGlzLmNhbGlicmF0aW9uUGxhbi5pbWdXaWR0aCk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJuZXdDb2VmZlhcIiwgbmV3Q29lZmZYKTtcclxuICAgICAgICBjb25zdCBuZXdDb2VmZlkgPVxyXG4gICAgICAgICAgICB0aGlzLmNvZWZmUGxhblkgLyAodGhpcy5pbWdQbGFuLmhlaWdodCAvIHRoaXMuY2FsaWJyYXRpb25QbGFuLmltZ0hlaWdodCk7XHJcbiAgICAgICAgeCA9ICh4IC0gdGhpcy5jYWxpYnJhdGlvblBsYW4ub2Zmc2V0WFBsYW4pIC8gdGhpcy5jYWxpYnJhdGlvblBsYW4uc2NhbGVQbGFuO1xyXG5cclxuICAgICAgICB5ID0gKHkgLSB0aGlzLmNhbGlicmF0aW9uUGxhbi5vZmZzZXRZUGxhbikgLyB0aGlzLmNhbGlicmF0aW9uUGxhbi5zY2FsZVBsYW47XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coeCwgeSk7XHJcblxyXG4gICAgICAgIHJldHVybiB7IHgsIHksIGNvZWZmWDogbmV3Q29lZmZYLCBjb2VmZlk6IG5ld0NvZWZmWSB9O1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
@@ -104,32 +104,32 @@ export class PoiService {
104
104
  if (!sweeps || sweeps.length === 0) {
105
105
  return [];
106
106
  }
107
- const queryStatement = `
108
- query ListPOISLight($filter: ModelPOIFilterInput, $limit: Int, $nextToken: String) {
109
- listPOIS(filter: $filter, limit: $limit, nextToken: $nextToken) {
110
- items {
111
- id
112
- coordinate
113
- specific
114
- private
115
- global
116
- type
117
- elementID
118
- level
119
- role
120
- category
121
- domainID
122
- metadata
123
- tagIcon
124
- tagDescription
125
- tagImageID
126
- matterportSweepID
127
- createdAt
128
- updatedAt
129
- }
130
- nextToken
131
- }
132
- }
107
+ const queryStatement = `
108
+ query ListPOISLight($filter: ModelPOIFilterInput, $limit: Int, $nextToken: String) {
109
+ listPOIS(filter: $filter, limit: $limit, nextToken: $nextToken) {
110
+ items {
111
+ id
112
+ coordinate
113
+ specific
114
+ private
115
+ global
116
+ type
117
+ elementID
118
+ level
119
+ role
120
+ category
121
+ domainID
122
+ metadata
123
+ tagIcon
124
+ tagDescription
125
+ tagImageID
126
+ matterportSweepID
127
+ createdAt
128
+ updatedAt
129
+ }
130
+ nextToken
131
+ }
132
+ }
133
133
  `;
134
134
  const CHUNK_SIZE = 50; // safe margin for an "or" filter expression's practical size
135
135
  const chunks = [];
@@ -196,4 +196,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
196
196
  type: Inject,
197
197
  args: ['currentAwsKinesisAnalyticsService']
198
198
  }] }, { type: i1.BaseUserService }, { type: i2.ZoneChangeService }] });
199
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9pLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL3NlcnZpY2VzL21vZGVscy9wb2kuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLE9BQU8sRUFBYSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsd0JBQXdCLEVBQWEsTUFBTSx1QkFBdUIsQ0FBQztBQUk1RSxPQUFPLEVBQUUsR0FBRyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDOzs7O0FBS3BELE1BQU0sT0FBTyxVQUFVO0lBZVg7SUFDQTtJQWZWLEdBQUcsQ0FBTSxDQUFDLGdCQUFnQjtJQUMxQixtQkFBbUIsQ0FBTSxDQUFDLEtBQUs7SUFDL0IsYUFBYSxHQUFTLElBQUksQ0FBQztJQUUzQixjQUFjLENBQVM7SUFFdkIsWUFBWSxDQUFTO0lBRWIsUUFBUSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7SUFFakMsWUFDK0IsV0FBZ0IsRUFFN0MsMkJBQWdDLEVBQ3hCLFdBQTRCLEVBQzVCLGlCQUFvQyxDQUFDLGtGQUFrRjs7UUFEdkgsZ0JBQVcsR0FBWCxXQUFXLENBQWlCO1FBQzVCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFFNUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxXQUFXLENBQUM7UUFDdkIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLDJCQUEyQixDQUFDO1FBRXZELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDbkQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNWLE9BQU87WUFDVCxDQUFDO1lBQ0QsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2pCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUNyQyxDQUFDO1lBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7WUFDM0IsQ0FBQztpQkFBTSxJQUFJLElBQUksQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUN6QyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDOUIsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUN6RCxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUNWLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1lBQzdCLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsaUJBQWlCLENBQUMsU0FBaUI7UUFDdkMsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNyRCxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNsQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkIsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBYTtRQUMvQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxLQUFLLENBQUMsbUJBQW1CLENBQUMsR0FBUTtRQUNoQyx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7WUFDekcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxDQUFDLE1BQU07WUFDM0MsYUFBYTtZQUNiO2dCQUNFLElBQUksRUFBRTtvQkFDSixTQUFTLEVBQUUsaUJBQWlCO29CQUM1QixVQUFVLEVBQUUsS0FBSztvQkFDakIsR0FBRyxFQUFFLEdBQUc7b0JBQ1IsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRTtvQkFDekIsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFO29CQUNyQixPQUFPLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFO29CQUMvQixVQUFVLEVBQUUsSUFBSSxDQUFDLGNBQWM7b0JBQy9CLE1BQU0sRUFBRSxJQUFJLENBQUMsWUFBWTtpQkFDMUI7Z0JBQ0QsVUFBVSxFQUFFLDhCQUE4QjtnQkFDMUMsb0JBQW9CO2FBQ3JCLEVBQ0QsWUFBWSxDQUNiLENBQUM7UUFDSixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsWUFBWSxDQUFDLEdBQVE7UUFDbkIsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLEdBQUcsQ0FBQztRQUMzQixPQUFPLENBQUMsVUFBVSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQU87UUFDckIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFhO1FBQzNCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsS0FBSyxDQUFDLDhCQUE4QixDQUNsQyxLQUFhLEVBQ2IsSUFBYTtRQUViLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxpQkFBaUIsRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQzthQUNoRSxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7TUFZRTtJQUNGLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxNQUFnQjtRQUM5QyxJQUFJLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbkMsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBRUQsTUFBTSxjQUFjLEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMEJ4QixDQUFDO1FBRUEsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDLENBQUMsNkRBQTZEO1FBQ3BGLE1BQU0sTUFBTSxHQUFlLEVBQUUsQ0FBQztRQUM5QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksVUFBVSxFQUFFLENBQUM7WUFDbkQsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUMvQyxDQUFDO1FBRUQsNEZBQTRGO1FBQzVGLDJGQUEyRjtRQUMzRiw2RkFBNkY7UUFDN0YsTUFBTSxPQUFPLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxRyxPQUFPLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRU8sS0FBSyxDQUFDLHFCQUFxQixDQUFDLGNBQXNCLEVBQUUsS0FBZTtRQUN6RSxNQUFNLElBQUksR0FBVSxFQUFFLENBQUM7UUFDdkIsSUFBSSxTQUFTLEdBQWtCLElBQUksQ0FBQztRQUVwQyxHQUFHLENBQUM7WUFDRixNQUFNLFNBQVMsR0FBRztnQkFDaEIsTUFBTSxFQUFFO29CQUNOLEVBQUUsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2lCQUNqRTtnQkFDRCxLQUFLLEVBQUUsSUFBSTtnQkFDWCxTQUFTO2FBQ1YsQ0FBQztZQUVGLG9GQUFvRjtZQUNwRiw4RUFBOEU7WUFDOUUsSUFBSSxPQUFPLEdBQVEsSUFBSSxDQUFDO1lBQ3hCLEtBQUssSUFBSSxPQUFPLEdBQUcsQ0FBQyxFQUFFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQztnQkFDMUQsSUFBSSxDQUFDO29CQUNILE1BQU0sUUFBUSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLGNBQWMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFRLENBQUM7b0JBQ3pGLE9BQU8sR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDO2dCQUNyRSxDQUFDO2dCQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7b0JBQ3BCLDhFQUE4RTtvQkFDOUUsSUFBSSxLQUFLLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDO3dCQUMxQixPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7b0JBQ2hDLENBQUM7eUJBQU0sSUFBSSxPQUFPLEtBQUssQ0FBQyxFQUFFLENBQUM7d0JBQ3pCLHdFQUF3RTt3QkFDeEUsT0FBTyxDQUFDLEtBQUssQ0FBQyw4Q0FBOEMsRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDdkUsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztZQUVELElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNqRSxTQUFTLEdBQUcsT0FBTyxFQUFFLFNBQVMsSUFBSSxJQUFJLENBQUM7UUFDekMsQ0FBQyxRQUFRLFNBQVMsRUFBRTtRQUVwQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDO3dHQXhNVSxVQUFVLGtCQVlYLG1CQUFtQixhQUNuQixtQ0FBbUM7NEdBYmxDLFVBQVUsY0FGVCxNQUFNOzs0RkFFUCxVQUFVO2tCQUh0QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBYUksTUFBTTsyQkFBQyxtQkFBbUI7OzBCQUMxQixNQUFNOzJCQUFDLG1DQUFtQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGNsYXNzLW1ldGhvZHMtdXNlLXRoaXMgKi9cbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyByZW1vdmVOdWxsS2V5c0Zyb21PYmplY3QsIHdhaXRVbnRpbCB9IGZyb20gJy4uLy4uL2hlbHBlcnMuc2VydmljZSc7XG5pbXBvcnQgeyBQT0ksIFBvaVR5cGUsIFpvbmUgfSBmcm9tICcuLi8uLi90eXBlcy5zZXJ2aWNlJztcbmltcG9ydCB7IFpvbmVDaGFuZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vem9uZUNoYW5nZS5zZXJ2aWNlJztcbmltcG9ydCB7IEJhc2VVc2VyU2VydmljZSB9IGZyb20gJy4uL3VzZXIuc2VydmljZSc7XG5pbXBvcnQgeyBBUEksIGdyYXBocWxPcGVyYXRpb24gfSBmcm9tICdhd3MtYW1wbGlmeSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBQb2lTZXJ2aWNlIHtcbiAgQVBJOiBhbnk7IC8vQVdTIEFQSVNlcnZpY2VcbiAgYXdzS2luZXNpc0FuYWx5dGljczogYW55OyAvL0FXU1xuICBzZWxlY3RlZEZsb29yOiBab25lID0gbnVsbDtcblxuICBjdXJyZW50U3BhY2VJRDogc3RyaW5nO1xuXG4gIHpvbmVJREZpbHRlcjogc3RyaW5nO1xuXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoJ2N1cnJlbnRBUElTZXJ2aWNlJykgYXBpSW5qZWN0ZWQ6IGFueSxcbiAgICBASW5qZWN0KCdjdXJyZW50QXdzS2luZXNpc0FuYWx5dGljc1NlcnZpY2UnKVxuICAgIGF3c0tpbmVzaXNBbmFseXRpY3NJbmplY3RlZDogYW55LFxuICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IEJhc2VVc2VyU2VydmljZSxcbiAgICBwcml2YXRlIHpvbmVDaGFuZ2VTZXJ2aWNlOiBab25lQ2hhbmdlU2VydmljZSAvLyBpbmplY3QgWm9uZUNoYW5nZVNlcnZpY2UgaW5zdGVhZCBvZiBOYXZpZ2F0b3JTZXJ2aWNlIHRvIGZpeCBjaXJjdWxhciBkZXBlbmRhbmN5XG4gICkge1xuICAgIHRoaXMuQVBJID0gYXBpSW5qZWN0ZWQ7XG4gICAgdGhpcy5hd3NLaW5lc2lzQW5hbHl0aWNzID0gYXdzS2luZXNpc0FuYWx5dGljc0luamVjdGVkO1xuXG4gICAgdGhpcy56b25lQ2hhbmdlU2VydmljZS56b25lQ2hhbmdlLnN1YnNjcmliZSgoem9uZSkgPT4ge1xuICAgICAgaWYgKCF6b25lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh6b25lLnNwYWNlSUQpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50U3BhY2VJRCA9IHpvbmUuc3BhY2VJRDtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5jdXJyZW50U3BhY2VJRCkge1xuICAgICAgICB0aGlzLnpvbmVJREZpbHRlciA9IG51bGw7XG4gICAgICB9IGVsc2UgaWYgKHpvbmUuaWQgIT09IHRoaXMuem9uZUlERmlsdGVyKSB7XG4gICAgICAgIHRoaXMuem9uZUlERmlsdGVyID0gem9uZS5pZDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuem9uZUNoYW5nZVNlcnZpY2UuZmxvb3JIYXNDaGFuZ2VkLnN1YnNjcmliZSgoZmxvb3IpID0+IHtcbiAgICAgIGlmIChmbG9vcikge1xuICAgICAgICB0aGlzLnNlbGVjdGVkRmxvb3IgPSBmbG9vcjtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGdldFBvaUJ5RWxlbWVudElkKGVsZW1lbnRJZDogc3RyaW5nKTogUHJvbWlzZTxQT0kgfCBudWxsPiB7XG4gICAgY29uc3QgcG9pcyA9IGF3YWl0IHRoaXMuQVBJLlBvaXNCeUVsZW1lbnQoZWxlbWVudElkKTtcbiAgICBpZiAocG9pcyAmJiBwb2lzLml0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBwb2lzLml0ZW1zWzBdO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGFzeW5jIGdldFBvaXNCeVR5cGUodHlwZTogUG9pVHlwZSk6IFByb21pc2U8W1BPSV0gfCBhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5BUEkuUG9pc0J5VHlwZSh0eXBlKS50aGVuKChwb2lzKSA9PiBwb2lzLml0ZW1zKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVBPSUZvclNwYWNlSUQocG9pOiBQT0kpOiBQcm9taXNlPFBPST4ge1xuICAgIHJlbW92ZU51bGxLZXlzRnJvbU9iamVjdChwb2kpO1xuICAgIGlmICghIXRoaXMuYXdzS2luZXNpc0FuYWx5dGljcyAmJiAhIXRoaXMuYXdzS2luZXNpc0FuYWx5dGljcy5yZWNvcmQgJiYgdGhpcy5hd3NLaW5lc2lzQW5hbHl0aWNzLnJlY29yZCgpKSB7XG4gICAgICB0aGlzLmF3c0tpbmVzaXNBbmFseXRpY3MuZ2V0SW5zdGFuY2UoKS5yZWNvcmQoXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAge1xuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGV2ZW50VHlwZTogJ09iamVjdCBDcmVhdGlvbicsXG4gICAgICAgICAgICBvYmplY3RUeXBlOiAncG9pJyxcbiAgICAgICAgICAgIHBvaTogcG9pLFxuICAgICAgICAgICAgdXNlcjogdGhpcy51c2VyU2VydmljZS5jdSxcbiAgICAgICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKSxcbiAgICAgICAgICAgIGZsb29ySWQ6IHRoaXMuc2VsZWN0ZWRGbG9vcj8uaWQsXG4gICAgICAgICAgICBsb2NhdGlvbklkOiB0aGlzLmN1cnJlbnRTcGFjZUlELFxuICAgICAgICAgICAgem9uZUlkOiB0aGlzLnpvbmVJREZpbHRlcixcbiAgICAgICAgICB9LFxuICAgICAgICAgIHN0cmVhbU5hbWU6ICdzbWFydGVycGxhbktpbmVzaXMtYW5hbHl0aWNzJyxcbiAgICAgICAgICAvLyBwYXJ0aXRpb25LZXk6IFwiXCIsXG4gICAgICAgIH0sXG4gICAgICAgICdBV1NLaW5lc2lzJ1xuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuQVBJLkNyZWF0ZVBPSShwb2kpO1xuICB9XG5cbiAgcG9pSXNWaXJ0dWFsKHBvaTogUE9JKTogYm9vbGVhbiB7XG4gICAgY29uc3QgeyBjb29yZGluYXRlIH0gPSBwb2k7XG4gICAgcmV0dXJuICFjb29yZGluYXRlO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlUG9pKHBvaToge30pOiBQcm9taXNlPFBPST4ge1xuICAgIHJldHVybiB0aGlzLkFQSS5VcGRhdGVQT0kocG9pKTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZVBvaShwb2lJRDogc3RyaW5nKTogUHJvbWlzZTxQT0k+IHtcbiAgICByZXR1cm4gdGhpcy5BUEkuRGVsZXRlUE9JKHsgaWQ6IHBvaUlEIH0pO1xuICB9XG5cbiAgYXN5bmMgZ2V0UG9pc0J5TWF0dGVycG9ydFN3ZWVwQnlUeXBlKFxuICAgIHN3ZWVwOiBzdHJpbmcsXG4gICAgdHlwZTogUG9pVHlwZVxuICApOiBQcm9taXNlPFBPSVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuQVBJLkxpc3RQT0lTKHsgbWF0dGVycG9ydFN3ZWVwSUQ6IHsgZXE6IHN3ZWVwIH0gfSwgMzAwKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5pdGVtcy5maWx0ZXIoKHBvaSkgPT4gcG9pLnR5cGUgPT09IHR5cGUpKTtcbiAgfVxuXG4gIC8qKlxuICAqIE9wdGltaXplZCB2ZXJzaW9uOiBmZXRjaGVzIFBPSXMgZm9yIE1BTlkgc3dlZXBzIGluIGFzIGZldyBHcmFwaFFMIGNhbGxzIGFzIHBvc3NpYmxlLFxuICAqIHVzaW5nIGFuIGBvcjogW3sgbWF0dGVycG9ydFN3ZWVwSUQ6IHsgZXEgfSB9LCAuLi5dYCBmaWx0ZXIgaW5zdGVhZCBvZiBsb29waW5nIG9uZVxuICAqIHJlcXVlc3QgcGVyIHN3ZWVwLiBUaGlzIGlzIGEgRHluYW1vREIgU2NhbiB3aXRoIGEgc2VydmVyLXNpZGUgZmlsdGVyIChub3QgYSBHU0lcbiAgKiBoYXNoLWtleSBxdWVyeSksIHNvIGBvcmAgY29tcG9zaXRpb24gd29ya3MgYW5kIGNvbGxhcHNlcyBOIHN3ZWVwLWJ5LXN3ZWVwIGNhbGxzXG4gICogaW50byBhIGhhbmRmdWwgb2YgcGFnaW5hdGVkIGNhbGxzIHRvdGFsLlxuICAqXG4gICogTk9URTogYGluYCBpcyBOT1Qgc3VwcG9ydGVkIG9uIHRoaXMgc2NoZW1hJ3MgTW9kZWxTdHJpbmdJbnB1dCAob2xkZXIgQW1wbGlmeSBjb2RlZ2VuKSxcbiAgKiBoZW5jZSB0aGUgYG9yYCBjb21wb3NpdGlvbiBpbnN0ZWFkIOKAlCBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCBmb3IgdGhpcyB1c2UgY2FzZS5cbiAgKlxuICAqIENodW5rZWQgYmVjYXVzZSBEeW5hbW9EQi9BcHBTeW5jIGZpbHRlciBleHByZXNzaW9ucyBoYXZlIGEgcHJhY3RpY2FsIHNpemUgY2VpbGluZyDigJRcbiAgKiBzcGxpdHRpbmcga2VlcHMgZWFjaCByZXF1ZXN0IHdlbGwgd2l0aGluIHNhZmUgbGltaXRzIHJlZ2FyZGxlc3Mgb2Ygc3BhY2Ugc2l6ZS5cbiAgKi9cbiAgYXN5bmMgZ2V0UG9pc0J5TWF0dGVycG9ydFN3ZWVwcyhzd2VlcHM6IHN0cmluZ1tdKTogUHJvbWlzZTxQT0lbXT4ge1xuICAgIGlmICghc3dlZXBzIHx8IHN3ZWVwcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBxdWVyeVN0YXRlbWVudCA9IGBcbiAgICBxdWVyeSBMaXN0UE9JU0xpZ2h0KCRmaWx0ZXI6IE1vZGVsUE9JRmlsdGVySW5wdXQsICRsaW1pdDogSW50LCAkbmV4dFRva2VuOiBTdHJpbmcpIHtcbiAgICAgIGxpc3RQT0lTKGZpbHRlcjogJGZpbHRlciwgbGltaXQ6ICRsaW1pdCwgbmV4dFRva2VuOiAkbmV4dFRva2VuKSB7XG4gICAgICAgIGl0ZW1zIHtcbiAgICAgICAgICBpZFxuICAgICAgICAgIGNvb3JkaW5hdGVcbiAgICAgICAgICBzcGVjaWZpY1xuICAgICAgICAgIHByaXZhdGVcbiAgICAgICAgICBnbG9iYWxcbiAgICAgICAgICB0eXBlXG4gICAgICAgICAgZWxlbWVudElEXG4gICAgICAgICAgbGV2ZWxcbiAgICAgICAgICByb2xlXG4gICAgICAgICAgY2F0ZWdvcnlcbiAgICAgICAgICBkb21haW5JRFxuICAgICAgICAgIG1ldGFkYXRhXG4gICAgICAgICAgdGFnSWNvblxuICAgICAgICAgIHRhZ0Rlc2NyaXB0aW9uXG4gICAgICAgICAgdGFnSW1hZ2VJRFxuICAgICAgICAgIG1hdHRlcnBvcnRTd2VlcElEXG4gICAgICAgICAgY3JlYXRlZEF0XG4gICAgICAgICAgdXBkYXRlZEF0XG4gICAgICAgIH1cbiAgICAgICAgbmV4dFRva2VuXG4gICAgICB9XG4gICAgfVxuICBgO1xuXG4gICAgY29uc3QgQ0hVTktfU0laRSA9IDUwOyAvLyBzYWZlIG1hcmdpbiBmb3IgYW4gXCJvclwiIGZpbHRlciBleHByZXNzaW9uJ3MgcHJhY3RpY2FsIHNpemVcbiAgICBjb25zdCBjaHVua3M6IHN0cmluZ1tdW10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN3ZWVwcy5sZW5ndGg7IGkgKz0gQ0hVTktfU0laRSkge1xuICAgICAgY2h1bmtzLnB1c2goc3dlZXBzLnNsaWNlKGksIGkgKyBDSFVOS19TSVpFKSk7XG4gICAgfVxuXG4gICAgLy8gRWFjaCBjaHVuayBpcyBhIGZ1bGwgdGFibGUgU2NhbiBvZiBpdHMgb3duOiBydW5uaW5nIHRoZW0gaW4gcGFyYWxsZWwgaW5zdGVhZCBvZiBvbmUgYWZ0ZXJcbiAgICAvLyB0aGUgb3RoZXIgZGl2aWRlcyB0aGUgd2FpdCBieSB0aGUgbnVtYmVyIG9mIGNodW5rcyAoNy42IHMgLT4gfjEgcyBvbiBhIDQ1Ni1zd2VlcCBzcGFjZSkuXG4gICAgLy8gUmVzdWx0cyBhcmUgZmxhdHRlbmVkIGluIGNodW5rIG9yZGVyLCBzbyB0aGUgb3V0cHV0IGlzIHRoZSBzYW1lIGFzIHRoZSBzZXF1ZW50aWFsIHZlcnNpb24uXG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKGNodW5rcy5tYXAoY2h1bmsgPT4gdGhpcy5zY2FuUG9pc0ZvclN3ZWVwQ2h1bmsocXVlcnlTdGF0ZW1lbnQsIGNodW5rKSkpO1xuICAgIHJldHVybiByZXN1bHRzLmZsYXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2NhblBvaXNGb3JTd2VlcENodW5rKHF1ZXJ5U3RhdGVtZW50OiBzdHJpbmcsIGNodW5rOiBzdHJpbmdbXSk6IFByb21pc2U8UE9JW10+IHtcbiAgICBjb25zdCBwb2lzOiBQT0lbXSA9IFtdO1xuICAgIGxldCBuZXh0VG9rZW46IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgZG8ge1xuICAgICAgY29uc3QgdmFyaWFibGVzID0ge1xuICAgICAgICBmaWx0ZXI6IHtcbiAgICAgICAgICBvcjogY2h1bmsubWFwKChzd2VlcCkgPT4gKHsgbWF0dGVycG9ydFN3ZWVwSUQ6IHsgZXE6IHN3ZWVwIH0gfSkpXG4gICAgICAgIH0sXG4gICAgICAgIGxpbWl0OiAxMDAwLFxuICAgICAgICBuZXh0VG9rZW5cbiAgICAgIH07XG5cbiAgICAgIC8vIEEgZmFpbGVkIHBhZ2UgaXMgcmV0cmllZCBvbmNlOiBnaXZpbmcgdXAgYXQgb25jZSBzaWxlbnRseSBkcm9wcGVkIHRoZSByZXN0IG9mIHRoZVxuICAgICAgLy8gY2h1bmsgKHVwIHRvIDUwIHN3ZWVwcyB3b3J0aCBvZiBQT0lzKSBmcm9tIHRoZSBjb3B5IG9yIHJlY2FsaWJyYXRpb24gbGlzdHMuXG4gICAgICBsZXQgcmVzRGF0YTogYW55ID0gbnVsbDtcbiAgICAgIGZvciAobGV0IGF0dGVtcHQgPSAxOyBhdHRlbXB0IDw9IDIgJiYgIXJlc0RhdGE7IGF0dGVtcHQrKykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gKGF3YWl0IEFQSS5ncmFwaHFsKGdyYXBocWxPcGVyYXRpb24ocXVlcnlTdGF0ZW1lbnQsIHZhcmlhYmxlcykpKSBhcyBhbnk7XG4gICAgICAgICAgcmVzRGF0YSA9IHJlc3BvbnNlLmRhdGEubGlzdFBPSVMgPz8geyBpdGVtczogW10sIG5leHRUb2tlbjogbnVsbCB9O1xuICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgICAgLy8gQW1wbGlmeSByZWplY3RzIHdoZW4gb25lIGl0ZW0gZXJyb3JzIGJ1dCBzdGlsbCBoYW5kcyBvdmVyIHRoZSByZWFkYWJsZSBvbmVzXG4gICAgICAgICAgaWYgKGVycm9yPy5kYXRhPy5saXN0UE9JUykge1xuICAgICAgICAgICAgcmVzRGF0YSA9IGVycm9yLmRhdGEubGlzdFBPSVM7XG4gICAgICAgICAgfSBlbHNlIGlmIChhdHRlbXB0ID09PSAyKSB7XG4gICAgICAgICAgICAvLyB0aGUgcmVzdCBvZiB0aGUgcHJvY2VzcyBjb250aW51ZXMgd2l0aCB3aGF0ZXZlciB3YXMgYWxyZWFkeSBjb2xsZWN0ZWRcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIHdoaWxlIGZldGNoaW5nIFBPSXMgZm9yIGEgc3dlZXAgY2h1bms6YCwgZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBwb2lzLnB1c2goLi4uKHJlc0RhdGE/Lml0ZW1zIHx8IFtdKS5maWx0ZXIoKHBvaTogUE9JKSA9PiAhIXBvaSkpO1xuICAgICAgbmV4dFRva2VuID0gcmVzRGF0YT8ubmV4dFRva2VuID8/IG51bGw7XG4gICAgfSB3aGlsZSAobmV4dFRva2VuKTtcblxuICAgIHJldHVybiBwb2lzO1xuICB9XG5cbiAgdW5zdWJzY3JpYmUoKSB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxufVxuIl19
199
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9pLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL3NlcnZpY2VzL21vZGVscy9wb2kuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLE9BQU8sRUFBYSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsd0JBQXdCLEVBQWEsTUFBTSx1QkFBdUIsQ0FBQztBQUk1RSxPQUFPLEVBQUUsR0FBRyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDOzs7O0FBS3BELE1BQU0sT0FBTyxVQUFVO0lBZVg7SUFDQTtJQWZWLEdBQUcsQ0FBTSxDQUFDLGdCQUFnQjtJQUMxQixtQkFBbUIsQ0FBTSxDQUFDLEtBQUs7SUFDL0IsYUFBYSxHQUFTLElBQUksQ0FBQztJQUUzQixjQUFjLENBQVM7SUFFdkIsWUFBWSxDQUFTO0lBRWIsUUFBUSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7SUFFakMsWUFDK0IsV0FBZ0IsRUFFN0MsMkJBQWdDLEVBQ3hCLFdBQTRCLEVBQzVCLGlCQUFvQyxDQUFDLGtGQUFrRjs7UUFEdkgsZ0JBQVcsR0FBWCxXQUFXLENBQWlCO1FBQzVCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFFNUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxXQUFXLENBQUM7UUFDdkIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLDJCQUEyQixDQUFDO1FBRXZELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDbkQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNWLE9BQU87WUFDVCxDQUFDO1lBQ0QsSUFBSSxJQUFJ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QUFLLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDO3dCQUMxQixPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7b0JBQ2hDLENBQUM7eUJBQU0sSUFBSSxPQUFPLEtBQUssQ0FBQyxFQUFFLENBQUM7d0JBQ3pCLHdFQUF3RTt3QkFDeEUsT0FBTyxDQUFDLEtBQUssQ0FBQyw4Q0FBOEMsRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDdkUsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztZQUVELElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNqRSxTQUFTLEdBQUcsT0FBTyxFQUFFLFNBQVMsSUFBSSxJQUFJLENBQUM7UUFDekMsQ0FBQyxRQUFRLFNBQVMsRUFBRTtRQUVwQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDO3dHQXhNVSxVQUFVLGtCQVlYLG1CQUFtQixhQUNuQixtQ0FBbUM7NEdBYmxDLFVBQVUsY0FGVCxNQUFNOzs0RkFFUCxVQUFVO2tCQUh0QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBYUksTUFBTTsyQkFBQyxtQkFBbUI7OzBCQUMxQixNQUFNOzJCQUFDLG1DQUFtQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGNsYXNzLW1ldGhvZHMtdXNlLXRoaXMgKi9cclxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyByZW1vdmVOdWxsS2V5c0Zyb21PYmplY3QsIHdhaXRVbnRpbCB9IGZyb20gJy4uLy4uL2hlbHBlcnMuc2VydmljZSc7XHJcbmltcG9ydCB7IFBPSSwgUG9pVHlwZSwgWm9uZSB9IGZyb20gJy4uLy4uL3R5cGVzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBab25lQ2hhbmdlU2VydmljZSB9IGZyb20gJy4uL3pvbmVDaGFuZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VVc2VyU2VydmljZSB9IGZyb20gJy4uL3VzZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEFQSSwgZ3JhcGhxbE9wZXJhdGlvbiB9IGZyb20gJ2F3cy1hbXBsaWZ5JztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQb2lTZXJ2aWNlIHtcclxuICBBUEk6IGFueTsgLy9BV1MgQVBJU2VydmljZVxyXG4gIGF3c0tpbmVzaXNBbmFseXRpY3M6IGFueTsgLy9BV1NcclxuICBzZWxlY3RlZEZsb29yOiBab25lID0gbnVsbDtcclxuXHJcbiAgY3VycmVudFNwYWNlSUQ6IHN0cmluZztcclxuXHJcbiAgem9uZUlERmlsdGVyOiBzdHJpbmc7XHJcblxyXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBJbmplY3QoJ2N1cnJlbnRBUElTZXJ2aWNlJykgYXBpSW5qZWN0ZWQ6IGFueSxcclxuICAgIEBJbmplY3QoJ2N1cnJlbnRBd3NLaW5lc2lzQW5hbHl0aWNzU2VydmljZScpXHJcbiAgICBhd3NLaW5lc2lzQW5hbHl0aWNzSW5qZWN0ZWQ6IGFueSxcclxuICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IEJhc2VVc2VyU2VydmljZSxcclxuICAgIHByaXZhdGUgem9uZUNoYW5nZVNlcnZpY2U6IFpvbmVDaGFuZ2VTZXJ2aWNlIC8vIGluamVjdCBab25lQ2hhbmdlU2VydmljZSBpbnN0ZWFkIG9mIE5hdmlnYXRvclNlcnZpY2UgdG8gZml4IGNpcmN1bGFyIGRlcGVuZGFuY3lcclxuICApIHtcclxuICAgIHRoaXMuQVBJID0gYXBpSW5qZWN0ZWQ7XHJcbiAgICB0aGlzLmF3c0tpbmVzaXNBbmFseXRpY3MgPSBhd3NLaW5lc2lzQW5hbHl0aWNzSW5qZWN0ZWQ7XHJcblxyXG4gICAgdGhpcy56b25lQ2hhbmdlU2VydmljZS56b25lQ2hhbmdlLnN1YnNjcmliZSgoem9uZSkgPT4ge1xyXG4gICAgICBpZiAoIXpvbmUpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHpvbmUuc3BhY2VJRCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFNwYWNlSUQgPSB6b25lLnNwYWNlSUQ7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF0aGlzLmN1cnJlbnRTcGFjZUlEKSB7XHJcbiAgICAgICAgdGhpcy56b25lSURGaWx0ZXIgPSBudWxsO1xyXG4gICAgICB9IGVsc2UgaWYgKHpvbmUuaWQgIT09IHRoaXMuem9uZUlERmlsdGVyKSB7XHJcbiAgICAgICAgdGhpcy56b25lSURGaWx0ZXIgPSB6b25lLmlkO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnpvbmVDaGFuZ2VTZXJ2aWNlLmZsb29ySGFzQ2hhbmdlZC5zdWJzY3JpYmUoKGZsb29yKSA9PiB7XHJcbiAgICAgIGlmIChmbG9vcikge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGbG9vciA9IGZsb29yO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGdldFBvaUJ5RWxlbWVudElkKGVsZW1lbnRJZDogc3RyaW5nKTogUHJvbWlzZTxQT0kgfCBudWxsPiB7XHJcbiAgICBjb25zdCBwb2lzID0gYXdhaXQgdGhpcy5BUEkuUG9pc0J5RWxlbWVudChlbGVtZW50SWQpO1xyXG4gICAgaWYgKHBvaXMgJiYgcG9pcy5pdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHJldHVybiBwb2lzLml0ZW1zWzBdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXRQb2lzQnlUeXBlKHR5cGU6IFBvaVR5cGUpOiBQcm9taXNlPFtQT0ldIHwgYW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5BUEkuUG9pc0J5VHlwZSh0eXBlKS50aGVuKChwb2lzKSA9PiBwb2lzLml0ZW1zKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGNyZWF0ZVBPSUZvclNwYWNlSUQocG9pOiBQT0kpOiBQcm9taXNlPFBPST4ge1xyXG4gICAgcmVtb3ZlTnVsbEtleXNGcm9tT2JqZWN0KHBvaSk7XHJcbiAgICBpZiAoISF0aGlzLmF3c0tpbmVzaXNBbmFseXRpY3MgJiYgISF0aGlzLmF3c0tpbmVzaXNBbmFseXRpY3MucmVjb3JkICYmIHRoaXMuYXdzS2luZXNpc0FuYWx5dGljcy5yZWNvcmQoKSkge1xyXG4gICAgICB0aGlzLmF3c0tpbmVzaXNBbmFseXRpY3MuZ2V0SW5zdGFuY2UoKS5yZWNvcmQoXHJcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgZXZlbnRUeXBlOiAnT2JqZWN0IENyZWF0aW9uJyxcclxuICAgICAgICAgICAgb2JqZWN0VHlwZTogJ3BvaScsXHJcbiAgICAgICAgICAgIHBvaTogcG9pLFxyXG4gICAgICAgICAgICB1c2VyOiB0aGlzLnVzZXJTZXJ2aWNlLmN1LFxyXG4gICAgICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCksXHJcbiAgICAgICAgICAgIGZsb29ySWQ6IHRoaXMuc2VsZWN0ZWRGbG9vcj8uaWQsXHJcbiAgICAgICAgICAgIGxvY2F0aW9uSWQ6IHRoaXMuY3VycmVudFNwYWNlSUQsXHJcbiAgICAgICAgICAgIHpvbmVJZDogdGhpcy56b25lSURGaWx0ZXIsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgc3RyZWFtTmFtZTogJ3NtYXJ0ZXJwbGFuS2luZXNpcy1hbmFseXRpY3MnLFxyXG4gICAgICAgICAgLy8gcGFydGl0aW9uS2V5OiBcIlwiLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgJ0FXU0tpbmVzaXMnXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5BUEkuQ3JlYXRlUE9JKHBvaSk7XHJcbiAgfVxyXG5cclxuICBwb2lJc1ZpcnR1YWwocG9pOiBQT0kpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHsgY29vcmRpbmF0ZSB9ID0gcG9pO1xyXG4gICAgcmV0dXJuICFjb29yZGluYXRlO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgdXBkYXRlUG9pKHBvaToge30pOiBQcm9taXNlPFBPST4ge1xyXG4gICAgcmV0dXJuIHRoaXMuQVBJLlVwZGF0ZVBPSShwb2kpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZGVsZXRlUG9pKHBvaUlEOiBzdHJpbmcpOiBQcm9taXNlPFBPST4ge1xyXG4gICAgcmV0dXJuIHRoaXMuQVBJLkRlbGV0ZVBPSSh7IGlkOiBwb2lJRCB9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGdldFBvaXNCeU1hdHRlcnBvcnRTd2VlcEJ5VHlwZShcclxuICAgIHN3ZWVwOiBzdHJpbmcsXHJcbiAgICB0eXBlOiBQb2lUeXBlXHJcbiAgKTogUHJvbWlzZTxQT0lbXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuQVBJLkxpc3RQT0lTKHsgbWF0dGVycG9ydFN3ZWVwSUQ6IHsgZXE6IHN3ZWVwIH0gfSwgMzAwKVxyXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLml0ZW1zLmZpbHRlcigocG9pKSA9PiBwb2kudHlwZSA9PT0gdHlwZSkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgKiBPcHRpbWl6ZWQgdmVyc2lvbjogZmV0Y2hlcyBQT0lzIGZvciBNQU5ZIHN3ZWVwcyBpbiBhcyBmZXcgR3JhcGhRTCBjYWxscyBhcyBwb3NzaWJsZSxcclxuICAqIHVzaW5nIGFuIGBvcjogW3sgbWF0dGVycG9ydFN3ZWVwSUQ6IHsgZXEgfSB9LCAuLi5dYCBmaWx0ZXIgaW5zdGVhZCBvZiBsb29waW5nIG9uZVxyXG4gICogcmVxdWVzdCBwZXIgc3dlZXAuIFRoaXMgaXMgYSBEeW5hbW9EQiBTY2FuIHdpdGggYSBzZXJ2ZXItc2lkZSBmaWx0ZXIgKG5vdCBhIEdTSVxyXG4gICogaGFzaC1rZXkgcXVlcnkpLCBzbyBgb3JgIGNvbXBvc2l0aW9uIHdvcmtzIGFuZCBjb2xsYXBzZXMgTiBzd2VlcC1ieS1zd2VlcCBjYWxsc1xyXG4gICogaW50byBhIGhhbmRmdWwgb2YgcGFnaW5hdGVkIGNhbGxzIHRvdGFsLlxyXG4gICpcclxuICAqIE5PVEU6IGBpbmAgaXMgTk9UIHN1cHBvcnRlZCBvbiB0aGlzIHNjaGVtYSdzIE1vZGVsU3RyaW5nSW5wdXQgKG9sZGVyIEFtcGxpZnkgY29kZWdlbiksXHJcbiAgKiBoZW5jZSB0aGUgYG9yYCBjb21wb3NpdGlvbiBpbnN0ZWFkIOKAlCBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCBmb3IgdGhpcyB1c2UgY2FzZS5cclxuICAqXHJcbiAgKiBDaHVua2VkIGJlY2F1c2UgRHluYW1vREIvQXBwU3luYyBmaWx0ZXIgZXhwcmVzc2lvbnMgaGF2ZSBhIHByYWN0aWNhbCBzaXplIGNlaWxpbmcg4oCUXHJcbiAgKiBzcGxpdHRpbmcga2VlcHMgZWFjaCByZXF1ZXN0IHdlbGwgd2l0aGluIHNhZmUgbGltaXRzIHJlZ2FyZGxlc3Mgb2Ygc3BhY2Ugc2l6ZS5cclxuICAqL1xyXG4gIGFzeW5jIGdldFBvaXNCeU1hdHRlcnBvcnRTd2VlcHMoc3dlZXBzOiBzdHJpbmdbXSk6IFByb21pc2U8UE9JW10+IHtcclxuICAgIGlmICghc3dlZXBzIHx8IHN3ZWVwcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHF1ZXJ5U3RhdGVtZW50ID0gYFxyXG4gICAgcXVlcnkgTGlzdFBPSVNMaWdodCgkZmlsdGVyOiBNb2RlbFBPSUZpbHRlcklucHV0LCAkbGltaXQ6IEludCwgJG5leHRUb2tlbjogU3RyaW5nKSB7XHJcbiAgICAgIGxpc3RQT0lTKGZpbHRlcjogJGZpbHRlciwgbGltaXQ6ICRsaW1pdCwgbmV4dFRva2VuOiAkbmV4dFRva2VuKSB7XHJcbiAgICAgICAgaXRlbXMge1xyXG4gICAgICAgICAgaWRcclxuICAgICAgICAgIGNvb3JkaW5hdGVcclxuICAgICAgICAgIHNwZWNpZmljXHJcbiAgICAgICAgICBwcml2YXRlXHJcbiAgICAgICAgICBnbG9iYWxcclxuICAgICAgICAgIHR5cGVcclxuICAgICAgICAgIGVsZW1lbnRJRFxyXG4gICAgICAgICAgbGV2ZWxcclxuICAgICAgICAgIHJvbGVcclxuICAgICAgICAgIGNhdGVnb3J5XHJcbiAgICAgICAgICBkb21haW5JRFxyXG4gICAgICAgICAgbWV0YWRhdGFcclxuICAgICAgICAgIHRhZ0ljb25cclxuICAgICAgICAgIHRhZ0Rlc2NyaXB0aW9uXHJcbiAgICAgICAgICB0YWdJbWFnZUlEXHJcbiAgICAgICAgICBtYXR0ZXJwb3J0U3dlZXBJRFxyXG4gICAgICAgICAgY3JlYXRlZEF0XHJcbiAgICAgICAgICB1cGRhdGVkQXRcclxuICAgICAgICB9XHJcbiAgICAgICAgbmV4dFRva2VuXHJcbiAgICAgIH1cclxuICAgIH1cclxuICBgO1xyXG5cclxuICAgIGNvbnN0IENIVU5LX1NJWkUgPSA1MDsgLy8gc2FmZSBtYXJnaW4gZm9yIGFuIFwib3JcIiBmaWx0ZXIgZXhwcmVzc2lvbidzIHByYWN0aWNhbCBzaXplXHJcbiAgICBjb25zdCBjaHVua3M6IHN0cmluZ1tdW10gPSBbXTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3dlZXBzLmxlbmd0aDsgaSArPSBDSFVOS19TSVpFKSB7XHJcbiAgICAgIGNodW5rcy5wdXNoKHN3ZWVwcy5zbGljZShpLCBpICsgQ0hVTktfU0laRSkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEVhY2ggY2h1bmsgaXMgYSBmdWxsIHRhYmxlIFNjYW4gb2YgaXRzIG93bjogcnVubmluZyB0aGVtIGluIHBhcmFsbGVsIGluc3RlYWQgb2Ygb25lIGFmdGVyXHJcbiAgICAvLyB0aGUgb3RoZXIgZGl2aWRlcyB0aGUgd2FpdCBieSB0aGUgbnVtYmVyIG9mIGNodW5rcyAoNy42IHMgLT4gfjEgcyBvbiBhIDQ1Ni1zd2VlcCBzcGFjZSkuXHJcbiAgICAvLyBSZXN1bHRzIGFyZSBmbGF0dGVuZWQgaW4gY2h1bmsgb3JkZXIsIHNvIHRoZSBvdXRwdXQgaXMgdGhlIHNhbWUgYXMgdGhlIHNlcXVlbnRpYWwgdmVyc2lvbi5cclxuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChjaHVua3MubWFwKGNodW5rID0+IHRoaXMuc2NhblBvaXNGb3JTd2VlcENodW5rKHF1ZXJ5U3RhdGVtZW50LCBjaHVuaykpKTtcclxuICAgIHJldHVybiByZXN1bHRzLmZsYXQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgc2NhblBvaXNGb3JTd2VlcENodW5rKHF1ZXJ5U3RhdGVtZW50OiBzdHJpbmcsIGNodW5rOiBzdHJpbmdbXSk6IFByb21pc2U8UE9JW10+IHtcclxuICAgIGNvbnN0IHBvaXM6IFBPSVtdID0gW107XHJcbiAgICBsZXQgbmV4dFRva2VuOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICBkbyB7XHJcbiAgICAgIGNvbnN0IHZhcmlhYmxlcyA9IHtcclxuICAgICAgICBmaWx0ZXI6IHtcclxuICAgICAgICAgIG9yOiBjaHVuay5tYXAoKHN3ZWVwKSA9PiAoeyBtYXR0ZXJwb3J0U3dlZXBJRDogeyBlcTogc3dlZXAgfSB9KSlcclxuICAgICAgICB9LFxyXG4gICAgICAgIGxpbWl0OiAxMDAwLFxyXG4gICAgICAgIG5leHRUb2tlblxyXG4gICAgICB9O1xyXG5cclxuICAgICAgLy8gQSBmYWlsZWQgcGFnZSBpcyByZXRyaWVkIG9uY2U6IGdpdmluZyB1cCBhdCBvbmNlIHNpbGVudGx5IGRyb3BwZWQgdGhlIHJlc3Qgb2YgdGhlXHJcbiAgICAgIC8vIGNodW5rICh1cCB0byA1MCBzd2VlcHMgd29ydGggb2YgUE9JcykgZnJvbSB0aGUgY29weSBvciByZWNhbGlicmF0aW9uIGxpc3RzLlxyXG4gICAgICBsZXQgcmVzRGF0YTogYW55ID0gbnVsbDtcclxuICAgICAgZm9yIChsZXQgYXR0ZW1wdCA9IDE7IGF0dGVtcHQgPD0gMiAmJiAhcmVzRGF0YTsgYXR0ZW1wdCsrKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gKGF3YWl0IEFQSS5ncmFwaHFsKGdyYXBocWxPcGVyYXRpb24ocXVlcnlTdGF0ZW1lbnQsIHZhcmlhYmxlcykpKSBhcyBhbnk7XHJcbiAgICAgICAgICByZXNEYXRhID0gcmVzcG9uc2UuZGF0YS5saXN0UE9JUyA/PyB7IGl0ZW1zOiBbXSwgbmV4dFRva2VuOiBudWxsIH07XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xyXG4gICAgICAgICAgLy8gQW1wbGlmeSByZWplY3RzIHdoZW4gb25lIGl0ZW0gZXJyb3JzIGJ1dCBzdGlsbCBoYW5kcyBvdmVyIHRoZSByZWFkYWJsZSBvbmVzXHJcbiAgICAgICAgICBpZiAoZXJyb3I/LmRhdGE/Lmxpc3RQT0lTKSB7XHJcbiAgICAgICAgICAgIHJlc0RhdGEgPSBlcnJvci5kYXRhLmxpc3RQT0lTO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChhdHRlbXB0ID09PSAyKSB7XHJcbiAgICAgICAgICAgIC8vIHRoZSByZXN0IG9mIHRoZSBwcm9jZXNzIGNvbnRpbnVlcyB3aXRoIHdoYXRldmVyIHdhcyBhbHJlYWR5IGNvbGxlY3RlZFxyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBFcnJvciB3aGlsZSBmZXRjaGluZyBQT0lzIGZvciBhIHN3ZWVwIGNodW5rOmAsIGVycm9yKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHBvaXMucHVzaCguLi4ocmVzRGF0YT8uaXRlbXMgfHwgW10pLmZpbHRlcigocG9pOiBQT0kpID0+ICEhcG9pKSk7XHJcbiAgICAgIG5leHRUb2tlbiA9IHJlc0RhdGE/Lm5leHRUb2tlbiA/PyBudWxsO1xyXG4gICAgfSB3aGlsZSAobmV4dFRva2VuKTtcclxuXHJcbiAgICByZXR1cm4gcG9pcztcclxuICB9XHJcblxyXG4gIHVuc3Vic2NyaWJlKCkge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxufVxyXG4iXX0=