tnx-shared 5.1.403 → 5.1.404

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 (32) hide show
  1. package/bundles/tnx-shared.umd.js +111 -28
  2. package/bundles/tnx-shared.umd.js.map +1 -1
  3. package/bundles/tnx-shared.umd.min.js +1 -1
  4. package/bundles/tnx-shared.umd.min.js.map +1 -1
  5. package/classes/base/component-base.d.ts +9 -0
  6. package/classes/base/component-base.d.ts.map +1 -1
  7. package/classes/base/data-form-base.d.ts +2 -1
  8. package/classes/base/data-form-base.d.ts.map +1 -1
  9. package/components/add-news/add-news.component.d.ts.map +1 -1
  10. package/components/autocomplete-picker/autocomplete-picker.component.d.ts +1 -1
  11. package/components/autocomplete-picker/autocomplete-picker.component.d.ts.map +1 -1
  12. package/components/crud/crud-form/crud-form.component.d.ts +5 -2
  13. package/components/crud/crud-form/crud-form.component.d.ts.map +1 -1
  14. package/components/file-explorer/file-picker-dialog/file-picker-dialog.component.d.ts.map +1 -1
  15. package/components/file-explorer/file-picker-dialog/file-picker-dialog.component.scss.shim.ngstyle.d.ts.map +1 -0
  16. package/components/file-explorer/services/file-object.service.d.ts +2 -0
  17. package/components/file-explorer/services/file-object.service.d.ts.map +1 -1
  18. package/components/workflow/process-workflow-form/process-workflow-form.component.d.ts +0 -1
  19. package/components/workflow/process-workflow-form/process-workflow-form.component.d.ts.map +1 -1
  20. package/esm2015/classes/base/component-base.js +44 -1
  21. package/esm2015/classes/base/data-form-base.js +6 -2
  22. package/esm2015/components/add-news/add-news.component.js +2 -1
  23. package/esm2015/components/autocomplete-picker/autocomplete-picker.component.js +13 -9
  24. package/esm2015/components/crud/crud-form/crud-form.component.js +23 -3
  25. package/esm2015/components/file-explorer/file-picker-dialog/file-picker-dialog.component.js +5 -3
  26. package/esm2015/components/file-explorer/services/file-object.service.js +7 -1
  27. package/esm2015/components/workflow/process-workflow-form/process-workflow-form.component.js +10 -19
  28. package/fesm2015/tnx-shared.js +99 -28
  29. package/fesm2015/tnx-shared.js.map +1 -1
  30. package/package.json +2 -2
  31. package/tnx-shared.metadata.json +1 -1
  32. package/components/file-explorer/file-picker-dialog/file-picker-dialog.component.css.shim.ngstyle.d.ts.map +0 -1
@@ -1,10 +1,10 @@
1
1
  import { __awaiter } from "tslib";
2
- import { Component, EventEmitter, forwardRef, Injector, Input, Output, ViewChild, } from '@angular/core';
2
+ import { Component, EventEmitter, forwardRef, Injector, Input, Output, ViewChild } from '@angular/core';
3
3
  import { NG_VALUE_ACCESSOR } from '@angular/forms';
4
4
  import { TranslateService } from '@ngx-translate/core';
5
5
  import { ComponentContextService } from '../../app-context/component-context.service';
6
6
  import { ComponentBase } from '../../classes/base/component-base';
7
- import { AutoCompletePickerControlSchema, ColumnSchemaBase, CrudListSetting, DropdownOptions, HeightType, Operator, PopupSize, } from '../../classes/form-schema';
7
+ import { AutoCompletePickerControlSchema, ColumnSchemaBase, CrudListSetting, DropdownOptions, HeightType, Operator, PopupSize } from '../../classes/form-schema';
8
8
  import { Filter } from '../../models/grid-info';
9
9
  import { EntityMetadataService } from '../../services/entity-metadata.service';
10
10
  import { appendDefaultFilter } from '../../utils/common';
@@ -144,14 +144,18 @@ export class AutoCompletePickerComponent extends ComponentBase {
144
144
  this._commonService.addDistinct(arrDisplayField, arrField);
145
145
  return arrField.toString();
146
146
  }
147
- getDropdownOptions() {
148
- return new DropdownOptions({
147
+ getDropdownOptions(pageSize = null) {
148
+ const result = new DropdownOptions({
149
149
  displayField: this.control.displayField,
150
150
  valueField: this.control.valueField,
151
151
  fieldPlus: this.control.fieldPlus,
152
152
  funcGetLabel: this.control.funcGetLabel,
153
153
  plusUrl: this.control.plusUrl
154
154
  });
155
+ if (pageSize) {
156
+ result.pageSize = pageSize;
157
+ }
158
+ return result;
155
159
  }
156
160
  showPickForm() {
157
161
  return __awaiter(this, void 0, void 0, function* () {
@@ -378,7 +382,7 @@ export class AutoCompletePickerComponent extends ComponentBase {
378
382
  if (this.value && this.value.length > 0) {
379
383
  dataSource = yield this.control.baseService.getDataDropdownByFilter([
380
384
  this.newFilter(this.control.valueField, Operator.in, this.value)
381
- ], this.getDropdownOptions());
385
+ ], this.getDropdownOptions(this.value.length));
382
386
  this.fireEventAfterGetDataDropDown(dataSource);
383
387
  }
384
388
  this.reStructureDataSource(dataSource);
@@ -389,7 +393,7 @@ export class AutoCompletePickerComponent extends ComponentBase {
389
393
  if (this.value) {
390
394
  dataSource = yield this.control.baseService.getDataDropdownByFilter([
391
395
  this.newFilter(this.control.valueField, Operator.equal, this.value)
392
- ], this.getDropdownOptions());
396
+ ], this.getDropdownOptions(1));
393
397
  this.fireEventAfterGetDataDropDown(dataSource);
394
398
  }
395
399
  this.reStructureDataSource(dataSource);
@@ -446,7 +450,7 @@ export class AutoCompletePickerComponent extends ComponentBase {
446
450
  const filters = [];
447
451
  filters.push(this.newFilter(this.control.valueField, Operator.in, obj));
448
452
  yield appendDefaultFilter(filters, this.control.defaultFilters);
449
- this.control.baseService.getDataDropdownByFilter(filters, this.getDropdownOptions()).then(res => {
453
+ this.control.baseService.getDataDropdownByFilter(filters, this.getDropdownOptions(obj.length)).then(res => {
450
454
  this.fireEventAfterGetDataDropDown(res);
451
455
  this.reStructureDataSource(res);
452
456
  this.results = this.dataSource;
@@ -462,7 +466,7 @@ export class AutoCompletePickerComponent extends ComponentBase {
462
466
  }
463
467
  else {
464
468
  if (obj != null) {
465
- this.control.baseService.getDataDropdownByFilter([this.newFilter(this.control.valueField, Operator.equal, obj)], this.getDropdownOptions()).then(res => {
469
+ this.control.baseService.getDataDropdownByFilter([this.newFilter(this.control.valueField, Operator.equal, obj)], this.getDropdownOptions(1)).then(res => {
466
470
  if (res.length > 0) {
467
471
  this.fireEventAfterGetDataDropDown(res);
468
472
  this.reStructureDataSource(res);
@@ -543,4 +547,4 @@ AutoCompletePickerComponent.propDecorators = {
543
547
  onBlur: [{ type: Output }],
544
548
  onReady: [{ type: Output }]
545
549
  };
546
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliLyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy9hdXRvY29tcGxldGUtcGlja2VyL2F1dG9jb21wbGV0ZS1waWNrZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUgsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsUUFBUSxFQUNSLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUd2RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUN0RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbEUsT0FBTyxFQUNILCtCQUErQixFQUMvQixnQkFBZ0IsRUFDaEIsZUFBZSxFQUNmLGVBQWUsRUFDZixVQUFVLEVBQ1YsUUFBUSxFQUNSLFNBQVMsR0FDWixNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUMvRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDeEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZ0VBQWdFLENBQUM7QUFDMUcsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFpQjlFLE1BQU0sT0FBTywyQkFBNEIsU0FBUSxhQUFh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Q0csUUFBUTtZQU9ILGdCQUFnQjs7O3VDQXFDcEIsU0FBUyxTQUFDLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTsyQkFDN0MsU0FBUyxTQUFDLGNBQWM7MEJBSXhCLEtBQUs7c0JBQ0wsS0FBSzt1QkFDTCxLQUFLO3dCQUNMLEtBQUs7NkJBTUwsS0FBSztxQkFhTCxNQUFNO3VCQUNOLE1BQU07eUJBQ04sTUFBTTt3QkFDTixNQUFNO3NCQUNOLE1BQU07cUJBQ04sTUFBTTtzQkFDTixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIEFmdGVyVmlld0luaXQsXHJcbiAgICBDb21wb25lbnQsXHJcbiAgICBFdmVudEVtaXR0ZXIsXHJcbiAgICBmb3J3YXJkUmVmLFxyXG4gICAgSW5qZWN0b3IsXHJcbiAgICBJbnB1dCxcclxuICAgIE9uSW5pdCxcclxuICAgIE91dHB1dCxcclxuICAgIFZpZXdDaGlsZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IFNlbGVjdEl0ZW0gfSBmcm9tICd0bi1jdXN0b20tcHJpbWVuZy9hcGknO1xyXG5cclxuaW1wb3J0IHsgQ29tcG9uZW50Q29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9hcHAtY29udGV4dC9jb21wb25lbnQtY29udGV4dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50QmFzZSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvYmFzZS9jb21wb25lbnQtYmFzZSc7XHJcbmltcG9ydCB7XHJcbiAgICBBdXRvQ29tcGxldGVQaWNrZXJDb250cm9sU2NoZW1hLFxyXG4gICAgQ29sdW1uU2NoZW1hQmFzZSxcclxuICAgIENydWRMaXN0U2V0dGluZyxcclxuICAgIERyb3Bkb3duT3B0aW9ucyxcclxuICAgIEhlaWdodFR5cGUsXHJcbiAgICBPcGVyYXRvcixcclxuICAgIFBvcHVwU2l6ZSxcclxufSBmcm9tICcuLi8uLi9jbGFzc2VzL2Zvcm0tc2NoZW1hJztcclxuaW1wb3J0IHsgRmlsdGVyIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dyaWQtaW5mbyc7XHJcbmltcG9ydCB7IEVudGl0eU1ldGFkYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2VudGl0eS1tZXRhZGF0YS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgYXBwZW5kRGVmYXVsdEZpbHRlciB9IGZyb20gJy4uLy4uL3V0aWxzL2NvbW1vbic7XHJcbmltcG9ydCB7IENvbnRyb2xUcmVlTm9kZSB9IGZyb20gJy4uL2NydWQvY3J1ZC1mb3JtL2NydWQtZm9ybS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBFbnRpdHlQaWNrZXJCb3hDb21wb25lbnQgfSBmcm9tICcuLi9lbnRpdHktcGlja2VyL2VudGl0eS1waWNrZXItYm94L2VudGl0eS1waWNrZXItYm94LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFkdmFuY2VEYXRhRW50aXR5UGlja2VyIH0gZnJvbSAnLi4vZW50aXR5LXBpY2tlci9tb2RlbC9hZHZhbmNlLWRhdGEnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGNvbXBvbmVudC1zZWxlY3RvclxyXG4gICAgc2VsZWN0b3I6ICdhdXRvY29tcGxldGUtcGlja2VyJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9hdXRvY29tcGxldGUtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2F1dG9jb21wbGV0ZS1waWNrZXIuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEF1dG9Db21wbGV0ZVBpY2tlckNvbXBvbmVudCksXHJcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXHJcbiAgICAgICAgfSxcclxuICAgICAgICBDb21wb25lbnRDb250ZXh0U2VydmljZSxcclxuICAgICAgICBFbnRpdHlNZXRhZGF0YVNlcnZpY2VcclxuICAgIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIEF1dG9Db21wbGV0ZVBpY2tlckNvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEJhc2UgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcclxuICAgIEBWaWV3Q2hpbGQoJ2VudGl0eVBpY2tlckJveCcsIHsgc3RhdGljOiB0cnVlIH0pIGVudGl0eVBpY2tlckJveENvbXBvbmVudDogRW50aXR5UGlja2VyQm94Q29tcG9uZW50O1xyXG4gICAgQFZpZXdDaGlsZCgnYXV0b0NvbXBsZXRlJykgYXV0b0NvbXBsZXRlOiBhbnk7XHJcbiAgICBvbkNoYW5nZUJhc2U6IEZ1bmN0aW9uO1xyXG4gICAgb25Ub3VjaGVkOiBGdW5jdGlvbjtcclxuXHJcbiAgICBASW5wdXQoKSBjdXJyZW50Tm9kZTogQ29udHJvbFRyZWVOb2RlO1xyXG4gICAgQElucHV0KCkgY29udHJvbDogQXV0b0NvbXBsZXRlUGlja2VyQ29udHJvbFNjaGVtYTtcclxuICAgIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuID0gbnVsbDtcclxuICAgIEBJbnB1dCgpIHBvcHVwU2l6ZTogUG9wdXBTaXplID0gbmV3IFBvcHVwU2l6ZSh7XHJcbiAgICAgICAgd2lkdGg6IDExMDAsXHJcbiAgICAgICAgaGVpZ2h0OiA5MDAsXHJcbiAgICAgICAgbWF4aW1pemU6IHRydWVcclxuICAgIH0pO1xyXG4gICAgX3JlYWRPbmx5VmFsdWVzOiBzdHJpbmdbXTtcclxuICAgIEBJbnB1dCgpIHNldCByZWFkT25seVZhbHVlcyh2YWx1ZTogc3RyaW5nW10gfCBzdHJpbmcgfCBhbnkpIHtcclxuICAgICAgICBsZXQgdGVtcCA9IHZhbHVlO1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuc3BsaXRjaGFyICYmIHZhbHVlIGluc3RhbmNlb2YgU3RyaW5nICYmIHRoaXMuY29udHJvbC5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICB0ZW1wID0gdmFsdWUuc3BsaXQodGhpcy5jb250cm9sLnNwbGl0Y2hhcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3JlYWRPbmx5VmFsdWVzID0gdGVtcDtcclxuICAgICAgICB0aGlzLnVwZGF0ZUZ1bmNDaGVja1JlYWRPbmx5SXRlbSgpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlUmVhZE9ubHlJdGVtKCk7XHJcbiAgICB9XHJcbiAgICBnZXQgcmVhZE9ubHlWYWx1ZXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5VmFsdWVzO1xyXG4gICAgfVxyXG5cclxuICAgIEBPdXRwdXQoKSBvbkluaXQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBvblNlbGVjdDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBvblVuU2VsZWN0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIG9uQ2hhbmdlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBvbkZvY3VzOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIG9uQmx1cjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBvblJlYWR5OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICAgIHNldHRpbmc6IENydWRMaXN0U2V0dGluZyA9IG5ldyBDcnVkTGlzdFNldHRpbmcoKTtcclxuICAgIGFkdmFuY2VEYXRhOiBBZHZhbmNlRGF0YUVudGl0eVBpY2tlciA9IG5ldyBBZHZhbmNlRGF0YUVudGl0eVBpY2tlcigpO1xyXG5cclxuICAgIHZhbHVlOiBhbnk7XHJcbiAgICBmdW5jUmV0dXJuVmFsdWU6ICh2YWx1ZSkgPT4ge30gPSB2YWx1ZSA9PiB2YWx1ZTtcclxuICAgIHNlbGVjdGVkVmFsdWU6IGFueTtcclxuICAgIHNlbGVjdGVkUm93RGF0YTogYW55O1xyXG4gICAgc2VsZWN0ZWRWYWx1ZU9iamVjdDogYW55O1xyXG4gICAgZGF0YVNvdXJjZTogYW55W10gPSBbXTtcclxuICAgIGZ1bmNDaGVja1JlYWRPbmx5SXRlbTogKGl0ZW06IGFueSkgPT4gdm9pZDtcclxuXHJcbiAgICBrZXl3b3JkOiBzdHJpbmcgPSAnJztcclxuICAgIGZpZWxkU2VhcmNoVGV4dDogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICByZXN1bHRzOiBhbnlbXSA9IFtdO1xyXG5cclxuICAgIHNob3dGb3JtUGlja2VyID0gZmFsc2U7XHJcbiAgICBkaXJ0eSA9IGZhbHNlO1xyXG5cclxuICAgIHRvb2x0aXAgPSAnJztcclxuICAgIGhhc1ZhbHVlID0gZmFsc2U7XHJcbiAgICBpc0ZpcmVkUmVhZHkgPSBmYWxzZTtcclxuXHJcbiAgICBwcml2YXRlIGdldEZpbHRlck9uU2VhcmNoPzogRnVuY3Rpb247XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgICAgIHByaXZhdGUgX3RyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2VcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcclxuICAgIH1cclxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLmNvbnRyb2wuX2NvbXBvbmVudCA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5zZXREZWZhdWx0U2V0dGluZygpO1xyXG5cclxuICAgICAgICB0aGlzLmJ1aWxkRmlsdGVyS2V5d29yZCgpO1xyXG4gICAgICAgIHRoaXMuYnVpbGRTZXR0aW5nRW50aXR5UGlja2VyKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVGdW5jQ2hlY2tSZWFkT25seUl0ZW0oKTtcclxuICAgICAgICB0aGlzLm9uSW5pdC5lbWl0KHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZUZ1bmNDaGVja1JlYWRPbmx5SXRlbSgpIHtcclxuICAgICAgICBpZiAodGhpcy5yZWFkT25seVZhbHVlcyAmJiB0aGlzLnJlYWRPbmx5VmFsdWVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLmZ1bmNDaGVja1JlYWRPbmx5SXRlbSA9IHRoaXMuX2Z1bmNDaGVja1JlYWRPbmx5SXRlbTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnVuY0NoZWNrUmVhZE9ubHlJdGVtID0gKGl0ZW06IGFueSkgPT4ge307XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNldERlZmF1bHRTZXR0aW5nKCkge1xyXG4gICAgICAgIHRoaXMuZmllbGRTZWFyY2hUZXh0ID0gWy4uLnRoaXMuY29udHJvbC5maWVsZFNlYXJjaFRleHRdO1xyXG4gICAgICAgIGlmICghdGhpcy5maWVsZFNlYXJjaFRleHQuc29tZShpdGVtID0+IGl0ZW0gPT0gdGhpcy5jb250cm9sLmRpc3BsYXlGaWVsZCkpIHtcclxuICAgICAgICAgICAgdGhpcy5maWVsZFNlYXJjaFRleHQucHVzaCh0aGlzLmNvbnRyb2wuZGlzcGxheUZpZWxkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wucmV0dXJuVHlwZSA9PSAndmFsdWUnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnVuY1JldHVyblZhbHVlID0gKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250cm9sLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLm1hcChpdGVtID0+IGl0ZW1bdGhpcy5jb250cm9sLnZhbHVlRmllbGRdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZVt0aGlzLmNvbnRyb2wudmFsdWVGaWVsZF07XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZ1bmNSZXR1cm5WYWx1ZSA9IHZhbHVlID0+IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBidWlsZEZpbHRlcktleXdvcmQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZmllbGRTZWFyY2hUZXh0Lmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0RmlsdGVyT25TZWFyY2ggPSB2YWx1ZSA9PiB0aGlzLm5ld0ZpbHRlcih0aGlzLmNvbnRyb2wuZGlzcGxheUZpZWxkLCBPcGVyYXRvci5jb250YWluLCB2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmdldEZpbHRlck9uU2VhcmNoID0gdmFsdWUgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IEZpbHRlcih7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9naWM6ICdvcicsXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyczogW11cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZFNlYXJjaCBvZiB0aGlzLmZpZWxkU2VhcmNoVGV4dCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5maWx0ZXJzLnB1c2godGhpcy5uZXdGaWx0ZXIoZmllbGRTZWFyY2gsIE9wZXJhdG9yLmNvbnRhaW4sIHZhbHVlKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBidWlsZFNldHRpbmdFbnRpdHlQaWNrZXIoKSB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHMgPSBbXTtcclxuICAgICAgICB0aGlzLnNldHRpbmcudGl0bGUgPSAnJztcclxuICAgICAgICB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UgPSB0aGlzLmNvbnRyb2wuYmFzZVNlcnZpY2U7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmhlaWdodFR5cGUgPSBIZWlnaHRUeXBlLmR5bmFtaWM7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmhpZGRlbkNoZWNrYm94ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNldHRpbmcuc2V0dGluZ0tleSA9ICdlbnRpdHlQaWNrZXInO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5oaWRkZW5BZHZhbmNlU2VhcmNoID0gdGhpcy5jb250cm9sLmhpZGRlbkFkdmFuY2VTZWFyY2g7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmhpZGRlblNldHRpbmdXb3JrZmxvdyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmhpZGRlblNldHRpbmdQZXJtaXNzaW9uID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNldHRpbmcuZmllbGRTZWFyY2hUZXh0ID0gdGhpcy5jb250cm9sLmZpZWxkU2VhcmNoVGV4dDtcclxuICAgICAgICB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5zb3J0RmllbGQgPSB0aGlzLmNvbnRyb2wuc29ydEZpZWxkO1xyXG4gICAgICAgIHRoaXMuY29udHJvbC5jb2x1bW5zLmZvckVhY2goY29sdW1uID0+IHtcclxuICAgICAgICAgICAgaWYgKGNvbHVtbi5pc0Rpc3BsYXkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbCA9IG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcclxuICAgICAgICAgICAgICAgICAgICAuLi5jb2x1bW4sXHJcbiAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBmaWVsZDogY29sdW1uLmNvZGUgfHwgY29sdW1uLmZpZWxkLFxyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoY29sdW1uLmxhYmVsKVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uLmRhdGFUeXBlID09ICdjdXN0b20nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sLmRhdGFUeXBlID0gY29sdW1uLmNvZGU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuY29scy5wdXNoKGNvbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmFkdmFuY2VEYXRhLmZpZWxkcyA9IHRoaXMuZ2V0RmllbGRzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTOG6pXkgdW5pb24gY+G7p2E6IHNlbGVjdGVkRmllbGQsIGZpZWxkUGx1cywgZGlzcGxheSBmaWVsZHMgY8OzIHRyb25nIHRhYmxlLlxyXG4gICAgZ2V0RmllbGRzKCkge1xyXG4gICAgICAgIGNvbnN0IGFyckZpZWxkOiBzdHJpbmdbXSA9IFt0aGlzLmNvbnRyb2wuZGlzcGxheUZpZWxkLCAnaWQnXTtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLnZhbHVlRmllbGQgJiYgdGhpcy5jb250cm9sLnZhbHVlRmllbGQgIT0gJ2lkJykge1xyXG4gICAgICAgICAgICBhcnJGaWVsZC5wdXNoKHRoaXMuY29udHJvbC52YWx1ZUZpZWxkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuZmllbGRQbHVzKSB7XHJcbiAgICAgICAgICAgIGFyckZpZWxkLnB1c2goLi4udGhpcy5jb250cm9sLmZpZWxkUGx1cy5zcGxpdCgnLCcpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGFyckRpc3BsYXlGaWVsZCA9IHRoaXMuY29udHJvbC5jb2x1bW5zLmZpbHRlcih4ID0+IHguaXNEaXNwbGF5ICYmICF4Lm5vdEluRmllbGRzICYmIHguZGF0YVR5cGUgIT0gJ2N1c3RvbScpXHJcbiAgICAgICAgICAgIC5tYXAoeCA9PiB4LmNvZGUgfHwgeC5maWVsZCk7XHJcblxyXG4gICAgICAgIHRoaXMuX2NvbW1vblNlcnZpY2UuYWRkRGlzdGluY3QoYXJyRGlzcGxheUZpZWxkLCBhcnJGaWVsZCk7XHJcbiAgICAgICAgcmV0dXJuIGFyckZpZWxkLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RHJvcGRvd25PcHRpb25zKCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgRHJvcGRvd25PcHRpb25zKHtcclxuICAgICAgICAgICAgZGlzcGxheUZpZWxkOiB0aGlzLmNvbnRyb2wuZGlzcGxheUZpZWxkLFxyXG4gICAgICAgICAgICB2YWx1ZUZpZWxkOiB0aGlzLmNvbnRyb2wudmFsdWVGaWVsZCxcclxuICAgICAgICAgICAgZmllbGRQbHVzOiB0aGlzLmNvbnRyb2wuZmllbGRQbHVzLFxyXG4gICAgICAgICAgICBmdW5jR2V0TGFiZWw6IHRoaXMuY29udHJvbC5mdW5jR2V0TGFiZWwsXHJcbiAgICAgICAgICAgIHBsdXNVcmw6IHRoaXMuY29udHJvbC5wbHVzVXJsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc2hvd1BpY2tGb3JtKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wubW9kaWZ5SW5pdFNlYXJjaERhdGEpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5jb250cm9sLm1vZGlmeUluaXRTZWFyY2hEYXRhKHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zaG93Rm9ybVBpY2tlciA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0RGF0YSgpIHtcclxuICAgICAgICBjb25zdCBmaWx0ZXJzID0gW107XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy52YWx1ZSAmJiB0aGlzLnZhbHVlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGZpbHRlcnMucHVzaCh0aGlzLm5ld0ZpbHRlcih0aGlzLmNvbnRyb2wudmFsdWVGaWVsZCwgT3BlcmF0b3Iubm90SW4sIHRoaXMudmFsdWUpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIGZpbHRlcnMucHVzaCh0aGlzLm5ld0ZpbHRlcih0aGlzLmNvbnRyb2wudmFsdWVGaWVsZCwgT3BlcmF0b3Iubm90RXF1YWwsIHRoaXMudmFsdWUpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBhd2FpdCBhcHBlbmREZWZhdWx0RmlsdGVyKGZpbHRlcnMsIHRoaXMuY29udHJvbC5kZWZhdWx0RmlsdGVycyk7XHJcbiAgICAgICAgaWYgKHRoaXMua2V5d29yZCAmJiB0aGlzLmtleXdvcmQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBmaWx0ZXJzLnB1c2godGhpcy5nZXRGaWx0ZXJPblNlYXJjaCh0aGlzLmtleXdvcmQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tb2RpZnlGaWx0ZXIpIHtcclxuICAgICAgICAgICAgY29uc3QgYWxsb3cgPSBhd2FpdCB0aGlzLmNvbnRyb2wubW9kaWZ5RmlsdGVyKGZpbHRlcnMsIHRoaXMsIHRoaXMuY3VycmVudE5vZGUpO1xyXG4gICAgICAgICAgICBpZiAoYWxsb3cgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdHMgPSBbXTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBkYXRhU291cmNlID0gYXdhaXQgdGhpcy5jb250cm9sLmJhc2VTZXJ2aWNlLmdldERhdGFEcm9wZG93bkJ5RmlsdGVyKFxyXG4gICAgICAgICAgICBmaWx0ZXJzLCB0aGlzLmdldERyb3Bkb3duT3B0aW9ucygpXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmZpcmVFdmVudEFmdGVyR2V0RGF0YURyb3BEb3duKGRhdGFTb3VyY2UpO1xyXG4gICAgICAgIHRoaXMucmVTdHJ1Y3R1cmVEYXRhU291cmNlKGRhdGFTb3VyY2UpO1xyXG4gICAgICAgIHRoaXMucmVzdWx0cyA9IHRoaXMuZGF0YVNvdXJjZTtcclxuICAgICAgICAvLyBSZXR1cm4gxJHhu4MgbeG7mXQgc+G7kSBuxqFpIGtow6FjIGTDuW5nLCBrIHJlbW92ZVxyXG4gICAgICAgIHJldHVybiB0aGlzLnJlc3VsdHM7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBmaXJlRXZlbnRBZnRlckdldERhdGFEcm9wRG93bihkYXRhU291cmNlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5hZnRlckdldERhdGFEcm9wZG93bikge1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2wuYWZ0ZXJHZXREYXRhRHJvcGRvd24oZGF0YVNvdXJjZSwgdGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0Q29udHJvbCgpIHtcclxuICAgICAgICAvLyBpZiAodGhpcy5fdmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgIC8vICAgICB0aGlzLl92YWx1ZSA9IG51bGw7XHJcbiAgICAgICAgLy8gICAgIHRoaXMuZmlyZUNsZWFyVmFsdWVFdmVudCgpO1xyXG4gICAgICAgIC8vIH1cclxuICAgIH1cclxuXHJcbiAgICBjbGVhckRhdGFzb3VyY2UoKSB7XHJcbiAgICAgICAgLy8gdGhpcy5kYXRhU291cmNlSW50ZXJuYWwgPSBbXTtcclxuICAgICAgICAvLyB0aGlzLl9oYXNMb2FkZWREYXRhc291cmNlID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgc2VhcmNoKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5rZXl3b3JkID0gZXZlbnQucXVlcnk7XHJcbiAgICAgICAgdGhpcy5nZXREYXRhKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlQ29udGVudExlZnRJbml0KGNydWRMaXN0KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5hZnRlckNvbnRlbnRMZWZ0SW5pdCkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2wuYWZ0ZXJDb250ZW50TGVmdEluaXQoY3J1ZExpc3QpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVDb250ZW50UmlnaHRJbml0KGNydWRMaXN0KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5hZnRlckNvbnRlbnRSaWdodEluaXQpIHtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sLmFmdGVyQ29udGVudFJpZ2h0SW5pdChjcnVkTGlzdCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyVmFsdWUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmVzdWx0cyA9IFtdO1xyXG4gICAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZSgpO1xyXG4gICAgICAgIHRoaXMuaGFzVmFsdWUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm9uVW5TZWxlY3QuZW1pdCh7XHJcbiAgICAgICAgICAgIGl0ZW06IHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCxcclxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuc2VsZWN0ZWRWYWx1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuZmlyZUNoYW5nZUV2ZW50KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU2VsZWN0IGl0ZW0gY+G7p2EgYXV0b2NvbXBsZXRlXHJcbiAgICBoYW5kbGVTZWxlY3QoaXRlbSkge1xyXG4gICAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZSgpO1xyXG4gICAgICAgIGNvbnN0IGV2dCA9IHtcclxuICAgICAgICAgICAgaXRlbSxcclxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuc2VsZWN0ZWRWYWx1ZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5vblNlbGVjdC5lbWl0KGV2dCk7XHJcbiAgICAgICAgdGhpcy5maXJlQ2hhbmdlRXZlbnQoKTtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLmNhbGxCYWNrICYmIHRoaXMuY29udHJvbC5jYWxsQmFjay5zZWxlY3QpIHtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sLmNhbGxCYWNrLnNlbGVjdChpdGVtKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQuG7jyBzZWxlY3QgaXRlbSBj4bunYSBhdXRvY29tcGxldGVcclxuICAgIGhhbmRsZVVuU2VsZWN0KCRldmVudCkge1xyXG4gICAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZSgpO1xyXG4gICAgICAgIGNvbnN0IGV2dCA9IHtcclxuICAgICAgICAgICAgaXRlbTogJGV2ZW50LFxyXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5zZWxlY3RlZFZhbHVlXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLm9uVW5TZWxlY3QuZW1pdChldnQpO1xyXG4gICAgICAgIHRoaXMuZmlyZUNoYW5nZUV2ZW50KCk7XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlRm9jdXMoZXZ0KSB7XHJcbiAgICAgICAgaWYgKGV2dC50YXJnZXQudmFsdWUpIHtcclxuICAgICAgICAgICAgZXZ0LnRhcmdldC5zZWxlY3QoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5vbkZvY3VzLmVtaXQoZXZ0KTtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVCbHVyKCRldmVudCkge1xyXG4gICAgICAgIHRoaXMub25CbHVyLmVtaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVLZXlVcChldnQpIHtcclxuICAgICAgICBsZXQgaGlkZVN1Z2dlc3Npb25zID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICBoaWRlU3VnZ2Vzc2lvbnMgPSBldnQudGFyZ2V0LnBhcmVudE5vZGUucGFyZW50Tm9kZS5wYXJlbnROb2RlLmNoaWxkRWxlbWVudENvdW50ID09IDE7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QgJiYgdGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0Lmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgICAgICYmIGV2dC5rZXlDb2RlID09IDQwICYmIGhpZGVTdWdnZXNzaW9ucykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRzID0gW107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGhpZGVTdWdnZXNzaW9ucyA9IGV2dC50YXJnZXQucGFyZW50Tm9kZS5jaGlsZEVsZW1lbnRDb3VudCA9PSAxO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGV2dC50YXJnZXQudmFsdWUgPT0gJycgJiYgaGlkZVN1Z2dlc3Npb25zICYmIGV2dC5rZXlDb2RlICE9IDQwICYmIGV2dC5rZXlDb2RlICE9IDM4KSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzdWx0cyA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBsdXUgZGF0YSBjdWEgcm93IGRhbmcgZHVvYyBzZWxlY3QsIGR1bmcga2hpIGNvbnRyb2wubXVsdGlwbGUgPSBmYWxzZTtcclxuICAgIGhhbmRsZVJvd1NlbGVjdChpdGVtKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNlbGVjdGVkUm93RGF0YSA9IGl0ZW07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSGFuZGxlIHNlbGVjdCBpdGVtIHRyb25nIGVudGl0eSBwaWNrZXIgYm94IChLaMO0bmcgY+G6p24gZW1pdCBjaGFuZ2UpXHJcbiAgICBoYW5kbGVTZWxlY3RFbnRpdHkoZXZ0KSB7XHJcbiAgICAgICAgdGhpcy5vblNlbGVjdC5lbWl0KGV2dCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSGFuZGxlIHVuc2VsZWN0IGl0ZW0gdHJvbmcgZW50aXR5IHBpY2tlciBib3ggKEtow7RuZyBj4bqnbiBlbWl0IGNoYW5nZSlcclxuICAgIGhhbmRsZVVuU2VsZWN0RW50aXR5KGV2dCkge1xyXG4gICAgICAgIHRoaXMub25VblNlbGVjdC5lbWl0KGV2dCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSGFuZGxlIGNoYW5nZSBpdGVtIHRyb25nIGVudGl0eSBwaWNrZXIgYm94XHJcbiAgICBoYW5kbGVDaGFuZ2VFbnRpdHkoZXZ0KSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gZXZ0LnZhbHVlO1xyXG4gICAgICAgIHRoaXMudXBkYXRlUHVyZVZhbHVlKCk7XHJcbiAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5maXJlQ2hhbmdlRXZlbnQoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRWYWx1ZVJldHVybigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5mdW5jUmV0dXJuVmFsdWUodGhpcy5zZWxlY3RlZFZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBfZnVuY0NoZWNrUmVhZE9ubHlJdGVtKGl0ZW06IGFueSkge1xyXG4gICAgICAgIGlmICh0aGlzLnJlYWRPbmx5VmFsdWVzLnNvbWUocSA9PiBxID09IGl0ZW0udmFsdWVbdGhpcy5jb250cm9sLnZhbHVlRmllbGRdKSkge1xyXG4gICAgICAgICAgICBpdGVtLl9kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVJlYWRPbmx5SXRlbSgpIHtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLm11bHRpcGxlICYmIHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZnVuY0NoZWNrUmVhZE9ubHlJdGVtKGl0ZW0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlU2VsZWN0ZWRWYWx1ZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkVmFsdWUgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0LmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFZhbHVlLnB1c2goaXRlbS52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZ1bmNDaGVja1JlYWRPbmx5SXRlbShpdGVtKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHNlbGVjdGVkVmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMudG9vbHRpcCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0ID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvb2x0aXAgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gdGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0LnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b29sdGlwID0gdGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0LmxhYmVsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZVB1cmVWYWx1ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVB1cmVWYWx1ZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnNlbGVjdGVkVmFsdWUubWFwKGl0ZW0gPT4gaXRlbVt0aGlzLmNvbnRyb2wudmFsdWVGaWVsZF0pO1xyXG4gICAgICAgICAgICB0aGlzLmhhc1ZhbHVlID0gdGhpcy5zZWxlY3RlZFZhbHVlLmxlbmd0aCA+IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFZhbHVlID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYXNWYWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuc2VsZWN0ZWRWYWx1ZVt0aGlzLmNvbnRyb2wudmFsdWVGaWVsZF07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhc1ZhbHVlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmaXJlQ2hhbmdlRXZlbnQoKSB7XHJcbiAgICAgICAgY29uc3QgdmFsdWVSZXR1cm4gPSB0aGlzLmZ1bmNSZXR1cm5WYWx1ZSh0aGlzLnNlbGVjdGVkVmFsdWUpO1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2VCYXNlKHZhbHVlUmV0dXJuKTtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlZC5lbWl0KHtcclxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlUmV0dXJuXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgaGFuZGxlSGlkZShldnQpIHtcclxuICAgICAgICB0aGlzLnNob3dGb3JtUGlja2VyID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoaXMuZGlydHkpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGRhdGFTb3VyY2UgPSBbXTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlICYmIHRoaXMudmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2UgPSBhd2FpdCB0aGlzLmNvbnRyb2wuYmFzZVNlcnZpY2UuZ2V0RGF0YURyb3Bkb3duQnlGaWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKHRoaXMuY29udHJvbC52YWx1ZUZpZWxkLCBPcGVyYXRvci5pbiwgdGhpcy52YWx1ZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgXSwgdGhpcy5nZXREcm9wZG93bk9wdGlvbnMoKVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJlRXZlbnRBZnRlckdldERhdGFEcm9wRG93bihkYXRhU291cmNlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMucmVTdHJ1Y3R1cmVEYXRhU291cmNlKGRhdGFTb3VyY2UpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0ID0gdGhpcy5kYXRhU291cmNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbGV0IGRhdGFTb3VyY2UgPSBbXTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZSA9IGF3YWl0IHRoaXMuY29udHJvbC5iYXNlU2VydmljZS5nZXREYXRhRHJvcGRvd25CeUZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdGaWx0ZXIodGhpcy5jb250cm9sLnZhbHVlRmllbGQsIE9wZXJhdG9yLmVxdWFsLCB0aGlzLnZhbHVlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdLCB0aGlzLmdldERyb3Bkb3duT3B0aW9ucygpXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcmVFdmVudEFmdGVyR2V0RGF0YURyb3BEb3duKGRhdGFTb3VyY2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5yZVN0cnVjdHVyZURhdGFTb3VyY2UoZGF0YVNvdXJjZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRhU291cmNlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QgPSB0aGlzLmRhdGFTb3VyY2VbMF07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbkNsaWNrU3VibWl0QnV0dG9uKGV2dCwgZW50aXR5UGlja2VyQm94OiBFbnRpdHlQaWNrZXJCb3hDb21wb25lbnQpIHtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlSGlkZShldnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLnNlbGVjdGVkUm93RGF0YSkge1xyXG4gICAgICAgICAgICBlbnRpdHlQaWNrZXJCb3ggJiYgZW50aXR5UGlja2VyQm94LmhhbmRsZVBpY2sodGhpcy5zZWxlY3RlZFJvd0RhdGEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93Rm9ybVBpY2tlciA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlU3RydWN0dXJlRGF0YVNvdXJjZShzb3VyY2VzOiBhbnlbXSkge1xyXG4gICAgICAgIGlmIChzb3VyY2VzICE9IG51bGwgJiYgc291cmNlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFyciA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIHNvdXJjZXMpIHtcclxuICAgICAgICAgICAgICAgIGl0ZW0gPSB0aGlzLnJlU3RydWN0dXJlSXRlbU9iamVjdChpdGVtKTtcclxuICAgICAgICAgICAgICAgIGFyci5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UgPSBhcnI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmVTdHJ1Y3R1cmVJdGVtT2JqZWN0KGl0ZW0pOiBTZWxlY3RJdGVtIHtcclxuICAgICAgICBjb25zdCB0ZW1wOiBTZWxlY3RJdGVtID0geyB2YWx1ZTogaXRlbSB9O1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuZnVuY0dldExhYmVsKSB7XHJcbiAgICAgICAgICAgIHRlbXAubGFiZWwgPSB0aGlzLmNvbnRyb2wuZnVuY0dldExhYmVsKGl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGVtcC5sYWJlbCA9IGl0ZW1bdGhpcy5jb250cm9sLmRpc3BsYXlGaWVsZF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRlbXAudmFsdWUuX2Ryb3Bkb3dudmFsdWUgPSB0aGlzLmNvbnRyb2wudmFsdWVGaWVsZDtcclxuICAgICAgICByZXR1cm4gdGVtcDtcclxuICAgIH1cclxuXHJcbiAgICBnZXREYXRhU2VsZWN0ZWRWYWx1ZShvYmo6IGFueSkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChvYmogIT0gbnVsbCAmJiBvYmoubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcnM6IEZpbHRlcltdID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHRoaXMubmV3RmlsdGVyKHRoaXMuY29udHJvbC52YWx1ZUZpZWxkLCBPcGVyYXRvci5pbiwgb2JqKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgYXBwZW5kRGVmYXVsdEZpbHRlcihmaWx0ZXJzLCB0aGlzLmNvbnRyb2wuZGVmYXVsdEZpbHRlcnMpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbC5iYXNlU2VydmljZS5nZXREYXRhRHJvcGRvd25CeUZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVycyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXREcm9wZG93bk9wdGlvbnMoKVxyXG4gICAgICAgICAgICAgICAgICAgICkudGhlbihyZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcmVFdmVudEFmdGVyR2V0RGF0YURyb3BEb3duKHJlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVTdHJ1Y3R1cmVEYXRhU291cmNlKHJlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0cyA9IHRoaXMuZGF0YVNvdXJjZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0ID0gdGhpcy5kYXRhU291cmNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdHMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAob2JqICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wuYmFzZVNlcnZpY2UuZ2V0RGF0YURyb3Bkb3duQnlGaWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aGlzLm5ld0ZpbHRlcih0aGlzLmNvbnRyb2wudmFsdWVGaWVsZCwgT3BlcmF0b3IuZXF1YWwsIG9iaildLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldERyb3Bkb3duT3B0aW9ucygpXHJcbiAgICAgICAgICAgICAgICAgICAgKS50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJlRXZlbnRBZnRlckdldERhdGFEcm9wRG93bihyZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZVN0cnVjdHVyZURhdGFTb3VyY2UocmVzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0cyA9IHRoaXMuZGF0YVNvdXJjZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCA9IHRoaXMuZGF0YVNvdXJjZVswXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wuY2FsbEJhY2sgJiYgdGhpcy5jb250cm9sLmNhbGxCYWNrLnNlbGVjdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbC5jYWxsQmFjay5zZWxlY3QodGhpcy5zZWxlY3RlZFZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB3cml0ZVZhbHVlKG9iajogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5oYXNWYWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZ2V0RGF0YVNlbGVjdGVkVmFsdWUob2JqKVxyXG4gICAgICAgICAgICAudGhlbihyZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFZhbHVlKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrRmlyZVJlYWR5KCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNoZWNrRmlyZVJlYWR5KCkge1xyXG4gICAgICAgIGlmICghdGhpcy5pc0ZpcmVkUmVhZHkgJiYgdGhpcy5oYXNWYWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmlzRmlyZWRSZWFkeSA9IHRydWU7XHJcbiAgICAgICAgICAgIC8vIEjDoG0gcmVhZHkgbsOgeSBjaOG7iSBD4bqmTiBEw5lORyB0cm9uZyB0csaw4budbmcgaOG7o3AgYXV0b2NvbXBsZXRlLXBpY2tlciBjw7MgdmFsdWUgPT4gRMO5bmcgxJHhu4MgbOG6pXkgZOG7ryBsaeG7h3UgY8OhYyBjb21wb25lbnQgY29uXHJcbiAgICAgICAgICAgIC8vIE7hur91IGPDsyB0csaw4budbmcgaOG7o3AgbsOgbyBraMOhYyB0aMOsIGPhuqduIHBo4bqjaSB44butIGzDvSBraMOhY1xyXG4gICAgICAgICAgICB0aGlzLm9uUmVhZHkuZW1pdCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlQmFzZSA9IGZuO1xyXG4gICAgfVxyXG5cclxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
550
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliLyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy9hdXRvY29tcGxldGUtcGlja2VyL2F1dG9jb21wbGV0ZS1waWNrZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUgsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsUUFBUSxFQUNSLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUd2RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUN0RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbEUsT0FBTyxFQUNILCtCQUErQixFQUMvQixnQkFBZ0IsRUFDaEIsZUFBZSxFQUNmLGVBQWUsRUFDZixVQUFVLEVBQ1YsUUFBUSxFQUNSLFNBQVMsRUFDWixNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUMvRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDeEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZ0VBQWdFLENBQUM7QUFDMUcsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFpQjlFLE1BQU0sT0FBTywyQkFBNEIsU0FBUSxhQUFh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RkFBbUQ7Z0JBRW5ELFNBQVMsRUFBRTtvQkFDUDt3QkFDSSxPQUFPLEVBQUUsaUJBQWlCO3dCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLDJCQUEyQixDQUFDO3dCQUMxRCxLQUFLLEVBQUUsSUFBSTtxQkFDZDtvQkFDRCx1QkFBdUI7b0JBQ3ZCLHFCQUFxQjtpQkFDeEI7O2FBQ0o7OztZQTFDRyxRQUFRO1lBT0gsZ0JBQWdCOzs7dUNBcUNwQixTQUFTLFNBQUMsaUJBQWlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFOzJCQUM3QyxTQUFTLFNBQUMsY0FBYzswQkFJeEIsS0FBSztzQkFDTCxLQUFLO3VCQUNMLEtBQUs7d0JBQ0wsS0FBSzs2QkFNTCxLQUFLO3FCQWFMLE1BQU07dUJBQ04sTUFBTTt5QkFDTixNQUFNO3dCQUNOLE1BQU07c0JBQ04sTUFBTTtxQkFDTixNQUFNO3NCQUNOLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgQWZ0ZXJWaWV3SW5pdCxcclxuICAgIENvbXBvbmVudCxcclxuICAgIEV2ZW50RW1pdHRlcixcclxuICAgIGZvcndhcmRSZWYsXHJcbiAgICBJbmplY3RvcixcclxuICAgIElucHV0LFxyXG4gICAgT25Jbml0LFxyXG4gICAgT3V0cHV0LFxyXG4gICAgVmlld0NoaWxkXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBTZWxlY3RJdGVtIH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvYXBpJztcclxuXHJcbmltcG9ydCB7IENvbXBvbmVudENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXBwLWNvbnRleHQvY29tcG9uZW50LWNvbnRleHQuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudEJhc2UgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2Jhc2UvY29tcG9uZW50LWJhc2UnO1xyXG5pbXBvcnQge1xyXG4gICAgQXV0b0NvbXBsZXRlUGlja2VyQ29udHJvbFNjaGVtYSxcclxuICAgIENvbHVtblNjaGVtYUJhc2UsXHJcbiAgICBDcnVkTGlzdFNldHRpbmcsXHJcbiAgICBEcm9wZG93bk9wdGlvbnMsXHJcbiAgICBIZWlnaHRUeXBlLFxyXG4gICAgT3BlcmF0b3IsXHJcbiAgICBQb3B1cFNpemVcclxufSBmcm9tICcuLi8uLi9jbGFzc2VzL2Zvcm0tc2NoZW1hJztcclxuaW1wb3J0IHsgRmlsdGVyIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dyaWQtaW5mbyc7XHJcbmltcG9ydCB7IEVudGl0eU1ldGFkYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2VudGl0eS1tZXRhZGF0YS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgYXBwZW5kRGVmYXVsdEZpbHRlciB9IGZyb20gJy4uLy4uL3V0aWxzL2NvbW1vbic7XHJcbmltcG9ydCB7IENvbnRyb2xUcmVlTm9kZSB9IGZyb20gJy4uL2NydWQvY3J1ZC1mb3JtL2NydWQtZm9ybS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBFbnRpdHlQaWNrZXJCb3hDb21wb25lbnQgfSBmcm9tICcuLi9lbnRpdHktcGlja2VyL2VudGl0eS1waWNrZXItYm94L2VudGl0eS1waWNrZXItYm94LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFkdmFuY2VEYXRhRW50aXR5UGlja2VyIH0gZnJvbSAnLi4vZW50aXR5LXBpY2tlci9tb2RlbC9hZHZhbmNlLWRhdGEnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGNvbXBvbmVudC1zZWxlY3RvclxyXG4gICAgc2VsZWN0b3I6ICdhdXRvY29tcGxldGUtcGlja2VyJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9hdXRvY29tcGxldGUtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2F1dG9jb21wbGV0ZS1waWNrZXIuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEF1dG9Db21wbGV0ZVBpY2tlckNvbXBvbmVudCksXHJcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXHJcbiAgICAgICAgfSxcclxuICAgICAgICBDb21wb25lbnRDb250ZXh0U2VydmljZSxcclxuICAgICAgICBFbnRpdHlNZXRhZGF0YVNlcnZpY2VcclxuICAgIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIEF1dG9Db21wbGV0ZVBpY2tlckNvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEJhc2UgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcclxuICAgIEBWaWV3Q2hpbGQoJ2VudGl0eVBpY2tlckJveCcsIHsgc3RhdGljOiB0cnVlIH0pIGVudGl0eVBpY2tlckJveENvbXBvbmVudDogRW50aXR5UGlja2VyQm94Q29tcG9uZW50O1xyXG4gICAgQFZpZXdDaGlsZCgnYXV0b0NvbXBsZXRlJykgYXV0b0NvbXBsZXRlOiBhbnk7XHJcbiAgICBvbkNoYW5nZUJhc2U6IEZ1bmN0aW9uO1xyXG4gICAgb25Ub3VjaGVkOiBGdW5jdGlvbjtcclxuXHJcbiAgICBASW5wdXQoKSBjdXJyZW50Tm9kZTogQ29udHJvbFRyZWVOb2RlO1xyXG4gICAgQElucHV0KCkgY29udHJvbDogQXV0b0NvbXBsZXRlUGlja2VyQ29udHJvbFNjaGVtYTtcclxuICAgIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuID0gbnVsbDtcclxuICAgIEBJbnB1dCgpIHBvcHVwU2l6ZTogUG9wdXBTaXplID0gbmV3IFBvcHVwU2l6ZSh7XHJcbiAgICAgICAgd2lkdGg6IDExMDAsXHJcbiAgICAgICAgaGVpZ2h0OiA5MDAsXHJcbiAgICAgICAgbWF4aW1pemU6IHRydWVcclxuICAgIH0pO1xyXG4gICAgX3JlYWRPbmx5VmFsdWVzOiBzdHJpbmdbXTtcclxuICAgIEBJbnB1dCgpIHNldCByZWFkT25seVZhbHVlcyh2YWx1ZTogc3RyaW5nW10gfCBzdHJpbmcgfCBhbnkpIHtcclxuICAgICAgICBsZXQgdGVtcCA9IHZhbHVlO1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuc3BsaXRjaGFyICYmIHZhbHVlIGluc3RhbmNlb2YgU3RyaW5nICYmIHRoaXMuY29udHJvbC5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICB0ZW1wID0gdmFsdWUuc3BsaXQodGhpcy5jb250cm9sLnNwbGl0Y2hhcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3JlYWRPbmx5VmFsdWVzID0gdGVtcDtcclxuICAgICAgICB0aGlzLnVwZGF0ZUZ1bmNDaGVja1JlYWRPbmx5SXRlbSgpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlUmVhZE9ubHlJdGVtKCk7XHJcbiAgICB9XHJcbiAgICBnZXQgcmVhZE9ubHlWYWx1ZXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5VmFsdWVzO1xyXG4gICAgfVxyXG5cclxuICAgIEBPdXRwdXQoKSBvbkluaXQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBvblNlbGVjdDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBvblVuU2VsZWN0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIG9uQ2hhbmdlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBvbkZvY3VzOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIG9uQmx1cjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBvblJlYWR5OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICAgIHNldHRpbmc6IENydWRMaXN0U2V0dGluZyA9IG5ldyBDcnVkTGlzdFNldHRpbmcoKTtcclxuICAgIGFkdmFuY2VEYXRhOiBBZHZhbmNlRGF0YUVudGl0eVBpY2tlciA9IG5ldyBBZHZhbmNlRGF0YUVudGl0eVBpY2tlcigpO1xyXG5cclxuICAgIHZhbHVlOiBhbnk7XHJcbiAgICBmdW5jUmV0dXJuVmFsdWU6ICh2YWx1ZSkgPT4ge30gPSB2YWx1ZSA9PiB2YWx1ZTtcclxuICAgIHNlbGVjdGVkVmFsdWU6IGFueTtcclxuICAgIHNlbGVjdGVkUm93RGF0YTogYW55O1xyXG4gICAgc2VsZWN0ZWRWYWx1ZU9iamVjdDogYW55O1xyXG4gICAgZGF0YVNvdXJjZTogYW55W10gPSBbXTtcclxuICAgIGZ1bmNDaGVja1JlYWRPbmx5SXRlbTogKGl0ZW06IGFueSkgPT4gdm9pZDtcclxuXHJcbiAgICBrZXl3b3JkOiBzdHJpbmcgPSAnJztcclxuICAgIGZpZWxkU2VhcmNoVGV4dDogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICByZXN1bHRzOiBhbnlbXSA9IFtdO1xyXG5cclxuICAgIHNob3dGb3JtUGlja2VyID0gZmFsc2U7XHJcbiAgICBkaXJ0eSA9IGZhbHNlO1xyXG5cclxuICAgIHRvb2x0aXAgPSAnJztcclxuICAgIGhhc1ZhbHVlID0gZmFsc2U7XHJcbiAgICBpc0ZpcmVkUmVhZHkgPSBmYWxzZTtcclxuXHJcbiAgICBwcml2YXRlIGdldEZpbHRlck9uU2VhcmNoPzogRnVuY3Rpb247XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgICAgIHByaXZhdGUgX3RyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2VcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcclxuICAgIH1cclxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLmNvbnRyb2wuX2NvbXBvbmVudCA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5zZXREZWZhdWx0U2V0dGluZygpO1xyXG5cclxuICAgICAgICB0aGlzLmJ1aWxkRmlsdGVyS2V5d29yZCgpO1xyXG4gICAgICAgIHRoaXMuYnVpbGRTZXR0aW5nRW50aXR5UGlja2VyKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVGdW5jQ2hlY2tSZWFkT25seUl0ZW0oKTtcclxuICAgICAgICB0aGlzLm9uSW5pdC5lbWl0KHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZUZ1bmNDaGVja1JlYWRPbmx5SXRlbSgpIHtcclxuICAgICAgICBpZiAodGhpcy5yZWFkT25seVZhbHVlcyAmJiB0aGlzLnJlYWRPbmx5VmFsdWVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLmZ1bmNDaGVja1JlYWRPbmx5SXRlbSA9IHRoaXMuX2Z1bmNDaGVja1JlYWRPbmx5SXRlbTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnVuY0NoZWNrUmVhZE9ubHlJdGVtID0gKGl0ZW06IGFueSkgPT4geyB9O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzZXREZWZhdWx0U2V0dGluZygpIHtcclxuICAgICAgICB0aGlzLmZpZWxkU2VhcmNoVGV4dCA9IFsuLi50aGlzLmNvbnRyb2wuZmllbGRTZWFyY2hUZXh0XTtcclxuICAgICAgICBpZiAoIXRoaXMuZmllbGRTZWFyY2hUZXh0LnNvbWUoaXRlbSA9PiBpdGVtID09IHRoaXMuY29udHJvbC5kaXNwbGF5RmllbGQpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmllbGRTZWFyY2hUZXh0LnB1c2godGhpcy5jb250cm9sLmRpc3BsYXlGaWVsZCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLnJldHVyblR5cGUgPT0gJ3ZhbHVlJykge1xyXG4gICAgICAgICAgICB0aGlzLmZ1bmNSZXR1cm5WYWx1ZSA9ICh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5tYXAoaXRlbSA9PiBpdGVtW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVbdGhpcy5jb250cm9sLnZhbHVlRmllbGRdO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5mdW5jUmV0dXJuVmFsdWUgPSB2YWx1ZSA9PiB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYnVpbGRGaWx0ZXJLZXl3b3JkKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmZpZWxkU2VhcmNoVGV4dC5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgICAgICB0aGlzLmdldEZpbHRlck9uU2VhcmNoID0gdmFsdWUgPT4gdGhpcy5uZXdGaWx0ZXIodGhpcy5jb250cm9sLmRpc3BsYXlGaWVsZCwgT3BlcmF0b3IuY29udGFpbiwgdmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRGaWx0ZXJPblNlYXJjaCA9IHZhbHVlID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBGaWx0ZXIoe1xyXG4gICAgICAgICAgICAgICAgICAgIGxvZ2ljOiAnb3InLFxyXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcnM6IFtdXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZmllbGRTZWFyY2ggb2YgdGhpcy5maWVsZFNlYXJjaFRleHQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQuZmlsdGVycy5wdXNoKHRoaXMubmV3RmlsdGVyKGZpZWxkU2VhcmNoLCBPcGVyYXRvci5jb250YWluLCB2YWx1ZSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYnVpbGRTZXR0aW5nRW50aXR5UGlja2VyKCkge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5jb2xzID0gW107XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLnRpdGxlID0gJyc7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlID0gdGhpcy5jb250cm9sLmJhc2VTZXJ2aWNlO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5oZWlnaHRUeXBlID0gSGVpZ2h0VHlwZS5keW5hbWljO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5oaWRkZW5DaGVja2JveCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLnNldHRpbmdLZXkgPSAnZW50aXR5UGlja2VyJztcclxuICAgICAgICB0aGlzLnNldHRpbmcuaGlkZGVuQWR2YW5jZVNlYXJjaCA9IHRoaXMuY29udHJvbC5oaWRkZW5BZHZhbmNlU2VhcmNoO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5oaWRkZW5TZXR0aW5nV29ya2Zsb3cgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5oaWRkZW5TZXR0aW5nUGVybWlzc2lvbiA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmZpZWxkU2VhcmNoVGV4dCA9IHRoaXMuY29udHJvbC5maWVsZFNlYXJjaFRleHQ7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuc29ydEZpZWxkID0gdGhpcy5jb250cm9sLnNvcnRGaWVsZDtcclxuICAgICAgICB0aGlzLmNvbnRyb2wuY29sdW1ucy5mb3JFYWNoKGNvbHVtbiA9PiB7XHJcbiAgICAgICAgICAgIGlmIChjb2x1bW4uaXNEaXNwbGF5KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb2wgPSBuZXcgQ29sdW1uU2NoZW1hQmFzZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4uY29sdW1uLFxyXG4gICAgICAgICAgICAgICAgICAgIHZpc2libGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGNvbHVtbi5jb2RlIHx8IGNvbHVtbi5maWVsZCxcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGNvbHVtbi5sYWJlbClcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbi5kYXRhVHlwZSA9PSAnY3VzdG9tJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbC5kYXRhVHlwZSA9IGNvbHVtbi5jb2RlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHMucHVzaChjb2wpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5hZHZhbmNlRGF0YS5maWVsZHMgPSB0aGlzLmdldEZpZWxkcygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEzhuqV5IHVuaW9uIGPhu6dhOiBzZWxlY3RlZEZpZWxkLCBmaWVsZFBsdXMsIGRpc3BsYXkgZmllbGRzIGPDsyB0cm9uZyB0YWJsZS5cclxuICAgIGdldEZpZWxkcygpIHtcclxuICAgICAgICBjb25zdCBhcnJGaWVsZDogc3RyaW5nW10gPSBbdGhpcy5jb250cm9sLmRpc3BsYXlGaWVsZCwgJ2lkJ107XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC52YWx1ZUZpZWxkICYmIHRoaXMuY29udHJvbC52YWx1ZUZpZWxkICE9ICdpZCcpIHtcclxuICAgICAgICAgICAgYXJyRmllbGQucHVzaCh0aGlzLmNvbnRyb2wudmFsdWVGaWVsZCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLmZpZWxkUGx1cykge1xyXG4gICAgICAgICAgICBhcnJGaWVsZC5wdXNoKC4uLnRoaXMuY29udHJvbC5maWVsZFBsdXMuc3BsaXQoJywnKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBhcnJEaXNwbGF5RmllbGQgPSB0aGlzLmNvbnRyb2wuY29sdW1ucy5maWx0ZXIoeCA9PiB4LmlzRGlzcGxheSAmJiAheC5ub3RJbkZpZWxkcyAmJiB4LmRhdGFUeXBlICE9ICdjdXN0b20nKVxyXG4gICAgICAgICAgICAubWFwKHggPT4geC5jb2RlIHx8IHguZmllbGQpO1xyXG5cclxuICAgICAgICB0aGlzLl9jb21tb25TZXJ2aWNlLmFkZERpc3RpbmN0KGFyckRpc3BsYXlGaWVsZCwgYXJyRmllbGQpO1xyXG4gICAgICAgIHJldHVybiBhcnJGaWVsZC50b1N0cmluZygpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldERyb3Bkb3duT3B0aW9ucyhwYWdlU2l6ZTogbnVtYmVyID0gbnVsbCkge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBEcm9wZG93bk9wdGlvbnMoe1xyXG4gICAgICAgICAgICBkaXNwbGF5RmllbGQ6IHRoaXMuY29udHJvbC5kaXNwbGF5RmllbGQsXHJcbiAgICAgICAgICAgIHZhbHVlRmllbGQ6IHRoaXMuY29udHJvbC52YWx1ZUZpZWxkLFxyXG4gICAgICAgICAgICBmaWVsZFBsdXM6IHRoaXMuY29udHJvbC5maWVsZFBsdXMsXHJcbiAgICAgICAgICAgIGZ1bmNHZXRMYWJlbDogdGhpcy5jb250cm9sLmZ1bmNHZXRMYWJlbCxcclxuICAgICAgICAgICAgcGx1c1VybDogdGhpcy5jb250cm9sLnBsdXNVcmxcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAocGFnZVNpemUpIHtcclxuICAgICAgICAgICAgcmVzdWx0LnBhZ2VTaXplID0gcGFnZVNpemU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc2hvd1BpY2tGb3JtKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wubW9kaWZ5SW5pdFNlYXJjaERhdGEpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5jb250cm9sLm1vZGlmeUluaXRTZWFyY2hEYXRhKHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zaG93Rm9ybVBpY2tlciA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0RGF0YSgpIHtcclxuICAgICAgICBjb25zdCBmaWx0ZXJzID0gW107XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy52YWx1ZSAmJiB0aGlzLnZhbHVlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGZpbHRlcnMucHVzaCh0aGlzLm5ld0ZpbHRlcih0aGlzLmNvbnRyb2wudmFsdWVGaWVsZCwgT3BlcmF0b3Iubm90SW4sIHRoaXMudmFsdWUpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIGZpbHRlcnMucHVzaCh0aGlzLm5ld0ZpbHRlcih0aGlzLmNvbnRyb2wudmFsdWVGaWVsZCwgT3BlcmF0b3Iubm90RXF1YWwsIHRoaXMudmFsdWUpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBhd2FpdCBhcHBlbmREZWZhdWx0RmlsdGVyKGZpbHRlcnMsIHRoaXMuY29udHJvbC5kZWZhdWx0RmlsdGVycyk7XHJcbiAgICAgICAgaWYgKHRoaXMua2V5d29yZCAmJiB0aGlzLmtleXdvcmQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBmaWx0ZXJzLnB1c2godGhpcy5nZXRGaWx0ZXJPblNlYXJjaCh0aGlzLmtleXdvcmQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tb2RpZnlGaWx0ZXIpIHtcclxuICAgICAgICAgICAgY29uc3QgYWxsb3cgPSBhd2FpdCB0aGlzLmNvbnRyb2wubW9kaWZ5RmlsdGVyKGZpbHRlcnMsIHRoaXMsIHRoaXMuY3VycmVudE5vZGUpO1xyXG4gICAgICAgICAgICBpZiAoYWxsb3cgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdHMgPSBbXTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBkYXRhU291cmNlID0gYXdhaXQgdGhpcy5jb250cm9sLmJhc2VTZXJ2aWNlLmdldERhdGFEcm9wZG93bkJ5RmlsdGVyKFxyXG4gICAgICAgICAgICBmaWx0ZXJzLCB0aGlzLmdldERyb3Bkb3duT3B0aW9ucygpXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmZpcmVFdmVudEFmdGVyR2V0RGF0YURyb3BEb3duKGRhdGFTb3VyY2UpO1xyXG4gICAgICAgIHRoaXMucmVTdHJ1Y3R1cmVEYXRhU291cmNlKGRhdGFTb3VyY2UpO1xyXG4gICAgICAgIHRoaXMucmVzdWx0cyA9IHRoaXMuZGF0YVNvdXJjZTtcclxuICAgICAgICAvLyBSZXR1cm4gxJHhu4MgbeG7mXQgc+G7kSBuxqFpIGtow6FjIGTDuW5nLCBrIHJlbW92ZVxyXG4gICAgICAgIHJldHVybiB0aGlzLnJlc3VsdHM7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBmaXJlRXZlbnRBZnRlckdldERhdGFEcm9wRG93bihkYXRhU291cmNlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5hZnRlckdldERhdGFEcm9wZG93bikge1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2wuYWZ0ZXJHZXREYXRhRHJvcGRvd24oZGF0YVNvdXJjZSwgdGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0Q29udHJvbCgpIHtcclxuICAgICAgICAvLyBpZiAodGhpcy5fdmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgIC8vICAgICB0aGlzLl92YWx1ZSA9IG51bGw7XHJcbiAgICAgICAgLy8gICAgIHRoaXMuZmlyZUNsZWFyVmFsdWVFdmVudCgpO1xyXG4gICAgICAgIC8vIH1cclxuICAgIH1cclxuXHJcbiAgICBjbGVhckRhdGFzb3VyY2UoKSB7XHJcbiAgICAgICAgLy8gdGhpcy5kYXRhU291cmNlSW50ZXJuYWwgPSBbXTtcclxuICAgICAgICAvLyB0aGlzLl9oYXNMb2FkZWREYXRhc291cmNlID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgc2VhcmNoKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5rZXl3b3JkID0gZXZlbnQucXVlcnk7XHJcbiAgICAgICAgdGhpcy5nZXREYXRhKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlQ29udGVudExlZnRJbml0KGNydWRMaXN0KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5hZnRlckNvbnRlbnRMZWZ0SW5pdCkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2wuYWZ0ZXJDb250ZW50TGVmdEluaXQoY3J1ZExpc3QpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVDb250ZW50UmlnaHRJbml0KGNydWRMaXN0KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5hZnRlckNvbnRlbnRSaWdodEluaXQpIHtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sLmFmdGVyQ29udGVudFJpZ2h0SW5pdChjcnVkTGlzdCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyVmFsdWUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmVzdWx0cyA9IFtdO1xyXG4gICAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZSgpO1xyXG4gICAgICAgIHRoaXMuaGFzVmFsdWUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm9uVW5TZWxlY3QuZW1pdCh7XHJcbiAgICAgICAgICAgIGl0ZW06IHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCxcclxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuc2VsZWN0ZWRWYWx1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuZmlyZUNoYW5nZUV2ZW50KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU2VsZWN0IGl0ZW0gY+G7p2EgYXV0b2NvbXBsZXRlXHJcbiAgICBoYW5kbGVTZWxlY3QoaXRlbSkge1xyXG4gICAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZSgpO1xyXG4gICAgICAgIGNvbnN0IGV2dCA9IHtcclxuICAgICAgICAgICAgaXRlbSxcclxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuc2VsZWN0ZWRWYWx1ZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5vblNlbGVjdC5lbWl0KGV2dCk7XHJcbiAgICAgICAgdGhpcy5maXJlQ2hhbmdlRXZlbnQoKTtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLmNhbGxCYWNrICYmIHRoaXMuY29udHJvbC5jYWxsQmFjay5zZWxlY3QpIHtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sLmNhbGxCYWNrLnNlbGVjdChpdGVtKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQuG7jyBzZWxlY3QgaXRlbSBj4bunYSBhdXRvY29tcGxldGVcclxuICAgIGhhbmRsZVVuU2VsZWN0KCRldmVudCkge1xyXG4gICAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZSgpO1xyXG4gICAgICAgIGNvbnN0IGV2dCA9IHtcclxuICAgICAgICAgICAgaXRlbTogJGV2ZW50LFxyXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5zZWxlY3RlZFZhbHVlXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLm9uVW5TZWxlY3QuZW1pdChldnQpO1xyXG4gICAgICAgIHRoaXMuZmlyZUNoYW5nZUV2ZW50KCk7XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlRm9jdXMoZXZ0KSB7XHJcbiAgICAgICAgaWYgKGV2dC50YXJnZXQudmFsdWUpIHtcclxuICAgICAgICAgICAgZXZ0LnRhcmdldC5zZWxlY3QoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5vbkZvY3VzLmVtaXQoZXZ0KTtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVCbHVyKCRldmVudCkge1xyXG4gICAgICAgIHRoaXMub25CbHVyLmVtaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVLZXlVcChldnQpIHtcclxuICAgICAgICBsZXQgaGlkZVN1Z2dlc3Npb25zID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICBoaWRlU3VnZ2Vzc2lvbnMgPSBldnQudGFyZ2V0LnBhcmVudE5vZGUucGFyZW50Tm9kZS5wYXJlbnROb2RlLmNoaWxkRWxlbWVudENvdW50ID09IDE7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QgJiYgdGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0Lmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgICAgICYmIGV2dC5rZXlDb2RlID09IDQwICYmIGhpZGVTdWdnZXNzaW9ucykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRzID0gW107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGhpZGVTdWdnZXNzaW9ucyA9IGV2dC50YXJnZXQucGFyZW50Tm9kZS5jaGlsZEVsZW1lbnRDb3VudCA9PSAxO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGV2dC50YXJnZXQudmFsdWUgPT0gJycgJiYgaGlkZVN1Z2dlc3Npb25zICYmIGV2dC5rZXlDb2RlICE9IDQwICYmIGV2dC5rZXlDb2RlICE9IDM4KSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzdWx0cyA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBsdXUgZGF0YSBjdWEgcm93IGRhbmcgZHVvYyBzZWxlY3QsIGR1bmcga2hpIGNvbnRyb2wubXVsdGlwbGUgPSBmYWxzZTtcclxuICAgIGhhbmRsZVJvd1NlbGVjdChpdGVtKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNlbGVjdGVkUm93RGF0YSA9IGl0ZW07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSGFuZGxlIHNlbGVjdCBpdGVtIHRyb25nIGVudGl0eSBwaWNrZXIgYm94IChLaMO0bmcgY+G6p24gZW1pdCBjaGFuZ2UpXHJcbiAgICBoYW5kbGVTZWxlY3RFbnRpdHkoZXZ0KSB7XHJcbiAgICAgICAgdGhpcy5vblNlbGVjdC5lbWl0KGV2dCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSGFuZGxlIHVuc2VsZWN0IGl0ZW0gdHJvbmcgZW50aXR5IHBpY2tlciBib3ggKEtow7RuZyBj4bqnbiBlbWl0IGNoYW5nZSlcclxuICAgIGhhbmRsZVVuU2VsZWN0RW50aXR5KGV2dCkge1xyXG4gICAgICAgIHRoaXMub25VblNlbGVjdC5lbWl0KGV2dCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSGFuZGxlIGNoYW5nZSBpdGVtIHRyb25nIGVudGl0eSBwaWNrZXIgYm94XHJcbiAgICBoYW5kbGVDaGFuZ2VFbnRpdHkoZXZ0KSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gZXZ0LnZhbHVlO1xyXG4gICAgICAgIHRoaXMudXBkYXRlUHVyZVZhbHVlKCk7XHJcbiAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5maXJlQ2hhbmdlRXZlbnQoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRWYWx1ZVJldHVybigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5mdW5jUmV0dXJuVmFsdWUodGhpcy5zZWxlY3RlZFZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBfZnVuY0NoZWNrUmVhZE9ubHlJdGVtKGl0ZW06IGFueSkge1xyXG4gICAgICAgIGlmICh0aGlzLnJlYWRPbmx5VmFsdWVzLnNvbWUocSA9PiBxID09IGl0ZW0udmFsdWVbdGhpcy5jb250cm9sLnZhbHVlRmllbGRdKSkge1xyXG4gICAgICAgICAgICBpdGVtLl9kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVJlYWRPbmx5SXRlbSgpIHtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLm11bHRpcGxlICYmIHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZnVuY0NoZWNrUmVhZE9ubHlJdGVtKGl0ZW0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlU2VsZWN0ZWRWYWx1ZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkVmFsdWUgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0LmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFZhbHVlLnB1c2goaXRlbS52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZ1bmNDaGVja1JlYWRPbmx5SXRlbShpdGVtKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHNlbGVjdGVkVmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMudG9vbHRpcCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0ID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvb2x0aXAgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gdGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0LnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b29sdGlwID0gdGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0LmxhYmVsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZVB1cmVWYWx1ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVB1cmVWYWx1ZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnNlbGVjdGVkVmFsdWUubWFwKGl0ZW0gPT4gaXRlbVt0aGlzLmNvbnRyb2wudmFsdWVGaWVsZF0pO1xyXG4gICAgICAgICAgICB0aGlzLmhhc1ZhbHVlID0gdGhpcy5zZWxlY3RlZFZhbHVlLmxlbmd0aCA+IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFZhbHVlID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYXNWYWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuc2VsZWN0ZWRWYWx1ZVt0aGlzLmNvbnRyb2wudmFsdWVGaWVsZF07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhc1ZhbHVlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmaXJlQ2hhbmdlRXZlbnQoKSB7XHJcbiAgICAgICAgY29uc3QgdmFsdWVSZXR1cm4gPSB0aGlzLmZ1bmNSZXR1cm5WYWx1ZSh0aGlzLnNlbGVjdGVkVmFsdWUpO1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2VCYXNlKHZhbHVlUmV0dXJuKTtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlZC5lbWl0KHtcclxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlUmV0dXJuXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgaGFuZGxlSGlkZShldnQpIHtcclxuICAgICAgICB0aGlzLnNob3dGb3JtUGlja2VyID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoaXMuZGlydHkpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGRhdGFTb3VyY2UgPSBbXTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlICYmIHRoaXMudmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2UgPSBhd2FpdCB0aGlzLmNvbnRyb2wuYmFzZVNlcnZpY2UuZ2V0RGF0YURyb3Bkb3duQnlGaWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKHRoaXMuY29udHJvbC52YWx1ZUZpZWxkLCBPcGVyYXRvci5pbiwgdGhpcy52YWx1ZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgXSwgdGhpcy5nZXREcm9wZG93bk9wdGlvbnModGhpcy52YWx1ZS5sZW5ndGgpXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcmVFdmVudEFmdGVyR2V0RGF0YURyb3BEb3duKGRhdGFTb3VyY2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5yZVN0cnVjdHVyZURhdGFTb3VyY2UoZGF0YVNvdXJjZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QgPSB0aGlzLmRhdGFTb3VyY2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZGF0YVNvdXJjZSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlID0gYXdhaXQgdGhpcy5jb250cm9sLmJhc2VTZXJ2aWNlLmdldERhdGFEcm9wZG93bkJ5RmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcih0aGlzLmNvbnRyb2wudmFsdWVGaWVsZCwgT3BlcmF0b3IuZXF1YWwsIHRoaXMudmFsdWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF0sIHRoaXMuZ2V0RHJvcGRvd25PcHRpb25zKDEpXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcmVFdmVudEFmdGVyR2V0RGF0YURyb3BEb3duKGRhdGFTb3VyY2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5yZVN0cnVjdHVyZURhdGFTb3VyY2UoZGF0YVNvdXJjZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRhU291cmNlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QgPSB0aGlzLmRhdGFTb3VyY2VbMF07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbkNsaWNrU3VibWl0QnV0dG9uKGV2dCwgZW50aXR5UGlja2VyQm94OiBFbnRpdHlQaWNrZXJCb3hDb21wb25lbnQpIHtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlSGlkZShldnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLnNlbGVjdGVkUm93RGF0YSkge1xyXG4gICAgICAgICAgICBlbnRpdHlQaWNrZXJCb3ggJiYgZW50aXR5UGlja2VyQm94LmhhbmRsZVBpY2sodGhpcy5zZWxlY3RlZFJvd0RhdGEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93Rm9ybVBpY2tlciA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlU3RydWN0dXJlRGF0YVNvdXJjZShzb3VyY2VzOiBhbnlbXSkge1xyXG4gICAgICAgIGlmIChzb3VyY2VzICE9IG51bGwgJiYgc291cmNlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFyciA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIHNvdXJjZXMpIHtcclxuICAgICAgICAgICAgICAgIGl0ZW0gPSB0aGlzLnJlU3RydWN0dXJlSXRlbU9iamVjdChpdGVtKTtcclxuICAgICAgICAgICAgICAgIGFyci5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UgPSBhcnI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmVTdHJ1Y3R1cmVJdGVtT2JqZWN0KGl0ZW0pOiBTZWxlY3RJdGVtIHtcclxuICAgICAgICBjb25zdCB0ZW1wOiBTZWxlY3RJdGVtID0geyB2YWx1ZTogaXRlbSB9O1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuZnVuY0dldExhYmVsKSB7XHJcbiAgICAgICAgICAgIHRlbXAubGFiZWwgPSB0aGlzLmNvbnRyb2wuZnVuY0dldExhYmVsKGl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGVtcC5sYWJlbCA9IGl0ZW1bdGhpcy5jb250cm9sLmRpc3BsYXlGaWVsZF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRlbXAudmFsdWUuX2Ryb3Bkb3dudmFsdWUgPSB0aGlzLmNvbnRyb2wudmFsdWVGaWVsZDtcclxuICAgICAgICByZXR1cm4gdGVtcDtcclxuICAgIH1cclxuXHJcbiAgICBnZXREYXRhU2VsZWN0ZWRWYWx1ZShvYmo6IGFueSkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChvYmogIT0gbnVsbCAmJiBvYmoubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcnM6IEZpbHRlcltdID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHRoaXMubmV3RmlsdGVyKHRoaXMuY29udHJvbC52YWx1ZUZpZWxkLCBPcGVyYXRvci5pbiwgb2JqKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgYXBwZW5kRGVmYXVsdEZpbHRlcihmaWx0ZXJzLCB0aGlzLmNvbnRyb2wuZGVmYXVsdEZpbHRlcnMpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbC5iYXNlU2VydmljZS5nZXREYXRhRHJvcGRvd25CeUZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVycyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXREcm9wZG93bk9wdGlvbnMob2JqLmxlbmd0aClcclxuICAgICAgICAgICAgICAgICAgICApLnRoZW4ocmVzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJlRXZlbnRBZnRlckdldERhdGFEcm9wRG93bihyZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlU3RydWN0dXJlRGF0YVNvdXJjZShyZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdHMgPSB0aGlzLmRhdGFTb3VyY2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCA9IHRoaXMuZGF0YVNvdXJjZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0ID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKG9iaiAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250cm9sLmJhc2VTZXJ2aWNlLmdldERhdGFEcm9wZG93bkJ5RmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGhpcy5uZXdGaWx0ZXIodGhpcy5jb250cm9sLnZhbHVlRmllbGQsIE9wZXJhdG9yLmVxdWFsLCBvYmopXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXREcm9wZG93bk9wdGlvbnMoMSlcclxuICAgICAgICAgICAgICAgICAgICApLnRoZW4ocmVzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcmVFdmVudEFmdGVyR2V0RGF0YURyb3BEb3duKHJlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlU3RydWN0dXJlRGF0YVNvdXJjZShyZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRzID0gdGhpcy5kYXRhU291cmNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0ID0gdGhpcy5kYXRhU291cmNlWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5jYWxsQmFjayAmJiB0aGlzLmNvbnRyb2wuY2FsbEJhY2suc2VsZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250cm9sLmNhbGxCYWNrLnNlbGVjdCh0aGlzLnNlbGVjdGVkVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdHMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHdyaXRlVmFsdWUob2JqOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmhhc1ZhbHVlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5nZXREYXRhU2VsZWN0ZWRWYWx1ZShvYmopXHJcbiAgICAgICAgICAgIC50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWUoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tGaXJlUmVhZHkoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2hlY2tGaXJlUmVhZHkoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzRmlyZWRSZWFkeSAmJiB0aGlzLmhhc1ZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNGaXJlZFJlYWR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgLy8gSMOgbSByZWFkeSBuw6B5IGNo4buJIEPhuqZOIETDmU5HIHRyb25nIHRyxrDhu51uZyBo4bujcCBhdXRvY29tcGxldGUtcGlja2VyIGPDsyB2YWx1ZSA9PiBEw7luZyDEkeG7gyBs4bqleSBk4buvIGxp4buHdSBjw6FjIGNvbXBvbmVudCBjb25cclxuICAgICAgICAgICAgLy8gTuG6v3UgY8OzIHRyxrDhu51uZyBo4bujcCBuw6BvIGtow6FjIHRow6wgY+G6p24gcGjhuqNpIHjhu60gbMO9IGtow6FjXHJcbiAgICAgICAgICAgIHRoaXMub25SZWFkeS5lbWl0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2VCYXNlID0gZm47XHJcbiAgICB9XHJcblxyXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XHJcbiAgICB9XHJcbn1cclxuIl19