@microsoft/windows-admin-center-sdk 2.296.0 → 2.298.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/angular/assets/strings/cs-CZ/strings.json +1 -1
- package/angular/assets/strings/de-DE/strings.json +1 -1
- package/angular/assets/strings/es-ES/strings.json +1 -1
- package/angular/assets/strings/fr-FR/strings.json +1 -1
- package/angular/assets/strings/hu-HU/strings.json +1 -1
- package/angular/assets/strings/it-IT/strings.json +1 -1
- package/angular/assets/strings/ja-JP/strings.json +1 -1
- package/angular/assets/strings/ko-KR/strings.json +1 -1
- package/angular/assets/strings/nl-NL/strings.json +1 -1
- package/angular/assets/strings/pl-PL/strings.json +1 -1
- package/angular/assets/strings/pt-BR/strings.json +1 -1
- package/angular/assets/strings/pt-PT/strings.json +1 -1
- package/angular/assets/strings/ru-RU/strings.json +1 -1
- package/angular/assets/strings/strings.json +1 -1
- package/angular/assets/strings/sv-SE/strings.json +1 -1
- package/angular/assets/strings/tr-TR/strings.json +1 -1
- package/angular/assets/strings/zh-CN/strings.json +1 -1
- package/angular/assets/strings/zh-TW/strings.json +1 -1
- package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.js +558 -240
- package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.js.map +1 -1
- package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.min.js +2 -2
- package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.min.js.map +1 -1
- package/angular/esm2015/src/controls/actions/containers/action-bar/action-bar.component.js +7 -2
- package/angular/esm2015/src/controls/alert-bar/alert-bar.component.js +5 -5
- package/angular/esm2015/src/controls/common/base.component.js +8 -1
- package/angular/esm2015/src/controls/data-table/data-table.component.js +39 -9
- package/angular/esm2015/src/controls/form/form-field/checklist/checklist-form-field.component.js +11 -8
- package/angular/esm2015/src/controls/form/form-field/combobox/combobox-form-field.component.js +8 -9
- package/angular/esm2015/src/controls/form/form-field/file/file-form-field.component.js +14 -2
- package/angular/esm2015/src/controls/form/form-field/form-field.component.js +9 -2
- package/angular/esm2015/src/controls/layout/layout-definition.component.js +9 -2
- package/angular/esm2015/src/controls/layout/layout.component.js +11 -2
- package/angular/esm2015/src/controls/master-view/master-view.component.js +32 -5
- package/angular/esm2015/src/controls/page-alert-bar/models/index.js +1 -1
- package/angular/esm2015/src/controls/pivot/pivot.component.js +11 -5
- package/angular/esm2015/src/controls/property-grid/property-grid-item.component.js +50 -2
- package/angular/esm2015/src/controls/property-grid/property-grid.component.js +73 -60
- package/angular/esm2015/src/controls/property-grid/property-grid.module.js +5 -1
- package/angular/esm2015/src/controls/settings/common-settings/common-settings.component.js +151 -70
- package/angular/esm2015/src/controls/settings/settings.component.js +48 -8
- package/angular/esm2015/src/controls/settings/settings.module.js +21 -9
- package/angular/esm2015/src/controls/wizard/wizard.component.js +55 -65
- package/angular/esm2015/src/generated/strings.js +1 -1
- package/angular/esm2015/src/service/app-context.service.js +3 -1
- package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.js +535 -240
- package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.js.map +1 -1
- package/angular/package.json +2 -0
- package/angular/src/controls/common/base.component.d.ts +5 -0
- package/angular/src/controls/data-table/data-table.component.d.ts +15 -0
- package/angular/src/controls/form/form-field/checklist/checklist-form-field.component.d.ts +1 -0
- package/angular/src/controls/form/form-field/file/file-form-field.component.d.ts +4 -0
- package/angular/src/controls/layout/layout-definition.component.d.ts +6 -1
- package/angular/src/controls/master-view/master-view.component.d.ts +118 -2
- package/angular/src/controls/page-alert-bar/models/index.d.ts +1 -1
- package/angular/src/controls/pivot/pivot.component.d.ts +4 -1
- package/angular/src/controls/property-grid/property-grid-item.component.d.ts +53 -3
- package/angular/src/controls/property-grid/property-grid.component.d.ts +1 -2
- package/angular/src/controls/property-grid/property-grid.module.d.ts +4 -3
- package/angular/src/controls/settings/common-settings/common-settings.component.d.ts +32 -1
- package/angular/src/controls/settings/settings.component.d.ts +18 -1
- package/angular/src/controls/settings/settings.module.d.ts +3 -1
- package/angular/src/generated/strings.d.ts +3 -0
- package/core/base/environment.d.ts +10 -0
- package/core/base/environment.js.map +1 -1
- package/core/data/gateway-connection.d.ts +34 -0
- package/core/data/gateway-connection.js +59 -2
- package/core/data/gateway-connection.js.map +1 -1
- package/core/data/gateway-status.d.ts +24 -0
- package/core/data/gateway-status.js +3 -0
- package/core/data/gateway-status.js.map +1 -0
- package/core/data/node-connection.d.ts +4 -0
- package/core/data/node-connection.js.map +1 -1
- package/core/data/powershell.d.ts +4 -0
- package/core/data/powershell.js +1 -0
- package/core/data/powershell.js.map +1 -1
- package/core/data/wdac-operations.d.ts +123 -0
- package/core/data/wdac-operations.js +144 -0
- package/core/data/wdac-operations.js.map +1 -0
- package/core/diagnostics/sme-web-telemetry-models.d.ts +20 -3
- package/core/diagnostics/sme-web-telemetry-models.js +6 -2
- package/core/diagnostics/sme-web-telemetry-models.js.map +1 -1
- package/core/diagnostics/sme-web-telemetry.d.ts +13 -1
- package/core/diagnostics/sme-web-telemetry.js +51 -11
- package/core/diagnostics/sme-web-telemetry.js.map +1 -1
- package/core/generated/powershell-scripts.d.ts +8 -4
- package/core/generated/powershell-scripts.js +8 -4
- package/core/generated/powershell-scripts.js.map +1 -1
- package/core/index.d.ts +2 -0
- package/core/index.js +1 -0
- package/core/index.js.map +1 -1
- package/core/manifest/environment-modules.js +10 -0
- package/core/manifest/environment-modules.js.map +1 -1
- package/core/notification/powershell-notification.js +1 -1
- package/core/notification/powershell-notification.js.map +1 -1
- package/core/performance/performance-tracker.d.ts +67 -0
- package/core/performance/performance-tracker.js +211 -4
- package/core/performance/performance-tracker.js.map +1 -1
- package/core/rpc/credssp/rpc-credssp-model.d.ts +27 -2
- package/core/rpc/credssp/rpc-credssp-model.js +10 -0
- package/core/rpc/credssp/rpc-credssp-model.js.map +1 -1
- package/core/security/credssp-manager.d.ts +15 -1
- package/core/security/credssp-manager.js +28 -0
- package/core/security/credssp-manager.js.map +1 -1
- package/core/shared/gateway-inventory/gateway-inventory.d.ts +10 -0
- package/core/shared/gateway-inventory/gateway-inventory.js +11 -0
- package/core/shared/gateway-inventory/gateway-inventory.js.map +1 -1
- package/e2e/assets/strings/cs-CZ/strings.json +1 -1
- package/e2e/assets/strings/de-DE/strings.json +1 -1
- package/e2e/assets/strings/es-ES/strings.json +1 -1
- package/e2e/assets/strings/fr-FR/strings.json +1 -1
- package/e2e/assets/strings/hu-HU/strings.json +1 -1
- package/e2e/assets/strings/it-IT/strings.json +1 -1
- package/e2e/assets/strings/ja-JP/strings.json +1 -1
- package/e2e/assets/strings/ko-KR/strings.json +1 -1
- package/e2e/assets/strings/nl-NL/strings.json +1 -1
- package/e2e/assets/strings/pl-PL/strings.json +1 -1
- package/e2e/assets/strings/pt-BR/strings.json +1 -1
- package/e2e/assets/strings/pt-PT/strings.json +1 -1
- package/e2e/assets/strings/ru-RU/strings.json +1 -1
- package/e2e/assets/strings/strings.json +1 -1
- package/e2e/assets/strings/sv-SE/strings.json +1 -1
- package/e2e/assets/strings/tr-TR/strings.json +1 -1
- package/e2e/assets/strings/zh-CN/strings.json +1 -1
- package/e2e/assets/strings/zh-TW/strings.json +1 -1
- package/package.json +5 -3
- package/styles/css/main.css +1 -1
- package/tools/module-template/gulpfile.ts/index.ts +1 -1
- package/tools/package-lock.json +18081 -4110
- package/tools/wac-cli/src/create/main.d.ts +6 -3
- package/tools/wac-cli/src/create/main.js +87 -35
- package/tools/wac-cli/src/create/main.js.map +1 -1
- package/tools/wac-cli/src/index.js +2 -2
- package/tools/wac-cli/src/index.js.map +1 -1
- package/tools/wac-cli/templates/internal/npmrc.txt +6 -0
- package/tools/wac-cli/templates/internal/package.json +101 -0
- package/tools/wac-cli/templates/{manifest/solution-manifest.json → solution/manifest.json} +19 -0
- package/tools/wac-cli/templates/solution/strings.resjson +16 -0
- package/tools/wac-cli/templates/wac-template/angular.json +2 -2
- package/tools/wac-cli/templates/wac-template/gulpfile.ts/config-data.ts +1 -1
- package/tools/wac-cli/templates/wac-template/package.json +0 -8
- package/tools/wac-cli/templates/wac-template/src/app/app-routing.module.ts +1 -1
- package/tools/wac-cli/templates/wac-template/src/main.ts +2 -0
- package/tools/wac-cli/templates/{manifest/tool-manifest.json → wac-template/src/manifest.json} +0 -0
- package/tools/wac-cli/templates/wac-template/src/polyfills.ts +1 -1
- package/tools/wac-cli/templates/wac-template/src/test.ts +2 -2
- package/tools/wac-cli/templates/wac-template/src/version.ts +3 -0
- package/tools/wac-cli/templates/wac-template/version.json +5 -0
|
@@ -8,6 +8,7 @@ import { EMPTY, from } from 'rxjs';
|
|
|
8
8
|
import { AppContextService } from '../../../service/app-context.service';
|
|
9
9
|
import { RpcShellService } from '../../../service/rpc-shell.service';
|
|
10
10
|
import { CoreBaseComponent } from '../../common/base.component';
|
|
11
|
+
import { SearchFormFieldComponent } from '../../form';
|
|
11
12
|
import { SettingsFormService } from '../settings-form.service';
|
|
12
13
|
import { SettingsComponent } from '../settings.component';
|
|
13
14
|
import * as i0 from "@angular/core";
|
|
@@ -15,9 +16,10 @@ import * as i1 from "@angular/router";
|
|
|
15
16
|
import * as i2 from "../settings-form.service";
|
|
16
17
|
import * as i3 from "../../../service/app-context.service";
|
|
17
18
|
import * as i4 from "../../../service/rpc-shell.service";
|
|
19
|
+
const _c0 = ["searchTextBox"];
|
|
18
20
|
function CommonSettingsComponent_header_2_Template(rf, ctx) { if (rf & 1) {
|
|
19
|
-
i0.ɵɵelementStart(0, "header",
|
|
20
|
-
i0.ɵɵelementStart(1, "h2",
|
|
21
|
+
i0.ɵɵelementStart(0, "header", 12);
|
|
22
|
+
i0.ɵɵelementStart(1, "h2", 13);
|
|
21
23
|
i0.ɵɵtext(2);
|
|
22
24
|
i0.ɵɵelementEnd();
|
|
23
25
|
i0.ɵɵelementEnd();
|
|
@@ -28,94 +30,94 @@ function CommonSettingsComponent_header_2_Template(rf, ctx) { if (rf & 1) {
|
|
|
28
30
|
i0.ɵɵadvance(1);
|
|
29
31
|
i0.ɵɵtextInterpolate(ctx_r0.settingsTitle);
|
|
30
32
|
} }
|
|
31
|
-
function
|
|
32
|
-
i0.ɵɵelementStart(0, "
|
|
33
|
+
function CommonSettingsComponent_li_10_h4_1_Template(rf, ctx) { if (rf & 1) {
|
|
34
|
+
i0.ɵɵelementStart(0, "h4", 17);
|
|
33
35
|
i0.ɵɵtext(1);
|
|
34
36
|
i0.ɵɵelementEnd();
|
|
35
37
|
} if (rf & 2) {
|
|
36
|
-
const
|
|
37
|
-
const
|
|
38
|
-
const
|
|
39
|
-
const
|
|
40
|
-
i0.ɵɵproperty("id",
|
|
38
|
+
const ctx_r9 = i0.ɵɵnextContext();
|
|
39
|
+
const j_r6 = ctx_r9.index;
|
|
40
|
+
const group_r5 = ctx_r9.$implicit;
|
|
41
|
+
const ctx_r7 = i0.ɵɵnextContext();
|
|
42
|
+
i0.ɵɵproperty("id", ctx_r7.idBag.group + "-" + j_r6)("title", group_r5.group);
|
|
41
43
|
i0.ɵɵadvance(1);
|
|
42
|
-
i0.ɵɵtextInterpolate(
|
|
44
|
+
i0.ɵɵtextInterpolate(group_r5.group);
|
|
43
45
|
} }
|
|
44
|
-
function
|
|
45
|
-
const
|
|
46
|
-
i0.ɵɵelementStart(0, "a",
|
|
47
|
-
i0.ɵɵlistener("smeRouterLinkActivated", function
|
|
48
|
-
i0.ɵɵelement(1, "div",
|
|
49
|
-
i0.ɵɵelementStart(2, "div",
|
|
50
|
-
i0.ɵɵelementStart(3, "span",
|
|
46
|
+
function CommonSettingsComponent_li_10_a_2_Template(rf, ctx) { if (rf & 1) {
|
|
47
|
+
const _r13 = i0.ɵɵgetCurrentView();
|
|
48
|
+
i0.ɵɵelementStart(0, "a", 18);
|
|
49
|
+
i0.ɵɵlistener("smeRouterLinkActivated", function CommonSettingsComponent_li_10_a_2_Template_a_smeRouterLinkActivated_0_listener() { i0.ɵɵrestoreView(_r13); const setting_r10 = ctx.$implicit; const ctx_r12 = i0.ɵɵnextContext(2); return ctx_r12.onSmeRouterLinkActivated(setting_r10); });
|
|
50
|
+
i0.ɵɵelement(1, "div", 19);
|
|
51
|
+
i0.ɵɵelementStart(2, "div", 20);
|
|
52
|
+
i0.ɵɵelementStart(3, "span", 21);
|
|
51
53
|
i0.ɵɵtext(4);
|
|
52
54
|
i0.ɵɵelementEnd();
|
|
53
55
|
i0.ɵɵelementEnd();
|
|
54
56
|
i0.ɵɵelementEnd();
|
|
55
57
|
} if (rf & 2) {
|
|
56
|
-
const
|
|
57
|
-
const
|
|
58
|
-
const
|
|
59
|
-
const
|
|
60
|
-
i0.ɵɵattributeInterpolate5("aria-labelledby", "",
|
|
61
|
-
i0.ɵɵproperty("routerLink",
|
|
62
|
-
i0.ɵɵattribute("aria-selected",
|
|
58
|
+
const setting_r10 = ctx.$implicit;
|
|
59
|
+
const i_r11 = ctx.index;
|
|
60
|
+
const j_r6 = i0.ɵɵnextContext().index;
|
|
61
|
+
const ctx_r8 = i0.ɵɵnextContext();
|
|
62
|
+
i0.ɵɵattributeInterpolate5("aria-labelledby", "", ctx_r8.idBag.option, "-", j_r6, "-", i_r11, " ", ctx_r8.idBag.group, "-", j_r6, "");
|
|
63
|
+
i0.ɵɵproperty("routerLink", setting_r10.routeParams.commands)("preserveFragment", setting_r10.routeParams.extras && setting_r10.routeParams.extras.preserveFragment)("skipLocationChange", setting_r10.routeParams.extras && setting_r10.routeParams.extras.skipLocationChange)("replaceUrl", setting_r10.routeParams.extras && setting_r10.routeParams.extras.replaceUrl)("queryParams", setting_r10.routeParams.extras && setting_r10.routeParams.extras.queryParams)("title", setting_r10.label);
|
|
64
|
+
i0.ɵɵattribute("aria-selected", ctx_r8.selectedSetting === setting_r10);
|
|
63
65
|
i0.ɵɵadvance(1);
|
|
64
|
-
i0.ɵɵproperty("ngClass",
|
|
66
|
+
i0.ɵɵproperty("ngClass", ctx_r8.getSmeIconClass(setting_r10));
|
|
65
67
|
i0.ɵɵadvance(2);
|
|
66
|
-
i0.ɵɵclassProp("sme-dirty", !!(
|
|
67
|
-
i0.ɵɵproperty("id",
|
|
68
|
+
i0.ɵɵclassProp("sme-dirty", !!(setting_r10.form && setting_r10.form.dirty))("sme-pristine", !(setting_r10.form && setting_r10.form.dirty));
|
|
69
|
+
i0.ɵɵproperty("id", ctx_r8.idBag.option + "-" + j_r6 + "-" + i_r11);
|
|
68
70
|
i0.ɵɵadvance(1);
|
|
69
|
-
i0.ɵɵtextInterpolate(
|
|
71
|
+
i0.ɵɵtextInterpolate(setting_r10.label);
|
|
70
72
|
} }
|
|
71
|
-
function
|
|
72
|
-
i0.ɵɵelementStart(0, "li",
|
|
73
|
-
i0.ɵɵtemplate(1,
|
|
74
|
-
i0.ɵɵtemplate(2,
|
|
73
|
+
function CommonSettingsComponent_li_10_Template(rf, ctx) { if (rf & 1) {
|
|
74
|
+
i0.ɵɵelementStart(0, "li", 14);
|
|
75
|
+
i0.ɵɵtemplate(1, CommonSettingsComponent_li_10_h4_1_Template, 2, 3, "h4", 15);
|
|
76
|
+
i0.ɵɵtemplate(2, CommonSettingsComponent_li_10_a_2_Template, 5, 19, "a", 16);
|
|
75
77
|
i0.ɵɵelementEnd();
|
|
76
78
|
} if (rf & 2) {
|
|
77
|
-
const
|
|
78
|
-
const
|
|
79
|
+
const group_r5 = ctx.$implicit;
|
|
80
|
+
const ctx_r2 = i0.ɵɵnextContext();
|
|
79
81
|
i0.ɵɵadvance(1);
|
|
80
|
-
i0.ɵɵproperty("ngIf",
|
|
82
|
+
i0.ɵɵproperty("ngIf", group_r5.group !== ctx_r2.defaultGroup);
|
|
81
83
|
i0.ɵɵadvance(1);
|
|
82
|
-
i0.ɵɵproperty("ngForOf",
|
|
84
|
+
i0.ɵɵproperty("ngForOf", group_r5.options);
|
|
83
85
|
} }
|
|
84
|
-
function
|
|
85
|
-
const
|
|
86
|
-
i0.ɵɵelementStart(0, "div",
|
|
87
|
-
i0.ɵɵlistener("click", function
|
|
86
|
+
function CommonSettingsComponent_div_11_div_1_Template(rf, ctx) { if (rf & 1) {
|
|
87
|
+
const _r18 = i0.ɵɵgetCurrentView();
|
|
88
|
+
i0.ɵɵelementStart(0, "div", 23);
|
|
89
|
+
i0.ɵɵlistener("click", function CommonSettingsComponent_div_11_div_1_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r18); const layer_r16 = ctx.$implicit; const ctx_r17 = i0.ɵɵnextContext(2); return ctx_r17.onOverlayClick(layer_r16); });
|
|
88
90
|
i0.ɵɵelementEnd();
|
|
89
91
|
} }
|
|
90
|
-
function
|
|
92
|
+
function CommonSettingsComponent_div_11_Template(rf, ctx) { if (rf & 1) {
|
|
91
93
|
i0.ɵɵelementStart(0, "div");
|
|
92
|
-
i0.ɵɵtemplate(1,
|
|
94
|
+
i0.ɵɵtemplate(1, CommonSettingsComponent_div_11_div_1_Template, 1, 0, "div", 22);
|
|
93
95
|
i0.ɵɵelementEnd();
|
|
94
96
|
} if (rf & 2) {
|
|
95
|
-
const
|
|
97
|
+
const ctx_r3 = i0.ɵɵnextContext();
|
|
96
98
|
i0.ɵɵadvance(1);
|
|
97
|
-
i0.ɵɵproperty("ngForOf",
|
|
99
|
+
i0.ɵɵproperty("ngForOf", ctx_r3.layers);
|
|
98
100
|
} }
|
|
99
|
-
function
|
|
100
|
-
i0.ɵɵelementStart(0, "h3",
|
|
101
|
+
function CommonSettingsComponent_sme_settings_header_12_h3_1_Template(rf, ctx) { if (rf & 1) {
|
|
102
|
+
i0.ɵɵelementStart(0, "h3", 25);
|
|
101
103
|
i0.ɵɵtext(1);
|
|
102
104
|
i0.ɵɵelementEnd();
|
|
103
105
|
} if (rf & 2) {
|
|
104
|
-
const
|
|
105
|
-
i0.ɵɵattribute("aria-label",
|
|
106
|
+
const ctx_r19 = i0.ɵɵnextContext(2);
|
|
107
|
+
i0.ɵɵattribute("aria-label", ctx_r19.selectedSetting.label);
|
|
106
108
|
i0.ɵɵadvance(1);
|
|
107
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
109
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r19.selectedSetting.label, "");
|
|
108
110
|
} }
|
|
109
|
-
function
|
|
111
|
+
function CommonSettingsComponent_sme_settings_header_12_Template(rf, ctx) { if (rf & 1) {
|
|
110
112
|
i0.ɵɵelementStart(0, "sme-settings-header");
|
|
111
|
-
i0.ɵɵtemplate(1,
|
|
113
|
+
i0.ɵɵtemplate(1, CommonSettingsComponent_sme_settings_header_12_h3_1_Template, 2, 2, "h3", 24);
|
|
112
114
|
i0.ɵɵelementEnd();
|
|
113
115
|
} if (rf & 2) {
|
|
114
|
-
const
|
|
116
|
+
const ctx_r4 = i0.ɵɵnextContext();
|
|
115
117
|
i0.ɵɵadvance(1);
|
|
116
|
-
i0.ɵɵproperty("ngIf", !!
|
|
118
|
+
i0.ɵɵproperty("ngIf", !!ctx_r4.selectedSetting);
|
|
117
119
|
} }
|
|
118
|
-
const
|
|
120
|
+
const _c1 = ["*"];
|
|
119
121
|
/**
|
|
120
122
|
* Container around settings component, handles common settings behavior.
|
|
121
123
|
*/
|
|
@@ -129,11 +131,24 @@ export class CommonSettingsComponent extends CoreBaseComponent {
|
|
|
129
131
|
this.rpcShellService = rpcShellService;
|
|
130
132
|
this.defaultGroup = 'default';
|
|
131
133
|
this.layers = [];
|
|
134
|
+
/**
|
|
135
|
+
* Search box related variables
|
|
136
|
+
*/
|
|
137
|
+
this.filter = '';
|
|
138
|
+
this.filteredSettings = [];
|
|
132
139
|
this.showHeader = true;
|
|
133
140
|
this.hackShowOverlay = false;
|
|
134
141
|
this.hackToolHeader = false;
|
|
142
|
+
/**
|
|
143
|
+
* Controls whether the tab list showing the Settings items is scrollable or not
|
|
144
|
+
* Default to true. Allowing separate scroll bar for the navbar and the selected Settings.
|
|
145
|
+
* Set to false for backward compatibility and use previous behavior where there is
|
|
146
|
+
* only 1 single scroll bar for both navbar and content of the selected Settings item.
|
|
147
|
+
*/
|
|
148
|
+
this.scrollableSecondaryNav = true;
|
|
135
149
|
this.autofocus = true;
|
|
136
150
|
this.combinedForm = new FormGroup({});
|
|
151
|
+
this.searchTitle = this.strings.MsftSmeShell.Angular.searchPlaceHolder;
|
|
137
152
|
}
|
|
138
153
|
/**
|
|
139
154
|
* The source name to use for logging
|
|
@@ -194,11 +209,20 @@ export class CommonSettingsComponent extends CoreBaseComponent {
|
|
|
194
209
|
this.autofocus = false;
|
|
195
210
|
}
|
|
196
211
|
}
|
|
212
|
+
// Setting Title header is managed by child component this.settingsComponent,
|
|
213
|
+
// after current view and child view has been rendered, pass along the selectedSetting
|
|
214
|
+
// string if it exists so child view will render the title
|
|
215
|
+
if (this.selectedSetting) {
|
|
216
|
+
this.onSmeRouterLinkActivated(this.selectedSetting);
|
|
217
|
+
}
|
|
197
218
|
}
|
|
198
219
|
createMenu() {
|
|
220
|
+
// Before creating the Settings menu, filter the Settings menu to only display
|
|
221
|
+
// items that matches the filter
|
|
222
|
+
this.filteredSettings = this.filterSetting();
|
|
199
223
|
const groupTools = [];
|
|
200
224
|
groupTools['default'] = { group: 'default', options: [] };
|
|
201
|
-
this.
|
|
225
|
+
this.filteredSettings.forEach((setting) => {
|
|
202
226
|
if (!!!setting.group) {
|
|
203
227
|
groupTools['default'].options.push(setting);
|
|
204
228
|
}
|
|
@@ -349,33 +373,81 @@ export class CommonSettingsComponent extends CoreBaseComponent {
|
|
|
349
373
|
}
|
|
350
374
|
return formControl.value;
|
|
351
375
|
}
|
|
376
|
+
/**
|
|
377
|
+
* Update this.selectedSetting to the newly selected Settings item when user navigate to a new Settings item
|
|
378
|
+
* Also call the child component this.settingsComponent to update the settingsTitle to reflect the title
|
|
379
|
+
* of the newly selected Settings item
|
|
380
|
+
*
|
|
381
|
+
* @param newSetting The newly selected Settings item
|
|
382
|
+
*/
|
|
383
|
+
onSmeRouterLinkActivated(newSetting) {
|
|
384
|
+
this.selectedSetting = newSetting;
|
|
385
|
+
if (this.settingsComponent) {
|
|
386
|
+
this.settingsComponent.updateSelectedSettingTitle(newSetting.label);
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
/**
|
|
390
|
+
* Callback function for the search field
|
|
391
|
+
*/
|
|
392
|
+
onSearch() {
|
|
393
|
+
this.searchTextBox.searching = true;
|
|
394
|
+
setTimeout(() => {
|
|
395
|
+
this.createMenu();
|
|
396
|
+
this.searchTextBox.searching = false;
|
|
397
|
+
});
|
|
398
|
+
}
|
|
399
|
+
/**
|
|
400
|
+
* Filter out the settings Item based on this.filter string and match the title of Settings Items
|
|
401
|
+
*/
|
|
402
|
+
filterSetting() {
|
|
403
|
+
const settings = this.settings;
|
|
404
|
+
if (!this.filter) {
|
|
405
|
+
return settings;
|
|
406
|
+
}
|
|
407
|
+
const localFilter = this.filter.toLocaleLowerCase();
|
|
408
|
+
return settings.filter(setting => {
|
|
409
|
+
if (setting.label.toLocaleLowerCase().indexOf(localFilter) > -1) {
|
|
410
|
+
return true;
|
|
411
|
+
}
|
|
412
|
+
return false;
|
|
413
|
+
});
|
|
414
|
+
}
|
|
352
415
|
}
|
|
353
416
|
/** @nocollapse */ CommonSettingsComponent.ɵfac = function CommonSettingsComponent_Factory(t) { return new (t || CommonSettingsComponent)(i0.ɵɵdirectiveInject(i0.Injector), i0.ɵɵdirectiveInject(i1.Router), i0.ɵɵdirectiveInject(i2.SettingsFormService), i0.ɵɵdirectiveInject(i0.IterableDiffers), i0.ɵɵdirectiveInject(i3.AppContextService), i0.ɵɵdirectiveInject(i4.RpcShellService)); };
|
|
354
417
|
/** @nocollapse */ CommonSettingsComponent.ɵcmp = i0.ɵɵdefineComponent({ type: CommonSettingsComponent, selectors: [["sme-common-settings"]], viewQuery: function CommonSettingsComponent_Query(rf, ctx) { if (rf & 1) {
|
|
418
|
+
i0.ɵɵviewQuery(_c0, 1);
|
|
355
419
|
i0.ɵɵviewQuery(SettingsComponent, 1);
|
|
356
420
|
} if (rf & 2) {
|
|
357
421
|
let _t;
|
|
422
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.searchTextBox = _t.first);
|
|
358
423
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.settingsComponent = _t.first);
|
|
359
|
-
} }, inputs: { settingsTitle: "settingsTitle", settings: "settings", showHeader: "showHeader", hackShowOverlay: "hackShowOverlay", hackToolHeader: "hackToolHeader", backRoute: "backRoute" }, features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], ngContentSelectors:
|
|
424
|
+
} }, inputs: { settingsTitle: "settingsTitle", settings: "settings", showHeader: "showHeader", hackShowOverlay: "hackShowOverlay", hackToolHeader: "hackToolHeader", backRoute: "backRoute", scrollableSecondaryNav: "scrollableSecondaryNav" }, features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], ngContentSelectors: _c1, decls: 17, vars: 11, consts: [[3, "settingsTitle"], [1, "sme-position-stretch"], ["class", "sme-layout-tool-header", 4, "ngIf"], ["role", "region", 1, "sme-position-stretch", "sme-arrange-stack-v"], [1, "sme-position-flex-none", "sme-focus-zone"], [1, "sme-margin-squish-v-sm"], ["type", "search", "name", "toolsListSearch", 3, "ngModel", "placeholder", "autofocus", "count", "ngModelChange", "search"], ["searchTextBox", ""], ["role", "tablist", 1, "sme-arrange-stack-v", "sme-focus-zone", 3, "ngClass"], ["role", "presentation", 1, "sme-position-flex-auto", "sme-arrange-stack-v", "sme-arrange-overflow-hide-x", "sme-arrange-overflow-auto-y"], ["class", "sme-margin-inset-none", "role", "presentation", 4, "ngFor", "ngForOf"], [4, "ngIf"], [1, "sme-layout-tool-header"], [1, "sme-position-flex-none", "sme-font-h3"], ["role", "presentation", 1, "sme-margin-inset-none"], ["class", "sme-font-h4 sme-font-h4-settings", 3, "id", "title", 4, "ngIf"], ["class", "sme-padding-squish-v-sm sme-arrange-stack-h sme-scheme-nav-list-item", "role", "tab", "href", "setting.routeParams.extras && setting.routeParams.extras.replaceUrl", "routerLinkActive", "sme-active", 3, "routerLink", "preserveFragment", "skipLocationChange", "replaceUrl", "queryParams", "title", "smeRouterLinkActivated", 4, "ngFor", "ngForOf"], [1, "sme-font-h4", "sme-font-h4-settings", 3, "id", "title"], ["role", "tab", "href", "setting.routeParams.extras && setting.routeParams.extras.replaceUrl", "routerLinkActive", "sme-active", 1, "sme-padding-squish-v-sm", "sme-arrange-stack-h", "sme-scheme-nav-list-item", 3, "routerLink", "preserveFragment", "skipLocationChange", "replaceUrl", "queryParams", "title", "smeRouterLinkActivated"], [1, "sme-icon", "sme-margin-right-xs", 3, "ngClass"], [1, "sme-position-flex-auto"], [3, "id"], ["class", "sme-layout-absolute sme-position-inset-none sme-layer-above sme-scheme-backdrop-opaque", 3, "click", 4, "ngFor", "ngForOf"], [1, "sme-layout-absolute", "sme-position-inset-none", "sme-layer-above", "sme-scheme-backdrop-opaque", 3, "click"], ["id", "sme-shell-setting-selectedTitle", 4, "ngIf"], ["id", "sme-shell-setting-selectedTitle"]], template: function CommonSettingsComponent_Template(rf, ctx) { if (rf & 1) {
|
|
360
425
|
i0.ɵɵprojectionDef();
|
|
361
426
|
i0.ɵɵelementStart(0, "sme-settings", 0);
|
|
362
|
-
i0.ɵɵelementStart(1, "sme-settings-navigation");
|
|
363
|
-
i0.ɵɵtemplate(2, CommonSettingsComponent_header_2_Template, 3, 2, "header",
|
|
364
|
-
i0.ɵɵelementStart(3, "div",
|
|
365
|
-
i0.ɵɵelementStart(4, "
|
|
366
|
-
i0.ɵɵelementStart(5, "
|
|
367
|
-
i0.ɵɵ
|
|
427
|
+
i0.ɵɵelementStart(1, "sme-settings-navigation", 1);
|
|
428
|
+
i0.ɵɵtemplate(2, CommonSettingsComponent_header_2_Template, 3, 2, "header", 2);
|
|
429
|
+
i0.ɵɵelementStart(3, "div", 3);
|
|
430
|
+
i0.ɵɵelementStart(4, "div", 4);
|
|
431
|
+
i0.ɵɵelementStart(5, "form", 5);
|
|
432
|
+
i0.ɵɵelementStart(6, "sme-form-field", 6, 7);
|
|
433
|
+
i0.ɵɵlistener("ngModelChange", function CommonSettingsComponent_Template_sme_form_field_ngModelChange_6_listener($event) { return ctx.filter = $event; })("search", function CommonSettingsComponent_Template_sme_form_field_search_6_listener() { return ctx.onSearch(); });
|
|
368
434
|
i0.ɵɵelementEnd();
|
|
369
435
|
i0.ɵɵelementEnd();
|
|
370
436
|
i0.ɵɵelementEnd();
|
|
371
|
-
i0.ɵɵ
|
|
437
|
+
i0.ɵɵelementStart(8, "nav", 8);
|
|
438
|
+
i0.ɵɵelementStart(9, "ul", 9);
|
|
439
|
+
i0.ɵɵtemplate(10, CommonSettingsComponent_li_10_Template, 3, 2, "li", 10);
|
|
372
440
|
i0.ɵɵelementEnd();
|
|
373
|
-
i0.ɵɵtemplate(8, CommonSettingsComponent_sme_settings_header_8_Template, 2, 1, "sme-settings-header", 6);
|
|
374
|
-
i0.ɵɵelementStart(9, "sme-settings-content");
|
|
375
|
-
i0.ɵɵelement(10, "router-outlet");
|
|
376
441
|
i0.ɵɵelementEnd();
|
|
377
|
-
i0.ɵɵ
|
|
378
|
-
i0.ɵɵ
|
|
442
|
+
i0.ɵɵelementEnd();
|
|
443
|
+
i0.ɵɵtemplate(11, CommonSettingsComponent_div_11_Template, 2, 1, "div", 11);
|
|
444
|
+
i0.ɵɵelementEnd();
|
|
445
|
+
i0.ɵɵtemplate(12, CommonSettingsComponent_sme_settings_header_12_Template, 2, 1, "sme-settings-header", 11);
|
|
446
|
+
i0.ɵɵelementStart(13, "sme-settings-content");
|
|
447
|
+
i0.ɵɵelement(14, "router-outlet");
|
|
448
|
+
i0.ɵɵelementEnd();
|
|
449
|
+
i0.ɵɵelementStart(15, "sme-settings-footer");
|
|
450
|
+
i0.ɵɵprojection(16);
|
|
379
451
|
i0.ɵɵelementEnd();
|
|
380
452
|
i0.ɵɵelementEnd();
|
|
381
453
|
} if (rf & 2) {
|
|
@@ -385,6 +457,10 @@ export class CommonSettingsComponent extends CoreBaseComponent {
|
|
|
385
457
|
i0.ɵɵadvance(1);
|
|
386
458
|
i0.ɵɵattribute("aria-label", ctx.settingsTitle);
|
|
387
459
|
i0.ɵɵadvance(3);
|
|
460
|
+
i0.ɵɵproperty("ngModel", ctx.filter)("placeholder", ctx.searchTitle)("autofocus", true)("count", ctx.filteredSettings ? ctx.filteredSettings.length : 0);
|
|
461
|
+
i0.ɵɵadvance(2);
|
|
462
|
+
i0.ɵɵproperty("ngClass", ctx.scrollableSecondaryNav ? "sme-position-flex-auto sme-arrange-overflow-auto-y" : "");
|
|
463
|
+
i0.ɵɵadvance(2);
|
|
388
464
|
i0.ɵɵproperty("ngForOf", ctx.groupTools);
|
|
389
465
|
i0.ɵɵadvance(1);
|
|
390
466
|
i0.ɵɵproperty("ngIf", ctx.hackShowOverlay);
|
|
@@ -397,7 +473,10 @@ export class CommonSettingsComponent extends CoreBaseComponent {
|
|
|
397
473
|
selector: 'sme-common-settings',
|
|
398
474
|
templateUrl: './common-settings.component.html'
|
|
399
475
|
}]
|
|
400
|
-
}], function () { return [{ type: i0.Injector }, { type: i1.Router }, { type: i2.SettingsFormService }, { type: i0.IterableDiffers }, { type: i3.AppContextService }, { type: i4.RpcShellService }]; }, {
|
|
476
|
+
}], function () { return [{ type: i0.Injector }, { type: i1.Router }, { type: i2.SettingsFormService }, { type: i0.IterableDiffers }, { type: i3.AppContextService }, { type: i4.RpcShellService }]; }, { searchTextBox: [{
|
|
477
|
+
type: ViewChild,
|
|
478
|
+
args: ['searchTextBox']
|
|
479
|
+
}], settingsTitle: [{
|
|
401
480
|
type: Input
|
|
402
481
|
}], settings: [{
|
|
403
482
|
type: Input
|
|
@@ -409,8 +488,10 @@ export class CommonSettingsComponent extends CoreBaseComponent {
|
|
|
409
488
|
type: Input
|
|
410
489
|
}], backRoute: [{
|
|
411
490
|
type: Input
|
|
491
|
+
}], scrollableSecondaryNav: [{
|
|
492
|
+
type: Input
|
|
412
493
|
}], settingsComponent: [{
|
|
413
494
|
type: ViewChild,
|
|
414
495
|
args: [SettingsComponent]
|
|
415
496
|
}] }); })();
|
|
416
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLXNldHRpbmdzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FuZ3VsYXIvc3JjL2NvbnRyb2xzL3NldHRpbmdzL2NvbW1vbi1zZXR0aW5ncy9jb21tb24tc2V0dGluZ3MuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvc2V0dGluZ3MvY29tbW9uLXNldHRpbmdzL2NvbW1vbi1zZXR0aW5ncy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsU0FBUyxFQUVULFFBQVEsRUFDUixLQUFLLEVBRUwsZUFBZSxFQUlmLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQW1CLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RSxPQUFPLEVBR0gsTUFBTSxFQUVULE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLCtFQUErRSxDQUFDO0FBR3RILE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUVoRixPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUMvQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDckUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFaEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7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O1FBQ2pDLGlCQUF1QjtRQUN2Qiw0Q0FBcUI7UUFDbkIsbUJBQXlCO1FBQzNCLGlCQUFzQjtRQUN4QixpQkFBZTs7UUFqREQsMkVBQXFEO1FBRXZCLGVBQW9CO1FBQXBCLHlDQUFvQjtRQUd6QyxlQUFpQztRQUFqQywrQ0FBaUM7UUFJeEIsZUFBZTtRQUFmLHdDQUFlO1FBd0JyQyxlQUFxQjtRQUFyQiwwQ0FBcUI7UUFNUCxlQUFrQjtRQUFsQix1Q0FBa0I7O3VGRFE3Qix1QkFBdUI7Y0FKbkMsU0FBUztlQUFDO2dCQUNQLFFBQVEsRUFBRSxxQkFBcUI7Z0JBQy9CLFdBQVcsRUFBRSxrQ0FBa0M7YUFDbEQ7OE1BaUJVLGFBQWE7a0JBRG5CLEtBQUs7WUFJQyxRQUFRO2tCQURkLEtBQUs7WUFJQyxVQUFVO2tCQURoQixLQUFLO1lBSUMsZUFBZTtrQkFEckIsS0FBSztZQUlDLGNBQWM7a0JBRHBCLEtBQUs7WUFJQyxTQUFTO2tCQURmLEtBQUs7WUFJQyxpQkFBaUI7a0JBRHZCLFNBQVM7bUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIEFmdGVyVmlld0NoZWNrZWQsXHJcbiAgICBDb21wb25lbnQsXHJcbiAgICBEb0NoZWNrLFxyXG4gICAgSW5qZWN0b3IsXHJcbiAgICBJbnB1dCxcclxuICAgIEl0ZXJhYmxlRGlmZmVyLFxyXG4gICAgSXRlcmFibGVEaWZmZXJzLFxyXG4gICAgT25DaGFuZ2VzLFxyXG4gICAgT25EZXN0cm95LFxyXG4gICAgT25Jbml0LFxyXG4gICAgVmlld0NoaWxkXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUFycmF5LCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7XHJcbiAgICBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxyXG4gICAgTmF2aWdhdGlvbkV4dHJhcyxcclxuICAgIFJvdXRlcixcclxuICAgIFJvdXRlclN0YXRlU25hcHNob3RcclxufSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBOZXQgfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL2RhdGEvbmV0JztcclxuaW1wb3J0IHsgUnBjT3ZlcmxheUNsb3NlQ2xpZW50IH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9ycGMvb3ZlcmxheS9ycGMtb3ZlcmxheS1jbG9zZS1jbGllbnQnO1xyXG5pbXBvcnQgeyBScGNEaWFsb2dPdmVybGF5RGF0YSB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvcnBjL292ZXJsYXkvcnBjLW92ZXJsYXktbW9kZWwnO1xyXG5pbXBvcnQgeyBEZWZlcnJlZERhdGEgfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL3JwYy9ycGMnO1xyXG5pbXBvcnQgeyBScGNUeXBlIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9ycGMvcnBjLWJhc2UnO1xyXG5pbXBvcnQgeyBScGNPdXRib3VuZCB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvcnBjL3JwYy1vdXRib3VuZCc7XHJcbmltcG9ydCB7IEVNUFRZLCBmcm9tLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEFwcENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZS9hcHAtY29udGV4dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUnBjU2hlbGxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZS9ycGMtc2hlbGwuc2VydmljZSc7XHJcbmltcG9ydCB7IENvcmVCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tbW9uL2Jhc2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ2FuQ29tcG9uZW50RGVhY3RpdmF0ZSB9IGZyb20gJy4uL3NldHRpbmdzLWNhbi1kZWFjdGl2YXRlLWd1YXJkLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTZXR0aW5nc0Zvcm1TZXJ2aWNlIH0gZnJvbSAnLi4vc2V0dGluZ3MtZm9ybS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2V0dGluZ3NDb21wb25lbnQgfSBmcm9tICcuLi9zZXR0aW5ncy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb21tb25TZXR0aW5nc05hdmlnYXRpb25JdGVtLCBDb21tb25TZXR0aW5nc05hdmlnYXRpb25JdGVtV2l0aEZvcm0gfSBmcm9tICcuL2NvbW1vbi1zZXR0aW5ncy1uYXZpZ2F0aW9uLWl0ZW0nO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBHcm91cFRvb2xzTWVudSB7XHJcbiAgICBncm91cDogc3RyaW5nO1xyXG4gICAgb3B0aW9uczogQ29tbW9uU2V0dGluZ3NOYXZpZ2F0aW9uSXRlbVdpdGhGb3JtW107XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDb250YWluZXIgYXJvdW5kIHNldHRpbmdzIGNvbXBvbmVudCwgaGFuZGxlcyBjb21tb24gc2V0dGluZ3MgYmVoYXZpb3IuXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnc21lLWNvbW1vbi1zZXR0aW5ncycsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vY29tbW9uLXNldHRpbmdzLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29tbW9uU2V0dGluZ3NDb21wb25lbnQgZXh0ZW5kcyBDb3JlQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIERvQ2hlY2ssIEFmdGVyVmlld0NoZWNrZWQge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHNvdXJjZSBuYW1lIHRvIHVzZSBmb3IgbG9nZ2luZ1xyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgZ2V0IGxvZ1NvdXJjZU5hbWUoKSB7XHJcbiAgICAgICAgcmV0dXJuICdDb21tb25TZXR0aW5nc0NvbXBvbmVudCc7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNvbWJpbmVkRm9ybTogRm9ybUdyb3VwO1xyXG4gICAgcHVibGljIHJlYWRvbmx5IGRlZmF1bHRHcm91cCA9ICdkZWZhdWx0JztcclxuICAgIHB1YmxpYyBncm91cFRvb2xzOiBHcm91cFRvb2xzTWVudVtdO1xyXG4gICAgcHVibGljIGxheWVyczogUnBjRGlhbG9nT3ZlcmxheURhdGFbXSA9IFtdO1xyXG4gICAgcHVibGljIHNlbGVjdGVkU2V0dGluZzogQ29tbW9uU2V0dGluZ3NOYXZpZ2F0aW9uSXRlbTtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNldHRpbmdzVGl0bGU6IHN0cmluZztcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNldHRpbmdzOiBDb21tb25TZXR0aW5nc05hdmlnYXRpb25JdGVtW107XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzaG93SGVhZGVyID0gdHJ1ZTtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGhhY2tTaG93T3ZlcmxheSA9IGZhbHNlO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgaGFja1Rvb2xIZWFkZXIgPSBmYWxzZTtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGJhY2tSb3V0ZTogeyBjb21tYW5kczogYW55W10sIGV4dHJhcz86IE5hdmlnYXRpb25FeHRyYXMgfTtcclxuXHJcbiAgICBAVmlld0NoaWxkKFNldHRpbmdzQ29tcG9uZW50KVxyXG4gICAgcHVibGljIHNldHRpbmdzQ29tcG9uZW50OiBTZXR0aW5nc0NvbXBvbmVudDtcclxuXHJcbiAgICBwcml2YXRlIGxhdGVzdEZvcm06IEZvcm1Hcm91cDtcclxuICAgIHByaXZhdGUgbGF0ZXN0UHJpc3RpbmVGb3JtVmFsdWU6IGFueTtcclxuICAgIHByaXZhdGUgbGF0ZXN0Rm9ybVVwZGF0ZVZhbHVlSW5Db21wb25lbnQ6IGJvb2xlYW47XHJcbiAgICBwcml2YXRlIHNldHRpbmdzRGlmZmVyOiBJdGVyYWJsZURpZmZlcjxhbnk+O1xyXG4gICAgcHJpdmF0ZSBhdXRvZm9jdXMgPSB0cnVlO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvcixcclxuICAgICAgICBwdWJsaWMgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICAgICAgcHJpdmF0ZSBzZXR0aW5nc0Zvcm1zOiBTZXR0aW5nc0Zvcm1TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgaXRlcmFibGVEaWZmZXJzOiBJdGVyYWJsZURpZmZlcnMsXHJcbiAgICAgICAgcHJpdmF0ZSBhcHBDb250ZXh0OiBBcHBDb250ZXh0U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHJwY1NoZWxsU2VydmljZTogUnBjU2hlbGxTZXJ2aWNlXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcihpbmplY3Rvcik7XHJcbiAgICAgICAgdGhpcy5jb21iaW5lZEZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnNldHRpbmdzRm9ybXMuZm9ybUFkZGVkKCkuc3Vic2NyaWJlKChmb3JtQWRkZWREYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIC8vIHRvIGF2b2lkIGR1cGxpY2F0ZXMgd2UgZmlyc3QgcmVtb3ZlIHRoZSBmb3JtIGlmIGl0IGV4aXN0c1xyXG4gICAgICAgICAgICB0aGlzLmxhdGVzdEZvcm0gPSBmb3JtQWRkZWREYXRhLmZvcm1Hcm91cDtcclxuICAgICAgICAgICAgdGhpcy5sYXRlc3RQcmlzdGluZUZvcm1WYWx1ZSA9IHRoaXMuZ2V0UmF3VmFsdWVSZWN1cnNpdmUoZm9ybUFkZGVkRGF0YS5mb3JtR3JvdXApO1xyXG4gICAgICAgICAgICB0aGlzLmxhdGVzdEZvcm1VcGRhdGVWYWx1ZUluQ29tcG9uZW50ID0gZm9ybUFkZGVkRGF0YS51cGRhdGVWYWx1ZUluQ29tcG9uZW50O1xyXG4gICAgICAgICAgICB0aGlzLnJlY2FsY3VsYXRlQWN0aXZlUGFuZWwoKTtcclxuICAgICAgICB9KSk7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nc0RpZmZlciA9IHRoaXMuaXRlcmFibGVEaWZmZXJzLmZpbmQodGhpcy5zZXR0aW5ncykuY3JlYXRlKG51bGwpO1xyXG5cclxuICAgICAgICB0aGlzLnJlY2FsY3VsYXRlQWN0aXZlUGFuZWwoKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaGFja1Nob3dPdmVybGF5KSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMucnBjU2hlbGxTZXJ2aWNlLm92ZXJsYXlPcGVuU3ViamVjdFxyXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoZGVmZXJyZWREYXRhOiBEZWZlcnJlZERhdGE8UnBjRGlhbG9nT3ZlcmxheURhdGEsIHZvaWQ+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gb3ZlcmxheSB0b29scyB3aXRoIG9uZSBtb3JlIGxheWVyIG9yIHJlbW92ZSBvbmUgZnJvbSB0b3BcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZGVmZXJyZWREYXRhLmRhdGEub3ZlcmxheSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxheWVycy5wdXNoKGRlZmVycmVkRGF0YS5kYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMubGF5ZXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXllcnMucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdScGMgT3ZlcmxheUNsb3NlOiBjbG9zZSByZXF1ZXN0IGlzIGNhbGxlZCB3aGlsZSBsYXllciBpcyBubyBsb25nZXIgYXZhaWxhYmxlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGRlZmVycmVkRGF0YS5kZWZlcnJlZC5yZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzKSB7XHJcbiAgICAgICAgc3VwZXIubmdPbkNoYW5nZXMoY2hhbmdlcyk7XHJcbiAgICAgICAgaWYgKGNoYW5nZXMuc2V0dGluZ3MpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nc0RpZmZlciA9IHRoaXMuaXRlcmFibGVEaWZmZXJzLmZpbmQodGhpcy5zZXR0aW5ncykuY3JlYXRlKG51bGwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNyZWF0ZU1lbnUoKTtcclxuICAgICAgICB0aGlzLnJlY2FsY3VsYXRlQWN0aXZlUGFuZWwoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbmdEb0NoZWNrKCkge1xyXG4gICAgICAgIHN1cGVyLm5nRG9DaGVjaygpO1xyXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmdzRGlmZmVyKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLnNldHRpbmdzRGlmZmVyLmRpZmYodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgICAgIGlmIChjaGFuZ2VzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZU1lbnUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbmdBZnRlclZpZXdDaGVja2VkKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmF1dG9mb2N1cykge1xyXG4gICAgICAgICAgICBjb25zdCBmb2N1c0VsZW1lbnRzID0gdGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tyb2xlPVwidGFiXCJdJyk7XHJcbiAgICAgICAgICAgIGlmIChmb2N1c0VsZW1lbnRzICYmIGZvY3VzRWxlbWVudHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICBmb2N1c0VsZW1lbnRzWzBdLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmF1dG9mb2N1cyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjcmVhdGVNZW51KCkge1xyXG4gICAgICAgIGNvbnN0IGdyb3VwVG9vbHM6IEdyb3VwVG9vbHNNZW51W10gPSBbXTtcclxuICAgICAgICBncm91cFRvb2xzWydkZWZhdWx0J10gPSB7IGdyb3VwOiAnZGVmYXVsdCcsIG9wdGlvbnM6IFtdIH07XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5mb3JFYWNoKChzZXR0aW5nKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghISFzZXR0aW5nLmdyb3VwKSB7XHJcbiAgICAgICAgICAgICAgICBncm91cFRvb2xzWydkZWZhdWx0J10ub3B0aW9ucy5wdXNoKHNldHRpbmcpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKCEhIWdyb3VwVG9vbHNbc2V0dGluZy5ncm91cF0pIHtcclxuICAgICAgICAgICAgICAgICAgICBncm91cFRvb2xzW3NldHRpbmcuZ3JvdXBdID0geyBncm91cDogc2V0dGluZy5ncm91cCwgdGl0bGU6IHNldHRpbmcuZ3JvdXBUaXRsZSwgb3B0aW9uczogW10gfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGdyb3VwVG9vbHNbc2V0dGluZy5ncm91cF0ub3B0aW9ucy5wdXNoKHNldHRpbmcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5ncm91cFRvb2xzID0gW107XHJcbiAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIGdyb3VwVG9vbHMpIHtcclxuICAgICAgICAgICAgaWYgKHByb3ApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBUb29scy5wdXNoKGdyb3VwVG9vbHNbcHJvcF0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZWNhbGN1bGF0ZUFjdGl2ZVBhbmVsKCkge1xyXG4gICAgICAgIGNvbnN0IHNldHRpbmcgPSA8Q29tbW9uU2V0dGluZ3NOYXZpZ2F0aW9uSXRlbVdpdGhGb3JtPnRoaXMuc2VsZWN0ZWRTZXR0aW5nO1xyXG4gICAgICAgIGlmIChNc2Z0U21lLmlzTnVsbE9yVW5kZWZpbmVkKHNldHRpbmcpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzZXR0aW5nLmZvcm0gJiYgc2V0dGluZy5mb3JtLmRpcnR5KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZvcm1WYWx1ZSA9IHRoaXMuZ2V0UmF3VmFsdWVSZWN1cnNpdmUoc2V0dGluZy5mb3JtKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChzZXR0aW5nLnVwZGF0ZVZhbHVlSW5Db21wb25lbnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZ3NGb3Jtcy5uZXdGb3JtVmFsdWUoc2V0dGluZy5mb3JtLCBmb3JtVmFsdWUpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sYXRlc3RGb3JtLnNldFZhbHVlKGZvcm1WYWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMubGF0ZXN0Rm9ybS5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZXR0aW5nc0Zvcm1zLnJlbW92ZUZvcm0oc2V0dGluZy5mb3JtKTtcclxuICAgICAgICBzZXR0aW5nLmZvcm0gPSB0aGlzLmxhdGVzdEZvcm07XHJcblxyXG4gICAgICAgIGlmIChzZXR0aW5nLmZvcm0pIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY29tYmluZWRGb3JtLmNvbnRyb2xzW3NldHRpbmcubGFiZWxdKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbWJpbmVkRm9ybS5zZXRDb250cm9sKHNldHRpbmcubGFiZWwsIHNldHRpbmcuZm9ybSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbWJpbmVkRm9ybS5hZGRDb250cm9sKHNldHRpbmcubGFiZWwsIHNldHRpbmcuZm9ybSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNldHRpbmcudXBkYXRlVmFsdWVJbkNvbXBvbmVudCA9IHRoaXMubGF0ZXN0Rm9ybVVwZGF0ZVZhbHVlSW5Db21wb25lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRpc2NhcmRBbGxDaGlsZEZvcm1zKCkge1xyXG4gICAgICAgIC8vIEZvciB0aGUgY3VycmVudCBhY3RpdmUgc2V0dGluZywgd2UgbmVlZCB0byByZXNldCB0aGUgZm9ybSB0byBpdHNcclxuICAgICAgICAvLyBvcmlnaW5hbCBwcmlzdGluZSBmb3JtIHdoZW4gZGlzY2FyZGluZyBjaGFuZ2VzXHJcbiAgICAgICAgY29uc3QgYWN0aXZlU2V0dGluZyA9IHRoaXMuc2VsZWN0ZWRTZXR0aW5nO1xyXG4gICAgICAgIGNvbnN0IHNldHRpbmdXaXRoRm9ybSA9IDxDb21tb25TZXR0aW5nc05hdmlnYXRpb25JdGVtV2l0aEZvcm0+YWN0aXZlU2V0dGluZztcclxuICAgICAgICBpZiAoc2V0dGluZ1dpdGhGb3JtLmZvcm0pIHtcclxuICAgICAgICAgICAgc2V0dGluZ1dpdGhGb3JtLmZvcm0ucmVzZXQodGhpcy5sYXRlc3RQcmlzdGluZUZvcm1WYWx1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldHRpbmdzLmZvckVhY2goKG90aGVyU2V0dGluZykgPT4ge1xyXG4gICAgICAgICAgICBpZiAob3RoZXJTZXR0aW5nICE9PSBhY3RpdmVTZXR0aW5nKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvdGhlcnNldHRpbmdXaXRoRm9ybSA9IDxDb21tb25TZXR0aW5nc05hdmlnYXRpb25JdGVtV2l0aEZvcm0+b3RoZXJTZXR0aW5nO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nc0Zvcm1zLnJlbW92ZUZvcm0ob3RoZXJzZXR0aW5nV2l0aEZvcm0uZm9ybSk7XHJcbiAgICAgICAgICAgICAgICBvdGhlcnNldHRpbmdXaXRoRm9ybS5mb3JtID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbWJpbmVkRm9ybS5jb250cm9sc1tvdGhlcnNldHRpbmdXaXRoRm9ybS5sYWJlbF0pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbWJpbmVkRm9ybS5yZW1vdmVDb250cm9sKG90aGVyc2V0dGluZ1dpdGhGb3JtLmxhYmVsKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhY2NlcHRBbGxDaGlsZEZvcm1zVmFsdWUoKSB7XHJcbiAgICAgICAgY29uc3QgYWN0aXZlU2V0dGluZyA9IHRoaXMuc2VsZWN0ZWRTZXR0aW5nO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MuZm9yRWFjaCgoc2V0dGluZykgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBzZXR0aW5nV2l0aEZvcm0gPSA8Q29tbW9uU2V0dGluZ3NOYXZpZ2F0aW9uSXRlbVdpdGhGb3JtPnNldHRpbmc7XHJcbiAgICAgICAgICAgIGlmIChzZXR0aW5nV2l0aEZvcm0uZm9ybSkge1xyXG4gICAgICAgICAgICAgICAgc2V0dGluZ1dpdGhGb3JtLmZvcm0ucmVzZXQodGhpcy5nZXRSYXdWYWx1ZVJlY3Vyc2l2ZShzZXR0aW5nV2l0aEZvcm0uZm9ybSkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGFjdGl2ZVNldHRpbmcgPT09IHNldHRpbmdXaXRoRm9ybSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGF0ZXN0UHJpc3RpbmVGb3JtVmFsdWUgPSB0aGlzLmdldFJhd1ZhbHVlUmVjdXJzaXZlKHNldHRpbmdXaXRoRm9ybS5mb3JtKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRTbWVJY29uQ2xhc3Moc2V0dGluZzogQ29tbW9uU2V0dGluZ3NOYXZpZ2F0aW9uSXRlbSkge1xyXG4gICAgICAgIGNvbnN0IG5nQ2xhc3NQYXJhbWV0ZXIgPSB7fTtcclxuICAgICAgICBpZiAoc2V0dGluZy5zbWVJY29uQ2xhc3NOYW1lKSB7XHJcbiAgICAgICAgICAgIG5nQ2xhc3NQYXJhbWV0ZXJbc2V0dGluZy5zbWVJY29uQ2xhc3NOYW1lXSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZ0NsYXNzUGFyYW1ldGVyO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjYW5EZWFjdGl2YXRlKFxyXG4gICAgICAgIGNvbXBvbmVudDogQ2FuQ29tcG9uZW50RGVhY3RpdmF0ZSxcclxuICAgICAgICByb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCxcclxuICAgICAgICBzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdCk6IE9ic2VydmFibGU8Ym9vbGVhbj4gfCBQcm9taXNlPGJvb2xlYW4+IHwgYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3NDb21wb25lbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZ3NDb21wb25lbnQuY2FuRGVhY3RpdmF0ZShjb21wb25lbnQsIHJvdXRlLCBzdGF0ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGluaXRpYWwgaG9zdCBjbGFzc2VzIHRvIGJlIGFwcGxpZWQgdG8gdGhpcyBlbGVtZW50XHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBnZXRJbml0aWFsSG9zdENsYXNzZXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldEluaXRpYWxIb3N0Q2xhc3NlcygpLmNvbmNhdChbXHJcbiAgICAgICAgICAgICdzbWUtY29tbW9uLXNldHRpbmdzJyxcclxuICAgICAgICBdKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgdGhlIGlkQmFnIHVzZWQgYnkgdGhpcyBjb21wb25lbnQgdG8gc3RvcmUgdW5pcXVlIGVsZW1lbnQgaWRzLlxyXG4gICAgICogaWQgdmFsdWVzIHdpbGwgYmUgYXNzaWduZWQgYmUgdGhlIEBzZWUgQmFzZUNvbXBvbmVudCBzdXBlciBjbGFzcy5cclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZUlkQmFnKCk6IE1zZnRTbWUuU3RyaW5nTWFwPHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGdyb3VwOiAnJyxcclxuICAgICAgICAgICAgb3B0aW9uOiAnJ1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uT3ZlcmxheUNsaWNrKGxheWVyOiBScGNEaWFsb2dPdmVybGF5RGF0YSk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGxheWVyUnBjID0gdGhpcy5hcHBDb250ZXh0LnJwYy5ycGNNYW5hZ2VyLnJwY0NoYW5uZWwuZ2V0UnBjPFJwY091dGJvdW5kPihcclxuICAgICAgICAgICAgbGF5ZXIuc291cmNlTmFtZSxcclxuICAgICAgICAgICAgbGF5ZXIuc291cmNlU3ViTmFtZSxcclxuICAgICAgICAgICAgUnBjVHlwZS5PdXRib3VuZFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgZnJvbShScGNPdmVybGF5Q2xvc2VDbGllbnQub3ZlcmxheUNsb3NlKHRoaXMuYXBwQ29udGV4dC5ycGMsIHsgb3ZlcmxheTogZmFsc2UsIGRpYWxvZ0lkOiBsYXllci5kaWFsb2dJZCB9LCBsYXllclJwYykpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghcmVzdWx0Lm92ZXJsYXlDbG9zZWQgJiYgdGhpcy5sYXllcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxheWVycy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vdGlmaWNhdGlvbiA9IHRoaXMuYXBwQ29udGV4dC5ub3RpZmljYXRpb24uY3JlYXRlKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIG5vdGlmaWNhdGlvbi5zaG93RXJyb3IodGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLk92ZXJsYXkuY2xvc2VFcnJvclRpdGxlLCBOZXQuZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubGF5ZXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXllcnMucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gRU1QVFk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgY3VycmVudCBjb250cm9sIGFuZCBhbGwgaXRzIGNoaWxkcmVuIHJlY3Vyc2l2ZWxseSxcclxuICAgICAqIGluY2x1ZGluZyBkaXNhYmxlZCBjb250cm9scy5cclxuICAgICAqXHJcbiAgICAgKiBXb3JrYXJvdW5kIGZvciBtaXNzaW5nIGZ1bmN0aW9uYWxpdHkgYWRkZWQgaW4gbGF0ZXIgdmVyc2lvbnMgb2YgYW5ndWxhclxyXG4gICAgICogQ3VycmVudGx5IGdldFJhd1ZhbHVlIG9ubHkgcmV0dXJucyB0aGUgdmFsdWUgb2YgaHRlIGN1cnJlbnQgY29udHJvbCBkaXNhYmxlZFxyXG4gICAgICogY2hpbGRyZW4gYnV0IG9ubHkgZW5hYmxlZCBjb250cm9scyBvZiBvdGhlciBkZXNjZW5kYW50czpcclxuICAgICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvY29tbWl0LzFlY2U3MzY2YzhiNjdmMzg3ZmJlMTNmOGQxMjhjMTlmNGM1MGRkMTlcclxuICAgICAqXHJcbiAgICAgKiBPbmNlIHdlIHVwZ3JhZGUgYW5ndWxhciB2ZXJzaW9uIHdlIGNhbiByZW1vdmUgdGhpcyBjb2RlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBmb3JtQ29udHJvbCBUaGUgZm9ybSBjb250cm9sIHRvIGdldCB0aGUgdmFsdWUgZnJvbVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGdldFJhd1ZhbHVlUmVjdXJzaXZlKGZvcm1Db250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBhbnkge1xyXG4gICAgICAgIGlmIChmb3JtQ29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHt9O1xyXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhmb3JtQ29udHJvbC5jb250cm9scykuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdmFsdWVba2V5XSA9IHRoaXMuZ2V0UmF3VmFsdWVSZWN1cnNpdmUoZm9ybUNvbnRyb2wuY29udHJvbHNba2V5XSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG5cclxuICAgICAgICB9IGVsc2UgaWYgKGZvcm1Db250cm9sIGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmb3JtQ29udHJvbC5jb250cm9scy5tYXAoKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmF3VmFsdWVSZWN1cnNpdmUoY29udHJvbCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZvcm1Db250cm9sLnZhbHVlO1xyXG4gICAgfVxyXG59XHJcbiIsIjxzbWUtc2V0dGluZ3MgW3NldHRpbmdzVGl0bGVdPVwiaGFja1Rvb2xIZWFkZXIgPyAnJyA6IHNldHRpbmdzVGl0bGVcIj5cclxuICA8c21lLXNldHRpbmdzLW5hdmlnYXRpb24+XHJcbiAgICA8aGVhZGVyIGNsYXNzPVwic21lLWxheW91dC10b29sLWhlYWRlclwiICpuZ0lmPVwiaGFja1Rvb2xIZWFkZXJcIj5cclxuICAgICAgPGgyIGNsYXNzPVwic21lLXBvc2l0aW9uLWZsZXgtbm9uZSBzbWUtZm9udC1oM1wiIFthdHRyLmFyaWEtbGFiZWxdPVwic2V0dGluZ3NUaXRsZVwiPnt7c2V0dGluZ3NUaXRsZX19PC9oMj5cclxuICAgIDwvaGVhZGVyPlxyXG4gICAgPGRpdiByb2xlPVwicmVnaW9uXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJzZXR0aW5nc1RpdGxlXCI+XHJcbiAgICAgIDxuYXYgcm9sZT1cInRhYmxpc3RcIiBjbGFzcz1cInNtZS1wYWRkaW5nLWhvcml6b250YWwtbGcgc21lLWFycmFuZ2Utc3RhY2stdiBzbWUtZm9jdXMtem9uZVwiPlxyXG4gICAgICAgIDx1bCBjbGFzcz1cInNtZS1wb3NpdGlvbi1mbGV4LWF1dG8gc21lLWFycmFuZ2Utc3RhY2stdiBzbWUtYXJyYW5nZS1vdmVyZmxvdy1oaWRlLXggc21lLWFycmFuZ2Utb3ZlcmZsb3ctYXV0by15XCJcclxuICAgICAgICAgIHJvbGU9XCJwcmVzZW50YXRpb25cIj5cclxuICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgZ3JvdXBUb29sczsgbGV0IGogPSBpbmRleFwiIGNsYXNzPVwic21lLW1hcmdpbi1pbnNldC1ub25lXCIgcm9sZT1cInByZXNlbnRhdGlvblwiPlxyXG4gICAgICAgICAgICA8aDMgW2lkXT1cImlkQmFnLmdyb3VwICsgJy0nICsgalwiIGNsYXNzPVwic21lLW1hcmdpbi10b3AteHMgc21lLWZvbnQtaDVcIiAqbmdJZj1cImdyb3VwLmdyb3VwIT09ZGVmYXVsdEdyb3VwXCJcclxuICAgICAgICAgICAgICBbdGl0bGVdPVwiZ3JvdXAuZ3JvdXBcIj57e2dyb3VwLmdyb3VwfX08L2gzPlxyXG4gICAgICAgICAgICA8YSAqbmdGb3I9XCJsZXQgc2V0dGluZyBvZiBncm91cC5vcHRpb25zOyBsZXQgaSA9IGluZGV4XCJcclxuICAgICAgICAgICAgICBjbGFzcz1cInNtZS1wYWRkaW5nLXNxdWlzaC12LXNtIHNtZS1hcnJhbmdlLXN0YWNrLWggc21lLXNjaGVtZS1uYXYtaXRlbVwiIHJvbGU9XCJ0YWJcIlxyXG4gICAgICAgICAgICAgIGhyZWY9XCJzZXR0aW5nLnJvdXRlUGFyYW1zLmV4dHJhcyAmJiBzZXR0aW5nLnJvdXRlUGFyYW1zLmV4dHJhcy5yZXBsYWNlVXJsXCJcclxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cInNlbGVjdGVkU2V0dGluZyA9PT0gc2V0dGluZ1wiXHJcbiAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwic2V0dGluZy5yb3V0ZVBhcmFtcy5jb21tYW5kc1wiIHJvdXRlckxpbmtBY3RpdmU9XCJzbWUtYWN0aXZlXCJcclxuICAgICAgICAgICAgICAoc21lUm91dGVyTGlua0FjdGl2YXRlZCk9XCJzZWxlY3RlZFNldHRpbmcgPSBzZXR0aW5nXCJcclxuICAgICAgICAgICAgICBbcHJlc2VydmVGcmFnbWVudF09XCJzZXR0aW5nLnJvdXRlUGFyYW1zLmV4dHJhcyAmJiBzZXR0aW5nLnJvdXRlUGFyYW1zLmV4dHJhcy5wcmVzZXJ2ZUZyYWdtZW50XCJcclxuICAgICAgICAgICAgICBbc2tpcExvY2F0aW9uQ2hhbmdlXT1cInNldHRpbmcucm91dGVQYXJhbXMuZXh0cmFzICYmIHNldHRpbmcucm91dGVQYXJhbXMuZXh0cmFzLnNraXBMb2NhdGlvbkNoYW5nZVwiXHJcbiAgICAgICAgICAgICAgW3JlcGxhY2VVcmxdPVwic2V0dGluZy5yb3V0ZVBhcmFtcy5leHRyYXMgJiYgc2V0dGluZy5yb3V0ZVBhcmFtcy5leHRyYXMucmVwbGFjZVVybFwiXHJcbiAgICAgICAgICAgICAgW3F1ZXJ5UGFyYW1zXT1cInNldHRpbmcucm91dGVQYXJhbXMuZXh0cmFzICYmIHNldHRpbmcucm91dGVQYXJhbXMuZXh0cmFzLnF1ZXJ5UGFyYW1zXCJcclxuICAgICAgICAgICAgICBbdGl0bGVdPVwic2V0dGluZy5sYWJlbFwiIGF0dHIuYXJpYS1sYWJlbGxlZGJ5PVwie3tpZEJhZy5vcHRpb259fS17e2p9fS17e2l9fSB7e2lkQmFnLmdyb3VwfX0te3tqfX1cIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic21lLWljb24gc21lLW1hcmdpbi1yaWdodC14c1wiIFtuZ0NsYXNzXT1cImdldFNtZUljb25DbGFzcyhzZXR0aW5nKVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzbWUtcG9zaXRpb24tZmxleC1hdXRvXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBbaWRdPVwiaWRCYWcub3B0aW9uICsgJy0nICsgaiArICctJyArIGlcIiBbY2xhc3Muc21lLWRpcnR5XT1cIiEhKHNldHRpbmcuZm9ybSAmJiBzZXR0aW5nLmZvcm0uZGlydHkpXCJcclxuICAgICAgICAgICAgICAgICAgW2NsYXNzLnNtZS1wcmlzdGluZV09XCIhKHNldHRpbmcuZm9ybSAmJiBzZXR0aW5nLmZvcm0uZGlydHkpXCI+e3tzZXR0aW5nLmxhYmVsfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgPC91bD5cclxuICAgICAgPC9uYXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgKm5nSWY9XCJoYWNrU2hvd092ZXJsYXlcIj5cclxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgbGF5ZXIgb2YgbGF5ZXJzXCJcclxuICAgICAgICBjbGFzcz1cInNtZS1sYXlvdXQtYWJzb2x1dGUgc21lLXBvc2l0aW9uLWluc2V0LW5vbmUgc21lLWxheWVyLWFib3ZlIHNtZS1zY2hlbWUtYmFja2Ryb3Atb3BhcXVlXCJcclxuICAgICAgICAoY2xpY2spPVwib25PdmVybGF5Q2xpY2sobGF5ZXIpXCI+PC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L3NtZS1zZXR0aW5ncy1uYXZpZ2F0aW9uPlxyXG4gIDxzbWUtc2V0dGluZ3MtaGVhZGVyICpuZ0lmPVwiISFzaG93SGVhZGVyXCI+XHJcbiAgICA8aDMgaWQ9XCJzbWUtc2hlbGwtc2V0dGluZy1zZWxlY3RlZFRpdGxlXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJzZWxlY3RlZFNldHRpbmcubGFiZWxcIiAqbmdJZj1cIiEhc2VsZWN0ZWRTZXR0aW5nXCI+XHJcbiAgICAgIHt7IHNlbGVjdGVkU2V0dGluZy5sYWJlbCB9fTwvaDM+XHJcbiAgPC9zbWUtc2V0dGluZ3MtaGVhZGVyPlxyXG4gIDxzbWUtc2V0dGluZ3MtY29udGVudD5cclxuICAgIDxyb3V0ZXItb3V0bGV0Pjwvcm91dGVyLW91dGxldD5cclxuICA8L3NtZS1zZXR0aW5ncy1jb250ZW50PlxyXG4gIDxzbWUtc2V0dGluZ3MtZm9vdGVyPlxyXG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG4gIDwvc21lLXNldHRpbmdzLWZvb3Rlcj5cclxuPC9zbWUtc2V0dGluZ3M+XHJcbiJdfQ==
|
|
497
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLXNldHRpbmdzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FuZ3VsYXIvc3JjL2NvbnRyb2xzL3NldHRpbmdzL2NvbW1vbi1zZXR0aW5ncy9jb21tb24tc2V0dGluZ3MuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvc2V0dGluZ3MvY29tbW9uLXNldHRpbmdzL2NvbW1vbi1zZXR0aW5ncy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsU0FBUyxFQUVULFFBQVEsRUFDUixLQUFLLEVBRUwsZUFBZSxFQUlmLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQW1CLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RSxPQUFPLEVBR0gsTUFBTSxFQUVULE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLCtFQUErRSxDQUFDO0FBR3RILE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUVoRixPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUMvQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDckUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDaEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRXRELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQy9ELE9B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O1lBSUMsY0FBYztrQkFEcEIsS0FBSztZQUlDLFNBQVM7a0JBRGYsS0FBSztZQVVDLHNCQUFzQjtrQkFENUIsS0FBSztZQUlDLGlCQUFpQjtrQkFEdkIsU0FBUzttQkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgQWZ0ZXJWaWV3Q2hlY2tlZCxcclxuICAgIENvbXBvbmVudCxcclxuICAgIERvQ2hlY2ssXHJcbiAgICBJbmplY3RvcixcclxuICAgIElucHV0LFxyXG4gICAgSXRlcmFibGVEaWZmZXIsXHJcbiAgICBJdGVyYWJsZURpZmZlcnMsXHJcbiAgICBPbkNoYW5nZXMsXHJcbiAgICBPbkRlc3Ryb3ksXHJcbiAgICBPbkluaXQsXHJcbiAgICBWaWV3Q2hpbGRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQXJyYXksIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtcclxuICAgIEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXHJcbiAgICBOYXZpZ2F0aW9uRXh0cmFzLFxyXG4gICAgUm91dGVyLFxyXG4gICAgUm91dGVyU3RhdGVTbmFwc2hvdFxyXG59IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IE5ldCB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvZGF0YS9uZXQnO1xyXG5pbXBvcnQgeyBScGNPdmVybGF5Q2xvc2VDbGllbnQgfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL3JwYy9vdmVybGF5L3JwYy1vdmVybGF5LWNsb3NlLWNsaWVudCc7XHJcbmltcG9ydCB7IFJwY0RpYWxvZ092ZXJsYXlEYXRhIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9ycGMvb3ZlcmxheS9ycGMtb3ZlcmxheS1tb2RlbCc7XHJcbmltcG9ydCB7IERlZmVycmVkRGF0YSB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvcnBjL3JwYyc7XHJcbmltcG9ydCB7IFJwY1R5cGUgfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL3JwYy9ycGMtYmFzZSc7XHJcbmltcG9ydCB7IFJwY091dGJvdW5kIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9ycGMvcnBjLW91dGJvdW5kJztcclxuaW1wb3J0IHsgRU1QVFksIGZyb20sIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQXBwQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlL2FwcC1jb250ZXh0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBScGNTaGVsbFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlL3JwYy1zaGVsbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29yZUJhc2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21tb24vYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTZWFyY2hGb3JtRmllbGRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9mb3JtJztcclxuaW1wb3J0IHsgQ2FuQ29tcG9uZW50RGVhY3RpdmF0ZSB9IGZyb20gJy4uL3NldHRpbmdzLWNhbi1kZWFjdGl2YXRlLWd1YXJkLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTZXR0aW5nc0Zvcm1TZXJ2aWNlIH0gZnJvbSAnLi4vc2V0dGluZ3MtZm9ybS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2V0dGluZ3NDb21wb25lbnQgfSBmcm9tICcuLi9zZXR0aW5ncy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb21tb25TZXR0aW5nc05hdmlnYXRpb25JdGVtLCBDb21tb25TZXR0aW5nc05hdmlnYXRpb25JdGVtV2l0aEZvcm0gfSBmcm9tICcuL2NvbW1vbi1zZXR0aW5ncy1uYXZpZ2F0aW9uLWl0ZW0nO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBHcm91cFRvb2xzTWVudSB7XHJcbiAgICBncm91cDogc3RyaW5nO1xyXG4gICAgb3B0aW9uczogQ29tbW9uU2V0dGluZ3NOYXZpZ2F0aW9uSXRlbVdpdGhGb3JtW107XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDb250YWluZXIgYXJvdW5kIHNldHRpbmdzIGNvbXBvbmVudCwgaGFuZGxlcyBjb21tb24gc2V0dGluZ3MgYmVoYXZpb3IuXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnc21lLWNvbW1vbi1zZXR0aW5ncycsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vY29tbW9uLXNldHRpbmdzLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29tbW9uU2V0dGluZ3NDb21wb25lbnQgZXh0ZW5kcyBDb3JlQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIERvQ2hlY2ssIEFmdGVyVmlld0NoZWNrZWQge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHNvdXJjZSBuYW1lIHRvIHVzZSBmb3IgbG9nZ2luZ1xyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgZ2V0IGxvZ1NvdXJjZU5hbWUoKSB7XHJcbiAgICAgICAgcmV0dXJuICdDb21tb25TZXR0aW5nc0NvbXBvbmVudCc7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNvbWJpbmVkRm9ybTogRm9ybUdyb3VwO1xyXG4gICAgcHVibGljIHJlYWRvbmx5IGRlZmF1bHRHcm91cCA9ICdkZWZhdWx0JztcclxuICAgIHB1YmxpYyBncm91cFRvb2xzOiBHcm91cFRvb2xzTWVudVtdO1xyXG4gICAgcHVibGljIGxheWVyczogUnBjRGlhbG9nT3ZlcmxheURhdGFbXSA9IFtdO1xyXG4gICAgcHVibGljIHNlbGVjdGVkU2V0dGluZzogQ29tbW9uU2V0dGluZ3NOYXZpZ2F0aW9uSXRlbTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNlYXJjaCBib3ggcmVsYXRlZCB2YXJpYWJsZXNcclxuICAgICAqL1xyXG4gICAgcHVibGljIGZpbHRlciA9ICcnO1xyXG4gICAgcHVibGljIHNlYXJjaFRpdGxlOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgZmlsdGVyZWRTZXR0aW5nczogQ29tbW9uU2V0dGluZ3NOYXZpZ2F0aW9uSXRlbVtdID0gW107XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnc2VhcmNoVGV4dEJveCcpXHJcbiAgICBwdWJsaWMgc2VhcmNoVGV4dEJveDogU2VhcmNoRm9ybUZpZWxkQ29tcG9uZW50O1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc2V0dGluZ3NUaXRsZTogc3RyaW5nO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc2V0dGluZ3M6IENvbW1vblNldHRpbmdzTmF2aWdhdGlvbkl0ZW1bXTtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNob3dIZWFkZXIgPSB0cnVlO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgaGFja1Nob3dPdmVybGF5ID0gZmFsc2U7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBoYWNrVG9vbEhlYWRlciA9IGZhbHNlO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgYmFja1JvdXRlOiB7IGNvbW1hbmRzOiBhbnlbXSwgZXh0cmFzPzogTmF2aWdhdGlvbkV4dHJhcyB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29udHJvbHMgd2hldGhlciB0aGUgdGFiIGxpc3Qgc2hvd2luZyB0aGUgU2V0dGluZ3MgaXRlbXMgaXMgc2Nyb2xsYWJsZSBvciBub3RcclxuICAgICAqIERlZmF1bHQgdG8gdHJ1ZS4gQWxsb3dpbmcgc2VwYXJhdGUgc2Nyb2xsIGJhciBmb3IgdGhlIG5hdmJhciBhbmQgdGhlIHNlbGVjdGVkIFNldHRpbmdzLlxyXG4gICAgICogU2V0IHRvIGZhbHNlIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGFuZCB1c2UgcHJldmlvdXMgYmVoYXZpb3Igd2hlcmUgdGhlcmUgaXNcclxuICAgICAqIG9ubHkgMSBzaW5nbGUgc2Nyb2xsIGJhciBmb3IgYm90aCBuYXZiYXIgYW5kIGNvbnRlbnQgb2YgdGhlIHNlbGVjdGVkIFNldHRpbmdzIGl0ZW0uXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc2Nyb2xsYWJsZVNlY29uZGFyeU5hdiA9IHRydWU7XHJcblxyXG4gICAgQFZpZXdDaGlsZChTZXR0aW5nc0NvbXBvbmVudClcclxuICAgIHB1YmxpYyBzZXR0aW5nc0NvbXBvbmVudDogU2V0dGluZ3NDb21wb25lbnQ7XHJcblxyXG4gICAgcHJpdmF0ZSBsYXRlc3RGb3JtOiBGb3JtR3JvdXA7XHJcbiAgICBwcml2YXRlIGxhdGVzdFByaXN0aW5lRm9ybVZhbHVlOiBhbnk7XHJcbiAgICBwcml2YXRlIGxhdGVzdEZvcm1VcGRhdGVWYWx1ZUluQ29tcG9uZW50OiBib29sZWFuO1xyXG4gICAgcHJpdmF0ZSBzZXR0aW5nc0RpZmZlcjogSXRlcmFibGVEaWZmZXI8YW55PjtcclxuICAgIHByaXZhdGUgYXV0b2ZvY3VzID0gdHJ1ZTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICAgICAgcHVibGljIHJvdXRlcjogUm91dGVyLFxyXG4gICAgICAgIHByaXZhdGUgc2V0dGluZ3NGb3JtczogU2V0dGluZ3NGb3JtU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGl0ZXJhYmxlRGlmZmVyczogSXRlcmFibGVEaWZmZXJzLFxyXG4gICAgICAgIHByaXZhdGUgYXBwQ29udGV4dDogQXBwQ29udGV4dFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBycGNTaGVsbFNlcnZpY2U6IFJwY1NoZWxsU2VydmljZVxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIoaW5qZWN0b3IpO1xyXG4gICAgICAgIHRoaXMuY29tYmluZWRGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hUaXRsZSA9IHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5zZWFyY2hQbGFjZUhvbGRlcjtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnNldHRpbmdzRm9ybXMuZm9ybUFkZGVkKCkuc3Vic2NyaWJlKChmb3JtQWRkZWREYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIC8vIHRvIGF2b2lkIGR1cGxpY2F0ZXMgd2UgZmlyc3QgcmVtb3ZlIHRoZSBmb3JtIGlmIGl0IGV4aXN0c1xyXG4gICAgICAgICAgICB0aGlzLmxhdGVzdEZvcm0gPSBmb3JtQWRkZWREYXRhLmZvcm1Hcm91cDtcclxuICAgICAgICAgICAgdGhpcy5sYXRlc3RQcmlzdGluZUZvcm1WYWx1ZSA9IHRoaXMuZ2V0UmF3VmFsdWVSZWN1cnNpdmUoZm9ybUFkZGVkRGF0YS5mb3JtR3JvdXApO1xyXG4gICAgICAgICAgICB0aGlzLmxhdGVzdEZvcm1VcGRhdGVWYWx1ZUluQ29tcG9uZW50ID0gZm9ybUFkZGVkRGF0YS51cGRhdGVWYWx1ZUluQ29tcG9uZW50O1xyXG4gICAgICAgICAgICB0aGlzLnJlY2FsY3VsYXRlQWN0aXZlUGFuZWwoKTtcclxuICAgICAgICB9KSk7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nc0RpZmZlciA9IHRoaXMuaXRlcmFibGVEaWZmZXJzLmZpbmQodGhpcy5zZXR0aW5ncykuY3JlYXRlKG51bGwpO1xyXG5cclxuICAgICAgICB0aGlzLnJlY2FsY3VsYXRlQWN0aXZlUGFuZWwoKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaGFja1Nob3dPdmVybGF5KSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMucnBjU2hlbGxTZXJ2aWNlLm92ZXJsYXlPcGVuU3ViamVjdFxyXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoZGVmZXJyZWREYXRhOiBEZWZlcnJlZERhdGE8UnBjRGlhbG9nT3ZlcmxheURhdGEsIHZvaWQ+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gb3ZlcmxheSB0b29scyB3aXRoIG9uZSBtb3JlIGxheWVyIG9yIHJlbW92ZSBvbmUgZnJvbSB0b3BcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZGVmZXJyZWREYXRhLmRhdGEub3ZlcmxheSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxheWVycy5wdXNoKGRlZmVycmVkRGF0YS5kYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMubGF5ZXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXllcnMucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdScGMgT3ZlcmxheUNsb3NlOiBjbG9zZSByZXF1ZXN0IGlzIGNhbGxlZCB3aGlsZSBsYXllciBpcyBubyBsb25nZXIgYXZhaWxhYmxlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGRlZmVycmVkRGF0YS5kZWZlcnJlZC5yZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzKSB7XHJcbiAgICAgICAgc3VwZXIubmdPbkNoYW5nZXMoY2hhbmdlcyk7XHJcbiAgICAgICAgaWYgKGNoYW5nZXMuc2V0dGluZ3MpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nc0RpZmZlciA9IHRoaXMuaXRlcmFibGVEaWZmZXJzLmZpbmQodGhpcy5zZXR0aW5ncykuY3JlYXRlKG51bGwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNyZWF0ZU1lbnUoKTtcclxuICAgICAgICB0aGlzLnJlY2FsY3VsYXRlQWN0aXZlUGFuZWwoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbmdEb0NoZWNrKCkge1xyXG4gICAgICAgIHN1cGVyLm5nRG9DaGVjaygpO1xyXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmdzRGlmZmVyKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLnNldHRpbmdzRGlmZmVyLmRpZmYodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgICAgIGlmIChjaGFuZ2VzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZU1lbnUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbmdBZnRlclZpZXdDaGVja2VkKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmF1dG9mb2N1cykge1xyXG4gICAgICAgICAgICBjb25zdCBmb2N1c0VsZW1lbnRzID0gdGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tyb2xlPVwidGFiXCJdJyk7XHJcbiAgICAgICAgICAgIGlmIChmb2N1c0VsZW1lbnRzICYmIGZvY3VzRWxlbWVudHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICBmb2N1c0VsZW1lbnRzWzBdLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmF1dG9mb2N1cyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBTZXR0aW5nIFRpdGxlIGhlYWRlciBpcyBtYW5hZ2VkIGJ5IGNoaWxkIGNvbXBvbmVudCB0aGlzLnNldHRpbmdzQ29tcG9uZW50LFxyXG4gICAgICAgIC8vIGFmdGVyIGN1cnJlbnQgdmlldyBhbmQgY2hpbGQgdmlldyBoYXMgYmVlbiByZW5kZXJlZCwgcGFzcyBhbG9uZyB0aGUgc2VsZWN0ZWRTZXR0aW5nXHJcbiAgICAgICAgLy8gc3RyaW5nIGlmIGl0IGV4aXN0cyBzbyBjaGlsZCB2aWV3IHdpbGwgcmVuZGVyIHRoZSB0aXRsZVxyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkU2V0dGluZykge1xyXG4gICAgICAgICAgICB0aGlzLm9uU21lUm91dGVyTGlua0FjdGl2YXRlZCh0aGlzLnNlbGVjdGVkU2V0dGluZyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjcmVhdGVNZW51KCkge1xyXG5cclxuICAgICAgICAvLyBCZWZvcmUgY3JlYXRpbmcgdGhlIFNldHRpbmdzIG1lbnUsIGZpbHRlciB0aGUgU2V0dGluZ3MgbWVudSB0byBvbmx5IGRpc3BsYXlcclxuICAgICAgICAvLyBpdGVtcyB0aGF0IG1hdGNoZXMgdGhlIGZpbHRlclxyXG4gICAgICAgIHRoaXMuZmlsdGVyZWRTZXR0aW5ncyA9IHRoaXMuZmlsdGVyU2V0dGluZygpO1xyXG5cclxuICAgICAgICBjb25zdCBncm91cFRvb2xzOiBHcm91cFRvb2xzTWVudVtdID0gW107XHJcbiAgICAgICAgZ3JvdXBUb29sc1snZGVmYXVsdCddID0geyBncm91cDogJ2RlZmF1bHQnLCBvcHRpb25zOiBbXSB9O1xyXG4gICAgICAgIHRoaXMuZmlsdGVyZWRTZXR0aW5ncy5mb3JFYWNoKChzZXR0aW5nKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghISFzZXR0aW5nLmdyb3VwKSB7XHJcbiAgICAgICAgICAgICAgICBncm91cFRvb2xzWydkZWZhdWx0J10ub3B0aW9ucy5wdXNoKHNldHRpbmcpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKCEhIWdyb3VwVG9vbHNbc2V0dGluZy5ncm91cF0pIHtcclxuICAgICAgICAgICAgICAgICAgICBncm91cFRvb2xzW3NldHRpbmcuZ3JvdXBdID0geyBncm91cDogc2V0dGluZy5ncm91cCwgdGl0bGU6IHNldHRpbmcuZ3JvdXBUaXRsZSwgb3B0aW9uczogW10gfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGdyb3VwVG9vbHNbc2V0dGluZy5ncm91cF0ub3B0aW9ucy5wdXNoKHNldHRpbmcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5ncm91cFRvb2xzID0gW107XHJcbiAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIGdyb3VwVG9vbHMpIHtcclxuICAgICAgICAgICAgaWYgKHByb3ApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBUb29scy5wdXNoKGdyb3VwVG9vbHNbcHJvcF0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZWNhbGN1bGF0ZUFjdGl2ZVBhbmVsKCkge1xyXG4gICAgICAgIGNvbnN0IHNldHRpbmcgPSA8Q29tbW9uU2V0dGluZ3NOYXZpZ2F0aW9uSXRlbVdpdGhGb3JtPnRoaXMuc2VsZWN0ZWRTZXR0aW5nO1xyXG4gICAgICAgIGlmIChNc2Z0U21lLmlzTnVsbE9yVW5kZWZpbmVkKHNldHRpbmcpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzZXR0aW5nLmZvcm0gJiYgc2V0dGluZy5mb3JtLmRpcnR5KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZvcm1WYWx1ZSA9IHRoaXMuZ2V0UmF3VmFsdWVSZWN1cnNpdmUoc2V0dGluZy5mb3JtKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChzZXR0aW5nLnVwZGF0ZVZhbHVlSW5Db21wb25lbnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZ3NGb3Jtcy5uZXdGb3JtVmFsdWUoc2V0dGluZy5mb3JtLCBmb3JtVmFsdWUpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sYXRlc3RGb3JtLnNldFZhbHVlKGZvcm1WYWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMubGF0ZXN0Rm9ybS5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZXR0aW5nc0Zvcm1zLnJlbW92ZUZvcm0oc2V0dGluZy5mb3JtKTtcclxuICAgICAgICBzZXR0aW5nLmZvcm0gPSB0aGlzLmxhdGVzdEZvcm07XHJcblxyXG4gICAgICAgIGlmIChzZXR0aW5nLmZvcm0pIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY29tYmluZWRGb3JtLmNvbnRyb2xzW3NldHRpbmcubGFiZWxdKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbWJpbmVkRm9ybS5zZXRDb250cm9sKHNldHRpbmcubGFiZWwsIHNldHRpbmcuZm9ybSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbWJpbmVkRm9ybS5hZGRDb250cm9sKHNldHRpbmcubGFiZWwsIHNldHRpbmcuZm9ybSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNldHRpbmcudXBkYXRlVmFsdWVJbkNvbXBvbmVudCA9IHRoaXMubGF0ZXN0Rm9ybVVwZGF0ZVZhbHVlSW5Db21wb25lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRpc2NhcmRBbGxDaGlsZEZvcm1zKCkge1xyXG4gICAgICAgIC8vIEZvciB0aGUgY3VycmVudCBhY3RpdmUgc2V0dGluZywgd2UgbmVlZCB0byByZXNldCB0aGUgZm9ybSB0byBpdHNcclxuICAgICAgICAvLyBvcmlnaW5hbCBwcmlzdGluZSBmb3JtIHdoZW4gZGlzY2FyZGluZyBjaGFuZ2VzXHJcbiAgICAgICAgY29uc3QgYWN0aXZlU2V0dGluZyA9IHRoaXMuc2VsZWN0ZWRTZXR0aW5nO1xyXG4gICAgICAgIGNvbnN0IHNldHRpbmdXaXRoRm9ybSA9IDxDb21tb25TZXR0aW5nc05hdmlnYXRpb25JdGVtV2l0aEZvcm0+YWN0aXZlU2V0dGluZztcclxuICAgICAgICBpZiAoc2V0dGluZ1dpdGhGb3JtLmZvcm0pIHtcclxuICAgICAgICAgICAgc2V0dGluZ1dpdGhGb3JtLmZvcm0ucmVzZXQodGhpcy5sYXRlc3RQcmlzdGluZUZvcm1WYWx1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldHRpbmdzLmZvckVhY2goKG90aGVyU2V0dGluZykgPT4ge1xyXG4gICAgICAgICAgICBpZiAob3RoZXJTZXR0aW5nICE9PSBhY3RpdmVTZXR0aW5nKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvdGhlcnNldHRpbmdXaXRoRm9ybSA9IDxDb21tb25TZXR0aW5nc05hdmlnYXRpb25JdGVtV2l0aEZvcm0+b3RoZXJTZXR0aW5nO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nc0Zvcm1zLnJlbW92ZUZvcm0ob3RoZXJzZXR0aW5nV2l0aEZvcm0uZm9ybSk7XHJcbiAgICAgICAgICAgICAgICBvdGhlcnNldHRpbmdXaXRoRm9ybS5mb3JtID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbWJpbmVkRm9ybS5jb250cm9sc1tvdGhlcnNldHRpbmdXaXRoRm9ybS5sYWJlbF0pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbWJpbmVkRm9ybS5yZW1vdmVDb250cm9sKG90aGVyc2V0dGluZ1dpdGhGb3JtLmxhYmVsKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhY2NlcHRBbGxDaGlsZEZvcm1zVmFsdWUoKSB7XHJcbiAgICAgICAgY29uc3QgYWN0aXZlU2V0dGluZyA9IHRoaXMuc2VsZWN0ZWRTZXR0aW5nO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MuZm9yRWFjaCgoc2V0dGluZykgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBzZXR0aW5nV2l0aEZvcm0gPSA8Q29tbW9uU2V0dGluZ3NOYXZpZ2F0aW9uSXRlbVdpdGhGb3JtPnNldHRpbmc7XHJcbiAgICAgICAgICAgIGlmIChzZXR0aW5nV2l0aEZvcm0uZm9ybSkge1xyXG4gICAgICAgICAgICAgICAgc2V0dGluZ1dpdGhGb3JtLmZvcm0ucmVzZXQodGhpcy5nZXRSYXdWYWx1ZVJlY3Vyc2l2ZShzZXR0aW5nV2l0aEZvcm0uZm9ybSkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGFjdGl2ZVNldHRpbmcgPT09IHNldHRpbmdXaXRoRm9ybSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGF0ZXN0UHJpc3RpbmVGb3JtVmFsdWUgPSB0aGlzLmdldFJhd1ZhbHVlUmVjdXJzaXZlKHNldHRpbmdXaXRoRm9ybS5mb3JtKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRTbWVJY29uQ2xhc3Moc2V0dGluZzogQ29tbW9uU2V0dGluZ3NOYXZpZ2F0aW9uSXRlbSkge1xyXG4gICAgICAgIGNvbnN0IG5nQ2xhc3NQYXJhbWV0ZXIgPSB7fTtcclxuICAgICAgICBpZiAoc2V0dGluZy5zbWVJY29uQ2xhc3NOYW1lKSB7XHJcbiAgICAgICAgICAgIG5nQ2xhc3NQYXJhbWV0ZXJbc2V0dGluZy5zbWVJY29uQ2xhc3NOYW1lXSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZ0NsYXNzUGFyYW1ldGVyO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjYW5EZWFjdGl2YXRlKFxyXG4gICAgICAgIGNvbXBvbmVudDogQ2FuQ29tcG9uZW50RGVhY3RpdmF0ZSxcclxuICAgICAgICByb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCxcclxuICAgICAgICBzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdCk6IE9ic2VydmFibGU8Ym9vbGVhbj4gfCBQcm9taXNlPGJvb2xlYW4+IHwgYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3NDb21wb25lbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZ3NDb21wb25lbnQuY2FuRGVhY3RpdmF0ZShjb21wb25lbnQsIHJvdXRlLCBzdGF0ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGluaXRpYWwgaG9zdCBjbGFzc2VzIHRvIGJlIGFwcGxpZWQgdG8gdGhpcyBlbGVtZW50XHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBnZXRJbml0aWFsSG9zdENsYXNzZXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldEluaXRpYWxIb3N0Q2xhc3NlcygpLmNvbmNhdChbXHJcbiAgICAgICAgICAgICdzbWUtY29tbW9uLXNldHRpbmdzJyxcclxuICAgICAgICBdKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgdGhlIGlkQmFnIHVzZWQgYnkgdGhpcyBjb21wb25lbnQgdG8gc3RvcmUgdW5pcXVlIGVsZW1lbnQgaWRzLlxyXG4gICAgICogaWQgdmFsdWVzIHdpbGwgYmUgYXNzaWduZWQgYmUgdGhlIEBzZWUgQmFzZUNvbXBvbmVudCBzdXBlciBjbGFzcy5cclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZUlkQmFnKCk6IE1zZnRTbWUuU3RyaW5nTWFwPHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGdyb3VwOiAnJyxcclxuICAgICAgICAgICAgb3B0aW9uOiAnJ1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uT3ZlcmxheUNsaWNrKGxheWVyOiBScGNEaWFsb2dPdmVybGF5RGF0YSk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGxheWVyUnBjID0gdGhpcy5hcHBDb250ZXh0LnJwYy5ycGNNYW5hZ2VyLnJwY0NoYW5uZWwuZ2V0UnBjPFJwY091dGJvdW5kPihcclxuICAgICAgICAgICAgbGF5ZXIuc291cmNlTmFtZSxcclxuICAgICAgICAgICAgbGF5ZXIuc291cmNlU3ViTmFtZSxcclxuICAgICAgICAgICAgUnBjVHlwZS5PdXRib3VuZFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgZnJvbShScGNPdmVybGF5Q2xvc2VDbGllbnQub3ZlcmxheUNsb3NlKHRoaXMuYXBwQ29udGV4dC5ycGMsIHsgb3ZlcmxheTogZmFsc2UsIGRpYWxvZ0lkOiBsYXllci5kaWFsb2dJZCB9LCBsYXllclJwYykpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghcmVzdWx0Lm92ZXJsYXlDbG9zZWQgJiYgdGhpcy5sYXllcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxheWVycy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vdGlmaWNhdGlvbiA9IHRoaXMuYXBwQ29udGV4dC5ub3RpZmljYXRpb24uY3JlYXRlKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIG5vdGlmaWNhdGlvbi5zaG93RXJyb3IodGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLk92ZXJsYXkuY2xvc2VFcnJvclRpdGxlLCBOZXQuZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubGF5ZXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXllcnMucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gRU1QVFk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgY3VycmVudCBjb250cm9sIGFuZCBhbGwgaXRzIGNoaWxkcmVuIHJlY3Vyc2l2ZWxseSxcclxuICAgICAqIGluY2x1ZGluZyBkaXNhYmxlZCBjb250cm9scy5cclxuICAgICAqXHJcbiAgICAgKiBXb3JrYXJvdW5kIGZvciBtaXNzaW5nIGZ1bmN0aW9uYWxpdHkgYWRkZWQgaW4gbGF0ZXIgdmVyc2lvbnMgb2YgYW5ndWxhclxyXG4gICAgICogQ3VycmVudGx5IGdldFJhd1ZhbHVlIG9ubHkgcmV0dXJucyB0aGUgdmFsdWUgb2YgaHRlIGN1cnJlbnQgY29udHJvbCBkaXNhYmxlZFxyXG4gICAgICogY2hpbGRyZW4gYnV0IG9ubHkgZW5hYmxlZCBjb250cm9scyBvZiBvdGhlciBkZXNjZW5kYW50czpcclxuICAgICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvY29tbWl0LzFlY2U3MzY2YzhiNjdmMzg3ZmJlMTNmOGQxMjhjMTlmNGM1MGRkMTlcclxuICAgICAqXHJcbiAgICAgKiBPbmNlIHdlIHVwZ3JhZGUgYW5ndWxhciB2ZXJzaW9uIHdlIGNhbiByZW1vdmUgdGhpcyBjb2RlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBmb3JtQ29udHJvbCBUaGUgZm9ybSBjb250cm9sIHRvIGdldCB0aGUgdmFsdWUgZnJvbVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGdldFJhd1ZhbHVlUmVjdXJzaXZlKGZvcm1Db250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBhbnkge1xyXG4gICAgICAgIGlmIChmb3JtQ29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHt9O1xyXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhmb3JtQ29udHJvbC5jb250cm9scykuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdmFsdWVba2V5XSA9IHRoaXMuZ2V0UmF3VmFsdWVSZWN1cnNpdmUoZm9ybUNvbnRyb2wuY29udHJvbHNba2V5XSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG5cclxuICAgICAgICB9IGVsc2UgaWYgKGZvcm1Db250cm9sIGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmb3JtQ29udHJvbC5jb250cm9scy5tYXAoKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmF3VmFsdWVSZWN1cnNpdmUoY29udHJvbCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZvcm1Db250cm9sLnZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIHRoaXMuc2VsZWN0ZWRTZXR0aW5nIHRvIHRoZSBuZXdseSBzZWxlY3RlZCBTZXR0aW5ncyBpdGVtIHdoZW4gdXNlciBuYXZpZ2F0ZSB0byBhIG5ldyBTZXR0aW5ncyBpdGVtXHJcbiAgICAgKiBBbHNvIGNhbGwgdGhlIGNoaWxkIGNvbXBvbmVudCB0aGlzLnNldHRpbmdzQ29tcG9uZW50IHRvIHVwZGF0ZSB0aGUgc2V0dGluZ3NUaXRsZSB0byByZWZsZWN0IHRoZSB0aXRsZVxyXG4gICAgICogb2YgdGhlIG5ld2x5IHNlbGVjdGVkIFNldHRpbmdzIGl0ZW1cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gbmV3U2V0dGluZyBUaGUgbmV3bHkgc2VsZWN0ZWQgU2V0dGluZ3MgaXRlbVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25TbWVSb3V0ZXJMaW5rQWN0aXZhdGVkKG5ld1NldHRpbmc6IENvbW1vblNldHRpbmdzTmF2aWdhdGlvbkl0ZW0pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkU2V0dGluZyA9IG5ld1NldHRpbmc7XHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3NDb21wb25lbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nc0NvbXBvbmVudC51cGRhdGVTZWxlY3RlZFNldHRpbmdUaXRsZShuZXdTZXR0aW5nLmxhYmVsKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIENhbGxiYWNrIGZ1bmN0aW9uIGZvciB0aGUgc2VhcmNoIGZpZWxkXHJcbiAgICAqL1xyXG4gICAgcHVibGljIG9uU2VhcmNoKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2VhcmNoVGV4dEJveC5zZWFyY2hpbmcgPSB0cnVlO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZU1lbnUoKTtcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hUZXh0Qm94LnNlYXJjaGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBGaWx0ZXIgb3V0IHRoZSBzZXR0aW5ncyBJdGVtIGJhc2VkIG9uIHRoaXMuZmlsdGVyIHN0cmluZyBhbmQgbWF0Y2ggdGhlIHRpdGxlIG9mIFNldHRpbmdzIEl0ZW1zXHJcbiAgICAqL1xyXG4gICAgcHJpdmF0ZSBmaWx0ZXJTZXR0aW5nKCk6IENvbW1vblNldHRpbmdzTmF2aWdhdGlvbkl0ZW1bXSB7XHJcblxyXG4gICAgICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy5zZXR0aW5ncztcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmZpbHRlcikge1xyXG4gICAgICAgICAgICByZXR1cm4gc2V0dGluZ3M7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBsb2NhbEZpbHRlciA9IHRoaXMuZmlsdGVyLnRvTG9jYWxlTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICAgIHJldHVybiBzZXR0aW5ncy5maWx0ZXIoc2V0dGluZyA9PiB7XHJcbiAgICAgICAgICAgIGlmIChzZXR0aW5nLmxhYmVsLnRvTG9jYWxlTG93ZXJDYXNlKCkuaW5kZXhPZihsb2NhbEZpbHRlcikgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iLCI8c21lLXNldHRpbmdzIFtzZXR0aW5nc1RpdGxlXT1cImhhY2tUb29sSGVhZGVyID8gJycgOiBzZXR0aW5nc1RpdGxlXCI+XHJcbiAgPHNtZS1zZXR0aW5ncy1uYXZpZ2F0aW9uIGNsYXNzPVwic21lLXBvc2l0aW9uLXN0cmV0Y2hcIj5cclxuICAgIDxoZWFkZXIgY2xhc3M9XCJzbWUtbGF5b3V0LXRvb2wtaGVhZGVyXCIgKm5nSWY9XCJoYWNrVG9vbEhlYWRlclwiPlxyXG4gICAgICA8aDIgY2xhc3M9XCJzbWUtcG9zaXRpb24tZmxleC1ub25lIHNtZS1mb250LWgzXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJzZXR0aW5nc1RpdGxlXCI+e3tzZXR0aW5nc1RpdGxlfX08L2gyPlxyXG4gICAgPC9oZWFkZXI+XHJcbiAgICA8ZGl2IHJvbGU9XCJyZWdpb25cIiBbYXR0ci5hcmlhLWxhYmVsXT1cInNldHRpbmdzVGl0bGVcIiBjbGFzcz1cInNtZS1wb3NpdGlvbi1zdHJldGNoIHNtZS1hcnJhbmdlLXN0YWNrLXZcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInNtZS1wb3NpdGlvbi1mbGV4LW5vbmUgc21lLWZvY3VzLXpvbmVcIj5cclxuICAgICAgICA8Zm9ybSBjbGFzcz1cInNtZS1tYXJnaW4tc3F1aXNoLXYtc21cIj5cclxuICAgICAgICAgIDxzbWUtZm9ybS1maWVsZCAjc2VhcmNoVGV4dEJveCB0eXBlPVwic2VhcmNoXCIgbmFtZT1cInRvb2xzTGlzdFNlYXJjaFwiIFsobmdNb2RlbCldPVwiZmlsdGVyXCIgW3BsYWNlaG9sZGVyXT1cInNlYXJjaFRpdGxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbYXV0b2ZvY3VzXT1cInRydWVcIiBbY291bnRdPVwiZmlsdGVyZWRTZXR0aW5ncyA/IGZpbHRlcmVkU2V0dGluZ3MubGVuZ3RoIDogMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlYXJjaCk9XCJvblNlYXJjaCgpXCI+PC9zbWUtZm9ybS1maWVsZD5cclxuICAgICAgICA8L2Zvcm0+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8bmF2IHJvbGU9XCJ0YWJsaXN0XCIgY2xhc3M9XCJzbWUtYXJyYW5nZS1zdGFjay12IHNtZS1mb2N1cy16b25lXCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cInNjcm9sbGFibGVTZWNvbmRhcnlOYXYgPyAnc21lLXBvc2l0aW9uLWZsZXgtYXV0byBzbWUtYXJyYW5nZS1vdmVyZmxvdy1hdXRvLXknIDogJydcIj5cclxuICAgICAgICA8dWwgY2xhc3M9XCJzbWUtcG9zaXRpb24tZmxleC1hdXRvIHNtZS1hcnJhbmdlLXN0YWNrLXYgc21lLWFycmFuZ2Utb3ZlcmZsb3ctaGlkZS14IHNtZS1hcnJhbmdlLW92ZXJmbG93LWF1dG8teVwiXHJcbiAgICAgICAgICByb2xlPVwicHJlc2VudGF0aW9uXCI+XHJcbiAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGdyb3VwIG9mIGdyb3VwVG9vbHM7IGxldCBqID0gaW5kZXhcIiBjbGFzcz1cInNtZS1tYXJnaW4taW5zZXQtbm9uZVwiIHJvbGU9XCJwcmVzZW50YXRpb25cIj5cclxuICAgICAgICAgICAgPGg0IFtpZF09XCJpZEJhZy5ncm91cCArICctJyArIGpcIiBjbGFzcz1cInNtZS1mb250LWg0IHNtZS1mb250LWg0LXNldHRpbmdzXCIgKm5nSWY9XCJncm91cC5ncm91cCE9PWRlZmF1bHRHcm91cFwiXHJcbiAgICAgICAgICAgICAgW3RpdGxlXT1cImdyb3VwLmdyb3VwXCI+e3tncm91cC5ncm91cH19PC9oND5cclxuICAgICAgICAgICAgPGEgKm5nRm9yPVwibGV0IHNldHRpbmcgb2YgZ3JvdXAub3B0aW9uczsgbGV0IGkgPSBpbmRleFwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJzbWUtcGFkZGluZy1zcXVpc2gtdi1zbSBzbWUtYXJyYW5nZS1zdGFjay1oIHNtZS1zY2hlbWUtbmF2LWxpc3QtaXRlbVwiIHJvbGU9XCJ0YWJcIlxyXG4gICAgICAgICAgICAgIGhyZWY9XCJzZXR0aW5nLnJvdXRlUGFyYW1zLmV4dHJhcyAmJiBzZXR0aW5nLnJvdXRlUGFyYW1zLmV4dHJhcy5yZXBsYWNlVXJsXCJcclxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cInNlbGVjdGVkU2V0dGluZyA9PT0gc2V0dGluZ1wiXHJcbiAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwic2V0dGluZy5yb3V0ZVBhcmFtcy5jb21tYW5kc1wiIHJvdXRlckxpbmtBY3RpdmU9XCJzbWUtYWN0aXZlXCJcclxuICAgICAgICAgICAgICAoc21lUm91dGVyTGlua0FjdGl2YXRlZCk9XCJvblNtZVJvdXRlckxpbmtBY3RpdmF0ZWQoc2V0dGluZylcIlxyXG4gICAgICAgICAgICAgIFtwcmVzZXJ2ZUZyYWdtZW50XT1cInNldHRpbmcucm91dGVQYXJhbXMuZXh0cmFzICYmIHNldHRpbmcucm91dGVQYXJhbXMuZXh0cmFzLnByZXNlcnZlRnJhZ21lbnRcIlxyXG4gICAgICAgICAgICAgIFtza2lwTG9jYXRpb25DaGFuZ2VdPVwic2V0dGluZy5yb3V0ZVBhcmFtcy5leHRyYXMgJiYgc2V0dGluZy5yb3V0ZVBhcmFtcy5leHRyYXMuc2tpcExvY2F0aW9uQ2hhbmdlXCJcclxuICAgICAgICAgICAgICBbcmVwbGFjZVVybF09XCJzZXR0aW5nLnJvdXRlUGFyYW1zLmV4dHJhcyAmJiBzZXR0aW5nLnJvdXRlUGFyYW1zLmV4dHJhcy5yZXBsYWNlVXJsXCJcclxuICAgICAgICAgICAgICBbcXVlcnlQYXJhbXNdPVwic2V0dGluZy5yb3V0ZVBhcmFtcy5leHRyYXMgJiYgc2V0dGluZy5yb3V0ZVBhcmFtcy5leHRyYXMucXVlcnlQYXJhbXNcIlxyXG4gICAgICAgICAgICAgIFt0aXRsZV09XCJzZXR0aW5nLmxhYmVsXCIgYXR0ci5hcmlhLWxhYmVsbGVkYnk9XCJ7e2lkQmFnLm9wdGlvbn19LXt7an19LXt7aX19IHt7aWRCYWcuZ3JvdXB9fS17e2p9fVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzbWUtaWNvbiBzbWUtbWFyZ2luLXJpZ2h0LXhzXCIgW25nQ2xhc3NdPVwiZ2V0U21lSWNvbkNsYXNzKHNldHRpbmcpXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNtZS1wb3NpdGlvbi1mbGV4LWF1dG9cIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIFtpZF09XCJpZEJhZy5vcHRpb24gKyAnLScgKyBqICsgJy0nICsgaVwiIFtjbGFzcy5zbWUtZGlydHldPVwiISEoc2V0dGluZy5mb3JtICYmIHNldHRpbmcuZm9ybS5kaXJ0eSlcIlxyXG4gICAgICAgICAgICAgICAgICBbY2xhc3Muc21lLXByaXN0aW5lXT1cIiEoc2V0dGluZy5mb3JtICYmIHNldHRpbmcuZm9ybS5kaXJ0eSlcIj57e3NldHRpbmcubGFiZWx9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgPC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgICA8L25hdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiAqbmdJZj1cImhhY2tTaG93T3ZlcmxheVwiPlxyXG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBsYXllciBvZiBsYXllcnNcIlxyXG4gICAgICAgIGNsYXNzPVwic21lLWxheW91dC1hYnNvbHV0ZSBzbWUtcG9zaXRpb24taW5zZXQtbm9uZSBzbWUtbGF5ZXItYWJvdmUgc21lLXNjaGVtZS1iYWNrZHJvcC1vcGFxdWVcIlxyXG4gICAgICAgIChjbGljayk9XCJvbk92ZXJsYXlDbGljayhsYXllcilcIj48L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvc21lLXNldHRpbmdzLW5hdmlnYXRpb24+XHJcbiAgPHNtZS1zZXR0aW5ncy1oZWFkZXIgKm5nSWY9XCIhIXNob3dIZWFkZXJcIj5cclxuICAgIDxoMyBpZD1cInNtZS1zaGVsbC1zZXR0aW5nLXNlbGVjdGVkVGl0bGVcIiBbYXR0ci5hcmlhLWxhYmVsXT1cInNlbGVjdGVkU2V0dGluZy5sYWJlbFwiICpuZ0lmPVwiISFzZWxlY3RlZFNldHRpbmdcIj5cclxuICAgICAge3sgc2VsZWN0ZWRTZXR0aW5nLmxhYmVsIH19PC9oMz5cclxuICA8L3NtZS1zZXR0aW5ncy1oZWFkZXI+XHJcbiAgPHNtZS1zZXR0aW5ncy1jb250ZW50PlxyXG4gICAgPHJvdXRlci1vdXRsZXQ+PC9yb3V0ZXItb3V0bGV0PlxyXG4gIDwvc21lLXNldHRpbmdzLWNvbnRlbnQ+XHJcbiAgPHNtZS1zZXR0aW5ncy1mb290ZXI+XHJcbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbiAgPC9zbWUtc2V0dGluZ3MtZm9vdGVyPlxyXG48L3NtZS1zZXR0aW5ncz5cclxuIl19
|