imm-element-ui 2.0.1 → 2.0.3

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 (106) hide show
  1. package/README.md +24 -24
  2. package/esm2022/lib/am/am.component.mjs +6 -6
  3. package/esm2022/lib/crumb-action/crumb-action.component.mjs +3 -3
  4. package/esm2022/lib/form/form/form.component.mjs +5 -5
  5. package/esm2022/lib/form/form-field/context-menu.mjs +35 -35
  6. package/esm2022/lib/form/form-field/field-control.mjs +1 -1
  7. package/esm2022/lib/form/form-field/field-utils.mjs +2 -2
  8. package/esm2022/lib/form/form-field/form-field.mjs +135 -135
  9. package/esm2022/lib/form/form-field/form-type.mjs +85 -85
  10. package/esm2022/lib/form/form-field/index.mjs +1 -1
  11. package/esm2022/lib/form/form-field/label.directive.mjs +1 -1
  12. package/esm2022/lib/form/form-type/autocomplete.type.mjs +151 -151
  13. package/esm2022/lib/form/form-type/codemirror.type.mjs +6 -3
  14. package/esm2022/lib/form/form-type/datepicker.type.mjs +183 -183
  15. package/esm2022/lib/form/form-type/image.type.mjs +221 -221
  16. package/esm2022/lib/form/form-type/index.mjs +1 -1
  17. package/esm2022/lib/form/form-type/inputnumber.type.mjs +91 -91
  18. package/esm2022/lib/form/form-type/inputtext.type.mjs +19 -19
  19. package/esm2022/lib/form/form-type/multiselect.type.mjs +165 -163
  20. package/esm2022/lib/form/form-type/radio.type.mjs +78 -78
  21. package/esm2022/lib/form/form-type/rowselector.type.mjs +29 -29
  22. package/esm2022/lib/form/form-type/select.type.mjs +135 -133
  23. package/esm2022/lib/form/form-type/textarea.type.mjs +25 -25
  24. package/esm2022/lib/form/form-type/treeselect.type.mjs +115 -115
  25. package/esm2022/lib/form/form-type/upload.type.mjs +133 -133
  26. package/esm2022/lib/grid/actions/actions.component.mjs +1 -1
  27. package/esm2022/lib/grid/cell-edit/cell-edit-autoComplete.component.mjs +27 -27
  28. package/esm2022/lib/grid/cell-edit/cell-edit-datePicker.compoent.mjs +140 -140
  29. package/esm2022/lib/grid/cell-edit/cell-edit-inputDate.component.mjs +27 -27
  30. package/esm2022/lib/grid/cell-edit/cell-edit-inputNumber.component.mjs +75 -75
  31. package/esm2022/lib/grid/cell-edit/cell-edit-inputText.compoent.mjs +1 -1
  32. package/esm2022/lib/grid/cell-edit/cell-edit-select.component.mjs +126 -122
  33. package/esm2022/lib/grid/cell-edit/index.mjs +1 -1
  34. package/esm2022/lib/grid/cell-render/async-renderer.mjs +1 -1
  35. package/esm2022/lib/grid/cell-render/chip-render.mjs +21 -21
  36. package/esm2022/lib/grid/cell-render/img-renderer.mjs +25 -25
  37. package/esm2022/lib/grid/cell-render/link-render.mjs +13 -13
  38. package/esm2022/lib/grid/cell-render/row-span.mjs +5 -5
  39. package/esm2022/lib/grid/grid/grid.component.mjs +5 -5
  40. package/esm2022/lib/grid/grid-utils.mjs +1 -1
  41. package/esm2022/lib/grid/mock-data.mjs +1 -1
  42. package/esm2022/lib/grid/pager/pager.component.mjs +3 -3
  43. package/esm2022/lib/head/head.component.mjs +4 -4
  44. package/esm2022/lib/href-btn-list/href-btn-list.component.mjs +7 -7
  45. package/esm2022/lib/import/import.component.mjs +3 -3
  46. package/esm2022/lib/loading/loading.component.mjs +4 -4
  47. package/esm2022/lib/log/log.component.mjs +3 -3
  48. package/esm2022/lib/page-form/page-form.component.mjs +7 -7
  49. package/esm2022/lib/page-form/page-form.interface.mjs +1 -1
  50. package/esm2022/lib/page-grid-list/page-grid-list.component.mjs +3 -3
  51. package/esm2022/lib/row-selector/row-selector.component.mjs +3 -3
  52. package/esm2022/lib/search/mock-data.mjs +1 -1
  53. package/esm2022/lib/search/pop-date/pop-date.component.mjs +3 -3
  54. package/esm2022/lib/search/pop-list/pop-list.component.mjs +3 -3
  55. package/esm2022/lib/search/pop-panel/pop-panel.component.mjs +3 -3
  56. package/esm2022/lib/search/pop-select/pop-select.component.mjs +3 -3
  57. package/esm2022/lib/search/pop-self/pop-self.component.mjs +3 -3
  58. package/esm2022/lib/search/pop-sort/pop-sort.component.mjs +3 -3
  59. package/esm2022/lib/search/pop-tree/pop-tree.component.mjs +3 -3
  60. package/esm2022/lib/search/search/search.component.mjs +4 -4
  61. package/esm2022/lib/search/search-tip/search-tip.component.mjs +3 -3
  62. package/esm2022/lib/search/search-utils.mjs +1 -1
  63. package/esm2022/lib/search/text-panel/text-panel.component.mjs +3 -3
  64. package/esm2022/lib/service/i18n.service.mjs +1 -1
  65. package/esm2022/lib/service/loading.service.mjs +1 -1
  66. package/esm2022/lib/service/themeConfig.service.mjs +1 -1
  67. package/esm2022/lib/share/utils.mjs +11 -1
  68. package/esm2022/lib/steps/steps.component.mjs +4 -4
  69. package/esm2022/lib/theme-config/theme-config-panel.compoent.mjs +39 -39
  70. package/esm2022/lib/theme-config/theme-config.compoent.mjs +29 -29
  71. package/esm2022/public-api.mjs +1 -1
  72. package/fesm2022/imm-element-ui.mjs +3485 -3467
  73. package/fesm2022/imm-element-ui.mjs.map +1 -1
  74. package/lib/crumb-action/crumb-action.component.d.ts +1 -1
  75. package/lib/form/form-type/codemirror.type.d.ts +1 -1
  76. package/lib/form/form-type/multiselect.type.d.ts +1 -0
  77. package/lib/form/form-type/select.type.d.ts +1 -0
  78. package/lib/grid/cell-edit/cell-edit-select.component.d.ts +1 -0
  79. package/lib/grid/grid-utils.d.ts +529 -2
  80. package/lib/share/utils.d.ts +2 -0
  81. package/lib/steps/steps.component.d.ts +1 -1
  82. package/package.json +1 -1
  83. package/src/lib/crumb-action/crumb-action.component.scss +60 -60
  84. package/src/lib/grid/grid/grid.component.scss +45 -45
  85. package/src/lib/grid/pager/pager.component.scss +3 -3
  86. package/src/lib/head/head.component.scss +3 -3
  87. package/src/lib/href-btn-list/href-btn-list.component.scss +51 -51
  88. package/src/lib/import/import.component.scss +10 -10
  89. package/src/lib/loading/loading.component.scss +31 -31
  90. package/src/lib/log/log.component.scss +26 -26
  91. package/src/lib/page-form/page-form.component.scss +31 -31
  92. package/src/lib/page-grid-list/page-grid-list.component.scss +12 -12
  93. package/src/lib/row-selector/row-selector.component.scss +1 -1
  94. package/src/lib/search/dynamic-search/dynamic-search.component.scss +70 -70
  95. package/src/lib/search/pop-date/pop-date.component.scss +67 -67
  96. package/src/lib/search/pop-list/pop-list.component.scss +23 -23
  97. package/src/lib/search/pop-panel/pop-panel.component.scss +32 -32
  98. package/src/lib/search/pop-select/pop-select.component.scss +39 -39
  99. package/src/lib/search/pop-self/pop-self.component.scss +80 -80
  100. package/src/lib/search/pop-sort/pop-sort.component.scss +49 -49
  101. package/src/lib/search/pop-tree/pop-tree.component.scss +37 -37
  102. package/src/lib/search/search/search.component.scss +70 -70
  103. package/src/lib/search/search-tip/search-tip.component.scss +50 -50
  104. package/src/lib/search/text-panel/text-panel.component.scss +24 -24
  105. package/src/lib/steps/steps.component.scss +97 -97
  106. package/src/lib/styles/styles.scss +232 -232
@@ -93,7 +93,7 @@ export class ImageComponent {
93
93
  },
94
94
  error: (error) => {
95
95
  this.initLoading(0);
96
- console.error(error);
96
+ // console.error(error);
97
97
  },
98
98
  });
99
99
  }
@@ -106,7 +106,7 @@ export class ImageComponent {
106
106
  },
107
107
  error: (error) => {
108
108
  this.initLoading(0);
109
- console.error(error);
109
+ // console.error(error);
110
110
  },
111
111
  });
112
112
  }
@@ -203,231 +203,231 @@ export class ImageComponent {
203
203
  }
204
204
  }
205
205
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ImageComponent, deps: [{ token: i1.HttpClient }, { token: i2.ActionService }, { token: i0.Renderer2 }, { token: i3.DatePipe }], target: i0.ɵɵFactoryTarget.Component }); }
206
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ImageComponent, isStandalone: true, selector: "form-image", inputs: { field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "imageCompRef", first: true, predicate: ["imageComp"], descendants: true, read: ElementRef }], ngImport: i0, template: `<p-fileUpload
207
- #fu
208
- auto
209
- [name]="props.name"
210
- [url]="props.url"
211
- [method]="props.method ?? 'post'"
212
- accept="image/*"
213
- [withCredentials]="props.withCredentials"
214
- [maxFileSize]="props.maxFileSize"
215
- [styleClass]="props.styleClass"
216
- [previewWidth]="props.previewWidth ?? 50"
217
- [mode]="props.mode ?? 'advanced'"
218
- [headers]="props.headers"
219
- [fileLimit]="props.fileLimit"
220
- [customUpload]="props.customUpload ?? true"
221
- [multiple]="props.multiple ?? false"
222
- (onBeforeUpload)="props.onBeforeUpload?.(field()!, $event)"
223
- (onSend)="props.onSend?.(field()!, $event)"
224
- (onUpload)="props.onUpload?.(field()!, $event)"
225
- (onError)="props.onError?.(field()!, $event)"
226
- (onClear)="props.onClear?.(field()!, $event)"
227
- (onRemove)="props.onRemove?.(field()!, $event)"
228
- (onSelect)="props.onSelect?.(field()!, $event)"
229
- (onProgress)="props.onProgress?.(field()!, $event)"
230
- (uploadHandler)="uploadHandler(field()!, $event, fu)">
231
- <ng-template
232
- #header
233
- let-chooseCallback="chooseCallback">
234
- <div
235
- #imageComp
236
- [class]="'flex justify-center w-full upload-btn' + (field()?.fieldControl?.disabled ? ' upload-disable' : '')"
237
- (click)="choose($event, chooseCallback)">
238
- <span
239
- ><span
240
- style="font-size: 12px; margin-right: 2.5px"
241
- [class]="'pi' + (loading ? ' pi-spin pi-spinner' : ' pi-upload')"></span
242
- >{{ (loading ? 'modal.uploading' : 'modal.selectFile') | translate }}</span
243
- >
244
- </div>
245
- </ng-template>
246
- <ng-template #content>
247
- @if (imageList.length > 0) {
248
- @if (!props.imageMode) {
249
- @for (image of imageList; track image; let index = $index) {
250
- <div class="flex justify-between items-center file-item">
251
- <p-image
252
- [src]="'https://hrimage.myfoodiepet.com//' + image"
253
- [preview]="true"
254
- (onShow)="ajustedImage($event)"
255
- alt="Image">
256
- <ng-template #indicator>
257
- <span class="file-name">{{ image }}</span>
258
- </ng-template>
259
- <ng-template #image>
260
- <span class="file-name">{{ image }}</span>
261
- </ng-template>
262
- </p-image>
263
- @if (!field()?.fieldControl?.disabled) {
264
- <p-button
265
- icon="pi pi-times"
266
- severity="danger"
267
- size="small"
268
- (onClick)="deleteHandler($event, image, index)"
269
- [text]="true" />
270
- }
271
- </div>
272
- }
273
- } @else {
274
- <div class="flex gap-2 mt-1 flex-wrap">
275
- @for (image of imageList; track image; let index = $index) {
276
- <div
277
- class="border"
278
- [style]="{ height: imageHeight + 10 + 'px' }">
279
- <p-image
280
- [src]="'https://hrimage.myfoodiepet.com//' + image"
281
- [preview]="true"
282
- [appendTo]="'body'"
283
- (onShow)="ajustedImage($event)"
284
- alt="Image">
285
- <ng-template #indicator>
286
- @if (!field()?.fieldControl?.disabled) {
287
- <div [style]="{ position: 'relative', width: imageWidth + 10 + 'px', height: imageHeight + 10 + 'px' }">
288
- <div
289
- style="position: absolute; top: 0; right: 0; z-index: 999; background: red; padding: 1px;"
290
- (click)="deleteHandler($event, image, index)">
291
- <i class="pi pi-times text-[12px]"></i>
292
- </div>
293
- </div>
294
- }
295
- </ng-template>
296
- <ng-template #image>
297
- <div class="p-2">
298
- <img
299
- [src]="'https://hrimage.myfoodiepet.com//' + image"
300
- alt="image"
301
- [style]="{ width: imageWidth + 'px', height: imageHeight + 'px', objectFit: 'cover' }" />
302
- </div>
303
- </ng-template>
304
- <ng-template #preview let-style="style">
305
- <img [src]="'https://hrimage.myfoodiepet.com//' + image" alt="image" [style]="style" style="max-height: 80vh!important;" />
306
- </ng-template>
307
- </p-image>
308
- </div>
309
- }
310
- </div>
311
- }
312
- }
313
- </ng-template>
314
- <ng-template #file> </ng-template>
206
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ImageComponent, isStandalone: true, selector: "form-image", inputs: { field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "imageCompRef", first: true, predicate: ["imageComp"], descendants: true, read: ElementRef }], ngImport: i0, template: `<p-fileUpload
207
+ #fu
208
+ auto
209
+ [name]="props.name"
210
+ [url]="props.url"
211
+ [method]="props.method ?? 'post'"
212
+ accept="image/*"
213
+ [withCredentials]="props.withCredentials"
214
+ [maxFileSize]="props.maxFileSize"
215
+ [styleClass]="props.styleClass"
216
+ [previewWidth]="props.previewWidth ?? 50"
217
+ [mode]="props.mode ?? 'advanced'"
218
+ [headers]="props.headers"
219
+ [fileLimit]="props.fileLimit"
220
+ [customUpload]="props.customUpload ?? true"
221
+ [multiple]="props.multiple ?? false"
222
+ (onBeforeUpload)="props.onBeforeUpload?.(field()!, $event)"
223
+ (onSend)="props.onSend?.(field()!, $event)"
224
+ (onUpload)="props.onUpload?.(field()!, $event)"
225
+ (onError)="props.onError?.(field()!, $event)"
226
+ (onClear)="props.onClear?.(field()!, $event)"
227
+ (onRemove)="props.onRemove?.(field()!, $event)"
228
+ (onSelect)="props.onSelect?.(field()!, $event)"
229
+ (onProgress)="props.onProgress?.(field()!, $event)"
230
+ (uploadHandler)="uploadHandler(field()!, $event, fu)">
231
+ <ng-template
232
+ #header
233
+ let-chooseCallback="chooseCallback">
234
+ <div
235
+ #imageComp
236
+ [class]="'flex justify-center w-full upload-btn' + (field()?.fieldControl?.disabled ? ' upload-disable' : '')"
237
+ (click)="choose($event, chooseCallback)">
238
+ <span
239
+ ><span
240
+ style="font-size: 12px; margin-right: 2.5px"
241
+ [class]="'pi' + (loading ? ' pi-spin pi-spinner' : ' pi-upload')"></span
242
+ >{{ (loading ? 'modal.uploading' : 'modal.selectFile') | translate }}</span
243
+ >
244
+ </div>
245
+ </ng-template>
246
+ <ng-template #content>
247
+ @if (imageList.length > 0) {
248
+ @if (!props.imageMode) {
249
+ @for (image of imageList; track image; let index = $index) {
250
+ <div class="flex justify-between items-center file-item">
251
+ <p-image
252
+ [src]="'https://hrimage.myfoodiepet.com//' + image"
253
+ [preview]="true"
254
+ (onShow)="ajustedImage($event)"
255
+ alt="Image">
256
+ <ng-template #indicator>
257
+ <span class="file-name">{{ image }}</span>
258
+ </ng-template>
259
+ <ng-template #image>
260
+ <span class="file-name">{{ image }}</span>
261
+ </ng-template>
262
+ </p-image>
263
+ @if (!field()?.fieldControl?.disabled) {
264
+ <p-button
265
+ icon="pi pi-times"
266
+ severity="danger"
267
+ size="small"
268
+ (onClick)="deleteHandler($event, image, index)"
269
+ [text]="true" />
270
+ }
271
+ </div>
272
+ }
273
+ } @else {
274
+ <div class="flex gap-2 mt-1 flex-wrap">
275
+ @for (image of imageList; track image; let index = $index) {
276
+ <div
277
+ class="border"
278
+ [style]="{ height: imageHeight + 10 + 'px' }">
279
+ <p-image
280
+ [src]="'https://hrimage.myfoodiepet.com//' + image"
281
+ [preview]="true"
282
+ [appendTo]="'body'"
283
+ (onShow)="ajustedImage($event)"
284
+ alt="Image">
285
+ <ng-template #indicator>
286
+ @if (!field()?.fieldControl?.disabled) {
287
+ <div [style]="{ position: 'relative', width: imageWidth + 10 + 'px', height: imageHeight + 10 + 'px' }">
288
+ <div
289
+ style="position: absolute; top: 0; right: 0; z-index: 999; background: red; padding: 1px;"
290
+ (click)="deleteHandler($event, image, index)">
291
+ <i class="pi pi-times text-[12px]"></i>
292
+ </div>
293
+ </div>
294
+ }
295
+ </ng-template>
296
+ <ng-template #image>
297
+ <div class="p-2">
298
+ <img
299
+ [src]="'https://hrimage.myfoodiepet.com//' + image"
300
+ alt="image"
301
+ [style]="{ width: imageWidth + 'px', height: imageHeight + 'px', objectFit: 'cover' }" />
302
+ </div>
303
+ </ng-template>
304
+ <ng-template #preview let-style="style">
305
+ <img [src]="'https://hrimage.myfoodiepet.com//' + image" alt="image" [style]="style" style="max-height: 80vh!important;" />
306
+ </ng-template>
307
+ </p-image>
308
+ </div>
309
+ }
310
+ </div>
311
+ }
312
+ }
313
+ </ng-template>
314
+ <ng-template #file> </ng-template>
315
315
  </p-fileUpload>`, isInline: true, styles: [":host ::ng-deep .p-disabled,:host ::ng-deep .p-component:disabled{opacity:1}:host ::ng-deep .p-inputtext{border-width:0;border-radius:0;box-shadow:none;background:#fff;padding:0}:host ::ng-deep .p-inputtext:not(.ng-valid).ng-dirty{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .p-inputtext:not(:disabled):hover{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-inputtext:not(:disabled).ng-hovered{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-inputtext:focus{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .ng-hovered .p-autocomplete-input:not(.p-disabled){border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-select-label{padding:0}:host ::ng-deep .p-select{border-width:0;border-radius:0;box-shadow:none;background:#fff}:host ::ng-deep .p-select .p-select-dropdown{display:none}:host ::ng-deep .p-select .p-select-clear-icon{display:none}:host ::ng-deep .p-select:not(.ng-valid).ng-dirty{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .p-select-open{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-select-open .p-select-dropdown{display:flex}:host ::ng-deep .p-select-open .p-select-clear-icon{display:flex}:host ::ng-deep .p-select:hover{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-select:hover .p-select-dropdown{display:flex}:host ::ng-deep .p-select:hover .p-select-clear-icon{display:flex}:host ::ng-deep .p-select.ng-hovered{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-select.ng-hovered .p-select-dropdown{display:flex}:host ::ng-deep .p-select.ng-hovered .p-select-clear-icon{display:flex}:host ::ng-deep .p-multiselect-label{padding:0}:host ::ng-deep .p-multiselect{border-width:0;border-radius:0;background:#fff;box-shadow:none}:host ::ng-deep .p-multiselect .p-multiselect-dropdown{display:none}:host ::ng-deep .p-multiselect:not(.ng-valid).ng-dirty{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .p-multiselect-open{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-multiselect-open .p-multiselect-dropdown{display:flex}:host ::ng-deep .p-multiselect:not(.p-disabled).p-focus{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-multiselect:not(.p-disabled).p-focus .p-multiselect-dropdown{display:flex}:host ::ng-deep .p-multiselect:not(.p-disabled):hover{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-multiselect:not(.p-disabled):hover .p-multiselect-dropdown{display:flex}:host ::ng-deep .p-multiselect:not(.p-disabled).ng-hovered{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-multiselect:not(.p-disabled).ng-hovered .p-multiselect-dropdown{display:flex}:host ::ng-deep .p-textarea{border-radius:0;box-shadow:none;padding:0 .25rem;background:#fff;resize:none}:host ::ng-deep .p-textarea:not(.ng-valid).ng-dirty{background:var(--p-red-200)!important;border:1px solid var(--p-red-500)!important}:host ::ng-deep .p-textarea:not(:disabled):hover{border:1px solid var(--p-primary-color);resize:vertical}:host ::ng-deep .p-textarea:not(:disabled).ng-hovered{border:1px solid var(--p-primary-color);resize:vertical}:host ::ng-deep .p-textarea:focus{border:1px solid var(--p-primary-color);resize:vertical}:host ::ng-deep .p-treeselect-label{padding:0}:host ::ng-deep .p-treeselect{border-width:0;border-radius:0;box-shadow:none;background:#fff}:host ::ng-deep .p-treeselect .p-treeselect-dropdown{display:none}:host ::ng-deep .ng-invalid.ng-dirty>.p-treeselect{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .p-treeselect-open{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-treeselect-open .p-treeselect-dropdown{display:flex}:host ::ng-deep .p-treeselect:not(.p-disabled).p-focus{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-treeselect:not(.p-disabled).p-focus .p-treeselect-dropdown{display:flex}:host ::ng-deep .p-treeselect:not(.p-disabled):hover{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-treeselect:not(.p-disabled):hover .p-treeselect-dropdown{display:flex}:host ::ng-deep .ng-hovered>.p-treeselect:not(.p-disabled){border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .ng-hovered>.p-treeselect:not(.p-disabled) .p-treeselect-dropdown{display:flex}:host ::ng-deep .p-menubar{border-width:0;padding:0}:host ::ng-deep .p-menubar-submenu{z-index:3}:host ::ng-deep .p-fileupload-advanced{border-width:0;border-radius:0;background-color:#fff}:host ::ng-deep .p-fileupload-header{padding:0}:host ::ng-deep .p-fileupload-content{padding:0;display:block;border-width:0}:host ::ng-deep .p-inputnumber:not(.ng-valid).ng-dirty>.p-inputtext{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .p-inputnumber.ng-hovered:not(.p-disabled)>.p-inputtext{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .ng-invalid.ng-dirty>.p-datepicker .p-inputtext{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .ng-hovered>.p-datepicker:not(.p-disabled) .p-inputtext{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .cm-editor{border:1px solid #cbd5e1}:host ::ng-deep .cm-editor.cm-focused{outline:none!important;border:1px solid var(--p-primary-color)}:host ::ng-deep .cm-editor:hover{border:1px solid var(--p-primary-color)}:host ::ng-deep .cm-editor.ng-hovered{border:1px solid var(--p-primary-color)}:host ::ng-deep .cm-gutters{background-color:#fff;border:\"none\"}:host ::ng-deep .cm-activeLineGutter{background-color:#fff}\n", ".file-item{border-top:solid 1px #fff}.upload-btn{border:solid 1px transparent}.upload-btn.upload-disable:hover{cursor:default}.upload-btn:not(.upload-disable):hover{border:solid 1px var(--p-primary-color);background:var(--p-primary-50);cursor:pointer}.upload-btn:not(.upload-disable).ng-hovered{border:solid 1px var(--p-primary-color);background:var(--p-primary-50);cursor:pointer}.file-name{font-size:12px;cursor:pointer;color:var(--p-primary-color)!important}:is() .p-image-preview-mask{position:inherit;opacity:1;justify-content:left;color:#334155}:is() p-image .p-image{display:inline-block;color:var(--p-primary-color)!important}\n"], dependencies: [{ kind: "component", type: FileUpload, selector: "p-fileupload, p-fileUpload", inputs: ["name", "url", "method", "multiple", "accept", "disabled", "auto", "withCredentials", "maxFileSize", "invalidFileSizeMessageSummary", "invalidFileSizeMessageDetail", "invalidFileTypeMessageSummary", "invalidFileTypeMessageDetail", "invalidFileLimitMessageDetail", "invalidFileLimitMessageSummary", "style", "styleClass", "previewWidth", "chooseLabel", "uploadLabel", "cancelLabel", "chooseIcon", "uploadIcon", "cancelIcon", "showUploadButton", "showCancelButton", "mode", "headers", "customUpload", "fileLimit", "uploadStyleClass", "cancelStyleClass", "removeStyleClass", "chooseStyleClass", "chooseButtonProps", "uploadButtonProps", "cancelButtonProps", "files"], outputs: ["onBeforeUpload", "onSend", "onUpload", "onError", "onClear", "onRemove", "onSelect", "onProgress", "uploadHandler", "onImageError", "onRemoveUploadedFile"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i4.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "fluid", "buttonProps"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: Image, selector: "p-image", inputs: ["imageClass", "imageStyle", "styleClass", "style", "src", "srcSet", "sizes", "previewImageSrc", "previewImageSrcSet", "previewImageSizes", "alt", "width", "height", "loading", "appendTo", "preview", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide", "onImageError"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
316
316
  }
317
317
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ImageComponent, decorators: [{
318
318
  type: Component,
319
- args: [{ selector: 'form-image', standalone: true, imports: [FileUpload, ButtonModule, Image, ReactiveFormsModule, TranslatePipe], template: `<p-fileUpload
320
- #fu
321
- auto
322
- [name]="props.name"
323
- [url]="props.url"
324
- [method]="props.method ?? 'post'"
325
- accept="image/*"
326
- [withCredentials]="props.withCredentials"
327
- [maxFileSize]="props.maxFileSize"
328
- [styleClass]="props.styleClass"
329
- [previewWidth]="props.previewWidth ?? 50"
330
- [mode]="props.mode ?? 'advanced'"
331
- [headers]="props.headers"
332
- [fileLimit]="props.fileLimit"
333
- [customUpload]="props.customUpload ?? true"
334
- [multiple]="props.multiple ?? false"
335
- (onBeforeUpload)="props.onBeforeUpload?.(field()!, $event)"
336
- (onSend)="props.onSend?.(field()!, $event)"
337
- (onUpload)="props.onUpload?.(field()!, $event)"
338
- (onError)="props.onError?.(field()!, $event)"
339
- (onClear)="props.onClear?.(field()!, $event)"
340
- (onRemove)="props.onRemove?.(field()!, $event)"
341
- (onSelect)="props.onSelect?.(field()!, $event)"
342
- (onProgress)="props.onProgress?.(field()!, $event)"
343
- (uploadHandler)="uploadHandler(field()!, $event, fu)">
344
- <ng-template
345
- #header
346
- let-chooseCallback="chooseCallback">
347
- <div
348
- #imageComp
349
- [class]="'flex justify-center w-full upload-btn' + (field()?.fieldControl?.disabled ? ' upload-disable' : '')"
350
- (click)="choose($event, chooseCallback)">
351
- <span
352
- ><span
353
- style="font-size: 12px; margin-right: 2.5px"
354
- [class]="'pi' + (loading ? ' pi-spin pi-spinner' : ' pi-upload')"></span
355
- >{{ (loading ? 'modal.uploading' : 'modal.selectFile') | translate }}</span
356
- >
357
- </div>
358
- </ng-template>
359
- <ng-template #content>
360
- @if (imageList.length > 0) {
361
- @if (!props.imageMode) {
362
- @for (image of imageList; track image; let index = $index) {
363
- <div class="flex justify-between items-center file-item">
364
- <p-image
365
- [src]="'https://hrimage.myfoodiepet.com//' + image"
366
- [preview]="true"
367
- (onShow)="ajustedImage($event)"
368
- alt="Image">
369
- <ng-template #indicator>
370
- <span class="file-name">{{ image }}</span>
371
- </ng-template>
372
- <ng-template #image>
373
- <span class="file-name">{{ image }}</span>
374
- </ng-template>
375
- </p-image>
376
- @if (!field()?.fieldControl?.disabled) {
377
- <p-button
378
- icon="pi pi-times"
379
- severity="danger"
380
- size="small"
381
- (onClick)="deleteHandler($event, image, index)"
382
- [text]="true" />
383
- }
384
- </div>
385
- }
386
- } @else {
387
- <div class="flex gap-2 mt-1 flex-wrap">
388
- @for (image of imageList; track image; let index = $index) {
389
- <div
390
- class="border"
391
- [style]="{ height: imageHeight + 10 + 'px' }">
392
- <p-image
393
- [src]="'https://hrimage.myfoodiepet.com//' + image"
394
- [preview]="true"
395
- [appendTo]="'body'"
396
- (onShow)="ajustedImage($event)"
397
- alt="Image">
398
- <ng-template #indicator>
399
- @if (!field()?.fieldControl?.disabled) {
400
- <div [style]="{ position: 'relative', width: imageWidth + 10 + 'px', height: imageHeight + 10 + 'px' }">
401
- <div
402
- style="position: absolute; top: 0; right: 0; z-index: 999; background: red; padding: 1px;"
403
- (click)="deleteHandler($event, image, index)">
404
- <i class="pi pi-times text-[12px]"></i>
405
- </div>
406
- </div>
407
- }
408
- </ng-template>
409
- <ng-template #image>
410
- <div class="p-2">
411
- <img
412
- [src]="'https://hrimage.myfoodiepet.com//' + image"
413
- alt="image"
414
- [style]="{ width: imageWidth + 'px', height: imageHeight + 'px', objectFit: 'cover' }" />
415
- </div>
416
- </ng-template>
417
- <ng-template #preview let-style="style">
418
- <img [src]="'https://hrimage.myfoodiepet.com//' + image" alt="image" [style]="style" style="max-height: 80vh!important;" />
419
- </ng-template>
420
- </p-image>
421
- </div>
422
- }
423
- </div>
424
- }
425
- }
426
- </ng-template>
427
- <ng-template #file> </ng-template>
319
+ args: [{ selector: 'form-image', standalone: true, imports: [FileUpload, ButtonModule, Image, ReactiveFormsModule, TranslatePipe], template: `<p-fileUpload
320
+ #fu
321
+ auto
322
+ [name]="props.name"
323
+ [url]="props.url"
324
+ [method]="props.method ?? 'post'"
325
+ accept="image/*"
326
+ [withCredentials]="props.withCredentials"
327
+ [maxFileSize]="props.maxFileSize"
328
+ [styleClass]="props.styleClass"
329
+ [previewWidth]="props.previewWidth ?? 50"
330
+ [mode]="props.mode ?? 'advanced'"
331
+ [headers]="props.headers"
332
+ [fileLimit]="props.fileLimit"
333
+ [customUpload]="props.customUpload ?? true"
334
+ [multiple]="props.multiple ?? false"
335
+ (onBeforeUpload)="props.onBeforeUpload?.(field()!, $event)"
336
+ (onSend)="props.onSend?.(field()!, $event)"
337
+ (onUpload)="props.onUpload?.(field()!, $event)"
338
+ (onError)="props.onError?.(field()!, $event)"
339
+ (onClear)="props.onClear?.(field()!, $event)"
340
+ (onRemove)="props.onRemove?.(field()!, $event)"
341
+ (onSelect)="props.onSelect?.(field()!, $event)"
342
+ (onProgress)="props.onProgress?.(field()!, $event)"
343
+ (uploadHandler)="uploadHandler(field()!, $event, fu)">
344
+ <ng-template
345
+ #header
346
+ let-chooseCallback="chooseCallback">
347
+ <div
348
+ #imageComp
349
+ [class]="'flex justify-center w-full upload-btn' + (field()?.fieldControl?.disabled ? ' upload-disable' : '')"
350
+ (click)="choose($event, chooseCallback)">
351
+ <span
352
+ ><span
353
+ style="font-size: 12px; margin-right: 2.5px"
354
+ [class]="'pi' + (loading ? ' pi-spin pi-spinner' : ' pi-upload')"></span
355
+ >{{ (loading ? 'modal.uploading' : 'modal.selectFile') | translate }}</span
356
+ >
357
+ </div>
358
+ </ng-template>
359
+ <ng-template #content>
360
+ @if (imageList.length > 0) {
361
+ @if (!props.imageMode) {
362
+ @for (image of imageList; track image; let index = $index) {
363
+ <div class="flex justify-between items-center file-item">
364
+ <p-image
365
+ [src]="'https://hrimage.myfoodiepet.com//' + image"
366
+ [preview]="true"
367
+ (onShow)="ajustedImage($event)"
368
+ alt="Image">
369
+ <ng-template #indicator>
370
+ <span class="file-name">{{ image }}</span>
371
+ </ng-template>
372
+ <ng-template #image>
373
+ <span class="file-name">{{ image }}</span>
374
+ </ng-template>
375
+ </p-image>
376
+ @if (!field()?.fieldControl?.disabled) {
377
+ <p-button
378
+ icon="pi pi-times"
379
+ severity="danger"
380
+ size="small"
381
+ (onClick)="deleteHandler($event, image, index)"
382
+ [text]="true" />
383
+ }
384
+ </div>
385
+ }
386
+ } @else {
387
+ <div class="flex gap-2 mt-1 flex-wrap">
388
+ @for (image of imageList; track image; let index = $index) {
389
+ <div
390
+ class="border"
391
+ [style]="{ height: imageHeight + 10 + 'px' }">
392
+ <p-image
393
+ [src]="'https://hrimage.myfoodiepet.com//' + image"
394
+ [preview]="true"
395
+ [appendTo]="'body'"
396
+ (onShow)="ajustedImage($event)"
397
+ alt="Image">
398
+ <ng-template #indicator>
399
+ @if (!field()?.fieldControl?.disabled) {
400
+ <div [style]="{ position: 'relative', width: imageWidth + 10 + 'px', height: imageHeight + 10 + 'px' }">
401
+ <div
402
+ style="position: absolute; top: 0; right: 0; z-index: 999; background: red; padding: 1px;"
403
+ (click)="deleteHandler($event, image, index)">
404
+ <i class="pi pi-times text-[12px]"></i>
405
+ </div>
406
+ </div>
407
+ }
408
+ </ng-template>
409
+ <ng-template #image>
410
+ <div class="p-2">
411
+ <img
412
+ [src]="'https://hrimage.myfoodiepet.com//' + image"
413
+ alt="image"
414
+ [style]="{ width: imageWidth + 'px', height: imageHeight + 'px', objectFit: 'cover' }" />
415
+ </div>
416
+ </ng-template>
417
+ <ng-template #preview let-style="style">
418
+ <img [src]="'https://hrimage.myfoodiepet.com//' + image" alt="image" [style]="style" style="max-height: 80vh!important;" />
419
+ </ng-template>
420
+ </p-image>
421
+ </div>
422
+ }
423
+ </div>
424
+ }
425
+ }
426
+ </ng-template>
427
+ <ng-template #file> </ng-template>
428
428
  </p-fileUpload>`, styles: [":host ::ng-deep .p-disabled,:host ::ng-deep .p-component:disabled{opacity:1}:host ::ng-deep .p-inputtext{border-width:0;border-radius:0;box-shadow:none;background:#fff;padding:0}:host ::ng-deep .p-inputtext:not(.ng-valid).ng-dirty{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .p-inputtext:not(:disabled):hover{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-inputtext:not(:disabled).ng-hovered{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-inputtext:focus{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .ng-hovered .p-autocomplete-input:not(.p-disabled){border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-select-label{padding:0}:host ::ng-deep .p-select{border-width:0;border-radius:0;box-shadow:none;background:#fff}:host ::ng-deep .p-select .p-select-dropdown{display:none}:host ::ng-deep .p-select .p-select-clear-icon{display:none}:host ::ng-deep .p-select:not(.ng-valid).ng-dirty{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .p-select-open{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-select-open .p-select-dropdown{display:flex}:host ::ng-deep .p-select-open .p-select-clear-icon{display:flex}:host ::ng-deep .p-select:hover{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-select:hover .p-select-dropdown{display:flex}:host ::ng-deep .p-select:hover .p-select-clear-icon{display:flex}:host ::ng-deep .p-select.ng-hovered{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-select.ng-hovered .p-select-dropdown{display:flex}:host ::ng-deep .p-select.ng-hovered .p-select-clear-icon{display:flex}:host ::ng-deep .p-multiselect-label{padding:0}:host ::ng-deep .p-multiselect{border-width:0;border-radius:0;background:#fff;box-shadow:none}:host ::ng-deep .p-multiselect .p-multiselect-dropdown{display:none}:host ::ng-deep .p-multiselect:not(.ng-valid).ng-dirty{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .p-multiselect-open{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-multiselect-open .p-multiselect-dropdown{display:flex}:host ::ng-deep .p-multiselect:not(.p-disabled).p-focus{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-multiselect:not(.p-disabled).p-focus .p-multiselect-dropdown{display:flex}:host ::ng-deep .p-multiselect:not(.p-disabled):hover{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-multiselect:not(.p-disabled):hover .p-multiselect-dropdown{display:flex}:host ::ng-deep .p-multiselect:not(.p-disabled).ng-hovered{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-multiselect:not(.p-disabled).ng-hovered .p-multiselect-dropdown{display:flex}:host ::ng-deep .p-textarea{border-radius:0;box-shadow:none;padding:0 .25rem;background:#fff;resize:none}:host ::ng-deep .p-textarea:not(.ng-valid).ng-dirty{background:var(--p-red-200)!important;border:1px solid var(--p-red-500)!important}:host ::ng-deep .p-textarea:not(:disabled):hover{border:1px solid var(--p-primary-color);resize:vertical}:host ::ng-deep .p-textarea:not(:disabled).ng-hovered{border:1px solid var(--p-primary-color);resize:vertical}:host ::ng-deep .p-textarea:focus{border:1px solid var(--p-primary-color);resize:vertical}:host ::ng-deep .p-treeselect-label{padding:0}:host ::ng-deep .p-treeselect{border-width:0;border-radius:0;box-shadow:none;background:#fff}:host ::ng-deep .p-treeselect .p-treeselect-dropdown{display:none}:host ::ng-deep .ng-invalid.ng-dirty>.p-treeselect{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .p-treeselect-open{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-treeselect-open .p-treeselect-dropdown{display:flex}:host ::ng-deep .p-treeselect:not(.p-disabled).p-focus{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-treeselect:not(.p-disabled).p-focus .p-treeselect-dropdown{display:flex}:host ::ng-deep .p-treeselect:not(.p-disabled):hover{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-treeselect:not(.p-disabled):hover .p-treeselect-dropdown{display:flex}:host ::ng-deep .ng-hovered>.p-treeselect:not(.p-disabled){border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .ng-hovered>.p-treeselect:not(.p-disabled) .p-treeselect-dropdown{display:flex}:host ::ng-deep .p-menubar{border-width:0;padding:0}:host ::ng-deep .p-menubar-submenu{z-index:3}:host ::ng-deep .p-fileupload-advanced{border-width:0;border-radius:0;background-color:#fff}:host ::ng-deep .p-fileupload-header{padding:0}:host ::ng-deep .p-fileupload-content{padding:0;display:block;border-width:0}:host ::ng-deep .p-inputnumber:not(.ng-valid).ng-dirty>.p-inputtext{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .p-inputnumber.ng-hovered:not(.p-disabled)>.p-inputtext{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .ng-invalid.ng-dirty>.p-datepicker .p-inputtext{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .ng-hovered>.p-datepicker:not(.p-disabled) .p-inputtext{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .cm-editor{border:1px solid #cbd5e1}:host ::ng-deep .cm-editor.cm-focused{outline:none!important;border:1px solid var(--p-primary-color)}:host ::ng-deep .cm-editor:hover{border:1px solid var(--p-primary-color)}:host ::ng-deep .cm-editor.ng-hovered{border:1px solid var(--p-primary-color)}:host ::ng-deep .cm-gutters{background-color:#fff;border:\"none\"}:host ::ng-deep .cm-activeLineGutter{background-color:#fff}\n", ".file-item{border-top:solid 1px #fff}.upload-btn{border:solid 1px transparent}.upload-btn.upload-disable:hover{cursor:default}.upload-btn:not(.upload-disable):hover{border:solid 1px var(--p-primary-color);background:var(--p-primary-50);cursor:pointer}.upload-btn:not(.upload-disable).ng-hovered{border:solid 1px var(--p-primary-color);background:var(--p-primary-50);cursor:pointer}.file-name{font-size:12px;cursor:pointer;color:var(--p-primary-color)!important}:is() .p-image-preview-mask{position:inherit;opacity:1;justify-content:left;color:#334155}:is() p-image .p-image{display:inline-block;color:var(--p-primary-color)!important}\n"] }]
429
429
  }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.ActionService }, { type: i0.Renderer2 }, { type: i3.DatePipe }], propDecorators: { imageCompRef: [{
430
430
  type: ViewChild,
431
431
  args: ['imageComp', { read: ElementRef, static: false }]
432
432
  }] } });
433
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UudHlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ltbS1lbGVtZW50LXVpL3NyYy9saWIvZm9ybS9mb3JtLXR5cGUvaW1hZ2UudHlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUMzRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdEMsT0FBTyxFQUFzQyxXQUFXLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFdEcsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXBELE9BQU8sRUFBRSxNQUFNLEVBQXdCLE1BQU0sTUFBTSxDQUFDOzs7Ozs7QUE2THBELE1BQU0sT0FBTyxjQUFjO0lBVzFCLFlBQ1MsSUFBZ0IsRUFDaEIsTUFBcUIsRUFDckIsUUFBbUIsRUFDbkIsUUFBa0I7UUFIbEIsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNoQixXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ3JCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQWIzQixVQUFLLEdBQUcsS0FBSyxFQUFhLENBQUM7UUFDM0IsVUFBSyxHQUFlLEVBQUUsQ0FBQztRQUN2QixjQUFTLEdBQWEsRUFBRSxDQUFDO1FBQ3pCLGdCQUFXLEdBQXNCLEVBQUUsQ0FBQztRQUNwQyxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2hCLFlBQU8sR0FBRyxDQUFD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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2lCQTZHTSx3ME1BOUdOLFVBQVUsZzVCQUFFLFlBQVksa2JBQUUsS0FBSyxxV0FBRSxtQkFBbUIsMEJBQUUsYUFBYTs7NEZBaUhqRSxjQUFjO2tCQTVKMUIsU0FBUzsrQkFDQyxZQUFZLGNBQ1YsSUFBSSxXQXlDUCxDQUFDLFVBQVUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLG1CQUFtQixFQUFFLGFBQWEsQ0FBQyxZQUNwRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztpQkE2R007MEpBSTZDLFlBQVk7c0JBQXhFLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBpbnB1dCwgZWZmZWN0LCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBGaWxlVXBsb2FkIH0gZnJvbSAncHJpbWVuZy9maWxldXBsb2FkJztcclxuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9idXR0b24nO1xyXG5pbXBvcnQgeyBJbWFnZSB9IGZyb20gJ3ByaW1lbmcvaW1hZ2UnO1xyXG5pbXBvcnQgeyBGb3JtRmllbGQsIEZpZWxkUHJvcHMsIEF0dHJpYnV0ZUV2ZW50IH0gZnJvbSAnLi4vZm9ybS1maWVsZC9mb3JtLWZpZWxkJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEV2ZW50LCBIdHRwSGVhZGVycywgSHR0cFJlcXVlc3QsIEh0dHBFdmVudFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEFjdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlL2FjdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlUGlwZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgZmlsdGVyLCBmb3JrSm9pbiwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEltYWdlUHJvcHMgZXh0ZW5kcyBGaWVsZFByb3BzIHtcclxuXHR1cmw/OiBzdHJpbmc7XHJcblx0bWV0aG9kPzogJ3Bvc3QnIHwgJ3B1dCc7XHJcblx0d2l0aENyZWRlbnRpYWxzPzogYm9vbGVhbjtcclxuXHRtYXhGaWxlU2l6ZT86IG51bWJlcjtcclxuXHRwcmV2aWV3V2lkdGg/OiBudW1iZXI7XHJcblx0bW9kZT86ICdiYXNpYycgfCAnYWR2YW5jZWQnO1xyXG5cdGhlYWRlcnM/OiBhbnk7XHJcblx0Y3VzdG9tVXBsb2FkPzogYm9vbGVhbjtcclxuXHRmaWxlTGltaXQ/OiBudW1iZXI7XHJcblx0dXBsb2FkU3R5bGVDbGFzcz86IHN0cmluZztcclxuXHRjYW5jZWxTdHlsZUNsYXNzPzogc3RyaW5nO1xyXG5cdHJlbW92ZVN0eWxlQ2xhc3M/OiBzdHJpbmc7XHJcblx0Y2hvb3NlU3R5bGVDbGFzcz86IHN0cmluZztcclxuXHRhZGp1c3RhYmxlPzogYm9vbGVhbjtcclxuXHRpbWFnZU1vZGU/OiBib29sZWFuO1xyXG5cdG11bHRpcGxlPzogYm9vbGVhbjtcclxuXHR3YXRlcm1hcms/OiBib29sZWFuO1xyXG5cdHNpemU/OiAnc21hbGwnIHwgJ2xhcmdlJyB8IHVuZGVmaW5lZDtcclxuXHJcblx0b25CZWZvcmVVcGxvYWQ/OiBBdHRyaWJ1dGVFdmVudDtcclxuXHRvblNlbmQ/OiBBdHRyaWJ1dGVFdmVudDtcclxuXHRvblVwbG9hZD86IEF0dHJpYnV0ZUV2ZW50O1xyXG5cdG9uRXJyb3I/OiBBdHRyaWJ1dGVFdmVudDtcclxuXHRvbkNsZWFyPzogQXR0cmlidXRlRXZlbnQ7XHJcblx0b25SZW1vdmU/OiBBdHRyaWJ1dGVFdmVudDtcclxuXHRvblNlbGVjdD86IEF0dHJpYnV0ZUV2ZW50O1xyXG5cdG9uUHJvZ3Jlc3M/OiBBdHRyaWJ1dGVFdmVudDtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcblx0c2VsZWN0b3I6ICdmb3JtLWltYWdlJyxcclxuXHRzdGFuZGFsb25lOiB0cnVlLFxyXG5cdHN0eWxlczogYFxyXG5cdFx0LmZpbGUtaXRlbSB7XHJcblx0XHRcdGJvcmRlci10b3A6IHNvbGlkIDFweCAjZmZmO1xyXG5cdFx0fVxyXG5cdFx0LnVwbG9hZC1idG4ge1xyXG5cdFx0XHRib3JkZXI6IHNvbGlkIDFweCB0cmFuc3BhcmVudDtcclxuXHRcdH1cclxuXHRcdC51cGxvYWQtYnRuLnVwbG9hZC1kaXNhYmxlOmhvdmVyIHtcclxuXHRcdFx0Y3Vyc29yOiBkZWZhdWx0O1xyXG5cdFx0fVxyXG5cdFx0LnVwbG9hZC1idG46bm90KC51cGxvYWQtZGlzYWJsZSk6aG92ZXIge1xyXG5cdFx0XHRib3JkZXI6IHNvbGlkIDFweCB2YXIoLS1wLXByaW1hcnktY29sb3IpO1xyXG5cdFx0XHRiYWNrZ3JvdW5kOiB2YXIoLS1wLXByaW1hcnktNTApO1xyXG5cdFx0XHRjdXJzb3I6IHBvaW50ZXI7XHJcblx0XHR9XHJcblx0XHQudXBsb2FkLWJ0bjpub3QoLnVwbG9hZC1kaXNhYmxlKS5uZy1ob3ZlcmVkIHtcclxuXHRcdFx0Ym9yZGVyOiBzb2xpZCAxcHggdmFyKC0tcC1wcmltYXJ5LWNvbG9yKTtcclxuXHRcdFx0YmFja2dyb3VuZDogdmFyKC0tcC1wcmltYXJ5LTUwKTtcclxuXHRcdFx0Y3Vyc29yOiBwb2ludGVyO1xyXG5cdFx0fVxyXG5cdFx0LmZpbGUtbmFtZSB7XHJcblx0XHRcdGZvbnQtc2l6ZTogMTJweDtcclxuXHRcdFx0Y3Vyc29yOiBwb2ludGVyO1xyXG5cdFx0XHRjb2xvcjogdmFyKC0tcC1wcmltYXJ5LWNvbG9yKSAhaW1wb3J0YW50O1xyXG5cdFx0fVxyXG5cdFx0Omhvc3QgOjpuZy1kZWVwIHtcclxuXHRcdFx0LnAtaW1hZ2UtcHJldmlldy1tYXNrIHtcclxuXHRcdFx0XHRwb3NpdGlvbjogaW5oZXJpdDtcclxuXHRcdFx0XHRvcGFjaXR5OiAxO1xyXG5cdFx0XHRcdGp1c3RpZnktY29udGVudDogbGVmdDtcclxuXHRcdFx0XHRjb2xvcjogIzMzNDE1NTtcclxuXHRcdFx0fVxyXG5cdFx0XHRwLWltYWdlIHtcclxuXHRcdFx0XHQucC1pbWFnZSB7XHJcblx0XHRcdFx0XHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcblx0XHRcdFx0XHRjb2xvcjogdmFyKC0tcC1wcmltYXJ5LWNvbG9yKSAhaW1wb3J0YW50O1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdGAsXHJcblx0aW1wb3J0czogW0ZpbGVVcGxvYWQsIEJ1dHRvbk1vZHVsZSwgSW1hZ2UsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIFRyYW5zbGF0ZVBpcGVdLFxyXG5cdHRlbXBsYXRlOiBgPHAtZmlsZVVwbG9hZFxyXG5cdFx0I2Z1XHJcblx0XHRhdXRvXHJcblx0XHRbbmFtZV09XCJwcm9wcy5uYW1lXCJcclxuXHRcdFt1cmxdPVwicHJvcHMudXJsXCJcclxuXHRcdFttZXRob2RdPVwicHJvcHMubWV0aG9kID8/ICdwb3N0J1wiXHJcblx0XHRhY2NlcHQ9XCJpbWFnZS8qXCJcclxuXHRcdFt3aXRoQ3JlZGVudGlhbHNdPVwicHJvcHMud2l0aENyZWRlbnRpYWxzXCJcclxuXHRcdFttYXhGaWxlU2l6ZV09XCJwcm9wcy5tYXhGaWxlU2l6ZVwiXHJcblx0XHRbc3R5bGVDbGFzc109XCJwcm9wcy5zdHlsZUNsYXNzXCJcclxuXHRcdFtwcmV2aWV3V2lkdGhdPVwicHJvcHMucHJldmlld1dpZHRoID8/IDUwXCJcclxuXHRcdFttb2RlXT1cInByb3BzLm1vZGUgPz8gJ2FkdmFuY2VkJ1wiXHJcblx0XHRbaGVhZGVyc109XCJwcm9wcy5oZWFkZXJzXCJcclxuXHRcdFtmaWxlTGltaXRdPVwicHJvcHMuZmlsZUxpbWl0XCJcclxuXHRcdFtjdXN0b21VcGxvYWRdPVwicHJvcHMuY3VzdG9tVXBsb2FkID8/IHRydWVcIlxyXG5cdFx0W211bHRpcGxlXT1cInByb3BzLm11bHRpcGxlID8/IGZhbHNlXCJcclxuXHRcdChvbkJlZm9yZVVwbG9hZCk9XCJwcm9wcy5vbkJlZm9yZVVwbG9hZD8uKGZpZWxkKCkhLCAkZXZlbnQpXCJcclxuXHRcdChvblNlbmQpPVwicHJvcHMub25TZW5kPy4oZmllbGQoKSEsICRldmVudClcIlxyXG5cdFx0KG9uVXBsb2FkKT1cInByb3BzLm9uVXBsb2FkPy4oZmllbGQoKSEsICRldmVudClcIlxyXG5cdFx0KG9uRXJyb3IpPVwicHJvcHMub25FcnJvcj8uKGZpZWxkKCkhLCAkZXZlbnQpXCJcclxuXHRcdChvbkNsZWFyKT1cInByb3BzLm9uQ2xlYXI/LihmaWVsZCgpISwgJGV2ZW50KVwiXHJcblx0XHQob25SZW1vdmUpPVwicHJvcHMub25SZW1vdmU/LihmaWVsZCgpISwgJGV2ZW50KVwiXHJcblx0XHQob25TZWxlY3QpPVwicHJvcHMub25TZWxlY3Q/LihmaWVsZCgpISwgJGV2ZW50KVwiXHJcblx0XHQob25Qcm9ncmVzcyk9XCJwcm9wcy5vblByb2dyZXNzPy4oZmllbGQoKSEsICRldmVudClcIlxyXG5cdFx0KHVwbG9hZEhhbmRsZXIpPVwidXBsb2FkSGFuZGxlcihmaWVsZCgpISwgJGV2ZW50LCBmdSlcIj5cclxuXHRcdDxuZy10ZW1wbGF0ZVxyXG5cdFx0XHQjaGVhZGVyXHJcblx0XHRcdGxldC1jaG9vc2VDYWxsYmFjaz1cImNob29zZUNhbGxiYWNrXCI+XHJcblx0XHRcdDxkaXZcclxuXHRcdFx0XHQjaW1hZ2VDb21wXHJcblx0XHRcdFx0W2NsYXNzXT1cIidmbGV4IGp1c3RpZnktY2VudGVyIHctZnVsbCB1cGxvYWQtYnRuJyArIChmaWVsZCgpPy5maWVsZENvbnRyb2w/LmRpc2FibGVkID8gJyB1cGxvYWQtZGlzYWJsZScgOiAnJylcIlxyXG5cdFx0XHRcdChjbGljayk9XCJjaG9vc2UoJGV2ZW50LCBjaG9vc2VDYWxsYmFjaylcIj5cclxuXHRcdFx0XHQ8c3BhblxyXG5cdFx0XHRcdFx0PjxzcGFuXHJcblx0XHRcdFx0XHRcdHN0eWxlPVwiZm9udC1zaXplOiAxMnB4OyBtYXJnaW4tcmlnaHQ6IDIuNXB4XCJcclxuXHRcdFx0XHRcdFx0W2NsYXNzXT1cIidwaScgKyAobG9hZGluZyA/ICcgcGktc3BpbiBwaS1zcGlubmVyJyA6ICcgcGktdXBsb2FkJylcIj48L3NwYW5cclxuXHRcdFx0XHRcdD57eyAobG9hZGluZyA/ICdtb2RhbC51cGxvYWRpbmcnIDogJ21vZGFsLnNlbGVjdEZpbGUnKSB8IHRyYW5zbGF0ZSB9fTwvc3BhblxyXG5cdFx0XHRcdD5cclxuXHRcdFx0PC9kaXY+XHJcblx0XHQ8L25nLXRlbXBsYXRlPlxyXG5cdFx0PG5nLXRlbXBsYXRlICNjb250ZW50PlxyXG5cdFx0XHRAaWYgKGltYWdlTGlzdC5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0QGlmICghcHJvcHMuaW1hZ2VNb2RlKSB7XHJcblx0XHRcdFx0XHRAZm9yIChpbWFnZSBvZiBpbWFnZUxpc3Q7IHRyYWNrIGltYWdlOyBsZXQgaW5kZXggPSAkaW5kZXgpIHtcclxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBmaWxlLWl0ZW1cIj5cclxuXHRcdFx0XHRcdFx0XHQ8cC1pbWFnZVxyXG5cdFx0XHRcdFx0XHRcdFx0W3NyY109XCInaHR0cHM6Ly9ocmltYWdlLm15Zm9vZGllcGV0LmNvbS8vJyArIGltYWdlXCJcclxuXHRcdFx0XHRcdFx0XHRcdFtwcmV2aWV3XT1cInRydWVcIlxyXG5cdFx0XHRcdFx0XHRcdFx0KG9uU2hvdyk9XCJhanVzdGVkSW1hZ2UoJGV2ZW50KVwiXHJcblx0XHRcdFx0XHRcdFx0XHRhbHQ9XCJJbWFnZVwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0PG5nLXRlbXBsYXRlICNpbmRpY2F0b3I+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiZmlsZS1uYW1lXCI+e3sgaW1hZ2UgfX08L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L25nLXRlbXBsYXRlPlxyXG5cdFx0XHRcdFx0XHRcdFx0PG5nLXRlbXBsYXRlICNpbWFnZT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJmaWxlLW5hbWVcIj57eyBpbWFnZSB9fTwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHRcdDwvbmctdGVtcGxhdGU+XHJcblx0XHRcdFx0XHRcdFx0PC9wLWltYWdlPlxyXG5cdFx0XHRcdFx0XHRcdEBpZiAoIWZpZWxkKCk/LmZpZWxkQ29udHJvbD8uZGlzYWJsZWQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdDxwLWJ1dHRvblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRpY29uPVwicGkgcGktdGltZXNcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRzZXZlcml0eT1cImRhbmdlclwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdHNpemU9XCJzbWFsbFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdChvbkNsaWNrKT1cImRlbGV0ZUhhbmRsZXIoJGV2ZW50LCBpbWFnZSwgaW5kZXgpXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0W3RleHRdPVwidHJ1ZVwiIC8+XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9IEBlbHNlIHtcclxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJmbGV4IGdhcC0yIG10LTEgZmxleC13cmFwXCI+XHJcblx0XHRcdFx0XHRcdEBmb3IgKGltYWdlIG9mIGltYWdlTGlzdDsgdHJhY2sgaW1hZ2U7IGxldCBpbmRleCA9ICRpbmRleCkge1xyXG5cdFx0XHRcdFx0XHRcdDxkaXZcclxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzPVwiYm9yZGVyXCJcclxuXHRcdFx0XHRcdFx0XHRcdFtzdHlsZV09XCJ7IGhlaWdodDogaW1hZ2VIZWlnaHQgKyAxMCArICdweCcgfVwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHAtaW1hZ2VcclxuXHRcdFx0XHRcdFx0XHRcdFx0W3NyY109XCInaHR0cHM6Ly9ocmltYWdlLm15Zm9vZGllcGV0LmNvbS8vJyArIGltYWdlXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0W3ByZXZpZXddPVwidHJ1ZVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFthcHBlbmRUb109XCInYm9keSdcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQob25TaG93KT1cImFqdXN0ZWRJbWFnZSgkZXZlbnQpXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0YWx0PVwiSW1hZ2VcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PG5nLXRlbXBsYXRlICNpbmRpY2F0b3I+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0QGlmICghZmllbGQoKT8uZmllbGRDb250cm9sPy5kaXNhYmxlZCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBbc3R5bGVdPVwieyBwb3NpdGlvbjogJ3JlbGF0aXZlJywgd2lkdGg6IGltYWdlV2lkdGggKyAxMCArICdweCcsIGhlaWdodDogaW1hZ2VIZWlnaHQgKyAxMCArICdweCcgfVwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogMDsgcmlnaHQ6IDA7IHotaW5kZXg6IDk5OTsgYmFja2dyb3VuZDogcmVkOyBwYWRkaW5nOiAxcHg7XCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQoY2xpY2spPVwiZGVsZXRlSGFuZGxlcigkZXZlbnQsIGltYWdlLCBpbmRleClcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8aSBjbGFzcz1cInBpIHBpLXRpbWVzIHRleHQtWzEycHhdXCI+PC9pPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0PC9uZy10ZW1wbGF0ZT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PG5nLXRlbXBsYXRlICNpbWFnZT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwicC0yXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8aW1nXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFtzcmNdPVwiJ2h0dHBzOi8vaHJpbWFnZS5teWZvb2RpZXBldC5jb20vLycgKyBpbWFnZVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFsdD1cImltYWdlXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0W3N0eWxlXT1cInsgd2lkdGg6IGltYWdlV2lkdGggKyAncHgnLCBoZWlnaHQ6IGltYWdlSGVpZ2h0ICsgJ3B4Jywgb2JqZWN0Rml0OiAnY292ZXInIH1cIiAvPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L25nLXRlbXBsYXRlPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8bmctdGVtcGxhdGUgI3ByZXZpZXcgbGV0LXN0eWxlPVwic3R5bGVcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8aW1nIFtzcmNdPVwiJ2h0dHBzOi8vaHJpbWFnZS5teWZvb2RpZXBldC5jb20vLycgKyBpbWFnZVwiIGFsdD1cImltYWdlXCIgW3N0eWxlXT1cInN0eWxlXCIgc3R5bGU9XCJtYXgtaGVpZ2h0OiA4MHZoIWltcG9ydGFudDtcIiAvPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC9uZy10ZW1wbGF0ZT5cclxuXHRcdFx0XHRcdFx0XHRcdDwvcC1pbWFnZT5cclxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHQ8L25nLXRlbXBsYXRlPlxyXG5cdFx0PG5nLXRlbXBsYXRlICNmaWxlPiA8L25nLXRlbXBsYXRlPlxyXG5cdDwvcC1maWxlVXBsb2FkPmAsXHJcblx0c3R5bGVVcmw6ICcuLi8uLi9zdHlsZXMvc3R5bGVzLnNjc3MnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgSW1hZ2VDb21wb25lbnQge1xyXG5cdEBWaWV3Q2hpbGQoJ2ltYWdlQ29tcCcsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiBmYWxzZSB9KSBpbWFnZUNvbXBSZWYhOiBFbGVtZW50UmVmO1xyXG5cdGZpZWxkID0gaW5wdXQ8Rm9ybUZpZWxkPigpO1xyXG5cdHByb3BzOiBJbWFnZVByb3BzID0ge307XHJcblx0aW1hZ2VMaXN0OiBzdHJpbmdbXSA9IFtdO1xyXG5cdGRlbGV0ZUhvb2tzOiBPYnNlcnZhYmxlPGFueT5bXSA9IFtdO1xyXG5cdGxvYWRpbmcgPSBmYWxzZTtcclxuXHRjb3VudGVyID0gMDtcclxuXHRpbWFnZVdpZHRoID0gMDtcclxuXHRpbWFnZUhlaWdodCA9IDA7XHJcblxyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0cHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxyXG5cdFx0cHJpdmF0ZSBhY3Rpb246IEFjdGlvblNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcblx0XHRwcml2YXRlIGRhdGVQaXBlOiBEYXRlUGlwZSxcclxuXHQpIHtcclxuXHRcdGVmZmVjdCgoKSA9PiB7XHJcblx0XHRcdGlmICh0aGlzLmZpZWxkKCkpIHtcclxuXHRcdFx0XHR0aGlzLnByb3BzID0gdGhpcy5maWVsZCgpIS5pbWFnZVByb3BzITtcclxuXHRcdFx0XHR0aGlzLmluaXRJbWFnZVNpemUoKTtcclxuXHRcdFx0XHR0aGlzLmhhbmRsZURpc2FibGVkKCk7XHJcblx0XHRcdFx0dGhpcy5oYW5kbGVIb29rQ2hhbmdlKCk7XHJcblx0XHRcdFx0dGhpcy5hZnRlclN1Ym1pdCgpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdGVmZmVjdCgoKSA9PiB7XHJcblx0XHRcdGNvbnN0IGxhYmVsQWN0aW9uID0gdGhpcy5hY3Rpb24uZ2V0RmllbGRMYWJlbEFjdGlvbigpO1xyXG5cdFx0XHRpZiAoIWxhYmVsQWN0aW9uIHx8IGxhYmVsQWN0aW9uPy5rZXkgIT0gdGhpcy5maWVsZCgpPy51dWlkKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChsYWJlbEFjdGlvbi50eXBlID09ICdtb3VzZWVudGVyJykge1xyXG5cdFx0XHRcdHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5pbWFnZUNvbXBSZWYubmF0aXZlRWxlbWVudCwgJ25nLWhvdmVyZWQnKTtcclxuXHRcdFx0fSBlbHNlIGlmIChsYWJlbEFjdGlvbi50eXBlID09ICdtb3VzZWxlYXZlJykge1xyXG5cdFx0XHRcdHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5pbWFnZUNvbXBSZWYubmF0aXZlRWxlbWVudCwgJ25nLWhvdmVyZWQnKTtcclxuXHRcdFx0fSBlbHNlIGlmIChsYWJlbEFjdGlvbi50eXBlID09ICdjbGljaycpIHtcclxuXHRcdFx0XHR0aGlzLmltYWdlQ29tcFJlZi5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0Y2hvb3NlKGV2ZW50OiBhbnksIGNhbGxiYWNrOiBhbnkpIHtcclxuXHRcdGlmICh0aGlzLmZpZWxkKCk/LmZpZWxkQ29udHJvbD8uZGlzYWJsZWQpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0Y2FsbGJhY2soKTtcclxuXHR9XHJcblxyXG5cdGluaXRJbWFnZVNpemUoKSB7XHJcblx0XHRpZiAodGhpcy5wcm9wcy5zaXplICE9PSAnc21hbGwnKSB7XHJcblx0XHRcdHRoaXMuaW1hZ2VXaWR0aCA9IDc1O1xyXG5cdFx0XHR0aGlzLmltYWdlSGVpZ2h0ID0gMTAwO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5pbWFnZVdpZHRoID0gMzU7XHJcblx0XHRcdHRoaXMuaW1hZ2VIZWlnaHQgPSAzNTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHVwbG9hZEltYWdlKGZpbGU6IEZpbGUpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG5cdFx0Y29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcclxuXHRcdGZvcm1EYXRhLmFwcGVuZCgnZmlsZScsIGZpbGUpO1xyXG5cdFx0cmV0dXJuIHRoaXMuaHR0cFxyXG5cdFx0XHQucmVxdWVzdChcclxuXHRcdFx0XHRuZXcgSHR0cFJlcXVlc3QoJ1BPU1QnLCAnaW1hZ2VVcGxvYWQnLCBmb3JtRGF0YSwge1xyXG5cdFx0XHRcdFx0cmVwb3J0UHJvZ3Jlc3M6IHRydWUsXHJcblx0XHRcdFx0XHR3aXRoQ3JlZGVudGlhbHM6IGZhbHNlLFxyXG5cdFx0XHRcdH0pLFxyXG5cdFx0XHQpXHJcblx0XHRcdC5waXBlKGZpbHRlcigocmVzcG9uc2U6IEh0dHBFdmVudDxhbnk+KSA9PiByZXNwb25zZS50eXBlID09IEh0dHBFdmVudFR5cGUuUmVzcG9uc2UpKTtcclxuXHR9XHJcblxyXG5cdGRlbEltYWdlKGltYWdlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuaHR0cC5wb3N0KCdpbWFnZURlbGV0ZScsIHsgZmlkOiBpbWFnZSB9KTtcclxuXHR9XHJcblxyXG5cdHVwbG9hZEhhbmRsZXIoZmllbGQ6IGFueSwgZXZlbnQ6IGFueSwgZnU6IGFueSkge1xyXG5cdFx0dGhpcy5pbml0TG9hZGluZyhldmVudC5maWxlcy5sZW5ndGgpO1xyXG5cdFx0ZXZlbnQuZmlsZXMuZm9yRWFjaChhc3luYyAodjogYW55KSA9PiB7XHJcblx0XHRcdGlmICh0aGlzLnByb3BzLndhdGVybWFyaykge1xyXG5cdFx0XHRcdGxldCBibG9iID0gYXdhaXQgdGhpcy5hZGRXYXRlcm1hcmsodik7XHJcblx0XHRcdFx0Y29uc3QgbmV3RmlsZSA9IG5ldyBGaWxlKFtibG9iXSwgdi5uYW1lLCB7IHR5cGU6IHYudHlwZSB9KTtcclxuXHRcdFx0XHR0aGlzLnVwbG9hZEltYWdlKG5ld0ZpbGUpLnN1YnNjcmliZSh7XHJcblx0XHRcdFx0XHRuZXh0OiAocmVzcG9uc2UpID0+IHtcclxuXHRcdFx0XHRcdFx0dGhpcy51cGRhdGVMb2FkaW5nKGZ1KTtcclxuXHRcdFx0XHRcdFx0dGhpcy5pbWFnZUxpc3Q/LnB1c2gocmVzcG9uc2UuYm9keS5maWQpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLmZpZWxkKCk/LmZpZWxkQ29udHJvbD8uc2V0VmFsdWUodGhpcy5pbWFnZUxpc3QpO1xyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGVycm9yOiAoZXJyb3IpID0+IHtcclxuXHRcdFx0XHRcdFx0dGhpcy5pbml0TG9hZGluZygwKTtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5lcnJvcihlcnJvcik7XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMudXBsb2FkSW1hZ2Uodikuc3Vic2NyaWJlKHtcclxuXHRcdFx0XHRcdG5leHQ6IChyZXNwb25zZSkgPT4ge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnVwZGF0ZUxvYWRpbmcoZnUpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLmltYWdlTGlzdD8ucHVzaChyZXNwb25zZS5ib2R5LmZpZCk7XHJcblx0XHRcdFx0XHRcdHRoaXMuZmllbGQoKT8uZmllbGRDb250cm9sPy5zZXRWYWx1ZSh0aGlzLmltYWdlTGlzdCk7XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0ZXJyb3I6IChlcnJvcikgPT4ge1xyXG5cdFx0XHRcdFx0XHR0aGlzLmluaXRMb2FkaW5nKDApO1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGVycm9yKTtcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0YWRkV2F0ZXJtYXJrKGltYWdlRmlsZTogRmlsZSk6IFByb21pc2U8QmxvYj4ge1xyXG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHRcdFx0Y29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuXHJcblx0XHRcdHJlYWRlci5vbmxvYWQgPSAoZXZlbnQpID0+IHtcclxuXHRcdFx0XHRjb25zdCBpbWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcclxuXHRcdFx0XHRpbWcub25sb2FkID0gKCkgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcblx0XHRcdFx0XHRjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKSE7XHJcblxyXG5cdFx0XHRcdFx0Ly8g6K6+572u55S75biD5aSn5bCP5Li65Zu+54mH5aSn5bCPXHJcblx0XHRcdFx0XHRjYW52YXMud2lkdGggPSBOdW1iZXIoaW1nLndpZHRoKTtcclxuXHRcdFx0XHRcdGNhbnZhcy5oZWlnaHQgPSBOdW1iZXIoaW1nLmhlaWdodCk7XHJcblxyXG5cdFx0XHRcdFx0Ly8g57uY5Yi25Y6f5aeL5Zu+54mHXHJcblx0XHRcdFx0XHRjdHguZHJhd0ltYWdlKGltZywgMCwgMCk7XHJcblxyXG5cdFx0XHRcdFx0Ly8g5re75Yqg5rC05Y2wXHJcblx0XHRcdFx0XHRjdHguZm9udCA9IGBpdGFsaWMgYm9sZCAzMHB4IENvdXJpZXJgO1xyXG5cdFx0XHRcdFx0Y3R4LmZpbGxTdHlsZSA9ICdyZWQnO1xyXG5cdFx0XHRcdFx0Y3R4LnRleHRBbGlnbiA9ICdjZW50ZXInO1xyXG5cdFx0XHRcdFx0Y3R4LnRleHRCYXNlbGluZSA9ICdtaWRkbGUnO1xyXG5cdFx0XHRcdFx0Y29uc3QgY3VycmVudFRpbWUgPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShuZXcgRGF0ZSgpLCAneXl5eS1NTS1kZCBISDptbTpzcycpIHx8ICcnO1xyXG5cdFx0XHRcdFx0Y3R4LmZpbGxUZXh0KGN1cnJlbnRUaW1lLCBjYW52YXMud2lkdGggLyAyLCBjYW52YXMuaGVpZ2h0IC0gNTApO1xyXG5cclxuXHRcdFx0XHRcdC8vIOi9rOaNouS4ukJsb2JcclxuXHRcdFx0XHRcdGNhbnZhcy50b0Jsb2IoXHJcblx0XHRcdFx0XHRcdChibG9iKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0aWYgKGJsb2IpIHtcclxuXHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoYmxvYik7XHJcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdHJlamVjdChuZXcgRXJyb3IoJ0NhbnZhcyB0byBCbG9iIGNvbnZlcnNpb24gZmFpbGVkJykpO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0J2ltYWdlL2pwZWcnLFxyXG5cdFx0XHRcdFx0XHQwLjgsXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH07XHJcblxyXG5cdFx0XHRcdGltZy5zcmMgPSBldmVudC50YXJnZXQ/LnJlc3VsdCBhcyBzdHJpbmc7XHJcblx0XHRcdH07XHJcblxyXG5cdFx0XHRyZWFkZXIub25lcnJvciA9IChlcnJvcikgPT4gcmVqZWN0KGVycm9yKTtcclxuXHRcdFx0cmVhZGVyLnJlYWRBc0RhdGFVUkwoaW1hZ2VGaWxlKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0ZGVsZXRlSGFuZGxlcihldmVudDogYW55LCBpbWFnZTogc3RyaW5nLCBpbmRleDogbnVtYmVyKSB7XHJcblx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHRcdHRoaXMuZGVsZXRlSG9va3MucHVzaCh0aGlzLmRlbEltYWdlKGltYWdlKSk7XHJcblx0XHR0aGlzLmltYWdlTGlzdCA9IHRoaXMuaW1hZ2VMaXN0Py5maWx0ZXIoKHZhbHVlLCBpKSA9PiBpbmRleCAhPSBpKTtcclxuXHRcdHRoaXMuZmllbGQoKT8uZmllbGRDb250cm9sPy5zZXRWYWx1ZSh0aGlzLmltYWdlTGlzdCk7XHJcblx0fVxyXG5cclxuXHRhZnRlclN1Ym1pdCgpIHtcclxuXHRcdHRoaXMuZmllbGQoKT8uZmllbGRDb250cm9sPy5zdWJtaXRDaGFuZ2Uuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xyXG5cdFx0XHRpZiAoQm9vbGVhbih2YWx1ZSkpIHtcclxuXHRcdFx0XHR0aGlzLmRlbGV0ZUhvb2tzLmZvckVhY2goKGhvb2spID0+IGhvb2suc3Vic2NyaWJlKCkpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdGhhbmRsZUhvb2tDaGFuZ2UoKSB7XHJcblx0XHR0aGlzLmZpZWxkKCk/LmZpZWxkQ29udHJvbD8uaG9va0NoYW5nZS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XHJcblx0XHRcdGlmICh2YWx1ZSA9PSBudWxsKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdHRoaXMucHJvcHMub25Ib29rQ2hhbmdlPy4odGhpcy5maWVsZCgpISwgeyB2YWx1ZSB9KTtcclxuXHRcdFx0dGhpcy5pbWFnZUxpc3QgPSBbLi4udmFsdWVdO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRoYW5kbGVEaXNhYmxlZCgpIHtcclxuXHRcdGlmICh0aGlzLnByb3BzPy5kaXNhYmxlZCkge1xyXG5cdFx0XHR0aGlzLmZpZWxkKCkhLmZpZWxkQ29udHJvbCEuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhanVzdGVkSW1hZ2UoZXZlbnQ6IGFueSkge1xyXG5cdFx0aWYgKHRoaXMucHJvcHM/LmFkanVzdGFibGUpIHtcclxuXHRcdFx0Ly8g6Kej5Yaz5Zu+54mH5p+l55yL5pe255qE5pON5L2c5oyJ6ZKu77yI5peL6L2s44CB5pS+5aSn44CB57yp5bCP44CB5YWz6Zet77yJ5LiN5Zyo5bGP5bmV5Y+z5LiK6KeS5pi+56S655qE6Zeu6aKYXHJcblx0XHRcdC8vIGxldCBjaGlsZERpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3AtaW1hZ2UtdG9vbGJhcicpWzBdO1xyXG5cdFx0XHQvLyBsZXQgcGFyZW50RGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcblx0XHRcdC8vIHBhcmVudERpdi5zdHlsZS53aWR0aCA9ICcxMDB2dyc7XHJcblx0XHRcdC8vIHBhcmVudERpdi5zdHlsZS5oZWlnaHQgPSAnMTAwdmgnO1xyXG5cdFx0XHQvLyBwYXJlbnREaXYuc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnO1xyXG5cdFx0XHQvLyBjaGlsZERpdj8ucGFyZW50Tm9kZT8uaW5zZXJ0QmVmb3JlKHBhcmVudERpdiwgY2hpbGREaXYpO1xyXG5cdFx0XHQvLyBwYXJlbnREaXYuYXBwZW5kQ2hpbGQoY2hpbGREaXYpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0aW5pdExvYWRpbmcoY291bnRlcjogbnVtYmVyKSB7XHJcblx0XHR0aGlzLmNvdW50ZXIgPSBjb3VudGVyO1xyXG5cdFx0aWYgKGNvdW50ZXIgPT0gMCkge1xyXG5cdFx0XHR0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdHVwZGF0ZUxvYWRpbmcoZnU6IGFueSkge1xyXG5cdFx0dGhpcy5jb3VudGVyLS07XHJcblx0XHRpZiAodGhpcy5jb3VudGVyID09PSAwKSB7XHJcblx0XHRcdHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG5cdFx0XHRmdS5jbGVhcigpO1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG4iXX0=
433
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UudHlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ltbS1lbGVtZW50LXVpL3NyYy9saWIvZm9ybS9mb3JtLXR5cGUvaW1hZ2UudHlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUMzRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdEMsT0FBTyxFQUFzQyxXQUFXLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFdEcsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXBELE9BQU8sRUFBRSxNQUFNLEVBQXdCLE1BQU0sTUFBTSxDQUFDOzs7Ozs7QUE2THBELE1BQU0sT0FBTyxjQUFjO0lBVzFCLFlBQ1MsSUFBZ0IsRUFDaEIsTUFBcUIsRUFDckIsUUFBbUIsRUFDbkIsUUFBa0I7UUFIbEIsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNoQixXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ3JCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQWIzQixVQUFLLEdBQUcsS0FBSyxFQUFhLENBQUM7UUFDM0IsVUFBSyxHQUFlLEVBQUUsQ0FBQztRQUN2QixjQUFTLEdBQWEsRUFBRSxDQUFDO1FBQ3pCLGdCQUFXLEdBQXNCLEVBQUUsQ0FBQztRQUNwQyxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2hCLFlBQU8sR0FBRyxDQUFD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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztpQkE2R00sdzBNQTlHTixVQUFVLGc1QkFBRSxZQUFZLGtiQUFFLEtBQUsscVdBQUUsbUJBQW1CLDBCQUFFLGFBQWE7OzRGQWlIakUsY0FBYztrQkE1SjFCLFNBQVM7K0JBQ0MsWUFBWSxjQUNWLElBQUksV0F5Q1AsQ0FBQyxVQUFVLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxhQUFhLENBQUMsWUFDcEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7aUJBNkdNOzBKQUk2QyxZQUFZO3NCQUF4RSxTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgaW5wdXQsIGVmZmVjdCwgVmlld0NoaWxkLCBFbGVtZW50UmVmLCBSZW5kZXJlcjIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBGaWxlVXBsb2FkIH0gZnJvbSAncHJpbWVuZy9maWxldXBsb2FkJztcbmltcG9ydCB7IEJ1dHRvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcbmltcG9ydCB7IEltYWdlIH0gZnJvbSAncHJpbWVuZy9pbWFnZSc7XG5pbXBvcnQgeyBGb3JtRmllbGQsIEZpZWxkUHJvcHMsIEF0dHJpYnV0ZUV2ZW50IH0gZnJvbSAnLi4vZm9ybS1maWVsZC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBFdmVudCwgSHR0cEhlYWRlcnMsIEh0dHBSZXF1ZXN0LCBIdHRwRXZlbnRUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgQWN0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2UvYWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgVHJhbnNsYXRlUGlwZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5pbXBvcnQgeyBmaWx0ZXIsIGZvcmtKb2luLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW1hZ2VQcm9wcyBleHRlbmRzIEZpZWxkUHJvcHMge1xuXHR1cmw/OiBzdHJpbmc7XG5cdG1ldGhvZD86ICdwb3N0JyB8ICdwdXQnO1xuXHR3aXRoQ3JlZGVudGlhbHM/OiBib29sZWFuO1xuXHRtYXhGaWxlU2l6ZT86IG51bWJlcjtcblx0cHJldmlld1dpZHRoPzogbnVtYmVyO1xuXHRtb2RlPzogJ2Jhc2ljJyB8ICdhZHZhbmNlZCc7XG5cdGhlYWRlcnM/OiBhbnk7XG5cdGN1c3RvbVVwbG9hZD86IGJvb2xlYW47XG5cdGZpbGVMaW1pdD86IG51bWJlcjtcblx0dXBsb2FkU3R5bGVDbGFzcz86IHN0cmluZztcblx0Y2FuY2VsU3R5bGVDbGFzcz86IHN0cmluZztcblx0cmVtb3ZlU3R5bGVDbGFzcz86IHN0cmluZztcblx0Y2hvb3NlU3R5bGVDbGFzcz86IHN0cmluZztcblx0YWRqdXN0YWJsZT86IGJvb2xlYW47XG5cdGltYWdlTW9kZT86IGJvb2xlYW47XG5cdG11bHRpcGxlPzogYm9vbGVhbjtcblx0d2F0ZXJtYXJrPzogYm9vbGVhbjtcblx0c2l6ZT86ICdzbWFsbCcgfCAnbGFyZ2UnIHwgdW5kZWZpbmVkO1xuXG5cdG9uQmVmb3JlVXBsb2FkPzogQXR0cmlidXRlRXZlbnQ7XG5cdG9uU2VuZD86IEF0dHJpYnV0ZUV2ZW50O1xuXHRvblVwbG9hZD86IEF0dHJpYnV0ZUV2ZW50O1xuXHRvbkVycm9yPzogQXR0cmlidXRlRXZlbnQ7XG5cdG9uQ2xlYXI/OiBBdHRyaWJ1dGVFdmVudDtcblx0b25SZW1vdmU/OiBBdHRyaWJ1dGVFdmVudDtcblx0b25TZWxlY3Q/OiBBdHRyaWJ1dGVFdmVudDtcblx0b25Qcm9ncmVzcz86IEF0dHJpYnV0ZUV2ZW50O1xufVxuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICdmb3JtLWltYWdlJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0c3R5bGVzOiBgXG5cdFx0LmZpbGUtaXRlbSB7XG5cdFx0XHRib3JkZXItdG9wOiBzb2xpZCAxcHggI2ZmZjtcblx0XHR9XG5cdFx0LnVwbG9hZC1idG4ge1xuXHRcdFx0Ym9yZGVyOiBzb2xpZCAxcHggdHJhbnNwYXJlbnQ7XG5cdFx0fVxuXHRcdC51cGxvYWQtYnRuLnVwbG9hZC1kaXNhYmxlOmhvdmVyIHtcblx0XHRcdGN1cnNvcjogZGVmYXVsdDtcblx0XHR9XG5cdFx0LnVwbG9hZC1idG46bm90KC51cGxvYWQtZGlzYWJsZSk6aG92ZXIge1xuXHRcdFx0Ym9yZGVyOiBzb2xpZCAxcHggdmFyKC0tcC1wcmltYXJ5LWNvbG9yKTtcblx0XHRcdGJhY2tncm91bmQ6IHZhcigtLXAtcHJpbWFyeS01MCk7XG5cdFx0XHRjdXJzb3I6IHBvaW50ZXI7XG5cdFx0fVxuXHRcdC51cGxvYWQtYnRuOm5vdCgudXBsb2FkLWRpc2FibGUpLm5nLWhvdmVyZWQge1xuXHRcdFx0Ym9yZGVyOiBzb2xpZCAxcHggdmFyKC0tcC1wcmltYXJ5LWNvbG9yKTtcblx0XHRcdGJhY2tncm91bmQ6IHZhcigtLXAtcHJpbWFyeS01MCk7XG5cdFx0XHRjdXJzb3I6IHBvaW50ZXI7XG5cdFx0fVxuXHRcdC5maWxlLW5hbWUge1xuXHRcdFx0Zm9udC1zaXplOiAxMnB4O1xuXHRcdFx0Y3Vyc29yOiBwb2ludGVyO1xuXHRcdFx0Y29sb3I6IHZhcigtLXAtcHJpbWFyeS1jb2xvcikgIWltcG9ydGFudDtcblx0XHR9XG5cdFx0Omhvc3QgOjpuZy1kZWVwIHtcblx0XHRcdC5wLWltYWdlLXByZXZpZXctbWFzayB7XG5cdFx0XHRcdHBvc2l0aW9uOiBpbmhlcml0O1xuXHRcdFx0XHRvcGFjaXR5OiAxO1xuXHRcdFx0XHRqdXN0aWZ5LWNvbnRlbnQ6IGxlZnQ7XG5cdFx0XHRcdGNvbG9yOiAjMzM0MTU1O1xuXHRcdFx0fVxuXHRcdFx0cC1pbWFnZSB7XG5cdFx0XHRcdC5wLWltYWdlIHtcblx0XHRcdFx0XHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5cdFx0XHRcdFx0Y29sb3I6IHZhcigtLXAtcHJpbWFyeS1jb2xvcikgIWltcG9ydGFudDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0YCxcblx0aW1wb3J0czogW0ZpbGVVcGxvYWQsIEJ1dHRvbk1vZHVsZSwgSW1hZ2UsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIFRyYW5zbGF0ZVBpcGVdLFxuXHR0ZW1wbGF0ZTogYDxwLWZpbGVVcGxvYWRcblx0XHQjZnVcblx0XHRhdXRvXG5cdFx0W25hbWVdPVwicHJvcHMubmFtZVwiXG5cdFx0W3VybF09XCJwcm9wcy51cmxcIlxuXHRcdFttZXRob2RdPVwicHJvcHMubWV0aG9kID8/ICdwb3N0J1wiXG5cdFx0YWNjZXB0PVwiaW1hZ2UvKlwiXG5cdFx0W3dpdGhDcmVkZW50aWFsc109XCJwcm9wcy53aXRoQ3JlZGVudGlhbHNcIlxuXHRcdFttYXhGaWxlU2l6ZV09XCJwcm9wcy5tYXhGaWxlU2l6ZVwiXG5cdFx0W3N0eWxlQ2xhc3NdPVwicHJvcHMuc3R5bGVDbGFzc1wiXG5cdFx0W3ByZXZpZXdXaWR0aF09XCJwcm9wcy5wcmV2aWV3V2lkdGggPz8gNTBcIlxuXHRcdFttb2RlXT1cInByb3BzLm1vZGUgPz8gJ2FkdmFuY2VkJ1wiXG5cdFx0W2hlYWRlcnNdPVwicHJvcHMuaGVhZGVyc1wiXG5cdFx0W2ZpbGVMaW1pdF09XCJwcm9wcy5maWxlTGltaXRcIlxuXHRcdFtjdXN0b21VcGxvYWRdPVwicHJvcHMuY3VzdG9tVXBsb2FkID8/IHRydWVcIlxuXHRcdFttdWx0aXBsZV09XCJwcm9wcy5tdWx0aXBsZSA/PyBmYWxzZVwiXG5cdFx0KG9uQmVmb3JlVXBsb2FkKT1cInByb3BzLm9uQmVmb3JlVXBsb2FkPy4oZmllbGQoKSEsICRldmVudClcIlxuXHRcdChvblNlbmQpPVwicHJvcHMub25TZW5kPy4oZmllbGQoKSEsICRldmVudClcIlxuXHRcdChvblVwbG9hZCk9XCJwcm9wcy5vblVwbG9hZD8uKGZpZWxkKCkhLCAkZXZlbnQpXCJcblx0XHQob25FcnJvcik9XCJwcm9wcy5vbkVycm9yPy4oZmllbGQoKSEsICRldmVudClcIlxuXHRcdChvbkNsZWFyKT1cInByb3BzLm9uQ2xlYXI/LihmaWVsZCgpISwgJGV2ZW50KVwiXG5cdFx0KG9uUmVtb3ZlKT1cInByb3BzLm9uUmVtb3ZlPy4oZmllbGQoKSEsICRldmVudClcIlxuXHRcdChvblNlbGVjdCk9XCJwcm9wcy5vblNlbGVjdD8uKGZpZWxkKCkhLCAkZXZlbnQpXCJcblx0XHQob25Qcm9ncmVzcyk9XCJwcm9wcy5vblByb2dyZXNzPy4oZmllbGQoKSEsICRldmVudClcIlxuXHRcdCh1cGxvYWRIYW5kbGVyKT1cInVwbG9hZEhhbmRsZXIoZmllbGQoKSEsICRldmVudCwgZnUpXCI+XG5cdFx0PG5nLXRlbXBsYXRlXG5cdFx0XHQjaGVhZGVyXG5cdFx0XHRsZXQtY2hvb3NlQ2FsbGJhY2s9XCJjaG9vc2VDYWxsYmFja1wiPlxuXHRcdFx0PGRpdlxuXHRcdFx0XHQjaW1hZ2VDb21wXG5cdFx0XHRcdFtjbGFzc109XCInZmxleCBqdXN0aWZ5LWNlbnRlciB3LWZ1bGwgdXBsb2FkLWJ0bicgKyAoZmllbGQoKT8uZmllbGRDb250cm9sPy5kaXNhYmxlZCA/ICcgdXBsb2FkLWRpc2FibGUnIDogJycpXCJcblx0XHRcdFx0KGNsaWNrKT1cImNob29zZSgkZXZlbnQsIGNob29zZUNhbGxiYWNrKVwiPlxuXHRcdFx0XHQ8c3BhblxuXHRcdFx0XHRcdD48c3BhblxuXHRcdFx0XHRcdFx0c3R5bGU9XCJmb250LXNpemU6IDEycHg7IG1hcmdpbi1yaWdodDogMi41cHhcIlxuXHRcdFx0XHRcdFx0W2NsYXNzXT1cIidwaScgKyAobG9hZGluZyA/ICcgcGktc3BpbiBwaS1zcGlubmVyJyA6ICcgcGktdXBsb2FkJylcIj48L3NwYW5cblx0XHRcdFx0XHQ+e3sgKGxvYWRpbmcgPyAnbW9kYWwudXBsb2FkaW5nJyA6ICdtb2RhbC5zZWxlY3RGaWxlJykgfCB0cmFuc2xhdGUgfX08L3NwYW5cblx0XHRcdFx0PlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9uZy10ZW1wbGF0ZT5cblx0XHQ8bmctdGVtcGxhdGUgI2NvbnRlbnQ+XG5cdFx0XHRAaWYgKGltYWdlTGlzdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdEBpZiAoIXByb3BzLmltYWdlTW9kZSkge1xuXHRcdFx0XHRcdEBmb3IgKGltYWdlIG9mIGltYWdlTGlzdDsgdHJhY2sgaW1hZ2U7IGxldCBpbmRleCA9ICRpbmRleCkge1xuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBmaWxlLWl0ZW1cIj5cblx0XHRcdFx0XHRcdFx0PHAtaW1hZ2Vcblx0XHRcdFx0XHRcdFx0XHRbc3JjXT1cIidodHRwczovL2hyaW1hZ2UubXlmb29kaWVwZXQuY29tLy8nICsgaW1hZ2VcIlxuXHRcdFx0XHRcdFx0XHRcdFtwcmV2aWV3XT1cInRydWVcIlxuXHRcdFx0XHRcdFx0XHRcdChvblNob3cpPVwiYWp1c3RlZEltYWdlKCRldmVudClcIlxuXHRcdFx0XHRcdFx0XHRcdGFsdD1cIkltYWdlXCI+XG5cdFx0XHRcdFx0XHRcdFx0PG5nLXRlbXBsYXRlICNpbmRpY2F0b3I+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImZpbGUtbmFtZVwiPnt7IGltYWdlIH19PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdDwvbmctdGVtcGxhdGU+XG5cdFx0XHRcdFx0XHRcdFx0PG5nLXRlbXBsYXRlICNpbWFnZT5cblx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiZmlsZS1uYW1lXCI+e3sgaW1hZ2UgfX08L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0PC9uZy10ZW1wbGF0ZT5cblx0XHRcdFx0XHRcdFx0PC9wLWltYWdlPlxuXHRcdFx0XHRcdFx0XHRAaWYgKCFmaWVsZCgpPy5maWVsZENvbnRyb2w/LmRpc2FibGVkKSB7XG5cdFx0XHRcdFx0XHRcdFx0PHAtYnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0XHRpY29uPVwicGkgcGktdGltZXNcIlxuXHRcdFx0XHRcdFx0XHRcdFx0c2V2ZXJpdHk9XCJkYW5nZXJcIlxuXHRcdFx0XHRcdFx0XHRcdFx0c2l6ZT1cInNtYWxsXCJcblx0XHRcdFx0XHRcdFx0XHRcdChvbkNsaWNrKT1cImRlbGV0ZUhhbmRsZXIoJGV2ZW50LCBpbWFnZSwgaW5kZXgpXCJcblx0XHRcdFx0XHRcdFx0XHRcdFt0ZXh0XT1cInRydWVcIiAvPlxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gQGVsc2Uge1xuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJmbGV4IGdhcC0yIG10LTEgZmxleC13cmFwXCI+XG5cdFx0XHRcdFx0XHRAZm9yIChpbWFnZSBvZiBpbWFnZUxpc3Q7IHRyYWNrIGltYWdlOyBsZXQgaW5kZXggPSAkaW5kZXgpIHtcblx0XHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzPVwiYm9yZGVyXCJcblx0XHRcdFx0XHRcdFx0XHRbc3R5bGVdPVwieyBoZWlnaHQ6IGltYWdlSGVpZ2h0ICsgMTAgKyAncHgnIH1cIj5cblx0XHRcdFx0XHRcdFx0XHQ8cC1pbWFnZVxuXHRcdFx0XHRcdFx0XHRcdFx0W3NyY109XCInaHR0cHM6Ly9ocmltYWdlLm15Zm9vZGllcGV0LmNvbS8vJyArIGltYWdlXCJcblx0XHRcdFx0XHRcdFx0XHRcdFtwcmV2aWV3XT1cInRydWVcIlxuXHRcdFx0XHRcdFx0XHRcdFx0W2FwcGVuZFRvXT1cIidib2R5J1wiXG5cdFx0XHRcdFx0XHRcdFx0XHQob25TaG93KT1cImFqdXN0ZWRJbWFnZSgkZXZlbnQpXCJcblx0XHRcdFx0XHRcdFx0XHRcdGFsdD1cIkltYWdlXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8bmctdGVtcGxhdGUgI2luZGljYXRvcj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0QGlmICghZmllbGQoKT8uZmllbGRDb250cm9sPy5kaXNhYmxlZCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgW3N0eWxlXT1cInsgcG9zaXRpb246ICdyZWxhdGl2ZScsIHdpZHRoOiBpbWFnZVdpZHRoICsgMTAgKyAncHgnLCBoZWlnaHQ6IGltYWdlSGVpZ2h0ICsgMTAgKyAncHgnIH1cIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogMDsgcmlnaHQ6IDA7IHotaW5kZXg6IDk5OTsgYmFja2dyb3VuZDogcmVkOyBwYWRkaW5nOiAxcHg7XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KGNsaWNrKT1cImRlbGV0ZUhhbmRsZXIoJGV2ZW50LCBpbWFnZSwgaW5kZXgpXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxpIGNsYXNzPVwicGkgcGktdGltZXMgdGV4dC1bMTJweF1cIj48L2k+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9uZy10ZW1wbGF0ZT5cblx0XHRcdFx0XHRcdFx0XHRcdDxuZy10ZW1wbGF0ZSAjaW1hZ2U+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJwLTJcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8aW1nXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRbc3JjXT1cIidodHRwczovL2hyaW1hZ2UubXlmb29kaWVwZXQuY29tLy8nICsgaW1hZ2VcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YWx0PVwiaW1hZ2VcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0W3N0eWxlXT1cInsgd2lkdGg6IGltYWdlV2lkdGggKyAncHgnLCBoZWlnaHQ6IGltYWdlSGVpZ2h0ICsgJ3B4Jywgb2JqZWN0Rml0OiAnY292ZXInIH1cIiAvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHRcdDwvbmctdGVtcGxhdGU+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8bmctdGVtcGxhdGUgI3ByZXZpZXcgbGV0LXN0eWxlPVwic3R5bGVcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PGltZyBbc3JjXT1cIidodHRwczovL2hyaW1hZ2UubXlmb29kaWVwZXQuY29tLy8nICsgaW1hZ2VcIiBhbHQ9XCJpbWFnZVwiIFtzdHlsZV09XCJzdHlsZVwiIHN0eWxlPVwibWF4LWhlaWdodDogODB2aCFpbXBvcnRhbnQ7XCIgLz5cblx0XHRcdFx0XHRcdFx0XHQ8L25nLXRlbXBsYXRlPlxuXHRcdFx0XHRcdFx0XHRcdDwvcC1pbWFnZT5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHQ8L25nLXRlbXBsYXRlPlxuXHRcdDxuZy10ZW1wbGF0ZSAjZmlsZT4gPC9uZy10ZW1wbGF0ZT5cblx0PC9wLWZpbGVVcGxvYWQ+YCxcblx0c3R5bGVVcmw6ICcuLi8uLi9zdHlsZXMvc3R5bGVzLnNjc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBJbWFnZUNvbXBvbmVudCB7XG5cdEBWaWV3Q2hpbGQoJ2ltYWdlQ29tcCcsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiBmYWxzZSB9KSBpbWFnZUNvbXBSZWYhOiBFbGVtZW50UmVmO1xuXHRmaWVsZCA9IGlucHV0PEZvcm1GaWVsZD4oKTtcblx0cHJvcHM6IEltYWdlUHJvcHMgPSB7fTtcblx0aW1hZ2VMaXN0OiBzdHJpbmdbXSA9IFtdO1xuXHRkZWxldGVIb29rczogT2JzZXJ2YWJsZTxhbnk+W10gPSBbXTtcblx0bG9hZGluZyA9IGZhbHNlO1xuXHRjb3VudGVyID0gMDtcblx0aW1hZ2VXaWR0aCA9IDA7XG5cdGltYWdlSGVpZ2h0ID0gMDtcblxuXHRjb25zdHJ1Y3Rvcihcblx0XHRwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG5cdFx0cHJpdmF0ZSBhY3Rpb246IEFjdGlvblNlcnZpY2UsXG5cdFx0cHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuXHRcdHByaXZhdGUgZGF0ZVBpcGU6IERhdGVQaXBlLFxuXHQpIHtcblx0XHRlZmZlY3QoKCkgPT4ge1xuXHRcdFx0aWYgKHRoaXMuZmllbGQoKSkge1xuXHRcdFx0XHR0aGlzLnByb3BzID0gdGhpcy5maWVsZCgpIS5pbWFnZVByb3BzITtcblx0XHRcdFx0dGhpcy5pbml0SW1hZ2VTaXplKCk7XG5cdFx0XHRcdHRoaXMuaGFuZGxlRGlzYWJsZWQoKTtcblx0XHRcdFx0dGhpcy5oYW5kbGVIb29rQ2hhbmdlKCk7XG5cdFx0XHRcdHRoaXMuYWZ0ZXJTdWJtaXQoKTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRlZmZlY3QoKCkgPT4ge1xuXHRcdFx0Y29uc3QgbGFiZWxBY3Rpb24gPSB0aGlzLmFjdGlvbi5nZXRGaWVsZExhYmVsQWN0aW9uKCk7XG5cdFx0XHRpZiAoIWxhYmVsQWN0aW9uIHx8IGxhYmVsQWN0aW9uPy5rZXkgIT0gdGhpcy5maWVsZCgpPy51dWlkKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGlmIChsYWJlbEFjdGlvbi50eXBlID09ICdtb3VzZWVudGVyJykge1xuXHRcdFx0XHR0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuaW1hZ2VDb21wUmVmLm5hdGl2ZUVsZW1lbnQsICduZy1ob3ZlcmVkJyk7XG5cdFx0XHR9IGVsc2UgaWYgKGxhYmVsQWN0aW9uLnR5cGUgPT0gJ21vdXNlbGVhdmUnKSB7XG5cdFx0XHRcdHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5pbWFnZUNvbXBSZWYubmF0aXZlRWxlbWVudCwgJ25nLWhvdmVyZWQnKTtcblx0XHRcdH0gZWxzZSBpZiAobGFiZWxBY3Rpb24udHlwZSA9PSAnY2xpY2snKSB7XG5cdFx0XHRcdHRoaXMuaW1hZ2VDb21wUmVmLm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdGNob29zZShldmVudDogYW55LCBjYWxsYmFjazogYW55KSB7XG5cdFx0aWYgKHRoaXMuZmllbGQoKT8uZmllbGRDb250cm9sPy5kaXNhYmxlZCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjYWxsYmFjaygpO1xuXHR9XG5cblx0aW5pdEltYWdlU2l6ZSgpIHtcblx0XHRpZiAodGhpcy5wcm9wcy5zaXplICE9PSAnc21hbGwnKSB7XG5cdFx0XHR0aGlzLmltYWdlV2lkdGggPSA3NTtcblx0XHRcdHRoaXMuaW1hZ2VIZWlnaHQgPSAxMDA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuaW1hZ2VXaWR0aCA9IDM1O1xuXHRcdFx0dGhpcy5pbWFnZUhlaWdodCA9IDM1O1xuXHRcdH1cblx0fVxuXG5cdHVwbG9hZEltYWdlKGZpbGU6IEZpbGUpOiBPYnNlcnZhYmxlPGFueT4ge1xuXHRcdGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG5cdFx0Zm9ybURhdGEuYXBwZW5kKCdmaWxlJywgZmlsZSk7XG5cdFx0cmV0dXJuIHRoaXMuaHR0cFxuXHRcdFx0LnJlcXVlc3QoXG5cdFx0XHRcdG5ldyBIdHRwUmVxdWVzdCgnUE9TVCcsICdpbWFnZVVwbG9hZCcsIGZvcm1EYXRhLCB7XG5cdFx0XHRcdFx0cmVwb3J0UHJvZ3Jlc3M6IHRydWUsXG5cdFx0XHRcdFx0d2l0aENyZWRlbnRpYWxzOiBmYWxzZSxcblx0XHRcdFx0fSksXG5cdFx0XHQpXG5cdFx0XHQucGlwZShmaWx0ZXIoKHJlc3BvbnNlOiBIdHRwRXZlbnQ8YW55PikgPT4gcmVzcG9uc2UudHlwZSA9PSBIdHRwRXZlbnRUeXBlLlJlc3BvbnNlKSk7XG5cdH1cblxuXHRkZWxJbWFnZShpbWFnZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcblx0XHRyZXR1cm4gdGhpcy5odHRwLnBvc3QoJ2ltYWdlRGVsZXRlJywgeyBmaWQ6IGltYWdlIH0pO1xuXHR9XG5cblx0dXBsb2FkSGFuZGxlcihmaWVsZDogYW55LCBldmVudDogYW55LCBmdTogYW55KSB7XG5cdFx0dGhpcy5pbml0TG9hZGluZyhldmVudC5maWxlcy5sZW5ndGgpO1xuXHRcdGV2ZW50LmZpbGVzLmZvckVhY2goYXN5bmMgKHY6IGFueSkgPT4ge1xuXHRcdFx0aWYgKHRoaXMucHJvcHMud2F0ZXJtYXJrKSB7XG5cdFx0XHRcdGxldCBibG9iID0gYXdhaXQgdGhpcy5hZGRXYXRlcm1hcmsodik7XG5cdFx0XHRcdGNvbnN0IG5ld0ZpbGUgPSBuZXcgRmlsZShbYmxvYl0sIHYubmFtZSwgeyB0eXBlOiB2LnR5cGUgfSk7XG5cdFx0XHRcdHRoaXMudXBsb2FkSW1hZ2UobmV3RmlsZSkuc3Vic2NyaWJlKHtcblx0XHRcdFx0XHRuZXh0OiAocmVzcG9uc2UpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMudXBkYXRlTG9hZGluZyhmdSk7XG5cdFx0XHRcdFx0XHR0aGlzLmltYWdlTGlzdD8ucHVzaChyZXNwb25zZS5ib2R5LmZpZCk7XG5cdFx0XHRcdFx0XHR0aGlzLmZpZWxkKCk/LmZpZWxkQ29udHJvbD8uc2V0VmFsdWUodGhpcy5pbWFnZUxpc3QpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0ZXJyb3I6IChlcnJvcikgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5pbml0TG9hZGluZygwKTtcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy51cGxvYWRJbWFnZSh2KS5zdWJzY3JpYmUoe1xuXHRcdFx0XHRcdG5leHQ6IChyZXNwb25zZSkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy51cGRhdGVMb2FkaW5nKGZ1KTtcblx0XHRcdFx0XHRcdHRoaXMuaW1hZ2VMaXN0Py5wdXNoKHJlc3BvbnNlLmJvZHkuZmlkKTtcblx0XHRcdFx0XHRcdHRoaXMuZmllbGQoKT8uZmllbGRDb250cm9sPy5zZXRWYWx1ZSh0aGlzLmltYWdlTGlzdCk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRlcnJvcjogKGVycm9yKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLmluaXRMb2FkaW5nKDApO1xuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5lcnJvcihlcnJvcik7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRhZGRXYXRlcm1hcmsoaW1hZ2VGaWxlOiBGaWxlKTogUHJvbWlzZTxCbG9iPiB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG5cblx0XHRcdHJlYWRlci5vbmxvYWQgPSAoZXZlbnQpID0+IHtcblx0XHRcdFx0Y29uc3QgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XG5cdFx0XHRcdGltZy5vbmxvYWQgPSAoKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cdFx0XHRcdFx0Y29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJykhO1xuXG5cdFx0XHRcdFx0Ly8g6K6+572u55S75biD5aSn5bCP5Li65Zu+54mH5aSn5bCPXG5cdFx0XHRcdFx0Y2FudmFzLndpZHRoID0gTnVtYmVyKGltZy53aWR0aCk7XG5cdFx0XHRcdFx0Y2FudmFzLmhlaWdodCA9IE51bWJlcihpbWcuaGVpZ2h0KTtcblxuXHRcdFx0XHRcdC8vIOe7mOWItuWOn+Wni+WbvueJh1xuXHRcdFx0XHRcdGN0eC5kcmF3SW1hZ2UoaW1nLCAwLCAwKTtcblxuXHRcdFx0XHRcdC8vIOa3u+WKoOawtOWNsFxuXHRcdFx0XHRcdGN0eC5mb250ID0gYGl0YWxpYyBib2xkIDMwcHggQ291cmllcmA7XG5cdFx0XHRcdFx0Y3R4LmZpbGxTdHlsZSA9ICdyZWQnO1xuXHRcdFx0XHRcdGN0eC50ZXh0QWxpZ24gPSAnY2VudGVyJztcblx0XHRcdFx0XHRjdHgudGV4dEJhc2VsaW5lID0gJ21pZGRsZSc7XG5cdFx0XHRcdFx0Y29uc3QgY3VycmVudFRpbWUgPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShuZXcgRGF0ZSgpLCAneXl5eS1NTS1kZCBISDptbTpzcycpIHx8ICcnO1xuXHRcdFx0XHRcdGN0eC5maWxsVGV4dChjdXJyZW50VGltZSwgY2FudmFzLndpZHRoIC8gMiwgY2FudmFzLmhlaWdodCAtIDUwKTtcblxuXHRcdFx0XHRcdC8vIOi9rOaNouS4ukJsb2Jcblx0XHRcdFx0XHRjYW52YXMudG9CbG9iKFxuXHRcdFx0XHRcdFx0KGJsb2IpID0+IHtcblx0XHRcdFx0XHRcdFx0aWYgKGJsb2IpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKGJsb2IpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHJlamVjdChuZXcgRXJyb3IoJ0NhbnZhcyB0byBCbG9iIGNvbnZlcnNpb24gZmFpbGVkJykpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0J2ltYWdlL2pwZWcnLFxuXHRcdFx0XHRcdFx0MC44LFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0aW1nLnNyYyA9IGV2ZW50LnRhcmdldD8ucmVzdWx0IGFzIHN0cmluZztcblx0XHRcdH07XG5cblx0XHRcdHJlYWRlci5vbmVycm9yID0gKGVycm9yKSA9PiByZWplY3QoZXJyb3IpO1xuXHRcdFx0cmVhZGVyLnJlYWRBc0RhdGFVUkwoaW1hZ2VGaWxlKTtcblx0XHR9KTtcblx0fVxuXG5cdGRlbGV0ZUhhbmRsZXIoZXZlbnQ6IGFueSwgaW1hZ2U6IHN0cmluZywgaW5kZXg6IG51bWJlcikge1xuXHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdHRoaXMuZGVsZXRlSG9va3MucHVzaCh0aGlzLmRlbEltYWdlKGltYWdlKSk7XG5cdFx0dGhpcy5pbWFnZUxpc3QgPSB0aGlzLmltYWdlTGlzdD8uZmlsdGVyKCh2YWx1ZSwgaSkgPT4gaW5kZXggIT0gaSk7XG5cdFx0dGhpcy5maWVsZCgpPy5maWVsZENvbnRyb2w/LnNldFZhbHVlKHRoaXMuaW1hZ2VMaXN0KTtcblx0fVxuXG5cdGFmdGVyU3VibWl0KCkge1xuXHRcdHRoaXMuZmllbGQoKT8uZmllbGRDb250cm9sPy5zdWJtaXRDaGFuZ2Uuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0aWYgKEJvb2xlYW4odmFsdWUpKSB7XG5cdFx0XHRcdHRoaXMuZGVsZXRlSG9va3MuZm9yRWFjaCgoaG9vaykgPT4gaG9vay5zdWJzY3JpYmUoKSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRoYW5kbGVIb29rQ2hhbmdlKCkge1xuXHRcdHRoaXMuZmllbGQoKT8uZmllbGRDb250cm9sPy5ob29rQ2hhbmdlLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdGlmICh2YWx1ZSA9PSBudWxsKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHRoaXMucHJvcHMub25Ib29rQ2hhbmdlPy4odGhpcy5maWVsZCgpISwgeyB2YWx1ZSB9KTtcblx0XHRcdHRoaXMuaW1hZ2VMaXN0ID0gWy4uLnZhbHVlXTtcblx0XHR9KTtcblx0fVxuXG5cdGhhbmRsZURpc2FibGVkKCkge1xuXHRcdGlmICh0aGlzLnByb3BzPy5kaXNhYmxlZCkge1xuXHRcdFx0dGhpcy5maWVsZCgpIS5maWVsZENvbnRyb2whLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuXHRcdH1cblx0fVxuXG5cdGFqdXN0ZWRJbWFnZShldmVudDogYW55KSB7XG5cdFx0aWYgKHRoaXMucHJvcHM/LmFkanVzdGFibGUpIHtcblx0XHRcdC8vIOino+WGs+WbvueJh+afpeeci+aXtueahOaTjeS9nOaMiemSru+8iOaXi+i9rOOAgeaUvuWkp+OAgee8qeWwj+OAgeWFs+mXre+8ieS4jeWcqOWxj+W5leWPs+S4iuinkuaYvuekuueahOmXrumimFxuXHRcdFx0Ly8gbGV0IGNoaWxkRGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncC1pbWFnZS10b29sYmFyJylbMF07XG5cdFx0XHQvLyBsZXQgcGFyZW50RGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cdFx0XHQvLyBwYXJlbnREaXYuc3R5bGUud2lkdGggPSAnMTAwdncnO1xuXHRcdFx0Ly8gcGFyZW50RGl2LnN0eWxlLmhlaWdodCA9ICcxMDB2aCc7XG5cdFx0XHQvLyBwYXJlbnREaXYuc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnO1xuXHRcdFx0Ly8gY2hpbGREaXY/LnBhcmVudE5vZGU/Lmluc2VydEJlZm9yZShwYXJlbnREaXYsIGNoaWxkRGl2KTtcblx0XHRcdC8vIHBhcmVudERpdi5hcHBlbmRDaGlsZChjaGlsZERpdik7XG5cdFx0fVxuXHR9XG5cblx0aW5pdExvYWRpbmcoY291bnRlcjogbnVtYmVyKSB7XG5cdFx0dGhpcy5jb3VudGVyID0gY291bnRlcjtcblx0XHRpZiAoY291bnRlciA9PSAwKSB7XG5cdFx0XHR0aGlzLmxvYWRpbmcgPSBmYWxzZTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy5sb2FkaW5nID0gdHJ1ZTtcblx0fVxuXG5cdHVwZGF0ZUxvYWRpbmcoZnU6IGFueSkge1xuXHRcdHRoaXMuY291bnRlci0tO1xuXHRcdGlmICh0aGlzLmNvdW50ZXIgPT09IDApIHtcblx0XHRcdHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXHRcdFx0ZnUuY2xlYXIoKTtcblx0XHR9XG5cdH1cbn1cbiJdfQ==