@microsoft/windows-admin-center-sdk 4.52.0 → 4.123.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 (134) hide show
  1. package/angular/esm2020/src/controls/actions/containers/action-bar/action-bar.component.mjs +2 -2
  2. package/angular/esm2020/src/controls/master-view/master-view.component.mjs +8 -6
  3. package/angular/esm2020/src/controls/ux/sme-ux-footer/sme-ux-footer-template/sme-wizard-lite-footer-template/sme-wizard-lite-footer-template.component.mjs +56 -1
  4. package/angular/esm2020/src/service/navigation.service.mjs +3 -1
  5. package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.mjs +66 -6
  6. package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.mjs.map +1 -1
  7. package/angular/fesm2020/microsoft-windows-admin-center-sdk-angular.mjs +65 -6
  8. package/angular/fesm2020/microsoft-windows-admin-center-sdk-angular.mjs.map +1 -1
  9. package/angular/src/controls/master-view/master-view.component.d.ts +6 -2
  10. package/angular/src/controls/ux/sme-ux-footer/sme-ux-footer-template/sme-wizard-lite-footer-template/sme-wizard-lite-footer-template.component.d.ts +64 -0
  11. package/core/assets/strings/cs-CZ/strings.json +1 -1
  12. package/core/assets/strings/de-DE/strings.json +1 -1
  13. package/core/assets/strings/es-ES/strings.json +1 -1
  14. package/core/assets/strings/fr-FR/strings.json +1 -1
  15. package/core/assets/strings/hu-HU/strings.json +1 -1
  16. package/core/assets/strings/id-ID/strings.json +1 -1
  17. package/core/assets/strings/it-IT/strings.json +1 -1
  18. package/core/assets/strings/ja-JP/strings.json +1 -1
  19. package/core/assets/strings/ko-KR/strings.json +1 -1
  20. package/core/assets/strings/nl-NL/strings.json +1 -1
  21. package/core/assets/strings/pl-PL/strings.json +1 -1
  22. package/core/assets/strings/pt-BR/strings.json +1 -1
  23. package/core/assets/strings/pt-PT/strings.json +1 -1
  24. package/core/assets/strings/ru-RU/strings.json +1 -1
  25. package/core/assets/strings/strings.json +1 -1
  26. package/core/assets/strings/sv-SE/strings.json +1 -1
  27. package/core/assets/strings/tr-TR/strings.json +1 -1
  28. package/core/assets/strings/zh-CN/strings.json +1 -1
  29. package/core/assets/strings/zh-TW/strings.json +1 -1
  30. package/core/azure/azure-constants.d.ts +7 -3
  31. package/core/azure/azure-constants.d.ts.map +1 -1
  32. package/core/azure/azure-constants.js +8 -4
  33. package/core/azure/azure-constants.js.map +1 -1
  34. package/core/azure/models/azureArcStatusEnum.d.ts +4 -2
  35. package/core/azure/models/azureArcStatusEnum.d.ts.map +1 -1
  36. package/core/azure/models/azureArcStatusEnum.js +3 -1
  37. package/core/azure/models/azureArcStatusEnum.js.map +1 -1
  38. package/core/base/utilities.d.ts +3 -3
  39. package/core/base/utilities.d.ts.map +1 -1
  40. package/core/base/utilities.js +2 -2
  41. package/core/base/utilities.js.map +1 -1
  42. package/core/data/active-directory/active-directory.d.ts.map +1 -1
  43. package/core/data/active-directory/active-directory.js +1 -1
  44. package/core/data/active-directory/active-directory.js.map +1 -1
  45. package/core/data/cookie.d.ts.map +1 -1
  46. package/core/data/cookie.js +7 -0
  47. package/core/data/cookie.js.map +1 -1
  48. package/core/data/gateway-connection.d.ts +12 -0
  49. package/core/data/gateway-connection.d.ts.map +1 -1
  50. package/core/data/gateway-connection.js +16 -0
  51. package/core/data/gateway-connection.js.map +1 -1
  52. package/core/data/gateway-url-translator.d.ts +1 -0
  53. package/core/data/gateway-url-translator.d.ts.map +1 -1
  54. package/core/data/gateway-url-translator.js +15 -0
  55. package/core/data/gateway-url-translator.js.map +1 -1
  56. package/core/data/gateway-urls.d.ts +6 -0
  57. package/core/data/gateway-urls.d.ts.map +1 -1
  58. package/core/data/gateway-urls.js +8 -0
  59. package/core/data/gateway-urls.js.map +1 -1
  60. package/core/data/net.d.ts +1 -0
  61. package/core/data/net.d.ts.map +1 -1
  62. package/core/data/net.js +26 -1
  63. package/core/data/net.js.map +1 -1
  64. package/core/data/websocket-stream.d.ts.map +1 -1
  65. package/core/data/websocket-stream.js +2 -2
  66. package/core/data/websocket-stream.js.map +1 -1
  67. package/core/generated/powershell-scripts.d.ts.map +1 -1
  68. package/core/generated/powershell-scripts.js +1 -1
  69. package/core/generated/powershell-scripts.js.map +1 -1
  70. package/core/generated/strings.d.ts +3 -0
  71. package/core/generated/strings.d.ts.map +1 -1
  72. package/core/generated/strings.js.map +1 -1
  73. package/core/notification/notification.d.ts.map +1 -1
  74. package/core/notification/notification.js +1 -3
  75. package/core/notification/notification.js.map +1 -1
  76. package/core/resources/scripts/public/inventory/Get-ServerInventory.ps1 +8 -8
  77. package/core/security/tool-condition-validator.d.ts.map +1 -1
  78. package/core/security/tool-condition-validator.js +5 -5
  79. package/core/security/tool-condition-validator.js.map +1 -1
  80. package/core/shared/server-inventory/server-inventory-cache.d.ts.map +1 -1
  81. package/core/shared/server-inventory/server-inventory-cache.js +1 -2
  82. package/core/shared/server-inventory/server-inventory-cache.js.map +1 -1
  83. package/core/shared/server-inventory/server-inventory.d.ts +4 -4
  84. package/core/shared/server-inventory/server-inventory.d.ts.map +1 -1
  85. package/core/shared/server-inventory/server-inventory.js +2 -2
  86. package/core/shared/server-inventory/server-inventory.js.map +1 -1
  87. package/microsoft-windows-admin-center-sdk-4.123.0.tgz +0 -0
  88. package/package.json +4 -4
  89. package/styles/css/main-v2.css +1 -1
  90. package/tools/module-template/build/pipelines/ci-build.yml +2 -2
  91. package/tools/wac-cli/src/angular15/configs/angular-json-config.d.ts +2 -7
  92. package/tools/wac-cli/src/angular15/configs/angular-json-config.d.ts.map +1 -1
  93. package/tools/wac-cli/src/angular15/configs/angular-json-config.js +8 -1
  94. package/tools/wac-cli/src/angular15/configs/angular-json-config.js.map +1 -1
  95. package/tools/wac-cli/src/angular15/configs/package-json-config.d.ts +4 -0
  96. package/tools/wac-cli/src/angular15/configs/package-json-config.d.ts.map +1 -1
  97. package/tools/wac-cli/src/angular15/configs/package-json-config.js +13 -9
  98. package/tools/wac-cli/src/angular15/configs/package-json-config.js.map +1 -1
  99. package/tools/wac-cli/src/angular15/configs/ui-test-automation-lagacy-config.d.ts +14 -0
  100. package/tools/wac-cli/src/angular15/configs/ui-test-automation-lagacy-config.d.ts.map +1 -0
  101. package/tools/wac-cli/src/angular15/configs/ui-test-automation-lagacy-config.js +21 -0
  102. package/tools/wac-cli/src/angular15/configs/ui-test-automation-lagacy-config.js.map +1 -0
  103. package/tools/wac-cli/src/angular15/main.d.ts +33 -3
  104. package/tools/wac-cli/src/angular15/main.d.ts.map +1 -1
  105. package/tools/wac-cli/src/angular15/main.js +69 -7
  106. package/tools/wac-cli/src/angular15/main.js.map +1 -1
  107. package/tools/wac-cli/src/angular15/test/ui-test-automation-package.json/after.json +14 -0
  108. package/tools/wac-cli/src/angular15/test/ui-test-automation-package.json/before.json +13 -0
  109. package/tools/wac-cli/src/angular15/upgrader/ui-test-automation-legacy-upgrader.d.ts +15 -0
  110. package/tools/wac-cli/src/angular15/upgrader/ui-test-automation-legacy-upgrader.d.ts.map +1 -0
  111. package/tools/wac-cli/src/angular15/upgrader/ui-test-automation-legacy-upgrader.js +48 -0
  112. package/tools/wac-cli/src/angular15/upgrader/ui-test-automation-legacy-upgrader.js.map +1 -0
  113. package/tools/wac-cli/src/angular15/utils/main-debugger.d.ts.map +1 -1
  114. package/tools/wac-cli/src/angular15/utils/main-debugger.js +3 -0
  115. package/tools/wac-cli/src/angular15/utils/main-debugger.js.map +1 -1
  116. package/tools/wac-cli/src/angular15/utils/update-shell-references.d.ts +2 -0
  117. package/tools/wac-cli/src/angular15/utils/update-shell-references.d.ts.map +1 -0
  118. package/tools/wac-cli/src/angular15/utils/update-shell-references.js +69 -0
  119. package/tools/wac-cli/src/angular15/utils/update-shell-references.js.map +1 -0
  120. package/tools/wac-cli/src/common.d.ts +6 -0
  121. package/tools/wac-cli/src/common.d.ts.map +1 -1
  122. package/tools/wac-cli/src/common.js +13 -0
  123. package/tools/wac-cli/src/common.js.map +1 -1
  124. package/tools/wac-cli/src/create/main.d.ts.map +1 -1
  125. package/tools/wac-cli/src/create/main.js +3 -51
  126. package/tools/wac-cli/src/create/main.js.map +1 -1
  127. package/tools/wac-cli/src/eslint/main.d.ts +5 -1
  128. package/tools/wac-cli/src/eslint/main.d.ts.map +1 -1
  129. package/tools/wac-cli/src/eslint/main.js +17 -2
  130. package/tools/wac-cli/src/eslint/main.js.map +1 -1
  131. package/tools/wac-cli/src/index.d.ts.map +1 -1
  132. package/tools/wac-cli/src/index.js +2 -2
  133. package/tools/wac-cli/src/index.js.map +1 -1
  134. package/tools/wac-cli/templates/wac-template/package.json +3 -0
@@ -98,8 +98,8 @@ function MasterViewComponent_button_16_Template(rf, ctx) { if (rf & 1) {
98
98
  i0.ɵɵelementEnd();
99
99
  } if (rf & 2) {
100
100
  const ctx_r7 = i0.ɵɵnextContext();
101
- i0.ɵɵproperty("title", ctx_r7.resourceStrings.refresh.title);
102
- i0.ɵɵattribute("aria-disabled", ctx_r7.disableRefresh)("aria-label", ctx_r7.refreshButtonAriaLabel);
101
+ i0.ɵɵproperty("title", ctx_r7.refreshTooltipText || ctx_r7.resourceStrings.refresh.title);
102
+ i0.ɵɵattribute("aria-disabled", ctx_r7.disableRefresh)("aria-label", ctx_r7.refreshTooltipText || ctx_r7.refreshButtonAriaLabel);
103
103
  } }
104
104
  function MasterViewComponent_button_17_Template(rf, ctx) { if (rf & 1) {
105
105
  const _r22 = i0.ɵɵgetCurrentView();
@@ -196,7 +196,7 @@ export class MasterViewComponent extends SpacerBaseDirective {
196
196
  */
197
197
  this.showRefresh = true;
198
198
  /**
199
- * It determines whether to disable to refresh button.
199
+ * It determines whether to disable the refresh button.
200
200
  */
201
201
  this.disableRefresh = false;
202
202
  /**
@@ -668,7 +668,7 @@ export class MasterViewComponent extends SpacerBaseDirective {
668
668
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.containerElement = _t.first);
669
669
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.dataView = _t.first);
670
670
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.smeMasterViewContentDirective = _t.first);
671
- } }, inputs: { hideHeader: "hideHeader", header: "header", total: "total", showSelection: "showSelection", showColumnPicker: "showColumnPicker", showDownloadButton: "showDownloadButton", getDownloadContextParameters: "getDownloadContextParameters", columnPickerActive: "columnPickerActive", showRefresh: "showRefresh", disableRefresh: "disableRefresh", dataTableMinWidth: "dataTableMinWidth", showFilter: "showFilter", filterActive: "filterActive", downloadActive: "downloadActive", enableQueryEditor: "enableQueryEditor", selection: "selection", requireDataItemUniqueId: "requireDataItemUniqueId", showCustomFilter: "showCustomFilter", groupActive: "groupActive", stretchToAbsolute: "stretchToAbsolute", autoExpandDetailsPane: "autoExpandDetailsPane", showGroup: "showGroup", downloadDataType: "downloadDataType" }, outputs: { selectionChange: "selectionChange", downloadPrompted: "downloadPrompted", downloadFinished: "downloadFinished", columnPicker: "columnPicker", refresh: "refresh", filter: "filter", group: "group", clearSelection: "clearSelection", smeDataTableFromTemplateReady: "smeDataTableFromTemplateReady", layoutChanged: "layoutChanged", windowBreakpointChanged: "windowBreakpointChanged" }, features: [i0.ɵɵProvidersFeature([
671
+ } }, inputs: { hideHeader: "hideHeader", header: "header", total: "total", showSelection: "showSelection", showColumnPicker: "showColumnPicker", showDownloadButton: "showDownloadButton", getDownloadContextParameters: "getDownloadContextParameters", columnPickerActive: "columnPickerActive", showRefresh: "showRefresh", disableRefresh: "disableRefresh", dataTableMinWidth: "dataTableMinWidth", showFilter: "showFilter", filterActive: "filterActive", downloadActive: "downloadActive", enableQueryEditor: "enableQueryEditor", selection: "selection", requireDataItemUniqueId: "requireDataItemUniqueId", showCustomFilter: "showCustomFilter", groupActive: "groupActive", stretchToAbsolute: "stretchToAbsolute", autoExpandDetailsPane: "autoExpandDetailsPane", showGroup: "showGroup", downloadDataType: "downloadDataType", refreshTooltipText: "refreshTooltipText" }, outputs: { selectionChange: "selectionChange", downloadPrompted: "downloadPrompted", downloadFinished: "downloadFinished", columnPicker: "columnPicker", refresh: "refresh", filter: "filter", group: "group", clearSelection: "clearSelection", smeDataTableFromTemplateReady: "smeDataTableFromTemplateReady", layoutChanged: "layoutChanged", windowBreakpointChanged: "windowBreakpointChanged" }, features: [i0.ɵɵProvidersFeature([
672
672
  { provide: SME_LAYOUT_PROVIDER, useExisting: forwardRef((() => MasterViewComponent)) }
673
673
  ]), i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], ngContentSelectors: _c5, decls: 25, vars: 36, consts: [["class", "sme-position-flex-none sme-padding-squish-v-lg sme-arrange-word-wrap-break-word sme-font-h3", 3, "hidden", "id", 4, "ngIf"], [3, "layoutChanged"], ["layout", ""], ["name", "narrow", 3, "until"], ["class", "sme-position-flex-none", 3, "sme-padding-horizontal-sm", 4, "ngIf"], [1, "sme-position-flex-none", "sme-arrange-stack-reversed"], ["container", ""], [1, "sme-position-flex-none", "sme-arrange-stack-h"], [1, "sme-focus-zone", "sme-position-flex-none", "sme-arrange-stack-h", "sme-arrange-ws-nowrap", "sme-scheme-secondary-text"], ["role", "status", 1, "sme-layout-action-bar-item", "sme-padding-horizontal-sm", 3, "id"], ["type", "button", "role", "button", "class", "sme-button-trigger sme-layout-action-bar-item-height sme-scheme-secondary-text sme-button-auto-width", 3, "click", 4, "ngIf"], [1, "sme-focus-zone", "sme-arrange-ws-nowrap"], ["type", "button", "role", "button", "title", "Download", "class", "sme-layout-action-bar-item-height sme-button-trigger sme-button-auto-width", "data-uta-id", "download-button", 3, "sme-toggled", "click", 4, "ngIf"], ["type", "button", "role", "button", "class", "sme-layout-action-bar-item-height sme-button-trigger sme-button-auto-width", "data-uta-id", "column-picker-button", 3, "title", "sme-toggled", "click", 4, "ngIf"], ["aria-live", "polite", "type", "button", "role", "button", "class", "sme-layout-action-bar-item-height sme-button-trigger sme-button-auto-width", 3, "title", "click", 4, "ngIf"], ["type", "button", "role", "button", "class", "sme-layout-action-bar-item-height sme-button-trigger sme-button-auto-width", 3, "title", "sme-toggled", "click", 4, "ngIf"], [1, "sme-focus-zone"], ["class", "sme-margin-horizontal-sm", 4, "ngIf"], ["style", "position: relative;", 4, "ngIf"], ["smeMasterViewContentDirective", "", 3, "smeDataTableFromTemplateReady"], ["dataView", ""], [1, "sme-position-flex-none", "sme-padding-squish-v-lg", "sme-arrange-word-wrap-break-word", "sme-font-h3", 3, "hidden", "id"], [1, "sme-position-flex-none"], ["type", "button", "role", "button", 1, "sme-button-trigger", "sme-layout-action-bar-item-height", "sme-scheme-secondary-text", "sme-button-auto-width", 3, "click"], ["aria-hidden", "true"], [1, "sme-screen-reader"], ["aria-hidden", "true", 1, "sme-icon", "sme-icon-clear", "sme-margin-left-xs", 3, "title"], ["type", "button", "role", "button", "title", "Download", "data-uta-id", "download-button", 1, "sme-layout-action-bar-item-height", "sme-button-trigger", "sme-button-auto-width", 3, "click"], [1, "sme-icon", "sme-icon-download"], ["type", "button", "role", "button", "data-uta-id", "column-picker-button", 1, "sme-layout-action-bar-item-height", "sme-button-trigger", "sme-button-auto-width", 3, "title", "click"], [1, "sme-icon", "sme-icon-tripleColumn"], ["aria-live", "polite", "type", "button", "role", "button", 1, "sme-layout-action-bar-item-height", "sme-button-trigger", "sme-button-auto-width", 3, "title", "click"], [1, "sme-icon", "sme-icon-refresh"], ["type", "button", "role", "button", 1, "sme-layout-action-bar-item-height", "sme-button-trigger", "sme-button-auto-width", 3, "title", "click"], [1, "sme-icon", "sme-icon-filter"], [1, "sme-icon", "sme-icon-groupedList"], [1, "sme-margin-horizontal-sm"], [2, "position", "relative"], [1, "sme-position-flex-none", "sme-layout-action-bar-item"]], template: function MasterViewComponent_Template(rf, ctx) { if (rf & 1) {
674
674
  i0.ɵɵprojectionDef(_c4);
@@ -754,7 +754,7 @@ __decorate([
754
754
  type: Component,
755
755
  args: [{ selector: 'sme-master-view', providers: [
756
756
  { provide: SME_LAYOUT_PROVIDER, useExisting: forwardRef((() => MasterViewComponent)) }
757
- ], template: "<h2 class=\"sme-position-flex-none sme-padding-squish-v-lg sme-arrange-word-wrap-break-word sme-font-h3\" *ngIf=\"header\"\r\n [hidden]=\"hideHeader\" [id]='headerId'>{{ header }}</h2>\r\n<sme-layout #layout (layoutChanged)=\"updateActionBar()\">\r\n <sme-layout-definition name=\"narrow\" [until]=\"768\"></sme-layout-definition>\r\n</sme-layout>\r\n<div *ngIf=\"enableQueryEditor\" class=\"sme-position-flex-none\" [class.sme-padding-horizontal-sm]=\"!noSideMargin\">\r\n <!-- Query Editor -->\r\n <ng-content select='sme-query-editor'></ng-content>\r\n</div>\r\n<div class=\"sme-position-flex-none sme-arrange-stack-reversed\" #container\r\n [class.sme-padding-horizontal-sm]=\"!noSideMargin\"\r\n [class.sme-arrange-stack-h]=\"!(layout.currentLayoutDefinitionName==='narrow')\">\r\n <!-- Actions -->\r\n <ng-content select='sme-action-bar,.action-bar'></ng-content>\r\n\r\n <div class=\"sme-position-flex-none sme-arrange-stack-h\" [class.sme-padding-horizontal-sm]=\"!noSideMargin\"\r\n [class.sme-padding-left-sm]=\"noSideMargin\" [class.sme-arrange-stack-wrap]=\"searchBoxAutoWrapOnWindowSizeChanges\">\r\n <!-- Counts -->\r\n <div\r\n class=\"sme-focus-zone sme-position-flex-none sme-arrange-stack-h sme-arrange-ws-nowrap sme-scheme-secondary-text\"\r\n [class.sme-padding-right-xs]=\"selectedItemCount === 0 || !showSelection\">\r\n <i role=\"status\" [id]=\"idBag.itemCountLabel\" class=\"sme-layout-action-bar-item sme-padding-horizontal-sm\">{{\r\n getItemCountText() }}</i>\r\n <button type=\"button\" role=\"button\"\r\n class=\"sme-button-trigger sme-layout-action-bar-item-height sme-scheme-secondary-text sme-button-auto-width\"\r\n *ngIf=\"selectedItemCount > 0 && showSelection\" (click)=\"doClearSelection($event)\">\r\n <i aria-hidden=\"true\">{{ getSelectedCountText() }}</i>\r\n <i class=\"sme-screen-reader\">{{ getSelectedCountAriaText() }}</i>\r\n <i aria-hidden=\"true\" class=\"sme-icon sme-icon-clear sme-margin-left-xs\"\r\n [title]=\"resourceStrings.selectedTitle\"></i>\r\n </button>\r\n </div>\r\n <!-- Common Actions -->\r\n <div class=\"sme-focus-zone sme-arrange-ws-nowrap\">\r\n <button *ngIf=\"showDownloadButton\" (click)=\"onDownloadButtonClicked($event)\" type=\"button\" role=\"button\"\r\n title=\"Download\" class=\"sme-layout-action-bar-item-height sme-button-trigger sme-button-auto-width\"\r\n [class.sme-toggled]=\"downloadActive\" data-uta-id=\"download-button\">\r\n <span class=\"sme-icon sme-icon-download\"></span>\r\n </button>\r\n <button *ngIf=\"showColumnPicker\" (click)=\"columnPicker.next();\" type=\"button\" role=\"button\"\r\n [title]=\"resourceStrings.columnPicker.title\" [attr.aria-label]=\"getFilterAriaLabel()\"\r\n class=\"sme-layout-action-bar-item-height sme-button-trigger sme-button-auto-width\"\r\n [class.sme-toggled]=\"columnPickerActive\" data-uta-id=\"column-picker-button\">\r\n <span class=\"sme-icon sme-icon-tripleColumn\"></span>\r\n </button>\r\n <button aria-live=\"polite\" *ngIf=\"showRefresh\" [attr.aria-disabled]=\"disableRefresh\"\r\n (click)=\"refreshButtonClicked()\" type=\"button\" role=\"button\" [title]=\"resourceStrings.refresh.title\"\r\n [attr.aria-label]=\"refreshButtonAriaLabel\"\r\n class=\"sme-layout-action-bar-item-height sme-button-trigger sme-button-auto-width\">\r\n <span class=\"sme-icon sme-icon-refresh\"></span>\r\n </button>\r\n <button *ngIf=\"showFilter\" (click)=\"filter.next();\" type=\"button\" role=\"button\"\r\n [title]=\"resourceStrings.filter.title\" [attr.aria-label]=\"getFilterAriaLabel()\"\r\n class=\"sme-layout-action-bar-item-height sme-button-trigger sme-button-auto-width\"\r\n [class.sme-toggled]=\"filterActive\">\r\n <span class=\"sme-icon sme-icon-filter\"></span>\r\n </button>\r\n <button *ngIf=\"showGroup\" (click)=\"group.next()\" type=\"button\" role=\"button\" [title]=\"resourceStrings.group.title\"\r\n [attr.aria-label]=\"resourceStrings.group.title\"\r\n class=\"sme-layout-action-bar-item-height sme-button-trigger sme-button-auto-width\"\r\n [class.sme-toggled]=\"groupActive\">\r\n <!-- TODO: use grouping icon when available. -->\r\n <span class=\"sme-icon sme-icon-groupedList\"></span>\r\n </button>\r\n </div>\r\n <!-- Grouping (Deprecated) -->\r\n <div class=\"sme-focus-zone\">\r\n <div *ngIf=\"showCustomFilter\" class=\"sme-margin-horizontal-sm\">\r\n <ng-content select='.sme-master-view-custom-filter'></ng-content>\r\n </div>\r\n </div>\r\n <!-- Search Box -->\r\n <form *ngIf=\"useSearch\" style=\"position: relative;\">\r\n <div class=\"sme-position-flex-none sme-layout-action-bar-item\">\r\n <ng-content select='sme-form-field[type=\"search\"]'></ng-content>\r\n </div>\r\n </form>\r\n </div>\r\n</div>\r\n<div #dataView smeMasterViewContentDirective (smeDataTableFromTemplateReady)=\"onSmeDataTableFromTemplateReady()\"\r\n [class.sme-margin-horizontal-lg]=\"shouldDataTableSlim\"\r\n [class.sme-padding-bottom-md]=\"shouldDataTableRenderWithBottomMargin\"\r\n [class.sme-arrange-overflow-hide]=\"shouldDataTableParentOverflowHide\"\r\n class=\"sme-layout-relative sme-position-flex-auto sme-arrange-stack-h sme-layout-minwidth-{{dataTableMinWidthClassString}}\"\r\n [class.sme-shadow-scrolled-content]=\"!isDataListScrolledToTop\">\r\n <ng-content></ng-content>\r\n</div>\r\n" }]
757
+ ], template: "<h2 class=\"sme-position-flex-none sme-padding-squish-v-lg sme-arrange-word-wrap-break-word sme-font-h3\" *ngIf=\"header\"\r\n [hidden]=\"hideHeader\" [id]='headerId'>{{ header }}</h2>\r\n<sme-layout #layout (layoutChanged)=\"updateActionBar()\">\r\n <sme-layout-definition name=\"narrow\" [until]=\"768\"></sme-layout-definition>\r\n</sme-layout>\r\n<div *ngIf=\"enableQueryEditor\" class=\"sme-position-flex-none\" [class.sme-padding-horizontal-sm]=\"!noSideMargin\">\r\n <!-- Query Editor -->\r\n <ng-content select='sme-query-editor'></ng-content>\r\n</div>\r\n<div class=\"sme-position-flex-none sme-arrange-stack-reversed\" #container\r\n [class.sme-padding-horizontal-sm]=\"!noSideMargin\"\r\n [class.sme-arrange-stack-h]=\"!(layout.currentLayoutDefinitionName==='narrow')\">\r\n <!-- Actions -->\r\n <ng-content select='sme-action-bar,.action-bar'></ng-content>\r\n\r\n <div class=\"sme-position-flex-none sme-arrange-stack-h\" [class.sme-padding-horizontal-sm]=\"!noSideMargin\"\r\n [class.sme-padding-left-sm]=\"noSideMargin\" [class.sme-arrange-stack-wrap]=\"searchBoxAutoWrapOnWindowSizeChanges\">\r\n <!-- Counts -->\r\n <div\r\n class=\"sme-focus-zone sme-position-flex-none sme-arrange-stack-h sme-arrange-ws-nowrap sme-scheme-secondary-text\"\r\n [class.sme-padding-right-xs]=\"selectedItemCount === 0 || !showSelection\">\r\n <i role=\"status\" [id]=\"idBag.itemCountLabel\" class=\"sme-layout-action-bar-item sme-padding-horizontal-sm\">{{\r\n getItemCountText() }}</i>\r\n <button type=\"button\" role=\"button\"\r\n class=\"sme-button-trigger sme-layout-action-bar-item-height sme-scheme-secondary-text sme-button-auto-width\"\r\n *ngIf=\"selectedItemCount > 0 && showSelection\" (click)=\"doClearSelection($event)\">\r\n <i aria-hidden=\"true\">{{ getSelectedCountText() }}</i>\r\n <i class=\"sme-screen-reader\">{{ getSelectedCountAriaText() }}</i>\r\n <i aria-hidden=\"true\" class=\"sme-icon sme-icon-clear sme-margin-left-xs\"\r\n [title]=\"resourceStrings.selectedTitle\"></i>\r\n </button>\r\n </div>\r\n <!-- Common Actions -->\r\n <div class=\"sme-focus-zone sme-arrange-ws-nowrap\">\r\n <button *ngIf=\"showDownloadButton\" (click)=\"onDownloadButtonClicked($event)\" type=\"button\" role=\"button\"\r\n title=\"Download\" class=\"sme-layout-action-bar-item-height sme-button-trigger sme-button-auto-width\"\r\n [class.sme-toggled]=\"downloadActive\" data-uta-id=\"download-button\">\r\n <span class=\"sme-icon sme-icon-download\"></span>\r\n </button>\r\n <button *ngIf=\"showColumnPicker\" (click)=\"columnPicker.next();\" type=\"button\" role=\"button\"\r\n [title]=\"resourceStrings.columnPicker.title\" [attr.aria-label]=\"getFilterAriaLabel()\"\r\n class=\"sme-layout-action-bar-item-height sme-button-trigger sme-button-auto-width\"\r\n [class.sme-toggled]=\"columnPickerActive\" data-uta-id=\"column-picker-button\">\r\n <span class=\"sme-icon sme-icon-tripleColumn\"></span>\r\n </button>\r\n <button aria-live=\"polite\" *ngIf=\"showRefresh\" [attr.aria-disabled]=\"disableRefresh\"\r\n (click)=\"refreshButtonClicked()\" type=\"button\" role=\"button\" [title]=\"refreshTooltipText || resourceStrings.refresh.title\"\r\n [attr.aria-label]=\"refreshTooltipText || refreshButtonAriaLabel\"\r\n class=\"sme-layout-action-bar-item-height sme-button-trigger sme-button-auto-width\">\r\n <span class=\"sme-icon sme-icon-refresh\"></span>\r\n </button>\r\n <button *ngIf=\"showFilter\" (click)=\"filter.next();\" type=\"button\" role=\"button\"\r\n [title]=\"resourceStrings.filter.title\" [attr.aria-label]=\"getFilterAriaLabel()\"\r\n class=\"sme-layout-action-bar-item-height sme-button-trigger sme-button-auto-width\"\r\n [class.sme-toggled]=\"filterActive\">\r\n <span class=\"sme-icon sme-icon-filter\"></span>\r\n </button>\r\n <button *ngIf=\"showGroup\" (click)=\"group.next()\" type=\"button\" role=\"button\" [title]=\"resourceStrings.group.title\"\r\n [attr.aria-label]=\"resourceStrings.group.title\"\r\n class=\"sme-layout-action-bar-item-height sme-button-trigger sme-button-auto-width\"\r\n [class.sme-toggled]=\"groupActive\">\r\n <!-- TODO: use grouping icon when available. -->\r\n <span class=\"sme-icon sme-icon-groupedList\"></span>\r\n </button>\r\n </div>\r\n <!-- Grouping (Deprecated) -->\r\n <div class=\"sme-focus-zone\">\r\n <div *ngIf=\"showCustomFilter\" class=\"sme-margin-horizontal-sm\">\r\n <ng-content select='.sme-master-view-custom-filter'></ng-content>\r\n </div>\r\n </div>\r\n <!-- Search Box -->\r\n <form *ngIf=\"useSearch\" style=\"position: relative;\">\r\n <div class=\"sme-position-flex-none sme-layout-action-bar-item\">\r\n <ng-content select='sme-form-field[type=\"search\"]'></ng-content>\r\n </div>\r\n </form>\r\n </div>\r\n</div>\r\n<div #dataView smeMasterViewContentDirective (smeDataTableFromTemplateReady)=\"onSmeDataTableFromTemplateReady()\"\r\n [class.sme-margin-horizontal-lg]=\"shouldDataTableSlim\"\r\n [class.sme-padding-bottom-md]=\"shouldDataTableRenderWithBottomMargin\"\r\n [class.sme-arrange-overflow-hide]=\"shouldDataTableParentOverflowHide\"\r\n class=\"sme-layout-relative sme-position-flex-auto sme-arrange-stack-h sme-layout-minwidth-{{dataTableMinWidthClassString}}\"\r\n [class.sme-shadow-scrolled-content]=\"!isDataListScrolledToTop\">\r\n <ng-content></ng-content>\r\n</div>\r\n" }]
758
758
  }], function () { return [{ type: i0.Injector }, { type: i0.ElementRef }, { type: i1.DataTableDownloadService, decorators: [{
759
759
  type: Optional
760
760
  }] }, { type: i2.SplitViewComponent, decorators: [{
@@ -837,6 +837,8 @@ __decorate([
837
837
  type: Input
838
838
  }], downloadDataType: [{
839
839
  type: Input
840
+ }], refreshTooltipText: [{
841
+ type: Input
840
842
  }], downloadPrompted: [{
841
843
  type: Output
842
844
  }], downloadFinished: [{
@@ -858,4 +860,4 @@ __decorate([
858
860
  }], windowBreakpointChanged: [{
859
861
  type: Output
860
862
  }], onLayoutChanged: [], deferredOnLayoutChanged: [] }); })();
861
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFzdGVyLXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvbWFzdGVyLXZpZXcvbWFzdGVyLXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvbWFzdGVyLXZpZXcvbWFzdGVyLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFFSCxTQUFTLEVBQ1QsWUFBWSxFQUVaLFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLE1BQU0sRUFDTixRQUFRLEVBQ1IsS0FBSyxFQUlMLFFBQVEsRUFDUixNQUFNLEVBRU4sUUFBUSxFQUNSLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEVBQThFLENBQUM7QUFDeEcsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLDBFQUEwRSxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnRUFBZ0UsQ0FBQztBQUMxRixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sOERBQThELENBQUM7QUFDdkYsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBRXZFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUMzRixPQUFPLEVBQVUsbUJBQW1CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNoSCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUNqRyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDeEUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDakcsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0seUNBQXlDLENBQUM7Ozs7Ozs7Ozs7Ozs7OztJQ3BDNUYsOEJBQ3dDO0lBQUEsWUFBWTtJQUFBLGlCQUFLOzs7SUFBdkQsMENBQXFCLHVCQUFBO0lBQWlCLGVBQVk7SUFBWixtQ0FBWTs7O0lBSXBELCtCQUFnSDtJQUU5RyxxQkFBbUQ7SUFDckQsaUJBQU07OztJQUh3RCxpRUFBaUQ7Ozs7SUFrQnpHLGtDQUVvRjtJQUFuQyw0S0FBUyxlQUFBLGdDQUF3QixDQUFBLElBQUM7SUFDakYsNkJBQXNCO0lBQUEsWUFBNEI7SUFBQSxpQkFBSTtJQUN0RCw2QkFBNkI7SUFBQSxZQUFnQztJQUFBLGlCQUFJO0lBQ2pFLHdCQUM4QztJQUNoRCxpQkFBUzs7O0lBSmUsZUFBNEI7SUFBNUIsbURBQTRCO0lBQ3JCLGVBQWdDO0lBQWhDLHVEQUFnQztJQUUzRCxlQUF1QztJQUF2Qyw0REFBdUM7Ozs7SUFLM0Msa0NBRXFFO0lBRmxDLDRLQUFTLGVBQUEsdUNBQStCLENBQUEsSUFBQztJQUcxRSwyQkFBZ0Q7SUFDbEQsaUJBQVM7OztJQUZQLG9EQUFvQzs7OztJQUd0QyxrQ0FHOEU7SUFIN0Msc0tBQVMsZUFBQSwyQkFBbUIsQ0FBQSxJQUFFO0lBSTdELDJCQUFvRDtJQUN0RCxpQkFBUzs7O0lBRlAsd0RBQXdDO0lBRnhDLGlFQUE0QztJQUFDLHlEQUF3Qzs7OztJQUt2RixrQ0FHcUY7SUFGbkYsc0tBQVMsZUFBQSw4QkFBc0IsQ0FBQSxJQUFDO0lBR2hDLDJCQUErQztJQUNqRCxpQkFBUzs7O0lBSnNELDREQUF1QztJQUR2RCxzREFBcUMsNkNBQUE7Ozs7SUFNcEYsa0NBR3FDO0lBSFYsc0tBQVMsZUFBQSxxQkFBYSxDQUFBLElBQUU7SUFJakQsMkJBQThDO0lBQ2hELGlCQUFTOzs7SUFGUCxrREFBa0M7SUFGbEMsMkRBQXNDO0lBQUMseURBQXdDOzs7O0lBS2pGLGtDQUdvQztJQUhWLHNLQUFTLGVBQUEsb0JBQVksQ0FBQSxJQUFDO0lBSzlDLDJCQUFtRDtJQUNyRCxpQkFBUzs7O0lBSFAsaURBQWlDO0lBSDBDLDBEQUFxQztJQUNoSCxnRUFBK0M7OztJQVNqRCwrQkFBK0Q7SUFDN0QscUJBQWlFO0lBQ25FLGlCQUFNOzs7SUFHUixnQ0FBb0QsY0FBQTtJQUVoRCxxQkFBZ0U7SUFDbEUsaUJBQU0sRUFBQTs7OztBRDlCWixNQUFNLE9BQU8sbUJBQW9CLFNBQVEsbUJBQW1CO0lBc1V4RCxZQUNJLFFBQWtCLEVBQ1gsV0FBdUIsRUFDVix3QkFBa0QsRUFDbEQsU0FBNkIsRUFDN0IsY0FBOEIsRUFDRyxNQUFjO1FBRW5FLCtIQUErSDtRQUMvSCx5RkFBeUY7UUFDekYsOEdBQThHO1FBQzlHLDREQUE0RDtRQUM1RCwrSEFBK0g7UUFDL0gsa0NBQWtDO1FBQ2xDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQVpULGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBQ1YsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUNsRCxjQUFTLEdBQVQsU0FBUyxDQUFvQjtRQUM3QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUF0U3REOztXQUVHO1FBQ0ksb0JBQWUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO1FBRXRFOztXQUVHO1FBQ0ksa0JBQWEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBd0RoRTs7V0FFRztRQUNhLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFFbkM7O1dBRUc7UUFDYSxXQUFNLEdBQUcsRUFBRSxDQUFDO1FBRTVCOztXQUVHO1FBQ2EsVUFBSyxHQUFHLENBQUMsQ0FBQztRQUUxQjs7V0FFRztRQUNhLGtCQUFhLEdBQUcsSUFBSSxDQUFDO1FBRXJDOztXQUVHO1FBQ2EscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBRXpDOztXQUVHO1FBQ2EsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBRTNDOzs7V0FHRztRQUNhLGlDQUE0QixHQUFHLEtBQUssQ0FBQztRQUVyRDs7V0FFRztRQUNhLHVCQUFrQixHQUFHLEtBQUssQ0FBQztRQUUzQzs7V0FFRztRQUNhLGdCQUFXLEdBQUcsSUFBSSxDQUFDO1FBRW5DOztXQUVHO1FBQ2EsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFFdkM7O1dBRUc7UUFDYSxzQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFFekM7O1dBRUc7UUFDYSxlQUFVLEdBQUcsSUFBSSxDQUFDO1FBRWxDOztXQUVHO1FBQ2EsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFFckM7O1dBRUc7UUFDYSxtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUV2Qzs7V0FFRztRQUNhLHNCQUFpQixHQUFHLEtBQUssQ0FBQztRQWUxQzs7V0FFRztRQUVJLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQXFCakQ7O1dBRUc7UUFDYSxnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUVwQzs7V0FFRztRQUVJLHNCQUFpQixHQUFHLElBQUksQ0FBQztRQUVoQzs7V0FFRztRQUVJLDBCQUFxQixHQUFHLElBQUksQ0FBQztRQVFwQzs7V0FFRztRQUVJLHFCQUFnQixHQUE4Qix5QkFBeUIsQ0FBQyxHQUFHLENBQUM7UUFFbkY7O1dBRUc7UUFFSSxxQkFBZ0IsR0FBdUIsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUV2RTs7V0FFRztRQUVJLHFCQUFnQixHQUF1QixJQUFJLFlBQVksRUFBUSxDQUFDO1FBRXZFOztXQUVHO1FBRUksaUJBQVksR0FBdUIsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUVuRTs7V0FFRztRQUVJLFlBQU8sR0FBdUIsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUU5RDs7V0FFRztRQUVJLFdBQU0sR0FBdUIsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUU3RDs7V0FFRztRQUVJLFVBQUssR0FBdUIsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUU1RDs7V0FFRztRQUVJLG1CQUFjLEdBQXVCLElBQUksWUFBWSxFQUFRLENBQUM7UUFFckU7O1dBRUc7UUFFSSxrQ0FBNkIsR0FBMEIsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUUxRjs7O1VBR0U7UUFFSyxrQkFBYSxHQUF1QixJQUFJLFlBQVksRUFBUSxDQUFDO1FBRXBFOztXQUVHO1FBRUksNEJBQXVCLEdBQXVCLElBQUksWUFBWSxFQUFRLENBQUM7UUFFdkUsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUNsQixzQkFBaUIsR0FBRyxDQUFDLENBQUM7UUFDdEIsbUJBQWMsR0FBRyxDQUFDLENBQUM7UUFDbkIsNEJBQXVCLEdBQUcsSUFBSSxDQUFDO1FBYzlCLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBbUIxQixxQkFBcUI7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxRQUFRLENBQUMsNkJBQTZCLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsUUFBUSxDQUFDLDZCQUE2QixDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLFFBQVEsR0FBRyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBRXhELElBQUksTUFBTSxFQUFFO1lBQ1IsSUFBSSxDQUFDLGlDQUFpQyxHQUFHLElBQUksaUNBQWlDLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDdkYsbUVBQW1FO1lBQ25FLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hGLG1HQUFtRztZQUNuRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsdUJBQXVCLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUUxRyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztTQUNsQztJQUNMLENBQUM7SUFsV0Q7O09BRUc7SUFDSCxJQUFXLDRCQUE0QjtRQUNuQyxPQUFPLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyw0QkFBNEIsQ0FBQztJQUMvRSxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLG9DQUFvQztRQUMzQyxPQUFPLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyxvQ0FBb0MsQ0FBQztJQUN2RixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLGlDQUFpQztRQUN4QyxPQUFPLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyxpQ0FBaUMsQ0FBQztJQUNwRixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLG1CQUFtQjtRQUMxQixPQUFPLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyxtQkFBbUIsQ0FBQztJQUN0RSxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLHFDQUFxQztRQUM1QyxPQUFPLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyxxQ0FBcUMsQ0FBQztJQUN4RixDQUFDO0lBMENEOztPQUVHO0lBQ0gsSUFDVyxZQUFZO1FBQ25CLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDO0lBQ3JDLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsWUFBWSxDQUFDLEtBQXlCO1FBQzdDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUM7UUFDbEMsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3BCLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO1NBQ3RDO0lBQ0wsQ0FBQztJQW9GRDs7T0FFRztJQUNILElBQW9CLFNBQVMsQ0FBQyxTQUFjO1FBQ3hDLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztRQUNkLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUMxQixLQUFLLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztTQUM1QjthQUFNLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRTtZQUNwQixLQUFLLEdBQUcsQ0FBQyxDQUFDO1NBQ2I7UUFDRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO0lBQ25DLENBQUM7SUFjRDs7T0FFRztJQUNILElBQ1csZ0JBQWdCLENBQUMsS0FBYztRQUN0QyxJQUFJLENBQUMsd0JBQXdCLEdBQUcsS0FBSyxDQUFDO0lBQzFDLENBQUM7SUFDRCxJQUFXLGdCQUFnQjtRQUN2QixPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQztJQUN6QyxDQUFDO0lBcUdEOztPQUVHO0lBQ0gsSUFBYyxhQUFhO1FBQ3ZCLE9BQU8scUJBQXFCLENBQUM7SUFDakMsQ0FBQztJQXlDRDs7T0FFRztJQUNJLGVBQWU7UUFDbEIsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNaLDBIQUEwSDtZQUMxSCw4RUFBOEU7WUFDOUUsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztZQUN0QyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDeEIsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDaEIsSUFBSSxDQUFDLGdDQUFnQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQzlFLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRTtvQkFDbkYsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2lCQUN2QjtZQUNMLENBQUMsQ0FBQyxDQUFDO1NBQ047UUFFRCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDbkIsSUFBSSxDQUFDLDZCQUE2QixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3pFLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUU7b0JBQzdCLElBQUksb0JBQW9CLEdBQUcsSUFBSSxDQUFDO29CQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFO3dCQUMvQixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFOzRCQUM3RSxvQkFBb0IsR0FBRyxLQUFLLENBQUM7eUJBQ2hDO3FCQUNKO3lCQUFNO3dCQUNILE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO3dCQUNqRixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFOzRCQUM3RCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFDaEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxDQUFDOzRCQUNsRCxJQUFJLE1BQU0sS0FBSyxjQUFjLEVBQUU7Z0NBQzNCLG9CQUFvQixHQUFHLEtBQUssQ0FBQztnQ0FDN0IsTUFBTTs2QkFDVDt5QkFDSjtxQkFDSjtvQkFFRCxJQUFJLG9CQUFvQixFQUFFO3dCQUN0QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO3FCQUM5QjtpQkFDSjtZQUNMLENBQUMsQ0FBQyxDQUFDO1NBQ047SUFDTCxDQUFDO0lBRU0sUUFBUTtRQUNYLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBRTFCLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQ3hCLElBQUksQ0FBQyxRQUFRLENBQUMsOEJBQThCLENBQUMsQ0FBQztZQUM5QyxJQUFJLENBQUMsUUFBUSxDQUFDLHlCQUF5QixDQUFDLENBQUM7U0FDNUM7UUFFRCxJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztRQUNuQyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDYixJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ25HO2FBQU07WUFDSCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztTQUNqRjtJQUNMLENBQUM7SUFFRCw0R0FBNEc7SUFDNUcsMEdBQTBHO0lBQzFHLG1IQUFtSDtJQUNuSCw0RkFBNEY7SUFDckYsV0FBVyxDQUFDLE9BQXNCO1FBQ3JDLElBQUksa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztRQUV6RSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDYixrQkFBa0IsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDMUY7UUFFRCxJQUFJLE9BQU8sQ0FBQyxjQUFjLEVBQUUsWUFBWSxLQUFLLElBQUksRUFBRTtZQUMvQyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1NBQ3hGO2FBQU07WUFDSCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1NBQ3ZGO0lBQ0wsQ0FBQztJQUVNLFdBQVc7UUFDZCxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLGdDQUFnQyxFQUFFO1lBQ3pELElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUN2RDtRQUVELElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsNkJBQTZCLEVBQUU7WUFDekQsSUFBSSxDQUFDLDZCQUE2QixDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ3BEO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNJLCtCQUErQjtRQUNsQyxJQUFJLENBQUMsNkJBQTZCLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDOUMsQ0FBQztJQUVEOzs7T0FHRztJQUVLLGVBQWU7UUFDbkIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7T0FFRztJQUVLLHVCQUF1QjtRQUMzQixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVEOzs7T0FHRztJQUNJLHVCQUF1QixDQUFDLE1BQU07UUFDakMsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUU7WUFDakYsT0FBTztTQUNWO1FBRUQsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRXhCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBRTNCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUU3QixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFO1lBQ2hELE9BQU8sQ0FBQyxHQUFHLENBQUM7Z0JBQ1IsS0FBSyxFQUFFLFFBQVEsQ0FBQyxPQUFPO2dCQUN2QixPQUFPLEVBQUUsNkVBQTZFO2dCQUN0RixNQUFNLEVBQUUsK0NBQStDO2FBQzFELENBQUMsQ0FBQztZQUVILE9BQU87U0FDVjtRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsNEJBQTRCLEVBQUU7WUFDcEMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7U0FDN0I7UUFFRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVEOzs7T0FHRztJQUNJLGtCQUFrQixDQUFDLGlCQUF1QjtRQUM3QyxJQUFJO1lBQ0EsSUFBSSxDQUFDLHdCQUF3QixDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUM1RSxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztZQUNoQyxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztTQUMzRztRQUFDLE9BQU8sS0FBSyxFQUFFO1lBQ1osT0FBTyxDQUFDLEdBQUcsQ0FBQztnQkFDUixLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUs7Z0JBQ3JCLE9BQU8sRUFBRSx1QkFBdUIsS0FBSyxHQUFHO2dCQUN4QyxNQUFNLEVBQUUsK0NBQStDO2FBQzFELENBQUMsQ0FBQztTQUNOO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNJLHlCQUF5QjtRQUM1QixJQUFJLENBQUMsaUNBQWlDLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDeEgsQ0FBQztJQUVEOztPQUVHO0lBQ0ksWUFBWTtRQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUU7WUFDaEQsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUM7UUFFL0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1FBQ2hELElBQUksSUFBSSxDQUFDLGlDQUFpQyxDQUFDLGlCQUFpQixFQUFFO1lBQzFELElBQUksQ0FBQyxRQUFRLENBQUMsNkJBQTZCLENBQUMsQ0FBQztTQUNoRDtRQUVELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVNLFNBQVM7UUFDWixJQUFJLElBQUksQ0FBQyxxQkFBcUIsRUFBRTtZQUM1QixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7Z0JBQ25CLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7YUFDckQ7aUJBQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO2dCQUMxQixJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2FBQ3JEO1NBQ0o7SUFDTCxDQUFDO0lBRU0sZ0JBQWdCLENBQUMsS0FBaUI7UUFDckMsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLGtCQUFrQixDQUFjLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvRCxJQUFJLElBQUksRUFBRTtZQUNOLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUNoQjtRQUNELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVEOzs7T0FHRztJQUNJLGdCQUFnQjtRQUNuQixPQUFPLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzRyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksb0JBQW9CO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFRDs7O09BR0c7SUFDSSx3QkFBd0I7UUFDM0IsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVEOzs7T0FHRztJQUNJLGtCQUFrQjtRQUNyQixPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUN6RyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNqRCxDQUFDO0lBRU0sd0JBQXdCO1FBQzNCLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUs7WUFDM0QsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ3JHLENBQUM7SUFFRDs7T0FFRztJQUNJLGVBQWU7UUFDbEIsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDekIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQzdDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ksb0JBQW9CO1FBQ3ZCLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUNyQixPQUFPO1NBQ1Y7UUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7O09BR0c7SUFDTyxXQUFXO1FBQ2pCLE9BQU87WUFDSCxXQUFXLEVBQUUsRUFBRTtZQUNmLGlCQUFpQixFQUFFLEVBQUU7WUFDckIsY0FBYyxFQUFFLEVBQUU7U0FDckIsQ0FBQztJQUNOLENBQUM7SUFFTyx5QkFBeUIsQ0FBQyxlQUFtQztRQUNqRSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDaEIsSUFBSSxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7WUFDNUIsZ0JBQWdCLEdBQUcsZUFBZSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsMEJBQTBCLEVBQUUsQ0FBQyxDQUFDO1lBRS9GLE1BQU0sZUFBZSxHQUFHLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQztZQUUzQyxJQUFJLGVBQWUsSUFBSSxnQkFBZ0IsS0FBSyxJQUFJLENBQUMsb0JBQW9CLEVBQUU7Z0JBQ25FLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7b0JBQ3RFLFVBQVUsQ0FBQyxHQUFHLEVBQUU7d0JBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFOzRCQUM1QixJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDO3lCQUMvQjtvQkFDTCxDQUFDLENBQUMsQ0FBQztpQkFDTjthQUNKO1lBRUQsSUFBSSxDQUFDLG9CQUFvQixHQUFHLGdCQUFnQixDQUFDO1NBQ2hEO0lBQ0wsQ0FBQztJQUVPLDJCQUEyQjtRQUMvQixJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtZQUMzQixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQ2IsSUFBSSxDQUFDLG9CQUFvQixDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7YUFDakU7aUJBQU0sSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO2dCQUM1QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMvRyxJQUFJLFdBQVcsRUFBRTtvQkFDYixJQUFJLENBQUMsb0JBQW9CLENBQUMsY0FBYyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUM7aUJBQ2hFO2FBQ0o7U0FDSjtJQUNMLENBQUM7O3lHQS9wQlEsbUJBQW1CLGlQQTRVUSxtQkFBbUI7cUdBNVU5QyxtQkFBbUI7O29DQXdEZCxrQkFBa0I7b0NBd0JsQixrQkFBa0I7Ozs7Ozs7Ozs7O3VCQU5yQiwwQkFBMEI7Ozs7Ozs2dENBOUUxQjtZQUNQLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUMsR0FBRyxFQUFFLENBQUMsbUJBQW1CLEVBQUMsRUFBRTtTQUN2Rjs7UUMzQ0wsa0VBQ3lEO1FBQ3pELHdDQUF3RDtRQUFwQyxvSEFBaUIscUJBQWlCLElBQUM7UUFDckQsMkNBQTJFO1FBQzdFLGlCQUFhO1FBQ2Isb0VBR007UUFDTixpQ0FFaUY7UUFFL0Usa0JBQTZEO1FBRTdELDhCQUNtSCxhQUFBLFlBQUE7UUFLTCxhQUNuRjtRQUFBLGlCQUFJO1FBQzNCLDZFQU9TO1FBQ1gsaUJBQU07UUFFTixnQ0FBa0Q7UUFDaEQsNkVBSVM7UUFDVCw2RUFLUztRQUNULDZFQUtTO1FBQ1QsNkVBS1M7UUFDVCw2RUFNUztRQUNYLGlCQUFNO1FBRU4sZ0NBQTRCO1FBQzFCLHVFQUVNO1FBQ1IsaUJBQU07UUFFTix5RUFJTztRQUNULGlCQUFNLEVBQUE7UUFFUixvQ0FLaUU7UUFMcEIsOElBQWlDLHFDQUFpQyxJQUFDO1FBTTVHLHNCQUF5QjtRQUM3QixpQkFBTTs7O1FBdEZtRyxpQ0FBWTtRQUc5RSxlQUFhO1FBQWIsMkJBQWE7UUFFOUMsZUFBdUI7UUFBdkIsNENBQXVCO1FBSzNCLGVBQWlEO1FBQWpELDhEQUFpRCx3RUFBQTtRQUtPLGVBQWlEO1FBQWpELDhEQUFpRCx5Q0FBQSxvRUFBQTtRQUtyRyxlQUF3RTtRQUF4RSx5RkFBd0U7UUFDdkQsZUFBMkI7UUFBM0IsNkNBQTJCO1FBQThELGVBQ25GO1FBRG1GLDRDQUNuRjtRQUdwQixlQUE0QztRQUE1QyxxRUFBNEM7UUFTdEMsZUFBd0I7UUFBeEIsNkNBQXdCO1FBS3hCLGVBQXNCO1FBQXRCLDJDQUFzQjtRQU1ILGVBQWlCO1FBQWpCLHNDQUFpQjtRQU1wQyxlQUFnQjtRQUFoQixxQ0FBZ0I7UUFNaEIsZUFBZTtRQUFmLG9DQUFlO1FBVWxCLGVBQXNCO1FBQXRCLDJDQUFzQjtRQUt2QixlQUFlO1FBQWYsb0NBQWU7UUFXeEIsZUFBMkg7UUFBM0gsc0pBQTJIO1FBSDNILG1FQUFzRCxvRUFBQSxvRUFBQSw2REFBQTs7QUQwYXBEO0lBQUMsS0FBSyxFQUFFOzs7OzBEQUdQO0FBS0Q7SUFBQyxRQUFRLEVBQUU7Ozs7a0VBR1Y7dUZBeGRRLG1CQUFtQjtjQVAvQixTQUFTOzJCQUNJLGlCQUFpQixhQUVoQjtvQkFDUCxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFDLEdBQUcsRUFBRSxvQkFBb0IsRUFBQyxFQUFFO2lCQUN2Rjs7c0JBMlVJLFFBQVE7O3NCQUNSLFFBQVE7O3NCQUNSLFFBQVE7O3NCQUNSLFFBQVE7O3NCQUFJLFFBQVE7O3NCQUFJLE1BQU07dUJBQUMsbUJBQW1CO3dCQXpSaEQsYUFBYTtrQkFEbkIsWUFBWTttQkFBQyxRQUFRO1lBT2Ysa0JBQWtCO2tCQUR4QixZQUFZO21CQUFDLGtCQUFrQjtZQU96QixnQkFBZ0I7a0JBRHRCLFNBQVM7bUJBQUMsV0FBVztZQU9mLFFBQVE7a0JBRGQsU0FBUzttQkFBQyxVQUFVO1lBT2QsNkJBQTZCO2tCQURuQyxTQUFTO21CQUFDLDBCQUEwQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtZQU83QyxZQUFZO2tCQUR0QixZQUFZO21CQUFDLGtCQUFrQjtZQW1CekIsWUFBWTtrQkFEbEIsWUFBWTttQkFBQyxjQUFjO1lBTVosVUFBVTtrQkFBekIsS0FBSztZQUtVLE1BQU07a0JBQXJCLEtBQUs7WUFLVSxLQUFLO2tCQUFwQixLQUFLO1lBS1UsYUFBYTtrQkFBNUIsS0FBSztZQUtVLGdCQUFnQjtrQkFBL0IsS0FBSztZQUtVLGtCQUFrQjtrQkFBakMsS0FBSztZQU1VLDRCQUE0QjtrQkFBM0MsS0FBSztZQUtVLGtCQUFrQjtrQkFBakMsS0FBSztZQUtVLFdBQVc7a0JBQTFCLEtBQUs7WUFLVSxjQUFjO2tCQUE3QixLQUFLO1lBS1UsaUJBQWlCO2tCQUFoQyxLQUFLO1lBS1UsVUFBVTtrQkFBekIsS0FBSztZQUtVLFlBQVk7a0JBQTNCLEtBQUs7WUFLVSxjQUFjO2tCQUE3QixLQUFLO1lBS1UsaUJBQWlCO2tCQUFoQyxLQUFLO1lBS2MsU0FBUztrQkFBNUIsS0FBSztZQWNDLGVBQWU7a0JBRHJCLE1BQU07WUFPQSx1QkFBdUI7a0JBRDdCLEtBQUs7WUFPSyxnQkFBZ0I7a0JBRDFCLEtBQUs7WUFhVSxXQUFXO2tCQUExQixLQUFLO1lBTUMsaUJBQWlCO2tCQUR2QixLQUFLO1lBT0MscUJBQXFCO2tCQUQzQixLQUFLO1lBT0MsU0FBUztrQkFEZixLQUFLO1lBT0MsZ0JBQWdCO2tCQUR0QixLQUFLO1lBT0MsZ0JBQWdCO2tCQUR0QixNQUFNO1lBT0EsZ0JBQWdCO2tCQUR0QixNQUFNO1lBT0EsWUFBWTtrQkFEbEIsTUFBTTtZQU9BLE9BQU87a0JBRGIsTUFBTTtZQU9BLE1BQU07a0JBRFosTUFBTTtZQU9BLEtBQUs7a0JBRFgsTUFBTTtZQU9BLGNBQWM7a0JBRHBCLE1BQU07WUFPQSw2QkFBNkI7a0JBRG5DLE1BQU07WUFRQSxhQUFhO2tCQURuQixNQUFNO1lBT0EsdUJBQXVCO2tCQUQ3QixNQUFNO1lBZ0tDLGVBQWUsTUFRZix1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgQWZ0ZXJWaWV3SW5pdCxcclxuICAgIENvbXBvbmVudCxcclxuICAgIENvbnRlbnRDaGlsZCxcclxuICAgIERvQ2hlY2ssXHJcbiAgICBFbGVtZW50UmVmLFxyXG4gICAgRXZlbnRFbWl0dGVyLFxyXG4gICAgZm9yd2FyZFJlZixcclxuICAgIEluamVjdCxcclxuICAgIEluamVjdG9yLFxyXG4gICAgSW5wdXQsXHJcbiAgICBPbkNoYW5nZXMsXHJcbiAgICBPbkRlc3Ryb3ksXHJcbiAgICBPbkluaXQsXHJcbiAgICBPcHRpb25hbCxcclxuICAgIE91dHB1dCxcclxuICAgIFNpbXBsZUNoYW5nZXMsXHJcbiAgICBTa2lwU2VsZixcclxuICAgIFZpZXdDaGlsZFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEZWJvdW5jZSB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvYmFzZS9kZWNvcmF0b3JzL2RlYm91bmNlLmRlY29yYXRvcnMnO1xyXG5pbXBvcnQgeyBZaWVsZCB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvYmFzZS9kZWNvcmF0b3JzL3lpZWxkLmRlY29yYXRvcic7XHJcbmltcG9ydCB7IExvZ0xldmVsIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9kaWFnbm9zdGljcy9sb2ctbGV2ZWwnO1xyXG5pbXBvcnQgeyBMb2dnaW5nIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9kaWFnbm9zdGljcy9sb2dnaW5nJztcclxuaW1wb3J0IHsgRG9tIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9kb20vZG9tJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEFjdGlvbkJhckNvbXBvbmVudCB9IGZyb20gJy4uL2FjdGlvbnMvY29udGFpbmVycy9hY3Rpb24tYmFyL2FjdGlvbi1iYXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTGF5b3V0LCBTTUVfTEFZT1VUX1BST1ZJREVSIH0gZnJvbSAnLi4vY29tbW9uL2xheW91dCc7XHJcbmltcG9ydCB7IFNwYWNlckJhc2VEaXJlY3RpdmUgfSBmcm9tICcuLi9jb21tb24vc3BhY2VyLWJhc2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRGF0YVRhYmxlRG93bmxvYWREYXRhVHlwZSwgRGF0YVRhYmxlRG93bmxvYWRTZXJ2aWNlIH0gZnJvbSAnLi4vZGF0YS10YWJsZS9kYXRhLXRhYmxlLWRvd25sb2FkLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEYXRhVGFibGVDb21wb25lbnQsIFRyZWVUYWJsZUNvbXBvbmVudCB9IGZyb20gJy4uL2RhdGEtdGFibGUvZGF0YS10YWJsZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTZWFyY2hGb3JtRmllbGRDb21wb25lbnQgfSBmcm9tICcuLi9mb3JtL2Zvcm0tZmllbGQvc2VhcmNoL3NlYXJjaC1mb3JtLWZpZWxkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFBpdm90Q29tcG9uZW50IH0gZnJvbSAnLi4vcGl2b3QvcGl2b3QuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU3BsaXRWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi4vc3BsaXQtdmlldy9zcGxpdC12aWV3LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE1hc3RlclZpZXdDb250ZW50RGlyZWN0aXZlIH0gZnJvbSAnLi9tYXN0ZXItdmlldy1jb250ZW50L21hc3Rlci12aWV3LWNvbnRlbnQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTWFzdGVyVmlld1Jlc3BvbnNpdmVXaW5kb3dNYW5hZ2VyIH0gZnJvbSAnLi9tYXN0ZXItdmlldy1yZXNwb25zaXZlLXdpbmRvdy1tYW5hZ2VyJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdzbWUtbWFzdGVyLXZpZXcnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL21hc3Rlci12aWV3LmNvbXBvbmVudC5odG1sJyxcclxuICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgIHsgcHJvdmlkZTogU01FX0xBWU9VVF9QUk9WSURFUiwgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTWFzdGVyVmlld0NvbXBvbmVudCkgfVxyXG4gICAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTWFzdGVyVmlld0NvbXBvbmVudCBleHRlbmRzIFNwYWNlckJhc2VEaXJlY3RpdmUgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBEb0NoZWNrLCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0IHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHRlciBmb3IgZGF0YSB0YWJsZSBtaW5pbXVtIHdpZHRoIGNsYXNzIGluIHN0cmluZy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBkYXRhVGFibGVNaW5XaWR0aENsYXNzU3RyaW5nKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1hc3RlclZpZXdSZXNwb25zaXZlV2luZG93TWFuYWdlci5kYXRhVGFibGVNaW5XaWR0aENsYXNzU3RyaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0dGVyIGZvciB3aGV0aGVyIHRvIHJlbmRlciB0aGUgc2VhcmNoIGJveCBiYXNlZCBvbiB3aW5kb3cgc2l6ZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBzZWFyY2hCb3hBdXRvV3JhcE9uV2luZG93U2l6ZUNoYW5nZXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWFzdGVyVmlld1Jlc3BvbnNpdmVXaW5kb3dNYW5hZ2VyLnNlYXJjaEJveEF1dG9XcmFwT25XaW5kb3dTaXplQ2hhbmdlcztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHRlciBmb3Igd2hldGhlciB0byBzZXQgdGhlIG92ZXJmbG93IG9yIG5vdCBiYXNlZCBvbiB3aW5kb3cgc2l6ZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBzaG91bGREYXRhVGFibGVQYXJlbnRPdmVyZmxvd0hpZGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWFzdGVyVmlld1Jlc3BvbnNpdmVXaW5kb3dNYW5hZ2VyLnNob3VsZERhdGFUYWJsZVBhcmVudE92ZXJmbG93SGlkZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHRlciBmb3Igd2hldGhlciB0aGUgdGFibGUgd291bGQgYmUgcmVuZGVyZWQgd2l0aCBwYWRkaW5nIGhvcml6b250YWxseS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBzaG91bGREYXRhVGFibGVTbGltKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1hc3RlclZpZXdSZXNwb25zaXZlV2luZG93TWFuYWdlci5zaG91bGREYXRhVGFibGVTbGltO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0dGVyIGZvciB3aGV0aGVyIHRlaCB0YWJsZSB3b3VsZCBiZSByZW5kZXJlZCB3aXRoIGJvdHRvbSBtYXJnaW4uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgc2hvdWxkRGF0YVRhYmxlUmVuZGVyV2l0aEJvdHRvbU1hcmdpbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tYXN0ZXJWaWV3UmVzcG9uc2l2ZVdpbmRvd01hbmFnZXIuc2hvdWxkRGF0YVRhYmxlUmVuZGVyV2l0aEJvdHRvbU1hcmdpbjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBsb2NhbGl6YXRpb24gc3RyaW5ncyBvYmplY3QgZm9yIG1hc3RlciB2aWV3LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgcmVzb3VyY2VTdHJpbmdzID0gdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLk1hc3RlclZpZXc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbG9jYWxpemF0aW9uIHN0cmluZ3Mgb2JqZWN0IGZyb20gYW5ndWxhciBjb21tb24uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjb21tb25TdHJpbmdzID0gdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkNvbW1vbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBjb250ZW50IGNoaWxkIHJlZmVyZW5jZSBmb3IgdGhlIHNlYXJjaCBlbGVtZW50LlxyXG4gICAgICovXHJcbiAgICBAQ29udGVudENoaWxkKCdzZWFyY2gnKVxyXG4gICAgcHVibGljIHNlYXJjaEVsZW1lbnQ6IFNlYXJjaEZvcm1GaWVsZENvbXBvbmVudDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBjb250ZW50IGNoaWxkIHJlZmVyZW5jZSBmb3IgdGhlIGFjdGlvbiBiYXIgZWxlbWVudC5cclxuICAgICAqL1xyXG4gICAgQENvbnRlbnRDaGlsZChBY3Rpb25CYXJDb21wb25lbnQpXHJcbiAgICBwdWJsaWMgYWN0aW9uQmFyQ29tcG9uZW50OiBBY3Rpb25CYXJDb21wb25lbnQ7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgdmlldyBjaGlsZCByZWZlcmVuY2UgZm9yIHRoZSBtYWluIGNvbnRlbnQgZGl2IHdyYXBwZXIuXHJcbiAgICAgKi9cclxuICAgIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicpXHJcbiAgICBwdWJsaWMgY29udGFpbmVyRWxlbWVudDogRWxlbWVudFJlZjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB2aWV3IGNoaWxkIHJlZmVyZW5jZSBmb3IgdGhlIG1haW4gZGF0YSB2aWV3IHRoYXQgbm9ybWFsbHkgY29udGFpbnMgYSBkYXRhLXRhYmxlIGNvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgQFZpZXdDaGlsZCgnZGF0YVZpZXcnKVxyXG4gICAgcHVibGljIGRhdGFWaWV3OiBFbGVtZW50UmVmO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGRpcmVjdGl2ZSBjb21wb25lbnQgZm9yIHRoZSBtYXN0ZXIgdmlldyBkYXRhIHZpZXcgd2hlcmUgbm9ybWFsbHkgYSBkYXRhLXRhYmxlIGV4aXN0cy5cclxuICAgICAqL1xyXG4gICAgQFZpZXdDaGlsZChNYXN0ZXJWaWV3Q29udGVudERpcmVjdGl2ZSwgeyBzdGF0aWM6IGZhbHNlIH0pXHJcbiAgICBwdWJsaWMgc21lTWFzdGVyVmlld0NvbnRlbnREaXJlY3RpdmU6IE1hc3RlclZpZXdDb250ZW50RGlyZWN0aXZlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGdldHRlciBjb250ZW50IGNoaWxkIHJlZmVyZW5jZSBmb3IgdGhlIGRhdGEtdGFibGUgY29tcG9uZW50LlxyXG4gICAgICovXHJcbiAgICBAQ29udGVudENoaWxkKERhdGFUYWJsZUNvbXBvbmVudClcclxuICAgIHB1YmxpYyBnZXQgc21lRGF0YVRhYmxlKCk6IERhdGFUYWJsZUNvbXBvbmVudCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxTbWVEYXRhVGFibGU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgc2V0dGVyIGZvciB0aGUgZGF0YSB0YWJsZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldCBzbWVEYXRhVGFibGUodmFsdWU6IERhdGFUYWJsZUNvbXBvbmVudCkge1xyXG4gICAgICAgIHRoaXMuaW50ZXJuYWxTbWVEYXRhVGFibGUgPSB2YWx1ZTtcclxuICAgICAgICBpZiAodGhpcy5pc0luaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dXBEYXRhVGFibGVBY2Nlc3NpYmlsaXR5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGNvbnRlbnQgY2hpbGQgcmVmZXJlbmNlIGZvciB0aGUgdHJlZSB0YWJsZSBjb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIEBDb250ZW50Q2hpbGQoJ3NtZVRyZWVUYWJsZScpXHJcbiAgICBwdWJsaWMgc21lVHJlZVRhYmxlOiBUcmVlVGFibGVDb21wb25lbnQ7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcnVlIGlzIHRvIHNob3cgdGhlIGhlYWRlci5cclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgcHVibGljIGhpZGVIZWFkZXIgPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB2YWx1ZSBvZiB0aGUgaGVhZGVyIGluIHN0cmluZy5cclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgcHVibGljIGhlYWRlciA9ICcnO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHRvdGFsIGNvdW50IG9mIHRhYmxlIGl0ZW1zIGluIG51bWJlci5cclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgcHVibGljIHRvdGFsID0gMDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEl0IGRldGVybWluZXMgd2hldGhlciB0byBzaG93IHRoZSBudW1iZXIgb2Ygc2VsZWN0aW9ucy5cclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgcHVibGljIHNob3dTZWxlY3Rpb24gPSB0cnVlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXQgZGV0ZXJtaW5lIHdoZXRoZXIgdG8gc2hvdyB0aGUgY29sdW1uIHBpY2tlci5cclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgcHVibGljIHNob3dDb2x1bW5QaWNrZXIgPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRydWUgaXMgdG8gc2hvdyB0aGUgZG93bmxvYWQgYnV0dG9uLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgc2hvd0Rvd25sb2FkQnV0dG9uID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJdCBkZXRlcm1pbmVzIHdoZXRoZXIgZXh0cmEgY29udGV4dCBwYXJhbWV0ZXIgd2lsbCBiZSB1c2VkIGZvciB0aGUgZG93bmxvYWQuXHJcbiAgICAgKiBUaGlzIHVzdWFsbHkgYXNzb2NpYXRlcyB3aXRoIHRoZSAnZG93bmxvYWQnIGVtaXR0ZXIuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBnZXREb3dubG9hZENvbnRleHRQYXJhbWV0ZXJzID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJdCBkZXRlcm1pbmVzIHRoZSBzdGF0ZSB3aGVuIHRoZSBjb2x1bW4gcGlja2VyIGRpYWxvZyBpcyBvcGVuZWQuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBjb2x1bW5QaWNrZXJBY3RpdmUgPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEl0IGRldGVybWluZXMgd2hldGhlciB0byBzaG93IHRoZSByZWZyZXNoIGJ1dHRvbi5cclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgcHVibGljIHNob3dSZWZyZXNoID0gdHJ1ZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEl0IGRldGVybWluZXMgd2hldGhlciB0byBkaXNhYmxlIHRvIHJlZnJlc2ggYnV0dG9uLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgZGlzYWJsZVJlZnJlc2ggPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEl0IGRldGVybWluZXMgdGhlIGRhdGEgdGFibGUgbWluIHdpZHRoIGxldmVsLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgZGF0YVRhYmxlTWluV2lkdGggPSAnbWQnO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHNob3cgdGhlIGZpbHRlciBidXR0b24uXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBzaG93RmlsdGVyID0gdHJ1ZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEl0IGRldGVybWluZXMgd2hldGhlciB0aGUgZmlsdGVyIGRpYWxvZyBpcyBvcGVuZWQuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBmaWx0ZXJBY3RpdmUgPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEl0IGRldGVybWluZXMgdGhlcmUgaXMgYSB3b3JrZXIgZG93bmxvYWRpbmcgaW4gcHJvZ3Jlc3MuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBkb3dubG9hZEFjdGl2ZSA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHNob3cgdXAgdGhlIHF1ZXJ5IGVkaXRvciBleHRlbnNpb24uXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBlbmFibGVRdWVyeUVkaXRvciA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0dGVyIGZvciB0aGUgc2VsZWN0aW9uIGNvdW50IGZvciB0aGUgZGF0YS10YWJsZS5cclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgcHVibGljIHNldCBzZWxlY3Rpb24oc2VsZWN0aW9uOiBhbnkpIHtcclxuICAgICAgICBsZXQgY291bnQgPSAwO1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNlbGVjdGlvbikpIHtcclxuICAgICAgICAgICAgY291bnQgPSBzZWxlY3Rpb24ubGVuZ3RoO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoISFzZWxlY3Rpb24pIHtcclxuICAgICAgICAgICAgY291bnQgPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbUNvdW50ID0gY291bnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZXZlbnQgZW1pdHRlciB3aGVuIHNlbGVjdGlvbihzKSBjaGFuZ2VkLlxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyBzZWxlY3Rpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEl0IGRldGVybWluZXMgd2hldGhlciB0aGUgZGF0YS10YWJsZSBzaG91bGQgcmVzcGVjdCB0aGUgc2FtZSBpdGVtIGFzIHR3byBkaWZmZXJlbnQgcm93cy5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyByZXF1aXJlRGF0YUl0ZW1VbmlxdWVJZDogKGl0ZW06IGFueSkgPT4gc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgNy8xMy8xOC4gUGxlYXNlIHVzZSBbc2hvd0dyb3VwXSwgW2dyb3VwQWN0aXZlXSwgYW5kIChncm91cCkgaW5zdGVhZFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNldCBzaG93Q3VzdG9tRmlsdGVyKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5pbnRlcm5hbFNob3dDdXN0b21GaWx0ZXIgPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgc2hvd0N1c3RvbUZpbHRlcigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbFNob3dDdXN0b21GaWx0ZXI7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpbnRlcm5hbFNob3dDdXN0b21GaWx0ZXI6IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJdCBkZXRlcm1pbmVzIHRoZSBncm91cCBidXR0b24gaGFzIGJlZW4gY2xpY2tlZC5cclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgcHVibGljIGdyb3VwQWN0aXZlID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiB0aGUgdmFsdWUgaXMgZmFsc2UsIHRoZSBtYXN0ZXIgdmlldyBhbHdheXMgcmVuZGVycyBpbiByZWxhdGl2ZSBsYXlvdXQgcmVnYXJkbGVzcyBvZiB3aW5kb3cgc2l6ZSBjaGFuZ2VzLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHN0cmV0Y2hUb0Fic29sdXRlID0gdHJ1ZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEl0IGRldGVybWluZXMgd2hldGhlciB0byBleHBhbmQgdGhlIGRldGFpbHMgcGFuZSBvbiBmaXJzdCB0aW1lIGxhbmRpbmcgb24gdGhlIHBhZ2UuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgYXV0b0V4cGFuZERldGFpbHNQYW5lID0gdHJ1ZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEl0IGRldGVybWluZXMgd2hldGhlciB0byBzaG93IHVwIHRoZSBncm91cCBidXR0b24uXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc2hvd0dyb3VwPzogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEl0IGRldGVybWluZXMgdGhlIGRvd25sb2FkIGRhdGEgdHlwZS5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBkb3dubG9hZERhdGFUeXBlOiBEYXRhVGFibGVEb3dubG9hZERhdGFUeXBlID0gRGF0YVRhYmxlRG93bmxvYWREYXRhVHlwZS5DU1Y7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZXZlbnQgZW1pdHRlciBmb3IgZG93bmxvYWQgaGFzIGJlZW4gcHJvbXB0ZWQuXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcHVibGljIGRvd25sb2FkUHJvbXB0ZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBldmVudCBlbWl0dGVyIGZvciB3aGVuIHRoZSBkb3dubG9hZCBoYXMgYmVlbiBmaW5pc2hlZC5cclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgZG93bmxvYWRGaW5pc2hlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGV2ZW50IGVtaXR0ZXIgZm9yIHRoZSBjb2x1bW4gcGlja2VyIHRvIHJlbmRlciBhIGRpYWxvZy5cclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgY29sdW1uUGlja2VyOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZXZlbnQgZW1pdHRlciBmb3IgdGhlIHJlZnJlc2hpbmcgZnVuY3Rpb24gdG8gaGFwcGVuLlxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyByZWZyZXNoOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZXZlbnQgZW1pdHRlciBmb3IgdGhlIGZpbHRlciBkaWFsb2cgdG8gb3Blbi5cclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgZmlsdGVyOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZXZlbnQgZW1pdHRlciBmb3IgdGhlIGdyb3VwaW5nIGRpYWxvZyB0byBvcGVuLlxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyBncm91cDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGV2ZW50IGVtaXR0ZXIgZm9yIHRoZSBjbGVhciBzZWxlY3Rpb24gZnJvbSB0aGUgdGFibGUgdG8gaGFwcGVuLlxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyBjbGVhclNlbGVjdGlvbjogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGV2ZW50IGVtaXR0ZXIgZm9yIHdoZW4gdGhlIGRhdGEtdmlldyBoYXMgYmVlbiByZWFkeSBhZnRlciBuZ0FmdGVyVmlld0luaXQgbGlmZSBjeWNsZS5cclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgc21lRGF0YVRhYmxlRnJvbVRlbXBsYXRlUmVhZHk6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEl0IGltcGxlbWVudHMgdGhlIElMYXlvdXQgaW50ZXJmYWNlLiBJdCdzIHRyaWdnZXJlZCB3aGVuIHRoZSBsYXlvdXQgaXMgY2hhbmdlZC5cclxuICAgICAqIEl0J3MgdXNlZCB0byB0ZWxsIHRoZSBjaGlsZCBjb21wb25lbnRzIHRvIGNvb3JkaW5hdGUgd2l0aCB0aGUgbGF5b3V0IGNoYW5nZS5cclxuICAgICovXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyBsYXlvdXRDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgTGF5b3V0IGludGVyZmFjZVxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyB3aW5kb3dCcmVha3BvaW50Q2hhbmdlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICAgIHB1YmxpYyB1c2VTZWFyY2ggPSBmYWxzZTtcclxuICAgIHB1YmxpYyBzZWxlY3RlZEl0ZW1Db3VudCA9IDA7XHJcbiAgICBwdWJsaWMgZGF0YVZpZXdIZWlnaHQgPSAwO1xyXG4gICAgcHVibGljIGlzRGF0YUxpc3RTY3JvbGxlZFRvVG9wID0gdHJ1ZTtcclxuICAgIHB1YmxpYyBoZWFkZXJJZDogc3RyaW5nO1xyXG4gICAgcHVibGljIHJlZnJlc2hCdXR0b25BcmlhTGFiZWw6IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBzb3VyY2UgbmFtZSB0byB1c2UgZm9yIGxvZ2dpbmdcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGdldCBsb2dTb3VyY2VOYW1lKCkge1xyXG4gICAgICAgIHJldHVybiAnTWFzdGVyVmlld0NvbXBvbmVudCc7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzcGxpdFZpZXdQYW5lVG9nZ2xlZFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG4gICAgcHJpdmF0ZSBkYXRhVGFibGVPbkZpbHRlclN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG4gICAgcHJpdmF0ZSBtYXN0ZXJWaWV3UmVzcG9uc2l2ZVdpbmRvd01hbmFnZXI6IE1hc3RlclZpZXdSZXNwb25zaXZlV2luZG93TWFuYWdlcjtcclxuICAgIHByaXZhdGUgaXNJbml0aWFsaXplZCA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBjdXJyZW50RGF0YVNlbGVjdGlvbjogYW55O1xyXG4gICAgcHJpdmF0ZSBpbnRlcm5hbFNtZURhdGFUYWJsZTogRGF0YVRhYmxlQ29tcG9uZW50O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvcixcclxuICAgICAgICBwdWJsaWMgaG9zdEVsZW1lbnQ6IEVsZW1lbnRSZWYsXHJcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBkYXRhVGFibGVEb3dubG9hZFNlcnZpY2U6IERhdGFUYWJsZURvd25sb2FkU2VydmljZSxcclxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHNwbGl0VmlldzogU3BsaXRWaWV3Q29tcG9uZW50LFxyXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgcGl2b3RDb21wb25lbnQ6IFBpdm90Q29tcG9uZW50LFxyXG4gICAgICAgIEBTa2lwU2VsZigpIEBPcHRpb25hbCgpIEBJbmplY3QoU01FX0xBWU9VVF9QUk9WSURFUikgbGF5b3V0OiBMYXlvdXRcclxuICAgICkge1xyXG4gICAgICAgIC8vIEFmdGVyIHRoZSBkaXNjdXNzaW9uLCB0aGUgcGxhbiBpcyBzdGlsbCBoYXZlIG1hc3RlciB2aWV3IHRvIGNvb3JkaW5hdGUgd2l0aCBzcGxpdCB2aWV3IGFzIHdlbGwgYXMgdHJlZSB0YWJsZSBhbmQgZGF0YSB0YWJsZS5cclxuICAgICAgICAvLyBJdCdzIGEgbGl0dGxlIHRyaWNreSB0byBsZXQgbWFzdGVyIHZpZXcgdG8gdGFsayB0byBpdHMgcGFyZW50IHdoaWNoIGlzIHRoZSBzcGxpdCB2aWV3LlxyXG4gICAgICAgIC8vIEJ1dCB3ZSBkbyBuZWVkIGEgY29tcG9uZW50IHRvIGltcGxlbWVudCB0aGUgY29tbW9uIGJlaGF2aW9yIG9uIHRoZSBVSSB0byBhdm9pZCBkdXBsaWNhdGUgY29kZSBpbiBlYWNoIHRvb2wuXHJcbiAgICAgICAgLy8gQXQgdGhpcyBtb21lbnQsIG1hc3RlciB2aWV3IGlzIHRoZSBtb3N0IHByb3BlciBjb21wb25lbnQuXHJcbiAgICAgICAgLy8gTG9uZyB0ZXJtIHdpc2UsIHdlIHdpbGwgZmlndXJlIG91dCBhIGJldHRlciBjb21wb25lbnQgc2l0dGluZyBpbiB0aGUgdG9wIGxldmVsIG9mIHRoZSBVSSB0byBjb29yZGluYXRlIHdpdGggb3RoZXIgY29tcG9uZW50c1xyXG4gICAgICAgIC8vIGFuZCBpbXBsZW1lbnQgY29tbW9uIGJlaGF2aW9ycy5cclxuICAgICAgICBzdXBlcihpbmplY3Rvcik7XHJcbiAgICAgICAgLy8gc2V0dXAgaG9zdCBjbGFzc2VzXHJcbiAgICAgICAgdGhpcy5hZGRDbGFzcygnc21lLWFycmFuZ2Utc3RhY2stdicpO1xyXG4gICAgICAgIHRoaXMuYWRkQ2xhc3MoJ3NtZS1hcnJhbmdlLW92ZXJmbG93LWhpZGUteScpO1xyXG4gICAgICAgIHRoaXMuYWRkQ2xhc3MoJ3NtZS1hcnJhbmdlLW92ZXJmbG93LWF1dG8teCcpO1xyXG4gICAgICAgIHRoaXMuaGVhZGVySWQgPSAnbWFzdGVyLXZpZXctaGVhZGVyJyArIHRoaXMuY29tcG9uZW50SWQ7XHJcblxyXG4gICAgICAgIGlmIChsYXlvdXQpIHtcclxuICAgICAgICAgICAgdGhpcy5tYXN0ZXJWaWV3UmVzcG9uc2l2ZVdpbmRvd01hbmFnZXIgPSBuZXcgTWFzdGVyVmlld1Jlc3BvbnNpdmVXaW5kb3dNYW5hZ2VyKGxheW91dCk7XHJcbiAgICAgICAgICAgIC8vIG9uIHBhcmVudCBsYXlvdXQgY2hhbmdlcywgcmUtZW1pdCB0aGUgbGF5b3V0IGNoYW5nZSB0byBvdXIgZXZlbnRcclxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2gobGF5b3V0LmxheW91dENoYW5nZWQuc3Vic2NyaWJlKCgoKSA9PiB0aGlzLm9uTGF5b3V0Q2hhbmdlZCgpKSkpO1xyXG4gICAgICAgICAgICAvLyBvbiB3aW5kb3cgYnJlYWsgcG9pbnQgY2hhbmdlcywgZW1pdCB0aGUgZXZlbnQgYWJvdXQgY3JpdGljYWwgY2xhc3NlcyBhbmQgc3R5bGluZyB1cGRhdGVzIHNpZ25hbC5cclxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2gobGF5b3V0LndpbmRvd0JyZWFrcG9pbnRDaGFuZ2VkLnN1YnNjcmliZSgoKSA9PiB0aGlzLm9uV2luZG93QnJlYWtwb2ludENoYW5nZWQoKSkpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5kZWZlcnJlZE9uTGF5b3V0Q2hhbmdlZCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBtZXRob2QgdG8gcnVuIGFmdGVyIHRoZSBjb21wb25lbnQgdmlldyBpbml0aWFsaXplZFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAvLyBUaGUgXCJuZ0FmdGVyVmlld0luaXRcIiBpcyBzdGlsbCBpbiBjdXJyZW50IGNoZWNrIGN5Y2xlIHNvIHdlIHNob3VsZCBub3QgdXBkYXRlIHRoZSBmb2xsb3dpbmcgVUkgaW5mb3JtYXRpb24gaW1tZWRpYXRlbHkuXHJcbiAgICAgICAgICAgIC8vIFNvIHdlIHVzZSBzZXRUaW1lb3V0IHRvIGRlZmVyIHRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucyB0byBuZXh0IGNoZWNrIGN5Y2xlLlxyXG4gICAgICAgICAgICB0aGlzLnVzZVNlYXJjaCA9ICEhdGhpcy5zZWFyY2hFbGVtZW50O1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUxheW91dCgpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5zcGxpdFZpZXcpIHtcclxuICAgICAgICAgICAgdGhpcy5zcGxpdFZpZXdQYW5lVG9nZ2xlZFN1YnNjcmlwdGlvbiA9IHRoaXMuc3BsaXRWaWV3LnBhbmVUb2dnbGVkLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRhVmlldyAmJiB0aGlzLmRhdGFWaWV3SGVpZ2h0ICE9PSB0aGlzLmRhdGFWaWV3Lm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVMYXlvdXQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5zbWVEYXRhVGFibGUpIHtcclxuICAgICAgICAgICAgdGhpcy5kYXRhVGFibGVPbkZpbHRlclN1YnNjcmlwdGlvbiA9IHRoaXMuc21lRGF0YVRhYmxlLmZpbHRlci5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc21lRGF0YVRhYmxlLnNlbGVjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBzaG91bGRDbGVhclNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnJlcXVpcmVEYXRhSXRlbVVuaXF1ZUlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNtZURhdGFUYWJsZS5yZW5kZXJlZEl0ZW1zLmluZGV4T2YodGhpcy5zbWVEYXRhVGFibGUuc2VsZWN0aW9uKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZENsZWFyU2VsZWN0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW1JZCA9IHRoaXMucmVxdWlyZURhdGFJdGVtVW5pcXVlSWQodGhpcy5zbWVEYXRhVGFibGUuc2VsZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNtZURhdGFUYWJsZS5yZW5kZXJlZEl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5zbWVEYXRhVGFibGUucmVuZGVyZWRJdGVtc1tpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1JZCA9IHRoaXMucmVxdWlyZURhdGFJdGVtVW5pcXVlSWQoaXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbUlkID09PSBzZWxlY3RlZEl0ZW1JZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZENsZWFyU2VsZWN0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRDbGVhclNlbGVjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uLmVtaXQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pc0luaXRpYWxpemVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc3RyZXRjaFRvQWJzb2x1dGUpIHtcclxuICAgICAgICAgICAgdGhpcy5hZGRDbGFzcygnc21lLWxheW91dC1hYnNvbHV0ZS1waG9uZS11cCcpO1xyXG4gICAgICAgICAgICB0aGlzLmFkZENsYXNzKCdzbWUtcG9zaXRpb24taW5zZXQtbm9uZScpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZXR1cERhdGFUYWJsZUFjY2Vzc2liaWxpdHkoKTtcclxuICAgICAgICBpZiAodGhpcy5oZWFkZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5yZWZyZXNoQnV0dG9uQXJpYUxhYmVsID0gdGhpcy5yZXNvdXJjZVN0cmluZ3MucmVmcmVzaC5hcmlhTGFiZWwuaGVhZGVyLmZvcm1hdCh0aGlzLmhlYWRlcik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5yZWZyZXNoQnV0dG9uQXJpYUxhYmVsID0gdGhpcy5yZXNvdXJjZVN0cmluZ3MucmVmcmVzaC5hcmlhTGFiZWwubm9IZWFkZXI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIE5vdGU6IHRoaXMgaXMgYSBiYW5kYWlkIGZpeCB0byB0aGlzIGJ1ZzogaHR0cHM6Ly9taWNyb3NvZnQudmlzdWFsc3R1ZGlvLmNvbS9PUy9fd29ya2l0ZW1zL2VkaXQvMzMwMzE3OTEvLlxyXG4gICAgLy8gVGhlIHNjcmVlbiByZWFkZXIgZG9lc24ndCBhbm5vdW5jZSB3aGVuIGFyaWEtZGlzYWJsZWQgY2hhbmdlcyBhbmQgdGhlIGV4YWN0IHJlYXNvbiBmb3IgdGhhdCBpcyB1bmtub3duLlxyXG4gICAgLy8gSXQncyBub3QgYmVzdCBwcmFjdGljZSB0byBiZSBhZGp1c3RpbmcgdGhlIGFyaWEtbGFiZWwgdG8gYWNoaWV2ZSB0aGUgZWZmZWN0IGJ1dCB0aGF0J3MgdGhlIGJlc3Qgd2UgY2FtZSB1cCB3aXRoLlxyXG4gICAgLy8gVE9ETzogZml4IHRoZSByZWFsIGlzc3VlIHdoeSB0aGUgc2NyZWVuIHJlYWRlciBkb2Vzbid0IGFubm91bmNlIHRoZSBhcmlhLWRpc2FibGVkIGNoYW5nZXNcclxuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IHJlZnJlc2hCdXR0b25MYWJlbCA9IHRoaXMucmVzb3VyY2VTdHJpbmdzLnJlZnJlc2guYXJpYUxhYmVsLm5vSGVhZGVyO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5oZWFkZXIpIHtcclxuICAgICAgICAgICAgcmVmcmVzaEJ1dHRvbkxhYmVsID0gdGhpcy5yZXNvdXJjZVN0cmluZ3MucmVmcmVzaC5hcmlhTGFiZWwuaGVhZGVyLmZvcm1hdCh0aGlzLmhlYWRlcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY2hhbmdlcy5kaXNhYmxlUmVmcmVzaD8uY3VycmVudFZhbHVlID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaEJ1dHRvbkFyaWFMYWJlbCA9IGAke3RoaXMuY29tbW9uU3RyaW5ncy5kaXNhYmxlZH0gJHtyZWZyZXNoQnV0dG9uTGFiZWx9YDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hCdXR0b25BcmlhTGFiZWwgPSBgJHt0aGlzLmNvbW1vblN0cmluZ3MuZW5hYmxlZH0gJHtyZWZyZXNoQnV0dG9uTGFiZWx9YDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLnNwbGl0VmlldyAmJiB0aGlzLnNwbGl0Vmlld1BhbmVUb2dnbGVkU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3BsaXRWaWV3UGFuZVRvZ2dsZWRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnNtZURhdGFUYWJsZSAmJiB0aGlzLmRhdGFUYWJsZU9uRmlsdGVyU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YVRhYmxlT25GaWx0ZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFbWl0IHRoZSBldmVudCBmcm9tIHRoZSBtYXN0ZXIgdmlldyBmb3IgdGhlIHJlYWRpbmVzcyBvZiB0aGUgdGVtcGxhdGVzIHBhc3NlZCBpbiB0byB0aGUgbWFzdGVyIHZpZXcgY29udGVudC5cclxuICAgICAqIFRoaXMgY2FuIGJldHRlciBoYW5kbGluZyB0aGUgcmVuZGVyaW5nIGxpZmUgY3ljbGUgZnJvbSBjaGlsZCB0byBwYXJlbnQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvblNtZURhdGFUYWJsZUZyb21UZW1wbGF0ZVJlYWR5KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc21lRGF0YVRhYmxlRnJvbVRlbXBsYXRlUmVhZHkuZW1pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG9uIHdpbmRvdyBicmVha3BvaW50IGNoYW5nZWQgaGFuZGxlci5cclxuICAgICAqIEFkZGluZyB5aWVsZCBmb3IgY29tcG9uZW50IHRvIGdldCBFbGVtZW50UmVmIGFmdGVyIGluaXRpYWxpemF0aW9uLlxyXG4gICAgICovXHJcbiAgICBAWWllbGQoKVxyXG4gICAgcHJpdmF0ZSBvbkxheW91dENoYW5nZWQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVMYXlvdXQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBkZWZlcnJlZCBsYXlvdXQgY2hhbmdlZCBoYW5kbGVyLlxyXG4gICAgICovXHJcbiAgICBARGVib3VuY2UoKVxyXG4gICAgcHJpdmF0ZSBkZWZlcnJlZE9uTGF5b3V0Q2hhbmdlZCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9uTGF5b3V0Q2hhbmdlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGltcGxlbWVudGF0aW9uIGFmdGVyIGludGVyYWN0aW9uIHdpdGggdGhlIGRvd25sb2FkIGJ1dHRvbiBmcm9tIHRoZSBtYXN0ZXIgdmlldy5cclxuICAgICAqIEBwYXJhbSAkZXZlbnQgdGhlIGJ1dHRvbiBjbGlja2VkIGV2ZW50LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25Eb3dubG9hZEJ1dHRvbkNsaWNrZWQoJGV2ZW50KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCEkZXZlbnQgfHwgdGhpcy5kb3dubG9hZEFjdGl2ZSB8fCB0aGlzLnNtZURhdGFUYWJsZSAmJiB0aGlzLnNtZURhdGFUYWJsZS5pc0J1c3kpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgICAgIHRoaXMuZG93bmxvYWRBY3RpdmUgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLmRvd25sb2FkUHJvbXB0ZWQubmV4dCgpO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuc21lRGF0YVRhYmxlIHx8ICF0aGlzLnNtZURhdGFUYWJsZS5pdGVtcykge1xyXG4gICAgICAgICAgICBMb2dnaW5nLmxvZyh7XHJcbiAgICAgICAgICAgICAgICBsZXZlbDogTG9nTGV2ZWwuV2FybmluZyxcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBEYXRhIHRhYmxlIGlzIG5vdCBkZXRlY3RlZCBpbiB0aGUgbWFzdGVyIHZpZXcsIGN1c3RvbSB0ZW1wbGF0ZSBtYXkgYmUgdXNlZC5gLFxyXG4gICAgICAgICAgICAgICAgc291cmNlOiAnTWFzdGVyVmlld0NvbXBvbmVudC5vbkRvd25sb2FkQnV0dG9uQ2xpY2tlZCgpJ1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5nZXREb3dubG9hZENvbnRleHRQYXJhbWV0ZXJzKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25Eb3dubG9hZFByb21wdGVkKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmRvd25sb2FkRmluaXNoZWQubmV4dCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGZ1bmN0aW9uIGZvciBleGVjdXRpbmcgdGhlIGRvd25sb2FkIGNvbnRleHQgZnJvbSBkYXRhLXRhYmxlLlxyXG4gICAgICogQHBhcmFtIGNvbnRleHRQYXJhbWV0ZXJzIHRoZSBjb250ZXh0IHBhcmFtZXRlciBwYXNzZWQgaW4gZnJvbSBleHRlbnNpb24gZnJvbSBvdXRlciBzY29wZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG9uRG93bmxvYWRQcm9tcHRlZChjb250ZXh0UGFyYW1ldGVycz86IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YVRhYmxlRG93bmxvYWRTZXJ2aWNlLmRvd25sb2FkRGF0YUZpbmlzaGVkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZG93bmxvYWRBY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YVRhYmxlRG93bmxvYWRTZXJ2aWNlLmRvd25sb2FkRGF0YSh0aGlzLnNtZURhdGFUYWJsZSwgdGhpcy5kb3dubG9hZERhdGFUeXBlLCBjb250ZXh0UGFyYW1ldGVycyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgTG9nZ2luZy5sb2coe1xyXG4gICAgICAgICAgICAgICAgbGV2ZWw6IExvZ0xldmVsLkVycm9yLFxyXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYEZhaWxlZCB0byBkb3dubG9hZCAnJHtlcnJvcn0nYCxcclxuICAgICAgICAgICAgICAgIHNvdXJjZTogJ01hc3RlclZpZXdDb21wb25lbnQub25Eb3dubG9hZEJ1dHRvbkNsaWNrZWQoKSdcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG9uIHdpbmRvdyBicmVha3BvaW50IGNoYW5nZWQgaGFuZGxlci5cclxuICAgICAqIEFkZGluZyB5aWVsZCBmb3IgY29tcG9uZW50IHRvIGdldCBFbGVtZW50UmVmIGFmdGVyIGluaXRpYWxpemF0aW9uLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25XaW5kb3dCcmVha3BvaW50Q2hhbmdlZCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm1hc3RlclZpZXdSZXNwb25zaXZlV2luZG93TWFuYWdlci5vbldpbmRvd1NpemVDaGFuZ2VkKHRoaXMuaG9zdEVsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQsIHRoaXMuc3RyZXRjaFRvQWJzb2x1dGUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXQgdXBkYXRlcyB0aGUgbWFzdGVyIHZpZXcncyBsYXlvdXQgYW5kIGVtaXRzIGxheW91dCBjaGFuZ2VkIGV2ZW50IHRvIGNoaWxkcmVuLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdXBkYXRlTGF5b3V0KCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5kYXRhVmlldyB8fCAhdGhpcy5kYXRhVmlldy5uYXRpdmVFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZGF0YVZpZXdIZWlnaHQgPSB0aGlzLmRhdGFWaWV3Lm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0O1xyXG5cclxuICAgICAgICB0aGlzLnJlbW92ZUNsYXNzKCdzbWUtYXJyYW5nZS1vdmVyZmxvdy1oaWRlLXknKTtcclxuICAgICAgICBpZiAodGhpcy5tYXN0ZXJWaWV3UmVzcG9uc2l2ZVdpbmRvd01hbmFnZXIuc2hvdWxkSGlkZVlTY3JvbGwpIHtcclxuICAgICAgICAgICAgdGhpcy5hZGRDbGFzcygnc21lLWFycmFuZ2Utb3ZlcmZsb3ctaGlkZS15Jyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxheW91dENoYW5nZWQuZW1pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBuZ0RvQ2hlY2soKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuYXV0b0V4cGFuZERldGFpbHNQYW5lKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNtZURhdGFUYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVEZXRhaWxQYW5lRXhwYW5kaW5nKHRoaXMuc21lRGF0YVRhYmxlKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNtZVRyZWVUYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVEZXRhaWxQYW5lRXhwYW5kaW5nKHRoaXMuc21lVHJlZVRhYmxlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZG9DbGVhclNlbGVjdGlvbihldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IG5leHQgPSBEb20uZ2V0TmV4dFpvbmVFbGVtZW50KDxIVE1MRWxlbWVudD5ldmVudC50YXJnZXQpO1xyXG4gICAgICAgIGlmIChuZXh0KSB7XHJcbiAgICAgICAgICAgIG5leHQuZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbi5uZXh0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBpdGVtIGNvdW50IGluIHN0cmluZy5cclxuICAgICAqIEByZXR1cm5zIHN0cmluZyB2YWx1ZSBmb3IgdGhlIHRvdGFsIGNvdW50LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0SXRlbUNvdW50VGV4dCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRvdGFsID09PSAxID8gdGhpcy5yZXNvdXJjZVN0cmluZ3Mub25lSXRlbSA6IHRoaXMucmVzb3VyY2VTdHJpbmdzLml0ZW1zLmZvcm1hdCh0aGlzLnRvdGFsKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgc2VsZWN0ZWQgaXRlbSBjb3VudCBpbiBzdHJpbmcuXHJcbiAgICAgKiBAcmV0dXJucyBzdHJpbmcgdmFsdWUgZm9yIHRoZSBzZWxlY3RlZCBjb3VudC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldFNlbGVjdGVkQ291bnRUZXh0KCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzb3VyY2VTdHJpbmdzLnNlbGVjdGVkLmZvcm1hdCh0aGlzLnNlbGVjdGVkSXRlbUNvdW50KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgc2VsZWN0ZWQgaXRlbSBjb3VudCBpbiBzdHJpbmcgZm9yIGFyaWEgc3VwcG9ydC5cclxuICAgICAqIEByZXR1cm5zIHN0cmluZyB2YWx1ZSBmb3IgdGhlIHNlbGVjdGVkIGNvdW50LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0U2VsZWN0ZWRDb3VudEFyaWFUZXh0KCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzb3VyY2VTdHJpbmdzLnNlbGVjdGVkQXJpYS5mb3JtYXQodGhpcy5zZWxlY3RlZEl0ZW1Db3VudCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGZpbHRlciBpdGVtIGNvdW50IGluIHN0cmluZyBmb3IgYXJpYSBzdXBwb3J0LlxyXG4gICAgICogQHJldHVybnMgc3RyaW5nIHZhbHVlIGZvciB0aGUgZmlsdGVyZWQgY291bnQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRGaWx0ZXJBcmlhTGFiZWwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gYCR7dGhpcy5yZXNvdXJjZVN0cmluZ3MuZmlsdGVyLnRpdGxlfSAke3RoaXMudG90YWwgPyB0aGlzLnJlc291cmNlU3RyaW5ncy5yZXN1bHRzLmZvcm1hdCh0aGlzLnRvdGFsKSA6XHJcbiAgICAgICAgICAgIHRoaXMucmVzb3VyY2VTdHJpbmdzLnJlc3VsdHMuZm9ybWF0KDApfWA7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldENvbHVtblBpY2tlckFyaWFMYWJlbCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBgJHt0aGlzLnJlc291cmNlU3RyaW5ncy5jb2x1bW5QaWNrZXIudGl0bGV9ICR7dGhpcy50b3RhbFxyXG4gICAgICAgICAgICA/IHRoaXMucmVzb3VyY2VTdHJpbmdzLnJlc3VsdHMuZm9ybWF0KHRoaXMudG90YWwpIDogdGhpcy5yZXNvdXJjZVN0cmluZ3MucmVzdWx0cy5mb3JtYXQoMCl9YDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZSB0aGUgYWN0aW9uIGJhclxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdXBkYXRlQWN0aW9uQmFyKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmFjdGlvbkJhckNvbXBvbmVudCkge1xyXG4gICAgICAgICAgICB0aGlzLmFjdGlvbkJhckNvbXBvbmVudC51cGRhdGVBY3Rpb25CYXIoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIYW5kbGVzIGNsaWNraW5nIG9uIHRoZSByZWZyZXNoIGJ1dHRvblxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgcmVmcmVzaEJ1dHRvbkNsaWNrZWQoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZVJlZnJlc2gpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yZWZyZXNoLm5leHQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgdGhlIGlkQmFnIHVzZWQgYnkgdGhpcyBtYXN0ZXIgdmlldyB0byBzdG9yZSB1bmlxdWUgZWxlbWVudCBpZHMuXHJcbiAgICAgKiBpZCB2YWx1ZXMgd2lsbCBiZSBhc3NpZ25lZCBiZSB0aGUgQHNlZSBNYXN0ZXJWaWV3Q29tcG9uZW50IHN1cGVyIGNsYXNzLlxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlSWRCYWcoKTogTXNmdFNtZS5TdHJpbmdNYXA8c3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgZmlsdGVyTGFiZWw6ICcnLFxyXG4gICAgICAgICAgICBjb2x1bW5QaWNrZXJMYWJlbDogJycsXHJcbiAgICAgICAgICAgIGl0ZW1Db3VudExhYmVsOiAnJ1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBoYW5kbGVEZXRhaWxQYW5lRXhwYW5kaW5nKGRhdGFWaWV3Q29udHJvbDogRGF0YVRhYmxlQ29tcG9uZW50KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuc3BsaXRWaWV3KSB7XHJcbiAgICAgICAgICAgIGxldCBuZXdEYXRhU2VsZWN0aW9uID0gbnVsbDtcclxuICAgICAgICAgICAgbmV3RGF0YVNlbGVjdGlvbiA9IGRhdGFWaWV3Q29udHJvbC5yZW5kZXJlZEl0ZW1zW2RhdGFWaWV3Q29udHJvbC5nZXRBY3RpdmVSZW5kZXJlZEl0ZW1JbmRleCgpXTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGhhc0l0ZW1TZWxlY3RlZCA9ICEhbmV3RGF0YVNlbGVjdGlvbjtcclxuXHJcbiAgICAgICAgICAgIGlmIChoYXNJdGVtU2VsZWN0ZWQgJiYgbmV3RGF0YVNlbGVjdGlvbiAhPT0gdGhpcy5jdXJyZW50RGF0YVNlbGVjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnREYXRhU2VsZWN0aW9uIHx8IHRoaXMuY3VycmVudERhdGFTZWxlY3Rpb24ubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zcGxpdFZpZXcuaXNFeHBhbmRlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGxpdFZpZXcudG9nZ2xlUGFuZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudERhdGFTZWxlY3Rpb24gPSBuZXdEYXRhU2VsZWN0aW9uO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldHVwRGF0YVRhYmxlQWNjZXNzaWJpbGl0eSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5pbnRlcm5hbFNtZURhdGFUYWJsZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5oZWFkZXIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW50ZXJuYWxTbWVEYXRhVGFibGUudGFibGVBcmlhTGFiZWxsZWRCeSA9IHRoaXMuaGVhZGVySWQ7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5waXZvdENvbXBvbmVudCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRUYWIgPSB0aGlzLnBpdm90Q29tcG9uZW50LnRhYnMudG9BcnJheSgpLmZpbHRlcihpdGVtID0+IHRoaXMucGl2b3RDb21wb25lbnQuaXNTZWxlY3RlZChpdGVtKSlbMF07XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRUYWIpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmludGVybmFsU21lRGF0YVRhYmxlLnRhYmxlQXJpYUxhYmVsID0gc2VsZWN0ZWRUYWIubGFiZWw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiPGgyIGNsYXNzPVwic21lLXBvc2l0aW9uLWZsZXgtbm9uZSBzbWUtcGFkZGluZy1zcXVpc2gtdi1sZyBzbWUtYXJyYW5nZS13b3JkLXdyYXAtYnJlYWstd29yZCBzbWUtZm9udC1oM1wiICpuZ0lmPVwiaGVhZGVyXCJcclxuICBbaGlkZGVuXT1cImhpZGVIZWFkZXJcIiBbaWRdPSdoZWFkZXJJZCc+e3sgaGVhZGVyIH19PC9oMj5cclxuPHNtZS1sYXlvdXQgI2xheW91dCAobGF5b3V0Q2hhbmdlZCk9XCJ1cGRhdGVBY3Rpb25CYXIoKVwiPlxyXG4gIDxzbWUtbGF5b3V0LWRlZmluaXRpb24gbmFtZT1cIm5hcnJvd1wiIFt1bnRpbF09XCI3NjhcIj48L3NtZS1sYXlvdXQtZGVmaW5pdGlvbj5cclxuPC9zbWUtbGF5b3V0PlxyXG48ZGl2ICpuZ0lmPVwiZW5hYmxlUXVlcnlFZGl0b3JcIiBjbGFzcz1cInNtZS1wb3NpdGlvbi1mbGV4LW5vbmVcIiBbY2xhc3Muc21lLXBhZGRpbmctaG9yaXpvbnRhbC1zbV09XCIhbm9TaWRlTWFyZ2luXCI+XHJcbiAgPCEtLSBRdWVyeSBFZGl0b3IgLS0+XHJcbiAgPG5nLWNvbnRlbnQgc2VsZWN0PSdzbWUtcXVlcnktZWRpdG9yJz48L25nLWNvbnRlbnQ+XHJcbjwvZGl2PlxyXG48ZGl2IGNsYXNzPVwic21lLXBvc2l0aW9uLWZsZXgtbm9uZSBzbWUtYXJyYW5nZS1zdGFjay1yZXZlcnNlZFwiICNjb250YWluZXJcclxuICBbY2xhc3Muc21lLXBhZGRpbmctaG9yaXpvbnRhbC1zbV09XCIhbm9TaWRlTWFyZ2luXCJcclxuICBbY2xhc3Muc21lLWFycmFuZ2Utc3RhY2staF09XCIhKGxheW91dC5jdXJyZW50TGF5b3V0RGVmaW5pdGlvbk5hbWU9PT0nbmFycm93JylcIj5cclxuICA8IS0tIEFjdGlvbnMgLS0+XHJcbiAgPG5nLWNvbnRlbnQgc2VsZWN0PSdzbWUtYWN0aW9uLWJhciwuYWN0aW9uLWJhcic+PC9uZy1jb250ZW50PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwic21lLXBvc2l0aW9uLWZsZXgtbm9uZSBzbWUtYXJyYW5nZS1zdGFjay1oXCIgW2NsYXNzLnNtZS1wYWRkaW5nLWhvcml6b250YWwtc21dPVwiIW5vU2lkZU1hcmdpblwiXHJcbiAgICBbY2xhc3Muc21lLXBhZGRpbmctbGVmdC1zbV09XCJub1NpZGVNYXJnaW5cIiBbY2xhc3Muc21lLWFycmFuZ2Utc3RhY2std3JhcF09XCJzZWFyY2hCb3hBdXRvV3JhcE9uV2luZG93U2l6ZUNoYW5nZXNcIj5cclxuICAgIDwhLS0gQ291bnRzIC0tPlxyXG4gICAgPGRpdlxyXG4gICAgICBjbGFzcz1cInNtZS1mb2N1cy16b25lIHNtZS1wb3NpdGlvbi1mbGV4LW5vbmUgc21lLWFycmFuZ2Utc3RhY2staCBzbWUtYXJyYW5nZS13cy1ub3dyYXAgc21lLXNjaGVtZS1zZWNvbmRhcnktdGV4dFwiXHJcbiAgICAgIFtjbGFzcy5zbWUtcGFkZGluZy1yaWdodC14c109XCJzZWxlY3RlZEl0ZW1Db3VudCA9PT0gMCB8fCAhc2hvd1NlbGVjdGlvblwiPlxyXG4gICAgICA8aSByb2xlPVwic3RhdHVzXCIgW2lkXT1cImlkQmFnLml0ZW1Db3VudExhYmVsXCIgY2xhc3M9XCJzbWUtbGF5b3V0LWFjdGlvbi1iYXItaXRlbSBzbWUtcGFkZGluZy1ob3Jpem9udGFsLXNtXCI+e3tcclxuICAgICAgICBnZXRJdGVtQ291bnRUZXh0KCkgfX08L2k+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHJvbGU9XCJidXR0b25cIlxyXG4gICAgICAgIGNsYXNzPVwic21lLWJ1dHRvbi10cmlnZ2VyIHNtZS1sYXlvdXQtYWN0aW9uLWJhci1pdGVtLWhlaWdodCBzbWUtc2NoZW1lLXNlY29uZGFyeS10ZXh0IHNtZS1idXR0b24tYXV0by13aWR0aFwiXHJcbiAgICAgICAgKm5nSWY9XCJzZWxlY3RlZEl0ZW1Db3VudCA+IDAgJiYgc2hvd1NlbGVjdGlvblwiIChjbGljayk9XCJkb0NsZWFyU2VsZWN0aW9uKCRldmVudClcIj5cclxuICAgICAgICA8aSBhcmlhLWhpZGRlbj1cInRydWVcIj57eyBnZXRTZWxlY3RlZENvdW50VGV4dCgpIH19PC9pPlxyXG4gICAgICAgIDxpIGNsYXNzPVwic21lLXNjcmVlbi1yZWFkZXJcIj57eyBnZXRTZWxlY3RlZENvdW50QXJpYVRleHQoKSB9fTwvaT5cclxuICAgICAgICA8aSBhcmlhLWhpZGRlbj1cInRydWVcIiBjbGFzcz1cInNtZS1pY29uIHNtZS1pY29uLWNsZWFyIHNtZS1tYXJnaW4tbGVmdC14c1wiXHJcbiAgICAgICAgICBbdGl0bGVdPVwicmVzb3VyY2VTdHJpbmdzLnNlbGVjdGVkVGl0bGVcIj48L2k+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tIENvbW1vbiBBY3Rpb25zIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cInNtZS1mb2N1cy16b25lIHNtZS1hcnJhbmdlLXdzLW5vd3JhcFwiPlxyXG4gICAgICA8YnV0dG9uICpuZ0lmPVwic2hvd0Rvd25sb2FkQnV0dG9uXCIgKGNsaWNrKT1cIm9uRG93bmxvYWRCdXR0b25DbGlja2VkKCRldmVudClcIiB0eXBlPVwiYnV0dG9uXCIgcm9sZT1cImJ1dHRvblwiXHJcbiAgICAgICAgdGl0bGU9XCJEb3dubG9hZFwiIGNsYXNzPVwic21lLWxheW91dC1hY3Rpb24tYmFyLWl0ZW0taGVpZ2h0IHNtZS1idXR0b24tdHJpZ2dlciBzbWUtYnV0dG9uLWF1dG8td2lkdGhcIlxyXG4gICAgICAgIFtjbGFzcy5zbWUtdG9nZ2xlZF09XCJkb3dubG9hZEFjdGl2ZVwiIGRhdGEtdXRhLWlkPVwiZG93bmxvYWQtYnV0dG9uXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzbWUtaWNvbiBzbWUtaWNvbi1kb3dubG9hZFwiPjwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gKm5nSWY9XCJzaG93Q29sdW1uUGlja2VyXCIgKGNsaWNrKT1cImNvbHVtblBpY2tlci5uZXh0KCk7XCIgdHlwZT1cImJ1dHRvblwiIHJvbGU9XCJidXR0b25cIlxyXG4gICAgICAgIFt0aXRsZV09XCJyZXNvdXJjZVN0cmluZ3MuY29sdW1uUGlja2VyLnRpdGxlXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJnZXRGaWx0ZXJBcmlhTGFiZWwoKVwiXHJcbiAgICAgICAgY2xhc3M9XCJzbWUtbGF5b3V0LWFjdGlvbi1iYXItaXRlbS1oZWlnaHQgc21lLWJ1dHRvbi10cmlnZ2VyIHNtZS1idXR0b24tYXV0by13aWR0aFwiXHJcbiAgICAgICAgW2NsYXNzLnNtZS10b2dnbGVkXT1cImNvbHVtblBpY2tlckFjdGl2ZVwiIGRhdGEtdXRhLWlkPVwiY29sdW1uLXBpY2tlci1idXR0b25cIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInNtZS1pY29uIHNtZS1pY29uLXRyaXBsZUNvbHVtblwiPjwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gYXJpYS1saXZlPVwicG9saXRlXCIgKm5nSWY9XCJzaG93UmVmcmVzaFwiIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiZGlzYWJsZVJlZnJlc2hcIlxyXG4gICAgICAgIChjbGljayk9XCJyZWZyZXNoQnV0dG9uQ2xpY2tlZCgpXCIgdHlwZT1cImJ1dHRvblwiIHJvbGU9XCJidXR0b25cIiBbdGl0bGVdPVwicmVzb3VyY2VTdHJpbmdzLnJlZnJlc2gudGl0bGVcIlxyXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwicmVmcmVzaEJ1dHRvbkFyaWFMYWJlbFwiXHJcbiAgICAgICAgY2xhc3M9XCJzbWUtbGF5b3V0LWFjdGlvbi1iYXItaXRlbS1oZWlnaHQgc21lLWJ1dHRvbi10cmlnZ2VyIHNtZS1idXR0b24tYXV0by13aWR0aFwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwic21lLWljb24gc21lLWljb24tcmVmcmVzaFwiPjwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gKm5nSWY9XCJzaG93RmlsdGVyXCIgKGNsaWNrKT1cImZpbHRlci5uZXh0KCk7XCIgdHlwZT1cImJ1dHRvblwiIHJvbGU9XCJidXR0b25cIlxyXG4gICAgICAgIFt0aXRsZV09XCJyZXNvdXJjZVN0cmluZ3MuZmlsdGVyLnRpdGxlXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJnZXRGaWx0ZXJBcmlhTGFiZWwoKVwiXHJcbiAgICAgICAgY2xhc3M9XCJzbWUtbGF5b3V0LWFjdGlvbi1iYXItaXRlbS1oZWlnaHQgc21lLWJ1dHRvbi10cmlnZ2VyIHNtZS1idXR0b24tYXV0by13aWR0aFwiXHJcbiAgICAgICAgW2NsYXNzLnNtZS10b2dnbGVkXT1cImZpbHRlckFjdGl2ZVwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwic21lLWljb24gc21lLWljb24tZmlsdGVyXCI+PC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiAqbmdJZj1cInNob3dHcm91cFwiIChjbGljayk9XCJncm91cC5uZXh0KClcIiB0eXBlPVwiYnV0dG9uXCIgcm9sZT1cImJ1dHRvblwiIFt0aXRsZV09XCJyZXNvdXJjZVN0cmluZ3MuZ3JvdXAudGl0bGVcIlxyXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwicmVzb3VyY2VTdHJpbmdzLmdyb3VwLnRpdGxlXCJcclxuICAgICAgICBjbGFzcz1cInNtZS1sYXlvdXQtYWN0aW9uLWJhci1pdGVtLWhlaWdodCBzbWUtYnV0dG9uLXRyaWdnZXIgc21lLWJ1dHRvbi1hdXRvLXdpZHRoXCJcclxuICAgICAgICBbY2xhc3Muc21lLXRvZ2dsZWRdPVwiZ3JvdXBBY3RpdmVcIj5cclxuICAgICAgICA8IS0tIFRPRE86IHVzZSBncm91cGluZyBpY29uIHdoZW4gYXZhaWxhYmxlLiAtLT5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInNtZS1pY29uIHNtZS1pY29uLWdyb3VwZWRMaXN0XCI+PC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSBHcm91cGluZyAoRGVwcmVjYXRlZCkgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwic21lLWZvY3VzLXpvbmVcIj5cclxuICAgICAgPGRpdiAqbmdJZj1cInNob3dDdXN0b21GaWx0ZXJcIiBjbGFzcz1cInNtZS1tYXJnaW4taG9yaXpvbnRhbC1zbVwiPlxyXG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD0nLnNtZS1tYXN0ZXItdmlldy1jdXN0b20tZmlsdGVyJz48L25nLWNvbnRlbnQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tIFNlYXJjaCBCb3ggLS0+XHJcbiAgICA8Zm9ybSAqbmdJZj1cInVzZVNlYXJjaFwiIHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlO1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic21lLXBvc2l0aW9uLWZsZXgtbm9uZSBzbWUtbGF5b3V0LWFjdGlvbi1iYXItaXRlbVwiPlxyXG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD0nc21lLWZvcm0tZmllbGRbdHlwZT1cInNlYXJjaFwiXSc+PC9uZy1jb250ZW50PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZm9ybT5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbjxkaXYgI2RhdGFWaWV3IHNtZU1hc3RlclZpZXdDb250ZW50RGlyZWN0aXZlIChzbWVEYXRhVGFibGVGcm9tVGVtcGxhdGVSZWFkeSk9XCJvblNtZURhdGFUYWJsZUZyb21UZW1wbGF0ZVJlYWR5KClcIlxyXG4gIFtjbGFzcy5zbWUtbWFyZ2luLWhvcml6b250YWwtbGddPVwic2hvdWxkRGF0YVRhYmxlU2xpbVwiXHJcbiAgW2NsYXNzLnNtZS1wYWRkaW5nLWJvdHRvbS1tZF09XCJzaG91bGREYXRhVGFibGVSZW5kZXJXaXRoQm90dG9tTWFyZ2luXCJcclxuICBbY2xhc3Muc21lLWFycmFuZ2Utb3ZlcmZsb3ctaGlkZV09XCJzaG91bGREYXRhVGFibGVQYXJlbnRPdmVyZmxvd0hpZGVcIlxyXG4gIGNsYXNzPVwic21lLWxheW91dC1yZWxhdGl2ZSBzbWUtcG9zaXRpb24tZmxleC1hdXRvIHNtZS1hcnJhbmdlLXN0YWNrLWggc21lLWxheW91dC1taW53aWR0aC17e2RhdGFUYWJsZU1pbldpZHRoQ2xhc3NTdHJpbmd9fVwiXHJcbiAgW2NsYXNzLnNtZS1zaGFkb3ctc2Nyb2xsZWQtY29udGVudF09XCIhaXNEYXRhTGlzdFNjcm9sbGVkVG9Ub3BcIj5cclxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cclxuPC9kaXY+XHJcbiJdfQ==
863
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFzdGVyLXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvbWFzdGVyLXZpZXcvbWFzdGVyLXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvbWFzdGVyLXZpZXcvbWFzdGVyLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFFSCxTQUFTLEVBQ1QsWUFBWSxFQUVaLFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLE1BQU0sRUFDTixRQUFRLEVBQ1IsS0FBSyxFQUlMLFFBQVEsRUFDUixNQUFNLEVBRU4sUUFBUSxFQUNSLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEVBQThFLENBQUM7QUFDeEcsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLDBFQUEwRSxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnRUFBZ0UsQ0FBQztBQUMxRixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sOERBQThELENBQUM7QUFDdkYsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBRXZFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUMzRixPQUFPLEVBQVUsbUJBQW1CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNoSCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsa0JB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QUFLO2tCQUFwQixLQUFLO1lBS1UsYUFBYTtrQkFBNUIsS0FBSztZQUtVLGdCQUFnQjtrQkFBL0IsS0FBSztZQUtVLGtCQUFrQjtrQkFBakMsS0FBSztZQU1VLDRCQUE0QjtrQkFBM0MsS0FBSztZQUtVLGtCQUFrQjtrQkFBakMsS0FBSztZQUtVLFdBQVc7a0JBQTFCLEtBQUs7WUFLVSxjQUFjO2tCQUE3QixLQUFLO1lBS1UsaUJBQWlCO2tCQUFoQyxLQUFLO1lBS1UsVUFBVTtrQkFBekIsS0FBSztZQUtVLFlBQVk7a0JBQTNCLEtBQUs7WUFLVSxjQUFjO2tCQUE3QixLQUFLO1lBS1UsaUJBQWlCO2tCQUFoQyxLQUFLO1lBS2MsU0FBUztrQkFBNUIsS0FBSztZQWNDLGVBQWU7a0JBRHJCLE1BQU07WUFPQSx1QkFBdUI7a0JBRDdCLEtBQUs7WUFPSyxnQkFBZ0I7a0JBRDFCLEtBQUs7WUFhVSxXQUFXO2tCQUExQixLQUFLO1lBTUMsaUJBQWlCO2tCQUR2QixLQUFLO1lBT0MscUJBQXFCO2tCQUQzQixLQUFLO1lBT0MsU0FBUztrQkFEZixLQUFLO1lBT0MsZ0JBQWdCO2tCQUR0QixLQUFLO1lBT0Msa0JBQWtCO2tCQUR4QixLQUFLO1lBT0MsZ0JBQWdCO2tCQUR0QixNQUFNO1lBT0EsZ0JBQWdCO2tCQUR0QixNQUFNO1lBT0EsWUFBWTtrQkFEbEIsTUFBTTtZQU9BLE9BQU87a0JBRGIsTUFBTTtZQU9BLE1BQU07a0JBRFosTUFBTTtZQU9BLEtBQUs7a0JBRFgsTUFBTTtZQU9BLGNBQWM7a0JBRHBCLE1BQU07WUFPQSw2QkFBNkI7a0JBRG5DLE1BQU07WUFRQSxhQUFhO2tCQURuQixNQUFNO1lBT0EsdUJBQXVCO2tCQUQ3QixNQUFNO1lBZ0tDLGVBQWUsTUFRZix1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgQWZ0ZXJWaWV3SW5pdCxcclxuICAgIENvbXBvbmVudCxcclxuICAgIENvbnRlbnRDaGlsZCxcclxuICAgIERvQ2hlY2ssXHJcbiAgICBFbGVtZW50UmVmLFxyXG4gICAgRXZlbnRFbWl0dGVyLFxyXG4gICAgZm9yd2FyZFJlZixcclxuICAgIEluamVjdCxcclxuICAgIEluamVjdG9yLFxyXG4gICAgSW5wdXQsXHJcbiAgICBPbkNoYW5nZXMsXHJcbiAgICBPbkRlc3Ryb3ksXHJcbiAgICBPbkluaXQsXHJcbiAgICBPcHRpb25hbCxcclxuICAgIE91dHB1dCxcclxuICAgIFNpbXBsZUNoYW5nZXMsXHJcbiAgICBTa2lwU2VsZixcclxuICAgIFZpZXdDaGlsZFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEZWJvdW5jZSB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvYmFzZS9kZWNvcmF0b3JzL2RlYm91bmNlLmRlY29yYXRvcnMnO1xyXG5pbXBvcnQgeyBZaWVsZCB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvYmFzZS9kZWNvcmF0b3JzL3lpZWxkLmRlY29yYXRvcic7XHJcbmltcG9ydCB7IExvZ0xldmVsIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9kaWFnbm9zdGljcy9sb2ctbGV2ZWwnO1xyXG5pbXBvcnQgeyBMb2dnaW5nIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9kaWFnbm9zdGljcy9sb2dnaW5nJztcclxuaW1wb3J0IHsgRG9tIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9kb20vZG9tJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEFjdGlvbkJhckNvbXBvbmVudCB9IGZyb20gJy4uL2FjdGlvbnMvY29udGFpbmVycy9hY3Rpb24tYmFyL2FjdGlvbi1iYXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTGF5b3V0LCBTTUVfTEFZT1VUX1BST1ZJREVSIH0gZnJvbSAnLi4vY29tbW9uL2xheW91dCc7XHJcbmltcG9ydCB7IFNwYWNlckJhc2VEaXJlY3RpdmUgfSBmcm9tICcuLi9jb21tb24vc3BhY2VyLWJhc2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRGF0YVRhYmxlRG93bmxvYWREYXRhVHlwZSwgRGF0YVRhYmxlRG93bmxvYWRTZXJ2aWNlIH0gZnJvbSAnLi4vZGF0YS10YWJsZS9kYXRhLXRhYmxlLWRvd25sb2FkLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEYXRhVGFibGVDb21wb25lbnQsIFRyZWVUYWJsZUNvbXBvbmVudCB9IGZyb20gJy4uL2RhdGEtdGFibGUvZGF0YS10YWJsZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTZWFyY2hGb3JtRmllbGRDb21wb25lbnQgfSBmcm9tICcuLi9mb3JtL2Zvcm0tZmllbGQvc2VhcmNoL3NlYXJjaC1mb3JtLWZpZWxkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFBpdm90Q29tcG9uZW50IH0gZnJvbSAnLi4vcGl2b3QvcGl2b3QuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU3BsaXRWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi4vc3BsaXQtdmlldy9zcGxpdC12aWV3LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE1hc3RlclZpZXdDb250ZW50RGlyZWN0aXZlIH0gZnJvbSAnLi9tYXN0ZXItdmlldy1jb250ZW50L21hc3Rlci12aWV3LWNvbnRlbnQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTWFzdGVyVmlld1Jlc3BvbnNpdmVXaW5kb3dNYW5hZ2VyIH0gZnJvbSAnLi9tYXN0ZXItdmlldy1yZXNwb25zaXZlLXdpbmRvdy1tYW5hZ2VyJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdzbWUtbWFzdGVyLXZpZXcnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL21hc3Rlci12aWV3LmNvbXBvbmVudC5odG1sJyxcclxuICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgIHsgcHJvdmlkZTogU01FX0xBWU9VVF9QUk9WSURFUiwgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTWFzdGVyVmlld0NvbXBvbmVudCkgfVxyXG4gICAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTWFzdGVyVmlld0NvbXBvbmVudCBleHRlbmRzIFNwYWNlckJhc2VEaXJlY3RpdmUgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBEb0NoZWNrLCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0IHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHRlciBmb3IgZGF0YSB0YWJsZSBtaW5pbXVtIHdpZHRoIGNsYXNzIGluIHN0cmluZy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBkYXRhVGFibGVNaW5XaWR0aENsYXNzU3RyaW5nKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1hc3RlclZpZXdSZXNwb25zaXZlV2luZG93TWFuYWdlci5kYXRhVGFibGVNaW5XaWR0aENsYXNzU3RyaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0dGVyIGZvciB3aGV0aGVyIHRvIHJlbmRlciB0aGUgc2VhcmNoIGJveCBiYXNlZCBvbiB3aW5kb3cgc2l6ZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBzZWFyY2hCb3hBdXRvV3JhcE9uV2luZG93U2l6ZUNoYW5nZXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWFzdGVyVmlld1Jlc3BvbnNpdmVXaW5kb3dNYW5hZ2VyLnNlYXJjaEJveEF1dG9XcmFwT25XaW5kb3dTaXplQ2hhbmdlcztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHRlciBmb3Igd2hldGhlciB0byBzZXQgdGhlIG92ZXJmbG93IG9yIG5vdCBiYXNlZCBvbiB3aW5kb3cgc2l6ZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBzaG91bGREYXRhVGFibGVQYXJlbnRPdmVyZmxvd0hpZGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWFzdGVyVmlld1Jlc3BvbnNpdmVXaW5kb3dNYW5hZ2VyLnNob3VsZERhdGFUYWJsZVBhcmVudE92ZXJmbG93SGlkZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHRlciBmb3Igd2hldGhlciB0aGUgdGFibGUgd291bGQgYmUgcmVuZGVyZWQgd2l0aCBwYWRkaW5nIGhvcml6b250YWxseS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBzaG91bGREYXRhVGFibGVTbGltKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1hc3RlclZpZXdSZXNwb25zaXZlV2luZG93TWFuYWdlci5zaG91bGREYXRhVGFibGVTbGltO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0dGVyIGZvciB3aGV0aGVyIHRlaCB0YWJsZSB3b3VsZCBiZSByZW5kZXJlZCB3aXRoIGJvdHRvbSBtYXJnaW4uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgc2hvdWxkRGF0YVRhYmxlUmVuZGVyV2l0aEJvdHRvbU1hcmdpbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tYXN0ZXJWaWV3UmVzcG9uc2l2ZVdpbmRvd01hbmFnZXIuc2hvdWxkRGF0YVRhYmxlUmVuZGVyV2l0aEJvdHRvbU1hcmdpbjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBsb2NhbGl6YXRpb24gc3RyaW5ncyBvYmplY3QgZm9yIG1hc3RlciB2aWV3LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgcmVzb3VyY2VTdHJpbmdzID0gdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLk1hc3RlclZpZXc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbG9jYWxpemF0aW9uIHN0cmluZ3Mgb2JqZWN0IGZyb20gYW5ndWxhciBjb21tb24uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjb21tb25TdHJpbmdzID0gdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkNvbW1vbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBjb250ZW50IGNoaWxkIHJlZmVyZW5jZSBmb3IgdGhlIHNlYXJjaCBlbGVtZW50LlxyXG4gICAgICovXHJcbiAgICBAQ29udGVudENoaWxkKCdzZWFyY2gnKVxyXG4gICAgcHVibGljIHNlYXJjaEVsZW1lbnQ6IFNlYXJjaEZvcm1GaWVsZENvbXBvbmVudDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBjb250ZW50IGNoaWxkIHJlZmVyZW5jZSBmb3IgdGhlIGFjdGlvbiBiYXIgZWxlbWVudC5cclxuICAgICAqL1xyXG4gICAgQENvbnRlbnRDaGlsZChBY3Rpb25CYXJDb21wb25lbnQpXHJcbiAgICBwdWJsaWMgYWN0aW9uQmFyQ29tcG9uZW50OiBBY3Rpb25CYXJDb21wb25lbnQ7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgdmlldyBjaGlsZCByZWZlcmVuY2UgZm9yIHRoZSBtYWluIGNvbnRlbnQgZGl2IHdyYXBwZXIuXHJcbiAgICAgKi9cclxuICAgIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicpXHJcbiAgICBwdWJsaWMgY29udGFpbmVyRWxlbWVudDogRWxlbWVudFJlZjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB2aWV3IGNoaWxkIHJlZmVyZW5jZSBmb3IgdGhlIG1haW4gZGF0YSB2aWV3IHRoYXQgbm9ybWFsbHkgY29udGFpbnMgYSBkYXRhLXRhYmxlIGNvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgQFZpZXdDaGlsZCgnZGF0YVZpZXcnKVxyXG4gICAgcHVibGljIGRhdGFWaWV3OiBFbGVtZW50UmVmO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGRpcmVjdGl2ZSBjb21wb25lbnQgZm9yIHRoZSBtYXN0ZXIgdmlldyBkYXRhIHZpZXcgd2hlcmUgbm9ybWFsbHkgYSBkYXRhLXRhYmxlIGV4aXN0cy5cclxuICAgICAqL1xyXG4gICAgQFZpZXdDaGlsZChNYXN0ZXJWaWV3Q29udGVudERpcmVjdGl2ZSwgeyBzdGF0aWM6IGZhbHNlIH0pXHJcbiAgICBwdWJsaWMgc21lTWFzdGVyVmlld0NvbnRlbnREaXJlY3RpdmU6IE1hc3RlclZpZXdDb250ZW50RGlyZWN0aXZlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGdldHRlciBjb250ZW50IGNoaWxkIHJlZmVyZW5jZSBmb3IgdGhlIGRhdGEtdGFibGUgY29tcG9uZW50LlxyXG4gICAgICovXHJcbiAgICBAQ29udGVudENoaWxkKERhdGFUYWJsZUNvbXBvbmVudClcclxuICAgIHB1YmxpYyBnZXQgc21lRGF0YVRhYmxlKCk6IERhdGFUYWJsZUNvbXBvbmVudCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxTbWVEYXRhVGFibGU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgc2V0dGVyIGZvciB0aGUgZGF0YSB0YWJsZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldCBzbWVEYXRhVGFibGUodmFsdWU6IERhdGFUYWJsZUNvbXBvbmVudCkge1xyXG4gICAgICAgIHRoaXMuaW50ZXJuYWxTbWVEYXRhVGFibGUgPSB2YWx1ZTtcclxuICAgICAgICBpZiAodGhpcy5pc0luaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dXBEYXRhVGFibGVBY2Nlc3NpYmlsaXR5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGNvbnRlbnQgY2hpbGQgcmVmZXJlbmNlIGZvciB0aGUgdHJlZSB0YWJsZSBjb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIEBDb250ZW50Q2hpbGQoJ3NtZVRyZWVUYWJsZScpXHJcbiAgICBwdWJsaWMgc21lVHJlZVRhYmxlOiBUcmVlVGFibGVDb21wb25lbnQ7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcnVlIGlzIHRvIHNob3cgdGhlIGhlYWRlci5cclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgcHVibGljIGhpZGVIZWFkZXIgPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB2YWx1ZSBvZiB0aGUgaGVhZGVyIGluIHN0cmluZy5cclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgcHVibGljIGhlYWRlciA9ICcnO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHRvdGFsIGNvdW50IG9mIHRhYmxlIGl0ZW1zIGluIG51bWJlci5cclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgcHVibGljIHRvdGFsID0gMDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEl0IGRldGVybWluZXMgd2hldGhlciB0byBzaG93IHRoZSBudW1iZXIgb2Ygc2VsZWN0aW9ucy5cclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgcHVibGljIHNob3dTZWxlY3Rpb24gPSB0cnVlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXQgZGV0ZXJtaW5lIHdoZXRoZXIgdG8gc2hvdyB0aGUgY29sdW1uIHBpY2tlci5cclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgcHVibGljIHNob3dDb2x1bW5QaWNrZXIgPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRydWUgaXMgdG8gc2hvdyB0aGUgZG93bmxvYWQgYnV0dG9uLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgc2hvd0Rvd25sb2FkQnV0dG9uID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJdCBkZXRlcm1pbmVzIHdoZXRoZXIgZXh0cmEgY29udGV4dCBwYXJhbWV0ZXIgd2lsbCBiZSB1c2VkIGZvciB0aGUgZG93bmxvYWQuXHJcbiAgICAgKiBUaGlzIHVzdWFsbHkgYXNzb2NpYXRlcyB3aXRoIHRoZSAnZG93bmxvYWQnIGVtaXR0ZXIuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBnZXREb3dubG9hZENvbnRleHRQYXJhbWV0ZXJzID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJdCBkZXRlcm1pbmVzIHRoZSBzdGF0ZSB3aGVuIHRoZSBjb2x1bW4gcGlja2VyIGRpYWxvZyBpcyBvcGVuZWQuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBjb2x1bW5QaWNrZXJBY3RpdmUgPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEl0IGRldGVybWluZXMgd2hldGhlciB0byBzaG93IHRoZSByZWZyZXNoIGJ1dHRvbi5cclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgcHVibGljIHNob3dSZWZyZXNoID0gdHJ1ZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEl0IGRldGVybWluZXMgd2hldGhlciB0byBkaXNhYmxlIHRoZSByZWZyZXNoIGJ1dHRvbi5cclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgcHVibGljIGRpc2FibGVSZWZyZXNoID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJdCBkZXRlcm1pbmVzIHRoZSBkYXRhIHRhYmxlIG1pbiB3aWR0aCBsZXZlbC5cclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgcHVibGljIGRhdGFUYWJsZU1pbldpZHRoID0gJ21kJztcclxuXHJcbiAgICAvKipcclxuICAgICAqIEl0IGRldGVybWluZXMgd2hldGhlciB0byBzaG93IHRoZSBmaWx0ZXIgYnV0dG9uLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgc2hvd0ZpbHRlciA9IHRydWU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJdCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGZpbHRlciBkaWFsb2cgaXMgb3BlbmVkLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgZmlsdGVyQWN0aXZlID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJdCBkZXRlcm1pbmVzIHRoZXJlIGlzIGEgd29ya2VyIGRvd25sb2FkaW5nIGluIHByb2dyZXNzLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgZG93bmxvYWRBY3RpdmUgPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEl0IGRldGVybWluZXMgd2hldGhlciB0byBzaG93IHVwIHRoZSBxdWVyeSBlZGl0b3IgZXh0ZW5zaW9uLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgZW5hYmxlUXVlcnlFZGl0b3IgPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHRlciBmb3IgdGhlIHNlbGVjdGlvbiBjb3VudCBmb3IgdGhlIGRhdGEtdGFibGUuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBzZXQgc2VsZWN0aW9uKHNlbGVjdGlvbjogYW55KSB7XHJcbiAgICAgICAgbGV0IGNvdW50ID0gMDtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzZWxlY3Rpb24pKSB7XHJcbiAgICAgICAgICAgIGNvdW50ID0gc2VsZWN0aW9uLmxlbmd0aDtcclxuICAgICAgICB9IGVsc2UgaWYgKCEhc2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICAgIGNvdW50ID0gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1Db3VudCA9IGNvdW50O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGV2ZW50IGVtaXR0ZXIgd2hlbiBzZWxlY3Rpb24ocykgY2hhbmdlZC5cclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJdCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGRhdGEtdGFibGUgc2hvdWxkIHJlc3BlY3QgdGhlIHNhbWUgaXRlbSBhcyB0d28gZGlmZmVyZW50IHJvd3MuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgcmVxdWlyZURhdGFJdGVtVW5pcXVlSWQ6IChpdGVtOiBhbnkpID0+IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIDcvMTMvMTguIFBsZWFzZSB1c2UgW3Nob3dHcm91cF0sIFtncm91cEFjdGl2ZV0sIGFuZCAoZ3JvdXApIGluc3RlYWRcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzZXQgc2hvd0N1c3RvbUZpbHRlcih2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMuaW50ZXJuYWxTaG93Q3VzdG9tRmlsdGVyID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHNob3dDdXN0b21GaWx0ZXIoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxTaG93Q3VzdG9tRmlsdGVyO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW50ZXJuYWxTaG93Q3VzdG9tRmlsdGVyOiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXQgZGV0ZXJtaW5lcyB0aGUgZ3JvdXAgYnV0dG9uIGhhcyBiZWVuIGNsaWNrZWQuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBncm91cEFjdGl2ZSA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWYgdGhlIHZhbHVlIGlzIGZhbHNlLCB0aGUgbWFzdGVyIHZpZXcgYWx3YXlzIHJlbmRlcnMgaW4gcmVsYXRpdmUgbGF5b3V0IHJlZ2FyZGxlc3Mgb2Ygd2luZG93IHNpemUgY2hhbmdlcy5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzdHJldGNoVG9BYnNvbHV0ZSA9IHRydWU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJdCBkZXRlcm1pbmVzIHdoZXRoZXIgdG8gZXhwYW5kIHRoZSBkZXRhaWxzIHBhbmUgb24gZmlyc3QgdGltZSBsYW5kaW5nIG9uIHRoZSBwYWdlLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGF1dG9FeHBhbmREZXRhaWxzUGFuZSA9IHRydWU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJdCBkZXRlcm1pbmVzIHdoZXRoZXIgdG8gc2hvdyB1cCB0aGUgZ3JvdXAgYnV0dG9uLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNob3dHcm91cD86IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJdCBkZXRlcm1pbmVzIHRoZSBkb3dubG9hZCBkYXRhIHR5cGUuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgZG93bmxvYWREYXRhVHlwZTogRGF0YVRhYmxlRG93bmxvYWREYXRhVHlwZSA9IERhdGFUYWJsZURvd25sb2FkRGF0YVR5cGUuQ1NWO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXNlZCB0byBzZXQgdGhlIHRvb2x0aXAgdGV4dCBmb3IgdGhlIHJlZnJlc2ggYnV0dG9uXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgcmVmcmVzaFRvb2x0aXBUZXh0OiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZXZlbnQgZW1pdHRlciBmb3IgZG93bmxvYWQgaGFzIGJlZW4gcHJvbXB0ZWQuXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcHVibGljIGRvd25sb2FkUHJvbXB0ZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBldmVudCBlbWl0dGVyIGZvciB3aGVuIHRoZSBkb3dubG9hZCBoYXMgYmVlbiBmaW5pc2hlZC5cclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgZG93bmxvYWRGaW5pc2hlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGV2ZW50IGVtaXR0ZXIgZm9yIHRoZSBjb2x1bW4gcGlja2VyIHRvIHJlbmRlciBhIGRpYWxvZy5cclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgY29sdW1uUGlja2VyOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZXZlbnQgZW1pdHRlciBmb3IgdGhlIHJlZnJlc2hpbmcgZnVuY3Rpb24gdG8gaGFwcGVuLlxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyByZWZyZXNoOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZXZlbnQgZW1pdHRlciBmb3IgdGhlIGZpbHRlciBkaWFsb2cgdG8gb3Blbi5cclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgZmlsdGVyOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZXZlbnQgZW1pdHRlciBmb3IgdGhlIGdyb3VwaW5nIGRpYWxvZyB0byBvcGVuLlxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyBncm91cDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGV2ZW50IGVtaXR0ZXIgZm9yIHRoZSBjbGVhciBzZWxlY3Rpb24gZnJvbSB0aGUgdGFibGUgdG8gaGFwcGVuLlxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyBjbGVhclNlbGVjdGlvbjogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGV2ZW50IGVtaXR0ZXIgZm9yIHdoZW4gdGhlIGRhdGEtdmlldyBoYXMgYmVlbiByZWFkeSBhZnRlciBuZ0FmdGVyVmlld0luaXQgbGlmZSBjeWNsZS5cclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgc21lRGF0YVRhYmxlRnJvbVRlbXBsYXRlUmVhZHk6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEl0IGltcGxlbWVudHMgdGhlIElMYXlvdXQgaW50ZXJmYWNlLiBJdCdzIHRyaWdnZXJlZCB3aGVuIHRoZSBsYXlvdXQgaXMgY2hhbmdlZC5cclxuICAgICAqIEl0J3MgdXNlZCB0byB0ZWxsIHRoZSBjaGlsZCBjb21wb25lbnRzIHRvIGNvb3JkaW5hdGUgd2l0aCB0aGUgbGF5b3V0IGNoYW5nZS5cclxuICAgICovXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyBsYXlvdXRDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgTGF5b3V0IGludGVyZmFjZVxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyB3aW5kb3dCcmVha3BvaW50Q2hhbmdlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICAgIHB1YmxpYyB1c2VTZWFyY2ggPSBmYWxzZTtcclxuICAgIHB1YmxpYyBzZWxlY3RlZEl0ZW1Db3VudCA9IDA7XHJcbiAgICBwdWJsaWMgZGF0YVZpZXdIZWlnaHQgPSAwO1xyXG4gICAgcHVibGljIGlzRGF0YUxpc3RTY3JvbGxlZFRvVG9wID0gdHJ1ZTtcclxuICAgIHB1YmxpYyBoZWFkZXJJZDogc3RyaW5nO1xyXG4gICAgcHVibGljIHJlZnJlc2hCdXR0b25BcmlhTGFiZWw6IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBzb3VyY2UgbmFtZSB0byB1c2UgZm9yIGxvZ2dpbmdcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGdldCBsb2dTb3VyY2VOYW1lKCkge1xyXG4gICAgICAgIHJldHVybiAnTWFzdGVyVmlld0NvbXBvbmVudCc7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzcGxpdFZpZXdQYW5lVG9nZ2xlZFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG4gICAgcHJpdmF0ZSBkYXRhVGFibGVPbkZpbHRlclN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG4gICAgcHJpdmF0ZSBtYXN0ZXJWaWV3UmVzcG9uc2l2ZVdpbmRvd01hbmFnZXI6IE1hc3RlclZpZXdSZXNwb25zaXZlV2luZG93TWFuYWdlcjtcclxuICAgIHByaXZhdGUgaXNJbml0aWFsaXplZCA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBjdXJyZW50RGF0YVNlbGVjdGlvbjogYW55O1xyXG4gICAgcHJpdmF0ZSBpbnRlcm5hbFNtZURhdGFUYWJsZTogRGF0YVRhYmxlQ29tcG9uZW50O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvcixcclxuICAgICAgICBwdWJsaWMgaG9zdEVsZW1lbnQ6IEVsZW1lbnRSZWYsXHJcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBkYXRhVGFibGVEb3dubG9hZFNlcnZpY2U6IERhdGFUYWJsZURvd25sb2FkU2VydmljZSxcclxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHNwbGl0VmlldzogU3BsaXRWaWV3Q29tcG9uZW50LFxyXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgcGl2b3RDb21wb25lbnQ6IFBpdm90Q29tcG9uZW50LFxyXG4gICAgICAgIEBTa2lwU2VsZigpIEBPcHRpb25hbCgpIEBJbmplY3QoU01FX0xBWU9VVF9QUk9WSURFUikgbGF5b3V0OiBMYXlvdXRcclxuICAgICkge1xyXG4gICAgICAgIC8vIEFmdGVyIHRoZSBkaXNjdXNzaW9uLCB0aGUgcGxhbiBpcyBzdGlsbCBoYXZlIG1hc3RlciB2aWV3IHRvIGNvb3JkaW5hdGUgd2l0aCBzcGxpdCB2aWV3IGFzIHdlbGwgYXMgdHJlZSB0YWJsZSBhbmQgZGF0YSB0YWJsZS5cclxuICAgICAgICAvLyBJdCdzIGEgbGl0dGxlIHRyaWNreSB0byBsZXQgbWFzdGVyIHZpZXcgdG8gdGFsayB0byBpdHMgcGFyZW50IHdoaWNoIGlzIHRoZSBzcGxpdCB2aWV3LlxyXG4gICAgICAgIC8vIEJ1dCB3ZSBkbyBuZWVkIGEgY29tcG9uZW50IHRvIGltcGxlbWVudCB0aGUgY29tbW9uIGJlaGF2aW9yIG9uIHRoZSBVSSB0byBhdm9pZCBkdXBsaWNhdGUgY29kZSBpbiBlYWNoIHRvb2wuXHJcbiAgICAgICAgLy8gQXQgdGhpcyBtb21lbnQsIG1hc3RlciB2aWV3IGlzIHRoZSBtb3N0IHByb3BlciBjb21wb25lbnQuXHJcbiAgICAgICAgLy8gTG9uZyB0ZXJtIHdpc2UsIHdlIHdpbGwgZmlndXJlIG91dCBhIGJldHRlciBjb21wb25lbnQgc2l0dGluZyBpbiB0aGUgdG9wIGxldmVsIG9mIHRoZSBVSSB0byBjb29yZGluYXRlIHdpdGggb3RoZXIgY29tcG9uZW50c1xyXG4gICAgICAgIC8vIGFuZCBpbXBsZW1lbnQgY29tbW9uIGJlaGF2aW9ycy5cclxuICAgICAgICBzdXBlcihpbmplY3Rvcik7XHJcbiAgICAgICAgLy8gc2V0dXAgaG9zdCBjbGFzc2VzXHJcbiAgICAgICAgdGhpcy5hZGRDbGFzcygnc21lLWFycmFuZ2Utc3RhY2stdicpO1xyXG4gICAgICAgIHRoaXMuYWRkQ2xhc3MoJ3NtZS1hcnJhbmdlLW92ZXJmbG93LWhpZGUteScpO1xyXG4gICAgICAgIHRoaXMuYWRkQ2xhc3MoJ3NtZS1hcnJhbmdlLW92ZXJmbG93LWF1dG8teCcpO1xyXG4gICAgICAgIHRoaXMuaGVhZGVySWQgPSAnbWFzdGVyLXZpZXctaGVhZGVyJyArIHRoaXMuY29tcG9uZW50SWQ7XHJcblxyXG4gICAgICAgIGlmIChsYXlvdXQpIHtcclxuICAgICAgICAgICAgdGhpcy5tYXN0ZXJWaWV3UmVzcG9uc2l2ZVdpbmRvd01hbmFnZXIgPSBuZXcgTWFzdGVyVmlld1Jlc3BvbnNpdmVXaW5kb3dNYW5hZ2VyKGxheW91dCk7XHJcbiAgICAgICAgICAgIC8vIG9uIHBhcmVudCBsYXlvdXQgY2hhbmdlcywgcmUtZW1pdCB0aGUgbGF5b3V0IGNoYW5nZSB0byBvdXIgZXZlbnRcclxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2gobGF5b3V0LmxheW91dENoYW5nZWQuc3Vic2NyaWJlKCgoKSA9PiB0aGlzLm9uTGF5b3V0Q2hhbmdlZCgpKSkpO1xyXG4gICAgICAgICAgICAvLyBvbiB3aW5kb3cgYnJlYWsgcG9pbnQgY2hhbmdlcywgZW1pdCB0aGUgZXZlbnQgYWJvdXQgY3JpdGljYWwgY2xhc3NlcyBhbmQgc3R5bGluZyB1cGRhdGVzIHNpZ25hbC5cclxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2gobGF5b3V0LndpbmRvd0JyZWFrcG9pbnRDaGFuZ2VkLnN1YnNjcmliZSgoKSA9PiB0aGlzLm9uV2luZG93QnJlYWtwb2ludENoYW5nZWQoKSkpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5kZWZlcnJlZE9uTGF5b3V0Q2hhbmdlZCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBtZXRob2QgdG8gcnVuIGFmdGVyIHRoZSBjb21wb25lbnQgdmlldyBpbml0aWFsaXplZFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAvLyBUaGUgXCJuZ0FmdGVyVmlld0luaXRcIiBpcyBzdGlsbCBpbiBjdXJyZW50IGNoZWNrIGN5Y2xlIHNvIHdlIHNob3VsZCBub3QgdXBkYXRlIHRoZSBmb2xsb3dpbmcgVUkgaW5mb3JtYXRpb24gaW1tZWRpYXRlbHkuXHJcbiAgICAgICAgICAgIC8vIFNvIHdlIHVzZSBzZXRUaW1lb3V0IHRvIGRlZmVyIHRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucyB0byBuZXh0IGNoZWNrIGN5Y2xlLlxyXG4gICAgICAgICAgICB0aGlzLnVzZVNlYXJjaCA9ICEhdGhpcy5zZWFyY2hFbGVtZW50O1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUxheW91dCgpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5zcGxpdFZpZXcpIHtcclxuICAgICAgICAgICAgdGhpcy5zcGxpdFZpZXdQYW5lVG9nZ2xlZFN1YnNjcmlwdGlvbiA9IHRoaXMuc3BsaXRWaWV3LnBhbmVUb2dnbGVkLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRhVmlldyAmJiB0aGlzLmRhdGFWaWV3SGVpZ2h0ICE9PSB0aGlzLmRhdGFWaWV3Lm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVMYXlvdXQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5zbWVEYXRhVGFibGUpIHtcclxuICAgICAgICAgICAgdGhpcy5kYXRhVGFibGVPbkZpbHRlclN1YnNjcmlwdGlvbiA9IHRoaXMuc21lRGF0YVRhYmxlLmZpbHRlci5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc21lRGF0YVRhYmxlLnNlbGVjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBzaG91bGRDbGVhclNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnJlcXVpcmVEYXRhSXRlbVVuaXF1ZUlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNtZURhdGFUYWJsZS5yZW5kZXJlZEl0ZW1zLmluZGV4T2YodGhpcy5zbWVEYXRhVGFibGUuc2VsZWN0aW9uKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZENsZWFyU2VsZWN0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW1JZCA9IHRoaXMucmVxdWlyZURhdGFJdGVtVW5pcXVlSWQodGhpcy5zbWVEYXRhVGFibGUuc2VsZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNtZURhdGFUYWJsZS5yZW5kZXJlZEl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5zbWVEYXRhVGFibGUucmVuZGVyZWRJdGVtc1tpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1JZCA9IHRoaXMucmVxdWlyZURhdGFJdGVtVW5pcXVlSWQoaXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbUlkID09PSBzZWxlY3RlZEl0ZW1JZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZENsZWFyU2VsZWN0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRDbGVhclNlbGVjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uLmVtaXQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pc0luaXRpYWxpemVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc3RyZXRjaFRvQWJzb2x1dGUpIHtcclxuICAgICAgICAgICAgdGhpcy5hZGRDbGFzcygnc21lLWxheW91dC1hYnNvbHV0ZS1waG9uZS11cCcpO1xyXG4gICAgICAgICAgICB0aGlzLmFkZENsYXNzKCdzbWUtcG9zaXRpb24taW5zZXQtbm9uZScpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZXR1cERhdGFUYWJsZUFjY2Vzc2liaWxpdHkoKTtcclxuICAgICAgICBpZiAodGhpcy5oZWFkZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5yZWZyZXNoQnV0dG9uQXJpYUxhYmVsID0gdGhpcy5yZXNvdXJjZVN0cmluZ3MucmVmcmVzaC5hcmlhTGFiZWwuaGVhZGVyLmZvcm1hdCh0aGlzLmhlYWRlcik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5yZWZyZXNoQnV0dG9uQXJpYUxhYmVsID0gdGhpcy5yZXNvdXJjZVN0cmluZ3MucmVmcmVzaC5hcmlhTGFiZWwubm9IZWFkZXI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIE5vdGU6IHRoaXMgaXMgYSBiYW5kYWlkIGZpeCB0byB0aGlzIGJ1ZzogaHR0cHM6Ly9taWNyb3NvZnQudmlzdWFsc3R1ZGlvLmNvbS9PUy9fd29ya2l0ZW1zL2VkaXQvMzMwMzE3OTEvLlxyXG4gICAgLy8gVGhlIHNjcmVlbiByZWFkZXIgZG9lc24ndCBhbm5vdW5jZSB3aGVuIGFyaWEtZGlzYWJsZWQgY2hhbmdlcyBhbmQgdGhlIGV4YWN0IHJlYXNvbiBmb3IgdGhhdCBpcyB1bmtub3duLlxyXG4gICAgLy8gSXQncyBub3QgYmVzdCBwcmFjdGljZSB0byBiZSBhZGp1c3RpbmcgdGhlIGFyaWEtbGFiZWwgdG8gYWNoaWV2ZSB0aGUgZWZmZWN0IGJ1dCB0aGF0J3MgdGhlIGJlc3Qgd2UgY2FtZSB1cCB3aXRoLlxyXG4gICAgLy8gVE9ETzogZml4IHRoZSByZWFsIGlzc3VlIHdoeSB0aGUgc2NyZWVuIHJlYWRlciBkb2Vzbid0IGFubm91bmNlIHRoZSBhcmlhLWRpc2FibGVkIGNoYW5nZXNcclxuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IHJlZnJlc2hCdXR0b25MYWJlbCA9IHRoaXMucmVzb3VyY2VTdHJpbmdzLnJlZnJlc2guYXJpYUxhYmVsLm5vSGVhZGVyO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5oZWFkZXIpIHtcclxuICAgICAgICAgICAgcmVmcmVzaEJ1dHRvbkxhYmVsID0gdGhpcy5yZXNvdXJjZVN0cmluZ3MucmVmcmVzaC5hcmlhTGFiZWwuaGVhZGVyLmZvcm1hdCh0aGlzLmhlYWRlcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY2hhbmdlcy5kaXNhYmxlUmVmcmVzaD8uY3VycmVudFZhbHVlID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaEJ1dHRvbkFyaWFMYWJlbCA9IGAke3RoaXMuY29tbW9uU3RyaW5ncy5kaXNhYmxlZH0gJHtyZWZyZXNoQnV0dG9uTGFiZWx9YDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hCdXR0b25BcmlhTGFiZWwgPSBgJHt0aGlzLmNvbW1vblN0cmluZ3MuZW5hYmxlZH0gJHtyZWZyZXNoQnV0dG9uTGFiZWx9YDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLnNwbGl0VmlldyAmJiB0aGlzLnNwbGl0Vmlld1BhbmVUb2dnbGVkU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3BsaXRWaWV3UGFuZVRvZ2dsZWRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnNtZURhdGFUYWJsZSAmJiB0aGlzLmRhdGFUYWJsZU9uRmlsdGVyU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YVRhYmxlT25GaWx0ZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFbWl0IHRoZSBldmVudCBmcm9tIHRoZSBtYXN0ZXIgdmlldyBmb3IgdGhlIHJlYWRpbmVzcyBvZiB0aGUgdGVtcGxhdGVzIHBhc3NlZCBpbiB0byB0aGUgbWFzdGVyIHZpZXcgY29udGVudC5cclxuICAgICAqIFRoaXMgY2FuIGJldHRlciBoYW5kbGluZyB0aGUgcmVuZGVyaW5nIGxpZmUgY3ljbGUgZnJvbSBjaGlsZCB0byBwYXJlbnQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvblNtZURhdGFUYWJsZUZyb21UZW1wbGF0ZVJlYWR5KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc21lRGF0YVRhYmxlRnJvbVRlbXBsYXRlUmVhZHkuZW1pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG9uIHdpbmRvdyBicmVha3BvaW50IGNoYW5nZWQgaGFuZGxlci5cclxuICAgICAqIEFkZGluZyB5aWVsZCBmb3IgY29tcG9uZW50IHRvIGdldCBFbGVtZW50UmVmIGFmdGVyIGluaXRpYWxpemF0aW9uLlxyXG4gICAgICovXHJcbiAgICBAWWllbGQoKVxyXG4gICAgcHJpdmF0ZSBvbkxheW91dENoYW5nZWQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVMYXlvdXQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBkZWZlcnJlZCBsYXlvdXQgY2hhbmdlZCBoYW5kbGVyLlxyXG4gICAgICovXHJcbiAgICBARGVib3VuY2UoKVxyXG4gICAgcHJpdmF0ZSBkZWZlcnJlZE9uTGF5b3V0Q2hhbmdlZCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9uTGF5b3V0Q2hhbmdlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGltcGxlbWVudGF0aW9uIGFmdGVyIGludGVyYWN0aW9uIHdpdGggdGhlIGRvd25sb2FkIGJ1dHRvbiBmcm9tIHRoZSBtYXN0ZXIgdmlldy5cclxuICAgICAqIEBwYXJhbSAkZXZlbnQgdGhlIGJ1dHRvbiBjbGlja2VkIGV2ZW50LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25Eb3dubG9hZEJ1dHRvbkNsaWNrZWQoJGV2ZW50KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCEkZXZlbnQgfHwgdGhpcy5kb3dubG9hZEFjdGl2ZSB8fCB0aGlzLnNtZURhdGFUYWJsZSAmJiB0aGlzLnNtZURhdGFUYWJsZS5pc0J1c3kpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgICAgIHRoaXMuZG93bmxvYWRBY3RpdmUgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLmRvd25sb2FkUHJvbXB0ZWQubmV4dCgpO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuc21lRGF0YVRhYmxlIHx8ICF0aGlzLnNtZURhdGFUYWJsZS5pdGVtcykge1xyXG4gICAgICAgICAgICBMb2dnaW5nLmxvZyh7XHJcbiAgICAgICAgICAgICAgICBsZXZlbDogTG9nTGV2ZWwuV2FybmluZyxcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBEYXRhIHRhYmxlIGlzIG5vdCBkZXRlY3RlZCBpbiB0aGUgbWFzdGVyIHZpZXcsIGN1c3RvbSB0ZW1wbGF0ZSBtYXkgYmUgdXNlZC5gLFxyXG4gICAgICAgICAgICAgICAgc291cmNlOiAnTWFzdGVyVmlld0NvbXBvbmVudC5vbkRvd25sb2FkQnV0dG9uQ2xpY2tlZCgpJ1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5nZXREb3dubG9hZENvbnRleHRQYXJhbWV0ZXJzKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25Eb3dubG9hZFByb21wdGVkKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmRvd25sb2FkRmluaXNoZWQubmV4dCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGZ1bmN0aW9uIGZvciBleGVjdXRpbmcgdGhlIGRvd25sb2FkIGNvbnRleHQgZnJvbSBkYXRhLXRhYmxlLlxyXG4gICAgICogQHBhcmFtIGNvbnRleHRQYXJhbWV0ZXJzIHRoZSBjb250ZXh0IHBhcmFtZXRlciBwYXNzZWQgaW4gZnJvbSBleHRlbnNpb24gZnJvbSBvdXRlciBzY29wZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG9uRG93bmxvYWRQcm9tcHRlZChjb250ZXh0UGFyYW1ldGVycz86IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YVRhYmxlRG93bmxvYWRTZXJ2aWNlLmRvd25sb2FkRGF0YUZpbmlzaGVkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZG93bmxvYWRBY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YVRhYmxlRG93bmxvYWRTZXJ2aWNlLmRvd25sb2FkRGF0YSh0aGlzLnNtZURhdGFUYWJsZSwgdGhpcy5kb3dubG9hZERhdGFUeXBlLCBjb250ZXh0UGFyYW1ldGVycyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgTG9nZ2luZy5sb2coe1xyXG4gICAgICAgICAgICAgICAgbGV2ZWw6IExvZ0xldmVsLkVycm9yLFxyXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYEZhaWxlZCB0byBkb3dubG9hZCAnJHtlcnJvcn0nYCxcclxuICAgICAgICAgICAgICAgIHNvdXJjZTogJ01hc3RlclZpZXdDb21wb25lbnQub25Eb3dubG9hZEJ1dHRvbkNsaWNrZWQoKSdcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG9uIHdpbmRvdyBicmVha3BvaW50IGNoYW5nZWQgaGFuZGxlci5cclxuICAgICAqIEFkZGluZyB5aWVsZCBmb3IgY29tcG9uZW50IHRvIGdldCBFbGVtZW50UmVmIGFmdGVyIGluaXRpYWxpemF0aW9uLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25XaW5kb3dCcmVha3BvaW50Q2hhbmdlZCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm1hc3RlclZpZXdSZXNwb25zaXZlV2luZG93TWFuYWdlci5vbldpbmRvd1NpemVDaGFuZ2VkKHRoaXMuaG9zdEVsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQsIHRoaXMuc3RyZXRjaFRvQWJzb2x1dGUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXQgdXBkYXRlcyB0aGUgbWFzdGVyIHZpZXcncyBsYXlvdXQgYW5kIGVtaXRzIGxheW91dCBjaGFuZ2VkIGV2ZW50IHRvIGNoaWxkcmVuLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdXBkYXRlTGF5b3V0KCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5kYXRhVmlldyB8fCAhdGhpcy5kYXRhVmlldy5uYXRpdmVFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZGF0YVZpZXdIZWlnaHQgPSB0aGlzLmRhdGFWaWV3Lm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0O1xyXG5cclxuICAgICAgICB0aGlzLnJlbW92ZUNsYXNzKCdzbWUtYXJyYW5nZS1vdmVyZmxvdy1oaWRlLXknKTtcclxuICAgICAgICBpZiAodGhpcy5tYXN0ZXJWaWV3UmVzcG9uc2l2ZVdpbmRvd01hbmFnZXIuc2hvdWxkSGlkZVlTY3JvbGwpIHtcclxuICAgICAgICAgICAgdGhpcy5hZGRDbGFzcygnc21lLWFycmFuZ2Utb3ZlcmZsb3ctaGlkZS15Jyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxheW91dENoYW5nZWQuZW1pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBuZ0RvQ2hlY2soKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuYXV0b0V4cGFuZERldGFpbHNQYW5lKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNtZURhdGFUYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVEZXRhaWxQYW5lRXhwYW5kaW5nKHRoaXMuc21lRGF0YVRhYmxlKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNtZVRyZWVUYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVEZXRhaWxQYW5lRXhwYW5kaW5nKHRoaXMuc21lVHJlZVRhYmxlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZG9DbGVhclNlbGVjdGlvbihldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IG5leHQgPSBEb20uZ2V0TmV4dFpvbmVFbGVtZW50KDxIVE1MRWxlbWVudD5ldmVudC50YXJnZXQpO1xyXG4gICAgICAgIGlmIChuZXh0KSB7XHJcbiAgICAgICAgICAgIG5leHQuZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbi5uZXh0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBpdGVtIGNvdW50IGluIHN0cmluZy5cclxuICAgICAqIEByZXR1cm5zIHN0cmluZyB2YWx1ZSBmb3IgdGhlIHRvdGFsIGNvdW50LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0SXRlbUNvdW50VGV4dCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRvdGFsID09PSAxID8gdGhpcy5yZXNvdXJjZVN0cmluZ3Mub25lSXRlbSA6IHRoaXMucmVzb3VyY2VTdHJpbmdzLml0ZW1zLmZvcm1hdCh0aGlzLnRvdGFsKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgc2VsZWN0ZWQgaXRlbSBjb3VudCBpbiBzdHJpbmcuXHJcbiAgICAgKiBAcmV0dXJucyBzdHJpbmcgdmFsdWUgZm9yIHRoZSBzZWxlY3RlZCBjb3VudC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldFNlbGVjdGVkQ291bnRUZXh0KCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzb3VyY2VTdHJpbmdzLnNlbGVjdGVkLmZvcm1hdCh0aGlzLnNlbGVjdGVkSXRlbUNvdW50KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgc2VsZWN0ZWQgaXRlbSBjb3VudCBpbiBzdHJpbmcgZm9yIGFyaWEgc3VwcG9ydC5cclxuICAgICAqIEByZXR1cm5zIHN0cmluZyB2YWx1ZSBmb3IgdGhlIHNlbGVjdGVkIGNvdW50LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0U2VsZWN0ZWRDb3VudEFyaWFUZXh0KCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzb3VyY2VTdHJpbmdzLnNlbGVjdGVkQXJpYS5mb3JtYXQodGhpcy5zZWxlY3RlZEl0ZW1Db3VudCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGZpbHRlciBpdGVtIGNvdW50IGluIHN0cmluZyBmb3IgYXJpYSBzdXBwb3J0LlxyXG4gICAgICogQHJldHVybnMgc3RyaW5nIHZhbHVlIGZvciB0aGUgZmlsdGVyZWQgY291bnQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRGaWx0ZXJBcmlhTGFiZWwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gYCR7dGhpcy5yZXNvdXJjZVN0cmluZ3MuZmlsdGVyLnRpdGxlfSAke3RoaXMudG90YWwgPyB0aGlzLnJlc291cmNlU3RyaW5ncy5yZXN1bHRzLmZvcm1hdCh0aGlzLnRvdGFsKSA6XHJcbiAgICAgICAgICAgIHRoaXMucmVzb3VyY2VTdHJpbmdzLnJlc3VsdHMuZm9ybWF0KDApfWA7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldENvbHVtblBpY2tlckFyaWFMYWJlbCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBgJHt0aGlzLnJlc291cmNlU3RyaW5ncy5jb2x1bW5QaWNrZXIudGl0bGV9ICR7dGhpcy50b3RhbFxyXG4gICAgICAgICAgICA/IHRoaXMucmVzb3VyY2VTdHJpbmdzLnJlc3VsdHMuZm9ybWF0KHRoaXMudG90YWwpIDogdGhpcy5yZXNvdXJjZVN0cmluZ3MucmVzdWx0cy5mb3JtYXQoMCl9YDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZSB0aGUgYWN0aW9uIGJhclxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdXBkYXRlQWN0aW9uQmFyKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmFjdGlvbkJhckNvbXBvbmVudCkge1xyXG4gICAgICAgICAgICB0aGlzLmFjdGlvbkJhckNvbXBvbmVudC51cGRhdGVBY3Rpb25CYXIoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIYW5kbGVzIGNsaWNraW5nIG9uIHRoZSByZWZyZXNoIGJ1dHRvblxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgcmVmcmVzaEJ1dHRvbkNsaWNrZWQoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZVJlZnJlc2gpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yZWZyZXNoLm5leHQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgdGhlIGlkQmFnIHVzZWQgYnkgdGhpcyBtYXN0ZXIgdmlldyB0byBzdG9yZSB1bmlxdWUgZWxlbWVudCBpZHMuXHJcbiAgICAgKiBpZCB2YWx1ZXMgd2lsbCBiZSBhc3NpZ25lZCBiZSB0aGUgQHNlZSBNYXN0ZXJWaWV3Q29tcG9uZW50IHN1cGVyIGNsYXNzLlxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlSWRCYWcoKTogTXNmdFNtZS5TdHJpbmdNYXA8c3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgZmlsdGVyTGFiZWw6ICcnLFxyXG4gICAgICAgICAgICBjb2x1bW5QaWNrZXJMYWJlbDogJycsXHJcbiAgICAgICAgICAgIGl0ZW1Db3VudExhYmVsOiAnJ1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBoYW5kbGVEZXRhaWxQYW5lRXhwYW5kaW5nKGRhdGFWaWV3Q29udHJvbDogRGF0YVRhYmxlQ29tcG9uZW50KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuc3BsaXRWaWV3KSB7XHJcbiAgICAgICAgICAgIGxldCBuZXdEYXRhU2VsZWN0aW9uID0gbnVsbDtcclxuICAgICAgICAgICAgbmV3RGF0YVNlbGVjdGlvbiA9IGRhdGFWaWV3Q29udHJvbC5yZW5kZXJlZEl0ZW1zW2RhdGFWaWV3Q29udHJvbC5nZXRBY3RpdmVSZW5kZXJlZEl0ZW1JbmRleCgpXTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGhhc0l0ZW1TZWxlY3RlZCA9ICEhbmV3RGF0YVNlbGVjdGlvbjtcclxuXHJcbiAgICAgICAgICAgIGlmIChoYXNJdGVtU2VsZWN0ZWQgJiYgbmV3RGF0YVNlbGVjdGlvbiAhPT0gdGhpcy5jdXJyZW50RGF0YVNlbGVjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnREYXRhU2VsZWN0aW9uIHx8IHRoaXMuY3VycmVudERhdGFTZWxlY3Rpb24ubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zcGxpdFZpZXcuaXNFeHBhbmRlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGxpdFZpZXcudG9nZ2xlUGFuZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudERhdGFTZWxlY3Rpb24gPSBuZXdEYXRhU2VsZWN0aW9uO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldHVwRGF0YVRhYmxlQWNjZXNzaWJpbGl0eSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5pbnRlcm5hbFNtZURhdGFUYWJsZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5oZWFkZXIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW50ZXJuYWxTbWVEYXRhVGFibGUudGFibGVBcmlhTGFiZWxsZWRCeSA9IHRoaXMuaGVhZGVySWQ7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5waXZvdENvbXBvbmVudCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRUYWIgPSB0aGlzLnBpdm90Q29tcG9uZW50LnRhYnMudG9BcnJheSgpLmZpbHRlcihpdGVtID0+IHRoaXMucGl2b3RDb21wb25lbnQuaXNTZWxlY3RlZChpdGVtKSlbMF07XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRUYWIpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmludGVybmFsU21lRGF0YVRhYmxlLnRhYmxlQXJpYUxhYmVsID0gc2VsZWN0ZWRUYWIubGFiZWw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiPGgyIGNsYXNzPVwic21lLXBvc2l0aW9uLWZsZXgtbm9uZSBzbWUtcGFkZGluZy1zcXVpc2gtdi1sZyBzbWUtYXJyYW5nZS13b3JkLXdyYXAtYnJlYWstd29yZCBzbWUtZm9udC1oM1wiICpuZ0lmPVwiaGVhZGVyXCJcclxuICBbaGlkZGVuXT1cImhpZGVIZWFkZXJcIiBbaWRdPSdoZWFkZXJJZCc+e3sgaGVhZGVyIH19PC9oMj5cclxuPHNtZS1sYXlvdXQgI2xheW91dCAobGF5b3V0Q2hhbmdlZCk9XCJ1cGRhdGVBY3Rpb25CYXIoKVwiPlxyXG4gIDxzbWUtbGF5b3V0LWRlZmluaXRpb24gbmFtZT1cIm5hcnJvd1wiIFt1bnRpbF09XCI3NjhcIj48L3NtZS1sYXlvdXQtZGVmaW5pdGlvbj5cclxuPC9zbWUtbGF5b3V0PlxyXG48ZGl2ICpuZ0lmPVwiZW5hYmxlUXVlcnlFZGl0b3JcIiBjbGFzcz1cInNtZS1wb3NpdGlvbi1mbGV4LW5vbmVcIiBbY2xhc3Muc21lLXBhZGRpbmctaG9yaXpvbnRhbC1zbV09XCIhbm9TaWRlTWFyZ2luXCI+XHJcbiAgPCEtLSBRdWVyeSBFZGl0b3IgLS0+XHJcbiAgPG5nLWNvbnRlbnQgc2VsZWN0PSdzbWUtcXVlcnktZWRpdG9yJz48L25nLWNvbnRlbnQ+XHJcbjwvZGl2PlxyXG48ZGl2IGNsYXNzPVwic21lLXBvc2l0aW9uLWZsZXgtbm9uZSBzbWUtYXJyYW5nZS1zdGFjay1yZXZlcnNlZFwiICNjb250YWluZXJcclxuICBbY2xhc3Muc21lLXBhZGRpbmctaG9yaXpvbnRhbC1zbV09XCIhbm9TaWRlTWFyZ2luXCJcclxuICBbY2xhc3Muc21lLWFycmFuZ2Utc3RhY2staF09XCIhKGxheW91dC5jdXJyZW50TGF5b3V0RGVmaW5pdGlvbk5hbWU9PT0nbmFycm93JylcIj5cclxuICA8IS0tIEFjdGlvbnMgLS0+XHJcbiAgPG5nLWNvbnRlbnQgc2VsZWN0PSdzbWUtYWN0aW9uLWJhciwuYWN0aW9uLWJhcic+PC9uZy1jb250ZW50PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwic21lLXBvc2l0aW9uLWZsZXgtbm9uZSBzbWUtYXJyYW5nZS1zdGFjay1oXCIgW2NsYXNzLnNtZS1wYWRkaW5nLWhvcml6b250YWwtc21dPVwiIW5vU2lkZU1hcmdpblwiXHJcbiAgICBbY2xhc3Muc21lLXBhZGRpbmctbGVmdC1zbV09XCJub1NpZGVNYXJnaW5cIiBbY2xhc3Muc21lLWFycmFuZ2Utc3RhY2std3JhcF09XCJzZWFyY2hCb3hBdXRvV3JhcE9uV2luZG93U2l6ZUNoYW5nZXNcIj5cclxuICAgIDwhLS0gQ291bnRzIC0tPlxyXG4gICAgPGRpdlxyXG4gICAgICBjbGFzcz1cInNtZS1mb2N1cy16b25lIHNtZS1wb3NpdGlvbi1mbGV4LW5vbmUgc21lLWFycmFuZ2Utc3RhY2staCBzbWUtYXJyYW5nZS13cy1ub3dyYXAgc21lLXNjaGVtZS1zZWNvbmRhcnktdGV4dFwiXHJcbiAgICAgIFtjbGFzcy5zbWUtcGFkZGluZy1yaWdodC14c109XCJzZWxlY3RlZEl0ZW1Db3VudCA9PT0gMCB8fCAhc2hvd1NlbGVjdGlvblwiPlxyXG4gICAgICA8aSByb2xlPVwic3RhdHVzXCIgW2lkXT1cImlkQmFnLml0ZW1Db3VudExhYmVsXCIgY2xhc3M9XCJzbWUtbGF5b3V0LWFjdGlvbi1iYXItaXRlbSBzbWUtcGFkZGluZy1ob3Jpem9udGFsLXNtXCI+e3tcclxuICAgICAgICBnZXRJdGVtQ291bnRUZXh0KCkgfX08L2k+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHJvbGU9XCJidXR0b25cIlxyXG4gICAgICAgIGNsYXNzPVwic21lLWJ1dHRvbi10cmlnZ2VyIHNtZS1sYXlvdXQtYWN0aW9uLWJhci1pdGVtLWhlaWdodCBzbWUtc2NoZW1lLXNlY29uZGFyeS10ZXh0IHNtZS1idXR0b24tYXV0by13aWR0aFwiXHJcbiAgICAgICAgKm5nSWY9XCJzZWxlY3RlZEl0ZW1Db3VudCA+IDAgJiYgc2hvd1NlbGVjdGlvblwiIChjbGljayk9XCJkb0NsZWFyU2VsZWN0aW9uKCRldmVudClcIj5cclxuICAgICAgICA8aSBhcmlhLWhpZGRlbj1cInRydWVcIj57eyBnZXRTZWxlY3RlZENvdW50VGV4dCgpIH19PC9pPlxyXG4gICAgICAgIDxpIGNsYXNzPVwic21lLXNjcmVlbi1yZWFkZXJcIj57eyBnZXRTZWxlY3RlZENvdW50QXJpYVRleHQoKSB9fTwvaT5cclxuICAgICAgICA8aSBhcmlhLWhpZGRlbj1cInRydWVcIiBjbGFzcz1cInNtZS1pY29uIHNtZS1pY29uLWNsZWFyIHNtZS1tYXJnaW4tbGVmdC14c1wiXHJcbiAgICAgICAgICBbdGl0bGVdPVwicmVzb3VyY2VTdHJpbmdzLnNlbGVjdGVkVGl0bGVcIj48L2k+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tIENvbW1vbiBBY3Rpb25zIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cInNtZS1mb2N1cy16b25lIHNtZS1hcnJhbmdlLXdzLW5vd3JhcFwiPlxyXG4gICAgICA8YnV0dG9uICpuZ0lmPVwic2hvd0Rvd25sb2FkQnV0dG9uXCIgKGNsaWNrKT1cIm9uRG93bmxvYWRCdXR0b25DbGlja2VkKCRldmVudClcIiB0eXBlPVwiYnV0dG9uXCIgcm9sZT1cImJ1dHRvblwiXHJcbiAgICAgICAgdGl0bGU9XCJEb3dubG9hZFwiIGNsYXNzPVwic21lLWxheW91dC1hY3Rpb24tYmFyLWl0ZW0taGVpZ2h0IHNtZS1idXR0b24tdHJpZ2dlciBzbWUtYnV0dG9uLWF1dG8td2lkdGhcIlxyXG4gICAgICAgIFtjbGFzcy5zbWUtdG9nZ2xlZF09XCJkb3dubG9hZEFjdGl2ZVwiIGRhdGEtdXRhLWlkPVwiZG93bmxvYWQtYnV0dG9uXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzbWUtaWNvbiBzbWUtaWNvbi1kb3dubG9hZFwiPjwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gKm5nSWY9XCJzaG93Q29sdW1uUGlja2VyXCIgKGNsaWNrKT1cImNvbHVtblBpY2tlci5uZXh0KCk7XCIgdHlwZT1cImJ1dHRvblwiIHJvbGU9XCJidXR0b25cIlxyXG4gICAgICAgIFt0aXRsZV09XCJyZXNvdXJjZVN0cmluZ3MuY29sdW1uUGlja2VyLnRpdGxlXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJnZXRGaWx0ZXJBcmlhTGFiZWwoKVwiXHJcbiAgICAgICAgY2xhc3M9XCJzbWUtbGF5b3V0LWFjdGlvbi1iYXItaXRlbS1oZWlnaHQgc21lLWJ1dHRvbi10cmlnZ2VyIHNtZS1idXR0b24tYXV0by13aWR0aFwiXHJcbiAgICAgICAgW2NsYXNzLnNtZS10b2dnbGVkXT1cImNvbHVtblBpY2tlckFjdGl2ZVwiIGRhdGEtdXRhLWlkPVwiY29sdW1uLXBpY2tlci1idXR0b25cIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInNtZS1pY29uIHNtZS1pY29uLXRyaXBsZUNvbHVtblwiPjwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gYXJpYS1saXZlPVwicG9saXRlXCIgKm5nSWY9XCJzaG93UmVmcmVzaFwiIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiZGlzYWJsZVJlZnJlc2hcIlxyXG4gICAgICAgIChjbGljayk9XCJyZWZyZXNoQnV0dG9uQ2xpY2tlZCgpXCIgdHlwZT1cImJ1dHRvblwiIHJvbGU9XCJidXR0b25cIiBbdGl0bGVdPVwicmVmcmVzaFRvb2x0aXBUZXh0IHx8IHJlc291cmNlU3RyaW5ncy5yZWZyZXNoLnRpdGxlXCJcclxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInJlZnJlc2hUb29sdGlwVGV4dCB8fCByZWZyZXNoQnV0dG9uQXJpYUxhYmVsXCJcclxuICAgICAgICBjbGFzcz1cInNtZS1sYXlvdXQtYWN0aW9uLWJhci1pdGVtLWhlaWdodCBzbWUtYnV0dG9uLXRyaWdnZXIgc21lLWJ1dHRvbi1hdXRvLXdpZHRoXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzbWUtaWNvbiBzbWUtaWNvbi1yZWZyZXNoXCI+PC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiAqbmdJZj1cInNob3dGaWx0ZXJcIiAoY2xpY2spPVwiZmlsdGVyLm5leHQoKTtcIiB0eXBlPVwiYnV0dG9uXCIgcm9sZT1cImJ1dHRvblwiXHJcbiAgICAgICAgW3RpdGxlXT1cInJlc291cmNlU3RyaW5ncy5maWx0ZXIudGl0bGVcIiBbYXR0ci5hcmlhLWxhYmVsXT1cImdldEZpbHRlckFyaWFMYWJlbCgpXCJcclxuICAgICAgICBjbGFzcz1cInNtZS1sYXlvdXQtYWN0aW9uLWJhci1pdGVtLWhlaWdodCBzbWUtYnV0dG9uLXRyaWdnZXIgc21lLWJ1dHRvbi1hdXRvLXdpZHRoXCJcclxuICAgICAgICBbY2xhc3Muc21lLXRvZ2dsZWRdPVwiZmlsdGVyQWN0aXZlXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzbWUtaWNvbiBzbWUtaWNvbi1maWx0ZXJcIj48L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uICpuZ0lmPVwic2hvd0dyb3VwXCIgKGNsaWNrKT1cImdyb3VwLm5leHQoKVwiIHR5cGU9XCJidXR0b25cIiByb2xlPVwiYnV0dG9uXCIgW3RpdGxlXT1cInJlc291cmNlU3RyaW5ncy5ncm91cC50aXRsZVwiXHJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJyZXNvdXJjZVN0cmluZ3MuZ3JvdXAudGl0bGVcIlxyXG4gICAgICAgIGNsYXNzPVwic21lLWxheW91dC1hY3Rpb24tYmFyLWl0ZW0taGVpZ2h0IHNtZS1idXR0b24tdHJpZ2dlciBzbWUtYnV0dG9uLWF1dG8td2lkdGhcIlxyXG4gICAgICAgIFtjbGFzcy5zbWUtdG9nZ2xlZF09XCJncm91cEFjdGl2ZVwiPlxyXG4gICAgICAgIDwhLS0gVE9ETzogdXNlIGdyb3VwaW5nIGljb24gd2hlbiBhdmFpbGFibGUuIC0tPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwic21lLWljb24gc21lLWljb24tZ3JvdXBlZExpc3RcIj48L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tIEdyb3VwaW5nIChEZXByZWNhdGVkKSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJzbWUtZm9jdXMtem9uZVwiPlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwic2hvd0N1c3RvbUZpbHRlclwiIGNsYXNzPVwic21lLW1hcmdpbi1ob3Jpem9udGFsLXNtXCI+XHJcbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PScuc21lLW1hc3Rlci12aWV3LWN1c3RvbS1maWx0ZXInPjwvbmctY29udGVudD5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0gU2VhcmNoIEJveCAtLT5cclxuICAgIDxmb3JtICpuZ0lmPVwidXNlU2VhcmNoXCIgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmU7XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzbWUtcG9zaXRpb24tZmxleC1ub25lIHNtZS1sYXlvdXQtYWN0aW9uLWJhci1pdGVtXCI+XHJcbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PSdzbWUtZm9ybS1maWVsZFt0eXBlPVwic2VhcmNoXCJdJz48L25nLWNvbnRlbnQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9mb3JtPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuPGRpdiAjZGF0YVZpZXcgc21lTWFzdGVyVmlld0NvbnRlbnREaXJlY3RpdmUgKHNtZURhdGFUYWJsZUZyb21UZW1wbGF0ZVJlYWR5KT1cIm9uU21lRGF0YVRhYmxlRnJvbVRlbXBsYXRlUmVhZHkoKVwiXHJcbiAgW2NsYXNzLnNtZS1tYXJnaW4taG9yaXpvbnRhbC1sZ109XCJzaG91bGREYXRhVGFibGVTbGltXCJcclxuICBbY2xhc3Muc21lLXBhZGRpbmctYm90dG9tLW1kXT1cInNob3VsZERhdGFUYWJsZVJlbmRlcldpdGhCb3R0b21NYXJnaW5cIlxyXG4gIFtjbGFzcy5zbWUtYXJyYW5nZS1vdmVyZmxvdy1oaWRlXT1cInNob3VsZERhdGFUYWJsZVBhcmVudE92ZXJmbG93SGlkZVwiXHJcbiAgY2xhc3M9XCJzbWUtbGF5b3V0LXJlbGF0aXZlIHNtZS1wb3NpdGlvbi1mbGV4LWF1dG8gc21lLWFycmFuZ2Utc3RhY2staCBzbWUtbGF5b3V0LW1pbndpZHRoLXt7ZGF0YVRhYmxlTWluV2lkdGhDbGFzc1N0cmluZ319XCJcclxuICBbY2xhc3Muc21lLXNoYWRvdy1zY3JvbGxlZC1jb250ZW50XT1cIiFpc0RhdGFMaXN0U2Nyb2xsZWRUb1RvcFwiPlxyXG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG48L2Rpdj5cclxuIl19
@@ -58,28 +58,67 @@ function SmeWizardLiteFooterTemplateComponent_div_0_Template(rf, ctx) { if (rf &
58
58
  export class SmeWizardLiteFooterTemplateComponent extends CoreBaseComponent {
59
59
  constructor(injector) {
60
60
  super(injector);
61
+ /**
62
+ * Whether to display the exit button.
63
+ */
61
64
  this.displayExitButton = true;
65
+ /**
66
+ * Whether to display the wizard button.
67
+ */
62
68
  this.displayWizardButton = true;
69
+ /**
70
+ * Whether to display the review button.
71
+ */
63
72
  this.displayReviewButton = true;
73
+ /**
74
+ * Whether the review button is disabled.
75
+ */
64
76
  this.isReviewButtonDisabled = false;
77
+ /**
78
+ * The output event emitter for the review button clicked event.
79
+ */
65
80
  this.reviewButtonClickedEventEmitter = new EventEmitter();
81
+ /**
82
+ * The output event emitter for the exit button clicked event.
83
+ */
66
84
  this.exitButtonClickedEventEmitter = new EventEmitter();
85
+ /**
86
+ * The output event emitter for the prev button clicked event.
87
+ */
67
88
  this.prevButtonClickedEventEmitter = new EventEmitter();
89
+ /**
90
+ * The output event emitter for the next button clicked event.
91
+ */
68
92
  this.nextButtonClickedEventEmitter = new EventEmitter();
93
+ /**
94
+ * Internal buttons.
95
+ */
69
96
  this.buttonsInternal = [];
70
97
  }
71
98
  get logSourceName() {
72
99
  return 'SmeWizardLiteFooterTemplateComponent';
73
100
  }
101
+ /**
102
+ * Setter buttons object.
103
+ */
74
104
  set buttons(buttons) {
75
105
  this.buttonsInternal = buttons;
76
106
  }
107
+ /**
108
+ * Getter button object.
109
+ */
77
110
  get buttons() {
78
111
  return this.buttonsInternal;
79
112
  }
113
+ /**
114
+ * Getter for the review button text.
115
+ */
80
116
  get reviewButtonTextForRendering() {
81
117
  return this.reviewButtonText ?? this.strings.MsftSmeShell.Angular.Wizard.Lite.FooterTemplate.review;
82
118
  }
119
+ /**
120
+ * Getter for the exit button text.
121
+ */
83
122
  get exitButtonTextForRendering() {
84
123
  return this.exitButtonText ?? this.strings.MsftSmeShell.Angular.Wizard.Lite.FooterTemplate.exit;
85
124
  }
@@ -97,21 +136,37 @@ export class SmeWizardLiteFooterTemplateComponent extends CoreBaseComponent {
97
136
  }
98
137
  this.wizardButton.updateStartIndexByLabel(tab.label);
99
138
  }
139
+ /**
140
+ * The on prev button clicked event handler.
141
+ * @param $event the click event
142
+ */
100
143
  onPrevButtonClicked($event) {
101
144
  if (!this.wizardButton) {
102
145
  return;
103
146
  }
104
147
  this.prevButtonClickedEventEmitter.emit($event);
105
148
  }
149
+ /**
150
+ * The on next button clicked event handler.
151
+ * @param $event the click event
152
+ */
106
153
  onNextButtonClicked($event) {
107
154
  if (!this.wizardButton) {
108
155
  return;
109
156
  }
110
157
  this.nextButtonClickedEventEmitter.emit($event);
111
158
  }
159
+ /**
160
+ * The on review button clicked event handler.
161
+ * @param $event the click event
162
+ */
112
163
  onReviewButtonClicked($event) {
113
164
  this.reviewButtonClickedEventEmitter.emit($event);
114
165
  }
166
+ /**
167
+ * The on exit button clicked event handler.
168
+ * @param $event the click event
169
+ */
115
170
  onExitButtonClicked($event) {
116
171
  this.exitButtonClickedEventEmitter.emit($event);
117
172
  }
@@ -178,4 +233,4 @@ __decorate([
178
233
  type: ViewChild,
179
234
  args: [WizardNavigationButtonComponent]
180
235
  }], onPrevButtonClicked: [], onNextButtonClicked: [], onReviewButtonClicked: [], onExitButtonClicked: [] }); })();
181
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21lLXdpemFyZC1saXRlLWZvb3Rlci10ZW1wbGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy91eC9zbWUtdXgtZm9vdGVyL3NtZS11eC1mb290ZXItdGVtcGxhdGUvc21lLXdpemFyZC1saXRlLWZvb3Rlci10ZW1wbGF0ZS9zbWUtd2l6YXJkLWxpdGUtZm9vdGVyLXRlbXBsYXRlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FuZ3VsYXIvc3JjL2NvbnRyb2xzL3V4L3NtZS11eC1mb290ZXIvc21lLXV4LWZvb3Rlci10ZW1wbGF0ZS9zbWUtd2l6YXJkLWxpdGUtZm9vdGVyLXRlbXBsYXRlL3NtZS13aXphcmQtbGl0ZS1mb290ZXItdGVtcGxhdGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBb0IsU0FBUyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUcsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLDBFQUEwRSxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRXRFLE9BQU8sRUFBRSwrQkFBK0IsRUFBOEIsTUFBTSxxRkFBcUYsQ0FBQzs7Ozs7O0lDSGhLLGlDQUF3SjtJQUFqRixpTUFBUyxlQUFBLG9DQUE2QixDQUFBLElBQUM7SUFDNUcsK0JBQW1IO0lBQ2pILFlBQWtDO0lBQUEsaUJBQU8sRUFBQTs7O0lBRnJDLHdEQUFtQztJQUV2QyxlQUFrQztJQUFsQyxtRUFBa0M7Ozs7SUFFdEMsMERBR21EO0lBRGpELHVRQUFzQixlQUFBLGtDQUEyQixDQUFBLElBQUMsc1BBQzlCLGVBQUEsa0NBQTJCLENBQUEs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QixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwRCxDQUFDOzsySUFwR1Esb0NBQW9DO3NIQUFwQyxvQ0FBb0M7dUJBK0JsQywrQkFBK0I7Ozs7O1FDekM5QyxxRkFhTTs7UUFic0Usa0dBQXFFOztBRG9GN0k7SUFBQyxLQUFLLEVBQUU7Ozs7K0VBT1A7QUFFRDtJQUFDLEtBQUssRUFBRTs7OzsrRUFPUDtBQUVEO0lBQUMsS0FBSyxFQUFFOzs7O2lGQUdQO0FBRUQ7SUFBQyxLQUFLLEVBQUU7Ozs7K0VBR1A7dUZBcEdRLG9DQUFvQztjQUpoRCxTQUFTOzJCQUNJLGlDQUFpQzsyREFTcEMsaUJBQWlCO2tCQUR2QixLQUFLO1lBSUMsbUJBQW1CO2tCQUR6QixLQUFLO1lBSUMsbUJBQW1CO2tCQUR6QixLQUFLO1lBSUMsZ0JBQWdCO2tCQUR0QixLQUFLO1lBSUMsc0JBQXNCO2tCQUQ1QixLQUFLO1lBSUMsY0FBYztrQkFEcEIsS0FBSztZQUdJLCtCQUErQjtrQkFBeEMsTUFBTTtZQUVHLDZCQUE2QjtrQkFBdEMsTUFBTTtZQUVHLDZCQUE2QjtrQkFBdEMsTUFBTTtZQUVHLDZCQUE2QjtrQkFBdEMsTUFBTTtZQUdBLFlBQVk7a0JBRGxCLFNBQVM7bUJBQUMsK0JBQStCO1lBNENuQyxtQkFBbUIsTUFTbkIsbUJBQW1CLE1BU25CLHFCQUFxQixNQUtyQixtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlckNvbnRlbnRJbml0LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5qZWN0b3IsIElucHV0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBZaWVsZCB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvYmFzZS9kZWNvcmF0b3JzL3lpZWxkLmRlY29yYXRvcic7XHJcbmltcG9ydCB7IENvcmVCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vY29tbW9uL2Jhc2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUGl2b3RUYWJDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi8uLi9waXZvdCc7XHJcbmltcG9ydCB7IFdpemFyZE5hdmlnYXRpb25CdXR0b25Db21wb25lbnQsIFdpemFyZE5hdmlnYXRpb25CdXR0b25EYXRhIH0gZnJvbSAnLi4vLi4vLi4vLi4vd2l6YXJkLWxpdGUvd2l6YXJkLW5hdmlnYXRpb24tYnV0dG9uL3dpemFyZC1uYXZpZ2F0aW9uLWJ1dHRvbi5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3NtZS13aXphcmQtbGl0ZS1mb290ZXItdGVtcGxhdGUnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NtZS13aXphcmQtbGl0ZS1mb290ZXItdGVtcGxhdGUuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTbWVXaXphcmRMaXRlRm9vdGVyVGVtcGxhdGVDb21wb25lbnQgZXh0ZW5kcyBDb3JlQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQge1xyXG4gICAgcHJvdGVjdGVkIGdldCBsb2dTb3VyY2VOYW1lKCkge1xyXG4gICAgICAgIHJldHVybiAnU21lV2l6YXJkTGl0ZUZvb3RlclRlbXBsYXRlQ29tcG9uZW50JztcclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGRpc3BsYXlFeGl0QnV0dG9uID0gdHJ1ZTtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGRpc3BsYXlXaXphcmRCdXR0b24gPSB0cnVlO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgZGlzcGxheVJldmlld0J1dHRvbiA9IHRydWU7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyByZXZpZXdCdXR0b25UZXh0OiBzdHJpbmc7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBpc1Jldmlld0J1dHRvbkRpc2FibGVkID0gZmFsc2U7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBleGl0QnV0dG9uVGV4dDogc3RyaW5nO1xyXG5cclxuICAgIEBPdXRwdXQoKSByZXZpZXdCdXR0b25DbGlja2VkRXZlbnRFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gICAgQE91dHB1dCgpIGV4aXRCdXR0b25DbGlja2VkRXZlbnRFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gICAgQE91dHB1dCgpIHByZXZCdXR0b25DbGlja2VkRXZlbnRFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gICAgQE91dHB1dCgpIG5leHRCdXR0b25DbGlja2VkRXZlbnRFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gICAgQFZpZXdDaGlsZChXaXphcmROYXZpZ2F0aW9uQnV0dG9uQ29tcG9uZW50KVxyXG4gICAgcHVibGljIHdpemFyZEJ1dHRvbjogV2l6YXJkTmF2aWdhdGlvbkJ1dHRvbkNvbXBvbmVudDtcclxuXHJcbiAgICBwdWJsaWMgc2V0IGJ1dHRvbnMoYnV0dG9uczogV2l6YXJkTmF2aWdhdGlvbkJ1dHRvbkRhdGFbXSkge1xyXG4gICAgICAgIHRoaXMuYnV0dG9uc0ludGVybmFsID0gYnV0dG9ucztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGJ1dHRvbnMoKTogV2l6YXJkTmF2aWdhdGlvbkJ1dHRvbkRhdGFbXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYnV0dG9uc0ludGVybmFsO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgcmV2aWV3QnV0dG9uVGV4dEZvclJlbmRlcmluZygpIHtcclxuICAgICAgICByZXR1cm4gIHRoaXMucmV2aWV3QnV0dG9uVGV4dCA/PyB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuV2l6YXJkLkxpdGUuRm9vdGVyVGVtcGxhdGUucmV2aWV3O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgZXhpdEJ1dHRvblRleHRGb3JSZW5kZXJpbmcoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhpdEJ1dHRvblRleHQgPz8gdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLldpemFyZC5MaXRlLkZvb3RlclRlbXBsYXRlLmV4aXQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBidXR0b25zSW50ZXJuYWw6IFdpemFyZE5hdmlnYXRpb25CdXR0b25EYXRhW10gPSBbXTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3IpIHtcclxuICAgICAgICBzdXBlcihpbmplY3Rvcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJdCBoYW5kbGVzIHRoZSBvbiBzZWxlY3Rpb24gY2hhbmdlZCBldmVudCBmcm9tIHRoZSBleHRlcm5hbCBwaXZvdCB0YWIgY29tcG9uZW50LlxyXG4gICAgICogQHBhcmFtIHRhYiB0aGUgY3VycmVudCBzZWxlY3RlZCBwaXZvdCB0YWIuXHJcbiAgICAgKiBAcmV0dXJucyB2b2lkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25TZWxlY3Rpb25DaGFuZ2VkKHRhYjogUGl2b3RUYWJDb21wb25lbnQpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRhYiB8fCAhdGFiLmxhYmVsKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0YWIubGFiZWwgPT09IHRoaXMud2l6YXJkQnV0dG9uLmdldEN1cnJlbnRBY3RpdmF0ZWRCdXR0b25MYWJlbCgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMud2l6YXJkQnV0dG9uLnVwZGF0ZVN0YXJ0SW5kZXhCeUxhYmVsKHRhYi5sYWJlbCk7XHJcbiAgICB9XHJcblxyXG4gICAgQFlpZWxkKClcclxuICAgIHB1YmxpYyBvblByZXZCdXR0b25DbGlja2VkKCRldmVudCkge1xyXG4gICAgICAgIGlmICghdGhpcy53aXphcmRCdXR0b24pIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5wcmV2QnV0dG9uQ2xpY2tlZEV2ZW50RW1pdHRlci5lbWl0KCRldmVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgQFlpZWxkKClcclxuICAgIHB1YmxpYyBvbk5leHRCdXR0b25DbGlja2VkKCRldmVudCkge1xyXG4gICAgICAgIGlmICghdGhpcy53aXphcmRCdXR0b24pIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5uZXh0QnV0dG9uQ2xpY2tlZEV2ZW50RW1pdHRlci5lbWl0KCRldmVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgQFlpZWxkKClcclxuICAgIHB1YmxpYyBvblJldmlld0J1dHRvbkNsaWNrZWQoJGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5yZXZpZXdCdXR0b25DbGlja2VkRXZlbnRFbWl0dGVyLmVtaXQoJGV2ZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBAWWllbGQoKVxyXG4gICAgcHVibGljIG9uRXhpdEJ1dHRvbkNsaWNrZWQoJGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5leGl0QnV0dG9uQ2xpY2tlZEV2ZW50RW1pdHRlci5lbWl0KCRldmVudCk7XHJcbiAgICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInNtZS1hcnJhbmdlLXdyYXBzdGFjay1oIHNtZS1wb3NpdGlvbi1zdHJldGNoLWggc21lLWZvY3VzLXpvbmVcIiAqbmdJZj1cImRpc3BsYXlSZXZpZXdCdXR0b24gfHwgZGlzcGxheVdpemFyZEJ1dHRvbiB8fCBkaXNwbGF5RXhpdEJ1dHRvblwiPlxyXG4gIDxidXR0b24gW2Rpc2FibGVkXT1cImlzUmV2aWV3QnV0dG9uRGlzYWJsZWRcIiBjbGFzcz1cInNtZS1idXR0b24tcHJpbWFyeVwiIChjbGljayk9XCJvblJldmlld0J1dHRvbkNsaWNrZWQoJGV2ZW50KVwiIHRhYmluZGV4PVwiMFwiICpuZ0lmPVwiZGlzcGxheVJldmlld0J1dHRvblwiPlxyXG4gICAgPHNwYW4gY2xhc3M9XCJzbWUtcG9zaXRpb24tZmxleC1hdXRvIHNtZS1wb3NpdGlvbi1mbGV4LWdyb3ctc3RhcnQgc21lLWFycmFuZ2UtZWxsaXBzaXMgc21lLWFjdGlvbi1idXR0b24tdGV4dC1zcGFuXCI+XHJcbiAgICAgIHt7IHJldmlld0J1dHRvblRleHRGb3JSZW5kZXJpbmcgfX08L3NwYW4+XHJcbiAgPC9idXR0b24+XHJcbiAgPHNtZS13aXphcmQtbmF2aWdhdGlvbi1idXR0b24gI3dpemFyZEJ1dHRvbiBjbGFzcz1cInNtZS1wYWRkaW5nLWxlZnQtbGcgc21lLWZvY3VzLXpvbmVcIiAqbmdJZj1cImRpc3BsYXlXaXphcmRCdXR0b25cIlxyXG4gICAgW2J1dHRvbnNdPVwiYnV0dG9uc1wiXHJcbiAgICAoc3RhcnRCdXR0b25DbGlja2VkKT1cIm9uUHJldkJ1dHRvbkNsaWNrZWQoJGV2ZW50KVwiXHJcbiAgICAoZW5kQnV0dG9uQ2xpY2tlZCk9XCJvbk5leHRCdXR0b25DbGlja2VkKCRldmVudClcIj48L3NtZS13aXphcmQtbmF2aWdhdGlvbi1idXR0b24+XHJcbiAgPGJ1dHRvbiBjbGFzcz1cInNtZS1sYXlvdXQtYnV0dG9uLWZsZXgtZW5kXCIgKGNsaWNrKT1cIm9uRXhpdEJ1dHRvbkNsaWNrZWQoJGV2ZW50KVwiIHRhYmluZGV4PVwiMFwiICpuZ0lmPVwiZGlzcGxheUV4aXRCdXR0b25cIj5cclxuICAgIDxzcGFuIGNsYXNzPVwic21lLXBvc2l0aW9uLWZsZXgtYXV0byBzbWUtcG9zaXRpb24tZmxleC1ncm93LXN0YXJ0IHNtZS1hcnJhbmdlLWVsbGlwc2lzIHNtZS1hY3Rpb24tYnV0dG9uLXRleHQtc3BhblwiPlxyXG4gICAgICB7eyBleGl0QnV0dG9uVGV4dEZvclJlbmRlcmluZyB9fTwvc3Bhbj5cclxuICA8L2J1dHRvbj5cclxuPC9kaXY+XHJcbiJdfQ==
236
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21lLXdpemFyZC1saXRlLWZvb3Rlci10ZW1wbGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy91eC9zbWUtdXgtZm9vdGVyL3NtZS11eC1mb290ZXItdGVtcGxhdGUvc21lLXdpemFyZC1saXRlLWZvb3Rlci10ZW1wbGF0ZS9zbWUtd2l6YXJkLWxpdGUtZm9vdGVyLXRlbXBsYXRlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FuZ3VsYXIvc3JjL2NvbnRyb2xzL3V4L3NtZS11eC1mb290ZXIvc21lLXV4LWZvb3Rlci10ZW1wbGF0ZS9zbWUtd2l6YXJkLWxpdGUtZm9vdGVyLXRlbXBsYXRlL3NtZS13aXphcmQtbGl0ZS1mb290ZXItdGVtcGxhdGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBb0IsU0FBUyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUcsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLDBFQUEwRSxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRXRFLE9BQU8sRUFBRSwrQkFBK0IsRUFBOEIsTUFBTSxxRkFBcUYsQ0FBQzs7Ozs7O0lDSGhLLGlDQUF3SjtJQUFqRixpTUFBUyxlQUFBLG9DQUE2QixDQUFBLElBQUM7SUFDNUcsK0JBQW1IO0lBQ2pILFlBQWtDO0lBQUEsaUJBQU8sRUFBQTs7O0lBRnJDLHdEQUFtQztJQUV2QyxlQUFrQztJQUFsQyxtRUFBa0M7Ozs7SUFFdEMsMERBR21EO0lBRGpELHVRQUFzQixlQUFBLGtDQUEyQixDQUFBLElBQUMsc1BBQzlCLGVBQUEsa0NBQTJCLENBQUEs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QUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRDs7O09BR0c7SUFFSSxxQkFBcUIsQ0FBQyxNQUFNO1FBQy9CLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVEOzs7T0FHRztJQUVJLG1CQUFtQixDQUFDLE1BQU07UUFDN0IsSUFBSSxDQUFDLDZCQUE2QixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwRCxDQUFDOzsySUFwS1Esb0NBQW9DO3NIQUFwQyxvQ0FBb0M7dUJBZ0VsQywrQkFBK0I7Ozs7O1FDMUU5QyxxRkFhTTs7UUFic0Usa0dBQXFFOztBRHdJN0k7SUFBQyxLQUFLLEVBQUU7Ozs7K0VBT1A7QUFNRDtJQUFDLEtBQUssRUFBRTs7OzsrRUFPUDtBQU1EO0lBQUMsS0FBSyxFQUFFOzs7O2lGQUdQO0FBTUQ7SUFBQyxLQUFLLEVBQUU7Ozs7K0VBR1A7dUZBcEtRLG9DQUFvQztjQUpoRCxTQUFTOzJCQUNJLGlDQUFpQzsyREFZcEMsaUJBQWlCO2tCQUR2QixLQUFLO1lBT0MsbUJBQW1CO2tCQUR6QixLQUFLO1lBT0MsbUJBQW1CO2tCQUR6QixLQUFLO1lBT0MsZ0JBQWdCO2tCQUR0QixLQUFLO1lBT0Msc0JBQXNCO2tCQUQ1QixLQUFLO1lBT0MsY0FBYztrQkFEcEIsS0FBSztZQU1JLCtCQUErQjtrQkFBeEMsTUFBTTtZQUtHLDZCQUE2QjtrQkFBdEMsTUFBTTtZQUtHLDZCQUE2QjtrQkFBdEMsTUFBTTtZQUtHLDZCQUE2QjtrQkFBdEMsTUFBTTtZQU1BLFlBQVk7a0JBRGxCLFNBQVM7bUJBQUMsK0JBQStCO1lBK0RuQyxtQkFBbUIsTUFhbkIsbUJBQW1CLE1BYW5CLHFCQUFxQixNQVNyQixtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlckNvbnRlbnRJbml0LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5qZWN0b3IsIElucHV0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBZaWVsZCB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvYmFzZS9kZWNvcmF0b3JzL3lpZWxkLmRlY29yYXRvcic7XHJcbmltcG9ydCB7IENvcmVCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vY29tbW9uL2Jhc2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUGl2b3RUYWJDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi8uLi9waXZvdCc7XHJcbmltcG9ydCB7IFdpemFyZE5hdmlnYXRpb25CdXR0b25Db21wb25lbnQsIFdpemFyZE5hdmlnYXRpb25CdXR0b25EYXRhIH0gZnJvbSAnLi4vLi4vLi4vLi4vd2l6YXJkLWxpdGUvd2l6YXJkLW5hdmlnYXRpb24tYnV0dG9uL3dpemFyZC1uYXZpZ2F0aW9uLWJ1dHRvbi5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3NtZS13aXphcmQtbGl0ZS1mb290ZXItdGVtcGxhdGUnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NtZS13aXphcmQtbGl0ZS1mb290ZXItdGVtcGxhdGUuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTbWVXaXphcmRMaXRlRm9vdGVyVGVtcGxhdGVDb21wb25lbnQgZXh0ZW5kcyBDb3JlQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQge1xyXG4gICAgcHJvdGVjdGVkIGdldCBsb2dTb3VyY2VOYW1lKCkge1xyXG4gICAgICAgIHJldHVybiAnU21lV2l6YXJkTGl0ZUZvb3RlclRlbXBsYXRlQ29tcG9uZW50JztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFdoZXRoZXIgdG8gZGlzcGxheSB0aGUgZXhpdCBidXR0b24uXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgZGlzcGxheUV4aXRCdXR0b24gPSB0cnVlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogV2hldGhlciB0byBkaXNwbGF5IHRoZSB3aXphcmQgYnV0dG9uLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGRpc3BsYXlXaXphcmRCdXR0b24gPSB0cnVlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogV2hldGhlciB0byBkaXNwbGF5IHRoZSByZXZpZXcgYnV0dG9uLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGRpc3BsYXlSZXZpZXdCdXR0b24gPSB0cnVlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHRleHQgZm9yIHRoZSByZXZpZXcgYnV0dG9uLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHJldmlld0J1dHRvblRleHQ6IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFdoZXRoZXIgdGhlIHJldmlldyBidXR0b24gaXMgZGlzYWJsZWQuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgaXNSZXZpZXdCdXR0b25EaXNhYmxlZCA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHRleHQgZm9yIHRoZSBleGl0IGJ1dHRvbi5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBleGl0QnV0dG9uVGV4dDogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG91dHB1dCBldmVudCBlbWl0dGVyIGZvciB0aGUgcmV2aWV3IGJ1dHRvbiBjbGlja2VkIGV2ZW50LlxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgcmV2aWV3QnV0dG9uQ2xpY2tlZEV2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG91dHB1dCBldmVudCBlbWl0dGVyIGZvciB0aGUgZXhpdCBidXR0b24gY2xpY2tlZCBldmVudC5cclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpIGV4aXRCdXR0b25DbGlja2VkRXZlbnRFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgb3V0cHV0IGV2ZW50IGVtaXR0ZXIgZm9yIHRoZSBwcmV2IGJ1dHRvbiBjbGlja2VkIGV2ZW50LlxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgcHJldkJ1dHRvbkNsaWNrZWRFdmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBvdXRwdXQgZXZlbnQgZW1pdHRlciBmb3IgdGhlIG5leHQgYnV0dG9uIGNsaWNrZWQgZXZlbnQuXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKSBuZXh0QnV0dG9uQ2xpY2tlZEV2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHZpZXcgY2hpbGQgZm9yIHdpemFyZCBidXR0b24gZWxlbWVudC5cclxuICAgICAqL1xyXG4gICAgQFZpZXdDaGlsZChXaXphcmROYXZpZ2F0aW9uQnV0dG9uQ29tcG9uZW50KVxyXG4gICAgcHVibGljIHdpemFyZEJ1dHRvbjogV2l6YXJkTmF2aWdhdGlvbkJ1dHRvbkNvbXBvbmVudDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHRlciBidXR0b25zIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldCBidXR0b25zKGJ1dHRvbnM6IFdpemFyZE5hdmlnYXRpb25CdXR0b25EYXRhW10pIHtcclxuICAgICAgICB0aGlzLmJ1dHRvbnNJbnRlcm5hbCA9IGJ1dHRvbnM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXR0ZXIgYnV0dG9uIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBidXR0b25zKCk6IFdpemFyZE5hdmlnYXRpb25CdXR0b25EYXRhW10ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJ1dHRvbnNJbnRlcm5hbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHRlciBmb3IgdGhlIHJldmlldyBidXR0b24gdGV4dC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCByZXZpZXdCdXR0b25UZXh0Rm9yUmVuZGVyaW5nKCkge1xyXG4gICAgICAgIHJldHVybiAgdGhpcy5yZXZpZXdCdXR0b25UZXh0ID8/IHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5XaXphcmQuTGl0ZS5Gb290ZXJUZW1wbGF0ZS5yZXZpZXc7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXR0ZXIgZm9yIHRoZSBleGl0IGJ1dHRvbiB0ZXh0LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGV4aXRCdXR0b25UZXh0Rm9yUmVuZGVyaW5nKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmV4aXRCdXR0b25UZXh0ID8/IHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5XaXphcmQuTGl0ZS5Gb290ZXJUZW1wbGF0ZS5leGl0O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgYnV0dG9ucy5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBidXR0b25zSW50ZXJuYWw6IFdpemFyZE5hdmlnYXRpb25CdXR0b25EYXRhW10gPSBbXTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3IpIHtcclxuICAgICAgICBzdXBlcihpbmplY3Rvcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJdCBoYW5kbGVzIHRoZSBvbiBzZWxlY3Rpb24gY2hhbmdlZCBldmVudCBmcm9tIHRoZSBleHRlcm5hbCBwaXZvdCB0YWIgY29tcG9uZW50LlxyXG4gICAgICogQHBhcmFtIHRhYiB0aGUgY3VycmVudCBzZWxlY3RlZCBwaXZvdCB0YWIuXHJcbiAgICAgKiBAcmV0dXJucyB2b2lkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25TZWxlY3Rpb25DaGFuZ2VkKHRhYjogUGl2b3RUYWJDb21wb25lbnQpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRhYiB8fCAhdGFiLmxhYmVsKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0YWIubGFiZWwgPT09IHRoaXMud2l6YXJkQnV0dG9uLmdldEN1cnJlbnRBY3RpdmF0ZWRCdXR0b25MYWJlbCgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMud2l6YXJkQnV0dG9uLnVwZGF0ZVN0YXJ0SW5kZXhCeUxhYmVsKHRhYi5sYWJlbCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgb24gcHJldiBidXR0b24gY2xpY2tlZCBldmVudCBoYW5kbGVyLlxyXG4gICAgICogQHBhcmFtICRldmVudCB0aGUgY2xpY2sgZXZlbnRcclxuICAgICAqL1xyXG4gICAgQFlpZWxkKClcclxuICAgIHB1YmxpYyBvblByZXZCdXR0b25DbGlja2VkKCRldmVudCkge1xyXG4gICAgICAgIGlmICghdGhpcy53aXphcmRCdXR0b24pIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5wcmV2QnV0dG9uQ2xpY2tlZEV2ZW50RW1pdHRlci5lbWl0KCRldmVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgb24gbmV4dCBidXR0b24gY2xpY2tlZCBldmVudCBoYW5kbGVyLlxyXG4gICAgICogQHBhcmFtICRldmVudCB0aGUgY2xpY2sgZXZlbnRcclxuICAgICAqL1xyXG4gICAgQFlpZWxkKClcclxuICAgIHB1YmxpYyBvbk5leHRCdXR0b25DbGlja2VkKCRldmVudCkge1xyXG4gICAgICAgIGlmICghdGhpcy53aXphcmRCdXR0b24pIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5uZXh0QnV0dG9uQ2xpY2tlZEV2ZW50RW1pdHRlci5lbWl0KCRldmVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgb24gcmV2aWV3IGJ1dHRvbiBjbGlja2VkIGV2ZW50IGhhbmRsZXIuXHJcbiAgICAgKiBAcGFyYW0gJGV2ZW50IHRoZSBjbGljayBldmVudFxyXG4gICAgICovXHJcbiAgICBAWWllbGQoKVxyXG4gICAgcHVibGljIG9uUmV2aWV3QnV0dG9uQ2xpY2tlZCgkZXZlbnQpIHtcclxuICAgICAgICB0aGlzLnJldmlld0J1dHRvbkNsaWNrZWRFdmVudEVtaXR0ZXIuZW1pdCgkZXZlbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG9uIGV4aXQgYnV0dG9uIGNsaWNrZWQgZXZlbnQgaGFuZGxlci5cclxuICAgICAqIEBwYXJhbSAkZXZlbnQgdGhlIGNsaWNrIGV2ZW50XHJcbiAgICAgKi9cclxuICAgIEBZaWVsZCgpXHJcbiAgICBwdWJsaWMgb25FeGl0QnV0dG9uQ2xpY2tlZCgkZXZlbnQpIHtcclxuICAgICAgICB0aGlzLmV4aXRCdXR0b25DbGlja2VkRXZlbnRFbWl0dGVyLmVtaXQoJGV2ZW50KTtcclxuICAgIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwic21lLWFycmFuZ2Utd3JhcHN0YWNrLWggc21lLXBvc2l0aW9uLXN0cmV0Y2gtaCBzbWUtZm9jdXMtem9uZVwiICpuZ0lmPVwiZGlzcGxheVJldmlld0J1dHRvbiB8fCBkaXNwbGF5V2l6YXJkQnV0dG9uIHx8IGRpc3BsYXlFeGl0QnV0dG9uXCI+XHJcbiAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwiaXNSZXZpZXdCdXR0b25EaXNhYmxlZFwiIGNsYXNzPVwic21lLWJ1dHRvbi1wcmltYXJ5XCIgKGNsaWNrKT1cIm9uUmV2aWV3QnV0dG9uQ2xpY2tlZCgkZXZlbnQpXCIgdGFiaW5kZXg9XCIwXCIgKm5nSWY9XCJkaXNwbGF5UmV2aWV3QnV0dG9uXCI+XHJcbiAgICA8c3BhbiBjbGFzcz1cInNtZS1wb3NpdGlvbi1mbGV4LWF1dG8gc21lLXBvc2l0aW9uLWZsZXgtZ3Jvdy1zdGFydCBzbWUtYXJyYW5nZS1lbGxpcHNpcyBzbWUtYWN0aW9uLWJ1dHRvbi10ZXh0LXNwYW5cIj5cclxuICAgICAge3sgcmV2aWV3QnV0dG9uVGV4dEZvclJlbmRlcmluZyB9fTwvc3Bhbj5cclxuICA8L2J1dHRvbj5cclxuICA8c21lLXdpemFyZC1uYXZpZ2F0aW9uLWJ1dHRvbiAjd2l6YXJkQnV0dG9uIGNsYXNzPVwic21lLXBhZGRpbmctbGVmdC1sZyBzbWUtZm9jdXMtem9uZVwiICpuZ0lmPVwiZGlzcGxheVdpemFyZEJ1dHRvblwiXHJcbiAgICBbYnV0dG9uc109XCJidXR0b25zXCJcclxuICAgIChzdGFydEJ1dHRvbkNsaWNrZWQpPVwib25QcmV2QnV0dG9uQ2xpY2tlZCgkZXZlbnQpXCJcclxuICAgIChlbmRCdXR0b25DbGlja2VkKT1cIm9uTmV4dEJ1dHRvbkNsaWNrZWQoJGV2ZW50KVwiPjwvc21lLXdpemFyZC1uYXZpZ2F0aW9uLWJ1dHRvbj5cclxuICA8YnV0dG9uIGNsYXNzPVwic21lLWxheW91dC1idXR0b24tZmxleC1lbmRcIiAoY2xpY2spPVwib25FeGl0QnV0dG9uQ2xpY2tlZCgkZXZlbnQpXCIgdGFiaW5kZXg9XCIwXCIgKm5nSWY9XCJkaXNwbGF5RXhpdEJ1dHRvblwiPlxyXG4gICAgPHNwYW4gY2xhc3M9XCJzbWUtcG9zaXRpb24tZmxleC1hdXRvIHNtZS1wb3NpdGlvbi1mbGV4LWdyb3ctc3RhcnQgc21lLWFycmFuZ2UtZWxsaXBzaXMgc21lLWFjdGlvbi1idXR0b24tdGV4dC1zcGFuXCI+XHJcbiAgICAgIHt7IGV4aXRCdXR0b25UZXh0Rm9yUmVuZGVyaW5nIH19PC9zcGFuPlxyXG4gIDwvYnV0dG9uPlxyXG48L2Rpdj5cclxuIl19