info-library 2.14.1-beta → 2.14.2-1.beta.2

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 (37) hide show
  1. package/controls/autocomplete/autocomplete.component.d.ts +2 -1
  2. package/controls/input/input.component.d.ts +11 -3
  3. package/controls/multi-select/multi-select.component.d.ts +3 -1
  4. package/controls/select/select.component.d.ts +2 -1
  5. package/directives/unmask.directive.d.ts +2 -1
  6. package/esm2020/controls/autocomplete/autocomplete.component.mjs +7 -4
  7. package/esm2020/controls/grid/grid.component.mjs +400 -413
  8. package/esm2020/controls/input/input.component.mjs +110 -45
  9. package/esm2020/controls/multi-select/multi-select.component.mjs +16 -6
  10. package/esm2020/controls/select/select.component.mjs +9 -3
  11. package/esm2020/directives/mask.directive.mjs +5 -3
  12. package/esm2020/directives/unmask.directive.mjs +9 -5
  13. package/esm2020/layouts/main/main.component.mjs +57 -27
  14. package/esm2020/layouts/pagebar/pagebar.component.mjs +2 -2
  15. package/esm2020/layouts/sidebar/sidebar.component.mjs +6 -6
  16. package/esm2020/layouts/topbar/topbar.component.mjs +343 -244
  17. package/esm2020/model/app-config.model.mjs +3 -1
  18. package/esm2020/model/session.model.mjs +2 -1
  19. package/esm2020/pipe/mask.pipe.mjs +8 -4
  20. package/esm2020/service/authentication.service.mjs +12 -3
  21. package/esm2020/service/data.service.mjs +15 -9
  22. package/esm2020/service/theme.service.mjs +11 -4
  23. package/esm2020/service/translate.service.mjs +3 -2
  24. package/esm2020/utils/utilities.mjs +32 -1
  25. package/fesm2015/info-library.mjs +1052 -766
  26. package/fesm2015/info-library.mjs.map +1 -1
  27. package/fesm2020/info-library.mjs +1033 -768
  28. package/fesm2020/info-library.mjs.map +1 -1
  29. package/layouts/main/main.component.d.ts +4 -0
  30. package/layouts/sidebar/sidebar.component.d.ts +1 -1
  31. package/layouts/topbar/topbar.component.d.ts +3 -1
  32. package/model/app-config.model.d.ts +2 -0
  33. package/model/session.model.d.ts +3 -0
  34. package/package.json +6 -1
  35. package/service/authentication.service.d.ts +1 -0
  36. package/service/data.service.d.ts +1 -0
  37. package/utils/utilities.d.ts +7 -0
@@ -18,6 +18,7 @@ export declare class InfoAutoCompleteComponent implements OnInit, ControlValueAc
18
18
  maxlist: number;
19
19
  startwith: boolean;
20
20
  minchar: number;
21
+ notoken: boolean;
21
22
  onselecteditem: EventEmitter<any>;
22
23
  options: any[];
23
24
  selectedValue: any;
@@ -47,5 +48,5 @@ export declare class InfoAutoCompleteComponent implements OnInit, ControlValueAc
47
48
  registerOnTouched(fn: any): void;
48
49
  setDisabledState?(isDisabled: boolean): void;
49
50
  static ɵfac: i0.ɵɵFactoryDeclaration<InfoAutoCompleteComponent, never>;
50
- static ɵcmp: i0.ɵɵComponentDeclaration<InfoAutoCompleteComponent, "info-autocomplete", never, { "placeholder": "placeholder"; "name": "name"; "required": "required"; "selectfirst": "selectfirst"; "disablednoregisters": "disablednoregisters"; "getdataonchange": "getdataonchange"; "getdataonchangetime": "getdataonchangetime"; "api": "api"; "method": "method"; "maxlist": "maxlist"; "startwith": "startwith"; "minchar": "minchar"; "loading": "loading"; "params": "params"; "disabled": "disabled"; "data": "data"; }, { "onselecteditem": "onselecteditem"; }, never, never, false>;
51
+ static ɵcmp: i0.ɵɵComponentDeclaration<InfoAutoCompleteComponent, "info-autocomplete", never, { "placeholder": "placeholder"; "name": "name"; "required": "required"; "selectfirst": "selectfirst"; "disablednoregisters": "disablednoregisters"; "getdataonchange": "getdataonchange"; "getdataonchangetime": "getdataonchangetime"; "api": "api"; "method": "method"; "maxlist": "maxlist"; "startwith": "startwith"; "minchar": "minchar"; "notoken": "notoken"; "loading": "loading"; "params": "params"; "disabled": "disabled"; "data": "data"; }, { "onselecteditem": "onselecteditem"; }, never, never, false>;
51
52
  }
@@ -1,7 +1,9 @@
1
- import { OnInit, EventEmitter } from "@angular/core";
2
- import { ControlValueAccessor } from "@angular/forms";
1
+ import { OnInit, EventEmitter, Injector } from "@angular/core";
2
+ import { ControlValueAccessor, AbstractControl } from "@angular/forms";
3
3
  import * as i0 from "@angular/core";
4
4
  export declare class InfoInputComponent implements OnInit, ControlValueAccessor {
5
+ private injector;
6
+ private control;
5
7
  placeholder: string;
6
8
  disabled: boolean;
7
9
  readonly: boolean;
@@ -15,6 +17,7 @@ export declare class InfoInputComponent implements OnInit, ControlValueAccessor
15
17
  min: number;
16
18
  max: number;
17
19
  step: number;
20
+ validate: boolean;
18
21
  onblur: EventEmitter<any>;
19
22
  maskOptions: any;
20
23
  value: string;
@@ -22,10 +25,15 @@ export declare class InfoInputComponent implements OnInit, ControlValueAccessor
22
25
  onChange: any;
23
26
  onTouched: any;
24
27
  passwordMode: boolean;
28
+ errorMessage: string;
29
+ formControl: AbstractControl;
30
+ constructor(injector: Injector);
31
+ ngAfterViewInit(): void;
25
32
  ngOnInit(): void;
26
33
  private methodIsmask;
27
34
  get ismask(): string;
28
35
  set ismask(value: string);
36
+ validarCampo(): void;
29
37
  onBlur(): void;
30
38
  onChangeValue(): void;
31
39
  writeValue(modelValue: any): void;
@@ -33,5 +41,5 @@ export declare class InfoInputComponent implements OnInit, ControlValueAccessor
33
41
  registerOnTouched(fn: any): void;
34
42
  setDisabledState?(isDisabled: boolean): void;
35
43
  static ɵfac: i0.ɵɵFactoryDeclaration<InfoInputComponent, never>;
36
- static ɵcmp: i0.ɵɵComponentDeclaration<InfoInputComponent, "info-input", never, { "placeholder": "placeholder"; "disabled": "disabled"; "readonly": "readonly"; "required": "required"; "maxlength": "maxlength"; "type": "type"; "rows": "rows"; "tabindex": "tabindex"; "iconPrefix": "iconPrefix"; "iconSuffix": "iconSuffix"; "min": "min"; "max": "max"; "step": "step"; "ismask": "ismask"; }, { "onblur": "onblur"; }, never, never, false>;
44
+ static ɵcmp: i0.ɵɵComponentDeclaration<InfoInputComponent, "info-input", never, { "placeholder": "placeholder"; "disabled": "disabled"; "readonly": "readonly"; "required": "required"; "maxlength": "maxlength"; "type": "type"; "rows": "rows"; "tabindex": "tabindex"; "iconPrefix": "iconPrefix"; "iconSuffix": "iconSuffix"; "min": "min"; "max": "max"; "step": "step"; "validate": "validate"; "ismask": "ismask"; }, { "onblur": "onblur"; }, never, never, false>;
37
45
  }
@@ -13,6 +13,8 @@ export declare class InfoMultiSelectComponent implements OnInit, ControlValueAcc
13
13
  method: string;
14
14
  loading: boolean;
15
15
  disabled: boolean;
16
+ notranslate: any;
17
+ notoken: boolean;
16
18
  onselecteditem: EventEmitter<any>;
17
19
  selectedValues: any[];
18
20
  onChange: any;
@@ -33,5 +35,5 @@ export declare class InfoMultiSelectComponent implements OnInit, ControlValueAcc
33
35
  registerOnTouched(fn: any): void;
34
36
  setDisabledState?(isDisabled: boolean): void;
35
37
  static ɵfac: i0.ɵɵFactoryDeclaration<InfoMultiSelectComponent, never>;
36
- static ɵcmp: i0.ɵɵComponentDeclaration<InfoMultiSelectComponent, "info-multi-select", never, { "placeholder": "placeholder"; "name": "name"; "required": "required"; "selectfirst": "selectfirst"; "disablednoregisters": "disablednoregisters"; "api": "api"; "method": "method"; "loading": "loading"; "disabled": "disabled"; "params": "params"; "data": "data"; }, { "onselecteditem": "onselecteditem"; }, never, never, false>;
38
+ static ɵcmp: i0.ɵɵComponentDeclaration<InfoMultiSelectComponent, "info-multi-select", never, { "placeholder": "placeholder"; "name": "name"; "required": "required"; "selectfirst": "selectfirst"; "disablednoregisters": "disablednoregisters"; "api": "api"; "method": "method"; "loading": "loading"; "disabled": "disabled"; "notranslate": "notranslate"; "notoken": "notoken"; "params": "params"; "data": "data"; }, { "onselecteditem": "onselecteditem"; }, never, never, false>;
37
39
  }
@@ -16,6 +16,7 @@ export declare class InfoSelectComponent implements OnInit, ControlValueAccessor
16
16
  loading: boolean;
17
17
  disabled: boolean;
18
18
  notranslate: any;
19
+ notoken: boolean;
19
20
  onselecteditem: EventEmitter<any>;
20
21
  selectedValue: any;
21
22
  translatValue: boolean;
@@ -37,5 +38,5 @@ export declare class InfoSelectComponent implements OnInit, ControlValueAccessor
37
38
  registerOnTouched(fn: any): void;
38
39
  setDisabledState?(isDisabled: boolean): void;
39
40
  static ɵfac: i0.ɵɵFactoryDeclaration<InfoSelectComponent, never>;
40
- static ɵcmp: i0.ɵɵComponentDeclaration<InfoSelectComponent, "info-select", never, { "placeholder": "placeholder"; "name": "name"; "required": "required"; "selectfirst": "selectfirst"; "disablednoregisters": "disablednoregisters"; "api": "api"; "method": "method"; "blank": "blank"; "blankItem": "blankItem"; "loading": "loading"; "disabled": "disabled"; "notranslate": "notranslate"; "params": "params"; "data": "data"; }, { "onselecteditem": "onselecteditem"; }, never, never, false>;
41
+ static ɵcmp: i0.ɵɵComponentDeclaration<InfoSelectComponent, "info-select", never, { "placeholder": "placeholder"; "name": "name"; "required": "required"; "selectfirst": "selectfirst"; "disablednoregisters": "disablednoregisters"; "api": "api"; "method": "method"; "blank": "blank"; "blankItem": "blankItem"; "loading": "loading"; "disabled": "disabled"; "notranslate": "notranslate"; "notoken": "notoken"; "params": "params"; "data": "data"; }, { "onselecteditem": "onselecteditem"; }, never, never, false>;
41
42
  }
@@ -4,8 +4,9 @@ import * as i0 from "@angular/core";
4
4
  export declare class InfoUnmaskDirective {
5
5
  private elementRef;
6
6
  private model;
7
+ maskType: string;
7
8
  constructor(elementRef: ElementRef, model: NgControl);
8
9
  inputChange(): void;
9
10
  static ɵfac: i0.ɵɵFactoryDeclaration<InfoUnmaskDirective, never>;
10
- static ɵdir: i0.ɵɵDirectiveDeclaration<InfoUnmaskDirective, "[unmask]", never, {}, {}, never, never, false>;
11
+ static ɵdir: i0.ɵɵDirectiveDeclaration<InfoUnmaskDirective, "[unmask]", never, { "maskType": "unmask"; }, {}, never, never, false>;
11
12
  }
@@ -42,6 +42,7 @@ export class InfoAutoCompleteComponent {
42
42
  this.maxlist = 10;
43
43
  this.startwith = false;
44
44
  this.minchar = 1;
45
+ this.notoken = false;
45
46
  this.onselecteditem = new EventEmitter();
46
47
  this.selectedValue = null;
47
48
  this.initialized = false;
@@ -134,9 +135,9 @@ export class InfoAutoCompleteComponent {
134
135
  parameters += '&';
135
136
  parameters += `nome=${value.Nome == null ? value.toString().toLowerCase() : value.Nome}&take=${this.maxlist}`;
136
137
  let model = parameters.split("&").map(c => ({ [c.split("=")[0].charAt(0).toUpperCase() + c.split("=")[0].substring(1)]: c.split("=")[1] })).reduce((a, b) => ({ ...a, ...b }));
137
- return this._dataAcess.post(this.api, model, this.method);
138
+ return this.notoken ? this._dataAcess.postNoToken(this.api, model, this.method) : this._dataAcess.post(this.api, model, this.method);
138
139
  }
139
- return this._dataAcess.get(this.api, this.method, parameters);
140
+ return this.notoken ? this._dataAcess.getNoToken(this.api, this.method, parameters) : this._dataAcess.get(this.api, this.method, parameters);
140
141
  }
141
142
  onBlur(value) {
142
143
  setTimeout(() => {
@@ -184,7 +185,7 @@ export class InfoAutoCompleteComponent {
184
185
  }
185
186
  }
186
187
  /** @nocollapse */ InfoAutoCompleteComponent.ɵfac = function InfoAutoCompleteComponent_Factory(t) { return new (t || InfoAutoCompleteComponent)(i0.ɵɵdirectiveInject(i1.InfoDataService)); };
187
- /** @nocollapse */ InfoAutoCompleteComponent.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: InfoAutoCompleteComponent, selectors: [["info-autocomplete"]], inputs: { placeholder: "placeholder", name: "name", required: "required", selectfirst: "selectfirst", disablednoregisters: "disablednoregisters", getdataonchange: "getdataonchange", getdataonchangetime: "getdataonchangetime", api: "api", method: "method", maxlist: "maxlist", startwith: "startwith", minchar: "minchar", loading: "loading", params: "params", disabled: "disabled", data: "data" }, outputs: { onselecteditem: "onselecteditem" }, features: [i0.ɵɵProvidersFeature([{
188
+ /** @nocollapse */ InfoAutoCompleteComponent.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: InfoAutoCompleteComponent, selectors: [["info-autocomplete"]], inputs: { placeholder: "placeholder", name: "name", required: "required", selectfirst: "selectfirst", disablednoregisters: "disablednoregisters", getdataonchange: "getdataonchange", getdataonchangetime: "getdataonchangetime", api: "api", method: "method", maxlist: "maxlist", startwith: "startwith", minchar: "minchar", notoken: "notoken", loading: "loading", params: "params", disabled: "disabled", data: "data" }, outputs: { onselecteditem: "onselecteditem" }, features: [i0.ɵɵProvidersFeature([{
188
189
  provide: NG_VALUE_ACCESSOR,
189
190
  useExisting: forwardRef((() => InfoAutoCompleteComponent)),
190
191
  multi: true
@@ -244,6 +245,8 @@ export class InfoAutoCompleteComponent {
244
245
  type: Input
245
246
  }], minchar: [{
246
247
  type: Input
248
+ }], notoken: [{
249
+ type: Input
247
250
  }], onselecteditem: [{
248
251
  type: Output
249
252
  }], loading: [{
@@ -255,4 +258,4 @@ export class InfoAutoCompleteComponent {
255
258
  }], data: [{
256
259
  type: Input
257
260
  }] }); })();
258
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2luZm8tbGlicmFyeS9zcmMvY29udHJvbHMvYXV0b2NvbXBsZXRlL2F1dG9jb21wbGV0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbmZvLWxpYnJhcnkvc3JjL2NvbnRyb2xzL2F1dG9jb21wbGV0ZS9hdXRvY29tcGxldGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsVUFBVSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0YsT0FBTyxFQUFFLGtCQUFrQixFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdGLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7Ozs7O0lDQzFCLHFDQUFtSTtJQUF2RSxzUUFBcUIsZUFBQSwrQkFBcUIsQ0FBQSxJQUFDO0lBQ3ZHLGlCQUFhOzs7SUFEOEIsaUNBQWdCLGdEQUFBOzs7SUFRL0Qsc0NBQTBGOztBREk5RixNQUFNLE9BQU8seUJBQXlCO0lBa0dsQyxZQUFvQixVQUEyQjtRQUEzQixlQUFVLEdBQVYsVUFBVSxDQUFpQjtRQWpHL0MsWUFBTyxHQUFHLElBQUksa0JBQWtCLEVBQUUsQ0FBQztRQUUxQixnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUNqQixTQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ1YsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUNwQix3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SUFBSSxFQUFFO2dCQUN0QyxVQUFVLElBQUksR0FBRyxDQUFDO1lBRXRCLFVBQVUsSUFBSSxRQUFRLEtBQUssQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLFNBQVMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBRTlHLElBQUksS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQztZQUM1SyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUM3RDtRQUVELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBSztRQUNSLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLElBQUksQ0FB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RyxlQUFlO2tCQUF2QixLQUFLO1lBQ0csbUJBQW1CO2tCQUEzQixLQUFLO1lBQ0csR0FBRztrQkFBWCxLQUFLO1lBQ0csTUFBTTtrQkFBZCxLQUFLO1lBQ0csT0FBTztrQkFBZixLQUFLO1lBQ0csU0FBUztrQkFBakIsS0FBSztZQUNHLE9BQU87a0JBQWYsS0FBSztZQUVJLGNBQWM7a0JBQXZCLE1BQU07WUFZSCxPQUFPO2tCQURWLEtBQUs7WUFvQkYsTUFBTTtrQkFEVCxLQUFLO1lBY0YsUUFBUTtrQkFEWCxLQUFLO1lBYUYsSUFBSTtrQkFEUCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBmb3J3YXJkUmVmLCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFVudHlwZWRGb3JtQ29udHJvbCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgc3dpdGNoTWFwLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgSW5mb0RhdGFTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2UvZGF0YS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBJbmZvRGF0YUFjY2Vzc01vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2luZm8tYXV0b2NvbXBsZXRlJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2F1dG9jb21wbGV0ZS5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgcHJvdmlkZXJzOiBbe1xyXG4gICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEluZm9BdXRvQ29tcGxldGVDb21wb25lbnQpLFxyXG4gICAgICAgIG11bHRpOiB0cnVlXHJcbiAgICB9XVxyXG59KVxyXG5leHBvcnQgY2xhc3MgSW5mb0F1dG9Db21wbGV0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xyXG4gICAgY29udHJvbCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKTtcclxuICAgIFxyXG4gICAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnJztcclxuICAgIEBJbnB1dCgpIG5hbWUgPSAnJztcclxuICAgIEBJbnB1dCgpIHJlcXVpcmVkID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSBzZWxlY3RmaXJzdCA9IGZhbHNlO1xyXG4gICAgQElucHV0KCkgZGlzYWJsZWRub3JlZ2lzdGVycyA9IGZhbHNlO1xyXG4gICAgQElucHV0KCkgZ2V0ZGF0YW9uY2hhbmdlID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSBnZXRkYXRhb25jaGFuZ2V0aW1lID0gNTAwO1xyXG4gICAgQElucHV0KCkgYXBpOiBhbnkgPSBudWxsO1xyXG4gICAgQElucHV0KCkgbWV0aG9kID0gJ2dldGNoYXZldmFsb3InO1xyXG4gICAgQElucHV0KCkgbWF4bGlzdCA9IDEwO1xyXG4gICAgQElucHV0KCkgc3RhcnR3aXRoID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSBtaW5jaGFyID0gMTtcclxuXHJcbiAgICBAT3V0cHV0KCkgb25zZWxlY3RlZGl0ZW0gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gICAgb3B0aW9uczogYW55W107XHJcbiAgICBzZWxlY3RlZFZhbHVlOiBhbnkgPSBudWxsO1xyXG5cclxuICAgIG9uQ2hhbmdlOiBhbnk7XHJcbiAgICBvblRvdWNoZWQ6IGFueTtcclxuICAgIFxyXG4gICAgaW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuXHJcbiAgICBfbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCBsb2FkaW5nKCl7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0IGxvYWRpbmcodmFsdWUpe1xyXG4gICAgICAgIHRoaXMuX2xvYWRpbmcgPSB2YWx1ZTtcclxuICAgICAgICBcclxuICAgICAgICBpZiAodGhpcy5fZGlzYWJsZWQgPT0gbnVsbClcclxuICAgICAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5fZGlzYWJsZWQudG9TdHJpbmcoKSA9PSAnJylcclxuICAgICAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fZGlzYWJsZWQgPT0gZmFsc2UpXHJcbiAgICAgICAgICAgIHRoaXMuc2V0RGlzYWJsZWRTdGF0ZSh0aGlzLmxvYWRpbmcpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBfcGFyYW1zOiBzdHJpbmcgPSBudWxsO1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCBwYXJhbXMoKXtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcGFyYW1zO1xyXG4gICAgfVxyXG5cclxuICAgIHNldCBwYXJhbXModmFsdWUpe1xyXG4gICAgICAgIHRoaXMuX3BhcmFtcyA9IHZhbHVlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5pbml0aWFsaXplZClcclxuICAgICAgICAgICAgdGhpcy5nZXREYXRhKCkuc3Vic2NyaWJlKGEgPT4geyB0aGlzLmRhdGEgPSBhLmRhdGE7IHRoaXMubG9hZGluZyA9IGZhbHNlOyB9KTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgX2Rpc2FibGVkOiBib29sZWFuID0gbnVsbDtcclxuICAgIEBJbnB1dCgpXHJcbiAgICBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHsgICAgICAgICBcclxuICAgICAgICBpZiAodGhpcy5fZGlzYWJsZWQgPT0gbnVsbClcclxuICAgICAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgaWYgKHZhbHVlKVxyXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2wuZGlzYWJsZSgpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sLmVuYWJsZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIF9kYXRhOiBhbnkgPSBbXTtcclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgZGF0YSgpe1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIHNldCBkYXRhKHZhbHVlKXtcclxuICAgICAgICB0aGlzLl9kYXRhID0gdmFsdWU7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmdldGRhdGFvbmNoYW5nZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRWYWx1ZSAhPSBudWxsKVxyXG4gICAgICAgICAgICAgICAgaWYgKCh0aGlzLl9kYXRhID09IG51bGwgfHwgKHRoaXMuX2RhdGEgIT0gbnVsbCAmJiB0aGlzLl9kYXRhLmxlbmd0aCA9PSAwKSkgJiYgIXRoaXMubG9hZGluZykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMud3JpdGVWYWx1ZShudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53cml0ZVZhbHVlKHRoaXMuc2VsZWN0ZWRWYWx1ZS5JZCA9PSBudWxsID8gdGhpcy5zZWxlY3RlZFZhbHVlIDogdGhpcy5zZWxlY3RlZFZhbHVlLklkKTtcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5zZWxlY3RmaXJzdCAmJiB0aGlzLmRhdGEgIT0gbnVsbCAmJiB0aGlzLmRhdGEubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgICAgIHRoaXMud3JpdGVWYWx1ZSh0aGlzLmRhdGFbMF0uSWQpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWRub3JlZ2lzdGVycylcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGlzYWJsZWRTdGF0ZSgodGhpcy5kYXRhID09IG51bGwgfHwgdGhpcy5kYXRhLmxlbmd0aCA9PSAwKSk7XHJcbiAgICAgICAgfSwgMTAwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfZGF0YUFjZXNzOiBJbmZvRGF0YVNlcnZpY2UpIHsgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIGlmICh0aGlzLm1pbmNoYXIgPT0gbnVsbCB8fCB0aGlzLm1pbmNoYXIgPCAwKSB0aGlzLm1pbmNoYXIgPSAxO1xyXG4gICAgICAgIHRoaXMubmFtZSA9IHRoaXMucGxhY2Vob2xkZXIucmVwbGFjZSgvIC9nLCAnJykgKyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwKS50b1N0cmluZygpO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuZ2V0ZGF0YW9uY2hhbmdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0RGF0YSgpLnN1YnNjcmliZShhID0+IHsgdGhpcy5kYXRhID0gYS5kYXRhOyB0aGlzLmxvYWRpbmcgPSBmYWxzZTsgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHZhbHVlID0+IHsgdGhpcy5vcHRpb25zID0gdGhpcy5maWx0ZXIodmFsdWUpfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKFxyXG4gICAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKHRoaXMuZ2V0ZGF0YW9uY2hhbmdldGltZSksIFxyXG4gICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCh2YWx1ZSA9PiB0aGlzLmdldERhdGEodmFsdWUpKVxyXG4gICAgICAgICAgICApLnN1YnNjcmliZShhID0+IHRoaXMuZGF0YSA9IHRoaXMub3B0aW9ucyA9IGEuZGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZpbHRlcih2YWx1ZTogYW55KTogYW55W10ge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlLmxlbmd0aCA8IHRoaXMubWluY2hhcikgcmV0dXJuIFtdO1xyXG4gICAgICAgIGxldCBmaWx0ZXJWYWx1ZSA9IHZhbHVlLk5vbWUgPT0gbnVsbCA/IHZhbHVlLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA6IHZhbHVlLk5vbWU7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnN0YXJ0d2l0aClcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5maWx0ZXIob3B0aW9uID0+IG9wdGlvbi5Ob21lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihmaWx0ZXJWYWx1ZSkgPT09IDAgfHwgKG9wdGlvbi5BdXggPT0gbnVsbCA/IFwiXCIgOiBvcHRpb24uQXV4LnRvTG93ZXJDYXNlKCkgPT0gZmlsdGVyVmFsdWUpKS5zbGljZSgwLCB0aGlzLm1heGxpc3QpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5maWx0ZXIob3B0aW9uID0+IG9wdGlvbi5Ob21lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihmaWx0ZXJWYWx1ZSkgPiAtMSB8fCAob3B0aW9uLkF1eCA9PSBudWxsID8gXCJcIiA6IG9wdGlvbi5BdXgudG9Mb3dlckNhc2UoKS5pbmRleE9mKGZpbHRlclZhbHVlKSA+IC0xKSkuc2xpY2UoMCwgdGhpcy5tYXhsaXN0KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXREYXRhKHZhbHVlOiBhbnkgPSBudWxsKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuYXBpID09IG51bGwgfHwgdGhpcy5hcGkgPT0gJycpXHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxJbmZvRGF0YUFjY2Vzc01vZGVsPigpO1xyXG5cclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSAhdGhpcy5nZXRkYXRhb25jaGFuZ2U7XHJcbiAgICAgICAgdGhpcy5kYXRhID0gW107XHJcbiAgICAgICAgbGV0IHBhcmFtZXRlcnMgPSB0aGlzLnBhcmFtcyB8fCAnJztcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZ2V0ZGF0YW9uY2hhbmdlKSB7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09ICcnKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPEluZm9EYXRhQWNjZXNzTW9kZWw+KCk7XHJcblxyXG4gICAgICAgICAgICBpZiAocGFyYW1ldGVycyAhPSBudWxsICYmIHBhcmFtZXRlcnMgIT0gJycpXHJcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzICs9ICcmJztcclxuXHJcbiAgICAgICAgICAgIHBhcmFtZXRlcnMgKz0gYG5vbWU9JHt2YWx1ZS5Ob21lID09IG51bGwgPyB2YWx1ZS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgOiB2YWx1ZS5Ob21lfSZ0YWtlPSR7dGhpcy5tYXhsaXN0fWA7XHJcblxyXG4gICAgICAgICAgICBsZXQgbW9kZWwgPSBwYXJhbWV0ZXJzLnNwbGl0KFwiJlwiKS5tYXAoYyA9PiAoeyBbYy5zcGxpdChcIj1cIilbMF0uY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBjLnNwbGl0KFwiPVwiKVswXS5zdWJzdHJpbmcoMSldOiBjLnNwbGl0KFwiPVwiKVsxXSB9KSkucmVkdWNlKChhLGIpID0+ICh7Li4uYSwgLi4uYn0pKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFBY2Vzcy5wb3N0KHRoaXMuYXBpLCBtb2RlbCwgdGhpcy5tZXRob2QpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFBY2Vzcy5nZXQodGhpcy5hcGksIHRoaXMubWV0aG9kLCBwYXJhbWV0ZXJzKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkJsdXIodmFsdWUpIHtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRWYWx1ZSAhPSBudWxsICYmIHRoaXMuc2VsZWN0ZWRWYWx1ZS5JZCAhPSBudWxsKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgaWYgKCF2YWx1ZSAmJiB0aGlzLnNlbGVjdGVkVmFsdWUgIT0gbnVsbCAmJiB0aGlzLnNlbGVjdGVkVmFsdWUudHJpbSgpID09ICcnKVxyXG4gICAgICAgICAgICAgICAgdGhpcy53cml0ZVZhbHVlKG51bGwpO1xyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGxldCBmaXJzdCA9IHRoaXMuZmlsdGVyKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgIGlmIChmaXJzdCAhPSBudWxsICYmIGZpcnN0Lmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53cml0ZVZhbHVlKGZpcnN0WzBdLklkKTtcclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLndyaXRlVmFsdWUobnVsbCk7XHJcbiAgICAgICAgICAgIH0gXHJcbiAgICAgICAgfSwgMzAwKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkZvY3VzKHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubWluY2hhciAhPSBudWxsICYmIHRoaXMubWluY2hhciA9PSAwICYmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09ICcnKSlcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IHRoaXMuY29udHJvbC5zZXRWYWx1ZSgnJyk7IH0sIDIwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgZGlzcGxheUZuKG1vZGVsKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAobW9kZWwgPT0gbnVsbCB8fCBtb2RlbC5Ob21lID09IG51bGwpXHJcbiAgICAgICAgICAgIHJldHVybiAnJztcclxuXHJcbiAgICAgICAgbGV0IGluZGV4U21hbGwgPSBtb2RlbC5Ob21lLmluZGV4T2YoJzxzbWFsbCcpO1xyXG4gICAgICAgIHJldHVybiBpbmRleFNtYWxsID4gLTEgPyBtb2RlbC5Ob21lLnN1YnN0cmluZygwLCBpbmRleFNtYWxsKS50cmltKCkgOiBtb2RlbC5Ob21lO1xyXG4gICAgfVxyXG5cclxuICAgIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIGxldCBvYmogPSB0aGlzLmRhdGEuZmluZChyID0+IHIuSWQgPT0gdmFsdWUpO1xyXG4gICAgICAgIHRoaXMuY29udHJvbC5zZXRWYWx1ZShvYmopO1xyXG5cclxuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiBvYmogPT0gbnVsbClcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gdmFsdWU7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLm9uQ2hhbmdlICE9IG51bGwpXHJcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2UodmFsdWUpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5vbnNlbGVjdGVkaXRlbSAhPSBudWxsKVxyXG4gICAgICAgICAgICB0aGlzLm9uc2VsZWN0ZWRpdGVtLmVtaXQodGhpcy5kYXRhID09IG51bGwgPyBudWxsIDogdGhpcy5kYXRhLmZpbmQociA9PiByLklkID09IHZhbHVlKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xyXG4gICAgfVxyXG5cclxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xyXG4gICAgfVxyXG5cclxuICAgIHNldERpc2FibGVkU3RhdGU/KGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmRpc2FibGVkID0gdGhpcy5kaXNhYmxlZG5vcmVnaXN0ZXJzICYmICh0aGlzLmRhdGEgPT0gbnVsbCB8fCB0aGlzLmRhdGEubGVuZ3RoID09IDApID8gdHJ1ZSA6IGlzRGlzYWJsZWQ7XHJcbiAgICB9XHJcbn0iLCI8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT1cInRleHRcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkVmFsdWVcIiBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXIgfCB0cmFuc2xhdGVcIiBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiIFttYXRBdXRvY29tcGxldGVdPVwiYXV0b1wiIFxyXG4gICAgICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiIChibHVyKT1cIm9uQmx1cigkZXZlbnQudGFyZ2V0LnZhbHVlKVwiIChmb2N1cyk9XCJvbkZvY3VzKCRldmVudC50YXJnZXQudmFsdWUpXCIgI2lucHV0QXV0bz5cclxuXHJcbiAgICA8bWF0LWF1dG9jb21wbGV0ZSAjYXV0bz1cIm1hdEF1dG9jb21wbGV0ZVwiIFtkaXNwbGF5V2l0aF09XCJkaXNwbGF5Rm5cIj5cclxuICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIG9wdGlvbnNcIiBbdmFsdWVdPVwib3B0aW9uXCIgKG9uU2VsZWN0aW9uQ2hhbmdlKT1cIndyaXRlVmFsdWUob3B0aW9uLklkKVwiIFtpbm5lckhUTUxdPVwib3B0aW9uLk5vbWVcIiA+XHJcbiAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgPC9tYXQtYXV0b2NvbXBsZXRlPlxyXG4gICAgXHJcbiAgICA8bWF0LWljb24gbWF0U3VmZml4IHN0eWxlPVwiY29sb3I6ICNhYWFcIj5zcGVsbGNoZWNrPC9tYXQtaWNvbj5cclxuPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbjxzZWN0aW9uIGNsYXNzPVwic2VsZWN0LWxvYWRpbmdcIj5cclxuICAgIDxtYXQtcHJvZ3Jlc3MtYmFyIGNvbG9yPVwicHJpbWFyeVwiIG1vZGU9XCJpbmRldGVybWluYXRlXCIgKm5nSWY9XCJsb2FkaW5nXCI+PC9tYXQtcHJvZ3Jlc3MtYmFyPlxyXG48L3NlY3Rpb24+Il19
261
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2luZm8tbGlicmFyeS9zcmMvY29udHJvbHMvYXV0b2NvbXBsZXRlL2F1dG9jb21wbGV0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbmZvLWxpYnJhcnkvc3JjL2NvbnRyb2xzL2F1dG9jb21wbGV0ZS9hdXRvY29tcGxldGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsVUFBVSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0YsT0FBTyxFQUFFLGtCQUFrQixFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdGLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7Ozs7O0lDQzFCLHFDQUFtSTtJQUF2RSxzUUFBcUIsZUFBQSwrQkFBcUIsQ0FBQSxJQUFDO0lBQ3ZHLGlCQUFhOzs7SUFEOEIsaUNBQWdCLGdEQUFBOzs7SUFRL0Qsc0NBQTBGOztBREk5RixNQUFNLE9BQU8seUJBQXlCO0lBbUdsQyxZQUFvQixVQUEyQjtRQUEzQixlQUFVLEdBQVYsVUFBVSxDQUFpQjtRQWxHL0MsWUFBTyxHQUFHLElBQUksa0JBQWtCLEVBQUUsQ0FBQztRQUUxQixnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUNqQixTQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ1YsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUNwQix3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LFVBQVUsSUFBSSxJQUFJLElBQUksVUFBVSxJQUFJLEVBQUU7Z0JBQ3RDLFVBQVUsSUFBSSxHQUFHLENBQUM7WUFFdEIsVUFBVSxJQUFJLFFBQVEsS0FBSyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksU0FBUyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFFOUcsSUFBSSxLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVLLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDeEk7UUFFRCxPQUFPLElBQUksQ0FB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a0NBQWE7O3VGREk1RCx5QkFBeUI7Y0FWckMsU0FBUzsyQkFDSSxtQkFBbUIsYUFHbEIsQ0FBQzt3QkFDUixPQUFPLEVBQUUsaUJBQWlCO3dCQUMxQixXQUFXLEVBQUUsVUFBVSxFQUFDLEdBQUcsRUFBRSwwQkFBMEIsRUFBQzt3QkFDeEQsS0FBSyxFQUFFLElBQUk7cUJBQ2QsQ0FBQztrRUFLTyxXQUFXO2tCQUFuQixLQUFLO1lBQ0csSUFBSTtrQkFBWixLQUFLO1lBQ0csUUFBUTtrQkFBaEIsS0FBSztZQUNHLFdBQVc7a0JBQW5CLEtBQUs7WUFDRyxtQkFBbUI7a0JBQTNCLEtBQUs7WUFDRyxlQUFlO2tCQUF2QixLQUFLO1lBQ0csbUJBQW1CO2tCQUEzQixLQUFLO1lBQ0csR0FBRztrQkFBWCxLQUFLO1lBQ0csTUFBTTtrQkFBZCxLQUFLO1lBQ0csT0FBTztrQkFBZixLQUFLO1lBQ0csU0FBUztrQkFBakIsS0FBSztZQUNHLE9BQU87a0JBQWYsS0FBSztZQUNHLE9BQU87a0JBQWYsS0FBSztZQUVJLGNBQWM7a0JBQXZCLE1BQU07WUFZSCxPQUFPO2tCQURWLEtBQUs7WUFvQkYsTUFBTTtrQkFEVCxLQUFLO1lBY0YsUUFBUTtrQkFEWCxLQUFLO1lBYUYsSUFBSTtrQkFEUCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBmb3J3YXJkUmVmLCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFVudHlwZWRGb3JtQ29udHJvbCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgc3dpdGNoTWFwLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgSW5mb0RhdGFTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2UvZGF0YS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBJbmZvRGF0YUFjY2Vzc01vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2luZm8tYXV0b2NvbXBsZXRlJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2F1dG9jb21wbGV0ZS5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgcHJvdmlkZXJzOiBbe1xyXG4gICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEluZm9BdXRvQ29tcGxldGVDb21wb25lbnQpLFxyXG4gICAgICAgIG11bHRpOiB0cnVlXHJcbiAgICB9XVxyXG59KVxyXG5leHBvcnQgY2xhc3MgSW5mb0F1dG9Db21wbGV0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xyXG4gICAgY29udHJvbCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKTtcclxuICAgIFxyXG4gICAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnJztcclxuICAgIEBJbnB1dCgpIG5hbWUgPSAnJztcclxuICAgIEBJbnB1dCgpIHJlcXVpcmVkID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSBzZWxlY3RmaXJzdCA9IGZhbHNlO1xyXG4gICAgQElucHV0KCkgZGlzYWJsZWRub3JlZ2lzdGVycyA9IGZhbHNlO1xyXG4gICAgQElucHV0KCkgZ2V0ZGF0YW9uY2hhbmdlID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSBnZXRkYXRhb25jaGFuZ2V0aW1lID0gNTAwO1xyXG4gICAgQElucHV0KCkgYXBpOiBhbnkgPSBudWxsO1xyXG4gICAgQElucHV0KCkgbWV0aG9kID0gJ2dldGNoYXZldmFsb3InO1xyXG4gICAgQElucHV0KCkgbWF4bGlzdCA9IDEwO1xyXG4gICAgQElucHV0KCkgc3RhcnR3aXRoID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSBtaW5jaGFyID0gMTtcclxuICAgIEBJbnB1dCgpIG5vdG9rZW46IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBAT3V0cHV0KCkgb25zZWxlY3RlZGl0ZW0gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gICAgb3B0aW9uczogYW55W107XHJcbiAgICBzZWxlY3RlZFZhbHVlOiBhbnkgPSBudWxsO1xyXG5cclxuICAgIG9uQ2hhbmdlOiBhbnk7XHJcbiAgICBvblRvdWNoZWQ6IGFueTtcclxuICAgIFxyXG4gICAgaW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuXHJcbiAgICBfbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCBsb2FkaW5nKCl7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0IGxvYWRpbmcodmFsdWUpe1xyXG4gICAgICAgIHRoaXMuX2xvYWRpbmcgPSB2YWx1ZTtcclxuICAgICAgICBcclxuICAgICAgICBpZiAodGhpcy5fZGlzYWJsZWQgPT0gbnVsbClcclxuICAgICAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5fZGlzYWJsZWQudG9TdHJpbmcoKSA9PSAnJylcclxuICAgICAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fZGlzYWJsZWQgPT0gZmFsc2UpXHJcbiAgICAgICAgICAgIHRoaXMuc2V0RGlzYWJsZWRTdGF0ZSh0aGlzLmxvYWRpbmcpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBfcGFyYW1zOiBzdHJpbmcgPSBudWxsO1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCBwYXJhbXMoKXtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcGFyYW1zO1xyXG4gICAgfVxyXG5cclxuICAgIHNldCBwYXJhbXModmFsdWUpe1xyXG4gICAgICAgIHRoaXMuX3BhcmFtcyA9IHZhbHVlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5pbml0aWFsaXplZClcclxuICAgICAgICAgICAgdGhpcy5nZXREYXRhKCkuc3Vic2NyaWJlKGEgPT4geyB0aGlzLmRhdGEgPSBhLmRhdGE7IHRoaXMubG9hZGluZyA9IGZhbHNlOyB9KTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgX2Rpc2FibGVkOiBib29sZWFuID0gbnVsbDtcclxuICAgIEBJbnB1dCgpXHJcbiAgICBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHsgICAgICAgICBcclxuICAgICAgICBpZiAodGhpcy5fZGlzYWJsZWQgPT0gbnVsbClcclxuICAgICAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgaWYgKHZhbHVlKVxyXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2wuZGlzYWJsZSgpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sLmVuYWJsZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIF9kYXRhOiBhbnkgPSBbXTtcclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgZGF0YSgpe1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIHNldCBkYXRhKHZhbHVlKXtcclxuICAgICAgICB0aGlzLl9kYXRhID0gdmFsdWU7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmdldGRhdGFvbmNoYW5nZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRWYWx1ZSAhPSBudWxsKVxyXG4gICAgICAgICAgICAgICAgaWYgKCh0aGlzLl9kYXRhID09IG51bGwgfHwgKHRoaXMuX2RhdGEgIT0gbnVsbCAmJiB0aGlzLl9kYXRhLmxlbmd0aCA9PSAwKSkgJiYgIXRoaXMubG9hZGluZykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMud3JpdGVWYWx1ZShudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53cml0ZVZhbHVlKHRoaXMuc2VsZWN0ZWRWYWx1ZS5JZCA9PSBudWxsID8gdGhpcy5zZWxlY3RlZFZhbHVlIDogdGhpcy5zZWxlY3RlZFZhbHVlLklkKTtcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5zZWxlY3RmaXJzdCAmJiB0aGlzLmRhdGEgIT0gbnVsbCAmJiB0aGlzLmRhdGEubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgICAgIHRoaXMud3JpdGVWYWx1ZSh0aGlzLmRhdGFbMF0uSWQpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWRub3JlZ2lzdGVycylcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGlzYWJsZWRTdGF0ZSgodGhpcy5kYXRhID09IG51bGwgfHwgdGhpcy5kYXRhLmxlbmd0aCA9PSAwKSk7XHJcbiAgICAgICAgfSwgMTAwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfZGF0YUFjZXNzOiBJbmZvRGF0YVNlcnZpY2UpIHsgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIGlmICh0aGlzLm1pbmNoYXIgPT0gbnVsbCB8fCB0aGlzLm1pbmNoYXIgPCAwKSB0aGlzLm1pbmNoYXIgPSAxO1xyXG4gICAgICAgIHRoaXMubmFtZSA9IHRoaXMucGxhY2Vob2xkZXIucmVwbGFjZSgvIC9nLCAnJykgKyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwKS50b1N0cmluZygpO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuZ2V0ZGF0YW9uY2hhbmdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0RGF0YSgpLnN1YnNjcmliZShhID0+IHsgdGhpcy5kYXRhID0gYS5kYXRhOyB0aGlzLmxvYWRpbmcgPSBmYWxzZTsgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHZhbHVlID0+IHsgdGhpcy5vcHRpb25zID0gdGhpcy5maWx0ZXIodmFsdWUpfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKFxyXG4gICAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKHRoaXMuZ2V0ZGF0YW9uY2hhbmdldGltZSksIFxyXG4gICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCh2YWx1ZSA9PiB0aGlzLmdldERhdGEodmFsdWUpKVxyXG4gICAgICAgICAgICApLnN1YnNjcmliZShhID0+IHRoaXMuZGF0YSA9IHRoaXMub3B0aW9ucyA9IGEuZGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZpbHRlcih2YWx1ZTogYW55KTogYW55W10ge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlLmxlbmd0aCA8IHRoaXMubWluY2hhcikgcmV0dXJuIFtdO1xyXG4gICAgICAgIGxldCBmaWx0ZXJWYWx1ZSA9IHZhbHVlLk5vbWUgPT0gbnVsbCA/IHZhbHVlLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA6IHZhbHVlLk5vbWU7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnN0YXJ0d2l0aClcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5maWx0ZXIob3B0aW9uID0+IG9wdGlvbi5Ob21lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihmaWx0ZXJWYWx1ZSkgPT09IDAgfHwgKG9wdGlvbi5BdXggPT0gbnVsbCA/IFwiXCIgOiBvcHRpb24uQXV4LnRvTG93ZXJDYXNlKCkgPT0gZmlsdGVyVmFsdWUpKS5zbGljZSgwLCB0aGlzLm1heGxpc3QpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5maWx0ZXIob3B0aW9uID0+IG9wdGlvbi5Ob21lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihmaWx0ZXJWYWx1ZSkgPiAtMSB8fCAob3B0aW9uLkF1eCA9PSBudWxsID8gXCJcIiA6IG9wdGlvbi5BdXgudG9Mb3dlckNhc2UoKS5pbmRleE9mKGZpbHRlclZhbHVlKSA+IC0xKSkuc2xpY2UoMCwgdGhpcy5tYXhsaXN0KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXREYXRhKHZhbHVlOiBhbnkgPSBudWxsKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuYXBpID09IG51bGwgfHwgdGhpcy5hcGkgPT0gJycpXHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxJbmZvRGF0YUFjY2Vzc01vZGVsPigpO1xyXG5cclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSAhdGhpcy5nZXRkYXRhb25jaGFuZ2U7XHJcbiAgICAgICAgdGhpcy5kYXRhID0gW107XHJcbiAgICAgICAgbGV0IHBhcmFtZXRlcnMgPSB0aGlzLnBhcmFtcyB8fCAnJztcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZ2V0ZGF0YW9uY2hhbmdlKSB7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09ICcnKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPEluZm9EYXRhQWNjZXNzTW9kZWw+KCk7XHJcblxyXG4gICAgICAgICAgICBpZiAocGFyYW1ldGVycyAhPSBudWxsICYmIHBhcmFtZXRlcnMgIT0gJycpXHJcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzICs9ICcmJztcclxuXHJcbiAgICAgICAgICAgIHBhcmFtZXRlcnMgKz0gYG5vbWU9JHt2YWx1ZS5Ob21lID09IG51bGwgPyB2YWx1ZS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgOiB2YWx1ZS5Ob21lfSZ0YWtlPSR7dGhpcy5tYXhsaXN0fWA7XHJcblxyXG4gICAgICAgICAgICBsZXQgbW9kZWwgPSBwYXJhbWV0ZXJzLnNwbGl0KFwiJlwiKS5tYXAoYyA9PiAoeyBbYy5zcGxpdChcIj1cIilbMF0uY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBjLnNwbGl0KFwiPVwiKVswXS5zdWJzdHJpbmcoMSldOiBjLnNwbGl0KFwiPVwiKVsxXSB9KSkucmVkdWNlKChhLGIpID0+ICh7Li4uYSwgLi4uYn0pKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubm90b2tlbiA/IHRoaXMuX2RhdGFBY2Vzcy5wb3N0Tm9Ub2tlbih0aGlzLmFwaSwgbW9kZWwsIHRoaXMubWV0aG9kKSA6IHRoaXMuX2RhdGFBY2Vzcy5wb3N0KHRoaXMuYXBpLCBtb2RlbCwgdGhpcy5tZXRob2QpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubm90b2tlbiA/IHRoaXMuX2RhdGFBY2Vzcy5nZXROb1Rva2VuKHRoaXMuYXBpLCB0aGlzLm1ldGhvZCwgcGFyYW1ldGVycykgOiB0aGlzLl9kYXRhQWNlc3MuZ2V0KHRoaXMuYXBpLCB0aGlzLm1ldGhvZCwgcGFyYW1ldGVycyk7XHJcbiAgICB9XHJcblxyXG4gICAgb25CbHVyKHZhbHVlKSB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVmFsdWUgIT0gbnVsbCAmJiB0aGlzLnNlbGVjdGVkVmFsdWUuSWQgIT0gbnVsbClcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGlmICghdmFsdWUgJiYgdGhpcy5zZWxlY3RlZFZhbHVlICE9IG51bGwgJiYgdGhpcy5zZWxlY3RlZFZhbHVlLnRyaW0oKSA9PSAnJylcclxuICAgICAgICAgICAgICAgIHRoaXMud3JpdGVWYWx1ZShudWxsKTtcclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZmlyc3QgPSB0aGlzLmZpbHRlcih2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZmlyc3QgIT0gbnVsbCAmJiBmaXJzdC5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMud3JpdGVWYWx1ZShmaXJzdFswXS5JZCk7XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53cml0ZVZhbHVlKG51bGwpO1xyXG4gICAgICAgICAgICB9IFxyXG4gICAgICAgIH0sIDMwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25Gb2N1cyh2YWx1ZSkge1xyXG4gICAgICAgIGlmICh0aGlzLm1pbmNoYXIgIT0gbnVsbCAmJiB0aGlzLm1pbmNoYXIgPT0gMCAmJiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PSAnJykpXHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyB0aGlzLmNvbnRyb2wuc2V0VmFsdWUoJycpOyB9LCAyMDApO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc3BsYXlGbihtb2RlbCk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKG1vZGVsID09IG51bGwgfHwgbW9kZWwuTm9tZSA9PSBudWxsKVxyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcblxyXG4gICAgICAgIGxldCBpbmRleFNtYWxsID0gbW9kZWwuTm9tZS5pbmRleE9mKCc8c21hbGwnKTtcclxuICAgICAgICByZXR1cm4gaW5kZXhTbWFsbCA+IC0xID8gbW9kZWwuTm9tZS5zdWJzdHJpbmcoMCwgaW5kZXhTbWFsbCkudHJpbSgpIDogbW9kZWwuTm9tZTtcclxuICAgIH1cclxuXHJcbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBsZXQgb2JqID0gdGhpcy5kYXRhLmZpbmQociA9PiByLklkID09IHZhbHVlKTtcclxuICAgICAgICB0aGlzLmNvbnRyb2wuc2V0VmFsdWUob2JqKTtcclxuXHJcbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgb2JqID09IG51bGwpXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHZhbHVlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5vbkNoYW5nZSAhPSBudWxsKVxyXG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHZhbHVlKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMub25zZWxlY3RlZGl0ZW0gIT0gbnVsbClcclxuICAgICAgICAgICAgdGhpcy5vbnNlbGVjdGVkaXRlbS5lbWl0KHRoaXMuZGF0YSA9PSBudWxsID8gbnVsbCA6IHRoaXMuZGF0YS5maW5kKHIgPT4gci5JZCA9PSB2YWx1ZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcclxuICAgIH1cclxuXHJcbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcclxuICAgIH1cclxuXHJcbiAgICBzZXREaXNhYmxlZFN0YXRlPyhpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IHRoaXMuZGlzYWJsZWRub3JlZ2lzdGVycyAmJiAodGhpcy5kYXRhID09IG51bGwgfHwgdGhpcy5kYXRhLmxlbmd0aCA9PSAwKSA/IHRydWUgOiBpc0Rpc2FibGVkO1xyXG4gICAgfVxyXG59IiwiPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgPGlucHV0IG1hdElucHV0IHR5cGU9XCJ0ZXh0XCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZFZhbHVlXCIgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyIHwgdHJhbnNsYXRlXCIgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xcIiBbbWF0QXV0b2NvbXBsZXRlXT1cImF1dG9cIiBcclxuICAgICAgICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIiAoYmx1cik9XCJvbkJsdXIoJGV2ZW50LnRhcmdldC52YWx1ZSlcIiAoZm9jdXMpPVwib25Gb2N1cygkZXZlbnQudGFyZ2V0LnZhbHVlKVwiICNpbnB1dEF1dG8+XHJcblxyXG4gICAgPG1hdC1hdXRvY29tcGxldGUgI2F1dG89XCJtYXRBdXRvY29tcGxldGVcIiBbZGlzcGxheVdpdGhdPVwiZGlzcGxheUZuXCI+XHJcbiAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBvcHRpb25zXCIgW3ZhbHVlXT1cIm9wdGlvblwiIChvblNlbGVjdGlvbkNoYW5nZSk9XCJ3cml0ZVZhbHVlKG9wdGlvbi5JZClcIiBbaW5uZXJIVE1MXT1cIm9wdGlvbi5Ob21lXCIgPlxyXG4gICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cclxuICAgIFxyXG4gICAgPG1hdC1pY29uIG1hdFN1ZmZpeCBzdHlsZT1cImNvbG9yOiAjYWFhXCI+c3BlbGxjaGVjazwvbWF0LWljb24+XHJcbjwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG48c2VjdGlvbiBjbGFzcz1cInNlbGVjdC1sb2FkaW5nXCI+XHJcbiAgICA8bWF0LXByb2dyZXNzLWJhciBjb2xvcj1cInByaW1hcnlcIiBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiICpuZ0lmPVwibG9hZGluZ1wiPjwvbWF0LXByb2dyZXNzLWJhcj5cclxuPC9zZWN0aW9uPiJdfQ==