kwikid-forms 0.7.1 → 0.8.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.
- package/bundles/kwikid-forms.umd.js +406 -220
- package/bundles/kwikid-forms.umd.js.map +1 -1
- package/esm2015/lib/builder/builder-form-editor/builder.form-editor.constants.js +18 -7
- package/esm2015/lib/builder/builder.component.js +1 -1
- package/esm2015/lib/renderer/config-converter/config-converter.constants.js +36 -3
- package/esm2015/lib/renderer/config-converter/config-converter.js +40 -10
- package/esm2015/lib/renderer/form-view/definitions/form-view.actions.definition.js +1 -1
- package/esm2015/lib/renderer/form-view/definitions/form-view.fields.definition.js +3 -1
- package/esm2015/lib/renderer/form-view/form-view.component.js +75 -36
- package/esm2015/lib/renderer/form-view/form-view.module.js +11 -5
- package/esm2015/lib/renderer/form-view/helpers/form-view.form-data.helper.js +65 -0
- package/esm2015/lib/renderer/form-view/helpers/form-view.form-validations.helper.js +4 -2
- package/esm2015/lib/renderer/helpers/forms-storage.helper.js +1 -1
- package/fesm2015/kwikid-forms.js +247 -63
- package/fesm2015/kwikid-forms.js.map +1 -1
- package/lib/builder/builder-form-editor/builder.form-editor.constants.d.ts +102 -0
- package/lib/renderer/config-converter/config-converter.constants.d.ts +33 -0
- package/lib/renderer/form-view/definitions/form-view.actions.definition.d.ts +8 -2
- package/lib/renderer/form-view/definitions/form-view.fields.definition.d.ts +41 -3
- package/lib/renderer/form-view/form-view.component.d.ts +1 -1
- package/lib/renderer/form-view/form-view.module.d.ts +1 -1
- package/lib/renderer/form-view/helpers/form-view.form-data.helper.d.ts +25 -0
- package/package.json +3 -3
|
@@ -24,6 +24,7 @@ import { KwikIDFormViewService } from "./form-view.service";
|
|
|
24
24
|
import { Apis } from "./helpers/form-view.apis.helper";
|
|
25
25
|
import { CameraHelper } from "./helpers/form-view.camera.helper";
|
|
26
26
|
import { appendFormFieldMessage, appendHtmlMessage, convertFormFieldEmptyValueToKwikUIFormat, convertFormFieldValueToKwikUIFormat, convertFormFieldValueToStandardFormat, filterDuplicatesFiles, filterDuplicatesMediaFiles, getFormFieldByKey, getFormFieldIndexByKey, highlightFormFieldError, removeFormFieldMessage, setApiTimerMessage, showFormFieldError } from "./helpers/form-view.fields.helper";
|
|
27
|
+
import { applyMultipleApiCallResponsesToFormData, collectMultipleApiCallResponses, resolveFormFieldValueForSave, syncFormDataPreservingApiObjects } from "./helpers/form-view.form-data.helper";
|
|
27
28
|
import { FormValidation } from "./helpers/form-view.form-validations.helper";
|
|
28
29
|
import { formatEventLogs } from "./helpers/form-view.logs.helper";
|
|
29
30
|
import { Tasks } from "./helpers/form-view.tasks.helper";
|
|
@@ -640,7 +641,14 @@ export class KwikIDFormViewComponent {
|
|
|
640
641
|
.pipe(pairwise())
|
|
641
642
|
.subscribe(([previousValue, currentValue]) => {
|
|
642
643
|
this.previousFormData = Object.assign(Object.assign({}, this.previousFormData), { [field.key]: convertFormFieldValueToStandardFormat(field, previousValue) });
|
|
643
|
-
|
|
644
|
+
const nextValue = convertFormFieldValueToStandardFormat(field, currentValue);
|
|
645
|
+
const keepStoredApiObject = (field.type === EFieldType.API ||
|
|
646
|
+
field.type === EFieldType.API_CALL) &&
|
|
647
|
+
isEmptyValue(nextValue) &&
|
|
648
|
+
isNotEmptyValue(this.formData[field.key]);
|
|
649
|
+
if (!keepStoredApiObject) {
|
|
650
|
+
this.formData[field.key] = nextValue;
|
|
651
|
+
}
|
|
644
652
|
if (field.type === EFieldType.FILE) {
|
|
645
653
|
this.files[field.key] = currentValue;
|
|
646
654
|
}
|
|
@@ -1401,6 +1409,27 @@ export class KwikIDFormViewComponent {
|
|
|
1401
1409
|
console.log("Failed to upload video to server!");
|
|
1402
1410
|
}
|
|
1403
1411
|
break;
|
|
1412
|
+
case EFieldType.MIC:
|
|
1413
|
+
this.triggerLogs(ELogEventType.FORM__API_REQUEST_UPLOAD_FILE, {
|
|
1414
|
+
field_key: field.key,
|
|
1415
|
+
field_type: field.type,
|
|
1416
|
+
request: {
|
|
1417
|
+
audio: file
|
|
1418
|
+
}
|
|
1419
|
+
});
|
|
1420
|
+
try {
|
|
1421
|
+
this.onClickApiCall.emit({
|
|
1422
|
+
key: field.key,
|
|
1423
|
+
type: field.type,
|
|
1424
|
+
payload: {
|
|
1425
|
+
audio: file
|
|
1426
|
+
}
|
|
1427
|
+
});
|
|
1428
|
+
}
|
|
1429
|
+
catch (err) {
|
|
1430
|
+
console.log("Failed to upload audio to server!");
|
|
1431
|
+
}
|
|
1432
|
+
break;
|
|
1404
1433
|
default:
|
|
1405
1434
|
break;
|
|
1406
1435
|
}
|
|
@@ -1414,7 +1443,7 @@ export class KwikIDFormViewComponent {
|
|
|
1414
1443
|
delete formData[field.key];
|
|
1415
1444
|
}
|
|
1416
1445
|
else {
|
|
1417
|
-
formData[field.key] = convertFormFieldValueToStandardFormat(field, formData[field.key]);
|
|
1446
|
+
formData[field.key] = resolveFormFieldValueForSave(field.type, convertFormFieldValueToStandardFormat(field, formData[field.key]), this.formData[field.key]);
|
|
1418
1447
|
}
|
|
1419
1448
|
}
|
|
1420
1449
|
}
|
|
@@ -1551,6 +1580,13 @@ export class KwikIDFormViewComponent {
|
|
|
1551
1580
|
const field = getFormFieldByKey(this.formFields, e.key);
|
|
1552
1581
|
this.formData[e.key] = convertFormFieldValueToStandardFormat(field, e.value);
|
|
1553
1582
|
this.getUnsavedDataState.emit(true);
|
|
1583
|
+
if ((field === null || field === void 0 ? void 0 : field.type) === EFieldType.MIC &&
|
|
1584
|
+
checkObjectKeyExists(field, "properties") &&
|
|
1585
|
+
checkObjectKeyExists(field.properties, "uploadFileToServer") &&
|
|
1586
|
+
field.properties.uploadFileToServer &&
|
|
1587
|
+
isNotEmptyValue(e.value)) {
|
|
1588
|
+
this.uploadFile(field, e.value);
|
|
1589
|
+
}
|
|
1554
1590
|
if (field.isFormElement &&
|
|
1555
1591
|
checkObjectKeyExists(field, "validation") &&
|
|
1556
1592
|
field.validation.triggers.includes("ON_CHANGE")) {
|
|
@@ -1916,6 +1952,10 @@ export class KwikIDFormViewComponent {
|
|
|
1916
1952
|
else {
|
|
1917
1953
|
this.triggerLogs(ELogEventType.FORM__SAVE_AUTO, {});
|
|
1918
1954
|
}
|
|
1955
|
+
if (document.activeElement instanceof HTMLElement) {
|
|
1956
|
+
document.activeElement.blur();
|
|
1957
|
+
}
|
|
1958
|
+
yield new Promise((resolve) => setTimeout(resolve, 0));
|
|
1919
1959
|
const controls = new FormValidation().getFormFieldsInvalidControls(this.formGroup);
|
|
1920
1960
|
let firstFieldWithError = "";
|
|
1921
1961
|
for (const control of controls) {
|
|
@@ -1973,7 +2013,7 @@ export class KwikIDFormViewComponent {
|
|
|
1973
2013
|
delete formData[field.key];
|
|
1974
2014
|
}
|
|
1975
2015
|
else {
|
|
1976
|
-
formData[field.key] = convertFormFieldValueToStandardFormat(field, formData[field.key]);
|
|
2016
|
+
formData[field.key] = resolveFormFieldValueForSave(field.type, convertFormFieldValueToStandardFormat(field, formData[field.key]), this.formData[field.key]);
|
|
1977
2017
|
}
|
|
1978
2018
|
}
|
|
1979
2019
|
}
|
|
@@ -2047,7 +2087,7 @@ export class KwikIDFormViewComponent {
|
|
|
2047
2087
|
}
|
|
2048
2088
|
this.onClickSaveForm.emit({
|
|
2049
2089
|
formConfig: this.formConfig,
|
|
2050
|
-
data: mergeObjects(this.allFormsData[this.formConfig.key], formData, this.popupFormData, this.taskData),
|
|
2090
|
+
data: mergeObjects(this.allFormsData[this.formConfig.key], formData, this.formData, this.popupFormData, this.taskData),
|
|
2051
2091
|
extendedData: extendedFormData
|
|
2052
2092
|
});
|
|
2053
2093
|
}
|
|
@@ -2055,7 +2095,7 @@ export class KwikIDFormViewComponent {
|
|
|
2055
2095
|
this.getUnsavedDataState.emit(false);
|
|
2056
2096
|
this.onClickSaveForm.emit({
|
|
2057
2097
|
formConfig: this.formConfig,
|
|
2058
|
-
data: mergeObjects(formData, this.popupFormData, this.taskData),
|
|
2098
|
+
data: mergeObjects(formData, this.formData, this.popupFormData, this.taskData),
|
|
2059
2099
|
extendedData: extendedFormData
|
|
2060
2100
|
});
|
|
2061
2101
|
}
|
|
@@ -2228,7 +2268,12 @@ export class KwikIDFormViewComponent {
|
|
|
2228
2268
|
});
|
|
2229
2269
|
}
|
|
2230
2270
|
fieldGroupReset(fieldGroup) {
|
|
2231
|
-
|
|
2271
|
+
var _a;
|
|
2272
|
+
const fieldKeys = (_a = this.fieldGroups) === null || _a === void 0 ? void 0 : _a[fieldGroup];
|
|
2273
|
+
if (!Array.isArray(fieldKeys)) {
|
|
2274
|
+
return;
|
|
2275
|
+
}
|
|
2276
|
+
for (const fieldKey of fieldKeys) {
|
|
2232
2277
|
this.fieldReset(fieldKey);
|
|
2233
2278
|
}
|
|
2234
2279
|
}
|
|
@@ -2307,13 +2352,17 @@ export class KwikIDFormViewComponent {
|
|
|
2307
2352
|
const fieldIndex = this.formFields.findIndex((_) => {
|
|
2308
2353
|
return field.key === _.key;
|
|
2309
2354
|
});
|
|
2355
|
+
const hideMessage = message !== null && message !== void 0 ? message : {
|
|
2356
|
+
type: EMessageType.ERROR,
|
|
2357
|
+
message: ""
|
|
2358
|
+
};
|
|
2310
2359
|
field = highlightFormFieldError(field, false);
|
|
2311
|
-
field = removeFormFieldMessage(field,
|
|
2360
|
+
field = removeFormFieldMessage(field, hideMessage);
|
|
2312
2361
|
this.formFields[fieldIndex] = field;
|
|
2313
2362
|
this.triggerLogs(ELogEventType.FORM__FIELD_ERROR_HIDE, {
|
|
2314
2363
|
field_key: fieldKey,
|
|
2315
2364
|
field_type: field.type,
|
|
2316
|
-
field_error_message:
|
|
2365
|
+
field_error_message: hideMessage
|
|
2317
2366
|
});
|
|
2318
2367
|
}
|
|
2319
2368
|
fieldMessageShow(fieldKey, message) {
|
|
@@ -2412,7 +2461,7 @@ export class KwikIDFormViewComponent {
|
|
|
2412
2461
|
}
|
|
2413
2462
|
}
|
|
2414
2463
|
object.FIELD_CONFIG = source._object.FIELD_CONFIG;
|
|
2415
|
-
this.formData = source._object.FORM_DATA;
|
|
2464
|
+
this.formData = syncFormDataPreservingApiObjects(this.formData, source._object.FORM_DATA);
|
|
2416
2465
|
this.patchFormGroup(this.formData);
|
|
2417
2466
|
this.allFormsData = source._object.ALL_FORMS_DATA;
|
|
2418
2467
|
this.previousFormData = source._object.PREVIOUS_FORM_DATA;
|
|
@@ -2425,7 +2474,7 @@ export class KwikIDFormViewComponent {
|
|
|
2425
2474
|
const sourceValue = yield source.getValueFromSource(action.props.value.source);
|
|
2426
2475
|
source.setValueToSource(action.props.value.destination, sourceValue);
|
|
2427
2476
|
object.FIELD_CONFIG = source.object.FIELD_CONFIG;
|
|
2428
|
-
this.formData = source.object.FORM_DATA;
|
|
2477
|
+
this.formData = syncFormDataPreservingApiObjects(this.formData, source.object.FORM_DATA);
|
|
2429
2478
|
this.patchFormGroup(this.formData);
|
|
2430
2479
|
this.allFormsData = source.object.ALL_FORMS_DATA;
|
|
2431
2480
|
this.previousFormData = source.object.PREVIOUS_FORM_DATA;
|
|
@@ -2455,7 +2504,7 @@ export class KwikIDFormViewComponent {
|
|
|
2455
2504
|
}
|
|
2456
2505
|
}, sourceValue);
|
|
2457
2506
|
object.FIELD_CONFIG = source.object.FIELD_CONFIG;
|
|
2458
|
-
this.formData = source.object.FORM_DATA;
|
|
2507
|
+
this.formData = syncFormDataPreservingApiObjects(this.formData, source.object.FORM_DATA);
|
|
2459
2508
|
this.patchFormGroup(this.formData);
|
|
2460
2509
|
this.allFormsData = source.object.ALL_FORMS_DATA;
|
|
2461
2510
|
this.previousFormData = source.object.PREVIOUS_FORM_DATA;
|
|
@@ -2578,7 +2627,7 @@ export class KwikIDFormViewComponent {
|
|
|
2578
2627
|
}
|
|
2579
2628
|
source.setValueToSource(action.props.value.destination, sourceValue);
|
|
2580
2629
|
object.FIELD_CONFIG = source.object.FIELD_CONFIG;
|
|
2581
|
-
this.formData = source.object.FORM_DATA;
|
|
2630
|
+
this.formData = syncFormDataPreservingApiObjects(this.formData, source.object.FORM_DATA);
|
|
2582
2631
|
this.allFormsData = source.object.ALL_FORMS_DATA;
|
|
2583
2632
|
this.previousFormData = source.object.PREVIOUS_FORM_DATA;
|
|
2584
2633
|
this.extraData = source.object.EXTRA_DATA;
|
|
@@ -2619,13 +2668,8 @@ export class KwikIDFormViewComponent {
|
|
|
2619
2668
|
fieldMultipleApiCallsEnd(action, object) {
|
|
2620
2669
|
return __awaiter(this, void 0, void 0, function* () {
|
|
2621
2670
|
const field = getFormFieldByKey(this.formFields, action.props.fieldKey);
|
|
2622
|
-
|
|
2623
|
-
field.
|
|
2624
|
-
if (checkObjectKeyExists(api.response, "value")) {
|
|
2625
|
-
multipleApiCallResponses = setValueToObjectPath(multipleApiCallResponses, `${api.apiKey}`, api.response.value);
|
|
2626
|
-
}
|
|
2627
|
-
});
|
|
2628
|
-
this.formData = Object.assign(Object.assign({}, this.formData), { [field.key]: multipleApiCallResponses });
|
|
2671
|
+
const multipleApiCallResponses = collectMultipleApiCallResponses(field.api.endpoints);
|
|
2672
|
+
applyMultipleApiCallResponsesToFormData(this.formData, field.key, multipleApiCallResponses, object);
|
|
2629
2673
|
this.patchFormGroup(this.formData);
|
|
2630
2674
|
});
|
|
2631
2675
|
}
|
|
@@ -2674,13 +2718,7 @@ export class KwikIDFormViewComponent {
|
|
|
2674
2718
|
taskMultipleApiCallsEnd(action, object) {
|
|
2675
2719
|
return __awaiter(this, void 0, void 0, function* () {
|
|
2676
2720
|
const multipleApiConfig = this.formConfig.apis[action.props.formApiKey];
|
|
2677
|
-
|
|
2678
|
-
multipleApiConfig.endpoints.forEach((api) => {
|
|
2679
|
-
if (checkObjectKeyExists(api.response, "value")) {
|
|
2680
|
-
multipleApiCallResponses = setValueToObjectPath(multipleApiCallResponses, `${api.apiKey}`, api.response.value);
|
|
2681
|
-
}
|
|
2682
|
-
});
|
|
2683
|
-
this.taskData = Object.assign(Object.assign({}, this.taskData), { [action.props.formApiKey]: multipleApiCallResponses });
|
|
2721
|
+
this.taskData[action.props.formApiKey] = collectMultipleApiCallResponses(multipleApiConfig.endpoints);
|
|
2684
2722
|
this.waitingForChanges = false;
|
|
2685
2723
|
this.hideApiLoader();
|
|
2686
2724
|
});
|
|
@@ -2928,7 +2966,7 @@ export class KwikIDFormViewComponent {
|
|
|
2928
2966
|
});
|
|
2929
2967
|
}
|
|
2930
2968
|
takeAction(action, object) {
|
|
2931
|
-
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
2969
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
2932
2970
|
return __awaiter(this, void 0, void 0, function* () {
|
|
2933
2971
|
/**
|
|
2934
2972
|
* This below code is currently commented because not all actions need to be logged at backend.
|
|
@@ -2979,7 +3017,8 @@ export class KwikIDFormViewComponent {
|
|
|
2979
3017
|
this.fieldErrorShow(action.props.fieldKey, action.props.message);
|
|
2980
3018
|
break;
|
|
2981
3019
|
case EActionKey.FIELD_ERROR_HIDE:
|
|
2982
|
-
if (
|
|
3020
|
+
if (((_b = action.props) === null || _b === void 0 ? void 0 : _b.message) &&
|
|
3021
|
+
checkObjectKeyExists(action.props.message, "source")) {
|
|
2983
3022
|
const fieldErrorHideSource = new Source(object);
|
|
2984
3023
|
let fieldErrorHideSourceValue = yield fieldErrorHideSource.getValueFromSource(action.props.message.source);
|
|
2985
3024
|
if (typeof fieldErrorHideSourceValue === "string" ||
|
|
@@ -3086,7 +3125,7 @@ export class KwikIDFormViewComponent {
|
|
|
3086
3125
|
this.showErrorPreview(action.props);
|
|
3087
3126
|
break;
|
|
3088
3127
|
case EActionKey.POPUP_FORM_SHOW:
|
|
3089
|
-
this.showPopupForm(action.props.popupFormKey, (
|
|
3128
|
+
this.showPopupForm(action.props.popupFormKey, (_d = (_c = action.props) === null || _c === void 0 ? void 0 : _c.popupType) !== null && _d !== void 0 ? _d : "DIALOG");
|
|
3090
3129
|
break;
|
|
3091
3130
|
case EActionKey.STOP_WAITING:
|
|
3092
3131
|
this.waitingForChanges = false;
|
|
@@ -3108,10 +3147,10 @@ export class KwikIDFormViewComponent {
|
|
|
3108
3147
|
break;
|
|
3109
3148
|
case EActionKey.DIALOG_SHOW:
|
|
3110
3149
|
this.dialogShow({
|
|
3111
|
-
html: (
|
|
3112
|
-
label: (
|
|
3113
|
-
size: (
|
|
3114
|
-
button: (
|
|
3150
|
+
html: (_e = action.props) === null || _e === void 0 ? void 0 : _e.html,
|
|
3151
|
+
label: (_f = action.props) === null || _f === void 0 ? void 0 : _f.label,
|
|
3152
|
+
size: (_g = action.props) === null || _g === void 0 ? void 0 : _g.size,
|
|
3153
|
+
button: (_h = action.props) === null || _h === void 0 ? void 0 : _h.button
|
|
3115
3154
|
});
|
|
3116
3155
|
break;
|
|
3117
3156
|
case EActionKey.DIALOG_HIDE:
|
|
@@ -3136,7 +3175,7 @@ export class KwikIDFormViewComponent {
|
|
|
3136
3175
|
}
|
|
3137
3176
|
action = setValueToObjectPath(action, "props.message.message", fieldHtmlMessageSourceValue);
|
|
3138
3177
|
}
|
|
3139
|
-
action.props.message.message = updateLanguage(action.props.message.message, getLanguage((
|
|
3178
|
+
action.props.message.message = updateLanguage(action.props.message.message, getLanguage((_j = this.reduxData) !== null && _j !== void 0 ? _j : {}, this.userConfig));
|
|
3140
3179
|
this.setHtml(action.props.fieldKey, action.props.message);
|
|
3141
3180
|
break;
|
|
3142
3181
|
default:
|
|
@@ -3146,7 +3185,7 @@ export class KwikIDFormViewComponent {
|
|
|
3146
3185
|
}
|
|
3147
3186
|
}
|
|
3148
3187
|
/** @nocollapse */ KwikIDFormViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: KwikIDFormViewComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.KwikIDFormViewService }, { token: i2.KwikIDFormViewApiService }, { token: TuiPushService }, { token: TuiAlertService }, { token: TuiPreviewDialogService }, { token: TuiDialogService }, { token: i3.KwikUILoaderService }, { token: i4.KwikIDCameraRecordService }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
|
|
3149
|
-
/** @nocollapse */ KwikIDFormViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: KwikIDFormViewComponent, selector: "kwikid-form-view", inputs: { allFormsData: "allFormsData", extraData: "extraData", apiCallResponse: "apiCallResponse", buttonClickResponse: "buttonClickResponse", formConfig: "formConfig", formData: "formData", isMobileView: "isMobileView", popupFormCallback: "popupFormCallback", userConfig: "userConfig", stepConfig: "stepConfig", reduxData: "reduxData" }, outputs: { getLogs: "getLogs", getUnsavedDataState: "getUnsavedDataState", onActionShowPopupForm: "onActionShowPopupForm", onClickApiCall: "onClickApiCall", onClickViewFile: "onClickViewFile", onClickFormFieldButton: "onClickFormFieldButton", onClickGoBack: "onClickGoBack", onClickSaveForm: "onClickSaveForm", onClickViewForms: "onClickViewForms" }, providers: [KwikIDFormViewService, KwikIDFormViewApiService], viewQueries: [{ propertyName: "formFieldContainerRef", first: true, predicate: ["formFieldContainerRef"], descendants: true }, { propertyName: "dialog", first: true, predicate: ["dialog"], descendants: true }, { propertyName: "preview", first: true, predicate: ["preview"], descendants: true }, { propertyName: "formFieldsRef", predicate: ["formFieldsRef"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"kwikid-form-container\"\n *ngIf=\"!loading\"\n>\n <div\n id=\"uf-form-fields-header-container\"\n *ngIf=\"\n !formConfig.properties?.header?.title?.hidden ||\n !formConfig.properties?.header?.logo?.hidden ||\n !formConfig.properties?.header?.steps?.hidden ||\n !formConfig.properties?.header?.backButton?.hidden\n \"\n >\n <img\n id=\"uf-header-logo\"\n *ngIf=\"!formConfig.properties?.header?.logo?.hidden && isMobileView\"\n [src]=\"formConfig.properties?.header?.logo?.src\"\n [alt]=\"formConfig.properties?.header?.logo?.alt\"\n [style]=\"\n formConfig.properties?.header?.logo?.styles ?? '' | styleSanitizer\n \"\n />\n <div id=\"uf-form-fields-header-main\">\n <div id=\"uf-form-fields-header-left\">\n <kwikui-button\n *ngIf=\"\n !formConfig.properties?.header.backButton.hidden && isMobileView\n \"\n [disabled]=\"backButton.disabled\"\n [showLoader]=\"backButton.showLoader\"\n appearance=\"mono\"\n icon=\"tuiIconArrowLeft\"\n shape=\"rounded\"\n (onClick)=\"\n handleOnClickGoBack(\n $event,\n formConfig.properties?.header.backButton.mode\n )\n \"\n ></kwikui-button>\n </div>\n <div id=\"uf-form-fields-header-right\">\n <div\n id=\"uf-form-fields-title\"\n *ngIf=\"!formConfig.properties?.header.title.hidden\"\n >{{ formConfig.properties?.header.title.label }}</div\n >\n <div\n id=\"uf-form-fields-steps\"\n *ngIf=\"!formConfig.properties?.header.steps.hidden\"\n >\n Step {{ formConfig.sequenceNo }} of {{ formConfig.formsListLength }}\n </div>\n </div>\n </div>\n <hr\n *ngIf=\"\n !formConfig.properties?.header.title.hidden ||\n !formConfig.properties?.header.steps.hidden ||\n !formConfig.properties?.header.backButton.hidden\n \"\n />\n </div>\n <form\n #formFieldContainerRef\n class=\"kwikid-form show\"\n [style]=\"formConfig.properties?.main?.styles ?? '' | styleSanitizer\"\n [formGroup]=\"formGroup\"\n >\n <ng-container\n *ngFor=\"\n let field of formFields;\n let i = index;\n trackBy: getUniqueIdentifier\n \"\n >\n <ng-container [ngSwitch]=\"field.type\">\n <!-- HTML Content -->\n <ng-container *ngSwitchCase=\"'html'\">\n <div\n #formFieldsRef\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <div [innerHtml]=\"field.html | kwikuiSafeHtml\"></div>\n </div>\n </ng-container>\n <!-- Form Title -->\n <ng-container *ngSwitchCase=\"'title'\">\n <div\n #formFieldsRef\n class=\"title\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n [class.hidden]=\"field?.hidden\"\n id=\"field_{{ field.key }}\"\n >\n <div>\n {{ field.label }}\n </div>\n <kwikui-button\n *ngIf=\"field?.reset\"\n appearance=\"whiteblock\"\n size=\"s\"\n [label]=\"field?.properties?.resetButtonLabel ?? 'Reset'\"\n (onClick)=\"handleOnClickResetFormFields($event, field)\"\n ></kwikui-button>\n </div>\n </ng-container>\n <!-- Button -->\n <ng-container *ngSwitchCase=\"'button'\">\n <div\n #formFieldsRef\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-button\n [appearance]=\"field?.properties?.appearance ?? 'primary'\"\n [class]=\"field?.properties?.class\"\n [disabled]=\"field?.disabled\"\n [icon]=\"field?.properties?.icon\"\n [iconRight]=\"field?.properties?.iconRight\"\n [id]=\"field?.key\"\n [label]=\"field?.label\"\n [shape]=\"field?.properties?.shape\"\n [showLoader]=\"field?.properties?.loading ?? false\"\n [size]=\"field?.properties?.size\"\n [styles]=\"field?.properties?.styles\"\n [type]=\"'button'\"\n (onClick)=\"handleOnClickFormFieldButton(field)\"\n ></kwikui-button>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Input Text -->\n <ng-container *ngSwitchCase=\"'text'\">\n <div\n #formFieldsRef\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-input\n [case]=\"field?.properties?.case\"\n [disabled]=\"field?.disabled\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [isShowLabelOutside]=\"field?.properties?.isShowLabelOutside\"\n [label]=\"field?.label\"\n [placeholder]=\"field?.properties?.placeholder\"\n [postfix]=\"field?.properties?.postfix\"\n [prefix]=\"field?.properties?.prefix\"\n [properties]=\"field?.properties\"\n [type]=\"'text'\"\n [validators]=\"field?.validators\"\n (getKeyValue)=\"handleGetKeyValue($event)\"\n ></kwikui-input>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Input Currency -->\n <ng-container *ngSwitchCase=\"'currency'\">\n <div\n #formFieldsRef\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-input-currency\n [disabled]=\"field?.disabled\"\n [focus]=\"field?.focus\"\n [currencyType]=\"field?.properties?.currencyType\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [label]=\"field?.label\"\n [placeholder]=\"field?.properties?.placeholder\"\n [postfix]=\"field?.properties?.postfix\"\n [prefix]=\"field?.properties?.prefix\"\n [properties]=\"field?.properties\"\n [validators]=\"field?.validators\"\n [value]=\"formGroup.controls[field.key].value\"\n (getKeyValue)=\"handleGetKeyValue($event)\"\n ></kwikui-input-currency>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Email -->\n <ng-container *ngSwitchCase=\"'email'\">\n <div\n #formFieldsRef\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-input-email\n [case]=\"field?.properties?.case\"\n [disabled]=\"field?.disabled\"\n [domains]=\"field?.properties?.domains\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [label]=\"field?.label\"\n [placeholder]=\"field?.properties?.placeholder\"\n [postfix]=\"field?.properties?.postfix\"\n [prefix]=\"field?.properties?.prefix\"\n [properties]=\"field?.properties\"\n [validators]=\"field?.validators\"\n (getKeyValue)=\"handleGetKeyValue($event)\"\n ></kwikui-input-email>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Password -->\n <ng-container *ngSwitchCase=\"'password'\">\n <div\n #formFieldsRef\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-input-password\n [disabled]=\"field?.disabled\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [hintContent]=\"field?.properties?.hintContent\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [isShowLabelOutside]=\"field?.properties?.isShowLabelOutside\"\n [label]=\"field?.label\"\n [placeholder]=\"field?.properties?.placeholder\"\n [postfix]=\"field?.properties?.postfix\"\n [prefix]=\"field?.properties?.prefix\"\n [properties]=\"field?.properties\"\n [validators]=\"field?.validators\"\n (getKeyValue)=\"handleGetKeyValue($event)\"\n ></kwikui-input-password>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Textarea -->\n <ng-container *ngSwitchCase=\"'textarea'\">\n <div\n #formFieldsRef\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-textarea\n [disabled]=\"field?.disabled\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [label]=\"field?.label\"\n [placeholder]=\"field?.properties?.placeholder\"\n [properties]=\"field?.properties\"\n [validators]=\"field?.validators\"\n (getKeyValue)=\"handleGetKeyValue($event)\"\n ></kwikui-textarea>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Checkbox -->\n <ng-container *ngSwitchCase=\"'checkbox'\">\n <div\n #formFieldsRef\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-checkbox\n [contentAlign]=\"field?.properties?.contentAlign ?? 'left'\"\n [disabled]=\"field?.disabled\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [label]=\"field?.properties?.placeholder\"\n [placeholder]=\"field?.properties?.placeholder\"\n [properties]=\"field?.properties\"\n [size]=\"field?.properties?.size ?? 'l'\"\n [validators]=\"field?.validators\"\n [variant]=\"field?.properties?.variant ?? 'block'\"\n (getKeyValue)=\"handleGetKeyValue($event)\"\n ></kwikui-checkbox>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Input Number -->\n <ng-container *ngSwitchCase=\"'number'\">\n <div\n #formFieldsRef\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-input-number\n [decimal]=\"field?.properties?.decimal\"\n [disabled]=\"field?.disabled\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [isShowLabelOutside]=\"field?.properties?.isShowLabelOutside\"\n [label]=\"field?.label\"\n [max]=\"field?.properties?.max\"\n [min]=\"field?.properties?.min\"\n [placeholder]=\"field?.properties?.placeholder\"\n [postfix]=\"field?.properties?.postfix ?? ''\"\n [precision]=\"field?.properties?.precision\"\n [prefix]=\"field?.properties?.prefix ?? ''\"\n [properties]=\"field?.properties\"\n [validators]=\"field?.validators\"\n (getKeyValue)=\"handleGetKeyValue($event)\"\n ></kwikui-input-number>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Input Date -->\n <ng-container *ngSwitchCase=\"'date'\">\n <div\n #formFieldsRef\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-input-date\n [disabled]=\"field?.disabled\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [isShowLabelOutside]=\"field?.properties?.isShowLabelOutside\"\n [label]=\"field?.label\"\n [max]=\"field?.properties?.max\"\n [maxCalculatedFromToday]=\"\n field?.properties?.maxCalculatedFromToday\n \"\n [min]=\"field?.properties?.min\"\n [minCalculatedFromToday]=\"\n field?.properties?.minCalculatedFromToday\n \"\n [placeholder]=\"field?.properties?.placeholder\"\n [postfix]=\"field?.properties?.postfix\"\n [prefix]=\"field?.properties?.prefix\"\n [properties]=\"field?.properties\"\n [validators]=\"field?.validators\"\n (getKeyValue)=\"handleGetKeyValue($event)\"\n ></kwikui-input-date>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Input Time -->\n <ng-container *ngSwitchCase=\"'time'\">\n <div\n #formFieldsRef\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-input-time\n [disabled]=\"field?.disabled\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [isShowLabelOutside]=\"field?.properties?.isShowLabelOutside\"\n [items]=\"field?.properties?.items\"\n [label]=\"field?.label\"\n [mode]=\"field?.properties?.mode\"\n [placeholder]=\"field?.properties?.placeholder\"\n [postfix]=\"field?.properties?.postfix\"\n [prefix]=\"field?.properties?.prefix\"\n [properties]=\"field?.properties\"\n [validators]=\"field?.validators\"\n (getKeyValue)=\"handleGetKeyValue($event)\"\n ></kwikui-input-time>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Input Phone -->\n <ng-container *ngSwitchCase=\"'phone'\">\n <div\n #formFieldsRef\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-input-phone\n [countryCode]=\"field?.properties?.countryCode\"\n [disabled]=\"field?.disabled\"\n [isShowLabelOutside]=\"field?.properties?.isShowLabelOutside\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [label]=\"field?.label\"\n [phoneMaskAfterCountryCode]=\"\n field?.properties?.phoneMaskAfterCountryCode\n \"\n [placeholder]=\"field?.properties?.placeholder\"\n [postfix]=\"field?.properties?.postfix\"\n [prefix]=\"field?.properties?.prefix\"\n [properties]=\"field?.properties\"\n [removeCountryCodeFromValue]=\"\n field?.properties?.removeCountryCodeFromValue\n \"\n [validators]=\"field?.validators\"\n (getKeyValue)=\"handleGetKeyValue($event)\"\n ></kwikui-input-phone>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Input Radio -->\n <ng-container *ngSwitchCase=\"'radio'\">\n <div\n #formFieldsRef\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <label\n [tuiLabel]=\"labelTemplate\"\n style=\"min-height: auto; padding: 0px 0.5rem\"\n >\n <kwikui-input-radio\n [disabled]=\"field?.disabled\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [items]=\"field?.options\"\n [label]=\"field?.label\"\n [orientation]=\"field?.properties?.orientation\"\n [placeholder]=\"field?.properties?.placeholder\"\n [properties]=\"field?.properties\"\n [size]=\"field?.properties?.size\"\n [validators]=\"field?.validators\"\n (getKeyValue)=\"handleGetKeyValue($event)\"\n ></kwikui-input-radio>\n </label>\n <ng-template #labelTemplate>\n <p\n class=\"tui-space_bottom-2\"\n [hidden]=\"field?.hidden\"\n id=\"field_{{ field.key }}\"\n >\n <b>\n {{ field.label }}\n <span *ngIf=\"field.validators?.required\">*</span>\n </b>\n </p>\n </ng-template>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Dropdown -->\n <ng-container *ngSwitchCase=\"'select'\">\n <div\n #formFieldsRef\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-input-select\n [disabled]=\"field?.disabled\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [isShowLabelOutside]=\"field?.properties?.isShowLabelOutside\"\n [label]=\"field?.label\"\n [options]=\"field.options\"\n [placeholder]=\"field?.properties?.placeholder\"\n [properties]=\"field?.properties\"\n [searchable]=\"field?.properties?.searchable\"\n [validators]=\"field?.validators\"\n (getKeyValue)=\"handleGetKeyValue($event)\"\n ></kwikui-input-select>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Input Slider -->\n <ng-container *ngSwitchCase=\"'slider'\">\n <div\n #formFieldsRef\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-input-slider\n [disabled]=\"field?.disabled\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [isShowLabelOutside]=\"field?.properties?.isShowLabelOutside\"\n [label]=\"field?.label\"\n [max]=\"field?.properties?.max\"\n [min]=\"field?.properties?.min\"\n [placeholder]=\"field?.properties?.placeholder\"\n [postfix]=\"field?.properties?.postfix\"\n [prefix]=\"field?.properties?.prefix\"\n [properties]=\"field?.properties\"\n [quantum]=\"field?.properties?.quantum\"\n [size]=\"field?.properties?.size\"\n [steps]=\"field?.properties?.steps\"\n [validators]=\"field?.validators\"\n (getKeyValue)=\"handleGetKeyValue($event)\"\n ></kwikui-input-slider>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- API Call -->\n <ng-container *ngSwitchCase=\"'api'\">\n <div\n #formFieldsRef\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-button-api-call\n [apiStatus]=\"field?.api?.status?.value\"\n [apiTimer]=\"field?.api?.timer\"\n [class]=\"field?.class\"\n [disabled]=\"field?.disabled\"\n [id]=\"field.key\"\n [label]=\"field?.api?.status?.labels[field?.api?.status?.value]\"\n [showLoader]=\"field?.disabled === 'loading'\"\n [size]=\"field?.properties?.size\"\n [styles]=\"\n field?.properties?.styles\n ? field?.properties?.styles\n : 'width: fit-content'\n \"\n (onClick)=\"handleOnClickApiCall($event)\"\n (onApiTimerStop)=\"handleOnApiTimerStop($event)\"\n ></kwikui-button-api-call>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Live Location -->\n <ng-container *ngSwitchCase=\"'live-location'\">\n <div\n #formFieldsRef\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-button-live-location\n [class]=\"field?.class\"\n [disabled]=\"field?.disabled\"\n [id]=\"field.key\"\n [label]=\"field?.api?.status?.labels[field?.api?.status?.value]\"\n [liveLocationStatus]=\"field?.api?.status?.value\"\n [shape]=\"field?.properties?.shape\"\n [isShowLatLongCaptureTimestamp]=\"\n field?.properties?.isShowLatLongCaptureTimestamp\n \"\n [showLoader]=\"field?.disabled\"\n [size]=\"field?.properties?.size\"\n styles=\"width: fit-content\"\n (onClick)=\"handleOnClickLiveLocation($event)\"\n (onLocationPermission)=\"handleOnLocationPermission($event)\"\n ></kwikui-button-live-location>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Mobile OTP -->\n <ng-container *ngSwitchCase=\"'otp'\">\n <div\n #formFieldsRef\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-input-otp\n [disabled]=\"field?.disabled\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [label]=\"field?.label\"\n [mask]=\"field?.properties?.mask\"\n [mode]=\"field?.properties?.mode\"\n [otpLength]=\"field?.properties?.otpLength\"\n [placeholder]=\"field?.properties?.placeholder\"\n [properties]=\"field?.properties\"\n [size]=\"field?.properties?.size\"\n [validators]=\"field?.validators\"\n (getKeyValue)=\"handleGetKeyValue($event)\"\n ></kwikui-input-otp>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Aadhaar Number -->\n <ng-container *ngSwitchCase=\"'aadhaar-number'\">\n <div\n #formFieldsRef\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-input-aadhaar\n [disabled]=\"field?.disabled\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [label]=\"field?.label\"\n [mask]=\"field?.properties?.mask\"\n [placeholder]=\"field?.placeholder\"\n [properties]=\"field?.properties\"\n [validators]=\"field?.validators\"\n (getKeyValue)=\"handleGetKeyValue($event)\"\n ></kwikui-input-aadhaar>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Preview Image -->\n <ng-container *ngSwitchCase=\"'image'\">\n <div\n #formFieldsRef\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-image\n [altText]=\"field?.properties?.altText\"\n [class]=\"field?.properties?.class\"\n [html]=\"field?.properties?.html\"\n [id]=\"field.key\"\n [imageSrc]=\"formGroup.controls[field.key].value ?? ''\"\n [imageType]=\"field?.properties?.imageType\"\n [loadingType]=\"field?.properties?.loadingType\"\n [styles]=\"field?.properties?.styles\"\n ></kwikui-image>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- File Upload -->\n <ng-container *ngSwitchCase=\"'file'\">\n <div\n #formFieldsRef\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <label\n [tuiLabel]=\"labelTemplate\"\n style=\"min-height: auto\"\n >\n <kwikui-input-files\n [accept]=\"field?.properties?.accept\"\n [class]=\"field?.properties?.class\"\n [disabled]=\"field?.disabled\"\n [files]=\"files[field.key]\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [id]=\"field?.key\"\n [label]=\"field?.properties?.label\"\n [link]=\"field?.properties?.link\"\n [maxFileSize]=\"field?.properties?.maxFileSize\"\n [multiple]=\"field?.properties?.multiple\"\n [setFileTypesToForm]=\"['NORMAL']\"\n [styles]=\"field?.properties?.styles\"\n [validators]=\"field?.validators\"\n [showViewButton]=\"field?.properties?.showViewButton\"\n (getKeyValue)=\"handleGetKeyValueFile($event)\"\n (getRemovedFile)=\"handleRemovedFile($event)\"\n (getViewButtonClick)=\"handleViewButtonClick($event, field)\"\n ></kwikui-input-files>\n </label>\n <ng-template #labelTemplate>\n <p\n style=\"padding: 0px 0.25rem; margin-bottom: 0.25rem\"\n [hidden]=\"field?.hidden\"\n id=\"field_{{ field.key }}\"\n >\n <b>\n {{ field.label }}\n <span *ngIf=\"field.validators?.required\">*</span>\n </b>\n </p>\n </ng-template>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Camera Capture -->\n <ng-container *ngSwitchCase=\"'capture'\">\n <div\n #formFieldsRef\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <label\n *ngIf=\"\n field?.label !== '' &&\n field?.label !== undefined &&\n field?.label !== null\n \"\n style=\"min-height: auto\"\n >\n <p\n *ngIf=\"field?.label !== ''\"\n style=\"padding: 0px 0.25rem; margin-bottom: 0.5rem\"\n [hidden]=\"field?.hidden\"\n id=\"field_{{ field.key }}\"\n >\n <b>\n {{ field.label }}\n <span *ngIf=\"field.validators?.required\">*</span>\n </b>\n </p>\n </label>\n <kwikui-input-camera\n [buttonText]=\"field?.properties?.buttonText\"\n [disabled]=\"field?.disabled\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [icon]=\"field?.properties?.icon\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [mediaFiles]=\"\n mediaFiles[field.key] | filterImageUrlOrBase64FromObject\n \"\n [properties]=\"field?.properties\"\n [showMediaFiles]=\"field?.properties?.showMediaFiles\"\n [type]=\"'capture'\"\n [validators]=\"field?.validators\"\n (onClick)=\"handleOnClickInputCamera($event, field)\"\n (getRemovedFile)=\"handleOnClickGetRemovedMediaFile($event)\"\n ></kwikui-input-camera>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Camera Record -->\n <ng-container *ngSwitchCase=\"'record'\">\n <div\n #formFieldsRef\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <label\n *ngIf=\"\n field?.label !== '' &&\n field?.label !== undefined &&\n field?.label !== null\n \"\n style=\"min-height: auto\"\n >\n <p\n *ngIf=\"field?.label !== ''\"\n style=\"padding: 0px 0.25rem; margin-bottom: 0.5rem\"\n [hidden]=\"field?.hidden\"\n id=\"field_{{ field.key }}\"\n >\n <b>\n {{ field.label }}\n <span *ngIf=\"field.validators?.required\">*</span>\n </b>\n </p>\n </label>\n <kwikui-input-camera\n [buttonText]=\"field?.properties?.buttonText\"\n [disabled]=\"field?.disabled\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [icon]=\"field?.properties?.icon\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [mediaFiles]=\"\n mediaFiles[field.key] | filterVideoUrlOrBase64FromObject\n \"\n [properties]=\"field?.properties\"\n [showMediaFiles]=\"field?.properties?.showMediaFiles\"\n [type]=\"'record'\"\n [validators]=\"field?.validators\"\n (onClick)=\"handleOnClickInputCamera($event, field)\"\n (getRemovedFile)=\"handleOnClickGetRemovedMediaFile($event)\"\n ></kwikui-input-camera>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Star Rating -->\n <ng-container *ngSwitchCase=\"'star-rating'\">\n <div\n #formFieldsRef\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <label\n [tuiLabel]=\"labelTemplate\"\n style=\"min-height: auto; padding: 0px 0.5rem\"\n >\n <kwikui-star-rating\n [color]=\"field?.properties?.color\"\n [disabled]=\"field?.disabled\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [icon]=\"field?.properties?.icon\"\n [iconMarked]=\"field?.properties?.iconMarked\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [label]=\"field?.label\"\n [max]=\"field?.properties?.max\"\n [min]=\"field?.properties?.min\"\n [placeholder]=\"field?.properties?.placeholder\"\n [properties]=\"field?.properties\"\n [size]=\"field?.properties?.size\"\n [validators]=\"field?.validators\"\n (getKeyValue)=\"handleGetKeyValue($event)\"\n ></kwikui-star-rating>\n </label>\n <ng-template #labelTemplate>\n <p>\n <b\n >{{ field?.properties?.placeholder }}\n <span *ngIf=\"field.validators?.required\">*</span></b\n >\n </p>\n </ng-template>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n </ng-container>\n </ng-container>\n </form>\n <div\n class=\"kwikid-form-buttons\"\n *ngIf=\"\n !formConfig.properties.footer.viewFormsButton.hidden ||\n !formConfig.properties.footer.saveButton.hidden\n \"\n >\n <kwikui-button\n *ngIf=\"\n !formConfig.properties.footer.viewFormsButton.hidden && isMobileView\n \"\n [appearance]=\"'secondary'\"\n [disabled]=\"viewFormsButton.disabled\"\n [label]=\"formConfig.properties.footer.viewFormsButton.label\"\n [showLoader]=\"viewFormsButton.showLoader\"\n [styles]=\"formConfig.properties.footer.viewFormsButton.styles\"\n (onClick)=\"handleOnClickViewForms($event)\"\n ></kwikui-button>\n <kwikui-button\n *ngIf=\"!formConfig.properties.footer.saveButton.hidden\"\n [disabled]=\"saveFormButton.disabled\"\n [label]=\"formConfig.properties.footer.saveButton.label\"\n [showLoader]=\"saveFormButton.showLoader\"\n [styles]=\"formConfig.properties.footer.saveButton.styles\"\n (onClick)=\"handleOnClickSaveForm($event)\"\n ></kwikui-button>\n </div>\n</div>\n<div\n class=\"kwikid-form-container-loading\"\n *ngIf=\"loading\"\n>\n <div\n *ngFor=\"let item of [].constructor(7); let i = index\"\n class=\"large-wrapper tui-skeleton tui-skeleton_rounded\"\n >\n </div>\n</div>\n\n<kwikui-loader></kwikui-loader>\n\n<tui-push\n id=\"field-error-notification\"\n *tuiPush=\"showErrorNotification\"\n heading=\"Missing/Incorrect Fields!\"\n type=\"Error\"\n (close)=\"toggleErrorNotification(false)\"\n>\n <tui-svg\n src=\"tuiIconXCircle\"\n style=\"color: #fff !important\"\n >\n </tui-svg>\n</tui-push>\n\n<tui-push\n id=\"permission-error-notification\"\n *tuiPush=\"showPermissionErrorNotification\"\n heading=\"Please provide required permissions!\"\n type=\"Error\"\n (close)=\"togglePermissionErrorNotification(false)\"\n>\n <tui-svg\n src=\"tuiIconXCircle\"\n style=\"color: #fff !important\"\n >\n </tui-svg>\n</tui-push>\n\n<ng-template\n #preview\n let-preview\n>\n <tui-preview\n [rotatable]=\"false\"\n [zoomable]=\"false\"\n class=\"preview-container\"\n >\n <tui-preview-title *ngIf=\"previewProperties.title !== ''\">{{\n previewProperties.title\n }}</tui-preview-title>\n\n <ng-container *ngIf=\"!previewProperties.unavailable\">\n <div\n *ngIf=\"previewProperties?.html?.before !== ''\"\n class=\"preview-html preview-html-before\"\n [style]=\"previewProperties?.html?.beforeStyles ?? '' | styleSanitizer\"\n [innerHtml]=\"previewProperties.html.before | kwikuiSafeHtml\"\n ></div>\n\n <!-- Content within the iframe -->\n <div\n class=\"preview-iframe-content\"\n [style]=\"\n previewProperties?.iframe?.containerStyles ?? '' | styleSanitizer\n \"\n *ngIf=\"previewProperties.iframe.src !== ''\"\n >\n <!-- Your HTML content here -->\n <iframe\n [src]=\"previewProperties.iframe.src | kwikuiSafeUrl\"\n frameborder=\"0\"\n allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\"\n allowfullscreen\n [title]=\"previewProperties.iframe.title\"\n class=\"preview-iframe\"\n scrolling=\"auto\"\n ></iframe>\n </div>\n\n <div\n *ngIf=\"previewProperties?.html?.after !== ''\"\n class=\"preview-html preview-html-after\"\n [style]=\"previewProperties?.html?.afterStyles ?? '' | styleSanitizer\"\n [innerHtml]=\"previewProperties.html.after | kwikuiSafeHtml\"\n ></div>\n </ng-container>\n\n <ng-container *ngIf=\"previewProperties.unavailable\">\n <div class=\"preview-unavailable\">\n <tui-svg\n src=\"tuiIconFileLarge\"\n class=\"t-icon\"\n ></tui-svg>\n <div>Preview unavailable</div>\n </div>\n </ng-container>\n\n <button\n tuiIconButton\n tuiPreviewAction\n icon=\"tuiIconCloseLarge\"\n title=\"Close\"\n type=\"button\"\n (click)=\"preview.complete()\"\n ></button>\n </tui-preview>\n</ng-template>\n\n<ng-template\n #dialog\n let-dialog\n>\n <div class=\"preview-container\">\n <ng-container *ngIf=\"!previewProperties.unavailable\">\n <div\n *ngIf=\"previewProperties?.html?.before !== ''\"\n class=\"preview-html preview-html-before\"\n [style]=\"previewProperties?.html?.beforeStyles ?? '' | styleSanitizer\"\n [innerHtml]=\"previewProperties.html.before | kwikuiSafeHtml\"\n ></div>\n\n <!-- Content within the iframe -->\n <div\n class=\"preview-iframe-content\"\n [style]=\"\n previewProperties?.iframe?.containerStyles ?? '' | styleSanitizer\n \"\n *ngIf=\"previewProperties.iframe.src !== ''\"\n >\n <!-- Your HTML content here -->\n <iframe\n [src]=\"previewProperties.iframe.src | kwikuiSafeUrl\"\n frameborder=\"0\"\n allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\"\n allowfullscreen\n [title]=\"previewProperties.iframe.title\"\n class=\"preview-iframe\"\n scrolling=\"auto\"\n ></iframe>\n </div>\n\n <div\n *ngIf=\"previewProperties?.html?.after !== ''\"\n class=\"preview-html preview-html-after\"\n [style]=\"previewProperties?.html?.afterStyles ?? '' | styleSanitizer\"\n [innerHtml]=\"previewProperties.html.after | kwikuiSafeHtml\"\n ></div>\n </ng-container>\n\n <ng-container *ngIf=\"previewProperties.unavailable\">\n <div class=\"preview-unavailable\">\n <tui-svg\n src=\"tuiIconFileLarge\"\n class=\"t-icon\"\n ></tui-svg>\n <div>Preview unavailable</div>\n </div>\n </ng-container>\n </div>\n</ng-template>\n\n<div\n id=\"kwikid-camera-container\"\n *ngIf=\"isShowCamera\"\n>\n <div\n id=\"kwikid-camera-wrapper\"\n [class.fullscreen]=\"isShowCameraFullscreen\"\n >\n <kwikid-camera\n [type]=\"activeCameraType\"\n [data]=\"activeCameraData\"\n [image]=\"activeCameraImage\"\n [video]=\"activeCameraVideo\"\n [config]=\"activeCameraConfig?.cameraConfig\"\n (getImage)=\"handleGetCameraMedia($event, 'CAPTURE')\"\n (getVideo)=\"handleGetCameraMedia($event, 'RECORD')\"\n (onClickBack)=\"handleOnClickCameraBack($event)\"\n (onClickClose)=\"handleOnClickCameraClose($event)\"\n (onClickSave)=\"handleOnClickSaveCameraMedia($event, activeCameraType)\"\n >\n <ng-container\n *ngIf=\"activeCameraType === 'CAPTURE'\"\n slot=\"capture-header\"\n >\n <div class=\"capture-header-container\">\n <div class=\"capture-header-left\"> </div>\n <div class=\"capture-header-center\">\n <kwikui-button\n *ngIf=\"activeCameraConfig?.cameraConfig?.header?.title !== ''\"\n appearance=\"whiteblock\"\n [label]=\"activeCameraConfig?.cameraConfig?.header?.title\"\n shape=\"rounded\"\n size=\"s\"\n ></kwikui-button>\n </div>\n <div class=\"capture-header-right\">\n <kwikui-button\n *ngIf=\"activeCameraConfig?.cameraConfig?.header?.isExpand\"\n id=\"kwikid-camera-header-enlarge-button\"\n appearance=\"whiteblock\"\n [icon]=\"\n isShowCameraFullscreen ? 'tuiIconMinimize2' : 'tuiIconMaximize2'\n \"\n shape=\"rounded\"\n size=\"s\"\n (click)=\"isShowCameraFullscreen = !isShowCameraFullscreen\"\n ></kwikui-button>\n <kwikui-button\n *ngIf=\"activeCameraConfig?.cameraConfig?.header?.isClose\"\n id=\"kwikid-camera-header-close-button\"\n appearance=\"whiteblock\"\n icon=\"tuiIconCloseLarge\"\n shape=\"rounded\"\n size=\"s\"\n (click)=\"handleOnClickCameraClose($event)\"\n ></kwikui-button>\n </div>\n </div>\n </ng-container>\n <ng-container\n *ngIf=\"activeCameraType === 'RECORD'\"\n slot=\"record-header\"\n >\n <div class=\"record-header-container\">\n <div class=\"record-header-row row-1\">\n <div class=\"record-header-left\">\n <kwikui-button\n *ngIf=\"\n activeCameraConfig?.cameraConfig?.header?.isBack &&\n activeCameraRecordingState == 'NONE'\n \"\n appearance=\"whiteblock\"\n icon=\"tuiIconArrowLeft\"\n shape=\"rounded\"\n size=\"s\"\n (click)=\"handleOnClickCameraClose($event)\"\n ></kwikui-button>\n </div>\n <div class=\"record-header-center\">\n <kwikui-button\n *ngIf=\"activeCameraConfig?.cameraConfig?.header?.title !== ''\"\n appearance=\"whiteblock\"\n [label]=\"activeCameraConfig?.cameraConfig?.header?.title\"\n shape=\"rounded\"\n size=\"s\"\n ></kwikui-button>\n </div>\n <div class=\"record-header-right\">\n <kwikui-button\n *ngIf=\"activeCameraConfig?.cameraConfig?.header?.isExpand\"\n id=\"kwikid-camera-header-enlarge-button\"\n appearance=\"whiteblock\"\n [icon]=\"\n isShowCameraFullscreen\n ? 'tuiIconMinimize2'\n : 'tuiIconMaximize2'\n \"\n shape=\"rounded\"\n size=\"s\"\n (click)=\"isShowCameraFullscreen = !isShowCameraFullscreen\"\n ></kwikui-button>\n </div>\n </div>\n <div class=\"record-header-row row-2\">\n <div\n id=\"blinking-dot-container\"\n [class.recording]=\"activeCameraRecordingState == 'RECORDING'\"\n [class.paused]=\"activeCameraRecordingState == 'PAUSED'\"\n [class.recorded]=\"\n activeCameraRecordingState == 'NONE' ||\n activeCameraRecordingState === 'RECORDED'\n \"\n >\n <div\n *ngIf=\"activeCameraRecordingState == 'RECORDING'\"\n class=\"dot recording blink\"\n >\n </div>\n <div\n *ngIf=\"activeCameraRecordingState === 'PAUSED'\"\n class=\"dot paused\"\n >\n </div>\n <div\n *ngIf=\"\n activeCameraRecordingState == 'NONE' ||\n activeCameraRecordingState === 'RECORDED'\n \"\n class=\"dot recorded\"\n >\n </div>\n <div>\n {{ activeCameraRecordingTime | formatTimer }}\n <ng-container\n *ngIf=\"\n activeCameraConfig?.cameraConfig?.others\n ?.maxRecordingTimeInSeconds\n \"\n >\n /\n {{\n activeCameraConfig?.cameraConfig?.others\n ?.maxRecordingTimeInSeconds | formatTimer\n }}\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n </kwikid-camera>\n </div>\n</div>\n", styles: [".kwikid-form-container{width:100%;height:100%;margin:0 auto;display:flex;flex-direction:column;justify-content:flex-start;align-items:stretch;align-content:center}.kwikid-form.show{width:100%;height:100%;padding:1rem;overflow-y:auto;display:flex;flex-direction:column;align-content:center;justify-content:flex-start;align-items:stretch;scroll-behavior:smooth}.kwikid-form.show>*:not(:last-child){margin-bottom:1rem}.kwikid-form-buttons{width:100%;bottom:0px;padding:1rem;display:flex;flex-direction:row;align-content:center;justify-content:center;align-items:center}.kwikid-form-buttons>*:not(:last-child){margin-right:1rem}.kwikid-form-buttons *{flex-grow:1}#uf-form-fields-header-container{display:flex;flex-direction:column;align-content:center;justify-content:center;align-items:flex-start;padding:1rem 1rem 0}#uf-form-fields-header-container>*:not(:last-child){margin-bottom:.5rem}#uf-form-fields-header-container #uf-header-logo{width:-moz-fit-content;width:fit-content;height:50px}#uf-form-fields-header-container #uf-form-fields-header-main{display:flex;flex-direction:row;align-content:center;justify-content:flex-start;align-items:center;width:100%}#uf-form-fields-header-container #uf-form-fields-header-main>*:not(:last-child){margin-right:.25rem}#uf-form-fields-header-container #uf-form-fields-header-main #uf-form-fields-header-right{display:flex;flex-direction:column;align-content:center;justify-content:center;align-items:flex-start}#uf-form-fields-header-container #uf-form-fields-header-main #uf-form-fields-header-right>*{margin-bottom:.5rem}#uf-form-fields-header-container hr{width:100%}#uf-form-fields-title{color:#000;font-size:1.75em;font-weight:bold}#uf-form-fields-steps{color:var(--color-on-secondary-container);font-size:1rem}.title{border-left:.25rem solid var(--tui-primary);padding:.75rem;font-size:1.4em;font-weight:bold;background-color:var(--tui-secondary);display:flex;flex-direction:row;align-content:center;justify-content:space-between;align-items:center}.title>*:not(:last-child){margin-right:.5rem}.title:not(:first-child){margin-top:.5rem}.title.hidden{display:none}.large-wrapper{width:100%;height:60px}.large-wrapper:first-child{margin-bottom:auto}.large-wrapper:last-child{margin-top:auto}.kwikid-form-container-loading{width:100%;height:100%;margin:0 auto;display:flex;flex-direction:column;justify-content:flex-start;align-items:stretch;align-content:center;padding:1rem}.kwikid-form-container-loading>* :not(:last-child){margin-bottom:1rem}#field-error-notification,#permission-error-notification{background-color:var(--tui-error-fill);color:#fff!important}#field-error-notification .t-top,#permission-error-notification .t-top{color:#fff!important}#field-error-notification .t-close,#permission-error-notification .t-close{color:#fff!important}.preview-container{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;align-content:center;height:calc(100vh - 3rem)}@media only screen and (min-width: 768px){.preview-container{height:calc(100vh - 10rem);width:calc(100vw - 10rem)}}.preview-container>*:not(:last-child){margin-bottom:1rem}.preview-container .preview-html{flex-grow:1}.preview-container .preview-iframe-content{height:100%;flex-grow:1}.preview-container .preview-iframe-content .preview-iframe{width:100%;height:100%}.preview-container .preview-unavailable{display:flex;flex-direction:column;align-content:center;justify-content:center;align-items:center;color:#fff;font-size:1.2rem;top:50%;left:50%;width:100%;height:100vh}.preview-container .preview-unavailable>*:not(:last-child){margin-bottom:1rem}#kwikid-camera-container{width:100%;height:100%;position:fixed;top:50%;left:50%;background-color:#0000008f;transform:translate(-50%,-50%);z-index:100}#kwikid-camera-container #kwikid-camera-wrapper{width:min(80%);height:max(85%);box-shadow:#0000008f 0 22px 70px 4px;overflow:hidden;position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);border-radius:1rem;background-color:#000;transition:5s linear ease}#kwikid-camera-container #kwikid-camera-wrapper .capture-header-container{display:flex;width:100%;max-width:100%;padding:0}#kwikid-camera-container #kwikid-camera-wrapper .capture-header-container .capture-header-left{flex:1;text-align:left}#kwikid-camera-container #kwikid-camera-wrapper .capture-header-container .capture-header-center{flex:1;width:100%;min-width:max-content;text-align:center;margin:auto}#kwikid-camera-container #kwikid-camera-wrapper .capture-header-container .capture-header-right{flex:1;text-align:right;display:flex;justify-content:flex-end;grid-gap:1rem;gap:1rem}#kwikid-camera-container #kwikid-camera-wrapper .record-header-container{display:flex;width:100%;max-width:100%;padding:0;color:#fff;flex-direction:column;justify-content:flex-start;align-items:stretch}#kwikid-camera-container #kwikid-camera-wrapper .record-header-container .record-header-row.row-1{display:flex;flex-direction:row;justify-content:space-between;align-items:center;margin-bottom:1rem}#kwikid-camera-container #kwikid-camera-wrapper .record-header-container .record-header-row.row-1 .record-header-left{flex:1;display:flex;justify-content:flex-start;grid-gap:1rem;gap:1rem;text-align:left}#kwikid-camera-container #kwikid-camera-wrapper .record-header-container .record-header-row.row-1 .record-header-center{flex:1;width:100%;min-width:max-content;text-align:center;margin:auto}#kwikid-camera-container #kwikid-camera-wrapper .record-header-container .record-header-row.row-1 .record-header-right{flex:1;text-align:right;display:flex;justify-content:flex-end;grid-gap:1rem;gap:1rem}#kwikid-camera-container #kwikid-camera-wrapper .record-header-container .record-header-row.row-2{display:flex;flex-direction:row;justify-content:center;align-items:center}#kwikid-camera-container #kwikid-camera-wrapper .record-header-container .record-header-row.row-2 #blinking-dot-container{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;grid-gap:.25rem;gap:.25rem;padding:.35rem .6rem;width:-moz-fit-content;width:fit-content;border-radius:2rem;background-color:#f5f5f5}#kwikid-camera-container #kwikid-camera-wrapper .record-header-container .record-header-row.row-2 #blinking-dot-container.recording{color:red;font-weight:bold}#kwikid-camera-container #kwikid-camera-wrapper .record-header-container .record-header-row.row-2 #blinking-dot-container.paused{color:#525252;font-weight:bold}#kwikid-camera-container #kwikid-camera-wrapper .record-header-container .record-header-row.row-2 #blinking-dot-container.recorded{color:#000;font-weight:bold}#kwikid-camera-container #kwikid-camera-wrapper .record-header-container .record-header-row.row-2 #blinking-dot-container .dot{display:inline-block;width:.75rem;height:.75rem;border-radius:100%}#kwikid-camera-container #kwikid-camera-wrapper .record-header-container .record-header-row.row-2 #blinking-dot-container .dot.recording{background-color:red;box-shadow:0 0 5px -1px red}#kwikid-camera-container #kwikid-camera-wrapper .record-header-container .record-header-row.row-2 #blinking-dot-container .dot.paused{background-color:#525252;box-shadow:0 0 5px -1px #000}#kwikid-camera-container #kwikid-camera-wrapper .record-header-container .record-header-row.row-2 #blinking-dot-container .dot.recorded{background-color:#000;box-shadow:0 0 5px -1px #000}#kwikid-camera-container #kwikid-camera-wrapper .record-header-container .record-header-row.row-2 #blinking-dot-container .dot.blink{animation:blinker 1s cubic-bezier(.5,0,1,1) infinite alternate}@keyframes blinker{0%{opacity:1}to{opacity:0}}#kwikid-camera-container #kwikid-camera-wrapper.fullscreen{width:100%;height:100%;border-radius:0;transition:5s linear ease}@media only screen and (max-width: 600px){#kwikid-camera-container #kwikid-camera-wrapper{width:100%;height:100%;border-radius:0;transition:5s linear ease}#kwikid-camera-container #kwikid-camera-wrapper #kwikid-camera-header-enlarge-button{display:none}}\n", "::-webkit-scrollbar{width:8px}::-webkit-scrollbar-track{border-radius:10px}::-webkit-scrollbar-thumb{background:lightgray;border-radius:10px}::-webkit-scrollbar-thumb:hover{background:gray}\n"], components: [{ type: i3.KwikUIButtonComponent, selector: "kwikui-button", inputs: ["appearance", "class", "disabled", "icon", "iconRight", "id", "label", "shape", "showLoader", "size", "styles", "type", "pseudoHover"], outputs: ["onClick"] }, { type: i3.KwikUIMessagesComponent, selector: "kwikui-messages", inputs: ["id", "messages"] }, { type: i3.KwikUIInputComponent, selector: "kwikui-input", inputs: ["case", "disabled", "focus", "formControl", "formControlName", "hintContent", "icon", "id", "invalid", "isShowLabelOutside", "label", "placeholder", "postfix", "prefix", "properties", "size", "type", "validators"], outputs: ["getKeyValue"] }, { type: i3.KwikUIInputCurrencyComponent, selector: "kwikui-input-currency", inputs: ["currencyType", "disabled", "focus", "formControl", "formControlName", "hintContent", "icon", "id", "invalid", "label", "placeholder", "postfix", "prefix", "properties", "size", "validators", "value"], outputs: ["getKeyValue"] }, { type: i3.KwikUIInputEmailComponent, selector: "kwikui-input-email", inputs: ["case", "disabled", "domains", "focus", "formControl", "formControlName", "hintContent", "icon", "id", "invalid", "label", "placeholder", "postfix", "prefix", "properties", "size", "validators"], outputs: ["getKeyValue"] }, { type: i3.KwikUIInputPasswordComponent, selector: "kwikui-input-password", inputs: ["disabled", "focus", "formControl", "formControlName", "hintContent", "icon", "id", "invalid", "isShowLabelOutside", "label", "placeholder", "postfix", "prefix", "properties", "size", "validators"], outputs: ["getKeyValue"] }, { type: i3.KwikUITextareaComponent, selector: "kwikui-textarea", inputs: ["disabled", "focus", "formControl", "formControlName", "id", "invalid", "isShowLabelOutside", "label", "placeholder", "properties", "size", "validators"], outputs: ["getKeyValue"] }, { type: i3.KwikUICheckboxComponent, selector: "kwikui-checkbox", inputs: ["contentAlign", "disabled", "focus", "formControl", "formControlName", "id", "invalid", "label", "placeholder", "properties", "size", "validators", "variant"], outputs: ["getKeyValue"] }, { type: i3.KwikUIInputNumberComponent, selector: "kwikui-input-number", inputs: ["decimal", "disabled", "focus", "formControl", "formControlName", "hintContent", "icon", "id", "invalid", "isShowLabelOutside", "label", "max", "min", "placeholder", "postfix", "precision", "prefix", "properties", "size", "validators"], outputs: ["getKeyValue"] }, { type: i3.KwikUIInputDateComponent, selector: "kwikui-input-date", inputs: ["disabled", "focus", "formControl", "formControlName", "hintContent", "icon", "id", "invalid", "isShowLabelOutside", "label", "max", "maxCalculatedFromToday", "min", "minCalculatedFromToday", "placeholder", "postfix", "prefix", "properties", "size", "validators"], outputs: ["getKeyValue"] }, { type: i3.KwikUIInputTimeComponent, selector: "kwikui-input-time", inputs: ["disabled", "focus", "formControl", "formControlName", "hintContent", "icon", "id", "items", "invalid", "isShowLabelOutside", "label", "mode", "placeholder", "postfix", "prefix", "properties", "size", "validators"], outputs: ["getKeyValue"] }, { type: i3.KwikUIInputPhoneComponent, selector: "kwikui-input-phone", inputs: ["countryCode", "disabled", "focus", "formControl", "formControlName", "hintContent", "icon", "id", "invalid", "isShowLabelOutside", "label", "phoneMaskAfterCountryCode", "placeholder", "postfix", "prefix", "properties", "removeCountryCodeFromValue", "size", "validators"], outputs: ["getKeyValue"] }, { type: i5.TuiLabelComponent, selector: "label[tuiLabel]", inputs: ["tuiLabel", "context"] }, { type: i3.KwikUIInputRadioComponent, selector: "kwikui-input-radio", inputs: ["disabled", "focus", "formControl", "formControlName", "id", "invalid", "items", "label", "orientation", "placeholder", "properties", "size", "validators"], outputs: ["getKeyValue"] }, { type: i3.KwikUIInputSelectComponent, selector: "kwikui-input-select", inputs: ["disabled", "focus", "formControl", "formControlName", "hintContent", "icon", "id", "invalid", "isShowLabelOutside", "label", "options", "placeholder", "properties", "searchable", "size", "validators"], outputs: ["getKeyValue"] }, { type: i3.KwikUIInputSliderComponent, selector: "kwikui-input-slider", inputs: ["disabled", "focus", "formControl", "formControlName", "hintContent", "icon", "id", "invalid", "isShowLabelOutside", "label", "max", "min", "placeholder", "postfix", "prefix", "properties", "quantum", "size", "steps", "type", "validators"], outputs: ["getKeyValue"] }, { type: i3.KwikUIButtonApiCallComponent, selector: "kwikui-button-api-call", inputs: ["apiTimer", "apiStatus", "class", "disabled", "id", "label", "shape", "showLoader", "size", "styles"], outputs: ["onClick", "onApiTimerStop"] }, { type: i3.KwikUIButtonLiveLocationComponent, selector: "kwikui-button-live-location", inputs: ["liveLocationStatus", "class", "disabled", "id", "label", "shape", "showLoader", "size", "styles", "isShowLatLongCaptureTimestamp"], outputs: ["onClick", "onLocationPermission"] }, { type: i3.KwikUIInputOtpComponent, selector: "kwikui-input-otp", inputs: ["disabled", "focus", "formControl", "formControlName", "id", "invalid", "label", "mask", "mode", "otpLength", "placeholder", "postfix", "prefix", "properties", "size", "validators"], outputs: ["getKeyValue"] }, { type: i3.KwikUIInputAadhaarComponent, selector: "kwikui-input-aadhaar", inputs: ["disabled", "focus", "formControl", "formControlName", "id", "invalid", "label", "mask", "placeholder", "properties", "validators"], outputs: ["getKeyValue"] }, { type: i3.KwikUIImageComponent, selector: "kwikui-image", inputs: ["altText", "class", "html", "id", "imageSrc", "imageType", "loadingType", "styles"], outputs: ["onClick"] }, { type: i3.KwikUIInputFilesComponent, selector: "kwikui-input-files", inputs: ["accept", "class", "disabled", "files", "formControl", "formControlName", "icon", "id", "label", "link", "maxFileSize", "multiple", "setFileTypesToForm", "showAddedFiles", "size", "styles", "validators", "variant", "showViewButton"], outputs: ["getKeyValue", "getRemovedFile", "getViewButtonClick"] }, { type: i4.KwikUIInputCameraComponent, selector: "kwikui-input-camera", inputs: ["buttonText", "disabled", "focus", "formControl", "formControlName", "icon", "id", "invalid", "mediaFiles", "properties", "showMediaFiles", "size", "type", "validators"], outputs: ["onClick", "getRemovedFile"] }, { type: i3.KwikUIStarRatingComponent, selector: "kwikui-star-rating", inputs: ["color", "disabled", "focus", "formControl", "formControlName", "icon", "iconMarked", "id", "invalid", "label", "max", "min", "placeholder", "properties", "size", "validators"], outputs: ["getKeyValue"] }, { type: i3.KwikUILoaderComponent, selector: "kwikui-loader" }, { type: i6.TuiPushComponent, selector: "tui-push", inputs: ["heading", "type", "lines", "timestamp"], outputs: ["close"] }, { type: i5.TuiSvgComponent, selector: "tui-svg", inputs: ["src"] }, { type: i7.TuiPreviewComponent, selector: "tui-preview", inputs: ["zoomable", "rotatable"] }, { type: i7.TuiPreviewTitleComponent, selector: "tui-preview-title" }, { type: i5.TuiButtonComponent, selector: "button[tuiButton], button[tuiIconButton], a[tuiButton], a[tuiIconButton]", inputs: ["appearance", "disabled", "icon", "iconRight", "shape", "showLoader", "size"] }, { type: i4.KwikIDCameraComponent, selector: "kwikid-camera", inputs: ["type", "config", "data", "image", "video"], outputs: ["getImage", "onClickSave", "getVideo"] }], directives: [{ type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i9.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i9.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i8.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i8.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i9.FormControlDirective, selector: "[formControl]", inputs: ["disabled", "formControl", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i9.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }, { type: i6.TuiPushAlertDirective, selector: "[tuiPush]", inputs: ["tuiPush"] }, { type: i6.TuiPushDirective, selector: "tui-push" }, { type: i7.TuiPreviewActionDirective, selector: "[tuiPreviewAction]" }], pipes: { "styleSanitizer": i10.StyleSanitizerPipe, "kwikuiSafeHtml": i3.KwikUISafeHtmlPipe, "filterImageUrlOrBase64FromObject": i11.FilterImageUrlOrBase64FromObjectPipe, "filterVideoUrlOrBase64FromObject": i12.FilterVideoUrlOrBase64FromObjectPipe, "kwikuiSafeUrl": i3.KwikUISafeUrlPipe, "formatTimer": i13.TimerPipe } });
|
|
3188
|
+
/** @nocollapse */ KwikIDFormViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: KwikIDFormViewComponent, selector: "kwikid-form-view", inputs: { allFormsData: "allFormsData", extraData: "extraData", apiCallResponse: "apiCallResponse", buttonClickResponse: "buttonClickResponse", formConfig: "formConfig", formData: "formData", isMobileView: "isMobileView", popupFormCallback: "popupFormCallback", userConfig: "userConfig", stepConfig: "stepConfig", reduxData: "reduxData" }, outputs: { getLogs: "getLogs", getUnsavedDataState: "getUnsavedDataState", onActionShowPopupForm: "onActionShowPopupForm", onClickApiCall: "onClickApiCall", onClickViewFile: "onClickViewFile", onClickFormFieldButton: "onClickFormFieldButton", onClickGoBack: "onClickGoBack", onClickSaveForm: "onClickSaveForm", onClickViewForms: "onClickViewForms" }, providers: [KwikIDFormViewService, KwikIDFormViewApiService], viewQueries: [{ propertyName: "formFieldContainerRef", first: true, predicate: ["formFieldContainerRef"], descendants: true }, { propertyName: "dialog", first: true, predicate: ["dialog"], descendants: true }, { propertyName: "preview", first: true, predicate: ["preview"], descendants: true }, { propertyName: "formFieldsRef", predicate: ["formFieldsRef"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"kwikid-form-container\"\n *ngIf=\"!loading\"\n>\n <div\n id=\"uf-form-fields-header-container\"\n *ngIf=\"\n !formConfig.properties?.header?.title?.hidden ||\n !formConfig.properties?.header?.logo?.hidden ||\n !formConfig.properties?.header?.steps?.hidden ||\n !formConfig.properties?.header?.backButton?.hidden\n \"\n >\n <img\n id=\"uf-header-logo\"\n *ngIf=\"!formConfig.properties?.header?.logo?.hidden && isMobileView\"\n [src]=\"formConfig.properties?.header?.logo?.src\"\n [alt]=\"formConfig.properties?.header?.logo?.alt\"\n [style]=\"\n formConfig.properties?.header?.logo?.styles ?? '' | styleSanitizer\n \"\n />\n <div id=\"uf-form-fields-header-main\">\n <div id=\"uf-form-fields-header-left\">\n <kwikui-button\n *ngIf=\"\n !formConfig.properties?.header.backButton.hidden && isMobileView\n \"\n [disabled]=\"backButton.disabled\"\n [showLoader]=\"backButton.showLoader\"\n appearance=\"mono\"\n icon=\"tuiIconArrowLeft\"\n shape=\"rounded\"\n (onClick)=\"\n handleOnClickGoBack(\n $event,\n formConfig.properties?.header.backButton.mode\n )\n \"\n ></kwikui-button>\n </div>\n <div id=\"uf-form-fields-header-right\">\n <div\n id=\"uf-form-fields-title\"\n *ngIf=\"!formConfig.properties?.header.title.hidden\"\n >{{ formConfig.properties?.header.title.label }}</div\n >\n <div\n id=\"uf-form-fields-steps\"\n *ngIf=\"!formConfig.properties?.header.steps.hidden\"\n >\n Step {{ formConfig.sequenceNo }} of {{ formConfig.formsListLength }}\n </div>\n </div>\n </div>\n <hr\n *ngIf=\"\n !formConfig.properties?.header.title.hidden ||\n !formConfig.properties?.header.steps.hidden ||\n !formConfig.properties?.header.backButton.hidden\n \"\n />\n </div>\n <form\n #formFieldContainerRef\n class=\"kwikid-form show\"\n [style]=\"formConfig.properties?.main?.styles ?? '' | styleSanitizer\"\n [formGroup]=\"formGroup\"\n >\n <ng-container\n *ngFor=\"\n let field of formFields;\n let i = index;\n trackBy: getUniqueIdentifier\n \"\n >\n <ng-container [ngSwitch]=\"field.type\">\n <!-- HTML Content -->\n <ng-container *ngSwitchCase=\"'html'\">\n <div\n #formFieldsRef\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <div [innerHtml]=\"field.html | kwikuiSafeHtml\"></div>\n </div>\n </ng-container>\n <!-- Form Title -->\n <ng-container *ngSwitchCase=\"'title'\">\n <div\n #formFieldsRef\n class=\"title\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n [class.hidden]=\"field?.hidden\"\n id=\"field_{{ field.key }}\"\n >\n <div>\n {{ field.label }}\n </div>\n <kwikui-button\n *ngIf=\"field?.reset\"\n appearance=\"whiteblock\"\n size=\"s\"\n [label]=\"field?.properties?.resetButtonLabel ?? 'Reset'\"\n (onClick)=\"handleOnClickResetFormFields($event, field)\"\n ></kwikui-button>\n </div>\n </ng-container>\n <!-- Button -->\n <ng-container *ngSwitchCase=\"'button'\">\n <div\n #formFieldsRef\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-button\n [appearance]=\"field?.properties?.appearance ?? 'primary'\"\n [class]=\"field?.properties?.class\"\n [disabled]=\"field?.disabled\"\n [icon]=\"field?.properties?.icon\"\n [iconRight]=\"field?.properties?.iconRight\"\n [id]=\"field?.key\"\n [label]=\"field?.label\"\n [shape]=\"field?.properties?.shape\"\n [showLoader]=\"field?.properties?.loading ?? false\"\n [size]=\"field?.properties?.size\"\n [styles]=\"field?.properties?.styles\"\n [type]=\"'button'\"\n (onClick)=\"handleOnClickFormFieldButton(field)\"\n ></kwikui-button>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Input Text -->\n <ng-container *ngSwitchCase=\"'text'\">\n <div\n #formFieldsRef\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-input\n [case]=\"field?.properties?.case\"\n [disabled]=\"field?.disabled\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [isShowLabelOutside]=\"field?.properties?.isShowLabelOutside\"\n [label]=\"field?.label\"\n [placeholder]=\"field?.properties?.placeholder\"\n [postfix]=\"field?.properties?.postfix\"\n [prefix]=\"field?.properties?.prefix\"\n [properties]=\"field?.properties\"\n [type]=\"'text'\"\n [validators]=\"field?.validators\"\n (getKeyValue)=\"handleGetKeyValue($event)\"\n ></kwikui-input>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Input Currency -->\n <ng-container *ngSwitchCase=\"'currency'\">\n <div\n #formFieldsRef\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-input-currency\n [disabled]=\"field?.disabled\"\n [focus]=\"field?.focus\"\n [currencyType]=\"field?.properties?.currencyType\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [label]=\"field?.label\"\n [placeholder]=\"field?.properties?.placeholder\"\n [postfix]=\"field?.properties?.postfix\"\n [prefix]=\"field?.properties?.prefix\"\n [properties]=\"field?.properties\"\n [validators]=\"field?.validators\"\n [value]=\"formGroup.controls[field.key].value\"\n (getKeyValue)=\"handleGetKeyValue($event)\"\n ></kwikui-input-currency>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Email -->\n <ng-container *ngSwitchCase=\"'email'\">\n <div\n #formFieldsRef\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-input-email\n [case]=\"field?.properties?.case\"\n [disabled]=\"field?.disabled\"\n [domains]=\"field?.properties?.domains\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [label]=\"field?.label\"\n [placeholder]=\"field?.properties?.placeholder\"\n [postfix]=\"field?.properties?.postfix\"\n [prefix]=\"field?.properties?.prefix\"\n [properties]=\"field?.properties\"\n [validators]=\"field?.validators\"\n (getKeyValue)=\"handleGetKeyValue($event)\"\n ></kwikui-input-email>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Password -->\n <ng-container *ngSwitchCase=\"'password'\">\n <div\n #formFieldsRef\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-input-password\n [disabled]=\"field?.disabled\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [hintContent]=\"field?.properties?.hintContent\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [isShowLabelOutside]=\"field?.properties?.isShowLabelOutside\"\n [label]=\"field?.label\"\n [placeholder]=\"field?.properties?.placeholder\"\n [postfix]=\"field?.properties?.postfix\"\n [prefix]=\"field?.properties?.prefix\"\n [properties]=\"field?.properties\"\n [validators]=\"field?.validators\"\n (getKeyValue)=\"handleGetKeyValue($event)\"\n ></kwikui-input-password>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Textarea -->\n <ng-container *ngSwitchCase=\"'textarea'\">\n <div\n #formFieldsRef\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-textarea\n [disabled]=\"field?.disabled\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [label]=\"field?.label\"\n [placeholder]=\"field?.properties?.placeholder\"\n [properties]=\"field?.properties\"\n [validators]=\"field?.validators\"\n (getKeyValue)=\"handleGetKeyValue($event)\"\n ></kwikui-textarea>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Checkbox -->\n <ng-container *ngSwitchCase=\"'checkbox'\">\n <div\n #formFieldsRef\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-checkbox\n [contentAlign]=\"field?.properties?.contentAlign ?? 'left'\"\n [disabled]=\"field?.disabled\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [label]=\"field?.properties?.placeholder\"\n [placeholder]=\"field?.properties?.placeholder\"\n [properties]=\"field?.properties\"\n [size]=\"field?.properties?.size ?? 'l'\"\n [validators]=\"field?.validators\"\n [variant]=\"field?.properties?.variant ?? 'block'\"\n (getKeyValue)=\"handleGetKeyValue($event)\"\n ></kwikui-checkbox>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Input Number -->\n <ng-container *ngSwitchCase=\"'number'\">\n <div\n #formFieldsRef\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-input-number\n [decimal]=\"field?.properties?.decimal\"\n [disabled]=\"field?.disabled\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [isShowLabelOutside]=\"field?.properties?.isShowLabelOutside\"\n [label]=\"field?.label\"\n [max]=\"field?.properties?.max\"\n [min]=\"field?.properties?.min\"\n [placeholder]=\"field?.properties?.placeholder\"\n [postfix]=\"field?.properties?.postfix ?? ''\"\n [precision]=\"field?.properties?.precision\"\n [prefix]=\"field?.properties?.prefix ?? ''\"\n [properties]=\"field?.properties\"\n [validators]=\"field?.validators\"\n (getKeyValue)=\"handleGetKeyValue($event)\"\n ></kwikui-input-number>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Input Date -->\n <ng-container *ngSwitchCase=\"'date'\">\n <div\n #formFieldsRef\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-input-date\n [disabled]=\"field?.disabled\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [isShowLabelOutside]=\"field?.properties?.isShowLabelOutside\"\n [label]=\"field?.label\"\n [max]=\"field?.properties?.max\"\n [maxCalculatedFromToday]=\"\n field?.properties?.maxCalculatedFromToday\n \"\n [min]=\"field?.properties?.min\"\n [minCalculatedFromToday]=\"\n field?.properties?.minCalculatedFromToday\n \"\n [placeholder]=\"field?.properties?.placeholder\"\n [postfix]=\"field?.properties?.postfix\"\n [prefix]=\"field?.properties?.prefix\"\n [properties]=\"field?.properties\"\n [validators]=\"field?.validators\"\n (getKeyValue)=\"handleGetKeyValue($event)\"\n ></kwikui-input-date>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Input Time -->\n <ng-container *ngSwitchCase=\"'time'\">\n <div\n #formFieldsRef\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-input-time\n [disabled]=\"field?.disabled\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [isShowLabelOutside]=\"field?.properties?.isShowLabelOutside\"\n [items]=\"field?.properties?.items\"\n [label]=\"field?.label\"\n [mode]=\"field?.properties?.mode\"\n [placeholder]=\"field?.properties?.placeholder\"\n [postfix]=\"field?.properties?.postfix\"\n [prefix]=\"field?.properties?.prefix\"\n [properties]=\"field?.properties\"\n [validators]=\"field?.validators\"\n (getKeyValue)=\"handleGetKeyValue($event)\"\n ></kwikui-input-time>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Input Phone -->\n <ng-container *ngSwitchCase=\"'phone'\">\n <div\n #formFieldsRef\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-input-phone\n [countryCode]=\"field?.properties?.countryCode\"\n [disabled]=\"field?.disabled\"\n [isShowLabelOutside]=\"field?.properties?.isShowLabelOutside\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [label]=\"field?.label\"\n [phoneMaskAfterCountryCode]=\"\n field?.properties?.phoneMaskAfterCountryCode\n \"\n [placeholder]=\"field?.properties?.placeholder\"\n [postfix]=\"field?.properties?.postfix\"\n [prefix]=\"field?.properties?.prefix\"\n [properties]=\"field?.properties\"\n [removeCountryCodeFromValue]=\"\n field?.properties?.removeCountryCodeFromValue\n \"\n [validators]=\"field?.validators\"\n (getKeyValue)=\"handleGetKeyValue($event)\"\n ></kwikui-input-phone>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Input Radio -->\n <ng-container *ngSwitchCase=\"'radio'\">\n <div\n #formFieldsRef\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <label\n [tuiLabel]=\"labelTemplate\"\n style=\"min-height: auto; padding: 0px 0.5rem\"\n >\n <kwikui-input-radio\n [disabled]=\"field?.disabled\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [items]=\"field?.options\"\n [label]=\"field?.label\"\n [orientation]=\"field?.properties?.orientation\"\n [placeholder]=\"field?.properties?.placeholder\"\n [properties]=\"field?.properties\"\n [size]=\"field?.properties?.size\"\n [validators]=\"field?.validators\"\n (getKeyValue)=\"handleGetKeyValue($event)\"\n ></kwikui-input-radio>\n </label>\n <ng-template #labelTemplate>\n <p\n class=\"tui-space_bottom-2\"\n [hidden]=\"field?.hidden\"\n id=\"field_{{ field.key }}\"\n >\n <b>\n {{ field.label }}\n <span *ngIf=\"field.validators?.required\">*</span>\n </b>\n </p>\n </ng-template>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Dropdown -->\n <ng-container *ngSwitchCase=\"'select'\">\n <div\n #formFieldsRef\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-input-select\n [disabled]=\"field?.disabled\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [isShowLabelOutside]=\"field?.properties?.isShowLabelOutside\"\n [label]=\"field?.label\"\n [options]=\"field.options\"\n [placeholder]=\"field?.properties?.placeholder\"\n [properties]=\"field?.properties\"\n [searchable]=\"field?.properties?.searchable\"\n [validators]=\"field?.validators\"\n (getKeyValue)=\"handleGetKeyValue($event)\"\n ></kwikui-input-select>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Input Slider -->\n <ng-container *ngSwitchCase=\"'slider'\">\n <div\n #formFieldsRef\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-input-slider\n [disabled]=\"field?.disabled\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [isShowLabelOutside]=\"field?.properties?.isShowLabelOutside\"\n [label]=\"field?.label\"\n [max]=\"field?.properties?.max\"\n [min]=\"field?.properties?.min\"\n [placeholder]=\"field?.properties?.placeholder\"\n [postfix]=\"field?.properties?.postfix\"\n [prefix]=\"field?.properties?.prefix\"\n [properties]=\"field?.properties\"\n [quantum]=\"field?.properties?.quantum\"\n [size]=\"field?.properties?.size\"\n [steps]=\"field?.properties?.steps\"\n [validators]=\"field?.validators\"\n (getKeyValue)=\"handleGetKeyValue($event)\"\n ></kwikui-input-slider>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- API Call -->\n <ng-container *ngSwitchCase=\"'api'\">\n <div\n #formFieldsRef\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-button-api-call\n [apiStatus]=\"field?.api?.status?.value\"\n [apiTimer]=\"field?.api?.timer\"\n [class]=\"field?.class\"\n [disabled]=\"field?.disabled\"\n [id]=\"field.key\"\n [label]=\"field?.api?.status?.labels[field?.api?.status?.value]\"\n [showLoader]=\"field?.disabled === 'loading'\"\n [size]=\"field?.properties?.size\"\n [styles]=\"\n field?.properties?.styles\n ? field?.properties?.styles\n : 'width: fit-content'\n \"\n (onClick)=\"handleOnClickApiCall($event)\"\n (onApiTimerStop)=\"handleOnApiTimerStop($event)\"\n ></kwikui-button-api-call>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Live Location -->\n <ng-container *ngSwitchCase=\"'live-location'\">\n <div\n #formFieldsRef\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-button-live-location\n [class]=\"field?.class\"\n [disabled]=\"field?.disabled\"\n [id]=\"field.key\"\n [label]=\"field?.api?.status?.labels[field?.api?.status?.value]\"\n [liveLocationStatus]=\"field?.api?.status?.value\"\n [shape]=\"field?.properties?.shape\"\n [isShowLatLongCaptureTimestamp]=\"\n field?.properties?.isShowLatLongCaptureTimestamp\n \"\n [showLoader]=\"field?.disabled\"\n [size]=\"field?.properties?.size\"\n styles=\"width: fit-content\"\n (onClick)=\"handleOnClickLiveLocation($event)\"\n (onLocationPermission)=\"handleOnLocationPermission($event)\"\n ></kwikui-button-live-location>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Mobile OTP -->\n <ng-container *ngSwitchCase=\"'otp'\">\n <div\n #formFieldsRef\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-input-otp\n [disabled]=\"field?.disabled\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [label]=\"field?.label\"\n [mask]=\"field?.properties?.mask\"\n [mode]=\"field?.properties?.mode\"\n [otpLength]=\"field?.properties?.otpLength\"\n [placeholder]=\"field?.properties?.placeholder\"\n [properties]=\"field?.properties\"\n [size]=\"field?.properties?.size\"\n [validators]=\"field?.validators\"\n (getKeyValue)=\"handleGetKeyValue($event)\"\n ></kwikui-input-otp>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Masked Input -->\n <ng-container *ngSwitchCase=\"'masked'\">\n <div\n #formFieldsRef\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-input-masked\n [disabled]=\"field?.disabled\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [label]=\"field?.label\"\n [maskChar]=\"field?.properties?.maskChar ?? 'X'\"\n [maskCount]=\"field?.properties?.maskCount ?? 0\"\n [maskDirection]=\"field?.properties?.maskDirection ?? 'fromRight'\"\n [pattern]=\"field?.properties?.pattern ?? ''\"\n [placeholder]=\"\n field?.placeholder ?? field?.properties?.placeholder\n \"\n [properties]=\"field?.properties\"\n [validators]=\"field?.validators\"\n (getKeyValue)=\"handleGetKeyValue($event)\"\n ></kwikui-input-masked>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Aadhaar Number -->\n <ng-container *ngSwitchCase=\"'aadhaar-number'\">\n <div\n #formFieldsRef\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-input-aadhaar\n [disabled]=\"field?.disabled\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [label]=\"field?.label\"\n [mask]=\"field?.properties?.mask\"\n [placeholder]=\"field?.placeholder\"\n [properties]=\"field?.properties\"\n [validators]=\"field?.validators\"\n (getKeyValue)=\"handleGetKeyValue($event)\"\n ></kwikui-input-aadhaar>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Preview Image -->\n <ng-container *ngSwitchCase=\"'image'\">\n <div\n #formFieldsRef\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-image\n [altText]=\"field?.properties?.altText\"\n [class]=\"field?.properties?.class\"\n [html]=\"field?.properties?.html\"\n [id]=\"field.key\"\n [imageSrc]=\"formGroup.controls[field.key].value ?? ''\"\n [imageType]=\"field?.properties?.imageType\"\n [loadingType]=\"field?.properties?.loadingType\"\n [styles]=\"field?.properties?.styles\"\n ></kwikui-image>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- File Upload -->\n <ng-container *ngSwitchCase=\"'file'\">\n <div\n #formFieldsRef\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <label\n [tuiLabel]=\"labelTemplate\"\n style=\"min-height: auto\"\n >\n <kwikui-input-files\n [accept]=\"field?.properties?.accept\"\n [class]=\"field?.properties?.class\"\n [disabled]=\"field?.disabled\"\n [files]=\"files[field.key]\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [id]=\"field?.key\"\n [label]=\"field?.properties?.label\"\n [link]=\"field?.properties?.link\"\n [maxFileSize]=\"field?.properties?.maxFileSize\"\n [multiple]=\"field?.properties?.multiple\"\n [setFileTypesToForm]=\"['NORMAL']\"\n [styles]=\"field?.properties?.styles\"\n [validators]=\"field?.validators\"\n [showViewButton]=\"field?.properties?.showViewButton\"\n (getKeyValue)=\"handleGetKeyValueFile($event)\"\n (getRemovedFile)=\"handleRemovedFile($event)\"\n (getViewButtonClick)=\"handleViewButtonClick($event, field)\"\n ></kwikui-input-files>\n </label>\n <ng-template #labelTemplate>\n <p\n style=\"padding: 0px 0.25rem; margin-bottom: 0.25rem\"\n [hidden]=\"field?.hidden\"\n id=\"field_{{ field.key }}\"\n >\n <b>\n {{ field.label }}\n <span *ngIf=\"field.validators?.required\">*</span>\n </b>\n </p>\n </ng-template>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Camera Capture -->\n <ng-container *ngSwitchCase=\"'capture'\">\n <div\n #formFieldsRef\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <label\n *ngIf=\"\n field?.label !== '' &&\n field?.label !== undefined &&\n field?.label !== null\n \"\n style=\"min-height: auto\"\n >\n <p\n *ngIf=\"field?.label !== ''\"\n style=\"padding: 0px 0.25rem; margin-bottom: 0.5rem\"\n [hidden]=\"field?.hidden\"\n id=\"field_{{ field.key }}\"\n >\n <b>\n {{ field.label }}\n <span *ngIf=\"field.validators?.required\">*</span>\n </b>\n </p>\n </label>\n <kwikui-input-camera\n [buttonText]=\"field?.properties?.buttonText\"\n [disabled]=\"field?.disabled\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [icon]=\"field?.properties?.icon\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [mediaFiles]=\"\n mediaFiles[field.key] | filterImageUrlOrBase64FromObject\n \"\n [properties]=\"field?.properties\"\n [showMediaFiles]=\"field?.properties?.showMediaFiles\"\n [type]=\"'capture'\"\n [validators]=\"field?.validators\"\n (onClick)=\"handleOnClickInputCamera($event, field)\"\n (getRemovedFile)=\"handleOnClickGetRemovedMediaFile($event)\"\n ></kwikui-input-camera>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Camera Record -->\n <ng-container *ngSwitchCase=\"'record'\">\n <div\n #formFieldsRef\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <label\n *ngIf=\"\n field?.label !== '' &&\n field?.label !== undefined &&\n field?.label !== null\n \"\n style=\"min-height: auto\"\n >\n <p\n *ngIf=\"field?.label !== ''\"\n style=\"padding: 0px 0.25rem; margin-bottom: 0.5rem\"\n [hidden]=\"field?.hidden\"\n id=\"field_{{ field.key }}\"\n >\n <b>\n {{ field.label }}\n <span *ngIf=\"field.validators?.required\">*</span>\n </b>\n </p>\n </label>\n <kwikui-input-camera\n [buttonText]=\"field?.properties?.buttonText\"\n [disabled]=\"field?.disabled\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [icon]=\"field?.properties?.icon\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [mediaFiles]=\"\n mediaFiles[field.key] | filterVideoUrlOrBase64FromObject\n \"\n [properties]=\"field?.properties\"\n [showMediaFiles]=\"field?.properties?.showMediaFiles\"\n [type]=\"'record'\"\n [validators]=\"field?.validators\"\n (onClick)=\"handleOnClickInputCamera($event, field)\"\n (getRemovedFile)=\"handleOnClickGetRemovedMediaFile($event)\"\n ></kwikui-input-camera>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Microphone Record -->\n <ng-container *ngSwitchCase=\"'mic'\">\n <div\n #formFieldsRef\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-input-mic\n [buttonText]=\"field?.properties?.buttonText ?? 'Record'\"\n [disabled]=\"field?.disabled\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [icon]=\"field?.properties?.icon ?? 'tuiIconMicLarge'\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [label]=\"field?.label\"\n [minRecordingTimeInSeconds]=\"\n field?.properties?.minRecordingTimeInSeconds ?? 0\n \"\n [maxRecordingTimeInSeconds]=\"\n field?.properties?.maxRecordingTimeInSeconds ?? 60\n \"\n [properties]=\"field?.properties\"\n [validators]=\"field?.validators\"\n (getKeyValue)=\"handleGetKeyValue($event)\"\n ></kwikui-input-mic>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Star Rating -->\n <ng-container *ngSwitchCase=\"'star-rating'\">\n <div\n #formFieldsRef\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <label\n [tuiLabel]=\"labelTemplate\"\n style=\"min-height: auto; padding: 0px 0.5rem\"\n >\n <kwikui-star-rating\n [color]=\"field?.properties?.color\"\n [disabled]=\"field?.disabled\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [icon]=\"field?.properties?.icon\"\n [iconMarked]=\"field?.properties?.iconMarked\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [label]=\"field?.label\"\n [max]=\"field?.properties?.max\"\n [min]=\"field?.properties?.min\"\n [placeholder]=\"field?.properties?.placeholder\"\n [properties]=\"field?.properties\"\n [size]=\"field?.properties?.size\"\n [validators]=\"field?.validators\"\n (getKeyValue)=\"handleGetKeyValue($event)\"\n ></kwikui-star-rating>\n </label>\n <ng-template #labelTemplate>\n <p>\n <b\n >{{ field?.properties?.placeholder }}\n <span *ngIf=\"field.validators?.required\">*</span></b\n >\n </p>\n </ng-template>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n </ng-container>\n </ng-container>\n </form>\n <div\n class=\"kwikid-form-buttons\"\n *ngIf=\"\n !formConfig.properties.footer.viewFormsButton.hidden ||\n !formConfig.properties.footer.saveButton.hidden\n \"\n >\n <kwikui-button\n *ngIf=\"\n !formConfig.properties.footer.viewFormsButton.hidden && isMobileView\n \"\n [appearance]=\"'secondary'\"\n [disabled]=\"viewFormsButton.disabled\"\n [label]=\"formConfig.properties.footer.viewFormsButton.label\"\n [showLoader]=\"viewFormsButton.showLoader\"\n [styles]=\"formConfig.properties.footer.viewFormsButton.styles\"\n (onClick)=\"handleOnClickViewForms($event)\"\n ></kwikui-button>\n <kwikui-button\n *ngIf=\"!formConfig.properties.footer.saveButton.hidden\"\n [disabled]=\"saveFormButton.disabled\"\n [label]=\"formConfig.properties.footer.saveButton.label\"\n [showLoader]=\"saveFormButton.showLoader\"\n [styles]=\"formConfig.properties.footer.saveButton.styles\"\n (onClick)=\"handleOnClickSaveForm($event)\"\n ></kwikui-button>\n </div>\n</div>\n<div\n class=\"kwikid-form-container-loading\"\n *ngIf=\"loading\"\n>\n <div\n *ngFor=\"let item of [].constructor(7); let i = index\"\n class=\"large-wrapper tui-skeleton tui-skeleton_rounded\"\n >\n </div>\n</div>\n\n<kwikui-loader></kwikui-loader>\n\n<tui-push\n id=\"field-error-notification\"\n *tuiPush=\"showErrorNotification\"\n heading=\"Missing/Incorrect Fields!\"\n type=\"Error\"\n (close)=\"toggleErrorNotification(false)\"\n>\n <tui-svg\n src=\"tuiIconXCircle\"\n style=\"color: #fff !important\"\n >\n </tui-svg>\n</tui-push>\n\n<tui-push\n id=\"permission-error-notification\"\n *tuiPush=\"showPermissionErrorNotification\"\n heading=\"Please provide required permissions!\"\n type=\"Error\"\n (close)=\"togglePermissionErrorNotification(false)\"\n>\n <tui-svg\n src=\"tuiIconXCircle\"\n style=\"color: #fff !important\"\n >\n </tui-svg>\n</tui-push>\n\n<ng-template\n #preview\n let-preview\n>\n <tui-preview\n [rotatable]=\"false\"\n [zoomable]=\"false\"\n class=\"preview-container\"\n >\n <tui-preview-title *ngIf=\"previewProperties.title !== ''\">{{\n previewProperties.title\n }}</tui-preview-title>\n\n <ng-container *ngIf=\"!previewProperties.unavailable\">\n <div\n *ngIf=\"previewProperties?.html?.before !== ''\"\n class=\"preview-html preview-html-before\"\n [style]=\"previewProperties?.html?.beforeStyles ?? '' | styleSanitizer\"\n [innerHtml]=\"previewProperties.html.before | kwikuiSafeHtml\"\n ></div>\n\n <!-- Content within the iframe -->\n <div\n class=\"preview-iframe-content\"\n [style]=\"\n previewProperties?.iframe?.containerStyles ?? '' | styleSanitizer\n \"\n *ngIf=\"previewProperties.iframe.src !== ''\"\n >\n <!-- Your HTML content here -->\n <iframe\n [src]=\"previewProperties.iframe.src | kwikuiSafeUrl\"\n frameborder=\"0\"\n allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\"\n allowfullscreen\n [title]=\"previewProperties.iframe.title\"\n class=\"preview-iframe\"\n scrolling=\"auto\"\n ></iframe>\n </div>\n\n <div\n *ngIf=\"previewProperties?.html?.after !== ''\"\n class=\"preview-html preview-html-after\"\n [style]=\"previewProperties?.html?.afterStyles ?? '' | styleSanitizer\"\n [innerHtml]=\"previewProperties.html.after | kwikuiSafeHtml\"\n ></div>\n </ng-container>\n\n <ng-container *ngIf=\"previewProperties.unavailable\">\n <div class=\"preview-unavailable\">\n <tui-svg\n src=\"tuiIconFileLarge\"\n class=\"t-icon\"\n ></tui-svg>\n <div>Preview unavailable</div>\n </div>\n </ng-container>\n\n <button\n tuiIconButton\n tuiPreviewAction\n icon=\"tuiIconCloseLarge\"\n title=\"Close\"\n type=\"button\"\n (click)=\"preview.complete()\"\n ></button>\n </tui-preview>\n</ng-template>\n\n<ng-template\n #dialog\n let-dialog\n>\n <div class=\"preview-container\">\n <ng-container *ngIf=\"!previewProperties.unavailable\">\n <div\n *ngIf=\"previewProperties?.html?.before !== ''\"\n class=\"preview-html preview-html-before\"\n [style]=\"previewProperties?.html?.beforeStyles ?? '' | styleSanitizer\"\n [innerHtml]=\"previewProperties.html.before | kwikuiSafeHtml\"\n ></div>\n\n <!-- Content within the iframe -->\n <div\n class=\"preview-iframe-content\"\n [style]=\"\n previewProperties?.iframe?.containerStyles ?? '' | styleSanitizer\n \"\n *ngIf=\"previewProperties.iframe.src !== ''\"\n >\n <!-- Your HTML content here -->\n <iframe\n [src]=\"previewProperties.iframe.src | kwikuiSafeUrl\"\n frameborder=\"0\"\n allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\"\n allowfullscreen\n [title]=\"previewProperties.iframe.title\"\n class=\"preview-iframe\"\n scrolling=\"auto\"\n ></iframe>\n </div>\n\n <div\n *ngIf=\"previewProperties?.html?.after !== ''\"\n class=\"preview-html preview-html-after\"\n [style]=\"previewProperties?.html?.afterStyles ?? '' | styleSanitizer\"\n [innerHtml]=\"previewProperties.html.after | kwikuiSafeHtml\"\n ></div>\n </ng-container>\n\n <ng-container *ngIf=\"previewProperties.unavailable\">\n <div class=\"preview-unavailable\">\n <tui-svg\n src=\"tuiIconFileLarge\"\n class=\"t-icon\"\n ></tui-svg>\n <div>Preview unavailable</div>\n </div>\n </ng-container>\n </div>\n</ng-template>\n\n<div\n id=\"kwikid-camera-container\"\n *ngIf=\"isShowCamera\"\n>\n <div\n id=\"kwikid-camera-wrapper\"\n [class.fullscreen]=\"isShowCameraFullscreen\"\n >\n <kwikid-camera\n [type]=\"activeCameraType\"\n [data]=\"activeCameraData\"\n [image]=\"activeCameraImage\"\n [video]=\"activeCameraVideo\"\n [config]=\"activeCameraConfig?.cameraConfig\"\n (getImage)=\"handleGetCameraMedia($event, 'CAPTURE')\"\n (getVideo)=\"handleGetCameraMedia($event, 'RECORD')\"\n (onClickBack)=\"handleOnClickCameraBack($event)\"\n (onClickClose)=\"handleOnClickCameraClose($event)\"\n (onClickSave)=\"handleOnClickSaveCameraMedia($event, activeCameraType)\"\n >\n <ng-container\n *ngIf=\"activeCameraType === 'CAPTURE'\"\n slot=\"capture-header\"\n >\n <div class=\"capture-header-container\">\n <div class=\"capture-header-left\"> </div>\n <div class=\"capture-header-center\">\n <kwikui-button\n *ngIf=\"activeCameraConfig?.cameraConfig?.header?.title !== ''\"\n appearance=\"whiteblock\"\n [label]=\"activeCameraConfig?.cameraConfig?.header?.title\"\n shape=\"rounded\"\n size=\"s\"\n ></kwikui-button>\n </div>\n <div class=\"capture-header-right\">\n <kwikui-button\n *ngIf=\"activeCameraConfig?.cameraConfig?.header?.isExpand\"\n id=\"kwikid-camera-header-enlarge-button\"\n appearance=\"whiteblock\"\n [icon]=\"\n isShowCameraFullscreen ? 'tuiIconMinimize2' : 'tuiIconMaximize2'\n \"\n shape=\"rounded\"\n size=\"s\"\n (click)=\"isShowCameraFullscreen = !isShowCameraFullscreen\"\n ></kwikui-button>\n <kwikui-button\n *ngIf=\"activeCameraConfig?.cameraConfig?.header?.isClose\"\n id=\"kwikid-camera-header-close-button\"\n appearance=\"whiteblock\"\n icon=\"tuiIconCloseLarge\"\n shape=\"rounded\"\n size=\"s\"\n (click)=\"handleOnClickCameraClose($event)\"\n ></kwikui-button>\n </div>\n </div>\n </ng-container>\n <ng-container\n *ngIf=\"activeCameraType === 'RECORD'\"\n slot=\"record-header\"\n >\n <div class=\"record-header-container\">\n <div class=\"record-header-row row-1\">\n <div class=\"record-header-left\">\n <kwikui-button\n *ngIf=\"\n activeCameraConfig?.cameraConfig?.header?.isBack &&\n activeCameraRecordingState == 'NONE'\n \"\n appearance=\"whiteblock\"\n icon=\"tuiIconArrowLeft\"\n shape=\"rounded\"\n size=\"s\"\n (click)=\"handleOnClickCameraClose($event)\"\n ></kwikui-button>\n </div>\n <div class=\"record-header-center\">\n <kwikui-button\n *ngIf=\"activeCameraConfig?.cameraConfig?.header?.title !== ''\"\n appearance=\"whiteblock\"\n [label]=\"activeCameraConfig?.cameraConfig?.header?.title\"\n shape=\"rounded\"\n size=\"s\"\n ></kwikui-button>\n </div>\n <div class=\"record-header-right\">\n <kwikui-button\n *ngIf=\"activeCameraConfig?.cameraConfig?.header?.isExpand\"\n id=\"kwikid-camera-header-enlarge-button\"\n appearance=\"whiteblock\"\n [icon]=\"\n isShowCameraFullscreen\n ? 'tuiIconMinimize2'\n : 'tuiIconMaximize2'\n \"\n shape=\"rounded\"\n size=\"s\"\n (click)=\"isShowCameraFullscreen = !isShowCameraFullscreen\"\n ></kwikui-button>\n </div>\n </div>\n <div class=\"record-header-row row-2\">\n <div\n id=\"blinking-dot-container\"\n [class.recording]=\"activeCameraRecordingState == 'RECORDING'\"\n [class.paused]=\"activeCameraRecordingState == 'PAUSED'\"\n [class.recorded]=\"\n activeCameraRecordingState == 'NONE' ||\n activeCameraRecordingState === 'RECORDED'\n \"\n >\n <div\n *ngIf=\"activeCameraRecordingState == 'RECORDING'\"\n class=\"dot recording blink\"\n >\n </div>\n <div\n *ngIf=\"activeCameraRecordingState === 'PAUSED'\"\n class=\"dot paused\"\n >\n </div>\n <div\n *ngIf=\"\n activeCameraRecordingState == 'NONE' ||\n activeCameraRecordingState === 'RECORDED'\n \"\n class=\"dot recorded\"\n >\n </div>\n <div>\n {{ activeCameraRecordingTime | formatTimer }}\n <ng-container\n *ngIf=\"\n activeCameraConfig?.cameraConfig?.others\n ?.maxRecordingTimeInSeconds\n \"\n >\n /\n {{\n activeCameraConfig?.cameraConfig?.others\n ?.maxRecordingTimeInSeconds | formatTimer\n }}\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n </kwikid-camera>\n </div>\n</div>\n", styles: [".kwikid-form-container{width:100%;height:100%;margin:0 auto;display:flex;flex-direction:column;justify-content:flex-start;align-items:stretch;align-content:center}.kwikid-form.show{width:100%;height:100%;padding:1rem;overflow-y:auto;display:flex;flex-direction:column;align-content:center;justify-content:flex-start;align-items:stretch;scroll-behavior:smooth}.kwikid-form.show>*:not(:last-child){margin-bottom:1rem}.kwikid-form-buttons{width:100%;bottom:0px;padding:1rem;display:flex;flex-direction:row;align-content:center;justify-content:center;align-items:center}.kwikid-form-buttons>*:not(:last-child){margin-right:1rem}.kwikid-form-buttons *{flex-grow:1}#uf-form-fields-header-container{display:flex;flex-direction:column;align-content:center;justify-content:center;align-items:flex-start;padding:1rem 1rem 0}#uf-form-fields-header-container>*:not(:last-child){margin-bottom:.5rem}#uf-form-fields-header-container #uf-header-logo{width:-moz-fit-content;width:fit-content;height:50px}#uf-form-fields-header-container #uf-form-fields-header-main{display:flex;flex-direction:row;align-content:center;justify-content:flex-start;align-items:center;width:100%}#uf-form-fields-header-container #uf-form-fields-header-main>*:not(:last-child){margin-right:.25rem}#uf-form-fields-header-container #uf-form-fields-header-main #uf-form-fields-header-right{display:flex;flex-direction:column;align-content:center;justify-content:center;align-items:flex-start}#uf-form-fields-header-container #uf-form-fields-header-main #uf-form-fields-header-right>*{margin-bottom:.5rem}#uf-form-fields-header-container hr{width:100%}#uf-form-fields-title{color:#000;font-size:1.75em;font-weight:bold}#uf-form-fields-steps{color:var(--color-on-secondary-container);font-size:1rem}.title{border-left:.25rem solid var(--tui-primary);padding:.75rem;font-size:1.4em;font-weight:bold;background-color:var(--tui-secondary);display:flex;flex-direction:row;align-content:center;justify-content:space-between;align-items:center}.title>*:not(:last-child){margin-right:.5rem}.title:not(:first-child){margin-top:.5rem}.title.hidden{display:none}.large-wrapper{width:100%;height:60px}.large-wrapper:first-child{margin-bottom:auto}.large-wrapper:last-child{margin-top:auto}.kwikid-form-container-loading{width:100%;height:100%;margin:0 auto;display:flex;flex-direction:column;justify-content:flex-start;align-items:stretch;align-content:center;padding:1rem}.kwikid-form-container-loading>* :not(:last-child){margin-bottom:1rem}#field-error-notification,#permission-error-notification{background-color:var(--tui-error-fill);color:#fff!important}#field-error-notification .t-top,#permission-error-notification .t-top{color:#fff!important}#field-error-notification .t-close,#permission-error-notification .t-close{color:#fff!important}.preview-container{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;align-content:center;height:calc(100vh - 3rem)}@media only screen and (min-width: 768px){.preview-container{height:calc(100vh - 10rem);width:calc(100vw - 10rem)}}.preview-container>*:not(:last-child){margin-bottom:1rem}.preview-container .preview-html{flex-grow:1}.preview-container .preview-iframe-content{height:100%;flex-grow:1}.preview-container .preview-iframe-content .preview-iframe{width:100%;height:100%}.preview-container .preview-unavailable{display:flex;flex-direction:column;align-content:center;justify-content:center;align-items:center;color:#fff;font-size:1.2rem;top:50%;left:50%;width:100%;height:100vh}.preview-container .preview-unavailable>*:not(:last-child){margin-bottom:1rem}#kwikid-camera-container{width:100%;height:100%;position:fixed;top:50%;left:50%;background-color:#0000008f;transform:translate(-50%,-50%);z-index:100}#kwikid-camera-container #kwikid-camera-wrapper{width:min(80%);height:max(85%);box-shadow:#0000008f 0 22px 70px 4px;overflow:hidden;position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);border-radius:1rem;background-color:#000;transition:5s linear ease}#kwikid-camera-container #kwikid-camera-wrapper .capture-header-container{display:flex;width:100%;max-width:100%;padding:0}#kwikid-camera-container #kwikid-camera-wrapper .capture-header-container .capture-header-left{flex:1;text-align:left}#kwikid-camera-container #kwikid-camera-wrapper .capture-header-container .capture-header-center{flex:1;width:100%;min-width:max-content;text-align:center;margin:auto}#kwikid-camera-container #kwikid-camera-wrapper .capture-header-container .capture-header-right{flex:1;text-align:right;display:flex;justify-content:flex-end;grid-gap:1rem;gap:1rem}#kwikid-camera-container #kwikid-camera-wrapper .record-header-container{display:flex;width:100%;max-width:100%;padding:0;color:#fff;flex-direction:column;justify-content:flex-start;align-items:stretch}#kwikid-camera-container #kwikid-camera-wrapper .record-header-container .record-header-row.row-1{display:flex;flex-direction:row;justify-content:space-between;align-items:center;margin-bottom:1rem}#kwikid-camera-container #kwikid-camera-wrapper .record-header-container .record-header-row.row-1 .record-header-left{flex:1;display:flex;justify-content:flex-start;grid-gap:1rem;gap:1rem;text-align:left}#kwikid-camera-container #kwikid-camera-wrapper .record-header-container .record-header-row.row-1 .record-header-center{flex:1;width:100%;min-width:max-content;text-align:center;margin:auto}#kwikid-camera-container #kwikid-camera-wrapper .record-header-container .record-header-row.row-1 .record-header-right{flex:1;text-align:right;display:flex;justify-content:flex-end;grid-gap:1rem;gap:1rem}#kwikid-camera-container #kwikid-camera-wrapper .record-header-container .record-header-row.row-2{display:flex;flex-direction:row;justify-content:center;align-items:center}#kwikid-camera-container #kwikid-camera-wrapper .record-header-container .record-header-row.row-2 #blinking-dot-container{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;grid-gap:.25rem;gap:.25rem;padding:.35rem .6rem;width:-moz-fit-content;width:fit-content;border-radius:2rem;background-color:#f5f5f5}#kwikid-camera-container #kwikid-camera-wrapper .record-header-container .record-header-row.row-2 #blinking-dot-container.recording{color:red;font-weight:bold}#kwikid-camera-container #kwikid-camera-wrapper .record-header-container .record-header-row.row-2 #blinking-dot-container.paused{color:#525252;font-weight:bold}#kwikid-camera-container #kwikid-camera-wrapper .record-header-container .record-header-row.row-2 #blinking-dot-container.recorded{color:#000;font-weight:bold}#kwikid-camera-container #kwikid-camera-wrapper .record-header-container .record-header-row.row-2 #blinking-dot-container .dot{display:inline-block;width:.75rem;height:.75rem;border-radius:100%}#kwikid-camera-container #kwikid-camera-wrapper .record-header-container .record-header-row.row-2 #blinking-dot-container .dot.recording{background-color:red;box-shadow:0 0 5px -1px red}#kwikid-camera-container #kwikid-camera-wrapper .record-header-container .record-header-row.row-2 #blinking-dot-container .dot.paused{background-color:#525252;box-shadow:0 0 5px -1px #000}#kwikid-camera-container #kwikid-camera-wrapper .record-header-container .record-header-row.row-2 #blinking-dot-container .dot.recorded{background-color:#000;box-shadow:0 0 5px -1px #000}#kwikid-camera-container #kwikid-camera-wrapper .record-header-container .record-header-row.row-2 #blinking-dot-container .dot.blink{animation:blinker 1s cubic-bezier(.5,0,1,1) infinite alternate}@keyframes blinker{0%{opacity:1}to{opacity:0}}#kwikid-camera-container #kwikid-camera-wrapper.fullscreen{width:100%;height:100%;border-radius:0;transition:5s linear ease}@media only screen and (max-width: 600px){#kwikid-camera-container #kwikid-camera-wrapper{width:100%;height:100%;border-radius:0;transition:5s linear ease}#kwikid-camera-container #kwikid-camera-wrapper #kwikid-camera-header-enlarge-button{display:none}}\n", "::-webkit-scrollbar{width:8px}::-webkit-scrollbar-track{border-radius:10px}::-webkit-scrollbar-thumb{background:lightgray;border-radius:10px}::-webkit-scrollbar-thumb:hover{background:gray}\n"], components: [{ type: i3.KwikUIButtonComponent, selector: "kwikui-button", inputs: ["appearance", "class", "disabled", "icon", "iconRight", "id", "label", "shape", "showLoader", "size", "styles", "type", "pseudoHover"], outputs: ["onClick"] }, { type: i3.KwikUIMessagesComponent, selector: "kwikui-messages", inputs: ["id", "messages"] }, { type: i3.KwikUIInputComponent, selector: "kwikui-input", inputs: ["case", "disabled", "focus", "formControl", "formControlName", "hintContent", "icon", "id", "invalid", "isShowLabelOutside", "label", "placeholder", "postfix", "prefix", "properties", "size", "type", "validators"], outputs: ["getKeyValue"] }, { type: i3.KwikUIInputCurrencyComponent, selector: "kwikui-input-currency", inputs: ["currencyType", "disabled", "focus", "formControl", "formControlName", "hintContent", "icon", "id", "invalid", "label", "placeholder", "postfix", "prefix", "properties", "size", "validators", "value"], outputs: ["getKeyValue"] }, { type: i3.KwikUIInputEmailComponent, selector: "kwikui-input-email", inputs: ["case", "disabled", "domains", "focus", "formControl", "formControlName", "hintContent", "icon", "id", "invalid", "label", "placeholder", "postfix", "prefix", "properties", "size", "validators"], outputs: ["getKeyValue"] }, { type: i3.KwikUIInputPasswordComponent, selector: "kwikui-input-password", inputs: ["disabled", "focus", "formControl", "formControlName", "hintContent", "icon", "id", "invalid", "isShowLabelOutside", "label", "placeholder", "postfix", "prefix", "properties", "size", "validators"], outputs: ["getKeyValue"] }, { type: i3.KwikUITextareaComponent, selector: "kwikui-textarea", inputs: ["disabled", "focus", "formControl", "formControlName", "id", "invalid", "isShowLabelOutside", "label", "placeholder", "properties", "size", "validators"], outputs: ["getKeyValue"] }, { type: i3.KwikUICheckboxComponent, selector: "kwikui-checkbox", inputs: ["contentAlign", "disabled", "focus", "formControl", "formControlName", "id", "invalid", "label", "placeholder", "properties", "size", "validators", "variant"], outputs: ["getKeyValue"] }, { type: i3.KwikUIInputNumberComponent, selector: "kwikui-input-number", inputs: ["decimal", "disabled", "focus", "formControl", "formControlName", "hintContent", "icon", "id", "invalid", "isShowLabelOutside", "label", "max", "min", "placeholder", "postfix", "precision", "prefix", "properties", "size", "validators"], outputs: ["getKeyValue"] }, { type: i3.KwikUIInputDateComponent, selector: "kwikui-input-date", inputs: ["disabled", "focus", "formControl", "formControlName", "hintContent", "icon", "id", "invalid", "isShowLabelOutside", "label", "max", "maxCalculatedFromToday", "min", "minCalculatedFromToday", "placeholder", "postfix", "prefix", "properties", "size", "validators"], outputs: ["getKeyValue"] }, { type: i3.KwikUIInputTimeComponent, selector: "kwikui-input-time", inputs: ["disabled", "focus", "formControl", "formControlName", "hintContent", "icon", "id", "items", "invalid", "isShowLabelOutside", "label", "mode", "placeholder", "postfix", "prefix", "properties", "size", "validators"], outputs: ["getKeyValue"] }, { type: i3.KwikUIInputPhoneComponent, selector: "kwikui-input-phone", inputs: ["countryCode", "disabled", "focus", "formControl", "formControlName", "hintContent", "icon", "id", "invalid", "isShowLabelOutside", "label", "phoneMaskAfterCountryCode", "placeholder", "postfix", "prefix", "properties", "removeCountryCodeFromValue", "size", "validators"], outputs: ["getKeyValue"] }, { type: i5.TuiLabelComponent, selector: "label[tuiLabel]", inputs: ["tuiLabel", "context"] }, { type: i3.KwikUIInputRadioComponent, selector: "kwikui-input-radio", inputs: ["disabled", "focus", "formControl", "formControlName", "id", "invalid", "items", "label", "orientation", "placeholder", "properties", "size", "validators"], outputs: ["getKeyValue"] }, { type: i3.KwikUIInputSelectComponent, selector: "kwikui-input-select", inputs: ["disabled", "focus", "formControl", "formControlName", "hintContent", "icon", "id", "invalid", "isShowLabelOutside", "label", "options", "placeholder", "properties", "searchable", "size", "validators"], outputs: ["getKeyValue"] }, { type: i3.KwikUIInputSliderComponent, selector: "kwikui-input-slider", inputs: ["disabled", "focus", "formControl", "formControlName", "hintContent", "icon", "id", "invalid", "isShowLabelOutside", "label", "max", "min", "placeholder", "postfix", "prefix", "properties", "quantum", "size", "steps", "type", "validators"], outputs: ["getKeyValue"] }, { type: i3.KwikUIButtonApiCallComponent, selector: "kwikui-button-api-call", inputs: ["apiTimer", "apiStatus", "class", "disabled", "id", "label", "shape", "showLoader", "size", "styles"], outputs: ["onClick", "onApiTimerStop"] }, { type: i3.KwikUIButtonLiveLocationComponent, selector: "kwikui-button-live-location", inputs: ["liveLocationStatus", "class", "disabled", "id", "label", "shape", "showLoader", "size", "styles", "isShowLatLongCaptureTimestamp"], outputs: ["onClick", "onLocationPermission"] }, { type: i3.KwikUIInputOtpComponent, selector: "kwikui-input-otp", inputs: ["disabled", "focus", "formControl", "formControlName", "id", "invalid", "label", "mask", "mode", "otpLength", "placeholder", "postfix", "prefix", "properties", "size", "validators"], outputs: ["getKeyValue"] }, { type: i3.KwikUIInputMaskedComponent, selector: "kwikui-input-masked", inputs: ["disabled", "focus", "formControl", "formControlName", "id", "invalid", "label", "maskChar", "maskCount", "maskDirection", "pattern", "placeholder", "properties", "validators"], outputs: ["getKeyValue"] }, { type: i3.KwikUIInputAadhaarComponent, selector: "kwikui-input-aadhaar", inputs: ["disabled", "focus", "formControl", "formControlName", "id", "invalid", "label", "mask", "placeholder", "properties", "validators"], outputs: ["getKeyValue"] }, { type: i3.KwikUIImageComponent, selector: "kwikui-image", inputs: ["altText", "class", "html", "id", "imageSrc", "imageType", "loadingType", "styles"], outputs: ["onClick"] }, { type: i3.KwikUIInputFilesComponent, selector: "kwikui-input-files", inputs: ["accept", "class", "disabled", "files", "formControl", "formControlName", "icon", "id", "label", "link", "maxFileSize", "multiple", "setFileTypesToForm", "showAddedFiles", "size", "styles", "validators", "variant", "showViewButton"], outputs: ["getKeyValue", "getRemovedFile", "getViewButtonClick"] }, { type: i4.KwikUIInputCameraComponent, selector: "kwikui-input-camera", inputs: ["buttonText", "disabled", "focus", "formControl", "formControlName", "icon", "id", "invalid", "mediaFiles", "properties", "showMediaFiles", "size", "type", "validators"], outputs: ["onClick", "getRemovedFile"] }, { type: i3.KwikUIInputMicComponent, selector: "kwikui-input-mic", inputs: ["buttonText", "disabled", "formControl", "formControlName", "icon", "id", "invalid", "label", "minRecordingTimeInSeconds", "maxRecordingTimeInSeconds", "properties", "validators"], outputs: ["getKeyValue"] }, { type: i3.KwikUIStarRatingComponent, selector: "kwikui-star-rating", inputs: ["color", "disabled", "focus", "formControl", "formControlName", "icon", "iconMarked", "id", "invalid", "label", "max", "min", "placeholder", "properties", "size", "validators"], outputs: ["getKeyValue"] }, { type: i3.KwikUILoaderComponent, selector: "kwikui-loader" }, { type: i6.TuiPushComponent, selector: "tui-push", inputs: ["heading", "type", "lines", "timestamp"], outputs: ["close"] }, { type: i5.TuiSvgComponent, selector: "tui-svg", inputs: ["src"] }, { type: i7.TuiPreviewComponent, selector: "tui-preview", inputs: ["zoomable", "rotatable"] }, { type: i7.TuiPreviewTitleComponent, selector: "tui-preview-title" }, { type: i5.TuiButtonComponent, selector: "button[tuiButton], button[tuiIconButton], a[tuiButton], a[tuiIconButton]", inputs: ["appearance", "disabled", "icon", "iconRight", "shape", "showLoader", "size"] }, { type: i4.KwikIDCameraComponent, selector: "kwikid-camera", inputs: ["type", "config", "data", "image", "video"], outputs: ["getImage", "onClickSave", "getVideo"] }], directives: [{ type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i9.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i9.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i8.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i8.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i9.FormControlDirective, selector: "[formControl]", inputs: ["disabled", "formControl", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i9.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }, { type: i9.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { type: i6.TuiPushAlertDirective, selector: "[tuiPush]", inputs: ["tuiPush"] }, { type: i6.TuiPushDirective, selector: "tui-push" }, { type: i7.TuiPreviewActionDirective, selector: "[tuiPreviewAction]" }], pipes: { "styleSanitizer": i10.StyleSanitizerPipe, "kwikuiSafeHtml": i3.KwikUISafeHtmlPipe, "filterImageUrlOrBase64FromObject": i11.FilterImageUrlOrBase64FromObjectPipe, "filterVideoUrlOrBase64FromObject": i12.FilterVideoUrlOrBase64FromObjectPipe, "kwikuiSafeUrl": i3.KwikUISafeUrlPipe, "formatTimer": i13.TimerPipe } });
|
|
3150
3189
|
__decorate([
|
|
3151
3190
|
logMethod
|
|
3152
3191
|
], KwikIDFormViewComponent.prototype, "resetCamera", null);
|
|
@@ -3499,4 +3538,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
|
|
|
3499
3538
|
}], onClickViewForms: [{
|
|
3500
3539
|
type: Output
|
|
3501
3540
|
}], resetCamera: [], ngOnInit: [], ngOnChanges: [], ngOnDestroy: [], triggerLogs: [], syncApiStorageContext: [], initFormConfig: [], setFormFieldsFromFormConfig: [], setFormFieldGroupsFromFormConfig: [], setFormDataFromAllFormsData: [], handleConnectedElementFieldGroupActions: [], handleConnectedElementFieldGroup: [], handleConnectedElementFieldActions: [], handleConnectedElementFields: [], handleConnectedElements: [], handleRemovedFile: [], handleViewButtonClick: [], handleGetKeyValueFile: [], handleOnClickGetRemovedMediaFile: [], handleOnClickInputCamera: [], setCameraMedia: [], handleGetCameraMedia: [], handleOnClickSaveCameraMedia: [], handleOnClickCameraBack: [], handleOnClickCameraClose: [], updateFiles: [], uploadFile: [], handleOnClickFormFieldButton: [], handleOnLocationPermission: [], handleOnClickLiveLocation: [], handleGetKeyValue: [], handleOnClickResetFormFields: [], handleFieldApiCall: [], handleApiCall: [], executeApiCall: [], isValidRequestHeadersAndBody: [], handleOnClickApiCall: [], handleOnClickGoBack: [], handleOnClickViewForms: [], handleOnClickSaveForm: [], handleOnApiTimerStop: [], handleOnScrollToField: [], toggleErrorNotification: [], togglePermissionErrorNotification: [], fieldHide: [], fieldGroupHide: [], fieldShow: [], fieldGroupShow: [], fieldDisable: [], fieldGroupDisable: [], fieldEnable: [], fieldGroupEnable: [], fieldReset: [], fieldGroupReset: [], fieldHideApiLoader: [], fieldShowApiLoader: [], setHtml: [], fieldErrorShow: [], fieldErrorHide: [], fieldMessageShow: [], fieldMessageHide: [], removeKeyFromObjectPath: [], setValue: [], setFieldDefaultValue: [], setApiStatus: [], setApiHeaderValue: [], setApiHeaderValidity: [], setApiBodyValue: [], setApiBodyValidity: [], setFieldValidity: [], setDropdownOptions: [], apiCall: [], fieldApiCall: [], fieldMultipleApiCalls: [], fieldMultipleApiCallsEnd: [], taskApiCall: [], taskMultipleApiCalls: [], taskMultipleApiCallsEnd: [], dialogShow: [], dialogHide: [], redirectToUrl: [], patchFieldControlValue: [], setFieldControlValue: [], patchFormGroup: [], isFieldValid: [], isFieldEnabled: [], getFormGroupRawValues: [], showPreview: [], showErrorPreview: [], showPopupForm: [], alertShow: [], takeActionOnFieldGroup: [], takeAction: [] } });
|
|
3502
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2t3aWtpZC1mb3Jtcy9zcmMvbGliL3JlbmRlcmVyL2Zvcm0tdmlldy9mb3JtLXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva3dpa2lkLWZvcm1zL3NyYy9saWIvcmVuZGVyZXIvZm9ybS12aWV3L2Zvcm0tdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsbUNBQW1DO0FBQ25DLHNEQUFzRDtBQUN0RCxPQUFPLEVBRUwsU0FBUyxFQUVULFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUlMLE1BQU0sRUFLTixTQUFTLEVBQ1QsWUFBWSxFQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNsRSxPQUFPLEVBQ0wsZUFBZSxFQUVmLGdCQUFnQixFQUNoQixlQUFlLEVBQ2hCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUvQyxPQUFPLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxVQUFVLEVBQ1YsSUFBSSxFQUNKLFVBQVUsRUFDVixNQUFNLEVBR04sb0JBQW9CLEVBQ3BCLHFCQUFxQixFQUNyQixpQkFBaUIsRUFDakIsc0JBQXNCLEVBQ3RCLGFBQWEsRUFDYixZQUFZLEVBQ1osZ0JBQWdCLEVBQ2hCLGVBQWUsRUFDZixNQUFNLEVBQ04sV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBQ1osZ0JBQWdCLEVBQ2hCLHVCQUF1QixFQUN2QixhQUFhLEVBQ2Isb0JBQW9CLEVBQ3JCLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFFLFFB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LHVCQUF1QixNQThCdkIsUUFBUSxNQWtCUixvQkFBb0IsTUF5Q3BCLFlBQVksTUFzQlosaUJBQWlCLE1Bc0JqQixvQkFBb0IsTUFzQnBCLGVBQWUsTUFzQmYsa0JBQWtCLE1Bc0JsQixnQkFBZ0IsTUF1QmhCLGtCQUFrQixNQXdDbEIsT0FBTyxNQXFCUCxZQUFZLE1BU1oscUJBQXFCLE1BaUJyQix3QkFBd0IsTUFvQnhCLFdBQVcsTUFlWCxvQkFBb0IsTUE4Q3BCLHVCQUF1QixNQTBCN0IsVUFBVSxNQXNCVixVQUFVLE1BT1YsYUFBYSxNQTZCYixzQkFBc0IsTUFLdEIsb0JBQW9CLE1BS3BCLGNBQWMsTUFtQmQsWUFBWSxNQUtaLGNBQWMsTUFLZCxxQkFBcUIsTUFLckIsV0FBVyxNQWdHWCxnQkFBZ0IsTUFVaEIsYUFBYSxNQWNiLFNBQVMsTUE0Qkgsc0JBQXNCLE1BeUN0QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgUmVuZGVyZXIyLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxuICBWaWV3Q2hpbGRyZW5cbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHsgVHVpUHJldmlld0RpYWxvZ1NlcnZpY2UgfSBmcm9tIFwiQHRhaWdhLXVpL2FkZG9uLXByZXZpZXdcIjtcbmltcG9ydCB7XG4gIFR1aUFsZXJ0U2VydmljZSxcbiAgVHVpRGlhbG9nQ29udGV4dCxcbiAgVHVpRGlhbG9nU2VydmljZSxcbiAgVHVpTm90aWZpY2F0aW9uXG59IGZyb20gXCJAdGFpZ2EtdWkvY29yZVwiO1xuaW1wb3J0IHsgVHVpUHVzaFNlcnZpY2UgfSBmcm9tIFwiQHRhaWdhLXVpL2tpdFwiO1xuaW1wb3J0IHsgS3dpa0lEQ2FtZXJhUmVjb3JkU2VydmljZSB9IGZyb20gXCJrd2lraWQtY2FtZXJhXCI7XG5pbXBvcnQge1xuICBBY3Rpb24sXG4gIENvbmRpdGlvbixcbiAgRVNvdXJjZUtleSxcbiAgUnVsZSxcbiAgUnVsZUVuZ2luZSxcbiAgU291cmNlLFxuICBUQWN0aW9uLFxuICBURW5naW5lLFxuICBjaGVja09iamVjdEtleUV4aXN0cyxcbiAgY2hlY2tPYmplY3RQYXRoRXhpc3RzLFxuICBnZXRPYmplY3REZWVwQ29weSxcbiAgZ2V0T2JqZWN0VmFsdWVGcm9tUGF0aCxcbiAgaXNFbXB0eVN0cmluZyxcbiAgaXNFbXB0eVZhbHVlLFxuICBpc05vdEVtcHR5U3RyaW5nLFxuICBpc05vdEVtcHR5VmFsdWUsXG4gIGlzTnVsbCxcbiAgaXNVbmRlZmluZWQsXG4gIGxvZ01ldGhvZCxcbiAgbWVyZ2VPYmplY3RzLFxuICBtZXJnZU9iamVjdHNEZWVwLFxuICByZW1vdmVLZXlGcm9tT2JqZWN0UGF0aCxcbiAgcmVwbGFjZVN0cmluZyxcbiAgc2V0VmFsdWVUb09iamVjdFBhdGhcbn0gZnJvbSBcImt3aWtpZC10b29sa2l0XCI7XG5pbXBvcnQgeyBLd2lrVUlMb2FkZXJTZXJ2aWNlIH0gZnJvbSBcImt3aWt1aVwiO1xuaW1wb3J0IHsgcGFpcndpc2UgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gXCJ1dWlkXCI7XG5pbXBvcnQgeyBDb252ZXJ0ZXIgfSBmcm9tIFwiLi4vY29uZmlnLWNvbnZlcnRlci9jb25maWctY29udmVydGVyXCI7XG5pbXBvcnQgeyBGSUVMRF9QUk9QRVJUSUVTIH0gZnJvbSBcIi4uL2NvbmZpZy1jb252ZXJ0ZXIvY29uZmlnLWNvbnZlcnRlci5jb25zdGFudHNcIjtcbmltcG9ydCB7XG4gIGdldExhbmd1YWdlLFxuICB1cGRhdGVMYW5ndWFnZVxufSBmcm9tIFwiLi4vY29uZmlnLWNvbnZlcnRlci9jb25maWctY29udmVydGVyLmhlbHBlclwiO1xuaW1wb3J0IHsgRUZvcm1zTGlzdFN0YXR1cyB9IGZyb20gXCIuLi9mb3Jtcy1saXN0L2Zvcm1zLWxpc3QuZGVmaW5pdGlvbnNcIjtcbmltcG9ydCB7IEVBY3Rpb25LZXkgfSBmcm9tIFwiLi9kZWZpbml0aW9ucy9mb3JtLXZpZXcuYWN0aW9ucy5kZWZpbml0aW9uXCI7XG5pbXBvcnQge1xuICBFQXBpUmVxdWVzdFVybFR5cGUsXG4gIEVBcGlTdGF0dXNUeXBlLFxuICBUQXBpLFxuICBUQXBpRW5kcG9pbnQsXG4gIFRBcGlUaW1lclxufSBmcm9tIFwiLi9kZWZpbml0aW9ucy9mb3JtLXZpZXcuYXBpcy5kZWZpbml0aW9uXCI7XG5pbXBvcnQge1xuICBFTWVzc2FnZVR5cGUsXG4gIFRGb3JtVmlld0dvQmFja01vZGUsXG4gIFRNZXNzYWdlXG59IGZyb20gXCIuL2RlZmluaXRpb25zL2Zvcm0tdmlldy5jb21tb25zLmRlZmluaXRpb25cIjtcbmltcG9ydCB7XG4gIEVGaWVsZFR5cGUsXG4gIFRGaWVsZEFwaUNhbGwsXG4gIFRGaWVsZExpdmVMb2NhdGlvbixcbiAgVEZpZWxkVGl0bGVcbn0gZnJvbSBcIi4vZGVmaW5pdGlvbnMvZm9ybS12aWV3LmZpZWxkcy5kZWZpbml0aW9uXCI7XG5pbXBvcnQgeyBFTG9nRXZlbnRUeXBlIH0gZnJvbSBcIi4vZGVmaW5pdGlvbnMvZm9ybS12aWV3LmxvZ3MuZGVmaW5pdGlvblwiO1xuaW1wb3J0IHsgS3dpa0lERm9ybVZpZXdBcGlTZXJ2aWNlIH0gZnJvbSBcIi4vZm9ybS12aWV3LmFwaS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBGT1JNX1ZJRVdfVElNRVJTIH0gZnJvbSBcIi4vZm9ybS12aWV3LmNvbnN0YW50c1wiO1xuaW1wb3J0IHsgS3dpa0lERm9ybVZpZXdTZXJ2aWNlIH0gZnJvbSBcIi4vZm9ybS12aWV3LnNlcnZpY2VcIjtcbmltcG9ydCB7IEFwaXMgfSBmcm9tIFwiLi9oZWxwZXJzL2Zvcm0tdmlldy5hcGlzLmhlbHBlclwiO1xuaW1wb3J0IHsgQ2FtZXJhSGVscGVyIH0gZnJvbSBcIi4vaGVscGVycy9mb3JtLXZpZXcuY2FtZXJhLmhlbHBlclwiO1xuaW1wb3J0IHtcbiAgYXBwZW5kRm9ybUZpZWxkTWVzc2FnZSxcbiAgYXBwZW5kSHRtbE1lc3NhZ2UsXG4gIGNvbnZlcnRGb3JtRmllbGRFbXB0eVZhbHVlVG9Ld2lrVUlGb3JtYXQsXG4gIGNvbnZlcnRGb3JtRmllbGRWYWx1ZVRvS3dpa1VJRm9ybWF0LFxuICBjb252ZXJ0Rm9ybUZpZWxkVmFsdWVUb1N0YW5kYXJkRm9ybWF0LFxuICBmaWx0ZXJEdXBsaWNhdGVzRmlsZXMsXG4gIGZpbHRlckR1cGxpY2F0ZXNNZWRpYUZpbGVzLFxuICBnZXRGb3JtRmllbGRCeUtleSxcbiAgZ2V0Rm9ybUZpZWxkSW5kZXhCeUtleSxcbiAgaGlnaGxpZ2h0Rm9ybUZpZWxkRXJyb3IsXG4gIHJlbW92ZUZvcm1GaWVsZE1lc3NhZ2UsXG4gIHNldEFwaVRpbWVyTWVzc2FnZSxcbiAgc2hvd0Zvcm1GaWVsZEVycm9yXG59IGZyb20gXCIuL2hlbHBlcnMvZm9ybS12aWV3LmZpZWxkcy5oZWxwZXJcIjtcbmltcG9ydCB7IEZvcm1WYWxpZGF0aW9uIH0gZnJvbSBcIi4vaGVscGVycy9mb3JtLXZpZXcuZm9ybS12YWxpZGF0aW9ucy5oZWxwZXJcIjtcbmltcG9ydCB7IGZvcm1hdEV2ZW50TG9ncyB9IGZyb20gXCIuL2hlbHBlcnMvZm9ybS12aWV3LmxvZ3MuaGVscGVyXCI7XG5pbXBvcnQgeyBUYXNrcyB9IGZyb20gXCIuL2hlbHBlcnMvZm9ybS12aWV3LnRhc2tzLmhlbHBlclwiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwia3dpa2lkLWZvcm0tdmlld1wiLFxuICB0ZW1wbGF0ZVVybDogXCIuL2Zvcm0tdmlldy5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4vZm9ybS12aWV3LmNvbXBvbmVudC5zY3NzXCIsIFwiLi4vc2hhcmVkLnNjc3NcIl0sXG4gIHByb3ZpZGVyczogW0t3aWtJREZvcm1WaWV3U2VydmljZSwgS3dpa0lERm9ybVZpZXdBcGlTZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBLd2lrSURGb3JtVmlld0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBAVmlld0NoaWxkKFwiZm9ybUZpZWxkQ29udGFpbmVyUmVmXCIpIGZvcm1GaWVsZENvbnRhaW5lclJlZjogRWxlbWVudFJlZjtcblxuICBAVmlld0NoaWxkcmVuKFwiZm9ybUZpZWxkc1JlZlwiKSBmb3JtRmllbGRzUmVmOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG5cbiAgQFZpZXdDaGlsZChcImRpYWxvZ1wiKSByZWFkb25seSBkaWFsb2c6IFRlbXBsYXRlUmVmPFR1aURpYWxvZ0NvbnRleHQ8dm9pZD4+O1xuXG4gIEBWaWV3Q2hpbGQoXCJwcmV2aWV3XCIpIHJlYWRvbmx5IHByZXZpZXc6IFRlbXBsYXRlUmVmPFR1aURpYWxvZ0NvbnRleHQ8dm9pZD4+O1xuXG4gIEBJbnB1dCgpIGFsbEZvcm1zRGF0YTogYW55O1xuXG4gIEBJbnB1dCgpIGV4dHJhRGF0YTogYW55O1xuXG4gIEBJbnB1dCgpIGFwaUNhbGxSZXNwb25zZTogYW55O1xuXG4gIEBJbnB1dCgpIGJ1dHRvbkNsaWNrUmVzcG9uc2U6IGFueTtcblxuICBASW5wdXQoKSBmb3JtQ29uZmlnOiBhbnk7XG5cbiAgQElucHV0KCkgZm9ybURhdGE6IGFueTtcblxuICBASW5wdXQoKSBpc01vYmlsZVZpZXcgPSBmYWxzZTtcblxuICBASW5wdXQoKSBwb3B1cEZvcm1DYWxsYmFjazogYW55ID0gdW5kZWZpbmVkO1xuXG4gIEBJbnB1dCgpIHVzZXJDb25maWc6IGFueTtcblxuICBASW5wdXQoKSBzdGVwQ29uZmlnOiBhbnk7XG5cbiAgQElucHV0KCkgcmVkdXhEYXRhOiBhbnkgPSB7fTtcblxuICBAT3V0cHV0KCkgZ2V0TG9nczogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAT3V0cHV0KCkgZ2V0VW5zYXZlZERhdGFTdGF0ZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAT3V0cHV0KCkgb25BY3Rpb25TaG93UG9wdXBGb3JtOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBPdXRwdXQoKSBvbkNsaWNrQXBpQ2FsbDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAT3V0cHV0KCkgb25DbGlja1ZpZXdGaWxlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBPdXRwdXQoKSBvbkNsaWNrRm9ybUZpZWxkQnV0dG9uOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBPdXRwdXQoKSBvbkNsaWNrR29CYWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBPdXRwdXQoKSBvbkNsaWNrU2F2ZUZvcm06IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQE91dHB1dCgpIG9uQ2xpY2tWaWV3Rm9ybXM6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgZmllbGRHcm91cHM6IGFueSA9IHt9O1xuXG4gIGZvcm1GaWVsZHM6IGFueVtdID0gW107XG5cbiAgcHJldmlvdXNGb3JtRGF0YTogYW55ID0ge307XG5cbiAgY2FtZXJhRGF0YTogYW55ID0ge307XG5cbiAgaXNTaG93Q2FtZXJhID0gZmFsc2U7XG5cbiAgaXNTaG93Q2FtZXJhRnVsbHNjcmVlbiA9IGZhbHNlO1xuXG4gIGFjdGl2ZUNhbWVyYUZpZWxkS2V5ID0gXCJcIjtcblxuICBhY3RpdmVDYW1lcmFEYXRhOiBhbnkgPSB7fTtcblxuICBhY3RpdmVDYW1lcmFUeXBlOiBcIkNBUFRVUkVcIiB8IFwiUkVDT1JEXCIgPSB1bmRlZmluZWQ7XG5cbiAgYWN0aXZlQ2FtZXJhSW1hZ2UgPSBcIlwiO1xuXG4gIGFjdGl2ZUNhbWVyYVZpZGVvID0gXCJcIjtcblxuICBhY3RpdmVDYW1lcmFDb25maWc6IGFueSA9IHVuZGVmaW5lZDtcblxuICBhY3RpdmVDYW1lcmFSZWNvcmRpbmdUaW1lID0gMDtcblxuICBhY3RpdmVDYW1lcmFSZWNvcmRpbmdUaW1lclN1YmNyaXB0aW9uOiBhbnkgPSB1bmRlZmluZWQ7XG5cbiAgYWN0aXZlQ2FtZXJhUmVjb3JkaW5nU3RhdGUgPSBcIk5PTkVcIjtcblxuICBhY3RpdmVDYW1lcmFSZWNvcmRpbmdTdGF0ZVN1YmNyaXB0aW9uOiBhbnkgPSB1bmRlZmluZWQ7XG5cbiAgQGxvZ01ldGhvZFxuICByZXNldENhbWVyYSgpOiB2b2lkIHtcbiAgICB0aGlzLmlzU2hvd0NhbWVyYSA9IGZhbHNlO1xuICAgIHRoaXMuaXNTaG93Q2FtZXJhRnVsbHNjcmVlbiA9IGZhbHNlO1xuICAgIHRoaXMuYWN0aXZlQ2FtZXJhRmllbGRLZXkgPSBcIlwiO1xuICAgIHRoaXMuYWN0aXZlQ2FtZXJhRGF0YSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmFjdGl2ZUNhbWVyYVR5cGUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5hY3RpdmVDYW1lcmFJbWFnZSA9IFwiXCI7XG4gICAgdGhpcy5hY3RpdmVDYW1lcmFWaWRlbyA9IFwiXCI7XG4gICAgdGhpcy5hY3RpdmVDYW1lcmFDb25maWcgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5hY3RpdmVDYW1lcmFSZWNvcmRpbmdUaW1lID0gMDtcbiAgICB0aGlzLmFjdGl2ZUNhbWVyYVJlY29yZGluZ1N0YXRlID0gXCJOT05FXCI7XG4gIH1cblxuICBwcmV2aWV3UHJvcGVydGllczogYW55ID0ge1xuICAgIGh0bWw6IHtcbiAgICAgIGJlZm9yZTogXCJcIixcbiAgICAgIGJlZm9yZVN0eWxlczogXCJcIixcbiAgICAgIGFmdGVyOiBcIlwiLFxuICAgICAgYWZ0ZXJTdHlsZXM6IFwiXCJcbiAgICB9LFxuICAgIGlmcmFtZToge1xuICAgICAgc3JjOiBcIlwiLFxuICAgICAgdGl0bGU6IFwiXCJcbiAgICB9LFxuICAgIHR5cGU6IFwiZGlhbG9nXCIsXG4gICAgc2l6ZTogXCJhdXRvXCIsXG4gICAgcG9wdXBGb3JtS2V5OiBcIlwiLFxuICAgIHRpdGxlOiBcIlwiLFxuICAgIHVuYXZhaWxhYmxlOiBmYWxzZVxuICB9O1xuXG4gIGxvYWRpbmcgPSB0cnVlO1xuXG4gIGFwaUxvYWRpbmcgPSBmYWxzZTtcblxuICBiYWNrQnV0dG9uID0ge1xuICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICBzaG93TG9hZGVyOiBmYWxzZVxuICB9O1xuXG4gIHZpZXdGb3Jtc0J1dHRvbiA9IHtcbiAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgc2hvd0xvYWRlcjogZmFsc2VcbiAgfTtcblxuICBzYXZlRm9ybUJ1dHRvbiA9IHtcbiAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgc2hvd0xvYWRlcjogZmFsc2VcbiAgfTtcblxuICBmaWxlczogYW55ID0ge307XG5cbiAgbWVkaWFGaWxlczogYW55ID0ge307XG5cbiAgc3RvcFRhc2tFeGVjdXRpb24gPSBmYWxzZTtcblxuICB3YWl0aW5nRm9yQ2hhbmdlcyA9IGZhbHNlO1xuXG4gIHBvcHVwRm9ybUNvbmZpZzogYW55ID0gdW5kZWZpbmVkO1xuXG4gIHBvcHVwRm9ybURhdGE6IGFueSA9IHt9O1xuXG4gIHRhc2tEYXRhOiBhbnkgPSB7fTtcblxuICBwcmV2aWV3RGlhbG9nUmVmOiBhbnk7XG5cbiAgZm9ybUdyb3VwOiBGb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGZvcm1WaWV3U2VydmljZTogS3dpa0lERm9ybVZpZXdTZXJ2aWNlLFxuICAgIHByaXZhdGUgZm9ybVZpZXdBcGlTZXJ2aWNlOiBLd2lrSURGb3JtVmlld0FwaVNlcnZpY2UsXG4gICAgQEluamVjdChUdWlQdXNoU2VydmljZSlcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgcHVzaFNlcnZpY2U6IFR1aVB1c2hTZXJ2aWNlLFxuICAgIEBJbmplY3QoVHVpQWxlcnRTZXJ2aWNlKVxuICAgIHByb3RlY3RlZCByZWFkb25seSBhbGVydFNlcnZpY2U6IFR1aUFsZXJ0U2VydmljZSxcbiAgICBASW5qZWN0KFR1aVByZXZpZXdEaWFsb2dTZXJ2aWNlKVxuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJldmlld0RpYWxvZ1NlcnZpY2U6IFR1aVByZXZpZXdEaWFsb2dTZXJ2aWNlLFxuICAgIEBJbmplY3QoVHVpRGlhbG9nU2VydmljZSlcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRpYWxvZ1NlcnZpY2U6IFR1aURpYWxvZ1NlcnZpY2UsXG4gICAgcHVibGljIGxvYWRlclNlcnZpY2U6IEt3aWtVSUxvYWRlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjYW1lcmFSZWNvcmRTZXJ2aWNlOiBLd2lrSURDYW1lcmFSZWNvcmRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjJcbiAgKSB7fVxuXG4gIEBsb2dNZXRob2RcbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5yZWR1eERhdGEgPSB0aGlzLnJlZHV4RGF0YSA/PyB7fTtcbiAgICB0aGlzLnN5bmNBcGlTdG9yYWdlQ29udGV4dCgpO1xuXG4gICAgKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuaW5pdEZvcm1Db25maWcodGhpcy5mb3JtQ29uZmlnKTtcblxuICAgICAgaWYgKHJlcykge1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLmFjdGl2ZUNhbWVyYVJlY29yZGluZ1RpbWVyU3ViY3JpcHRpb24gPSB0aGlzLmNhbWVyYVJlY29yZFNlcnZpY2VcbiAgICAgICAgICAuZ2V0VGltZXJVcGRhdGUoKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKHRpbWU6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVDYW1lcmFSZWNvcmRpbmdUaW1lID0gdGltZTtcbiAgICAgICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hY3RpdmVDYW1lcmFSZWNvcmRpbmdTdGF0ZVN1YmNyaXB0aW9uID0gdGhpcy5jYW1lcmFSZWNvcmRTZXJ2aWNlXG4gICAgICAgICAgLmdldFJlY29yZGluZ1N0YXRlKClcbiAgICAgICAgICAuc3Vic2NyaWJlKChzdGF0ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUNhbWVyYVJlY29yZGluZ1N0YXRlID0gc3RhdGU7XG4gICAgICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSkoKTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGNvbnN0IHZlcmlmeUNoYW5nZSA9IChrZXk6IHN0cmluZykgPT4ge1xuICAgICAgcmV0dXJuIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGNoYW5nZXMsIGtleSkgJiYgIWNoYW5nZXNba2V5XS5maXJzdENoYW5nZTtcbiAgICB9O1xuICAgIGlmICh2ZXJpZnlDaGFuZ2UoXCJleHRyYURhdGFcIikpIHtcbiAgICAgIHRoaXMuZXh0cmFEYXRhID0gY2hhbmdlcy5leHRyYURhdGEuY3VycmVudFZhbHVlO1xuICAgIH1cbiAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoY2hhbmdlcywgXCJ1c2VyQ29uZmlnXCIpKSB7XG4gICAgICB0aGlzLnVzZXJDb25maWcgPSBjaGFuZ2VzLnVzZXJDb25maWcuY3VycmVudFZhbHVlO1xuICAgICAgdGhpcy5zeW5jQXBpU3RvcmFnZUNvbnRleHQoKTtcbiAgICB9XG4gICAgaWYgKHZlcmlmeUNoYW5nZShcInN0ZXBDb25maWdcIikpIHtcbiAgICAgIHRoaXMuc3RlcENvbmZpZyA9IGNoYW5nZXMuc3RlcENvbmZpZy5jdXJyZW50VmFsdWU7XG4gICAgfVxuICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhjaGFuZ2VzLCBcInJlZHV4RGF0YVwiKSkge1xuICAgICAgdGhpcy5yZWR1eERhdGEgPSBjaGFuZ2VzLnJlZHV4RGF0YS5jdXJyZW50VmFsdWUgPz8ge307XG4gICAgICB0aGlzLnN5bmNBcGlTdG9yYWdlQ29udGV4dCgpO1xuICAgIH1cbiAgICBpZiAodmVyaWZ5Q2hhbmdlKFwiZm9ybURhdGFcIikpIHtcbiAgICAgIGlmIChcbiAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoY2hhbmdlcy5mb3JtRGF0YS5jdXJyZW50VmFsdWUsIFwiZGF0YVwiKSAmJlxuICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyhjaGFuZ2VzLmZvcm1EYXRhLmN1cnJlbnRWYWx1ZSwgXCJleHRlbmRlZERhdGFcIilcbiAgICAgICkge1xuICAgICAgICB0aGlzLmZvcm1EYXRhID0ge1xuICAgICAgICAgIC4uLnRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgLi4uY2hhbmdlcy5mb3JtRGF0YS5jdXJyZW50VmFsdWUuZGF0YVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5mb3JtRGF0YSA9IHtcbiAgICAgICAgICAuLi50aGlzLmZvcm1EYXRhLFxuICAgICAgICAgIC4uLmNoYW5nZXMuZm9ybURhdGEuY3VycmVudFZhbHVlXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh2ZXJpZnlDaGFuZ2UoXCJwb3B1cEZvcm1DYWxsYmFja1wiKSkge1xuICAgICAgaWYgKGlzTm90RW1wdHlWYWx1ZShjaGFuZ2VzLnBvcHVwRm9ybUNhbGxiYWNrLmN1cnJlbnRWYWx1ZSkpIHtcbiAgICAgICAgY29uc3QgcG9wdXBGb3JtRGF0YSA9XG4gICAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoXG4gICAgICAgICAgICBjaGFuZ2VzLnBvcHVwRm9ybUNhbGxiYWNrLmN1cnJlbnRWYWx1ZS5wb3B1cEZvcm1EYXRhLFxuICAgICAgICAgICAgXCJkYXRhXCJcbiAgICAgICAgICApICYmXG4gICAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoXG4gICAgICAgICAgICBjaGFuZ2VzLnBvcHVwRm9ybUNhbGxiYWNrLmN1cnJlbnRWYWx1ZS5wb3B1cEZvcm1EYXRhLFxuICAgICAgICAgICAgXCJleHRlbmRlZERhdGFcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgID8gY2hhbmdlcy5wb3B1cEZvcm1DYWxsYmFjay5jdXJyZW50VmFsdWUucG9wdXBGb3JtRGF0YS5kYXRhXG4gICAgICAgICAgICA6IGNoYW5nZXMucG9wdXBGb3JtQ2FsbGJhY2suY3VycmVudFZhbHVlLnBvcHVwRm9ybURhdGE7XG5cbiAgICAgICAgY29uc3QgeyBwb3B1cEZvcm1Db25maWcgfSA9IGNoYW5nZXMucG9wdXBGb3JtQ2FsbGJhY2suY3VycmVudFZhbHVlO1xuXG4gICAgICAgIHRoaXMucG9wdXBGb3JtRGF0YSA9IG1lcmdlT2JqZWN0cyh0aGlzLnBvcHVwRm9ybURhdGEsIHtcbiAgICAgICAgICBbcG9wdXBGb3JtQ29uZmlnLmtleV06IHBvcHVwRm9ybURhdGFcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5mb3JtRGF0YSA9IG1lcmdlT2JqZWN0cyh0aGlzLmZvcm1EYXRhLCB0aGlzLnBvcHVwRm9ybURhdGEpO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyhcbiAgICAgICAgICAgIGNoYW5nZXMucG9wdXBGb3JtQ2FsbGJhY2suY3VycmVudFZhbHVlLFxuICAgICAgICAgICAgXCJzdG9wVGFza0V4ZWN1dGlvblwiXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnN0b3BUYXNrRXhlY3V0aW9uID1cbiAgICAgICAgICAgIGNoYW5nZXMucG9wdXBGb3JtQ2FsbGJhY2suY3VycmVudFZhbHVlLnN0b3BUYXNrRXhlY3V0aW9uO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc3RvcFRhc2tFeGVjdXRpb24gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLndhaXRpbmdGb3JDaGFuZ2VzID0gZmFsc2U7XG4gICAgfVxuICAgIGlmICh2ZXJpZnlDaGFuZ2UoXCJpc01vYmlsZVZpZXdcIikpIHtcbiAgICAgIHRoaXMuaXNNb2JpbGVWaWV3ID0gY2hhbmdlcy5pc01vYmlsZVZpZXcuY3VycmVudFZhbHVlO1xuICAgIH1cbiAgICBpZiAodmVyaWZ5Q2hhbmdlKFwiYXBpQ2FsbFJlc3BvbnNlXCIpKSB7XG4gICAgICB0aGlzLmFwaUNhbGxSZXNwb25zZSA9IGNoYW5nZXMuYXBpQ2FsbFJlc3BvbnNlLmN1cnJlbnRWYWx1ZTtcblxuICAgICAgY29uc3QgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleShcbiAgICAgICAgdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICB0aGlzLmFwaUNhbGxSZXNwb25zZS5rZXlcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gdGhpcy5hcGlDYWxsUmVzcG9uc2U/LnJlc3BvbnNlO1xuXG4gICAgICBzd2l0Y2ggKGZpZWxkLnR5cGUpIHtcbiAgICAgICAgY2FzZSBFRmllbGRUeXBlLkZJTEU6XG4gICAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICBjb25zdCB1cGRhdGVkRmlsZSA9IGdldE9iamVjdERlZXBDb3B5KHtcbiAgICAgICAgICAgICAgaWQ6IHV1aWR2NCgpLFxuICAgICAgICAgICAgICAuLi5yZXNwb25zZVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19BUElfUkVTUE9OU0VfVVBMT0FEX0ZJTEUsIHtcbiAgICAgICAgICAgICAgYXBpX2tleTogdGhpcy5hcGlDYWxsUmVzcG9uc2Uua2V5LFxuICAgICAgICAgICAgICBmaWVsZF9rZXk6IHRoaXMuYXBpQ2FsbFJlc3BvbnNlLmtleSxcbiAgICAgICAgICAgICAgcmVzcG9uc2VfdHlwZTogXCJGSUxFX1VQTE9BRF9BUElfU1VDQ0VTU1wiLFxuICAgICAgICAgICAgICByZXNwb25zZVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMudXBkYXRlRmlsZXModXBkYXRlZEZpbGUsIFwiTk9STUFMXCIsIHRoaXMuYXBpQ2FsbFJlc3BvbnNlLmtleSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRGaWxlID0gZ2V0T2JqZWN0RGVlcENvcHkoe1xuICAgICAgICAgICAgICBpZDogdXVpZHY0KCksXG4gICAgICAgICAgICAgIC4uLnRoaXMuYXBpQ2FsbFJlc3BvbnNlPy5wYXlsb2FkPy5tZXRhZGF0YVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19BUElfUkVTUE9OU0VfVVBMT0FEX0ZJTEUsIHtcbiAgICAgICAgICAgICAgYXBpX2tleTogdGhpcy5hcGlDYWxsUmVzcG9uc2Uua2V5LFxuICAgICAgICAgICAgICBmaWVsZF9rZXk6IHRoaXMuYXBpQ2FsbFJlc3BvbnNlLmtleSxcbiAgICAgICAgICAgICAgcmVzcG9uc2VfdHlwZTogXCJGSUxFX1VQTE9BRF9BUElfRVJST1JcIlxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMudXBkYXRlRmlsZXModXBkYXRlZEZpbGUsIFwiRVJST1JcIiwgdGhpcy5hcGlDYWxsUmVzcG9uc2Uua2V5KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmhpZGVBcGlMb2FkZXIoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFRmllbGRUeXBlLkNBUFRVUkU6XG4gICAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0Q2FtZXJhKCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGltYWdlID0gcmVzcG9uc2U/LmltYWdlX3VybDtcbiAgICAgICAgICAgIGNvbnN0IGltYWdlT2NyID0gcmVzcG9uc2U/LmltYWdlX29jcjtcbiAgICAgICAgICAgIGNvbnN0IGltYWdlRmFjZW1hdGNoID0gcmVzcG9uc2U/LmltYWdlX2ZhY2VtYXRjaDtcbiAgICAgICAgICAgIGNvbnN0IGltYWdlTGl2ZWxpbmVzcyA9IHJlc3BvbnNlPy5pbWFnZV9saXZlbGluZXNzO1xuICAgICAgICAgICAgY29uc3QgaW1hZ2VXYXRlcm1hcmsgPSByZXNwb25zZT8uaW1hZ2Vfd2F0ZXJtYXJrO1xuXG4gICAgICAgICAgICBjb25zdCBpc0NoZWNrQ2FtZXJhRmVhdHVyZXMgPSAoKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgaW1hZ2VPY3IgfHwgaW1hZ2VMaXZlbGluZXNzIHx8IGltYWdlRmFjZW1hdGNoIHx8IGltYWdlV2F0ZXJtYXJrXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBpbWFnZURhdGEgPSBpc0NoZWNrQ2FtZXJhRmVhdHVyZXMoKVxuICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgIGltYWdlLFxuICAgICAgICAgICAgICAgICAgLi4uKGltYWdlT2NyICYmIHsgb2NyOiBpbWFnZU9jciB9KSxcbiAgICAgICAgICAgICAgICAgIC4uLihpbWFnZUZhY2VtYXRjaCAmJiB7IGZhY2VtYXRjaDogaW1hZ2VGYWNlbWF0Y2ggfSksXG4gICAgICAgICAgICAgICAgICAuLi4oaW1hZ2VMaXZlbGluZXNzICYmIHsgbGl2ZWxpbmVzczogaW1hZ2VMaXZlbGluZXNzIH0pLFxuICAgICAgICAgICAgICAgICAgLi4uKGltYWdlV2F0ZXJtYXJrICYmIHsgd2F0ZXJtYXJrOiBpbWFnZVdhdGVybWFyayB9KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgOiBpbWFnZTtcblxuICAgICAgICAgICAgdGhpcy5mb3JtRGF0YVtmaWVsZC5rZXldID0gZ2V0T2JqZWN0RGVlcENvcHkoW2ltYWdlRGF0YV0pO1xuICAgICAgICAgICAgdGhpcy5jYW1lcmFEYXRhW2ZpZWxkLmtleV0gPSBnZXRPYmplY3REZWVwQ29weShpbWFnZURhdGEpO1xuICAgICAgICAgICAgdGhpcy5tZWRpYUZpbGVzW2ZpZWxkLmtleV0gPSBnZXRPYmplY3REZWVwQ29weShbaW1hZ2VEYXRhXSk7XG5cbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0ucGF0Y2hWYWx1ZShcbiAgICAgICAgICAgICAgZ2V0T2JqZWN0RGVlcENvcHkoW2ltYWdlRGF0YV0pLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZW1pdEV2ZW50OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBvbmx5U2VsZjogZmFsc2VcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUoXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBbZmllbGQua2V5XTogZ2V0T2JqZWN0RGVlcENvcHkoW2ltYWdlRGF0YV0pXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHsgZW1pdEV2ZW50OiBmYWxzZSB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtcbiAgICAgICAgICAgICAgZW1pdEV2ZW50OiBmYWxzZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtcbiAgICAgICAgICAgICAgZW1pdEV2ZW50OiBmYWxzZVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuZ2V0VW5zYXZlZERhdGFTdGF0ZS5lbWl0KHRydWUpO1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGZpZWxkLmlzRm9ybUVsZW1lbnQgJiZcbiAgICAgICAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwidmFsaWRhdGlvblwiKSAmJlxuICAgICAgICAgICAgICBmaWVsZC52YWxpZGF0aW9uLnRyaWdnZXJzLmluY2x1ZGVzKFwiT05fQ0hBTkdFXCIpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgY29uc3QgcnVsZUVuZ2luZSA9IG5ldyBSdWxlRW5naW5lKFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIEZJRUxEX0NPTkZJRzogZmllbGQsXG4gICAgICAgICAgICAgICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgICAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgICAgICAgICAgICAgUkVEVVhfREFUQTogdGhpcy5yZWR1eERhdGEsXG4gICAgICAgICAgICAgICAgICBDQU1FUkFfREFUQTogdGhpcy5jYW1lcmFEYXRhLFxuICAgICAgICAgICAgICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgICAgICAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgICAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGEsXG4gICAgICAgICAgICAgICAgICBFWFRSQV9EQVRBOiB0aGlzLmV4dHJhRGF0YVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGF3YWl0IHJ1bGVFbmdpbmUucnVuKGZpZWxkLnZhbGlkYXRpb24pO1xuICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGZpZWxkLmlzRm9ybUVsZW1lbnQgJiZcbiAgICAgICAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwiY29ubmVjdGVkRWxlbWVudHNcIilcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0aGlzLmhhbmRsZUNvbm5lY3RlZEVsZW1lbnRzKFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGtleTogZmllbGQua2V5LFxuICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0udmFsdWVcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiT05fQ0hBTkdFXCJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0FQSV9SRVNQT05TRV9VUExPQURfSU1BR0UsIHtcbiAgICAgICAgICAgICAgYXBpX2tleTogdGhpcy5hcGlDYWxsUmVzcG9uc2Uua2V5LFxuICAgICAgICAgICAgICBmaWVsZF9rZXk6IHRoaXMuYXBpQ2FsbFJlc3BvbnNlLmtleSxcbiAgICAgICAgICAgICAgcmVzcG9uc2VfdHlwZTogXCJJTUFHRV9VUExPQURfQVBJX1NVQ0NFU1NcIixcbiAgICAgICAgICAgICAgcmVzcG9uc2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fQVBJX1JFU1BPTlNFX1VQTE9BRF9JTUFHRSwge1xuICAgICAgICAgICAgICBhcGlfa2V5OiB0aGlzLmFwaUNhbGxSZXNwb25zZS5rZXksXG4gICAgICAgICAgICAgIGZpZWxkX2tleTogdGhpcy5hcGlDYWxsUmVzcG9uc2Uua2V5LFxuICAgICAgICAgICAgICByZXNwb25zZV90eXBlOiBcIklNQUdFX1VQTE9BRF9BUElfRVJST1JcIlxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJGaWxlIFVwbG9hZCBmb3IgSW1hZ2UgRmFpbGVkXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmhpZGVBcGlMb2FkZXIoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFRmllbGRUeXBlLlJFQ09SRDpcbiAgICAgICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRDYW1lcmEoKTtcblxuICAgICAgICAgICAgY29uc3QgdmlkZW8gPSByZXNwb25zZT8udmlkZW9fdXJsO1xuXG4gICAgICAgICAgICB0aGlzLmZvcm1EYXRhW2ZpZWxkLmtleV0gPSBnZXRPYmplY3REZWVwQ29weShbdmlkZW9dKTtcbiAgICAgICAgICAgIHRoaXMuY2FtZXJhRGF0YVtmaWVsZC5rZXldID0gZ2V0T2JqZWN0RGVlcENvcHkodmlkZW8pO1xuICAgICAgICAgICAgdGhpcy5tZWRpYUZpbGVzW2ZpZWxkLmtleV0gPSBnZXRPYmplY3REZWVwQ29weShbdmlkZW9dKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0ucGF0Y2hWYWx1ZShcbiAgICAgICAgICAgICAgZ2V0T2JqZWN0RGVlcENvcHkoW3ZpZGVvXSksXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIG9ubHlTZWxmOiBmYWxzZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZShcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIFtmaWVsZC5rZXldOiBnZXRPYmplY3REZWVwQ29weShbdmlkZW9dKVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7IGVtaXRFdmVudDogZmFsc2UgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7XG4gICAgICAgICAgICAgIGVtaXRFdmVudDogZmFsc2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7XG4gICAgICAgICAgICAgIGVtaXRFdmVudDogZmFsc2VcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLmdldFVuc2F2ZWREYXRhU3RhdGUuZW1pdCh0cnVlKTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBmaWVsZC5pc0Zvcm1FbGVtZW50ICYmXG4gICAgICAgICAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLCBcInZhbGlkYXRpb25cIikgJiZcbiAgICAgICAgICAgICAgZmllbGQudmFsaWRhdGlvbi50cmlnZ2Vycy5pbmNsdWRlcyhcIk9OX0NIQU5HRVwiKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJ1bGVFbmdpbmUgPSBuZXcgUnVsZUVuZ2luZShcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBGSUVMRF9DT05GSUc6IGZpZWxkLFxuICAgICAgICAgICAgICAgICAgRk9STV9GSUVMRFM6IHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgICAgICAgICAgICAgIEZPUk1fREFUQTogdGhpcy5mb3JtRGF0YSxcbiAgICAgICAgICAgICAgICAgIFJFRFVYX0RBVEE6IHRoaXMucmVkdXhEYXRhLFxuICAgICAgICAgICAgICAgICAgQ0FNRVJBX0RBVEE6IHRoaXMuY2FtZXJhRGF0YSxcbiAgICAgICAgICAgICAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgICAgICAgICAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgICAgICAgICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuYWxsRm9ybXNEYXRhLFxuICAgICAgICAgICAgICAgICAgRVhUUkFfREFUQTogdGhpcy5leHRyYURhdGFcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHRoaXMudGFrZUFjdGlvbi5iaW5kKHRoaXMpXG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICBhd2FpdCBydWxlRW5naW5lLnJ1bihmaWVsZC52YWxpZGF0aW9uKTtcbiAgICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBmaWVsZC5pc0Zvcm1FbGVtZW50ICYmXG4gICAgICAgICAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLCBcImNvbm5lY3RlZEVsZW1lbnRzXCIpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhpcy5oYW5kbGVDb25uZWN0ZWRFbGVtZW50cyhcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBrZXk6IGZpZWxkLmtleSxcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldLnZhbHVlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcIk9OX0NIQU5HRVwiXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19BUElfUkVTUE9OU0VfVVBMT0FEX1ZJREVPLCB7XG4gICAgICAgICAgICAgIGFwaV9rZXk6IHRoaXMuYXBpQ2FsbFJlc3BvbnNlLmtleSxcbiAgICAgICAgICAgICAgZmllbGRfa2V5OiB0aGlzLmFwaUNhbGxSZXNwb25zZS5rZXksXG4gICAgICAgICAgICAgIHJlc3BvbnNlX3R5cGU6IFwiVklERU9fVVBMT0FEX0FQSV9TVUNDRVNTXCIsXG4gICAgICAgICAgICAgIHJlc3BvbnNlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0FQSV9SRVNQT05TRV9VUExPQURfVklERU8sIHtcbiAgICAgICAgICAgICAgYXBpX2tleTogdGhpcy5hcGlDYWxsUmVzcG9uc2Uua2V5LFxuICAgICAgICAgICAgICBmaWVsZF9rZXk6IHRoaXMuYXBpQ2FsbFJlc3BvbnNlLmtleSxcbiAgICAgICAgICAgICAgcmVzcG9uc2VfdHlwZTogXCJWSURFT19VUExPQURfQVBJX0VSUk9SXCJcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRmlsZSBVcGxvYWQgZm9yIFZpZGVvIEZhaWxlZFwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5oaWRlQXBpTG9hZGVyKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRUZpZWxkVHlwZS5MSVZFX0xPQ0FUSU9OOlxuICAgICAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICAgICAgdGhpcy5mb3JtRGF0YVtmaWVsZC5rZXldID0gZ2V0T2JqZWN0RGVlcENvcHkocmVzcG9uc2UpO1xuXG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldLnBhdGNoVmFsdWUoXG4gICAgICAgICAgICAgIGdldE9iamVjdERlZXBDb3B5KHJlc3BvbnNlKSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVtaXRFdmVudDogZmFsc2UsXG4gICAgICAgICAgICAgICAgb25seVNlbGY6IGZhbHNlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgW2ZpZWxkLmtleV06IGdldE9iamVjdERlZXBDb3B5KHJlc3BvbnNlKVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7IGVtaXRFdmVudDogZmFsc2UgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7XG4gICAgICAgICAgICAgIGVtaXRFdmVudDogZmFsc2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7XG4gICAgICAgICAgICAgIGVtaXRFdmVudDogZmFsc2VcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLmdldFVuc2F2ZWREYXRhU3RhdGUuZW1pdCh0cnVlKTtcblxuICAgICAgICAgICAgY29uc3QgYXBpcyA9IG5ldyBBcGlzKFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgRklFTERfQ09ORklHOiBmaWVsZCxcbiAgICAgICAgICAgICAgICBBUElfQ09ORklHOiBmaWVsZC5hcGksXG4gICAgICAgICAgICAgICAgQVBJX1JFU1BPTlNFOiByZXNwb25zZSxcbiAgICAgICAgICAgICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgICAgICAgIEZPUk1fREFUQTogdGhpcy5mb3JtRGF0YSxcbiAgICAgICAgICAgICAgICBSRURVWF9EQVRBOiB0aGlzLnJlZHV4RGF0YSxcbiAgICAgICAgICAgICAgICBDQU1FUkFfREFUQTogdGhpcy5jYW1lcmFEYXRhLFxuICAgICAgICAgICAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgICAgICAgICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgICAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGEsXG4gICAgICAgICAgICAgICAgRVhUUkFfREFUQTogdGhpcy5leHRyYURhdGFcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGFwaSA9IGF3YWl0IGFwaXMudmFsaWRhdGVSZXNwb25zZSgpO1xuICAgICAgICAgICAgICBmaWVsZC5hcGkgPSBhcGk7XG4gICAgICAgICAgICB9KSgpO1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGZpZWxkLmlzRm9ybUVsZW1lbnQgJiZcbiAgICAgICAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwidmFsaWRhdGlvblwiKSAmJlxuICAgICAgICAgICAgICBmaWVsZC52YWxpZGF0aW9uLnRyaWdnZXJzLmluY2x1ZGVzKFwiT05fQ0hBTkdFXCIpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgY29uc3QgcnVsZUVuZ2luZSA9IG5ldyBSdWxlRW5naW5lKFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIEZJRUxEX0NPTkZJRzogZmllbGQsXG4gICAgICAgICAgICAgICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgICAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgICAgICAgICAgICAgUkVEVVhfREFUQTogdGhpcy5yZWR1eERhdGEsXG4gICAgICAgICAgICAgICAgICBDQU1FUkFfREFUQTogdGhpcy5jYW1lcmFEYXRhLFxuICAgICAgICAgICAgICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgICAgICAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgICAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGEsXG4gICAgICAgICAgICAgICAgICBFWFRSQV9EQVRBOiB0aGlzLmV4dHJhRGF0YVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGF3YWl0IHJ1bGVFbmdpbmUucnVuKGZpZWxkLnZhbGlkYXRpb24pO1xuICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGZpZWxkLmlzRm9ybUVsZW1lbnQgJiZcbiAgICAgICAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwiY29ubmVjdGVkRWxlbWVudHNcIilcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0aGlzLmhhbmRsZUNvbm5lY3RlZEVsZW1lbnRzKFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGtleTogZmllbGQua2V5LFxuICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0udmFsdWVcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiT05fQ0hBTkdFXCJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5oaWRlQXBpTG9hZGVyKCk7XG5cbiAgICAgICAgICAgIHRoaXMudHJpZ2dlckxvZ3MoXG4gICAgICAgICAgICAgIEVMb2dFdmVudFR5cGUuRk9STV9fQVBJX1JFU1BPTlNFX1JFVkVSU0VfTEFUX0xPTkcsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhcGlfa2V5OiB0aGlzLmFwaUNhbGxSZXNwb25zZS5rZXksXG4gICAgICAgICAgICAgICAgZmllbGRfa2V5OiB0aGlzLmFwaUNhbGxSZXNwb25zZS5rZXksXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VfdHlwZTogXCJSRVZFUlNFX0xBVF9MT05HX0FQSV9TVUNDRVNTXCIsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy50cmlnZ2VyTG9ncyhcbiAgICAgICAgICAgICAgRUxvZ0V2ZW50VHlwZS5GT1JNX19BUElfUkVTUE9OU0VfUkVWRVJTRV9MQVRfTE9ORyxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFwaV9rZXk6IHRoaXMuYXBpQ2FsbFJlc3BvbnNlLmtleSxcbiAgICAgICAgICAgICAgICBmaWVsZF9rZXk6IHRoaXMuYXBpQ2FsbFJlc3BvbnNlLmtleSxcbiAgICAgICAgICAgICAgICByZXNwb25zZV90eXBlOiBcIlJFVkVSU0VfTEFUX0xPTkdfQVBJX0VSUk9SXCJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3QgYXBpcyA9IG5ldyBBcGlzKFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgRklFTERfQ09ORklHOiBmaWVsZCxcbiAgICAgICAgICAgICAgICBBUElfQ09ORklHOiBmaWVsZC5hcGksXG4gICAgICAgICAgICAgICAgQVBJX1JFU1BPTlNFOiB7fSxcbiAgICAgICAgICAgICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgICAgICAgIEZPUk1fREFUQTogdGhpcy5mb3JtRGF0YSxcbiAgICAgICAgICAgICAgICBSRURVWF9EQVRBOiB0aGlzLnJlZHV4RGF0YSxcbiAgICAgICAgICAgICAgICBDQU1FUkFfREFUQTogdGhpcy5jYW1lcmFEYXRhLFxuICAgICAgICAgICAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgICAgICAgICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgICAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGEsXG4gICAgICAgICAgICAgICAgRVhUUkFfREFUQTogdGhpcy5leHRyYURhdGFcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGFwaSA9IGF3YWl0IGFwaXMudmFsaWRhdGVSZXNwb25zZSgpO1xuICAgICAgICAgICAgICBmaWVsZC5hcGkgPSBhcGk7XG4gICAgICAgICAgICB9KSgpO1xuXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiUmV2ZXJzZSBMb2NhdGlvbiBmb3IgTGF0TG9uZyBGYWlsZWRcIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5oaWRlQXBpTG9hZGVyKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh2ZXJpZnlDaGFuZ2UoXCJidXR0b25DbGlja1Jlc3BvbnNlXCIpKSB7XG4gICAgICB0aGlzLmJ1dHRvbkNsaWNrUmVzcG9uc2UgPSBjaGFuZ2VzLmJ1dHRvbkNsaWNrUmVzcG9uc2UuY3VycmVudFZhbHVlO1xuXG4gICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHModGhpcy5idXR0b25DbGlja1Jlc3BvbnNlLCBcImtleVwiKSkge1xuICAgICAgICBsZXQgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleShcbiAgICAgICAgICB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgdGhpcy5idXR0b25DbGlja1Jlc3BvbnNlPy5rZXlcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHModGhpcy5idXR0b25DbGlja1Jlc3BvbnNlLCBcImRlZmF1bHRcIikpIHtcbiAgICAgICAgICBmaWVsZC5kZWZhdWx0ID0gZ2V0T2JqZWN0RGVlcENvcHkodGhpcy5idXR0b25DbGlja1Jlc3BvbnNlLmRlZmF1bHQpO1xuICAgICAgICAgIGRlbGV0ZSB0aGlzLmJ1dHRvbkNsaWNrUmVzcG9uc2UuZGVmYXVsdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHModGhpcy5idXR0b25DbGlja1Jlc3BvbnNlLCBcIm1lc3NhZ2VzXCIpKSB7XG4gICAgICAgICAgZmllbGQubWVzc2FnZXMgPSBnZXRPYmplY3REZWVwQ29weSh0aGlzLmJ1dHRvbkNsaWNrUmVzcG9uc2UubWVzc2FnZXMpO1xuICAgICAgICAgIGRlbGV0ZSB0aGlzLmJ1dHRvbkNsaWNrUmVzcG9uc2UubWVzc2FnZXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKHRoaXMuYnV0dG9uQ2xpY2tSZXNwb25zZSwgXCJ2YWxpZGF0aW9uXCIpKSB7XG4gICAgICAgICAgZmllbGQudmFsaWRhdGlvbiA9IGdldE9iamVjdERlZXBDb3B5KFxuICAgICAgICAgICAgdGhpcy5idXR0b25DbGlja1Jlc3BvbnNlLnZhbGlkYXRpb25cbiAgICAgICAgICApO1xuICAgICAgICAgIGRlbGV0ZSB0aGlzLmJ1dHRvbkNsaWNrUmVzcG9uc2UudmFsaWRhdGlvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZpZWxkID0gZ2V0T2JqZWN0RGVlcENvcHkoXG4gICAgICAgICAgbWVyZ2VPYmplY3RzKGZpZWxkLCB0aGlzLmJ1dHRvbkNsaWNrUmVzcG9uc2UpXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLCBcInZhbGlkYXRpb25cIikpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZC52YWxpZGF0aW9uLCBcInRyaWdnZXJzXCIpICYmXG4gICAgICAgICAgICBmaWVsZC52YWxpZGF0aW9uLnRyaWdnZXJzLmluY2x1ZGVzKFwiT05fUkVTUE9OU0VcIilcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IHJ1bGVFbmdpbmUgPSBuZXcgUnVsZUVuZ2luZShcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIEZJRUxEX0NPTkZJRzogZmllbGQsXG4gICAgICAgICAgICAgICAgRk9STV9GSUVMRFM6IHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgICAgICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgICAgICAgUkVEVVhfREFUQTogdGhpcy5yZWR1eERhdGEsXG4gICAgICAgICAgICAgICAgQ0FNRVJBX0RBVEE6IHRoaXMuY2FtZXJhRGF0YSxcbiAgICAgICAgICAgICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICAgICAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgICAgICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuYWxsRm9ybXNEYXRhLFxuICAgICAgICAgICAgICAgIEVYVFJBX0RBVEE6IHRoaXMuZXh0cmFEYXRhXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHRoaXMudGFrZUFjdGlvbi5iaW5kKHRoaXMpXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICBhd2FpdCBydWxlRW5naW5lLnJ1bihmaWVsZC52YWxpZGF0aW9uKTtcbiAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh2ZXJpZnlDaGFuZ2UoXCJhbGxGb3Jtc0RhdGFcIikpIHtcbiAgICAgIHRoaXMuYWxsRm9ybXNEYXRhID0gY2hhbmdlcy5hbGxGb3Jtc0RhdGEuY3VycmVudFZhbHVlO1xuICAgIH1cbiAgICBpZiAodmVyaWZ5Q2hhbmdlKFwiZm9ybUNvbmZpZ1wiKSkge1xuICAgICAgdGhpcy5mb3JtQ29uZmlnID0gY2hhbmdlcy5mb3JtQ29uZmlnLmN1cnJlbnRWYWx1ZTtcblxuICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5pbml0Rm9ybUNvbmZpZyh0aGlzLmZvcm1Db25maWcpO1xuICAgICAgfSkoKTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmFjdGl2ZUNhbWVyYVJlY29yZGluZ1RpbWVyU3ViY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuYWN0aXZlQ2FtZXJhUmVjb3JkaW5nVGltZXJTdWJjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5hY3RpdmVDYW1lcmFSZWNvcmRpbmdTdGF0ZVN1YmNyaXB0aW9uKSB7XG4gICAgICB0aGlzLmFjdGl2ZUNhbWVyYVJlY29yZGluZ1N0YXRlU3ViY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIHRyaWdnZXJMb2dzKGV2ZW50VHlwZTogRUxvZ0V2ZW50VHlwZSwgbG9nczogYW55KSB7XG4gICAgdGhpcy5nZXRMb2dzLmVtaXQoXG4gICAgICBmb3JtYXRFdmVudExvZ3MoXG4gICAgICAgIGV2ZW50VHlwZSxcbiAgICAgICAgdGhpcy5zdGVwQ29uZmlnLFxuICAgICAgICB0aGlzLmZvcm1Db25maWcsXG4gICAgICAgIGdldE9iamVjdERlZXBDb3B5KGxvZ3MpXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgcHJpdmF0ZSBzeW5jQXBpU3RvcmFnZUNvbnRleHQoKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtVmlld0FwaVNlcnZpY2Uuc2V0U3RvcmFnZUNvbnRleHQodGhpcy5yZWR1eERhdGEgPz8ge30sIHRoaXMudXNlckNvbmZpZyk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNvbnZlcnRlcigpOiBDb252ZXJ0ZXIge1xuICAgIHJldHVybiBuZXcgQ29udmVydGVyKHtcbiAgICAgIHJlZHV4RGF0YTogdGhpcy5yZWR1eERhdGEgPz8ge30sXG4gICAgICB1c2VyQ29uZmlnOiB0aGlzLnVzZXJDb25maWdcbiAgICB9KTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgaW5pdEZvcm1Db25maWcoZm9ybUNvbmZpZzogYW55KSB7XG4gICAgY29uc3QgY29udmVydGVyID0gdGhpcy5jcmVhdGVDb252ZXJ0ZXIoKTtcbiAgICBmb3JtQ29uZmlnID0gY29udmVydGVyLmNvbnZlcnRGb3JtQ29uZmlnKGZvcm1Db25maWcpO1xuXG4gICAgZm9ybUNvbmZpZyA9IGNvbnZlcnRlci51cGRhdGVGb3JtQ29uZmlnUHJvcGVydGllcyhmb3JtQ29uZmlnKTtcblxuICAgIHRoaXMuc2V0Rm9ybUZpZWxkc0Zyb21Gb3JtQ29uZmlnKGZvcm1Db25maWcpO1xuXG4gICAgdGhpcy5zZXRGb3JtRmllbGRHcm91cHNGcm9tRm9ybUNvbmZpZyhmb3JtQ29uZmlnKTtcblxuICAgIHRoaXMuc2V0Rm9ybURhdGFGcm9tQWxsRm9ybXNEYXRhKCk7XG5cbiAgICB0aGlzLmZvcm1Db25maWcgPSBmb3JtQ29uZmlnO1xuXG4gICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0NPTkZJR19MT0FEX1NVQ0NFU1MsIHtcbiAgICAgIC4uLihmb3JtQ29uZmlnLnNlcXVlbmNlTm8gJiYge1xuICAgICAgICBmb3JtX3NlcXVlbmNlX25vOiBmb3JtQ29uZmlnLnNlcXVlbmNlTm9cbiAgICAgIH0pLFxuICAgICAgLi4uKGZvcm1Db25maWcuc3RhdHVzICYmIHsgZm9ybV9zdGF0dXM6IGZvcm1Db25maWcuc3RhdHVzIH0pXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBQUkUgRm9ybSBUYXNrc1xuICAgICAqIDEuIEFQSSBDYWxscy5cbiAgICAgKiAyLiBBbHRlciBEYXRhIFN0cnVjdHVyZS5cbiAgICAgKiAzLiBBbHRlciBGb3JtIENvbmZpZy5cbiAgICAgKi9cbiAgICBpZiAoXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyh0aGlzLmZvcm1Db25maWcsIFwidGFza3NcIikgJiZcbiAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKHRoaXMuZm9ybUNvbmZpZy50YXNrcywgXCJwcmVcIilcbiAgICApIHtcbiAgICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19UQVNLX1BSRSwge30pO1xuXG4gICAgICBmb3IgKGNvbnN0IHByZVRhc2sgb2YgdGhpcy5mb3JtQ29uZmlnLnRhc2tzLnByZSkge1xuICAgICAgICBjb25zdCB0YXNrID0gbmV3IFRhc2tzKFxuICAgICAgICAgIHByZVRhc2ssXG4gICAgICAgICAge1xuICAgICAgICAgICAgRk9STV9DT05GSUc6IHRoaXMuZm9ybUNvbmZpZyxcbiAgICAgICAgICAgIEZPUk1fRklFTERTOiB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgICBSRURVWF9EQVRBOiB0aGlzLnJlZHV4RGF0YSxcbiAgICAgICAgICAgIENBTUVSQV9EQVRBOiB0aGlzLmNhbWVyYURhdGEsXG4gICAgICAgICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICAgICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YSxcbiAgICAgICAgICAgIEVYVFJBX0RBVEE6IHRoaXMuZXh0cmFEYXRhXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuc3RvcFRhc2tFeGVjdXRpb24gPSBmYWxzZTtcbiAgICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKHByZVRhc2ssIFwid2FpdFwiKSkge1xuICAgICAgICAgIHRoaXMud2FpdGluZ0ZvckNoYW5nZXMgPSBwcmVUYXNrLndhaXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy53YWl0aW5nRm9yQ2hhbmdlcyA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgdGFzay5leGVjdXRlKCk7XG5cbiAgICAgICAgLy8gV2FpdCBmb3IgbmdPbkNoYW5nZXMgdG8gYmUgY2FsbGVkIGJlZm9yZSBjb250aW51aW5nIHRvIHRoZSBuZXh0IHRhc2tcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICAgICAgICBjb25zdCBpbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLndhaXRpbmdGb3JDaGFuZ2VzKSB7XG4gICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZCk7XG4gICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCBGT1JNX1ZJRVdfVElNRVJTLldBSVRfRk9SX0NIQU5HRVNfQkVGT1JFX01PVklOR19UT19ORVhUX1RBU0spO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5zdG9wVGFza0V4ZWN1dGlvbikge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZm9ybURhdGEgPSBtZXJnZU9iamVjdHModGhpcy5mb3JtRGF0YSwgdGhpcy5wb3B1cEZvcm1EYXRhKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zdG9wVGFza0V4ZWN1dGlvbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuZm9ybUdyb3VwID0gYXdhaXQgdGhpcy5mb3JtVmlld1NlcnZpY2UuY3JlYXRlRm9ybUdyb3VwKFxuICAgICAgdGhpcy5mb3JtRmllbGRzLFxuICAgICAge1xuICAgICAgICBGT1JNX0NPTkZJRzogdGhpcy5mb3JtQ29uZmlnLFxuICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgIFJFRFVYX0RBVEE6IHRoaXMucmVkdXhEYXRhLFxuICAgICAgICBDQU1FUkFfREFUQTogdGhpcy5jYW1lcmFEYXRhLFxuICAgICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGEsXG4gICAgICAgIEVYVFJBX0RBVEE6IHRoaXMuZXh0cmFEYXRhXG4gICAgICB9LFxuICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcbiAgICApO1xuXG4gICAgLyoqXG4gICAgICogRm9yIHNvbWUgcmVhc29uIGlmIHRoZWlyIGEgZmllbGQgb2YgdHlwZSAnSU1BR0UnIHRoZW5cbiAgICAgKiBmb3JtRGF0YSBpcyBhZGRpbmcgYSAndW5kZWZpbmVkJyBrZXkgd2l0aCBsYXN0IGltYWdlJ3MgdmFsdWUgZnJvbSB0aGUgYXJyYXkuXG4gICAgICogQmVsb3cgcGllY2Ugb2YgY29kZSBpcyB0byByZW1vdmUgdGhhdCByZWR1bmRlbnQgdmFsdWUgZnJvbSBmb3JtRGF0YS5cbiAgICAgKi9cbiAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHModGhpcy5mb3JtRGF0YSwgXCJ1bmRlZmluZWRcIikpIHtcbiAgICAgIGRlbGV0ZSB0aGlzLmZvcm1EYXRhLnVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIHRoaXMuZm9ybUZpZWxkcykge1xuICAgICAgaWYgKGZpZWxkLmlzRm9ybUVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5wcmV2aW91c0Zvcm1EYXRhID0ge1xuICAgICAgICAgIC4uLnRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgICAgICBbZmllbGQua2V5XTogY29udmVydEZvcm1GaWVsZFZhbHVlVG9TdGFuZGFyZEZvcm1hdChcbiAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS52YWx1ZVxuICAgICAgICAgIClcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmZvcm1EYXRhID0ge1xuICAgICAgICAgIC4uLnRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgW2ZpZWxkLmtleV06IGNvbnZlcnRGb3JtRmllbGRWYWx1ZVRvU3RhbmRhcmRGb3JtYXQoXG4gICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0udmFsdWVcbiAgICAgICAgICApXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09IEVGaWVsZFR5cGUuRklMRSkge1xuICAgICAgICAgIHRoaXMuZmlsZXNbZmllbGQua2V5XSA9IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0udmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09IEVGaWVsZFR5cGUuQ0FQVFVSRSkge1xuICAgICAgICAgIHRoaXMucmVzZXRDYW1lcmEoKTtcblxuICAgICAgICAgIHRoaXMuY2FtZXJhRGF0YSA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMuY2FtZXJhRGF0YSxcbiAgICAgICAgICAgIFtmaWVsZC5rZXldOiBjb252ZXJ0Rm9ybUZpZWxkVmFsdWVUb1N0YW5kYXJkRm9ybWF0KFxuICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS52YWx1ZVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH07XG5cbiAgICAgICAgICB0aGlzLm1lZGlhRmlsZXNbZmllbGQua2V5XSA9IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0udmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09IEVGaWVsZFR5cGUuUkVDT1JEKSB7XG4gICAgICAgICAgdGhpcy5yZXNldENhbWVyYSgpO1xuXG4gICAgICAgICAgdGhpcy5jYW1lcmFEYXRhID0ge1xuICAgICAgICAgICAgLi4udGhpcy5jYW1lcmFEYXRhLFxuICAgICAgICAgICAgW2ZpZWxkLmtleV06IGNvbnZlcnRGb3JtRmllbGRWYWx1ZVRvU3RhbmRhcmRGb3JtYXQoXG4gICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldLnZhbHVlXG4gICAgICAgICAgICApXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHRoaXMubWVkaWFGaWxlc1tmaWVsZC5rZXldID0gdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS52YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0udmFsdWVDaGFuZ2VzXG4gICAgICAgICAgLnBpcGUocGFpcndpc2UoKSlcbiAgICAgICAgICAuc3Vic2NyaWJlKChbcHJldmlvdXNWYWx1ZSwgY3VycmVudFZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wcmV2aW91c0Zvcm1EYXRhID0ge1xuICAgICAgICAgICAgICAuLi50aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgICAgICAgIFtmaWVsZC5rZXldOiBjb252ZXJ0Rm9ybUZpZWxkVmFsdWVUb1N0YW5kYXJkRm9ybWF0KFxuICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgIHByZXZpb3VzVmFsdWVcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdGhpcy5mb3JtRGF0YSA9IHtcbiAgICAgICAgICAgICAgLi4udGhpcy5mb3JtRGF0YSxcbiAgICAgICAgICAgICAgW2ZpZWxkLmtleV06IGNvbnZlcnRGb3JtRmllbGRWYWx1ZVRvU3RhbmRhcmRGb3JtYXQoXG4gICAgICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICAgICAgY3VycmVudFZhbHVlXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmIChmaWVsZC50eXBlID09PSBFRmllbGRUeXBlLkZJTEUpIHtcbiAgICAgICAgICAgICAgdGhpcy5maWxlc1tmaWVsZC5rZXldID0gY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09IEVGaWVsZFR5cGUuQ0FQVFVSRSkge1xuICAgICAgICAgICAgICB0aGlzLnJlc2V0Q2FtZXJhKCk7XG5cbiAgICAgICAgICAgICAgdGhpcy5jYW1lcmFEYXRhID0ge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuY2FtZXJhRGF0YSxcbiAgICAgICAgICAgICAgICBbZmllbGQua2V5XTogY29udmVydEZvcm1GaWVsZFZhbHVlVG9TdGFuZGFyZEZvcm1hdChcbiAgICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgICAgY3VycmVudFZhbHVlXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIHRoaXMubWVkaWFGaWxlc1tmaWVsZC5rZXldID0gY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09IEVGaWVsZFR5cGUuUkVDT1JEKSB7XG4gICAgICAgICAgICAgIHRoaXMucmVzZXRDYW1lcmEoKTtcblxuICAgICAgICAgICAgICB0aGlzLmNhbWVyYURhdGEgPSB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5jYW1lcmFEYXRhLFxuICAgICAgICAgICAgICAgIFtmaWVsZC5rZXldOiBjb252ZXJ0Rm9ybUZpZWxkVmFsdWVUb1N0YW5kYXJkRm9ybWF0KFxuICAgICAgICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICAgICAgICBjdXJyZW50VmFsdWVcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgdGhpcy5tZWRpYUZpbGVzW2ZpZWxkLmtleV0gPSBjdXJyZW50VmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBmaWVsZCBvZiB0aGlzLmZvcm1GaWVsZHMpIHtcbiAgICAgIGlmIChmaWVsZC5pc0Zvcm1FbGVtZW50KSB7XG4gICAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJ2YWxpZGF0aW9uXCIpKSB7XG4gICAgICAgICAgaWYgKGZpZWxkLnZhbGlkYXRpb24udHJpZ2dlcnMuaW5jbHVkZXMoXCJPTl9JTklUXCIpKSB7XG4gICAgICAgICAgICBjb25zdCBydWxlRW5naW5lID0gbmV3IFJ1bGVFbmdpbmUoXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBGSUVMRF9DT05GSUc6IGZpZWxkLFxuICAgICAgICAgICAgICAgIEZPUk1fRklFTERTOiB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgICAgICAgICAgIFJFRFVYX0RBVEE6IHRoaXMucmVkdXhEYXRhLFxuICAgICAgICAgICAgICAgIENBTUVSQV9EQVRBOiB0aGlzLmNhbWVyYURhdGEsXG4gICAgICAgICAgICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgICAgICAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgICAgICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YSxcbiAgICAgICAgICAgICAgICBFWFRSQV9EQVRBOiB0aGlzLmV4dHJhRGF0YVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgYXdhaXQgcnVsZUVuZ2luZS5ydW4oZmllbGQudmFsaWRhdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLCBcImNvbm5lY3RlZEVsZW1lbnRzXCIpKSB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVDb25uZWN0ZWRFbGVtZW50cyhcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAga2V5OiBmaWVsZC5rZXksXG4gICAgICAgICAgICAgIHZhbHVlOiB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldLnZhbHVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJPTl9JTklUXCJcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIHNldEZvcm1GaWVsZHNGcm9tRm9ybUNvbmZpZyhmb3JtQ29uZmlnOiBhbnkpIHtcbiAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoZm9ybUNvbmZpZywgXCJmaWVsZHNcIikpIHtcbiAgICAgIHRoaXMuZm9ybUZpZWxkcyA9IGZvcm1Db25maWcuZmllbGRzO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmb3JtQ29uZmlnLCBcIm11bHRpRm9ybVwiKSAmJlxuICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZm9ybUNvbmZpZy5tdWx0aUZvcm0sIFwiZmllbGRzXCIpXG4gICAgKSB7XG4gICAgICB0aGlzLmZvcm1GaWVsZHMgPSBmb3JtQ29uZmlnLm11bHRpRm9ybS5maWVsZHM7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBzZXRGb3JtRmllbGRHcm91cHNGcm9tRm9ybUNvbmZpZyhmb3JtQ29uZmlnOiBhbnkpIHtcbiAgICB0aGlzLmZpZWxkR3JvdXBzID0gZm9ybUNvbmZpZy5maWVsZEdyb3VwcztcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgc2V0Rm9ybURhdGFGcm9tQWxsRm9ybXNEYXRhKCkge1xuICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyh0aGlzLmFsbEZvcm1zRGF0YSwgdGhpcy5mb3JtQ29uZmlnLmtleSkpIHtcbiAgICAgIGNvbnN0IGZvcm1EYXRhID0gdGhpcy5hbGxGb3Jtc0RhdGFbdGhpcy5mb3JtQ29uZmlnLmtleV07XG5cbiAgICAgIGlmIChcbiAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZm9ybURhdGEsIFwiZGF0YVwiKSAmJlxuICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmb3JtRGF0YSwgXCJleHRlbmRlZERhdGFcIilcbiAgICAgICkge1xuICAgICAgICB0aGlzLmZvcm1EYXRhID0ge1xuICAgICAgICAgIC4uLnRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgLi4uZm9ybURhdGEuZGF0YVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5mb3JtRGF0YSA9IHtcbiAgICAgICAgICAuLi50aGlzLmZvcm1EYXRhLFxuICAgICAgICAgIC4uLmZvcm1EYXRhXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9ybURhdGEgPSB7fTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIGhhbmRsZUNvbm5lY3RlZEVsZW1lbnRGaWVsZEdyb3VwQWN0aW9ucyhcbiAgICBjaGlsZEZpZWxkR3JvdXBDb25maWc6IGFueSxcbiAgICBwYXJlbnRGaWVsZDogYW55XG4gICkge1xuICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhjaGlsZEZpZWxkR3JvdXBDb25maWcsIFwicnVsZXNcIikpIHtcbiAgICAgIGNvbnN0IHJ1bGVzTWFwcGluZyA9IG5ldyBSdWxlKGNoaWxkRmllbGRHcm91cENvbmZpZy5ydWxlcywge1xuICAgICAgICBGSUVMRF9DT05GSUc6IHBhcmVudEZpZWxkLFxuICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgIFJFRFVYX0RBVEE6IHRoaXMucmVkdXhEYXRhLFxuICAgICAgICBDQU1FUkFfREFUQTogdGhpcy5jYW1lcmFEYXRhLFxuICAgICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGEsXG4gICAgICAgIEVYVFJBX0RBVEE6IHRoaXMuZXh0cmFEYXRhXG4gICAgICB9KS5tYXBwaW5nKCk7XG5cbiAgICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIGNoaWxkRmllbGRHcm91cENvbmZpZy5hY3Rpb25zKSB7XG4gICAgICAgIGNvbnN0IGNvbmRpdGlvblN1Y2Nlc3MgPSBuZXcgQ29uZGl0aW9uKFxuICAgICAgICAgIGFjdGlvbi5jb25kaXRpb24sXG4gICAgICAgICAgcnVsZXNNYXBwaW5nXG4gICAgICAgICkuZXZhbHVhdGUoKTtcblxuICAgICAgICBpZiAoY29uZGl0aW9uU3VjY2Vzcykge1xuICAgICAgICAgIGNvbnN0IGFjdGlvbnMgPSBuZXcgQWN0aW9uKFxuICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgcnVsZXNNYXBwaW5nLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBGSUVMRF9DT05GSUc6IHBhcmVudEZpZWxkLFxuICAgICAgICAgICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgICAgIFJFRFVYX0RBVEE6IHRoaXMucmVkdXhEYXRhLFxuICAgICAgICAgICAgICBDQU1FUkFfREFUQTogdGhpcy5jYW1lcmFEYXRhLFxuICAgICAgICAgICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICAgICAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGEsXG4gICAgICAgICAgICAgIEVYVFJBX0RBVEE6IHRoaXMuZXh0cmFEYXRhXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGhpcy50YWtlQWN0aW9uT25GaWVsZEdyb3VwLmJpbmQodGhpcylcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgYXdhaXQgYWN0aW9ucy5leGVjdXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIGhhbmRsZUNvbm5lY3RlZEVsZW1lbnRGaWVsZEdyb3VwKFxuICAgIGN1cnJlbnRGaWVsZDogYW55LFxuICAgIGNvbm5lY3RlZEZpZWxkR3JvdXBDb25maWc6IGFueSxcbiAgICBldmVudFR5cGU6IHN0cmluZ1xuICApIHtcbiAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoY29ubmVjdGVkRmllbGRHcm91cENvbmZpZywgXCJ0cmlnZ2Vyc1wiKSkge1xuICAgICAgaWYgKGNvbm5lY3RlZEZpZWxkR3JvdXBDb25maWcudHJpZ2dlcnMuaW5jbHVkZXMoZXZlbnRUeXBlKSkge1xuICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZUNvbm5lY3RlZEVsZW1lbnRGaWVsZEdyb3VwQWN0aW9ucyhcbiAgICAgICAgICBjb25uZWN0ZWRGaWVsZEdyb3VwQ29uZmlnLFxuICAgICAgICAgIGN1cnJlbnRGaWVsZFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgaGFuZGxlQ29ubmVjdGVkRWxlbWVudEZpZWxkQWN0aW9ucyhcbiAgICBjb25uZWN0ZWRGaWVsZENvbmZpZzogYW55LFxuICAgIGNvbm5lY3RlZEZpZWxkOiBhbnlcbiAgKSB7XG4gICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGNvbm5lY3RlZEZpZWxkQ29uZmlnLCBcInJ1bGVzXCIpKSB7XG4gICAgICBjb25zdCBydWxlc01hcHBpbmcgPSBuZXcgUnVsZShjb25uZWN0ZWRGaWVsZENvbmZpZy5ydWxlcywge1xuICAgICAgICBGSUVMRF9DT05GSUc6IGNvbm5lY3RlZEZpZWxkLFxuICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgIFJFRFVYX0RBVEE6IHRoaXMucmVkdXhEYXRhLFxuICAgICAgICBDQU1FUkFfREFUQTogdGhpcy5jYW1lcmFEYXRhLFxuICAgICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGEsXG4gICAgICAgIEVYVFJBX0RBVEE6IHRoaXMuZXh0cmFEYXRhXG4gICAgICB9KS5tYXBwaW5nKCk7XG5cbiAgICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIGNvbm5lY3RlZEZpZWxkQ29uZmlnLmFjdGlvbnMpIHtcbiAgICAgICAgY29uc3QgY29uZGl0aW9uU3VjY2VzcyA9IG5ldyBDb25kaXRpb24oXG4gICAgICAgICAgYWN0aW9uLmNvbmRpdGlvbixcbiAgICAgICAgICBydWxlc01hcHBpbmdcbiAgICAgICAgKS5ldmFsdWF0ZSgpO1xuXG4gICAgICAgIGlmIChjb25kaXRpb25TdWNjZXNzKSB7XG4gICAgICAgICAgY29uc3QgYWN0aW9ucyA9IG5ldyBBY3Rpb24oXG4gICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICBydWxlc01hcHBpbmcsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIEZPUk1fRklFTERTOiB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgICAgIEZJRUxEX0NPTkZJRzogY29ubmVjdGVkRmllbGQsXG4gICAgICAgICAgICAgIEZPUk1fREFUQTogdGhpcy5mb3JtRGF0YSxcbiAgICAgICAgICAgICAgUkVEVVhfREFUQTogdGhpcy5yZWR1eERhdGEsXG4gICAgICAgICAgICAgIENBTUVSQV9EQVRBOiB0aGlzLmNhbWVyYURhdGEsXG4gICAgICAgICAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgICAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YSxcbiAgICAgICAgICAgICAgRVhUUkFfREFUQTogdGhpcy5leHRyYURhdGFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBhd2FpdCBhY3Rpb25zLmV4ZWN1dGUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjb25uZWN0ZWRGaWVsZDtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgaGFuZGxlQ29ubmVjdGVkRWxlbWVudEZpZWxkcyhcbiAgICBjdXJyZW50RmllbGQ6IGFueSxcbiAgICBjb25uZWN0ZWRGaWVsZENvbmZpZzogYW55LFxuICAgIGV2ZW50VHlwZTogc3RyaW5nLFxuICAgIG5lc3RlZDogc3RyaW5nXG4gICkge1xuICAgIGxldCBjb25uZWN0ZWRGaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KFxuICAgICAgdGhpcy5mb3JtRmllbGRzLFxuICAgICAgY29ubmVjdGVkRmllbGRDb25maWcua2V5XG4gICAgKTtcblxuICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhjb25uZWN0ZWRGaWVsZENvbmZpZywgXCJ0cmlnZ2Vyc1wiKSkge1xuICAgICAgaWYgKGNvbm5lY3RlZEZpZWxkQ29uZmlnLnRyaWdnZXJzLmluY2x1ZGVzKGV2ZW50VHlwZSkpIHtcbiAgICAgICAgY29ubmVjdGVkRmllbGQgPSBhd2FpdCB0aGlzLmhhbmRsZUNvbm5lY3RlZEVsZW1lbnRGaWVsZEFjdGlvbnMoXG4gICAgICAgICAgY29ubmVjdGVkRmllbGRDb25maWcsXG4gICAgICAgICAgY29ubmVjdGVkRmllbGRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGNvbm5lY3RlZEZpZWxkQ29uZmlnLCBcImhhbmRsZU5lc3RlZEZpZWxkc1wiKSkge1xuICAgICAgaWYgKGNvbm5lY3RlZEZpZWxkQ29uZmlnLmhhbmRsZU5lc3RlZEZpZWxkcykge1xuICAgICAgICB0aGlzLmhhbmRsZUNvbm5lY3RlZEVsZW1lbnRzKFxuICAgICAgICAgIHsga2V5OiBjb25uZWN0ZWRGaWVsZENvbmZpZy5rZXkgfSxcbiAgICAgICAgICBldmVudFR5cGVcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGN1cnJlbnRGaWVsZDtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgaGFuZGxlQ29ubmVjdGVkRWxlbWVudHMoZTogYW55LCBldmVudFR5cGU6IHN0cmluZykge1xuICAgIGxldCBjdXJyZW50RmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGUua2V5KTtcblxuICAgIGlmIChjdXJyZW50RmllbGQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGN1cnJlbnRGaWVsZCwgXCJjb25uZWN0ZWRFbGVtZW50c1wiKSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoXG4gICAgICAgICAgICBjdXJyZW50RmllbGQuY29ubmVjdGVkRWxlbWVudHMsXG4gICAgICAgICAgICBcImNvbm5lY3RlZEZpZWxkR3JvdXBzXCJcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IHsgY29ubmVjdGVkRmllbGRHcm91cHMgfSA9IGN1cnJlbnRGaWVsZC5jb25uZWN0ZWRFbGVtZW50cztcbiAgICAgICAgICBmb3IgKGNvbnN0IGNvbm5lY3RlZEZpZWxkR3JvdXBDb25maWcgb2YgY29ubmVjdGVkRmllbGRHcm91cHMpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlQ29ubmVjdGVkRWxlbWVudEZpZWxkR3JvdXAoXG4gICAgICAgICAgICAgIGN1cnJlbnRGaWVsZCxcbiAgICAgICAgICAgICAgY29ubmVjdGVkRmllbGRHcm91cENvbmZpZyxcbiAgICAgICAgICAgICAgZXZlbnRUeXBlXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoXG4gICAgICAgICAgICBjdXJyZW50RmllbGQuY29ubmVjdGVkRWxlbWVudHMsXG4gICAgICAgICAgICBcImNvbm5lY3RlZEZpZWxkc1wiXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCB7IGNvbm5lY3RlZEZpZWxkcyB9ID0gY3VycmVudEZpZWxkLmNvbm5lY3RlZEVsZW1lbnRzO1xuICAgICAgICAgIGZvciAoY29uc3QgY29ubmVjdGVkRmllbGRDb25maWcgb2YgY29ubmVjdGVkRmllbGRzKSB7XG4gICAgICAgICAgICBjdXJyZW50RmllbGQgPSBhd2FpdCB0aGlzLmhhbmRsZUNvbm5lY3RlZEVsZW1lbnRGaWVsZHMoXG4gICAgICAgICAgICAgIGN1cnJlbnRGaWVsZCxcbiAgICAgICAgICAgICAgY29ubmVjdGVkRmllbGRDb25maWcsXG4gICAgICAgICAgICAgIGV2ZW50VHlwZSxcbiAgICAgICAgICAgICAgZXZlbnRUeXBlXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBGaWVsZCBmb3IgdGhlIGdpdmVuIGtleSBbJyR7ZS5rZXl9J10gaXMgbm90IGZvdW5kIHdpdGggZXZlbnRUeXBlOiAnJHtldmVudFR5cGV9Jy5gXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlUmVtb3ZlZEZpbGUoZTogYW55KSB7XG4gICAgdGhpcy5zaG93QXBpTG9hZGVyKCk7XG5cbiAgICBpZiAodGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZS5rZXldLmVuYWJsZWQpIHtcbiAgICAgIHRoaXMuZmlsZXNbZS5rZXldID0gZS5maWxlcztcblxuICAgICAgdGhpcy5mb3JtRGF0YVtlLmtleV0gPSBmaWx0ZXJEdXBsaWNhdGVzRmlsZXModGhpcy5maWxlc1tlLmtleV0pO1xuXG4gICAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKFxuICAgICAgICB7XG4gICAgICAgICAgW2Uua2V5XTogdGhpcy5mb3JtRGF0YVtlLmtleV1cbiAgICAgICAgfSxcbiAgICAgICAgeyBlbWl0RXZlbnQ6IGZhbHNlIH1cbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0ZJRUxEX0ZJTEVfUkVNT1ZFLCB7XG4gICAgICBmaWVsZF9rZXk6IGUua2V5LFxuICAgICAgLi4uKGUuZmlsZT8ubmFtZSA/PyB7IGZpbGVfbmFtZTogZS5maWxlPy5uYW1lIH0pLFxuICAgICAgLi4uKGUuZmlsZT8uc2l6ZSA/PyB7IGZpbGVfc2l6ZTogZS5maWxlPy5zaXplIH0pLFxuICAgICAgLi4uKGUuZmlsZT8udHlwZSA/PyB7IGZpbGVfdHlwZTogZS5maWxlPy50eXBlIH0pXG4gICAgfSk7XG5cbiAgICB0aGlzLmhpZGVBcGlMb2FkZXIoKTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlVmlld0J1dHRvbkNsaWNrKGU6IGFueSwgZmllbGQ6IGFueSkge1xuICAgIHRoaXMub25DbGlja1ZpZXdGaWxlLmVtaXQoe1xuICAgICAga2V5OiBmaWVsZD8ua2V5LFxuICAgICAgdHlwZTogZmllbGQ/LnR5cGUsXG4gICAgICBwYXlsb2FkOiB7XG4gICAgICAgIGZpZWxkLFxuICAgICAgICBldmVudDogZVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBoYW5kbGVHZXRLZXlWYWx1ZUZpbGUoZTogYW55KSB7XG4gICAgdGhpcy5zaG93QXBpTG9hZGVyKCk7XG5cbiAgICBjb25zdCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgZS5rZXkpO1xuXG4gICAgY29uc3QgdmFsdWVzID0gQXJyYXkuaXNBcnJheShlLnZhbHVlKSA/IGUudmFsdWUgOiBbZS52YWx1ZV07XG5cbiAgICBpZiAoXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJwcm9wZXJ0aWVzXCIpICYmXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZC5wcm9wZXJ0aWVzLCBcInVwbG9hZEZpbGVUb1NlcnZlclwiKSAmJlxuICAgICAgZmllbGQucHJvcGVydGllcy51cGxvYWRGaWxlVG9TZXJ2ZXJcbiAgICApIHtcbiAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICAgIGF3YWl0IHRoaXMudXBsb2FkRmlsZShmaWVsZCwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgICB0aGlzLnVwZGF0ZUZpbGVzKHZhbHVlLCBcIkxPQURJTkdcIiwgZS5rZXkpO1xuXG4gICAgICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19GSUVMRF9GSUxFX0FERCwge1xuICAgICAgICAgIGZpZWxkX2tleTogZS5rZXksXG4gICAgICAgICAgLi4uKGUuZmlsZT8ubmFtZSA/PyB7IGZpbGVfbmFtZTogZS5maWxlPy5uYW1lIH0pLFxuICAgICAgICAgIC4uLihlLmZpbGU/LnNpemUgPz8geyBmaWxlX3NpemU6IGUuZmlsZT8uc2l6ZSB9KSxcbiAgICAgICAgICAuLi4oZS5maWxlPy50eXBlID8/IHsgZmlsZV90eXBlOiBlLmZpbGU/LnR5cGUgfSlcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgdXBkYXRlZEZpbGUgPSBnZXRPYmplY3REZWVwQ29weShcbiAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgIGlkOiB1dWlkdjQoKSxcbiAgICAgICAgICAgICAgICBuYW1lOiB2YWx1ZS5uYW1lLFxuICAgICAgICAgICAgICAgIHR5cGU6IHZhbHVlLnR5cGUsXG4gICAgICAgICAgICAgICAgc2l6ZTogdmFsdWUuc2l6ZSxcbiAgICAgICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHZhbHVlLmxhc3RNb2RpZmllZCxcbiAgICAgICAgICAgICAgICB3ZWJraXRSZWxhdGl2ZVBhdGg6IHZhbHVlLndlYmtpdFJlbGF0aXZlUGF0aFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIEZPUk1fVklFV19USU1FUlMuV0FJVF9GT1JfRklMRV9NRVRBREFUQV9ERUVQQ09QWSk7IC8vIDEwMDAgbXMgPSAxIHNlY1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy51cGRhdGVGaWxlcyh1cGRhdGVkRmlsZSwgXCJOT1JNQUxcIiwgZS5rZXkpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmhpZGVBcGlMb2FkZXIoKTtcbiAgICB9XG4gIH1cblxuICAvKiogTWV0aG9kcyBmb3IgQ2FtZXJhIHJlbGF0ZWQgZmllbGRzIGxpa2UgJ0NBUFRVUkUnIG9yICAnUkVDT1JEJyAqL1xuICBAbG9nTWV0aG9kXG4gIGhhbmRsZU9uQ2xpY2tHZXRSZW1vdmVkTWVkaWFGaWxlKGU6IGFueSkge1xuICAgIGlmICh0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tlLmtleV0uZW5hYmxlZCkge1xuICAgICAgdGhpcy5zaG93QXBpTG9hZGVyKCk7XG5cbiAgICAgIGNvbnN0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCBlLmtleSk7XG5cbiAgICAgIHRoaXMucmVzZXRDYW1lcmEoKTtcblxuICAgICAgdGhpcy5tZWRpYUZpbGVzW2Uua2V5XSA9IGUubWVkaWFGaWxlcztcblxuICAgICAgdGhpcy5mb3JtRGF0YVtlLmtleV0gPSBmaWx0ZXJEdXBsaWNhdGVzTWVkaWFGaWxlcyh0aGlzLm1lZGlhRmlsZXNbZS5rZXldKTtcblxuICAgICAgdGhpcy5jYW1lcmFEYXRhW2Uua2V5XSA9IGNvbnZlcnRGb3JtRmllbGRWYWx1ZVRvU3RhbmRhcmRGb3JtYXQoXG4gICAgICAgIGZpZWxkLFxuICAgICAgICB0aGlzLmZvcm1EYXRhW2Uua2V5XVxuICAgICAgKTtcblxuICAgICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZShcbiAgICAgICAge1xuICAgICAgICAgIFtlLmtleV06IHRoaXMuZm9ybURhdGFbZS5rZXldXG4gICAgICAgIH0sXG4gICAgICAgIHsgZW1pdEV2ZW50OiBmYWxzZSB9XG4gICAgICApO1xuXG4gICAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fRklFTERfTUVESUFfRklMRV9SRU1PVkUsIHtcbiAgICAgICAgZmllbGRfa2V5OiBlLmtleSxcbiAgICAgICAgLi4uKGUuZmlsZT8ubmFtZSA/PyB7IGZpbGVfbmFtZTogZS5maWxlPy5uYW1lIH0pLFxuICAgICAgICAuLi4oZS5maWxlPy5zaXplID8/IHsgZmlsZV9zaXplOiBlLmZpbGU/LnNpemUgfSksXG4gICAgICAgIC4uLihlLmZpbGU/LnR5cGUgPz8geyBmaWxlX3R5cGU6IGUuZmlsZT8udHlwZSB9KVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuZ2V0VW5zYXZlZERhdGFTdGF0ZS5lbWl0KHRydWUpO1xuXG4gICAgICBpZiAoXG4gICAgICAgIGZpZWxkLmlzRm9ybUVsZW1lbnQgJiZcbiAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwidmFsaWRhdGlvblwiKSAmJlxuICAgICAgICBmaWVsZC52YWxpZGF0aW9uLnRyaWdnZXJzLmluY2x1ZGVzKFwiT05fQ0hBTkdFXCIpXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgcnVsZUVuZ2luZSA9IG5ldyBSdWxlRW5naW5lKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIEZJRUxEX0NPTkZJRzogZmllbGQsXG4gICAgICAgICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgICAgICAgUkVEVVhfREFUQTogdGhpcy5yZWR1eERhdGEsXG4gICAgICAgICAgICBDQU1FUkFfREFUQTogdGhpcy5jYW1lcmFEYXRhLFxuICAgICAgICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGEsXG4gICAgICAgICAgICBFWFRSQV9EQVRBOiB0aGlzLmV4dHJhRGF0YVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcbiAgICAgICAgKTtcblxuICAgICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGF3YWl0IHJ1bGVFbmdpbmUucnVuKGZpZWxkLnZhbGlkYXRpb24pO1xuICAgICAgICB9KSgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIGZpZWxkLmlzRm9ybUVsZW1lbnQgJiZcbiAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwiY29ubmVjdGVkRWxlbWVudHNcIilcbiAgICAgICkge1xuICAgICAgICB0aGlzLmhhbmRsZUNvbm5lY3RlZEVsZW1lbnRzKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGtleTogZmllbGQua2V5LFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0udmFsdWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiT05fQ0hBTkdFXCJcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuaGlkZUFwaUxvYWRlcigpO1xuICAgICAgfSwgNTAwKTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIGhhbmRsZU9uQ2xpY2tJbnB1dENhbWVyYShlOiBhbnksIGZpZWxkOiBhbnkpIHtcbiAgICB0aGlzLmxvYWRlclNlcnZpY2Uuc2hvdyh7XG4gICAgICBsb2FkZXJUZXh0OiBcIkxvYWRpbmcgQ2FtZXJhLi4uXCIsXG4gICAgICBmdWxsc2NyZWVuOiB0cnVlXG4gICAgfSk7XG5cbiAgICBjb25zdCBmaWVsZEtleSA9IGZpZWxkLmtleTtcbiAgICBjb25zdCBmaWVsZENhbWVyYUNvbmZpZyA9IGZpZWxkPy5wcm9wZXJ0aWVzID8/IHt9O1xuXG4gICAgdGhpcy5hY3RpdmVDYW1lcmFUeXBlID0gZmllbGQ/LnR5cGUudG9VcHBlckNhc2UoKSB8fCBcIlwiO1xuICAgIHRoaXMuYWN0aXZlQ2FtZXJhRmllbGRLZXkgPSBmaWVsZEtleTtcblxuICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19GSUVMRF9DQU1FUkFfQlVUVE9OX0NMSUNLLCB7XG4gICAgICBmaWVsZF9rZXk6IGZpZWxkLmtleSxcbiAgICAgIGZpZWxkX3R5cGU6IGZpZWxkLnR5cGUsXG4gICAgICBjYW1lcmFfdHlwZTogdGhpcy5hY3RpdmVDYW1lcmFUeXBlXG4gICAgfSk7XG5cbiAgICBzd2l0Y2ggKHRoaXMuYWN0aXZlQ2FtZXJhVHlwZSkge1xuICAgICAgY2FzZSBcIkNBUFRVUkVcIjpcbiAgICAgICAgdGhpcy5hY3RpdmVDYW1lcmFDb25maWcgPSBtZXJnZU9iamVjdHNEZWVwKFtcbiAgICAgICAgICBGSUVMRF9QUk9QRVJUSUVTLmNhcHR1cmUsXG4gICAgICAgICAgZmllbGRDYW1lcmFDb25maWdcbiAgICAgICAgXSk7XG5cbiAgICAgICAgdGhpcy5hY3RpdmVDYW1lcmFEYXRhID0ge307XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMuYWN0aXZlQ2FtZXJhQ29uZmlnPy5mZWF0dXJlcz8ud2F0ZXJtYXJrPy5pc0VuYWJsZWQgJiZcbiAgICAgICAgICAhdGhpcy5hY3RpdmVDYW1lcmFDb25maWcuZmVhdHVyZXM/LndhdGVybWFyaz8uaXNXYXRlcm1hcmtGcm9tU2VydmVyXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IGNhbWVyYUhlbHBlciA9IG5ldyBDYW1lcmFIZWxwZXIoZmllbGQsIHtcbiAgICAgICAgICAgIEZPUk1fRklFTERTOiB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgICBGSUVMRF9DT05GSUc6IGZpZWxkLFxuICAgICAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgICAgICAgUkVEVVhfREFUQTogdGhpcy5yZWR1eERhdGEsXG4gICAgICAgICAgICBDQU1FUkFfREFUQTogdGhpcy5jYW1lcmFEYXRhLFxuICAgICAgICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGEsXG4gICAgICAgICAgICBFWFRSQV9EQVRBOiB0aGlzLmV4dHJhRGF0YVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdGhpcy5hY3RpdmVDYW1lcmFEYXRhID0ge1xuICAgICAgICAgICAgd2F0ZXJtYXJrOiBhd2FpdCBjYW1lcmFIZWxwZXIuZ2V0Q2FtZXJhV2F0ZXJtYXJrRGF0YSgpXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJSRUNPUkRcIjpcbiAgICAgICAgdGhpcy5hY3RpdmVDYW1lcmFDb25maWcgPSBtZXJnZU9iamVjdHNEZWVwKFtcbiAgICAgICAgICBGSUVMRF9QUk9QRVJUSUVTLnJlY29yZCxcbiAgICAgICAgICBmaWVsZENhbWVyYUNvbmZpZ1xuICAgICAgICBdKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLnJlc2V0Q2FtZXJhKCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbmZpZyBhbmQgb3RoZXIgZGF0YSBpcyBzZXQgbm93LCBzbyB3ZSBjYW4gc2hvdyB0aGUgY2FtZXJhLlxuICAgICAqL1xuICAgIHRoaXMuaXNTaG93Q2FtZXJhID0gdHJ1ZTtcblxuICAgIHRoaXMubG9hZGVyU2VydmljZS5oaWRlKCk7XG4gIH1cblxuICAvKiogS3dpa0lEIENhbWVyYSBNZXRob2RzICovXG4gIC8qKiBDYW1lcmFUeXBlID0gQ0FQVFVSRSAqL1xuICBAbG9nTWV0aG9kXG4gIGFzeW5jIHNldENhbWVyYU1lZGlhKG1lZGlhOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgdGhpcy5hY3RpdmVDYW1lcmFGaWVsZEtleSk7XG5cbiAgICBpZiAoXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJwcm9wZXJ0aWVzXCIpICYmXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZC5wcm9wZXJ0aWVzLCBcInVwbG9hZEZpbGVUb1NlcnZlclwiKSAmJlxuICAgICAgZmllbGQucHJvcGVydGllcy51cGxvYWRGaWxlVG9TZXJ2ZXJcbiAgICApIHtcbiAgICAgIGF3YWl0IHRoaXMudXBsb2FkRmlsZShmaWVsZCwgbWVkaWEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBhY3RpdmVDYW1lcmFEYXRhID0gdGhpcy5hY3RpdmVDYW1lcmFEYXRhO1xuXG4gICAgICB0aGlzLnJlc2V0Q2FtZXJhKCk7XG5cbiAgICAgIGxldCB1cGRhdGVkTWVkaWE6IGFueSA9IHt9O1xuXG4gICAgICBzd2l0Y2ggKGZpZWxkLnR5cGUpIHtcbiAgICAgICAgY2FzZSBFRmllbGRUeXBlLkNBUFRVUkU6XG4gICAgICAgICAgdXBkYXRlZE1lZGlhID0ge1xuICAgICAgICAgICAgLi4uKGlzTm90RW1wdHlWYWx1ZShhY3RpdmVDYW1lcmFEYXRhKSA/IGFjdGl2ZUNhbWVyYURhdGEgOiB7fSksXG4gICAgICAgICAgICBpbWFnZTogbWVkaWFcbiAgICAgICAgICB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEVGaWVsZFR5cGUuUkVDT1JEOlxuICAgICAgICAgIHVwZGF0ZWRNZWRpYSA9IHtcbiAgICAgICAgICAgIC4uLihpc05vdEVtcHR5VmFsdWUoYWN0aXZlQ2FtZXJhRGF0YSkgPyBhY3RpdmVDYW1lcmFEYXRhIDoge30pLFxuICAgICAgICAgICAgdmlkZW86IG1lZGlhXG4gICAgICAgICAgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgdGhpcy5mb3JtRGF0YVtmaWVsZC5rZXldID0gZ2V0T2JqZWN0RGVlcENvcHkoW3VwZGF0ZWRNZWRpYV0pO1xuICAgICAgdGhpcy5jYW1lcmFEYXRhW2ZpZWxkLmtleV0gPSBnZXRPYmplY3REZWVwQ29weSh1cGRhdGVkTWVkaWEpO1xuICAgICAgdGhpcy5tZWRpYUZpbGVzW2ZpZWxkLmtleV0gPSBnZXRPYmplY3REZWVwQ29weShbdXBkYXRlZE1lZGlhXSk7XG4gICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldLnBhdGNoVmFsdWUoXG4gICAgICAgIGdldE9iamVjdERlZXBDb3B5KFt1cGRhdGVkTWVkaWFdKSxcbiAgICAgICAge1xuICAgICAgICAgIGVtaXRFdmVudDogZmFsc2UsXG4gICAgICAgICAgb25seVNlbGY6IGZhbHNlXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKFxuICAgICAgICB7XG4gICAgICAgICAgW2ZpZWxkLmtleV06IGdldE9iamVjdERlZXBDb3B5KFt1cGRhdGVkTWVkaWFdKVxuICAgICAgICB9LFxuICAgICAgICB7IGVtaXRFdmVudDogZmFsc2UgfVxuICAgICAgKTtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7XG4gICAgICAgIGVtaXRFdmVudDogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgdGhpcy5mb3JtR3JvdXAudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7XG4gICAgICAgIGVtaXRFdmVudDogZmFsc2VcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmdldFVuc2F2ZWREYXRhU3RhdGUuZW1pdCh0cnVlKTtcblxuICAgICAgaWYgKFxuICAgICAgICBmaWVsZC5pc0Zvcm1FbGVtZW50ICYmXG4gICAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLCBcInZhbGlkYXRpb25cIikgJiZcbiAgICAgICAgZmllbGQudmFsaWRhdGlvbi50cmlnZ2Vycy5pbmNsdWRlcyhcIk9OX0NIQU5HRVwiKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IHJ1bGVFbmdpbmUgPSBuZXcgUnVsZUVuZ2luZShcbiAgICAgICAgICB7XG4gICAgICAgICAgICBGSUVMRF9DT05GSUc6IGZpZWxkLFxuICAgICAgICAgICAgRk9STV9GSUVMRFM6IHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgICAgICAgIEZPUk1fREFUQTogdGhpcy5mb3JtRGF0YSxcbiAgICAgICAgICAgIFJFRFVYX0RBVEE6IHRoaXMucmVkdXhEYXRhLFxuICAgICAgICAgICAgQ0FNRVJBX0RBVEE6IHRoaXMuY2FtZXJhRGF0YSxcbiAgICAgICAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgICAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuYWxsRm9ybXNEYXRhLFxuICAgICAgICAgICAgRVhUUkFfREFUQTogdGhpcy5leHRyYURhdGFcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRoaXMudGFrZUFjdGlvbi5iaW5kKHRoaXMpXG4gICAgICAgICk7XG5cbiAgICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBhd2FpdCBydWxlRW5naW5lLnJ1bihmaWVsZC52YWxpZGF0aW9uKTtcbiAgICAgICAgfSkoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBmaWVsZC5pc0Zvcm1FbGVtZW50ICYmXG4gICAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLCBcImNvbm5lY3RlZEVsZW1lbnRzXCIpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5oYW5kbGVDb25uZWN0ZWRFbGVtZW50cyhcbiAgICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IGZpZWxkLmtleSxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldLnZhbHVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIk9OX0NIQU5HRVwiXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19GSUVMRF9GSUxFX0FERCwge1xuICAgICAgICBmaWVsZF9rZXk6IGZpZWxkLmtleSxcbiAgICAgICAgZmllbGRfdHlwZTogZmllbGQudHlwZVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIENhbWVyYSBDb21tb24gTWV0aG9kcyAqL1xuICBAbG9nTWV0aG9kXG4gIGhhbmRsZUdldENhbWVyYU1lZGlhKGU6IGFueSwgYWN0aXZlQ2FtZXJhVHlwZTogXCJDQVBUVVJFXCIgfCBcIlJFQ09SRFwiKSB7XG4gICAgc3dpdGNoIChhY3RpdmVDYW1lcmFUeXBlKSB7XG4gICAgICBjYXNlIFwiQ0FQVFVSRVwiOlxuICAgICAgICB0aGlzLnNob3dBcGlMb2FkZXIoKTtcblxuICAgICAgICB0aGlzLmFjdGl2ZUNhbWVyYUltYWdlID0gXCJcIjtcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBQcmlvcml0eSBvZiBJbWFnZSB0byBTZXQgZm9yIENvbmZpZyBCYXNlZFxuICAgICAgICAgICAqIDEuIE1hc2tlZFxuICAgICAgICAgICAqIDIuIENyb3BwZWRcbiAgICAgICAgICAgKiAzLiBPcmlnaW5hbFxuICAgICAgICAgICAqXG4gICAgICAgICAgICogSWYgbm8gbWFza2VkIG9yIGNyb3BwZWQgaW1hZ2UgaXMgYXZhaWxhYmxlIHRoZW4gZGlyZWN0bHkgc2V0IE9yaWdpbmFsIEltYWdlXG4gICAgICAgICAgICovXG4gICAgICAgICAgY29uc3QgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleShcbiAgICAgICAgICAgIHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlQ2FtZXJhRmllbGRLZXlcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgY29uc3QgaW1hZ2UgPSBmaWVsZC5wcm9wZXJ0aWVzPy5pc01hc2tlZEltYWdlXG4gICAgICAgICAgICA/IGU/Lm1hc2tlZEltYWdlID8/IGU/Lm9yaWdpbmFsSW1hZ2VcbiAgICAgICAgICAgIDogZmllbGQucHJvcGVydGllcz8uaXNDcm9wcGVkSW1hZ2VcbiAgICAgICAgICAgICAgPyBlPy5jcm9wcGVkSW1hZ2UgPz8gZT8ub3JpZ2luYWxJbWFnZVxuICAgICAgICAgICAgICA6IGU/Lm9yaWdpbmFsSW1hZ2U7XG5cbiAgICAgICAgICBjb25zdCBpc1Nob3dJbWFnZVByZXZpZXcgPVxuICAgICAgICAgICAgdGhpcy5hY3RpdmVDYW1lcmFDb25maWc/LmNhbWVyYUNvbmZpZz8ub3RoZXJzPy5wcmV2aWV3Py5zaG93O1xuXG4gICAgICAgICAgaWYgKGlzU2hvd0ltYWdlUHJldmlldykge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVDYW1lcmFJbWFnZSA9IGltYWdlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldENhbWVyYU1lZGlhKGltYWdlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmhpZGVBcGlMb2FkZXIoKTtcbiAgICAgICAgfSwgRk9STV9WSUVXX1RJTUVSUy5XQUlUX0ZPUl9LV0lLSURfQ0FNRVJBX1RPX0xPQUQpOyAvLyBEZWxheSBpcyBhZGRlZCBkdWUgdG8gaXNzdXMgd2l0aCBLd2lrSUQgQ2FtZXJhIG5vdCBiZWluZyBhYmxlIHRvIGhhbmRsZSB0byBmYXN0IHByb2Nlc3NpbmcuXG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIlJFQ09SRFwiOlxuICAgICAgICB0aGlzLnNob3dBcGlMb2FkZXIoKTtcblxuICAgICAgICB0aGlzLmFjdGl2ZUNhbWVyYVZpZGVvID0gXCJcIjtcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBQcmlvcml0eSBvZiBJbWFnZSB0byBTZXQgZm9yIENvbmZpZyBCYXNlZFxuICAgICAgICAgICAqIDEuIE9yaWdpbmFsXG4gICAgICAgICAgICovXG4gICAgICAgICAgY29uc3QgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleShcbiAgICAgICAgICAgIHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlQ2FtZXJhRmllbGRLZXlcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgY29uc3QgdmlkZW8gPSBlPy5vcmlnaW5hbFZpZGVvO1xuXG4gICAgICAgICAgY29uc3QgaXNTaG93VmlkZW9QcmV2aWV3ID1cbiAgICAgICAgICAgIHRoaXMuYWN0aXZlQ2FtZXJhQ29uZmlnPy5vdGhlcnM/LnByZXZpZXc/LnNob3c7XG5cbiAgICAgICAgICBpZiAoaXNTaG93VmlkZW9QcmV2aWV3KSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUNhbWVyYVZpZGVvID0gdmlkZW87XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0Q2FtZXJhTWVkaWEodmlkZW8pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuaGlkZUFwaUxvYWRlcigpO1xuICAgICAgICB9LCBGT1JNX1ZJRVdfVElNRVJTLldBSVRfRk9SX0tXSUtJRF9DQU1FUkFfVE9fTE9BRCk7IC8vIERlbGF5IGlzIGFkZGVkIGR1ZSB0byBpc3N1cyB3aXRoIEt3aWtJRCBDYW1lcmEgbm90IGJlaW5nIGFibGUgdG8gaGFuZGxlIHRvIGZhc3QgcHJvY2Vzc2luZy5cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGhhbmRsZU9uQ2xpY2tTYXZlQ2FtZXJhTWVkaWEoZTogYW55LCBhY3RpdmVDYW1lcmFUeXBlOiBcIkNBUFRVUkVcIiB8IFwiUkVDT1JEXCIpIHtcbiAgICB0aGlzLnNob3dBcGlMb2FkZXIoKTtcblxuICAgIGNvbnN0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCB0aGlzLmFjdGl2ZUNhbWVyYUZpZWxkS2V5KTtcblxuICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19DQU1FUkFfU0FWRV9CVVRUT05fQ0xJQ0ssIHtcbiAgICAgIGZpZWxkX2tleTogZmllbGQua2V5LFxuICAgICAgZmllbGRfdHlwZTogZmllbGQudHlwZSxcbiAgICAgIGNhbWVyYV90eXBlOiBhY3RpdmVDYW1lcmFUeXBlXG4gICAgfSk7XG5cbiAgICBzd2l0Y2ggKGFjdGl2ZUNhbWVyYVR5cGUpIHtcbiAgICAgIGNhc2UgXCJDQVBUVVJFXCI6XG4gICAgICAgIHRoaXMuYWN0aXZlQ2FtZXJhSW1hZ2UgPSBcIlwiO1xuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIFByaW9yaXR5IG9mIEltYWdlIHRvIFNldCBmb3IgQ29uZmlnIEJhc2VkXG4gICAgICAgICAgICogMS4gTWFza2VkXG4gICAgICAgICAgICogMi4gQ3JvcHBlZFxuICAgICAgICAgICAqIDMuIE9yaWdpbmFsXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBJZiBubyBtYXNrZWQgb3IgY3JvcHBlZCBpbWFnZSBpcyBhdmFpbGFibGUgdGhlbiBkaXJlY3RseSBzZXQgT3JpZ2luYWwgSW1hZ2VcbiAgICAgICAgICAgKi9cbiAgICAgICAgICBjb25zdCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KFxuICAgICAgICAgICAgdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgICAgdGhpcy5hY3RpdmVDYW1lcmFGaWVsZEtleVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBjb25zdCBpbWFnZSA9IGZpZWxkLnByb3BlcnRpZXM/LmlzTWFza2VkSW1hZ2VcbiAgICAgICAgICAgID8gZT8ubWFza2VkSW1hZ2UgPz8gZT8ub3JpZ2luYWxJbWFnZVxuICAgICAgICAgICAgOiBmaWVsZC5wcm9wZXJ0aWVzPy5pc0Nyb3BwZWRJbWFnZVxuICAgICAgICAgICAgICA/IGU/LmNyb3BwZWRJbWFnZSA/PyBlPy5vcmlnaW5hbEltYWdlXG4gICAgICAgICAgICAgIDogZT8ub3JpZ2luYWxJbWFnZTtcblxuICAgICAgICAgIHRoaXMuc2V0Q2FtZXJhTWVkaWEoaW1hZ2UpO1xuXG4gICAgICAgICAgdGhpcy5oaWRlQXBpTG9hZGVyKCk7XG4gICAgICAgIH0sIEZPUk1fVklFV19USU1FUlMuV0FJVF9GT1JfS1dJS0lEX0NBTUVSQV9UT19MT0FEKTsgLy8gRGVsYXkgaXMgYWRkZWQgZHVlIHRvIGlzc3VzIHdpdGggS3dpa0lEIENhbWVyYSBub3QgYmVpbmcgYWJsZSB0byBoYW5kbGUgdG8gZmFzdCBwcm9jZXNzaW5nLlxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJSRUNPUkRcIjpcbiAgICAgICAgdGhpcy5hY3RpdmVDYW1lcmFWaWRlbyA9IFwiXCI7XG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogUHJpb3JpdHkgb2YgSW1hZ2UgdG8gU2V0IGZvciBDb25maWcgQmFzZWRcbiAgICAgICAgICAgKiAxLiBPcmlnaW5hbFxuICAgICAgICAgICAqL1xuICAgICAgICAgIGNvbnN0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkoXG4gICAgICAgICAgICB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUNhbWVyYUZpZWxkS2V5XG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGNvbnN0IHZpZGVvID0gZT8ub3JpZ2luYWxWaWRlbztcblxuICAgICAgICAgIHRoaXMuc2V0Q2FtZXJhTWVkaWEodmlkZW8pO1xuXG4gICAgICAgICAgdGhpcy5oaWRlQXBpTG9hZGVyKCk7XG4gICAgICAgIH0sIEZPUk1fVklFV19USU1FUlMuV0FJVF9GT1JfS1dJS0lEX0NBTUVSQV9UT19MT0FEKTsgLy8gRGVsYXkgaXMgYWRkZWQgZHVlIHRvIGlzc3VzIHdpdGggS3dpa0lEIENhbWVyYSBub3QgYmVpbmcgYWJsZSB0byBoYW5kbGUgdG8gZmFzdCBwcm9jZXNzaW5nLlxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlT25DbGlja0NhbWVyYUJhY2soZTogYW55KTogdm9pZCB7XG4gICAgY29uc3QgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIHRoaXMuYWN0aXZlQ2FtZXJhRmllbGRLZXkpO1xuXG4gICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0NBTUVSQV9CQUNLX0JVVFRPTl9DTElDSywge1xuICAgICAgZmllbGRfa2V5OiBmaWVsZC5rZXksXG4gICAgICBmaWVsZF90eXBlOiBmaWVsZC50eXBlXG4gICAgfSk7XG5cbiAgICB0aGlzLnJlc2V0Q2FtZXJhKCk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGhhbmRsZU9uQ2xpY2tDYW1lcmFDbG9zZShlOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgdGhpcy5hY3RpdmVDYW1lcmFGaWVsZEtleSk7XG5cbiAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fQ0FNRVJBX0NMT1NFX0JVVFRPTl9DTElDSywge1xuICAgICAgZmllbGRfa2V5OiBmaWVsZC5rZXksXG4gICAgICBmaWVsZF90eXBlOiBmaWVsZC50eXBlXG4gICAgfSk7XG5cbiAgICB0aGlzLnJlc2V0Q2FtZXJhKCk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byB1cGRhdGUgdGhlIGZpbGVzIGFycmF5IHdpdGggdGhlIG5ldyBmaWxlIGFuZCBpdCdzIHN0YXRlIGFuZCByZXNwb25zZSBmcm9tIHRoZSBhcGkgb2YgdXBsb2FkaW5nIHRoZSBmaWxlLlxuICAgKi9cbiAgQGxvZ01ldGhvZFxuICB1cGRhdGVGaWxlcyhmaWxlOiBhbnksIHN0YXRlOiBzdHJpbmcsIGtleTogc3RyaW5nKSB7XG4gICAgY29uc3QgZmlsZVdpdGhTdGF0ZSA9IG1lcmdlT2JqZWN0cyhmaWxlIGFzIGFueSwgeyBzdGF0ZSB9KTtcblxuICAgIGNvbnN0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCBrZXkpO1xuXG4gICAgaWYgKGZpZWxkLnByb3BlcnRpZXM/Lm11bHRpcGxlKSB7XG4gICAgICAvLyBJZiBmaWVsZC5wcm9wZXJ0aWVzPy5tdWx0aXBsZSBpcyB0cnVlLCBpdCBtZWFucyBtdWx0aXBsZSBmaWxlcyBhcmUgYWxsb3dlZCBmb3IgdGhpcyBmaWVsZC5cbiAgICAgIC8vIFVwZGF0ZSB0aGUgZXhpc3RpbmcgZmlsZXMgYXJyYXkgZm9yIHRoZSBzcGVjaWZpYyBrZXkgd2l0aCB0aGUgbmV3IGZpbGUuXG4gICAgICBjb25zdCB1cGRhdGVkRmlsZXMgPSBbXG4gICAgICAgIC4uLnRoaXMuZmlsZXNba2V5XS5maWx0ZXIoXG4gICAgICAgICAgKGYpID0+IGYubmFtZSAhPT0gZmlsZVdpdGhTdGF0ZS5uYW1lIHx8IGYuc2l6ZSAhPT0gZmlsZVdpdGhTdGF0ZS5zaXplXG4gICAgICAgICksXG4gICAgICAgIGZpbGVXaXRoU3RhdGVcbiAgICAgIF07XG5cbiAgICAgIC8vIEFwcGx5IHRoZSBmaWx0ZXJEdXBsaWNhdGVzRmlsZXMgZnVuY3Rpb24gdG8gZW5zdXJlIHVuaXF1ZW5lc3MgaW4gdGhlIHVwZGF0ZWRGaWxlcyBhcnJheS5cbiAgICAgIHRoaXMuZmlsZXNba2V5XSA9IGZpbHRlckR1cGxpY2F0ZXNGaWxlcyh1cGRhdGVkRmlsZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJZiBmaWVsZC5wcm9wZXJ0aWVzPy5tdWx0aXBsZSBpcyBmYWxzZSwgb25seSBvbmUgZmlsZSBpcyBhbGxvd2VkIGZvciB0aGlzIGZpZWxkLlxuICAgICAgLy8gUmVwbGFjZSB0aGUgZXhpc3RpbmcgZmlsZXMgYXJyYXkgZm9yIHRoZSBzcGVjaWZpYyBrZXkgd2l0aCBhbiBhcnJheSBjb250YWluaW5nIHRoZSBuZXcgZmlsZS5cbiAgICAgIHRoaXMuZmlsZXNba2V5XSA9IFtmaWxlV2l0aFN0YXRlXTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgdGhlIGZvcm1EYXRhIGFuZCBmb3JtR3JvdXAgY29udHJvbHMgZm9yIHRoZSBzcGVjaWZpYyBrZXkgd2l0aCB0aGUgbm9ybWFsRmlsZXMgYXJyYXkuXG4gICAgY29uc3Qgbm9ybWFsRmlsZXMgPSB0aGlzLmZpbGVzW2tleV0uZmlsdGVyKChmaWxlKSA9PiB7XG4gICAgICByZXR1cm4gZmlsZS5zdGF0ZSA9PT0gXCJOT1JNQUxcIjtcbiAgICB9KTtcblxuICAgIHRoaXMuZm9ybURhdGFba2V5XSA9IG5vcm1hbEZpbGVzO1xuICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2tleV0ucGF0Y2hWYWx1ZShub3JtYWxGaWxlcywge1xuICAgICAgZW1pdEV2ZW50OiBmYWxzZSxcbiAgICAgIG9ubHlTZWxmOiBmYWxzZVxuICAgIH0pO1xuICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUoXG4gICAgICB7XG4gICAgICAgIFtrZXldOiBub3JtYWxGaWxlc1xuICAgICAgfSxcbiAgICAgIHsgZW1pdEV2ZW50OiBmYWxzZSB9XG4gICAgKTtcblxuICAgIHRoaXMuZ2V0VW5zYXZlZERhdGFTdGF0ZS5lbWl0KHRydWUpO1xuXG4gICAgaWYgKFxuICAgICAgZmllbGQuaXNGb3JtRWxlbWVudCAmJlxuICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwidmFsaWRhdGlvblwiKSAmJlxuICAgICAgZmllbGQudmFsaWRhdGlvbi50cmlnZ2Vycy5pbmNsdWRlcyhcIk9OX0NIQU5HRVwiKVxuICAgICkge1xuICAgICAgY29uc3QgcnVsZUVuZ2luZSA9IG5ldyBSdWxlRW5naW5lKFxuICAgICAgICB7XG4gICAgICAgICAgRklFTERfQ09ORklHOiBmaWVsZCxcbiAgICAgICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgIEZPUk1fREFUQTogdGhpcy5mb3JtRGF0YSxcbiAgICAgICAgICBSRURVWF9EQVRBOiB0aGlzLnJlZHV4RGF0YSxcbiAgICAgICAgICBDQU1FUkFfREFUQTogdGhpcy5jYW1lcmFEYXRhLFxuICAgICAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGEsXG4gICAgICAgICAgRVhUUkFfREFUQTogdGhpcy5leHRyYURhdGFcbiAgICAgICAgfSxcbiAgICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcbiAgICAgICk7XG5cbiAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IHJ1bGVFbmdpbmUucnVuKGZpZWxkLnZhbGlkYXRpb24pO1xuICAgICAgfSkoKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBmaWVsZC5pc0Zvcm1FbGVtZW50ICYmXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJjb25uZWN0ZWRFbGVtZW50c1wiKVxuICAgICkge1xuICAgICAgdGhpcy5oYW5kbGVDb25uZWN0ZWRFbGVtZW50cyhcbiAgICAgICAge1xuICAgICAgICAgIGtleTogZmllbGQua2V5LFxuICAgICAgICAgIHZhbHVlOiB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldLnZhbHVlXG4gICAgICAgIH0sXG4gICAgICAgIFwiT05fQ0hBTkdFXCJcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgaXMgYSBhcGkgdXBsb2FkIG1vY2tpbmcgbWV0aG9kLiBTZXQncyB0byBsb2FkaW5nIGF0IGZpcnN0IGF0IHBvaW50IHdoZW4gQVBJIGlzIGNhbGxlZCBhbmQgdGhlbiBjaGFuZ2VzIHRoZSBzdGF0dXMgdG8gcmFuZG9tIHN0YXR1cyBhZnRlciAyIHNlY29uZHMgb2YgZGVsYXkgc2hvd2luZyBhIG1vY2tlZCByZXNwb25zZSBmcm9tIEFQSS5cbiAgICovXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgdXBsb2FkRmlsZShmaWVsZDogYW55LCBmaWxlOiBhbnkpIHtcbiAgICBzd2l0Y2ggKGZpZWxkLnR5cGUpIHtcbiAgICAgIGNhc2UgRUZpZWxkVHlwZS5GSUxFOlxuICAgICAgICB0aGlzLnVwZGF0ZUZpbGVzKGZpbGUsIFwiTE9BRElOR1wiLCBmaWVsZC5rZXkpO1xuXG4gICAgICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19BUElfUkVRVUVTVF9VUExPQURfRklMRSwge1xuICAgICAgICAgIGZpZWxkX2tleTogZmllbGQua2V5LFxuICAgICAgICAgIGZpZWxkX3R5cGU6IGZpZWxkLnR5cGUsXG4gICAgICAgICAgcmVxdWVzdDogZ2V0T2JqZWN0RGVlcENvcHkoe1xuICAgICAgICAgICAgbmFtZTogZmlsZS5uYW1lLFxuICAgICAgICAgICAgdHlwZTogZmlsZS50eXBlLFxuICAgICAgICAgICAgc2l6ZTogZmlsZS5zaXplLFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiBmaWxlLmxhc3RNb2RpZmllZCxcbiAgICAgICAgICAgIHdlYmtpdFJlbGF0aXZlUGF0aDogZmlsZS53ZWJraXRSZWxhdGl2ZVBhdGhcbiAgICAgICAgICB9KVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBBY3R1YWwgQVBJIENhbGxcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGlzLm9uQ2xpY2tBcGlDYWxsLmVtaXQoe1xuICAgICAgICAgICAga2V5OiBmaWVsZC5rZXksXG4gICAgICAgICAgICB0eXBlOiBmaWVsZC50eXBlLFxuICAgICAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgICAgICBmaWxlLFxuICAgICAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgICAgIG5hbWU6IGZpbGUubmFtZSxcbiAgICAgICAgICAgICAgICB0eXBlOiBmaWxlLnR5cGUsXG4gICAgICAgICAgICAgICAgc2l6ZTogZmlsZS5zaXplLFxuICAgICAgICAgICAgICAgIGxhc3RNb2RpZmllZDogZmlsZS5sYXN0TW9kaWZpZWQsXG4gICAgICAgICAgICAgICAgd2Via2l0UmVsYXRpdmVQYXRoOiBmaWxlLndlYmtpdFJlbGF0aXZlUGF0aFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHRoaXMudXBkYXRlRmlsZXMoZmlsZSwgXCJFUlJPUlwiLCBmaWVsZC5rZXkpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFRmllbGRUeXBlLkNBUFRVUkU6IHtcbiAgICAgICAgLy8gQWN0dWFsIEFQSSBDYWxsXG5cbiAgICAgICAgbGV0IG9jclBheWxvYWQ6IGFueSA9IHt9O1xuICAgICAgICBpZiAoaXNOb3RFbXB0eVZhbHVlKGZpZWxkPy5wcm9wZXJ0aWVzPy5mZWF0dXJlcz8ub2NyKSkge1xuICAgICAgICAgIG9jclBheWxvYWQgPSBmaWVsZC5wcm9wZXJ0aWVzLmZlYXR1cmVzLm9jcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZhY2VtYXRjaFBheWxvYWQ6IGFueSA9IHt9O1xuICAgICAgICBpZiAoaXNOb3RFbXB0eVZhbHVlKGZpZWxkPy5wcm9wZXJ0aWVzPy5mZWF0dXJlcz8uZmFjZW1hdGNoKSkge1xuICAgICAgICAgIGZhY2VtYXRjaFBheWxvYWQuaXNFbmFibGVkID1cbiAgICAgICAgICAgIGZpZWxkLnByb3BlcnRpZXMuZmVhdHVyZXMuZmFjZW1hdGNoLmlzRW5hYmxlZDtcblxuICAgICAgICAgIGZhY2VtYXRjaFBheWxvYWQuaXNGYWNlbWF0Y2hGcm9tU2VydmVyID1cbiAgICAgICAgICAgIGZpZWxkLnByb3BlcnRpZXMuZmVhdHVyZXMuZmFjZW1hdGNoLmlzRmFjZW1hdGNoRnJvbVNlcnZlcjtcblxuICAgICAgICAgIGZhY2VtYXRjaFBheWxvYWQuaW1hZ2VzID0gW107XG4gICAgICAgICAgY29uc3QgZmFjZW1hdGNoU291cmNlcyA9IGZpZWxkLnByb3BlcnRpZXMuZmVhdHVyZXMuZmFjZW1hdGNoLnNvdXJjZXM7XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IGZhY2VtYXRjaFNvdXJjZUNvbmZpZyBvZiBmYWNlbWF0Y2hTb3VyY2VzKSB7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2UgPSBuZXcgU291cmNlKHtcbiAgICAgICAgICAgICAgRklFTERfQ09ORklHOiBmaWVsZCxcbiAgICAgICAgICAgICAgRk9STV9GSUVMRFM6IHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgICAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgICAgICAgICBSRURVWF9EQVRBOiB0aGlzLnJlZHV4RGF0YSxcbiAgICAgICAgICAgICAgQ0FNRVJBX0RBVEE6IHRoaXMuY2FtZXJhRGF0YSxcbiAgICAgICAgICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgICAgICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgICAgICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuYWxsRm9ybXNEYXRhLFxuICAgICAgICAgICAgICBFWFRSQV9EQVRBOiB0aGlzLmV4dHJhRGF0YVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZVZhbHVlID0gYXdhaXQgc291cmNlLmdldFZhbHVlRnJvbVNvdXJjZShcbiAgICAgICAgICAgICAgZmFjZW1hdGNoU291cmNlQ29uZmlnXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBjb25zdCBmYWNlbWF0Y2hTb3VyY2UgPSB7XG4gICAgICAgICAgICAgIGtleTogZmFjZW1hdGNoU291cmNlQ29uZmlnLmlkLFxuICAgICAgICAgICAgICB2YWx1ZTogc291cmNlVmFsdWVcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGZhY2VtYXRjaFBheWxvYWQuaW1hZ2VzLnB1c2goZmFjZW1hdGNoU291cmNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB3YXRlcm1hcmtQYXlsb2FkOiBhbnkgPSB7fTtcbiAgICAgICAgaWYgKGlzTm90RW1wdHlWYWx1ZShmaWVsZD8ucHJvcGVydGllcz8uZmVhdHVyZXM/LndhdGVybWFyaykpIHtcbiAgICAgICAgICB3YXRlcm1hcmtQYXlsb2FkLmlzRW5hYmxlZCA9XG4gICAgICAgICAgICBmaWVsZC5wcm9wZXJ0aWVzLmZlYXR1cmVzLndhdGVybWFyay5pc0VuYWJsZWQ7XG5cbiAgICAgICAgICB3YXRlcm1hcmtQYXlsb2FkLmlzV2F0ZXJtYXJrRnJvbVNlcnZlciA9XG4gICAgICAgICAgICBmaWVsZC5wcm9wZXJ0aWVzLmZlYXR1cmVzLndhdGVybWFyay5pc1dhdGVybWFya0Zyb21TZXJ2ZXI7XG5cbiAgICAgICAgICB3YXRlcm1hcmtQYXlsb2FkLmRhdGEgPSBbXTtcbiAgICAgICAgICBjb25zdCB3YXRlcm1hcmtTb3VyY2VzID0gZmllbGQucHJvcGVydGllcy5mZWF0dXJlcy53YXRlcm1hcmsuc291cmNlcztcblxuICAgICAgICAgIHdhdGVybWFya1BheWxvYWQuY29uZmlnID0gZmllbGQucHJvcGVydGllcy5mZWF0dXJlcy53YXRlcm1hcmsuc291cmNlcztcblxuICAgICAgICAgIGZvciAoY29uc3Qgd2F0ZXJtYXJrU291cmNlQ29uZmlnIG9mIHdhdGVybWFya1NvdXJjZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IG5ldyBTb3VyY2Uoe1xuICAgICAgICAgICAgICBGSUVMRF9DT05GSUc6IGZpZWxkLFxuICAgICAgICAgICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgICAgIFJFRFVYX0RBVEE6IHRoaXMucmVkdXhEYXRhLFxuICAgICAgICAgICAgICBDQU1FUkFfREFUQTogdGhpcy5jYW1lcmFEYXRhLFxuICAgICAgICAgICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICAgICAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGEsXG4gICAgICAgICAgICAgIEVYVFJBX0RBVEE6IHRoaXMuZXh0cmFEYXRhXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3Qgc291cmNlVmFsdWUgPSBhd2FpdCBzb3VyY2UuZ2V0VmFsdWVGcm9tU291cmNlKFxuICAgICAgICAgICAgICB3YXRlcm1hcmtTb3VyY2VDb25maWdcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNvbnN0IHdhdGVybWFya1NvdXJjZSA9IHtcbiAgICAgICAgICAgICAga2V5OiB3YXRlcm1hcmtTb3VyY2VDb25maWcuaWQsXG4gICAgICAgICAgICAgIHZhbHVlOiBzb3VyY2VWYWx1ZVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgd2F0ZXJtYXJrUGF5bG9hZC5kYXRhLnB1c2god2F0ZXJtYXJrU291cmNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbGl2ZWxpbmVzc1BheWxvYWQ6IGFueSA9IHt9O1xuICAgICAgICBpZiAoaXNOb3RFbXB0eVZhbHVlKGZpZWxkPy5wcm9wZXJ0aWVzPy5mZWF0dXJlcz8ubGl2ZWxpbmVzcykpIHtcbiAgICAgICAgICBsaXZlbGluZXNzUGF5bG9hZCA9IGZpZWxkLnByb3BlcnRpZXMuZmVhdHVyZXMubGl2ZWxpbmVzcztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGltYWdlVXBsb2FkUGF5bG9hZCA9IHtcbiAgICAgICAgICBpbWFnZTogZmlsZSxcbiAgICAgICAgICAuLi4ob2NyUGF5bG9hZD8uaXNFbmFibGVkICYmIHtcbiAgICAgICAgICAgIG9jcjogb2NyUGF5bG9hZFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIC4uLihmYWNlbWF0Y2hQYXlsb2FkPy5pc0VuYWJsZWQgJiYge1xuICAgICAgICAgICAgZmFjZW1hdGNoOiBmYWNlbWF0Y2hQYXlsb2FkXG4gICAgICAgICAgfSksXG4gICAgICAgICAgLi4uKHdhdGVybWFya1BheWxvYWQ/LmlzRW5hYmxlZCAmJiB7XG4gICAgICAgICAgICB3YXRlcm1hcms6IHdhdGVybWFya1BheWxvYWRcbiAgICAgICAgICB9KSxcbiAgICAgICAgICAuLi4obGl2ZWxpbmVzc1BheWxvYWQ/LmlzRW5hYmxlZCAmJiB7XG4gICAgICAgICAgICBsaXZlbGluZXNzOiBsaXZlbGluZXNzUGF5bG9hZFxuICAgICAgICAgIH0pXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0FQSV9SRVFVRVNUX1VQTE9BRF9JTUFHRSwge1xuICAgICAgICAgIGZpZWxkX2tleTogZmllbGQua2V5LFxuICAgICAgICAgIGZpZWxkX3R5cGU6IGZpZWxkLnR5cGUsXG4gICAgICAgICAgcmVxdWVzdDogaW1hZ2VVcGxvYWRQYXlsb2FkXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy5vbkNsaWNrQXBpQ2FsbC5lbWl0KHtcbiAgICAgICAgICAgIGtleTogZmllbGQua2V5LFxuICAgICAgICAgICAgdHlwZTogZmllbGQudHlwZSxcbiAgICAgICAgICAgIHBheWxvYWQ6IGltYWdlVXBsb2FkUGF5bG9hZFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkZhaWxlZCB0byB1cGxvYWQgaW1hZ2UgdG8gc2VydmVyIVwiKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgRUZpZWxkVHlwZS5SRUNPUkQ6XG4gICAgICAgIC8vIEFjdHVhbCBBUEkgQ2FsbFxuXG4gICAgICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19BUElfUkVRVUVTVF9VUExPQURfVklERU8sIHtcbiAgICAgICAgICBmaWVsZF9rZXk6IGZpZWxkLmtleSxcbiAgICAgICAgICBmaWVsZF90eXBlOiBmaWVsZC50eXBlLFxuICAgICAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgICAgIHZpZGVvOiBmaWxlXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMub25DbGlja0FwaUNhbGwuZW1pdCh7XG4gICAgICAgICAgICBrZXk6IGZpZWxkLmtleSxcbiAgICAgICAgICAgIHR5cGU6IGZpZWxkLnR5cGUsXG4gICAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICAgIHZpZGVvOiBmaWxlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwiRmFpbGVkIHRvIHVwbG9hZCB2aWRlbyB0byBzZXJ2ZXIhXCIpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBoYW5kbGVPbkNsaWNrRm9ybUZpZWxkQnV0dG9uKGZpZWxkOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtRGF0YSA9IHRoaXMuZm9ybUdyb3VwLmdldFJhd1ZhbHVlKCk7XG5cbiAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIHRoaXMuZm9ybUZpZWxkcykge1xuICAgICAgaWYgKGZpZWxkLmlzRm9ybUVsZW1lbnQpIHtcbiAgICAgICAgaWYgKGZpZWxkLmhpZGRlbikge1xuICAgICAgICAgIGRlbGV0ZSBmb3JtRGF0YVtmaWVsZC5rZXldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvcm1EYXRhW2ZpZWxkLmtleV0gPSBjb252ZXJ0Rm9ybUZpZWxkVmFsdWVUb1N0YW5kYXJkRm9ybWF0KFxuICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICBmb3JtRGF0YVtmaWVsZC5rZXldXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGV4dGVuZGVkRm9ybURhdGEgPSB0aGlzLmZvcm1GaWVsZHMucmVkdWNlKChyZXN1bHQsIGZpZWxkLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGZpZWxkLmlzRm9ybUVsZW1lbnQgJiYgIWZpZWxkLmhpZGRlbikge1xuICAgICAgICBjb25zdCBmaWVsZERhdGEgPSB7XG4gICAgICAgICAgW2ZpZWxkLmtleV06IHtcbiAgICAgICAgICAgIGtleTogZmllbGQua2V5LFxuICAgICAgICAgICAgbGFiZWw6IGZpZWxkLmxhYmVsLFxuICAgICAgICAgICAgdmFsdWU6IGlzRW1wdHlWYWx1ZShmb3JtRGF0YVtmaWVsZC5rZXldKSA/IFwiXCIgOiBmb3JtRGF0YVtmaWVsZC5rZXldLFxuICAgICAgICAgICAgdHlwZTogZmllbGQudHlwZSxcbiAgICAgICAgICAgIGluZGV4XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXN1bHRbZmllbGQua2V5XSA9IGZpZWxkRGF0YVtmaWVsZC5rZXldO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LCB7fSk7XG5cbiAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fRklFTERfQlVUVE9OX0NMSUNLLCB7XG4gICAgICBmaWVsZF9rZXk6IGZpZWxkLmtleSxcbiAgICAgIGZpZWxkX3R5cGU6IGZpZWxkLnR5cGUsXG4gICAgICBmaWVsZF9sYWJlbDogZmllbGQubGFiZWxcbiAgICB9KTtcblxuICAgIHRoaXMub25DbGlja0Zvcm1GaWVsZEJ1dHRvbi5lbWl0KHtcbiAgICAgIGNvbmZpZzogZmllbGQsXG4gICAgICBkYXRhOiBtZXJnZU9iamVjdHModGhpcy5mb3JtRGF0YSwgdGhpcy5wb3B1cEZvcm1EYXRhLCB0aGlzLnRhc2tEYXRhKSxcbiAgICAgIGV4dGVuZGVkRGF0YTogZXh0ZW5kZWRGb3JtRGF0YVxuICAgIH0pO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBoYW5kbGVPbkxvY2F0aW9uUGVybWlzc2lvbihlOiBhbnkpIHtcbiAgICBjb25zdCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgZS5rZXkpO1xuICAgIGNvbnN0IGZpZWxkSW5kZXggPSB0aGlzLmZvcm1GaWVsZHMuZmluZEluZGV4KChfOiBhbnkpID0+IHtcbiAgICAgIHJldHVybiBmaWVsZC5rZXkgPT09IF8ua2V5O1xuICAgIH0pO1xuXG4gICAgLy8gc2V0IGJ1dHRvbiBzdGF0dXMgdG8gZGVmYXVsdFxuICAgIGZpZWxkLmFwaS5zdGF0dXMudmFsdWUgPSBFQXBpU3RhdHVzVHlwZS5MT0FESU5HO1xuICAgIGZpZWxkLnNob3dMb2FkZXIgPSB0cnVlO1xuICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XSA9IGZpZWxkO1xuICAgIHRoaXMuc2hvd0FwaUxvYWRlcigpO1xuICAgIHRoaXMuZmllbGRTaG93QXBpTG9hZGVyKGZpZWxkLmtleSk7XG5cbiAgICBpZiAoIWUucGVybWlzc2lvbikge1xuICAgICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0xJVkVfTE9DQVRJT05fUEVSTUlTU0lPTl9FUlJPUiwge1xuICAgICAgICBmaWVsZF9rZXk6IGZpZWxkLmtleSxcbiAgICAgICAgZmllbGRfdHlwZTogZmllbGQudHlwZVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMudG9nZ2xlUGVybWlzc2lvbkVycm9yTm90aWZpY2F0aW9uKHRydWUpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMudG9nZ2xlUGVybWlzc2lvbkVycm9yTm90aWZpY2F0aW9uKGZhbHNlKTtcbiAgICAgIH0sIEZPUk1fVklFV19USU1FUlMuTE9DQVRJT05fUEVSTUlTU0lPTl9FUlJPUl9UT0dHTEUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fTElWRV9MT0NBVElPTl9QRVJNSVNTSU9OX1NVQ0NFU1MsIHtcbiAgICAgICAgZmllbGRfa2V5OiBmaWVsZC5rZXksXG4gICAgICAgIGZpZWxkX3R5cGU6IGZpZWxkLnR5cGVcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy8gc2V0IGJ1dHRvbiBzdGF0dXMgdG8gZGVmYXVsdFxuICAgICAgZmllbGQuYXBpLnN0YXR1cy52YWx1ZSA9IEVBcGlTdGF0dXNUeXBlLkRFRkFVTFQ7XG4gICAgICBmaWVsZC5zaG93TG9hZGVyID0gZmFsc2U7XG4gICAgICB0aGlzLmZvcm1GaWVsZHNbZmllbGRJbmRleF0gPSBmaWVsZDtcbiAgICAgIHRoaXMuaGlkZUFwaUxvYWRlcigpO1xuICAgICAgdGhpcy5maWVsZEhpZGVBcGlMb2FkZXIoZmllbGQua2V5KTtcbiAgICB9LCBGT1JNX1ZJRVdfVElNRVJTLkxPQ0FUSU9OX1BFUk1JU1NJT05fUkVTRVRfQlVUVE9OX1NUQVRVUyk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIGhhbmRsZU9uQ2xpY2tMaXZlTG9jYXRpb24oZTogYW55KSB7XG4gICAgY29uc3QgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGUua2V5KTtcblxuICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19MSVZFX0xPQ0FUSU9OX0JVVFRPTl9DTElDSywge1xuICAgICAgZmllbGRfa2V5OiBmaWVsZC5rZXksXG4gICAgICBmaWVsZF90eXBlOiBmaWVsZC50eXBlXG4gICAgfSk7XG5cbiAgICAvLyBzZXQgYnV0dG9uIHN0YXR1cyB0byBsb2FkaW5nXG4gICAgZmllbGQuYXBpLnN0YXR1cy52YWx1ZSA9IEVBcGlTdGF0dXNUeXBlLkxPQURJTkc7XG4gICAgZmllbGQuc2hvd0xvYWRlciA9IHRydWU7XG5cbiAgICB0aGlzLnNob3dBcGlMb2FkZXIoKTtcblxuICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUoXG4gICAgICB7XG4gICAgICAgIFtlLmtleV06IGUudmFsdWVcbiAgICAgIH0sXG4gICAgICB7IGVtaXRFdmVudDogZmFsc2UgfVxuICAgICk7XG5cbiAgICB0aGlzLmZvcm1EYXRhW2Uua2V5XSA9IGNvbnZlcnRGb3JtRmllbGRWYWx1ZVRvU3RhbmRhcmRGb3JtYXQoXG4gICAgICBmaWVsZCxcbiAgICAgIGUudmFsdWVcbiAgICApO1xuXG4gICAgdGhpcy5nZXRVbnNhdmVkRGF0YVN0YXRlLmVtaXQodHJ1ZSk7XG5cbiAgICBpZiAoXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJwcm9wZXJ0aWVzXCIpICYmXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZC5wcm9wZXJ0aWVzLCBcImlzR2V0TG9jYXRpb25Gcm9tTGF0TG9uZ1wiKSAmJlxuICAgICAgZmllbGQucHJvcGVydGllcy5pc0dldExvY2F0aW9uRnJvbUxhdExvbmdcbiAgICApIHtcbiAgICAgIHRoaXMub25DbGlja0FwaUNhbGwuZW1pdCh7XG4gICAgICAgIGtleTogZmllbGQua2V5LFxuICAgICAgICB0eXBlOiBmaWVsZC50eXBlLFxuICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgLi4uZS5saXZlTG9jYXRpb25cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgIH0sIEZPUk1fVklFV19USU1FUlMuVElNRVJfMzAwKTsgLy8gMTAwMCBtcyA9IDEgc2VjXG4gICAgICB9KTtcblxuICAgICAgLy8gc2V0IGJ1dHRvbiBzdGF0dXMgdG8gc3VjY2Vzc1xuICAgICAgZmllbGQuYXBpLnN0YXR1cy52YWx1ZSA9IEVBcGlTdGF0dXNUeXBlLlNVQ0NFU1M7XG4gICAgICBmaWVsZC5zaG93TG9hZGVyID0gZmFsc2U7XG5cbiAgICAgIGlmIChcbiAgICAgICAgZmllbGQuaXNGb3JtRWxlbWVudCAmJlxuICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJ2YWxpZGF0aW9uXCIpICYmXG4gICAgICAgIGZpZWxkLnZhbGlkYXRpb24udHJpZ2dlcnMuaW5jbHVkZXMoXCJPTl9DSEFOR0VcIilcbiAgICAgICkge1xuICAgICAgICBjb25zdCBydWxlRW5naW5lID0gbmV3IFJ1bGVFbmdpbmUoXG4gICAgICAgICAge1xuICAgICAgICAgICAgRklFTERfQ09ORklHOiBmaWVsZCxcbiAgICAgICAgICAgIEZPUk1fRklFTERTOiB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgICBSRURVWF9EQVRBOiB0aGlzLnJlZHV4RGF0YSxcbiAgICAgICAgICAgIENBTUVSQV9EQVRBOiB0aGlzLmNhbWVyYURhdGEsXG4gICAgICAgICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICAgICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YSxcbiAgICAgICAgICAgIEVYVFJBX0RBVEE6IHRoaXMuZXh0cmFEYXRhXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKVxuICAgICAgICApO1xuXG4gICAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgYXdhaXQgcnVsZUVuZ2luZS5ydW4oZmllbGQudmFsaWRhdGlvbik7XG4gICAgICAgIH0pKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgZmllbGQuaXNGb3JtRWxlbWVudCAmJlxuICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJjb25uZWN0ZWRFbGVtZW50c1wiKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlQ29ubmVjdGVkRWxlbWVudHMoXG4gICAgICAgICAge1xuICAgICAgICAgICAga2V5OiBmaWVsZC5rZXksXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS52YWx1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJPTl9DSEFOR0VcIlxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmhpZGVBcGlMb2FkZXIoKTtcbiAgICB9XG4gIH1cblxuICAvLyBET00gRXZlbnQgSGFuZGxlcnNcbiAgQGxvZ01ldGhvZFxuICBoYW5kbGVHZXRLZXlWYWx1ZShlOiBhbnkpIHtcbiAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKFxuICAgICAge1xuICAgICAgICBbZS5rZXldOiBlLnZhbHVlXG4gICAgICB9LFxuICAgICAgeyBlbWl0RXZlbnQ6IGZhbHNlIH1cbiAgICApO1xuXG4gICAgY29uc3QgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGUua2V5KTtcbiAgICB0aGlzLmZvcm1EYXRhW2Uua2V5XSA9IGNvbnZlcnRGb3JtRmllbGRWYWx1ZVRvU3RhbmRhcmRGb3JtYXQoXG4gICAgICBmaWVsZCxcbiAgICAgIGUudmFsdWVcbiAgICApO1xuXG4gICAgdGhpcy5nZXRVbnNhdmVkRGF0YVN0YXRlLmVtaXQodHJ1ZSk7XG5cbiAgICBpZiAoXG4gICAgICBmaWVsZC5pc0Zvcm1FbGVtZW50ICYmXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJ2YWxpZGF0aW9uXCIpICYmXG4gICAgICBmaWVsZC52YWxpZGF0aW9uLnRyaWdnZXJzLmluY2x1ZGVzKFwiT05fQ0hBTkdFXCIpXG4gICAgKSB7XG4gICAgICBjb25zdCBydWxlRW5naW5lID0gbmV3IFJ1bGVFbmdpbmUoXG4gICAgICAgIHtcbiAgICAgICAgICBGSUVMRF9DT05GSUc6IGZpZWxkLFxuICAgICAgICAgIEZPUk1fRklFTERTOiB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgICAgIFJFRFVYX0RBVEE6IHRoaXMucmVkdXhEYXRhLFxuICAgICAgICAgIENBTUVSQV9EQVRBOiB0aGlzLmNhbWVyYURhdGEsXG4gICAgICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YSxcbiAgICAgICAgICBFWFRSQV9EQVRBOiB0aGlzLmV4dHJhRGF0YVxuICAgICAgICB9LFxuICAgICAgICB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKVxuICAgICAgKTtcblxuICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgcnVsZUVuZ2luZS5ydW4oZmllbGQudmFsaWRhdGlvbik7XG4gICAgICB9KSgpO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGZpZWxkLmlzRm9ybUVsZW1lbnQgJiZcbiAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLCBcImNvbm5lY3RlZEVsZW1lbnRzXCIpXG4gICAgKSB7XG4gICAgICB0aGlzLmhhbmRsZUNvbm5lY3RlZEVsZW1lbnRzKFxuICAgICAgICB7XG4gICAgICAgICAga2V5OiBmaWVsZC5rZXksXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0udmFsdWVcbiAgICAgICAgfSxcbiAgICAgICAgXCJPTl9DSEFOR0VcIlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIGhhbmRsZU9uQ2xpY2tSZXNldEZvcm1GaWVsZHMoZTogYW55LCBmaWVsZDogVEZpZWxkVGl0bGUpIHtcbiAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fRklFTERfUkVTRVRfQlVUVE9OX0NMSUNLLCB7XG4gICAgICBmaWVsZF9rZXk6IGZpZWxkLmtleVxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzZXRGb3JtRmllbGRzID0gYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKGNoZWNrT2JqZWN0UGF0aEV4aXN0cyhmaWVsZCwgXCJyZXNldC5maWVsZHNcIikpIHtcbiAgICAgICAgZm9yIChjb25zdCBmIG9mIGZpZWxkLnJlc2V0LmZpZWxkcykge1xuICAgICAgICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIGYuYWN0aW9ucykge1xuICAgICAgICAgICAgY29uc3QgcmVzZXRGaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KFxuICAgICAgICAgICAgICB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgICAgIGFjdGlvbi5wcm9wcy5maWVsZEtleVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbnMgPSBuZXcgQWN0aW9uKFxuICAgICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgRklFTERfQ09ORklHOiByZXNldEZpZWxkLFxuICAgICAgICAgICAgICAgIEZPUk1fRklFTERTOiB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgICAgICAgICAgIFJFRFVYX0RBVEE6IHRoaXMucmVkdXhEYXRhLFxuICAgICAgICAgICAgICAgIENBTUVSQV9EQVRBOiB0aGlzLmNhbWVyYURhdGEsXG4gICAgICAgICAgICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgICAgICAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgICAgICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YSxcbiAgICAgICAgICAgICAgICBFWFRSQV9EQVRBOiB0aGlzLmV4dHJhRGF0YVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGF3YWl0IGFjdGlvbnMuZXhlY3V0ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGNoZWNrT2JqZWN0UGF0aEV4aXN0cyhmaWVsZCwgXCJyZXNldC5maWVsZEdyb3Vwc1wiKSkge1xuICAgICAgICBmb3IgKGNvbnN0IGZnIG9mIGZpZWxkLnJlc2V0LmZpZWxkR3JvdXBzKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBhY3Rpb24gb2YgZmcuYWN0aW9ucykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZEtleSBvZiB0aGlzLmZpZWxkR3JvdXBzW2ZnLmdyb3VwS2V5XSkge1xuICAgICAgICAgICAgICBjb25zdCByZXNldEZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCBmaWVsZEtleSk7XG4gICAgICAgICAgICAgIGNvbnN0IGFjdGlvbnMgPSBuZXcgQWN0aW9uKFxuICAgICAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgICAgICB7fSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBGSUVMRF9DT05GSUc6IHJlc2V0RmllbGQsXG4gICAgICAgICAgICAgICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgICAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgICAgICAgICAgICAgUkVEVVhfREFUQTogdGhpcy5yZWR1eERhdGEsXG4gICAgICAgICAgICAgICAgICBDQU1FUkFfREFUQTogdGhpcy5jYW1lcmFEYXRhLFxuICAgICAgICAgICAgICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgICAgICAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgICAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGEsXG4gICAgICAgICAgICAgICAgICBFWFRSQV9EQVRBOiB0aGlzLmV4dHJhRGF0YVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdGhpcy50YWtlQWN0aW9uT25GaWVsZEdyb3VwLmJpbmQodGhpcylcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgYXdhaXQgYWN0aW9ucy5leGVjdXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IEJZUEFTU19SRVNFVF9DT05GSVJNID0gZmllbGQ/LnByb3BlcnRpZXM/LmJ5cGFzc1Jlc2V0Q29uZmlybWF0aW9uO1xuXG4gICAgaWYgKCFCWVBBU1NfUkVTRVRfQ09ORklSTSkge1xuICAgICAgY29uc3QgQ09ORklSTV9SRVNFVCA9IHdpbmRvdy5jb25maXJtKFxuICAgICAgICBcIlRoaXMgYWN0aW9uIHdpbGwgcmVzZXQgYWxsIHRoZSBmaWVsZHMuIERvIHlvdSBzdGlsbCB3YW50IHRvIGNvbnRpbnVlP1wiXG4gICAgICApO1xuXG4gICAgICBpZiAoQ09ORklSTV9SRVNFVCkge1xuICAgICAgICByZXNldEZvcm1GaWVsZHMoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmVzZXRGb3JtRmllbGRzKCk7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBoYW5kbGVGaWVsZEFwaUNhbGwoZmllbGQ6IFRGaWVsZEFwaUNhbGwsIGFwaTogYW55KSB7XG4gICAgYXBpID0gYXdhaXQgdGhpcy5leGVjdXRlQXBpQ2FsbChhcGksIHtcbiAgICAgIEZJRUxEX0NPTkZJRzogZmllbGQsXG4gICAgICBBUElfQ09ORklHOiBhcGksXG4gICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgUkVEVVhfREFUQTogdGhpcy5yZWR1eERhdGEsXG4gICAgICBDQU1FUkFfREFUQTogdGhpcy5jYW1lcmFEYXRhLFxuICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGEsXG4gICAgICBFWFRSQV9EQVRBOiB0aGlzLmV4dHJhRGF0YVxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuaXNWYWxpZFJlcXVlc3RIZWFkZXJzQW5kQm9keShhcGkpKSB7XG4gICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQuYXBpLCBcInJlcXVlc3RcIikpIHtcbiAgICAgICAgdGhpcy5mb3JtRGF0YSA9IHtcbiAgICAgICAgICAuLi50aGlzLmZvcm1EYXRhLFxuICAgICAgICAgIFtmaWVsZC5rZXldOiBhcGkucmVzcG9uc2UudmFsdWVcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFtmaWVsZC5rZXldOiBhcGkucmVzcG9uc2UudmFsdWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgZW1pdEV2ZW50OiBmYWxzZSB9XG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFwaXMgPSBuZXcgQXBpcyhcbiAgICAgICAge1xuICAgICAgICAgIEZJRUxEX0NPTkZJRzogZmllbGQsXG4gICAgICAgICAgQVBJX0NPTkZJRzogYXBpLFxuICAgICAgICAgIEFQSV9SRVNQT05TRTogYXBpLnJlc3BvbnNlLFxuICAgICAgICAgIEZPUk1fRklFTERTOiB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgICAgIFJFRFVYX0RBVEE6IHRoaXMucmVkdXhEYXRhLFxuICAgICAgICAgIENBTUVSQV9EQVRBOiB0aGlzLmNhbWVyYURhdGEsXG4gICAgICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YSxcbiAgICAgICAgICBFWFRSQV9EQVRBOiB0aGlzLmV4dHJhRGF0YVxuICAgICAgICB9LFxuICAgICAgICB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKVxuICAgICAgKTtcblxuICAgICAgYXBpID0gYXdhaXQgYXBpcy52YWxpZGF0ZVJlc3BvbnNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBmaWVsZC5hcGkuc3RhdHVzLnZhbHVlID0gRUFwaVN0YXR1c1R5cGUuRkFJTEVEO1xuICAgICAgICAoZmllbGQgYXMgYW55KS5zaG93TG9hZGVyID0gZmFsc2U7XG4gICAgICB9LCBGT1JNX1ZJRVdfVElNRVJTLlRJTUVSXzUwMCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgZmllbGQsIGFwaSB9O1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBoYW5kbGVBcGlDYWxsKGFwaTogYW55KSB7XG4gICAgYXBpID0gYXdhaXQgdGhpcy5leGVjdXRlQXBpQ2FsbChhcGksIHtcbiAgICAgIEZPUk1fQ09ORklHOiB0aGlzLmZvcm1Db25maWcsXG4gICAgICBBUElfQ09ORklHOiBhcGksXG4gICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgUkVEVVhfREFUQTogdGhpcy5yZWR1eERhdGEsXG4gICAgICBDQU1FUkFfREFUQTogdGhpcy5jYW1lcmFEYXRhLFxuICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGEsXG4gICAgICBFWFRSQV9EQVRBOiB0aGlzLmV4dHJhRGF0YVxuICAgIH0pO1xuXG4gICAgY29uc3QgYXBpcyA9IG5ldyBBcGlzKFxuICAgICAge1xuICAgICAgICBGT1JNX0NPTkZJRzogdGhpcy5mb3JtQ29uZmlnLFxuICAgICAgICBBUElfQ09ORklHOiBhcGksXG4gICAgICAgIEZPUk1fRklFTERTOiB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgIEZPUk1fREFUQTogdGhpcy5mb3JtRGF0YSxcbiAgICAgICAgUkVEVVhfREFUQTogdGhpcy5yZWR1eERhdGEsXG4gICAgICAgIENBTUVSQV9EQVRBOiB0aGlzLmNhbWVyYURhdGEsXG4gICAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YSxcbiAgICAgICAgRVhUUkFfREFUQTogdGhpcy5leHRyYURhdGFcbiAgICAgIH0sXG4gICAgICB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKVxuICAgICk7XG5cbiAgICBpZiAodGhpcy5pc1ZhbGlkUmVxdWVzdEhlYWRlcnNBbmRCb2R5KGFwaSkpIHtcbiAgICAgIGFwaSA9IGF3YWl0IGFwaXMudmFsaWRhdGVSZXNwb25zZSgpO1xuICAgIH1cblxuICAgIHJldHVybiB7IGFwaSB9O1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBleGVjdXRlQXBpQ2FsbChhcGk6IGFueSwgb2JqZWN0OiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IGFwaXMgPSBuZXcgQXBpcyhvYmplY3QsIHRoaXMudGFrZUFjdGlvbi5iaW5kKHRoaXMpKTtcblxuICAgIGFwaSA9IGF3YWl0IGFwaXMuc2V0VXJsKCk7XG4gICAgYXBpID0gYXdhaXQgYXBpcy5zZXRSZXF1ZXN0SGVhZGVycygpO1xuICAgIGFwaSA9IGF3YWl0IGFwaXMudmFsaWRhdGVSZXF1ZXN0SGVhZGVycygpO1xuICAgIGFwaSA9IGF3YWl0IGFwaXMuc2V0UmVxdWVzdEJvZHkoKTtcbiAgICBhcGkgPSBhd2FpdCBhcGlzLnZhbGlkYXRlUmVxdWVzdEJvZHkoKTtcblxuICAgIGxldCBhcGlDYWxsUmVzcG9uc2U6IGFueSA9IHt9O1xuICAgIGxldCBhcGlDYWxsUmVzcG9uc2VTdGF0dXNDb2RlO1xuXG4gICAgaWYgKHRoaXMuaXNWYWxpZFJlcXVlc3RIZWFkZXJzQW5kQm9keShhcGkpKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGFwaS5yZXF1ZXN0LnVybCwgXCJ0eXBlXCIpICYmXG4gICAgICAgIGFwaS5yZXF1ZXN0LnVybC50eXBlID09PSBFQXBpUmVxdWVzdFVybFR5cGUuTU9DS1xuICAgICAgKSB7XG4gICAgICAgIGFwaUNhbGxSZXNwb25zZSA9IGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKGFwaS5yZXF1ZXN0LnVybC5wcm9wcy5tb2NrZWREYXRhKTtcbiAgICAgICAgICB9LCBGT1JNX1ZJRVdfVElNRVJTLldBSVRfRk9SX0FQSV9NT0NLX0RBVEEpOyAvLyAxMDAwIG1zID0gMSBzZWNcbiAgICAgICAgfSk7XG4gICAgICAgIGFwaUNhbGxSZXNwb25zZVN0YXR1c0NvZGUgPVxuICAgICAgICAgIGFwaS5yZXF1ZXN0LnVybC5wcm9wcz8uc3RhdHVzQ29kZSA/P1xuICAgICAgICAgIEZPUk1fVklFV19USU1FUlMuQVBJX01PQ0tfU1VDQ0VTU19TVEFUVVNfQ09ERTsgLy8gRGVmYXVsdCBTdGF0dXMgQ29kZSBmb3IgTW9ja2VkIEFQSXNcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHVybDogc3RyaW5nID0gYXBpLnJlcXVlc3QudXJsLnZhbHVlO1xuICAgICAgICBjb25zdCBtZXRob2Q6IHN0cmluZyA9IGFwaS5yZXF1ZXN0Py5tZXRob2QgPz8gXCJQT1NUXCI7XG4gICAgICAgIGNvbnN0IGhlYWRlcnM6IGFueSA9IHtcbiAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICAuLi4oYXBpLnJlcXVlc3Q/LmhlYWRlcnM/LnZhbHVlIHx8IHt9KVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChtZXRob2QgPT09IFwiR0VUXCIpIHtcbiAgICAgICAgICAvLyBUcmlnZ2VyIGxvZ3MgZm9yIEFQSSByZXF1ZXN0IHdpdGggdGhlIG1ldGhvZCBhbmQgQVBJIGtleVxuICAgICAgICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19BUElfUkVRVUVTVCwge1xuICAgICAgICAgICAgZm9ybV9hcGlfbWV0aG9kOiBtZXRob2QsXG4gICAgICAgICAgICBmb3JtX2FwaV9rZXk6IGFwaT8uYXBpS2V5ID8/IFwiXCJcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgcmVzcG9uc2UgbmVlZHMgdG8gYmUgZGVjcnlwdGVkXG4gICAgICAgICAgICBjb25zdCBpc0RlY3J5cHRSZXNwb25zZTogYm9vbGVhbiA9IGFwaT8ucmVzcG9uc2U/LmlzU2VjdXJlID8/IGZhbHNlO1xuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHJlc3BvbnNlIHNpZ25hdHVyZSBuZWVkcyB0byBiZSB2ZXJpZmllZFxuICAgICAgICAgICAgY29uc3QgaXNWZXJpZnlTaWduYXR1cmU6IGJvb2xlYW4gPVxuICAgICAgICAgICAgICBhcGk/LnJlc3BvbnNlPy5pc1ZlcmlmeVNpZ25hdHVyZSA/PyBmYWxzZTtcblxuICAgICAgICAgICAgLy8gRXhlY3V0ZSB0aGUgQVBJIGNhbGwgZm9yIEdFVCBtZXRob2RcbiAgICAgICAgICAgIGNvbnN0IGV4ZWN1dGVkQXBpQ2FsbDogYW55ID1cbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5mb3JtVmlld0FwaVNlcnZpY2UuZXhlY3V0ZUFwaUNhbGwoXG4gICAgICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgICAgIFwiR0VUXCIsXG4gICAgICAgICAgICAgICAge30sIC8vIE5vIHJlcXVlc3QgYm9keSBmb3IgR0VUIG1ldGhvZFxuICAgICAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgZmFsc2UsIC8vIGlzRW5jcnlwdFJlcXVlc3RCb2R5IGlzIG5vdCBhcHBsaWNhYmxlIGZvciBHRVQgbWV0aG9kXG4gICAgICAgICAgICAgICAgaXNEZWNyeXB0UmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgaXNWZXJpZnlTaWduYXR1cmVcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGFwaUNhbGxSZXNwb25zZSA9IGV4ZWN1dGVkQXBpQ2FsbC5kYXRhO1xuICAgICAgICAgICAgYXBpQ2FsbFJlc3BvbnNlU3RhdHVzQ29kZSA9IGV4ZWN1dGVkQXBpQ2FsbC5zdGF0dXM7XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAvLyBIYW5kbGUgYW55IGVycm9yc1xuICAgICAgICAgICAgYXBpQ2FsbFJlc3BvbnNlID0ge307XG4gICAgICAgICAgICBhcGlDYWxsUmVzcG9uc2VTdGF0dXNDb2RlID1cbiAgICAgICAgICAgICAgRk9STV9WSUVXX1RJTUVSUy5BUElfTU9DS19FUlJPUl9TVEFUVVNfQ09ERTsgLy8gSW50ZXJuYWwgU2VydmVyIEVycm9yXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEV4dHJhY3QgdGhlIHJlcXVlc3QgYm9keSBmcm9tIHRoZSBBUEkgY29uZmlndXJhdGlvblxuICAgICAgICAgIGNvbnN0IGJvZHk6IGFueSA9IGFwaT8ucmVxdWVzdD8uYm9keT8udmFsdWUgPz8ge307XG5cbiAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgcmVxdWVzdCBib2R5IG5lZWRzIHRvIGJlIGVuY3J5cHRlZFxuICAgICAgICAgIGNvbnN0IGlzRW5jcnlwdFJlcXVlc3RCb2R5OiBib29sZWFuID1cbiAgICAgICAgICAgIGFwaT8ucmVxdWVzdD8uYm9keT8uaXNTZWN1cmUgPz8gZmFsc2U7XG4gICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHJlc3BvbnNlIG5lZWRzIHRvIGJlIGRlY3J5cHRlZFxuICAgICAgICAgIGNvbnN0IGlzRGVjcnlwdFJlc3BvbnNlOiBib29sZWFuID0gYXBpPy5yZXNwb25zZT8uaXNTZWN1cmUgPz8gZmFsc2U7XG4gICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHJlc3BvbnNlIHNpZ25hdHVyZSBuZWVkcyB0byBiZSB2ZXJpZmllZFxuICAgICAgICAgIGNvbnN0IGlzVmVyaWZ5U2lnbmF0dXJlOiBib29sZWFuID1cbiAgICAgICAgICAgIGFwaT8ucmVzcG9uc2U/LmlzVmVyaWZ5U2lnbmF0dXJlID8/IGZhbHNlO1xuXG4gICAgICAgICAgLy8gVHJpZ2dlciBsb2dzIGZvciBBUEkgcmVxdWVzdCB3aXRoIHRoZSBtZXRob2QgYW5kIEFQSSBrZXlcbiAgICAgICAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fQVBJX1JFUVVFU1QsIHtcbiAgICAgICAgICAgIGZvcm1fYXBpX21ldGhvZDogbWV0aG9kLFxuICAgICAgICAgICAgZm9ybV9hcGlfa2V5OiBhcGk/LmFwaUtleSA/PyBcIlwiLFxuICAgICAgICAgICAgZm9ybV9hcGlfcmVxdWVzdF9lbmNyeXB0ZWQ6IGlzRW5jcnlwdFJlcXVlc3RCb2R5LFxuICAgICAgICAgICAgLi4uKCFpc0VuY3J5cHRSZXF1ZXN0Qm9keSAmJiB7XG4gICAgICAgICAgICAgIGZvcm1fYXBpX3JlcXVlc3RfYm9keTogYm9keVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBFeGVjdXRlIHRoZSBBUEkgY2FsbCBmb3IgUE9TVCBtZXRob2RcbiAgICAgICAgICAgIGNvbnN0IGV4ZWN1dGVkQXBpQ2FsbDogYW55ID1cbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5mb3JtVmlld0FwaVNlcnZpY2UuZXhlY3V0ZUFwaUNhbGwoXG4gICAgICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgICAgIFwiUE9TVFwiLFxuICAgICAgICAgICAgICAgIGJvZHksXG4gICAgICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICAgICAgICBpc0VuY3J5cHRSZXF1ZXN0Qm9keSxcbiAgICAgICAgICAgICAgICBpc0RlY3J5cHRSZXNwb25zZSxcbiAgICAgICAgICAgICAgICBpc1ZlcmlmeVNpZ25hdHVyZVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgYXBpQ2FsbFJlc3BvbnNlID0gZXhlY3V0ZWRBcGlDYWxsLmRhdGE7XG4gICAgICAgICAgICBhcGlDYWxsUmVzcG9uc2VTdGF0dXNDb2RlID0gZXhlY3V0ZWRBcGlDYWxsLnN0YXR1cztcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIC8vIEhhbmRsZSBhbnkgZXJyb3JzXG4gICAgICAgICAgICBhcGlDYWxsUmVzcG9uc2UgPSB7fTtcbiAgICAgICAgICAgIGFwaUNhbGxSZXNwb25zZVN0YXR1c0NvZGUgPVxuICAgICAgICAgICAgICBGT1JNX1ZJRVdfVElNRVJTLkFQSV9NT0NLX0VSUk9SX1NUQVRVU19DT0RFOyAvLyBJbnRlcm5hbCBTZXJ2ZXIgRXJyb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYXBpLnJlc3BvbnNlID0gc2V0VmFsdWVUb09iamVjdFBhdGgoXG4gICAgICAgIGFwaS5yZXNwb25zZSxcbiAgICAgICAgXCJ2YWx1ZVwiLFxuICAgICAgICBhcGlDYWxsUmVzcG9uc2VcbiAgICAgICk7XG5cbiAgICAgIGFwaS5yZXNwb25zZSA9IHNldFZhbHVlVG9PYmplY3RQYXRoKFxuICAgICAgICBhcGkucmVzcG9uc2UsXG4gICAgICAgIFwic3RhdHVzXCIsXG4gICAgICAgIGFwaUNhbGxSZXNwb25zZVN0YXR1c0NvZGVcbiAgICAgICk7XG5cbiAgICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19BUElfUkVTUE9OU0UsIHtcbiAgICAgICAgZm9ybV9hcGlfa2V5OiBhcGk/LmFwaUtleSA/PyBcIlwiLFxuICAgICAgICBmb3JtX2FwaV9yZXNwb25zZV9lbmNyeXB0ZWQ6IGFwaT8ucmVzcG9uc2U/LmlzU2VjdXJlID8/IGZhbHNlLFxuICAgICAgICAuLi4oIWFwaT8ucmVzcG9uc2U/LmlzU2VjdXJlICYmIHtcbiAgICAgICAgICBmb3JtX2FwaV9yZXNwb25zZV9ib2R5OiBhcGlDYWxsUmVzcG9uc2UgPz8ge31cbiAgICAgICAgfSksXG4gICAgICAgIGZvcm1fYXBpX3N0YXR1c19jb2RlOiBhcGlDYWxsUmVzcG9uc2VTdGF0dXNDb2RlXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0FQSV9SRVFVRVNUX0lOVkFMSUQsIHtcbiAgICAgICAgZm9ybV9hcGlfa2V5OiBhcGk/LmFwaUtleSA/PyBcIlwiLFxuICAgICAgICBmb3JtX2FwaV9yZXF1ZXN0X2VuY3J5cHRlZDogYXBpPy5yZXF1ZXN0Py5ib2R5Py5pc1NlY3VyZSA/PyBmYWxzZSxcbiAgICAgICAgLi4uKCFhcGk/LnJlcXVlc3Q/LmJvZHk/LmlzU2VjdXJlICYmIHtcbiAgICAgICAgICBmb3JtX2FwaV9yZXF1ZXN0X2JvZHk6IGFwaT8ucmVxdWVzdD8uYm9keT8udmFsdWUgPz8ge31cbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBhcGk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGlzVmFsaWRSZXF1ZXN0SGVhZGVyc0FuZEJvZHkoYXBpOiBUQXBpKSB7XG4gICAgY29uc3QgYm9keVZhbGlkYXRpb24gPVxuICAgICAgKGFwaS5yZXF1ZXN0LmJvZHk/LnZhbGlkYXRpb24gYXMgVEVuZ2luZSAmIHtcbiAgICAgICAgaXNfdmFsaWQ6IGJvb2xlYW47XG4gICAgICB9KSB8fFxuICAgICAgKGFwaS5yZXF1ZXN0LmJvZHkgYXMgYW55ICYge1xuICAgICAgICBpc192YWxpZDogYm9vbGVhbjtcbiAgICAgIH0pO1xuICAgIGNvbnN0IGhlYWRlcnNWYWxpZGF0aW9uID1cbiAgICAgIChhcGkucmVxdWVzdC5oZWFkZXJzPy52YWxpZGF0aW9uIGFzIFRFbmdpbmUgJiB7XG4gICAgICAgIGlzX3ZhbGlkOiBib29sZWFuO1xuICAgICAgfSkgfHxcbiAgICAgIChhcGkucmVxdWVzdC5oZWFkZXJzIGFzIGFueSAmIHtcbiAgICAgICAgaXNfdmFsaWQ6IGJvb2xlYW47XG4gICAgICB9KTtcblxuICAgIGlmICghYm9keVZhbGlkYXRpb24gJiYgIWhlYWRlcnNWYWxpZGF0aW9uKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIChib2R5VmFsaWRhdGlvbj8uaXNfdmFsaWQgfHwgZmFsc2UpICYmXG4gICAgICAoaGVhZGVyc1ZhbGlkYXRpb24/LmlzX3ZhbGlkIHx8IGZhbHNlKVxuICAgICk7XG4gIH1cblxuICBzaG93QXBpTG9hZGVyKCkge1xuICAgIHRoaXMubG9hZGVyU2VydmljZS5zaG93KHtcbiAgICAgIGZ1bGxzY3JlZW46IHRydWUsXG4gICAgICBsb2FkZXJUZXh0OiBcIlBsZWFzZSB3YWl0XCJcbiAgICB9KTtcbiAgICB0aGlzLnZpZXdGb3Jtc0J1dHRvbi5kaXNhYmxlZCA9IHRydWU7XG4gICAgdGhpcy52aWV3Rm9ybXNCdXR0b24uc2hvd0xvYWRlciA9IHRydWU7XG4gICAgdGhpcy5zYXZlRm9ybUJ1dHRvbi5kaXNhYmxlZCA9IHRydWU7XG4gICAgdGhpcy5zYXZlRm9ybUJ1dHRvbi5zaG93TG9hZGVyID0gdHJ1ZTtcbiAgfVxuXG4gIGhpZGVBcGlMb2FkZXIoKSB7XG4gICAgdGhpcy5sb2FkZXJTZXJ2aWNlLmhpZGUoKTtcbiAgICB0aGlzLnZpZXdGb3Jtc0J1dHRvbi5kaXNhYmxlZCA9IGZhbHNlO1xuICAgIHRoaXMudmlld0Zvcm1zQnV0dG9uLnNob3dMb2FkZXIgPSBmYWxzZTtcbiAgICB0aGlzLnNhdmVGb3JtQnV0dG9uLmRpc2FibGVkID0gZmFsc2U7XG4gICAgdGhpcy5zYXZlRm9ybUJ1dHRvbi5zaG93TG9hZGVyID0gZmFsc2U7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIGhhbmRsZU9uQ2xpY2tBcGlDYWxsKGU6IGFueSkge1xuICAgIGNvbnN0IGZpZWxkOiBURmllbGRBcGlDYWxsID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCBlLmtleSk7XG5cbiAgICBpZiAoZmllbGQudHlwZSA9PT0gRUZpZWxkVHlwZS5BUEkpIHtcbiAgICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19BUElfQlVUVE9OX0NMSUNLLCB7XG4gICAgICAgIGZpZWxkX2tleTogZmllbGQua2V5LFxuICAgICAgICBmaWVsZF90eXBlOiBmaWVsZC50eXBlXG4gICAgICB9KTtcblxuICAgICAgLy8gc2V0IGJ1dHRvbiBzdGF0dXMgdG8gbG9hZGluZ1xuICAgICAgZmllbGQuYXBpLnN0YXR1cy52YWx1ZSA9IEVBcGlTdGF0dXNUeXBlLkxPQURJTkc7XG4gICAgICBmaWVsZC5zaG93TG9hZGVyID0gdHJ1ZTtcblxuICAgICAgdGhpcy5zaG93QXBpTG9hZGVyKCk7XG5cbiAgICAgIC8vIERldGVybWluZSBBUEkgQ2FsbCB0aW1lXG5cbiAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZC5hcGksIFwicmVxdWVzdFwiKSkge1xuICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZUZpZWxkQXBpQ2FsbChmaWVsZCwgZmllbGQuYXBpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGFwaXMgPSBuZXcgQXBpcyhcbiAgICAgICAgICB7XG4gICAgICAgICAgICBGSUVMRF9DT05GSUc6IGZpZWxkLFxuICAgICAgICAgICAgQVBJX0NPTkZJRzoge30sXG4gICAgICAgICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgICAgICAgUkVEVVhfREFUQTogdGhpcy5yZWR1eERhdGEsXG4gICAgICAgICAgICBDQU1FUkFfREFUQTogdGhpcy5jYW1lcmFEYXRhLFxuICAgICAgICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGEsXG4gICAgICAgICAgICBFWFRSQV9EQVRBOiB0aGlzLmV4dHJhRGF0YVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcbiAgICAgICAgKTtcblxuICAgICAgICBhd2FpdCBhcGlzLmNhbGxOZXh0QXBpKGZpZWxkLmFwaS5lbnRyeXBvaW50KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5oaWRlQXBpTG9hZGVyKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCB0byBvcHRpbWl6ZSB0aGUgRE9NIHVwZGF0ZSBieSBBbmd1bGFyIGZvciB1c2luZyAqbmdGb3Igb24gbGFyZ2Ugbm8uIG9mIGl0ZW1zLlxuICAgKiBAcGFyYW0gaW5kZXggbnVtYmVyXG4gICAqIEBwYXJhbSBpdGVtIGZpZWxkQ29uZmlnXG4gICAqIEByZXR1cm5zIHN0cmluZ1xuICAgKi9cbiAgZ2V0VW5pcXVlSWRlbnRpZmllcihpbmRleDogbnVtYmVyLCBpdGVtOiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiBpdGVtLmtleTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlT25DbGlja0dvQmFjayhlOiBhbnksIG1vZGU6IFRGb3JtVmlld0dvQmFja01vZGUpIHtcbiAgICBpZiAodGhpcy5mb3JtQ29uZmlnLnN0YXR1cyA9PT0gRUZvcm1zTGlzdFN0YXR1cy5DT01QTEVURUQpIHtcbiAgICAgIHRoaXMub25DbGlja0dvQmFjay5lbWl0KHtcbiAgICAgICAgY2xpY2tlZDogdHJ1ZSxcbiAgICAgICAgbW9kZVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMuZm9ybUNvbmZpZy5wcm9wZXJ0aWVzLmhlYWRlci5iYWNrQnV0dG9uLmJ5cGFzc0NvbmZpcm1hdGlvbiB8fFxuICAgICAgd2luZG93LmNvbmZpcm0oXCJZb3VyIGRhdGEgd2lsbCBiZSBsb3N0IGlmIHlvdSBsZWF2ZSB0aGlzIHBhZ2UhIENvbnRpbnVlP1wiKVxuICAgICkge1xuICAgICAgdGhpcy5vbkNsaWNrR29CYWNrLmVtaXQoe1xuICAgICAgICBjbGlja2VkOiB0cnVlLFxuICAgICAgICBtb2RlXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGhhbmRsZU9uQ2xpY2tWaWV3Rm9ybXMoZTogYW55KSB7XG4gICAgaWYgKHRoaXMuZm9ybUNvbmZpZy5zdGF0dXMgPT09IEVGb3Jtc0xpc3RTdGF0dXMuQ09NUExFVEVEKSB7XG4gICAgICB0aGlzLm9uQ2xpY2tWaWV3Rm9ybXMuZW1pdCh7XG4gICAgICAgIGNsaWNrZWQ6IHRydWVcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0aGlzLmZvcm1Db25maWcucHJvcGVydGllcy5mb290ZXIudmlld0Zvcm1zQnV0dG9uLmJ5cGFzc0NvbmZpcm1hdGlvbiB8fFxuICAgICAgd2luZG93LmNvbmZpcm0oXCJZb3VyIGRhdGEgd2lsbCBiZSBsb3N0IGlmIHlvdSBsZWF2ZSB0aGlzIHBhZ2UhIENvbnRpbnVlP1wiKVxuICAgICkge1xuICAgICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX1ZJRVdfQlVUVE9OX0NMSUNLLCB7fSk7XG5cbiAgICAgIHRoaXMub25DbGlja1ZpZXdGb3Jtcy5lbWl0KHtcbiAgICAgICAgY2xpY2tlZDogdHJ1ZVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBoYW5kbGVPbkNsaWNrU2F2ZUZvcm0oZTogYW55KSB7XG4gICAgaWYgKGUpIHtcbiAgICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19TQVZFX0JVVFRPTl9DTElDSywge30pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fU0FWRV9BVVRPLCB7fSk7XG4gICAgfVxuXG4gICAgY29uc3QgY29udHJvbHMgPSBuZXcgRm9ybVZhbGlkYXRpb24oKS5nZXRGb3JtRmllbGRzSW52YWxpZENvbnRyb2xzKFxuICAgICAgdGhpcy5mb3JtR3JvdXBcbiAgICApO1xuXG4gICAgbGV0IGZpcnN0RmllbGRXaXRoRXJyb3IgPSBcIlwiO1xuXG4gICAgZm9yIChjb25zdCBjb250cm9sIG9mIGNvbnRyb2xzKSB7XG4gICAgICBpZiAoY29udHJvbC5pbnZhbGlkKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCBjb250cm9sLmtleSk7XG4gICAgICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19GSUVMRF9FUlJPUl9TSE9XLCB7XG4gICAgICAgICAgZmllbGRfa2V5OiBjb250cm9sLmtleSxcbiAgICAgICAgICBmaWVsZF90eXBlOiBmaWVsZC50eXBlLFxuICAgICAgICAgIGZpZWxkX2Vycm9yX3R5cGVzOiB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tjb250cm9sLmtleV0uZXJyb3JzXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChpc0VtcHR5VmFsdWUoZmlyc3RGaWVsZFdpdGhFcnJvcikpIHtcbiAgICAgICAgICBmaXJzdEZpZWxkV2l0aEVycm9yID0gY29udHJvbC5rZXk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuZm9ybUZpZWxkcyA9IHNob3dGb3JtRmllbGRFcnJvcihcbiAgICAgICAgdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tjb250cm9sLmtleV0uZXJyb3JzLFxuICAgICAgICBjb250cm9sLmtleSxcbiAgICAgICAgY29udHJvbC5pbnZhbGlkXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChpc05vdEVtcHR5VmFsdWUoZmlyc3RGaWVsZFdpdGhFcnJvcikpIHtcbiAgICAgIHRoaXMuaGFuZGxlT25TY3JvbGxUb0ZpZWxkKGZpcnN0RmllbGRXaXRoRXJyb3IpO1xuXG4gICAgICAvLyB0aGlzLnRvZ2dsZUVycm9yTm90aWZpY2F0aW9uKHRydWUpO1xuICAgICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyAgIHRoaXMudG9nZ2xlRXJyb3JOb3RpZmljYXRpb24oZmFsc2UpO1xuICAgICAgLy8gfSwgMzAwMCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIHRoaXMuZm9ybUZpZWxkcykge1xuICAgICAgaWYgKFxuICAgICAgICBmaWVsZC5pc0Zvcm1FbGVtZW50ICYmXG4gICAgICAgICFmaWVsZC5oaWRkZW4gJiZcbiAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwidmFsaWRhdGlvblwiKSAmJlxuICAgICAgICBmaWVsZC52YWxpZGF0aW9uLnRyaWdnZXJzLmluY2x1ZGVzKFwiT05fU0FWRVwiKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IHJ1bGVFbmdpbmUgPSBuZXcgUnVsZUVuZ2luZShcbiAgICAgICAgICB7XG4gICAgICAgICAgICBGSUVMRF9DT05GSUc6IGZpZWxkLFxuICAgICAgICAgICAgRk9STV9GSUVMRFM6IHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgICAgICAgIEZPUk1fREFUQTogdGhpcy5mb3JtRGF0YSxcbiAgICAgICAgICAgIFJFRFVYX0RBVEE6IHRoaXMucmVkdXhEYXRhLFxuICAgICAgICAgICAgQ0FNRVJBX0RBVEE6IHRoaXMuY2FtZXJhRGF0YSxcbiAgICAgICAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgICAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuYWxsRm9ybXNEYXRhLFxuICAgICAgICAgICAgRVhUUkFfREFUQTogdGhpcy5leHRyYURhdGFcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRoaXMudGFrZUFjdGlvbi5iaW5kKHRoaXMpXG4gICAgICAgICk7XG5cbiAgICAgICAgYXdhaXQgcnVsZUVuZ2luZS5ydW4oZmllbGQudmFsaWRhdGlvbik7XG5cbiAgICAgICAgaWYgKCFmaWVsZC52YWxpZGF0aW9uLmlzX3ZhbGlkKSB7XG4gICAgICAgICAgdGhpcy50b2dnbGVFcnJvck5vdGlmaWNhdGlvbih0cnVlKTtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlRXJyb3JOb3RpZmljYXRpb24oZmFsc2UpO1xuICAgICAgICAgIH0sIEZPUk1fVklFV19USU1FUlMuSU5WQUxJRF9GSUVMRFNfU0FWRV9GT1JNX0VSUk9SX1RPR0dMRSk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBmb3JtRGF0YSA9IHRoaXMuZm9ybUdyb3VwLmdldFJhd1ZhbHVlKCk7XG5cbiAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIHRoaXMuZm9ybUZpZWxkcykge1xuICAgICAgaWYgKGZpZWxkLmlzRm9ybUVsZW1lbnQpIHtcbiAgICAgICAgaWYgKGZpZWxkLmhpZGRlbikge1xuICAgICAgICAgIGRlbGV0ZSBmb3JtRGF0YVtmaWVsZC5rZXldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvcm1EYXRhW2ZpZWxkLmtleV0gPSBjb252ZXJ0Rm9ybUZpZWxkVmFsdWVUb1N0YW5kYXJkRm9ybWF0KFxuICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICBmb3JtRGF0YVtmaWVsZC5rZXldXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGV4dGVuZGVkRm9ybURhdGEgPSB0aGlzLmZvcm1GaWVsZHMucmVkdWNlKChyZXN1bHQsIGZpZWxkLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGZpZWxkLmlzRm9ybUVsZW1lbnQgJiYgIWZpZWxkLmhpZGRlbikge1xuICAgICAgICBjb25zdCBmaWVsZERhdGEgPSB7XG4gICAgICAgICAgW2ZpZWxkLmtleV06IHtcbiAgICAgICAgICAgIGtleTogZmllbGQua2V5LFxuICAgICAgICAgICAgbGFiZWw6IGZpZWxkLmxhYmVsLFxuICAgICAgICAgICAgdmFsdWU6IGlzRW1wdHlWYWx1ZShmb3JtRGF0YVtmaWVsZC5rZXldKSA/IFwiXCIgOiBmb3JtRGF0YVtmaWVsZC5rZXldLFxuICAgICAgICAgICAgdHlwZTogZmllbGQudHlwZSxcbiAgICAgICAgICAgIGluZGV4XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXN1bHRbZmllbGQua2V5XSA9IGZpZWxkRGF0YVtmaWVsZC5rZXldO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LCB7fSk7XG5cbiAgICBPYmplY3Qua2V5cyhmb3JtRGF0YSkubWFwKChrZXkpID0+IHtcbiAgICAgIGlmIChpc0VtcHR5VmFsdWUoZm9ybURhdGFba2V5XSkpIHtcbiAgICAgICAgZm9ybURhdGFba2V5XSA9IFwiXCI7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogUE9TVCBUYXNrc1xuICAgICAqIDEuIEFQSSBDYWxscy5cbiAgICAgKiAyLiBBbHRlciBEYXRhIFN0cnVjdHVyZS5cbiAgICAgKiAzLiBUcmlnZ2VyIGFuIEludGVybmFsIFBvcHVwIEZvcm0uXG4gICAgICogNC4gVVJMIFJlZGlyZWN0aW9uIG9yIG5ldyBvcGVuaW5nIG9mIFVSTCBpbiBleHRlcm5hbCB0YWIuXG4gICAgICovXG4gICAgaWYgKFxuICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHModGhpcy5mb3JtQ29uZmlnLCBcInRhc2tzXCIpICYmXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyh0aGlzLmZvcm1Db25maWcudGFza3MsIFwicG9zdFwiKVxuICAgICkge1xuICAgICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX1RBU0tfUE9TVCwge30pO1xuXG4gICAgICBmb3IgKGNvbnN0IHBvc3RUYXNrIG9mIHRoaXMuZm9ybUNvbmZpZy50YXNrcy5wb3N0KSB7XG4gICAgICAgIGNvbnN0IHRhc2sgPSBuZXcgVGFza3MoXG4gICAgICAgICAgcG9zdFRhc2ssXG4gICAgICAgICAge1xuICAgICAgICAgICAgRk9STV9DT05GSUc6IHRoaXMuZm9ybUNvbmZpZyxcbiAgICAgICAgICAgIEZPUk1fRklFTERTOiB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgICBSRURVWF9EQVRBOiB0aGlzLnJlZHV4RGF0YSxcbiAgICAgICAgICAgIENBTUVSQV9EQVRBOiB0aGlzLmNhbWVyYURhdGEsXG4gICAgICAgICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICAgICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YSxcbiAgICAgICAgICAgIEVYVFJBX0RBVEE6IHRoaXMuZXh0cmFEYXRhXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuc3RvcFRhc2tFeGVjdXRpb24gPSBmYWxzZTtcbiAgICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKHBvc3RUYXNrLCBcIndhaXRcIikpIHtcbiAgICAgICAgICB0aGlzLndhaXRpbmdGb3JDaGFuZ2VzID0gcG9zdFRhc2sud2FpdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLndhaXRpbmdGb3JDaGFuZ2VzID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCB0YXNrLmV4ZWN1dGUoKTtcblxuICAgICAgICAvLyBXYWl0IGZvciBuZ09uQ2hhbmdlcyB0byBiZSBjYWxsZWQgYmVmb3JlIGNvbnRpbnVpbmcgdG8gdGhlIG5leHQgdGFza1xuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGludGVydmFsSWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMud2FpdGluZ0ZvckNoYW5nZXMpIHtcbiAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcbiAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIEZPUk1fVklFV19USU1FUlMuV0FJVF9GT1JfQ0hBTkdFU19CRUZPUkVfTU9WSU5HX1RPX05FWFRfVEFTSyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLnN0b3BUYXNrRXhlY3V0aW9uKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuc3RvcFRhc2tFeGVjdXRpb24gfHwgdGhpcy53YWl0aW5nRm9yQ2hhbmdlcykge1xuICAgICAgICB0aGlzLnN0b3BUYXNrRXhlY3V0aW9uID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5vbkNsaWNrU2F2ZUZvcm0uZW1pdCh7XG4gICAgICAgIGZvcm1Db25maWc6IHRoaXMuZm9ybUNvbmZpZyxcbiAgICAgICAgZGF0YTogbWVyZ2VPYmplY3RzKFxuICAgICAgICAgIHRoaXMuYWxsRm9ybXNEYXRhW3RoaXMuZm9ybUNvbmZpZy5rZXldLFxuICAgICAgICAgIGZvcm1EYXRhLFxuICAgICAgICAgIHRoaXMucG9wdXBGb3JtRGF0YSxcbiAgICAgICAgICB0aGlzLnRhc2tEYXRhXG4gICAgICAgICksXG4gICAgICAgIGV4dGVuZGVkRGF0YTogZXh0ZW5kZWRGb3JtRGF0YVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZ2V0VW5zYXZlZERhdGFTdGF0ZS5lbWl0KGZhbHNlKTtcbiAgICAgIHRoaXMub25DbGlja1NhdmVGb3JtLmVtaXQoe1xuICAgICAgICBmb3JtQ29uZmlnOiB0aGlzLmZvcm1Db25maWcsXG4gICAgICAgIGRhdGE6IG1lcmdlT2JqZWN0cyhmb3JtRGF0YSwgdGhpcy5wb3B1cEZvcm1EYXRhLCB0aGlzLnRhc2tEYXRhKSxcbiAgICAgICAgZXh0ZW5kZWREYXRhOiBleHRlbmRlZEZvcm1EYXRhXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIGhhbmRsZU9uQXBpVGltZXJTdG9wKGU6IGFueSkge1xuICAgIHRoaXMuZmllbGRBcGlUaW1lck1lc3NhZ2VIaWRlKGUua2V5KTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlT25TY3JvbGxUb0ZpZWxkKGZpZWxkS2V5OiBzdHJpbmcpIHtcbiAgICBjb25zdCB0YXJnZXRGaWVsZCA9IHRoaXMuZm9ybUZpZWxkc1JlZlxuICAgICAgLnRvQXJyYXkoKVxuICAgICAgLmZpbmQoXG4gICAgICAgIChmb3JtRmllbGRSZWYpID0+IGZvcm1GaWVsZFJlZi5uYXRpdmVFbGVtZW50LmlkID09PSBgZmllbGRfJHtmaWVsZEtleX1gXG4gICAgICApO1xuXG4gICAgaWYgKHRhcmdldEZpZWxkKSB7XG4gICAgICBjb25zdCBjb250YWluZXJFbCA9IHRoaXMuZm9ybUZpZWxkQ29udGFpbmVyUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICBjb25zdCBmaWVsZEVsID0gdGFyZ2V0RmllbGQubmF0aXZlRWxlbWVudDtcblxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eShcbiAgICAgICAgY29udGFpbmVyRWwsXG4gICAgICAgIFwic2Nyb2xsVG9wXCIsXG4gICAgICAgIGZpZWxkRWwub2Zmc2V0VG9wIC0gY29udGFpbmVyRWwub2Zmc2V0VG9wXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHNob3dFcnJvck5vdGlmaWNhdGlvbiA9IGZhbHNlO1xuXG4gIEBsb2dNZXRob2RcbiAgdG9nZ2xlRXJyb3JOb3RpZmljYXRpb24oc2hvdzogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuc2hvd0Vycm9yTm90aWZpY2F0aW9uID0gc2hvdztcbiAgfVxuXG4gIHNob3dQZXJtaXNzaW9uRXJyb3JOb3RpZmljYXRpb24gPSBmYWxzZTtcblxuICBAbG9nTWV0aG9kXG4gIHRvZ2dsZVBlcm1pc3Npb25FcnJvck5vdGlmaWNhdGlvbihzaG93OiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5zaG93UGVybWlzc2lvbkVycm9yTm90aWZpY2F0aW9uID0gc2hvdztcbiAgfVxuXG4gIC8vIENvbXBvbmVudCBIZWxwZXJzXG4gIEBsb2dNZXRob2RcbiAgZmllbGRIaWRlKGZpZWxkS2V5OiBzdHJpbmcpIHtcbiAgICBjb25zdCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgZmllbGRLZXkpO1xuICAgIGNvbnN0IGZpZWxkSW5kZXggPSB0aGlzLmZvcm1GaWVsZHMuZmluZEluZGV4KChfOiBhbnkpID0+IHtcbiAgICAgIHJldHVybiBmaWVsZC5rZXkgPT09IF8ua2V5O1xuICAgIH0pO1xuXG4gICAgdGhpcy5mb3JtRmllbGRzW2ZpZWxkSW5kZXhdLmhpZGRlbiA9IHRydWU7XG4gICAgdGhpcy5mb3JtR3JvdXAudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuXG4gICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0ZJRUxEX0hJREUsIHtcbiAgICAgIGZpZWxkX2tleTogZmllbGRLZXksXG4gICAgICBmaWVsZF90eXBlOiBmaWVsZC50eXBlXG4gICAgfSk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGZpZWxkR3JvdXBIaWRlKGZpZWxkR3JvdXA6IHN0cmluZykge1xuICAgIGZvciAoY29uc3QgZmllbGRLZXkgb2YgdGhpcy5maWVsZEdyb3Vwc1tmaWVsZEdyb3VwXSkge1xuICAgICAgdGhpcy5maWVsZEhpZGUoZmllbGRLZXkpO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgZmllbGRTaG93KGZpZWxkS2V5OiBzdHJpbmcpIHtcbiAgICBjb25zdCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgZmllbGRLZXkpO1xuICAgIGNvbnN0IGZpZWxkSW5kZXggPSB0aGlzLmZvcm1GaWVsZHMuZmluZEluZGV4KChfOiBhbnkpID0+IHtcbiAgICAgIHJldHVybiBmaWVsZC5rZXkgPT09IF8ua2V5O1xuICAgIH0pO1xuXG4gICAgdGhpcy5mb3JtRmllbGRzW2ZpZWxkSW5kZXhdLmhpZGRlbiA9IGZhbHNlO1xuICAgIHRoaXMuZm9ybUdyb3VwLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcblxuICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19GSUVMRF9TSE9XLCB7XG4gICAgICBmaWVsZF9rZXk6IGZpZWxkS2V5LFxuICAgICAgZmllbGRfdHlwZTogZmllbGQudHlwZVxuICAgIH0pO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBmaWVsZEdyb3VwU2hvdyhmaWVsZEdyb3VwOiBzdHJpbmcpIHtcbiAgICBmb3IgKGNvbnN0IGZpZWxkS2V5IG9mIHRoaXMuZmllbGRHcm91cHNbZmllbGRHcm91cF0pIHtcbiAgICAgIHRoaXMuZmllbGRTaG93KGZpZWxkS2V5KTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGZpZWxkRGlzYWJsZShmaWVsZEtleTogc3RyaW5nKSB7XG4gICAgY29uc3QgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGZpZWxkS2V5KTtcbiAgICBjb25zdCBmaWVsZEluZGV4ID0gdGhpcy5mb3JtRmllbGRzLmZpbmRJbmRleCgoXzogYW55KSA9PiB7XG4gICAgICByZXR1cm4gZmllbGQua2V5ID09PSBfLmtleTtcbiAgICB9KTtcblxuICAgIGlmIChmaWVsZC5pc0Zvcm1FbGVtZW50KSB7XG4gICAgICB0aGlzLmZvcm1GaWVsZHNbZmllbGRJbmRleF0uZGlzYWJsZWQgPSB0cnVlO1xuXG4gICAgICBpZiAoaXNOb3RFbXB0eVZhbHVlKHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzKSkge1xuICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldLmRpc2FibGUoe1xuICAgICAgICAgIGVtaXRFdmVudDogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLmZvcm1Hcm91cC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgfSBlbHNlIGlmIChmaWVsZC50eXBlID09PSBFRmllbGRUeXBlLkJVVFRPTikge1xuICAgICAgdGhpcy5mb3JtRmllbGRzW2ZpZWxkSW5kZXhdLmRpc2FibGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fRklFTERfRElTQUJMRSwge1xuICAgICAgZmllbGRfa2V5OiBmaWVsZEtleSxcbiAgICAgIGZpZWxkX3R5cGU6IGZpZWxkLnR5cGVcbiAgICB9KTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgZmllbGRHcm91cERpc2FibGUoZmllbGRHcm91cDogc3RyaW5nKSB7XG4gICAgZm9yIChjb25zdCBmaWVsZEtleSBvZiB0aGlzLmZpZWxkR3JvdXBzW2ZpZWxkR3JvdXBdKSB7XG4gICAgICB0aGlzLmZpZWxkRGlzYWJsZShmaWVsZEtleSk7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBmaWVsZEVuYWJsZShmaWVsZEtleTogc3RyaW5nKSB7XG4gICAgY29uc3QgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGZpZWxkS2V5KTtcbiAgICBjb25zdCBmaWVsZEluZGV4ID0gdGhpcy5mb3JtRmllbGRzLmZpbmRJbmRleCgoXzogYW55KSA9PiB7XG4gICAgICByZXR1cm4gZmllbGQua2V5ID09PSBfLmtleTtcbiAgICB9KTtcblxuICAgIGlmIChmaWVsZC5pc0Zvcm1FbGVtZW50KSB7XG4gICAgICB0aGlzLmZvcm1GaWVsZHNbZmllbGRJbmRleF0uZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgICAgaWYgKGlzTm90RW1wdHlWYWx1ZSh0aGlzLmZvcm1Hcm91cC5jb250cm9scykpIHtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS5lbmFibGUoe1xuICAgICAgICAgIGVtaXRFdmVudDogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLmZvcm1Hcm91cC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgfSBlbHNlIGlmIChmaWVsZC50eXBlID09PSBFRmllbGRUeXBlLkJVVFRPTikge1xuICAgICAgdGhpcy5mb3JtRmllbGRzW2ZpZWxkSW5kZXhdLmRpc2FibGVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0ZJRUxEX0VOQUJMRSwge1xuICAgICAgZmllbGRfa2V5OiBmaWVsZEtleSxcbiAgICAgIGZpZWxkX3R5cGU6IGZpZWxkLnR5cGVcbiAgICB9KTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgZmllbGRHcm91cEVuYWJsZShmaWVsZEdyb3VwOiBzdHJpbmcpIHtcbiAgICBmb3IgKGNvbnN0IGZpZWxkS2V5IG9mIHRoaXMuZmllbGRHcm91cHNbZmllbGRHcm91cF0pIHtcbiAgICAgIHRoaXMuZmllbGRFbmFibGUoZmllbGRLZXkpO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgZmllbGRSZXNldChmaWVsZEtleTogc3RyaW5nKSB7XG4gICAgLy8gRmluZCB0aGUgZmllbGQgYW5kIGl0cyBpbmRleCBpbiB0aGUgZm9ybUZpZWxkcyBhcnJheVxuICAgIGxldCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgZmllbGRLZXkpO1xuICAgIGNvbnN0IGZpZWxkSW5kZXggPSBnZXRGb3JtRmllbGRJbmRleEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgZmllbGRLZXkpO1xuXG4gICAgLy8gUmVzZXQgdGhlIHZhbHVlIG9mIHRoZSBmaWVsZCBpbiB0aGUgZm9ybUdyb3VwXG4gICAgY29uc3QgcmVzZXRWYWx1ZSA9IGNvbnZlcnRGb3JtRmllbGRFbXB0eVZhbHVlVG9Ld2lrVUlGb3JtYXQoZmllbGQpO1xuXG4gICAgdGhpcy5mb3JtRGF0YVtmaWVsZEtleV0gPSByZXNldFZhbHVlO1xuXG4gICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS5yZXNldChyZXNldFZhbHVlLCB7XG4gICAgICBlbWl0RXZlbnQ6IGZhbHNlLFxuICAgICAgb25seVNlbGY6IHRydWVcbiAgICB9KTtcblxuICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUoXG4gICAgICB7XG4gICAgICAgIFtmaWVsZC5rZXldOiByZXNldFZhbHVlXG4gICAgICB9LFxuICAgICAgeyBlbWl0RXZlbnQ6IGZhbHNlIH1cbiAgICApO1xuXG4gICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtcbiAgICAgIGVtaXRFdmVudDogdHJ1ZVxuICAgIH0pO1xuXG4gICAgLy8gUmVzZXQgdGhlIG1lc3NhZ2VzIGFuZCBlcnJvcnMgZm9yIHRoZSBmaWVsZFxuICAgIGZpZWxkID0gcmVtb3ZlRm9ybUZpZWxkTWVzc2FnZShmaWVsZCwge1xuICAgICAgdHlwZTogRU1lc3NhZ2VUeXBlLldBUk5JTkcsXG4gICAgICBtZXNzYWdlOiBcIlwiXG4gICAgfSk7XG4gICAgZmllbGQgPSByZW1vdmVGb3JtRmllbGRNZXNzYWdlKGZpZWxkLCB7XG4gICAgICB0eXBlOiBFTWVzc2FnZVR5cGUuU1VDQ0VTUyxcbiAgICAgIG1lc3NhZ2U6IFwiXCJcbiAgICB9KTtcbiAgICB0aGlzLmZpZWxkRXJyb3JIaWRlKGZpZWxkS2V5LCB7XG4gICAgICB0eXBlOiBFTWVzc2FnZVR5cGUuRVJST1IsXG4gICAgICBtZXNzYWdlOiBcIlwiXG4gICAgfSk7XG5cbiAgICAvLyBSZXNldCB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkIGluIHRoZSBmb3JtRmllbGRzIGFycmF5XG4gICAgc3dpdGNoIChmaWVsZC50eXBlKSB7XG4gICAgICBjYXNlIEVGaWVsZFR5cGUuQVBJOiB7XG4gICAgICAgIGNvbnN0IGZpZWxkQXBpQ2FsbCA9IGZpZWxkIGFzIFRGaWVsZEFwaUNhbGw7XG4gICAgICAgIGZpZWxkQXBpQ2FsbC5hcGkuc3RhdHVzLnZhbHVlID0gRUFwaVN0YXR1c1R5cGUuREVGQVVMVDtcbiAgICAgICAgdGhpcy5mb3JtRmllbGRzW2ZpZWxkSW5kZXhdID0gZmllbGRBcGlDYWxsO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgRUZpZWxkVHlwZS5MSVZFX0xPQ0FUSU9OOiB7XG4gICAgICAgIGNvbnN0IGZpZWxkTGl2ZUxvY2F0aW9uID0gZmllbGQgYXMgVEZpZWxkTGl2ZUxvY2F0aW9uO1xuICAgICAgICBmaWVsZExpdmVMb2NhdGlvbi5hcGkuc3RhdHVzLnZhbHVlID0gRUFwaVN0YXR1c1R5cGUuREVGQVVMVDtcbiAgICAgICAgdGhpcy5mb3JtRmllbGRzW2ZpZWxkSW5kZXhdID0gZmllbGRMaXZlTG9jYXRpb247XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBmaWVsZC5mb2N1cyA9IGZhbHNlO1xuICAgICAgICBmaWVsZC5pbnZhbGlkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XSA9IGZpZWxkO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fRklFTERfUkVTRVQsIHtcbiAgICAgIGZpZWxkX2tleTogZmllbGRLZXksXG4gICAgICBmaWVsZF90eXBlOiBmaWVsZC50eXBlXG4gICAgfSk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGZpZWxkR3JvdXBSZXNldChmaWVsZEdyb3VwOiBzdHJpbmcpIHtcbiAgICBmb3IgKGNvbnN0IGZpZWxkS2V5IG9mIHRoaXMuZmllbGRHcm91cHNbZmllbGRHcm91cF0pIHtcbiAgICAgIHRoaXMuZmllbGRSZXNldChmaWVsZEtleSk7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBmaWVsZEhpZGVBcGlMb2FkZXIoZmllbGRLZXk6IHN0cmluZykge1xuICAgIGNvbnN0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCBmaWVsZEtleSk7XG4gICAgY29uc3QgZmllbGRJbmRleCA9IHRoaXMuZm9ybUZpZWxkcy5maW5kSW5kZXgoKF86IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIGZpZWxkLmtleSA9PT0gXy5rZXk7XG4gICAgfSk7XG5cbiAgICAvLyBSZXNldCB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkIGluIHRoZSBmb3JtRmllbGRzIGFycmF5XG4gICAgc3dpdGNoIChmaWVsZC50eXBlKSB7XG4gICAgICBjYXNlIEVGaWVsZFR5cGUuQVBJOiB7XG4gICAgICAgIGNvbnN0IGZpZWxkQXBpQ2FsbCA9IGZpZWxkIGFzIFRGaWVsZEFwaUNhbGw7XG4gICAgICAgIGZpZWxkQXBpQ2FsbC5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmZvcm1GaWVsZHNbZmllbGRJbmRleF0gPSBmaWVsZEFwaUNhbGw7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBFRmllbGRUeXBlLkxJVkVfTE9DQVRJT046IHtcbiAgICAgICAgY29uc3QgZmllbGRMaXZlTG9jYXRpb24gPSBmaWVsZCBhcyBURmllbGRMaXZlTG9jYXRpb247XG4gICAgICAgIGZpZWxkTGl2ZUxvY2F0aW9uLmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XSA9IGZpZWxkTGl2ZUxvY2F0aW9uO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBmaWVsZFNob3dBcGlMb2FkZXIoZmllbGRLZXk6IHN0cmluZykge1xuICAgIGNvbnN0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCBmaWVsZEtleSk7XG4gICAgY29uc3QgZmllbGRJbmRleCA9IHRoaXMuZm9ybUZpZWxkcy5maW5kSW5kZXgoKF86IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIGZpZWxkLmtleSA9PT0gXy5rZXk7XG4gICAgfSk7XG5cbiAgICAvLyBSZXNldCB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkIGluIHRoZSBmb3JtRmllbGRzIGFycmF5XG4gICAgc3dpdGNoIChmaWVsZC50eXBlKSB7XG4gICAgICBjYXNlIEVGaWVsZFR5cGUuQVBJOiB7XG4gICAgICAgIGNvbnN0IGZpZWxkQXBpQ2FsbCA9IGZpZWxkIGFzIFRGaWVsZEFwaUNhbGw7XG4gICAgICAgIGZpZWxkQXBpQ2FsbC5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XSA9IGZpZWxkQXBpQ2FsbDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIEVGaWVsZFR5cGUuTElWRV9MT0NBVElPTjoge1xuICAgICAgICBjb25zdCBmaWVsZExpdmVMb2NhdGlvbiA9IGZpZWxkIGFzIFRGaWVsZExpdmVMb2NhdGlvbjtcbiAgICAgICAgZmllbGRMaXZlTG9jYXRpb24uZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmZvcm1GaWVsZHNbZmllbGRJbmRleF0gPSBmaWVsZExpdmVMb2NhdGlvbjtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgc2V0SHRtbChmaWVsZEtleTogc3RyaW5nLCBtZXNzYWdlOiBUTWVzc2FnZSkge1xuICAgIGxldCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgZmllbGRLZXkpO1xuICAgIGNvbnN0IGZpZWxkSW5kZXggPSB0aGlzLmZvcm1GaWVsZHMuZmluZEluZGV4KChfOiBhbnkpID0+IHtcbiAgICAgIHJldHVybiBmaWVsZC5rZXkgPT09IF8ua2V5O1xuICAgIH0pO1xuXG4gICAgZmllbGQgPSBhcHBlbmRIdG1sTWVzc2FnZShmaWVsZCwgbWVzc2FnZSk7XG5cbiAgICB0aGlzLmZvcm1GaWVsZHNbZmllbGRJbmRleF0gPSBmaWVsZDtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgZmllbGRFcnJvclNob3coZmllbGRLZXk6IHN0cmluZywgbWVzc2FnZTogVE1lc3NhZ2UpIHtcbiAgICBsZXQgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGZpZWxkS2V5KTtcbiAgICBjb25zdCBmaWVsZEluZGV4ID0gdGhpcy5mb3JtRmllbGRzLmZpbmRJbmRleCgoXzogYW55KSA9PiB7XG4gICAgICByZXR1cm4gZmllbGQua2V5ID09PSBfLmtleTtcbiAgICB9KTtcblxuICAgIGZpZWxkID0gaGlnaGxpZ2h0Rm9ybUZpZWxkRXJyb3IoZmllbGQsIHRydWUpO1xuICAgIGZpZWxkID0gYXBwZW5kRm9ybUZpZWxkTWVzc2FnZShmaWVsZCwgbWVzc2FnZSk7XG5cbiAgICB0aGlzLmZvcm1GaWVsZHNbZmllbGRJbmRleF0gPSBmaWVsZDtcblxuICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19GSUVMRF9FUlJPUl9TSE9XLCB7XG4gICAgICBmaWVsZF9rZXk6IGZpZWxkS2V5LFxuICAgICAgZmllbGRfdHlwZTogZmllbGQudHlwZSxcbiAgICAgIGZpZWxkX2Vycm9yX21lc3NhZ2U6IG1lc3NhZ2VcbiAgICB9KTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgZmllbGRFcnJvckhpZGUoZmllbGRLZXk6IHN0cmluZywgbWVzc2FnZTogVE1lc3NhZ2UpIHtcbiAgICBsZXQgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGZpZWxkS2V5KTtcbiAgICBjb25zdCBmaWVsZEluZGV4ID0gdGhpcy5mb3JtRmllbGRzLmZpbmRJbmRleCgoXzogYW55KSA9PiB7XG4gICAgICByZXR1cm4gZmllbGQua2V5ID09PSBfLmtleTtcbiAgICB9KTtcblxuICAgIGZpZWxkID0gaGlnaGxpZ2h0Rm9ybUZpZWxkRXJyb3IoZmllbGQsIGZhbHNlKTtcbiAgICBmaWVsZCA9IHJlbW92ZUZvcm1GaWVsZE1lc3NhZ2UoZmllbGQsIG1lc3NhZ2UpO1xuXG4gICAgdGhpcy5mb3JtRmllbGRzW2ZpZWxkSW5kZXhdID0gZmllbGQ7XG5cbiAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fRklFTERfRVJST1JfSElERSwge1xuICAgICAgZmllbGRfa2V5OiBmaWVsZEtleSxcbiAgICAgIGZpZWxkX3R5cGU6IGZpZWxkLnR5cGUsXG4gICAgICBmaWVsZF9lcnJvcl9tZXNzYWdlOiBtZXNzYWdlXG4gICAgfSk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGZpZWxkTWVzc2FnZVNob3coZmllbGRLZXk6IHN0cmluZywgbWVzc2FnZTogVE1lc3NhZ2UpIHtcbiAgICBsZXQgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGZpZWxkS2V5KTtcbiAgICBjb25zdCBmaWVsZEluZGV4ID0gdGhpcy5mb3JtRmllbGRzLmZpbmRJbmRleCgoXzogYW55KSA9PiB7XG4gICAgICByZXR1cm4gZmllbGQua2V5ID09PSBfLmtleTtcbiAgICB9KTtcblxuICAgIGZpZWxkID0gYXBwZW5kRm9ybUZpZWxkTWVzc2FnZShmaWVsZCwgbWVzc2FnZSk7XG5cbiAgICB0aGlzLmZvcm1GaWVsZHNbZmllbGRJbmRleF0gPSBmaWVsZDtcblxuICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19GSUVMRF9NRVNTQUdFX1NIT1csIHtcbiAgICAgIGZpZWxkX2tleTogZmllbGRLZXksXG4gICAgICBmaWVsZF90eXBlOiBmaWVsZC50eXBlLFxuICAgICAgZmllbGRfbWVzc2FnZTogbWVzc2FnZVxuICAgIH0pO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBmaWVsZE1lc3NhZ2VIaWRlKGZpZWxkS2V5OiBzdHJpbmcsIG1lc3NhZ2U6IFRNZXNzYWdlKSB7XG4gICAgbGV0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCBmaWVsZEtleSk7XG4gICAgY29uc3QgZmllbGRJbmRleCA9IHRoaXMuZm9ybUZpZWxkcy5maW5kSW5kZXgoKF86IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIGZpZWxkLmtleSA9PT0gXy5rZXk7XG4gICAgfSk7XG5cbiAgICBmaWVsZCA9IHJlbW92ZUZvcm1GaWVsZE1lc3NhZ2UoZmllbGQsIG1lc3NhZ2UpO1xuXG4gICAgdGhpcy5mb3JtRmllbGRzW2ZpZWxkSW5kZXhdID0gZmllbGQ7XG5cbiAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fRklFTERfTUVTU0FHRV9ISURFLCB7XG4gICAgICBmaWVsZF9rZXk6IGZpZWxkS2V5LFxuICAgICAgZmllbGRfdHlwZTogZmllbGQudHlwZSxcbiAgICAgIGZpZWxkX21lc3NhZ2U6IG1lc3NhZ2VcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGZpZWxkQXBpVGltZXJNZXNzYWdlU2hvdyhcbiAgICBmaWVsZEtleTogc3RyaW5nLFxuICAgIHRpbWVyOiBUQXBpVGltZXJcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbGV0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCBmaWVsZEtleSk7XG4gICAgY29uc3QgZmllbGRJbmRleCA9IHRoaXMuZm9ybUZpZWxkcy5maW5kSW5kZXgoKF86IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIGZpZWxkLmtleSA9PT0gXy5rZXk7XG4gICAgfSk7XG5cbiAgICBmaWVsZCA9IHNldEFwaVRpbWVyTWVzc2FnZShmaWVsZCwgdGltZXIpO1xuXG4gICAgdGhpcy5mb3JtRmllbGRzW2ZpZWxkSW5kZXhdID0gZmllbGQ7XG4gICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fRklFTERfQVBJX1RJTUVSX01FU1NBR0VfU0hPVywge1xuICAgICAgZmllbGRfa2V5OiBmaWVsZEtleSxcbiAgICAgIGZpZWxkX3R5cGU6IGZpZWxkLnR5cGUsXG4gICAgICBmaWVsZF90aW1lcjogdGltZXJcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGZpZWxkQXBpVGltZXJNZXNzYWdlSGlkZShmaWVsZEtleTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbGV0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCBmaWVsZEtleSk7XG4gICAgY29uc3QgZmllbGRJbmRleCA9IHRoaXMuZm9ybUZpZWxkcy5maW5kSW5kZXgoKF86IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIGZpZWxkLmtleSA9PT0gXy5rZXk7XG4gICAgfSk7XG5cbiAgICBmaWVsZCA9IHNldEFwaVRpbWVyTWVzc2FnZShmaWVsZCwgdW5kZWZpbmVkKTtcblxuICAgIGlmIChcbiAgICAgIGZpZWxkLmlzRm9ybUVsZW1lbnQgJiZcbiAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLCBcInZhbGlkYXRpb25cIikgJiZcbiAgICAgIGZpZWxkLnZhbGlkYXRpb24udHJpZ2dlcnMuaW5jbHVkZXMoXCJPTl9BUElfVElNRVJfU1RPUFwiKVxuICAgICkge1xuICAgICAgY29uc3QgcnVsZUVuZ2luZSA9IG5ldyBSdWxlRW5naW5lKFxuICAgICAgICB7XG4gICAgICAgICAgRklFTERfQ09ORklHOiBmaWVsZCxcbiAgICAgICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgIEZPUk1fREFUQTogdGhpcy5mb3JtRGF0YSxcbiAgICAgICAgICBSRURVWF9EQVRBOiB0aGlzLnJlZHV4RGF0YSxcbiAgICAgICAgICBDQU1FUkFfREFUQTogdGhpcy5jYW1lcmFEYXRhLFxuICAgICAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGEsXG4gICAgICAgICAgRVhUUkFfREFUQTogdGhpcy5leHRyYURhdGFcbiAgICAgICAgfSxcbiAgICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcbiAgICAgICk7XG5cbiAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IHJ1bGVFbmdpbmUucnVuKGZpZWxkLnZhbGlkYXRpb24pO1xuICAgICAgfSkoKTtcbiAgICB9XG5cbiAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwiY29ubmVjdGVkRWxlbWVudHNcIikpIHtcbiAgICAgIHRoaXMuaGFuZGxlQ29ubmVjdGVkRWxlbWVudHMoXG4gICAgICAgIHtcbiAgICAgICAgICBrZXk6IGZpZWxkLmtleSxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS52YWx1ZVxuICAgICAgICB9LFxuICAgICAgICBcIk9OX0FQSV9USU1FUl9TVE9QXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5mb3JtRmllbGRzW2ZpZWxkSW5kZXhdID0gZmllbGQ7XG4gICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fRklFTERfQVBJX1RJTUVSX01FU1NBR0VfSElERSwge1xuICAgICAgZmllbGRfa2V5OiBmaWVsZEtleSxcbiAgICAgIGZpZWxkX3R5cGU6IGZpZWxkLnR5cGVcbiAgICB9KTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgcmVtb3ZlS2V5RnJvbU9iamVjdFBhdGgoYWN0aW9uOiBUQWN0aW9uLCBvYmplY3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzb3VyY2U6IGFueSA9IG5ldyBTb3VyY2Uob2JqZWN0KTtcblxuICAgIGNvbnN0IHNvdXJjZVZhbHVlID0gYWN0aW9uLnByb3BzLnNvdXJjZTtcbiAgICBjb25zdCBvYmplY3RLZXkgPSBzb3VyY2VWYWx1ZT8ucHJvcHM/Lm9iamVjdD8ua2V5O1xuICAgIGNvbnN0IG9iamVjdFBhdGggPSBzb3VyY2VWYWx1ZT8ucHJvcHM/Lm9iamVjdD8ucGF0aDtcblxuICAgIGlmIChcbiAgICAgIHNvdXJjZVZhbHVlLmtleSA9PT0gRVNvdXJjZUtleS5PQkpFQ1QgJiZcbiAgICAgIGlzTm90RW1wdHlTdHJpbmcob2JqZWN0S2V5KSAmJlxuICAgICAgaXNOb3RFbXB0eVN0cmluZyhvYmplY3RQYXRoKVxuICAgICkge1xuICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKHNvdXJjZS5fb2JqZWN0LCBvYmplY3RLZXkpKSB7XG4gICAgICAgIHNvdXJjZS5fb2JqZWN0W29iamVjdEtleV0gPSByZW1vdmVLZXlGcm9tT2JqZWN0UGF0aChcbiAgICAgICAgICBzb3VyY2UuX29iamVjdFtvYmplY3RLZXldLFxuICAgICAgICAgIG9iamVjdFBhdGhcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBvYmplY3QuRklFTERfQ09ORklHID0gc291cmNlLl9vYmplY3QuRklFTERfQ09ORklHO1xuXG4gICAgdGhpcy5mb3JtRGF0YSA9IHNvdXJjZS5fb2JqZWN0LkZPUk1fREFUQTtcbiAgICB0aGlzLnBhdGNoRm9ybUdyb3VwKHRoaXMuZm9ybURhdGEpO1xuICAgIHRoaXMuYWxsRm9ybXNEYXRhID0gc291cmNlLl9vYmplY3QuQUxMX0ZPUk1TX0RBVEE7XG4gICAgdGhpcy5wcmV2aW91c0Zvcm1EYXRhID0gc291cmNlLl9vYmplY3QuUFJFVklPVVNfRk9STV9EQVRBO1xuICAgIHRoaXMuZXh0cmFEYXRhID0gc291cmNlLl9vYmplY3QuRVhUUkFfREFUQTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgc2V0VmFsdWUoYWN0aW9uOiBUQWN0aW9uLCBvYmplY3Q6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHNvdXJjZSA9IG5ldyBTb3VyY2Uob2JqZWN0KTtcblxuICAgIGNvbnN0IHNvdXJjZVZhbHVlID0gYXdhaXQgc291cmNlLmdldFZhbHVlRnJvbVNvdXJjZShcbiAgICAgIGFjdGlvbi5wcm9wcy52YWx1ZS5zb3VyY2VcbiAgICApO1xuICAgIHNvdXJjZS5zZXRWYWx1ZVRvU291cmNlKGFjdGlvbi5wcm9wcy52YWx1ZS5kZXN0aW5hdGlvbiwgc291cmNlVmFsdWUpO1xuXG4gICAgb2JqZWN0LkZJRUxEX0NPTkZJRyA9IHNvdXJjZS5vYmplY3QuRklFTERfQ09ORklHO1xuXG4gICAgdGhpcy5mb3JtRGF0YSA9IHNvdXJjZS5vYmplY3QuRk9STV9EQVRBO1xuICAgIHRoaXMucGF0Y2hGb3JtR3JvdXAodGhpcy5mb3JtRGF0YSk7XG4gICAgdGhpcy5hbGxGb3Jtc0RhdGEgPSBzb3VyY2Uub2JqZWN0LkFMTF9GT1JNU19EQVRBO1xuICAgIHRoaXMucHJldmlvdXNGb3JtRGF0YSA9IHNvdXJjZS5vYmplY3QuUFJFVklPVVNfRk9STV9EQVRBO1xuICAgIHRoaXMuZXh0cmFEYXRhID0gc291cmNlLm9iamVjdC5FWFRSQV9EQVRBO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBzZXRGaWVsZERlZmF1bHRWYWx1ZShhY3Rpb246IFRBY3Rpb24sIG9iamVjdDogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc291cmNlID0gbmV3IFNvdXJjZShvYmplY3QpO1xuXG4gICAgY29uc3Qgc291cmNlVmFsdWUgPSBhd2FpdCBzb3VyY2UuZ2V0VmFsdWVGcm9tU291cmNlKFxuICAgICAgYWN0aW9uLnByb3BzLnZhbHVlLnNvdXJjZVxuICAgICk7XG5cbiAgICBzb3VyY2Uuc2V0VmFsdWVUb1NvdXJjZShcbiAgICAgIHtcbiAgICAgICAga2V5OiBFU291cmNlS2V5Lk9CSkVDVCxcbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICBvYmplY3Q6IHtcbiAgICAgICAgICAgIGtleTogXCJGSUVMRF9DT05GSUdcIixcbiAgICAgICAgICAgIHBhdGg6IFwiZGVmYXVsdC52YWx1ZS52YWx1ZVwiXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc291cmNlVmFsdWVcbiAgICApO1xuICAgIHNvdXJjZS5zZXRWYWx1ZVRvU291cmNlKFxuICAgICAge1xuICAgICAgICBrZXk6IEVTb3VyY2VLZXkuT0JKRUNULFxuICAgICAgICBwcm9wczoge1xuICAgICAgICAgIG9iamVjdDoge1xuICAgICAgICAgICAga2V5OiBcIkZPUk1fREFUQVwiLFxuICAgICAgICAgICAgcGF0aDogU3RyaW5nKGFjdGlvbi5wcm9wcy5maWVsZEtleSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzb3VyY2VWYWx1ZVxuICAgICk7XG5cbiAgICBvYmplY3QuRklFTERfQ09ORklHID0gc291cmNlLm9iamVjdC5GSUVMRF9DT05GSUc7XG4gICAgdGhpcy5mb3JtRGF0YSA9IHNvdXJjZS5vYmplY3QuRk9STV9EQVRBO1xuICAgIHRoaXMucGF0Y2hGb3JtR3JvdXAodGhpcy5mb3JtRGF0YSk7XG4gICAgdGhpcy5hbGxGb3Jtc0RhdGEgPSBzb3VyY2Uub2JqZWN0LkFMTF9GT1JNU19EQVRBO1xuICAgIHRoaXMucHJldmlvdXNGb3JtRGF0YSA9IHNvdXJjZS5vYmplY3QuUFJFVklPVVNfRk9STV9EQVRBO1xuICAgIHRoaXMuZXh0cmFEYXRhID0gc291cmNlLm9iamVjdC5FWFRSQV9EQVRBO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBzZXRBcGlTdGF0dXMoYWN0aW9uOiBUQWN0aW9uLCBvYmplY3Q6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHNvdXJjZSA9IG5ldyBTb3VyY2Uob2JqZWN0KTtcblxuICAgIGNvbnN0IHNvdXJjZVZhbHVlID0gYWN0aW9uLnByb3BzLnN0YXR1cztcblxuICAgIHNvdXJjZS5zZXRWYWx1ZVRvU291cmNlKFxuICAgICAge1xuICAgICAgICBrZXk6IEVTb3VyY2VLZXkuT0JKRUNULFxuICAgICAgICBwcm9wczoge1xuICAgICAgICAgIG9iamVjdDoge1xuICAgICAgICAgICAga2V5OiBcIkZJRUxEX0NPTkZJR1wiLFxuICAgICAgICAgICAgcGF0aDogXCJhcGkuc3RhdHVzLnZhbHVlXCJcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzb3VyY2VWYWx1ZVxuICAgICk7XG5cbiAgICBvYmplY3QuRklFTERfQ09ORklHID0gc291cmNlLm9iamVjdC5GSUVMRF9DT05GSUc7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIHNldEFwaUhlYWRlclZhbHVlKGFjdGlvbjogVEFjdGlvbiwgb2JqZWN0OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzb3VyY2UgPSBuZXcgU291cmNlKG9iamVjdCk7XG5cbiAgICBjb25zdCBzb3VyY2VWYWx1ZSA9IGF3YWl0IHNvdXJjZS5nZXRWYWx1ZUZyb21Tb3VyY2UoYWN0aW9uLnByb3BzLnNvdXJjZSk7XG5cbiAgICBzb3VyY2Uuc2V0VmFsdWVUb1NvdXJjZShcbiAgICAgIHtcbiAgICAgICAga2V5OiBFU291cmNlS2V5Lk9CSkVDVCxcbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICBvYmplY3Q6IHtcbiAgICAgICAgICAgIGtleTogXCJBUElfQ09ORklHXCIsXG4gICAgICAgICAgICBwYXRoOiBgcmVxdWVzdC5oZWFkZXJzLnZhbHVlLiR7YWN0aW9uLnByb3BzLmtleX1gXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc291cmNlVmFsdWVcbiAgICApO1xuXG4gICAgb2JqZWN0LkFQSV9DT05GSUcgPSBzb3VyY2Uub2JqZWN0LkFQSV9DT05GSUc7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIHNldEFwaUhlYWRlclZhbGlkaXR5KGFjdGlvbjogVEFjdGlvbiwgb2JqZWN0OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzb3VyY2UgPSBuZXcgU291cmNlKG9iamVjdCk7XG5cbiAgICBjb25zdCBzb3VyY2VWYWx1ZSA9IGFjdGlvbi5wcm9wcy52YWxpZDtcblxuICAgIHNvdXJjZS5zZXRWYWx1ZVRvU291cmNlKFxuICAgICAge1xuICAgICAgICBrZXk6IEVTb3VyY2VLZXkuT0JKRUNULFxuICAgICAgICBwcm9wczoge1xuICAgICAgICAgIG9iamVjdDoge1xuICAgICAgICAgICAga2V5OiBcIkFQSV9DT05GSUdcIixcbiAgICAgICAgICAgIHBhdGg6IFwicmVxdWVzdC5oZWFkZXJzLmlzX3ZhbGlkXCJcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzb3VyY2VWYWx1ZVxuICAgICk7XG5cbiAgICBvYmplY3QuQVBJX0NPTkZJRyA9IHNvdXJjZS5vYmplY3QuQVBJX0NPTkZJRztcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgc2V0QXBpQm9keVZhbHVlKGFjdGlvbjogVEFjdGlvbiwgb2JqZWN0OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzb3VyY2UgPSBuZXcgU291cmNlKG9iamVjdCk7XG5cbiAgICBjb25zdCBzb3VyY2VWYWx1ZSA9IGF3YWl0IHNvdXJjZS5nZXRWYWx1ZUZyb21Tb3VyY2UoYWN0aW9uLnByb3BzLnNvdXJjZSk7XG5cbiAgICBzb3VyY2Uuc2V0VmFsdWVUb1NvdXJjZShcbiAgICAgIHtcbiAgICAgICAga2V5OiBFU291cmNlS2V5Lk9CSkVDVCxcbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICBvYmplY3Q6IHtcbiAgICAgICAgICAgIGtleTogXCJBUElfQ09ORklHXCIsXG4gICAgICAgICAgICBwYXRoOiBgcmVxdWVzdC5ib2R5LnZhbHVlLiR7YWN0aW9uLnByb3BzLmtleX1gXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc291cmNlVmFsdWVcbiAgICApO1xuXG4gICAgb2JqZWN0LkFQSV9DT05GSUcgPSBzb3VyY2Uub2JqZWN0LkFQSV9DT05GSUc7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIHNldEFwaUJvZHlWYWxpZGl0eShhY3Rpb246IFRBY3Rpb24sIG9iamVjdDogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc291cmNlID0gbmV3IFNvdXJjZShvYmplY3QpO1xuXG4gICAgY29uc3Qgc291cmNlVmFsdWUgPSBhY3Rpb24ucHJvcHMudmFsaWQ7XG5cbiAgICBzb3VyY2Uuc2V0VmFsdWVUb1NvdXJjZShcbiAgICAgIHtcbiAgICAgICAga2V5OiBFU291cmNlS2V5Lk9CSkVDVCxcbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICBvYmplY3Q6IHtcbiAgICAgICAgICAgIGtleTogXCJBUElfQ09ORklHXCIsXG4gICAgICAgICAgICBwYXRoOiBcInJlcXVlc3QuYm9keS5pc192YWxpZFwiXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc291cmNlVmFsdWVcbiAgICApO1xuXG4gICAgb2JqZWN0LkFQSV9DT05GSUcgPSBzb3VyY2Uub2JqZWN0LkFQSV9DT05GSUc7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIHNldEZpZWxkVmFsaWRpdHkoYWN0aW9uOiBUQWN0aW9uLCBvYmplY3Q6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHNvdXJjZSA9IG5ldyBTb3VyY2Uob2JqZWN0KTtcblxuICAgIGNvbnN0IHNvdXJjZVZhbHVlID0gYWN0aW9uLnByb3BzLnZhbGlkO1xuXG4gICAgc291cmNlLnNldFZhbHVlVG9Tb3VyY2UoXG4gICAgICB7XG4gICAgICAgIGtleTogRVNvdXJjZUtleS5PQkpFQ1QsXG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgb2JqZWN0OiB7XG4gICAgICAgICAgICBrZXk6IFwiRklFTERfQ09ORklHXCIsXG4gICAgICAgICAgICBwYXRoOiBcInZhbGlkYXRpb24uaXNfdmFsaWRcIlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNvdXJjZVZhbHVlXG4gICAgKTtcblxuICAgIG9iamVjdC5GSUVMRF9DT05GSUcgPSBzb3VyY2Uub2JqZWN0LkZJRUxEX0NPTkZJRztcbiAgICBvYmplY3QuQVBJX0NPTkZJRyA9IHNvdXJjZS5vYmplY3QuQVBJX0NPTkZJRztcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgc2V0RHJvcGRvd25PcHRpb25zKGFjdGlvbjogVEFjdGlvbiwgb2JqZWN0OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzb3VyY2UgPSBuZXcgU291cmNlKG9iamVjdCk7XG5cbiAgICBsZXQgc291cmNlVmFsdWUgPSBhd2FpdCBzb3VyY2UuZ2V0VmFsdWVGcm9tU291cmNlKFxuICAgICAgYWN0aW9uLnByb3BzLnZhbHVlLnNvdXJjZVxuICAgICk7XG4gICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGFjdGlvbi5wcm9wcywgXCJvcHRpb25zXCIpKSB7XG4gICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoYWN0aW9uLnByb3BzLm9wdGlvbnMsIFwiYXBwZW5kVG9QYXRoXCIpKSB7XG4gICAgICAgIGNvbnN0IGFwcGVuZFRvUGF0aCA9IGF3YWl0IHNvdXJjZS5nZXRWYWx1ZUZyb21Tb3VyY2UoXG4gICAgICAgICAgYWN0aW9uLnByb3BzLm9wdGlvbnMuYXBwZW5kVG9QYXRoLnNvdXJjZVxuICAgICAgICApO1xuICAgICAgICBpZiAoaXNOb3RFbXB0eVZhbHVlKGFwcGVuZFRvUGF0aCkpIHtcbiAgICAgICAgICBjb25zdCBhcHBlbmRUb1BhdGhTdHIgPSByZXBsYWNlU3RyaW5nKFxuICAgICAgICAgICAgYXBwZW5kVG9QYXRoLm1hdGNoKFxuICAgICAgICAgICAgICBgJHthY3Rpb24ucHJvcHMub3B0aW9ucy5hcHBlbmRUb1BhdGguZmlsdGVyU291cmNlVmFsdWV9YFxuICAgICAgICAgICAgKVswXSxcbiAgICAgICAgICAgIFwiW15hLXpBLVowLTlfXVwiLFxuICAgICAgICAgICAgXCJfXCJcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgY29uc3Qgb3B0aW9uc1BhdGggPSBgJHthY3Rpb24ucHJvcHMub3B0aW9ucy5wYXRofSR7YXBwZW5kVG9QYXRoU3RyfWA7XG4gICAgICAgICAgc291cmNlVmFsdWUgPSBnZXRPYmplY3RWYWx1ZUZyb21QYXRoKHNvdXJjZVZhbHVlLCBvcHRpb25zUGF0aCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNvdXJjZVZhbHVlID0gZ2V0T2JqZWN0VmFsdWVGcm9tUGF0aChcbiAgICAgICAgICBzb3VyY2VWYWx1ZSxcbiAgICAgICAgICBhY3Rpb24ucHJvcHMub3B0aW9ucy5wYXRoXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHNvdXJjZS5zZXRWYWx1ZVRvU291cmNlKGFjdGlvbi5wcm9wcy52YWx1ZS5kZXN0aW5hdGlvbiwgc291cmNlVmFsdWUpO1xuXG4gICAgb2JqZWN0LkZJRUxEX0NPTkZJRyA9IHNvdXJjZS5vYmplY3QuRklFTERfQ09ORklHO1xuICAgIHRoaXMuZm9ybURhdGEgPSBzb3VyY2Uub2JqZWN0LkZPUk1fREFUQTtcbiAgICB0aGlzLmFsbEZvcm1zRGF0YSA9IHNvdXJjZS5vYmplY3QuQUxMX0ZPUk1TX0RBVEE7XG4gICAgdGhpcy5wcmV2aW91c0Zvcm1EYXRhID0gc291cmNlLm9iamVjdC5QUkVWSU9VU19GT1JNX0RBVEE7XG4gICAgdGhpcy5leHRyYURhdGEgPSBzb3VyY2Uub2JqZWN0LkVYVFJBX0RBVEE7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIGFwaUNhbGwoYWN0aW9uOiBUQWN0aW9uLCBvYmplY3Q6IGFueSk6IFByb21pc2U8VEFwaT4ge1xuICAgIGxldCBhcGlDb25maWcgPSB0aGlzLmZvcm1Db25maWcuYXBpc1thY3Rpb24ucHJvcHMuZm9ybUFwaUtleV07XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaGFuZGxlQXBpQ2FsbChhcGlDb25maWcpO1xuXG4gICAgYXBpQ29uZmlnID0gcmVzcG9uc2UuYXBpO1xuXG4gICAgdGhpcy5mb3JtQ29uZmlnID0gc2V0VmFsdWVUb09iamVjdFBhdGgoXG4gICAgICB0aGlzLmZvcm1Db25maWcsXG4gICAgICBgYXBpcy4ke2FjdGlvbi5wcm9wcy5mb3JtQXBpS2V5fWAsXG4gICAgICBhcGlDb25maWdcbiAgICApO1xuXG4gICAgdGhpcy5mb3JtRGF0YSA9IG1lcmdlT2JqZWN0cyh0aGlzLmZvcm1EYXRhLCB7XG4gICAgICBbYWN0aW9uLnByb3BzLmZvcm1BcGlLZXldOiBhcGlDb25maWcucmVzcG9uc2UudmFsdWVcbiAgICB9KTtcblxuICAgIHJldHVybiBhcGlDb25maWc7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIGZpZWxkQXBpQ2FsbChhY3Rpb246IFRBY3Rpb24sIG9iamVjdDogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5zaG93QXBpTG9hZGVyKCk7XG5cbiAgICBjb25zdCBhcGlDb25maWcgPSBhd2FpdCB0aGlzLmFwaUNhbGwoYWN0aW9uLCBvYmplY3QpO1xuXG4gICAgdGhpcy5oaWRlQXBpTG9hZGVyKCk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIGZpZWxkTXVsdGlwbGVBcGlDYWxscyhhY3Rpb246IFRBY3Rpb24sIG9iamVjdDogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZW50cnlwb2ludEFwaUtleSA9IGFjdGlvbi5wcm9wcy5hcGlLZXk7XG4gICAgbGV0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCBhY3Rpb24ucHJvcHMuZmllbGRLZXkpO1xuICAgIGNvbnN0IHsgZW5kcG9pbnRzIH0gPSBmaWVsZC5hcGk7XG4gICAgY29uc3QgbmV4dEFwaUluZGV4ID0gZW5kcG9pbnRzLmZpbmRJbmRleChcbiAgICAgIChhcGk6IFRBcGlFbmRwb2ludCkgPT4gYXBpLmFwaUtleSA9PT0gZW50cnlwb2ludEFwaUtleVxuICAgICk7XG4gICAgY29uc3QgYXBpQ29uZmlnID0gZW5kcG9pbnRzW25leHRBcGlJbmRleF07XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaGFuZGxlRmllbGRBcGlDYWxsKGZpZWxkLCBhcGlDb25maWcpO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1kZXN0cnVjdHVyaW5nXG4gICAgZmllbGQgPSByZXNwb25zZS5maWVsZDtcbiAgICBmaWVsZC5hcGkuZW5kcG9pbnRzW25leHRBcGlJbmRleF0gPSByZXNwb25zZS5hcGk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIGZpZWxkTXVsdGlwbGVBcGlDYWxsc0VuZChhY3Rpb246IFRBY3Rpb24sIG9iamVjdDogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGFjdGlvbi5wcm9wcy5maWVsZEtleSk7XG4gICAgbGV0IG11bHRpcGxlQXBpQ2FsbFJlc3BvbnNlcyA9IHt9O1xuICAgIGZpZWxkLmFwaS5lbmRwb2ludHMuZm9yRWFjaCgoYXBpOiBUQXBpRW5kcG9pbnQpID0+IHtcbiAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhhcGkucmVzcG9uc2UsIFwidmFsdWVcIikpIHtcbiAgICAgICAgbXVsdGlwbGVBcGlDYWxsUmVzcG9uc2VzID0gc2V0VmFsdWVUb09iamVjdFBhdGgoXG4gICAgICAgICAgbXVsdGlwbGVBcGlDYWxsUmVzcG9uc2VzLFxuICAgICAgICAgIGAke2FwaS5hcGlLZXl9YCxcbiAgICAgICAgICBhcGkucmVzcG9uc2UudmFsdWVcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmZvcm1EYXRhID0ge1xuICAgICAgLi4udGhpcy5mb3JtRGF0YSxcbiAgICAgIFtmaWVsZC5rZXldOiBtdWx0aXBsZUFwaUNhbGxSZXNwb25zZXNcbiAgICB9O1xuICAgIHRoaXMucGF0Y2hGb3JtR3JvdXAodGhpcy5mb3JtRGF0YSk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIHRhc2tBcGlDYWxsKGFjdGlvbjogVEFjdGlvbiwgb2JqZWN0OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnNob3dBcGlMb2FkZXIoKTtcblxuICAgIGNvbnN0IGFwaUNvbmZpZyA9IGF3YWl0IHRoaXMuYXBpQ2FsbChhY3Rpb24sIG9iamVjdCk7XG5cbiAgICB0aGlzLnRhc2tEYXRhID0gbWVyZ2VPYmplY3RzKHRoaXMudGFza0RhdGEsIHtcbiAgICAgIFthY3Rpb24ucHJvcHMuZm9ybUFwaUtleV06IGFwaUNvbmZpZy5yZXNwb25zZS52YWx1ZVxuICAgIH0pO1xuXG4gICAgdGhpcy53YWl0aW5nRm9yQ2hhbmdlcyA9IGZhbHNlO1xuXG4gICAgdGhpcy5oaWRlQXBpTG9hZGVyKCk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIHRhc2tNdWx0aXBsZUFwaUNhbGxzKGFjdGlvbjogVEFjdGlvbiwgb2JqZWN0OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnNob3dBcGlMb2FkZXIoKTtcblxuICAgIGNvbnN0IG11bHRpcGxlQXBpQ29uZmlnID0gdGhpcy5mb3JtQ29uZmlnLmFwaXNbYWN0aW9uLnByb3BzLmZvcm1BcGlLZXldO1xuXG4gICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGFjdGlvbi5wcm9wcywgXCJhcGlLZXlcIikpIHtcbiAgICAgIGNvbnN0IGVudHJ5cG9pbnRBcGlLZXkgPSBhY3Rpb24ucHJvcHMuYXBpS2V5O1xuICAgICAgY29uc3QgeyBlbmRwb2ludHMgfSA9IG11bHRpcGxlQXBpQ29uZmlnO1xuICAgICAgY29uc3QgbmV4dEFwaUluZGV4ID0gZW5kcG9pbnRzLmZpbmRJbmRleChcbiAgICAgICAgKGFwaTogVEFwaUVuZHBvaW50KSA9PiBhcGkuYXBpS2V5ID09PSBlbnRyeXBvaW50QXBpS2V5XG4gICAgICApO1xuICAgICAgY29uc3QgYXBpQ29uZmlnID0gZW5kcG9pbnRzW25leHRBcGlJbmRleF07XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5oYW5kbGVBcGlDYWxsKGFwaUNvbmZpZyk7XG5cbiAgICAgIG11bHRpcGxlQXBpQ29uZmlnLmVuZHBvaW50c1tuZXh0QXBpSW5kZXhdID0gcmVzcG9uc2UuYXBpO1xuXG4gICAgICB0aGlzLmZvcm1Db25maWcgPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChcbiAgICAgICAgdGhpcy5mb3JtQ29uZmlnLFxuICAgICAgICBgYXBpcy4ke2FjdGlvbi5wcm9wcy5mb3JtQXBpS2V5fWAsXG4gICAgICAgIG11bHRpcGxlQXBpQ29uZmlnXG4gICAgICApO1xuXG4gICAgICB0aGlzLmhpZGVBcGlMb2FkZXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYXBpcyA9IG5ldyBBcGlzKFxuICAgICAgICB7XG4gICAgICAgICAgRk9STV9DT05GSUc6IHRoaXMuZm9ybUNvbmZpZyxcbiAgICAgICAgICBBUElfQ09ORklHOiBtdWx0aXBsZUFwaUNvbmZpZyxcbiAgICAgICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgIEZPUk1fREFUQTogdGhpcy5mb3JtRGF0YSxcbiAgICAgICAgICBSRURVWF9EQVRBOiB0aGlzLnJlZHV4RGF0YSxcbiAgICAgICAgICBDQU1FUkFfREFUQTogdGhpcy5jYW1lcmFEYXRhLFxuICAgICAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGEsXG4gICAgICAgICAgRVhUUkFfREFUQTogdGhpcy5leHRyYURhdGFcbiAgICAgICAgfSxcbiAgICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcbiAgICAgICk7XG5cbiAgICAgIGF3YWl0IGFwaXMuY2FsbE5leHRBcGkobXVsdGlwbGVBcGlDb25maWcuZW50cnlwb2ludCk7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyB0YXNrTXVsdGlwbGVBcGlDYWxsc0VuZChhY3Rpb246IFRBY3Rpb24sIG9iamVjdDogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbXVsdGlwbGVBcGlDb25maWcgPSB0aGlzLmZvcm1Db25maWcuYXBpc1thY3Rpb24ucHJvcHMuZm9ybUFwaUtleV07XG5cbiAgICBsZXQgbXVsdGlwbGVBcGlDYWxsUmVzcG9uc2VzID0ge307XG4gICAgbXVsdGlwbGVBcGlDb25maWcuZW5kcG9pbnRzLmZvckVhY2goKGFwaTogVEFwaUVuZHBvaW50KSA9PiB7XG4gICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoYXBpLnJlc3BvbnNlLCBcInZhbHVlXCIpKSB7XG4gICAgICAgIG11bHRpcGxlQXBpQ2FsbFJlc3BvbnNlcyA9IHNldFZhbHVlVG9PYmplY3RQYXRoKFxuICAgICAgICAgIG11bHRpcGxlQXBpQ2FsbFJlc3BvbnNlcyxcbiAgICAgICAgICBgJHthcGkuYXBpS2V5fWAsXG4gICAgICAgICAgYXBpLnJlc3BvbnNlLnZhbHVlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy50YXNrRGF0YSA9IHtcbiAgICAgIC4uLnRoaXMudGFza0RhdGEsXG4gICAgICBbYWN0aW9uLnByb3BzLmZvcm1BcGlLZXldOiBtdWx0aXBsZUFwaUNhbGxSZXNwb25zZXNcbiAgICB9O1xuXG4gICAgdGhpcy53YWl0aW5nRm9yQ2hhbmdlcyA9IGZhbHNlO1xuXG4gICAgdGhpcy5oaWRlQXBpTG9hZGVyKCk7XG4gIH1cblxuICBkaWFsb2dSZWY6IGFueSA9IHVuZGVmaW5lZDtcblxuICBAbG9nTWV0aG9kXG4gIGRpYWxvZ1Nob3cob3B0aW9uczogYW55KSB7XG4gICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0RJQUxPR19TSE9XLCB7fSk7XG5cbiAgICB0aGlzLmRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nU2VydmljZVxuICAgICAgLm9wZW4ob3B0aW9ucz8uaHRtbCwge1xuICAgICAgICBjbG9zZWFibGU6IHRydWUsXG4gICAgICAgIGRpc21pc3NpYmxlOiB0cnVlLFxuICAgICAgICBsYWJlbDogb3B0aW9ucz8ubGFiZWwsXG4gICAgICAgIHNpemU6IG9wdGlvbnM/LnNpemUgPz8gXCJzXCIsXG4gICAgICAgIGRhdGE6IHsgYnV0dG9uOiBvcHRpb25zPy5idXR0b24gfVxuICAgICAgfSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19ESUFMT0dfRVJST1IsIHt9KTtcbiAgICAgICAgfSxcbiAgICAgICAgY29tcGxldGU6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fRElBTE9HX0hJREUsIHt9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGRpYWxvZ0hpZGUoKSB7XG4gICAgaWYgKHRoaXMuZGlhbG9nUmVmKSB7XG4gICAgICB0aGlzLmRpYWxvZ1JlZi5jb21wbGV0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgcmVkaXJlY3RUb1VybChhY3Rpb246IFRBY3Rpb24pIHtcbiAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoYWN0aW9uLnByb3BzLCBcInVybFwiKSkge1xuICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGFjdGlvbi5wcm9wcy51cmwsIFwidXJsXCIpKSB7XG4gICAgICAgIGxldCB0aW1lb3V0ID0gMjAwMDtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGFjdGlvbi5wcm9wcy51cmwsIFwidGltZW91dFwiKSAmJlxuICAgICAgICAgIHR5cGVvZiBhY3Rpb24ucHJvcHMudXJsLnRpbWVvdXQgPT09IFwibnVtYmVyXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1kZXN0cnVjdHVyaW5nXG4gICAgICAgICAgdGltZW91dCA9IGFjdGlvbi5wcm9wcy51cmwudGltZW91dDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19SRURJUkVDVF9VUkwsIHtcbiAgICAgICAgICB0aW1lb3V0LFxuICAgICAgICAgIHJlZGlyZWN0X3VybDogYWN0aW9uLnByb3BzLnVybFxuICAgICAgICB9KTtcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoYWN0aW9uLnByb3BzLnVybCwgXCJ0YXJnZXRcIikpIHtcbiAgICAgICAgICAgIHdpbmRvdy5vcGVuKGFjdGlvbi5wcm9wcy51cmwudXJsLCBhY3Rpb24ucHJvcHMudXJsLnRhcmdldCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKGFjdGlvbi5wcm9wcy51cmwudXJsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIHRpbWVvdXQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgcGF0Y2hGaWVsZENvbnRyb2xWYWx1ZShrZXk6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2tleV0ucGF0Y2hWYWx1ZSh2YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBzZXRGaWVsZENvbnRyb2xWYWx1ZShrZXk6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2tleV0uc2V0VmFsdWUodmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgcGF0Y2hGb3JtR3JvdXAoZm9ybURhdGE6IGFueSkge1xuICAgIGlmIChpc1VuZGVmaW5lZCh0aGlzLmZvcm1Hcm91cCkgfHwgaXNVbmRlZmluZWQoZm9ybURhdGEpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGZvcm1Hcm91cCBvciBmb3JtRGF0YSBpcyAndW5kZWZpbmVkJy5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZm9ybURhdGFJbkt3aWtVSUZvcm1hdCA9IHt9O1xuICAgICAgZm9yIChjb25zdCBmaWVsZEtleSBpbiBmb3JtRGF0YSkge1xuICAgICAgICBpZiAoaXNOb3RFbXB0eVZhbHVlKGZpZWxkS2V5KSkge1xuICAgICAgICAgIGNvbnN0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCBmaWVsZEtleSk7XG4gICAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmaWVsZCkgJiYgIWlzTnVsbChmaWVsZCkpIHtcbiAgICAgICAgICAgIGZvcm1EYXRhSW5Ld2lrVUlGb3JtYXRbZmllbGRLZXldID1cbiAgICAgICAgICAgICAgY29udmVydEZvcm1GaWVsZFZhbHVlVG9Ld2lrVUlGb3JtYXQoZmllbGQsIGZvcm1EYXRhW2ZpZWxkS2V5XSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKGZvcm1EYXRhSW5Ld2lrVUlGb3JtYXQsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGlzRmllbGRWYWxpZChmaWVsZEtleTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkS2V5XS52YWxpZDtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgaXNGaWVsZEVuYWJsZWQoZmllbGRLZXk6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tmaWVsZEtleV0uZW5hYmxlZDtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgZ2V0Rm9ybUdyb3VwUmF3VmFsdWVzKCkge1xuICAgIHJldHVybiB0aGlzLmZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBzaG93UHJldmlldyhwcmV2aWV3UHJvcGVydGllczogYW55KTogdm9pZCB7XG4gICAgdGhpcy5wcmV2aWV3UHJvcGVydGllcyA9IG1lcmdlT2JqZWN0cyhcbiAgICAgIHRoaXMucHJldmlld1Byb3BlcnRpZXMsXG4gICAgICBwcmV2aWV3UHJvcGVydGllc1xuICAgICk7XG5cbiAgICBpZiAoXG4gICAgICBpc0VtcHR5VmFsdWUodGhpcy5wcmV2aWV3UHJvcGVydGllcy5pZnJhbWUuc3JjKSAmJlxuICAgICAgaXNFbXB0eVZhbHVlKHRoaXMucHJldmlld1Byb3BlcnRpZXMuaHRtbC5iZWZvcmUpICYmXG4gICAgICBpc0VtcHR5VmFsdWUodGhpcy5wcmV2aWV3UHJvcGVydGllcy5odG1sLmFmdGVyKVxuICAgICkge1xuICAgICAgdGhpcy5wcmV2aWV3UHJvcGVydGllcy51bmF2YWlsYWJsZSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHJldmlld1Byb3BlcnRpZXMudW5hdmFpbGFibGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCByZXNldFByZXZpZXdQcm9wZXJ0aWVzID0gKCkgPT4ge1xuICAgICAgdGhpcy5wcmV2aWV3UHJvcGVydGllcyA9IHtcbiAgICAgICAgaHRtbDoge1xuICAgICAgICAgIGJlZm9yZTogXCJcIixcbiAgICAgICAgICBiZWZvcmVTdHlsZXM6IFwiXCIsXG4gICAgICAgICAgYWZ0ZXI6IFwiXCIsXG4gICAgICAgICAgYWZ0ZXJTdHlsZXM6IFwiXCJcbiAgICAgICAgfSxcbiAgICAgICAgaWZyYW1lOiB7XG4gICAgICAgICAgc3JjOiBcIlwiLFxuICAgICAgICAgIHRpdGxlOiBcIlwiXG4gICAgICAgIH0sXG4gICAgICAgIHR5cGU6IFwiZGlhbG9nXCIsXG4gICAgICAgIHBvcHVwRm9ybUtleTogXCJcIixcbiAgICAgICAgdGl0bGU6IFwiXCIsXG4gICAgICAgIHNpemU6IFwiYXV0b1wiLFxuICAgICAgICB1bmF2YWlsYWJsZTogZmFsc2VcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IHNob3dEaWFsb2cgPSAoKSA9PiB7XG4gICAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fRElBTE9HX1NIT1csIHt9KTtcblxuICAgICAgdGhpcy5wcmV2aWV3RGlhbG9nUmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlXG4gICAgICAgIC5vcGVuKHRoaXMuZGlhbG9nLCB7XG4gICAgICAgICAgY2xvc2VhYmxlOiB0cnVlLFxuICAgICAgICAgIGRpc21pc3NpYmxlOiB0cnVlLFxuICAgICAgICAgIHNpemU6IHRoaXMucHJldmlld1Byb3BlcnRpZXM/LnNpemUgfHwgXCJhdXRvXCIsXG4gICAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICAgICAgfSlcbiAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgbmV4dDogKGRhdGEpID0+IHtcbiAgICAgICAgICAgIHRoaXMucHJldmlld0RpYWxvZ1JlZi5jb21wbGV0ZSgpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19ESUFMT0dfRVJST1IsIHt9KTtcblxuICAgICAgICAgICAgcmVzZXRQcmV2aWV3UHJvcGVydGllcygpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgY29tcGxldGU6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19ESUFMT0dfSElERSwge30pO1xuXG4gICAgICAgICAgICByZXNldFByZXZpZXdQcm9wZXJ0aWVzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2hvd1ByZXZpZXcgPSAoKSA9PiB7XG4gICAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fUFJFVklFV19TSE9XLCB7fSk7XG5cbiAgICAgIHRoaXMucHJldmlld0RpYWxvZ1JlZiA9IHRoaXMucHJldmlld0RpYWxvZ1NlcnZpY2VcbiAgICAgICAgLm9wZW4odGhpcy5wcmV2aWV3IHx8IFwiXCIpXG4gICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fUFJFVklFV19FUlJPUiwge30pO1xuXG4gICAgICAgICAgICByZXNldFByZXZpZXdQcm9wZXJ0aWVzKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX1BSRVZJRVdfSElERSwge30pO1xuXG4gICAgICAgICAgICByZXNldFByZXZpZXdQcm9wZXJ0aWVzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgc3dpdGNoICh0aGlzLnByZXZpZXdQcm9wZXJ0aWVzLnR5cGUpIHtcbiAgICAgIGNhc2UgXCJkaWFsb2dcIjpcbiAgICAgICAgc2hvd0RpYWxvZygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJwb3B1cFwiOlxuICAgICAgICBzaG93UHJldmlldygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHNob3dEaWFsb2coKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBzaG93RXJyb3JQcmV2aWV3KHByZXZpZXdQcm9wZXJ0aWVzOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dQcmV2aWV3KHtcbiAgICAgIGh0bWw6IHtcbiAgICAgICAgYWZ0ZXI6IGA8ZGl2IHN0eWxlPVwicGFkZGluZy1ib3R0b206MC4yNXJlbTtwYWRkaW5nLXRvcDogMC4yNXJlbTtwb3NpdGlvbjogYWJzb2x1dGU7bWFyZ2luLXRvcDogY2FsYyg1MHZoKTtmb250LXNpemU6IDEuNHJlbTtiYWNrZ3JvdW5kOiB3aGl0ZTtwYWRkaW5nOiAycmVtO2JvcmRlci1yYWRpdXM6IDFyZW07Ym94LXNoYWRvdzogMHB4IDBweCAxMHB4IC0zcHggYmxhY2s7b3ZlcmZsb3c6IGF1dG87aGVpZ2h0OiBmaXQtY29udGVudDttYXgtaGVpZ2h0OiA5MHZoOyB3aWR0aDogNzB2dzsgbWFyZ2luLWxlZnQ6IGNhbGMoMTV2dyk7IGxpbmUtaGVpZ2h0OiAycmVtO1wiPkVycm9yOiAke3ByZXZpZXdQcm9wZXJ0aWVzLm1lc3NhZ2UubWVzc2FnZX08L2Rpdj5gXG4gICAgICB9LFxuICAgICAgdHlwZTogXCJwb3B1cFwiXG4gICAgfSk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIHNob3dQb3B1cEZvcm0oXG4gICAgcG9wdXBGb3JtS2V5OiBzdHJpbmcsXG4gICAgcG9wdXBUeXBlOiBcIkRJQUxPR1wiIHwgXCJQT1BVUFwiID0gXCJESUFMT0dcIlxuICApOiB2b2lkIHtcbiAgICBjb25zdCBwb3B1cEZvcm1Db25maWcgPSB0aGlzLmZvcm1Db25maWcucG9wdXBGb3Jtc1twb3B1cEZvcm1LZXldO1xuXG4gICAgdGhpcy5vbkFjdGlvblNob3dQb3B1cEZvcm0uZW1pdCh7XG4gICAgICBhY3RpdmVGb3JtRGF0YTogbWVyZ2VPYmplY3RzKHRoaXMuZm9ybURhdGEsIHRoaXMudGFza0RhdGEpLFxuICAgICAgcG9wdXBGb3JtQ29uZmlnLFxuICAgICAgcG9wdXBUeXBlXG4gICAgfSk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFsZXJ0U2hvdyh0eXBlOiBUdWlOb3RpZmljYXRpb24sIG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19BTEVSVF9TSE9XLCB7XG4gICAgICBhbGVydF9tZXNzYWdlOiBtZXNzYWdlLFxuICAgICAgYWxlcnRfdHlwZTogdHlwZVxuICAgIH0pO1xuXG4gICAgdGhpcy5hbGVydFNlcnZpY2VcbiAgICAgIC5vcGVuKGAke21lc3NhZ2V9YCwge1xuICAgICAgICBzdGF0dXM6XG4gICAgICAgICAgdHlwZSA9PT0gXCJlcnJvclwiXG4gICAgICAgICAgICA/IFR1aU5vdGlmaWNhdGlvbi5FcnJvclxuICAgICAgICAgICAgOiB0eXBlID09PSBcIndhcm5pbmdcIlxuICAgICAgICAgICAgICA/IFR1aU5vdGlmaWNhdGlvbi5XYXJuaW5nXG4gICAgICAgICAgICAgIDogdHlwZSA9PT0gXCJzdWNjZXNzXCJcbiAgICAgICAgICAgICAgICA/IFR1aU5vdGlmaWNhdGlvbi5TdWNjZXNzXG4gICAgICAgICAgICAgICAgOiBUdWlOb3RpZmljYXRpb24uSW5mb1xuICAgICAgfSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19BTEVSVF9FUlJPUiwge30pO1xuICAgICAgICB9LFxuICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xuICAgICAgICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19BTEVSVF9ISURFLCB7fSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyB0YWtlQWN0aW9uT25GaWVsZEdyb3VwKGFjdGlvbjogVEFjdGlvbiwgb2JqZWN0OiBhbnkpIHtcbiAgICAvKipcbiAgICAgKiBUaGlzIGJlbG93IGNvZGUgaXMgY3VycmVudGx5IGNvbW1lbnRlZCBiZWNhdXNlIG5vdCBhbGwgYWN0aW9ucyBuZWVkIHRvIGJlIGxvZ2dlZCBhdCBiYWNrZW5kLlxuICAgICAqIFdpbGwgbG9vayBsYXRlciBpbnRvIHdoZXJlIG9ubHkgc3BlY2lmaWMgYWN0aW9ucyBuZWVkcyB0byBiZSBsb2dnZWQgb3IgYWxsLlxuICAgICAqIEN1cnJlbnRseSBsb2dzIGFyZSBzZW50IGZyb20gd2l0aGluZyB0aGUgYWN0aW9uJ3Mgc3BlY2lmaWMgbWV0aG9kcy5cbiAgICAgKiBDb2RlIC1cbiAgICAgICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0FDVElPTl9FWEVDVVRFX0dST1VQLCB7XG4gICAgICAgICAgYWN0aW9uX2tleTogYWN0aW9uLmtleSxcbiAgICAgICAgICAuLi4oYWN0aW9uLmlkICYmIHsgYWN0aW9uX2lkOiBhY3Rpb24uaWQgfSksXG4gICAgICAgICAgLi4uKGFjdGlvbi5wcm9wcy5ncm91cEtleSAmJiB7IGFjdGlvbl9pZDogYWN0aW9uLnByb3BzLmdyb3VwS2V5IH0pXG4gICAgICAgIH0pO1xuICAgICovXG5cbiAgICBzd2l0Y2ggKGFjdGlvbi5rZXkpIHtcbiAgICAgIGNhc2UgRUFjdGlvbktleS5GSUVMRF9HUk9VUF9ISURFOlxuICAgICAgICB0aGlzLmZpZWxkR3JvdXBIaWRlKGFjdGlvbi5wcm9wcy5ncm91cEtleSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX0dST1VQX1NIT1c6XG4gICAgICAgIHRoaXMuZmllbGRHcm91cFNob3coYWN0aW9uLnByb3BzLmdyb3VwS2V5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuRklFTERfR1JPVVBfRU5BQkxFOlxuICAgICAgICB0aGlzLmZpZWxkR3JvdXBFbmFibGUoYWN0aW9uLnByb3BzLmdyb3VwS2V5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuRklFTERfR1JPVVBfRElTQUJMRTpcbiAgICAgICAgdGhpcy5maWVsZEdyb3VwRGlzYWJsZShhY3Rpb24ucHJvcHMuZ3JvdXBLZXkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5GSUVMRF9HUk9VUF9SRVNFVDpcbiAgICAgICAgdGhpcy5maWVsZEdyb3VwUmVzZXQoYWN0aW9uLnByb3BzLmdyb3VwS2V5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuRklFTERfR1JPVVBfU0hPV19BUElfTE9BREVSOlxuICAgICAgICB0aGlzLmZpZWxkR3JvdXBEaXNhYmxlKGFjdGlvbi5wcm9wcy5ncm91cEtleSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX0dST1VQX0hJREVfQVBJX0xPQURFUjpcbiAgICAgICAgdGhpcy5maWVsZEdyb3VwRGlzYWJsZShhY3Rpb24ucHJvcHMuZ3JvdXBLZXkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgdGFrZUFjdGlvbihhY3Rpb246IFRBY3Rpb24sIG9iamVjdDogYW55KSB7XG4gICAgLyoqXG4gICAgICogVGhpcyBiZWxvdyBjb2RlIGlzIGN1cnJlbnRseSBjb21tZW50ZWQgYmVjYXVzZSBub3QgYWxsIGFjdGlvbnMgbmVlZCB0byBiZSBsb2dnZWQgYXQgYmFja2VuZC5cbiAgICAgKiBXaWxsIGxvb2sgbGF0ZXIgaW50byB3aGVyZSBvbmx5IHNwZWNpZmljIGFjdGlvbnMgbmVlZHMgdG8gYmUgbG9nZ2VkIG9yIGFsbC5cbiAgICAgKiBDdXJyZW50bHkgbG9ncyBhcmUgc2VudCBmcm9tIHdpdGhpbmcgdGhlIGFjdGlvbidzIHNwZWNpZmljIG1ldGhvZHMuXG4gICAgICogQ29kZSAtXG4gICAgICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19BQ1RJT05fRVhFQ1VURSwge1xuICAgICAgICAgIGFjdGlvbl9rZXk6IGFjdGlvbi5rZXksXG4gICAgICAgICAgLi4uKGFjdGlvbi5pZCAmJiB7IGFjdGlvbl9pZDogYWN0aW9uLmlkIH0pXG4gICAgICAgIH0pO1xuICAgICovXG5cbiAgICBzd2l0Y2ggKGFjdGlvbi5rZXkpIHtcbiAgICAgIGNhc2UgRUFjdGlvbktleS5GSUVMRF9ISURFOlxuICAgICAgICB0aGlzLmZpZWxkSGlkZShhY3Rpb24ucHJvcHMuZmllbGRLZXkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5GSUVMRF9TSE9XOlxuICAgICAgICB0aGlzLmZpZWxkU2hvdyhhY3Rpb24ucHJvcHMuZmllbGRLZXkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5GSUVMRF9ESVNBQkxFOlxuICAgICAgICB0aGlzLmZpZWxkRGlzYWJsZShhY3Rpb24ucHJvcHMuZmllbGRLZXkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5GSUVMRF9FTkFCTEU6XG4gICAgICAgIHRoaXMuZmllbGRFbmFibGUoYWN0aW9uLnByb3BzLmZpZWxkS2V5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuRklFTERfU0hPV19BUElfTE9BREVSOlxuICAgICAgICB0aGlzLmZpZWxkRW5hYmxlKGFjdGlvbi5wcm9wcy5maWVsZEtleSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX0hJREVfQVBJX0xPQURFUjpcbiAgICAgICAgdGhpcy5maWVsZEVuYWJsZShhY3Rpb24ucHJvcHMuZmllbGRLZXkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5GSUVMRF9SRVNFVDpcbiAgICAgICAgdGhpcy5maWVsZFJlc2V0KGFjdGlvbi5wcm9wcy5maWVsZEtleSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX0VSUk9SX1NIT1c6XG4gICAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhhY3Rpb24ucHJvcHMubWVzc2FnZSwgXCJzb3VyY2VcIikpIHtcbiAgICAgICAgICBjb25zdCBmaWVsZEVycm9yU2hvd1NvdXJjZSA9IG5ldyBTb3VyY2Uob2JqZWN0KTtcblxuICAgICAgICAgIGxldCBmaWVsZEVycm9yU2hvd1NvdXJjZVZhbHVlID1cbiAgICAgICAgICAgIGF3YWl0IGZpZWxkRXJyb3JTaG93U291cmNlLmdldFZhbHVlRnJvbVNvdXJjZShcbiAgICAgICAgICAgICAgYWN0aW9uLnByb3BzLm1lc3NhZ2Uuc291cmNlXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdHlwZW9mIGZpZWxkRXJyb3JTaG93U291cmNlVmFsdWUgPT09IFwic3RyaW5nXCIgfHxcbiAgICAgICAgICAgIHR5cGVvZiBmaWVsZEVycm9yU2hvd1NvdXJjZVZhbHVlID09PSBcIm51bWJlclwiXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBmaWVsZEVycm9yU2hvd1NvdXJjZVZhbHVlID0gU3RyaW5nKGZpZWxkRXJyb3JTaG93U291cmNlVmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmaWVsZEVycm9yU2hvd1NvdXJjZVZhbHVlID0gXCJcIjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhY3Rpb24gPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChcbiAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgIFwicHJvcHMubWVzc2FnZS5tZXNzYWdlXCIsXG4gICAgICAgICAgICBmaWVsZEVycm9yU2hvd1NvdXJjZVZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBhY3Rpb24ucHJvcHMubWVzc2FnZS5tZXNzYWdlID0gdXBkYXRlTGFuZ3VhZ2UoXG4gICAgICAgICAgYWN0aW9uLnByb3BzLm1lc3NhZ2UubWVzc2FnZSxcbiAgICAgICAgICBnZXRMYW5ndWFnZSh0aGlzLnJlZHV4RGF0YSA/PyB7fSwgdGhpcy51c2VyQ29uZmlnKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmZpZWxkRXJyb3JTaG93KGFjdGlvbi5wcm9wcy5maWVsZEtleSwgYWN0aW9uLnByb3BzLm1lc3NhZ2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5GSUVMRF9FUlJPUl9ISURFOlxuICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoYWN0aW9uLnByb3BzLm1lc3NhZ2UsIFwic291cmNlXCIpKSB7XG4gICAgICAgICAgY29uc3QgZmllbGRFcnJvckhpZGVTb3VyY2UgPSBuZXcgU291cmNlKG9iamVjdCk7XG5cbiAgICAgICAgICBsZXQgZmllbGRFcnJvckhpZGVTb3VyY2VWYWx1ZSA9XG4gICAgICAgICAgICBhd2FpdCBmaWVsZEVycm9ySGlkZVNvdXJjZS5nZXRWYWx1ZUZyb21Tb3VyY2UoXG4gICAgICAgICAgICAgIGFjdGlvbi5wcm9wcy5tZXNzYWdlLnNvdXJjZVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHR5cGVvZiBmaWVsZEVycm9ySGlkZVNvdXJjZVZhbHVlID09PSBcInN0cmluZ1wiIHx8XG4gICAgICAgICAgICB0eXBlb2YgZmllbGRFcnJvckhpZGVTb3VyY2VWYWx1ZSA9PT0gXCJudW1iZXJcIlxuICAgICAgICAgICkge1xuICAgICAgICAgICAgZmllbGRFcnJvckhpZGVTb3VyY2VWYWx1ZSA9IFN0cmluZyhmaWVsZEVycm9ySGlkZVNvdXJjZVZhbHVlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmllbGRFcnJvckhpZGVTb3VyY2VWYWx1ZSA9IFwiXCI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYWN0aW9uID0gc2V0VmFsdWVUb09iamVjdFBhdGgoXG4gICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICBcInByb3BzLm1lc3NhZ2UubWVzc2FnZVwiLFxuICAgICAgICAgICAgZmllbGRFcnJvckhpZGVTb3VyY2VWYWx1ZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maWVsZEVycm9ySGlkZShhY3Rpb24ucHJvcHMuZmllbGRLZXksIGFjdGlvbi5wcm9wcy5tZXNzYWdlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuRklFTERfTUVTU0FHRV9TSE9XOlxuICAgICAgICB0aGlzLmZpZWxkTWVzc2FnZVNob3coYWN0aW9uLnByb3BzLmZpZWxkS2V5LCBhY3Rpb24ucHJvcHMubWVzc2FnZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX01FU1NBR0VTX0hJREU6XG4gICAgICAgIHRoaXMuZmllbGRNZXNzYWdlSGlkZShhY3Rpb24ucHJvcHMuZmllbGRLZXksIGFjdGlvbi5wcm9wcy5tZXNzYWdlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuRklFTERfQVBJX1RJTUVSX01FU1NBR0VfU0hPVzpcbiAgICAgICAgYXdhaXQgdGhpcy5maWVsZEFwaVRpbWVyTWVzc2FnZVNob3coXG4gICAgICAgICAgYWN0aW9uLnByb3BzLmZpZWxkS2V5LFxuICAgICAgICAgIGFjdGlvbi5wcm9wcy50aW1lclxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5GSUVMRF9BUElfVElNRVJfTUVTU0FHRV9ISURFOlxuICAgICAgICBhd2FpdCB0aGlzLmZpZWxkQXBpVGltZXJNZXNzYWdlSGlkZShhY3Rpb24ucHJvcHMuZmllbGRLZXkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5SRU1PVkVfS0VZX0ZST01fT0JKRUNUX1BBVEg6XG4gICAgICAgIGF3YWl0IHRoaXMucmVtb3ZlS2V5RnJvbU9iamVjdFBhdGgoYWN0aW9uLCBvYmplY3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5TRVRfVkFMVUU6XG4gICAgICAgIGF3YWl0IHRoaXMuc2V0VmFsdWUoYWN0aW9uLCBvYmplY3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5TRVRfRklFTERfREVGQVVMVF9WQUxVRTpcbiAgICAgICAgYXdhaXQgdGhpcy5zZXRGaWVsZERlZmF1bHRWYWx1ZShhY3Rpb24sIG9iamVjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LlNFVF9BUElfU1RBVFVTOlxuICAgICAgICBhd2FpdCB0aGlzLnNldEFwaVN0YXR1cyhhY3Rpb24sIG9iamVjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LlNFVF9BUElfSEVBREVSX1ZBTFVFOlxuICAgICAgICBhd2FpdCB0aGlzLnNldEFwaUhlYWRlclZhbHVlKGFjdGlvbiwgb2JqZWN0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuU0VUX0FQSV9IRUFERVJfVkFMSURJVFk6XG4gICAgICAgIGF3YWl0IHRoaXMuc2V0QXBpSGVhZGVyVmFsaWRpdHkoYWN0aW9uLCBvYmplY3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5TRVRfQVBJX0JPRFlfVkFMVUU6XG4gICAgICAgIGF3YWl0IHRoaXMuc2V0QXBpQm9keVZhbHVlKGFjdGlvbiwgb2JqZWN0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuU0VUX0FQSV9CT0RZX1ZBTElESVRZOlxuICAgICAgICBhd2FpdCB0aGlzLnNldEFwaUJvZHlWYWxpZGl0eShhY3Rpb24sIG9iamVjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LlNFVF9EUk9QRE9XTl9PUFRJT05TOlxuICAgICAgICBhd2FpdCB0aGlzLnNldERyb3Bkb3duT3B0aW9ucyhhY3Rpb24sIG9iamVjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LlNFVF9GSUVMRF9WQUxJRElUWTpcbiAgICAgICAgYXdhaXQgdGhpcy5zZXRGaWVsZFZhbGlkaXR5KGFjdGlvbiwgb2JqZWN0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuSEFORExFX0NPTk5FQ1RFRF9FTEVNRU5UUzpcbiAgICAgICAgdGhpcy5oYW5kbGVDb25uZWN0ZWRFbGVtZW50cyhcbiAgICAgICAgICB7IGtleTogYWN0aW9uLnByb3BzLmZpZWxkS2V5IH0sXG4gICAgICAgICAgXCJPTl9BQ1RJT05cIlxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5BUElfQ0FMTDpcbiAgICAgICAgYXdhaXQgdGhpcy5maWVsZEFwaUNhbGwoYWN0aW9uLCBvYmplY3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5BUElfQ0FMTF9NVUxUSVBMRTpcbiAgICAgICAgYXdhaXQgdGhpcy5maWVsZE11bHRpcGxlQXBpQ2FsbHMoYWN0aW9uLCBvYmplY3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5BUElfQ0FMTF9NVUxUSVBMRV9FTkQ6XG4gICAgICAgIGF3YWl0IHRoaXMuZmllbGRNdWx0aXBsZUFwaUNhbGxzRW5kKGFjdGlvbiwgb2JqZWN0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuVEFTS19BUElfQ0FMTDpcbiAgICAgICAgYXdhaXQgdGhpcy50YXNrQXBpQ2FsbChhY3Rpb24sIG9iamVjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LlRBU0tfQVBJX0NBTExfTVVMVElQTEU6XG4gICAgICAgIGF3YWl0IHRoaXMudGFza011bHRpcGxlQXBpQ2FsbHMoYWN0aW9uLCBvYmplY3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5UQVNLX0FQSV9DQUxMX01VTFRJUExFX0VORDpcbiAgICAgICAgYXdhaXQgdGhpcy50YXNrTXVsdGlwbGVBcGlDYWxsc0VuZChhY3Rpb24sIG9iamVjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LlJFRElSRUNUX1RPX1VSTDpcbiAgICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGFjdGlvbi5wcm9wcy51cmwsIFwic291cmNlXCIpKSB7XG4gICAgICAgICAgY29uc3QgcmVkaXJlY3RUb1VybFNvdXJjZSA9IG5ldyBTb3VyY2Uob2JqZWN0KTtcblxuICAgICAgICAgIGxldCByZWRpcmVjdFRvVXJsU291cmNlVmFsdWUgPVxuICAgICAgICAgICAgYXdhaXQgcmVkaXJlY3RUb1VybFNvdXJjZS5nZXRWYWx1ZUZyb21Tb3VyY2UoXG4gICAgICAgICAgICAgIGFjdGlvbi5wcm9wcy51cmwuc291cmNlXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKGlzRW1wdHlTdHJpbmcocmVkaXJlY3RUb1VybFNvdXJjZVZhbHVlKSkge1xuICAgICAgICAgICAgcmVkaXJlY3RUb1VybFNvdXJjZVZhbHVlID0gXCJcIjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhY3Rpb24gPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChcbiAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgIFwicHJvcHMudXJsLnVybFwiLFxuICAgICAgICAgICAgcmVkaXJlY3RUb1VybFNvdXJjZVZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlZGlyZWN0VG9VcmwoYWN0aW9uKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuUFJFVklFV19ESUFMT0dfU0hPVzpcbiAgICAgICAgdGhpcy5zaG93UHJldmlldyhhY3Rpb24ucHJvcHMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5QUkVWSUVXX0VSUk9SX1NIT1c6XG4gICAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhhY3Rpb24ucHJvcHMubWVzc2FnZSwgXCJzb3VyY2VcIikpIHtcbiAgICAgICAgICBjb25zdCBwcmV2aWV3RXJyb3JTaG93U291cmNlID0gbmV3IFNvdXJjZShvYmplY3QpO1xuXG4gICAgICAgICAgbGV0IHByZXZpZXdFcnJvclNob3dTb3VyY2VWYWx1ZSA9XG4gICAgICAgICAgICBhd2FpdCBwcmV2aWV3RXJyb3JTaG93U291cmNlLmdldFZhbHVlRnJvbVNvdXJjZShcbiAgICAgICAgICAgICAgYWN0aW9uLnByb3BzLm1lc3NhZ2Uuc291cmNlXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdHlwZW9mIHByZXZpZXdFcnJvclNob3dTb3VyY2VWYWx1ZSA9PT0gXCJzdHJpbmdcIiB8fFxuICAgICAgICAgICAgdHlwZW9mIHByZXZpZXdFcnJvclNob3dTb3VyY2VWYWx1ZSA9PT0gXCJudW1iZXJcIlxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcHJldmlld0Vycm9yU2hvd1NvdXJjZVZhbHVlID0gU3RyaW5nKHByZXZpZXdFcnJvclNob3dTb3VyY2VWYWx1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHByZXZpZXdFcnJvclNob3dTb3VyY2VWYWx1ZSA9IFwiXCI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYWN0aW9uID0gc2V0VmFsdWVUb09iamVjdFBhdGgoXG4gICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICBcInByb3BzLm1lc3NhZ2UubWVzc2FnZVwiLFxuICAgICAgICAgICAgcHJldmlld0Vycm9yU2hvd1NvdXJjZVZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNob3dFcnJvclByZXZpZXcoYWN0aW9uLnByb3BzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuUE9QVVBfRk9STV9TSE9XOlxuICAgICAgICB0aGlzLnNob3dQb3B1cEZvcm0oXG4gICAgICAgICAgYWN0aW9uLnByb3BzLnBvcHVwRm9ybUtleSxcbiAgICAgICAgICBhY3Rpb24ucHJvcHM/LnBvcHVwVHlwZSA/PyBcIkRJQUxPR1wiXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LlNUT1BfV0FJVElORzpcbiAgICAgICAgdGhpcy53YWl0aW5nRm9yQ2hhbmdlcyA9IGZhbHNlO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5TQ1JPTExfVE9fRklFTEQ6XG4gICAgICAgIHRoaXMuaGFuZGxlT25TY3JvbGxUb0ZpZWxkKGFjdGlvbi5wcm9wcy5maWVsZEtleSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5Lk5PVElGSUNBVElPTl9FUlJPUl9TSE9XOlxuICAgICAgICB0aGlzLnRvZ2dsZUVycm9yTm90aWZpY2F0aW9uKHRydWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5OT1RJRklDQVRJT05fRVJST1JfSElERTpcbiAgICAgICAgdGhpcy50b2dnbGVFcnJvck5vdGlmaWNhdGlvbihmYWxzZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LlJFU1VNRV9UQVNLX0VYRUNVVElPTjpcbiAgICAgICAgdGhpcy5zdG9wVGFza0V4ZWN1dGlvbiA9IGZhbHNlO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5TVE9QX1RBU0tfRVhFQ1VUSU9OOlxuICAgICAgICB0aGlzLnN0b3BUYXNrRXhlY3V0aW9uID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuRElBTE9HX1NIT1c6XG4gICAgICAgIHRoaXMuZGlhbG9nU2hvdyh7XG4gICAgICAgICAgaHRtbDogYWN0aW9uLnByb3BzPy5odG1sLFxuICAgICAgICAgIGxhYmVsOiBhY3Rpb24ucHJvcHM/LmxhYmVsLFxuICAgICAgICAgIHNpemU6IGFjdGlvbi5wcm9wcz8uc2l6ZSxcbiAgICAgICAgICBidXR0b246IGFjdGlvbi5wcm9wcz8uYnV0dG9uXG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5ESUFMT0dfSElERTpcbiAgICAgICAgdGhpcy5kaWFsb2dIaWRlKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LlNBVkVfRk9STTpcbiAgICAgICAgdGhpcy5oYW5kbGVPbkNsaWNrU2F2ZUZvcm0odW5kZWZpbmVkKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuQUxFUlRfU0hPVzpcbiAgICAgICAgdGhpcy5hbGVydFNob3coYWN0aW9uLnByb3BzLnR5cGUsIGFjdGlvbi5wcm9wcy5tZXNzYWdlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuU0VUX0hUTUw6XG4gICAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhhY3Rpb24ucHJvcHMubWVzc2FnZSwgXCJzb3VyY2VcIikpIHtcbiAgICAgICAgICBjb25zdCBmaWVsZEh0bWxNZXNzYWdlU291cmNlID0gbmV3IFNvdXJjZShvYmplY3QpO1xuXG4gICAgICAgICAgbGV0IGZpZWxkSHRtbE1lc3NhZ2VTb3VyY2VWYWx1ZSA9XG4gICAgICAgICAgICBhd2FpdCBmaWVsZEh0bWxNZXNzYWdlU291cmNlLmdldFZhbHVlRnJvbVNvdXJjZShcbiAgICAgICAgICAgICAgYWN0aW9uLnByb3BzLm1lc3NhZ2Uuc291cmNlXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdHlwZW9mIGZpZWxkSHRtbE1lc3NhZ2VTb3VyY2VWYWx1ZSA9PT0gXCJzdHJpbmdcIiB8fFxuICAgICAgICAgICAgdHlwZW9mIGZpZWxkSHRtbE1lc3NhZ2VTb3VyY2VWYWx1ZSA9PT0gXCJudW1iZXJcIlxuICAgICAgICAgICkge1xuICAgICAgICAgICAgZmllbGRIdG1sTWVzc2FnZVNvdXJjZVZhbHVlID0gU3RyaW5nKGZpZWxkSHRtbE1lc3NhZ2VTb3VyY2VWYWx1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZpZWxkSHRtbE1lc3NhZ2VTb3VyY2VWYWx1ZSA9IFwiXCI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYWN0aW9uID0gc2V0VmFsdWVUb09iamVjdFBhdGgoXG4gICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICBcInByb3BzLm1lc3NhZ2UubWVzc2FnZVwiLFxuICAgICAgICAgICAgZmllbGRIdG1sTWVzc2FnZVNvdXJjZVZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBhY3Rpb24ucHJvcHMubWVzc2FnZS5tZXNzYWdlID0gdXBkYXRlTGFuZ3VhZ2UoXG4gICAgICAgICAgYWN0aW9uLnByb3BzLm1lc3NhZ2UubWVzc2FnZSxcbiAgICAgICAgICBnZXRMYW5ndWFnZSh0aGlzLnJlZHV4RGF0YSA/PyB7fSwgdGhpcy51c2VyQ29uZmlnKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnNldEh0bWwoYWN0aW9uLnByb3BzLmZpZWxkS2V5LCBhY3Rpb24ucHJvcHMubWVzc2FnZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwia3dpa2lkLWZvcm0tY29udGFpbmVyXCJcbiAgKm5nSWY9XCIhbG9hZGluZ1wiXG4+XG4gIDxkaXZcbiAgICBpZD1cInVmLWZvcm0tZmllbGRzLWhlYWRlci1jb250YWluZXJcIlxuICAgICpuZ0lmPVwiXG4gICAgICAhZm9ybUNvbmZpZy5wcm9wZXJ0aWVzPy5oZWFkZXI/LnRpdGxlPy5oaWRkZW4gfHxcbiAgICAgICFmb3JtQ29uZmlnLnByb3BlcnRpZXM/LmhlYWRlcj8ubG9nbz8uaGlkZGVuIHx8XG4gICAgICAhZm9ybUNvbmZpZy5wcm9wZXJ0aWVzPy5oZWFkZXI/LnN0ZXBzPy5oaWRkZW4gfHxcbiAgICAgICFmb3JtQ29uZmlnLnByb3BlcnRpZXM/LmhlYWRlcj8uYmFja0J1dHRvbj8uaGlkZGVuXG4gICAgXCJcbiAgPlxuICAgIDxpbWdcbiAgICAgIGlkPVwidWYtaGVhZGVyLWxvZ29cIlxuICAgICAgKm5nSWY9XCIhZm9ybUNvbmZpZy5wcm9wZXJ0aWVzPy5oZWFkZXI/LmxvZ28/LmhpZGRlbiAmJiBpc01vYmlsZVZpZXdcIlxuICAgICAgW3NyY109XCJmb3JtQ29uZmlnLnByb3BlcnRpZXM/LmhlYWRlcj8ubG9nbz8uc3JjXCJcbiAgICAgIFthbHRdPVwiZm9ybUNvbmZpZy5wcm9wZXJ0aWVzPy5oZWFkZXI/LmxvZ28/LmFsdFwiXG4gICAgICBbc3R5bGVdPVwiXG4gICAgICAgIGZvcm1Db25maWcucHJvcGVydGllcz8uaGVhZGVyPy5sb2dvPy5zdHlsZXMgPz8gJycgfCBzdHlsZVNhbml0aXplclxuICAgICAgXCJcbiAgICAvPlxuICAgIDxkaXYgaWQ9XCJ1Zi1mb3JtLWZpZWxkcy1oZWFkZXItbWFpblwiPlxuICAgICAgPGRpdiBpZD1cInVmLWZvcm0tZmllbGRzLWhlYWRlci1sZWZ0XCI+XG4gICAgICAgIDxrd2lrdWktYnV0dG9uXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICFmb3JtQ29uZmlnLnByb3BlcnRpZXM/LmhlYWRlci5iYWNrQnV0dG9uLmhpZGRlbiAmJiBpc01vYmlsZVZpZXdcbiAgICAgICAgICBcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJiYWNrQnV0dG9uLmRpc2FibGVkXCJcbiAgICAgICAgICBbc2hvd0xvYWRlcl09XCJiYWNrQnV0dG9uLnNob3dMb2FkZXJcIlxuICAgICAgICAgIGFwcGVhcmFuY2U9XCJtb25vXCJcbiAgICAgICAgICBpY29uPVwidHVpSWNvbkFycm93TGVmdFwiXG4gICAgICAgICAgc2hhcGU9XCJyb3VuZGVkXCJcbiAgICAgICAgICAob25DbGljayk9XCJcbiAgICAgICAgICAgIGhhbmRsZU9uQ2xpY2tHb0JhY2soXG4gICAgICAgICAgICAgICRldmVudCxcbiAgICAgICAgICAgICAgZm9ybUNvbmZpZy5wcm9wZXJ0aWVzPy5oZWFkZXIuYmFja0J1dHRvbi5tb2RlXG4gICAgICAgICAgICApXG4gICAgICAgICAgXCJcbiAgICAgICAgPjwva3dpa3VpLWJ1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBpZD1cInVmLWZvcm0tZmllbGRzLWhlYWRlci1yaWdodFwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgaWQ9XCJ1Zi1mb3JtLWZpZWxkcy10aXRsZVwiXG4gICAgICAgICAgKm5nSWY9XCIhZm9ybUNvbmZpZy5wcm9wZXJ0aWVzPy5oZWFkZXIudGl0bGUuaGlkZGVuXCJcbiAgICAgICAgICA+e3sgZm9ybUNvbmZpZy5wcm9wZXJ0aWVzPy5oZWFkZXIudGl0bGUubGFiZWwgfX08L2RpdlxuICAgICAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBpZD1cInVmLWZvcm0tZmllbGRzLXN0ZXBzXCJcbiAgICAgICAgICAqbmdJZj1cIiFmb3JtQ29uZmlnLnByb3BlcnRpZXM/LmhlYWRlci5zdGVwcy5oaWRkZW5cIlxuICAgICAgICA+XG4gICAgICAgICAgU3RlcCB7eyBmb3JtQ29uZmlnLnNlcXVlbmNlTm8gfX0gb2Yge3sgZm9ybUNvbmZpZy5mb3Jtc0xpc3RMZW5ndGggfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8aHJcbiAgICAgICpuZ0lmPVwiXG4gICAgICAgICFmb3JtQ29uZmlnLnByb3BlcnRpZXM/LmhlYWRlci50aXRsZS5oaWRkZW4gfHxcbiAgICAgICAgIWZvcm1Db25maWcucHJvcGVydGllcz8uaGVhZGVyLnN0ZXBzLmhpZGRlbiB8fFxuICAgICAgICAhZm9ybUNvbmZpZy5wcm9wZXJ0aWVzPy5oZWFkZXIuYmFja0J1dHRvbi5oaWRkZW5cbiAgICAgIFwiXG4gICAgLz5cbiAgPC9kaXY+XG4gIDxmb3JtXG4gICAgI2Zvcm1GaWVsZENvbnRhaW5lclJlZlxuICAgIGNsYXNzPVwia3dpa2lkLWZvcm0gc2hvd1wiXG4gICAgW3N0eWxlXT1cImZvcm1Db25maWcucHJvcGVydGllcz8ubWFpbj8uc3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcIlxuICAgIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ0Zvcj1cIlxuICAgICAgICBsZXQgZmllbGQgb2YgZm9ybUZpZWxkcztcbiAgICAgICAgbGV0IGkgPSBpbmRleDtcbiAgICAgICAgdHJhY2tCeTogZ2V0VW5pcXVlSWRlbnRpZmllclxuICAgICAgXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJmaWVsZC50eXBlXCI+XG4gICAgICAgIDwhLS0gSFRNTCBDb250ZW50IC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInaHRtbCdcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAjZm9ybUZpZWxkc1JlZlxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJmaWVsZD8ucHJvcGVydGllcz8uY29udGFpbmVyU3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcIlxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgW2lubmVySHRtbF09XCJmaWVsZC5odG1sIHwga3dpa3VpU2FmZUh0bWxcIj48L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gRm9ybSBUaXRsZSAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3RpdGxlJ1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICNmb3JtRmllbGRzUmVmXG4gICAgICAgICAgICBjbGFzcz1cInRpdGxlXCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJmaWVsZD8ucHJvcGVydGllcz8uY29udGFpbmVyU3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcIlxuICAgICAgICAgICAgW2NsYXNzLmhpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICB7eyBmaWVsZC5sYWJlbCB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8a3dpa3VpLWJ1dHRvblxuICAgICAgICAgICAgICAqbmdJZj1cImZpZWxkPy5yZXNldFwiXG4gICAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJ3aGl0ZWJsb2NrXCJcbiAgICAgICAgICAgICAgc2l6ZT1cInNcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnJlc2V0QnV0dG9uTGFiZWwgPz8gJ1Jlc2V0J1wiXG4gICAgICAgICAgICAgIChvbkNsaWNrKT1cImhhbmRsZU9uQ2xpY2tSZXNldEZvcm1GaWVsZHMoJGV2ZW50LCBmaWVsZClcIlxuICAgICAgICAgICAgPjwva3dpa3VpLWJ1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gQnV0dG9uIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInYnV0dG9uJ1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICNmb3JtRmllbGRzUmVmXG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgW3N0eWxlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jb250YWluZXJTdHlsZXMgPz8gJycgfCBzdHlsZVNhbml0aXplclwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGt3aWt1aS1idXR0b25cbiAgICAgICAgICAgICAgW2FwcGVhcmFuY2VdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmFwcGVhcmFuY2UgPz8gJ3ByaW1hcnknXCJcbiAgICAgICAgICAgICAgW2NsYXNzXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jbGFzc1wiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbaWNvbl09XCJmaWVsZD8ucHJvcGVydGllcz8uaWNvblwiXG4gICAgICAgICAgICAgIFtpY29uUmlnaHRdPVwiZmllbGQ/LnByb3BlcnRpZXM/Lmljb25SaWdodFwiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZD8ua2V5XCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkPy5sYWJlbFwiXG4gICAgICAgICAgICAgIFtzaGFwZV09XCJmaWVsZD8ucHJvcGVydGllcz8uc2hhcGVcIlxuICAgICAgICAgICAgICBbc2hvd0xvYWRlcl09XCJmaWVsZD8ucHJvcGVydGllcz8ubG9hZGluZyA/PyBmYWxzZVwiXG4gICAgICAgICAgICAgIFtzaXplXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5zaXplXCJcbiAgICAgICAgICAgICAgW3N0eWxlc109XCJmaWVsZD8ucHJvcGVydGllcz8uc3R5bGVzXCJcbiAgICAgICAgICAgICAgW3R5cGVdPVwiJ2J1dHRvbidcIlxuICAgICAgICAgICAgICAob25DbGljayk9XCJoYW5kbGVPbkNsaWNrRm9ybUZpZWxkQnV0dG9uKGZpZWxkKVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktYnV0dG9uPlxuICAgICAgICAgICAgPGt3aWt1aS1tZXNzYWdlc1xuICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiZmllbGQubWVzc2FnZXNcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgID48L2t3aWt1aS1tZXNzYWdlcz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gSW5wdXQgVGV4dCAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3RleHQnXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgI2Zvcm1GaWVsZHNSZWZcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICBbc3R5bGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNvbnRhaW5lclN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXCJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8a3dpa3VpLWlucHV0XG4gICAgICAgICAgICAgIFtjYXNlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jYXNlXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtmb2N1c109XCJmaWVsZD8uZm9jdXNcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV1cIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaW52YWxpZF09XCJmaWVsZD8uaW52YWxpZFwiXG4gICAgICAgICAgICAgIFtpc1Nob3dMYWJlbE91dHNpZGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmlzU2hvd0xhYmVsT3V0c2lkZVwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZD8ubGFiZWxcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgW3Bvc3RmaXhdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBvc3RmaXhcIlxuICAgICAgICAgICAgICBbcHJlZml4XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wcmVmaXhcIlxuICAgICAgICAgICAgICBbcHJvcGVydGllc109XCJmaWVsZD8ucHJvcGVydGllc1wiXG4gICAgICAgICAgICAgIFt0eXBlXT1cIid0ZXh0J1wiXG4gICAgICAgICAgICAgIFt2YWxpZGF0b3JzXT1cImZpZWxkPy52YWxpZGF0b3JzXCJcbiAgICAgICAgICAgICAgKGdldEtleVZhbHVlKT1cImhhbmRsZUdldEtleVZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgPjwva3dpa3VpLWlucHV0PlxuICAgICAgICAgICAgPGt3aWt1aS1tZXNzYWdlc1xuICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiZmllbGQubWVzc2FnZXNcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgID48L2t3aWt1aS1tZXNzYWdlcz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gSW5wdXQgQ3VycmVuY3kgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidjdXJyZW5jeSdcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAjZm9ybUZpZWxkc1JlZlxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJmaWVsZD8ucHJvcGVydGllcz8uY29udGFpbmVyU3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcIlxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxrd2lrdWktaW5wdXQtY3VycmVuY3lcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtmb2N1c109XCJmaWVsZD8uZm9jdXNcIlxuICAgICAgICAgICAgICBbY3VycmVuY3lUeXBlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jdXJyZW5jeVR5cGVcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmllbGQ/LmludmFsaWRcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/LmxhYmVsXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgIFtwb3N0Zml4XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wb3N0Zml4XCJcbiAgICAgICAgICAgICAgW3ByZWZpeF09XCJmaWVsZD8ucHJvcGVydGllcz8ucHJlZml4XCJcbiAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxuICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJmaWVsZD8udmFsaWRhdG9yc1wiXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJmb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS52YWx1ZVwiXG4gICAgICAgICAgICAgIChnZXRLZXlWYWx1ZSk9XCJoYW5kbGVHZXRLZXlWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1pbnB1dC1jdXJyZW5jeT5cbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIEVtYWlsIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZW1haWwnXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgI2Zvcm1GaWVsZHNSZWZcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICBbc3R5bGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNvbnRhaW5lclN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXCJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8a3dpa3VpLWlucHV0LWVtYWlsXG4gICAgICAgICAgICAgIFtjYXNlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jYXNlXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtkb21haW5zXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5kb21haW5zXCJcbiAgICAgICAgICAgICAgW2ZvY3VzXT1cImZpZWxkPy5mb2N1c1wiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XVwiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpbnZhbGlkXT1cImZpZWxkPy5pbnZhbGlkXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkPy5sYWJlbFwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJmaWVsZD8ucHJvcGVydGllcz8ucGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICBbcG9zdGZpeF09XCJmaWVsZD8ucHJvcGVydGllcz8ucG9zdGZpeFwiXG4gICAgICAgICAgICAgIFtwcmVmaXhdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnByZWZpeFwiXG4gICAgICAgICAgICAgIFtwcm9wZXJ0aWVzXT1cImZpZWxkPy5wcm9wZXJ0aWVzXCJcbiAgICAgICAgICAgICAgW3ZhbGlkYXRvcnNdPVwiZmllbGQ/LnZhbGlkYXRvcnNcIlxuICAgICAgICAgICAgICAoZ2V0S2V5VmFsdWUpPVwiaGFuZGxlR2V0S2V5VmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktaW5wdXQtZW1haWw+XG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSBQYXNzd29yZCAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3Bhc3N3b3JkJ1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICNmb3JtRmllbGRzUmVmXG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgW3N0eWxlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jb250YWluZXJTdHlsZXMgPz8gJycgfCBzdHlsZVNhbml0aXplclwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGt3aWt1aS1pbnB1dC1wYXNzd29yZFxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQ/LmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgW2ZvY3VzXT1cImZpZWxkPy5mb2N1c1wiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XVwiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2hpbnRDb250ZW50XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5oaW50Q29udGVudFwiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaW52YWxpZF09XCJmaWVsZD8uaW52YWxpZFwiXG4gICAgICAgICAgICAgIFtpc1Nob3dMYWJlbE91dHNpZGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmlzU2hvd0xhYmVsT3V0c2lkZVwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZD8ubGFiZWxcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgW3Bvc3RmaXhdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBvc3RmaXhcIlxuICAgICAgICAgICAgICBbcHJlZml4XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wcmVmaXhcIlxuICAgICAgICAgICAgICBbcHJvcGVydGllc109XCJmaWVsZD8ucHJvcGVydGllc1wiXG4gICAgICAgICAgICAgIFt2YWxpZGF0b3JzXT1cImZpZWxkPy52YWxpZGF0b3JzXCJcbiAgICAgICAgICAgICAgKGdldEtleVZhbHVlKT1cImhhbmRsZUdldEtleVZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgPjwva3dpa3VpLWlucHV0LXBhc3N3b3JkPlxuICAgICAgICAgICAgPGt3aWt1aS1tZXNzYWdlc1xuICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiZmllbGQubWVzc2FnZXNcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgID48L2t3aWt1aS1tZXNzYWdlcz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gVGV4dGFyZWEgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid0ZXh0YXJlYSdcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAjZm9ybUZpZWxkc1JlZlxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJmaWVsZD8ucHJvcGVydGllcz8uY29udGFpbmVyU3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcIlxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxrd2lrdWktdGV4dGFyZWFcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtmb2N1c109XCJmaWVsZD8uZm9jdXNcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV1cIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaW52YWxpZF09XCJmaWVsZD8uaW52YWxpZFwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZD8ubGFiZWxcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxuICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJmaWVsZD8udmFsaWRhdG9yc1wiXG4gICAgICAgICAgICAgIChnZXRLZXlWYWx1ZSk9XCJoYW5kbGVHZXRLZXlWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2t3aWt1aS10ZXh0YXJlYT5cbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIENoZWNrYm94IC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInY2hlY2tib3gnXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgI2Zvcm1GaWVsZHNSZWZcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICBbc3R5bGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNvbnRhaW5lclN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXCJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8a3dpa3VpLWNoZWNrYm94XG4gICAgICAgICAgICAgIFtjb250ZW50QWxpZ25dPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNvbnRlbnRBbGlnbiA/PyAnbGVmdCdcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQ/LmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgW2ZvY3VzXT1cImZpZWxkPy5mb2N1c1wiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XVwiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpbnZhbGlkXT1cImZpZWxkPy5pbnZhbGlkXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJmaWVsZD8ucHJvcGVydGllcz8ucGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICBbcHJvcGVydGllc109XCJmaWVsZD8ucHJvcGVydGllc1wiXG4gICAgICAgICAgICAgIFtzaXplXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5zaXplID8/ICdsJ1wiXG4gICAgICAgICAgICAgIFt2YWxpZGF0b3JzXT1cImZpZWxkPy52YWxpZGF0b3JzXCJcbiAgICAgICAgICAgICAgW3ZhcmlhbnRdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnZhcmlhbnQgPz8gJ2Jsb2NrJ1wiXG4gICAgICAgICAgICAgIChnZXRLZXlWYWx1ZSk9XCJoYW5kbGVHZXRLZXlWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1jaGVja2JveD5cbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIElucHV0IE51bWJlciAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ251bWJlcidcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAjZm9ybUZpZWxkc1JlZlxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJmaWVsZD8ucHJvcGVydGllcz8uY29udGFpbmVyU3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcIlxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxrd2lrdWktaW5wdXQtbnVtYmVyXG4gICAgICAgICAgICAgIFtkZWNpbWFsXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5kZWNpbWFsXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtmb2N1c109XCJmaWVsZD8uZm9jdXNcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV1cIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaW52YWxpZF09XCJmaWVsZD8uaW52YWxpZFwiXG4gICAgICAgICAgICAgIFtpc1Nob3dMYWJlbE91dHNpZGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmlzU2hvd0xhYmVsT3V0c2lkZVwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZD8ubGFiZWxcIlxuICAgICAgICAgICAgICBbbWF4XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5tYXhcIlxuICAgICAgICAgICAgICBbbWluXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5taW5cIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgW3Bvc3RmaXhdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBvc3RmaXggPz8gJydcIlxuICAgICAgICAgICAgICBbcHJlY2lzaW9uXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wcmVjaXNpb25cIlxuICAgICAgICAgICAgICBbcHJlZml4XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wcmVmaXggPz8gJydcIlxuICAgICAgICAgICAgICBbcHJvcGVydGllc109XCJmaWVsZD8ucHJvcGVydGllc1wiXG4gICAgICAgICAgICAgIFt2YWxpZGF0b3JzXT1cImZpZWxkPy52YWxpZGF0b3JzXCJcbiAgICAgICAgICAgICAgKGdldEtleVZhbHVlKT1cImhhbmRsZUdldEtleVZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgPjwva3dpa3VpLWlucHV0LW51bWJlcj5cbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIElucHV0IERhdGUgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidkYXRlJ1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICNmb3JtRmllbGRzUmVmXG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgW3N0eWxlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jb250YWluZXJTdHlsZXMgPz8gJycgfCBzdHlsZVNhbml0aXplclwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGt3aWt1aS1pbnB1dC1kYXRlXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmllbGQ/LmZvY3VzXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmllbGQ/LmludmFsaWRcIlxuICAgICAgICAgICAgICBbaXNTaG93TGFiZWxPdXRzaWRlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5pc1Nob3dMYWJlbE91dHNpZGVcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/LmxhYmVsXCJcbiAgICAgICAgICAgICAgW21heF09XCJmaWVsZD8ucHJvcGVydGllcz8ubWF4XCJcbiAgICAgICAgICAgICAgW21heENhbGN1bGF0ZWRGcm9tVG9kYXldPVwiXG4gICAgICAgICAgICAgICAgZmllbGQ/LnByb3BlcnRpZXM/Lm1heENhbGN1bGF0ZWRGcm9tVG9kYXlcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW21pbl09XCJmaWVsZD8ucHJvcGVydGllcz8ubWluXCJcbiAgICAgICAgICAgICAgW21pbkNhbGN1bGF0ZWRGcm9tVG9kYXldPVwiXG4gICAgICAgICAgICAgICAgZmllbGQ/LnByb3BlcnRpZXM/Lm1pbkNhbGN1bGF0ZWRGcm9tVG9kYXlcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgIFtwb3N0Zml4XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wb3N0Zml4XCJcbiAgICAgICAgICAgICAgW3ByZWZpeF09XCJmaWVsZD8ucHJvcGVydGllcz8ucHJlZml4XCJcbiAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxuICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJmaWVsZD8udmFsaWRhdG9yc1wiXG4gICAgICAgICAgICAgIChnZXRLZXlWYWx1ZSk9XCJoYW5kbGVHZXRLZXlWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1pbnB1dC1kYXRlPlxuICAgICAgICAgICAgPGt3aWt1aS1tZXNzYWdlc1xuICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiZmllbGQubWVzc2FnZXNcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgID48L2t3aWt1aS1tZXNzYWdlcz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gSW5wdXQgVGltZSAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3RpbWUnXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgI2Zvcm1GaWVsZHNSZWZcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICBbc3R5bGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNvbnRhaW5lclN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXCJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8a3dpa3VpLWlucHV0LXRpbWVcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtmb2N1c109XCJmaWVsZD8uZm9jdXNcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV1cIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaW52YWxpZF09XCJmaWVsZD8uaW52YWxpZFwiXG4gICAgICAgICAgICAgIFtpc1Nob3dMYWJlbE91dHNpZGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmlzU2hvd0xhYmVsT3V0c2lkZVwiXG4gICAgICAgICAgICAgIFtpdGVtc109XCJmaWVsZD8ucHJvcGVydGllcz8uaXRlbXNcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/LmxhYmVsXCJcbiAgICAgICAgICAgICAgW21vZGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/Lm1vZGVcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgW3Bvc3RmaXhdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBvc3RmaXhcIlxuICAgICAgICAgICAgICBbcHJlZml4XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wcmVmaXhcIlxuICAgICAgICAgICAgICBbcHJvcGVydGllc109XCJmaWVsZD8ucHJvcGVydGllc1wiXG4gICAgICAgICAgICAgIFt2YWxpZGF0b3JzXT1cImZpZWxkPy52YWxpZGF0b3JzXCJcbiAgICAgICAgICAgICAgKGdldEtleVZhbHVlKT1cImhhbmRsZUdldEtleVZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgPjwva3dpa3VpLWlucHV0LXRpbWU+XG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSBJbnB1dCBQaG9uZSAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3Bob25lJ1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICNmb3JtRmllbGRzUmVmXG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgW3N0eWxlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jb250YWluZXJTdHlsZXMgPz8gJycgfCBzdHlsZVNhbml0aXplclwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGt3aWt1aS1pbnB1dC1waG9uZVxuICAgICAgICAgICAgICBbY291bnRyeUNvZGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNvdW50cnlDb2RlXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtpc1Nob3dMYWJlbE91dHNpZGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmlzU2hvd0xhYmVsT3V0c2lkZVwiXG4gICAgICAgICAgICAgIFtmb2N1c109XCJmaWVsZD8uZm9jdXNcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV1cIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaW52YWxpZF09XCJmaWVsZD8uaW52YWxpZFwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZD8ubGFiZWxcIlxuICAgICAgICAgICAgICBbcGhvbmVNYXNrQWZ0ZXJDb3VudHJ5Q29kZV09XCJcbiAgICAgICAgICAgICAgICBmaWVsZD8ucHJvcGVydGllcz8ucGhvbmVNYXNrQWZ0ZXJDb3VudHJ5Q29kZVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgW3Bvc3RmaXhdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBvc3RmaXhcIlxuICAgICAgICAgICAgICBbcHJlZml4XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wcmVmaXhcIlxuICAgICAgICAgICAgICBbcHJvcGVydGllc109XCJmaWVsZD8ucHJvcGVydGllc1wiXG4gICAgICAgICAgICAgIFtyZW1vdmVDb3VudHJ5Q29kZUZyb21WYWx1ZV09XCJcbiAgICAgICAgICAgICAgICBmaWVsZD8ucHJvcGVydGllcz8ucmVtb3ZlQ291bnRyeUNvZGVGcm9tVmFsdWVcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW3ZhbGlkYXRvcnNdPVwiZmllbGQ/LnZhbGlkYXRvcnNcIlxuICAgICAgICAgICAgICAoZ2V0S2V5VmFsdWUpPVwiaGFuZGxlR2V0S2V5VmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktaW5wdXQtcGhvbmU+XG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSBJbnB1dCBSYWRpbyAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3JhZGlvJ1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICNmb3JtRmllbGRzUmVmXG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgW3N0eWxlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jb250YWluZXJTdHlsZXMgPz8gJycgfCBzdHlsZVNhbml0aXplclwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgIFt0dWlMYWJlbF09XCJsYWJlbFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgc3R5bGU9XCJtaW4taGVpZ2h0OiBhdXRvOyBwYWRkaW5nOiAwcHggMC41cmVtXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGt3aWt1aS1pbnB1dC1yYWRpb1xuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIFtmb2N1c109XCJmaWVsZD8uZm9jdXNcIlxuICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XVwiXG4gICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICAgIFtpbnZhbGlkXT1cImZpZWxkPy5pbnZhbGlkXCJcbiAgICAgICAgICAgICAgICBbaXRlbXNdPVwiZmllbGQ/Lm9wdGlvbnNcIlxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZD8ubGFiZWxcIlxuICAgICAgICAgICAgICAgIFtvcmllbnRhdGlvbl09XCJmaWVsZD8ucHJvcGVydGllcz8ub3JpZW50YXRpb25cIlxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJmaWVsZD8ucHJvcGVydGllcz8ucGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgIFtwcm9wZXJ0aWVzXT1cImZpZWxkPy5wcm9wZXJ0aWVzXCJcbiAgICAgICAgICAgICAgICBbc2l6ZV09XCJmaWVsZD8ucHJvcGVydGllcz8uc2l6ZVwiXG4gICAgICAgICAgICAgICAgW3ZhbGlkYXRvcnNdPVwiZmllbGQ/LnZhbGlkYXRvcnNcIlxuICAgICAgICAgICAgICAgIChnZXRLZXlWYWx1ZSk9XCJoYW5kbGVHZXRLZXlWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgPjwva3dpa3VpLWlucHV0LXJhZGlvPlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbGFiZWxUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPHBcbiAgICAgICAgICAgICAgICBjbGFzcz1cInR1aS1zcGFjZV9ib3R0b20tMlwiXG4gICAgICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8Yj5cbiAgICAgICAgICAgICAgICAgIHt7IGZpZWxkLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZpZWxkLnZhbGlkYXRvcnM/LnJlcXVpcmVkXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2I+XG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSBEcm9wZG93biAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3NlbGVjdCdcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAjZm9ybUZpZWxkc1JlZlxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJmaWVsZD8ucHJvcGVydGllcz8uY29udGFpbmVyU3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcIlxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxrd2lrdWktaW5wdXQtc2VsZWN0XG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmllbGQ/LmZvY3VzXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmllbGQ/LmludmFsaWRcIlxuICAgICAgICAgICAgICBbaXNTaG93TGFiZWxPdXRzaWRlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5pc1Nob3dMYWJlbE91dHNpZGVcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/LmxhYmVsXCJcbiAgICAgICAgICAgICAgW29wdGlvbnNdPVwiZmllbGQub3B0aW9uc1wiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJmaWVsZD8ucHJvcGVydGllcz8ucGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICBbcHJvcGVydGllc109XCJmaWVsZD8ucHJvcGVydGllc1wiXG4gICAgICAgICAgICAgIFtzZWFyY2hhYmxlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5zZWFyY2hhYmxlXCJcbiAgICAgICAgICAgICAgW3ZhbGlkYXRvcnNdPVwiZmllbGQ/LnZhbGlkYXRvcnNcIlxuICAgICAgICAgICAgICAoZ2V0S2V5VmFsdWUpPVwiaGFuZGxlR2V0S2V5VmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktaW5wdXQtc2VsZWN0PlxuICAgICAgICAgICAgPGt3aWt1aS1tZXNzYWdlc1xuICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiZmllbGQubWVzc2FnZXNcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgID48L2t3aWt1aS1tZXNzYWdlcz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gSW5wdXQgU2xpZGVyIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInc2xpZGVyJ1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICNmb3JtRmllbGRzUmVmXG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgW3N0eWxlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jb250YWluZXJTdHlsZXMgPz8gJycgfCBzdHlsZVNhbml0aXplclwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGt3aWt1aS1pbnB1dC1zbGlkZXJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtmb2N1c109XCJmaWVsZD8uZm9jdXNcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV1cIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaW52YWxpZF09XCJmaWVsZD8uaW52YWxpZFwiXG4gICAgICAgICAgICAgIFtpc1Nob3dMYWJlbE91dHNpZGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmlzU2hvd0xhYmVsT3V0c2lkZVwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZD8ubGFiZWxcIlxuICAgICAgICAgICAgICBbbWF4XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5tYXhcIlxuICAgICAgICAgICAgICBbbWluXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5taW5cIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgW3Bvc3RmaXhdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBvc3RmaXhcIlxuICAgICAgICAgICAgICBbcHJlZml4XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wcmVmaXhcIlxuICAgICAgICAgICAgICBbcHJvcGVydGllc109XCJmaWVsZD8ucHJvcGVydGllc1wiXG4gICAgICAgICAgICAgIFtxdWFudHVtXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5xdWFudHVtXCJcbiAgICAgICAgICAgICAgW3NpemVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnNpemVcIlxuICAgICAgICAgICAgICBbc3RlcHNdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnN0ZXBzXCJcbiAgICAgICAgICAgICAgW3ZhbGlkYXRvcnNdPVwiZmllbGQ/LnZhbGlkYXRvcnNcIlxuICAgICAgICAgICAgICAoZ2V0S2V5VmFsdWUpPVwiaGFuZGxlR2V0S2V5VmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktaW5wdXQtc2xpZGVyPlxuICAgICAgICAgICAgPGt3aWt1aS1tZXNzYWdlc1xuICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiZmllbGQubWVzc2FnZXNcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgID48L2t3aWt1aS1tZXNzYWdlcz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gQVBJIENhbGwgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidhcGknXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgI2Zvcm1GaWVsZHNSZWZcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICBbc3R5bGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNvbnRhaW5lclN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXCJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8a3dpa3VpLWJ1dHRvbi1hcGktY2FsbFxuICAgICAgICAgICAgICBbYXBpU3RhdHVzXT1cImZpZWxkPy5hcGk/LnN0YXR1cz8udmFsdWVcIlxuICAgICAgICAgICAgICBbYXBpVGltZXJdPVwiZmllbGQ/LmFwaT8udGltZXJcIlxuICAgICAgICAgICAgICBbY2xhc3NdPVwiZmllbGQ/LmNsYXNzXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/LmFwaT8uc3RhdHVzPy5sYWJlbHNbZmllbGQ/LmFwaT8uc3RhdHVzPy52YWx1ZV1cIlxuICAgICAgICAgICAgICBbc2hvd0xvYWRlcl09XCJmaWVsZD8uZGlzYWJsZWQgPT09ICdsb2FkaW5nJ1wiXG4gICAgICAgICAgICAgIFtzaXplXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5zaXplXCJcbiAgICAgICAgICAgICAgW3N0eWxlc109XCJcbiAgICAgICAgICAgICAgICBmaWVsZD8ucHJvcGVydGllcz8uc3R5bGVzXG4gICAgICAgICAgICAgICAgICA/IGZpZWxkPy5wcm9wZXJ0aWVzPy5zdHlsZXNcbiAgICAgICAgICAgICAgICAgIDogJ3dpZHRoOiBmaXQtY29udGVudCdcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgKG9uQ2xpY2spPVwiaGFuZGxlT25DbGlja0FwaUNhbGwoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChvbkFwaVRpbWVyU3RvcCk9XCJoYW5kbGVPbkFwaVRpbWVyU3RvcCgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1idXR0b24tYXBpLWNhbGw+XG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSBMaXZlIExvY2F0aW9uIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInbGl2ZS1sb2NhdGlvbidcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAjZm9ybUZpZWxkc1JlZlxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJmaWVsZD8ucHJvcGVydGllcz8uY29udGFpbmVyU3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcIlxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxrd2lrdWktYnV0dG9uLWxpdmUtbG9jYXRpb25cbiAgICAgICAgICAgICAgW2NsYXNzXT1cImZpZWxkPy5jbGFzc1wiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkPy5hcGk/LnN0YXR1cz8ubGFiZWxzW2ZpZWxkPy5hcGk/LnN0YXR1cz8udmFsdWVdXCJcbiAgICAgICAgICAgICAgW2xpdmVMb2NhdGlvblN0YXR1c109XCJmaWVsZD8uYXBpPy5zdGF0dXM/LnZhbHVlXCJcbiAgICAgICAgICAgICAgW3NoYXBlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5zaGFwZVwiXG4gICAgICAgICAgICAgIFtpc1Nob3dMYXRMb25nQ2FwdHVyZVRpbWVzdGFtcF09XCJcbiAgICAgICAgICAgICAgICBmaWVsZD8ucHJvcGVydGllcz8uaXNTaG93TGF0TG9uZ0NhcHR1cmVUaW1lc3RhbXBcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW3Nob3dMb2FkZXJdPVwiZmllbGQ/LmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgW3NpemVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnNpemVcIlxuICAgICAgICAgICAgICBzdHlsZXM9XCJ3aWR0aDogZml0LWNvbnRlbnRcIlxuICAgICAgICAgICAgICAob25DbGljayk9XCJoYW5kbGVPbkNsaWNrTGl2ZUxvY2F0aW9uKCRldmVudClcIlxuICAgICAgICAgICAgICAob25Mb2NhdGlvblBlcm1pc3Npb24pPVwiaGFuZGxlT25Mb2NhdGlvblBlcm1pc3Npb24oJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktYnV0dG9uLWxpdmUtbG9jYXRpb24+XG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSBNb2JpbGUgT1RQIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInb3RwJ1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICNmb3JtRmllbGRzUmVmXG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgW3N0eWxlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jb250YWluZXJTdHlsZXMgPz8gJycgfCBzdHlsZVNhbml0aXplclwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGt3aWt1aS1pbnB1dC1vdHBcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtmb2N1c109XCJmaWVsZD8uZm9jdXNcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV1cIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaW52YWxpZF09XCJmaWVsZD8uaW52YWxpZFwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZD8ubGFiZWxcIlxuICAgICAgICAgICAgICBbbWFza109XCJmaWVsZD8ucHJvcGVydGllcz8ubWFza1wiXG4gICAgICAgICAgICAgIFttb2RlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5tb2RlXCJcbiAgICAgICAgICAgICAgW290cExlbmd0aF09XCJmaWVsZD8ucHJvcGVydGllcz8ub3RwTGVuZ3RoXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgIFtwcm9wZXJ0aWVzXT1cImZpZWxkPy5wcm9wZXJ0aWVzXCJcbiAgICAgICAgICAgICAgW3NpemVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnNpemVcIlxuICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJmaWVsZD8udmFsaWRhdG9yc1wiXG4gICAgICAgICAgICAgIChnZXRLZXlWYWx1ZSk9XCJoYW5kbGVHZXRLZXlWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1pbnB1dC1vdHA+XG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSBBYWRoYWFyIE51bWJlciAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2FhZGhhYXItbnVtYmVyJ1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICNmb3JtRmllbGRzUmVmXG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgW3N0eWxlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jb250YWluZXJTdHlsZXMgPz8gJycgfCBzdHlsZVNhbml0aXplclwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGt3aWt1aS1pbnB1dC1hYWRoYWFyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmllbGQ/LmZvY3VzXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmllbGQ/LmludmFsaWRcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/LmxhYmVsXCJcbiAgICAgICAgICAgICAgW21hc2tdPVwiZmllbGQ/LnByb3BlcnRpZXM/Lm1hc2tcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmllbGQ/LnBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxuICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJmaWVsZD8udmFsaWRhdG9yc1wiXG4gICAgICAgICAgICAgIChnZXRLZXlWYWx1ZSk9XCJoYW5kbGVHZXRLZXlWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1pbnB1dC1hYWRoYWFyPlxuICAgICAgICAgICAgPGt3aWt1aS1tZXNzYWdlc1xuICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiZmllbGQubWVzc2FnZXNcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgID48L2t3aWt1aS1tZXNzYWdlcz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gUHJldmlldyBJbWFnZSAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2ltYWdlJ1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICNmb3JtRmllbGRzUmVmXG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgW3N0eWxlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jb250YWluZXJTdHlsZXMgPz8gJycgfCBzdHlsZVNhbml0aXplclwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGt3aWt1aS1pbWFnZVxuICAgICAgICAgICAgICBbYWx0VGV4dF09XCJmaWVsZD8ucHJvcGVydGllcz8uYWx0VGV4dFwiXG4gICAgICAgICAgICAgIFtjbGFzc109XCJmaWVsZD8ucHJvcGVydGllcz8uY2xhc3NcIlxuICAgICAgICAgICAgICBbaHRtbF09XCJmaWVsZD8ucHJvcGVydGllcz8uaHRtbFwiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaW1hZ2VTcmNdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0udmFsdWUgPz8gJydcIlxuICAgICAgICAgICAgICBbaW1hZ2VUeXBlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5pbWFnZVR5cGVcIlxuICAgICAgICAgICAgICBbbG9hZGluZ1R5cGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmxvYWRpbmdUeXBlXCJcbiAgICAgICAgICAgICAgW3N0eWxlc109XCJmaWVsZD8ucHJvcGVydGllcz8uc3R5bGVzXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1pbWFnZT5cbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIEZpbGUgVXBsb2FkIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZmlsZSdcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAjZm9ybUZpZWxkc1JlZlxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJmaWVsZD8ucHJvcGVydGllcz8uY29udGFpbmVyU3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcIlxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICBbdHVpTGFiZWxdPVwibGFiZWxUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgIHN0eWxlPVwibWluLWhlaWdodDogYXV0b1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxrd2lrdWktaW5wdXQtZmlsZXNcbiAgICAgICAgICAgICAgICBbYWNjZXB0XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5hY2NlcHRcIlxuICAgICAgICAgICAgICAgIFtjbGFzc109XCJmaWVsZD8ucHJvcGVydGllcz8uY2xhc3NcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIFtmaWxlc109XCJmaWxlc1tmaWVsZC5rZXldXCJcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV1cIlxuICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgICBbaWRdPVwiZmllbGQ/LmtleVwiXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5sYWJlbFwiXG4gICAgICAgICAgICAgICAgW2xpbmtdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmxpbmtcIlxuICAgICAgICAgICAgICAgIFttYXhGaWxlU2l6ZV09XCJmaWVsZD8ucHJvcGVydGllcz8ubWF4RmlsZVNpemVcIlxuICAgICAgICAgICAgICAgIFttdWx0aXBsZV09XCJmaWVsZD8ucHJvcGVydGllcz8ubXVsdGlwbGVcIlxuICAgICAgICAgICAgICAgIFtzZXRGaWxlVHlwZXNUb0Zvcm1dPVwiWydOT1JNQUwnXVwiXG4gICAgICAgICAgICAgICAgW3N0eWxlc109XCJmaWVsZD8ucHJvcGVydGllcz8uc3R5bGVzXCJcbiAgICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJmaWVsZD8udmFsaWRhdG9yc1wiXG4gICAgICAgICAgICAgICAgW3Nob3dWaWV3QnV0dG9uXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5zaG93Vmlld0J1dHRvblwiXG4gICAgICAgICAgICAgICAgKGdldEtleVZhbHVlKT1cImhhbmRsZUdldEtleVZhbHVlRmlsZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoZ2V0UmVtb3ZlZEZpbGUpPVwiaGFuZGxlUmVtb3ZlZEZpbGUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGdldFZpZXdCdXR0b25DbGljayk9XCJoYW5kbGVWaWV3QnV0dG9uQ2xpY2soJGV2ZW50LCBmaWVsZClcIlxuICAgICAgICAgICAgICA+PC9rd2lrdWktaW5wdXQtZmlsZXM+XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNsYWJlbFRlbXBsYXRlPlxuICAgICAgICAgICAgICA8cFxuICAgICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZzogMHB4IDAuMjVyZW07IG1hcmdpbi1ib3R0b206IDAuMjVyZW1cIlxuICAgICAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGI+XG4gICAgICAgICAgICAgICAgICB7eyBmaWVsZC5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmaWVsZC52YWxpZGF0b3JzPy5yZXF1aXJlZFwiPio8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9iPlxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPGt3aWt1aS1tZXNzYWdlc1xuICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiZmllbGQubWVzc2FnZXNcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgID48L2t3aWt1aS1tZXNzYWdlcz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gQ2FtZXJhIENhcHR1cmUgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidjYXB0dXJlJ1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICNmb3JtRmllbGRzUmVmXG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgW3N0eWxlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jb250YWluZXJTdHlsZXMgPz8gJycgfCBzdHlsZVNhbml0aXplclwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgZmllbGQ/LmxhYmVsICE9PSAnJyAmJlxuICAgICAgICAgICAgICAgIGZpZWxkPy5sYWJlbCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgZmllbGQ/LmxhYmVsICE9PSBudWxsXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIHN0eWxlPVwibWluLWhlaWdodDogYXV0b1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxwXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJmaWVsZD8ubGFiZWwgIT09ICcnXCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmc6IDBweCAwLjI1cmVtOyBtYXJnaW4tYm90dG9tOiAwLjVyZW1cIlxuICAgICAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGI+XG4gICAgICAgICAgICAgICAgICB7eyBmaWVsZC5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmaWVsZC52YWxpZGF0b3JzPy5yZXF1aXJlZFwiPio8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9iPlxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPGt3aWt1aS1pbnB1dC1jYW1lcmFcbiAgICAgICAgICAgICAgW2J1dHRvblRleHRdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmJ1dHRvblRleHRcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQ/LmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgW2ZvY3VzXT1cImZpZWxkPy5mb2N1c1wiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XVwiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2ljb25dPVwiZmllbGQ/LnByb3BlcnRpZXM/Lmljb25cIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmllbGQ/LmludmFsaWRcIlxuICAgICAgICAgICAgICBbbWVkaWFGaWxlc109XCJcbiAgICAgICAgICAgICAgICBtZWRpYUZpbGVzW2ZpZWxkLmtleV0gfCBmaWx0ZXJJbWFnZVVybE9yQmFzZTY0RnJvbU9iamVjdFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbcHJvcGVydGllc109XCJmaWVsZD8ucHJvcGVydGllc1wiXG4gICAgICAgICAgICAgIFtzaG93TWVkaWFGaWxlc109XCJmaWVsZD8ucHJvcGVydGllcz8uc2hvd01lZGlhRmlsZXNcIlxuICAgICAgICAgICAgICBbdHlwZV09XCInY2FwdHVyZSdcIlxuICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJmaWVsZD8udmFsaWRhdG9yc1wiXG4gICAgICAgICAgICAgIChvbkNsaWNrKT1cImhhbmRsZU9uQ2xpY2tJbnB1dENhbWVyYSgkZXZlbnQsIGZpZWxkKVwiXG4gICAgICAgICAgICAgIChnZXRSZW1vdmVkRmlsZSk9XCJoYW5kbGVPbkNsaWNrR2V0UmVtb3ZlZE1lZGlhRmlsZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1pbnB1dC1jYW1lcmE+XG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSBDYW1lcmEgUmVjb3JkIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIncmVjb3JkJ1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICNmb3JtRmllbGRzUmVmXG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgW3N0eWxlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jb250YWluZXJTdHlsZXMgPz8gJycgfCBzdHlsZVNhbml0aXplclwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgZmllbGQ/LmxhYmVsICE9PSAnJyAmJlxuICAgICAgICAgICAgICAgIGZpZWxkPy5sYWJlbCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgZmllbGQ/LmxhYmVsICE9PSBudWxsXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIHN0eWxlPVwibWluLWhlaWdodDogYXV0b1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxwXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJmaWVsZD8ubGFiZWwgIT09ICcnXCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmc6IDBweCAwLjI1cmVtOyBtYXJnaW4tYm90dG9tOiAwLjVyZW1cIlxuICAgICAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGI+XG4gICAgICAgICAgICAgICAgICB7eyBmaWVsZC5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmaWVsZC52YWxpZGF0b3JzPy5yZXF1aXJlZFwiPio8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9iPlxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPGt3aWt1aS1pbnB1dC1jYW1lcmFcbiAgICAgICAgICAgICAgW2J1dHRvblRleHRdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmJ1dHRvblRleHRcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQ/LmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgW2ZvY3VzXT1cImZpZWxkPy5mb2N1c1wiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XVwiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2ljb25dPVwiZmllbGQ/LnByb3BlcnRpZXM/Lmljb25cIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmllbGQ/LmludmFsaWRcIlxuICAgICAgICAgICAgICBbbWVkaWFGaWxlc109XCJcbiAgICAgICAgICAgICAgICBtZWRpYUZpbGVzW2ZpZWxkLmtleV0gfCBmaWx0ZXJWaWRlb1VybE9yQmFzZTY0RnJvbU9iamVjdFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbcHJvcGVydGllc109XCJmaWVsZD8ucHJvcGVydGllc1wiXG4gICAgICAgICAgICAgIFtzaG93TWVkaWFGaWxlc109XCJmaWVsZD8ucHJvcGVydGllcz8uc2hvd01lZGlhRmlsZXNcIlxuICAgICAgICAgICAgICBbdHlwZV09XCIncmVjb3JkJ1wiXG4gICAgICAgICAgICAgIFt2YWxpZGF0b3JzXT1cImZpZWxkPy52YWxpZGF0b3JzXCJcbiAgICAgICAgICAgICAgKG9uQ2xpY2spPVwiaGFuZGxlT25DbGlja0lucHV0Q2FtZXJhKCRldmVudCwgZmllbGQpXCJcbiAgICAgICAgICAgICAgKGdldFJlbW92ZWRGaWxlKT1cImhhbmRsZU9uQ2xpY2tHZXRSZW1vdmVkTWVkaWFGaWxlKCRldmVudClcIlxuICAgICAgICAgICAgPjwva3dpa3VpLWlucHV0LWNhbWVyYT5cbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIFN0YXIgUmF0aW5nIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInc3Rhci1yYXRpbmcnXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgI2Zvcm1GaWVsZHNSZWZcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICBbc3R5bGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNvbnRhaW5lclN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXCJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgW3R1aUxhYmVsXT1cImxhYmVsVGVtcGxhdGVcIlxuICAgICAgICAgICAgICBzdHlsZT1cIm1pbi1oZWlnaHQ6IGF1dG87IHBhZGRpbmc6IDBweCAwLjVyZW1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8a3dpa3VpLXN0YXItcmF0aW5nXG4gICAgICAgICAgICAgICAgW2NvbG9yXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jb2xvclwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgW2ZvY3VzXT1cImZpZWxkPy5mb2N1c1wiXG4gICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldXCJcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgICAgW2ljb25dPVwiZmllbGQ/LnByb3BlcnRpZXM/Lmljb25cIlxuICAgICAgICAgICAgICAgIFtpY29uTWFya2VkXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5pY29uTWFya2VkXCJcbiAgICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgICBbaW52YWxpZF09XCJmaWVsZD8uaW52YWxpZFwiXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkPy5sYWJlbFwiXG4gICAgICAgICAgICAgICAgW21heF09XCJmaWVsZD8ucHJvcGVydGllcz8ubWF4XCJcbiAgICAgICAgICAgICAgICBbbWluXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5taW5cIlxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJmaWVsZD8ucHJvcGVydGllcz8ucGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgIFtwcm9wZXJ0aWVzXT1cImZpZWxkPy5wcm9wZXJ0aWVzXCJcbiAgICAgICAgICAgICAgICBbc2l6ZV09XCJmaWVsZD8ucHJvcGVydGllcz8uc2l6ZVwiXG4gICAgICAgICAgICAgICAgW3ZhbGlkYXRvcnNdPVwiZmllbGQ/LnZhbGlkYXRvcnNcIlxuICAgICAgICAgICAgICAgIChnZXRLZXlWYWx1ZSk9XCJoYW5kbGVHZXRLZXlWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgPjwva3dpa3VpLXN0YXItcmF0aW5nPlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbGFiZWxUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgICAgPGJcbiAgICAgICAgICAgICAgICAgID57eyBmaWVsZD8ucHJvcGVydGllcz8ucGxhY2Vob2xkZXIgfX1cbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZmllbGQudmFsaWRhdG9ycz8ucmVxdWlyZWRcIj4qPC9zcGFuPjwvYlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZm9ybT5cbiAgPGRpdlxuICAgIGNsYXNzPVwia3dpa2lkLWZvcm0tYnV0dG9uc1wiXG4gICAgKm5nSWY9XCJcbiAgICAgICFmb3JtQ29uZmlnLnByb3BlcnRpZXMuZm9vdGVyLnZpZXdGb3Jtc0J1dHRvbi5oaWRkZW4gfHxcbiAgICAgICFmb3JtQ29uZmlnLnByb3BlcnRpZXMuZm9vdGVyLnNhdmVCdXR0b24uaGlkZGVuXG4gICAgXCJcbiAgPlxuICAgIDxrd2lrdWktYnV0dG9uXG4gICAgICAqbmdJZj1cIlxuICAgICAgICAhZm9ybUNvbmZpZy5wcm9wZXJ0aWVzLmZvb3Rlci52aWV3Rm9ybXNCdXR0b24uaGlkZGVuICYmIGlzTW9iaWxlVmlld1xuICAgICAgXCJcbiAgICAgIFthcHBlYXJhbmNlXT1cIidzZWNvbmRhcnknXCJcbiAgICAgIFtkaXNhYmxlZF09XCJ2aWV3Rm9ybXNCdXR0b24uZGlzYWJsZWRcIlxuICAgICAgW2xhYmVsXT1cImZvcm1Db25maWcucHJvcGVydGllcy5mb290ZXIudmlld0Zvcm1zQnV0dG9uLmxhYmVsXCJcbiAgICAgIFtzaG93TG9hZGVyXT1cInZpZXdGb3Jtc0J1dHRvbi5zaG93TG9hZGVyXCJcbiAgICAgIFtzdHlsZXNdPVwiZm9ybUNvbmZpZy5wcm9wZXJ0aWVzLmZvb3Rlci52aWV3Rm9ybXNCdXR0b24uc3R5bGVzXCJcbiAgICAgIChvbkNsaWNrKT1cImhhbmRsZU9uQ2xpY2tWaWV3Rm9ybXMoJGV2ZW50KVwiXG4gICAgPjwva3dpa3VpLWJ1dHRvbj5cbiAgICA8a3dpa3VpLWJ1dHRvblxuICAgICAgKm5nSWY9XCIhZm9ybUNvbmZpZy5wcm9wZXJ0aWVzLmZvb3Rlci5zYXZlQnV0dG9uLmhpZGRlblwiXG4gICAgICBbZGlzYWJsZWRdPVwic2F2ZUZvcm1CdXR0b24uZGlzYWJsZWRcIlxuICAgICAgW2xhYmVsXT1cImZvcm1Db25maWcucHJvcGVydGllcy5mb290ZXIuc2F2ZUJ1dHRvbi5sYWJlbFwiXG4gICAgICBbc2hvd0xvYWRlcl09XCJzYXZlRm9ybUJ1dHRvbi5zaG93TG9hZGVyXCJcbiAgICAgIFtzdHlsZXNdPVwiZm9ybUNvbmZpZy5wcm9wZXJ0aWVzLmZvb3Rlci5zYXZlQnV0dG9uLnN0eWxlc1wiXG4gICAgICAob25DbGljayk9XCJoYW5kbGVPbkNsaWNrU2F2ZUZvcm0oJGV2ZW50KVwiXG4gICAgPjwva3dpa3VpLWJ1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbjxkaXZcbiAgY2xhc3M9XCJrd2lraWQtZm9ybS1jb250YWluZXItbG9hZGluZ1wiXG4gICpuZ0lmPVwibG9hZGluZ1wiXG4+XG4gIDxkaXZcbiAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBbXS5jb25zdHJ1Y3Rvcig3KTsgbGV0IGkgPSBpbmRleFwiXG4gICAgY2xhc3M9XCJsYXJnZS13cmFwcGVyIHR1aS1za2VsZXRvbiB0dWktc2tlbGV0b25fcm91bmRlZFwiXG4gID5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPGt3aWt1aS1sb2FkZXI+PC9rd2lrdWktbG9hZGVyPlxuXG48dHVpLXB1c2hcbiAgaWQ9XCJmaWVsZC1lcnJvci1ub3RpZmljYXRpb25cIlxuICAqdHVpUHVzaD1cInNob3dFcnJvck5vdGlmaWNhdGlvblwiXG4gIGhlYWRpbmc9XCJNaXNzaW5nL0luY29ycmVjdCBGaWVsZHMhXCJcbiAgdHlwZT1cIkVycm9yXCJcbiAgKGNsb3NlKT1cInRvZ2dsZUVycm9yTm90aWZpY2F0aW9uKGZhbHNlKVwiXG4+XG4gIDx0dWktc3ZnXG4gICAgc3JjPVwidHVpSWNvblhDaXJjbGVcIlxuICAgIHN0eWxlPVwiY29sb3I6ICNmZmYgIWltcG9ydGFudFwiXG4gID5cbiAgPC90dWktc3ZnPlxuPC90dWktcHVzaD5cblxuPHR1aS1wdXNoXG4gIGlkPVwicGVybWlzc2lvbi1lcnJvci1ub3RpZmljYXRpb25cIlxuICAqdHVpUHVzaD1cInNob3dQZXJtaXNzaW9uRXJyb3JOb3RpZmljYXRpb25cIlxuICBoZWFkaW5nPVwiUGxlYXNlIHByb3ZpZGUgcmVxdWlyZWQgcGVybWlzc2lvbnMhXCJcbiAgdHlwZT1cIkVycm9yXCJcbiAgKGNsb3NlKT1cInRvZ2dsZVBlcm1pc3Npb25FcnJvck5vdGlmaWNhdGlvbihmYWxzZSlcIlxuPlxuICA8dHVpLXN2Z1xuICAgIHNyYz1cInR1aUljb25YQ2lyY2xlXCJcbiAgICBzdHlsZT1cImNvbG9yOiAjZmZmICFpbXBvcnRhbnRcIlxuICA+XG4gIDwvdHVpLXN2Zz5cbjwvdHVpLXB1c2g+XG5cbjxuZy10ZW1wbGF0ZVxuICAjcHJldmlld1xuICBsZXQtcHJldmlld1xuPlxuICA8dHVpLXByZXZpZXdcbiAgICBbcm90YXRhYmxlXT1cImZhbHNlXCJcbiAgICBbem9vbWFibGVdPVwiZmFsc2VcIlxuICAgIGNsYXNzPVwicHJldmlldy1jb250YWluZXJcIlxuICA+XG4gICAgPHR1aS1wcmV2aWV3LXRpdGxlICpuZ0lmPVwicHJldmlld1Byb3BlcnRpZXMudGl0bGUgIT09ICcnXCI+e3tcbiAgICAgIHByZXZpZXdQcm9wZXJ0aWVzLnRpdGxlXG4gICAgfX08L3R1aS1wcmV2aWV3LXRpdGxlPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFwcmV2aWV3UHJvcGVydGllcy51bmF2YWlsYWJsZVwiPlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cInByZXZpZXdQcm9wZXJ0aWVzPy5odG1sPy5iZWZvcmUgIT09ICcnXCJcbiAgICAgICAgY2xhc3M9XCJwcmV2aWV3LWh0bWwgcHJldmlldy1odG1sLWJlZm9yZVwiXG4gICAgICAgIFtzdHlsZV09XCJwcmV2aWV3UHJvcGVydGllcz8uaHRtbD8uYmVmb3JlU3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcIlxuICAgICAgICBbaW5uZXJIdG1sXT1cInByZXZpZXdQcm9wZXJ0aWVzLmh0bWwuYmVmb3JlIHwga3dpa3VpU2FmZUh0bWxcIlxuICAgICAgPjwvZGl2PlxuXG4gICAgICA8IS0tIENvbnRlbnQgd2l0aGluIHRoZSBpZnJhbWUgLS0+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwicHJldmlldy1pZnJhbWUtY29udGVudFwiXG4gICAgICAgIFtzdHlsZV09XCJcbiAgICAgICAgICBwcmV2aWV3UHJvcGVydGllcz8uaWZyYW1lPy5jb250YWluZXJTdHlsZXMgPz8gJycgfCBzdHlsZVNhbml0aXplclxuICAgICAgICBcIlxuICAgICAgICAqbmdJZj1cInByZXZpZXdQcm9wZXJ0aWVzLmlmcmFtZS5zcmMgIT09ICcnXCJcbiAgICAgID5cbiAgICAgICAgPCEtLSBZb3VyIEhUTUwgY29udGVudCBoZXJlIC0tPlxuICAgICAgICA8aWZyYW1lXG4gICAgICAgICAgW3NyY109XCJwcmV2aWV3UHJvcGVydGllcy5pZnJhbWUuc3JjIHwga3dpa3VpU2FmZVVybFwiXG4gICAgICAgICAgZnJhbWVib3JkZXI9XCIwXCJcbiAgICAgICAgICBhbGxvdz1cImFjY2VsZXJvbWV0ZXI7IGF1dG9wbGF5OyBlbmNyeXB0ZWQtbWVkaWE7IGd5cm9zY29wZTsgcGljdHVyZS1pbi1waWN0dXJlXCJcbiAgICAgICAgICBhbGxvd2Z1bGxzY3JlZW5cbiAgICAgICAgICBbdGl0bGVdPVwicHJldmlld1Byb3BlcnRpZXMuaWZyYW1lLnRpdGxlXCJcbiAgICAgICAgICBjbGFzcz1cInByZXZpZXctaWZyYW1lXCJcbiAgICAgICAgICBzY3JvbGxpbmc9XCJhdXRvXCJcbiAgICAgICAgPjwvaWZyYW1lPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJwcmV2aWV3UHJvcGVydGllcz8uaHRtbD8uYWZ0ZXIgIT09ICcnXCJcbiAgICAgICAgY2xhc3M9XCJwcmV2aWV3LWh0bWwgcHJldmlldy1odG1sLWFmdGVyXCJcbiAgICAgICAgW3N0eWxlXT1cInByZXZpZXdQcm9wZXJ0aWVzPy5odG1sPy5hZnRlclN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXCJcbiAgICAgICAgW2lubmVySHRtbF09XCJwcmV2aWV3UHJvcGVydGllcy5odG1sLmFmdGVyIHwga3dpa3VpU2FmZUh0bWxcIlxuICAgICAgPjwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInByZXZpZXdQcm9wZXJ0aWVzLnVuYXZhaWxhYmxlXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicHJldmlldy11bmF2YWlsYWJsZVwiPlxuICAgICAgICA8dHVpLXN2Z1xuICAgICAgICAgIHNyYz1cInR1aUljb25GaWxlTGFyZ2VcIlxuICAgICAgICAgIGNsYXNzPVwidC1pY29uXCJcbiAgICAgICAgPjwvdHVpLXN2Zz5cbiAgICAgICAgPGRpdj5QcmV2aWV3IHVuYXZhaWxhYmxlPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxidXR0b25cbiAgICAgIHR1aUljb25CdXR0b25cbiAgICAgIHR1aVByZXZpZXdBY3Rpb25cbiAgICAgIGljb249XCJ0dWlJY29uQ2xvc2VMYXJnZVwiXG4gICAgICB0aXRsZT1cIkNsb3NlXCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgKGNsaWNrKT1cInByZXZpZXcuY29tcGxldGUoKVwiXG4gICAgPjwvYnV0dG9uPlxuICA8L3R1aS1wcmV2aWV3PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlXG4gICNkaWFsb2dcbiAgbGV0LWRpYWxvZ1xuPlxuICA8ZGl2IGNsYXNzPVwicHJldmlldy1jb250YWluZXJcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXByZXZpZXdQcm9wZXJ0aWVzLnVuYXZhaWxhYmxlXCI+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwicHJldmlld1Byb3BlcnRpZXM/Lmh0bWw/LmJlZm9yZSAhPT0gJydcIlxuICAgICAgICBjbGFzcz1cInByZXZpZXctaHRtbCBwcmV2aWV3LWh0bWwtYmVmb3JlXCJcbiAgICAgICAgW3N0eWxlXT1cInByZXZpZXdQcm9wZXJ0aWVzPy5odG1sPy5iZWZvcmVTdHlsZXMgPz8gJycgfCBzdHlsZVNhbml0aXplclwiXG4gICAgICAgIFtpbm5lckh0bWxdPVwicHJldmlld1Byb3BlcnRpZXMuaHRtbC5iZWZvcmUgfCBrd2lrdWlTYWZlSHRtbFwiXG4gICAgICA+PC9kaXY+XG5cbiAgICAgIDwhLS0gQ29udGVudCB3aXRoaW4gdGhlIGlmcmFtZSAtLT5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJwcmV2aWV3LWlmcmFtZS1jb250ZW50XCJcbiAgICAgICAgW3N0eWxlXT1cIlxuICAgICAgICAgIHByZXZpZXdQcm9wZXJ0aWVzPy5pZnJhbWU/LmNvbnRhaW5lclN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXG4gICAgICAgIFwiXG4gICAgICAgICpuZ0lmPVwicHJldmlld1Byb3BlcnRpZXMuaWZyYW1lLnNyYyAhPT0gJydcIlxuICAgICAgPlxuICAgICAgICA8IS0tIFlvdXIgSFRNTCBjb250ZW50IGhlcmUgLS0+XG4gICAgICAgIDxpZnJhbWVcbiAgICAgICAgICBbc3JjXT1cInByZXZpZXdQcm9wZXJ0aWVzLmlmcmFtZS5zcmMgfCBrd2lrdWlTYWZlVXJsXCJcbiAgICAgICAgICBmcmFtZWJvcmRlcj1cIjBcIlxuICAgICAgICAgIGFsbG93PVwiYWNjZWxlcm9tZXRlcjsgYXV0b3BsYXk7IGVuY3J5cHRlZC1tZWRpYTsgZ3lyb3Njb3BlOyBwaWN0dXJlLWluLXBpY3R1cmVcIlxuICAgICAgICAgIGFsbG93ZnVsbHNjcmVlblxuICAgICAgICAgIFt0aXRsZV09XCJwcmV2aWV3UHJvcGVydGllcy5pZnJhbWUudGl0bGVcIlxuICAgICAgICAgIGNsYXNzPVwicHJldmlldy1pZnJhbWVcIlxuICAgICAgICAgIHNjcm9sbGluZz1cImF1dG9cIlxuICAgICAgICA+PC9pZnJhbWU+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cInByZXZpZXdQcm9wZXJ0aWVzPy5odG1sPy5hZnRlciAhPT0gJydcIlxuICAgICAgICBjbGFzcz1cInByZXZpZXctaHRtbCBwcmV2aWV3LWh0bWwtYWZ0ZXJcIlxuICAgICAgICBbc3R5bGVdPVwicHJldmlld1Byb3BlcnRpZXM/Lmh0bWw/LmFmdGVyU3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcIlxuICAgICAgICBbaW5uZXJIdG1sXT1cInByZXZpZXdQcm9wZXJ0aWVzLmh0bWwuYWZ0ZXIgfCBrd2lrdWlTYWZlSHRtbFwiXG4gICAgICA+PC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicHJldmlld1Byb3BlcnRpZXMudW5hdmFpbGFibGVcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwcmV2aWV3LXVuYXZhaWxhYmxlXCI+XG4gICAgICAgIDx0dWktc3ZnXG4gICAgICAgICAgc3JjPVwidHVpSWNvbkZpbGVMYXJnZVwiXG4gICAgICAgICAgY2xhc3M9XCJ0LWljb25cIlxuICAgICAgICA+PC90dWktc3ZnPlxuICAgICAgICA8ZGl2PlByZXZpZXcgdW5hdmFpbGFibGU8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxkaXZcbiAgaWQ9XCJrd2lraWQtY2FtZXJhLWNvbnRhaW5lclwiXG4gICpuZ0lmPVwiaXNTaG93Q2FtZXJhXCJcbj5cbiAgPGRpdlxuICAgIGlkPVwia3dpa2lkLWNhbWVyYS13cmFwcGVyXCJcbiAgICBbY2xhc3MuZnVsbHNjcmVlbl09XCJpc1Nob3dDYW1lcmFGdWxsc2NyZWVuXCJcbiAgPlxuICAgIDxrd2lraWQtY2FtZXJhXG4gICAgICBbdHlwZV09XCJhY3RpdmVDYW1lcmFUeXBlXCJcbiAgICAgIFtkYXRhXT1cImFjdGl2ZUNhbWVyYURhdGFcIlxuICAgICAgW2ltYWdlXT1cImFjdGl2ZUNhbWVyYUltYWdlXCJcbiAgICAgIFt2aWRlb109XCJhY3RpdmVDYW1lcmFWaWRlb1wiXG4gICAgICBbY29uZmlnXT1cImFjdGl2ZUNhbWVyYUNvbmZpZz8uY2FtZXJhQ29uZmlnXCJcbiAgICAgIChnZXRJbWFnZSk9XCJoYW5kbGVHZXRDYW1lcmFNZWRpYSgkZXZlbnQsICdDQVBUVVJFJylcIlxuICAgICAgKGdldFZpZGVvKT1cImhhbmRsZUdldENhbWVyYU1lZGlhKCRldmVudCwgJ1JFQ09SRCcpXCJcbiAgICAgIChvbkNsaWNrQmFjayk9XCJoYW5kbGVPbkNsaWNrQ2FtZXJhQmFjaygkZXZlbnQpXCJcbiAgICAgIChvbkNsaWNrQ2xvc2UpPVwiaGFuZGxlT25DbGlja0NhbWVyYUNsb3NlKCRldmVudClcIlxuICAgICAgKG9uQ2xpY2tTYXZlKT1cImhhbmRsZU9uQ2xpY2tTYXZlQ2FtZXJhTWVkaWEoJGV2ZW50LCBhY3RpdmVDYW1lcmFUeXBlKVwiXG4gICAgPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdJZj1cImFjdGl2ZUNhbWVyYVR5cGUgPT09ICdDQVBUVVJFJ1wiXG4gICAgICAgIHNsb3Q9XCJjYXB0dXJlLWhlYWRlclwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXB0dXJlLWhlYWRlci1jb250YWluZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FwdHVyZS1oZWFkZXItbGVmdFwiPiA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FwdHVyZS1oZWFkZXItY2VudGVyXCI+XG4gICAgICAgICAgICA8a3dpa3VpLWJ1dHRvblxuICAgICAgICAgICAgICAqbmdJZj1cImFjdGl2ZUNhbWVyYUNvbmZpZz8uY2FtZXJhQ29uZmlnPy5oZWFkZXI/LnRpdGxlICE9PSAnJ1wiXG4gICAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJ3aGl0ZWJsb2NrXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cImFjdGl2ZUNhbWVyYUNvbmZpZz8uY2FtZXJhQ29uZmlnPy5oZWFkZXI/LnRpdGxlXCJcbiAgICAgICAgICAgICAgc2hhcGU9XCJyb3VuZGVkXCJcbiAgICAgICAgICAgICAgc2l6ZT1cInNcIlxuICAgICAgICAgICAgPjwva3dpa3VpLWJ1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FwdHVyZS1oZWFkZXItcmlnaHRcIj5cbiAgICAgICAgICAgIDxrd2lrdWktYnV0dG9uXG4gICAgICAgICAgICAgICpuZ0lmPVwiYWN0aXZlQ2FtZXJhQ29uZmlnPy5jYW1lcmFDb25maWc/LmhlYWRlcj8uaXNFeHBhbmRcIlxuICAgICAgICAgICAgICBpZD1cImt3aWtpZC1jYW1lcmEtaGVhZGVyLWVubGFyZ2UtYnV0dG9uXCJcbiAgICAgICAgICAgICAgYXBwZWFyYW5jZT1cIndoaXRlYmxvY2tcIlxuICAgICAgICAgICAgICBbaWNvbl09XCJcbiAgICAgICAgICAgICAgICBpc1Nob3dDYW1lcmFGdWxsc2NyZWVuID8gJ3R1aUljb25NaW5pbWl6ZTInIDogJ3R1aUljb25NYXhpbWl6ZTInXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIHNoYXBlPVwicm91bmRlZFwiXG4gICAgICAgICAgICAgIHNpemU9XCJzXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImlzU2hvd0NhbWVyYUZ1bGxzY3JlZW4gPSAhaXNTaG93Q2FtZXJhRnVsbHNjcmVlblwiXG4gICAgICAgICAgICA+PC9rd2lrdWktYnV0dG9uPlxuICAgICAgICAgICAgPGt3aWt1aS1idXR0b25cbiAgICAgICAgICAgICAgKm5nSWY9XCJhY3RpdmVDYW1lcmFDb25maWc/LmNhbWVyYUNvbmZpZz8uaGVhZGVyPy5pc0Nsb3NlXCJcbiAgICAgICAgICAgICAgaWQ9XCJrd2lraWQtY2FtZXJhLWhlYWRlci1jbG9zZS1idXR0b25cIlxuICAgICAgICAgICAgICBhcHBlYXJhbmNlPVwid2hpdGVibG9ja1wiXG4gICAgICAgICAgICAgIGljb249XCJ0dWlJY29uQ2xvc2VMYXJnZVwiXG4gICAgICAgICAgICAgIHNoYXBlPVwicm91bmRlZFwiXG4gICAgICAgICAgICAgIHNpemU9XCJzXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZU9uQ2xpY2tDYW1lcmFDbG9zZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ0lmPVwiYWN0aXZlQ2FtZXJhVHlwZSA9PT0gJ1JFQ09SRCdcIlxuICAgICAgICBzbG90PVwicmVjb3JkLWhlYWRlclwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyZWNvcmQtaGVhZGVyLWNvbnRhaW5lclwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWNvcmQtaGVhZGVyLXJvdyByb3ctMVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlY29yZC1oZWFkZXItbGVmdFwiPlxuICAgICAgICAgICAgICA8a3dpa3VpLWJ1dHRvblxuICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICBhY3RpdmVDYW1lcmFDb25maWc/LmNhbWVyYUNvbmZpZz8uaGVhZGVyPy5pc0JhY2sgJiZcbiAgICAgICAgICAgICAgICAgIGFjdGl2ZUNhbWVyYVJlY29yZGluZ1N0YXRlID09ICdOT05FJ1xuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgYXBwZWFyYW5jZT1cIndoaXRlYmxvY2tcIlxuICAgICAgICAgICAgICAgIGljb249XCJ0dWlJY29uQXJyb3dMZWZ0XCJcbiAgICAgICAgICAgICAgICBzaGFwZT1cInJvdW5kZWRcIlxuICAgICAgICAgICAgICAgIHNpemU9XCJzXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlT25DbGlja0NhbWVyYUNsb3NlKCRldmVudClcIlxuICAgICAgICAgICAgICA+PC9rd2lrdWktYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVjb3JkLWhlYWRlci1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgPGt3aWt1aS1idXR0b25cbiAgICAgICAgICAgICAgICAqbmdJZj1cImFjdGl2ZUNhbWVyYUNvbmZpZz8uY2FtZXJhQ29uZmlnPy5oZWFkZXI/LnRpdGxlICE9PSAnJ1wiXG4gICAgICAgICAgICAgICAgYXBwZWFyYW5jZT1cIndoaXRlYmxvY2tcIlxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCJhY3RpdmVDYW1lcmFDb25maWc/LmNhbWVyYUNvbmZpZz8uaGVhZGVyPy50aXRsZVwiXG4gICAgICAgICAgICAgICAgc2hhcGU9XCJyb3VuZGVkXCJcbiAgICAgICAgICAgICAgICBzaXplPVwic1wiXG4gICAgICAgICAgICAgID48L2t3aWt1aS1idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWNvcmQtaGVhZGVyLXJpZ2h0XCI+XG4gICAgICAgICAgICAgIDxrd2lrdWktYnV0dG9uXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJhY3RpdmVDYW1lcmFDb25maWc/LmNhbWVyYUNvbmZpZz8uaGVhZGVyPy5pc0V4cGFuZFwiXG4gICAgICAgICAgICAgICAgaWQ9XCJrd2lraWQtY2FtZXJhLWhlYWRlci1lbmxhcmdlLWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgYXBwZWFyYW5jZT1cIndoaXRlYmxvY2tcIlxuICAgICAgICAgICAgICAgIFtpY29uXT1cIlxuICAgICAgICAgICAgICAgICAgaXNTaG93Q2FtZXJhRnVsbHNjcmVlblxuICAgICAgICAgICAgICAgICAgICA/ICd0dWlJY29uTWluaW1pemUyJ1xuICAgICAgICAgICAgICAgICAgICA6ICd0dWlJY29uTWF4aW1pemUyJ1xuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgc2hhcGU9XCJyb3VuZGVkXCJcbiAgICAgICAgICAgICAgICBzaXplPVwic1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImlzU2hvd0NhbWVyYUZ1bGxzY3JlZW4gPSAhaXNTaG93Q2FtZXJhRnVsbHNjcmVlblwiXG4gICAgICAgICAgICAgID48L2t3aWt1aS1idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVjb3JkLWhlYWRlci1yb3cgcm93LTJcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgaWQ9XCJibGlua2luZy1kb3QtY29udGFpbmVyXCJcbiAgICAgICAgICAgICAgW2NsYXNzLnJlY29yZGluZ109XCJhY3RpdmVDYW1lcmFSZWNvcmRpbmdTdGF0ZSA9PSAnUkVDT1JESU5HJ1wiXG4gICAgICAgICAgICAgIFtjbGFzcy5wYXVzZWRdPVwiYWN0aXZlQ2FtZXJhUmVjb3JkaW5nU3RhdGUgPT0gJ1BBVVNFRCdcIlxuICAgICAgICAgICAgICBbY2xhc3MucmVjb3JkZWRdPVwiXG4gICAgICAgICAgICAgICAgYWN0aXZlQ2FtZXJhUmVjb3JkaW5nU3RhdGUgPT0gJ05PTkUnIHx8XG4gICAgICAgICAgICAgICAgYWN0aXZlQ2FtZXJhUmVjb3JkaW5nU3RhdGUgPT09ICdSRUNPUkRFRCdcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiYWN0aXZlQ2FtZXJhUmVjb3JkaW5nU3RhdGUgPT0gJ1JFQ09SRElORydcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZG90IHJlY29yZGluZyBibGlua1wiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAqbmdJZj1cImFjdGl2ZUNhbWVyYVJlY29yZGluZ1N0YXRlID09PSAnUEFVU0VEJ1wiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkb3QgcGF1c2VkXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICBhY3RpdmVDYW1lcmFSZWNvcmRpbmdTdGF0ZSA9PSAnTk9ORScgfHxcbiAgICAgICAgICAgICAgICAgIGFjdGl2ZUNhbWVyYVJlY29yZGluZ1N0YXRlID09PSAnUkVDT1JERUQnXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImRvdCByZWNvcmRlZFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgJm5ic3A7e3sgYWN0aXZlQ2FtZXJhUmVjb3JkaW5nVGltZSB8IGZvcm1hdFRpbWVyIH19XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZlQ2FtZXJhQ29uZmlnPy5jYW1lcmFDb25maWc/Lm90aGVyc1xuICAgICAgICAgICAgICAgICAgICAgID8ubWF4UmVjb3JkaW5nVGltZUluU2Vjb25kc1xuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAvXG4gICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICBhY3RpdmVDYW1lcmFDb25maWc/LmNhbWVyYUNvbmZpZz8ub3RoZXJzXG4gICAgICAgICAgICAgICAgICAgICAgPy5tYXhSZWNvcmRpbmdUaW1lSW5TZWNvbmRzIHwgZm9ybWF0VGltZXJcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9rd2lraWQtY2FtZXJhPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
3541
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2t3aWtpZC1mb3Jtcy9zcmMvbGliL3JlbmRlcmVyL2Zvcm0tdmlldy9mb3JtLXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva3dpa2lkLWZvcm1zL3NyYy9saWIvcmVuZGVyZXIvZm9ybS12aWV3L2Zvcm0tdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsbUNBQW1DO0FBQ25DLHNEQUFzRDtBQUN0RCxPQUFPLEVBRUwsU0FBUyxFQUVULFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUlMLE1BQU0sRUFLTixTQUFTLEVBQ1QsWUFBWSxFQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNsRSxPQUFPLEVBQ0wsZUFBZSxFQUVmLGdCQUFnQixFQUNoQixlQUFlLEVBQ2hCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUvQyxPQUFPLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxVQUFVLEVBQ1YsSUFBSSxFQUNKLFVBQVUsRUFDVixNQUFNLEVBR04sb0JBQW9CLEVBQ3BCLHFCQUFxQixFQUNyQixpQkFBaUIsRUFDakIsc0JBQXNCLEVBQ3RCLGFBQWEsRUFDYixZQUFZLEVBQ1osZ0JBQWdCLEVBQ2hCLGVBQWUsRUFDZixNQUFNLEVBQ04sV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBQ1osZ0JBQWdCLEVBQ2hCLHVCQUF1QixFQUN2QixhQUFhLEVBQ2Isb0JBQW9CLEVBQ3JCLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFFLFFB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c2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cbmltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFJlbmRlcmVyMixcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NoaWxkcmVuXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7IFR1aVByZXZpZXdEaWFsb2dTZXJ2aWNlIH0gZnJvbSBcIkB0YWlnYS11aS9hZGRvbi1wcmV2aWV3XCI7XG5pbXBvcnQge1xuICBUdWlBbGVydFNlcnZpY2UsXG4gIFR1aURpYWxvZ0NvbnRleHQsXG4gIFR1aURpYWxvZ1NlcnZpY2UsXG4gIFR1aU5vdGlmaWNhdGlvblxufSBmcm9tIFwiQHRhaWdhLXVpL2NvcmVcIjtcbmltcG9ydCB7IFR1aVB1c2hTZXJ2aWNlIH0gZnJvbSBcIkB0YWlnYS11aS9raXRcIjtcbmltcG9ydCB7IEt3aWtJRENhbWVyYVJlY29yZFNlcnZpY2UgfSBmcm9tIFwia3dpa2lkLWNhbWVyYVwiO1xuaW1wb3J0IHtcbiAgQWN0aW9uLFxuICBDb25kaXRpb24sXG4gIEVTb3VyY2VLZXksXG4gIFJ1bGUsXG4gIFJ1bGVFbmdpbmUsXG4gIFNvdXJjZSxcbiAgVEFjdGlvbixcbiAgVEVuZ2luZSxcbiAgY2hlY2tPYmplY3RLZXlFeGlzdHMsXG4gIGNoZWNrT2JqZWN0UGF0aEV4aXN0cyxcbiAgZ2V0T2JqZWN0RGVlcENvcHksXG4gIGdldE9iamVjdFZhbHVlRnJvbVBhdGgsXG4gIGlzRW1wdHlTdHJpbmcsXG4gIGlzRW1wdHlWYWx1ZSxcbiAgaXNOb3RFbXB0eVN0cmluZyxcbiAgaXNOb3RFbXB0eVZhbHVlLFxuICBpc051bGwsXG4gIGlzVW5kZWZpbmVkLFxuICBsb2dNZXRob2QsXG4gIG1lcmdlT2JqZWN0cyxcbiAgbWVyZ2VPYmplY3RzRGVlcCxcbiAgcmVtb3ZlS2V5RnJvbU9iamVjdFBhdGgsXG4gIHJlcGxhY2VTdHJpbmcsXG4gIHNldFZhbHVlVG9PYmplY3RQYXRoXG59IGZyb20gXCJrd2lraWQtdG9vbGtpdFwiO1xuaW1wb3J0IHsgS3dpa1VJTG9hZGVyU2VydmljZSB9IGZyb20gXCJrd2lrdWlcIjtcbmltcG9ydCB7IHBhaXJ3aXNlIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tIFwidXVpZFwiO1xuaW1wb3J0IHsgQ29udmVydGVyIH0gZnJvbSBcIi4uL2NvbmZpZy1jb252ZXJ0ZXIvY29uZmlnLWNvbnZlcnRlclwiO1xuaW1wb3J0IHsgRklFTERfUFJPUEVSVElFUyB9IGZyb20gXCIuLi9jb25maWctY29udmVydGVyL2NvbmZpZy1jb252ZXJ0ZXIuY29uc3RhbnRzXCI7XG5pbXBvcnQge1xuICBnZXRMYW5ndWFnZSxcbiAgdXBkYXRlTGFuZ3VhZ2Vcbn0gZnJvbSBcIi4uL2NvbmZpZy1jb252ZXJ0ZXIvY29uZmlnLWNvbnZlcnRlci5oZWxwZXJcIjtcbmltcG9ydCB7IEVGb3Jtc0xpc3RTdGF0dXMgfSBmcm9tIFwiLi4vZm9ybXMtbGlzdC9mb3Jtcy1saXN0LmRlZmluaXRpb25zXCI7XG5pbXBvcnQgeyBFQWN0aW9uS2V5IH0gZnJvbSBcIi4vZGVmaW5pdGlvbnMvZm9ybS12aWV3LmFjdGlvbnMuZGVmaW5pdGlvblwiO1xuaW1wb3J0IHtcbiAgRUFwaVJlcXVlc3RVcmxUeXBlLFxuICBFQXBpU3RhdHVzVHlwZSxcbiAgVEFwaSxcbiAgVEFwaUVuZHBvaW50LFxuICBUQXBpVGltZXJcbn0gZnJvbSBcIi4vZGVmaW5pdGlvbnMvZm9ybS12aWV3LmFwaXMuZGVmaW5pdGlvblwiO1xuaW1wb3J0IHtcbiAgRU1lc3NhZ2VUeXBlLFxuICBURm9ybVZpZXdHb0JhY2tNb2RlLFxuICBUTWVzc2FnZVxufSBmcm9tIFwiLi9kZWZpbml0aW9ucy9mb3JtLXZpZXcuY29tbW9ucy5kZWZpbml0aW9uXCI7XG5pbXBvcnQge1xuICBFRmllbGRUeXBlLFxuICBURmllbGRBcGlDYWxsLFxuICBURmllbGRMaXZlTG9jYXRpb24sXG4gIFRGaWVsZFRpdGxlXG59IGZyb20gXCIuL2RlZmluaXRpb25zL2Zvcm0tdmlldy5maWVsZHMuZGVmaW5pdGlvblwiO1xuaW1wb3J0IHsgRUxvZ0V2ZW50VHlwZSB9IGZyb20gXCIuL2RlZmluaXRpb25zL2Zvcm0tdmlldy5sb2dzLmRlZmluaXRpb25cIjtcbmltcG9ydCB7IEt3aWtJREZvcm1WaWV3QXBpU2VydmljZSB9IGZyb20gXCIuL2Zvcm0tdmlldy5hcGkuc2VydmljZVwiO1xuaW1wb3J0IHsgRk9STV9WSUVXX1RJTUVSUyB9IGZyb20gXCIuL2Zvcm0tdmlldy5jb25zdGFudHNcIjtcbmltcG9ydCB7IEt3aWtJREZvcm1WaWV3U2VydmljZSB9IGZyb20gXCIuL2Zvcm0tdmlldy5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBBcGlzIH0gZnJvbSBcIi4vaGVscGVycy9mb3JtLXZpZXcuYXBpcy5oZWxwZXJcIjtcbmltcG9ydCB7IENhbWVyYUhlbHBlciB9IGZyb20gXCIuL2hlbHBlcnMvZm9ybS12aWV3LmNhbWVyYS5oZWxwZXJcIjtcbmltcG9ydCB7XG4gIGFwcGVuZEZvcm1GaWVsZE1lc3NhZ2UsXG4gIGFwcGVuZEh0bWxNZXNzYWdlLFxuICBjb252ZXJ0Rm9ybUZpZWxkRW1wdHlWYWx1ZVRvS3dpa1VJRm9ybWF0LFxuICBjb252ZXJ0Rm9ybUZpZWxkVmFsdWVUb0t3aWtVSUZvcm1hdCxcbiAgY29udmVydEZvcm1GaWVsZFZhbHVlVG9TdGFuZGFyZEZvcm1hdCxcbiAgZmlsdGVyRHVwbGljYXRlc0ZpbGVzLFxuICBmaWx0ZXJEdXBsaWNhdGVzTWVkaWFGaWxlcyxcbiAgZ2V0Rm9ybUZpZWxkQnlLZXksXG4gIGdldEZvcm1GaWVsZEluZGV4QnlLZXksXG4gIGhpZ2hsaWdodEZvcm1GaWVsZEVycm9yLFxuICByZW1vdmVGb3JtRmllbGRNZXNzYWdlLFxuICBzZXRBcGlUaW1lck1lc3NhZ2UsXG4gIHNob3dGb3JtRmllbGRFcnJvclxufSBmcm9tIFwiLi9oZWxwZXJzL2Zvcm0tdmlldy5maWVsZHMuaGVscGVyXCI7XG5pbXBvcnQge1xuICBhcHBseU11bHRpcGxlQXBpQ2FsbFJlc3BvbnNlc1RvRm9ybURhdGEsXG4gIGNvbGxlY3RNdWx0aXBsZUFwaUNhbGxSZXNwb25zZXMsXG4gIHJlc29sdmVGb3JtRmllbGRWYWx1ZUZvclNhdmUsXG4gIHN5bmNGb3JtRGF0YVByZXNlcnZpbmdBcGlPYmplY3RzXG59IGZyb20gXCIuL2hlbHBlcnMvZm9ybS12aWV3LmZvcm0tZGF0YS5oZWxwZXJcIjtcbmltcG9ydCB7IEZvcm1WYWxpZGF0aW9uIH0gZnJvbSBcIi4vaGVscGVycy9mb3JtLXZpZXcuZm9ybS12YWxpZGF0aW9ucy5oZWxwZXJcIjtcbmltcG9ydCB7IGZvcm1hdEV2ZW50TG9ncyB9IGZyb20gXCIuL2hlbHBlcnMvZm9ybS12aWV3LmxvZ3MuaGVscGVyXCI7XG5pbXBvcnQgeyBUYXNrcyB9IGZyb20gXCIuL2hlbHBlcnMvZm9ybS12aWV3LnRhc2tzLmhlbHBlclwiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwia3dpa2lkLWZvcm0tdmlld1wiLFxuICB0ZW1wbGF0ZVVybDogXCIuL2Zvcm0tdmlldy5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4vZm9ybS12aWV3LmNvbXBvbmVudC5zY3NzXCIsIFwiLi4vc2hhcmVkLnNjc3NcIl0sXG4gIHByb3ZpZGVyczogW0t3aWtJREZvcm1WaWV3U2VydmljZSwgS3dpa0lERm9ybVZpZXdBcGlTZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBLd2lrSURGb3JtVmlld0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBAVmlld0NoaWxkKFwiZm9ybUZpZWxkQ29udGFpbmVyUmVmXCIpIGZvcm1GaWVsZENvbnRhaW5lclJlZjogRWxlbWVudFJlZjtcblxuICBAVmlld0NoaWxkcmVuKFwiZm9ybUZpZWxkc1JlZlwiKSBmb3JtRmllbGRzUmVmOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG5cbiAgQFZpZXdDaGlsZChcImRpYWxvZ1wiKSByZWFkb25seSBkaWFsb2c6IFRlbXBsYXRlUmVmPFR1aURpYWxvZ0NvbnRleHQ8dm9pZD4+O1xuXG4gIEBWaWV3Q2hpbGQoXCJwcmV2aWV3XCIpIHJlYWRvbmx5IHByZXZpZXc6IFRlbXBsYXRlUmVmPFR1aURpYWxvZ0NvbnRleHQ8dm9pZD4+O1xuXG4gIEBJbnB1dCgpIGFsbEZvcm1zRGF0YTogYW55O1xuXG4gIEBJbnB1dCgpIGV4dHJhRGF0YTogYW55O1xuXG4gIEBJbnB1dCgpIGFwaUNhbGxSZXNwb25zZTogYW55O1xuXG4gIEBJbnB1dCgpIGJ1dHRvbkNsaWNrUmVzcG9uc2U6IGFueTtcblxuICBASW5wdXQoKSBmb3JtQ29uZmlnOiBhbnk7XG5cbiAgQElucHV0KCkgZm9ybURhdGE6IGFueTtcblxuICBASW5wdXQoKSBpc01vYmlsZVZpZXcgPSBmYWxzZTtcblxuICBASW5wdXQoKSBwb3B1cEZvcm1DYWxsYmFjazogYW55ID0gdW5kZWZpbmVkO1xuXG4gIEBJbnB1dCgpIHVzZXJDb25maWc6IGFueTtcblxuICBASW5wdXQoKSBzdGVwQ29uZmlnOiBhbnk7XG5cbiAgQElucHV0KCkgcmVkdXhEYXRhOiBhbnkgPSB7fTtcblxuICBAT3V0cHV0KCkgZ2V0TG9nczogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAT3V0cHV0KCkgZ2V0VW5zYXZlZERhdGFTdGF0ZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAT3V0cHV0KCkgb25BY3Rpb25TaG93UG9wdXBGb3JtOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBPdXRwdXQoKSBvbkNsaWNrQXBpQ2FsbDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAT3V0cHV0KCkgb25DbGlja1ZpZXdGaWxlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBPdXRwdXQoKSBvbkNsaWNrRm9ybUZpZWxkQnV0dG9uOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBPdXRwdXQoKSBvbkNsaWNrR29CYWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBPdXRwdXQoKSBvbkNsaWNrU2F2ZUZvcm06IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQE91dHB1dCgpIG9uQ2xpY2tWaWV3Rm9ybXM6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgZmllbGRHcm91cHM6IGFueSA9IHt9O1xuXG4gIGZvcm1GaWVsZHM6IGFueVtdID0gW107XG5cbiAgcHJldmlvdXNGb3JtRGF0YTogYW55ID0ge307XG5cbiAgY2FtZXJhRGF0YTogYW55ID0ge307XG5cbiAgaXNTaG93Q2FtZXJhID0gZmFsc2U7XG5cbiAgaXNTaG93Q2FtZXJhRnVsbHNjcmVlbiA9IGZhbHNlO1xuXG4gIGFjdGl2ZUNhbWVyYUZpZWxkS2V5ID0gXCJcIjtcblxuICBhY3RpdmVDYW1lcmFEYXRhOiBhbnkgPSB7fTtcblxuICBhY3RpdmVDYW1lcmFUeXBlOiBcIkNBUFRVUkVcIiB8IFwiUkVDT1JEXCIgPSB1bmRlZmluZWQ7XG5cbiAgYWN0aXZlQ2FtZXJhSW1hZ2UgPSBcIlwiO1xuXG4gIGFjdGl2ZUNhbWVyYVZpZGVvID0gXCJcIjtcblxuICBhY3RpdmVDYW1lcmFDb25maWc6IGFueSA9IHVuZGVmaW5lZDtcblxuICBhY3RpdmVDYW1lcmFSZWNvcmRpbmdUaW1lID0gMDtcblxuICBhY3RpdmVDYW1lcmFSZWNvcmRpbmdUaW1lclN1YmNyaXB0aW9uOiBhbnkgPSB1bmRlZmluZWQ7XG5cbiAgYWN0aXZlQ2FtZXJhUmVjb3JkaW5nU3RhdGUgPSBcIk5PTkVcIjtcblxuICBhY3RpdmVDYW1lcmFSZWNvcmRpbmdTdGF0ZVN1YmNyaXB0aW9uOiBhbnkgPSB1bmRlZmluZWQ7XG5cbiAgQGxvZ01ldGhvZFxuICByZXNldENhbWVyYSgpOiB2b2lkIHtcbiAgICB0aGlzLmlzU2hvd0NhbWVyYSA9IGZhbHNlO1xuICAgIHRoaXMuaXNTaG93Q2FtZXJhRnVsbHNjcmVlbiA9IGZhbHNlO1xuICAgIHRoaXMuYWN0aXZlQ2FtZXJhRmllbGRLZXkgPSBcIlwiO1xuICAgIHRoaXMuYWN0aXZlQ2FtZXJhRGF0YSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmFjdGl2ZUNhbWVyYVR5cGUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5hY3RpdmVDYW1lcmFJbWFnZSA9IFwiXCI7XG4gICAgdGhpcy5hY3RpdmVDYW1lcmFWaWRlbyA9IFwiXCI7XG4gICAgdGhpcy5hY3RpdmVDYW1lcmFDb25maWcgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5hY3RpdmVDYW1lcmFSZWNvcmRpbmdUaW1lID0gMDtcbiAgICB0aGlzLmFjdGl2ZUNhbWVyYVJlY29yZGluZ1N0YXRlID0gXCJOT05FXCI7XG4gIH1cblxuICBwcmV2aWV3UHJvcGVydGllczogYW55ID0ge1xuICAgIGh0bWw6IHtcbiAgICAgIGJlZm9yZTogXCJcIixcbiAgICAgIGJlZm9yZVN0eWxlczogXCJcIixcbiAgICAgIGFmdGVyOiBcIlwiLFxuICAgICAgYWZ0ZXJTdHlsZXM6IFwiXCJcbiAgICB9LFxuICAgIGlmcmFtZToge1xuICAgICAgc3JjOiBcIlwiLFxuICAgICAgdGl0bGU6IFwiXCJcbiAgICB9LFxuICAgIHR5cGU6IFwiZGlhbG9nXCIsXG4gICAgc2l6ZTogXCJhdXRvXCIsXG4gICAgcG9wdXBGb3JtS2V5OiBcIlwiLFxuICAgIHRpdGxlOiBcIlwiLFxuICAgIHVuYXZhaWxhYmxlOiBmYWxzZVxuICB9O1xuXG4gIGxvYWRpbmcgPSB0cnVlO1xuXG4gIGFwaUxvYWRpbmcgPSBmYWxzZTtcblxuICBiYWNrQnV0dG9uID0ge1xuICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICBzaG93TG9hZGVyOiBmYWxzZVxuICB9O1xuXG4gIHZpZXdGb3Jtc0J1dHRvbiA9IHtcbiAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgc2hvd0xvYWRlcjogZmFsc2VcbiAgfTtcblxuICBzYXZlRm9ybUJ1dHRvbiA9IHtcbiAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgc2hvd0xvYWRlcjogZmFsc2VcbiAgfTtcblxuICBmaWxlczogYW55ID0ge307XG5cbiAgbWVkaWFGaWxlczogYW55ID0ge307XG5cbiAgc3RvcFRhc2tFeGVjdXRpb24gPSBmYWxzZTtcblxuICB3YWl0aW5nRm9yQ2hhbmdlcyA9IGZhbHNlO1xuXG4gIHBvcHVwRm9ybUNvbmZpZzogYW55ID0gdW5kZWZpbmVkO1xuXG4gIHBvcHVwRm9ybURhdGE6IGFueSA9IHt9O1xuXG4gIHRhc2tEYXRhOiBhbnkgPSB7fTtcblxuICBwcmV2aWV3RGlhbG9nUmVmOiBhbnk7XG5cbiAgZm9ybUdyb3VwOiBGb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGZvcm1WaWV3U2VydmljZTogS3dpa0lERm9ybVZpZXdTZXJ2aWNlLFxuICAgIHByaXZhdGUgZm9ybVZpZXdBcGlTZXJ2aWNlOiBLd2lrSURGb3JtVmlld0FwaVNlcnZpY2UsXG4gICAgQEluamVjdChUdWlQdXNoU2VydmljZSlcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgcHVzaFNlcnZpY2U6IFR1aVB1c2hTZXJ2aWNlLFxuICAgIEBJbmplY3QoVHVpQWxlcnRTZXJ2aWNlKVxuICAgIHByb3RlY3RlZCByZWFkb25seSBhbGVydFNlcnZpY2U6IFR1aUFsZXJ0U2VydmljZSxcbiAgICBASW5qZWN0KFR1aVByZXZpZXdEaWFsb2dTZXJ2aWNlKVxuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJldmlld0RpYWxvZ1NlcnZpY2U6IFR1aVByZXZpZXdEaWFsb2dTZXJ2aWNlLFxuICAgIEBJbmplY3QoVHVpRGlhbG9nU2VydmljZSlcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRpYWxvZ1NlcnZpY2U6IFR1aURpYWxvZ1NlcnZpY2UsXG4gICAgcHVibGljIGxvYWRlclNlcnZpY2U6IEt3aWtVSUxvYWRlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjYW1lcmFSZWNvcmRTZXJ2aWNlOiBLd2lrSURDYW1lcmFSZWNvcmRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjJcbiAgKSB7fVxuXG4gIEBsb2dNZXRob2RcbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5yZWR1eERhdGEgPSB0aGlzLnJlZHV4RGF0YSA/PyB7fTtcbiAgICB0aGlzLnN5bmNBcGlTdG9yYWdlQ29udGV4dCgpO1xuXG4gICAgKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuaW5pdEZvcm1Db25maWcodGhpcy5mb3JtQ29uZmlnKTtcblxuICAgICAgaWYgKHJlcykge1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLmFjdGl2ZUNhbWVyYVJlY29yZGluZ1RpbWVyU3ViY3JpcHRpb24gPSB0aGlzLmNhbWVyYVJlY29yZFNlcnZpY2VcbiAgICAgICAgICAuZ2V0VGltZXJVcGRhdGUoKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKHRpbWU6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVDYW1lcmFSZWNvcmRpbmdUaW1lID0gdGltZTtcbiAgICAgICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hY3RpdmVDYW1lcmFSZWNvcmRpbmdTdGF0ZVN1YmNyaXB0aW9uID0gdGhpcy5jYW1lcmFSZWNvcmRTZXJ2aWNlXG4gICAgICAgICAgLmdldFJlY29yZGluZ1N0YXRlKClcbiAgICAgICAgICAuc3Vic2NyaWJlKChzdGF0ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUNhbWVyYVJlY29yZGluZ1N0YXRlID0gc3RhdGU7XG4gICAgICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSkoKTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGNvbnN0IHZlcmlmeUNoYW5nZSA9IChrZXk6IHN0cmluZykgPT4ge1xuICAgICAgcmV0dXJuIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGNoYW5nZXMsIGtleSkgJiYgIWNoYW5nZXNba2V5XS5maXJzdENoYW5nZTtcbiAgICB9O1xuICAgIGlmICh2ZXJpZnlDaGFuZ2UoXCJleHRyYURhdGFcIikpIHtcbiAgICAgIHRoaXMuZXh0cmFEYXRhID0gY2hhbmdlcy5leHRyYURhdGEuY3VycmVudFZhbHVlO1xuICAgIH1cbiAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoY2hhbmdlcywgXCJ1c2VyQ29uZmlnXCIpKSB7XG4gICAgICB0aGlzLnVzZXJDb25maWcgPSBjaGFuZ2VzLnVzZXJDb25maWcuY3VycmVudFZhbHVlO1xuICAgICAgdGhpcy5zeW5jQXBpU3RvcmFnZUNvbnRleHQoKTtcbiAgICB9XG4gICAgaWYgKHZlcmlmeUNoYW5nZShcInN0ZXBDb25maWdcIikpIHtcbiAgICAgIHRoaXMuc3RlcENvbmZpZyA9IGNoYW5nZXMuc3RlcENvbmZpZy5jdXJyZW50VmFsdWU7XG4gICAgfVxuICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhjaGFuZ2VzLCBcInJlZHV4RGF0YVwiKSkge1xuICAgICAgdGhpcy5yZWR1eERhdGEgPSBjaGFuZ2VzLnJlZHV4RGF0YS5jdXJyZW50VmFsdWUgPz8ge307XG4gICAgICB0aGlzLnN5bmNBcGlTdG9yYWdlQ29udGV4dCgpO1xuICAgIH1cbiAgICBpZiAodmVyaWZ5Q2hhbmdlKFwiZm9ybURhdGFcIikpIHtcbiAgICAgIGlmIChcbiAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoY2hhbmdlcy5mb3JtRGF0YS5jdXJyZW50VmFsdWUsIFwiZGF0YVwiKSAmJlxuICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyhjaGFuZ2VzLmZvcm1EYXRhLmN1cnJlbnRWYWx1ZSwgXCJleHRlbmRlZERhdGFcIilcbiAgICAgICkge1xuICAgICAgICB0aGlzLmZvcm1EYXRhID0ge1xuICAgICAgICAgIC4uLnRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgLi4uY2hhbmdlcy5mb3JtRGF0YS5jdXJyZW50VmFsdWUuZGF0YVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5mb3JtRGF0YSA9IHtcbiAgICAgICAgICAuLi50aGlzLmZvcm1EYXRhLFxuICAgICAgICAgIC4uLmNoYW5nZXMuZm9ybURhdGEuY3VycmVudFZhbHVlXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh2ZXJpZnlDaGFuZ2UoXCJwb3B1cEZvcm1DYWxsYmFja1wiKSkge1xuICAgICAgaWYgKGlzTm90RW1wdHlWYWx1ZShjaGFuZ2VzLnBvcHVwRm9ybUNhbGxiYWNrLmN1cnJlbnRWYWx1ZSkpIHtcbiAgICAgICAgY29uc3QgcG9wdXBGb3JtRGF0YSA9XG4gICAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoXG4gICAgICAgICAgICBjaGFuZ2VzLnBvcHVwRm9ybUNhbGxiYWNrLmN1cnJlbnRWYWx1ZS5wb3B1cEZvcm1EYXRhLFxuICAgICAgICAgICAgXCJkYXRhXCJcbiAgICAgICAgICApICYmXG4gICAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoXG4gICAgICAgICAgICBjaGFuZ2VzLnBvcHVwRm9ybUNhbGxiYWNrLmN1cnJlbnRWYWx1ZS5wb3B1cEZvcm1EYXRhLFxuICAgICAgICAgICAgXCJleHRlbmRlZERhdGFcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgID8gY2hhbmdlcy5wb3B1cEZvcm1DYWxsYmFjay5jdXJyZW50VmFsdWUucG9wdXBGb3JtRGF0YS5kYXRhXG4gICAgICAgICAgICA6IGNoYW5nZXMucG9wdXBGb3JtQ2FsbGJhY2suY3VycmVudFZhbHVlLnBvcHVwRm9ybURhdGE7XG5cbiAgICAgICAgY29uc3QgeyBwb3B1cEZvcm1Db25maWcgfSA9IGNoYW5nZXMucG9wdXBGb3JtQ2FsbGJhY2suY3VycmVudFZhbHVlO1xuXG4gICAgICAgIHRoaXMucG9wdXBGb3JtRGF0YSA9IG1lcmdlT2JqZWN0cyh0aGlzLnBvcHVwRm9ybURhdGEsIHtcbiAgICAgICAgICBbcG9wdXBGb3JtQ29uZmlnLmtleV06IHBvcHVwRm9ybURhdGFcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5mb3JtRGF0YSA9IG1lcmdlT2JqZWN0cyh0aGlzLmZvcm1EYXRhLCB0aGlzLnBvcHVwRm9ybURhdGEpO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyhcbiAgICAgICAgICAgIGNoYW5nZXMucG9wdXBGb3JtQ2FsbGJhY2suY3VycmVudFZhbHVlLFxuICAgICAgICAgICAgXCJzdG9wVGFza0V4ZWN1dGlvblwiXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnN0b3BUYXNrRXhlY3V0aW9uID1cbiAgICAgICAgICAgIGNoYW5nZXMucG9wdXBGb3JtQ2FsbGJhY2suY3VycmVudFZhbHVlLnN0b3BUYXNrRXhlY3V0aW9uO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc3RvcFRhc2tFeGVjdXRpb24gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLndhaXRpbmdGb3JDaGFuZ2VzID0gZmFsc2U7XG4gICAgfVxuICAgIGlmICh2ZXJpZnlDaGFuZ2UoXCJpc01vYmlsZVZpZXdcIikpIHtcbiAgICAgIHRoaXMuaXNNb2JpbGVWaWV3ID0gY2hhbmdlcy5pc01vYmlsZVZpZXcuY3VycmVudFZhbHVlO1xuICAgIH1cbiAgICBpZiAodmVyaWZ5Q2hhbmdlKFwiYXBpQ2FsbFJlc3BvbnNlXCIpKSB7XG4gICAgICB0aGlzLmFwaUNhbGxSZXNwb25zZSA9IGNoYW5nZXMuYXBpQ2FsbFJlc3BvbnNlLmN1cnJlbnRWYWx1ZTtcblxuICAgICAgY29uc3QgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleShcbiAgICAgICAgdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICB0aGlzLmFwaUNhbGxSZXNwb25zZS5rZXlcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gdGhpcy5hcGlDYWxsUmVzcG9uc2U/LnJlc3BvbnNlO1xuXG4gICAgICBzd2l0Y2ggKGZpZWxkLnR5cGUpIHtcbiAgICAgICAgY2FzZSBFRmllbGRUeXBlLkZJTEU6XG4gICAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICBjb25zdCB1cGRhdGVkRmlsZSA9IGdldE9iamVjdERlZXBDb3B5KHtcbiAgICAgICAgICAgICAgaWQ6IHV1aWR2NCgpLFxuICAgICAgICAgICAgICAuLi5yZXNwb25zZVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19BUElfUkVTUE9OU0VfVVBMT0FEX0ZJTEUsIHtcbiAgICAgICAgICAgICAgYXBpX2tleTogdGhpcy5hcGlDYWxsUmVzcG9uc2Uua2V5LFxuICAgICAgICAgICAgICBmaWVsZF9rZXk6IHRoaXMuYXBpQ2FsbFJlc3BvbnNlLmtleSxcbiAgICAgICAgICAgICAgcmVzcG9uc2VfdHlwZTogXCJGSUxFX1VQTE9BRF9BUElfU1VDQ0VTU1wiLFxuICAgICAgICAgICAgICByZXNwb25zZVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMudXBkYXRlRmlsZXModXBkYXRlZEZpbGUsIFwiTk9STUFMXCIsIHRoaXMuYXBpQ2FsbFJlc3BvbnNlLmtleSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRGaWxlID0gZ2V0T2JqZWN0RGVlcENvcHkoe1xuICAgICAgICAgICAgICBpZDogdXVpZHY0KCksXG4gICAgICAgICAgICAgIC4uLnRoaXMuYXBpQ2FsbFJlc3BvbnNlPy5wYXlsb2FkPy5tZXRhZGF0YVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19BUElfUkVTUE9OU0VfVVBMT0FEX0ZJTEUsIHtcbiAgICAgICAgICAgICAgYXBpX2tleTogdGhpcy5hcGlDYWxsUmVzcG9uc2Uua2V5LFxuICAgICAgICAgICAgICBmaWVsZF9rZXk6IHRoaXMuYXBpQ2FsbFJlc3BvbnNlLmtleSxcbiAgICAgICAgICAgICAgcmVzcG9uc2VfdHlwZTogXCJGSUxFX1VQTE9BRF9BUElfRVJST1JcIlxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMudXBkYXRlRmlsZXModXBkYXRlZEZpbGUsIFwiRVJST1JcIiwgdGhpcy5hcGlDYWxsUmVzcG9uc2Uua2V5KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmhpZGVBcGlMb2FkZXIoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFRmllbGRUeXBlLkNBUFRVUkU6XG4gICAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0Q2FtZXJhKCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGltYWdlID0gcmVzcG9uc2U/LmltYWdlX3VybDtcbiAgICAgICAgICAgIGNvbnN0IGltYWdlT2NyID0gcmVzcG9uc2U/LmltYWdlX29jcjtcbiAgICAgICAgICAgIGNvbnN0IGltYWdlRmFjZW1hdGNoID0gcmVzcG9uc2U/LmltYWdlX2ZhY2VtYXRjaDtcbiAgICAgICAgICAgIGNvbnN0IGltYWdlTGl2ZWxpbmVzcyA9IHJlc3BvbnNlPy5pbWFnZV9saXZlbGluZXNzO1xuICAgICAgICAgICAgY29uc3QgaW1hZ2VXYXRlcm1hcmsgPSByZXNwb25zZT8uaW1hZ2Vfd2F0ZXJtYXJrO1xuXG4gICAgICAgICAgICBjb25zdCBpc0NoZWNrQ2FtZXJhRmVhdHVyZXMgPSAoKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgaW1hZ2VPY3IgfHwgaW1hZ2VMaXZlbGluZXNzIHx8IGltYWdlRmFjZW1hdGNoIHx8IGltYWdlV2F0ZXJtYXJrXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBpbWFnZURhdGEgPSBpc0NoZWNrQ2FtZXJhRmVhdHVyZXMoKVxuICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgIGltYWdlLFxuICAgICAgICAgICAgICAgICAgLi4uKGltYWdlT2NyICYmIHsgb2NyOiBpbWFnZU9jciB9KSxcbiAgICAgICAgICAgICAgICAgIC4uLihpbWFnZUZhY2VtYXRjaCAmJiB7IGZhY2VtYXRjaDogaW1hZ2VGYWNlbWF0Y2ggfSksXG4gICAgICAgICAgICAgICAgICAuLi4oaW1hZ2VMaXZlbGluZXNzICYmIHsgbGl2ZWxpbmVzczogaW1hZ2VMaXZlbGluZXNzIH0pLFxuICAgICAgICAgICAgICAgICAgLi4uKGltYWdlV2F0ZXJtYXJrICYmIHsgd2F0ZXJtYXJrOiBpbWFnZVdhdGVybWFyayB9KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgOiBpbWFnZTtcblxuICAgICAgICAgICAgdGhpcy5mb3JtRGF0YVtmaWVsZC5rZXldID0gZ2V0T2JqZWN0RGVlcENvcHkoW2ltYWdlRGF0YV0pO1xuICAgICAgICAgICAgdGhpcy5jYW1lcmFEYXRhW2ZpZWxkLmtleV0gPSBnZXRPYmplY3REZWVwQ29weShpbWFnZURhdGEpO1xuICAgICAgICAgICAgdGhpcy5tZWRpYUZpbGVzW2ZpZWxkLmtleV0gPSBnZXRPYmplY3REZWVwQ29weShbaW1hZ2VEYXRhXSk7XG5cbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0ucGF0Y2hWYWx1ZShcbiAgICAgICAgICAgICAgZ2V0T2JqZWN0RGVlcENvcHkoW2ltYWdlRGF0YV0pLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZW1pdEV2ZW50OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBvbmx5U2VsZjogZmFsc2VcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUoXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBbZmllbGQua2V5XTogZ2V0T2JqZWN0RGVlcENvcHkoW2ltYWdlRGF0YV0pXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHsgZW1pdEV2ZW50OiBmYWxzZSB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtcbiAgICAgICAgICAgICAgZW1pdEV2ZW50OiBmYWxzZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtcbiAgICAgICAgICAgICAgZW1pdEV2ZW50OiBmYWxzZVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuZ2V0VW5zYXZlZERhdGFTdGF0ZS5lbWl0KHRydWUpO1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGZpZWxkLmlzRm9ybUVsZW1lbnQgJiZcbiAgICAgICAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwidmFsaWRhdGlvblwiKSAmJlxuICAgICAgICAgICAgICBmaWVsZC52YWxpZGF0aW9uLnRyaWdnZXJzLmluY2x1ZGVzKFwiT05fQ0hBTkdFXCIpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgY29uc3QgcnVsZUVuZ2luZSA9IG5ldyBSdWxlRW5naW5lKFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIEZJRUxEX0NPTkZJRzogZmllbGQsXG4gICAgICAgICAgICAgICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgICAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgICAgICAgICAgICAgUkVEVVhfREFUQTogdGhpcy5yZWR1eERhdGEsXG4gICAgICAgICAgICAgICAgICBDQU1FUkFfREFUQTogdGhpcy5jYW1lcmFEYXRhLFxuICAgICAgICAgICAgICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgICAgICAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgICAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGEsXG4gICAgICAgICAgICAgICAgICBFWFRSQV9EQVRBOiB0aGlzLmV4dHJhRGF0YVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGF3YWl0IHJ1bGVFbmdpbmUucnVuKGZpZWxkLnZhbGlkYXRpb24pO1xuICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGZpZWxkLmlzRm9ybUVsZW1lbnQgJiZcbiAgICAgICAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwiY29ubmVjdGVkRWxlbWVudHNcIilcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0aGlzLmhhbmRsZUNvbm5lY3RlZEVsZW1lbnRzKFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGtleTogZmllbGQua2V5LFxuICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0udmFsdWVcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiT05fQ0hBTkdFXCJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0FQSV9SRVNQT05TRV9VUExPQURfSU1BR0UsIHtcbiAgICAgICAgICAgICAgYXBpX2tleTogdGhpcy5hcGlDYWxsUmVzcG9uc2Uua2V5LFxuICAgICAgICAgICAgICBmaWVsZF9rZXk6IHRoaXMuYXBpQ2FsbFJlc3BvbnNlLmtleSxcbiAgICAgICAgICAgICAgcmVzcG9uc2VfdHlwZTogXCJJTUFHRV9VUExPQURfQVBJX1NVQ0NFU1NcIixcbiAgICAgICAgICAgICAgcmVzcG9uc2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fQVBJX1JFU1BPTlNFX1VQTE9BRF9JTUFHRSwge1xuICAgICAgICAgICAgICBhcGlfa2V5OiB0aGlzLmFwaUNhbGxSZXNwb25zZS5rZXksXG4gICAgICAgICAgICAgIGZpZWxkX2tleTogdGhpcy5hcGlDYWxsUmVzcG9uc2Uua2V5LFxuICAgICAgICAgICAgICByZXNwb25zZV90eXBlOiBcIklNQUdFX1VQTE9BRF9BUElfRVJST1JcIlxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJGaWxlIFVwbG9hZCBmb3IgSW1hZ2UgRmFpbGVkXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmhpZGVBcGlMb2FkZXIoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFRmllbGRUeXBlLlJFQ09SRDpcbiAgICAgICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRDYW1lcmEoKTtcblxuICAgICAgICAgICAgY29uc3QgdmlkZW8gPSByZXNwb25zZT8udmlkZW9fdXJsO1xuXG4gICAgICAgICAgICB0aGlzLmZvcm1EYXRhW2ZpZWxkLmtleV0gPSBnZXRPYmplY3REZWVwQ29weShbdmlkZW9dKTtcbiAgICAgICAgICAgIHRoaXMuY2FtZXJhRGF0YVtmaWVsZC5rZXldID0gZ2V0T2JqZWN0RGVlcENvcHkodmlkZW8pO1xuICAgICAgICAgICAgdGhpcy5tZWRpYUZpbGVzW2ZpZWxkLmtleV0gPSBnZXRPYmplY3REZWVwQ29weShbdmlkZW9dKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0ucGF0Y2hWYWx1ZShcbiAgICAgICAgICAgICAgZ2V0T2JqZWN0RGVlcENvcHkoW3ZpZGVvXSksXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIG9ubHlTZWxmOiBmYWxzZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZShcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIFtmaWVsZC5rZXldOiBnZXRPYmplY3REZWVwQ29weShbdmlkZW9dKVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7IGVtaXRFdmVudDogZmFsc2UgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7XG4gICAgICAgICAgICAgIGVtaXRFdmVudDogZmFsc2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7XG4gICAgICAgICAgICAgIGVtaXRFdmVudDogZmFsc2VcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLmdldFVuc2F2ZWREYXRhU3RhdGUuZW1pdCh0cnVlKTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBmaWVsZC5pc0Zvcm1FbGVtZW50ICYmXG4gICAgICAgICAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLCBcInZhbGlkYXRpb25cIikgJiZcbiAgICAgICAgICAgICAgZmllbGQudmFsaWRhdGlvbi50cmlnZ2Vycy5pbmNsdWRlcyhcIk9OX0NIQU5HRVwiKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJ1bGVFbmdpbmUgPSBuZXcgUnVsZUVuZ2luZShcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBGSUVMRF9DT05GSUc6IGZpZWxkLFxuICAgICAgICAgICAgICAgICAgRk9STV9GSUVMRFM6IHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgICAgICAgICAgICAgIEZPUk1fREFUQTogdGhpcy5mb3JtRGF0YSxcbiAgICAgICAgICAgICAgICAgIFJFRFVYX0RBVEE6IHRoaXMucmVkdXhEYXRhLFxuICAgICAgICAgICAgICAgICAgQ0FNRVJBX0RBVEE6IHRoaXMuY2FtZXJhRGF0YSxcbiAgICAgICAgICAgICAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgICAgICAgICAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgICAgICAgICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuYWxsRm9ybXNEYXRhLFxuICAgICAgICAgICAgICAgICAgRVhUUkFfREFUQTogdGhpcy5leHRyYURhdGFcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHRoaXMudGFrZUFjdGlvbi5iaW5kKHRoaXMpXG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICBhd2FpdCBydWxlRW5naW5lLnJ1bihmaWVsZC52YWxpZGF0aW9uKTtcbiAgICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBmaWVsZC5pc0Zvcm1FbGVtZW50ICYmXG4gICAgICAgICAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLCBcImNvbm5lY3RlZEVsZW1lbnRzXCIpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhpcy5oYW5kbGVDb25uZWN0ZWRFbGVtZW50cyhcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBrZXk6IGZpZWxkLmtleSxcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldLnZhbHVlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcIk9OX0NIQU5HRVwiXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19BUElfUkVTUE9OU0VfVVBMT0FEX1ZJREVPLCB7XG4gICAgICAgICAgICAgIGFwaV9rZXk6IHRoaXMuYXBpQ2FsbFJlc3BvbnNlLmtleSxcbiAgICAgICAgICAgICAgZmllbGRfa2V5OiB0aGlzLmFwaUNhbGxSZXNwb25zZS5rZXksXG4gICAgICAgICAgICAgIHJlc3BvbnNlX3R5cGU6IFwiVklERU9fVVBMT0FEX0FQSV9TVUNDRVNTXCIsXG4gICAgICAgICAgICAgIHJlc3BvbnNlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0FQSV9SRVNQT05TRV9VUExPQURfVklERU8sIHtcbiAgICAgICAgICAgICAgYXBpX2tleTogdGhpcy5hcGlDYWxsUmVzcG9uc2Uua2V5LFxuICAgICAgICAgICAgICBmaWVsZF9rZXk6IHRoaXMuYXBpQ2FsbFJlc3BvbnNlLmtleSxcbiAgICAgICAgICAgICAgcmVzcG9uc2VfdHlwZTogXCJWSURFT19VUExPQURfQVBJX0VSUk9SXCJcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRmlsZSBVcGxvYWQgZm9yIFZpZGVvIEZhaWxlZFwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5oaWRlQXBpTG9hZGVyKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRUZpZWxkVHlwZS5MSVZFX0xPQ0FUSU9OOlxuICAgICAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICAgICAgdGhpcy5mb3JtRGF0YVtmaWVsZC5rZXldID0gZ2V0T2JqZWN0RGVlcENvcHkocmVzcG9uc2UpO1xuXG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldLnBhdGNoVmFsdWUoXG4gICAgICAgICAgICAgIGdldE9iamVjdERlZXBDb3B5KHJlc3BvbnNlKSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVtaXRFdmVudDogZmFsc2UsXG4gICAgICAgICAgICAgICAgb25seVNlbGY6IGZhbHNlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgW2ZpZWxkLmtleV06IGdldE9iamVjdERlZXBDb3B5KHJlc3BvbnNlKVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7IGVtaXRFdmVudDogZmFsc2UgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7XG4gICAgICAgICAgICAgIGVtaXRFdmVudDogZmFsc2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7XG4gICAgICAgICAgICAgIGVtaXRFdmVudDogZmFsc2VcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLmdldFVuc2F2ZWREYXRhU3RhdGUuZW1pdCh0cnVlKTtcblxuICAgICAgICAgICAgY29uc3QgYXBpcyA9IG5ldyBBcGlzKFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgRklFTERfQ09ORklHOiBmaWVsZCxcbiAgICAgICAgICAgICAgICBBUElfQ09ORklHOiBmaWVsZC5hcGksXG4gICAgICAgICAgICAgICAgQVBJX1JFU1BPTlNFOiByZXNwb25zZSxcbiAgICAgICAgICAgICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgICAgICAgIEZPUk1fREFUQTogdGhpcy5mb3JtRGF0YSxcbiAgICAgICAgICAgICAgICBSRURVWF9EQVRBOiB0aGlzLnJlZHV4RGF0YSxcbiAgICAgICAgICAgICAgICBDQU1FUkFfREFUQTogdGhpcy5jYW1lcmFEYXRhLFxuICAgICAgICAgICAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgICAgICAgICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgICAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGEsXG4gICAgICAgICAgICAgICAgRVhUUkFfREFUQTogdGhpcy5leHRyYURhdGFcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGFwaSA9IGF3YWl0IGFwaXMudmFsaWRhdGVSZXNwb25zZSgpO1xuICAgICAgICAgICAgICBmaWVsZC5hcGkgPSBhcGk7XG4gICAgICAgICAgICB9KSgpO1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGZpZWxkLmlzRm9ybUVsZW1lbnQgJiZcbiAgICAgICAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwidmFsaWRhdGlvblwiKSAmJlxuICAgICAgICAgICAgICBmaWVsZC52YWxpZGF0aW9uLnRyaWdnZXJzLmluY2x1ZGVzKFwiT05fQ0hBTkdFXCIpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgY29uc3QgcnVsZUVuZ2luZSA9IG5ldyBSdWxlRW5naW5lKFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIEZJRUxEX0NPTkZJRzogZmllbGQsXG4gICAgICAgICAgICAgICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgICAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgICAgICAgICAgICAgUkVEVVhfREFUQTogdGhpcy5yZWR1eERhdGEsXG4gICAgICAgICAgICAgICAgICBDQU1FUkFfREFUQTogdGhpcy5jYW1lcmFEYXRhLFxuICAgICAgICAgICAgICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgICAgICAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgICAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGEsXG4gICAgICAgICAgICAgICAgICBFWFRSQV9EQVRBOiB0aGlzLmV4dHJhRGF0YVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGF3YWl0IHJ1bGVFbmdpbmUucnVuKGZpZWxkLnZhbGlkYXRpb24pO1xuICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGZpZWxkLmlzRm9ybUVsZW1lbnQgJiZcbiAgICAgICAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwiY29ubmVjdGVkRWxlbWVudHNcIilcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0aGlzLmhhbmRsZUNvbm5lY3RlZEVsZW1lbnRzKFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGtleTogZmllbGQua2V5LFxuICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0udmFsdWVcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiT05fQ0hBTkdFXCJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5oaWRlQXBpTG9hZGVyKCk7XG5cbiAgICAgICAgICAgIHRoaXMudHJpZ2dlckxvZ3MoXG4gICAgICAgICAgICAgIEVMb2dFdmVudFR5cGUuRk9STV9fQVBJX1JFU1BPTlNFX1JFVkVSU0VfTEFUX0xPTkcsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhcGlfa2V5OiB0aGlzLmFwaUNhbGxSZXNwb25zZS5rZXksXG4gICAgICAgICAgICAgICAgZmllbGRfa2V5OiB0aGlzLmFwaUNhbGxSZXNwb25zZS5rZXksXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VfdHlwZTogXCJSRVZFUlNFX0xBVF9MT05HX0FQSV9TVUNDRVNTXCIsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy50cmlnZ2VyTG9ncyhcbiAgICAgICAgICAgICAgRUxvZ0V2ZW50VHlwZS5GT1JNX19BUElfUkVTUE9OU0VfUkVWRVJTRV9MQVRfTE9ORyxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFwaV9rZXk6IHRoaXMuYXBpQ2FsbFJlc3BvbnNlLmtleSxcbiAgICAgICAgICAgICAgICBmaWVsZF9rZXk6IHRoaXMuYXBpQ2FsbFJlc3BvbnNlLmtleSxcbiAgICAgICAgICAgICAgICByZXNwb25zZV90eXBlOiBcIlJFVkVSU0VfTEFUX0xPTkdfQVBJX0VSUk9SXCJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3QgYXBpcyA9IG5ldyBBcGlzKFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgRklFTERfQ09ORklHOiBmaWVsZCxcbiAgICAgICAgICAgICAgICBBUElfQ09ORklHOiBmaWVsZC5hcGksXG4gICAgICAgICAgICAgICAgQVBJX1JFU1BPTlNFOiB7fSxcbiAgICAgICAgICAgICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgICAgICAgIEZPUk1fREFUQTogdGhpcy5mb3JtRGF0YSxcbiAgICAgICAgICAgICAgICBSRURVWF9EQVRBOiB0aGlzLnJlZHV4RGF0YSxcbiAgICAgICAgICAgICAgICBDQU1FUkFfREFUQTogdGhpcy5jYW1lcmFEYXRhLFxuICAgICAgICAgICAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgICAgICAgICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgICAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGEsXG4gICAgICAgICAgICAgICAgRVhUUkFfREFUQTogdGhpcy5leHRyYURhdGFcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGFwaSA9IGF3YWl0IGFwaXMudmFsaWRhdGVSZXNwb25zZSgpO1xuICAgICAgICAgICAgICBmaWVsZC5hcGkgPSBhcGk7XG4gICAgICAgICAgICB9KSgpO1xuXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiUmV2ZXJzZSBMb2NhdGlvbiBmb3IgTGF0TG9uZyBGYWlsZWRcIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5oaWRlQXBpTG9hZGVyKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh2ZXJpZnlDaGFuZ2UoXCJidXR0b25DbGlja1Jlc3BvbnNlXCIpKSB7XG4gICAgICB0aGlzLmJ1dHRvbkNsaWNrUmVzcG9uc2UgPSBjaGFuZ2VzLmJ1dHRvbkNsaWNrUmVzcG9uc2UuY3VycmVudFZhbHVlO1xuXG4gICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHModGhpcy5idXR0b25DbGlja1Jlc3BvbnNlLCBcImtleVwiKSkge1xuICAgICAgICBsZXQgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleShcbiAgICAgICAgICB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgdGhpcy5idXR0b25DbGlja1Jlc3BvbnNlPy5rZXlcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHModGhpcy5idXR0b25DbGlja1Jlc3BvbnNlLCBcImRlZmF1bHRcIikpIHtcbiAgICAgICAgICBmaWVsZC5kZWZhdWx0ID0gZ2V0T2JqZWN0RGVlcENvcHkodGhpcy5idXR0b25DbGlja1Jlc3BvbnNlLmRlZmF1bHQpO1xuICAgICAgICAgIGRlbGV0ZSB0aGlzLmJ1dHRvbkNsaWNrUmVzcG9uc2UuZGVmYXVsdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHModGhpcy5idXR0b25DbGlja1Jlc3BvbnNlLCBcIm1lc3NhZ2VzXCIpKSB7XG4gICAgICAgICAgZmllbGQubWVzc2FnZXMgPSBnZXRPYmplY3REZWVwQ29weSh0aGlzLmJ1dHRvbkNsaWNrUmVzcG9uc2UubWVzc2FnZXMpO1xuICAgICAgICAgIGRlbGV0ZSB0aGlzLmJ1dHRvbkNsaWNrUmVzcG9uc2UubWVzc2FnZXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKHRoaXMuYnV0dG9uQ2xpY2tSZXNwb25zZSwgXCJ2YWxpZGF0aW9uXCIpKSB7XG4gICAgICAgICAgZmllbGQudmFsaWRhdGlvbiA9IGdldE9iamVjdERlZXBDb3B5KFxuICAgICAgICAgICAgdGhpcy5idXR0b25DbGlja1Jlc3BvbnNlLnZhbGlkYXRpb25cbiAgICAgICAgICApO1xuICAgICAgICAgIGRlbGV0ZSB0aGlzLmJ1dHRvbkNsaWNrUmVzcG9uc2UudmFsaWRhdGlvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZpZWxkID0gZ2V0T2JqZWN0RGVlcENvcHkoXG4gICAgICAgICAgbWVyZ2VPYmplY3RzKGZpZWxkLCB0aGlzLmJ1dHRvbkNsaWNrUmVzcG9uc2UpXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLCBcInZhbGlkYXRpb25cIikpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZC52YWxpZGF0aW9uLCBcInRyaWdnZXJzXCIpICYmXG4gICAgICAgICAgICBmaWVsZC52YWxpZGF0aW9uLnRyaWdnZXJzLmluY2x1ZGVzKFwiT05fUkVTUE9OU0VcIilcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IHJ1bGVFbmdpbmUgPSBuZXcgUnVsZUVuZ2luZShcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIEZJRUxEX0NPTkZJRzogZmllbGQsXG4gICAgICAgICAgICAgICAgRk9STV9GSUVMRFM6IHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgICAgICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgICAgICAgUkVEVVhfREFUQTogdGhpcy5yZWR1eERhdGEsXG4gICAgICAgICAgICAgICAgQ0FNRVJBX0RBVEE6IHRoaXMuY2FtZXJhRGF0YSxcbiAgICAgICAgICAgICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICAgICAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgICAgICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuYWxsRm9ybXNEYXRhLFxuICAgICAgICAgICAgICAgIEVYVFJBX0RBVEE6IHRoaXMuZXh0cmFEYXRhXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHRoaXMudGFrZUFjdGlvbi5iaW5kKHRoaXMpXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICBhd2FpdCBydWxlRW5naW5lLnJ1bihmaWVsZC52YWxpZGF0aW9uKTtcbiAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh2ZXJpZnlDaGFuZ2UoXCJhbGxGb3Jtc0RhdGFcIikpIHtcbiAgICAgIHRoaXMuYWxsRm9ybXNEYXRhID0gY2hhbmdlcy5hbGxGb3Jtc0RhdGEuY3VycmVudFZhbHVlO1xuICAgIH1cbiAgICBpZiAodmVyaWZ5Q2hhbmdlKFwiZm9ybUNvbmZpZ1wiKSkge1xuICAgICAgdGhpcy5mb3JtQ29uZmlnID0gY2hhbmdlcy5mb3JtQ29uZmlnLmN1cnJlbnRWYWx1ZTtcblxuICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5pbml0Rm9ybUNvbmZpZyh0aGlzLmZvcm1Db25maWcpO1xuICAgICAgfSkoKTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmFjdGl2ZUNhbWVyYVJlY29yZGluZ1RpbWVyU3ViY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuYWN0aXZlQ2FtZXJhUmVjb3JkaW5nVGltZXJTdWJjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5hY3RpdmVDYW1lcmFSZWNvcmRpbmdTdGF0ZVN1YmNyaXB0aW9uKSB7XG4gICAgICB0aGlzLmFjdGl2ZUNhbWVyYVJlY29yZGluZ1N0YXRlU3ViY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIHRyaWdnZXJMb2dzKGV2ZW50VHlwZTogRUxvZ0V2ZW50VHlwZSwgbG9nczogYW55KSB7XG4gICAgdGhpcy5nZXRMb2dzLmVtaXQoXG4gICAgICBmb3JtYXRFdmVudExvZ3MoXG4gICAgICAgIGV2ZW50VHlwZSxcbiAgICAgICAgdGhpcy5zdGVwQ29uZmlnLFxuICAgICAgICB0aGlzLmZvcm1Db25maWcsXG4gICAgICAgIGdldE9iamVjdERlZXBDb3B5KGxvZ3MpXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgcHJpdmF0ZSBzeW5jQXBpU3RvcmFnZUNvbnRleHQoKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtVmlld0FwaVNlcnZpY2Uuc2V0U3RvcmFnZUNvbnRleHQoXG4gICAgICB0aGlzLnJlZHV4RGF0YSA/PyB7fSxcbiAgICAgIHRoaXMudXNlckNvbmZpZ1xuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNvbnZlcnRlcigpOiBDb252ZXJ0ZXIge1xuICAgIHJldHVybiBuZXcgQ29udmVydGVyKHtcbiAgICAgIHJlZHV4RGF0YTogdGhpcy5yZWR1eERhdGEgPz8ge30sXG4gICAgICB1c2VyQ29uZmlnOiB0aGlzLnVzZXJDb25maWdcbiAgICB9KTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgaW5pdEZvcm1Db25maWcoZm9ybUNvbmZpZzogYW55KSB7XG4gICAgY29uc3QgY29udmVydGVyID0gdGhpcy5jcmVhdGVDb252ZXJ0ZXIoKTtcbiAgICBmb3JtQ29uZmlnID0gY29udmVydGVyLmNvbnZlcnRGb3JtQ29uZmlnKGZvcm1Db25maWcpO1xuXG4gICAgZm9ybUNvbmZpZyA9IGNvbnZlcnRlci51cGRhdGVGb3JtQ29uZmlnUHJvcGVydGllcyhmb3JtQ29uZmlnKTtcblxuICAgIHRoaXMuc2V0Rm9ybUZpZWxkc0Zyb21Gb3JtQ29uZmlnKGZvcm1Db25maWcpO1xuXG4gICAgdGhpcy5zZXRGb3JtRmllbGRHcm91cHNGcm9tRm9ybUNvbmZpZyhmb3JtQ29uZmlnKTtcblxuICAgIHRoaXMuc2V0Rm9ybURhdGFGcm9tQWxsRm9ybXNEYXRhKCk7XG5cbiAgICB0aGlzLmZvcm1Db25maWcgPSBmb3JtQ29uZmlnO1xuXG4gICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0NPTkZJR19MT0FEX1NVQ0NFU1MsIHtcbiAgICAgIC4uLihmb3JtQ29uZmlnLnNlcXVlbmNlTm8gJiYge1xuICAgICAgICBmb3JtX3NlcXVlbmNlX25vOiBmb3JtQ29uZmlnLnNlcXVlbmNlTm9cbiAgICAgIH0pLFxuICAgICAgLi4uKGZvcm1Db25maWcuc3RhdHVzICYmIHsgZm9ybV9zdGF0dXM6IGZvcm1Db25maWcuc3RhdHVzIH0pXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBQUkUgRm9ybSBUYXNrc1xuICAgICAqIDEuIEFQSSBDYWxscy5cbiAgICAgKiAyLiBBbHRlciBEYXRhIFN0cnVjdHVyZS5cbiAgICAgKiAzLiBBbHRlciBGb3JtIENvbmZpZy5cbiAgICAgKi9cbiAgICBpZiAoXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyh0aGlzLmZvcm1Db25maWcsIFwidGFza3NcIikgJiZcbiAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKHRoaXMuZm9ybUNvbmZpZy50YXNrcywgXCJwcmVcIilcbiAgICApIHtcbiAgICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19UQVNLX1BSRSwge30pO1xuXG4gICAgICBmb3IgKGNvbnN0IHByZVRhc2sgb2YgdGhpcy5mb3JtQ29uZmlnLnRhc2tzLnByZSkge1xuICAgICAgICBjb25zdCB0YXNrID0gbmV3IFRhc2tzKFxuICAgICAgICAgIHByZVRhc2ssXG4gICAgICAgICAge1xuICAgICAgICAgICAgRk9STV9DT05GSUc6IHRoaXMuZm9ybUNvbmZpZyxcbiAgICAgICAgICAgIEZPUk1fRklFTERTOiB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgICBSRURVWF9EQVRBOiB0aGlzLnJlZHV4RGF0YSxcbiAgICAgICAgICAgIENBTUVSQV9EQVRBOiB0aGlzLmNhbWVyYURhdGEsXG4gICAgICAgICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICAgICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YSxcbiAgICAgICAgICAgIEVYVFJBX0RBVEE6IHRoaXMuZXh0cmFEYXRhXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuc3RvcFRhc2tFeGVjdXRpb24gPSBmYWxzZTtcbiAgICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKHByZVRhc2ssIFwid2FpdFwiKSkge1xuICAgICAgICAgIHRoaXMud2FpdGluZ0ZvckNoYW5nZXMgPSBwcmVUYXNrLndhaXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy53YWl0aW5nRm9yQ2hhbmdlcyA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgdGFzay5leGVjdXRlKCk7XG5cbiAgICAgICAgLy8gV2FpdCBmb3IgbmdPbkNoYW5nZXMgdG8gYmUgY2FsbGVkIGJlZm9yZSBjb250aW51aW5nIHRvIHRoZSBuZXh0IHRhc2tcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICAgICAgICBjb25zdCBpbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLndhaXRpbmdGb3JDaGFuZ2VzKSB7XG4gICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZCk7XG4gICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCBGT1JNX1ZJRVdfVElNRVJTLldBSVRfRk9SX0NIQU5HRVNfQkVGT1JFX01PVklOR19UT19ORVhUX1RBU0spO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5zdG9wVGFza0V4ZWN1dGlvbikge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZm9ybURhdGEgPSBtZXJnZU9iamVjdHModGhpcy5mb3JtRGF0YSwgdGhpcy5wb3B1cEZvcm1EYXRhKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zdG9wVGFza0V4ZWN1dGlvbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuZm9ybUdyb3VwID0gYXdhaXQgdGhpcy5mb3JtVmlld1NlcnZpY2UuY3JlYXRlRm9ybUdyb3VwKFxuICAgICAgdGhpcy5mb3JtRmllbGRzLFxuICAgICAge1xuICAgICAgICBGT1JNX0NPTkZJRzogdGhpcy5mb3JtQ29uZmlnLFxuICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgIFJFRFVYX0RBVEE6IHRoaXMucmVkdXhEYXRhLFxuICAgICAgICBDQU1FUkFfREFUQTogdGhpcy5jYW1lcmFEYXRhLFxuICAgICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGEsXG4gICAgICAgIEVYVFJBX0RBVEE6IHRoaXMuZXh0cmFEYXRhXG4gICAgICB9LFxuICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcbiAgICApO1xuXG4gICAgLyoqXG4gICAgICogRm9yIHNvbWUgcmVhc29uIGlmIHRoZWlyIGEgZmllbGQgb2YgdHlwZSAnSU1BR0UnIHRoZW5cbiAgICAgKiBmb3JtRGF0YSBpcyBhZGRpbmcgYSAndW5kZWZpbmVkJyBrZXkgd2l0aCBsYXN0IGltYWdlJ3MgdmFsdWUgZnJvbSB0aGUgYXJyYXkuXG4gICAgICogQmVsb3cgcGllY2Ugb2YgY29kZSBpcyB0byByZW1vdmUgdGhhdCByZWR1bmRlbnQgdmFsdWUgZnJvbSBmb3JtRGF0YS5cbiAgICAgKi9cbiAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHModGhpcy5mb3JtRGF0YSwgXCJ1bmRlZmluZWRcIikpIHtcbiAgICAgIGRlbGV0ZSB0aGlzLmZvcm1EYXRhLnVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIHRoaXMuZm9ybUZpZWxkcykge1xuICAgICAgaWYgKGZpZWxkLmlzRm9ybUVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5wcmV2aW91c0Zvcm1EYXRhID0ge1xuICAgICAgICAgIC4uLnRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgICAgICBbZmllbGQua2V5XTogY29udmVydEZvcm1GaWVsZFZhbHVlVG9TdGFuZGFyZEZvcm1hdChcbiAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS52YWx1ZVxuICAgICAgICAgIClcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmZvcm1EYXRhID0ge1xuICAgICAgICAgIC4uLnRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgW2ZpZWxkLmtleV06IGNvbnZlcnRGb3JtRmllbGRWYWx1ZVRvU3RhbmRhcmRGb3JtYXQoXG4gICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0udmFsdWVcbiAgICAgICAgICApXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09IEVGaWVsZFR5cGUuRklMRSkge1xuICAgICAgICAgIHRoaXMuZmlsZXNbZmllbGQua2V5XSA9IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0udmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09IEVGaWVsZFR5cGUuQ0FQVFVSRSkge1xuICAgICAgICAgIHRoaXMucmVzZXRDYW1lcmEoKTtcblxuICAgICAgICAgIHRoaXMuY2FtZXJhRGF0YSA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMuY2FtZXJhRGF0YSxcbiAgICAgICAgICAgIFtmaWVsZC5rZXldOiBjb252ZXJ0Rm9ybUZpZWxkVmFsdWVUb1N0YW5kYXJkRm9ybWF0KFxuICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS52YWx1ZVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH07XG5cbiAgICAgICAgICB0aGlzLm1lZGlhRmlsZXNbZmllbGQua2V5XSA9IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0udmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09IEVGaWVsZFR5cGUuUkVDT1JEKSB7XG4gICAgICAgICAgdGhpcy5yZXNldENhbWVyYSgpO1xuXG4gICAgICAgICAgdGhpcy5jYW1lcmFEYXRhID0ge1xuICAgICAgICAgICAgLi4udGhpcy5jYW1lcmFEYXRhLFxuICAgICAgICAgICAgW2ZpZWxkLmtleV06IGNvbnZlcnRGb3JtRmllbGRWYWx1ZVRvU3RhbmRhcmRGb3JtYXQoXG4gICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldLnZhbHVlXG4gICAgICAgICAgICApXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHRoaXMubWVkaWFGaWxlc1tmaWVsZC5rZXldID0gdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS52YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0udmFsdWVDaGFuZ2VzXG4gICAgICAgICAgLnBpcGUocGFpcndpc2UoKSlcbiAgICAgICAgICAuc3Vic2NyaWJlKChbcHJldmlvdXNWYWx1ZSwgY3VycmVudFZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wcmV2aW91c0Zvcm1EYXRhID0ge1xuICAgICAgICAgICAgICAuLi50aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgICAgICAgIFtmaWVsZC5rZXldOiBjb252ZXJ0Rm9ybUZpZWxkVmFsdWVUb1N0YW5kYXJkRm9ybWF0KFxuICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgIHByZXZpb3VzVmFsdWVcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgbmV4dFZhbHVlID0gY29udmVydEZvcm1GaWVsZFZhbHVlVG9TdGFuZGFyZEZvcm1hdChcbiAgICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICAgIGN1cnJlbnRWYWx1ZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IGtlZXBTdG9yZWRBcGlPYmplY3QgPVxuICAgICAgICAgICAgICAoZmllbGQudHlwZSA9PT0gRUZpZWxkVHlwZS5BUEkgfHxcbiAgICAgICAgICAgICAgICBmaWVsZC50eXBlID09PSBFRmllbGRUeXBlLkFQSV9DQUxMKSAmJlxuICAgICAgICAgICAgICBpc0VtcHR5VmFsdWUobmV4dFZhbHVlKSAmJlxuICAgICAgICAgICAgICBpc05vdEVtcHR5VmFsdWUodGhpcy5mb3JtRGF0YVtmaWVsZC5rZXldKTtcblxuICAgICAgICAgICAgaWYgKCFrZWVwU3RvcmVkQXBpT2JqZWN0KSB7XG4gICAgICAgICAgICAgIHRoaXMuZm9ybURhdGFbZmllbGQua2V5XSA9IG5leHRWYWx1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09IEVGaWVsZFR5cGUuRklMRSkge1xuICAgICAgICAgICAgICB0aGlzLmZpbGVzW2ZpZWxkLmtleV0gPSBjdXJyZW50VmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmllbGQudHlwZSA9PT0gRUZpZWxkVHlwZS5DQVBUVVJFKSB7XG4gICAgICAgICAgICAgIHRoaXMucmVzZXRDYW1lcmEoKTtcblxuICAgICAgICAgICAgICB0aGlzLmNhbWVyYURhdGEgPSB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5jYW1lcmFEYXRhLFxuICAgICAgICAgICAgICAgIFtmaWVsZC5rZXldOiBjb252ZXJ0Rm9ybUZpZWxkVmFsdWVUb1N0YW5kYXJkRm9ybWF0KFxuICAgICAgICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICAgICAgICBjdXJyZW50VmFsdWVcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgdGhpcy5tZWRpYUZpbGVzW2ZpZWxkLmtleV0gPSBjdXJyZW50VmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmllbGQudHlwZSA9PT0gRUZpZWxkVHlwZS5SRUNPUkQpIHtcbiAgICAgICAgICAgICAgdGhpcy5yZXNldENhbWVyYSgpO1xuXG4gICAgICAgICAgICAgIHRoaXMuY2FtZXJhRGF0YSA9IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLmNhbWVyYURhdGEsXG4gICAgICAgICAgICAgICAgW2ZpZWxkLmtleV06IGNvbnZlcnRGb3JtRmllbGRWYWx1ZVRvU3RhbmRhcmRGb3JtYXQoXG4gICAgICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnRWYWx1ZVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICB0aGlzLm1lZGlhRmlsZXNbZmllbGQua2V5XSA9IGN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIHRoaXMuZm9ybUZpZWxkcykge1xuICAgICAgaWYgKGZpZWxkLmlzRm9ybUVsZW1lbnQpIHtcbiAgICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLCBcInZhbGlkYXRpb25cIikpIHtcbiAgICAgICAgICBpZiAoZmllbGQudmFsaWRhdGlvbi50cmlnZ2Vycy5pbmNsdWRlcyhcIk9OX0lOSVRcIikpIHtcbiAgICAgICAgICAgIGNvbnN0IHJ1bGVFbmdpbmUgPSBuZXcgUnVsZUVuZ2luZShcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIEZJRUxEX0NPTkZJRzogZmllbGQsXG4gICAgICAgICAgICAgICAgRk9STV9GSUVMRFM6IHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgICAgICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgICAgICAgUkVEVVhfREFUQTogdGhpcy5yZWR1eERhdGEsXG4gICAgICAgICAgICAgICAgQ0FNRVJBX0RBVEE6IHRoaXMuY2FtZXJhRGF0YSxcbiAgICAgICAgICAgICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICAgICAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgICAgICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuYWxsRm9ybXNEYXRhLFxuICAgICAgICAgICAgICAgIEVYVFJBX0RBVEE6IHRoaXMuZXh0cmFEYXRhXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHRoaXMudGFrZUFjdGlvbi5iaW5kKHRoaXMpXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBhd2FpdCBydWxlRW5naW5lLnJ1bihmaWVsZC52YWxpZGF0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwiY29ubmVjdGVkRWxlbWVudHNcIikpIHtcbiAgICAgICAgICB0aGlzLmhhbmRsZUNvbm5lY3RlZEVsZW1lbnRzKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBrZXk6IGZpZWxkLmtleSxcbiAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0udmFsdWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcIk9OX0lOSVRcIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgc2V0Rm9ybUZpZWxkc0Zyb21Gb3JtQ29uZmlnKGZvcm1Db25maWc6IGFueSkge1xuICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmb3JtQ29uZmlnLCBcImZpZWxkc1wiKSkge1xuICAgICAgdGhpcy5mb3JtRmllbGRzID0gZm9ybUNvbmZpZy5maWVsZHM7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm1Db25maWcsIFwibXVsdGlGb3JtXCIpICYmXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmb3JtQ29uZmlnLm11bHRpRm9ybSwgXCJmaWVsZHNcIilcbiAgICApIHtcbiAgICAgIHRoaXMuZm9ybUZpZWxkcyA9IGZvcm1Db25maWcubXVsdGlGb3JtLmZpZWxkcztcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIHNldEZvcm1GaWVsZEdyb3Vwc0Zyb21Gb3JtQ29uZmlnKGZvcm1Db25maWc6IGFueSkge1xuICAgIHRoaXMuZmllbGRHcm91cHMgPSBmb3JtQ29uZmlnLmZpZWxkR3JvdXBzO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBzZXRGb3JtRGF0YUZyb21BbGxGb3Jtc0RhdGEoKSB7XG4gICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKHRoaXMuYWxsRm9ybXNEYXRhLCB0aGlzLmZvcm1Db25maWcua2V5KSkge1xuICAgICAgY29uc3QgZm9ybURhdGEgPSB0aGlzLmFsbEZvcm1zRGF0YVt0aGlzLmZvcm1Db25maWcua2V5XTtcblxuICAgICAgaWYgKFxuICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmb3JtRGF0YSwgXCJkYXRhXCIpICYmXG4gICAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm1EYXRhLCBcImV4dGVuZGVkRGF0YVwiKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuZm9ybURhdGEgPSB7XG4gICAgICAgICAgLi4udGhpcy5mb3JtRGF0YSxcbiAgICAgICAgICAuLi5mb3JtRGF0YS5kYXRhXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZvcm1EYXRhID0ge1xuICAgICAgICAgIC4uLnRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgLi4uZm9ybURhdGFcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb3JtRGF0YSA9IHt9O1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgaGFuZGxlQ29ubmVjdGVkRWxlbWVudEZpZWxkR3JvdXBBY3Rpb25zKFxuICAgIGNoaWxkRmllbGRHcm91cENvbmZpZzogYW55LFxuICAgIHBhcmVudEZpZWxkOiBhbnlcbiAgKSB7XG4gICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGNoaWxkRmllbGRHcm91cENvbmZpZywgXCJydWxlc1wiKSkge1xuICAgICAgY29uc3QgcnVsZXNNYXBwaW5nID0gbmV3IFJ1bGUoY2hpbGRGaWVsZEdyb3VwQ29uZmlnLnJ1bGVzLCB7XG4gICAgICAgIEZJRUxEX0NPTkZJRzogcGFyZW50RmllbGQsXG4gICAgICAgIEZPUk1fREFUQTogdGhpcy5mb3JtRGF0YSxcbiAgICAgICAgUkVEVVhfREFUQTogdGhpcy5yZWR1eERhdGEsXG4gICAgICAgIENBTUVSQV9EQVRBOiB0aGlzLmNhbWVyYURhdGEsXG4gICAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YSxcbiAgICAgICAgRVhUUkFfREFUQTogdGhpcy5leHRyYURhdGFcbiAgICAgIH0pLm1hcHBpbmcoKTtcblxuICAgICAgZm9yIChjb25zdCBhY3Rpb24gb2YgY2hpbGRGaWVsZEdyb3VwQ29uZmlnLmFjdGlvbnMpIHtcbiAgICAgICAgY29uc3QgY29uZGl0aW9uU3VjY2VzcyA9IG5ldyBDb25kaXRpb24oXG4gICAgICAgICAgYWN0aW9uLmNvbmRpdGlvbixcbiAgICAgICAgICBydWxlc01hcHBpbmdcbiAgICAgICAgKS5ldmFsdWF0ZSgpO1xuXG4gICAgICAgIGlmIChjb25kaXRpb25TdWNjZXNzKSB7XG4gICAgICAgICAgY29uc3QgYWN0aW9ucyA9IG5ldyBBY3Rpb24oXG4gICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICBydWxlc01hcHBpbmcsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIEZJRUxEX0NPTkZJRzogcGFyZW50RmllbGQsXG4gICAgICAgICAgICAgIEZPUk1fRklFTERTOiB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgICAgIEZPUk1fREFUQTogdGhpcy5mb3JtRGF0YSxcbiAgICAgICAgICAgICAgUkVEVVhfREFUQTogdGhpcy5yZWR1eERhdGEsXG4gICAgICAgICAgICAgIENBTUVSQV9EQVRBOiB0aGlzLmNhbWVyYURhdGEsXG4gICAgICAgICAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgICAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YSxcbiAgICAgICAgICAgICAgRVhUUkFfREFUQTogdGhpcy5leHRyYURhdGFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0aGlzLnRha2VBY3Rpb25PbkZpZWxkR3JvdXAuYmluZCh0aGlzKVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBhd2FpdCBhY3Rpb25zLmV4ZWN1dGUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgaGFuZGxlQ29ubmVjdGVkRWxlbWVudEZpZWxkR3JvdXAoXG4gICAgY3VycmVudEZpZWxkOiBhbnksXG4gICAgY29ubmVjdGVkRmllbGRHcm91cENvbmZpZzogYW55LFxuICAgIGV2ZW50VHlwZTogc3RyaW5nXG4gICkge1xuICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhjb25uZWN0ZWRGaWVsZEdyb3VwQ29uZmlnLCBcInRyaWdnZXJzXCIpKSB7XG4gICAgICBpZiAoY29ubmVjdGVkRmllbGRHcm91cENvbmZpZy50cmlnZ2Vycy5pbmNsdWRlcyhldmVudFR5cGUpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlQ29ubmVjdGVkRWxlbWVudEZpZWxkR3JvdXBBY3Rpb25zKFxuICAgICAgICAgIGNvbm5lY3RlZEZpZWxkR3JvdXBDb25maWcsXG4gICAgICAgICAgY3VycmVudEZpZWxkXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBoYW5kbGVDb25uZWN0ZWRFbGVtZW50RmllbGRBY3Rpb25zKFxuICAgIGNvbm5lY3RlZEZpZWxkQ29uZmlnOiBhbnksXG4gICAgY29ubmVjdGVkRmllbGQ6IGFueVxuICApIHtcbiAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoY29ubmVjdGVkRmllbGRDb25maWcsIFwicnVsZXNcIikpIHtcbiAgICAgIGNvbnN0IHJ1bGVzTWFwcGluZyA9IG5ldyBSdWxlKGNvbm5lY3RlZEZpZWxkQ29uZmlnLnJ1bGVzLCB7XG4gICAgICAgIEZJRUxEX0NPTkZJRzogY29ubmVjdGVkRmllbGQsXG4gICAgICAgIEZPUk1fREFUQTogdGhpcy5mb3JtRGF0YSxcbiAgICAgICAgUkVEVVhfREFUQTogdGhpcy5yZWR1eERhdGEsXG4gICAgICAgIENBTUVSQV9EQVRBOiB0aGlzLmNhbWVyYURhdGEsXG4gICAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YSxcbiAgICAgICAgRVhUUkFfREFUQTogdGhpcy5leHRyYURhdGFcbiAgICAgIH0pLm1hcHBpbmcoKTtcblxuICAgICAgZm9yIChjb25zdCBhY3Rpb24gb2YgY29ubmVjdGVkRmllbGRDb25maWcuYWN0aW9ucykge1xuICAgICAgICBjb25zdCBjb25kaXRpb25TdWNjZXNzID0gbmV3IENvbmRpdGlvbihcbiAgICAgICAgICBhY3Rpb24uY29uZGl0aW9uLFxuICAgICAgICAgIHJ1bGVzTWFwcGluZ1xuICAgICAgICApLmV2YWx1YXRlKCk7XG5cbiAgICAgICAgaWYgKGNvbmRpdGlvblN1Y2Nlc3MpIHtcbiAgICAgICAgICBjb25zdCBhY3Rpb25zID0gbmV3IEFjdGlvbihcbiAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgIHJ1bGVzTWFwcGluZyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgRk9STV9GSUVMRFM6IHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgICAgICAgICAgRklFTERfQ09ORklHOiBjb25uZWN0ZWRGaWVsZCxcbiAgICAgICAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgICAgICAgICBSRURVWF9EQVRBOiB0aGlzLnJlZHV4RGF0YSxcbiAgICAgICAgICAgICAgQ0FNRVJBX0RBVEE6IHRoaXMuY2FtZXJhRGF0YSxcbiAgICAgICAgICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgICAgICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgICAgICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuYWxsRm9ybXNEYXRhLFxuICAgICAgICAgICAgICBFWFRSQV9EQVRBOiB0aGlzLmV4dHJhRGF0YVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRoaXMudGFrZUFjdGlvbi5iaW5kKHRoaXMpXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGF3YWl0IGFjdGlvbnMuZXhlY3V0ZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbm5lY3RlZEZpZWxkO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBoYW5kbGVDb25uZWN0ZWRFbGVtZW50RmllbGRzKFxuICAgIGN1cnJlbnRGaWVsZDogYW55LFxuICAgIGNvbm5lY3RlZEZpZWxkQ29uZmlnOiBhbnksXG4gICAgZXZlbnRUeXBlOiBzdHJpbmcsXG4gICAgbmVzdGVkOiBzdHJpbmdcbiAgKSB7XG4gICAgbGV0IGNvbm5lY3RlZEZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkoXG4gICAgICB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICBjb25uZWN0ZWRGaWVsZENvbmZpZy5rZXlcbiAgICApO1xuXG4gICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGNvbm5lY3RlZEZpZWxkQ29uZmlnLCBcInRyaWdnZXJzXCIpKSB7XG4gICAgICBpZiAoY29ubmVjdGVkRmllbGRDb25maWcudHJpZ2dlcnMuaW5jbHVkZXMoZXZlbnRUeXBlKSkge1xuICAgICAgICBjb25uZWN0ZWRGaWVsZCA9IGF3YWl0IHRoaXMuaGFuZGxlQ29ubmVjdGVkRWxlbWVudEZpZWxkQWN0aW9ucyhcbiAgICAgICAgICBjb25uZWN0ZWRGaWVsZENvbmZpZyxcbiAgICAgICAgICBjb25uZWN0ZWRGaWVsZFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoY29ubmVjdGVkRmllbGRDb25maWcsIFwiaGFuZGxlTmVzdGVkRmllbGRzXCIpKSB7XG4gICAgICBpZiAoY29ubmVjdGVkRmllbGRDb25maWcuaGFuZGxlTmVzdGVkRmllbGRzKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlQ29ubmVjdGVkRWxlbWVudHMoXG4gICAgICAgICAgeyBrZXk6IGNvbm5lY3RlZEZpZWxkQ29uZmlnLmtleSB9LFxuICAgICAgICAgIGV2ZW50VHlwZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY3VycmVudEZpZWxkO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBoYW5kbGVDb25uZWN0ZWRFbGVtZW50cyhlOiBhbnksIGV2ZW50VHlwZTogc3RyaW5nKSB7XG4gICAgbGV0IGN1cnJlbnRGaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgZS5rZXkpO1xuXG4gICAgaWYgKGN1cnJlbnRGaWVsZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoY3VycmVudEZpZWxkLCBcImNvbm5lY3RlZEVsZW1lbnRzXCIpKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyhcbiAgICAgICAgICAgIGN1cnJlbnRGaWVsZC5jb25uZWN0ZWRFbGVtZW50cyxcbiAgICAgICAgICAgIFwiY29ubmVjdGVkRmllbGRHcm91cHNcIlxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgeyBjb25uZWN0ZWRGaWVsZEdyb3VwcyB9ID0gY3VycmVudEZpZWxkLmNvbm5lY3RlZEVsZW1lbnRzO1xuICAgICAgICAgIGZvciAoY29uc3QgY29ubmVjdGVkRmllbGRHcm91cENvbmZpZyBvZiBjb25uZWN0ZWRGaWVsZEdyb3Vwcykge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVDb25uZWN0ZWRFbGVtZW50RmllbGRHcm91cChcbiAgICAgICAgICAgICAgY3VycmVudEZpZWxkLFxuICAgICAgICAgICAgICBjb25uZWN0ZWRGaWVsZEdyb3VwQ29uZmlnLFxuICAgICAgICAgICAgICBldmVudFR5cGVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyhcbiAgICAgICAgICAgIGN1cnJlbnRGaWVsZC5jb25uZWN0ZWRFbGVtZW50cyxcbiAgICAgICAgICAgIFwiY29ubmVjdGVkRmllbGRzXCJcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IHsgY29ubmVjdGVkRmllbGRzIH0gPSBjdXJyZW50RmllbGQuY29ubmVjdGVkRWxlbWVudHM7XG4gICAgICAgICAgZm9yIChjb25zdCBjb25uZWN0ZWRGaWVsZENvbmZpZyBvZiBjb25uZWN0ZWRGaWVsZHMpIHtcbiAgICAgICAgICAgIGN1cnJlbnRGaWVsZCA9IGF3YWl0IHRoaXMuaGFuZGxlQ29ubmVjdGVkRWxlbWVudEZpZWxkcyhcbiAgICAgICAgICAgICAgY3VycmVudEZpZWxkLFxuICAgICAgICAgICAgICBjb25uZWN0ZWRGaWVsZENvbmZpZyxcbiAgICAgICAgICAgICAgZXZlbnRUeXBlLFxuICAgICAgICAgICAgICBldmVudFR5cGVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEZpZWxkIGZvciB0aGUgZ2l2ZW4ga2V5IFsnJHtlLmtleX0nXSBpcyBub3QgZm91bmQgd2l0aCBldmVudFR5cGU6ICcke2V2ZW50VHlwZX0nLmBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBoYW5kbGVSZW1vdmVkRmlsZShlOiBhbnkpIHtcbiAgICB0aGlzLnNob3dBcGlMb2FkZXIoKTtcblxuICAgIGlmICh0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tlLmtleV0uZW5hYmxlZCkge1xuICAgICAgdGhpcy5maWxlc1tlLmtleV0gPSBlLmZpbGVzO1xuXG4gICAgICB0aGlzLmZvcm1EYXRhW2Uua2V5XSA9IGZpbHRlckR1cGxpY2F0ZXNGaWxlcyh0aGlzLmZpbGVzW2Uua2V5XSk7XG5cbiAgICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUoXG4gICAgICAgIHtcbiAgICAgICAgICBbZS5rZXldOiB0aGlzLmZvcm1EYXRhW2Uua2V5XVxuICAgICAgICB9LFxuICAgICAgICB7IGVtaXRFdmVudDogZmFsc2UgfVxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fRklFTERfRklMRV9SRU1PVkUsIHtcbiAgICAgIGZpZWxkX2tleTogZS5rZXksXG4gICAgICAuLi4oZS5maWxlPy5uYW1lID8/IHsgZmlsZV9uYW1lOiBlLmZpbGU/Lm5hbWUgfSksXG4gICAgICAuLi4oZS5maWxlPy5zaXplID8/IHsgZmlsZV9zaXplOiBlLmZpbGU/LnNpemUgfSksXG4gICAgICAuLi4oZS5maWxlPy50eXBlID8/IHsgZmlsZV90eXBlOiBlLmZpbGU/LnR5cGUgfSlcbiAgICB9KTtcblxuICAgIHRoaXMuaGlkZUFwaUxvYWRlcigpO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBoYW5kbGVWaWV3QnV0dG9uQ2xpY2soZTogYW55LCBmaWVsZDogYW55KSB7XG4gICAgdGhpcy5vbkNsaWNrVmlld0ZpbGUuZW1pdCh7XG4gICAgICBrZXk6IGZpZWxkPy5rZXksXG4gICAgICB0eXBlOiBmaWVsZD8udHlwZSxcbiAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgZmllbGQsXG4gICAgICAgIGV2ZW50OiBlXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIGhhbmRsZUdldEtleVZhbHVlRmlsZShlOiBhbnkpIHtcbiAgICB0aGlzLnNob3dBcGlMb2FkZXIoKTtcblxuICAgIGNvbnN0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCBlLmtleSk7XG5cbiAgICBjb25zdCB2YWx1ZXMgPSBBcnJheS5pc0FycmF5KGUudmFsdWUpID8gZS52YWx1ZSA6IFtlLnZhbHVlXTtcblxuICAgIGlmIChcbiAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLCBcInByb3BlcnRpZXNcIikgJiZcbiAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLnByb3BlcnRpZXMsIFwidXBsb2FkRmlsZVRvU2VydmVyXCIpICYmXG4gICAgICBmaWVsZC5wcm9wZXJ0aWVzLnVwbG9hZEZpbGVUb1NlcnZlclxuICAgICkge1xuICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgICAgYXdhaXQgdGhpcy51cGxvYWRGaWxlKGZpZWxkLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICAgIHRoaXMudXBkYXRlRmlsZXModmFsdWUsIFwiTE9BRElOR1wiLCBlLmtleSk7XG5cbiAgICAgICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0ZJRUxEX0ZJTEVfQURELCB7XG4gICAgICAgICAgZmllbGRfa2V5OiBlLmtleSxcbiAgICAgICAgICAuLi4oZS5maWxlPy5uYW1lID8/IHsgZmlsZV9uYW1lOiBlLmZpbGU/Lm5hbWUgfSksXG4gICAgICAgICAgLi4uKGUuZmlsZT8uc2l6ZSA/PyB7IGZpbGVfc2l6ZTogZS5maWxlPy5zaXplIH0pLFxuICAgICAgICAgIC4uLihlLmZpbGU/LnR5cGUgPz8geyBmaWxlX3R5cGU6IGUuZmlsZT8udHlwZSB9KVxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB1cGRhdGVkRmlsZSA9IGdldE9iamVjdERlZXBDb3B5KFxuICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgaWQ6IHV1aWR2NCgpLFxuICAgICAgICAgICAgICAgIG5hbWU6IHZhbHVlLm5hbWUsXG4gICAgICAgICAgICAgICAgdHlwZTogdmFsdWUudHlwZSxcbiAgICAgICAgICAgICAgICBzaXplOiB2YWx1ZS5zaXplLFxuICAgICAgICAgICAgICAgIGxhc3RNb2RpZmllZDogdmFsdWUubGFzdE1vZGlmaWVkLFxuICAgICAgICAgICAgICAgIHdlYmtpdFJlbGF0aXZlUGF0aDogdmFsdWUud2Via2l0UmVsYXRpdmVQYXRoXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgRk9STV9WSUVXX1RJTUVSUy5XQUlUX0ZPUl9GSUxFX01FVEFEQVRBX0RFRVBDT1BZKTsgLy8gMTAwMCBtcyA9IDEgc2VjXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnVwZGF0ZUZpbGVzKHVwZGF0ZWRGaWxlLCBcIk5PUk1BTFwiLCBlLmtleSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaGlkZUFwaUxvYWRlcigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBNZXRob2RzIGZvciBDYW1lcmEgcmVsYXRlZCBmaWVsZHMgbGlrZSAnQ0FQVFVSRScgb3IgICdSRUNPUkQnICovXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlT25DbGlja0dldFJlbW92ZWRNZWRpYUZpbGUoZTogYW55KSB7XG4gICAgaWYgKHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2Uua2V5XS5lbmFibGVkKSB7XG4gICAgICB0aGlzLnNob3dBcGlMb2FkZXIoKTtcblxuICAgICAgY29uc3QgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGUua2V5KTtcblxuICAgICAgdGhpcy5yZXNldENhbWVyYSgpO1xuXG4gICAgICB0aGlzLm1lZGlhRmlsZXNbZS5rZXldID0gZS5tZWRpYUZpbGVzO1xuXG4gICAgICB0aGlzLmZvcm1EYXRhW2Uua2V5XSA9IGZpbHRlckR1cGxpY2F0ZXNNZWRpYUZpbGVzKHRoaXMubWVkaWFGaWxlc1tlLmtleV0pO1xuXG4gICAgICB0aGlzLmNhbWVyYURhdGFbZS5rZXldID0gY29udmVydEZvcm1GaWVsZFZhbHVlVG9TdGFuZGFyZEZvcm1hdChcbiAgICAgICAgZmllbGQsXG4gICAgICAgIHRoaXMuZm9ybURhdGFbZS5rZXldXG4gICAgICApO1xuXG4gICAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKFxuICAgICAgICB7XG4gICAgICAgICAgW2Uua2V5XTogdGhpcy5mb3JtRGF0YVtlLmtleV1cbiAgICAgICAgfSxcbiAgICAgICAgeyBlbWl0RXZlbnQ6IGZhbHNlIH1cbiAgICAgICk7XG5cbiAgICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19GSUVMRF9NRURJQV9GSUxFX1JFTU9WRSwge1xuICAgICAgICBmaWVsZF9rZXk6IGUua2V5LFxuICAgICAgICAuLi4oZS5maWxlPy5uYW1lID8/IHsgZmlsZV9uYW1lOiBlLmZpbGU/Lm5hbWUgfSksXG4gICAgICAgIC4uLihlLmZpbGU/LnNpemUgPz8geyBmaWxlX3NpemU6IGUuZmlsZT8uc2l6ZSB9KSxcbiAgICAgICAgLi4uKGUuZmlsZT8udHlwZSA/PyB7IGZpbGVfdHlwZTogZS5maWxlPy50eXBlIH0pXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5nZXRVbnNhdmVkRGF0YVN0YXRlLmVtaXQodHJ1ZSk7XG5cbiAgICAgIGlmIChcbiAgICAgICAgZmllbGQuaXNGb3JtRWxlbWVudCAmJlxuICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJ2YWxpZGF0aW9uXCIpICYmXG4gICAgICAgIGZpZWxkLnZhbGlkYXRpb24udHJpZ2dlcnMuaW5jbHVkZXMoXCJPTl9DSEFOR0VcIilcbiAgICAgICkge1xuICAgICAgICBjb25zdCBydWxlRW5naW5lID0gbmV3IFJ1bGVFbmdpbmUoXG4gICAgICAgICAge1xuICAgICAgICAgICAgRklFTERfQ09ORklHOiBmaWVsZCxcbiAgICAgICAgICAgIEZPUk1fRklFTERTOiB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgICBSRURVWF9EQVRBOiB0aGlzLnJlZHV4RGF0YSxcbiAgICAgICAgICAgIENBTUVSQV9EQVRBOiB0aGlzLmNhbWVyYURhdGEsXG4gICAgICAgICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICAgICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YSxcbiAgICAgICAgICAgIEVYVFJBX0RBVEE6IHRoaXMuZXh0cmFEYXRhXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKVxuICAgICAgICApO1xuXG4gICAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgYXdhaXQgcnVsZUVuZ2luZS5ydW4oZmllbGQudmFsaWRhdGlvbik7XG4gICAgICAgIH0pKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgZmllbGQuaXNGb3JtRWxlbWVudCAmJlxuICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJjb25uZWN0ZWRFbGVtZW50c1wiKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlQ29ubmVjdGVkRWxlbWVudHMoXG4gICAgICAgICAge1xuICAgICAgICAgICAga2V5OiBmaWVsZC5rZXksXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS52YWx1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJPTl9DSEFOR0VcIlxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5oaWRlQXBpTG9hZGVyKCk7XG4gICAgICB9LCA1MDApO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgaGFuZGxlT25DbGlja0lucHV0Q2FtZXJhKGU6IGFueSwgZmllbGQ6IGFueSkge1xuICAgIHRoaXMubG9hZGVyU2VydmljZS5zaG93KHtcbiAgICAgIGxvYWRlclRleHQ6IFwiTG9hZGluZyBDYW1lcmEuLi5cIixcbiAgICAgIGZ1bGxzY3JlZW46IHRydWVcbiAgICB9KTtcblxuICAgIGNvbnN0IGZpZWxkS2V5ID0gZmllbGQua2V5O1xuICAgIGNvbnN0IGZpZWxkQ2FtZXJhQ29uZmlnID0gZmllbGQ/LnByb3BlcnRpZXMgPz8ge307XG5cbiAgICB0aGlzLmFjdGl2ZUNhbWVyYVR5cGUgPSBmaWVsZD8udHlwZS50b1VwcGVyQ2FzZSgpIHx8IFwiXCI7XG4gICAgdGhpcy5hY3RpdmVDYW1lcmFGaWVsZEtleSA9IGZpZWxkS2V5O1xuXG4gICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0ZJRUxEX0NBTUVSQV9CVVRUT05fQ0xJQ0ssIHtcbiAgICAgIGZpZWxkX2tleTogZmllbGQua2V5LFxuICAgICAgZmllbGRfdHlwZTogZmllbGQudHlwZSxcbiAgICAgIGNhbWVyYV90eXBlOiB0aGlzLmFjdGl2ZUNhbWVyYVR5cGVcbiAgICB9KTtcblxuICAgIHN3aXRjaCAodGhpcy5hY3RpdmVDYW1lcmFUeXBlKSB7XG4gICAgICBjYXNlIFwiQ0FQVFVSRVwiOlxuICAgICAgICB0aGlzLmFjdGl2ZUNhbWVyYUNvbmZpZyA9IG1lcmdlT2JqZWN0c0RlZXAoW1xuICAgICAgICAgIEZJRUxEX1BST1BFUlRJRVMuY2FwdHVyZSxcbiAgICAgICAgICBmaWVsZENhbWVyYUNvbmZpZ1xuICAgICAgICBdKTtcblxuICAgICAgICB0aGlzLmFjdGl2ZUNhbWVyYURhdGEgPSB7fTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5hY3RpdmVDYW1lcmFDb25maWc/LmZlYXR1cmVzPy53YXRlcm1hcms/LmlzRW5hYmxlZCAmJlxuICAgICAgICAgICF0aGlzLmFjdGl2ZUNhbWVyYUNvbmZpZy5mZWF0dXJlcz8ud2F0ZXJtYXJrPy5pc1dhdGVybWFya0Zyb21TZXJ2ZXJcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgY2FtZXJhSGVscGVyID0gbmV3IENhbWVyYUhlbHBlcihmaWVsZCwge1xuICAgICAgICAgICAgRk9STV9GSUVMRFM6IHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgICAgICAgIEZJRUxEX0NPTkZJRzogZmllbGQsXG4gICAgICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgICBSRURVWF9EQVRBOiB0aGlzLnJlZHV4RGF0YSxcbiAgICAgICAgICAgIENBTUVSQV9EQVRBOiB0aGlzLmNhbWVyYURhdGEsXG4gICAgICAgICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICAgICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YSxcbiAgICAgICAgICAgIEVYVFJBX0RBVEE6IHRoaXMuZXh0cmFEYXRhXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICB0aGlzLmFjdGl2ZUNhbWVyYURhdGEgPSB7XG4gICAgICAgICAgICB3YXRlcm1hcms6IGF3YWl0IGNhbWVyYUhlbHBlci5nZXRDYW1lcmFXYXRlcm1hcmtEYXRhKClcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIlJFQ09SRFwiOlxuICAgICAgICB0aGlzLmFjdGl2ZUNhbWVyYUNvbmZpZyA9IG1lcmdlT2JqZWN0c0RlZXAoW1xuICAgICAgICAgIEZJRUxEX1BST1BFUlRJRVMucmVjb3JkLFxuICAgICAgICAgIGZpZWxkQ2FtZXJhQ29uZmlnXG4gICAgICAgIF0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMucmVzZXRDYW1lcmEoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29uZmlnIGFuZCBvdGhlciBkYXRhIGlzIHNldCBub3csIHNvIHdlIGNhbiBzaG93IHRoZSBjYW1lcmEuXG4gICAgICovXG4gICAgdGhpcy5pc1Nob3dDYW1lcmEgPSB0cnVlO1xuXG4gICAgdGhpcy5sb2FkZXJTZXJ2aWNlLmhpZGUoKTtcbiAgfVxuXG4gIC8qKiBLd2lrSUQgQ2FtZXJhIE1ldGhvZHMgKi9cbiAgLyoqIENhbWVyYVR5cGUgPSBDQVBUVVJFICovXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgc2V0Q2FtZXJhTWVkaWEobWVkaWE6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCB0aGlzLmFjdGl2ZUNhbWVyYUZpZWxkS2V5KTtcblxuICAgIGlmIChcbiAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLCBcInByb3BlcnRpZXNcIikgJiZcbiAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLnByb3BlcnRpZXMsIFwidXBsb2FkRmlsZVRvU2VydmVyXCIpICYmXG4gICAgICBmaWVsZC5wcm9wZXJ0aWVzLnVwbG9hZEZpbGVUb1NlcnZlclxuICAgICkge1xuICAgICAgYXdhaXQgdGhpcy51cGxvYWRGaWxlKGZpZWxkLCBtZWRpYSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGFjdGl2ZUNhbWVyYURhdGEgPSB0aGlzLmFjdGl2ZUNhbWVyYURhdGE7XG5cbiAgICAgIHRoaXMucmVzZXRDYW1lcmEoKTtcblxuICAgICAgbGV0IHVwZGF0ZWRNZWRpYTogYW55ID0ge307XG5cbiAgICAgIHN3aXRjaCAoZmllbGQudHlwZSkge1xuICAgICAgICBjYXNlIEVGaWVsZFR5cGUuQ0FQVFVSRTpcbiAgICAgICAgICB1cGRhdGVkTWVkaWEgPSB7XG4gICAgICAgICAgICAuLi4oaXNOb3RFbXB0eVZhbHVlKGFjdGl2ZUNhbWVyYURhdGEpID8gYWN0aXZlQ2FtZXJhRGF0YSA6IHt9KSxcbiAgICAgICAgICAgIGltYWdlOiBtZWRpYVxuICAgICAgICAgIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRUZpZWxkVHlwZS5SRUNPUkQ6XG4gICAgICAgICAgdXBkYXRlZE1lZGlhID0ge1xuICAgICAgICAgICAgLi4uKGlzTm90RW1wdHlWYWx1ZShhY3RpdmVDYW1lcmFEYXRhKSA/IGFjdGl2ZUNhbWVyYURhdGEgOiB7fSksXG4gICAgICAgICAgICB2aWRlbzogbWVkaWFcbiAgICAgICAgICB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmZvcm1EYXRhW2ZpZWxkLmtleV0gPSBnZXRPYmplY3REZWVwQ29weShbdXBkYXRlZE1lZGlhXSk7XG4gICAgICB0aGlzLmNhbWVyYURhdGFbZmllbGQua2V5XSA9IGdldE9iamVjdERlZXBDb3B5KHVwZGF0ZWRNZWRpYSk7XG4gICAgICB0aGlzLm1lZGlhRmlsZXNbZmllbGQua2V5XSA9IGdldE9iamVjdERlZXBDb3B5KFt1cGRhdGVkTWVkaWFdKTtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0ucGF0Y2hWYWx1ZShcbiAgICAgICAgZ2V0T2JqZWN0RGVlcENvcHkoW3VwZGF0ZWRNZWRpYV0pLFxuICAgICAgICB7XG4gICAgICAgICAgZW1pdEV2ZW50OiBmYWxzZSxcbiAgICAgICAgICBvbmx5U2VsZjogZmFsc2VcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUoXG4gICAgICAgIHtcbiAgICAgICAgICBbZmllbGQua2V5XTogZ2V0T2JqZWN0RGVlcENvcHkoW3VwZGF0ZWRNZWRpYV0pXG4gICAgICAgIH0sXG4gICAgICAgIHsgZW1pdEV2ZW50OiBmYWxzZSB9XG4gICAgICApO1xuICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtcbiAgICAgICAgZW1pdEV2ZW50OiBmYWxzZVxuICAgICAgfSk7XG4gICAgICB0aGlzLmZvcm1Hcm91cC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtcbiAgICAgICAgZW1pdEV2ZW50OiBmYWxzZVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuZ2V0VW5zYXZlZERhdGFTdGF0ZS5lbWl0KHRydWUpO1xuXG4gICAgICBpZiAoXG4gICAgICAgIGZpZWxkLmlzRm9ybUVsZW1lbnQgJiZcbiAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwidmFsaWRhdGlvblwiKSAmJlxuICAgICAgICBmaWVsZC52YWxpZGF0aW9uLnRyaWdnZXJzLmluY2x1ZGVzKFwiT05fQ0hBTkdFXCIpXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgcnVsZUVuZ2luZSA9IG5ldyBSdWxlRW5naW5lKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIEZJRUxEX0NPTkZJRzogZmllbGQsXG4gICAgICAgICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgICAgICAgUkVEVVhfREFUQTogdGhpcy5yZWR1eERhdGEsXG4gICAgICAgICAgICBDQU1FUkFfREFUQTogdGhpcy5jYW1lcmFEYXRhLFxuICAgICAgICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGEsXG4gICAgICAgICAgICBFWFRSQV9EQVRBOiB0aGlzLmV4dHJhRGF0YVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcbiAgICAgICAgKTtcblxuICAgICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGF3YWl0IHJ1bGVFbmdpbmUucnVuKGZpZWxkLnZhbGlkYXRpb24pO1xuICAgICAgICB9KSgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIGZpZWxkLmlzRm9ybUVsZW1lbnQgJiZcbiAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwiY29ubmVjdGVkRWxlbWVudHNcIilcbiAgICAgICkge1xuICAgICAgICB0aGlzLmhhbmRsZUNvbm5lY3RlZEVsZW1lbnRzKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGtleTogZmllbGQua2V5LFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0udmFsdWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiT05fQ0hBTkdFXCJcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0ZJRUxEX0ZJTEVfQURELCB7XG4gICAgICAgIGZpZWxkX2tleTogZmllbGQua2V5LFxuICAgICAgICBmaWVsZF90eXBlOiBmaWVsZC50eXBlXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKiogQ2FtZXJhIENvbW1vbiBNZXRob2RzICovXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlR2V0Q2FtZXJhTWVkaWEoZTogYW55LCBhY3RpdmVDYW1lcmFUeXBlOiBcIkNBUFRVUkVcIiB8IFwiUkVDT1JEXCIpIHtcbiAgICBzd2l0Y2ggKGFjdGl2ZUNhbWVyYVR5cGUpIHtcbiAgICAgIGNhc2UgXCJDQVBUVVJFXCI6XG4gICAgICAgIHRoaXMuc2hvd0FwaUxvYWRlcigpO1xuXG4gICAgICAgIHRoaXMuYWN0aXZlQ2FtZXJhSW1hZ2UgPSBcIlwiO1xuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIFByaW9yaXR5IG9mIEltYWdlIHRvIFNldCBmb3IgQ29uZmlnIEJhc2VkXG4gICAgICAgICAgICogMS4gTWFza2VkXG4gICAgICAgICAgICogMi4gQ3JvcHBlZFxuICAgICAgICAgICAqIDMuIE9yaWdpbmFsXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBJZiBubyBtYXNrZWQgb3IgY3JvcHBlZCBpbWFnZSBpcyBhdmFpbGFibGUgdGhlbiBkaXJlY3RseSBzZXQgT3JpZ2luYWwgSW1hZ2VcbiAgICAgICAgICAgKi9cbiAgICAgICAgICBjb25zdCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KFxuICAgICAgICAgICAgdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgICAgdGhpcy5hY3RpdmVDYW1lcmFGaWVsZEtleVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBjb25zdCBpbWFnZSA9IGZpZWxkLnByb3BlcnRpZXM/LmlzTWFza2VkSW1hZ2VcbiAgICAgICAgICAgID8gZT8ubWFza2VkSW1hZ2UgPz8gZT8ub3JpZ2luYWxJbWFnZVxuICAgICAgICAgICAgOiBmaWVsZC5wcm9wZXJ0aWVzPy5pc0Nyb3BwZWRJbWFnZVxuICAgICAgICAgICAgICA/IGU/LmNyb3BwZWRJbWFnZSA/PyBlPy5vcmlnaW5hbEltYWdlXG4gICAgICAgICAgICAgIDogZT8ub3JpZ2luYWxJbWFnZTtcblxuICAgICAgICAgIGNvbnN0IGlzU2hvd0ltYWdlUHJldmlldyA9XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUNhbWVyYUNvbmZpZz8uY2FtZXJhQ29uZmlnPy5vdGhlcnM/LnByZXZpZXc/LnNob3c7XG5cbiAgICAgICAgICBpZiAoaXNTaG93SW1hZ2VQcmV2aWV3KSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUNhbWVyYUltYWdlID0gaW1hZ2U7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0Q2FtZXJhTWVkaWEoaW1hZ2UpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuaGlkZUFwaUxvYWRlcigpO1xuICAgICAgICB9LCBGT1JNX1ZJRVdfVElNRVJTLldBSVRfRk9SX0tXSUtJRF9DQU1FUkFfVE9fTE9BRCk7IC8vIERlbGF5IGlzIGFkZGVkIGR1ZSB0byBpc3N1cyB3aXRoIEt3aWtJRCBDYW1lcmEgbm90IGJlaW5nIGFibGUgdG8gaGFuZGxlIHRvIGZhc3QgcHJvY2Vzc2luZy5cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiUkVDT1JEXCI6XG4gICAgICAgIHRoaXMuc2hvd0FwaUxvYWRlcigpO1xuXG4gICAgICAgIHRoaXMuYWN0aXZlQ2FtZXJhVmlkZW8gPSBcIlwiO1xuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIFByaW9yaXR5IG9mIEltYWdlIHRvIFNldCBmb3IgQ29uZmlnIEJhc2VkXG4gICAgICAgICAgICogMS4gT3JpZ2luYWxcbiAgICAgICAgICAgKi9cbiAgICAgICAgICBjb25zdCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KFxuICAgICAgICAgICAgdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgICAgdGhpcy5hY3RpdmVDYW1lcmFGaWVsZEtleVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBjb25zdCB2aWRlbyA9IGU/Lm9yaWdpbmFsVmlkZW87XG5cbiAgICAgICAgICBjb25zdCBpc1Nob3dWaWRlb1ByZXZpZXcgPVxuICAgICAgICAgICAgdGhpcy5hY3RpdmVDYW1lcmFDb25maWc/Lm90aGVycz8ucHJldmlldz8uc2hvdztcblxuICAgICAgICAgIGlmIChpc1Nob3dWaWRlb1ByZXZpZXcpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlQ2FtZXJhVmlkZW8gPSB2aWRlbztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXRDYW1lcmFNZWRpYSh2aWRlbyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5oaWRlQXBpTG9hZGVyKCk7XG4gICAgICAgIH0sIEZPUk1fVklFV19USU1FUlMuV0FJVF9GT1JfS1dJS0lEX0NBTUVSQV9UT19MT0FEKTsgLy8gRGVsYXkgaXMgYWRkZWQgZHVlIHRvIGlzc3VzIHdpdGggS3dpa0lEIENhbWVyYSBub3QgYmVpbmcgYWJsZSB0byBoYW5kbGUgdG8gZmFzdCBwcm9jZXNzaW5nLlxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlT25DbGlja1NhdmVDYW1lcmFNZWRpYShlOiBhbnksIGFjdGl2ZUNhbWVyYVR5cGU6IFwiQ0FQVFVSRVwiIHwgXCJSRUNPUkRcIikge1xuICAgIHRoaXMuc2hvd0FwaUxvYWRlcigpO1xuXG4gICAgY29uc3QgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIHRoaXMuYWN0aXZlQ2FtZXJhRmllbGRLZXkpO1xuXG4gICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0NBTUVSQV9TQVZFX0JVVFRPTl9DTElDSywge1xuICAgICAgZmllbGRfa2V5OiBmaWVsZC5rZXksXG4gICAgICBmaWVsZF90eXBlOiBmaWVsZC50eXBlLFxuICAgICAgY2FtZXJhX3R5cGU6IGFjdGl2ZUNhbWVyYVR5cGVcbiAgICB9KTtcblxuICAgIHN3aXRjaCAoYWN0aXZlQ2FtZXJhVHlwZSkge1xuICAgICAgY2FzZSBcIkNBUFRVUkVcIjpcbiAgICAgICAgdGhpcy5hY3RpdmVDYW1lcmFJbWFnZSA9IFwiXCI7XG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogUHJpb3JpdHkgb2YgSW1hZ2UgdG8gU2V0IGZvciBDb25maWcgQmFzZWRcbiAgICAgICAgICAgKiAxLiBNYXNrZWRcbiAgICAgICAgICAgKiAyLiBDcm9wcGVkXG4gICAgICAgICAgICogMy4gT3JpZ2luYWxcbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIElmIG5vIG1hc2tlZCBvciBjcm9wcGVkIGltYWdlIGlzIGF2YWlsYWJsZSB0aGVuIGRpcmVjdGx5IHNldCBPcmlnaW5hbCBJbWFnZVxuICAgICAgICAgICAqL1xuICAgICAgICAgIGNvbnN0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkoXG4gICAgICAgICAgICB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUNhbWVyYUZpZWxkS2V5XG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGNvbnN0IGltYWdlID0gZmllbGQucHJvcGVydGllcz8uaXNNYXNrZWRJbWFnZVxuICAgICAgICAgICAgPyBlPy5tYXNrZWRJbWFnZSA/PyBlPy5vcmlnaW5hbEltYWdlXG4gICAgICAgICAgICA6IGZpZWxkLnByb3BlcnRpZXM/LmlzQ3JvcHBlZEltYWdlXG4gICAgICAgICAgICAgID8gZT8uY3JvcHBlZEltYWdlID8/IGU/Lm9yaWdpbmFsSW1hZ2VcbiAgICAgICAgICAgICAgOiBlPy5vcmlnaW5hbEltYWdlO1xuXG4gICAgICAgICAgdGhpcy5zZXRDYW1lcmFNZWRpYShpbWFnZSk7XG5cbiAgICAgICAgICB0aGlzLmhpZGVBcGlMb2FkZXIoKTtcbiAgICAgICAgfSwgRk9STV9WSUVXX1RJTUVSUy5XQUlUX0ZPUl9LV0lLSURfQ0FNRVJBX1RPX0xPQUQpOyAvLyBEZWxheSBpcyBhZGRlZCBkdWUgdG8gaXNzdXMgd2l0aCBLd2lrSUQgQ2FtZXJhIG5vdCBiZWluZyBhYmxlIHRvIGhhbmRsZSB0byBmYXN0IHByb2Nlc3NpbmcuXG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIlJFQ09SRFwiOlxuICAgICAgICB0aGlzLmFjdGl2ZUNhbWVyYVZpZGVvID0gXCJcIjtcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBQcmlvcml0eSBvZiBJbWFnZSB0byBTZXQgZm9yIENvbmZpZyBCYXNlZFxuICAgICAgICAgICAqIDEuIE9yaWdpbmFsXG4gICAgICAgICAgICovXG4gICAgICAgICAgY29uc3QgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleShcbiAgICAgICAgICAgIHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlQ2FtZXJhRmllbGRLZXlcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgY29uc3QgdmlkZW8gPSBlPy5vcmlnaW5hbFZpZGVvO1xuXG4gICAgICAgICAgdGhpcy5zZXRDYW1lcmFNZWRpYSh2aWRlbyk7XG5cbiAgICAgICAgICB0aGlzLmhpZGVBcGlMb2FkZXIoKTtcbiAgICAgICAgfSwgRk9STV9WSUVXX1RJTUVSUy5XQUlUX0ZPUl9LV0lLSURfQ0FNRVJBX1RPX0xPQUQpOyAvLyBEZWxheSBpcyBhZGRlZCBkdWUgdG8gaXNzdXMgd2l0aCBLd2lrSUQgQ2FtZXJhIG5vdCBiZWluZyBhYmxlIHRvIGhhbmRsZSB0byBmYXN0IHByb2Nlc3NpbmcuXG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBoYW5kbGVPbkNsaWNrQ2FtZXJhQmFjayhlOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgdGhpcy5hY3RpdmVDYW1lcmFGaWVsZEtleSk7XG5cbiAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fQ0FNRVJBX0JBQ0tfQlVUVE9OX0NMSUNLLCB7XG4gICAgICBmaWVsZF9rZXk6IGZpZWxkLmtleSxcbiAgICAgIGZpZWxkX3R5cGU6IGZpZWxkLnR5cGVcbiAgICB9KTtcblxuICAgIHRoaXMucmVzZXRDYW1lcmEoKTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlT25DbGlja0NhbWVyYUNsb3NlKGU6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCB0aGlzLmFjdGl2ZUNhbWVyYUZpZWxkS2V5KTtcblxuICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19DQU1FUkFfQ0xPU0VfQlVUVE9OX0NMSUNLLCB7XG4gICAgICBmaWVsZF9rZXk6IGZpZWxkLmtleSxcbiAgICAgIGZpZWxkX3R5cGU6IGZpZWxkLnR5cGVcbiAgICB9KTtcblxuICAgIHRoaXMucmVzZXRDYW1lcmEoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIHVwZGF0ZSB0aGUgZmlsZXMgYXJyYXkgd2l0aCB0aGUgbmV3IGZpbGUgYW5kIGl0J3Mgc3RhdGUgYW5kIHJlc3BvbnNlIGZyb20gdGhlIGFwaSBvZiB1cGxvYWRpbmcgdGhlIGZpbGUuXG4gICAqL1xuICBAbG9nTWV0aG9kXG4gIHVwZGF0ZUZpbGVzKGZpbGU6IGFueSwgc3RhdGU6IHN0cmluZywga2V5OiBzdHJpbmcpIHtcbiAgICBjb25zdCBmaWxlV2l0aFN0YXRlID0gbWVyZ2VPYmplY3RzKGZpbGUgYXMgYW55LCB7IHN0YXRlIH0pO1xuXG4gICAgY29uc3QgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGtleSk7XG5cbiAgICBpZiAoZmllbGQucHJvcGVydGllcz8ubXVsdGlwbGUpIHtcbiAgICAgIC8vIElmIGZpZWxkLnByb3BlcnRpZXM/Lm11bHRpcGxlIGlzIHRydWUsIGl0IG1lYW5zIG11bHRpcGxlIGZpbGVzIGFyZSBhbGxvd2VkIGZvciB0aGlzIGZpZWxkLlxuICAgICAgLy8gVXBkYXRlIHRoZSBleGlzdGluZyBmaWxlcyBhcnJheSBmb3IgdGhlIHNwZWNpZmljIGtleSB3aXRoIHRoZSBuZXcgZmlsZS5cbiAgICAgIGNvbnN0IHVwZGF0ZWRGaWxlcyA9IFtcbiAgICAgICAgLi4udGhpcy5maWxlc1trZXldLmZpbHRlcihcbiAgICAgICAgICAoZikgPT4gZi5uYW1lICE9PSBmaWxlV2l0aFN0YXRlLm5hbWUgfHwgZi5zaXplICE9PSBmaWxlV2l0aFN0YXRlLnNpemVcbiAgICAgICAgKSxcbiAgICAgICAgZmlsZVdpdGhTdGF0ZVxuICAgICAgXTtcblxuICAgICAgLy8gQXBwbHkgdGhlIGZpbHRlckR1cGxpY2F0ZXNGaWxlcyBmdW5jdGlvbiB0byBlbnN1cmUgdW5pcXVlbmVzcyBpbiB0aGUgdXBkYXRlZEZpbGVzIGFycmF5LlxuICAgICAgdGhpcy5maWxlc1trZXldID0gZmlsdGVyRHVwbGljYXRlc0ZpbGVzKHVwZGF0ZWRGaWxlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIGZpZWxkLnByb3BlcnRpZXM/Lm11bHRpcGxlIGlzIGZhbHNlLCBvbmx5IG9uZSBmaWxlIGlzIGFsbG93ZWQgZm9yIHRoaXMgZmllbGQuXG4gICAgICAvLyBSZXBsYWNlIHRoZSBleGlzdGluZyBmaWxlcyBhcnJheSBmb3IgdGhlIHNwZWNpZmljIGtleSB3aXRoIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIG5ldyBmaWxlLlxuICAgICAgdGhpcy5maWxlc1trZXldID0gW2ZpbGVXaXRoU3RhdGVdO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSB0aGUgZm9ybURhdGEgYW5kIGZvcm1Hcm91cCBjb250cm9scyBmb3IgdGhlIHNwZWNpZmljIGtleSB3aXRoIHRoZSBub3JtYWxGaWxlcyBhcnJheS5cbiAgICBjb25zdCBub3JtYWxGaWxlcyA9IHRoaXMuZmlsZXNba2V5XS5maWx0ZXIoKGZpbGUpID0+IHtcbiAgICAgIHJldHVybiBmaWxlLnN0YXRlID09PSBcIk5PUk1BTFwiO1xuICAgIH0pO1xuXG4gICAgdGhpcy5mb3JtRGF0YVtrZXldID0gbm9ybWFsRmlsZXM7XG4gICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNba2V5XS5wYXRjaFZhbHVlKG5vcm1hbEZpbGVzLCB7XG4gICAgICBlbWl0RXZlbnQ6IGZhbHNlLFxuICAgICAgb25seVNlbGY6IGZhbHNlXG4gICAgfSk7XG4gICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZShcbiAgICAgIHtcbiAgICAgICAgW2tleV06IG5vcm1hbEZpbGVzXG4gICAgICB9LFxuICAgICAgeyBlbWl0RXZlbnQ6IGZhbHNlIH1cbiAgICApO1xuXG4gICAgdGhpcy5nZXRVbnNhdmVkRGF0YVN0YXRlLmVtaXQodHJ1ZSk7XG5cbiAgICBpZiAoXG4gICAgICBmaWVsZC5pc0Zvcm1FbGVtZW50ICYmXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJ2YWxpZGF0aW9uXCIpICYmXG4gICAgICBmaWVsZC52YWxpZGF0aW9uLnRyaWdnZXJzLmluY2x1ZGVzKFwiT05fQ0hBTkdFXCIpXG4gICAgKSB7XG4gICAgICBjb25zdCBydWxlRW5naW5lID0gbmV3IFJ1bGVFbmdpbmUoXG4gICAgICAgIHtcbiAgICAgICAgICBGSUVMRF9DT05GSUc6IGZpZWxkLFxuICAgICAgICAgIEZPUk1fRklFTERTOiB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgICAgIFJFRFVYX0RBVEE6IHRoaXMucmVkdXhEYXRhLFxuICAgICAgICAgIENBTUVSQV9EQVRBOiB0aGlzLmNhbWVyYURhdGEsXG4gICAgICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YSxcbiAgICAgICAgICBFWFRSQV9EQVRBOiB0aGlzLmV4dHJhRGF0YVxuICAgICAgICB9LFxuICAgICAgICB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKVxuICAgICAgKTtcblxuICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgcnVsZUVuZ2luZS5ydW4oZmllbGQudmFsaWRhdGlvbik7XG4gICAgICB9KSgpO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGZpZWxkLmlzRm9ybUVsZW1lbnQgJiZcbiAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLCBcImNvbm5lY3RlZEVsZW1lbnRzXCIpXG4gICAgKSB7XG4gICAgICB0aGlzLmhhbmRsZUNvbm5lY3RlZEVsZW1lbnRzKFxuICAgICAgICB7XG4gICAgICAgICAga2V5OiBmaWVsZC5rZXksXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0udmFsdWVcbiAgICAgICAgfSxcbiAgICAgICAgXCJPTl9DSEFOR0VcIlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBpcyBhIGFwaSB1cGxvYWQgbW9ja2luZyBtZXRob2QuIFNldCdzIHRvIGxvYWRpbmcgYXQgZmlyc3QgYXQgcG9pbnQgd2hlbiBBUEkgaXMgY2FsbGVkIGFuZCB0aGVuIGNoYW5nZXMgdGhlIHN0YXR1cyB0byByYW5kb20gc3RhdHVzIGFmdGVyIDIgc2Vjb25kcyBvZiBkZWxheSBzaG93aW5nIGEgbW9ja2VkIHJlc3BvbnNlIGZyb20gQVBJLlxuICAgKi9cbiAgQGxvZ01ldGhvZFxuICBhc3luYyB1cGxvYWRGaWxlKGZpZWxkOiBhbnksIGZpbGU6IGFueSkge1xuICAgIHN3aXRjaCAoZmllbGQudHlwZSkge1xuICAgICAgY2FzZSBFRmllbGRUeXBlLkZJTEU6XG4gICAgICAgIHRoaXMudXBkYXRlRmlsZXMoZmlsZSwgXCJMT0FESU5HXCIsIGZpZWxkLmtleSk7XG5cbiAgICAgICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0FQSV9SRVFVRVNUX1VQTE9BRF9GSUxFLCB7XG4gICAgICAgICAgZmllbGRfa2V5OiBmaWVsZC5rZXksXG4gICAgICAgICAgZmllbGRfdHlwZTogZmllbGQudHlwZSxcbiAgICAgICAgICByZXF1ZXN0OiBnZXRPYmplY3REZWVwQ29weSh7XG4gICAgICAgICAgICBuYW1lOiBmaWxlLm5hbWUsXG4gICAgICAgICAgICB0eXBlOiBmaWxlLnR5cGUsXG4gICAgICAgICAgICBzaXplOiBmaWxlLnNpemUsXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IGZpbGUubGFzdE1vZGlmaWVkLFxuICAgICAgICAgICAgd2Via2l0UmVsYXRpdmVQYXRoOiBmaWxlLndlYmtpdFJlbGF0aXZlUGF0aFxuICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIEFjdHVhbCBBUEkgQ2FsbFxuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMub25DbGlja0FwaUNhbGwuZW1pdCh7XG4gICAgICAgICAgICBrZXk6IGZpZWxkLmtleSxcbiAgICAgICAgICAgIHR5cGU6IGZpZWxkLnR5cGUsXG4gICAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICAgIGZpbGUsXG4gICAgICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICAgICAgbmFtZTogZmlsZS5uYW1lLFxuICAgICAgICAgICAgICAgIHR5cGU6IGZpbGUudHlwZSxcbiAgICAgICAgICAgICAgICBzaXplOiBmaWxlLnNpemUsXG4gICAgICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiBmaWxlLmxhc3RNb2RpZmllZCxcbiAgICAgICAgICAgICAgICB3ZWJraXRSZWxhdGl2ZVBhdGg6IGZpbGUud2Via2l0UmVsYXRpdmVQYXRoXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVGaWxlcyhmaWxlLCBcIkVSUk9SXCIsIGZpZWxkLmtleSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVGaWVsZFR5cGUuQ0FQVFVSRToge1xuICAgICAgICAvLyBBY3R1YWwgQVBJIENhbGxcblxuICAgICAgICBsZXQgb2NyUGF5bG9hZDogYW55ID0ge307XG4gICAgICAgIGlmIChpc05vdEVtcHR5VmFsdWUoZmllbGQ/LnByb3BlcnRpZXM/LmZlYXR1cmVzPy5vY3IpKSB7XG4gICAgICAgICAgb2NyUGF5bG9hZCA9IGZpZWxkLnByb3BlcnRpZXMuZmVhdHVyZXMub2NyO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmFjZW1hdGNoUGF5bG9hZDogYW55ID0ge307XG4gICAgICAgIGlmIChpc05vdEVtcHR5VmFsdWUoZmllbGQ/LnByb3BlcnRpZXM/LmZlYXR1cmVzPy5mYWNlbWF0Y2gpKSB7XG4gICAgICAgICAgZmFjZW1hdGNoUGF5bG9hZC5pc0VuYWJsZWQgPVxuICAgICAgICAgICAgZmllbGQucHJvcGVydGllcy5mZWF0dXJlcy5mYWNlbWF0Y2guaXNFbmFibGVkO1xuXG4gICAgICAgICAgZmFjZW1hdGNoUGF5bG9hZC5pc0ZhY2VtYXRjaEZyb21TZXJ2ZXIgPVxuICAgICAgICAgICAgZmllbGQucHJvcGVydGllcy5mZWF0dXJlcy5mYWNlbWF0Y2guaXNGYWNlbWF0Y2hGcm9tU2VydmVyO1xuXG4gICAgICAgICAgZmFjZW1hdGNoUGF5bG9hZC5pbWFnZXMgPSBbXTtcbiAgICAgICAgICBjb25zdCBmYWNlbWF0Y2hTb3VyY2VzID0gZmllbGQucHJvcGVydGllcy5mZWF0dXJlcy5mYWNlbWF0Y2guc291cmNlcztcblxuICAgICAgICAgIGZvciAoY29uc3QgZmFjZW1hdGNoU291cmNlQ29uZmlnIG9mIGZhY2VtYXRjaFNvdXJjZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IG5ldyBTb3VyY2Uoe1xuICAgICAgICAgICAgICBGSUVMRF9DT05GSUc6IGZpZWxkLFxuICAgICAgICAgICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgICAgIFJFRFVYX0RBVEE6IHRoaXMucmVkdXhEYXRhLFxuICAgICAgICAgICAgICBDQU1FUkFfREFUQTogdGhpcy5jYW1lcmFEYXRhLFxuICAgICAgICAgICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICAgICAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGEsXG4gICAgICAgICAgICAgIEVYVFJBX0RBVEE6IHRoaXMuZXh0cmFEYXRhXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3Qgc291cmNlVmFsdWUgPSBhd2FpdCBzb3VyY2UuZ2V0VmFsdWVGcm9tU291cmNlKFxuICAgICAgICAgICAgICBmYWNlbWF0Y2hTb3VyY2VDb25maWdcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNvbnN0IGZhY2VtYXRjaFNvdXJjZSA9IHtcbiAgICAgICAgICAgICAga2V5OiBmYWNlbWF0Y2hTb3VyY2VDb25maWcuaWQsXG4gICAgICAgICAgICAgIHZhbHVlOiBzb3VyY2VWYWx1ZVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgZmFjZW1hdGNoUGF5bG9hZC5pbWFnZXMucHVzaChmYWNlbWF0Y2hTb3VyY2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHdhdGVybWFya1BheWxvYWQ6IGFueSA9IHt9O1xuICAgICAgICBpZiAoaXNOb3RFbXB0eVZhbHVlKGZpZWxkPy5wcm9wZXJ0aWVzPy5mZWF0dXJlcz8ud2F0ZXJtYXJrKSkge1xuICAgICAgICAgIHdhdGVybWFya1BheWxvYWQuaXNFbmFibGVkID1cbiAgICAgICAgICAgIGZpZWxkLnByb3BlcnRpZXMuZmVhdHVyZXMud2F0ZXJtYXJrLmlzRW5hYmxlZDtcblxuICAgICAgICAgIHdhdGVybWFya1BheWxvYWQuaXNXYXRlcm1hcmtGcm9tU2VydmVyID1cbiAgICAgICAgICAgIGZpZWxkLnByb3BlcnRpZXMuZmVhdHVyZXMud2F0ZXJtYXJrLmlzV2F0ZXJtYXJrRnJvbVNlcnZlcjtcblxuICAgICAgICAgIHdhdGVybWFya1BheWxvYWQuZGF0YSA9IFtdO1xuICAgICAgICAgIGNvbnN0IHdhdGVybWFya1NvdXJjZXMgPSBmaWVsZC5wcm9wZXJ0aWVzLmZlYXR1cmVzLndhdGVybWFyay5zb3VyY2VzO1xuXG4gICAgICAgICAgd2F0ZXJtYXJrUGF5bG9hZC5jb25maWcgPSBmaWVsZC5wcm9wZXJ0aWVzLmZlYXR1cmVzLndhdGVybWFyay5zb3VyY2VzO1xuXG4gICAgICAgICAgZm9yIChjb25zdCB3YXRlcm1hcmtTb3VyY2VDb25maWcgb2Ygd2F0ZXJtYXJrU291cmNlcykge1xuICAgICAgICAgICAgY29uc3Qgc291cmNlID0gbmV3IFNvdXJjZSh7XG4gICAgICAgICAgICAgIEZJRUxEX0NPTkZJRzogZmllbGQsXG4gICAgICAgICAgICAgIEZPUk1fRklFTERTOiB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgICAgIEZPUk1fREFUQTogdGhpcy5mb3JtRGF0YSxcbiAgICAgICAgICAgICAgUkVEVVhfREFUQTogdGhpcy5yZWR1eERhdGEsXG4gICAgICAgICAgICAgIENBTUVSQV9EQVRBOiB0aGlzLmNhbWVyYURhdGEsXG4gICAgICAgICAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgICAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YSxcbiAgICAgICAgICAgICAgRVhUUkFfREFUQTogdGhpcy5leHRyYURhdGFcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBzb3VyY2VWYWx1ZSA9IGF3YWl0IHNvdXJjZS5nZXRWYWx1ZUZyb21Tb3VyY2UoXG4gICAgICAgICAgICAgIHdhdGVybWFya1NvdXJjZUNvbmZpZ1xuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3Qgd2F0ZXJtYXJrU291cmNlID0ge1xuICAgICAgICAgICAgICBrZXk6IHdhdGVybWFya1NvdXJjZUNvbmZpZy5pZCxcbiAgICAgICAgICAgICAgdmFsdWU6IHNvdXJjZVZhbHVlXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB3YXRlcm1hcmtQYXlsb2FkLmRhdGEucHVzaCh3YXRlcm1hcmtTb3VyY2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsaXZlbGluZXNzUGF5bG9hZDogYW55ID0ge307XG4gICAgICAgIGlmIChpc05vdEVtcHR5VmFsdWUoZmllbGQ/LnByb3BlcnRpZXM/LmZlYXR1cmVzPy5saXZlbGluZXNzKSkge1xuICAgICAgICAgIGxpdmVsaW5lc3NQYXlsb2FkID0gZmllbGQucHJvcGVydGllcy5mZWF0dXJlcy5saXZlbGluZXNzO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW1hZ2VVcGxvYWRQYXlsb2FkID0ge1xuICAgICAgICAgIGltYWdlOiBmaWxlLFxuICAgICAgICAgIC4uLihvY3JQYXlsb2FkPy5pc0VuYWJsZWQgJiYge1xuICAgICAgICAgICAgb2NyOiBvY3JQYXlsb2FkXG4gICAgICAgICAgfSksXG4gICAgICAgICAgLi4uKGZhY2VtYXRjaFBheWxvYWQ/LmlzRW5hYmxlZCAmJiB7XG4gICAgICAgICAgICBmYWNlbWF0Y2g6IGZhY2VtYXRjaFBheWxvYWRcbiAgICAgICAgICB9KSxcbiAgICAgICAgICAuLi4od2F0ZXJtYXJrUGF5bG9hZD8uaXNFbmFibGVkICYmIHtcbiAgICAgICAgICAgIHdhdGVybWFyazogd2F0ZXJtYXJrUGF5bG9hZFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIC4uLihsaXZlbGluZXNzUGF5bG9hZD8uaXNFbmFibGVkICYmIHtcbiAgICAgICAgICAgIGxpdmVsaW5lc3M6IGxpdmVsaW5lc3NQYXlsb2FkXG4gICAgICAgICAgfSlcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fQVBJX1JFUVVFU1RfVVBMT0FEX0lNQUdFLCB7XG4gICAgICAgICAgZmllbGRfa2V5OiBmaWVsZC5rZXksXG4gICAgICAgICAgZmllbGRfdHlwZTogZmllbGQudHlwZSxcbiAgICAgICAgICByZXF1ZXN0OiBpbWFnZVVwbG9hZFBheWxvYWRcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGlzLm9uQ2xpY2tBcGlDYWxsLmVtaXQoe1xuICAgICAgICAgICAga2V5OiBmaWVsZC5rZXksXG4gICAgICAgICAgICB0eXBlOiBmaWVsZC50eXBlLFxuICAgICAgICAgICAgcGF5bG9hZDogaW1hZ2VVcGxvYWRQYXlsb2FkXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwiRmFpbGVkIHRvIHVwbG9hZCBpbWFnZSB0byBzZXJ2ZXIhXCIpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBFRmllbGRUeXBlLlJFQ09SRDpcbiAgICAgICAgLy8gQWN0dWFsIEFQSSBDYWxsXG5cbiAgICAgICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0FQSV9SRVFVRVNUX1VQTE9BRF9WSURFTywge1xuICAgICAgICAgIGZpZWxkX2tleTogZmllbGQua2V5LFxuICAgICAgICAgIGZpZWxkX3R5cGU6IGZpZWxkLnR5cGUsXG4gICAgICAgICAgcmVxdWVzdDoge1xuICAgICAgICAgICAgdmlkZW86IGZpbGVcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy5vbkNsaWNrQXBpQ2FsbC5lbWl0KHtcbiAgICAgICAgICAgIGtleTogZmllbGQua2V5LFxuICAgICAgICAgICAgdHlwZTogZmllbGQudHlwZSxcbiAgICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgICAgdmlkZW86IGZpbGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJGYWlsZWQgdG8gdXBsb2FkIHZpZGVvIHRvIHNlcnZlciFcIik7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVGaWVsZFR5cGUuTUlDOlxuICAgICAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fQVBJX1JFUVVFU1RfVVBMT0FEX0ZJTEUsIHtcbiAgICAgICAgICBmaWVsZF9rZXk6IGZpZWxkLmtleSxcbiAgICAgICAgICBmaWVsZF90eXBlOiBmaWVsZC50eXBlLFxuICAgICAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgICAgIGF1ZGlvOiBmaWxlXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMub25DbGlja0FwaUNhbGwuZW1pdCh7XG4gICAgICAgICAgICBrZXk6IGZpZWxkLmtleSxcbiAgICAgICAgICAgIHR5cGU6IGZpZWxkLnR5cGUsXG4gICAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICAgIGF1ZGlvOiBmaWxlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwiRmFpbGVkIHRvIHVwbG9hZCBhdWRpbyB0byBzZXJ2ZXIhXCIpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBoYW5kbGVPbkNsaWNrRm9ybUZpZWxkQnV0dG9uKGZpZWxkOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtRGF0YSA9IHRoaXMuZm9ybUdyb3VwLmdldFJhd1ZhbHVlKCk7XG5cbiAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIHRoaXMuZm9ybUZpZWxkcykge1xuICAgICAgaWYgKGZpZWxkLmlzRm9ybUVsZW1lbnQpIHtcbiAgICAgICAgaWYgKGZpZWxkLmhpZGRlbikge1xuICAgICAgICAgIGRlbGV0ZSBmb3JtRGF0YVtmaWVsZC5rZXldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvcm1EYXRhW2ZpZWxkLmtleV0gPSByZXNvbHZlRm9ybUZpZWxkVmFsdWVGb3JTYXZlKFxuICAgICAgICAgICAgZmllbGQudHlwZSxcbiAgICAgICAgICAgIGNvbnZlcnRGb3JtRmllbGRWYWx1ZVRvU3RhbmRhcmRGb3JtYXQoZmllbGQsIGZvcm1EYXRhW2ZpZWxkLmtleV0pLFxuICAgICAgICAgICAgdGhpcy5mb3JtRGF0YVtmaWVsZC5rZXldXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGV4dGVuZGVkRm9ybURhdGEgPSB0aGlzLmZvcm1GaWVsZHMucmVkdWNlKChyZXN1bHQsIGZpZWxkLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGZpZWxkLmlzRm9ybUVsZW1lbnQgJiYgIWZpZWxkLmhpZGRlbikge1xuICAgICAgICBjb25zdCBmaWVsZERhdGEgPSB7XG4gICAgICAgICAgW2ZpZWxkLmtleV06IHtcbiAgICAgICAgICAgIGtleTogZmllbGQua2V5LFxuICAgICAgICAgICAgbGFiZWw6IGZpZWxkLmxhYmVsLFxuICAgICAgICAgICAgdmFsdWU6IGlzRW1wdHlWYWx1ZShmb3JtRGF0YVtmaWVsZC5rZXldKSA/IFwiXCIgOiBmb3JtRGF0YVtmaWVsZC5rZXldLFxuICAgICAgICAgICAgdHlwZTogZmllbGQudHlwZSxcbiAgICAgICAgICAgIGluZGV4XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXN1bHRbZmllbGQua2V5XSA9IGZpZWxkRGF0YVtmaWVsZC5rZXldO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LCB7fSk7XG5cbiAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fRklFTERfQlVUVE9OX0NMSUNLLCB7XG4gICAgICBmaWVsZF9rZXk6IGZpZWxkLmtleSxcbiAgICAgIGZpZWxkX3R5cGU6IGZpZWxkLnR5cGUsXG4gICAgICBmaWVsZF9sYWJlbDogZmllbGQubGFiZWxcbiAgICB9KTtcblxuICAgIHRoaXMub25DbGlja0Zvcm1GaWVsZEJ1dHRvbi5lbWl0KHtcbiAgICAgIGNvbmZpZzogZmllbGQsXG4gICAgICBkYXRhOiBtZXJnZU9iamVjdHModGhpcy5mb3JtRGF0YSwgdGhpcy5wb3B1cEZvcm1EYXRhLCB0aGlzLnRhc2tEYXRhKSxcbiAgICAgIGV4dGVuZGVkRGF0YTogZXh0ZW5kZWRGb3JtRGF0YVxuICAgIH0pO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBoYW5kbGVPbkxvY2F0aW9uUGVybWlzc2lvbihlOiBhbnkpIHtcbiAgICBjb25zdCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgZS5rZXkpO1xuICAgIGNvbnN0IGZpZWxkSW5kZXggPSB0aGlzLmZvcm1GaWVsZHMuZmluZEluZGV4KChfOiBhbnkpID0+IHtcbiAgICAgIHJldHVybiBmaWVsZC5rZXkgPT09IF8ua2V5O1xuICAgIH0pO1xuXG4gICAgLy8gc2V0IGJ1dHRvbiBzdGF0dXMgdG8gZGVmYXVsdFxuICAgIGZpZWxkLmFwaS5zdGF0dXMudmFsdWUgPSBFQXBpU3RhdHVzVHlwZS5MT0FESU5HO1xuICAgIGZpZWxkLnNob3dMb2FkZXIgPSB0cnVlO1xuICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XSA9IGZpZWxkO1xuICAgIHRoaXMuc2hvd0FwaUxvYWRlcigpO1xuICAgIHRoaXMuZmllbGRTaG93QXBpTG9hZGVyKGZpZWxkLmtleSk7XG5cbiAgICBpZiAoIWUucGVybWlzc2lvbikge1xuICAgICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0xJVkVfTE9DQVRJT05fUEVSTUlTU0lPTl9FUlJPUiwge1xuICAgICAgICBmaWVsZF9rZXk6IGZpZWxkLmtleSxcbiAgICAgICAgZmllbGRfdHlwZTogZmllbGQudHlwZVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMudG9nZ2xlUGVybWlzc2lvbkVycm9yTm90aWZpY2F0aW9uKHRydWUpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMudG9nZ2xlUGVybWlzc2lvbkVycm9yTm90aWZpY2F0aW9uKGZhbHNlKTtcbiAgICAgIH0sIEZPUk1fVklFV19USU1FUlMuTE9DQVRJT05fUEVSTUlTU0lPTl9FUlJPUl9UT0dHTEUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fTElWRV9MT0NBVElPTl9QRVJNSVNTSU9OX1NVQ0NFU1MsIHtcbiAgICAgICAgZmllbGRfa2V5OiBmaWVsZC5rZXksXG4gICAgICAgIGZpZWxkX3R5cGU6IGZpZWxkLnR5cGVcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy8gc2V0IGJ1dHRvbiBzdGF0dXMgdG8gZGVmYXVsdFxuICAgICAgZmllbGQuYXBpLnN0YXR1cy52YWx1ZSA9IEVBcGlTdGF0dXNUeXBlLkRFRkFVTFQ7XG4gICAgICBmaWVsZC5zaG93TG9hZGVyID0gZmFsc2U7XG4gICAgICB0aGlzLmZvcm1GaWVsZHNbZmllbGRJbmRleF0gPSBmaWVsZDtcbiAgICAgIHRoaXMuaGlkZUFwaUxvYWRlcigpO1xuICAgICAgdGhpcy5maWVsZEhpZGVBcGlMb2FkZXIoZmllbGQua2V5KTtcbiAgICB9LCBGT1JNX1ZJRVdfVElNRVJTLkxPQ0FUSU9OX1BFUk1JU1NJT05fUkVTRVRfQlVUVE9OX1NUQVRVUyk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIGhhbmRsZU9uQ2xpY2tMaXZlTG9jYXRpb24oZTogYW55KSB7XG4gICAgY29uc3QgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGUua2V5KTtcblxuICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19MSVZFX0xPQ0FUSU9OX0JVVFRPTl9DTElDSywge1xuICAgICAgZmllbGRfa2V5OiBmaWVsZC5rZXksXG4gICAgICBmaWVsZF90eXBlOiBmaWVsZC50eXBlXG4gICAgfSk7XG5cbiAgICAvLyBzZXQgYnV0dG9uIHN0YXR1cyB0byBsb2FkaW5nXG4gICAgZmllbGQuYXBpLnN0YXR1cy52YWx1ZSA9IEVBcGlTdGF0dXNUeXBlLkxPQURJTkc7XG4gICAgZmllbGQuc2hvd0xvYWRlciA9IHRydWU7XG5cbiAgICB0aGlzLnNob3dBcGlMb2FkZXIoKTtcblxuICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUoXG4gICAgICB7XG4gICAgICAgIFtlLmtleV06IGUudmFsdWVcbiAgICAgIH0sXG4gICAgICB7IGVtaXRFdmVudDogZmFsc2UgfVxuICAgICk7XG5cbiAgICB0aGlzLmZvcm1EYXRhW2Uua2V5XSA9IGNvbnZlcnRGb3JtRmllbGRWYWx1ZVRvU3RhbmRhcmRGb3JtYXQoXG4gICAgICBmaWVsZCxcbiAgICAgIGUudmFsdWVcbiAgICApO1xuXG4gICAgdGhpcy5nZXRVbnNhdmVkRGF0YVN0YXRlLmVtaXQodHJ1ZSk7XG5cbiAgICBpZiAoXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJwcm9wZXJ0aWVzXCIpICYmXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZC5wcm9wZXJ0aWVzLCBcImlzR2V0TG9jYXRpb25Gcm9tTGF0TG9uZ1wiKSAmJlxuICAgICAgZmllbGQucHJvcGVydGllcy5pc0dldExvY2F0aW9uRnJvbUxhdExvbmdcbiAgICApIHtcbiAgICAgIHRoaXMub25DbGlja0FwaUNhbGwuZW1pdCh7XG4gICAgICAgIGtleTogZmllbGQua2V5LFxuICAgICAgICB0eXBlOiBmaWVsZC50eXBlLFxuICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgLi4uZS5saXZlTG9jYXRpb25cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgIH0sIEZPUk1fVklFV19USU1FUlMuVElNRVJfMzAwKTsgLy8gMTAwMCBtcyA9IDEgc2VjXG4gICAgICB9KTtcblxuICAgICAgLy8gc2V0IGJ1dHRvbiBzdGF0dXMgdG8gc3VjY2Vzc1xuICAgICAgZmllbGQuYXBpLnN0YXR1cy52YWx1ZSA9IEVBcGlTdGF0dXNUeXBlLlNVQ0NFU1M7XG4gICAgICBmaWVsZC5zaG93TG9hZGVyID0gZmFsc2U7XG5cbiAgICAgIGlmIChcbiAgICAgICAgZmllbGQuaXNGb3JtRWxlbWVudCAmJlxuICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJ2YWxpZGF0aW9uXCIpICYmXG4gICAgICAgIGZpZWxkLnZhbGlkYXRpb24udHJpZ2dlcnMuaW5jbHVkZXMoXCJPTl9DSEFOR0VcIilcbiAgICAgICkge1xuICAgICAgICBjb25zdCBydWxlRW5naW5lID0gbmV3IFJ1bGVFbmdpbmUoXG4gICAgICAgICAge1xuICAgICAgICAgICAgRklFTERfQ09ORklHOiBmaWVsZCxcbiAgICAgICAgICAgIEZPUk1fRklFTERTOiB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgICBSRURVWF9EQVRBOiB0aGlzLnJlZHV4RGF0YSxcbiAgICAgICAgICAgIENBTUVSQV9EQVRBOiB0aGlzLmNhbWVyYURhdGEsXG4gICAgICAgICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICAgICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YSxcbiAgICAgICAgICAgIEVYVFJBX0RBVEE6IHRoaXMuZXh0cmFEYXRhXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKVxuICAgICAgICApO1xuXG4gICAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgYXdhaXQgcnVsZUVuZ2luZS5ydW4oZmllbGQudmFsaWRhdGlvbik7XG4gICAgICAgIH0pKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgZmllbGQuaXNGb3JtRWxlbWVudCAmJlxuICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJjb25uZWN0ZWRFbGVtZW50c1wiKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlQ29ubmVjdGVkRWxlbWVudHMoXG4gICAgICAgICAge1xuICAgICAgICAgICAga2V5OiBmaWVsZC5rZXksXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS52YWx1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJPTl9DSEFOR0VcIlxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmhpZGVBcGlMb2FkZXIoKTtcbiAgICB9XG4gIH1cblxuICAvLyBET00gRXZlbnQgSGFuZGxlcnNcbiAgQGxvZ01ldGhvZFxuICBoYW5kbGVHZXRLZXlWYWx1ZShlOiBhbnkpIHtcbiAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKFxuICAgICAge1xuICAgICAgICBbZS5rZXldOiBlLnZhbHVlXG4gICAgICB9LFxuICAgICAgeyBlbWl0RXZlbnQ6IGZhbHNlIH1cbiAgICApO1xuXG4gICAgY29uc3QgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGUua2V5KTtcbiAgICB0aGlzLmZvcm1EYXRhW2Uua2V5XSA9IGNvbnZlcnRGb3JtRmllbGRWYWx1ZVRvU3RhbmRhcmRGb3JtYXQoXG4gICAgICBmaWVsZCxcbiAgICAgIGUudmFsdWVcbiAgICApO1xuXG4gICAgdGhpcy5nZXRVbnNhdmVkRGF0YVN0YXRlLmVtaXQodHJ1ZSk7XG5cbiAgICBpZiAoXG4gICAgICBmaWVsZD8udHlwZSA9PT0gRUZpZWxkVHlwZS5NSUMgJiZcbiAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLCBcInByb3BlcnRpZXNcIikgJiZcbiAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLnByb3BlcnRpZXMsIFwidXBsb2FkRmlsZVRvU2VydmVyXCIpICYmXG4gICAgICBmaWVsZC5wcm9wZXJ0aWVzLnVwbG9hZEZpbGVUb1NlcnZlciAmJlxuICAgICAgaXNOb3RFbXB0eVZhbHVlKGUudmFsdWUpXG4gICAgKSB7XG4gICAgICB0aGlzLnVwbG9hZEZpbGUoZmllbGQsIGUudmFsdWUpO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGZpZWxkLmlzRm9ybUVsZW1lbnQgJiZcbiAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLCBcInZhbGlkYXRpb25cIikgJiZcbiAgICAgIGZpZWxkLnZhbGlkYXRpb24udHJpZ2dlcnMuaW5jbHVkZXMoXCJPTl9DSEFOR0VcIilcbiAgICApIHtcbiAgICAgIGNvbnN0IHJ1bGVFbmdpbmUgPSBuZXcgUnVsZUVuZ2luZShcbiAgICAgICAge1xuICAgICAgICAgIEZJRUxEX0NPTkZJRzogZmllbGQsXG4gICAgICAgICAgRk9STV9GSUVMRFM6IHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgUkVEVVhfREFUQTogdGhpcy5yZWR1eERhdGEsXG4gICAgICAgICAgQ0FNRVJBX0RBVEE6IHRoaXMuY2FtZXJhRGF0YSxcbiAgICAgICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuYWxsRm9ybXNEYXRhLFxuICAgICAgICAgIEVYVFJBX0RBVEE6IHRoaXMuZXh0cmFEYXRhXG4gICAgICAgIH0sXG4gICAgICAgIHRoaXMudGFrZUFjdGlvbi5iaW5kKHRoaXMpXG4gICAgICApO1xuXG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCBydWxlRW5naW5lLnJ1bihmaWVsZC52YWxpZGF0aW9uKTtcbiAgICAgIH0pKCk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgZmllbGQuaXNGb3JtRWxlbWVudCAmJlxuICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwiY29ubmVjdGVkRWxlbWVudHNcIilcbiAgICApIHtcbiAgICAgIHRoaXMuaGFuZGxlQ29ubmVjdGVkRWxlbWVudHMoXG4gICAgICAgIHtcbiAgICAgICAgICBrZXk6IGZpZWxkLmtleSxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS52YWx1ZVxuICAgICAgICB9LFxuICAgICAgICBcIk9OX0NIQU5HRVwiXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgaGFuZGxlT25DbGlja1Jlc2V0Rm9ybUZpZWxkcyhlOiBhbnksIGZpZWxkOiBURmllbGRUaXRsZSkge1xuICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19GSUVMRF9SRVNFVF9CVVRUT05fQ0xJQ0ssIHtcbiAgICAgIGZpZWxkX2tleTogZmllbGQua2V5XG4gICAgfSk7XG5cbiAgICBjb25zdCByZXNldEZvcm1GaWVsZHMgPSBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoY2hlY2tPYmplY3RQYXRoRXhpc3RzKGZpZWxkLCBcInJlc2V0LmZpZWxkc1wiKSkge1xuICAgICAgICBmb3IgKGNvbnN0IGYgb2YgZmllbGQucmVzZXQuZmllbGRzKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBhY3Rpb24gb2YgZi5hY3Rpb25zKSB7XG4gICAgICAgICAgICBjb25zdCByZXNldEZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkoXG4gICAgICAgICAgICAgIHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgICAgICAgICAgYWN0aW9uLnByb3BzLmZpZWxkS2V5XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgYWN0aW9ucyA9IG5ldyBBY3Rpb24oXG4gICAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBGSUVMRF9DT05GSUc6IHJlc2V0RmllbGQsXG4gICAgICAgICAgICAgICAgRk9STV9GSUVMRFM6IHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgICAgICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgICAgICAgUkVEVVhfREFUQTogdGhpcy5yZWR1eERhdGEsXG4gICAgICAgICAgICAgICAgQ0FNRVJBX0RBVEE6IHRoaXMuY2FtZXJhRGF0YSxcbiAgICAgICAgICAgICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICAgICAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgICAgICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuYWxsRm9ybXNEYXRhLFxuICAgICAgICAgICAgICAgIEVYVFJBX0RBVEE6IHRoaXMuZXh0cmFEYXRhXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHRoaXMudGFrZUFjdGlvbi5iaW5kKHRoaXMpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYXdhaXQgYWN0aW9ucy5leGVjdXRlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY2hlY2tPYmplY3RQYXRoRXhpc3RzKGZpZWxkLCBcInJlc2V0LmZpZWxkR3JvdXBzXCIpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZmcgb2YgZmllbGQucmVzZXQuZmllbGRHcm91cHMpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGFjdGlvbiBvZiBmZy5hY3Rpb25zKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkS2V5IG9mIHRoaXMuZmllbGRHcm91cHNbZmcuZ3JvdXBLZXldKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJlc2V0RmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGZpZWxkS2V5KTtcbiAgICAgICAgICAgICAgY29uc3QgYWN0aW9ucyA9IG5ldyBBY3Rpb24oXG4gICAgICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIEZJRUxEX0NPTkZJRzogcmVzZXRGaWVsZCxcbiAgICAgICAgICAgICAgICAgIEZPUk1fRklFTERTOiB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgICAgICAgICBSRURVWF9EQVRBOiB0aGlzLnJlZHV4RGF0YSxcbiAgICAgICAgICAgICAgICAgIENBTUVSQV9EQVRBOiB0aGlzLmNhbWVyYURhdGEsXG4gICAgICAgICAgICAgICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICAgICAgICAgICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgICAgICAgICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YSxcbiAgICAgICAgICAgICAgICAgIEVYVFJBX0RBVEE6IHRoaXMuZXh0cmFEYXRhXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0aGlzLnRha2VBY3Rpb25PbkZpZWxkR3JvdXAuYmluZCh0aGlzKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBhd2FpdCBhY3Rpb25zLmV4ZWN1dGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgQllQQVNTX1JFU0VUX0NPTkZJUk0gPSBmaWVsZD8ucHJvcGVydGllcz8uYnlwYXNzUmVzZXRDb25maXJtYXRpb247XG5cbiAgICBpZiAoIUJZUEFTU19SRVNFVF9DT05GSVJNKSB7XG4gICAgICBjb25zdCBDT05GSVJNX1JFU0VUID0gd2luZG93LmNvbmZpcm0oXG4gICAgICAgIFwiVGhpcyBhY3Rpb24gd2lsbCByZXNldCBhbGwgdGhlIGZpZWxkcy4gRG8geW91IHN0aWxsIHdhbnQgdG8gY29udGludWU/XCJcbiAgICAgICk7XG5cbiAgICAgIGlmIChDT05GSVJNX1JFU0VUKSB7XG4gICAgICAgIHJlc2V0Rm9ybUZpZWxkcygpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXNldEZvcm1GaWVsZHMoKTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIGhhbmRsZUZpZWxkQXBpQ2FsbChmaWVsZDogVEZpZWxkQXBpQ2FsbCwgYXBpOiBhbnkpIHtcbiAgICBhcGkgPSBhd2FpdCB0aGlzLmV4ZWN1dGVBcGlDYWxsKGFwaSwge1xuICAgICAgRklFTERfQ09ORklHOiBmaWVsZCxcbiAgICAgIEFQSV9DT05GSUc6IGFwaSxcbiAgICAgIEZPUk1fRklFTERTOiB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICBSRURVWF9EQVRBOiB0aGlzLnJlZHV4RGF0YSxcbiAgICAgIENBTUVSQV9EQVRBOiB0aGlzLmNhbWVyYURhdGEsXG4gICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YSxcbiAgICAgIEVYVFJBX0RBVEE6IHRoaXMuZXh0cmFEYXRhXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5pc1ZhbGlkUmVxdWVzdEhlYWRlcnNBbmRCb2R5KGFwaSkpIHtcbiAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZC5hcGksIFwicmVxdWVzdFwiKSkge1xuICAgICAgICB0aGlzLmZvcm1EYXRhID0ge1xuICAgICAgICAgIC4uLnRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgW2ZpZWxkLmtleV06IGFwaS5yZXNwb25zZS52YWx1ZVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUoXG4gICAgICAgICAge1xuICAgICAgICAgICAgW2ZpZWxkLmtleV06IGFwaS5yZXNwb25zZS52YWx1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgeyBlbWl0RXZlbnQ6IGZhbHNlIH1cbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYXBpcyA9IG5ldyBBcGlzKFxuICAgICAgICB7XG4gICAgICAgICAgRklFTERfQ09ORklHOiBmaWVsZCxcbiAgICAgICAgICBBUElfQ09ORklHOiBhcGksXG4gICAgICAgICAgQVBJX1JFU1BPTlNFOiBhcGkucmVzcG9uc2UsXG4gICAgICAgICAgRk9STV9GSUVMRFM6IHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgUkVEVVhfREFUQTogdGhpcy5yZWR1eERhdGEsXG4gICAgICAgICAgQ0FNRVJBX0RBVEE6IHRoaXMuY2FtZXJhRGF0YSxcbiAgICAgICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuYWxsRm9ybXNEYXRhLFxuICAgICAgICAgIEVYVFJBX0RBVEE6IHRoaXMuZXh0cmFEYXRhXG4gICAgICAgIH0sXG4gICAgICAgIHRoaXMudGFrZUFjdGlvbi5iaW5kKHRoaXMpXG4gICAgICApO1xuXG4gICAgICBhcGkgPSBhd2FpdCBhcGlzLnZhbGlkYXRlUmVzcG9uc2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGZpZWxkLmFwaS5zdGF0dXMudmFsdWUgPSBFQXBpU3RhdHVzVHlwZS5GQUlMRUQ7XG4gICAgICAgIChmaWVsZCBhcyBhbnkpLnNob3dMb2FkZXIgPSBmYWxzZTtcbiAgICAgIH0sIEZPUk1fVklFV19USU1FUlMuVElNRVJfNTAwKTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBmaWVsZCwgYXBpIH07XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIGhhbmRsZUFwaUNhbGwoYXBpOiBhbnkpIHtcbiAgICBhcGkgPSBhd2FpdCB0aGlzLmV4ZWN1dGVBcGlDYWxsKGFwaSwge1xuICAgICAgRk9STV9DT05GSUc6IHRoaXMuZm9ybUNvbmZpZyxcbiAgICAgIEFQSV9DT05GSUc6IGFwaSxcbiAgICAgIEZPUk1fRklFTERTOiB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICBSRURVWF9EQVRBOiB0aGlzLnJlZHV4RGF0YSxcbiAgICAgIENBTUVSQV9EQVRBOiB0aGlzLmNhbWVyYURhdGEsXG4gICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YSxcbiAgICAgIEVYVFJBX0RBVEE6IHRoaXMuZXh0cmFEYXRhXG4gICAgfSk7XG5cbiAgICBjb25zdCBhcGlzID0gbmV3IEFwaXMoXG4gICAgICB7XG4gICAgICAgIEZPUk1fQ09ORklHOiB0aGlzLmZvcm1Db25maWcsXG4gICAgICAgIEFQSV9DT05GSUc6IGFwaSxcbiAgICAgICAgRk9STV9GSUVMRFM6IHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgICBSRURVWF9EQVRBOiB0aGlzLnJlZHV4RGF0YSxcbiAgICAgICAgQ0FNRVJBX0RBVEE6IHRoaXMuY2FtZXJhRGF0YSxcbiAgICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuYWxsRm9ybXNEYXRhLFxuICAgICAgICBFWFRSQV9EQVRBOiB0aGlzLmV4dHJhRGF0YVxuICAgICAgfSxcbiAgICAgIHRoaXMudGFrZUFjdGlvbi5iaW5kKHRoaXMpXG4gICAgKTtcblxuICAgIGlmICh0aGlzLmlzVmFsaWRSZXF1ZXN0SGVhZGVyc0FuZEJvZHkoYXBpKSkge1xuICAgICAgYXBpID0gYXdhaXQgYXBpcy52YWxpZGF0ZVJlc3BvbnNlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgYXBpIH07XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIGV4ZWN1dGVBcGlDYWxsKGFwaTogYW55LCBvYmplY3Q6IGFueSk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgYXBpcyA9IG5ldyBBcGlzKG9iamVjdCwgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcykpO1xuXG4gICAgYXBpID0gYXdhaXQgYXBpcy5zZXRVcmwoKTtcbiAgICBhcGkgPSBhd2FpdCBhcGlzLnNldFJlcXVlc3RIZWFkZXJzKCk7XG4gICAgYXBpID0gYXdhaXQgYXBpcy52YWxpZGF0ZVJlcXVlc3RIZWFkZXJzKCk7XG4gICAgYXBpID0gYXdhaXQgYXBpcy5zZXRSZXF1ZXN0Qm9keSgpO1xuICAgIGFwaSA9IGF3YWl0IGFwaXMudmFsaWRhdGVSZXF1ZXN0Qm9keSgpO1xuXG4gICAgbGV0IGFwaUNhbGxSZXNwb25zZTogYW55ID0ge307XG4gICAgbGV0IGFwaUNhbGxSZXNwb25zZVN0YXR1c0NvZGU7XG5cbiAgICBpZiAodGhpcy5pc1ZhbGlkUmVxdWVzdEhlYWRlcnNBbmRCb2R5KGFwaSkpIHtcbiAgICAgIGlmIChcbiAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoYXBpLnJlcXVlc3QudXJsLCBcInR5cGVcIikgJiZcbiAgICAgICAgYXBpLnJlcXVlc3QudXJsLnR5cGUgPT09IEVBcGlSZXF1ZXN0VXJsVHlwZS5NT0NLXG4gICAgICApIHtcbiAgICAgICAgYXBpQ2FsbFJlc3BvbnNlID0gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUoYXBpLnJlcXVlc3QudXJsLnByb3BzLm1vY2tlZERhdGEpO1xuICAgICAgICAgIH0sIEZPUk1fVklFV19USU1FUlMuV0FJVF9GT1JfQVBJX01PQ0tfREFUQSk7IC8vIDEwMDAgbXMgPSAxIHNlY1xuICAgICAgICB9KTtcbiAgICAgICAgYXBpQ2FsbFJlc3BvbnNlU3RhdHVzQ29kZSA9XG4gICAgICAgICAgYXBpLnJlcXVlc3QudXJsLnByb3BzPy5zdGF0dXNDb2RlID8/XG4gICAgICAgICAgRk9STV9WSUVXX1RJTUVSUy5BUElfTU9DS19TVUNDRVNTX1NUQVRVU19DT0RFOyAvLyBEZWZhdWx0IFN0YXR1cyBDb2RlIGZvciBNb2NrZWQgQVBJc1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdXJsOiBzdHJpbmcgPSBhcGkucmVxdWVzdC51cmwudmFsdWU7XG4gICAgICAgIGNvbnN0IG1ldGhvZDogc3RyaW5nID0gYXBpLnJlcXVlc3Q/Lm1ldGhvZCA/PyBcIlBPU1RcIjtcbiAgICAgICAgY29uc3QgaGVhZGVyczogYW55ID0ge1xuICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgIC4uLihhcGkucmVxdWVzdD8uaGVhZGVycz8udmFsdWUgfHwge30pXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJHRVRcIikge1xuICAgICAgICAgIC8vIFRyaWdnZXIgbG9ncyBmb3IgQVBJIHJlcXVlc3Qgd2l0aCB0aGUgbWV0aG9kIGFuZCBBUEkga2V5XG4gICAgICAgICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0FQSV9SRVFVRVNULCB7XG4gICAgICAgICAgICBmb3JtX2FwaV9tZXRob2Q6IG1ldGhvZCxcbiAgICAgICAgICAgIGZvcm1fYXBpX2tleTogYXBpPy5hcGlLZXkgPz8gXCJcIlxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSByZXNwb25zZSBuZWVkcyB0byBiZSBkZWNyeXB0ZWRcbiAgICAgICAgICAgIGNvbnN0IGlzRGVjcnlwdFJlc3BvbnNlOiBib29sZWFuID0gYXBpPy5yZXNwb25zZT8uaXNTZWN1cmUgPz8gZmFsc2U7XG4gICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgcmVzcG9uc2Ugc2lnbmF0dXJlIG5lZWRzIHRvIGJlIHZlcmlmaWVkXG4gICAgICAgICAgICBjb25zdCBpc1ZlcmlmeVNpZ25hdHVyZTogYm9vbGVhbiA9XG4gICAgICAgICAgICAgIGFwaT8ucmVzcG9uc2U/LmlzVmVyaWZ5U2lnbmF0dXJlID8/IGZhbHNlO1xuXG4gICAgICAgICAgICAvLyBFeGVjdXRlIHRoZSBBUEkgY2FsbCBmb3IgR0VUIG1ldGhvZFxuICAgICAgICAgICAgY29uc3QgZXhlY3V0ZWRBcGlDYWxsOiBhbnkgPVxuICAgICAgICAgICAgICBhd2FpdCB0aGlzLmZvcm1WaWV3QXBpU2VydmljZS5leGVjdXRlQXBpQ2FsbChcbiAgICAgICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICAgICAgXCJHRVRcIixcbiAgICAgICAgICAgICAgICB7fSwgLy8gTm8gcmVxdWVzdCBib2R5IGZvciBHRVQgbWV0aG9kXG4gICAgICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICAgICAgICBmYWxzZSwgLy8gaXNFbmNyeXB0UmVxdWVzdEJvZHkgaXMgbm90IGFwcGxpY2FibGUgZm9yIEdFVCBtZXRob2RcbiAgICAgICAgICAgICAgICBpc0RlY3J5cHRSZXNwb25zZSxcbiAgICAgICAgICAgICAgICBpc1ZlcmlmeVNpZ25hdHVyZVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgYXBpQ2FsbFJlc3BvbnNlID0gZXhlY3V0ZWRBcGlDYWxsLmRhdGE7XG4gICAgICAgICAgICBhcGlDYWxsUmVzcG9uc2VTdGF0dXNDb2RlID0gZXhlY3V0ZWRBcGlDYWxsLnN0YXR1cztcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIC8vIEhhbmRsZSBhbnkgZXJyb3JzXG4gICAgICAgICAgICBhcGlDYWxsUmVzcG9uc2UgPSB7fTtcbiAgICAgICAgICAgIGFwaUNhbGxSZXNwb25zZVN0YXR1c0NvZGUgPVxuICAgICAgICAgICAgICBGT1JNX1ZJRVdfVElNRVJTLkFQSV9NT0NLX0VSUk9SX1NUQVRVU19DT0RFOyAvLyBJbnRlcm5hbCBTZXJ2ZXIgRXJyb3JcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gRXh0cmFjdCB0aGUgcmVxdWVzdCBib2R5IGZyb20gdGhlIEFQSSBjb25maWd1cmF0aW9uXG4gICAgICAgICAgY29uc3QgYm9keTogYW55ID0gYXBpPy5yZXF1ZXN0Py5ib2R5Py52YWx1ZSA/PyB7fTtcblxuICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSByZXF1ZXN0IGJvZHkgbmVlZHMgdG8gYmUgZW5jcnlwdGVkXG4gICAgICAgICAgY29uc3QgaXNFbmNyeXB0UmVxdWVzdEJvZHk6IGJvb2xlYW4gPVxuICAgICAgICAgICAgYXBpPy5yZXF1ZXN0Py5ib2R5Py5pc1NlY3VyZSA/PyBmYWxzZTtcbiAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgcmVzcG9uc2UgbmVlZHMgdG8gYmUgZGVjcnlwdGVkXG4gICAgICAgICAgY29uc3QgaXNEZWNyeXB0UmVzcG9uc2U6IGJvb2xlYW4gPSBhcGk/LnJlc3BvbnNlPy5pc1NlY3VyZSA/PyBmYWxzZTtcbiAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgcmVzcG9uc2Ugc2lnbmF0dXJlIG5lZWRzIHRvIGJlIHZlcmlmaWVkXG4gICAgICAgICAgY29uc3QgaXNWZXJpZnlTaWduYXR1cmU6IGJvb2xlYW4gPVxuICAgICAgICAgICAgYXBpPy5yZXNwb25zZT8uaXNWZXJpZnlTaWduYXR1cmUgPz8gZmFsc2U7XG5cbiAgICAgICAgICAvLyBUcmlnZ2VyIGxvZ3MgZm9yIEFQSSByZXF1ZXN0IHdpdGggdGhlIG1ldGhvZCBhbmQgQVBJIGtleVxuICAgICAgICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19BUElfUkVRVUVTVCwge1xuICAgICAgICAgICAgZm9ybV9hcGlfbWV0aG9kOiBtZXRob2QsXG4gICAgICAgICAgICBmb3JtX2FwaV9rZXk6IGFwaT8uYXBpS2V5ID8/IFwiXCIsXG4gICAgICAgICAgICBmb3JtX2FwaV9yZXF1ZXN0X2VuY3J5cHRlZDogaXNFbmNyeXB0UmVxdWVzdEJvZHksXG4gICAgICAgICAgICAuLi4oIWlzRW5jcnlwdFJlcXVlc3RCb2R5ICYmIHtcbiAgICAgICAgICAgICAgZm9ybV9hcGlfcmVxdWVzdF9ib2R5OiBib2R5XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIEV4ZWN1dGUgdGhlIEFQSSBjYWxsIGZvciBQT1NUIG1ldGhvZFxuICAgICAgICAgICAgY29uc3QgZXhlY3V0ZWRBcGlDYWxsOiBhbnkgPVxuICAgICAgICAgICAgICBhd2FpdCB0aGlzLmZvcm1WaWV3QXBpU2VydmljZS5leGVjdXRlQXBpQ2FsbChcbiAgICAgICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICAgICAgXCJQT1NUXCIsXG4gICAgICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgICAgICAgIGlzRW5jcnlwdFJlcXVlc3RCb2R5LFxuICAgICAgICAgICAgICAgIGlzRGVjcnlwdFJlc3BvbnNlLFxuICAgICAgICAgICAgICAgIGlzVmVyaWZ5U2lnbmF0dXJlXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBhcGlDYWxsUmVzcG9uc2UgPSBleGVjdXRlZEFwaUNhbGwuZGF0YTtcbiAgICAgICAgICAgIGFwaUNhbGxSZXNwb25zZVN0YXR1c0NvZGUgPSBleGVjdXRlZEFwaUNhbGwuc3RhdHVzO1xuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgLy8gSGFuZGxlIGFueSBlcnJvcnNcbiAgICAgICAgICAgIGFwaUNhbGxSZXNwb25zZSA9IHt9O1xuICAgICAgICAgICAgYXBpQ2FsbFJlc3BvbnNlU3RhdHVzQ29kZSA9XG4gICAgICAgICAgICAgIEZPUk1fVklFV19USU1FUlMuQVBJX01PQ0tfRVJST1JfU1RBVFVTX0NPREU7IC8vIEludGVybmFsIFNlcnZlciBFcnJvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhcGkucmVzcG9uc2UgPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChcbiAgICAgICAgYXBpLnJlc3BvbnNlLFxuICAgICAgICBcInZhbHVlXCIsXG4gICAgICAgIGFwaUNhbGxSZXNwb25zZVxuICAgICAgKTtcblxuICAgICAgYXBpLnJlc3BvbnNlID0gc2V0VmFsdWVUb09iamVjdFBhdGgoXG4gICAgICAgIGFwaS5yZXNwb25zZSxcbiAgICAgICAgXCJzdGF0dXNcIixcbiAgICAgICAgYXBpQ2FsbFJlc3BvbnNlU3RhdHVzQ29kZVxuICAgICAgKTtcblxuICAgICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0FQSV9SRVNQT05TRSwge1xuICAgICAgICBmb3JtX2FwaV9rZXk6IGFwaT8uYXBpS2V5ID8/IFwiXCIsXG4gICAgICAgIGZvcm1fYXBpX3Jlc3BvbnNlX2VuY3J5cHRlZDogYXBpPy5yZXNwb25zZT8uaXNTZWN1cmUgPz8gZmFsc2UsXG4gICAgICAgIC4uLighYXBpPy5yZXNwb25zZT8uaXNTZWN1cmUgJiYge1xuICAgICAgICAgIGZvcm1fYXBpX3Jlc3BvbnNlX2JvZHk6IGFwaUNhbGxSZXNwb25zZSA/PyB7fVxuICAgICAgICB9KSxcbiAgICAgICAgZm9ybV9hcGlfc3RhdHVzX2NvZGU6IGFwaUNhbGxSZXNwb25zZVN0YXR1c0NvZGVcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fQVBJX1JFUVVFU1RfSU5WQUxJRCwge1xuICAgICAgICBmb3JtX2FwaV9rZXk6IGFwaT8uYXBpS2V5ID8/IFwiXCIsXG4gICAgICAgIGZvcm1fYXBpX3JlcXVlc3RfZW5jcnlwdGVkOiBhcGk/LnJlcXVlc3Q/LmJvZHk/LmlzU2VjdXJlID8/IGZhbHNlLFxuICAgICAgICAuLi4oIWFwaT8ucmVxdWVzdD8uYm9keT8uaXNTZWN1cmUgJiYge1xuICAgICAgICAgIGZvcm1fYXBpX3JlcXVlc3RfYm9keTogYXBpPy5yZXF1ZXN0Py5ib2R5Py52YWx1ZSA/PyB7fVxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFwaTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgaXNWYWxpZFJlcXVlc3RIZWFkZXJzQW5kQm9keShhcGk6IFRBcGkpIHtcbiAgICBjb25zdCBib2R5VmFsaWRhdGlvbiA9XG4gICAgICAoYXBpLnJlcXVlc3QuYm9keT8udmFsaWRhdGlvbiBhcyBURW5naW5lICYge1xuICAgICAgICBpc192YWxpZDogYm9vbGVhbjtcbiAgICAgIH0pIHx8XG4gICAgICAoYXBpLnJlcXVlc3QuYm9keSBhcyBhbnkgJiB7XG4gICAgICAgIGlzX3ZhbGlkOiBib29sZWFuO1xuICAgICAgfSk7XG4gICAgY29uc3QgaGVhZGVyc1ZhbGlkYXRpb24gPVxuICAgICAgKGFwaS5yZXF1ZXN0LmhlYWRlcnM/LnZhbGlkYXRpb24gYXMgVEVuZ2luZSAmIHtcbiAgICAgICAgaXNfdmFsaWQ6IGJvb2xlYW47XG4gICAgICB9KSB8fFxuICAgICAgKGFwaS5yZXF1ZXN0LmhlYWRlcnMgYXMgYW55ICYge1xuICAgICAgICBpc192YWxpZDogYm9vbGVhbjtcbiAgICAgIH0pO1xuXG4gICAgaWYgKCFib2R5VmFsaWRhdGlvbiAmJiAhaGVhZGVyc1ZhbGlkYXRpb24pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgKGJvZHlWYWxpZGF0aW9uPy5pc192YWxpZCB8fCBmYWxzZSkgJiZcbiAgICAgIChoZWFkZXJzVmFsaWRhdGlvbj8uaXNfdmFsaWQgfHwgZmFsc2UpXG4gICAgKTtcbiAgfVxuXG4gIHNob3dBcGlMb2FkZXIoKSB7XG4gICAgdGhpcy5sb2FkZXJTZXJ2aWNlLnNob3coe1xuICAgICAgZnVsbHNjcmVlbjogdHJ1ZSxcbiAgICAgIGxvYWRlclRleHQ6IFwiUGxlYXNlIHdhaXRcIlxuICAgIH0pO1xuICAgIHRoaXMudmlld0Zvcm1zQnV0dG9uLmRpc2FibGVkID0gdHJ1ZTtcbiAgICB0aGlzLnZpZXdGb3Jtc0J1dHRvbi5zaG93TG9hZGVyID0gdHJ1ZTtcbiAgICB0aGlzLnNhdmVGb3JtQnV0dG9uLmRpc2FibGVkID0gdHJ1ZTtcbiAgICB0aGlzLnNhdmVGb3JtQnV0dG9uLnNob3dMb2FkZXIgPSB0cnVlO1xuICB9XG5cbiAgaGlkZUFwaUxvYWRlcigpIHtcbiAgICB0aGlzLmxvYWRlclNlcnZpY2UuaGlkZSgpO1xuICAgIHRoaXMudmlld0Zvcm1zQnV0dG9uLmRpc2FibGVkID0gZmFsc2U7XG4gICAgdGhpcy52aWV3Rm9ybXNCdXR0b24uc2hvd0xvYWRlciA9IGZhbHNlO1xuICAgIHRoaXMuc2F2ZUZvcm1CdXR0b24uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICB0aGlzLnNhdmVGb3JtQnV0dG9uLnNob3dMb2FkZXIgPSBmYWxzZTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgaGFuZGxlT25DbGlja0FwaUNhbGwoZTogYW55KSB7XG4gICAgY29uc3QgZmllbGQ6IFRGaWVsZEFwaUNhbGwgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGUua2V5KTtcblxuICAgIGlmIChmaWVsZC50eXBlID09PSBFRmllbGRUeXBlLkFQSSkge1xuICAgICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0FQSV9CVVRUT05fQ0xJQ0ssIHtcbiAgICAgICAgZmllbGRfa2V5OiBmaWVsZC5rZXksXG4gICAgICAgIGZpZWxkX3R5cGU6IGZpZWxkLnR5cGVcbiAgICAgIH0pO1xuXG4gICAgICAvLyBzZXQgYnV0dG9uIHN0YXR1cyB0byBsb2FkaW5nXG4gICAgICBmaWVsZC5hcGkuc3RhdHVzLnZhbHVlID0gRUFwaVN0YXR1c1R5cGUuTE9BRElORztcbiAgICAgIGZpZWxkLnNob3dMb2FkZXIgPSB0cnVlO1xuXG4gICAgICB0aGlzLnNob3dBcGlMb2FkZXIoKTtcblxuICAgICAgLy8gRGV0ZXJtaW5lIEFQSSBDYWxsIHRpbWVcblxuICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLmFwaSwgXCJyZXF1ZXN0XCIpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlRmllbGRBcGlDYWxsKGZpZWxkLCBmaWVsZC5hcGkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgYXBpcyA9IG5ldyBBcGlzKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIEZJRUxEX0NPTkZJRzogZmllbGQsXG4gICAgICAgICAgICBBUElfQ09ORklHOiB7fSxcbiAgICAgICAgICAgIEZPUk1fRklFTERTOiB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgICBSRURVWF9EQVRBOiB0aGlzLnJlZHV4RGF0YSxcbiAgICAgICAgICAgIENBTUVSQV9EQVRBOiB0aGlzLmNhbWVyYURhdGEsXG4gICAgICAgICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICAgICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YSxcbiAgICAgICAgICAgIEVYVFJBX0RBVEE6IHRoaXMuZXh0cmFEYXRhXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKVxuICAgICAgICApO1xuXG4gICAgICAgIGF3YWl0IGFwaXMuY2FsbE5leHRBcGkoZmllbGQuYXBpLmVudHJ5cG9pbnQpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmhpZGVBcGlMb2FkZXIoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIHRvIG9wdGltaXplIHRoZSBET00gdXBkYXRlIGJ5IEFuZ3VsYXIgZm9yIHVzaW5nICpuZ0ZvciBvbiBsYXJnZSBuby4gb2YgaXRlbXMuXG4gICAqIEBwYXJhbSBpbmRleCBudW1iZXJcbiAgICogQHBhcmFtIGl0ZW0gZmllbGRDb25maWdcbiAgICogQHJldHVybnMgc3RyaW5nXG4gICAqL1xuICBnZXRVbmlxdWVJZGVudGlmaWVyKGluZGV4OiBudW1iZXIsIGl0ZW06IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGl0ZW0ua2V5O1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBoYW5kbGVPbkNsaWNrR29CYWNrKGU6IGFueSwgbW9kZTogVEZvcm1WaWV3R29CYWNrTW9kZSkge1xuICAgIGlmICh0aGlzLmZvcm1Db25maWcuc3RhdHVzID09PSBFRm9ybXNMaXN0U3RhdHVzLkNPTVBMRVRFRCkge1xuICAgICAgdGhpcy5vbkNsaWNrR29CYWNrLmVtaXQoe1xuICAgICAgICBjbGlja2VkOiB0cnVlLFxuICAgICAgICBtb2RlXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdGhpcy5mb3JtQ29uZmlnLnByb3BlcnRpZXMuaGVhZGVyLmJhY2tCdXR0b24uYnlwYXNzQ29uZmlybWF0aW9uIHx8XG4gICAgICB3aW5kb3cuY29uZmlybShcIllvdXIgZGF0YSB3aWxsIGJlIGxvc3QgaWYgeW91IGxlYXZlIHRoaXMgcGFnZSEgQ29udGludWU/XCIpXG4gICAgKSB7XG4gICAgICB0aGlzLm9uQ2xpY2tHb0JhY2suZW1pdCh7XG4gICAgICAgIGNsaWNrZWQ6IHRydWUsXG4gICAgICAgIG1vZGVcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlT25DbGlja1ZpZXdGb3JtcyhlOiBhbnkpIHtcbiAgICBpZiAodGhpcy5mb3JtQ29uZmlnLnN0YXR1cyA9PT0gRUZvcm1zTGlzdFN0YXR1cy5DT01QTEVURUQpIHtcbiAgICAgIHRoaXMub25DbGlja1ZpZXdGb3Jtcy5lbWl0KHtcbiAgICAgICAgY2xpY2tlZDogdHJ1ZVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMuZm9ybUNvbmZpZy5wcm9wZXJ0aWVzLmZvb3Rlci52aWV3Rm9ybXNCdXR0b24uYnlwYXNzQ29uZmlybWF0aW9uIHx8XG4gICAgICB3aW5kb3cuY29uZmlybShcIllvdXIgZGF0YSB3aWxsIGJlIGxvc3QgaWYgeW91IGxlYXZlIHRoaXMgcGFnZSEgQ29udGludWU/XCIpXG4gICAgKSB7XG4gICAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fVklFV19CVVRUT05fQ0xJQ0ssIHt9KTtcblxuICAgICAgdGhpcy5vbkNsaWNrVmlld0Zvcm1zLmVtaXQoe1xuICAgICAgICBjbGlja2VkOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIGhhbmRsZU9uQ2xpY2tTYXZlRm9ybShlOiBhbnkpIHtcbiAgICBpZiAoZSkge1xuICAgICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX1NBVkVfQlVUVE9OX0NMSUNLLCB7fSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19TQVZFX0FVVE8sIHt9KTtcbiAgICB9XG5cbiAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICBkb2N1bWVudC5hY3RpdmVFbGVtZW50LmJsdXIoKTtcbiAgICB9XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMCkpO1xuXG4gICAgY29uc3QgY29udHJvbHMgPSBuZXcgRm9ybVZhbGlkYXRpb24oKS5nZXRGb3JtRmllbGRzSW52YWxpZENvbnRyb2xzKFxuICAgICAgdGhpcy5mb3JtR3JvdXBcbiAgICApO1xuXG4gICAgbGV0IGZpcnN0RmllbGRXaXRoRXJyb3IgPSBcIlwiO1xuXG4gICAgZm9yIChjb25zdCBjb250cm9sIG9mIGNvbnRyb2xzKSB7XG4gICAgICBpZiAoY29udHJvbC5pbnZhbGlkKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCBjb250cm9sLmtleSk7XG4gICAgICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19GSUVMRF9FUlJPUl9TSE9XLCB7XG4gICAgICAgICAgZmllbGRfa2V5OiBjb250cm9sLmtleSxcbiAgICAgICAgICBmaWVsZF90eXBlOiBmaWVsZC50eXBlLFxuICAgICAgICAgIGZpZWxkX2Vycm9yX3R5cGVzOiB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tjb250cm9sLmtleV0uZXJyb3JzXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChpc0VtcHR5VmFsdWUoZmlyc3RGaWVsZFdpdGhFcnJvcikpIHtcbiAgICAgICAgICBmaXJzdEZpZWxkV2l0aEVycm9yID0gY29udHJvbC5rZXk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuZm9ybUZpZWxkcyA9IHNob3dGb3JtRmllbGRFcnJvcihcbiAgICAgICAgdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tjb250cm9sLmtleV0uZXJyb3JzLFxuICAgICAgICBjb250cm9sLmtleSxcbiAgICAgICAgY29udHJvbC5pbnZhbGlkXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChpc05vdEVtcHR5VmFsdWUoZmlyc3RGaWVsZFdpdGhFcnJvcikpIHtcbiAgICAgIHRoaXMuaGFuZGxlT25TY3JvbGxUb0ZpZWxkKGZpcnN0RmllbGRXaXRoRXJyb3IpO1xuXG4gICAgICAvLyB0aGlzLnRvZ2dsZUVycm9yTm90aWZpY2F0aW9uKHRydWUpO1xuICAgICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyAgIHRoaXMudG9nZ2xlRXJyb3JOb3RpZmljYXRpb24oZmFsc2UpO1xuICAgICAgLy8gfSwgMzAwMCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIHRoaXMuZm9ybUZpZWxkcykge1xuICAgICAgaWYgKFxuICAgICAgICBmaWVsZC5pc0Zvcm1FbGVtZW50ICYmXG4gICAgICAgICFmaWVsZC5oaWRkZW4gJiZcbiAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwidmFsaWRhdGlvblwiKSAmJlxuICAgICAgICBmaWVsZC52YWxpZGF0aW9uLnRyaWdnZXJzLmluY2x1ZGVzKFwiT05fU0FWRVwiKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IHJ1bGVFbmdpbmUgPSBuZXcgUnVsZUVuZ2luZShcbiAgICAgICAgICB7XG4gICAgICAgICAgICBGSUVMRF9DT05GSUc6IGZpZWxkLFxuICAgICAgICAgICAgRk9STV9GSUVMRFM6IHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgICAgICAgIEZPUk1fREFUQTogdGhpcy5mb3JtRGF0YSxcbiAgICAgICAgICAgIFJFRFVYX0RBVEE6IHRoaXMucmVkdXhEYXRhLFxuICAgICAgICAgICAgQ0FNRVJBX0RBVEE6IHRoaXMuY2FtZXJhRGF0YSxcbiAgICAgICAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgICAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuYWxsRm9ybXNEYXRhLFxuICAgICAgICAgICAgRVhUUkFfREFUQTogdGhpcy5leHRyYURhdGFcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRoaXMudGFrZUFjdGlvbi5iaW5kKHRoaXMpXG4gICAgICAgICk7XG5cbiAgICAgICAgYXdhaXQgcnVsZUVuZ2luZS5ydW4oZmllbGQudmFsaWRhdGlvbik7XG5cbiAgICAgICAgaWYgKCFmaWVsZC52YWxpZGF0aW9uLmlzX3ZhbGlkKSB7XG4gICAgICAgICAgdGhpcy50b2dnbGVFcnJvck5vdGlmaWNhdGlvbih0cnVlKTtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlRXJyb3JOb3RpZmljYXRpb24oZmFsc2UpO1xuICAgICAgICAgIH0sIEZPUk1fVklFV19USU1FUlMuSU5WQUxJRF9GSUVMRFNfU0FWRV9GT1JNX0VSUk9SX1RPR0dMRSk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBmb3JtRGF0YSA9IHRoaXMuZm9ybUdyb3VwLmdldFJhd1ZhbHVlKCk7XG5cbiAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIHRoaXMuZm9ybUZpZWxkcykge1xuICAgICAgaWYgKGZpZWxkLmlzRm9ybUVsZW1lbnQpIHtcbiAgICAgICAgaWYgKGZpZWxkLmhpZGRlbikge1xuICAgICAgICAgIGRlbGV0ZSBmb3JtRGF0YVtmaWVsZC5rZXldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvcm1EYXRhW2ZpZWxkLmtleV0gPSByZXNvbHZlRm9ybUZpZWxkVmFsdWVGb3JTYXZlKFxuICAgICAgICAgICAgZmllbGQudHlwZSxcbiAgICAgICAgICAgIGNvbnZlcnRGb3JtRmllbGRWYWx1ZVRvU3RhbmRhcmRGb3JtYXQoZmllbGQsIGZvcm1EYXRhW2ZpZWxkLmtleV0pLFxuICAgICAgICAgICAgdGhpcy5mb3JtRGF0YVtmaWVsZC5rZXldXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGV4dGVuZGVkRm9ybURhdGEgPSB0aGlzLmZvcm1GaWVsZHMucmVkdWNlKChyZXN1bHQsIGZpZWxkLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGZpZWxkLmlzRm9ybUVsZW1lbnQgJiYgIWZpZWxkLmhpZGRlbikge1xuICAgICAgICBjb25zdCBmaWVsZERhdGEgPSB7XG4gICAgICAgICAgW2ZpZWxkLmtleV06IHtcbiAgICAgICAgICAgIGtleTogZmllbGQua2V5LFxuICAgICAgICAgICAgbGFiZWw6IGZpZWxkLmxhYmVsLFxuICAgICAgICAgICAgdmFsdWU6IGlzRW1wdHlWYWx1ZShmb3JtRGF0YVtmaWVsZC5rZXldKSA/IFwiXCIgOiBmb3JtRGF0YVtmaWVsZC5rZXldLFxuICAgICAgICAgICAgdHlwZTogZmllbGQudHlwZSxcbiAgICAgICAgICAgIGluZGV4XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXN1bHRbZmllbGQua2V5XSA9IGZpZWxkRGF0YVtmaWVsZC5rZXldO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LCB7fSk7XG5cbiAgICBPYmplY3Qua2V5cyhmb3JtRGF0YSkubWFwKChrZXkpID0+IHtcbiAgICAgIGlmIChpc0VtcHR5VmFsdWUoZm9ybURhdGFba2V5XSkpIHtcbiAgICAgICAgZm9ybURhdGFba2V5XSA9IFwiXCI7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogUE9TVCBUYXNrc1xuICAgICAqIDEuIEFQSSBDYWxscy5cbiAgICAgKiAyLiBBbHRlciBEYXRhIFN0cnVjdHVyZS5cbiAgICAgKiAzLiBUcmlnZ2VyIGFuIEludGVybmFsIFBvcHVwIEZvcm0uXG4gICAgICogNC4gVVJMIFJlZGlyZWN0aW9uIG9yIG5ldyBvcGVuaW5nIG9mIFVSTCBpbiBleHRlcm5hbCB0YWIuXG4gICAgICovXG4gICAgaWYgKFxuICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHModGhpcy5mb3JtQ29uZmlnLCBcInRhc2tzXCIpICYmXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyh0aGlzLmZvcm1Db25maWcudGFza3MsIFwicG9zdFwiKVxuICAgICkge1xuICAgICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX1RBU0tfUE9TVCwge30pO1xuXG4gICAgICBmb3IgKGNvbnN0IHBvc3RUYXNrIG9mIHRoaXMuZm9ybUNvbmZpZy50YXNrcy5wb3N0KSB7XG4gICAgICAgIGNvbnN0IHRhc2sgPSBuZXcgVGFza3MoXG4gICAgICAgICAgcG9zdFRhc2ssXG4gICAgICAgICAge1xuICAgICAgICAgICAgRk9STV9DT05GSUc6IHRoaXMuZm9ybUNvbmZpZyxcbiAgICAgICAgICAgIEZPUk1fRklFTERTOiB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgICBSRURVWF9EQVRBOiB0aGlzLnJlZHV4RGF0YSxcbiAgICAgICAgICAgIENBTUVSQV9EQVRBOiB0aGlzLmNhbWVyYURhdGEsXG4gICAgICAgICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICAgICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YSxcbiAgICAgICAgICAgIEVYVFJBX0RBVEE6IHRoaXMuZXh0cmFEYXRhXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuc3RvcFRhc2tFeGVjdXRpb24gPSBmYWxzZTtcbiAgICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKHBvc3RUYXNrLCBcIndhaXRcIikpIHtcbiAgICAgICAgICB0aGlzLndhaXRpbmdGb3JDaGFuZ2VzID0gcG9zdFRhc2sud2FpdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLndhaXRpbmdGb3JDaGFuZ2VzID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCB0YXNrLmV4ZWN1dGUoKTtcblxuICAgICAgICAvLyBXYWl0IGZvciBuZ09uQ2hhbmdlcyB0byBiZSBjYWxsZWQgYmVmb3JlIGNvbnRpbnVpbmcgdG8gdGhlIG5leHQgdGFza1xuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGludGVydmFsSWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMud2FpdGluZ0ZvckNoYW5nZXMpIHtcbiAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcbiAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIEZPUk1fVklFV19USU1FUlMuV0FJVF9GT1JfQ0hBTkdFU19CRUZPUkVfTU9WSU5HX1RPX05FWFRfVEFTSyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLnN0b3BUYXNrRXhlY3V0aW9uKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuc3RvcFRhc2tFeGVjdXRpb24gfHwgdGhpcy53YWl0aW5nRm9yQ2hhbmdlcykge1xuICAgICAgICB0aGlzLnN0b3BUYXNrRXhlY3V0aW9uID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5vbkNsaWNrU2F2ZUZvcm0uZW1pdCh7XG4gICAgICAgIGZvcm1Db25maWc6IHRoaXMuZm9ybUNvbmZpZyxcbiAgICAgICAgZGF0YTogbWVyZ2VPYmplY3RzKFxuICAgICAgICAgIHRoaXMuYWxsRm9ybXNEYXRhW3RoaXMuZm9ybUNvbmZpZy5rZXldLFxuICAgICAgICAgIGZvcm1EYXRhLFxuICAgICAgICAgIHRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgdGhpcy5wb3B1cEZvcm1EYXRhLFxuICAgICAgICAgIHRoaXMudGFza0RhdGFcbiAgICAgICAgKSxcbiAgICAgICAgZXh0ZW5kZWREYXRhOiBleHRlbmRlZEZvcm1EYXRhXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5nZXRVbnNhdmVkRGF0YVN0YXRlLmVtaXQoZmFsc2UpO1xuICAgICAgdGhpcy5vbkNsaWNrU2F2ZUZvcm0uZW1pdCh7XG4gICAgICAgIGZvcm1Db25maWc6IHRoaXMuZm9ybUNvbmZpZyxcbiAgICAgICAgZGF0YTogbWVyZ2VPYmplY3RzKFxuICAgICAgICAgIGZvcm1EYXRhLFxuICAgICAgICAgIHRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgdGhpcy5wb3B1cEZvcm1EYXRhLFxuICAgICAgICAgIHRoaXMudGFza0RhdGFcbiAgICAgICAgKSxcbiAgICAgICAgZXh0ZW5kZWREYXRhOiBleHRlbmRlZEZvcm1EYXRhXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIGhhbmRsZU9uQXBpVGltZXJTdG9wKGU6IGFueSkge1xuICAgIHRoaXMuZmllbGRBcGlUaW1lck1lc3NhZ2VIaWRlKGUua2V5KTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlT25TY3JvbGxUb0ZpZWxkKGZpZWxkS2V5OiBzdHJpbmcpIHtcbiAgICBjb25zdCB0YXJnZXRGaWVsZCA9IHRoaXMuZm9ybUZpZWxkc1JlZlxuICAgICAgLnRvQXJyYXkoKVxuICAgICAgLmZpbmQoXG4gICAgICAgIChmb3JtRmllbGRSZWYpID0+IGZvcm1GaWVsZFJlZi5uYXRpdmVFbGVtZW50LmlkID09PSBgZmllbGRfJHtmaWVsZEtleX1gXG4gICAgICApO1xuXG4gICAgaWYgKHRhcmdldEZpZWxkKSB7XG4gICAgICBjb25zdCBjb250YWluZXJFbCA9IHRoaXMuZm9ybUZpZWxkQ29udGFpbmVyUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICBjb25zdCBmaWVsZEVsID0gdGFyZ2V0RmllbGQubmF0aXZlRWxlbWVudDtcblxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eShcbiAgICAgICAgY29udGFpbmVyRWwsXG4gICAgICAgIFwic2Nyb2xsVG9wXCIsXG4gICAgICAgIGZpZWxkRWwub2Zmc2V0VG9wIC0gY29udGFpbmVyRWwub2Zmc2V0VG9wXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHNob3dFcnJvck5vdGlmaWNhdGlvbiA9IGZhbHNlO1xuXG4gIEBsb2dNZXRob2RcbiAgdG9nZ2xlRXJyb3JOb3RpZmljYXRpb24oc2hvdzogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuc2hvd0Vycm9yTm90aWZpY2F0aW9uID0gc2hvdztcbiAgfVxuXG4gIHNob3dQZXJtaXNzaW9uRXJyb3JOb3RpZmljYXRpb24gPSBmYWxzZTtcblxuICBAbG9nTWV0aG9kXG4gIHRvZ2dsZVBlcm1pc3Npb25FcnJvck5vdGlmaWNhdGlvbihzaG93OiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5zaG93UGVybWlzc2lvbkVycm9yTm90aWZpY2F0aW9uID0gc2hvdztcbiAgfVxuXG4gIC8vIENvbXBvbmVudCBIZWxwZXJzXG4gIEBsb2dNZXRob2RcbiAgZmllbGRIaWRlKGZpZWxkS2V5OiBzdHJpbmcpIHtcbiAgICBjb25zdCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgZmllbGRLZXkpO1xuICAgIGNvbnN0IGZpZWxkSW5kZXggPSB0aGlzLmZvcm1GaWVsZHMuZmluZEluZGV4KChfOiBhbnkpID0+IHtcbiAgICAgIHJldHVybiBmaWVsZC5rZXkgPT09IF8ua2V5O1xuICAgIH0pO1xuXG4gICAgdGhpcy5mb3JtRmllbGRzW2ZpZWxkSW5kZXhdLmhpZGRlbiA9IHRydWU7XG4gICAgdGhpcy5mb3JtR3JvdXAudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuXG4gICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0ZJRUxEX0hJREUsIHtcbiAgICAgIGZpZWxkX2tleTogZmllbGRLZXksXG4gICAgICBmaWVsZF90eXBlOiBmaWVsZC50eXBlXG4gICAgfSk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGZpZWxkR3JvdXBIaWRlKGZpZWxkR3JvdXA6IHN0cmluZykge1xuICAgIGZvciAoY29uc3QgZmllbGRLZXkgb2YgdGhpcy5maWVsZEdyb3Vwc1tmaWVsZEdyb3VwXSkge1xuICAgICAgdGhpcy5maWVsZEhpZGUoZmllbGRLZXkpO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgZmllbGRTaG93KGZpZWxkS2V5OiBzdHJpbmcpIHtcbiAgICBjb25zdCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgZmllbGRLZXkpO1xuICAgIGNvbnN0IGZpZWxkSW5kZXggPSB0aGlzLmZvcm1GaWVsZHMuZmluZEluZGV4KChfOiBhbnkpID0+IHtcbiAgICAgIHJldHVybiBmaWVsZC5rZXkgPT09IF8ua2V5O1xuICAgIH0pO1xuXG4gICAgdGhpcy5mb3JtRmllbGRzW2ZpZWxkSW5kZXhdLmhpZGRlbiA9IGZhbHNlO1xuICAgIHRoaXMuZm9ybUdyb3VwLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcblxuICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19GSUVMRF9TSE9XLCB7XG4gICAgICBmaWVsZF9rZXk6IGZpZWxkS2V5LFxuICAgICAgZmllbGRfdHlwZTogZmllbGQudHlwZVxuICAgIH0pO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBmaWVsZEdyb3VwU2hvdyhmaWVsZEdyb3VwOiBzdHJpbmcpIHtcbiAgICBmb3IgKGNvbnN0IGZpZWxkS2V5IG9mIHRoaXMuZmllbGRHcm91cHNbZmllbGRHcm91cF0pIHtcbiAgICAgIHRoaXMuZmllbGRTaG93KGZpZWxkS2V5KTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGZpZWxkRGlzYWJsZShmaWVsZEtleTogc3RyaW5nKSB7XG4gICAgY29uc3QgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGZpZWxkS2V5KTtcbiAgICBjb25zdCBmaWVsZEluZGV4ID0gdGhpcy5mb3JtRmllbGRzLmZpbmRJbmRleCgoXzogYW55KSA9PiB7XG4gICAgICByZXR1cm4gZmllbGQua2V5ID09PSBfLmtleTtcbiAgICB9KTtcblxuICAgIGlmIChmaWVsZC5pc0Zvcm1FbGVtZW50KSB7XG4gICAgICB0aGlzLmZvcm1GaWVsZHNbZmllbGRJbmRleF0uZGlzYWJsZWQgPSB0cnVlO1xuXG4gICAgICBpZiAoaXNOb3RFbXB0eVZhbHVlKHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzKSkge1xuICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldLmRpc2FibGUoe1xuICAgICAgICAgIGVtaXRFdmVudDogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLmZvcm1Hcm91cC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgfSBlbHNlIGlmIChmaWVsZC50eXBlID09PSBFRmllbGRUeXBlLkJVVFRPTikge1xuICAgICAgdGhpcy5mb3JtRmllbGRzW2ZpZWxkSW5kZXhdLmRpc2FibGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fRklFTERfRElTQUJMRSwge1xuICAgICAgZmllbGRfa2V5OiBmaWVsZEtleSxcbiAgICAgIGZpZWxkX3R5cGU6IGZpZWxkLnR5cGVcbiAgICB9KTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgZmllbGRHcm91cERpc2FibGUoZmllbGRHcm91cDogc3RyaW5nKSB7XG4gICAgZm9yIChjb25zdCBmaWVsZEtleSBvZiB0aGlzLmZpZWxkR3JvdXBzW2ZpZWxkR3JvdXBdKSB7XG4gICAgICB0aGlzLmZpZWxkRGlzYWJsZShmaWVsZEtleSk7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBmaWVsZEVuYWJsZShmaWVsZEtleTogc3RyaW5nKSB7XG4gICAgY29uc3QgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGZpZWxkS2V5KTtcbiAgICBjb25zdCBmaWVsZEluZGV4ID0gdGhpcy5mb3JtRmllbGRzLmZpbmRJbmRleCgoXzogYW55KSA9PiB7XG4gICAgICByZXR1cm4gZmllbGQua2V5ID09PSBfLmtleTtcbiAgICB9KTtcblxuICAgIGlmIChmaWVsZC5pc0Zvcm1FbGVtZW50KSB7XG4gICAgICB0aGlzLmZvcm1GaWVsZHNbZmllbGRJbmRleF0uZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgICAgaWYgKGlzTm90RW1wdHlWYWx1ZSh0aGlzLmZvcm1Hcm91cC5jb250cm9scykpIHtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS5lbmFibGUoe1xuICAgICAgICAgIGVtaXRFdmVudDogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLmZvcm1Hcm91cC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgfSBlbHNlIGlmIChmaWVsZC50eXBlID09PSBFRmllbGRUeXBlLkJVVFRPTikge1xuICAgICAgdGhpcy5mb3JtRmllbGRzW2ZpZWxkSW5kZXhdLmRpc2FibGVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0ZJRUxEX0VOQUJMRSwge1xuICAgICAgZmllbGRfa2V5OiBmaWVsZEtleSxcbiAgICAgIGZpZWxkX3R5cGU6IGZpZWxkLnR5cGVcbiAgICB9KTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgZmllbGRHcm91cEVuYWJsZShmaWVsZEdyb3VwOiBzdHJpbmcpIHtcbiAgICBmb3IgKGNvbnN0IGZpZWxkS2V5IG9mIHRoaXMuZmllbGRHcm91cHNbZmllbGRHcm91cF0pIHtcbiAgICAgIHRoaXMuZmllbGRFbmFibGUoZmllbGRLZXkpO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgZmllbGRSZXNldChmaWVsZEtleTogc3RyaW5nKSB7XG4gICAgLy8gRmluZCB0aGUgZmllbGQgYW5kIGl0cyBpbmRleCBpbiB0aGUgZm9ybUZpZWxkcyBhcnJheVxuICAgIGxldCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgZmllbGRLZXkpO1xuICAgIGNvbnN0IGZpZWxkSW5kZXggPSBnZXRGb3JtRmllbGRJbmRleEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgZmllbGRLZXkpO1xuXG4gICAgLy8gUmVzZXQgdGhlIHZhbHVlIG9mIHRoZSBmaWVsZCBpbiB0aGUgZm9ybUdyb3VwXG4gICAgY29uc3QgcmVzZXRWYWx1ZSA9IGNvbnZlcnRGb3JtRmllbGRFbXB0eVZhbHVlVG9Ld2lrVUlGb3JtYXQoZmllbGQpO1xuXG4gICAgdGhpcy5mb3JtRGF0YVtmaWVsZEtleV0gPSByZXNldFZhbHVlO1xuXG4gICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS5yZXNldChyZXNldFZhbHVlLCB7XG4gICAgICBlbWl0RXZlbnQ6IGZhbHNlLFxuICAgICAgb25seVNlbGY6IHRydWVcbiAgICB9KTtcblxuICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUoXG4gICAgICB7XG4gICAgICAgIFtmaWVsZC5rZXldOiByZXNldFZhbHVlXG4gICAgICB9LFxuICAgICAgeyBlbWl0RXZlbnQ6IGZhbHNlIH1cbiAgICApO1xuXG4gICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtcbiAgICAgIGVtaXRFdmVudDogdHJ1ZVxuICAgIH0pO1xuXG4gICAgLy8gUmVzZXQgdGhlIG1lc3NhZ2VzIGFuZCBlcnJvcnMgZm9yIHRoZSBmaWVsZFxuICAgIGZpZWxkID0gcmVtb3ZlRm9ybUZpZWxkTWVzc2FnZShmaWVsZCwge1xuICAgICAgdHlwZTogRU1lc3NhZ2VUeXBlLldBUk5JTkcsXG4gICAgICBtZXNzYWdlOiBcIlwiXG4gICAgfSk7XG4gICAgZmllbGQgPSByZW1vdmVGb3JtRmllbGRNZXNzYWdlKGZpZWxkLCB7XG4gICAgICB0eXBlOiBFTWVzc2FnZVR5cGUuU1VDQ0VTUyxcbiAgICAgIG1lc3NhZ2U6IFwiXCJcbiAgICB9KTtcbiAgICB0aGlzLmZpZWxkRXJyb3JIaWRlKGZpZWxkS2V5LCB7XG4gICAgICB0eXBlOiBFTWVzc2FnZVR5cGUuRVJST1IsXG4gICAgICBtZXNzYWdlOiBcIlwiXG4gICAgfSk7XG5cbiAgICAvLyBSZXNldCB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkIGluIHRoZSBmb3JtRmllbGRzIGFycmF5XG4gICAgc3dpdGNoIChmaWVsZC50eXBlKSB7XG4gICAgICBjYXNlIEVGaWVsZFR5cGUuQVBJOiB7XG4gICAgICAgIGNvbnN0IGZpZWxkQXBpQ2FsbCA9IGZpZWxkIGFzIFRGaWVsZEFwaUNhbGw7XG4gICAgICAgIGZpZWxkQXBpQ2FsbC5hcGkuc3RhdHVzLnZhbHVlID0gRUFwaVN0YXR1c1R5cGUuREVGQVVMVDtcbiAgICAgICAgdGhpcy5mb3JtRmllbGRzW2ZpZWxkSW5kZXhdID0gZmllbGRBcGlDYWxsO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgRUZpZWxkVHlwZS5MSVZFX0xPQ0FUSU9OOiB7XG4gICAgICAgIGNvbnN0IGZpZWxkTGl2ZUxvY2F0aW9uID0gZmllbGQgYXMgVEZpZWxkTGl2ZUxvY2F0aW9uO1xuICAgICAgICBmaWVsZExpdmVMb2NhdGlvbi5hcGkuc3RhdHVzLnZhbHVlID0gRUFwaVN0YXR1c1R5cGUuREVGQVVMVDtcbiAgICAgICAgdGhpcy5mb3JtRmllbGRzW2ZpZWxkSW5kZXhdID0gZmllbGRMaXZlTG9jYXRpb247XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBmaWVsZC5mb2N1cyA9IGZhbHNlO1xuICAgICAgICBmaWVsZC5pbnZhbGlkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XSA9IGZpZWxkO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fRklFTERfUkVTRVQsIHtcbiAgICAgIGZpZWxkX2tleTogZmllbGRLZXksXG4gICAgICBmaWVsZF90eXBlOiBmaWVsZC50eXBlXG4gICAgfSk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGZpZWxkR3JvdXBSZXNldChmaWVsZEdyb3VwOiBzdHJpbmcpIHtcbiAgICBjb25zdCBmaWVsZEtleXMgPSB0aGlzLmZpZWxkR3JvdXBzPy5bZmllbGRHcm91cF07XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGZpZWxkS2V5cykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGZpZWxkS2V5IG9mIGZpZWxkS2V5cykge1xuICAgICAgdGhpcy5maWVsZFJlc2V0KGZpZWxkS2V5KTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGZpZWxkSGlkZUFwaUxvYWRlcihmaWVsZEtleTogc3RyaW5nKSB7XG4gICAgY29uc3QgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGZpZWxkS2V5KTtcbiAgICBjb25zdCBmaWVsZEluZGV4ID0gdGhpcy5mb3JtRmllbGRzLmZpbmRJbmRleCgoXzogYW55KSA9PiB7XG4gICAgICByZXR1cm4gZmllbGQua2V5ID09PSBfLmtleTtcbiAgICB9KTtcblxuICAgIC8vIFJlc2V0IHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQgaW4gdGhlIGZvcm1GaWVsZHMgYXJyYXlcbiAgICBzd2l0Y2ggKGZpZWxkLnR5cGUpIHtcbiAgICAgIGNhc2UgRUZpZWxkVHlwZS5BUEk6IHtcbiAgICAgICAgY29uc3QgZmllbGRBcGlDYWxsID0gZmllbGQgYXMgVEZpZWxkQXBpQ2FsbDtcbiAgICAgICAgZmllbGRBcGlDYWxsLmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XSA9IGZpZWxkQXBpQ2FsbDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIEVGaWVsZFR5cGUuTElWRV9MT0NBVElPTjoge1xuICAgICAgICBjb25zdCBmaWVsZExpdmVMb2NhdGlvbiA9IGZpZWxkIGFzIFRGaWVsZExpdmVMb2NhdGlvbjtcbiAgICAgICAgZmllbGRMaXZlTG9jYXRpb24uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5mb3JtRmllbGRzW2ZpZWxkSW5kZXhdID0gZmllbGRMaXZlTG9jYXRpb247XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGZpZWxkU2hvd0FwaUxvYWRlcihmaWVsZEtleTogc3RyaW5nKSB7XG4gICAgY29uc3QgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGZpZWxkS2V5KTtcbiAgICBjb25zdCBmaWVsZEluZGV4ID0gdGhpcy5mb3JtRmllbGRzLmZpbmRJbmRleCgoXzogYW55KSA9PiB7XG4gICAgICByZXR1cm4gZmllbGQua2V5ID09PSBfLmtleTtcbiAgICB9KTtcblxuICAgIC8vIFJlc2V0IHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQgaW4gdGhlIGZvcm1GaWVsZHMgYXJyYXlcbiAgICBzd2l0Y2ggKGZpZWxkLnR5cGUpIHtcbiAgICAgIGNhc2UgRUZpZWxkVHlwZS5BUEk6IHtcbiAgICAgICAgY29uc3QgZmllbGRBcGlDYWxsID0gZmllbGQgYXMgVEZpZWxkQXBpQ2FsbDtcbiAgICAgICAgZmllbGRBcGlDYWxsLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5mb3JtRmllbGRzW2ZpZWxkSW5kZXhdID0gZmllbGRBcGlDYWxsO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgRUZpZWxkVHlwZS5MSVZFX0xPQ0FUSU9OOiB7XG4gICAgICAgIGNvbnN0IGZpZWxkTGl2ZUxvY2F0aW9uID0gZmllbGQgYXMgVEZpZWxkTGl2ZUxvY2F0aW9uO1xuICAgICAgICBmaWVsZExpdmVMb2NhdGlvbi5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XSA9IGZpZWxkTGl2ZUxvY2F0aW9uO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBzZXRIdG1sKGZpZWxkS2V5OiBzdHJpbmcsIG1lc3NhZ2U6IFRNZXNzYWdlKSB7XG4gICAgbGV0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCBmaWVsZEtleSk7XG4gICAgY29uc3QgZmllbGRJbmRleCA9IHRoaXMuZm9ybUZpZWxkcy5maW5kSW5kZXgoKF86IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIGZpZWxkLmtleSA9PT0gXy5rZXk7XG4gICAgfSk7XG5cbiAgICBmaWVsZCA9IGFwcGVuZEh0bWxNZXNzYWdlKGZpZWxkLCBtZXNzYWdlKTtcblxuICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XSA9IGZpZWxkO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBmaWVsZEVycm9yU2hvdyhmaWVsZEtleTogc3RyaW5nLCBtZXNzYWdlOiBUTWVzc2FnZSkge1xuICAgIGxldCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgZmllbGRLZXkpO1xuICAgIGNvbnN0IGZpZWxkSW5kZXggPSB0aGlzLmZvcm1GaWVsZHMuZmluZEluZGV4KChfOiBhbnkpID0+IHtcbiAgICAgIHJldHVybiBmaWVsZC5rZXkgPT09IF8ua2V5O1xuICAgIH0pO1xuXG4gICAgZmllbGQgPSBoaWdobGlnaHRGb3JtRmllbGRFcnJvcihmaWVsZCwgdHJ1ZSk7XG4gICAgZmllbGQgPSBhcHBlbmRGb3JtRmllbGRNZXNzYWdlKGZpZWxkLCBtZXNzYWdlKTtcblxuICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XSA9IGZpZWxkO1xuXG4gICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0ZJRUxEX0VSUk9SX1NIT1csIHtcbiAgICAgIGZpZWxkX2tleTogZmllbGRLZXksXG4gICAgICBmaWVsZF90eXBlOiBmaWVsZC50eXBlLFxuICAgICAgZmllbGRfZXJyb3JfbWVzc2FnZTogbWVzc2FnZVxuICAgIH0pO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBmaWVsZEVycm9ySGlkZShmaWVsZEtleTogc3RyaW5nLCBtZXNzYWdlPzogVE1lc3NhZ2UpIHtcbiAgICBsZXQgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGZpZWxkS2V5KTtcbiAgICBjb25zdCBmaWVsZEluZGV4ID0gdGhpcy5mb3JtRmllbGRzLmZpbmRJbmRleCgoXzogYW55KSA9PiB7XG4gICAgICByZXR1cm4gZmllbGQua2V5ID09PSBfLmtleTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGhpZGVNZXNzYWdlID0gbWVzc2FnZSA/PyB7XG4gICAgICB0eXBlOiBFTWVzc2FnZVR5cGUuRVJST1IsXG4gICAgICBtZXNzYWdlOiBcIlwiXG4gICAgfTtcblxuICAgIGZpZWxkID0gaGlnaGxpZ2h0Rm9ybUZpZWxkRXJyb3IoZmllbGQsIGZhbHNlKTtcbiAgICBmaWVsZCA9IHJlbW92ZUZvcm1GaWVsZE1lc3NhZ2UoZmllbGQsIGhpZGVNZXNzYWdlKTtcblxuICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XSA9IGZpZWxkO1xuXG4gICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0ZJRUxEX0VSUk9SX0hJREUsIHtcbiAgICAgIGZpZWxkX2tleTogZmllbGRLZXksXG4gICAgICBmaWVsZF90eXBlOiBmaWVsZC50eXBlLFxuICAgICAgZmllbGRfZXJyb3JfbWVzc2FnZTogaGlkZU1lc3NhZ2VcbiAgICB9KTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgZmllbGRNZXNzYWdlU2hvdyhmaWVsZEtleTogc3RyaW5nLCBtZXNzYWdlOiBUTWVzc2FnZSkge1xuICAgIGxldCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgZmllbGRLZXkpO1xuICAgIGNvbnN0IGZpZWxkSW5kZXggPSB0aGlzLmZvcm1GaWVsZHMuZmluZEluZGV4KChfOiBhbnkpID0+IHtcbiAgICAgIHJldHVybiBmaWVsZC5rZXkgPT09IF8ua2V5O1xuICAgIH0pO1xuXG4gICAgZmllbGQgPSBhcHBlbmRGb3JtRmllbGRNZXNzYWdlKGZpZWxkLCBtZXNzYWdlKTtcblxuICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XSA9IGZpZWxkO1xuXG4gICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0ZJRUxEX01FU1NBR0VfU0hPVywge1xuICAgICAgZmllbGRfa2V5OiBmaWVsZEtleSxcbiAgICAgIGZpZWxkX3R5cGU6IGZpZWxkLnR5cGUsXG4gICAgICBmaWVsZF9tZXNzYWdlOiBtZXNzYWdlXG4gICAgfSk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGZpZWxkTWVzc2FnZUhpZGUoZmllbGRLZXk6IHN0cmluZywgbWVzc2FnZTogVE1lc3NhZ2UpIHtcbiAgICBsZXQgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGZpZWxkS2V5KTtcbiAgICBjb25zdCBmaWVsZEluZGV4ID0gdGhpcy5mb3JtRmllbGRzLmZpbmRJbmRleCgoXzogYW55KSA9PiB7XG4gICAgICByZXR1cm4gZmllbGQua2V5ID09PSBfLmtleTtcbiAgICB9KTtcblxuICAgIGZpZWxkID0gcmVtb3ZlRm9ybUZpZWxkTWVzc2FnZShmaWVsZCwgbWVzc2FnZSk7XG5cbiAgICB0aGlzLmZvcm1GaWVsZHNbZmllbGRJbmRleF0gPSBmaWVsZDtcblxuICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19GSUVMRF9NRVNTQUdFX0hJREUsIHtcbiAgICAgIGZpZWxkX2tleTogZmllbGRLZXksXG4gICAgICBmaWVsZF90eXBlOiBmaWVsZC50eXBlLFxuICAgICAgZmllbGRfbWVzc2FnZTogbWVzc2FnZVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZmllbGRBcGlUaW1lck1lc3NhZ2VTaG93KFxuICAgIGZpZWxkS2V5OiBzdHJpbmcsXG4gICAgdGltZXI6IFRBcGlUaW1lclxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsZXQgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGZpZWxkS2V5KTtcbiAgICBjb25zdCBmaWVsZEluZGV4ID0gdGhpcy5mb3JtRmllbGRzLmZpbmRJbmRleCgoXzogYW55KSA9PiB7XG4gICAgICByZXR1cm4gZmllbGQua2V5ID09PSBfLmtleTtcbiAgICB9KTtcblxuICAgIGZpZWxkID0gc2V0QXBpVGltZXJNZXNzYWdlKGZpZWxkLCB0aW1lcik7XG5cbiAgICB0aGlzLmZvcm1GaWVsZHNbZmllbGRJbmRleF0gPSBmaWVsZDtcbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcblxuICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19GSUVMRF9BUElfVElNRVJfTUVTU0FHRV9TSE9XLCB7XG4gICAgICBmaWVsZF9rZXk6IGZpZWxkS2V5LFxuICAgICAgZmllbGRfdHlwZTogZmllbGQudHlwZSxcbiAgICAgIGZpZWxkX3RpbWVyOiB0aW1lclxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZmllbGRBcGlUaW1lck1lc3NhZ2VIaWRlKGZpZWxkS2V5OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsZXQgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGZpZWxkS2V5KTtcbiAgICBjb25zdCBmaWVsZEluZGV4ID0gdGhpcy5mb3JtRmllbGRzLmZpbmRJbmRleCgoXzogYW55KSA9PiB7XG4gICAgICByZXR1cm4gZmllbGQua2V5ID09PSBfLmtleTtcbiAgICB9KTtcblxuICAgIGZpZWxkID0gc2V0QXBpVGltZXJNZXNzYWdlKGZpZWxkLCB1bmRlZmluZWQpO1xuXG4gICAgaWYgKFxuICAgICAgZmllbGQuaXNGb3JtRWxlbWVudCAmJlxuICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwidmFsaWRhdGlvblwiKSAmJlxuICAgICAgZmllbGQudmFsaWRhdGlvbi50cmlnZ2Vycy5pbmNsdWRlcyhcIk9OX0FQSV9USU1FUl9TVE9QXCIpXG4gICAgKSB7XG4gICAgICBjb25zdCBydWxlRW5naW5lID0gbmV3IFJ1bGVFbmdpbmUoXG4gICAgICAgIHtcbiAgICAgICAgICBGSUVMRF9DT05GSUc6IGZpZWxkLFxuICAgICAgICAgIEZPUk1fRklFTERTOiB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgICAgIFJFRFVYX0RBVEE6IHRoaXMucmVkdXhEYXRhLFxuICAgICAgICAgIENBTUVSQV9EQVRBOiB0aGlzLmNhbWVyYURhdGEsXG4gICAgICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YSxcbiAgICAgICAgICBFWFRSQV9EQVRBOiB0aGlzLmV4dHJhRGF0YVxuICAgICAgICB9LFxuICAgICAgICB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKVxuICAgICAgKTtcblxuICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgcnVsZUVuZ2luZS5ydW4oZmllbGQudmFsaWRhdGlvbik7XG4gICAgICB9KSgpO1xuICAgIH1cblxuICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJjb25uZWN0ZWRFbGVtZW50c1wiKSkge1xuICAgICAgdGhpcy5oYW5kbGVDb25uZWN0ZWRFbGVtZW50cyhcbiAgICAgICAge1xuICAgICAgICAgIGtleTogZmllbGQua2V5LFxuICAgICAgICAgIHZhbHVlOiB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldLnZhbHVlXG4gICAgICAgIH0sXG4gICAgICAgIFwiT05fQVBJX1RJTUVSX1NUT1BcIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmZvcm1GaWVsZHNbZmllbGRJbmRleF0gPSBmaWVsZDtcbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcblxuICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19GSUVMRF9BUElfVElNRVJfTUVTU0FHRV9ISURFLCB7XG4gICAgICBmaWVsZF9rZXk6IGZpZWxkS2V5LFxuICAgICAgZmllbGRfdHlwZTogZmllbGQudHlwZVxuICAgIH0pO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyByZW1vdmVLZXlGcm9tT2JqZWN0UGF0aChhY3Rpb246IFRBY3Rpb24sIG9iamVjdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHNvdXJjZTogYW55ID0gbmV3IFNvdXJjZShvYmplY3QpO1xuXG4gICAgY29uc3Qgc291cmNlVmFsdWUgPSBhY3Rpb24ucHJvcHMuc291cmNlO1xuICAgIGNvbnN0IG9iamVjdEtleSA9IHNvdXJjZVZhbHVlPy5wcm9wcz8ub2JqZWN0Py5rZXk7XG4gICAgY29uc3Qgb2JqZWN0UGF0aCA9IHNvdXJjZVZhbHVlPy5wcm9wcz8ub2JqZWN0Py5wYXRoO1xuXG4gICAgaWYgKFxuICAgICAgc291cmNlVmFsdWUua2V5ID09PSBFU291cmNlS2V5Lk9CSkVDVCAmJlxuICAgICAgaXNOb3RFbXB0eVN0cmluZyhvYmplY3RLZXkpICYmXG4gICAgICBpc05vdEVtcHR5U3RyaW5nKG9iamVjdFBhdGgpXG4gICAgKSB7XG4gICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoc291cmNlLl9vYmplY3QsIG9iamVjdEtleSkpIHtcbiAgICAgICAgc291cmNlLl9vYmplY3Rbb2JqZWN0S2V5XSA9IHJlbW92ZUtleUZyb21PYmplY3RQYXRoKFxuICAgICAgICAgIHNvdXJjZS5fb2JqZWN0W29iamVjdEtleV0sXG4gICAgICAgICAgb2JqZWN0UGF0aFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIG9iamVjdC5GSUVMRF9DT05GSUcgPSBzb3VyY2UuX29iamVjdC5GSUVMRF9DT05GSUc7XG5cbiAgICB0aGlzLmZvcm1EYXRhID0gc3luY0Zvcm1EYXRhUHJlc2VydmluZ0FwaU9iamVjdHMoXG4gICAgICB0aGlzLmZvcm1EYXRhLFxuICAgICAgc291cmNlLl9vYmplY3QuRk9STV9EQVRBXG4gICAgKTtcbiAgICB0aGlzLnBhdGNoRm9ybUdyb3VwKHRoaXMuZm9ybURhdGEpO1xuICAgIHRoaXMuYWxsRm9ybXNEYXRhID0gc291cmNlLl9vYmplY3QuQUxMX0ZPUk1TX0RBVEE7XG4gICAgdGhpcy5wcmV2aW91c0Zvcm1EYXRhID0gc291cmNlLl9vYmplY3QuUFJFVklPVVNfRk9STV9EQVRBO1xuICAgIHRoaXMuZXh0cmFEYXRhID0gc291cmNlLl9vYmplY3QuRVhUUkFfREFUQTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgc2V0VmFsdWUoYWN0aW9uOiBUQWN0aW9uLCBvYmplY3Q6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHNvdXJjZSA9IG5ldyBTb3VyY2Uob2JqZWN0KTtcblxuICAgIGNvbnN0IHNvdXJjZVZhbHVlID0gYXdhaXQgc291cmNlLmdldFZhbHVlRnJvbVNvdXJjZShcbiAgICAgIGFjdGlvbi5wcm9wcy52YWx1ZS5zb3VyY2VcbiAgICApO1xuICAgIHNvdXJjZS5zZXRWYWx1ZVRvU291cmNlKGFjdGlvbi5wcm9wcy52YWx1ZS5kZXN0aW5hdGlvbiwgc291cmNlVmFsdWUpO1xuXG4gICAgb2JqZWN0LkZJRUxEX0NPTkZJRyA9IHNvdXJjZS5vYmplY3QuRklFTERfQ09ORklHO1xuXG4gICAgdGhpcy5mb3JtRGF0YSA9IHN5bmNGb3JtRGF0YVByZXNlcnZpbmdBcGlPYmplY3RzKFxuICAgICAgdGhpcy5mb3JtRGF0YSxcbiAgICAgIHNvdXJjZS5vYmplY3QuRk9STV9EQVRBXG4gICAgKTtcbiAgICB0aGlzLnBhdGNoRm9ybUdyb3VwKHRoaXMuZm9ybURhdGEpO1xuICAgIHRoaXMuYWxsRm9ybXNEYXRhID0gc291cmNlLm9iamVjdC5BTExfRk9STVNfREFUQTtcbiAgICB0aGlzLnByZXZpb3VzRm9ybURhdGEgPSBzb3VyY2Uub2JqZWN0LlBSRVZJT1VTX0ZPUk1fREFUQTtcbiAgICB0aGlzLmV4dHJhRGF0YSA9IHNvdXJjZS5vYmplY3QuRVhUUkFfREFUQTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgc2V0RmllbGREZWZhdWx0VmFsdWUoYWN0aW9uOiBUQWN0aW9uLCBvYmplY3Q6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHNvdXJjZSA9IG5ldyBTb3VyY2Uob2JqZWN0KTtcblxuICAgIGNvbnN0IHNvdXJjZVZhbHVlID0gYXdhaXQgc291cmNlLmdldFZhbHVlRnJvbVNvdXJjZShcbiAgICAgIGFjdGlvbi5wcm9wcy52YWx1ZS5zb3VyY2VcbiAgICApO1xuXG4gICAgc291cmNlLnNldFZhbHVlVG9Tb3VyY2UoXG4gICAgICB7XG4gICAgICAgIGtleTogRVNvdXJjZUtleS5PQkpFQ1QsXG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgb2JqZWN0OiB7XG4gICAgICAgICAgICBrZXk6IFwiRklFTERfQ09ORklHXCIsXG4gICAgICAgICAgICBwYXRoOiBcImRlZmF1bHQudmFsdWUudmFsdWVcIlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNvdXJjZVZhbHVlXG4gICAgKTtcbiAgICBzb3VyY2Uuc2V0VmFsdWVUb1NvdXJjZShcbiAgICAgIHtcbiAgICAgICAga2V5OiBFU291cmNlS2V5Lk9CSkVDVCxcbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICBvYmplY3Q6IHtcbiAgICAgICAgICAgIGtleTogXCJGT1JNX0RBVEFcIixcbiAgICAgICAgICAgIHBhdGg6IFN0cmluZyhhY3Rpb24ucHJvcHMuZmllbGRLZXkpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc291cmNlVmFsdWVcbiAgICApO1xuXG4gICAgb2JqZWN0LkZJRUxEX0NPTkZJRyA9IHNvdXJjZS5vYmplY3QuRklFTERfQ09ORklHO1xuICAgIHRoaXMuZm9ybURhdGEgPSBzeW5jRm9ybURhdGFQcmVzZXJ2aW5nQXBpT2JqZWN0cyhcbiAgICAgIHRoaXMuZm9ybURhdGEsXG4gICAgICBzb3VyY2Uub2JqZWN0LkZPUk1fREFUQVxuICAgICk7XG4gICAgdGhpcy5wYXRjaEZvcm1Hcm91cCh0aGlzLmZvcm1EYXRhKTtcbiAgICB0aGlzLmFsbEZvcm1zRGF0YSA9IHNvdXJjZS5vYmplY3QuQUxMX0ZPUk1TX0RBVEE7XG4gICAgdGhpcy5wcmV2aW91c0Zvcm1EYXRhID0gc291cmNlLm9iamVjdC5QUkVWSU9VU19GT1JNX0RBVEE7XG4gICAgdGhpcy5leHRyYURhdGEgPSBzb3VyY2Uub2JqZWN0LkVYVFJBX0RBVEE7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIHNldEFwaVN0YXR1cyhhY3Rpb246IFRBY3Rpb24sIG9iamVjdDogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc291cmNlID0gbmV3IFNvdXJjZShvYmplY3QpO1xuXG4gICAgY29uc3Qgc291cmNlVmFsdWUgPSBhY3Rpb24ucHJvcHMuc3RhdHVzO1xuXG4gICAgc291cmNlLnNldFZhbHVlVG9Tb3VyY2UoXG4gICAgICB7XG4gICAgICAgIGtleTogRVNvdXJjZUtleS5PQkpFQ1QsXG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgb2JqZWN0OiB7XG4gICAgICAgICAgICBrZXk6IFwiRklFTERfQ09ORklHXCIsXG4gICAgICAgICAgICBwYXRoOiBcImFwaS5zdGF0dXMudmFsdWVcIlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNvdXJjZVZhbHVlXG4gICAgKTtcblxuICAgIG9iamVjdC5GSUVMRF9DT05GSUcgPSBzb3VyY2Uub2JqZWN0LkZJRUxEX0NPTkZJRztcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgc2V0QXBpSGVhZGVyVmFsdWUoYWN0aW9uOiBUQWN0aW9uLCBvYmplY3Q6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHNvdXJjZSA9IG5ldyBTb3VyY2Uob2JqZWN0KTtcblxuICAgIGNvbnN0IHNvdXJjZVZhbHVlID0gYXdhaXQgc291cmNlLmdldFZhbHVlRnJvbVNvdXJjZShhY3Rpb24ucHJvcHMuc291cmNlKTtcblxuICAgIHNvdXJjZS5zZXRWYWx1ZVRvU291cmNlKFxuICAgICAge1xuICAgICAgICBrZXk6IEVTb3VyY2VLZXkuT0JKRUNULFxuICAgICAgICBwcm9wczoge1xuICAgICAgICAgIG9iamVjdDoge1xuICAgICAgICAgICAga2V5OiBcIkFQSV9DT05GSUdcIixcbiAgICAgICAgICAgIHBhdGg6IGByZXF1ZXN0LmhlYWRlcnMudmFsdWUuJHthY3Rpb24ucHJvcHMua2V5fWBcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzb3VyY2VWYWx1ZVxuICAgICk7XG5cbiAgICBvYmplY3QuQVBJX0NPTkZJRyA9IHNvdXJjZS5vYmplY3QuQVBJX0NPTkZJRztcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgc2V0QXBpSGVhZGVyVmFsaWRpdHkoYWN0aW9uOiBUQWN0aW9uLCBvYmplY3Q6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHNvdXJjZSA9IG5ldyBTb3VyY2Uob2JqZWN0KTtcblxuICAgIGNvbnN0IHNvdXJjZVZhbHVlID0gYWN0aW9uLnByb3BzLnZhbGlkO1xuXG4gICAgc291cmNlLnNldFZhbHVlVG9Tb3VyY2UoXG4gICAgICB7XG4gICAgICAgIGtleTogRVNvdXJjZUtleS5PQkpFQ1QsXG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgb2JqZWN0OiB7XG4gICAgICAgICAgICBrZXk6IFwiQVBJX0NPTkZJR1wiLFxuICAgICAgICAgICAgcGF0aDogXCJyZXF1ZXN0LmhlYWRlcnMuaXNfdmFsaWRcIlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNvdXJjZVZhbHVlXG4gICAgKTtcblxuICAgIG9iamVjdC5BUElfQ09ORklHID0gc291cmNlLm9iamVjdC5BUElfQ09ORklHO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBzZXRBcGlCb2R5VmFsdWUoYWN0aW9uOiBUQWN0aW9uLCBvYmplY3Q6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHNvdXJjZSA9IG5ldyBTb3VyY2Uob2JqZWN0KTtcblxuICAgIGNvbnN0IHNvdXJjZVZhbHVlID0gYXdhaXQgc291cmNlLmdldFZhbHVlRnJvbVNvdXJjZShhY3Rpb24ucHJvcHMuc291cmNlKTtcblxuICAgIHNvdXJjZS5zZXRWYWx1ZVRvU291cmNlKFxuICAgICAge1xuICAgICAgICBrZXk6IEVTb3VyY2VLZXkuT0JKRUNULFxuICAgICAgICBwcm9wczoge1xuICAgICAgICAgIG9iamVjdDoge1xuICAgICAgICAgICAga2V5OiBcIkFQSV9DT05GSUdcIixcbiAgICAgICAgICAgIHBhdGg6IGByZXF1ZXN0LmJvZHkudmFsdWUuJHthY3Rpb24ucHJvcHMua2V5fWBcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzb3VyY2VWYWx1ZVxuICAgICk7XG5cbiAgICBvYmplY3QuQVBJX0NPTkZJRyA9IHNvdXJjZS5vYmplY3QuQVBJX0NPTkZJRztcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgc2V0QXBpQm9keVZhbGlkaXR5KGFjdGlvbjogVEFjdGlvbiwgb2JqZWN0OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzb3VyY2UgPSBuZXcgU291cmNlKG9iamVjdCk7XG5cbiAgICBjb25zdCBzb3VyY2VWYWx1ZSA9IGFjdGlvbi5wcm9wcy52YWxpZDtcblxuICAgIHNvdXJjZS5zZXRWYWx1ZVRvU291cmNlKFxuICAgICAge1xuICAgICAgICBrZXk6IEVTb3VyY2VLZXkuT0JKRUNULFxuICAgICAgICBwcm9wczoge1xuICAgICAgICAgIG9iamVjdDoge1xuICAgICAgICAgICAga2V5OiBcIkFQSV9DT05GSUdcIixcbiAgICAgICAgICAgIHBhdGg6IFwicmVxdWVzdC5ib2R5LmlzX3ZhbGlkXCJcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzb3VyY2VWYWx1ZVxuICAgICk7XG5cbiAgICBvYmplY3QuQVBJX0NPTkZJRyA9IHNvdXJjZS5vYmplY3QuQVBJX0NPTkZJRztcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgc2V0RmllbGRWYWxpZGl0eShhY3Rpb246IFRBY3Rpb24sIG9iamVjdDogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc291cmNlID0gbmV3IFNvdXJjZShvYmplY3QpO1xuXG4gICAgY29uc3Qgc291cmNlVmFsdWUgPSBhY3Rpb24ucHJvcHMudmFsaWQ7XG5cbiAgICBzb3VyY2Uuc2V0VmFsdWVUb1NvdXJjZShcbiAgICAgIHtcbiAgICAgICAga2V5OiBFU291cmNlS2V5Lk9CSkVDVCxcbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICBvYmplY3Q6IHtcbiAgICAgICAgICAgIGtleTogXCJGSUVMRF9DT05GSUdcIixcbiAgICAgICAgICAgIHBhdGg6IFwidmFsaWRhdGlvbi5pc192YWxpZFwiXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc291cmNlVmFsdWVcbiAgICApO1xuXG4gICAgb2JqZWN0LkZJRUxEX0NPTkZJRyA9IHNvdXJjZS5vYmplY3QuRklFTERfQ09ORklHO1xuICAgIG9iamVjdC5BUElfQ09ORklHID0gc291cmNlLm9iamVjdC5BUElfQ09ORklHO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBzZXREcm9wZG93bk9wdGlvbnMoYWN0aW9uOiBUQWN0aW9uLCBvYmplY3Q6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHNvdXJjZSA9IG5ldyBTb3VyY2Uob2JqZWN0KTtcblxuICAgIGxldCBzb3VyY2VWYWx1ZSA9IGF3YWl0IHNvdXJjZS5nZXRWYWx1ZUZyb21Tb3VyY2UoXG4gICAgICBhY3Rpb24ucHJvcHMudmFsdWUuc291cmNlXG4gICAgKTtcbiAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoYWN0aW9uLnByb3BzLCBcIm9wdGlvbnNcIikpIHtcbiAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhhY3Rpb24ucHJvcHMub3B0aW9ucywgXCJhcHBlbmRUb1BhdGhcIikpIHtcbiAgICAgICAgY29uc3QgYXBwZW5kVG9QYXRoID0gYXdhaXQgc291cmNlLmdldFZhbHVlRnJvbVNvdXJjZShcbiAgICAgICAgICBhY3Rpb24ucHJvcHMub3B0aW9ucy5hcHBlbmRUb1BhdGguc291cmNlXG4gICAgICAgICk7XG4gICAgICAgIGlmIChpc05vdEVtcHR5VmFsdWUoYXBwZW5kVG9QYXRoKSkge1xuICAgICAgICAgIGNvbnN0IGFwcGVuZFRvUGF0aFN0ciA9IHJlcGxhY2VTdHJpbmcoXG4gICAgICAgICAgICBhcHBlbmRUb1BhdGgubWF0Y2goXG4gICAgICAgICAgICAgIGAke2FjdGlvbi5wcm9wcy5vcHRpb25zLmFwcGVuZFRvUGF0aC5maWx0ZXJTb3VyY2VWYWx1ZX1gXG4gICAgICAgICAgICApWzBdLFxuICAgICAgICAgICAgXCJbXmEtekEtWjAtOV9dXCIsXG4gICAgICAgICAgICBcIl9cIlxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBjb25zdCBvcHRpb25zUGF0aCA9IGAke2FjdGlvbi5wcm9wcy5vcHRpb25zLnBhdGh9JHthcHBlbmRUb1BhdGhTdHJ9YDtcbiAgICAgICAgICBzb3VyY2VWYWx1ZSA9IGdldE9iamVjdFZhbHVlRnJvbVBhdGgoc291cmNlVmFsdWUsIG9wdGlvbnNQYXRoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc291cmNlVmFsdWUgPSBnZXRPYmplY3RWYWx1ZUZyb21QYXRoKFxuICAgICAgICAgIHNvdXJjZVZhbHVlLFxuICAgICAgICAgIGFjdGlvbi5wcm9wcy5vcHRpb25zLnBhdGhcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgc291cmNlLnNldFZhbHVlVG9Tb3VyY2UoYWN0aW9uLnByb3BzLnZhbHVlLmRlc3RpbmF0aW9uLCBzb3VyY2VWYWx1ZSk7XG5cbiAgICBvYmplY3QuRklFTERfQ09ORklHID0gc291cmNlLm9iamVjdC5GSUVMRF9DT05GSUc7XG4gICAgdGhpcy5mb3JtRGF0YSA9IHN5bmNGb3JtRGF0YVByZXNlcnZpbmdBcGlPYmplY3RzKFxuICAgICAgdGhpcy5mb3JtRGF0YSxcbiAgICAgIHNvdXJjZS5vYmplY3QuRk9STV9EQVRBXG4gICAgKTtcbiAgICB0aGlzLmFsbEZvcm1zRGF0YSA9IHNvdXJjZS5vYmplY3QuQUxMX0ZPUk1TX0RBVEE7XG4gICAgdGhpcy5wcmV2aW91c0Zvcm1EYXRhID0gc291cmNlLm9iamVjdC5QUkVWSU9VU19GT1JNX0RBVEE7XG4gICAgdGhpcy5leHRyYURhdGEgPSBzb3VyY2Uub2JqZWN0LkVYVFJBX0RBVEE7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIGFwaUNhbGwoYWN0aW9uOiBUQWN0aW9uLCBvYmplY3Q6IGFueSk6IFByb21pc2U8VEFwaT4ge1xuICAgIGxldCBhcGlDb25maWcgPSB0aGlzLmZvcm1Db25maWcuYXBpc1thY3Rpb24ucHJvcHMuZm9ybUFwaUtleV07XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaGFuZGxlQXBpQ2FsbChhcGlDb25maWcpO1xuXG4gICAgYXBpQ29uZmlnID0gcmVzcG9uc2UuYXBpO1xuXG4gICAgdGhpcy5mb3JtQ29uZmlnID0gc2V0VmFsdWVUb09iamVjdFBhdGgoXG4gICAgICB0aGlzLmZvcm1Db25maWcsXG4gICAgICBgYXBpcy4ke2FjdGlvbi5wcm9wcy5mb3JtQXBpS2V5fWAsXG4gICAgICBhcGlDb25maWdcbiAgICApO1xuXG4gICAgdGhpcy5mb3JtRGF0YSA9IG1lcmdlT2JqZWN0cyh0aGlzLmZvcm1EYXRhLCB7XG4gICAgICBbYWN0aW9uLnByb3BzLmZvcm1BcGlLZXldOiBhcGlDb25maWcucmVzcG9uc2UudmFsdWVcbiAgICB9KTtcblxuICAgIHJldHVybiBhcGlDb25maWc7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIGZpZWxkQXBpQ2FsbChhY3Rpb246IFRBY3Rpb24sIG9iamVjdDogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5zaG93QXBpTG9hZGVyKCk7XG5cbiAgICBjb25zdCBhcGlDb25maWcgPSBhd2FpdCB0aGlzLmFwaUNhbGwoYWN0aW9uLCBvYmplY3QpO1xuXG4gICAgdGhpcy5oaWRlQXBpTG9hZGVyKCk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIGZpZWxkTXVsdGlwbGVBcGlDYWxscyhhY3Rpb246IFRBY3Rpb24sIG9iamVjdDogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZW50cnlwb2ludEFwaUtleSA9IGFjdGlvbi5wcm9wcy5hcGlLZXk7XG4gICAgbGV0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCBhY3Rpb24ucHJvcHMuZmllbGRLZXkpO1xuICAgIGNvbnN0IHsgZW5kcG9pbnRzIH0gPSBmaWVsZC5hcGk7XG4gICAgY29uc3QgbmV4dEFwaUluZGV4ID0gZW5kcG9pbnRzLmZpbmRJbmRleChcbiAgICAgIChhcGk6IFRBcGlFbmRwb2ludCkgPT4gYXBpLmFwaUtleSA9PT0gZW50cnlwb2ludEFwaUtleVxuICAgICk7XG4gICAgY29uc3QgYXBpQ29uZmlnID0gZW5kcG9pbnRzW25leHRBcGlJbmRleF07XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaGFuZGxlRmllbGRBcGlDYWxsKGZpZWxkLCBhcGlDb25maWcpO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1kZXN0cnVjdHVyaW5nXG4gICAgZmllbGQgPSByZXNwb25zZS5maWVsZDtcbiAgICBmaWVsZC5hcGkuZW5kcG9pbnRzW25leHRBcGlJbmRleF0gPSByZXNwb25zZS5hcGk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIGZpZWxkTXVsdGlwbGVBcGlDYWxsc0VuZChhY3Rpb246IFRBY3Rpb24sIG9iamVjdDogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGFjdGlvbi5wcm9wcy5maWVsZEtleSk7XG4gICAgY29uc3QgbXVsdGlwbGVBcGlDYWxsUmVzcG9uc2VzID0gY29sbGVjdE11bHRpcGxlQXBpQ2FsbFJlc3BvbnNlcyhcbiAgICAgIGZpZWxkLmFwaS5lbmRwb2ludHNcbiAgICApO1xuICAgIGFwcGx5TXVsdGlwbGVBcGlDYWxsUmVzcG9uc2VzVG9Gb3JtRGF0YShcbiAgICAgIHRoaXMuZm9ybURhdGEsXG4gICAgICBmaWVsZC5rZXksXG4gICAgICBtdWx0aXBsZUFwaUNhbGxSZXNwb25zZXMsXG4gICAgICBvYmplY3RcbiAgICApO1xuICAgIHRoaXMucGF0Y2hGb3JtR3JvdXAodGhpcy5mb3JtRGF0YSk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIHRhc2tBcGlDYWxsKGFjdGlvbjogVEFjdGlvbiwgb2JqZWN0OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnNob3dBcGlMb2FkZXIoKTtcblxuICAgIGNvbnN0IGFwaUNvbmZpZyA9IGF3YWl0IHRoaXMuYXBpQ2FsbChhY3Rpb24sIG9iamVjdCk7XG5cbiAgICB0aGlzLnRhc2tEYXRhID0gbWVyZ2VPYmplY3RzKHRoaXMudGFza0RhdGEsIHtcbiAgICAgIFthY3Rpb24ucHJvcHMuZm9ybUFwaUtleV06IGFwaUNvbmZpZy5yZXNwb25zZS52YWx1ZVxuICAgIH0pO1xuXG4gICAgdGhpcy53YWl0aW5nRm9yQ2hhbmdlcyA9IGZhbHNlO1xuXG4gICAgdGhpcy5oaWRlQXBpTG9hZGVyKCk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIHRhc2tNdWx0aXBsZUFwaUNhbGxzKGFjdGlvbjogVEFjdGlvbiwgb2JqZWN0OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnNob3dBcGlMb2FkZXIoKTtcblxuICAgIGNvbnN0IG11bHRpcGxlQXBpQ29uZmlnID0gdGhpcy5mb3JtQ29uZmlnLmFwaXNbYWN0aW9uLnByb3BzLmZvcm1BcGlLZXldO1xuXG4gICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGFjdGlvbi5wcm9wcywgXCJhcGlLZXlcIikpIHtcbiAgICAgIGNvbnN0IGVudHJ5cG9pbnRBcGlLZXkgPSBhY3Rpb24ucHJvcHMuYXBpS2V5O1xuICAgICAgY29uc3QgeyBlbmRwb2ludHMgfSA9IG11bHRpcGxlQXBpQ29uZmlnO1xuICAgICAgY29uc3QgbmV4dEFwaUluZGV4ID0gZW5kcG9pbnRzLmZpbmRJbmRleChcbiAgICAgICAgKGFwaTogVEFwaUVuZHBvaW50KSA9PiBhcGkuYXBpS2V5ID09PSBlbnRyeXBvaW50QXBpS2V5XG4gICAgICApO1xuICAgICAgY29uc3QgYXBpQ29uZmlnID0gZW5kcG9pbnRzW25leHRBcGlJbmRleF07XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5oYW5kbGVBcGlDYWxsKGFwaUNvbmZpZyk7XG5cbiAgICAgIG11bHRpcGxlQXBpQ29uZmlnLmVuZHBvaW50c1tuZXh0QXBpSW5kZXhdID0gcmVzcG9uc2UuYXBpO1xuXG4gICAgICB0aGlzLmZvcm1Db25maWcgPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChcbiAgICAgICAgdGhpcy5mb3JtQ29uZmlnLFxuICAgICAgICBgYXBpcy4ke2FjdGlvbi5wcm9wcy5mb3JtQXBpS2V5fWAsXG4gICAgICAgIG11bHRpcGxlQXBpQ29uZmlnXG4gICAgICApO1xuXG4gICAgICB0aGlzLmhpZGVBcGlMb2FkZXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYXBpcyA9IG5ldyBBcGlzKFxuICAgICAgICB7XG4gICAgICAgICAgRk9STV9DT05GSUc6IHRoaXMuZm9ybUNvbmZpZyxcbiAgICAgICAgICBBUElfQ09ORklHOiBtdWx0aXBsZUFwaUNvbmZpZyxcbiAgICAgICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgIEZPUk1fREFUQTogdGhpcy5mb3JtRGF0YSxcbiAgICAgICAgICBSRURVWF9EQVRBOiB0aGlzLnJlZHV4RGF0YSxcbiAgICAgICAgICBDQU1FUkFfREFUQTogdGhpcy5jYW1lcmFEYXRhLFxuICAgICAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGEsXG4gICAgICAgICAgRVhUUkFfREFUQTogdGhpcy5leHRyYURhdGFcbiAgICAgICAgfSxcbiAgICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcbiAgICAgICk7XG5cbiAgICAgIGF3YWl0IGFwaXMuY2FsbE5leHRBcGkobXVsdGlwbGVBcGlDb25maWcuZW50cnlwb2ludCk7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyB0YXNrTXVsdGlwbGVBcGlDYWxsc0VuZChhY3Rpb246IFRBY3Rpb24sIG9iamVjdDogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbXVsdGlwbGVBcGlDb25maWcgPSB0aGlzLmZvcm1Db25maWcuYXBpc1thY3Rpb24ucHJvcHMuZm9ybUFwaUtleV07XG4gICAgdGhpcy50YXNrRGF0YVthY3Rpb24ucHJvcHMuZm9ybUFwaUtleV0gPSBjb2xsZWN0TXVsdGlwbGVBcGlDYWxsUmVzcG9uc2VzKFxuICAgICAgbXVsdGlwbGVBcGlDb25maWcuZW5kcG9pbnRzXG4gICAgKTtcblxuICAgIHRoaXMud2FpdGluZ0ZvckNoYW5nZXMgPSBmYWxzZTtcblxuICAgIHRoaXMuaGlkZUFwaUxvYWRlcigpO1xuICB9XG5cbiAgZGlhbG9nUmVmOiBhbnkgPSB1bmRlZmluZWQ7XG5cbiAgQGxvZ01ldGhvZFxuICBkaWFsb2dTaG93KG9wdGlvbnM6IGFueSkge1xuICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19ESUFMT0dfU0hPVywge30pO1xuXG4gICAgdGhpcy5kaWFsb2dSZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2VcbiAgICAgIC5vcGVuKG9wdGlvbnM/Lmh0bWwsIHtcbiAgICAgICAgY2xvc2VhYmxlOiB0cnVlLFxuICAgICAgICBkaXNtaXNzaWJsZTogdHJ1ZSxcbiAgICAgICAgbGFiZWw6IG9wdGlvbnM/LmxhYmVsLFxuICAgICAgICBzaXplOiBvcHRpb25zPy5zaXplID8/IFwic1wiLFxuICAgICAgICBkYXRhOiB7IGJ1dHRvbjogb3B0aW9ucz8uYnV0dG9uIH1cbiAgICAgIH0pXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fRElBTE9HX0VSUk9SLCB7fSk7XG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0RJQUxPR19ISURFLCB7fSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBkaWFsb2dIaWRlKCkge1xuICAgIGlmICh0aGlzLmRpYWxvZ1JlZikge1xuICAgICAgdGhpcy5kaWFsb2dSZWYuY29tcGxldGUoKTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIHJlZGlyZWN0VG9VcmwoYWN0aW9uOiBUQWN0aW9uKSB7XG4gICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGFjdGlvbi5wcm9wcywgXCJ1cmxcIikpIHtcbiAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhhY3Rpb24ucHJvcHMudXJsLCBcInVybFwiKSkge1xuICAgICAgICBsZXQgdGltZW91dCA9IDIwMDA7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyhhY3Rpb24ucHJvcHMudXJsLCBcInRpbWVvdXRcIikgJiZcbiAgICAgICAgICB0eXBlb2YgYWN0aW9uLnByb3BzLnVybC50aW1lb3V0ID09PSBcIm51bWJlclwiXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItZGVzdHJ1Y3R1cmluZ1xuICAgICAgICAgIHRpbWVvdXQgPSBhY3Rpb24ucHJvcHMudXJsLnRpbWVvdXQ7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fUkVESVJFQ1RfVVJMLCB7XG4gICAgICAgICAgdGltZW91dCxcbiAgICAgICAgICByZWRpcmVjdF91cmw6IGFjdGlvbi5wcm9wcy51cmxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGFjdGlvbi5wcm9wcy51cmwsIFwidGFyZ2V0XCIpKSB7XG4gICAgICAgICAgICB3aW5kb3cub3BlbihhY3Rpb24ucHJvcHMudXJsLnVybCwgYWN0aW9uLnByb3BzLnVybC50YXJnZXQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVwbGFjZShhY3Rpb24ucHJvcHMudXJsLnVybCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCB0aW1lb3V0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIHBhdGNoRmllbGRDb250cm9sVmFsdWUoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1trZXldLnBhdGNoVmFsdWUodmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgc2V0RmllbGRDb250cm9sVmFsdWUoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1trZXldLnNldFZhbHVlKHZhbHVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIHBhdGNoRm9ybUdyb3VwKGZvcm1EYXRhOiBhbnkpIHtcbiAgICBpZiAoaXNVbmRlZmluZWQodGhpcy5mb3JtR3JvdXApIHx8IGlzVW5kZWZpbmVkKGZvcm1EYXRhKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBmb3JtR3JvdXAgb3IgZm9ybURhdGEgaXMgJ3VuZGVmaW5lZCcuYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGZvcm1EYXRhSW5Ld2lrVUlGb3JtYXQgPSB7fTtcbiAgICAgIGZvciAoY29uc3QgZmllbGRLZXkgaW4gZm9ybURhdGEpIHtcbiAgICAgICAgaWYgKGlzTm90RW1wdHlWYWx1ZShmaWVsZEtleSkpIHtcbiAgICAgICAgICBjb25zdCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgZmllbGRLZXkpO1xuICAgICAgICAgIGlmICghaXNVbmRlZmluZWQoZmllbGQpICYmICFpc051bGwoZmllbGQpKSB7XG4gICAgICAgICAgICBmb3JtRGF0YUluS3dpa1VJRm9ybWF0W2ZpZWxkS2V5XSA9XG4gICAgICAgICAgICAgIGNvbnZlcnRGb3JtRmllbGRWYWx1ZVRvS3dpa1VJRm9ybWF0KGZpZWxkLCBmb3JtRGF0YVtmaWVsZEtleV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZShmb3JtRGF0YUluS3dpa1VJRm9ybWF0LCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBpc0ZpZWxkVmFsaWQoZmllbGRLZXk6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tmaWVsZEtleV0udmFsaWQ7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGlzRmllbGRFbmFibGVkKGZpZWxkS2V5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGRLZXldLmVuYWJsZWQ7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGdldEZvcm1Hcm91cFJhd1ZhbHVlcygpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgc2hvd1ByZXZpZXcocHJldmlld1Byb3BlcnRpZXM6IGFueSk6IHZvaWQge1xuICAgIHRoaXMucHJldmlld1Byb3BlcnRpZXMgPSBtZXJnZU9iamVjdHMoXG4gICAgICB0aGlzLnByZXZpZXdQcm9wZXJ0aWVzLFxuICAgICAgcHJldmlld1Byb3BlcnRpZXNcbiAgICApO1xuXG4gICAgaWYgKFxuICAgICAgaXNFbXB0eVZhbHVlKHRoaXMucHJldmlld1Byb3BlcnRpZXMuaWZyYW1lLnNyYykgJiZcbiAgICAgIGlzRW1wdHlWYWx1ZSh0aGlzLnByZXZpZXdQcm9wZXJ0aWVzLmh0bWwuYmVmb3JlKSAmJlxuICAgICAgaXNFbXB0eVZhbHVlKHRoaXMucHJldmlld1Byb3BlcnRpZXMuaHRtbC5hZnRlcilcbiAgICApIHtcbiAgICAgIHRoaXMucHJldmlld1Byb3BlcnRpZXMudW5hdmFpbGFibGUgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnByZXZpZXdQcm9wZXJ0aWVzLnVuYXZhaWxhYmxlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzZXRQcmV2aWV3UHJvcGVydGllcyA9ICgpID0+IHtcbiAgICAgIHRoaXMucHJldmlld1Byb3BlcnRpZXMgPSB7XG4gICAgICAgIGh0bWw6IHtcbiAgICAgICAgICBiZWZvcmU6IFwiXCIsXG4gICAgICAgICAgYmVmb3JlU3R5bGVzOiBcIlwiLFxuICAgICAgICAgIGFmdGVyOiBcIlwiLFxuICAgICAgICAgIGFmdGVyU3R5bGVzOiBcIlwiXG4gICAgICAgIH0sXG4gICAgICAgIGlmcmFtZToge1xuICAgICAgICAgIHNyYzogXCJcIixcbiAgICAgICAgICB0aXRsZTogXCJcIlxuICAgICAgICB9LFxuICAgICAgICB0eXBlOiBcImRpYWxvZ1wiLFxuICAgICAgICBwb3B1cEZvcm1LZXk6IFwiXCIsXG4gICAgICAgIHRpdGxlOiBcIlwiLFxuICAgICAgICBzaXplOiBcImF1dG9cIixcbiAgICAgICAgdW5hdmFpbGFibGU6IGZhbHNlXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBzaG93RGlhbG9nID0gKCkgPT4ge1xuICAgICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0RJQUxPR19TSE9XLCB7fSk7XG5cbiAgICAgIHRoaXMucHJldmlld0RpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nU2VydmljZVxuICAgICAgICAub3Blbih0aGlzLmRpYWxvZywge1xuICAgICAgICAgIGNsb3NlYWJsZTogdHJ1ZSxcbiAgICAgICAgICBkaXNtaXNzaWJsZTogdHJ1ZSxcbiAgICAgICAgICBzaXplOiB0aGlzLnByZXZpZXdQcm9wZXJ0aWVzPy5zaXplIHx8IFwiYXV0b1wiLFxuICAgICAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnByZXZpZXdEaWFsb2dSZWYuY29tcGxldGUoKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fRElBTE9HX0VSUk9SLCB7fSk7XG5cbiAgICAgICAgICAgIHJlc2V0UHJldmlld1Byb3BlcnRpZXMoKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fRElBTE9HX0hJREUsIHt9KTtcblxuICAgICAgICAgICAgcmVzZXRQcmV2aWV3UHJvcGVydGllcygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHNob3dQcmV2aWV3ID0gKCkgPT4ge1xuICAgICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX1BSRVZJRVdfU0hPVywge30pO1xuXG4gICAgICB0aGlzLnByZXZpZXdEaWFsb2dSZWYgPSB0aGlzLnByZXZpZXdEaWFsb2dTZXJ2aWNlXG4gICAgICAgIC5vcGVuKHRoaXMucHJldmlldyB8fCBcIlwiKVxuICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX1BSRVZJRVdfRVJST1IsIHt9KTtcblxuICAgICAgICAgICAgcmVzZXRQcmV2aWV3UHJvcGVydGllcygpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgY29tcGxldGU6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19QUkVWSUVXX0hJREUsIHt9KTtcblxuICAgICAgICAgICAgcmVzZXRQcmV2aWV3UHJvcGVydGllcygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIHN3aXRjaCAodGhpcy5wcmV2aWV3UHJvcGVydGllcy50eXBlKSB7XG4gICAgICBjYXNlIFwiZGlhbG9nXCI6XG4gICAgICAgIHNob3dEaWFsb2coKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwicG9wdXBcIjpcbiAgICAgICAgc2hvd1ByZXZpZXcoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBzaG93RGlhbG9nKCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgc2hvd0Vycm9yUHJldmlldyhwcmV2aWV3UHJvcGVydGllczogYW55KTogdm9pZCB7XG4gICAgdGhpcy5zaG93UHJldmlldyh7XG4gICAgICBodG1sOiB7XG4gICAgICAgIGFmdGVyOiBgPGRpdiBzdHlsZT1cInBhZGRpbmctYm90dG9tOjAuMjVyZW07cGFkZGluZy10b3A6IDAuMjVyZW07cG9zaXRpb246IGFic29sdXRlO21hcmdpbi10b3A6IGNhbGMoNTB2aCk7Zm9udC1zaXplOiAxLjRyZW07YmFja2dyb3VuZDogd2hpdGU7cGFkZGluZzogMnJlbTtib3JkZXItcmFkaXVzOiAxcmVtO2JveC1zaGFkb3c6IDBweCAwcHggMTBweCAtM3B4IGJsYWNrO292ZXJmbG93OiBhdXRvO2hlaWdodDogZml0LWNvbnRlbnQ7bWF4LWhlaWdodDogOTB2aDsgd2lkdGg6IDcwdnc7IG1hcmdpbi1sZWZ0OiBjYWxjKDE1dncpOyBsaW5lLWhlaWdodDogMnJlbTtcIj5FcnJvcjogJHtwcmV2aWV3UHJvcGVydGllcy5tZXNzYWdlLm1lc3NhZ2V9PC9kaXY+YFxuICAgICAgfSxcbiAgICAgIHR5cGU6IFwicG9wdXBcIlxuICAgIH0pO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBzaG93UG9wdXBGb3JtKFxuICAgIHBvcHVwRm9ybUtleTogc3RyaW5nLFxuICAgIHBvcHVwVHlwZTogXCJESUFMT0dcIiB8IFwiUE9QVVBcIiA9IFwiRElBTE9HXCJcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgcG9wdXBGb3JtQ29uZmlnID0gdGhpcy5mb3JtQ29uZmlnLnBvcHVwRm9ybXNbcG9wdXBGb3JtS2V5XTtcblxuICAgIHRoaXMub25BY3Rpb25TaG93UG9wdXBGb3JtLmVtaXQoe1xuICAgICAgYWN0aXZlRm9ybURhdGE6IG1lcmdlT2JqZWN0cyh0aGlzLmZvcm1EYXRhLCB0aGlzLnRhc2tEYXRhKSxcbiAgICAgIHBvcHVwRm9ybUNvbmZpZyxcbiAgICAgIHBvcHVwVHlwZVxuICAgIH0pO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhbGVydFNob3codHlwZTogVHVpTm90aWZpY2F0aW9uLCBtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fQUxFUlRfU0hPVywge1xuICAgICAgYWxlcnRfbWVzc2FnZTogbWVzc2FnZSxcbiAgICAgIGFsZXJ0X3R5cGU6IHR5cGVcbiAgICB9KTtcblxuICAgIHRoaXMuYWxlcnRTZXJ2aWNlXG4gICAgICAub3BlbihgJHttZXNzYWdlfWAsIHtcbiAgICAgICAgc3RhdHVzOlxuICAgICAgICAgIHR5cGUgPT09IFwiZXJyb3JcIlxuICAgICAgICAgICAgPyBUdWlOb3RpZmljYXRpb24uRXJyb3JcbiAgICAgICAgICAgIDogdHlwZSA9PT0gXCJ3YXJuaW5nXCJcbiAgICAgICAgICAgICAgPyBUdWlOb3RpZmljYXRpb24uV2FybmluZ1xuICAgICAgICAgICAgICA6IHR5cGUgPT09IFwic3VjY2Vzc1wiXG4gICAgICAgICAgICAgICAgPyBUdWlOb3RpZmljYXRpb24uU3VjY2Vzc1xuICAgICAgICAgICAgICAgIDogVHVpTm90aWZpY2F0aW9uLkluZm9cbiAgICAgIH0pXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fQUxFUlRfRVJST1IsIHt9KTtcbiAgICAgICAgfSxcbiAgICAgICAgY29tcGxldGU6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fQUxFUlRfSElERSwge30pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgdGFrZUFjdGlvbk9uRmllbGRHcm91cChhY3Rpb246IFRBY3Rpb24sIG9iamVjdDogYW55KSB7XG4gICAgLyoqXG4gICAgICogVGhpcyBiZWxvdyBjb2RlIGlzIGN1cnJlbnRseSBjb21tZW50ZWQgYmVjYXVzZSBub3QgYWxsIGFjdGlvbnMgbmVlZCB0byBiZSBsb2dnZWQgYXQgYmFja2VuZC5cbiAgICAgKiBXaWxsIGxvb2sgbGF0ZXIgaW50byB3aGVyZSBvbmx5IHNwZWNpZmljIGFjdGlvbnMgbmVlZHMgdG8gYmUgbG9nZ2VkIG9yIGFsbC5cbiAgICAgKiBDdXJyZW50bHkgbG9ncyBhcmUgc2VudCBmcm9tIHdpdGhpbmcgdGhlIGFjdGlvbidzIHNwZWNpZmljIG1ldGhvZHMuXG4gICAgICogQ29kZSAtXG4gICAgICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19BQ1RJT05fRVhFQ1VURV9HUk9VUCwge1xuICAgICAgICAgIGFjdGlvbl9rZXk6IGFjdGlvbi5rZXksXG4gICAgICAgICAgLi4uKGFjdGlvbi5pZCAmJiB7IGFjdGlvbl9pZDogYWN0aW9uLmlkIH0pLFxuICAgICAgICAgIC4uLihhY3Rpb24ucHJvcHMuZ3JvdXBLZXkgJiYgeyBhY3Rpb25faWQ6IGFjdGlvbi5wcm9wcy5ncm91cEtleSB9KVxuICAgICAgICB9KTtcbiAgICAqL1xuXG4gICAgc3dpdGNoIChhY3Rpb24ua2V5KSB7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuRklFTERfR1JPVVBfSElERTpcbiAgICAgICAgdGhpcy5maWVsZEdyb3VwSGlkZShhY3Rpb24ucHJvcHMuZ3JvdXBLZXkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5GSUVMRF9HUk9VUF9TSE9XOlxuICAgICAgICB0aGlzLmZpZWxkR3JvdXBTaG93KGFjdGlvbi5wcm9wcy5ncm91cEtleSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX0dST1VQX0VOQUJMRTpcbiAgICAgICAgdGhpcy5maWVsZEdyb3VwRW5hYmxlKGFjdGlvbi5wcm9wcy5ncm91cEtleSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX0dST1VQX0RJU0FCTEU6XG4gICAgICAgIHRoaXMuZmllbGRHcm91cERpc2FibGUoYWN0aW9uLnByb3BzLmdyb3VwS2V5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuRklFTERfR1JPVVBfUkVTRVQ6XG4gICAgICAgIHRoaXMuZmllbGRHcm91cFJlc2V0KGFjdGlvbi5wcm9wcy5ncm91cEtleSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX0dST1VQX1NIT1dfQVBJX0xPQURFUjpcbiAgICAgICAgdGhpcy5maWVsZEdyb3VwRGlzYWJsZShhY3Rpb24ucHJvcHMuZ3JvdXBLZXkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5GSUVMRF9HUk9VUF9ISURFX0FQSV9MT0FERVI6XG4gICAgICAgIHRoaXMuZmllbGRHcm91cERpc2FibGUoYWN0aW9uLnByb3BzLmdyb3VwS2V5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIHRha2VBY3Rpb24oYWN0aW9uOiBUQWN0aW9uLCBvYmplY3Q6IGFueSkge1xuICAgIC8qKlxuICAgICAqIFRoaXMgYmVsb3cgY29kZSBpcyBjdXJyZW50bHkgY29tbWVudGVkIGJlY2F1c2Ugbm90IGFsbCBhY3Rpb25zIG5lZWQgdG8gYmUgbG9nZ2VkIGF0IGJhY2tlbmQuXG4gICAgICogV2lsbCBsb29rIGxhdGVyIGludG8gd2hlcmUgb25seSBzcGVjaWZpYyBhY3Rpb25zIG5lZWRzIHRvIGJlIGxvZ2dlZCBvciBhbGwuXG4gICAgICogQ3VycmVudGx5IGxvZ3MgYXJlIHNlbnQgZnJvbSB3aXRoaW5nIHRoZSBhY3Rpb24ncyBzcGVjaWZpYyBtZXRob2RzLlxuICAgICAqIENvZGUgLVxuICAgICAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fQUNUSU9OX0VYRUNVVEUsIHtcbiAgICAgICAgICBhY3Rpb25fa2V5OiBhY3Rpb24ua2V5LFxuICAgICAgICAgIC4uLihhY3Rpb24uaWQgJiYgeyBhY3Rpb25faWQ6IGFjdGlvbi5pZCB9KVxuICAgICAgICB9KTtcbiAgICAqL1xuXG4gICAgc3dpdGNoIChhY3Rpb24ua2V5KSB7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuRklFTERfSElERTpcbiAgICAgICAgdGhpcy5maWVsZEhpZGUoYWN0aW9uLnByb3BzLmZpZWxkS2V5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuRklFTERfU0hPVzpcbiAgICAgICAgdGhpcy5maWVsZFNob3coYWN0aW9uLnByb3BzLmZpZWxkS2V5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuRklFTERfRElTQUJMRTpcbiAgICAgICAgdGhpcy5maWVsZERpc2FibGUoYWN0aW9uLnByb3BzLmZpZWxkS2V5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuRklFTERfRU5BQkxFOlxuICAgICAgICB0aGlzLmZpZWxkRW5hYmxlKGFjdGlvbi5wcm9wcy5maWVsZEtleSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX1NIT1dfQVBJX0xPQURFUjpcbiAgICAgICAgdGhpcy5maWVsZEVuYWJsZShhY3Rpb24ucHJvcHMuZmllbGRLZXkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5GSUVMRF9ISURFX0FQSV9MT0FERVI6XG4gICAgICAgIHRoaXMuZmllbGRFbmFibGUoYWN0aW9uLnByb3BzLmZpZWxkS2V5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuRklFTERfUkVTRVQ6XG4gICAgICAgIHRoaXMuZmllbGRSZXNldChhY3Rpb24ucHJvcHMuZmllbGRLZXkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5GSUVMRF9FUlJPUl9TSE9XOlxuICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoYWN0aW9uLnByb3BzLm1lc3NhZ2UsIFwic291cmNlXCIpKSB7XG4gICAgICAgICAgY29uc3QgZmllbGRFcnJvclNob3dTb3VyY2UgPSBuZXcgU291cmNlKG9iamVjdCk7XG5cbiAgICAgICAgICBsZXQgZmllbGRFcnJvclNob3dTb3VyY2VWYWx1ZSA9XG4gICAgICAgICAgICBhd2FpdCBmaWVsZEVycm9yU2hvd1NvdXJjZS5nZXRWYWx1ZUZyb21Tb3VyY2UoXG4gICAgICAgICAgICAgIGFjdGlvbi5wcm9wcy5tZXNzYWdlLnNvdXJjZVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHR5cGVvZiBmaWVsZEVycm9yU2hvd1NvdXJjZVZhbHVlID09PSBcInN0cmluZ1wiIHx8XG4gICAgICAgICAgICB0eXBlb2YgZmllbGRFcnJvclNob3dTb3VyY2VWYWx1ZSA9PT0gXCJudW1iZXJcIlxuICAgICAgICAgICkge1xuICAgICAgICAgICAgZmllbGRFcnJvclNob3dTb3VyY2VWYWx1ZSA9IFN0cmluZyhmaWVsZEVycm9yU2hvd1NvdXJjZVZhbHVlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmllbGRFcnJvclNob3dTb3VyY2VWYWx1ZSA9IFwiXCI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYWN0aW9uID0gc2V0VmFsdWVUb09iamVjdFBhdGgoXG4gICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICBcInByb3BzLm1lc3NhZ2UubWVzc2FnZVwiLFxuICAgICAgICAgICAgZmllbGRFcnJvclNob3dTb3VyY2VWYWx1ZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgYWN0aW9uLnByb3BzLm1lc3NhZ2UubWVzc2FnZSA9IHVwZGF0ZUxhbmd1YWdlKFxuICAgICAgICAgIGFjdGlvbi5wcm9wcy5tZXNzYWdlLm1lc3NhZ2UsXG4gICAgICAgICAgZ2V0TGFuZ3VhZ2UodGhpcy5yZWR1eERhdGEgPz8ge30sIHRoaXMudXNlckNvbmZpZylcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5maWVsZEVycm9yU2hvdyhhY3Rpb24ucHJvcHMuZmllbGRLZXksIGFjdGlvbi5wcm9wcy5tZXNzYWdlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuRklFTERfRVJST1JfSElERTpcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGFjdGlvbi5wcm9wcz8ubWVzc2FnZSAmJlxuICAgICAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGFjdGlvbi5wcm9wcy5tZXNzYWdlLCBcInNvdXJjZVwiKVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBmaWVsZEVycm9ySGlkZVNvdXJjZSA9IG5ldyBTb3VyY2Uob2JqZWN0KTtcblxuICAgICAgICAgIGxldCBmaWVsZEVycm9ySGlkZVNvdXJjZVZhbHVlID1cbiAgICAgICAgICAgIGF3YWl0IGZpZWxkRXJyb3JIaWRlU291cmNlLmdldFZhbHVlRnJvbVNvdXJjZShcbiAgICAgICAgICAgICAgYWN0aW9uLnByb3BzLm1lc3NhZ2Uuc291cmNlXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdHlwZW9mIGZpZWxkRXJyb3JIaWRlU291cmNlVmFsdWUgPT09IFwic3RyaW5nXCIgfHxcbiAgICAgICAgICAgIHR5cGVvZiBmaWVsZEVycm9ySGlkZVNvdXJjZVZhbHVlID09PSBcIm51bWJlclwiXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBmaWVsZEVycm9ySGlkZVNvdXJjZVZhbHVlID0gU3RyaW5nKGZpZWxkRXJyb3JIaWRlU291cmNlVmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmaWVsZEVycm9ySGlkZVNvdXJjZVZhbHVlID0gXCJcIjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhY3Rpb24gPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChcbiAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgIFwicHJvcHMubWVzc2FnZS5tZXNzYWdlXCIsXG4gICAgICAgICAgICBmaWVsZEVycm9ySGlkZVNvdXJjZVZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpZWxkRXJyb3JIaWRlKGFjdGlvbi5wcm9wcy5maWVsZEtleSwgYWN0aW9uLnByb3BzLm1lc3NhZ2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5GSUVMRF9NRVNTQUdFX1NIT1c6XG4gICAgICAgIHRoaXMuZmllbGRNZXNzYWdlU2hvdyhhY3Rpb24ucHJvcHMuZmllbGRLZXksIGFjdGlvbi5wcm9wcy5tZXNzYWdlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuRklFTERfTUVTU0FHRVNfSElERTpcbiAgICAgICAgdGhpcy5maWVsZE1lc3NhZ2VIaWRlKGFjdGlvbi5wcm9wcy5maWVsZEtleSwgYWN0aW9uLnByb3BzLm1lc3NhZ2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5GSUVMRF9BUElfVElNRVJfTUVTU0FHRV9TSE9XOlxuICAgICAgICBhd2FpdCB0aGlzLmZpZWxkQXBpVGltZXJNZXNzYWdlU2hvdyhcbiAgICAgICAgICBhY3Rpb24ucHJvcHMuZmllbGRLZXksXG4gICAgICAgICAgYWN0aW9uLnByb3BzLnRpbWVyXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX0FQSV9USU1FUl9NRVNTQUdFX0hJREU6XG4gICAgICAgIGF3YWl0IHRoaXMuZmllbGRBcGlUaW1lck1lc3NhZ2VIaWRlKGFjdGlvbi5wcm9wcy5maWVsZEtleSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LlJFTU9WRV9LRVlfRlJPTV9PQkpFQ1RfUEFUSDpcbiAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVLZXlGcm9tT2JqZWN0UGF0aChhY3Rpb24sIG9iamVjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LlNFVF9WQUxVRTpcbiAgICAgICAgYXdhaXQgdGhpcy5zZXRWYWx1ZShhY3Rpb24sIG9iamVjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LlNFVF9GSUVMRF9ERUZBVUxUX1ZBTFVFOlxuICAgICAgICBhd2FpdCB0aGlzLnNldEZpZWxkRGVmYXVsdFZhbHVlKGFjdGlvbiwgb2JqZWN0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuU0VUX0FQSV9TVEFUVVM6XG4gICAgICAgIGF3YWl0IHRoaXMuc2V0QXBpU3RhdHVzKGFjdGlvbiwgb2JqZWN0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuU0VUX0FQSV9IRUFERVJfVkFMVUU6XG4gICAgICAgIGF3YWl0IHRoaXMuc2V0QXBpSGVhZGVyVmFsdWUoYWN0aW9uLCBvYmplY3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5TRVRfQVBJX0hFQURFUl9WQUxJRElUWTpcbiAgICAgICAgYXdhaXQgdGhpcy5zZXRBcGlIZWFkZXJWYWxpZGl0eShhY3Rpb24sIG9iamVjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LlNFVF9BUElfQk9EWV9WQUxVRTpcbiAgICAgICAgYXdhaXQgdGhpcy5zZXRBcGlCb2R5VmFsdWUoYWN0aW9uLCBvYmplY3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5TRVRfQVBJX0JPRFlfVkFMSURJVFk6XG4gICAgICAgIGF3YWl0IHRoaXMuc2V0QXBpQm9keVZhbGlkaXR5KGFjdGlvbiwgb2JqZWN0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuU0VUX0RST1BET1dOX09QVElPTlM6XG4gICAgICAgIGF3YWl0IHRoaXMuc2V0RHJvcGRvd25PcHRpb25zKGFjdGlvbiwgb2JqZWN0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuU0VUX0ZJRUxEX1ZBTElESVRZOlxuICAgICAgICBhd2FpdCB0aGlzLnNldEZpZWxkVmFsaWRpdHkoYWN0aW9uLCBvYmplY3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5IQU5ETEVfQ09OTkVDVEVEX0VMRU1FTlRTOlxuICAgICAgICB0aGlzLmhhbmRsZUNvbm5lY3RlZEVsZW1lbnRzKFxuICAgICAgICAgIHsga2V5OiBhY3Rpb24ucHJvcHMuZmllbGRLZXkgfSxcbiAgICAgICAgICBcIk9OX0FDVElPTlwiXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LkFQSV9DQUxMOlxuICAgICAgICBhd2FpdCB0aGlzLmZpZWxkQXBpQ2FsbChhY3Rpb24sIG9iamVjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LkFQSV9DQUxMX01VTFRJUExFOlxuICAgICAgICBhd2FpdCB0aGlzLmZpZWxkTXVsdGlwbGVBcGlDYWxscyhhY3Rpb24sIG9iamVjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LkFQSV9DQUxMX01VTFRJUExFX0VORDpcbiAgICAgICAgYXdhaXQgdGhpcy5maWVsZE11bHRpcGxlQXBpQ2FsbHNFbmQoYWN0aW9uLCBvYmplY3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5UQVNLX0FQSV9DQUxMOlxuICAgICAgICBhd2FpdCB0aGlzLnRhc2tBcGlDYWxsKGFjdGlvbiwgb2JqZWN0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuVEFTS19BUElfQ0FMTF9NVUxUSVBMRTpcbiAgICAgICAgYXdhaXQgdGhpcy50YXNrTXVsdGlwbGVBcGlDYWxscyhhY3Rpb24sIG9iamVjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LlRBU0tfQVBJX0NBTExfTVVMVElQTEVfRU5EOlxuICAgICAgICBhd2FpdCB0aGlzLnRhc2tNdWx0aXBsZUFwaUNhbGxzRW5kKGFjdGlvbiwgb2JqZWN0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuUkVESVJFQ1RfVE9fVVJMOlxuICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoYWN0aW9uLnByb3BzLnVybCwgXCJzb3VyY2VcIikpIHtcbiAgICAgICAgICBjb25zdCByZWRpcmVjdFRvVXJsU291cmNlID0gbmV3IFNvdXJjZShvYmplY3QpO1xuXG4gICAgICAgICAgbGV0IHJlZGlyZWN0VG9VcmxTb3VyY2VWYWx1ZSA9XG4gICAgICAgICAgICBhd2FpdCByZWRpcmVjdFRvVXJsU291cmNlLmdldFZhbHVlRnJvbVNvdXJjZShcbiAgICAgICAgICAgICAgYWN0aW9uLnByb3BzLnVybC5zb3VyY2VcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoaXNFbXB0eVN0cmluZyhyZWRpcmVjdFRvVXJsU291cmNlVmFsdWUpKSB7XG4gICAgICAgICAgICByZWRpcmVjdFRvVXJsU291cmNlVmFsdWUgPSBcIlwiO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGFjdGlvbiA9IHNldFZhbHVlVG9PYmplY3RQYXRoKFxuICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgXCJwcm9wcy51cmwudXJsXCIsXG4gICAgICAgICAgICByZWRpcmVjdFRvVXJsU291cmNlVmFsdWVcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVkaXJlY3RUb1VybChhY3Rpb24pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5QUkVWSUVXX0RJQUxPR19TSE9XOlxuICAgICAgICB0aGlzLnNob3dQcmV2aWV3KGFjdGlvbi5wcm9wcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LlBSRVZJRVdfRVJST1JfU0hPVzpcbiAgICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGFjdGlvbi5wcm9wcy5tZXNzYWdlLCBcInNvdXJjZVwiKSkge1xuICAgICAgICAgIGNvbnN0IHByZXZpZXdFcnJvclNob3dTb3VyY2UgPSBuZXcgU291cmNlKG9iamVjdCk7XG5cbiAgICAgICAgICBsZXQgcHJldmlld0Vycm9yU2hvd1NvdXJjZVZhbHVlID1cbiAgICAgICAgICAgIGF3YWl0IHByZXZpZXdFcnJvclNob3dTb3VyY2UuZ2V0VmFsdWVGcm9tU291cmNlKFxuICAgICAgICAgICAgICBhY3Rpb24ucHJvcHMubWVzc2FnZS5zb3VyY2VcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0eXBlb2YgcHJldmlld0Vycm9yU2hvd1NvdXJjZVZhbHVlID09PSBcInN0cmluZ1wiIHx8XG4gICAgICAgICAgICB0eXBlb2YgcHJldmlld0Vycm9yU2hvd1NvdXJjZVZhbHVlID09PSBcIm51bWJlclwiXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBwcmV2aWV3RXJyb3JTaG93U291cmNlVmFsdWUgPSBTdHJpbmcocHJldmlld0Vycm9yU2hvd1NvdXJjZVZhbHVlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcHJldmlld0Vycm9yU2hvd1NvdXJjZVZhbHVlID0gXCJcIjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhY3Rpb24gPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChcbiAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgIFwicHJvcHMubWVzc2FnZS5tZXNzYWdlXCIsXG4gICAgICAgICAgICBwcmV2aWV3RXJyb3JTaG93U291cmNlVmFsdWVcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2hvd0Vycm9yUHJldmlldyhhY3Rpb24ucHJvcHMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5QT1BVUF9GT1JNX1NIT1c6XG4gICAgICAgIHRoaXMuc2hvd1BvcHVwRm9ybShcbiAgICAgICAgICBhY3Rpb24ucHJvcHMucG9wdXBGb3JtS2V5LFxuICAgICAgICAgIGFjdGlvbi5wcm9wcz8ucG9wdXBUeXBlID8/IFwiRElBTE9HXCJcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuU1RPUF9XQUlUSU5HOlxuICAgICAgICB0aGlzLndhaXRpbmdGb3JDaGFuZ2VzID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LlNDUk9MTF9UT19GSUVMRDpcbiAgICAgICAgdGhpcy5oYW5kbGVPblNjcm9sbFRvRmllbGQoYWN0aW9uLnByb3BzLmZpZWxkS2V5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuTk9USUZJQ0FUSU9OX0VSUk9SX1NIT1c6XG4gICAgICAgIHRoaXMudG9nZ2xlRXJyb3JOb3RpZmljYXRpb24odHJ1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5Lk5PVElGSUNBVElPTl9FUlJPUl9ISURFOlxuICAgICAgICB0aGlzLnRvZ2dsZUVycm9yTm90aWZpY2F0aW9uKGZhbHNlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuUkVTVU1FX1RBU0tfRVhFQ1VUSU9OOlxuICAgICAgICB0aGlzLnN0b3BUYXNrRXhlY3V0aW9uID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LlNUT1BfVEFTS19FWEVDVVRJT046XG4gICAgICAgIHRoaXMuc3RvcFRhc2tFeGVjdXRpb24gPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5ESUFMT0dfU0hPVzpcbiAgICAgICAgdGhpcy5kaWFsb2dTaG93KHtcbiAgICAgICAgICBodG1sOiBhY3Rpb24ucHJvcHM/Lmh0bWwsXG4gICAgICAgICAgbGFiZWw6IGFjdGlvbi5wcm9wcz8ubGFiZWwsXG4gICAgICAgICAgc2l6ZTogYWN0aW9uLnByb3BzPy5zaXplLFxuICAgICAgICAgIGJ1dHRvbjogYWN0aW9uLnByb3BzPy5idXR0b25cbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LkRJQUxPR19ISURFOlxuICAgICAgICB0aGlzLmRpYWxvZ0hpZGUoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuU0FWRV9GT1JNOlxuICAgICAgICB0aGlzLmhhbmRsZU9uQ2xpY2tTYXZlRm9ybSh1bmRlZmluZWQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5BTEVSVF9TSE9XOlxuICAgICAgICB0aGlzLmFsZXJ0U2hvdyhhY3Rpb24ucHJvcHMudHlwZSwgYWN0aW9uLnByb3BzLm1lc3NhZ2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5TRVRfSFRNTDpcbiAgICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGFjdGlvbi5wcm9wcy5tZXNzYWdlLCBcInNvdXJjZVwiKSkge1xuICAgICAgICAgIGNvbnN0IGZpZWxkSHRtbE1lc3NhZ2VTb3VyY2UgPSBuZXcgU291cmNlKG9iamVjdCk7XG5cbiAgICAgICAgICBsZXQgZmllbGRIdG1sTWVzc2FnZVNvdXJjZVZhbHVlID1cbiAgICAgICAgICAgIGF3YWl0IGZpZWxkSHRtbE1lc3NhZ2VTb3VyY2UuZ2V0VmFsdWVGcm9tU291cmNlKFxuICAgICAgICAgICAgICBhY3Rpb24ucHJvcHMubWVzc2FnZS5zb3VyY2VcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0eXBlb2YgZmllbGRIdG1sTWVzc2FnZVNvdXJjZVZhbHVlID09PSBcInN0cmluZ1wiIHx8XG4gICAgICAgICAgICB0eXBlb2YgZmllbGRIdG1sTWVzc2FnZVNvdXJjZVZhbHVlID09PSBcIm51bWJlclwiXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBmaWVsZEh0bWxNZXNzYWdlU291cmNlVmFsdWUgPSBTdHJpbmcoZmllbGRIdG1sTWVzc2FnZVNvdXJjZVZhbHVlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmllbGRIdG1sTWVzc2FnZVNvdXJjZVZhbHVlID0gXCJcIjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhY3Rpb24gPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChcbiAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgIFwicHJvcHMubWVzc2FnZS5tZXNzYWdlXCIsXG4gICAgICAgICAgICBmaWVsZEh0bWxNZXNzYWdlU291cmNlVmFsdWVcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGFjdGlvbi5wcm9wcy5tZXNzYWdlLm1lc3NhZ2UgPSB1cGRhdGVMYW5ndWFnZShcbiAgICAgICAgICBhY3Rpb24ucHJvcHMubWVzc2FnZS5tZXNzYWdlLFxuICAgICAgICAgIGdldExhbmd1YWdlKHRoaXMucmVkdXhEYXRhID8/IHt9LCB0aGlzLnVzZXJDb25maWcpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc2V0SHRtbChhY3Rpb24ucHJvcHMuZmllbGRLZXksIGFjdGlvbi5wcm9wcy5tZXNzYWdlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJrd2lraWQtZm9ybS1jb250YWluZXJcIlxuICAqbmdJZj1cIiFsb2FkaW5nXCJcbj5cbiAgPGRpdlxuICAgIGlkPVwidWYtZm9ybS1maWVsZHMtaGVhZGVyLWNvbnRhaW5lclwiXG4gICAgKm5nSWY9XCJcbiAgICAgICFmb3JtQ29uZmlnLnByb3BlcnRpZXM/LmhlYWRlcj8udGl0bGU/LmhpZGRlbiB8fFxuICAgICAgIWZvcm1Db25maWcucHJvcGVydGllcz8uaGVhZGVyPy5sb2dvPy5oaWRkZW4gfHxcbiAgICAgICFmb3JtQ29uZmlnLnByb3BlcnRpZXM/LmhlYWRlcj8uc3RlcHM/LmhpZGRlbiB8fFxuICAgICAgIWZvcm1Db25maWcucHJvcGVydGllcz8uaGVhZGVyPy5iYWNrQnV0dG9uPy5oaWRkZW5cbiAgICBcIlxuICA+XG4gICAgPGltZ1xuICAgICAgaWQ9XCJ1Zi1oZWFkZXItbG9nb1wiXG4gICAgICAqbmdJZj1cIiFmb3JtQ29uZmlnLnByb3BlcnRpZXM/LmhlYWRlcj8ubG9nbz8uaGlkZGVuICYmIGlzTW9iaWxlVmlld1wiXG4gICAgICBbc3JjXT1cImZvcm1Db25maWcucHJvcGVydGllcz8uaGVhZGVyPy5sb2dvPy5zcmNcIlxuICAgICAgW2FsdF09XCJmb3JtQ29uZmlnLnByb3BlcnRpZXM/LmhlYWRlcj8ubG9nbz8uYWx0XCJcbiAgICAgIFtzdHlsZV09XCJcbiAgICAgICAgZm9ybUNvbmZpZy5wcm9wZXJ0aWVzPy5oZWFkZXI/LmxvZ28/LnN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXG4gICAgICBcIlxuICAgIC8+XG4gICAgPGRpdiBpZD1cInVmLWZvcm0tZmllbGRzLWhlYWRlci1tYWluXCI+XG4gICAgICA8ZGl2IGlkPVwidWYtZm9ybS1maWVsZHMtaGVhZGVyLWxlZnRcIj5cbiAgICAgICAgPGt3aWt1aS1idXR0b25cbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgIWZvcm1Db25maWcucHJvcGVydGllcz8uaGVhZGVyLmJhY2tCdXR0b24uaGlkZGVuICYmIGlzTW9iaWxlVmlld1xuICAgICAgICAgIFwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImJhY2tCdXR0b24uZGlzYWJsZWRcIlxuICAgICAgICAgIFtzaG93TG9hZGVyXT1cImJhY2tCdXR0b24uc2hvd0xvYWRlclwiXG4gICAgICAgICAgYXBwZWFyYW5jZT1cIm1vbm9cIlxuICAgICAgICAgIGljb249XCJ0dWlJY29uQXJyb3dMZWZ0XCJcbiAgICAgICAgICBzaGFwZT1cInJvdW5kZWRcIlxuICAgICAgICAgIChvbkNsaWNrKT1cIlxuICAgICAgICAgICAgaGFuZGxlT25DbGlja0dvQmFjayhcbiAgICAgICAgICAgICAgJGV2ZW50LFxuICAgICAgICAgICAgICBmb3JtQ29uZmlnLnByb3BlcnRpZXM/LmhlYWRlci5iYWNrQnV0dG9uLm1vZGVcbiAgICAgICAgICAgIClcbiAgICAgICAgICBcIlxuICAgICAgICA+PC9rd2lrdWktYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGlkPVwidWYtZm9ybS1maWVsZHMtaGVhZGVyLXJpZ2h0XCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBpZD1cInVmLWZvcm0tZmllbGRzLXRpdGxlXCJcbiAgICAgICAgICAqbmdJZj1cIiFmb3JtQ29uZmlnLnByb3BlcnRpZXM/LmhlYWRlci50aXRsZS5oaWRkZW5cIlxuICAgICAgICAgID57eyBmb3JtQ29uZmlnLnByb3BlcnRpZXM/LmhlYWRlci50aXRsZS5sYWJlbCB9fTwvZGl2XG4gICAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGlkPVwidWYtZm9ybS1maWVsZHMtc3RlcHNcIlxuICAgICAgICAgICpuZ0lmPVwiIWZvcm1Db25maWcucHJvcGVydGllcz8uaGVhZGVyLnN0ZXBzLmhpZGRlblwiXG4gICAgICAgID5cbiAgICAgICAgICBTdGVwIHt7IGZvcm1Db25maWcuc2VxdWVuY2VObyB9fSBvZiB7eyBmb3JtQ29uZmlnLmZvcm1zTGlzdExlbmd0aCB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxoclxuICAgICAgKm5nSWY9XCJcbiAgICAgICAgIWZvcm1Db25maWcucHJvcGVydGllcz8uaGVhZGVyLnRpdGxlLmhpZGRlbiB8fFxuICAgICAgICAhZm9ybUNvbmZpZy5wcm9wZXJ0aWVzPy5oZWFkZXIuc3RlcHMuaGlkZGVuIHx8XG4gICAgICAgICFmb3JtQ29uZmlnLnByb3BlcnRpZXM/LmhlYWRlci5iYWNrQnV0dG9uLmhpZGRlblxuICAgICAgXCJcbiAgICAvPlxuICA8L2Rpdj5cbiAgPGZvcm1cbiAgICAjZm9ybUZpZWxkQ29udGFpbmVyUmVmXG4gICAgY2xhc3M9XCJrd2lraWQtZm9ybSBzaG93XCJcbiAgICBbc3R5bGVdPVwiZm9ybUNvbmZpZy5wcm9wZXJ0aWVzPy5tYWluPy5zdHlsZXMgPz8gJycgfCBzdHlsZVNhbml0aXplclwiXG4gICAgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nRm9yPVwiXG4gICAgICAgIGxldCBmaWVsZCBvZiBmb3JtRmllbGRzO1xuICAgICAgICBsZXQgaSA9IGluZGV4O1xuICAgICAgICB0cmFja0J5OiBnZXRVbmlxdWVJZGVudGlmaWVyXG4gICAgICBcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImZpZWxkLnR5cGVcIj5cbiAgICAgICAgPCEtLSBIVE1MIENvbnRlbnQgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidodG1sJ1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICNmb3JtRmllbGRzUmVmXG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgW3N0eWxlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jb250YWluZXJTdHlsZXMgPz8gJycgfCBzdHlsZVNhbml0aXplclwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBbaW5uZXJIdG1sXT1cImZpZWxkLmh0bWwgfCBrd2lrdWlTYWZlSHRtbFwiPjwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSBGb3JtIFRpdGxlIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIndGl0bGUnXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgI2Zvcm1GaWVsZHNSZWZcbiAgICAgICAgICAgIGNsYXNzPVwidGl0bGVcIlxuICAgICAgICAgICAgW3N0eWxlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jb250YWluZXJTdHlsZXMgPz8gJycgfCBzdHlsZVNhbml0aXplclwiXG4gICAgICAgICAgICBbY2xhc3MuaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIHt7IGZpZWxkLmxhYmVsIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxrd2lrdWktYnV0dG9uXG4gICAgICAgICAgICAgICpuZ0lmPVwiZmllbGQ/LnJlc2V0XCJcbiAgICAgICAgICAgICAgYXBwZWFyYW5jZT1cIndoaXRlYmxvY2tcIlxuICAgICAgICAgICAgICBzaXplPVwic1wiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZD8ucHJvcGVydGllcz8ucmVzZXRCdXR0b25MYWJlbCA/PyAnUmVzZXQnXCJcbiAgICAgICAgICAgICAgKG9uQ2xpY2spPVwiaGFuZGxlT25DbGlja1Jlc2V0Rm9ybUZpZWxkcygkZXZlbnQsIGZpZWxkKVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSBCdXR0b24gLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIididXR0b24nXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgI2Zvcm1GaWVsZHNSZWZcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICBbc3R5bGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNvbnRhaW5lclN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXCJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8a3dpa3VpLWJ1dHRvblxuICAgICAgICAgICAgICBbYXBwZWFyYW5jZV09XCJmaWVsZD8ucHJvcGVydGllcz8uYXBwZWFyYW5jZSA/PyAncHJpbWFyeSdcIlxuICAgICAgICAgICAgICBbY2xhc3NdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNsYXNzXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtpY29uXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5pY29uXCJcbiAgICAgICAgICAgICAgW2ljb25SaWdodF09XCJmaWVsZD8ucHJvcGVydGllcz8uaWNvblJpZ2h0XCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkPy5rZXlcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/LmxhYmVsXCJcbiAgICAgICAgICAgICAgW3NoYXBlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5zaGFwZVwiXG4gICAgICAgICAgICAgIFtzaG93TG9hZGVyXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5sb2FkaW5nID8/IGZhbHNlXCJcbiAgICAgICAgICAgICAgW3NpemVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnNpemVcIlxuICAgICAgICAgICAgICBbc3R5bGVzXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5zdHlsZXNcIlxuICAgICAgICAgICAgICBbdHlwZV09XCInYnV0dG9uJ1wiXG4gICAgICAgICAgICAgIChvbkNsaWNrKT1cImhhbmRsZU9uQ2xpY2tGb3JtRmllbGRCdXR0b24oZmllbGQpXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1idXR0b24+XG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSBJbnB1dCBUZXh0IC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIndGV4dCdcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAjZm9ybUZpZWxkc1JlZlxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJmaWVsZD8ucHJvcGVydGllcz8uY29udGFpbmVyU3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcIlxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxrd2lrdWktaW5wdXRcbiAgICAgICAgICAgICAgW2Nhc2VdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNhc2VcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQ/LmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgW2ZvY3VzXT1cImZpZWxkPy5mb2N1c1wiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XVwiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpbnZhbGlkXT1cImZpZWxkPy5pbnZhbGlkXCJcbiAgICAgICAgICAgICAgW2lzU2hvd0xhYmVsT3V0c2lkZV09XCJmaWVsZD8ucHJvcGVydGllcz8uaXNTaG93TGFiZWxPdXRzaWRlXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkPy5sYWJlbFwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJmaWVsZD8ucHJvcGVydGllcz8ucGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICBbcG9zdGZpeF09XCJmaWVsZD8ucHJvcGVydGllcz8ucG9zdGZpeFwiXG4gICAgICAgICAgICAgIFtwcmVmaXhdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnByZWZpeFwiXG4gICAgICAgICAgICAgIFtwcm9wZXJ0aWVzXT1cImZpZWxkPy5wcm9wZXJ0aWVzXCJcbiAgICAgICAgICAgICAgW3R5cGVdPVwiJ3RleHQnXCJcbiAgICAgICAgICAgICAgW3ZhbGlkYXRvcnNdPVwiZmllbGQ/LnZhbGlkYXRvcnNcIlxuICAgICAgICAgICAgICAoZ2V0S2V5VmFsdWUpPVwiaGFuZGxlR2V0S2V5VmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktaW5wdXQ+XG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSBJbnB1dCBDdXJyZW5jeSAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2N1cnJlbmN5J1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICNmb3JtRmllbGRzUmVmXG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgW3N0eWxlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jb250YWluZXJTdHlsZXMgPz8gJycgfCBzdHlsZVNhbml0aXplclwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGt3aWt1aS1pbnB1dC1jdXJyZW5jeVxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQ/LmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgW2ZvY3VzXT1cImZpZWxkPy5mb2N1c1wiXG4gICAgICAgICAgICAgIFtjdXJyZW5jeVR5cGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmN1cnJlbmN5VHlwZVwiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaW52YWxpZF09XCJmaWVsZD8uaW52YWxpZFwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZD8ubGFiZWxcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgW3Bvc3RmaXhdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBvc3RmaXhcIlxuICAgICAgICAgICAgICBbcHJlZml4XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wcmVmaXhcIlxuICAgICAgICAgICAgICBbcHJvcGVydGllc109XCJmaWVsZD8ucHJvcGVydGllc1wiXG4gICAgICAgICAgICAgIFt2YWxpZGF0b3JzXT1cImZpZWxkPy52YWxpZGF0b3JzXCJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cImZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldLnZhbHVlXCJcbiAgICAgICAgICAgICAgKGdldEtleVZhbHVlKT1cImhhbmRsZUdldEtleVZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgPjwva3dpa3VpLWlucHV0LWN1cnJlbmN5PlxuICAgICAgICAgICAgPGt3aWt1aS1tZXNzYWdlc1xuICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiZmllbGQubWVzc2FnZXNcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgID48L2t3aWt1aS1tZXNzYWdlcz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gRW1haWwgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidlbWFpbCdcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAjZm9ybUZpZWxkc1JlZlxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJmaWVsZD8ucHJvcGVydGllcz8uY29udGFpbmVyU3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcIlxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxrd2lrdWktaW5wdXQtZW1haWxcbiAgICAgICAgICAgICAgW2Nhc2VdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNhc2VcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQ/LmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgW2RvbWFpbnNdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmRvbWFpbnNcIlxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmllbGQ/LmZvY3VzXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmllbGQ/LmludmFsaWRcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/LmxhYmVsXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgIFtwb3N0Zml4XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wb3N0Zml4XCJcbiAgICAgICAgICAgICAgW3ByZWZpeF09XCJmaWVsZD8ucHJvcGVydGllcz8ucHJlZml4XCJcbiAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxuICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJmaWVsZD8udmFsaWRhdG9yc1wiXG4gICAgICAgICAgICAgIChnZXRLZXlWYWx1ZSk9XCJoYW5kbGVHZXRLZXlWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1pbnB1dC1lbWFpbD5cbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIFBhc3N3b3JkIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIncGFzc3dvcmQnXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgI2Zvcm1GaWVsZHNSZWZcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICBbc3R5bGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNvbnRhaW5lclN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXCJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8a3dpa3VpLWlucHV0LXBhc3N3b3JkXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmllbGQ/LmZvY3VzXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaGludENvbnRlbnRdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmhpbnRDb250ZW50XCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpbnZhbGlkXT1cImZpZWxkPy5pbnZhbGlkXCJcbiAgICAgICAgICAgICAgW2lzU2hvd0xhYmVsT3V0c2lkZV09XCJmaWVsZD8ucHJvcGVydGllcz8uaXNTaG93TGFiZWxPdXRzaWRlXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkPy5sYWJlbFwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJmaWVsZD8ucHJvcGVydGllcz8ucGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICBbcG9zdGZpeF09XCJmaWVsZD8ucHJvcGVydGllcz8ucG9zdGZpeFwiXG4gICAgICAgICAgICAgIFtwcmVmaXhdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnByZWZpeFwiXG4gICAgICAgICAgICAgIFtwcm9wZXJ0aWVzXT1cImZpZWxkPy5wcm9wZXJ0aWVzXCJcbiAgICAgICAgICAgICAgW3ZhbGlkYXRvcnNdPVwiZmllbGQ/LnZhbGlkYXRvcnNcIlxuICAgICAgICAgICAgICAoZ2V0S2V5VmFsdWUpPVwiaGFuZGxlR2V0S2V5VmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktaW5wdXQtcGFzc3dvcmQ+XG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSBUZXh0YXJlYSAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3RleHRhcmVhJ1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICNmb3JtRmllbGRzUmVmXG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgW3N0eWxlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jb250YWluZXJTdHlsZXMgPz8gJycgfCBzdHlsZVNhbml0aXplclwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGt3aWt1aS10ZXh0YXJlYVxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQ/LmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgW2ZvY3VzXT1cImZpZWxkPy5mb2N1c1wiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XVwiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpbnZhbGlkXT1cImZpZWxkPy5pbnZhbGlkXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkPy5sYWJlbFwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJmaWVsZD8ucHJvcGVydGllcz8ucGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICBbcHJvcGVydGllc109XCJmaWVsZD8ucHJvcGVydGllc1wiXG4gICAgICAgICAgICAgIFt2YWxpZGF0b3JzXT1cImZpZWxkPy52YWxpZGF0b3JzXCJcbiAgICAgICAgICAgICAgKGdldEtleVZhbHVlKT1cImhhbmRsZUdldEtleVZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgPjwva3dpa3VpLXRleHRhcmVhPlxuICAgICAgICAgICAgPGt3aWt1aS1tZXNzYWdlc1xuICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiZmllbGQubWVzc2FnZXNcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgID48L2t3aWt1aS1tZXNzYWdlcz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gQ2hlY2tib3ggLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidjaGVja2JveCdcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAjZm9ybUZpZWxkc1JlZlxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJmaWVsZD8ucHJvcGVydGllcz8uY29udGFpbmVyU3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcIlxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxrd2lrdWktY2hlY2tib3hcbiAgICAgICAgICAgICAgW2NvbnRlbnRBbGlnbl09XCJmaWVsZD8ucHJvcGVydGllcz8uY29udGVudEFsaWduID8/ICdsZWZ0J1wiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmllbGQ/LmZvY3VzXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmllbGQ/LmludmFsaWRcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgIFtwcm9wZXJ0aWVzXT1cImZpZWxkPy5wcm9wZXJ0aWVzXCJcbiAgICAgICAgICAgICAgW3NpemVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnNpemUgPz8gJ2wnXCJcbiAgICAgICAgICAgICAgW3ZhbGlkYXRvcnNdPVwiZmllbGQ/LnZhbGlkYXRvcnNcIlxuICAgICAgICAgICAgICBbdmFyaWFudF09XCJmaWVsZD8ucHJvcGVydGllcz8udmFyaWFudCA/PyAnYmxvY2snXCJcbiAgICAgICAgICAgICAgKGdldEtleVZhbHVlKT1cImhhbmRsZUdldEtleVZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgPjwva3dpa3VpLWNoZWNrYm94PlxuICAgICAgICAgICAgPGt3aWt1aS1tZXNzYWdlc1xuICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiZmllbGQubWVzc2FnZXNcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgID48L2t3aWt1aS1tZXNzYWdlcz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gSW5wdXQgTnVtYmVyIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInbnVtYmVyJ1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICNmb3JtRmllbGRzUmVmXG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgW3N0eWxlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jb250YWluZXJTdHlsZXMgPz8gJycgfCBzdHlsZVNhbml0aXplclwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGt3aWt1aS1pbnB1dC1udW1iZXJcbiAgICAgICAgICAgICAgW2RlY2ltYWxdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmRlY2ltYWxcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQ/LmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgW2ZvY3VzXT1cImZpZWxkPy5mb2N1c1wiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XVwiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpbnZhbGlkXT1cImZpZWxkPy5pbnZhbGlkXCJcbiAgICAgICAgICAgICAgW2lzU2hvd0xhYmVsT3V0c2lkZV09XCJmaWVsZD8ucHJvcGVydGllcz8uaXNTaG93TGFiZWxPdXRzaWRlXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkPy5sYWJlbFwiXG4gICAgICAgICAgICAgIFttYXhdPVwiZmllbGQ/LnByb3BlcnRpZXM/Lm1heFwiXG4gICAgICAgICAgICAgIFttaW5dPVwiZmllbGQ/LnByb3BlcnRpZXM/Lm1pblwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJmaWVsZD8ucHJvcGVydGllcz8ucGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICBbcG9zdGZpeF09XCJmaWVsZD8ucHJvcGVydGllcz8ucG9zdGZpeCA/PyAnJ1wiXG4gICAgICAgICAgICAgIFtwcmVjaXNpb25dPVwiZmllbGQ/LnByb3BlcnRpZXM/LnByZWNpc2lvblwiXG4gICAgICAgICAgICAgIFtwcmVmaXhdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnByZWZpeCA/PyAnJ1wiXG4gICAgICAgICAgICAgIFtwcm9wZXJ0aWVzXT1cImZpZWxkPy5wcm9wZXJ0aWVzXCJcbiAgICAgICAgICAgICAgW3ZhbGlkYXRvcnNdPVwiZmllbGQ/LnZhbGlkYXRvcnNcIlxuICAgICAgICAgICAgICAoZ2V0S2V5VmFsdWUpPVwiaGFuZGxlR2V0S2V5VmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktaW5wdXQtbnVtYmVyPlxuICAgICAgICAgICAgPGt3aWt1aS1tZXNzYWdlc1xuICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiZmllbGQubWVzc2FnZXNcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgID48L2t3aWt1aS1tZXNzYWdlcz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gSW5wdXQgRGF0ZSAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2RhdGUnXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgI2Zvcm1GaWVsZHNSZWZcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICBbc3R5bGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNvbnRhaW5lclN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXCJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8a3dpa3VpLWlucHV0LWRhdGVcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtmb2N1c109XCJmaWVsZD8uZm9jdXNcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV1cIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaW52YWxpZF09XCJmaWVsZD8uaW52YWxpZFwiXG4gICAgICAgICAgICAgIFtpc1Nob3dMYWJlbE91dHNpZGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmlzU2hvd0xhYmVsT3V0c2lkZVwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZD8ubGFiZWxcIlxuICAgICAgICAgICAgICBbbWF4XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5tYXhcIlxuICAgICAgICAgICAgICBbbWF4Q2FsY3VsYXRlZEZyb21Ub2RheV09XCJcbiAgICAgICAgICAgICAgICBmaWVsZD8ucHJvcGVydGllcz8ubWF4Q2FsY3VsYXRlZEZyb21Ub2RheVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbbWluXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5taW5cIlxuICAgICAgICAgICAgICBbbWluQ2FsY3VsYXRlZEZyb21Ub2RheV09XCJcbiAgICAgICAgICAgICAgICBmaWVsZD8ucHJvcGVydGllcz8ubWluQ2FsY3VsYXRlZEZyb21Ub2RheVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgW3Bvc3RmaXhdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBvc3RmaXhcIlxuICAgICAgICAgICAgICBbcHJlZml4XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wcmVmaXhcIlxuICAgICAgICAgICAgICBbcHJvcGVydGllc109XCJmaWVsZD8ucHJvcGVydGllc1wiXG4gICAgICAgICAgICAgIFt2YWxpZGF0b3JzXT1cImZpZWxkPy52YWxpZGF0b3JzXCJcbiAgICAgICAgICAgICAgKGdldEtleVZhbHVlKT1cImhhbmRsZUdldEtleVZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgPjwva3dpa3VpLWlucHV0LWRhdGU+XG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSBJbnB1dCBUaW1lIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIndGltZSdcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAjZm9ybUZpZWxkc1JlZlxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJmaWVsZD8ucHJvcGVydGllcz8uY29udGFpbmVyU3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcIlxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxrd2lrdWktaW5wdXQtdGltZVxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQ/LmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgW2ZvY3VzXT1cImZpZWxkPy5mb2N1c1wiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XVwiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpbnZhbGlkXT1cImZpZWxkPy5pbnZhbGlkXCJcbiAgICAgICAgICAgICAgW2lzU2hvd0xhYmVsT3V0c2lkZV09XCJmaWVsZD8ucHJvcGVydGllcz8uaXNTaG93TGFiZWxPdXRzaWRlXCJcbiAgICAgICAgICAgICAgW2l0ZW1zXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5pdGVtc1wiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZD8ubGFiZWxcIlxuICAgICAgICAgICAgICBbbW9kZV09XCJmaWVsZD8ucHJvcGVydGllcz8ubW9kZVwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJmaWVsZD8ucHJvcGVydGllcz8ucGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICBbcG9zdGZpeF09XCJmaWVsZD8ucHJvcGVydGllcz8ucG9zdGZpeFwiXG4gICAgICAgICAgICAgIFtwcmVmaXhdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnByZWZpeFwiXG4gICAgICAgICAgICAgIFtwcm9wZXJ0aWVzXT1cImZpZWxkPy5wcm9wZXJ0aWVzXCJcbiAgICAgICAgICAgICAgW3ZhbGlkYXRvcnNdPVwiZmllbGQ/LnZhbGlkYXRvcnNcIlxuICAgICAgICAgICAgICAoZ2V0S2V5VmFsdWUpPVwiaGFuZGxlR2V0S2V5VmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktaW5wdXQtdGltZT5cbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIElucHV0IFBob25lIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIncGhvbmUnXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgI2Zvcm1GaWVsZHNSZWZcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICBbc3R5bGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNvbnRhaW5lclN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXCJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8a3dpa3VpLWlucHV0LXBob25lXG4gICAgICAgICAgICAgIFtjb3VudHJ5Q29kZV09XCJmaWVsZD8ucHJvcGVydGllcz8uY291bnRyeUNvZGVcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQ/LmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgW2lzU2hvd0xhYmVsT3V0c2lkZV09XCJmaWVsZD8ucHJvcGVydGllcz8uaXNTaG93TGFiZWxPdXRzaWRlXCJcbiAgICAgICAgICAgICAgW2ZvY3VzXT1cImZpZWxkPy5mb2N1c1wiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XVwiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpbnZhbGlkXT1cImZpZWxkPy5pbnZhbGlkXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkPy5sYWJlbFwiXG4gICAgICAgICAgICAgIFtwaG9uZU1hc2tBZnRlckNvdW50cnlDb2RlXT1cIlxuICAgICAgICAgICAgICAgIGZpZWxkPy5wcm9wZXJ0aWVzPy5waG9uZU1hc2tBZnRlckNvdW50cnlDb2RlXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJmaWVsZD8ucHJvcGVydGllcz8ucGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICBbcG9zdGZpeF09XCJmaWVsZD8ucHJvcGVydGllcz8ucG9zdGZpeFwiXG4gICAgICAgICAgICAgIFtwcmVmaXhdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnByZWZpeFwiXG4gICAgICAgICAgICAgIFtwcm9wZXJ0aWVzXT1cImZpZWxkPy5wcm9wZXJ0aWVzXCJcbiAgICAgICAgICAgICAgW3JlbW92ZUNvdW50cnlDb2RlRnJvbVZhbHVlXT1cIlxuICAgICAgICAgICAgICAgIGZpZWxkPy5wcm9wZXJ0aWVzPy5yZW1vdmVDb3VudHJ5Q29kZUZyb21WYWx1ZVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJmaWVsZD8udmFsaWRhdG9yc1wiXG4gICAgICAgICAgICAgIChnZXRLZXlWYWx1ZSk9XCJoYW5kbGVHZXRLZXlWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1pbnB1dC1waG9uZT5cbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIElucHV0IFJhZGlvIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIncmFkaW8nXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgI2Zvcm1GaWVsZHNSZWZcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICBbc3R5bGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNvbnRhaW5lclN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXCJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgW3R1aUxhYmVsXT1cImxhYmVsVGVtcGxhdGVcIlxuICAgICAgICAgICAgICBzdHlsZT1cIm1pbi1oZWlnaHQ6IGF1dG87IHBhZGRpbmc6IDBweCAwLjVyZW1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8a3dpa3VpLWlucHV0LXJhZGlvXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgW2ZvY3VzXT1cImZpZWxkPy5mb2N1c1wiXG4gICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldXCJcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmllbGQ/LmludmFsaWRcIlxuICAgICAgICAgICAgICAgIFtpdGVtc109XCJmaWVsZD8ub3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkPy5sYWJlbFwiXG4gICAgICAgICAgICAgICAgW29yaWVudGF0aW9uXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5vcmllbnRhdGlvblwiXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxuICAgICAgICAgICAgICAgIFtzaXplXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5zaXplXCJcbiAgICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJmaWVsZD8udmFsaWRhdG9yc1wiXG4gICAgICAgICAgICAgICAgKGdldEtleVZhbHVlKT1cImhhbmRsZUdldEtleVZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgICA+PC9rd2lrdWktaW5wdXQtcmFkaW8+XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNsYWJlbFRlbXBsYXRlPlxuICAgICAgICAgICAgICA8cFxuICAgICAgICAgICAgICAgIGNsYXNzPVwidHVpLXNwYWNlX2JvdHRvbS0yXCJcbiAgICAgICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxiPlxuICAgICAgICAgICAgICAgICAge3sgZmllbGQubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZmllbGQudmFsaWRhdG9ycz8ucmVxdWlyZWRcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYj5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIERyb3Bkb3duIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInc2VsZWN0J1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICNmb3JtRmllbGRzUmVmXG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgW3N0eWxlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jb250YWluZXJTdHlsZXMgPz8gJycgfCBzdHlsZVNhbml0aXplclwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGt3aWt1aS1pbnB1dC1zZWxlY3RcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtmb2N1c109XCJmaWVsZD8uZm9jdXNcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV1cIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaW52YWxpZF09XCJmaWVsZD8uaW52YWxpZFwiXG4gICAgICAgICAgICAgIFtpc1Nob3dMYWJlbE91dHNpZGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmlzU2hvd0xhYmVsT3V0c2lkZVwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZD8ubGFiZWxcIlxuICAgICAgICAgICAgICBbb3B0aW9uc109XCJmaWVsZC5vcHRpb25zXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgIFtwcm9wZXJ0aWVzXT1cImZpZWxkPy5wcm9wZXJ0aWVzXCJcbiAgICAgICAgICAgICAgW3NlYXJjaGFibGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnNlYXJjaGFibGVcIlxuICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJmaWVsZD8udmFsaWRhdG9yc1wiXG4gICAgICAgICAgICAgIChnZXRLZXlWYWx1ZSk9XCJoYW5kbGVHZXRLZXlWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1pbnB1dC1zZWxlY3Q+XG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSBJbnB1dCBTbGlkZXIgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidzbGlkZXInXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgI2Zvcm1GaWVsZHNSZWZcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICBbc3R5bGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNvbnRhaW5lclN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXCJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8a3dpa3VpLWlucHV0LXNsaWRlclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQ/LmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgW2ZvY3VzXT1cImZpZWxkPy5mb2N1c1wiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XVwiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpbnZhbGlkXT1cImZpZWxkPy5pbnZhbGlkXCJcbiAgICAgICAgICAgICAgW2lzU2hvd0xhYmVsT3V0c2lkZV09XCJmaWVsZD8ucHJvcGVydGllcz8uaXNTaG93TGFiZWxPdXRzaWRlXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkPy5sYWJlbFwiXG4gICAgICAgICAgICAgIFttYXhdPVwiZmllbGQ/LnByb3BlcnRpZXM/Lm1heFwiXG4gICAgICAgICAgICAgIFttaW5dPVwiZmllbGQ/LnByb3BlcnRpZXM/Lm1pblwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJmaWVsZD8ucHJvcGVydGllcz8ucGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICBbcG9zdGZpeF09XCJmaWVsZD8ucHJvcGVydGllcz8ucG9zdGZpeFwiXG4gICAgICAgICAgICAgIFtwcmVmaXhdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnByZWZpeFwiXG4gICAgICAgICAgICAgIFtwcm9wZXJ0aWVzXT1cImZpZWxkPy5wcm9wZXJ0aWVzXCJcbiAgICAgICAgICAgICAgW3F1YW50dW1dPVwiZmllbGQ/LnByb3BlcnRpZXM/LnF1YW50dW1cIlxuICAgICAgICAgICAgICBbc2l6ZV09XCJmaWVsZD8ucHJvcGVydGllcz8uc2l6ZVwiXG4gICAgICAgICAgICAgIFtzdGVwc109XCJmaWVsZD8ucHJvcGVydGllcz8uc3RlcHNcIlxuICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJmaWVsZD8udmFsaWRhdG9yc1wiXG4gICAgICAgICAgICAgIChnZXRLZXlWYWx1ZSk9XCJoYW5kbGVHZXRLZXlWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1pbnB1dC1zbGlkZXI+XG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSBBUEkgQ2FsbCAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2FwaSdcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAjZm9ybUZpZWxkc1JlZlxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJmaWVsZD8ucHJvcGVydGllcz8uY29udGFpbmVyU3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcIlxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxrd2lrdWktYnV0dG9uLWFwaS1jYWxsXG4gICAgICAgICAgICAgIFthcGlTdGF0dXNdPVwiZmllbGQ/LmFwaT8uc3RhdHVzPy52YWx1ZVwiXG4gICAgICAgICAgICAgIFthcGlUaW1lcl09XCJmaWVsZD8uYXBpPy50aW1lclwiXG4gICAgICAgICAgICAgIFtjbGFzc109XCJmaWVsZD8uY2xhc3NcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQ/LmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZD8uYXBpPy5zdGF0dXM/LmxhYmVsc1tmaWVsZD8uYXBpPy5zdGF0dXM/LnZhbHVlXVwiXG4gICAgICAgICAgICAgIFtzaG93TG9hZGVyXT1cImZpZWxkPy5kaXNhYmxlZCA9PT0gJ2xvYWRpbmcnXCJcbiAgICAgICAgICAgICAgW3NpemVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnNpemVcIlxuICAgICAgICAgICAgICBbc3R5bGVzXT1cIlxuICAgICAgICAgICAgICAgIGZpZWxkPy5wcm9wZXJ0aWVzPy5zdHlsZXNcbiAgICAgICAgICAgICAgICAgID8gZmllbGQ/LnByb3BlcnRpZXM/LnN0eWxlc1xuICAgICAgICAgICAgICAgICAgOiAnd2lkdGg6IGZpdC1jb250ZW50J1xuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAob25DbGljayk9XCJoYW5kbGVPbkNsaWNrQXBpQ2FsbCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKG9uQXBpVGltZXJTdG9wKT1cImhhbmRsZU9uQXBpVGltZXJTdG9wKCRldmVudClcIlxuICAgICAgICAgICAgPjwva3dpa3VpLWJ1dHRvbi1hcGktY2FsbD5cbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIExpdmUgTG9jYXRpb24gLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidsaXZlLWxvY2F0aW9uJ1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICNmb3JtRmllbGRzUmVmXG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgW3N0eWxlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jb250YWluZXJTdHlsZXMgPz8gJycgfCBzdHlsZVNhbml0aXplclwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGt3aWt1aS1idXR0b24tbGl2ZS1sb2NhdGlvblxuICAgICAgICAgICAgICBbY2xhc3NdPVwiZmllbGQ/LmNsYXNzXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/LmFwaT8uc3RhdHVzPy5sYWJlbHNbZmllbGQ/LmFwaT8uc3RhdHVzPy52YWx1ZV1cIlxuICAgICAgICAgICAgICBbbGl2ZUxvY2F0aW9uU3RhdHVzXT1cImZpZWxkPy5hcGk/LnN0YXR1cz8udmFsdWVcIlxuICAgICAgICAgICAgICBbc2hhcGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnNoYXBlXCJcbiAgICAgICAgICAgICAgW2lzU2hvd0xhdExvbmdDYXB0dXJlVGltZXN0YW1wXT1cIlxuICAgICAgICAgICAgICAgIGZpZWxkPy5wcm9wZXJ0aWVzPy5pc1Nob3dMYXRMb25nQ2FwdHVyZVRpbWVzdGFtcFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbc2hvd0xvYWRlcl09XCJmaWVsZD8uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbc2l6ZV09XCJmaWVsZD8ucHJvcGVydGllcz8uc2l6ZVwiXG4gICAgICAgICAgICAgIHN0eWxlcz1cIndpZHRoOiBmaXQtY29udGVudFwiXG4gICAgICAgICAgICAgIChvbkNsaWNrKT1cImhhbmRsZU9uQ2xpY2tMaXZlTG9jYXRpb24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChvbkxvY2F0aW9uUGVybWlzc2lvbik9XCJoYW5kbGVPbkxvY2F0aW9uUGVybWlzc2lvbigkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1idXR0b24tbGl2ZS1sb2NhdGlvbj5cbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIE1vYmlsZSBPVFAgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidvdHAnXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgI2Zvcm1GaWVsZHNSZWZcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICBbc3R5bGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNvbnRhaW5lclN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXCJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8a3dpa3VpLWlucHV0LW90cFxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQ/LmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgW2ZvY3VzXT1cImZpZWxkPy5mb2N1c1wiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XVwiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpbnZhbGlkXT1cImZpZWxkPy5pbnZhbGlkXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkPy5sYWJlbFwiXG4gICAgICAgICAgICAgIFttYXNrXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5tYXNrXCJcbiAgICAgICAgICAgICAgW21vZGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/Lm1vZGVcIlxuICAgICAgICAgICAgICBbb3RwTGVuZ3RoXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5vdHBMZW5ndGhcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxuICAgICAgICAgICAgICBbc2l6ZV09XCJmaWVsZD8ucHJvcGVydGllcz8uc2l6ZVwiXG4gICAgICAgICAgICAgIFt2YWxpZGF0b3JzXT1cImZpZWxkPy52YWxpZGF0b3JzXCJcbiAgICAgICAgICAgICAgKGdldEtleVZhbHVlKT1cImhhbmRsZUdldEtleVZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgPjwva3dpa3VpLWlucHV0LW90cD5cbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIE1hc2tlZCBJbnB1dCAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ21hc2tlZCdcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAjZm9ybUZpZWxkc1JlZlxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJmaWVsZD8ucHJvcGVydGllcz8uY29udGFpbmVyU3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcIlxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxrd2lrdWktaW5wdXQtbWFza2VkXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmllbGQ/LmZvY3VzXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmllbGQ/LmludmFsaWRcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/LmxhYmVsXCJcbiAgICAgICAgICAgICAgW21hc2tDaGFyXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5tYXNrQ2hhciA/PyAnWCdcIlxuICAgICAgICAgICAgICBbbWFza0NvdW50XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5tYXNrQ291bnQgPz8gMFwiXG4gICAgICAgICAgICAgIFttYXNrRGlyZWN0aW9uXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5tYXNrRGlyZWN0aW9uID8/ICdmcm9tUmlnaHQnXCJcbiAgICAgICAgICAgICAgW3BhdHRlcm5dPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBhdHRlcm4gPz8gJydcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiXG4gICAgICAgICAgICAgICAgZmllbGQ/LnBsYWNlaG9sZGVyID8/IGZpZWxkPy5wcm9wZXJ0aWVzPy5wbGFjZWhvbGRlclxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbcHJvcGVydGllc109XCJmaWVsZD8ucHJvcGVydGllc1wiXG4gICAgICAgICAgICAgIFt2YWxpZGF0b3JzXT1cImZpZWxkPy52YWxpZGF0b3JzXCJcbiAgICAgICAgICAgICAgKGdldEtleVZhbHVlKT1cImhhbmRsZUdldEtleVZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgPjwva3dpa3VpLWlucHV0LW1hc2tlZD5cbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIEFhZGhhYXIgTnVtYmVyIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInYWFkaGFhci1udW1iZXInXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgI2Zvcm1GaWVsZHNSZWZcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICBbc3R5bGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNvbnRhaW5lclN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXCJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8a3dpa3VpLWlucHV0LWFhZGhhYXJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtmb2N1c109XCJmaWVsZD8uZm9jdXNcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV1cIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaW52YWxpZF09XCJmaWVsZD8uaW52YWxpZFwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZD8ubGFiZWxcIlxuICAgICAgICAgICAgICBbbWFza109XCJmaWVsZD8ucHJvcGVydGllcz8ubWFza1wiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJmaWVsZD8ucGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICBbcHJvcGVydGllc109XCJmaWVsZD8ucHJvcGVydGllc1wiXG4gICAgICAgICAgICAgIFt2YWxpZGF0b3JzXT1cImZpZWxkPy52YWxpZGF0b3JzXCJcbiAgICAgICAgICAgICAgKGdldEtleVZhbHVlKT1cImhhbmRsZUdldEtleVZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgPjwva3dpa3VpLWlucHV0LWFhZGhhYXI+XG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSBQcmV2aWV3IEltYWdlIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInaW1hZ2UnXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgI2Zvcm1GaWVsZHNSZWZcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICBbc3R5bGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNvbnRhaW5lclN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXCJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8a3dpa3VpLWltYWdlXG4gICAgICAgICAgICAgIFthbHRUZXh0XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5hbHRUZXh0XCJcbiAgICAgICAgICAgICAgW2NsYXNzXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jbGFzc1wiXG4gICAgICAgICAgICAgIFtodG1sXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5odG1sXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpbWFnZVNyY109XCJmb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS52YWx1ZSA/PyAnJ1wiXG4gICAgICAgICAgICAgIFtpbWFnZVR5cGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmltYWdlVHlwZVwiXG4gICAgICAgICAgICAgIFtsb2FkaW5nVHlwZV09XCJmaWVsZD8ucHJvcGVydGllcz8ubG9hZGluZ1R5cGVcIlxuICAgICAgICAgICAgICBbc3R5bGVzXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5zdHlsZXNcIlxuICAgICAgICAgICAgPjwva3dpa3VpLWltYWdlPlxuICAgICAgICAgICAgPGt3aWt1aS1tZXNzYWdlc1xuICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiZmllbGQubWVzc2FnZXNcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgID48L2t3aWt1aS1tZXNzYWdlcz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gRmlsZSBVcGxvYWQgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidmaWxlJ1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICNmb3JtRmllbGRzUmVmXG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgW3N0eWxlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jb250YWluZXJTdHlsZXMgPz8gJycgfCBzdHlsZVNhbml0aXplclwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgIFt0dWlMYWJlbF09XCJsYWJlbFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgc3R5bGU9XCJtaW4taGVpZ2h0OiBhdXRvXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGt3aWt1aS1pbnB1dC1maWxlc1xuICAgICAgICAgICAgICAgIFthY2NlcHRdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmFjY2VwdFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jbGFzc1wiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgW2ZpbGVzXT1cImZpbGVzW2ZpZWxkLmtleV1cIlxuICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XVwiXG4gICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICAgIFtpZF09XCJmaWVsZD8ua2V5XCJcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmxhYmVsXCJcbiAgICAgICAgICAgICAgICBbbGlua109XCJmaWVsZD8ucHJvcGVydGllcz8ubGlua1wiXG4gICAgICAgICAgICAgICAgW21heEZpbGVTaXplXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5tYXhGaWxlU2l6ZVwiXG4gICAgICAgICAgICAgICAgW211bHRpcGxlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5tdWx0aXBsZVwiXG4gICAgICAgICAgICAgICAgW3NldEZpbGVUeXBlc1RvRm9ybV09XCJbJ05PUk1BTCddXCJcbiAgICAgICAgICAgICAgICBbc3R5bGVzXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5zdHlsZXNcIlxuICAgICAgICAgICAgICAgIFt2YWxpZGF0b3JzXT1cImZpZWxkPy52YWxpZGF0b3JzXCJcbiAgICAgICAgICAgICAgICBbc2hvd1ZpZXdCdXR0b25dPVwiZmllbGQ/LnByb3BlcnRpZXM/LnNob3dWaWV3QnV0dG9uXCJcbiAgICAgICAgICAgICAgICAoZ2V0S2V5VmFsdWUpPVwiaGFuZGxlR2V0S2V5VmFsdWVGaWxlKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChnZXRSZW1vdmVkRmlsZSk9XCJoYW5kbGVSZW1vdmVkRmlsZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoZ2V0Vmlld0J1dHRvbkNsaWNrKT1cImhhbmRsZVZpZXdCdXR0b25DbGljaygkZXZlbnQsIGZpZWxkKVwiXG4gICAgICAgICAgICAgID48L2t3aWt1aS1pbnB1dC1maWxlcz5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2xhYmVsVGVtcGxhdGU+XG4gICAgICAgICAgICAgIDxwXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nOiAwcHggMC4yNXJlbTsgbWFyZ2luLWJvdHRvbTogMC4yNXJlbVwiXG4gICAgICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8Yj5cbiAgICAgICAgICAgICAgICAgIHt7IGZpZWxkLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZpZWxkLnZhbGlkYXRvcnM/LnJlcXVpcmVkXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2I+XG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSBDYW1lcmEgQ2FwdHVyZSAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2NhcHR1cmUnXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgI2Zvcm1GaWVsZHNSZWZcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICBbc3R5bGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNvbnRhaW5lclN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXCJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICBmaWVsZD8ubGFiZWwgIT09ICcnICYmXG4gICAgICAgICAgICAgICAgZmllbGQ/LmxhYmVsICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICBmaWVsZD8ubGFiZWwgIT09IG51bGxcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgc3R5bGU9XCJtaW4taGVpZ2h0OiBhdXRvXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHBcbiAgICAgICAgICAgICAgICAqbmdJZj1cImZpZWxkPy5sYWJlbCAhPT0gJydcIlxuICAgICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZzogMHB4IDAuMjVyZW07IG1hcmdpbi1ib3R0b206IDAuNXJlbVwiXG4gICAgICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8Yj5cbiAgICAgICAgICAgICAgICAgIHt7IGZpZWxkLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZpZWxkLnZhbGlkYXRvcnM/LnJlcXVpcmVkXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2I+XG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8a3dpa3VpLWlucHV0LWNhbWVyYVxuICAgICAgICAgICAgICBbYnV0dG9uVGV4dF09XCJmaWVsZD8ucHJvcGVydGllcz8uYnV0dG9uVGV4dFwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmllbGQ/LmZvY3VzXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaWNvbl09XCJmaWVsZD8ucHJvcGVydGllcz8uaWNvblwiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaW52YWxpZF09XCJmaWVsZD8uaW52YWxpZFwiXG4gICAgICAgICAgICAgIFttZWRpYUZpbGVzXT1cIlxuICAgICAgICAgICAgICAgIG1lZGlhRmlsZXNbZmllbGQua2V5XSB8IGZpbHRlckltYWdlVXJsT3JCYXNlNjRGcm9tT2JqZWN0XG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIFtwcm9wZXJ0aWVzXT1cImZpZWxkPy5wcm9wZXJ0aWVzXCJcbiAgICAgICAgICAgICAgW3Nob3dNZWRpYUZpbGVzXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5zaG93TWVkaWFGaWxlc1wiXG4gICAgICAgICAgICAgIFt0eXBlXT1cIidjYXB0dXJlJ1wiXG4gICAgICAgICAgICAgIFt2YWxpZGF0b3JzXT1cImZpZWxkPy52YWxpZGF0b3JzXCJcbiAgICAgICAgICAgICAgKG9uQ2xpY2spPVwiaGFuZGxlT25DbGlja0lucHV0Q2FtZXJhKCRldmVudCwgZmllbGQpXCJcbiAgICAgICAgICAgICAgKGdldFJlbW92ZWRGaWxlKT1cImhhbmRsZU9uQ2xpY2tHZXRSZW1vdmVkTWVkaWFGaWxlKCRldmVudClcIlxuICAgICAgICAgICAgPjwva3dpa3VpLWlucHV0LWNhbWVyYT5cbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIENhbWVyYSBSZWNvcmQgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidyZWNvcmQnXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgI2Zvcm1GaWVsZHNSZWZcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICBbc3R5bGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNvbnRhaW5lclN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXCJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICBmaWVsZD8ubGFiZWwgIT09ICcnICYmXG4gICAgICAgICAgICAgICAgZmllbGQ/LmxhYmVsICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICBmaWVsZD8ubGFiZWwgIT09IG51bGxcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgc3R5bGU9XCJtaW4taGVpZ2h0OiBhdXRvXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHBcbiAgICAgICAgICAgICAgICAqbmdJZj1cImZpZWxkPy5sYWJlbCAhPT0gJydcIlxuICAgICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZzogMHB4IDAuMjVyZW07IG1hcmdpbi1ib3R0b206IDAuNXJlbVwiXG4gICAgICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8Yj5cbiAgICAgICAgICAgICAgICAgIHt7IGZpZWxkLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZpZWxkLnZhbGlkYXRvcnM/LnJlcXVpcmVkXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2I+XG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8a3dpa3VpLWlucHV0LWNhbWVyYVxuICAgICAgICAgICAgICBbYnV0dG9uVGV4dF09XCJmaWVsZD8ucHJvcGVydGllcz8uYnV0dG9uVGV4dFwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmllbGQ/LmZvY3VzXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaWNvbl09XCJmaWVsZD8ucHJvcGVydGllcz8uaWNvblwiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaW52YWxpZF09XCJmaWVsZD8uaW52YWxpZFwiXG4gICAgICAgICAgICAgIFttZWRpYUZpbGVzXT1cIlxuICAgICAgICAgICAgICAgIG1lZGlhRmlsZXNbZmllbGQua2V5XSB8IGZpbHRlclZpZGVvVXJsT3JCYXNlNjRGcm9tT2JqZWN0XG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIFtwcm9wZXJ0aWVzXT1cImZpZWxkPy5wcm9wZXJ0aWVzXCJcbiAgICAgICAgICAgICAgW3Nob3dNZWRpYUZpbGVzXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5zaG93TWVkaWFGaWxlc1wiXG4gICAgICAgICAgICAgIFt0eXBlXT1cIidyZWNvcmQnXCJcbiAgICAgICAgICAgICAgW3ZhbGlkYXRvcnNdPVwiZmllbGQ/LnZhbGlkYXRvcnNcIlxuICAgICAgICAgICAgICAob25DbGljayk9XCJoYW5kbGVPbkNsaWNrSW5wdXRDYW1lcmEoJGV2ZW50LCBmaWVsZClcIlxuICAgICAgICAgICAgICAoZ2V0UmVtb3ZlZEZpbGUpPVwiaGFuZGxlT25DbGlja0dldFJlbW92ZWRNZWRpYUZpbGUoJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktaW5wdXQtY2FtZXJhPlxuICAgICAgICAgICAgPGt3aWt1aS1tZXNzYWdlc1xuICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiZmllbGQubWVzc2FnZXNcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgID48L2t3aWt1aS1tZXNzYWdlcz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gTWljcm9waG9uZSBSZWNvcmQgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidtaWMnXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgI2Zvcm1GaWVsZHNSZWZcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICBbc3R5bGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNvbnRhaW5lclN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXCJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8a3dpa3VpLWlucHV0LW1pY1xuICAgICAgICAgICAgICBbYnV0dG9uVGV4dF09XCJmaWVsZD8ucHJvcGVydGllcz8uYnV0dG9uVGV4dCA/PyAnUmVjb3JkJ1wiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV1cIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpY29uXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5pY29uID8/ICd0dWlJY29uTWljTGFyZ2UnXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpbnZhbGlkXT1cImZpZWxkPy5pbnZhbGlkXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkPy5sYWJlbFwiXG4gICAgICAgICAgICAgIFttaW5SZWNvcmRpbmdUaW1lSW5TZWNvbmRzXT1cIlxuICAgICAgICAgICAgICAgIGZpZWxkPy5wcm9wZXJ0aWVzPy5taW5SZWNvcmRpbmdUaW1lSW5TZWNvbmRzID8/IDBcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW21heFJlY29yZGluZ1RpbWVJblNlY29uZHNdPVwiXG4gICAgICAgICAgICAgICAgZmllbGQ/LnByb3BlcnRpZXM/Lm1heFJlY29yZGluZ1RpbWVJblNlY29uZHMgPz8gNjBcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxuICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJmaWVsZD8udmFsaWRhdG9yc1wiXG4gICAgICAgICAgICAgIChnZXRLZXlWYWx1ZSk9XCJoYW5kbGVHZXRLZXlWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1pbnB1dC1taWM+XG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSBTdGFyIFJhdGluZyAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3N0YXItcmF0aW5nJ1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICNmb3JtRmllbGRzUmVmXG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgW3N0eWxlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jb250YWluZXJTdHlsZXMgPz8gJycgfCBzdHlsZVNhbml0aXplclwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgIFt0dWlMYWJlbF09XCJsYWJlbFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgc3R5bGU9XCJtaW4taGVpZ2h0OiBhdXRvOyBwYWRkaW5nOiAwcHggMC41cmVtXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGt3aWt1aS1zdGFyLXJhdGluZ1xuICAgICAgICAgICAgICAgIFtjb2xvcl09XCJmaWVsZD8ucHJvcGVydGllcz8uY29sb3JcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIFtmb2N1c109XCJmaWVsZD8uZm9jdXNcIlxuICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XVwiXG4gICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICAgIFtpY29uXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5pY29uXCJcbiAgICAgICAgICAgICAgICBbaWNvbk1hcmtlZF09XCJmaWVsZD8ucHJvcGVydGllcz8uaWNvbk1hcmtlZFwiXG4gICAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmllbGQ/LmludmFsaWRcIlxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZD8ubGFiZWxcIlxuICAgICAgICAgICAgICAgIFttYXhdPVwiZmllbGQ/LnByb3BlcnRpZXM/Lm1heFwiXG4gICAgICAgICAgICAgICAgW21pbl09XCJmaWVsZD8ucHJvcGVydGllcz8ubWluXCJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgICBbcHJvcGVydGllc109XCJmaWVsZD8ucHJvcGVydGllc1wiXG4gICAgICAgICAgICAgICAgW3NpemVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnNpemVcIlxuICAgICAgICAgICAgICAgIFt2YWxpZGF0b3JzXT1cImZpZWxkPy52YWxpZGF0b3JzXCJcbiAgICAgICAgICAgICAgICAoZ2V0S2V5VmFsdWUpPVwiaGFuZGxlR2V0S2V5VmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgID48L2t3aWt1aS1zdGFyLXJhdGluZz5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2xhYmVsVGVtcGxhdGU+XG4gICAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICAgIDxiXG4gICAgICAgICAgICAgICAgICA+e3sgZmllbGQ/LnByb3BlcnRpZXM/LnBsYWNlaG9sZGVyIH19XG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZpZWxkLnZhbGlkYXRvcnM/LnJlcXVpcmVkXCI+Kjwvc3Bhbj48L2JcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Zvcm0+XG4gIDxkaXZcbiAgICBjbGFzcz1cImt3aWtpZC1mb3JtLWJ1dHRvbnNcIlxuICAgICpuZ0lmPVwiXG4gICAgICAhZm9ybUNvbmZpZy5wcm9wZXJ0aWVzLmZvb3Rlci52aWV3Rm9ybXNCdXR0b24uaGlkZGVuIHx8XG4gICAgICAhZm9ybUNvbmZpZy5wcm9wZXJ0aWVzLmZvb3Rlci5zYXZlQnV0dG9uLmhpZGRlblxuICAgIFwiXG4gID5cbiAgICA8a3dpa3VpLWJ1dHRvblxuICAgICAgKm5nSWY9XCJcbiAgICAgICAgIWZvcm1Db25maWcucHJvcGVydGllcy5mb290ZXIudmlld0Zvcm1zQnV0dG9uLmhpZGRlbiAmJiBpc01vYmlsZVZpZXdcbiAgICAgIFwiXG4gICAgICBbYXBwZWFyYW5jZV09XCInc2Vjb25kYXJ5J1wiXG4gICAgICBbZGlzYWJsZWRdPVwidmlld0Zvcm1zQnV0dG9uLmRpc2FibGVkXCJcbiAgICAgIFtsYWJlbF09XCJmb3JtQ29uZmlnLnByb3BlcnRpZXMuZm9vdGVyLnZpZXdGb3Jtc0J1dHRvbi5sYWJlbFwiXG4gICAgICBbc2hvd0xvYWRlcl09XCJ2aWV3Rm9ybXNCdXR0b24uc2hvd0xvYWRlclwiXG4gICAgICBbc3R5bGVzXT1cImZvcm1Db25maWcucHJvcGVydGllcy5mb290ZXIudmlld0Zvcm1zQnV0dG9uLnN0eWxlc1wiXG4gICAgICAob25DbGljayk9XCJoYW5kbGVPbkNsaWNrVmlld0Zvcm1zKCRldmVudClcIlxuICAgID48L2t3aWt1aS1idXR0b24+XG4gICAgPGt3aWt1aS1idXR0b25cbiAgICAgICpuZ0lmPVwiIWZvcm1Db25maWcucHJvcGVydGllcy5mb290ZXIuc2F2ZUJ1dHRvbi5oaWRkZW5cIlxuICAgICAgW2Rpc2FibGVkXT1cInNhdmVGb3JtQnV0dG9uLmRpc2FibGVkXCJcbiAgICAgIFtsYWJlbF09XCJmb3JtQ29uZmlnLnByb3BlcnRpZXMuZm9vdGVyLnNhdmVCdXR0b24ubGFiZWxcIlxuICAgICAgW3Nob3dMb2FkZXJdPVwic2F2ZUZvcm1CdXR0b24uc2hvd0xvYWRlclwiXG4gICAgICBbc3R5bGVzXT1cImZvcm1Db25maWcucHJvcGVydGllcy5mb290ZXIuc2F2ZUJ1dHRvbi5zdHlsZXNcIlxuICAgICAgKG9uQ2xpY2spPVwiaGFuZGxlT25DbGlja1NhdmVGb3JtKCRldmVudClcIlxuICAgID48L2t3aWt1aS1idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG48ZGl2XG4gIGNsYXNzPVwia3dpa2lkLWZvcm0tY29udGFpbmVyLWxvYWRpbmdcIlxuICAqbmdJZj1cImxvYWRpbmdcIlxuPlxuICA8ZGl2XG4gICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgW10uY29uc3RydWN0b3IoNyk7IGxldCBpID0gaW5kZXhcIlxuICAgIGNsYXNzPVwibGFyZ2Utd3JhcHBlciB0dWktc2tlbGV0b24gdHVpLXNrZWxldG9uX3JvdW5kZWRcIlxuICA+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxrd2lrdWktbG9hZGVyPjwva3dpa3VpLWxvYWRlcj5cblxuPHR1aS1wdXNoXG4gIGlkPVwiZmllbGQtZXJyb3Itbm90aWZpY2F0aW9uXCJcbiAgKnR1aVB1c2g9XCJzaG93RXJyb3JOb3RpZmljYXRpb25cIlxuICBoZWFkaW5nPVwiTWlzc2luZy9JbmNvcnJlY3QgRmllbGRzIVwiXG4gIHR5cGU9XCJFcnJvclwiXG4gIChjbG9zZSk9XCJ0b2dnbGVFcnJvck5vdGlmaWNhdGlvbihmYWxzZSlcIlxuPlxuICA8dHVpLXN2Z1xuICAgIHNyYz1cInR1aUljb25YQ2lyY2xlXCJcbiAgICBzdHlsZT1cImNvbG9yOiAjZmZmICFpbXBvcnRhbnRcIlxuICA+XG4gIDwvdHVpLXN2Zz5cbjwvdHVpLXB1c2g+XG5cbjx0dWktcHVzaFxuICBpZD1cInBlcm1pc3Npb24tZXJyb3Itbm90aWZpY2F0aW9uXCJcbiAgKnR1aVB1c2g9XCJzaG93UGVybWlzc2lvbkVycm9yTm90aWZpY2F0aW9uXCJcbiAgaGVhZGluZz1cIlBsZWFzZSBwcm92aWRlIHJlcXVpcmVkIHBlcm1pc3Npb25zIVwiXG4gIHR5cGU9XCJFcnJvclwiXG4gIChjbG9zZSk9XCJ0b2dnbGVQZXJtaXNzaW9uRXJyb3JOb3RpZmljYXRpb24oZmFsc2UpXCJcbj5cbiAgPHR1aS1zdmdcbiAgICBzcmM9XCJ0dWlJY29uWENpcmNsZVwiXG4gICAgc3R5bGU9XCJjb2xvcjogI2ZmZiAhaW1wb3J0YW50XCJcbiAgPlxuICA8L3R1aS1zdmc+XG48L3R1aS1wdXNoPlxuXG48bmctdGVtcGxhdGVcbiAgI3ByZXZpZXdcbiAgbGV0LXByZXZpZXdcbj5cbiAgPHR1aS1wcmV2aWV3XG4gICAgW3JvdGF0YWJsZV09XCJmYWxzZVwiXG4gICAgW3pvb21hYmxlXT1cImZhbHNlXCJcbiAgICBjbGFzcz1cInByZXZpZXctY29udGFpbmVyXCJcbiAgPlxuICAgIDx0dWktcHJldmlldy10aXRsZSAqbmdJZj1cInByZXZpZXdQcm9wZXJ0aWVzLnRpdGxlICE9PSAnJ1wiPnt7XG4gICAgICBwcmV2aWV3UHJvcGVydGllcy50aXRsZVxuICAgIH19PC90dWktcHJldmlldy10aXRsZT5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhcHJldmlld1Byb3BlcnRpZXMudW5hdmFpbGFibGVcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJwcmV2aWV3UHJvcGVydGllcz8uaHRtbD8uYmVmb3JlICE9PSAnJ1wiXG4gICAgICAgIGNsYXNzPVwicHJldmlldy1odG1sIHByZXZpZXctaHRtbC1iZWZvcmVcIlxuICAgICAgICBbc3R5bGVdPVwicHJldmlld1Byb3BlcnRpZXM/Lmh0bWw/LmJlZm9yZVN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXCJcbiAgICAgICAgW2lubmVySHRtbF09XCJwcmV2aWV3UHJvcGVydGllcy5odG1sLmJlZm9yZSB8IGt3aWt1aVNhZmVIdG1sXCJcbiAgICAgID48L2Rpdj5cblxuICAgICAgPCEtLSBDb250ZW50IHdpdGhpbiB0aGUgaWZyYW1lIC0tPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInByZXZpZXctaWZyYW1lLWNvbnRlbnRcIlxuICAgICAgICBbc3R5bGVdPVwiXG4gICAgICAgICAgcHJldmlld1Byb3BlcnRpZXM/LmlmcmFtZT8uY29udGFpbmVyU3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcbiAgICAgICAgXCJcbiAgICAgICAgKm5nSWY9XCJwcmV2aWV3UHJvcGVydGllcy5pZnJhbWUuc3JjICE9PSAnJ1wiXG4gICAgICA+XG4gICAgICAgIDwhLS0gWW91ciBIVE1MIGNvbnRlbnQgaGVyZSAtLT5cbiAgICAgICAgPGlmcmFtZVxuICAgICAgICAgIFtzcmNdPVwicHJldmlld1Byb3BlcnRpZXMuaWZyYW1lLnNyYyB8IGt3aWt1aVNhZmVVcmxcIlxuICAgICAgICAgIGZyYW1lYm9yZGVyPVwiMFwiXG4gICAgICAgICAgYWxsb3c9XCJhY2NlbGVyb21ldGVyOyBhdXRvcGxheTsgZW5jcnlwdGVkLW1lZGlhOyBneXJvc2NvcGU7IHBpY3R1cmUtaW4tcGljdHVyZVwiXG4gICAgICAgICAgYWxsb3dmdWxsc2NyZWVuXG4gICAgICAgICAgW3RpdGxlXT1cInByZXZpZXdQcm9wZXJ0aWVzLmlmcmFtZS50aXRsZVwiXG4gICAgICAgICAgY2xhc3M9XCJwcmV2aWV3LWlmcmFtZVwiXG4gICAgICAgICAgc2Nyb2xsaW5nPVwiYXV0b1wiXG4gICAgICAgID48L2lmcmFtZT5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwicHJldmlld1Byb3BlcnRpZXM/Lmh0bWw/LmFmdGVyICE9PSAnJ1wiXG4gICAgICAgIGNsYXNzPVwicHJldmlldy1odG1sIHByZXZpZXctaHRtbC1hZnRlclwiXG4gICAgICAgIFtzdHlsZV09XCJwcmV2aWV3UHJvcGVydGllcz8uaHRtbD8uYWZ0ZXJTdHlsZXMgPz8gJycgfCBzdHlsZVNhbml0aXplclwiXG4gICAgICAgIFtpbm5lckh0bWxdPVwicHJldmlld1Byb3BlcnRpZXMuaHRtbC5hZnRlciB8IGt3aWt1aVNhZmVIdG1sXCJcbiAgICAgID48L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwcmV2aWV3UHJvcGVydGllcy51bmF2YWlsYWJsZVwiPlxuICAgICAgPGRpdiBjbGFzcz1cInByZXZpZXctdW5hdmFpbGFibGVcIj5cbiAgICAgICAgPHR1aS1zdmdcbiAgICAgICAgICBzcmM9XCJ0dWlJY29uRmlsZUxhcmdlXCJcbiAgICAgICAgICBjbGFzcz1cInQtaWNvblwiXG4gICAgICAgID48L3R1aS1zdmc+XG4gICAgICAgIDxkaXY+UHJldmlldyB1bmF2YWlsYWJsZTwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8YnV0dG9uXG4gICAgICB0dWlJY29uQnV0dG9uXG4gICAgICB0dWlQcmV2aWV3QWN0aW9uXG4gICAgICBpY29uPVwidHVpSWNvbkNsb3NlTGFyZ2VcIlxuICAgICAgdGl0bGU9XCJDbG9zZVwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIChjbGljayk9XCJwcmV2aWV3LmNvbXBsZXRlKClcIlxuICAgID48L2J1dHRvbj5cbiAgPC90dWktcHJldmlldz5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZVxuICAjZGlhbG9nXG4gIGxldC1kaWFsb2dcbj5cbiAgPGRpdiBjbGFzcz1cInByZXZpZXctY29udGFpbmVyXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFwcmV2aWV3UHJvcGVydGllcy51bmF2YWlsYWJsZVwiPlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cInByZXZpZXdQcm9wZXJ0aWVzPy5odG1sPy5iZWZvcmUgIT09ICcnXCJcbiAgICAgICAgY2xhc3M9XCJwcmV2aWV3LWh0bWwgcHJldmlldy1odG1sLWJlZm9yZVwiXG4gICAgICAgIFtzdHlsZV09XCJwcmV2aWV3UHJvcGVydGllcz8uaHRtbD8uYmVmb3JlU3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcIlxuICAgICAgICBbaW5uZXJIdG1sXT1cInByZXZpZXdQcm9wZXJ0aWVzLmh0bWwuYmVmb3JlIHwga3dpa3VpU2FmZUh0bWxcIlxuICAgICAgPjwvZGl2PlxuXG4gICAgICA8IS0tIENvbnRlbnQgd2l0aGluIHRoZSBpZnJhbWUgLS0+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwicHJldmlldy1pZnJhbWUtY29udGVudFwiXG4gICAgICAgIFtzdHlsZV09XCJcbiAgICAgICAgICBwcmV2aWV3UHJvcGVydGllcz8uaWZyYW1lPy5jb250YWluZXJTdHlsZXMgPz8gJycgfCBzdHlsZVNhbml0aXplclxuICAgICAgICBcIlxuICAgICAgICAqbmdJZj1cInByZXZpZXdQcm9wZXJ0aWVzLmlmcmFtZS5zcmMgIT09ICcnXCJcbiAgICAgID5cbiAgICAgICAgPCEtLSBZb3VyIEhUTUwgY29udGVudCBoZXJlIC0tPlxuICAgICAgICA8aWZyYW1lXG4gICAgICAgICAgW3NyY109XCJwcmV2aWV3UHJvcGVydGllcy5pZnJhbWUuc3JjIHwga3dpa3VpU2FmZVVybFwiXG4gICAgICAgICAgZnJhbWVib3JkZXI9XCIwXCJcbiAgICAgICAgICBhbGxvdz1cImFjY2VsZXJvbWV0ZXI7IGF1dG9wbGF5OyBlbmNyeXB0ZWQtbWVkaWE7IGd5cm9zY29wZTsgcGljdHVyZS1pbi1waWN0dXJlXCJcbiAgICAgICAgICBhbGxvd2Z1bGxzY3JlZW5cbiAgICAgICAgICBbdGl0bGVdPVwicHJldmlld1Byb3BlcnRpZXMuaWZyYW1lLnRpdGxlXCJcbiAgICAgICAgICBjbGFzcz1cInByZXZpZXctaWZyYW1lXCJcbiAgICAgICAgICBzY3JvbGxpbmc9XCJhdXRvXCJcbiAgICAgICAgPjwvaWZyYW1lPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJwcmV2aWV3UHJvcGVydGllcz8uaHRtbD8uYWZ0ZXIgIT09ICcnXCJcbiAgICAgICAgY2xhc3M9XCJwcmV2aWV3LWh0bWwgcHJldmlldy1odG1sLWFmdGVyXCJcbiAgICAgICAgW3N0eWxlXT1cInByZXZpZXdQcm9wZXJ0aWVzPy5odG1sPy5hZnRlclN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXCJcbiAgICAgICAgW2lubmVySHRtbF09XCJwcmV2aWV3UHJvcGVydGllcy5odG1sLmFmdGVyIHwga3dpa3VpU2FmZUh0bWxcIlxuICAgICAgPjwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInByZXZpZXdQcm9wZXJ0aWVzLnVuYXZhaWxhYmxlXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicHJldmlldy11bmF2YWlsYWJsZVwiPlxuICAgICAgICA8dHVpLXN2Z1xuICAgICAgICAgIHNyYz1cInR1aUljb25GaWxlTGFyZ2VcIlxuICAgICAgICAgIGNsYXNzPVwidC1pY29uXCJcbiAgICAgICAgPjwvdHVpLXN2Zz5cbiAgICAgICAgPGRpdj5QcmV2aWV3IHVuYXZhaWxhYmxlPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48ZGl2XG4gIGlkPVwia3dpa2lkLWNhbWVyYS1jb250YWluZXJcIlxuICAqbmdJZj1cImlzU2hvd0NhbWVyYVwiXG4+XG4gIDxkaXZcbiAgICBpZD1cImt3aWtpZC1jYW1lcmEtd3JhcHBlclwiXG4gICAgW2NsYXNzLmZ1bGxzY3JlZW5dPVwiaXNTaG93Q2FtZXJhRnVsbHNjcmVlblwiXG4gID5cbiAgICA8a3dpa2lkLWNhbWVyYVxuICAgICAgW3R5cGVdPVwiYWN0aXZlQ2FtZXJhVHlwZVwiXG4gICAgICBbZGF0YV09XCJhY3RpdmVDYW1lcmFEYXRhXCJcbiAgICAgIFtpbWFnZV09XCJhY3RpdmVDYW1lcmFJbWFnZVwiXG4gICAgICBbdmlkZW9dPVwiYWN0aXZlQ2FtZXJhVmlkZW9cIlxuICAgICAgW2NvbmZpZ109XCJhY3RpdmVDYW1lcmFDb25maWc/LmNhbWVyYUNvbmZpZ1wiXG4gICAgICAoZ2V0SW1hZ2UpPVwiaGFuZGxlR2V0Q2FtZXJhTWVkaWEoJGV2ZW50LCAnQ0FQVFVSRScpXCJcbiAgICAgIChnZXRWaWRlbyk9XCJoYW5kbGVHZXRDYW1lcmFNZWRpYSgkZXZlbnQsICdSRUNPUkQnKVwiXG4gICAgICAob25DbGlja0JhY2spPVwiaGFuZGxlT25DbGlja0NhbWVyYUJhY2soJGV2ZW50KVwiXG4gICAgICAob25DbGlja0Nsb3NlKT1cImhhbmRsZU9uQ2xpY2tDYW1lcmFDbG9zZSgkZXZlbnQpXCJcbiAgICAgIChvbkNsaWNrU2F2ZSk9XCJoYW5kbGVPbkNsaWNrU2F2ZUNhbWVyYU1lZGlhKCRldmVudCwgYWN0aXZlQ2FtZXJhVHlwZSlcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nSWY9XCJhY3RpdmVDYW1lcmFUeXBlID09PSAnQ0FQVFVSRSdcIlxuICAgICAgICBzbG90PVwiY2FwdHVyZS1oZWFkZXJcIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FwdHVyZS1oZWFkZXItY29udGFpbmVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcHR1cmUtaGVhZGVyLWxlZnRcIj4gPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcHR1cmUtaGVhZGVyLWNlbnRlclwiPlxuICAgICAgICAgICAgPGt3aWt1aS1idXR0b25cbiAgICAgICAgICAgICAgKm5nSWY9XCJhY3RpdmVDYW1lcmFDb25maWc/LmNhbWVyYUNvbmZpZz8uaGVhZGVyPy50aXRsZSAhPT0gJydcIlxuICAgICAgICAgICAgICBhcHBlYXJhbmNlPVwid2hpdGVibG9ja1wiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJhY3RpdmVDYW1lcmFDb25maWc/LmNhbWVyYUNvbmZpZz8uaGVhZGVyPy50aXRsZVwiXG4gICAgICAgICAgICAgIHNoYXBlPVwicm91bmRlZFwiXG4gICAgICAgICAgICAgIHNpemU9XCJzXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcHR1cmUtaGVhZGVyLXJpZ2h0XCI+XG4gICAgICAgICAgICA8a3dpa3VpLWJ1dHRvblxuICAgICAgICAgICAgICAqbmdJZj1cImFjdGl2ZUNhbWVyYUNvbmZpZz8uY2FtZXJhQ29uZmlnPy5oZWFkZXI/LmlzRXhwYW5kXCJcbiAgICAgICAgICAgICAgaWQ9XCJrd2lraWQtY2FtZXJhLWhlYWRlci1lbmxhcmdlLWJ1dHRvblwiXG4gICAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJ3aGl0ZWJsb2NrXCJcbiAgICAgICAgICAgICAgW2ljb25dPVwiXG4gICAgICAgICAgICAgICAgaXNTaG93Q2FtZXJhRnVsbHNjcmVlbiA/ICd0dWlJY29uTWluaW1pemUyJyA6ICd0dWlJY29uTWF4aW1pemUyJ1xuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBzaGFwZT1cInJvdW5kZWRcIlxuICAgICAgICAgICAgICBzaXplPVwic1wiXG4gICAgICAgICAgICAgIChjbGljayk9XCJpc1Nob3dDYW1lcmFGdWxsc2NyZWVuID0gIWlzU2hvd0NhbWVyYUZ1bGxzY3JlZW5cIlxuICAgICAgICAgICAgPjwva3dpa3VpLWJ1dHRvbj5cbiAgICAgICAgICAgIDxrd2lrdWktYnV0dG9uXG4gICAgICAgICAgICAgICpuZ0lmPVwiYWN0aXZlQ2FtZXJhQ29uZmlnPy5jYW1lcmFDb25maWc/LmhlYWRlcj8uaXNDbG9zZVwiXG4gICAgICAgICAgICAgIGlkPVwia3dpa2lkLWNhbWVyYS1oZWFkZXItY2xvc2UtYnV0dG9uXCJcbiAgICAgICAgICAgICAgYXBwZWFyYW5jZT1cIndoaXRlYmxvY2tcIlxuICAgICAgICAgICAgICBpY29uPVwidHVpSWNvbkNsb3NlTGFyZ2VcIlxuICAgICAgICAgICAgICBzaGFwZT1cInJvdW5kZWRcIlxuICAgICAgICAgICAgICBzaXplPVwic1wiXG4gICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVPbkNsaWNrQ2FtZXJhQ2xvc2UoJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdJZj1cImFjdGl2ZUNhbWVyYVR5cGUgPT09ICdSRUNPUkQnXCJcbiAgICAgICAgc2xvdD1cInJlY29yZC1oZWFkZXJcIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicmVjb3JkLWhlYWRlci1jb250YWluZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVjb3JkLWhlYWRlci1yb3cgcm93LTFcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWNvcmQtaGVhZGVyLWxlZnRcIj5cbiAgICAgICAgICAgICAgPGt3aWt1aS1idXR0b25cbiAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgYWN0aXZlQ2FtZXJhQ29uZmlnPy5jYW1lcmFDb25maWc/LmhlYWRlcj8uaXNCYWNrICYmXG4gICAgICAgICAgICAgICAgICBhY3RpdmVDYW1lcmFSZWNvcmRpbmdTdGF0ZSA9PSAnTk9ORSdcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJ3aGl0ZWJsb2NrXCJcbiAgICAgICAgICAgICAgICBpY29uPVwidHVpSWNvbkFycm93TGVmdFwiXG4gICAgICAgICAgICAgICAgc2hhcGU9XCJyb3VuZGVkXCJcbiAgICAgICAgICAgICAgICBzaXplPVwic1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZU9uQ2xpY2tDYW1lcmFDbG9zZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgPjwva3dpa3VpLWJ1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlY29yZC1oZWFkZXItY2VudGVyXCI+XG4gICAgICAgICAgICAgIDxrd2lrdWktYnV0dG9uXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJhY3RpdmVDYW1lcmFDb25maWc/LmNhbWVyYUNvbmZpZz8uaGVhZGVyPy50aXRsZSAhPT0gJydcIlxuICAgICAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJ3aGl0ZWJsb2NrXCJcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwiYWN0aXZlQ2FtZXJhQ29uZmlnPy5jYW1lcmFDb25maWc/LmhlYWRlcj8udGl0bGVcIlxuICAgICAgICAgICAgICAgIHNoYXBlPVwicm91bmRlZFwiXG4gICAgICAgICAgICAgICAgc2l6ZT1cInNcIlxuICAgICAgICAgICAgICA+PC9rd2lrdWktYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVjb3JkLWhlYWRlci1yaWdodFwiPlxuICAgICAgICAgICAgICA8a3dpa3VpLWJ1dHRvblxuICAgICAgICAgICAgICAgICpuZ0lmPVwiYWN0aXZlQ2FtZXJhQ29uZmlnPy5jYW1lcmFDb25maWc/LmhlYWRlcj8uaXNFeHBhbmRcIlxuICAgICAgICAgICAgICAgIGlkPVwia3dpa2lkLWNhbWVyYS1oZWFkZXItZW5sYXJnZS1idXR0b25cIlxuICAgICAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJ3aGl0ZWJsb2NrXCJcbiAgICAgICAgICAgICAgICBbaWNvbl09XCJcbiAgICAgICAgICAgICAgICAgIGlzU2hvd0NhbWVyYUZ1bGxzY3JlZW5cbiAgICAgICAgICAgICAgICAgICAgPyAndHVpSWNvbk1pbmltaXplMidcbiAgICAgICAgICAgICAgICAgICAgOiAndHVpSWNvbk1heGltaXplMidcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIHNoYXBlPVwicm91bmRlZFwiXG4gICAgICAgICAgICAgICAgc2l6ZT1cInNcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJpc1Nob3dDYW1lcmFGdWxsc2NyZWVuID0gIWlzU2hvd0NhbWVyYUZ1bGxzY3JlZW5cIlxuICAgICAgICAgICAgICA+PC9rd2lrdWktYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJlY29yZC1oZWFkZXItcm93IHJvdy0yXCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGlkPVwiYmxpbmtpbmctZG90LWNvbnRhaW5lclwiXG4gICAgICAgICAgICAgIFtjbGFzcy5yZWNvcmRpbmddPVwiYWN0aXZlQ2FtZXJhUmVjb3JkaW5nU3RhdGUgPT0gJ1JFQ09SRElORydcIlxuICAgICAgICAgICAgICBbY2xhc3MucGF1c2VkXT1cImFjdGl2ZUNhbWVyYVJlY29yZGluZ1N0YXRlID09ICdQQVVTRUQnXCJcbiAgICAgICAgICAgICAgW2NsYXNzLnJlY29yZGVkXT1cIlxuICAgICAgICAgICAgICAgIGFjdGl2ZUNhbWVyYVJlY29yZGluZ1N0YXRlID09ICdOT05FJyB8fFxuICAgICAgICAgICAgICAgIGFjdGl2ZUNhbWVyYVJlY29yZGluZ1N0YXRlID09PSAnUkVDT1JERUQnXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAqbmdJZj1cImFjdGl2ZUNhbWVyYVJlY29yZGluZ1N0YXRlID09ICdSRUNPUkRJTkcnXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImRvdCByZWNvcmRpbmcgYmxpbmtcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgKm5nSWY9XCJhY3RpdmVDYW1lcmFSZWNvcmRpbmdTdGF0ZSA9PT0gJ1BBVVNFRCdcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZG90IHBhdXNlZFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgYWN0aXZlQ2FtZXJhUmVjb3JkaW5nU3RhdGUgPT0gJ05PTkUnIHx8XG4gICAgICAgICAgICAgICAgICBhY3RpdmVDYW1lcmFSZWNvcmRpbmdTdGF0ZSA9PT0gJ1JFQ09SREVEJ1xuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkb3QgcmVjb3JkZWRcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICZuYnNwO3t7IGFjdGl2ZUNhbWVyYVJlY29yZGluZ1RpbWUgfCBmb3JtYXRUaW1lciB9fVxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgIGFjdGl2ZUNhbWVyYUNvbmZpZz8uY2FtZXJhQ29uZmlnPy5vdGhlcnNcbiAgICAgICAgICAgICAgICAgICAgICA/Lm1heFJlY29yZGluZ1RpbWVJblNlY29uZHNcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgL1xuICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZlQ2FtZXJhQ29uZmlnPy5jYW1lcmFDb25maWc/Lm90aGVyc1xuICAgICAgICAgICAgICAgICAgICAgID8ubWF4UmVjb3JkaW5nVGltZUluU2Vjb25kcyB8IGZvcm1hdFRpbWVyXG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwva3dpa2lkLWNhbWVyYT5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|