@sd-angular/core 1.2.22 → 1.2.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 (43) hide show
  1. package/bundles/sd-angular-core-common.umd.js +21 -2
  2. package/bundles/sd-angular-core-common.umd.js.map +1 -1
  3. package/bundles/sd-angular-core-common.umd.min.js +1 -1
  4. package/bundles/sd-angular-core-common.umd.min.js.map +1 -1
  5. package/bundles/sd-angular-core-input.umd.js +2 -1
  6. package/bundles/sd-angular-core-input.umd.js.map +1 -1
  7. package/bundles/sd-angular-core-input.umd.min.js +1 -1
  8. package/bundles/sd-angular-core-input.umd.min.js.map +1 -1
  9. package/bundles/sd-angular-core-upload-excel.umd.js +63 -6
  10. package/bundles/sd-angular-core-upload-excel.umd.js.map +1 -1
  11. package/bundles/sd-angular-core-upload-excel.umd.min.js +1 -1
  12. package/bundles/sd-angular-core-upload-excel.umd.min.js.map +1 -1
  13. package/common/sd-angular-core-common.metadata.json +1 -1
  14. package/common/src/lib/directives/sd-lable.directive.d.ts +5 -0
  15. package/common/src/public-api.d.ts +1 -0
  16. package/esm2015/common/src/lib/common.module.js +6 -3
  17. package/esm2015/common/src/lib/directives/sd-lable.directive.js +16 -0
  18. package/esm2015/common/src/public-api.js +2 -1
  19. package/esm2015/grid-material/src/lib/models/grid-export.model.js +1 -1
  20. package/esm2015/input/src/lib/input.component.js +4 -3
  21. package/esm2015/upload-excel/sd-angular-core-upload-excel.js +3 -1
  22. package/esm2015/upload-excel/src/lib/pipes/columm-hidden.pipe.js +23 -0
  23. package/esm2015/upload-excel/src/lib/pipes/column-transform.pipe.js +18 -0
  24. package/esm2015/upload-excel/src/lib/upload-excel.component.js +12 -5
  25. package/esm2015/upload-excel/src/lib/upload-excel.model.js +1 -1
  26. package/esm2015/upload-excel/src/lib/upload-excel.module.js +7 -2
  27. package/fesm2015/sd-angular-core-common.js +20 -3
  28. package/fesm2015/sd-angular-core-common.js.map +1 -1
  29. package/fesm2015/sd-angular-core-input.js +3 -2
  30. package/fesm2015/sd-angular-core-input.js.map +1 -1
  31. package/fesm2015/sd-angular-core-upload-excel.js +54 -7
  32. package/fesm2015/sd-angular-core-upload-excel.js.map +1 -1
  33. package/grid-material/src/lib/models/grid-export.model.d.ts +2 -0
  34. package/input/sd-angular-core-input.metadata.json +1 -1
  35. package/input/src/lib/input.component.d.ts +2 -1
  36. package/package.json +1 -1
  37. package/{sd-angular-core-1.2.22.tgz → sd-angular-core-1.2.23.tgz} +0 -0
  38. package/upload-excel/sd-angular-core-upload-excel.d.ts +2 -0
  39. package/upload-excel/sd-angular-core-upload-excel.metadata.json +1 -1
  40. package/upload-excel/src/lib/pipes/columm-hidden.pipe.d.ts +6 -0
  41. package/upload-excel/src/lib/pipes/column-transform.pipe.d.ts +5 -0
  42. package/upload-excel/src/lib/upload-excel.component.d.ts +3 -1
  43. package/upload-excel/src/lib/upload-excel.model.d.ts +2 -1
@@ -7,7 +7,7 @@ import hash from 'object-hash';
7
7
  import { Subscription } from 'rxjs';
8
8
  import { SdInputSuffixDirective } from './directives/input-suffix.directive';
9
9
  import { SdFormControl } from '@sd-angular/core/common';
10
- import { SdViewDefDirective } from '@sd-angular/core/common';
10
+ import { SdViewDefDirective, SdLableDefDirective } from '@sd-angular/core/common';
11
11
  import { SdUtilityService } from '@sd-angular/core/utility';
12
12
  import { FORM_CONFIG } from '@sd-angular/core/common';
13
13
  export class SdInput {
@@ -257,7 +257,7 @@ _name = new WeakMap(), _form = new WeakMap(), _blurOnEnter_1 = new WeakMap(), _m
257
257
  SdInput.decorators = [
258
258
  { type: Component, args: [{
259
259
  selector: 'sd-input',
260
- template: "<label *ngIf=\"!appearance && label\" class=\"d-block mb-0 T14M\">{{label}} <span class=\"text-danger mb-2\"\r\n *ngIf=\"isRequired\">*</span></label>\r\n<div class=\"d-flex align-items-center\" [class.sd-view]=\"sdView?.templateRef\" [class.c-focused]=\"isFocused\"\r\n [class.c-disabled]=\"formControl.disabled\" (click)=\"onClick()\">\r\n <ng-container *ngIf=\"sdView?.templateRef && !isFocused; else default\">\r\n <ng-container *ngTemplateOutlet=\"sdView.templateRef;context: { value: formControl.value }\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-template #default>\r\n <mat-form-field class=\"sd-md\"\r\n [ngClass]=\"{'sd-form-tooltip':tooltip, 'sd-sm': size === 'sm', 'no-padding-wrapper': disableErrorMessage}\"\r\n [appearance]=\"appearance || 'outline'\">\r\n <mat-label *ngIf=\"appearance && label\">{{label}}</mat-label>\r\n <input [id]=\"id\" [formControl]=\"formControl\" [type]=\"type\" #control matInput\r\n [placeholder]=\"placeholder || (appearance ? label : '')\" (keyup.enter)=\"onKeyupEnter()\" (focus)=\"onFocus()\"\r\n (blur)=\"onBlur()\" [required]=\"isRequired\" [readonly]=\"isReadonly\" [autocomplete]=\"id\" autocorrect=\"off\"\r\n [step]=\"1\" [attr.data-qclabel]=\"label\" [attr.data-qcid]=\"qcId\" [sdPopoverTriggerFor]=\"null\"\r\n [sdPopoverDisabled]=\"!disableErrorMessage || formControl.valid\">\r\n <button #btnCopy *ngIf=\"copyable\" matSuffix mat-flat-button aria-label=\"Clear\" class=\"btn-copy\"\r\n (click)=\"copyText()\">\r\n Copy\r\n </button>\r\n <span class=\"mr-1\" *ngIf=\"maxlength\" matSuffix>{{formControl.value?.length || 0}}/{{maxlength}}</span>\r\n <ng-container *ngIf=\"sdInputSuffix?.templateRef\" matSuffix>\r\n <ng-container *ngTemplateOutlet=\"sdInputSuffix.templateRef\">\r\n </ng-container>\r\n </ng-container>\r\n <mat-icon *ngIf=\"!hideIcon && sdClickIcon?.observers?.length\" (click)=\"onClickIcon($event)\"\r\n class=\"pointer sd-suffix-icon\" matSuffix>\r\n {{icon}}\r\n </mat-icon>\r\n <mat-error *ngIf=\"formControl.errors?.required\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ \"This field is required\" | sdTranslate }}</ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\" formControl.errors?.maxlength\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{'Max length' | sdTranslate}} {{maxlength}}\r\n </ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl.errors?.pattern\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{'Pattern error' | sdTranslate}}</ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl.errors?.customValidator\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{formControl.errors?.customValidator}}</ng-container>\r\n </mat-error>\r\n </mat-form-field>\r\n <div *ngIf=\"tooltip\" class=\"sd-tooltip\">\r\n <mat-icon (click)=\"sdTooltip.toggle()\" [matTooltip]=\"formControl.value | sdInputTooltipPipe:tooltip\" matSuffix\r\n #sdTooltip=\"matTooltip\">info</mat-icon>\r\n </div>\r\n </ng-template>\r\n</div>\r\n<!-- <sd-popover #error=\"sdPopover\" type=\"danger\" width=\"300px\">\r\n <span *ngIf=\"formControl.errors?.required\">\r\n {{ \"This field is required\" | sdTranslate }}\r\n </span>\r\n <span *ngIf=\"formControl.errors?.maxlength\">\r\n {{'Max length' | sdTranslate}} <strong>{{maxlength}}</strong>\r\n </span>\r\n <span *ngIf=\"formControl.errors?.pattern\">\r\n {{'Pattern error' | sdTranslate}}\r\n </span>\r\n <span *ngIf=\"formControl.errors?.customValidator\">\r\n {{formControl.errors?.customValidator}}\r\n </span>\r\n</sd-popover> -->",
260
+ template: "<label *ngIf=\"!appearance && label && !sdLableDef?.templateRef\" class=\"d-block mb-0 T14M\">{{label}} <span class=\"text-danger mb-2\"\r\n *ngIf=\"isRequired\">*</span></label>\r\n<ng-container *ngIf=\"sdLableDef?.templateRef\" matSuffix>\r\n <ng-container *ngTemplateOutlet=\"sdLableDef.templateRef\">\r\n </ng-container>\r\n</ng-container>\r\n<div class=\"d-flex align-items-center\" [class.sd-view]=\"sdView?.templateRef\" [class.c-focused]=\"isFocused\"\r\n [class.c-disabled]=\"formControl.disabled\" (click)=\"onClick()\">\r\n <ng-container *ngIf=\"sdView?.templateRef && !isFocused; else default\">\r\n <ng-container *ngTemplateOutlet=\"sdView.templateRef;context: { value: formControl.value }\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-template #default>\r\n <mat-form-field class=\"sd-md\"\r\n [ngClass]=\"{'sd-form-tooltip':tooltip, 'sd-sm': size === 'sm', 'no-padding-wrapper': disableErrorMessage}\"\r\n [appearance]=\"appearance || 'outline'\">\r\n <mat-label *ngIf=\"appearance && label\">{{label}}</mat-label>\r\n <input [id]=\"id\" [formControl]=\"formControl\" [type]=\"type\" #control matInput\r\n [placeholder]=\"placeholder || (appearance ? label : '')\" (keyup.enter)=\"onKeyupEnter()\" (focus)=\"onFocus()\"\r\n (blur)=\"onBlur()\" [required]=\"isRequired\" [readonly]=\"isReadonly\" [autocomplete]=\"id\" autocorrect=\"off\"\r\n [step]=\"1\" [attr.data-qclabel]=\"label\" [attr.data-qcid]=\"qcId\" [sdPopoverTriggerFor]=\"null\"\r\n [sdPopoverDisabled]=\"!disableErrorMessage || formControl.valid\">\r\n <button #btnCopy *ngIf=\"copyable\" matSuffix mat-flat-button aria-label=\"Clear\" class=\"btn-copy\"\r\n (click)=\"copyText()\">\r\n Copy\r\n </button>\r\n <span class=\"mr-1\" *ngIf=\"maxlength\" matSuffix>{{formControl.value?.length || 0}}/{{maxlength}}</span>\r\n <ng-container *ngIf=\"sdInputSuffix?.templateRef\" matSuffix>\r\n <ng-container *ngTemplateOutlet=\"sdInputSuffix.templateRef\">\r\n </ng-container>\r\n </ng-container>\r\n <mat-icon *ngIf=\"!hideIcon && sdClickIcon?.observers?.length\" (click)=\"onClickIcon($event)\"\r\n class=\"pointer sd-suffix-icon\" matSuffix>\r\n {{icon}}\r\n </mat-icon>\r\n <mat-error *ngIf=\"formControl.errors?.required\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ \"This field is required\" | sdTranslate }}</ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\" formControl.errors?.maxlength\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{'Max length' | sdTranslate}} {{maxlength}}\r\n </ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl.errors?.pattern\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{'Pattern error' | sdTranslate}}</ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl.errors?.customValidator\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{formControl.errors?.customValidator}}</ng-container>\r\n </mat-error>\r\n </mat-form-field>\r\n <div *ngIf=\"tooltip\" class=\"sd-tooltip\">\r\n <mat-icon (click)=\"sdTooltip.toggle()\" [matTooltip]=\"formControl.value | sdInputTooltipPipe:tooltip\" matSuffix\r\n #sdTooltip=\"matTooltip\">info</mat-icon>\r\n </div>\r\n </ng-template>\r\n</div>\r\n<!-- <sd-popover #error=\"sdPopover\" type=\"danger\" width=\"300px\">\r\n <span *ngIf=\"formControl.errors?.required\">\r\n {{ \"This field is required\" | sdTranslate }}\r\n </span>\r\n <span *ngIf=\"formControl.errors?.maxlength\">\r\n {{'Max length' | sdTranslate}} <strong>{{maxlength}}</strong>\r\n </span>\r\n <span *ngIf=\"formControl.errors?.pattern\">\r\n {{'Pattern error' | sdTranslate}}\r\n </span>\r\n <span *ngIf=\"formControl.errors?.customValidator\">\r\n {{formControl.errors?.customValidator}}\r\n </span>\r\n</sd-popover> -->",
261
261
  changeDetection: ChangeDetectionStrategy.OnPush,
262
262
  styles: [":host ::ng-deep .mat-form-field.sd-form-tooltip{width:calc(100% - 30px)}:host ::ng-deep .mat-form-field.no-padding-wrapper .mat-form-field-wrapper{padding-bottom:0}:host ::ng-deep .mat-form-field.mat-form-field-appearance-outline.mat-form-field-disabled .mat-form-field-outline{background:#f6f6f6;color:#e9e9e9}:host ::ng-deep .mat-form-field input.mat-input-element:disabled{color:#4d4d4d!important}:host ::ng-deep .mat-form-field .mat-placeholder-required{color:#f82c13}.sd-view:not(.c-focused):not(.c-disabled):hover{background-color:#ebecf0}.sd-tooltip{display:inline-block;margin:auto;text-align:center;width:30px}:host{display:block;padding-top:5px}.sd-md:hover .btn-copy{visibility:visible}.btn-copy{background:#e9e9e9!important;font-size:12px;line-height:26px!important;margin-bottom:3px;visibility:hidden}"]
263
263
  },] }
@@ -296,8 +296,9 @@ SdInput.propDecorators = {
296
296
  keyupEnter: [{ type: Output }],
297
297
  control: [{ type: ViewChild, args: ['control',] }],
298
298
  sdInputSuffix: [{ type: ContentChild, args: [SdInputSuffixDirective,] }],
299
+ sdLableDef: [{ type: ContentChild, args: [SdLableDefDirective,] }],
299
300
  sdView: [{ type: ContentChild, args: [SdViewDefDirective,] }],
300
301
  btnCopy: [{ type: ViewChild, args: ['btnCopy', { read: ElementRef },] }],
301
302
  _copyable: [{ type: Input, args: ['copyable',] }]
302
303
  };
303
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IkM6L1VzZXJzL25naGlhdHQxNV9vbmVtb3VudC9Eb2N1bWVudHMvbGliLWNvcmUtdWkvcHJvamVjdHMvc2QtY29yZS9pbnB1dC8iLCJzb3VyY2VzIjpbInNyYy9saWIvaW5wdXQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsU0FBUyxFQUNULE1BQU0sRUFDTixZQUFZLEVBQ1osaUJBQWlCLEVBR2pCLFVBQVUsRUFFVixZQUFZLEVBQ1osdUJBQXVCLEVBRXZCLE1BQU0sRUFDTixRQUFRLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFtQixNQUFNLEVBQWUsVUFBVSxFQUErQixNQUFNLGdCQUFnQixDQUFDO0FBQy9HLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sSUFBSSxNQUFNLGFBQWEsQ0FBQztBQUUvQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFTdEQsTUFBTSxPQUFPLE9BQU87SUFvSGxCLFlBQ1UsR0FBc0IsRUFDVyxVQUE4QixFQUMvRCxjQUFnQztRQUZoQyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUNXLGVBQVUsR0FBVixVQUFVLENBQW9CO1FBQy9ELG1CQUFjLEdBQWQsY0FBYyxDQUFrQjtRQXRIMUMsT0FBRSxHQUFHLElBQUksSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFDckIsZ0JBQVEsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFDO1FBUWxCLHdCQUFpQjtRQW9CUixTQUFJLEdBQTBFLE1BQU0sQ0FBQztRQUM5Rix3QkFBbUIsR0FBRyxLQUFLLENBQUM7UUFJNUIseUJBQWUsS0FBSyxFQUFDO1FBSXJCLHlCQUFZO1FBU0YsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRTNDLFlBQVk7UUFDWixlQUFVLEdBQUcsS0FBSyxDQUFDO1FBTW5CLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFlbkIsMkJBQWlCO1FBS2pCLDZCQUFxRDtRQWU1QyxTQUFJLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFLUCxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFFdEMsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDbkMsWUFBTyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDbEMscUJBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUMzQyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUkxQyxnQkFBVyxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7UUFDbEMsd0JBQWdCLElBQUksWUFBWSxFQUFFLEVBQUM7UUFFbkMsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUVsQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBNEJqQixlQUFVLEdBQUcsR0FBRyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxXQUFXLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUM1QyxDQUFDLENBQUE7UUFFRCwyQkFBbUIsR0FBRyxFQUFFO1lBQ3RCLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDbkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sVUFBVSxHQUFrQixFQUFFLENBQUM7WUFDckMsTUFBTSxlQUFlLEdBQXVCLEVBQUUsQ0FBQztZQUMvQyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ25CLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQ3RDO1lBQ0QsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsRUFBRTtnQkFDdEIsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO2FBQ3ZEO1lBQ0QsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsRUFBRTtnQkFDdEIsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO2FBQ3ZEO1lBQ0QsNENBQW1CO2dCQUNqQixVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLHdDQUFlLENBQUMsQ0FBQzthQUNwRDtZQUNELDhDQUFxQjtnQkFDbkIsZUFBZSxDQUFDLElBQUksQ0FBQyxvREFBQSxJQUFJLDJDQUFrQyxDQUFDLENBQUM7YUFDOUQ7WUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUMzQyxJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ3JELElBQUksQ0FBQyxXQUFXLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUM1QyxDQUFDLEVBQUE7UUFFRCxvQkFBWSxDQUFDLEtBQVUsRUFBRSxFQUFFO1lBQ3pCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzdCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVCLENBQUMsRUFBQTtRQUVELGlCQUFZLEdBQUcsR0FBRyxFQUFFOztZQUNsQixNQUFNLEdBQUcsR0FBVyxPQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxtQ0FBSSxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUM5RCxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sRUFBRTtnQkFDbEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7YUFDdkM7WUFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzdDLGtEQUF1QjtnQkFDckIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO2FBQ2I7UUFDSCxDQUFDLENBQUE7UUFFRCxnQkFBVyxHQUFHLENBQUMsS0FBWSxFQUFFLEVBQUU7WUFDN0IsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLGNBQWMsR0FBRztZQUN4QixLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsZUFBZSxHQUFHO1lBQ3pCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEQsQ0FBQyxDQUFBO1FBRUQsWUFBTyxHQUFHLEdBQUcsRUFBRTs7WUFDYixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUN0QixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3BCLElBQUksT0FBQSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUywwQ0FBRSxNQUFNLElBQUcsQ0FBQyxFQUFFO2dCQUMvQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ1osSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDO2FBQzlCO1FBQ0gsQ0FBQyxDQUFBO1FBRUQsV0FBTSxHQUFHLEdBQUcsRUFBRTs7WUFDWixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUN2QixNQUFNLEdBQUcsR0FBVyxPQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxtQ0FBSSxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUM5RCxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sRUFBRTtnQkFDbEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7YUFDdkM7UUFDSCxDQUFDLENBQUE7UUFFRCxZQUFPLEdBQUcsR0FBRyxFQUFFOztZQUNiLFVBQUksSUFBSSxDQUFDLE1BQU0sMENBQUUsV0FBVyxFQUFFO2dCQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO29CQUNqRCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7aUJBQ2Q7YUFDRjtRQUNILENBQUMsQ0FBQTtRQUVELFNBQUksR0FBRyxHQUFHLEVBQUU7O1lBQ1YsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDdkIsWUFBQSxJQUFJLENBQUMsT0FBTywwQ0FBRSxhQUFhLDBDQUFFLElBQUksR0FBRztRQUN0QyxDQUFDLENBQUE7UUFFRCxVQUFLLEdBQUcsR0FBRyxFQUFFO1lBQ1gsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDdEIsVUFBVSxDQUFDLEdBQUcsRUFBRTs7Z0JBQ2QsWUFBQSxJQUFJLENBQUMsT0FBTywwQ0FBRSxhQUFhLDBDQUFFLEtBQUssR0FBRztZQUN2QyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDVixDQUFDLENBQUE7UUFFRCwyQkFBbUIsQ0FBQyxJQUE4QyxFQUFvQixFQUFFO1lBQ3RGLE9BQU8sQ0FBTyxDQUFrQixFQUEwQyxFQUFFO2dCQUMxRSxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQztnQkFDOUIsSUFBSSxJQUFJLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLFVBQVUsRUFBRTtvQkFDeEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUMzQixJQUFJLE1BQU0sWUFBWSxPQUFPLEVBQUU7d0JBQzdCLE1BQU0sT0FBTyxHQUFHLE1BQU0sTUFBTSxDQUFDO3dCQUM3QixJQUFJLE9BQU8sRUFBRTs0QkFDWCxPQUFPO2dDQUNMLGVBQWUsRUFBRSxPQUFPOzZCQUN6QixDQUFDO3lCQUNIO3dCQUNELE9BQU8sSUFBSSxDQUFDO3FCQUNiO29CQUNELElBQUksTUFBTSxFQUFFO3dCQUNWLE9BQU87NEJBQ0wsZUFBZSxFQUFFLE1BQU07eUJBQ3hCLENBQUM7cUJBQ0g7b0JBQ0QsT0FBTyxJQUFJLENBQUM7aUJBQ2I7Z0JBQ0QsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDLENBQUEsQ0FBQztRQUNKLENBQUMsRUFBQTtJQW5JRCxDQUFDO0lBckhELElBQWEsSUFBSSxDQUFDLEdBQVc7UUFDM0IsSUFBSSxHQUFHLEVBQUU7WUFDUCx1QkFBQSxJQUFJLFNBQVMsR0FBRyxFQUFDO1NBQ2xCO0lBQ0gsQ0FBQztJQUlELElBQWEsSUFBSSxDQUFDLEdBQXVCO1FBQ3ZDLElBQUksR0FBRyxFQUFFO1lBQ1AsSUFBSSxHQUFHLFlBQVksTUFBTSxFQUFFO2dCQUN6Qix1QkFBQSxJQUFJLFNBQVMsR0FBRyxDQUFDLElBQUksRUFBQzthQUN2QjtpQkFBTTtnQkFDTCx1QkFBQSxJQUFJLFNBQVMsR0FBRyxFQUFDO2FBQ2xCO1NBQ0Y7SUFDSCxDQUFDO0lBR0QsSUFBb0IsTUFBTSxDQUFDLEdBQVc7UUFDcEMsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7UUFDakIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7WUFDZixRQUFRLEVBQUUsVUFBVTtZQUNwQixLQUFLLEVBQUUsR0FBRztTQUNYLENBQUMsQ0FBQztJQUNMLENBQUM7SUFBQSxDQUFDO0lBSUYsSUFBa0Msb0JBQW9CLENBQUMsR0FBaUI7UUFDdEUsSUFBSSxDQUFDLG1CQUFtQixHQUFHLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQztJQUNqRCxDQUFDO0lBRUQsSUFBMEIsWUFBWSxDQUFDLEdBQWlCO1FBQ3RELHVCQUFBLElBQUksa0JBQWdCLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxJQUFJLEdBQUcsRUFBQztJQUMxQyxDQUFDO0lBRUQsSUFBYSxLQUFLLENBQUMsS0FBVTtRQUMzQixJQUFJLHlDQUFnQixLQUFLLEVBQUU7WUFDekIsdUJBQUEsSUFBSSxVQUFVLEtBQUssRUFBQztZQUNwQixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUU7Z0JBQy9CLFNBQVMsRUFBRSxLQUFLO2FBQ2pCLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUtELElBQWEsUUFBUSxDQUFDLEdBQWlCO1FBQ3JDLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLElBQUksR0FBRyxDQUFDO1FBQ3RDLG9EQUFBLElBQUksQ0FBbUIsQ0FBQztJQUMxQixDQUFDO0lBR0QsSUFBYSxRQUFRLENBQUMsR0FBaUI7UUFDckMsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsSUFBSSxHQUFHLENBQUM7SUFDeEMsQ0FBQztJQUdELElBQXdCLFVBQVUsQ0FBQyxHQUFXO1FBQzVDLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDdEIsb0RBQUEsSUFBSSxDQUFtQixDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUF3QixVQUFVLENBQUMsR0FBVztRQUM1QyxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDO1FBQ3RCLG9EQUFBLElBQUksQ0FBbUIsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBYSxPQUFPLENBQUMsR0FBVztRQUM5Qix1QkFBQSxJQUFJLFlBQVksR0FBRyxFQUFDO1FBQ3BCLG9EQUFBLElBQUksQ0FBbUIsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBYSxTQUFTLENBQUMsU0FBbUQ7UUFDeEUsdUJBQUEsSUFBSSxjQUFjLFNBQVMsRUFBQztRQUM1QixvREFBQSxJQUFJLENBQW1CLENBQUM7SUFDMUIsQ0FBQztJQUVELFdBQVc7SUFDWCxJQUFhLFFBQVEsQ0FBQyxHQUFpQjtRQUNyQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLElBQUksR0FBRyxDQUFDO1FBQzFCLElBQUksR0FBRyxFQUFFO1lBQ1AsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUM1QjthQUFNO1lBQ0wsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUMzQjtJQUNILENBQUM7SUFHRCxJQUF1QixTQUFTLENBQUMsR0FBaUI7UUFDaEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsSUFBSSxHQUFHLENBQUM7UUFDcEMsR0FBRyxHQUFHLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQztJQUM1QixDQUFDO0lBZ0JELElBQXVCLFNBQVMsQ0FBQyxHQUFpQjtRQUNoRCxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQztJQUN0QyxDQUFDO0lBT0QsUUFBUTs7UUFDTixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLFdBQUksSUFBSSxDQUFDLFVBQVUsMENBQUUsVUFBVSxDQUFBLENBQUM7UUFDakUsNENBQW1CLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQy9ELElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDMUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFRCxlQUFlOztRQUNiLDRDQUFtQixHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsU0FBUyx5Q0FBZ0IsQ0FBQyxDQUFDO1FBQ2hGLG1GQUFZLFVBQVUsc0NBQWEsSUFBSSxDQUFDLFdBQVcsRUFBRTtRQUNyRCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxXQUFXOztRQUNULG1GQUFZLGFBQWEsc0NBQWE7UUFDdEMsNENBQW1CLFdBQVcsRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFtSEQsUUFBUTtRQUNOLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxzQ0FBYSxDQUFDO1FBQ2pELElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7UUFDaEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3BFLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO1lBQzlDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN0RCxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDWCxDQUFDOzs7O1lBM1FGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsVUFBVTtnQkFDcEIsK3JIQUFxQztnQkFFckMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07O2FBQ2hEOzs7WUE1QkMsaUJBQWlCOzRDQW1KZCxNQUFNLFNBQUMsV0FBVyxjQUFHLFFBQVE7WUFoSXpCLGdCQUFnQjs7O21CQWF0QixLQUFLO3lCQUtMLEtBQUs7bUJBQ0wsS0FBSzttQkFFTCxLQUFLO3FCQVdMLEtBQUssU0FBQyxPQUFPOzBCQU9iLEtBQUs7bUJBQ0wsS0FBSzttQ0FFTCxLQUFLLFNBQUMscUJBQXFCOzJCQUkzQixLQUFLLFNBQUMsYUFBYTtvQkFJbkIsS0FBSzswQkFRTCxNQUFNO3VCQUlOLEtBQUs7dUJBTUwsS0FBSzt5QkFLTCxLQUFLLFNBQUMsV0FBVzt5QkFLakIsS0FBSyxTQUFDLFdBQVc7c0JBS2pCLEtBQUs7d0JBS0wsS0FBSzt1QkFNTCxLQUFLO21CQVFMLEtBQUs7d0JBRUwsS0FBSyxTQUFDLFVBQVU7MEJBSWhCLE1BQU07c0JBQ04sS0FBSzt1QkFDTCxNQUFNO3NCQUNOLE1BQU07K0JBQ04sTUFBTTt5QkFDTixNQUFNO3NCQUVOLFNBQVMsU0FBQyxTQUFTOzRCQUNuQixZQUFZLFNBQUMsc0JBQXNCO3FCQUduQyxZQUFZLFNBQUMsa0JBQWtCO3NCQUUvQixTQUFTLFNBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTt3QkFFekMsS0FBSyxTQUFDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBJbnB1dCxcclxuICBWaWV3Q2hpbGQsXHJcbiAgT3V0cHV0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBPbkRlc3Ryb3ksXHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBFbGVtZW50UmVmLFxyXG4gIE9uSW5pdCxcclxuICBDb250ZW50Q2hpbGQsXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIEluamVjdCxcclxuICBPcHRpb25hbFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIE5nRm9ybSwgVmFsaWRhdG9yRm4sIFZhbGlkYXRvcnMsIEFzeW5jVmFsaWRhdG9yRm4sIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0ICogYXMgdXVpZCBmcm9tICd1dWlkJztcclxuaW1wb3J0IGhhc2ggZnJvbSAnb2JqZWN0LWhhc2gnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFNkSW5wdXRTdWZmaXhEaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvaW5wdXQtc3VmZml4LmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFNkRm9ybUNvbnRyb2wgfSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL2NvbW1vbic7XHJcbmltcG9ydCB7IFNkVmlld0RlZkRpcmVjdGl2ZSB9IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvY29tbW9uJztcclxuaW1wb3J0IHsgU2RVdGlsaXR5U2VydmljZSB9IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvdXRpbGl0eSc7XHJcbmltcG9ydCB7IEZPUk1fQ09ORklHIH0gZnJvbSAnQHNkLWFuZ3VsYXIvY29yZS9jb21tb24nO1xyXG5pbXBvcnQgeyBJRm9ybUNvbmZpZ3VyYXRpb24gfSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL2NvbW1vbic7XHJcbmltcG9ydCB7IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzZC1pbnB1dCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2lucHV0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9pbnB1dC5jb21wb25lbnQuc2NzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTZElucHV0IGltcGxlbWVudHMgT25EZXN0cm95LCBPbkluaXQsIEFmdGVyVmlld0luaXQge1xyXG4gIGlkID0gYEkke3V1aWQudjQoKX1gO1xyXG4gICNuYW1lID0gdXVpZC52NCgpO1xyXG4gIEBJbnB1dCgpIHNldCBuYW1lKHZhbDogc3RyaW5nKSB7XHJcbiAgICBpZiAodmFsKSB7XHJcbiAgICAgIHRoaXMuI25hbWUgPSB2YWw7XHJcbiAgICB9XHJcbiAgfVxyXG4gIEBJbnB1dCgpIGFwcGVhcmFuY2U6IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2U7XHJcbiAgQElucHV0KCkgc2l6ZTogJ3NtJyB8ICdsZyc7XHJcbiAgI2Zvcm06IEZvcm1Hcm91cDtcclxuICBASW5wdXQoKSBzZXQgZm9ybSh2YWw6IE5nRm9ybSB8IEZvcm1Hcm91cCkge1xyXG4gICAgaWYgKHZhbCkge1xyXG4gICAgICBpZiAodmFsIGluc3RhbmNlb2YgTmdGb3JtKSB7XHJcbiAgICAgICAgdGhpcy4jZm9ybSA9IHZhbC5mb3JtO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuI2Zvcm0gPSB2YWw7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgcWNJZDogc3RyaW5nO1xyXG4gIGxhYmVsOiBzdHJpbmc7XHJcbiAgQElucHV0KCdsYWJlbCcpIHNldCBfbGFiZWwodmFsOiBzdHJpbmcpIHtcclxuICAgIHRoaXMubGFiZWwgPSB2YWw7XHJcbiAgICB0aGlzLnFjSWQgPSBoYXNoKHtcclxuICAgICAgc2VsZWN0b3I6ICdzZC1pbnB1dCcsXHJcbiAgICAgIGxhYmVsOiB2YWxcclxuICAgIH0pO1xyXG4gIH07XHJcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZztcclxuICBASW5wdXQoKSB0eXBlOiAndGV4dCcgfCAnbnVtYmVyJyB8ICdwYXNzd29yZCcgfCAnZW1haWwnIHwgJ2RhdGV0aW1lLWxvY2FsJyB8ICdtb250aCcgPSAndGV4dCc7XHJcbiAgZGlzYWJsZUVycm9yTWVzc2FnZSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgnZGlzYWJsZUVycm9yTWVzc2FnZScpIHNldCBfZGlzYWJsZUVycm9yTWVzc2FnZSh2YWw6IGJvb2xlYW4gfCAnJykge1xyXG4gICAgdGhpcy5kaXNhYmxlRXJyb3JNZXNzYWdlID0gKHZhbCA9PT0gJycpIHx8IHZhbDtcclxuICB9XHJcbiAgI2JsdXJPbkVudGVyID0gZmFsc2U7XHJcbiAgQElucHV0KCdibHVyT25FbnRlcicpIHNldCBfYmx1ck9uRW50ZXIodmFsOiBib29sZWFuIHwgJycpIHtcclxuICAgIHRoaXMuI2JsdXJPbkVudGVyID0gKHZhbCA9PT0gJycpIHx8IHZhbDtcclxuICB9XHJcbiAgI21vZGVsOiBhbnk7XHJcbiAgQElucHV0KCkgc2V0IG1vZGVsKHZhbHVlOiBhbnkpIHtcclxuICAgIGlmICh0aGlzLiNtb2RlbCAhPT0gdmFsdWUpIHtcclxuICAgICAgdGhpcy4jbW9kZWwgPSB2YWx1ZTtcclxuICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZSh2YWx1ZSwge1xyXG4gICAgICAgIGVtaXRFdmVudDogZmFsc2VcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIEBPdXRwdXQoKSBtb2RlbENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgLy8gVmFsaWRhdG9yXHJcbiAgaXNSZXF1aXJlZCA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNldCByZXF1aXJlZCh2YWw6IGJvb2xlYW4gfCAnJykge1xyXG4gICAgdGhpcy5pc1JlcXVpcmVkID0gKHZhbCA9PT0gJycpIHx8IHZhbDtcclxuICAgIHRoaXMuI3VwZGF0ZVZhbGlkYXRvcigpO1xyXG4gIH1cclxuXHJcbiAgaXNSZWFkb25seSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNldCByZWFkb25seSh2YWw6IGJvb2xlYW4gfCAnJykge1xyXG4gICAgdGhpcy5pc1JlYWRvbmx5ID0gKHZhbCA9PT0gJycpIHx8IHZhbDtcclxuICB9XHJcblxyXG4gIG1pbmxlbmd0aDogbnVtYmVyO1xyXG4gIEBJbnB1dCgnbWlubGVuZ3RoJykgc2V0IHBNaW5sZW5ndGgodmFsOiBudW1iZXIpIHtcclxuICAgIHRoaXMubWlubGVuZ3RoID0gK3ZhbDtcclxuICAgIHRoaXMuI3VwZGF0ZVZhbGlkYXRvcigpO1xyXG4gIH1cclxuICBtYXhsZW5ndGg6IG51bWJlcjtcclxuICBASW5wdXQoJ21heGxlbmd0aCcpIHNldCBwTWF4bGVuZ3RoKHZhbDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLm1heGxlbmd0aCA9ICt2YWw7XHJcbiAgICB0aGlzLiN1cGRhdGVWYWxpZGF0b3IoKTtcclxuICB9XHJcbiAgI3BhdHRlcm46IHN0cmluZztcclxuICBASW5wdXQoKSBzZXQgcGF0dGVybih2YWw6IHN0cmluZykge1xyXG4gICAgdGhpcy4jcGF0dGVybiA9IHZhbDtcclxuICAgIHRoaXMuI3VwZGF0ZVZhbGlkYXRvcigpO1xyXG4gIH1cclxuICAjdmFsaWRhdG9yOiAodmFsdWU6IGFueSkgPT4gc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+O1xyXG4gIEBJbnB1dCgpIHNldCB2YWxpZGF0b3IodmFsaWRhdG9yOiAodmFsdWU6IGFueSkgPT4gc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+KSB7XHJcbiAgICB0aGlzLiN2YWxpZGF0b3IgPSB2YWxpZGF0b3I7XHJcbiAgICB0aGlzLiN1cGRhdGVWYWxpZGF0b3IoKTtcclxuICB9XHJcblxyXG4gIC8vIE9wdGlvbmFsXHJcbiAgQElucHV0KCkgc2V0IGRpc2FibGVkKHZhbDogYm9vbGVhbiB8ICcnKSB7XHJcbiAgICB2YWwgPSAodmFsID09PSAnJykgfHwgdmFsO1xyXG4gICAgaWYgKHZhbCkge1xyXG4gICAgICB0aGlzLmZvcm1Db250cm9sLmRpc2FibGUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wuZW5hYmxlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIEBJbnB1dCgpIGljb24gPSAnc2VhcmNoJztcclxuICBoaWRlSWNvbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgnaGlkZUljb24nKSBzZXQgX2hpZGVJY29uKHZhbDogYm9vbGVhbiB8ICcnKSB7XHJcbiAgICB0aGlzLmhpZGVJY29uID0gKHZhbCA9PT0gJycpIHx8IHZhbDtcclxuICAgIHZhbCA9ICh2YWwgPT09ICcnKSB8fCB2YWw7XHJcbiAgfVxyXG4gIEBPdXRwdXQoKSBzZENsaWNrSWNvbiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBJbnB1dCgpIHRvb2x0aXA6IHN0cmluZyB8ICgoaW5wdXRWYWx1ZTogc3RyaW5nKSA9PiBzdHJpbmcpO1xyXG4gIEBPdXRwdXQoKSBzZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBzZEZvY3VzID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIHNkRm9jdXNGb3JjZUJsdXIgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkga2V5dXBFbnRlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgQFZpZXdDaGlsZCgnY29udHJvbCcpIGNvbnRyb2w6IEVsZW1lbnRSZWY7XHJcbiAgQENvbnRlbnRDaGlsZChTZElucHV0U3VmZml4RGlyZWN0aXZlKSBzZElucHV0U3VmZml4OiBTZElucHV0U3VmZml4RGlyZWN0aXZlO1xyXG4gIGZvcm1Db250cm9sID0gbmV3IFNkRm9ybUNvbnRyb2woKTtcclxuICAjc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xyXG4gIEBDb250ZW50Q2hpbGQoU2RWaWV3RGVmRGlyZWN0aXZlKSBzZFZpZXc6IFNkVmlld0RlZkRpcmVjdGl2ZTtcclxuICBpc0ZvY3VzZWQgPSBmYWxzZTtcclxuICBAVmlld0NoaWxkKCdidG5Db3B5JywgeyByZWFkOiBFbGVtZW50UmVmIH0pIGJ0bkNvcHk6IEVsZW1lbnRSZWY7XHJcbiAgY29weWFibGUgPSBmYWxzZTtcclxuICBASW5wdXQoJ2NvcHlhYmxlJykgc2V0IF9jb3B5YWJsZSh2YWw6IGJvb2xlYW4gfCAnJykge1xyXG4gICAgdGhpcy5jb3B5YWJsZSA9ICh2YWwgPT09ICcnKSB8fCB2YWw7XHJcbiAgfVxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgQEluamVjdChGT1JNX0NPTkZJRykgQE9wdGlvbmFsKCkgcHJpdmF0ZSBmb3JtQ29uZmlnOiBJRm9ybUNvbmZpZ3VyYXRpb24sXHJcbiAgICBwcml2YXRlIHV0aWxpdHlTZXJ2aWNlOiBTZFV0aWxpdHlTZXJ2aWNlKSB7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuYXBwZWFyYW5jZSA9IHRoaXMuYXBwZWFyYW5jZSB8fCB0aGlzLmZvcm1Db25maWc/LmFwcGVhcmFuY2U7XHJcbiAgICB0aGlzLiNzdWJzY3JpcHRpb24uYWRkKHRoaXMuZm9ybUNvbnRyb2wuc2RDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy4jc3Vic2NyaXB0aW9uLmFkZCh0aGlzLmZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUodGhpcy4jb25DaGFuZ2UpKTtcclxuICAgIHRoaXMuI2Zvcm0/LmFkZENvbnRyb2wodGhpcy4jbmFtZSwgdGhpcy5mb3JtQ29udHJvbCk7XHJcbiAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuI2Zvcm0/LnJlbW92ZUNvbnRyb2wodGhpcy4jbmFtZSk7XHJcbiAgICB0aGlzLiNzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHJlVmFsaWRhdGUgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmZvcm1Db250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICB9XHJcblxyXG4gICN1cGRhdGVWYWxpZGF0b3IgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmZvcm1Db250cm9sLmNsZWFyVmFsaWRhdG9ycygpO1xyXG4gICAgdGhpcy5mb3JtQ29udHJvbC5jbGVhckFzeW5jVmFsaWRhdG9ycygpO1xyXG4gICAgY29uc3QgdmFsaWRhdG9yczogVmFsaWRhdG9yRm5bXSA9IFtdO1xyXG4gICAgY29uc3QgYXN5bmNWYWxpZGF0b3JzOiBBc3luY1ZhbGlkYXRvckZuW10gPSBbXTtcclxuICAgIGlmICh0aGlzLmlzUmVxdWlyZWQpIHtcclxuICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMubWlubGVuZ3RoID4gMCkge1xyXG4gICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5taW5MZW5ndGgodGhpcy5taW5sZW5ndGgpKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLm1heGxlbmd0aCA+IDApIHtcclxuICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMubWF4TGVuZ3RoKHRoaXMubWF4bGVuZ3RoKSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy4jcGF0dGVybikge1xyXG4gICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5wYXR0ZXJuKHRoaXMuI3BhdHRlcm4pKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLiN2YWxpZGF0b3IpIHtcclxuICAgICAgYXN5bmNWYWxpZGF0b3JzLnB1c2godGhpcy4jY3VzdG9tVmFsaWRhdG9yKHRoaXMuI3ZhbGlkYXRvcikpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWxpZGF0b3JzKHZhbGlkYXRvcnMpO1xyXG4gICAgdGhpcy5mb3JtQ29udHJvbC5zZXRBc3luY1ZhbGlkYXRvcnMoYXN5bmNWYWxpZGF0b3JzKTtcclxuICAgIHRoaXMuZm9ybUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gIH1cclxuXHJcbiAgI29uQ2hhbmdlID0gKHZhbHVlOiBhbnkpID0+IHtcclxuICAgIHRoaXMubW9kZWxDaGFuZ2UuZW1pdCh2YWx1ZSk7XHJcbiAgICB0aGlzLnNkQ2hhbmdlLmVtaXQodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgb25LZXl1cEVudGVyID0gKCkgPT4ge1xyXG4gICAgY29uc3QgdmFsOiBzdHJpbmcgPSAodGhpcy5mb3JtQ29udHJvbC52YWx1ZSA/PyAnJykudG9TdHJpbmcoKTtcclxuICAgIGlmICh2YWwubGVuZ3RoID4gdmFsLnRyaW0oKS5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZSh2YWwudHJpbSgpKTtcclxuICAgIH1cclxuICAgIHRoaXMua2V5dXBFbnRlci5lbWl0KHRoaXMuZm9ybUNvbnRyb2wudmFsdWUpO1xyXG4gICAgaWYgKHRoaXMuI2JsdXJPbkVudGVyKSB7XHJcbiAgICAgIHRoaXMuYmx1cigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25DbGlja0ljb24gPSAoZXZlbnQ6IEV2ZW50KSA9PiB7XHJcbiAgICBldmVudD8ucHJldmVudERlZmF1bHQoKTtcclxuICAgIGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIHRoaXMuc2RDbGlja0ljb24uZW1pdCh0aGlzLmZvcm1Db250cm9sLnZhbHVlKTtcclxuICB9XHJcblxyXG4gIG9uRm9jdXMgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmlzRm9jdXNlZCA9IHRydWU7XHJcbiAgICB0aGlzLnNkRm9jdXMuZW1pdCgpO1xyXG4gICAgaWYgKHRoaXMuc2RGb2N1c0ZvcmNlQmx1ci5vYnNlcnZlcnM/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5ibHVyKCk7XHJcbiAgICAgIHRoaXMuc2RGb2N1c0ZvcmNlQmx1ci5lbWl0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkJsdXIgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmlzRm9jdXNlZCA9IGZhbHNlO1xyXG4gICAgY29uc3QgdmFsOiBzdHJpbmcgPSAodGhpcy5mb3JtQ29udHJvbC52YWx1ZSA/PyAnJykudG9TdHJpbmcoKTtcclxuICAgIGlmICh2YWwubGVuZ3RoID4gdmFsLnRyaW0oKS5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZSh2YWwudHJpbSgpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQ2xpY2sgPSAoKSA9PiB7XHJcbiAgICBpZiAodGhpcy5zZFZpZXc/LnRlbXBsYXRlUmVmKSB7XHJcbiAgICAgIGlmICghdGhpcy5mb3JtQ29udHJvbC5kaXNhYmxlZCAmJiAhdGhpcy5pc0ZvY3VzZWQpIHtcclxuICAgICAgICB0aGlzLmZvY3VzKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGJsdXIgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmlzRm9jdXNlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5jb250cm9sPy5uYXRpdmVFbGVtZW50Py5ibHVyKCk7XHJcbiAgfVxyXG5cclxuICBmb2N1cyA9ICgpID0+IHtcclxuICAgIHRoaXMuaXNGb2N1c2VkID0gdHJ1ZTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmNvbnRyb2w/Lm5hdGl2ZUVsZW1lbnQ/LmZvY3VzKCk7XHJcbiAgICB9LCAxMDApO1xyXG4gIH1cclxuXHJcbiAgI2N1c3RvbVZhbGlkYXRvciA9IChmdW5jOiAodmFsdWU6IGFueSkgPT4gc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+KTogQXN5bmNWYWxpZGF0b3JGbiA9PiB7XHJcbiAgICByZXR1cm4gYXN5bmMgKGM6IEFic3RyYWN0Q29udHJvbCk6IFByb21pc2U8eyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IG51bGw+ID0+IHtcclxuICAgICAgY29uc3QgdmFsdWUgPSBjLnZhbHVlIHx8IG51bGw7XHJcbiAgICAgIGlmIChmdW5jICYmIHR5cGVvZiAoZnVuYykgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBmdW5jKHZhbHVlKTtcclxuICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xyXG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGF3YWl0IHJlc3VsdDtcclxuICAgICAgICAgIGlmIChtZXNzYWdlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgY3VzdG9tVmFsaWRhdG9yOiBtZXNzYWdlXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgY3VzdG9tVmFsaWRhdG9yOiByZXN1bHRcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGNvcHlUZXh0KCkge1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5jb3B5VG9DbGlwYm9hcmQodGhpcy4jbW9kZWwpO1xyXG4gICAgdGhpcy5idG5Db3B5Lm5hdGl2ZUVsZW1lbnQuaW5uZXJUZXh0ID0gJ0NvcGllZCc7XHJcbiAgICB0aGlzLmJ0bkNvcHkubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgJ2NvbG9yOiAjNGNhZjUwOycpO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuYnRuQ29weS5uYXRpdmVFbGVtZW50LmlubmVyVGV4dCA9ICdDb3B5JztcclxuICAgICAgdGhpcy5idG5Db3B5Lm5hdGl2ZUVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdzdHlsZScpO1xyXG4gICAgfSwgMjAwMCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
304
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IkM6L1VzZXJzL25naGlhdHQxNV9vbmVtb3VudC9Eb2N1bWVudHMvbGliLWNvcmUtdWkvcHJvamVjdHMvc2QtY29yZS9pbnB1dC8iLCJzb3VyY2VzIjpbInNyYy9saWIvaW5wdXQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsU0FBUyxFQUNULE1BQU0sRUFDTixZQUFZLEVBQ1osaUJBQWlCLEVBR2pCLFVBQVUsRUFFVixZQUFZLEVBQ1osdUJBQXVCLEVBRXZCLE1BQU0sRUFDTixRQUFRLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFtQixNQUFNLEVBQWUsVUFBVSxFQUErQixNQUFNLGdCQUFnQixDQUFDO0FBQy9HLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sSUFBSSxNQUFNLGFBQWEsQ0FBQztBQUUvQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNsRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFTdEQsTUFBTSxPQUFPLE9BQU87SUFzSGxCLFlBQ1UsR0FBc0IsRUFDVyxVQUE4QixFQUMvRCxjQUFnQztRQUZoQyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUNXLGVBQVUsR0FBVixVQUFVLENBQW9CO1FBQy9ELG1CQUFjLEdBQWQsY0FBYyxDQUFrQjtRQXhIMUMsT0FBRSxHQUFHLElB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d0JBRUwsS0FBSyxTQUFDLFVBQVU7MEJBSWhCLE1BQU07c0JBQ04sS0FBSzt1QkFDTCxNQUFNO3NCQUNOLE1BQU07K0JBQ04sTUFBTTt5QkFDTixNQUFNO3NCQUVOLFNBQVMsU0FBQyxTQUFTOzRCQUNuQixZQUFZLFNBQUMsc0JBQXNCO3lCQUNuQyxZQUFZLFNBQUMsbUJBQW1CO3FCQUloQyxZQUFZLFNBQUMsa0JBQWtCO3NCQUUvQixTQUFTLFNBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTt3QkFFekMsS0FBSyxTQUFDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBJbnB1dCxcclxuICBWaWV3Q2hpbGQsXHJcbiAgT3V0cHV0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBPbkRlc3Ryb3ksXHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBFbGVtZW50UmVmLFxyXG4gIE9uSW5pdCxcclxuICBDb250ZW50Q2hpbGQsXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIEluamVjdCxcclxuICBPcHRpb25hbFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIE5nRm9ybSwgVmFsaWRhdG9yRm4sIFZhbGlkYXRvcnMsIEFzeW5jVmFsaWRhdG9yRm4sIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0ICogYXMgdXVpZCBmcm9tICd1dWlkJztcclxuaW1wb3J0IGhhc2ggZnJvbSAnb2JqZWN0LWhhc2gnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFNkSW5wdXRTdWZmaXhEaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvaW5wdXQtc3VmZml4LmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFNkRm9ybUNvbnRyb2wgfSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL2NvbW1vbic7XHJcbmltcG9ydCB7IFNkVmlld0RlZkRpcmVjdGl2ZSwgU2RMYWJsZURlZkRpcmVjdGl2ZSB9IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvY29tbW9uJztcclxuaW1wb3J0IHsgU2RVdGlsaXR5U2VydmljZSB9IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvdXRpbGl0eSc7XHJcbmltcG9ydCB7IEZPUk1fQ09ORklHIH0gZnJvbSAnQHNkLWFuZ3VsYXIvY29yZS9jb21tb24nO1xyXG5pbXBvcnQgeyBJRm9ybUNvbmZpZ3VyYXRpb24gfSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL2NvbW1vbic7XHJcbmltcG9ydCB7IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzZC1pbnB1dCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2lucHV0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9pbnB1dC5jb21wb25lbnQuc2NzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTZElucHV0IGltcGxlbWVudHMgT25EZXN0cm95LCBPbkluaXQsIEFmdGVyVmlld0luaXQge1xyXG4gIGlkID0gYEkke3V1aWQudjQoKX1gO1xyXG4gICNuYW1lID0gdXVpZC52NCgpO1xyXG4gIEBJbnB1dCgpIHNldCBuYW1lKHZhbDogc3RyaW5nKSB7XHJcbiAgICBpZiAodmFsKSB7XHJcbiAgICAgIHRoaXMuI25hbWUgPSB2YWw7XHJcbiAgICB9XHJcbiAgfVxyXG4gIEBJbnB1dCgpIGFwcGVhcmFuY2U6IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2U7XHJcbiAgQElucHV0KCkgc2l6ZTogJ3NtJyB8ICdsZyc7XHJcbiAgI2Zvcm06IEZvcm1Hcm91cDtcclxuICBASW5wdXQoKSBzZXQgZm9ybSh2YWw6IE5nRm9ybSB8IEZvcm1Hcm91cCkge1xyXG4gICAgaWYgKHZhbCkge1xyXG4gICAgICBpZiAodmFsIGluc3RhbmNlb2YgTmdGb3JtKSB7XHJcbiAgICAgICAgdGhpcy4jZm9ybSA9IHZhbC5mb3JtO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuI2Zvcm0gPSB2YWw7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgcWNJZDogc3RyaW5nO1xyXG4gIGxhYmVsOiBzdHJpbmc7XHJcbiAgQElucHV0KCdsYWJlbCcpIHNldCBfbGFiZWwodmFsOiBzdHJpbmcpIHtcclxuICAgIHRoaXMubGFiZWwgPSB2YWw7XHJcbiAgICB0aGlzLnFjSWQgPSBoYXNoKHtcclxuICAgICAgc2VsZWN0b3I6ICdzZC1pbnB1dCcsXHJcbiAgICAgIGxhYmVsOiB2YWxcclxuICAgIH0pO1xyXG4gIH07XHJcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZztcclxuICBASW5wdXQoKSB0eXBlOiAndGV4dCcgfCAnbnVtYmVyJyB8ICdwYXNzd29yZCcgfCAnZW1haWwnIHwgJ2RhdGV0aW1lLWxvY2FsJyB8ICdtb250aCcgPSAndGV4dCc7XHJcbiAgZGlzYWJsZUVycm9yTWVzc2FnZSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgnZGlzYWJsZUVycm9yTWVzc2FnZScpIHNldCBfZGlzYWJsZUVycm9yTWVzc2FnZSh2YWw6IGJvb2xlYW4gfCAnJykge1xyXG4gICAgdGhpcy5kaXNhYmxlRXJyb3JNZXNzYWdlID0gKHZhbCA9PT0gJycpIHx8IHZhbDtcclxuICB9XHJcbiAgI2JsdXJPbkVudGVyID0gZmFsc2U7XHJcbiAgQElucHV0KCdibHVyT25FbnRlcicpIHNldCBfYmx1ck9uRW50ZXIodmFsOiBib29sZWFuIHwgJycpIHtcclxuICAgIHRoaXMuI2JsdXJPbkVudGVyID0gKHZhbCA9PT0gJycpIHx8IHZhbDtcclxuICB9XHJcbiAgI21vZGVsOiBhbnk7XHJcbiAgQElucHV0KCkgc2V0IG1vZGVsKHZhbHVlOiBhbnkpIHtcclxuICAgIGlmICh0aGlzLiNtb2RlbCAhPT0gdmFsdWUpIHtcclxuICAgICAgdGhpcy4jbW9kZWwgPSB2YWx1ZTtcclxuICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZSh2YWx1ZSwge1xyXG4gICAgICAgIGVtaXRFdmVudDogZmFsc2VcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIEBPdXRwdXQoKSBtb2RlbENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgLy8gVmFsaWRhdG9yXHJcbiAgaXNSZXF1aXJlZCA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNldCByZXF1aXJlZCh2YWw6IGJvb2xlYW4gfCAnJykge1xyXG4gICAgdGhpcy5pc1JlcXVpcmVkID0gKHZhbCA9PT0gJycpIHx8IHZhbDtcclxuICAgIHRoaXMuI3VwZGF0ZVZhbGlkYXRvcigpO1xyXG4gIH1cclxuXHJcbiAgaXNSZWFkb25seSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNldCByZWFkb25seSh2YWw6IGJvb2xlYW4gfCAnJykge1xyXG4gICAgdGhpcy5pc1JlYWRvbmx5ID0gKHZhbCA9PT0gJycpIHx8IHZhbDtcclxuICB9XHJcblxyXG4gIG1pbmxlbmd0aDogbnVtYmVyO1xyXG4gIEBJbnB1dCgnbWlubGVuZ3RoJykgc2V0IHBNaW5sZW5ndGgodmFsOiBudW1iZXIpIHtcclxuICAgIHRoaXMubWlubGVuZ3RoID0gK3ZhbDtcclxuICAgIHRoaXMuI3VwZGF0ZVZhbGlkYXRvcigpO1xyXG4gIH1cclxuICBtYXhsZW5ndGg6IG51bWJlcjtcclxuICBASW5wdXQoJ21heGxlbmd0aCcpIHNldCBwTWF4bGVuZ3RoKHZhbDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLm1heGxlbmd0aCA9ICt2YWw7XHJcbiAgICB0aGlzLiN1cGRhdGVWYWxpZGF0b3IoKTtcclxuICB9XHJcbiAgI3BhdHRlcm46IHN0cmluZztcclxuICBASW5wdXQoKSBzZXQgcGF0dGVybih2YWw6IHN0cmluZykge1xyXG4gICAgdGhpcy4jcGF0dGVybiA9IHZhbDtcclxuICAgIHRoaXMuI3VwZGF0ZVZhbGlkYXRvcigpO1xyXG4gIH1cclxuICAjdmFsaWRhdG9yOiAodmFsdWU6IGFueSkgPT4gc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+O1xyXG4gIEBJbnB1dCgpIHNldCB2YWxpZGF0b3IodmFsaWRhdG9yOiAodmFsdWU6IGFueSkgPT4gc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+KSB7XHJcbiAgICB0aGlzLiN2YWxpZGF0b3IgPSB2YWxpZGF0b3I7XHJcbiAgICB0aGlzLiN1cGRhdGVWYWxpZGF0b3IoKTtcclxuICB9XHJcblxyXG4gIC8vIE9wdGlvbmFsXHJcbiAgQElucHV0KCkgc2V0IGRpc2FibGVkKHZhbDogYm9vbGVhbiB8ICcnKSB7XHJcbiAgICB2YWwgPSAodmFsID09PSAnJykgfHwgdmFsO1xyXG4gICAgaWYgKHZhbCkge1xyXG4gICAgICB0aGlzLmZvcm1Db250cm9sLmRpc2FibGUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wuZW5hYmxlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIEBJbnB1dCgpIGljb24gPSAnc2VhcmNoJztcclxuICBoaWRlSWNvbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgnaGlkZUljb24nKSBzZXQgX2hpZGVJY29uKHZhbDogYm9vbGVhbiB8ICcnKSB7XHJcbiAgICB0aGlzLmhpZGVJY29uID0gKHZhbCA9PT0gJycpIHx8IHZhbDtcclxuICAgIHZhbCA9ICh2YWwgPT09ICcnKSB8fCB2YWw7XHJcbiAgfVxyXG4gIEBPdXRwdXQoKSBzZENsaWNrSWNvbiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBJbnB1dCgpIHRvb2x0aXA6IHN0cmluZyB8ICgoaW5wdXRWYWx1ZTogc3RyaW5nKSA9PiBzdHJpbmcpO1xyXG4gIEBPdXRwdXQoKSBzZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBzZEZvY3VzID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIHNkRm9jdXNGb3JjZUJsdXIgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkga2V5dXBFbnRlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgQFZpZXdDaGlsZCgnY29udHJvbCcpIGNvbnRyb2w6IEVsZW1lbnRSZWY7XHJcbiAgQENvbnRlbnRDaGlsZChTZElucHV0U3VmZml4RGlyZWN0aXZlKSBzZElucHV0U3VmZml4OiBTZElucHV0U3VmZml4RGlyZWN0aXZlO1xyXG4gIEBDb250ZW50Q2hpbGQoU2RMYWJsZURlZkRpcmVjdGl2ZSkgc2RMYWJsZURlZjogU2RMYWJsZURlZkRpcmVjdGl2ZTtcclxuXHJcbiAgZm9ybUNvbnRyb2wgPSBuZXcgU2RGb3JtQ29udHJvbCgpO1xyXG4gICNzdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcbiAgQENvbnRlbnRDaGlsZChTZFZpZXdEZWZEaXJlY3RpdmUpIHNkVmlldzogU2RWaWV3RGVmRGlyZWN0aXZlO1xyXG4gIGlzRm9jdXNlZCA9IGZhbHNlO1xyXG4gIEBWaWV3Q2hpbGQoJ2J0bkNvcHknLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgYnRuQ29weTogRWxlbWVudFJlZjtcclxuICBjb3B5YWJsZSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgnY29weWFibGUnKSBzZXQgX2NvcHlhYmxlKHZhbDogYm9vbGVhbiB8ICcnKSB7XHJcbiAgICB0aGlzLmNvcHlhYmxlID0gKHZhbCA9PT0gJycpIHx8IHZhbDtcclxuICB9XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBASW5qZWN0KEZPUk1fQ09ORklHKSBAT3B0aW9uYWwoKSBwcml2YXRlIGZvcm1Db25maWc6IElGb3JtQ29uZmlndXJhdGlvbixcclxuICAgIHByaXZhdGUgdXRpbGl0eVNlcnZpY2U6IFNkVXRpbGl0eVNlcnZpY2UpIHtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5hcHBlYXJhbmNlID0gdGhpcy5hcHBlYXJhbmNlIHx8IHRoaXMuZm9ybUNvbmZpZz8uYXBwZWFyYW5jZTtcclxuICAgIHRoaXMuI3N1YnNjcmlwdGlvbi5hZGQodGhpcy5mb3JtQ29udHJvbC5zZENoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLiNzdWJzY3JpcHRpb24uYWRkKHRoaXMuZm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh0aGlzLiNvbkNoYW5nZSkpO1xyXG4gICAgdGhpcy4jZm9ybT8uYWRkQ29udHJvbCh0aGlzLiNuYW1lLCB0aGlzLmZvcm1Db250cm9sKTtcclxuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy4jZm9ybT8ucmVtb3ZlQ29udHJvbCh0aGlzLiNuYW1lKTtcclxuICAgIHRoaXMuI3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgcmVWYWxpZGF0ZSA9ICgpID0+IHtcclxuICAgIHRoaXMuZm9ybUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gIH1cclxuXHJcbiAgI3VwZGF0ZVZhbGlkYXRvciA9ICgpID0+IHtcclxuICAgIHRoaXMuZm9ybUNvbnRyb2wuY2xlYXJWYWxpZGF0b3JzKCk7XHJcbiAgICB0aGlzLmZvcm1Db250cm9sLmNsZWFyQXN5bmNWYWxpZGF0b3JzKCk7XHJcbiAgICBjb25zdCB2YWxpZGF0b3JzOiBWYWxpZGF0b3JGbltdID0gW107XHJcbiAgICBjb25zdCBhc3luY1ZhbGlkYXRvcnM6IEFzeW5jVmFsaWRhdG9yRm5bXSA9IFtdO1xyXG4gICAgaWYgKHRoaXMuaXNSZXF1aXJlZCkge1xyXG4gICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5taW5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLm1pbkxlbmd0aCh0aGlzLm1pbmxlbmd0aCkpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMubWF4bGVuZ3RoID4gMCkge1xyXG4gICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5tYXhMZW5ndGgodGhpcy5tYXhsZW5ndGgpKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLiNwYXR0ZXJuKSB7XHJcbiAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnBhdHRlcm4odGhpcy4jcGF0dGVybikpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuI3ZhbGlkYXRvcikge1xyXG4gICAgICBhc3luY1ZhbGlkYXRvcnMucHVzaCh0aGlzLiNjdXN0b21WYWxpZGF0b3IodGhpcy4jdmFsaWRhdG9yKSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbGlkYXRvcnModmFsaWRhdG9ycyk7XHJcbiAgICB0aGlzLmZvcm1Db250cm9sLnNldEFzeW5jVmFsaWRhdG9ycyhhc3luY1ZhbGlkYXRvcnMpO1xyXG4gICAgdGhpcy5mb3JtQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgfVxyXG5cclxuICAjb25DaGFuZ2UgPSAodmFsdWU6IGFueSkgPT4ge1xyXG4gICAgdGhpcy5tb2RlbENoYW5nZS5lbWl0KHZhbHVlKTtcclxuICAgIHRoaXMuc2RDaGFuZ2UuZW1pdCh2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBvbktleXVwRW50ZXIgPSAoKSA9PiB7XHJcbiAgICBjb25zdCB2YWw6IHN0cmluZyA9ICh0aGlzLmZvcm1Db250cm9sLnZhbHVlID8/ICcnKS50b1N0cmluZygpO1xyXG4gICAgaWYgKHZhbC5sZW5ndGggPiB2YWwudHJpbSgpLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKHZhbC50cmltKCkpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5rZXl1cEVudGVyLmVtaXQodGhpcy5mb3JtQ29udHJvbC52YWx1ZSk7XHJcbiAgICBpZiAodGhpcy4jYmx1ck9uRW50ZXIpIHtcclxuICAgICAgdGhpcy5ibHVyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkNsaWNrSWNvbiA9IChldmVudDogRXZlbnQpID0+IHtcclxuICAgIGV2ZW50Py5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgdGhpcy5zZENsaWNrSWNvbi5lbWl0KHRoaXMuZm9ybUNvbnRyb2wudmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgb25Gb2N1cyA9ICgpID0+IHtcclxuICAgIHRoaXMuaXNGb2N1c2VkID0gdHJ1ZTtcclxuICAgIHRoaXMuc2RGb2N1cy5lbWl0KCk7XHJcbiAgICBpZiAodGhpcy5zZEZvY3VzRm9yY2VCbHVyLm9ic2VydmVycz8ubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmJsdXIoKTtcclxuICAgICAgdGhpcy5zZEZvY3VzRm9yY2VCbHVyLmVtaXQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQmx1ciA9ICgpID0+IHtcclxuICAgIHRoaXMuaXNGb2N1c2VkID0gZmFsc2U7XHJcbiAgICBjb25zdCB2YWw6IHN0cmluZyA9ICh0aGlzLmZvcm1Db250cm9sLnZhbHVlID8/ICcnKS50b1N0cmluZygpO1xyXG4gICAgaWYgKHZhbC5sZW5ndGggPiB2YWwudHJpbSgpLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKHZhbC50cmltKCkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25DbGljayA9ICgpID0+IHtcclxuICAgIGlmICh0aGlzLnNkVmlldz8udGVtcGxhdGVSZWYpIHtcclxuICAgICAgaWYgKCF0aGlzLmZvcm1Db250cm9sLmRpc2FibGVkICYmICF0aGlzLmlzRm9jdXNlZCkge1xyXG4gICAgICAgIHRoaXMuZm9jdXMoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYmx1ciA9ICgpID0+IHtcclxuICAgIHRoaXMuaXNGb2N1c2VkID0gZmFsc2U7XHJcbiAgICB0aGlzLmNvbnRyb2w/Lm5hdGl2ZUVsZW1lbnQ/LmJsdXIoKTtcclxuICB9XHJcblxyXG4gIGZvY3VzID0gKCkgPT4ge1xyXG4gICAgdGhpcy5pc0ZvY3VzZWQgPSB0cnVlO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuY29udHJvbD8ubmF0aXZlRWxlbWVudD8uZm9jdXMoKTtcclxuICAgIH0sIDEwMCk7XHJcbiAgfVxyXG5cclxuICAjY3VzdG9tVmFsaWRhdG9yID0gKGZ1bmM6ICh2YWx1ZTogYW55KSA9PiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz4pOiBBc3luY1ZhbGlkYXRvckZuID0+IHtcclxuICAgIHJldHVybiBhc3luYyAoYzogQWJzdHJhY3RDb250cm9sKTogUHJvbWlzZTx7IFtrZXk6IHN0cmluZ106IGFueSB9IHwgbnVsbD4gPT4ge1xyXG4gICAgICBjb25zdCB2YWx1ZSA9IGMudmFsdWUgfHwgbnVsbDtcclxuICAgICAgaWYgKGZ1bmMgJiYgdHlwZW9mIChmdW5jKSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGZ1bmModmFsdWUpO1xyXG4gICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XHJcbiAgICAgICAgICBjb25zdCBtZXNzYWdlID0gYXdhaXQgcmVzdWx0O1xyXG4gICAgICAgICAgaWYgKG1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICBjdXN0b21WYWxpZGF0b3I6IG1lc3NhZ2VcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBjdXN0b21WYWxpZGF0b3I6IHJlc3VsdFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgY29weVRleHQoKSB7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLmNvcHlUb0NsaXBib2FyZCh0aGlzLiNtb2RlbCk7XHJcbiAgICB0aGlzLmJ0bkNvcHkubmF0aXZlRWxlbWVudC5pbm5lclRleHQgPSAnQ29waWVkJztcclxuICAgIHRoaXMuYnRuQ29weS5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnc3R5bGUnLCAnY29sb3I6ICM0Y2FmNTA7Jyk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5idG5Db3B5Lm5hdGl2ZUVsZW1lbnQuaW5uZXJUZXh0ID0gJ0NvcHknO1xyXG4gICAgICB0aGlzLmJ0bkNvcHkubmF0aXZlRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ3N0eWxlJyk7XHJcbiAgICB9LCAyMDAwKTtcclxuICB9XHJcbn1cclxuIl19
@@ -2,4 +2,6 @@
2
2
  * Generated bundle index. Do not edit.
3
3
  */
4
4
  export * from './index';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2QtYW5ndWxhci1jb3JlLXVwbG9hZC1leGNlbC5qcyIsInNvdXJjZVJvb3QiOiJDOi9Vc2Vycy9uZ2hpYXR0MTVfb25lbW91bnQvRG9jdW1lbnRzL2xpYi1jb3JlLXVpL3Byb2plY3RzL3NkLWNvcmUvdXBsb2FkLWV4Y2VsLyIsInNvdXJjZXMiOlsic2QtYW5ndWxhci1jb3JlLXVwbG9hZC1leGNlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ==
5
+ export { SdColumnHiddenPipe as ɵa } from './src/lib/pipes/columm-hidden.pipe';
6
+ export { SdColumnTransformPipe as ɵb } from './src/lib/pipes/column-transform.pipe';
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2QtYW5ndWxhci1jb3JlLXVwbG9hZC1leGNlbC5qcyIsInNvdXJjZVJvb3QiOiJDOi9Vc2Vycy9uZ2hpYXR0MTVfb25lbW91bnQvRG9jdW1lbnRzL2xpYi1jb3JlLXVpL3Byb2plY3RzL3NkLWNvcmUvdXBsb2FkLWV4Y2VsLyIsInNvdXJjZXMiOlsic2QtYW5ndWxhci1jb3JlLXVwbG9hZC1leGNlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDO0FBRXhCLE9BQU8sRUFBQyxrQkFBa0IsSUFBSSxFQUFFLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RSxPQUFPLEVBQUMscUJBQXFCLElBQUksRUFBRSxFQUFDLE1BQU0sdUNBQXVDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuXG5leHBvcnQge1NkQ29sdW1uSGlkZGVuUGlwZSBhcyDJtWF9IGZyb20gJy4vc3JjL2xpYi9waXBlcy9jb2x1bW0taGlkZGVuLnBpcGUnO1xuZXhwb3J0IHtTZENvbHVtblRyYW5zZm9ybVBpcGUgYXMgybVifSBmcm9tICcuL3NyYy9saWIvcGlwZXMvY29sdW1uLXRyYW5zZm9ybS5waXBlJzsiXX0=
@@ -0,0 +1,23 @@
1
+ import { Pipe } from '@angular/core';
2
+ export class SdColumnHiddenPipe {
3
+ constructor() { }
4
+ transform(column) {
5
+ if (column.hidden === undefined) {
6
+ return true;
7
+ }
8
+ if (typeof (column.hidden) === 'boolean') {
9
+ return !column.hidden;
10
+ }
11
+ if (typeof (column.hidden) === 'function') {
12
+ return !column.hidden();
13
+ }
14
+ return false;
15
+ }
16
+ }
17
+ SdColumnHiddenPipe.decorators = [
18
+ { type: Pipe, args: [{
19
+ name: 'columnHidden'
20
+ },] }
21
+ ];
22
+ SdColumnHiddenPipe.ctorParameters = () => [];
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1tLWhpZGRlbi5waXBlLmpzIiwic291cmNlUm9vdCI6IkM6L1VzZXJzL25naGlhdHQxNV9vbmVtb3VudC9Eb2N1bWVudHMvbGliLWNvcmUtdWkvcHJvamVjdHMvc2QtY29yZS91cGxvYWQtZXhjZWwvIiwic291cmNlcyI6WyJzcmMvbGliL3BpcGVzL2NvbHVtbS1oaWRkZW4ucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUtwRCxNQUFNLE9BQU8sa0JBQWtCO0lBQzdCLGdCQUFnQixDQUFDO0lBQ2pCLFNBQVMsQ0FBQyxNQUEyQjtRQUNuQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFO1lBQy9CLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssU0FBUyxFQUFFO1lBQ3hDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1NBQ3ZCO1FBQ0QsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLFVBQVUsRUFBRTtZQUN6QyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ3pCO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDOzs7WUFoQkYsSUFBSSxTQUFDO2dCQUNKLElBQUksRUFBRSxjQUFjO2FBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTZFVwbG9hZEV4Y2VsQ29sdW1uIH0gZnJvbSAnLi4vdXBsb2FkLWV4Y2VsLm1vZGVsJztcclxuQFBpcGUoe1xyXG4gIG5hbWU6ICdjb2x1bW5IaWRkZW4nXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTZENvbHVtbkhpZGRlblBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcclxuICBjb25zdHJ1Y3RvcigpIHsgfVxyXG4gIHRyYW5zZm9ybShjb2x1bW46IFNkVXBsb2FkRXhjZWxDb2x1bW4pOiBib29sZWFuIHtcclxuICAgIGlmIChjb2x1bW4uaGlkZGVuID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIChjb2x1bW4uaGlkZGVuKSA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgIHJldHVybiAhY29sdW1uLmhpZGRlbjtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgKGNvbHVtbi5oaWRkZW4pID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIHJldHVybiAhY29sdW1uLmhpZGRlbigpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,18 @@
1
+ import { __awaiter } from "tslib";
2
+ import { Pipe } from '@angular/core';
3
+ export class SdColumnTransformPipe {
4
+ transform(value, rowData, column) {
5
+ return __awaiter(this, void 0, void 0, function* () {
6
+ if (column === null || column === void 0 ? void 0 : column.transform) {
7
+ return column.transform(value, rowData);
8
+ }
9
+ return value;
10
+ });
11
+ }
12
+ }
13
+ SdColumnTransformPipe.decorators = [
14
+ { type: Pipe, args: [{
15
+ name: 'columnTransform'
16
+ },] }
17
+ ];
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLXRyYW5zZm9ybS5waXBlLmpzIiwic291cmNlUm9vdCI6IkM6L1VzZXJzL25naGlhdHQxNV9vbmVtb3VudC9Eb2N1bWVudHMvbGliLWNvcmUtdWkvcHJvamVjdHMvc2QtY29yZS91cGxvYWQtZXhjZWwvIiwic291cmNlcyI6WyJzcmMvbGliL3BpcGVzL2NvbHVtbi10cmFuc2Zvcm0ucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFLcEQsTUFBTSxPQUFPLHFCQUFxQjtJQUMxQixTQUFTLENBQUMsS0FBVSxFQUFFLE9BQVksRUFBRSxNQUEyQjs7WUFDbkUsSUFBSSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsU0FBUyxFQUFFO2dCQUNyQixPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2FBQ3pDO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO0tBQUE7OztZQVRGLElBQUksU0FBQztnQkFDSixJQUFJLEVBQUUsaUJBQWlCO2FBQ3hCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTZFVwbG9hZEV4Y2VsQ29sdW1uIH0gZnJvbSAnLi4vdXBsb2FkLWV4Y2VsLm1vZGVsJztcclxuQFBpcGUoe1xyXG4gIG5hbWU6ICdjb2x1bW5UcmFuc2Zvcm0nXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTZENvbHVtblRyYW5zZm9ybVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcclxuICBhc3luYyB0cmFuc2Zvcm0odmFsdWU6IGFueSwgcm93RGF0YTogYW55LCBjb2x1bW46IFNkVXBsb2FkRXhjZWxDb2x1bW4pOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgaWYgKGNvbHVtbj8udHJhbnNmb3JtKSB7XHJcbiAgICAgIHJldHVybiBjb2x1bW4udHJhbnNmb3JtKHZhbHVlLCByb3dEYXRhKTtcclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZTtcclxuICB9XHJcbn1cclxuIl19
@@ -10,12 +10,14 @@ import { SdTranslateService } from '@sd-angular/core/translate';
10
10
  import { MatPaginator } from '@angular/material/paginator';
11
11
  import { Subscription } from 'rxjs';
12
12
  import { SdExportService } from '@sd-angular/core/export';
13
+ import { SdColumnHiddenPipe } from './pipes/columm-hidden.pipe';
13
14
  export class SdUploadExcel {
14
- constructor(ref, exportService, translateService, notifyService, loadingService) {
15
+ constructor(ref, exportService, translateService, notifyService, sdColumnHidden, loadingService) {
15
16
  this.ref = ref;
16
17
  this.exportService = exportService;
17
18
  this.translateService = translateService;
18
19
  this.notifyService = notifyService;
20
+ this.sdColumnHidden = sdColumnHidden;
19
21
  this.loadingService = loadingService;
20
22
  this.importId = 'I' + uuid.v4();
21
23
  this.items = [];
@@ -131,6 +133,9 @@ export class SdUploadExcel {
131
133
  };
132
134
  const { translate } = this.translateService;
133
135
  for (const column of this.option.columns) {
136
+ if (!this.sdColumnHidden.transform(column)) {
137
+ continue;
138
+ }
134
139
  validation.data[column.field] = {};
135
140
  try {
136
141
  if (column.defaultValue !== undefined) {
@@ -311,9 +316,10 @@ export class SdUploadExcel {
311
316
  }
312
317
  }
313
318
  }
319
+ const columnNotHidden = this.option.columns.filter(column => this.sdColumnHidden.transform(column));
314
320
  const excelTemplate = {
315
321
  fileName: this.option.fileName || 'Template',
316
- columns: this.option.columns.map(column => {
322
+ columns: columnNotHidden.map(column => {
317
323
  return {
318
324
  field: column.field,
319
325
  title: column.title,
@@ -340,7 +346,7 @@ export class SdUploadExcel {
340
346
  title: this.translateService.translate('Upload message'),
341
347
  width: '250px',
342
348
  required: false
343
- }, ...this.option.columns],
349
+ }, ...this.option.columns.filter(column => this.sdColumnHidden.transform(column))],
344
350
  items: this.filteredItems.map(e => {
345
351
  var _a, _b, _c, _d;
346
352
  return (Object.assign(Object.assign({}, e.origin), { sdMessage: (_d = (((_a = e.validation) === null || _a === void 0 ? void 0 : _a.error) || ((_b = e.validation) === null || _b === void 0 ? void 0 : _b.warning) || ((_c = e.validation) === null || _c === void 0 ? void 0 : _c.success))) === null || _d === void 0 ? void 0 : _d.replace(/<strong>/g, '').replace(/<\/strong>/g, '').replace(/<br>/g, '\n') }));
@@ -459,7 +465,7 @@ _paginator = new WeakMap(), _subscription = new WeakMap(), _reset = new WeakMap(
459
465
  SdUploadExcel.decorators = [
460
466
  { type: Component, args: [{
461
467
  selector: 'sd-upload-excel',
462
- template: "<sd-modal [title]=\"(option?.title || 'Import Excel')| sdTranslate\" #modal>\r\n <sd-modal-body background=\"#F0F8FF\">\r\n <div class=\"row mx-0 mb-10\">\r\n <sd-button *ngIf=\"items?.length\" class=\"mr-5\" (action)=\"view('ALL')\" icon=\"cached\"\r\n [title]=\"'View all' | sdTranslate\" size=\"sm\"></sd-button>\r\n <sd-button *ngIf=\"numberOfSuccess\" class=\"mr-5\" (action)=\"view('SUCCESS')\" icon=\"done\" [title]=\"numberOfSuccess\"\r\n [tooltip]=\"'Number of success rows' | sdTranslate\" size=\"sm\" color=\"success\"></sd-button>\r\n <sd-button *ngIf=\"numberOfWarning\" class=\"mr-5\" (action)=\"view('WARNING')\" icon=\"warning\"\r\n [title]=\"numberOfWarning\" [tooltip]=\"'Number of warning rows' | sdTranslate\" size=\"sm\"></sd-button>\r\n <sd-button *ngIf=\"numberOfError\" class=\"mr-5\" (action)=\"view('ERROR')\" icon=\"error\" [title]=\"numberOfError\"\r\n color=\"danger\" [tooltip]=\"'Number of error rows' | sdTranslate\" size=\"sm\"></sd-button>\r\n </div>\r\n <div class=\"sd-box\">\r\n <div class=\"sd-box-body p-0\">\r\n <div class=\"table-responsive\" style=\"position: relative; height:50vh\">\r\n <table class=\"table table-striped table-sm table-hover table-bordered\">\r\n <thead class=\"thead-light\">\r\n <tr>\r\n <th class=\"text-center position-sticky c-sticky-left\" style=\"width: 50px\">#</th>\r\n <th *ngIf=\"filteredItems?.length\" class=\"text-center\" style=\"min-width: 250px; width: 250px\">\r\n {{'Upload message' | sdTranslate}}</th>\r\n <th *ngFor=\"let column of option.columns\"\r\n [ngStyle]=\"{'min-width':column.width ? column.width : '300px'}\" [matTooltip]=\"column.title\">\r\n <span class=\"c-ellipsis\"\r\n [ngStyle]=\"{'min-width':column.width ? column.width : '300px', 'max-width':column.width ? column.width : '300px'}\">{{column.title}}</span>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody *ngIf=\"viewItems.length\">\r\n <tr *ngFor=\"let item of viewItems\">\r\n <td class=\"text-center position-sticky c-sticky-left\" style=\"width: 50px\">\r\n <span class=\"badge\"\r\n [ngClass]=\"{'badge-success':!item.validation?.warning && !item.validation?.error, 'badge-warning':item.validation?.warning && !item.validation?.error, 'badge-danger':item.validation?.error}\"\r\n style=\"width: 100%\">{{item.excelIndex}}</span>\r\n </td>\r\n <td style=\"min-width: 250px; width: 250px\">\r\n <div\r\n [innerHtml]=\"item.validation?.error || item.validation?.warning || item.validation?.success || ('Success' | sdTranslate)\">\r\n </div>\r\n </td>\r\n <td *ngFor=\"let column of option.columns\" class=\"align-middle\"\r\n [ngClass]=\"{'table-warning':item.validation?.data[column.field]?.warning && !item.validation?.data[column.field]?.error, 'table-danger':item.validation?.data[column.field]?.error}\"\r\n [matTooltip]=\"item.validation?.data[column.field]?.error || item.validation?.data[column.field]?.warning\"\r\n [ngStyle]=\"{'min-width':column.width ? column.width : '300px'}\" matTooltipPosition=\"above\">\r\n <span class=\"c-ellipsis\">\r\n <ng-container *ngIf=\"column.type === 'date' || column.type === 'datetime' && item.origin\">\r\n {{item.origin[column.field]}}\r\n </ng-container>\r\n <ng-container *ngIf=\"column.type === 'number'\">\r\n {{item.validation?.data[column.field]?.error ? item[column.field] : (item[column.field] | number :\r\n '1.0-2')}}\r\n </ng-container>\r\n <ng-container *ngIf=\"column.type === 'array'\">\r\n {{item[column.field]?.split(column.divideString)?.length}} {{column.unitString}}\r\n <button mat-button [matMenuTriggerFor]=\"menu\" class=\"c-mat-menu\">\r\n <mat-icon>open_in_new</mat-icon>\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n <div class=\"row mx-0\">\r\n <div class=\"col-6\" *ngFor=\"let itemArray of item[column.field]?.split(column.divideString)\">\r\n {{itemArray}}\r\n </div>\r\n </div>\r\n </mat-menu>\r\n </ng-container>\r\n <ng-container\r\n *ngIf=\"column.type !== 'date' && column.type !== 'datetime' && column.type !== 'number' && column.type !== 'array'\">\r\n {{item[column.field]}}\r\n </ng-container>\r\n </span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"sd-box-footer clearfix\">\r\n <div style=\"display: flex; align-items: center; align-content: space-between;\">\r\n <div style=\"flex: 1;\" [innerHTML]=\"option?.note\">\r\n </div>\r\n <div style=\"flex: 1;\">\r\n <mat-paginator [length]=\"filteredItems?.length || 0\" hidePageSize>\r\n </mat-paginator>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </sd-modal-body>\r\n <sd-modal-footer *sdDesktop>\r\n <div class=\"mr-auto\">\r\n <sd-button class=\"mr-5\" (action)=\"upload()\" icon=\"file_upload\" [title]=\"'Upload' | sdTranslate\" size=\"sm\"\r\n color=\"info\"></sd-button>\r\n <sd-button class=\"mr-5\" (action)=\"downloadTemplate()\" icon=\"file_download\" [loading]=\"isDownloadTemplate\"\r\n [title]=\"'Download template' | sdTranslate\" color=\"info\" type=\"outline\" size=\"sm\">\r\n </sd-button>\r\n </div>\r\n <sd-button *ngIf=\"filteredItems?.length\" class=\"mr-5\" (action)=\"export()\" icon=\"get_app\"\r\n [title]=\"'Download result' | sdTranslate\" size=\"sm\" color=\"info\" type=\"outline\">\r\n </sd-button>\r\n <sd-button (action)=\"accept()\" [title]=\"'Accept' | sdTranslate\"\r\n [disabled]=\"numberOfSuccess === 0 || numberOfError > 0 || isUploaded\" color=\"primary\" type=\"fill\" size=\"sm\">\r\n </sd-button>\r\n </sd-modal-footer>\r\n <sd-modal-footer *sdMobileTablet>\r\n <sd-button style=\"flex: 1; padding-right: 5px;\" (action)=\"upload()\" icon=\"file_upload\"\r\n [title]=\"'Upload' | sdTranslate\" width=\"100%\" size=\"sm\" color=\"info\"></sd-button>\r\n <sd-button style=\"flex: 1; padding-left: 5px;\" (action)=\"accept()\" icon=\"check\" [title]=\"'Accept' | sdTranslate\"\r\n [disabled]=\"numberOfSuccess === 0 || numberOfError > 0\" color=\"success\" width=\"100%\" size=\"sm\"></sd-button>\r\n </sd-modal-footer>\r\n</sd-modal>",
468
+ template: "<sd-modal [title]=\"(option?.title || 'Import Excel')| sdTranslate\" #modal>\r\n <sd-modal-body background=\"#F0F8FF\">\r\n <div class=\"row mx-0 mb-10\">\r\n <sd-button *ngIf=\"items?.length\" class=\"mr-5\" (action)=\"view('ALL')\" icon=\"cached\"\r\n [title]=\"'View all' | sdTranslate\" size=\"sm\"></sd-button>\r\n <sd-button *ngIf=\"numberOfSuccess\" class=\"mr-5\" (action)=\"view('SUCCESS')\" icon=\"done\" [title]=\"numberOfSuccess\"\r\n [tooltip]=\"'Number of success rows' | sdTranslate\" size=\"sm\" color=\"success\"></sd-button>\r\n <sd-button *ngIf=\"numberOfWarning\" class=\"mr-5\" (action)=\"view('WARNING')\" icon=\"warning\"\r\n [title]=\"numberOfWarning\" [tooltip]=\"'Number of warning rows' | sdTranslate\" size=\"sm\"></sd-button>\r\n <sd-button *ngIf=\"numberOfError\" class=\"mr-5\" (action)=\"view('ERROR')\" icon=\"error\" [title]=\"numberOfError\"\r\n color=\"danger\" [tooltip]=\"'Number of error rows' | sdTranslate\" size=\"sm\"></sd-button>\r\n </div>\r\n <div class=\"sd-box\">\r\n <div class=\"sd-box-body p-0\">\r\n <div class=\"table-responsive\" style=\"position: relative; height:50vh\">\r\n <table class=\"table table-striped table-sm table-hover table-bordered\">\r\n <thead class=\"thead-light\">\r\n <tr>\r\n <th class=\"text-center position-sticky c-sticky-left\" style=\"width: 50px\">#</th>\r\n <th *ngIf=\"filteredItems?.length\" class=\"text-center\" style=\"min-width: 250px; width: 250px\">\r\n {{'Upload message' | sdTranslate}}</th>\r\n <ng-container *ngFor=\"let column of option.columns\">\r\n <th *ngIf=\"column | columnHidden\"\r\n [ngStyle]=\"{'min-width':column.width ? column.width : '300px'}\" [matTooltip]=\"column.title\">\r\n <span class=\"c-ellipsis\"\r\n [ngStyle]=\"{'min-width':column.width ? column.width : '300px', 'max-width':column.width ? column.width : '300px'}\">{{column.title}}</span>\r\n </th>\r\n </ng-container>\r\n </tr>\r\n </thead>\r\n <tbody *ngIf=\"viewItems.length\">\r\n <tr *ngFor=\"let item of viewItems\">\r\n <td class=\"text-center position-sticky c-sticky-left\" style=\"width: 50px\">\r\n <span class=\"badge\"\r\n [ngClass]=\"{'badge-success':!item.validation?.warning && !item.validation?.error, 'badge-warning':item.validation?.warning && !item.validation?.error, 'badge-danger':item.validation?.error}\"\r\n style=\"width: 100%\">{{item.excelIndex}}</span>\r\n </td>\r\n <td style=\"min-width: 250px; width: 250px\">\r\n <div\r\n [innerHtml]=\"item.validation?.error || item.validation?.warning || item.validation?.success || ('Success' | sdTranslate)\">\r\n </div>\r\n </td>\r\n <ng-container *ngFor=\"let column of option.columns\">\r\n <td *ngIf=\"column | columnHidden\" class=\"align-middle\"\r\n [ngClass]=\"{'table-warning':item.validation?.data[column.field]?.warning && !item.validation?.data[column.field]?.error, 'table-danger':item.validation?.data[column.field]?.error}\"\r\n [matTooltip]=\"item.validation?.data[column.field]?.error || item.validation?.data[column.field]?.warning\"\r\n [ngStyle]=\"{'min-width':column.width ? column.width : '300px'}\" matTooltipPosition=\"above\">\r\n <span class=\"c-ellipsis\">\r\n <ng-container *ngIf=\"column.type === 'date' || column.type === 'datetime' && item.origin\">\r\n {{item.origin[column.field] | columnTransform:item:column | async}}\r\n </ng-container>\r\n <ng-container *ngIf=\"column.type === 'number'\">\r\n {{item.validation?.data[column.field]?.error ? (item[column.field] | columnTransform:item:column | async): (item[column.field] | number :\r\n '1.0-2')}}\r\n </ng-container>\r\n <ng-container *ngIf=\"column.type === 'array'\">\r\n {{item[column.field]?.split(column.divideString)?.length}} {{column.unitString}}\r\n <button mat-button [matMenuTriggerFor]=\"menu\" class=\"c-mat-menu\">\r\n <mat-icon>open_in_new</mat-icon>\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n <div class=\"row mx-0\">\r\n <div class=\"col-6\" *ngFor=\"let itemArray of item[column.field]?.split(column.divideString)\">\r\n {{itemArray | columnTransform:item:column | async}}\r\n </div>\r\n </div>\r\n </mat-menu>\r\n </ng-container>\r\n <ng-container\r\n *ngIf=\"column.type !== 'date' && column.type !== 'datetime' && column.type !== 'number' && column.type !== 'array'\">\r\n <!-- {{item[column.field]}} -->\r\n {{item[column.field] | columnTransform:item:column | async}}\r\n\r\n </ng-container>\r\n </span>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"sd-box-footer clearfix\">\r\n <div style=\"display: flex; align-items: center; align-content: space-between;\">\r\n <div style=\"flex: 1;\" [innerHTML]=\"option?.note\">\r\n </div>\r\n <div style=\"flex: 1;\">\r\n <mat-paginator [length]=\"filteredItems?.length || 0\" hidePageSize>\r\n </mat-paginator>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </sd-modal-body>\r\n <sd-modal-footer *sdDesktop>\r\n <div class=\"mr-auto\">\r\n <sd-button class=\"mr-5\" (action)=\"upload()\" icon=\"file_upload\" [title]=\"'Upload' | sdTranslate\" size=\"sm\"\r\n color=\"info\"></sd-button>\r\n <sd-button class=\"mr-5\" (action)=\"downloadTemplate()\" icon=\"file_download\" [loading]=\"isDownloadTemplate\"\r\n [title]=\"'Download template' | sdTranslate\" color=\"info\" type=\"outline\" size=\"sm\">\r\n </sd-button>\r\n </div>\r\n <sd-button *ngIf=\"filteredItems?.length\" class=\"mr-5\" (action)=\"export()\" icon=\"get_app\"\r\n [title]=\"'Download result' | sdTranslate\" size=\"sm\" color=\"info\" type=\"outline\">\r\n </sd-button>\r\n <sd-button (action)=\"accept()\" [title]=\"'Accept' | sdTranslate\"\r\n [disabled]=\"numberOfSuccess === 0 || numberOfError > 0 || isUploaded\" color=\"primary\" type=\"fill\" size=\"sm\">\r\n </sd-button>\r\n </sd-modal-footer>\r\n <sd-modal-footer *sdMobileTablet>\r\n <sd-button style=\"flex: 1; padding-right: 5px;\" (action)=\"upload()\" icon=\"file_upload\"\r\n [title]=\"'Upload' | sdTranslate\" width=\"100%\" size=\"sm\" color=\"info\"></sd-button>\r\n <sd-button style=\"flex: 1; padding-left: 5px;\" (action)=\"accept()\" icon=\"check\" [title]=\"'Accept' | sdTranslate\"\r\n [disabled]=\"numberOfSuccess === 0 || numberOfError > 0\" color=\"success\" width=\"100%\" size=\"sm\"></sd-button>\r\n </sd-modal-footer>\r\n</sd-modal>",
463
469
  styles: [".table thead td,.table thead th{padding-bottom:5px;padding-top:5px}.table-striped tbody tr:nth-of-type(2n) .c-sticky-left{background-color:#fff}.table-striped tbody tr:nth-of-type(odd) .c-sticky-left{background-color:#f2f2f2}.c-sticky-left{border-left:none!important;border-right:none!important;left:0!important;z-index:20}.c-ellipsis{display:block;overflow:hidden!important;padding:.1rem;text-overflow:ellipsis;white-space:nowrap}.c-mat-menu{border:none}.c-mat-menu mat-icon{font-size:20px;vertical-align:middle}:host ::ng-deep .mat-paginator-container{height:32px;min-height:32px}:host ::ng-deep .mat-paginator-container .mat-icon-button{height:28px;line-height:28px;width:28px}"]
464
470
  },] }
465
471
  ];
@@ -468,6 +474,7 @@ SdUploadExcel.ctorParameters = () => [
468
474
  { type: SdExportService },
469
475
  { type: SdTranslateService },
470
476
  { type: SdNotifyService },
477
+ { type: SdColumnHiddenPipe },
471
478
  { type: SdLoadingService }
472
479
  ];
473
480
  SdUploadExcel.propDecorators = {
@@ -475,4 +482,4 @@ SdUploadExcel.propDecorators = {
475
482
  modal: [{ type: ViewChild, args: ['modal',] }],
476
483
  paginator: [{ type: ViewChild, args: [MatPaginator,] }]
477
484
  };
478
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWV4Y2VsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJDOi9Vc2Vycy9uZ2hpYXR0MTVfb25lbW91bnQvRG9jdW1lbnRzL2xpYi1jb3JlLXVpL3Byb2plY3RzL3NkLWNvcmUvdXBsb2FkLWV4Y2VsLyIsInNvdXJjZXMiOlsic3JjL2xpYi91cGxvYWQtZXhjZWwuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ2xHLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUN2QixPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFNeEIsT0FBTyxFQUNMLGVBQWUsRUFDaEIsTUFBTSx5QkFBeUIsQ0FBQztBQUVqQyxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2pCLE1BQU0sMEJBQTBCLENBQUM7QUFFbEMsT0FBTyxFQUNMLGtCQUFrQixFQUNuQixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR3BDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQVExRCxNQUFNLE9BQU8sYUFBYTtJQTBCeEIsWUFDVSxHQUFzQixFQUN0QixhQUE4QixFQUM5QixnQkFBb0MsRUFDcEMsYUFBOEIsRUFDOUIsY0FBZ0M7UUFKaEMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsa0JBQWEsR0FBYixhQUFhLENBQWlCO1FBQzlCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBb0I7UUFDcEMsa0JBQWEsR0FBYixhQUFhLENBQWlCO1FBQzlCLG1CQUFjLEdBQWQsY0FBYyxDQUFrQjtRQTlCbEMsYUFBUSxHQUFHLEdB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cEgsU0FBUztxQkFDVjtvQkFDRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFO3dCQUM1QixNQUFNLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7d0JBQ3BELElBQUksTUFBTSxDQUFDLFNBQVMsS0FBSyxTQUFTLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsU0FBUyxFQUFFOzRCQUNyRSxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxTQUFTLENBQUMsWUFBWSxDQUFDLEtBQUssTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDOzRCQUN4RixVQUFVLENBQUMsS0FBSyxJQUFJLFlBQVksTUFBTSxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsS0FBSyxjQUFjLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDOzRCQUNwSCxTQUFTO3lCQUNWO3dCQUNELElBQUksTUFBTSxDQUFDLFNBQVMsS0FBSyxTQUFTLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsU0FBUyxFQUFFOzRCQUNyRSxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxTQUFTLENBQUMsWUFBWSxDQUFDLEtBQUssTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDOzRCQUN4RixVQUFVLENBQUMsS0FBSyxJQUFJLFlBQVksTUFBTSxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsS0FBSyxjQUFjLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDOzRCQUNwSCxTQUFTO3lCQUNWO3dCQUNELElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDO3FCQUM1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LFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsaUJBQWlCO2dCQUMzQixvaU9BQTRDOzthQUU3Qzs7O1lBL0I2QyxpQkFBaUI7WUF3QnRELGVBQWU7WUFOdEIsa0JBQWtCO1lBUmxCLGVBQWU7WUFJZixnQkFBZ0I7OztxQkFvQmYsS0FBSztvQkFDTCxTQUFTLFNBQUMsT0FBTzt3QkFhakIsU0FBUyxTQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIFZpZXdDaGlsZCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgKiBhcyB1dWlkIGZyb20gJ3V1aWQnO1xyXG5pbXBvcnQgJCBmcm9tICdqcXVlcnknO1xyXG5pbXBvcnQgWExTWCBmcm9tICd4bHN4JztcclxuXHJcbmltcG9ydCB7XHJcbiAgU2RFeGNlbFNlcnZpY2UsIEV4Y2VsVGVtcGxhdGVcclxufSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL2V4Y2VsJztcclxuXHJcbmltcG9ydCB7XHJcbiAgU2ROb3RpZnlTZXJ2aWNlXHJcbn0gZnJvbSAnQHNkLWFuZ3VsYXIvY29yZS9ub3RpZnknO1xyXG5cclxuaW1wb3J0IHtcclxuICBTZExvYWRpbmdTZXJ2aWNlXHJcbn0gZnJvbSAnQHNkLWFuZ3VsYXIvY29yZS9sb2FkaW5nJztcclxuXHJcbmltcG9ydCB7XHJcbiAgU2RUcmFuc2xhdGVTZXJ2aWNlXHJcbn0gZnJvbSAnQHNkLWFuZ3VsYXIvY29yZS90cmFuc2xhdGUnO1xyXG5pbXBvcnQgeyBNYXRQYWdpbmF0b3IgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgU2RNb2RhbCB9IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvbW9kYWwnO1xyXG5pbXBvcnQgeyBTZFVwbG9hZEV4Y2VsT3B0aW9uLCBTZFVwbG9hZEV4Y2VsVmFsaWRhdGlvbiB9IGZyb20gJy4vdXBsb2FkLWV4Y2VsLm1vZGVsJztcclxuaW1wb3J0IHsgU2RFeHBvcnRTZXJ2aWNlIH0gZnJvbSAnQHNkLWFuZ3VsYXIvY29yZS9leHBvcnQnO1xyXG50eXBlIEFPQSA9IEFycmF5PEFycmF5PGFueT4+O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzZC11cGxvYWQtZXhjZWwnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi91cGxvYWQtZXhjZWwuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3VwbG9hZC1leGNlbC5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTZFVwbG9hZEV4Y2VsIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIHByaXZhdGUgaW1wb3J0SWQgPSAnSScgKyB1dWlkLnY0KCk7XHJcbiAgQElucHV0KCkgb3B0aW9uOiBTZFVwbG9hZEV4Y2VsT3B0aW9uO1xyXG4gIEBWaWV3Q2hpbGQoJ21vZGFsJykgbW9kYWw6IFNkTW9kYWw7XHJcbiAgaXRlbXM6IEV4Y2VsSXRlbVtdID0gW107XHJcbiAgb3JpZ2luSXRlbXM6IGFueVtdID0gW107XHJcbiAgaGFzRGVzY3JpcHRpb24gPSBmYWxzZTtcclxuXHJcbiAgc2hvd2luZzogJ0FMTCcgfCAnU1VDQ0VTUycgfCAnV0FSTklORycgfCAnRVJST1InID0gJ0FMTCc7XHJcbiAgZmlsdGVyZWRJdGVtczogRXhjZWxJdGVtW10gPSBbXTtcclxuICB2aWV3SXRlbXM6IEV4Y2VsSXRlbVtdID0gW107XHJcbiAgbnVtYmVyT2ZTdWNjZXNzID0gMDtcclxuICBudW1iZXJPZkVycm9yID0gMDtcclxuICBudW1iZXJPZldhcm5pbmcgPSAwO1xyXG4gIGZpbGU6IEZpbGU7XHJcbiAgI3BhZ2luYXRvcjogTWF0UGFnaW5hdG9yO1xyXG4gIEBWaWV3Q2hpbGQoTWF0UGFnaW5hdG9yKSBzZXQgcGFnaW5hdG9yKHBhZ2luYXRvcjogTWF0UGFnaW5hdG9yKSB7XHJcbiAgICBpZiAocGFnaW5hdG9yICYmIHRoaXMuI3BhZ2luYXRvciAhPT0gcGFnaW5hdG9yKSB7XHJcbiAgICAgIHRoaXMuI3BhZ2luYXRvciA9IHBhZ2luYXRvcjtcclxuICAgICAgdGhpcy4jc3Vic2NyaXB0aW9uLmFkZChwYWdpbmF0b3IucGFnZS5zdWJzY3JpYmUodGhpcy4jcmVsb2FkKSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gICNzdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcblxyXG4gIGlzVXBsb2FkZWQ6IGJvb2xlYW47XHJcbiAgaXNEb3dubG9hZFRlbXBsYXRlID0gZmFsc2U7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIGV4cG9ydFNlcnZpY2U6IFNkRXhwb3J0U2VydmljZSxcclxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogU2RUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBub3RpZnlTZXJ2aWNlOiBTZE5vdGlmeVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGxvYWRpbmdTZXJ2aWNlOiBTZExvYWRpbmdTZXJ2aWNlKSB7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuaXNVcGxvYWRlZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLiNzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIG9wZW4gPSAoKSA9PiB7XHJcbiAgICB0aGlzLiNyZXNldCgpO1xyXG4gICAgdGhpcy5tb2RhbC5vcGVuKCk7XHJcbiAgfVxyXG5cclxuICBjbG9zZSA9ICgpID0+IHtcclxuICAgIHRoaXMubW9kYWwuY2xvc2UoKTtcclxuICB9XHJcblxyXG4gICNyZXNldCA9ICgpID0+IHtcclxuICAgIHRoaXMub3JpZ2luSXRlbXMgPSBbXTtcclxuICAgIHRoaXMuaXRlbXMgPSBbXTtcclxuICAgIHRoaXMuZmlsdGVyZWRJdGVtcyA9IFtdO1xyXG4gICAgdGhpcy52aWV3SXRlbXMgPSBbXTtcclxuICAgIHRoaXMubnVtYmVyT2ZTdWNjZXNzID0gMDtcclxuICAgIHRoaXMubnVtYmVyT2ZFcnJvciA9IDA7XHJcbiAgICB0aGlzLm51bWJlck9mV2FybmluZyA9IDA7XHJcbiAgICB0aGlzLnNob3dpbmcgPSAnQUxMJztcclxuICB9XHJcblxyXG4gICNyZWxvYWQgPSAoKSA9PiB7XHJcbiAgICBjb25zdCBwYWdlSW5kZXggPSB0aGlzLiNwYWdpbmF0b3IucGFnZUluZGV4O1xyXG4gICAgY29uc3QgcGFnZVNpemUgPSB0aGlzLiNwYWdpbmF0b3IucGFnZVNpemU7XHJcbiAgICB0aGlzLmZpbHRlcmVkSXRlbXMgPSB0aGlzLml0ZW1zLmZpbHRlcigoaXRlbSkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5zaG93aW5nID09PSAnU1VDQ0VTUycpIHtcclxuICAgICAgICByZXR1cm4gIWl0ZW0udmFsaWRhdGlvbj8uZXJyb3IgJiYgIWl0ZW0udmFsaWRhdGlvbj8ud2FybmluZztcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLnNob3dpbmcgPT09ICdXQVJOSU5HJykge1xyXG4gICAgICAgIHJldHVybiAhIWl0ZW0udmFsaWRhdGlvbj8ud2FybmluZyAmJiAhaXRlbS52YWxpZGF0aW9uPy5lcnJvcjtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLnNob3dpbmcgPT09ICdFUlJPUicpIHtcclxuICAgICAgICByZXR1cm4gISFpdGVtLnZhbGlkYXRpb24/LmVycm9yO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnZpZXdJdGVtcyA9IHRoaXMuZmlsdGVyZWRJdGVtc1xyXG4gICAgICAuZmlsdGVyKChpdGVtLCBpbmRleCkgPT4gaW5kZXggPj0gcGFnZUluZGV4ICogcGFnZVNpemUgJiYgaW5kZXggPCAocGFnZUluZGV4ICsgMSkgKiBwYWdlU2l6ZSk7XHJcblxyXG4gICAgdGhpcy5udW1iZXJPZlN1Y2Nlc3MgPSB0aGlzLml0ZW1zLmZpbHRlcihpdGVtID0+ICFpdGVtLnZhbGlkYXRpb24/LmVycm9yICYmICFpdGVtLnZhbGlkYXRpb24/Lndhcm5pbmcpLmxlbmd0aDtcclxuICAgIHRoaXMubnVtYmVyT2ZFcnJvciA9IHRoaXMuaXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS52YWxpZGF0aW9uPy5lcnJvcikubGVuZ3RoO1xyXG4gICAgdGhpcy5udW1iZXJPZldhcm5pbmcgPSB0aGlzLml0ZW1zLmZpbHRlcihpdGVtID0+IGl0ZW0udmFsaWRhdGlvbj8ud2FybmluZyAmJiAhaXRlbS52YWxpZGF0aW9uPy5lcnJvcikubGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgdXBsb2FkID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgeyB0cmFuc2xhdGUgfSA9IHRoaXMudHJhbnNsYXRlU2VydmljZTtcclxuICAgICAgY29uc3QgeyBpdGVtcywgZmlsZSB9ID0gYXdhaXQgdGhpcy4jaW1wb3J0KCk7XHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbi5jb2x1bW5zLnNvbWUoZSA9PiAhIWUuZGVzY3JpcHRpb24pKSB7XHJcbiAgICAgICAgdGhpcy5oYXNEZXNjcmlwdGlvbiA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5oYXNEZXNjcmlwdGlvbiA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IG9mZnNldCA9IHRoaXMuaGFzRGVzY3JpcHRpb24gPyAyIDogMTtcclxuICAgICAgaXRlbXMuc3BsaWNlKDAsIG9mZnNldCk7XHJcbiAgICAgIGlmIChpdGVtcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICB0aGlzLm5vdGlmeVNlcnZpY2Uubm90aWZ5Lndhcm5pbmcoYCR7dHJhbnNsYXRlKGBObyBkYXRhIHRvIGltcG9ydGApfWApO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoaXRlbXMubGVuZ3RoID4gdGhpcy5vcHRpb24ubGltaXQpIHtcclxuICAgICAgICB0aGlzLm5vdGlmeVNlcnZpY2Uubm90aWZ5Lndhcm5pbmcoYCR7dHJhbnNsYXRlKGBMaW1pdCByb3dzYCl9OiAke3RoaXMub3B0aW9uLmxpbWl0fWApO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLiNyZXNldCgpO1xyXG4gICAgICB0aGlzLm9yaWdpbkl0ZW1zID0gaXRlbXM7XHJcbiAgICAgIHRoaXMuaXRlbXMgPSB0aGlzLm9wdGlvbi5tYXBwaW5nSXRlbXM/LihpdGVtcykgfHwgaXRlbXM7XHJcbiAgICAgIHRoaXMuZmlsZSA9IGZpbGU7XHJcbiAgICAgIHRoaXMubG9hZGluZ1NlcnZpY2Uuc3RhcnQoKTtcclxuICAgICAgZm9yIChjb25zdCBbaWR4LCBpdGVtXSBvZiB0aGlzLml0ZW1zLmVudHJpZXMoKSkge1xyXG4gICAgICAgIGl0ZW0ub3JpZ2luID0geyAuLi5pdGVtIH07XHJcbiAgICAgICAgaXRlbS5leGNlbEluZGV4ID0gaWR4ICsgKHRoaXMuaGFzRGVzY3JpcHRpb24gPyA0IDogMyk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy52YWxpZGF0ZShpdGVtKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gTuG6v3Uga2jDtG5nIGPDsyBlcnJvciB0aMOsIHRp4bq/cCB04bulYyB2YWxpZGF0ZSB04burIG9wdGlvbiB2YWxpZGF0ZSB0cnV54buBbiB2w6BvXHJcbiAgICAgIGlmICghdGhpcy5pdGVtcy5zb21lKGl0ZW0gPT4gISFpdGVtLnZhbGlkYXRpb24uZXJyb3IpICYmIHRoaXMub3B0aW9uLmVycm9yVmFsaWRhdGlvbikge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCB0aGlzLm9wdGlvbi5lcnJvclZhbGlkYXRpb24odGhpcy5pdGVtcyk7XHJcbiAgICAgICAgcmVzdWx0cy5mb3JFYWNoKHJlc3VsdCA9PiB0aGlzLml0ZW1zW3Jlc3VsdC5pZHhdLnZhbGlkYXRpb24uZXJyb3IgPSByZXN1bHQubWVzc2FnZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIE7hur91IGtow7RuZyBjw7Mgd2FybmluZyB0aMOsIHRp4bq/cCB04bulYyB2YWxpZGF0ZSB04burIG9wdGlvbiB2YWxpZGF0ZSB0cnV54buBbiB2w6BvXHJcbiAgICAgIGlmICghdGhpcy5pdGVtcy5zb21lKGl0ZW0gPT4gISFpdGVtLnZhbGlkYXRpb24ud2FybmluZykgJiYgdGhpcy5vcHRpb24ud2FybmluZ1ZhbGlkYXRpb24pIHtcclxuICAgICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgdGhpcy5vcHRpb24ud2FybmluZ1ZhbGlkYXRpb24odGhpcy5pdGVtcyk7XHJcbiAgICAgICAgcmVzdWx0cy5mb3JFYWNoKHJlc3VsdCA9PiB0aGlzLml0ZW1zW3Jlc3VsdC5pZHhdLnZhbGlkYXRpb24ud2FybmluZyA9IHJlc3VsdC5tZXNzYWdlKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy4jcGFnaW5hdG9yLnBhZ2VJbmRleCA9IDA7XHJcbiAgICAgIHRoaXMuI3JlbG9hZCgpO1xyXG4gICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblxyXG4gICAgICB0aGlzLmlzVXBsb2FkZWQgPSBmYWxzZTtcclxuICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICB0aGlzLm5vdGlmeVNlcnZpY2UuaGFuZGxlLmVycm9yKGVycik7XHJcbiAgICB9IGZpbmFsbHkge1xyXG4gICAgICB0aGlzLmxvYWRpbmdTZXJ2aWNlLnN0b3AoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHZhbGlkYXRlID0gYXN5bmMgKGl0ZW06IHsgW3g6IHN0cmluZ106IGFueTsgdmFsaWRhdGlvbjogU2RVcGxvYWRFeGNlbFZhbGlkYXRpb247IH0pID0+IHtcclxuICAgIGNvbnN0IHZhbGlkYXRpb246IFNkVXBsb2FkRXhjZWxWYWxpZGF0aW9uID0ge1xyXG4gICAgICBlcnJvcjogJycsXHJcbiAgICAgIHdhcm5pbmc6ICcnLFxyXG4gICAgICBkYXRhOiB7fVxyXG4gICAgfTtcclxuICAgIGNvbnN0IHsgdHJhbnNsYXRlIH0gPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2U7XHJcbiAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiB0aGlzLm9wdGlvbi5jb2x1bW5zKSB7XHJcbiAgICAgIHZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdID0ge307XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgaWYgKGNvbHVtbi5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgaXRlbVtjb2x1bW4uZmllbGRdID0gaXRlbVtjb2x1bW4uZmllbGRdID8/IGNvbHVtbi5kZWZhdWx0VmFsdWU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4ucmVxdWlyZWQgJiYgIWl0ZW1bY29sdW1uLmZpZWxkXSAmJiBpdGVtW2NvbHVtbi5maWVsZF0gIT09IDApIHtcclxuICAgICAgICAgIHZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLmVycm9yID0gYCR7dHJhbnNsYXRlKCdyZXF1aXJlZCcpfWA7XHJcbiAgICAgICAgICB2YWxpZGF0aW9uLmVycm9yICs9IGA8c3Ryb25nPlske2NvbHVtbi50aXRsZSB8fCBjb2x1bW4uZmllbGR9XTwvc3Ryb25nPiAke3ZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLmVycm9yfTxicj5gO1xyXG4gICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgIGNvbnN0IHZhbHVlID0gKGl0ZW1bY29sdW1uLmZpZWxkXSB8fCAnJykudG9TdHJpbmcoKTtcclxuICAgICAgICAgIGlmIChjb2x1bW4ubWluTGVuZ3RoICE9PSB1bmRlZmluZWQgJiYgdmFsdWUubGVuZ3RoIDwgY29sdW1uLm1pbkxlbmd0aCkge1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvciA9IGAke3RyYW5zbGF0ZSgnTWluIGxlbmd0aCcpfTogJHtjb2x1bW4ubWluTGVuZ3RofWA7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb24uZXJyb3IgKz0gYDxzdHJvbmc+WyR7Y29sdW1uLnRpdGxlIHx8IGNvbHVtbi5maWVsZH1dPC9zdHJvbmc+ICR7dmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3J9PGJyPmA7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGNvbHVtbi5tYXhMZW5ndGggIT09IHVuZGVmaW5lZCAmJiB2YWx1ZS5sZW5ndGggPiBjb2x1bW4ubWF4TGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLmVycm9yID0gYCR7dHJhbnNsYXRlKCdNYXggbGVuZ3RoJyl9OiAke2NvbHVtbi5tYXhMZW5ndGh9YDtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbi5lcnJvciArPSBgPHN0cm9uZz5bJHtjb2x1bW4udGl0bGUgfHwgY29sdW1uLmZpZWxkfV08L3N0cm9uZz4gJHt2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvcn08YnI+YDtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpdGVtW2NvbHVtbi5maWVsZF0gPSB2YWx1ZTtcclxuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgaWYgKGl0ZW1bY29sdW1uLmZpZWxkXSkge1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9ICtpdGVtW2NvbHVtbi5maWVsZF07XHJcbiAgICAgICAgICAgIGlmIChOdW1iZXIuaXNOYU4odmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgdmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3IgPSBgJHtpdGVtW2NvbHVtbi5maWVsZF19ICR7dHJhbnNsYXRlKCdpcyBub3QgYSBudW1iZXInKX1gO1xyXG4gICAgICAgICAgICAgIHZhbGlkYXRpb24uZXJyb3IgKz0gYDxzdHJvbmc+WyR7Y29sdW1uLnRpdGxlIHx8IGNvbHVtbi5maWVsZH1dPC9zdHJvbmc+ICR7dmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3J9PGJyPmA7XHJcbiAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaXRlbVtjb2x1bW4uZmllbGRdID0gdmFsdWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoIWl0ZW1bY29sdW1uLmZpZWxkXSAmJiBpdGVtW2NvbHVtbi5maWVsZF0gIT09IDApIHtcclxuICAgICAgICAgICAgaXRlbVtjb2x1bW4uZmllbGRdID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGNvbHVtbi5taW5WYWx1ZSAhPT0gdW5kZWZpbmVkICYmIGl0ZW1bY29sdW1uLmZpZWxkXSA8IGNvbHVtbi5taW5WYWx1ZSkge1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvciA9IGAke2l0ZW1bY29sdW1uLmZpZWxkXX0gJHt0cmFuc2xhdGUoJ01pbiB2YWx1ZScpfTogJHtjb2x1bW4ubWluVmFsdWV9YDtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbi5lcnJvciArPSBgPHN0cm9uZz5bJHtjb2x1bW4udGl0bGUgfHwgY29sdW1uLmZpZWxkfV08L3N0cm9uZz4gJHt2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvcn08YnI+YDtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoY29sdW1uLm1heFZhbHVlICE9PSB1bmRlZmluZWQgJiYgaXRlbVtjb2x1bW4uZmllbGRdID4gY29sdW1uLm1heFZhbHVlKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLmVycm9yID0gYCR7aXRlbVtjb2x1bW4uZmllbGRdfSAke3RyYW5zbGF0ZSgnTWF4IHZhbHVlJyl9OiAke2NvbHVtbi5tYXhWYWx1ZX1gO1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9uLmVycm9yICs9IGA8c3Ryb25nPlske2NvbHVtbi50aXRsZSB8fCBjb2x1bW4uZmllbGR9XTwvc3Ryb25nPiAke3ZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLmVycm9yfTxicj5gO1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnYm9vbCcpIHtcclxuICAgICAgICAgIGlmIChpdGVtW2NvbHVtbi5maWVsZF0gPT09IDAgfHwgaXRlbVtjb2x1bW4uZmllbGRdID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICBpdGVtW2NvbHVtbi5maWVsZF0gPSAnMCc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoaXRlbVtjb2x1bW4uZmllbGRdID09PSAxIHx8IGl0ZW1bY29sdW1uLmZpZWxkXSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICBpdGVtW2NvbHVtbi5maWVsZF0gPSAnMSc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoaXRlbVtjb2x1bW4uZmllbGRdKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gK2l0ZW1bY29sdW1uLmZpZWxkXTtcclxuICAgICAgICAgICAgaWYgKE51bWJlci5pc05hTih2YWx1ZSkgfHwgKHZhbHVlICE9PSAwICYmIHZhbHVlICE9PSAxKSkge1xyXG4gICAgICAgICAgICAgIHZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLmVycm9yID0gYCR7dHJhbnNsYXRlKCdWYWx1ZSBzaG91ZCBiZSAwIG9yIDEnKX1gO1xyXG4gICAgICAgICAgICAgIHZhbGlkYXRpb24uZXJyb3IgKz0gYDxzdHJvbmc+WyR7Y29sdW1uLnRpdGxlIHx8IGNvbHVtbi5maWVsZH1dPC9zdHJvbmc+ICR7dmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3J9PGJyPmA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAndmFsdWVzJykge1xyXG4gICAgICAgICAgaWYgKGl0ZW1bY29sdW1uLmZpZWxkXSAmJiB0eXBlb2YgKGl0ZW1bY29sdW1uLmZpZWxkXSkgIT09ICdudW1iZXInICYmIHR5cGVvZiAoaXRlbVtjb2x1bW4uZmllbGRdKSAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3IgPSBgJHtpdGVtW2NvbHVtbi5maWVsZF19ICR7dHJhbnNsYXRlKCdJbnZhbGlkIGRhdGEgdHlwZScpfWA7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb24uZXJyb3IgKz0gYDxzdHJvbmc+WyR7Y29sdW1uLnRpdGxlIHx8IGNvbHVtbi5maWVsZH1dPC9zdHJvbmc+ICR7dmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3J9PGJyPmA7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGNvbHVtbi5jaGVja1ZhbHVlSW5BcnJheSAmJiBpdGVtW2NvbHVtbi5maWVsZF0gJiYgIWNvbHVtbi52YWx1ZXMuc29tZShlID0+IGUudG9TdHJpbmcoKSA9PT0gaXRlbVtjb2x1bW4uZmllbGRdLnRvU3RyaW5nKCkpKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLmVycm9yID0gYCR7aXRlbVtjb2x1bW4uZmllbGRdfSAke3RyYW5zbGF0ZSgnVmFsdWUgbm90IGluJyl9IFske2NvbHVtbi52YWx1ZXMuam9pbigpfV1gO1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9uLmVycm9yICs9IGA8c3Ryb25nPlske2NvbHVtbi50aXRsZSB8fCBjb2x1bW4uZmllbGR9XTwvc3Ryb25nPiAke3ZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLmVycm9yfTxicj5gO1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnZGF0ZScgfHwgY29sdW1uLnR5cGUgPT09ICdkYXRldGltZScgfHwgY29sdW1uLnR5cGUgPT09ICd0aW1lJykge1xyXG4gICAgICAgICAgY29uc3QgeyB0eXBlLCBmb3JtYXQgfSA9IGNvbHVtbjtcclxuICAgICAgICAgIGNvbnN0IHZhbCA9IGl0ZW1bY29sdW1uLmZpZWxkXTtcclxuICAgICAgICAgIGlmIChmb3JtYXQgJiYgaXRlbVtjb2x1bW4uZmllbGRdKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgKHZhbCkgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgdmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3IgPSBgJHt0cmFuc2xhdGUoJ0ludmFsaWQgZm9ybWF0Jyl9ICR7Y29sdW1uLmZvcm1hdH06ICR7dmFsfWA7XHJcbiAgICAgICAgICAgICAgdmFsaWRhdGlvbi5lcnJvciArPSBgPHN0cm9uZz5bJHtjb2x1bW4udGl0bGUgfHwgY29sdW1uLmZpZWxkfV08L3N0cm9uZz4gJHt2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvcn08YnI+YDtcclxuICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gJ2RhdGUnICYmICF0aGlzLiNpc1ZhbGlkRGF0ZShmb3JtYXQsIHZhbCkpIHtcclxuICAgICAgICAgICAgICB2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvciA9IGAke3RyYW5zbGF0ZSgnSW52YWxpZCBmb3JtYXQnKX0gJHtjb2x1bW4uZm9ybWF0fTogJHt2YWx9YDtcclxuICAgICAgICAgICAgICB2YWxpZGF0aW9uLmVycm9yICs9IGA8c3Ryb25nPlske2NvbHVtbi50aXRsZSB8fCBjb2x1bW4uZmllbGR9XTwvc3Ryb25nPiAke3ZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLmVycm9yfTxicj5gO1xyXG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0eXBlID09PSAndGltZScgJiYgIXRoaXMuI2lzVmFsaWRUaW1lKGZvcm1hdCwgdmFsKSkge1xyXG4gICAgICAgICAgICAgIHZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLmVycm9yID0gYCR7dHJhbnNsYXRlKCdJbnZhbGlkIGZvcm1hdCcpfSAke2NvbHVtbi5mb3JtYXR9OiAke3ZhbH1gO1xyXG4gICAgICAgICAgICAgIHZhbGlkYXRpb24uZXJyb3IgKz0gYDxzdHJvbmc+WyR7Y29sdW1uLnRpdGxlIHx8IGNvbHVtbi5maWVsZH1dPC9zdHJvbmc+ICR7dmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3J9PGJyPmA7XHJcbiAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdkYXRldGltZScgJiYgIXRoaXMuI2lzVmFsaWREYXRlVGltZShmb3JtYXQsIHZhbCkpIHtcclxuICAgICAgICAgICAgICB2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvciA9IGAke3RyYW5zbGF0ZSgnSW52YWxpZCBmb3JtYXQnKX0gJHtjb2x1bW4uZm9ybWF0fTogJHt2YWx9YDtcclxuICAgICAgICAgICAgICB2YWxpZGF0aW9uLmVycm9yICs9IGA8c3Ryb25nPlske2NvbHVtbi50aXRsZSB8fCBjb2x1bW4uZmllbGR9XTwvc3Ryb25nPiAke3ZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLmVycm9yfTxicj5gO1xyXG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGl0ZW1bY29sdW1uLmZpZWxkXSA9IERhdGUucGFyc2VGcm9tKHZhbCwgY29sdW1uLmZvcm1hdCkudG9Gb3JtYXQoJ01NL2RkL3l5eXkgSEg6bW06c3MnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChpdGVtW2NvbHVtbi5maWVsZF0gJiYgIURhdGUuaXNEYXRlKGl0ZW1bY29sdW1uLmZpZWxkXSkpIHtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3IgPSBgJHt0cmFuc2xhdGUoJ0ludmFsaWQgZGF0ZScpfTogJHtpdGVtW2NvbHVtbi5maWVsZF19YDtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbi5lcnJvciArPSBgPHN0cm9uZz5bJHtjb2x1bW4udGl0bGUgfHwgY29sdW1uLmZpZWxkfV08L3N0cm9uZz4gJHt2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvcn08YnI+YDtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLmVycm9yICYmIGNvbHVtbi5lcnJvclZhbGlkYXRpb24pIHtcclxuICAgICAgICAgIGNvbnN0IGVycm9yID0gYXdhaXQgY29sdW1uLmVycm9yVmFsaWRhdGlvbihpdGVtLCBpdGVtW2NvbHVtbi5maWVsZF0pO1xyXG4gICAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLmVycm9yID0gYCR7ZXJyb3J9YDtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbi5lcnJvciArPSBgPHN0cm9uZz5bJHtjb2x1bW4udGl0bGUgfHwgY29sdW1uLmZpZWxkfV08L3N0cm9uZz4gJHtlcnJvcn08YnI+YDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0ud2FybmluZyAmJiBjb2x1bW4ud2FybmluZ1ZhbGlkYXRpb24pIHtcclxuICAgICAgICAgIGNvbnN0IHdhcm5pbmcgPSBhd2FpdCBjb2x1bW4ud2FybmluZ1ZhbGlkYXRpb24oaXRlbSwgaXRlbVtjb2x1bW4uZmllbGRdKTtcclxuICAgICAgICAgIGlmICh3YXJuaW5nKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLndhcm5pbmcgPSBgJHt3YXJuaW5nfWA7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb24ud2FybmluZyArPSBgPHN0cm9uZz5bJHtjb2x1bW4udGl0bGUgfHwgY29sdW1uLmZpZWxkfV08L3N0cm9uZz4gJHt3YXJuaW5nfTxicj5gO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCAoZXgpIHtcclxuICAgICAgICB2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvciA9IGAke2V4Py5tZXNzYWdlIHx8IGV4Py5lcnJvciB8fCBleCB8fCAnQ8OzIGzhu5dpIHjhuqN5IHJhJ31gO1xyXG4gICAgICAgIHZhbGlkYXRpb24uZXJyb3IgKz0gYDxzdHJvbmc+WyR7Y29sdW1uLnRpdGxlIHx8IGNvbHVtbi5maWVsZH1dPC9zdHJvbmc+ICR7dmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3J9PGJyPmA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGl0ZW0udmFsaWRhdGlvbiA9IHZhbGlkYXRpb247XHJcbiAgfVxyXG5cclxuICAjbWFwSXRlbSA9IChpdGVtOiBFeGNlbEl0ZW0pID0+IHtcclxuICAgIGNvbnN0IHsgdmFsaWRhdGlvbiwgb3JpZ2luLCBleGNlbEluZGV4LCAuLi5yZW1haW4gfSA9IGl0ZW07XHJcbiAgICByZXR1cm4gcmVtYWluO1xyXG4gIH1cclxuXHJcbiAgYWNjZXB0ID0gKCkgPT4ge1xyXG4gICAgY29uc3Qgc3VjY2Vzc0l0ZW1zID0gdGhpcy5pdGVtcy5maWx0ZXIoaXRlbSA9PiAhaXRlbS52YWxpZGF0aW9uLmVycm9yICYmICFpdGVtLnZhbGlkYXRpb24ud2FybmluZykubWFwKHRoaXMuI21hcEl0ZW0pO1xyXG4gICAgY29uc3QgZXJyb3JJdGVtcyA9IHRoaXMuaXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS52YWxpZGF0aW9uLmVycm9yKS5tYXAodGhpcy4jbWFwSXRlbSk7XHJcbiAgICBjb25zdCB3YXJuaW5nSXRlbXMgPSB0aGlzLml0ZW1zLmZpbHRlcihpdGVtID0+ICFpdGVtLnZhbGlkYXRpb24uZXJyb3IgJiYgaXRlbS52YWxpZGF0aW9uLndhcm5pbmcpLm1hcCh0aGlzLiNtYXBJdGVtKTtcclxuICAgIHRoaXMub3B0aW9uPy5vbkFjY2VwdCh0aGlzLml0ZW1zLm1hcCh0aGlzLiNtYXBJdGVtKSwgc3VjY2Vzc0l0ZW1zLCBlcnJvckl0ZW1zLCB3YXJuaW5nSXRlbXMsIHRoaXMuZmlsZSk7XHJcblxyXG4gICAgdGhpcy5pc1VwbG9hZGVkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHNldFZhbGlkYXRpb24gPSAodmFsaWRhdGVzOiB7IGlkeDogbnVtYmVyLCBtZXNzYWdlRXJyb3I/OiBzdHJpbmcsIG1lc3NhZ2VXYXJuaW5nPzogc3RyaW5nLCBtZXNzYWdlU3VjY2Vzcz86IHN0cmluZyB9W10pID0+IHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbGlkYXRlcykpIHtcclxuICAgICAgdmFsaWRhdGVzLmZvckVhY2godmFsaWRhdGUgPT4ge1xyXG4gICAgICAgIHRoaXMuaXRlbXNbdmFsaWRhdGUuaWR4XS52YWxpZGF0aW9uLmVycm9yID0gdmFsaWRhdGUubWVzc2FnZUVycm9yO1xyXG4gICAgICAgIHRoaXMuaXRlbXNbdmFsaWRhdGUuaWR4XS52YWxpZGF0aW9uLndhcm5pbmcgPSB2YWxpZGF0ZS5tZXNzYWdlV2FybmluZztcclxuICAgICAgICB0aGlzLml0ZW1zW3ZhbGlkYXRlLmlkeF0udmFsaWRhdGlvbi5zdWNjZXNzID0gdmFsaWRhdGUubWVzc2FnZVN1Y2Nlc3M7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy4jcmVsb2FkKCk7XHJcbiAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICB2aWV3ID0gKHNob3dpbmc6ICdBTEwnIHwgJ1NVQ0NFU1MnIHwgJ1dBUk5JTkcnIHwgJ0VSUk9SJyA9ICdBTEwnKSA9PiB7XHJcbiAgICB0aGlzLnNob3dpbmcgPSBzaG93aW5nO1xyXG4gICAgdGhpcy4jcGFnaW5hdG9yLnBhZ2VJbmRleCA9IDA7XHJcbiAgICB0aGlzLiNyZWxvYWQoKTtcclxuICB9XHJcblxyXG4gIGRvd25sb2FkVGVtcGxhdGUgPSBhc3luYyAoKSA9PiB7XHJcbiAgICBjb25zdCBzaGVldHM6IHtcclxuICAgICAgbmFtZTogc3RyaW5nLFxyXG4gICAgICBpdGVtczogYW55W10sXHJcbiAgICAgIGZpZWxkczogc3RyaW5nW11cclxuICAgIH1bXSA9IFtdO1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5vcHRpb24/LnNoZWV0cykpIHtcclxuICAgICAgZm9yIChjb25zdCBzaGVldCBvZiB0aGlzLm9wdGlvbi5zaGVldHMpIHtcclxuICAgICAgICBpZiAoc2hlZXQubmFtZSAmJiBzaGVldC5pdGVtcyAmJiBzaGVldC5maWVsZHMpIHtcclxuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNoZWV0Lml0ZW1zKSkge1xyXG4gICAgICAgICAgICBzaGVldHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgbmFtZTogc2hlZXQubmFtZSxcclxuICAgICAgICAgICAgICBpdGVtczogc2hlZXQuaXRlbXMsXHJcbiAgICAgICAgICAgICAgZmllbGRzOiBzaGVldC5maWVsZHNcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzaGVldHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgbmFtZTogc2hlZXQubmFtZSxcclxuICAgICAgICAgICAgICBpdGVtczogYXdhaXQgc2hlZXQuaXRlbXMoKSxcclxuICAgICAgICAgICAgICBmaWVsZHM6IHNoZWV0LmZpZWxkc1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IGV4Y2VsVGVtcGxhdGU6IEV4Y2VsVGVtcGxhdGUgPSB7XHJcbiAgICAgIGZpbGVOYW1lOiB0aGlzLm9wdGlvbi5maWxlTmFtZSB8fCAnVGVtcGxhdGUnLFxyXG4gICAgICBjb2x1bW5zOiB0aGlzLm9wdGlvbi5jb2x1bW5zLm1hcChjb2x1bW4gPT4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICBmaWVsZDogY29sdW1uLmZpZWxkLFxyXG4gICAgICAgICAgdGl0bGU6IGNvbHVtbi50aXRsZSxcclxuICAgICAgICAgIHdpZHRoOiBjb2x1bW4ud2lkdGgsXHJcbiAgICAgICAgICByZXF1aXJlZDogY29sdW1uLnJlcXVpcmVkLFxyXG4gICAgICAgICAgZGVzY3JpcHRpb246IGNvbHVtbi5kZXNjcmlwdGlvblxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pLFxyXG4gICAgICBzaGVldHNcclxuICAgIH07XHJcbiAgICB0aGlzLmlzRG93bmxvYWRUZW1wbGF0ZSA9IHRydWU7XHJcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV4cG9ydFNlcnZpY2UuZ2VuZXJhdGVUZW1wbGF0ZShleGNlbFRlbXBsYXRlKS5maW5hbGx5KCgpPT57XHJcbiAgICAgIHRoaXMuaXNEb3dubG9hZFRlbXBsYXRlID0gZmFsc2U7XHJcbiAgICB9KTtcclxuICAgIGlmIChyZXN1bHQ/LmZpbGVQYXRoKSB7XHJcbiAgICAgIHRoaXMuZXhwb3J0U2VydmljZS5kb3dubG9hZChyZXN1bHQuZmlsZVBhdGgsIGV4Y2VsVGVtcGxhdGUuZmlsZU5hbWUgfHwgJ1RlbXBsYXRlLnhsc3gnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGV4cG9ydCA9IGFzeW5jICgpID0+IHtcclxuICAgIHRoaXMubG9hZGluZ1NlcnZpY2Uuc3RhcnQoKTtcclxuICAgIGF3YWl0IHRoaXMuZXhwb3J0U2VydmljZS5leHBvcnQoe1xyXG4gICAgICBjb2x1bW5zOiBbe1xyXG4gICAgICAgIGZpZWxkOiAnc2RNZXNzYWdlJyxcclxuICAgICAgICB0aXRsZTogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnVXBsb2FkIG1lc3NhZ2UnKSxcclxuICAgICAgICB3aWR0aDogJzI1MHB4JyxcclxuICAgICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgICAgfSwgLi4uIHRoaXMub3B0aW9uLmNvbHVtbnNdLFxyXG4gICAgICBpdGVtczogdGhpcy5maWx0ZXJlZEl0ZW1zLm1hcChlID0+ICh7XHJcbiAgICAgICAgLi4uZS5vcmlnaW4sXHJcbiAgICAgICAgc2RNZXNzYWdlOiAoZS52YWxpZGF0aW9uPy5lcnJvciB8fCBlLnZhbGlkYXRpb24/Lndhcm5pbmcgfHwgZS52YWxpZGF0aW9uPy5zdWNjZXNzKT8ucmVwbGFjZSgvPHN0cm9uZz4vZywgJycpXHJcbiAgICAgICAgICAucmVwbGFjZSgvPFxcL3N0cm9uZz4vZywgJycpXHJcbiAgICAgICAgICAucmVwbGFjZSgvPGJyPi9nLCAnXFxuJylcclxuICAgICAgfSkpXHJcbiAgICB9KS5maW5hbGx5KHRoaXMubG9hZGluZ1NlcnZpY2Uuc3RvcCk7XHJcbiAgfVxyXG5cclxuICAjaW1wb3J0ID0gKCkgPT4ge1xyXG4gICAgY29uc3QgeyB0cmFuc2xhdGUgfSA9IHRoaXMudHJhbnNsYXRlU2VydmljZTtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZTx7IGl0ZW1zOiBhbnlbXSwgZmlsZTogRmlsZSB9PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIGlmICgkKGAjJHt0aGlzLmltcG9ydElkfWApLmxlbmd0aCkge1xyXG4gICAgICAgICQoJ2JvZHknKS5jaGlsZHJlbihgIyR7dGhpcy5pbXBvcnRJZH1gKS5yZW1vdmUoKTtcclxuICAgICAgfVxyXG4gICAgICAkKCdib2R5JykuYXBwZW5kKGA8aW5wdXQgaWQ9XCIke3RoaXMuaW1wb3J0SWR9XCIgc3R5bGU9XCJkaXNwbGF5OiBub25lXCIgdHlwZT1cImZpbGVcIiAvPmApO1xyXG5cclxuICAgICAgJChgIyR7dGhpcy5pbXBvcnRJZH1gKS5vbignY2hhbmdlJywgKGV2dDogYW55KSA9PiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGNvbnN0IHRhcmdldDogRGF0YVRyYW5zZmVyID0gZXZ0LnRhcmdldDtcclxuICAgICAgICAgIGlmICh0YXJnZXQuZmlsZXMubGVuZ3RoICE9PSAxKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcih0cmFuc2xhdGUoJ0Nhbm5vdCB1c2UgbXVsdGlwbGUgZmlsZXMnKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjb25zdCBmaWxlID0gdGFyZ2V0LmZpbGVzWzBdO1xyXG4gICAgICAgICAgY29uc3QgbGFzdERvdCA9IGZpbGUubmFtZS5sYXN0SW5kZXhPZignLicpO1xyXG4gICAgICAgICAgaWYgKGxhc3REb3QgPT09IC0xKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcih0cmFuc2xhdGUoJ0ludmFsaWQgZmlsZSBleHRlbnNpb24nKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjb25zdCBleHRlbnNpb24gPSBmaWxlLm5hbWUuc3Vic3RyaW5nKGxhc3REb3QgKyAxKTtcclxuICAgICAgICAgIGlmIChleHRlbnNpb24udG9Mb3dlckNhc2UoKSAhPT0gJ3hsc3gnKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcih0cmFuc2xhdGUoJ1BsZWFzZSB1cGxvYWQgLnhsc3ggZmlsZScpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNvbnN0IHJlYWRlcjogRmlsZVJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICAgICAgICByZWFkZXIub25sb2FkID0gKGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBic3RyOiBzdHJpbmcgPSBlLnRhcmdldC5yZXN1bHQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHdiOiBYTFNYLldvcmtCb29rID0gWExTWC5yZWFkKGJzdHIsIHsgdHlwZTogJ2JpbmFyeScgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHdzbmFtZTogc3RyaW5nID0gd2IuU2hlZXROYW1lc1swXTtcclxuICAgICAgICAgICAgY29uc3Qgd3M6IFhMU1guV29ya1NoZWV0ID0gd2IuU2hlZXRzW3dzbmFtZV07XHJcbiAgICAgICAgICAgIGNvbnN0IGxpbmVzOiBBT0EgPSAoWExTWC51dGlscy5zaGVldF90b19qc29uKHdzLCB7IGhlYWRlcjogMSB9KSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlY29yZHMgPSBbXTtcclxuICAgICAgICAgICAgY29uc3QgaGVhZGVycyA9IGxpbmVzWzBdO1xyXG4gICAgICAgICAgICBsaW5lcy5zcGxpY2UoMCwgMSk7XHJcbiAgICAgICAgICAgIGxpbmVzLmZvckVhY2gobGluZSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3QgcmVjb3JkID0ge307XHJcbiAgICAgICAgICAgICAgbGV0IGhhc1ZhbHVlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgaGVhZGVycy5mb3JFYWNoKChoZWFkZXIsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZWNvcmRbaGVhZGVyXSA9IGxpbmVbaW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGxpbmVbaW5kZXhdICE9PSB1bmRlZmluZWQgJiYgbGluZVtpbmRleF0gIT09IG51bGwgJiYgbGluZVtpbmRleF0udG9TdHJpbmcoKSkge1xyXG4gICAgICAgICAgICAgICAgICBoYXNWYWx1ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIChyZWNvcmRbaGVhZGVyXSkgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJlY29yZFtoZWFkZXJdID0gcmVjb3JkW2hlYWRlcl0udHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHJlY29yZFtoZWFkZXJdID09PSAnJyB8fCByZWNvcmRbaGVhZGVyXSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJlY29yZFtoZWFkZXJdID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICBpZiAoaGFzVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJlY29yZHMucHVzaChyZWNvcmQpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJlc29sdmUoe1xyXG4gICAgICAgICAgICAgIGl0ZW1zOiByZWNvcmRzLFxyXG4gICAgICAgICAgICAgIGZpbGU6IHRhcmdldC5maWxlc1swXVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICByZWFkZXIucmVhZEFzQmluYXJ5U3RyaW5nKHRhcmdldC5maWxlc1swXSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgIHJlamVjdChlcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgJChgIyR7dGhpcy5pbXBvcnRJZH1gKS50cmlnZ2VyKCdjbGljaycpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAjaXNWYWxpZERhdGUgPSAoZm9ybWF0OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpID0+IHtcclxuICAgIGlmICh2YWx1ZT8ubGVuZ3RoICE9PSBmb3JtYXQ/Lmxlbmd0aCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBjb25zdCByZWdleCA9IC9eKD86KD86MzEoXFwvfC18XFwuKSg/OjA/WzEzNTc4XXwxWzAyXSkpXFwxfCg/Oig/OjI5fDMwKShcXC98LXxcXC4pKD86MD9bMTMtOV18MVswLTJdKVxcMikpKD86KD86MVs2LTldfFsyLTldXFxkKT9cXGR7Mn0pJHxeKD86MjkoXFwvfC18XFwuKTA/MlxcMyg/Oig/Oig/OjFbNi05XXxbMi05XVxcZCk/KD86MFs0OF18WzI0NjhdWzA0OF18WzEzNTc5XVsyNl0pfCg/Oig/OjE2fFsyNDY4XVswNDhdfFszNTc5XVsyNl0pMDApKSkpJHxeKD86MD9bMS05XXwxXFxkfDJbMC04XSkoXFwvfC18XFwuKSg/Oig/OjA/WzEtOV0pfCg/OjFbMC0yXSkpXFw0KD86KD86MVs2LTldfFsyLTldXFxkKT9cXGR7Mn0pJC87XHJcbiAgICByZXR1cm4gcmVnZXgudGVzdCh2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICAjaXNWYWxpZFRpbWUgPSAoZm9ybWF0OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpID0+IHtcclxuICAgIGlmICh2YWx1ZT8ubGVuZ3RoICE9PSBmb3JtYXQ/Lmxlbmd0aCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gICNpc1ZhbGlkRGF0ZVRpbWUgPSAoZm9ybWF0OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpID0+IHtcclxuICAgIGlmICh2YWx1ZT8ubGVuZ3RoICE9PSBmb3JtYXQ/Lmxlbmd0aCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBjb25zdCBkYXRlcyA9IHZhbHVlPy5zcGxpdCgnICcpO1xyXG4gICAgaWYgKGRhdGVzLmxlbmd0aCAhPT0gMikge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBjb25zdCBkYXRlID0gZGF0ZXNbMF07XHJcbiAgICBpZiAoIXRoaXMuI2lzVmFsaWREYXRlKCdkZC9NTS95eXl5JywgZGF0ZSkpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgdGltZSA9IGRhdGVzWzFdO1xyXG4gICAgY29uc3QgcmVnZXggPSAvXigwWzAtOV18MVswLTldfDJbMC0zXSkoXFw6KSgwWzAtOV18WzAtNV1bMC05XSkkLztcclxuICAgIHJldHVybiByZWdleC50ZXN0KHRpbWUpO1xyXG4gIH1cclxufVxyXG5cclxuaW50ZXJmYWNlIEV4Y2VsSXRlbSB7XHJcbiAgdmFsaWRhdGlvbjogU2RVcGxvYWRFeGNlbFZhbGlkYXRpb247XHJcbiAgb3JpZ2luOiBhbnk7XHJcbiAgZXhjZWxJbmRleDogbnVtYmVyO1xyXG4gIFtjb2x1bW46IHN0cmluZ106IGFueTtcclxufVxyXG4iXX0=
485
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWV4Y2VsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJDOi9Vc2Vycy9uZ2hpYXR0MTVfb25lbW91bnQvRG9jdW1lbnRzL2xpYi1jb3JlLXVpL3Byb2plY3RzL3NkLWNvcmUvdXBsb2FkLWV4Y2VsLyIsInNvdXJjZXMiOlsic3JjL2xpYi91cGxvYWQtZXhjZWwuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ2xHLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUN2QixPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFNeEIsT0FBTyxFQUNMLGVBQWUsRUFDaEIsTUFBTSx5QkFBeUIsQ0FBQztBQUVqQyxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2pCLE1BQU0sMEJBQTBCLENBQUM7QUFFbEMsT0FBTyxFQUNMLGtCQUFrQixFQUNuQixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR3BDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQVFoRSxNQUFNLE9BQU8sYUFBYTtJQTBCeEIsWUFDVSxHQUFzQixFQUN0QixhQUE4QixFQUM5QixnQkFBb0MsRUFDcEMsYUFBOEIsRUFDOUIsY0FBa0MsRUFDbEMsY0FBZ0M7UUFMaEMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsa0JBQWEsR0FBYixhQUFhLENBQWlCO1FBQzlCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBb0I7UUFDcEMsa0JBQWEsR0FBYixh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QU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxQixDQUFDLEVBQUE7SUFwYkQsQ0FBQztJQWpCRCxJQUE2QixTQUFTLENBQUMsU0FBdUI7UUFDNUQsSUFBSSxTQUFTLElBQUksNkNBQW9CLFNBQVMsRUFBRTtZQUM5Qyx1QkFBQSxJQUFJLGNBQWMsU0FBUyxFQUFDO1lBQzVCLDRDQUFtQixHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLHVDQUFjLENBQUMsQ0FBQztTQUNoRTtJQUNILENBQUM7SUFjRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDMUIsQ0FBQztJQUVELFdBQVc7UUFDVCw0Q0FBbUIsV0FBVyxFQUFFLENBQUM7SUFDbkMsQ0FBQzs7OztZQTlDRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLGlCQUFpQjtnQkFDM0IsOGdQQUE0Qzs7YUFFN0M7OztZQWhDNkMsaUJBQWlCO1lBd0J0RCxlQUFlO1lBTnRCLGtCQUFrQjtZQVJsQixlQUFlO1lBZVIsa0JBQWtCO1lBWHpCLGdCQUFnQjs7O3FCQXFCZixLQUFLO29CQUNMLFNBQVMsU0FBQyxPQUFPO3dCQWFqQixTQUFTLFNBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgVmlld0NoaWxkLCBDaGFuZ2VEZXRlY3RvclJlZiwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCAqIGFzIHV1aWQgZnJvbSAndXVpZCc7XHJcbmltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XHJcbmltcG9ydCBYTFNYIGZyb20gJ3hsc3gnO1xyXG5cclxuaW1wb3J0IHtcclxuICBTZEV4Y2VsU2VydmljZSwgRXhjZWxUZW1wbGF0ZVxyXG59IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvZXhjZWwnO1xyXG5cclxuaW1wb3J0IHtcclxuICBTZE5vdGlmeVNlcnZpY2VcclxufSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL25vdGlmeSc7XHJcblxyXG5pbXBvcnQge1xyXG4gIFNkTG9hZGluZ1NlcnZpY2VcclxufSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL2xvYWRpbmcnO1xyXG5cclxuaW1wb3J0IHtcclxuICBTZFRyYW5zbGF0ZVNlcnZpY2VcclxufSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL3RyYW5zbGF0ZSc7XHJcbmltcG9ydCB7IE1hdFBhZ2luYXRvciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBTZE1vZGFsIH0gZnJvbSAnQHNkLWFuZ3VsYXIvY29yZS9tb2RhbCc7XHJcbmltcG9ydCB7IFNkVXBsb2FkRXhjZWxPcHRpb24sIFNkVXBsb2FkRXhjZWxWYWxpZGF0aW9uIH0gZnJvbSAnLi91cGxvYWQtZXhjZWwubW9kZWwnO1xyXG5pbXBvcnQgeyBTZEV4cG9ydFNlcnZpY2UgfSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL2V4cG9ydCc7XHJcbmltcG9ydCB7IFNkQ29sdW1uSGlkZGVuUGlwZSB9IGZyb20gJy4vcGlwZXMvY29sdW1tLWhpZGRlbi5waXBlJztcclxudHlwZSBBT0EgPSBBcnJheTxBcnJheTxhbnk+PjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc2QtdXBsb2FkLWV4Y2VsJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdXBsb2FkLWV4Y2VsLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi91cGxvYWQtZXhjZWwuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2RVcGxvYWRFeGNlbCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBwcml2YXRlIGltcG9ydElkID0gJ0knICsgdXVpZC52NCgpO1xyXG4gIEBJbnB1dCgpIG9wdGlvbjogU2RVcGxvYWRFeGNlbE9wdGlvbjtcclxuICBAVmlld0NoaWxkKCdtb2RhbCcpIG1vZGFsOiBTZE1vZGFsO1xyXG4gIGl0ZW1zOiBFeGNlbEl0ZW1bXSA9IFtdO1xyXG4gIG9yaWdpbkl0ZW1zOiBhbnlbXSA9IFtdO1xyXG4gIGhhc0Rlc2NyaXB0aW9uID0gZmFsc2U7XHJcblxyXG4gIHNob3dpbmc6ICdBTEwnIHwgJ1NVQ0NFU1MnIHwgJ1dBUk5JTkcnIHwgJ0VSUk9SJyA9ICdBTEwnO1xyXG4gIGZpbHRlcmVkSXRlbXM6IEV4Y2VsSXRlbVtdID0gW107XHJcbiAgdmlld0l0ZW1zOiBFeGNlbEl0ZW1bXSA9IFtdO1xyXG4gIG51bWJlck9mU3VjY2VzcyA9IDA7XHJcbiAgbnVtYmVyT2ZFcnJvciA9IDA7XHJcbiAgbnVtYmVyT2ZXYXJuaW5nID0gMDtcclxuICBmaWxlOiBGaWxlO1xyXG4gICNwYWdpbmF0b3I6IE1hdFBhZ2luYXRvcjtcclxuICBAVmlld0NoaWxkKE1hdFBhZ2luYXRvcikgc2V0IHBhZ2luYXRvcihwYWdpbmF0b3I6IE1hdFBhZ2luYXRvcikge1xyXG4gICAgaWYgKHBhZ2luYXRvciAmJiB0aGlzLiNwYWdpbmF0b3IgIT09IHBhZ2luYXRvcikge1xyXG4gICAgICB0aGlzLiNwYWdpbmF0b3IgPSBwYWdpbmF0b3I7XHJcbiAgICAgIHRoaXMuI3N1YnNjcmlwdGlvbi5hZGQocGFnaW5hdG9yLnBhZ2Uuc3Vic2NyaWJlKHRoaXMuI3JlbG9hZCkpO1xyXG4gICAgfVxyXG4gIH1cclxuICAjc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xyXG5cclxuICBpc1VwbG9hZGVkOiBib29sZWFuO1xyXG4gIGlzRG93bmxvYWRUZW1wbGF0ZSA9IGZhbHNlO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBleHBvcnRTZXJ2aWNlOiBTZEV4cG9ydFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFNkVHJhbnNsYXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgbm90aWZ5U2VydmljZTogU2ROb3RpZnlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzZENvbHVtbkhpZGRlbjogU2RDb2x1bW5IaWRkZW5QaXBlLFxyXG4gICAgcHJpdmF0ZSBsb2FkaW5nU2VydmljZTogU2RMb2FkaW5nU2VydmljZSkge1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmlzVXBsb2FkZWQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy4jc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBvcGVuID0gKCkgPT4ge1xyXG4gICAgdGhpcy4jcmVzZXQoKTtcclxuICAgIHRoaXMubW9kYWwub3BlbigpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2UgPSAoKSA9PiB7XHJcbiAgICB0aGlzLm1vZGFsLmNsb3NlKCk7XHJcbiAgfVxyXG5cclxuICAjcmVzZXQgPSAoKSA9PiB7XHJcbiAgICB0aGlzLm9yaWdpbkl0ZW1zID0gW107XHJcbiAgICB0aGlzLml0ZW1zID0gW107XHJcbiAgICB0aGlzLmZpbHRlcmVkSXRlbXMgPSBbXTtcclxuICAgIHRoaXMudmlld0l0ZW1zID0gW107XHJcbiAgICB0aGlzLm51bWJlck9mU3VjY2VzcyA9IDA7XHJcbiAgICB0aGlzLm51bWJlck9mRXJyb3IgPSAwO1xyXG4gICAgdGhpcy5udW1iZXJPZldhcm5pbmcgPSAwO1xyXG4gICAgdGhpcy5zaG93aW5nID0gJ0FMTCc7XHJcbiAgfVxyXG5cclxuICAjcmVsb2FkID0gKCkgPT4ge1xyXG4gICAgY29uc3QgcGFnZUluZGV4ID0gdGhpcy4jcGFnaW5hdG9yLnBhZ2VJbmRleDtcclxuICAgIGNvbnN0IHBhZ2VTaXplID0gdGhpcy4jcGFnaW5hdG9yLnBhZ2VTaXplO1xyXG4gICAgdGhpcy5maWx0ZXJlZEl0ZW1zID0gdGhpcy5pdGVtcy5maWx0ZXIoKGl0ZW0pID0+IHtcclxuICAgICAgaWYgKHRoaXMuc2hvd2luZyA9PT0gJ1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgcmV0dXJuICFpdGVtLnZhbGlkYXRpb24/LmVycm9yICYmICFpdGVtLnZhbGlkYXRpb24/Lndhcm5pbmc7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zaG93aW5nID09PSAnV0FSTklORycpIHtcclxuICAgICAgICByZXR1cm4gISFpdGVtLnZhbGlkYXRpb24/Lndhcm5pbmcgJiYgIWl0ZW0udmFsaWRhdGlvbj8uZXJyb3I7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zaG93aW5nID09PSAnRVJST1InKSB7XHJcbiAgICAgICAgcmV0dXJuICEhaXRlbS52YWxpZGF0aW9uPy5lcnJvcjtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy52aWV3SXRlbXMgPSB0aGlzLmZpbHRlcmVkSXRlbXNcclxuICAgICAgLmZpbHRlcigoaXRlbSwgaW5kZXgpID0+IGluZGV4ID49IHBhZ2VJbmRleCAqIHBhZ2VTaXplICYmIGluZGV4IDwgKHBhZ2VJbmRleCArIDEpICogcGFnZVNpemUpO1xyXG5cclxuICAgIHRoaXMubnVtYmVyT2ZTdWNjZXNzID0gdGhpcy5pdGVtcy5maWx0ZXIoaXRlbSA9PiAhaXRlbS52YWxpZGF0aW9uPy5lcnJvciAmJiAhaXRlbS52YWxpZGF0aW9uPy53YXJuaW5nKS5sZW5ndGg7XHJcbiAgICB0aGlzLm51bWJlck9mRXJyb3IgPSB0aGlzLml0ZW1zLmZpbHRlcihpdGVtID0+IGl0ZW0udmFsaWRhdGlvbj8uZXJyb3IpLmxlbmd0aDtcclxuICAgIHRoaXMubnVtYmVyT2ZXYXJuaW5nID0gdGhpcy5pdGVtcy5maWx0ZXIoaXRlbSA9PiBpdGVtLnZhbGlkYXRpb24/Lndhcm5pbmcgJiYgIWl0ZW0udmFsaWRhdGlvbj8uZXJyb3IpLmxlbmd0aDtcclxuICB9XHJcblxyXG4gIHVwbG9hZCA9IGFzeW5jICgpID0+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHsgdHJhbnNsYXRlIH0gPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2U7XHJcbiAgICAgIGNvbnN0IHsgaXRlbXMsIGZpbGUgfSA9IGF3YWl0IHRoaXMuI2ltcG9ydCgpO1xyXG4gICAgICBpZiAodGhpcy5vcHRpb24uY29sdW1ucy5zb21lKGUgPT4gISFlLmRlc2NyaXB0aW9uKSkge1xyXG4gICAgICAgIHRoaXMuaGFzRGVzY3JpcHRpb24gPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuaGFzRGVzY3JpcHRpb24gPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBvZmZzZXQgPSB0aGlzLmhhc0Rlc2NyaXB0aW9uID8gMiA6IDE7XHJcbiAgICAgIGl0ZW1zLnNwbGljZSgwLCBvZmZzZXQpO1xyXG4gICAgICBpZiAoaXRlbXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgdGhpcy5ub3RpZnlTZXJ2aWNlLm5vdGlmeS53YXJuaW5nKGAke3RyYW5zbGF0ZShgTm8gZGF0YSB0byBpbXBvcnRgKX1gKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA+IHRoaXMub3B0aW9uLmxpbWl0KSB7XHJcbiAgICAgICAgdGhpcy5ub3RpZnlTZXJ2aWNlLm5vdGlmeS53YXJuaW5nKGAke3RyYW5zbGF0ZShgTGltaXQgcm93c2ApfTogJHt0aGlzLm9wdGlvbi5saW1pdH1gKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy4jcmVzZXQoKTtcclxuICAgICAgdGhpcy5vcmlnaW5JdGVtcyA9IGl0ZW1zO1xyXG4gICAgICB0aGlzLml0ZW1zID0gdGhpcy5vcHRpb24ubWFwcGluZ0l0ZW1zPy4oaXRlbXMpIHx8IGl0ZW1zO1xyXG4gICAgICB0aGlzLmZpbGUgPSBmaWxlO1xyXG4gICAgICB0aGlzLmxvYWRpbmdTZXJ2aWNlLnN0YXJ0KCk7XHJcbiAgICAgIGZvciAoY29uc3QgW2lkeCwgaXRlbV0gb2YgdGhpcy5pdGVtcy5lbnRyaWVzKCkpIHtcclxuICAgICAgICBpdGVtLm9yaWdpbiA9IHsgLi4uaXRlbSB9O1xyXG4gICAgICAgIGl0ZW0uZXhjZWxJbmRleCA9IGlkeCArICh0aGlzLmhhc0Rlc2NyaXB0aW9uID8gNCA6IDMpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMudmFsaWRhdGUoaXRlbSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIE7hur91IGtow7RuZyBjw7MgZXJyb3IgdGjDrCB0aeG6v3AgdOG7pWMgdmFsaWRhdGUgdOG7qyBvcHRpb24gdmFsaWRhdGUgdHJ1eeG7gW4gdsOgb1xyXG4gICAgICBpZiAoIXRoaXMuaXRlbXMuc29tZShpdGVtID0+ICEhaXRlbS52YWxpZGF0aW9uLmVycm9yKSAmJiB0aGlzLm9wdGlvbi5lcnJvclZhbGlkYXRpb24pIHtcclxuICAgICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgdGhpcy5vcHRpb24uZXJyb3JWYWxpZGF0aW9uKHRoaXMuaXRlbXMpO1xyXG4gICAgICAgIHJlc3VsdHMuZm9yRWFjaChyZXN1bHQgPT4gdGhpcy5pdGVtc1tyZXN1bHQuaWR4XS52YWxpZGF0aW9uLmVycm9yID0gcmVzdWx0Lm1lc3NhZ2UpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBO4bq/dSBraMO0bmcgY8OzIHdhcm5pbmcgdGjDrCB0aeG6v3AgdOG7pWMgdmFsaWRhdGUgdOG7qyBvcHRpb24gdmFsaWRhdGUgdHJ1eeG7gW4gdsOgb1xyXG4gICAgICBpZiAoIXRoaXMuaXRlbXMuc29tZShpdGVtID0+ICEhaXRlbS52YWxpZGF0aW9uLndhcm5pbmcpICYmIHRoaXMub3B0aW9uLndhcm5pbmdWYWxpZGF0aW9uKSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHRoaXMub3B0aW9uLndhcm5pbmdWYWxpZGF0aW9uKHRoaXMuaXRlbXMpO1xyXG4gICAgICAgIHJlc3VsdHMuZm9yRWFjaChyZXN1bHQgPT4gdGhpcy5pdGVtc1tyZXN1bHQuaWR4XS52YWxpZGF0aW9uLndhcm5pbmcgPSByZXN1bHQubWVzc2FnZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuI3BhZ2luYXRvci5wYWdlSW5kZXggPSAwO1xyXG4gICAgICB0aGlzLiNyZWxvYWQoKTtcclxuICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICAgICAgdGhpcy5pc1VwbG9hZGVkID0gZmFsc2U7XHJcbiAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgdGhpcy5ub3RpZnlTZXJ2aWNlLmhhbmRsZS5lcnJvcihlcnIpO1xyXG4gICAgfSBmaW5hbGx5IHtcclxuICAgICAgdGhpcy5sb2FkaW5nU2VydmljZS5zdG9wKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB2YWxpZGF0ZSA9IGFzeW5jIChpdGVtOiB7IFt4OiBzdHJpbmddOiBhbnk7IHZhbGlkYXRpb246IFNkVXBsb2FkRXhjZWxWYWxpZGF0aW9uOyB9KSA9PiB7XHJcbiAgICBjb25zdCB2YWxpZGF0aW9uOiBTZFVwbG9hZEV4Y2VsVmFsaWRhdGlvbiA9IHtcclxuICAgICAgZXJyb3I6ICcnLFxyXG4gICAgICB3YXJuaW5nOiAnJyxcclxuICAgICAgZGF0YToge31cclxuICAgIH07XHJcbiAgICBjb25zdCB7IHRyYW5zbGF0ZSB9ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlO1xyXG4gICAgZm9yIChjb25zdCBjb2x1bW4gb2YgdGhpcy5vcHRpb24uY29sdW1ucykge1xyXG4gICAgICBpZighdGhpcy5zZENvbHVtbkhpZGRlbi50cmFuc2Zvcm0oY29sdW1uKSl7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuICAgICAgdmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0gPSB7fTtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBpZiAoY29sdW1uLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICBpdGVtW2NvbHVtbi5maWVsZF0gPSBpdGVtW2NvbHVtbi5maWVsZF0gPz8gY29sdW1uLmRlZmF1bHRWYWx1ZTtcclxuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi5yZXF1aXJlZCAmJiAhaXRlbVtjb2x1bW4uZmllbGRdICYmIGl0ZW1bY29sdW1uLmZpZWxkXSAhPT0gMCkge1xyXG4gICAgICAgICAgdmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3IgPSBgJHt0cmFuc2xhdGUoJ3JlcXVpcmVkJyl9YDtcclxuICAgICAgICAgIHZhbGlkYXRpb24uZXJyb3IgKz0gYDxzdHJvbmc+WyR7Y29sdW1uLnRpdGxlIHx8IGNvbHVtbi5maWVsZH1dPC9zdHJvbmc+ICR7dmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3J9PGJyPmA7XHJcbiAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgY29uc3QgdmFsdWUgPSAoaXRlbVtjb2x1bW4uZmllbGRdIHx8ICcnKS50b1N0cmluZygpO1xyXG4gICAgICAgICAgaWYgKGNvbHVtbi5taW5MZW5ndGggIT09IHVuZGVmaW5lZCAmJiB2YWx1ZS5sZW5ndGggPCBjb2x1bW4ubWluTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLmVycm9yID0gYCR7dHJhbnNsYXRlKCdNaW4gbGVuZ3RoJyl9OiAke2NvbHVtbi5taW5MZW5ndGh9YDtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbi5lcnJvciArPSBgPHN0cm9uZz5bJHtjb2x1bW4udGl0bGUgfHwgY29sdW1uLmZpZWxkfV08L3N0cm9uZz4gJHt2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvcn08YnI+YDtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoY29sdW1uLm1heExlbmd0aCAhPT0gdW5kZWZpbmVkICYmIHZhbHVlLmxlbmd0aCA+IGNvbHVtbi5tYXhMZW5ndGgpIHtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3IgPSBgJHt0cmFuc2xhdGUoJ01heCBsZW5ndGgnKX06ICR7Y29sdW1uLm1heExlbmd0aH1gO1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9uLmVycm9yICs9IGA8c3Ryb25nPlske2NvbHVtbi50aXRsZSB8fCBjb2x1bW4uZmllbGR9XTwvc3Ryb25nPiAke3ZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLmVycm9yfTxicj5gO1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGl0ZW1bY29sdW1uLmZpZWxkXSA9IHZhbHVlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICBpZiAoaXRlbVtjb2x1bW4uZmllbGRdKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gK2l0ZW1bY29sdW1uLmZpZWxkXTtcclxuICAgICAgICAgICAgaWYgKE51bWJlci5pc05hTih2YWx1ZSkpIHtcclxuICAgICAgICAgICAgICB2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvciA9IGAke2l0ZW1bY29sdW1uLmZpZWxkXX0gJHt0cmFuc2xhdGUoJ2lzIG5vdCBhIG51bWJlcicpfWA7XHJcbiAgICAgICAgICAgICAgdmFsaWRhdGlvbi5lcnJvciArPSBgPHN0cm9uZz5bJHtjb2x1bW4udGl0bGUgfHwgY29sdW1uLmZpZWxkfV08L3N0cm9uZz4gJHt2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvcn08YnI+YDtcclxuICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpdGVtW2NvbHVtbi5maWVsZF0gPSB2YWx1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICghaXRlbVtjb2x1bW4uZmllbGRdICYmIGl0ZW1bY29sdW1uLmZpZWxkXSAhPT0gMCkge1xyXG4gICAgICAgICAgICBpdGVtW2NvbHVtbi5maWVsZF0gPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoY29sdW1uLm1pblZhbHVlICE9PSB1bmRlZmluZWQgJiYgaXRlbVtjb2x1bW4uZmllbGRdIDwgY29sdW1uLm1pblZhbHVlKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLmVycm9yID0gYCR7aXRlbVtjb2x1bW4uZmllbGRdfSAke3RyYW5zbGF0ZSgnTWluIHZhbHVlJyl9OiAke2NvbHVtbi5taW5WYWx1ZX1gO1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9uLmVycm9yICs9IGA8c3Ryb25nPlske2NvbHVtbi50aXRsZSB8fCBjb2x1bW4uZmllbGR9XTwvc3Ryb25nPiAke3ZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLmVycm9yfTxicj5gO1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChjb2x1bW4ubWF4VmFsdWUgIT09IHVuZGVmaW5lZCAmJiBpdGVtW2NvbHVtbi5maWVsZF0gPiBjb2x1bW4ubWF4VmFsdWUpIHtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3IgPSBgJHtpdGVtW2NvbHVtbi5maWVsZF19ICR7dHJhbnNsYXRlKCdNYXggdmFsdWUnKX06ICR7Y29sdW1uLm1heFZhbHVlfWA7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb24uZXJyb3IgKz0gYDxzdHJvbmc+WyR7Y29sdW1uLnRpdGxlIHx8IGNvbHVtbi5maWVsZH1dPC9zdHJvbmc+ICR7dmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3J9PGJyPmA7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdib29sJykge1xyXG4gICAgICAgICAgaWYgKGl0ZW1bY29sdW1uLmZpZWxkXSA9PT0gMCB8fCBpdGVtW2NvbHVtbi5maWVsZF0gPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIGl0ZW1bY29sdW1uLmZpZWxkXSA9ICcwJztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChpdGVtW2NvbHVtbi5maWVsZF0gPT09IDEgfHwgaXRlbVtjb2x1bW4uZmllbGRdID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIGl0ZW1bY29sdW1uLmZpZWxkXSA9ICcxJztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChpdGVtW2NvbHVtbi5maWVsZF0pIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSAraXRlbVtjb2x1bW4uZmllbGRdO1xyXG4gICAgICAgICAgICBpZiAoTnVtYmVyLmlzTmFOKHZhbHVlKSB8fCAodmFsdWUgIT09IDAgJiYgdmFsdWUgIT09IDEpKSB7XHJcbiAgICAgICAgICAgICAgdmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3IgPSBgJHt0cmFuc2xhdGUoJ1ZhbHVlIHNob3VkIGJlIDAgb3IgMScpfWA7XHJcbiAgICAgICAgICAgICAgdmFsaWRhdGlvbi5lcnJvciArPSBgPHN0cm9uZz5bJHtjb2x1bW4udGl0bGUgfHwgY29sdW1uLmZpZWxkfV08L3N0cm9uZz4gJHt2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvcn08YnI+YDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICd2YWx1ZXMnKSB7XHJcbiAgICAgICAgICBpZiAoaXRlbVtjb2x1bW4uZmllbGRdICYmIHR5cGVvZiAoaXRlbVtjb2x1bW4uZmllbGRdKSAhPT0gJ251bWJlcicgJiYgdHlwZW9mIChpdGVtW2NvbHVtbi5maWVsZF0pICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvciA9IGAke2l0ZW1bY29sdW1uLmZpZWxkXX0gJHt0cmFuc2xhdGUoJ0ludmFsaWQgZGF0YSB0eXBlJyl9YDtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbi5lcnJvciArPSBgPHN0cm9uZz5bJHtjb2x1bW4udGl0bGUgfHwgY29sdW1uLmZpZWxkfV08L3N0cm9uZz4gJHt2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvcn08YnI+YDtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoY29sdW1uLmNoZWNrVmFsdWVJbkFycmF5ICYmIGl0ZW1bY29sdW1uLmZpZWxkXSAmJiAhY29sdW1uLnZhbHVlcy5zb21lKGUgPT4gZS50b1N0cmluZygpID09PSBpdGVtW2NvbHVtbi5maWVsZF0udG9TdHJpbmcoKSkpIHtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3IgPSBgJHtpdGVtW2NvbHVtbi5maWVsZF19ICR7dHJhbnNsYXRlKCdWYWx1ZSBub3QgaW4nKX0gWyR7Y29sdW1uLnZhbHVlcy5qb2luKCl9XWA7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb24uZXJyb3IgKz0gYDxzdHJvbmc+WyR7Y29sdW1uLnRpdGxlIHx8IGNvbHVtbi5maWVsZH1dPC9zdHJvbmc+ICR7dmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3J9PGJyPmA7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdkYXRlJyB8fCBjb2x1bW4udHlwZSA9PT0gJ2RhdGV0aW1lJyB8fCBjb2x1bW4udHlwZSA9PT0gJ3RpbWUnKSB7XHJcbiAgICAgICAgICBjb25zdCB7IHR5cGUsIGZvcm1hdCB9ID0gY29sdW1uO1xyXG4gICAgICAgICAgY29uc3QgdmFsID0gaXRlbVtjb2x1bW4uZmllbGRdO1xyXG4gICAgICAgICAgaWYgKGZvcm1hdCAmJiBpdGVtW2NvbHVtbi5maWVsZF0pIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiAodmFsKSAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICB2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvciA9IGAke3RyYW5zbGF0ZSgnSW52YWxpZCBmb3JtYXQnKX0gJHtjb2x1bW4uZm9ybWF0fTogJHt2YWx9YDtcclxuICAgICAgICAgICAgICB2YWxpZGF0aW9uLmVycm9yICs9IGA8c3Ryb25nPlske2NvbHVtbi50aXRsZSB8fCBjb2x1bW4uZmllbGR9XTwvc3Ryb25nPiAke3ZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLmVycm9yfTxicj5gO1xyXG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0eXBlID09PSAnZGF0ZScgJiYgIXRoaXMuI2lzVmFsaWREYXRlKGZvcm1hdCwgdmFsKSkge1xyXG4gICAgICAgICAgICAgIHZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLmVycm9yID0gYCR7dHJhbnNsYXRlKCdJbnZhbGlkIGZvcm1hdCcpfSAke2NvbHVtbi5mb3JtYXR9OiAke3ZhbH1gO1xyXG4gICAgICAgICAgICAgIHZhbGlkYXRpb24uZXJyb3IgKz0gYDxzdHJvbmc+WyR7Y29sdW1uLnRpdGxlIHx8IGNvbHVtbi5maWVsZH1dPC9zdHJvbmc+ICR7dmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3J9PGJyPmA7XHJcbiAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHR5cGUgPT09ICd0aW1lJyAmJiAhdGhpcy4jaXNWYWxpZFRpbWUoZm9ybWF0LCB2YWwpKSB7XHJcbiAgICAgICAgICAgICAgdmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3IgPSBgJHt0cmFuc2xhdGUoJ0ludmFsaWQgZm9ybWF0Jyl9ICR7Y29sdW1uLmZvcm1hdH06ICR7dmFsfWA7XHJcbiAgICAgICAgICAgICAgdmFsaWRhdGlvbi5lcnJvciArPSBgPHN0cm9uZz5bJHtjb2x1bW4udGl0bGUgfHwgY29sdW1uLmZpZWxkfV08L3N0cm9uZz4gJHt2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvcn08YnI+YDtcclxuICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gJ2RhdGV0aW1lJyAmJiAhdGhpcy4jaXNWYWxpZERhdGVUaW1lKGZvcm1hdCwgdmFsKSkge1xyXG4gICAgICAgICAgICAgIHZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLmVycm9yID0gYCR7dHJhbnNsYXRlKCdJbnZhbGlkIGZvcm1hdCcpfSAke2NvbHVtbi5mb3JtYXR9OiAke3ZhbH1gO1xyXG4gICAgICAgICAgICAgIHZhbGlkYXRpb24uZXJyb3IgKz0gYDxzdHJvbmc+WyR7Y29sdW1uLnRpdGxlIHx8IGNvbHVtbi5maWVsZH1dPC9zdHJvbmc+ICR7dmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3J9PGJyPmA7XHJcbiAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaXRlbVtjb2x1bW4uZmllbGRdID0gRGF0ZS5wYXJzZUZyb20odmFsLCBjb2x1bW4uZm9ybWF0KS50b0Zvcm1hdCgnTU0vZGQveXl5eSBISDptbTpzcycpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGl0ZW1bY29sdW1uLmZpZWxkXSAmJiAhRGF0ZS5pc0RhdGUoaXRlbVtjb2x1bW4uZmllbGRdKSkge1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvciA9IGAke3RyYW5zbGF0ZSgnSW52YWxpZCBkYXRlJyl9OiAke2l0ZW1bY29sdW1uLmZpZWxkXX1gO1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9uLmVycm9yICs9IGA8c3Ryb25nPlske2NvbHVtbi50aXRsZSB8fCBjb2x1bW4uZmllbGR9XTwvc3Ryb25nPiAke3ZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLmVycm9yfTxicj5gO1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3IgJiYgY29sdW1uLmVycm9yVmFsaWRhdGlvbikge1xyXG4gICAgICAgICAgY29uc3QgZXJyb3IgPSBhd2FpdCBjb2x1bW4uZXJyb3JWYWxpZGF0aW9uKGl0ZW0sIGl0ZW1bY29sdW1uLmZpZWxkXSk7XHJcbiAgICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0uZXJyb3IgPSBgJHtlcnJvcn1gO1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9uLmVycm9yICs9IGA8c3Ryb25nPlske2NvbHVtbi50aXRsZSB8fCBjb2x1bW4uZmllbGR9XTwvc3Ryb25nPiAke2Vycm9yfTxicj5gO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS53YXJuaW5nICYmIGNvbHVtbi53YXJuaW5nVmFsaWRhdGlvbikge1xyXG4gICAgICAgICAgY29uc3Qgd2FybmluZyA9IGF3YWl0IGNvbHVtbi53YXJuaW5nVmFsaWRhdGlvbihpdGVtLCBpdGVtW2NvbHVtbi5maWVsZF0pO1xyXG4gICAgICAgICAgaWYgKHdhcm5pbmcpIHtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbi5kYXRhW2NvbHVtbi5maWVsZF0ud2FybmluZyA9IGAke3dhcm5pbmd9YDtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbi53YXJuaW5nICs9IGA8c3Ryb25nPlske2NvbHVtbi50aXRsZSB8fCBjb2x1bW4uZmllbGR9XTwvc3Ryb25nPiAke3dhcm5pbmd9PGJyPmA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGNhdGNoIChleCkge1xyXG4gICAgICAgIHZhbGlkYXRpb24uZGF0YVtjb2x1bW4uZmllbGRdLmVycm9yID0gYCR7ZXg/Lm1lc3NhZ2UgfHwgZXg/LmVycm9yIHx8IGV4IHx8ICdDw7MgbOG7l2kgeOG6o3kgcmEnfWA7XHJcbiAgICAgICAgdmFsaWRhdGlvbi5lcnJvciArPSBgPHN0cm9uZz5bJHtjb2x1bW4udGl0bGUgfHwgY29sdW1uLmZpZWxkfV08L3N0cm9uZz4gJHt2YWxpZGF0aW9uLmRhdGFbY29sdW1uLmZpZWxkXS5lcnJvcn08YnI+YDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaXRlbS52YWxpZGF0aW9uID0gdmFsaWRhdGlvbjtcclxuICB9XHJcblxyXG4gICNtYXBJdGVtID0gKGl0ZW06IEV4Y2VsSXRlbSkgPT4ge1xyXG4gICAgY29uc3QgeyB2YWxpZGF0aW9uLCBvcmlnaW4sIGV4Y2VsSW5kZXgsIC4uLnJlbWFpbiB9ID0gaXRlbTtcclxuICAgIHJldHVybiByZW1haW47XHJcbiAgfVxyXG5cclxuICBhY2NlcHQgPSAoKSA9PiB7XHJcbiAgICBjb25zdCBzdWNjZXNzSXRlbXMgPSB0aGlzLml0ZW1zLmZpbHRlcihpdGVtID0+ICFpdGVtLnZhbGlkYXRpb24uZXJyb3IgJiYgIWl0ZW0udmFsaWRhdGlvbi53YXJuaW5nKS5tYXAodGhpcy4jbWFwSXRlbSk7XHJcbiAgICBjb25zdCBlcnJvckl0ZW1zID0gdGhpcy5pdGVtcy5maWx0ZXIoaXRlbSA9PiBpdGVtLnZhbGlkYXRpb24uZXJyb3IpLm1hcCh0aGlzLiNtYXBJdGVtKTtcclxuICAgIGNvbnN0IHdhcm5pbmdJdGVtcyA9IHRoaXMuaXRlbXMuZmlsdGVyKGl0ZW0gPT4gIWl0ZW0udmFsaWRhdGlvbi5lcnJvciAmJiBpdGVtLnZhbGlkYXRpb24ud2FybmluZykubWFwKHRoaXMuI21hcEl0ZW0pO1xyXG4gICAgdGhpcy5vcHRpb24/Lm9uQWNjZXB0KHRoaXMuaXRlbXMubWFwKHRoaXMuI21hcEl0ZW0pLCBzdWNjZXNzSXRlbXMsIGVycm9ySXRlbXMsIHdhcm5pbmdJdGVtcywgdGhpcy5maWxlKTtcclxuXHJcbiAgICB0aGlzLmlzVXBsb2FkZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgc2V0VmFsaWRhdGlvbiA9ICh2YWxpZGF0ZXM6IHsgaWR4OiBudW1iZXIsIG1lc3NhZ2VFcnJvcj86IHN0cmluZywgbWVzc2FnZVdhcm5pbmc/OiBzdHJpbmcsIG1lc3NhZ2VTdWNjZXNzPzogc3RyaW5nIH1bXSkgPT4ge1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsaWRhdGVzKSkge1xyXG4gICAgICB2YWxpZGF0ZXMuZm9yRWFjaCh2YWxpZGF0ZSA9PiB7XHJcbiAgICAgICAgdGhpcy5pdGVtc1t2YWxpZGF0ZS5pZHhdLnZhbGlkYXRpb24uZXJyb3IgPSB2YWxpZGF0ZS5tZXNzYWdlRXJyb3I7XHJcbiAgICAgICAgdGhpcy5pdGVtc1t2YWxpZGF0ZS5pZHhdLnZhbGlkYXRpb24ud2FybmluZyA9IHZhbGlkYXRlLm1lc3NhZ2VXYXJuaW5nO1xyXG4gICAgICAgIHRoaXMuaXRlbXNbdmFsaWRhdGUuaWR4XS52YWxpZGF0aW9uLnN1Y2Nlc3MgPSB2YWxpZGF0ZS5tZXNzYWdlU3VjY2VzcztcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLiNyZWxvYWQoKTtcclxuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHZpZXcgPSAoc2hvd2luZzogJ0FMTCcgfCAnU1VDQ0VTUycgfCAnV0FSTklORycgfCAnRVJST1InID0gJ0FMTCcpID0+IHtcclxuICAgIHRoaXMuc2hvd2luZyA9IHNob3dpbmc7XHJcbiAgICB0aGlzLiNwYWdpbmF0b3IucGFnZUluZGV4ID0gMDtcclxuICAgIHRoaXMuI3JlbG9hZCgpO1xyXG4gIH1cclxuXHJcbiAgZG93bmxvYWRUZW1wbGF0ZSA9IGFzeW5jICgpID0+IHtcclxuICAgIGNvbnN0IHNoZWV0czoge1xyXG4gICAgICBuYW1lOiBzdHJpbmcsXHJcbiAgICAgIGl0ZW1zOiBhbnlbXSxcclxuICAgICAgZmllbGRzOiBzdHJpbmdbXVxyXG4gICAgfVtdID0gW107XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLm9wdGlvbj8uc2hlZXRzKSkge1xyXG4gICAgICBmb3IgKGNvbnN0IHNoZWV0IG9mIHRoaXMub3B0aW9uLnNoZWV0cykge1xyXG4gICAgICAgIGlmIChzaGVldC5uYW1lICYmIHNoZWV0Lml0ZW1zICYmIHNoZWV0LmZpZWxkcykge1xyXG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc2hlZXQuaXRlbXMpKSB7XHJcbiAgICAgICAgICAgIHNoZWV0cy5wdXNoKHtcclxuICAgICAgICAgICAgICBuYW1lOiBzaGVldC5uYW1lLFxyXG4gICAgICAgICAgICAgIGl0ZW1zOiBzaGVldC5pdGVtcyxcclxuICAgICAgICAgICAgICBmaWVsZHM6IHNoZWV0LmZpZWxkc1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHNoZWV0cy5wdXNoKHtcclxuICAgICAgICAgICAgICBuYW1lOiBzaGVldC5uYW1lLFxyXG4gICAgICAgICAgICAgIGl0ZW1zOiBhd2FpdCBzaGVldC5pdGVtcygpLFxyXG4gICAgICAgICAgICAgIGZpZWxkczogc2hlZXQuZmllbGRzXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3QgY29sdW1uTm90SGlkZGVuID0gdGhpcy5vcHRpb24uY29sdW1ucy5maWx0ZXIoY29sdW1uID0+IHRoaXMuc2RDb2x1bW5IaWRkZW4udHJhbnNmb3JtKGNvbHVtbikpOyAgICBcclxuICAgIGNvbnN0IGV4Y2VsVGVtcGxhdGU6IEV4Y2VsVGVtcGxhdGUgPSB7XHJcbiAgICAgIGZpbGVOYW1lOiB0aGlzLm9wdGlvbi5maWxlTmFtZSB8fCAnVGVtcGxhdGUnLFxyXG4gICAgICBjb2x1bW5zOiBjb2x1bW5Ob3RIaWRkZW4ubWFwKGNvbHVtbiA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIGZpZWxkOiBjb2x1bW4uZmllbGQsXHJcbiAgICAgICAgICB0aXRsZTogY29sdW1uLnRpdGxlLFxyXG4gICAgICAgICAgd2lkdGg6IGNvbHVtbi53aWR0aCxcclxuICAgICAgICAgIHJlcXVpcmVkOiBjb2x1bW4ucmVxdWlyZWQsXHJcbiAgICAgICAgICBkZXNjcmlwdGlvbjogY29sdW1uLmRlc2NyaXB0aW9uXHJcbiAgICAgICAgfTtcclxuICAgICAgfSksXHJcbiAgICAgIHNoZWV0c1xyXG4gICAgfTtcclxuICAgIHRoaXMuaXNEb3dubG9hZFRlbXBsYXRlID0gdHJ1ZTtcclxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXhwb3J0U2VydmljZS5nZW5lcmF0ZVRlbXBsYXRlKGV4Y2VsVGVtcGxhdGUpLmZpbmFsbHkoKCk9PntcclxuICAgICAgdGhpcy5pc0Rvd25sb2FkVGVtcGxhdGUgPSBmYWxzZTtcclxuICAgIH0pO1xyXG4gICAgaWYgKHJlc3VsdD8uZmlsZVBhdGgpIHtcclxuICAgICAgdGhpcy5leHBvcnRTZXJ2aWNlLmRvd25sb2FkKHJlc3VsdC5maWxlUGF0aCwgZXhjZWxUZW1wbGF0ZS5maWxlTmFtZSB8fCAnVGVtcGxhdGUueGxzeCcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZXhwb3J0ID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgdGhpcy5sb2FkaW5nU2VydmljZS5zdGFydCgpO1xyXG4gICAgYXdhaXQgdGhpcy5leHBvcnRTZXJ2aWNlLmV4cG9ydCh7XHJcbiAgICAgIGNvbHVtbnM6IFt7XHJcbiAgICAgICAgZmllbGQ6ICdzZE1lc3NhZ2UnLFxyXG4gICAgICAgIHRpdGxlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdVcGxvYWQgbWVzc2FnZScpLFxyXG4gICAgICAgIHdpZHRoOiAnMjUwcHgnLFxyXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgICB9LCAuLi4gdGhpcy5vcHRpb24uY29sdW1ucy5maWx0ZXIoY29sdW1uID0+IHRoaXMuc2RDb2x1bW5IaWRkZW4udHJhbnNmb3JtKGNvbHVtbikpXSxcclxuICAgICAgaXRlbXM6IHRoaXMuZmlsdGVyZWRJdGVtcy5tYXAoZSA9PiAoe1xyXG4gICAgICAgIC4uLmUub3JpZ2luLFxyXG4gICAgICAgIHNkTWVzc2FnZTogKGUudmFsaWRhdGlvbj8uZXJyb3IgfHwgZS52YWxpZGF0aW9uPy53YXJuaW5nIHx8IGUudmFsaWRhdGlvbj8uc3VjY2Vzcyk/LnJlcGxhY2UoLzxzdHJvbmc+L2csICcnKVxyXG4gICAgICAgICAgLnJlcGxhY2UoLzxcXC9zdHJvbmc+L2csICcnKVxyXG4gICAgICAgICAgLnJlcGxhY2UoLzxicj4vZywgJ1xcbicpXHJcbiAgICAgIH0pKVxyXG4gICAgfSkuZmluYWxseSh0aGlzLmxvYWRpbmdTZXJ2aWNlLnN0b3ApO1xyXG4gIH1cclxuXHJcbiAgI2ltcG9ydCA9ICgpID0+IHtcclxuICAgIGNvbnN0IHsgdHJhbnNsYXRlIH0gPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2U7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2U8eyBpdGVtczogYW55W10sIGZpbGU6IEZpbGUgfT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBpZiAoJChgIyR7dGhpcy5pbXBvcnRJZH1gKS5sZW5ndGgpIHtcclxuICAgICAgICAkKCdib2R5JykuY2hpbGRyZW4oYCMke3RoaXMuaW1wb3J0SWR9YCkucmVtb3ZlKCk7XHJcbiAgICAgIH1cclxuICAgICAgJCgnYm9keScpLmFwcGVuZChgPGlucHV0IGlkPVwiJHt0aGlzLmltcG9ydElkfVwiIHN0eWxlPVwiZGlzcGxheTogbm9uZVwiIHR5cGU9XCJmaWxlXCIgLz5gKTtcclxuXHJcbiAgICAgICQoYCMke3RoaXMuaW1wb3J0SWR9YCkub24oJ2NoYW5nZScsIChldnQ6IGFueSkgPT4ge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBjb25zdCB0YXJnZXQ6IERhdGFUcmFuc2ZlciA9IGV2dC50YXJnZXQ7XHJcbiAgICAgICAgICBpZiAodGFyZ2V0LmZpbGVzLmxlbmd0aCAhPT0gMSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IodHJhbnNsYXRlKCdDYW5ub3QgdXNlIG11bHRpcGxlIGZpbGVzJykpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29uc3QgZmlsZSA9IHRhcmdldC5maWxlc1swXTtcclxuICAgICAgICAgIGNvbnN0IGxhc3REb3QgPSBmaWxlLm5hbWUubGFzdEluZGV4T2YoJy4nKTtcclxuICAgICAgICAgIGlmIChsYXN0RG90ID09PSAtMSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IodHJhbnNsYXRlKCdJbnZhbGlkIGZpbGUgZXh0ZW5zaW9uJykpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29uc3QgZXh0ZW5zaW9uID0gZmlsZS5uYW1lLnN1YnN0cmluZyhsYXN0RG90ICsgMSk7XHJcbiAgICAgICAgICBpZiAoZXh0ZW5zaW9uLnRvTG93ZXJDYXNlKCkgIT09ICd4bHN4Jykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IodHJhbnNsYXRlKCdQbGVhc2UgdXBsb2FkIC54bHN4IGZpbGUnKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjb25zdCByZWFkZXI6IEZpbGVSZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IChlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYnN0cjogc3RyaW5nID0gZS50YXJnZXQucmVzdWx0O1xyXG4gICAgICAgICAgICBjb25zdCB3YjogWExTWC5Xb3JrQm9vayA9IFhMU1gucmVhZChic3RyLCB7IHR5cGU6ICdiaW5hcnknIH0pO1xyXG4gICAgICAgICAgICBjb25zdCB3c25hbWU6IHN0cmluZyA9IHdiLlNoZWV0TmFtZXNbMF07XHJcbiAgICAgICAgICAgIGNvbnN0IHdzOiBYTFNYLldvcmtTaGVldCA9IHdiLlNoZWV0c1t3c25hbWVdO1xyXG4gICAgICAgICAgICBjb25zdCBsaW5lczogQU9BID0gKFhMU1gudXRpbHMuc2hlZXRfdG9fanNvbih3cywgeyBoZWFkZXI6IDEgfSkpO1xyXG4gICAgICAgICAgICBjb25zdCByZWNvcmRzID0gW107XHJcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSBsaW5lc1swXTtcclxuICAgICAgICAgICAgbGluZXMuc3BsaWNlKDAsIDEpO1xyXG4gICAgICAgICAgICBsaW5lcy5mb3JFYWNoKGxpbmUgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHJlY29yZCA9IHt9O1xyXG4gICAgICAgICAgICAgIGxldCBoYXNWYWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIGhlYWRlcnMuZm9yRWFjaCgoaGVhZGVyLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmVjb3JkW2hlYWRlcl0gPSBsaW5lW2luZGV4XTtcclxuICAgICAgICAgICAgICAgIGlmIChsaW5lW2luZGV4XSAhPT0gdW5kZWZpbmVkICYmIGxpbmVbaW5kZXhdICE9PSBudWxsICYmIGxpbmVbaW5kZXhdLnRvU3RyaW5nKCkpIHtcclxuICAgICAgICAgICAgICAgICAgaGFzVmFsdWUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAocmVjb3JkW2hlYWRlcl0pID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICByZWNvcmRbaGVhZGVyXSA9IHJlY29yZFtoZWFkZXJdLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChyZWNvcmRbaGVhZGVyXSA9PT0gJycgfHwgcmVjb3JkW2hlYWRlcl0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICByZWNvcmRbaGVhZGVyXSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgaWYgKGhhc1ZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZWNvcmRzLnB1c2gocmVjb3JkKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXNvbHZlKHtcclxuICAgICAgICAgICAgICBpdGVtczogcmVjb3JkcyxcclxuICAgICAgICAgICAgICBmaWxlOiB0YXJnZXQuZmlsZXNbMF1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgcmVhZGVyLnJlYWRBc0JpbmFyeVN0cmluZyh0YXJnZXQuZmlsZXNbMF0pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgICQoYCMke3RoaXMuaW1wb3J0SWR9YCkudHJpZ2dlcignY2xpY2snKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgI2lzVmFsaWREYXRlID0gKGZvcm1hdDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSA9PiB7XHJcbiAgICBpZiAodmFsdWU/Lmxlbmd0aCAhPT0gZm9ybWF0Py5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcmVnZXggPSAvXig/Oig/OjMxKFxcL3wtfFxcLikoPzowP1sxMzU3OF18MVswMl0pKVxcMXwoPzooPzoyOXwzMCkoXFwvfC18XFwuKSg/OjA/WzEzLTldfDFbMC0yXSlcXDIpKSg/Oig/OjFbNi05XXxbMi05XVxcZCk/XFxkezJ9KSR8Xig/OjI5KFxcL3wtfFxcLikwPzJcXDMoPzooPzooPzoxWzYtOV18WzItOV1cXGQpPyg/OjBbNDhdfFsyNDY4XVswNDhdfFsxMzU3OV1bMjZdKXwoPzooPzoxNnxbMjQ2OF1bMDQ4XXxbMzU3OV1bMjZdKTAwKSkpKSR8Xig/OjA/WzEtOV18MVxcZHwyWzAtOF0pKFxcL3wtfFxcLikoPzooPzowP1sxLTldKXwoPzoxWzAtMl0pKVxcNCg/Oig/OjFbNi05XXxbMi05XVxcZCk/XFxkezJ9KSQvO1xyXG4gICAgcmV0dXJuIHJlZ2V4LnRlc3QodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgI2lzVmFsaWRUaW1lID0gKGZvcm1hdDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSA9PiB7XHJcbiAgICBpZiAodmFsdWU/Lmxlbmd0aCAhPT0gZm9ybWF0Py5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAjaXNWYWxpZERhdGVUaW1lID0gKGZvcm1hdDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSA9PiB7XHJcbiAgICBpZiAodmFsdWU/Lmxlbmd0aCAhPT0gZm9ybWF0Py5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZGF0ZXMgPSB2YWx1ZT8uc3BsaXQoJyAnKTtcclxuICAgIGlmIChkYXRlcy5sZW5ndGggIT09IDIpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZGF0ZSA9IGRhdGVzWzBdO1xyXG4gICAgaWYgKCF0aGlzLiNpc1ZhbGlkRGF0ZSgnZGQvTU0veXl5eScsIGRhdGUpKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGNvbnN0IHRpbWUgPSBkYXRlc1sxXTtcclxuICAgIGNvbnN0IHJlZ2V4ID0gL14oMFswLTldfDFbMC05XXwyWzAtM10pKFxcOikoMFswLTldfFswLTVdWzAtOV0pJC87XHJcbiAgICByZXR1cm4gcmVnZXgudGVzdCh0aW1lKTtcclxuICB9XHJcbn1cclxuXHJcbmludGVyZmFjZSBFeGNlbEl0ZW0ge1xyXG4gIHZhbGlkYXRpb246IFNkVXBsb2FkRXhjZWxWYWxpZGF0aW9uO1xyXG4gIG9yaWdpbjogYW55O1xyXG4gIGV4Y2VsSW5kZXg6IG51bWJlcjtcclxuICBbY29sdW1uOiBzdHJpbmddOiBhbnk7XHJcbn1cclxuIl19