@colijnit/sharedcomponents 255.1.21 → 255.1.23

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 (56) hide show
  1. package/3rdpartylicenses.txt +1405 -0
  2. package/bundles/colijnit-sharedcomponents.umd.js +519 -418
  3. package/bundles/colijnit-sharedcomponents.umd.js.map +1 -1
  4. package/colijnit-sharedcomponents.d.ts +94 -93
  5. package/colijnit-sharedcomponents.metadata.json +1 -1
  6. package/esm2015/colijnit-sharedcomponents.js +95 -94
  7. package/esm2015/lib/components/activity-list/activity-list.component.js +11 -3
  8. package/esm2015/lib/components/activity-overview-component/component-activity-overview.component.js +9 -3
  9. package/esm2015/lib/components/files-upload/components/base-file-upload.component.js +2 -2
  10. package/esm2015/lib/components/files-upload/files-upload.component.js +1 -1
  11. package/esm2015/lib/components/open-activity-list/component-activity-list.component.js +9 -2
  12. package/esm2015/lib/components/stock/base/base-stock.component.js +18 -0
  13. package/esm2015/lib/components/stock/components/allocation-stock-history/allocation-stock-history.component.js +46 -35
  14. package/esm2015/lib/components/stock/components/order-commission-stock-history/order-commission-stock-history.component.js +45 -34
  15. package/esm2015/lib/components/stock/components/order-stock-history/order-stock-history.component.js +46 -35
  16. package/esm2015/lib/components/stock/components/order-stock-tab/order-stock-tab.component.js +19 -8
  17. package/esm2015/lib/components/stock/components/order-supply-stock-history/order-supply-stock-history.component.js +46 -35
  18. package/esm2015/lib/components/stock/components/order-tab/order-tab.component.js +19 -8
  19. package/esm2015/lib/components/stock/components/stock-history/stock-history.component.js +20 -7
  20. package/esm2015/lib/components/stock/components/stock-location/stock-location.component.js +161 -141
  21. package/esm2015/lib/components/stock/components/stock-prognose/stock-prognose.component.js +26 -5
  22. package/esm2015/lib/components/stock/stock-tabs/stock-tabs.component.js +13 -115
  23. package/esm2015/lib/components/stock/stock.component.js +31 -32
  24. package/esm2015/lib/components/tab-bar/tab-bar.component.js +1 -2
  25. package/esm2015/lib/components/tab-bar/tab.interface.js +1 -1
  26. package/esm2015/lib/components/task-creator/task-creator.component.js +69 -62
  27. package/esm2015/lib/res/dictionary/dictionaries.js +2 -2
  28. package/favicon.ico +0 -0
  29. package/fesm2015/colijnit-sharedcomponents.js +515 -479
  30. package/fesm2015/colijnit-sharedcomponents.js.map +1 -1
  31. package/index.html +12 -0
  32. package/lib/components/activity-list/activity-list.component.d.ts +10 -1
  33. package/lib/components/open-activity-list/component-activity-list.component.d.ts +10 -1
  34. package/lib/components/open-activity-list/style/_layout.scss +3 -1
  35. package/lib/components/stock/base/base-stock.component.d.ts +6 -0
  36. package/lib/components/stock/components/allocation-stock-history/allocation-stock-history.component.d.ts +9 -7
  37. package/lib/components/stock/components/order-commission-stock-history/order-commission-stock-history.component.d.ts +9 -7
  38. package/lib/components/stock/components/order-stock-history/order-stock-history.component.d.ts +9 -7
  39. package/lib/components/stock/components/order-stock-tab/order-stock-tab.component.d.ts +4 -2
  40. package/lib/components/stock/components/order-supply-stock-history/order-supply-stock-history.component.d.ts +9 -7
  41. package/lib/components/stock/components/order-tab/order-tab.component.d.ts +4 -3
  42. package/lib/components/stock/components/stock-history/stock-history.component.d.ts +4 -2
  43. package/lib/components/stock/components/stock-location/stock-location.component.d.ts +22 -18
  44. package/lib/components/stock/components/stock-prognose/stock-prognose.component.d.ts +7 -2
  45. package/lib/components/stock/stock-tabs/stock-tabs.component.d.ts +0 -28
  46. package/lib/components/stock/stock.component.d.ts +13 -13
  47. package/lib/components/stock/style/_material-definition.scss +1 -1
  48. package/lib/components/tab-bar/style/_layout.scss +2 -2
  49. package/lib/components/task-creator/style/_layout.scss +3 -1
  50. package/lib/components/task-creator/task-creator.component.d.ts +10 -2
  51. package/lib/style/sharedcomponents-globals.scss +4 -0
  52. package/main.744dc3d73d03c6e7b1d4.js +1 -0
  53. package/package.json +1 -1
  54. package/polyfills.907fe9d1887c5de17993.js +1 -0
  55. package/runtime.8aac21847ed3d3829cca.js +1 -0
  56. package/styles.486be41aa0593b705e42.css +1 -0
@@ -1,5 +1,5 @@
1
1
  import { __awaiter } from "tslib";
2
- import { Component, EventEmitter, HostBinding, Input, Output, ViewChild } from '@angular/core';
2
+ import { Component, EventEmitter, forwardRef, HostBinding, Input, Output, ViewChild } from '@angular/core';
3
3
  import { Icon } from '../../enum/icon.enum';
4
4
  import { IconCacheService } from '../../service/icon-cache.service';
5
5
  import { Activity } from '@colijnit/mainapi/build/model/activity.bo';
@@ -11,7 +11,7 @@ import { Task } from '@colijnit/mainapi/build/model/task.bo';
11
11
  import { ArrayUtils } from '../../utils/array-utils';
12
12
  import { SharedService } from '../../service/shared.service';
13
13
  import { ReportType } from '@colijnit/mainapi/build/enum/report-type.enum';
14
- import { CoreDialogService, FormComponent, FormMasterService } from '@colijnit/corecomponents_v12';
14
+ import { CoreDialogService, FormComponent, FormMasterService, SCREEN_CONFIG_ADAPTER_COMPONENT_INTERFACE_NAME } from '@colijnit/corecomponents_v12';
15
15
  import { ActivityEmailHistory } from '@colijnit/mainapi/build/model/activity-email-history.bo';
16
16
  import { CoEmailAttachment } from '@colijnit/mainapi/build/model/co-email-attachment.bo';
17
17
  import { FileUtils } from '@colijnit/mainapi/build/utils/file-utils';
@@ -299,69 +299,75 @@ TaskCreatorComponent.decorators = [
299
299
  { type: Component, args: [{
300
300
  selector: "co-task-creator",
301
301
  template: `
302
- <div class="task-creator-wrapper">
303
- <div class="top-rows">
304
- <co-email-selector [(emailAddresses)]="emailAddresses" [(bccEmailAddresses)]="bccEmailAddresses"
305
- [key]="remarkAndWorkKey" [workflowCategoryType]="workflowCategoryType"></co-email-selector>
306
- <co-form #createForm class="creator-remarks input-fields">
307
- <co-list-of-icons [collection]="optionCollection" (itemSelected)="itemSelected($event)"></co-list-of-icons>
308
- <co-input-textarea *ngIf="chosenActivityType === optionCollection[0]" [required]="chosenActivityType === optionCollection[0]"
309
- [placeholder]="'REMARK' | sharedLocalize" [(model)]="remarkText"
310
- class="large-remark"></co-input-textarea>
311
- <co-input-textarea *ngIf="chosenActivityType === optionCollection[1]" [required]="chosenActivityType === optionCollection[1]"
312
- [placeholder]="'DESCRIPTION' | sharedLocalize" [(model)]="workDescription"
313
- class="large-remark"></co-input-textarea>
314
- <div class="task-input-fields" *ngIf="chosenActivityType === optionCollection[2]">
315
- <co-input-text [(model)]="taskName" [placeholder]="'NAME' | sharedLocalize"
316
- [required]="chosenActivityType === optionCollection[2]"></co-input-text>
317
- <co-input-textarea [(model)]="taskDescription" [placeholder]="'DESCRIPTION' | sharedLocalize"
318
- class="large-remark"
319
- [required]="chosenActivityType === optionCollection[2]"></co-input-textarea>
320
- </div>
321
- </co-form>
322
- </div>
323
- <div class="extras-buttons">
324
- <co-button [iconData]="iconService.getIcon(icons.PaperclipRegular)" (click)="openAttachmentDialog()"
325
- [label]="documents.length === 0 ? '' : documents.length.toString()" ></co-button>
326
- <co-button *ngIf="chosenActivityType === optionCollection[0]"
327
- [iconData]="iconService.getIcon(icons.PaperPlaneTopSolid)"
328
- (click)="createRemarkClicked()"></co-button>
329
- <co-button *ngIf="chosenActivityType === optionCollection[1]"
330
- [iconData]="iconService.getIcon(icons.PaperPlaneTopSolid)"
331
- (click)="createWorkClicked()"></co-button>
332
- <co-button *ngIf="chosenActivityType === optionCollection[2]"
333
- [iconData]="iconService.getIcon(icons.PaperPlaneTopSolid)"
334
- (click)="createTaskClicked()"></co-button>
335
- </div>
336
- </div>
337
- <co-dialog *ngIf="showFilesDialog" (closeClick)="attachmentDialogCancelled()"
338
- [headerTemplate]="attachmentHeaderTemplate"
339
- [footerTemplate]="attachmentFooterTemplate">
340
-
341
- <ng-template #attachmentHeaderTemplate>
342
- <div class="co-dialog-wrapper-popup-title">
343
- <co-icon [iconData]="iconService.getIcon(icons.PaperclipRegular)"></co-icon>
344
- <div class="co-dialog-header-title" [textContent]="'ATTACHMENTS' | sharedLocalize"></div>
302
+ <div class="task-creator-wrapper">
303
+ <div class="top-rows">
304
+ <co-email-selector [(emailAddresses)]="emailAddresses" [(bccEmailAddresses)]="bccEmailAddresses"
305
+ [key]="remarkAndWorkKey" [workflowCategoryType]="workflowCategoryType"></co-email-selector>
306
+ <co-form #createForm class="creator-remarks input-fields">
307
+ <co-list-of-icons [collection]="optionCollection" (itemSelected)="itemSelected($event)"></co-list-of-icons>
308
+ <co-input-textarea *ngIf="chosenActivityType === optionCollection[0]"
309
+ [required]="chosenActivityType === optionCollection[0]"
310
+ [placeholder]="'REMARK' | sharedLocalize" [(model)]="remarkText"
311
+ class="large-remark"></co-input-textarea>
312
+ <co-input-textarea *ngIf="chosenActivityType === optionCollection[1]"
313
+ [required]="chosenActivityType === optionCollection[1]"
314
+ [placeholder]="'DESCRIPTION' | sharedLocalize" [(model)]="workDescription"
315
+ class="large-remark"></co-input-textarea>
316
+ <div class="task-input-fields" *ngIf="chosenActivityType === optionCollection[2]">
317
+ <co-input-text [(model)]="taskName" [placeholder]="'NAME' | sharedLocalize"
318
+ [required]="chosenActivityType === optionCollection[2]"></co-input-text>
319
+ <co-input-textarea [(model)]="taskDescription" [placeholder]="'DESCRIPTION' | sharedLocalize"
320
+ class="large-remark"
321
+ [required]="chosenActivityType === optionCollection[2]"></co-input-textarea>
345
322
  </div>
346
- </ng-template>
347
- <co-files-upload (documentsAdded)="addedDocument($event)" (documentDeleted)="deletedDocument"
348
- [documents]="documents" [useWithoutSettingProps]="true"></co-files-upload>
349
- </co-dialog>
350
-
323
+ </co-form>
324
+ </div>
325
+ <div class="extras-buttons">
326
+ <co-button [iconData]="iconService.getIcon(icons.PaperclipRegular)" (click)="openAttachmentDialog()"
327
+ [label]="documents.length === 0 ? '' : documents.length.toString()"></co-button>
328
+ <co-button *ngIf="chosenActivityType === optionCollection[0]"
329
+ [iconData]="iconService.getIcon(icons.PaperPlaneTopSolid)"
330
+ (click)="createRemarkClicked()"></co-button>
331
+ <co-button *ngIf="chosenActivityType === optionCollection[1]"
332
+ [iconData]="iconService.getIcon(icons.PaperPlaneTopSolid)"
333
+ (click)="createWorkClicked()"></co-button>
334
+ <co-button *ngIf="chosenActivityType === optionCollection[2]"
335
+ [iconData]="iconService.getIcon(icons.PaperPlaneTopSolid)"
336
+ (click)="createTaskClicked()"></co-button>
337
+ </div>
338
+ </div>
339
+ <co-dialog *ngIf="showFilesDialog" (closeClick)="attachmentDialogCancelled()"
340
+ [headerTemplate]="attachmentHeaderTemplate"
341
+ [footerTemplate]="attachmentFooterTemplate">
351
342
 
352
- <ng-template #attachmentFooterTemplate>
353
- <div class="co-dialog-footer-button-wrapper">
354
- <co-button class="save-button"
355
- [iconData]="iconService.getIcon(icons.CheckDuotone)"
356
- (click)="attachmentDialogClosed()"></co-button>
357
- <co-button class="close-button"
358
- [iconData]="iconService.getIcon(icons.CrossSkinny)"
359
- (click)="attachmentDialogCancelled()"></co-button>
343
+ <ng-template #attachmentHeaderTemplate>
344
+ <div class="co-dialog-wrapper-popup-title">
345
+ <co-icon [iconData]="iconService.getIcon(icons.PaperclipRegular)"></co-icon>
346
+ <div class="co-dialog-header-title" [textContent]="'ATTACHMENTS' | sharedLocalize"></div>
360
347
  </div>
361
348
  </ng-template>
362
- `,
349
+ <co-files-upload (documentsAdded)="addedDocument($event)" (documentDeleted)="deletedDocument"
350
+ [documents]="documents" [useWithoutSettingProps]="true"></co-files-upload>
351
+ </co-dialog>
352
+
353
+
354
+ <ng-template #attachmentFooterTemplate>
355
+ <div class="co-dialog-footer-button-wrapper">
356
+ <co-button class="save-button"
357
+ [iconData]="iconService.getIcon(icons.CheckDuotone)"
358
+ (click)="attachmentDialogClosed()"></co-button>
359
+ <co-button class="close-button"
360
+ [iconData]="iconService.getIcon(icons.CrossSkinny)"
361
+ (click)="attachmentDialogCancelled()"></co-button>
362
+ </div>
363
+ </ng-template>
364
+ `,
363
365
  providers: [
364
- FormMasterService
366
+ FormMasterService,
367
+ {
368
+ provide: SCREEN_CONFIG_ADAPTER_COMPONENT_INTERFACE_NAME,
369
+ useExisting: forwardRef(() => TaskCreatorComponent)
370
+ }
365
371
  ]
366
372
  },] }
367
373
  ];
@@ -381,6 +387,7 @@ TaskCreatorComponent.propDecorators = {
381
387
  taskKey: [{ type: Input }],
382
388
  workflowCategoryType: [{ type: Input }],
383
389
  activityCreated: [{ type: Output }],
384
- showClass: [{ type: HostBinding, args: ["class.co-task-creator",] }]
390
+ showClass: [{ type: HostBinding, args: ["class.co-task-creator",] }],
391
+ hidden: [{ type: HostBinding, args: ['class.co-shared-hidden',] }]
385
392
  };
386
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay1jcmVhdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NoYXJlZGNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3Rhc2stY3JlYXRvci90YXNrLWNyZWF0b3IuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDckcsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQzFDLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBQ2xFLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUNuRSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sNENBQTRDLENBQUM7QUFDeEUsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLHlDQUF5QyxDQUFDO0FBRS9ELE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSw4Q0FBOEMsQ0FBQztBQUN2RSxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sdUNBQXVDLENBQUM7QUFDM0QsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLHVDQUF1QyxDQUFDO0FBRzNELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUVuRCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDM0QsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLCtDQUErQyxDQUFDO0FBRXpFLE9BQU8sRUFBQyxpQkFBaUIsRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUVqRyxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSx5REFBeUQsQ0FBQztBQUM3RixPQUFPLEVBQUMsaUJB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LElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1FBRTFCLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFFekIsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFFcEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUM7UUFDN0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUM7UUFDL0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUM7SUFDL0IsQ0FBQzs7O1lBcFlGLFNBQVMsU0FBQztnQkFDUCxRQUFRLEVBQUUsaUJBQWlCO2dCQUMzQixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7S0E2RFQ7Z0JBQ0gsU0FBUyxFQUFFO29CQUNULGlCQUFpQjtpQkFDbEI7YUFDRjs7O1lBMUZPLGdCQUFnQjtZQW9CaEIsaUNBQWlDO1lBUmpDLGFBQWE7WUFHYixpQkFBaUI7WUFBaUIsaUJBQWlCOzs7eUJBK0V4RCxTQUFTLFNBQUMsYUFBYTtxQkFHdkIsS0FBSzt1QkFHTCxLQUFLO29CQUdMLEtBQUs7K0JBR0wsS0FBSztzQkFHTCxLQUFLO21DQUdMLEtBQUs7OEJBR0wsTUFBTTt3QkFHTixXQUFXLFNBQUMsdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtJY29ufSBmcm9tICcuLi8uLi9lbnVtL2ljb24uZW51bSc7XHJcbmltcG9ydCB7SWNvbkNhY2hlU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZS9pY29uLWNhY2hlLnNlcnZpY2UnO1xyXG5pbXBvcnQge0FjdGl2aXR5fSBmcm9tICdAY29saWpuaXQvbWFpbmFwaS9idWlsZC9tb2RlbC9hY3Rpdml0eS5ibyc7XHJcbmltcG9ydCB7QWN0aXZpdHlUeXBlfSBmcm9tICdAY29saWpuaXQvbWFpbmFwaS9idWlsZC9lbnVtL2FjdGl2aXR5LXR5cGUnO1xyXG5pbXBvcnQge1JlbWFya30gZnJvbSAnQGNvbGlqbml0L21haW5hcGkvYnVpbGQvbW9kZWwvcmVtYXJrLmJvJztcclxuaW1wb3J0IHtSZWxhdGlvblNtYWxsT2JqZWN0fSBmcm9tICdAY29saWpuaXQvbWFpbmFwaS9idWlsZC9tb2RlbC9yZWxhdGlvbi1zbWFsbC1vYmplY3QuYm8nO1xyXG5pbXBvcnQge1RhYmxlTmFtZX0gZnJvbSAnQGNvbGlqbml0L21haW5hcGkvYnVpbGQvZW51bS90YWJsZS1uYW1lLmVudW0nO1xyXG5pbXBvcnQge1dvcmt9IGZyb20gJ0Bjb2xpam5pdC9tYWluYXBpL2J1aWxkL21vZGVsL3dvcmsuYm8nO1xyXG5pbXBvcnQge1Rhc2t9IGZyb20gJ0Bjb2xpam5pdC9tYWluYXBpL2J1aWxkL21vZGVsL3Rhc2suYm8nO1xyXG5pbXBvcnQge1dvcmtmbG93Q2F0ZWdvcnlUeXBlfSBmcm9tICdAY29saWpuaXQvbWFpbmFwaS9idWlsZC9lbnVtL3dvcmtmbG93LWNhdGVnb3J5LmVudW0nO1xyXG5pbXBvcnQge0NvRG9jdW1lbnR9IGZyb20gJ0Bjb2xpam5pdC9tYWluYXBpL2J1aWxkL21vZGVsL2NvLWRvY3VtZW50JztcclxuaW1wb3J0IHtBcnJheVV0aWxzfSBmcm9tICcuLi8uLi91dGlscy9hcnJheS11dGlscyc7XHJcbmltcG9ydCB7YWN0aXZpdHlFbWFpbFJlcXVlc3REYXRhfSBmcm9tICdAY29saWpuaXQvbWFpbmFwaS9idWlsZC9tb2RlbC9hY3Rpdml0eS1lbWFpbC1yZXF1ZXN0LWRhdGEnO1xyXG5pbXBvcnQge1NoYXJlZFNlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2Uvc2hhcmVkLnNlcnZpY2UnO1xyXG5pbXBvcnQge1JlcG9ydFR5cGV9IGZyb20gJ0Bjb2xpam5pdC9tYWluYXBpL2J1aWxkL2VudW0vcmVwb3J0LXR5cGUuZW51bSc7XHJcbmltcG9ydCB7UmVwb3J0fSBmcm9tICdAY29saWpuaXQvbWFpbmFwaS9idWlsZC9tb2RlbC9yZXBvcnQuYm8nO1xyXG5pbXBvcnQge0NvcmVEaWFsb2dTZXJ2aWNlLCBGb3JtQ29tcG9uZW50LCBGb3JtTWFzdGVyU2VydmljZX0gZnJvbSAnQGNvbGlqbml0L2NvcmVjb21wb25lbnRzX3YxMic7XHJcbmltcG9ydCB7SWNvbkxpc3RJdGVtfSBmcm9tICdAY29saWpuaXQvY29yZWNvbXBvbmVudHNfdjEyL2xpYi9tb2RlbC9pY29uLWxpc3QtaXRlbSc7XHJcbmltcG9ydCB7QWN0aXZpdHlFbWFpbEhpc3Rvcnl9IGZyb20gJ0Bjb2xpam5pdC9tYWluYXBpL2J1aWxkL21vZGVsL2FjdGl2aXR5LWVtYWlsLWhpc3RvcnkuYm8nO1xyXG5pbXBvcnQge0NvRW1haWxBdHRhY2htZW50fSBmcm9tICdAY29saWpuaXQvbWFpbmFwaS9idWlsZC9tb2RlbC9jby1lbWFpbC1hdHRhY2htZW50LmJvJztcclxuaW1wb3J0IHtGaWxlVXRpbHN9IGZyb20gJ0Bjb2xpam5pdC9tYWluYXBpL2J1aWxkL3V0aWxzL2ZpbGUtdXRpbHMnO1xyXG5pbXBvcnQge1NoYXJlZENvbXBvbmVudHNEaWN0aW9uYXJ5U2VydmljZX0gZnJvbSAnLi4vLi4vdHJhbnNsYXRpb24vc2hhcmVkLWNvbXBvbmVudHMtZGljdGlvbmFyeS5zZXJ2aWNlJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiBcImNvLXRhc2stY3JlYXRvclwiLFxyXG4gICAgdGVtcGxhdGU6IGBcclxuICAgICAgPGRpdiBjbGFzcz1cInRhc2stY3JlYXRvci13cmFwcGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRvcC1yb3dzXCI+XHJcbiAgICAgICAgICA8Y28tZW1haWwtc2VsZWN0b3IgWyhlbWFpbEFkZHJlc3NlcyldPVwiZW1haWxBZGRyZXNzZXNcIiBbKGJjY0VtYWlsQWRkcmVzc2VzKV09XCJiY2NFbWFpbEFkZHJlc3Nlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2tleV09XCJyZW1hcmtBbmRXb3JrS2V5XCIgW3dvcmtmbG93Q2F0ZWdvcnlUeXBlXT1cIndvcmtmbG93Q2F0ZWdvcnlUeXBlXCI+PC9jby1lbWFpbC1zZWxlY3Rvcj5cclxuICAgICAgICAgIDxjby1mb3JtICNjcmVhdGVGb3JtIGNsYXNzPVwiY3JlYXRvci1yZW1hcmtzIGlucHV0LWZpZWxkc1wiPlxyXG4gICAgICAgICAgICA8Y28tbGlzdC1vZi1pY29ucyBbY29sbGVjdGlvbl09XCJvcHRpb25Db2xsZWN0aW9uXCIgKGl0ZW1TZWxlY3RlZCk9XCJpdGVtU2VsZWN0ZWQoJGV2ZW50KVwiPjwvY28tbGlzdC1vZi1pY29ucz5cclxuICAgICAgICAgICAgPGNvLWlucHV0LXRleHRhcmVhICpuZ0lmPVwiY2hvc2VuQWN0aXZpdHlUeXBlID09PSBvcHRpb25Db2xsZWN0aW9uWzBdXCIgW3JlcXVpcmVkXT1cImNob3NlbkFjdGl2aXR5VHlwZSA9PT0gb3B0aW9uQ29sbGVjdGlvblswXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInUkVNQVJLJyB8IHNoYXJlZExvY2FsaXplXCIgWyhtb2RlbCldPVwicmVtYXJrVGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibGFyZ2UtcmVtYXJrXCI+PC9jby1pbnB1dC10ZXh0YXJlYT5cclxuICAgICAgICAgICAgPGNvLWlucHV0LXRleHRhcmVhICpuZ0lmPVwiY2hvc2VuQWN0aXZpdHlUeXBlID09PSBvcHRpb25Db2xsZWN0aW9uWzFdXCIgW3JlcXVpcmVkXT1cImNob3NlbkFjdGl2aXR5VHlwZSA9PT0gb3B0aW9uQ29sbGVjdGlvblsxXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInREVTQ1JJUFRJT04nIHwgc2hhcmVkTG9jYWxpemVcIiBbKG1vZGVsKV09XCJ3b3JrRGVzY3JpcHRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImxhcmdlLXJlbWFya1wiPjwvY28taW5wdXQtdGV4dGFyZWE+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YXNrLWlucHV0LWZpZWxkc1wiICpuZ0lmPVwiY2hvc2VuQWN0aXZpdHlUeXBlID09PSBvcHRpb25Db2xsZWN0aW9uWzJdXCI+XHJcbiAgICAgICAgICAgICAgPGNvLWlucHV0LXRleHQgWyhtb2RlbCldPVwidGFza05hbWVcIiBbcGxhY2Vob2xkZXJdPVwiJ05BTUUnIHwgc2hhcmVkTG9jYWxpemVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJjaG9zZW5BY3Rpdml0eVR5cGUgPT09IG9wdGlvbkNvbGxlY3Rpb25bMl1cIj48L2NvLWlucHV0LXRleHQ+XHJcbiAgICAgICAgICAgICAgPGNvLWlucHV0LXRleHRhcmVhIFsobW9kZWwpXT1cInRhc2tEZXNjcmlwdGlvblwiIFtwbGFjZWhvbGRlcl09XCInREVTQ1JJUFRJT04nIHwgc2hhcmVkTG9jYWxpemVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibGFyZ2UtcmVtYXJrXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwiY2hvc2VuQWN0aXZpdHlUeXBlID09PSBvcHRpb25Db2xsZWN0aW9uWzJdXCI+PC9jby1pbnB1dC10ZXh0YXJlYT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2NvLWZvcm0+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImV4dHJhcy1idXR0b25zXCI+XHJcbiAgICAgICAgICA8Y28tYnV0dG9uIFtpY29uRGF0YV09XCJpY29uU2VydmljZS5nZXRJY29uKGljb25zLlBhcGVyY2xpcFJlZ3VsYXIpXCIgIChjbGljayk9XCJvcGVuQXR0YWNobWVudERpYWxvZygpXCJcclxuICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImRvY3VtZW50cy5sZW5ndGggPT09IDAgPyAnJyA6IGRvY3VtZW50cy5sZW5ndGgudG9TdHJpbmcoKVwiID48L2NvLWJ1dHRvbj5cclxuICAgICAgICAgIDxjby1idXR0b24gKm5nSWY9XCJjaG9zZW5BY3Rpdml0eVR5cGUgPT09IG9wdGlvbkNvbGxlY3Rpb25bMF1cIlxyXG4gICAgICAgICAgICAgICAgICAgICBbaWNvbkRhdGFdPVwiaWNvblNlcnZpY2UuZ2V0SWNvbihpY29ucy5QYXBlclBsYW5lVG9wU29saWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNyZWF0ZVJlbWFya0NsaWNrZWQoKVwiPjwvY28tYnV0dG9uPlxyXG4gICAgICAgICAgPGNvLWJ1dHRvbiAqbmdJZj1cImNob3NlbkFjdGl2aXR5VHlwZSA9PT0gb3B0aW9uQ29sbGVjdGlvblsxXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtpY29uRGF0YV09XCJpY29uU2VydmljZS5nZXRJY29uKGljb25zLlBhcGVyUGxhbmVUb3BTb2xpZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY3JlYXRlV29ya0NsaWNrZWQoKVwiPjwvY28tYnV0dG9uPlxyXG4gICAgICAgICAgPGNvLWJ1dHRvbiAqbmdJZj1cImNob3NlbkFjdGl2aXR5VHlwZSA9PT0gb3B0aW9uQ29sbGVjdGlvblsyXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtpY29uRGF0YV09XCJpY29uU2VydmljZS5nZXRJY29uKGljb25zLlBhcGVyUGxhbmVUb3BTb2xpZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY3JlYXRlVGFza0NsaWNrZWQoKVwiPjwvY28tYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGNvLWRpYWxvZyAqbmdJZj1cInNob3dGaWxlc0RpYWxvZ1wiIChjbG9zZUNsaWNrKT1cImF0dGFjaG1lbnREaWFsb2dDYW5jZWxsZWQoKVwiXHJcbiAgICAgICAgICAgICAgICAgW2hlYWRlclRlbXBsYXRlXT1cImF0dGFjaG1lbnRIZWFkZXJUZW1wbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgW2Zvb3RlclRlbXBsYXRlXT1cImF0dGFjaG1lbnRGb290ZXJUZW1wbGF0ZVwiPlxyXG5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI2F0dGFjaG1lbnRIZWFkZXJUZW1wbGF0ZT5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjby1kaWFsb2ctd3JhcHBlci1wb3B1cC10aXRsZVwiPlxyXG4gICAgICAgICAgICA8Y28taWNvbiBbaWNvbkRhdGFdPVwiaWNvblNlcnZpY2UuZ2V0SWNvbihpY29ucy5QYXBlcmNsaXBSZWd1bGFyKVwiPjwvY28taWNvbj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvLWRpYWxvZy1oZWFkZXItdGl0bGVcIiBbdGV4dENvbnRlbnRdPVwiJ0FUVEFDSE1FTlRTJyB8IHNoYXJlZExvY2FsaXplXCI+PC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDxjby1maWxlcy11cGxvYWQgKGRvY3VtZW50c0FkZGVkKT1cImFkZGVkRG9jdW1lbnQoJGV2ZW50KVwiIChkb2N1bWVudERlbGV0ZWQpPVwiZGVsZXRlZERvY3VtZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtkb2N1bWVudHNdPVwiZG9jdW1lbnRzXCIgW3VzZVdpdGhvdXRTZXR0aW5nUHJvcHNdPVwidHJ1ZVwiPjwvY28tZmlsZXMtdXBsb2FkPlxyXG4gICAgICA8L2NvLWRpYWxvZz5cclxuXHJcblxyXG4gICAgICA8bmctdGVtcGxhdGUgI2F0dGFjaG1lbnRGb290ZXJUZW1wbGF0ZT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY28tZGlhbG9nLWZvb3Rlci1idXR0b24td3JhcHBlclwiPlxyXG4gICAgICAgICAgPGNvLWJ1dHRvbiBjbGFzcz1cInNhdmUtYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgW2ljb25EYXRhXT1cImljb25TZXJ2aWNlLmdldEljb24oaWNvbnMuQ2hlY2tEdW90b25lKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhdHRhY2htZW50RGlhbG9nQ2xvc2VkKClcIj48L2NvLWJ1dHRvbj5cclxuICAgICAgICAgIDxjby1idXR0b24gY2xhc3M9XCJjbG9zZS1idXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICBbaWNvbkRhdGFdPVwiaWNvblNlcnZpY2UuZ2V0SWNvbihpY29ucy5Dcm9zc1NraW5ueSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYXR0YWNobWVudERpYWxvZ0NhbmNlbGxlZCgpXCI+PC9jby1idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICBgLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAgRm9ybU1hc3RlclNlcnZpY2VcclxuICBdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGFza0NyZWF0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXR7XHJcbiAgcHVibGljIHJlYWRvbmx5IGljb25zOiB0eXBlb2YgSWNvbiA9IEljb247XHJcblxyXG4gIEBWaWV3Q2hpbGQoRm9ybUNvbXBvbmVudClcclxuICBwdWJsaWMgY3JlYXRlRm9ybTogRm9ybUNvbXBvbmVudDtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgYXV0aG9yOiBSZWxhdGlvblNtYWxsT2JqZWN0O1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBicmFuY2hObzogc3RyaW5nO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyB0YWJsZTogVGFibGVOYW1lID0gVGFibGVOYW1lLlRyYW5zYWN0aW9ucztcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgcmVtYXJrQW5kV29ya0tleTogc3RyaW5nO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyB0YXNrS2V5OiBzdHJpbmc7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHdvcmtmbG93Q2F0ZWdvcnlUeXBlOiBXb3JrZmxvd0NhdGVnb3J5VHlwZTtcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIGFjdGl2aXR5Q3JlYXRlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICBASG9zdEJpbmRpbmcoXCJjbGFzcy5jby10YXNrLWNyZWF0b3JcIilcclxuICBwdWJsaWMgc2hvd0NsYXNzKCkge1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb3B0aW9uQ29sbGVjdGlvbjogSWNvbkxpc3RJdGVtW10gPSBbXHJcbiAgICB7IGljb246IHRoaXMuaWNvblNlcnZpY2UuZ2V0SWNvbih0aGlzLmljb25zLkNvbW1lbnRSZWd1bGFyKSxsYWJlbDogdGhpcy5kaWN0aW9uYXJ5U2VydmljZS5nZXQoJ1JFTUFSSycsIHRydWUpIH0sXHJcbiAgICB7IGljb246IHRoaXMuaWNvblNlcnZpY2UuZ2V0SWNvbih0aGlzLmljb25zLlBlcnNvbkRpZ2dpbmdSZWd1bGFyKSwgbGFiZWw6IHRoaXMuZGljdGlvbmFyeVNlcnZpY2UuZ2V0KCdXT1JLJywgdHJ1ZSkgfSxcclxuICAgIHsgaWNvbjogdGhpcy5pY29uU2VydmljZS5nZXRJY29uKHRoaXMuaWNvbnMuTGlzdFVsUmVndWxhciksIGxhYmVsOiB0aGlzLmRpY3Rpb25hcnlTZXJ2aWNlLmdldCgnVEFTSycsIHRydWUpIH0sXHJcbiAgXTtcclxuXHJcbiAgcHVibGljIHNob3dGaWxlc0RpYWxvZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBkb2N1bWVudHM6IENvRG9jdW1lbnRbXSA9IFtdO1xyXG4gIHB1YmxpYyBvbGREb2N1bWVudHM6IENvRG9jdW1lbnRbXSA9IFtdO1xyXG5cclxuXHJcbiAgcHVibGljIHNob3dFbWFpbERpYWxvZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBzZW5kZXJBZGRyZXNzOiBzdHJpbmcgPSAnJztcclxuICBwdWJsaWMgZW1haWxBZGRyZXNzZXM6IHN0cmluZ1tdID0gW107XHJcbiAgcHVibGljIGJjY0VtYWlsQWRkcmVzc2VzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICBwdWJsaWMgZW1haWxSZXF1ZXN0OiBhY3Rpdml0eUVtYWlsUmVxdWVzdERhdGEgPSBudWxsO1xyXG5cclxuICBwdWJsaWMgY3JlYXRlZFRhc2s6IFRhc2s7XHJcbiAgcHVibGljIGNyZWF0ZWRSZW1hcms6IFJlbWFyaztcclxuICBwdWJsaWMgY3JlYXRlZFdvcms6IFdvcms7XHJcbiAgcHVibGljIGNob3NlbkFjdGl2aXR5VHlwZTogSWNvbkxpc3RJdGVtO1xyXG5cclxuICBwdWJsaWMgcmVtYXJrVGV4dDogc3RyaW5nID0gXCJcIjtcclxuICBwdWJsaWMgd29ya0Rlc2NyaXB0aW9uOiBzdHJpbmcgPSBcIlwiO1xyXG4gIHB1YmxpYyB0YXNrTmFtZTogc3RyaW5nID0gXCJcIjtcclxuICBwdWJsaWMgdGFza0Rlc2NyaXB0aW9uOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgaWNvblNlcnZpY2U6IEljb25DYWNoZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgcHVibGljIGRpY3Rpb25hcnlTZXJ2aWNlOiBTaGFyZWRDb21wb25lbnRzRGljdGlvbmFyeVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgcHVibGljIHNoYXJlZFNlcnZpY2U6IFNoYXJlZFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfZGlhbG9nU2VydmljZTogQ29yZURpYWxvZ1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfZm9ybU1hc3RlclNlcnZpY2U6IEZvcm1NYXN0ZXJTZXJ2aWNlLFxyXG4gICkge1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmNob3NlbkFjdGl2aXR5VHlwZSA9IHRoaXMub3B0aW9uQ29sbGVjdGlvblswXTtcclxuICAgIHRoaXMuc2VuZGVyQWRkcmVzcyA9IGF3YWl0IHRoaXMuc2hhcmVkU2VydmljZS5nZXRFbWFpbFNlbmRlckJ5V29ya2Zsb3dDYXRlZ29yeUFuZEtleSgnU0VSVklDRV9PUkRFUicsIHRoaXMucmVtYXJrQW5kV29ya0tleSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaXRlbVNlbGVjdGVkKGl0ZW06IEljb25MaXN0SXRlbSk6IHZvaWQge1xyXG4gICAgdGhpcy5jaG9zZW5BY3Rpdml0eVR5cGUgPSBpdGVtO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9wZW5BdHRhY2htZW50RGlhbG9nKCk6IHZvaWQge1xyXG4gICAgdGhpcy5vbGREb2N1bWVudHMgPSB0aGlzLmRvY3VtZW50cy5zbGljZSgpO1xyXG4gICAgdGhpcy5zaG93RmlsZXNEaWFsb2cgPSB0cnVlXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXR0YWNobWVudERpYWxvZ0Nsb3NlZCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2hvd0ZpbGVzRGlhbG9nID0gZmFsc2VcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhdHRhY2htZW50RGlhbG9nQ2FuY2VsbGVkKCk6IHZvaWQge1xyXG4gICAgdGhpcy5kb2N1bWVudHMgPSB0aGlzLm9sZERvY3VtZW50cy5zbGljZSgpO1xyXG4gICAgdGhpcy5zaG93RmlsZXNEaWFsb2cgPSBmYWxzZVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGFkZGVkRG9jdW1lbnQoZG9jczogQ29Eb2N1bWVudFtdKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLmRvY3VtZW50cyA9IHRoaXMuZG9jdW1lbnRzLmNvbmNhdChkb2NzKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBkZWxldGVkRG9jdW1lbnQoZG9jOiBDb0RvY3VtZW50KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBBcnJheVV0aWxzLlJlbW92ZUVsZW1lbnQoZG9jLCB0aGlzLmRvY3VtZW50cyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgY3JlYXRlUmVtYXJrQ2xpY2tlZCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuX2Zvcm1NYXN0ZXJTZXJ2aWNlLnN1Ym1pdFNsYXZlcygpO1xyXG4gICAgaWYgKHRoaXMuY3JlYXRlRm9ybS5pc1ZhbGlkKCkpIHtcclxuICAgICAgbGV0IHJlbWFyazogUmVtYXJrID0gdGhpcy5jcmVhdGVSZW1hcmsoKTtcclxuXHJcbiAgICAgIGxldCBhY3Rpdml0eTogQWN0aXZpdHkgPSBuZXcgQWN0aXZpdHkoKTtcclxuICAgICAgYWN0aXZpdHkuYWN0aXZpdHlUeXBlID0gQWN0aXZpdHlUeXBlLlJlbWFyaztcclxuICAgICAgYWN0aXZpdHkucmVtYXJrID0gcmVtYXJrO1xyXG5cclxuICAgICAgdGhpcy5jcmVhdGVkUmVtYXJrID0gYXdhaXQgdGhpcy5zaGFyZWRTZXJ2aWNlLmluc2VydFJlbWFyayhhY3Rpdml0eSk7XHJcbiAgICAgIGlmICh0aGlzLmNyZWF0ZWRSZW1hcmspIHtcclxuICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZUFmdGVyQ3JlYXRpb24oKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGNyZWF0ZVdvcmtDbGlja2VkKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5fZm9ybU1hc3RlclNlcnZpY2Uuc3VibWl0U2xhdmVzKCk7XHJcbiAgICBpZiAodGhpcy5jcmVhdGVGb3JtLmlzVmFsaWQoKSkge1xyXG4gICAgICBsZXQgd29yazogV29yayA9IHRoaXMuY3JlYXRlV29yaygpO1xyXG5cclxuICAgICAgbGV0IGFjdGl2aXR5OiBBY3Rpdml0eSA9IG5ldyBBY3Rpdml0eSgpO1xyXG4gICAgICBhY3Rpdml0eS5hY3Rpdml0eVR5cGUgPSBBY3Rpdml0eVR5cGUuV29yaztcclxuICAgICAgYWN0aXZpdHkud29yayA9IHdvcms7XHJcblxyXG4gICAgICB0aGlzLmNyZWF0ZWRXb3JrID0gYXdhaXQgdGhpcy5zaGFyZWRTZXJ2aWNlLmluc2VydFdvcmsoYWN0aXZpdHkpO1xyXG4gICAgICBpZiAodGhpcy5jcmVhdGVkV29yaykge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlQWZ0ZXJDcmVhdGlvbigpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgY3JlYXRlVGFza0NsaWNrZWQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLl9mb3JtTWFzdGVyU2VydmljZS5zdWJtaXRTbGF2ZXMoKTtcclxuICAgIGlmICh0aGlzLmNyZWF0ZUZvcm0uaXNWYWxpZCgpKSB7XHJcbiAgICAgIGNvbnN0IHRhc2sgPSB0aGlzLmNyZWF0ZVRhc2soKTtcclxuXHJcbiAgICAgIGxldCBhY3Rpdml0eTogQWN0aXZpdHkgPSBuZXcgQWN0aXZpdHkoKTtcclxuICAgICAgYWN0aXZpdHkuYWN0aXZpdHlUeXBlID0gQWN0aXZpdHlUeXBlLlRhc2s7XHJcbiAgICAgIGFjdGl2aXR5LnRhc2sgPSB0YXNrO1xyXG5cclxuICAgICAgdGhpcy5jcmVhdGVkVGFzayA9IGF3YWl0IHRoaXMuc2hhcmVkU2VydmljZS5pbnNlcnRUYXNrKGFjdGl2aXR5KTtcclxuICAgICAgaWYgKHRoaXMuY3JlYXRlZFRhc2spIHtcclxuICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZUFmdGVyQ3JlYXRpb24oKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVSZW1hcmsoKTogUmVtYXJrIHtcclxuICAgIGxldCByZW1hcms6IFJlbWFyayA9IG5ldyBSZW1hcmsoKTtcclxuICAgIHJlbWFyay5hdXRob3IgPSB0aGlzLmF1dGhvcjtcclxuICAgIHJlbWFyay5hdXRob3IuaW1hZ2UgPSB1bmRlZmluZWQ7XHJcbiAgICByZW1hcmsuZG9jdW1lbnRzID0gdGhpcy5kb2N1bWVudHM7XHJcbiAgICByZW1hcmsucmVtYXJrID0gdGhpcy5yZW1hcmtUZXh0O1xyXG4gICAgcmVtYXJrLmRhdGVUaW1lID0gbmV3IERhdGUoKTtcclxuICAgIHJlbWFyay50YWJsZSA9IHRoaXMudGFibGU7XHJcbiAgICByZW1hcmsua2V5ID0gdGhpcy5yZW1hcmtBbmRXb3JrS2V5O1xyXG4gICAgcmVtYXJrLnJlYWQgPSBmYWxzZTtcclxuICAgIHJlbWFyay5jdXJyZW50ID0gdHJ1ZTtcclxuXHJcbiAgICByZXR1cm4gcmVtYXJrO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVXb3JrKCk6IFdvcmsge1xyXG4gICAgbGV0IHdvcms6IFdvcmsgPSBuZXcgV29yaygpO1xyXG4gICAgd29yay5leGVjdXRpdmUgPSB0aGlzLmF1dGhvcjtcclxuICAgIHdvcmsuZXhlY3V0aXZlLmltYWdlID0gdW5kZWZpbmVkO1xyXG4gICAgd29yay5kb2N1bWVudHMgPSB0aGlzLmRvY3VtZW50cztcclxuICAgIHdvcmsud29ya2VkVGltZSA9IDA7XHJcbiAgICB3b3JrLndvcmtEZXNjcmlwdGlvbiA9IHRoaXMud29ya0Rlc2NyaXB0aW9uXHJcbiAgICB3b3JrLmRhdGVUaW1lID0gbmV3IERhdGUoKTtcclxuICAgIHdvcmsudGFibGUgPSB0aGlzLnRhYmxlO1xyXG4gICAgd29yay5rZXkgPSB0aGlzLnJlbWFya0FuZFdvcmtLZXk7XHJcblxyXG4gICAgcmV0dXJuIHdvcms7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZVRhc2soKTogVGFzayB7XHJcbiAgICBsZXQgdGFzazogVGFzayA9IG5ldyBUYXNrKCk7XHJcbiAgICB0YXNrLmV4ZWN1dGl2ZSA9IHRoaXMuYXV0aG9yO1xyXG4gICAgdGFzay5leGVjdXRpdmUuaW1hZ2UgPSB1bmRlZmluZWQ7XHJcbiAgICB0YXNrLnJlcG9ydGVyID0gdGhpcy5hdXRob3I7XHJcbiAgICB0YXNrLnJlcG9ydGVyLmltYWdlID0gdW5kZWZpbmVkO1xyXG4gICAgdGFzay5kb2N1bWVudHMgPSB0aGlzLmRvY3VtZW50cztcclxuICAgIHRhc2submFtZSA9IHRoaXMudGFza05hbWU7XHJcbiAgICB0YXNrLmRlc2NyaXB0aW9uID0gdGhpcy50YXNrRGVzY3JpcHRpb247XHJcbiAgICB0YXNrLmNyZWF0aW9uRGF0ZVRpbWUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgdGFzay5kYXRlRGVmaW5hdGUgPSBmYWxzZTtcclxuICAgIHRhc2submVlZHNQbGFubmluZyA9IHRydWU7XHJcbiAgICB0YXNrLnByaW9yaXR5ID0gMDtcclxuICAgIHRhc2sud29ya2Zsb3dDYXRlZ29yeSA9IHRoaXMud29ya2Zsb3dDYXRlZ29yeVR5cGU7XHJcbiAgICB0YXNrLnJlZmVyZW5jZSA9IHRoaXMudGFza0tleTtcclxuICAgIHRhc2suZW1haWxBZGRyZXNzZXMgPSB0aGlzLmVtYWlsQWRkcmVzc2VzO1xyXG5cclxuICAgIHJldHVybiB0YXNrO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVBZnRlckNyZWF0aW9uKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5hY3Rpdml0eUNyZWF0ZWQuZW1pdCgpO1xyXG4gICAgYXdhaXQgdGhpcy5zZW5kRW1haWxJZk5lY2Nlc2FyeSgpO1xyXG4gICAgdGhpcy5jbGVhckZpZWxkcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBzZW5kRW1haWxJZk5lY2Nlc2FyeSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICh0aGlzLmVtYWlsQWRkcmVzc2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgbGV0IHRlbXBsYXRlczogUmVwb3J0W10gPSBhd2FpdCB0aGlzLnNoYXJlZFNlcnZpY2UuZ2V0RGVmYXVsdEVtYWlsUmVwb3J0VGVtcGxhdGVzRm9yQnJhbmNoKHRoaXMuYnJhbmNoTm8sIHRoaXMuZmluZFJlcG9ydFR5cGUoKSk7XHJcbiAgICAgIGlmICh0ZW1wbGF0ZXMubGVuZ3RoICE9IDApIHtcclxuICAgICAgICBsZXQgdGVtcGxhdGU6IFJlcG9ydCA9IHRoaXMuZmluZERlZmF1bHQodGVtcGxhdGVzKTtcclxuICAgICAgICBpZiAodGVtcGxhdGUpIHtcclxuICAgICAgICAgIGF3YWl0IHRoaXMuc3RhcnRFbWFpbGluZyh0ZW1wbGF0ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuX2RpYWxvZ1NlcnZpY2Uuc2hvd0Vycm9yKCdOT19ERUZBVUxUX0VNQUlMX1RFTVBMQVRFX0ZPUl9SRVBPUlQnKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmluZFJlcG9ydFR5cGUoKTogUmVwb3J0VHlwZSB7XHJcbiAgICBpZiAodGhpcy5jaG9zZW5BY3Rpdml0eVR5cGUgPT09IHRoaXMub3B0aW9uQ29sbGVjdGlvblswXSkge1xyXG4gICAgICByZXR1cm4gUmVwb3J0VHlwZS5SZW1hcmtNZXNzYWdlO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmNob3NlbkFjdGl2aXR5VHlwZSA9PT0gdGhpcy5vcHRpb25Db2xsZWN0aW9uWzFdKSB7XHJcbiAgICAgIHJldHVybiBSZXBvcnRUeXBlLldvcmtNZXNzYWdlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIFJlcG9ydFR5cGUuVGFza01lc3NhZ2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpbmREZWZhdWx0KHJlcG9ydExpc3Q6IFJlcG9ydFtdKTogUmVwb3J0IHtcclxuICAgIGxldCBkZWZhdWx0VGVtcGxhdGU6IFJlcG9ydCA9IG51bGw7XHJcbiAgICByZXBvcnRMaXN0LmZvckVhY2gociA9PiB7XHJcbiAgICAgIGlmKHIuaXNEZWZhdWx0KSB7XHJcbiAgICAgICAgZGVmYXVsdFRlbXBsYXRlID0gIHI7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGRlZmF1bHRUZW1wbGF0ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgc3RhcnRFbWFpbGluZyh0ZW1wbGF0ZTogUmVwb3J0KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBlbWFpbHNTZW50OmJvb2xlYW4gPSBhd2FpdCB0aGlzLnNoYXJlZFNlcnZpY2UuZW1haWxWaWFUZW1wbGF0ZSh0ZW1wbGF0ZSwgdGhpcy5jcmVhdGVFbWFpbEFkZHJlc3NTdHJpbmcodGhpcy5lbWFpbEFkZHJlc3NlcyksIHRoaXMuY3JlYXRlRW1haWxBZGRyZXNzU3RyaW5nKHRoaXMuYmNjRW1haWxBZGRyZXNzZXMpLFxyXG4gICAgICB0aGlzLnNlbmRlckFkZHJlc3MsIHRoaXMuY3JlYXRlRW1haWxTdWJqZWN0KCksIFwiXCIsIHRoaXMuY3JlYXRlQXR0YWNobWVudHNBcnJheSgpLCB0aGlzLmNyZWF0ZUVtYWlsUGFyYW1zKCkpO1xyXG4gICAgaWYoZW1haWxzU2VudCkge1xyXG4gICAgICBsZXQgaGlzdG9yeTogQWN0aXZpdHlFbWFpbEhpc3RvcnkgPSBuZXcgQWN0aXZpdHlFbWFpbEhpc3RvcnkoKTtcclxuICAgICAgaGlzdG9yeS5lbWFpbEFkZHJlc3NlcyA9IHRoaXMuY3JlYXRlRW1haWxBZGRyZXNzU3RyaW5nKHRoaXMuZW1haWxBZGRyZXNzZXMpO1xyXG4gICAgICBoaXN0b3J5LmVtYWlsRGF0ZVRpbWUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICBoaXN0b3J5Lm1lc3NhZ2UgPSAnRW1haWwgQ29udGVudCBjcmVhdGVkIHZpYSBSZXBvcnQnO1xyXG4gICAgICBpZiAodGhpcy5jaG9zZW5BY3Rpdml0eVR5cGUgPT09IHRoaXMub3B0aW9uQ29sbGVjdGlvblswXSkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuc2hhcmVkU2VydmljZS5pbnNlcnRFbWFpbEhpc3RvcnlGb3JSZW1hcmsodGhpcy5jcmVhdGVkUmVtYXJrLnJlbWFya0lkLCBoaXN0b3J5KTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNob3NlbkFjdGl2aXR5VHlwZSA9PT0gdGhpcy5vcHRpb25Db2xsZWN0aW9uWzFdKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5zaGFyZWRTZXJ2aWNlLmluc2VydEVtYWlsSGlzdG9yeUZvcldvcmsodGhpcy5jcmVhdGVkV29yay53b3JrSWQsIGhpc3RvcnkpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuc2hhcmVkU2VydmljZS5pbnNlcnRFbWFpbEhpc3RvcnlGb3JUYXNrKHRoaXMuY3JlYXRlZFRhc2sudGFza0lkLCBoaXN0b3J5KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVFbWFpbEFkZHJlc3NTdHJpbmcoYWRkcmVzc2VzOiBzdHJpbmdbXSApOiBzdHJpbmcge1xyXG4gICAgaWYgKGFkZHJlc3Nlcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGFkZHJlc3Nlcy5qb2luKCc7Jyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUVtYWlsU3ViamVjdCgpOiBzdHJpbmcge1xyXG4gICAgbGV0IHN1YmplY3Q6IHN0cmluZyA9IFwiLSBcIjtcclxuICAgIGlmICh0aGlzLmNyZWF0ZWRSZW1hcmspIHtcclxuICAgICAgc3ViamVjdCArPSB0aGlzLmRpY3Rpb25hcnlTZXJ2aWNlLmdldChcIlJFTUFSS1wiKSArIFwiIFwiICsgdGhpcy5jcmVhdGVkUmVtYXJrLnJlbWFya0lkO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmNyZWF0ZWRXb3JrKSB7XHJcbiAgICAgIHN1YmplY3QgKz0gdGhpcy5kaWN0aW9uYXJ5U2VydmljZS5nZXQoXCJXT1JLXCIpICsgXCIgXCIgKyB0aGlzLmNyZWF0ZWRXb3JrLndvcmtJZDtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5jcmVhdGVkVGFzaykge1xyXG4gICAgICBzdWJqZWN0ICs9ICh0aGlzLmNyZWF0ZWRUYXNrLndvcmtmbG93Q2F0ZWdvcnkgPyB0aGlzLmNyZWF0ZWRUYXNrLndvcmtmbG93Q2F0ZWdvcnkgOiB0aGlzLmRpY3Rpb25hcnlTZXJ2aWNlLmdldChcIlRBU0tcIikpICsgXCIgXCIgK1xyXG4gICAgICAgICh0aGlzLmNyZWF0ZWRUYXNrLndvcmtmbG93Q2F0ZWdvcnkgP3RoaXMuY3JlYXRlZFRhc2sucmVmZXJlbmNlIDogdGhpcy5jcmVhdGVkVGFzay50YXNrSWQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN1YmplY3Q7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUF0dGFjaG1lbnRzQXJyYXkoKTogQ29FbWFpbEF0dGFjaG1lbnRbXSB7XHJcbiAgICBsZXQgYXR0YWNobWVudHM6IENvRW1haWxBdHRhY2htZW50W10gPSBbXTtcclxuICAgIGlmICh0aGlzLmRvY3VtZW50cy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuIGF0dGFjaG1lbnRzO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5kb2N1bWVudHMuZm9yRWFjaChkID0+IHtcclxuICAgICAgICBsZXQgYXR0YWNobWVudDogQ29FbWFpbEF0dGFjaG1lbnQgPSBuZXcgQ29FbWFpbEF0dGFjaG1lbnQoKTtcclxuICAgICAgICBhdHRhY2htZW50LmZpbGVuYW1lID0gZC5maWxlTmFtZTtcclxuICAgICAgICBpZiAoZC5maWxlTmFtZS5zcGxpdChcIi5cIikubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgY29uc3Qgc3RyOiBzdHJpbmdbXSA9IGQuZmlsZU5hbWUuc3BsaXQoXCIuXCIpO1xyXG4gICAgICAgICAgYXR0YWNobWVudC5leHRlbnNpb24gPSBzdHJbc3RyLmxlbmd0aCAtIDFdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhdHRhY2htZW50LmJvZHkgPSBGaWxlVXRpbHMuQ29udmVydFN0cmluZ1RvQXJyYXlCdWZmZXIoZC5kb2N1bWVudEJvZHkpO1xyXG4gICAgICAgIGF0dGFjaG1lbnRzLnB1c2goYXR0YWNobWVudCk7XHJcbiAgICAgIH0pXHJcbiAgICAgIHJldHVybiBhdHRhY2htZW50cztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlRW1haWxQYXJhbXMoKTogb2JqZWN0IHtcclxuICAgIGlmICh0aGlzLmNyZWF0ZWRSZW1hcmspIHtcclxuICAgICAgcmV0dXJuIHtvcG1lcmtpbmdfaWQ6IHRoaXMuY3JlYXRlZFJlbWFyay5yZW1hcmtJZCArIFwiXCJ9O1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmNyZWF0ZWRXb3JrKSB7XHJcbiAgICAgIHJldHVybiB7d2Vya3poX2lkOiB0aGlzLmNyZWF0ZWRXb3JrLndvcmtJZCArIFwiXCJ9O1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmNyZWF0ZWRUYXNrKSB7XHJcbiAgICAgIHJldHVybiB7dGFha19pZDogdGhpcy5jcmVhdGVkVGFzay50YXNrSWQgKyBcIlwifTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xlYXJGaWVsZHMoKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlbWFya1RleHQgPSBcIlwiO1xyXG4gICAgdGhpcy53b3JrRGVzY3JpcHRpb24gPSBcIlwiO1xyXG4gICAgdGhpcy50YXNrTmFtZSA9IFwiXCI7XHJcbiAgICB0aGlzLnRhc2tEZXNjcmlwdGlvbiA9IFwiXCI7XHJcblxyXG4gICAgdGhpcy5zZW5kZXJBZGRyZXNzID0gXCJcIjtcclxuICAgIHRoaXMuZW1haWxBZGRyZXNzZXMgPSBbXTtcclxuICAgIHRoaXMuYmNjRW1haWxBZGRyZXNzZXMgPSBbXTtcclxuICAgIHRoaXMuZW1haWxSZXF1ZXN0ID0gbnVsbDtcclxuXHJcbiAgICB0aGlzLmRvY3VtZW50cyA9IFtdO1xyXG5cclxuICAgIHRoaXMuY3JlYXRlZFdvcmsgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLmNyZWF0ZWRSZW1hcmsgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLmNyZWF0ZWRUYXNrID0gdW5kZWZpbmVkO1xyXG4gIH1cclxufVxyXG4iXX0=
393
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay1jcmVhdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NoYXJlZGNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3Rhc2stY3JlYXRvci90YXNrLWNyZWF0b3IuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ2pILE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUMxQyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUNsRSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sMkNBQTJDLENBQUM7QUFDbkUsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLDRDQUE0QyxDQUFDO0FBQ3hFLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSx5Q0FBeUMsQ0FBQztBQUUvRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sOENBQThDLENBQUM7QUFDdkUsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLHVDQUF1QyxDQUFDO0FBQzNELE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQztBQUczRCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFFbkQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQzNELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSwrQ0FBK0MsQ0FBQztBQUV6RSxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLGFBQWEsRUFDYixpQkFBaUIsRUFDakIsOENBQThDLEVBRS9DLE1BQU0sOEJBQThCLENBQUM7QUFFdEMsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0seURBQXlE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d0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBmb3J3YXJkUmVmLCBIb3N0QmluZGluZywgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0ljb259IGZyb20gJy4uLy4uL2VudW0vaWNvbi5lbnVtJztcclxuaW1wb3J0IHtJY29uQ2FjaGVTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlL2ljb24tY2FjaGUuc2VydmljZSc7XHJcbmltcG9ydCB7QWN0aXZpdHl9IGZyb20gJ0Bjb2xpam5pdC9tYWluYXBpL2J1aWxkL21vZGVsL2FjdGl2aXR5LmJvJztcclxuaW1wb3J0IHtBY3Rpdml0eVR5cGV9IGZyb20gJ0Bjb2xpam5pdC9tYWluYXBpL2J1aWxkL2VudW0vYWN0aXZpdHktdHlwZSc7XHJcbmltcG9ydCB7UmVtYXJrfSBmcm9tICdAY29saWpuaXQvbWFpbmFwaS9idWlsZC9tb2RlbC9yZW1hcmsuYm8nO1xyXG5pbXBvcnQge1JlbGF0aW9uU21hbGxPYmplY3R9IGZyb20gJ0Bjb2xpam5pdC9tYWluYXBpL2J1aWxkL21vZGVsL3JlbGF0aW9uLXNtYWxsLW9iamVjdC5ibyc7XHJcbmltcG9ydCB7VGFibGVOYW1lfSBmcm9tICdAY29saWpuaXQvbWFpbmFwaS9idWlsZC9lbnVtL3RhYmxlLW5hbWUuZW51bSc7XHJcbmltcG9ydCB7V29ya30gZnJvbSAnQGNvbGlqbml0L21haW5hcGkvYnVpbGQvbW9kZWwvd29yay5ibyc7XHJcbmltcG9ydCB7VGFza30gZnJvbSAnQGNvbGlqbml0L21haW5hcGkvYnVpbGQvbW9kZWwvdGFzay5ibyc7XHJcbmltcG9ydCB7V29ya2Zsb3dDYXRlZ29yeVR5cGV9IGZyb20gJ0Bjb2xpam5pdC9tYWluYXBpL2J1aWxkL2VudW0vd29ya2Zsb3ctY2F0ZWdvcnkuZW51bSc7XHJcbmltcG9ydCB7Q29Eb2N1bWVudH0gZnJvbSAnQGNvbGlqbml0L21haW5hcGkvYnVpbGQvbW9kZWwvY28tZG9jdW1lbnQnO1xyXG5pbXBvcnQge0FycmF5VXRpbHN9IGZyb20gJy4uLy4uL3V0aWxzL2FycmF5LXV0aWxzJztcclxuaW1wb3J0IHthY3Rpdml0eUVtYWlsUmVxdWVzdERhdGF9IGZyb20gJ0Bjb2xpam5pdC9tYWluYXBpL2J1aWxkL21vZGVsL2FjdGl2aXR5LWVtYWlsLXJlcXVlc3QtZGF0YSc7XHJcbmltcG9ydCB7U2hhcmVkU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZS9zaGFyZWQuc2VydmljZSc7XHJcbmltcG9ydCB7UmVwb3J0VHlwZX0gZnJvbSAnQGNvbGlqbml0L21haW5hcGkvYnVpbGQvZW51bS9yZXBvcnQtdHlwZS5lbnVtJztcclxuaW1wb3J0IHtSZXBvcnR9IGZyb20gJ0Bjb2xpam5pdC9tYWluYXBpL2J1aWxkL21vZGVsL3JlcG9ydC5ibyc7XHJcbmltcG9ydCB7XHJcbiAgQ29yZURpYWxvZ1NlcnZpY2UsXHJcbiAgRm9ybUNvbXBvbmVudCxcclxuICBGb3JtTWFzdGVyU2VydmljZSxcclxuICBTQ1JFRU5fQ09ORklHX0FEQVBURVJfQ09NUE9ORU5UX0lOVEVSRkFDRV9OQU1FLFxyXG4gIFNjcmVlbkNvbmZpZ0FkYXB0ZXJDb21wb25lbnRcclxufSBmcm9tICdAY29saWpuaXQvY29yZWNvbXBvbmVudHNfdjEyJztcclxuaW1wb3J0IHtJY29uTGlzdEl0ZW19IGZyb20gJ0Bjb2xpam5pdC9jb3JlY29tcG9uZW50c192MTIvbGliL21vZGVsL2ljb24tbGlzdC1pdGVtJztcclxuaW1wb3J0IHtBY3Rpdml0eUVtYWlsSGlzdG9yeX0gZnJvbSAnQGNvbGlqbml0L21haW5hcGkvYnVpbGQvbW9kZWwvYWN0aXZpdHktZW1haWwtaGlzdG9yeS5ibyc7XHJcbmltcG9ydCB7Q29FbWFpbEF0dGFjaG1lbnR9IGZyb20gJ0Bjb2xpam5pdC9tYWluYXBpL2J1aWxkL21vZGVsL2NvLWVtYWlsLWF0dGFjaG1lbnQuYm8nO1xyXG5pbXBvcnQge0ZpbGVVdGlsc30gZnJvbSAnQGNvbGlqbml0L21haW5hcGkvYnVpbGQvdXRpbHMvZmlsZS11dGlscyc7XHJcbmltcG9ydCB7U2hhcmVkQ29tcG9uZW50c0RpY3Rpb25hcnlTZXJ2aWNlfSBmcm9tICcuLi8uLi90cmFuc2xhdGlvbi9zaGFyZWQtY29tcG9uZW50cy1kaWN0aW9uYXJ5LnNlcnZpY2UnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImNvLXRhc2stY3JlYXRvclwiLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8ZGl2IGNsYXNzPVwidGFzay1jcmVhdG9yLXdyYXBwZXJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInRvcC1yb3dzXCI+XHJcbiAgICAgICAgPGNvLWVtYWlsLXNlbGVjdG9yIFsoZW1haWxBZGRyZXNzZXMpXT1cImVtYWlsQWRkcmVzc2VzXCIgWyhiY2NFbWFpbEFkZHJlc3NlcyldPVwiYmNjRW1haWxBZGRyZXNzZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBba2V5XT1cInJlbWFya0FuZFdvcmtLZXlcIiBbd29ya2Zsb3dDYXRlZ29yeVR5cGVdPVwid29ya2Zsb3dDYXRlZ29yeVR5cGVcIj48L2NvLWVtYWlsLXNlbGVjdG9yPlxyXG4gICAgICAgIDxjby1mb3JtICNjcmVhdGVGb3JtIGNsYXNzPVwiY3JlYXRvci1yZW1hcmtzIGlucHV0LWZpZWxkc1wiPlxyXG4gICAgICAgICAgPGNvLWxpc3Qtb2YtaWNvbnMgW2NvbGxlY3Rpb25dPVwib3B0aW9uQ29sbGVjdGlvblwiIChpdGVtU2VsZWN0ZWQpPVwiaXRlbVNlbGVjdGVkKCRldmVudClcIj48L2NvLWxpc3Qtb2YtaWNvbnM+XHJcbiAgICAgICAgICA8Y28taW5wdXQtdGV4dGFyZWEgKm5nSWY9XCJjaG9zZW5BY3Rpdml0eVR5cGUgPT09IG9wdGlvbkNvbGxlY3Rpb25bMF1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJjaG9zZW5BY3Rpdml0eVR5cGUgPT09IG9wdGlvbkNvbGxlY3Rpb25bMF1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInUkVNQVJLJyB8IHNoYXJlZExvY2FsaXplXCIgWyhtb2RlbCldPVwicmVtYXJrVGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJsYXJnZS1yZW1hcmtcIj48L2NvLWlucHV0LXRleHRhcmVhPlxyXG4gICAgICAgICAgPGNvLWlucHV0LXRleHRhcmVhICpuZ0lmPVwiY2hvc2VuQWN0aXZpdHlUeXBlID09PSBvcHRpb25Db2xsZWN0aW9uWzFdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwiY2hvc2VuQWN0aXZpdHlUeXBlID09PSBvcHRpb25Db2xsZWN0aW9uWzFdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0RFU0NSSVBUSU9OJyB8IHNoYXJlZExvY2FsaXplXCIgWyhtb2RlbCldPVwid29ya0Rlc2NyaXB0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImxhcmdlLXJlbWFya1wiPjwvY28taW5wdXQtdGV4dGFyZWE+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFzay1pbnB1dC1maWVsZHNcIiAqbmdJZj1cImNob3NlbkFjdGl2aXR5VHlwZSA9PT0gb3B0aW9uQ29sbGVjdGlvblsyXVwiPlxyXG4gICAgICAgICAgICA8Y28taW5wdXQtdGV4dCBbKG1vZGVsKV09XCJ0YXNrTmFtZVwiIFtwbGFjZWhvbGRlcl09XCInTkFNRScgfCBzaGFyZWRMb2NhbGl6ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJjaG9zZW5BY3Rpdml0eVR5cGUgPT09IG9wdGlvbkNvbGxlY3Rpb25bMl1cIj48L2NvLWlucHV0LXRleHQ+XHJcbiAgICAgICAgICAgIDxjby1pbnB1dC10ZXh0YXJlYSBbKG1vZGVsKV09XCJ0YXNrRGVzY3JpcHRpb25cIiBbcGxhY2Vob2xkZXJdPVwiJ0RFU0NSSVBUSU9OJyB8IHNoYXJlZExvY2FsaXplXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibGFyZ2UtcmVtYXJrXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJjaG9zZW5BY3Rpdml0eVR5cGUgPT09IG9wdGlvbkNvbGxlY3Rpb25bMl1cIj48L2NvLWlucHV0LXRleHRhcmVhPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9jby1mb3JtPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImV4dHJhcy1idXR0b25zXCI+XHJcbiAgICAgICAgPGNvLWJ1dHRvbiBbaWNvbkRhdGFdPVwiaWNvblNlcnZpY2UuZ2V0SWNvbihpY29ucy5QYXBlcmNsaXBSZWd1bGFyKVwiIChjbGljayk9XCJvcGVuQXR0YWNobWVudERpYWxvZygpXCJcclxuICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJkb2N1bWVudHMubGVuZ3RoID09PSAwID8gJycgOiBkb2N1bWVudHMubGVuZ3RoLnRvU3RyaW5nKClcIj48L2NvLWJ1dHRvbj5cclxuICAgICAgICA8Y28tYnV0dG9uICpuZ0lmPVwiY2hvc2VuQWN0aXZpdHlUeXBlID09PSBvcHRpb25Db2xsZWN0aW9uWzBdXCJcclxuICAgICAgICAgICAgICAgICAgIFtpY29uRGF0YV09XCJpY29uU2VydmljZS5nZXRJY29uKGljb25zLlBhcGVyUGxhbmVUb3BTb2xpZClcIlxyXG4gICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNyZWF0ZVJlbWFya0NsaWNrZWQoKVwiPjwvY28tYnV0dG9uPlxyXG4gICAgICAgIDxjby1idXR0b24gKm5nSWY9XCJjaG9zZW5BY3Rpdml0eVR5cGUgPT09IG9wdGlvbkNvbGxlY3Rpb25bMV1cIlxyXG4gICAgICAgICAgICAgICAgICAgW2ljb25EYXRhXT1cImljb25TZXJ2aWNlLmdldEljb24oaWNvbnMuUGFwZXJQbGFuZVRvcFNvbGlkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY3JlYXRlV29ya0NsaWNrZWQoKVwiPjwvY28tYnV0dG9uPlxyXG4gICAgICAgIDxjby1idXR0b24gKm5nSWY9XCJjaG9zZW5BY3Rpdml0eVR5cGUgPT09IG9wdGlvbkNvbGxlY3Rpb25bMl1cIlxyXG4gICAgICAgICAgICAgICAgICAgW2ljb25EYXRhXT1cImljb25TZXJ2aWNlLmdldEljb24oaWNvbnMuUGFwZXJQbGFuZVRvcFNvbGlkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY3JlYXRlVGFza0NsaWNrZWQoKVwiPjwvY28tYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGNvLWRpYWxvZyAqbmdJZj1cInNob3dGaWxlc0RpYWxvZ1wiIChjbG9zZUNsaWNrKT1cImF0dGFjaG1lbnREaWFsb2dDYW5jZWxsZWQoKVwiXHJcbiAgICAgICAgICAgICAgIFtoZWFkZXJUZW1wbGF0ZV09XCJhdHRhY2htZW50SGVhZGVyVGVtcGxhdGVcIlxyXG4gICAgICAgICAgICAgICBbZm9vdGVyVGVtcGxhdGVdPVwiYXR0YWNobWVudEZvb3RlclRlbXBsYXRlXCI+XHJcblxyXG4gICAgICA8bmctdGVtcGxhdGUgI2F0dGFjaG1lbnRIZWFkZXJUZW1wbGF0ZT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY28tZGlhbG9nLXdyYXBwZXItcG9wdXAtdGl0bGVcIj5cclxuICAgICAgICAgIDxjby1pY29uIFtpY29uRGF0YV09XCJpY29uU2VydmljZS5nZXRJY29uKGljb25zLlBhcGVyY2xpcFJlZ3VsYXIpXCI+PC9jby1pY29uPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvLWRpYWxvZy1oZWFkZXItdGl0bGVcIiBbdGV4dENvbnRlbnRdPVwiJ0FUVEFDSE1FTlRTJyB8IHNoYXJlZExvY2FsaXplXCI+PC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgIDxjby1maWxlcy11cGxvYWQgKGRvY3VtZW50c0FkZGVkKT1cImFkZGVkRG9jdW1lbnQoJGV2ZW50KVwiIChkb2N1bWVudERlbGV0ZWQpPVwiZGVsZXRlZERvY3VtZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICBbZG9jdW1lbnRzXT1cImRvY3VtZW50c1wiIFt1c2VXaXRob3V0U2V0dGluZ1Byb3BzXT1cInRydWVcIj48L2NvLWZpbGVzLXVwbG9hZD5cclxuICAgIDwvY28tZGlhbG9nPlxyXG5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgI2F0dGFjaG1lbnRGb290ZXJUZW1wbGF0ZT5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvLWRpYWxvZy1mb290ZXItYnV0dG9uLXdyYXBwZXJcIj5cclxuICAgICAgICA8Y28tYnV0dG9uIGNsYXNzPVwic2F2ZS1idXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgW2ljb25EYXRhXT1cImljb25TZXJ2aWNlLmdldEljb24oaWNvbnMuQ2hlY2tEdW90b25lKVwiXHJcbiAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYXR0YWNobWVudERpYWxvZ0Nsb3NlZCgpXCI+PC9jby1idXR0b24+XHJcbiAgICAgICAgPGNvLWJ1dHRvbiBjbGFzcz1cImNsb3NlLWJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICBbaWNvbkRhdGFdPVwiaWNvblNlcnZpY2UuZ2V0SWNvbihpY29ucy5Dcm9zc1NraW5ueSlcIlxyXG4gICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImF0dGFjaG1lbnREaWFsb2dDYW5jZWxsZWQoKVwiPjwvY28tYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgYCxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIEZvcm1NYXN0ZXJTZXJ2aWNlLFxyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBTQ1JFRU5fQ09ORklHX0FEQVBURVJfQ09NUE9ORU5UX0lOVEVSRkFDRV9OQU1FLFxyXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBUYXNrQ3JlYXRvckNvbXBvbmVudClcclxuICAgIH1cclxuICBdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGFza0NyZWF0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIFNjcmVlbkNvbmZpZ0FkYXB0ZXJDb21wb25lbnQge1xyXG4gIHB1YmxpYyByZWFkb25seSBpY29uczogdHlwZW9mIEljb24gPSBJY29uO1xyXG5cclxuICBAVmlld0NoaWxkKEZvcm1Db21wb25lbnQpXHJcbiAgcHVibGljIGNyZWF0ZUZvcm06IEZvcm1Db21wb25lbnQ7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGF1dGhvcjogUmVsYXRpb25TbWFsbE9iamVjdDtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgYnJhbmNoTm86IHN0cmluZztcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgdGFibGU6IFRhYmxlTmFtZSA9IFRhYmxlTmFtZS5UcmFuc2FjdGlvbnM7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHJlbWFya0FuZFdvcmtLZXk6IHN0cmluZztcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgdGFza0tleTogc3RyaW5nO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyB3b3JrZmxvd0NhdGVnb3J5VHlwZTogV29ya2Zsb3dDYXRlZ29yeVR5cGU7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyBhY3Rpdml0eUNyZWF0ZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgQEhvc3RCaW5kaW5nKFwiY2xhc3MuY28tdGFzay1jcmVhdG9yXCIpXHJcbiAgcHVibGljIHNob3dDbGFzcygpIHtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9iamVjdENvbmZpZ05hbWU6IHN0cmluZztcclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmNvLXNoYXJlZC1oaWRkZW4nKVxyXG4gIHB1YmxpYyBoaWRkZW46IGJvb2xlYW47XHJcbiAgcHVibGljIHJlcXVpcmVkOiBib29sZWFuO1xyXG4gIHB1YmxpYyBmb3JjZVJlYWRvbmx5OiBib29sZWFuO1xyXG4gIHB1YmxpYyByZWFkb25seTogYm9vbGVhbjtcclxuICBwdWJsaWMgbWF4TGVuZ3RoOiBudW1iZXI7XHJcbiAgcHVibGljIGRlY2ltYWxzOiBudW1iZXI7XHJcbiAgcHVibGljIHJlZEVycm9yQmFja2dyb3VuZDogYm9vbGVhbjtcclxuXHJcbiAgcHVibGljIG9wdGlvbkNvbGxlY3Rpb246IEljb25MaXN0SXRlbVtdID0gW1xyXG4gICAge2ljb246IHRoaXMuaWNvblNlcnZpY2UuZ2V0SWNvbih0aGlzLmljb25zLkNvbW1lbnRSZWd1bGFyKSwgbGFiZWw6IHRoaXMuZGljdGlvbmFyeVNlcnZpY2UuZ2V0KCdSRU1BUksnLCB0cnVlKX0sXHJcbiAgICB7aWNvbjogdGhpcy5pY29uU2VydmljZS5nZXRJY29uKHRoaXMuaWNvbnMuUGVyc29uRGlnZ2luZ1JlZ3VsYXIpLCBsYWJlbDogdGhpcy5kaWN0aW9uYXJ5U2VydmljZS5nZXQoJ1dPUksnLCB0cnVlKX0sXHJcbiAgICB7aWNvbjogdGhpcy5pY29uU2VydmljZS5nZXRJY29uKHRoaXMuaWNvbnMuTGlzdFVsUmVndWxhciksIGxhYmVsOiB0aGlzLmRpY3Rpb25hcnlTZXJ2aWNlLmdldCgnVEFTSycsIHRydWUpfSxcclxuICBdO1xyXG5cclxuICBwdWJsaWMgc2hvd0ZpbGVzRGlhbG9nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGRvY3VtZW50czogQ29Eb2N1bWVudFtdID0gW107XHJcbiAgcHVibGljIG9sZERvY3VtZW50czogQ29Eb2N1bWVudFtdID0gW107XHJcblxyXG5cclxuICBwdWJsaWMgc2hvd0VtYWlsRGlhbG9nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHNlbmRlckFkZHJlc3M6IHN0cmluZyA9ICcnO1xyXG4gIHB1YmxpYyBlbWFpbEFkZHJlc3Nlczogc3RyaW5nW10gPSBbXTtcclxuICBwdWJsaWMgYmNjRW1haWxBZGRyZXNzZXM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gIHB1YmxpYyBlbWFpbFJlcXVlc3Q6IGFjdGl2aXR5RW1haWxSZXF1ZXN0RGF0YSA9IG51bGw7XHJcblxyXG4gIHB1YmxpYyBjcmVhdGVkVGFzazogVGFzaztcclxuICBwdWJsaWMgY3JlYXRlZFJlbWFyazogUmVtYXJrO1xyXG4gIHB1YmxpYyBjcmVhdGVkV29yazogV29yaztcclxuICBwdWJsaWMgY2hvc2VuQWN0aXZpdHlUeXBlOiBJY29uTGlzdEl0ZW07XHJcblxyXG4gIHB1YmxpYyByZW1hcmtUZXh0OiBzdHJpbmcgPSBcIlwiO1xyXG4gIHB1YmxpYyB3b3JrRGVzY3JpcHRpb246IHN0cmluZyA9IFwiXCI7XHJcbiAgcHVibGljIHRhc2tOYW1lOiBzdHJpbmcgPSBcIlwiO1xyXG4gIHB1YmxpYyB0YXNrRGVzY3JpcHRpb246IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBpY29uU2VydmljZTogSWNvbkNhY2hlU2VydmljZSxcclxuICAgICAgICAgICAgICBwdWJsaWMgZGljdGlvbmFyeVNlcnZpY2U6IFNoYXJlZENvbXBvbmVudHNEaWN0aW9uYXJ5U2VydmljZSxcclxuICAgICAgICAgICAgICBwdWJsaWMgc2hhcmVkU2VydmljZTogU2hhcmVkU2VydmljZSxcclxuICAgICAgICAgICAgICBwcml2YXRlIF9kaWFsb2dTZXJ2aWNlOiBDb3JlRGlhbG9nU2VydmljZSxcclxuICAgICAgICAgICAgICBwcml2YXRlIF9mb3JtTWFzdGVyU2VydmljZTogRm9ybU1hc3RlclNlcnZpY2UsXHJcbiAgKSB7XHJcbiAgfVxyXG5cclxuICBhc3luYyBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuY2hvc2VuQWN0aXZpdHlUeXBlID0gdGhpcy5vcHRpb25Db2xsZWN0aW9uWzBdO1xyXG4gICAgdGhpcy5zZW5kZXJBZGRyZXNzID0gYXdhaXQgdGhpcy5zaGFyZWRTZXJ2aWNlLmdldEVtYWlsU2VuZGVyQnlXb3JrZmxvd0NhdGVnb3J5QW5kS2V5KCdTRVJWSUNFX09SREVSJywgdGhpcy5yZW1hcmtBbmRXb3JrS2V5KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBpdGVtU2VsZWN0ZWQoaXRlbTogSWNvbkxpc3RJdGVtKTogdm9pZCB7XHJcbiAgICB0aGlzLmNob3NlbkFjdGl2aXR5VHlwZSA9IGl0ZW07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb3BlbkF0dGFjaG1lbnREaWFsb2coKTogdm9pZCB7XHJcbiAgICB0aGlzLm9sZERvY3VtZW50cyA9IHRoaXMuZG9jdW1lbnRzLnNsaWNlKCk7XHJcbiAgICB0aGlzLnNob3dGaWxlc0RpYWxvZyA9IHRydWVcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhdHRhY2htZW50RGlhbG9nQ2xvc2VkKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zaG93RmlsZXNEaWFsb2cgPSBmYWxzZVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGF0dGFjaG1lbnREaWFsb2dDYW5jZWxsZWQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmRvY3VtZW50cyA9IHRoaXMub2xkRG9jdW1lbnRzLnNsaWNlKCk7XHJcbiAgICB0aGlzLnNob3dGaWxlc0RpYWxvZyA9IGZhbHNlXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgYWRkZWREb2N1bWVudChkb2NzOiBDb0RvY3VtZW50W10pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuZG9jdW1lbnRzID0gdGhpcy5kb2N1bWVudHMuY29uY2F0KGRvY3MpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGRlbGV0ZWREb2N1bWVudChkb2M6IENvRG9jdW1lbnQpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIEFycmF5VXRpbHMuUmVtb3ZlRWxlbWVudChkb2MsIHRoaXMuZG9jdW1lbnRzKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjcmVhdGVSZW1hcmtDbGlja2VkKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5fZm9ybU1hc3RlclNlcnZpY2Uuc3VibWl0U2xhdmVzKCk7XHJcbiAgICBpZiAodGhpcy5jcmVhdGVGb3JtLmlzVmFsaWQoKSkge1xyXG4gICAgICBsZXQgcmVtYXJrOiBSZW1hcmsgPSB0aGlzLmNyZWF0ZVJlbWFyaygpO1xyXG5cclxuICAgICAgbGV0IGFjdGl2aXR5OiBBY3Rpdml0eSA9IG5ldyBBY3Rpdml0eSgpO1xyXG4gICAgICBhY3Rpdml0eS5hY3Rpdml0eVR5cGUgPSBBY3Rpdml0eVR5cGUuUmVtYXJrO1xyXG4gICAgICBhY3Rpdml0eS5yZW1hcmsgPSByZW1hcms7XHJcblxyXG4gICAgICB0aGlzLmNyZWF0ZWRSZW1hcmsgPSBhd2FpdCB0aGlzLnNoYXJlZFNlcnZpY2UuaW5zZXJ0UmVtYXJrKGFjdGl2aXR5KTtcclxuICAgICAgaWYgKHRoaXMuY3JlYXRlZFJlbWFyaykge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlQWZ0ZXJDcmVhdGlvbigpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgY3JlYXRlV29ya0NsaWNrZWQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLl9mb3JtTWFzdGVyU2VydmljZS5zdWJtaXRTbGF2ZXMoKTtcclxuICAgIGlmICh0aGlzLmNyZWF0ZUZvcm0uaXNWYWxpZCgpKSB7XHJcbiAgICAgIGxldCB3b3JrOiBXb3JrID0gdGhpcy5jcmVhdGVXb3JrKCk7XHJcblxyXG4gICAgICBsZXQgYWN0aXZpdHk6IEFjdGl2aXR5ID0gbmV3IEFjdGl2aXR5KCk7XHJcbiAgICAgIGFjdGl2aXR5LmFjdGl2aXR5VHlwZSA9IEFjdGl2aXR5VHlwZS5Xb3JrO1xyXG4gICAgICBhY3Rpdml0eS53b3JrID0gd29yaztcclxuXHJcbiAgICAgIHRoaXMuY3JlYXRlZFdvcmsgPSBhd2FpdCB0aGlzLnNoYXJlZFNlcnZpY2UuaW5zZXJ0V29yayhhY3Rpdml0eSk7XHJcbiAgICAgIGlmICh0aGlzLmNyZWF0ZWRXb3JrKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVBZnRlckNyZWF0aW9uKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjcmVhdGVUYXNrQ2xpY2tlZCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuX2Zvcm1NYXN0ZXJTZXJ2aWNlLnN1Ym1pdFNsYXZlcygpO1xyXG4gICAgaWYgKHRoaXMuY3JlYXRlRm9ybS5pc1ZhbGlkKCkpIHtcclxuICAgICAgY29uc3QgdGFzayA9IHRoaXMuY3JlYXRlVGFzaygpO1xyXG5cclxuICAgICAgbGV0IGFjdGl2aXR5OiBBY3Rpdml0eSA9IG5ldyBBY3Rpdml0eSgpO1xyXG4gICAgICBhY3Rpdml0eS5hY3Rpdml0eVR5cGUgPSBBY3Rpdml0eVR5cGUuVGFzaztcclxuICAgICAgYWN0aXZpdHkudGFzayA9IHRhc2s7XHJcblxyXG4gICAgICB0aGlzLmNyZWF0ZWRUYXNrID0gYXdhaXQgdGhpcy5zaGFyZWRTZXJ2aWNlLmluc2VydFRhc2soYWN0aXZpdHkpO1xyXG4gICAgICBpZiAodGhpcy5jcmVhdGVkVGFzaykge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlQWZ0ZXJDcmVhdGlvbigpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZVJlbWFyaygpOiBSZW1hcmsge1xyXG4gICAgbGV0IHJlbWFyazogUmVtYXJrID0gbmV3IFJlbWFyaygpO1xyXG4gICAgcmVtYXJrLmF1dGhvciA9IHRoaXMuYXV0aG9yO1xyXG4gICAgcmVtYXJrLmF1dGhvci5pbWFnZSA9IHVuZGVmaW5lZDtcclxuICAgIHJlbWFyay5kb2N1bWVudHMgPSB0aGlzLmRvY3VtZW50cztcclxuICAgIHJlbWFyay5yZW1hcmsgPSB0aGlzLnJlbWFya1RleHQ7XHJcbiAgICByZW1hcmsuZGF0ZVRpbWUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgcmVtYXJrLnRhYmxlID0gdGhpcy50YWJsZTtcclxuICAgIHJlbWFyay5rZXkgPSB0aGlzLnJlbWFya0FuZFdvcmtLZXk7XHJcbiAgICByZW1hcmsucmVhZCA9IGZhbHNlO1xyXG4gICAgcmVtYXJrLmN1cnJlbnQgPSB0cnVlO1xyXG5cclxuICAgIHJldHVybiByZW1hcms7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZVdvcmsoKTogV29yayB7XHJcbiAgICBsZXQgd29yazogV29yayA9IG5ldyBXb3JrKCk7XHJcbiAgICB3b3JrLmV4ZWN1dGl2ZSA9IHRoaXMuYXV0aG9yO1xyXG4gICAgd29yay5leGVjdXRpdmUuaW1hZ2UgPSB1bmRlZmluZWQ7XHJcbiAgICB3b3JrLmRvY3VtZW50cyA9IHRoaXMuZG9jdW1lbnRzO1xyXG4gICAgd29yay53b3JrZWRUaW1lID0gMDtcclxuICAgIHdvcmsud29ya0Rlc2NyaXB0aW9uID0gdGhpcy53b3JrRGVzY3JpcHRpb25cclxuICAgIHdvcmsuZGF0ZVRpbWUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgd29yay50YWJsZSA9IHRoaXMudGFibGU7XHJcbiAgICB3b3JrLmtleSA9IHRoaXMucmVtYXJrQW5kV29ya0tleTtcclxuXHJcbiAgICByZXR1cm4gd29yaztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlVGFzaygpOiBUYXNrIHtcclxuICAgIGxldCB0YXNrOiBUYXNrID0gbmV3IFRhc2soKTtcclxuICAgIHRhc2suZXhlY3V0aXZlID0gdGhpcy5hdXRob3I7XHJcbiAgICB0YXNrLmV4ZWN1dGl2ZS5pbWFnZSA9IHVuZGVmaW5lZDtcclxuICAgIHRhc2sucmVwb3J0ZXIgPSB0aGlzLmF1dGhvcjtcclxuICAgIHRhc2sucmVwb3J0ZXIuaW1hZ2UgPSB1bmRlZmluZWQ7XHJcbiAgICB0YXNrLmRvY3VtZW50cyA9IHRoaXMuZG9jdW1lbnRzO1xyXG4gICAgdGFzay5uYW1lID0gdGhpcy50YXNrTmFtZTtcclxuICAgIHRhc2suZGVzY3JpcHRpb24gPSB0aGlzLnRhc2tEZXNjcmlwdGlvbjtcclxuICAgIHRhc2suY3JlYXRpb25EYXRlVGltZSA9IG5ldyBEYXRlKCk7XHJcbiAgICB0YXNrLmRhdGVEZWZpbmF0ZSA9IGZhbHNlO1xyXG4gICAgdGFzay5uZWVkc1BsYW5uaW5nID0gdHJ1ZTtcclxuICAgIHRhc2sucHJpb3JpdHkgPSAwO1xyXG4gICAgdGFzay53b3JrZmxvd0NhdGVnb3J5ID0gdGhpcy53b3JrZmxvd0NhdGVnb3J5VHlwZTtcclxuICAgIHRhc2sucmVmZXJlbmNlID0gdGhpcy50YXNrS2V5O1xyXG4gICAgdGFzay5lbWFpbEFkZHJlc3NlcyA9IHRoaXMuZW1haWxBZGRyZXNzZXM7XHJcblxyXG4gICAgcmV0dXJuIHRhc2s7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGhhbmRsZUFmdGVyQ3JlYXRpb24oKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLmFjdGl2aXR5Q3JlYXRlZC5lbWl0KCk7XHJcbiAgICBhd2FpdCB0aGlzLnNlbmRFbWFpbElmTmVjY2VzYXJ5KCk7XHJcbiAgICB0aGlzLmNsZWFyRmllbGRzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHNlbmRFbWFpbElmTmVjY2VzYXJ5KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHRoaXMuZW1haWxBZGRyZXNzZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICBsZXQgdGVtcGxhdGVzOiBSZXBvcnRbXSA9IGF3YWl0IHRoaXMuc2hhcmVkU2VydmljZS5nZXREZWZhdWx0RW1haWxSZXBvcnRUZW1wbGF0ZXNGb3JCcmFuY2godGhpcy5icmFuY2hObywgdGhpcy5maW5kUmVwb3J0VHlwZSgpKTtcclxuICAgICAgaWYgKHRlbXBsYXRlcy5sZW5ndGggIT0gMCkge1xyXG4gICAgICAgIGxldCB0ZW1wbGF0ZTogUmVwb3J0ID0gdGhpcy5maW5kRGVmYXVsdCh0ZW1wbGF0ZXMpO1xyXG4gICAgICAgIGlmICh0ZW1wbGF0ZSkge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5zdGFydEVtYWlsaW5nKHRlbXBsYXRlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5fZGlhbG9nU2VydmljZS5zaG93RXJyb3IoJ05PX0RFRkFVTFRfRU1BSUxfVEVNUExBVEVfRk9SX1JFUE9SVCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmaW5kUmVwb3J0VHlwZSgpOiBSZXBvcnRUeXBlIHtcclxuICAgIGlmICh0aGlzLmNob3NlbkFjdGl2aXR5VHlwZSA9PT0gdGhpcy5vcHRpb25Db2xsZWN0aW9uWzBdKSB7XHJcbiAgICAgIHJldHVybiBSZXBvcnRUeXBlLlJlbWFya01lc3NhZ2U7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuY2hvc2VuQWN0aXZpdHlUeXBlID09PSB0aGlzLm9wdGlvbkNvbGxlY3Rpb25bMV0pIHtcclxuICAgICAgcmV0dXJuIFJlcG9ydFR5cGUuV29ya01lc3NhZ2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gUmVwb3J0VHlwZS5UYXNrTWVzc2FnZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmluZERlZmF1bHQocmVwb3J0TGlzdDogUmVwb3J0W10pOiBSZXBvcnQge1xyXG4gICAgbGV0IGRlZmF1bHRUZW1wbGF0ZTogUmVwb3J0ID0gbnVsbDtcclxuICAgIHJlcG9ydExpc3QuZm9yRWFjaChyID0+IHtcclxuICAgICAgaWYgKHIuaXNEZWZhdWx0KSB7XHJcbiAgICAgICAgZGVmYXVsdFRlbXBsYXRlID0gcjtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZGVmYXVsdFRlbXBsYXRlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBzdGFydEVtYWlsaW5nKHRlbXBsYXRlOiBSZXBvcnQpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IGVtYWlsc1NlbnQ6IGJvb2xlYW4gPSBhd2FpdCB0aGlzLnNoYXJlZFNlcnZpY2UuZW1haWxWaWFUZW1wbGF0ZSh0ZW1wbGF0ZSwgdGhpcy5jcmVhdGVFbWFpbEFkZHJlc3NTdHJpbmcodGhpcy5lbWFpbEFkZHJlc3NlcyksIHRoaXMuY3JlYXRlRW1haWxBZGRyZXNzU3RyaW5nKHRoaXMuYmNjRW1haWxBZGRyZXNzZXMpLFxyXG4gICAgICB0aGlzLnNlbmRlckFkZHJlc3MsIHRoaXMuY3JlYXRlRW1haWxTdWJqZWN0KCksIFwiXCIsIHRoaXMuY3JlYXRlQXR0YWNobWVudHNBcnJheSgpLCB0aGlzLmNyZWF0ZUVtYWlsUGFyYW1zKCkpO1xyXG4gICAgaWYgKGVtYWlsc1NlbnQpIHtcclxuICAgICAgbGV0IGhpc3Rvcnk6IEFjdGl2aXR5RW1haWxIaXN0b3J5ID0gbmV3IEFjdGl2aXR5RW1haWxIaXN0b3J5KCk7XHJcbiAgICAgIGhpc3RvcnkuZW1haWxBZGRyZXNzZXMgPSB0aGlzLmNyZWF0ZUVtYWlsQWRkcmVzc1N0cmluZyh0aGlzLmVtYWlsQWRkcmVzc2VzKTtcclxuICAgICAgaGlzdG9yeS5lbWFpbERhdGVUaW1lID0gbmV3IERhdGUoKTtcclxuICAgICAgaGlzdG9yeS5tZXNzYWdlID0gJ0VtYWlsIENvbnRlbnQgY3JlYXRlZCB2aWEgUmVwb3J0JztcclxuICAgICAgaWYgKHRoaXMuY2hvc2VuQWN0aXZpdHlUeXBlID09PSB0aGlzLm9wdGlvbkNvbGxlY3Rpb25bMF0pIHtcclxuICAgICAgICBhd2FpdCB0aGlzLnNoYXJlZFNlcnZpY2UuaW5zZXJ0RW1haWxIaXN0b3J5Rm9yUmVtYXJrKHRoaXMuY3JlYXRlZFJlbWFyay5yZW1hcmtJZCwgaGlzdG9yeSk7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaG9zZW5BY3Rpdml0eVR5cGUgPT09IHRoaXMub3B0aW9uQ29sbGVjdGlvblsxXSkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuc2hhcmVkU2VydmljZS5pbnNlcnRFbWFpbEhpc3RvcnlGb3JXb3JrKHRoaXMuY3JlYXRlZFdvcmsud29ya0lkLCBoaXN0b3J5KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBhd2FpdCB0aGlzLnNoYXJlZFNlcnZpY2UuaW5zZXJ0RW1haWxIaXN0b3J5Rm9yVGFzayh0aGlzLmNyZWF0ZWRUYXNrLnRhc2tJZCwgaGlzdG9yeSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlRW1haWxBZGRyZXNzU3RyaW5nKGFkZHJlc3Nlczogc3RyaW5nW10pOiBzdHJpbmcge1xyXG4gICAgaWYgKGFkZHJlc3Nlcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGFkZHJlc3Nlcy5qb2luKCc7Jyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUVtYWlsU3ViamVjdCgpOiBzdHJpbmcge1xyXG4gICAgbGV0IHN1YmplY3Q6IHN0cmluZyA9IFwiLSBcIjtcclxuICAgIGlmICh0aGlzLmNyZWF0ZWRSZW1hcmspIHtcclxuICAgICAgc3ViamVjdCArPSB0aGlzLmRpY3Rpb25hcnlTZXJ2aWNlLmdldChcIlJFTUFSS1wiKSArIFwiIFwiICsgdGhpcy5jcmVhdGVkUmVtYXJrLnJlbWFya0lkO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmNyZWF0ZWRXb3JrKSB7XHJcbiAgICAgIHN1YmplY3QgKz0gdGhpcy5kaWN0aW9uYXJ5U2VydmljZS5nZXQoXCJXT1JLXCIpICsgXCIgXCIgKyB0aGlzLmNyZWF0ZWRXb3JrLndvcmtJZDtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5jcmVhdGVkVGFzaykge1xyXG4gICAgICBzdWJqZWN0ICs9ICh0aGlzLmNyZWF0ZWRUYXNrLndvcmtmbG93Q2F0ZWdvcnkgPyB0aGlzLmNyZWF0ZWRUYXNrLndvcmtmbG93Q2F0ZWdvcnkgOiB0aGlzLmRpY3Rpb25hcnlTZXJ2aWNlLmdldChcIlRBU0tcIikpICsgXCIgXCIgK1xyXG4gICAgICAgICh0aGlzLmNyZWF0ZWRUYXNrLndvcmtmbG93Q2F0ZWdvcnkgPyB0aGlzLmNyZWF0ZWRUYXNrLnJlZmVyZW5jZSA6IHRoaXMuY3JlYXRlZFRhc2sudGFza0lkKTtcclxuICAgIH1cclxuICAgIHJldHVybiBzdWJqZWN0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVBdHRhY2htZW50c0FycmF5KCk6IENvRW1haWxBdHRhY2htZW50W10ge1xyXG4gICAgbGV0IGF0dGFjaG1lbnRzOiBDb0VtYWlsQXR0YWNobWVudFtdID0gW107XHJcbiAgICBpZiAodGhpcy5kb2N1bWVudHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiBhdHRhY2htZW50cztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZG9jdW1lbnRzLmZvckVhY2goZCA9PiB7XHJcbiAgICAgICAgbGV0IGF0dGFjaG1lbnQ6IENvRW1haWxBdHRhY2htZW50ID0gbmV3IENvRW1haWxBdHRhY2htZW50KCk7XHJcbiAgICAgICAgYXR0YWNobWVudC5maWxlbmFtZSA9IGQuZmlsZU5hbWU7XHJcbiAgICAgICAgaWYgKGQuZmlsZU5hbWUuc3BsaXQoXCIuXCIpLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgIGNvbnN0IHN0cjogc3RyaW5nW10gPSBkLmZpbGVOYW1lLnNwbGl0KFwiLlwiKTtcclxuICAgICAgICAgIGF0dGFjaG1lbnQuZXh0ZW5zaW9uID0gc3RyW3N0ci5sZW5ndGggLSAxXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYXR0YWNobWVudC5ib2R5ID0gRmlsZVV0aWxzLkNvbnZlcnRTdHJpbmdUb0FycmF5QnVmZmVyKGQuZG9jdW1lbnRCb2R5KTtcclxuICAgICAgICBhdHRhY2htZW50cy5wdXNoKGF0dGFjaG1lbnQpO1xyXG4gICAgICB9KVxyXG4gICAgICByZXR1cm4gYXR0YWNobWVudHM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUVtYWlsUGFyYW1zKCk6IG9iamVjdCB7XHJcbiAgICBpZiAodGhpcy5jcmVhdGVkUmVtYXJrKSB7XHJcbiAgICAgIHJldHVybiB7b3BtZXJraW5nX2lkOiB0aGlzLmNyZWF0ZWRSZW1hcmsucmVtYXJrSWQgKyBcIlwifTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5jcmVhdGVkV29yaykge1xyXG4gICAgICByZXR1cm4ge3dlcmt6aF9pZDogdGhpcy5jcmVhdGVkV29yay53b3JrSWQgKyBcIlwifTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5jcmVhdGVkVGFzaykge1xyXG4gICAgICByZXR1cm4ge3RhYWtfaWQ6IHRoaXMuY3JlYXRlZFRhc2sudGFza0lkICsgXCJcIn07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsZWFyRmllbGRzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5yZW1hcmtUZXh0ID0gXCJcIjtcclxuICAgIHRoaXMud29ya0Rlc2NyaXB0aW9uID0gXCJcIjtcclxuICAgIHRoaXMudGFza05hbWUgPSBcIlwiO1xyXG4gICAgdGhpcy50YXNrRGVzY3JpcHRpb24gPSBcIlwiO1xyXG5cclxuICAgIHRoaXMuc2VuZGVyQWRkcmVzcyA9IFwiXCI7XHJcbiAgICB0aGlzLmVtYWlsQWRkcmVzc2VzID0gW107XHJcbiAgICB0aGlzLmJjY0VtYWlsQWRkcmVzc2VzID0gW107XHJcbiAgICB0aGlzLmVtYWlsUmVxdWVzdCA9IG51bGw7XHJcblxyXG4gICAgdGhpcy5kb2N1bWVudHMgPSBbXTtcclxuXHJcbiAgICB0aGlzLmNyZWF0ZWRXb3JrID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5jcmVhdGVkUmVtYXJrID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5jcmVhdGVkVGFzayA9IHVuZGVmaW5lZDtcclxuICB9XHJcbn1cclxuIl19