ng-configcat-publicapi-ui 4.2.0 → 4.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/esm2022/lib/_directives/input-display-normalizer.directive.mjs +4 -4
  2. package/esm2022/lib/_services/app-data-adapter.mjs +4 -4
  3. package/esm2022/lib/_services/comparison-value-list-helper.mjs +4 -4
  4. package/esm2022/lib/_services/form-generator.mjs +4 -4
  5. package/esm2022/lib/_services/messaging.service.mjs +4 -4
  6. package/esm2022/lib/_services/public-api.service.mjs +4 -4
  7. package/esm2022/lib/_services/setting-list-form-helper.mjs +4 -4
  8. package/esm2022/lib/_services/tracking.directive.mjs +4 -4
  9. package/esm2022/lib/ace-editor/ace-editor.component.mjs +4 -4
  10. package/esm2022/lib/authorization/authorization.component.mjs +4 -4
  11. package/esm2022/lib/base/base-select.component.mjs +4 -4
  12. package/esm2022/lib/base/base.component.mjs +4 -4
  13. package/esm2022/lib/configuration.mjs +4 -4
  14. package/esm2022/lib/dialogs/confirmation-dialog/confirmation-dialog.mjs +4 -4
  15. package/esm2022/lib/dialogs/delete-setting-dialog/delete-setting-dialog.component.mjs +4 -4
  16. package/esm2022/lib/dialogs/expand-dialog/expand-dialog.component.mjs +4 -4
  17. package/esm2022/lib/dialogs/info-dialog/info-dialog.mjs +4 -4
  18. package/esm2022/lib/dialogs/reason-dialog/reason-dialog.component.mjs +4 -4
  19. package/esm2022/lib/dialogs/reroute-dialog/reroute-dialog.mjs +4 -4
  20. package/esm2022/lib/dialogs/save-snackbar/save-snackbar.component.mjs +4 -4
  21. package/esm2022/lib/ng-configcat-publicapi-ui.module.mjs +5 -5
  22. package/esm2022/lib/selects/config-select/config-select.component.mjs +4 -4
  23. package/esm2022/lib/selects/environment-select/environment-select.component.mjs +4 -4
  24. package/esm2022/lib/selects/product-select/product-select.component.mjs +4 -4
  25. package/esm2022/lib/selects/setting-select/setting-select.component.mjs +4 -4
  26. package/esm2022/lib/setting-item/setting-item.component.mjs +4 -4
  27. package/esm2022/lib/setting-list/setting/rollout-percentage-items/rollout-percentage-items.component.mjs +4 -4
  28. package/esm2022/lib/setting-list/setting/rollout-rules/rollout-rules.component.mjs +4 -4
  29. package/esm2022/lib/setting-list/setting/setting.component.mjs +4 -4
  30. package/esm2022/lib/setting-list/setting/value/value.component.mjs +4 -4
  31. package/esm2022/lib/setting-list/setting-list.component.mjs +4 -4
  32. package/esm2022/lib/v2/feature-flag/date-time-picker/date-time-picker.component.mjs +4 -4
  33. package/esm2022/lib/v2/feature-flag/dependees-dialog/dependees-dialog.component.mjs +4 -4
  34. package/esm2022/lib/v2/feature-flag/evaluation-formula/evaluation-formula.component.mjs +4 -4
  35. package/esm2022/lib/v2/feature-flag/evaluation-formula/feature-flag-value/feature-flag-value.component.mjs +4 -4
  36. package/esm2022/lib/v2/feature-flag/evaluation-formula/popout-text-editor-dialog/popout-text-editor-dialog.component.mjs +4 -4
  37. package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/condition-chip/condition-chip.component.mjs +4 -4
  38. package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/conditions.component.mjs +4 -4
  39. package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/prerequisite-flag-condition/prerequisite-flag-condition.component.mjs +4 -4
  40. package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/segment-condition/segment-condition.component.mjs +4 -4
  41. package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/comparator-dialog/comparator-dialog.component.mjs +4 -4
  42. package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/popout-list-editor-dialog/popout-list-editor-dialog.component.mjs +4 -4
  43. package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/user-condition.component.mjs +4 -4
  44. package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/percentage-options/percentage-options.component.mjs +4 -4
  45. package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/targeting-rule.component.mjs +4 -4
  46. package/esm2022/lib/v2/feature-flag/feature-flag.component.mjs +4 -4
  47. package/esm2022/lib/v2/feature-flag/percentage-evaluation-attribute-dialog/percentage-evaluation-attribute-dialog.component.mjs +4 -4
  48. package/esm2022/lib/v2/feature-flag-item.component.mjs +4 -4
  49. package/fesm2022/ng-configcat-publicapi-ui.mjs +145 -145
  50. package/fesm2022/ng-configcat-publicapi-ui.mjs.map +1 -1
  51. package/package.json +4 -4
@@ -417,12 +417,12 @@ export class UserConditionComponent {
417
417
  }
418
418
  });
419
419
  }
420
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: UserConditionComponent, deps: [{ token: i1.FormGenerator }, { token: i2.MatDialog }, { token: i1.ComparisonValueListHelper }, { token: i3.Clipboard }, { token: i1.MessagingService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
421
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: UserConditionComponent, selector: "app-user-condition", inputs: { targetingRuleIndex: "targetingRuleIndex", conditionIndex: "conditionIndex", readOnly: "readOnly", featureFlagLimitations: "featureFlagLimitations", formGroup: "formGroup" }, providers: [
420
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserConditionComponent, deps: [{ token: i1.FormGenerator }, { token: i2.MatDialog }, { token: i1.ComparisonValueListHelper }, { token: i3.Clipboard }, { token: i1.MessagingService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
421
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: UserConditionComponent, selector: "app-user-condition", inputs: { targetingRuleIndex: "targetingRuleIndex", conditionIndex: "conditionIndex", readOnly: "readOnly", featureFlagLimitations: "featureFlagLimitations", formGroup: "formGroup" }, providers: [
422
422
  { provide: DateAdapter, useClass: AppDateAdapter }
423
423
  ], viewQueries: [{ propertyName: "setMatChipGrid", first: true, predicate: ["chipGrid"], descendants: true }], ngImport: i0, template: "<div class=\"targeting-rule-line smallest-form-field\">\n <div class=\"explanation-wrapper\">\n <app-condition-chip [targetingRuleIndex]=\"targetingRuleIndex\"\n [conditionIndex]=\"conditionIndex\"></app-condition-chip>\n\n <div class=\"explanation\"><a href=\"https://configcat.com/docs/targeting/targeting-rule/user-condition/\"\n target=\"_blank\" rel=\"noopener noreferrer\" class=\"user-link\">user's</a></div>\n </div>\n\n <div class=\"wrapper-group\">\n <div class=\"wrapper-group\">\n <div class=\"targeting-rule-component pad-right\"\n [ngClass]=\"{'small': defaultComparisonAttributes.indexOf(formGroup.controls.comparisonAttribute.value) === -1}\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <select matNativeControl (change)=\"attributeChanged($event)\"\n [disabled]=\"formGroup.controls.comparisonAttribute.disabled\" matTooltip=\"Comparison attribute\">\n <option *ngFor=\"let comparisonAttribute of defaultComparisonAttributes\"\n [selected]=\"comparisonAttribute === formGroup.controls.comparisonAttribute.value\">\n {{comparisonAttribute}}</option>\n <option\n [selected]=\"defaultComparisonAttributes.indexOf(formGroup.controls.comparisonAttribute.value) === -1\">\n Custom\n </option>\n </select>\n </mat-form-field>\n </div>\n <div class=\"targeting-rule-component pad-right small\"\n [hidden]=\"defaultComparisonAttributes.indexOf(formGroup.controls.comparisonAttribute.value) !== -1\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <input matInput type=\"text\" (blur)=\"calcComparators(true)\"\n [formControl]=\"formGroup.controls.comparisonAttribute\" matTooltip=\"Custom comparison attribute\">\n <mat-error *ngIf=\"formGroup.controls.comparisonAttribute.invalid\">\n {{FormHelper.getErrorMessage(formGroup.controls.comparisonAttribute)}}\n </mat-error>\n </mat-form-field>\n </div>\n </div>\n\n <div class=\"targeting-rule-component pad-right comparator\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <select matNativeControl (change)=\"comparatorChanged(selectedComparator)\"\n [(ngModel)]=\"selectedComparator\" [disabled]=\"readOnly\" matTooltip=\"Comparator\">\n <optgroup *ngFor=\"let group of comparatorSuggestions | keyvalue: keepOrder\"\n [label]=\"'&nbsp;' + group.key\">\n <option *ngFor=\"let comparator of group.value\" [ngValue]=\"comparator.value\">\n {{comparator.label}}\n </option>\n </optgroup>\n <optgroup [label]=\"comparatorSeparator\"></optgroup>\n <option value=\"showall\">&nbsp;&nbsp;SHOW ALL COMPARATORS&nbsp;&nbsp;</option>\n </select>\n <button matSuffix class=\"input-button\" type=\"button\" mat-icon-button matTooltip=\"All comparators\"\n (click)=\"compDialog()\"><mat-icon>list_alt</mat-icon></button>\n <mat-error *ngIf=\"formGroup.controls.comparator.invalid\">\n {{FormHelper.getErrorMessage(formGroup.controls.comparator)}}\n </mat-error>\n </mat-form-field>\n </div>\n </div>\n <ng-container [ngSwitch]=\"rolloutRuleComparatorType\">\n <ng-container *ngSwitchCase=\"RolloutRuleComparatorV2Type.String\"\n [ngTemplateOutlet]=\"textTemplate\"></ng-container>\n <ng-container *ngSwitchCase=\"RolloutRuleComparatorV2Type.Semver\"\n [ngTemplateOutlet]=\"semverTemplate\"></ng-container>\n <ng-container *ngSwitchCase=\"RolloutRuleComparatorV2Type.StringList\"\n [ngTemplateOutlet]=\"listTemplate\"></ng-container>\n <ng-container *ngSwitchCase=\"RolloutRuleComparatorV2Type.SemverList\"\n [ngTemplateOutlet]=\"listTemplate\"></ng-container>\n <ng-container *ngSwitchCase=\"RolloutRuleComparatorV2Type.Number\"\n [ngTemplateOutlet]=\"numberTemplate\"></ng-container>\n <ng-container *ngSwitchCase=\"RolloutRuleComparatorV2Type.DateTime\"\n [ngTemplateOutlet]=\"dateTimeTemplate\"></ng-container>\n </ng-container>\n\n</div>\n\n<ng-template #textTemplate>\n <div *ngIf=\"formGroup.controls.comparisonValue.controls.stringValue\" class=\"targeting-rule-component grow\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <input matInput type=\"text\" [formControl]=\"formGroup.controls.comparisonValue.controls.stringValue\"\n matTooltip=\"Comparison value (text)\" placeholder=\"Add text ...\" />\n <button matPrefix class=\"prefix-button\" type=\"button\" mat-icon-button *ngIf=\"isClearTextComparatorSelected\"\n (click)=\"openCleartextInfoDialog()\"\n matTooltip=\"This comparison value won't be hashed. Click for more info.\"><mat-icon>lock_open_right</mat-icon></button>\n <button matSuffix class=\"input-button\" type=\"button\" mat-icon-button matTooltip=\"Advanced editor\"\n (click)=\"expandText()\"><mat-icon>edit_note</mat-icon></button>\n <mat-error *ngIf=\"formGroup.controls.comparisonValue.controls.stringValue.invalid\">\n {{FormHelper.getErrorMessage(formGroup.controls.comparisonValue.controls.stringValue)}}\n </mat-error>\n </mat-form-field>\n </div>\n</ng-template>\n\n\n<ng-template #semverTemplate>\n <div *ngIf=\"formGroup.controls.comparisonValue.controls.stringValue\" class=\"targeting-rule-component grow\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <input matInput type=\"text\" [formControl]=\"formGroup.controls.comparisonValue.controls.stringValue\"\n matTooltip=\"Comparison value (semantic version)\" placeholder=\"Add semantic version ... (1.2.3)\" />\n <mat-error *ngIf=\"formGroup.controls.comparisonValue.controls.stringValue.invalid\">\n {{FormHelper.getErrorMessage(formGroup.controls.comparisonValue.controls.stringValue)}}\n </mat-error>\n </mat-form-field>\n </div>\n</ng-template>\n\n<ng-template #listTemplate>\n <div *ngIf=\"formGroup.controls.comparisonValue.controls.listValue\"\n class=\"targeting-rule-component grow small-chip-input top-icon-suffix\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <mat-chip-grid #chipGrid [formControl]=\"fakeFormControl\" [errorStateMatcher]=\"errorStateMatcher\">\n <span class=\"chip-container\"\n *ngFor=\"let listValueItem of formGroup.controls.comparisonValue.controls.listValue.controls | slice:0:20; let i = index\"\n [matTooltip]=\"getListValueItemTooltipMessage(listValueItem)\">\n <mat-chip-row (removed)=\"remove(i)\" [disabled]=\"readOnly\" [removable]=\"!readOnly\" class=\"chip\"\n [editable]=\"!readOnly\" (edited)=\"edit(i, $event)\"\n [ngClass]=\"{'invalid': isListValueItemInvalid(listValueItem)}\">\n\n {{listValueItem.controls.value.value}}\n\n <button type=\"button\" matChipRemove *ngIf=\"!readOnly\">\n <mat-icon>cancel</mat-icon>\n </button>\n </mat-chip-row>\n </span>\n <button mat-stroked-button class=\"show-all\" type=\"button\"\n *ngIf=\"formGroup.controls.comparisonValue.controls.listValue.controls.length > 20\"\n (click)=\"expandList()\">\n show all {{formGroup.controls.comparisonValue.controls.listValue.controls.length}}\n items</button>\n <input [disabled]=\"readOnly\" [placeholder]=\"!readOnly ? 'Add item to list ...' : ''\"\n [matChipInputFor]=\"chipGrid\" [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n matChipInputAddOnBlur (matChipInputTokenEnd)=\"add($event)\" matTooltip=\"Comparison values (list)\" />\n </mat-chip-grid>\n <button matIconPrefix class=\"prefix-button\" type=\"button\" mat-icon-button *ngIf=\"isClearTextComparatorSelected\"\n (click)=\"openCleartextInfoDialog()\"\n matTooltip=\"This comparison value won't be hashed. Click for more info.\"><mat-icon>lock_open_right</mat-icon></button>\n <button matIconSuffix class=\"input-button\" type=\"button\" mat-icon-button matTooltip=\"More...\"\n [matMenuTriggerFor]=\"moreMenu\"><mat-icon>more_vert</mat-icon></button>\n <button matIconSuffix class=\"input-button\" type=\"button\" mat-icon-button matTooltip=\"Advanced editor\"\n (click)=\"expandList()\"><mat-icon>edit_note</mat-icon></button>\n <mat-error\n *ngIf=\"formGroup.controls.comparisonValue.controls.listValue.invalid && formGroup.controls.comparisonValue.controls.listValue.errors\">\n {{FormHelper.getErrorMessage(formGroup.controls.comparisonValue.controls.listValue)}}\n </mat-error>\n <mat-error\n *ngIf=\"formGroup.controls.comparisonValue.controls.listValue.invalid && !formGroup.controls.comparisonValue.controls.listValue.errors\">\n Invalid items\n </mat-error>\n </mat-form-field>\n </div>\n</ng-template>\n\n<ng-template #numberTemplate>\n <div *ngIf=\"formGroup.controls.comparisonValue.controls.doubleValue\" class=\"targeting-rule-component grow\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <input matInput type=\"number\" [formControl]=\"formGroup.controls.comparisonValue.controls.doubleValue\"\n matTooltip=\"Comparison value (number)\" placeholder=\"Add number ...\" inputDisplayNormalizer />\n <mat-error *ngIf=\"formGroup.controls.comparisonValue.controls.doubleValue.invalid\">\n {{FormHelper.getErrorMessage(formGroup.controls.comparisonValue.controls.doubleValue)}}\n </mat-error>\n </mat-form-field>\n </div>\n</ng-template>\n\n<ng-template #dateTimeTemplate>\n <div *ngIf=\"formGroup.controls.comparisonValue.controls.doubleValue\" class=\"targeting-rule-component datetime\">\n <app-date-time-picker [formControl]=\"formGroup.controls.comparisonValue.controls.doubleValue\"\n dateTooltip=\"Comparison value (date)\" timeTooltip=\"Comparison value (time)\" />\n </div>\n</ng-template>\n\n\n<mat-menu #moreMenu>\n <a mat-menu-item (click)=\"expandList()\"><mat-icon>edit_note</mat-icon>Advanced editor</a>\n <a mat-menu-item (click)=\"copyValuesAsCsv()\"><mat-icon>content_copy</mat-icon>Copy as CSV (values only)</a>\n <a mat-menu-item (click)=\"removeAll()\" [disabled]=\"readOnly\"><mat-icon>delete_outline</mat-icon>Remove\n all</a>\n</mat-menu>", styles: [".targeting-rule-line{display:flex;flex-wrap:wrap;margin:2px 0}.targeting-rule-line .wrapper-group{display:flex;flex-wrap:wrap}.targeting-rule-line .wrapper-group.grow{flex-grow:1}.targeting-rule-component{margin:2px 0;width:212px}.targeting-rule-component[hidden]{display:none}.targeting-rule-component.small{width:102px}.targeting-rule-component.grow{flex-grow:1}.targeting-rule-component.pad-right{margin-right:8px}.targeting-rule-component mat-form-field{width:100%;font-size:12px}.delete-button{margin-top:4px;color:#b1b1b1}.delete-button mat-icon{font-size:18px;height:18px;width:18px}.explanation-wrapper{display:flex;margin-top:2px}.explanation-wrapper .explanation{min-width:44px;margin-top:6px;margin-right:8px}@media (max-width: 500px){.targeting-rule-component{max-width:calc(100% - 4px);width:160px}.targeting-rule-component.small{width:78px}.targeting-rule-component.pad-right{margin-right:4px}}\n", ".mat-mdc-chip.mat-mdc-standard-chip{--mdc-chip-container-height: 24px}.targeting-rule-line{--mdc-text-button-container-height: 24px;--mdc-filled-button-container-height: 24px;--mdc-protected-button-container-height: 24px;--mdc-outlined-button-container-height: 24px;--mat-text-button-touch-target-display: none;--mat-filled-button-touch-target-display: none;--mat-protected-button-touch-target-display: none;--mat-outlined-button-touch-target-display: none}.targeting-rule-component.datetime{width:auto;margin:0}mat-chip-row.invalid{background-color:red}.show-all{font-size:.8em;margin-left:4px}.input-button{--mat-icon-button-touch-target-display: none;color:#00000070;margin-right:4px;padding:0;height:24px;width:24px;line-height:1;display:inline-flex;align-items:center;justify-content:center}.input-button .mat-mdc-icon-button.mat-mdc-button-base{--mdc-icon-button-state-layer-size: 28px;width:var(--mdc-icon-button-state-layer-size);height:var(--mdc-icon-button-state-layer-size);padding:2px}.input-button mat-icon{font-size:20px;height:20px;width:20px}.prefix-button{--mat-icon-button-touch-target-display: none;color:#00000070;margin-left:4px;margin-right:2px;height:20px;width:20px;padding:0;line-height:1;display:inline-flex;align-items:center;justify-content:center}.prefix-button .mat-mdc-icon-button.mat-mdc-button-base{--mdc-icon-button-state-layer-size: 28px;width:var(--mdc-icon-button-state-layer-size);height:var(--mdc-icon-button-state-layer-size);padding:2px}.prefix-button mat-icon{font-size:18px;height:18px;width:18px}.chip{background-color:#f1f1f1}.chip mat-icon{color:#8d8d8d}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i5.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i6.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i6.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i7.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i7.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i8.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i11.MatChipGrid, selector: "mat-chip-grid", inputs: ["disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i11.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i11.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i11.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["editable"], outputs: ["edited"] }, { kind: "component", type: i12.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i12.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i12.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i13.InputDisplayNormalizerDirective, selector: "input[inputDisplayNormalizer]" }, { kind: "component", type: i14.ConditionChipComponent, selector: "app-condition-chip", inputs: ["targetingRuleIndex", "conditionIndex"] }, { kind: "component", type: i15.DateTimePickerComponent, selector: "app-date-time-picker", inputs: ["dateTooltip", "timeTooltip"] }, { kind: "pipe", type: i4.SlicePipe, name: "slice" }, { kind: "pipe", type: i4.KeyValuePipe, name: "keyvalue" }] }); }
424
424
  }
425
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: UserConditionComponent, decorators: [{
425
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserConditionComponent, decorators: [{
426
426
  type: Component,
427
427
  args: [{ selector: 'app-user-condition', providers: [
428
428
  { provide: DateAdapter, useClass: AppDateAdapter }
@@ -441,4 +441,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
441
441
  type: ViewChild,
442
442
  args: ["chipGrid", { static: false }]
443
443
  }] } });
444
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1jb25kaXRpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctY29uZmlnY2F0LXB1YmxpY2FwaS11aS9zcmMvbGliL3YyL2ZlYXR1cmUtZmxhZy9ldmFsdWF0aW9uLWZvcm11bGEvdGFyZ2V0aW5nLXJ1bGUvY29uZGl0aW9ucy91c2VyLWNvbmRpdGlvbi91c2VyLWNvbmRpdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1jb25maWdjYXQtcHVibGljYXBpLXVpL3NyYy9saWIvdjIvZmVhdHVyZS1mbGFnL2V2YWx1YXRpb24tZm9ybXVsYS90YXJnZXRpbmctcnVsZS9jb25kaXRpb25zL3VzZXItY29uZGl0aW9uL3VzZXItY29uZGl0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxFQUFxQixTQUFTLEVBQUUsS0FBSyxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RixPQUFPLEVBQUUsV0FBVyxFQUFhLE1BQU0sZ0JBQWdCLENBQUM7QUFHeEQsT0FBTyxFQUFFLFdBQVcsRUFBcUIsTUFBTSx3QkFBd0IsQ0FBQztBQUV4RSxPQUFPLEVBQ0wsVUFBVSxFQUNWLGNBQWMsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFDSixjQUFjLEVBQ3ZDLDJCQUEyQixFQUErQyxtQkFBbUIsRUFDdkgsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUM1RixPQUFPLEVBQUUsK0JBQStCLEVBQThCLE1BQU0saUVBQWlFLENBQUM7QUFDOUksT0FBTyxFQUFFLCtCQUErQixFQUE4QixNQUFN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VyxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUU7U0FDbkQsc0lDM0ZILDh6V0FrTFc7OzJGRHJGRSxzQkFBc0I7a0JBWGxDLFNBQVM7K0JBQ0Usb0JBQW9CLGFBTW5CO3dCQUNULEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFO3FCQUNuRDt5T0FPUSxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUd3QyxjQUFjO3NCQUEzRCxTQUFTO3VCQUFDLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFTlRFUiwgQ09NTUEgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0Q2hpcElucHV0RXZlbnQsIE1hdENoaXBFZGl0ZWRFdmVudCwgTWF0Q2hpcEdyaWQsIE1hdENoaXBSb3cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGlwcyc7XG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgRGF0ZUFkYXB0ZXIsIEVycm9yU3RhdGVNYXRjaGVyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQgeyBDbGlwYm9hcmQgfSBmcm9tICdAYW5ndWxhci9jZGsvY2xpcGJvYXJkJztcbmltcG9ydCB7XG4gIEZvcm1IZWxwZXIsIENvbXBhcmlzb25WYWx1ZUxpc3RGb3JtLCBVc2VyQ29uZGl0aW9uRm9ybSwgRm9ybUdlbmVyYXRvcixcbiAgVXNlckNvbXBhcmF0b3IsIFVzZXJDb21wYXJhdG9yVGV4dCwgVXNlckNvbXBhcmF0b3JUeXBlLFxuICBJQ29tcGFyaXNvblZhbHVlTGlzdE1vZGVsLCBJQ29tcGFyaXNvblZhbHVlTW9kZWwsIEFwcERhdGVBZGFwdGVyLFxuICBJRmVhdHVyZUZsYWdMaW1pdGF0aW9ucywgQ29uZmlybWF0aW9uRGlhbG9nQ29tcG9uZW50LCBDb21wYXJpc29uVmFsdWVMaXN0SGVscGVyLCBNZXNzYWdpbmdTZXJ2aWNlLCBJbmZvRGlhbG9nQ29tcG9uZW50XG59IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2Jvb3RzdHJhcCc7XG5pbXBvcnQgeyBDb21wYXJhdG9yRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wYXJhdG9yLWRpYWxvZy9jb21wYXJhdG9yLWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgUG9wb3V0TGlzdEVkaXRvckRpYWxvZ0NvbXBvbmVudCwgUG9wb3V0TGlzdEVkaXRvckRpYWxvZ0RhdGEgfSBmcm9tICcuL3BvcG91dC1saXN0LWVkaXRvci1kaWFsb2cvcG9wb3V0LWxpc3QtZWRpdG9yLWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgUG9wb3V0VGV4dEVkaXRvckRpYWxvZ0NvbXBvbmVudCwgUG9wb3V0VGV4dEVkaXRvckRpYWxvZ0RhdGEgfSBmcm9tICcuLi8uLi8uLi9wb3BvdXQtdGV4dC1lZGl0b3ItZGlhbG9nL3BvcG91dC10ZXh0LWVkaXRvci1kaWFsb2cuY29tcG9uZW50JztcblxuZXhwb3J0IGNsYXNzIExpc3RWYWx1ZUVycm9yU3RhdGVNYXRjaGVyIGltcGxlbWVudHMgRXJyb3JTdGF0ZU1hdGNoZXIge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZvcm1Hcm91cDogRm9ybUdyb3VwPFVzZXJDb25kaXRpb25Gb3JtPikgeyB9XG4gIGlzRXJyb3JTdGF0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuY29tcGFyaXNvblZhbHVlLmNvbnRyb2xzLmxpc3RWYWx1ZT8udG91Y2hlZCAmJiB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5jb21wYXJpc29uVmFsdWUuY29udHJvbHMubGlzdFZhbHVlPy5pbnZhbGlkO1xuICB9XG59XG5cbmVudW0gQ29tcGFyYXRvckdyb3VwIHtcbiAgQ29uZmlkZW50aWFsVGV4dCA9ICdDT05GSURFTlRJQUwgVEVYVCcsXG4gIFRleHQgPSAnVEVYVCcsXG4gIFNlbWFudGljVmVyc2lvbiA9ICdTRU1BTlRJQyBWRVJTSU9OJyxcbiAgTnVtYmVyID0gJ05VTUJFUicsXG4gIERhdGVUaW1lID0gJ0RBVEVUSU1FJyxcbiAgQ29uZmlkZW50aWFsQXJyYXkgPSAnQ09ORklERU5USUFMIEFSUkFZJyxcbiAgQXJyYXkgPSAnQVJSQVknXG59XG5cbmludGVyZmFjZSBJQ29tcGFyYXRvclZhbHVlIHtcbiAgdmFsdWU6IFVzZXJDb21wYXJhdG9yLFxuICBsYWJlbDogVXNlckNvbXBhcmF0b3JUZXh0LFxuICBncm91cDogQ29tcGFyYXRvckdyb3VwLFxuICBpbmRleDogbnVtYmVyLFxufVxuXG5jb25zdCBhbGxDb21wYXJhdG9yczogSUNvbXBhcmF0b3JWYWx1ZVtdID0gW1xuICB7IHZhbHVlOiBVc2VyQ29tcGFyYXRvci5Jc09uZU9mLCBsYWJlbDogVXNlckNvbXBhcmF0b3JUZXh0LklzT25lT2YsIGdyb3VwOiBDb21wYXJhdG9yR3JvdXAuVGV4dCwgaW5kZXg6IDAgfSxcbiAgeyB2YWx1ZTogVXNlckNvbXBhcmF0b3IuSXNOb3RPbmVPZiwgbGFiZWw6IFVzZXJDb21wYXJhdG9yVGV4dC5Jc05vdE9uZU9mLCBncm91cDogQ29tcGFyYXRvckdyb3VwLlRleHQsIGluZGV4OiAxIH0sXG4gIHsgdmFsdWU6IFVzZXJDb21wYXJhdG9yLkNvbnRhaW5zQW55T2YsIGxhYmVsOiBVc2VyQ29tcGFyYXRvclRleHQuQ29udGFpbnNBbnlPZiwgZ3JvdXA6IENvbXBhcmF0b3JHcm91cC5UZXh0LCBpbmRleDogMiB9LFxuICB7IHZhbHVlOiBVc2VyQ29tcGFyYXRvci5Eb2VzTm90Q29udGFpbkFueU9mLCBsYWJlbDogVXNlckNvbXBhcmF0b3JUZXh0LkRvZXNOb3RDb250YWluQW55T2YsIGdyb3VwOiBDb21wYXJhdG9yR3JvdXAuVGV4dCwgaW5kZXg6IDMgfSxcbiAgeyB2YWx1ZTogVXNlckNvbXBhcmF0b3IuU2VtVmVySXNPbmVPZiwgbGFiZWw6IFVzZXJDb21wYXJhdG9yVGV4dC5TZW1WZXJJc09uZU9mLCBncm91cDogQ29tcGFyYXRvckdyb3VwLlNlbWFudGljVmVyc2lvbiwgaW5kZXg6IDQgfSxcbiAgeyB2YWx1ZTogVXNlckNvbXBhcmF0b3IuU2VtVmVySXNOb3RPbmVPZiwgbGFiZWw6IFVzZXJDb21wYXJhdG9yVGV4dC5TZW1WZXJJc05vdE9uZU9mLCBncm91cDogQ29tcGFyYXRvckdyb3VwLlNlbWFudGljVmVyc2lvbiwgaW5kZXg6IDUgfSxcbiAgeyB2YWx1ZTogVXNlckNvbXBhcmF0b3IuU2VtVmVyTGVzcywgbGFiZWw6IFVzZXJDb21wYXJhdG9yVGV4dC5TZW1WZXJMZXNzLCBncm91cDogQ29tcGFyYXRvckdyb3VwLlNlbWFudGljVmVyc2lvbiwgaW5kZXg6IDYgfSxcbiAgeyB2YWx1ZTogVXNlckNvbXBhcmF0b3IuU2VtVmVyTGVzc09yRXF1YWxzLCBsYWJlbDogVXNlckNvbXBhcmF0b3JUZXh0LlNlbVZlckxlc3NPckVxdWFscywgZ3JvdXA6IENvbXBhcmF0b3JHcm91cC5TZW1hbnRpY1ZlcnNpb24sIGluZGV4OiA3IH0sXG4gIHsgdmFsdWU6IFVzZXJDb21wYXJhdG9yLlNlbVZlckdyZWF0ZXIsIGxhYmVsOiBVc2VyQ29tcGFyYXRvclRleHQuU2VtVmVyR3JlYXRlciwgZ3JvdXA6IENvbXBhcmF0b3JHcm91cC5TZW1hbnRpY1ZlcnNpb24sIGluZGV4OiA4IH0sXG4gIHsgdmFsdWU6IFVzZXJDb21wYXJhdG9yLlNlbVZlckdyZWF0ZXJPckVxdWFscywgbGFiZWw6IFVzZXJDb21wYXJhdG9yVGV4dC5TZW1WZXJHcmVhdGVyT3JFcXVhbHMsIGdyb3VwOiBDb21wYXJhdG9yR3JvdXAuU2VtYW50aWNWZXJzaW9uLCBpbmRleDogOSB9LFxuICB7IHZhbHVlOiBVc2VyQ29tcGFyYXRvci5OdW1iZXJFcXVhbHMsIGxhYmVsOiBVc2VyQ29tcGFyYXRvclRleHQuTnVtYmVyRXF1YWxzLCBncm91cDogQ29tcGFyYXRvckdyb3VwLk51bWJlciwgaW5kZXg6IDEwIH0sXG4gIHsgdmFsdWU6IFVzZXJDb21wYXJhdG9yLk51bWJlckRvZXNOb3RFcXVhbCwgbGFiZWw6IFVzZXJDb21wYXJhdG9yVGV4dC5OdW1iZXJEb2VzTm90RXF1YWwsIGdyb3VwOiBDb21wYXJhdG9yR3JvdXAuTnVtYmVyLCBpbmRleDogMTEgfSxcbiAgeyB2YWx1ZTogVXNlckNvbXBhcmF0b3IuTnVtYmVyTGVzcywgbGFiZWw6IFVzZXJDb21wYXJhdG9yVGV4dC5OdW1iZXJMZXNzLCBncm91cDogQ29tcGFyYXRvckdyb3VwLk51bWJlciwgaW5kZXg6IDEyIH0sXG4gIHsgdmFsdWU6IFVzZXJDb21wYXJhdG9yLk51bWJlckxlc3NPckVxdWFscywgbGFiZWw6IFVzZXJDb21wYXJhdG9yVGV4dC5OdW1iZXJMZXNzT3JFcXVhbHMsIGdyb3VwOiBDb21wYXJhdG9yR3JvdXAuTnVtYmVyLCBpbmRleDogMTMgfSxcbiAgeyB2YWx1ZTogVXNlckNvbXBhcmF0b3IuTnVtYmVyR3JlYXRlciwgbGFiZWw6IFVzZXJDb21wYXJhdG9yVGV4dC5OdW1iZXJHcmVhdGVyLCBncm91cDogQ29tcGFyYXRvckdyb3VwLk51bWJlciwgaW5kZXg6IDE0IH0sXG4gIHsgdmFsdWU6IFVzZXJDb21wYXJhdG9yLk51bWJlckdyZWF0ZXJPckVxdWFscywgbGFiZWw6IFVzZXJDb21wYXJhdG9yVGV4dC5OdW1iZXJHcmVhdGVyT3JFcXVhbHMsIGdyb3VwOiBDb21wYXJhdG9yR3JvdXAuTnVtYmVyLCBpbmRleDogMTUgfSxcbiAgeyB2YWx1ZTogVXNlckNvbXBhcmF0b3IuU2Vuc2l0aXZlSXNPbmVPZiwgbGFiZWw6IFVzZXJDb21wYXJhdG9yVGV4dC5TZW5zaXRpdmVJc09uZU9mLCBncm91cDogQ29tcGFyYXRvckdyb3VwLkNvbmZpZGVudGlhbFRleHQsIGluZGV4OiAxNiB9LFxuICB7IHZhbHVlOiBVc2VyQ29tcGFyYXRvci5TZW5zaXRpdmVJc05vdE9uZU9mLCBsYWJlbDogVXNlckNvbXBhcmF0b3JUZXh0LlNlbnNpdGl2ZUlzTm90T25lT2YsIGdyb3VwOiBDb21wYXJhdG9yR3JvdXAuQ29uZmlkZW50aWFsVGV4dCwgaW5kZXg6IDE3IH0sXG4gIHsgdmFsdWU6IFVzZXJDb21wYXJhdG9yLkRhdGVUaW1lQmVmb3JlLCBsYWJlbDogVXNlckNvbXBhcmF0b3JUZXh0LkRhdGVUaW1lQmVmb3JlLCBncm91cDogQ29tcGFyYXRvckdyb3VwLkRhdGVUaW1lLCBpbmRleDogMTggfSxcbiAgeyB2YWx1ZTogVXNlckNvbXBhcmF0b3IuRGF0ZVRpbWVBZnRlciwgbGFiZWw6IFVzZXJDb21wYXJhdG9yVGV4dC5EYXRlVGltZUFmdGVyLCBncm91cDogQ29tcGFyYXRvckdyb3VwLkRhdGVUaW1lLCBpbmRleDogMTkgfSxcbiAgeyB2YWx1ZTogVXNlckNvbXBhcmF0b3IuU2Vuc2l0aXZlVGV4dEVxdWFscywgbGFiZWw6IFVzZXJDb21wYXJhdG9yVGV4dC5TZW5zaXRpdmVUZXh0RXF1YWxzLCBncm91cDogQ29tcGFyYXRvckdyb3VwLkNvbmZpZGVudGlhbFRleHQsIGluZGV4OiAyMCB9LFxuICB7IHZhbHVlOiBVc2VyQ29tcGFyYXRvci5TZW5zaXRpdmVUZXh0RG9lc05vdEVxdWFsLCBsYWJlbDogVXNlckNvbXBhcmF0b3JUZXh0LlNlbnNpdGl2ZVRleHREb2VzTm90RXF1YWwsIGdyb3VwOiBDb21wYXJhdG9yR3JvdXAuQ29uZmlkZW50aWFsVGV4dCwgaW5kZXg6IDIxIH0sXG4gIHsgdmFsdWU6IFVzZXJDb21wYXJhdG9yLlNlbnNpdGl2ZVRleHRTdGFydHNXaXRoQW55T2YsIGxhYmVsOiBVc2VyQ29tcGFyYXRvclRleHQuU2Vuc2l0aXZlVGV4dFN0YXJ0c1dpdGhBbnlPZiwgZ3JvdXA6IENvbXBhcmF0b3JHcm91cC5Db25maWRlbnRpYWxUZXh0LCBpbmRleDogMjIgfSxcbiAgeyB2YWx1ZTogVXNlckNvbXBhcmF0b3IuU2Vuc2l0aXZlVGV4dE5vdFN0YXJ0c1dpdGhBbnlPZiwgbGFiZWw6IFVzZXJDb21wYXJhdG9yVGV4dC5TZW5zaXRpdmVUZXh0Tm90U3RhcnRzV2l0aEFueU9mLCBncm91cDogQ29tcGFyYXRvckdyb3VwLkNvbmZpZGVudGlhbFRleHQsIGluZGV4OiAyMyB9LFxuICB7IHZhbHVlOiBVc2VyQ29tcGFyYXRvci5TZW5zaXRpdmVUZXh0RW5kc1dpdGhBbnlPZiwgbGFiZWw6IFVzZXJDb21wYXJhdG9yVGV4dC5TZW5zaXRpdmVUZXh0RW5kc1dpdGhBbnlPZiwgZ3JvdXA6IENvbXBhcmF0b3JHcm91cC5Db25maWRlbnRpYWxUZXh0LCBpbmRleDogMjQgfSxcbiAgeyB2YWx1ZTogVXNlckNvbXBhcmF0b3IuU2Vuc2l0aXZlVGV4dE5vdEVuZHNXaXRoQW55T2YsIGxhYmVsOiBVc2VyQ29tcGFyYXRvclRleHQuU2Vuc2l0aXZlVGV4dE5vdEVuZHNXaXRoQW55T2YsIGdyb3VwOiBDb21wYXJhdG9yR3JvdXAuQ29uZmlkZW50aWFsVGV4dCwgaW5kZXg6IDI1IH0sXG4gIHsgdmFsdWU6IFVzZXJDb21wYXJhdG9yLlNlbnNpdGl2ZUFycmF5Q29udGFpbnNBbnlPZiwgbGFiZWw6IFVzZXJDb21wYXJhdG9yVGV4dC5TZW5zaXRpdmVBcnJheUNvbnRhaW5zQW55T2YsIGdyb3VwOiBDb21wYXJhdG9yR3JvdXAuQ29uZmlkZW50aWFsQXJyYXksIGluZGV4OiAyNiB9LFxuICB7IHZhbHVlOiBVc2VyQ29tcGFyYXRvci5TZW5zaXRpdmVBcnJheURvZXNOb3RDb250YWluQW55T2YsIGxhYmVsOiBVc2VyQ29tcGFyYXRvclRleHQuU2Vuc2l0aXZlQXJyYXlEb2VzTm90Q29udGFpbkFueU9mLCBncm91cDogQ29tcGFyYXRvckdyb3VwLkNvbmZpZGVudGlhbEFycmF5LCBpbmRleDogMjcgfSxcbiAgeyB2YWx1ZTogVXNlckNvbXBhcmF0b3IuVGV4dEVxdWFscywgbGFiZWw6IFVzZXJDb21wYXJhdG9yVGV4dC5UZXh0RXF1YWxzLCBncm91cDogQ29tcGFyYXRvckdyb3VwLlRleHQsIGluZGV4OiAyOCB9LFxuICB7IHZhbHVlOiBVc2VyQ29tcGFyYXRvci5UZXh0RG9lc05vdEVxdWFsLCBsYWJlbDogVXNlckNvbXBhcmF0b3JUZXh0LlRleHREb2VzTm90RXF1YWwsIGdyb3VwOiBDb21wYXJhdG9yR3JvdXAuVGV4dCwgaW5kZXg6IDI5IH0sXG4gIHsgdmFsdWU6IFVzZXJDb21wYXJhdG9yLlRleHRTdGFydHNXaXRoQW55T2YsIGxhYmVsOiBVc2VyQ29tcGFyYXRvclRleHQuVGV4dFN0YXJ0c1dpdGhBbnlPZiwgZ3JvdXA6IENvbXBhcmF0b3JHcm91cC5UZXh0LCBpbmRleDogMzAgfSxcbiAgeyB2YWx1ZTogVXNlckNvbXBhcmF0b3IuVGV4dE5vdFN0YXJ0c1dpdGhBbnlPZiwgbGFiZWw6IFVzZXJDb21wYXJhdG9yVGV4dC5UZXh0Tm90U3RhcnRzV2l0aEFueU9mLCBncm91cDogQ29tcGFyYXRvckdyb3VwLlRleHQsIGluZGV4OiAzMSB9LFxuICB7IHZhbHVlOiBVc2VyQ29tcGFyYXRvci5UZXh0RW5kc1dpdGhBbnlPZiwgbGFiZWw6IFVzZXJDb21wYXJhdG9yVGV4dC5UZXh0RW5kc1dpdGhBbnlPZiwgZ3JvdXA6IENvbXBhcmF0b3JHcm91cC5UZXh0LCBpbmRleDogMzIgfSxcbiAgeyB2YWx1ZTogVXNlckNvbXBhcmF0b3IuVGV4dE5vdEVuZHNXaXRoQW55T2YsIGxhYmVsOiBVc2VyQ29tcGFyYXRvclRleHQuVGV4dE5vdEVuZHNXaXRoQW55T2YsIGdyb3VwOiBDb21wYXJhdG9yR3JvdXAuVGV4dCwgaW5kZXg6IDMzIH0sXG4gIHsgdmFsdWU6IFVzZXJDb21wYXJhdG9yLkFycmF5Q29udGFpbnNBbnlPZiwgbGFiZWw6IFVzZXJDb21wYXJhdG9yVGV4dC5BcnJheUNvbnRhaW5zQW55T2YsIGdyb3VwOiBDb21wYXJhdG9yR3JvdXAuQXJyYXksIGluZGV4OiAzNCB9LFxuICB7IHZhbHVlOiBVc2VyQ29tcGFyYXRvci5BcnJheURvZXNOb3RDb250YWluQW55T2YsIGxhYmVsOiBVc2VyQ29tcGFyYXRvclRleHQuQXJyYXlEb2VzTm90Q29udGFpbkFueU9mLCBncm91cDogQ29tcGFyYXRvckdyb3VwLkFycmF5LCBpbmRleDogMzUgfSxcbl1cblxuY29uc3QgZGVmYXVsdENvbXBhcmF0b3JJZHMgPSBbMTYsIDE3LCAyMCwgMjEsIDIyLCAyMywgMjQsIDI1LCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxOCwgMTldO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtdXNlci1jb25kaXRpb24nLFxuICB0ZW1wbGF0ZVVybDogJy4vdXNlci1jb25kaXRpb24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtcbiAgICAnLi4vLi4vLi4vY29tcG9uZW50cy5zY3NzJyxcbiAgICAnLi91c2VyLWNvbmRpdGlvbi5jb21wb25lbnQuc2NzcydcbiAgXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgeyBwcm92aWRlOiBEYXRlQWRhcHRlciwgdXNlQ2xhc3M6IEFwcERhdGVBZGFwdGVyIH1cbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgVXNlckNvbmRpdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHJlYWRvbmx5IHNlcGFyYXRvcktleXNDb2RlcyA9IFtFTlRFUiwgQ09NTUFdIGFzIGNvbnN0O1xuXG4gIEZvcm1IZWxwZXIgPSBGb3JtSGVscGVyO1xuXG4gIEBJbnB1dCgpIHRhcmdldGluZ1J1bGVJbmRleDogbnVtYmVyO1xuICBASW5wdXQoKSBjb25kaXRpb25JbmRleDogbnVtYmVyO1xuICBASW5wdXQoKSByZWFkT25seTogYm9vbGVhbjtcbiAgQElucHV0KCkgZmVhdHVyZUZsYWdMaW1pdGF0aW9uczogSUZlYXR1cmVGbGFnTGltaXRhdGlvbnM7XG4gIEBJbnB1dCgpIGZvcm1Hcm91cDogRm9ybUdyb3VwPFVzZXJDb25kaXRpb25Gb3JtPjtcbiAgbWF0Q2hpcEdyaWQ6IE1hdENoaXBHcmlkO1xuXG4gIEBWaWV3Q2hpbGQoXCJjaGlwR3JpZFwiLCB7IHN0YXRpYzogZmFsc2UgfSkgc2V0IHNldE1hdENoaXBHcmlkKG1hdENoaXBHcmlkOiBNYXRDaGlwR3JpZCkge1xuICAgIHRoaXMubWF0Q2hpcEdyaWQgPSBtYXRDaGlwR3JpZDtcbiAgfVxuXG4gIGRlZmF1bHRDb21wYXJpc29uQXR0cmlidXRlcyA9IFsnSWRlbnRpZmllcicsICdFbWFpbCcsICdDb3VudHJ5J107XG5cbiAgZGF0ZVZhbHVlOiBEYXRlO1xuICB0aW1lVmFsdWU6IHN0cmluZztcblxuICBjb21wYXJhdG9yU3VnZ2VzdGlvbnMgPSBuZXcgTWFwPGFueSwgYW55PigpO1xuICBzZWxlY3RlZENvbXBhcmF0b3I6IFVzZXJDb21wYXJhdG9yO1xuICBjb21wYXJhdG9yU2VwYXJhdG9yID0gXCLilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcIjtcblxuICBrZWVwT3JkZXIgPSAoYTogYW55LCBfOiBhbnkpID0+IGE7XG5cbiAgUm9sbG91dFJ1bGVDb21wYXJhdG9yVjJUeXBlID0gVXNlckNvbXBhcmF0b3JUeXBlO1xuICByb2xsb3V0UnVsZUNvbXBhcmF0b3JUeXBlOiBVc2VyQ29tcGFyYXRvclR5cGU7XG4gIGlzQ2xlYXJUZXh0Q29tcGFyYXRvclNlbGVjdGVkOiBib29sZWFuO1xuXG4gIC8vIFRoZSBjaGlwIGdyaWQncyBbZm9ybUNvbnRyb2xdIG9ubHkgYWNjZXB0cyBhIEZvcm1Db250cm9sLiBXZSBoYXZlIGEgRm9ybUFycmF5IChiZWNhdXNlIG9mIHRoZSBuYW1lK2hpbnQpLlxuICAvLyBXZSBoYXZlIHRvIGZha2UgYSBGb3JtQ29udHJvbCBhbmQgbWF0Y2ggdGhhdCBmb3JtQ29udHJvbCdzIGVycm9yc3RhdGUgd2l0aCB0aGUgb3JpZ2luYWwgY29tcG9uZW50J3MgZXJyb3JTdGF0ZS5cbiAgZmFrZUZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sPHN0cmluZz4oJycpO1xuICBlcnJvclN0YXRlTWF0Y2hlcjogTGlzdFZhbHVlRXJyb3JTdGF0ZU1hdGNoZXI7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmb3JtR2VuZXJhdG9yOiBGb3JtR2VuZXJhdG9yLFxuICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csXG4gICAgcHJpdmF0ZSBjb21wYXJpc29uVmFsdWVMaXN0SGVscGVyOiBDb21wYXJpc29uVmFsdWVMaXN0SGVscGVyLFxuICAgIHByaXZhdGUgY2xpcGJvYXJkOiBDbGlwYm9hcmQsXG4gICAgcHJpdmF0ZSBtZXNzYWdpbmdTZXJ2aWNlOiBNZXNzYWdpbmdTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKSB7IH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnJvbGxvdXRSdWxlQ29tcGFyYXRvclR5cGUgPSB0aGlzLmZvcm1HZW5lcmF0b3IuZ2V0Q29tcGFyaXNvblZhbHVlVHlwZSh0aGlzLmZvcm1Hcm91cC5jb250cm9scy5jb21wYXJhdG9yLnZhbHVlKTtcbiAgICB0aGlzLmlzQ2xlYXJUZXh0Q29tcGFyYXRvclNlbGVjdGVkID0gdGhpcy5pc0NsZWFyVGV4dENvbXBhcmF0b3IodGhpcy5mb3JtR3JvdXAuY29udHJvbHMuY29tcGFyYXRvci52YWx1ZSk7XG4gICAgdGhpcy5lcnJvclN0YXRlTWF0Y2hlciA9IG5ldyBMaXN0VmFsdWVFcnJvclN0YXRlTWF0Y2hlcih0aGlzLmZvcm1Hcm91cCk7XG4gICAgdGhpcy5zZWxlY3RlZENvbXBhcmF0b3IgPSB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5jb21wYXJhdG9yLnZhbHVlO1xuICAgIHRoaXMuY2FsY0NvbXBhcmF0b3JzKCk7XG4gIH1cblxuICBhdHRyaWJ1dGVDaGFuZ2VkKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHZhbHVlID0gKDxIVE1MU2VsZWN0RWxlbWVudD5ldmVudC50YXJnZXQpLnZhbHVlO1xuICAgIGlmICh0aGlzLmRlZmF1bHRDb21wYXJpc29uQXR0cmlidXRlcy5pbmRleE9mKHZhbHVlKSAhPT0gLTEpIHtcbiAgICAgIGlmICh0aGlzLmZvcm1Hcm91cC5jb250cm9scy5jb21wYXJpc29uQXR0cmlidXRlLnZhbHVlICE9PSB2YWx1ZSkge1xuICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5jb21wYXJpc29uQXR0cmlidXRlLnNldFZhbHVlKHZhbHVlKTtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAubWFya0FzRGlydHkoKTtcbiAgICAgICAgdGhpcy5jYWxjQ29tcGFyYXRvcnModHJ1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLmZvcm1Hcm91cC5jb250cm9scy5jb21wYXJpc29uQXR0cmlidXRlLnZhbHVlICE9PSAnJykge1xuICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuY29tcGFyaXNvbkF0dHJpYnV0ZS5zZXRWYWx1ZSgnJyk7XG4gICAgICB0aGlzLmZvcm1Hcm91cC5tYXJrQXNEaXJ0eSgpO1xuICAgICAgdGhpcy5jYWxjQ29tcGFyYXRvcnModHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgY29tcGFyYXRvckNoYW5nZWQodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIGlmICh2YWx1ZSA9PT0gXCJzaG93YWxsXCIpIHtcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgdGhpcy5zZWxlY3RlZENvbXBhcmF0b3IgPSB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5jb21wYXJhdG9yLnZhbHVlO1xuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB0aGlzLmNvbXBEaWFsb2coKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5jb21wYXJhdG9yLnNldFZhbHVlKHZhbHVlKTtcbiAgICB0aGlzLmZvcm1Hcm91cC5tYXJrQXNEaXJ0eSgpO1xuICAgIHRoaXMuc2VsZWN0ZWRDb21wYXJhdG9yID0gdmFsdWU7XG4gICAgdGhpcy5pc0NsZWFyVGV4dENvbXBhcmF0b3JTZWxlY3RlZCA9IHRoaXMuaXNDbGVhclRleHRDb21wYXJhdG9yKHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmNvbXBhcmF0b3IudmFsdWUpO1xuXG4gICAgY29uc3Qgb2xkUm9sbG91dFJ1bGVDb21wYXJhdG9yVHlwZSA9IHRoaXMucm9sbG91dFJ1bGVDb21wYXJhdG9yVHlwZTtcbiAgICB0aGlzLnJvbGxvdXRSdWxlQ29tcGFyYXRvclR5cGUgPSB0aGlzLmZvcm1HZW5lcmF0b3IuZ2V0Q29tcGFyaXNvblZhbHVlVHlwZSh0aGlzLmZvcm1Hcm91cC5jb250cm9scy5jb21wYXJhdG9yLnZhbHVlKTtcbiAgICBpZiAob2xkUm9sbG91dFJ1bGVDb21wYXJhdG9yVHlwZSAhPT0gdGhpcy5yb2xsb3V0UnVsZUNvbXBhcmF0b3JUeXBlKSB7XG4gICAgICBjb25zdCBkZWZhdWx0VmFsdWU6IElDb21wYXJpc29uVmFsdWVNb2RlbCA9IHRoaXMucm9sbG91dFJ1bGVDb21wYXJhdG9yVHlwZSA9PT0gVXNlckNvbXBhcmF0b3JUeXBlLkRhdGVUaW1lID8ge1xuICAgICAgICBkb3VibGVWYWx1ZTogbmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwLjBcbiAgICAgIH0gOiB7fTtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLnNldENvbnRyb2woJ2NvbXBhcmlzb25WYWx1ZScsIHRoaXMuZm9ybUdlbmVyYXRvci5nZW5lcmF0ZUNvbXBhcmlzb25WYWx1ZUZvcm1Hcm91cChkZWZhdWx0VmFsdWUsIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmNvbXBhcmF0b3IudmFsdWUsIGZhbHNlLCB0aGlzLmZlYXR1cmVGbGFnTGltaXRhdGlvbnMpKVxuICAgIH1cbiAgfVxuXG4gIGNvbXBEaWFsb2coKSB7XG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDb21wYXJhdG9yRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICB3aWR0aDogJzExMzBweCcsXG4gICAgICBwb3NpdGlvbjoge1xuICAgICAgICB0b3A6IHdpbmRvdy5pbm5lckhlaWdodCA8IDc1MCA/ICcwcHgnIDogd2luZG93LmlubmVySGVpZ2h0IDwgOTUwID8gJzUwcHgnIDogJzEwMHB4JyxcbiAgICAgIH0sXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHJlYWRPbmx5OiB0aGlzLnJlYWRPbmx5LFxuICAgICAgICBzZWxlY3RlZENvbXBhcmF0b3I6IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmNvbXBhcmF0b3IudmFsdWVcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQgIT09IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmNvbXBhcmF0b3IudmFsdWUpIHtcbiAgICAgICAgdGhpcy5jb21wYXJhdG9yQ2hhbmdlZChyZXN1bHQpO1xuICAgICAgICB0aGlzLmNhbGNDb21wYXJhdG9ycygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYWRkKGV2ZW50OiBNYXRDaGlwSW5wdXRFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHZhbHVlID0gKGV2ZW50LnZhbHVlIHx8ICcnKS50cmltKCk7XG5cbiAgICBldmVudC5jaGlwSW5wdXQ/LmNsZWFyKCk7XG5cbiAgICBpZiAoIXZhbHVlKSB7IHJldHVybjsgfVxuXG4gICAgaWYgKHZhbHVlLmluZGV4T2YoJywnKSA9PT0gLTEpIHtcbiAgICAgIHRoaXMuZm9ybUdlbmVyYXRvci5hZGRDb21wYXJpc29uVmFsdWVMaXN0VmFsdWVJdGVtcyhcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuY29tcGFyYXRvci52YWx1ZSxcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuY29tcGFyaXNvblZhbHVlLmNvbnRyb2xzLmxpc3RWYWx1ZSxcbiAgICAgICAgW3sgdmFsdWUgfV0sXG4gICAgICAgIHRoaXMuZmVhdHVyZUZsYWdMaW1pdGF0aW9ucyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDb25maXJtYXRpb25EaWFsb2dDb21wb25lbnQsIHtcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgdGl0bGU6ICdIb3cgd291bGQgeW91IGxpa2UgdG8gYWRkIHRoZSBpdGVtcz8nLFxuICAgICAgICBib2R5OiBgV2UndmUgbm90aWNlZCBhIGNvbW1hIGluIHRoZSB2YWx1ZSB5b3Ugd2FudCB0byBhZGQuIDxici8+IERvIHlvdSB3YW50IHRvIGFkZCBpdCBhcyBhIHNpbmdsZSBpdGVtLCBvciB3b3VsZCB5b3UgcHJlZmVyIHRvIGluc2VydCBtdWx0aXBsZSBpdGVtcyBzZXBhcmF0ZWQgYnkgY29tbWFzP2AsXG4gICAgICAgIHllc0J1dHRvbkxhYmVsOiAnQWRkIG11bHRpcGxlIGl0ZW1zJyxcbiAgICAgICAgbm9CdXR0b25MYWJlbDogJ0FkZCBhcyBhIHNpbmdsZSBpdGVtJ1xuICAgICAgfSxcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZVxuICAgIH0pO1xuXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKClcbiAgICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gJ3llcycpIHtcbiAgICAgICAgICBjb25zdCBjb21wYXJpc29uVmFsdWVMaXN0UGFyc2VSZXN1bHQgPSB0aGlzLmNvbXBhcmlzb25WYWx1ZUxpc3RIZWxwZXIucGFyc2VWYWx1ZXNGcm9tQ3N2KHZhbHVlKTtcbiAgICAgICAgICBpZiAoY29tcGFyaXNvblZhbHVlTGlzdFBhcnNlUmVzdWx0LmVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2luZ1NlcnZpY2Uuc2hvd1dhcm5pbmdTbmFjaygnUGFyc2UgZXJyb3InKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGNvbXBhcmlzb25WYWx1ZUxpc3RQYXJzZVJlc3VsdC5jb21wYXJpc29uVmFsdWVMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdlbmVyYXRvci5hZGRDb21wYXJpc29uVmFsdWVMaXN0VmFsdWVJdGVtcyhcbiAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuY29tcGFyYXRvci52YWx1ZSxcbiAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuY29tcGFyaXNvblZhbHVlLmNvbnRyb2xzLmxpc3RWYWx1ZSxcbiAgICAgICAgICAgICAgY29tcGFyaXNvblZhbHVlTGlzdFBhcnNlUmVzdWx0LmNvbXBhcmlzb25WYWx1ZUxpc3QsXG4gICAgICAgICAgICAgIHRoaXMuZmVhdHVyZUZsYWdMaW1pdGF0aW9ucyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZm9ybUdlbmVyYXRvci5hZGRDb21wYXJpc29uVmFsdWVMaXN0VmFsdWVJdGVtcyhcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmNvbXBhcmF0b3IudmFsdWUsXG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5jb21wYXJpc29uVmFsdWUuY29udHJvbHMubGlzdFZhbHVlLFxuICAgICAgICAgICAgW3sgdmFsdWUgfV0sXG4gICAgICAgICAgICB0aGlzLmZlYXR1cmVGbGFnTGltaXRhdGlvbnMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHJlbW92ZShpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmNvbXBhcmlzb25WYWx1ZS5jb250cm9scy5saXN0VmFsdWUuY29udHJvbHMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmNvbXBhcmlzb25WYWx1ZS5jb250cm9scy5saXN0VmFsdWUudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuY29tcGFyaXNvblZhbHVlLmNvbnRyb2xzLmxpc3RWYWx1ZS5tYXJrQWxsQXNUb3VjaGVkKCk7XG4gICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5jb21wYXJpc29uVmFsdWUuY29udHJvbHMubGlzdFZhbHVlLm1hcmtBc0RpcnR5KCk7XG4gICAgfVxuICB9XG5cbiAgZWRpdChpbmRleDogbnVtYmVyLCBldmVudDogTWF0Q2hpcEVkaXRlZEV2ZW50KSB7XG4gICAgY29uc3QgdmFsdWUgPSBldmVudC52YWx1ZS50cmltKCk7XG5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9jb21wb25lbnRzL2lzc3Vlcy8yNjU4NCNpc3N1ZWNvbW1lbnQtMTY5OTQ2OTYwNVxuICAgIC8vIFRoZSBtYXQgY2hpcCBjb250cm9sIGRvZXMgbm90IHdvcmsgd2VsbCB3aXRoIGxvbmcgdmFsdWVzLiBUaGUgYmFzaWMgc2V0dXAgaXMgb3ZlcmZsb3c6IHZpc2libGUuXG4gICAgLy8gVGhlIG92ZXJmbG93OmhpZGRlbiwgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXMgaXMgc29sdmVkIGluIHRoZSBzdHlsZXMuc2NzczpcbiAgICAvLy5tZGMtZXZvbHV0aW9uLWNoaXAtc2V0IC5tZGMtZXZvbHV0aW9uLWNoaXAge1xuICAgIC8vICAubWRjLWV2b2x1dGlvbi1jaGlwX19jZWxsLS1wcmltYXJ5LFxuICAgIC8vICAubWRjLWV2b2x1dGlvbi1jaGlwX19hY3Rpb24tLXByaW1hcnksXG4gICAgLy8gIC5tYXQtbWRjLWNoaXAtYWN0aW9uLWxhYmVsIHtcbiAgICAvLyAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIC8vICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgLy8gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgLy8gIH1cbiAgICAvLyB9XG4gICAgLy8gXG4gICAgLy8gVGhpcyB3b3JrcyB0b3RhbGx5IGZpbmUgdW50aWwgeW91IGVkaXQgYSBjaGlwJ3MgdmFsdWUgdGhhdCBpcyBsb25nIChkb3VibGUgY2xpY2sgb24gaXQpIFxuICAgIC8vIGFuZCBlLmcuIGluc2VydCBhIGNoYXJhY3RlciB0byB0aGUgZW5kIG9mIHRoZSB2YWx1ZS5cbiAgICAvLyBBZnRlciBmb2N1c2luZyBvdXQgZnJvbSB0aGUgaW5wdXQsIHRoZSBvcmlnaW5hbCBjaGlwJ3MgdmFsdWUgaXMgc2hpZnRlZCBvciBldmVuIG1pc3NpbmcgaWYgdGhlIHRleHQgaXMgbG9uZyBlbm91Z2guIFxuICAgIC8vIElmIHdlIHNldCB0aGUgaW5wdXQncyB2YWx1ZSB0byAnJyBoZXJlLCB0aGUgc2hpZnRpbmcgaXMgc29sdmVkIGFuZCBldmVyeXRoaW5nIHdvcmtzIGFzIGV4cGVjdGVkXG4gICAgKGV2ZW50LmNoaXAgYXMgTWF0Q2hpcFJvdykuZGVmYXVsdEVkaXRJbnB1dD8uc2V0VmFsdWUoJycpO1xuXG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgdGhpcy5yZW1vdmUoaW5kZXgpO1xuICAgIH0gZWxzZSBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuY29tcGFyaXNvblZhbHVlLmNvbnRyb2xzLmxpc3RWYWx1ZS5jb250cm9sc1tpbmRleF0ucGF0Y2hWYWx1ZSh7IHZhbHVlIH0pO1xuICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuY29tcGFyaXNvblZhbHVlLmNvbnRyb2xzLmxpc3RWYWx1ZS5jb250cm9sc1tpbmRleF0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuY29tcGFyaXNvblZhbHVlLmNvbnRyb2xzLmxpc3RWYWx1ZS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5jb21wYXJpc29uVmFsdWUuY29udHJvbHMubGlzdFZhbHVlLm1hcmtBbGxBc1RvdWNoZWQoKTtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmNvbXBhcmlzb25WYWx1ZS5jb250cm9scy5saXN0VmFsdWUubWFya0FzRGlydHkoKTtcbiAgICB9XG4gIH1cblxuICBleHBhbmRUZXh0KCkge1xuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oUG9wb3V0VGV4dEVkaXRvckRpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgd2lkdGg6ICc4MDBweCcsXG4gICAgICBkYXRhOiA8UG9wb3V0VGV4dEVkaXRvckRpYWxvZ0RhdGE+e1xuICAgICAgICB2YWx1ZTogdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuY29tcGFyaXNvblZhbHVlLmNvbnRyb2xzLnN0cmluZ1ZhbHVlLnZhbHVlLFxuICAgICAgICByZWFkT25seTogdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuY29tcGFyaXNvblZhbHVlLmNvbnRyb2xzLnN0cmluZ1ZhbHVlLmRpc2FibGVkLFxuICAgICAgICB2YWxpZGF0b3JzOiB0aGlzLnJvbGxvdXRSdWxlQ29tcGFyYXRvclR5cGUgPT09IFVzZXJDb21wYXJhdG9yVHlwZS5TZW12ZXJcbiAgICAgICAgICA/IHRoaXMuZm9ybUdlbmVyYXRvci5nZXRDb21wYXJpc29uVmFsdWVTZW12ZXJWYWxpZGF0b3JzKHRoaXMuZmVhdHVyZUZsYWdMaW1pdGF0aW9ucylcbiAgICAgICAgICA6IHRoaXMuZm9ybUdlbmVyYXRvci5nZXRDb21wYXJpc29uVmFsdWVTdHJpbmdWYWxpZGF0b3JzKHRoaXMuZmVhdHVyZUZsYWdMaW1pdGF0aW9ucyksXG4gICAgICAgIG1heFZhbHVlTGVuZ3RoOiB0aGlzLmZlYXR1cmVGbGFnTGltaXRhdGlvbnMubWF4Q29tcGFyaXNvblZhbHVlTGVuZ3RoLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ01vZGlmeSB0aGUgdGV4dCB3aXRoaW4gdGhlIGVkaXRvciB0byBjaGFuZ2UgdGhlIGNvbXBhcmlzb24gdmFsdWUuIFRoZSBlZGl0b3Igc3VwcG9ydHMgSlNPTiBzeW50YXggaGlnaGxpZ2h0aW5nLidcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgIGlmIChkYXRhICYmIGRhdGEudmFsdWUgIT09IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmNvbXBhcmlzb25WYWx1ZS5jb250cm9scy5zdHJpbmdWYWx1ZS52YWx1ZSkge1xuICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5jb21wYXJpc29uVmFsdWUuY29udHJvbHMuc3RyaW5nVmFsdWUuc2V0VmFsdWUoZGF0YS52YWx1ZSk7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmNvbXBhcmlzb25WYWx1ZS5jb250cm9scy5zdHJpbmdWYWx1ZS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmNvbXBhcmlzb25WYWx1ZS5jb250cm9scy5zdHJpbmdWYWx1ZS5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmNvbXBhcmlzb25WYWx1ZS5jb250cm9scy5zdHJpbmdWYWx1ZS5tYXJrQXNEaXJ0eSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZXhwYW5kTGlzdCgpIHtcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFBvcG91dExpc3RFZGl0b3JEaWFsb2dDb21wb25lbnQsIHtcbiAgICAgIHdpZHRoOiAnNjcwcHgnLFxuICAgICAgZGF0YTogPFBvcG91dExpc3RFZGl0b3JEaWFsb2dEYXRhPntcbiAgICAgICAgY29tcGFyaXNvblZhbHVlTGlzdDogdGhpcy5nZXRSYXdWYWx1ZSgpLFxuICAgICAgICBjb21wYXJhdG9yOiB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5jb21wYXJhdG9yLnZhbHVlLFxuICAgICAgICBmZWF0dXJlRmxhZ0xpbWl0YXRpb25zOiB0aGlzLmZlYXR1cmVGbGFnTGltaXRhdGlvbnMsXG4gICAgICAgIHJlYWRPbmx5OiB0aGlzLnJlYWRPbmx5XG4gICAgICB9XG4gICAgfSk7XG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChkYXRhOiB7IGNvbXBhcmlzb25WYWx1ZUxpc3Q6IElDb21wYXJpc29uVmFsdWVMaXN0TW9kZWxbXSB9KSA9PiB7XG4gICAgICBpZiAoZGF0YT8uY29tcGFyaXNvblZhbHVlTGlzdCkge1xuICAgICAgICBjb25zdCBvbGRWYWx1ZSA9XG4gICAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuY29tcGFyaXNvblZhbHVlLmNvbnRyb2xzLmxpc3RWYWx1ZS52YWx1ZVxuICAgICAgICAgICAgLm1hcChsID0+IHsgcmV0dXJuIHsgdmFsdWU6IGwudmFsdWUsIGhpbnQ6IGwuaGludCB9OyB9KTtcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBkYXRhLmNvbXBhcmlzb25WYWx1ZUxpc3RcbiAgICAgICAgICAubWFwKGwgPT4geyByZXR1cm4geyB2YWx1ZTogbC52YWx1ZSwgaGludDogbC5oaW50IH07IH0pO1xuICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkob2xkVmFsdWUpID09PSBKU09OLnN0cmluZ2lmeShuZXdWYWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsaWRhdG9ycyA9XG4gICAgICAgICAgdGhpcy5mb3JtR2VuZXJhdG9yLmdldENvbXBhcmlzb25WYWx1ZVR5cGUodGhpcy5mb3JtR3JvdXAuY29udHJvbHMuY29tcGFyYXRvci52YWx1ZSkgPT09IFVzZXJDb21wYXJhdG9yVHlwZS5TZW12ZXJMaXN0XG4gICAgICAgICAgICA/IHRoaXMuZm9ybUdlbmVyYXRvci5nZXRDb21wYXJpc29uVmFsdWVTZW12ZXJMaXN0SXRlbVZhbGlkYXRvcnModGhpcy5mZWF0dXJlRmxhZ0xpbWl0YXRpb25zKVxuICAgICAgICAgICAgOiB0aGlzLmZvcm1HZW5lcmF0b3IuZ2V0Q29tcGFyaXNvblZhbHVlU3RyaW5nTGlzdEl0ZW1WYWxpZGF0b3JzKHRoaXMuZmVhdHVyZUZsYWdMaW1pdGF0aW9ucyk7XG4gICAgICAgIGNvbnN0IGZvcm1BcnJheSA9IHRoaXMuZm9ybUdlbmVyYXRvci5nZW5lcmF0ZUNvbXBhcmlzb25WYWx1ZUxpc3RWYWx1ZUFycmF5KGRhdGEuY29tcGFyaXNvblZhbHVlTGlzdCwgdGhpcy5yZWFkT25seSwgdGhpcy5mZWF0dXJlRmxhZ0xpbWl0YXRpb25zLCB2YWxpZGF0b3JzKTtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuY29tcGFyaXNvblZhbHVlLnNldENvbnRyb2woJ2xpc3RWYWx1ZScsIGZvcm1BcnJheSk7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmNvbXBhcmlzb25WYWx1ZS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmNvbXBhcmlzb25WYWx1ZS5tYXJrQWxsQXNUb3VjaGVkKCk7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmNvbXBhcmlzb25WYWx1ZS5tYXJrQXNEaXJ0eSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmVtb3ZlQWxsKCkge1xuICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmNvbXBhcmlzb25WYWx1ZS5jb250cm9scy5saXN0VmFsdWUuY29udHJvbHMuc3BsaWNlKDAsIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmNvbXBhcmlzb25WYWx1ZS5jb250cm9scy5saXN0VmFsdWUuY29udHJvbHMubGVuZ3RoKTtcbiAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5jb21wYXJpc29uVmFsdWUuY29udHJvbHMubGlzdFZhbHVlLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5jb21wYXJpc29uVmFsdWUuY29udHJvbHMubGlzdFZhbHVlLm1hcmtBbGxBc1RvdWNoZWQoKTtcbiAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5jb21wYXJpc29uVmFsdWUuY29udHJvbHMubGlzdFZhbHVlLm1hcmtBc0RpcnR5KCk7XG4gIH1cblxuICBjb3B5VmFsdWVzQXNDc3YoKSB7XG4gICAgdGhpcy5jb3B5VG9DbGlwYm9hcmQodGhpcy5jb21wYXJpc29uVmFsdWVMaXN0SGVscGVyLmZvcm1hdFZhbHVlc0FzQ3N2KHRoaXMuZ2V0UmF3VmFsdWUoKSkpO1xuICB9XG5cbiAgY29weVRvQ2xpcGJvYXJkKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuY2xpcGJvYXJkLmNvcHkodmFsdWUpO1xuICAgICAgICB0aGlzLm1lc3NhZ2luZ1NlcnZpY2Uuc2hvd1N1Y2Nlc3NTbmFjayhcIkNvcGllZCB0byBjbGlwYm9hcmQuXCIpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHRoaXMubWVzc2FnaW5nU2VydmljZS5zaG93U3VjY2Vzc1NuYWNrKFwiQ2xpcGJvYXJkIHVuYXZhaWxhYmxlLlwiKTtcbiAgICAgIH1cblxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1lc3NhZ2luZ1NlcnZpY2Uuc2hvd1dhcm5pbmdTbmFjayhcIk5vdGhpbmcgdG8gYmUgY29waWVkLlwiKTtcbiAgICB9XG4gIH1cblxuICBnZXRSYXdWYWx1ZSgpOiBJQ29tcGFyaXNvblZhbHVlTGlzdE1vZGVsW10ge1xuICAgIHJldHVybiB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5jb21wYXJpc29uVmFsdWUuY29udHJvbHMubGlzdFZhbHVlLnZhbHVlLm1hcCh2ID0+IHsgcmV0dXJuIHsgdmFsdWU6IHYudmFsdWUsIGhpbnQ6IHYuaGludCB9IH0pO1xuICB9XG5cbiAgaXNWYWx1ZUludmFsaWQobGlzdFZhbHVlSXRlbUNvbnRyb2w6IEZvcm1Hcm91cDxDb21wYXJpc29uVmFsdWVMaXN0Rm9ybT4pIHtcbiAgICByZXR1cm4gbGlzdFZhbHVlSXRlbUNvbnRyb2wuY29udHJvbHMudmFsdWUudG91Y2hlZCAmJiBsaXN0VmFsdWVJdGVtQ29udHJvbC5jb250cm9scy52YWx1ZS5pbnZhbGlkO1xuICB9XG5cbiAgaXNIaW50SW52YWxpZChsaXN0VmFsdWVJdGVtQ29udHJvbDogRm9ybUdyb3VwPENvbXBhcmlzb25WYWx1ZUxpc3RGb3JtPikge1xuICAgIHJldHVybiBsaXN0VmFsdWVJdGVtQ29udHJvbC5jb250cm9scy5oaW50LnRvdWNoZWQgJiYgbGlzdFZhbHVlSXRlbUNvbnRyb2wuY29udHJvbHMuaGludC5pbnZhbGlkO1xuICB9XG5cbiAgaXNMaXN0VmFsdWVJdGVtSW52YWxpZChsaXN0VmFsdWVJdGVtQ29udHJvbDogRm9ybUdyb3VwPENvbXBhcmlzb25WYWx1ZUxpc3RGb3JtPikge1xuICAgIHJldHVybiB0aGlzLmlzVmFsdWVJbnZhbGlkKGxpc3RWYWx1ZUl0ZW1Db250cm9sKSB8fCB0aGlzLmlzSGludEludmFsaWQobGlzdFZhbHVlSXRlbUNvbnRyb2wpO1xuICB9XG5cbiAgZ2V0TGlzdFZhbHVlSXRlbVRvb2x0aXBNZXNzYWdlKGxpc3RWYWx1ZUl0ZW1Db250cm9sOiBGb3JtR3JvdXA8Q29tcGFyaXNvblZhbHVlTGlzdEZvcm0+KSB7XG4gICAgaWYgKHRoaXMuaXNWYWx1ZUludmFsaWQobGlzdFZhbHVlSXRlbUNvbnRyb2wpKSB7XG4gICAgICByZXR1cm4gRm9ybUhlbHBlci5nZXRFcnJvck1lc3NhZ2UobGlzdFZhbHVlSXRlbUNvbnRyb2wuY29udHJvbHMudmFsdWUpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc0hpbnRJbnZhbGlkKGxpc3RWYWx1ZUl0ZW1Db250cm9sKSkge1xuICAgICAgcmV0dXJuIFwiSGludDpcIiArIEZvcm1IZWxwZXIuZ2V0RXJyb3JNZXNzYWdlKGxpc3RWYWx1ZUl0ZW1Db250cm9sLmNvbnRyb2xzLmhpbnQpO1xuICAgIH1cbiAgICBpZiAobGlzdFZhbHVlSXRlbUNvbnRyb2wuY29udHJvbHMuaGludC52YWx1ZSkge1xuICAgICAgcmV0dXJuIGxpc3RWYWx1ZUl0ZW1Db250cm9sLmNvbnRyb2xzLmhpbnQudmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBcIk5vIGhpbnRcIjtcbiAgfVxuXG4gIGNhbGNDb21wYXJhdG9ycyhyZXNldFZhbCA9IGZhbHNlKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmZvcm1Hcm91cC5jb250cm9scy5jb21wYXJpc29uQXR0cmlidXRlLnZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuYnVpbGRDb21wYXJhdG9yU3VnZ2VzdGlvbnMoZGVmYXVsdENvbXBhcmF0b3JJZHMsIHJlc2V0VmFsKTtcbiAgfVxuXG4gIGJ1aWxkQ29tcGFyYXRvclN1Z2dlc3Rpb25zKGlkczogbnVtYmVyW10sIHJlc2V0VmFsOiBib29sZWFuKTogdm9pZCB7XG4gICAgbGV0IGNvbXBzID0gaWRzLm1hcChpZCA9PiBhbGxDb21wYXJhdG9yc1tpZF0pO1xuICAgIGNvbnN0IHNlbGVjdGVkID0gYWxsQ29tcGFyYXRvcnMuZmluZCh2YWwgPT4gdmFsLnZhbHVlID09PSB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5jb21wYXJhdG9yLnZhbHVlKTtcbiAgICBpZiAocmVzZXRWYWwgJiYgIWlkcy5pbmNsdWRlcyhzZWxlY3RlZC5pbmRleCkgJiYgdGhpcy5pc051bGxDb21wVmFsKHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmNvbXBhcmlzb25WYWx1ZS52YWx1ZSkpIHtcbiAgICAgIHRoaXMuY29tcGFyYXRvckNoYW5nZWQoY29tcHNbMF0udmFsdWUpO1xuICAgIH0gZWxzZSBpZiAoIWlkcy5pbmNsdWRlcyhzZWxlY3RlZC5pbmRleCkpIHtcbiAgICAgIGlmIChzZWxlY3RlZC52YWx1ZSA9PT0gVXNlckNvbXBhcmF0b3IuQ29udGFpbnNBbnlPZiB8fCBzZWxlY3RlZC52YWx1ZSA9PT0gVXNlckNvbXBhcmF0b3IuRG9lc05vdENvbnRhaW5BbnlPZikge1xuICAgICAgICBjb21wcyA9IFthbGxDb21wYXJhdG9yc1syXSwgYWxsQ29tcGFyYXRvcnNbM10sIC4uLmNvbXBzXVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRHcm91cCA9IGFsbENvbXBhcmF0b3JzLmZpbHRlcih2YWwgPT4gdmFsLmdyb3VwID09PSBzZWxlY3RlZC5ncm91cCk7XG4gICAgICAgIGNvbXBzID0gWy4uLnNlbGVjdGVkR3JvdXAsIC4uLmNvbXBzXVxuICAgICAgfVxuICAgIH1cbiAgICBjb21wcyA9IHRoaXMuZGVkdXBDb21wcyhjb21wcyk7XG4gICAgdGhpcy5jb21wYXJhdG9yU3VnZ2VzdGlvbnMgPSBjb21wcy5yZWR1Y2UoKGVudHJ5TWFwLCBlKSA9PiBlbnRyeU1hcC5zZXQoZS5ncm91cCwgWy4uLmVudHJ5TWFwLmdldChlLmdyb3VwKSB8fCBbXSwgZV0pLCBuZXcgTWFwKCkpO1xuICAgIHRoaXMuY29tcGFyYXRvclNlcGFyYXRvciA9IHRoaXMuZ2VuU2VwYXJhdG9yKGNvbXBzKTtcbiAgfVxuXG4gIGRlZHVwQ29tcHMoY29tcHM6IElDb21wYXJhdG9yVmFsdWVbXSk6IElDb21wYXJhdG9yVmFsdWVbXSB7XG4gICAgY29uc3QgcmVzdWx0OiBJQ29tcGFyYXRvclZhbHVlW10gPSBbXTtcbiAgICBjb21wcy5mb3JFYWNoKHZhbCA9PiB7XG4gICAgICBpZiAoIXJlc3VsdC5maW5kKGUgPT4gZS5pbmRleCA9PT0gdmFsLmluZGV4KSkge1xuICAgICAgICByZXN1bHQucHVzaCh2YWwpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBnZW5TZXBhcmF0b3IoY29tcHM6IElDb21wYXJhdG9yVmFsdWVbXSk6IHN0cmluZyB7XG4gICAgbGV0IG1heCA9IDA7XG4gICAgY29tcHMuZm9yRWFjaCh2YWwgPT4ge1xuICAgICAgaWYgKHZhbC5sYWJlbC5sZW5ndGggPiBtYXgpIHtcbiAgICAgICAgbWF4ID0gdmFsLmxhYmVsLmxlbmd0aDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gQXJyYXkobWF4KS5qb2luKFwi4pSAXCIpO1xuICB9XG5cbiAgaXNOdW1iZXJBcnIodmFsOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB2YWwubGVuZ3RoID4gMCAmJiB2YWwuZXZlcnkoaXRlbSA9PiB0eXBlb2YgaXRlbSA9PT0gJ251bWJlcicpO1xuICB9XG5cbiAgaXNOdWxsQ29tcFZhbChjb21wVmFsOiBQYXJ0aWFsPHsgc3RyaW5nVmFsdWU/OiBzdHJpbmc7IGRvdWJsZVZhbHVlPzogbnVtYmVyOyBsaXN0VmFsdWU/OiBQYXJ0aWFsPHsgdmFsdWU6IHN0cmluZzsgaGludD86IHN0cmluZzsgaW5kZXg6IG51bWJlcjsgfT5bXTsgfT4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gIWNvbXBWYWwuZG91YmxlVmFsdWUgJiYgIWNvbXBWYWwubGlzdFZhbHVlICYmICFjb21wVmFsLnN0cmluZ1ZhbHVlO1xuICB9XG5cblxuICBpc0NsZWFyVGV4dENvbXBhcmF0b3IoY29tcGFyYXRvcjogVXNlckNvbXBhcmF0b3IpOiBib29sZWFuIHtcbiAgICBzd2l0Y2ggKGNvbXBhcmF0b3IpIHtcbiAgICAgIGNhc2UgVXNlckNvbXBhcmF0b3IuSXNPbmVPZjpcbiAgICAgIGNhc2UgVXNlckNvbXBhcmF0b3IuSXNOb3RPbmVPZjpcbiAgICAgIGNhc2UgVXNlckNvbXBhcmF0b3IuVGV4dFN0YXJ0c1dpdGhBbnlPZjpcbiAgICAgIGNhc2UgVXNlckNvbXBhcmF0b3IuVGV4dEVuZHNXaXRoQW55T2Y6XG4gICAgICBjYXNlIFVzZXJDb21wYXJhdG9yLlRleHROb3RTdGFydHNXaXRoQW55T2Y6XG4gICAgICBjYXNlIFVzZXJDb21wYXJhdG9yLlRleHROb3RFbmRzV2l0aEFueU9mOlxuICAgICAgY2FzZSBVc2VyQ29tcGFyYXRvci5BcnJheUNvbnRhaW5zQW55T2Y6XG4gICAgICBjYXNlIFVzZXJDb21wYXJhdG9yLkFycmF5RG9lc05vdENvbnRhaW5BbnlPZjpcbiAgICAgIGNhc2UgVXNlckNvbXBhcmF0b3IuQ29udGFpbnNBbnlPZjpcbiAgICAgIGNhc2UgVXNlckNvbXBhcmF0b3IuRG9lc05vdENvbnRhaW5BbnlPZjpcbiAgICAgIGNhc2UgVXNlckNvbXBhcmF0b3IuVGV4dEVxdWFsczpcbiAgICAgIGNhc2UgVXNlckNvbXBhcmF0b3IuVGV4dERvZXNOb3RFcXVhbDogcmV0dXJuIHRydWU7XG4gICAgICBkZWZhdWx0OiByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgb3BlbkNsZWFydGV4dEluZm9EaWFsb2coKSB7XG4gICAgdGhpcy5kaWFsb2cub3BlbihJbmZvRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICB3aWR0aDogJzYwMHB4JyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgdGl0bGU6IGBDb25zaWRlciB1c2luZyBjb25maWRlbnRpYWwgY29tcGFyYXRvcnNgLFxuICAgICAgICBib2R5OiBgQ29tcGFyaXNvbiB2YWx1ZSB3aWxsIGJlIHByZXNlbnRlZCBhcyBwbGFpbiB0ZXh0IFxuICAgICAgICBpbiB0aGUgPGk+Y29uZmlnIEpTT048L2k+LiBJZiB5b3UgaGF2ZSBzZW5zaXRpdmUgZGF0YSwgY29uc2lkZXIgdXNpbmcgb25lIG9mIHRoZSBjb25maWRlbnRpYWwgKGhhc2hlZCkgY29tcGFyYXRvcnMuPGJyLz48YnIvPlxuICAgICAgICBTZWUgdGhlIDxhIGhyZWY9XCJodHRwczovL2NvbmZpZ2NhdC5jb20vZG9jcy90YXJnZXRpbmcvdGFyZ2V0aW5nLXJ1bGUvdXNlci1jb25kaXRpb24vI2NvbmZpZGVudGlhbC10ZXh0LWNvbXBhcmF0b3JzXCIgdGFyZ2V0PVwiX2JsYW5rXCI+ZG9jdW1lbnRhdGlvbjwvYT4gZm9yIG1vcmUgaW5mb3JtYXRpb24uYCxcbiAgICAgICAgc2Vjb25kYXJ5QnV0dG9uTGFiZWw6ICdPcGVuIGNvbXBhcmF0b3Igc2VsZWN0b3InLFxuICAgICAgICBzZWNvbmRhcnlCdXR0b25BY3Rpb246ICgpID0+IHRoaXMuY29tcERpYWxvZygpXG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJ0YXJnZXRpbmctcnVsZS1saW5lIHNtYWxsZXN0LWZvcm0tZmllbGRcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZXhwbGFuYXRpb24td3JhcHBlclwiPlxuICAgICAgICA8YXBwLWNvbmRpdGlvbi1jaGlwIFt0YXJnZXRpbmdSdWxlSW5kZXhdPVwidGFyZ2V0aW5nUnVsZUluZGV4XCJcbiAgICAgICAgICAgIFtjb25kaXRpb25JbmRleF09XCJjb25kaXRpb25JbmRleFwiPjwvYXBwLWNvbmRpdGlvbi1jaGlwPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJleHBsYW5hdGlvblwiPjxhIGhyZWY9XCJodHRwczovL2NvbmZpZ2NhdC5jb20vZG9jcy90YXJnZXRpbmcvdGFyZ2V0aW5nLXJ1bGUvdXNlci1jb25kaXRpb24vXCJcbiAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCIgY2xhc3M9XCJ1c2VyLWxpbmtcIj51c2VyJ3M8L2E+PC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwid3JhcHBlci1ncm91cFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlci1ncm91cFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhcmdldGluZy1ydWxlLWNvbXBvbmVudCBwYWQtcmlnaHRcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnc21hbGwnOiBkZWZhdWx0Q29tcGFyaXNvbkF0dHJpYnV0ZXMuaW5kZXhPZihmb3JtR3JvdXAuY29udHJvbHMuY29tcGFyaXNvbkF0dHJpYnV0ZS52YWx1ZSkgPT09IC0xfVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBtYXROYXRpdmVDb250cm9sIChjaGFuZ2UpPVwiYXR0cmlidXRlQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtR3JvdXAuY29udHJvbHMuY29tcGFyaXNvbkF0dHJpYnV0ZS5kaXNhYmxlZFwiIG1hdFRvb2x0aXA9XCJDb21wYXJpc29uIGF0dHJpYnV0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgY29tcGFyaXNvbkF0dHJpYnV0ZSBvZiBkZWZhdWx0Q29tcGFyaXNvbkF0dHJpYnV0ZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZF09XCJjb21wYXJpc29uQXR0cmlidXRlID09PSBmb3JtR3JvdXAuY29udHJvbHMuY29tcGFyaXNvbkF0dHJpYnV0ZS52YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7Y29tcGFyaXNvbkF0dHJpYnV0ZX19PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkXT1cImRlZmF1bHRDb21wYXJpc29uQXR0cmlidXRlcy5pbmRleE9mKGZvcm1Hcm91cC5jb250cm9scy5jb21wYXJpc29uQXR0cmlidXRlLnZhbHVlKSA9PT0gLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFyZ2V0aW5nLXJ1bGUtY29tcG9uZW50IHBhZC1yaWdodCBzbWFsbFwiXG4gICAgICAgICAgICAgICAgW2hpZGRlbl09XCJkZWZhdWx0Q29tcGFyaXNvbkF0dHJpYnV0ZXMuaW5kZXhPZihmb3JtR3JvdXAuY29udHJvbHMuY29tcGFyaXNvbkF0dHJpYnV0ZS52YWx1ZSkgIT09IC0xXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgc3Vic2NyaXB0U2l6aW5nPVwiZHluYW1pY1wiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT1cInRleHRcIiAoYmx1cik9XCJjYWxjQ29tcGFyYXRvcnModHJ1ZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9scy5jb21wYXJpc29uQXR0cmlidXRlXCIgbWF0VG9vbHRpcD1cIkN1c3RvbSBjb21wYXJpc29uIGF0dHJpYnV0ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwiZm9ybUdyb3VwLmNvbnRyb2xzLmNvbXBhcmlzb25BdHRyaWJ1dGUuaW52YWxpZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3tGb3JtSGVscGVyLmdldEVycm9yTWVzc2FnZShmb3JtR3JvdXAuY29udHJvbHMuY29tcGFyaXNvbkF0dHJpYnV0ZSl9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0YXJnZXRpbmctcnVsZS1jb21wb25lbnQgcGFkLXJpZ2h0IGNvbXBhcmF0b3JcIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIj5cbiAgICAgICAgICAgICAgICA8c2VsZWN0IG1hdE5hdGl2ZUNvbnRyb2wgKGNoYW5nZSk9XCJjb21wYXJhdG9yQ2hhbmdlZChzZWxlY3RlZENvbXBhcmF0b3IpXCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZENvbXBhcmF0b3JcIiBbZGlzYWJsZWRdPVwicmVhZE9ubHlcIiBtYXRUb29sdGlwPVwiQ29tcGFyYXRvclwiPlxuICAgICAgICAgICAgICAgICAgICA8b3B0Z3JvdXAgKm5nRm9yPVwibGV0IGdyb3VwIG9mIGNvbXBhcmF0b3JTdWdnZXN0aW9ucyB8IGtleXZhbHVlOiBrZWVwT3JkZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIicmbmJzcDsnICsgZ3JvdXAua2V5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBjb21wYXJhdG9yIG9mIGdyb3VwLnZhbHVlXCIgW25nVmFsdWVdPVwiY29tcGFyYXRvci52YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7Y29tcGFyYXRvci5sYWJlbH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9vcHRncm91cD5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGdyb3VwIFtsYWJlbF09XCJjb21wYXJhdG9yU2VwYXJhdG9yXCI+PC9vcHRncm91cD5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInNob3dhbGxcIj4mbmJzcDsmbmJzcDtTSE9XIEFMTCBDT01QQVJBVE9SUyZuYnNwOyZuYnNwOzwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0U3VmZml4IGNsYXNzPVwiaW5wdXQtYnV0dG9uXCIgdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBtYXRUb29sdGlwPVwiQWxsIGNvbXBhcmF0b3JzXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbXBEaWFsb2coKVwiPjxtYXQtaWNvbj5saXN0X2FsdDwvbWF0LWljb24+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImZvcm1Hcm91cC5jb250cm9scy5jb21wYXJhdG9yLmludmFsaWRcIj5cbiAgICAgICAgICAgICAgICAgICAge3tGb3JtSGVscGVyLmdldEVycm9yTWVzc2FnZShmb3JtR3JvdXAuY29udHJvbHMuY29tcGFyYXRvcil9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwicm9sbG91dFJ1bGVDb21wYXJhdG9yVHlwZVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJSb2xsb3V0UnVsZUNvbXBhcmF0b3JWMlR5cGUuU3RyaW5nXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRleHRUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJSb2xsb3V0UnVsZUNvbXBhcmF0b3JWMlR5cGUuU2VtdmVyXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInNlbXZlclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIlJvbGxvdXRSdWxlQ29tcGFyYXRvclYyVHlwZS5TdHJpbmdMaXN0XCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxpc3RUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJSb2xsb3V0UnVsZUNvbXBhcmF0b3JWMlR5cGUuU2VtdmVyTGlzdFwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJsaXN0VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiUm9sbG91dFJ1bGVDb21wYXJhdG9yVjJUeXBlLk51bWJlclwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJudW1iZXJUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJSb2xsb3V0UnVsZUNvbXBhcmF0b3JWMlR5cGUuRGF0ZVRpbWVcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZGF0ZVRpbWVUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICN0ZXh0VGVtcGxhdGU+XG4gICAgPGRpdiAqbmdJZj1cImZvcm1Hcm91cC5jb250cm9scy5jb21wYXJpc29uVmFsdWUuY29udHJvbHMuc3RyaW5nVmFsdWVcIiBjbGFzcz1cInRhcmdldGluZy1ydWxlLWNvbXBvbmVudCBncm93XCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPVwidGV4dFwiIFtmb3JtQ29udHJvbF09XCJmb3JtR3JvdXAuY29udHJvbHMuY29tcGFyaXNvblZhbHVlLmNvbnRyb2xzLnN0cmluZ1ZhbHVlXCJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiQ29tcGFyaXNvbiB2YWx1ZSAodGV4dClcIiBwbGFjZWhvbGRlcj1cIkFkZCB0ZXh0IC4uLlwiIC8+XG4gICAgICAgICAgICA8YnV0dG9uIG1hdFByZWZpeCBjbGFzcz1cInByZWZpeC1idXR0b25cIiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uICpuZ0lmPVwiaXNDbGVhclRleHRDb21wYXJhdG9yU2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuQ2xlYXJ0ZXh0SW5mb0RpYWxvZygpXCJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiVGhpcyBjb21wYXJpc29uIHZhbHVlIHdvbid0IGJlIGhhc2hlZC4gQ2xpY2sgZm9yIG1vcmUgaW5mby5cIj48bWF0LWljb24+bG9ja19vcGVuX3JpZ2h0PC9tYXQtaWNvbj48L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gbWF0U3VmZml4IGNsYXNzPVwiaW5wdXQtYnV0dG9uXCIgdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBtYXRUb29sdGlwPVwiQWR2YW5jZWQgZWRpdG9yXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZXhwYW5kVGV4dCgpXCI+PG1hdC1pY29uPmVkaXRfbm90ZTwvbWF0LWljb24+PC9idXR0b24+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwiZm9ybUdyb3VwLmNvbnRyb2xzLmNvbXBhcmlzb25WYWx1ZS5jb250cm9scy5zdHJpbmdWYWx1ZS5pbnZhbGlkXCI+XG4gICAgICAgICAgICAgICAge3tGb3JtSGVscGVyLmdldEVycm9yTWVzc2FnZShmb3JtR3JvdXAuY29udHJvbHMuY29tcGFyaXNvblZhbHVlLmNvbnRyb2xzLnN0cmluZ1ZhbHVlKX19XG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cblxuPG5nLXRlbXBsYXRlICNzZW12ZXJUZW1wbGF0ZT5cbiAgICA8ZGl2ICpuZ0lmPVwiZm9ybUdyb3VwLmNvbnRyb2xzLmNvbXBhcmlzb25WYWx1ZS5jb250cm9scy5zdHJpbmdWYWx1ZVwiIGNsYXNzPVwidGFyZ2V0aW5nLXJ1bGUtY29tcG9uZW50IGdyb3dcIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgc3Vic2NyaXB0U2l6aW5nPVwiZHluYW1pY1wiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9XCJ0ZXh0XCIgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9scy5jb21wYXJpc29uVmFsdWUuY29udHJvbHMuc3RyaW5nVmFsdWVcIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJDb21wYXJpc29uIHZhbHVlIChzZW1hbnRpYyB2ZXJzaW9uKVwiIHBsYWNlaG9sZGVyPVwiQWRkIHNlbWFudGljIHZlcnNpb24gLi4uICgxLjIuMylcIiAvPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImZvcm1Hcm91cC5jb250cm9scy5jb21wYXJpc29uVmFsdWUuY29udHJvbHMuc3RyaW5nVmFsdWUuaW52YWxpZFwiPlxuICAgICAgICAgICAgICAgIHt7Rm9ybUhlbHBlci5nZXRFcnJvck1lc3NhZ2UoZm9ybUdyb3VwLmNvbnRyb2xzLmNvbXBhcmlzb25WYWx1ZS5jb250cm9scy5zdHJpbmdWYWx1ZSl9fVxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2xpc3RUZW1wbGF0ZT5cbiAgICA8ZGl2ICpuZ0lmPVwiZm9ybUdyb3VwLmNvbnRyb2xzLmNvbXBhcmlzb25WYWx1ZS5jb250cm9scy5saXN0VmFsdWVcIlxuICAgICAgICBjbGFzcz1cInRhcmdldGluZy1ydWxlLWNvbXBvbmVudCBncm93IHNtYWxsLWNoaXAtaW5wdXQgdG9wLWljb24tc3VmZml4XCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIj5cbiAgICAgICAgICAgIDxtYXQtY2hpcC1ncmlkICNjaGlwR3JpZCBbZm9ybUNvbnRyb2xdPVwiZmFrZUZvcm1Db250cm9sXCIgW2Vycm9yU3RhdGVNYXRjaGVyXT1cImVycm9yU3RhdGVNYXRjaGVyXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwLWNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBsaXN0VmFsdWVJdGVtIG9mIGZvcm1Hcm91cC5jb250cm9scy5jb21wYXJpc29uVmFsdWUuY29udHJvbHMubGlzdFZhbHVlLmNvbnRyb2xzIHwgc2xpY2U6MDoyMDsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cImdldExpc3RWYWx1ZUl0ZW1Ub29sdGlwTWVzc2FnZShsaXN0VmFsdWVJdGVtKVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWNoaXAtcm93IChyZW1vdmVkKT1cInJlbW92ZShpKVwiIFtkaXNhYmxlZF09XCJyZWFkT25seVwiIFtyZW1vdmFibGVdPVwiIXJlYWRPbmx5XCIgY2xhc3M9XCJjaGlwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtlZGl0YWJsZV09XCIhcmVhZE9ubHlcIiAoZWRpdGVkKT1cImVkaXQoaSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2ludmFsaWQnOiBpc0xpc3RWYWx1ZUl0ZW1JbnZhbGlkKGxpc3RWYWx1ZUl0ZW0pfVwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICB7e2xpc3RWYWx1ZUl0ZW0uY29udHJvbHMudmFsdWUudmFsdWV9fVxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXRDaGlwUmVtb3ZlICpuZ0lmPVwiIXJlYWRPbmx5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmNhbmNlbDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hpcC1yb3c+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNsYXNzPVwic2hvdy1hbGxcIiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmb3JtR3JvdXAuY29udHJvbHMuY29tcGFyaXNvblZhbHVlLmNvbnRyb2xzLmxpc3RWYWx1ZS5jb250cm9scy5sZW5ndGggPiAyMFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJleHBhbmRMaXN0KClcIj5cbiAgICAgICAgICAgICAgICAgICAgc2hvdyBhbGwge3tmb3JtR3JvdXAuY29udHJvbHMuY29tcGFyaXNvblZhbHVlLmNvbnRyb2xzLmxpc3RWYWx1ZS5jb250cm9scy5sZW5ndGh9fVxuICAgICAgICAgICAgICAgICAgICBpdGVtczwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBbZGlzYWJsZWRdPVwicmVhZE9ubHlcIiBbcGxhY2Vob2xkZXJdPVwiIXJlYWRPbmx5ID8gJ0FkZCBpdGVtIHRvIGxpc3QgLi4uJyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgW21hdENoaXBJbnB1dEZvcl09XCJjaGlwR3JpZFwiIFttYXRDaGlwSW5wdXRTZXBhcmF0b3JLZXlDb2Rlc109XCJzZXBhcmF0b3JLZXlzQ29kZXNcIlxuICAgICAgICAgICAgICAgICAgICBtYXRDaGlwSW5wdXRBZGRPbkJsdXIgKG1hdENoaXBJbnB1dFRva2VuRW5kKT1cImFkZCgkZXZlbnQpXCIgbWF0VG9vbHRpcD1cIkNvbXBhcmlzb24gdmFsdWVzIChsaXN0KVwiIC8+XG4gICAgICAgICAgICA8L21hdC1jaGlwLWdyaWQ+XG4gICAgICAgICAgICA8YnV0dG9uIG1hdEljb25QcmVmaXggY2xhc3M9XCJwcmVmaXgtYnV0dG9uXCIgdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiAqbmdJZj1cImlzQ2xlYXJUZXh0Q29tcGFyYXRvclNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkNsZWFydGV4dEluZm9EaWFsb2coKVwiXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIlRoaXMgY29tcGFyaXNvbiB2YWx1ZSB3b24ndCBiZSBoYXNoZWQuIENsaWNrIGZvciBtb3JlIGluZm8uXCI+PG1hdC1pY29uPmxvY2tfb3Blbl9yaWdodDwvbWF0LWljb24+PC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIG1hdEljb25TdWZmaXggY2xhc3M9XCJpbnB1dC1idXR0b25cIiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIG1hdFRvb2x0aXA9XCJNb3JlLi4uXCJcbiAgICAgICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwibW9yZU1lbnVcIj48bWF0LWljb24+bW9yZV92ZXJ0PC9tYXQtaWNvbj48L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gbWF0SWNvblN1ZmZpeCBjbGFzcz1cImlucHV0LWJ1dHRvblwiIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gbWF0VG9vbHRpcD1cIkFkdmFuY2VkIGVkaXRvclwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImV4cGFuZExpc3QoKVwiPjxtYXQtaWNvbj5lZGl0X25vdGU8L21hdC1pY29uPjwvYnV0dG9uPlxuICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZm9ybUdyb3VwLmNvbnRyb2xzLmNvbXBhcmlzb25WYWx1ZS5jb250cm9scy5saXN0VmFsdWUuaW52YWxpZCAmJiBmb3JtR3JvdXAuY29udHJvbHMuY29tcGFyaXNvblZhbHVlLmNvbnRyb2xzLmxpc3RWYWx1ZS5lcnJvcnNcIj5cbiAgICAgICAgICAgICAgICB7e0Zvcm1IZWxwZXIuZ2V0RXJyb3JNZXNzYWdlKGZvcm1Hcm91cC5jb250cm9scy5jb21wYXJpc29uVmFsdWUuY29udHJvbHMubGlzdFZhbHVlKX19XG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj1cImZvcm1Hcm91cC5jb250cm9scy5jb21wYXJpc29uVmFsdWUuY29udHJvbHMubGlzdFZhbHVlLmludmFsaWQgJiYgIWZvcm1Hcm91cC5jb250cm9scy5jb21wYXJpc29uVmFsdWUuY29udHJvbHMubGlzdFZhbHVlLmVycm9yc1wiPlxuICAgICAgICAgICAgICAgIEludmFsaWQgaXRlbXNcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNudW1iZXJUZW1wbGF0ZT5cbiAgICA8ZGl2ICpuZ0lmPVwiZm9ybUdyb3VwLmNvbnRyb2xzLmNvbXBhcmlzb25WYWx1ZS5jb250cm9scy5kb3VibGVWYWx1ZVwiIGNsYXNzPVwidGFyZ2V0aW5nLXJ1bGUtY29tcG9uZW50IGdyb3dcIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgc3Vic2NyaXB0U2l6aW5nPVwiZHluYW1pY1wiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9XCJudW1iZXJcIiBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzLmNvbXBhcmlzb25WYWx1ZS5jb250cm9scy5kb3VibGVWYWx1ZVwiXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkNvbXBhcmlzb24gdmFsdWUgKG51bWJlcilcIiBwbGFjZWhvbGRlcj1cIkFkZCBudW1iZXIgLi4uXCIgaW5wdXREaXNwbGF5Tm9ybWFsaXplciAvPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImZvcm1Hcm91cC5jb250cm9scy5jb21wYXJpc29uVmFsdWUuY29udHJvbHMuZG91YmxlVmFsdWUuaW52YWxpZFwiPlxuICAgICAgICAgICAgICAgIHt7Rm9ybUhlbHBlci5nZXRFcnJvck1lc3NhZ2UoZm9ybUdyb3VwLmNvbnRyb2xzLmNvbXBhcmlzb25WYWx1ZS5jb250cm9scy5kb3VibGVWYWx1ZSl9fVxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2RhdGVUaW1lVGVtcGxhdGU+XG4gICAgPGRpdiAqbmdJZj1cImZvcm1Hcm91cC5jb250cm9scy5jb21wYXJpc29uVmFsdWUuY29udHJvbHMuZG91YmxlVmFsdWVcIiBjbGFzcz1cInRhcmdldGluZy1ydWxlLWNvbXBvbmVudCBkYXRldGltZVwiPlxuICAgICAgICA8YXBwLWRhdGUtdGltZS1waWNrZXIgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9scy5jb21wYXJpc29uVmFsdWUuY29udHJvbHMuZG91YmxlVmFsdWVcIlxuICAgICAgICAgICAgZGF0ZVRvb2x0aXA9XCJDb21wYXJpc29uIHZhbHVlIChkYXRlKVwiIHRpbWVUb29sdGlwPVwiQ29tcGFyaXNvbiB2YWx1ZSAodGltZSlcIiAvPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuXG48bWF0LW1lbnUgI21vcmVNZW51PlxuICAgIDxhIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImV4cGFuZExpc3QoKVwiPjxtYXQtaWNvbj5lZGl0X25vdGU8L21hdC1pY29uPkFkdmFuY2VkIGVkaXRvcjwvYT5cbiAgICA8YSBtYXQtbWVudS1pdGVtIChjbGljayk9XCJjb3B5VmFsdWVzQXNDc3YoKVwiPjxtYXQtaWNvbj5jb250ZW50X2NvcHk8L21hdC1pY29uPkNvcHkgYXMgQ1NWICh2YWx1ZXMgb25seSk8L2E+XG4gICAgPGEgbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwicmVtb3ZlQWxsKClcIiBbZGlzYWJsZWRdPVwicmVhZE9ubHlcIj48bWF0LWljb24+ZGVsZXRlX291dGxpbmU8L21hdC1pY29uPlJlbW92ZVxuICAgICAgICBhbGw8L2E+XG48L21hdC1tZW51PiJdfQ==
444
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1jb25kaXRpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctY29uZmlnY2F0LXB1YmxpY2FwaS11aS9zcmMvbGliL3YyL2ZlYXR1cmUtZmxhZy9ldmFsdWF0aW9uLWZvcm11bGEvdGFyZ2V0aW5nLXJ1bGUvY29uZGl0aW9ucy91c2VyLWNvbmRpdGlvbi91c2VyLWNvbmRpdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1jb25maWdjYXQtcHVibGljYXBpLXVpL3NyYy9saWIvdjIvZmVhdHVyZS1mbGFnL2V2YWx1YXRpb24tZm9ybXVsYS90YXJnZXRpbmctcnVsZS9jb25kaXRpb25zL3VzZXItY29uZGl0aW9uL3VzZXItY29uZGl0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxFQUFxQixTQUFTLEVBQUUsS0FBSyxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RixPQUFPLEVBQUUsV0FBVyxFQUFhLE1BQU0sZ0JBQWdCLENBQUM7QUFHeEQsT0FBTyxFQUFFLFdBQVcsRUFBcUIsTUFBTSx3QkFBd0IsQ0FBQztBQUV4RSxPQUFPLEVBQ0wsVUFBVSxFQUNWLGNBQWMsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFDSixjQUFjLEVBQ3ZDLDJCQUEyQixFQUErQyxtQkFBbUIsRUFDdkgsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUM1RixPQUFPLEVBQUUsK0JBQStCLEVBQThCLE1BQU0saUVBQWlFLENBQUM7QUFDOUksT0FBTyxFQUFFLCtCQUErQixFQUE4QixNQUFNLHdFQUF3RSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQUVySixNQUFNLE9BQU8sMEJBQTBCO0lBQ3JDLFlBQW9CLFNBQXVDO1FBQXZDLGNBQVMsR0FBVCxTQUFTLENBQThCO0lBQUksQ0FBQztJQUNoRSxZQUFZO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxPQUFPLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDO0lBQ3BKLENBQUM7Q0FDRjtBQUVELElBQUssZUFRSjtBQVJELFdBQUssZUFBZTtJQUNsQix5REFBc0MsQ0FBQTtJQUN0QyxnQ0FBYSxDQUFBO0lBQ2IsdURBQW9DLENBQUE7SUFDcEMsb0NBQWlCLENBQUE7SUFDakIsd0NBQXFCLENBQUE7SUFDckIsMkRBQXdDLENBQUE7SUFDeEMsa0NBQWUsQ0FBQTtBQUNqQixDQUFDLEVBUkksZUFBZSxLQUFmLGVBQWUsUUFRbkI7QUFTRCxNQUFNLGNBQWMsR0FBdUI7SUFDekMsRUFBRSxLQUFLLEVBQUUsY0FBYyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsa0JBQWtCLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxlQUFlLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7SUFDM0csRUFBRSxLQUFLLEVBQUUsY0FBYyxDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsa0JBQWtCLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxlQUFlLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7SUFDakgsRUFBRSxLQUFLLEVBQUUsY0FBYyxDQUFDLGFBQWEsRUFBRSxLQUFLLEVBQUUsa0JBQWtCLENBQUMsYUFBYSxFQUFFLEtBQUssRUFBRSxlQUFlLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7SUFDdkgsRUFBRSxLQUFLLEVBQUUsY0FBYyxDQUFDLG1CQUFtQixFQUFFLEtBQUssRUFBRSxrQkFBa0IsQ0FBQyxtQkFBbUIsRUFBRSxLQUFLLEVBQUUsZUFBZSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO0lBQ25JLEVBQUUsS0FBSyxFQUFFLGNBQWMsQ0FBQyxhQUFhLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixDQUFDLGFBQWEsRUFBRSxLQUFLLEVBQUUsZUFBZSxDQUFDLGVBQWUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO0lBQ2xJLEVBQUUsS0FBSyxFQUFFLGNBQWMsQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsa0JBQWtCLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLGVBQWUsQ0FBQyxlQUFlLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtJQUN4SSxFQUFFLEtBQUssRUFBRSxjQUFjLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxrQkFBa0IsQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLGVBQWUsQ0FBQyxlQUFlLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtJQUM1SCxFQUFFLEtBQUssRUFBRSxjQUFjLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixDQUFDLGtCQUFrQixFQUFFLEtBQUssRUFBRSxlQUFlLENBQUMsZUFBZSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7SUFDNUksRUFBRSxLQUFLLEVBQUUsY0FBYyxDQUFDLGFBQWEsRUFBRSxLQUFLLEVBQUUsa0JBQWtCLENBQUMsYUFBYSxFQUFFLEtBQUssRUFBRSxlQUFlLENBQUMsZUFBZSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7SUFDbEksRUFBRSxLQUFLLEVBQUUsY0FBYyxDQUFDLHFCQUFxQixFQUFFLEtBQUssRUFBRSxrQkFBa0IsQ0FBQyxxQkFBcUIsRUFBRSxLQUFLLEVBQUUsZUFBZSxDQUFDLGVBQWUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO0lBQ2xKLEVBQUUsS0FBSyxFQUFFLGNBQWMsQ0FBQyxZQUFZLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixDQUFDLFlBQVksRUFBRSxLQUFLLEVBQUUsZUFBZSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO0lBQ3hILEVBQUUsS0FBSyxFQUFFLGNBQWMsQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsa0JBQWtCLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLGVBQWUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRTtJQUNwSSxFQUFFLEtBQUssRUFBRSxjQUFjLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxrQkFBa0IsQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLGVBQWUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRTtJQUNwSCxFQUFFLEtBQUssRUFBRSxjQUFjLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixDQUFDLGtCQUFrQixFQUFFLEtBQUssRUFBRSxlQUFlLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUU7SUFDcEksRUFBRSxLQUFLLEVBQUUsY0FBYyxDQUFDLGFBQWEsRUFBRSxLQUFLLEVBQUUsa0JBQWtCLENBQUMsYUFBYSxFQUFFLEtBQUssRUFBRSxlQUFlLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUU7SUFDMUgsRUFBRSxLQUFLLEVBQUUsY0FBYyxDQUFDLHFCQUFxQixFQUFFLEtBQUssRUFBRSxrQkFBa0IsQ0FBQyxxQkFBcUIsRUFBRSxLQUFLLEVBQUUsZUFBZSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO0lBQzFJLEVBQUUsS0FBSyxFQUFFLGNBQWMsQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsa0JBQWtCLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLGVBQWUsQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO0lBQzFJLEVBQUUsS0FBSyxFQUFFLGNBQWMsQ0FBQyxtQkFBbUIsRUFBRSxLQUFLLEVBQUUsa0JBQWtCLENBQUMsbUJBQW1CLEVBQUUsS0FBSyxFQUFFLGVBQWUsQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO0lBQ2hKLEVBQUUsS0FBSyxFQUFFLGNBQWMsQ0FBQyxjQUFjLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixDQUFDLGNBQWMsRUFBRSxLQUFLLEVBQUUsZUFBZSxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO0lBQzlILEVBQUUsS0FBSyxFQUFFLGNBQWMsQ0FBQyxhQUFhLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixDQUFDLGFBQWEsRUFBRSxLQUFLLEVBQUUsZUFBZSxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO0lBQzVILEVBQUUsS0FBSyxFQUFFLGNBQWMsQ0FBQyxtQkFBbUIsRUFBRSxLQUFLLEVBQUUsa0JBQWtCLENBQUMsbUJBQW1CLEVBQUUsS0FBSyxFQUFFLGVBQWUsQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO0lBQ2hKLEVBQUUsS0FBSyxFQUFFLGNBQWMsQ0FBQyx5QkFBeUIsRUFBRSxLQUFLLEVBQUUsa0JBQWtCLENBQUMseUJBQXlCLEVBQUUsS0FBSyxFQUFFLGVBQWUsQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO0lBQzVKLEVBQUUsS0FBSyxFQUFFLGNBQWMsQ0FBQyw0QkFBNEIsRUFBRSxLQUFLLEVBQUUsa0JBQWtCLENBQUMsNEJBQTRCLEVBQUUsS0FBSyxFQUFFLGVBQWUsQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO0lBQ2xLLEVBQUUsS0FBSyxFQUFFLGNBQWMsQ0FBQywrQkFBK0IsRUFBRSxLQUFLLEVBQUUsa0JBQWtCLENBQUMsK0JBQStCLEVBQUUsS0FBSyxFQUFFLGVBQWUsQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO0lBQ3hLLEVBQUUsS0FBSyxFQUFFLGNBQWMsQ0FBQywwQkFBMEIsRUFBRSxLQUFLLEVBQUUsa0JBQWtCLENBQUMsMEJBQTBCLEVBQUUsS0FBSyxFQUFFLGVBQWUsQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO0lBQzlKLEVBQUUsS0FBSyxFQUFFLGNBQWMsQ0FBQyw2QkFBNkIsRUFBRSxLQUFLLEVBQUUsa0JBQWtCLENBQUMsNkJBQTZCLEVBQUUsS0FBSyxFQUFFLGVBQWUsQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO0lBQ3BLLEVBQUUsS0FBSyxFQUFFLGNBQWMsQ0FBQywyQkFBMkIsRUFBRSxLQUFLLEVBQUUsa0JBQWtCLENBQUMsMkJBQTJCLEVBQUUsS0FBSyxFQUFFLGVBQWUsQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO0lBQ2pLLEVBQUUsS0FBSyxFQUFFLGNBQWMsQ0FBQyxpQ0FBaUMsRUFBRSxLQUFLLEVBQUUsa0JBQWtCLENBQUMsaUNBQWlDLEVBQUUsS0FBSyxFQUFFLGVBQWUsQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO0lBQzdLLEVBQUUsS0FBSyxFQUFFLGNBQWMsQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsZUFBZSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO0lBQ2xILEVBQUUsS0FBSyxFQUFFLGNBQWMsQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsa0JBQWtCLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLGVBQWUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRTtJQUM5SCxFQUFFLEtBQUssRUFBRSxjQUFjLENBQUMsbUJBQW1CLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixDQUFDLG1CQUFtQixFQUFFLEtBQUssRUFBRSxlQUFlLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUU7SUFDcEksRUFBRSxLQUFLLEVBQUUsY0FBYyxDQUFDLHNCQUFzQixFQUFFLEtBQUssRUFBRSxrQkFBa0IsQ0FBQyxzQkFBc0IsRUFBRSxLQUFLLEVBQUUsZUFBZSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO0lBQzFJLEVBQUUsS0FBSyxFQUFFLGNBQWMsQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLEVBQUUsa0JBQWtCLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLGVBQWUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRTtJQUNoSSxFQUFFLEtBQUssRUFBRSxjQUFjLENBQUMsb0JBQW9CLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixDQUFDLG9CQUFvQixFQUFFLEtBQUssRUFBRSxlQUFlLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUU7SUFDdEksRUFBRSxLQUFLLEVBQUUsY0FBYyxDQUFDLGtCQUFrQixFQUFFLEtBQUssRUFBRSxrQkFBa0IsQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsZUFBZSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO0lBQ25JLEVBQUUsS0FBSyxFQUFFLGNBQWMsQ0FBQyx3QkFBd0IsRUFBRSxLQUFLLEVBQUUsa0JBQWtCLENBQUMsd0JBQXdCLEVBQUUsS0FBSyxFQUFFLGVBQWUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRTtDQUNoSixDQUFBO0FBRUQsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFhdEgsTUFBTSxPQUFPLHNCQUFzQjtJQVlqQyxJQUE4QyxjQUFjLENBQUMsV0FBd0I7UUFDbkYsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7SUFDakMsQ0FBQztJQXNCRCxZQUFvQixhQUE0QixFQUN0QyxNQUFpQixFQUNqQix5QkFBb0QsRUFDcEQsU0FBb0IsRUFDcEIsZ0JBQWtDLEVBQ2xDLGlCQUFvQztRQUwxQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUN0QyxXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQ2pCLDhCQUF5QixHQUF6Qix5QkFBeUIsQ0FBMkI7UUFDcEQsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUNwQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUF4Q3JDLHVCQUFrQixHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBVSxDQUFDO1FBRXRELGVBQVUsR0FBRyxVQUFVLENBQUM7UUFheEIsZ0NBQTJCLEdBQUcsQ0FBQyxZQUFZLEVBQUUsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBS2pFLDBCQUFxQixHQUFHLElBQUksR0FBRyxFQUFZLENBQUM7UUFFNUMsd0JBQW1CLEdBQUcsc0JBQXNCLENBQUM7UUFFN0MsY0FBUyxHQUFHLENBQUMsQ0FBTSxFQUFFLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRWxDLGdDQUEyQixHQUFHLGtCQUFrQixDQUFDO1FBSWpELDRHQUE0RztRQUM1RyxrSEFBa0g7UUFDbEgsb0JBQWUsR0FBRyxJQUFJLFdBQVcsQ0FBUyxFQUFFLENBQUMsQ0FBQztJQVFJLENBQUM7SUFFbkQsUUFBUTtRQUNOLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNySCxJQUFJLENBQUMsNkJBQTZCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxRyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSwwQkFBMEIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDeEUsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUM7UUFDbkUsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUFZO1FBQzNCLE1BQU0sS0FBSyxHQUF1QixLQUFLLENBQUMsTUFBTyxDQUFDLEtBQUssQ0FBQztRQUN0RCxJQUFJLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUMzRCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLEtBQUssS0FBSyxLQUFLLEVBQUUsQ0FBQztnQkFDaEUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM1RCxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUM3QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdCLENBQUM7UUFDSCxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDcEUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3pELElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QixDQUFDO0lBQ0gsQ0FBQztJQUVELGlCQUFpQixDQUFDLEtBQVU7UUFDMUIsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDO1lBQ25FLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbEIsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztRQUNoQyxJQUFJLENBQUMsNkJBQTZCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUxRyxNQUFNLDRCQUE0QixHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQztRQUNwRSxJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckgsSUFBSSw0QkFBNEIsS0FBSyxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztZQUNwRSxNQUFNLFlBQVksR0FBMEIsSUFBSSxDQUFDLHlCQUF5QixLQUFLLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQzNHLFdBQVcsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxHQUFHLE1BQU07YUFDM0MsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ1AsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQ0FBZ0MsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQTtRQUMvTCxDQUFDO0lBQ0gsQ0FBQztJQUVELFVBQVU7UUFDUixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsRUFBRTtZQUM1RCxLQUFLLEVBQUUsUUFBUTtZQUNmLFFBQVEsRUFBRTtnQkFDUixHQUFHLEVBQUUsTUFBTSxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTzthQUNwRjtZQUNELElBQUksRUFBRTtnQkFDSixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7Z0JBQ3ZCLGtCQUFrQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLO2FBQzdEO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUN6QyxJQUFJLE1BQU0sSUFBSSxNQUFNLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNsRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN6QixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsR0FBRyxDQUFDLEtBQXdCO1FBQzFCLE1BQU0sS0FBSyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUV6QyxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDO1FBRXpCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUFDLE9BQU87UUFBQyxDQUFDO1FBRXZCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxhQUFhLENBQUMsZ0NBQWdDLENBQ2pELElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQ3hDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUMxRCxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFDWCxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztZQUMvQixPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLDJCQUEyQixFQUFFO1lBQzlELElBQUksRUFBRTtnQkFDSixLQUFLLEVBQUUsc0NBQXNDO2dCQUM3QyxJQUFJLEVBQUUscUtBQXFLO2dCQUMzSyxjQUFjLEVBQUUsb0JBQW9CO2dCQUNwQyxhQUFhLEVBQUUsc0JBQXNCO2FBQ3RDO1lBQ0QsWUFBWSxFQUFFLElBQUk7U0FDbkIsQ0FBQyxDQUFDO1FBRUgsU0FBUyxDQUFDLFdBQVcsRUFBRTthQUNwQixTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDbEIsSUFBSSxNQUFNLEtBQUssS0FBSyxFQUFFLENBQUM7Z0JBQ3JCLE1BQU0sOEJBQThCLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNoRyxJQUFJLDhCQUE4QixDQUFDLEtBQUssRUFBRSxDQUFDO29CQUN6QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ3hELENBQUM7cUJBQU0sSUFBSSw4QkFBOEIsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ3pFLElBQUksQ0FBQyxhQUFhLENBQUMsZ0NBQWdDLENBQ2pELElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQ3hDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUMxRCw4QkFBOEIsQ0FBQyxtQkFBbUIsRUFDbEQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7Z0JBQ2pDLENBQUM7WUFDSCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQ0FBZ0MsQ0FDakQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssRUFDeEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQzFELENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUNYLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1lBQ2pDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBYTtRQUNsQixJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3JGLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDcEYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUM5RSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMzRSxDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksQ0FBQyxLQUFhLEVBQUUsS0FBeUI7UUFDM0MsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUVqQyw2RUFBNkU7UUFDN0Usa0dBQWtHO1FBQ2xHLDZFQUE2RTtRQUM3RSwrQ0FBK0M7UUFDL0MsdUNBQXVDO1FBQ3ZDLHlDQUF5QztRQUN6QyxnQ0FBZ0M7UUFDaEMsMEJBQTBCO1FBQzFCLHVCQUF1QjtRQUN2Qiw4QkFBOEI7UUFDOUIsS0FBSztRQUNMLElBQUk7UUFDSixHQUFHO1FBQ0gsMkZBQTJGO1FBQzNGLHVEQUF1RDtRQUN2RCx1SEFBdUg7UUFDdkgsa0dBQWtHO1FBQ2pHLEtBQUssQ0FBQyxJQUFtQixDQUFDLGdCQUFnQixFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUUxRCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JCLENBQUM7YUFBTSxJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsVUFBVSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUNqRyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUNwRyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1lBQ3BGLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDOUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDM0UsQ0FBQztJQUNILENBQUM7SUFFRCxVQUFVO1FBQ1IsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsK0JBQStCLEVBQUU7WUFDbEUsS0FBSyxFQUFFLE9BQU87WUFDZCxJQUFJLEVBQThCO2dCQUNoQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsS0FBSztnQkFDekUsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFFBQVE7Z0JBQy9FLFVBQVUsRUFBRSxJQUFJLENBQUMseUJBQXlCLEtBQUssa0JBQWtCLENBQUMsTUFBTTtvQkFDdEUsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsa0NBQWtDLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDO29CQUNwRixDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQ0FBa0MsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUM7Z0JBQ3RGLGNBQWMsRUFBRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsd0JBQXdCO2dCQUNwRSxXQUFXLEVBQUUsaUhBQWlIO2FBQy9IO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN2QyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUM5RixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNsRixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO2dCQUN0RixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDN0UsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDN0UsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFVBQVU7UUFDUixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQywrQkFBK0IsRUFBRTtZQUNsRSxLQUFLLEVBQUUsT0FBTztZQUNkLElBQUksRUFBOEI7Z0JBQ2hDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQ3ZDLFVBQVUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSztnQkFDcEQsc0JBQXNCLEVBQUUsSUFBSSxDQUFDLHNCQUFzQjtnQkFDbkQsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO2FBQ3hCO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQTBELEVBQUUsRUFBRTtZQUMvRixJQUFJLElBQUksRUFBRSxtQkFBbUIsRUFBRSxDQUFDO2dCQUM5QixNQUFNLFFBQVEsR0FDWixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLO3FCQUM3RCxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM1RCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsbUJBQW1CO3FCQUN0QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMxRCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO29CQUMxRCxPQUFPO2dCQUNULENBQUM7Z0JBQ0QsTUFBTSxVQUFVLEdBQ2QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssa0JBQWtCLENBQUMsVUFBVTtvQkFDbkgsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsMENBQTBDLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDO29CQUM1RixDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQywwQ0FBMEMsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztnQkFDakcsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxxQ0FBcUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsc0JBQXNCLEVBQUUsVUFBVSxDQUFDLENBQUM7Z0JBQzdKLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDO2dCQUMzRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztnQkFDakUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLGdCQUFnQixFQUFFLENBQUM7Z0JBQzNELElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN4RCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsU0FBUztRQUNQLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxSixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQ3BGLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDOUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDM0UsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzdGLENBQUM7SUFFRCxlQUFlLENBQUMsS0FBYTtRQUMzQixJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsSUFBSSxDQUFDO2dCQUNILElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMzQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsc0JBQXNCLENBQUMsQ0FBQztZQUNqRSxDQUFDO1lBQUMsTUFBTSxDQUFDO2dCQUNQLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1lBQ25FLENBQUM7UUFFSCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQ2xFLENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEksQ0FBQztJQUVELGNBQWMsQ0FBQyxvQkFBd0Q7UUFDckUsT0FBTyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztJQUNwRyxDQUFDO0lBRUQsYUFBYSxDQUFDLG9CQUF3RDtRQUNwRSxPQUFPLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ2xHLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxvQkFBd0Q7UUFDN0UsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLG9CQUFvQixDQUFDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQy9GLENBQUM7SUFFRCw4QkFBOEIsQ0FBQyxvQkFBd0Q7UUFDckYsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLG9CQUFvQixDQUFDLEVBQUUsQ0FBQztZQUM5QyxPQUFPLFVBQVUsQ0FBQyxlQUFlLENBQUMsb0JBQW9CLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pFLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUFDO1lBQ3BELE9BQU8sT0FBTyxHQUFHLFVBQVUsQ0FBQyxlQUFlLENBQUMsb0JBQW9CLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xGLENBQUM7UUFDRCxJQUFJLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDN0MsT0FBTyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUNsRCxDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELGVBQWUsQ0FBQyxRQUFRLEdBQUcsS0FBSztRQUM5QixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdkQsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMsMEJBQTBCLENBQUMsb0JBQW9CLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVELDBCQUEwQixDQUFDLEdBQWEsRUFBRSxRQUFpQjtRQUN6RCxJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDOUMsTUFBTSxRQUFRLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BHLElBQUksUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNuSCxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLENBQUM7YUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN6QyxJQUFJLFFBQVEsQ0FBQyxLQUFLLEtBQUssY0FBYyxDQUFDLGFBQWEsSUFBSSxRQUFRLENBQUMsS0FBSyxLQUFLLGNBQWMsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO2dCQUM3RyxLQUFLLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUE7WUFDMUQsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQU0sYUFBYSxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDakYsS0FBSyxHQUFHLENBQUMsR0FBRyxhQUFhLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQTtZQUN0QyxDQUFDO1FBQ0gsQ0FBQztRQUNELEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDbEksSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUF5QjtRQUNsQyxNQUFNLE1BQU0sR0FBdUIsRUFBRSxDQUFDO1FBQ3RDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDbEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUM3QyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ25CLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBeUI7UUFDcEMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ1osS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNsQixJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDO2dCQUMzQixHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDekIsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxXQUFXLENBQUMsR0FBUTtRQUNsQixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3hCLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELE9BQU8sR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRCxhQUFhLENBQUMsT0FBMEk7UUFDdEosT0FBTyxDQUFDLE9BQU8sQ0FBQyxXQUFXLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztJQUM1RSxDQUFDO0lBR0QscUJBQXFCLENBQUMsVUFBMEI7UUFDOUMsUUFBUSxVQUFVLEVBQUUsQ0FBQztZQUNuQixLQUFLLGNBQWMsQ0FBQyxPQUFPLENBQUM7WUFDNUIsS0FBSyxjQUFjLENBQUMsVUFBVSxDQUFDO1lBQy9CLEtBQUssY0FBYyxDQUFDLG1CQUFtQixDQUFDO1lBQ3hDLEtBQUssY0FBYyxDQUFDLGlCQUFpQixDQUFDO1lBQ3RDLEtBQUssY0FBYyxDQUFDLHNCQUFzQixDQUFDO1lBQzNDLEtBQUssY0FBYyxDQUFDLG9CQUFvQixDQUFDO1lBQ3pDLEtBQUssY0FBYyxDQUFDLGtCQUFrQixDQUFDO1lBQ3ZDLEtBQUssY0FBYyxDQUFDLHdCQUF3QixDQUFDO1lBQzdDLEtBQUssY0FBYyxDQUFDLGFBQWEsQ0FBQztZQUNsQyxLQUFLLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQztZQUN4QyxLQUFLLGNBQWMsQ0FBQyxVQUFVLENBQUM7WUFDL0IsS0FBSyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQztZQUNsRCxPQUFPLENBQUMsQ0FBQyxPQUFPLEtBQUssQ0FBQztRQUN4QixDQUFDO0lBQ0gsQ0FBQztJQUVELHVCQUF1QjtRQUNyQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtZQUNwQyxLQUFLLEVBQUUsT0FBTztZQUNkLElBQUksRUFBRTtnQkFDSixLQUFLLEVBQUUseUNBQXlDO2dCQUNoRCxJQUFJLEVBQUU7O29MQUVzSztnQkFDNUssb0JBQW9CLEVBQUUsMEJBQTBCO2dCQUNoRCxxQkFBcUIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO2FBQy9DO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzsrR0EvWVUsc0JBQXNCO21HQUF0QixzQkFBc0IscU9BSnRCO1lBQ1QsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUU7U0FDbkQsc0lDM0ZILDh6V0FrTFc7OzRGRHJGRSxzQkFBc0I7a0JBWGxDLFNBQVM7K0JBQ0Usb0JBQW9CLGFBTW5CO3dCQUNULEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFO3FCQUNuRDt5T0FPUSxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUd3QyxjQUFjO3NCQUEzRCxTQUFTO3VCQUFDLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFTlRFUiwgQ09NTUEgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0Q2hpcElucHV0RXZlbnQsIE1hdENoaXBFZGl0ZWRFdmVudCwgTWF0Q2hpcEdyaWQsIE1hdENoaXBSb3cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGlwcyc7XG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgRGF0ZUFkYXB0ZXIsIEVycm9yU3RhdGVNYXRjaGVyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQgeyBDbGlwYm9hcmQgfSBmcm9tICdAYW5ndWxhci9jZGsvY2xpcGJvYXJkJztcbmltcG9ydCB7XG4gIEZvcm1IZWxwZXIsIENvbXBhcmlzb25WYWx1ZUxpc3RGb3JtLCBVc2VyQ29uZGl0aW9uRm9ybSwgRm9ybUdlbmVyYXRvcixcbiAgVXNlckNvbXBhcmF0b3IsIFVzZXJDb21wYXJhdG9yVGV4dCwgVXNlckNvbXBhcmF0b3JUeXBlLFxuICBJQ29tcGFyaXNvblZhbHVlTGlzdE1vZGVsLCBJQ29tcGFyaXNvblZhbHVlTW9kZWwsIEFwcERhdGVBZGFwdGVyLFxuICBJRmVhdHVyZUZsYWdMaW1pdGF0aW9ucywgQ29uZmlybWF0aW9uRGlhbG9nQ29tcG9uZW50LCBDb21wYXJpc29uVmFsdWVMaXN0SGVscGVyLCBNZXNzYWdpbmdTZXJ2aWNlLCBJbmZvRGlhbG9nQ29tcG9uZW50XG59IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2Jvb3RzdHJhcCc7XG5pbXBvcnQgeyBDb21wYXJhdG9yRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wYXJhdG9yLWRpYWxvZy9jb21wYXJhdG9yLWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgUG9wb3V0TGlzdEVkaXRvckRpYWxvZ0NvbXBvbmVudCwgUG9wb3V0TGlzdEVkaXRvckRpYWxvZ0RhdGEgfSBmcm9tICcuL3BvcG91dC1saXN0LWVkaXRvci1kaWFsb2cvcG9wb3V0LWxpc3QtZWRpdG9yLWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgUG9wb3V0VGV4dEVkaXRvckRpYWxvZ0NvbXBvbmVudCwgUG9wb3V0VGV4dEVkaXRvckRpYWxvZ0RhdGEgfSBmcm9tICcuLi8uLi8uLi9wb3BvdXQtdGV4dC1lZGl0b3ItZGlhbG9nL3BvcG91dC10ZXh0LWVkaXRvci1kaWFsb2cuY29tcG9uZW50JztcblxuZXhwb3J0IGNsYXNzIExpc3RWYWx1ZUVycm9yU3RhdGVNYXRjaGVyIGltcGxlbWVudHMgRXJyb3JTdGF0ZU1hdGNoZXIge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZvcm1Hcm91cDogRm9ybUdyb3VwPFVzZXJDb25kaXRpb25Gb3JtPikgeyB9XG4gIGlzRXJyb3JTdGF0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuY29tcGFyaXNvblZhbHVlLmNvbnRyb2xzLmxpc3RWYWx1ZT8udG91Y2hlZCAmJiB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5jb21wYXJpc29uVmFsdWUuY29udHJvbHMubGlzdFZhbHVlPy5pbnZhbGlkO1xuICB9XG59XG5cbmVudW0gQ29tcGFyYXRvckdyb3VwIHtcbiAgQ29uZmlkZW50aWFsVGV4dCA9ICdDT05GSURFTlRJQUwgVEVYVCcsXG4gIFRleHQgPSAnVEVYVCcsXG4gIFNlbWFudGljVmVyc2lvbiA9ICdTRU1BTlRJQyBWRVJTSU9OJyxcbiAgTnVtYmVyID0gJ05VTUJFUicsXG4gIERhdGVUaW1lID0gJ0RBVEVUSU1FJyxcbiAgQ29uZmlkZW50aWFsQXJyYXkgPSAnQ09ORklERU5USUFMIEFSUkFZJyxcbiAgQXJyYXkgPSAnQVJSQVknXG59XG5cbmludGVyZmFjZSBJQ29tcGFyYXRvclZhbHVlIHtcbiAgdmFsdWU6IFVzZXJDb21wYXJhdG9yLFxuICBsYWJlbDogVXNlckNvbXBhcmF0b3JUZXh0LFxuICBncm91cDogQ29tcGFyYXRvckdyb3VwLFxuICBpbmRleDogbnVtYmVyLFxufVxuXG5jb25zdCBhbGxDb21wYXJhdG9yczogSUNvbXBhcmF0b3JWYWx1ZVtdID0gW1xuICB7IHZhbHVlOiBVc2VyQ29tcGFyYXRvci5Jc09uZU9mLCBsYWJlbDogVXNlckNvbXBhcmF0b3JUZXh0LklzT25lT2YsIGdyb3VwOiBDb21wYXJhdG9yR3JvdXAuVGV4dCwgaW5kZXg6IDAgfSxcbiAgeyB2YWx1ZTogVXNlckNvbXBhcmF0b3IuSXNOb3RPbmVPZiwgbGFiZWw6IFVzZXJDb21wYXJhdG9yVGV4dC5Jc05vdE9uZU9mLCBncm91cDogQ29tcGFyYXRvckdyb3VwLlRleHQsIGluZGV4OiAxIH0sXG4gIHsgdmFsdWU6IFVzZXJDb21wYXJhdG9yLkNvbnRhaW5zQW55T2YsIGxhYmVsOiBVc2VyQ29tcGFyYXRvclRleHQuQ29udGFpbnNBbnlPZiwgZ3JvdXA6IENvbXBhcmF0b3JHcm91cC5UZXh0LCBpbmRleDogMiB9LFxuICB7IHZhbHVlOiBVc2VyQ29tcGFyYXRvci5Eb2VzTm90Q29udGFpbkFueU9mLCBsYWJlbDogVXNlckNvbXBhcmF0b3JUZXh0LkRvZXNOb3RDb250YWluQW55T2YsIGdyb3VwOiBDb21wYXJhdG9yR3JvdXAuVGV4dCwgaW5kZXg6IDMgfSxcbiAgeyB2YWx1ZTogVXNlckNvbXBhcmF0b3IuU2VtVmVySXNPbmVPZiwgbGFiZWw6IFVzZXJDb21wYXJhdG9yVGV4dC5TZW1WZXJJc09uZU9mLCBncm91cDogQ29tcGFyYXRvckdyb3VwLlNlbWFudGljVmVyc2lvbiwgaW5kZXg6IDQgfSxcbiAgeyB2YWx1ZTogVXNlckNvbXBhcmF0b3IuU2VtVmVySXNOb3RPbmVPZiwgbGFiZWw6IFVzZXJDb21wYXJhdG9yVGV4dC5TZW1WZXJJc05vdE9uZU9mLCBncm91cDogQ29tcGFyYXRvckdyb3VwLlNlbWFudGljVmVyc2lvbiwgaW5kZXg6IDUgfSxcbiAgeyB2YWx1ZTogVXNlckNvbXBhcmF0b3IuU2VtVmVyTGVzcywgbGFiZWw6IFVzZXJDb21wYXJhdG9yVGV4dC5TZW1WZXJMZXNzLCBncm91cDogQ29tcGFyYXRvckdyb3VwLlNlbWFudGljVmVyc2lvbiwgaW5kZXg6IDYgfSxcbiAgeyB2YWx1ZTogVXNlckNvbXBhcmF0b3IuU2VtVmVyTGVzc09yRXF1YWxzLCBsYWJlbDogVXNlckNvbXBhcmF0b3JUZXh0LlNlbVZlckxlc3NPckVxdWFscywgZ3JvdXA6IENvbXBhcmF0b3JHcm91cC5TZW1hbnRpY1ZlcnNpb24sIGluZGV4OiA3IH0sXG4gIHsgdmFsdWU6IFVzZXJDb21wYXJhdG9yLlNlbVZlckdyZWF0ZXIsIGxhYmVsOiBVc2VyQ29tcGFyYXRvclRleHQuU2VtVmVyR3JlYXRlciwgZ3JvdXA6IENvbXBhcmF0b3JHcm91cC5TZW1hbnRpY1ZlcnNpb24sIGluZGV4OiA4IH0sXG4gIHsgdmFsdWU6IFVzZXJDb21wYXJhdG9yLlNlbVZlckdyZWF0ZXJPckVxdWFscywgbGFiZWw6IFVzZXJDb21wYXJhdG9yVGV4dC5TZW1WZXJHcmVhdGVyT3JFcXVhbHMsIGdyb3VwOiBDb21wYXJhdG9yR3JvdXAuU2VtYW50aWNWZXJzaW9uLCBpbmRleDogOSB9LFxuICB7IHZhbHVlOiBVc2VyQ29tcGFyYXRvci5OdW1iZXJFcXVhbHMsIGxhYmVsOiBVc2VyQ29tcGFyYXRvclRleHQuTnVtYmVyRXF1YWxzLCBncm91cDogQ29tcGFyYXRvckdyb3VwLk51bWJlciwgaW5kZXg6IDEwIH0sXG4gIHsgdmFsdWU6IFVzZXJDb21wYXJhdG9yLk51bWJlckRvZXNOb3RFcXVhbCwgbGFiZWw6IFVzZXJDb21wYXJhdG9yVGV4dC5OdW1iZXJEb2VzTm90RXF1YWwsIGdyb3VwOiBDb21wYXJhdG9yR3JvdXAuTnVtYmVyLCBpbmRleDogMTEgfSxcbiAgeyB2YWx1ZTogVXNlckNvbXBhcmF0b3IuTnVtYmVyTGVzcywgbGFiZWw6IFVzZXJDb21wYXJhdG9yVGV4dC5OdW1iZXJMZXNzLCBncm91cDogQ29tcGFyYXRvckdyb3VwLk51bWJlciwgaW5kZXg6IDEyIH0sXG4gIHsgdmFsdWU6IFVzZXJDb21wYXJhdG9yLk51bWJlckxlc3NPckVxdWFscywgbGFiZWw6IFVzZXJDb21wYXJhdG9yVGV4dC5OdW1iZXJMZXNzT3JFcXVhbHMsIGdyb3VwOiBDb21wYXJhdG9yR3JvdXAuTnVtYmVyLCBpbmRleDogMTMgfSxcbiAgeyB2YWx1ZTogVXNlckNvbXBhcmF0b3IuTnVtYmVyR3JlYXRlciwgbGFiZWw6IFVzZXJDb21wYXJhdG9yVGV4dC5OdW1iZXJHcmVhdGVyLCBncm91cDogQ29tcGFyYXRvckdyb3VwLk51bWJlciwgaW5kZXg6IDE0IH0sXG4gIHsgdmFsdWU6IFVzZXJDb21wYXJhdG9yLk51bWJlckdyZWF0ZXJPckVxdWFscywgbGFiZWw6IFVzZXJDb21wYXJhdG9yVGV4dC5OdW1iZXJHcmVhdGVyT3JFcXVhbHMsIGdyb3VwOiBDb21wYXJhdG9yR3JvdXAuTnVtYmVyLCBpbmRleDogMTUgfSxcbiAgeyB2YWx1ZTogVXNlckNvbXBhcmF0b3IuU2Vuc2l0aXZlSXNPbmVPZiwgbGFiZWw6IFVzZXJDb21wYXJhdG9yVGV4dC5TZW5zaXRpdmVJc09uZU9mLCBncm91cDogQ29tcGFyYXRvckdyb3VwLkNvbmZpZGVudGlhbFRleHQsIGluZGV4OiAxNiB9LFxuICB7IHZhbHVlOiBVc2VyQ29tcGFyYXRvci5TZW5zaXRpdmVJc05vdE9uZU9mLCBsYWJlbDogVXNlckNvbXBhcmF0b3JUZXh0LlNlbnNpdGl2ZUlzTm90T25lT2YsIGdyb3VwOiBDb21wYXJhdG9yR3JvdXAuQ29uZmlkZW50aWFsVGV4dCwgaW5kZXg6IDE3IH0sXG4gIHsgdmFsdWU6IFVzZXJDb21wYXJhdG9yLkRhdGVUaW1lQmVmb3JlLCBsYWJlbDogVXNlckNvbXBhcmF0b3JUZXh0LkRhdGVUaW1lQmVmb3JlLCBncm91cDogQ29tcGFyYXRvckdyb3VwLkRhdGVUaW1lLCBpbmRleDogMTggfSxcbiAgeyB2YWx1ZTogVXNlckNvbXBhcmF0b3IuRGF0ZVRpbWVBZnRlciwgbGFiZWw6IFVzZXJDb21wYXJhdG9yVGV4dC5EYXRlVGltZUFmdGVyLCBncm91cDogQ29tcGFyYXRvckdyb3VwLkRhdGVUaW1lLCBpbmRleDogMTkgfSxcbiAgeyB2YWx1ZTogVXNlckNvbXBhcmF0b3IuU2Vuc2l0aXZlVGV4dEVxdWFscywgbGFiZWw6IFVzZXJDb21wYXJhdG9yVGV4dC5TZW5zaXRpdmVUZXh0RXF1YWxzLCBncm91cDogQ29tcGFyYXRvckdyb3VwLkNvbmZpZGVudGlhbFRleHQsIGluZGV4OiAyMCB9LFxuICB7IHZhbHVlOiBVc2VyQ29tcGFyYXRvci5TZW5zaXRpdmVUZXh0RG9lc05vdEVxdWFsLCBsYWJlbDogVXNlckNvbXBhcmF0b3JUZXh0LlNlbnNpdGl2ZVRleHREb2VzTm90RXF1YWwsIGdyb3VwOiBDb21wYXJhdG9yR3JvdXAuQ29uZmlkZW50aWFsVGV4dCwgaW5kZXg6IDIxIH0sXG4gIHsgdmFsdWU6IFVzZXJDb21wYXJhdG9yLlNlbnNpdGl2ZVRleHRTdGFydHNXaXRoQW55T2YsIGxhYmVsOiBVc2VyQ29tcGFyYXRvclRleHQuU2Vuc2l0aXZlVGV4dFN0YXJ0c1dpdGhBbnlPZiwgZ3JvdXA6IENvbXBhcmF0b3JHcm91cC5Db25maWRlbnRpYWxUZXh0LCBpbmRleDogMjIgfSxcbiAgeyB2YWx1ZTogVXNlckNvbXBhcmF0b3IuU2Vuc2l0aXZlVGV4dE5vdFN0YXJ0c1dpdGhBbnlPZiwgbGFiZWw6IFVzZXJDb21wYXJhdG9yVGV4dC5TZW5zaXRpdmVUZXh0Tm90U3RhcnRzV2l0aEFueU9mLCBncm91cDogQ29tcGFyYXRvckdyb3VwLkNvbmZpZGVudGlhbFRleHQsIGluZGV4OiAyMyB9LFxuICB7IHZhbHVlOiBVc2VyQ29tcGFyYXRvci5TZW5zaXRpdmVUZXh0RW5kc1dpdGhBbnlPZiwgbGFiZWw6IFVzZXJDb21wYXJhdG9yVGV4dC5TZW5zaXRpdmVUZXh0RW5kc1dpdGhBbnlPZiwgZ3JvdXA6IENvbXBhcmF0b3JHcm91cC5Db25maWRlbnRpYWxUZXh0LCBpbmRleDogMjQgfSxcbiAgeyB2YWx1ZTogVXNlckNvbXBhcmF0b3IuU2Vuc2l0aXZlVGV4dE5vdEVuZHNXaXRoQW55T2YsIGxhYmVsOiBVc2VyQ29tcGFyYXRvclRleHQuU2Vuc2l0aXZlVGV4dE5vdEVuZHNXaXRoQW55T2YsIGdyb3VwOiBDb21wYXJhdG9yR3JvdXAuQ29uZmlkZW50aWFsVGV4dCwgaW5kZXg6IDI1IH0sXG4gIHsgdmFsdWU6IFVzZXJDb21wYXJhdG9yLlNlbnNpdGl2ZUFycmF5Q29udGFpbnNBbnlPZiwgbGFiZWw6IFVzZXJDb21wYXJhdG9yVGV4dC5TZW5zaXRpdmVBcnJheUNvbnRhaW5zQW55T2YsIGdyb3VwOiBDb21wYXJhdG9yR3JvdXAuQ29uZmlkZW50aWFsQXJyYXksIGluZGV4OiAyNiB9LFxuICB7IHZhbHVlOiBVc2VyQ29tcGFyYXRvci5TZW5zaXRpdmVBcnJheURvZXNOb3RDb250YWluQW55T2YsIGxhYmVsOiBVc2VyQ29tcGFyYXRvclRleHQuU2Vuc2l0aXZlQXJyYXlEb2VzTm90Q29udGFpbkFueU9mLCBncm91cDogQ29tcGFyYXRvckdyb3VwLkNvbmZpZGVudGlhbEFycmF5LCBpbmRleDogMjcgfSxcbiAgeyB2YWx1ZTogVXNlckNvbXBhcmF0b3IuVGV4dEVxdWFscywgbGFiZWw6IFVzZXJDb21wYXJhdG9yVGV4dC5UZXh0RXF1YWxzLCBncm91cDogQ29tcGFyYXRvckdyb3VwLlRleHQsIGluZGV4OiAyOCB9LFxuICB7IHZhbHVlOiBVc2VyQ29tcGFyYXRvci5UZXh0RG9lc05vdEVxdWFsLCBsYWJlbDogVXNlckNvbXBhcmF0b3JUZXh0LlRleHREb2VzTm90RXF1YWwsIGdyb3VwOiBDb21wYXJhdG9yR3JvdXAuVGV4dCwgaW5kZXg6IDI5IH0sXG4gIHsgdmFsdWU6IFVzZXJDb21wYXJhdG9yLlRleHRTdGFydHNXaXRoQW55T2YsIGxhYmVsOiBVc2VyQ29tcGFyYXRvclRleHQuVGV4dFN0YXJ0c1dpdGhBbnlPZiwgZ3JvdXA6IENvbXBhcmF0b3JHcm91cC5UZXh0LCBpbmRleDogMzAgfSxcbiAgeyB2YWx1ZTogVXNlckNvbXBhcmF0b3IuVGV4dE5vdFN0YXJ0c1dpdGhBbnlPZiwgbGFiZWw6IFVzZXJDb21wYXJhdG9yVGV4dC5UZXh0Tm90U3RhcnRzV2l0aEFueU9mLCBncm91cDogQ29tcGFyYXRvckdyb3VwLlRleHQsIGluZGV4OiAzMSB9LFxuICB7IHZhbHVlOiBVc2VyQ29tcGFyYXRvci5UZXh0RW5kc1dpdGhBbnlPZiwgbGFiZWw6IFVzZXJDb21wYXJhdG9yVGV4dC5UZXh0RW5kc1dpdGhBbnlPZiwgZ3JvdXA6IENvbXBhcmF0b3JHcm91cC5UZXh0LCBpbmRleDogMzIgfSxcbiAgeyB2YWx1ZTogVXNlckNvbXBhcmF0b3IuVGV4dE5vdEVuZHNXaXRoQW55T2YsIGxhYmVsOiBVc2VyQ29tcGFyYXRvclRleHQuVGV4dE5vdEVuZHNXaXRoQW55T2YsIGdyb3VwOiBDb21wYXJhdG9yR3JvdXAuVGV4dCwgaW5kZXg6IDMzIH0sXG4gIHsgdmFsdWU6IFVzZXJDb21wYXJhdG9yLkFycmF5Q29udGFpbnNBbnlPZiwgbGFiZWw6IFVzZXJDb21wYXJhdG9yVGV4dC5BcnJheUNvbnRhaW5zQW55T2YsIGdyb3VwOiBDb21wYXJhdG9yR3JvdXAuQXJyYXksIGluZGV4OiAzNCB9LFxuICB7IHZhbHVlOiBVc2VyQ29tcGFyYXRvci5BcnJheURvZXNOb3RDb250YWluQW55T2YsIGxhYmVsOiBVc2VyQ29tcGFyYXRvclRleHQuQXJyYXlEb2VzTm90Q29udGFpbkFueU9mLCBncm91cDogQ29tcGFyYXRvckdyb3VwLkFycmF5LCBpbmRleDogMzUgfSxcbl1cblxuY29uc3QgZGVmYXVsdENvbXBhcmF0b3JJZHMgPSBbMTYsIDE3LCAyMCwgMjEsIDIyLCAyMywgMjQsIDI1LCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxOCwgMTldO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtdXNlci1jb25kaXRpb24nLFxuICB0ZW1wbGF0ZVVybDogJy4vdXNlci1jb25kaXRpb24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtcbiAgICAnLi4vLi4vLi4vY29tcG9uZW50cy5zY3NzJyxcbiAgICAnLi91c2VyLWNvbmRpdGlvbi5jb21wb25lbnQuc2NzcydcbiAgXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgeyBwcm92aWRlOiBEYXRlQWRhcHRlciwgdXNlQ2xhc3M6IEFwcERhdGVBZGFwdGVyIH1cbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgVXNlckNvbmRpdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHJlYWRvbmx5IHNlcGFyYXRvcktleXNDb2RlcyA9IFtFTlRFUiwgQ09NTUFdIGFzIGNvbnN0O1xuXG4gIEZvcm1IZWxwZXIgPSBGb3JtSGVscGVyO1xuXG4gIEBJbnB1dCgpIHRhcmdldGluZ1J1bGVJbmRleDogbnVtYmVyO1xuICBASW5wdXQoKSBjb25kaXRpb25JbmRleDogbnVtYmVyO1xuICBASW5wdXQoKSByZWFkT25seTogYm9vbGVhbjtcbiAgQElucHV0KCkgZmVhdHVyZUZsYWdMaW1pdGF0aW9uczogSUZlYXR1cmVGbGFnTGltaXRhdGlvbnM7XG4gIEBJbnB1dCgpIGZvcm1Hcm91cDogRm9ybUdyb3VwPFVzZXJDb25kaXRpb25Gb3JtPjtcbiAgbWF0Q2hpcEdyaWQ6IE1hdENoaXBHcmlkO1xuXG4gIEBWaWV3Q2hpbGQoXCJjaGlwR3JpZFwiLCB7IHN0YXRpYzogZmFsc2UgfSkgc2V0IHNldE1hdENoaXBHcmlkKG1hdENoaXBHcmlkOiBNYXRDaGlwR3JpZCkge1xuICAgIHRoaXMubWF0Q2hpcEdyaWQgPSBtYXRDaGlwR3JpZDtcbiAgfVxuXG4gIGRlZmF1bHRDb21wYXJpc29uQXR0cmlidXRlcyA9IFsnSWRlbnRpZmllcicsICdFbWFpbCcsICdDb3VudHJ5J107XG5cbiAgZGF0ZVZhbHVlOiBEYXRlO1xuICB0aW1lVmFsdWU6IHN0cmluZztcblxuICBjb21wYXJhdG9yU3VnZ2VzdGlvbnMgPSBuZXcgTWFwPGFueSwgYW55PigpO1xuICBzZWxlY3RlZENvbXBhcmF0b3I6IFVzZXJDb21wYXJhdG9yO1xuICBjb21wYXJhdG9yU2VwYXJhdG9yID0gXCLilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcIjtcblxuICBrZWVwT3JkZXIgPSAoYTogYW55LCBfOiBhbnkpID0+IGE7XG5cbiAgUm9sbG91dFJ1bGVDb21wYXJhdG9yVjJUeXBlID0gVXNlckNvbXBhcmF0b3JUeXBlO1xuICByb2xsb3V0UnVsZUNvbXBhcmF0b3JUeXBlOiBVc2VyQ29tcGFyYXRvclR5cGU7XG4gIGlzQ2xlYXJUZXh0Q29tcGFyYXRvclNlbGVjdGVkOiBib29sZWFuO1xuXG4gIC8vIFRoZSBjaGlwIGdyaWQncyBbZm9ybUNvbnRyb2xdIG9ubHkgYWNjZXB0cyBhIEZvcm1Db250cm9sLiBXZSBoYXZlIGEgRm9ybUFycmF5IChiZWNhdXNlIG9mIHRoZSBuYW1lK2hpbnQpLlxuICAvLyBXZSBoYXZlIHRvIGZha2UgYSBGb3JtQ29udHJvbCBhbmQgbWF0Y2ggdGhhdCBmb3JtQ29udHJvbCdzIGVycm9yc3RhdGUgd2l0aCB0aGUgb3JpZ2luYWwgY29tcG9uZW50J3MgZXJyb3JTdGF0ZS5cbiAgZmFrZUZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sPHN0cmluZz4oJycpO1xuICBlcnJvclN0YXRlTWF0Y2hlcjogTGlzdFZhbHVlRXJyb3JTdGF0ZU1hdGNoZXI7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmb3JtR2VuZXJhdG9yOiBGb3JtR2VuZXJhdG9yLFxuICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csXG4gICAgcHJpdmF0ZSBjb21wYXJpc29uVmFsdWVMaXN0SGVscGVyOiBDb21wYXJpc29uVmFsdWVMaXN0SGVscGVyLFxuICAgIHByaXZhdGUgY2xpcGJvYXJkOiBDbGlwYm9hcmQsXG4gICAgcHJpdmF0ZSBtZXNzYWdpbmdTZXJ2aWNlOiBNZXNzYWdpbmdTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKSB7IH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnJvbGxvdXRSdWxlQ29tcGFyYXRvclR5cGUgPSB0aGlzLmZvcm1HZW5lcmF0b3IuZ2V0Q29tcGFyaXNvblZhbHVlVHlwZSh0aGlzLmZvcm1Hcm91cC5jb250cm9scy5jb21wYXJhdG9yLnZhbHVlKTtcbiAgICB0aGlzLmlzQ2xlYXJUZXh0Q29tcGFyYXRvclNlbGVjdGVkID0gdGhpcy5pc0NsZWFyVGV4dENvbXBhcmF0b3IodGhpcy5mb3JtR3JvdXAuY29udHJvbHMuY29tcGFyYXRvci52YWx1ZSk7XG4gICAgdGhpcy5lcnJvclN0YXRlTWF0Y2hlciA9IG5ldyBMaXN0VmFsdWVFcnJvclN0YXRlTWF0Y2hlcih0aGlzLmZvcm1Hcm91cCk7XG4gICAgdGhpcy5zZWxlY3RlZENvbXBhcmF0b3IgPSB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5jb21wYXJhdG9yLnZhbHVlO1xuICAgIHRoaXMuY2FsY0NvbXBhcmF0b3JzKCk7XG4gIH1cblxuICBhdHRyaWJ1dGVDaGFuZ2VkKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHZhbHVlID0gKDxIVE1MU2VsZWN0RWxlbWVudD5ldmVudC50YXJnZXQpLnZhbHVlO1xuICAgIGlmICh0aGlzLmRlZmF1bHRDb21wYXJpc29uQXR0cmlidXRlcy5pbmRleE9mKHZhbHVlKSAhPT0gLTEpIHtcbiAgICAgIGlmICh0aGlzLmZvcm1Hcm91cC5jb250cm9scy5jb21wYXJpc29uQXR0cmlidXRlLnZhbHVlICE9PSB2YWx1ZSkge1xuICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5jb21wYXJpc29uQXR0cmlidXRlLnNldFZhbHVlKHZhbHVlKTtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAubWFya0FzRGlydHkoKTtcbiAgICAgICAgdGhpcy5jYWxjQ29tcGFyYXRvcnModHJ1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLmZvcm1Hcm91cC5jb250cm9scy5jb21wYXJpc29uQXR0cmlidXRlLnZhbHVlICE9PSAnJykge1xuICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuY29tcGFyaXNvbkF0dHJpYnV0ZS5zZXRWYWx1ZSgnJyk7XG4gICAgICB0aGlzLmZvcm1Hcm91cC5tYXJrQXNEaXJ0eSgpO1xuICAgICAgdGhpcy5jYWxjQ29tcGFyYXRvcnModHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgY29tcGFyYXRvckNoYW5nZWQodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIGlmICh2YWx1ZSA9PT0gXCJzaG93YWxsXCIpIHtcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgdGhpcy5zZWxlY3RlZENvbXBhcmF0b3IgPSB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5jb21wYXJhdG9yLnZhbHVlO1xuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB0aGlzLmNvbXBEaWFsb2coKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5jb21wYXJhdG9yLnNldFZhbHVlKHZhbHVlKTtcbiAgICB0aGlzLmZvcm1Hcm91cC5tYXJrQXNEaXJ0eSgpO1xuICAgIHRoaXMuc2VsZWN0ZWRDb21wYXJhdG9yID0gdmFsdWU7XG4gICAgdGhpcy5pc0NsZWFyVGV4dENvbXBhcmF0b3JTZWxlY3RlZCA9IHRoaXMuaXNDbGVhclRleHRDb21wYXJhdG9yKHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmNvbXBhcmF0b3IudmFsdWUpO1xuXG4gICAgY29uc3Qgb2xkUm9sbG91dFJ1bGVDb21wYXJhdG9yVHlwZSA9IHRoaXMucm9sbG91dFJ1bGVDb21wYXJhdG9yVHlwZTtcbiAgICB0aGlzLnJvbGxvdXRSdWxlQ29tcGFyYXRvclR5cGUgPSB0aGlzLmZvcm1HZW5lcmF0b3IuZ2V0Q29tcGFyaXNvblZhbHVlVHlwZSh0aGlzLmZvcm1Hcm91cC5jb250cm9scy5jb21wYXJhdG9yLnZhbHVlKTtcbiAgICBpZiAob2xkUm9sbG91dFJ1bGVDb21wYXJhdG9yVHlwZSAhPT0gdGhpcy5yb2xsb3V0UnVsZUNvbXBhcmF0b3JUeXBlKSB7XG4gICAgICBjb25zdCBkZWZhdWx0VmFsdWU6IElDb21wYXJpc29uVmFsdWVNb2RlbCA9IHRoaXMucm9sbG91dFJ1bGVDb21wYXJhdG9yVHlwZSA9PT0gVXNlckNvbXBhcmF0b3JUeXBlLkRhdGVUaW1lID8ge1xuICAgICAgICBkb3VibGVWYWx1ZTogbmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwLjBcbiAgICAgIH0gOiB7fTtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLnNldENvbnRyb2woJ2NvbXBhcmlzb25WYWx1ZScsIHRoaXMuZm9ybUdlbmVyYXRvci5nZW5lcmF0ZUNvbXBhcmlzb25WYWx1ZUZvcm1Hcm91cChkZWZhdWx0VmFsdWUsIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmNvbXBhcmF0b3IudmFsdWUsIGZhbHNlLCB0aGlzLmZlYXR1cmVGbGFnTGltaXRhdGlvbnMpKVxuICAgIH1cbiAgfVxuXG4gIGNvbXBEaWFsb2coKSB7XG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDb21wYXJhdG9yRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICB3aWR0aDogJzExMzBweCcsXG4gICAgICBwb3NpdGlvbjoge1xuICAgICAgICB0b3A6IHdpbmRvdy5pbm5lckhlaWdodCA8IDc1MCA/ICcwcHgnIDogd2luZG93LmlubmVySGVpZ2h0IDwgOTUwID8gJzUwcHgnIDogJzEwMHB4JyxcbiAgICAgIH0sXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHJlYWRPbmx5OiB0aGlzLnJlYWRPbmx5LFxuICAgICAgICBzZWxlY3RlZENvbXBhcmF0b3I6IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmNvbXBhcmF0b3IudmFsdWVcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQgIT09IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmNvbXBhcmF0b3IudmFsdWUpIHtcbiAgICAgICAgdGhpcy5jb21wYXJhdG9yQ2hhbmdlZChyZXN1bHQpO1xuICAgICAgICB0aGlzLmNhbGNDb21wYXJhdG9ycygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYWRkKGV2ZW50OiBNYXRDaGlwSW5wdXRFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHZhbHVlID0gKGV2ZW50LnZhbHVlIHx8ICcnKS50cmltKCk7XG5cbiAgICBldmVudC5jaGlwSW5wdXQ/LmNsZWFyKCk7XG5cbiAgICBpZiAoIXZhbHVlKSB7IHJldHVybjsgfVxuXG4gICAgaWYgKHZhbHVlLmluZGV4T2YoJywnKSA9PT0gLTEpIHtcbiAgICAgIHRoaXMuZm9ybUdlbmVyYXRvci5hZGRDb21wYXJpc29uVmFsdWVMaXN0VmFsdWVJdGVtcyhcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuY29tcGFyYXRvci52YWx1ZSxcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuY29tcGFyaXNvblZhbHVlLmNvbnRyb2xzLmxpc3RWYWx1ZSxcbiAgICAgICAgW3sgdmFsdWUgfV0sXG4gICAgICAgIHRoaXMuZmVhdHVyZUZsYWdMaW1pdGF0aW9ucyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDb25maXJtYXRpb25EaWFsb2dDb21wb25lbnQsIHtcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgdGl0bGU6ICdIb3cgd291bGQgeW91IGxpa2UgdG8gYWRkIHRoZSBpdGVtcz8nLFxuICAgICAgICBib2R5OiBgV2UndmUgbm90aWNlZCBhIGNvbW1hIGluIHRoZSB2YWx1ZSB5b3Ugd2FudCB0byBhZGQuIDxici8+IERvIHlvdSB3YW50IHRvIGFkZCBpdCBhcyBhIHNpbmdsZSBpdGVtLCBvciB3b3VsZCB5b3UgcHJlZmVyIHRvIGluc2VydCBtdWx0aXBsZSBpdGVtcyBzZXBhcmF0ZWQgYnkgY29tbWFzP2AsXG4gICAgICAgIHllc0J1dHRvbkxhYmVsOiAnQWRkIG11bHRpcGxlIGl0ZW1zJyxcbiAgICAgICAgbm9CdXR0b25MYWJlbDogJ0FkZCBhcyBhIHNpbmdsZSBpdGVtJ1xuICAgICAgfSxcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZVxuICAgIH0pO1xuXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKClcbiAgICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gJ3llcycpIHtcbiAgICAgICAgICBjb25zdCBjb21wYXJpc29uVmFsdWVMaXN0UGFyc2VSZXN1bHQgPSB0aGlzLmNvbXBhcmlzb25WYWx1ZUxpc3RIZWxwZXIucGFyc2VWYWx1ZXNGcm9tQ3N2KHZhbHVlKTtcbiAgICAgICAgICBpZiAoY29tcGFyaXNvblZhbHVlTGlzdFBhcnNlUmVzdWx0LmVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2luZ1NlcnZpY2Uuc2hvd1dhcm5pbmdTbmFjaygnUGFyc2UgZXJyb3InKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGNvbXBhcmlzb25WYWx1ZUxpc3RQYXJzZVJlc3VsdC5jb21wYXJpc29uVmFsdWVMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdlbmVyYXRvci5hZGRDb21wYXJpc29uVmFsdWVMaXN0VmFsdWVJdGVtcyhcbiAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuY29tcGFyYXRvci52YWx1ZSxcbiAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuY29tcGFyaXNvblZhbHVlLmNvbnRyb2xzLmxpc3RWYWx1ZSxcbiAgICAgICAgICAgICAgY29tcGFyaXNvblZhbHVlTGlzdFBhcnNlUmVzdWx0LmNvbXBhcmlzb25WYWx1ZUxpc3QsXG4gICAgICAgICAgICAgIHRoaXMuZmVhdHVyZUZsYWdMaW1pdGF0aW9ucyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZm9ybUdlbmVyYXRvci5hZGRDb21wYXJpc29uVmFsdWVMaXN0VmFsdWVJdGVtcyhcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmNvbXBhcmF0b3IudmFsdWUsXG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5jb21wYXJpc29uVmFsdWUuY29udHJvbHMubGlzdFZhbHVlLFxuICAgICAgICAgICAgW3sgdmFsdWUgfV0sXG4gICAgICAgICAgICB0aGlzLmZlYXR1cmVGbGFnTGltaXRhdGlvbnMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHJlbW92ZShpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmNvbXBhcmlzb25WYWx1ZS5jb250cm9scy5saXN0VmFsdWUuY29udHJvbHMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmNvbXBhcmlzb25WYWx1ZS5jb250cm9scy5saXN0VmFsdWUudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuY29tcGFyaXNvblZhbHVlLmNvbnRyb2xzLmxpc3RWYWx1ZS5tYXJrQWxsQXNUb3VjaGVkKCk7XG4gICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5jb21wYXJpc29uVmFsdWUuY29udHJvbHMubGlzdFZhbHVlLm1hcmtBc0RpcnR5KCk7XG4gICAgfVxuICB9XG5cbiAgZWRpdChpbmRleDogbnVtYmVyLCBldmVudDogTWF0Q2hpcEVkaXRlZEV2ZW50KSB7XG4gICAgY29uc3QgdmFsdWUgPSBldmVudC52YWx1ZS50cmltKCk7XG5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9jb21wb25lbnRzL2lzc3Vlcy8yNjU4NCNpc3N1ZWNvbW1lbnQtMTY5OTQ2OTYwNVxuICAgIC8vIFRoZSBtYXQgY2hpcCBjb250cm9sIGRvZXMgbm90IHdvcmsgd2VsbCB3aXRoIGxvbmcgdmFsdWVzLiBUaGUgYmFzaWMgc2V0dXAgaXMgb3ZlcmZsb3c6IHZpc2libGUuXG4gICAgLy8gVGhlIG92ZXJmbG93OmhpZGRlbiwgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXMgaXMgc29sdmVkIGluIHRoZSBzdHlsZXMuc2NzczpcbiAgICAvLy5tZGMtZXZvbHV0aW9uLWNoaXAtc2V0IC5tZGMtZXZvbHV0aW9uLWNoaXAge1xuICAgIC8vICAubWRjLWV2b2x1dGlvbi1jaGlwX19jZWxsLS1wcmltYXJ5LFxuICAgIC8vICAubWRjLWV2b2x1dGlvbi1jaGlwX19hY3Rpb24tLXByaW1hcnksXG4gICAgLy8gIC5tYXQtbWRjLWNoaXAtYWN0aW9uLWxhYmVsIHtcbiAgICAvLyAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIC8vICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgLy8gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgLy8gIH1cbiAgICAvLyB9XG4gICAgLy8gXG4gICAgLy8gVGhpcyB3b3JrcyB0b3RhbGx5IGZpbmUgdW50aWwgeW91IGVkaXQgYSBjaGlwJ3MgdmFsdWUgdGhhdCBpcyBsb25nIChkb3VibGUgY2xpY2sgb24gaXQpIFxuICAgIC8vIGFuZCBlLmcuIGluc2VydCBhIGNoYXJhY3RlciB0byB0aGUgZW5kIG9mIHRoZSB2YWx1ZS5cbiAgICAvLyBBZnRlciBmb2N1c2luZyBvdXQgZnJvbSB0aGUgaW5wdXQsIHRoZSBvcmlnaW5hbCBjaGlwJ3MgdmFsdWUgaXMgc2hpZnRlZCBvciBldmVuIG1pc3NpbmcgaWYgdGhlIHRleHQgaXMgbG9uZyBlbm91Z2guIFxuICAgIC8vIElmIHdlIHNldCB0aGUgaW5wdXQncyB2YWx1ZSB0byAnJyBoZXJlLCB0aGUgc2hpZnRpbmcgaXMgc29sdmVkIGFuZCBldmVyeXRoaW5nIHdvcmtzIGFzIGV4cGVjdGVkXG4gICAgKGV2ZW50LmNoaXAgYXMgTWF0Q2hpcFJvdykuZGVmYXVsdEVkaXRJbnB1dD8uc2V0VmFsdWUoJycpO1xuXG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgdGhpcy5yZW1vdmUoaW5kZXgpO1xuICAgIH0gZWxzZSBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuY29tcGFyaXNvblZhbHVlLmNvbnRyb2xzLmxpc3RWYWx1ZS5jb250cm9sc1tpbmRleF0ucGF0Y2hWYWx1ZSh7IHZhbHVlIH0pO1xuICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuY29tcGFyaXNvblZhbHVlLmNvbnRyb2xzLmxpc3RWYWx1ZS5jb250cm9sc1tpbmRleF0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuY29tcGFyaXNvblZhbHVlLmNvbnRyb2xzLmxpc3RWYWx1ZS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5jb21wYXJpc29uVmFsdWUuY29udHJvbHMubGlzdFZhbHVlLm1hcmtBbGxBc1RvdWNoZWQoKTtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmNvbXBhcmlzb25WYWx1ZS5jb250cm9scy5saXN0VmFsdWUubWFya0FzRGlydHkoKTtcbiAgICB9XG4gIH1cblxuICBleHBhbmRUZXh0KCkge1xuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oUG9wb3V0VGV4dEVkaXRvckRpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgd2lkdGg6ICc4MDBweCcsXG4gICAgICBkYXRhOiA8UG9wb3V0VGV4dEVkaXRvckRpYWxvZ0RhdGE+e1xuICAgICAgICB2YWx1ZTogdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuY29tcGFyaXNvblZhbHVlLmNvbnRyb2xzLnN0cmluZ1ZhbHVlLnZhbHVlLFxuICAgICAgICByZWFkT25seTogdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuY29tcGFyaXNvblZhbHVlLmNvbnRyb2xzLnN0cmluZ1ZhbHVlLmRpc2FibGVkLFxuICAgICAgICB2YWxpZGF0b3JzOiB0aGlzLnJvbGxvdXRSdWxlQ29tcGFyYXRvclR5cGUgPT09IFVzZXJDb21wYXJhdG9yVHlwZS5TZW12ZXJcbiAgICAgICAgICA/IHRoaXMuZm9ybUdlbmVyYXRvci5nZXRDb21wYXJpc29uVmFsdWVTZW12ZXJWYWxpZGF0b3JzKHRoaXMuZmVhdHVyZUZsYWdMaW1pdGF0aW9ucylcbiAgICAgICAgICA6IHRoaXMuZm9ybUdlbmVyYXRvci5nZXRDb21wYXJpc29uVmFsdWVTdHJpbmdWYWxpZGF0b3JzKHRoaXMuZmVhdHVyZUZsYWdMaW1pdGF0aW9ucyksXG4gICAgICAgIG1heFZhbHVlTGVuZ3RoOiB0aGlzLmZlYXR1cmVGbGFnTGltaXRhdGlvbnMubWF4Q29tcGFyaXNvblZhbHVlTGVuZ3RoLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ01vZGlmeSB0aGUgdGV4dCB3aXRoaW4gdGhlIGVkaXRvciB0byBjaGFuZ2UgdGhlIGNvbXBhcmlzb24gdmFsdWUuIFRoZSBlZGl0b3Igc3VwcG9ydHMgSlNPTiBzeW50YXggaGlnaGxpZ2h0aW5nLidcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgIGlmIChkYXRhICYmIGRhdGEudmFsdWUgIT09IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmNvbXBhcmlzb25WYWx1ZS5jb250cm9scy5zdHJpbmdWYWx1ZS52YWx1ZSkge1xuICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5jb21wYXJpc29uVmFsdWUuY29udHJvbHMuc3RyaW5nVmFsdWUuc2V0VmFsdWUoZGF0YS52YWx1ZSk7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmNvbXBhcmlzb25WYWx1ZS5jb250cm9scy5zdHJpbmdWYWx1ZS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmNvbXBhcmlzb25WYWx1ZS5jb250cm9scy5zdHJpbmdWYWx1ZS5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmNvbXBhcmlzb25WYWx1ZS5jb250cm9scy5zdHJpbmdWYWx1ZS5tYXJrQXNEaXJ0eSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZXhwYW5kTGlzdCgpIHtcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFBvcG91dExpc3RFZGl0b3JEaWFsb2dDb21wb25lbnQsIHtcbiAgICAgIHdpZHRoOiAnNjcwcHgnLFxuICAgICAgZGF0YTogPFBvcG91dExpc3RFZGl0b3JEaWFsb2dEYXRhPntcbiAgICAgICAgY29tcGFyaXNvblZhbHVlTGlzdDogdGhpcy5nZXRSYXdWYWx1ZSgpLFxuICAgICAgICBjb21wYXJhdG9yOiB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5jb21wYXJhdG9yLnZhbHVlLFxuICAgICAgICBmZWF0dXJlRmxhZ0xpbWl0YXRpb25zOiB0aGlzLmZlYXR1cmVGbGFnTGltaXRhdGlvbnMsXG4gICAgICAgIHJlYWRPbmx5OiB0aGlzLnJlYWRPbmx5XG4gICAgICB9XG4gICAgfSk7XG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChkYXRhOiB7IGNvbXBhcmlzb25WYWx1ZUxpc3Q6IElDb21wYXJpc29uVmFsdWVMaXN0TW9kZWxbXSB9KSA9PiB7XG4gICAgICBpZiAoZGF0YT8uY29tcGFyaXNvblZhbHVlTGlzdCkge1xuICAgICAgICBjb25zdCBvbGRWYWx1ZSA9XG4gICAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuY29tcGFyaXNvblZhbHVlLmNvbnRyb2xzLmxpc3RWYWx1ZS52YWx1ZVxuICAgICAgICAgICAgLm1hcChsID0+IHsgcmV0dXJuIHsgdmFsdWU6IGwudmFsdWUsIGhpbnQ6IGwuaGludCB9OyB9KTtcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBkYXRhLmNvbXBhcmlzb25WYWx1ZUxpc3RcbiAgICAgICAgICAubWFwKGwgPT4geyByZXR1cm4geyB2YWx1ZTogbC52YWx1ZSwgaGludDogbC5oaW50IH07IH0pO1xuICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkob2xkVmFsdWUpID09PSBKU09OLnN0cmluZ2lmeShuZXdWYWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsaWRhdG9ycyA9XG4gICAgICAgICAgdGhpcy5mb3JtR2VuZXJhdG9yLmdldENvbXBhcmlzb25WYWx1ZVR5cGUodGhpcy5mb3JtR3JvdXAuY29udHJvbHMuY29tcGFyYXRvci52YWx1ZSkgPT09IFVzZXJDb21wYXJhdG9yVHlwZS5TZW12ZXJMaXN0XG4gICAgICAgICAgICA/IHRoaXMuZm9ybUdlbmVyYXRvci5nZXRDb21wYXJpc29uVmFsdWVTZW12ZXJMaXN0SXRlbVZhbGlkYXRvcnModGhpcy5mZWF0dXJlRmxhZ0xpbWl0YXRpb25zKVxuICAgICAgICAgICAgOiB0aGlzLmZvcm1HZW5lcmF0b3IuZ2V0Q29tcGFyaXNvblZhbHVlU3RyaW5nTGlzdEl0ZW1WYWxpZGF0b3JzKHRoaXMuZmVhdHVyZUZsYWdMaW1pdGF0aW9ucyk7XG4gICAgICAgIGNvbnN0IGZvcm1BcnJheSA9IHRoaXMuZm9ybUdlbmVyYXRvci5nZW5lcmF0ZUNvbXBhcmlzb25WYWx1ZUxpc3RWYWx1ZUFycmF5KGRhdGEuY29tcGFyaXNvblZhbHVlTGlzdCwgdGhpcy5yZWFkT25seSwgdGhpcy5mZWF0dXJlRmxhZ0xpbWl0YXRpb25zLCB2YWxpZGF0b3JzKTtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuY29tcGFyaXNvblZhbHVlLnNldENvbnRyb2woJ2xpc3RWYWx1ZScsIGZvcm1BcnJheSk7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmNvbXBhcmlzb25WYWx1ZS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmNvbXBhcmlzb25WYWx1ZS5tYXJrQWxsQXNUb3VjaGVkKCk7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmNvbXBhcmlzb25WYWx1ZS5tYXJrQXNEaXJ0eSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmVtb3ZlQWxsKCkge1xuICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmNvbXBhcmlzb25WYWx1ZS5jb250cm9scy5saXN0VmFsdWUuY29udHJvbHMuc3BsaWNlKDAsIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmNvbXBhcmlzb25WYWx1ZS5jb250cm9scy5saXN0VmFsdWUuY29udHJvbHMubGVuZ3RoKTtcbiAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5jb21wYXJpc29uVmFsdWUuY29udHJvbHMubGlzdFZhbHVlLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5jb21wYXJpc29uVmFsdWUuY29udHJvbHMubGlzdFZhbHVlLm1hcmtBbGxBc1RvdWNoZWQoKTtcbiAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5jb21wYXJpc29uVmFsdWUuY29udHJvbHMubGlzdFZhbHVlLm1hcmtBc0RpcnR5KCk7XG4gIH1cblxuICBjb3B5VmFsdWVzQXNDc3YoKSB7XG4gICAgdGhpcy5jb3B5VG9DbGlwYm9hcmQodGhpcy5jb21wYXJpc29uVmFsdWVMaXN0SGVscGVyLmZvcm1hdFZhbHVlc0FzQ3N2KHRoaXMuZ2V0UmF3VmFsdWUoKSkpO1xuICB9XG5cbiAgY29weVRvQ2xpcGJvYXJkKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuY2xpcGJvYXJkLmNvcHkodmFsdWUpO1xuICAgICAgICB0aGlzLm1lc3NhZ2luZ1NlcnZpY2Uuc2hvd1N1Y2Nlc3NTbmFjayhcIkNvcGllZCB0byBjbGlwYm9hcmQuXCIpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHRoaXMubWVzc2FnaW5nU2VydmljZS5zaG93U3VjY2Vzc1NuYWNrKFwiQ2xpcGJvYXJkIHVuYXZhaWxhYmxlLlwiKTtcbiAgICAgIH1cblxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1lc3NhZ2luZ1NlcnZpY2Uuc2hvd1dhcm5pbmdTbmFjayhcIk5vdGhpbmcgdG8gYmUgY29waWVkLlwiKTtcbiAgICB9XG4gIH1cblxuICBnZXRSYXdWYWx1ZSgpOiBJQ29tcGFyaXNvblZhbHVlTGlzdE1vZGVsW10ge1xuICAgIHJldHVybiB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5jb21wYXJpc29uVmFsdWUuY29udHJvbHMubGlzdFZhbHVlLnZhbHVlLm1hcCh2ID0+IHsgcmV0dXJuIHsgdmFsdWU6IHYudmFsdWUsIGhpbnQ6IHYuaGludCB9IH0pO1xuICB9XG5cbiAgaXNWYWx1ZUludmFsaWQobGlzdFZhbHVlSXRlbUNvbnRyb2w6IEZvcm1Hcm91cDxDb21wYXJpc29uVmFsdWVMaXN0Rm9ybT4pIHtcbiAgICByZXR1cm4gbGlzdFZhbHVlSXRlbUNvbnRyb2wuY29udHJvbHMudmFsdWUudG91Y2hlZCAmJiBsaXN0VmFsdWVJdGVtQ29udHJvbC5jb250cm9scy52YWx1ZS5pbnZhbGlkO1xuICB9XG5cbiAgaXNIaW50SW52YWxpZChsaXN0VmFsdWVJdGVtQ29udHJvbDogRm9ybUdyb3VwPENvbXBhcmlzb25WYWx1ZUxpc3RGb3JtPikge1xuICAgIHJldHVybiBsaXN0VmFsdWVJdGVtQ29udHJvbC5jb250cm9scy5oaW50LnRvdWNoZWQgJiYgbGlzdFZhbHVlSXRlbUNvbnRyb2wuY29udHJvbHMuaGludC5pbnZhbGlkO1xuICB9XG5cbiAgaXNMaXN0VmFsdWVJdGVtSW52YWxpZChsaXN0VmFsdWVJdGVtQ29udHJvbDogRm9ybUdyb3VwPENvbXBhcmlzb25WYWx1ZUxpc3RGb3JtPikge1xuICAgIHJldHVybiB0aGlzLmlzVmFsdWVJbnZhbGlkKGxpc3RWYWx1ZUl0ZW1Db250cm9sKSB8fCB0aGlzLmlzSGludEludmFsaWQobGlzdFZhbHVlSXRlbUNvbnRyb2wpO1xuICB9XG5cbiAgZ2V0TGlzdFZhbHVlSXRlbVRvb2x0aXBNZXNzYWdlKGxpc3RWYWx1ZUl0ZW1Db250cm9sOiBGb3JtR3JvdXA8Q29tcGFyaXNvblZhbHVlTGlzdEZvcm0+KSB7XG4gICAgaWYgKHRoaXMuaXNWYWx1ZUludmFsaWQobGlzdFZhbHVlSXRlbUNvbnRyb2wpKSB7XG4gICAgICByZXR1cm4gRm9ybUhlbHBlci5nZXRFcnJvck1lc3NhZ2UobGlzdFZhbHVlSXRlbUNvbnRyb2wuY29udHJvbHMudmFsdWUpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc0hpbnRJbnZhbGlkKGxpc3RWYWx1ZUl0ZW1Db250cm9sKSkge1xuICAgICAgcmV0dXJuIFwiSGludDpcIiArIEZvcm1IZWxwZXIuZ2V0RXJyb3JNZXNzYWdlKGxpc3RWYWx1ZUl0ZW1Db250cm9sLmNvbnRyb2xzLmhpbnQpO1xuICAgIH1cbiAgICBpZiAobGlzdFZhbHVlSXRlbUNvbnRyb2wuY29udHJvbHMuaGludC52YWx1ZSkge1xuICAgICAgcmV0dXJuIGxpc3RWYWx1ZUl0ZW1Db250cm9sLmNvbnRyb2xzLmhpbnQudmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBcIk5vIGhpbnRcIjtcbiAgfVxuXG4gIGNhbGNDb21wYXJhdG9ycyhyZXNldFZhbCA9IGZhbHNlKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmZvcm1Hcm91cC5jb250cm9scy5jb21wYXJpc29uQXR0cmlidXRlLnZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuYnVpbGRDb21wYXJhdG9yU3VnZ2VzdGlvbnMoZGVmYXVsdENvbXBhcmF0b3JJZHMsIHJlc2V0VmFsKTtcbiAgfVxuXG4gIGJ1aWxkQ29tcGFyYXRvclN1Z2dlc3Rpb25zKGlkczogbnVtYmVyW10sIHJlc2V0VmFsOiBib29sZWFuKTogdm9pZCB7XG4gICAgbGV0IGNvbXBzID0gaWRzLm1hcChpZCA9PiBhbGxDb21wYXJhdG9yc1tpZF0pO1xuICAgIGNvbnN0IHNlbGVjdGVkID0gYWxsQ29tcGFyYXRvcnMuZmluZCh2YWwgPT4gdmFsLnZhbHVlID09PSB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5jb21wYXJhdG9yLnZhbHVlKTtcbiAgICBpZiAocmVzZXRWYWwgJiYgIWlkcy5pbmNsdWRlcyhzZWxlY3RlZC5pbmRleCkgJiYgdGhpcy5pc051bGxDb21wVmFsKHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmNvbXBhcmlzb25WYWx1ZS52YWx1ZSkpIHtcbiAgICAgIHRoaXMuY29tcGFyYXRvckNoYW5nZWQoY29tcHNbMF0udmFsdWUpO1xuICAgIH0gZWxzZSBpZiAoIWlkcy5pbmNsdWRlcyhzZWxlY3RlZC5pbmRleCkpIHtcbiAgICAgIGlmIChzZWxlY3RlZC52YWx1ZSA9PT0gVXNlckNvbXBhcmF0b3IuQ29udGFpbnNBbnlPZiB8fCBzZWxlY3RlZC52YWx1ZSA9PT0gVXNlckNvbXBhcmF0b3IuRG9lc05vdENvbnRhaW5BbnlPZikge1xuICAgICAgICBjb21wcyA9IFthbGxDb21wYXJhdG9yc1syXSwgYWxsQ29tcGFyYXRvcnNbM10sIC4uLmNvbXBzXVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRHcm91cCA9IGFsbENvbXBhcmF0b3JzLmZpbHRlcih2YWwgPT4gdmFsLmdyb3VwID09PSBzZWxlY3RlZC5ncm91cCk7XG4gICAgICAgIGNvbXBzID0gWy4uLnNlbGVjdGVkR3JvdXAsIC4uLmNvbXBzXVxuICAgICAgfVxuICAgIH1cbiAgICBjb21wcyA9IHRoaXMuZGVkdXBDb21wcyhjb21wcyk7XG4gICAgdGhpcy5jb21wYXJhdG9yU3VnZ2VzdGlvbnMgPSBjb21wcy5yZWR1Y2UoKGVudHJ5TWFwLCBlKSA9PiBlbnRyeU1hcC5zZXQoZS5ncm91cCwgWy4uLmVudHJ5TWFwLmdldChlLmdyb3VwKSB8fCBbXSwgZV0pLCBuZXcgTWFwKCkpO1xuICAgIHRoaXMuY29tcGFyYXRvclNlcGFyYXRvciA9IHRoaXMuZ2VuU2VwYXJhdG9yKGNvbXBzKTtcbiAgfVxuXG4gIGRlZHVwQ29tcHMoY29tcHM6IElDb21wYXJhdG9yVmFsdWVbXSk6IElDb21wYXJhdG9yVmFsdWVbXSB7XG4gICAgY29uc3QgcmVzdWx0OiBJQ29tcGFyYXRvclZhbHVlW10gPSBbXTtcbiAgICBjb21wcy5mb3JFYWNoKHZhbCA9PiB7XG4gICAgICBpZiAoIXJlc3VsdC5maW5kKGUgPT4gZS5pbmRleCA9PT0gdmFsLmluZGV4KSkge1xuICAgICAgICByZXN1bHQucHVzaCh2YWwpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBnZW5TZXBhcmF0b3IoY29tcHM6IElDb21wYXJhdG9yVmFsdWVbXSk6IHN0cmluZyB7XG4gICAgbGV0IG1heCA9IDA7XG4gICAgY29tcHMuZm9yRWFjaCh2YWwgPT4ge1xuICAgICAgaWYgKHZhbC5sYWJlbC5sZW5ndGggPiBtYXgpIHtcbiAgICAgICAgbWF4ID0gdmFsLmxhYmVsLmxlbmd0aDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gQXJyYXkobWF4KS5qb2luKFwi4pSAXCIpO1xuICB9XG5cbiAgaXNOdW1iZXJBcnIodmFsOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB2YWwubGVuZ3RoID4gMCAmJiB2YWwuZXZlcnkoaXRlbSA9PiB0eXBlb2YgaXRlbSA9PT0gJ251bWJlcicpO1xuICB9XG5cbiAgaXNOdWxsQ29tcFZhbChjb21wVmFsOiBQYXJ0aWFsPHsgc3RyaW5nVmFsdWU/OiBzdHJpbmc7IGRvdWJsZVZhbHVlPzogbnVtYmVyOyBsaXN0VmFsdWU/OiBQYXJ0aWFsPHsgdmFsdWU6IHN0cmluZzsgaGludD86IHN0cmluZzsgaW5kZXg6IG51bWJlcjsgfT5bXTsgfT4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gIWNvbXBWYWwuZG91YmxlVmFsdWUgJiYgIWNvbXBWYWwubGlzdFZhbHVlICYmICFjb21wVmFsLnN0cmluZ1ZhbHVlO1xuICB9XG5cblxuICBpc0NsZWFyVGV4dENvbXBhcmF0b3IoY29tcGFyYXRvcjogVXNlckNvbXBhcmF0b3IpOiBib29sZWFuIHtcbiAgICBzd2l0Y2ggKGNvbXBhcmF0b3IpIHtcbiAgICAgIGNhc2UgVXNlckNvbXBhcmF0b3IuSXNPbmVPZjpcbiAgICAgIGNhc2UgVXNlckNvbXBhcmF0b3IuSXNOb3RPbmVPZjpcbiAgICAgIGNhc2UgVXNlckNvbXBhcmF0b3IuVGV4dFN0YXJ0c1dpdGhBbnlPZjpcbiAgICAgIGNhc2UgVXNlckNvbXBhcmF0b3IuVGV4dEVuZHNXaXRoQW55T2Y6XG4gICAgICBjYXNlIFVzZXJDb21wYXJhdG9yLlRleHROb3RTdGFydHNXaXRoQW55T2Y6XG4gICAgICBjYXNlIFVzZXJDb21wYXJhdG9yLlRleHROb3RFbmRzV2l0aEFueU9mOlxuICAgICAgY2FzZSBVc2VyQ29tcGFyYXRvci5BcnJheUNvbnRhaW5zQW55T2Y6XG4gICAgICBjYXNlIFVzZXJDb21wYXJhdG9yLkFycmF5RG9lc05vdENvbnRhaW5BbnlPZjpcbiAgICAgIGNhc2UgVXNlckNvbXBhcmF0b3IuQ29udGFpbnNBbnlPZjpcbiAgICAgIGNhc2UgVXNlckNvbXBhcmF0b3IuRG9lc05vdENvbnRhaW5BbnlPZjpcbiAgICAgIGNhc2UgVXNlckNvbXBhcmF0b3IuVGV4dEVxdWFsczpcbiAgICAgIGNhc2UgVXNlckNvbXBhcmF0b3IuVGV4dERvZXNOb3RFcXVhbDogcmV0dXJuIHRydWU7XG4gICAgICBkZWZhdWx0OiByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgb3BlbkNsZWFydGV4dEluZm9EaWFsb2coKSB7XG4gICAgdGhpcy5kaWFsb2cub3BlbihJbmZvRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICB3aWR0aDogJzYwMHB4JyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgdGl0bGU6IGBDb25zaWRlciB1c2luZyBjb25maWRlbnRpYWwgY29tcGFyYXRvcnNgLFxuICAgICAgICBib2R5OiBgQ29tcGFyaXNvbiB2YWx1ZSB3aWxsIGJlIHByZXNlbnRlZCBhcyBwbGFpbiB0ZXh0IFxuICAgICAgICBpbiB0aGUgPGk+Y29uZmlnIEpTT048L2k+LiBJZiB5b3UgaGF2ZSBzZW5zaXRpdmUgZGF0YSwgY29uc2lkZXIgdXNpbmcgb25lIG9mIHRoZSBjb25maWRlbnRpYWwgKGhhc2hlZCkgY29tcGFyYXRvcnMuPGJyLz48YnIvPlxuICAgICAgICBTZWUgdGhlIDxhIGhyZWY9XCJodHRwczovL2NvbmZpZ2NhdC5jb20vZG9jcy90YXJnZXRpbmcvdGFyZ2V0aW5nLXJ1bGUvdXNlci1jb25kaXRpb24vI2NvbmZpZGVudGlhbC10ZXh0LWNvbXBhcmF0b3JzXCIgdGFyZ2V0PVwiX2JsYW5rXCI+ZG9jdW1lbnRhdGlvbjwvYT4gZm9yIG1vcmUgaW5mb3JtYXRpb24uYCxcbiAgICAgICAgc2Vjb25kYXJ5QnV0dG9uTGFiZWw6ICdPcGVuIGNvbXBhcmF0b3Igc2VsZWN0b3InLFxuICAgICAgICBzZWNvbmRhcnlCdXR0b25BY3Rpb246ICgpID0+IHRoaXMuY29tcERpYWxvZygpXG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJ0YXJnZXRpbmctcnVsZS1saW5lIHNtYWxsZXN0LWZvcm0tZmllbGRcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZXhwbGFuYXRpb24td3JhcHBlclwiPlxuICAgICAgICA8YXBwLWNvbmRpdGlvbi1jaGlwIFt0YXJnZXRpbmdSdWxlSW5kZXhdPVwidGFyZ2V0aW5nUnVsZUluZGV4XCJcbiAgICAgICAgICAgIFtjb25kaXRpb25JbmRleF09XCJjb25kaXRpb25JbmRleFwiPjwvYXBwLWNvbmRpdGlvbi1jaGlwPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJleHBsYW5hdGlvblwiPjxhIGhyZWY9XCJodHRwczovL2NvbmZpZ2NhdC5jb20vZG9jcy90YXJnZXRpbmcvdGFyZ2V0aW5nLXJ1bGUvdXNlci1jb25kaXRpb24vXCJcbiAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCIgY2xhc3M9XCJ1c2VyLWxpbmtcIj51c2VyJ3M8L2E+PC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwid3JhcHBlci1ncm91cFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlci1ncm91cFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhcmdldGluZy1ydWxlLWNvbXBvbmVudCBwYWQtcmlnaHRcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnc21hbGwnOiBkZWZhdWx0Q29tcGFyaXNvbkF0dHJpYnV0ZXMuaW5kZXhPZihmb3JtR3JvdXAuY29udHJvbHMuY29tcGFyaXNvbkF0dHJpYnV0ZS52YWx1ZSkgPT09IC0xfVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBtYXROYXRpdmVDb250cm9sIChjaGFuZ2UpPVwiYXR0cmlidXRlQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtR3JvdXAuY29udHJvbHMuY29tcGFyaXNvbkF0dHJpYnV0ZS5kaXNhYmxlZFwiIG1hdFRvb2x0aXA9XCJDb21wYXJpc29uIGF0dHJpYnV0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgY29tcGFyaXNvbkF0dHJpYnV0ZSBvZiBkZWZhdWx0Q29tcGFyaXNvbkF0dHJpYnV0ZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZF09XCJjb21wYXJpc29uQXR0cmlidXRlID09PSBmb3JtR3JvdXAuY29udHJvbHMuY29tcGFyaXNvbkF0dHJpYnV0ZS52YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7Y29tcGFyaXNvbkF0dHJpYnV0ZX19PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkXT1cImRlZmF1bHRDb21wYXJpc29uQXR0cmlidXRlcy5pbmRleE9mKGZvcm1Hcm91cC5jb250cm9scy5jb21wYXJpc29uQXR0cmlidXRlLnZhbHVlKSA9PT0gLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFyZ2V0aW5nLXJ1bGUtY29tcG9uZW50IHBhZC1yaWdodCBzbWFsbFwiXG4gICAgICAgICAgICAgICAgW2hpZGRlbl09XCJkZWZhdWx0Q29tcGFyaXNvbkF0dHJpYnV0ZXMuaW5kZXhPZihmb3JtR3JvdXAuY29udHJvbHMuY29tcGFyaXNvbkF0dHJpYnV0ZS52YWx1ZSkgIT09IC0xXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgc3Vic2NyaXB0U2l6aW5nPVwiZHluYW1pY1wiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT1cInRleHRcIiAoYmx1cik9XCJjYWxjQ29tcGFyYXRvcnModHJ1ZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9scy5jb21wYXJpc29uQXR0cmlidXRlXCIgbWF0VG9vbHRpcD1cIkN1c3RvbSBjb21wYXJpc29uIGF0dHJpYnV0ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwiZm9ybUdyb3VwLmNvbnRyb2xzLmNvbXBhcmlzb25BdHRyaWJ1dGUuaW52YWxpZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3tGb3JtSGVscGVyLmdldEVycm9yTWVzc2FnZShmb3JtR3JvdXAuY29udHJvbHMuY29tcGFyaXNvbkF0dHJpYnV0ZSl9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0YXJnZXRpbmctcnVsZS1jb21wb25lbnQgcGFkLXJpZ2h0IGNvbXBhcmF0b3JcIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIj5cbiAgICAgICAgICAgICAgICA8c2VsZWN0IG1hdE5hdGl2ZUNvbnRyb2wgKGNoYW5nZSk9XCJjb21wYXJhdG9yQ2hhbmdlZChzZWxlY3RlZENvbXBhcmF0b3IpXCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZENvbXBhcmF0b3JcIiBbZGlzYWJsZWRdPVwicmVhZE9ubHlcIiBtYXRUb29sdGlwPVwiQ29tcGFyYXRvclwiPlxuICAgICAgICAgICAgICAgICAgICA8b3B0Z3JvdXAgKm5nRm9yPVwibGV0IGdyb3VwIG9mIGNvbXBhcmF0b3JTdWdnZXN0aW9ucyB8IGtleXZhbHVlOiBrZWVwT3JkZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIicmbmJzcDsnICsgZ3JvdXAua2V5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBjb21wYXJhdG9yIG9mIGdyb3VwLnZhbHVlXCIgW25nVmFsdWVdPVwiY29tcGFyYXRvci52YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7Y29tcGFyYXRvci5sYWJlbH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9vcHRncm91cD5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGdyb3VwIFtsYWJlbF09XCJjb21wYXJhdG9yU2VwYXJhdG9yXCI+PC9vcHRncm91cD5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInNob3dhbGxcIj4mbmJzcDsmbmJzcDtTSE9XIEFMTCBDT01QQVJBVE9SUyZuYnNwOyZuYnNwOzwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0U3VmZml4IGNsYXNzPVwiaW5wdXQtYnV0dG9uXCIgdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBtYXRUb29sdGlwPVwiQWxsIGNvbXBhcmF0b3JzXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbXBEaWFsb2coKVwiPjxtYXQtaWNvbj5saXN0X2FsdDwvbWF0LWljb24+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImZvcm1Hcm91cC5jb250cm9scy5jb21wYXJhdG9yLmludmFsaWRcIj5cbiAgICAgICAgICAgICAgICAgICAge3tGb3JtSGVscGVyLmdldEVycm9yTWVzc2FnZShmb3JtR3JvdXAuY29udHJvbHMuY29tcGFyYXRvcil9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwicm9sbG91dFJ1bGVDb21wYXJhdG9yVHlwZVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJSb2xsb3V0UnVsZUNvbXBhcmF0b3JWMlR5cGUuU3RyaW5nXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRleHRUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJSb2xsb3V0UnVsZUNvbXBhcmF0b3JWMlR5cGUuU2VtdmVyXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInNlbXZlclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIlJvbGxvdXRSdWxlQ29tcGFyYXRvclYyVHlwZS5TdHJpbmdMaXN0XCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxpc3RUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJSb2xsb3V0UnVsZUNvbXBhcmF0b3JWMlR5cGUuU2VtdmVyTGlzdFwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJsaXN0VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiUm9sbG91dFJ1bGVDb21wYXJhdG9yVjJUeXBlLk51bWJlclwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJudW1iZXJUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJSb2xsb3V0UnVsZUNvbXBhcmF0b3JWMlR5cGUuRGF0ZVRpbWVcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZGF0ZVRpbWVUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICN0ZXh0VGVtcGxhdGU+XG4gICAgPGRpdiAqbmdJZj1cImZvcm1Hcm91cC5jb250cm9scy5jb21wYXJpc29uVmFsdWUuY29udHJvbHMuc3RyaW5nVmFsdWVcIiBjbGFzcz1cInRhcmdldGluZy1ydWxlLWNvbXBvbmVudCBncm93XCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPVwidGV4dFwiIFtmb3JtQ29udHJvbF09XCJmb3JtR3JvdXAuY29udHJvbHMuY29tcGFyaXNvblZhbHVlLmNvbnRyb2xzLnN0cmluZ1ZhbHVlXCJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiQ29tcGFyaXNvbiB2YWx1ZSAodGV4dClcIiBwbGFjZWhvbGRlcj1cIkFkZCB0ZXh0IC4uLlwiIC8+XG4gICAgICAgICAgICA8YnV0dG9uIG1hdFByZWZpeCBjbGFzcz1cInByZWZpeC1idXR0b25cIiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uICpuZ0lmPVwiaXNDbGVhclRleHRDb21wYXJhdG9yU2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuQ2xlYXJ0ZXh0SW5mb0RpYWxvZygpXCJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiVGhpcyBjb21wYXJpc29uIHZhbHVlIHdvbid0IGJlIGhhc2hlZC4gQ2xpY2sgZm9yIG1vcmUgaW5mby5cIj48bWF0LWljb24+bG9ja19vcGVuX3JpZ2h0PC9tYXQtaWNvbj48L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gbWF0U3VmZml4IGNsYXNzPVwiaW5wdXQtYnV0dG9uXCIgdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBtYXRUb29sdGlwPVwiQWR2YW5jZWQgZWRpdG9yXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZXhwYW5kVGV4dCgpXCI+PG1hdC1pY29uPmVkaXRfbm90ZTwvbWF0LWljb24+PC9idXR0b24+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwiZm9ybUdyb3VwLmNvbnRyb2xzLmNvbXBhcmlzb25WYWx1ZS5jb250cm9scy5zdHJpbmdWYWx1ZS5pbnZhbGlkXCI+XG4gICAgICAgICAgICAgICAge3tGb3JtSGVscGVyLmdldEVycm9yTWVzc2FnZShmb3JtR3JvdXAuY29udHJvbHMuY29tcGFyaXNvblZhbHVlLmNvbnRyb2xzLnN0cmluZ1ZhbHVlKX19XG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cblxuPG5nLXRlbXBsYXRlICNzZW12ZXJUZW1wbGF0ZT5cbiAgICA8ZGl2ICpuZ0lmPVwiZm9ybUdyb3VwLmNvbnRyb2xzLmNvbXBhcmlzb25WYWx1ZS5jb250cm9scy5zdHJpbmdWYWx1ZVwiIGNsYXNzPVwidGFyZ2V0aW5nLXJ1bGUtY29tcG9uZW50IGdyb3dcIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgc3Vic2NyaXB0U2l6aW5nPVwiZHluYW1pY1wiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9XCJ0ZXh0XCIgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9scy5jb21wYXJpc29uVmFsdWUuY29udHJvbHMuc3RyaW5nVmFsdWVcIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJDb21wYXJpc29uIHZhbHVlIChzZW1hbnRpYyB2ZXJzaW9uKVwiIHBsYWNlaG9sZGVyPVwiQWRkIHNlbWFudGljIHZlcnNpb24gLi4uICgxLjIuMylcIiAvPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImZvcm1Hcm91cC5jb250cm9scy5jb21wYXJpc29uVmFsdWUuY29udHJvbHMuc3RyaW5nVmFsdWUuaW52YWxpZFwiPlxuICAgICAgICAgICAgICAgIHt7Rm9ybUhlbHBlci5nZXRFcnJvck1lc3NhZ2UoZm9ybUdyb3VwLmNvbnRyb2xzLmNvbXBhcmlzb25WYWx1ZS5jb250cm9scy5zdHJpbmdWYWx1ZSl9fVxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2xpc3RUZW1wbGF0ZT5cbiAgICA8ZGl2ICpuZ0lmPVwiZm9ybUdyb3VwLmNvbnRyb2xzLmNvbXBhcmlzb25WYWx1ZS5jb250cm9scy5saXN0VmFsdWVcIlxuICAgICAgICBjbGFzcz1cInRhcmdldGluZy1ydWxlLWNvbXBvbmVudCBncm93IHNtYWxsLWNoaXAtaW5wdXQgdG9wLWljb24tc3VmZml4XCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIj5cbiAgICAgICAgICAgIDxtYXQtY2hpcC1ncmlkICNjaGlwR3JpZCBbZm9ybUNvbnRyb2xdPVwiZmFrZUZvcm1Db250cm9sXCIgW2Vycm9yU3RhdGVNYXRjaGVyXT1cImVycm9yU3RhdGVNYXRjaGVyXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwLWNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBsaXN0VmFsdWVJdGVtIG9mIGZvcm1Hcm91cC5jb250cm9scy5jb21wYXJpc29uVmFsdWUuY29udHJvbHMubGlzdFZhbHVlLmNvbnRyb2xzIHwgc2xpY2U6MDoyMDsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cImdldExpc3RWYWx1ZUl0ZW1Ub29sdGlwTWVzc2FnZShsaXN0VmFsdWVJdGVtKVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWNoaXAtcm93IChyZW1vdmVkKT1cInJlbW92ZShpKVwiIFtkaXNhYmxlZF09XCJyZWFkT25seVwiIFtyZW1vdmFibGVdPVwiIXJlYWRPbmx5XCIgY2xhc3M9XCJjaGlwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtlZGl0YWJsZV09XCIhcmVhZE9ubHlcIiAoZWRpdGVkKT1cImVkaXQoaSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2ludmFsaWQnOiBpc0xpc3RWYWx1ZUl0ZW1JbnZhbGlkKGxpc3RWYWx1ZUl0ZW0pfVwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICB7e2xpc3RWYWx1ZUl0ZW0uY29udHJvbHMudmFsdWUudmFsdWV9fVxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXRDaGlwUmVtb3ZlICpuZ0lmPVwiIXJlYWRPbmx5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmNhbmNlbDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hpcC1yb3c+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNsYXNzPVwic2hvdy1hbGxcIiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmb3JtR3JvdXAuY29udHJvbHMuY29tcGFyaXNvblZhbHVlLmNvbnRyb2xzLmxpc3RWYWx1ZS5jb250cm9scy5sZW5ndGggPiAyMFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJleHBhbmRMaXN0KClcIj5cbiAgICAgICAgICAgICAgICAgICAgc2hvdyBhbGwge3tmb3JtR3JvdXAuY29udHJvbHMuY29tcGFyaXNvblZhbHVlLmNvbnRyb2xzLmxpc3RWYWx1ZS5jb250cm9scy5sZW5ndGh9fVxuICAgICAgICAgICAgICAgICAgICBpdGVtczwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBbZGlzYWJsZWRdPVwicmVhZE9ubHlcIiBbcGxhY2Vob2xkZXJdPVwiIXJlYWRPbmx5ID8gJ0FkZCBpdGVtIHRvIGxpc3QgLi4uJyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgW21hdENoaXBJbnB1dEZvcl09XCJjaGlwR3JpZFwiIFttYXRDaGlwSW5wdXRTZXBhcmF0b3JLZXlDb2Rlc109XCJzZXBhcmF0b3JLZXlzQ29kZXNcIlxuICAgICAgICAgICAgICAgICAgICBtYXRDaGlwSW5wdXRBZGRPbkJsdXIgKG1hdENoaXBJbnB1dFRva2VuRW5kKT1cImFkZCgkZXZlbnQpXCIgbWF0VG9vbHRpcD1cIkNvbXBhcmlzb24gdmFsdWVzIChsaXN0KVwiIC8+XG4gICAgICAgICAgICA8L21hdC1jaGlwLWdyaWQ+XG4gICAgICAgICAgICA8YnV0dG9uIG1hdEljb25QcmVmaXggY2xhc3M9XCJwcmVmaXgtYnV0dG9uXCIgdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiAqbmdJZj1cImlzQ2xlYXJUZXh0Q29tcGFyYXRvclNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkNsZWFydGV4dEluZm9EaWFsb2coKVwiXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIlRoaXMgY29tcGFyaXNvbiB2YWx1ZSB3b24ndCBiZSBoYXNoZWQuIENsaWNrIGZvciBtb3JlIGluZm8uXCI+PG1hdC1pY29uPmxvY2tfb3Blbl9yaWdodDwvbWF0LWljb24+PC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIG1hdEljb25TdWZmaXggY2xhc3M9XCJpbnB1dC1idXR0b25cIiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIG1hdFRvb2x0aXA9XCJNb3JlLi4uXCJcbiAgICAgICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwibW9yZU1lbnVcIj48bWF0LWljb24+bW9yZV92ZXJ0PC9tYXQtaWNvbj48L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gbWF0SWNvblN1ZmZpeCBjbGFzcz1cImlucHV0LWJ1dHRvblwiIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gbWF0VG9vbHRpcD1cIkFkdmFuY2VkIGVkaXRvclwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImV4cGFuZExpc3QoKVwiPjxtYXQtaWNvbj5lZGl0X25vdGU8L21hdC1pY29uPjwvYnV0dG9uPlxuICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZm9ybUdyb3VwLmNvbnRyb2xzLmNvbXBhcmlzb25WYWx1ZS5jb250cm9scy5saXN0VmFsdWUuaW52YWxpZCAmJiBmb3JtR3JvdXAuY29udHJvbHMuY29tcGFyaXNvblZhbHVlLmNvbnRyb2xzLmxpc3RWYWx1ZS5lcnJvcnNcIj5cbiAgICAgICAgICAgICAgICB7e0Zvcm1IZWxwZXIuZ2V0RXJyb3JNZXNzYWdlKGZvcm1Hcm91cC5jb250cm9scy5jb21wYXJpc29uVmFsdWUuY29udHJvbHMubGlzdFZhbHVlKX19XG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj1cImZvcm1Hcm91cC5jb250cm9scy5jb21wYXJpc29uVmFsdWUuY29udHJvbHMubGlzdFZhbHVlLmludmFsaWQgJiYgIWZvcm1Hcm91cC5jb250cm9scy5jb21wYXJpc29uVmFsdWUuY29udHJvbHMubGlzdFZhbHVlLmVycm9yc1wiPlxuICAgICAgICAgICAgICAgIEludmFsaWQgaXRlbXNcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNudW1iZXJUZW1wbGF0ZT5cbiAgICA8ZGl2ICpuZ0lmPVwiZm9ybUdyb3VwLmNvbnRyb2xzLmNvbXBhcmlzb25WYWx1ZS5jb250cm9scy5kb3VibGVWYWx1ZVwiIGNsYXNzPVwidGFyZ2V0aW5nLXJ1bGUtY29tcG9uZW50IGdyb3dcIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgc3Vic2NyaXB0U2l6aW5nPVwiZHluYW1pY1wiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9XCJudW1iZXJcIiBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzLmNvbXBhcmlzb25WYWx1ZS5jb250cm9scy5kb3VibGVWYWx1ZVwiXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkNvbXBhcmlzb24gdmFsdWUgKG51bWJlcilcIiBwbGFjZWhvbGRlcj1cIkFkZCBudW1iZXIgLi4uXCIgaW5wdXREaXNwbGF5Tm9ybWFsaXplciAvPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImZvcm1Hcm91cC5jb250cm9scy5jb21wYXJpc29uVmFsdWUuY29udHJvbHMuZG91YmxlVmFsdWUuaW52YWxpZFwiPlxuICAgICAgICAgICAgICAgIHt7Rm9ybUhlbHBlci5nZXRFcnJvck1lc3NhZ2UoZm9ybUdyb3VwLmNvbnRyb2xzLmNvbXBhcmlzb25WYWx1ZS5jb250cm9scy5kb3VibGVWYWx1ZSl9fVxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2RhdGVUaW1lVGVtcGxhdGU+XG4gICAgPGRpdiAqbmdJZj1cImZvcm1Hcm91cC5jb250cm9scy5jb21wYXJpc29uVmFsdWUuY29udHJvbHMuZG91YmxlVmFsdWVcIiBjbGFzcz1cInRhcmdldGluZy1ydWxlLWNvbXBvbmVudCBkYXRldGltZVwiPlxuICAgICAgICA8YXBwLWRhdGUtdGltZS1waWNrZXIgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9scy5jb21wYXJpc29uVmFsdWUuY29udHJvbHMuZG91YmxlVmFsdWVcIlxuICAgICAgICAgICAgZGF0ZVRvb2x0aXA9XCJDb21wYXJpc29uIHZhbHVlIChkYXRlKVwiIHRpbWVUb29sdGlwPVwiQ29tcGFyaXNvbiB2YWx1ZSAodGltZSlcIiAvPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuXG48bWF0LW1lbnUgI21vcmVNZW51PlxuICAgIDxhIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImV4cGFuZExpc3QoKVwiPjxtYXQtaWNvbj5lZGl0X25vdGU8L21hdC1pY29uPkFkdmFuY2VkIGVkaXRvcjwvYT5cbiAgICA8YSBtYXQtbWVudS1pdGVtIChjbGljayk9XCJjb3B5VmFsdWVzQXNDc3YoKVwiPjxtYXQtaWNvbj5jb250ZW50X2NvcHk8L21hdC1pY29uPkNvcHkgYXMgQ1NWICh2YWx1ZXMgb25seSk8L2E+XG4gICAgPGEgbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwicmVtb3ZlQWxsKClcIiBbZGlzYWJsZWRdPVwicmVhZE9ubHlcIj48bWF0LWljb24+ZGVsZXRlX291dGxpbmU8L21hdC1pY29uPlJlbW92ZVxuICAgICAgICBhbGw8L2E+XG48L21hdC1tZW51PiJdfQ==
@@ -56,10 +56,10 @@ export class PercentageOptionsComponent {
56
56
  getPercentageEvaluationAttribute() {
57
57
  return !this.percentageEvaluationAttribute ? 'Identifier' : this.percentageEvaluationAttribute;
58
58
  }
59
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PercentageOptionsComponent, deps: [{ token: i1.FormGenerator }], target: i0.ɵɵFactoryTarget.Component }); }
60
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: PercentageOptionsComponent, selector: "app-percentage-options", inputs: { formArray: "formArray", flagState: "flagState", featureFlagLimitations: "featureFlagLimitations", showPercentageEvaluationAttribute: "showPercentageEvaluationAttribute", percentageEvaluationAttribute: "percentageEvaluationAttribute", isPercentageOnlyTargetingRule: "isPercentageOnlyTargetingRule" }, outputs: { lastPercentageOptionLeft: "lastPercentageOptionLeft", subscriptionLimitReached: "subscriptionLimitReached", changePercentageEvaluationAttributeRequested: "changePercentageEvaluationAttributeRequested" }, ngImport: i0, template: "<div *ngFor=\"let percentageOption of formArray.controls; let i = index\" class=\"targeting-rule-line smallest-form-field\">\n <div class=\"wrapper-group\">\n <div class=\"targeting-rule-component flex\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\" class=\"perc-input\">\n <input matInput type=\"number\" [formControl]=\"percentageOption.controls.percentage\" min=\"0\" max=\"100\"\n (input)=\"percentageChanged(i)\" matTooltip=\"Percentage\"\n digitOnly inputDisplayNormalizer>\n <span matTextSuffix>%</span>\n <mat-error *ngIf=\"percentageOption.controls.percentage.invalid\">\n {{FormHelper.getErrorMessage(percentageOption.controls.percentage)}}\n </mat-error>\n </mat-form-field>\n </div>\n <div *ngIf=\"!showPercentageEvaluationAttribute\" class=\"attribute-wrapper flex\"> of&nbsp;<a\n href=\"https://configcat.com/docs/targeting/percentage-options/\" target=\"_blank\"\n rel=\"noopener noreferrer\">users</a>\n </div>\n <div *ngIf=\"showPercentageEvaluationAttribute\" class=\"attribute-wrapper wrapper-group flex\">\n <div class=\"small-pad-right\">of all</div>\n <div class=\"small-pad-right\">\n <button mat-flat-button type=\"button\" [disabled]=\"flagState.readOnly\" class=\"attribute\"\n matTooltip=\"Change percentage evaluation attribute\"\n (click)=\"changePercentageEvaluationAttribute()\">{{getPercentageEvaluationAttribute()}}</button>\n </div>\n <div>attributes</div>\n </div>\n <div class=\"delete-button\" *ngIf=\"!flagState.readOnly\">\n <button type=\"button\" mat-icon-button matTooltip=\"Remove option\" (click)=\"remove(i)\">\n <mat-icon>cancel</mat-icon>\n </button>\n </div>\n </div>\n\n <app-feature-flag-value class=\"value\" [flagState]=\"flagState\" tooltip=\"Served value\"\n [formGroup]=\"percentageOption.controls.value\"\n [featureFlagLimitations]=\"featureFlagLimitations\"></app-feature-flag-value>\n</div>\n<mat-error *ngIf=\"formArray.invalid && !!FormHelper.getErrorMessage(formArray)\" class=\"sumerror\">\n {{FormHelper.getErrorMessage(formArray)}}\n</mat-error>\n<div class=\"small small-pad-bottom\" style=\"opacity: .6;\"\n *ngIf=\"showPercentageEvaluationAttribute && isPercentageOnlyTargetingRule\">\n If the {{getPercentageEvaluationAttribute()}} attribute is not set in the\n <a href=\"https://configcat.com/docs/targeting/user-object/\" target=\"_blank\" rel=\"noopener noreferrer\">User\n Object</a>, the percentage options are skipped and the evaluation continues with the next rule.\n</div>\n<div class=\"small small-pad-bottom\" style=\"opacity: .6;\"\n *ngIf=\"showPercentageEvaluationAttribute && !isPercentageOnlyTargetingRule\">\n If the {{getPercentageEvaluationAttribute()}} attribute is not set in the\n <a href=\"https://configcat.com/docs/targeting/user-object/\" target=\"_blank\" rel=\"noopener noreferrer\">User\n Object</a>, the current targeting rule is skipped and the evaluation continues with the next one.\n</div>\n\n<div class=\"add-perc\" *ngIf=\"flagState.settingValue.setting.settingType !== SettingType.Boolean && !flagState.readOnly\">\n <div class=\"enter-sign\"><mat-icon>subdirectory_arrow_right</mat-icon></div>\n <div (click)=\"addOption()\" class=\"add-btn add-perc-btn\">+ % OPTION</div>\n</div>", styles: [".targeting-rule-line{display:flex;flex-wrap:wrap;margin:2px 0}.targeting-rule-line .wrapper-group{display:flex;flex-wrap:wrap}.targeting-rule-line .wrapper-group.grow{flex-grow:1}.targeting-rule-component{margin:2px 0;width:212px}.targeting-rule-component[hidden]{display:none}.targeting-rule-component.small{width:102px}.targeting-rule-component.grow{flex-grow:1}.targeting-rule-component.pad-right{margin-right:8px}.targeting-rule-component mat-form-field{width:100%;font-size:12px}.delete-button{margin-top:4px;color:#b1b1b1}.delete-button mat-icon{font-size:18px;height:18px;width:18px}.explanation-wrapper{display:flex;margin-top:2px}.explanation-wrapper .explanation{min-width:44px;margin-top:6px;margin-right:8px}@media (max-width: 500px){.targeting-rule-component{max-width:calc(100% - 4px);width:160px}.targeting-rule-component.small{width:78px}.targeting-rule-component.pad-right{margin-right:4px}}\n", ".targeting-rule-line{--mdc-text-button-container-height: 24px;--mdc-filled-button-container-height: 24px;--mdc-protected-button-container-height: 24px;--mdc-outlined-button-container-height: 24px;--mat-text-button-touch-target-display: none;--mat-filled-button-touch-target-display: none;--mat-protected-button-touch-target-display: none;--mat-outlined-button-touch-target-display: none;--mat-icon-button-touch-target-display: none;align-items:center}.targeting-rule-line .mat-mdc-icon-button.mat-mdc-button-base{--mdc-icon-button-state-layer-size: 32px;width:var(--mdc-icon-button-state-layer-size);height:var(--mdc-icon-button-state-layer-size);padding:4px}.targeting-rule-line .flex{display:flex;align-items:center;margin-right:4px}.targeting-rule-line .targeting-rule-component{max-width:84px}.targeting-rule-line .value{flex-grow:1}.targeting-rule-line .perc-input{margin-right:5px}.add-perc{display:flex;width:100%;padding-top:5px}.add-perc .enter-sign{color:#ccc;margin:2px 3px 0 8px}.add-perc .enter-sign mat-icon{font-size:16px;width:16px;height:16px}.add-perc .add-perc-btn{min-width:63px;padding:3px 4px 2px 8px}.sumerror{margin-bottom:8px;font-size:12px}.small{font-size:.7rem}.attribute-wrapper{color:#585858}.attribute{border:1px solid #c9c9c9;background-color:#fcfcfc;text-transform:none;color:#585858;font-size:12px;padding:0 5px}.small-pad-right{margin-right:5px}.small-pad-bottom{margin-bottom:5px}.delete-button{margin-top:3px}\n", ".chip-container{display:flex;margin-top:2px;align-self:start}.chip-container.fixed-width{width:110px}.chip-container.fixed-width-wide{width:130px}.chip-container mat-chip-set{margin-top:2px;width:100%}.chip-container mat-chip-set mat-chip{width:100%;margin-top:0;margin-bottom:0;height:24px;font-size:12px;background-color:#d1e3fa;opacity:1}.chip-container .add-btn mat-chip{background-color:transparent;border:1px dashed #afaeae;color:#afaeae;cursor:pointer}.chip-container .enter-sign{color:#ccc;margin:6px 3px 0 8px}.chip-container .enter-sign mat-icon{font-size:16px;width:16px;height:16px}\n", ".add-btn{cursor:pointer;background-color:transparent;display:flex;font-size:10px;align-items:center;border:1px dashed rgb(168,168,168);color:#979797;border-radius:15px}.add-btn:hover{background-color:#ebebeb}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i3.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i4.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i8.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i9.InputDisplayNormalizerDirective, selector: "input[inputDisplayNormalizer]" }, { kind: "component", type: i10.FeatureFlagValueComponent, selector: "app-feature-flag-value", inputs: ["formGroup", "flagState", "featureFlagLimitations", "isPrerequisite", "tooltip"] }] }); }
59
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PercentageOptionsComponent, deps: [{ token: i1.FormGenerator }], target: i0.ɵɵFactoryTarget.Component }); }
60
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: PercentageOptionsComponent, selector: "app-percentage-options", inputs: { formArray: "formArray", flagState: "flagState", featureFlagLimitations: "featureFlagLimitations", showPercentageEvaluationAttribute: "showPercentageEvaluationAttribute", percentageEvaluationAttribute: "percentageEvaluationAttribute", isPercentageOnlyTargetingRule: "isPercentageOnlyTargetingRule" }, outputs: { lastPercentageOptionLeft: "lastPercentageOptionLeft", subscriptionLimitReached: "subscriptionLimitReached", changePercentageEvaluationAttributeRequested: "changePercentageEvaluationAttributeRequested" }, ngImport: i0, template: "<div *ngFor=\"let percentageOption of formArray.controls; let i = index\" class=\"targeting-rule-line smallest-form-field\">\n <div class=\"wrapper-group\">\n <div class=\"targeting-rule-component flex\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\" class=\"perc-input\">\n <input matInput type=\"number\" [formControl]=\"percentageOption.controls.percentage\" min=\"0\" max=\"100\"\n (input)=\"percentageChanged(i)\" matTooltip=\"Percentage\"\n digitOnly inputDisplayNormalizer>\n <span matTextSuffix>%</span>\n <mat-error *ngIf=\"percentageOption.controls.percentage.invalid\">\n {{FormHelper.getErrorMessage(percentageOption.controls.percentage)}}\n </mat-error>\n </mat-form-field>\n </div>\n <div *ngIf=\"!showPercentageEvaluationAttribute\" class=\"attribute-wrapper flex\"> of&nbsp;<a\n href=\"https://configcat.com/docs/targeting/percentage-options/\" target=\"_blank\"\n rel=\"noopener noreferrer\">users</a>\n </div>\n <div *ngIf=\"showPercentageEvaluationAttribute\" class=\"attribute-wrapper wrapper-group flex\">\n <div class=\"small-pad-right\">of all</div>\n <div class=\"small-pad-right\">\n <button mat-flat-button type=\"button\" [disabled]=\"flagState.readOnly\" class=\"attribute\"\n matTooltip=\"Change percentage evaluation attribute\"\n (click)=\"changePercentageEvaluationAttribute()\">{{getPercentageEvaluationAttribute()}}</button>\n </div>\n <div>attributes</div>\n </div>\n <div class=\"delete-button\" *ngIf=\"!flagState.readOnly\">\n <button type=\"button\" mat-icon-button matTooltip=\"Remove option\" (click)=\"remove(i)\">\n <mat-icon>cancel</mat-icon>\n </button>\n </div>\n </div>\n\n <app-feature-flag-value class=\"value\" [flagState]=\"flagState\" tooltip=\"Served value\"\n [formGroup]=\"percentageOption.controls.value\"\n [featureFlagLimitations]=\"featureFlagLimitations\"></app-feature-flag-value>\n</div>\n<mat-error *ngIf=\"formArray.invalid && !!FormHelper.getErrorMessage(formArray)\" class=\"sumerror\">\n {{FormHelper.getErrorMessage(formArray)}}\n</mat-error>\n<div class=\"small small-pad-bottom\" style=\"opacity: .6;\"\n *ngIf=\"showPercentageEvaluationAttribute && isPercentageOnlyTargetingRule\">\n If the {{getPercentageEvaluationAttribute()}} attribute is not set in the\n <a href=\"https://configcat.com/docs/targeting/user-object/\" target=\"_blank\" rel=\"noopener noreferrer\">User\n Object</a>, the percentage options are skipped and the evaluation continues with the next rule.\n</div>\n<div class=\"small small-pad-bottom\" style=\"opacity: .6;\"\n *ngIf=\"showPercentageEvaluationAttribute && !isPercentageOnlyTargetingRule\">\n If the {{getPercentageEvaluationAttribute()}} attribute is not set in the\n <a href=\"https://configcat.com/docs/targeting/user-object/\" target=\"_blank\" rel=\"noopener noreferrer\">User\n Object</a>, the current targeting rule is skipped and the evaluation continues with the next one.\n</div>\n\n<div class=\"add-perc\" *ngIf=\"flagState.settingValue.setting.settingType !== SettingType.Boolean && !flagState.readOnly\">\n <div class=\"enter-sign\"><mat-icon>subdirectory_arrow_right</mat-icon></div>\n <div (click)=\"addOption()\" class=\"add-btn add-perc-btn\">+ % OPTION</div>\n</div>", styles: [".targeting-rule-line{display:flex;flex-wrap:wrap;margin:2px 0}.targeting-rule-line .wrapper-group{display:flex;flex-wrap:wrap}.targeting-rule-line .wrapper-group.grow{flex-grow:1}.targeting-rule-component{margin:2px 0;width:212px}.targeting-rule-component[hidden]{display:none}.targeting-rule-component.small{width:102px}.targeting-rule-component.grow{flex-grow:1}.targeting-rule-component.pad-right{margin-right:8px}.targeting-rule-component mat-form-field{width:100%;font-size:12px}.delete-button{margin-top:4px;color:#b1b1b1}.delete-button mat-icon{font-size:18px;height:18px;width:18px}.explanation-wrapper{display:flex;margin-top:2px}.explanation-wrapper .explanation{min-width:44px;margin-top:6px;margin-right:8px}@media (max-width: 500px){.targeting-rule-component{max-width:calc(100% - 4px);width:160px}.targeting-rule-component.small{width:78px}.targeting-rule-component.pad-right{margin-right:4px}}\n", ".targeting-rule-line{--mdc-text-button-container-height: 24px;--mdc-filled-button-container-height: 24px;--mdc-protected-button-container-height: 24px;--mdc-outlined-button-container-height: 24px;--mat-text-button-touch-target-display: none;--mat-filled-button-touch-target-display: none;--mat-protected-button-touch-target-display: none;--mat-outlined-button-touch-target-display: none;--mat-icon-button-touch-target-display: none;align-items:center}.targeting-rule-line .mat-mdc-icon-button.mat-mdc-button-base{--mdc-icon-button-state-layer-size: 32px;width:var(--mdc-icon-button-state-layer-size);height:var(--mdc-icon-button-state-layer-size);padding:4px}.targeting-rule-line .flex{display:flex;align-items:center;margin-right:4px}.targeting-rule-line .targeting-rule-component{max-width:84px}.targeting-rule-line .value{flex-grow:1}.targeting-rule-line .perc-input{margin-right:5px}.add-perc{display:flex;width:100%;padding-top:5px}.add-perc .enter-sign{color:#ccc;margin:2px 3px 0 8px}.add-perc .enter-sign mat-icon{font-size:16px;width:16px;height:16px}.add-perc .add-perc-btn{min-width:63px;padding:3px 4px 2px 8px}.sumerror{margin-bottom:8px;font-size:12px}.small{font-size:.7rem}.attribute-wrapper{color:#585858}.attribute{border:1px solid #c9c9c9;background-color:#fcfcfc;text-transform:none;color:#585858;font-size:12px;padding:0 5px}.small-pad-right{margin-right:5px}.small-pad-bottom{margin-bottom:5px}.delete-button{margin-top:3px}\n", ".chip-container{display:flex;margin-top:2px;align-self:start}.chip-container.fixed-width{width:110px}.chip-container.fixed-width-wide{width:130px}.chip-container mat-chip-set{margin-top:2px;width:100%}.chip-container mat-chip-set mat-chip{width:100%;margin-top:0;margin-bottom:0;height:24px;font-size:12px;background-color:#d1e3fa;opacity:1}.chip-container .add-btn mat-chip{background-color:transparent;border:1px dashed #afaeae;color:#afaeae;cursor:pointer}.chip-container .enter-sign{color:#ccc;margin:6px 3px 0 8px}.chip-container .enter-sign mat-icon{font-size:16px;width:16px;height:16px}\n", ".add-btn{cursor:pointer;background-color:transparent;display:flex;font-size:10px;align-items:center;border:1px dashed rgb(168,168,168);color:#979797;border-radius:15px}.add-btn:hover{background-color:#ebebeb}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i3.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i4.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i8.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i9.InputDisplayNormalizerDirective, selector: "input[inputDisplayNormalizer]" }, { kind: "component", type: i10.FeatureFlagValueComponent, selector: "app-feature-flag-value", inputs: ["formGroup", "flagState", "featureFlagLimitations", "isPrerequisite", "tooltip"] }] }); }
61
61
  }
62
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: PercentageOptionsComponent, decorators: [{
62
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PercentageOptionsComponent, decorators: [{
63
63
  type: Component,
64
64
  args: [{ selector: 'app-percentage-options', template: "<div *ngFor=\"let percentageOption of formArray.controls; let i = index\" class=\"targeting-rule-line smallest-form-field\">\n <div class=\"wrapper-group\">\n <div class=\"targeting-rule-component flex\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\" class=\"perc-input\">\n <input matInput type=\"number\" [formControl]=\"percentageOption.controls.percentage\" min=\"0\" max=\"100\"\n (input)=\"percentageChanged(i)\" matTooltip=\"Percentage\"\n digitOnly inputDisplayNormalizer>\n <span matTextSuffix>%</span>\n <mat-error *ngIf=\"percentageOption.controls.percentage.invalid\">\n {{FormHelper.getErrorMessage(percentageOption.controls.percentage)}}\n </mat-error>\n </mat-form-field>\n </div>\n <div *ngIf=\"!showPercentageEvaluationAttribute\" class=\"attribute-wrapper flex\"> of&nbsp;<a\n href=\"https://configcat.com/docs/targeting/percentage-options/\" target=\"_blank\"\n rel=\"noopener noreferrer\">users</a>\n </div>\n <div *ngIf=\"showPercentageEvaluationAttribute\" class=\"attribute-wrapper wrapper-group flex\">\n <div class=\"small-pad-right\">of all</div>\n <div class=\"small-pad-right\">\n <button mat-flat-button type=\"button\" [disabled]=\"flagState.readOnly\" class=\"attribute\"\n matTooltip=\"Change percentage evaluation attribute\"\n (click)=\"changePercentageEvaluationAttribute()\">{{getPercentageEvaluationAttribute()}}</button>\n </div>\n <div>attributes</div>\n </div>\n <div class=\"delete-button\" *ngIf=\"!flagState.readOnly\">\n <button type=\"button\" mat-icon-button matTooltip=\"Remove option\" (click)=\"remove(i)\">\n <mat-icon>cancel</mat-icon>\n </button>\n </div>\n </div>\n\n <app-feature-flag-value class=\"value\" [flagState]=\"flagState\" tooltip=\"Served value\"\n [formGroup]=\"percentageOption.controls.value\"\n [featureFlagLimitations]=\"featureFlagLimitations\"></app-feature-flag-value>\n</div>\n<mat-error *ngIf=\"formArray.invalid && !!FormHelper.getErrorMessage(formArray)\" class=\"sumerror\">\n {{FormHelper.getErrorMessage(formArray)}}\n</mat-error>\n<div class=\"small small-pad-bottom\" style=\"opacity: .6;\"\n *ngIf=\"showPercentageEvaluationAttribute && isPercentageOnlyTargetingRule\">\n If the {{getPercentageEvaluationAttribute()}} attribute is not set in the\n <a href=\"https://configcat.com/docs/targeting/user-object/\" target=\"_blank\" rel=\"noopener noreferrer\">User\n Object</a>, the percentage options are skipped and the evaluation continues with the next rule.\n</div>\n<div class=\"small small-pad-bottom\" style=\"opacity: .6;\"\n *ngIf=\"showPercentageEvaluationAttribute && !isPercentageOnlyTargetingRule\">\n If the {{getPercentageEvaluationAttribute()}} attribute is not set in the\n <a href=\"https://configcat.com/docs/targeting/user-object/\" target=\"_blank\" rel=\"noopener noreferrer\">User\n Object</a>, the current targeting rule is skipped and the evaluation continues with the next one.\n</div>\n\n<div class=\"add-perc\" *ngIf=\"flagState.settingValue.setting.settingType !== SettingType.Boolean && !flagState.readOnly\">\n <div class=\"enter-sign\"><mat-icon>subdirectory_arrow_right</mat-icon></div>\n <div (click)=\"addOption()\" class=\"add-btn add-perc-btn\">+ % OPTION</div>\n</div>", styles: [".targeting-rule-line{display:flex;flex-wrap:wrap;margin:2px 0}.targeting-rule-line .wrapper-group{display:flex;flex-wrap:wrap}.targeting-rule-line .wrapper-group.grow{flex-grow:1}.targeting-rule-component{margin:2px 0;width:212px}.targeting-rule-component[hidden]{display:none}.targeting-rule-component.small{width:102px}.targeting-rule-component.grow{flex-grow:1}.targeting-rule-component.pad-right{margin-right:8px}.targeting-rule-component mat-form-field{width:100%;font-size:12px}.delete-button{margin-top:4px;color:#b1b1b1}.delete-button mat-icon{font-size:18px;height:18px;width:18px}.explanation-wrapper{display:flex;margin-top:2px}.explanation-wrapper .explanation{min-width:44px;margin-top:6px;margin-right:8px}@media (max-width: 500px){.targeting-rule-component{max-width:calc(100% - 4px);width:160px}.targeting-rule-component.small{width:78px}.targeting-rule-component.pad-right{margin-right:4px}}\n", ".targeting-rule-line{--mdc-text-button-container-height: 24px;--mdc-filled-button-container-height: 24px;--mdc-protected-button-container-height: 24px;--mdc-outlined-button-container-height: 24px;--mat-text-button-touch-target-display: none;--mat-filled-button-touch-target-display: none;--mat-protected-button-touch-target-display: none;--mat-outlined-button-touch-target-display: none;--mat-icon-button-touch-target-display: none;align-items:center}.targeting-rule-line .mat-mdc-icon-button.mat-mdc-button-base{--mdc-icon-button-state-layer-size: 32px;width:var(--mdc-icon-button-state-layer-size);height:var(--mdc-icon-button-state-layer-size);padding:4px}.targeting-rule-line .flex{display:flex;align-items:center;margin-right:4px}.targeting-rule-line .targeting-rule-component{max-width:84px}.targeting-rule-line .value{flex-grow:1}.targeting-rule-line .perc-input{margin-right:5px}.add-perc{display:flex;width:100%;padding-top:5px}.add-perc .enter-sign{color:#ccc;margin:2px 3px 0 8px}.add-perc .enter-sign mat-icon{font-size:16px;width:16px;height:16px}.add-perc .add-perc-btn{min-width:63px;padding:3px 4px 2px 8px}.sumerror{margin-bottom:8px;font-size:12px}.small{font-size:.7rem}.attribute-wrapper{color:#585858}.attribute{border:1px solid #c9c9c9;background-color:#fcfcfc;text-transform:none;color:#585858;font-size:12px;padding:0 5px}.small-pad-right{margin-right:5px}.small-pad-bottom{margin-bottom:5px}.delete-button{margin-top:3px}\n", ".chip-container{display:flex;margin-top:2px;align-self:start}.chip-container.fixed-width{width:110px}.chip-container.fixed-width-wide{width:130px}.chip-container mat-chip-set{margin-top:2px;width:100%}.chip-container mat-chip-set mat-chip{width:100%;margin-top:0;margin-bottom:0;height:24px;font-size:12px;background-color:#d1e3fa;opacity:1}.chip-container .add-btn mat-chip{background-color:transparent;border:1px dashed #afaeae;color:#afaeae;cursor:pointer}.chip-container .enter-sign{color:#ccc;margin:6px 3px 0 8px}.chip-container .enter-sign mat-icon{font-size:16px;width:16px;height:16px}\n", ".add-btn{cursor:pointer;background-color:transparent;display:flex;font-size:10px;align-items:center;border:1px dashed rgb(168,168,168);color:#979797;border-radius:15px}.add-btn:hover{background-color:#ebebeb}\n"] }]
65
65
  }], ctorParameters: () => [{ type: i1.FormGenerator }], propDecorators: { formArray: [{
@@ -81,4 +81,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
81
81
  }], changePercentageEvaluationAttributeRequested: [{
82
82
  type: Output
83
83
  }] } });
84
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyY2VudGFnZS1vcHRpb25zLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWNvbmZpZ2NhdC1wdWJsaWNhcGktdWkvc3JjL2xpYi92Mi9mZWF0dXJlLWZsYWcvZXZhbHVhdGlvbi1mb3JtdWxhL3RhcmdldGluZy1ydWxlL3BlcmNlbnRhZ2Utb3B0aW9ucy9wZXJjZW50YWdlLW9wdGlvbnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctY29uZmlnY2F0LXB1YmxpY2FwaS11aS9zcmMvbGliL3YyL2ZlYXR1cmUtZmxhZy9ldmFsdWF0aW9uLWZvcm11bGEvdGFyZ2V0aW5nLXJ1bGUvcGVyY2VudGFnZS1vcHRpb25zL3BlcmNlbnRhZ2Utb3B0aW9ucy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXZFLE9BQU8sRUFDTCxVQUFVLEVBQzJCLFdBQVcsRUFDakQsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7Ozs7O0FBWWxDLE1BQU0sT0FBTywwQkFBMEI7SUFlckMsWUFBb0IsYUFBNEI7UUFBNUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFQdEMsNkJBQXdCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUM5Qyw2QkFBd0IsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzlDLGlEQUE0QyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFNUUsZ0JBQVcsR0FBRyxXQUFXLENBQUM7UUFDMUIsZUFBVSxHQUFHLFVBQVUsQ0FBQztJQUU0QixDQUFDO0lBRXJELFNBQVM7UUFDUCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1lBQ2xGLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNyQyxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsaUNBQWlDLENBQUM7WUFDdkUsVUFBVSxFQUFFLENBQUM7WUFDYixLQUFLLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO1NBQ2hHLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQTtRQUN4RixJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBYTtRQUNsQixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzdCLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3ZDLENBQUM7SUFDSCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsS0FBYTtRQUM3QixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDeEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakUsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxHQUFHLEVBQUUsQ0FBQztZQUMxRCxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuRSxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDekMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVO2lCQUNuRCxRQUFRLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNyRSxDQUFDO0lBQ0gsQ0FBQztJQUVELG1DQUFtQztRQUNqQyxJQUFJLENBQUMsNENBQTRDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDM0QsQ0FBQztJQUVELGdDQUFnQztRQUM5QixPQUFPLENBQUMsSUFBSSxDQUFDLDZCQUE2QixDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQztJQUNqRyxDQUFDOzhHQXpEVSwwQkFBMEI7a0dBQTFCLDBCQUEwQiwya0JDakJ2QyxrakhBd0RNOzsyRkR2Q08sMEJBQTBCO2tCQVZ0QyxTQUFTOytCQUNFLHdCQUF3QjtrRkFVekIsU0FBUztzQkFBakIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFDRyxpQ0FBaUM7c0JBQXpDLEtBQUs7Z0JBQ0csNkJBQTZCO3NCQUFyQyxLQUFLO2dCQUNHLDZCQUE2QjtzQkFBckMsS0FBSztnQkFFSSx3QkFBd0I7c0JBQWpDLE1BQU07Z0JBQ0csd0JBQXdCO3NCQUFqQyxNQUFNO2dCQUNHLDRDQUE0QztzQkFBckQsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQXJyYXksIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIEZvcm1IZWxwZXIsIElGbGFnU3RhdGUsIElGZWF0dXJlRmxhZ0xpbWl0YXRpb25zLFxuICBQZXJjZW50YWdlT3B0aW9uRm9ybSwgRm9ybUdlbmVyYXRvciwgU2V0dGluZ1R5cGVcbn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vYm9vdHN0cmFwJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXBlcmNlbnRhZ2Utb3B0aW9ucycsXG4gIHRlbXBsYXRlVXJsOiAnLi9wZXJjZW50YWdlLW9wdGlvbnMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtcbiAgICAnLi4vLi4vY29tcG9uZW50cy5zY3NzJyxcbiAgICAnLi9wZXJjZW50YWdlLW9wdGlvbnMuY29tcG9uZW50LnNjc3MnLFxuICAgICcuLi8uLi9jaGlwcy5zY3NzJyxcbiAgICAnLi4vLi4vYWRkLWJ0bi5zY3NzJ1xuICBdXG59KVxuZXhwb3J0IGNsYXNzIFBlcmNlbnRhZ2VPcHRpb25zQ29tcG9uZW50IHtcbiAgQElucHV0KCkgZm9ybUFycmF5OiBGb3JtQXJyYXk8Rm9ybUdyb3VwPFBlcmNlbnRhZ2VPcHRpb25Gb3JtPj47XG4gIEBJbnB1dCgpIGZsYWdTdGF0ZTogSUZsYWdTdGF0ZTtcbiAgQElucHV0KCkgZmVhdHVyZUZsYWdMaW1pdGF0aW9uczogSUZlYXR1cmVGbGFnTGltaXRhdGlvbnM7XG4gIEBJbnB1dCgpIHNob3dQZXJjZW50YWdlRXZhbHVhdGlvbkF0dHJpYnV0ZTogYm9vbGVhbjtcbiAgQElucHV0KCkgcGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGU6IHN0cmluZztcbiAgQElucHV0KCkgaXNQZXJjZW50YWdlT25seVRhcmdldGluZ1J1bGU6IGJvb2xlYW47XG5cbiAgQE91dHB1dCgpIGxhc3RQZXJjZW50YWdlT3B0aW9uTGVmdCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHN1YnNjcmlwdGlvbkxpbWl0UmVhY2hlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGNoYW5nZVBlcmNlbnRhZ2VFdmFsdWF0aW9uQXR0cmlidXRlUmVxdWVzdGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIFNldHRpbmdUeXBlID0gU2V0dGluZ1R5cGU7XG4gIEZvcm1IZWxwZXIgPSBGb3JtSGVscGVyO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZm9ybUdlbmVyYXRvcjogRm9ybUdlbmVyYXRvcikgeyB9XG5cbiAgYWRkT3B0aW9uKCkge1xuICAgIGlmICh0aGlzLmZvcm1BcnJheS5sZW5ndGggPj0gdGhpcy5mZWF0dXJlRmxhZ0xpbWl0YXRpb25zLm1heFBlcmNlbnRhZ2VPcHRpb25Db3VudCkge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb25MaW1pdFJlYWNoZWQuZW1pdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmZvcm1BcnJheS5wdXNoKHRoaXMuZm9ybUdlbmVyYXRvci5nZW5lcmF0ZVBlcmNlbnRhZ2VPcHRpb25Gb3JtR3JvdXAoe1xuICAgICAgcGVyY2VudGFnZTogMCxcbiAgICAgIHZhbHVlOiB0aGlzLmZvcm1HZW5lcmF0b3IuZ2VuZXJhdGVEZWZhdWx0VmFsdWUodGhpcy5mbGFnU3RhdGUuc2V0dGluZ1ZhbHVlLnNldHRpbmcuc2V0dGluZ1R5cGUpXG4gICAgfSwgdGhpcy5mbGFnU3RhdGUuc2V0dGluZ1ZhbHVlLnNldHRpbmcuc2V0dGluZ1R5cGUsIGZhbHNlLCB0aGlzLmZlYXR1cmVGbGFnTGltaXRhdGlvbnMpKVxuICAgIHRoaXMuZm9ybUFycmF5Lm1hcmtBc0RpcnR5KCk7XG4gIH1cblxuICByZW1vdmUoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuZm9ybUFycmF5LnJlbW92ZUF0KGluZGV4KTtcbiAgICB0aGlzLmZvcm1BcnJheS5tYXJrQXNEaXJ0eSgpO1xuICAgIGlmICh0aGlzLmZvcm1BcnJheS5sZW5ndGggPCAyKSB7XG4gICAgICB0aGlzLmxhc3RQZXJjZW50YWdlT3B0aW9uTGVmdC5lbWl0KCk7XG4gICAgfVxuICB9XG5cbiAgcGVyY2VudGFnZUNoYW5nZWQoaW5kZXg6IG51bWJlcikge1xuICAgIGlmICh0aGlzLmZvcm1BcnJheS5jb250cm9sc1tpbmRleF0udmFsdWUucGVyY2VudGFnZSA8IDApIHtcbiAgICAgIHRoaXMuZm9ybUFycmF5LmNvbnRyb2xzW2luZGV4XS5jb250cm9scy5wZXJjZW50YWdlLnNldFZhbHVlKDApO1xuICAgIH1cbiAgICBpZiAodGhpcy5mb3JtQXJyYXkuY29udHJvbHNbaW5kZXhdLnZhbHVlLnBlcmNlbnRhZ2UgPiAxMDApIHtcbiAgICAgIHRoaXMuZm9ybUFycmF5LmNvbnRyb2xzW2luZGV4XS5jb250cm9scy5wZXJjZW50YWdlLnNldFZhbHVlKDEwMCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZm9ybUFycmF5LmNvbnRyb2xzLmxlbmd0aCA9PT0gMikge1xuICAgICAgdGhpcy5mb3JtQXJyYXkuY29udHJvbHNbMSAtIGluZGV4XS5jb250cm9scy5wZXJjZW50YWdlXG4gICAgICAgIC5zZXRWYWx1ZSgxMDAgLSB0aGlzLmZvcm1BcnJheS5jb250cm9sc1tpbmRleF0udmFsdWUucGVyY2VudGFnZSk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlUGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGUoKSB7XG4gICAgdGhpcy5jaGFuZ2VQZXJjZW50YWdlRXZhbHVhdGlvbkF0dHJpYnV0ZVJlcXVlc3RlZC5lbWl0KCk7XG4gIH1cblxuICBnZXRQZXJjZW50YWdlRXZhbHVhdGlvbkF0dHJpYnV0ZSgpIHtcbiAgICByZXR1cm4gIXRoaXMucGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGUgPyAnSWRlbnRpZmllcicgOiB0aGlzLnBlcmNlbnRhZ2VFdmFsdWF0aW9uQXR0cmlidXRlO1xuICB9XG59XG4iLCI8ZGl2ICpuZ0Zvcj1cImxldCBwZXJjZW50YWdlT3B0aW9uIG9mIGZvcm1BcnJheS5jb250cm9sczsgbGV0IGkgPSBpbmRleFwiIGNsYXNzPVwidGFyZ2V0aW5nLXJ1bGUtbGluZSBzbWFsbGVzdC1mb3JtLWZpZWxkXCI+XG4gICAgPGRpdiBjbGFzcz1cIndyYXBwZXItZ3JvdXBcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRhcmdldGluZy1ydWxlLWNvbXBvbmVudCBmbGV4XCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBzdWJzY3JpcHRTaXppbmc9XCJkeW5hbWljXCIgY2xhc3M9XCJwZXJjLWlucHV0XCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9XCJudW1iZXJcIiBbZm9ybUNvbnRyb2xdPVwicGVyY2VudGFnZU9wdGlvbi5jb250cm9scy5wZXJjZW50YWdlXCIgbWluPVwiMFwiIG1heD1cIjEwMFwiXG4gICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJwZXJjZW50YWdlQ2hhbmdlZChpKVwiIG1hdFRvb2x0aXA9XCJQZXJjZW50YWdlXCJcbiAgICAgICAgICAgICAgICAgICAgZGlnaXRPbmx5IGlucHV0RGlzcGxheU5vcm1hbGl6ZXI+XG4gICAgICAgICAgICAgICAgPHNwYW4gbWF0VGV4dFN1ZmZpeD4lPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJwZXJjZW50YWdlT3B0aW9uLmNvbnRyb2xzLnBlcmNlbnRhZ2UuaW52YWxpZFwiPlxuICAgICAgICAgICAgICAgICAgICB7e0Zvcm1IZWxwZXIuZ2V0RXJyb3JNZXNzYWdlKHBlcmNlbnRhZ2VPcHRpb24uY29udHJvbHMucGVyY2VudGFnZSl9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCIhc2hvd1BlcmNlbnRhZ2VFdmFsdWF0aW9uQXR0cmlidXRlXCIgY2xhc3M9XCJhdHRyaWJ1dGUtd3JhcHBlciBmbGV4XCI+IG9mJm5ic3A7PGFcbiAgICAgICAgICAgICAgICBocmVmPVwiaHR0cHM6Ly9jb25maWdjYXQuY29tL2RvY3MvdGFyZ2V0aW5nL3BlcmNlbnRhZ2Utb3B0aW9ucy9cIiB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIj51c2VyczwvYT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJzaG93UGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGVcIiBjbGFzcz1cImF0dHJpYnV0ZS13cmFwcGVyIHdyYXBwZXItZ3JvdXAgZmxleFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNtYWxsLXBhZC1yaWdodFwiPm9mIGFsbDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNtYWxsLXBhZC1yaWdodFwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWZsYXQtYnV0dG9uIHR5cGU9XCJidXR0b25cIiBbZGlzYWJsZWRdPVwiZmxhZ1N0YXRlLnJlYWRPbmx5XCIgY2xhc3M9XCJhdHRyaWJ1dGVcIlxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiQ2hhbmdlIHBlcmNlbnRhZ2UgZXZhbHVhdGlvbiBhdHRyaWJ1dGVcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2hhbmdlUGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGUoKVwiPnt7Z2V0UGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGUoKX19PC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXY+YXR0cmlidXRlczwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRlbGV0ZS1idXR0b25cIiAqbmdJZj1cIiFmbGFnU3RhdGUucmVhZE9ubHlcIj5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBtYXRUb29sdGlwPVwiUmVtb3ZlIG9wdGlvblwiIChjbGljayk9XCJyZW1vdmUoaSlcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2FuY2VsPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxhcHAtZmVhdHVyZS1mbGFnLXZhbHVlIGNsYXNzPVwidmFsdWVcIiBbZmxhZ1N0YXRlXT1cImZsYWdTdGF0ZVwiIHRvb2x0aXA9XCJTZXJ2ZWQgdmFsdWVcIlxuICAgICAgICBbZm9ybUdyb3VwXT1cInBlcmNlbnRhZ2VPcHRpb24uY29udHJvbHMudmFsdWVcIlxuICAgICAgICBbZmVhdHVyZUZsYWdMaW1pdGF0aW9uc109XCJmZWF0dXJlRmxhZ0xpbWl0YXRpb25zXCI+PC9hcHAtZmVhdHVyZS1mbGFnLXZhbHVlPlxuPC9kaXY+XG48bWF0LWVycm9yICpuZ0lmPVwiZm9ybUFycmF5LmludmFsaWQgJiYgISFGb3JtSGVscGVyLmdldEVycm9yTWVzc2FnZShmb3JtQXJyYXkpXCIgY2xhc3M9XCJzdW1lcnJvclwiPlxuICAgIHt7Rm9ybUhlbHBlci5nZXRFcnJvck1lc3NhZ2UoZm9ybUFycmF5KX19XG48L21hdC1lcnJvcj5cbjxkaXYgY2xhc3M9XCJzbWFsbCBzbWFsbC1wYWQtYm90dG9tXCIgc3R5bGU9XCJvcGFjaXR5OiAuNjtcIlxuICAgICpuZ0lmPVwic2hvd1BlcmNlbnRhZ2VFdmFsdWF0aW9uQXR0cmlidXRlICYmIGlzUGVyY2VudGFnZU9ubHlUYXJnZXRpbmdSdWxlXCI+XG4gICAgSWYgdGhlIHt7Z2V0UGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGUoKX19IGF0dHJpYnV0ZSBpcyBub3Qgc2V0IGluIHRoZVxuICAgIDxhIGhyZWY9XCJodHRwczovL2NvbmZpZ2NhdC5jb20vZG9jcy90YXJnZXRpbmcvdXNlci1vYmplY3QvXCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiPlVzZXJcbiAgICAgICAgT2JqZWN0PC9hPiwgdGhlIHBlcmNlbnRhZ2Ugb3B0aW9ucyBhcmUgc2tpcHBlZCBhbmQgdGhlIGV2YWx1YXRpb24gY29udGludWVzIHdpdGggdGhlIG5leHQgcnVsZS5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cInNtYWxsIHNtYWxsLXBhZC1ib3R0b21cIiBzdHlsZT1cIm9wYWNpdHk6IC42O1wiXG4gICAgKm5nSWY9XCJzaG93UGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGUgJiYgIWlzUGVyY2VudGFnZU9ubHlUYXJnZXRpbmdSdWxlXCI+XG4gICAgSWYgdGhlIHt7Z2V0UGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGUoKX19IGF0dHJpYnV0ZSBpcyBub3Qgc2V0IGluIHRoZVxuICAgIDxhIGhyZWY9XCJodHRwczovL2NvbmZpZ2NhdC5jb20vZG9jcy90YXJnZXRpbmcvdXNlci1vYmplY3QvXCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiPlVzZXJcbiAgICAgICAgT2JqZWN0PC9hPiwgdGhlIGN1cnJlbnQgdGFyZ2V0aW5nIHJ1bGUgaXMgc2tpcHBlZCBhbmQgdGhlIGV2YWx1YXRpb24gY29udGludWVzIHdpdGggdGhlIG5leHQgb25lLlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJhZGQtcGVyY1wiICpuZ0lmPVwiZmxhZ1N0YXRlLnNldHRpbmdWYWx1ZS5zZXR0aW5nLnNldHRpbmdUeXBlICE9PSBTZXR0aW5nVHlwZS5Cb29sZWFuICYmICFmbGFnU3RhdGUucmVhZE9ubHlcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZW50ZXItc2lnblwiPjxtYXQtaWNvbj5zdWJkaXJlY3RvcnlfYXJyb3dfcmlnaHQ8L21hdC1pY29uPjwvZGl2PlxuICAgIDxkaXYgKGNsaWNrKT1cImFkZE9wdGlvbigpXCIgY2xhc3M9XCJhZGQtYnRuIGFkZC1wZXJjLWJ0blwiPisgJSBPUFRJT048L2Rpdj5cbjwvZGl2PiJdfQ==
84
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyY2VudGFnZS1vcHRpb25zLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWNvbmZpZ2NhdC1wdWJsaWNhcGktdWkvc3JjL2xpYi92Mi9mZWF0dXJlLWZsYWcvZXZhbHVhdGlvbi1mb3JtdWxhL3RhcmdldGluZy1ydWxlL3BlcmNlbnRhZ2Utb3B0aW9ucy9wZXJjZW50YWdlLW9wdGlvbnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctY29uZmlnY2F0LXB1YmxpY2FwaS11aS9zcmMvbGliL3YyL2ZlYXR1cmUtZmxhZy9ldmFsdWF0aW9uLWZvcm11bGEvdGFyZ2V0aW5nLXJ1bGUvcGVyY2VudGFnZS1vcHRpb25zL3BlcmNlbnRhZ2Utb3B0aW9ucy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXZFLE9BQU8sRUFDTCxVQUFVLEVBQzJCLFdBQVcsRUFDakQsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7Ozs7O0FBWWxDLE1BQU0sT0FBTywwQkFBMEI7SUFlckMsWUFBb0IsYUFBNEI7UUFBNUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFQdEMsNkJBQXdCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUM5Qyw2QkFBd0IsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzlDLGlEQUE0QyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFNUUsZ0JBQVcsR0FBRyxXQUFXLENBQUM7UUFDMUIsZUFBVSxHQUFHLFVBQVUsQ0FBQztJQUU0QixDQUFDO0lBRXJELFNBQVM7UUFDUCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxzQkFB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QUNHLDRDQUE0QztzQkFBckQsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQXJyYXksIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIEZvcm1IZWxwZXIsIElGbGFnU3RhdGUsIElGZWF0dXJlRmxhZ0xpbWl0YXRpb25zLFxuICBQZXJjZW50YWdlT3B0aW9uRm9ybSwgRm9ybUdlbmVyYXRvciwgU2V0dGluZ1R5cGVcbn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vYm9vdHN0cmFwJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXBlcmNlbnRhZ2Utb3B0aW9ucycsXG4gIHRlbXBsYXRlVXJsOiAnLi9wZXJjZW50YWdlLW9wdGlvbnMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtcbiAgICAnLi4vLi4vY29tcG9uZW50cy5zY3NzJyxcbiAgICAnLi9wZXJjZW50YWdlLW9wdGlvbnMuY29tcG9uZW50LnNjc3MnLFxuICAgICcuLi8uLi9jaGlwcy5zY3NzJyxcbiAgICAnLi4vLi4vYWRkLWJ0bi5zY3NzJ1xuICBdXG59KVxuZXhwb3J0IGNsYXNzIFBlcmNlbnRhZ2VPcHRpb25zQ29tcG9uZW50IHtcbiAgQElucHV0KCkgZm9ybUFycmF5OiBGb3JtQXJyYXk8Rm9ybUdyb3VwPFBlcmNlbnRhZ2VPcHRpb25Gb3JtPj47XG4gIEBJbnB1dCgpIGZsYWdTdGF0ZTogSUZsYWdTdGF0ZTtcbiAgQElucHV0KCkgZmVhdHVyZUZsYWdMaW1pdGF0aW9uczogSUZlYXR1cmVGbGFnTGltaXRhdGlvbnM7XG4gIEBJbnB1dCgpIHNob3dQZXJjZW50YWdlRXZhbHVhdGlvbkF0dHJpYnV0ZTogYm9vbGVhbjtcbiAgQElucHV0KCkgcGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGU6IHN0cmluZztcbiAgQElucHV0KCkgaXNQZXJjZW50YWdlT25seVRhcmdldGluZ1J1bGU6IGJvb2xlYW47XG5cbiAgQE91dHB1dCgpIGxhc3RQZXJjZW50YWdlT3B0aW9uTGVmdCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHN1YnNjcmlwdGlvbkxpbWl0UmVhY2hlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGNoYW5nZVBlcmNlbnRhZ2VFdmFsdWF0aW9uQXR0cmlidXRlUmVxdWVzdGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIFNldHRpbmdUeXBlID0gU2V0dGluZ1R5cGU7XG4gIEZvcm1IZWxwZXIgPSBGb3JtSGVscGVyO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZm9ybUdlbmVyYXRvcjogRm9ybUdlbmVyYXRvcikgeyB9XG5cbiAgYWRkT3B0aW9uKCkge1xuICAgIGlmICh0aGlzLmZvcm1BcnJheS5sZW5ndGggPj0gdGhpcy5mZWF0dXJlRmxhZ0xpbWl0YXRpb25zLm1heFBlcmNlbnRhZ2VPcHRpb25Db3VudCkge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb25MaW1pdFJlYWNoZWQuZW1pdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmZvcm1BcnJheS5wdXNoKHRoaXMuZm9ybUdlbmVyYXRvci5nZW5lcmF0ZVBlcmNlbnRhZ2VPcHRpb25Gb3JtR3JvdXAoe1xuICAgICAgcGVyY2VudGFnZTogMCxcbiAgICAgIHZhbHVlOiB0aGlzLmZvcm1HZW5lcmF0b3IuZ2VuZXJhdGVEZWZhdWx0VmFsdWUodGhpcy5mbGFnU3RhdGUuc2V0dGluZ1ZhbHVlLnNldHRpbmcuc2V0dGluZ1R5cGUpXG4gICAgfSwgdGhpcy5mbGFnU3RhdGUuc2V0dGluZ1ZhbHVlLnNldHRpbmcuc2V0dGluZ1R5cGUsIGZhbHNlLCB0aGlzLmZlYXR1cmVGbGFnTGltaXRhdGlvbnMpKVxuICAgIHRoaXMuZm9ybUFycmF5Lm1hcmtBc0RpcnR5KCk7XG4gIH1cblxuICByZW1vdmUoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuZm9ybUFycmF5LnJlbW92ZUF0KGluZGV4KTtcbiAgICB0aGlzLmZvcm1BcnJheS5tYXJrQXNEaXJ0eSgpO1xuICAgIGlmICh0aGlzLmZvcm1BcnJheS5sZW5ndGggPCAyKSB7XG4gICAgICB0aGlzLmxhc3RQZXJjZW50YWdlT3B0aW9uTGVmdC5lbWl0KCk7XG4gICAgfVxuICB9XG5cbiAgcGVyY2VudGFnZUNoYW5nZWQoaW5kZXg6IG51bWJlcikge1xuICAgIGlmICh0aGlzLmZvcm1BcnJheS5jb250cm9sc1tpbmRleF0udmFsdWUucGVyY2VudGFnZSA8IDApIHtcbiAgICAgIHRoaXMuZm9ybUFycmF5LmNvbnRyb2xzW2luZGV4XS5jb250cm9scy5wZXJjZW50YWdlLnNldFZhbHVlKDApO1xuICAgIH1cbiAgICBpZiAodGhpcy5mb3JtQXJyYXkuY29udHJvbHNbaW5kZXhdLnZhbHVlLnBlcmNlbnRhZ2UgPiAxMDApIHtcbiAgICAgIHRoaXMuZm9ybUFycmF5LmNvbnRyb2xzW2luZGV4XS5jb250cm9scy5wZXJjZW50YWdlLnNldFZhbHVlKDEwMCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZm9ybUFycmF5LmNvbnRyb2xzLmxlbmd0aCA9PT0gMikge1xuICAgICAgdGhpcy5mb3JtQXJyYXkuY29udHJvbHNbMSAtIGluZGV4XS5jb250cm9scy5wZXJjZW50YWdlXG4gICAgICAgIC5zZXRWYWx1ZSgxMDAgLSB0aGlzLmZvcm1BcnJheS5jb250cm9sc1tpbmRleF0udmFsdWUucGVyY2VudGFnZSk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlUGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGUoKSB7XG4gICAgdGhpcy5jaGFuZ2VQZXJjZW50YWdlRXZhbHVhdGlvbkF0dHJpYnV0ZVJlcXVlc3RlZC5lbWl0KCk7XG4gIH1cblxuICBnZXRQZXJjZW50YWdlRXZhbHVhdGlvbkF0dHJpYnV0ZSgpIHtcbiAgICByZXR1cm4gIXRoaXMucGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGUgPyAnSWRlbnRpZmllcicgOiB0aGlzLnBlcmNlbnRhZ2VFdmFsdWF0aW9uQXR0cmlidXRlO1xuICB9XG59XG4iLCI8ZGl2ICpuZ0Zvcj1cImxldCBwZXJjZW50YWdlT3B0aW9uIG9mIGZvcm1BcnJheS5jb250cm9sczsgbGV0IGkgPSBpbmRleFwiIGNsYXNzPVwidGFyZ2V0aW5nLXJ1bGUtbGluZSBzbWFsbGVzdC1mb3JtLWZpZWxkXCI+XG4gICAgPGRpdiBjbGFzcz1cIndyYXBwZXItZ3JvdXBcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRhcmdldGluZy1ydWxlLWNvbXBvbmVudCBmbGV4XCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBzdWJzY3JpcHRTaXppbmc9XCJkeW5hbWljXCIgY2xhc3M9XCJwZXJjLWlucHV0XCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9XCJudW1iZXJcIiBbZm9ybUNvbnRyb2xdPVwicGVyY2VudGFnZU9wdGlvbi5jb250cm9scy5wZXJjZW50YWdlXCIgbWluPVwiMFwiIG1heD1cIjEwMFwiXG4gICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJwZXJjZW50YWdlQ2hhbmdlZChpKVwiIG1hdFRvb2x0aXA9XCJQZXJjZW50YWdlXCJcbiAgICAgICAgICAgICAgICAgICAgZGlnaXRPbmx5IGlucHV0RGlzcGxheU5vcm1hbGl6ZXI+XG4gICAgICAgICAgICAgICAgPHNwYW4gbWF0VGV4dFN1ZmZpeD4lPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJwZXJjZW50YWdlT3B0aW9uLmNvbnRyb2xzLnBlcmNlbnRhZ2UuaW52YWxpZFwiPlxuICAgICAgICAgICAgICAgICAgICB7e0Zvcm1IZWxwZXIuZ2V0RXJyb3JNZXNzYWdlKHBlcmNlbnRhZ2VPcHRpb24uY29udHJvbHMucGVyY2VudGFnZSl9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCIhc2hvd1BlcmNlbnRhZ2VFdmFsdWF0aW9uQXR0cmlidXRlXCIgY2xhc3M9XCJhdHRyaWJ1dGUtd3JhcHBlciBmbGV4XCI+IG9mJm5ic3A7PGFcbiAgICAgICAgICAgICAgICBocmVmPVwiaHR0cHM6Ly9jb25maWdjYXQuY29tL2RvY3MvdGFyZ2V0aW5nL3BlcmNlbnRhZ2Utb3B0aW9ucy9cIiB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIj51c2VyczwvYT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJzaG93UGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGVcIiBjbGFzcz1cImF0dHJpYnV0ZS13cmFwcGVyIHdyYXBwZXItZ3JvdXAgZmxleFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNtYWxsLXBhZC1yaWdodFwiPm9mIGFsbDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNtYWxsLXBhZC1yaWdodFwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWZsYXQtYnV0dG9uIHR5cGU9XCJidXR0b25cIiBbZGlzYWJsZWRdPVwiZmxhZ1N0YXRlLnJlYWRPbmx5XCIgY2xhc3M9XCJhdHRyaWJ1dGVcIlxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiQ2hhbmdlIHBlcmNlbnRhZ2UgZXZhbHVhdGlvbiBhdHRyaWJ1dGVcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2hhbmdlUGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGUoKVwiPnt7Z2V0UGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGUoKX19PC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXY+YXR0cmlidXRlczwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRlbGV0ZS1idXR0b25cIiAqbmdJZj1cIiFmbGFnU3RhdGUucmVhZE9ubHlcIj5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBtYXRUb29sdGlwPVwiUmVtb3ZlIG9wdGlvblwiIChjbGljayk9XCJyZW1vdmUoaSlcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2FuY2VsPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxhcHAtZmVhdHVyZS1mbGFnLXZhbHVlIGNsYXNzPVwidmFsdWVcIiBbZmxhZ1N0YXRlXT1cImZsYWdTdGF0ZVwiIHRvb2x0aXA9XCJTZXJ2ZWQgdmFsdWVcIlxuICAgICAgICBbZm9ybUdyb3VwXT1cInBlcmNlbnRhZ2VPcHRpb24uY29udHJvbHMudmFsdWVcIlxuICAgICAgICBbZmVhdHVyZUZsYWdMaW1pdGF0aW9uc109XCJmZWF0dXJlRmxhZ0xpbWl0YXRpb25zXCI+PC9hcHAtZmVhdHVyZS1mbGFnLXZhbHVlPlxuPC9kaXY+XG48bWF0LWVycm9yICpuZ0lmPVwiZm9ybUFycmF5LmludmFsaWQgJiYgISFGb3JtSGVscGVyLmdldEVycm9yTWVzc2FnZShmb3JtQXJyYXkpXCIgY2xhc3M9XCJzdW1lcnJvclwiPlxuICAgIHt7Rm9ybUhlbHBlci5nZXRFcnJvck1lc3NhZ2UoZm9ybUFycmF5KX19XG48L21hdC1lcnJvcj5cbjxkaXYgY2xhc3M9XCJzbWFsbCBzbWFsbC1wYWQtYm90dG9tXCIgc3R5bGU9XCJvcGFjaXR5OiAuNjtcIlxuICAgICpuZ0lmPVwic2hvd1BlcmNlbnRhZ2VFdmFsdWF0aW9uQXR0cmlidXRlICYmIGlzUGVyY2VudGFnZU9ubHlUYXJnZXRpbmdSdWxlXCI+XG4gICAgSWYgdGhlIHt7Z2V0UGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGUoKX19IGF0dHJpYnV0ZSBpcyBub3Qgc2V0IGluIHRoZVxuICAgIDxhIGhyZWY9XCJodHRwczovL2NvbmZpZ2NhdC5jb20vZG9jcy90YXJnZXRpbmcvdXNlci1vYmplY3QvXCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiPlVzZXJcbiAgICAgICAgT2JqZWN0PC9hPiwgdGhlIHBlcmNlbnRhZ2Ugb3B0aW9ucyBhcmUgc2tpcHBlZCBhbmQgdGhlIGV2YWx1YXRpb24gY29udGludWVzIHdpdGggdGhlIG5leHQgcnVsZS5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cInNtYWxsIHNtYWxsLXBhZC1ib3R0b21cIiBzdHlsZT1cIm9wYWNpdHk6IC42O1wiXG4gICAgKm5nSWY9XCJzaG93UGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGUgJiYgIWlzUGVyY2VudGFnZU9ubHlUYXJnZXRpbmdSdWxlXCI+XG4gICAgSWYgdGhlIHt7Z2V0UGVyY2VudGFnZUV2YWx1YXRpb25BdHRyaWJ1dGUoKX19IGF0dHJpYnV0ZSBpcyBub3Qgc2V0IGluIHRoZVxuICAgIDxhIGhyZWY9XCJodHRwczovL2NvbmZpZ2NhdC5jb20vZG9jcy90YXJnZXRpbmcvdXNlci1vYmplY3QvXCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiPlVzZXJcbiAgICAgICAgT2JqZWN0PC9hPiwgdGhlIGN1cnJlbnQgdGFyZ2V0aW5nIHJ1bGUgaXMgc2tpcHBlZCBhbmQgdGhlIGV2YWx1YXRpb24gY29udGludWVzIHdpdGggdGhlIG5leHQgb25lLlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJhZGQtcGVyY1wiICpuZ0lmPVwiZmxhZ1N0YXRlLnNldHRpbmdWYWx1ZS5zZXR0aW5nLnNldHRpbmdUeXBlICE9PSBTZXR0aW5nVHlwZS5Cb29sZWFuICYmICFmbGFnU3RhdGUucmVhZE9ubHlcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZW50ZXItc2lnblwiPjxtYXQtaWNvbj5zdWJkaXJlY3RvcnlfYXJyb3dfcmlnaHQ8L21hdC1pY29uPjwvZGl2PlxuICAgIDxkaXYgKGNsaWNrKT1cImFkZE9wdGlvbigpXCIgY2xhc3M9XCJhZGQtYnRuIGFkZC1wZXJjLWJ0blwiPisgJSBPUFRJT048L2Rpdj5cbjwvZGl2PiJdfQ==