@o3r/rules-engine 11.7.0-prerelease.41 → 11.7.0-prerelease.43

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.
@@ -37,14 +37,14 @@ export class RulesetHistoryPresComponent {
37
37
  this.cd.detectChanges();
38
38
  }
39
39
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RulesetHistoryPresComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
40
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: RulesetHistoryPresComponent, selector: "o3r-ruleset-history-pres", inputs: { rulesetExecutions: "rulesetExecutions", executionDurationFormat: "executionDurationFormat" }, ngImport: i0, template: "<section>\n <h4 class=\"mb-4\">Ruleset Execution History</h4>\n <ng-template #noRulesEngine>\n <div class=\"alert alert-danger m-2\" role=\"alert\">\n The Rules Engine is not configured on this page.\n </div>\n </ng-template>\n <ul *ngIf=\"rulesetExecutions; else noRulesEngine\" class=\"rulesets\">\n <li *ngFor=\"let execution of rulesetExecutions\" class=\"ruleset\">\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -- need to refactor the div to accordion from DF #1518 -->\n <div class=\"ruleset-panel-title ruleset-expansion-action\"\n [class.error]=\"execution.type === 'RulesetExecutionError'\"\n (click)=\"toggleExpansion(execution.executionId, 'ruleset')\">\n <div><span [title]=\"'This ruleset has been evaluated ' + execution.executionCounter + ' time(s)'\">{{execution.executionCounter}}</span> - {{execution.rulesetName | titlecase }}\n <div class=\"ruleset-panel-subtitle\" *ngIf=\"execution.rulesetInformation?.linkedComponents?.or || execution.rulesetInformation?.linkedComponent\">\n <ng-container *ngFor=\"let lc of (execution.rulesetInformation?.linkedComponents?.or || [execution.rulesetInformation.linkedComponent]); last as isLast\">\n <div>{{lc.name}} {{lc.library}} <span *ngIf=\"!isLast\"> OR </span></div>\n </ng-container>\n </div>\n <div class=\"ruleset-panel-subtitle\" *ngIf=\"execution.rulesetInformation?.validityRange as validityRange\">\n Date range: {{validityRange.from}} - {{validityRange.to}}\n </div>\n </div>\n <div class=\"ruleset-panel-title-aside\">\n <span class=\"error capsule\" *ngIf=\"execution.status === 'Error'\">Error</span>\n <span class=\"success capsule\" *ngIf=\"execution.status === 'Active'\">Applied</span>\n <span class=\"inactive capsule\" *ngIf=\"execution.status === 'Deactivated'\">Deactivated</span>\n <span class=\"warn capsule\" *ngIf=\"execution.status === 'NoEffect'\">No effect</span>\n <span class=\"time capsule\">\n <span>{{execution.timestamp | date: 'HH:mm:ss SSS'}}</span>\n <span>({{execution.duration | number: executionDurationFormat}}ms)</span>\n </span>\n <button\n class=\"icon\"\n [class.icon-caret-down]=\"!expansionStatus[execution.executionId]?.ruleset\"\n [class.icon-caret-up]=\"expansionStatus[execution.executionId]?.ruleset\">\n </button>\n </div>\n </div>\n <div class=\"ruleset-panel-description\" *ngIf=\"expansionStatus[execution.executionId]?.ruleset\">\n <ng-container [ngTemplateOutlet]=\"rules\"\n [ngTemplateOutletContext]=\"{\n rules: execution.rulesetInformation.rules,\n expansionID: execution.executionId\n }\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"inputs\"\n [ngTemplateOutletContext]=\"{\n inputs: execution.inputFacts\n }\"></ng-container>\n <ng-container *ngIf=\"execution.type === 'RulesetExecutionError'; else success\">\n <div class=\"ruleset-panel-category-title\">Rules:</div>\n <ul class=\"ruleset-panel-category-body rule-description\">\n <li *ngFor=\"let ruleEvaluation of execution.rulesEvaluations; let index=index;\">\n <ng-container>\n <div class=\"ruleset-panel-title\" [class.error]=\"ruleEvaluation.error\">\n <span>{{ruleEvaluation.rule.name | titlecase}} </span>\n <span class=\"capsule error\" *ngIf=\"ruleEvaluation.error\">Error</span>\n </div>\n <div>\n <ng-container *ngIf=\"ruleEvaluation.error\">\n <span class=\"ruleset-panel-category-title\">Error:</span>\n <pre class=\"ruleset-panel-category-body error\">{{ruleEvaluation.error | o3rJsonOrString}}</pre>\n </ng-container>\n <ng-container [ngTemplateOutlet]=\"inputs\"\n [ngTemplateOutletContext]=\"{\n inputs: execution.inputFacts,\n runtimeInputs: execution.rulesetInformation?.rules[index]?.inputRuntimeFacts\n }\"></ng-container>\n <o3r-rule-actions-pres *ngIf=\"!ruleEvaluation.error\"\n [temporaryFacts]=\"ruleEvaluation.temporaryFacts\"\n [runtimeOutputs]=\"execution.rulesetInformation?.rules[index]?.outputRuntimeFacts\"\n ></o3r-rule-actions-pres>\n </div>\n </ng-container>\n </li>\n </ul>\n </ng-container>\n <ng-template #success>\n <o3r-rule-actions-pres [actions]=\"execution.outputActions\"></o3r-rule-actions-pres>\n <div class=\"ruleset-panel-category-title\">Executed Rules</div>\n <ul class=\"rule-description ruleset-panel-category-body\">\n <li *ngFor=\"let ruleEvaluation of execution.rulesEvaluations; let index=index;\">\n <div class=\"ruleset-panel-title\">\n <span>{{ruleEvaluation.rule.name | titlecase}}</span>\n <span class=\"capsule inactive\" *ngIf=\"ruleEvaluation.cached\">Cached</span>\n <span class=\"capsule\">({{ruleEvaluation.duration | number: executionDurationFormat}}ms)</span>\n </div>\n <div>\n <ng-container [ngTemplateOutlet]=\"triggers\"\n [ngTemplateOutletContext]=\"{triggers: (ruleEvaluation.triggers[ruleEvaluation.rule.id])}\"></ng-container>\n <o3r-rule-actions-pres\n [actions]=\"ruleEvaluation.outputActions\"\n [temporaryFacts]=\"ruleEvaluation.temporaryFacts\"\n [runtimeOutputs]=\"execution.rulesetInformation?.rules[index]?.outputRuntimeFacts\">\n </o3r-rule-actions-pres>\n </div>\n </li>\n </ul>\n </ng-template>\n </div>\n </li>\n </ul>\n</section>\n\n<ng-template let-triggers=\"triggers\" #triggers>\n <div class=\"ruleset-panel-category-title\">Basefacts Triggers</div>\n <ul class=\"ruleset-panel-category-body triggers\">\n <ng-container *ngFor=\"let trigger of (triggers | keyvalue)\">\n <li *ngIf=\"trigger.value?.factName\">\n <o3r-rule-key-value-pres\n [key]=\"trigger.value.factName\"\n [oldValue]=\"trigger.value.oldValue | o3rFallbackTo\"\n [value]=\"trigger.value.newValue | o3rFallbackTo\"\n [type]=\"'state'\"></o3r-rule-key-value-pres>\n </li>\n </ng-container>\n </ul>\n</ng-template>\n\n<ng-template let-rules=\"rules\" let-expansionID=\"expansionID\" #rules>\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -- need to refactor the div to accordion from DF #1518 -->\n <div class=\"ruleset-panel-category-title ruleset-expansion-action\"\n (click)=\"toggleExpansion(expansionID, 'rulesOverview')\">\n <span>Rules Overview</span>\n <button class=\"icon\"\n [class.icon-caret-down]=\"!expansionStatus[expansionID]?.rulesOverview\"\n [class.icon-caret-up]=\"expansionStatus[expansionID]?.rulesOverview\">\n </button>\n </div>\n <ng-container *ngIf=\"expansionStatus[expansionID]?.rulesOverview\">\n <div *ngIf=\"rules?.length === 0\" class=\"ruleset-panel-category-body empty\">No rule</div>\n <ul class=\"ruleset-panel-category-body\" *ngIf=\"rules?.length > 0\">\n <li *ngFor=\"let rule of rules\">\n <o3r-rule-tree-pres [name]=\"rule.name\"\n [condition]=\"rule?.rootElement?.condition\"\n [blockType]=\"rule?.rootElement?.blockType\"\n [successElements]=\"rule?.rootElement?.successElements\"\n [failureElements]=\"rule?.rootElement?.failureElements\">\n </o3r-rule-tree-pres>\n </li>\n </ul>\n </ng-container>\n</ng-template>\n\n<ng-template let-inputs=\"inputs\" let-runtimeInputs=\"runtimeInputs\" #inputs>\n <div class=\"ruleset-panel-category-title\">Inputs snapshot</div>\n <div *ngIf=\"inputs?.length === 0\" class=\"ruleset-panel-category-body empty\">No inputs</div>\n <ul class=\"ruleset-panel-category-body\" *ngIf=\"inputs?.length > 0\">\n <li *ngFor=\"let input of inputs\">\n <o3r-rule-key-value-pres\n [key]=\"input.factName\"\n [value]=\"input.value | o3rFallbackTo\"\n [type]=\"'state'\"></o3r-rule-key-value-pres>\n </li>\n <li *ngFor=\"let input of runtimeInputs\">{{input}} (scope limited to ruleset)</li>\n </ul>\n</ng-template>\n", styles: ["o3r-ruleset-history-pres .ruleset-panel-title,o3r-ruleset-history-pres .ruleset-panel-category-title{display:flex;justify-content:space-between;align-items:center}o3r-ruleset-history-pres .ruleset-panel-title{font-size:1rem;padding:.5rem 0 .1rem}o3r-ruleset-history-pres .ruleset-expansion-action,o3r-ruleset-history-pres .icon-caret-down,o3r-ruleset-history-pres .icon-caret-up{cursor:pointer}o3r-ruleset-history-pres .ruleset-panel-subtitle{font-size:.75rem}o3r-ruleset-history-pres .ruleset-panel-title-aside{display:flex;flex-wrap:wrap;justify-content:flex-end;align-items:center;min-width:fit-content}o3r-ruleset-history-pres .ruleset-panel-category-title{font-size:.95rem;background:#eee;padding:.5rem;margin-bottom:.5rem;margin-top:1rem}o3r-ruleset-history-pres .rule-description .ruleset-panel-category-title{font-size:.893rem;cursor:default}o3r-ruleset-history-pres .rule-description .ruleset-panel-title{font-size:.94rem}o3r-ruleset-history-pres .rule-description .ruleset-panel-category-body{padding-bottom:.5rem;padding-left:1.5rem}o3r-ruleset-history-pres .rule-description .ruleset-panel-category-body:empty{margin:0;padding:0 0 0 1.5rem}o3r-ruleset-history-pres .rulesets{margin:0;padding:0;list-style:none}o3r-ruleset-history-pres .rulesets ul{margin:0;padding-left:2rem}o3r-ruleset-history-pres .rulesets li.ruleset:nth-child(odd){background:#fbfbfb}o3r-ruleset-history-pres .ruleset-panel-category-body li{list-style:disc}o3r-ruleset-history-pres li:empty{display:none}o3r-ruleset-history-pres .ruleset{border-bottom:1px solid #dddddd}o3r-ruleset-history-pres .ruleset .ruleset-panel-description{padding:0 1rem 0 2rem;margin-bottom:2em}o3r-ruleset-history-pres .ruleset:first-child{border-top:1px solid #dddddd}o3r-ruleset-history-pres .ruleset-panel-title.ruleset-expansion-action{padding:.5rem 1rem}o3r-ruleset-history-pres .empty{font-style:italic;padding-left:1.5rem}o3r-ruleset-history-pres .ruleset-panel-category-body:empty.triggers:after{content:\"No trigger for this rule\";display:block;font-style:italic;padding-bottom:.5rem}o3r-ruleset-history-pres .ruleset-panel-title-aside{padding-left:1rem}o3r-ruleset-history-pres .rule-description .capsule{font-size:.8em;padding:.1rem .5rem;margin:0 .5rem}o3r-ruleset-history-pres .icon{background:none;border:none;font-size:1em}o3r-ruleset-history-pres .capsule{padding:.3rem;margin:.5rem;font-size:.875em;min-width:6rem;text-align:center}o3r-ruleset-history-pres .capsule.time{display:flex;flex-direction:column}o3r-ruleset-history-pres .success{background-color:#16aa32;color:#fff}o3r-ruleset-history-pres .inactive{background-color:#aaa;color:#fff}o3r-ruleset-history-pres .error{color:#c02020}o3r-ruleset-history-pres .error .capsule.error{background-color:#c02020;color:#fff}o3r-ruleset-history-pres .warn{background-color:#b92;color:#fff}o3r-ruleset-history-pres .input-key{color:#26c}o3r-ruleset-history-pres .input-value{color:#c29}o3r-ruleset-history-pres .input-key,o3r-ruleset-history-pres .input-value{font-family:monospace}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.RuleTreePresComponent, selector: "o3r-rule-tree-pres", inputs: ["name", "blockType", "condition", "successElements", "failureElements"] }, { kind: "component", type: i3.RuleActionsPresComponent, selector: "o3r-rule-actions-pres", inputs: ["actions", "temporaryFacts", "runtimeOutputs"] }, { kind: "component", type: i4.RuleKeyValuePresComponent, selector: "o3r-rule-key-value-pres", inputs: ["key", "value", "oldValue", "type"] }, { kind: "pipe", type: i5.O3rFallbackToPipe, name: "o3rFallbackTo" }, { kind: "pipe", type: i1.DecimalPipe, name: "number" }, { kind: "pipe", type: i1.TitleCasePipe, name: "titlecase" }, { kind: "pipe", type: i1.DatePipe, name: "date" }, { kind: "pipe", type: i1.KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: i6.O3rJsonOrStringPipe, name: "o3rJsonOrString" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
40
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: RulesetHistoryPresComponent, selector: "o3r-ruleset-history-pres", inputs: { rulesetExecutions: "rulesetExecutions", executionDurationFormat: "executionDurationFormat" }, ngImport: i0, template: "<section>\n <ng-template #noRulesEngine>\n <div class=\"alert alert-danger m-2\" role=\"alert\">\n The Rules Engine is not configured on this page.\n </div>\n </ng-template>\n <ul *ngIf=\"rulesetExecutions; else noRulesEngine\" class=\"rulesets\">\n <li *ngFor=\"let execution of rulesetExecutions\" class=\"ruleset\">\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -- need to refactor the div to accordion from DF #1518 -->\n <div class=\"ruleset-panel-title ruleset-expansion-action\"\n [class.error]=\"execution.type === 'RulesetExecutionError'\"\n (click)=\"toggleExpansion(execution.executionId, 'ruleset')\">\n <div><span [title]=\"'This ruleset has been evaluated ' + execution.executionCounter + ' time(s)'\">{{execution.executionCounter}}</span> - {{execution.rulesetName | titlecase }}\n <div class=\"ruleset-panel-subtitle\" *ngIf=\"execution.rulesetInformation?.linkedComponents?.or || execution.rulesetInformation?.linkedComponent\">\n <ng-container *ngFor=\"let lc of (execution.rulesetInformation?.linkedComponents?.or || [execution.rulesetInformation.linkedComponent]); last as isLast\">\n <div>{{lc.name}} {{lc.library}} <span *ngIf=\"!isLast\"> OR </span></div>\n </ng-container>\n </div>\n <div class=\"ruleset-panel-subtitle\" *ngIf=\"execution.rulesetInformation?.validityRange as validityRange\">\n Date range: {{validityRange.from}} - {{validityRange.to}}\n </div>\n </div>\n <div class=\"ruleset-panel-title-aside\">\n <span class=\"error capsule\" *ngIf=\"execution.status === 'Error'\">Error</span>\n <span class=\"success capsule\" *ngIf=\"execution.status === 'Active'\">Applied</span>\n <span class=\"inactive capsule\" *ngIf=\"execution.status === 'Deactivated'\">Deactivated</span>\n <span class=\"warn capsule\" *ngIf=\"execution.status === 'NoEffect'\">No effect</span>\n <span class=\"time capsule\">\n <span>{{execution.timestamp | date: 'HH:mm:ss SSS'}}</span>\n <span>({{execution.duration | number: executionDurationFormat}}ms)</span>\n </span>\n <button\n class=\"icon\"\n [class.icon-caret-down]=\"!expansionStatus[execution.executionId]?.ruleset\"\n [class.icon-caret-up]=\"expansionStatus[execution.executionId]?.ruleset\">\n </button>\n </div>\n </div>\n <div class=\"ruleset-panel-description\" *ngIf=\"expansionStatus[execution.executionId]?.ruleset\">\n <ng-container [ngTemplateOutlet]=\"rules\"\n [ngTemplateOutletContext]=\"{\n rules: execution.rulesetInformation.rules,\n expansionID: execution.executionId\n }\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"inputs\"\n [ngTemplateOutletContext]=\"{\n inputs: execution.inputFacts\n }\"></ng-container>\n <ng-container *ngIf=\"execution.type === 'RulesetExecutionError'; else success\">\n <div class=\"ruleset-panel-category-title\">Rules:</div>\n <ul class=\"ruleset-panel-category-body rule-description\">\n <li *ngFor=\"let ruleEvaluation of execution.rulesEvaluations; let index=index;\">\n <ng-container>\n <div class=\"ruleset-panel-title\" [class.error]=\"ruleEvaluation.error\">\n <span>{{ruleEvaluation.rule.name | titlecase}} </span>\n <span class=\"capsule error\" *ngIf=\"ruleEvaluation.error\">Error</span>\n </div>\n <div>\n <ng-container *ngIf=\"ruleEvaluation.error\">\n <span class=\"ruleset-panel-category-title\">Error:</span>\n <pre class=\"ruleset-panel-category-body error\">{{ruleEvaluation.error | o3rJsonOrString}}</pre>\n </ng-container>\n <ng-container [ngTemplateOutlet]=\"inputs\"\n [ngTemplateOutletContext]=\"{\n inputs: execution.inputFacts,\n runtimeInputs: execution.rulesetInformation?.rules[index]?.inputRuntimeFacts\n }\"></ng-container>\n <o3r-rule-actions-pres *ngIf=\"!ruleEvaluation.error\"\n [temporaryFacts]=\"ruleEvaluation.temporaryFacts\"\n [runtimeOutputs]=\"execution.rulesetInformation?.rules[index]?.outputRuntimeFacts\"\n ></o3r-rule-actions-pres>\n </div>\n </ng-container>\n </li>\n </ul>\n </ng-container>\n <ng-template #success>\n <o3r-rule-actions-pres [actions]=\"execution.outputActions\"></o3r-rule-actions-pres>\n <div class=\"ruleset-panel-category-title\">Executed Rules</div>\n <ul class=\"rule-description ruleset-panel-category-body\">\n <li *ngFor=\"let ruleEvaluation of execution.rulesEvaluations; let index=index;\">\n <div class=\"ruleset-panel-title\">\n <span>{{ruleEvaluation.rule.name | titlecase}}</span>\n <span class=\"capsule inactive\" *ngIf=\"ruleEvaluation.cached\">Cached</span>\n <span class=\"capsule\">({{ruleEvaluation.duration | number: executionDurationFormat}}ms)</span>\n </div>\n <div>\n <ng-container [ngTemplateOutlet]=\"triggers\"\n [ngTemplateOutletContext]=\"{triggers: (ruleEvaluation.triggers[ruleEvaluation.rule.id])}\"></ng-container>\n <o3r-rule-actions-pres\n [actions]=\"ruleEvaluation.outputActions\"\n [temporaryFacts]=\"ruleEvaluation.temporaryFacts\"\n [runtimeOutputs]=\"execution.rulesetInformation?.rules[index]?.outputRuntimeFacts\">\n </o3r-rule-actions-pres>\n </div>\n </li>\n </ul>\n </ng-template>\n </div>\n </li>\n </ul>\n</section>\n\n<ng-template let-triggers=\"triggers\" #triggers>\n <div class=\"ruleset-panel-category-title\">Basefacts Triggers</div>\n <ul class=\"ruleset-panel-category-body triggers\">\n <ng-container *ngFor=\"let trigger of (triggers | keyvalue)\">\n <li *ngIf=\"trigger.value?.factName\">\n <o3r-rule-key-value-pres\n [key]=\"trigger.value.factName\"\n [oldValue]=\"trigger.value.oldValue | o3rFallbackTo\"\n [value]=\"trigger.value.newValue | o3rFallbackTo\"\n [type]=\"'state'\"></o3r-rule-key-value-pres>\n </li>\n </ng-container>\n </ul>\n</ng-template>\n\n<ng-template let-rules=\"rules\" let-expansionID=\"expansionID\" #rules>\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -- need to refactor the div to accordion from DF #1518 -->\n <div class=\"ruleset-panel-category-title ruleset-expansion-action\"\n (click)=\"toggleExpansion(expansionID, 'rulesOverview')\">\n <span>Rules Overview</span>\n <button class=\"icon\"\n [class.icon-caret-down]=\"!expansionStatus[expansionID]?.rulesOverview\"\n [class.icon-caret-up]=\"expansionStatus[expansionID]?.rulesOverview\">\n </button>\n </div>\n <ng-container *ngIf=\"expansionStatus[expansionID]?.rulesOverview\">\n <div *ngIf=\"rules?.length === 0\" class=\"ruleset-panel-category-body empty\">No rule</div>\n <ul class=\"ruleset-panel-category-body\" *ngIf=\"rules?.length > 0\">\n <li *ngFor=\"let rule of rules\">\n <o3r-rule-tree-pres [name]=\"rule.name\"\n [condition]=\"rule?.rootElement?.condition\"\n [blockType]=\"rule?.rootElement?.blockType\"\n [successElements]=\"rule?.rootElement?.successElements\"\n [failureElements]=\"rule?.rootElement?.failureElements\">\n </o3r-rule-tree-pres>\n </li>\n </ul>\n </ng-container>\n</ng-template>\n\n<ng-template let-inputs=\"inputs\" let-runtimeInputs=\"runtimeInputs\" #inputs>\n <div class=\"ruleset-panel-category-title\">Inputs snapshot</div>\n <div *ngIf=\"inputs?.length === 0\" class=\"ruleset-panel-category-body empty\">No inputs</div>\n <ul class=\"ruleset-panel-category-body\" *ngIf=\"inputs?.length > 0\">\n <li *ngFor=\"let input of inputs\">\n <o3r-rule-key-value-pres\n [key]=\"input.factName\"\n [value]=\"input.value | o3rFallbackTo\"\n [type]=\"'state'\"></o3r-rule-key-value-pres>\n </li>\n <li *ngFor=\"let input of runtimeInputs\">{{input}} (scope limited to ruleset)</li>\n </ul>\n</ng-template>\n", styles: ["o3r-ruleset-history-pres .ruleset-panel-title,o3r-ruleset-history-pres .ruleset-panel-category-title{display:flex;justify-content:space-between;align-items:center}o3r-ruleset-history-pres .ruleset-panel-title{font-size:1rem;padding:.5rem 0 .1rem}o3r-ruleset-history-pres .ruleset-expansion-action,o3r-ruleset-history-pres .icon-caret-down,o3r-ruleset-history-pres .icon-caret-up{cursor:pointer}o3r-ruleset-history-pres .ruleset-panel-subtitle{font-size:.75rem}o3r-ruleset-history-pres .ruleset-panel-title-aside{display:flex;flex-wrap:wrap;justify-content:flex-end;align-items:center;min-width:fit-content}o3r-ruleset-history-pres .ruleset-panel-category-title{font-size:.95rem;background:#eee;padding:.5rem;margin-bottom:.5rem;margin-top:1rem}o3r-ruleset-history-pres .rule-description .ruleset-panel-category-title{font-size:.893rem;cursor:default}o3r-ruleset-history-pres .rule-description .ruleset-panel-title{font-size:.94rem}o3r-ruleset-history-pres .rule-description .ruleset-panel-category-body{padding-bottom:.5rem;padding-left:1.5rem}o3r-ruleset-history-pres .rule-description .ruleset-panel-category-body:empty{margin:0;padding:0 0 0 1.5rem}o3r-ruleset-history-pres .rulesets{margin:0;padding:0;list-style:none}o3r-ruleset-history-pres .rulesets ul{margin:0;padding-left:2rem}o3r-ruleset-history-pres .rulesets li.ruleset:nth-child(odd){background:#fbfbfb}o3r-ruleset-history-pres .ruleset-panel-category-body li{list-style:disc}o3r-ruleset-history-pres li:empty{display:none}o3r-ruleset-history-pres .ruleset{border-bottom:1px solid #dddddd}o3r-ruleset-history-pres .ruleset .ruleset-panel-description{padding:0 1rem 0 2rem;margin-bottom:2em}o3r-ruleset-history-pres .ruleset:first-child{border-top:1px solid #dddddd}o3r-ruleset-history-pres .ruleset-panel-title.ruleset-expansion-action{padding:.5rem 1rem}o3r-ruleset-history-pres .empty{font-style:italic;padding-left:1.5rem}o3r-ruleset-history-pres .ruleset-panel-category-body:empty.triggers:after{content:\"No trigger for this rule\";display:block;font-style:italic;padding-bottom:.5rem}o3r-ruleset-history-pres .ruleset-panel-title-aside{padding-left:1rem}o3r-ruleset-history-pres .rule-description .capsule{font-size:.8em;padding:.1rem .5rem;margin:0 .5rem}o3r-ruleset-history-pres .icon{background:none;border:none;font-size:1em}o3r-ruleset-history-pres .capsule{padding:.3rem;margin:.5rem;font-size:.875em;min-width:6rem;text-align:center}o3r-ruleset-history-pres .capsule.time{display:flex;flex-direction:column}o3r-ruleset-history-pres .success{background-color:#16aa32;color:#fff}o3r-ruleset-history-pres .inactive{background-color:#aaa;color:#fff}o3r-ruleset-history-pres .error{color:#c02020}o3r-ruleset-history-pres .error .capsule.error{background-color:#c02020;color:#fff}o3r-ruleset-history-pres .warn{background-color:#b92;color:#fff}o3r-ruleset-history-pres .input-key{color:#26c}o3r-ruleset-history-pres .input-value{color:#c29}o3r-ruleset-history-pres .input-key,o3r-ruleset-history-pres .input-value{font-family:monospace}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.RuleTreePresComponent, selector: "o3r-rule-tree-pres", inputs: ["name", "blockType", "condition", "successElements", "failureElements"] }, { kind: "component", type: i3.RuleActionsPresComponent, selector: "o3r-rule-actions-pres", inputs: ["actions", "temporaryFacts", "runtimeOutputs"] }, { kind: "component", type: i4.RuleKeyValuePresComponent, selector: "o3r-rule-key-value-pres", inputs: ["key", "value", "oldValue", "type"] }, { kind: "pipe", type: i5.O3rFallbackToPipe, name: "o3rFallbackTo" }, { kind: "pipe", type: i1.DecimalPipe, name: "number" }, { kind: "pipe", type: i1.TitleCasePipe, name: "titlecase" }, { kind: "pipe", type: i1.DatePipe, name: "date" }, { kind: "pipe", type: i1.KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: i6.O3rJsonOrStringPipe, name: "o3rJsonOrString" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
41
41
  }
42
42
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RulesetHistoryPresComponent, decorators: [{
43
43
  type: Component,
44
- args: [{ selector: 'o3r-ruleset-history-pres', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<section>\n <h4 class=\"mb-4\">Ruleset Execution History</h4>\n <ng-template #noRulesEngine>\n <div class=\"alert alert-danger m-2\" role=\"alert\">\n The Rules Engine is not configured on this page.\n </div>\n </ng-template>\n <ul *ngIf=\"rulesetExecutions; else noRulesEngine\" class=\"rulesets\">\n <li *ngFor=\"let execution of rulesetExecutions\" class=\"ruleset\">\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -- need to refactor the div to accordion from DF #1518 -->\n <div class=\"ruleset-panel-title ruleset-expansion-action\"\n [class.error]=\"execution.type === 'RulesetExecutionError'\"\n (click)=\"toggleExpansion(execution.executionId, 'ruleset')\">\n <div><span [title]=\"'This ruleset has been evaluated ' + execution.executionCounter + ' time(s)'\">{{execution.executionCounter}}</span> - {{execution.rulesetName | titlecase }}\n <div class=\"ruleset-panel-subtitle\" *ngIf=\"execution.rulesetInformation?.linkedComponents?.or || execution.rulesetInformation?.linkedComponent\">\n <ng-container *ngFor=\"let lc of (execution.rulesetInformation?.linkedComponents?.or || [execution.rulesetInformation.linkedComponent]); last as isLast\">\n <div>{{lc.name}} {{lc.library}} <span *ngIf=\"!isLast\"> OR </span></div>\n </ng-container>\n </div>\n <div class=\"ruleset-panel-subtitle\" *ngIf=\"execution.rulesetInformation?.validityRange as validityRange\">\n Date range: {{validityRange.from}} - {{validityRange.to}}\n </div>\n </div>\n <div class=\"ruleset-panel-title-aside\">\n <span class=\"error capsule\" *ngIf=\"execution.status === 'Error'\">Error</span>\n <span class=\"success capsule\" *ngIf=\"execution.status === 'Active'\">Applied</span>\n <span class=\"inactive capsule\" *ngIf=\"execution.status === 'Deactivated'\">Deactivated</span>\n <span class=\"warn capsule\" *ngIf=\"execution.status === 'NoEffect'\">No effect</span>\n <span class=\"time capsule\">\n <span>{{execution.timestamp | date: 'HH:mm:ss SSS'}}</span>\n <span>({{execution.duration | number: executionDurationFormat}}ms)</span>\n </span>\n <button\n class=\"icon\"\n [class.icon-caret-down]=\"!expansionStatus[execution.executionId]?.ruleset\"\n [class.icon-caret-up]=\"expansionStatus[execution.executionId]?.ruleset\">\n </button>\n </div>\n </div>\n <div class=\"ruleset-panel-description\" *ngIf=\"expansionStatus[execution.executionId]?.ruleset\">\n <ng-container [ngTemplateOutlet]=\"rules\"\n [ngTemplateOutletContext]=\"{\n rules: execution.rulesetInformation.rules,\n expansionID: execution.executionId\n }\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"inputs\"\n [ngTemplateOutletContext]=\"{\n inputs: execution.inputFacts\n }\"></ng-container>\n <ng-container *ngIf=\"execution.type === 'RulesetExecutionError'; else success\">\n <div class=\"ruleset-panel-category-title\">Rules:</div>\n <ul class=\"ruleset-panel-category-body rule-description\">\n <li *ngFor=\"let ruleEvaluation of execution.rulesEvaluations; let index=index;\">\n <ng-container>\n <div class=\"ruleset-panel-title\" [class.error]=\"ruleEvaluation.error\">\n <span>{{ruleEvaluation.rule.name | titlecase}} </span>\n <span class=\"capsule error\" *ngIf=\"ruleEvaluation.error\">Error</span>\n </div>\n <div>\n <ng-container *ngIf=\"ruleEvaluation.error\">\n <span class=\"ruleset-panel-category-title\">Error:</span>\n <pre class=\"ruleset-panel-category-body error\">{{ruleEvaluation.error | o3rJsonOrString}}</pre>\n </ng-container>\n <ng-container [ngTemplateOutlet]=\"inputs\"\n [ngTemplateOutletContext]=\"{\n inputs: execution.inputFacts,\n runtimeInputs: execution.rulesetInformation?.rules[index]?.inputRuntimeFacts\n }\"></ng-container>\n <o3r-rule-actions-pres *ngIf=\"!ruleEvaluation.error\"\n [temporaryFacts]=\"ruleEvaluation.temporaryFacts\"\n [runtimeOutputs]=\"execution.rulesetInformation?.rules[index]?.outputRuntimeFacts\"\n ></o3r-rule-actions-pres>\n </div>\n </ng-container>\n </li>\n </ul>\n </ng-container>\n <ng-template #success>\n <o3r-rule-actions-pres [actions]=\"execution.outputActions\"></o3r-rule-actions-pres>\n <div class=\"ruleset-panel-category-title\">Executed Rules</div>\n <ul class=\"rule-description ruleset-panel-category-body\">\n <li *ngFor=\"let ruleEvaluation of execution.rulesEvaluations; let index=index;\">\n <div class=\"ruleset-panel-title\">\n <span>{{ruleEvaluation.rule.name | titlecase}}</span>\n <span class=\"capsule inactive\" *ngIf=\"ruleEvaluation.cached\">Cached</span>\n <span class=\"capsule\">({{ruleEvaluation.duration | number: executionDurationFormat}}ms)</span>\n </div>\n <div>\n <ng-container [ngTemplateOutlet]=\"triggers\"\n [ngTemplateOutletContext]=\"{triggers: (ruleEvaluation.triggers[ruleEvaluation.rule.id])}\"></ng-container>\n <o3r-rule-actions-pres\n [actions]=\"ruleEvaluation.outputActions\"\n [temporaryFacts]=\"ruleEvaluation.temporaryFacts\"\n [runtimeOutputs]=\"execution.rulesetInformation?.rules[index]?.outputRuntimeFacts\">\n </o3r-rule-actions-pres>\n </div>\n </li>\n </ul>\n </ng-template>\n </div>\n </li>\n </ul>\n</section>\n\n<ng-template let-triggers=\"triggers\" #triggers>\n <div class=\"ruleset-panel-category-title\">Basefacts Triggers</div>\n <ul class=\"ruleset-panel-category-body triggers\">\n <ng-container *ngFor=\"let trigger of (triggers | keyvalue)\">\n <li *ngIf=\"trigger.value?.factName\">\n <o3r-rule-key-value-pres\n [key]=\"trigger.value.factName\"\n [oldValue]=\"trigger.value.oldValue | o3rFallbackTo\"\n [value]=\"trigger.value.newValue | o3rFallbackTo\"\n [type]=\"'state'\"></o3r-rule-key-value-pres>\n </li>\n </ng-container>\n </ul>\n</ng-template>\n\n<ng-template let-rules=\"rules\" let-expansionID=\"expansionID\" #rules>\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -- need to refactor the div to accordion from DF #1518 -->\n <div class=\"ruleset-panel-category-title ruleset-expansion-action\"\n (click)=\"toggleExpansion(expansionID, 'rulesOverview')\">\n <span>Rules Overview</span>\n <button class=\"icon\"\n [class.icon-caret-down]=\"!expansionStatus[expansionID]?.rulesOverview\"\n [class.icon-caret-up]=\"expansionStatus[expansionID]?.rulesOverview\">\n </button>\n </div>\n <ng-container *ngIf=\"expansionStatus[expansionID]?.rulesOverview\">\n <div *ngIf=\"rules?.length === 0\" class=\"ruleset-panel-category-body empty\">No rule</div>\n <ul class=\"ruleset-panel-category-body\" *ngIf=\"rules?.length > 0\">\n <li *ngFor=\"let rule of rules\">\n <o3r-rule-tree-pres [name]=\"rule.name\"\n [condition]=\"rule?.rootElement?.condition\"\n [blockType]=\"rule?.rootElement?.blockType\"\n [successElements]=\"rule?.rootElement?.successElements\"\n [failureElements]=\"rule?.rootElement?.failureElements\">\n </o3r-rule-tree-pres>\n </li>\n </ul>\n </ng-container>\n</ng-template>\n\n<ng-template let-inputs=\"inputs\" let-runtimeInputs=\"runtimeInputs\" #inputs>\n <div class=\"ruleset-panel-category-title\">Inputs snapshot</div>\n <div *ngIf=\"inputs?.length === 0\" class=\"ruleset-panel-category-body empty\">No inputs</div>\n <ul class=\"ruleset-panel-category-body\" *ngIf=\"inputs?.length > 0\">\n <li *ngFor=\"let input of inputs\">\n <o3r-rule-key-value-pres\n [key]=\"input.factName\"\n [value]=\"input.value | o3rFallbackTo\"\n [type]=\"'state'\"></o3r-rule-key-value-pres>\n </li>\n <li *ngFor=\"let input of runtimeInputs\">{{input}} (scope limited to ruleset)</li>\n </ul>\n</ng-template>\n", styles: ["o3r-ruleset-history-pres .ruleset-panel-title,o3r-ruleset-history-pres .ruleset-panel-category-title{display:flex;justify-content:space-between;align-items:center}o3r-ruleset-history-pres .ruleset-panel-title{font-size:1rem;padding:.5rem 0 .1rem}o3r-ruleset-history-pres .ruleset-expansion-action,o3r-ruleset-history-pres .icon-caret-down,o3r-ruleset-history-pres .icon-caret-up{cursor:pointer}o3r-ruleset-history-pres .ruleset-panel-subtitle{font-size:.75rem}o3r-ruleset-history-pres .ruleset-panel-title-aside{display:flex;flex-wrap:wrap;justify-content:flex-end;align-items:center;min-width:fit-content}o3r-ruleset-history-pres .ruleset-panel-category-title{font-size:.95rem;background:#eee;padding:.5rem;margin-bottom:.5rem;margin-top:1rem}o3r-ruleset-history-pres .rule-description .ruleset-panel-category-title{font-size:.893rem;cursor:default}o3r-ruleset-history-pres .rule-description .ruleset-panel-title{font-size:.94rem}o3r-ruleset-history-pres .rule-description .ruleset-panel-category-body{padding-bottom:.5rem;padding-left:1.5rem}o3r-ruleset-history-pres .rule-description .ruleset-panel-category-body:empty{margin:0;padding:0 0 0 1.5rem}o3r-ruleset-history-pres .rulesets{margin:0;padding:0;list-style:none}o3r-ruleset-history-pres .rulesets ul{margin:0;padding-left:2rem}o3r-ruleset-history-pres .rulesets li.ruleset:nth-child(odd){background:#fbfbfb}o3r-ruleset-history-pres .ruleset-panel-category-body li{list-style:disc}o3r-ruleset-history-pres li:empty{display:none}o3r-ruleset-history-pres .ruleset{border-bottom:1px solid #dddddd}o3r-ruleset-history-pres .ruleset .ruleset-panel-description{padding:0 1rem 0 2rem;margin-bottom:2em}o3r-ruleset-history-pres .ruleset:first-child{border-top:1px solid #dddddd}o3r-ruleset-history-pres .ruleset-panel-title.ruleset-expansion-action{padding:.5rem 1rem}o3r-ruleset-history-pres .empty{font-style:italic;padding-left:1.5rem}o3r-ruleset-history-pres .ruleset-panel-category-body:empty.triggers:after{content:\"No trigger for this rule\";display:block;font-style:italic;padding-bottom:.5rem}o3r-ruleset-history-pres .ruleset-panel-title-aside{padding-left:1rem}o3r-ruleset-history-pres .rule-description .capsule{font-size:.8em;padding:.1rem .5rem;margin:0 .5rem}o3r-ruleset-history-pres .icon{background:none;border:none;font-size:1em}o3r-ruleset-history-pres .capsule{padding:.3rem;margin:.5rem;font-size:.875em;min-width:6rem;text-align:center}o3r-ruleset-history-pres .capsule.time{display:flex;flex-direction:column}o3r-ruleset-history-pres .success{background-color:#16aa32;color:#fff}o3r-ruleset-history-pres .inactive{background-color:#aaa;color:#fff}o3r-ruleset-history-pres .error{color:#c02020}o3r-ruleset-history-pres .error .capsule.error{background-color:#c02020;color:#fff}o3r-ruleset-history-pres .warn{background-color:#b92;color:#fff}o3r-ruleset-history-pres .input-key{color:#26c}o3r-ruleset-history-pres .input-value{color:#c29}o3r-ruleset-history-pres .input-key,o3r-ruleset-history-pres .input-value{font-family:monospace}\n"] }]
44
+ args: [{ selector: 'o3r-ruleset-history-pres', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<section>\n <ng-template #noRulesEngine>\n <div class=\"alert alert-danger m-2\" role=\"alert\">\n The Rules Engine is not configured on this page.\n </div>\n </ng-template>\n <ul *ngIf=\"rulesetExecutions; else noRulesEngine\" class=\"rulesets\">\n <li *ngFor=\"let execution of rulesetExecutions\" class=\"ruleset\">\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -- need to refactor the div to accordion from DF #1518 -->\n <div class=\"ruleset-panel-title ruleset-expansion-action\"\n [class.error]=\"execution.type === 'RulesetExecutionError'\"\n (click)=\"toggleExpansion(execution.executionId, 'ruleset')\">\n <div><span [title]=\"'This ruleset has been evaluated ' + execution.executionCounter + ' time(s)'\">{{execution.executionCounter}}</span> - {{execution.rulesetName | titlecase }}\n <div class=\"ruleset-panel-subtitle\" *ngIf=\"execution.rulesetInformation?.linkedComponents?.or || execution.rulesetInformation?.linkedComponent\">\n <ng-container *ngFor=\"let lc of (execution.rulesetInformation?.linkedComponents?.or || [execution.rulesetInformation.linkedComponent]); last as isLast\">\n <div>{{lc.name}} {{lc.library}} <span *ngIf=\"!isLast\"> OR </span></div>\n </ng-container>\n </div>\n <div class=\"ruleset-panel-subtitle\" *ngIf=\"execution.rulesetInformation?.validityRange as validityRange\">\n Date range: {{validityRange.from}} - {{validityRange.to}}\n </div>\n </div>\n <div class=\"ruleset-panel-title-aside\">\n <span class=\"error capsule\" *ngIf=\"execution.status === 'Error'\">Error</span>\n <span class=\"success capsule\" *ngIf=\"execution.status === 'Active'\">Applied</span>\n <span class=\"inactive capsule\" *ngIf=\"execution.status === 'Deactivated'\">Deactivated</span>\n <span class=\"warn capsule\" *ngIf=\"execution.status === 'NoEffect'\">No effect</span>\n <span class=\"time capsule\">\n <span>{{execution.timestamp | date: 'HH:mm:ss SSS'}}</span>\n <span>({{execution.duration | number: executionDurationFormat}}ms)</span>\n </span>\n <button\n class=\"icon\"\n [class.icon-caret-down]=\"!expansionStatus[execution.executionId]?.ruleset\"\n [class.icon-caret-up]=\"expansionStatus[execution.executionId]?.ruleset\">\n </button>\n </div>\n </div>\n <div class=\"ruleset-panel-description\" *ngIf=\"expansionStatus[execution.executionId]?.ruleset\">\n <ng-container [ngTemplateOutlet]=\"rules\"\n [ngTemplateOutletContext]=\"{\n rules: execution.rulesetInformation.rules,\n expansionID: execution.executionId\n }\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"inputs\"\n [ngTemplateOutletContext]=\"{\n inputs: execution.inputFacts\n }\"></ng-container>\n <ng-container *ngIf=\"execution.type === 'RulesetExecutionError'; else success\">\n <div class=\"ruleset-panel-category-title\">Rules:</div>\n <ul class=\"ruleset-panel-category-body rule-description\">\n <li *ngFor=\"let ruleEvaluation of execution.rulesEvaluations; let index=index;\">\n <ng-container>\n <div class=\"ruleset-panel-title\" [class.error]=\"ruleEvaluation.error\">\n <span>{{ruleEvaluation.rule.name | titlecase}} </span>\n <span class=\"capsule error\" *ngIf=\"ruleEvaluation.error\">Error</span>\n </div>\n <div>\n <ng-container *ngIf=\"ruleEvaluation.error\">\n <span class=\"ruleset-panel-category-title\">Error:</span>\n <pre class=\"ruleset-panel-category-body error\">{{ruleEvaluation.error | o3rJsonOrString}}</pre>\n </ng-container>\n <ng-container [ngTemplateOutlet]=\"inputs\"\n [ngTemplateOutletContext]=\"{\n inputs: execution.inputFacts,\n runtimeInputs: execution.rulesetInformation?.rules[index]?.inputRuntimeFacts\n }\"></ng-container>\n <o3r-rule-actions-pres *ngIf=\"!ruleEvaluation.error\"\n [temporaryFacts]=\"ruleEvaluation.temporaryFacts\"\n [runtimeOutputs]=\"execution.rulesetInformation?.rules[index]?.outputRuntimeFacts\"\n ></o3r-rule-actions-pres>\n </div>\n </ng-container>\n </li>\n </ul>\n </ng-container>\n <ng-template #success>\n <o3r-rule-actions-pres [actions]=\"execution.outputActions\"></o3r-rule-actions-pres>\n <div class=\"ruleset-panel-category-title\">Executed Rules</div>\n <ul class=\"rule-description ruleset-panel-category-body\">\n <li *ngFor=\"let ruleEvaluation of execution.rulesEvaluations; let index=index;\">\n <div class=\"ruleset-panel-title\">\n <span>{{ruleEvaluation.rule.name | titlecase}}</span>\n <span class=\"capsule inactive\" *ngIf=\"ruleEvaluation.cached\">Cached</span>\n <span class=\"capsule\">({{ruleEvaluation.duration | number: executionDurationFormat}}ms)</span>\n </div>\n <div>\n <ng-container [ngTemplateOutlet]=\"triggers\"\n [ngTemplateOutletContext]=\"{triggers: (ruleEvaluation.triggers[ruleEvaluation.rule.id])}\"></ng-container>\n <o3r-rule-actions-pres\n [actions]=\"ruleEvaluation.outputActions\"\n [temporaryFacts]=\"ruleEvaluation.temporaryFacts\"\n [runtimeOutputs]=\"execution.rulesetInformation?.rules[index]?.outputRuntimeFacts\">\n </o3r-rule-actions-pres>\n </div>\n </li>\n </ul>\n </ng-template>\n </div>\n </li>\n </ul>\n</section>\n\n<ng-template let-triggers=\"triggers\" #triggers>\n <div class=\"ruleset-panel-category-title\">Basefacts Triggers</div>\n <ul class=\"ruleset-panel-category-body triggers\">\n <ng-container *ngFor=\"let trigger of (triggers | keyvalue)\">\n <li *ngIf=\"trigger.value?.factName\">\n <o3r-rule-key-value-pres\n [key]=\"trigger.value.factName\"\n [oldValue]=\"trigger.value.oldValue | o3rFallbackTo\"\n [value]=\"trigger.value.newValue | o3rFallbackTo\"\n [type]=\"'state'\"></o3r-rule-key-value-pres>\n </li>\n </ng-container>\n </ul>\n</ng-template>\n\n<ng-template let-rules=\"rules\" let-expansionID=\"expansionID\" #rules>\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -- need to refactor the div to accordion from DF #1518 -->\n <div class=\"ruleset-panel-category-title ruleset-expansion-action\"\n (click)=\"toggleExpansion(expansionID, 'rulesOverview')\">\n <span>Rules Overview</span>\n <button class=\"icon\"\n [class.icon-caret-down]=\"!expansionStatus[expansionID]?.rulesOverview\"\n [class.icon-caret-up]=\"expansionStatus[expansionID]?.rulesOverview\">\n </button>\n </div>\n <ng-container *ngIf=\"expansionStatus[expansionID]?.rulesOverview\">\n <div *ngIf=\"rules?.length === 0\" class=\"ruleset-panel-category-body empty\">No rule</div>\n <ul class=\"ruleset-panel-category-body\" *ngIf=\"rules?.length > 0\">\n <li *ngFor=\"let rule of rules\">\n <o3r-rule-tree-pres [name]=\"rule.name\"\n [condition]=\"rule?.rootElement?.condition\"\n [blockType]=\"rule?.rootElement?.blockType\"\n [successElements]=\"rule?.rootElement?.successElements\"\n [failureElements]=\"rule?.rootElement?.failureElements\">\n </o3r-rule-tree-pres>\n </li>\n </ul>\n </ng-container>\n</ng-template>\n\n<ng-template let-inputs=\"inputs\" let-runtimeInputs=\"runtimeInputs\" #inputs>\n <div class=\"ruleset-panel-category-title\">Inputs snapshot</div>\n <div *ngIf=\"inputs?.length === 0\" class=\"ruleset-panel-category-body empty\">No inputs</div>\n <ul class=\"ruleset-panel-category-body\" *ngIf=\"inputs?.length > 0\">\n <li *ngFor=\"let input of inputs\">\n <o3r-rule-key-value-pres\n [key]=\"input.factName\"\n [value]=\"input.value | o3rFallbackTo\"\n [type]=\"'state'\"></o3r-rule-key-value-pres>\n </li>\n <li *ngFor=\"let input of runtimeInputs\">{{input}} (scope limited to ruleset)</li>\n </ul>\n</ng-template>\n", styles: ["o3r-ruleset-history-pres .ruleset-panel-title,o3r-ruleset-history-pres .ruleset-panel-category-title{display:flex;justify-content:space-between;align-items:center}o3r-ruleset-history-pres .ruleset-panel-title{font-size:1rem;padding:.5rem 0 .1rem}o3r-ruleset-history-pres .ruleset-expansion-action,o3r-ruleset-history-pres .icon-caret-down,o3r-ruleset-history-pres .icon-caret-up{cursor:pointer}o3r-ruleset-history-pres .ruleset-panel-subtitle{font-size:.75rem}o3r-ruleset-history-pres .ruleset-panel-title-aside{display:flex;flex-wrap:wrap;justify-content:flex-end;align-items:center;min-width:fit-content}o3r-ruleset-history-pres .ruleset-panel-category-title{font-size:.95rem;background:#eee;padding:.5rem;margin-bottom:.5rem;margin-top:1rem}o3r-ruleset-history-pres .rule-description .ruleset-panel-category-title{font-size:.893rem;cursor:default}o3r-ruleset-history-pres .rule-description .ruleset-panel-title{font-size:.94rem}o3r-ruleset-history-pres .rule-description .ruleset-panel-category-body{padding-bottom:.5rem;padding-left:1.5rem}o3r-ruleset-history-pres .rule-description .ruleset-panel-category-body:empty{margin:0;padding:0 0 0 1.5rem}o3r-ruleset-history-pres .rulesets{margin:0;padding:0;list-style:none}o3r-ruleset-history-pres .rulesets ul{margin:0;padding-left:2rem}o3r-ruleset-history-pres .rulesets li.ruleset:nth-child(odd){background:#fbfbfb}o3r-ruleset-history-pres .ruleset-panel-category-body li{list-style:disc}o3r-ruleset-history-pres li:empty{display:none}o3r-ruleset-history-pres .ruleset{border-bottom:1px solid #dddddd}o3r-ruleset-history-pres .ruleset .ruleset-panel-description{padding:0 1rem 0 2rem;margin-bottom:2em}o3r-ruleset-history-pres .ruleset:first-child{border-top:1px solid #dddddd}o3r-ruleset-history-pres .ruleset-panel-title.ruleset-expansion-action{padding:.5rem 1rem}o3r-ruleset-history-pres .empty{font-style:italic;padding-left:1.5rem}o3r-ruleset-history-pres .ruleset-panel-category-body:empty.triggers:after{content:\"No trigger for this rule\";display:block;font-style:italic;padding-bottom:.5rem}o3r-ruleset-history-pres .ruleset-panel-title-aside{padding-left:1rem}o3r-ruleset-history-pres .rule-description .capsule{font-size:.8em;padding:.1rem .5rem;margin:0 .5rem}o3r-ruleset-history-pres .icon{background:none;border:none;font-size:1em}o3r-ruleset-history-pres .capsule{padding:.3rem;margin:.5rem;font-size:.875em;min-width:6rem;text-align:center}o3r-ruleset-history-pres .capsule.time{display:flex;flex-direction:column}o3r-ruleset-history-pres .success{background-color:#16aa32;color:#fff}o3r-ruleset-history-pres .inactive{background-color:#aaa;color:#fff}o3r-ruleset-history-pres .error{color:#c02020}o3r-ruleset-history-pres .error .capsule.error{background-color:#c02020;color:#fff}o3r-ruleset-history-pres .warn{background-color:#b92;color:#fff}o3r-ruleset-history-pres .input-key{color:#26c}o3r-ruleset-history-pres .input-value{color:#c29}o3r-ruleset-history-pres .input-key,o3r-ruleset-history-pres .input-value{font-family:monospace}\n"] }]
45
45
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { rulesetExecutions: [{
46
46
  type: Input
47
47
  }], executionDurationFormat: [{
48
48
  type: Input
49
49
  }] } });
50
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZXNldC1oaXN0b3J5LXByZXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvcnVsZXMtZW5naW5lL3J1bGVzZXQtaGlzdG9yeS9ydWxlc2V0LWhpc3RvcnktcHJlcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9ydWxlcy1lbmdpbmUvcnVsZXNldC1oaXN0b3J5L3J1bGVzZXQtaGlzdG9yeS1wcmVzLnRlbXBsYXRlLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULEtBQUssRUFDTCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7O0FBd0J2QixNQUFNLE9BQU8sMkJBQTJCO0lBa0J0QyxZQUE2QixFQUFxQjtRQUFyQixPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQWpCbEQ7Ozs7Ozs7O1dBUUc7UUFDSSxvQkFBZSxHQUF1RCxFQUFFLENBQUM7UUFHekUsc0JBQWlCLEdBQTRCLEVBQUUsQ0FBQztRQUdoRCw0QkFBdUIsR0FBRyxPQUFPLENBQUM7SUFFWSxDQUFDO0lBRXREOzs7O09BSUc7SUFDSSxlQUFlLENBQUMsTUFBYyxFQUFFLFFBQWdCO1FBQ3JELElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25GLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDdEQsQ0FBQztRQUNELElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDMUIsQ0FBQztrSUFoQ1UsMkJBQTJCO3NIQUEzQiwyQkFBMkIsd0tDOUJ4QyxxMFJBNkpBOzs0RkQvSGEsMkJBQTJCO2tCQVB2QyxTQUFTOytCQUNFLDBCQUEwQixtQkFHbkIsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSTtzRkFlOUIsaUJBQWlCO3NCQUR2QixLQUFLO2dCQUlDLHVCQUF1QjtzQkFEN0IsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHR5cGUge1xuICBSdWxlc2V0LFxuICBSdWxlc2V0RXhlY3V0aW9uRXJyb3JFdmVudCxcbiAgUnVsZXNldEV4ZWN1dGlvbkV2ZW50LFxufSBmcm9tICcuLi8uLi8uLi9lbmdpbmUnO1xuXG5leHBvcnQgdHlwZSBSdWxlc2V0RXhlY3V0aW9uU3RhdHVzID0gJ0Vycm9yJyB8ICdBY3RpdmUnIHwgJ0RlYWN0aXZhdGVkJyB8ICdOb0VmZmVjdCc7XG4vKipcbiAqIE1vZGVsIG9mIGEgUnVsZXNldEV4ZWN1dGlvbiB3aXRoIG1vcmUgaW5mb3JtYXRpb24gZm9yIGRlYnVnIHB1cnBvc2VcbiAqL1xuZXhwb3J0IHR5cGUgUnVsZXNldEV4ZWN1dGlvbkRlYnVnID0gKFJ1bGVzZXRFeGVjdXRpb25FdmVudCB8IFJ1bGVzZXRFeGVjdXRpb25FcnJvckV2ZW50KSAmIHtcbiAgaXNBY3RpdmU6IGJvb2xlYW47XG4gIHN0YXR1czogUnVsZXNldEV4ZWN1dGlvblN0YXR1cztcbiAgcnVsZXNldEluZm9ybWF0aW9uOiBSdWxlc2V0IHwgdW5kZWZpbmVkO1xufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbzNyLXJ1bGVzZXQtaGlzdG9yeS1wcmVzJyxcbiAgc3R5bGVVcmxzOiBbJy4vcnVsZXNldC1oaXN0b3J5LXByZXMuc3R5bGUuc2NzcyddLFxuICB0ZW1wbGF0ZVVybDogJy4vcnVsZXNldC1oaXN0b3J5LXByZXMudGVtcGxhdGUuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIFJ1bGVzZXRIaXN0b3J5UHJlc0NvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBSZWZsZWN0cyB0aGUgc3RhdGUgb2YgZWFjaCBydWxlc2V0IGV4cGFuZGVkIGVsZW1lbnRzLlxuICAgKiBFYWNoIHJ1bGVzZXQgZW50cnkgY29udGFpbnMgYSBsaXN0IG9mIHN1YnBhbmVsIHRoYXQgY2FuIGJlIGNvbGxhcHNlZCBvciBleHBhbmRlZC5cbiAgICogUnVsZXNldCB3aG9sZSBwYW5lbCBzdGF0dXMgaXMgc3RvcmUgdGhlICdydWxlc2V0JyBlbnRyeS5cbiAgICogQGV4YW1wbGVcbiAgICogRXhwYW5kZWQgcnVsZXNldCB3aXRoIHJ1bGUgb3ZlcnZpZXcgY29sbGFwc2VkOlxuICAgKiB7J3J1bGVzZXRJZCc6IHsncnVsZXNldCcgOiB0cnVlLCAncnVsZU92ZXJ2aWV3JzogZmFsc2V9fVxuICAgKiBAbm90ZSBDb2xsYXBzaW5nIGEgcnVsZXNldCB3aWxsIG5vdCByZXNldCB0aGUgc3VicGFuZWwgZXhwYW5zaW9uIHN0YXR1c1xuICAgKi9cbiAgcHVibGljIGV4cGFuc2lvblN0YXR1czogeyBba2V5OiBzdHJpbmddOiB7IFtzdWJwYW5lbDogc3RyaW5nXTogYm9vbGVhbiB9IH0gPSB7fTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgcnVsZXNldEV4ZWN1dGlvbnM6IFJ1bGVzZXRFeGVjdXRpb25EZWJ1Z1tdID0gW107XG5cbiAgQElucHV0KClcbiAgcHVibGljIGV4ZWN1dGlvbkR1cmF0aW9uRm9ybWF0ID0gJzEuMy0zJztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGNkOiBDaGFuZ2VEZXRlY3RvclJlZikge31cblxuICAvKipcbiAgICogVG9nZ2xlIGEgcnVsZXNldCBzdWJwYW5lbFxuICAgKiBAcGFyYW0gcnVsZUlkXG4gICAqIEBwYXJhbSBzdWJwYW5lbCBlbGVtZW50IHRvIGNvbGxhcHNlLiAncnVsZXNldCcgd2lsbCB0b2dnbGUgdGhlIHdob2xlIHBhbmVsIGJ1dCB3b24ndCByZXNldCB0aGUgc3VicGFuZWxzIHN0YXRlcy5cbiAgICovXG4gIHB1YmxpYyB0b2dnbGVFeHBhbnNpb24ocnVsZUlkOiBzdHJpbmcsIHN1YnBhbmVsOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5leHBhbnNpb25TdGF0dXNbcnVsZUlkXSkge1xuICAgICAgdGhpcy5leHBhbnNpb25TdGF0dXNbcnVsZUlkXVtzdWJwYW5lbF0gPSAhdGhpcy5leHBhbnNpb25TdGF0dXNbcnVsZUlkXVtzdWJwYW5lbF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZXhwYW5zaW9uU3RhdHVzW3J1bGVJZF0gPSB7IFtzdWJwYW5lbF06IHRydWUgfTtcbiAgICB9XG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cbn1cbiIsIjxzZWN0aW9uPlxuICA8aDQgY2xhc3M9XCJtYi00XCI+UnVsZXNldCBFeGVjdXRpb24gSGlzdG9yeTwvaDQ+XG4gIDxuZy10ZW1wbGF0ZSAjbm9SdWxlc0VuZ2luZT5cbiAgICA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyIG0tMlwiIHJvbGU9XCJhbGVydFwiPlxuICAgICAgVGhlIFJ1bGVzIEVuZ2luZSBpcyBub3QgY29uZmlndXJlZCBvbiB0aGlzIHBhZ2UuXG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDx1bCAqbmdJZj1cInJ1bGVzZXRFeGVjdXRpb25zOyBlbHNlIG5vUnVsZXNFbmdpbmVcIiBjbGFzcz1cInJ1bGVzZXRzXCI+XG4gICAgPGxpICpuZ0Zvcj1cImxldCBleGVjdXRpb24gb2YgcnVsZXNldEV4ZWN1dGlvbnNcIiBjbGFzcz1cInJ1bGVzZXRcIj5cbiAgICAgIDwhLS0gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC90ZW1wbGF0ZS9jbGljay1ldmVudHMtaGF2ZS1rZXktZXZlbnRzLCBAYW5ndWxhci1lc2xpbnQvdGVtcGxhdGUvaW50ZXJhY3RpdmUtc3VwcG9ydHMtZm9jdXMgLS0gbmVlZCB0byByZWZhY3RvciB0aGUgZGl2IHRvIGFjY29yZGlvbiBmcm9tIERGICMxNTE4IC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInJ1bGVzZXQtcGFuZWwtdGl0bGUgcnVsZXNldC1leHBhbnNpb24tYWN0aW9uXCJcbiAgICAgICAgW2NsYXNzLmVycm9yXT1cImV4ZWN1dGlvbi50eXBlID09PSAnUnVsZXNldEV4ZWN1dGlvbkVycm9yJ1wiXG4gICAgICAgIChjbGljayk9XCJ0b2dnbGVFeHBhbnNpb24oZXhlY3V0aW9uLmV4ZWN1dGlvbklkLCAncnVsZXNldCcpXCI+XG4gICAgICAgIDxkaXY+PHNwYW4gW3RpdGxlXT1cIidUaGlzIHJ1bGVzZXQgaGFzIGJlZW4gZXZhbHVhdGVkICcgKyBleGVjdXRpb24uZXhlY3V0aW9uQ291bnRlciArICcgdGltZShzKSdcIj57e2V4ZWN1dGlvbi5leGVjdXRpb25Db3VudGVyfX08L3NwYW4+IC0ge3tleGVjdXRpb24ucnVsZXNldE5hbWUgfCB0aXRsZWNhc2UgfX1cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicnVsZXNldC1wYW5lbC1zdWJ0aXRsZVwiICpuZ0lmPVwiZXhlY3V0aW9uLnJ1bGVzZXRJbmZvcm1hdGlvbj8ubGlua2VkQ29tcG9uZW50cz8ub3IgfHwgZXhlY3V0aW9uLnJ1bGVzZXRJbmZvcm1hdGlvbj8ubGlua2VkQ29tcG9uZW50XCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBsYyBvZiAoZXhlY3V0aW9uLnJ1bGVzZXRJbmZvcm1hdGlvbj8ubGlua2VkQ29tcG9uZW50cz8ub3IgfHwgW2V4ZWN1dGlvbi5ydWxlc2V0SW5mb3JtYXRpb24ubGlua2VkQ29tcG9uZW50XSk7IGxhc3QgYXMgaXNMYXN0XCI+XG4gICAgICAgICAgICAgIDxkaXY+e3tsYy5uYW1lfX0ge3tsYy5saWJyYXJ5fX0gPHNwYW4gKm5nSWY9XCIhaXNMYXN0XCI+IE9SIDwvc3Bhbj48L2Rpdj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJydWxlc2V0LXBhbmVsLXN1YnRpdGxlXCIgKm5nSWY9XCJleGVjdXRpb24ucnVsZXNldEluZm9ybWF0aW9uPy52YWxpZGl0eVJhbmdlIGFzIHZhbGlkaXR5UmFuZ2VcIj5cbiAgICAgICAgICAgIERhdGUgcmFuZ2U6IHt7dmFsaWRpdHlSYW5nZS5mcm9tfX0gLSB7e3ZhbGlkaXR5UmFuZ2UudG99fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJ1bGVzZXQtcGFuZWwtdGl0bGUtYXNpZGVcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImVycm9yIGNhcHN1bGVcIiAqbmdJZj1cImV4ZWN1dGlvbi5zdGF0dXMgPT09ICdFcnJvcidcIj5FcnJvcjwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInN1Y2Nlc3MgY2Fwc3VsZVwiICpuZ0lmPVwiZXhlY3V0aW9uLnN0YXR1cyA9PT0gJ0FjdGl2ZSdcIj5BcHBsaWVkPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5hY3RpdmUgY2Fwc3VsZVwiICpuZ0lmPVwiZXhlY3V0aW9uLnN0YXR1cyA9PT0gJ0RlYWN0aXZhdGVkJ1wiPkRlYWN0aXZhdGVkPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwid2FybiBjYXBzdWxlXCIgKm5nSWY9XCJleGVjdXRpb24uc3RhdHVzID09PSAnTm9FZmZlY3QnXCI+Tm8gZWZmZWN0PC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGltZSBjYXBzdWxlXCI+XG4gICAgICAgICAgICA8c3Bhbj57e2V4ZWN1dGlvbi50aW1lc3RhbXAgfCBkYXRlOiAnSEg6bW06c3MgU1NTJ319PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4+KHt7ZXhlY3V0aW9uLmR1cmF0aW9uIHwgbnVtYmVyOiBleGVjdXRpb25EdXJhdGlvbkZvcm1hdH19bXMpPC9zcGFuPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cImljb25cIlxuICAgICAgICAgICAgW2NsYXNzLmljb24tY2FyZXQtZG93bl09XCIhZXhwYW5zaW9uU3RhdHVzW2V4ZWN1dGlvbi5leGVjdXRpb25JZF0/LnJ1bGVzZXRcIlxuICAgICAgICAgICAgW2NsYXNzLmljb24tY2FyZXQtdXBdPVwiZXhwYW5zaW9uU3RhdHVzW2V4ZWN1dGlvbi5leGVjdXRpb25JZF0/LnJ1bGVzZXRcIj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJydWxlc2V0LXBhbmVsLWRlc2NyaXB0aW9uXCIgKm5nSWY9XCJleHBhbnNpb25TdGF0dXNbZXhlY3V0aW9uLmV4ZWN1dGlvbklkXT8ucnVsZXNldFwiPlxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInJ1bGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgcnVsZXM6IGV4ZWN1dGlvbi5ydWxlc2V0SW5mb3JtYXRpb24ucnVsZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBleHBhbnNpb25JRDogZXhlY3V0aW9uLmV4ZWN1dGlvbklkXG4gICAgICAgICAgICAgICAgICAgICAgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImlucHV0c1wiXG4gICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0czogZXhlY3V0aW9uLmlucHV0RmFjdHNcbiAgICAgICAgICAgICAgICAgICAgICB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJleGVjdXRpb24udHlwZSA9PT0gJ1J1bGVzZXRFeGVjdXRpb25FcnJvcic7IGVsc2Ugc3VjY2Vzc1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJydWxlc2V0LXBhbmVsLWNhdGVnb3J5LXRpdGxlXCI+UnVsZXM6PC9kaXY+XG4gICAgICAgICAgPHVsIGNsYXNzPVwicnVsZXNldC1wYW5lbC1jYXRlZ29yeS1ib2R5IHJ1bGUtZGVzY3JpcHRpb25cIj5cbiAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgcnVsZUV2YWx1YXRpb24gb2YgZXhlY3V0aW9uLnJ1bGVzRXZhbHVhdGlvbnM7IGxldCBpbmRleD1pbmRleDtcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnVsZXNldC1wYW5lbC10aXRsZVwiIFtjbGFzcy5lcnJvcl09XCJydWxlRXZhbHVhdGlvbi5lcnJvclwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3tydWxlRXZhbHVhdGlvbi5ydWxlLm5hbWUgfCB0aXRsZWNhc2V9fSA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcHN1bGUgZXJyb3JcIiAqbmdJZj1cInJ1bGVFdmFsdWF0aW9uLmVycm9yXCI+RXJyb3I8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJydWxlRXZhbHVhdGlvbi5lcnJvclwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJ1bGVzZXQtcGFuZWwtY2F0ZWdvcnktdGl0bGVcIj5FcnJvcjo8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxwcmUgY2xhc3M9XCJydWxlc2V0LXBhbmVsLWNhdGVnb3J5LWJvZHkgZXJyb3JcIj57e3J1bGVFdmFsdWF0aW9uLmVycm9yIHwgbzNySnNvbk9yU3RyaW5nfX08L3ByZT5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJpbnB1dHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0czogZXhlY3V0aW9uLmlucHV0RmFjdHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVudGltZUlucHV0czogZXhlY3V0aW9uLnJ1bGVzZXRJbmZvcm1hdGlvbj8ucnVsZXNbaW5kZXhdPy5pbnB1dFJ1bnRpbWVGYWN0c1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8bzNyLXJ1bGUtYWN0aW9ucy1wcmVzICpuZ0lmPVwiIXJ1bGVFdmFsdWF0aW9uLmVycm9yXCJcbiAgICAgICAgICAgICAgICAgICAgW3RlbXBvcmFyeUZhY3RzXT1cInJ1bGVFdmFsdWF0aW9uLnRlbXBvcmFyeUZhY3RzXCJcbiAgICAgICAgICAgICAgICAgICAgW3J1bnRpbWVPdXRwdXRzXT1cImV4ZWN1dGlvbi5ydWxlc2V0SW5mb3JtYXRpb24/LnJ1bGVzW2luZGV4XT8ub3V0cHV0UnVudGltZUZhY3RzXCJcbiAgICAgICAgICAgICAgICAgID48L28zci1ydWxlLWFjdGlvbnMtcHJlcz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctdGVtcGxhdGUgI3N1Y2Nlc3M+XG4gICAgICAgICAgPG8zci1ydWxlLWFjdGlvbnMtcHJlcyBbYWN0aW9uc109XCJleGVjdXRpb24ub3V0cHV0QWN0aW9uc1wiPjwvbzNyLXJ1bGUtYWN0aW9ucy1wcmVzPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJydWxlc2V0LXBhbmVsLWNhdGVnb3J5LXRpdGxlXCI+RXhlY3V0ZWQgUnVsZXM8L2Rpdj5cbiAgICAgICAgICA8dWwgY2xhc3M9XCJydWxlLWRlc2NyaXB0aW9uIHJ1bGVzZXQtcGFuZWwtY2F0ZWdvcnktYm9keVwiPlxuICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBydWxlRXZhbHVhdGlvbiBvZiBleGVjdXRpb24ucnVsZXNFdmFsdWF0aW9uczsgbGV0IGluZGV4PWluZGV4O1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnVsZXNldC1wYW5lbC10aXRsZVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7cnVsZUV2YWx1YXRpb24ucnVsZS5uYW1lIHwgdGl0bGVjYXNlfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXBzdWxlIGluYWN0aXZlXCIgKm5nSWY9XCJydWxlRXZhbHVhdGlvbi5jYWNoZWRcIj5DYWNoZWQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXBzdWxlXCI+KHt7cnVsZUV2YWx1YXRpb24uZHVyYXRpb24gfCBudW1iZXI6IGV4ZWN1dGlvbkR1cmF0aW9uRm9ybWF0fX1tcyk8L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwidHJpZ2dlcnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInt0cmlnZ2VyczogKHJ1bGVFdmFsdWF0aW9uLnRyaWdnZXJzW3J1bGVFdmFsdWF0aW9uLnJ1bGUuaWRdKX1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bzNyLXJ1bGUtYWN0aW9ucy1wcmVzXG4gICAgICAgICAgICAgICAgICBbYWN0aW9uc109XCJydWxlRXZhbHVhdGlvbi5vdXRwdXRBY3Rpb25zXCJcbiAgICAgICAgICAgICAgICAgIFt0ZW1wb3JhcnlGYWN0c109XCJydWxlRXZhbHVhdGlvbi50ZW1wb3JhcnlGYWN0c1wiXG4gICAgICAgICAgICAgICAgICBbcnVudGltZU91dHB1dHNdPVwiZXhlY3V0aW9uLnJ1bGVzZXRJbmZvcm1hdGlvbj8ucnVsZXNbaW5kZXhdPy5vdXRwdXRSdW50aW1lRmFjdHNcIj5cbiAgICAgICAgICAgICAgICA8L28zci1ydWxlLWFjdGlvbnMtcHJlcz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2xpPlxuICA8L3VsPlxuPC9zZWN0aW9uPlxuXG48bmctdGVtcGxhdGUgbGV0LXRyaWdnZXJzPVwidHJpZ2dlcnNcIiAjdHJpZ2dlcnM+XG4gIDxkaXYgY2xhc3M9XCJydWxlc2V0LXBhbmVsLWNhdGVnb3J5LXRpdGxlXCI+QmFzZWZhY3RzIFRyaWdnZXJzPC9kaXY+XG4gIDx1bCBjbGFzcz1cInJ1bGVzZXQtcGFuZWwtY2F0ZWdvcnktYm9keSB0cmlnZ2Vyc1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHRyaWdnZXIgb2YgKHRyaWdnZXJzIHwga2V5dmFsdWUpXCI+XG4gICAgICA8bGkgKm5nSWY9XCJ0cmlnZ2VyLnZhbHVlPy5mYWN0TmFtZVwiPlxuICAgICAgICA8bzNyLXJ1bGUta2V5LXZhbHVlLXByZXNcbiAgICAgICAgICBba2V5XT1cInRyaWdnZXIudmFsdWUuZmFjdE5hbWVcIlxuICAgICAgICAgIFtvbGRWYWx1ZV09XCJ0cmlnZ2VyLnZhbHVlLm9sZFZhbHVlIHwgbzNyRmFsbGJhY2tUb1wiXG4gICAgICAgICAgW3ZhbHVlXT1cInRyaWdnZXIudmFsdWUubmV3VmFsdWUgfCBvM3JGYWxsYmFja1RvXCJcbiAgICAgICAgICBbdHlwZV09XCInc3RhdGUnXCI+PC9vM3ItcnVsZS1rZXktdmFsdWUtcHJlcz5cbiAgICAgIDwvbGk+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvdWw+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgbGV0LXJ1bGVzPVwicnVsZXNcIiBsZXQtZXhwYW5zaW9uSUQ9XCJleHBhbnNpb25JRFwiICNydWxlcz5cbiAgPCEtLSBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L3RlbXBsYXRlL2NsaWNrLWV2ZW50cy1oYXZlLWtleS1ldmVudHMsIEBhbmd1bGFyLWVzbGludC90ZW1wbGF0ZS9pbnRlcmFjdGl2ZS1zdXBwb3J0cy1mb2N1cyAtLSBuZWVkIHRvIHJlZmFjdG9yIHRoZSBkaXYgdG8gYWNjb3JkaW9uIGZyb20gREYgIzE1MTggLS0+XG4gIDxkaXYgY2xhc3M9XCJydWxlc2V0LXBhbmVsLWNhdGVnb3J5LXRpdGxlIHJ1bGVzZXQtZXhwYW5zaW9uLWFjdGlvblwiXG4gICAgKGNsaWNrKT1cInRvZ2dsZUV4cGFuc2lvbihleHBhbnNpb25JRCwgJ3J1bGVzT3ZlcnZpZXcnKVwiPlxuICAgIDxzcGFuPlJ1bGVzIE92ZXJ2aWV3PC9zcGFuPlxuICAgIDxidXR0b24gY2xhc3M9XCJpY29uXCJcbiAgICAgICAgICAgIFtjbGFzcy5pY29uLWNhcmV0LWRvd25dPVwiIWV4cGFuc2lvblN0YXR1c1tleHBhbnNpb25JRF0/LnJ1bGVzT3ZlcnZpZXdcIlxuICAgICAgICAgICAgW2NsYXNzLmljb24tY2FyZXQtdXBdPVwiZXhwYW5zaW9uU3RhdHVzW2V4cGFuc2lvbklEXT8ucnVsZXNPdmVydmlld1wiPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImV4cGFuc2lvblN0YXR1c1tleHBhbnNpb25JRF0/LnJ1bGVzT3ZlcnZpZXdcIj5cbiAgICA8ZGl2ICpuZ0lmPVwicnVsZXM/Lmxlbmd0aCA9PT0gMFwiIGNsYXNzPVwicnVsZXNldC1wYW5lbC1jYXRlZ29yeS1ib2R5IGVtcHR5XCI+Tm8gcnVsZTwvZGl2PlxuICAgIDx1bCBjbGFzcz1cInJ1bGVzZXQtcGFuZWwtY2F0ZWdvcnktYm9keVwiICpuZ0lmPVwicnVsZXM/Lmxlbmd0aCA+IDBcIj5cbiAgICAgIDxsaSAqbmdGb3I9XCJsZXQgcnVsZSBvZiBydWxlc1wiPlxuICAgICAgICA8bzNyLXJ1bGUtdHJlZS1wcmVzIFtuYW1lXT1cInJ1bGUubmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbmRpdGlvbl09XCJydWxlPy5yb290RWxlbWVudD8uY29uZGl0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYmxvY2tUeXBlXT1cInJ1bGU/LnJvb3RFbGVtZW50Py5ibG9ja1R5cGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdWNjZXNzRWxlbWVudHNdPVwicnVsZT8ucm9vdEVsZW1lbnQ/LnN1Y2Nlc3NFbGVtZW50c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZhaWx1cmVFbGVtZW50c109XCJydWxlPy5yb290RWxlbWVudD8uZmFpbHVyZUVsZW1lbnRzXCI+XG4gICAgICAgIDwvbzNyLXJ1bGUtdHJlZS1wcmVzPlxuICAgICAgPC9saT5cbiAgICA8L3VsPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSBsZXQtaW5wdXRzPVwiaW5wdXRzXCIgbGV0LXJ1bnRpbWVJbnB1dHM9XCJydW50aW1lSW5wdXRzXCIgI2lucHV0cz5cbiAgPGRpdiBjbGFzcz1cInJ1bGVzZXQtcGFuZWwtY2F0ZWdvcnktdGl0bGVcIj5JbnB1dHMgc25hcHNob3Q8L2Rpdj5cbiAgPGRpdiAqbmdJZj1cImlucHV0cz8ubGVuZ3RoID09PSAwXCIgY2xhc3M9XCJydWxlc2V0LXBhbmVsLWNhdGVnb3J5LWJvZHkgZW1wdHlcIj5ObyBpbnB1dHM8L2Rpdj5cbiAgPHVsIGNsYXNzPVwicnVsZXNldC1wYW5lbC1jYXRlZ29yeS1ib2R5XCIgKm5nSWY9XCJpbnB1dHM/Lmxlbmd0aCA+IDBcIj5cbiAgICA8bGkgKm5nRm9yPVwibGV0IGlucHV0IG9mIGlucHV0c1wiPlxuICAgICAgPG8zci1ydWxlLWtleS12YWx1ZS1wcmVzXG4gICAgICAgIFtrZXldPVwiaW5wdXQuZmFjdE5hbWVcIlxuICAgICAgICBbdmFsdWVdPVwiaW5wdXQudmFsdWUgfCBvM3JGYWxsYmFja1RvXCJcbiAgICAgICAgW3R5cGVdPVwiJ3N0YXRlJ1wiPjwvbzNyLXJ1bGUta2V5LXZhbHVlLXByZXM+XG4gICAgPC9saT5cbiAgICA8bGkgKm5nRm9yPVwibGV0IGlucHV0IG9mIHJ1bnRpbWVJbnB1dHNcIj57e2lucHV0fX0gKHNjb3BlIGxpbWl0ZWQgdG8gcnVsZXNldCk8L2xpPlxuICA8L3VsPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZXNldC1oaXN0b3J5LXByZXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvcnVsZXMtZW5naW5lL3J1bGVzZXQtaGlzdG9yeS9ydWxlc2V0LWhpc3RvcnktcHJlcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9ydWxlcy1lbmdpbmUvcnVsZXNldC1oaXN0b3J5L3J1bGVzZXQtaGlzdG9yeS1wcmVzLnRlbXBsYXRlLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULEtBQUssRUFDTCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7O0FBd0J2QixNQUFNLE9BQU8sMkJBQTJCO0lBa0J0QyxZQUE2QixFQUFxQjtRQUFyQixPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQWpCbEQ7Ozs7Ozs7O1dBUUc7UUFDSSxvQkFBZSxHQUF1RCxFQUFFLENBQUM7UUFHekUsc0JBQWlCLEdBQTRCLEVBQUUsQ0FBQztRQUdoRCw0QkFBdUIsR0FBRyxPQUFPLENBQUM7SUFFWSxDQUFDO0lBRXREOzs7O09BSUc7SUFDSSxlQUFlLENBQUMsTUFBYyxFQUFFLFFBQWdCO1FBQ3JELElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25GLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDdEQsQ0FBQztRQUNELElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDMUIsQ0FBQztrSUFoQ1UsMkJBQTJCO3NIQUEzQiwyQkFBMkIsd0tDOUJ4QyxneFJBNEpBOzs0RkQ5SGEsMkJBQTJCO2tCQVB2QyxTQUFTOytCQUNFLDBCQUEwQixtQkFHbkIsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSTtzRkFlOUIsaUJBQWlCO3NCQUR2QixLQUFLO2dCQUlDLHVCQUF1QjtzQkFEN0IsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHR5cGUge1xuICBSdWxlc2V0LFxuICBSdWxlc2V0RXhlY3V0aW9uRXJyb3JFdmVudCxcbiAgUnVsZXNldEV4ZWN1dGlvbkV2ZW50LFxufSBmcm9tICcuLi8uLi8uLi9lbmdpbmUnO1xuXG5leHBvcnQgdHlwZSBSdWxlc2V0RXhlY3V0aW9uU3RhdHVzID0gJ0Vycm9yJyB8ICdBY3RpdmUnIHwgJ0RlYWN0aXZhdGVkJyB8ICdOb0VmZmVjdCc7XG4vKipcbiAqIE1vZGVsIG9mIGEgUnVsZXNldEV4ZWN1dGlvbiB3aXRoIG1vcmUgaW5mb3JtYXRpb24gZm9yIGRlYnVnIHB1cnBvc2VcbiAqL1xuZXhwb3J0IHR5cGUgUnVsZXNldEV4ZWN1dGlvbkRlYnVnID0gKFJ1bGVzZXRFeGVjdXRpb25FdmVudCB8IFJ1bGVzZXRFeGVjdXRpb25FcnJvckV2ZW50KSAmIHtcbiAgaXNBY3RpdmU6IGJvb2xlYW47XG4gIHN0YXR1czogUnVsZXNldEV4ZWN1dGlvblN0YXR1cztcbiAgcnVsZXNldEluZm9ybWF0aW9uOiBSdWxlc2V0IHwgdW5kZWZpbmVkO1xufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbzNyLXJ1bGVzZXQtaGlzdG9yeS1wcmVzJyxcbiAgc3R5bGVVcmxzOiBbJy4vcnVsZXNldC1oaXN0b3J5LXByZXMuc3R5bGUuc2NzcyddLFxuICB0ZW1wbGF0ZVVybDogJy4vcnVsZXNldC1oaXN0b3J5LXByZXMudGVtcGxhdGUuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIFJ1bGVzZXRIaXN0b3J5UHJlc0NvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBSZWZsZWN0cyB0aGUgc3RhdGUgb2YgZWFjaCBydWxlc2V0IGV4cGFuZGVkIGVsZW1lbnRzLlxuICAgKiBFYWNoIHJ1bGVzZXQgZW50cnkgY29udGFpbnMgYSBsaXN0IG9mIHN1YnBhbmVsIHRoYXQgY2FuIGJlIGNvbGxhcHNlZCBvciBleHBhbmRlZC5cbiAgICogUnVsZXNldCB3aG9sZSBwYW5lbCBzdGF0dXMgaXMgc3RvcmUgdGhlICdydWxlc2V0JyBlbnRyeS5cbiAgICogQGV4YW1wbGVcbiAgICogRXhwYW5kZWQgcnVsZXNldCB3aXRoIHJ1bGUgb3ZlcnZpZXcgY29sbGFwc2VkOlxuICAgKiB7J3J1bGVzZXRJZCc6IHsncnVsZXNldCcgOiB0cnVlLCAncnVsZU92ZXJ2aWV3JzogZmFsc2V9fVxuICAgKiBAbm90ZSBDb2xsYXBzaW5nIGEgcnVsZXNldCB3aWxsIG5vdCByZXNldCB0aGUgc3VicGFuZWwgZXhwYW5zaW9uIHN0YXR1c1xuICAgKi9cbiAgcHVibGljIGV4cGFuc2lvblN0YXR1czogeyBba2V5OiBzdHJpbmddOiB7IFtzdWJwYW5lbDogc3RyaW5nXTogYm9vbGVhbiB9IH0gPSB7fTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgcnVsZXNldEV4ZWN1dGlvbnM6IFJ1bGVzZXRFeGVjdXRpb25EZWJ1Z1tdID0gW107XG5cbiAgQElucHV0KClcbiAgcHVibGljIGV4ZWN1dGlvbkR1cmF0aW9uRm9ybWF0ID0gJzEuMy0zJztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGNkOiBDaGFuZ2VEZXRlY3RvclJlZikge31cblxuICAvKipcbiAgICogVG9nZ2xlIGEgcnVsZXNldCBzdWJwYW5lbFxuICAgKiBAcGFyYW0gcnVsZUlkXG4gICAqIEBwYXJhbSBzdWJwYW5lbCBlbGVtZW50IHRvIGNvbGxhcHNlLiAncnVsZXNldCcgd2lsbCB0b2dnbGUgdGhlIHdob2xlIHBhbmVsIGJ1dCB3b24ndCByZXNldCB0aGUgc3VicGFuZWxzIHN0YXRlcy5cbiAgICovXG4gIHB1YmxpYyB0b2dnbGVFeHBhbnNpb24ocnVsZUlkOiBzdHJpbmcsIHN1YnBhbmVsOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5leHBhbnNpb25TdGF0dXNbcnVsZUlkXSkge1xuICAgICAgdGhpcy5leHBhbnNpb25TdGF0dXNbcnVsZUlkXVtzdWJwYW5lbF0gPSAhdGhpcy5leHBhbnNpb25TdGF0dXNbcnVsZUlkXVtzdWJwYW5lbF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZXhwYW5zaW9uU3RhdHVzW3J1bGVJZF0gPSB7IFtzdWJwYW5lbF06IHRydWUgfTtcbiAgICB9XG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cbn1cbiIsIjxzZWN0aW9uPlxuICA8bmctdGVtcGxhdGUgI25vUnVsZXNFbmdpbmU+XG4gICAgPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlciBtLTJcIiByb2xlPVwiYWxlcnRcIj5cbiAgICAgIFRoZSBSdWxlcyBFbmdpbmUgaXMgbm90IGNvbmZpZ3VyZWQgb24gdGhpcyBwYWdlLlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuICA8dWwgKm5nSWY9XCJydWxlc2V0RXhlY3V0aW9uczsgZWxzZSBub1J1bGVzRW5naW5lXCIgY2xhc3M9XCJydWxlc2V0c1wiPlxuICAgIDxsaSAqbmdGb3I9XCJsZXQgZXhlY3V0aW9uIG9mIHJ1bGVzZXRFeGVjdXRpb25zXCIgY2xhc3M9XCJydWxlc2V0XCI+XG4gICAgICA8IS0tIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvdGVtcGxhdGUvY2xpY2stZXZlbnRzLWhhdmUta2V5LWV2ZW50cywgQGFuZ3VsYXItZXNsaW50L3RlbXBsYXRlL2ludGVyYWN0aXZlLXN1cHBvcnRzLWZvY3VzIC0tIG5lZWQgdG8gcmVmYWN0b3IgdGhlIGRpdiB0byBhY2NvcmRpb24gZnJvbSBERiAjMTUxOCAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJydWxlc2V0LXBhbmVsLXRpdGxlIHJ1bGVzZXQtZXhwYW5zaW9uLWFjdGlvblwiXG4gICAgICAgIFtjbGFzcy5lcnJvcl09XCJleGVjdXRpb24udHlwZSA9PT0gJ1J1bGVzZXRFeGVjdXRpb25FcnJvcidcIlxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlRXhwYW5zaW9uKGV4ZWN1dGlvbi5leGVjdXRpb25JZCwgJ3J1bGVzZXQnKVwiPlxuICAgICAgICA8ZGl2PjxzcGFuIFt0aXRsZV09XCInVGhpcyBydWxlc2V0IGhhcyBiZWVuIGV2YWx1YXRlZCAnICsgZXhlY3V0aW9uLmV4ZWN1dGlvbkNvdW50ZXIgKyAnIHRpbWUocyknXCI+e3tleGVjdXRpb24uZXhlY3V0aW9uQ291bnRlcn19PC9zcGFuPiAtIHt7ZXhlY3V0aW9uLnJ1bGVzZXROYW1lIHwgdGl0bGVjYXNlIH19XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJ1bGVzZXQtcGFuZWwtc3VidGl0bGVcIiAqbmdJZj1cImV4ZWN1dGlvbi5ydWxlc2V0SW5mb3JtYXRpb24/LmxpbmtlZENvbXBvbmVudHM/Lm9yIHx8IGV4ZWN1dGlvbi5ydWxlc2V0SW5mb3JtYXRpb24/LmxpbmtlZENvbXBvbmVudFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbGMgb2YgKGV4ZWN1dGlvbi5ydWxlc2V0SW5mb3JtYXRpb24/LmxpbmtlZENvbXBvbmVudHM/Lm9yIHx8IFtleGVjdXRpb24ucnVsZXNldEluZm9ybWF0aW9uLmxpbmtlZENvbXBvbmVudF0pOyBsYXN0IGFzIGlzTGFzdFwiPlxuICAgICAgICAgICAgICA8ZGl2Pnt7bGMubmFtZX19IHt7bGMubGlicmFyeX19IDxzcGFuICpuZ0lmPVwiIWlzTGFzdFwiPiBPUiA8L3NwYW4+PC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicnVsZXNldC1wYW5lbC1zdWJ0aXRsZVwiICpuZ0lmPVwiZXhlY3V0aW9uLnJ1bGVzZXRJbmZvcm1hdGlvbj8udmFsaWRpdHlSYW5nZSBhcyB2YWxpZGl0eVJhbmdlXCI+XG4gICAgICAgICAgICBEYXRlIHJhbmdlOiB7e3ZhbGlkaXR5UmFuZ2UuZnJvbX19IC0ge3t2YWxpZGl0eVJhbmdlLnRvfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJydWxlc2V0LXBhbmVsLXRpdGxlLWFzaWRlXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJlcnJvciBjYXBzdWxlXCIgKm5nSWY9XCJleGVjdXRpb24uc3RhdHVzID09PSAnRXJyb3InXCI+RXJyb3I8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdWNjZXNzIGNhcHN1bGVcIiAqbmdJZj1cImV4ZWN1dGlvbi5zdGF0dXMgPT09ICdBY3RpdmUnXCI+QXBwbGllZDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImluYWN0aXZlIGNhcHN1bGVcIiAqbmdJZj1cImV4ZWN1dGlvbi5zdGF0dXMgPT09ICdEZWFjdGl2YXRlZCdcIj5EZWFjdGl2YXRlZDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIndhcm4gY2Fwc3VsZVwiICpuZ0lmPVwiZXhlY3V0aW9uLnN0YXR1cyA9PT0gJ05vRWZmZWN0J1wiPk5vIGVmZmVjdDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRpbWUgY2Fwc3VsZVwiPlxuICAgICAgICAgICAgPHNwYW4+e3tleGVjdXRpb24udGltZXN0YW1wIHwgZGF0ZTogJ0hIOm1tOnNzIFNTUyd9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuPih7e2V4ZWN1dGlvbi5kdXJhdGlvbiB8IG51bWJlcjogZXhlY3V0aW9uRHVyYXRpb25Gb3JtYXR9fW1zKTwvc3Bhbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJpY29uXCJcbiAgICAgICAgICAgIFtjbGFzcy5pY29uLWNhcmV0LWRvd25dPVwiIWV4cGFuc2lvblN0YXR1c1tleGVjdXRpb24uZXhlY3V0aW9uSWRdPy5ydWxlc2V0XCJcbiAgICAgICAgICAgIFtjbGFzcy5pY29uLWNhcmV0LXVwXT1cImV4cGFuc2lvblN0YXR1c1tleGVjdXRpb24uZXhlY3V0aW9uSWRdPy5ydWxlc2V0XCI+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwicnVsZXNldC1wYW5lbC1kZXNjcmlwdGlvblwiICpuZ0lmPVwiZXhwYW5zaW9uU3RhdHVzW2V4ZWN1dGlvbi5leGVjdXRpb25JZF0/LnJ1bGVzZXRcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJydWxlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGVzOiBleGVjdXRpb24ucnVsZXNldEluZm9ybWF0aW9uLnJ1bGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXhwYW5zaW9uSUQ6IGV4ZWN1dGlvbi5leGVjdXRpb25JZFxuICAgICAgICAgICAgICAgICAgICAgIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJpbnB1dHNcIlxuICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dHM6IGV4ZWN1dGlvbi5pbnB1dEZhY3RzXG4gICAgICAgICAgICAgICAgICAgICAgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZXhlY3V0aW9uLnR5cGUgPT09ICdSdWxlc2V0RXhlY3V0aW9uRXJyb3InOyBlbHNlIHN1Y2Nlc3NcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicnVsZXNldC1wYW5lbC1jYXRlZ29yeS10aXRsZVwiPlJ1bGVzOjwvZGl2PlxuICAgICAgICAgIDx1bCBjbGFzcz1cInJ1bGVzZXQtcGFuZWwtY2F0ZWdvcnktYm9keSBydWxlLWRlc2NyaXB0aW9uXCI+XG4gICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IHJ1bGVFdmFsdWF0aW9uIG9mIGV4ZWN1dGlvbi5ydWxlc0V2YWx1YXRpb25zOyBsZXQgaW5kZXg9aW5kZXg7XCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJ1bGVzZXQtcGFuZWwtdGl0bGVcIiBbY2xhc3MuZXJyb3JdPVwicnVsZUV2YWx1YXRpb24uZXJyb3JcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPnt7cnVsZUV2YWx1YXRpb24ucnVsZS5uYW1lIHwgdGl0bGVjYXNlfX0gPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXBzdWxlIGVycm9yXCIgKm5nSWY9XCJydWxlRXZhbHVhdGlvbi5lcnJvclwiPkVycm9yPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicnVsZUV2YWx1YXRpb24uZXJyb3JcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJydWxlc2V0LXBhbmVsLWNhdGVnb3J5LXRpdGxlXCI+RXJyb3I6PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8cHJlIGNsYXNzPVwicnVsZXNldC1wYW5lbC1jYXRlZ29yeS1ib2R5IGVycm9yXCI+e3tydWxlRXZhbHVhdGlvbi5lcnJvciB8IG8zckpzb25PclN0cmluZ319PC9wcmU+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiaW5wdXRzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dHM6IGV4ZWN1dGlvbi5pbnB1dEZhY3RzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bnRpbWVJbnB1dHM6IGV4ZWN1dGlvbi5ydWxlc2V0SW5mb3JtYXRpb24/LnJ1bGVzW2luZGV4XT8uaW5wdXRSdW50aW1lRmFjdHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPG8zci1ydWxlLWFjdGlvbnMtcHJlcyAqbmdJZj1cIiFydWxlRXZhbHVhdGlvbi5lcnJvclwiXG4gICAgICAgICAgICAgICAgICAgIFt0ZW1wb3JhcnlGYWN0c109XCJydWxlRXZhbHVhdGlvbi50ZW1wb3JhcnlGYWN0c1wiXG4gICAgICAgICAgICAgICAgICAgIFtydW50aW1lT3V0cHV0c109XCJleGVjdXRpb24ucnVsZXNldEluZm9ybWF0aW9uPy5ydWxlc1tpbmRleF0/Lm91dHB1dFJ1bnRpbWVGYWN0c1wiXG4gICAgICAgICAgICAgICAgICA+PC9vM3ItcnVsZS1hY3Rpb25zLXByZXM+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICA8L3VsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNzdWNjZXNzPlxuICAgICAgICAgIDxvM3ItcnVsZS1hY3Rpb25zLXByZXMgW2FjdGlvbnNdPVwiZXhlY3V0aW9uLm91dHB1dEFjdGlvbnNcIj48L28zci1ydWxlLWFjdGlvbnMtcHJlcz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicnVsZXNldC1wYW5lbC1jYXRlZ29yeS10aXRsZVwiPkV4ZWN1dGVkIFJ1bGVzPC9kaXY+XG4gICAgICAgICAgPHVsIGNsYXNzPVwicnVsZS1kZXNjcmlwdGlvbiBydWxlc2V0LXBhbmVsLWNhdGVnb3J5LWJvZHlcIj5cbiAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgcnVsZUV2YWx1YXRpb24gb2YgZXhlY3V0aW9uLnJ1bGVzRXZhbHVhdGlvbnM7IGxldCBpbmRleD1pbmRleDtcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJ1bGVzZXQtcGFuZWwtdGl0bGVcIj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57e3J1bGVFdmFsdWF0aW9uLnJ1bGUubmFtZSB8IHRpdGxlY2FzZX19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2Fwc3VsZSBpbmFjdGl2ZVwiICpuZ0lmPVwicnVsZUV2YWx1YXRpb24uY2FjaGVkXCI+Q2FjaGVkPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2Fwc3VsZVwiPih7e3J1bGVFdmFsdWF0aW9uLmR1cmF0aW9uIHwgbnVtYmVyOiBleGVjdXRpb25EdXJhdGlvbkZvcm1hdH19bXMpPC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRyaWdnZXJzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7dHJpZ2dlcnM6IChydWxlRXZhbHVhdGlvbi50cmlnZ2Vyc1tydWxlRXZhbHVhdGlvbi5ydWxlLmlkXSl9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG8zci1ydWxlLWFjdGlvbnMtcHJlc1xuICAgICAgICAgICAgICAgICAgW2FjdGlvbnNdPVwicnVsZUV2YWx1YXRpb24ub3V0cHV0QWN0aW9uc1wiXG4gICAgICAgICAgICAgICAgICBbdGVtcG9yYXJ5RmFjdHNdPVwicnVsZUV2YWx1YXRpb24udGVtcG9yYXJ5RmFjdHNcIlxuICAgICAgICAgICAgICAgICAgW3J1bnRpbWVPdXRwdXRzXT1cImV4ZWN1dGlvbi5ydWxlc2V0SW5mb3JtYXRpb24/LnJ1bGVzW2luZGV4XT8ub3V0cHV0UnVudGltZUZhY3RzXCI+XG4gICAgICAgICAgICAgICAgPC9vM3ItcnVsZS1hY3Rpb25zLXByZXM+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICA8L3VsPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9kaXY+XG4gICAgPC9saT5cbiAgPC91bD5cbjwvc2VjdGlvbj5cblxuPG5nLXRlbXBsYXRlIGxldC10cmlnZ2Vycz1cInRyaWdnZXJzXCIgI3RyaWdnZXJzPlxuICA8ZGl2IGNsYXNzPVwicnVsZXNldC1wYW5lbC1jYXRlZ29yeS10aXRsZVwiPkJhc2VmYWN0cyBUcmlnZ2VyczwvZGl2PlxuICA8dWwgY2xhc3M9XCJydWxlc2V0LXBhbmVsLWNhdGVnb3J5LWJvZHkgdHJpZ2dlcnNcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB0cmlnZ2VyIG9mICh0cmlnZ2VycyB8IGtleXZhbHVlKVwiPlxuICAgICAgPGxpICpuZ0lmPVwidHJpZ2dlci52YWx1ZT8uZmFjdE5hbWVcIj5cbiAgICAgICAgPG8zci1ydWxlLWtleS12YWx1ZS1wcmVzXG4gICAgICAgICAgW2tleV09XCJ0cmlnZ2VyLnZhbHVlLmZhY3ROYW1lXCJcbiAgICAgICAgICBbb2xkVmFsdWVdPVwidHJpZ2dlci52YWx1ZS5vbGRWYWx1ZSB8IG8zckZhbGxiYWNrVG9cIlxuICAgICAgICAgIFt2YWx1ZV09XCJ0cmlnZ2VyLnZhbHVlLm5ld1ZhbHVlIHwgbzNyRmFsbGJhY2tUb1wiXG4gICAgICAgICAgW3R5cGVdPVwiJ3N0YXRlJ1wiPjwvbzNyLXJ1bGUta2V5LXZhbHVlLXByZXM+XG4gICAgICA8L2xpPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L3VsPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlIGxldC1ydWxlcz1cInJ1bGVzXCIgbGV0LWV4cGFuc2lvbklEPVwiZXhwYW5zaW9uSURcIiAjcnVsZXM+XG4gIDwhLS0gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC90ZW1wbGF0ZS9jbGljay1ldmVudHMtaGF2ZS1rZXktZXZlbnRzLCBAYW5ndWxhci1lc2xpbnQvdGVtcGxhdGUvaW50ZXJhY3RpdmUtc3VwcG9ydHMtZm9jdXMgLS0gbmVlZCB0byByZWZhY3RvciB0aGUgZGl2IHRvIGFjY29yZGlvbiBmcm9tIERGICMxNTE4IC0tPlxuICA8ZGl2IGNsYXNzPVwicnVsZXNldC1wYW5lbC1jYXRlZ29yeS10aXRsZSBydWxlc2V0LWV4cGFuc2lvbi1hY3Rpb25cIlxuICAgIChjbGljayk9XCJ0b2dnbGVFeHBhbnNpb24oZXhwYW5zaW9uSUQsICdydWxlc092ZXJ2aWV3JylcIj5cbiAgICA8c3Bhbj5SdWxlcyBPdmVydmlldzwvc3Bhbj5cbiAgICA8YnV0dG9uIGNsYXNzPVwiaWNvblwiXG4gICAgICAgICAgICBbY2xhc3MuaWNvbi1jYXJldC1kb3duXT1cIiFleHBhbnNpb25TdGF0dXNbZXhwYW5zaW9uSURdPy5ydWxlc092ZXJ2aWV3XCJcbiAgICAgICAgICAgIFtjbGFzcy5pY29uLWNhcmV0LXVwXT1cImV4cGFuc2lvblN0YXR1c1tleHBhbnNpb25JRF0/LnJ1bGVzT3ZlcnZpZXdcIj5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJleHBhbnNpb25TdGF0dXNbZXhwYW5zaW9uSURdPy5ydWxlc092ZXJ2aWV3XCI+XG4gICAgPGRpdiAqbmdJZj1cInJ1bGVzPy5sZW5ndGggPT09IDBcIiBjbGFzcz1cInJ1bGVzZXQtcGFuZWwtY2F0ZWdvcnktYm9keSBlbXB0eVwiPk5vIHJ1bGU8L2Rpdj5cbiAgICA8dWwgY2xhc3M9XCJydWxlc2V0LXBhbmVsLWNhdGVnb3J5LWJvZHlcIiAqbmdJZj1cInJ1bGVzPy5sZW5ndGggPiAwXCI+XG4gICAgICA8bGkgKm5nRm9yPVwibGV0IHJ1bGUgb2YgcnVsZXNcIj5cbiAgICAgICAgPG8zci1ydWxlLXRyZWUtcHJlcyBbbmFtZV09XCJydWxlLm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb25kaXRpb25dPVwicnVsZT8ucm9vdEVsZW1lbnQ/LmNvbmRpdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Jsb2NrVHlwZV09XCJydWxlPy5yb290RWxlbWVudD8uYmxvY2tUeXBlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3VjY2Vzc0VsZW1lbnRzXT1cInJ1bGU/LnJvb3RFbGVtZW50Py5zdWNjZXNzRWxlbWVudHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmYWlsdXJlRWxlbWVudHNdPVwicnVsZT8ucm9vdEVsZW1lbnQ/LmZhaWx1cmVFbGVtZW50c1wiPlxuICAgICAgICA8L28zci1ydWxlLXRyZWUtcHJlcz5cbiAgICAgIDwvbGk+XG4gICAgPC91bD5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgbGV0LWlucHV0cz1cImlucHV0c1wiIGxldC1ydW50aW1lSW5wdXRzPVwicnVudGltZUlucHV0c1wiICNpbnB1dHM+XG4gIDxkaXYgY2xhc3M9XCJydWxlc2V0LXBhbmVsLWNhdGVnb3J5LXRpdGxlXCI+SW5wdXRzIHNuYXBzaG90PC9kaXY+XG4gIDxkaXYgKm5nSWY9XCJpbnB1dHM/Lmxlbmd0aCA9PT0gMFwiIGNsYXNzPVwicnVsZXNldC1wYW5lbC1jYXRlZ29yeS1ib2R5IGVtcHR5XCI+Tm8gaW5wdXRzPC9kaXY+XG4gIDx1bCBjbGFzcz1cInJ1bGVzZXQtcGFuZWwtY2F0ZWdvcnktYm9keVwiICpuZ0lmPVwiaW5wdXRzPy5sZW5ndGggPiAwXCI+XG4gICAgPGxpICpuZ0Zvcj1cImxldCBpbnB1dCBvZiBpbnB1dHNcIj5cbiAgICAgIDxvM3ItcnVsZS1rZXktdmFsdWUtcHJlc1xuICAgICAgICBba2V5XT1cImlucHV0LmZhY3ROYW1lXCJcbiAgICAgICAgW3ZhbHVlXT1cImlucHV0LnZhbHVlIHwgbzNyRmFsbGJhY2tUb1wiXG4gICAgICAgIFt0eXBlXT1cIidzdGF0ZSdcIj48L28zci1ydWxlLWtleS12YWx1ZS1wcmVzPlxuICAgIDwvbGk+XG4gICAgPGxpICpuZ0Zvcj1cImxldCBpbnB1dCBvZiBydW50aW1lSW5wdXRzXCI+e3tpbnB1dH19IChzY29wZSBsaW1pdGVkIHRvIHJ1bGVzZXQpPC9saT5cbiAgPC91bD5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -43,7 +43,7 @@ export class EngineDebugger {
43
43
  subscriber.next(list.getEntries());
44
44
  });
45
45
  performanceObserver.observe({ entryTypes: ['measure'] });
46
- return performanceObserver.disconnect();
46
+ return () => performanceObserver.disconnect();
47
47
  }).pipe(startWith([]), shareReplay(1));
48
48
  }
49
49
  async createBaseExecutionOutputObject(ruleset, executionCounter, rulesetInputFacts, runtimeFactValues, rulesetTriggers, rulesExecutions) {
@@ -144,14 +144,14 @@ export class EngineDebugger {
144
144
  }
145
145
  /**
146
146
  * Emits an 'AllActions' debug event each time the rules engine outputs the list of actions
147
- * @param actions list of outputed actions
147
+ * @param actions list of outputted actions
148
148
  */
149
149
  allActionsChange(actions) {
150
150
  const timestamp = Date.now();
151
151
  this.debugEventsSubject$.next(() => ({ timestamp, type: 'AllActions', actions }));
152
152
  }
153
153
  /**
154
- * Emits a 'RulesetExecution' debug event at the ouput of a successful ruleset execution
154
+ * Emits a 'RulesetExecution' debug event at the output of a successful ruleset execution
155
155
  * @param ruleset
156
156
  * @param executionCounter
157
157
  * @param rulesetInputFacts
@@ -165,7 +165,7 @@ export class EngineDebugger {
165
165
  this.debugEventsSubject$.next(() => this.rulesetExecution(timestamp, ruleset, executionCounter, rulesetInputFacts, allOutputActions, runtimeFactValues, rulesetTriggers, rulesExecutions));
166
166
  }
167
167
  /**
168
- * Emits a 'RulesetExecutionError' debug event at the ouput of a failing ruleset execution
168
+ * Emits a 'RulesetExecutionError' debug event at the output of a failing ruleset execution
169
169
  * @param ruleset
170
170
  * @param rulesetInputFacts
171
171
  * @param executionCounter
@@ -177,6 +177,22 @@ export class EngineDebugger {
177
177
  const timestamp = Date.now();
178
178
  this.debugEventsSubject$.next(() => this.rulesetExecutionError(timestamp, ruleset, rulesetInputFacts, executionCounter, runtimeFactValues, rulesetTriggers, rulesExecutions));
179
179
  }
180
+ /**
181
+ * Emits a 'AvailableFactsSnapshot' debug event when a fact value is updated
182
+ * @param _id
183
+ * @param factValue$
184
+ */
185
+ addAvailableFactsSnapshotEvent(_id, factValue$) {
186
+ factValue$.subscribe(async () => {
187
+ const timestamp = Date.now();
188
+ const facts = await this.getFactsSnapshot(this.registeredRuleEngine.getRegisteredFactsNames());
189
+ this.debugEventsSubject$.next(() => ({
190
+ timestamp,
191
+ type: 'AvailableFactsSnapshot',
192
+ facts
193
+ }));
194
+ });
195
+ }
180
196
  /**
181
197
  * Returns a list of fact name and value pairs
182
198
  * @param factsNames List of facts names to get the value for
@@ -192,4 +208,4 @@ export class EngineDebugger {
192
208
  return facts;
193
209
  }
194
210
  }
195
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5naW5lLmRlYnVnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2VuZ2luZS9kZWJ1Zy9lbmdpbmUuZGVidWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFVBQVUsRUFDVixhQUFhLEdBQ2QsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxXQUFXLEVBQ1gsU0FBUyxFQUNULEdBQUcsRUFDSCxjQUFjLEdBQ2YsTUFBTSxnQkFBZ0IsQ0FBQztBQXVCeEIsT0FBTyxFQUNMLGVBQWUsRUFDZix1QkFBdUIsR0FDeEIsTUFBTSxXQUFXLENBQUM7QUFVbkI7O0dBRUc7QUFDSCxNQUFNLE9BQU8sY0FBYztJQWF6Qix5REFBeUQ7SUFDekQsSUFBVyxXQUFXO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDO0lBQ25DLENBQUM7SUFFRDs7O09BR0c7SUFDSCxZQUFZLE9BQStCO1FBbkJuQyx1QkFBa0IsR0FBbUMsRUFBRSxDQUFDO1FBb0I5RCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxhQUFhLENBQTJDLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2xILElBQUksQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FDL0MsY0FBYyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxFQUN6QyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsU0FBUyxFQUFFLG1CQUFtQixDQUFDLEVBQUUsRUFBRTtZQUNuRCxNQUFNLFVBQVUsR0FBZSxNQUFNLFNBQVMsRUFBRSxDQUFDO1lBQ2pELElBQUksVUFBVSxDQUFDLElBQUksS0FBSyxrQkFBa0IsSUFBSSxVQUFVLENBQUMsSUFBSSxLQUFLLHVCQUF1QixFQUFFLENBQUM7Z0JBQzFGLElBQUksZUFBZSxHQUFHLENBQUMsQ0FBQztnQkFDeEIsVUFBVSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO29CQUMzQyxNQUFNLElBQUksR0FBRyxnQkFDWCxJQUFJLENBQUMsb0JBQW9CLEVBQUUsdUJBQXVCLElBQUksRUFDeEQsSUFBSSxVQUFVLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQy9DLE1BQU0sUUFBUSxHQUFHLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQztvQkFDcEUsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsSUFBSSxDQUFDLENBQUM7b0JBQ2hELElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO29CQUN6QixlQUFlLElBQUksUUFBUSxDQUFDO2dCQUM5QixDQUFDLENBQUMsQ0FBQztnQkFDSCxVQUFVLENBQUMsUUFBUSxHQUFHLGVBQWUsQ0FBQztZQUN4QyxDQUFDO1lBQ0QsT0FBTyxVQUFVLENBQUM7UUFDcEIsQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7WUFDakIsSUFBSSxVQUFVLENBQUMsSUFBSSxLQUFLLGtCQUFrQixFQUFFLENBQUM7Z0JBQzNDLElBQUksQ0FBQyxXQUFXLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDLFdBQVcsdUNBQXVDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNoSixDQUFDO1FBQ0gsQ0FBQyxDQUFDLEVBQ0YsS0FBSyxFQUFFLENBQ1IsQ0FBQztJQUNKLENBQUM7SUFFTyw2QkFBNkI7UUFDbkMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksVUFBVSxDQUF1QixDQUFDLFVBQVUsRUFBRSxFQUFFO1lBQzlFLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxtQkFBbUIsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUMzRCxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQTBCLENBQUMsQ0FBQztZQUM3RCxDQUFDLENBQUMsQ0FBQztZQUNILG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6RCxPQUFPLG1CQUFtQixDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVPLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxPQUFnQixFQUFFLGdCQUF3QixFQUN0RixpQkFBMkIsRUFBRSxpQkFBd0MsRUFDckUsZUFBaUUsRUFBRSxlQUFpQztRQUNwRyxNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBRWxFLE1BQU0sMEJBQTBCLEdBQXlCO1lBQ3ZELGdCQUFnQjtZQUNoQixXQUFXLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxJQUFJLGdCQUFnQixFQUFFO1lBQ2hELFNBQVMsRUFBRSxPQUFPLENBQUMsRUFBRTtZQUNyQixXQUFXLEVBQUUsT0FBTyxDQUFDLElBQUk7WUFDekIsVUFBVTtZQUNWLFFBQVEsRUFBRSxlQUFlO1lBQ3pCLGdCQUFnQixFQUFFLGVBQWUsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxFQUFFLGVBQWUsQ0FBQztZQUNwSCxjQUFjLEVBQUUsaUJBQWlCO1NBQ2xDLENBQUM7UUFDRixPQUFPLDBCQUEwQixDQUFDO0lBQ3BDLENBQUM7SUFFTyxLQUFLLENBQUMsZ0JBQWdCLENBQzVCLFNBQWlCLEVBQ2pCLE9BQWdCLEVBQ2hCLGdCQUF3QixFQUN4QixpQkFBMkIsRUFDM0IsZ0JBQStCLEVBQy9CLGlCQUF3QyxFQUN4QyxlQUFpRSxFQUNqRSxlQUFpQztRQUNqQyxNQUFNLDBCQUEwQixHQUFHLE1BQU0sSUFBSSxDQUFDLCtCQUErQixDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFFakwsTUFBTSxzQkFBc0IsR0FBMEI7WUFDcEQsU0FBUztZQUNULElBQUksRUFBRSxrQkFBa0I7WUFDeEIsYUFBYSxFQUFFLGdCQUFnQjtZQUMvQixHQUFHLDBCQUEwQjtTQUM5QixDQUFDO1FBRUYsT0FBTyxzQkFBc0IsQ0FBQztJQUNoQyxDQUFDO0lBRU8sS0FBSyxDQUFDLHFCQUFxQixDQUNqQyxTQUFpQixFQUNqQixPQUFnQixFQUNoQixpQkFBMkIsRUFDM0IsZ0JBQXdCLEVBQ3hCLGlCQUF3QyxFQUN4QyxlQUFpRSxFQUNqRSxlQUFpQztRQUVqQyxNQUFNLDBCQUEwQixHQUFHLE1BQU0sSUFBSSxDQUFDLCtCQUErQixDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFFakwsTUFBTSxtQkFBbUIsR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0UsTUFBTSwwQkFBMEIsR0FBK0I7WUFDN0QsU0FBUztZQUNULElBQUksRUFBRSx1QkFBdUI7WUFDN0Isb0JBQW9CLEVBQUUsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNsRSxNQUFNLEVBQUUsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1lBQy9DLEdBQUcsMEJBQTBCO1NBQzlCLENBQUM7UUFDRixPQUFPLDBCQUEwQixDQUFDO0lBQ3BDLENBQUM7SUFFRDs7O09BR0c7SUFDSSxrQkFBa0IsQ0FBQyxXQUF3QjtRQUNoRCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsV0FBVyxDQUFDO0lBQzFDLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSSwrQkFBK0IsQ0FDcEMsT0FBK0IsRUFDL0IsT0FBMkMsRUFDM0Msa0JBQTJCLEVBQzNCLGlCQUEyQixFQUMzQixpQkFBd0MsRUFDeEMsZ0JBQXdCLEVBQ3hCLE9BQWdCO1FBQ2hCLE1BQU0sZUFBZSxHQUFHLHVCQUF1QixDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNsRSxNQUFNLHNCQUFzQixHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFXLENBQUMsQ0FBQztRQUVqRSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsNkJBQTZCLENBQUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO1FBQy9JLENBQUM7UUFFRCxPQUFPO1lBQ0wsZ0JBQWdCO1lBQ2hCLHNCQUFzQjtZQUN0QixrQkFBa0I7WUFDbEIsZUFBZTtTQUNoQixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7T0FHRztJQUNJLG9CQUFvQixDQUFDLFFBQW1CO1FBQzdDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUNuQyxTQUFTO1lBQ1QsSUFBSSxFQUFFLG1CQUFtQjtZQUN6QixpQkFBaUIsRUFBRSxJQUFJLENBQUMsa0JBQWtCO1NBQzNDLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxvQkFBb0IsQ0FBQyxrQkFBbUQsRUFBRSxtQkFBOEI7UUFDN0csTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzdCLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2pILE1BQU0sY0FBYyxHQUFHLG1CQUFtQjtZQUN4QyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdkYsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFNUIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQ25DLFNBQVM7WUFDVCxJQUFJLEVBQUUsZ0JBQWdCO1lBQ3RCLFFBQVEsRUFBRSxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDaEksQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksZ0JBQWdCLENBQUMsT0FBc0I7UUFDNUMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0ksd0JBQXdCLENBQUMsT0FBZ0IsRUFBRSxnQkFBd0IsRUFDeEUsaUJBQTJCLEVBQUUsZ0JBQStCLEVBQUUsaUJBQXdDLEVBQ3RHLGVBQWlFLEVBQUUsZUFBaUM7UUFDcEcsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQzVGLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDO0lBQy9GLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNJLDZCQUE2QixDQUNsQyxPQUFnQixFQUNoQixpQkFBMkIsRUFDM0IsZ0JBQXdCLEVBQ3hCLGlCQUF3QyxFQUN4QyxlQUFpRSxFQUNqRSxlQUFpQztRQUVqQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQztJQUNoTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksS0FBSyxDQUFDLGdCQUFnQixDQUFDLFVBQW9CO1FBQ2hELE1BQU0sS0FBSyxHQUF1QyxFQUFFLENBQUM7UUFDckQsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQy9CLE1BQU0sSUFBSSxLQUFLLENBQUMseUNBQXlDLENBQUMsQ0FBQztRQUM3RCxDQUFDO1FBQ0QsS0FBSyxNQUFNLFFBQVEsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNsQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDL0YsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgT2JzZXJ2YWJsZSxcbiAgUmVwbGF5U3ViamVjdCxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBjb25jYXRNYXAsXG4gIHNoYXJlLFxuICBzaGFyZVJlcGxheSxcbiAgc3RhcnRXaXRoLFxuICB0YXAsXG4gIHdpdGhMYXRlc3RGcm9tLFxufSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgdHlwZSB7XG4gIFJ1bGVzRW5naW5lLFxufSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtcbiAgQmFzZVJ1bGVzZXRFeGVjdXRpb24sXG4gIERlYnVnRXZlbnQsXG4gIEV2YWx1YXRpb25SZWFzb24sXG4gIFJ1bGVFdmFsdWF0aW9uLFxuICBSdWxlRXZhbHVhdGlvbk91dHB1dCxcbiAgUnVsZXNldEV4ZWN1dGlvbkVycm9yRXZlbnQsXG4gIFJ1bGVzZXRFeGVjdXRpb25FdmVudCxcbn0gZnJvbSAnLi4vZW5naW5lLmludGVyZmFjZSc7XG5pbXBvcnQgdHlwZSB7XG4gIEZhY3RzLFxufSBmcm9tICcuLi9mYWN0JztcbmltcG9ydCB7XG4gIFJ1bGVzZXRFeGVjdXRvcixcbn0gZnJvbSAnLi4vcnVsZXNldC1leGVjdXRvcic7XG5pbXBvcnQgdHlwZSB7XG4gIEFjdGlvbkJsb2NrLFxuICBSdWxlc2V0LFxufSBmcm9tICcuLi9zdHJ1Y3R1cmUnO1xuaW1wb3J0IHtcbiAgZmxhZ0NhY2hlZFJ1bGVzLFxuICByZXRyaWV2ZVJ1bGVzZXRUcmlnZ2Vycyxcbn0gZnJvbSAnLi9oZWxwZXJzJztcblxuZXhwb3J0IGludGVyZmFjZSBFbmdpbmVEZWJ1Z2dlck9wdGlvbnMge1xuICAvKipcbiAgICogTGltaXQgb2YgZXZlbnRzIHRvIGtlZXAgaW4gdGhlIHN0YWNrIGJlZm9yZSBzdWJzY3JpYmluZyB0byB0aGUgZGVidWdFdmVudHMkIHN0cmVhbS5cbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkIG5vIGxpbWl0XG4gICAqL1xuICBldmVudHNTdGFja0xpbWl0PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFJ1bGVzIGVuZ2luZSBkZWJ1Z2dlciBvYmplY3QgdG8gZW1pdCBkZWJ1ZyBldmVudHNcbiAqL1xuZXhwb3J0IGNsYXNzIEVuZ2luZURlYnVnZ2VyIHtcbiAgcHJpdmF0ZSByZWdpc3RlcmVkUnVsZUVuZ2luZT86IFJ1bGVzRW5naW5lO1xuXG4gIHByaXZhdGUgcmVnaXN0ZXJlZFJ1bGVzZXRzOiBQaWNrPFJ1bGVzZXQsICduYW1lJyB8ICdpZCc+W10gPSBbXTtcblxuICAvLyBLZWVwIGEgc21hbGwgaGlzdG9yeSBpbiBjYXNlIHRoZSBldmVudHMkIHN0cmVhbSBmcm9tIHRoZSBlbmdpbmUgaXMgc3Vic2NyaWJlZCBhZnRlciBydWxlcyBlbmdpbmUgaW5pdGlhbGl6YXRpb25cbiAgcHJpdmF0ZSByZWFkb25seSBkZWJ1Z0V2ZW50c1N1YmplY3QkOiBSZXBsYXlTdWJqZWN0PCgpID0+IChQcm9taXNlPERlYnVnRXZlbnQ+IHwgRGVidWdFdmVudCk+O1xuXG4gIHByaXZhdGUgcGVyZm9ybWFuY2VNZWFzdXJlcyQhOiBPYnNlcnZhYmxlPFBlcmZvcm1hbmNlTWVhc3VyZVtdPjtcblxuICAvKiogU3RyZWFtIGVtaXR0aW5nIGEgZGVidWcgZXZlbnQgd2hlbiBpcyBmaXJlZDsgdGltZWxpbmUgaXMga2VwdCAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGVidWdFdmVudHMkOiBPYnNlcnZhYmxlPERlYnVnRXZlbnQ+O1xuXG4gIC8qKiBSZXRyaWV2ZWQgdGhlIHJ1bGVzIGVuZ2luZSBwbHVnZ2VkIHRvIHRoZSBkZWJ1Z2dlciAqL1xuICBwdWJsaWMgZ2V0IHJ1bGVzRW5naW5lKCk6IFJ1bGVzRW5naW5lIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5yZWdpc3RlcmVkUnVsZUVuZ2luZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZSBhIHJ1bGVzIGVuZ2luZSBkZWJ1Z2dlclxuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIHRvIGNvbmZpZ3VyZSB0aGUgZGVidWdnZXJcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM/OiBFbmdpbmVEZWJ1Z2dlck9wdGlvbnMpIHtcbiAgICB0aGlzLmRlYnVnRXZlbnRzU3ViamVjdCQgPSBuZXcgUmVwbGF5U3ViamVjdDwoKSA9PiAoUHJvbWlzZTxEZWJ1Z0V2ZW50PiB8IERlYnVnRXZlbnQpPihvcHRpb25zPy5ldmVudHNTdGFja0xpbWl0KTtcbiAgICB0aGlzLmluaXRpYWxpemVQZXJmb3JtYW5jZU9ic2VydmVyKCk7XG4gICAgdGhpcy5kZWJ1Z0V2ZW50cyQgPSB0aGlzLmRlYnVnRXZlbnRzU3ViamVjdCQucGlwZShcbiAgICAgIHdpdGhMYXRlc3RGcm9tKHRoaXMucGVyZm9ybWFuY2VNZWFzdXJlcyQpLFxuICAgICAgY29uY2F0TWFwKGFzeW5jIChbZXZlbnRGdW5jLCBwZXJmb3JtYW5jZU1lYXN1cmVzXSkgPT4ge1xuICAgICAgICBjb25zdCBkZWJ1Z0V2ZW50OiBEZWJ1Z0V2ZW50ID0gYXdhaXQgZXZlbnRGdW5jKCk7XG4gICAgICAgIGlmIChkZWJ1Z0V2ZW50LnR5cGUgPT09ICdSdWxlc2V0RXhlY3V0aW9uJyB8fCBkZWJ1Z0V2ZW50LnR5cGUgPT09ICdSdWxlc2V0RXhlY3V0aW9uRXJyb3InKSB7XG4gICAgICAgICAgbGV0IHJ1bGVzZXREdXJhdGlvbiA9IDA7XG4gICAgICAgICAgZGVidWdFdmVudC5ydWxlc0V2YWx1YXRpb25zLmZvckVhY2goKHJ1bGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1hcmsgPSBgcnVsZXMtZW5naW5lOiR7XG4gICAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJlZFJ1bGVFbmdpbmU/LnJ1bGVzRW5naW5lSW5zdGFuY2VOYW1lIHx8ICcnXG4gICAgICAgICAgICB9OiR7ZGVidWdFdmVudC5ydWxlc2V0TmFtZX06JHtydWxlLnJ1bGUubmFtZX1gO1xuICAgICAgICAgICAgY29uc3QgbWVhc3VyZXMgPSBwZXJmb3JtYW5jZU1lYXN1cmVzLmZpbHRlcigobSkgPT4gbS5uYW1lID09PSBtYXJrKTtcbiAgICAgICAgICAgIGNvbnN0IGR1cmF0aW9uID0gbWVhc3VyZXMuYXQoLTEpPy5kdXJhdGlvbiB8fCAwO1xuICAgICAgICAgICAgcnVsZS5kdXJhdGlvbiA9IGR1cmF0aW9uO1xuICAgICAgICAgICAgcnVsZXNldER1cmF0aW9uICs9IGR1cmF0aW9uO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGRlYnVnRXZlbnQuZHVyYXRpb24gPSBydWxlc2V0RHVyYXRpb247XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlYnVnRXZlbnQ7XG4gICAgICB9KSxcbiAgICAgIHRhcCgoZGVidWdFdmVudCkgPT4ge1xuICAgICAgICBpZiAoZGVidWdFdmVudC50eXBlID09PSAnUnVsZXNldEV4ZWN1dGlvbicpIHtcbiAgICAgICAgICB0aGlzLnJ1bGVzRW5naW5lPy5sb2dnZXI/LmRlYnVnPy4oYCR7ZGVidWdFdmVudC5ydWxlc2V0TmFtZX0gaGFzIGJlZW4gdHJpZ2dlcmVkIGFuZCByZXN1bHRlZCBpbiAke0pTT04uc3RyaW5naWZ5KGRlYnVnRXZlbnQub3V0cHV0QWN0aW9ucyl9YCk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgc2hhcmUoKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVQZXJmb3JtYW5jZU9ic2VydmVyKCkge1xuICAgIHRoaXMucGVyZm9ybWFuY2VNZWFzdXJlcyQgPSBuZXcgT2JzZXJ2YWJsZTxQZXJmb3JtYW5jZU1lYXN1cmVbXT4oKHN1YnNjcmliZXIpID0+IHtcbiAgICAgIGNvbnN0IHBlcmZvcm1hbmNlT2JzZXJ2ZXIgPSBuZXcgUGVyZm9ybWFuY2VPYnNlcnZlcigobGlzdCkgPT4ge1xuICAgICAgICBzdWJzY3JpYmVyLm5leHQobGlzdC5nZXRFbnRyaWVzKCkgYXMgUGVyZm9ybWFuY2VNZWFzdXJlW10pO1xuICAgICAgfSk7XG4gICAgICBwZXJmb3JtYW5jZU9ic2VydmVyLm9ic2VydmUoeyBlbnRyeVR5cGVzOiBbJ21lYXN1cmUnXSB9KTtcbiAgICAgIHJldHVybiBwZXJmb3JtYW5jZU9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICB9KS5waXBlKHN0YXJ0V2l0aChbXSksIHNoYXJlUmVwbGF5KDEpKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY3JlYXRlQmFzZUV4ZWN1dGlvbk91dHB1dE9iamVjdChydWxlc2V0OiBSdWxlc2V0LCBleGVjdXRpb25Db3VudGVyOiBudW1iZXIsXG4gICAgcnVsZXNldElucHV0RmFjdHM6IHN0cmluZ1tdLCBydW50aW1lRmFjdFZhbHVlczogUmVjb3JkPHN0cmluZywgRmFjdHM+LFxuICAgIHJ1bGVzZXRUcmlnZ2VyczogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgRXZhbHVhdGlvblJlYXNvbj4+LCBydWxlc0V4ZWN1dGlvbnM6IFJ1bGVFdmFsdWF0aW9uW10pIHtcbiAgICBjb25zdCBpbnB1dEZhY3RzID0gYXdhaXQgdGhpcy5nZXRGYWN0c1NuYXBzaG90KHJ1bGVzZXRJbnB1dEZhY3RzKTtcblxuICAgIGNvbnN0IGJhc2VSdWxlc2V0T3V0cHV0RXhlY3V0aW9uOiBCYXNlUnVsZXNldEV4ZWN1dGlvbiA9IHtcbiAgICAgIGV4ZWN1dGlvbkNvdW50ZXIsXG4gICAgICBleGVjdXRpb25JZDogYCR7cnVsZXNldC5pZH0tJHtleGVjdXRpb25Db3VudGVyfWAsXG4gICAgICBydWxlc2V0SWQ6IHJ1bGVzZXQuaWQsXG4gICAgICBydWxlc2V0TmFtZTogcnVsZXNldC5uYW1lLFxuICAgICAgaW5wdXRGYWN0cyxcbiAgICAgIHRyaWdnZXJzOiBydWxlc2V0VHJpZ2dlcnMsXG4gICAgICBydWxlc0V2YWx1YXRpb25zOiBmbGFnQ2FjaGVkUnVsZXMocnVsZXNFeGVjdXRpb25zPy5zb3J0KChhLCBiKSA9PiBhLnRpbWVzdGFtcCAtIGIudGltZXN0YW1wKSB8fCBbXSwgcnVsZXNldFRyaWdnZXJzKSxcbiAgICAgIHRlbXBvcmFyeUZhY3RzOiBydW50aW1lRmFjdFZhbHVlc1xuICAgIH07XG4gICAgcmV0dXJuIGJhc2VSdWxlc2V0T3V0cHV0RXhlY3V0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBydWxlc2V0RXhlY3V0aW9uKFxuICAgIHRpbWVzdGFtcDogbnVtYmVyLFxuICAgIHJ1bGVzZXQ6IFJ1bGVzZXQsXG4gICAgZXhlY3V0aW9uQ291bnRlcjogbnVtYmVyLFxuICAgIHJ1bGVzZXRJbnB1dEZhY3RzOiBzdHJpbmdbXSxcbiAgICBhbGxPdXRwdXRBY3Rpb25zOiBBY3Rpb25CbG9ja1tdLFxuICAgIHJ1bnRpbWVGYWN0VmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBGYWN0cz4sXG4gICAgcnVsZXNldFRyaWdnZXJzOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBFdmFsdWF0aW9uUmVhc29uPj4sXG4gICAgcnVsZXNFeGVjdXRpb25zOiBSdWxlRXZhbHVhdGlvbltdKSB7XG4gICAgY29uc3QgYmFzZVJ1bGVzZXRPdXRwdXRFeGVjdXRpb24gPSBhd2FpdCB0aGlzLmNyZWF0ZUJhc2VFeGVjdXRpb25PdXRwdXRPYmplY3QocnVsZXNldCwgZXhlY3V0aW9uQ291bnRlciwgcnVsZXNldElucHV0RmFjdHMsIHJ1bnRpbWVGYWN0VmFsdWVzLCBydWxlc2V0VHJpZ2dlcnMsIHJ1bGVzRXhlY3V0aW9ucyk7XG5cbiAgICBjb25zdCBydWxlc2V0T3V0cHV0RXhlY3V0aW9uOiBSdWxlc2V0RXhlY3V0aW9uRXZlbnQgPSB7XG4gICAgICB0aW1lc3RhbXAsXG4gICAgICB0eXBlOiAnUnVsZXNldEV4ZWN1dGlvbicsXG4gICAgICBvdXRwdXRBY3Rpb25zOiBhbGxPdXRwdXRBY3Rpb25zLFxuICAgICAgLi4uYmFzZVJ1bGVzZXRPdXRwdXRFeGVjdXRpb25cbiAgICB9O1xuXG4gICAgcmV0dXJuIHJ1bGVzZXRPdXRwdXRFeGVjdXRpb247XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJ1bGVzZXRFeGVjdXRpb25FcnJvcihcbiAgICB0aW1lc3RhbXA6IG51bWJlcixcbiAgICBydWxlc2V0OiBSdWxlc2V0LFxuICAgIHJ1bGVzZXRJbnB1dEZhY3RzOiBzdHJpbmdbXSxcbiAgICBleGVjdXRpb25Db3VudGVyOiBudW1iZXIsXG4gICAgcnVudGltZUZhY3RWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIEZhY3RzPixcbiAgICBydWxlc2V0VHJpZ2dlcnM6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIEV2YWx1YXRpb25SZWFzb24+PixcbiAgICBydWxlc0V4ZWN1dGlvbnM6IFJ1bGVFdmFsdWF0aW9uW11cbiAgKSB7XG4gICAgY29uc3QgYmFzZVJ1bGVzZXRPdXRwdXRFeGVjdXRpb24gPSBhd2FpdCB0aGlzLmNyZWF0ZUJhc2VFeGVjdXRpb25PdXRwdXRPYmplY3QocnVsZXNldCwgZXhlY3V0aW9uQ291bnRlciwgcnVsZXNldElucHV0RmFjdHMsIHJ1bnRpbWVGYWN0VmFsdWVzLCBydWxlc2V0VHJpZ2dlcnMsIHJ1bGVzRXhlY3V0aW9ucyk7XG5cbiAgICBjb25zdCBydWxlc0V4ZWNXaXRoRXJyb3JzID0gcnVsZXNFeGVjdXRpb25zLmZpbHRlcigoZXgpID0+ICEhZXggJiYgISFleC5lcnJvcik7XG4gICAgY29uc3QgcnVsZXNldE91dHB1dEV4ZWN1dGlvblNraXA6IFJ1bGVzZXRFeGVjdXRpb25FcnJvckV2ZW50ID0ge1xuICAgICAgdGltZXN0YW1wLFxuICAgICAgdHlwZTogJ1J1bGVzZXRFeGVjdXRpb25FcnJvcicsXG4gICAgICBydWxlc0NhdXNpbmdUaGVFcnJvcjogcnVsZXNFeGVjV2l0aEVycm9ycy5tYXAoKGUpID0+IGUucnVsZSkgfHwgW10sXG4gICAgICBlcnJvcnM6IHJ1bGVzRXhlY1dpdGhFcnJvcnMubWFwKChlKSA9PiBlLmVycm9yKSxcbiAgICAgIC4uLmJhc2VSdWxlc2V0T3V0cHV0RXhlY3V0aW9uXG4gICAgfTtcbiAgICByZXR1cm4gcnVsZXNldE91dHB1dEV4ZWN1dGlvblNraXA7XG4gIH1cblxuICAvKipcbiAgICogUGx1ZyB0aGUgZGVidWdnZXIgdG8gYSBSdWxlIEVuZ2luZVxuICAgKiBAcGFyYW0gcnVsZXNFbmdpbmVcbiAgICovXG4gIHB1YmxpYyByZWdpc3RlclJ1bGVFbmdpbmUocnVsZXNFbmdpbmU6IFJ1bGVzRW5naW5lKSB7XG4gICAgdGhpcy5yZWdpc3RlcmVkUnVsZUVuZ2luZSA9IHJ1bGVzRW5naW5lO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBydWxlc2V0IGV4ZWN1dGlvbiBkZWJ1ZyBpbmZvXG4gICAqIEBwYXJhbSBjdXJyUmVzXG4gICAqIEBwYXJhbSBwcmV2UmVzXG4gICAqIEBwYXJhbSBhbGxFeGVjdXRpb25zVmFsaWRcbiAgICogQHBhcmFtIHJ1bGVzZXRJbnB1dEZhY3RzXG4gICAqIEBwYXJhbSBydW50aW1lRmFjdFZhbHVlc1xuICAgKiBAcGFyYW0gZXhlY3V0aW9uQ291bnRlclxuICAgKiBAcGFyYW0gcnVsZXNldFxuICAgKi9cbiAgcHVibGljIGhhbmRsZURlYnVnUnVsZXNldEV4ZWN1dGlvbkluZm8oXG4gICAgY3VyclJlczogUnVsZUV2YWx1YXRpb25PdXRwdXRbXSxcbiAgICBwcmV2UmVzOiBSdWxlRXZhbHVhdGlvbk91dHB1dFtdIHwgdW5kZWZpbmVkLFxuICAgIGFsbEV4ZWN1dGlvbnNWYWxpZDogYm9vbGVhbixcbiAgICBydWxlc2V0SW5wdXRGYWN0czogc3RyaW5nW10sXG4gICAgcnVudGltZUZhY3RWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIEZhY3RzPixcbiAgICBleGVjdXRpb25Db3VudGVyOiBudW1iZXIsXG4gICAgcnVsZXNldDogUnVsZXNldCkge1xuICAgIGNvbnN0IHJ1bGVzZXRUcmlnZ2VycyA9IHJldHJpZXZlUnVsZXNldFRyaWdnZXJzKGN1cnJSZXMsIHByZXZSZXMpO1xuICAgIGNvbnN0IHJ1bGVzZXRPdXRwdXRFeGVjdXRpb24gPSBjdXJyUmVzLm1hcCgocikgPT4gci5ldmFsdWF0aW9uISk7XG5cbiAgICBpZiAoIWFsbEV4ZWN1dGlvbnNWYWxpZCkge1xuICAgICAgdGhpcy5hZGRSdWxlc2V0RXhlY3V0aW9uRXJyb3JFdmVudChydWxlc2V0LCBydWxlc2V0SW5wdXRGYWN0cywgZXhlY3V0aW9uQ291bnRlciwgcnVudGltZUZhY3RWYWx1ZXMsIHJ1bGVzZXRUcmlnZ2VycywgcnVsZXNldE91dHB1dEV4ZWN1dGlvbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGV4ZWN1dGlvbkNvdW50ZXIsXG4gICAgICBydWxlc2V0T3V0cHV0RXhlY3V0aW9uLFxuICAgICAgYWxsRXhlY3V0aW9uc1ZhbGlkLFxuICAgICAgcnVsZXNldFRyaWdnZXJzXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0cyBhbiAnQXZhaWxhYmxlUnVsZXNldHMnIGRlYnVnIGV2ZW50IHdoZW4gcnVsZXNldHMgYXJlIHJlZ2lzdGVyZWQgdG8gdGhlIHJ1bGVzIGVuZ2luZVxuICAgKiBAcGFyYW0gcnVsZXNldHNcbiAgICovXG4gIHB1YmxpYyBhZGRBdmFpbGFibGVSdWxlc2V0cyhydWxlc2V0czogUnVsZXNldFtdKSB7XG4gICAgY29uc3QgdGltZXN0YW1wID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLnJlZ2lzdGVyZWRSdWxlc2V0cyA9IFsuLi50aGlzLnJlZ2lzdGVyZWRSdWxlc2V0cywgLi4ucnVsZXNldHMubWFwKChyKSA9PiAoeyBuYW1lOiByLm5hbWUsIGlkOiByLmlkIH0pKV07XG4gICAgdGhpcy5kZWJ1Z0V2ZW50c1N1YmplY3QkLm5leHQoKCkgPT4gKHtcbiAgICAgIHRpbWVzdGFtcCxcbiAgICAgIHR5cGU6ICdBdmFpbGFibGVSdWxlc2V0cycsXG4gICAgICBhdmFpbGFibGVSdWxlc2V0czogdGhpcy5yZWdpc3RlcmVkUnVsZXNldHNcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogQ29tcHV0ZXMgYW5kIGVtaXRzIGFuICdBY3RpdmVSdWxlc2V0cycgZGVidWcgZXZlbnQgd2hlbiB0aGUgYWN0aXZlIHJ1bGVzZXRzIGFyZSBjaGFuZ2luZ1xuICAgKiBAcGFyYW0gcnVsZVNldEV4ZWN1dG9yTWFwIG1hcCBvZmYgYWxsIHJ1bGVzZXRzIGV4ZWN1dG9yc1xuICAgKiBAcGFyYW0gcmVzdHJpY3RpdmVSdWxlU2V0cyBpZHMgb2YgdGhlIHJ1bGVzZXRzIHRvIGFjdGl2YXRlOyBpZiBub3QgcHJvdmlkZWQgYWxsIHJlZ2lzdGVyZWQgcnVsZXNldHMgd2lsbCBiZSBjb25zaWRlcmVkIGFzIGFjdGl2ZVxuICAgKi9cbiAgcHVibGljIGFjdGl2ZVJ1bGVzZXRzQ2hhbmdlKHJ1bGVTZXRFeGVjdXRvck1hcDogUmVjb3JkPHN0cmluZywgUnVsZXNldEV4ZWN1dG9yPiwgcmVzdHJpY3RpdmVSdWxlU2V0cz86IHN0cmluZ1tdKSB7XG4gICAgY29uc3QgdGltZXN0YW1wID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBydWxlc2V0cyA9IE9iamVjdC5rZXlzKHJ1bGVTZXRFeGVjdXRvck1hcCkubWFwKChydWxlc2V0SWQpID0+IHJ1bGVTZXRFeGVjdXRvck1hcFtydWxlc2V0SWRdLmVuZ2luZVJ1bGVzZXQpO1xuICAgIGNvbnN0IGFjdGl2ZVJ1bGVzZXRzID0gcmVzdHJpY3RpdmVSdWxlU2V0c1xuICAgICAgPyBPYmplY3QudmFsdWVzKHJ1bGVzZXRzKS5maWx0ZXIoKHJ1bGVTZXQpID0+IHJlc3RyaWN0aXZlUnVsZVNldHMuaW5jbHVkZXMocnVsZVNldC5pZCkpXG4gICAgICA6IE9iamVjdC52YWx1ZXMocnVsZXNldHMpO1xuXG4gICAgdGhpcy5kZWJ1Z0V2ZW50c1N1YmplY3QkLm5leHQoKCkgPT4gKHtcbiAgICAgIHRpbWVzdGFtcCxcbiAgICAgIHR5cGU6ICdBY3RpdmVSdWxlc2V0cycsXG4gICAgICBydWxlc2V0czogYWN0aXZlUnVsZXNldHMubWFwKChhKSA9PiAoeyBuYW1lOiBydWxlU2V0RXhlY3V0b3JNYXBbYS5pZF0ucnVsZXNldC5uYW1lLCBpZDogcnVsZVNldEV4ZWN1dG9yTWFwW2EuaWRdLnJ1bGVzZXQuaWQgfSkpXG4gICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVtaXRzIGFuICdBbGxBY3Rpb25zJyBkZWJ1ZyBldmVudCBlYWNoIHRpbWUgdGhlIHJ1bGVzIGVuZ2luZSBvdXRwdXRzIHRoZSBsaXN0IG9mIGFjdGlvbnNcbiAgICogQHBhcmFtIGFjdGlvbnMgbGlzdCBvZiBvdXRwdXRlZCBhY3Rpb25zXG4gICAqL1xuICBwdWJsaWMgYWxsQWN0aW9uc0NoYW5nZShhY3Rpb25zOiBBY3Rpb25CbG9ja1tdKSB7XG4gICAgY29uc3QgdGltZXN0YW1wID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLmRlYnVnRXZlbnRzU3ViamVjdCQubmV4dCgoKSA9PiAoeyB0aW1lc3RhbXAsIHR5cGU6ICdBbGxBY3Rpb25zJywgYWN0aW9ucyB9KSk7XG4gIH1cblxuICAvKipcbiAgICogRW1pdHMgYSAnUnVsZXNldEV4ZWN1dGlvbicgZGVidWcgZXZlbnQgYXQgdGhlIG91cHV0IG9mIGEgc3VjY2Vzc2Z1bCBydWxlc2V0IGV4ZWN1dGlvblxuICAgKiBAcGFyYW0gcnVsZXNldFxuICAgKiBAcGFyYW0gZXhlY3V0aW9uQ291bnRlclxuICAgKiBAcGFyYW0gcnVsZXNldElucHV0RmFjdHNcbiAgICogQHBhcmFtIGFsbE91dHB1dEFjdGlvbnNcbiAgICogQHBhcmFtIHJ1bnRpbWVGYWN0VmFsdWVzXG4gICAqIEBwYXJhbSBydWxlc2V0VHJpZ2dlcnNcbiAgICogQHBhcmFtIHJ1bGVzRXhlY3V0aW9uc1xuICAgKi9cbiAgcHVibGljIGFkZFJ1bGVzZXRFeGVjdXRpb25FdmVudChydWxlc2V0OiBSdWxlc2V0LCBleGVjdXRpb25Db3VudGVyOiBudW1iZXIsXG4gICAgcnVsZXNldElucHV0RmFjdHM6IHN0cmluZ1tdLCBhbGxPdXRwdXRBY3Rpb25zOiBBY3Rpb25CbG9ja1tdLCBydW50aW1lRmFjdFZhbHVlczogUmVjb3JkPHN0cmluZywgRmFjdHM+LFxuICAgIHJ1bGVzZXRUcmlnZ2VyczogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgRXZhbHVhdGlvblJlYXNvbj4+LCBydWxlc0V4ZWN1dGlvbnM6IFJ1bGVFdmFsdWF0aW9uW10pIHtcbiAgICBjb25zdCB0aW1lc3RhbXAgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMuZGVidWdFdmVudHNTdWJqZWN0JC5uZXh0KCgpID0+IHRoaXMucnVsZXNldEV4ZWN1dGlvbih0aW1lc3RhbXAsIHJ1bGVzZXQsIGV4ZWN1dGlvbkNvdW50ZXIsXG4gICAgICBydWxlc2V0SW5wdXRGYWN0cywgYWxsT3V0cHV0QWN0aW9ucywgcnVudGltZUZhY3RWYWx1ZXMsIHJ1bGVzZXRUcmlnZ2VycywgcnVsZXNFeGVjdXRpb25zKSk7XG4gIH1cblxuICAvKipcbiAgICogRW1pdHMgYSAnUnVsZXNldEV4ZWN1dGlvbkVycm9yJyBkZWJ1ZyBldmVudCBhdCB0aGUgb3VwdXQgb2YgYSBmYWlsaW5nIHJ1bGVzZXQgZXhlY3V0aW9uXG4gICAqIEBwYXJhbSBydWxlc2V0XG4gICAqIEBwYXJhbSBydWxlc2V0SW5wdXRGYWN0c1xuICAgKiBAcGFyYW0gZXhlY3V0aW9uQ291bnRlclxuICAgKiBAcGFyYW0gcnVudGltZUZhY3RWYWx1ZXNcbiAgICogQHBhcmFtIHJ1bGVzZXRUcmlnZ2Vyc1xuICAgKiBAcGFyYW0gcnVsZXNFeGVjdXRpb25zXG4gICAqL1xuICBwdWJsaWMgYWRkUnVsZXNldEV4ZWN1dGlvbkVycm9yRXZlbnQoXG4gICAgcnVsZXNldDogUnVsZXNldCxcbiAgICBydWxlc2V0SW5wdXRGYWN0czogc3RyaW5nW10sXG4gICAgZXhlY3V0aW9uQ291bnRlcjogbnVtYmVyLFxuICAgIHJ1bnRpbWVGYWN0VmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBGYWN0cz4sXG4gICAgcnVsZXNldFRyaWdnZXJzOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBFdmFsdWF0aW9uUmVhc29uPj4sXG4gICAgcnVsZXNFeGVjdXRpb25zOiBSdWxlRXZhbHVhdGlvbltdXG4gICkge1xuICAgIGNvbnN0IHRpbWVzdGFtcCA9IERhdGUubm93KCk7XG4gICAgdGhpcy5kZWJ1Z0V2ZW50c1N1YmplY3QkLm5leHQoKCkgPT4gdGhpcy5ydWxlc2V0RXhlY3V0aW9uRXJyb3IodGltZXN0YW1wLCBydWxlc2V0LCBydWxlc2V0SW5wdXRGYWN0cywgZXhlY3V0aW9uQ291bnRlciwgcnVudGltZUZhY3RWYWx1ZXMsIHJ1bGVzZXRUcmlnZ2VycywgcnVsZXNFeGVjdXRpb25zKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGxpc3Qgb2YgZmFjdCBuYW1lIGFuZCB2YWx1ZSBwYWlyc1xuICAgKiBAcGFyYW0gZmFjdHNOYW1lcyBMaXN0IG9mIGZhY3RzIG5hbWVzIHRvIGdldCB0aGUgdmFsdWUgZm9yXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0RmFjdHNTbmFwc2hvdChmYWN0c05hbWVzOiBzdHJpbmdbXSkge1xuICAgIGNvbnN0IGZhY3RzOiB7IGZhY3ROYW1lOiBzdHJpbmc7IHZhbHVlOiBhbnkgfVtdID0gW107XG4gICAgaWYgKCF0aGlzLnJlZ2lzdGVyZWRSdWxlRW5naW5lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1J1bGUgZW5naW5lIG5vdCBwbHVnZ2VkIHRvIHRoZSBkZWJ1Z2dlcicpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGZhY3ROYW1lIG9mIGZhY3RzTmFtZXMpIHtcbiAgICAgIGZhY3RzLnB1c2goeyBmYWN0TmFtZSwgdmFsdWU6IGF3YWl0IHRoaXMucmVnaXN0ZXJlZFJ1bGVFbmdpbmUucmV0cmlldmVGYWN0VmFsdWUoZmFjdE5hbWUpIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZmFjdHM7XG4gIH1cbn1cbiJdfQ==
211
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5naW5lLmRlYnVnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2VuZ2luZS9kZWJ1Zy9lbmdpbmUuZGVidWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFVBQVUsRUFDVixhQUFhLEdBQ2QsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxXQUFXLEVBQ1gsU0FBUyxFQUNULEdBQUcsRUFDSCxjQUFjLEdBQ2YsTUFBTSxnQkFBZ0IsQ0FBQztBQXVCeEIsT0FBTyxFQUNMLGVBQWUsRUFDZix1QkFBdUIsR0FDeEIsTUFBTSxXQUFXLENBQUM7QUFVbkI7O0dBRUc7QUFDSCxNQUFNLE9BQU8sY0FBYztJQWF6Qix5REFBeUQ7SUFDekQsSUFBVyxXQUFXO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDO0lBQ25DLENBQUM7SUFFRDs7O09BR0c7SUFDSCxZQUFZLE9BQStCO1FBbkJuQyx1QkFBa0IsR0FBbUMsRUFBRSxDQUFDO1FBb0I5RCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxhQUFhLENBQTJDLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2xILElBQUksQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FDL0MsY0FBYyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxFQUN6QyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsU0FBUyxFQUFFLG1CQUFtQixDQUFDLEVBQUUsRUFBRTtZQUNuRCxNQUFNLFVBQVUsR0FBZSxNQUFNLFNBQVMsRUFBRSxDQUFDO1lBQ2pELElBQUksVUFBVSxDQUFDLElBQUksS0FBSyxrQkFBa0IsSUFBSSxVQUFVLENBQUMsSUFBSSxLQUFLLHVCQUF1QixFQUFFLENBQUM7Z0JBQzFGLElBQUksZUFBZSxHQUFHLENB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OlsiaW1wb3J0IHtcbiAgT2JzZXJ2YWJsZSxcbiAgUmVwbGF5U3ViamVjdCxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBjb25jYXRNYXAsXG4gIHNoYXJlLFxuICBzaGFyZVJlcGxheSxcbiAgc3RhcnRXaXRoLFxuICB0YXAsXG4gIHdpdGhMYXRlc3RGcm9tLFxufSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgdHlwZSB7XG4gIFJ1bGVzRW5naW5lLFxufSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtcbiAgQmFzZVJ1bGVzZXRFeGVjdXRpb24sXG4gIERlYnVnRXZlbnQsXG4gIEV2YWx1YXRpb25SZWFzb24sXG4gIFJ1bGVFdmFsdWF0aW9uLFxuICBSdWxlRXZhbHVhdGlvbk91dHB1dCxcbiAgUnVsZXNldEV4ZWN1dGlvbkVycm9yRXZlbnQsXG4gIFJ1bGVzZXRFeGVjdXRpb25FdmVudCxcbn0gZnJvbSAnLi4vZW5naW5lLmludGVyZmFjZSc7XG5pbXBvcnQgdHlwZSB7XG4gIEZhY3RzLFxufSBmcm9tICcuLi9mYWN0JztcbmltcG9ydCB7XG4gIFJ1bGVzZXRFeGVjdXRvcixcbn0gZnJvbSAnLi4vcnVsZXNldC1leGVjdXRvcic7XG5pbXBvcnQgdHlwZSB7XG4gIEFjdGlvbkJsb2NrLFxuICBSdWxlc2V0LFxufSBmcm9tICcuLi9zdHJ1Y3R1cmUnO1xuaW1wb3J0IHtcbiAgZmxhZ0NhY2hlZFJ1bGVzLFxuICByZXRyaWV2ZVJ1bGVzZXRUcmlnZ2Vycyxcbn0gZnJvbSAnLi9oZWxwZXJzJztcblxuZXhwb3J0IGludGVyZmFjZSBFbmdpbmVEZWJ1Z2dlck9wdGlvbnMge1xuICAvKipcbiAgICogTGltaXQgb2YgZXZlbnRzIHRvIGtlZXAgaW4gdGhlIHN0YWNrIGJlZm9yZSBzdWJzY3JpYmluZyB0byB0aGUgZGVidWdFdmVudHMkIHN0cmVhbS5cbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkIG5vIGxpbWl0XG4gICAqL1xuICBldmVudHNTdGFja0xpbWl0PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFJ1bGVzIGVuZ2luZSBkZWJ1Z2dlciBvYmplY3QgdG8gZW1pdCBkZWJ1ZyBldmVudHNcbiAqL1xuZXhwb3J0IGNsYXNzIEVuZ2luZURlYnVnZ2VyIHtcbiAgcHJpdmF0ZSByZWdpc3RlcmVkUnVsZUVuZ2luZT86IFJ1bGVzRW5naW5lO1xuXG4gIHByaXZhdGUgcmVnaXN0ZXJlZFJ1bGVzZXRzOiBQaWNrPFJ1bGVzZXQsICduYW1lJyB8ICdpZCc+W10gPSBbXTtcblxuICAvLyBLZWVwIGEgc21hbGwgaGlzdG9yeSBpbiBjYXNlIHRoZSBldmVudHMkIHN0cmVhbSBmcm9tIHRoZSBlbmdpbmUgaXMgc3Vic2NyaWJlZCBhZnRlciBydWxlcyBlbmdpbmUgaW5pdGlhbGl6YXRpb25cbiAgcHJpdmF0ZSByZWFkb25seSBkZWJ1Z0V2ZW50c1N1YmplY3QkOiBSZXBsYXlTdWJqZWN0PCgpID0+IChQcm9taXNlPERlYnVnRXZlbnQ+IHwgRGVidWdFdmVudCk+O1xuXG4gIHByaXZhdGUgcGVyZm9ybWFuY2VNZWFzdXJlcyQhOiBPYnNlcnZhYmxlPFBlcmZvcm1hbmNlTWVhc3VyZVtdPjtcblxuICAvKiogU3RyZWFtIGVtaXR0aW5nIGEgZGVidWcgZXZlbnQgd2hlbiBpcyBmaXJlZDsgdGltZWxpbmUgaXMga2VwdCAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGVidWdFdmVudHMkOiBPYnNlcnZhYmxlPERlYnVnRXZlbnQ+O1xuXG4gIC8qKiBSZXRyaWV2ZWQgdGhlIHJ1bGVzIGVuZ2luZSBwbHVnZ2VkIHRvIHRoZSBkZWJ1Z2dlciAqL1xuICBwdWJsaWMgZ2V0IHJ1bGVzRW5naW5lKCk6IFJ1bGVzRW5naW5lIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5yZWdpc3RlcmVkUnVsZUVuZ2luZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZSBhIHJ1bGVzIGVuZ2luZSBkZWJ1Z2dlclxuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIHRvIGNvbmZpZ3VyZSB0aGUgZGVidWdnZXJcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM/OiBFbmdpbmVEZWJ1Z2dlck9wdGlvbnMpIHtcbiAgICB0aGlzLmRlYnVnRXZlbnRzU3ViamVjdCQgPSBuZXcgUmVwbGF5U3ViamVjdDwoKSA9PiAoUHJvbWlzZTxEZWJ1Z0V2ZW50PiB8IERlYnVnRXZlbnQpPihvcHRpb25zPy5ldmVudHNTdGFja0xpbWl0KTtcbiAgICB0aGlzLmluaXRpYWxpemVQZXJmb3JtYW5jZU9ic2VydmVyKCk7XG4gICAgdGhpcy5kZWJ1Z0V2ZW50cyQgPSB0aGlzLmRlYnVnRXZlbnRzU3ViamVjdCQucGlwZShcbiAgICAgIHdpdGhMYXRlc3RGcm9tKHRoaXMucGVyZm9ybWFuY2VNZWFzdXJlcyQpLFxuICAgICAgY29uY2F0TWFwKGFzeW5jIChbZXZlbnRGdW5jLCBwZXJmb3JtYW5jZU1lYXN1cmVzXSkgPT4ge1xuICAgICAgICBjb25zdCBkZWJ1Z0V2ZW50OiBEZWJ1Z0V2ZW50ID0gYXdhaXQgZXZlbnRGdW5jKCk7XG4gICAgICAgIGlmIChkZWJ1Z0V2ZW50LnR5cGUgPT09ICdSdWxlc2V0RXhlY3V0aW9uJyB8fCBkZWJ1Z0V2ZW50LnR5cGUgPT09ICdSdWxlc2V0RXhlY3V0aW9uRXJyb3InKSB7XG4gICAgICAgICAgbGV0IHJ1bGVzZXREdXJhdGlvbiA9IDA7XG4gICAgICAgICAgZGVidWdFdmVudC5ydWxlc0V2YWx1YXRpb25zLmZvckVhY2goKHJ1bGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1hcmsgPSBgcnVsZXMtZW5naW5lOiR7XG4gICAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJlZFJ1bGVFbmdpbmU/LnJ1bGVzRW5naW5lSW5zdGFuY2VOYW1lIHx8ICcnXG4gICAgICAgICAgICB9OiR7ZGVidWdFdmVudC5ydWxlc2V0TmFtZX06JHtydWxlLnJ1bGUubmFtZX1gO1xuICAgICAgICAgICAgY29uc3QgbWVhc3VyZXMgPSBwZXJmb3JtYW5jZU1lYXN1cmVzLmZpbHRlcigobSkgPT4gbS5uYW1lID09PSBtYXJrKTtcbiAgICAgICAgICAgIGNvbnN0IGR1cmF0aW9uID0gbWVhc3VyZXMuYXQoLTEpPy5kdXJhdGlvbiB8fCAwO1xuICAgICAgICAgICAgcnVsZS5kdXJhdGlvbiA9IGR1cmF0aW9uO1xuICAgICAgICAgICAgcnVsZXNldER1cmF0aW9uICs9IGR1cmF0aW9uO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGRlYnVnRXZlbnQuZHVyYXRpb24gPSBydWxlc2V0RHVyYXRpb247XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlYnVnRXZlbnQ7XG4gICAgICB9KSxcbiAgICAgIHRhcCgoZGVidWdFdmVudCkgPT4ge1xuICAgICAgICBpZiAoZGVidWdFdmVudC50eXBlID09PSAnUnVsZXNldEV4ZWN1dGlvbicpIHtcbiAgICAgICAgICB0aGlzLnJ1bGVzRW5naW5lPy5sb2dnZXI/LmRlYnVnPy4oYCR7ZGVidWdFdmVudC5ydWxlc2V0TmFtZX0gaGFzIGJlZW4gdHJpZ2dlcmVkIGFuZCByZXN1bHRlZCBpbiAke0pTT04uc3RyaW5naWZ5KGRlYnVnRXZlbnQub3V0cHV0QWN0aW9ucyl9YCk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgc2hhcmUoKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVQZXJmb3JtYW5jZU9ic2VydmVyKCkge1xuICAgIHRoaXMucGVyZm9ybWFuY2VNZWFzdXJlcyQgPSBuZXcgT2JzZXJ2YWJsZTxQZXJmb3JtYW5jZU1lYXN1cmVbXT4oKHN1YnNjcmliZXIpID0+IHtcbiAgICAgIGNvbnN0IHBlcmZvcm1hbmNlT2JzZXJ2ZXIgPSBuZXcgUGVyZm9ybWFuY2VPYnNlcnZlcigobGlzdCkgPT4ge1xuICAgICAgICBzdWJzY3JpYmVyLm5leHQobGlzdC5nZXRFbnRyaWVzKCkgYXMgUGVyZm9ybWFuY2VNZWFzdXJlW10pO1xuICAgICAgfSk7XG4gICAgICBwZXJmb3JtYW5jZU9ic2VydmVyLm9ic2VydmUoeyBlbnRyeVR5cGVzOiBbJ21lYXN1cmUnXSB9KTtcbiAgICAgIHJldHVybiAoKSA9PiBwZXJmb3JtYW5jZU9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICB9KS5waXBlKHN0YXJ0V2l0aChbXSksIHNoYXJlUmVwbGF5KDEpKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY3JlYXRlQmFzZUV4ZWN1dGlvbk91dHB1dE9iamVjdChydWxlc2V0OiBSdWxlc2V0LCBleGVjdXRpb25Db3VudGVyOiBudW1iZXIsXG4gICAgcnVsZXNldElucHV0RmFjdHM6IHN0cmluZ1tdLCBydW50aW1lRmFjdFZhbHVlczogUmVjb3JkPHN0cmluZywgRmFjdHM+LFxuICAgIHJ1bGVzZXRUcmlnZ2VyczogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgRXZhbHVhdGlvblJlYXNvbj4+LCBydWxlc0V4ZWN1dGlvbnM6IFJ1bGVFdmFsdWF0aW9uW10pIHtcbiAgICBjb25zdCBpbnB1dEZhY3RzID0gYXdhaXQgdGhpcy5nZXRGYWN0c1NuYXBzaG90KHJ1bGVzZXRJbnB1dEZhY3RzKTtcblxuICAgIGNvbnN0IGJhc2VSdWxlc2V0T3V0cHV0RXhlY3V0aW9uOiBCYXNlUnVsZXNldEV4ZWN1dGlvbiA9IHtcbiAgICAgIGV4ZWN1dGlvbkNvdW50ZXIsXG4gICAgICBleGVjdXRpb25JZDogYCR7cnVsZXNldC5pZH0tJHtleGVjdXRpb25Db3VudGVyfWAsXG4gICAgICBydWxlc2V0SWQ6IHJ1bGVzZXQuaWQsXG4gICAgICBydWxlc2V0TmFtZTogcnVsZXNldC5uYW1lLFxuICAgICAgaW5wdXRGYWN0cyxcbiAgICAgIHRyaWdnZXJzOiBydWxlc2V0VHJpZ2dlcnMsXG4gICAgICBydWxlc0V2YWx1YXRpb25zOiBmbGFnQ2FjaGVkUnVsZXMocnVsZXNFeGVjdXRpb25zPy5zb3J0KChhLCBiKSA9PiBhLnRpbWVzdGFtcCAtIGIudGltZXN0YW1wKSB8fCBbXSwgcnVsZXNldFRyaWdnZXJzKSxcbiAgICAgIHRlbXBvcmFyeUZhY3RzOiBydW50aW1lRmFjdFZhbHVlc1xuICAgIH07XG4gICAgcmV0dXJuIGJhc2VSdWxlc2V0T3V0cHV0RXhlY3V0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBydWxlc2V0RXhlY3V0aW9uKFxuICAgIHRpbWVzdGFtcDogbnVtYmVyLFxuICAgIHJ1bGVzZXQ6IFJ1bGVzZXQsXG4gICAgZXhlY3V0aW9uQ291bnRlcjogbnVtYmVyLFxuICAgIHJ1bGVzZXRJbnB1dEZhY3RzOiBzdHJpbmdbXSxcbiAgICBhbGxPdXRwdXRBY3Rpb25zOiBBY3Rpb25CbG9ja1tdLFxuICAgIHJ1bnRpbWVGYWN0VmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBGYWN0cz4sXG4gICAgcnVsZXNldFRyaWdnZXJzOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBFdmFsdWF0aW9uUmVhc29uPj4sXG4gICAgcnVsZXNFeGVjdXRpb25zOiBSdWxlRXZhbHVhdGlvbltdKSB7XG4gICAgY29uc3QgYmFzZVJ1bGVzZXRPdXRwdXRFeGVjdXRpb24gPSBhd2FpdCB0aGlzLmNyZWF0ZUJhc2VFeGVjdXRpb25PdXRwdXRPYmplY3QocnVsZXNldCwgZXhlY3V0aW9uQ291bnRlciwgcnVsZXNldElucHV0RmFjdHMsIHJ1bnRpbWVGYWN0VmFsdWVzLCBydWxlc2V0VHJpZ2dlcnMsIHJ1bGVzRXhlY3V0aW9ucyk7XG5cbiAgICBjb25zdCBydWxlc2V0T3V0cHV0RXhlY3V0aW9uOiBSdWxlc2V0RXhlY3V0aW9uRXZlbnQgPSB7XG4gICAgICB0aW1lc3RhbXAsXG4gICAgICB0eXBlOiAnUnVsZXNldEV4ZWN1dGlvbicsXG4gICAgICBvdXRwdXRBY3Rpb25zOiBhbGxPdXRwdXRBY3Rpb25zLFxuICAgICAgLi4uYmFzZVJ1bGVzZXRPdXRwdXRFeGVjdXRpb25cbiAgICB9O1xuXG4gICAgcmV0dXJuIHJ1bGVzZXRPdXRwdXRFeGVjdXRpb247XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJ1bGVzZXRFeGVjdXRpb25FcnJvcihcbiAgICB0aW1lc3RhbXA6IG51bWJlcixcbiAgICBydWxlc2V0OiBSdWxlc2V0LFxuICAgIHJ1bGVzZXRJbnB1dEZhY3RzOiBzdHJpbmdbXSxcbiAgICBleGVjdXRpb25Db3VudGVyOiBudW1iZXIsXG4gICAgcnVudGltZUZhY3RWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIEZhY3RzPixcbiAgICBydWxlc2V0VHJpZ2dlcnM6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIEV2YWx1YXRpb25SZWFzb24+PixcbiAgICBydWxlc0V4ZWN1dGlvbnM6IFJ1bGVFdmFsdWF0aW9uW11cbiAgKSB7XG4gICAgY29uc3QgYmFzZVJ1bGVzZXRPdXRwdXRFeGVjdXRpb24gPSBhd2FpdCB0aGlzLmNyZWF0ZUJhc2VFeGVjdXRpb25PdXRwdXRPYmplY3QocnVsZXNldCwgZXhlY3V0aW9uQ291bnRlciwgcnVsZXNldElucHV0RmFjdHMsIHJ1bnRpbWVGYWN0VmFsdWVzLCBydWxlc2V0VHJpZ2dlcnMsIHJ1bGVzRXhlY3V0aW9ucyk7XG5cbiAgICBjb25zdCBydWxlc0V4ZWNXaXRoRXJyb3JzID0gcnVsZXNFeGVjdXRpb25zLmZpbHRlcigoZXgpID0+ICEhZXggJiYgISFleC5lcnJvcik7XG4gICAgY29uc3QgcnVsZXNldE91dHB1dEV4ZWN1dGlvblNraXA6IFJ1bGVzZXRFeGVjdXRpb25FcnJvckV2ZW50ID0ge1xuICAgICAgdGltZXN0YW1wLFxuICAgICAgdHlwZTogJ1J1bGVzZXRFeGVjdXRpb25FcnJvcicsXG4gICAgICBydWxlc0NhdXNpbmdUaGVFcnJvcjogcnVsZXNFeGVjV2l0aEVycm9ycy5tYXAoKGUpID0+IGUucnVsZSkgfHwgW10sXG4gICAgICBlcnJvcnM6IHJ1bGVzRXhlY1dpdGhFcnJvcnMubWFwKChlKSA9PiBlLmVycm9yKSxcbiAgICAgIC4uLmJhc2VSdWxlc2V0T3V0cHV0RXhlY3V0aW9uXG4gICAgfTtcbiAgICByZXR1cm4gcnVsZXNldE91dHB1dEV4ZWN1dGlvblNraXA7XG4gIH1cblxuICAvKipcbiAgICogUGx1ZyB0aGUgZGVidWdnZXIgdG8gYSBSdWxlIEVuZ2luZVxuICAgKiBAcGFyYW0gcnVsZXNFbmdpbmVcbiAgICovXG4gIHB1YmxpYyByZWdpc3RlclJ1bGVFbmdpbmUocnVsZXNFbmdpbmU6IFJ1bGVzRW5naW5lKSB7XG4gICAgdGhpcy5yZWdpc3RlcmVkUnVsZUVuZ2luZSA9IHJ1bGVzRW5naW5lO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBydWxlc2V0IGV4ZWN1dGlvbiBkZWJ1ZyBpbmZvXG4gICAqIEBwYXJhbSBjdXJyUmVzXG4gICAqIEBwYXJhbSBwcmV2UmVzXG4gICAqIEBwYXJhbSBhbGxFeGVjdXRpb25zVmFsaWRcbiAgICogQHBhcmFtIHJ1bGVzZXRJbnB1dEZhY3RzXG4gICAqIEBwYXJhbSBydW50aW1lRmFjdFZhbHVlc1xuICAgKiBAcGFyYW0gZXhlY3V0aW9uQ291bnRlclxuICAgKiBAcGFyYW0gcnVsZXNldFxuICAgKi9cbiAgcHVibGljIGhhbmRsZURlYnVnUnVsZXNldEV4ZWN1dGlvbkluZm8oXG4gICAgY3VyclJlczogUnVsZUV2YWx1YXRpb25PdXRwdXRbXSxcbiAgICBwcmV2UmVzOiBSdWxlRXZhbHVhdGlvbk91dHB1dFtdIHwgdW5kZWZpbmVkLFxuICAgIGFsbEV4ZWN1dGlvbnNWYWxpZDogYm9vbGVhbixcbiAgICBydWxlc2V0SW5wdXRGYWN0czogc3RyaW5nW10sXG4gICAgcnVudGltZUZhY3RWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIEZhY3RzPixcbiAgICBleGVjdXRpb25Db3VudGVyOiBudW1iZXIsXG4gICAgcnVsZXNldDogUnVsZXNldCkge1xuICAgIGNvbnN0IHJ1bGVzZXRUcmlnZ2VycyA9IHJldHJpZXZlUnVsZXNldFRyaWdnZXJzKGN1cnJSZXMsIHByZXZSZXMpO1xuICAgIGNvbnN0IHJ1bGVzZXRPdXRwdXRFeGVjdXRpb24gPSBjdXJyUmVzLm1hcCgocikgPT4gci5ldmFsdWF0aW9uISk7XG5cbiAgICBpZiAoIWFsbEV4ZWN1dGlvbnNWYWxpZCkge1xuICAgICAgdGhpcy5hZGRSdWxlc2V0RXhlY3V0aW9uRXJyb3JFdmVudChydWxlc2V0LCBydWxlc2V0SW5wdXRGYWN0cywgZXhlY3V0aW9uQ291bnRlciwgcnVudGltZUZhY3RWYWx1ZXMsIHJ1bGVzZXRUcmlnZ2VycywgcnVsZXNldE91dHB1dEV4ZWN1dGlvbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGV4ZWN1dGlvbkNvdW50ZXIsXG4gICAgICBydWxlc2V0T3V0cHV0RXhlY3V0aW9uLFxuICAgICAgYWxsRXhlY3V0aW9uc1ZhbGlkLFxuICAgICAgcnVsZXNldFRyaWdnZXJzXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0cyBhbiAnQXZhaWxhYmxlUnVsZXNldHMnIGRlYnVnIGV2ZW50IHdoZW4gcnVsZXNldHMgYXJlIHJlZ2lzdGVyZWQgdG8gdGhlIHJ1bGVzIGVuZ2luZVxuICAgKiBAcGFyYW0gcnVsZXNldHNcbiAgICovXG4gIHB1YmxpYyBhZGRBdmFpbGFibGVSdWxlc2V0cyhydWxlc2V0czogUnVsZXNldFtdKSB7XG4gICAgY29uc3QgdGltZXN0YW1wID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLnJlZ2lzdGVyZWRSdWxlc2V0cyA9IFsuLi50aGlzLnJlZ2lzdGVyZWRSdWxlc2V0cywgLi4ucnVsZXNldHMubWFwKChyKSA9PiAoeyBuYW1lOiByLm5hbWUsIGlkOiByLmlkIH0pKV07XG4gICAgdGhpcy5kZWJ1Z0V2ZW50c1N1YmplY3QkLm5leHQoKCkgPT4gKHtcbiAgICAgIHRpbWVzdGFtcCxcbiAgICAgIHR5cGU6ICdBdmFpbGFibGVSdWxlc2V0cycsXG4gICAgICBhdmFpbGFibGVSdWxlc2V0czogdGhpcy5yZWdpc3RlcmVkUnVsZXNldHNcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogQ29tcHV0ZXMgYW5kIGVtaXRzIGFuICdBY3RpdmVSdWxlc2V0cycgZGVidWcgZXZlbnQgd2hlbiB0aGUgYWN0aXZlIHJ1bGVzZXRzIGFyZSBjaGFuZ2luZ1xuICAgKiBAcGFyYW0gcnVsZVNldEV4ZWN1dG9yTWFwIG1hcCBvZmYgYWxsIHJ1bGVzZXRzIGV4ZWN1dG9yc1xuICAgKiBAcGFyYW0gcmVzdHJpY3RpdmVSdWxlU2V0cyBpZHMgb2YgdGhlIHJ1bGVzZXRzIHRvIGFjdGl2YXRlOyBpZiBub3QgcHJvdmlkZWQgYWxsIHJlZ2lzdGVyZWQgcnVsZXNldHMgd2lsbCBiZSBjb25zaWRlcmVkIGFzIGFjdGl2ZVxuICAgKi9cbiAgcHVibGljIGFjdGl2ZVJ1bGVzZXRzQ2hhbmdlKHJ1bGVTZXRFeGVjdXRvck1hcDogUmVjb3JkPHN0cmluZywgUnVsZXNldEV4ZWN1dG9yPiwgcmVzdHJpY3RpdmVSdWxlU2V0cz86IHN0cmluZ1tdKSB7XG4gICAgY29uc3QgdGltZXN0YW1wID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBydWxlc2V0cyA9IE9iamVjdC5rZXlzKHJ1bGVTZXRFeGVjdXRvck1hcCkubWFwKChydWxlc2V0SWQpID0+IHJ1bGVTZXRFeGVjdXRvck1hcFtydWxlc2V0SWRdLmVuZ2luZVJ1bGVzZXQpO1xuICAgIGNvbnN0IGFjdGl2ZVJ1bGVzZXRzID0gcmVzdHJpY3RpdmVSdWxlU2V0c1xuICAgICAgPyBPYmplY3QudmFsdWVzKHJ1bGVzZXRzKS5maWx0ZXIoKHJ1bGVTZXQpID0+IHJlc3RyaWN0aXZlUnVsZVNldHMuaW5jbHVkZXMocnVsZVNldC5pZCkpXG4gICAgICA6IE9iamVjdC52YWx1ZXMocnVsZXNldHMpO1xuXG4gICAgdGhpcy5kZWJ1Z0V2ZW50c1N1YmplY3QkLm5leHQoKCkgPT4gKHtcbiAgICAgIHRpbWVzdGFtcCxcbiAgICAgIHR5cGU6ICdBY3RpdmVSdWxlc2V0cycsXG4gICAgICBydWxlc2V0czogYWN0aXZlUnVsZXNldHMubWFwKChhKSA9PiAoeyBuYW1lOiBydWxlU2V0RXhlY3V0b3JNYXBbYS5pZF0ucnVsZXNldC5uYW1lLCBpZDogcnVsZVNldEV4ZWN1dG9yTWFwW2EuaWRdLnJ1bGVzZXQuaWQgfSkpXG4gICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVtaXRzIGFuICdBbGxBY3Rpb25zJyBkZWJ1ZyBldmVudCBlYWNoIHRpbWUgdGhlIHJ1bGVzIGVuZ2luZSBvdXRwdXRzIHRoZSBsaXN0IG9mIGFjdGlvbnNcbiAgICogQHBhcmFtIGFjdGlvbnMgbGlzdCBvZiBvdXRwdXR0ZWQgYWN0aW9uc1xuICAgKi9cbiAgcHVibGljIGFsbEFjdGlvbnNDaGFuZ2UoYWN0aW9uczogQWN0aW9uQmxvY2tbXSkge1xuICAgIGNvbnN0IHRpbWVzdGFtcCA9IERhdGUubm93KCk7XG4gICAgdGhpcy5kZWJ1Z0V2ZW50c1N1YmplY3QkLm5leHQoKCkgPT4gKHsgdGltZXN0YW1wLCB0eXBlOiAnQWxsQWN0aW9ucycsIGFjdGlvbnMgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVtaXRzIGEgJ1J1bGVzZXRFeGVjdXRpb24nIGRlYnVnIGV2ZW50IGF0IHRoZSBvdXRwdXQgb2YgYSBzdWNjZXNzZnVsIHJ1bGVzZXQgZXhlY3V0aW9uXG4gICAqIEBwYXJhbSBydWxlc2V0XG4gICAqIEBwYXJhbSBleGVjdXRpb25Db3VudGVyXG4gICAqIEBwYXJhbSBydWxlc2V0SW5wdXRGYWN0c1xuICAgKiBAcGFyYW0gYWxsT3V0cHV0QWN0aW9uc1xuICAgKiBAcGFyYW0gcnVudGltZUZhY3RWYWx1ZXNcbiAgICogQHBhcmFtIHJ1bGVzZXRUcmlnZ2Vyc1xuICAgKiBAcGFyYW0gcnVsZXNFeGVjdXRpb25zXG4gICAqL1xuICBwdWJsaWMgYWRkUnVsZXNldEV4ZWN1dGlvbkV2ZW50KHJ1bGVzZXQ6IFJ1bGVzZXQsIGV4ZWN1dGlvbkNvdW50ZXI6IG51bWJlcixcbiAgICBydWxlc2V0SW5wdXRGYWN0czogc3RyaW5nW10sIGFsbE91dHB1dEFjdGlvbnM6IEFjdGlvbkJsb2NrW10sIHJ1bnRpbWVGYWN0VmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBGYWN0cz4sXG4gICAgcnVsZXNldFRyaWdnZXJzOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBFdmFsdWF0aW9uUmVhc29uPj4sIHJ1bGVzRXhlY3V0aW9uczogUnVsZUV2YWx1YXRpb25bXSkge1xuICAgIGNvbnN0IHRpbWVzdGFtcCA9IERhdGUubm93KCk7XG4gICAgdGhpcy5kZWJ1Z0V2ZW50c1N1YmplY3QkLm5leHQoKCkgPT4gdGhpcy5ydWxlc2V0RXhlY3V0aW9uKHRpbWVzdGFtcCwgcnVsZXNldCwgZXhlY3V0aW9uQ291bnRlcixcbiAgICAgIHJ1bGVzZXRJbnB1dEZhY3RzLCBhbGxPdXRwdXRBY3Rpb25zLCBydW50aW1lRmFjdFZhbHVlcywgcnVsZXNldFRyaWdnZXJzLCBydWxlc0V4ZWN1dGlvbnMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0cyBhICdSdWxlc2V0RXhlY3V0aW9uRXJyb3InIGRlYnVnIGV2ZW50IGF0IHRoZSBvdXRwdXQgb2YgYSBmYWlsaW5nIHJ1bGVzZXQgZXhlY3V0aW9uXG4gICAqIEBwYXJhbSBydWxlc2V0XG4gICAqIEBwYXJhbSBydWxlc2V0SW5wdXRGYWN0c1xuICAgKiBAcGFyYW0gZXhlY3V0aW9uQ291bnRlclxuICAgKiBAcGFyYW0gcnVudGltZUZhY3RWYWx1ZXNcbiAgICogQHBhcmFtIHJ1bGVzZXRUcmlnZ2Vyc1xuICAgKiBAcGFyYW0gcnVsZXNFeGVjdXRpb25zXG4gICAqL1xuICBwdWJsaWMgYWRkUnVsZXNldEV4ZWN1dGlvbkVycm9yRXZlbnQoXG4gICAgcnVsZXNldDogUnVsZXNldCxcbiAgICBydWxlc2V0SW5wdXRGYWN0czogc3RyaW5nW10sXG4gICAgZXhlY3V0aW9uQ291bnRlcjogbnVtYmVyLFxuICAgIHJ1bnRpbWVGYWN0VmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBGYWN0cz4sXG4gICAgcnVsZXNldFRyaWdnZXJzOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBFdmFsdWF0aW9uUmVhc29uPj4sXG4gICAgcnVsZXNFeGVjdXRpb25zOiBSdWxlRXZhbHVhdGlvbltdXG4gICkge1xuICAgIGNvbnN0IHRpbWVzdGFtcCA9IERhdGUubm93KCk7XG4gICAgdGhpcy5kZWJ1Z0V2ZW50c1N1YmplY3QkLm5leHQoKCkgPT4gdGhpcy5ydWxlc2V0RXhlY3V0aW9uRXJyb3IodGltZXN0YW1wLCBydWxlc2V0LCBydWxlc2V0SW5wdXRGYWN0cywgZXhlY3V0aW9uQ291bnRlciwgcnVudGltZUZhY3RWYWx1ZXMsIHJ1bGVzZXRUcmlnZ2VycywgcnVsZXNFeGVjdXRpb25zKSk7XG4gIH1cblxuICAvKipcbiAgICogRW1pdHMgYSAnQXZhaWxhYmxlRmFjdHNTbmFwc2hvdCcgZGVidWcgZXZlbnQgd2hlbiBhIGZhY3QgdmFsdWUgaXMgdXBkYXRlZFxuICAgKiBAcGFyYW0gX2lkXG4gICAqIEBwYXJhbSBmYWN0VmFsdWUkXG4gICAqL1xuICBwdWJsaWMgYWRkQXZhaWxhYmxlRmFjdHNTbmFwc2hvdEV2ZW50KFxuICAgIF9pZDogc3RyaW5nLFxuICAgIGZhY3RWYWx1ZSQ6IE9ic2VydmFibGU8YW55PlxuICApIHtcbiAgICBmYWN0VmFsdWUkLnN1YnNjcmliZShhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0aW1lc3RhbXAgPSBEYXRlLm5vdygpO1xuICAgICAgY29uc3QgZmFjdHMgPSBhd2FpdCB0aGlzLmdldEZhY3RzU25hcHNob3QodGhpcy5yZWdpc3RlcmVkUnVsZUVuZ2luZSEuZ2V0UmVnaXN0ZXJlZEZhY3RzTmFtZXMoKSk7XG4gICAgICB0aGlzLmRlYnVnRXZlbnRzU3ViamVjdCQubmV4dCgoKSA9PiAoe1xuICAgICAgICB0aW1lc3RhbXAsXG4gICAgICAgIHR5cGU6ICdBdmFpbGFibGVGYWN0c1NuYXBzaG90JyxcbiAgICAgICAgZmFjdHNcbiAgICAgIH0pKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBmYWN0IG5hbWUgYW5kIHZhbHVlIHBhaXJzXG4gICAqIEBwYXJhbSBmYWN0c05hbWVzIExpc3Qgb2YgZmFjdHMgbmFtZXMgdG8gZ2V0IHRoZSB2YWx1ZSBmb3JcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRGYWN0c1NuYXBzaG90KGZhY3RzTmFtZXM6IHN0cmluZ1tdKSB7XG4gICAgY29uc3QgZmFjdHM6IHsgZmFjdE5hbWU6IHN0cmluZzsgdmFsdWU6IGFueSB9W10gPSBbXTtcbiAgICBpZiAoIXRoaXMucmVnaXN0ZXJlZFJ1bGVFbmdpbmUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUnVsZSBlbmdpbmUgbm90IHBsdWdnZWQgdG8gdGhlIGRlYnVnZ2VyJyk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgZmFjdE5hbWUgb2YgZmFjdHNOYW1lcykge1xuICAgICAgZmFjdHMucHVzaCh7IGZhY3ROYW1lLCB2YWx1ZTogYXdhaXQgdGhpcy5yZWdpc3RlcmVkUnVsZUVuZ2luZS5yZXRyaWV2ZUZhY3RWYWx1ZShmYWN0TmFtZSkgfSk7XG4gICAgfVxuICAgIHJldHVybiBmYWN0cztcbiAgfVxufVxuIl19
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5naW5lLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbmdpbmUvZW5naW5lLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuICBJdGVtSWRlbnRpZmllcixcbiAgTG9nZ2VyLFxufSBmcm9tICdAbzNyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBPYnNlcnZhYmxlLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB0eXBlIHtcbiAgRW5naW5lRGVidWdnZXIsXG59IGZyb20gJy4vZGVidWcvZW5naW5lLmRlYnVnJztcbmltcG9ydCB0eXBlIHtcbiAgRmFjdCxcbiAgRmFjdHMsXG59IGZyb20gJy4vZmFjdCc7XG5pbXBvcnQgdHlwZSB7XG4gIE9wZXJhdG9yLFxufSBmcm9tICcuL29wZXJhdG9yJztcbmltcG9ydCB7XG4gIEFjdGlvbkJsb2NrLFxuICBSdWxlLFxuICBSdWxlc2V0LFxufSBmcm9tICcuL3N0cnVjdHVyZSc7XG5cbi8qKiBQZXJmb3JtYW5jZSBvYmplY3Qgc3VwcG9ydGluZyBOb2RlSnMgUGVyZm9ybWFuY2UgYW5kIFdlYiBQZXJmb3JtYW5jZSByZXBvcnRpbmcgICovXG5leHBvcnQgdHlwZSBDcm9zc1BsYXRmb3JtUGVyZm9ybWFuY2UgPSB7XG4gIC8qKiBAc2VlIFBlcmZvcm1hbmNlLm1hcmsgKi9cbiAgbWFyazogKC4uLng6IFBhcmFtZXRlcnM8UGVyZm9ybWFuY2VbJ21hcmsnXT4pID0+IFJldHVyblR5cGU8UGVyZm9ybWFuY2VbJ21hcmsnXT4gfCB2b2lkO1xuICAvKiogQHNlZSBQZXJmb3JtYW5jZS5tZWFzdXJlICovXG4gIG1lYXN1cmU6IChtZWFzdXJlTmFtZTogc3RyaW5nLCBzdGFydE9yTWVhc3VyZU9wdGlvbnM/OiBzdHJpbmcsIGVuZE1hcms/OiBzdHJpbmcpID0+IFJldHVyblR5cGU8UGVyZm9ybWFuY2VbJ21lYXN1cmUnXT4gfCB2b2lkO1xufTtcblxuLyoqIEZhY3Qgc3RyZWFtIG9iamVjdCB0byBoYW5kbGUgZmFjdCByZWZlcmVuY2UgY2hhbmdlICovXG5leHBvcnQgaW50ZXJmYWNlIEZhY3RPYmplY3Q8VD4ge1xuICAvKiogU3ViamVjdCBvZiBmYWN0IHN0cmVhbSAqL1xuICBzdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8T2JzZXJ2YWJsZTxUPiB8IHVuZGVmaW5lZD47XG4gIC8qKiBTdHJlYW0gb2YgdGhlIGZhY3QgdmFsdWUgKi9cbiAgdmFsdWUkOiBPYnNlcnZhYmxlPFQgfCB1bmRlZmluZWQ+O1xufVxuXG4vKiogUnVsZSBFbmdpbmUgY29uc3RydWN0b3Igb3B0aW9ucyAqL1xuZXhwb3J0IGludGVyZmFjZSBSdWxlc0VuZ2luZU9wdGlvbnMge1xuICAvKiogTGlzdCBvZiBmYWN0cyAqL1xuICBmYWN0cz86IEZhY3Q8RmFjdHM+W107XG5cbiAgLyoqIExpc3Qgb2YgcnVsZXMgKi9cbiAgcnVsZXM/OiBSdWxlc2V0W107XG5cbiAgLyoqIExpc3Qgb2YgY3VzdG9tIG9wZXJhdG9ycyAqL1xuICBvcGVyYXRvcnM/OiBPcGVyYXRvcjxhbnksIGFueT5bXTtcblxuICAvKiogRGVsYXkgYmVmb3JlIGZhY3Qgc3RyZWFtIGRlZmF1bHRpbmcgdmFsdWUgKi9cbiAgZmFjdERlZmF1bHREZWxheT86IG51bWJlcjtcblxuICAvKipcbiAgICogU2tpcCB0aGUgcnVsZSBhbmQgZmFjdCBjaXJjdWxhciBkZXBlbmRlbmN5IGNoZWNrc1xuICAgKiBUdXJuIHRvIHRydWUgdG8gaW5jcmVhc2UgdGhlIHNwZWVkIG9mIHRoZSB1cHNlcnRpb24gb2YgYSBydWxlXG4gICAqL1xuICBza2lwQ2lyY3VsYXJEZXBlbmRlbmN5Q2hlY2tzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogUHJvdmlkZSBkZWJ1Z2dlciBpbnN0YW5jZSB0byB0aGUgcnVsZXMgZW5naW5lXG4gICAqL1xuICBkZWJ1Z2dlcj86IEVuZ2luZURlYnVnZ2VyO1xuXG4gIC8qKlxuICAgKiBJbnN0YW5jZSBvZiB0aGUgcGVyZm9ybWFuY2UgcmVwb3J0ZXIgdG8gdXNlIGZvciBwZXJmb3JtYW5jZSBtZWFzdXJlbWVudHMuXG4gICAqIEBkZWZhdWx0IHdpbmRvdy5wZXJmb3JtYW5jZSBvbiBicm93c2VyIG9ubHksIHVuZGVmaW5lZCBvbiBub2RlXG4gICAqL1xuICBwZXJmb3JtYW5jZT86IENyb3NzUGxhdGZvcm1QZXJmb3JtYW5jZTtcblxuICAvKipcbiAgICogTmFtZSBvZiB0aGUgcnVsZXMgZW5naW5lIGluc3RhbmNlXG4gICAqIEBkZWZhdWx0IFJ1bGVzRW5naW5lXG4gICAqL1xuICBydWxlc0VuZ2luZUluc3RhbmNlTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogQ2xpZW50IHRvIGxvZyB0aGUgd2FybmluZyBhbmQgZXJyb3IgbWVzc2FnZVxuICAgKi9cbiAgbG9nZ2VyPzogTG9nZ2VyO1xufVxuXG4vKiogUnVsZSBhcyBzdG9yZWQgaW4gdGhlIHJ1bGVzIGVuZ2luZSAqL1xuZXhwb3J0IGludGVyZmFjZSBFbmdpbmVSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIC8qKiBzdHJlYW0gb2YgdGhlIHJ1bGUgY29uZGl0aW9ucyByZXN1bHQgKi9cbiAgcmVzdWx0JDogQmVoYXZpb3JTdWJqZWN0PEFjdGlvbkJsb2NrW10+O1xufVxuXG4vKiogUnVsZSBhcyBzdG9yZWQgaW4gdGhlIHJ1bGVzIGVuZ2luZSAqL1xuZXhwb3J0IGludGVyZmFjZSBFbmdpbmVSdWxlc2V0IHtcbiAgLyoqIE9wdGlvbmFsIGRhdGUgcmFuZ2Ugd2hlcmUgdGhlIHJ1bGVzZXQgd2lsbCBiZSBleGVjdXRlZCwgaXQgc3VwcG9ydHMgYSBkYXRlU3RyaW5nIG9yIGEgdGltZXN0YW1wIGFzIG51bWJlciwgbW9yZSBpbmZvIG9uIGphdmFzY3JpcHQgRGF0ZSgpIGRvY3VtZW50YXRpb24gKi9cbiAgdmFsaWRpdHlSYW5nZT86IHsgZnJvbT86IHN0cmluZyB8IG51bWJlcjsgdG8/OiBzdHJpbmcgfCBudW1iZXIgfTtcbiAgLyoqXG4gICAqIENvbXBvbmVudHMgbGlua2VkIHRvIHRoZSBydWxlc2V0LiBJZiBwcmVzZW50IHRoZSBydWxlc2V0IHdpbGwgbm90IGJlIGFjdGl2ZSBieSBkZWZhdWx0LlxuICAgKiAnb3InIGNvbmRpdGlvbjogSWYgYXQgbGVhc3Qgb25lIGNvbXBvbmVudCBoYXMgc3Vic2NyaWJlZCwgdGhlIHJ1bGVzZXQgd2lsbCBiZWNvbWUgYWN0aXZlLlxuICAgKiBJZiBwcmVzZW50LCB0aGUge0BsaW5rIGxpbmtlZENvbXBvbmVudH0gcHJvcGVydHkgd2lsbCBub3QgYmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uXG4gICAqL1xuICBsaW5rZWRDb21wb25lbnRzPzogeyBvcjogSXRlbUlkZW50aWZpZXJbXSB9O1xuICAvKipcbiAgICogQ29tcG9uZW50IGxpbmtlZCB0byB0aGUgcnVsZXNldCwgaWYgc2V0IGl0IHdpbGwgZGlzYWJsZSB0aGUgcnVsZXNldCBleGVjdXRpb24gcGVyIGRlZmF1bHQsIHdhaXRpbmcgdG8gYSBzdWJzY3JpcHRpb25cbiAgICogQGRlcHJlY2F0ZWQgSXQgd2lsbCBiZSByZW1vdmVkIGluIHYxMiwgdXNlIHtAbGluayBsaW5rZWRDb21wb25lbnRzfSBpbnN0ZWFkXG4gICAqL1xuICBsaW5rZWRDb21wb25lbnQ/OiBJdGVtSWRlbnRpZmllcjtcbiAgLyoqIFVuaXF1ZSBpZCBvZiB0aGUgcnVsZXNldCovXG4gIGlkOiBzdHJpbmc7XG4gIC8qKiBTdG9yZXMgdGhlIHJlc3VsdCBvZiBlYWNoIHJ1bGVzIGZyb20gdGhlIHJ1bGVzZXQgKi9cbiAgcnVsZXNSZXN1bHRzU3ViamVjdCQ6IE9ic2VydmFibGU8QWN0aW9uQmxvY2tbXT47XG59XG4vKiogVGltZXN0YW1wIG9mIGEgcnVsZXMgZW5naW5lIG91dHB1dCBldmVudCAqL1xuZXhwb3J0IGludGVyZmFjZSBUaW1lZEV2ZW50IHtcbiAgLyoqIFRpbWVzdGFtcCB2YWx1ZSB3aGVuIHRoZSBldmVudCBvY2N1cnMgKi9cbiAgdGltZXN0YW1wOiBudW1iZXI7XG4gIC8qKiBEdXJhdGlvbiBvZiB0aGUgZXhlY3V0aW9uICovXG4gIGR1cmF0aW9uPzogbnVtYmVyO1xufVxuXG4vKiogRmFjdCBjaGFuZ2UgdHJpZ2dlcmluZyB0aGUgZXZhbHVhdGlvbiBvZiBhIHJ1bGUvZXhlY3V0aW9uIG9mIGEgcnVsZXNldCAqL1xuZXhwb3J0IGludGVyZmFjZSBFdmFsdWF0aW9uUmVhc29uIHtcbiAgLyoqIE5hbWUgb2YgdGhlIGZhY3QgdGhhdCBjaGFuZ2VkICovXG4gIGZhY3ROYW1lOiBzdHJpbmc7XG4gIC8qKiBOZXcgdmFsdWUgb2YgdGhlIGZhY3QgKi9cbiAgbmV3VmFsdWU/OiBGYWN0cztcbiAgLyoqIE9sZCB2YWx1ZSBvZiB0aGUgZmFjdCAqL1xuICBvbGRWYWx1ZT86IEZhY3RzO1xufVxuXG4vKiogUmVzdWx0IG9iamVjdCByZXN1bHRlZCBhdCB0aGUgZW5kIG9mIGEgcnVsZSBldmFsdWF0aW9uICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1bGVFdmFsdWF0aW9uIGV4dGVuZHMgVGltZWRFdmVudCB7XG4gIC8qKiBJZGVudGlmaWVyIG9mIHRoZSBldmFsdWF0aW9uIChydWxlc2V0IG5hbWUgKyBydWxlIG5hbWUpICovXG4gIGlkOiBzdHJpbmc7XG4gIC8qKiBFdmFsdWF0ZWQgcnVsZSBpZGVudGlmaWVyICovXG4gIHJ1bGU6IFBpY2s8UnVsZSwgJ2lkJyB8ICduYW1lJz47XG4gIC8qKiBBY3Rpb25zIG91dHB1dGVkIGJ5IHRoZSBydWxlIGV2YWx1YXRpb24gKi9cbiAgb3V0cHV0QWN0aW9uczogQWN0aW9uQmxvY2tbXSB8IHVuZGVmaW5lZDtcbiAgLyoqIE1hcCBjb250YWluaW5nIHRoZSBmYWN0cyBjaGFuZ2VzIHRyaWdnZXJpbmcgdGhlIHJ1bGUgZXZhbHVhdGlvbiAqL1xuICB0cmlnZ2VyczogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgRXZhbHVhdGlvblJlYXNvbj4+O1xuICAvKiogRXJyb3Igb2JqZWN0IGluIGNhc2Ugb2YgcnVsZSBldmFsdWF0aW9uIGZhaWx1cmUgKi9cbiAgZXJyb3I/OiBhbnk7XG4gIC8qKiBSdW50aW1lIGZhY3RzIHdpdGggdmFsdWVzIGF0IHRoZSBlbmQgb2YgcnVsZSBldmFsdWF0aW9uICAqL1xuICB0ZW1wb3JhcnlGYWN0cz86IFJlY29yZDxzdHJpbmcsIEZhY3RzPjtcbiAgLyoqIEZsYWcgdG8gbm90aWZ5IGlmIHRoZSBydWxlcyBldmFsdWF0aW9uIGNvbWVzIGZyb20gYW4gb2xkIHJ1bGVzZXQgZXhlY3V0aW9uICovXG4gIGNhY2hlZD86IGJvb2xlYW47XG59XG5cbi8qKiBXcmFwcGVkIHJ1bGUgZXZhbHVhdGlvbiBvdXRwdXQgKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVsZUV2YWx1YXRpb25PdXRwdXQge1xuICAvKiogQWN0aW9ucyBlbWl0dGVkIGF0IHRoZSBlbmQgb2YgcnVsZSBldmFsdWF0aW9uICovXG4gIGFjdGlvbnM6IEFjdGlvbkJsb2NrW10gfCB1bmRlZmluZWQ7XG4gIC8qKiBSdWxlIGV2YWx1YXRpb24gb3V0cHV0IG9iamVjdCAqL1xuICBldmFsdWF0aW9uPzogUnVsZUV2YWx1YXRpb247XG4gIC8qKiBFcnJvciBvYmplY3QgZW1pdHRlZCBhdCB0aGUgZW5kIG9mIHJ1bGUgZXZhbHVhdGlvbiwgaWYgYW55ICovXG4gIGVycm9yPzogYW55O1xufVxuXG4vKiogQmFzZSBvYmVqZWN0IHJlc3VsdGVkIGF0IHRoZSBlbmQgb2YgYSBydWxlc2V0IGV4ZWN1dGlvbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXNlUnVsZXNldEV4ZWN1dGlvbiB7XG4gIC8qKiBJZCBvZiB0aGUgcnVsZXNldCBleGVjdXRpb24gKi9cbiAgZXhlY3V0aW9uSWQ6IHN0cmluZztcbiAgLyoqIElkIG9mIHRoZSBydWxlc2V0IHdoaWNoIHdhcyBleGVjdXRlZCAqL1xuICBydWxlc2V0SWQ6IHN0cmluZztcbiAgLyoqIE5hbWUgb2YgdGhlIGV4ZWN1dGVkIHJ1bGVzZXQgKi9cbiAgcnVsZXNldE5hbWU6IHN0cmluZztcbiAgLyoqIENvdW50ZXIgb2YgZXhlY3V0aW9ucyBmb3IgdGhlIHJ1bGVzZXQgKi9cbiAgZXhlY3V0aW9uQ291bnRlcjogbnVtYmVyO1xuICAvKiogQWxsIGlucHV0IGZhY3RzIGFmZmVjdGluZyB0aGUgcnVsZXNldCAqL1xuICBpbnB1dEZhY3RzOiB7IGZhY3ROYW1lOiBzdHJpbmc7IHZhbHVlOiBGYWN0cyB9W107XG4gIC8qKiBSdW50aW1lIGZhY3RzIHVzZWQgYWNjcm9zIHRoZSBydWxlc2V0ICovXG4gIHRlbXBvcmFyeUZhY3RzPzogUmVjb3JkPHN0cmluZywgRmFjdHM+O1xuICAvKiogRmFjdHMgY2hhbmdlcyB0aGF0IHRyaWdnZXJlZCB0aGUgZXhlY3V0aW9uIG9mIHRoZSBydWxlc2V0ICovXG4gIHRyaWdnZXJzOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBFdmFsdWF0aW9uUmVhc29uPj47XG4gIC8qKiBMaXN0IG9mIGV2YWx1YXRlZCBydWxlcyBhY2Nyb3MgcnVsZXNldCBleGVjdXRpb24gKi9cbiAgcnVsZXNFdmFsdWF0aW9uczogUnVsZUV2YWx1YXRpb25bXTtcbn1cblxuLyoqIERlYnVnIGV2ZW50IGVtaXR0ZWQgaW4gY2FzZSBvZiBzdWNjZXNzZnVsIHJ1bGVzZXQgZXhlY3V0aW9uICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1bGVzZXRFeGVjdXRpb25FdmVudCBleHRlbmRzIEJhc2VSdWxlc2V0RXhlY3V0aW9uLCBUaW1lZEV2ZW50IHtcbiAgLyoqIEV2ZW50IHR5cGUgKi9cbiAgdHlwZTogJ1J1bGVzZXRFeGVjdXRpb24nO1xuICAvKiogTGlzdCBvZiB0aGUgYWN0aW9ucyBlbWl0dGVkIGF0IHRoZSBlbmQgb2YgcnVsZXNldCBleGVjdXRpb24gKi9cbiAgb3V0cHV0QWN0aW9uczogQWN0aW9uQmxvY2tbXTtcbn1cblxuLyoqIERlYnVnIGV2ZW50IGVtaXR0ZWQgaW4gY2FzZSBvZiBydWxlc2V0IGV4ZWN1dGlvbiBmYWlsdXJlICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1bGVzZXRFeGVjdXRpb25FcnJvckV2ZW50IGV4dGVuZHMgQmFzZVJ1bGVzZXRFeGVjdXRpb24sIFRpbWVkRXZlbnQge1xuICAvKiogRXZlbnQgdHlwZSAqL1xuICB0eXBlOiAnUnVsZXNldEV4ZWN1dGlvbkVycm9yJztcbiAgLyoqIExpc3Qgb2YgcnVsZXMgY2F1c2luZyB0aGUgZXhlY3V0aW9uIGVycm9yKi9cbiAgcnVsZXNDYXVzaW5nVGhlRXJyb3I6IFBpY2s8UnVsZSwgJ25hbWUnIHwgJ2lkJz5bXTtcbiAgLyoqIExpc3Qgb2Ygb3V0cHV0dGVkIGVycm9ycyAqL1xuICBlcnJvcnM6IGFueVtdO1xufVxuXG4vKiogRGVidWcgZXZlbnQgZW1pdHRlZCB3aGVuIGFjdGl2ZSBydWxlc2V0cyBhcmUgY2hhbmdpbmcgKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aXZlUnVsZXNldHNFdmVudCBleHRlbmRzIFRpbWVkRXZlbnQge1xuICAvKiogRXZlbnQgdHlwZSAqL1xuICB0eXBlOiAnQWN0aXZlUnVsZXNldHMnO1xuICAvKiogTGlzdCBvZiBhY3RpdmUgcnVsZXNldHMgKi9cbiAgcnVsZXNldHM6IFBpY2s8UnVsZXNldCwgJ25hbWUnIHwgJ2lkJz5bXTtcbn1cblxuLyoqIERlYnVnIGV2ZW50IGVtaXR0ZWQgZWFjaCB0aW1lIHRoZSBSdWxlcyBFbmdpbmUgb3V0cHV0cyBhIGxpc3Qgb2YgYWN0aW9ucyAqL1xuZXhwb3J0IGludGVyZmFjZSBBbGxBY3Rpb25zRXZlbnQgZXh0ZW5kcyBUaW1lZEV2ZW50IHtcbiAgLyoqIGV2ZW50IHR5cGUgKi9cbiAgdHlwZTogJ0FsbEFjdGlvbnMnO1xuICAvKiogTGlzdCBvZiBlbWl0dGVkIGFjdGlvbnMgKi9cbiAgYWN0aW9uczogQWN0aW9uQmxvY2tbXTtcbn1cblxuLyoqICBEZWJ1ZyBldmVudCBlbWl0dGVkIHdoZW4gcnVsZXNldHMgYXJlIHJlZ2lzdGVyZWQgdG8gdGhlIHJ1bGVzIGVuZ2luZSAqL1xuZXhwb3J0IGludGVyZmFjZSBBdmFpbGFibGVSdWxlc2V0cyBleHRlbmRzIFRpbWVkRXZlbnQge1xuICAvKiogRXZlbnQgdHlwZSAqL1xuICB0eXBlOiAnQXZhaWxhYmxlUnVsZXNldHMnO1xuICAvKiogUmVnaXN0ZXJlZCBydWxlc2V0cyBsaXN0ICovXG4gIGF2YWlsYWJsZVJ1bGVzZXRzOiBQaWNrPFJ1bGVzZXQsICduYW1lJyB8ICdpZCc+W107XG59XG5cbi8qKiBUeXBlIG9mIHBvc3NpYmxlIGRlYnVnIGV2ZW50cyBlbWl0ZWQgYnkgUnVsZXMgRW5naW5lICovXG5leHBvcnQgdHlwZSBEZWJ1Z0V2ZW50ID0gUnVsZXNldEV4ZWN1dGlvbkV2ZW50IHwgUnVsZXNldEV4ZWN1dGlvbkVycm9yRXZlbnQgfCBBY3RpdmVSdWxlc2V0c0V2ZW50IHwgQWxsQWN0aW9uc0V2ZW50IHwgQXZhaWxhYmxlUnVsZXNldHM7XG4iXX0=
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5naW5lLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbmdpbmUvZW5naW5lLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuICBJdGVtSWRlbnRpZmllcixcbiAgTG9nZ2VyLFxufSBmcm9tICdAbzNyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBPYnNlcnZhYmxlLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB0eXBlIHtcbiAgRW5naW5lRGVidWdnZXIsXG59IGZyb20gJy4vZGVidWcvZW5naW5lLmRlYnVnJztcbmltcG9ydCB0eXBlIHtcbiAgRmFjdCxcbiAgRmFjdHMsXG59IGZyb20gJy4vZmFjdCc7XG5pbXBvcnQgdHlwZSB7XG4gIE9wZXJhdG9yLFxufSBmcm9tICcuL29wZXJhdG9yJztcbmltcG9ydCB7XG4gIEFjdGlvbkJsb2NrLFxuICBSdWxlLFxuICBSdWxlc2V0LFxufSBmcm9tICcuL3N0cnVjdHVyZSc7XG5cbi8qKiBQZXJmb3JtYW5jZSBvYmplY3Qgc3VwcG9ydGluZyBOb2RlSnMgUGVyZm9ybWFuY2UgYW5kIFdlYiBQZXJmb3JtYW5jZSByZXBvcnRpbmcgICovXG5leHBvcnQgdHlwZSBDcm9zc1BsYXRmb3JtUGVyZm9ybWFuY2UgPSB7XG4gIC8qKiBAc2VlIFBlcmZvcm1hbmNlLm1hcmsgKi9cbiAgbWFyazogKC4uLng6IFBhcmFtZXRlcnM8UGVyZm9ybWFuY2VbJ21hcmsnXT4pID0+IFJldHVyblR5cGU8UGVyZm9ybWFuY2VbJ21hcmsnXT4gfCB2b2lkO1xuICAvKiogQHNlZSBQZXJmb3JtYW5jZS5tZWFzdXJlICovXG4gIG1lYXN1cmU6IChtZWFzdXJlTmFtZTogc3RyaW5nLCBzdGFydE9yTWVhc3VyZU9wdGlvbnM/OiBzdHJpbmcsIGVuZE1hcms/OiBzdHJpbmcpID0+IFJldHVyblR5cGU8UGVyZm9ybWFuY2VbJ21lYXN1cmUnXT4gfCB2b2lkO1xufTtcblxuLyoqIEZhY3Qgc3RyZWFtIG9iamVjdCB0byBoYW5kbGUgZmFjdCByZWZlcmVuY2UgY2hhbmdlICovXG5leHBvcnQgaW50ZXJmYWNlIEZhY3RPYmplY3Q8VD4ge1xuICAvKiogU3ViamVjdCBvZiBmYWN0IHN0cmVhbSAqL1xuICBzdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8T2JzZXJ2YWJsZTxUPiB8IHVuZGVmaW5lZD47XG4gIC8qKiBTdHJlYW0gb2YgdGhlIGZhY3QgdmFsdWUgKi9cbiAgdmFsdWUkOiBPYnNlcnZhYmxlPFQgfCB1bmRlZmluZWQ+O1xufVxuXG4vKiogUnVsZSBFbmdpbmUgY29uc3RydWN0b3Igb3B0aW9ucyAqL1xuZXhwb3J0IGludGVyZmFjZSBSdWxlc0VuZ2luZU9wdGlvbnMge1xuICAvKiogTGlzdCBvZiBmYWN0cyAqL1xuICBmYWN0cz86IEZhY3Q8RmFjdHM+W107XG5cbiAgLyoqIExpc3Qgb2YgcnVsZXMgKi9cbiAgcnVsZXM/OiBSdWxlc2V0W107XG5cbiAgLyoqIExpc3Qgb2YgY3VzdG9tIG9wZXJhdG9ycyAqL1xuICBvcGVyYXRvcnM/OiBPcGVyYXRvcjxhbnksIGFueT5bXTtcblxuICAvKiogRGVsYXkgYmVmb3JlIGZhY3Qgc3RyZWFtIGRlZmF1bHRpbmcgdmFsdWUgKi9cbiAgZmFjdERlZmF1bHREZWxheT86IG51bWJlcjtcblxuICAvKipcbiAgICogU2tpcCB0aGUgcnVsZSBhbmQgZmFjdCBjaXJjdWxhciBkZXBlbmRlbmN5IGNoZWNrc1xuICAgKiBUdXJuIHRvIHRydWUgdG8gaW5jcmVhc2UgdGhlIHNwZWVkIG9mIHRoZSB1cHNlcnQgb2YgYSBydWxlXG4gICAqL1xuICBza2lwQ2lyY3VsYXJEZXBlbmRlbmN5Q2hlY2tzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogUHJvdmlkZSBkZWJ1Z2dlciBpbnN0YW5jZSB0byB0aGUgcnVsZXMgZW5naW5lXG4gICAqL1xuICBkZWJ1Z2dlcj86IEVuZ2luZURlYnVnZ2VyO1xuXG4gIC8qKlxuICAgKiBJbnN0YW5jZSBvZiB0aGUgcGVyZm9ybWFuY2UgcmVwb3J0ZXIgdG8gdXNlIGZvciBwZXJmb3JtYW5jZSBtZWFzdXJlbWVudHMuXG4gICAqIEBkZWZhdWx0IHdpbmRvdy5wZXJmb3JtYW5jZSBvbiBicm93c2VyIG9ubHksIHVuZGVmaW5lZCBvbiBub2RlXG4gICAqL1xuICBwZXJmb3JtYW5jZT86IENyb3NzUGxhdGZvcm1QZXJmb3JtYW5jZTtcblxuICAvKipcbiAgICogTmFtZSBvZiB0aGUgcnVsZXMgZW5naW5lIGluc3RhbmNlXG4gICAqIEBkZWZhdWx0IFJ1bGVzRW5naW5lXG4gICAqL1xuICBydWxlc0VuZ2luZUluc3RhbmNlTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogQ2xpZW50IHRvIGxvZyB0aGUgd2FybmluZyBhbmQgZXJyb3IgbWVzc2FnZVxuICAgKi9cbiAgbG9nZ2VyPzogTG9nZ2VyO1xufVxuXG4vKiogUnVsZSBhcyBzdG9yZWQgaW4gdGhlIHJ1bGVzIGVuZ2luZSAqL1xuZXhwb3J0IGludGVyZmFjZSBFbmdpbmVSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIC8qKiBzdHJlYW0gb2YgdGhlIHJ1bGUgY29uZGl0aW9ucyByZXN1bHQgKi9cbiAgcmVzdWx0JDogQmVoYXZpb3JTdWJqZWN0PEFjdGlvbkJsb2NrW10+O1xufVxuXG4vKiogUnVsZSBhcyBzdG9yZWQgaW4gdGhlIHJ1bGVzIGVuZ2luZSAqL1xuZXhwb3J0IGludGVyZmFjZSBFbmdpbmVSdWxlc2V0IHtcbiAgLyoqIE9wdGlvbmFsIGRhdGUgcmFuZ2Ugd2hlcmUgdGhlIHJ1bGVzZXQgd2lsbCBiZSBleGVjdXRlZCwgaXQgc3VwcG9ydHMgYSBkYXRlU3RyaW5nIG9yIGEgdGltZXN0YW1wIGFzIG51bWJlciwgbW9yZSBpbmZvIG9uIGphdmFzY3JpcHQgRGF0ZSgpIGRvY3VtZW50YXRpb24gKi9cbiAgdmFsaWRpdHlSYW5nZT86IHsgZnJvbT86IHN0cmluZyB8IG51bWJlcjsgdG8/OiBzdHJpbmcgfCBudW1iZXIgfTtcbiAgLyoqXG4gICAqIENvbXBvbmVudHMgbGlua2VkIHRvIHRoZSBydWxlc2V0LiBJZiBwcmVzZW50IHRoZSBydWxlc2V0IHdpbGwgbm90IGJlIGFjdGl2ZSBieSBkZWZhdWx0LlxuICAgKiAnb3InIGNvbmRpdGlvbjogSWYgYXQgbGVhc3Qgb25lIGNvbXBvbmVudCBoYXMgc3Vic2NyaWJlZCwgdGhlIHJ1bGVzZXQgd2lsbCBiZWNvbWUgYWN0aXZlLlxuICAgKiBJZiBwcmVzZW50LCB0aGUge0BsaW5rIGxpbmtlZENvbXBvbmVudH0gcHJvcGVydHkgd2lsbCBub3QgYmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uXG4gICAqL1xuICBsaW5rZWRDb21wb25lbnRzPzogeyBvcjogSXRlbUlkZW50aWZpZXJbXSB9O1xuICAvKipcbiAgICogQ29tcG9uZW50IGxpbmtlZCB0byB0aGUgcnVsZXNldCwgaWYgc2V0IGl0IHdpbGwgZGlzYWJsZSB0aGUgcnVsZXNldCBleGVjdXRpb24gcGVyIGRlZmF1bHQsIHdhaXRpbmcgdG8gYSBzdWJzY3JpcHRpb25cbiAgICogQGRlcHJlY2F0ZWQgSXQgd2lsbCBiZSByZW1vdmVkIGluIHYxMiwgdXNlIHtAbGluayBsaW5rZWRDb21wb25lbnRzfSBpbnN0ZWFkXG4gICAqL1xuICBsaW5rZWRDb21wb25lbnQ/OiBJdGVtSWRlbnRpZmllcjtcbiAgLyoqIFVuaXF1ZSBpZCBvZiB0aGUgcnVsZXNldCovXG4gIGlkOiBzdHJpbmc7XG4gIC8qKiBTdG9yZXMgdGhlIHJlc3VsdCBvZiBlYWNoIHJ1bGVzIGZyb20gdGhlIHJ1bGVzZXQgKi9cbiAgcnVsZXNSZXN1bHRzU3ViamVjdCQ6IE9ic2VydmFibGU8QWN0aW9uQmxvY2tbXT47XG59XG4vKiogVGltZXN0YW1wIG9mIGEgcnVsZXMgZW5naW5lIG91dHB1dCBldmVudCAqL1xuZXhwb3J0IGludGVyZmFjZSBUaW1lZEV2ZW50IHtcbiAgLyoqIFRpbWVzdGFtcCB2YWx1ZSB3aGVuIHRoZSBldmVudCBvY2N1cnMgKi9cbiAgdGltZXN0YW1wOiBudW1iZXI7XG4gIC8qKiBEdXJhdGlvbiBvZiB0aGUgZXhlY3V0aW9uICovXG4gIGR1cmF0aW9uPzogbnVtYmVyO1xufVxuXG4vKiogRmFjdCBjaGFuZ2UgdHJpZ2dlcmluZyB0aGUgZXZhbHVhdGlvbiBvZiBhIHJ1bGUvZXhlY3V0aW9uIG9mIGEgcnVsZXNldCAqL1xuZXhwb3J0IGludGVyZmFjZSBFdmFsdWF0aW9uUmVhc29uIHtcbiAgLyoqIE5hbWUgb2YgdGhlIGZhY3QgdGhhdCBjaGFuZ2VkICovXG4gIGZhY3ROYW1lOiBzdHJpbmc7XG4gIC8qKiBOZXcgdmFsdWUgb2YgdGhlIGZhY3QgKi9cbiAgbmV3VmFsdWU/OiBGYWN0cztcbiAgLyoqIE9sZCB2YWx1ZSBvZiB0aGUgZmFjdCAqL1xuICBvbGRWYWx1ZT86IEZhY3RzO1xufVxuXG4vKiogUmVzdWx0IG9iamVjdCByZXN1bHRlZCBhdCB0aGUgZW5kIG9mIGEgcnVsZSBldmFsdWF0aW9uICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1bGVFdmFsdWF0aW9uIGV4dGVuZHMgVGltZWRFdmVudCB7XG4gIC8qKiBJZGVudGlmaWVyIG9mIHRoZSBldmFsdWF0aW9uIChydWxlc2V0IG5hbWUgKyBydWxlIG5hbWUpICovXG4gIGlkOiBzdHJpbmc7XG4gIC8qKiBFdmFsdWF0ZWQgcnVsZSBpZGVudGlmaWVyICovXG4gIHJ1bGU6IFBpY2s8UnVsZSwgJ2lkJyB8ICduYW1lJz47XG4gIC8qKiBBY3Rpb25zIG91dHB1dHRlZCBieSB0aGUgcnVsZSBldmFsdWF0aW9uICovXG4gIG91dHB1dEFjdGlvbnM6IEFjdGlvbkJsb2NrW10gfCB1bmRlZmluZWQ7XG4gIC8qKiBNYXAgY29udGFpbmluZyB0aGUgZmFjdHMgY2hhbmdlcyB0cmlnZ2VyaW5nIHRoZSBydWxlIGV2YWx1YXRpb24gKi9cbiAgdHJpZ2dlcnM6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIEV2YWx1YXRpb25SZWFzb24+PjtcbiAgLyoqIEVycm9yIG9iamVjdCBpbiBjYXNlIG9mIHJ1bGUgZXZhbHVhdGlvbiBmYWlsdXJlICovXG4gIGVycm9yPzogYW55O1xuICAvKiogUnVudGltZSBmYWN0cyB3aXRoIHZhbHVlcyBhdCB0aGUgZW5kIG9mIHJ1bGUgZXZhbHVhdGlvbiAgKi9cbiAgdGVtcG9yYXJ5RmFjdHM/OiBSZWNvcmQ8c3RyaW5nLCBGYWN0cz47XG4gIC8qKiBGbGFnIHRvIG5vdGlmeSBpZiB0aGUgcnVsZXMgZXZhbHVhdGlvbiBjb21lcyBmcm9tIGFuIG9sZCBydWxlc2V0IGV4ZWN1dGlvbiAqL1xuICBjYWNoZWQ/OiBib29sZWFuO1xufVxuXG4vKiogV3JhcHBlZCBydWxlIGV2YWx1YXRpb24gb3V0cHV0ICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1bGVFdmFsdWF0aW9uT3V0cHV0IHtcbiAgLyoqIEFjdGlvbnMgZW1pdHRlZCBhdCB0aGUgZW5kIG9mIHJ1bGUgZXZhbHVhdGlvbiAqL1xuICBhY3Rpb25zOiBBY3Rpb25CbG9ja1tdIHwgdW5kZWZpbmVkO1xuICAvKiogUnVsZSBldmFsdWF0aW9uIG91dHB1dCBvYmplY3QgKi9cbiAgZXZhbHVhdGlvbj86IFJ1bGVFdmFsdWF0aW9uO1xuICAvKiogRXJyb3Igb2JqZWN0IGVtaXR0ZWQgYXQgdGhlIGVuZCBvZiBydWxlIGV2YWx1YXRpb24sIGlmIGFueSAqL1xuICBlcnJvcj86IGFueTtcbn1cblxuLyoqIEJhc2Ugb2JqZWN0IHJlc3VsdGVkIGF0IHRoZSBlbmQgb2YgYSBydWxlc2V0IGV4ZWN1dGlvbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXNlUnVsZXNldEV4ZWN1dGlvbiB7XG4gIC8qKiBJZCBvZiB0aGUgcnVsZXNldCBleGVjdXRpb24gKi9cbiAgZXhlY3V0aW9uSWQ6IHN0cmluZztcbiAgLyoqIElkIG9mIHRoZSBydWxlc2V0IHdoaWNoIHdhcyBleGVjdXRlZCAqL1xuICBydWxlc2V0SWQ6IHN0cmluZztcbiAgLyoqIE5hbWUgb2YgdGhlIGV4ZWN1dGVkIHJ1bGVzZXQgKi9cbiAgcnVsZXNldE5hbWU6IHN0cmluZztcbiAgLyoqIENvdW50ZXIgb2YgZXhlY3V0aW9ucyBmb3IgdGhlIHJ1bGVzZXQgKi9cbiAgZXhlY3V0aW9uQ291bnRlcjogbnVtYmVyO1xuICAvKiogQWxsIGlucHV0IGZhY3RzIGFmZmVjdGluZyB0aGUgcnVsZXNldCAqL1xuICBpbnB1dEZhY3RzOiB7IGZhY3ROYW1lOiBzdHJpbmc7IHZhbHVlOiBGYWN0cyB9W107XG4gIC8qKiBSdW50aW1lIGZhY3RzIHVzZWQgYWNjcm9zIHRoZSBydWxlc2V0ICovXG4gIHRlbXBvcmFyeUZhY3RzPzogUmVjb3JkPHN0cmluZywgRmFjdHM+O1xuICAvKiogRmFjdHMgY2hhbmdlcyB0aGF0IHRyaWdnZXJlZCB0aGUgZXhlY3V0aW9uIG9mIHRoZSBydWxlc2V0ICovXG4gIHRyaWdnZXJzOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBFdmFsdWF0aW9uUmVhc29uPj47XG4gIC8qKiBMaXN0IG9mIGV2YWx1YXRlZCBydWxlcyBhY2Nyb3MgcnVsZXNldCBleGVjdXRpb24gKi9cbiAgcnVsZXNFdmFsdWF0aW9uczogUnVsZUV2YWx1YXRpb25bXTtcbn1cblxuLyoqIERlYnVnIGV2ZW50IGVtaXR0ZWQgaW4gY2FzZSBvZiBzdWNjZXNzZnVsIHJ1bGVzZXQgZXhlY3V0aW9uICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1bGVzZXRFeGVjdXRpb25FdmVudCBleHRlbmRzIEJhc2VSdWxlc2V0RXhlY3V0aW9uLCBUaW1lZEV2ZW50IHtcbiAgLyoqIEV2ZW50IHR5cGUgKi9cbiAgdHlwZTogJ1J1bGVzZXRFeGVjdXRpb24nO1xuICAvKiogTGlzdCBvZiB0aGUgYWN0aW9ucyBlbWl0dGVkIGF0IHRoZSBlbmQgb2YgcnVsZXNldCBleGVjdXRpb24gKi9cbiAgb3V0cHV0QWN0aW9uczogQWN0aW9uQmxvY2tbXTtcbn1cblxuLyoqIERlYnVnIGV2ZW50IGVtaXR0ZWQgaW4gY2FzZSBvZiBydWxlc2V0IGV4ZWN1dGlvbiBmYWlsdXJlICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1bGVzZXRFeGVjdXRpb25FcnJvckV2ZW50IGV4dGVuZHMgQmFzZVJ1bGVzZXRFeGVjdXRpb24sIFRpbWVkRXZlbnQge1xuICAvKiogRXZlbnQgdHlwZSAqL1xuICB0eXBlOiAnUnVsZXNldEV4ZWN1dGlvbkVycm9yJztcbiAgLyoqIExpc3Qgb2YgcnVsZXMgY2F1c2luZyB0aGUgZXhlY3V0aW9uIGVycm9yKi9cbiAgcnVsZXNDYXVzaW5nVGhlRXJyb3I6IFBpY2s8UnVsZSwgJ25hbWUnIHwgJ2lkJz5bXTtcbiAgLyoqIExpc3Qgb2Ygb3V0cHV0dGVkIGVycm9ycyAqL1xuICBlcnJvcnM6IGFueVtdO1xufVxuXG4vKiogRGVidWcgZXZlbnQgZW1pdHRlZCB3aGVuIGFjdGl2ZSBydWxlc2V0cyBhcmUgY2hhbmdpbmcgKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aXZlUnVsZXNldHNFdmVudCBleHRlbmRzIFRpbWVkRXZlbnQge1xuICAvKiogRXZlbnQgdHlwZSAqL1xuICB0eXBlOiAnQWN0aXZlUnVsZXNldHMnO1xuICAvKiogTGlzdCBvZiBhY3RpdmUgcnVsZXNldHMgKi9cbiAgcnVsZXNldHM6IFBpY2s8UnVsZXNldCwgJ25hbWUnIHwgJ2lkJz5bXTtcbn1cblxuLyoqIERlYnVnIGV2ZW50IGVtaXR0ZWQgZWFjaCB0aW1lIHRoZSBSdWxlcyBFbmdpbmUgb3V0cHV0cyBhIGxpc3Qgb2YgYWN0aW9ucyAqL1xuZXhwb3J0IGludGVyZmFjZSBBbGxBY3Rpb25zRXZlbnQgZXh0ZW5kcyBUaW1lZEV2ZW50IHtcbiAgLyoqIGV2ZW50IHR5cGUgKi9cbiAgdHlwZTogJ0FsbEFjdGlvbnMnO1xuICAvKiogTGlzdCBvZiBlbWl0dGVkIGFjdGlvbnMgKi9cbiAgYWN0aW9uczogQWN0aW9uQmxvY2tbXTtcbn1cblxuLyoqICBEZWJ1ZyBldmVudCBlbWl0dGVkIHdoZW4gcnVsZXNldHMgYXJlIHJlZ2lzdGVyZWQgdG8gdGhlIHJ1bGVzIGVuZ2luZSAqL1xuZXhwb3J0IGludGVyZmFjZSBBdmFpbGFibGVSdWxlc2V0cyBleHRlbmRzIFRpbWVkRXZlbnQge1xuICAvKiogRXZlbnQgdHlwZSAqL1xuICB0eXBlOiAnQXZhaWxhYmxlUnVsZXNldHMnO1xuICAvKiogUmVnaXN0ZXJlZCBydWxlc2V0cyBsaXN0ICovXG4gIGF2YWlsYWJsZVJ1bGVzZXRzOiBQaWNrPFJ1bGVzZXQsICduYW1lJyB8ICdpZCc+W107XG59XG5cbi8qKiAgRGVidWcgZXZlbnQgZW1pdHRlZCB3aGVuIGZhY3RzIGFyZSB1cGRhdGVkICovXG5leHBvcnQgaW50ZXJmYWNlIEF2YWlsYWJsZUZhY3RzU25hcHNob3QgZXh0ZW5kcyBUaW1lZEV2ZW50IHtcbiAgLyoqIEV2ZW50IHR5cGUgKi9cbiAgdHlwZTogJ0F2YWlsYWJsZUZhY3RzU25hcHNob3QnO1xuICAvKiogTGlzdCBvZiBhbGwgZmFjdHMgKi9cbiAgZmFjdHM6IHsgZmFjdE5hbWU6IHN0cmluZzsgdmFsdWU6IEZhY3RzIH1bXTtcbn1cblxuLyoqIFR5cGUgb2YgcG9zc2libGUgZGVidWcgZXZlbnRzIGVtaXR0ZWQgYnkgUnVsZXMgRW5naW5lICovXG5leHBvcnQgdHlwZSBEZWJ1Z0V2ZW50ID0gUnVsZXNldEV4ZWN1dGlvbkV2ZW50IHwgUnVsZXNldEV4ZWN1dGlvbkVycm9yRXZlbnQgfCBBY3RpdmVSdWxlc2V0c0V2ZW50IHwgQWxsQWN0aW9uc0V2ZW50IHwgQXZhaWxhYmxlUnVsZXNldHMgfCBBdmFpbGFibGVGYWN0c1NuYXBzaG90O1xuIl19
@@ -96,7 +96,10 @@ export class RulesEngine {
96
96
  * @param facts fact list to add / update
97
97
  */
98
98
  upsertFacts(facts) {
99
- (Array.isArray(facts) ? facts : [facts]).forEach(({ id, value$ }) => this.retrieveOrCreateFactStream(id, value$));
99
+ (Array.isArray(facts) ? facts : [facts]).forEach(({ id, value$ }) => {
100
+ this.engineDebug?.addAvailableFactsSnapshotEvent(id, value$);
101
+ this.retrieveOrCreateFactStream(id, value$);
102
+ });
100
103
  }
101
104
  /**
102
105
  * Update or insert rule in rules engine
@@ -131,4 +134,4 @@ export class RulesEngine {
131
134
  return Object.keys(this.factMap);
132
135
  }
133
136
  }
134
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5naW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VuZ2luZS9lbmdpbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUNMLGVBQWUsRUFDZixjQUFjLEVBQ2QsS0FBSyxFQUVMLEVBQUUsR0FDSCxNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFDTCxLQUFLLEVBQ0wsb0JBQW9CLEVBQ3BCLFdBQVcsRUFDWCxTQUFTLEVBQ1QsU0FBUyxFQUNULEdBQUcsR0FDSixNQUFNLGdCQUFnQixDQUFDO0FBWXhCLE9BQU8sRUFDTCx5QkFBeUIsR0FDMUIsTUFBTSx5Q0FBeUMsQ0FBQztBQUNqRCxPQUFPLEVBRUwsWUFBWSxHQUViLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUNMLGVBQWUsR0FDaEIsTUFBTSxvQkFBb0IsQ0FBQztBQU01QixtQkFBbUI7QUFDbkIsTUFBTSxPQUFPLFdBQVc7SUFrQ3RCOztPQUVHO0lBQ0gsSUFBVyxTQUFTO1FBQ2xCLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDNUIsQ0FBQztJQUVEOzs7T0FHRztJQUNILFlBQVksT0FBNEI7UUE1Q3hDLGtGQUFrRjtRQUNqRSxZQUFPLEdBQW9DLEVBQUUsQ0FBQztRQUUvRCw0REFBNEQ7UUFDM0Msc0JBQWlCLEdBQUcsSUFBSSxlQUFlLENBQWtDLEVBQUUsQ0FBQyxDQUFDO1FBeUM1RixJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sRUFBRSxXQUFXLElBQUksQ0FBQyxPQUFPLE1BQU0sS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzVHLElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxFQUFFLFFBQVEsQ0FBQztRQUNyQyxJQUFJLENBQUMsV0FBVyxFQUFFLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNDLElBQUks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QUFNLENBQUMsQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLEVBQUU7WUFDdEMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLGVBQWUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDNUQsT0FBTyxVQUFVLENBQUM7UUFDcEIsQ0FBQyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FDeEMsQ0FBQztJQUNKLENBQUM7SUFFRDs7O09BR0c7SUFDSSxlQUFlLENBQUMsU0FBc0Q7UUFDM0UsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFO1lBQ2xELEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDO1lBQzlCLE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksY0FBYztRQUNuQixPQUFPLENBQUMsWUFBOEMsRUFBRSxFQUFFLENBQ3hELFlBQVksQ0FBQyxJQUFJLENBQ2YsU0FBUyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQzVGLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUNqQyxDQUFDO0lBQ04sQ0FBQztJQUVELDZDQUE2QztJQUN0Qyx1QkFBdUI7UUFDNUIsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNuQyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG4gIExvZ2dlcixcbn0gZnJvbSAnQG8zci9sb2dnZXInO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBmaXJzdFZhbHVlRnJvbSxcbiAgbWVyZ2UsXG4gIE9ic2VydmFibGUsXG4gIG9mLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIGRlbGF5LFxuICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcbiAgc2hhcmVSZXBsYXksXG4gIHN3aXRjaE1hcCxcbiAgdGFrZVVudGlsLFxuICB0YXAsXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIEVuZ2luZURlYnVnZ2VyLFxufSBmcm9tICcuL2RlYnVnL2VuZ2luZS5kZWJ1Zyc7XG5pbXBvcnQge1xuICBGYWN0T2JqZWN0LFxuICBSdWxlc0VuZ2luZU9wdGlvbnMsXG59IGZyb20gJy4vZW5naW5lLmludGVyZmFjZSc7XG5pbXBvcnQgdHlwZSB7XG4gIEZhY3QsXG4gIEZhY3RzLFxufSBmcm9tICcuL2ZhY3QvaW5kZXgnO1xuaW1wb3J0IHtcbiAgZmlsdGVyUnVsZXNldHNFdmVudFN0cmVhbSxcbn0gZnJvbSAnLi9oZWxwZXJzL2ZpbHRlci1ydWxlc2V0LWV2ZW50Lm9wZXJhdG9yJztcbmltcG9ydCB7XG4gIE9wZXJhdG9yLFxuICBvcGVyYXRvckxpc3QsXG4gIFVuYXJ5T3BlcmF0b3IsXG59IGZyb20gJy4vb3BlcmF0b3IvaW5kZXgnO1xuaW1wb3J0IHtcbiAgUnVsZXNldEV4ZWN1dG9yLFxufSBmcm9tICcuL3J1bGVzZXQtZXhlY3V0b3InO1xuaW1wb3J0IHtcbiAgQWN0aW9uQmxvY2ssXG4gIFJ1bGVzZXQsXG59IGZyb20gJy4vc3RydWN0dXJlJztcblxuLyoqIFJ1bGVzIGVuZ2luZSAqL1xuZXhwb3J0IGNsYXNzIFJ1bGVzRW5naW5lIHtcbiAgLyoqIE1hcCBvZiByZWdpc3RlcmVkIGZhY3Qgc3RyZWFtLCB0aGlzIG1hcCBpcyBtdXRhdGVkIGJ5IHRoZSBydWxlc2V0IGV4ZWN1dG9ycyAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGZhY3RNYXA6IFJlY29yZDxzdHJpbmcsIEZhY3RPYmplY3Q8YW55Pj4gPSB7fTtcblxuICAvKiogU3ViamVjdCBjb250YWluaW5nIHRoZSBydWxlc2V0cyBhbmQgdGhlIHJlc3VsdHMgc3RyZWFtKi9cbiAgcHJpdmF0ZSByZWFkb25seSBydWxlc2V0TWFwU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UmVjb3JkPHN0cmluZywgUnVsZXNldEV4ZWN1dG9yPj4oe30pO1xuXG4gIC8qKiBNYXAgb2YgYXZhaWxhYmxlIG9wZXJhdG9ycyAqL1xuICBwdWJsaWMgb3BlcmF0b3JzOiBSZWNvcmQ8c3RyaW5nLCBPcGVyYXRvcjx1bmtub3duLCB1bmtub3duPj47XG5cbiAgLyoqIExpc3Qgb2YgZXZlbnRzIGZvciB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgcnVsZXMgZW5naW5lICovXG4gIHB1YmxpYyByZWFkb25seSBldmVudHMkOiBPYnNlcnZhYmxlPEFjdGlvbkJsb2NrW10+O1xuXG4gIC8qKiBEZWxheSBiZWZvcmUgZmFjdCBzdHJlYW0gZGVmYXVsdGluZyB2YWx1ZSAqL1xuICBwdWJsaWMgZmFjdERlZmF1bHREZWxheT86IG51bWJlcjtcblxuICAvKipcbiAgICogSW5zdGFuY2Ugb2YgZW5naW5lIGRlYnVnIG9iamVjdDsgVW5kZWZpbmVkIGlmIGRlYnVnTW9kZSBpcyBub3QgYWN0aXZlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZW5naW5lRGVidWc/OiBFbmdpbmVEZWJ1Z2dlcjtcblxuICAvKiogTmFtZSBvZiB0aGUgcnVsZXMgZW5naW5lIGluc3RhbmNlICovXG4gIHB1YmxpYyByZWFkb25seSBydWxlc0VuZ2luZUluc3RhbmNlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQZXJmb3JtYW5jZSByZXBvcnRlciB0byB1c2UgZm9yIHBlcmZvcm1hbmNlIG1lYXN1cmVtZW50cy5cbiAgICogQGRlZmF1bHQgd2luZG93LnBlcmZvcm1hbmNlIG9uIGJyb3dzZXIgb25seSwgdW5kZWZpbmVkIG9uIG5vZGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwZXJmb3JtYW5jZTtcblxuICAvKipcbiAgICogTG9nIHRoZSBlbmdpbmUgZXJyb3JzXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbG9nZ2VyPzogTG9nZ2VyO1xuICAvKipcbiAgICogRmxhZyB0byBjaGVjayBpZiB0aGUgcnVuIGlzIGluIGRlYnVnIG1vZGUgb3Igbm90XG4gICAqL1xuICBwdWJsaWMgZ2V0IGRlYnVnTW9kZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmVuZ2luZURlYnVnO1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bGVzIGVuZ2luZVxuICAgKiBAcGFyYW0gb3B0aW9ucyBydWxlcyBlbmdpbmUgb3B0aW9uc1xuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucz86IFJ1bGVzRW5naW5lT3B0aW9ucykge1xuICAgIHRoaXMucGVyZm9ybWFuY2UgPSBvcHRpb25zPy5wZXJmb3JtYW5jZSB8fCAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiB3aW5kb3cucGVyZm9ybWFuY2UpO1xuICAgIHRoaXMuZW5naW5lRGVidWcgPSBvcHRpb25zPy5kZWJ1Z2dlcjtcbiAgICB0aGlzLmVuZ2luZURlYnVnPy5yZWdpc3RlclJ1bGVFbmdpbmUodGhpcyk7XG4gICAgdGhpcy5sb2dnZXIgPSBvcHRpb25zPy5sb2dnZXI7XG4gICAgdGhpcy5ydWxlc0VuZ2luZUluc3RhbmNlTmFtZSA9IG9wdGlvbnM/LnJ1bGVzRW5naW5lSW5zdGFuY2VOYW1lIHx8ICdSdWxlc0VuZ2luZSc7XG4gICAgdGhpcy5mYWN0RGVmYXVsdERlbGF5ID0gb3B0aW9ucz8uZmFjdERlZmF1bHREZWxheTtcbiAgICAvLyBMb2FkIGRlZmF1bHQgb3BlcmF0b3JzXG4gICAgdGhpcy5vcGVyYXRvcnMgPSBvcGVyYXRvckxpc3QucmVkdWNlPFJlY29yZDxzdHJpbmcsIE9wZXJhdG9yPGFueSwgYW55Pj4+KChhY2MsIG9wZXJhdG9yKSA9PiB7XG4gICAgICBhY2Nbb3BlcmF0b3IubmFtZV0gPSBvcGVyYXRvcjtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30pO1xuICAgIHRoaXMuZXZlbnRzJCA9IHRoaXMucnVsZXNldE1hcFN1YmplY3QucGlwZShcbiAgICAgIHRoaXMucHJlcGFyZUFjdGlvbnNTdHJlYW0oKSxcbiAgICAgIHRoaXMuaGFuZGxlQWN0aW9uc1N0cmVhbU91dHB1dCgpXG4gICAgKTtcbiAgICBpZiAob3B0aW9ucz8uZmFjdHMpIHtcbiAgICAgIHRoaXMudXBzZXJ0RmFjdHMob3B0aW9ucy5mYWN0cyk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zPy5ydWxlcykge1xuICAgICAgdGhpcy51cHNlcnRSdWxlc2V0cyhvcHRpb25zLnJ1bGVzKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnM/Lm9wZXJhdG9ycykge1xuICAgICAgdGhpcy51cHNlcnRPcGVyYXRvcnMob3B0aW9ucy5vcGVyYXRvcnMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBdHRhY2ggZGVidWcgZXZlbnRzIHRvIGFjdGlvbnMgc3RyZWFtIGlmIGRlYnVnIGVuZ2luZSBpcyBhY3RpdmF0ZWRcbiAgICovXG4gIHByaXZhdGUgaGFuZGxlQWN0aW9uc1N0cmVhbU91dHB1dDxUIGV4dGVuZHMgQWN0aW9uQmxvY2sgPSBBY3Rpb25CbG9jaz4oKTogKGFjdGlvbnNTdHJlYW0kOiBPYnNlcnZhYmxlPFRbXT4pID0+IE9ic2VydmFibGU8VFtdPiB7XG4gICAgcmV0dXJuIChhY3Rpb25zU3RyZWFtJDogT2JzZXJ2YWJsZTxUW10+KSA9PiB0aGlzLmVuZ2luZURlYnVnID8gYWN0aW9uc1N0cmVhbSQucGlwZSh0YXAoKGFsbEFjdGlvbnMpID0+IHRoaXMuZW5naW5lRGVidWchLmFsbEFjdGlvbnNDaGFuZ2UoYWxsQWN0aW9ucykpKSA6IGFjdGlvbnNTdHJlYW0kO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSB0aGUgYWN0aW9ucyBzdHJlYW0gZXZlbnQgYmFzZWQgb24gcHJvdmlkZWQgYWN0aXZlIHJ1bGVzZXRzIGlkczsgSGFuZGxlIGRlYnVnIHRvb1xuICAgKiBAcGFyYW0gcnVsZVNldHNcbiAgICovXG4gIHByaXZhdGUgcHJlcGFyZUFjdGlvbnNTdHJlYW08VCBleHRlbmRzIEFjdGlvbkJsb2NrID0gQWN0aW9uQmxvY2s+KHJ1bGVTZXRzPzogc3RyaW5nW10pOiAocnVsZXNldE1hcFN1YmplY3QkOiBPYnNlcnZhYmxlPFJlY29yZDxzdHJpbmcsIFJ1bGVzZXRFeGVjdXRvcj4+KSA9PiBPYnNlcnZhYmxlPFRbXT4ge1xuICAgIHJldHVybiAocnVsZXNldE1hcFN1YmplY3QkOiBPYnNlcnZhYmxlPFJlY29yZDxzdHJpbmcsIFJ1bGVzZXRFeGVjdXRvcj4+KSA9PiAodGhpcy5lbmdpbmVEZWJ1Z1xuICAgICAgPyBydWxlc2V0TWFwU3ViamVjdCQucGlwZShcbiAgICAgICAgdGFwKChydWxlU2V0RXhlY3V0b3JNYXApID0+IHRoaXMuZW5naW5lRGVidWchLmFjdGl2ZVJ1bGVzZXRzQ2hhbmdlKHJ1bGVTZXRFeGVjdXRvck1hcCwgcnVsZVNldHMpKSxcbiAgICAgICAgZmlsdGVyUnVsZXNldHNFdmVudFN0cmVhbShydWxlU2V0cykpXG4gICAgICA6IHJ1bGVzZXRNYXBTdWJqZWN0JC5waXBlKGZpbHRlclJ1bGVzZXRzRXZlbnRTdHJlYW0ocnVsZVNldHMpKSkgYXMgT2JzZXJ2YWJsZTxUW10+O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBvciByZXRyaWV2ZSBhIGZhY3Qgc3RyZWFtXG4gICAqIFRoZSBmYWN0IHN0cmVhbSBjcmVhdGVkIHdpbGwgYmUgcmVnaXN0ZXJlZCBpbiB0aGUgZW5naW5lXG4gICAqIEBwYXJhbSBpZCBJRCBvZiB0aGUgZmFjdCB0byByZXRyaWV2ZVxuICAgKiBAcGFyYW0gZmFjdFZhbHVlJCBWYWx1ZSBzdHJlYW0gZm9yIHRoZSBmYWN0XG4gICAqL1xuICBwdWJsaWMgcmV0cmlldmVPckNyZWF0ZUZhY3RTdHJlYW08VCA9IEZhY3RzPihpZDogc3RyaW5nLCBmYWN0VmFsdWUkPzogT2JzZXJ2YWJsZTxUPik6IE9ic2VydmFibGU8VCB8IHVuZGVmaW5lZD4ge1xuICAgIC8vIHRyaWNrIHRvIGVtaXQgdW5kZWZpbmVkIGlmIHRoZSBvYnNlcnZhYmxlIGlzIG5vdCBpbW1lZGlhdGVseSBlbWl0dGluZyAodG8gbm90IGJsb2MgZXhlY3V0aW9uKVxuICAgIGNvbnN0IG9icyQgPSBmYWN0VmFsdWUkXG4gICAgICA/IG1lcmdlKGZhY3RWYWx1ZSQsIG9mKHVuZGVmaW5lZCkucGlwZShkZWxheSh0aGlzLmZhY3REZWZhdWx0RGVsYXkgfHwgMCksIHRha2VVbnRpbChmYWN0VmFsdWUkKSkpXG4gICAgICA6IGZhY3RWYWx1ZSQ7XG4gICAgY29uc3QgZmFjdE9iaiA9IHRoaXMuZmFjdE1hcFtpZF07XG4gICAgaWYgKGZhY3RPYmopIHtcbiAgICAgIGlmIChmYWN0VmFsdWUkKSB7XG4gICAgICAgIGZhY3RPYmouc3ViamVjdC5uZXh0KG9icyQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhY3RPYmoudmFsdWUkO1xuICAgIH1cblxuICAgIGNvbnN0IHN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE9ic2VydmFibGU8VCB8IHVuZGVmaW5lZD4gfCB1bmRlZmluZWQ+KG9icyQpO1xuICAgIGNvbnN0IHZhbHVlJCA9IHN1YmplY3QucGlwZShcbiAgICAgIHN3aXRjaE1hcCgodmFsdWUpID0+IHZhbHVlIHx8IG9mKHVuZGVmaW5lZCkpLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKTtcblxuICAgIHRoaXMuZmFjdE1hcFtpZF0gPSB7XG4gICAgICBzdWJqZWN0LFxuICAgICAgdmFsdWUkXG4gICAgfTtcblxuICAgIHJldHVybiB2YWx1ZSQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgdGhlIHByb21pc2Ugb2YgdGhlIGxhdGVzdCB2YWx1ZSBvZiBhIGZhY3QuXG4gICAqIFJldHVybiB1bmRlZmluZWQgaWYgdGhlIGZhY3QgaXMgbm90IGRlZmluZWQuXG4gICAqIEBwYXJhbSBpZCBJRCBvZiB0aGUgZmFjdCB0byByZXRyaWV2ZVxuICAgKi9cbiAgcHVibGljIHJldHJpZXZlRmFjdFZhbHVlPFQgPSB1bmtub3duPihpZDogc3RyaW5nKTogUHJvbWlzZTxUIHwgdW5kZWZpbmVkPiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZmFjdE1hcFtpZF0udmFsdWUkICYmIGZpcnN0VmFsdWVGcm9tKHRoaXMucmV0cmlldmVPckNyZWF0ZUZhY3RTdHJlYW08VD4oaWQpLCB7IGRlZmF1bHRWYWx1ZTogdW5kZWZpbmVkIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBvciBpbnNlcnQgZmFjdCBpbiBydWxlcyBlbmdpbmVcbiAgICogQHBhcmFtIGZhY3RzIGZhY3QgbGlzdCB0byBhZGQgLyB1cGRhdGVcbiAgICovXG4gIHB1YmxpYyB1cHNlcnRGYWN0czxUID0gdW5rbm93bj4oZmFjdHM6IEZhY3Q8VD4gfCBGYWN0PFQ+W10pIHtcbiAgICAoQXJyYXkuaXNBcnJheShmYWN0cykgPyBmYWN0cyA6IFtmYWN0c10pLmZvckVhY2goKHsgaWQsIHZhbHVlJCB9KSA9PlxuICAgICAgdGhpcy5yZXRyaWV2ZU9yQ3JlYXRlRmFjdFN0cmVhbShpZCwgdmFsdWUkKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIG9yIGluc2VydCBydWxlIGluIHJ1bGVzIGVuZ2luZVxuICAgKiBAcGFyYW0gcnVsZXNldHNcbiAgICovXG4gIHB1YmxpYyB1cHNlcnRSdWxlc2V0cyhydWxlc2V0czogUnVsZXNldFtdKSB7XG4gICAgdGhpcy5lbmdpbmVEZWJ1Zz8uYWRkQXZhaWxhYmxlUnVsZXNldHMocnVsZXNldHMpO1xuXG4gICAgdGhpcy5ydWxlc2V0TWFwU3ViamVjdC5uZXh0KFxuICAgICAgcnVsZXNldHMucmVkdWNlKChhY2NSdWxlc2V0LCBydWxlc2V0KSA9PiB7XG4gICAgICAgIGFjY1J1bGVzZXRbcnVsZXNldC5pZF0gPSBuZXcgUnVsZXNldEV4ZWN1dG9yKHJ1bGVzZXQsIHRoaXMpO1xuICAgICAgICByZXR1cm4gYWNjUnVsZXNldDtcbiAgICAgIH0sIHsgLi4udGhpcy5ydWxlc2V0TWFwU3ViamVjdC52YWx1ZSB9KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIG9yIGluc2VydCBvcGVyYXRvciBpbiBydWxlcyBlbmdpbmVcbiAgICogQHBhcmFtIG9wZXJhdG9ycyBvcGVyYXRvciBsaXN0IHRvIGFkZCAvIHVwZGF0ZVxuICAgKi9cbiAgcHVibGljIHVwc2VydE9wZXJhdG9ycyhvcGVyYXRvcnM6IChPcGVyYXRvcjxhbnksIGFueT4gfCBVbmFyeU9wZXJhdG9yPGFueT4pW10pIHtcbiAgICB0aGlzLm9wZXJhdG9ycyA9IG9wZXJhdG9ycy5yZWR1Y2UoKGFjYywgb3BlcmF0b3IpID0+IHtcbiAgICAgIGFjY1tvcGVyYXRvci5uYW1lXSA9IG9wZXJhdG9yO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7IC4uLnRoaXMub3BlcmF0b3JzIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wZXJhdG9yIHRvIGFwcGx5IG9uIGEgc3RyZWFtIG9mIHJ1bGVzZXRzIGlkc1xuICAgKiBSZXR1cm5zIGEgc3RyZWFtIG9mIGFjdGlvbnMgb3V0cHV0dGVkIGJ5IHRoZSBydWxlcyBlbmdpbmUsIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHJ1bGVzZXRzSWRzXG4gICAqL1xuICBwdWJsaWMgZ2V0RXZlbnRTdHJlYW08VCBleHRlbmRzIEFjdGlvbkJsb2NrID0gQWN0aW9uQmxvY2s+KCk6IChydWxlc2V0c0lkcyQ6IE9ic2VydmFibGU8c3RyaW5nW10gfCB1bmRlZmluZWQ+KSA9PiBPYnNlcnZhYmxlPFRbXT4ge1xuICAgIHJldHVybiAocnVsZXNldHNJZHMkOiBPYnNlcnZhYmxlPHN0cmluZ1tdIHwgdW5kZWZpbmVkPikgPT5cbiAgICAgIHJ1bGVzZXRzSWRzJC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKHJ1bGVTZXRzKSA9PiB0aGlzLnJ1bGVzZXRNYXBTdWJqZWN0LnBpcGUodGhpcy5wcmVwYXJlQWN0aW9uc1N0cmVhbTxUPihydWxlU2V0cykpKSxcbiAgICAgICAgdGhpcy5oYW5kbGVBY3Rpb25zU3RyZWFtT3V0cHV0KClcbiAgICAgICk7XG4gIH1cblxuICAvKiogR2V0IHRoZSBsaXN0IG9mIHJlZ2lzdGVyZWQgZmFjdHMgbmFtZXMgKi9cbiAgcHVibGljIGdldFJlZ2lzdGVyZWRGYWN0c05hbWVzKCkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmZhY3RNYXApO1xuICB9XG59XG4iXX0=
137
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5naW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VuZ2luZS9lbmdpbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUNMLGVBQWUsRUFDZixjQUFjLEVBQ2QsS0FBSyxFQUVMLEVBQUUsR0FDSCxNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFDTCxLQUFLLEVBQ0wsb0JBQW9CLEVBQ3BCLFdBQVcsRUFDWCxTQUFTLEVBQ1QsU0FBUyxFQUNULEdBQUcsR0FDSixNQUFNLGdCQUFnQixDQUFDO0FBWXhCLE9BQU8sRUFDTCx5QkFBeUIsR0FDMUIsTUFBTSx5Q0FBeUMsQ0FBQztBQUNqRCxPQUFPLEVBRUwsWUFBWSxHQUViLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUNMLGVBQWUsR0FDaEIsTUFBTSxvQkFBb0IsQ0FBQztBQU01QixtQkFBbUI7QUFDbkIsTUFBTSxPQUFPLFdBQVc7SUFrQ3RCOztPQUVHO0lBQ0gsSUFBVyxTQUFTO1FBQ2xCLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDNUIsQ0FBQztJQUVEOzs7T0FHRztJQUNILFlBQVksT0FBNEI7UUE1Q3hDLGtGQUFrRjtRQUNqRSxZQUFPLEdBQW9DLEVBQUUsQ0FBQztRQUUvRCw0REFBNEQ7UUFDM0Msc0JBQWlCLEdBQUcsSUFBSSxlQUFlLENBQWtDLEVBQUUsQ0FBQyxDQUFDO1FBeUM1RixJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sRUFBRSxXQUFXLElBQUksQ0FBQyxPQUFPLE1BQU0sS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzVHLElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxFQUFFLFFBQVEsQ0FBQztRQUNyQyxJQUFJLENBQUMsV0FBVyxFQUFFLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNDLElBQUks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dCI6WyJpbXBvcnQgdHlwZSB7XG4gIExvZ2dlcixcbn0gZnJvbSAnQG8zci9sb2dnZXInO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBmaXJzdFZhbHVlRnJvbSxcbiAgbWVyZ2UsXG4gIE9ic2VydmFibGUsXG4gIG9mLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIGRlbGF5LFxuICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcbiAgc2hhcmVSZXBsYXksXG4gIHN3aXRjaE1hcCxcbiAgdGFrZVVudGlsLFxuICB0YXAsXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIEVuZ2luZURlYnVnZ2VyLFxufSBmcm9tICcuL2RlYnVnL2VuZ2luZS5kZWJ1Zyc7XG5pbXBvcnQge1xuICBGYWN0T2JqZWN0LFxuICBSdWxlc0VuZ2luZU9wdGlvbnMsXG59IGZyb20gJy4vZW5naW5lLmludGVyZmFjZSc7XG5pbXBvcnQgdHlwZSB7XG4gIEZhY3QsXG4gIEZhY3RzLFxufSBmcm9tICcuL2ZhY3QvaW5kZXgnO1xuaW1wb3J0IHtcbiAgZmlsdGVyUnVsZXNldHNFdmVudFN0cmVhbSxcbn0gZnJvbSAnLi9oZWxwZXJzL2ZpbHRlci1ydWxlc2V0LWV2ZW50Lm9wZXJhdG9yJztcbmltcG9ydCB7XG4gIE9wZXJhdG9yLFxuICBvcGVyYXRvckxpc3QsXG4gIFVuYXJ5T3BlcmF0b3IsXG59IGZyb20gJy4vb3BlcmF0b3IvaW5kZXgnO1xuaW1wb3J0IHtcbiAgUnVsZXNldEV4ZWN1dG9yLFxufSBmcm9tICcuL3J1bGVzZXQtZXhlY3V0b3InO1xuaW1wb3J0IHtcbiAgQWN0aW9uQmxvY2ssXG4gIFJ1bGVzZXQsXG59IGZyb20gJy4vc3RydWN0dXJlJztcblxuLyoqIFJ1bGVzIGVuZ2luZSAqL1xuZXhwb3J0IGNsYXNzIFJ1bGVzRW5naW5lIHtcbiAgLyoqIE1hcCBvZiByZWdpc3RlcmVkIGZhY3Qgc3RyZWFtLCB0aGlzIG1hcCBpcyBtdXRhdGVkIGJ5IHRoZSBydWxlc2V0IGV4ZWN1dG9ycyAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGZhY3RNYXA6IFJlY29yZDxzdHJpbmcsIEZhY3RPYmplY3Q8YW55Pj4gPSB7fTtcblxuICAvKiogU3ViamVjdCBjb250YWluaW5nIHRoZSBydWxlc2V0cyBhbmQgdGhlIHJlc3VsdHMgc3RyZWFtKi9cbiAgcHJpdmF0ZSByZWFkb25seSBydWxlc2V0TWFwU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UmVjb3JkPHN0cmluZywgUnVsZXNldEV4ZWN1dG9yPj4oe30pO1xuXG4gIC8qKiBNYXAgb2YgYXZhaWxhYmxlIG9wZXJhdG9ycyAqL1xuICBwdWJsaWMgb3BlcmF0b3JzOiBSZWNvcmQ8c3RyaW5nLCBPcGVyYXRvcjx1bmtub3duLCB1bmtub3duPj47XG5cbiAgLyoqIExpc3Qgb2YgZXZlbnRzIGZvciB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgcnVsZXMgZW5naW5lICovXG4gIHB1YmxpYyByZWFkb25seSBldmVudHMkOiBPYnNlcnZhYmxlPEFjdGlvbkJsb2NrW10+O1xuXG4gIC8qKiBEZWxheSBiZWZvcmUgZmFjdCBzdHJlYW0gZGVmYXVsdGluZyB2YWx1ZSAqL1xuICBwdWJsaWMgZmFjdERlZmF1bHREZWxheT86IG51bWJlcjtcblxuICAvKipcbiAgICogSW5zdGFuY2Ugb2YgZW5naW5lIGRlYnVnIG9iamVjdDsgVW5kZWZpbmVkIGlmIGRlYnVnTW9kZSBpcyBub3QgYWN0aXZlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZW5naW5lRGVidWc/OiBFbmdpbmVEZWJ1Z2dlcjtcblxuICAvKiogTmFtZSBvZiB0aGUgcnVsZXMgZW5naW5lIGluc3RhbmNlICovXG4gIHB1YmxpYyByZWFkb25seSBydWxlc0VuZ2luZUluc3RhbmNlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQZXJmb3JtYW5jZSByZXBvcnRlciB0byB1c2UgZm9yIHBlcmZvcm1hbmNlIG1lYXN1cmVtZW50cy5cbiAgICogQGRlZmF1bHQgd2luZG93LnBlcmZvcm1hbmNlIG9uIGJyb3dzZXIgb25seSwgdW5kZWZpbmVkIG9uIG5vZGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwZXJmb3JtYW5jZTtcblxuICAvKipcbiAgICogTG9nIHRoZSBlbmdpbmUgZXJyb3JzXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbG9nZ2VyPzogTG9nZ2VyO1xuICAvKipcbiAgICogRmxhZyB0byBjaGVjayBpZiB0aGUgcnVuIGlzIGluIGRlYnVnIG1vZGUgb3Igbm90XG4gICAqL1xuICBwdWJsaWMgZ2V0IGRlYnVnTW9kZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmVuZ2luZURlYnVnO1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bGVzIGVuZ2luZVxuICAgKiBAcGFyYW0gb3B0aW9ucyBydWxlcyBlbmdpbmUgb3B0aW9uc1xuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucz86IFJ1bGVzRW5naW5lT3B0aW9ucykge1xuICAgIHRoaXMucGVyZm9ybWFuY2UgPSBvcHRpb25zPy5wZXJmb3JtYW5jZSB8fCAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiB3aW5kb3cucGVyZm9ybWFuY2UpO1xuICAgIHRoaXMuZW5naW5lRGVidWcgPSBvcHRpb25zPy5kZWJ1Z2dlcjtcbiAgICB0aGlzLmVuZ2luZURlYnVnPy5yZWdpc3RlclJ1bGVFbmdpbmUodGhpcyk7XG4gICAgdGhpcy5sb2dnZXIgPSBvcHRpb25zPy5sb2dnZXI7XG4gICAgdGhpcy5ydWxlc0VuZ2luZUluc3RhbmNlTmFtZSA9IG9wdGlvbnM/LnJ1bGVzRW5naW5lSW5zdGFuY2VOYW1lIHx8ICdSdWxlc0VuZ2luZSc7XG4gICAgdGhpcy5mYWN0RGVmYXVsdERlbGF5ID0gb3B0aW9ucz8uZmFjdERlZmF1bHREZWxheTtcbiAgICAvLyBMb2FkIGRlZmF1bHQgb3BlcmF0b3JzXG4gICAgdGhpcy5vcGVyYXRvcnMgPSBvcGVyYXRvckxpc3QucmVkdWNlPFJlY29yZDxzdHJpbmcsIE9wZXJhdG9yPGFueSwgYW55Pj4+KChhY2MsIG9wZXJhdG9yKSA9PiB7XG4gICAgICBhY2Nbb3BlcmF0b3IubmFtZV0gPSBvcGVyYXRvcjtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30pO1xuICAgIHRoaXMuZXZlbnRzJCA9IHRoaXMucnVsZXNldE1hcFN1YmplY3QucGlwZShcbiAgICAgIHRoaXMucHJlcGFyZUFjdGlvbnNTdHJlYW0oKSxcbiAgICAgIHRoaXMuaGFuZGxlQWN0aW9uc1N0cmVhbU91dHB1dCgpXG4gICAgKTtcbiAgICBpZiAob3B0aW9ucz8uZmFjdHMpIHtcbiAgICAgIHRoaXMudXBzZXJ0RmFjdHMob3B0aW9ucy5mYWN0cyk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zPy5ydWxlcykge1xuICAgICAgdGhpcy51cHNlcnRSdWxlc2V0cyhvcHRpb25zLnJ1bGVzKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnM/Lm9wZXJhdG9ycykge1xuICAgICAgdGhpcy51cHNlcnRPcGVyYXRvcnMob3B0aW9ucy5vcGVyYXRvcnMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBdHRhY2ggZGVidWcgZXZlbnRzIHRvIGFjdGlvbnMgc3RyZWFtIGlmIGRlYnVnIGVuZ2luZSBpcyBhY3RpdmF0ZWRcbiAgICovXG4gIHByaXZhdGUgaGFuZGxlQWN0aW9uc1N0cmVhbU91dHB1dDxUIGV4dGVuZHMgQWN0aW9uQmxvY2sgPSBBY3Rpb25CbG9jaz4oKTogKGFjdGlvbnNTdHJlYW0kOiBPYnNlcnZhYmxlPFRbXT4pID0+IE9ic2VydmFibGU8VFtdPiB7XG4gICAgcmV0dXJuIChhY3Rpb25zU3RyZWFtJDogT2JzZXJ2YWJsZTxUW10+KSA9PiB0aGlzLmVuZ2luZURlYnVnID8gYWN0aW9uc1N0cmVhbSQucGlwZSh0YXAoKGFsbEFjdGlvbnMpID0+IHRoaXMuZW5naW5lRGVidWchLmFsbEFjdGlvbnNDaGFuZ2UoYWxsQWN0aW9ucykpKSA6IGFjdGlvbnNTdHJlYW0kO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSB0aGUgYWN0aW9ucyBzdHJlYW0gZXZlbnQgYmFzZWQgb24gcHJvdmlkZWQgYWN0aXZlIHJ1bGVzZXRzIGlkczsgSGFuZGxlIGRlYnVnIHRvb1xuICAgKiBAcGFyYW0gcnVsZVNldHNcbiAgICovXG4gIHByaXZhdGUgcHJlcGFyZUFjdGlvbnNTdHJlYW08VCBleHRlbmRzIEFjdGlvbkJsb2NrID0gQWN0aW9uQmxvY2s+KHJ1bGVTZXRzPzogc3RyaW5nW10pOiAocnVsZXNldE1hcFN1YmplY3QkOiBPYnNlcnZhYmxlPFJlY29yZDxzdHJpbmcsIFJ1bGVzZXRFeGVjdXRvcj4+KSA9PiBPYnNlcnZhYmxlPFRbXT4ge1xuICAgIHJldHVybiAocnVsZXNldE1hcFN1YmplY3QkOiBPYnNlcnZhYmxlPFJlY29yZDxzdHJpbmcsIFJ1bGVzZXRFeGVjdXRvcj4+KSA9PiAodGhpcy5lbmdpbmVEZWJ1Z1xuICAgICAgPyBydWxlc2V0TWFwU3ViamVjdCQucGlwZShcbiAgICAgICAgdGFwKChydWxlU2V0RXhlY3V0b3JNYXApID0+IHRoaXMuZW5naW5lRGVidWchLmFjdGl2ZVJ1bGVzZXRzQ2hhbmdlKHJ1bGVTZXRFeGVjdXRvck1hcCwgcnVsZVNldHMpKSxcbiAgICAgICAgZmlsdGVyUnVsZXNldHNFdmVudFN0cmVhbShydWxlU2V0cykpXG4gICAgICA6IHJ1bGVzZXRNYXBTdWJqZWN0JC5waXBlKGZpbHRlclJ1bGVzZXRzRXZlbnRTdHJlYW0ocnVsZVNldHMpKSkgYXMgT2JzZXJ2YWJsZTxUW10+O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBvciByZXRyaWV2ZSBhIGZhY3Qgc3RyZWFtXG4gICAqIFRoZSBmYWN0IHN0cmVhbSBjcmVhdGVkIHdpbGwgYmUgcmVnaXN0ZXJlZCBpbiB0aGUgZW5naW5lXG4gICAqIEBwYXJhbSBpZCBJRCBvZiB0aGUgZmFjdCB0byByZXRyaWV2ZVxuICAgKiBAcGFyYW0gZmFjdFZhbHVlJCBWYWx1ZSBzdHJlYW0gZm9yIHRoZSBmYWN0XG4gICAqL1xuICBwdWJsaWMgcmV0cmlldmVPckNyZWF0ZUZhY3RTdHJlYW08VCA9IEZhY3RzPihpZDogc3RyaW5nLCBmYWN0VmFsdWUkPzogT2JzZXJ2YWJsZTxUPik6IE9ic2VydmFibGU8VCB8IHVuZGVmaW5lZD4ge1xuICAgIC8vIHRyaWNrIHRvIGVtaXQgdW5kZWZpbmVkIGlmIHRoZSBvYnNlcnZhYmxlIGlzIG5vdCBpbW1lZGlhdGVseSBlbWl0dGluZyAodG8gbm90IGJsb2MgZXhlY3V0aW9uKVxuICAgIGNvbnN0IG9icyQgPSBmYWN0VmFsdWUkXG4gICAgICA/IG1lcmdlKGZhY3RWYWx1ZSQsIG9mKHVuZGVmaW5lZCkucGlwZShkZWxheSh0aGlzLmZhY3REZWZhdWx0RGVsYXkgfHwgMCksIHRha2VVbnRpbChmYWN0VmFsdWUkKSkpXG4gICAgICA6IGZhY3RWYWx1ZSQ7XG4gICAgY29uc3QgZmFjdE9iaiA9IHRoaXMuZmFjdE1hcFtpZF07XG4gICAgaWYgKGZhY3RPYmopIHtcbiAgICAgIGlmIChmYWN0VmFsdWUkKSB7XG4gICAgICAgIGZhY3RPYmouc3ViamVjdC5uZXh0KG9icyQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhY3RPYmoudmFsdWUkO1xuICAgIH1cblxuICAgIGNvbnN0IHN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE9ic2VydmFibGU8VCB8IHVuZGVmaW5lZD4gfCB1bmRlZmluZWQ+KG9icyQpO1xuICAgIGNvbnN0IHZhbHVlJCA9IHN1YmplY3QucGlwZShcbiAgICAgIHN3aXRjaE1hcCgodmFsdWUpID0+IHZhbHVlIHx8IG9mKHVuZGVmaW5lZCkpLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKTtcblxuICAgIHRoaXMuZmFjdE1hcFtpZF0gPSB7XG4gICAgICBzdWJqZWN0LFxuICAgICAgdmFsdWUkXG4gICAgfTtcblxuICAgIHJldHVybiB2YWx1ZSQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgdGhlIHByb21pc2Ugb2YgdGhlIGxhdGVzdCB2YWx1ZSBvZiBhIGZhY3QuXG4gICAqIFJldHVybiB1bmRlZmluZWQgaWYgdGhlIGZhY3QgaXMgbm90IGRlZmluZWQuXG4gICAqIEBwYXJhbSBpZCBJRCBvZiB0aGUgZmFjdCB0byByZXRyaWV2ZVxuICAgKi9cbiAgcHVibGljIHJldHJpZXZlRmFjdFZhbHVlPFQgPSB1bmtub3duPihpZDogc3RyaW5nKTogUHJvbWlzZTxUIHwgdW5kZWZpbmVkPiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZmFjdE1hcFtpZF0udmFsdWUkICYmIGZpcnN0VmFsdWVGcm9tKHRoaXMucmV0cmlldmVPckNyZWF0ZUZhY3RTdHJlYW08VD4oaWQpLCB7IGRlZmF1bHRWYWx1ZTogdW5kZWZpbmVkIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBvciBpbnNlcnQgZmFjdCBpbiBydWxlcyBlbmdpbmVcbiAgICogQHBhcmFtIGZhY3RzIGZhY3QgbGlzdCB0byBhZGQgLyB1cGRhdGVcbiAgICovXG4gIHB1YmxpYyB1cHNlcnRGYWN0czxUID0gdW5rbm93bj4oZmFjdHM6IEZhY3Q8VD4gfCBGYWN0PFQ+W10pIHtcbiAgICAoQXJyYXkuaXNBcnJheShmYWN0cykgPyBmYWN0cyA6IFtmYWN0c10pLmZvckVhY2goKHsgaWQsIHZhbHVlJCB9KSA9PiB7XG4gICAgICB0aGlzLmVuZ2luZURlYnVnPy5hZGRBdmFpbGFibGVGYWN0c1NuYXBzaG90RXZlbnQoaWQsIHZhbHVlJCk7XG4gICAgICB0aGlzLnJldHJpZXZlT3JDcmVhdGVGYWN0U3RyZWFtKGlkLCB2YWx1ZSQpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBvciBpbnNlcnQgcnVsZSBpbiBydWxlcyBlbmdpbmVcbiAgICogQHBhcmFtIHJ1bGVzZXRzXG4gICAqL1xuICBwdWJsaWMgdXBzZXJ0UnVsZXNldHMocnVsZXNldHM6IFJ1bGVzZXRbXSkge1xuICAgIHRoaXMuZW5naW5lRGVidWc/LmFkZEF2YWlsYWJsZVJ1bGVzZXRzKHJ1bGVzZXRzKTtcblxuICAgIHRoaXMucnVsZXNldE1hcFN1YmplY3QubmV4dChcbiAgICAgIHJ1bGVzZXRzLnJlZHVjZSgoYWNjUnVsZXNldCwgcnVsZXNldCkgPT4ge1xuICAgICAgICBhY2NSdWxlc2V0W3J1bGVzZXQuaWRdID0gbmV3IFJ1bGVzZXRFeGVjdXRvcihydWxlc2V0LCB0aGlzKTtcbiAgICAgICAgcmV0dXJuIGFjY1J1bGVzZXQ7XG4gICAgICB9LCB7IC4uLnRoaXMucnVsZXNldE1hcFN1YmplY3QudmFsdWUgfSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBvciBpbnNlcnQgb3BlcmF0b3IgaW4gcnVsZXMgZW5naW5lXG4gICAqIEBwYXJhbSBvcGVyYXRvcnMgb3BlcmF0b3IgbGlzdCB0byBhZGQgLyB1cGRhdGVcbiAgICovXG4gIHB1YmxpYyB1cHNlcnRPcGVyYXRvcnMob3BlcmF0b3JzOiAoT3BlcmF0b3I8YW55LCBhbnk+IHwgVW5hcnlPcGVyYXRvcjxhbnk+KVtdKSB7XG4gICAgdGhpcy5vcGVyYXRvcnMgPSBvcGVyYXRvcnMucmVkdWNlKChhY2MsIG9wZXJhdG9yKSA9PiB7XG4gICAgICBhY2Nbb3BlcmF0b3IubmFtZV0gPSBvcGVyYXRvcjtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgeyAuLi50aGlzLm9wZXJhdG9ycyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVyYXRvciB0byBhcHBseSBvbiBhIHN0cmVhbSBvZiBydWxlc2V0cyBpZHNcbiAgICogUmV0dXJucyBhIHN0cmVhbSBvZiBhY3Rpb25zIG91dHB1dHRlZCBieSB0aGUgcnVsZXMgZW5naW5lLCBjb3JyZXNwb25kaW5nIHRvIHRoZSBydWxlc2V0c0lkc1xuICAgKi9cbiAgcHVibGljIGdldEV2ZW50U3RyZWFtPFQgZXh0ZW5kcyBBY3Rpb25CbG9jayA9IEFjdGlvbkJsb2NrPigpOiAocnVsZXNldHNJZHMkOiBPYnNlcnZhYmxlPHN0cmluZ1tdIHwgdW5kZWZpbmVkPikgPT4gT2JzZXJ2YWJsZTxUW10+IHtcbiAgICByZXR1cm4gKHJ1bGVzZXRzSWRzJDogT2JzZXJ2YWJsZTxzdHJpbmdbXSB8IHVuZGVmaW5lZD4pID0+XG4gICAgICBydWxlc2V0c0lkcyQucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKChydWxlU2V0cykgPT4gdGhpcy5ydWxlc2V0TWFwU3ViamVjdC5waXBlKHRoaXMucHJlcGFyZUFjdGlvbnNTdHJlYW08VD4ocnVsZVNldHMpKSksXG4gICAgICAgIHRoaXMuaGFuZGxlQWN0aW9uc1N0cmVhbU91dHB1dCgpXG4gICAgICApO1xuICB9XG5cbiAgLyoqIEdldCB0aGUgbGlzdCBvZiByZWdpc3RlcmVkIGZhY3RzIG5hbWVzICovXG4gIHB1YmxpYyBnZXRSZWdpc3RlcmVkRmFjdHNOYW1lcygpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5mYWN0TWFwKTtcbiAgfVxufVxuIl19