@seniorsistemas/angular-components 19.6.2 → 19.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/dynamic-form/dynamic-form/components/lookup/lookup.component.d.ts +2 -1
  2. package/dynamic-form/dynamic-form/components/lookup/types/lookup-models.d.ts +2 -1
  3. package/dynamic-form/dynamic-form/form-field/configurations/fields/number-field.d.ts +1 -1
  4. package/dynamic-form/dynamic-form/form-field/fields/bignumber/bignumber-field.component.d.ts +1 -1
  5. package/dynamic-form/dynamic-form/form-field/fields/currency/currency-field.component.d.ts +1 -1
  6. package/dynamic-form/dynamic-form/form-field/fields/text/text-field.component.d.ts +1 -2
  7. package/esm2022/alert/lib/alert/alert.component.mjs +3 -3
  8. package/esm2022/dynamic-form/dynamic-form/components/lookup/lookup.component.mjs +1 -1
  9. package/esm2022/dynamic-form/dynamic-form/components/lookup/types/lookup-models.mjs +1 -1
  10. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/number-field.mjs +1 -1
  11. package/esm2022/dynamic-form/dynamic-form/form-field/fields/bignumber/bignumber-field.component.mjs +16 -17
  12. package/esm2022/dynamic-form/dynamic-form/form-field/fields/currency/currency-field.component.mjs +20 -23
  13. package/esm2022/dynamic-form/dynamic-form/form-field/fields/number/number-field.component.mjs +9 -10
  14. package/esm2022/dynamic-form/dynamic-form/form-field/fields/text/text-field.component.mjs +9 -15
  15. package/esm2022/inline-edit/lib/inline-edit/components/fields/inline-edit-number/inline-edit-number.component.mjs +4 -4
  16. package/esm2022/inline-edit/lib/inline-edit/fields/inline-edit-number-field.mjs +1 -1
  17. package/esm2022/inline-edit/lib/inline-edit/inline-edit.module.mjs +4 -5
  18. package/esm2022/input-mask/lib/input-mask/input-mask.directive.mjs +460 -0
  19. package/esm2022/input-mask/lib/input-mask/input-mask.module.mjs +16 -0
  20. package/esm2022/input-mask/public-api.mjs +3 -0
  21. package/esm2022/input-mask/seniorsistemas-angular-components-input-mask.mjs +5 -0
  22. package/esm2022/lib/locale/fallback.mjs +3 -1
  23. package/esm2022/table/lib/table/table-column/column-number-format.utils.mjs +24 -0
  24. package/esm2022/table/lib/table/table-paging/export-number-format.mjs +104 -0
  25. package/esm2022/table/lib/table/table-paging/models/export-number-format.enum.mjs +6 -0
  26. package/esm2022/table/lib/table/table-paging/models/index.mjs +2 -2
  27. package/esm2022/table/lib/table/table-paging/table-paging.component.mjs +58 -99
  28. package/fesm2022/seniorsistemas-angular-components-alert.mjs +2 -2
  29. package/fesm2022/seniorsistemas-angular-components-alert.mjs.map +1 -1
  30. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +53 -62
  31. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
  32. package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs +6 -7
  33. package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs.map +1 -1
  34. package/fesm2022/seniorsistemas-angular-components-input-mask.mjs +480 -0
  35. package/fesm2022/seniorsistemas-angular-components-input-mask.mjs.map +1 -0
  36. package/fesm2022/seniorsistemas-angular-components-table.mjs +181 -98
  37. package/fesm2022/seniorsistemas-angular-components-table.mjs.map +1 -1
  38. package/fesm2022/seniorsistemas-angular-components.mjs +2 -0
  39. package/fesm2022/seniorsistemas-angular-components.mjs.map +1 -1
  40. package/inline-edit/lib/inline-edit/fields/inline-edit-number-field.d.ts +2 -2
  41. package/inline-edit/lib/inline-edit/inline-edit.module.d.ts +2 -2
  42. package/input-mask/README.md +183 -0
  43. package/input-mask/index.d.ts +5 -0
  44. package/input-mask/lib/input-mask/input-mask.directive.d.ts +103 -0
  45. package/input-mask/lib/input-mask/input-mask.module.d.ts +7 -0
  46. package/input-mask/public-api.d.ts +2 -0
  47. package/package.json +18 -12
  48. package/schematics/migrations/migrate-dynamic-form-v19/index.d.ts +2 -0
  49. package/schematics/migrations/migrate-dynamic-form-v19/index.js +964 -0
  50. package/schematics/migrations/migrate-dynamic-form-v19/index.js.map +1 -0
  51. package/schematics/migrations/migrate-dynamic-form-v19/index.test.d.ts +1 -0
  52. package/schematics/migrations/migrate-dynamic-form-v19/index.test.js +888 -0
  53. package/schematics/migrations/migrate-dynamic-form-v19/index.test.js.map +1 -0
  54. package/schematics/migrations/migrate-p-datepicker/index.js +4 -8
  55. package/schematics/migrations/migrate-p-datepicker/index.js.map +1 -1
  56. package/schematics/migrations/migrate-p-editor/index.d.ts +2 -0
  57. package/schematics/migrations/migrate-p-editor/index.js +301 -0
  58. package/schematics/migrations/migrate-p-editor/index.js.map +1 -0
  59. package/schematics/migrations/migrate-p-editor/index.test.d.ts +1 -0
  60. package/schematics/migrations/migrate-p-editor/index.test.js +393 -0
  61. package/schematics/migrations/migrate-p-editor/index.test.js.map +1 -0
  62. package/schematics/migrations.json +11 -0
  63. package/schematics/utils/ast-utils.d.ts +7 -0
  64. package/schematics/utils/ast-utils.js +20 -0
  65. package/schematics/utils/ast-utils.js.map +1 -1
  66. package/schematics/utils/html-utils.d.ts +6 -0
  67. package/schematics/utils/html-utils.js +15 -0
  68. package/schematics/utils/html-utils.js.map +1 -0
  69. package/table/README.md +28 -0
  70. package/table/lib/table/table-column/column-number-format.utils.d.ts +5 -0
  71. package/table/lib/table/table-paging/export-number-format.d.ts +15 -0
  72. package/table/lib/table/table-paging/models/export-number-format.enum.d.ts +4 -0
  73. package/table/lib/table/table-paging/models/index.d.ts +1 -0
  74. package/table/lib/table/table-paging/table-paging.component.d.ts +10 -27
@@ -6,6 +6,7 @@ import { LocalizedBignumberOptions } from '@seniorsistemas/angular-components/lo
6
6
  import { SortMeta } from 'primeng/api';
7
7
  import { AutoComplete, AutoCompleteCompleteEvent } from 'primeng/autocomplete';
8
8
  import { Table, TableLazyLoadEvent } from 'primeng/table';
9
+ import { ExpandedDynamicType } from '../../configurations/structure/row';
9
10
  import { DynamicStructure } from '../../configurations/structure/structure';
10
11
  import { BignumberFieldConfig } from '../../form-field/configurations/fields/bignumber-field';
11
12
  import { CurrencyFieldConfig } from '../../form-field/configurations/fields/currency-field';
@@ -48,7 +49,7 @@ export declare class LookupComponent implements ControlValueAccessor, OnChanges,
48
49
  searchTotalRecords: number;
49
50
  searchFields: (DynamicType & {
50
51
  customName?: string;
51
- })[];
52
+ } & Pick<ExpandedDynamicType, 'size'>)[];
52
53
  searchGridFields: LookupGridFields[];
53
54
  multiSortMeta: SortMeta[];
54
55
  placeholder?: string;
@@ -1,4 +1,5 @@
1
+ import { ExpandedDynamicType } from '../../../configurations/structure/row';
1
2
  import { DynamicType } from '../../../form-field/configurations/fields/field';
2
3
  export type LookupGridFields = DynamicType & {
3
4
  width?: number | string;
4
- };
5
+ } & Pick<ExpandedDynamicType, 'size'>;
@@ -60,7 +60,7 @@ export interface NumberFieldConfig extends FieldConfig {
60
60
  /** Callback chamado quando o campo recebe foco. */
61
61
  onFocus?: (event: Event) => void;
62
62
  /** Callback chamado quando a máscara é completamente preenchida. */
63
- onComplete?: (event: Event) => void;
63
+ onComplete?: (event: any) => void;
64
64
  /** Callback chamado a cada alteração no valor do input. */
65
65
  onInput?: (event: Event) => void;
66
66
  }
@@ -2,8 +2,8 @@ import { AfterViewInit, ElementRef, EventEmitter, OnDestroy, OnInit } from '@ang
2
2
  import { FormControl } from '@angular/forms';
3
3
  import { FormFieldUtilsService } from '../../../services/form-field-utils.service';
4
4
  import { BignumberFieldConfig } from '../../configurations/fields/bignumber-field';
5
- import { BaseFieldComponentConfig } from '../base-field-component';
6
5
  import { NumberFieldConfig } from '../../configurations/fields/number-field';
6
+ import { BaseFieldComponentConfig } from '../base-field-component';
7
7
  import * as i0 from "@angular/core";
8
8
  export declare class BignumberFieldComponent implements OnInit, AfterViewInit, OnDestroy, BaseFieldComponentConfig {
9
9
  private readonly localeService;
@@ -1,10 +1,10 @@
1
1
  import { AfterViewInit, OnInit } from '@angular/core';
2
2
  import { FormControl } from '@angular/forms';
3
3
  import { CurrencyService } from '@seniorsistemas/angular-components/currency';
4
+ import { NumberAlignmentOption } from '@seniorsistemas/angular-components/number-input';
4
5
  import { FormFieldUtilsService } from '../../../services/form-field-utils.service';
5
6
  import { CurrencyFieldConfig } from '../../configurations/fields/currency-field';
6
7
  import { BaseFieldComponentConfig } from '../base-field-component';
7
- import { NumberAlignmentOption } from '@seniorsistemas/angular-components/number-input';
8
8
  import * as i0 from "@angular/core";
9
9
  /**
10
10
  * @deprecated Should use bignumber instead
@@ -1,6 +1,5 @@
1
1
  import { AfterViewInit, ElementRef, EventEmitter, OnDestroy, OnInit } from '@angular/core';
2
2
  import { FormControl } from '@angular/forms';
3
- import { InputMask } from 'primeng/inputmask';
4
3
  import { FormFieldUtilsService } from '../../../services/form-field-utils.service';
5
4
  import { TextFieldConfig } from '../../configurations/fields/text-field';
6
5
  import { BaseFieldComponentConfig } from '../base-field-component';
@@ -13,7 +12,7 @@ export declare class TextFieldComponent implements OnInit, AfterViewInit, OnDest
13
12
  onInput: EventEmitter<any>;
14
13
  onFocus: EventEmitter<any>;
15
14
  onComplete: EventEmitter<any>;
16
- inputRef: ElementRef | InputMask | null;
15
+ inputRef: ElementRef | null;
17
16
  private ngUnsubscribe;
18
17
  ngOnInit(): void;
19
18
  ngAfterViewInit(): void;
@@ -63,11 +63,11 @@ export class AlertComponent {
63
63
  }
64
64
  _isOpen = true;
65
65
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AlertComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
66
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: AlertComponent, selector: "s-alert", inputs: { severity: "severity", summary: "summary", detail: "detail", closable: "closable" }, outputs: { closed: "closed" }, ngImport: i0, template: "<div\n class=\"alert\"\n [ngClass]=\"{\n 'alert--info': severity === 'info',\n 'alert--success': severity === 'success',\n 'alert--warning': severity === 'warning',\n 'alert--error': severity === 'error',\n }\"\n>\n <div class=\"content\">\n <div class=\"icon-container\">\n <i\n class=\"fas fa-info\"\n [ngClass]=\"{\n 'fa-info': severity === 'info',\n 'fa-check': severity === 'success',\n 'fa-exclamation-triangle': severity === 'warning',\n 'fa-times': severity === 'error',\n }\"\n ></i>\n </div>\n <div class=\"text-container\">\n <div class=\"text\">\n @if (summary) {\n <span class=\"summary\">{{ summary }}</span>\n }\n\n @if (detail) {\n <span class=\"detail\">{{ detail }}</span>\n }\n </div>\n </div>\n </div>\n @if (closable) {\n <button\n class=\"close-option\"\n (click)=\"onClose()\"\n >\n <i class=\"fas fa-times\"></i>\n </button>\n }\n</div>\n", styles: [".alert{align-items:center;background-color:#f1f7f8;border-left:4px solid #428bca;border-radius:4px;box-shadow:1px 1px 2px #0003;display:flex;gap:16px;justify-content:space-between;margin:8px;padding:12px 16px}.alert .content{align-items:center;display:flex;gap:16px}.alert .content .icon-container{align-items:center;background-color:#428bca;border-radius:50%;color:#fff;display:inline-flex;flex-shrink:0;height:40px;justify-content:center;width:40px}.alert .content .text-container{display:flex;flex-direction:column;gap:16px}.alert .content .text-container .text{display:flex;flex-direction:column;justify-content:flex-start}.alert .content .text-container .text .summary,.alert .content .text-container .text .detail{color:#212533;font-family:Open Sans,sans-serif;font-size:14px}.alert .content .text-container .text .summary{font-weight:700}.alert .close-option{background-color:transparent;border:none;color:#212533;cursor:pointer;font-size:16px;padding:4px}.alert--info{background-color:#f1f7f8;border-color:#428bca}.alert--info .content .icon-container{background-color:#428bca;color:#fff}.alert--success{background-color:#e0f0f0;border-color:#0c9348}.alert--success .content .icon-container{background-color:#0c9348;color:#fff}.alert--warning{background-color:#fef4e3;border-color:#fcbf10}.alert--warning .content .icon-container{background-color:#fcbf10;color:#212533}.alert--error{background-color:#fef0f0;border-color:#c13018}.alert--error .content .icon-container{background-color:#c13018;color:#fff}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
66
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: AlertComponent, selector: "s-alert", inputs: { severity: "severity", summary: "summary", detail: "detail", closable: "closable" }, outputs: { closed: "closed" }, ngImport: i0, template: "@if (isOpen) {\n<div\n class=\"alert\"\n [ngClass]=\"{\n 'alert--info': severity === 'info',\n 'alert--success': severity === 'success',\n 'alert--warning': severity === 'warning',\n 'alert--error': severity === 'error',\n }\"\n>\n <div class=\"content\">\n <div class=\"icon-container\">\n <i\n class=\"fas fa-info\"\n [ngClass]=\"{\n 'fa-info': severity === 'info',\n 'fa-check': severity === 'success',\n 'fa-exclamation-triangle': severity === 'warning',\n 'fa-times': severity === 'error',\n }\"\n ></i>\n </div>\n <div class=\"text-container\">\n <div class=\"text\">\n @if (summary) {\n <span class=\"summary\">{{ summary }}</span>\n }\n\n @if (detail) {\n <span class=\"detail\">{{ detail }}</span>\n }\n </div>\n </div>\n </div>\n @if (closable) {\n <button\n class=\"close-option\"\n (click)=\"onClose()\"\n >\n <i class=\"fas fa-times\"></i>\n </button>\n }\n</div>\n}\n", styles: [".alert{align-items:center;background-color:#f1f7f8;border-left:4px solid #428bca;border-radius:4px;box-shadow:1px 1px 2px #0003;display:flex;gap:16px;justify-content:space-between;margin:8px;padding:12px 16px}.alert .content{align-items:center;display:flex;gap:16px}.alert .content .icon-container{align-items:center;background-color:#428bca;border-radius:50%;color:#fff;display:inline-flex;flex-shrink:0;height:40px;justify-content:center;width:40px}.alert .content .text-container{display:flex;flex-direction:column;gap:16px}.alert .content .text-container .text{display:flex;flex-direction:column;justify-content:flex-start}.alert .content .text-container .text .summary,.alert .content .text-container .text .detail{color:#212533;font-family:Open Sans,sans-serif;font-size:14px}.alert .content .text-container .text .summary{font-weight:700}.alert .close-option{background-color:transparent;border:none;color:#212533;cursor:pointer;font-size:16px;padding:4px}.alert--info{background-color:#f1f7f8;border-color:#428bca}.alert--info .content .icon-container{background-color:#428bca;color:#fff}.alert--success{background-color:#e0f0f0;border-color:#0c9348}.alert--success .content .icon-container{background-color:#0c9348;color:#fff}.alert--warning{background-color:#fef4e3;border-color:#fcbf10}.alert--warning .content .icon-container{background-color:#fcbf10;color:#212533}.alert--error{background-color:#fef0f0;border-color:#c13018}.alert--error .content .icon-container{background-color:#c13018;color:#fff}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
67
67
  }
68
68
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AlertComponent, decorators: [{
69
69
  type: Component,
70
- args: [{ selector: 's-alert', template: "<div\n class=\"alert\"\n [ngClass]=\"{\n 'alert--info': severity === 'info',\n 'alert--success': severity === 'success',\n 'alert--warning': severity === 'warning',\n 'alert--error': severity === 'error',\n }\"\n>\n <div class=\"content\">\n <div class=\"icon-container\">\n <i\n class=\"fas fa-info\"\n [ngClass]=\"{\n 'fa-info': severity === 'info',\n 'fa-check': severity === 'success',\n 'fa-exclamation-triangle': severity === 'warning',\n 'fa-times': severity === 'error',\n }\"\n ></i>\n </div>\n <div class=\"text-container\">\n <div class=\"text\">\n @if (summary) {\n <span class=\"summary\">{{ summary }}</span>\n }\n\n @if (detail) {\n <span class=\"detail\">{{ detail }}</span>\n }\n </div>\n </div>\n </div>\n @if (closable) {\n <button\n class=\"close-option\"\n (click)=\"onClose()\"\n >\n <i class=\"fas fa-times\"></i>\n </button>\n }\n</div>\n", styles: [".alert{align-items:center;background-color:#f1f7f8;border-left:4px solid #428bca;border-radius:4px;box-shadow:1px 1px 2px #0003;display:flex;gap:16px;justify-content:space-between;margin:8px;padding:12px 16px}.alert .content{align-items:center;display:flex;gap:16px}.alert .content .icon-container{align-items:center;background-color:#428bca;border-radius:50%;color:#fff;display:inline-flex;flex-shrink:0;height:40px;justify-content:center;width:40px}.alert .content .text-container{display:flex;flex-direction:column;gap:16px}.alert .content .text-container .text{display:flex;flex-direction:column;justify-content:flex-start}.alert .content .text-container .text .summary,.alert .content .text-container .text .detail{color:#212533;font-family:Open Sans,sans-serif;font-size:14px}.alert .content .text-container .text .summary{font-weight:700}.alert .close-option{background-color:transparent;border:none;color:#212533;cursor:pointer;font-size:16px;padding:4px}.alert--info{background-color:#f1f7f8;border-color:#428bca}.alert--info .content .icon-container{background-color:#428bca;color:#fff}.alert--success{background-color:#e0f0f0;border-color:#0c9348}.alert--success .content .icon-container{background-color:#0c9348;color:#fff}.alert--warning{background-color:#fef4e3;border-color:#fcbf10}.alert--warning .content .icon-container{background-color:#fcbf10;color:#212533}.alert--error{background-color:#fef0f0;border-color:#c13018}.alert--error .content .icon-container{background-color:#c13018;color:#fff}\n"] }]
70
+ args: [{ selector: 's-alert', template: "@if (isOpen) {\n<div\n class=\"alert\"\n [ngClass]=\"{\n 'alert--info': severity === 'info',\n 'alert--success': severity === 'success',\n 'alert--warning': severity === 'warning',\n 'alert--error': severity === 'error',\n }\"\n>\n <div class=\"content\">\n <div class=\"icon-container\">\n <i\n class=\"fas fa-info\"\n [ngClass]=\"{\n 'fa-info': severity === 'info',\n 'fa-check': severity === 'success',\n 'fa-exclamation-triangle': severity === 'warning',\n 'fa-times': severity === 'error',\n }\"\n ></i>\n </div>\n <div class=\"text-container\">\n <div class=\"text\">\n @if (summary) {\n <span class=\"summary\">{{ summary }}</span>\n }\n\n @if (detail) {\n <span class=\"detail\">{{ detail }}</span>\n }\n </div>\n </div>\n </div>\n @if (closable) {\n <button\n class=\"close-option\"\n (click)=\"onClose()\"\n >\n <i class=\"fas fa-times\"></i>\n </button>\n }\n</div>\n}\n", styles: [".alert{align-items:center;background-color:#f1f7f8;border-left:4px solid #428bca;border-radius:4px;box-shadow:1px 1px 2px #0003;display:flex;gap:16px;justify-content:space-between;margin:8px;padding:12px 16px}.alert .content{align-items:center;display:flex;gap:16px}.alert .content .icon-container{align-items:center;background-color:#428bca;border-radius:50%;color:#fff;display:inline-flex;flex-shrink:0;height:40px;justify-content:center;width:40px}.alert .content .text-container{display:flex;flex-direction:column;gap:16px}.alert .content .text-container .text{display:flex;flex-direction:column;justify-content:flex-start}.alert .content .text-container .text .summary,.alert .content .text-container .text .detail{color:#212533;font-family:Open Sans,sans-serif;font-size:14px}.alert .content .text-container .text .summary{font-weight:700}.alert .close-option{background-color:transparent;border:none;color:#212533;cursor:pointer;font-size:16px;padding:4px}.alert--info{background-color:#f1f7f8;border-color:#428bca}.alert--info .content .icon-container{background-color:#428bca;color:#fff}.alert--success{background-color:#e0f0f0;border-color:#0c9348}.alert--success .content .icon-container{background-color:#0c9348;color:#fff}.alert--warning{background-color:#fef4e3;border-color:#fcbf10}.alert--warning .content .icon-container{background-color:#fcbf10;color:#212533}.alert--error{background-color:#fef0f0;border-color:#c13018}.alert--error .content .icon-container{background-color:#c13018;color:#fff}\n"] }]
71
71
  }], propDecorators: { severity: [{
72
72
  type: Input
73
73
  }], summary: [{
@@ -81,4 +81,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
81
81
  }], closed: [{
82
82
  type: Output
83
83
  }] } });
84
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxlcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL2FsZXJ0L3NyYy9saWIvYWxlcnQvYWxlcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL2FsZXJ0L3NyYy9saWIvYWxlcnQvYWxlcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBRXZFOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQU1ILE1BQU0sT0FBTyxjQUFjO0lBQ3ZCOzs7Ozs7OztPQVFHO0lBQ0gsc0VBQXNFO0lBRS9ELFFBQVEsR0FBNkMsTUFBTSxDQUFDO0lBRW5FOztPQUVHO0lBRUksT0FBTyxDQUFVO0lBRXhCOztPQUVHO0lBRUksTUFBTSxDQUFVO0lBRXZCOzs7OztPQUtHO0lBRUksUUFBUSxHQUFHLElBQUksQ0FBQztJQUV2Qjs7T0FFRztJQUVJLE1BQU0sR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO0lBRXpDLElBQVcsTUFBTTtRQUNiLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN4QixDQUFDO0lBRU0sVUFBVTtRQUNiLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ3pCLENBQUM7SUFFTSxTQUFTO1FBQ1osSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFDeEIsQ0FBQztJQUVNLE9BQU87UUFDVixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRU8sT0FBTyxHQUFHLElBQUksQ0FBQzt3R0ExRGQsY0FBYzs0RkFBZCxjQUFjLDRLQ3ZCM0IsMHVDQTBDQTs7NEZEbkJhLGNBQWM7a0JBTDFCLFNBQVM7K0JBQ0ksU0FBUzs4QkFnQlosUUFBUTtzQkFEZCxLQUFLO2dCQU9DLE9BQU87c0JBRGIsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBT2xCLE1BQU07c0JBRFosS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBVWxCLFFBQVE7c0JBRGQsS0FBSztnQkFPQyxNQUFNO3NCQURaLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDb21wb25lbnRlIGRlIGFsZXJ0YSBxdWUgZXhpYmUgbWVuc2FnZW5zIGluZm9ybWF0aXZhcywgZGUgc3VjZXNzbywgYXZpc28gb3UgZXJyby5cbiAqIFN1cG9ydGEgZmVjaGFtZW50byBtYW51YWwgcGVsbyB1c3XDoXJpbyBlIGVtaXRlIHVtIGV2ZW50byBhbyBzZXIgZmVjaGFkby5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbFxuICogPHMtYWxlcnRcbiAqICAgc2V2ZXJpdHk9XCJ3YXJuaW5nXCJcbiAqICAgc3VtbWFyeT1cIkF0ZW7Dp8Ojb1wiXG4gKiAgIGRldGFpbD1cIlZlcmlmaXF1ZSBvcyBkYWRvcyBhbnRlcyBkZSBjb250aW51YXIuXCJcbiAqICAgKGNsb3NlZCk9XCJvbkFsZXJ0Q2xvc2VkKClcIlxuICogLz5cbiAqIGBgYFxuICpcbiAqIEBjYXRlZ29yeSBGZWVkYmFja1xuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3MtYWxlcnQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9hbGVydC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vYWxlcnQuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgQWxlcnRDb21wb25lbnQge1xuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBOw612ZWwgZGUgc2V2ZXJpZGFkZSBkbyBhbGVydGEsIHF1ZSBkZWZpbmUgYSBjb3IgZSBvIMOtY29uZSBleGliaWRvcy5cbiAgICAgKiAtIGAnaW5mbydgOiBhbGVydGEgaW5mb3JtYXRpdm8gKHBhZHLDo28pLlxuICAgICAqIC0gYCdzdWNjZXNzJ2A6IGFsZXJ0YSBkZSBzdWNlc3NvLlxuICAgICAqIC0gYCd3YXJuaW5nJ2A6IGFsZXJ0YSBkZSBhdmlzby5cbiAgICAgKiAtIGAnZXJyb3InYDogYWxlcnRhIGRlIGVycm8uXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAnaW5mbydcbiAgICAgKi9cbiAgICAvLyBzb25hci1pZ25vcmU6IFJlZmFjdG9yIHRoaXMgdW5pb24gdHlwZSB0byBoYXZlIGxlc3MgdGhhbiAzIGVsZW1lbnRzXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V2ZXJpdHk6ICdpbmZvJyB8ICdzdWNjZXNzJyB8ICd3YXJuaW5nJyB8ICdlcnJvcicgPSAnaW5mbyc7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVMOtdHVsbyBwcmluY2lwYWwgZG8gYWxlcnRhIGV4aWJpZG8gZW0gZGVzdGFxdWUuIENhbXBvIG9icmlnYXTDs3Jpby5cbiAgICAgKi9cbiAgICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICAgIHB1YmxpYyBzdW1tYXJ5ITogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIE1lbnNhZ2VtIGRldGFsaGFkYSBleGliaWRhIGFiYWl4byBkbyB0w610dWxvIGRvIGFsZXJ0YS4gQ2FtcG8gb2JyaWdhdMOzcmlvLlxuICAgICAqL1xuICAgIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gICAgcHVibGljIGRldGFpbCE6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBRdWFuZG8gYHRydWVgLCBleGliZSBvIGJvdMOjbyBkZSBmZWNoYXIgbyBhbGVydGEuXG4gICAgICogUXVhbmRvIGBmYWxzZWAsIG8gYWxlcnRhIG7Do28gcG9kZSBzZXIgZGlzcGVuc2FkbyBwZWxvIHVzdcOhcmlvLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGNsb3NhYmxlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBFbWl0aWRvIHF1YW5kbyBvIHVzdcOhcmlvIGZlY2hhIG8gYWxlcnRhIGNsaWNhbmRvIG5vIGJvdMOjbyBkZSBmZWNoYXIuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGNsb3NlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIHB1YmxpYyBnZXQgaXNPcGVuKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNPcGVuO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbG9zZUFsZXJ0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9pc09wZW4gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2hvd0FsZXJ0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9pc09wZW4gPSB0cnVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkNsb3NlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNsb3NlZC5lbWl0KCk7XG4gICAgICAgIHRoaXMuY2xvc2VBbGVydCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2lzT3BlbiA9IHRydWU7XG59XG5cbiIsIjxkaXZcbiAgICBjbGFzcz1cImFsZXJ0XCJcbiAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICdhbGVydC0taW5mbyc6IHNldmVyaXR5ID09PSAnaW5mbycsXG4gICAgICAgICdhbGVydC0tc3VjY2Vzcyc6IHNldmVyaXR5ID09PSAnc3VjY2VzcycsXG4gICAgICAgICdhbGVydC0td2FybmluZyc6IHNldmVyaXR5ID09PSAnd2FybmluZycsXG4gICAgICAgICdhbGVydC0tZXJyb3InOiBzZXZlcml0eSA9PT0gJ2Vycm9yJyxcbiAgICB9XCJcbj5cbiAgICA8ZGl2IGNsYXNzPVwiY29udGVudFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvbi1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmYXMgZmEtaW5mb1wiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAnZmEtaW5mbyc6IHNldmVyaXR5ID09PSAnaW5mbycsXG4gICAgICAgICAgICAgICAgICAgICdmYS1jaGVjayc6IHNldmVyaXR5ID09PSAnc3VjY2VzcycsXG4gICAgICAgICAgICAgICAgICAgICdmYS1leGNsYW1hdGlvbi10cmlhbmdsZSc6IHNldmVyaXR5ID09PSAnd2FybmluZycsXG4gICAgICAgICAgICAgICAgICAgICdmYS10aW1lcyc6IHNldmVyaXR5ID09PSAnZXJyb3InLFxuICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHRcIj5cbiAgICAgICAgICAgICAgICBAaWYgKHN1bW1hcnkpIHtcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdW1tYXJ5XCI+e3sgc3VtbWFyeSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBAaWYgKGRldGFpbCkge1xuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRldGFpbFwiPnt7IGRldGFpbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgQGlmIChjbG9zYWJsZSkge1xuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cImNsb3NlLW9wdGlvblwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25DbG9zZSgpXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdGltZXNcIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgIH1cbjwvZGl2PlxuIl19
84
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxlcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL2FsZXJ0L3NyYy9saWIvYWxlcnQvYWxlcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL2FsZXJ0L3NyYy9saWIvYWxlcnQvYWxlcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBRXZFOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQU1ILE1BQU0sT0FBTyxjQUFjO0lBQ3ZCOzs7Ozs7OztPQVFHO0lBQ0gsc0VBQXNFO0lBRS9ELFFBQVEsR0FBNkMsTUFBTSxDQUFDO0lBRW5FOztPQUVHO0lBRUksT0FBTyxDQUFVO0lBRXhCOztPQUVHO0lBRUksTUFBTSxDQUFVO0lBRXZCOzs7OztPQUtHO0lBRUksUUFBUSxHQUFHLElBQUksQ0FBQztJQUV2Qjs7T0FFRztJQUVJLE1BQU0sR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO0lBRXpDLElBQVcsTUFBTTtRQUNiLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN4QixDQUFDO0lBRU0sVUFBVTtRQUNiLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ3pCLENBQUM7SUFFTSxTQUFTO1FBQ1osSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFDeEIsQ0FBQztJQUVNLE9BQU87UUFDVixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRU8sT0FBTyxHQUFHLElBQUksQ0FBQzt3R0ExRGQsY0FBYzs0RkFBZCxjQUFjLDRLQ3ZCM0IsNnZDQTRDQTs7NEZEckJhLGNBQWM7a0JBTDFCLFNBQVM7K0JBQ0ksU0FBUzs4QkFnQlosUUFBUTtzQkFEZCxLQUFLO2dCQU9DLE9BQU87c0JBRGIsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBT2xCLE1BQU07c0JBRFosS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBVWxCLFFBQVE7c0JBRGQsS0FBSztnQkFPQyxNQUFNO3NCQURaLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDb21wb25lbnRlIGRlIGFsZXJ0YSBxdWUgZXhpYmUgbWVuc2FnZW5zIGluZm9ybWF0aXZhcywgZGUgc3VjZXNzbywgYXZpc28gb3UgZXJyby5cbiAqIFN1cG9ydGEgZmVjaGFtZW50byBtYW51YWwgcGVsbyB1c3XDoXJpbyBlIGVtaXRlIHVtIGV2ZW50byBhbyBzZXIgZmVjaGFkby5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbFxuICogPHMtYWxlcnRcbiAqICAgc2V2ZXJpdHk9XCJ3YXJuaW5nXCJcbiAqICAgc3VtbWFyeT1cIkF0ZW7Dp8Ojb1wiXG4gKiAgIGRldGFpbD1cIlZlcmlmaXF1ZSBvcyBkYWRvcyBhbnRlcyBkZSBjb250aW51YXIuXCJcbiAqICAgKGNsb3NlZCk9XCJvbkFsZXJ0Q2xvc2VkKClcIlxuICogLz5cbiAqIGBgYFxuICpcbiAqIEBjYXRlZ29yeSBGZWVkYmFja1xuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3MtYWxlcnQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9hbGVydC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vYWxlcnQuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgQWxlcnRDb21wb25lbnQge1xuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBOw612ZWwgZGUgc2V2ZXJpZGFkZSBkbyBhbGVydGEsIHF1ZSBkZWZpbmUgYSBjb3IgZSBvIMOtY29uZSBleGliaWRvcy5cbiAgICAgKiAtIGAnaW5mbydgOiBhbGVydGEgaW5mb3JtYXRpdm8gKHBhZHLDo28pLlxuICAgICAqIC0gYCdzdWNjZXNzJ2A6IGFsZXJ0YSBkZSBzdWNlc3NvLlxuICAgICAqIC0gYCd3YXJuaW5nJ2A6IGFsZXJ0YSBkZSBhdmlzby5cbiAgICAgKiAtIGAnZXJyb3InYDogYWxlcnRhIGRlIGVycm8uXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAnaW5mbydcbiAgICAgKi9cbiAgICAvLyBzb25hci1pZ25vcmU6IFJlZmFjdG9yIHRoaXMgdW5pb24gdHlwZSB0byBoYXZlIGxlc3MgdGhhbiAzIGVsZW1lbnRzXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V2ZXJpdHk6ICdpbmZvJyB8ICdzdWNjZXNzJyB8ICd3YXJuaW5nJyB8ICdlcnJvcicgPSAnaW5mbyc7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVMOtdHVsbyBwcmluY2lwYWwgZG8gYWxlcnRhIGV4aWJpZG8gZW0gZGVzdGFxdWUuIENhbXBvIG9icmlnYXTDs3Jpby5cbiAgICAgKi9cbiAgICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICAgIHB1YmxpYyBzdW1tYXJ5ITogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIE1lbnNhZ2VtIGRldGFsaGFkYSBleGliaWRhIGFiYWl4byBkbyB0w610dWxvIGRvIGFsZXJ0YS4gQ2FtcG8gb2JyaWdhdMOzcmlvLlxuICAgICAqL1xuICAgIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gICAgcHVibGljIGRldGFpbCE6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBRdWFuZG8gYHRydWVgLCBleGliZSBvIGJvdMOjbyBkZSBmZWNoYXIgbyBhbGVydGEuXG4gICAgICogUXVhbmRvIGBmYWxzZWAsIG8gYWxlcnRhIG7Do28gcG9kZSBzZXIgZGlzcGVuc2FkbyBwZWxvIHVzdcOhcmlvLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGNsb3NhYmxlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBFbWl0aWRvIHF1YW5kbyBvIHVzdcOhcmlvIGZlY2hhIG8gYWxlcnRhIGNsaWNhbmRvIG5vIGJvdMOjbyBkZSBmZWNoYXIuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGNsb3NlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIHB1YmxpYyBnZXQgaXNPcGVuKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNPcGVuO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbG9zZUFsZXJ0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9pc09wZW4gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2hvd0FsZXJ0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9pc09wZW4gPSB0cnVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkNsb3NlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNsb3NlZC5lbWl0KCk7XG4gICAgICAgIHRoaXMuY2xvc2VBbGVydCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2lzT3BlbiA9IHRydWU7XG59XG5cbiIsIkBpZiAoaXNPcGVuKSB7XG48ZGl2XG4gICAgY2xhc3M9XCJhbGVydFwiXG4gICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAnYWxlcnQtLWluZm8nOiBzZXZlcml0eSA9PT0gJ2luZm8nLFxuICAgICAgICAnYWxlcnQtLXN1Y2Nlc3MnOiBzZXZlcml0eSA9PT0gJ3N1Y2Nlc3MnLFxuICAgICAgICAnYWxlcnQtLXdhcm5pbmcnOiBzZXZlcml0eSA9PT0gJ3dhcm5pbmcnLFxuICAgICAgICAnYWxlcnQtLWVycm9yJzogc2V2ZXJpdHkgPT09ICdlcnJvcicsXG4gICAgfVwiXG4+XG4gICAgPGRpdiBjbGFzcz1cImNvbnRlbnRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImljb24tY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmFzIGZhLWluZm9cIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgJ2ZhLWluZm8nOiBzZXZlcml0eSA9PT0gJ2luZm8nLFxuICAgICAgICAgICAgICAgICAgICAnZmEtY2hlY2snOiBzZXZlcml0eSA9PT0gJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgICAgICAgICAnZmEtZXhjbGFtYXRpb24tdHJpYW5nbGUnOiBzZXZlcml0eSA9PT0gJ3dhcm5pbmcnLFxuICAgICAgICAgICAgICAgICAgICAnZmEtdGltZXMnOiBzZXZlcml0eSA9PT0gJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgID48L2k+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0XCI+XG4gICAgICAgICAgICAgICAgQGlmIChzdW1tYXJ5KSB7XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3VtbWFyeVwiPnt7IHN1bW1hcnkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgQGlmIChkZXRhaWwpIHtcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkZXRhaWxcIj57eyBkZXRhaWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIEBpZiAoY2xvc2FibGUpIHtcbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJjbG9zZS1vcHRpb25cIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xvc2UoKVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXRpbWVzXCI+PC9pPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICB9XG48L2Rpdj5cbn1cbiJdfQ==