kwikid-forms 0.3.20 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/bundles/kwikid-forms.umd.js +8985 -7725
  2. package/bundles/kwikid-forms.umd.js.map +1 -1
  3. package/esm2015/lib/builder/builder.component.js +2 -2
  4. package/esm2015/lib/builder/builder.module.js +8 -11
  5. package/esm2015/lib/builder/element-config-editor/editors/basic/radio-config.editor.component.js +10 -10
  6. package/esm2015/lib/builder/element-config-editor/editors/basic/select-config.editor.component.js +302 -0
  7. package/esm2015/lib/builder/element-config-editor/editors/basic/text-config.editor.component.js +6 -6
  8. package/esm2015/lib/builder/element-config-editor/editors/basic-element-config.editor.component.js +25 -25
  9. package/esm2015/lib/builder/element-config-editor/editors/document/pan-number-config.editor.component.js +6 -6
  10. package/esm2015/lib/builder/element-config-editor/editors/document-element-config.editor.component.js +18 -18
  11. package/esm2015/lib/builder/shared/elements.js +12 -3
  12. package/esm2015/lib/builder2/builder-form-editor/builder-form-editor.component.js +268 -0
  13. package/esm2015/lib/builder2/builder-form-editor/builder-form-editor.module.js +38 -0
  14. package/esm2015/lib/builder2/builder-form-editor/builder-form-editor.pipe.js +19 -0
  15. package/esm2015/lib/builder2/builder-form-editor/builder.form-editor.constants.js +178 -0
  16. package/esm2015/lib/builder2/builder-form-list/builder-forms-list.component.js +85 -0
  17. package/esm2015/lib/builder2/builder-form-list/builder-forms-list.module.js +37 -0
  18. package/esm2015/lib/builder2/builder2.component.js +169 -0
  19. package/esm2015/lib/builder2/builder2.module.js +46 -0
  20. package/esm2015/lib/kwikid-forms.module.js +16 -4
  21. package/esm2015/lib/renderer/config-converter.helper.js +86 -9
  22. package/esm2015/lib/renderer/form-view/definitions/form-view.fields.definition.js +4 -1
  23. package/esm2015/lib/renderer/form-view/form-view.component.js +200 -31
  24. package/esm2015/lib/renderer/form-view/helpers/form-view.fields.helper.js +17 -2
  25. package/esm2015/lib/renderer/forms-list/forms-list.component.js +6 -4
  26. package/esm2015/lib/renderer/renderer.component.js +73 -25
  27. package/esm2015/lib/renderer/renderer.definitions.js +6 -0
  28. package/esm2015/public_api.js +3 -1
  29. package/fesm2015/kwikid-forms.js +1304 -181
  30. package/fesm2015/kwikid-forms.js.map +1 -1
  31. package/lib/builder/builder.module.d.ts +2 -2
  32. package/lib/builder/element-config-editor/editors/basic/{dropdown-with-search-config.editor.component.d.ts → select-config.editor.component.d.ts} +5 -5
  33. package/lib/builder2/builder-form-editor/builder-form-editor.component.d.ts +48 -0
  34. package/lib/builder2/builder-form-editor/builder-form-editor.module.d.ts +12 -0
  35. package/lib/builder2/builder-form-editor/builder-form-editor.pipe.d.ts +7 -0
  36. package/lib/builder2/builder-form-editor/builder.form-editor.constants.d.ts +620 -0
  37. package/lib/builder2/builder-form-list/builder-forms-list.component.d.ts +19 -0
  38. package/lib/builder2/builder-form-list/builder-forms-list.module.d.ts +11 -0
  39. package/lib/builder2/builder2.component.d.ts +37 -0
  40. package/lib/builder2/builder2.module.d.ts +13 -0
  41. package/lib/kwikid-forms.module.d.ts +3 -2
  42. package/lib/renderer/form-view/definitions/form-view.fields.definition.d.ts +10 -7
  43. package/lib/renderer/form-view/form-view.component.d.ts +20 -3
  44. package/lib/renderer/form-view/helpers/form-view.fields.helper.d.ts +1 -0
  45. package/lib/renderer/renderer.definitions.d.ts +5 -0
  46. package/package.json +3 -16
  47. package/public_api.d.ts +2 -0
  48. package/esm2015/lib/builder/element-config-editor/editors/basic/dropdown-with-search-config.editor.component.js +0 -302
@@ -9,14 +9,16 @@ import { EActionKey } from "./form-view/definitions/form-view.actions.definition
9
9
  import { EFormViewGoBackMode } from "./form-view/definitions/form-view.commons.definition";
10
10
  import { EFormsListStatus } from "./forms-list/forms-list.definitions";
11
11
  import { ERendererActionKey } from "./renderer.actions.definitions";
12
+ import { EFormType } from "./renderer.definitions";
12
13
  import { getFormConfigByKey } from "./renderer.helper";
13
14
  import * as i0 from "@angular/core";
14
15
  import * as i1 from "./forms-list/forms-list.component";
15
16
  import * as i2 from "./form-view/form-view.component";
16
- import * as i3 from "@taiga-ui/kit";
17
- import * as i4 from "@taiga-ui/core";
18
- import * as i5 from "@taiga-ui/addon-preview";
19
- import * as i6 from "@angular/common";
17
+ import * as i3 from "kwikui";
18
+ import * as i4 from "@taiga-ui/kit";
19
+ import * as i5 from "@taiga-ui/core";
20
+ import * as i6 from "@taiga-ui/addon-preview";
21
+ import * as i7 from "@angular/common";
20
22
  export class KwikIDFormsRendererComponent {
21
23
  constructor(hostElement, cdr, previewDialogService, dialogs) {
22
24
  this.hostElement = hostElement;
@@ -154,7 +156,7 @@ export class KwikIDFormsRendererComponent {
154
156
  this.handleResize(this.formsList);
155
157
  if (isNotEmptyValue(this.activeFormConfig)) {
156
158
  if (checkObjectKeyExists(this.activeFormConfig, "type")) {
157
- if (this.activeFormConfig.type === "form") {
159
+ if (this.activeFormConfig.type !== EFormType.HTML) {
158
160
  yield this.handleOnClickSetActiveForm(this.activeFormConfig.key);
159
161
  }
160
162
  }
@@ -172,10 +174,7 @@ export class KwikIDFormsRendererComponent {
172
174
  });
173
175
  }
174
176
  convertFormListConfig(formsList) {
175
- return formsList.map((form) => {
176
- if (!checkObjectKeyExists(form, "type")) {
177
- form.type = "form";
178
- }
177
+ const convertFormListConfigTypeForm = (form) => {
179
178
  if (checkObjectKeyExists(form, "formContent")) {
180
179
  if (checkObjectKeyExists(form.formContent, "url")) {
181
180
  form = setValueToObjectPath(form, "props.url", form.formContent.url);
@@ -206,6 +205,48 @@ export class KwikIDFormsRendererComponent {
206
205
  form.dependentOn = [];
207
206
  }
208
207
  return form;
208
+ };
209
+ const convertFormListConfigTypeHtml = (form) => {
210
+ if (form.type === "html") {
211
+ form.type = EFormType.HTML;
212
+ }
213
+ if (checkObjectKeyExists(form, "htmlContent")) {
214
+ if (!checkObjectKeyExists(form, "props")) {
215
+ form.props = {
216
+ htmlContent: form.htmlContent
217
+ };
218
+ }
219
+ delete form["htmlContent"];
220
+ }
221
+ else {
222
+ if (!checkObjectKeyExists(form, "props")) {
223
+ form.props = {
224
+ htmlContent: ""
225
+ };
226
+ }
227
+ }
228
+ if (checkObjectKeyExists(form, "title")) {
229
+ form = setValueToObjectPath(form, "props.title", form.title);
230
+ delete form["title"];
231
+ }
232
+ if (!checkObjectKeyExists(form, "hidden")) {
233
+ form.hidden = false;
234
+ }
235
+ return form;
236
+ };
237
+ return formsList.map((form) => {
238
+ if (!checkObjectKeyExists(form, "type")) {
239
+ form.type = "FORM";
240
+ }
241
+ if (checkObjectKeyExists(form, "type")) {
242
+ if (form.type === EFormType.FORM) {
243
+ form = convertFormListConfigTypeForm(form);
244
+ }
245
+ if (form.type === EFormType.HTML || form.type === "html") {
246
+ form = convertFormListConfigTypeHtml(form);
247
+ }
248
+ }
249
+ return form;
209
250
  });
210
251
  }
211
252
  /**
@@ -219,7 +260,7 @@ export class KwikIDFormsRendererComponent {
219
260
  let sequenceNo = 1;
220
261
  for (let form of formsList) {
221
262
  if (checkObjectKeyExists(form, "hidden")) {
222
- if (!form.hidden && form.type === "form") {
263
+ if (!form.hidden && form.type !== EFormType.HTML) {
223
264
  form.sequenceNo = sequenceNo++;
224
265
  }
225
266
  else {
@@ -245,7 +286,7 @@ export class KwikIDFormsRendererComponent {
245
286
  markFormInFormsListAsCompleted(formsList, formsListCompleted) {
246
287
  for (let form of formsList) {
247
288
  if (checkObjectKeyExists(form, "hidden")) {
248
- if (!form.hidden && form.type === "form") {
289
+ if (!form.hidden && form.type !== EFormType.HTML) {
249
290
  if (formsListCompleted.includes(form.key)) {
250
291
  form = setValueToObjectPath(form, "status", "completed");
251
292
  form = setValueToObjectPath(form, "disabled", false);
@@ -264,7 +305,7 @@ export class KwikIDFormsRendererComponent {
264
305
  markFormInFormsListAsDisabled(formsList, formsListCompleted) {
265
306
  for (let form of formsList) {
266
307
  if (checkObjectKeyExists(form, "hidden")) {
267
- if (!form.hidden && form.type === "form") {
308
+ if (!form.hidden && form.type !== EFormType.HTML) {
268
309
  if (form.status !== "completed") {
269
310
  if (checkObjectKeyExists(form, "dependentOn")) {
270
311
  const isDependent = form.dependentOn.every((r) => formsListCompleted.includes(r));
@@ -293,7 +334,7 @@ export class KwikIDFormsRendererComponent {
293
334
  for (let form of formsList) {
294
335
  if (checkObjectKeyExists(form, "hidden") &&
295
336
  !form.hidden &&
296
- form.type === "form") {
337
+ form.type !== EFormType.HTML) {
297
338
  if (checkObjectKeyExists(allFormsData, form.key)) {
298
339
  currentUserFormAllFormsData = Object.assign(Object.assign({}, currentUserFormAllFormsData), { [form.key]: allFormsData[form.key] });
299
340
  }
@@ -305,7 +346,7 @@ export class KwikIDFormsRendererComponent {
305
346
  let allFormsCompleted = true;
306
347
  for (const form of formsList) {
307
348
  if (checkObjectKeyExists(form, "hidden")) {
308
- if (!form.hidden && form.type === "form") {
349
+ if (!form.hidden && form.type !== EFormType.HTML) {
309
350
  if (form.status !== "completed") {
310
351
  allFormsCompleted = false;
311
352
  break;
@@ -318,7 +359,7 @@ export class KwikIDFormsRendererComponent {
318
359
  findActiveFormConfig(formsList) {
319
360
  const activeFormConfig = formsList.find((form) => {
320
361
  if (checkObjectKeyExists(form, "hidden")) {
321
- if (!form.hidden && form.type === "form") {
362
+ if (!form.hidden && form.type !== EFormType.HTML) {
322
363
  return form.status === "editable" && !form.disabled;
323
364
  }
324
365
  }
@@ -428,7 +469,7 @@ export class KwikIDFormsRendererComponent {
428
469
  findFormsListLength(formsList) {
429
470
  const _formsList = formsList.filter((form) => {
430
471
  if (checkObjectKeyExists(form, "type")) {
431
- if (form.type === "form") {
472
+ if (form.type !== EFormType.HTML) {
432
473
  if (checkObjectKeyExists(form, "hidden")) {
433
474
  if (!form.hidden) {
434
475
  return form;
@@ -461,6 +502,7 @@ export class KwikIDFormsRendererComponent {
461
502
  return form;
462
503
  }
463
504
  });
505
+ console.log("activeFormConfig", activeFormConfig);
464
506
  let formConfig = undefined;
465
507
  if (checkObjectKeyExists(activeFormConfig, "props")) {
466
508
  if (checkObjectKeyExists(activeFormConfig.props, "url")) {
@@ -475,11 +517,17 @@ export class KwikIDFormsRendererComponent {
475
517
  formConfig = Object.assign(Object.assign({}, activeFormConfig), formConfigFromPath);
476
518
  }
477
519
  else {
478
- if (checkObjectKeyExists(activeFormConfig, "fields")) {
479
- formConfig = activeFormConfig;
520
+ if (checkObjectKeyExists(activeFormConfig, "type") &&
521
+ activeFormConfig.type === EFormType.FORM) {
522
+ if (checkObjectKeyExists(activeFormConfig, "fields")) {
523
+ formConfig = activeFormConfig;
524
+ }
525
+ else {
526
+ console.error("No Direct URL, No Path with Base URL, No fields key found in Active Form's Config!");
527
+ }
480
528
  }
481
529
  else {
482
- console.error("No Direct URL, No Path with Base URL, No fields key found in Active Form's Config!");
530
+ console.error(`No Direct URL, No Path with Base URL, No fields key found in Active Form's Config!`);
483
531
  }
484
532
  }
485
533
  }
@@ -504,6 +552,7 @@ export class KwikIDFormsRendererComponent {
504
552
  }
505
553
  }
506
554
  }
555
+ console.log("formConfig", formConfig);
507
556
  formConfig = new Converter().updateFormConfigMiscellaneous(formConfig, {
508
557
  formsListLength: this.findFormsListLength(this.formsList)
509
558
  });
@@ -526,7 +575,6 @@ export class KwikIDFormsRendererComponent {
526
575
  * @param e any
527
576
  */
528
577
  handleOnClickApiCall(e) {
529
- this.loader = true;
530
578
  this.onClickApiCall.emit(e);
531
579
  }
532
580
  handleOnActionShowPopupForm(e, content) {
@@ -709,7 +757,7 @@ export class KwikIDFormsRendererComponent {
709
757
  const formsList = JSON.parse(JSON.stringify(this.formsList));
710
758
  for (let form of formsList) {
711
759
  if (!form.hidden &&
712
- form.type == "form" &&
760
+ form.type !== EFormType.HTML &&
713
761
  form.required &&
714
762
  form.status !== EFormsListStatus.COMPLETED) {
715
763
  this.toggleErrorNotification(true);
@@ -748,7 +796,7 @@ export class KwikIDFormsRendererComponent {
748
796
  }
749
797
  }
750
798
  /** @nocollapse */ KwikIDFormsRendererComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: KwikIDFormsRendererComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: TuiPreviewDialogService }, { token: TuiDialogService }], target: i0.ɵɵFactoryTarget.Component });
751
- /** @nocollapse */ KwikIDFormsRendererComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: KwikIDFormsRendererComponent, selector: "kwikid-forms-renderer", inputs: { stepConfig: "stepConfig", userConfig: "userConfig", formsData: "formsData", activeFormData: "activeFormData", apiCallResponse: "apiCallResponse" }, outputs: { onClickSubmit: "onClickSubmit", getFormData: "getFormData", onClickApiCall: "onClickApiCall" }, host: { listeners: { "window:resize": "windowResizeWatcher($event)" } }, viewQueries: [{ propertyName: "preview", first: true, predicate: ["preview"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div ngClass=\"kwikid-renderer\">\n <div\n ngClass=\"kwikid-layout-container\"\n *ngIf=\"!loading\"\n >\n <div\n ngClass=\"kwikid-sections-container\"\n *ngIf=\"showFormSections\"\n class=\"active\"\n [class.active]=\"showFormSections\"\n [class.mobile]=\"isMobileView\"\n >\n <kwikid-forms-list\n [showFormFields]=\"this.showFormFields\"\n [activeFormConfig]=\"this.activeFormConfig\"\n [userConfig]=\"this.userConfig\"\n [formsList]=\"this.formsList\"\n [stepConfig]=\"this.stepConfig\"\n [formsListCompleted]=\"this.formsListCompleted\"\n [isMobileView]=\"this.isMobileView\"\n (onClickSetActiveForm)=\"this.handleOnClickSetActiveForm($event)\"\n (onClickSubmitForms)=\"this.handleOnClickSubmitForms($event)\"\n ></kwikid-forms-list>\n </div>\n <div\n ngClass=\"kwikid-forms-container\"\n *ngIf=\"\n this.showForm &&\n this.showFormFields &&\n this.activeFormConfig !== undefined\n \"\n [class.active]=\"showFormFields\"\n [class.mobile]=\"isMobileView\"\n [@panelInOut]\n >\n <kwikid-form-view\n [formConfig]=\"this.activeFormConfig\"\n [allFormsData]=\"this.allFormsData\"\n [isMobileView]=\"this.isMobileView\"\n [userConfig]=\"this.userConfig\"\n [popupFormCallback]=\"this.popupFormCallback\"\n (onActionShowPopupForm)=\"\n this.handleOnActionShowPopupForm($event, content)\n \"\n (onClickGoBack)=\"this.handleOnClickGoBack($event)\"\n (onClickViewForms)=\"this.handleOnClickViewForms($event)\"\n (onClickSaveForm)=\"\n this.handleOnClickSaveForm($event, 'FORM', undefined)\n \"\n ></kwikid-form-view>\n </div>\n </div>\n</div>\n<div\n ngClass=\"kwikid-forms-renderer-loader-full_screen\"\n *ngIf=\"loader && loaderType === 'FULL_SCREEN'\"\n>\n <span class=\"loader\"></span>\n</div>\n<div\n ngClass=\"kwikid-forms-renderer-loader-center_screen\"\n *ngIf=\"loader && loaderType === 'CENTER_SCREEN'\"\n>\n <div class=\"loader-container\">\n <span class=\"loader\"></span>\n <div class=\"loader-text\">Please wait</div>\n </div>\n</div>\n<tui-push\n id=\"error-notification\"\n *tuiPush=\"showErrorNotification\"\n heading=\"Please complete the required Forms!\"\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<ng-template\n #preview\n let-preview\n>\n <tui-preview\n [rotatable]=\"false\"\n [zoomable]=\"false\"\n class=\"preview-container\"\n *ngIf=\"popupFormConfig\"\n >\n <tui-preview-title *ngIf=\"previewProperties.title !== ''\">{{\n previewProperties.title\n }}</tui-preview-title>\n\n <div class=\"kwikid-form-view-popup-container\">\n <kwikid-form-view\n [formData]=\"activePopupFormData\"\n [formConfig]=\"popupFormConfig\"\n [allFormsData]=\"allFormsData\"\n [userConfig]=\"this.userConfig\"\n [isMobileView]=\"this.isMobileView\"\n (onClickSaveForm)=\"\n this.handleOnClickSaveForm($event, 'POPUP_FORM', undefined)\n \"\n ></kwikid-form-view>\n </div>\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<ng-template\n #content\n let-context\n>\n <div class=\"kwikid-form-view-popup-container\">\n <kwikid-form-view\n [formData]=\"activePopupFormData\"\n [formConfig]=\"popupFormConfig\"\n [allFormsData]=\"allFormsData\"\n [userConfig]=\"this.userConfig\"\n [isMobileView]=\"this.isMobileView\"\n (onClickSaveForm)=\"\n this.handleOnClickSaveForm($event, 'POPUP_FORM', context)\n \"\n ></kwikid-form-view>\n </div>\n</ng-template>\n", styles: [":host{position:relative;height:100%}.kwikid-root{width:100%;height:100%}.kwikid-renderer{display:flex;flex-direction:column;justify-content:flex-start;align-items:stretch;align-content:center;width:100%;height:100%}.kwikid-layout-container{display:flex;flex-direction:row;padding:0 1rem;height:100%;justify-content:center;align-items:stretch;background:var(--tui-secondary-active);position:relative}.kwikid-sections-container{display:block;width:100%;max-width:400px;height:calc(100% - 2rem);padding:.25rem .5rem 0;border-radius:1rem;background-color:var(--tui-base-01);margin:auto 1rem auto 0;box-shadow:0 0 12px -8px var(--tui-secondary)}.kwikid-sections-container.mobile{position:absolute;top:0;left:0;z-index:5;opacity:1;visibility:visible;transition:all 1s;height:100%;border-radius:0;max-width:unset}.kwikid-forms-container{display:block;width:100%;max-width:50%;margin:auto 0;height:calc(100% - 2rem);padding:.25rem .5rem 0;border-radius:1rem;background-color:var(--tui-base-01);box-shadow:0 0 12px -8px var(--tui-primary)}.kwikid-forms-container.mobile{position:absolute;top:0;left:0;z-index:5;opacity:1;visibility:visible;transition:all 1s;height:100%;border-radius:0;max-width:unset}@media screen and (max-width: 600px){.kwikid-layout-container{padding:0;background:transparent}.kwikid-sections-container{position:absolute;max-width:100%;bottom:-10000px;left:-10000px;opacity:0;padding:0;visibility:hidden}.kwikid-sections-container.active{visibility:visible}.kwikid-sections-container.mobile{height:100%;opacity:1;visibility:visible;transition:all 2s;border-radius:0;box-shadow:none;top:0px;margin:0;position:absolute}.kwikid-forms-container{display:none;max-width:100%;height:100%;padding:0;border-radius:0;box-shadow:none}.kwikid-forms-container.mobile{height:100%;opacity:1;visibility:visible;transition:all 2s;border-radius:0;box-shadow:none;top:0px;margin:0;position:absolute}.kwikid-forms-container.active{display:block}}.kwikid-forms-renderer-loader-full_screen{position:absolute;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.75);display:flex;flex-direction:row;align-content:center;justify-content:center;align-items:center;z-index:100}.kwikid-forms-renderer-loader-full_screen .loader{width:48px;height:48px;border-radius:50%;display:inline-block;position:relative;border:3px solid;border-color:#fff #fff transparent;box-sizing:border-box;animation:rotation 1s linear infinite}.kwikid-forms-renderer-loader-full_screen .loader:after{content:\"\";box-sizing:border-box;position:absolute;left:0;right:0;top:0;bottom:0;margin:auto;border:3px solid;border-color:transparent var(--tui-primary) var(--tui-primary);width:24px;height:24px;border-radius:50%;animation:rotationBack .5s linear infinite;transform-origin:center center}@keyframes rotation{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes rotationBack{0%{transform:rotate(0)}to{transform:rotate(-360deg)}}.kwikid-forms-renderer-loader-full_screen .t-loader{display:none!important}.kwikid-forms-renderer-loader-center_screen{position:absolute;top:0;left:0;width:100%;height:100%;background:rgba(211,211,211,.5);display:flex;flex-direction:row;align-content:center;justify-content:center;align-items:center;grid-gap:1rem;gap:1rem;z-index:100}.kwikid-forms-renderer-loader-center_screen .loader-container{display:flex;flex-direction:row;align-content:center;justify-content:center;align-items:center;padding:2em 1.5em;grid-gap:1rem;gap:1rem;background-color:#fff;box-shadow:#959da533 0 8px 24px;border-radius:.5rem}.kwikid-forms-renderer-loader-center_screen .loader-container .loader{width:28px;height:28px;border-radius:50%;display:inline-block;position:relative;border:3px solid;box-sizing:border-box;border-color:var(--tui-primary) transparent transparent;animation:rotation 1s ease-out infinite}@keyframes rotation{0%{transform:rotate(0);animation-timing-function:ease-in}25%{animation-timing-function:linear}50%{transform:rotate(180deg);animation-timing-function:ease-out}75%{animation-timing-function:linear}to{transform:rotate(360deg);animation-timing-function:ease-in}}.kwikid-forms-renderer-loader-center_screen .loader-container .loader-text{font-size:1rem;color:#000;margin:0}.kwikid-forms-renderer-loader-center_screen .t-loader{display:none!important}#error-notification{background-color:var(--tui-error-fill);color:#fff!important}#error-notification .t-top{color:#fff!important}#error-notification .t-close{color:#fff!important}.preview-container{display:flex!important;flex-grow:1!important;flex-direction:column!important;align-content:center!important;justify-content:space-between!important;align-items:stretch!important}.preview-container .preview-iframe{width:100vw;height:100vh}.preview-container .preview-unavailable{display:flex;flex-direction:column;align-content:center;justify-content:center;align-items:center;grid-gap:1rem;grid-gap:1.4rem;gap:1.4rem;color:#fff;font-size:1.2rem;top:50%;left:50%;width:100%;height:100vh}.kwikid-form-view-popup-container{border-radius:1rem;background:var(--tui-base-01)}\n"], components: [{ type: i1.KwikIDFormsListComponent, selector: "kwikid-forms-list", inputs: ["showFormFields", "userConfig", "stepConfig", "activeFormConfig", "formsList", "formsListCompleted", "isMobileView"], outputs: ["onClickSetActiveForm", "onClickHideFormsList", "onClickSubmitForms"] }, { type: i2.KwikIDFormViewComponent, selector: "kwikid-form-view", inputs: ["formConfig", "formData", "isMobileView", "allFormsData", "userConfig", "popupFormCallback"], outputs: ["onClickGoBack", "onClickViewForms", "onClickSaveForm", "onClickApiCall", "onActionShowPopupForm"] }, { type: i3.TuiPushComponent, selector: "tui-push", inputs: ["heading", "type", "timestamp"], outputs: ["close"] }, { type: i4.TuiSvgComponent, selector: "tui-svg", inputs: ["src"] }, { type: i5.TuiPreviewComponent, selector: "tui-preview", inputs: ["zoomable", "rotatable"] }, { type: i5.TuiPreviewTitleComponent, selector: "tui-preview-title" }, { type: i4.TuiButtonComponent, selector: "button[tuiButton], button[tuiIconButton], a[tuiButton], a[tuiIconButton]", inputs: ["appearance", "disabled", "icon", "iconRight", "shape", "showLoader", "size"] }], directives: [{ type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.TuiPushAlertDirective, selector: "[tuiPush]", inputs: ["tuiPush"] }, { type: i3.TuiPushDirective, selector: "tui-push" }, { type: i5.TuiPreviewActionDirective, selector: "[tuiPreviewAction]" }], animations: [
799
+ /** @nocollapse */ KwikIDFormsRendererComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: KwikIDFormsRendererComponent, selector: "kwikid-forms-renderer", inputs: { stepConfig: "stepConfig", userConfig: "userConfig", formsData: "formsData", activeFormData: "activeFormData", apiCallResponse: "apiCallResponse" }, outputs: { onClickSubmit: "onClickSubmit", getFormData: "getFormData", onClickApiCall: "onClickApiCall" }, host: { listeners: { "window:resize": "windowResizeWatcher($event)" } }, viewQueries: [{ propertyName: "preview", first: true, predicate: ["preview"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div ngClass=\"kwikid-renderer\">\n <div\n ngClass=\"kwikid-layout-container\"\n *ngIf=\"!loading\"\n >\n <div\n ngClass=\"kwikid-sections-container\"\n *ngIf=\"showFormSections\"\n class=\"active\"\n [class.active]=\"showFormSections\"\n [class.mobile]=\"isMobileView\"\n >\n <kwikid-forms-list\n [showFormFields]=\"this.showFormFields\"\n [activeFormConfig]=\"this.activeFormConfig\"\n [userConfig]=\"this.userConfig\"\n [formsList]=\"this.formsList\"\n [stepConfig]=\"this.stepConfig\"\n [formsListCompleted]=\"this.formsListCompleted\"\n [isMobileView]=\"this.isMobileView\"\n (onClickSetActiveForm)=\"this.handleOnClickSetActiveForm($event)\"\n (onClickSubmitForms)=\"this.handleOnClickSubmitForms($event)\"\n ></kwikid-forms-list>\n </div>\n <div\n ngClass=\"kwikid-forms-container\"\n *ngIf=\"\n this.showForm &&\n this.showFormFields &&\n this.activeFormConfig !== undefined\n \"\n [class.active]=\"showFormFields\"\n [class.mobile]=\"isMobileView\"\n [@panelInOut]\n >\n <kwikid-form-view\n *ngIf=\"this.activeFormConfig.type === 'FORM'\"\n [formConfig]=\"this.activeFormConfig\"\n [allFormsData]=\"this.allFormsData\"\n [isMobileView]=\"this.isMobileView\"\n [userConfig]=\"this.userConfig\"\n [popupFormCallback]=\"this.popupFormCallback\"\n [apiCallResponse]=\"this.apiCallResponse\"\n (onClickApiCall)=\"handleOnClickApiCall($event)\"\n (onActionShowPopupForm)=\"\n this.handleOnActionShowPopupForm($event, content)\n \"\n (onClickGoBack)=\"this.handleOnClickGoBack($event)\"\n (onClickViewForms)=\"this.handleOnClickViewForms($event)\"\n (onClickSaveForm)=\"\n this.handleOnClickSaveForm($event, 'FORM', undefined)\n \"\n ></kwikid-form-view>\n </div>\n </div>\n</div>\n\n<kwikui-loader\n [loaderText]=\"'Please wait'\"\n [showLoader]=\"loader\"\n [fullscreen]=\"true\"\n></kwikui-loader>\n\n<tui-push\n id=\"error-notification\"\n *tuiPush=\"showErrorNotification\"\n heading=\"Please complete the required Forms!\"\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<ng-template\n #preview\n let-preview\n>\n <tui-preview\n [rotatable]=\"false\"\n [zoomable]=\"false\"\n class=\"preview-container\"\n *ngIf=\"popupFormConfig\"\n >\n <tui-preview-title *ngIf=\"previewProperties.title !== ''\">{{\n previewProperties.title\n }}</tui-preview-title>\n\n <div class=\"kwikid-form-view-popup-container\">\n <kwikid-form-view\n [formData]=\"activePopupFormData\"\n [formConfig]=\"popupFormConfig\"\n [allFormsData]=\"allFormsData\"\n [userConfig]=\"this.userConfig\"\n [isMobileView]=\"this.isMobileView\"\n [apiCallResponse]=\"this.apiCallResponse\"\n (onClickApiCall)=\"handleOnClickApiCall($event)\"\n (onClickSaveForm)=\"\n this.handleOnClickSaveForm($event, 'POPUP_FORM', undefined)\n \"\n ></kwikid-form-view>\n </div>\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<ng-template\n #content\n let-context\n>\n <div class=\"kwikid-form-view-popup-container\">\n <kwikid-form-view\n [formData]=\"activePopupFormData\"\n [formConfig]=\"popupFormConfig\"\n [allFormsData]=\"allFormsData\"\n [userConfig]=\"this.userConfig\"\n [isMobileView]=\"this.isMobileView\"\n [apiCallResponse]=\"this.apiCallResponse\"\n (onClickApiCall)=\"handleOnClickApiCall($event)\"\n (onClickSaveForm)=\"\n this.handleOnClickSaveForm($event, 'POPUP_FORM', context)\n \"\n ></kwikid-form-view>\n </div>\n</ng-template>\n", styles: [":host{position:relative;height:100%}.kwikid-root{width:100%;height:100%}.kwikid-renderer{display:flex;flex-direction:column;justify-content:flex-start;align-items:stretch;align-content:center;width:100%;height:100%}.kwikid-layout-container{display:flex;flex-direction:row;padding:0 1rem;height:100%;justify-content:center;align-items:stretch;background:var(--tui-secondary-active);position:relative}.kwikid-sections-container{display:block;width:100%;max-width:400px;height:calc(100% - 2rem);padding:.25rem .5rem 0;border-radius:1rem;background-color:var(--tui-base-01);margin:auto 1rem auto 0;box-shadow:0 0 12px -8px var(--tui-secondary)}.kwikid-sections-container.mobile{position:absolute;top:0;left:0;z-index:5;opacity:1;visibility:visible;transition:all 1s;height:100%;border-radius:0;max-width:unset}.kwikid-forms-container{display:block;width:100%;max-width:50%;margin:auto 0;height:calc(100% - 2rem);padding:.25rem .5rem 0;border-radius:1rem;background-color:var(--tui-base-01);box-shadow:0 0 12px -8px var(--tui-primary)}.kwikid-forms-container.mobile{position:absolute;top:0;left:0;z-index:5;opacity:1;visibility:visible;transition:all 1s;height:100%;border-radius:0;max-width:unset}@media screen and (max-width: 600px){.kwikid-layout-container{padding:0;background:transparent}.kwikid-sections-container{position:absolute;max-width:100%;bottom:-10000px;left:-10000px;opacity:0;padding:0;visibility:hidden}.kwikid-sections-container.active{visibility:visible}.kwikid-sections-container.mobile{height:100%;opacity:1;visibility:visible;transition:all 2s;border-radius:0;box-shadow:none;top:0px;margin:0;position:absolute}.kwikid-forms-container{display:none;max-width:100%;height:100%;padding:0;border-radius:0;box-shadow:none}.kwikid-forms-container.mobile{height:100%;opacity:1;visibility:visible;transition:all 2s;border-radius:0;box-shadow:none;top:0px;margin:0;position:absolute}.kwikid-forms-container.active{display:block}}#error-notification{background-color:var(--tui-error-fill);color:#fff!important}#error-notification .t-top{color:#fff!important}#error-notification .t-close{color:#fff!important}.preview-container{display:flex!important;flex-grow:1!important;flex-direction:column!important;align-content:center!important;justify-content:space-between!important;align-items:stretch!important}.preview-container .preview-iframe{width:100vw;height:100vh}.preview-container .preview-unavailable{display:flex;flex-direction:column;align-content:center;justify-content:center;align-items:center;grid-gap:1rem;grid-gap:1.4rem;gap:1.4rem;color:#fff;font-size:1.2rem;top:50%;left:50%;width:100%;height:100vh}.kwikid-form-view-popup-container{border-radius:1rem;background:var(--tui-base-01)}\n"], components: [{ type: i1.KwikIDFormsListComponent, selector: "kwikid-forms-list", inputs: ["showFormFields", "userConfig", "stepConfig", "activeFormConfig", "formsList", "formsListCompleted", "isMobileView"], outputs: ["onClickSetActiveForm", "onClickHideFormsList", "onClickSubmitForms"] }, { type: i2.KwikIDFormViewComponent, selector: "kwikid-form-view", inputs: ["formConfig", "formData", "isMobileView", "allFormsData", "userConfig", "apiCallResponse", "popupFormCallback"], outputs: ["onClickGoBack", "onClickViewForms", "onClickSaveForm", "onClickApiCall", "onActionShowPopupForm"] }, { type: i3.KwikUILoaderComponent, selector: "kwikui-loader", inputs: ["id", "loaderText", "showLoader", "fullscreen", "styles", "class"] }, { type: i4.TuiPushComponent, selector: "tui-push", inputs: ["heading", "type", "timestamp"], outputs: ["close"] }, { type: i5.TuiSvgComponent, selector: "tui-svg", inputs: ["src"] }, { type: i6.TuiPreviewComponent, selector: "tui-preview", inputs: ["zoomable", "rotatable"] }, { type: i6.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"] }], directives: [{ type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.TuiPushAlertDirective, selector: "[tuiPush]", inputs: ["tuiPush"] }, { type: i4.TuiPushDirective, selector: "tui-push" }, { type: i6.TuiPreviewActionDirective, selector: "[tuiPreviewAction]" }], animations: [
752
800
  trigger("panelInOut", [
753
801
  transition(":enter", [
754
802
  style({ transform: "translateY(100%)" }),
@@ -834,10 +882,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
834
882
  ])
835
883
  ]
836
884
  }]
837
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i5.TuiPreviewDialogService, decorators: [{
885
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i6.TuiPreviewDialogService, decorators: [{
838
886
  type: Inject,
839
887
  args: [TuiPreviewDialogService]
840
- }] }, { type: i4.TuiDialogService, decorators: [{
888
+ }] }, { type: i5.TuiDialogService, decorators: [{
841
889
  type: Inject,
842
890
  args: [TuiDialogService]
843
891
  }] }]; }, propDecorators: { windowResizeWatcher: [{
@@ -863,4 +911,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
863
911
  }], onClickApiCall: [{
864
912
  type: Output
865
913
  }], fetchFormConfig: [], convertFormListConfig: [], assignSequenceNoToForm: [], findCompletedFormsList: [], markFormInFormsListAsCompleted: [], markFormInFormsListAsDisabled: [], filterAllFormsData: [], checkIfFormsStatusCompleted: [], findActiveFormConfig: [], updateFormsList: [], showPreview: [], formHide: [], formShow: [], findFormsListLength: [], handleOnClickSetActiveForm: [], handleOnActionShowPopupForm: [], handleOnClickSaveForm: [], handleOnClickGoBack: [], handleOnClickSubmitForms: [] } });
866
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva3dpa2lkLWZvcm1zL3NyYy9saWIvcmVuZGVyZXIvcmVuZGVyZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva3dpa2lkLWZvcm1zL3NyYy9saWIvcmVuZGVyZXIvcmVuZGVyZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMxRSxPQUFPLEVBRUwsU0FBUyxFQUVULFlBQVksRUFDWixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEVBR04sU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2xFLE9BQU8sRUFBb0IsZ0JBQWdCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxJQUFJLEVBQ0osTUFBTSxFQUdOLG9CQUFvQixFQUNwQixpQkFBaUIsRUFDakIsWUFBWSxFQUNaLGVBQWUsRUFDZixTQUFTLEVBQ1QsWUFBWSxFQUNaLG9CQUFvQixFQUNyQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDbEYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFFM0YsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdkUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEUsT0FB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QUFRLEVBQUU7Z0NBQ25CLEtBQUssQ0FBQyxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxDQUFDO2dDQUN4QyxPQUFPLENBQUMsR0FBRyxDQUFDOzZCQUNiLENBQUM7NEJBQ0YsVUFBVSxDQUFDLFFBQVEsRUFBRTtnQ0FDbkIsT0FBTyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDOzZCQUN2RCxDQUFDO3lCQUNILENBQUM7cUJBQ0g7aUJBQ0Y7OzBCQStGSSxNQUFNOzJCQUFDLHVCQUF1Qjs7MEJBRTlCLE1BQU07MkJBQUMsZ0JBQWdCOzRDQTdGMUIsbUJBQW1CO3NCQURsQixZQUFZO3VCQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkF3QmhDLE9BQU87c0JBRGYsU0FBUzt1QkFBQyxTQUFTO2dCQUtwQixVQUFVO3NCQURULEtBQUs7Z0JBSU4sVUFBVTtzQkFEVCxLQUFLO2dCQUlOLFNBQVM7c0JBRFIsS0FBSztnQkFJTixjQUFjO3NCQURiLEtBQUs7Z0JBSU4sZUFBZTtzQkFEZCxLQUFLO2dCQUlOLGFBQWE7c0JBRFosTUFBTTtnQkFJUCxXQUFXO3NCQURWLE1BQU07Z0JBSVAsY0FBYztzQkFEYixNQUFNO2dCQTZHRCxlQUFlLE1Bd0NyQixxQkFBcUIsTUFrRHJCLHNCQUFzQixNQWdCdEIsc0JBQXNCLE1BaUJ0Qiw4QkFBOEIsTUF5QjlCLDZCQUE2QixNQWlDN0Isa0JBQWtCLE1Bc0JsQiwyQkFBMkIsTUFxQjNCLG9CQUFvQixNQVlkLGVBQWUsTUE4RXJCLFdBQVcsTUFnQ1gsUUFBUSxNQU9SLFFBQVEsTUFrQ1IsbUJBQW1CLE1BNkJiLDBCQUEwQixNQXlHaEMsMkJBQTJCLE1BMEYzQixxQkFBcUIsTUErQ3JCLG1CQUFtQixNQWdFYix3QkFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhbmltYXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciB9IGZyb20gXCJAYW5ndWxhci9hbmltYXRpb25zXCI7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgVHVpUHJldmlld0RpYWxvZ1NlcnZpY2UgfSBmcm9tIFwiQHRhaWdhLXVpL2FkZG9uLXByZXZpZXdcIjtcbmltcG9ydCB7IFR1aURpYWxvZ0NvbnRleHQsIFR1aURpYWxvZ1NlcnZpY2UgfSBmcm9tIFwiQHRhaWdhLXVpL2NvcmVcIjtcbmltcG9ydCB7XG4gIEFjdGlvbixcbiAgQ29uZGl0aW9uLFxuICBSdWxlLFxuICBTb3VyY2UsXG4gIFRBY3Rpb24sXG4gIFRSdWxlLFxuICBjaGVja09iamVjdEtleUV4aXN0cyxcbiAgZ2V0T2JqZWN0RGVlcENvcHksXG4gIGlzRW1wdHlWYWx1ZSxcbiAgaXNOb3RFbXB0eVZhbHVlLFxuICBsb2dNZXRob2QsXG4gIG1lcmdlT2JqZWN0cyxcbiAgc2V0VmFsdWVUb09iamVjdFBhdGhcbn0gZnJvbSBcImt3aWtpZC10b29sa2l0XCI7XG5pbXBvcnQgeyBDb252ZXJ0ZXIgfSBmcm9tIFwiLi9jb25maWctY29udmVydGVyLmhlbHBlclwiO1xuaW1wb3J0IHsgRUFjdGlvbktleSB9IGZyb20gXCIuL2Zvcm0tdmlldy9kZWZpbml0aW9ucy9mb3JtLXZpZXcuYWN0aW9ucy5kZWZpbml0aW9uXCI7XG5pbXBvcnQgeyBFRm9ybVZpZXdHb0JhY2tNb2RlIH0gZnJvbSBcIi4vZm9ybS12aWV3L2RlZmluaXRpb25zL2Zvcm0tdmlldy5jb21tb25zLmRlZmluaXRpb25cIjtcbmltcG9ydCB7IFRUcmlnZ2VyIH0gZnJvbSBcIi4vZm9ybS12aWV3L2RlZmluaXRpb25zL2Zvcm0tdmlldy50cmlnZ2Vycy5kZWZpbml0aW9uXCI7XG5pbXBvcnQgeyBFRm9ybXNMaXN0U3RhdHVzIH0gZnJvbSBcIi4vZm9ybXMtbGlzdC9mb3Jtcy1saXN0LmRlZmluaXRpb25zXCI7XG5pbXBvcnQgeyBFUmVuZGVyZXJBY3Rpb25LZXkgfSBmcm9tIFwiLi9yZW5kZXJlci5hY3Rpb25zLmRlZmluaXRpb25zXCI7XG5pbXBvcnQgeyBnZXRGb3JtQ29uZmlnQnlLZXkgfSBmcm9tIFwiLi9yZW5kZXJlci5oZWxwZXJcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImt3aWtpZC1mb3Jtcy1yZW5kZXJlclwiLFxuICB0ZW1wbGF0ZVVybDogXCIuL3JlbmRlcmVyLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogW1wiLi9yZW5kZXJlci5jb21wb25lbnQuc2Nzc1wiXSxcbiAgYW5pbWF0aW9uczogW1xuICAgIHRyaWdnZXIoXCJwYW5lbEluT3V0XCIsIFtcbiAgICAgIHRyYW5zaXRpb24oXCI6ZW50ZXJcIiwgW1xuICAgICAgICBzdHlsZSh7IHRyYW5zZm9ybTogXCJ0cmFuc2xhdGVZKDEwMCUpXCIgfSksXG4gICAgICAgIGFuaW1hdGUoMTUwKVxuICAgICAgXSksXG4gICAgICB0cmFuc2l0aW9uKFwiOmxlYXZlXCIsIFtcbiAgICAgICAgYW5pbWF0ZSgxMDAsIHN0eWxlKHsgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZVkoMTAwJSlcIiB9KSlcbiAgICAgIF0pXG4gICAgXSlcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBLd2lrSURGb3Jtc1JlbmRlcmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICAvLyBUaGUgZmluYWwgdmFsdWUgc2hvdWxkIGJlIHByb3ZpZGVkIHRvIHNlcnZpY2UsIHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQgaW4gYWxsIGNvbXBvbmVudHNcbiAgQEhvc3RMaXN0ZW5lcihcIndpbmRvdzpyZXNpemVcIiwgW1wiJGV2ZW50XCJdKVxuICB3aW5kb3dSZXNpemVXYXRjaGVyKCkge1xuICAgIGlmICh0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGggPCA2MDApIHtcbiAgICAgIGlmICh0aGlzLnNob3dGb3JtKSB7XG4gICAgICAgIHRoaXMuc2hvd0Zvcm1TZWN0aW9ucyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNob3dGb3JtRmllbGRzID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2hvd0Zvcm1TZWN0aW9ucyA9IHRydWU7XG4gICAgICAgIHRoaXMuc2hvd0Zvcm1GaWVsZHMgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaXNNb2JpbGVWaWV3ID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuc2hvd0Zvcm0pIHtcbiAgICAgICAgdGhpcy5zaG93Rm9ybVNlY3Rpb25zID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zaG93Rm9ybUZpZWxkcyA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNob3dGb3JtU2VjdGlvbnMgPSB0cnVlO1xuICAgICAgICB0aGlzLnNob3dGb3JtRmllbGRzID0gZmFsc2U7XG4gICAgICB9XG4gICAgICB0aGlzLmlzTW9iaWxlVmlldyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIEBWaWV3Q2hpbGQoXCJwcmV2aWV3XCIpXG4gIHJlYWRvbmx5IHByZXZpZXc6IFRlbXBsYXRlUmVmPFR1aURpYWxvZ0NvbnRleHQ8dm9pZD4+O1xuICBwcml2YXRlIHByZXZpZXdEaWFsb2dSZWY6IGFueTtcblxuICBASW5wdXQoKVxuICBzdGVwQ29uZmlnOiBhbnk7XG5cbiAgQElucHV0KClcbiAgdXNlckNvbmZpZzogYW55O1xuXG4gIEBJbnB1dCgpXG4gIGZvcm1zRGF0YTogYW55ID0ge307XG5cbiAgQElucHV0KClcbiAgYWN0aXZlRm9ybURhdGE6IGFueSA9IHt9O1xuXG4gIEBJbnB1dCgpXG4gIGFwaUNhbGxSZXNwb25zZTogYW55ID0ge307XG5cbiAgQE91dHB1dCgpXG4gIG9uQ2xpY2tTdWJtaXQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQE91dHB1dCgpXG4gIGdldEZvcm1EYXRhOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBPdXRwdXQoKVxuICBvbkNsaWNrQXBpQ2FsbDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIGxvYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xuICBsb2FkZXJUeXBlID0gXCJDRU5URVJfU0NSRUVOXCI7XG5cbiAgc2hvd0Vycm9yTm90aWZpY2F0aW9uOiBib29sZWFuID0gZmFsc2U7XG4gIHRvZ2dsZUVycm9yTm90aWZpY2F0aW9uKHNob3cpIHtcbiAgICB0aGlzLnNob3dFcnJvck5vdGlmaWNhdGlvbiA9IHNob3c7XG4gIH1cblxuICBhY3RpdmVQb3B1cEZvcm1EYXRhOiBhbnkgPSB7fTtcbiAgcG9wdXBGb3JtQ2FsbGJhY2s6IGFueSA9IHt9O1xuICBhY3RpdmVGb3JtQ29uZmlnOiBhbnk7XG4gIGFjdGl2ZUZvcm1GaWVsZHM6IGFueVtdO1xuICBhbGxGb3Jtc0RhdGE6IGFueSA9IHt9O1xuICBhbGxGb3Jtc1N1Ym1pdHRlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBmb3Jtc0xpc3Q6IGFueVtdID0gW107XG4gIGZvcm1zTGlzdENvbXBsZXRlZDogc3RyaW5nW107XG4gIGlzTW9iaWxlVmlldzogYm9vbGVhbiA9IGZhbHNlO1xuICBwcmV2aWV3UHJvcGVydGllczogYW55ID0ge1xuICAgIGh0bWw6IHtcbiAgICAgIGJlZm9yZTogXCJcIixcbiAgICAgIGFmdGVyOiBcIlwiXG4gICAgfSxcbiAgICBpZnJhbWU6IHtcbiAgICAgIHNyYzogXCJcIixcbiAgICAgIHRpdGxlOiBcIlwiXG4gICAgfSxcbiAgICBwb3B1cEZvcm1LZXk6IFwiXCIsXG4gICAgdGl0bGU6IFwiXCIsXG4gICAgdW5hdmFpbGFibGU6IGZhbHNlXG4gIH07XG4gIHBvcHVwRm9ybUNvbmZpZzogYW55ID0ge307XG5cbiAgLy8gZGlzcGxheSBmb3JtcyBhbmQgbGlzdCBjb25kaXRpb25hbGx5XG4gIHNob3dGb3JtOiBib29sZWFuID0gZmFsc2U7XG4gIHNob3dGb3JtRmllbGRzOiBib29sZWFuID0gdHJ1ZTtcbiAgc2hvd0Zvcm1TZWN0aW9uczogYm9vbGVhbiA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBob3N0RWxlbWVudDogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQEluamVjdChUdWlQcmV2aWV3RGlhbG9nU2VydmljZSlcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByZXZpZXdEaWFsb2dTZXJ2aWNlOiBUdWlQcmV2aWV3RGlhbG9nU2VydmljZSxcbiAgICBASW5qZWN0KFR1aURpYWxvZ1NlcnZpY2UpIHByaXZhdGUgcmVhZG9ubHkgZGlhbG9nczogVHVpRGlhbG9nU2VydmljZVxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG5cbiAgICB0aGlzLnNldExvYWRlclR5cGUoKTtcblxuICAgIGNvbnN0IGZvcm1TdGVwS2V5ID0gdGhpcy5zdGVwQ29uZmlnPy5mb3JtPy5rZXkgPz8gdW5kZWZpbmVkO1xuXG4gICAgaWYgKFxuICAgICAgZm9ybVN0ZXBLZXkgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHModGhpcy51c2VyQ29uZmlnLnVzZXJGb3JtRmllbGRzLCBmb3JtU3RlcEtleSlcbiAgICApIHtcbiAgICAgIHRoaXMuZm9ybXNMaXN0ID0gdGhpcy51c2VyQ29uZmlnLnVzZXJGb3JtRmllbGRzW2Zvcm1TdGVwS2V5XTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodGhpcy51c2VyQ29uZmlnLnVzZXJGb3JtRmllbGRzKSkge1xuICAgICAgdGhpcy5mb3Jtc0xpc3QgPSB0aGlzLnVzZXJDb25maWcudXNlckZvcm1GaWVsZHM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYHVzZXJGb3JtRmllbGRzIGRvZXNuJ3QgaGF2ZSBhIGZvcm0gZGVmaW5lZCB3aXRoIGtleTogJHtmb3JtU3RlcEtleX1gXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuaW5pdGlhbGl6ZUZvcm1zKFwiT05fSU5JVFwiKTtcbiAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGNvbnN0IHZlcmlmeUNoYW5nZSA9IChwcm9wOiBzdHJpbmcpID0+IHtcbiAgICAgIHJldHVybiBjaGFuZ2VzLmhhc093blByb3BlcnR5KHByb3ApICYmICFjaGFuZ2VzW3Byb3BdLmZpcnN0Q2hhbmdlO1xuICAgIH07XG4gICAgaWYgKHZlcmlmeUNoYW5nZShcInVzZXJDb25maWdcIikpIHtcbiAgICAgIHRoaXMudXNlckNvbmZpZyA9IGNoYW5nZXMudXNlckNvbmZpZy5jdXJyZW50VmFsdWU7XG4gICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAodmVyaWZ5Q2hhbmdlKFwiZm9ybXNEYXRhXCIpKSB7XG4gICAgICB0aGlzLmZvcm1zRGF0YSA9IGNoYW5nZXMuZm9ybXNEYXRhLmN1cnJlbnRWYWx1ZTtcblxuICAgICAgdGhpcy5pbml0aWFsaXplRm9ybXMoXCJPTl9DSEFOR0VcIik7XG4gICAgfVxuICAgIGlmICh2ZXJpZnlDaGFuZ2UoXCJhcGlDYWxsUmVzcG9uc2VcIikpIHtcbiAgICAgIHRoaXMuYXBpQ2FsbFJlc3BvbnNlID0gY2hhbmdlcy5hcGlDYWxsUmVzcG9uc2UuY3VycmVudFZhbHVlO1xuICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBzZXRMb2FkZXJUeXBlKCkge1xuICAgIHRoaXMubG9hZGVyVHlwZSA9IFwiQ0VOVEVSX1NDUkVFTlwiO1xuICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyh0aGlzLnVzZXJDb25maWcsIFwidXRpbGl0eUZsYWdzXCIpKSB7XG4gICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHModGhpcy51c2VyQ29uZmlnLnV0aWxpdHlGbGFncywgXCJsb2FkZXJUeXBlXCIpKSB7XG4gICAgICAgIHRoaXMubG9hZGVyVHlwZSA9IHRoaXMudXNlckNvbmZpZy51dGlsaXR5RmxhZ3MubG9hZGVyVHlwZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKFxuICAgICAgdGhpcy5sb2FkZXJUeXBlICE9PSBcIkZVTExfU0NSRUVOXCIgJiZcbiAgICAgIHRoaXMubG9hZGVyVHlwZSAhPT0gXCJDRU5URVJfU0NSRUVOXCJcbiAgICApIHtcbiAgICAgIHRoaXMubG9hZGVyVHlwZSA9IFwiQ0VOVEVSX1NDUkVFTlwiO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgZmV0Y2hGb3JtQ29uZmlnKHVybDogc3RyaW5nKSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHsgbWV0aG9kOiBcIkdFVFwiIH0pO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBhc3luYyBpbml0aWFsaXplRm9ybXMoZXZlbnRUeXBlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmxvYWRlciA9IHRydWU7XG5cbiAgICB0aGlzLmFsbEZvcm1zRGF0YSA9IHRoaXMuZm9ybXNEYXRhO1xuXG4gICAgYXdhaXQgdGhpcy51cGRhdGVGb3Jtc0xpc3QoKTtcblxuICAgIGlmIChcbiAgICAgIGV2ZW50VHlwZSA9PT0gXCJPTl9DSEFOR0VcIiAmJlxuICAgICAgdGhpcy5maW5kRm9ybXNMaXN0TGVuZ3RoKHRoaXMuZm9ybXNMaXN0KSA9PT0gMVxuICAgICkge1xuICAgICAgdGhpcy5oYW5kbGVPbkNsaWNrU3VibWl0Rm9ybXMobnVsbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGFuZGxlUmVzaXplKHRoaXMuZm9ybXNMaXN0KTtcblxuICAgICAgaWYgKGlzTm90RW1wdHlWYWx1ZSh0aGlzLmFjdGl2ZUZvcm1Db25maWcpKSB7XG4gICAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyh0aGlzLmFjdGl2ZUZvcm1Db25maWcsIFwidHlwZVwiKSkge1xuICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZUZvcm1Db25maWcudHlwZSA9PT0gXCJmb3JtXCIpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlT25DbGlja1NldEFjdGl2ZUZvcm0odGhpcy5hY3RpdmVGb3JtQ29uZmlnLmtleSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlT25DbGlja1NldEFjdGl2ZUZvcm0odGhpcy5hY3RpdmVGb3JtQ29uZmlnLmtleSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2hvd0Zvcm0gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zaG93Rm9ybUZpZWxkcyA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBjb252ZXJ0Rm9ybUxpc3RDb25maWcoZm9ybXNMaXN0OiBhbnlbXSk6IGFueVtdIHtcbiAgICByZXR1cm4gZm9ybXNMaXN0Lm1hcCgoZm9ybSkgPT4ge1xuICAgICAgaWYgKCFjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLCBcInR5cGVcIikpIHtcbiAgICAgICAgZm9ybS50eXBlID0gXCJmb3JtXCI7XG4gICAgICB9XG4gICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoZm9ybSwgXCJmb3JtQ29udGVudFwiKSkge1xuICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoZm9ybS5mb3JtQ29udGVudCwgXCJ1cmxcIikpIHtcbiAgICAgICAgICBmb3JtID0gc2V0VmFsdWVUb09iamVjdFBhdGgoZm9ybSwgXCJwcm9wcy51cmxcIiwgZm9ybS5mb3JtQ29udGVudC51cmwpO1xuICAgICAgICAgIGRlbGV0ZSBmb3JtW1wiZm9ybUNvbnRlbnRcIl1bXCJ1cmxcIl07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm0uZm9ybUNvbnRlbnQsIFwicGF0aFwiKSkge1xuICAgICAgICAgIGZvcm0gPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChcbiAgICAgICAgICAgIGZvcm0sXG4gICAgICAgICAgICBcInByb3BzLnBhdGhcIixcbiAgICAgICAgICAgIGZvcm0uZm9ybUNvbnRlbnQucGF0aFxuICAgICAgICAgICk7XG4gICAgICAgICAgZGVsZXRlIGZvcm1bXCJmb3JtQ29udGVudFwiXVtcInBhdGhcIl07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChpc0VtcHR5VmFsdWUoZm9ybS5mb3JtQ29udGVudCkpIHtcbiAgICAgICAgZGVsZXRlIGZvcm1bXCJmb3JtQ29udGVudFwiXTtcbiAgICAgIH1cbiAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLCBcInRpdGxlXCIpKSB7XG4gICAgICAgIGZvcm0gPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChmb3JtLCBcInByb3BzLnRpdGxlXCIsIGZvcm0udGl0bGUpO1xuICAgICAgICBkZWxldGUgZm9ybVtcInRpdGxlXCJdO1xuICAgICAgfVxuICAgICAgaWYgKCFjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLCBcImhpZGRlblwiKSkge1xuICAgICAgICBmb3JtLmhpZGRlbiA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKCFjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLCBcImRpc2FibGVkXCIpKSB7XG4gICAgICAgIGZvcm0uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmICghY2hlY2tPYmplY3RLZXlFeGlzdHMoZm9ybSwgXCJyZXF1aXJlZFwiKSkge1xuICAgICAgICBmb3JtLnJlcXVpcmVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICghY2hlY2tPYmplY3RLZXlFeGlzdHMoZm9ybSwgXCJkZXBlbmRlbnRPblwiKSkge1xuICAgICAgICBmb3JtLmRlcGVuZGVudE9uID0gW107XG4gICAgICB9XG4gICAgICByZXR1cm4gZm9ybTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOT1RFOiBUbyBiZSBkZXByZWNhdGVkLlxuICAgKiBXaHkgPyBXaWxsIGJlIGRpcmVjdGx5IGFzc2lnbmVkIHdoaWxlIGV4ZWN1dGluZyAnY2hha3JhJyBmb3IgZGVmYXVsdCBmb3JtIGNvbmZpZy5cbiAgICogQHBhcmFtIGZvcm1zTGlzdCBhbnlbXVxuICAgKiBAcGFyYW0gZm9ybXNMaXN0Q29tcGxldGVkIHN0cmluZ1tdXG4gICAqIEByZXR1cm5zIGFueVtdXG4gICAqL1xuICBAbG9nTWV0aG9kXG4gIGFzc2lnblNlcXVlbmNlTm9Ub0Zvcm0oZm9ybXNMaXN0OiBhbnlbXSk6IGFueVtdIHtcbiAgICBsZXQgc2VxdWVuY2VObyA9IDE7XG4gICAgZm9yIChsZXQgZm9ybSBvZiBmb3Jtc0xpc3QpIHtcbiAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLCBcImhpZGRlblwiKSkge1xuICAgICAgICBpZiAoIWZvcm0uaGlkZGVuICYmIGZvcm0udHlwZSA9PT0gXCJmb3JtXCIpIHtcbiAgICAgICAgICBmb3JtLnNlcXVlbmNlTm8gPSBzZXF1ZW5jZU5vKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVsZXRlIGZvcm1bXCJzZXF1ZW5jZU5vXCJdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvcm1zTGlzdDtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgZmluZENvbXBsZXRlZEZvcm1zTGlzdChhbGxGb3Jtc0RhdGE6IGFueSk6IHN0cmluZ1tdIHtcbiAgICBsZXQgZm9ybXNMaXN0Q29tcGxldGVkOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgT2JqZWN0LmtleXMoYWxsRm9ybXNEYXRhKS5tYXAoKGZvcm1LZXkpID0+IHtcbiAgICAgIGZvcm1zTGlzdENvbXBsZXRlZC5wdXNoKGZvcm1LZXkpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZvcm1zTGlzdENvbXBsZXRlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBOT1RFOiBUbyBiZSBkZXByZWNhdGVkLiBXaHkgPyBXaWxsIGJlIHJlcGxhY2VkIGJ5ICdjaGFrcmEnLlxuICAgKiBAcGFyYW0gZm9ybXNMaXN0IGFueVtdXG4gICAqIEBwYXJhbSBmb3Jtc0xpc3RDb21wbGV0ZWQgc3RyaW5nW11cbiAgICogQHJldHVybnMgYW55W11cbiAgICovXG4gIEBsb2dNZXRob2RcbiAgbWFya0Zvcm1JbkZvcm1zTGlzdEFzQ29tcGxldGVkKFxuICAgIGZvcm1zTGlzdDogYW55W10sXG4gICAgZm9ybXNMaXN0Q29tcGxldGVkOiBzdHJpbmdbXVxuICApOiBhbnlbXSB7XG4gICAgZm9yIChsZXQgZm9ybSBvZiBmb3Jtc0xpc3QpIHtcbiAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLCBcImhpZGRlblwiKSkge1xuICAgICAgICBpZiAoIWZvcm0uaGlkZGVuICYmIGZvcm0udHlwZSA9PT0gXCJmb3JtXCIpIHtcbiAgICAgICAgICBpZiAoZm9ybXNMaXN0Q29tcGxldGVkLmluY2x1ZGVzKGZvcm0ua2V5KSkge1xuICAgICAgICAgICAgZm9ybSA9IHNldFZhbHVlVG9PYmplY3RQYXRoKGZvcm0sIFwic3RhdHVzXCIsIFwiY29tcGxldGVkXCIpO1xuICAgICAgICAgICAgZm9ybSA9IHNldFZhbHVlVG9PYmplY3RQYXRoKGZvcm0sIFwiZGlzYWJsZWRcIiwgZmFsc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmb3Jtc0xpc3Q7XG4gIH1cblxuICAvKipcbiAgICogTk9URTogVG8gYmUgZGVwcmVjYXRlZC4gV2h5ID8gV2lsbCBiZSByZXBsYWNlZCBieSAnY2hha3JhJy5cbiAgICogQHBhcmFtIGZvcm1zTGlzdCBhbnlbXVxuICAgKiBAcGFyYW0gZm9ybXNMaXN0Q29tcGxldGVkIHN0cmluZ1tdXG4gICAqIEByZXR1cm5zIGFueVtdXG4gICAqL1xuICBAbG9nTWV0aG9kXG4gIG1hcmtGb3JtSW5Gb3Jtc0xpc3RBc0Rpc2FibGVkKFxuICAgIGZvcm1zTGlzdDogYW55W10sXG4gICAgZm9ybXNMaXN0Q29tcGxldGVkOiBzdHJpbmdbXVxuICApOiBhbnlbXSB7XG4gICAgZm9yIChsZXQgZm9ybSBvZiBmb3Jtc0xpc3QpIHtcbiAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLCBcImhpZGRlblwiKSkge1xuICAgICAgICBpZiAoIWZvcm0uaGlkZGVuICYmIGZvcm0udHlwZSA9PT0gXCJmb3JtXCIpIHtcbiAgICAgICAgICBpZiAoZm9ybS5zdGF0dXMgIT09IFwiY29tcGxldGVkXCIpIHtcbiAgICAgICAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLCBcImRlcGVuZGVudE9uXCIpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGlzRGVwZW5kZW50ID0gZm9ybS5kZXBlbmRlbnRPbi5ldmVyeSgocjogc3RyaW5nKSA9PlxuICAgICAgICAgICAgICAgIGZvcm1zTGlzdENvbXBsZXRlZC5pbmNsdWRlcyhyKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBpZiAoaXNEZXBlbmRlbnQpIHtcbiAgICAgICAgICAgICAgICBmb3JtID0gc2V0VmFsdWVUb09iamVjdFBhdGgoZm9ybSwgXCJzdGF0dXNcIiwgXCJlZGl0YWJsZVwiKTtcbiAgICAgICAgICAgICAgICBmb3JtID0gc2V0VmFsdWVUb09iamVjdFBhdGgoZm9ybSwgXCJkaXNhYmxlZFwiLCBmYWxzZSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm9ybSA9IHNldFZhbHVlVG9PYmplY3RQYXRoKGZvcm0sIFwic3RhdHVzXCIsIFwibG9ja2VkXCIpO1xuICAgICAgICAgICAgICAgIGZvcm0gPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChmb3JtLCBcImRpc2FibGVkXCIsIHRydWUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBmb3JtID0gc2V0VmFsdWVUb09iamVjdFBhdGgoZm9ybSwgXCJkZXBlbmRlbnRPblwiLCBbXSk7XG4gICAgICAgICAgICAgIGZvcm0gPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChmb3JtLCBcInN0YXR1c1wiLCBcImVkaXRhYmxlXCIpO1xuICAgICAgICAgICAgICBmb3JtID0gc2V0VmFsdWVUb09iamVjdFBhdGgoZm9ybSwgXCJkaXNhYmxlZFwiLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvcm1zTGlzdDtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgZmlsdGVyQWxsRm9ybXNEYXRhKGFsbEZvcm1zRGF0YTogYW55LCBmb3Jtc0xpc3Q6IGFueVtdKTogYW55IHtcbiAgICBsZXQgY3VycmVudFVzZXJGb3JtQWxsRm9ybXNEYXRhOiBhbnkgPSB7fTtcblxuICAgIGZvciAobGV0IGZvcm0gb2YgZm9ybXNMaXN0KSB7XG4gICAgICBpZiAoXG4gICAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm0sIFwiaGlkZGVuXCIpICYmXG4gICAgICAgICFmb3JtLmhpZGRlbiAmJlxuICAgICAgICBmb3JtLnR5cGUgPT09IFwiZm9ybVwiXG4gICAgICApIHtcbiAgICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGFsbEZvcm1zRGF0YSwgZm9ybS5rZXkpKSB7XG4gICAgICAgICAgY3VycmVudFVzZXJGb3JtQWxsRm9ybXNEYXRhID0ge1xuICAgICAgICAgICAgLi4uY3VycmVudFVzZXJGb3JtQWxsRm9ybXNEYXRhLFxuICAgICAgICAgICAgW2Zvcm0ua2V5XTogYWxsRm9ybXNEYXRhW2Zvcm0ua2V5XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY3VycmVudFVzZXJGb3JtQWxsRm9ybXNEYXRhO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBjaGVja0lmRm9ybXNTdGF0dXNDb21wbGV0ZWQoXG4gICAgZm9ybXNMaXN0OiBhbnksXG4gICAgZm9ybXNMaXN0Q29tcGxldGVkOiBzdHJpbmdbXVxuICApOiBhbnkge1xuICAgIGxldCBhbGxGb3Jtc0NvbXBsZXRlZDogYm9vbGVhbiA9IHRydWU7XG5cbiAgICBmb3IgKGNvbnN0IGZvcm0gb2YgZm9ybXNMaXN0KSB7XG4gICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoZm9ybSwgXCJoaWRkZW5cIikpIHtcbiAgICAgICAgaWYgKCFmb3JtLmhpZGRlbiAmJiBmb3JtLnR5cGUgPT09IFwiZm9ybVwiKSB7XG4gICAgICAgICAgaWYgKGZvcm0uc3RhdHVzICE9PSBcImNvbXBsZXRlZFwiKSB7XG4gICAgICAgICAgICBhbGxGb3Jtc0NvbXBsZXRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFsbEZvcm1zQ29tcGxldGVkO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBmaW5kQWN0aXZlRm9ybUNvbmZpZyhmb3Jtc0xpc3Q6IGFueVtdKTogYW55IHtcbiAgICBjb25zdCBhY3RpdmVGb3JtQ29uZmlnID0gZm9ybXNMaXN0LmZpbmQoKGZvcm0pID0+IHtcbiAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLCBcImhpZGRlblwiKSkge1xuICAgICAgICBpZiAoIWZvcm0uaGlkZGVuICYmIGZvcm0udHlwZSA9PT0gXCJmb3JtXCIpIHtcbiAgICAgICAgICByZXR1cm4gZm9ybS5zdGF0dXMgPT09IFwiZWRpdGFibGVcIiAmJiAhZm9ybS5kaXNhYmxlZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBhY3RpdmVGb3JtQ29uZmlnO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyB1cGRhdGVGb3Jtc0xpc3QoKSB7XG4gICAgdGhpcy5mb3Jtc0xpc3QgPSB0aGlzLmNvbnZlcnRGb3JtTGlzdENvbmZpZyh0aGlzLmZvcm1zTGlzdCk7XG5cbiAgICBmb3IgKGxldCBmb3JtIG9mIHRoaXMuZm9ybXNMaXN0KSB7XG4gICAgICBpZiAoXG4gICAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm0sIFwiZGVmYXVsdFwiKSAmJlxuICAgICAgICBpc05vdEVtcHR5VmFsdWUoZm9ybS5kZWZhdWx0KVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IHRyaWdnZXJzOiBBcnJheTxUVHJpZ2dlcj4gPSBmb3JtLmRlZmF1bHQudHJpZ2dlcnM7XG4gICAgICAgIGNvbnN0IHJ1bGVzOiBBcnJheTxUUnVsZT4gPSBmb3JtLmRlZmF1bHQucnVsZXM7XG4gICAgICAgIGNvbnN0IGFjdGlvbnM6IEFycmF5PFRBY3Rpb24+ID0gZm9ybS5kZWZhdWx0LmFjdGlvbnM7XG5cbiAgICAgICAgY29uc3QgcnVsZXNNYXBwaW5nID0gbmV3IFJ1bGUocnVsZXMsIHtcbiAgICAgICAgICBVU0VSX0NPTkZJRzogdGhpcy51c2VyQ29uZmlnLFxuICAgICAgICAgIEZPUk1TX0xJU1Q6IHRoaXMuZm9ybXNMaXN0LFxuICAgICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YVxuICAgICAgICB9KS5tYXBwaW5nKCk7XG5cbiAgICAgICAgZm9yIChsZXQgYWN0aW9uIG9mIGFjdGlvbnMpIHtcbiAgICAgICAgICBjb25zdCBjb25kaXRpb25FdmFsdWF0aW9uID0gbmV3IENvbmRpdGlvbihcbiAgICAgICAgICAgIGFjdGlvbi5jb25kaXRpb24sXG4gICAgICAgICAgICBydWxlc01hcHBpbmdcbiAgICAgICAgICApLmV2YWx1YXRlKCk7XG5cbiAgICAgICAgICBpZiAoY29uZGl0aW9uRXZhbHVhdGlvbikge1xuICAgICAgICAgICAgY29uc3QgYWN0aW9ucyA9IG5ldyBBY3Rpb24oXG4gICAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgICAgcnVsZXNNYXBwaW5nLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgRk9STVNfTElTVDogdGhpcy5mb3Jtc0xpc3QsXG4gICAgICAgICAgICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuYWxsRm9ybXNEYXRhXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHRoaXMudGFrZUFjdGlvbi5iaW5kKHRoaXMpXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBhd2FpdCBhY3Rpb25zLmV4ZWN1dGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICghY2hlY2tPYmplY3RLZXlFeGlzdHMoZm9ybSwgXCJoaWRkZW5cIikpIHtcbiAgICAgICAgICBmb3JtLmhpZGRlbiA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5mb3Jtc0xpc3QgPSB0aGlzLmFzc2lnblNlcXVlbmNlTm9Ub0Zvcm0odGhpcy5mb3Jtc0xpc3QpO1xuXG4gICAgLyoqXG4gICAgICogQmVsb3cgY29kZSBpZGVudGlmaWVzIHRoZSBhbGxGb3Jtc0RhdGEgcmVxdWlyZWQgZm9yIHRoZSBjdXJyZW50IFVzZXIgRm9ybS5cbiAgICAgKiBXaHk/IEJlY2F1c2UgYWxsRm9ybXNEYXRhIHdpbGwgYWN0dWFsbHkgY29udGFpbiB0aGUgd2hvbGUgam91cm5leSdzIGFsbFxuICAgICAqIHBvc3NpYmxlIFVzZXIgRm9ybSBzdGVwcy4gU28sIGl0IGlzIGltcG9ydGFudCB0byBzZXQgdGhlIGZvcm0gZGF0YSB3aGljaFxuICAgICAqIHRoaXMgcGFydGljdWxhciBVc2VyIEZvcm0gb25seSBoYXMgdG8gTE9DQUwgTUVUSE9EIFZhcmlhYmxlLlxuICAgICAqL1xuICAgIGNvbnN0IGN1cnJlbnRVc2VyRm9ybUFsbEZvcm1zRGF0YSA9IHRoaXMuZmlsdGVyQWxsRm9ybXNEYXRhKFxuICAgICAgdGhpcy5hbGxGb3Jtc0RhdGEsXG4gICAgICB0aGlzLmZvcm1zTGlzdFxuICAgICk7XG5cbiAgICB0aGlzLmZvcm1zTGlzdENvbXBsZXRlZCA9IHRoaXMuZmluZENvbXBsZXRlZEZvcm1zTGlzdChcbiAgICAgIGN1cnJlbnRVc2VyRm9ybUFsbEZvcm1zRGF0YVxuICAgICk7XG5cbiAgICB0aGlzLmZvcm1zTGlzdCA9IHRoaXMubWFya0Zvcm1JbkZvcm1zTGlzdEFzQ29tcGxldGVkKFxuICAgICAgdGhpcy5mb3Jtc0xpc3QsXG4gICAgICB0aGlzLmZvcm1zTGlzdENvbXBsZXRlZFxuICAgICk7XG5cbiAgICB0aGlzLmZvcm1zTGlzdCA9IHRoaXMubWFya0Zvcm1JbkZvcm1zTGlzdEFzRGlzYWJsZWQoXG4gICAgICB0aGlzLmZvcm1zTGlzdCxcbiAgICAgIHRoaXMuZm9ybXNMaXN0Q29tcGxldGVkXG4gICAgKTtcblxuICAgIHRoaXMuZm9ybXNMaXN0ID0gZ2V0T2JqZWN0RGVlcENvcHkodGhpcy5mb3Jtc0xpc3QpO1xuXG4gICAgdGhpcy5hY3RpdmVGb3JtQ29uZmlnID0gdGhpcy5maW5kQWN0aXZlRm9ybUNvbmZpZyh0aGlzLmZvcm1zTGlzdCk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIHNob3dQcmV2aWV3KHByZXZpZXdQcm9wZXJ0aWVzOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnByZXZpZXdQcm9wZXJ0aWVzID0gbWVyZ2VPYmplY3RzKFxuICAgICAgdGhpcy5wcmV2aWV3UHJvcGVydGllcyxcbiAgICAgIHByZXZpZXdQcm9wZXJ0aWVzXG4gICAgKTtcblxuICAgIGlmIChcbiAgICAgIGlzRW1wdHlWYWx1ZSh0aGlzLnByZXZpZXdQcm9wZXJ0aWVzLmlmcmFtZS5zcmMpICYmXG4gICAgICBpc0VtcHR5VmFsdWUodGhpcy5wcmV2aWV3UHJvcGVydGllcy5odG1sLmJlZm9yZSkgJiZcbiAgICAgIGlzRW1wdHlWYWx1ZSh0aGlzLnByZXZpZXdQcm9wZXJ0aWVzLmh0bWwuYWZ0ZXIpICYmXG4gICAgICBpc0VtcHR5VmFsdWUodGhpcy5wcmV2aWV3UHJvcGVydGllcy5wb3B1cEZvcm1LZXkpXG4gICAgKSB7XG4gICAgICB0aGlzLnByZXZpZXdQcm9wZXJ0aWVzLnVuYXZhaWxhYmxlID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGlzTm90RW1wdHlWYWx1ZSh0aGlzLnByZXZpZXdQcm9wZXJ0aWVzLnBvcHVwRm9ybUtleSkpIHtcbiAgICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKHRoaXMuYWN0aXZlRm9ybUNvbmZpZywgXCJwb3B1cEZvcm1zXCIpKSB7XG4gICAgICAgICAgdGhpcy5wb3B1cEZvcm1Db25maWcgPVxuICAgICAgICAgICAgdGhpcy5hY3RpdmVGb3JtQ29uZmlnLnBvcHVwRm9ybXNbXG4gICAgICAgICAgICAgIHRoaXMucHJldmlld1Byb3BlcnRpZXMucG9wdXBGb3JtS2V5XG4gICAgICAgICAgICBdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucG9wdXBGb3JtQ29uZmlnID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMucHJldmlld1Byb3BlcnRpZXMudW5hdmFpbGFibGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLnByZXZpZXdEaWFsb2dTZXJ2aWNlLm9wZW4odGhpcy5wcmV2aWV3IHx8IFwiXCIpLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBmb3JtSGlkZShmb3JtS2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBsZXQgZm9ybSA9IGdldEZvcm1Db25maWdCeUtleSh0aGlzLmZvcm1zTGlzdCwgZm9ybUtleSk7XG5cbiAgICBmb3JtID0gc2V0VmFsdWVUb09iamVjdFBhdGgoZm9ybSwgXCJoaWRkZW5cIiwgdHJ1ZSk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGZvcm1TaG93KGZvcm1LZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIGxldCBmb3JtID0gZ2V0Rm9ybUNvbmZpZ0J5S2V5KHRoaXMuZm9ybXNMaXN0LCBmb3JtS2V5KTtcblxuICAgIGZvcm0gPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChmb3JtLCBcImhpZGRlblwiLCBmYWxzZSk7XG4gIH1cblxuICBhc3luYyB0YWtlQWN0aW9uKGFjdGlvbjogYW55LCBvYmplY3Q6IGFueSkge1xuICAgIHN3aXRjaCAoYWN0aW9uLmtleSkge1xuICAgICAgY2FzZSBFUmVuZGVyZXJBY3Rpb25LZXkuRk9STV9ISURFOlxuICAgICAgICB0aGlzLmZvcm1IaWRlKGFjdGlvbi5wcm9wcy5mb3JtS2V5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVSZW5kZXJlckFjdGlvbktleS5GT1JNX1NIT1c6XG4gICAgICAgIHRoaXMuZm9ybVNob3coYWN0aW9uLnByb3BzLmZvcm1LZXkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5TRVRfVkFMVUU6XG4gICAgICAgIGNvbnN0IHNvdXJjZXMgPSBuZXcgU291cmNlKHtcbiAgICAgICAgICBVU0VSX0NPTkZJRzogdGhpcy51c2VyQ29uZmlnLFxuICAgICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmZvcm1zRGF0YVxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBzb3VyY2VWYWx1ZSA9IGF3YWl0IHNvdXJjZXMuZ2V0VmFsdWVGcm9tU291cmNlKFxuICAgICAgICAgIGFjdGlvbi5wcm9wcy52YWx1ZS5zb3VyY2VcbiAgICAgICAgKTtcbiAgICAgICAgc291cmNlcy5zZXRWYWx1ZVRvU291cmNlKGFjdGlvbi5wcm9wcy52YWx1ZS5kZXN0aW5hdGlvbiwgc291cmNlVmFsdWUpO1xuXG4gICAgICAgIHRoaXMudXNlckNvbmZpZyA9IHNvdXJjZXMub2JqZWN0LlVTRVJfQ09ORklHO1xuICAgICAgICB0aGlzLmZvcm1zRGF0YSA9IHNvdXJjZXMub2JqZWN0LkFMTF9GT1JNU19EQVRBO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgZmluZEZvcm1zTGlzdExlbmd0aChmb3Jtc0xpc3Q6IGFueVtdKTogbnVtYmVyIHtcbiAgICBjb25zdCBfZm9ybXNMaXN0ID0gZm9ybXNMaXN0LmZpbHRlcigoZm9ybSkgPT4ge1xuICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm0sIFwidHlwZVwiKSkge1xuICAgICAgICBpZiAoZm9ybS50eXBlID09PSBcImZvcm1cIikge1xuICAgICAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLCBcImhpZGRlblwiKSkge1xuICAgICAgICAgICAgaWYgKCFmb3JtLmhpZGRlbikge1xuICAgICAgICAgICAgICByZXR1cm4gZm9ybTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoZm9ybSwgXCJoaWRkZW5cIikpIHtcbiAgICAgICAgaWYgKCFmb3JtLmhpZGRlbikge1xuICAgICAgICAgIHJldHVybiBmb3JtO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gX2Zvcm1zTGlzdC5sZW5ndGg7XG4gIH1cblxuICAvKipcbiAgICogTGlicmFyeSBFdmVudCBMaXN0ZW5lcnNcbiAgICovXG5cbiAgLyoqXG4gICAqIEZvcm1MaXN0IC0gTGlzdGVucyB0byBldmVudCBvZiBvcGVuaW5nIHRoZSBGb3JtVmlldyBvZiB3aGVuIGFueSBmb3JtIGlzIGNsaWNrZWQgaW4gRm9ybUxpc3RcbiAgICogQHBhcmFtIHNlbGVjdGVkRm9ybSBzdHJpbmdcbiAgICovXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgaGFuZGxlT25DbGlja1NldEFjdGl2ZUZvcm0oc2VsZWN0ZWRGb3JtOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNob3dGb3JtID0gZmFsc2U7XG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xuXG4gICAgY29uc3QgYWN0aXZlRm9ybUNvbmZpZyA9IHRoaXMuZm9ybXNMaXN0LmZpbmQoKGZvcm0pID0+IHtcbiAgICAgIGlmIChmb3JtLmtleSA9PT0gc2VsZWN0ZWRGb3JtKSB7XG4gICAgICAgIHJldHVybiBmb3JtO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgbGV0IGZvcm1Db25maWc6IGFueSA9IHVuZGVmaW5lZDtcblxuICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhhY3RpdmVGb3JtQ29uZmlnLCBcInByb3BzXCIpKSB7XG4gICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoYWN0aXZlRm9ybUNvbmZpZy5wcm9wcywgXCJ1cmxcIikpIHtcbiAgICAgICAgY29uc3QgZm9ybUNvbmZpZ0Zyb21VcmwgPSBhd2FpdCB0aGlzLmZldGNoRm9ybUNvbmZpZyhcbiAgICAgICAgICBhY3RpdmVGb3JtQ29uZmlnLnByb3BzLnVybFxuICAgICAgICApO1xuICAgICAgICBmb3JtQ29uZmlnID0ge1xuICAgICAgICAgIC4uLmFjdGl2ZUZvcm1Db25maWcsXG4gICAgICAgICAgLi4uZm9ybUNvbmZpZ0Zyb21VcmxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGFjdGl2ZUZvcm1Db25maWcucHJvcHMsIFwicGF0aFwiKSAmJlxuICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyh0aGlzLnVzZXJDb25maWcsIFwiYmFja2VuZFwiKSAmJlxuICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyh0aGlzLnVzZXJDb25maWcuYmFja2VuZCwgXCJDT05GSUdfQkFTRV9VUkxcIilcbiAgICAgICkge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnVzZXJDb25maWc/LmJhY2tlbmQ/LkNPTkZJR19CQVNFX1VSTH0ke2FjdGl2ZUZvcm1Db25maWcucHJvcHMucGF0aH1gO1xuICAgICAgICBjb25zdCBmb3JtQ29uZmlnRnJvbVBhdGggPSBhd2FpdCB0aGlzLmZldGNoRm9ybUNvbmZpZyh1cmwpO1xuICAgICAgICBmb3JtQ29uZmlnID0ge1xuICAgICAgICAgIC4uLmFjdGl2ZUZvcm1Db25maWcsXG4gICAgICAgICAgLi4uZm9ybUNvbmZpZ0Zyb21QYXRoXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoYWN0aXZlRm9ybUNvbmZpZywgXCJmaWVsZHNcIikpIHtcbiAgICAgICAgICBmb3JtQ29uZmlnID0gYWN0aXZlRm9ybUNvbmZpZztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJObyBEaXJlY3QgVVJMLCBObyBQYXRoIHdpdGggQmFzZSBVUkwsIE5vIGZpZWxkcyBrZXkgZm91bmQgaW4gQWN0aXZlIEZvcm0ncyBDb25maWchXCJcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhhY3RpdmVGb3JtQ29uZmlnLmZvcm1Db250ZW50LCBcInVybFwiKSkge1xuICAgICAgICBjb25zdCBmb3JtQ29uZmlnRnJvbVVybCA9IGF3YWl0IHRoaXMuZmV0Y2hGb3JtQ29uZmlnKFxuICAgICAgICAgIGFjdGl2ZUZvcm1Db25maWcuZm9ybUNvbnRlbnQudXJsXG4gICAgICAgICk7XG4gICAgICAgIGZvcm1Db25maWcgPSB7XG4gICAgICAgICAgLi4uYWN0aXZlRm9ybUNvbmZpZyxcbiAgICAgICAgICAuLi5mb3JtQ29uZmlnRnJvbVVybFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoYWN0aXZlRm9ybUNvbmZpZy5mb3JtQ29udGVudCwgXCJwYXRoXCIpICYmXG4gICAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKHRoaXMudXNlckNvbmZpZywgXCJiYWNrZW5kXCIpICYmXG4gICAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKHRoaXMudXNlckNvbmZpZy5iYWNrZW5kLCBcIkNPTkZJR19CQVNFX1VSTFwiKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMudXNlckNvbmZpZz8uYmFja2VuZD8uQ09ORklHX0JBU0VfVVJMfSR7YWN0aXZlRm9ybUNvbmZpZy5wcm9wcy5wYXRofWA7XG4gICAgICAgIGNvbnN0IGZvcm1Db25maWdGcm9tUGF0aCA9IGF3YWl0IHRoaXMuZmV0Y2hGb3JtQ29uZmlnKHVybCk7XG4gICAgICAgIGZvcm1Db25maWcgPSB7XG4gICAgICAgICAgLi4uYWN0aXZlRm9ybUNvbmZpZyxcbiAgICAgICAgICAuLi5mb3JtQ29uZmlnRnJvbVBhdGhcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhhY3RpdmVGb3JtQ29uZmlnLCBcImZpZWxkc1wiKSkge1xuICAgICAgICAgIGZvcm1Db25maWcgPSBhY3RpdmVGb3JtQ29uZmlnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIk5vIERpcmVjdCBVUkwsIE5vIFBhdGggd2l0aCBCYXNlIFVSTCwgTm8gZmllbGRzIGtleSBmb3VuZCBpbiBBY3RpdmUgRm9ybSdzIENvbmZpZyFcIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3JtQ29uZmlnID0gbmV3IENvbnZlcnRlcigpLnVwZGF0ZUZvcm1Db25maWdNaXNjZWxsYW5lb3VzKGZvcm1Db25maWcsIHtcbiAgICAgIGZvcm1zTGlzdExlbmd0aDogdGhpcy5maW5kRm9ybXNMaXN0TGVuZ3RoKHRoaXMuZm9ybXNMaXN0KVxuICAgIH0pO1xuXG4gICAgdGhpcy5hY3RpdmVGb3JtQ29uZmlnID0ge1xuICAgICAgLi4uYWN0aXZlRm9ybUNvbmZpZyxcbiAgICAgIC4uLmZvcm1Db25maWdcbiAgICB9O1xuXG4gICAgdGhpcy5hY3RpdmVGb3JtQ29uZmlnO1xuXG4gICAgaWYgKHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCA8IDYwMCkge1xuICAgICAgdGhpcy5zaG93Rm9ybVNlY3Rpb25zID0gZmFsc2U7XG4gICAgICB0aGlzLnNob3dGb3JtRmllbGRzID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCA+PSA2MDApIHtcbiAgICAgIHRoaXMuc2hvd0Zvcm1TZWN0aW9ucyA9IHRydWU7XG4gICAgICB0aGlzLnNob3dGb3JtRmllbGRzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLnNob3dGb3JtID0gdHJ1ZTtcbiAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1WaWV3IC0gTGlzdGVucyB0byBldmVudCBvZiBleGVjdXRpbmcgYW4gQVBJIGNhbGwgZnJvbSB3aXRoaW4gdGhlIEZvcm1WaWV3IGFuZCBlbWl0cyAocmVhZCBhcyBwYXNzZXMpIHRoZSBzYW1lIGV2ZW50IHRvIHRoZSBsaWJyYXJ5IGNvbnN1bWVyLlxuICAgKiBAcGFyYW0gZSBhbnlcbiAgICovXG4gIGhhbmRsZU9uQ2xpY2tBcGlDYWxsKGU6IGFueSkge1xuICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcbiAgICB0aGlzLm9uQ2xpY2tBcGlDYWxsLmVtaXQoZSk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGhhbmRsZU9uQWN0aW9uU2hvd1BvcHVwRm9ybShlOiBhbnksIGNvbnRlbnQ6IGFueSkge1xuICAgIGlmIChcbiAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGUsIFwiYWN0aXZlRm9ybURhdGFcIikgJiZcbiAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGUsIFwicG9wdXBGb3JtQ29uZmlnXCIpXG4gICAgKSB7XG4gICAgICBjb25zdCBwb3B1cEZvcm1EYXRhID0geyBbdGhpcy5hY3RpdmVGb3JtQ29uZmlnLmtleV06IGUuYWN0aXZlRm9ybURhdGEgfTtcbiAgICAgIHRoaXMuYWN0aXZlUG9wdXBGb3JtRGF0YSA9IG1lcmdlT2JqZWN0cyh0aGlzLmFsbEZvcm1zRGF0YSwgcG9wdXBGb3JtRGF0YSk7XG5cbiAgICAgIHRoaXMucG9wdXBGb3JtQ29uZmlnID0gZS5wb3B1cEZvcm1Db25maWc7XG4gICAgICBjb25zdCBwb3B1cFR5cGUgPSBlPy5wb3B1cFR5cGUgPz8gXCJESUFMT0dcIjtcblxuICAgICAgc3dpdGNoIChwb3B1cFR5cGUpIHtcbiAgICAgICAgY2FzZSBcIkRJQUxPR1wiOlxuICAgICAgICAgIHRoaXMucHJldmlld0RpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nc1xuICAgICAgICAgICAgLm9wZW4oY29udGVudCwge1xuICAgICAgICAgICAgICBjbG9zZWFibGU6IHRydWUsXG4gICAgICAgICAgICAgIGRpc21pc3NpYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgc2l6ZTogXCJzXCIsXG4gICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgIG5leHQ6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3B1cEZvcm1DYWxsYmFjayA9IHtcbiAgICAgICAgICAgICAgICAgIHBvcHVwRm9ybURhdGE6IGRhdGFbXCJkYXRhXCJdLFxuICAgICAgICAgICAgICAgICAgcG9wdXBGb3JtQ29uZmlnOiBkYXRhW1wiZm9ybUNvbmZpZ1wiXSxcbiAgICAgICAgICAgICAgICAgIGFjdGl2ZUZvcm1Db25maWc6IHRoaXMuYWN0aXZlRm9ybUNvbmZpZ1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVQb3B1cEZvcm1EYXRhID0ge307XG4gICAgICAgICAgICAgICAgdGhpcy5wb3B1cEZvcm1Db25maWcgPSB7fTtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXZpZXdEaWFsb2dSZWYuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcHVwRm9ybUNhbGxiYWNrID0ge1xuICAgICAgICAgICAgICAgICAgcG9wdXBGb3JtRGF0YToge30sXG4gICAgICAgICAgICAgICAgICBwb3B1cEZvcm1Db25maWc6IHRoaXMucG9wdXBGb3JtQ29uZmlnLFxuICAgICAgICAgICAgICAgICAgYWN0aXZlRm9ybUNvbmZpZzogdGhpcy5hY3RpdmVGb3JtQ29uZmlnLFxuICAgICAgICAgICAgICAgICAgc3RvcFRhc2tFeGVjdXRpb246IHRydWVcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlUG9wdXBGb3JtRGF0YSA9IHt9O1xuICAgICAgICAgICAgICAgIHRoaXMucG9wdXBGb3JtQ29uZmlnID0ge307XG5cbiAgICAgICAgICAgICAgICBjb25zb2xlLmluZm8oXCJEaWFsb2cgZXJyb3JcIik7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5pbmZvKFwiRGlhbG9nIGNsb3NlZFwiKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJQT1BVUFwiOlxuICAgICAgICAgIHRoaXMucHJldmlld0RpYWxvZ1JlZiA9IHRoaXMucHJldmlld0RpYWxvZ1NlcnZpY2VcbiAgICAgICAgICAgIC5vcGVuKHRoaXMucHJldmlldyB8fCBcIlwiKVxuICAgICAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgIG5leHQ6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3B1cEZvcm1DYWxsYmFjayA9IHtcbiAgICAgICAgICAgICAgICAgIHBvcHVwRm9ybURhdGE6IGRhdGFbXCJkYXRhXCJdLFxuICAgICAgICAgICAgICAgICAgcG9wdXBGb3JtQ29uZmlnOiBkYXRhW1wiZm9ybUNvbmZpZ1wiXSxcbiAgICAgICAgICAgICAgICAgIGFjdGl2ZUZvcm1Db25maWc6IHRoaXMuYWN0aXZlRm9ybUNvbmZpZ1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVQb3B1cEZvcm1EYXRhID0ge307XG4gICAgICAgICAgICAgICAgdGhpcy5wb3B1cEZvcm1Db25maWcgPSB7fTtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXZpZXdEaWFsb2dSZWYuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcHVwRm9ybUNhbGxiYWNrID0ge1xuICAgICAgICAgICAgICAgICAgcG9wdXBGb3JtRGF0YToge30sXG4gICAgICAgICAgICAgICAgICBwb3B1cEZvcm1Db25maWc6IHRoaXMucG9wdXBGb3JtQ29uZmlnLFxuICAgICAgICAgICAgICAgICAgYWN0aXZlRm9ybUNvbmZpZzogdGhpcy5hY3RpdmVGb3JtQ29uZmlnLFxuICAgICAgICAgICAgICAgICAgc3RvcFRhc2tFeGVjdXRpb246IHRydWVcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlUG9wdXBGb3JtRGF0YSA9IHt9O1xuICAgICAgICAgICAgICAgIHRoaXMucG9wdXBGb3JtQ29uZmlnID0ge307XG5cbiAgICAgICAgICAgICAgICBjb25zb2xlLmluZm8oXCJQcmV2aWV3IGVycm9yXCIpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhcIlByZXZpZXcgY2xvc2VkXCIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRm9ybVZpZXcgLSBMaXN0ZW5zIHRvIGV2ZW50IG9mIGdldHRpbmcgdGhlIEFjdGl2ZSBGb3JtJ3MgRGF0YSB3aGVuIHRoZSBGb3JtIGlzIFNhdmVkIGFuZCBlbWl0cyAocmVhZCBhcyBwYXNzZXMpIHRoZSBzYW1lIGV2ZW50IHRvIHRoZSBsaWJyYXJ5IGNvbnN1bWVyLlxuICAgKiBAcGFyYW0gZSBhbnlcbiAgICovXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlT25DbGlja1NhdmVGb3JtKFxuICAgIGU6IGFueSxcbiAgICBldmVudFR5cGU6IFwiRk9STVwiIHwgXCJQT1BVUF9GT1JNXCIsXG4gICAgY29udGV4dDogdW5kZWZpbmVkXG4gICkge1xuICAgIHN3aXRjaCAoZXZlbnRUeXBlKSB7XG4gICAgICBjYXNlIFwiRk9STVwiOlxuICAgICAgICB0aGlzLmxvYWRlciA9IHRydWU7XG5cbiAgICAgICAgdGhpcy5nZXRGb3JtRGF0YS5lbWl0KHtcbiAgICAgICAgICBbdGhpcy5hY3RpdmVGb3JtQ29uZmlnLmtleV06IGVbXCJkYXRhXCJdXG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJQT1BVUF9GT1JNXCI6XG4gICAgICAgIHRoaXMucHJldmlld0RpYWxvZ1JlZi5uZXh0KGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtVmlldyAtIExpc3RlbnMgdG8gZXZlbnQgb2Ygc2hvd2luZyB0aGUgRm9ybXMgTGlzdCBpbiBNb2JpbGUgVmlldy5cbiAgICogQHBhcmFtIGUgYW55XG4gICAqL1xuICBoYW5kbGVPbkNsaWNrVmlld0Zvcm1zKGU6IGFueSkge1xuICAgIHRoaXMuc2hvd0Zvcm1TZWN0aW9ucyA9IHRydWU7XG4gICAgdGhpcy5zaG93Rm9ybSA9IGZhbHNlO1xuICAgIHRoaXMuc2hvd0Zvcm1GaWVsZHMgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIHRoZSBldmVudCBvZiBnb2luZyBiYWNrIHRvIHRoZSBwcmV2aW91cyBmb3JtIGRpcmVjdGx5IG9yIGJ5IHRhYmJpbmcsIHdpdGhvdXQgc2hvd2luZyB0aGUgZm9ybSBsaXN0IGluIG1vYmlsZSB2aWV3LlxuICAgKlxuICAgKiBQcmVyZXF1aXNpdGU6IFRoZSBjdXJyZW50IGZvcm0gY2FuIG5ldmVyIGJlIGxvY2tlZDsgaXQgc2hvdWxkIGVpdGhlciBiZSBpbiBhbiBlZGl0YWJsZSBvciBjb21wbGV0ZWQgc3RhdGUuXG4gICAqXG4gICAqIExvZ2ljOlxuICAgKiAxLiBGb3IgRElSRUNUIG1vZGUsIGZpbmQgdGhlIGNvbmZpZyBvZiB0aGUgcHJldmlvdXMgZm9ybSBzdGFydGluZyBmcm9tIHRoZSBmaXJzdCBmb3JtLCBzdWNoIHRoYXQgdGhlIHByZXZpb3VzIGZvcm0gaXMgZWRpdGFibGUgYW5kIGl0cyBzZXF1ZW5jZSBudW1iZXIgaXMgb25lIGxlc3MgdGhhbiB0aGUgY3VycmVudCBhY3RpdmUgZm9ybSdzIHNlcXVlbmNlIG51bWJlci5cbiAgICogICAgSWYgbm8gcHJldmlvdXMgZm9ybSBpcyBmb3VuZCBvciBhbGwgZm9ybXMgaGF2ZSBiZWVuIGNvbXBsZXRlZCwgc2hvdyB0aGUgZm9ybSBsaXN0LlxuICAgKiAyLiBGb3IgVEFCQkVEIG1vZGUsIGZpbmQgdGhlIGNvbmZpZyBvZiB0aGUgcHJldmlvdXMgZm9ybSBpbiB0aGUgbGlzdCwgc3VjaCB0aGF0IHRoZSBwcmV2aW91cyBmb3JtJ3Mgc2VxdWVuY2UgbnVtYmVyIGlzIGxlc3MgdGhhbiB0aGUgY3VycmVudCBhY3RpdmUgZm9ybSdzIHNlcXVlbmNlIG51bWJlciBhbmQgdGhlIGZvcm0gaXMgZWRpdGFibGUuXG4gICAqICAgIElmIG5vIHByZXZpb3VzIGZvcm0gaXMgZm91bmQsIHNob3cgdGhlIGZvcm0gbGlzdC5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGUgLSBUaGUgZXZlbnQgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIG1vZGUgdG8gZ28gYmFjayBpbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGUubW9kZSAtIFRoZSBtb2RlIG9mIGdvaW5nIGJhY2s6IERJUkVDVCBvciBUQUJCRUQuXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgQGxvZ01ldGhvZFxuICBoYW5kbGVPbkNsaWNrR29CYWNrKGU6IGFueSkge1xuICAgIHN3aXRjaCAoZS5tb2RlKSB7XG4gICAgICBjYXNlIEVGb3JtVmlld0dvQmFja01vZGUuRElSRUNUOlxuICAgICAgICBpZiAodGhpcy5hY3RpdmVGb3JtQ29uZmlnLnNlcXVlbmNlTm8gPT09IDEpIHtcbiAgICAgICAgICB0aGlzLnNob3dGb3JtU2VjdGlvbnMgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuc2hvd0Zvcm0gPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnNob3dGb3JtRmllbGRzID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuY2hlY2tJZkZvcm1zU3RhdHVzQ29tcGxldGVkKFxuICAgICAgICAgICAgICB0aGlzLmZvcm1zTGlzdCxcbiAgICAgICAgICAgICAgdGhpcy5mb3Jtc0xpc3RDb21wbGV0ZWRcbiAgICAgICAgICAgIClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0Zvcm1TZWN0aW9ucyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnNob3dGb3JtID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnNob3dGb3JtRmllbGRzID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzRm9ybUNvbmZpZ0RpcmVjdCA9IHRoaXMuZm9ybXNMaXN0LmZpbmQoKGZvcm0pID0+IHtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGZvcm0uc2VxdWVuY2VObyA9PT0gdGhpcy5hY3RpdmVGb3JtQ29uZmlnLnNlcXVlbmNlTm8gLSAxICYmXG4gICAgICAgICAgICAgICAgZm9ybS5zdGF0dXMgIT09IEVGb3Jtc0xpc3RTdGF0dXMuTE9DS0VEXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmb3JtO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKHByZXZpb3VzRm9ybUNvbmZpZ0RpcmVjdCkge1xuICAgICAgICAgICAgICB0aGlzLmhhbmRsZU9uQ2xpY2tTZXRBY3RpdmVGb3JtKHByZXZpb3VzRm9ybUNvbmZpZ0RpcmVjdC5rZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFRm9ybVZpZXdHb0JhY2tNb2RlLlRBQkJFRDpcbiAgICAgICAgY29uc3QgcHJldmlvdXNGb3JtQ29uZmlnID0gdGhpcy5mb3Jtc0xpc3QuZmluZCgoZm9ybSkgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGZvcm0uc2VxdWVuY2VObyA8IHRoaXMuYWN0aXZlRm9ybUNvbmZpZy5zZXF1ZW5jZU5vICYmXG4gICAgICAgICAgICBmb3JtLnN0YXR1cyA9PT0gRUZvcm1zTGlzdFN0YXR1cy5FRElUQUJMRVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIGZvcm07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAocHJldmlvdXNGb3JtQ29uZmlnKSB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVPbkNsaWNrU2V0QWN0aXZlRm9ybShwcmV2aW91c0Zvcm1Db25maWcua2V5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNob3dGb3JtU2VjdGlvbnMgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuc2hvd0Zvcm0gPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnNob3dGb3JtRmllbGRzID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRm9ybUxpc3QgLSBMaXN0ZW5zIHRvIGV2ZW50IG9mIHN1Ym1pdHRpbmcgYWxsIHRoZSBmb3JtcyBhbmQgbW92aW5nIG91dCBvZiB0aGUgbGlicmFyeSBhbmQgYWxzbyBoYW5kbGVzIHRoZSB2YWxpZGF0aW9uIG9mIGFsbCB0aGUgZm9ybXMuXG4gICAqIEBwYXJhbSBlIGFueVxuICAgKi9cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBoYW5kbGVPbkNsaWNrU3VibWl0Rm9ybXMoZTogYW55KSB7XG4gICAgY29uc3QgZm9ybXNMaXN0OiBhbnlbXSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5mb3Jtc0xpc3QpKTtcblxuICAgIGZvciAobGV0IGZvcm0gb2YgZm9ybXNMaXN0KSB7XG4gICAgICBpZiAoXG4gICAgICAgICFmb3JtLmhpZGRlbiAmJlxuICAgICAgICBmb3JtLnR5cGUgPT0gXCJmb3JtXCIgJiZcbiAgICAgICAgZm9ybS5yZXF1aXJlZCAmJlxuICAgICAgICBmb3JtLnN0YXR1cyAhPT0gRUZvcm1zTGlzdFN0YXR1cy5DT01QTEVURURcbiAgICAgICkge1xuICAgICAgICB0aGlzLnRvZ2dsZUVycm9yTm90aWZpY2F0aW9uKHRydWUpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLnRvZ2dsZUVycm9yTm90aWZpY2F0aW9uKGZhbHNlKTtcbiAgICAgICAgfSwgMzAwMCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLm9uQ2xpY2tTdWJtaXQuZW1pdChlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNaXNjZWxsYW5lb3VzIE1ldGhvZHNcbiAgICovXG4gIGhhbmRsZVJlc2l6ZShmb3Jtc0xpc3Q6IGFueVtdKSB7XG4gICAgaWYgKHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCA8IDYwMCkge1xuICAgICAgY29uc3QgaXNTaW5nbGVGb3JtID0gKGZvcm1zTGlzdDogYW55W10pOiBib29sZWFuID0+IHtcbiAgICAgICAgcmV0dXJuIGZvcm1zTGlzdC5sZW5ndGggPT09IDE7XG4gICAgICB9O1xuICAgICAgaWYgKCFpc1NpbmdsZUZvcm0oZm9ybXNMaXN0KSkge1xuICAgICAgICB0aGlzLnNob3dGb3JtU2VjdGlvbnMgPSB0cnVlO1xuICAgICAgICB0aGlzLnNob3dGb3JtRmllbGRzID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2hvd0Zvcm0gPSBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2hvd0Zvcm1TZWN0aW9ucyA9IHRydWU7XG4gICAgICAgIHRoaXMuc2hvd0Zvcm1GaWVsZHMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zaG93Rm9ybSA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgdGhpcy5pc01vYmlsZVZpZXcgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzTW9iaWxlVmlldyA9IGZhbHNlO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBuZ0NsYXNzPVwia3dpa2lkLXJlbmRlcmVyXCI+XG4gIDxkaXZcbiAgICBuZ0NsYXNzPVwia3dpa2lkLWxheW91dC1jb250YWluZXJcIlxuICAgICpuZ0lmPVwiIWxvYWRpbmdcIlxuICA+XG4gICAgPGRpdlxuICAgICAgbmdDbGFzcz1cImt3aWtpZC1zZWN0aW9ucy1jb250YWluZXJcIlxuICAgICAgKm5nSWY9XCJzaG93Rm9ybVNlY3Rpb25zXCJcbiAgICAgIGNsYXNzPVwiYWN0aXZlXCJcbiAgICAgIFtjbGFzcy5hY3RpdmVdPVwic2hvd0Zvcm1TZWN0aW9uc1wiXG4gICAgICBbY2xhc3MubW9iaWxlXT1cImlzTW9iaWxlVmlld1wiXG4gICAgPlxuICAgICAgPGt3aWtpZC1mb3Jtcy1saXN0XG4gICAgICAgIFtzaG93Rm9ybUZpZWxkc109XCJ0aGlzLnNob3dGb3JtRmllbGRzXCJcbiAgICAgICAgW2FjdGl2ZUZvcm1Db25maWddPVwidGhpcy5hY3RpdmVGb3JtQ29uZmlnXCJcbiAgICAgICAgW3VzZXJDb25maWddPVwidGhpcy51c2VyQ29uZmlnXCJcbiAgICAgICAgW2Zvcm1zTGlzdF09XCJ0aGlzLmZvcm1zTGlzdFwiXG4gICAgICAgIFtzdGVwQ29uZmlnXT1cInRoaXMuc3RlcENvbmZpZ1wiXG4gICAgICAgIFtmb3Jtc0xpc3RDb21wbGV0ZWRdPVwidGhpcy5mb3Jtc0xpc3RDb21wbGV0ZWRcIlxuICAgICAgICBbaXNNb2JpbGVWaWV3XT1cInRoaXMuaXNNb2JpbGVWaWV3XCJcbiAgICAgICAgKG9uQ2xpY2tTZXRBY3RpdmVGb3JtKT1cInRoaXMuaGFuZGxlT25DbGlja1NldEFjdGl2ZUZvcm0oJGV2ZW50KVwiXG4gICAgICAgIChvbkNsaWNrU3VibWl0Rm9ybXMpPVwidGhpcy5oYW5kbGVPbkNsaWNrU3VibWl0Rm9ybXMoJGV2ZW50KVwiXG4gICAgICA+PC9rd2lraWQtZm9ybXMtbGlzdD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICBuZ0NsYXNzPVwia3dpa2lkLWZvcm1zLWNvbnRhaW5lclwiXG4gICAgICAqbmdJZj1cIlxuICAgICAgICB0aGlzLnNob3dGb3JtICYmXG4gICAgICAgIHRoaXMuc2hvd0Zvcm1GaWVsZHMgJiZcbiAgICAgICAgdGhpcy5hY3RpdmVGb3JtQ29uZmlnICE9PSB1bmRlZmluZWRcbiAgICAgIFwiXG4gICAgICBbY2xhc3MuYWN0aXZlXT1cInNob3dGb3JtRmllbGRzXCJcbiAgICAgIFtjbGFzcy5tb2JpbGVdPVwiaXNNb2JpbGVWaWV3XCJcbiAgICAgIFtAcGFuZWxJbk91dF1cbiAgICA+XG4gICAgICA8a3dpa2lkLWZvcm0tdmlld1xuICAgICAgICBbZm9ybUNvbmZpZ109XCJ0aGlzLmFjdGl2ZUZvcm1Db25maWdcIlxuICAgICAgICBbYWxsRm9ybXNEYXRhXT1cInRoaXMuYWxsRm9ybXNEYXRhXCJcbiAgICAgICAgW2lzTW9iaWxlVmlld109XCJ0aGlzLmlzTW9iaWxlVmlld1wiXG4gICAgICAgIFt1c2VyQ29uZmlnXT1cInRoaXMudXNlckNvbmZpZ1wiXG4gICAgICAgIFtwb3B1cEZvcm1DYWxsYmFja109XCJ0aGlzLnBvcHVwRm9ybUNhbGxiYWNrXCJcbiAgICAgICAgKG9uQWN0aW9uU2hvd1BvcHVwRm9ybSk9XCJcbiAgICAgICAgICB0aGlzLmhhbmRsZU9uQWN0aW9uU2hvd1BvcHVwRm9ybSgkZXZlbnQsIGNvbnRlbnQpXG4gICAgICAgIFwiXG4gICAgICAgIChvbkNsaWNrR29CYWNrKT1cInRoaXMuaGFuZGxlT25DbGlja0dvQmFjaygkZXZlbnQpXCJcbiAgICAgICAgKG9uQ2xpY2tWaWV3Rm9ybXMpPVwidGhpcy5oYW5kbGVPbkNsaWNrVmlld0Zvcm1zKCRldmVudClcIlxuICAgICAgICAob25DbGlja1NhdmVGb3JtKT1cIlxuICAgICAgICAgIHRoaXMuaGFuZGxlT25DbGlja1NhdmVGb3JtKCRldmVudCwgJ0ZPUk0nLCB1bmRlZmluZWQpXG4gICAgICAgIFwiXG4gICAgICA+PC9rd2lraWQtZm9ybS12aWV3PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuPGRpdlxuICBuZ0NsYXNzPVwia3dpa2lkLWZvcm1zLXJlbmRlcmVyLWxvYWRlci1mdWxsX3NjcmVlblwiXG4gICpuZ0lmPVwibG9hZGVyICYmIGxvYWRlclR5cGUgPT09ICdGVUxMX1NDUkVFTidcIlxuPlxuICA8c3BhbiBjbGFzcz1cImxvYWRlclwiPjwvc3Bhbj5cbjwvZGl2PlxuPGRpdlxuICBuZ0NsYXNzPVwia3dpa2lkLWZvcm1zLXJlbmRlcmVyLWxvYWRlci1jZW50ZXJfc2NyZWVuXCJcbiAgKm5nSWY9XCJsb2FkZXIgJiYgbG9hZGVyVHlwZSA9PT0gJ0NFTlRFUl9TQ1JFRU4nXCJcbj5cbiAgPGRpdiBjbGFzcz1cImxvYWRlci1jb250YWluZXJcIj5cbiAgICA8c3BhbiBjbGFzcz1cImxvYWRlclwiPjwvc3Bhbj5cbiAgICA8ZGl2IGNsYXNzPVwibG9hZGVyLXRleHRcIj5QbGVhc2Ugd2FpdDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuPHR1aS1wdXNoXG4gIGlkPVwiZXJyb3Itbm90aWZpY2F0aW9uXCJcbiAgKnR1aVB1c2g9XCJzaG93RXJyb3JOb3RpZmljYXRpb25cIlxuICBoZWFkaW5nPVwiUGxlYXNlIGNvbXBsZXRlIHRoZSByZXF1aXJlZCBGb3JtcyFcIlxuICB0eXBlPVwiRXJyb3JcIlxuICAoY2xvc2UpPVwidG9nZ2xlRXJyb3JOb3RpZmljYXRpb24oZmFsc2UpXCJcbj5cbiAgPHR1aS1zdmdcbiAgICBzcmM9XCJ0dWlJY29uWENpcmNsZVwiXG4gICAgc3R5bGU9XCJjb2xvcjogI2ZmZiAhaW1wb3J0YW50XCJcbiAgPlxuICA8L3R1aS1zdmc+XG48L3R1aS1wdXNoPlxuPG5nLXRlbXBsYXRlXG4gICNwcmV2aWV3XG4gIGxldC1wcmV2aWV3XG4+XG4gIDx0dWktcHJldmlld1xuICAgIFtyb3RhdGFibGVdPVwiZmFsc2VcIlxuICAgIFt6b29tYWJsZV09XCJmYWxzZVwiXG4gICAgY2xhc3M9XCJwcmV2aWV3LWNvbnRhaW5lclwiXG4gICAgKm5nSWY9XCJwb3B1cEZvcm1Db25maWdcIlxuICA+XG4gICAgPHR1aS1wcmV2aWV3LXRpdGxlICpuZ0lmPVwicHJldmlld1Byb3BlcnRpZXMudGl0bGUgIT09ICcnXCI+e3tcbiAgICAgIHByZXZpZXdQcm9wZXJ0aWVzLnRpdGxlXG4gICAgfX08L3R1aS1wcmV2aWV3LXRpdGxlPlxuXG4gICAgPGRpdiBjbGFzcz1cImt3aWtpZC1mb3JtLXZpZXctcG9wdXAtY29udGFpbmVyXCI+XG4gICAgICA8a3dpa2lkLWZvcm0tdmlld1xuICAgICAgICBbZm9ybURhdGFdPVwiYWN0aXZlUG9wdXBGb3JtRGF0YVwiXG4gICAgICAgIFtmb3JtQ29uZmlnXT1cInBvcHVwRm9ybUNvbmZpZ1wiXG4gICAgICAgIFthbGxGb3Jtc0RhdGFdPVwiYWxsRm9ybXNEYXRhXCJcbiAgICAgICAgW3VzZXJDb25maWddPVwidGhpcy51c2VyQ29uZmlnXCJcbiAgICAgICAgW2lzTW9iaWxlVmlld109XCJ0aGlzLmlzTW9iaWxlVmlld1wiXG4gICAgICAgIChvbkNsaWNrU2F2ZUZvcm0pPVwiXG4gICAgICAgICAgdGhpcy5oYW5kbGVPbkNsaWNrU2F2ZUZvcm0oJGV2ZW50LCAnUE9QVVBfRk9STScsIHVuZGVmaW5lZClcbiAgICAgICAgXCJcbiAgICAgID48L2t3aWtpZC1mb3JtLXZpZXc+XG4gICAgPC9kaXY+XG5cbiAgICA8YnV0dG9uXG4gICAgICB0dWlJY29uQnV0dG9uXG4gICAgICB0dWlQcmV2aWV3QWN0aW9uXG4gICAgICBpY29uPVwidHVpSWNvbkNsb3NlTGFyZ2VcIlxuICAgICAgdGl0bGU9XCJDbG9zZVwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIChjbGljayk9XCJwcmV2aWV3LmNvbXBsZXRlKClcIlxuICAgID48L2J1dHRvbj5cbiAgPC90dWktcHJldmlldz5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGVcbiAgI2NvbnRlbnRcbiAgbGV0LWNvbnRleHRcbj5cbiAgPGRpdiBjbGFzcz1cImt3aWtpZC1mb3JtLXZpZXctcG9wdXAtY29udGFpbmVyXCI+XG4gICAgPGt3aWtpZC1mb3JtLXZpZXdcbiAgICAgIFtmb3JtRGF0YV09XCJhY3RpdmVQb3B1cEZvcm1EYXRhXCJcbiAgICAgIFtmb3JtQ29uZmlnXT1cInBvcHVwRm9ybUNvbmZpZ1wiXG4gICAgICBbYWxsRm9ybXNEYXRhXT1cImFsbEZvcm1zRGF0YVwiXG4gICAgICBbdXNlckNvbmZpZ109XCJ0aGlzLnVzZXJDb25maWdcIlxuICAgICAgW2lzTW9iaWxlVmlld109XCJ0aGlzLmlzTW9iaWxlVmlld1wiXG4gICAgICAob25DbGlja1NhdmVGb3JtKT1cIlxuICAgICAgICB0aGlzLmhhbmRsZU9uQ2xpY2tTYXZlRm9ybSgkZXZlbnQsICdQT1BVUF9GT1JNJywgY29udGV4dClcbiAgICAgIFwiXG4gICAgPjwva3dpa2lkLWZvcm0tdmlldz5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
914
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva3dpa2lkLWZvcm1zL3NyYy9saWIvcmVuZGVyZXIvcmVuZGVyZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva3dpa2lkLWZvcm1zL3NyYy9saWIvcmVuZGVyZXIvcmVuZGVyZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMxRSxPQUFPLEVBRUwsU0FBUyxFQUVULFlBQVksRUFDWixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEVBR04sU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2xFLE9BQU8sRUFBb0IsZ0JBQWdCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxJQUFJLEVBQ0osTUFBTSxFQUdOLG9CQUFvQixFQUNwQixpQkFBaUIsRUFDakIsWUFBWSxFQUNaLGVBQWUsRUFDZixTQUFTLEVBQ1QsWUFBWSxFQUNaLG9CQUFvQixFQUNyQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDbEYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFFM0YsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdkUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEUsT0FB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bUI7c0JBRGxCLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQXdCaEMsT0FBTztzQkFEZixTQUFTO3VCQUFDLFNBQVM7Z0JBS3BCLFVBQVU7c0JBRFQsS0FBSztnQkFJTixVQUFVO3NCQURULEtBQUs7Z0JBSU4sU0FBUztzQkFEUixLQUFLO2dCQUlOLGNBQWM7c0JBRGIsS0FBSztnQkFJTixlQUFlO3NCQURkLEtBQUs7Z0JBSU4sYUFBYTtzQkFEWixNQUFNO2dCQUlQLFdBQVc7c0JBRFYsTUFBTTtnQkFJUCxjQUFjO3NCQURiLE1BQU07Z0JBNkdELGVBQWUsTUF3Q3JCLHFCQUFxQixNQThGckIsc0JBQXNCLE1BZ0J0QixzQkFBc0IsTUFpQnRCLDhCQUE4QixNQXlCOUIsNkJBQTZCLE1BaUM3QixrQkFBa0IsTUFzQmxCLDJCQUEyQixNQXFCM0Isb0JBQW9CLE1BWWQsZUFBZSxNQThFckIsV0FBVyxNQWdDWCxRQUFRLE1BT1IsUUFBUSxNQWtDUixtQkFBbUIsTUE2QmIsMEJBQTBCLE1BcUhoQywyQkFBMkIsTUEwRjNCLHFCQUFxQixNQStDckIsbUJBQW1CLE1BZ0ViLHdCQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFuaW1hdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyIH0gZnJvbSBcIkBhbmd1bGFyL2FuaW1hdGlvbnNcIjtcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdExpc3RlbmVyLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBUdWlQcmV2aWV3RGlhbG9nU2VydmljZSB9IGZyb20gXCJAdGFpZ2EtdWkvYWRkb24tcHJldmlld1wiO1xuaW1wb3J0IHsgVHVpRGlhbG9nQ29udGV4dCwgVHVpRGlhbG9nU2VydmljZSB9IGZyb20gXCJAdGFpZ2EtdWkvY29yZVwiO1xuaW1wb3J0IHtcbiAgQWN0aW9uLFxuICBDb25kaXRpb24sXG4gIFJ1bGUsXG4gIFNvdXJjZSxcbiAgVEFjdGlvbixcbiAgVFJ1bGUsXG4gIGNoZWNrT2JqZWN0S2V5RXhpc3RzLFxuICBnZXRPYmplY3REZWVwQ29weSxcbiAgaXNFbXB0eVZhbHVlLFxuICBpc05vdEVtcHR5VmFsdWUsXG4gIGxvZ01ldGhvZCxcbiAgbWVyZ2VPYmplY3RzLFxuICBzZXRWYWx1ZVRvT2JqZWN0UGF0aFxufSBmcm9tIFwia3dpa2lkLXRvb2xraXRcIjtcbmltcG9ydCB7IENvbnZlcnRlciB9IGZyb20gXCIuL2NvbmZpZy1jb252ZXJ0ZXIuaGVscGVyXCI7XG5pbXBvcnQgeyBFQWN0aW9uS2V5IH0gZnJvbSBcIi4vZm9ybS12aWV3L2RlZmluaXRpb25zL2Zvcm0tdmlldy5hY3Rpb25zLmRlZmluaXRpb25cIjtcbmltcG9ydCB7IEVGb3JtVmlld0dvQmFja01vZGUgfSBmcm9tIFwiLi9mb3JtLXZpZXcvZGVmaW5pdGlvbnMvZm9ybS12aWV3LmNvbW1vbnMuZGVmaW5pdGlvblwiO1xuaW1wb3J0IHsgVFRyaWdnZXIgfSBmcm9tIFwiLi9mb3JtLXZpZXcvZGVmaW5pdGlvbnMvZm9ybS12aWV3LnRyaWdnZXJzLmRlZmluaXRpb25cIjtcbmltcG9ydCB7IEVGb3Jtc0xpc3RTdGF0dXMgfSBmcm9tIFwiLi9mb3Jtcy1saXN0L2Zvcm1zLWxpc3QuZGVmaW5pdGlvbnNcIjtcbmltcG9ydCB7IEVSZW5kZXJlckFjdGlvbktleSB9IGZyb20gXCIuL3JlbmRlcmVyLmFjdGlvbnMuZGVmaW5pdGlvbnNcIjtcbmltcG9ydCB7IEVGb3JtVHlwZSB9IGZyb20gXCIuL3JlbmRlcmVyLmRlZmluaXRpb25zXCI7XG5pbXBvcnQgeyBnZXRGb3JtQ29uZmlnQnlLZXkgfSBmcm9tIFwiLi9yZW5kZXJlci5oZWxwZXJcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImt3aWtpZC1mb3Jtcy1yZW5kZXJlclwiLFxuICB0ZW1wbGF0ZVVybDogXCIuL3JlbmRlcmVyLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogW1wiLi9yZW5kZXJlci5jb21wb25lbnQuc2Nzc1wiXSxcbiAgYW5pbWF0aW9uczogW1xuICAgIHRyaWdnZXIoXCJwYW5lbEluT3V0XCIsIFtcbiAgICAgIHRyYW5zaXRpb24oXCI6ZW50ZXJcIiwgW1xuICAgICAgICBzdHlsZSh7IHRyYW5zZm9ybTogXCJ0cmFuc2xhdGVZKDEwMCUpXCIgfSksXG4gICAgICAgIGFuaW1hdGUoMTUwKVxuICAgICAgXSksXG4gICAgICB0cmFuc2l0aW9uKFwiOmxlYXZlXCIsIFtcbiAgICAgICAgYW5pbWF0ZSgxMDAsIHN0eWxlKHsgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZVkoMTAwJSlcIiB9KSlcbiAgICAgIF0pXG4gICAgXSlcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBLd2lrSURGb3Jtc1JlbmRlcmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICAvLyBUaGUgZmluYWwgdmFsdWUgc2hvdWxkIGJlIHByb3ZpZGVkIHRvIHNlcnZpY2UsIHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQgaW4gYWxsIGNvbXBvbmVudHNcbiAgQEhvc3RMaXN0ZW5lcihcIndpbmRvdzpyZXNpemVcIiwgW1wiJGV2ZW50XCJdKVxuICB3aW5kb3dSZXNpemVXYXRjaGVyKCkge1xuICAgIGlmICh0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGggPCA2MDApIHtcbiAgICAgIGlmICh0aGlzLnNob3dGb3JtKSB7XG4gICAgICAgIHRoaXMuc2hvd0Zvcm1TZWN0aW9ucyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNob3dGb3JtRmllbGRzID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2hvd0Zvcm1TZWN0aW9ucyA9IHRydWU7XG4gICAgICAgIHRoaXMuc2hvd0Zvcm1GaWVsZHMgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaXNNb2JpbGVWaWV3ID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuc2hvd0Zvcm0pIHtcbiAgICAgICAgdGhpcy5zaG93Rm9ybVNlY3Rpb25zID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zaG93Rm9ybUZpZWxkcyA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNob3dGb3JtU2VjdGlvbnMgPSB0cnVlO1xuICAgICAgICB0aGlzLnNob3dGb3JtRmllbGRzID0gZmFsc2U7XG4gICAgICB9XG4gICAgICB0aGlzLmlzTW9iaWxlVmlldyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIEBWaWV3Q2hpbGQoXCJwcmV2aWV3XCIpXG4gIHJlYWRvbmx5IHByZXZpZXc6IFRlbXBsYXRlUmVmPFR1aURpYWxvZ0NvbnRleHQ8dm9pZD4+O1xuICBwcml2YXRlIHByZXZpZXdEaWFsb2dSZWY6IGFueTtcblxuICBASW5wdXQoKVxuICBzdGVwQ29uZmlnOiBhbnk7XG5cbiAgQElucHV0KClcbiAgdXNlckNvbmZpZzogYW55O1xuXG4gIEBJbnB1dCgpXG4gIGZvcm1zRGF0YTogYW55ID0ge307XG5cbiAgQElucHV0KClcbiAgYWN0aXZlRm9ybURhdGE6IGFueSA9IHt9O1xuXG4gIEBJbnB1dCgpXG4gIGFwaUNhbGxSZXNwb25zZTogYW55ID0ge307XG5cbiAgQE91dHB1dCgpXG4gIG9uQ2xpY2tTdWJtaXQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQE91dHB1dCgpXG4gIGdldEZvcm1EYXRhOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBPdXRwdXQoKVxuICBvbkNsaWNrQXBpQ2FsbDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIGxvYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xuICBsb2FkZXJUeXBlID0gXCJDRU5URVJfU0NSRUVOXCI7XG5cbiAgc2hvd0Vycm9yTm90aWZpY2F0aW9uOiBib29sZWFuID0gZmFsc2U7XG4gIHRvZ2dsZUVycm9yTm90aWZpY2F0aW9uKHNob3cpIHtcbiAgICB0aGlzLnNob3dFcnJvck5vdGlmaWNhdGlvbiA9IHNob3c7XG4gIH1cblxuICBhY3RpdmVQb3B1cEZvcm1EYXRhOiBhbnkgPSB7fTtcbiAgcG9wdXBGb3JtQ2FsbGJhY2s6IGFueSA9IHt9O1xuICBhY3RpdmVGb3JtQ29uZmlnOiBhbnk7XG4gIGFjdGl2ZUZvcm1GaWVsZHM6IGFueVtdO1xuICBhbGxGb3Jtc0RhdGE6IGFueSA9IHt9O1xuICBhbGxGb3Jtc1N1Ym1pdHRlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBmb3Jtc0xpc3Q6IGFueVtdID0gW107XG4gIGZvcm1zTGlzdENvbXBsZXRlZDogc3RyaW5nW107XG4gIGlzTW9iaWxlVmlldzogYm9vbGVhbiA9IGZhbHNlO1xuICBwcmV2aWV3UHJvcGVydGllczogYW55ID0ge1xuICAgIGh0bWw6IHtcbiAgICAgIGJlZm9yZTogXCJcIixcbiAgICAgIGFmdGVyOiBcIlwiXG4gICAgfSxcbiAgICBpZnJhbWU6IHtcbiAgICAgIHNyYzogXCJcIixcbiAgICAgIHRpdGxlOiBcIlwiXG4gICAgfSxcbiAgICBwb3B1cEZvcm1LZXk6IFwiXCIsXG4gICAgdGl0bGU6IFwiXCIsXG4gICAgdW5hdmFpbGFibGU6IGZhbHNlXG4gIH07XG4gIHBvcHVwRm9ybUNvbmZpZzogYW55ID0ge307XG5cbiAgLy8gZGlzcGxheSBmb3JtcyBhbmQgbGlzdCBjb25kaXRpb25hbGx5XG4gIHNob3dGb3JtOiBib29sZWFuID0gZmFsc2U7XG4gIHNob3dGb3JtRmllbGRzOiBib29sZWFuID0gdHJ1ZTtcbiAgc2hvd0Zvcm1TZWN0aW9uczogYm9vbGVhbiA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBob3N0RWxlbWVudDogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQEluamVjdChUdWlQcmV2aWV3RGlhbG9nU2VydmljZSlcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByZXZpZXdEaWFsb2dTZXJ2aWNlOiBUdWlQcmV2aWV3RGlhbG9nU2VydmljZSxcbiAgICBASW5qZWN0KFR1aURpYWxvZ1NlcnZpY2UpIHByaXZhdGUgcmVhZG9ubHkgZGlhbG9nczogVHVpRGlhbG9nU2VydmljZVxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG5cbiAgICB0aGlzLnNldExvYWRlclR5cGUoKTtcblxuICAgIGNvbnN0IGZvcm1TdGVwS2V5ID0gdGhpcy5zdGVwQ29uZmlnPy5mb3JtPy5rZXkgPz8gdW5kZWZpbmVkO1xuXG4gICAgaWYgKFxuICAgICAgZm9ybVN0ZXBLZXkgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHModGhpcy51c2VyQ29uZmlnLnVzZXJGb3JtRmllbGRzLCBmb3JtU3RlcEtleSlcbiAgICApIHtcbiAgICAgIHRoaXMuZm9ybXNMaXN0ID0gdGhpcy51c2VyQ29uZmlnLnVzZXJGb3JtRmllbGRzW2Zvcm1TdGVwS2V5XTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodGhpcy51c2VyQ29uZmlnLnVzZXJGb3JtRmllbGRzKSkge1xuICAgICAgdGhpcy5mb3Jtc0xpc3QgPSB0aGlzLnVzZXJDb25maWcudXNlckZvcm1GaWVsZHM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYHVzZXJGb3JtRmllbGRzIGRvZXNuJ3QgaGF2ZSBhIGZvcm0gZGVmaW5lZCB3aXRoIGtleTogJHtmb3JtU3RlcEtleX1gXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuaW5pdGlhbGl6ZUZvcm1zKFwiT05fSU5JVFwiKTtcbiAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGNvbnN0IHZlcmlmeUNoYW5nZSA9IChwcm9wOiBzdHJpbmcpID0+IHtcbiAgICAgIHJldHVybiBjaGFuZ2VzLmhhc093blByb3BlcnR5KHByb3ApICYmICFjaGFuZ2VzW3Byb3BdLmZpcnN0Q2hhbmdlO1xuICAgIH07XG4gICAgaWYgKHZlcmlmeUNoYW5nZShcInVzZXJDb25maWdcIikpIHtcbiAgICAgIHRoaXMudXNlckNvbmZpZyA9IGNoYW5nZXMudXNlckNvbmZpZy5jdXJyZW50VmFsdWU7XG4gICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAodmVyaWZ5Q2hhbmdlKFwiZm9ybXNEYXRhXCIpKSB7XG4gICAgICB0aGlzLmZvcm1zRGF0YSA9IGNoYW5nZXMuZm9ybXNEYXRhLmN1cnJlbnRWYWx1ZTtcblxuICAgICAgdGhpcy5pbml0aWFsaXplRm9ybXMoXCJPTl9DSEFOR0VcIik7XG4gICAgfVxuICAgIGlmICh2ZXJpZnlDaGFuZ2UoXCJhcGlDYWxsUmVzcG9uc2VcIikpIHtcbiAgICAgIHRoaXMuYXBpQ2FsbFJlc3BvbnNlID0gY2hhbmdlcy5hcGlDYWxsUmVzcG9uc2UuY3VycmVudFZhbHVlO1xuICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBzZXRMb2FkZXJUeXBlKCkge1xuICAgIHRoaXMubG9hZGVyVHlwZSA9IFwiQ0VOVEVSX1NDUkVFTlwiO1xuICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyh0aGlzLnVzZXJDb25maWcsIFwidXRpbGl0eUZsYWdzXCIpKSB7XG4gICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHModGhpcy51c2VyQ29uZmlnLnV0aWxpdHlGbGFncywgXCJsb2FkZXJUeXBlXCIpKSB7XG4gICAgICAgIHRoaXMubG9hZGVyVHlwZSA9IHRoaXMudXNlckNvbmZpZy51dGlsaXR5RmxhZ3MubG9hZGVyVHlwZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKFxuICAgICAgdGhpcy5sb2FkZXJUeXBlICE9PSBcIkZVTExfU0NSRUVOXCIgJiZcbiAgICAgIHRoaXMubG9hZGVyVHlwZSAhPT0gXCJDRU5URVJfU0NSRUVOXCJcbiAgICApIHtcbiAgICAgIHRoaXMubG9hZGVyVHlwZSA9IFwiQ0VOVEVSX1NDUkVFTlwiO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgZmV0Y2hGb3JtQ29uZmlnKHVybDogc3RyaW5nKSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHsgbWV0aG9kOiBcIkdFVFwiIH0pO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBhc3luYyBpbml0aWFsaXplRm9ybXMoZXZlbnRUeXBlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmxvYWRlciA9IHRydWU7XG5cbiAgICB0aGlzLmFsbEZvcm1zRGF0YSA9IHRoaXMuZm9ybXNEYXRhO1xuXG4gICAgYXdhaXQgdGhpcy51cGRhdGVGb3Jtc0xpc3QoKTtcblxuICAgIGlmIChcbiAgICAgIGV2ZW50VHlwZSA9PT0gXCJPTl9DSEFOR0VcIiAmJlxuICAgICAgdGhpcy5maW5kRm9ybXNMaXN0TGVuZ3RoKHRoaXMuZm9ybXNMaXN0KSA9PT0gMVxuICAgICkge1xuICAgICAgdGhpcy5oYW5kbGVPbkNsaWNrU3VibWl0Rm9ybXMobnVsbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGFuZGxlUmVzaXplKHRoaXMuZm9ybXNMaXN0KTtcblxuICAgICAgaWYgKGlzTm90RW1wdHlWYWx1ZSh0aGlzLmFjdGl2ZUZvcm1Db25maWcpKSB7XG4gICAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyh0aGlzLmFjdGl2ZUZvcm1Db25maWcsIFwidHlwZVwiKSkge1xuICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZUZvcm1Db25maWcudHlwZSAhPT0gRUZvcm1UeXBlLkhUTUwpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlT25DbGlja1NldEFjdGl2ZUZvcm0odGhpcy5hY3RpdmVGb3JtQ29uZmlnLmtleSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlT25DbGlja1NldEFjdGl2ZUZvcm0odGhpcy5hY3RpdmVGb3JtQ29uZmlnLmtleSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2hvd0Zvcm0gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zaG93Rm9ybUZpZWxkcyA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBjb252ZXJ0Rm9ybUxpc3RDb25maWcoZm9ybXNMaXN0OiBhbnlbXSk6IGFueVtdIHtcbiAgICBjb25zdCBjb252ZXJ0Rm9ybUxpc3RDb25maWdUeXBlRm9ybSA9IChmb3JtOiBhbnkpID0+IHtcbiAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLCBcImZvcm1Db250ZW50XCIpKSB7XG4gICAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLmZvcm1Db250ZW50LCBcInVybFwiKSkge1xuICAgICAgICAgIGZvcm0gPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChmb3JtLCBcInByb3BzLnVybFwiLCBmb3JtLmZvcm1Db250ZW50LnVybCk7XG4gICAgICAgICAgZGVsZXRlIGZvcm1bXCJmb3JtQ29udGVudFwiXVtcInVybFwiXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoZm9ybS5mb3JtQ29udGVudCwgXCJwYXRoXCIpKSB7XG4gICAgICAgICAgZm9ybSA9IHNldFZhbHVlVG9PYmplY3RQYXRoKFxuICAgICAgICAgICAgZm9ybSxcbiAgICAgICAgICAgIFwicHJvcHMucGF0aFwiLFxuICAgICAgICAgICAgZm9ybS5mb3JtQ29udGVudC5wYXRoXG4gICAgICAgICAgKTtcbiAgICAgICAgICBkZWxldGUgZm9ybVtcImZvcm1Db250ZW50XCJdW1wicGF0aFwiXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGlzRW1wdHlWYWx1ZShmb3JtLmZvcm1Db250ZW50KSkge1xuICAgICAgICBkZWxldGUgZm9ybVtcImZvcm1Db250ZW50XCJdO1xuICAgICAgfVxuICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm0sIFwidGl0bGVcIikpIHtcbiAgICAgICAgZm9ybSA9IHNldFZhbHVlVG9PYmplY3RQYXRoKGZvcm0sIFwicHJvcHMudGl0bGVcIiwgZm9ybS50aXRsZSk7XG4gICAgICAgIGRlbGV0ZSBmb3JtW1widGl0bGVcIl07XG4gICAgICB9XG4gICAgICBpZiAoIWNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm0sIFwiaGlkZGVuXCIpKSB7XG4gICAgICAgIGZvcm0uaGlkZGVuID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoIWNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm0sIFwiZGlzYWJsZWRcIikpIHtcbiAgICAgICAgZm9ybS5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKCFjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLCBcInJlcXVpcmVkXCIpKSB7XG4gICAgICAgIGZvcm0ucmVxdWlyZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKCFjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLCBcImRlcGVuZGVudE9uXCIpKSB7XG4gICAgICAgIGZvcm0uZGVwZW5kZW50T24gPSBbXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZvcm07XG4gICAgfTtcblxuICAgIGNvbnN0IGNvbnZlcnRGb3JtTGlzdENvbmZpZ1R5cGVIdG1sID0gKGZvcm06IGFueSkgPT4ge1xuICAgICAgaWYgKGZvcm0udHlwZSA9PT0gXCJodG1sXCIpIHtcbiAgICAgICAgZm9ybS50eXBlID0gRUZvcm1UeXBlLkhUTUw7XG4gICAgICB9XG5cbiAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLCBcImh0bWxDb250ZW50XCIpKSB7XG4gICAgICAgIGlmICghY2hlY2tPYmplY3RLZXlFeGlzdHMoZm9ybSwgXCJwcm9wc1wiKSkge1xuICAgICAgICAgIGZvcm0ucHJvcHMgPSB7XG4gICAgICAgICAgICBodG1sQ29udGVudDogZm9ybS5odG1sQ29udGVudFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlIGZvcm1bXCJodG1sQ29udGVudFwiXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICghY2hlY2tPYmplY3RLZXlFeGlzdHMoZm9ybSwgXCJwcm9wc1wiKSkge1xuICAgICAgICAgIGZvcm0ucHJvcHMgPSB7XG4gICAgICAgICAgICBodG1sQ29udGVudDogXCJcIlxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLCBcInRpdGxlXCIpKSB7XG4gICAgICAgIGZvcm0gPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChmb3JtLCBcInByb3BzLnRpdGxlXCIsIGZvcm0udGl0bGUpO1xuICAgICAgICBkZWxldGUgZm9ybVtcInRpdGxlXCJdO1xuICAgICAgfVxuICAgICAgaWYgKCFjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLCBcImhpZGRlblwiKSkge1xuICAgICAgICBmb3JtLmhpZGRlbiA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZvcm07XG4gICAgfTtcblxuICAgIHJldHVybiBmb3Jtc0xpc3QubWFwKChmb3JtKSA9PiB7XG4gICAgICBpZiAoIWNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm0sIFwidHlwZVwiKSkge1xuICAgICAgICBmb3JtLnR5cGUgPSBcIkZPUk1cIjtcbiAgICAgIH1cbiAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLCBcInR5cGVcIikpIHtcbiAgICAgICAgaWYgKGZvcm0udHlwZSA9PT0gRUZvcm1UeXBlLkZPUk0pIHtcbiAgICAgICAgICBmb3JtID0gY29udmVydEZvcm1MaXN0Q29uZmlnVHlwZUZvcm0oZm9ybSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZm9ybS50eXBlID09PSBFRm9ybVR5cGUuSFRNTCB8fCBmb3JtLnR5cGUgPT09IFwiaHRtbFwiKSB7XG4gICAgICAgICAgZm9ybSA9IGNvbnZlcnRGb3JtTGlzdENvbmZpZ1R5cGVIdG1sKGZvcm0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmb3JtO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE5PVEU6IFRvIGJlIGRlcHJlY2F0ZWQuXG4gICAqIFdoeSA/IFdpbGwgYmUgZGlyZWN0bHkgYXNzaWduZWQgd2hpbGUgZXhlY3V0aW5nICdjaGFrcmEnIGZvciBkZWZhdWx0IGZvcm0gY29uZmlnLlxuICAgKiBAcGFyYW0gZm9ybXNMaXN0IGFueVtdXG4gICAqIEBwYXJhbSBmb3Jtc0xpc3RDb21wbGV0ZWQgc3RyaW5nW11cbiAgICogQHJldHVybnMgYW55W11cbiAgICovXG4gIEBsb2dNZXRob2RcbiAgYXNzaWduU2VxdWVuY2VOb1RvRm9ybShmb3Jtc0xpc3Q6IGFueVtdKTogYW55W10ge1xuICAgIGxldCBzZXF1ZW5jZU5vID0gMTtcbiAgICBmb3IgKGxldCBmb3JtIG9mIGZvcm1zTGlzdCkge1xuICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm0sIFwiaGlkZGVuXCIpKSB7XG4gICAgICAgIGlmICghZm9ybS5oaWRkZW4gJiYgZm9ybS50eXBlICE9PSBFRm9ybVR5cGUuSFRNTCkge1xuICAgICAgICAgIGZvcm0uc2VxdWVuY2VObyA9IHNlcXVlbmNlTm8rKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZWxldGUgZm9ybVtcInNlcXVlbmNlTm9cIl07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZm9ybXNMaXN0O1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBmaW5kQ29tcGxldGVkRm9ybXNMaXN0KGFsbEZvcm1zRGF0YTogYW55KTogc3RyaW5nW10ge1xuICAgIGxldCBmb3Jtc0xpc3RDb21wbGV0ZWQ6IHN0cmluZ1tdID0gW107XG5cbiAgICBPYmplY3Qua2V5cyhhbGxGb3Jtc0RhdGEpLm1hcCgoZm9ybUtleSkgPT4ge1xuICAgICAgZm9ybXNMaXN0Q29tcGxldGVkLnB1c2goZm9ybUtleSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZm9ybXNMaXN0Q29tcGxldGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIE5PVEU6IFRvIGJlIGRlcHJlY2F0ZWQuIFdoeSA/IFdpbGwgYmUgcmVwbGFjZWQgYnkgJ2NoYWtyYScuXG4gICAqIEBwYXJhbSBmb3Jtc0xpc3QgYW55W11cbiAgICogQHBhcmFtIGZvcm1zTGlzdENvbXBsZXRlZCBzdHJpbmdbXVxuICAgKiBAcmV0dXJucyBhbnlbXVxuICAgKi9cbiAgQGxvZ01ldGhvZFxuICBtYXJrRm9ybUluRm9ybXNMaXN0QXNDb21wbGV0ZWQoXG4gICAgZm9ybXNMaXN0OiBhbnlbXSxcbiAgICBmb3Jtc0xpc3RDb21wbGV0ZWQ6IHN0cmluZ1tdXG4gICk6IGFueVtdIHtcbiAgICBmb3IgKGxldCBmb3JtIG9mIGZvcm1zTGlzdCkge1xuICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm0sIFwiaGlkZGVuXCIpKSB7XG4gICAgICAgIGlmICghZm9ybS5oaWRkZW4gJiYgZm9ybS50eXBlICE9PSBFRm9ybVR5cGUuSFRNTCkge1xuICAgICAgICAgIGlmIChmb3Jtc0xpc3RDb21wbGV0ZWQuaW5jbHVkZXMoZm9ybS5rZXkpKSB7XG4gICAgICAgICAgICBmb3JtID0gc2V0VmFsdWVUb09iamVjdFBhdGgoZm9ybSwgXCJzdGF0dXNcIiwgXCJjb21wbGV0ZWRcIik7XG4gICAgICAgICAgICBmb3JtID0gc2V0VmFsdWVUb09iamVjdFBhdGgoZm9ybSwgXCJkaXNhYmxlZFwiLCBmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvcm1zTGlzdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBOT1RFOiBUbyBiZSBkZXByZWNhdGVkLiBXaHkgPyBXaWxsIGJlIHJlcGxhY2VkIGJ5ICdjaGFrcmEnLlxuICAgKiBAcGFyYW0gZm9ybXNMaXN0IGFueVtdXG4gICAqIEBwYXJhbSBmb3Jtc0xpc3RDb21wbGV0ZWQgc3RyaW5nW11cbiAgICogQHJldHVybnMgYW55W11cbiAgICovXG4gIEBsb2dNZXRob2RcbiAgbWFya0Zvcm1JbkZvcm1zTGlzdEFzRGlzYWJsZWQoXG4gICAgZm9ybXNMaXN0OiBhbnlbXSxcbiAgICBmb3Jtc0xpc3RDb21wbGV0ZWQ6IHN0cmluZ1tdXG4gICk6IGFueVtdIHtcbiAgICBmb3IgKGxldCBmb3JtIG9mIGZvcm1zTGlzdCkge1xuICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm0sIFwiaGlkZGVuXCIpKSB7XG4gICAgICAgIGlmICghZm9ybS5oaWRkZW4gJiYgZm9ybS50eXBlICE9PSBFRm9ybVR5cGUuSFRNTCkge1xuICAgICAgICAgIGlmIChmb3JtLnN0YXR1cyAhPT0gXCJjb21wbGV0ZWRcIikge1xuICAgICAgICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm0sIFwiZGVwZW5kZW50T25cIikpIHtcbiAgICAgICAgICAgICAgY29uc3QgaXNEZXBlbmRlbnQgPSBmb3JtLmRlcGVuZGVudE9uLmV2ZXJ5KChyOiBzdHJpbmcpID0+XG4gICAgICAgICAgICAgICAgZm9ybXNMaXN0Q29tcGxldGVkLmluY2x1ZGVzKHIpXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGlmIChpc0RlcGVuZGVudCkge1xuICAgICAgICAgICAgICAgIGZvcm0gPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChmb3JtLCBcInN0YXR1c1wiLCBcImVkaXRhYmxlXCIpO1xuICAgICAgICAgICAgICAgIGZvcm0gPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChmb3JtLCBcImRpc2FibGVkXCIsIGZhbHNlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3JtID0gc2V0VmFsdWVUb09iamVjdFBhdGgoZm9ybSwgXCJzdGF0dXNcIiwgXCJsb2NrZWRcIik7XG4gICAgICAgICAgICAgICAgZm9ybSA9IHNldFZhbHVlVG9PYmplY3RQYXRoKGZvcm0sIFwiZGlzYWJsZWRcIiwgdHJ1ZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGZvcm0gPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChmb3JtLCBcImRlcGVuZGVudE9uXCIsIFtdKTtcbiAgICAgICAgICAgICAgZm9ybSA9IHNldFZhbHVlVG9PYmplY3RQYXRoKGZvcm0sIFwic3RhdHVzXCIsIFwiZWRpdGFibGVcIik7XG4gICAgICAgICAgICAgIGZvcm0gPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChmb3JtLCBcImRpc2FibGVkXCIsIGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZm9ybXNMaXN0O1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBmaWx0ZXJBbGxGb3Jtc0RhdGEoYWxsRm9ybXNEYXRhOiBhbnksIGZvcm1zTGlzdDogYW55W10pOiBhbnkge1xuICAgIGxldCBjdXJyZW50VXNlckZvcm1BbGxGb3Jtc0RhdGE6IGFueSA9IHt9O1xuXG4gICAgZm9yIChsZXQgZm9ybSBvZiBmb3Jtc0xpc3QpIHtcbiAgICAgIGlmIChcbiAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZm9ybSwgXCJoaWRkZW5cIikgJiZcbiAgICAgICAgIWZvcm0uaGlkZGVuICYmXG4gICAgICAgIGZvcm0udHlwZSAhPT0gRUZvcm1UeXBlLkhUTUxcbiAgICAgICkge1xuICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoYWxsRm9ybXNEYXRhLCBmb3JtLmtleSkpIHtcbiAgICAgICAgICBjdXJyZW50VXNlckZvcm1BbGxGb3Jtc0RhdGEgPSB7XG4gICAgICAgICAgICAuLi5jdXJyZW50VXNlckZvcm1BbGxGb3Jtc0RhdGEsXG4gICAgICAgICAgICBbZm9ybS5rZXldOiBhbGxGb3Jtc0RhdGFbZm9ybS5rZXldXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjdXJyZW50VXNlckZvcm1BbGxGb3Jtc0RhdGE7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGNoZWNrSWZGb3Jtc1N0YXR1c0NvbXBsZXRlZChcbiAgICBmb3Jtc0xpc3Q6IGFueSxcbiAgICBmb3Jtc0xpc3RDb21wbGV0ZWQ6IHN0cmluZ1tdXG4gICk6IGFueSB7XG4gICAgbGV0IGFsbEZvcm1zQ29tcGxldGVkOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIGZvciAoY29uc3QgZm9ybSBvZiBmb3Jtc0xpc3QpIHtcbiAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLCBcImhpZGRlblwiKSkge1xuICAgICAgICBpZiAoIWZvcm0uaGlkZGVuICYmIGZvcm0udHlwZSAhPT0gRUZvcm1UeXBlLkhUTUwpIHtcbiAgICAgICAgICBpZiAoZm9ybS5zdGF0dXMgIT09IFwiY29tcGxldGVkXCIpIHtcbiAgICAgICAgICAgIGFsbEZvcm1zQ29tcGxldGVkID0gZmFsc2U7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYWxsRm9ybXNDb21wbGV0ZWQ7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGZpbmRBY3RpdmVGb3JtQ29uZmlnKGZvcm1zTGlzdDogYW55W10pOiBhbnkge1xuICAgIGNvbnN0IGFjdGl2ZUZvcm1Db25maWcgPSBmb3Jtc0xpc3QuZmluZCgoZm9ybSkgPT4ge1xuICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm0sIFwiaGlkZGVuXCIpKSB7XG4gICAgICAgIGlmICghZm9ybS5oaWRkZW4gJiYgZm9ybS50eXBlICE9PSBFRm9ybVR5cGUuSFRNTCkge1xuICAgICAgICAgIHJldHVybiBmb3JtLnN0YXR1cyA9PT0gXCJlZGl0YWJsZVwiICYmICFmb3JtLmRpc2FibGVkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGFjdGl2ZUZvcm1Db25maWc7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIHVwZGF0ZUZvcm1zTGlzdCgpIHtcbiAgICB0aGlzLmZvcm1zTGlzdCA9IHRoaXMuY29udmVydEZvcm1MaXN0Q29uZmlnKHRoaXMuZm9ybXNMaXN0KTtcblxuICAgIGZvciAobGV0IGZvcm0gb2YgdGhpcy5mb3Jtc0xpc3QpIHtcbiAgICAgIGlmIChcbiAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZm9ybSwgXCJkZWZhdWx0XCIpICYmXG4gICAgICAgIGlzTm90RW1wdHlWYWx1ZShmb3JtLmRlZmF1bHQpXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgdHJpZ2dlcnM6IEFycmF5PFRUcmlnZ2VyPiA9IGZvcm0uZGVmYXVsdC50cmlnZ2VycztcbiAgICAgICAgY29uc3QgcnVsZXM6IEFycmF5PFRSdWxlPiA9IGZvcm0uZGVmYXVsdC5ydWxlcztcbiAgICAgICAgY29uc3QgYWN0aW9uczogQXJyYXk8VEFjdGlvbj4gPSBmb3JtLmRlZmF1bHQuYWN0aW9ucztcblxuICAgICAgICBjb25zdCBydWxlc01hcHBpbmcgPSBuZXcgUnVsZShydWxlcywge1xuICAgICAgICAgIFVTRVJfQ09ORklHOiB0aGlzLnVzZXJDb25maWcsXG4gICAgICAgICAgRk9STVNfTElTVDogdGhpcy5mb3Jtc0xpc3QsXG4gICAgICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuYWxsRm9ybXNEYXRhXG4gICAgICAgIH0pLm1hcHBpbmcoKTtcblxuICAgICAgICBmb3IgKGxldCBhY3Rpb24gb2YgYWN0aW9ucykge1xuICAgICAgICAgIGNvbnN0IGNvbmRpdGlvbkV2YWx1YXRpb24gPSBuZXcgQ29uZGl0aW9uKFxuICAgICAgICAgICAgYWN0aW9uLmNvbmRpdGlvbixcbiAgICAgICAgICAgIHJ1bGVzTWFwcGluZ1xuICAgICAgICAgICkuZXZhbHVhdGUoKTtcblxuICAgICAgICAgIGlmIChjb25kaXRpb25FdmFsdWF0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCBhY3Rpb25zID0gbmV3IEFjdGlvbihcbiAgICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgICBydWxlc01hcHBpbmcsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBGT1JNU19MSVNUOiB0aGlzLmZvcm1zTGlzdCxcbiAgICAgICAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGFcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGF3YWl0IGFjdGlvbnMuZXhlY3V0ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCFjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLCBcImhpZGRlblwiKSkge1xuICAgICAgICAgIGZvcm0uaGlkZGVuID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmZvcm1zTGlzdCA9IHRoaXMuYXNzaWduU2VxdWVuY2VOb1RvRm9ybSh0aGlzLmZvcm1zTGlzdCk7XG5cbiAgICAvKipcbiAgICAgKiBCZWxvdyBjb2RlIGlkZW50aWZpZXMgdGhlIGFsbEZvcm1zRGF0YSByZXF1aXJlZCBmb3IgdGhlIGN1cnJlbnQgVXNlciBGb3JtLlxuICAgICAqIFdoeT8gQmVjYXVzZSBhbGxGb3Jtc0RhdGEgd2lsbCBhY3R1YWxseSBjb250YWluIHRoZSB3aG9sZSBqb3VybmV5J3MgYWxsXG4gICAgICogcG9zc2libGUgVXNlciBGb3JtIHN0ZXBzLiBTbywgaXQgaXMgaW1wb3J0YW50IHRvIHNldCB0aGUgZm9ybSBkYXRhIHdoaWNoXG4gICAgICogdGhpcyBwYXJ0aWN1bGFyIFVzZXIgRm9ybSBvbmx5IGhhcyB0byBMT0NBTCBNRVRIT0QgVmFyaWFibGUuXG4gICAgICovXG4gICAgY29uc3QgY3VycmVudFVzZXJGb3JtQWxsRm9ybXNEYXRhID0gdGhpcy5maWx0ZXJBbGxGb3Jtc0RhdGEoXG4gICAgICB0aGlzLmFsbEZvcm1zRGF0YSxcbiAgICAgIHRoaXMuZm9ybXNMaXN0XG4gICAgKTtcblxuICAgIHRoaXMuZm9ybXNMaXN0Q29tcGxldGVkID0gdGhpcy5maW5kQ29tcGxldGVkRm9ybXNMaXN0KFxuICAgICAgY3VycmVudFVzZXJGb3JtQWxsRm9ybXNEYXRhXG4gICAgKTtcblxuICAgIHRoaXMuZm9ybXNMaXN0ID0gdGhpcy5tYXJrRm9ybUluRm9ybXNMaXN0QXNDb21wbGV0ZWQoXG4gICAgICB0aGlzLmZvcm1zTGlzdCxcbiAgICAgIHRoaXMuZm9ybXNMaXN0Q29tcGxldGVkXG4gICAgKTtcblxuICAgIHRoaXMuZm9ybXNMaXN0ID0gdGhpcy5tYXJrRm9ybUluRm9ybXNMaXN0QXNEaXNhYmxlZChcbiAgICAgIHRoaXMuZm9ybXNMaXN0LFxuICAgICAgdGhpcy5mb3Jtc0xpc3RDb21wbGV0ZWRcbiAgICApO1xuXG4gICAgdGhpcy5mb3Jtc0xpc3QgPSBnZXRPYmplY3REZWVwQ29weSh0aGlzLmZvcm1zTGlzdCk7XG5cbiAgICB0aGlzLmFjdGl2ZUZvcm1Db25maWcgPSB0aGlzLmZpbmRBY3RpdmVGb3JtQ29uZmlnKHRoaXMuZm9ybXNMaXN0KTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgc2hvd1ByZXZpZXcocHJldmlld1Byb3BlcnRpZXM6IGFueSk6IHZvaWQge1xuICAgIHRoaXMucHJldmlld1Byb3BlcnRpZXMgPSBtZXJnZU9iamVjdHMoXG4gICAgICB0aGlzLnByZXZpZXdQcm9wZXJ0aWVzLFxuICAgICAgcHJldmlld1Byb3BlcnRpZXNcbiAgICApO1xuXG4gICAgaWYgKFxuICAgICAgaXNFbXB0eVZhbHVlKHRoaXMucHJldmlld1Byb3BlcnRpZXMuaWZyYW1lLnNyYykgJiZcbiAgICAgIGlzRW1wdHlWYWx1ZSh0aGlzLnByZXZpZXdQcm9wZXJ0aWVzLmh0bWwuYmVmb3JlKSAmJlxuICAgICAgaXNFbXB0eVZhbHVlKHRoaXMucHJldmlld1Byb3BlcnRpZXMuaHRtbC5hZnRlcikgJiZcbiAgICAgIGlzRW1wdHlWYWx1ZSh0aGlzLnByZXZpZXdQcm9wZXJ0aWVzLnBvcHVwRm9ybUtleSlcbiAgICApIHtcbiAgICAgIHRoaXMucHJldmlld1Byb3BlcnRpZXMudW5hdmFpbGFibGUgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaXNOb3RFbXB0eVZhbHVlKHRoaXMucHJldmlld1Byb3BlcnRpZXMucG9wdXBGb3JtS2V5KSkge1xuICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHModGhpcy5hY3RpdmVGb3JtQ29uZmlnLCBcInBvcHVwRm9ybXNcIikpIHtcbiAgICAgICAgICB0aGlzLnBvcHVwRm9ybUNvbmZpZyA9XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUZvcm1Db25maWcucG9wdXBGb3Jtc1tcbiAgICAgICAgICAgICAgdGhpcy5wcmV2aWV3UHJvcGVydGllcy5wb3B1cEZvcm1LZXlcbiAgICAgICAgICAgIF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5wb3B1cEZvcm1Db25maWcgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5wcmV2aWV3UHJvcGVydGllcy51bmF2YWlsYWJsZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMucHJldmlld0RpYWxvZ1NlcnZpY2Uub3Blbih0aGlzLnByZXZpZXcgfHwgXCJcIikuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGZvcm1IaWRlKGZvcm1LZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIGxldCBmb3JtID0gZ2V0Rm9ybUNvbmZpZ0J5S2V5KHRoaXMuZm9ybXNMaXN0LCBmb3JtS2V5KTtcblxuICAgIGZvcm0gPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChmb3JtLCBcImhpZGRlblwiLCB0cnVlKTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgZm9ybVNob3coZm9ybUtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgbGV0IGZvcm0gPSBnZXRGb3JtQ29uZmlnQnlLZXkodGhpcy5mb3Jtc0xpc3QsIGZvcm1LZXkpO1xuXG4gICAgZm9ybSA9IHNldFZhbHVlVG9PYmplY3RQYXRoKGZvcm0sIFwiaGlkZGVuXCIsIGZhbHNlKTtcbiAgfVxuXG4gIGFzeW5jIHRha2VBY3Rpb24oYWN0aW9uOiBhbnksIG9iamVjdDogYW55KSB7XG4gICAgc3dpdGNoIChhY3Rpb24ua2V5KSB7XG4gICAgICBjYXNlIEVSZW5kZXJlckFjdGlvbktleS5GT1JNX0hJREU6XG4gICAgICAgIHRoaXMuZm9ybUhpZGUoYWN0aW9uLnByb3BzLmZvcm1LZXkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRVJlbmRlcmVyQWN0aW9uS2V5LkZPUk1fU0hPVzpcbiAgICAgICAgdGhpcy5mb3JtU2hvdyhhY3Rpb24ucHJvcHMuZm9ybUtleSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LlNFVF9WQUxVRTpcbiAgICAgICAgY29uc3Qgc291cmNlcyA9IG5ldyBTb3VyY2Uoe1xuICAgICAgICAgIFVTRVJfQ09ORklHOiB0aGlzLnVzZXJDb25maWcsXG4gICAgICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuZm9ybXNEYXRhXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHNvdXJjZVZhbHVlID0gYXdhaXQgc291cmNlcy5nZXRWYWx1ZUZyb21Tb3VyY2UoXG4gICAgICAgICAgYWN0aW9uLnByb3BzLnZhbHVlLnNvdXJjZVxuICAgICAgICApO1xuICAgICAgICBzb3VyY2VzLnNldFZhbHVlVG9Tb3VyY2UoYWN0aW9uLnByb3BzLnZhbHVlLmRlc3RpbmF0aW9uLCBzb3VyY2VWYWx1ZSk7XG5cbiAgICAgICAgdGhpcy51c2VyQ29uZmlnID0gc291cmNlcy5vYmplY3QuVVNFUl9DT05GSUc7XG4gICAgICAgIHRoaXMuZm9ybXNEYXRhID0gc291cmNlcy5vYmplY3QuQUxMX0ZPUk1TX0RBVEE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBmaW5kRm9ybXNMaXN0TGVuZ3RoKGZvcm1zTGlzdDogYW55W10pOiBudW1iZXIge1xuICAgIGNvbnN0IF9mb3Jtc0xpc3QgPSBmb3Jtc0xpc3QuZmlsdGVyKChmb3JtKSA9PiB7XG4gICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoZm9ybSwgXCJ0eXBlXCIpKSB7XG4gICAgICAgIGlmIChmb3JtLnR5cGUgIT09IEVGb3JtVHlwZS5IVE1MKSB7XG4gICAgICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm0sIFwiaGlkZGVuXCIpKSB7XG4gICAgICAgICAgICBpZiAoIWZvcm0uaGlkZGVuKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmb3JtO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLCBcImhpZGRlblwiKSkge1xuICAgICAgICBpZiAoIWZvcm0uaGlkZGVuKSB7XG4gICAgICAgICAgcmV0dXJuIGZvcm07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBfZm9ybXNMaXN0Lmxlbmd0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaWJyYXJ5IEV2ZW50IExpc3RlbmVyc1xuICAgKi9cblxuICAvKipcbiAgICogRm9ybUxpc3QgLSBMaXN0ZW5zIHRvIGV2ZW50IG9mIG9wZW5pbmcgdGhlIEZvcm1WaWV3IG9mIHdoZW4gYW55IGZvcm0gaXMgY2xpY2tlZCBpbiBGb3JtTGlzdFxuICAgKiBAcGFyYW0gc2VsZWN0ZWRGb3JtIHN0cmluZ1xuICAgKi9cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBoYW5kbGVPbkNsaWNrU2V0QWN0aXZlRm9ybShzZWxlY3RlZEZvcm06IHN0cmluZykge1xuICAgIHRoaXMuc2hvd0Zvcm0gPSBmYWxzZTtcbiAgICB0aGlzLmxvYWRlciA9IHRydWU7XG5cbiAgICBjb25zdCBhY3RpdmVGb3JtQ29uZmlnID0gdGhpcy5mb3Jtc0xpc3QuZmluZCgoZm9ybSkgPT4ge1xuICAgICAgaWYgKGZvcm0ua2V5ID09PSBzZWxlY3RlZEZvcm0pIHtcbiAgICAgICAgcmV0dXJuIGZvcm07XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zb2xlLmxvZyhcImFjdGl2ZUZvcm1Db25maWdcIiwgYWN0aXZlRm9ybUNvbmZpZyk7XG5cbiAgICBsZXQgZm9ybUNvbmZpZzogYW55ID0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGFjdGl2ZUZvcm1Db25maWcsIFwicHJvcHNcIikpIHtcbiAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhhY3RpdmVGb3JtQ29uZmlnLnByb3BzLCBcInVybFwiKSkge1xuICAgICAgICBjb25zdCBmb3JtQ29uZmlnRnJvbVVybCA9IGF3YWl0IHRoaXMuZmV0Y2hGb3JtQ29uZmlnKFxuICAgICAgICAgIGFjdGl2ZUZvcm1Db25maWcucHJvcHMudXJsXG4gICAgICAgICk7XG4gICAgICAgIGZvcm1Db25maWcgPSB7XG4gICAgICAgICAgLi4uYWN0aXZlRm9ybUNvbmZpZyxcbiAgICAgICAgICAuLi5mb3JtQ29uZmlnRnJvbVVybFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoYWN0aXZlRm9ybUNvbmZpZy5wcm9wcywgXCJwYXRoXCIpICYmXG4gICAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKHRoaXMudXNlckNvbmZpZywgXCJiYWNrZW5kXCIpICYmXG4gICAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKHRoaXMudXNlckNvbmZpZy5iYWNrZW5kLCBcIkNPTkZJR19CQVNFX1VSTFwiKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMudXNlckNvbmZpZz8uYmFja2VuZD8uQ09ORklHX0JBU0VfVVJMfSR7YWN0aXZlRm9ybUNvbmZpZy5wcm9wcy5wYXRofWA7XG4gICAgICAgIGNvbnN0IGZvcm1Db25maWdGcm9tUGF0aCA9IGF3YWl0IHRoaXMuZmV0Y2hGb3JtQ29uZmlnKHVybCk7XG4gICAgICAgIGZvcm1Db25maWcgPSB7XG4gICAgICAgICAgLi4uYWN0aXZlRm9ybUNvbmZpZyxcbiAgICAgICAgICAuLi5mb3JtQ29uZmlnRnJvbVBhdGhcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyhhY3RpdmVGb3JtQ29uZmlnLCBcInR5cGVcIikgJiZcbiAgICAgICAgICBhY3RpdmVGb3JtQ29uZmlnLnR5cGUgPT09IEVGb3JtVHlwZS5GT1JNXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhhY3RpdmVGb3JtQ29uZmlnLCBcImZpZWxkc1wiKSkge1xuICAgICAgICAgICAgZm9ybUNvbmZpZyA9IGFjdGl2ZUZvcm1Db25maWc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiTm8gRGlyZWN0IFVSTCwgTm8gUGF0aCB3aXRoIEJhc2UgVVJMLCBObyBmaWVsZHMga2V5IGZvdW5kIGluIEFjdGl2ZSBGb3JtJ3MgQ29uZmlnIVwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgYE5vIERpcmVjdCBVUkwsIE5vIFBhdGggd2l0aCBCYXNlIFVSTCwgTm8gZmllbGRzIGtleSBmb3VuZCBpbiBBY3RpdmUgRm9ybSdzIENvbmZpZyFgXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoYWN0aXZlRm9ybUNvbmZpZy5mb3JtQ29udGVudCwgXCJ1cmxcIikpIHtcbiAgICAgICAgY29uc3QgZm9ybUNvbmZpZ0Zyb21VcmwgPSBhd2FpdCB0aGlzLmZldGNoRm9ybUNvbmZpZyhcbiAgICAgICAgICBhY3RpdmVGb3JtQ29uZmlnLmZvcm1Db250ZW50LnVybFxuICAgICAgICApO1xuICAgICAgICBmb3JtQ29uZmlnID0ge1xuICAgICAgICAgIC4uLmFjdGl2ZUZvcm1Db25maWcsXG4gICAgICAgICAgLi4uZm9ybUNvbmZpZ0Zyb21VcmxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGFjdGl2ZUZvcm1Db25maWcuZm9ybUNvbnRlbnQsIFwicGF0aFwiKSAmJlxuICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyh0aGlzLnVzZXJDb25maWcsIFwiYmFja2VuZFwiKSAmJlxuICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyh0aGlzLnVzZXJDb25maWcuYmFja2VuZCwgXCJDT05GSUdfQkFTRV9VUkxcIilcbiAgICAgICkge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnVzZXJDb25maWc/LmJhY2tlbmQ/LkNPTkZJR19CQVNFX1VSTH0ke2FjdGl2ZUZvcm1Db25maWcucHJvcHMucGF0aH1gO1xuICAgICAgICBjb25zdCBmb3JtQ29uZmlnRnJvbVBhdGggPSBhd2FpdCB0aGlzLmZldGNoRm9ybUNvbmZpZyh1cmwpO1xuICAgICAgICBmb3JtQ29uZmlnID0ge1xuICAgICAgICAgIC4uLmFjdGl2ZUZvcm1Db25maWcsXG4gICAgICAgICAgLi4uZm9ybUNvbmZpZ0Zyb21QYXRoXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoYWN0aXZlRm9ybUNvbmZpZywgXCJmaWVsZHNcIikpIHtcbiAgICAgICAgICBmb3JtQ29uZmlnID0gYWN0aXZlRm9ybUNvbmZpZztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJObyBEaXJlY3QgVVJMLCBObyBQYXRoIHdpdGggQmFzZSBVUkwsIE5vIGZpZWxkcyBrZXkgZm91bmQgaW4gQWN0aXZlIEZvcm0ncyBDb25maWchXCJcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coXCJmb3JtQ29uZmlnXCIsIGZvcm1Db25maWcpO1xuXG4gICAgZm9ybUNvbmZpZyA9IG5ldyBDb252ZXJ0ZXIoKS51cGRhdGVGb3JtQ29uZmlnTWlzY2VsbGFuZW91cyhmb3JtQ29uZmlnLCB7XG4gICAgICBmb3Jtc0xpc3RMZW5ndGg6IHRoaXMuZmluZEZvcm1zTGlzdExlbmd0aCh0aGlzLmZvcm1zTGlzdClcbiAgICB9KTtcblxuICAgIHRoaXMuYWN0aXZlRm9ybUNvbmZpZyA9IHtcbiAgICAgIC4uLmFjdGl2ZUZvcm1Db25maWcsXG4gICAgICAuLi5mb3JtQ29uZmlnXG4gICAgfTtcblxuICAgIHRoaXMuYWN0aXZlRm9ybUNvbmZpZztcblxuICAgIGlmICh0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGggPCA2MDApIHtcbiAgICAgIHRoaXMuc2hvd0Zvcm1TZWN0aW9ucyA9IGZhbHNlO1xuICAgICAgdGhpcy5zaG93Rm9ybUZpZWxkcyA9IHRydWU7XG4gICAgfSBlbHNlIGlmICh0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGggPj0gNjAwKSB7XG4gICAgICB0aGlzLnNob3dGb3JtU2VjdGlvbnMgPSB0cnVlO1xuICAgICAgdGhpcy5zaG93Rm9ybUZpZWxkcyA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5zaG93Rm9ybSA9IHRydWU7XG4gICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtVmlldyAtIExpc3RlbnMgdG8gZXZlbnQgb2YgZXhlY3V0aW5nIGFuIEFQSSBjYWxsIGZyb20gd2l0aGluIHRoZSBGb3JtVmlldyBhbmQgZW1pdHMgKHJlYWQgYXMgcGFzc2VzKSB0aGUgc2FtZSBldmVudCB0byB0aGUgbGlicmFyeSBjb25zdW1lci5cbiAgICogQHBhcmFtIGUgYW55XG4gICAqL1xuICBoYW5kbGVPbkNsaWNrQXBpQ2FsbChlOiBhbnkpIHtcbiAgICB0aGlzLm9uQ2xpY2tBcGlDYWxsLmVtaXQoZSk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGhhbmRsZU9uQWN0aW9uU2hvd1BvcHVwRm9ybShlOiBhbnksIGNvbnRlbnQ6IGFueSkge1xuICAgIGlmIChcbiAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGUsIFwiYWN0aXZlRm9ybURhdGFcIikgJiZcbiAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGUsIFwicG9wdXBGb3JtQ29uZmlnXCIpXG4gICAgKSB7XG4gICAgICBjb25zdCBwb3B1cEZvcm1EYXRhID0geyBbdGhpcy5hY3RpdmVGb3JtQ29uZmlnLmtleV06IGUuYWN0aXZlRm9ybURhdGEgfTtcbiAgICAgIHRoaXMuYWN0aXZlUG9wdXBGb3JtRGF0YSA9IG1lcmdlT2JqZWN0cyh0aGlzLmFsbEZvcm1zRGF0YSwgcG9wdXBGb3JtRGF0YSk7XG5cbiAgICAgIHRoaXMucG9wdXBGb3JtQ29uZmlnID0gZS5wb3B1cEZvcm1Db25maWc7XG4gICAgICBjb25zdCBwb3B1cFR5cGUgPSBlPy5wb3B1cFR5cGUgPz8gXCJESUFMT0dcIjtcblxuICAgICAgc3dpdGNoIChwb3B1cFR5cGUpIHtcbiAgICAgICAgY2FzZSBcIkRJQUxPR1wiOlxuICAgICAgICAgIHRoaXMucHJldmlld0RpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nc1xuICAgICAgICAgICAgLm9wZW4oY29udGVudCwge1xuICAgICAgICAgICAgICBjbG9zZWFibGU6IHRydWUsXG4gICAgICAgICAgICAgIGRpc21pc3NpYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgc2l6ZTogXCJzXCIsXG4gICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgIG5leHQ6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3B1cEZvcm1DYWxsYmFjayA9IHtcbiAgICAgICAgICAgICAgICAgIHBvcHVwRm9ybURhdGE6IGRhdGFbXCJkYXRhXCJdLFxuICAgICAgICAgICAgICAgICAgcG9wdXBGb3JtQ29uZmlnOiBkYXRhW1wiZm9ybUNvbmZpZ1wiXSxcbiAgICAgICAgICAgICAgICAgIGFjdGl2ZUZvcm1Db25maWc6IHRoaXMuYWN0aXZlRm9ybUNvbmZpZ1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVQb3B1cEZvcm1EYXRhID0ge307XG4gICAgICAgICAgICAgICAgdGhpcy5wb3B1cEZvcm1Db25maWcgPSB7fTtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXZpZXdEaWFsb2dSZWYuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcHVwRm9ybUNhbGxiYWNrID0ge1xuICAgICAgICAgICAgICAgICAgcG9wdXBGb3JtRGF0YToge30sXG4gICAgICAgICAgICAgICAgICBwb3B1cEZvcm1Db25maWc6IHRoaXMucG9wdXBGb3JtQ29uZmlnLFxuICAgICAgICAgICAgICAgICAgYWN0aXZlRm9ybUNvbmZpZzogdGhpcy5hY3RpdmVGb3JtQ29uZmlnLFxuICAgICAgICAgICAgICAgICAgc3RvcFRhc2tFeGVjdXRpb246IHRydWVcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlUG9wdXBGb3JtRGF0YSA9IHt9O1xuICAgICAgICAgICAgICAgIHRoaXMucG9wdXBGb3JtQ29uZmlnID0ge307XG5cbiAgICAgICAgICAgICAgICBjb25zb2xlLmluZm8oXCJEaWFsb2cgZXJyb3JcIik7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5pbmZvKFwiRGlhbG9nIGNsb3NlZFwiKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJQT1BVUFwiOlxuICAgICAgICAgIHRoaXMucHJldmlld0RpYWxvZ1JlZiA9IHRoaXMucHJldmlld0RpYWxvZ1NlcnZpY2VcbiAgICAgICAgICAgIC5vcGVuKHRoaXMucHJldmlldyB8fCBcIlwiKVxuICAgICAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgIG5leHQ6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3B1cEZvcm1DYWxsYmFjayA9IHtcbiAgICAgICAgICAgICAgICAgIHBvcHVwRm9ybURhdGE6IGRhdGFbXCJkYXRhXCJdLFxuICAgICAgICAgICAgICAgICAgcG9wdXBGb3JtQ29uZmlnOiBkYXRhW1wiZm9ybUNvbmZpZ1wiXSxcbiAgICAgICAgICAgICAgICAgIGFjdGl2ZUZvcm1Db25maWc6IHRoaXMuYWN0aXZlRm9ybUNvbmZpZ1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVQb3B1cEZvcm1EYXRhID0ge307XG4gICAgICAgICAgICAgICAgdGhpcy5wb3B1cEZvcm1Db25maWcgPSB7fTtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXZpZXdEaWFsb2dSZWYuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcHVwRm9ybUNhbGxiYWNrID0ge1xuICAgICAgICAgICAgICAgICAgcG9wdXBGb3JtRGF0YToge30sXG4gICAgICAgICAgICAgICAgICBwb3B1cEZvcm1Db25maWc6IHRoaXMucG9wdXBGb3JtQ29uZmlnLFxuICAgICAgICAgICAgICAgICAgYWN0aXZlRm9ybUNvbmZpZzogdGhpcy5hY3RpdmVGb3JtQ29uZmlnLFxuICAgICAgICAgICAgICAgICAgc3RvcFRhc2tFeGVjdXRpb246IHRydWVcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlUG9wdXBGb3JtRGF0YSA9IHt9O1xuICAgICAgICAgICAgICAgIHRoaXMucG9wdXBGb3JtQ29uZmlnID0ge307XG5cbiAgICAgICAgICAgICAgICBjb25zb2xlLmluZm8oXCJQcmV2aWV3IGVycm9yXCIpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhcIlByZXZpZXcgY2xvc2VkXCIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRm9ybVZpZXcgLSBMaXN0ZW5zIHRvIGV2ZW50IG9mIGdldHRpbmcgdGhlIEFjdGl2ZSBGb3JtJ3MgRGF0YSB3aGVuIHRoZSBGb3JtIGlzIFNhdmVkIGFuZCBlbWl0cyAocmVhZCBhcyBwYXNzZXMpIHRoZSBzYW1lIGV2ZW50IHRvIHRoZSBsaWJyYXJ5IGNvbnN1bWVyLlxuICAgKiBAcGFyYW0gZSBhbnlcbiAgICovXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlT25DbGlja1NhdmVGb3JtKFxuICAgIGU6IGFueSxcbiAgICBldmVudFR5cGU6IFwiRk9STVwiIHwgXCJQT1BVUF9GT1JNXCIsXG4gICAgY29udGV4dDogdW5kZWZpbmVkXG4gICkge1xuICAgIHN3aXRjaCAoZXZlbnRUeXBlKSB7XG4gICAgICBjYXNlIFwiRk9STVwiOlxuICAgICAgICB0aGlzLmxvYWRlciA9IHRydWU7XG5cbiAgICAgICAgdGhpcy5nZXRGb3JtRGF0YS5lbWl0KHtcbiAgICAgICAgICBbdGhpcy5hY3RpdmVGb3JtQ29uZmlnLmtleV06IGVbXCJkYXRhXCJdXG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJQT1BVUF9GT1JNXCI6XG4gICAgICAgIHRoaXMucHJldmlld0RpYWxvZ1JlZi5uZXh0KGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtVmlldyAtIExpc3RlbnMgdG8gZXZlbnQgb2Ygc2hvd2luZyB0aGUgRm9ybXMgTGlzdCBpbiBNb2JpbGUgVmlldy5cbiAgICogQHBhcmFtIGUgYW55XG4gICAqL1xuICBoYW5kbGVPbkNsaWNrVmlld0Zvcm1zKGU6IGFueSkge1xuICAgIHRoaXMuc2hvd0Zvcm1TZWN0aW9ucyA9IHRydWU7XG4gICAgdGhpcy5zaG93Rm9ybSA9IGZhbHNlO1xuICAgIHRoaXMuc2hvd0Zvcm1GaWVsZHMgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIHRoZSBldmVudCBvZiBnb2luZyBiYWNrIHRvIHRoZSBwcmV2aW91cyBmb3JtIGRpcmVjdGx5IG9yIGJ5IHRhYmJpbmcsIHdpdGhvdXQgc2hvd2luZyB0aGUgZm9ybSBsaXN0IGluIG1vYmlsZSB2aWV3LlxuICAgKlxuICAgKiBQcmVyZXF1aXNpdGU6IFRoZSBjdXJyZW50IGZvcm0gY2FuIG5ldmVyIGJlIGxvY2tlZDsgaXQgc2hvdWxkIGVpdGhlciBiZSBpbiBhbiBlZGl0YWJsZSBvciBjb21wbGV0ZWQgc3RhdGUuXG4gICAqXG4gICAqIExvZ2ljOlxuICAgKiAxLiBGb3IgRElSRUNUIG1vZGUsIGZpbmQgdGhlIGNvbmZpZyBvZiB0aGUgcHJldmlvdXMgZm9ybSBzdGFydGluZyBmcm9tIHRoZSBmaXJzdCBmb3JtLCBzdWNoIHRoYXQgdGhlIHByZXZpb3VzIGZvcm0gaXMgZWRpdGFibGUgYW5kIGl0cyBzZXF1ZW5jZSBudW1iZXIgaXMgb25lIGxlc3MgdGhhbiB0aGUgY3VycmVudCBhY3RpdmUgZm9ybSdzIHNlcXVlbmNlIG51bWJlci5cbiAgICogICAgSWYgbm8gcHJldmlvdXMgZm9ybSBpcyBmb3VuZCBvciBhbGwgZm9ybXMgaGF2ZSBiZWVuIGNvbXBsZXRlZCwgc2hvdyB0aGUgZm9ybSBsaXN0LlxuICAgKiAyLiBGb3IgVEFCQkVEIG1vZGUsIGZpbmQgdGhlIGNvbmZpZyBvZiB0aGUgcHJldmlvdXMgZm9ybSBpbiB0aGUgbGlzdCwgc3VjaCB0aGF0IHRoZSBwcmV2aW91cyBmb3JtJ3Mgc2VxdWVuY2UgbnVtYmVyIGlzIGxlc3MgdGhhbiB0aGUgY3VycmVudCBhY3RpdmUgZm9ybSdzIHNlcXVlbmNlIG51bWJlciBhbmQgdGhlIGZvcm0gaXMgZWRpdGFibGUuXG4gICAqICAgIElmIG5vIHByZXZpb3VzIGZvcm0gaXMgZm91bmQsIHNob3cgdGhlIGZvcm0gbGlzdC5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGUgLSBUaGUgZXZlbnQgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIG1vZGUgdG8gZ28gYmFjayBpbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGUubW9kZSAtIFRoZSBtb2RlIG9mIGdvaW5nIGJhY2s6IERJUkVDVCBvciBUQUJCRUQuXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgQGxvZ01ldGhvZFxuICBoYW5kbGVPbkNsaWNrR29CYWNrKGU6IGFueSkge1xuICAgIHN3aXRjaCAoZS5tb2RlKSB7XG4gICAgICBjYXNlIEVGb3JtVmlld0dvQmFja01vZGUuRElSRUNUOlxuICAgICAgICBpZiAodGhpcy5hY3RpdmVGb3JtQ29uZmlnLnNlcXVlbmNlTm8gPT09IDEpIHtcbiAgICAgICAgICB0aGlzLnNob3dGb3JtU2VjdGlvbnMgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuc2hvd0Zvcm0gPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnNob3dGb3JtRmllbGRzID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuY2hlY2tJZkZvcm1zU3RhdHVzQ29tcGxldGVkKFxuICAgICAgICAgICAgICB0aGlzLmZvcm1zTGlzdCxcbiAgICAgICAgICAgICAgdGhpcy5mb3Jtc0xpc3RDb21wbGV0ZWRcbiAgICAgICAgICAgIClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0Zvcm1TZWN0aW9ucyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnNob3dGb3JtID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnNob3dGb3JtRmllbGRzID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzRm9ybUNvbmZpZ0RpcmVjdCA9IHRoaXMuZm9ybXNMaXN0LmZpbmQoKGZvcm0pID0+IHtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGZvcm0uc2VxdWVuY2VObyA9PT0gdGhpcy5hY3RpdmVGb3JtQ29uZmlnLnNlcXVlbmNlTm8gLSAxICYmXG4gICAgICAgICAgICAgICAgZm9ybS5zdGF0dXMgIT09IEVGb3Jtc0xpc3RTdGF0dXMuTE9DS0VEXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmb3JtO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKHByZXZpb3VzRm9ybUNvbmZpZ0RpcmVjdCkge1xuICAgICAgICAgICAgICB0aGlzLmhhbmRsZU9uQ2xpY2tTZXRBY3RpdmVGb3JtKHByZXZpb3VzRm9ybUNvbmZpZ0RpcmVjdC5rZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFRm9ybVZpZXdHb0JhY2tNb2RlLlRBQkJFRDpcbiAgICAgICAgY29uc3QgcHJldmlvdXNGb3JtQ29uZmlnID0gdGhpcy5mb3Jtc0xpc3QuZmluZCgoZm9ybSkgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGZvcm0uc2VxdWVuY2VObyA8IHRoaXMuYWN0aXZlRm9ybUNvbmZpZy5zZXF1ZW5jZU5vICYmXG4gICAgICAgICAgICBmb3JtLnN0YXR1cyA9PT0gRUZvcm1zTGlzdFN0YXR1cy5FRElUQUJMRVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIGZvcm07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAocHJldmlvdXNGb3JtQ29uZmlnKSB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVPbkNsaWNrU2V0QWN0aXZlRm9ybShwcmV2aW91c0Zvcm1Db25maWcua2V5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNob3dGb3JtU2VjdGlvbnMgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuc2hvd0Zvcm0gPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnNob3dGb3JtRmllbGRzID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRm9ybUxpc3QgLSBMaXN0ZW5zIHRvIGV2ZW50IG9mIHN1Ym1pdHRpbmcgYWxsIHRoZSBmb3JtcyBhbmQgbW92aW5nIG91dCBvZiB0aGUgbGlicmFyeSBhbmQgYWxzbyBoYW5kbGVzIHRoZSB2YWxpZGF0aW9uIG9mIGFsbCB0aGUgZm9ybXMuXG4gICAqIEBwYXJhbSBlIGFueVxuICAgKi9cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBoYW5kbGVPbkNsaWNrU3VibWl0Rm9ybXMoZTogYW55KSB7XG4gICAgY29uc3QgZm9ybXNMaXN0OiBhbnlbXSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5mb3Jtc0xpc3QpKTtcblxuICAgIGZvciAobGV0IGZvcm0gb2YgZm9ybXNMaXN0KSB7XG4gICAgICBpZiAoXG4gICAgICAgICFmb3JtLmhpZGRlbiAmJlxuICAgICAgICBmb3JtLnR5cGUgIT09IEVGb3JtVHlwZS5IVE1MICYmXG4gICAgICAgIGZvcm0ucmVxdWlyZWQgJiZcbiAgICAgICAgZm9ybS5zdGF0dXMgIT09IEVGb3Jtc0xpc3RTdGF0dXMuQ09NUExFVEVEXG4gICAgICApIHtcbiAgICAgICAgdGhpcy50b2dnbGVFcnJvck5vdGlmaWNhdGlvbih0cnVlKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy50b2dnbGVFcnJvck5vdGlmaWNhdGlvbihmYWxzZSk7XG4gICAgICAgIH0sIDMwMDApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5vbkNsaWNrU3VibWl0LmVtaXQoZSk7XG4gIH1cblxuICAvKipcbiAgICogTWlzY2VsbGFuZW91cyBNZXRob2RzXG4gICAqL1xuICBoYW5kbGVSZXNpemUoZm9ybXNMaXN0OiBhbnlbXSkge1xuICAgIGlmICh0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGggPCA2MDApIHtcbiAgICAgIGNvbnN0IGlzU2luZ2xlRm9ybSA9IChmb3Jtc0xpc3Q6IGFueVtdKTogYm9vbGVhbiA9PiB7XG4gICAgICAgIHJldHVybiBmb3Jtc0xpc3QubGVuZ3RoID09PSAxO1xuICAgICAgfTtcbiAgICAgIGlmICghaXNTaW5nbGVGb3JtKGZvcm1zTGlzdCkpIHtcbiAgICAgICAgdGhpcy5zaG93Rm9ybVNlY3Rpb25zID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zaG93Rm9ybUZpZWxkcyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNob3dGb3JtID0gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNob3dGb3JtU2VjdGlvbnMgPSB0cnVlO1xuICAgICAgICB0aGlzLnNob3dGb3JtRmllbGRzID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2hvd0Zvcm0gPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaXNNb2JpbGVWaWV3ID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc01vYmlsZVZpZXcgPSBmYWxzZTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgbmdDbGFzcz1cImt3aWtpZC1yZW5kZXJlclwiPlxuICA8ZGl2XG4gICAgbmdDbGFzcz1cImt3aWtpZC1sYXlvdXQtY29udGFpbmVyXCJcbiAgICAqbmdJZj1cIiFsb2FkaW5nXCJcbiAgPlxuICAgIDxkaXZcbiAgICAgIG5nQ2xhc3M9XCJrd2lraWQtc2VjdGlvbnMtY29udGFpbmVyXCJcbiAgICAgICpuZ0lmPVwic2hvd0Zvcm1TZWN0aW9uc1wiXG4gICAgICBjbGFzcz1cImFjdGl2ZVwiXG4gICAgICBbY2xhc3MuYWN0aXZlXT1cInNob3dGb3JtU2VjdGlvbnNcIlxuICAgICAgW2NsYXNzLm1vYmlsZV09XCJpc01vYmlsZVZpZXdcIlxuICAgID5cbiAgICAgIDxrd2lraWQtZm9ybXMtbGlzdFxuICAgICAgICBbc2hvd0Zvcm1GaWVsZHNdPVwidGhpcy5zaG93Rm9ybUZpZWxkc1wiXG4gICAgICAgIFthY3RpdmVGb3JtQ29uZmlnXT1cInRoaXMuYWN0aXZlRm9ybUNvbmZpZ1wiXG4gICAgICAgIFt1c2VyQ29uZmlnXT1cInRoaXMudXNlckNvbmZpZ1wiXG4gICAgICAgIFtmb3Jtc0xpc3RdPVwidGhpcy5mb3Jtc0xpc3RcIlxuICAgICAgICBbc3RlcENvbmZpZ109XCJ0aGlzLnN0ZXBDb25maWdcIlxuICAgICAgICBbZm9ybXNMaXN0Q29tcGxldGVkXT1cInRoaXMuZm9ybXNMaXN0Q29tcGxldGVkXCJcbiAgICAgICAgW2lzTW9iaWxlVmlld109XCJ0aGlzLmlzTW9iaWxlVmlld1wiXG4gICAgICAgIChvbkNsaWNrU2V0QWN0aXZlRm9ybSk9XCJ0aGlzLmhhbmRsZU9uQ2xpY2tTZXRBY3RpdmVGb3JtKCRldmVudClcIlxuICAgICAgICAob25DbGlja1N1Ym1pdEZvcm1zKT1cInRoaXMuaGFuZGxlT25DbGlja1N1Ym1pdEZvcm1zKCRldmVudClcIlxuICAgICAgPjwva3dpa2lkLWZvcm1zLWxpc3Q+XG4gICAgPC9kaXY+XG4gICAgPGRpdlxuICAgICAgbmdDbGFzcz1cImt3aWtpZC1mb3Jtcy1jb250YWluZXJcIlxuICAgICAgKm5nSWY9XCJcbiAgICAgICAgdGhpcy5zaG93Rm9ybSAmJlxuICAgICAgICB0aGlzLnNob3dGb3JtRmllbGRzICYmXG4gICAgICAgIHRoaXMuYWN0aXZlRm9ybUNvbmZpZyAhPT0gdW5kZWZpbmVkXG4gICAgICBcIlxuICAgICAgW2NsYXNzLmFjdGl2ZV09XCJzaG93Rm9ybUZpZWxkc1wiXG4gICAgICBbY2xhc3MubW9iaWxlXT1cImlzTW9iaWxlVmlld1wiXG4gICAgICBbQHBhbmVsSW5PdXRdXG4gICAgPlxuICAgICAgPGt3aWtpZC1mb3JtLXZpZXdcbiAgICAgICAgKm5nSWY9XCJ0aGlzLmFjdGl2ZUZvcm1Db25maWcudHlwZSA9PT0gJ0ZPUk0nXCJcbiAgICAgICAgW2Zvcm1Db25maWddPVwidGhpcy5hY3RpdmVGb3JtQ29uZmlnXCJcbiAgICAgICAgW2FsbEZvcm1zRGF0YV09XCJ0aGlzLmFsbEZvcm1zRGF0YVwiXG4gICAgICAgIFtpc01vYmlsZVZpZXddPVwidGhpcy5pc01vYmlsZVZpZXdcIlxuICAgICAgICBbdXNlckNvbmZpZ109XCJ0aGlzLnVzZXJDb25maWdcIlxuICAgICAgICBbcG9wdXBGb3JtQ2FsbGJhY2tdPVwidGhpcy5wb3B1cEZvcm1DYWxsYmFja1wiXG4gICAgICAgIFthcGlDYWxsUmVzcG9uc2VdPVwidGhpcy5hcGlDYWxsUmVzcG9uc2VcIlxuICAgICAgICAob25DbGlja0FwaUNhbGwpPVwiaGFuZGxlT25DbGlja0FwaUNhbGwoJGV2ZW50KVwiXG4gICAgICAgIChvbkFjdGlvblNob3dQb3B1cEZvcm0pPVwiXG4gICAgICAgICAgdGhpcy5oYW5kbGVPbkFjdGlvblNob3dQb3B1cEZvcm0oJGV2ZW50LCBjb250ZW50KVxuICAgICAgICBcIlxuICAgICAgICAob25DbGlja0dvQmFjayk9XCJ0aGlzLmhhbmRsZU9uQ2xpY2tHb0JhY2soJGV2ZW50KVwiXG4gICAgICAgIChvbkNsaWNrVmlld0Zvcm1zKT1cInRoaXMuaGFuZGxlT25DbGlja1ZpZXdGb3JtcygkZXZlbnQpXCJcbiAgICAgICAgKG9uQ2xpY2tTYXZlRm9ybSk9XCJcbiAgICAgICAgICB0aGlzLmhhbmRsZU9uQ2xpY2tTYXZlRm9ybSgkZXZlbnQsICdGT1JNJywgdW5kZWZpbmVkKVxuICAgICAgICBcIlxuICAgICAgPjwva3dpa2lkLWZvcm0tdmlldz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPGt3aWt1aS1sb2FkZXJcbiAgW2xvYWRlclRleHRdPVwiJ1BsZWFzZSB3YWl0J1wiXG4gIFtzaG93TG9hZGVyXT1cImxvYWRlclwiXG4gIFtmdWxsc2NyZWVuXT1cInRydWVcIlxuPjwva3dpa3VpLWxvYWRlcj5cblxuPHR1aS1wdXNoXG4gIGlkPVwiZXJyb3Itbm90aWZpY2F0aW9uXCJcbiAgKnR1aVB1c2g9XCJzaG93RXJyb3JOb3RpZmljYXRpb25cIlxuICBoZWFkaW5nPVwiUGxlYXNlIGNvbXBsZXRlIHRoZSByZXF1aXJlZCBGb3JtcyFcIlxuICB0eXBlPVwiRXJyb3JcIlxuICAoY2xvc2UpPVwidG9nZ2xlRXJyb3JOb3RpZmljYXRpb24oZmFsc2UpXCJcbj5cbiAgPHR1aS1zdmdcbiAgICBzcmM9XCJ0dWlJY29uWENpcmNsZVwiXG4gICAgc3R5bGU9XCJjb2xvcjogI2ZmZiAhaW1wb3J0YW50XCJcbiAgPlxuICA8L3R1aS1zdmc+XG48L3R1aS1wdXNoPlxuPG5nLXRlbXBsYXRlXG4gICNwcmV2aWV3XG4gIGxldC1wcmV2aWV3XG4+XG4gIDx0dWktcHJldmlld1xuICAgIFtyb3RhdGFibGVdPVwiZmFsc2VcIlxuICAgIFt6b29tYWJsZV09XCJmYWxzZVwiXG4gICAgY2xhc3M9XCJwcmV2aWV3LWNvbnRhaW5lclwiXG4gICAgKm5nSWY9XCJwb3B1cEZvcm1Db25maWdcIlxuICA+XG4gICAgPHR1aS1wcmV2aWV3LXRpdGxlICpuZ0lmPVwicHJldmlld1Byb3BlcnRpZXMudGl0bGUgIT09ICcnXCI+e3tcbiAgICAgIHByZXZpZXdQcm9wZXJ0aWVzLnRpdGxlXG4gICAgfX08L3R1aS1wcmV2aWV3LXRpdGxlPlxuXG4gICAgPGRpdiBjbGFzcz1cImt3aWtpZC1mb3JtLXZpZXctcG9wdXAtY29udGFpbmVyXCI+XG4gICAgICA8a3dpa2lkLWZvcm0tdmlld1xuICAgICAgICBbZm9ybURhdGFdPVwiYWN0aXZlUG9wdXBGb3JtRGF0YVwiXG4gICAgICAgIFtmb3JtQ29uZmlnXT1cInBvcHVwRm9ybUNvbmZpZ1wiXG4gICAgICAgIFthbGxGb3Jtc0RhdGFdPVwiYWxsRm9ybXNEYXRhXCJcbiAgICAgICAgW3VzZXJDb25maWddPVwidGhpcy51c2VyQ29uZmlnXCJcbiAgICAgICAgW2lzTW9iaWxlVmlld109XCJ0aGlzLmlzTW9iaWxlVmlld1wiXG4gICAgICAgIFthcGlDYWxsUmVzcG9uc2VdPVwidGhpcy5hcGlDYWxsUmVzcG9uc2VcIlxuICAgICAgICAob25DbGlja0FwaUNhbGwpPVwiaGFuZGxlT25DbGlja0FwaUNhbGwoJGV2ZW50KVwiXG4gICAgICAgIChvbkNsaWNrU2F2ZUZvcm0pPVwiXG4gICAgICAgICAgdGhpcy5oYW5kbGVPbkNsaWNrU2F2ZUZvcm0oJGV2ZW50LCAnUE9QVVBfRk9STScsIHVuZGVmaW5lZClcbiAgICAgICAgXCJcbiAgICAgID48L2t3aWtpZC1mb3JtLXZpZXc+XG4gICAgPC9kaXY+XG5cbiAgICA8YnV0dG9uXG4gICAgICB0dWlJY29uQnV0dG9uXG4gICAgICB0dWlQcmV2aWV3QWN0aW9uXG4gICAgICBpY29uPVwidHVpSWNvbkNsb3NlTGFyZ2VcIlxuICAgICAgdGl0bGU9XCJDbG9zZVwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIChjbGljayk9XCJwcmV2aWV3LmNvbXBsZXRlKClcIlxuICAgID48L2J1dHRvbj5cbiAgPC90dWktcHJldmlldz5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGVcbiAgI2NvbnRlbnRcbiAgbGV0LWNvbnRleHRcbj5cbiAgPGRpdiBjbGFzcz1cImt3aWtpZC1mb3JtLXZpZXctcG9wdXAtY29udGFpbmVyXCI+XG4gICAgPGt3aWtpZC1mb3JtLXZpZXdcbiAgICAgIFtmb3JtRGF0YV09XCJhY3RpdmVQb3B1cEZvcm1EYXRhXCJcbiAgICAgIFtmb3JtQ29uZmlnXT1cInBvcHVwRm9ybUNvbmZpZ1wiXG4gICAgICBbYWxsRm9ybXNEYXRhXT1cImFsbEZvcm1zRGF0YVwiXG4gICAgICBbdXNlckNvbmZpZ109XCJ0aGlzLnVzZXJDb25maWdcIlxuICAgICAgW2lzTW9iaWxlVmlld109XCJ0aGlzLmlzTW9iaWxlVmlld1wiXG4gICAgICBbYXBpQ2FsbFJlc3BvbnNlXT1cInRoaXMuYXBpQ2FsbFJlc3BvbnNlXCJcbiAgICAgIChvbkNsaWNrQXBpQ2FsbCk9XCJoYW5kbGVPbkNsaWNrQXBpQ2FsbCgkZXZlbnQpXCJcbiAgICAgIChvbkNsaWNrU2F2ZUZvcm0pPVwiXG4gICAgICAgIHRoaXMuaGFuZGxlT25DbGlja1NhdmVGb3JtKCRldmVudCwgJ1BPUFVQX0ZPUk0nLCBjb250ZXh0KVxuICAgICAgXCJcbiAgICA+PC9rd2lraWQtZm9ybS12aWV3PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=