@hmcts/ccd-case-ui-toolkit 7.1.51-read-only-query-collection → 7.1.52
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/esm2022/lib/shared/components/case-editor/case-edit-page/case-edit-page.component.mjs +154 -33
- package/esm2022/lib/shared/components/case-editor/case-edit-submit/case-edit-submit.component.mjs +103 -43
- package/esm2022/lib/shared/components/case-editor/case-editor.module.mjs +7 -4
- package/esm2022/lib/shared/components/case-editor/services/case-flag-state.service.mjs +7 -1
- package/esm2022/lib/shared/components/case-viewer/case-event-trigger/case-event-trigger.component.mjs +14 -4
- package/esm2022/lib/shared/components/case-viewer/case-full-access-view/case-full-access-view.component.mjs +15 -5
- package/esm2022/lib/shared/components/dialogs/delete-or-cancel-dialog/delete-or-cancel-dialog.component.mjs +2 -2
- package/esm2022/lib/shared/components/dialogs/document-dialog/document-dialog.component.mjs +2 -2
- package/esm2022/lib/shared/components/dialogs/remove-dialog/remove-dialog.component.mjs +2 -2
- package/esm2022/lib/shared/components/dialogs/save-or-discard-dialog/save-or-discard-dialog.component.mjs +2 -2
- package/esm2022/lib/shared/components/palette/base-field/abstract-field-write-journey.component.mjs +95 -0
- package/esm2022/lib/shared/components/palette/base-field/abstract-journey.component.mjs +81 -0
- package/esm2022/lib/shared/components/palette/base-field/index.mjs +3 -1
- package/esm2022/lib/shared/components/palette/case-flag/components/add-comments/add-comments.component.mjs +30 -21
- package/esm2022/lib/shared/components/palette/case-flag/components/case-flag-summary-list/case-flag-summary-list.component.mjs +3 -3
- package/esm2022/lib/shared/components/palette/case-flag/components/confirm-flag-status/confirm-flag-status.component.mjs +25 -22
- package/esm2022/lib/shared/components/palette/case-flag/components/manage-case-flags/manage-case-flags.component.mjs +154 -36
- package/esm2022/lib/shared/components/palette/case-flag/components/search-language-interpreter/search-language-interpreter.component.mjs +33 -29
- package/esm2022/lib/shared/components/palette/case-flag/components/select-flag-location/select-flag-location.component.mjs +33 -28
- package/esm2022/lib/shared/components/palette/case-flag/components/select-flag-type/select-flag-type.component.mjs +177 -71
- package/esm2022/lib/shared/components/palette/case-flag/components/update-flag/update-flag-add-translation-form/update-flag-add-translation-form.component.mjs +32 -28
- package/esm2022/lib/shared/components/palette/case-flag/components/update-flag/update-flag.component.mjs +123 -105
- package/esm2022/lib/shared/components/palette/case-flag/read-case-flag-field.component.mjs +31 -4
- package/esm2022/lib/shared/components/palette/case-flag/write-case-flag-field.component.mjs +147 -33
- package/esm2022/lib/shared/components/palette/linked-cases/components/before-you-start/before-you-start.component.mjs +44 -23
- package/esm2022/lib/shared/components/palette/linked-cases/components/check-your-answers/check-your-answers.component.mjs +29 -7
- package/esm2022/lib/shared/components/palette/linked-cases/components/link-cases/link-cases.component.mjs +84 -50
- package/esm2022/lib/shared/components/palette/linked-cases/components/no-linked-cases/no-linked-cases.component.mjs +13 -9
- package/esm2022/lib/shared/components/palette/linked-cases/components/unlink-cases/unlink-cases.component.mjs +84 -44
- package/esm2022/lib/shared/components/palette/linked-cases/services/linked-cases.service.mjs +25 -2
- package/esm2022/lib/shared/components/palette/linked-cases/write-linked-cases-field.component.mjs +110 -30
- package/esm2022/lib/shared/components/palette/palette.module.mjs +2 -2
- package/esm2022/lib/shared/components/palette/query-management/components/query-check-your-answers/query-check-your-answers.component.mjs +21 -8
- package/esm2022/lib/shared/domain/index.mjs +2 -1
- package/esm2022/lib/shared/domain/journey/index.mjs +3 -0
- package/esm2022/lib/shared/domain/journey/journey-instigator.model.mjs +2 -0
- package/esm2022/lib/shared/domain/journey/journey.model.mjs +2 -0
- package/esm2022/lib/shared/pipes/complex/ccd-page-fields.pipe.mjs +2 -2
- package/esm2022/lib/shared/services/index.mjs +2 -1
- package/esm2022/lib/shared/services/journey/index.mjs +2 -0
- package/esm2022/lib/shared/services/journey/multipage-component-state.service.mjs +117 -0
- package/fesm2022/hmcts-ccd-case-ui-toolkit.mjs +1881 -792
- package/fesm2022/hmcts-ccd-case-ui-toolkit.mjs.map +1 -1
- package/lib/shared/components/case-editor/case-edit-page/case-edit-page.component.d.ts +19 -3
- package/lib/shared/components/case-editor/case-edit-page/case-edit-page.component.d.ts.map +1 -1
- package/lib/shared/components/case-editor/case-edit-submit/case-edit-submit.component.d.ts +11 -2
- package/lib/shared/components/case-editor/case-edit-submit/case-edit-submit.component.d.ts.map +1 -1
- package/lib/shared/components/case-editor/case-editor.module.d.ts.map +1 -1
- package/lib/shared/components/case-editor/services/case-flag-state.service.d.ts +3 -0
- package/lib/shared/components/case-editor/services/case-flag-state.service.d.ts.map +1 -1
- package/lib/shared/components/case-viewer/case-event-trigger/case-event-trigger.component.d.ts +2 -1
- package/lib/shared/components/case-viewer/case-event-trigger/case-event-trigger.component.d.ts.map +1 -1
- package/lib/shared/components/case-viewer/case-full-access-view/case-full-access-view.component.d.ts +5 -1
- package/lib/shared/components/case-viewer/case-full-access-view/case-full-access-view.component.d.ts.map +1 -1
- package/lib/shared/components/palette/base-field/abstract-field-write-journey.component.d.ts +30 -0
- package/lib/shared/components/palette/base-field/abstract-field-write-journey.component.d.ts.map +1 -0
- package/lib/shared/components/palette/base-field/abstract-journey.component.d.ts +27 -0
- package/lib/shared/components/palette/base-field/abstract-journey.component.d.ts.map +1 -0
- package/lib/shared/components/palette/base-field/index.d.ts +2 -0
- package/lib/shared/components/palette/base-field/index.d.ts.map +1 -1
- package/lib/shared/components/palette/case-flag/components/add-comments/add-comments.component.d.ts +4 -2
- package/lib/shared/components/palette/case-flag/components/add-comments/add-comments.component.d.ts.map +1 -1
- package/lib/shared/components/palette/case-flag/components/confirm-flag-status/confirm-flag-status.component.d.ts +4 -2
- package/lib/shared/components/palette/case-flag/components/confirm-flag-status/confirm-flag-status.component.d.ts.map +1 -1
- package/lib/shared/components/palette/case-flag/components/manage-case-flags/manage-case-flags.component.d.ts +16 -4
- package/lib/shared/components/palette/case-flag/components/manage-case-flags/manage-case-flags.component.d.ts.map +1 -1
- package/lib/shared/components/palette/case-flag/components/search-language-interpreter/search-language-interpreter.component.d.ts +6 -3
- package/lib/shared/components/palette/case-flag/components/search-language-interpreter/search-language-interpreter.component.d.ts.map +1 -1
- package/lib/shared/components/palette/case-flag/components/select-flag-location/select-flag-location.component.d.ts +5 -2
- package/lib/shared/components/palette/case-flag/components/select-flag-location/select-flag-location.component.d.ts.map +1 -1
- package/lib/shared/components/palette/case-flag/components/select-flag-type/select-flag-type.component.d.ts +21 -6
- package/lib/shared/components/palette/case-flag/components/select-flag-type/select-flag-type.component.d.ts.map +1 -1
- package/lib/shared/components/palette/case-flag/components/update-flag/update-flag-add-translation-form/update-flag-add-translation-form.component.d.ts +5 -2
- package/lib/shared/components/palette/case-flag/components/update-flag/update-flag-add-translation-form/update-flag-add-translation-form.component.d.ts.map +1 -1
- package/lib/shared/components/palette/case-flag/components/update-flag/update-flag.component.d.ts +7 -3
- package/lib/shared/components/palette/case-flag/components/update-flag/update-flag.component.d.ts.map +1 -1
- package/lib/shared/components/palette/case-flag/read-case-flag-field.component.d.ts +1 -0
- package/lib/shared/components/palette/case-flag/read-case-flag-field.component.d.ts.map +1 -1
- package/lib/shared/components/palette/case-flag/write-case-flag-field.component.d.ts +18 -6
- package/lib/shared/components/palette/case-flag/write-case-flag-field.component.d.ts.map +1 -1
- package/lib/shared/components/palette/linked-cases/components/before-you-start/before-you-start.component.d.ts +6 -4
- package/lib/shared/components/palette/linked-cases/components/before-you-start/before-you-start.component.d.ts.map +1 -1
- package/lib/shared/components/palette/linked-cases/components/check-your-answers/check-your-answers.component.d.ts +8 -3
- package/lib/shared/components/palette/linked-cases/components/check-your-answers/check-your-answers.component.d.ts.map +1 -1
- package/lib/shared/components/palette/linked-cases/components/link-cases/link-cases.component.d.ts +8 -3
- package/lib/shared/components/palette/linked-cases/components/link-cases/link-cases.component.d.ts.map +1 -1
- package/lib/shared/components/palette/linked-cases/components/no-linked-cases/no-linked-cases.component.d.ts +5 -2
- package/lib/shared/components/palette/linked-cases/components/no-linked-cases/no-linked-cases.component.d.ts.map +1 -1
- package/lib/shared/components/palette/linked-cases/components/unlink-cases/unlink-cases.component.d.ts +9 -3
- package/lib/shared/components/palette/linked-cases/components/unlink-cases/unlink-cases.component.d.ts.map +1 -1
- package/lib/shared/components/palette/linked-cases/services/linked-cases.service.d.ts +8 -0
- package/lib/shared/components/palette/linked-cases/services/linked-cases.service.d.ts.map +1 -1
- package/lib/shared/components/palette/linked-cases/write-linked-cases-field.component.d.ts +10 -3
- package/lib/shared/components/palette/linked-cases/write-linked-cases-field.component.d.ts.map +1 -1
- package/lib/shared/components/palette/query-management/components/query-check-your-answers/query-check-your-answers.component.d.ts +3 -2
- package/lib/shared/components/palette/query-management/components/query-check-your-answers/query-check-your-answers.component.d.ts.map +1 -1
- package/lib/shared/domain/index.d.ts +1 -0
- package/lib/shared/domain/index.d.ts.map +1 -1
- package/lib/shared/domain/journey/index.d.ts +3 -0
- package/lib/shared/domain/journey/index.d.ts.map +1 -0
- package/lib/shared/domain/journey/journey-instigator.model.d.ts +5 -0
- package/lib/shared/domain/journey/journey-instigator.model.d.ts.map +1 -0
- package/lib/shared/domain/journey/journey.model.d.ts +19 -0
- package/lib/shared/domain/journey/journey.model.d.ts.map +1 -0
- package/lib/shared/services/index.d.ts +1 -0
- package/lib/shared/services/index.d.ts.map +1 -1
- package/lib/shared/services/journey/index.d.ts +2 -0
- package/lib/shared/services/journey/index.d.ts.map +1 -0
- package/lib/shared/services/journey/multipage-component-state.service.d.ts +26 -0
- package/lib/shared/services/journey/multipage-component-state.service.d.ts.map +1 -0
- package/package.json +1 -1
|
@@ -182,6 +182,7 @@ export class ReadCaseFlagFieldComponent extends AbstractFieldReadComponent {
|
|
|
182
182
|
// The FlagLauncher component, WriteCaseFlagFieldComponent, holds a reference to:
|
|
183
183
|
// i) the parent FormGroup for the Flags instance where changes have been made;
|
|
184
184
|
// ii) the currently selected flag (selectedFlag) if one exists
|
|
185
|
+
const caseFlagLocationControl = 'selectedManageCaseLocation';
|
|
185
186
|
if (flagLauncherComponent) {
|
|
186
187
|
// The FlagLauncher component holds a reference (selectedFlagsLocation) containing the CaseField instance to
|
|
187
188
|
// which the new flag has been added
|
|
@@ -189,6 +190,7 @@ export class ReadCaseFlagFieldComponent extends AbstractFieldReadComponent {
|
|
|
189
190
|
flagLauncherComponent.caseField.display_context_parameter === CaseFlagDisplayContextParameter.CREATE_2_POINT_1 ||
|
|
190
191
|
flagLauncherComponent.caseField.display_context_parameter === CaseFlagDisplayContextParameter.CREATE_EXTERNAL) &&
|
|
191
192
|
flagLauncherComponent.selectedFlagsLocation) {
|
|
193
|
+
this.cleanupNavigationFormAdditions(flagLauncherComponent.selectedFlagsLocation);
|
|
192
194
|
this.pathToFlagsFormGroup = flagLauncherComponent.selectedFlagsLocation.pathToFlagsFormGroup;
|
|
193
195
|
this.flagForSummaryDisplay = this.extractNewFlagToFlagDetailDisplayObject(flagLauncherComponent.selectedFlagsLocation);
|
|
194
196
|
// The FlagLauncher component holds a reference (selectedFlag), which gets set after the selection step of the
|
|
@@ -197,9 +199,16 @@ export class ReadCaseFlagFieldComponent extends AbstractFieldReadComponent {
|
|
|
197
199
|
else if ((flagLauncherComponent.caseField.display_context_parameter === CaseFlagDisplayContextParameter.UPDATE ||
|
|
198
200
|
flagLauncherComponent.caseField.display_context_parameter === CaseFlagDisplayContextParameter.UPDATE_2_POINT_1 ||
|
|
199
201
|
flagLauncherComponent.caseField.display_context_parameter === CaseFlagDisplayContextParameter.UPDATE_EXTERNAL) &&
|
|
200
|
-
flagLauncherComponent.selectedFlag
|
|
201
|
-
|
|
202
|
-
|
|
202
|
+
(flagLauncherComponent.selectedFlag ||
|
|
203
|
+
(this.caseFlagStateService.formGroup.get(caseFlagLocationControl).value.flagDetailDisplay && this.displayContextParameter === CaseFlagDisplayContextParameter.UPDATE_2_POINT_1))) {
|
|
204
|
+
if (this.formGroup.get(flagLauncherControlName)['component']?.selectedFlag?.flagDetailDisplay !== undefined) {
|
|
205
|
+
this.flagForSummaryDisplay =
|
|
206
|
+
this.formGroup.get(flagLauncherControlName)['component'].selectedFlag.flagDetailDisplay;
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
this.flagForSummaryDisplay =
|
|
210
|
+
this.caseFlagStateService.formGroup.get(caseFlagLocationControl).value.flagDetailDisplay;
|
|
211
|
+
}
|
|
203
212
|
// TODO: not the best solution, the caseFlagStateService should have all the fields, then we can delete a lot of the transformations here
|
|
204
213
|
// in Create Case Flag it already has all fields
|
|
205
214
|
const caseFlagFormGroupValue = this.caseFlagStateService.formGroup?.value;
|
|
@@ -214,6 +223,24 @@ export class ReadCaseFlagFieldComponent extends AbstractFieldReadComponent {
|
|
|
214
223
|
}
|
|
215
224
|
}
|
|
216
225
|
}
|
|
226
|
+
cleanupNavigationFormAdditions(selectedFlagsLocation) {
|
|
227
|
+
const path = selectedFlagsLocation.pathToFlagsFormGroup;
|
|
228
|
+
Object.keys(this.formGroup.controls).forEach((controlName) => {
|
|
229
|
+
const control = this.formGroup.get(controlName);
|
|
230
|
+
if ((controlName !== path)) {
|
|
231
|
+
if (control['caseField'].formatted_value?.details) {
|
|
232
|
+
// we want to loop through the current flag details to ensure that there are no additional data from the usre restarting the flow that have been added.
|
|
233
|
+
for (const value in control['caseField'].formatted_value?.details) {
|
|
234
|
+
// if the id is undefined then the user has added this as part of their current flow and we should remove it so it doesnt get added to the case
|
|
235
|
+
if (!control['caseField'].formatted_value?.details[value].id) {
|
|
236
|
+
control['caseField'].value.details.pop();
|
|
237
|
+
control['caseField'].formatted_value.details.pop();
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
});
|
|
243
|
+
}
|
|
217
244
|
extractNewFlagToFlagDetailDisplayObject(selectedFlagsLocation) {
|
|
218
245
|
// Use the pathToFlagsFormGroup property from the selected flag location to drill down to the correct part of the
|
|
219
246
|
// CaseField value containing the new flag
|
|
@@ -250,4 +277,4 @@ export class ReadCaseFlagFieldComponent extends AbstractFieldReadComponent {
|
|
|
250
277
|
args: [{ selector: 'ccd-read-case-flag-field', template: "<ng-container *ngIf=\"context === paletteContext.CHECK_YOUR_ANSWER\">\n <ccd-case-flag-summary-list\n [flagForSummaryDisplay]=\"flagForSummaryDisplay\"\n [displayContextParameter]=\"displayContextParameter\"\n (changeButtonEmitter)=\"navigateBackToForm($event)\">\n </ccd-case-flag-summary-list>\n</ng-container>\n\n<ng-container *ngIf=\"context !== paletteContext.CHECK_YOUR_ANSWER\">\n <ng-container [ngSwitch]=\"displayContextParameter\">\n <ng-container *ngSwitchCase=\"caseFlagDisplayContextParameter.READ_EXTERNAL\">\n <h2 id=\"read-case-flag-title\" class=\"govuk-heading-l\">\n {{ 'Support requested' | rpxTranslate }}\n </h2>\n\n <div *ngFor=\"let flagData of partyLevelCaseFlagData\">\n <ccd-case-flag-table *ngIf=\"flagData.flags.partyName\"\n [tableCaption]=\"''\"\n [flagData]=\"flagData\"\n [firstColumnHeader]=\"flagData.flags.partyName\"\n [caseFlagsExternalUser]=\"caseFlagsExternalUser\"\n ></ccd-case-flag-table>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchDefault>\n <h2 id=\"read-case-flag-title\" class=\"govuk-heading-l\">\n {{ 'Case flags' | rpxTranslate }}\n </h2>\n\n <div *ngFor=\"let flagData of partyLevelCaseFlagData\">\n <ccd-case-flag-table *ngIf=\"flagData.flags.partyName\"\n [tableCaption]=\"flagData.flags.partyName\"\n [flagData]=\"flagData\"\n [firstColumnHeader]=\"'Party level flags' | rpxTranslate\"\n ></ccd-case-flag-table>\n </div>\n <div *ngIf=\"caseLevelCaseFlagData\">\n <ccd-case-flag-table\n [tableCaption]=\"'Case level flags' | rpxTranslate\"\n [flagData]=\"caseLevelCaseFlagData\"\n [firstColumnHeader]=\"'Case flags' | rpxTranslate\"\n ></ccd-case-flag-table>\n </div>\n </ng-container>\n </ng-container>\n</ng-container>\n", styles: [".govuk-heading-l{margin-top:30px}\n"] }]
|
|
251
278
|
}], () => [{ type: i1.ActivatedRoute }, { type: i1.Router }, { type: i2.CaseFlagStateService }], null); })();
|
|
252
279
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ReadCaseFlagFieldComponent, { className: "ReadCaseFlagFieldComponent", filePath: "lib/shared/components/palette/case-flag/read-case-flag-field.component.ts", lineNumber: 16 }); })();
|
|
253
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhZC1jYXNlLWZsYWctZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9jb21wb25lbnRzL3BhbGV0dGUvY2FzZS1mbGFnL3JlYWQtY2FzZS1mbGFnLWZpZWxkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9wYWxldHRlL2Nhc2UtZmxhZy9yZWFkLWNhc2UtZmxhZy1maWVsZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFekQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQzFGLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUVwRSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsY0FBYyxFQUFFLE1BQU0sU0FBUyxDQUFDOzs7Ozs7SUNSMUUsNkJBQW1FO0lBQ2pFLHFEQUdxRDtJQUFuRCxxUEFBdUIsaUNBQTBCLEtBQUM7SUFDcEQsaUJBQTZCOzs7O0lBSDNCLGNBQStDO0lBQy9DLEFBREEsb0VBQStDLDJEQUNJOzs7SUFhL0MseUNBS3VCOzs7O0lBREQsQUFEQSxBQURBLEFBREEsaUNBQW1CLHlCQUNFLGtEQUN5Qix1REFDQzs7O0lBTHZFLDJCQUFxRDtJQUNuRCwrSUFLQztJQUNI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S0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLG1CQUFtQixHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDaEgsQ0FBQztRQUNELElBQUksbUJBQW1CLEVBQUUsQ0FBQztZQUN4QixPQUFPO2dCQUNMLFNBQVMsRUFBRSxtQkFBbUIsQ0FBQyxTQUFTO2dCQUN4QywwR0FBMEc7Z0JBQzFHLFVBQVUsRUFBRSxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSzthQUMxRSxDQUFDO1FBQ3pCLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTSxrQkFBa0IsQ0FBQyxVQUFrQjtRQUMxQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsb0JBQW9CLEdBQUcsVUFBVSxDQUFDO1FBQzVELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsWUFBWSxFQUFFLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNyRyxDQUFDO29GQTVJVSwwQkFBMEI7NkRBQTFCLDBCQUEwQjtZQ1B2QyxBQVJBLDZGQUFtRSxnRkFRQTs7WUFScEQsMkVBQWtEO1lBUWxELGNBQWtEO1lBQWxELDJFQUFrRDs7O2lGRE9wRCwwQkFBMEI7Y0FMdEMsU0FBUzsyQkFDRSwwQkFBMEI7O2tGQUl6QiwwQkFBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBDYXNlVGFiIH0gZnJvbSAnLi4vLi4vLi4vZG9tYWluJztcbmltcG9ydCB7IEZpZWxkc1V0aWxzIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZmllbGRzJztcbmltcG9ydCB7IENhc2VGbGFnU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY2FzZS1lZGl0b3Ivc2VydmljZXMvY2FzZS1mbGFnLXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWJzdHJhY3RGaWVsZFJlYWRDb21wb25lbnQgfSBmcm9tICcuLi9iYXNlLWZpZWxkL2Fic3RyYWN0LWZpZWxkLXJlYWQuY29tcG9uZW50JztcbmltcG9ydCB7IFBhbGV0dGVDb250ZXh0IH0gZnJvbSAnLi4vYmFzZS1maWVsZC9wYWxldHRlLWNvbnRleHQuZW51bSc7XG5pbXBvcnQgeyBGbGFnRGV0YWlsRGlzcGxheSwgRmxhZ3NXaXRoRm9ybUdyb3VwUGF0aCB9IGZyb20gJy4vZG9tYWluJztcbmltcG9ydCB7IENhc2VGbGFnRGlzcGxheUNvbnRleHRQYXJhbWV0ZXIsIENhc2VGbGFnU3RhdHVzIH0gZnJvbSAnLi9lbnVtcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NjZC1yZWFkLWNhc2UtZmxhZy1maWVsZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9yZWFkLWNhc2UtZmxhZy1maWVsZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3JlYWQtY2FzZS1mbGFnLWZpZWxkLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgUmVhZENhc2VGbGFnRmllbGRDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdEZpZWxkUmVhZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHB1YmxpYyBmbGFnc0RhdGE6IEZsYWdzV2l0aEZvcm1Hcm91cFBhdGhbXTtcbiAgcHVibGljIHBhcnR5TGV2ZWxDYXNlRmxhZ0RhdGE6IEZsYWdzV2l0aEZvcm1Hcm91cFBhdGhbXTtcbiAgcHVibGljIGNhc2VMZXZlbENhc2VGbGFnRGF0YTogRmxhZ3NXaXRoRm9ybUdyb3VwUGF0aDtcbiAgcHVibGljIHBhbGV0dGVDb250ZXh0ID0gUGFsZXR0ZUNvbnRleHQ7XG4gIHB1YmxpYyBmbGFnRm9yU3VtbWFyeURpc3BsYXk6IEZsYWdEZXRhaWxEaXNwbGF5O1xuICBwdWJsaWMgZGlzcGxheUNvbnRleHRQYXJhbWV0ZXI6IENhc2VGbGFnRGlzcGxheUNvbnRleHRQYXJhbWV0ZXI7XG4gIHB1YmxpYyBjYXNlRmxhZ3NFeHRlcm5hbFVzZXIgPSBmYWxzZTtcbiAgcHVibGljIHBhdGhUb0ZsYWdzRm9ybUdyb3VwOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2FzZUxldmVsQ2FzZUZsYWdzRmllbGRJZCA9ICdjYXNlRmxhZ3MnO1xuXG4gIHB1YmxpYyBnZXQgY2FzZUZsYWdEaXNwbGF5Q29udGV4dFBhcmFtZXRlcigpOiB0eXBlb2YgQ2FzZUZsYWdEaXNwbGF5Q29udGV4dFBhcmFtZXRlciB7XG4gICAgcmV0dXJuIENhc2VGbGFnRGlzcGxheUNvbnRleHRQYXJhbWV0ZXI7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2FzZUZsYWdTdGF0ZVNlcnZpY2U6IENhc2VGbGFnU3RhdGVTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgY29uc3QgZmxhZ0xhdW5jaGVyQ29udHJvbE5hbWUgPSBPYmplY3Qua2V5cyh0aGlzLmZvcm1Hcm91cC5jb250cm9scykuZmluZChcbiAgICAgIGNvbnRyb2xOYW1lID0+IEZpZWxkc1V0aWxzLmlzQ2FzZUZpZWxkT2ZUeXBlKHRoaXMuZm9ybUdyb3VwLmdldChjb250cm9sTmFtZSlbJ2Nhc2VGaWVsZCddLCBbJ0ZsYWdMYXVuY2hlciddKSk7XG4gICAgY29uc3QgZmxhZ0xhdW5jaGVyQ29tcG9uZW50ID0gdGhpcy5mb3JtR3JvdXAuZ2V0KGZsYWdMYXVuY2hlckNvbnRyb2xOYW1lKT8uWydjb21wb25lbnQnXTtcbiAgICB0aGlzLmRpc3BsYXlDb250ZXh0UGFyYW1ldGVyID0gZmxhZ0xhdW5jaGVyQ29tcG9uZW50Py5jYXNlRmllbGQ/LmRpc3BsYXlfY29udGV4dF9wYXJhbWV0ZXI7XG4gICAgdGhpcy5jYXNlRmxhZ3NFeHRlcm5hbFVzZXIgPSB0aGlzLmRpc3BsYXlDb250ZXh0UGFyYW1ldGVyID09PSBDYXNlRmxhZ0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyLlJFQURfRVhURVJOQUw7XG5cbiAgICAvLyBJZiB0aGUgY29udGV4dCBpcyBQYWxldHRlQ29udGV4dC5ERUZBVUxULCB0aGUgRmxhZ3MgZmllbGRzIG5lZWQgdG8gYmUgbG9jYXRlZCBieSBDYXNlVGFiICh0aGV5IHdvbid0IGJlIHByZXNlbnRcbiAgICAvLyBpbiB0aGUgRm9ybUdyb3VwIC0gb25seSB0aGUgRmxhZ0xhdW5jaGVyIGZpZWxkIGlzIHByZXNlbnQpXG4gICAgaWYgKHRoaXMuY29udGV4dCA9PT0gUGFsZXR0ZUNvbnRleHQuREVGQVVMVCkge1xuICAgICAgLy8gRGV0ZXJtaW5lIHRoZSB0YWIgdGhpcyBDYXNlRmllbGQgYmVsb25ncyB0byAoc2hvdWxkIGJlIG9ubHkgb25lKSwgZnJvbSB0aGUgQ2FzZVZpZXcgb2JqZWN0IGluIHRoZSBzbmFwc2hvdFxuICAgICAgLy8gZGF0YSwgYW5kIGV4dHJhY3QgYWxsIGZsYWdzLXJlbGF0ZWQgZGF0YSBmcm9tIGl0cyBGbGFncyBmaWVsZHNcbiAgICAgIGlmICh0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEuY2FzZT8udGFicykge1xuICAgICAgICB0aGlzLmZsYWdzRGF0YSA9ICh0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEuY2FzZS50YWJzIGFzIENhc2VUYWJbXSlcbiAgICAgICAgICAuZmlsdGVyKCh0YWIpID0+IHRhYi5maWVsZHM/LnNvbWUoXG4gICAgICAgICAgICAvLyBUaGVyZSBjb3VsZCBiZSBtb3JlIHRoYW4gb25lIEZsYWdMYXVuY2hlciBmaWVsZCBpbnN0YW5jZSBzbyBhbiBhZGRpdGlvbmFsIGNoZWNrIG9mIGNhc2VGaWVsZCBJRCBpc1xuICAgICAgICAgICAgLy8gcmVxdWlyZWQgdG8gZW5zdXJlIHRoZSBjb3JyZWN0IGluc3RhbmNlIGlzIG9idGFpbmVkXG4gICAgICAgICAgICAoY2FzZUZpZWxkKSA9PiBjYXNlRmllbGQuZmllbGRfdHlwZS50eXBlID09PSAnRmxhZ0xhdW5jaGVyJyAmJiBjYXNlRmllbGQuaWQgPT09IHRoaXMuY2FzZUZpZWxkLmlkKSlcbiAgICAgICAgICBbMF0uZmllbGRzPy5yZWR1Y2UoKGZsYWdzLCBjYXNlRmllbGQpID0+IEZpZWxkc1V0aWxzLmV4dHJhY3RGbGFnc0RhdGFGcm9tQ2FzZUZpZWxkKFxuICAgICAgICAgICAgZmxhZ3MsIGNhc2VGaWVsZCwgY2FzZUZpZWxkLmlkLCBjYXNlRmllbGQpLCBbXSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNlcGFyYXRlIHRoZSBwYXJ0eS1sZXZlbCBhbmQgY2FzZS1sZXZlbCBmbGFnc1xuICAgICAgdGhpcy5wYXJ0eUxldmVsQ2FzZUZsYWdEYXRhID0gdGhpcy5mbGFnc0RhdGEuZmlsdGVyKFxuICAgICAgICAoaW5zdGFuY2UpID0+IGluc3RhbmNlLnBhdGhUb0ZsYWdzRm9ybUdyb3VwICE9PSB0aGlzLmNhc2VMZXZlbENhc2VGbGFnc0ZpZWxkSWQpO1xuICAgICAgLy8gSWYgdGhlIHVzZXIgaXMgaW50ZXJuYWwsIGdyb3VwIGFsbCBmbGFncyBkYXRhIGJ5IGdyb3VwSWQgd2hlcmUgcHJlc2VudCBzbyB0aGV5IHNlZSBhIGNvbWJpbmVkIGNvbGxlY3Rpb24gb2ZcbiAgICAgIC8vIGludGVybmFsIGFuZCBleHRlcm5hbCBmbGFncyBkYXRhIGZvciBlYWNoIHBhcnR5XG4gICAgICBpZiAoIXRoaXMuY2FzZUZsYWdzRXh0ZXJuYWxVc2VyKSB7XG4gICAgICAgIGNvbnN0IGdyb3VwZWRGbGFnc0RhdGEgPSB0aGlzLnBhcnR5TGV2ZWxDYXNlRmxhZ0RhdGFcbiAgICAgICAgLmZpbHRlcigoZikgPT4gZi5mbGFncy5ncm91cElkKVxuICAgICAgICAucmVkdWNlKChtZXJnZWRGbGFnRGV0YWlscywgZikgPT4ge1xuICAgICAgICAgIG1lcmdlZEZsYWdEZXRhaWxzW2YuZmxhZ3MuZ3JvdXBJZF0gPSBtZXJnZWRGbGFnRGV0YWlsc1tmLmZsYWdzLmdyb3VwSWRdIHx8IFtdO1xuICAgICAgICAgIC8vIFRoZSBmbGFncy5kZXRhaWxzIHByb3BlcnR5ICh3aGljaCBzaG91bGQgYmUgYW4gYXJyYXkpIGNvdWxkIGJlIGZhbHN5OyBzcHJlYWQgYW4gZW1wdHkgYXJyYXkgaWYgc29cbiAgICAgICAgICBtZXJnZWRGbGFnRGV0YWlsc1tmLmZsYWdzLmdyb3VwSWRdLnB1c2goLi4uKGYuZmxhZ3MuZGV0YWlscyB8fCBbXSkpO1xuICAgICAgICAgIHJldHVybiBtZXJnZWRGbGFnRGV0YWlscztcbiAgICAgICAgfSwgT2JqZWN0LmNyZWF0ZShudWxsKSk7XG4gICAgICAgIC8vIFJlbW92ZSBkdXBsaWNhdGUgZmxhZ3Mgb2JqZWN0cyB3aXRoIHRoZSBzYW1lIGdyb3VwSWQgKHdoaWNoIGFyZSBnb2luZyB0byBiZSB0cmVhdGVkIGFzIG9uZSBmb3IgZGlzcGxheVxuICAgICAgICAvLyBwdXJwb3NlcylcbiAgICAgICAgY29uc3QgdW5pcXVlUGFydHlEYXRhID0gdGhpcy5wYXJ0eUxldmVsQ2FzZUZsYWdEYXRhXG4gICAgICAgIC5maWx0ZXIoKGYpID0+IGYuZmxhZ3MuZ3JvdXBJZClcbiAgICAgICAgLnJlZHVjZSgoZmxhZ3NVbmlxdWVCeUdyb3VwSWQsIGYpID0+IHtcbiAgICAgICAgICBpZiAoZmxhZ3NVbmlxdWVCeUdyb3VwSWQuZmluZEluZGV4KGZsYWcgPT4gZmxhZy5mbGFncy5ncm91cElkID09PSBmLmZsYWdzLmdyb3VwSWQpID09PSAtMSkge1xuICAgICAgICAgICAgLy8gU2V0IHRoZSBjb3JyZXNwb25kaW5nIGdyb3VwZWQgZmxhZ3MgZGF0YVxuICAgICAgICAgICAgZi5mbGFncy5kZXRhaWxzID0gZ3JvdXBlZEZsYWdzRGF0YVtmLmZsYWdzLmdyb3VwSWRdO1xuICAgICAgICAgICAgZmxhZ3NVbmlxdWVCeUdyb3VwSWQucHVzaChmKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZsYWdzVW5pcXVlQnlHcm91cElkO1xuICAgICAgICB9LCBbXSk7XG4gICAgICAgIC8vIEFwcGVuZCBmbGFncyBvYmplY3RzIHdpdGggbm8gZ3JvdXBJZFxuICAgICAgICB0aGlzLnBhcnR5TGV2ZWxDYXNlRmxhZ0RhdGEuZmlsdGVyKChmKSA9PiAhZi5mbGFncy5ncm91cElkKS5mb3JFYWNoKChmKSA9PiB1bmlxdWVQYXJ0eURhdGEucHVzaChmKSk7XG4gICAgICAgIHRoaXMucGFydHlMZXZlbENhc2VGbGFnRGF0YSA9IHVuaXF1ZVBhcnR5RGF0YTtcbiAgICAgIH1cblxuICAgICAgLy8gVGhlcmUgd2lsbCBiZSBvbmx5IG9uZSBjYXNlLWxldmVsIGZsYWdzIGluc3RhbmNlIGNvbnRhaW5pbmcgYWxsIGNhc2UtbGV2ZWwgZmxhZyBkZXRhaWxzXG4gICAgICB0aGlzLmNhc2VMZXZlbENhc2VGbGFnRGF0YSA9IHRoaXMuZmxhZ3NEYXRhLmZpbmQoXG4gICAgICAgIChpbnN0YW5jZSkgPT4gaW5zdGFuY2UucGF0aFRvRmxhZ3NGb3JtR3JvdXAgPT09IHRoaXMuY2FzZUxldmVsQ2FzZUZsYWdzRmllbGRJZCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmNvbnRleHQgPT09IFBhbGV0dGVDb250ZXh0LkNIRUNLX1lPVVJfQU5TV0VSKSB7XG4gICAgICAvLyBJZiB0aGUgY29udGV4dCBpcyBQYWxldHRlQ29udGV4dC5DSEVDS19ZT1VSX0FOU1dFUiwgdGhlIEZsYWdzIGRhdGEgaXMgYWxyZWFkeSBwcmVzZW50IHdpdGhpbiB0aGUgRm9ybUdyb3VwLlxuICAgICAgLy8gVGhlIEZsYWdMYXVuY2hlciBjb21wb25lbnQsIFdyaXRlQ2FzZUZsYWdGaWVsZENvbXBvbmVudCwgaG9sZHMgYSByZWZlcmVuY2UgdG86XG4gICAgICAvLyBpKSB0aGUgcGFyZW50IEZvcm1Hcm91cCBmb3IgdGhlIEZsYWdzIGluc3RhbmNlIHdoZXJlIGNoYW5nZXMgaGF2ZSBiZWVuIG1hZGU7XG4gICAgICAvLyBpaSkgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBmbGFnIChzZWxlY3RlZEZsYWcpIGlmIG9uZSBleGlzdHNcbiAgICAgIGlmIChmbGFnTGF1bmNoZXJDb21wb25lbnQpIHtcbiAgICAgICAgLy8gVGhlIEZsYWdMYXVuY2hlciBjb21wb25lbnQgaG9sZHMgYSByZWZlcmVuY2UgKHNlbGVjdGVkRmxhZ3NMb2NhdGlvbikgY29udGFpbmluZyB0aGUgQ2FzZUZpZWxkIGluc3RhbmNlIHRvXG4gICAgICAgIC8vIHdoaWNoIHRoZSBuZXcgZmxhZyBoYXMgYmVlbiBhZGRlZFxuICAgICAgICBpZiAoKGZsYWdMYXVuY2hlckNvbXBvbmVudC5jYXNlRmllbGQuZGlzcGxheV9jb250ZXh0X3BhcmFtZXRlciA9PT0gQ2FzZUZsYWdEaXNwbGF5Q29udGV4dFBhcmFtZXRlci5DUkVBVEUgfHxcbiAgICAgICAgICBmbGFnTGF1bmNoZXJDb21wb25lbnQuY2FzZUZpZWxkLmRpc3BsYXlfY29udGV4dF9wYXJhbWV0ZXIgPT09IENhc2VGbGFnRGlzcGxheUNvbnRleHRQYXJhbWV0ZXIuQ1JFQVRFXzJfUE9JTlRfMSB8fFxuICAgICAgICAgIGZsYWdMYXVuY2hlckNvbXBvbmVudC5jYXNlRmllbGQuZGlzcGxheV9jb250ZXh0X3BhcmFtZXRlciA9PT0gQ2FzZUZsYWdEaXNwbGF5Q29udGV4dFBhcmFtZXRlci5DUkVBVEVfRVhURVJOQUwpICYmXG4gICAgICAgICAgZmxhZ0xhdW5jaGVyQ29tcG9uZW50LnNlbGVjdGVkRmxhZ3NMb2NhdGlvbikge1xuICAgICAgICAgICAgdGhpcy5wYXRoVG9GbGFnc0Zvcm1Hcm91cCA9IGZsYWdMYXVuY2hlckNvbXBvbmVudC5zZWxlY3RlZEZsYWdzTG9jYXRpb24ucGF0aFRvRmxhZ3NGb3JtR3JvdXA7XG4gICAgICAgICAgICB0aGlzLmZsYWdGb3JTdW1tYXJ5RGlzcGxheSA9IHRoaXMuZXh0cmFjdE5ld0ZsYWdUb0ZsYWdEZXRhaWxEaXNwbGF5T2JqZWN0KFxuICAgICAgICAgICAgICBmbGFnTGF1bmNoZXJDb21wb25lbnQuc2VsZWN0ZWRGbGFnc0xvY2F0aW9uKTtcbiAgICAgICAgLy8gVGhlIEZsYWdMYXVuY2hlciBjb21wb25lbnQgaG9sZHMgYSByZWZlcmVuY2UgKHNlbGVjdGVkRmxhZyksIHdoaWNoIGdldHMgc2V0IGFmdGVyIHRoZSBzZWxlY3Rpb24gc3RlcCBvZiB0aGVcbiAgICAgICAgLy8gTWFuYWdlIENhc2UgRmxhZ3Mgam91cm5leVxuICAgICAgICB9IGVsc2UgaWYgKChmbGFnTGF1bmNoZXJDb21wb25lbnQuY2FzZUZpZWxkLmRpc3BsYXlfY29udGV4dF9wYXJhbWV0ZXIgPT09IENhc2VGbGFnRGlzcGxheUNvbnRleHRQYXJhbWV0ZXIuVVBEQVRFIHx8XG4gICAgICAgICAgZmxhZ0xhdW5jaGVyQ29tcG9uZW50LmNhc2VGaWVsZC5kaXNwbGF5X2NvbnRleHRfcGFyYW1ldGVyID09PSBDYXNlRmxhZ0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyLlVQREFURV8yX1BPSU5UXzEgfHxcbiAgICAgICAgICBmbGFnTGF1bmNoZXJDb21wb25lbnQuY2FzZUZpZWxkLmRpc3BsYXlfY29udGV4dF9wYXJhbWV0ZXIgPT09IENhc2VGbGFnRGlzcGxheUNvbnRleHRQYXJhbWV0ZXIuVVBEQVRFX0VYVEVSTkFMKSAmJlxuICAgICAgICAgIGZsYWdMYXVuY2hlckNvbXBvbmVudC5zZWxlY3RlZEZsYWcpIHtcbiAgICAgICAgICAgIHRoaXMuZmxhZ0ZvclN1bW1hcnlEaXNwbGF5ID1cbiAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KGZsYWdMYXVuY2hlckNvbnRyb2xOYW1lKVsnY29tcG9uZW50J10uc2VsZWN0ZWRGbGFnLmZsYWdEZXRhaWxEaXNwbGF5O1xuICAgICAgICAgIC8vIFRPRE86IG5vdCB0aGUgYmVzdCBzb2x1dGlvbiwgdGhlIGNhc2VGbGFnU3RhdGVTZXJ2aWNlIHNob3VsZCBoYXZlIGFsbCB0aGUgZmllbGRzLCB0aGVuIHdlIGNhbiBkZWxldGUgYSBsb3Qgb2YgdGhlIHRyYW5zZm9ybWF0aW9ucyBoZXJlXG4gICAgICAgICAgLy8gaW4gQ3JlYXRlIENhc2UgRmxhZyBpdCBhbHJlYWR5IGhhcyBhbGwgZmllbGRzXG4gICAgICAgICAgY29uc3QgY2FzZUZsYWdGb3JtR3JvdXBWYWx1ZSA9IHRoaXMuY2FzZUZsYWdTdGF0ZVNlcnZpY2UuZm9ybUdyb3VwPy52YWx1ZTtcbiAgICAgICAgICBpZiAoY2FzZUZsYWdGb3JtR3JvdXBWYWx1ZSkge1xuICAgICAgICAgICAgY2FzZUZsYWdGb3JtR3JvdXBWYWx1ZS5zdGF0dXMgPSBDYXNlRmxhZ1N0YXR1c1tjYXNlRmxhZ0Zvcm1Hcm91cFZhbHVlLnN0YXR1c107XG4gICAgICAgICAgICB0aGlzLmZsYWdGb3JTdW1tYXJ5RGlzcGxheS5mbGFnRGV0YWlsID0ge1xuICAgICAgICAgICAgICAuLi50aGlzLmZsYWdGb3JTdW1tYXJ5RGlzcGxheS5mbGFnRGV0YWlsLFxuICAgICAgICAgICAgICAuLi5jYXNlRmxhZ0Zvcm1Hcm91cFZhbHVlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdE5ld0ZsYWdUb0ZsYWdEZXRhaWxEaXNwbGF5T2JqZWN0KHNlbGVjdGVkRmxhZ3NMb2NhdGlvbjogRmxhZ3NXaXRoRm9ybUdyb3VwUGF0aCk6IEZsYWdEZXRhaWxEaXNwbGF5IHtcbiAgICAvLyBVc2UgdGhlIHBhdGhUb0ZsYWdzRm9ybUdyb3VwIHByb3BlcnR5IGZyb20gdGhlIHNlbGVjdGVkIGZsYWcgbG9jYXRpb24gdG8gZHJpbGwgZG93biB0byB0aGUgY29ycmVjdCBwYXJ0IG9mIHRoZVxuICAgIC8vIENhc2VGaWVsZCB2YWx1ZSBjb250YWluaW5nIHRoZSBuZXcgZmxhZ1xuICAgIGxldCBmbGFnc0Nhc2VGaWVsZFZhbHVlID0gc2VsZWN0ZWRGbGFnc0xvY2F0aW9uLmNhc2VGaWVsZD8udmFsdWU7XG4gICAgY29uc3QgcGF0aCA9IHNlbGVjdGVkRmxhZ3NMb2NhdGlvbi5wYXRoVG9GbGFnc0Zvcm1Hcm91cDtcbiAgICAvLyBSb290LWxldmVsIEZsYWdzIENhc2VGaWVsZHMgZG9uJ3QgaGF2ZSBhIGRvdC1kZWxpbWl0ZWQgcGF0aCAtIGp1c3QgdGhlIENhc2VGaWVsZCBJRCBpdHNlbGYgLSBzbyBkb24ndCBkcmlsbCBkb3duXG4gICAgaWYgKHBhdGguaW5kZXhPZignLicpID4gLTEpIHtcbiAgICAgIHBhdGguc2xpY2UocGF0aC5pbmRleE9mKCcuJykgKyAxKS5zcGxpdCgnLicpLmZvckVhY2gocGFydCA9PiBmbGFnc0Nhc2VGaWVsZFZhbHVlID0gZmxhZ3NDYXNlRmllbGRWYWx1ZVtwYXJ0XSk7XG4gICAgfVxuICAgIGlmIChmbGFnc0Nhc2VGaWVsZFZhbHVlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwYXJ0eU5hbWU6IGZsYWdzQ2FzZUZpZWxkVmFsdWUucGFydHlOYW1lLFxuICAgICAgICAvLyBMb29rIGluIHRoZSBkZXRhaWxzIGFycmF5IGZvciB0aGUgb2JqZWN0IHRoYXQgZG9lcyAqbm90KiBoYXZlIGFuIGlkIC0gdGhpcyBpbmRpY2F0ZXMgaXQgaXMgdGhlIG5ldyBmbGFnXG4gICAgICAgIGZsYWdEZXRhaWw6IGZsYWdzQ2FzZUZpZWxkVmFsdWUuZGV0YWlscz8uZmluZChlbGVtZW50ID0+ICFlbGVtZW50Lmhhc093blByb3BlcnR5KCdpZCcpKT8udmFsdWVcbiAgICAgIH0gYXMgRmxhZ0RldGFpbERpc3BsYXk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwdWJsaWMgbmF2aWdhdGVCYWNrVG9Gb3JtKGZpZWxkU3RhdGU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuY2FzZUZsYWdTdGF0ZVNlcnZpY2UuZmllbGRTdGF0ZVRvTmF2aWdhdGUgPSBmaWVsZFN0YXRlO1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtgLi4vJHt0aGlzLmNhc2VGbGFnU3RhdGVTZXJ2aWNlLnBhZ2VMb2NhdGlvbn1gXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xuICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiY29udGV4dCA9PT0gcGFsZXR0ZUNvbnRleHQuQ0hFQ0tfWU9VUl9BTlNXRVJcIj5cbiAgPGNjZC1jYXNlLWZsYWctc3VtbWFyeS1saXN0XG4gICAgW2ZsYWdGb3JTdW1tYXJ5RGlzcGxheV09XCJmbGFnRm9yU3VtbWFyeURpc3BsYXlcIlxuICAgIFtkaXNwbGF5Q29udGV4dFBhcmFtZXRlcl09XCJkaXNwbGF5Q29udGV4dFBhcmFtZXRlclwiXG4gICAgKGNoYW5nZUJ1dHRvbkVtaXR0ZXIpPVwibmF2aWdhdGVCYWNrVG9Gb3JtKCRldmVudClcIj5cbiAgPC9jY2QtY2FzZS1mbGFnLXN1bW1hcnktbGlzdD5cbjwvbmctY29udGFpbmVyPlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwiY29udGV4dCAhPT0gcGFsZXR0ZUNvbnRleHQuQ0hFQ0tfWU9VUl9BTlNXRVJcIj5cbiAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiZGlzcGxheUNvbnRleHRQYXJhbWV0ZXJcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJjYXNlRmxhZ0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyLlJFQURfRVhURVJOQUxcIj5cbiAgICAgIDxoMiBpZD1cInJlYWQtY2FzZS1mbGFnLXRpdGxlXCIgY2xhc3M9XCJnb3Z1ay1oZWFkaW5nLWxcIj5cbiAgICAgICAge3sgJ1N1cHBvcnQgcmVxdWVzdGVkJyB8IHJweFRyYW5zbGF0ZSB9fVxuICAgICAgPC9oMj5cblxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZmxhZ0RhdGEgb2YgcGFydHlMZXZlbENhc2VGbGFnRGF0YVwiPlxuICAgICAgICA8Y2NkLWNhc2UtZmxhZy10YWJsZSAqbmdJZj1cImZsYWdEYXRhLmZsYWdzLnBhcnR5TmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGFibGVDYXB0aW9uXT1cIicnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmbGFnRGF0YV09XCJmbGFnRGF0YVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmlyc3RDb2x1bW5IZWFkZXJdPVwiZmxhZ0RhdGEuZmxhZ3MucGFydHlOYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYXNlRmxhZ3NFeHRlcm5hbFVzZXJdPVwiY2FzZUZsYWdzRXh0ZXJuYWxVc2VyXCJcbiAgICAgICAgPjwvY2NkLWNhc2UtZmxhZy10YWJsZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0PlxuICAgICAgPGgyIGlkPVwicmVhZC1jYXNlLWZsYWctdGl0bGVcIiBjbGFzcz1cImdvdnVrLWhlYWRpbmctbFwiPlxuICAgICAgICB7eyAnQ2FzZSBmbGFncycgfCBycHhUcmFuc2xhdGUgfX1cbiAgICAgIDwvaDI+XG5cbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGZsYWdEYXRhIG9mIHBhcnR5TGV2ZWxDYXNlRmxhZ0RhdGFcIj5cbiAgICAgICAgPGNjZC1jYXNlLWZsYWctdGFibGUgKm5nSWY9XCJmbGFnRGF0YS5mbGFncy5wYXJ0eU5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RhYmxlQ2FwdGlvbl09XCJmbGFnRGF0YS5mbGFncy5wYXJ0eU5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZsYWdEYXRhXT1cImZsYWdEYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaXJzdENvbHVtbkhlYWRlcl09XCInUGFydHkgbGV2ZWwgZmxhZ3MnIHwgcnB4VHJhbnNsYXRlXCJcbiAgICAgICAgPjwvY2NkLWNhc2UtZmxhZy10YWJsZT5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj1cImNhc2VMZXZlbENhc2VGbGFnRGF0YVwiPlxuICAgICAgICA8Y2NkLWNhc2UtZmxhZy10YWJsZVxuICAgICAgICAgIFt0YWJsZUNhcHRpb25dPVwiJ0Nhc2UgbGV2ZWwgZmxhZ3MnIHwgcnB4VHJhbnNsYXRlXCJcbiAgICAgICAgICBbZmxhZ0RhdGFdPVwiY2FzZUxldmVsQ2FzZUZsYWdEYXRhXCJcbiAgICAgICAgICBbZmlyc3RDb2x1bW5IZWFkZXJdPVwiJ0Nhc2UgZmxhZ3MnIHwgcnB4VHJhbnNsYXRlXCJcbiAgICAgICAgPjwvY2NkLWNhc2UtZmxhZy10YWJsZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuIl19
|
|
280
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhZC1jYXNlLWZsYWctZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9jb21wb25lbnRzL3BhbGV0dGUvY2FzZS1mbGFnL3JlYWQtY2FzZS1mbGFnLWZpZWxkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9wYWxldHRlL2Nhc2UtZmxhZy9yZWFkLWNhc2UtZmxhZy1maWVsZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFekQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQzFGLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUVwRSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsY0FBYyxFQUFFLE1BQU0sU0FBUyxDQUFDOzs7Ozs7SUNSMUUsNkJBQW1FO0lBQ2pFLHFEQUdxRDtJQUFuRCxxUEFBdUIsaUNBQTBCLEtBQUM7SUFDcEQsaUJBQTZCOzs7O0lBSDNCLGNBQStDO0lBQy9DLEFBREEsb0VBQStDLDJEQUNJOzs7SUFhL0MseUNBS3VCOzs7O0lBREQsQUFEQSxBQURBLEFBREEsaUNBQW1CLHlCQUNFLGtEQUN5Qix1REFDQzs7O0lBTHZFLDJCQUFxRDtJQUNuRCwrSUFLQztJQUNI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QUFDLENBQUM7SUFDckcsQ0FBQztvRkF2S1UsMEJBQTBCOzZEQUExQiwwQkFBMEI7WUNQdkMsQUFSQSw2RkFBbUUsZ0ZBUUE7O1lBUnBELDJFQUFrRDtZQVFsRCxjQUFrRDtZQUFsRCwyRUFBa0Q7OztpRkRPcEQsMEJBQTBCO2NBTHRDLFNBQVM7MkJBQ0UsMEJBQTBCOztrRkFJekIsMEJBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQ2FzZVRhYiB9IGZyb20gJy4uLy4uLy4uL2RvbWFpbic7XG5pbXBvcnQgeyBGaWVsZHNVdGlscyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2ZpZWxkcyc7XG5pbXBvcnQgeyBDYXNlRmxhZ1N0YXRlU2VydmljZSB9IGZyb20gJy4uLy4uL2Nhc2UtZWRpdG9yL3NlcnZpY2VzL2Nhc2UtZmxhZy1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IEFic3RyYWN0RmllbGRSZWFkQ29tcG9uZW50IH0gZnJvbSAnLi4vYmFzZS1maWVsZC9hYnN0cmFjdC1maWVsZC1yZWFkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQYWxldHRlQ29udGV4dCB9IGZyb20gJy4uL2Jhc2UtZmllbGQvcGFsZXR0ZS1jb250ZXh0LmVudW0nO1xuaW1wb3J0IHsgRmxhZ0RldGFpbERpc3BsYXksIEZsYWdzV2l0aEZvcm1Hcm91cFBhdGggfSBmcm9tICcuL2RvbWFpbic7XG5pbXBvcnQgeyBDYXNlRmxhZ0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyLCBDYXNlRmxhZ1N0YXR1cyB9IGZyb20gJy4vZW51bXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjY2QtcmVhZC1jYXNlLWZsYWctZmllbGQnLFxuICB0ZW1wbGF0ZVVybDogJy4vcmVhZC1jYXNlLWZsYWctZmllbGQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9yZWFkLWNhc2UtZmxhZy1maWVsZC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFJlYWRDYXNlRmxhZ0ZpZWxkQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RGaWVsZFJlYWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwdWJsaWMgZmxhZ3NEYXRhOiBGbGFnc1dpdGhGb3JtR3JvdXBQYXRoW107XG4gIHB1YmxpYyBwYXJ0eUxldmVsQ2FzZUZsYWdEYXRhOiBGbGFnc1dpdGhGb3JtR3JvdXBQYXRoW107XG4gIHB1YmxpYyBjYXNlTGV2ZWxDYXNlRmxhZ0RhdGE6IEZsYWdzV2l0aEZvcm1Hcm91cFBhdGg7XG4gIHB1YmxpYyBwYWxldHRlQ29udGV4dCA9IFBhbGV0dGVDb250ZXh0O1xuICBwdWJsaWMgZmxhZ0ZvclN1bW1hcnlEaXNwbGF5OiBGbGFnRGV0YWlsRGlzcGxheTtcbiAgcHVibGljIGRpc3BsYXlDb250ZXh0UGFyYW1ldGVyOiBDYXNlRmxhZ0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyO1xuICBwdWJsaWMgY2FzZUZsYWdzRXh0ZXJuYWxVc2VyID0gZmFsc2U7XG4gIHB1YmxpYyBwYXRoVG9GbGFnc0Zvcm1Hcm91cDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGNhc2VMZXZlbENhc2VGbGFnc0ZpZWxkSWQgPSAnY2FzZUZsYWdzJztcblxuICBwdWJsaWMgZ2V0IGNhc2VGbGFnRGlzcGxheUNvbnRleHRQYXJhbWV0ZXIoKTogdHlwZW9mIENhc2VGbGFnRGlzcGxheUNvbnRleHRQYXJhbWV0ZXIge1xuICAgIHJldHVybiBDYXNlRmxhZ0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNhc2VGbGFnU3RhdGVTZXJ2aWNlOiBDYXNlRmxhZ1N0YXRlU2VydmljZVxuICApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IGZsYWdMYXVuY2hlckNvbnRyb2xOYW1lID0gT2JqZWN0LmtleXModGhpcy5mb3JtR3JvdXAuY29udHJvbHMpLmZpbmQoXG4gICAgICBjb250cm9sTmFtZSA9PiBGaWVsZHNVdGlscy5pc0Nhc2VGaWVsZE9mVHlwZSh0aGlzLmZvcm1Hcm91cC5nZXQoY29udHJvbE5hbWUpWydjYXNlRmllbGQnXSwgWydGbGFnTGF1bmNoZXInXSkpO1xuICAgIGNvbnN0IGZsYWdMYXVuY2hlckNvbXBvbmVudCA9IHRoaXMuZm9ybUdyb3VwLmdldChmbGFnTGF1bmNoZXJDb250cm9sTmFtZSk/LlsnY29tcG9uZW50J107XG4gICAgdGhpcy5kaXNwbGF5Q29udGV4dFBhcmFtZXRlciA9IGZsYWdMYXVuY2hlckNvbXBvbmVudD8uY2FzZUZpZWxkPy5kaXNwbGF5X2NvbnRleHRfcGFyYW1ldGVyO1xuICAgIHRoaXMuY2FzZUZsYWdzRXh0ZXJuYWxVc2VyID0gdGhpcy5kaXNwbGF5Q29udGV4dFBhcmFtZXRlciA9PT0gQ2FzZUZsYWdEaXNwbGF5Q29udGV4dFBhcmFtZXRlci5SRUFEX0VYVEVSTkFMO1xuXG4gICAgLy8gSWYgdGhlIGNvbnRleHQgaXMgUGFsZXR0ZUNvbnRleHQuREVGQVVMVCwgdGhlIEZsYWdzIGZpZWxkcyBuZWVkIHRvIGJlIGxvY2F0ZWQgYnkgQ2FzZVRhYiAodGhleSB3b24ndCBiZSBwcmVzZW50XG4gICAgLy8gaW4gdGhlIEZvcm1Hcm91cCAtIG9ubHkgdGhlIEZsYWdMYXVuY2hlciBmaWVsZCBpcyBwcmVzZW50KVxuICAgIGlmICh0aGlzLmNvbnRleHQgPT09IFBhbGV0dGVDb250ZXh0LkRFRkFVTFQpIHtcbiAgICAgIC8vIERldGVybWluZSB0aGUgdGFiIHRoaXMgQ2FzZUZpZWxkIGJlbG9uZ3MgdG8gKHNob3VsZCBiZSBvbmx5IG9uZSksIGZyb20gdGhlIENhc2VWaWV3IG9iamVjdCBpbiB0aGUgc25hcHNob3RcbiAgICAgIC8vIGRhdGEsIGFuZCBleHRyYWN0IGFsbCBmbGFncy1yZWxhdGVkIGRhdGEgZnJvbSBpdHMgRmxhZ3MgZmllbGRzXG4gICAgICBpZiAodGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhLmNhc2U/LnRhYnMpIHtcbiAgICAgICAgdGhpcy5mbGFnc0RhdGEgPSAodGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhLmNhc2UudGFicyBhcyBDYXNlVGFiW10pXG4gICAgICAgICAgLmZpbHRlcigodGFiKSA9PiB0YWIuZmllbGRzPy5zb21lKFxuICAgICAgICAgICAgLy8gVGhlcmUgY291bGQgYmUgbW9yZSB0aGFuIG9uZSBGbGFnTGF1bmNoZXIgZmllbGQgaW5zdGFuY2Ugc28gYW4gYWRkaXRpb25hbCBjaGVjayBvZiBjYXNlRmllbGQgSUQgaXNcbiAgICAgICAgICAgIC8vIHJlcXVpcmVkIHRvIGVuc3VyZSB0aGUgY29ycmVjdCBpbnN0YW5jZSBpcyBvYnRhaW5lZFxuICAgICAgICAgICAgKGNhc2VGaWVsZCkgPT4gY2FzZUZpZWxkLmZpZWxkX3R5cGUudHlwZSA9PT0gJ0ZsYWdMYXVuY2hlcicgJiYgY2FzZUZpZWxkLmlkID09PSB0aGlzLmNhc2VGaWVsZC5pZCkpXG4gICAgICAgICAgWzBdLmZpZWxkcz8ucmVkdWNlKChmbGFncywgY2FzZUZpZWxkKSA9PiBGaWVsZHNVdGlscy5leHRyYWN0RmxhZ3NEYXRhRnJvbUNhc2VGaWVsZChcbiAgICAgICAgICAgIGZsYWdzLCBjYXNlRmllbGQsIGNhc2VGaWVsZC5pZCwgY2FzZUZpZWxkKSwgW10pO1xuICAgICAgfVxuXG4gICAgICAvLyBTZXBhcmF0ZSB0aGUgcGFydHktbGV2ZWwgYW5kIGNhc2UtbGV2ZWwgZmxhZ3NcbiAgICAgIHRoaXMucGFydHlMZXZlbENhc2VGbGFnRGF0YSA9IHRoaXMuZmxhZ3NEYXRhLmZpbHRlcihcbiAgICAgICAgKGluc3RhbmNlKSA9PiBpbnN0YW5jZS5wYXRoVG9GbGFnc0Zvcm1Hcm91cCAhPT0gdGhpcy5jYXNlTGV2ZWxDYXNlRmxhZ3NGaWVsZElkKTtcbiAgICAgIC8vIElmIHRoZSB1c2VyIGlzIGludGVybmFsLCBncm91cCBhbGwgZmxhZ3MgZGF0YSBieSBncm91cElkIHdoZXJlIHByZXNlbnQgc28gdGhleSBzZWUgYSBjb21iaW5lZCBjb2xsZWN0aW9uIG9mXG4gICAgICAvLyBpbnRlcm5hbCBhbmQgZXh0ZXJuYWwgZmxhZ3MgZGF0YSBmb3IgZWFjaCBwYXJ0eVxuICAgICAgaWYgKCF0aGlzLmNhc2VGbGFnc0V4dGVybmFsVXNlcikge1xuICAgICAgICBjb25zdCBncm91cGVkRmxhZ3NEYXRhID0gdGhpcy5wYXJ0eUxldmVsQ2FzZUZsYWdEYXRhXG4gICAgICAgICAgLmZpbHRlcigoZikgPT4gZi5mbGFncy5ncm91cElkKVxuICAgICAgICAgIC5yZWR1Y2UoKG1lcmdlZEZsYWdEZXRhaWxzLCBmKSA9PiB7XG4gICAgICAgICAgICBtZXJnZWRGbGFnRGV0YWlsc1tmLmZsYWdzLmdyb3VwSWRdID0gbWVyZ2VkRmxhZ0RldGFpbHNbZi5mbGFncy5ncm91cElkXSB8fCBbXTtcbiAgICAgICAgICAgIC8vIFRoZSBmbGFncy5kZXRhaWxzIHByb3BlcnR5ICh3aGljaCBzaG91bGQgYmUgYW4gYXJyYXkpIGNvdWxkIGJlIGZhbHN5OyBzcHJlYWQgYW4gZW1wdHkgYXJyYXkgaWYgc29cbiAgICAgICAgICAgIG1lcmdlZEZsYWdEZXRhaWxzW2YuZmxhZ3MuZ3JvdXBJZF0ucHVzaCguLi4oZi5mbGFncy5kZXRhaWxzIHx8IFtdKSk7XG4gICAgICAgICAgICByZXR1cm4gbWVyZ2VkRmxhZ0RldGFpbHM7XG4gICAgICAgICAgfSwgT2JqZWN0LmNyZWF0ZShudWxsKSk7XG4gICAgICAgIC8vIFJlbW92ZSBkdXBsaWNhdGUgZmxhZ3Mgb2JqZWN0cyB3aXRoIHRoZSBzYW1lIGdyb3VwSWQgKHdoaWNoIGFyZSBnb2luZyB0byBiZSB0cmVhdGVkIGFzIG9uZSBmb3IgZGlzcGxheVxuICAgICAgICAvLyBwdXJwb3NlcylcbiAgICAgICAgY29uc3QgdW5pcXVlUGFydHlEYXRhID0gdGhpcy5wYXJ0eUxldmVsQ2FzZUZsYWdEYXRhXG4gICAgICAgICAgLmZpbHRlcigoZikgPT4gZi5mbGFncy5ncm91cElkKVxuICAgICAgICAgIC5yZWR1Y2UoKGZsYWdzVW5pcXVlQnlHcm91cElkLCBmKSA9PiB7XG4gICAgICAgICAgICBpZiAoZmxhZ3NVbmlxdWVCeUdyb3VwSWQuZmluZEluZGV4KGZsYWcgPT4gZmxhZy5mbGFncy5ncm91cElkID09PSBmLmZsYWdzLmdyb3VwSWQpID09PSAtMSkge1xuICAgICAgICAgICAgLy8gU2V0IHRoZSBjb3JyZXNwb25kaW5nIGdyb3VwZWQgZmxhZ3MgZGF0YVxuICAgICAgICAgICAgICBmLmZsYWdzLmRldGFpbHMgPSBncm91cGVkRmxhZ3NEYXRhW2YuZmxhZ3MuZ3JvdXBJZF07XG4gICAgICAgICAgICAgIGZsYWdzVW5pcXVlQnlHcm91cElkLnB1c2goZik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmxhZ3NVbmlxdWVCeUdyb3VwSWQ7XG4gICAgICAgICAgfSwgW10pO1xuICAgICAgICAvLyBBcHBlbmQgZmxhZ3Mgb2JqZWN0cyB3aXRoIG5vIGdyb3VwSWRcbiAgICAgICAgdGhpcy5wYXJ0eUxldmVsQ2FzZUZsYWdEYXRhLmZpbHRlcigoZikgPT4gIWYuZmxhZ3MuZ3JvdXBJZCkuZm9yRWFjaCgoZikgPT4gdW5pcXVlUGFydHlEYXRhLnB1c2goZikpO1xuICAgICAgICB0aGlzLnBhcnR5TGV2ZWxDYXNlRmxhZ0RhdGEgPSB1bmlxdWVQYXJ0eURhdGE7XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZXJlIHdpbGwgYmUgb25seSBvbmUgY2FzZS1sZXZlbCBmbGFncyBpbnN0YW5jZSBjb250YWluaW5nIGFsbCBjYXNlLWxldmVsIGZsYWcgZGV0YWlsc1xuICAgICAgdGhpcy5jYXNlTGV2ZWxDYXNlRmxhZ0RhdGEgPSB0aGlzLmZsYWdzRGF0YS5maW5kKFxuICAgICAgICAoaW5zdGFuY2UpID0+IGluc3RhbmNlLnBhdGhUb0ZsYWdzRm9ybUdyb3VwID09PSB0aGlzLmNhc2VMZXZlbENhc2VGbGFnc0ZpZWxkSWQpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5jb250ZXh0ID09PSBQYWxldHRlQ29udGV4dC5DSEVDS19ZT1VSX0FOU1dFUikge1xuICAgICAgLy8gSWYgdGhlIGNvbnRleHQgaXMgUGFsZXR0ZUNvbnRleHQuQ0hFQ0tfWU9VUl9BTlNXRVIsIHRoZSBGbGFncyBkYXRhIGlzIGFscmVhZHkgcHJlc2VudCB3aXRoaW4gdGhlIEZvcm1Hcm91cC5cbiAgICAgIC8vIFRoZSBGbGFnTGF1bmNoZXIgY29tcG9uZW50LCBXcml0ZUNhc2VGbGFnRmllbGRDb21wb25lbnQsIGhvbGRzIGEgcmVmZXJlbmNlIHRvOlxuICAgICAgLy8gaSkgdGhlIHBhcmVudCBGb3JtR3JvdXAgZm9yIHRoZSBGbGFncyBpbnN0YW5jZSB3aGVyZSBjaGFuZ2VzIGhhdmUgYmVlbiBtYWRlO1xuICAgICAgLy8gaWkpIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZmxhZyAoc2VsZWN0ZWRGbGFnKSBpZiBvbmUgZXhpc3RzXG4gICAgICBjb25zdCBjYXNlRmxhZ0xvY2F0aW9uQ29udHJvbCA9ICdzZWxlY3RlZE1hbmFnZUNhc2VMb2NhdGlvbic7XG4gICAgICBpZiAoZmxhZ0xhdW5jaGVyQ29tcG9uZW50KSB7XG4gICAgICAgIC8vIFRoZSBGbGFnTGF1bmNoZXIgY29tcG9uZW50IGhvbGRzIGEgcmVmZXJlbmNlIChzZWxlY3RlZEZsYWdzTG9jYXRpb24pIGNvbnRhaW5pbmcgdGhlIENhc2VGaWVsZCBpbnN0YW5jZSB0b1xuICAgICAgICAvLyB3aGljaCB0aGUgbmV3IGZsYWcgaGFzIGJlZW4gYWRkZWRcbiAgICAgICAgaWYgKChmbGFnTGF1bmNoZXJDb21wb25lbnQuY2FzZUZpZWxkLmRpc3BsYXlfY29udGV4dF9wYXJhbWV0ZXIgPT09IENhc2VGbGFnRGlzcGxheUNvbnRleHRQYXJhbWV0ZXIuQ1JFQVRFIHx8XG4gICAgICAgICAgZmxhZ0xhdW5jaGVyQ29tcG9uZW50LmNhc2VGaWVsZC5kaXNwbGF5X2NvbnRleHRfcGFyYW1ldGVyID09PSBDYXNlRmxhZ0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyLkNSRUFURV8yX1BPSU5UXzEgfHxcbiAgICAgICAgICBmbGFnTGF1bmNoZXJDb21wb25lbnQuY2FzZUZpZWxkLmRpc3BsYXlfY29udGV4dF9wYXJhbWV0ZXIgPT09IENhc2VGbGFnRGlzcGxheUNvbnRleHRQYXJhbWV0ZXIuQ1JFQVRFX0VYVEVSTkFMKSAmJlxuICAgICAgICAgIGZsYWdMYXVuY2hlckNvbXBvbmVudC5zZWxlY3RlZEZsYWdzTG9jYXRpb24pIHtcbiAgICAgICAgICB0aGlzLmNsZWFudXBOYXZpZ2F0aW9uRm9ybUFkZGl0aW9ucyhmbGFnTGF1bmNoZXJDb21wb25lbnQuc2VsZWN0ZWRGbGFnc0xvY2F0aW9uKTtcbiAgICAgICAgICB0aGlzLnBhdGhUb0ZsYWdzRm9ybUdyb3VwID0gZmxhZ0xhdW5jaGVyQ29tcG9uZW50LnNlbGVjdGVkRmxhZ3NMb2NhdGlvbi5wYXRoVG9GbGFnc0Zvcm1Hcm91cDtcbiAgICAgICAgICB0aGlzLmZsYWdGb3JTdW1tYXJ5RGlzcGxheSA9IHRoaXMuZXh0cmFjdE5ld0ZsYWdUb0ZsYWdEZXRhaWxEaXNwbGF5T2JqZWN0KFxuICAgICAgICAgICAgZmxhZ0xhdW5jaGVyQ29tcG9uZW50LnNlbGVjdGVkRmxhZ3NMb2NhdGlvbik7XG4gICAgICAgIC8vIFRoZSBGbGFnTGF1bmNoZXIgY29tcG9uZW50IGhvbGRzIGEgcmVmZXJlbmNlIChzZWxlY3RlZEZsYWcpLCB3aGljaCBnZXRzIHNldCBhZnRlciB0aGUgc2VsZWN0aW9uIHN0ZXAgb2YgdGhlXG4gICAgICAgIC8vIE1hbmFnZSBDYXNlIEZsYWdzIGpvdXJuZXlcbiAgICAgICAgfSBlbHNlIGlmICgoZmxhZ0xhdW5jaGVyQ29tcG9uZW50LmNhc2VGaWVsZC5kaXNwbGF5X2NvbnRleHRfcGFyYW1ldGVyID09PSBDYXNlRmxhZ0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyLlVQREFURSB8fFxuICAgICAgICAgIGZsYWdMYXVuY2hlckNvbXBvbmVudC5jYXNlRmllbGQuZGlzcGxheV9jb250ZXh0X3BhcmFtZXRlciA9PT0gQ2FzZUZsYWdEaXNwbGF5Q29udGV4dFBhcmFtZXRlci5VUERBVEVfMl9QT0lOVF8xIHx8XG4gICAgICAgICAgZmxhZ0xhdW5jaGVyQ29tcG9uZW50LmNhc2VGaWVsZC5kaXNwbGF5X2NvbnRleHRfcGFyYW1ldGVyID09PSBDYXNlRmxhZ0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyLlVQREFURV9FWFRFUk5BTCkgJiZcbiAgICAgICAgICAoZmxhZ0xhdW5jaGVyQ29tcG9uZW50LnNlbGVjdGVkRmxhZyB8fFxuICAgICAgICAgICAgKHRoaXMuY2FzZUZsYWdTdGF0ZVNlcnZpY2UuZm9ybUdyb3VwLmdldChjYXNlRmxhZ0xvY2F0aW9uQ29udHJvbCkudmFsdWUuZmxhZ0RldGFpbERpc3BsYXkgJiYgdGhpcy5kaXNwbGF5Q29udGV4dFBhcmFtZXRlciA9PT0gQ2FzZUZsYWdEaXNwbGF5Q29udGV4dFBhcmFtZXRlci5VUERBVEVfMl9QT0lOVF8xKSkpIHtcbiAgICAgICAgICBpZiAodGhpcy5mb3JtR3JvdXAuZ2V0KGZsYWdMYXVuY2hlckNvbnRyb2xOYW1lKVsnY29tcG9uZW50J10/LnNlbGVjdGVkRmxhZz8uZmxhZ0RldGFpbERpc3BsYXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5mbGFnRm9yU3VtbWFyeURpc3BsYXkgPVxuICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoZmxhZ0xhdW5jaGVyQ29udHJvbE5hbWUpWydjb21wb25lbnQnXS5zZWxlY3RlZEZsYWcuZmxhZ0RldGFpbERpc3BsYXk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZmxhZ0ZvclN1bW1hcnlEaXNwbGF5ID1cbiAgICAgICAgICAgICAgdGhpcy5jYXNlRmxhZ1N0YXRlU2VydmljZS5mb3JtR3JvdXAuZ2V0KGNhc2VGbGFnTG9jYXRpb25Db250cm9sKS52YWx1ZS5mbGFnRGV0YWlsRGlzcGxheTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gVE9ETzogbm90IHRoZSBiZXN0IHNvbHV0aW9uLCB0aGUgY2FzZUZsYWdTdGF0ZVNlcnZpY2Ugc2hvdWxkIGhhdmUgYWxsIHRoZSBmaWVsZHMsIHRoZW4gd2UgY2FuIGRlbGV0ZSBhIGxvdCBvZiB0aGUgdHJhbnNmb3JtYXRpb25zIGhlcmVcbiAgICAgICAgICAvLyBpbiBDcmVhdGUgQ2FzZSBGbGFnIGl0IGFscmVhZHkgaGFzIGFsbCBmaWVsZHNcbiAgICAgICAgICBjb25zdCBjYXNlRmxhZ0Zvcm1Hcm91cFZhbHVlID0gdGhpcy5jYXNlRmxhZ1N0YXRlU2VydmljZS5mb3JtR3JvdXA/LnZhbHVlO1xuICAgICAgICAgIGlmIChjYXNlRmxhZ0Zvcm1Hcm91cFZhbHVlKSB7XG4gICAgICAgICAgICBjYXNlRmxhZ0Zvcm1Hcm91cFZhbHVlLnN0YXR1cyA9IENhc2VGbGFnU3RhdHVzW2Nhc2VGbGFnRm9ybUdyb3VwVmFsdWUuc3RhdHVzXTtcbiAgICAgICAgICAgIHRoaXMuZmxhZ0ZvclN1bW1hcnlEaXNwbGF5LmZsYWdEZXRhaWwgPSB7XG4gICAgICAgICAgICAgIC4uLnRoaXMuZmxhZ0ZvclN1bW1hcnlEaXNwbGF5LmZsYWdEZXRhaWwsXG4gICAgICAgICAgICAgIC4uLmNhc2VGbGFnRm9ybUdyb3VwVmFsdWVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjbGVhbnVwTmF2aWdhdGlvbkZvcm1BZGRpdGlvbnMoc2VsZWN0ZWRGbGFnc0xvY2F0aW9uOiBGbGFnc1dpdGhGb3JtR3JvdXBQYXRoKTogdm9pZHtcbiAgICBjb25zdCBwYXRoID0gc2VsZWN0ZWRGbGFnc0xvY2F0aW9uLnBhdGhUb0ZsYWdzRm9ybUdyb3VwO1xuICAgIE9iamVjdC5rZXlzKHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzKS5mb3JFYWNoKChjb250cm9sTmFtZSkgPT4ge1xuICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybUdyb3VwLmdldChjb250cm9sTmFtZSk7XG4gICAgICBpZiAoKGNvbnRyb2xOYW1lICE9PSBwYXRoKSkge1xuICAgICAgICBpZiAoY29udHJvbFsnY2FzZUZpZWxkJ10uZm9ybWF0dGVkX3ZhbHVlPy5kZXRhaWxzKSB7XG4gICAgICAgICAgLy8gd2Ugd2FudCB0byBsb29wIHRocm91Z2ggdGhlIGN1cnJlbnQgZmxhZyBkZXRhaWxzIHRvIGVuc3VyZSB0aGF0IHRoZXJlIGFyZSBubyBhZGRpdGlvbmFsIGRhdGEgZnJvbSB0aGUgdXNyZSByZXN0YXJ0aW5nIHRoZSBmbG93IHRoYXQgaGF2ZSBiZWVuIGFkZGVkLlxuICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgaW4gY29udHJvbFsnY2FzZUZpZWxkJ10uZm9ybWF0dGVkX3ZhbHVlPy5kZXRhaWxzKSB7XG4gICAgICAgICAgICAvLyBpZiB0aGUgaWQgaXMgdW5kZWZpbmVkIHRoZW4gdGhlIHVzZXIgaGFzIGFkZGVkIHRoaXMgYXMgcGFydCBvZiB0aGVpciBjdXJyZW50IGZsb3cgYW5kIHdlIHNob3VsZCByZW1vdmUgaXQgc28gaXQgZG9lc250IGdldCBhZGRlZCB0byB0aGUgY2FzZVxuICAgICAgICAgICAgaWYgKCFjb250cm9sWydjYXNlRmllbGQnXS5mb3JtYXR0ZWRfdmFsdWU/LmRldGFpbHNbdmFsdWVdLmlkKSB7XG4gICAgICAgICAgICAgIGNvbnRyb2xbJ2Nhc2VGaWVsZCddLnZhbHVlLmRldGFpbHMucG9wKCk7XG4gICAgICAgICAgICAgIGNvbnRyb2xbJ2Nhc2VGaWVsZCddLmZvcm1hdHRlZF92YWx1ZS5kZXRhaWxzLnBvcCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBleHRyYWN0TmV3RmxhZ1RvRmxhZ0RldGFpbERpc3BsYXlPYmplY3Qoc2VsZWN0ZWRGbGFnc0xvY2F0aW9uOiBGbGFnc1dpdGhGb3JtR3JvdXBQYXRoKTogRmxhZ0RldGFpbERpc3BsYXkge1xuICAgIC8vIFVzZSB0aGUgcGF0aFRvRmxhZ3NGb3JtR3JvdXAgcHJvcGVydHkgZnJvbSB0aGUgc2VsZWN0ZWQgZmxhZyBsb2NhdGlvbiB0byBkcmlsbCBkb3duIHRvIHRoZSBjb3JyZWN0IHBhcnQgb2YgdGhlXG4gICAgLy8gQ2FzZUZpZWxkIHZhbHVlIGNvbnRhaW5pbmcgdGhlIG5ldyBmbGFnXG4gICAgbGV0IGZsYWdzQ2FzZUZpZWxkVmFsdWUgPSBzZWxlY3RlZEZsYWdzTG9jYXRpb24uY2FzZUZpZWxkPy52YWx1ZTtcbiAgICBjb25zdCBwYXRoID0gc2VsZWN0ZWRGbGFnc0xvY2F0aW9uLnBhdGhUb0ZsYWdzRm9ybUdyb3VwO1xuICAgIC8vIFJvb3QtbGV2ZWwgRmxhZ3MgQ2FzZUZpZWxkcyBkb24ndCBoYXZlIGEgZG90LWRlbGltaXRlZCBwYXRoIC0ganVzdCB0aGUgQ2FzZUZpZWxkIElEIGl0c2VsZiAtIHNvIGRvbid0IGRyaWxsIGRvd25cbiAgICBpZiAocGF0aC5pbmRleE9mKCcuJykgPiAtMSkge1xuICAgICAgcGF0aC5zbGljZShwYXRoLmluZGV4T2YoJy4nKSArIDEpLnNwbGl0KCcuJykuZm9yRWFjaChwYXJ0ID0+IGZsYWdzQ2FzZUZpZWxkVmFsdWUgPSBmbGFnc0Nhc2VGaWVsZFZhbHVlW3BhcnRdKTtcbiAgICB9XG4gICAgaWYgKGZsYWdzQ2FzZUZpZWxkVmFsdWUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBhcnR5TmFtZTogZmxhZ3NDYXNlRmllbGRWYWx1ZS5wYXJ0eU5hbWUsXG4gICAgICAgIC8vIExvb2sgaW4gdGhlIGRldGFpbHMgYXJyYXkgZm9yIHRoZSBvYmplY3QgdGhhdCBkb2VzICpub3QqIGhhdmUgYW4gaWQgLSB0aGlzIGluZGljYXRlcyBpdCBpcyB0aGUgbmV3IGZsYWdcbiAgICAgICAgZmxhZ0RldGFpbDogZmxhZ3NDYXNlRmllbGRWYWx1ZS5kZXRhaWxzPy5maW5kKGVsZW1lbnQgPT4gIWVsZW1lbnQuaGFzT3duUHJvcGVydHkoJ2lkJykpPy52YWx1ZVxuICAgICAgfSBhcyBGbGFnRGV0YWlsRGlzcGxheTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBuYXZpZ2F0ZUJhY2tUb0Zvcm0oZmllbGRTdGF0ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5jYXNlRmxhZ1N0YXRlU2VydmljZS5maWVsZFN0YXRlVG9OYXZpZ2F0ZSA9IGZpZWxkU3RhdGU7XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2AuLi8ke3RoaXMuY2FzZUZsYWdTdGF0ZVNlcnZpY2UucGFnZUxvY2F0aW9ufWBdLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJjb250ZXh0ID09PSBwYWxldHRlQ29udGV4dC5DSEVDS19ZT1VSX0FOU1dFUlwiPlxuICA8Y2NkLWNhc2UtZmxhZy1zdW1tYXJ5LWxpc3RcbiAgICBbZmxhZ0ZvclN1bW1hcnlEaXNwbGF5XT1cImZsYWdGb3JTdW1tYXJ5RGlzcGxheVwiXG4gICAgW2Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyXT1cImRpc3BsYXlDb250ZXh0UGFyYW1ldGVyXCJcbiAgICAoY2hhbmdlQnV0dG9uRW1pdHRlcik9XCJuYXZpZ2F0ZUJhY2tUb0Zvcm0oJGV2ZW50KVwiPlxuICA8L2NjZC1jYXNlLWZsYWctc3VtbWFyeS1saXN0PlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJjb250ZXh0ICE9PSBwYWxldHRlQ29udGV4dC5DSEVDS19ZT1VSX0FOU1dFUlwiPlxuICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJkaXNwbGF5Q29udGV4dFBhcmFtZXRlclwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cImNhc2VGbGFnRGlzcGxheUNvbnRleHRQYXJhbWV0ZXIuUkVBRF9FWFRFUk5BTFwiPlxuICAgICAgPGgyIGlkPVwicmVhZC1jYXNlLWZsYWctdGl0bGVcIiBjbGFzcz1cImdvdnVrLWhlYWRpbmctbFwiPlxuICAgICAgICB7eyAnU3VwcG9ydCByZXF1ZXN0ZWQnIHwgcnB4VHJhbnNsYXRlIH19XG4gICAgICA8L2gyPlxuXG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBmbGFnRGF0YSBvZiBwYXJ0eUxldmVsQ2FzZUZsYWdEYXRhXCI+XG4gICAgICAgIDxjY2QtY2FzZS1mbGFnLXRhYmxlICpuZ0lmPVwiZmxhZ0RhdGEuZmxhZ3MucGFydHlOYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0YWJsZUNhcHRpb25dPVwiJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZsYWdEYXRhXT1cImZsYWdEYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaXJzdENvbHVtbkhlYWRlcl09XCJmbGFnRGF0YS5mbGFncy5wYXJ0eU5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Nhc2VGbGFnc0V4dGVybmFsVXNlcl09XCJjYXNlRmxhZ3NFeHRlcm5hbFVzZXJcIlxuICAgICAgICA+PC9jY2QtY2FzZS1mbGFnLXRhYmxlPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaERlZmF1bHQ+XG4gICAgICA8aDIgaWQ9XCJyZWFkLWNhc2UtZmxhZy10aXRsZVwiIGNsYXNzPVwiZ292dWstaGVhZGluZy1sXCI+XG4gICAgICAgIHt7ICdDYXNlIGZsYWdzJyB8IHJweFRyYW5zbGF0ZSB9fVxuICAgICAgPC9oMj5cblxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZmxhZ0RhdGEgb2YgcGFydHlMZXZlbENhc2VGbGFnRGF0YVwiPlxuICAgICAgICA8Y2NkLWNhc2UtZmxhZy10YWJsZSAqbmdJZj1cImZsYWdEYXRhLmZsYWdzLnBhcnR5TmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGFibGVDYXB0aW9uXT1cImZsYWdEYXRhLmZsYWdzLnBhcnR5TmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmxhZ0RhdGFdPVwiZmxhZ0RhdGFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpcnN0Q29sdW1uSGVhZGVyXT1cIidQYXJ0eSBsZXZlbCBmbGFncycgfCBycHhUcmFuc2xhdGVcIlxuICAgICAgICA+PC9jY2QtY2FzZS1mbGFnLXRhYmxlPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPVwiY2FzZUxldmVsQ2FzZUZsYWdEYXRhXCI+XG4gICAgICAgIDxjY2QtY2FzZS1mbGFnLXRhYmxlXG4gICAgICAgICAgW3RhYmxlQ2FwdGlvbl09XCInQ2FzZSBsZXZlbCBmbGFncycgfCBycHhUcmFuc2xhdGVcIlxuICAgICAgICAgIFtmbGFnRGF0YV09XCJjYXNlTGV2ZWxDYXNlRmxhZ0RhdGFcIlxuICAgICAgICAgIFtmaXJzdENvbHVtbkhlYWRlcl09XCInQ2FzZSBmbGFncycgfCBycHhUcmFuc2xhdGVcIlxuICAgICAgICA+PC9jY2QtY2FzZS1mbGFnLXRhYmxlPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG4iXX0=
|