UNPKG

@nova-ui/bits

Version:

SolarWinds Nova Framework

102 lines 16.2 kB
// © 2022 SolarWinds Worldwide, LLC. All rights reserved. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to // deal in the Software without restriction, including without limitation the // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or // sell copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. import { Component } from "@angular/core"; import { Router, RoutesRecognized } from "@angular/router"; import defaults from "lodash/defaults"; import { filter, map } from "rxjs/operators"; import { SrlcStage } from "./public-api"; import * as i0 from "@angular/core"; import * as i1 from "@angular/router"; import * as i2 from "@angular/common"; import * as i3 from "../../message/message.component"; /** @ignore */ export class SrlcIndicatorComponent { constructor(router) { this.router = router; this.globalSrlc = { stage: SrlcStage.preAlpha, eolDate: new Date("1/1/2100"), hideIndicator: false, }; this.getMessageType = () => { switch (this.componentSrlc.stage) { case SrlcStage.preAlpha: return "critical"; case SrlcStage.alpha: return "warning"; case SrlcStage.beta: return "info"; case SrlcStage.ga: return "ok"; case SrlcStage.support: return "hint"; case SrlcStage.eol: return "error"; default: return "error"; } }; this.getMessageText = () => { switch (this.componentSrlc.stage) { case SrlcStage.preAlpha: return `<strong>Under Development</strong> DO NOT USE. This component is under active development and significant, API breaking changes are still expected. Its use will not be supported.`; case SrlcStage.alpha: // eslint-disable-next-line max-len return `<strong>Alpha</strong> USE AT YOUR OWN RISK. This component may be unstable, include defects and is still subject to API breaking changes. We encourage prototypical use and feedback - but won't support production use.`; case SrlcStage.beta: return `<strong>Beta</strong> This component is in the final testing stage. It should be quite stable, but some defects may still exist. Keep an eye on it!`; case SrlcStage.ga: return `<strong>Production Ready</strong> Available for production use - see documented examples below.`; case SrlcStage.support: return `<strong>Deprecated</strong> Sorry, but we no longer recommend using this component. Only critical issues are going to be fixed. End Of Life is scheduled to <strong>${this.componentSrlc.eolDate?.toDateString()}</strong>.`; case SrlcStage.eol: return `<strong>Not Supported</strong> Sorry, but this component is not supported any more!`; default: return `Current state of this component is unknown. Please, contact Nova team for more details.`; } }; } ngOnInit() { this.router.events .pipe(filter((event) => event instanceof RoutesRecognized), map((event) => { let route = event.state.root; while (route.firstChild) { route = route.firstChild; } return route; })) .subscribe((route) => { const routeDataSrlc = (route.data || {}).srlc; this.componentSrlc = defaults(routeDataSrlc || {}, this.globalSrlc); }); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SrlcIndicatorComponent, deps: [{ token: i1.Router }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: SrlcIndicatorComponent, selector: "nui-srlc-indicator", ngImport: i0, template: "<nui-message\n [type]=\"getMessageType()\"\n [allowDismiss]=\"false\"\n *ngIf=\"!!componentSrlc && !componentSrlc.hideIndicator\"\n>\n <span [innerHTML]=\"getMessageText()\"></span>\n</nui-message>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MessageComponent, selector: "nui-message", inputs: ["type", "allowDismiss", "manualControl"], outputs: ["dismiss"] }] }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SrlcIndicatorComponent, decorators: [{ type: Component, args: [{ selector: "nui-srlc-indicator", template: "<nui-message\n [type]=\"getMessageType()\"\n [allowDismiss]=\"false\"\n *ngIf=\"!!componentSrlc && !componentSrlc.hideIndicator\"\n>\n <span [innerHTML]=\"getMessageText()\"></span>\n</nui-message>\n" }] }], ctorParameters: () => [{ type: i1.Router }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3JsYy1pbmRpY2F0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9kb2NzL3NybGMtaW5kaWNhdG9yL3NybGMtaW5kaWNhdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZG9jcy9zcmxjLWluZGljYXRvci9zcmxjLWluZGljYXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx5REFBeUQ7QUFDekQsRUFBRTtBQUNGLCtFQUErRTtBQUMvRSw0RUFBNEU7QUFDNUUsOEVBQThFO0FBQzlFLCtFQUErRTtBQUMvRSw4RUFBOEU7QUFDOUUsNERBQTREO0FBQzVELEVBQUU7QUFDRiw2RUFBNkU7QUFDN0UsdURBQXVEO0FBQ3ZELEVBQUU7QUFDRiw2RUFBNkU7QUFDN0UsNEVBQTRFO0FBQzVFLCtFQUErRTtBQUMvRSwwRUFBMEU7QUFDMUUsaUZBQWlGO0FBQ2pGLDZFQUE2RTtBQUM3RSxpQkFBaUI7QUFFakIsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBQUUsTUFBTSxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0QsT0FBTyxRQUFRLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3QyxPQUFPLEVBQWdCLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7Ozs7QUFFdkQsY0FBYztBQUtkLE1BQU0sT0FBTyxzQkFBc0I7SUFDL0IsWUFBb0IsTUFBYztRQUFkLFdBQU0sR0FBTixNQUFNLENBQVE7UUFFM0IsZUFBVSxHQUFpQjtZQUM5QixLQUFLLEVBQUUsU0FBUyxDQUFDLFFBQVE7WUFDekIsT0FBTyxFQUFFLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUM3QixhQUFhLEVBQUUsS0FBSztTQUN2QixDQUFDO1FBeUJLLG1CQUFjLEdBQUcsR0FBVyxFQUFFO1lBQ2pDLFFBQVEsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUU7Z0JBQzlCLEtBQUssU0FBUyxDQUFDLFFBQVE7b0JBQ25CLE9BQU8sVUFBVSxDQUFDO2dCQUN0QixLQUFLLFNBQVMsQ0FBQyxLQUFLO29CQUNoQixPQUFPLFNBQVMsQ0FBQztnQkFDckIsS0FBSyxTQUFTLENBQUMsSUFBSTtvQkFDZixPQUFPLE1BQU0sQ0FBQztnQkFDbEIsS0FBSyxTQUFTLENBQUMsRUFBRTtvQkFDYixPQUFPLElBQUksQ0FBQztnQkFDaEIsS0FBSyxTQUFTLENBQUMsT0FBTztvQkFDbEIsT0FBTyxNQUFNLENBQUM7Z0JBQ2xCLEtBQUssU0FBUyxDQUFDLEdBQUc7b0JBQ2QsT0FBTyxPQUFPLENBQUM7Z0JBQ25CO29CQUNJLE9BQU8sT0FBTyxDQUFDO2FBQ3RCO1FBQ0wsQ0FBQyxDQUFDO1FBRUssbUJBQWMsR0FBRyxHQUFXLEVBQUU7WUFDakMsUUFBUSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRTtnQkFDOUIsS0FBSyxTQUFTLENBQUMsUUFBUTtvQkFDbkIsT0FBTzs0RkFDcUUsQ0FBQztnQkFDakYsS0FBSyxTQUFTLENBQUMsS0FBSztvQkFDaEIsbUNBQW1DO29CQUNuQyxPQUFPO21HQUM0RSxDQUFDO2dCQUN4RixLQUFLLFNBQVMsQ0FBQyxJQUFJO29CQUNmLE9BQU87eUVBQ2tELENBQUM7Z0JBQzlELEtBQUssU0FBUyxDQUFDLEVBQUU7b0JBQ2IsT0FBTyxpR0FBaUcsQ0FBQztnQkFDN0csS0FBSyxTQUFTLENBQUMsT0FBTztvQkFDbEIsT0FBTzs7MERBRW1DLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxZQUFZLENBQUM7Z0JBQ3JHLEtBQUssU0FBUyxDQUFDLEdBQUc7b0JBQ2QsT0FBTyxxRkFBcUYsQ0FBQztnQkFDakc7b0JBQ0ksT0FBTyx5RkFBeUYsQ0FBQzthQUN4RztRQUNMLENBQUMsQ0FBQztJQXpFbUMsQ0FBQztJQVUvQixRQUFRO1FBQ1gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNO2FBQ2IsSUFBSSxDQUNELE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxZQUFZLGdCQUFnQixDQUFDLEVBQ3BELEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ1YsSUFBSSxLQUFLLEdBQXNCLEtBQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1lBQ2pELE9BQU8sS0FBSyxDQUFDLFVBQVUsRUFBRTtnQkFDckIsS0FBSyxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUM7YUFDNUI7WUFDRCxPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FDTDthQUNBLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ2pCLE1BQU0sYUFBYSxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDOUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxRQUFRLENBQ3pCLGFBQWEsSUFBSSxFQUFFLEVBQ25CLElBQUksQ0FBQyxVQUFVLENBQ2xCLENBQUM7UUFDTixDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7K0dBOUJRLHNCQUFzQjttR0FBdEIsc0JBQXNCLDBEQ2hDbkMscU5BT0E7OzRGRHlCYSxzQkFBc0I7a0JBSmxDLFNBQVM7K0JBQ0ksb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiLy8gwqkgMjAyMiBTb2xhcldpbmRzIFdvcmxkd2lkZSwgTExDLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vICBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0b1xuLy8gIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlXG4vLyAgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yXG4vLyAgc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vICBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyAgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vICBUSEUgU09GVFdBUkUuXG5cbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IFJvdXRlciwgUm91dGVzUmVjb2duaXplZCB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcbmltcG9ydCBkZWZhdWx0cyBmcm9tIFwibG9kYXNoL2RlZmF1bHRzXCI7XG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuXG5pbXBvcnQgeyBJU3JsY0RldGFpbHMsIFNybGNTdGFnZSB9IGZyb20gXCIuL3B1YmxpYy1hcGlcIjtcblxuLyoqIEBpZ25vcmUgKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiBcIm51aS1zcmxjLWluZGljYXRvclwiLFxuICAgIHRlbXBsYXRlVXJsOiBcIi4vc3JsYy1pbmRpY2F0b3IuY29tcG9uZW50Lmh0bWxcIixcbn0pXG5leHBvcnQgY2xhc3MgU3JsY0luZGljYXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByb3V0ZXI6IFJvdXRlcikge31cblxuICAgIHB1YmxpYyBnbG9iYWxTcmxjOiBJU3JsY0RldGFpbHMgPSB7XG4gICAgICAgIHN0YWdlOiBTcmxjU3RhZ2UucHJlQWxwaGEsXG4gICAgICAgIGVvbERhdGU6IG5ldyBEYXRlKFwiMS8xLzIxMDBcIiksXG4gICAgICAgIGhpZGVJbmRpY2F0b3I6IGZhbHNlLFxuICAgIH07XG5cbiAgICBwdWJsaWMgY29tcG9uZW50U3JsYzogSVNybGNEZXRhaWxzO1xuXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJvdXRlci5ldmVudHNcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcigoZXZlbnQpID0+IGV2ZW50IGluc3RhbmNlb2YgUm91dGVzUmVjb2duaXplZCksXG4gICAgICAgICAgICAgICAgbWFwKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcm91dGUgPSAoPFJvdXRlc1JlY29nbml6ZWQ+ZXZlbnQpLnN0YXRlLnJvb3Q7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChyb3V0ZS5maXJzdENoaWxkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByb3V0ZSA9IHJvdXRlLmZpcnN0Q2hpbGQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJvdXRlO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyb3V0ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvdXRlRGF0YVNybGMgPSAocm91dGUuZGF0YSB8fCB7fSkuc3JsYztcbiAgICAgICAgICAgICAgICB0aGlzLmNvbXBvbmVudFNybGMgPSBkZWZhdWx0cyhcbiAgICAgICAgICAgICAgICAgICAgcm91dGVEYXRhU3JsYyB8fCB7fSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nbG9iYWxTcmxjXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRNZXNzYWdlVHlwZSA9ICgpOiBzdHJpbmcgPT4ge1xuICAgICAgICBzd2l0Y2ggKHRoaXMuY29tcG9uZW50U3JsYy5zdGFnZSkge1xuICAgICAgICAgICAgY2FzZSBTcmxjU3RhZ2UucHJlQWxwaGE6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiY3JpdGljYWxcIjtcbiAgICAgICAgICAgIGNhc2UgU3JsY1N0YWdlLmFscGhhOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIndhcm5pbmdcIjtcbiAgICAgICAgICAgIGNhc2UgU3JsY1N0YWdlLmJldGE6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiaW5mb1wiO1xuICAgICAgICAgICAgY2FzZSBTcmxjU3RhZ2UuZ2E6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwib2tcIjtcbiAgICAgICAgICAgIGNhc2UgU3JsY1N0YWdlLnN1cHBvcnQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiaGludFwiO1xuICAgICAgICAgICAgY2FzZSBTcmxjU3RhZ2UuZW9sOlxuICAgICAgICAgICAgICAgIHJldHVybiBcImVycm9yXCI7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBcImVycm9yXCI7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcHVibGljIGdldE1lc3NhZ2VUZXh0ID0gKCk6IHN0cmluZyA9PiB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5jb21wb25lbnRTcmxjLnN0YWdlKSB7XG4gICAgICAgICAgICBjYXNlIFNybGNTdGFnZS5wcmVBbHBoYTpcbiAgICAgICAgICAgICAgICByZXR1cm4gYDxzdHJvbmc+VW5kZXIgRGV2ZWxvcG1lbnQ8L3N0cm9uZz4gRE8gTk9UIFVTRS4gVGhpcyBjb21wb25lbnQgaXMgdW5kZXIgYWN0aXZlIGRldmVsb3BtZW50IGFuZCBzaWduaWZpY2FudCxcbiAgICAgICAgICAgICAgICAgICAgQVBJIGJyZWFraW5nIGNoYW5nZXMgYXJlIHN0aWxsIGV4cGVjdGVkLiBJdHMgdXNlIHdpbGwgbm90IGJlIHN1cHBvcnRlZC5gO1xuICAgICAgICAgICAgY2FzZSBTcmxjU3RhZ2UuYWxwaGE6XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICAgICAgICAgICAgICByZXR1cm4gYDxzdHJvbmc+QWxwaGE8L3N0cm9uZz4gVVNFIEFUIFlPVVIgT1dOIFJJU0suIFRoaXMgY29tcG9uZW50IG1heSBiZSB1bnN0YWJsZSwgaW5jbHVkZSBkZWZlY3RzIGFuZCBpcyBzdGlsbCBzdWJqZWN0IHRvIEFQSSBicmVha2luZyBjaGFuZ2VzLlxuICAgICAgICAgICAgICAgICAgICBXZSBlbmNvdXJhZ2UgcHJvdG90eXBpY2FsIHVzZSBhbmQgZmVlZGJhY2sgLSBidXQgd29uJ3Qgc3VwcG9ydCBwcm9kdWN0aW9uIHVzZS5gO1xuICAgICAgICAgICAgY2FzZSBTcmxjU3RhZ2UuYmV0YTpcbiAgICAgICAgICAgICAgICByZXR1cm4gYDxzdHJvbmc+QmV0YTwvc3Ryb25nPiBUaGlzIGNvbXBvbmVudCBpcyBpbiB0aGUgZmluYWwgdGVzdGluZyBzdGFnZS4gSXQgc2hvdWxkIGJlIHF1aXRlIHN0YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgYnV0IHNvbWUgZGVmZWN0cyBtYXkgc3RpbGwgZXhpc3QuIEtlZXAgYW4gZXllIG9uIGl0IWA7XG4gICAgICAgICAgICBjYXNlIFNybGNTdGFnZS5nYTpcbiAgICAgICAgICAgICAgICByZXR1cm4gYDxzdHJvbmc+UHJvZHVjdGlvbiBSZWFkeTwvc3Ryb25nPiBBdmFpbGFibGUgZm9yIHByb2R1Y3Rpb24gdXNlIC0gc2VlIGRvY3VtZW50ZWQgZXhhbXBsZXMgYmVsb3cuYDtcbiAgICAgICAgICAgIGNhc2UgU3JsY1N0YWdlLnN1cHBvcnQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGA8c3Ryb25nPkRlcHJlY2F0ZWQ8L3N0cm9uZz4gU29ycnksIGJ1dCB3ZSBubyBsb25nZXIgcmVjb21tZW5kIHVzaW5nIHRoaXMgY29tcG9uZW50LlxuICAgICAgICAgICAgICAgICAgICBPbmx5IGNyaXRpY2FsIGlzc3VlcyBhcmUgZ29pbmcgdG8gYmUgZml4ZWQuXG4gICAgICAgICAgICAgICAgICAgIEVuZCBPZiBMaWZlIGlzIHNjaGVkdWxlZCB0byA8c3Ryb25nPiR7dGhpcy5jb21wb25lbnRTcmxjLmVvbERhdGU/LnRvRGF0ZVN0cmluZygpfTwvc3Ryb25nPi5gO1xuICAgICAgICAgICAgY2FzZSBTcmxjU3RhZ2UuZW9sOlxuICAgICAgICAgICAgICAgIHJldHVybiBgPHN0cm9uZz5Ob3QgU3VwcG9ydGVkPC9zdHJvbmc+IFNvcnJ5LCBidXQgdGhpcyBjb21wb25lbnQgaXMgbm90IHN1cHBvcnRlZCBhbnkgbW9yZSFgO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gYEN1cnJlbnQgc3RhdGUgb2YgdGhpcyBjb21wb25lbnQgaXMgdW5rbm93bi4gUGxlYXNlLCBjb250YWN0IE5vdmEgdGVhbSBmb3IgbW9yZSBkZXRhaWxzLmA7XG4gICAgICAgIH1cbiAgICB9O1xufVxuIiwiPG51aS1tZXNzYWdlXG4gICAgW3R5cGVdPVwiZ2V0TWVzc2FnZVR5cGUoKVwiXG4gICAgW2FsbG93RGlzbWlzc109XCJmYWxzZVwiXG4gICAgKm5nSWY9XCIhIWNvbXBvbmVudFNybGMgJiYgIWNvbXBvbmVudFNybGMuaGlkZUluZGljYXRvclwiXG4+XG4gICAgPHNwYW4gW2lubmVySFRNTF09XCJnZXRNZXNzYWdlVGV4dCgpXCI+PC9zcGFuPlxuPC9udWktbWVzc2FnZT5cbiJdfQ==