@microsoft/windows-admin-center-sdk 4.87.0 → 4.167.0

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 (154) hide show
  1. package/angular/assets/strings/cs-CZ/strings.json +1 -1
  2. package/angular/assets/strings/de-DE/strings.json +1 -1
  3. package/angular/assets/strings/es-ES/strings.json +1 -1
  4. package/angular/assets/strings/fr-FR/strings.json +1 -1
  5. package/angular/assets/strings/hu-HU/strings.json +1 -1
  6. package/angular/assets/strings/id-ID/strings.json +1 -1
  7. package/angular/assets/strings/it-IT/strings.json +1 -1
  8. package/angular/assets/strings/ja-JP/strings.json +1 -1
  9. package/angular/assets/strings/ko-KR/strings.json +1 -1
  10. package/angular/assets/strings/nl-NL/strings.json +1 -1
  11. package/angular/assets/strings/pl-PL/strings.json +1 -1
  12. package/angular/assets/strings/pt-BR/strings.json +1 -1
  13. package/angular/assets/strings/pt-PT/strings.json +1 -1
  14. package/angular/assets/strings/ru-RU/strings.json +1 -1
  15. package/angular/assets/strings/strings.json +1 -1
  16. package/angular/assets/strings/sv-SE/strings.json +1 -1
  17. package/angular/assets/strings/tr-TR/strings.json +1 -1
  18. package/angular/assets/strings/zh-CN/strings.json +1 -1
  19. package/angular/assets/strings/zh-TW/strings.json +1 -1
  20. package/angular/esm2020/src/controls/actions/containers/action-bar/action-bar.component.mjs +2 -2
  21. package/angular/esm2020/src/controls/actions/containers/action-container.component.mjs +2 -3
  22. package/angular/esm2020/src/controls/alert-bar/alert-bar.component.mjs +2 -2
  23. package/angular/esm2020/src/controls/breadcrumb-header/breadcrumb-header.component.mjs +1 -1
  24. package/angular/esm2020/src/controls/common/base.component.mjs +1 -1
  25. package/angular/esm2020/src/controls/common/spacer-base.component.mjs +25 -1
  26. package/angular/esm2020/src/controls/context-menu/context-menu.component.mjs +2 -3
  27. package/angular/esm2020/src/controls/data-table/data-table.component.mjs +7 -7
  28. package/angular/esm2020/src/controls/dialog/base-dialog.component.mjs +2 -4
  29. package/angular/esm2020/src/controls/dialog/confirmation-list-dialog/confirmation-list-dialog.component.mjs +2 -2
  30. package/angular/esm2020/src/controls/dropdown/dropdown.component.mjs +1 -4
  31. package/angular/esm2020/src/controls/form/form-field/clock/clock-form-field.component.mjs +10 -7
  32. package/angular/esm2020/src/controls/form/form-field/form-field.component.mjs +1 -1
  33. package/angular/esm2020/src/controls/form/form-field/number/number-form-field.component.mjs +22 -4
  34. package/angular/esm2020/src/controls/form/form-field/radio-group/classic/radio-group-form-field.component.mjs +5 -5
  35. package/angular/esm2020/src/controls/icon/icon-text/icon-text.component.mjs +6 -6
  36. package/angular/esm2020/src/controls/icon/layered-icon/status/status-icon.component.mjs +1 -1
  37. package/angular/esm2020/src/controls/layout/editable-layout.component.mjs +2 -3
  38. package/angular/esm2020/src/controls/node-credentials-form/node-credentials-form.component.mjs +2 -2
  39. package/angular/esm2020/src/controls/property-grid/property-grid.component.mjs +33 -13
  40. package/angular/esm2020/src/controls/schema/tabbed-form-loader.component.mjs +2 -2
  41. package/angular/esm2020/src/controls/settings/common-settings/common-settings.component.mjs +5 -5
  42. package/angular/esm2020/src/controls/settings/settings-form.directive.mjs +3 -7
  43. package/angular/esm2020/src/controls/settings/settings-form.service.mjs +2 -4
  44. package/angular/esm2020/src/controls/snap-in-extension/snap-in-extension.component.mjs +1 -1
  45. package/angular/esm2020/src/controls/split-view/split-view.component.mjs +2 -2
  46. package/angular/esm2020/src/directives/router/router-link.directive.mjs +2 -2
  47. package/angular/esm2020/src/directives/svg/svg.directive.mjs +2 -3
  48. package/angular/esm2020/src/generated/strings.mjs +1 -1
  49. package/angular/esm2020/src/service/navigation.service.mjs +3 -8
  50. package/angular/esm2020/src/service/user-alive.service.mjs +2 -4
  51. package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.mjs +128 -73
  52. package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.mjs.map +1 -1
  53. package/angular/fesm2020/microsoft-windows-admin-center-sdk-angular.mjs +116 -71
  54. package/angular/fesm2020/microsoft-windows-admin-center-sdk-angular.mjs.map +1 -1
  55. package/angular/package.json +1 -1
  56. package/angular/src/controls/common/spacer-base.component.d.ts +11 -2
  57. package/angular/src/controls/form/form-field/number/number-form-field.component.d.ts +8 -0
  58. package/angular/src/controls/icon/icon-text/icon-text.component.d.ts +1 -1
  59. package/angular/src/controls/property-grid/property-grid.component.d.ts +2 -0
  60. package/angular/src/directives/svg/svg.directive.d.ts +1 -2
  61. package/angular/src/generated/strings.d.ts +12 -0
  62. package/core/assets/strings/cs-CZ/strings.json +1 -1
  63. package/core/assets/strings/es-ES/strings.json +1 -1
  64. package/core/assets/strings/fr-FR/strings.json +1 -1
  65. package/core/assets/strings/hu-HU/strings.json +1 -1
  66. package/core/assets/strings/id-ID/strings.json +1 -1
  67. package/core/assets/strings/it-IT/strings.json +1 -1
  68. package/core/assets/strings/ja-JP/strings.json +1 -1
  69. package/core/assets/strings/ko-KR/strings.json +1 -1
  70. package/core/assets/strings/pl-PL/strings.json +1 -1
  71. package/core/assets/strings/pt-BR/strings.json +1 -1
  72. package/core/assets/strings/pt-PT/strings.json +1 -1
  73. package/core/assets/strings/ru-RU/strings.json +1 -1
  74. package/core/assets/strings/sv-SE/strings.json +1 -1
  75. package/core/assets/strings/tr-TR/strings.json +1 -1
  76. package/core/assets/strings/zh-CN/strings.json +1 -1
  77. package/core/assets/strings/zh-TW/strings.json +1 -1
  78. package/core/azure/azure-constants.d.ts +3 -2
  79. package/core/azure/azure-constants.d.ts.map +1 -1
  80. package/core/azure/azure-constants.js +11 -3
  81. package/core/azure/azure-constants.js.map +1 -1
  82. package/core/base/utilities.d.ts +3 -3
  83. package/core/base/utilities.d.ts.map +1 -1
  84. package/core/base/utilities.js +2 -2
  85. package/core/base/utilities.js.map +1 -1
  86. package/core/data/active-directory/active-directory.d.ts.map +1 -1
  87. package/core/data/active-directory/active-directory.js +1 -1
  88. package/core/data/active-directory/active-directory.js.map +1 -1
  89. package/core/data/cookie.d.ts.map +1 -1
  90. package/core/data/cookie.js +7 -0
  91. package/core/data/cookie.js.map +1 -1
  92. package/core/data/gateway-url-translator.d.ts +1 -0
  93. package/core/data/gateway-url-translator.d.ts.map +1 -1
  94. package/core/data/gateway-url-translator.js +21 -6
  95. package/core/data/gateway-url-translator.js.map +1 -1
  96. package/core/data/gateway-urls.d.ts +6 -0
  97. package/core/data/gateway-urls.d.ts.map +1 -1
  98. package/core/data/gateway-urls.js +8 -0
  99. package/core/data/gateway-urls.js.map +1 -1
  100. package/core/data/node-connection.d.ts.map +1 -1
  101. package/core/data/node-connection.js +0 -2
  102. package/core/data/node-connection.js.map +1 -1
  103. package/core/generated/powershell-scripts.d.ts.map +1 -1
  104. package/core/generated/powershell-scripts.js +1 -1
  105. package/core/generated/powershell-scripts.js.map +1 -1
  106. package/core/resources/scripts/public/inventory/Get-ServerInventory.ps1 +38 -16
  107. package/core/security/tool-condition-validator.d.ts.map +1 -1
  108. package/core/security/tool-condition-validator.js +5 -5
  109. package/core/security/tool-condition-validator.js.map +1 -1
  110. package/core/shared/server-inventory/server-inventory-cache.d.ts.map +1 -1
  111. package/core/shared/server-inventory/server-inventory-cache.js +1 -1
  112. package/core/shared/server-inventory/server-inventory-cache.js.map +1 -1
  113. package/core/shared/server-inventory/server-inventory.d.ts +4 -4
  114. package/core/shared/server-inventory/server-inventory.d.ts.map +1 -1
  115. package/core/shared/server-inventory/server-inventory.js +2 -2
  116. package/core/shared/server-inventory/server-inventory.js.map +1 -1
  117. package/microsoft-windows-admin-center-sdk-4.167.0.tgz +0 -0
  118. package/package.json +10 -8
  119. package/styles/css/main-v2.css +1 -1
  120. package/tools/code-formatter/.eslintrc.base.json +1 -0
  121. package/tools/code-formatter/lint.d.ts.map +1 -1
  122. package/tools/code-formatter/lint.js +7 -1
  123. package/tools/code-formatter/lint.js.map +1 -1
  124. package/tools/code-formatter/utilities.d.ts +7 -0
  125. package/tools/code-formatter/utilities.d.ts.map +1 -0
  126. package/tools/code-formatter/utilities.js +79 -0
  127. package/tools/code-formatter/utilities.js.map +1 -0
  128. package/tools/gulp-update-notes-resource/index.d.ts.map +1 -1
  129. package/tools/gulp-update-notes-resource/index.js +4 -4
  130. package/tools/gulp-update-notes-resource/index.js.map +1 -1
  131. package/tools/module-template/.eslintrc.json +3 -0
  132. package/tools/module-template/build/pipelines/ci-build.yml +2 -2
  133. package/tools/module-template/gulpfile.ts/common/utilities.ts +1 -0
  134. package/tools/wac-cli/src/angular15/configs/angular-json-config.d.ts +2 -7
  135. package/tools/wac-cli/src/angular15/configs/angular-json-config.d.ts.map +1 -1
  136. package/tools/wac-cli/src/angular15/configs/angular-json-config.js +8 -1
  137. package/tools/wac-cli/src/angular15/configs/angular-json-config.js.map +1 -1
  138. package/tools/wac-cli/src/angular15/configs/eslint-auto-fix-config.d.ts +9 -0
  139. package/tools/wac-cli/src/angular15/configs/eslint-auto-fix-config.d.ts.map +1 -0
  140. package/tools/wac-cli/src/angular15/configs/eslint-auto-fix-config.js +16 -0
  141. package/tools/wac-cli/src/angular15/configs/eslint-auto-fix-config.js.map +1 -0
  142. package/tools/wac-cli/src/angular15/configs/package-json-config.d.ts +4 -0
  143. package/tools/wac-cli/src/angular15/configs/package-json-config.d.ts.map +1 -1
  144. package/tools/wac-cli/src/angular15/configs/package-json-config.js +13 -9
  145. package/tools/wac-cli/src/angular15/configs/package-json-config.js.map +1 -1
  146. package/tools/wac-cli/src/angular15/main.d.ts +20 -4
  147. package/tools/wac-cli/src/angular15/main.d.ts.map +1 -1
  148. package/tools/wac-cli/src/angular15/main.js +44 -8
  149. package/tools/wac-cli/src/angular15/main.js.map +1 -1
  150. package/tools/wac-cli/src/angular15/upgrader/eslint-auto-fix-upgrader.d.ts +18 -0
  151. package/tools/wac-cli/src/angular15/upgrader/eslint-auto-fix-upgrader.d.ts.map +1 -0
  152. package/tools/wac-cli/src/angular15/upgrader/eslint-auto-fix-upgrader.js +49 -0
  153. package/tools/wac-cli/src/angular15/upgrader/eslint-auto-fix-upgrader.js.map +1 -0
  154. package/tools/wac-cli/templates/wac-template/package.json +3 -0
@@ -67,9 +67,7 @@ export class NavigationService {
67
67
  this.idleUrl = `/${this.options.idleRoute[0]}`;
68
68
  // navigate to idle.
69
69
  this.router.navigate(this.options.idleRoute, this.defaultNavigationOptions);
70
- if (this.subscription) {
71
- this.subscription.unsubscribe();
72
- }
70
+ this.subscription?.unsubscribe();
73
71
  let startTimestamp = null;
74
72
  this.subscription = this.router.events
75
73
  .pipe(tap(event => {
@@ -108,10 +106,7 @@ export class NavigationService {
108
106
  */
109
107
  shutdown() {
110
108
  this.active = false;
111
- if (this.subscription) {
112
- this.subscription.unsubscribe();
113
- this.subscription = null;
114
- }
109
+ this.subscription?.unsubscribe();
115
110
  }
116
111
  /**
117
112
  * Map dialog service and dialog id so that correct dialog service instance can be found
@@ -379,4 +374,4 @@ NavigationService.initialWaitTime = 2000;
379
374
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(NavigationService, [{
380
375
  type: Injectable
381
376
  }], function () { return [{ type: i1.AppContextService }, { type: i2.UserAliveService }, { type: i3.Router }, { type: i3.ActivatedRoute }]; }, null); })();
382
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvc2VydmljZS9uYXZpZ2F0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBb0IsZUFBZSxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnRUFBZ0UsQ0FBQztBQUNqRyxPQUFPLEVBQWtCLE9BQU8sRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUN4RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sOERBQThELENBQUM7QUFDdkYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdFQUF3RSxDQUFDO0FBQ3pHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDBFQUEwRSxDQUFDO0FBQzlHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDBFQUEwRSxDQUFDO0FBRTlHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdFQUF3RSxDQUFDO0FBQzVHLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLG1HQUFtRyxDQUFDO0FBRXpKLE9BQU8sRUFHSCxrQkFBa0IsRUFHbEIsWUFBWSxFQUNaLG1CQUFtQixFQUd0QixNQUFNLHVEQUF1RCxDQUFDO0FBQy9ELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLDhGQUE4RixDQUFDO0FBQzlJLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUMvQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFekYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFVBQVUsRUFBd0MsTUFBTSxjQUFjLENBQUM7QUFDaEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7O0FBc0J4RDs7O0dBR0c7QUFDSCxNQUFNLE9BQU8saUJBQWlCO0lBMkIxQjs7T0FFRztJQUNILFlBQ1ksaUJBQW9DLEVBQ3BDLGdCQUFrQyxFQUNsQyxNQUFjLEVBQ2QsY0FBOEI7UUFIOUIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFoQ3pCLDZCQUF3QixHQUFxQixFQUFFLGtCQUFrQixFQUFFLElBQUksRUFBRSxDQUFDO1FBTW5GLG1CQUFjLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLHFCQUFnQixHQUF1QyxFQUFFLENBQUM7UUFDMUQsZ0JBQVcsR0FBOEM7WUFDN0QsS0FBSyxFQUFFLElBQUk7WUFDWCxhQUFhLEVBQUUsQ0FBQztZQUNoQixLQUFLLEVBQUUsSUFBSTtZQUNYLFFBQVEsRUFBRSxJQUFJO1lBQ2QsS0FBSyxFQUFFLElBQUk7U0FDZCxDQUFDO1FBQ00sc0JBQWlCLEdBQTBEO1lBQy9FLEtBQUssRUFBRSxJQUFJO1lBQ1gsYUFBYSxFQUFFLENBQUM7WUFDaEIsS0FBSyxFQUFFLElBQUk7WUFDWCxRQUFRLEVBQUUsSUFBSTtTQUNqQixDQUFDO0lBYUYsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0ksVUFBVSxDQUFDLE9BQWlDO1FBQy9DLGtCQUFrQixDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDM0MsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQzNELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRS9DLG9CQUFvQjtRQUNwQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUU1RSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUNuQztRQUVELElBQUksY0FBYyxHQUFHLElBQUksQ0FBQztRQUMxQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTTthQUNqQyxJQUFJLENBQ0QsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ1IsSUFBSSxLQUFLLFlBQVksZUFBZSxFQUFFO2dCQUNsQyxjQUFjLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUM1QixrQkFBa0IsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2FBQzFDO2lCQUFNLElBQUksS0FBSyxZQUFZLGFBQWEsSUFBSSxjQUFjLEVBQUU7Z0JBQ3pELGtCQUFrQixDQUFDLGtCQUFrQixDQUFDLG1CQUFtQixFQUFFLGNBQWMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ25ILGNBQWMsR0FBRyxJQUFJLENBQUM7Z0JBQ3RCLGtCQUFrQixDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQzthQUMvRDtRQUNMLENBQUMsQ0FBQyxFQUNGLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssWUFBWSxhQUFhLENBQUMsRUFDL0MsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQ2QsVUFBVSxDQUFDLDRCQUE0QixDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQzthQUNoRixJQUFJLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBSyxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUUsQ0FBQSxDQUFDLENBQUMsQ0FBQyxDQUNsRjthQUNBLFNBQVMsQ0FBQyxDQUFDLElBQWdFLEVBQUUsRUFBRTtZQUM1RSx1R0FBdUc7WUFDdkcsbUZBQW1GO1lBQ25GLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNoRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztvQkFDaEMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDO29CQUM3QyxvQkFBb0IsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7b0JBQy9DLGNBQWMsRUFBRSxJQUFJLENBQUMsZUFBZTtpQkFDdkMsQ0FBQyxDQUFDO2dCQUNILElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO2FBQy9CO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFUCxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN0RixJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN0RixJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNwRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM5RixJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM5RixJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNwRyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxRQUFRO1FBQ1gsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ25CLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7U0FDNUI7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLHFCQUFxQixDQUFDLGFBQTRCLEVBQUUsUUFBZ0I7UUFDdkUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxHQUFHLGFBQWEsQ0FBQztJQUNwRCxDQUFDO0lBRU8sMkJBQTJCLENBQUMsT0FBZ0I7UUFDaEQsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2xDLElBQUksT0FBTyxFQUFFO1lBQ1Qsa0JBQWtCLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDakU7YUFBTTtZQUNILGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ2xFO1FBRUQsa0JBQWtCLENBQUMsa0JBQWtCLENBQUMsbUJBQW1CLEVBQUUsY0FBYyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3pILENBQUM7SUFFTyxNQUFNLENBQUMsSUFBUztRQUNwQiw4REFBOEQ7UUFDOUQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7UUFFNUQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxFQUFFO1lBQzVGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUNqQztRQUVELG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ3ZDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDL0Qsa0JBQWtCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDLG9DQUFvQyxFQUFFO1lBQzVDLElBQUksQ0FBQyxvQ0FBb0MsR0FBRyxJQUFJLG9DQUFvQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNqSCxJQUFJLENBQUMsb0NBQW9DLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQzNELElBQUksQ0FBQywyQkFBMkIsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ2xELE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BCLENBQUMsQ0FBQyxDQUFDO1NBQ047UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLDhCQUE4QixFQUFFO1lBQ3RDLElBQUksQ0FBQyw4QkFBOEIsR0FBRyxJQUFJLDhCQUE4QixDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNyRyxJQUFJLENBQUMsOEJBQThCLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQ3JELGVBQWUsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDeEQsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEIsQ0FBQyxDQUFDLENBQUM7U0FDTjtRQUVELE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRDs7O09BR0c7SUFDSyxjQUFjLENBQUMsSUFBMEI7UUFDN0MsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzRCxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxhQUFhLEVBQUU7WUFDZixNQUFNLEdBQUcsYUFBYSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDckQsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQy9DO1FBRUQsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxNQUFNLENBQUMsSUFBaUI7UUFDNUIsTUFBTSxPQUFPLEdBQThDLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDNUUsSUFBSSxPQUFPLENBQUMsS0FBSyxJQUFJLElBQUksRUFBRTtZQUN2QixNQUFNLE1BQU0sR0FBRztnQkFDWCxVQUFVLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLE9BQU8sQ0FBQyxhQUFhO2dCQUM5QyxLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLO2dCQUM3QixLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7YUFDdkIsQ0FBQztZQUNGLElBQUksT0FBTyxDQUFDLEtBQUssS0FBSyxZQUFZLENBQUMsVUFBVSxFQUFFO2dCQUMzQyxPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztnQkFDckIsT0FBTyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7YUFDaEM7WUFFRCxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDbEM7UUFFRCxPQUFPLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNuQyxPQUFPLENBQUMsS0FBSyxHQUFHLFlBQVksQ0FBQyxVQUFVLENBQUM7UUFDeEMsT0FBTyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFpQixDQUFDO1FBRWxELCtDQUErQztRQUMvQyxPQUFPLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FDdEIsR0FBRyxFQUFFO1lBQ0QsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7Z0JBQ3JCLFVBQVUsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsT0FBTyxDQUFDLGFBQWE7Z0JBQzlDLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSzthQUN2QixDQUFDLENBQUM7WUFDSCxPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztZQUNyQixPQUFPLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUM1QixDQUFDLEVBQ0QsaUJBQWlCLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFdkMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWE7YUFDbkMsSUFBSSxDQUNELElBQUksQ0FBQyxDQUFDLENBQUMsRUFDUCxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ1YsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxTQUFTLENBQ2xELE1BQU0sQ0FBQyxFQUFFO2dCQUNMLE9BQU8sQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUMsa0NBQWtDLENBQUMsQ0FBQztnQkFDOUcsa0JBQWtCLENBQUMsb0NBQW9DLEVBQUUsQ0FBQztZQUM5RCxDQUFDLENBQ0osQ0FBQztZQUVGLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzRSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLDJCQUEyQixDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQzNHLENBQUMsQ0FBQyxFQUNGLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNWLGtCQUFrQixDQUFDLGtCQUFrQixDQUNqQyxtQkFBbUIsRUFBRSxPQUFPLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzFGLE9BQU8sQ0FBQyxLQUFLLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQztZQUVwQyxtRUFBbUU7WUFDbkUsSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFO2dCQUNmLFlBQVksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzVCLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO29CQUNyQixVQUFVLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLE9BQU8sQ0FBQyxhQUFhO29CQUM5QyxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7b0JBQ3BCLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSztpQkFDdkIsQ0FBQyxDQUFDO2dCQUNILE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO2dCQUNyQixPQUFPLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztnQkFDN0IsT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7Z0JBQ3JCLE9BQU8sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO2FBQzNCO1FBQ0wsQ0FBQyxDQUFDLEVBQ0YsVUFBVSxDQUFDLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3pCLE9BQU8sQ0FBQyxLQUFLLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQztZQUNwQyxJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDakIsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRTtnQkFDcEIsT0FBTyxHQUFHLEdBQUcsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDeEM7aUJBQU0sSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7Z0JBQ2xDLE9BQU8sR0FBRyxLQUFLLENBQUM7YUFDbkI7aUJBQU07Z0JBQ0gsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFO29CQUNiLE9BQU8sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO2lCQUN6QjtxQkFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUU7b0JBQ3RCLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO2lCQUMzQjthQUNKO1lBRUQsT0FBTyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUM7WUFFeEIsaUVBQWlFO1lBQ2pFLElBQUksT0FBTyxDQUFDLEtBQUssRUFBRTtnQkFDZixZQUFZLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM1QixPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3ZDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO2dCQUNyQixPQUFPLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztnQkFDN0IsT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7Z0JBQ3JCLE9BQU8sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO2FBQzNCO1lBRUQsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQyxDQUFDLENBQUM7YUFDTixTQUFTLEVBQUUsQ0FBQztRQUViLE9BQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7SUFDcEMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxhQUFhLENBQUMsSUFBVTtRQUM1QixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDbEMsTUFBTSxPQUFPLEdBQTBELElBQUksQ0FBQyxpQkFBaUIsQ0FBQztRQUM5RixJQUFJLE9BQU8sQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFO1lBQ3ZCLE1BQU0sTUFBTSxHQUFHO2dCQUNYLFVBQVUsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsT0FBTyxDQUFDLGFBQWE7Z0JBQzlDLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSzthQUN2QixDQUFDO1lBQ0YsSUFBSSxPQUFPLENBQUMsS0FBSyxLQUFLLGtCQUFrQixDQUFDLFVBQVUsRUFBRTtnQkFDakQsT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7Z0JBQ3JCLE9BQU8sQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO2FBQ2hDO1lBRUQsa0JBQWtCLENBQUMsa0JBQWtCLENBQUMsbUJBQW1CLEVBQUUsY0FBYyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDM0gsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ2xDO1FBRUQsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDM0MsSUFBSSxPQUFPLEtBQUssSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUMxQix5QkFBeUI7WUFDekIsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDO2dCQUNuQixVQUFVLEVBQUUsQ0FBQztnQkFDYixLQUFLLEVBQUUsa0JBQWtCLENBQUMsV0FBVzthQUN4QyxDQUFDLENBQUM7U0FDTjtRQUVELE9BQU8sQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ25DLE9BQU8sQ0FBQyxLQUFLLEdBQUcsa0JBQWtCLENBQUMsVUFBVSxDQUFDO1FBQzlDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBdUIsQ0FBQztRQUV4RCwrQ0FBK0M7UUFDL0MsT0FBTyxDQUFDLEtBQUssR0FBRyxVQUFVLENBQ3RCLEdBQUcsRUFBRTtZQUNELE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO2dCQUNyQixVQUFVLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLE9BQU8sQ0FBQyxhQUFhO2dCQUM5QyxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7YUFDdkIsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7WUFDckIsT0FBTyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFFeEIsNENBQTRDO1lBQzVDLElBQUksT0FBTyxDQUFDLEtBQUssS0FBSyxrQkFBa0IsQ0FBQyxVQUFVLEVBQUU7Z0JBQ2pELE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO2dCQUNyQixPQUFPLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQzthQUNoQztRQUNMLENBQUMsRUFDRCxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUV2Qyx3QkFBd0I7UUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLHdCQUF3QixDQUFDO2FBQ3RFLElBQUksQ0FDTCxPQUFPLENBQUMsRUFBRTtZQUNOLGtCQUFrQixDQUFDLGtCQUFrQixDQUNqQyxtQkFBbUIsRUFBRSxjQUFjLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLGlCQUFpQixFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN6RixJQUFJLE9BQU8sRUFBRTtnQkFDVCxrQ0FBa0M7Z0JBQ2xDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO2dCQUNwQixJQUFJLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUN2RSxPQUFPLENBQUMsS0FBSyxHQUFHLGtCQUFrQixDQUFDLFdBQVcsQ0FBQzthQUNsRDtpQkFBTTtnQkFDSCxrQ0FBa0M7Z0JBQ2xDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO2dCQUNuQixPQUFPLENBQUMsS0FBSyxHQUFHLGtCQUFrQixDQUFDLFNBQVMsQ0FBQzthQUNoRDtZQUVELG1FQUFtRTtZQUNuRSxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUU7Z0JBQ2YsWUFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDNUIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7b0JBQ3JCLFVBQVUsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsT0FBTyxDQUFDLGFBQWE7b0JBQzlDLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSztpQkFDdkIsQ0FBQyxDQUFDO2dCQUNILE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO2dCQUNyQixPQUFPLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztnQkFDeEIsT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7Z0JBQ3JCLE9BQU8sQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO2FBQ2hDO1FBQ0wsQ0FBQyxFQUNELEtBQUssQ0FBQyxFQUFFO1lBQ0osaUNBQWlDO1lBQ2pDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBQ25CLE9BQU8sQ0FBQyxLQUFLLEdBQUcsa0JBQWtCLENBQUMsU0FBUyxDQUFDO1lBRTdDLG1FQUFtRTtZQUNuRSxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUU7Z0JBQ2YsWUFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDNUIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7b0JBQ3JCLFVBQVUsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsT0FBTyxDQUFDLGFBQWE7b0JBQzlDLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSztpQkFDdkIsQ0FBQyxDQUFDO2dCQUNILE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO2dCQUNyQixPQUFPLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztnQkFDeEIsT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7Z0JBQ3JCLE9BQU8sQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO2FBQ2hDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDUCxPQUFPLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO0lBQ3BDLENBQUM7SUFFTyxVQUFVLENBQUMsSUFBcUI7UUFDcEMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2xDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUMxQyxVQUFVLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDO1lBQ3RELENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO1FBQzFELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBRTNCLGdFQUFnRTtRQUNoRSxlQUFlLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRWxDLDREQUE0RDtRQUM1RCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxvQkFBb0IsRUFBRTthQUMvQyxJQUFJLENBQ0QsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLDJCQUEyQixDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQzNHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxrQkFBa0IsQ0FDM0MsbUJBQW1CLEVBQUUsY0FBYyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxlQUFlLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQ3RGO2FBQ0osU0FBUyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVPLFVBQVUsQ0FBQyxJQUFxQjtRQUNwQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDN0IsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsd0JBQXdCLENBQUM7YUFDN0UsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBbUIsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLENBQUEsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFTywyQkFBMkIsQ0FBQyxPQUE2QjtRQUM3RCxPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO0lBQ3BFLENBQUM7O0FBN1pjLGlDQUFlLEdBQUcsSUFBSSxDQUFDO3FHQUQ3QixpQkFBaUI7c0dBQWpCLGlCQUFpQixXQUFqQixpQkFBaUI7dUZBQWpCLGlCQUFpQjtjQUw3QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgTmF2aWdhdGlvbkVuZCwgTmF2aWdhdGlvbkV4dHJhcywgTmF2aWdhdGlvblN0YXJ0LCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBDb3JlRW52aXJvbm1lbnQgfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL2RhdGEvY29yZS1lbnZpcm9ubWVudCc7XHJcbmltcG9ydCB7IE5hdGl2ZURlZmVycmVkLCBOYXRpdmVRIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9kYXRhL25hdGl2ZS1xJztcclxuaW1wb3J0IHsgTmV0IH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9kYXRhL25ldCc7XHJcbmltcG9ydCB7IExvZ2dpbmcgfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL2RpYWdub3N0aWNzL2xvZ2dpbmcnO1xyXG5pbXBvcnQgeyBTbWVXZWJUZWxlbWV0cnkgfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL2RpYWdub3N0aWNzL3NtZS13ZWItdGVsZW1ldHJ5JztcclxuaW1wb3J0IHsgUGVyZm9ybWFuY2VQcm9maWxlIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS1wcm9maWxlJztcclxuaW1wb3J0IHsgUGVyZm9ybWFuY2VUcmFja2VyIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS10cmFja2VyJztcclxuaW1wb3J0IHsgUnBjRGlhbG9nT3ZlcmxheURhdGEsIFJwY0RpYWxvZ092ZXJsYXlSZXN1bHQgfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL3JwYy9vdmVybGF5L3JwYy1vdmVybGF5LW1vZGVsJztcclxuaW1wb3J0IHsgUnBjT3ZlcmxheUNsb3NlS2V5IH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9ycGMvb3ZlcmxheS9ycGMtb3ZlcmxheS1tb2RlbCc7XHJcbmltcG9ydCB7IFJwY09ic2VydmFibGVQZXJmb3JtYW5jZUNvbmZpZ1NlcnZlciB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvcnBjL3BlcmZvcm1hbmNlL3JwYy1vYnNlcnZhYmxlLXBlcmZvcm1hbmNlLWNvbmZpZy1zZXJ2ZXInO1xyXG5pbXBvcnQgeyBTZWxlY3RhYmxlUGF0aCB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvcnBjL3JlcG9ydC9ycGMtcmVwb3J0LW1vZGVsJztcclxuaW1wb3J0IHtcclxuICAgIFJwY0FjdGl2YXRlRGF0YSxcclxuICAgIFJwY0RlYWN0aXZhdGVSZXN1bHQsXHJcbiAgICBScGNEZWFjdGl2YXRlU3RhdGUsXHJcbiAgICBScGNPcGVuRGF0YSxcclxuICAgIFJwY09wZW5SZXN1bHQsXHJcbiAgICBScGNPcGVuU3RhdGUsXHJcbiAgICBScGNPdXRib3VuZENvbW1hbmRzLFxyXG4gICAgUnBjU2h1dGRvd25EYXRhLFxyXG4gICAgUnBjU2h1dGRvd25SZXN1bHRcclxufSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL3JwYy9ycGMtYmFzZSc7XHJcbmltcG9ydCB7IFJwY09ic2VydmFibGVVcGRhdGVUaGVtZVNlcnZlciB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvcnBjL3VwZGF0ZS10aGVtZS9ycGMtb2JzZXJ2YWJsZS11cGRhdGUtdGhlbWUtc2VydmVyJztcclxuaW1wb3J0IHsgRU1QVFksIG9mLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZmlsdGVyLCBtYXAsIG1lcmdlTWFwLCBzd2l0Y2hNYXAsIHRha2UsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJy4uL2NvbnRyb2xzL2RpYWxvZy9kaWFsb2cuc2VydmljZSc7XHJcbmltcG9ydCB7IEFwcENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi9hcHAtY29udGV4dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29ubmVjdGl2aXR5RW5mb3JjZXIgfSBmcm9tICcuL2Nvbm5lY3Rpdml0eS1lbmZvcmNlcic7XHJcbmltcG9ydCB7IE5hdmlnYXRpb24sIE5hdmlnYXRpb25EYXRhLCBOYXZpZ2F0aW9uRGF0YUV4dHJhcyB9IGZyb20gJy4vbmF2aWdhdGlvbic7XHJcbmltcG9ydCB7IFVzZXJBbGl2ZVNlcnZpY2UgfSBmcm9tICcuL3VzZXItYWxpdmUuc2VydmljZSc7XHJcbi8qKlxyXG4gKiBPcHRpb25zIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIHRoZSBuYXZpZ2F0aW9uIHNlcnZpY2VcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgTmF2aWdhdG9yU2VydmljZU9wdGlvbnMge1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgYW5ndWxhciAyIGRlZmF1bHQgcm91dGUgdG8gdXNlIGR1cmluZyBpbml0aWFsaXphdGlvbiBhbmRcclxuICAgICAqIGlmIHRoZSBhcHBsaWNhdGlvbiBnZXRzIGRlYWN0aXZhdGVkIGJ1dCBzdGlsbCBydW5uaW5nXHJcbiAgICAgKiBTZWUgQGFuZ3VsYXIvcm91dGVyIC0gUm91dGVyLm5hdmlnYXRlIG1ldGhvZCBmb3IgbW9yZSBkZXRhaWxzXHJcbiAgICAgKi9cclxuICAgIGlkbGVSb3V0ZT86IGFueVtdO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgU3RhdGVDb250ZXh0PFRTdGF0ZSwgVFJlc3VsdD4ge1xyXG4gICAgc3RhdGU6IFRTdGF0ZTtcclxuICAgIHJlcXVlc3RlZFRpbWU6IG51bWJlcjtcclxuICAgIHRpbWVyOiBhbnk7XHJcbiAgICBkZWZlcnJlZDogTmF0aXZlRGVmZXJyZWQ8VFJlc3VsdD47XHJcbiAgICBlcnJvcj86IHN0cmluZztcclxufVxyXG5cclxuQEluamVjdGFibGUoKVxyXG4vKipcclxuICogT25jZSBpbml0aWFsaXplIHRoaXMgY2xhc3MgdXNlcyB0aGUgdW5kZXJseWluZyBSUEMgY2hhbm5lbFxyXG4gKiB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSByZW1vdGUgUlBDIHNlcnZpY2UuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgTmF2aWdhdGlvblNlcnZpY2Uge1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgaW5pdGlhbFdhaXRUaW1lID0gMjAwMDtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdE5hdmlnYXRpb25PcHRpb25zOiBOYXZpZ2F0aW9uRXh0cmFzID0geyBza2lwTG9jYXRpb25DaGFuZ2U6IHRydWUgfTtcclxuICAgIHByaXZhdGUgbGFzdFJvdXRlOiBOYXZpZ2F0aW9uRGF0YTtcclxuICAgIHByaXZhdGUgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgICBwcml2YXRlIG9wdGlvbnM6IE5hdmlnYXRvclNlcnZpY2VPcHRpb25zO1xyXG4gICAgcHJpdmF0ZSBpZGxlVXJsOiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIGFjdGl2ZTogYm9vbGVhbjtcclxuICAgIHByaXZhdGUgZW50ZXJpbmdNb2R1bGUgPSB0cnVlO1xyXG4gICAgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlTWFwOiB7IFtpbmRleDogc3RyaW5nXTogRGlhbG9nU2VydmljZSB9ID0ge307XHJcbiAgICBwcml2YXRlIG9wZW5Db250ZXh0OiBTdGF0ZUNvbnRleHQ8UnBjT3BlblN0YXRlLCBScGNPcGVuUmVzdWx0PiA9IHtcclxuICAgICAgICBzdGF0ZTogbnVsbCxcclxuICAgICAgICByZXF1ZXN0ZWRUaW1lOiAwLFxyXG4gICAgICAgIHRpbWVyOiBudWxsLFxyXG4gICAgICAgIGRlZmVycmVkOiBudWxsLFxyXG4gICAgICAgIGVycm9yOiBudWxsXHJcbiAgICB9O1xyXG4gICAgcHJpdmF0ZSBkZWFjdGl2YXRlQ29udGV4dDogU3RhdGVDb250ZXh0PFJwY0RlYWN0aXZhdGVTdGF0ZSwgUnBjRGVhY3RpdmF0ZVJlc3VsdD4gPSB7XHJcbiAgICAgICAgc3RhdGU6IG51bGwsXHJcbiAgICAgICAgcmVxdWVzdGVkVGltZTogMCxcclxuICAgICAgICB0aW1lcjogbnVsbCxcclxuICAgICAgICBkZWZlcnJlZDogbnVsbFxyXG4gICAgfTtcclxuICAgIHByaXZhdGUgbW9kdWxlTmFtZTogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBScGNPYnNlcnZhYmxlUGVyZm9ybWFuY2VDb25maWdTZXJ2ZXI6IFJwY09ic2VydmFibGVQZXJmb3JtYW5jZUNvbmZpZ1NlcnZlcjtcclxuICAgIHByaXZhdGUgcnBjT2JzZXJ2YWJsZVVwZGF0ZVRoZW1lU2VydmVyOiBScGNPYnNlcnZhYmxlVXBkYXRlVGhlbWVTZXJ2ZXI7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMgc2VydmljZVxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGFwcENvbnRleHRTZXJ2aWNlOiBBcHBDb250ZXh0U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHVzZXJBbGl2ZVNlcnZpY2U6IFVzZXJBbGl2ZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgICAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSkge1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5pdGlhbGl6ZSBuYXZpZ2F0aW9uIGNvbW11bmljYXRpb24gZnJvbS90byB0aGUgc2hlbGwuXHJcbiAgICAgKlxyXG4gICAgICogIFJlZ2lzdGVycyB0aGUgbWV0aG9kcyB3aXRoIHRoZSByZW1vdGUgUlBDIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0XHJcbiAgICAgKiAgU3Vic2NyaWJlcyB0byB0aGUgcm91dGVyIGV2ZW50cyBhbmQgcmVwb3J0cyB0aGUgYnJlYWRjcnVtYiBpdGVtc1xyXG4gICAgICogIGJhY2sgdG8gdGhlIHJwYyByZW1vdGVcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBiZWhhdmlvclxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaW5pdGlhbGl6ZShvcHRpb25zPzogTmF2aWdhdG9yU2VydmljZU9wdGlvbnMpOiB2b2lkIHtcclxuICAgICAgICBQZXJmb3JtYW5jZVRyYWNrZXIubmF2aWdhdGlvbkluaXRpYWxpemVkKCk7XHJcbiAgICAgICAgdGhpcy5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgPyBvcHRpb25zIDogeyBpZGxlUm91dGU6IFsnaWRsZSddIH07XHJcbiAgICAgICAgdGhpcy5pZGxlVXJsID0gYC8ke3RoaXMub3B0aW9ucy5pZGxlUm91dGVbMF19YDtcclxuXHJcbiAgICAgICAgLy8gbmF2aWdhdGUgdG8gaWRsZS5cclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZSh0aGlzLm9wdGlvbnMuaWRsZVJvdXRlLCB0aGlzLmRlZmF1bHROYXZpZ2F0aW9uT3B0aW9ucyk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHN0YXJ0VGltZXN0YW1wID0gbnVsbDtcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMucm91dGVyLmV2ZW50c1xyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIHRhcChldmVudCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvblN0YXJ0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0VGltZXN0YW1wID0gRGF0ZS5ub3coKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgUGVyZm9ybWFuY2VUcmFja2VyLm5hdmlnYXRpb25TdGFydGVkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQgJiYgc3RhcnRUaW1lc3RhbXApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgUGVyZm9ybWFuY2VQcm9maWxlLmxvZ1JvdXRlTmF2aWdhdGlvbignTmF2aWdhdGlvblNlcnZpY2UnLCBzdGFydFRpbWVzdGFtcCwgRGF0ZS5ub3coKSwgZXZlbnQudXJsLCB0aGlzLm1vZHVsZU5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydFRpbWVzdGFtcCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFBlcmZvcm1hbmNlVHJhY2tlci5uYXZpZ2F0aW9uQ29tcGxldGVkKHRoaXMuZW50ZXJpbmdNb2R1bGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgZmlsdGVyKGV2ZW50ID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCksXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoZXZlbnQgPT5cclxuICAgICAgICAgICAgICAgICAgICBOYXZpZ2F0aW9uLmJ1aWxkU2VsZWN0YWJsZVBhdGhzRm9yUm91dGUodGhpcy5hcHBDb250ZXh0U2VydmljZSwgdGhpcy5hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucGlwZShtYXAoc2VsZWN0YWJsZVBhdGhzID0+IDxhbnk+eyBldmVudCwgc2VsZWN0YWJsZVBhdGhzIH0pKSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChkYXRhOiB7IGV2ZW50OiBOYXZpZ2F0aW9uRW5kLCBzZWxlY3RhYmxlUGF0aHM6IFNlbGVjdGFibGVQYXRoW119KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAvLyBpbiB0aGUgY2FzZSBvZiBpbml0aWFsIGlkbGUgc3RhdGUsIHJlcG9ydGluZyB1cmwgd2lsbCBjYXVzZSBycGMgZXJyb3IuIGFsbCBvdGhlciBjYXNlcyBzaG91bGQgYmUgb2suXHJcbiAgICAgICAgICAgICAgICAvLyBScGNSZXBvcnQgaW5jbHVkZSBmcmFnbWVudCBhbmQgcXVlcnlQYXJhbXMgaW4gJ3BhdGgnIGFuZCAnYmVmb3JlUmVkaXJlY3RlZFBhdGgnLlxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYWN0aXZlICYmIGRhdGEuZXZlbnQudXJsICE9PSB0aGlzLmlkbGVVcmwpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcENvbnRleHRTZXJ2aWNlLmZyYW1lLnJlcG9ydCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IGRlY29kZVVSSShkYXRhLmV2ZW50LnVybEFmdGVyUmVkaXJlY3RzKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlUmVkaXJlY3RlZFBhdGg6IGRlY29kZVVSSShkYXRhLmV2ZW50LnVybCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGVQYXRoOiBkYXRhLnNlbGVjdGFibGVQYXRoc1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW50ZXJpbmdNb2R1bGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuYXBwQ29udGV4dFNlcnZpY2UucnBjLnJlZ2lzdGVyKFJwY091dGJvdW5kQ29tbWFuZHMuSW5pdCwgdGhpcy5vbkluaXQuYmluZCh0aGlzKSk7XHJcbiAgICAgICAgdGhpcy5hcHBDb250ZXh0U2VydmljZS5ycGMucmVnaXN0ZXIoUnBjT3V0Ym91bmRDb21tYW5kcy5PcGVuLCB0aGlzLm9uT3Blbi5iaW5kKHRoaXMpKTtcclxuICAgICAgICB0aGlzLmFwcENvbnRleHRTZXJ2aWNlLnJwYy5yZWdpc3RlcihScGNPdXRib3VuZENvbW1hbmRzLkRlYWN0aXZhdGUyLCB0aGlzLm9uRGVhY3RpdmF0ZTIuYmluZCh0aGlzKSk7XHJcbiAgICAgICAgdGhpcy5hcHBDb250ZXh0U2VydmljZS5ycGMucmVnaXN0ZXIoUnBjT3V0Ym91bmRDb21tYW5kcy5BY3RpdmF0ZSwgdGhpcy5vbkFjdGl2YXRlLmJpbmQodGhpcykpO1xyXG4gICAgICAgIHRoaXMuYXBwQ29udGV4dFNlcnZpY2UucnBjLnJlZ2lzdGVyKFJwY091dGJvdW5kQ29tbWFuZHMuU2h1dGRvd24sIHRoaXMub25TaHV0ZG93bi5iaW5kKHRoaXMpKTtcclxuICAgICAgICB0aGlzLmFwcENvbnRleHRTZXJ2aWNlLnJwYy5yZWdpc3RlcihScGNPdmVybGF5Q2xvc2VLZXkuY29tbWFuZCwgdGhpcy5vbk92ZXJsYXlDbG9zZS5iaW5kKHRoaXMpKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNodXRkb3duIHRoZSBuYXZpZ2F0aW9uIGNvbW11bmljYXRpb24gZnJvbS90byB0aGUgc2hlbGwuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzaHV0ZG93bigpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWFwIGRpYWxvZyBzZXJ2aWNlIGFuZCBkaWFsb2cgaWQgc28gdGhhdCBjb3JyZWN0IGRpYWxvZyBzZXJ2aWNlIGluc3RhbmNlIGNhbiBiZSBmb3VuZFxyXG4gICAgICogQHBhcmFtIGRpYWxvZ1NlcnZpY2UgZGlhbG9nIHNlcnZpY2UgdG8gYmUgcmVnaXN0ZXJlZFxyXG4gICAgICogQHBhcmFtIGRpYWxvZ0lkIGFzc29jaWF0ZWQgZGlhbG9nIGlkXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyByZWdpc3RlckRpYWxvZ1NlcnZpY2UoZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSwgZGlhbG9nSWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZU1hcFtkaWFsb2dJZF0gPSBkaWFsb2dTZXJ2aWNlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY29uZmlndXJlUGVyZm9ybWFuY2VQcm9maWxlKGVuYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBzdGFydFRpbWVzdGFtcCA9IERhdGUubm93KCk7XHJcbiAgICAgICAgaWYgKGVuYWJsZWQpIHtcclxuICAgICAgICAgICAgUGVyZm9ybWFuY2VQcm9maWxlLmN1cnJlbnQuZW5hYmxlKHRoaXMuYXBwQ29udGV4dFNlcnZpY2UucnBjKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBQZXJmb3JtYW5jZVByb2ZpbGUuY3VycmVudC5kaXNhYmxlKHRoaXMuYXBwQ29udGV4dFNlcnZpY2UucnBjKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFBlcmZvcm1hbmNlUHJvZmlsZS5sb2dSb3V0ZU5hdmlnYXRpb24oJ05hdmlnYXRpb25TZXJ2aWNlJywgc3RhcnRUaW1lc3RhbXAsIERhdGUubm93KCksICdbcnBjSW5pdF0nLCB0aGlzLm1vZHVsZU5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25Jbml0KGRhdGE6IGFueSk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgLy8gSWZyYW1lIGhhcyByZWNlaXZlZCBhbGwgaW5pdGlhbGl6YXRpb24gZGF0YSBmcm9tIHRoZSBzaGVsbC5cclxuICAgICAgICB0aGlzLmFwcENvbnRleHRTZXJ2aWNlLmdhdGV3YXkubmF2aWdhdGlvblJlYWR5U3RhdHVzID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSBNc2Z0U21lLnNlbGYoKTtcclxuICAgICAgICBpZiAoIU1zZnRTbWUuaXNOdWxsT3JVbmRlZmluZWQoc2VsZi5Jbml0LnNlc3Npb25FeHBpcmF0aW9uKSAmJiBzZWxmLkluaXQuc2Vzc2lvbkV4cGlyYXRpb24gPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlckFsaXZlU2VydmljZS5zdGFydCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgQ29ubmVjdGl2aXR5RW5mb3JjZXIucmVnaXN0ZXIodGhpcy5hcHBDb250ZXh0U2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5tb2R1bGVOYW1lID0gc2VsZi5Jbml0Lm1vZHVsZU5hbWU7XHJcbiAgICAgICAgdGhpcy5jb25maWd1cmVQZXJmb3JtYW5jZVByb2ZpbGUoc2VsZi5Jbml0LnBlcmZvcm1hbmNlUHJvZmlsZSk7XHJcbiAgICAgICAgUGVyZm9ybWFuY2VQcm9maWxlLmxvZ051bGwodGhpcy5tb2R1bGVOYW1lKTtcclxuICAgICAgICBpZiAoIXRoaXMuUnBjT2JzZXJ2YWJsZVBlcmZvcm1hbmNlQ29uZmlnU2VydmVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuUnBjT2JzZXJ2YWJsZVBlcmZvcm1hbmNlQ29uZmlnU2VydmVyID0gbmV3IFJwY09ic2VydmFibGVQZXJmb3JtYW5jZUNvbmZpZ1NlcnZlcih0aGlzLmFwcENvbnRleHRTZXJ2aWNlLnJwYyk7XHJcbiAgICAgICAgICAgIHRoaXMuUnBjT2JzZXJ2YWJsZVBlcmZvcm1hbmNlQ29uZmlnU2VydmVyLnJlZ2lzdGVyKChyZXF1ZXN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZ3VyZVBlcmZvcm1hbmNlUHJvZmlsZShyZXF1ZXN0LmVuYWJsZWQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5ycGNPYnNlcnZhYmxlVXBkYXRlVGhlbWVTZXJ2ZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5ycGNPYnNlcnZhYmxlVXBkYXRlVGhlbWVTZXJ2ZXIgPSBuZXcgUnBjT2JzZXJ2YWJsZVVwZGF0ZVRoZW1lU2VydmVyKHRoaXMuYXBwQ29udGV4dFNlcnZpY2UucnBjKTtcclxuICAgICAgICAgICAgdGhpcy5ycGNPYnNlcnZhYmxlVXBkYXRlVGhlbWVTZXJ2ZXIucmVnaXN0ZXIoKHJlcXVlc3QpID0+IHtcclxuICAgICAgICAgICAgICAgIENvcmVFbnZpcm9ubWVudC5hc3NldE1hbmFnZXIuc2V0VGhlbWUocmVxdWVzdC5uZXdUaGVtZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbCB0byBkaWFsb2cgc2VydmljZSB0byByZXF1ZXN0IGNsb3NlIGEgZGlhbG9nXHJcbiAgICAgKiBAcGFyYW0gZGF0YSBkYXRhIG9iamVjdCB0byBjbG9zZSBhIGRpYWxvZyBmcm9tIHNoZWxsXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgb25PdmVybGF5Q2xvc2UoZGF0YTogUnBjRGlhbG9nT3ZlcmxheURhdGEpOiBQcm9taXNlPFJwY0RpYWxvZ092ZXJsYXlSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCBkaWFsb2dTZXJ2aWNlID0gdGhpcy5kaWFsb2dTZXJ2aWNlTWFwW2RhdGEuZGlhbG9nSWRdO1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBmYWxzZTtcclxuICAgICAgICBpZiAoZGlhbG9nU2VydmljZSkge1xyXG4gICAgICAgICAgICByZXN1bHQgPSBkaWFsb2dTZXJ2aWNlLm92ZXJsYXlDbGlja2VkKGRhdGEuZGlhbG9nSWQpO1xyXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5kaWFsb2dTZXJ2aWNlTWFwW2RhdGEuZGlhbG9nSWRdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IG92ZXJsYXlDbG9zZWQ6IHJlc3VsdCB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlcGVhdGVkIG9wZW4gY2FsbGVkIHVudGlsIG5hdmlnYXRpb24gaXMgZXN0YWJsaXNoZWQgb3IgZmFpbGVkLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBkYXRhIHRoZSBScGNPcGVuRGF0YSBkYXRhLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIG9uT3BlbihkYXRhOiBScGNPcGVuRGF0YSk6IFByb21pc2U8UnBjT3BlblJlc3VsdD4ge1xyXG4gICAgICAgIGNvbnN0IGNvbnRleHQ6IFN0YXRlQ29udGV4dDxScGNPcGVuU3RhdGUsIFJwY09wZW5SZXN1bHQ+ID0gdGhpcy5vcGVuQ29udGV4dDtcclxuICAgICAgICBpZiAoY29udGV4dC5zdGF0ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHtcclxuICAgICAgICAgICAgICAgIHdhaXRlZFRpbWU6IERhdGUubm93KCkgLSBjb250ZXh0LnJlcXVlc3RlZFRpbWUsXHJcbiAgICAgICAgICAgICAgICBzdGF0ZTogdGhpcy5vcGVuQ29udGV4dC5zdGF0ZSxcclxuICAgICAgICAgICAgICAgIGVycm9yOiBjb250ZXh0LmVycm9yXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGlmIChjb250ZXh0LnN0YXRlICE9PSBScGNPcGVuU3RhdGUuSW5Qcm9ncmVzcykge1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC5zdGF0ZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LnJlcXVlc3RlZFRpbWUgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3VsdCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb250ZXh0LnJlcXVlc3RlZFRpbWUgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgIGNvbnRleHQuc3RhdGUgPSBScGNPcGVuU3RhdGUuSW5Qcm9ncmVzcztcclxuICAgICAgICBjb250ZXh0LmRlZmVycmVkID0gTmF0aXZlUS5kZWZlcjxScGNPcGVuUmVzdWx0PigpO1xyXG5cclxuICAgICAgICAvLyBzZXQgdGltZW91dCB0byByZXNwb25kIGJhY2sgc3RhdHVzIHRvIHNoZWxsLlxyXG4gICAgICAgIGNvbnRleHQudGltZXIgPSBzZXRUaW1lb3V0KFxyXG4gICAgICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LmRlZmVycmVkLnJlc29sdmUoe1xyXG4gICAgICAgICAgICAgICAgICAgIHdhaXRlZFRpbWU6IERhdGUubm93KCkgLSBjb250ZXh0LnJlcXVlc3RlZFRpbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdGU6IGNvbnRleHQuc3RhdGVcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC50aW1lciA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LmRlZmVycmVkID0gbnVsbDtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgTmF2aWdhdGlvblNlcnZpY2UuaW5pdGlhbFdhaXRUaW1lKTtcclxuXHJcbiAgICAgICAgdGhpcy5hcHBDb250ZXh0U2VydmljZS5zZXJ2aWNlc1JlYWR5XHJcbiAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgICAgIG1lcmdlTWFwKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIFNtZVdlYlRlbGVtZXRyeS5pbml0KHRoaXMuYXBwQ29udGV4dFNlcnZpY2UpLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgICAgICBsb2FkZWQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2dnaW5nLmxvZ0RlYnVnKCdTbWVXZWJUZWxlbWV0cnknLCBsb2FkZWQgPyAnTG9hZGVkIGJyb3dzZXIgdGVsZW1ldHJ5JyA6ICdGYWlsZWQgdG8gbG9hZCBicm93c2VyIHRlbGVtZXRyeScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBQZXJmb3JtYW5jZVRyYWNrZXIudHJ5U3RhcnRDYWxjdWxhdGluZ1RpbWVUb0ludGVyYWN0aXZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBuYXZpZ2F0aW9uID0gTmF2aWdhdGlvbi5nZXRVcmxOYXZpZ2F0aW9uRGF0YSh0aGlzLnJvdXRlciwgZGF0YS5wYXRoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJvdXRlci5uYXZpZ2F0ZShuYXZpZ2F0aW9uLmNvbW1hbmRzLCB0aGlzLmFkZERlZmF1bHROYXZpZ2F0aW9uT3B0aW9ucyhuYXZpZ2F0aW9uLm9wdGlvbnMpKTtcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIG1hcChzdWNjZXNzID0+IHtcclxuICAgICAgICAgICAgICAgIFBlcmZvcm1hbmNlUHJvZmlsZS5sb2dSb3V0ZU5hdmlnYXRpb24oXHJcbiAgICAgICAgICAgICAgICAgICAgJ05hdmlnYXRpb25TZXJ2aWNlJywgY29udGV4dC5yZXF1ZXN0ZWRUaW1lLCBEYXRlLm5vdygpLCAnW3JwY09wZW5dJywgdGhpcy5tb2R1bGVOYW1lKTtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQuc3RhdGUgPSBScGNPcGVuU3RhdGUuT3BlbmVkO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIGlmIHRpbWVyIGlzbid0IGZpcmVkIHlldCwganVzdCBjb21wbGV0ZSB3aXRoIHN1Y2Nlc3MgbmF2aWdhdGlvbi5cclxuICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LnRpbWVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGNvbnRleHQudGltZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVmZXJyZWQucmVzb2x2ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdhaXRlZFRpbWU6IERhdGUubm93KCkgLSBjb250ZXh0LnJlcXVlc3RlZFRpbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlOiBjb250ZXh0LnN0YXRlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogY29udGV4dC5lcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuc3RhdGUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVxdWVzdGVkVGltZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC50aW1lciA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZWZlcnJlZCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvciwgY2F1Z2h0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0YXRlID0gUnBjT3BlblN0YXRlLkZhaWxlZDtcclxuICAgICAgICAgICAgICAgIGxldCBtZXNzYWdlID0gJyc7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IgJiYgZXJyb3IueGhyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IE5ldC5nZXRFcnJvck1lc3NhZ2UoZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZXJyb3IgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IGVycm9yO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3Iuc3RhY2spIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IGVycm9yLnN0YWNrO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXJyb3IubWVzc2FnZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gZXJyb3IubWVzc2FnZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgY29udGV4dC5lcnJvciA9IG1lc3NhZ2U7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gaWYgdGltZXIgaXNuJ3QgZmlyZWQgeWV0LCBqdXN0IGNvbXBsZXRlIHdpdGggZXJyb3IgbmF2aWdhdGlvbi5cclxuICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LnRpbWVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGNvbnRleHQudGltZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVmZXJyZWQucmVqZWN0KGNvbnRleHQuZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuc3RhdGUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVxdWVzdGVkVGltZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC50aW1lciA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZWZlcnJlZCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZO1xyXG4gICAgICAgICAgICB9KSlcclxuICAgICAgICAuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgICAgIHJldHVybiBjb250ZXh0LmRlZmVycmVkLnByb21pc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXBlYXRlZCBjYWxsZWQgdW50aWwgR3VhcmQgaXMgY29udGludWVkIG9yIGNhbmNlbGxlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gZGF0YSB0aGUgdm9pZCBkYXRhLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIG9uRGVhY3RpdmF0ZTIoZGF0YTogdm9pZCk6IFByb21pc2U8UnBjRGVhY3RpdmF0ZVJlc3VsdD4ge1xyXG4gICAgICAgIGNvbnN0IHN0YXJ0VGltZXN0YW1wID0gRGF0ZS5ub3coKTtcclxuICAgICAgICBjb25zdCBjb250ZXh0OiBTdGF0ZUNvbnRleHQ8UnBjRGVhY3RpdmF0ZVN0YXRlLCBScGNEZWFjdGl2YXRlUmVzdWx0PiA9IHRoaXMuZGVhY3RpdmF0ZUNvbnRleHQ7XHJcbiAgICAgICAgaWYgKGNvbnRleHQuc3RhdGUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB7XHJcbiAgICAgICAgICAgICAgICB3YWl0ZWRUaW1lOiBEYXRlLm5vdygpIC0gY29udGV4dC5yZXF1ZXN0ZWRUaW1lLFxyXG4gICAgICAgICAgICAgICAgc3RhdGU6IGNvbnRleHQuc3RhdGVcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgaWYgKGNvbnRleHQuc3RhdGUgIT09IFJwY0RlYWN0aXZhdGVTdGF0ZS5JblByb2dyZXNzKSB7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0YXRlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQucmVxdWVzdGVkVGltZSA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIFBlcmZvcm1hbmNlUHJvZmlsZS5sb2dSb3V0ZU5hdmlnYXRpb24oJ05hdmlnYXRpb25TZXJ2aWNlJywgc3RhcnRUaW1lc3RhbXAsIERhdGUubm93KCksICdbcnBjRGVhY3RpdmF0ZV0nLCB0aGlzLm1vZHVsZU5hbWUpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3VsdCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBjdXJyZW50ID0gZGVjb2RlVVJJKHRoaXMucm91dGVyLnVybCk7XHJcbiAgICAgICAgaWYgKGN1cnJlbnQgPT09IHRoaXMuaWRsZVVybCkge1xyXG4gICAgICAgICAgICAvLyBpdCdzIGFscmVhZHkgaW5hY3RpdmUuXHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe1xyXG4gICAgICAgICAgICAgICAgd2FpdGVkVGltZTogMCxcclxuICAgICAgICAgICAgICAgIHN0YXRlOiBScGNEZWFjdGl2YXRlU3RhdGUuRGVhY3RpdmF0ZWRcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb250ZXh0LnJlcXVlc3RlZFRpbWUgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgIGNvbnRleHQuc3RhdGUgPSBScGNEZWFjdGl2YXRlU3RhdGUuSW5Qcm9ncmVzcztcclxuICAgICAgICBjb250ZXh0LmRlZmVycmVkID0gTmF0aXZlUS5kZWZlcjxScGNEZWFjdGl2YXRlUmVzdWx0PigpO1xyXG5cclxuICAgICAgICAvLyBzZXQgdGltZW91dCB0byByZXNwb25kIGJhY2sgc3RhdHVzIHRvIHNoZWxsLlxyXG4gICAgICAgIGNvbnRleHQudGltZXIgPSBzZXRUaW1lb3V0KFxyXG4gICAgICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LmRlZmVycmVkLnJlc29sdmUoe1xyXG4gICAgICAgICAgICAgICAgICAgIHdhaXRlZFRpbWU6IERhdGUubm93KCkgLSBjb250ZXh0LnJlcXVlc3RlZFRpbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdGU6IGNvbnRleHQuc3RhdGVcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC50aW1lciA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LmRlZmVycmVkID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBpZiBpdCBpc24ndCBpbiBwcm9ncmVzcywgcmVzZXQgdGhlIHN0YXRlLlxyXG4gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQuc3RhdGUgIT09IFJwY0RlYWN0aXZhdGVTdGF0ZS5JblByb2dyZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5zdGF0ZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXF1ZXN0ZWRUaW1lID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgTmF2aWdhdGlvblNlcnZpY2UuaW5pdGlhbFdhaXRUaW1lKTtcclxuXHJcbiAgICAgICAgLy8gdHJ5IG5hdmlnYXRlIHRvIGlkbGUuXHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUodGhpcy5vcHRpb25zLmlkbGVSb3V0ZSwgdGhpcy5kZWZhdWx0TmF2aWdhdGlvbk9wdGlvbnMpXHJcbiAgICAgICAgICAgIC50aGVuKFxyXG4gICAgICAgICAgICBzdWNjZXNzID0+IHtcclxuICAgICAgICAgICAgICAgIFBlcmZvcm1hbmNlUHJvZmlsZS5sb2dSb3V0ZU5hdmlnYXRpb24oXHJcbiAgICAgICAgICAgICAgICAgICAgJ05hdmlnYXRpb25TZXJ2aWNlJywgc3RhcnRUaW1lc3RhbXAsIERhdGUubm93KCksICdbcnBjRGVhY3RpdmF0ZV0nLCB0aGlzLm1vZHVsZU5hbWUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBuYXZpZ2F0ZSBhd2F5IHNvIGluYWN0aXZlIG1vZGUuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RSb3V0ZSA9IE5hdmlnYXRpb24uZ2V0VXJsTmF2aWdhdGlvbkRhdGEodGhpcy5yb3V0ZXIsIGN1cnJlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuc3RhdGUgPSBScGNEZWFjdGl2YXRlU3RhdGUuRGVhY3RpdmF0ZWQ7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIG5hdmlnYXRlIGNhbmNlbCBzbyBhY3RpdmUgbW9kZS5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5zdGF0ZSA9IFJwY0RlYWN0aXZhdGVTdGF0ZS5DYW5jZWxsZWQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gaWYgdGltZXIgaXNuJ3QgZmlyZWQgeWV0LCBqdXN0IGNvbXBsZXRlIHdpdGggc3VjY2VzcyBuYXZpZ2F0aW9uLlxyXG4gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQudGltZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoY29udGV4dC50aW1lcik7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZWZlcnJlZC5yZXNvbHZlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2FpdGVkVGltZTogRGF0ZS5ub3coKSAtIGNvbnRleHQucmVxdWVzdGVkVGltZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGU6IGNvbnRleHQuc3RhdGVcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnRpbWVyID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRlZmVycmVkID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnN0YXRlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcXVlc3RlZFRpbWUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAvLyBuYXZpZ2F0ZSBlcnJvciBzbyBhY3RpdmUgbW9kZS5cclxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQuc3RhdGUgPSBScGNEZWFjdGl2YXRlU3RhdGUuQ2FuY2VsbGVkO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIGlmIHRpbWVyIGlzbid0IGZpcmVkIHlldCwganVzdCBjb21wbGV0ZSB3aXRoIHN1Y2Nlc3MgbmF2aWdhdGlvbi5cclxuICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LnRpbWVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGNvbnRleHQudGltZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVmZXJyZWQucmVzb2x2ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdhaXRlZFRpbWU6IERhdGUubm93KCkgLSBjb250ZXh0LnJlcXVlc3RlZFRpbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlOiBjb250ZXh0LnN0YXRlXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC50aW1lciA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZWZlcnJlZCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5zdGF0ZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXF1ZXN0ZWRUaW1lID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGNvbnRleHQuZGVmZXJyZWQucHJvbWlzZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uQWN0aXZhdGUoZGF0YTogUnBjQWN0aXZhdGVEYXRhKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICBjb25zdCBzdGFydFRpbWVzdGFtcCA9IERhdGUubm93KCk7XHJcbiAgICAgICAgY29uc3QgbmV3Um91dGUgPSBkYXRhLnVybCB8fCBkYXRhLnVybCA9PT0gJycgP1xyXG4gICAgICAgICAgICBOYXZpZ2F0aW9uLmdldFVybE5hdmlnYXRpb25EYXRhKHRoaXMucm91dGVyLCBkYXRhLnVybClcclxuICAgICAgICAgICAgOiB0aGlzLmxhc3RSb3V0ZSB8fCB7IGNvbW1hbmRzOiBbJyddLCBvcHRpb25zOiBudWxsIH07XHJcbiAgICAgICAgdGhpcy5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZW50ZXJpbmdNb2R1bGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAvLyBNYW51YWxseSBmaXJlIHBhZ2UgdmlldyBmb3IgZXZlcnkgdGltZSB3ZSByZWFjdGl2YXRlIGEgbW9kdWxlXHJcbiAgICAgICAgU21lV2ViVGVsZW1ldHJ5LnRyYWNlUGFnZVZpZXcoe30pO1xyXG5cclxuICAgICAgICAvLyBwdWxsIGxhdGVzdCBycGMgZm9yd2FyZGVyIHNlcnZpY2VzIGRhdGEgd2hlbiByZWFjdGl2YXRlZC5cclxuICAgICAgICByZXR1cm4gdGhpcy5hcHBDb250ZXh0U2VydmljZS5yZWluaXRpYWxpemVTZXJ2aWNlcygpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgbWVyZ2VNYXAoKCkgPT4gdGhpcy5yb3V0ZXIubmF2aWdhdGUobmV3Um91dGUuY29tbWFuZHMsIHRoaXMuYWRkRGVmYXVsdE5hdmlnYXRpb25PcHRpb25zKG5ld1JvdXRlLm9wdGlvbnMpKSksXHJcbiAgICAgICAgICAgICAgICB0YXAoKCkgPT4gUGVyZm9ybWFuY2VQcm9maWxlLmxvZ1JvdXRlTmF2aWdhdGlvbihcclxuICAgICAgICAgICAgICAgICAgICAnTmF2aWdhdGlvblNlcnZpY2UnLCBzdGFydFRpbWVzdGFtcCwgRGF0ZS5ub3coKSwgJ1tycGNBY3RpdmF0ZV0nLCB0aGlzLm1vZHVsZU5hbWUpKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvblNodXRkb3duKGRhdGE6IFJwY1NodXRkb3duRGF0YSk6IFByb21pc2U8UnBjU2h1dGRvd25SZXN1bHQ+IHtcclxuICAgICAgICB0aGlzLnVzZXJBbGl2ZVNlcnZpY2Uuc3RvcCgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJvdXRlci5uYXZpZ2F0ZSh0aGlzLm9wdGlvbnMuaWRsZVJvdXRlLCB0aGlzLmRlZmF1bHROYXZpZ2F0aW9uT3B0aW9ucylcclxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IDxScGNTaHV0ZG93blJlc3VsdD57IGNhblNodXRkb3duOiByZXN1bHQgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhZGREZWZhdWx0TmF2aWdhdGlvbk9wdGlvbnMob3B0aW9uczogTmF2aWdhdGlvbkRhdGFFeHRyYXMpOiBOYXZpZ2F0aW9uRXh0cmFzIHtcclxuICAgICAgICByZXR1cm4geyAuLi4ob3B0aW9ucyB8fCB7fSksIC4uLnRoaXMuZGVmYXVsdE5hdmlnYXRpb25PcHRpb25zIH07XHJcbiAgICB9XHJcbn1cclxuIl19
377
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvc2VydmljZS9uYXZpZ2F0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBb0IsZUFBZSxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnRUFBZ0UsQ0FBQztBQUNqRyxPQUFPLEVBQWtCLE9BQU8sRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUN4RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sOERBQThELENBQUM7QUFDdkYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdFQUF3RSxDQUFDO0FBQ3pHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDBFQUEwRSxDQUFDO0FBQzlHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDBFQUEwRSxDQUFDO0FBQzlHLE9BQU8sRUFBRSxrQkFBa0IsRUFBZ0QsTUFBTSx3RUFBd0UsQ0FBQztBQUMxSixPQUFPLEVBQUUsb0NBQW9DLEVBQUUsTUFBTSxtR0FBbUcsQ0FBQztBQUV6SixPQUFPLEVBR0gsa0JBQWtCLEVBR2xCLFlBQVksRUFDWixtQkFBbUIsRUFHdEIsTUFBTSx1REFBdUQsQ0FBQztBQUMvRCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSw4RkFBOEYsQ0FBQztBQUM5SSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDL0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVB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UUFDNUQsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsb0JBQW9CLEVBQUU7YUFDL0MsSUFBSSxDQUNELFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUMzRyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsa0JBQWtCLENBQUMsa0JBQWtCLENBQzNDLG1CQUFtQixFQUFFLGNBQWMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsZUFBZSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUN0RjthQUNKLFNBQVMsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFTyxVQUFVLENBQUMsSUFBcUI7UUFDcEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDO1FBQzdCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLHdCQUF3QixDQUFDO2FBQzdFLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQW1CLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxDQUFBLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRU8sMkJBQTJCLENBQUMsT0FBNkI7UUFDN0QsT0FBTyxFQUFFLEdBQUcsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztJQUNwRSxDQUFDOztBQXhaYyxpQ0FBZSxHQUFHLElBQUksQ0FBQztxR0FEN0IsaUJBQWlCO3NHQUFqQixpQkFBaUIsV0FBakIsaUJBQWlCO3VGQUFqQixpQkFBaUI7Y0FMN0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIE5hdmlnYXRpb25FbmQsIE5hdmlnYXRpb25FeHRyYXMsIE5hdmlnYXRpb25TdGFydCwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgQ29yZUVudmlyb25tZW50IH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9kYXRhL2NvcmUtZW52aXJvbm1lbnQnO1xyXG5pbXBvcnQgeyBOYXRpdmVEZWZlcnJlZCwgTmF0aXZlUSB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvZGF0YS9uYXRpdmUtcSc7XHJcbmltcG9ydCB7IE5ldCB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvZGF0YS9uZXQnO1xyXG5pbXBvcnQgeyBMb2dnaW5nIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9kaWFnbm9zdGljcy9sb2dnaW5nJztcclxuaW1wb3J0IHsgU21lV2ViVGVsZW1ldHJ5IH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9kaWFnbm9zdGljcy9zbWUtd2ViLXRlbGVtZXRyeSc7XHJcbmltcG9ydCB7IFBlcmZvcm1hbmNlUHJvZmlsZSB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvcGVyZm9ybWFuY2UvcGVyZm9ybWFuY2UtcHJvZmlsZSc7XHJcbmltcG9ydCB7IFBlcmZvcm1hbmNlVHJhY2tlciB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvcGVyZm9ybWFuY2UvcGVyZm9ybWFuY2UtdHJhY2tlcic7XHJcbmltcG9ydCB7IFJwY092ZXJsYXlDbG9zZUtleSwgUnBjRGlhbG9nT3ZlcmxheURhdGEsIFJwY0RpYWxvZ092ZXJsYXlSZXN1bHQgfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL3JwYy9vdmVybGF5L3JwYy1vdmVybGF5LW1vZGVsJztcclxuaW1wb3J0IHsgUnBjT2JzZXJ2YWJsZVBlcmZvcm1hbmNlQ29uZmlnU2VydmVyIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9ycGMvcGVyZm9ybWFuY2UvcnBjLW9ic2VydmFibGUtcGVyZm9ybWFuY2UtY29uZmlnLXNlcnZlcic7XHJcbmltcG9ydCB7IFNlbGVjdGFibGVQYXRoIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9ycGMvcmVwb3J0L3JwYy1yZXBvcnQtbW9kZWwnO1xyXG5pbXBvcnQge1xyXG4gICAgUnBjQWN0aXZhdGVEYXRhLFxyXG4gICAgUnBjRGVhY3RpdmF0ZVJlc3VsdCxcclxuICAgIFJwY0RlYWN0aXZhdGVTdGF0ZSxcclxuICAgIFJwY09wZW5EYXRhLFxyXG4gICAgUnBjT3BlblJlc3VsdCxcclxuICAgIFJwY09wZW5TdGF0ZSxcclxuICAgIFJwY091dGJvdW5kQ29tbWFuZHMsXHJcbiAgICBScGNTaHV0ZG93bkRhdGEsXHJcbiAgICBScGNTaHV0ZG93blJlc3VsdFxyXG59IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvcnBjL3JwYy1iYXNlJztcclxuaW1wb3J0IHsgUnBjT2JzZXJ2YWJsZVVwZGF0ZVRoZW1lU2VydmVyIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9ycGMvdXBkYXRlLXRoZW1lL3JwYy1vYnNlcnZhYmxlLXVwZGF0ZS10aGVtZS1zZXJ2ZXInO1xyXG5pbXBvcnQgeyBFTVBUWSwgb2YsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yLCBmaWx0ZXIsIG1hcCwgbWVyZ2VNYXAsIHN3aXRjaE1hcCwgdGFrZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi4vY29udHJvbHMvZGlhbG9nL2RpYWxvZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXBwQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuL2FwcC1jb250ZXh0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb25uZWN0aXZpdHlFbmZvcmNlciB9IGZyb20gJy4vY29ubmVjdGl2aXR5LWVuZm9yY2VyJztcclxuaW1wb3J0IHsgTmF2aWdhdGlvbiwgTmF2aWdhdGlvbkRhdGEsIE5hdmlnYXRpb25EYXRhRXh0cmFzIH0gZnJvbSAnLi9uYXZpZ2F0aW9uJztcclxuaW1wb3J0IHsgVXNlckFsaXZlU2VydmljZSB9IGZyb20gJy4vdXNlci1hbGl2ZS5zZXJ2aWNlJztcclxuLyoqXHJcbiAqIE9wdGlvbnMgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgdGhlIG5hdmlnYXRpb24gc2VydmljZVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBOYXZpZ2F0b3JTZXJ2aWNlT3B0aW9ucyB7XHJcbiAgICAvKipcclxuICAgICAqIFRoZSBhbmd1bGFyIDIgZGVmYXVsdCByb3V0ZSB0byB1c2UgZHVyaW5nIGluaXRpYWxpemF0aW9uIGFuZFxyXG4gICAgICogaWYgdGhlIGFwcGxpY2F0aW9uIGdldHMgZGVhY3RpdmF0ZWQgYnV0IHN0aWxsIHJ1bm5pbmdcclxuICAgICAqIFNlZSBAYW5ndWxhci9yb3V0ZXIgLSBSb3V0ZXIubmF2aWdhdGUgbWV0aG9kIGZvciBtb3JlIGRldGFpbHNcclxuICAgICAqL1xyXG4gICAgaWRsZVJvdXRlPzogYW55W107XHJcbn1cclxuXHJcbmludGVyZmFjZSBTdGF0ZUNvbnRleHQ8VFN0YXRlLCBUUmVzdWx0PiB7XHJcbiAgICBzdGF0ZTogVFN0YXRlO1xyXG4gICAgcmVxdWVzdGVkVGltZTogbnVtYmVyO1xyXG4gICAgdGltZXI6IGFueTtcclxuICAgIGRlZmVycmVkOiBOYXRpdmVEZWZlcnJlZDxUUmVzdWx0PjtcclxuICAgIGVycm9yPzogc3RyaW5nO1xyXG59XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbi8qKlxyXG4gKiBPbmNlIGluaXRpYWxpemUgdGhpcyBjbGFzcyB1c2VzIHRoZSB1bmRlcmx5aW5nIFJQQyBjaGFubmVsXHJcbiAqIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIHJlbW90ZSBSUEMgc2VydmljZS5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBOYXZpZ2F0aW9uU2VydmljZSB7XHJcbiAgICBwcml2YXRlIHN0YXRpYyBpbml0aWFsV2FpdFRpbWUgPSAyMDAwO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0TmF2aWdhdGlvbk9wdGlvbnM6IE5hdmlnYXRpb25FeHRyYXMgPSB7IHNraXBMb2NhdGlvbkNoYW5nZTogdHJ1ZSB9O1xyXG4gICAgcHJpdmF0ZSBsYXN0Um91dGU6IE5hdmlnYXRpb25EYXRhO1xyXG4gICAgcHJpdmF0ZSBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuICAgIHByaXZhdGUgb3B0aW9uczogTmF2aWdhdG9yU2VydmljZU9wdGlvbnM7XHJcbiAgICBwcml2YXRlIGlkbGVVcmw6IHN0cmluZztcclxuICAgIHByaXZhdGUgYWN0aXZlOiBib29sZWFuO1xyXG4gICAgcHJpdmF0ZSBlbnRlcmluZ01vZHVsZSA9IHRydWU7XHJcbiAgICBwcml2YXRlIGRpYWxvZ1NlcnZpY2VNYXA6IHsgW2luZGV4OiBzdHJpbmddOiBEaWFsb2dTZXJ2aWNlIH0gPSB7fTtcclxuICAgIHByaXZhdGUgb3BlbkNvbnRleHQ6IFN0YXRlQ29udGV4dDxScGNPcGVuU3RhdGUsIFJwY09wZW5SZXN1bHQ+ID0ge1xyXG4gICAgICAgIHN0YXRlOiBudWxsLFxyXG4gICAgICAgIHJlcXVlc3RlZFRpbWU6IDAsXHJcbiAgICAgICAgdGltZXI6IG51bGwsXHJcbiAgICAgICAgZGVmZXJyZWQ6IG51bGwsXHJcbiAgICAgICAgZXJyb3I6IG51bGxcclxuICAgIH07XHJcbiAgICBwcml2YXRlIGRlYWN0aXZhdGVDb250ZXh0OiBTdGF0ZUNvbnRleHQ8UnBjRGVhY3RpdmF0ZVN0YXRlLCBScGNEZWFjdGl2YXRlUmVzdWx0PiA9IHtcclxuICAgICAgICBzdGF0ZTogbnVsbCxcclxuICAgICAgICByZXF1ZXN0ZWRUaW1lOiAwLFxyXG4gICAgICAgIHRpbWVyOiBudWxsLFxyXG4gICAgICAgIGRlZmVycmVkOiBudWxsXHJcbiAgICB9O1xyXG4gICAgcHJpdmF0ZSBtb2R1bGVOYW1lOiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIFJwY09ic2VydmFibGVQZXJmb3JtYW5jZUNvbmZpZ1NlcnZlcjogUnBjT2JzZXJ2YWJsZVBlcmZvcm1hbmNlQ29uZmlnU2VydmVyO1xyXG4gICAgcHJpdmF0ZSBycGNPYnNlcnZhYmxlVXBkYXRlVGhlbWVTZXJ2ZXI6IFJwY09ic2VydmFibGVVcGRhdGVUaGVtZVNlcnZlcjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcyBzZXJ2aWNlXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgYXBwQ29udGV4dFNlcnZpY2U6IEFwcENvbnRleHRTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgdXNlckFsaXZlU2VydmljZTogVXNlckFsaXZlU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlKSB7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbml0aWFsaXplIG5hdmlnYXRpb24gY29tbXVuaWNhdGlvbiBmcm9tL3RvIHRoZSBzaGVsbC5cclxuICAgICAqXHJcbiAgICAgKiAgUmVnaXN0ZXJzIHRoZSBtZXRob2RzIHdpdGggdGhlIHJlbW90ZSBSUEMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3RcclxuICAgICAqICBTdWJzY3JpYmVzIHRvIHRoZSByb3V0ZXIgZXZlbnRzIGFuZCByZXBvcnRzIHRoZSBicmVhZGNydW1iIGl0ZW1zXHJcbiAgICAgKiAgYmFjayB0byB0aGUgcnBjIHJlbW90ZVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGJlaGF2aW9yXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpbml0aWFsaXplKG9wdGlvbnM/OiBOYXZpZ2F0b3JTZXJ2aWNlT3B0aW9ucyk6IHZvaWQge1xyXG4gICAgICAgIFBlcmZvcm1hbmNlVHJhY2tlci5uYXZpZ2F0aW9uSW5pdGlhbGl6ZWQoKTtcclxuICAgICAgICB0aGlzLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyA/IG9wdGlvbnMgOiB7IGlkbGVSb3V0ZTogWydpZGxlJ10gfTtcclxuICAgICAgICB0aGlzLmlkbGVVcmwgPSBgLyR7dGhpcy5vcHRpb25zLmlkbGVSb3V0ZVswXX1gO1xyXG5cclxuICAgICAgICAvLyBuYXZpZ2F0ZSB0byBpZGxlLlxyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKHRoaXMub3B0aW9ucy5pZGxlUm91dGUsIHRoaXMuZGVmYXVsdE5hdmlnYXRpb25PcHRpb25zKTtcclxuXHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgICAgIGxldCBzdGFydFRpbWVzdGFtcCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLnJvdXRlci5ldmVudHNcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICB0YXAoZXZlbnQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25TdGFydCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydFRpbWVzdGFtcCA9IERhdGUubm93KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFBlcmZvcm1hbmNlVHJhY2tlci5uYXZpZ2F0aW9uU3RhcnRlZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kICYmIHN0YXJ0VGltZXN0YW1wKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFBlcmZvcm1hbmNlUHJvZmlsZS5sb2dSb3V0ZU5hdmlnYXRpb24oJ05hdmlnYXRpb25TZXJ2aWNlJywgc3RhcnRUaW1lc3RhbXAsIERhdGUubm93KCksIGV2ZW50LnVybCwgdGhpcy5tb2R1bGVOYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRUaW1lc3RhbXAgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBQZXJmb3JtYW5jZVRyYWNrZXIubmF2aWdhdGlvbkNvbXBsZXRlZCh0aGlzLmVudGVyaW5nTW9kdWxlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgIGZpbHRlcihldmVudCA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpLFxyXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKGV2ZW50ID0+XHJcbiAgICAgICAgICAgICAgICAgICAgTmF2aWdhdGlvbi5idWlsZFNlbGVjdGFibGVQYXRoc0ZvclJvdXRlKHRoaXMuYXBwQ29udGV4dFNlcnZpY2UsIHRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGUobWFwKHNlbGVjdGFibGVQYXRocyA9PiA8YW55PnsgZXZlbnQsIHNlbGVjdGFibGVQYXRocyB9KSkpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZGF0YTogeyBldmVudDogTmF2aWdhdGlvbkVuZCwgc2VsZWN0YWJsZVBhdGhzOiBTZWxlY3RhYmxlUGF0aFtdfSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gaW4gdGhlIGNhc2Ugb2YgaW5pdGlhbCBpZGxlIHN0YXRlLCByZXBvcnRpbmcgdXJsIHdpbGwgY2F1c2UgcnBjIGVycm9yLiBhbGwgb3RoZXIgY2FzZXMgc2hvdWxkIGJlIG9rLlxyXG4gICAgICAgICAgICAgICAgLy8gUnBjUmVwb3J0IGluY2x1ZGUgZnJhZ21lbnQgYW5kIHF1ZXJ5UGFyYW1zIGluICdwYXRoJyBhbmQgJ2JlZm9yZVJlZGlyZWN0ZWRQYXRoJy5cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZSAmJiBkYXRhLmV2ZW50LnVybCAhPT0gdGhpcy5pZGxlVXJsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBDb250ZXh0U2VydmljZS5mcmFtZS5yZXBvcnQoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBkZWNvZGVVUkkoZGF0YS5ldmVudC51cmxBZnRlclJlZGlyZWN0cyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZVJlZGlyZWN0ZWRQYXRoOiBkZWNvZGVVUkkoZGF0YS5ldmVudC51cmwpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlUGF0aDogZGF0YS5zZWxlY3RhYmxlUGF0aHNcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVudGVyaW5nTW9kdWxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmFwcENvbnRleHRTZXJ2aWNlLnJwYy5yZWdpc3RlcihScGNPdXRib3VuZENvbW1hbmRzLkluaXQsIHRoaXMub25Jbml0LmJpbmQodGhpcykpO1xyXG4gICAgICAgIHRoaXMuYXBwQ29udGV4dFNlcnZpY2UucnBjLnJlZ2lzdGVyKFJwY091dGJvdW5kQ29tbWFuZHMuT3BlbiwgdGhpcy5vbk9wZW4uYmluZCh0aGlzKSk7XHJcbiAgICAgICAgdGhpcy5hcHBDb250ZXh0U2VydmljZS5ycGMucmVnaXN0ZXIoUnBjT3V0Ym91bmRDb21tYW5kcy5EZWFjdGl2YXRlMiwgdGhpcy5vbkRlYWN0aXZhdGUyLmJpbmQodGhpcykpO1xyXG4gICAgICAgIHRoaXMuYXBwQ29udGV4dFNlcnZpY2UucnBjLnJlZ2lzdGVyKFJwY091dGJvdW5kQ29tbWFuZHMuQWN0aXZhdGUsIHRoaXMub25BY3RpdmF0ZS5iaW5kKHRoaXMpKTtcclxuICAgICAgICB0aGlzLmFwcENvbnRleHRTZXJ2aWNlLnJwYy5yZWdpc3RlcihScGNPdXRib3VuZENvbW1hbmRzLlNodXRkb3duLCB0aGlzLm9uU2h1dGRvd24uYmluZCh0aGlzKSk7XHJcbiAgICAgICAgdGhpcy5hcHBDb250ZXh0U2VydmljZS5ycGMucmVnaXN0ZXIoUnBjT3ZlcmxheUNsb3NlS2V5LmNvbW1hbmQsIHRoaXMub25PdmVybGF5Q2xvc2UuYmluZCh0aGlzKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTaHV0ZG93biB0aGUgbmF2aWdhdGlvbiBjb21tdW5pY2F0aW9uIGZyb20vdG8gdGhlIHNoZWxsLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2h1dGRvd24oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1hcCBkaWFsb2cgc2VydmljZSBhbmQgZGlhbG9nIGlkIHNvIHRoYXQgY29ycmVjdCBkaWFsb2cgc2VydmljZSBpbnN0YW5jZSBjYW4gYmUgZm91bmRcclxuICAgICAqIEBwYXJhbSBkaWFsb2dTZXJ2aWNlIGRpYWxvZyBzZXJ2aWNlIHRvIGJlIHJlZ2lzdGVyZWRcclxuICAgICAqIEBwYXJhbSBkaWFsb2dJZCBhc3NvY2lhdGVkIGRpYWxvZyBpZFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgcmVnaXN0ZXJEaWFsb2dTZXJ2aWNlKGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsIGRpYWxvZ0lkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2VNYXBbZGlhbG9nSWRdID0gZGlhbG9nU2VydmljZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNvbmZpZ3VyZVBlcmZvcm1hbmNlUHJvZmlsZShlbmFibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3Qgc3RhcnRUaW1lc3RhbXAgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgIGlmIChlbmFibGVkKSB7XHJcbiAgICAgICAgICAgIFBlcmZvcm1hbmNlUHJvZmlsZS5jdXJyZW50LmVuYWJsZSh0aGlzLmFwcENvbnRleHRTZXJ2aWNlLnJwYyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgUGVyZm9ybWFuY2VQcm9maWxlLmN1cnJlbnQuZGlzYWJsZSh0aGlzLmFwcENvbnRleHRTZXJ2aWNlLnJwYyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBQZXJmb3JtYW5jZVByb2ZpbGUubG9nUm91dGVOYXZpZ2F0aW9uKCdOYXZpZ2F0aW9uU2VydmljZScsIHN0YXJ0VGltZXN0YW1wLCBEYXRlLm5vdygpLCAnW3JwY0luaXRdJywgdGhpcy5tb2R1bGVOYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uSW5pdChkYXRhOiBhbnkpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIC8vIElmcmFtZSBoYXMgcmVjZWl2ZWQgYWxsIGluaXRpYWxpemF0aW9uIGRhdGEgZnJvbSB0aGUgc2hlbGwuXHJcbiAgICAgICAgdGhpcy5hcHBDb250ZXh0U2VydmljZS5nYXRld2F5Lm5hdmlnYXRpb25SZWFkeVN0YXR1cyA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICBjb25zdCBzZWxmID0gTXNmdFNtZS5zZWxmKCk7XHJcbiAgICAgICAgaWYgKCFNc2Z0U21lLmlzTnVsbE9yVW5kZWZpbmVkKHNlbGYuSW5pdC5zZXNzaW9uRXhwaXJhdGlvbikgJiYgc2VsZi5Jbml0LnNlc3Npb25FeHBpcmF0aW9uID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnVzZXJBbGl2ZVNlcnZpY2Uuc3RhcnQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIENvbm5lY3Rpdml0eUVuZm9yY2VyLnJlZ2lzdGVyKHRoaXMuYXBwQ29udGV4dFNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMubW9kdWxlTmFtZSA9IHNlbGYuSW5pdC5tb2R1bGVOYW1lO1xyXG4gICAgICAgIHRoaXMuY29uZmlndXJlUGVyZm9ybWFuY2VQcm9maWxlKHNlbGYuSW5pdC5wZXJmb3JtYW5jZVByb2ZpbGUpO1xyXG4gICAgICAgIFBlcmZvcm1hbmNlUHJvZmlsZS5sb2dOdWxsKHRoaXMubW9kdWxlTmFtZSk7XHJcbiAgICAgICAgaWYgKCF0aGlzLlJwY09ic2VydmFibGVQZXJmb3JtYW5jZUNvbmZpZ1NlcnZlcikge1xyXG4gICAgICAgICAgICB0aGlzLlJwY09ic2VydmFibGVQZXJmb3JtYW5jZUNvbmZpZ1NlcnZlciA9IG5ldyBScGNPYnNlcnZhYmxlUGVyZm9ybWFuY2VDb25maWdTZXJ2ZXIodGhpcy5hcHBDb250ZXh0U2VydmljZS5ycGMpO1xyXG4gICAgICAgICAgICB0aGlzLlJwY09ic2VydmFibGVQZXJmb3JtYW5jZUNvbmZpZ1NlcnZlci5yZWdpc3RlcigocmVxdWVzdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWd1cmVQZXJmb3JtYW5jZVByb2ZpbGUocmVxdWVzdC5lbmFibGVkKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvZihudWxsKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMucnBjT2JzZXJ2YWJsZVVwZGF0ZVRoZW1lU2VydmVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMucnBjT2JzZXJ2YWJsZVVwZGF0ZVRoZW1lU2VydmVyID0gbmV3IFJwY09ic2VydmFibGVVcGRhdGVUaGVtZVNlcnZlcih0aGlzLmFwcENvbnRleHRTZXJ2aWNlLnJwYyk7XHJcbiAgICAgICAgICAgIHRoaXMucnBjT2JzZXJ2YWJsZVVwZGF0ZVRoZW1lU2VydmVyLnJlZ2lzdGVyKChyZXF1ZXN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBDb3JlRW52aXJvbm1lbnQuYXNzZXRNYW5hZ2VyLnNldFRoZW1lKHJlcXVlc3QubmV3VGhlbWUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGwgdG8gZGlhbG9nIHNlcnZpY2UgdG8gcmVxdWVzdCBjbG9zZSBhIGRpYWxvZ1xyXG4gICAgICogQHBhcmFtIGRhdGEgZGF0YSBvYmplY3QgdG8gY2xvc2UgYSBkaWFsb2cgZnJvbSBzaGVsbFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIG9uT3ZlcmxheUNsb3NlKGRhdGE6IFJwY0RpYWxvZ092ZXJsYXlEYXRhKTogUHJvbWlzZTxScGNEaWFsb2dPdmVybGF5UmVzdWx0PiB7XHJcbiAgICAgICAgY29uc3QgZGlhbG9nU2VydmljZSA9IHRoaXMuZGlhbG9nU2VydmljZU1hcFtkYXRhLmRpYWxvZ0lkXTtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKGRpYWxvZ1NlcnZpY2UpIHtcclxuICAgICAgICAgICAgcmVzdWx0ID0gZGlhbG9nU2VydmljZS5vdmVybGF5Q2xpY2tlZChkYXRhLmRpYWxvZ0lkKTtcclxuICAgICAgICAgICAgZGVsZXRlIHRoaXMuZGlhbG9nU2VydmljZU1hcFtkYXRhLmRpYWxvZ0lkXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyBvdmVybGF5Q2xvc2VkOiByZXN1bHQgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXBlYXRlZCBvcGVuIGNhbGxlZCB1bnRpbCBuYXZpZ2F0aW9uIGlzIGVzdGFibGlzaGVkIG9yIGZhaWxlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gZGF0YSB0aGUgUnBjT3BlbkRhdGEgZGF0YS5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBvbk9wZW4oZGF0YTogUnBjT3BlbkRhdGEpOiBQcm9taXNlPFJwY09wZW5SZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCBjb250ZXh0OiBTdGF0ZUNvbnRleHQ8UnBjT3BlblN0YXRlLCBScGNPcGVuUmVzdWx0PiA9IHRoaXMub3BlbkNvbnRleHQ7XHJcbiAgICAgICAgaWYgKGNvbnRleHQuc3RhdGUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB7XHJcbiAgICAgICAgICAgICAgICB3YWl0ZWRUaW1lOiBEYXRlLm5vdygpIC0gY29udGV4dC5yZXF1ZXN0ZWRUaW1lLFxyXG4gICAgICAgICAgICAgICAgc3RhdGU6IHRoaXMub3BlbkNvbnRleHQuc3RhdGUsXHJcbiAgICAgICAgICAgICAgICBlcnJvcjogY29udGV4dC5lcnJvclxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBpZiAoY29udGV4dC5zdGF0ZSAhPT0gUnBjT3BlblN0YXRlLkluUHJvZ3Jlc3MpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQuc3RhdGUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC5yZXF1ZXN0ZWRUaW1lID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXN1bHQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29udGV4dC5yZXF1ZXN0ZWRUaW1lID0gRGF0ZS5ub3coKTtcclxuICAgICAgICBjb250ZXh0LnN0YXRlID0gUnBjT3BlblN0YXRlLkluUHJvZ3Jlc3M7XHJcbiAgICAgICAgY29udGV4dC5kZWZlcnJlZCA9IE5hdGl2ZVEuZGVmZXI8UnBjT3BlblJlc3VsdD4oKTtcclxuXHJcbiAgICAgICAgLy8gc2V0IHRpbWVvdXQgdG8gcmVzcG9uZCBiYWNrIHN0YXR1cyB0byBzaGVsbC5cclxuICAgICAgICBjb250ZXh0LnRpbWVyID0gc2V0VGltZW91dChcclxuICAgICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC5kZWZlcnJlZC5yZXNvbHZlKHtcclxuICAgICAgICAgICAgICAgICAgICB3YWl0ZWRUaW1lOiBEYXRlLm5vdygpIC0gY29udGV4dC5yZXF1ZXN0ZWRUaW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlOiBjb250ZXh0LnN0YXRlXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQudGltZXIgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC5kZWZlcnJlZCA9IG51bGw7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIE5hdmlnYXRpb25TZXJ2aWNlLmluaXRpYWxXYWl0VGltZSk7XHJcblxyXG4gICAgICAgIHRoaXMuYXBwQ29udGV4dFNlcnZpY2Uuc2VydmljZXNSZWFkeVxyXG4gICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgICAgICBtZXJnZU1hcCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBTbWVXZWJUZWxlbWV0cnkuaW5pdCh0aGlzLmFwcENvbnRleHRTZXJ2aWNlKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICAgICAgbG9hZGVkID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nZ2luZy5sb2dEZWJ1ZygnU21lV2ViVGVsZW1ldHJ5JywgbG9hZGVkID8gJ0xvYWRlZCBicm93c2VyIHRlbGVtZXRyeScgOiAnRmFpbGVkIHRvIGxvYWQgYnJvd3NlciB0ZWxlbWV0cnknKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgUGVyZm9ybWFuY2VUcmFja2VyLnRyeVN0YXJ0Q2FsY3VsYXRpbmdUaW1lVG9JbnRlcmFjdGl2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgbmF2aWdhdGlvbiA9IE5hdmlnYXRpb24uZ2V0VXJsTmF2aWdhdGlvbkRhdGEodGhpcy5yb3V0ZXIsIGRhdGEucGF0aCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yb3V0ZXIubmF2aWdhdGUobmF2aWdhdGlvbi5jb21tYW5kcywgdGhpcy5hZGREZWZhdWx0TmF2aWdhdGlvbk9wdGlvbnMobmF2aWdhdGlvbi5vcHRpb25zKSk7XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBtYXAoc3VjY2VzcyA9PiB7XHJcbiAgICAgICAgICAgICAgICBQZXJmb3JtYW5jZVByb2ZpbGUubG9nUm91dGVOYXZpZ2F0aW9uKFxyXG4gICAgICAgICAgICAgICAgICAgICdOYXZpZ2F0aW9uU2VydmljZScsIGNvbnRleHQucmVxdWVzdGVkVGltZSwgRGF0ZS5ub3coKSwgJ1tycGNPcGVuXScsIHRoaXMubW9kdWxlTmFtZSk7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0YXRlID0gUnBjT3BlblN0YXRlLk9wZW5lZDtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBpZiB0aW1lciBpc24ndCBmaXJlZCB5ZXQsIGp1c3QgY29tcGxldGUgd2l0aCBzdWNjZXNzIG5hdmlnYXRpb24uXHJcbiAgICAgICAgICAgICAgICBpZiAoY29udGV4dC50aW1lcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChjb250ZXh0LnRpbWVyKTtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRlZmVycmVkLnJlc29sdmUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3YWl0ZWRUaW1lOiBEYXRlLm5vdygpIC0gY29udGV4dC5yZXF1ZXN0ZWRUaW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZTogY29udGV4dC5zdGF0ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGNvbnRleHQuZXJyb3JcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnN0YXRlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcXVlc3RlZFRpbWUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQudGltZXIgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVmZXJyZWQgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IsIGNhdWdodCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC5zdGF0ZSA9IFJwY09wZW5TdGF0ZS5GYWlsZWQ7XHJcbiAgICAgICAgICAgICAgICBsZXQgbWVzc2FnZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVycm9yICYmIGVycm9yLnhocikge1xyXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBOZXQuZ2V0RXJyb3JNZXNzYWdlKGVycm9yKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGVycm9yID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBlcnJvcjtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yLnN0YWNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBlcnJvci5zdGFjaztcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVycm9yLm1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IGVycm9yLm1lc3NhZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbnRleHQuZXJyb3IgPSBtZXNzYWdlO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIGlmIHRpbWVyIGlzbid0IGZpcmVkIHlldCwganVzdCBjb21wbGV0ZSB3aXRoIGVycm9yIG5hdmlnYXRpb24uXHJcbiAgICAgICAgICAgICAgICBpZiAoY29udGV4dC50aW1lcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChjb250ZXh0LnRpbWVyKTtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRlZmVycmVkLnJlamVjdChjb250ZXh0LmVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnN0YXRlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcXVlc3RlZFRpbWUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQudGltZXIgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVmZXJyZWQgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiBFTVBUWTtcclxuICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICAgICByZXR1cm4gY29udGV4dC5kZWZlcnJlZC5wcm9taXNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVwZWF0ZWQgY2FsbGVkIHVudGlsIEd1YXJkIGlzIGNvbnRpbnVlZCBvciBjYW5jZWxsZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGRhdGEgdGhlIHZvaWQgZGF0YS5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBvbkRlYWN0aXZhdGUyKGRhdGE6IHZvaWQpOiBQcm9taXNlPFJwY0RlYWN0aXZhdGVSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCBzdGFydFRpbWVzdGFtcCA9IERhdGUubm93KCk7XHJcbiAgICAgICAgY29uc3QgY29udGV4dDogU3RhdGVDb250ZXh0PFJwY0RlYWN0aXZhdGVTdGF0ZSwgUnBjRGVhY3RpdmF0ZVJlc3VsdD4gPSB0aGlzLmRlYWN0aXZhdGVDb250ZXh0O1xyXG4gICAgICAgIGlmIChjb250ZXh0LnN0YXRlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0ge1xyXG4gICAgICAgICAgICAgICAgd2FpdGVkVGltZTogRGF0ZS5ub3coKSAtIGNvbnRleHQucmVxdWVzdGVkVGltZSxcclxuICAgICAgICAgICAgICAgIHN0YXRlOiBjb250ZXh0LnN0YXRlXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGlmIChjb250ZXh0LnN0YXRlICE9PSBScGNEZWFjdGl2YXRlU3RhdGUuSW5Qcm9ncmVzcykge1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC5zdGF0ZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LnJlcXVlc3RlZFRpbWUgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBQZXJmb3JtYW5jZVByb2ZpbGUubG9nUm91dGVOYXZpZ2F0aW9uKCdOYXZpZ2F0aW9uU2VydmljZScsIHN0YXJ0VGltZXN0YW1wLCBEYXRlLm5vdygpLCAnW3JwY0RlYWN0aXZhdGVdJywgdGhpcy5tb2R1bGVOYW1lKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXN1bHQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgY3VycmVudCA9IGRlY29kZVVSSSh0aGlzLnJvdXRlci51cmwpO1xyXG4gICAgICAgIGlmIChjdXJyZW50ID09PSB0aGlzLmlkbGVVcmwpIHtcclxuICAgICAgICAgICAgLy8gaXQncyBhbHJlYWR5IGluYWN0aXZlLlxyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcclxuICAgICAgICAgICAgICAgIHdhaXRlZFRpbWU6IDAsXHJcbiAgICAgICAgICAgICAgICBzdGF0ZTogUnBjRGVhY3RpdmF0ZVN0YXRlLkRlYWN0aXZhdGVkXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29udGV4dC5yZXF1ZXN0ZWRUaW1lID0gRGF0ZS5ub3coKTtcclxuICAgICAgICBjb250ZXh0LnN0YXRlID0gUnBjRGVhY3RpdmF0ZVN0YXRlLkluUHJvZ3Jlc3M7XHJcbiAgICAgICAgY29udGV4dC5kZWZlcnJlZCA9IE5hdGl2ZVEuZGVmZXI8UnBjRGVhY3RpdmF0ZVJlc3VsdD4oKTtcclxuXHJcbiAgICAgICAgLy8gc2V0IHRpbWVvdXQgdG8gcmVzcG9uZCBiYWNrIHN0YXR1cyB0byBzaGVsbC5cclxuICAgICAgICBjb250ZXh0LnRpbWVyID0gc2V0VGltZW91dChcclxuICAgICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC5kZWZlcnJlZC5yZXNvbHZlKHtcclxuICAgICAgICAgICAgICAgICAgICB3YWl0ZWRUaW1lOiBEYXRlLm5vdygpIC0gY29udGV4dC5yZXF1ZXN0ZWRUaW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlOiBjb250ZXh0LnN0YXRlXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQudGltZXIgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC5kZWZlcnJlZCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gaWYgaXQgaXNuJ3QgaW4gcHJvZ3Jlc3MsIHJlc2V0IHRoZSBzdGF0ZS5cclxuICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LnN0YXRlICE9PSBScGNEZWFjdGl2YXRlU3RhdGUuSW5Qcm9ncmVzcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuc3RhdGUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVxdWVzdGVkVGltZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIE5hdmlnYXRpb25TZXJ2aWNlLmluaXRpYWxXYWl0VGltZSk7XHJcblxyXG4gICAgICAgIC8vIHRyeSBuYXZpZ2F0ZSB0byBpZGxlLlxyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKHRoaXMub3B0aW9ucy5pZGxlUm91dGUsIHRoaXMuZGVmYXVsdE5hdmlnYXRpb25PcHRpb25zKVxyXG4gICAgICAgICAgICAudGhlbihcclxuICAgICAgICAgICAgc3VjY2VzcyA9PiB7XHJcbiAgICAgICAgICAgICAgICBQZXJmb3JtYW5jZVByb2ZpbGUubG9nUm91dGVOYXZpZ2F0aW9uKFxyXG4gICAgICAgICAgICAgICAgICAgICdOYXZpZ2F0aW9uU2VydmljZScsIHN0YXJ0VGltZXN0YW1wLCBEYXRlLm5vdygpLCAnW3JwY0RlYWN0aXZhdGVdJywgdGhpcy5tb2R1bGVOYW1lKTtcclxuICAgICAgICAgICAgICAgIGlmIChzdWNjZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gbmF2aWdhdGUgYXdheSBzbyBpbmFjdGl2ZSBtb2RlLlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXN0Um91dGUgPSBOYXZpZ2F0aW9uLmdldFVybE5hdmlnYXRpb25EYXRhKHRoaXMucm91dGVyLCBjdXJyZW50KTtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnN0YXRlID0gUnBjRGVhY3RpdmF0ZVN0YXRlLkRlYWN0aXZhdGVkO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBuYXZpZ2F0ZSBjYW5jZWwgc28gYWN0aXZlIG1vZGUuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuc3RhdGUgPSBScGNEZWFjdGl2YXRlU3RhdGUuQ2FuY2VsbGVkO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIGlmIHRpbWVyIGlzbid0IGZpcmVkIHlldCwganVzdCBjb21wbGV0ZSB3aXRoIHN1Y2Nlc3MgbmF2aWdhdGlvbi5cclxuICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LnRpbWVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGNvbnRleHQudGltZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVmZXJyZWQucmVzb2x2ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdhaXRlZFRpbWU6IERhdGUubm93KCkgLSBjb250ZXh0LnJlcXVlc3RlZFRpbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlOiBjb250ZXh0LnN0YXRlXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC50aW1lciA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZWZlcnJlZCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5zdGF0ZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXF1ZXN0ZWRUaW1lID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gbmF2aWdhdGUgZXJyb3Igc28gYWN0aXZlIG1vZGUuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0YXRlID0gUnBjRGVhY3RpdmF0ZVN0YXRlLkNhbmNlbGxlZDtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBpZiB0aW1lciBpc24ndCBmaXJlZCB5ZXQsIGp1c3QgY29tcGxldGUgd2l0aCBzdWNjZXNzIG5hdmlnYXRpb24uXHJcbiAgICAgICAgICAgICAgICBpZiAoY29udGV4dC50aW1lcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChjb250ZXh0LnRpbWVyKTtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRlZmVycmVkLnJlc29sdmUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3YWl0ZWRUaW1lOiBEYXRlLm5vdygpIC0gY29udGV4dC5yZXF1ZXN0ZWRUaW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZTogY29udGV4dC5zdGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQudGltZXIgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVmZXJyZWQgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuc3RhdGUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVxdWVzdGVkVGltZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBjb250ZXh0LmRlZmVycmVkLnByb21pc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvbkFjdGl2YXRlKGRhdGE6IFJwY0FjdGl2YXRlRGF0YSk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgY29uc3Qgc3RhcnRUaW1lc3RhbXAgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgIGNvbnN0IG5ld1JvdXRlID0gZGF0YS51cmwgfHwgZGF0YS51cmwgPT09ICcnID9cclxuICAgICAgICAgICAgTmF2aWdhdGlvbi5nZXRVcmxOYXZpZ2F0aW9uRGF0YSh0aGlzLnJvdXRlciwgZGF0YS51cmwpXHJcbiAgICAgICAgICAgIDogdGhpcy5sYXN0Um91dGUgfHwgeyBjb21tYW5kczogWycnXSwgb3B0aW9uczogbnVsbCB9O1xyXG4gICAgICAgIHRoaXMuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmVudGVyaW5nTW9kdWxlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLy8gTWFudWFsbHkgZmlyZSBwYWdlIHZpZXcgZm9yIGV2ZXJ5IHRpbWUgd2UgcmVhY3RpdmF0ZSBhIG1vZHVsZVxyXG4gICAgICAgIFNtZVdlYlRlbGVtZXRyeS50cmFjZVBhZ2VWaWV3KHt9KTtcclxuXHJcbiAgICAgICAgLy8gcHVsbCBsYXRlc3QgcnBjIGZvcndhcmRlciBzZXJ2aWNlcyBkYXRhIHdoZW4gcmVhY3RpdmF0ZWQuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwQ29udGV4dFNlcnZpY2UucmVpbml0aWFsaXplU2VydmljZXMoKVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIG1lcmdlTWFwKCgpID0+IHRoaXMucm91dGVyLm5hdmlnYXRlKG5ld1JvdXRlLmNvbW1hbmRzLCB0aGlzLmFkZERlZmF1bHROYXZpZ2F0aW9uT3B0aW9ucyhuZXdSb3V0ZS5vcHRpb25zKSkpLFxyXG4gICAgICAgICAgICAgICAgdGFwKCgpID0+IFBlcmZvcm1hbmNlUHJvZmlsZS5sb2dSb3V0ZU5hdmlnYXRpb24oXHJcbiAgICAgICAgICAgICAgICAgICAgJ05hdmlnYXRpb25TZXJ2aWNlJywgc3RhcnRUaW1lc3RhbXAsIERhdGUubm93KCksICdbcnBjQWN0aXZhdGVdJywgdGhpcy5tb2R1bGVOYW1lKSlcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25TaHV0ZG93bihkYXRhOiBScGNTaHV0ZG93bkRhdGEpOiBQcm9taXNlPFJwY1NodXRkb3duUmVzdWx0PiB7XHJcbiAgICAgICAgdGhpcy51c2VyQWxpdmVTZXJ2aWNlLnN0b3AoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5yb3V0ZXIubmF2aWdhdGUodGhpcy5vcHRpb25zLmlkbGVSb3V0ZSwgdGhpcy5kZWZhdWx0TmF2aWdhdGlvbk9wdGlvbnMpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiA8UnBjU2h1dGRvd25SZXN1bHQ+eyBjYW5TaHV0ZG93bjogcmVzdWx0IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYWRkRGVmYXVsdE5hdmlnYXRpb25PcHRpb25zKG9wdGlvbnM6IE5hdmlnYXRpb25EYXRhRXh0cmFzKTogTmF2aWdhdGlvbkV4dHJhcyB7XHJcbiAgICAgICAgcmV0dXJuIHsgLi4uKG9wdGlvbnMgfHwge30pLCAuLi50aGlzLmRlZmF1bHROYXZpZ2F0aW9uT3B0aW9ucyB9O1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
@@ -56,9 +56,7 @@ export class UserAliveService extends RpcObservableAliveClient {
56
56
  * Stop monitoring the user activity.
57
57
  */
58
58
  stop() {
59
- if (this.subscription) {
60
- this.subscription.unsubscribe();
61
- }
59
+ this.subscription?.unsubscribe();
62
60
  }
63
61
  }
64
62
  /** @nocollapse */ UserAliveService.ɵfac = function UserAliveService_Factory(t) { return new (t || UserAliveService)(i0.ɵɵinject(i1.Router), i0.ɵɵinject(i2.RpcService)); };
@@ -66,4 +64,4 @@ export class UserAliveService extends RpcObservableAliveClient {
66
64
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(UserAliveService, [{
67
65
  type: Injectable
68
66
  }], function () { return [{ type: i1.Router }, { type: i2.RpcService }]; }, null); })();
69
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1hbGl2ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvc2VydmljZS91c2VyLWFsaXZlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZ0ZBQWdGLENBQUM7QUFDMUgsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUMxRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7OztBQUczQyxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsd0JBQXdCO0lBRzFEOzs7OztPQUtHO0lBQ0gsWUFBb0IsTUFBYyxFQUFFLEdBQWU7UUFDL0MsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBREssV0FBTSxHQUFOLE1BQU0sQ0FBUTtJQUVsQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLO1FBQ1IsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUU7WUFDbEIsT0FBTztTQUNWO1FBRUQsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ2IsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUNqQixFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQ0wsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQ2xCLFNBQVMsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQ2pDO1lBQ0QsMENBQTBDO1lBQzFDLDZDQUE2QztZQUM3QyxtREFBbUQ7YUFDbEQsSUFBSSxDQUNELFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDWCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFFdkIsNENBQTRDO1lBQzVDLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxHQUFHLEdBQUcsSUFBSSxJQUFJLFFBQVEsRUFBRTtnQkFDdEMsSUFBSSxHQUFHLEdBQUcsQ0FBQztnQkFDWCxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7YUFDN0M7WUFFRCw2QkFBNkI7WUFDN0IsUUFBUSxHQUFHLEdBQUcsQ0FBQztZQUNmLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxFQUNGLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUN0QixZQUFZLENBQUMsUUFBUSxDQUFDLEVBQ3RCLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRTtZQUNaLDRDQUE0QztZQUM1QyxJQUFJLFFBQVEsR0FBRyxJQUFJLEVBQUU7Z0JBQ2pCLElBQUksR0FBRyxRQUFRLENBQUM7Z0JBQ2hCLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQ3ZCO1lBRUQsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEIsQ0FBQyxDQUFDLENBQUMsQ0FDTjthQUNBLFNBQVMsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7T0FFRztJQUNJLElBQUk7UUFDUCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUNuQztJQUNMLENBQUM7O21HQXBFUSxnQkFBZ0I7cUdBQWhCLGdCQUFnQixXQUFoQixnQkFBZ0I7dUZBQWhCLGdCQUFnQjtjQUQ1QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBScGNPYnNlcnZhYmxlQWxpdmVDbGllbnQgfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL3JwYy9hbGl2ZS9ycGMtb2JzZXJ2YWJsZS1hbGl2ZS1jbGllbnQnO1xyXG5pbXBvcnQgeyBmcm9tRXZlbnQsIG1lcmdlLCBvZiwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZmlsdGVyLCBtYXAsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgUnBjU2VydmljZSB9IGZyb20gJy4vcnBjLnNlcnZpY2UnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgVXNlckFsaXZlU2VydmljZSBleHRlbmRzIFJwY09ic2VydmFibGVBbGl2ZUNsaWVudCB7XHJcbiAgICBwcml2YXRlIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5pdGlhbGl6ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIFVzZXJBbGl2ZVNlcnZpY2UgY2xhc3MuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHJvdXRlciB0aGUgcm91dGVyIG9iamVjdC5cclxuICAgICAqIEBwYXJhbSBycGMgdGhlIHJwYyBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsIHJwYzogUnBjU2VydmljZSkge1xyXG4gICAgICAgIHN1cGVyKHJwYyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdGFydHMgbW9uaXRvcmluZyB1c2VyIGFjdGl2aXR5IHRvIHJlcG9ydCB0aGUgc2hlbGwuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGFydCgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCB3YWl0VGltZSA9IDEwMDAwO1xyXG4gICAgICAgIGlmICh0aGlzLnJwYy5pc1NoZWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBsYXN0ID0gMDtcclxuICAgICAgICBsZXQgZGVib3VuY2UgPSAwO1xyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gbWVyZ2UoXHJcbiAgICAgICAgICAgICAgICBvZigwKSxcclxuICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLmV2ZW50cyxcclxuICAgICAgICAgICAgICAgIGZyb21FdmVudChkb2N1bWVudCwgJ2ZvY3VzaW4nKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC8vIDAwIDE1IDMwID0+IDAwIDE1IDMwICh3YWl0VGltZSBleGNlZWRzKVxyXG4gICAgICAgICAgICAvLyAwMCAwNSAxMCA9PiAwMCAxMCAoZGVib3VuY2UgMDUgaXMgaWdub3JlZClcclxuICAgICAgICAgICAgLy8gMDAgMTUgMjAgPT4gMDAgMTUgMzAgKDIwIGlzIGRlYm91bmNlIDEwIHNlY29uZHMpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBlbWl0IHdoZW4gdGhlIGZpcnN0IGFuZCBleGNlZWRzIHdhaXRUaW1lLlxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChsYXN0ID09PSAwIHx8IG5vdyAtIGxhc3QgPj0gd2FpdFRpbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdCA9IG5vdztcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWxpdmUoKS5waXBlKG1hcCgoKSA9PiB0cnVlKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBzZW5kIGRvd24gdG8gZGVib3VuY2VUaW1lLlxyXG4gICAgICAgICAgICAgICAgICAgIGRlYm91bmNlID0gbm93O1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZih0cnVlKTtcclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgZmlsdGVyKHN0YXRlID0+IHN0YXRlKSxcclxuICAgICAgICAgICAgICAgIGRlYm91bmNlVGltZSh3YWl0VGltZSksXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBvbmx5IHNlbmQgaWYgZGVib3VuY2UgaXMgbmV3ZXIgdGhhbiBsYXN0LlxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkZWJvdW5jZSA+IGxhc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdCA9IGRlYm91bmNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hbGl2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RvcCBtb25pdG9yaW5nIHRoZSB1c2VyIGFjdGl2aXR5LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RvcCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcclxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl19
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1hbGl2ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvc2VydmljZS91c2VyLWFsaXZlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZ0ZBQWdGLENBQUM7QUFDMUgsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUMxRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7OztBQUczQyxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsd0JBQXdCO0lBRzFEOzs7OztPQUtHO0lBQ0gsWUFBb0IsTUFBYyxFQUFFLEdBQWU7UUFDL0MsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBREssV0FBTSxHQUFOLE1BQU0sQ0FBUTtJQUVsQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLO1FBQ1IsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUU7WUFDbEIsT0FBTztTQUNWO1FBRUQsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ2IsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUNqQixFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQ0wsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQ2xCLFNBQVMsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQ2pDO1lBQ0QsMENBQTBDO1lBQzFDLDZDQUE2QztZQUM3QyxtREFBbUQ7YUFDbEQsSUFBSSxDQUNELFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDWCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFFdkIsNENBQTRDO1lBQzVDLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxHQUFHLEdBQUcsSUFBSSxJQUFJLFFBQVEsRUFBRTtnQkFDdEMsSUFBSSxHQUFHLEdBQUcsQ0FBQztnQkFDWCxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7YUFDN0M7WUFFRCw2QkFBNkI7WUFDN0IsUUFBUSxHQUFHLEdBQUcsQ0FBQztZQUNmLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxFQUNGLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUN0QixZQUFZLENBQUMsUUFBUSxDQUFDLEVBQ3RCLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRTtZQUNaLDRDQUE0QztZQUM1QyxJQUFJLFFBQVEsR0FBRyxJQUFJLEVBQUU7Z0JBQ2pCLElBQUksR0FBRyxRQUFRLENBQUM7Z0JBQ2hCLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQ3ZCO1lBRUQsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEIsQ0FBQyxDQUFDLENBQUMsQ0FDTjthQUNBLFNBQVMsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7T0FFRztJQUNJLElBQUk7UUFDUCxJQUFJLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQ3JDLENBQUM7O21HQWxFUSxnQkFBZ0I7cUdBQWhCLGdCQUFnQixXQUFoQixnQkFBZ0I7dUZBQWhCLGdCQUFnQjtjQUQ1QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBScGNPYnNlcnZhYmxlQWxpdmVDbGllbnQgfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL3JwYy9hbGl2ZS9ycGMtb2JzZXJ2YWJsZS1hbGl2ZS1jbGllbnQnO1xyXG5pbXBvcnQgeyBmcm9tRXZlbnQsIG1lcmdlLCBvZiwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZmlsdGVyLCBtYXAsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgUnBjU2VydmljZSB9IGZyb20gJy4vcnBjLnNlcnZpY2UnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgVXNlckFsaXZlU2VydmljZSBleHRlbmRzIFJwY09ic2VydmFibGVBbGl2ZUNsaWVudCB7XHJcbiAgICBwcml2YXRlIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5pdGlhbGl6ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIFVzZXJBbGl2ZVNlcnZpY2UgY2xhc3MuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHJvdXRlciB0aGUgcm91dGVyIG9iamVjdC5cclxuICAgICAqIEBwYXJhbSBycGMgdGhlIHJwYyBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsIHJwYzogUnBjU2VydmljZSkge1xyXG4gICAgICAgIHN1cGVyKHJwYyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdGFydHMgbW9uaXRvcmluZyB1c2VyIGFjdGl2aXR5IHRvIHJlcG9ydCB0aGUgc2hlbGwuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGFydCgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCB3YWl0VGltZSA9IDEwMDAwO1xyXG4gICAgICAgIGlmICh0aGlzLnJwYy5pc1NoZWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBsYXN0ID0gMDtcclxuICAgICAgICBsZXQgZGVib3VuY2UgPSAwO1xyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gbWVyZ2UoXHJcbiAgICAgICAgICAgICAgICBvZigwKSxcclxuICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLmV2ZW50cyxcclxuICAgICAgICAgICAgICAgIGZyb21FdmVudChkb2N1bWVudCwgJ2ZvY3VzaW4nKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC8vIDAwIDE1IDMwID0+IDAwIDE1IDMwICh3YWl0VGltZSBleGNlZWRzKVxyXG4gICAgICAgICAgICAvLyAwMCAwNSAxMCA9PiAwMCAxMCAoZGVib3VuY2UgMDUgaXMgaWdub3JlZClcclxuICAgICAgICAgICAgLy8gMDAgMTUgMjAgPT4gMDAgMTUgMzAgKDIwIGlzIGRlYm91bmNlIDEwIHNlY29uZHMpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBlbWl0IHdoZW4gdGhlIGZpcnN0IGFuZCBleGNlZWRzIHdhaXRUaW1lLlxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChsYXN0ID09PSAwIHx8IG5vdyAtIGxhc3QgPj0gd2FpdFRpbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdCA9IG5vdztcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWxpdmUoKS5waXBlKG1hcCgoKSA9PiB0cnVlKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBzZW5kIGRvd24gdG8gZGVib3VuY2VUaW1lLlxyXG4gICAgICAgICAgICAgICAgICAgIGRlYm91bmNlID0gbm93O1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZih0cnVlKTtcclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgZmlsdGVyKHN0YXRlID0+IHN0YXRlKSxcclxuICAgICAgICAgICAgICAgIGRlYm91bmNlVGltZSh3YWl0VGltZSksXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBvbmx5IHNlbmQgaWYgZGVib3VuY2UgaXMgbmV3ZXIgdGhhbiBsYXN0LlxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkZWJvdW5jZSA+IGxhc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdCA9IGRlYm91bmNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hbGl2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RvcCBtb25pdG9yaW5nIHRoZSB1c2VyIGFjdGl2aXR5LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RvcCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxufVxyXG4iXX0=