igniteui-angular 18.3.0-beta.0 → 18.3.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -17,6 +17,7 @@ import { IgxExcelStylePinningComponent } from './excel-style-pinning.component';
17
17
  import { IgxExcelStyleMovingComponent } from './excel-style-moving.component';
18
18
  import { IgxExcelStyleSortingComponent } from './excel-style-sorting.component';
19
19
  import { IgxExcelStyleHeaderComponent } from './excel-style-header.component';
20
+ import { isTree } from '../../../data-operations/expressions-tree-util';
20
21
  import * as i0 from "@angular/core";
21
22
  import * as i1 from "../../../core/utils";
22
23
  export class IgxExcelStyleColumnOperationsTemplateDirective {
@@ -420,7 +421,7 @@ export class IgxGridExcelStyleFilteringComponent extends BaseFilteringComponent
420
421
  const gridExpressionsTree = this.grid.filteringExpressionsTree;
421
422
  const expressionsTree = new FilteringExpressionsTree(gridExpressionsTree.operator, gridExpressionsTree.fieldName);
422
423
  for (const operand of gridExpressionsTree.filteringOperands) {
423
- if (operand instanceof FilteringExpressionsTree) {
424
+ if (isTree(operand)) {
424
425
  const columnExprTree = operand;
425
426
  if (columnExprTree.fieldName === this.column.field) {
426
427
  continue;
@@ -645,4 +646,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImpor
645
646
  type: HostBinding,
646
647
  args: ['style.max-height']
647
648
  }] } });
648
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhjZWwtc3R5bGUtZmlsdGVyaW5nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9ncmlkcy9maWx0ZXJpbmcvZXhjZWwtc3R5bGUvZXhjZWwtc3R5bGUtZmlsdGVyaW5nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9ncmlkcy9maWx0ZXJpbmcvZXhjZWwtc3R5bGUvZXhjZWwtc3R5bGUtZmlsdGVyaW5nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULFlBQVksRUFDWixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixVQUFVLEVBQ1YsSUFBSSxFQUNKLFdBQVcsRUFDWCxNQUFNLEVBQ04sS0FBSyxFQUVMLFFBQVEsRUFDUixNQUFNLEVBQ04sV0FBVyxFQUNYLFNBQVMsRUFFWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsd0JBQXdCLEVBQTZCLE1BQU0scURBQXFELENBQUM7QUFDMUgsT0FBTyxFQUFnQixVQUFVLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDL0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFeEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUscUJBQXFCLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5RyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQWdCLGNBQWMsRUFBRSx1QkFBdUIsRUFB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LFdBQVc7dUJBQUMsZ0NBQWdDO2dCQU90QyxZQUFZO3NCQURsQixNQUFNO2dCQU9BLFVBQVU7c0JBRGhCLE1BQU07Z0JBT0EsV0FBVztzQkFEakIsTUFBTTtnQkFPQSxjQUFjO3NCQURwQixNQUFNO2dCQU9BLFlBQVk7c0JBRGxCLE1BQU07Z0JBT0EsY0FBYztzQkFEcEIsTUFBTTtnQkFJQSxZQUFZO3NCQURsQixTQUFTO3VCQUFDLGNBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBT3hDLDhCQUE4QjtzQkFEcEMsWUFBWTt1QkFBQyw4Q0FBOEMsRUFBRSxFQUFFLElBQUksRUFBRSw4Q0FBOEMsRUFBRTtnQkFPL0csOEJBQThCO3NCQURwQyxZQUFZO3VCQUFDLDhDQUE4QyxFQUFFLEVBQUUsSUFBSSxFQUFFLDhDQUE4QyxFQUFFO2dCQU81Ryw0QkFBNEI7c0JBRHJDLFNBQVM7dUJBQUMsOEJBQThCLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBT3BFLDRCQUE0QjtzQkFEckMsU0FBUzt1QkFBQyw4QkFBOEIsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFPbkUsTUFBTTtzQkFEaEIsS0FBSztnQkE0RUssU0FBUztzQkFEbkIsS0FBSztnQkF1Q0ssU0FBUztzQkFGbkIsS0FBSzs7c0JBQ0wsV0FBVzt1QkFBQyxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBEaXJlY3RpdmUsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgZm9yd2FyZFJlZixcbiAgICBIb3N0LFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT3B0aW9uYWwsXG4gICAgT3V0cHV0LFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3UmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLCBJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlIH0gZnJvbSAnLi4vLi4vLi4vZGF0YS1vcGVyYXRpb25zL2ZpbHRlcmluZy1leHByZXNzaW9ucy10cmVlJztcbmltcG9ydCB7IFBsYXRmb3JtVXRpbCwgZm9ybWF0RGF0ZSwgZm9ybWF0Q3VycmVuY3kgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IEdyaWRDb2x1bW5EYXRhVHlwZSB9IGZyb20gJy4uLy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9kYXRhLXV0aWwnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBHcmlkU2VsZWN0aW9uTW9kZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9lbnVtcyc7XG5pbXBvcnQgeyBJZ3hGaWx0ZXJJdGVtIH0gZnJvbSAnLi4vLi4vLi4vZGF0YS1vcGVyYXRpb25zL2ZpbHRlcmluZy1zdHJhdGVneSc7XG5pbXBvcnQgeyBmb3JtYXROdW1iZXIsIGZvcm1hdFBlcmNlbnQsIGdldExvY2FsZUN1cnJlbmN5Q29kZSwgTmdJZiwgTmdDbGFzcywgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQmFzZUZpbHRlcmluZ0NvbXBvbmVudCB9IGZyb20gJy4vYmFzZS1maWx0ZXJpbmcuY29tcG9uZW50JztcbmltcG9ydCB7IEV4cHJlc3Npb25VSSwgRmlsdGVyTGlzdEl0ZW0sIGdlbmVyYXRlRXhwcmVzc2lvbnNMaXN0IH0gZnJvbSAnLi9jb21tb24nO1xuaW1wb3J0IHsgQ29sdW1uVHlwZSwgR3JpZFR5cGUsIElHWF9HUklEX0JBU0UgfSBmcm9tICcuLi8uLi9jb21tb24vZ3JpZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSWd4T3ZlcmxheVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9vdmVybGF5L292ZXJsYXknO1xuaW1wb3J0IHsgU29ydGluZ0RpcmVjdGlvbiB9IGZyb20gJy4uLy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9zb3J0aW5nLXN0cmF0ZWd5JztcbmltcG9ydCB7IElneEV4Y2VsU3R5bGVTZWFyY2hDb21wb25lbnQgfSBmcm9tICcuL2V4Y2VsLXN0eWxlLXNlYXJjaC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4RXhjZWxTdHlsZUNvbmRpdGlvbmFsRmlsdGVyQ29tcG9uZW50IH0gZnJvbSAnLi9leGNlbC1zdHlsZS1jb25kaXRpb25hbC1maWx0ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IElneEV4Y2VsU3R5bGVDbGVhckZpbHRlcnNDb21wb25lbnQgfSBmcm9tICcuL2V4Y2VsLXN0eWxlLWNsZWFyLWZpbHRlcnMuY29tcG9uZW50JztcbmltcG9ydCB7IElneEV4Y2VsU3R5bGVTZWxlY3RpbmdDb21wb25lbnQgfSBmcm9tICcuL2V4Y2VsLXN0eWxlLXNlbGVjdGluZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4RXhjZWxTdHlsZUhpZGluZ0NvbXBvbmVudCB9IGZyb20gJy4vZXhjZWwtc3R5bGUtaGlkaW5nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hFeGNlbFN0eWxlUGlubmluZ0NvbXBvbmVudCB9IGZyb20gJy4vZXhjZWwtc3R5bGUtcGlubmluZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4RXhjZWxTdHlsZU1vdmluZ0NvbXBvbmVudCB9IGZyb20gJy4vZXhjZWwtc3R5bGUtbW92aW5nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hFeGNlbFN0eWxlU29ydGluZ0NvbXBvbmVudCB9IGZyb20gJy4vZXhjZWwtc3R5bGUtc29ydGluZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4RXhjZWxTdHlsZUhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4vZXhjZWwtc3R5bGUtaGVhZGVyLmNvbXBvbmVudCc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnaWd4LWV4Y2VsLXN0eWxlLWNvbHVtbi1vcGVyYXRpb25zLFtpZ3hFeGNlbFN0eWxlQ29sdW1uT3BlcmF0aW9uc10nLFxuICAgIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgSWd4RXhjZWxTdHlsZUNvbHVtbk9wZXJhdGlvbnNUZW1wbGF0ZURpcmVjdGl2ZSB7IH1cblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdpZ3gtZXhjZWwtc3R5bGUtZmlsdGVyLW9wZXJhdGlvbnMsW2lneEV4Y2VsU3R5bGVGaWx0ZXJPcGVyYXRpb25zXScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hFeGNlbFN0eWxlRmlsdGVyT3BlcmF0aW9uc1RlbXBsYXRlRGlyZWN0aXZlIHsgfVxuXG4vKipcbiAqIEEgY29tcG9uZW50IHVzZWQgZm9yIHByZXNlbnRpbmcgRXhjZWwgc3R5bGUgZmlsdGVyaW5nIFVJIGZvciBhIHNwZWNpZmljIGNvbHVtbi5cbiAqIEl0IGlzIHVzZWQgaW50ZXJuYWxseSBpbiB0aGUgR3JpZCwgYnV0IGNvdWxkIGFsc28gYmUgaG9zdGVkIGluIGEgY29udGFpbmVyIG91dHNpZGUgb2YgaXQuXG4gKlxuICogRXhhbXBsZTpcbiAqIGBgYGh0bWxcbiAqIDxpZ3gtZ3JpZC1leGNlbC1zdHlsZS1maWx0ZXJpbmdcbiAqICAgICBbY29sdW1uXT1cImdyaWQxLmNvbHVtbnNbMF1cIj5cbiAqIDwvaWd4LWdyaWQtZXhjZWwtc3R5bGUtZmlsdGVyaW5nPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogQmFzZUZpbHRlcmluZ0NvbXBvbmVudCwgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gSWd4R3JpZEV4Y2VsU3R5bGVGaWx0ZXJpbmdDb21wb25lbnQpIH1dLFxuICAgIHNlbGVjdG9yOiAnaWd4LWdyaWQtZXhjZWwtc3R5bGUtZmlsdGVyaW5nJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZXhjZWwtc3R5bGUtZmlsdGVyaW5nLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtJZ3hFeGNlbFN0eWxlSGVhZGVyQ29tcG9uZW50LCBOZ0lmLCBJZ3hFeGNlbFN0eWxlU29ydGluZ0NvbXBvbmVudCwgSWd4RXhjZWxTdHlsZU1vdmluZ0NvbXBvbmVudCwgSWd4RXhjZWxTdHlsZVBpbm5pbmdDb21wb25lbnQsIElneEV4Y2VsU3R5bGVIaWRpbmdDb21wb25lbnQsIElneEV4Y2VsU3R5bGVTZWxlY3RpbmdDb21wb25lbnQsIElneEV4Y2VsU3R5bGVDbGVhckZpbHRlcnNDb21wb25lbnQsIElneEV4Y2VsU3R5bGVDb25kaXRpb25hbEZpbHRlckNvbXBvbmVudCwgSWd4RXhjZWxTdHlsZVNlYXJjaENvbXBvbmVudCwgTmdDbGFzc11cbn0pXG5leHBvcnQgY2xhc3MgSWd4R3JpZEV4Y2VsU3R5bGVGaWx0ZXJpbmdDb21wb25lbnQgZXh0ZW5kcyBCYXNlRmlsdGVyaW5nQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtZXhjZWwtZmlsdGVyJylcbiAgICBwdWJsaWMgZGVmYXVsdENsYXNzID0gdHJ1ZTtcblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWV4Y2VsLWZpbHRlcl9fc2l6aW5nJylcbiAgICBwcm90ZWN0ZWQgZ2V0IHNob3VsZEFwcGx5U2l6ZXMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhKHRoaXMuX21pbkhlaWdodCB8fCB0aGlzLl9tYXhIZWlnaHQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtZXhjZWwtZmlsdGVyLS1pbmxpbmUnKVxuICAgIHB1YmxpYyBpbmxpbmUgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgbG9hZGluZ1N0YXJ0ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgbG9hZGluZ0VuZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGluaXRpYWxpemVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgc29ydGluZ0NoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBjb2x1bW5DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPENvbHVtblR5cGU+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBsaXN0RGF0YUxvYWRlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBWaWV3Q2hpbGQoJ21haW5Ecm9wZG93bicsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIHB1YmxpYyBtYWluRHJvcGRvd246IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKElneEV4Y2VsU3R5bGVDb2x1bW5PcGVyYXRpb25zVGVtcGxhdGVEaXJlY3RpdmUsIHsgcmVhZDogSWd4RXhjZWxTdHlsZUNvbHVtbk9wZXJhdGlvbnNUZW1wbGF0ZURpcmVjdGl2ZSB9KVxuICAgIHB1YmxpYyBleGNlbENvbHVtbk9wZXJhdGlvbnNEaXJlY3RpdmU6IElneEV4Y2VsU3R5bGVDb2x1bW5PcGVyYXRpb25zVGVtcGxhdGVEaXJlY3RpdmU7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoSWd4RXhjZWxTdHlsZUZpbHRlck9wZXJhdGlvbnNUZW1wbGF0ZURpcmVjdGl2ZSwgeyByZWFkOiBJZ3hFeGNlbFN0eWxlRmlsdGVyT3BlcmF0aW9uc1RlbXBsYXRlRGlyZWN0aXZlIH0pXG4gICAgcHVibGljIGV4Y2VsRmlsdGVyT3BlcmF0aW9uc0RpcmVjdGl2ZTogSWd4RXhjZWxTdHlsZUZpbHRlck9wZXJhdGlvbnNUZW1wbGF0ZURpcmVjdGl2ZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgnZGVmYXVsdEV4Y2VsQ29sdW1uT3BlcmF0aW9ucycsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICAgIHByb3RlY3RlZCBkZWZhdWx0RXhjZWxDb2x1bW5PcGVyYXRpb25zOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCdkZWZhdWx0RXhjZWxGaWx0ZXJPcGVyYXRpb25zJywgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJvdGVjdGVkIGRlZmF1bHRFeGNlbEZpbHRlck9wZXJhdGlvbnM6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBjb2x1bW4uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IGNvbHVtbih2YWx1ZTogQ29sdW1uVHlwZSkge1xuICAgICAgICB0aGlzLl9jb2x1bW4gPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5saXN0RGF0YSA9IG5ldyBBcnJheTxGaWx0ZXJMaXN0SXRlbT4oKTtcbiAgICAgICAgdGhpcy5jb2x1bW5DaGFuZ2UuZW1pdCh0aGlzLl9jb2x1bW4pO1xuXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucz8udW5zdWJzY3JpYmUoKTtcblxuICAgICAgICBpZiAodGhpcy5fY29sdW1uKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQuZmlsdGVyaW5nU2VydmljZS5yZWdpc3RlclNWR0ljb25zKCk7XG4gICAgICAgICAgICB0aGlzLmluaXQoKTtcbiAgICAgICAgICAgIHRoaXMuc29ydGluZ0NoYW5nZWQuZW1pdCgpO1xuXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSB0aGlzLmdyaWQuY29sdW1uUGluLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodGhpcy5jZHIgYXMgVmlld1JlZikuZGVzdHJveWVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMuZ3JpZC5jb2x1bW5WaXNpYmlsaXR5Q2hhbmdlZC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5kZXRlY3RDaGFuZ2VzKCkpKTtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5ncmlkLnNvcnRpbmdFeHByZXNzaW9uc0NoYW5nZS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5zb3J0aW5nQ2hhbmdlZC5lbWl0KCkpKTtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5ncmlkLmZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZUNoYW5nZS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5pbml0KCkpKTtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5ncmlkLmNvbHVtbk1vdmluZ0VuZC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jZHIubWFya0ZvckNoZWNrKCkpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgY29sdW1uLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgY29sdW1uKCk6IENvbHVtblR5cGUge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sdW1uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGV4cHJlc3Npb25zTGlzdCA9IG5ldyBBcnJheTxFeHByZXNzaW9uVUk+KCk7XG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgbGlzdERhdGEgPSBuZXcgQXJyYXk8RmlsdGVyTGlzdEl0ZW0+KCk7XG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgdW5pcXVlVmFsdWVzOiBJZ3hGaWx0ZXJJdGVtW10gPSBbXTtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVybGF5U2VydmljZTogSWd4T3ZlcmxheVNlcnZpY2U7XG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcmxheUNvbXBvbmVudElkOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgaXNIaWVyYXJjaGljYWwgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgX21pbkhlaWdodDtcblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIG1pbmltdW0gaGVpZ2h0LlxuICAgICAqIFxuICAgICAqIFNldHRpbmcgdmFsdWUgaW4gdGVtcGxhdGU6IFxuICAgICAqIGBgYHRzXG4gICAgICogW21pbkhlaWdodF09XCInPG51bWJlcj48dW5pdCAocHh8cmVtfGV0Yy4uKT4nXCIgXG4gICAgICogYGBgXG4gICAgICogXG4gICAgICogRXhhbXBsZSBmb3Igc2V0dGluZyBhIHZhbHVlOiBcbiAgICAgKiBgYGB0c1xuICAgICAqIFttaW5IZWlnaHRdPVwiJzcwMHB4J1wiXG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IG1pbkhlaWdodCgpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5fbWluSGVpZ2h0IHx8IHRoaXMuX21pbkhlaWdodCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21pbkhlaWdodDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG1pbmltdW0gaGVpZ2h0LlxuICAgICAqL1xuICAgIHB1YmxpYyBzZXQgbWluSGVpZ2h0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fbWluSGVpZ2h0ID0gdmFsdWU7XG4gICAgfVxuXG5cbiAgICBwcml2YXRlIF9tYXhIZWlnaHQ6IHN0cmluZztcbiAgICBwcml2YXRlIGNvbnRhaW5zTnVsbE9yRW1wdHkgPSBmYWxzZTtcbiAgICBwcml2YXRlIHNlbGVjdEFsbFNlbGVjdGVkID0gdHJ1ZTtcbiAgICBwcml2YXRlIHNlbGVjdEFsbEluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICBwcml2YXRlIGZpbHRlclZhbHVlcyA9IG5ldyBTZXQ8YW55PigpO1xuICAgIHByaXZhdGUgX2NvbHVtbjogQ29sdW1uVHlwZTtcbiAgICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbjtcbiAgICBwcml2YXRlIF9vcmlnaW5hbERpc3BsYXk6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIG1heGltdW0gaGVpZ2h0LlxuICAgICAqIFxuICAgICAqIFNldHRpbmcgdmFsdWUgaW4gdGVtcGxhdGU6IFxuICAgICAqIGBgYHRzXG4gICAgICogW21heEhlaWdodF09XCInPG51bWJlcj48dW5pdCAocHh8cmVtfGV0Yy4uKT4nXCIgXG4gICAgICogYGBgXG4gICAgICogXG4gICAgICogRXhhbXBsZSBmb3Igc2V0dGluZyBhIHZhbHVlOiBcbiAgICAgKiBgYGB0c1xuICAgICAqIFttYXhIZWlnaHRdPVwiJzcwMHB4J1wiXG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLm1heC1oZWlnaHQnKVxuICAgIHB1YmxpYyBnZXQgbWF4SGVpZ2h0KCk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLl9tYXhIZWlnaHQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9tYXhIZWlnaHQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBtYXhpbXVtIGhlaWdodC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IG1heEhlaWdodCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX21heEhlaWdodCA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCBncmlkKCk6IEdyaWRUeXBlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uPy5ncmlkID8/IHRoaXMuZ3JpZEFQSTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgZWxlbWVudDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgIHBsYXRmb3JtOiBQbGF0Zm9ybVV0aWwsXG4gICAgICAgIEBJbmplY3QoRE9DVU1FTlQpXG4gICAgICAgIHByaXZhdGUgZG9jdW1lbnQ6IGFueSxcbiAgICAgICAgQEhvc3QoKSBAT3B0aW9uYWwoKSBASW5qZWN0KElHWF9HUklEX0JBU0UpIHByb3RlY3RlZCBncmlkQVBJPzogR3JpZFR5cGUsXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGNkciwgZWxlbWVudCwgcGxhdGZvcm0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnM/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIGRlbGV0ZSB0aGlzLm92ZXJsYXlDb21wb25lbnRJZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29tcHV0ZWRTdHlsZXMgPSB0aGlzLmRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgaW5pdGlhbGl6ZShjb2x1bW46IENvbHVtblR5cGUsIG92ZXJsYXlTZXJ2aWNlOiBJZ3hPdmVybGF5U2VydmljZSkge1xuICAgICAgICB0aGlzLmlubGluZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjtcbiAgICAgICAgdGhpcy5vdmVybGF5U2VydmljZSA9IG92ZXJsYXlTZXJ2aWNlO1xuICAgICAgICBpZiAodGhpcy5fb3JpZ2luYWxEaXNwbGF5KSB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gdGhpcy5fb3JpZ2luYWxEaXNwbGF5O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pbml0aWFsaXplZC5lbWl0KCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5ncmlkLmNvbHVtbk1vdmluZy5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jbG9zZURyb3Bkb3duKCkpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvblBpbigpIHtcbiAgICAgICAgdGhpcy5jbG9zZURyb3Bkb3duKCk7XG4gICAgICAgIHRoaXMuY29sdW1uLnBpbm5lZCA9ICF0aGlzLmNvbHVtbi5waW5uZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25TZWxlY3QoKSB7XG4gICAgICAgIGlmICghdGhpcy5jb2x1bW4uc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdENvbHVtbih0aGlzLmNvbHVtbi5maWVsZCwgdGhpcy5ncmlkLmNvbHVtblNlbGVjdGlvbiA9PT0gR3JpZFNlbGVjdGlvbk1vZGUuc2luZ2xlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLmRlc2VsZWN0Q29sdW1uKHRoaXMuY29sdW1uLmZpZWxkKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdyaWQubm90aWZ5Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGNvbHVtblNlbGVjdGFibGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQ/LmNvbHVtblNlbGVjdGlvbiAhPT0gR3JpZFNlbGVjdGlvbk1vZGUubm9uZSAmJiB0aGlzLmNvbHVtbj8uc2VsZWN0YWJsZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvbkhpZGVUb2dnbGUoKSB7XG4gICAgICAgIHRoaXMuY29sdW1uLnRvZ2dsZVZpc2liaWxpdHkoKTtcbiAgICAgICAgdGhpcy5jbG9zZURyb3Bkb3duKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgY2FuY2VsKCkge1xuICAgICAgICBpZiAoIXRoaXMub3ZlcmxheUNvbXBvbmVudElkKSB7XG4gICAgICAgICAgICB0aGlzLmluaXQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNsb3NlRHJvcGRvd24oKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBjbG9zZURyb3Bkb3duKCkge1xuICAgICAgICBpZiAodGhpcy5vdmVybGF5Q29tcG9uZW50SWQpIHtcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheVNlcnZpY2UuaGlkZSh0aGlzLm92ZXJsYXlDb21wb25lbnRJZCk7XG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlDb21wb25lbnRJZCA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvbktleURvd24oZXZlbnRBcmdzOiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLnBsYXRmb3JtLmlzRmlsdGVyaW5nS2V5Q29tYm8oZXZlbnRBcmdzKSkge1xuICAgICAgICAgICAgZXZlbnRBcmdzLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLmNsb3NlRHJvcGRvd24oKTtcbiAgICAgICAgfVxuICAgICAgICBldmVudEFyZ3Muc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgaGlkZSgpIHtcbiAgICAgICAgdGhpcy5fb3JpZ2luYWxEaXNwbGF5ID0gdGhpcy5jb21wdXRlZFN0eWxlcy5kaXNwbGF5O1xuICAgICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGRldGVjdENoYW5nZXMoKSB7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY29tcHV0ZWRTdHlsZXM7XG5cbiAgICBwcm90ZWN0ZWQgZ2V0IHNpemUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tcHV0ZWRTdHlsZXM/LmdldFByb3BlcnR5VmFsdWUoJy0tY29tcG9uZW50LXNpemUnKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXQoKSB7XG4gICAgICAgIHRoaXMuZXhwcmVzc2lvbnNMaXN0ID0gbmV3IEFycmF5PEV4cHJlc3Npb25VST4oKTtcbiAgICAgICAgZ2VuZXJhdGVFeHByZXNzaW9uc0xpc3QodGhpcy5jb2x1bW4uZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLCB0aGlzLmdyaWQuZmlsdGVyaW5nTG9naWMsIHRoaXMuZXhwcmVzc2lvbnNMaXN0KTtcbiAgICAgICAgdGhpcy5wb3B1bGF0ZUNvbHVtbkRhdGEoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFyZUV4cHJlc3Npb25zU2VsZWN0YWJsZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZXhwcmVzc2lvbnNMaXN0Lmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICAgICAgKHRoaXMuZXhwcmVzc2lvbnNMaXN0WzBdLmV4cHJlc3Npb24uY29uZGl0aW9uLm5hbWUgPT09ICdlcXVhbHMnIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5leHByZXNzaW9uc0xpc3RbMF0uZXhwcmVzc2lvbi5jb25kaXRpb24ubmFtZSA9PT0gJ2F0JyB8fFxuICAgICAgICAgICAgICAgIHRoaXMuZXhwcmVzc2lvbnNMaXN0WzBdLmV4cHJlc3Npb24uY29uZGl0aW9uLm5hbWUgPT09ICd0cnVlJyB8fFxuICAgICAgICAgICAgICAgIHRoaXMuZXhwcmVzc2lvbnNMaXN0WzBdLmV4cHJlc3Npb24uY29uZGl0aW9uLm5hbWUgPT09ICdmYWxzZScgfHxcbiAgICAgICAgICAgICAgICB0aGlzLmV4cHJlc3Npb25zTGlzdFswXS5leHByZXNzaW9uLmNvbmRpdGlvbi5uYW1lID09PSAnZW1wdHknIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5leHByZXNzaW9uc0xpc3RbMF0uZXhwcmVzc2lvbi5jb25kaXRpb24ubmFtZSA9PT0gJ2luJykpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2VsZWN0YWJsZUV4cHJlc3Npb25zQ291bnQgPSB0aGlzLmV4cHJlc3Npb25zTGlzdC5maWx0ZXIoZXhwID0+XG4gICAgICAgICAgICAoZXhwLmJlZm9yZU9wZXJhdG9yID09PSAxIHx8IGV4cC5hZnRlck9wZXJhdG9yID09PSAxKSAmJlxuICAgICAgICAgICAgKGV4cC5leHByZXNzaW9uLmNvbmRpdGlvbi5uYW1lID09PSAnZXF1YWxzJyB8fFxuICAgICAgICAgICAgICAgIGV4cC5leHByZXNzaW9uLmNvbmRpdGlvbi5uYW1lID09PSAnYXQnIHx8XG4gICAgICAgICAgICAgICAgZXhwLmV4cHJlc3Npb24uY29uZGl0aW9uLm5hbWUgPT09ICd0cnVlJyB8fFxuICAgICAgICAgICAgICAgIGV4cC5leHByZXNzaW9uLmNvbmRpdGlvbi5uYW1lID09PSAnZmFsc2UnIHx8XG4gICAgICAgICAgICAgICAgZXhwLmV4cHJlc3Npb24uY29uZGl0aW9uLm5hbWUgPT09ICdlbXB0eScgfHxcbiAgICAgICAgICAgICAgICBleHAuZXhwcmVzc2lvbi5jb25kaXRpb24ubmFtZSA9PT0gJ2luJykpLmxlbmd0aDtcblxuICAgICAgICByZXR1cm4gc2VsZWN0YWJsZUV4cHJlc3Npb25zQ291bnQgPT09IHRoaXMuZXhwcmVzc2lvbnNMaXN0Lmxlbmd0aDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBvcHVsYXRlQ29sdW1uRGF0YSgpIHtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAgIGlmICh0aGlzLmdyaWQudW5pcXVlQ29sdW1uVmFsdWVzU3RyYXRlZ3kpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyQ29sdW1uVmFsdWVzUmVtb3RlbHkoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyQ29sdW1uVmFsdWVzRnJvbURhdGEoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyQ29sdW1uVmFsdWVzUmVtb3RlbHkoKSB7XG4gICAgICAgIHRoaXMubG9hZGluZ1N0YXJ0LmVtaXQoKTtcbiAgICAgICAgY29uc3QgZXhwcmVzc2lvbnNUcmVlOiBGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUgPSB0aGlzLmdldENvbHVtbkZpbHRlckV4cHJlc3Npb25zVHJlZSgpO1xuXG4gICAgICAgIGNvbnN0IHByZXZDb2x1bW4gPSB0aGlzLmNvbHVtbjtcbiAgICAgICAgdGhpcy5ncmlkLnVuaXF1ZUNvbHVtblZhbHVlc1N0cmF0ZWd5KHRoaXMuY29sdW1uLCBleHByZXNzaW9uc1RyZWUsICh2YWx1ZXM6IGFueVtdKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuY29sdW1uIHx8IHRoaXMuY29sdW1uICE9PSBwcmV2Q29sdW1uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBpdGVtcyA9IHZhbHVlcy5tYXAodiA9PiAoe1xuICAgICAgICAgICAgICAgIHZhbHVlOiB2XG4gICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgIHRoaXMudW5pcXVlVmFsdWVzID0gdGhpcy5jb2x1bW4uc29ydFN0cmF0ZWd5LnNvcnQoaXRlbXMsICd2YWx1ZScsIFNvcnRpbmdEaXJlY3Rpb24uQXNjLCB0aGlzLmNvbHVtbi5zb3J0aW5nSWdub3JlQ2FzZSxcbiAgICAgICAgICAgICAgICAob2JqLCBrZXkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlc29sdmVkVmFsdWUgPSBvYmpba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29sdW1uLmRhdGFUeXBlID09PSBHcmlkQ29sdW1uRGF0YVR5cGUuVGltZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRWYWx1ZSA9IG5ldyBEYXRlKCkuc2V0SG91cnMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRWYWx1ZS5nZXRIb3VycygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVkVmFsdWUuZ2V0TWludXRlcygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVkVmFsdWUuZ2V0U2Vjb25kcygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVkVmFsdWUuZ2V0TWlsbGlzZWNvbmRzKCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVkVmFsdWU7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMucmVuZGVyVmFsdWVzKCk7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdFbmQuZW1pdCgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbmRlckNvbHVtblZhbHVlc0Zyb21EYXRhKCkge1xuICAgICAgICB0aGlzLmxvYWRpbmdTdGFydC5lbWl0KCk7XG5cbiAgICAgICAgY29uc3QgZXhwcmVzc2lvbnNUcmVlID0gdGhpcy5nZXRDb2x1bW5GaWx0ZXJFeHByZXNzaW9uc1RyZWUoKTtcbiAgICAgICAgY29uc3QgcHJvbWlzZSA9IHRoaXMuZ3JpZC5maWx0ZXJTdHJhdGVneS5nZXRGaWx0ZXJJdGVtcyh0aGlzLmNvbHVtbiwgZXhwcmVzc2lvbnNUcmVlKTtcbiAgICAgICAgcHJvbWlzZS50aGVuKChpdGVtcykgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc0hpZXJhcmNoaWNhbCA9IGl0ZW1zLmxlbmd0aCA+IDAgJiYgaXRlbXMuc29tZShpID0+IGkuY2hpbGRyZW4gJiYgaS5jaGlsZHJlbi5sZW5ndGggPiAwKTtcbiAgICAgICAgICAgIHRoaXMudW5pcXVlVmFsdWVzID0gaXRlbXM7XG4gICAgICAgICAgICB0aGlzLnJlbmRlclZhbHVlcygpO1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nRW5kLmVtaXQoKTtcbiAgICAgICAgICAgIHRoaXMuc29ydGluZ0NoYW5nZWQuZW1pdCgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbmRlclZhbHVlcygpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJWYWx1ZXMgPSB0aGlzLmdlbmVyYXRlRmlsdGVyVmFsdWVzKCk7XG4gICAgICAgIHRoaXMuZ2VuZXJhdGVMaXN0RGF0YSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2VuZXJhdGVGaWx0ZXJWYWx1ZXMoKSB7XG4gICAgICAgIGNvbnN0IGZvcm1hdFZhbHVlID0gKHZhbHVlOiBhbnkpOiBhbnkgPT4ge1xuICAgICAgICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuIHZhbHVlO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMuY29sdW1uLmRhdGFUeXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBHcmlkQ29sdW1uRGF0YVR5cGUuRGF0ZTpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHZhbHVlKS50b0RhdGVTdHJpbmcoKTtcbiAgICAgICAgICAgICAgICBjYXNlIEdyaWRDb2x1bW5EYXRhVHlwZS5EYXRlVGltZTpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHZhbHVlKS50b0lTT1N0cmluZygpO1xuICAgICAgICAgICAgICAgIGNhc2UgR3JpZENvbHVtbkRhdGFUeXBlLlRpbWU6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUgOiBuZXcgRGF0ZSh2YWx1ZSkudG9Mb2NhbGVUaW1lU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHByb2Nlc3NFeHByZXNzaW9uID0gKGFycjogYW55W10sIGU6IGFueSk6IGFueVtdID0+IHtcbiAgICAgICAgICAgIGlmIChlLmV4cHJlc3Npb24uY29uZGl0aW9uLm5hbWUgPT09ICdpbicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gWy4uLmFyciwgLi4uQXJyYXkuZnJvbSgoZS5leHByZXNzaW9uLnNlYXJjaFZhbCBhcyBTZXQ8YW55PikudmFsdWVzKCkpLm1hcCh2ID0+IGZvcm1hdFZhbHVlKHYpKV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gWy4uLmFyciwgZm9ybWF0VmFsdWUoZS5leHByZXNzaW9uLnNlYXJjaFZhbCldO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGZpbHRlclZhbHVlcyA9IG5ldyBTZXQ8YW55Pih0aGlzLmV4cHJlc3Npb25zTGlzdC5yZWR1Y2UocHJvY2Vzc0V4cHJlc3Npb24sIFtdKSk7XG5cbiAgICAgICAgcmV0dXJuIGZpbHRlclZhbHVlcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdlbmVyYXRlTGlzdERhdGEoKSB7XG4gICAgICAgIHRoaXMubGlzdERhdGEgPSBuZXcgQXJyYXk8RmlsdGVyTGlzdEl0ZW0+KCk7XG4gICAgICAgIGNvbnN0IHNob3VsZFVwZGF0ZVNlbGVjdGlvbiA9IHRoaXMuYXJlRXhwcmVzc2lvbnNTZWxlY3RhYmxlKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuY29sdW1uLmRhdGFUeXBlID09PSBHcmlkQ29sdW1uRGF0YVR5cGUuQm9vbGVhbikge1xuICAgICAgICAgICAgdGhpcy5hZGRCb29sZWFuSXRlbXMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYWRkSXRlbXMoc2hvdWxkVXBkYXRlU2VsZWN0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5pc0hpZXJhcmNoaWNhbCAmJiB0aGlzLmNvbnRhaW5zTnVsbE9yRW1wdHkpIHtcbiAgICAgICAgICAgIGNvbnN0IGJsYW5rc0l0ZW0gPSB0aGlzLmdlbmVyYXRlQmxhbmtzSXRlbShzaG91bGRVcGRhdGVTZWxlY3Rpb24pO1xuICAgICAgICAgICAgdGhpcy5saXN0RGF0YS51bnNoaWZ0KGJsYW5rc0l0ZW0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubGlzdERhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5hZGRTZWxlY3RBbGxJdGVtKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoISh0aGlzLmNkciBhcyBhbnkpLmRlc3Ryb3llZCkge1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5saXN0RGF0YUxvYWRlZC5lbWl0KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDb2x1bW5GaWx0ZXJFeHByZXNzaW9uc1RyZWUoKSB7XG4gICAgICAgIGNvbnN0IGdyaWRFeHByZXNzaW9uc1RyZWU6IElGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUgPSB0aGlzLmdyaWQuZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlO1xuICAgICAgICBjb25zdCBleHByZXNzaW9uc1RyZWUgPSBuZXcgRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKGdyaWRFeHByZXNzaW9uc1RyZWUub3BlcmF0b3IsIGdyaWRFeHByZXNzaW9uc1RyZWUuZmllbGROYW1lKTtcblxuICAgICAgICBmb3IgKGNvbnN0IG9wZXJhbmQgb2YgZ3JpZEV4cHJlc3Npb25zVHJlZS5maWx0ZXJpbmdPcGVyYW5kcykge1xuICAgICAgICAgICAgaWYgKG9wZXJhbmQgaW5zdGFuY2VvZiBGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5FeHByVHJlZSA9IG9wZXJhbmQgYXMgRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlO1xuICAgICAgICAgICAgICAgIGlmIChjb2x1bW5FeHByVHJlZS5maWVsZE5hbWUgPT09IHRoaXMuY29sdW1uLmZpZWxkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGV4cHJlc3Npb25zVHJlZS5maWx0ZXJpbmdPcGVyYW5kcy5wdXNoKG9wZXJhbmQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGV4cHJlc3Npb25zVHJlZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZEJvb2xlYW5JdGVtcygpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RBbGxTZWxlY3RlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuc2VsZWN0QWxsSW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnVuaXF1ZVZhbHVlcy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBlbGVtZW50LnZhbHVlO1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyTGlzdEl0ZW0gPSBuZXcgRmlsdGVyTGlzdEl0ZW0oKTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSAnJykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbHVtbi5maWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSB0cnVlICYmIHRoaXMuZXhwcmVzc2lvbnNMaXN0LmZpbmQoZXhwID0+IGV4cC5leHByZXNzaW9uLmNvbmRpdGlvbi5uYW1lID09PSAndHJ1ZScpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJMaXN0SXRlbS5pc1NlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlckxpc3RJdGVtLmlzRmlsdGVyZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RBbGxJbmRldGVybWluYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gZmFsc2UgJiYgdGhpcy5leHByZXNzaW9uc0xpc3QuZmluZChleHAgPT4gZXhwLmV4cHJlc3Npb24uY29uZGl0aW9uLm5hbWUgPT09ICdmYWxzZScpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJMaXN0SXRlbS5pc1NlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlckxpc3RJdGVtLmlzRmlsdGVyZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RBbGxJbmRldGVybWluYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlckxpc3RJdGVtLmlzU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlckxpc3RJdGVtLmlzRmlsdGVyZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlckxpc3RJdGVtLmlzU2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJMaXN0SXRlbS5pc0ZpbHRlcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmlsdGVyTGlzdEl0ZW0udmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICBmaWx0ZXJMaXN0SXRlbS5sYWJlbCA9IHZhbHVlID9cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkLnJlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9maWx0ZXJfdHJ1ZSA6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5yZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfZmlsdGVyX2ZhbHNlO1xuICAgICAgICAgICAgICAgIGZpbHRlckxpc3RJdGVtLmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3REYXRhLnB1c2goZmlsdGVyTGlzdEl0ZW0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5zTnVsbE9yRW1wdHkgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZEl0ZW1zKHNob3VsZFVwZGF0ZVNlbGVjdGlvbjogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnNlbGVjdEFsbFNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zZWxlY3RBbGxJbmRldGVybWluYXRlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY29udGFpbnNOdWxsT3JFbXB0eSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxpc3REYXRhID0gdGhpcy5nZW5lcmF0ZUZpbHRlckxpc3RJdGVtcyh0aGlzLnVuaXF1ZVZhbHVlcywgc2hvdWxkVXBkYXRlU2VsZWN0aW9uKTtcbiAgICAgICAgdGhpcy5jb250YWluc051bGxPckVtcHR5ID0gdGhpcy51bmlxdWVWYWx1ZXMubGVuZ3RoID4gdGhpcy5saXN0RGF0YS5sZW5ndGg7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZW5lcmF0ZUZpbHRlckxpc3RJdGVtcyh2YWx1ZXM6IElneEZpbHRlckl0ZW1bXSwgc2hvdWxkVXBkYXRlU2VsZWN0aW9uOiBib29sZWFuLCBwYXJlbnQ/OiBGaWx0ZXJMaXN0SXRlbSkge1xuICAgICAgICBjb25zdCBmaWx0ZXJMaXN0SXRlbXMgPSBbXTtcbiAgICAgICAgdmFsdWVzPy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBlbGVtZW50LnZhbHVlO1xuICAgICAgICAgICAgY29uc3QgaGFzVmFsdWUgPSB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSAnJztcblxuICAgICAgICAgICAgaWYgKGhhc1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyTGlzdEl0ZW0gPSBuZXcgRmlsdGVyTGlzdEl0ZW0oKTtcbiAgICAgICAgICAgICAgICBmaWx0ZXJMaXN0SXRlbS5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgICAgICAgICAgZmlsdGVyTGlzdEl0ZW0udmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICBmaWx0ZXJMaXN0SXRlbS5sYWJlbCA9IGVsZW1lbnQubGFiZWwgIT09IHVuZGVmaW5lZCA/XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQubGFiZWwgOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldEZpbHRlckl0ZW1MYWJlbCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgZmlsdGVyTGlzdEl0ZW0uaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGZpbHRlckxpc3RJdGVtLmlzU2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGZpbHRlckxpc3RJdGVtLmlzRmlsdGVyZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY29sdW1uLmZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSkge1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJMaXN0SXRlbS5pc1NlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlckxpc3RJdGVtLmlzRmlsdGVyZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkVXBkYXRlU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBleHByVmFsdWUgPSB0aGlzLmdldEV4cHJlc3Npb25WYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5maWx0ZXJWYWx1ZXMuaGFzKGV4cHJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJMaXN0SXRlbS5pc1NlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJMaXN0SXRlbS5pc0ZpbHRlcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0QWxsSW5kZXRlcm1pbmF0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdEFsbFNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmaWx0ZXJMaXN0SXRlbS5jaGlsZHJlbiA9IHRoaXMuZ2VuZXJhdGVGaWx0ZXJMaXN0SXRlbXMoZWxlbWVudC5jaGlsZHJlbiA/PyBlbGVtZW50LnZhbHVlPy5jaGlsZHJlbiwgc2hvdWxkVXBkYXRlU2VsZWN0aW9uLCBmaWx0ZXJMaXN0SXRlbSk7XG4gICAgICAgICAgICAgICAgZmlsdGVyTGlzdEl0ZW1zLnB1c2goZmlsdGVyTGlzdEl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gZmlsdGVyTGlzdEl0ZW1zO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkU2VsZWN0QWxsSXRlbSgpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0QWxsID0gbmV3IEZpbHRlckxpc3RJdGVtKCk7XG4gICAgICAgIHNlbGVjdEFsbC5pc1NlbGVjdGVkID0gdGhpcy5zZWxlY3RBbGxTZWxlY3RlZDtcbiAgICAgICAgc2VsZWN0QWxsLnZhbHVlID0gdGhpcy5ncmlkLnJlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9leGNlbF9zZWxlY3RfYWxsO1xuICAgICAgICBzZWxlY3RBbGwubGFiZWwgPSB0aGlzLmdyaWQucmVzb3VyY2VTdHJpbmdzLmlneF9ncmlkX2V4Y2VsX3NlbGVjdF9hbGw7XG4gICAgICAgIHNlbGVjdEFsbC5pbmRldGVybWluYXRlID0gdGhpcy5zZWxlY3RBbGxJbmRldGVybWluYXRlO1xuICAgICAgICBzZWxlY3RBbGwuaXNTcGVjaWFsID0gdHJ1ZTtcbiAgICAgICAgc2VsZWN0QWxsLmlzRmlsdGVyZWQgPSB0aGlzLnNlbGVjdEFsbFNlbGVjdGVkO1xuICAgICAgICB0aGlzLmxpc3REYXRhLnVuc2hpZnQoc2VsZWN0QWxsKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdlbmVyYXRlQmxhbmtzSXRlbShzaG91bGRVcGRhdGVTZWxlY3Rpb24pIHtcbiAgICAgICAgY29uc3QgYmxhbmtzID0gbmV3IEZpbHRlckxpc3RJdGVtKCk7XG4gICAgICAgIGlmICh0aGlzLmNvbHVtbi5maWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUpIHtcbiAgICAgICAgICAgIGlmIChzaG91bGRVcGRhdGVTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5maWx0ZXJWYWx1ZXMuaGFzKG51bGwpKSB7XG4gICAgICAgICAgICAgICAgICAgIGJsYW5rcy5pc1NlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYmxhbmtzLmlzRmlsdGVyZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGJsYW5rcy5pc1NlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGJsYW5rcy5pc0ZpbHRlcmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYmxhbmtzLmlzU2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgYmxhbmtzLmlzRmlsdGVyZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGJsYW5rcy52YWx1ZSA9IG51bGw7XG4gICAgICAgIGJsYW5rcy5sYWJlbCA9IHRoaXMuZ3JpZC5yZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfZXhjZWxfYmxhbmtzO1xuICAgICAgICBibGFua3MuaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuICAgICAgICBibGFua3MuaXNTcGVjaWFsID0gdHJ1ZTtcbiAgICAgICAgYmxhbmtzLmlzQmxhbmtzID0gdHJ1ZTtcblxuICAgICAgICByZXR1cm4gYmxhbmtzO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RmlsdGVySXRlbUxhYmVsKHZhbHVlOiBhbnksIGFwcGx5Rm9ybWF0dGVyID0gdHJ1ZSwgZGF0YT86IGFueSkge1xuICAgICAgICBpZiAodGhpcy5jb2x1bW4uZm9ybWF0dGVyKSB7XG4gICAgICAgICAgICBpZiAoYXBwbHlGb3JtYXR0ZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW4uZm9ybWF0dGVyKHZhbHVlLCBkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgZGlzcGxheSwgZm9ybWF0LCBkaWdpdHNJbmZvLCBjdXJyZW5jeUNvZGUsIHRpbWV6b25lIH0gPSB0aGlzLmNvbHVtbi5waXBlQXJncztcbiAgICAgICAgY29uc3QgbG9jYWxlID0gdGhpcy5ncmlkLmxvY2FsZTtcblxuICAgICAgICBzd2l0Y2ggKHRoaXMuY29sdW1uLmRhdGFUeXBlKSB7XG4gICAgICAgICAgICBjYXNlIEdyaWRDb2x1bW5EYXRhVHlwZS5EYXRlOlxuICAgICAgICAgICAgY2FzZSBHcmlkQ29sdW1uRGF0YVR5cGUuRGF0ZVRpbWU6XG4gICAgICAgICAgICBjYXNlIEdyaWRDb2x1bW5EYXRhVHlwZS5UaW1lOlxuICAgICAgICAgICAgICAgIHJldHVybiBmb3JtYXREYXRlKHZhbHVlLCBmb3JtYXQsIGxvY2FsZSwgdGltZXpvbmUpO1xuICAgICAgICAgICAgY2FzZSBHcmlkQ29sdW1uRGF0YVR5cGUuQ3VycmVuY3k6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvcm1hdEN1cnJlbmN5KHZhbHVlLCBjdXJyZW5jeUNvZGUgfHwgZ2V0TG9jYWxlQ3VycmVuY3lDb2RlKGxvY2FsZSksIGRpc3BsYXksIGRpZ2l0c0luZm8sIGxvY2FsZSk7XG4gICAgICAgICAgICBjYXNlIEdyaWRDb2x1bW5EYXRhVHlwZS5OdW1iZXI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvcm1hdE51bWJlcih2YWx1ZSwgbG9jYWxlLCBkaWdpdHNJbmZvKTtcbiAgICAgICAgICAgIGNhc2UgR3JpZENvbHVtbkRhdGFUeXBlLlBlcmNlbnQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvcm1hdFBlcmNlbnQodmFsdWUsIGxvY2FsZSwgZGlnaXRzSW5mbyk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RXhwcmVzc2lvblZhbHVlKHZhbHVlOiBhbnkpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5jb2x1bW4uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5EYXRlKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlID8gbmV3IERhdGUodmFsdWUpLnRvRGF0ZVN0cmluZygpIDogdmFsdWU7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb2x1bW4uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5EYXRlVGltZSkge1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSA/IG5ldyBEYXRlKHZhbHVlKS50b0lTT1N0cmluZygpIDogdmFsdWU7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb2x1bW4uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5UaW1lKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlID8gbmV3IERhdGUodmFsdWUpLnRvTG9jYWxlVGltZVN0cmluZygpIDogdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxufVxuIiwiPG5nLXRlbXBsYXRlICNkZWZhdWx0RXhjZWxDb2x1bW5PcGVyYXRpb25zPlxuICAgIDxpZ3gtZXhjZWwtc3R5bGUtaGVhZGVyXG4gICAgICAgIFtzaG93SGlkaW5nXT1cInNpemUgIT09ICczJyAmJiAhY29sdW1uPy5kaXNhYmxlSGlkaW5nXCJcbiAgICAgICAgW3Nob3dQaW5uaW5nXT1cInNpemUgIT09ICczJyAmJiAhY29sdW1uPy5kaXNhYmxlUGlubmluZ1wiXG4gICAgICAgIFtzaG93U2VsZWN0aW5nXT1cInNpemUgIT09ICczJyAmJiBjb2x1bW5TZWxlY3RhYmxlKClcIlxuICAgID5cbiAgICA8L2lneC1leGNlbC1zdHlsZS1oZWFkZXI+XG5cbiAgICA8aWd4LWV4Y2VsLXN0eWxlLXNvcnRpbmcgKm5nSWY9XCJjb2x1bW4/LnNvcnRhYmxlXCI+XG4gICAgPC9pZ3gtZXhjZWwtc3R5bGUtc29ydGluZz5cblxuICAgIDxpZ3gtZXhjZWwtc3R5bGUtbW92aW5nICpuZ0lmPVwiZ3JpZD8ubW92aW5nXCI+XG4gICAgPC9pZ3gtZXhjZWwtc3R5bGUtbW92aW5nPlxuXG4gICAgPGlneC1leGNlbC1zdHlsZS1waW5uaW5nICpuZ0lmPVwiIWNvbHVtbj8uZGlzYWJsZVBpbm5pbmcgJiYgc2l6ZSA9PT0gJzMnXCI+XG4gICAgPC9pZ3gtZXhjZWwtc3R5bGUtcGlubmluZz5cblxuICAgIDxpZ3gtZXhjZWwtc3R5bGUtaGlkaW5nICpuZ0lmPVwiIWNvbHVtbj8uZGlzYWJsZUhpZGluZyAmJiBzaXplID09PSAnMydcIj5cbiAgICA8L2lneC1leGNlbC1zdHlsZS1oaWRpbmc+XG5cbiAgICA8aWd4LWV4Y2VsLXN0eWxlLXNlbGVjdGluZyAqbmdJZj1cImNvbHVtblNlbGVjdGFibGUoKSAmJiBzaXplID09PSAnMydcIj5cbiAgICA8L2lneC1leGNlbC1zdHlsZS1zZWxlY3Rpbmc+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRFeGNlbEZpbHRlck9wZXJhdGlvbnM+XG4gICAgPGlneC1leGNlbC1zdHlsZS1jbGVhci1maWx0ZXJzPlxuICAgIDwvaWd4LWV4Y2VsLXN0eWxlLWNsZWFyLWZpbHRlcnM+XG5cbiAgICA8aWd4LWV4Y2VsLXN0eWxlLWNvbmRpdGlvbmFsLWZpbHRlcj5cbiAgICA8L2lneC1leGNlbC1zdHlsZS1jb25kaXRpb25hbC1maWx0ZXI+XG5cbiAgICA8aWd4LWV4Y2VsLXN0eWxlLXNlYXJjaD5cbiAgICA8L2lneC1leGNlbC1zdHlsZS1zZWFyY2g+XG48L25nLXRlbXBsYXRlPlxuXG48YXJ0aWNsZSAjbWFpbkRyb3Bkb3duXG4gICAgY2xhc3M9XCJpZ3gtZXhjZWwtZmlsdGVyX19tZW51XCJcbiAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICdpZ3gtZXhjZWwtZmlsdGVyX19zaXppbmcnOiBzaG91bGRBcHBseVNpemVzLFxuICAgICAgICAnaWd4LWV4Y2VsLWZpbHRlcl9fbWVudS0tY29zeSc6IHNpemUgPT09ICcyJyxcbiAgICAgICAgJ2lneC1leGNlbC1maWx0ZXJfX21lbnUtLWNvbXBhY3QnOiBzaXplID09PSAnMSdcbiAgICB9XCJcbiAgICBbaWRdPVwib3ZlcmxheUNvbXBvbmVudElkXCJcbiAgICAoa2V5ZG93bik9XCJvbktleURvd24oJGV2ZW50KVwiXG4gICAgW3N0eWxlLm1pbi1oZWlnaHRdPVwibWluSGVpZ2h0XCJcbiAgICBbc3R5bGUubWF4LWhlaWdodF09XCJtYXhIZWlnaHRcIlxuICAgIHJvbGU9XCJtZW51XCI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGhpcy5leGNlbENvbHVtbk9wZXJhdGlvbnNEaXJlY3RpdmU7IGVsc2UgZGVmYXVsdEV4Y2VsQ29sdW1uT3BlcmF0aW9uc1wiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJpZ3gtZXhjZWwtc3R5bGUtY29sdW1uLW9wZXJhdGlvbnMsW2lneEV4Y2VsU3R5bGVDb2x1bW5PcGVyYXRpb25zXVwiPlxuICAgICAgICA8L25nLWNvbnRlbnQ+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGhpcy5leGNlbEZpbHRlck9wZXJhdGlvbnNEaXJlY3RpdmU7IGVsc2UgZGVmYXVsdEV4Y2VsRmlsdGVyT3BlcmF0aW9uc1wiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJpZ3gtZXhjZWwtc3R5bGUtZmlsdGVyLW9wZXJhdGlvbnMsW2lneEV4Y2VsU3R5bGVGaWx0ZXJPcGVyYXRpb25zXVwiPlxuICAgICAgICA8L25nLWNvbnRlbnQ+XG4gICAgPC9uZy1jb250YWluZXI+XG48L2FydGljbGU+XG4iXX0=
649
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhjZWwtc3R5bGUtZmlsdGVyaW5nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9ncmlkcy9maWx0ZXJpbmcvZXhjZWwtc3R5bGUvZXhjZWwtc3R5bGUtZmlsdGVyaW5nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9ncmlkcy9maWx0ZXJpbmcvZXhjZWwtc3R5bGUvZXhjZWwtc3R5bGUtZmlsdGVyaW5nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULFlBQVksRUFDWixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixVQUFVLEVBQ1YsSUFBSSxFQUNKLFdBQVcsRUFDWCxNQUFNLEVBQ04sS0FBSyxFQUVMLFFBQVEsRUFDUixNQUFNLEVBQ04sV0FBVyxFQUNYLFNBQVMsRUFFWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsd0JBQXdCLEVBQTZCLE1BQU0scURBQXFELENBQUM7QUFDMUgsT0FBTyxFQUFnQixVQUFVLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDL0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFeEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUscUJBQXFCLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5RyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQWdCLGNBQWMsRUFBRSx1QkFBdUIsRUFB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QWdCO3NCQUQ3QixXQUFXO3VCQUFDLGdDQUFnQztnQkFTdEMsTUFBTTtzQkFEWixXQUFXO3VCQUFDLGdDQUFnQztnQkFPdEMsWUFBWTtzQkFEbEIsTUFBTTtnQkFPQSxVQUFVO3NCQURoQixNQUFNO2dCQU9BLFdBQVc7c0JBRGpCLE1BQU07Z0JBT0EsY0FBYztzQkFEcEIsTUFBTTtnQkFPQSxZQUFZO3NCQURsQixNQUFNO2dCQU9BLGNBQWM7c0JBRHBCLE1BQU07Z0JBSUEsWUFBWTtzQkFEbEIsU0FBUzt1QkFBQyxjQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQU94Qyw4QkFBOEI7c0JBRHBDLFlBQVk7dUJBQUMsOENBQThDLEVBQUUsRUFBRSxJQUFJLEVBQUUsOENBQThDLEVBQUU7Z0JBTy9HLDhCQUE4QjtzQkFEcEMsWUFBWTt1QkFBQyw4Q0FBOEMsRUFBRSxFQUFFLElBQUksRUFBRSw4Q0FBOEMsRUFBRTtnQkFPNUcsNEJBQTRCO3NCQURyQyxTQUFTO3VCQUFDLDhCQUE4QixFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQU9wRSw0QkFBNEI7c0JBRHJDLFNBQVM7dUJBQUMsOEJBQThCLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBT25FLE1BQU07c0JBRGhCLEtBQUs7Z0JBNEVLLFNBQVM7c0JBRG5CLEtBQUs7Z0JBdUNLLFNBQVM7c0JBRm5CLEtBQUs7O3NCQUNMLFdBQVc7dUJBQUMsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgRGlyZWN0aXZlLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGZvcndhcmRSZWYsXG4gICAgSG9zdCxcbiAgICBIb3N0QmluZGluZyxcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld1JlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSwgSUZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSB9IGZyb20gJy4uLy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9maWx0ZXJpbmctZXhwcmVzc2lvbnMtdHJlZSc7XG5pbXBvcnQgeyBQbGF0Zm9ybVV0aWwsIGZvcm1hdERhdGUsIGZvcm1hdEN1cnJlbmN5IH0gZnJvbSAnLi4vLi4vLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBHcmlkQ29sdW1uRGF0YVR5cGUgfSBmcm9tICcuLi8uLi8uLi9kYXRhLW9wZXJhdGlvbnMvZGF0YS11dGlsJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgR3JpZFNlbGVjdGlvbk1vZGUgfSBmcm9tICcuLi8uLi9jb21tb24vZW51bXMnO1xuaW1wb3J0IHsgSWd4RmlsdGVySXRlbSB9IGZyb20gJy4uLy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9maWx0ZXJpbmctc3RyYXRlZ3knO1xuaW1wb3J0IHsgZm9ybWF0TnVtYmVyLCBmb3JtYXRQZXJjZW50LCBnZXRMb2NhbGVDdXJyZW5jeUNvZGUsIE5nSWYsIE5nQ2xhc3MsIERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEJhc2VGaWx0ZXJpbmdDb21wb25lbnQgfSBmcm9tICcuL2Jhc2UtZmlsdGVyaW5nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFeHByZXNzaW9uVUksIEZpbHRlckxpc3RJdGVtLCBnZW5lcmF0ZUV4cHJlc3Npb25zTGlzdCB9IGZyb20gJy4vY29tbW9uJztcbmltcG9ydCB7IENvbHVtblR5cGUsIEdyaWRUeXBlLCBJR1hfR1JJRF9CQVNFIH0gZnJvbSAnLi4vLi4vY29tbW9uL2dyaWQuaW50ZXJmYWNlJztcbmltcG9ydCB7IElneE92ZXJsYXlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvb3ZlcmxheS9vdmVybGF5JztcbmltcG9ydCB7IFNvcnRpbmdEaXJlY3Rpb24gfSBmcm9tICcuLi8uLi8uLi9kYXRhLW9wZXJhdGlvbnMvc29ydGluZy1zdHJhdGVneSc7XG5pbXBvcnQgeyBJZ3hFeGNlbFN0eWxlU2VhcmNoQ29tcG9uZW50IH0gZnJvbSAnLi9leGNlbC1zdHlsZS1zZWFyY2guY29tcG9uZW50JztcbmltcG9ydCB7IElneEV4Y2VsU3R5bGVDb25kaXRpb25hbEZpbHRlckNvbXBvbmVudCB9IGZyb20gJy4vZXhjZWwtc3R5bGUtY29uZGl0aW9uYWwtZmlsdGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hFeGNlbFN0eWxlQ2xlYXJGaWx0ZXJzQ29tcG9uZW50IH0gZnJvbSAnLi9leGNlbC1zdHlsZS1jbGVhci1maWx0ZXJzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hFeGNlbFN0eWxlU2VsZWN0aW5nQ29tcG9uZW50IH0gZnJvbSAnLi9leGNlbC1zdHlsZS1zZWxlY3RpbmcuY29tcG9uZW50JztcbmltcG9ydCB7IElneEV4Y2VsU3R5bGVIaWRpbmdDb21wb25lbnQgfSBmcm9tICcuL2V4Y2VsLXN0eWxlLWhpZGluZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4RXhjZWxTdHlsZVBpbm5pbmdDb21wb25lbnQgfSBmcm9tICcuL2V4Y2VsLXN0eWxlLXBpbm5pbmcuY29tcG9uZW50JztcbmltcG9ydCB7IElneEV4Y2VsU3R5bGVNb3ZpbmdDb21wb25lbnQgfSBmcm9tICcuL2V4Y2VsLXN0eWxlLW1vdmluZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4RXhjZWxTdHlsZVNvcnRpbmdDb21wb25lbnQgfSBmcm9tICcuL2V4Y2VsLXN0eWxlLXNvcnRpbmcuY29tcG9uZW50JztcbmltcG9ydCB7IElneEV4Y2VsU3R5bGVIZWFkZXJDb21wb25lbnQgfSBmcm9tICcuL2V4Y2VsLXN0eWxlLWhlYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgaXNUcmVlIH0gZnJvbSAnLi4vLi4vLi4vZGF0YS1vcGVyYXRpb25zL2V4cHJlc3Npb25zLXRyZWUtdXRpbCc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnaWd4LWV4Y2VsLXN0eWxlLWNvbHVtbi1vcGVyYXRpb25zLFtpZ3hFeGNlbFN0eWxlQ29sdW1uT3BlcmF0aW9uc10nLFxuICAgIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgSWd4RXhjZWxTdHlsZUNvbHVtbk9wZXJhdGlvbnNUZW1wbGF0ZURpcmVjdGl2ZSB7IH1cblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdpZ3gtZXhjZWwtc3R5bGUtZmlsdGVyLW9wZXJhdGlvbnMsW2lneEV4Y2VsU3R5bGVGaWx0ZXJPcGVyYXRpb25zXScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hFeGNlbFN0eWxlRmlsdGVyT3BlcmF0aW9uc1RlbXBsYXRlRGlyZWN0aXZlIHsgfVxuXG4vKipcbiAqIEEgY29tcG9uZW50IHVzZWQgZm9yIHByZXNlbnRpbmcgRXhjZWwgc3R5bGUgZmlsdGVyaW5nIFVJIGZvciBhIHNwZWNpZmljIGNvbHVtbi5cbiAqIEl0IGlzIHVzZWQgaW50ZXJuYWxseSBpbiB0aGUgR3JpZCwgYnV0IGNvdWxkIGFsc28gYmUgaG9zdGVkIGluIGEgY29udGFpbmVyIG91dHNpZGUgb2YgaXQuXG4gKlxuICogRXhhbXBsZTpcbiAqIGBgYGh0bWxcbiAqIDxpZ3gtZ3JpZC1leGNlbC1zdHlsZS1maWx0ZXJpbmdcbiAqICAgICBbY29sdW1uXT1cImdyaWQxLmNvbHVtbnNbMF1cIj5cbiAqIDwvaWd4LWdyaWQtZXhjZWwtc3R5bGUtZmlsdGVyaW5nPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogQmFzZUZpbHRlcmluZ0NvbXBvbmVudCwgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gSWd4R3JpZEV4Y2VsU3R5bGVGaWx0ZXJpbmdDb21wb25lbnQpIH1dLFxuICAgIHNlbGVjdG9yOiAnaWd4LWdyaWQtZXhjZWwtc3R5bGUtZmlsdGVyaW5nJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZXhjZWwtc3R5bGUtZmlsdGVyaW5nLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtJZ3hFeGNlbFN0eWxlSGVhZGVyQ29tcG9uZW50LCBOZ0lmLCBJZ3hFeGNlbFN0eWxlU29ydGluZ0NvbXBvbmVudCwgSWd4RXhjZWxTdHlsZU1vdmluZ0NvbXBvbmVudCwgSWd4RXhjZWxTdHlsZVBpbm5pbmdDb21wb25lbnQsIElneEV4Y2VsU3R5bGVIaWRpbmdDb21wb25lbnQsIElneEV4Y2VsU3R5bGVTZWxlY3RpbmdDb21wb25lbnQsIElneEV4Y2VsU3R5bGVDbGVhckZpbHRlcnNDb21wb25lbnQsIElneEV4Y2VsU3R5bGVDb25kaXRpb25hbEZpbHRlckNvbXBvbmVudCwgSWd4RXhjZWxTdHlsZVNlYXJjaENvbXBvbmVudCwgTmdDbGFzc11cbn0pXG5leHBvcnQgY2xhc3MgSWd4R3JpZEV4Y2VsU3R5bGVGaWx0ZXJpbmdDb21wb25lbnQgZXh0ZW5kcyBCYXNlRmlsdGVyaW5nQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtZXhjZWwtZmlsdGVyJylcbiAgICBwdWJsaWMgZGVmYXVsdENsYXNzID0gdHJ1ZTtcblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWV4Y2VsLWZpbHRlcl9fc2l6aW5nJylcbiAgICBwcm90ZWN0ZWQgZ2V0IHNob3VsZEFwcGx5U2l6ZXMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhKHRoaXMuX21pbkhlaWdodCB8fCB0aGlzLl9tYXhIZWlnaHQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtZXhjZWwtZmlsdGVyLS1pbmxpbmUnKVxuICAgIHB1YmxpYyBpbmxpbmUgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgbG9hZGluZ1N0YXJ0ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgbG9hZGluZ0VuZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGluaXRpYWxpemVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgc29ydGluZ0NoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBjb2x1bW5DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPENvbHVtblR5cGU+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBsaXN0RGF0YUxvYWRlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBWaWV3Q2hpbGQoJ21haW5Ecm9wZG93bicsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIHB1YmxpYyBtYWluRHJvcGRvd246IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKElneEV4Y2VsU3R5bGVDb2x1bW5PcGVyYXRpb25zVGVtcGxhdGVEaXJlY3RpdmUsIHsgcmVhZDogSWd4RXhjZWxTdHlsZUNvbHVtbk9wZXJhdGlvbnNUZW1wbGF0ZURpcmVjdGl2ZSB9KVxuICAgIHB1YmxpYyBleGNlbENvbHVtbk9wZXJhdGlvbnNEaXJlY3RpdmU6IElneEV4Y2VsU3R5bGVDb2x1bW5PcGVyYXRpb25zVGVtcGxhdGVEaXJlY3RpdmU7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoSWd4RXhjZWxTdHlsZUZpbHRlck9wZXJhdGlvbnNUZW1wbGF0ZURpcmVjdGl2ZSwgeyByZWFkOiBJZ3hFeGNlbFN0eWxlRmlsdGVyT3BlcmF0aW9uc1RlbXBsYXRlRGlyZWN0aXZlIH0pXG4gICAgcHVibGljIGV4Y2VsRmlsdGVyT3BlcmF0aW9uc0RpcmVjdGl2ZTogSWd4RXhjZWxTdHlsZUZpbHRlck9wZXJhdGlvbnNUZW1wbGF0ZURpcmVjdGl2ZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgnZGVmYXVsdEV4Y2VsQ29sdW1uT3BlcmF0aW9ucycsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICAgIHByb3RlY3RlZCBkZWZhdWx0RXhjZWxDb2x1bW5PcGVyYXRpb25zOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCdkZWZhdWx0RXhjZWxGaWx0ZXJPcGVyYXRpb25zJywgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJvdGVjdGVkIGRlZmF1bHRFeGNlbEZpbHRlck9wZXJhdGlvbnM6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBjb2x1bW4uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IGNvbHVtbih2YWx1ZTogQ29sdW1uVHlwZSkge1xuICAgICAgICB0aGlzLl9jb2x1bW4gPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5saXN0RGF0YSA9IG5ldyBBcnJheTxGaWx0ZXJMaXN0SXRlbT4oKTtcbiAgICAgICAgdGhpcy5jb2x1bW5DaGFuZ2UuZW1pdCh0aGlzLl9jb2x1bW4pO1xuXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucz8udW5zdWJzY3JpYmUoKTtcblxuICAgICAgICBpZiAodGhpcy5fY29sdW1uKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQuZmlsdGVyaW5nU2VydmljZS5yZWdpc3RlclNWR0ljb25zKCk7XG4gICAgICAgICAgICB0aGlzLmluaXQoKTtcbiAgICAgICAgICAgIHRoaXMuc29ydGluZ0NoYW5nZWQuZW1pdCgpO1xuXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSB0aGlzLmdyaWQuY29sdW1uUGluLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodGhpcy5jZHIgYXMgVmlld1JlZikuZGVzdHJveWVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMuZ3JpZC5jb2x1bW5WaXNpYmlsaXR5Q2hhbmdlZC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5kZXRlY3RDaGFuZ2VzKCkpKTtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5ncmlkLnNvcnRpbmdFeHByZXNzaW9uc0NoYW5nZS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5zb3J0aW5nQ2hhbmdlZC5lbWl0KCkpKTtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5ncmlkLmZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZUNoYW5nZS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5pbml0KCkpKTtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5ncmlkLmNvbHVtbk1vdmluZ0VuZC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jZHIubWFya0ZvckNoZWNrKCkpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgY29sdW1uLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgY29sdW1uKCk6IENvbHVtblR5cGUge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sdW1uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGV4cHJlc3Npb25zTGlzdCA9IG5ldyBBcnJheTxFeHByZXNzaW9uVUk+KCk7XG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgbGlzdERhdGEgPSBuZXcgQXJyYXk8RmlsdGVyTGlzdEl0ZW0+KCk7XG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgdW5pcXVlVmFsdWVzOiBJZ3hGaWx0ZXJJdGVtW10gPSBbXTtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVybGF5U2VydmljZTogSWd4T3ZlcmxheVNlcnZpY2U7XG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcmxheUNvbXBvbmVudElkOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgaXNIaWVyYXJjaGljYWwgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgX21pbkhlaWdodDtcblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIG1pbmltdW0gaGVpZ2h0LlxuICAgICAqXG4gICAgICogU2V0dGluZyB2YWx1ZSBpbiB0ZW1wbGF0ZTpcbiAgICAgKiBgYGB0c1xuICAgICAqIFttaW5IZWlnaHRdPVwiJzxudW1iZXI+PHVuaXQgKHB4fHJlbXxldGMuLik+J1wiXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBFeGFtcGxlIGZvciBzZXR0aW5nIGEgdmFsdWU6XG4gICAgICogYGBgdHNcbiAgICAgKiBbbWluSGVpZ2h0XT1cIic3MDBweCdcIlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBtaW5IZWlnaHQoKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuX21pbkhlaWdodCB8fCB0aGlzLl9taW5IZWlnaHQgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9taW5IZWlnaHQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBtaW5pbXVtIGhlaWdodC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IG1pbkhlaWdodCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX21pbkhlaWdodCA9IHZhbHVlO1xuICAgIH1cblxuXG4gICAgcHJpdmF0ZSBfbWF4SGVpZ2h0OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBjb250YWluc051bGxPckVtcHR5ID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBzZWxlY3RBbGxTZWxlY3RlZCA9IHRydWU7XG4gICAgcHJpdmF0ZSBzZWxlY3RBbGxJbmRldGVybWluYXRlID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBmaWx0ZXJWYWx1ZXMgPSBuZXcgU2V0PGFueT4oKTtcbiAgICBwcml2YXRlIF9jb2x1bW46IENvbHVtblR5cGU7XG4gICAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBfb3JpZ2luYWxEaXNwbGF5OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBtYXhpbXVtIGhlaWdodC5cbiAgICAgKlxuICAgICAqIFNldHRpbmcgdmFsdWUgaW4gdGVtcGxhdGU6XG4gICAgICogYGBgdHNcbiAgICAgKiBbbWF4SGVpZ2h0XT1cIic8bnVtYmVyPjx1bml0IChweHxyZW18ZXRjLi4pPidcIlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogRXhhbXBsZSBmb3Igc2V0dGluZyBhIHZhbHVlOlxuICAgICAqIGBgYHRzXG4gICAgICogW21heEhlaWdodF09XCInNzAwcHgnXCJcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnc3R5bGUubWF4LWhlaWdodCcpXG4gICAgcHVibGljIGdldCBtYXhIZWlnaHQoKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuX21heEhlaWdodCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21heEhlaWdodDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG1heGltdW0gaGVpZ2h0LlxuICAgICAqL1xuICAgIHB1YmxpYyBzZXQgbWF4SGVpZ2h0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fbWF4SGVpZ2h0ID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGdyaWQoKTogR3JpZFR5cGUge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW4/LmdyaWQgPz8gdGhpcy5ncmlkQVBJO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBlbGVtZW50OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgICAgcGxhdGZvcm06IFBsYXRmb3JtVXRpbCxcbiAgICAgICAgQEluamVjdChET0NVTUVOVClcbiAgICAgICAgcHJpdmF0ZSBkb2N1bWVudDogYW55LFxuICAgICAgICBASG9zdCgpIEBPcHRpb25hbCgpIEBJbmplY3QoSUdYX0dSSURfQkFTRSkgcHJvdGVjdGVkIGdyaWRBUEk/OiBHcmlkVHlwZSxcbiAgICApIHtcbiAgICAgICAgc3VwZXIoY2RyLCBlbGVtZW50LCBwbGF0Zm9ybSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucz8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgZGVsZXRlIHRoaXMub3ZlcmxheUNvbXBvbmVudElkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb21wdXRlZFN0eWxlcyA9IHRoaXMuZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBpbml0aWFsaXplKGNvbHVtbjogQ29sdW1uVHlwZSwgb3ZlcmxheVNlcnZpY2U6IElneE92ZXJsYXlTZXJ2aWNlKSB7XG4gICAgICAgIHRoaXMuaW5saW5lID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY29sdW1uID0gY29sdW1uO1xuICAgICAgICB0aGlzLm92ZXJsYXlTZXJ2aWNlID0gb3ZlcmxheVNlcnZpY2U7XG4gICAgICAgIGlmICh0aGlzLl9vcmlnaW5hbERpc3BsYXkpIHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSB0aGlzLl9vcmlnaW5hbERpc3BsYXk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmluaXRpYWxpemVkLmVtaXQoKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmdyaWQuY29sdW1uTW92aW5nLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNsb3NlRHJvcGRvd24oKSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG9uUGluKCkge1xuICAgICAgICB0aGlzLmNsb3NlRHJvcGRvd24oKTtcbiAgICAgICAgdGhpcy5jb2x1bW4ucGlubmVkID0gIXRoaXMuY29sdW1uLnBpbm5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvblNlbGVjdCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbHVtbi5zZWxlY3RlZCkge1xuICAgICAgICAgICAgdGhpcy5ncmlkLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0Q29sdW1uKHRoaXMuY29sdW1uLmZpZWxkLCB0aGlzLmdyaWQuY29sdW1uU2VsZWN0aW9uID09PSBHcmlkU2VsZWN0aW9uTW9kZS5zaW5nbGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5ncmlkLnNlbGVjdGlvblNlcnZpY2UuZGVzZWxlY3RDb2x1bW4odGhpcy5jb2x1bW4uZmllbGQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ3JpZC5ub3RpZnlDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgY29sdW1uU2VsZWN0YWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZD8uY29sdW1uU2VsZWN0aW9uICE9PSBHcmlkU2VsZWN0aW9uTW9kZS5ub25lICYmIHRoaXMuY29sdW1uPy5zZWxlY3RhYmxlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG9uSGlkZVRvZ2dsZSgpIHtcbiAgICAgICAgdGhpcy5jb2x1bW4udG9nZ2xlVmlzaWJpbGl0eSgpO1xuICAgICAgICB0aGlzLmNsb3NlRHJvcGRvd24oKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBjYW5jZWwoKSB7XG4gICAgICAgIGlmICghdGhpcy5vdmVybGF5Q29tcG9uZW50SWQpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2xvc2VEcm9wZG93bigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGNsb3NlRHJvcGRvd24oKSB7XG4gICAgICAgIGlmICh0aGlzLm92ZXJsYXlDb21wb25lbnRJZCkge1xuICAgICAgICAgICAgdGhpcy5vdmVybGF5U2VydmljZS5oaWRlKHRoaXMub3ZlcmxheUNvbXBvbmVudElkKTtcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheUNvbXBvbmVudElkID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG9uS2V5RG93bihldmVudEFyZ3M6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMucGxhdGZvcm0uaXNGaWx0ZXJpbmdLZXlDb21ibyhldmVudEFyZ3MpKSB7XG4gICAgICAgICAgICBldmVudEFyZ3MucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VEcm9wZG93bigpO1xuICAgICAgICB9XG4gICAgICAgIGV2ZW50QXJncy5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBoaWRlKCkge1xuICAgICAgICB0aGlzLl9vcmlnaW5hbERpc3BsYXkgPSB0aGlzLmNvbXB1dGVkU3R5bGVzLmRpc3BsYXk7XG4gICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZGV0ZWN0Q2hhbmdlcygpIHtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBjb21wdXRlZFN0eWxlcztcblxuICAgIHByb3RlY3RlZCBnZXQgc2l6ZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5jb21wdXRlZFN0eWxlcz8uZ2V0UHJvcGVydHlWYWx1ZSgnLS1jb21wb25lbnQtc2l6ZScpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdCgpIHtcbiAgICAgICAgdGhpcy5leHByZXNzaW9uc0xpc3QgPSBuZXcgQXJyYXk8RXhwcmVzc2lvblVJPigpO1xuICAgICAgICBnZW5lcmF0ZUV4cHJlc3Npb25zTGlzdCh0aGlzLmNvbHVtbi5maWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUsIHRoaXMuZ3JpZC5maWx0ZXJpbmdMb2dpYywgdGhpcy5leHByZXNzaW9uc0xpc3QpO1xuICAgICAgICB0aGlzLnBvcHVsYXRlQ29sdW1uRGF0YSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXJlRXhwcmVzc2lvbnNTZWxlY3RhYmxlKCkge1xuICAgICAgICBpZiAodGhpcy5leHByZXNzaW9uc0xpc3QubGVuZ3RoID09PSAxICYmXG4gICAgICAgICAgICAodGhpcy5leHByZXNzaW9uc0xpc3RbMF0uZXhwcmVzc2lvbi5jb25kaXRpb24ubmFtZSA9PT0gJ2VxdWFscycgfHxcbiAgICAgICAgICAgICAgICB0aGlzLmV4cHJlc3Npb25zTGlzdFswXS5leHByZXNzaW9uLmNvbmRpdGlvbi5uYW1lID09PSAnYXQnIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5leHByZXNzaW9uc0xpc3RbMF0uZXhwcmVzc2lvbi5jb25kaXRpb24ubmFtZSA9PT0gJ3RydWUnIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5leHByZXNzaW9uc0xpc3RbMF0uZXhwcmVzc2lvbi5jb25kaXRpb24ubmFtZSA9PT0gJ2ZhbHNlJyB8fFxuICAgICAgICAgICAgICAgIHRoaXMuZXhwcmVzc2lvbnNMaXN0WzBdLmV4cHJlc3Npb24uY29uZGl0aW9uLm5hbWUgPT09ICdlbXB0eScgfHxcbiAgICAgICAgICAgICAgICB0aGlzLmV4cHJlc3Npb25zTGlzdFswXS5leHByZXNzaW9uLmNvbmRpdGlvbi5uYW1lID09PSAnaW4nKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzZWxlY3RhYmxlRXhwcmVzc2lvbnNDb3VudCA9IHRoaXMuZXhwcmVzc2lvbnNMaXN0LmZpbHRlcihleHAgPT5cbiAgICAgICAgICAgIChleHAuYmVmb3JlT3BlcmF0b3IgPT09IDEgfHwgZXhwLmFmdGVyT3BlcmF0b3IgPT09IDEpICYmXG4gICAgICAgICAgICAoZXhwLmV4cHJlc3Npb24uY29uZGl0aW9uLm5hbWUgPT09ICdlcXVhbHMnIHx8XG4gICAgICAgICAgICAgICAgZXhwLmV4cHJlc3Npb24uY29uZGl0aW9uLm5hbWUgPT09ICdhdCcgfHxcbiAgICAgICAgICAgICAgICBleHAuZXhwcmVzc2lvbi5jb25kaXRpb24ubmFtZSA9PT0gJ3RydWUnIHx8XG4gICAgICAgICAgICAgICAgZXhwLmV4cHJlc3Npb24uY29uZGl0aW9uLm5hbWUgPT09ICdmYWxzZScgfHxcbiAgICAgICAgICAgICAgICBleHAuZXhwcmVzc2lvbi5jb25kaXRpb24ubmFtZSA9PT0gJ2VtcHR5JyB8fFxuICAgICAgICAgICAgICAgIGV4cC5leHByZXNzaW9uLmNvbmRpdGlvbi5uYW1lID09PSAnaW4nKSkubGVuZ3RoO1xuXG4gICAgICAgIHJldHVybiBzZWxlY3RhYmxlRXhwcmVzc2lvbnNDb3VudCA9PT0gdGhpcy5leHByZXNzaW9uc0xpc3QubGVuZ3RoO1xuICAgIH1cblxuICAgIHByaXZhdGUgcG9wdWxhdGVDb2x1bW5EYXRhKCkge1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuZ3JpZC51bmlxdWVDb2x1bW5WYWx1ZXNTdHJhdGVneSkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJDb2x1bW5WYWx1ZXNSZW1vdGVseSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJDb2x1bW5WYWx1ZXNGcm9tRGF0YSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJDb2x1bW5WYWx1ZXNSZW1vdGVseSgpIHtcbiAgICAgICAgdGhpcy5sb2FkaW5nU3RhcnQuZW1pdCgpO1xuICAgICAgICBjb25zdCBleHByZXNzaW9uc1RyZWU6IEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSA9IHRoaXMuZ2V0Q29sdW1uRmlsdGVyRXhwcmVzc2lvbnNUcmVlKCk7XG5cbiAgICAgICAgY29uc3QgcHJldkNvbHVtbiA9IHRoaXMuY29sdW1uO1xuICAgICAgICB0aGlzLmdyaWQudW5pcXVlQ29sdW1uVmFsdWVzU3RyYXRlZ3kodGhpcy5jb2x1bW4sIGV4cHJlc3Npb25zVHJlZSwgKHZhbHVlczogYW55W10pID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5jb2x1bW4gfHwgdGhpcy5jb2x1bW4gIT09IHByZXZDb2x1bW4pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gdmFsdWVzLm1hcCh2ID0+ICh7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHZcbiAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgdGhpcy51bmlxdWVWYWx1ZXMgPSB0aGlzLmNvbHVtbi5zb3J0U3RyYXRlZ3kuc29ydChpdGVtcywgJ3ZhbHVlJywgU29ydGluZ0RpcmVjdGlvbi5Bc2MsIHRoaXMuY29sdW1uLnNvcnRpbmdJZ25vcmVDYXNlLFxuICAgICAgICAgICAgICAgIChvYmosIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcmVzb2x2ZWRWYWx1ZSA9IG9ialtrZXldO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb2x1bW4uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5UaW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlZFZhbHVlID0gbmV3IERhdGUoKS5zZXRIb3VycyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlZFZhbHVlLmdldEhvdXJzKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRWYWx1ZS5nZXRNaW51dGVzKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRWYWx1ZS5nZXRTZWNvbmRzKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRWYWx1ZS5nZXRNaWxsaXNlY29uZHMoKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZWRWYWx1ZTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5yZW5kZXJWYWx1ZXMoKTtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ0VuZC5lbWl0KCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyQ29sdW1uVmFsdWVzRnJvbURhdGEoKSB7XG4gICAgICAgIHRoaXMubG9hZGluZ1N0YXJ0LmVtaXQoKTtcblxuICAgICAgICBjb25zdCBleHByZXNzaW9uc1RyZWUgPSB0aGlzLmdldENvbHVtbkZpbHRlckV4cHJlc3Npb25zVHJlZSgpO1xuICAgICAgICBjb25zdCBwcm9taXNlID0gdGhpcy5ncmlkLmZpbHRlclN0cmF0ZWd5LmdldEZpbHRlckl0ZW1zKHRoaXMuY29sdW1uLCBleHByZXNzaW9uc1RyZWUpO1xuICAgICAgICBwcm9taXNlLnRoZW4oKGl0ZW1zKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzSGllcmFyY2hpY2FsID0gaXRlbXMubGVuZ3RoID4gMCAmJiBpdGVtcy5zb21lKGkgPT4gaS5jaGlsZHJlbiAmJiBpLmNoaWxkcmVuLmxlbmd0aCA+IDApO1xuICAgICAgICAgICAgdGhpcy51bmlxdWVWYWx1ZXMgPSBpdGVtcztcbiAgICAgICAgICAgIHRoaXMucmVuZGVyVmFsdWVzKCk7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdFbmQuZW1pdCgpO1xuICAgICAgICAgICAgdGhpcy5zb3J0aW5nQ2hhbmdlZC5lbWl0KCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyVmFsdWVzKCkge1xuICAgICAgICB0aGlzLmZpbHRlclZhbHVlcyA9IHRoaXMuZ2VuZXJhdGVGaWx0ZXJWYWx1ZXMoKTtcbiAgICAgICAgdGhpcy5nZW5lcmF0ZUxpc3REYXRhKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZW5lcmF0ZUZpbHRlclZhbHVlcygpIHtcbiAgICAgICAgY29uc3QgZm9ybWF0VmFsdWUgPSAodmFsdWU6IGFueSk6IGFueSA9PiB7XG4gICAgICAgICAgICBpZiAoIXZhbHVlKSByZXR1cm4gdmFsdWU7XG5cbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy5jb2x1bW4uZGF0YVR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIEdyaWRDb2x1bW5EYXRhVHlwZS5EYXRlOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUodmFsdWUpLnRvRGF0ZVN0cmluZygpO1xuICAgICAgICAgICAgICAgIGNhc2UgR3JpZENvbHVtbkRhdGFUeXBlLkRhdGVUaW1lOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUodmFsdWUpLnRvSVNPU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgY2FzZSBHcmlkQ29sdW1uRGF0YVR5cGUuVGltZTpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyB2YWx1ZSA6IG5ldyBEYXRlKHZhbHVlKS50b0xvY2FsZVRpbWVTdHJpbmcoKTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcHJvY2Vzc0V4cHJlc3Npb24gPSAoYXJyOiBhbnlbXSwgZTogYW55KTogYW55W10gPT4ge1xuICAgICAgICAgICAgaWYgKGUuZXhwcmVzc2lvbi5jb25kaXRpb24ubmFtZSA9PT0gJ2luJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBbLi4uYXJyLCAuLi5BcnJheS5mcm9tKChlLmV4cHJlc3Npb24uc2VhcmNoVmFsIGFzIFNldDxhbnk+KS52YWx1ZXMoKSkubWFwKHYgPT4gZm9ybWF0VmFsdWUodikpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbLi4uYXJyLCBmb3JtYXRWYWx1ZShlLmV4cHJlc3Npb24uc2VhcmNoVmFsKV07XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgZmlsdGVyVmFsdWVzID0gbmV3IFNldDxhbnk+KHRoaXMuZXhwcmVzc2lvbnNMaXN0LnJlZHVjZShwcm9jZXNzRXhwcmVzc2lvbiwgW10pKTtcblxuICAgICAgICByZXR1cm4gZmlsdGVyVmFsdWVzO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2VuZXJhdGVMaXN0RGF0YSgpIHtcbiAgICAgICAgdGhpcy5saXN0RGF0YSA9IG5ldyBBcnJheTxGaWx0ZXJMaXN0SXRlbT4oKTtcbiAgICAgICAgY29uc3Qgc2hvdWxkVXBkYXRlU2VsZWN0aW9uID0gdGhpcy5hcmVFeHByZXNzaW9uc1NlbGVjdGFibGUoKTtcblxuICAgICAgICBpZiAodGhpcy5jb2x1bW4uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5Cb29sZWFuKSB7XG4gICAgICAgICAgICB0aGlzLmFkZEJvb2xlYW5JdGVtcygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hZGRJdGVtcyhzaG91bGRVcGRhdGVTZWxlY3Rpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzSGllcmFyY2hpY2FsICYmIHRoaXMuY29udGFpbnNOdWxsT3JFbXB0eSkge1xuICAgICAgICAgICAgY29uc3QgYmxhbmtzSXRlbSA9IHRoaXMuZ2VuZXJhdGVCbGFua3NJdGVtKHNob3VsZFVwZGF0ZVNlbGVjdGlvbik7XG4gICAgICAgICAgICB0aGlzLmxpc3REYXRhLnVuc2hpZnQoYmxhbmtzSXRlbSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5saXN0RGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmFkZFNlbGVjdEFsbEl0ZW0oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghKHRoaXMuY2RyIGFzIGFueSkuZGVzdHJveWVkKSB7XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxpc3REYXRhTG9hZGVkLmVtaXQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENvbHVtbkZpbHRlckV4cHJlc3Npb25zVHJlZSgpIHtcbiAgICAgICAgY29uc3QgZ3JpZEV4cHJlc3Npb25zVHJlZTogSUZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSA9IHRoaXMuZ3JpZC5maWx0ZXJpbmdFeHByZXNzaW9uc1RyZWU7XG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb25zVHJlZSA9IG5ldyBGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUoZ3JpZEV4cHJlc3Npb25zVHJlZS5vcGVyYXRvciwgZ3JpZEV4cHJlc3Npb25zVHJlZS5maWVsZE5hbWUpO1xuXG4gICAgICAgIGZvciAoY29uc3Qgb3BlcmFuZCBvZiBncmlkRXhwcmVzc2lvbnNUcmVlLmZpbHRlcmluZ09wZXJhbmRzKSB7XG4gICAgICAgICAgICBpZiAoaXNUcmVlKG9wZXJhbmQpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29sdW1uRXhwclRyZWUgPSBvcGVyYW5kIGFzIEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZTtcbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uRXhwclRyZWUuZmllbGROYW1lID09PSB0aGlzLmNvbHVtbi5maWVsZCkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBleHByZXNzaW9uc1RyZWUuZmlsdGVyaW5nT3BlcmFuZHMucHVzaChvcGVyYW5kKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBleHByZXNzaW9uc1RyZWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRCb29sZWFuSXRlbXMoKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0QWxsU2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnNlbGVjdEFsbEluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy51bmlxdWVWYWx1ZXMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZWxlbWVudC52YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlckxpc3RJdGVtID0gbmV3IEZpbHRlckxpc3RJdGVtKCk7XG4gICAgICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb2x1bW4uZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdHJ1ZSAmJiB0aGlzLmV4cHJlc3Npb25zTGlzdC5maW5kKGV4cCA9PiBleHAuZXhwcmVzc2lvbi5jb25kaXRpb24ubmFtZSA9PT0gJ3RydWUnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyTGlzdEl0ZW0uaXNTZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJMaXN0SXRlbS5pc0ZpbHRlcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0QWxsSW5kZXRlcm1pbmF0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IGZhbHNlICYmIHRoaXMuZXhwcmVzc2lvbnNMaXN0LmZpbmQoZXhwID0+IGV4cC5leHByZXNzaW9uLmNvbmRpdGlvbi5uYW1lID09PSAnZmFsc2UnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyTGlzdEl0ZW0uaXNTZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJMaXN0SXRlbS5pc0ZpbHRlcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0QWxsSW5kZXRlcm1pbmF0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJMaXN0SXRlbS5pc1NlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJMaXN0SXRlbS5pc0ZpbHRlcmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJMaXN0SXRlbS5pc1NlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyTGlzdEl0ZW0uaXNGaWx0ZXJlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbHRlckxpc3RJdGVtLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgZmlsdGVyTGlzdEl0ZW0ubGFiZWwgPSB2YWx1ZSA/XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5yZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfZmlsdGVyX3RydWUgOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWQucmVzb3VyY2VTdHJpbmdzLmlneF9ncmlkX2ZpbHRlcl9mYWxzZTtcbiAgICAgICAgICAgICAgICBmaWx0ZXJMaXN0SXRlbS5pbmRldGVybWluYXRlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5saXN0RGF0YS5wdXNoKGZpbHRlckxpc3RJdGVtKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250YWluc051bGxPckVtcHR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRJdGVtcyhzaG91bGRVcGRhdGVTZWxlY3Rpb246IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5zZWxlY3RBbGxTZWxlY3RlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuc2VsZWN0QWxsSW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNvbnRhaW5zTnVsbE9yRW1wdHkgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5saXN0RGF0YSA9IHRoaXMuZ2VuZXJhdGVGaWx0ZXJMaXN0SXRlbXModGhpcy51bmlxdWVWYWx1ZXMsIHNob3VsZFVwZGF0ZVNlbGVjdGlvbik7XG4gICAgICAgIHRoaXMuY29udGFpbnNOdWxsT3JFbXB0eSA9IHRoaXMudW5pcXVlVmFsdWVzLmxlbmd0aCA+IHRoaXMubGlzdERhdGEubGVuZ3RoO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2VuZXJhdGVGaWx0ZXJMaXN0SXRlbXModmFsdWVzOiBJZ3hGaWx0ZXJJdGVtW10sIHNob3VsZFVwZGF0ZVNlbGVjdGlvbjogYm9vbGVhbiwgcGFyZW50PzogRmlsdGVyTGlzdEl0ZW0pIHtcbiAgICAgICAgY29uc3QgZmlsdGVyTGlzdEl0ZW1zID0gW107XG4gICAgICAgIHZhbHVlcz8uZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZWxlbWVudC52YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IGhhc1ZhbHVlID0gdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gJyc7XG5cbiAgICAgICAgICAgIGlmIChoYXNWYWx1ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlckxpc3RJdGVtID0gbmV3IEZpbHRlckxpc3RJdGVtKCk7XG4gICAgICAgICAgICAgICAgZmlsdGVyTGlzdEl0ZW0ucGFyZW50ID0gcGFyZW50O1xuICAgICAgICAgICAgICAgIGZpbHRlckxpc3RJdGVtLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgZmlsdGVyTGlzdEl0ZW0ubGFiZWwgPSBlbGVtZW50LmxhYmVsICE9PSB1bmRlZmluZWQgP1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmxhYmVsIDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRGaWx0ZXJJdGVtTGFiZWwodmFsdWUpO1xuICAgICAgICAgICAgICAgIGZpbHRlckxpc3RJdGVtLmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBmaWx0ZXJMaXN0SXRlbS5pc1NlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBmaWx0ZXJMaXN0SXRlbS5pc0ZpbHRlcmVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbHVtbi5maWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUpIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyTGlzdEl0ZW0uaXNTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJMaXN0SXRlbS5pc0ZpbHRlcmVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFVwZGF0ZVNlbGVjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhwclZhbHVlID0gdGhpcy5nZXRFeHByZXNzaW9uVmFsdWUodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZmlsdGVyVmFsdWVzLmhhcyhleHByVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyTGlzdEl0ZW0uaXNTZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyTGlzdEl0ZW0uaXNGaWx0ZXJlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdEFsbEluZGV0ZXJtaW5hdGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RBbGxTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZmlsdGVyTGlzdEl0ZW0uY2hpbGRyZW4gPSB0aGlzLmdlbmVyYXRlRmlsdGVyTGlzdEl0ZW1zKGVsZW1lbnQuY2hpbGRyZW4gPz8gZWxlbWVudC52YWx1ZT8uY2hpbGRyZW4sIHNob3VsZFVwZGF0ZVNlbGVjdGlvbiwgZmlsdGVyTGlzdEl0ZW0pO1xuICAgICAgICAgICAgICAgIGZpbHRlckxpc3RJdGVtcy5wdXNoKGZpbHRlckxpc3RJdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGZpbHRlckxpc3RJdGVtcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZFNlbGVjdEFsbEl0ZW0oKSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdEFsbCA9IG5ldyBGaWx0ZXJMaXN0SXRlbSgpO1xuICAgICAgICBzZWxlY3RBbGwuaXNTZWxlY3RlZCA9IHRoaXMuc2VsZWN0QWxsU2VsZWN0ZWQ7XG4gICAgICAgIHNlbGVjdEFsbC52YWx1ZSA9IHRoaXMuZ3JpZC5yZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfZXhjZWxfc2VsZWN0X2FsbDtcbiAgICAgICAgc2VsZWN0QWxsLmxhYmVsID0gdGhpcy5ncmlkLnJlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9leGNlbF9zZWxlY3RfYWxsO1xuICAgICAgICBzZWxlY3RBbGwuaW5kZXRlcm1pbmF0ZSA9IHRoaXMuc2VsZWN0QWxsSW5kZXRlcm1pbmF0ZTtcbiAgICAgICAgc2VsZWN0QWxsLmlzU3BlY2lhbCA9IHRydWU7XG4gICAgICAgIHNlbGVjdEFsbC5pc0ZpbHRlcmVkID0gdGhpcy5zZWxlY3RBbGxTZWxlY3RlZDtcbiAgICAgICAgdGhpcy5saXN0RGF0YS51bnNoaWZ0KHNlbGVjdEFsbCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZW5lcmF0ZUJsYW5rc0l0ZW0oc2hvdWxkVXBkYXRlU2VsZWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IGJsYW5rcyA9IG5ldyBGaWx0ZXJMaXN0SXRlbSgpO1xuICAgICAgICBpZiAodGhpcy5jb2x1bW4uZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKSB7XG4gICAgICAgICAgICBpZiAoc2hvdWxkVXBkYXRlU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZmlsdGVyVmFsdWVzLmhhcyhudWxsKSkge1xuICAgICAgICAgICAgICAgICAgICBibGFua3MuaXNTZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJsYW5rcy5pc0ZpbHRlcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBibGFua3MuaXNTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBibGFua3MuaXNGaWx0ZXJlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJsYW5rcy5pc1NlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGJsYW5rcy5pc0ZpbHRlcmVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBibGFua3MudmFsdWUgPSBudWxsO1xuICAgICAgICBibGFua3MubGFiZWwgPSB0aGlzLmdyaWQucmVzb3VyY2VTdHJpbmdzLmlneF9ncmlkX2V4Y2VsX2JsYW5rcztcbiAgICAgICAgYmxhbmtzLmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgICAgYmxhbmtzLmlzU3BlY2lhbCA9IHRydWU7XG4gICAgICAgIGJsYW5rcy5pc0JsYW5rcyA9IHRydWU7XG5cbiAgICAgICAgcmV0dXJuIGJsYW5rcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEZpbHRlckl0ZW1MYWJlbCh2YWx1ZTogYW55LCBhcHBseUZvcm1hdHRlciA9IHRydWUsIGRhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKHRoaXMuY29sdW1uLmZvcm1hdHRlcikge1xuICAgICAgICAgICAgaWYgKGFwcGx5Rm9ybWF0dGVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uLmZvcm1hdHRlcih2YWx1ZSwgZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IGRpc3BsYXksIGZvcm1hdCwgZGlnaXRzSW5mbywgY3VycmVuY3lDb2RlLCB0aW1lem9uZSB9ID0gdGhpcy5jb2x1bW4ucGlwZUFyZ3M7XG4gICAgICAgIGNvbnN0IGxvY2FsZSA9IHRoaXMuZ3JpZC5sb2NhbGU7XG5cbiAgICAgICAgc3dpdGNoICh0aGlzLmNvbHVtbi5kYXRhVHlwZSkge1xuICAgICAgICAgICAgY2FzZSBHcmlkQ29sdW1uRGF0YVR5cGUuRGF0ZTpcbiAgICAgICAgICAgIGNhc2UgR3JpZENvbHVtbkRhdGFUeXBlLkRhdGVUaW1lOlxuICAgICAgICAgICAgY2FzZSBHcmlkQ29sdW1uRGF0YVR5cGUuVGltZTpcbiAgICAgICAgICAgICAgICByZXR1cm4gZm9ybWF0RGF0ZSh2YWx1ZSwgZm9ybWF0LCBsb2NhbGUsIHRpbWV6b25lKTtcbiAgICAgICAgICAgIGNhc2UgR3JpZENvbHVtbkRhdGFUeXBlLkN1cnJlbmN5OlxuICAgICAgICAgICAgICAgIHJldHVybiBmb3JtYXRDdXJyZW5jeSh2YWx1ZSwgY3VycmVuY3lDb2RlIHx8IGdldExvY2FsZUN1cnJlbmN5Q29kZShsb2NhbGUpLCBkaXNwbGF5LCBkaWdpdHNJbmZvLCBsb2NhbGUpO1xuICAgICAgICAgICAgY2FzZSBHcmlkQ29sdW1uRGF0YVR5cGUuTnVtYmVyOlxuICAgICAgICAgICAgICAgIHJldHVybiBmb3JtYXROdW1iZXIodmFsdWUsIGxvY2FsZSwgZGlnaXRzSW5mbyk7XG4gICAgICAgICAgICBjYXNlIEdyaWRDb2x1bW5EYXRhVHlwZS5QZXJjZW50OlxuICAgICAgICAgICAgICAgIHJldHVybiBmb3JtYXRQZXJjZW50KHZhbHVlLCBsb2NhbGUsIGRpZ2l0c0luZm8pO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEV4cHJlc3Npb25WYWx1ZSh2YWx1ZTogYW55KTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuY29sdW1uLmRhdGFUeXBlID09PSBHcmlkQ29sdW1uRGF0YVR5cGUuRGF0ZSkge1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSA/IG5ldyBEYXRlKHZhbHVlKS50b0RhdGVTdHJpbmcoKSA6IHZhbHVlO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29sdW1uLmRhdGFUeXBlID09PSBHcmlkQ29sdW1uRGF0YVR5cGUuRGF0ZVRpbWUpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgPyBuZXcgRGF0ZSh2YWx1ZSkudG9JU09TdHJpbmcoKSA6IHZhbHVlO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29sdW1uLmRhdGFUeXBlID09PSBHcmlkQ29sdW1uRGF0YVR5cGUuVGltZSkge1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSA/IG5ldyBEYXRlKHZhbHVlKS50b0xvY2FsZVRpbWVTdHJpbmcoKSA6IHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSAjZGVmYXVsdEV4Y2VsQ29sdW1uT3BlcmF0aW9ucz5cbiAgICA8aWd4LWV4Y2VsLXN0eWxlLWhlYWRlclxuICAgICAgICBbc2hvd0hpZGluZ109XCJzaXplICE9PSAnMycgJiYgIWNvbHVtbj8uZGlzYWJsZUhpZGluZ1wiXG4gICAgICAgIFtzaG93UGlubmluZ109XCJzaXplICE9PSAnMycgJiYgIWNvbHVtbj8uZGlzYWJsZVBpbm5pbmdcIlxuICAgICAgICBbc2hvd1NlbGVjdGluZ109XCJzaXplICE9PSAnMycgJiYgY29sdW1uU2VsZWN0YWJsZSgpXCJcbiAgICA+XG4gICAgPC9pZ3gtZXhjZWwtc3R5bGUtaGVhZGVyPlxuXG4gICAgPGlneC1leGNlbC1zdHlsZS1zb3J0aW5nICpuZ0lmPVwiY29sdW1uPy5zb3J0YWJsZVwiPlxuICAgIDwvaWd4LWV4Y2VsLXN0eWxlLXNvcnRpbmc+XG5cbiAgICA8aWd4LWV4Y2VsLXN0eWxlLW1vdmluZyAqbmdJZj1cImdyaWQ/Lm1vdmluZ1wiPlxuICAgIDwvaWd4LWV4Y2VsLXN0eWxlLW1vdmluZz5cblxuICAgIDxpZ3gtZXhjZWwtc3R5bGUtcGlubmluZyAqbmdJZj1cIiFjb2x1bW4/LmRpc2FibGVQaW5uaW5nICYmIHNpemUgPT09ICczJ1wiPlxuICAgIDwvaWd4LWV4Y2VsLXN0eWxlLXBpbm5pbmc+XG5cbiAgICA8aWd4LWV4Y2VsLXN0eWxlLWhpZGluZyAqbmdJZj1cIiFjb2x1bW4/LmRpc2FibGVIaWRpbmcgJiYgc2l6ZSA9PT0gJzMnXCI+XG4gICAgPC9pZ3gtZXhjZWwtc3R5bGUtaGlkaW5nPlxuXG4gICAgPGlneC1leGNlbC1zdHlsZS1zZWxlY3RpbmcgKm5nSWY9XCJjb2x1bW5TZWxlY3RhYmxlKCkgJiYgc2l6ZSA9PT0gJzMnXCI+XG4gICAgPC9pZ3gtZXhjZWwtc3R5bGUtc2VsZWN0aW5nPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkZWZhdWx0RXhjZWxGaWx0ZXJPcGVyYXRpb25zPlxuICAgIDxpZ3gtZXhjZWwtc3R5bGUtY2xlYXItZmlsdGVycz5cbiAgICA8L2lneC1leGNlbC1zdHlsZS1jbGVhci1maWx0ZXJzPlxuXG4gICAgPGlneC1leGNlbC1zdHlsZS1jb25kaXRpb25hbC1maWx0ZXI+XG4gICAgPC9pZ3gtZXhjZWwtc3R5bGUtY29uZGl0aW9uYWwtZmlsdGVyPlxuXG4gICAgPGlneC1leGNlbC1zdHlsZS1zZWFyY2g+XG4gICAgPC9pZ3gtZXhjZWwtc3R5bGUtc2VhcmNoPlxuPC9uZy10ZW1wbGF0ZT5cblxuPGFydGljbGUgI21haW5Ecm9wZG93blxuICAgIGNsYXNzPVwiaWd4LWV4Y2VsLWZpbHRlcl9fbWVudVwiXG4gICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAnaWd4LWV4Y2VsLWZpbHRlcl9fc2l6aW5nJzogc2hvdWxkQXBwbHlTaXplcyxcbiAgICAgICAgJ2lneC1leGNlbC1maWx0ZXJfX21lbnUtLWNvc3knOiBzaXplID09PSAnMicsXG4gICAgICAgICdpZ3gtZXhjZWwtZmlsdGVyX19tZW51LS1jb21wYWN0Jzogc2l6ZSA9PT0gJzEnXG4gICAgfVwiXG4gICAgW2lkXT1cIm92ZXJsYXlDb21wb25lbnRJZFwiXG4gICAgKGtleWRvd24pPVwib25LZXlEb3duKCRldmVudClcIlxuICAgIFtzdHlsZS5taW4taGVpZ2h0XT1cIm1pbkhlaWdodFwiXG4gICAgW3N0eWxlLm1heC1oZWlnaHRdPVwibWF4SGVpZ2h0XCJcbiAgICByb2xlPVwibWVudVwiPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRoaXMuZXhjZWxDb2x1bW5PcGVyYXRpb25zRGlyZWN0aXZlOyBlbHNlIGRlZmF1bHRFeGNlbENvbHVtbk9wZXJhdGlvbnNcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiaWd4LWV4Y2VsLXN0eWxlLWNvbHVtbi1vcGVyYXRpb25zLFtpZ3hFeGNlbFN0eWxlQ29sdW1uT3BlcmF0aW9uc11cIj5cbiAgICAgICAgPC9uZy1jb250ZW50PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRoaXMuZXhjZWxGaWx0ZXJPcGVyYXRpb25zRGlyZWN0aXZlOyBlbHNlIGRlZmF1bHRFeGNlbEZpbHRlck9wZXJhdGlvbnNcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiaWd4LWV4Y2VsLXN0eWxlLWZpbHRlci1vcGVyYXRpb25zLFtpZ3hFeGNlbFN0eWxlRmlsdGVyT3BlcmF0aW9uc11cIj5cbiAgICAgICAgPC9uZy1jb250ZW50PlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9hcnRpY2xlPlxuIl19