UNPKG

ionic-logging-viewer

Version:

Viewer component for logs written by ionic-logging-service

141 lines 22 kB
import { Component, Input } from "@angular/core"; import { ModalController, Platform, AlertController } from "@ionic/angular"; import { LoggingService } from "ionic-logging-service"; import * as i0 from "@angular/core"; import * as i1 from "@ionic/angular"; import * as i2 from "ionic-logging-service"; import * as i3 from "@angular/common"; import * as i4 from "../logging-viewer/logging-viewer.component"; import * as i5 from "../logging-viewer-search/logging-viewer-search.component"; import * as i6 from "../logging-viewer-levels/logging-viewer-levels.component"; /** * Ionic modal containing [LoggingViewerComponent](LoggingViewerComponent.html), * [LoggingViewerLevelsComponent](LoggingViewerLevelsComponent.html) and * [LoggingViewerSearchComponent](LoggingViewerSearchComponent.html). */ export class LoggingViewerModalComponent { static { this.languageEn = "en"; } static { this.languageDe = "de"; } /** * Creates a new instance of the component. */ constructor(platform, alertController, modalController, loggingService) { this.alertController = alertController; this.modalController = modalController; this.loggingService = loggingService; this.logger = loggingService.getLogger("Ionic.Logging.Viewer.Modal.Component"); const methodName = "ctor"; this.logger.entry(methodName); this.isAndroid = platform.is("android"); this.logger.exit(methodName); } /** * Initializes the LoggingViewerModalComponent. * It configures the supported translations. */ ngOnInit() { // prepare translations this.translations = {}; this.translations[LoggingViewerModalComponent.languageEn] = { cancel: "Cancel", confirmDelete: "Delete all log messages?", ok: "Ok", searchPlaceholder: "Search", title: "Logging", }; this.translations[LoggingViewerModalComponent.languageDe] = { cancel: "Abbrechen", confirmDelete: "Alle Logs löschen?", ok: "Ok", searchPlaceholder: "Suchen", title: "Logging", }; } /** * Eventhandler called by Ionic when the modal is opened. */ ionViewDidEnter() { const methodName = "ionViewDidEnter"; this.logger.entry(methodName); this.logger.exit(methodName); } /** * Eventhandler called when the cancel button is clicked. */ async onClose() { const methodName = "onClose"; this.logger.entry(methodName); await this.modalController.dismiss(); this.logger.exit(methodName); } /** * Eventhandler called when the clear button is clicked. */ async onClearLogs() { const methodName = "onClearLogs"; this.logger.entry(methodName); const alert = await this.alertController.create({ header: this.getTranslation().confirmDelete, buttons: [ { text: this.getTranslation().cancel, role: "cancel", cssClass: "secondary" }, { text: this.getTranslation().ok, handler: () => { this.clearLogs(); } }, ] }); await alert.present(); this.logger.exit(methodName); } /** * Clear logs. */ clearLogs() { if (this.localStorageKeys) { for (const localStorageKey of this.localStorageKeys.split(",")) { this.loggingService.removeLogMessagesFromLocalStorage(localStorageKey); } } else { this.loggingService.removeLogMessages(); } } /** * Helper method returning the current translation: * - the property translation if defined * - the translation according property language if valid * - English translation, otherwise */ getTranslation() { if (typeof this.translation !== "undefined") { return this.translation; } else if (typeof this.language !== "undefined" && typeof this.translations[this.language] === "object") { return this.translations[this.language]; } else { return this.translations[LoggingViewerModalComponent.languageEn]; } } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: LoggingViewerModalComponent, deps: [{ token: i1.Platform }, { token: i1.AlertController }, { token: i1.ModalController }, { token: i2.LoggingService }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.2", type: LoggingViewerModalComponent, selector: "ionic-logging-viewer-modal", inputs: { language: "language", translation: "translation", localStorageKeys: "localStorageKeys", allowClearLogs: "allowClearLogs" }, ngImport: i0, template: "<ion-header>\n\t<ion-toolbar color=primary>\n\t\t<ion-title>{{ getTranslation().title }}</ion-title>\n\t\t<ion-buttons slot=\"start\">\n\t\t\t<ion-button *ngIf=\"!isAndroid\" (click)=\"onClose()\">\n\t\t\t\t{{ getTranslation().cancel }}\n\t\t\t</ion-button>\n\t\t\t<ion-button *ngIf=\"isAndroid\" icon-only (click)=\"onClose()\">\n\t\t\t\t<ion-icon name=\"md-close\"></ion-icon>\n\t\t\t</ion-button>\n\t\t</ion-buttons>\n\t</ion-toolbar>\n\t<ion-toolbar>\n\t\t<ionic-logging-viewer-search [placeholder]=\"getTranslation().searchPlaceholder\"></ionic-logging-viewer-search>\n\t\t<ion-buttons slot=\"end\" *ngIf=\"allowClearLogs !== false\" class=\"clearLogs\">\n\t\t\t<ion-button (click)=\"onClearLogs()\">\n\t\t\t\t<ion-icon name=\"trash-outline\"></ion-icon>\n\t\t\t</ion-button>\n\t\t</ion-buttons>\n\t</ion-toolbar>\n\t<ion-toolbar>\n\t\t<ionic-logging-viewer-levels></ionic-logging-viewer-levels>\n\t</ion-toolbar>\n</ion-header>\n<ion-content>\n\t<ionic-logging-viewer [localStorageKeys]=\"localStorageKeys\"></ionic-logging-viewer>\n</ion-content>", styles: ["ionic-logging-viewer-levels{width:100%;padding-left:12px;padding-right:12px}.clearLogs{padding-top:3px}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i1.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i1.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i1.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i1.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i1.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: i4.LoggingViewerComponent, selector: "ionic-logging-viewer", inputs: ["localStorageKeys"] }, { kind: "component", type: i5.LoggingViewerSearchComponent, selector: "ionic-logging-viewer-search", inputs: ["placeholder"] }, { kind: "component", type: i6.LoggingViewerLevelsComponent, selector: "ionic-logging-viewer-levels" }] }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: LoggingViewerModalComponent, decorators: [{ type: Component, args: [{ selector: "ionic-logging-viewer-modal", template: "<ion-header>\n\t<ion-toolbar color=primary>\n\t\t<ion-title>{{ getTranslation().title }}</ion-title>\n\t\t<ion-buttons slot=\"start\">\n\t\t\t<ion-button *ngIf=\"!isAndroid\" (click)=\"onClose()\">\n\t\t\t\t{{ getTranslation().cancel }}\n\t\t\t</ion-button>\n\t\t\t<ion-button *ngIf=\"isAndroid\" icon-only (click)=\"onClose()\">\n\t\t\t\t<ion-icon name=\"md-close\"></ion-icon>\n\t\t\t</ion-button>\n\t\t</ion-buttons>\n\t</ion-toolbar>\n\t<ion-toolbar>\n\t\t<ionic-logging-viewer-search [placeholder]=\"getTranslation().searchPlaceholder\"></ionic-logging-viewer-search>\n\t\t<ion-buttons slot=\"end\" *ngIf=\"allowClearLogs !== false\" class=\"clearLogs\">\n\t\t\t<ion-button (click)=\"onClearLogs()\">\n\t\t\t\t<ion-icon name=\"trash-outline\"></ion-icon>\n\t\t\t</ion-button>\n\t\t</ion-buttons>\n\t</ion-toolbar>\n\t<ion-toolbar>\n\t\t<ionic-logging-viewer-levels></ionic-logging-viewer-levels>\n\t</ion-toolbar>\n</ion-header>\n<ion-content>\n\t<ionic-logging-viewer [localStorageKeys]=\"localStorageKeys\"></ionic-logging-viewer>\n</ion-content>", styles: ["ionic-logging-viewer-levels{width:100%;padding-left:12px;padding-right:12px}.clearLogs{padding-top:3px}\n"] }] }], ctorParameters: () => [{ type: i1.Platform }, { type: i1.AlertController }, { type: i1.ModalController }, { type: i2.LoggingService }], propDecorators: { language: [{ type: Input }], translation: [{ type: Input }], localStorageKeys: [{ type: Input }], allowClearLogs: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2luZy12aWV3ZXItbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW9uaWMtbG9nZ2luZy12aWV3ZXIvc3JjL2xpYi9sb2dnaW5nLXZpZXdlci1tb2RhbC9sb2dnaW5nLXZpZXdlci1tb2RhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pb25pYy1sb2dnaW5nLXZpZXdlci9zcmMvbGliL2xvZ2dpbmctdmlld2VyLW1vZGFsL2xvZ2dpbmctdmlld2VyLW1vZGFsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpELE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTVFLE9BQU8sRUFBVSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7Ozs7QUFJL0Q7Ozs7R0FJRztBQU1ILE1BQU0sT0FBTywyQkFBMkI7YUFFeEIsZUFBVSxHQUFHLElBQUksQUFBUCxDQUFRO2FBQ2xCLGVBQVUsR0FBRyxJQUFJLEFBQVAsQ0FBUTtJQXFDakM7O09BRUc7SUFDSCxZQUNDLFFBQWtCLEVBQ1YsZUFBZ0MsRUFDaEMsZUFBZ0MsRUFDaEMsY0FBOEI7UUFGOUIsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFFdEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxjQUFjLENBQUMsU0FBUyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7UUFDL0UsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDO1FBQzFCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRTlCLElBQUksQ0FBQyxT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QWM7UUFDcEIsSUFBSSxPQUFPLElBQUksQ0FBQyxXQUFXLEtBQUssV0FBVyxFQUFFLENBQUM7WUFDN0MsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ3pCLENBQUM7YUFBTSxJQUFJLE9BQU8sSUFBSSxDQUFDLFFBQVEsS0FBSyxXQUFXLElBQUksT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUN6RyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3pDLENBQUM7YUFBTSxDQUFDO1lBQ1AsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLDJCQUEyQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2xFLENBQUM7SUFDRixDQUFDOzhHQTlKVywyQkFBMkI7a0dBQTNCLDJCQUEyQix3TUNsQnhDLCtoQ0EwQmM7OzJGRFJELDJCQUEyQjtrQkFMdkMsU0FBUzsrQkFDQyw0QkFBNEI7c0tBYy9CLFFBQVE7c0JBRGQsS0FBSztnQkFRQyxXQUFXO3NCQURqQixLQUFLO2dCQU9DLGdCQUFnQjtzQkFEdEIsS0FBSztnQkFPQyxjQUFjO3NCQURwQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcblxuaW1wb3J0IHsgTW9kYWxDb250cm9sbGVyLCBQbGF0Zm9ybSwgQWxlcnRDb250cm9sbGVyIH0gZnJvbSBcIkBpb25pYy9hbmd1bGFyXCI7XG5cbmltcG9ydCB7IExvZ2dlciwgTG9nZ2luZ1NlcnZpY2UgfSBmcm9tIFwiaW9uaWMtbG9nZ2luZy1zZXJ2aWNlXCI7XG5cbmltcG9ydCB7IExvZ2dpbmdWaWV3ZXJUcmFuc2xhdGlvbiB9IGZyb20gXCIuLi9sb2dnaW5nLXZpZXdlci10cmFuc2xhdGlvbi5tb2RlbFwiO1xuXG4vKipcbiAqIElvbmljIG1vZGFsIGNvbnRhaW5pbmcgW0xvZ2dpbmdWaWV3ZXJDb21wb25lbnRdKExvZ2dpbmdWaWV3ZXJDb21wb25lbnQuaHRtbCksXG4gKiBbTG9nZ2luZ1ZpZXdlckxldmVsc0NvbXBvbmVudF0oTG9nZ2luZ1ZpZXdlckxldmVsc0NvbXBvbmVudC5odG1sKSBhbmRcbiAqIFtMb2dnaW5nVmlld2VyU2VhcmNoQ29tcG9uZW50XShMb2dnaW5nVmlld2VyU2VhcmNoQ29tcG9uZW50Lmh0bWwpLlxuICovXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6IFwiaW9uaWMtbG9nZ2luZy12aWV3ZXItbW9kYWxcIixcblx0dGVtcGxhdGVVcmw6IFwiLi9sb2dnaW5nLXZpZXdlci1tb2RhbC5jb21wb25lbnQuaHRtbFwiLFxuXHRzdHlsZVVybHM6IFtcIi4vbG9nZ2luZy12aWV3ZXItbW9kYWwuY29tcG9uZW50LnNjc3NcIl1cbn0pXG5leHBvcnQgY2xhc3MgTG9nZ2luZ1ZpZXdlck1vZGFsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuXHRwcml2YXRlIHN0YXRpYyBsYW5ndWFnZUVuID0gXCJlblwiO1xuXHRwcml2YXRlIHN0YXRpYyBsYW5ndWFnZURlID0gXCJkZVwiO1xuXG5cdC8qKlxuXHQgKiBMYW5ndWFnZSB0byBiZSB1c2VkIGZvciB0aGUgbW9kYWwuXG5cdCAqIEN1cnJlbnRseSBzdXBwb3J0ZWQ6IGVuLCBkZVxuXHQgKi9cblx0QElucHV0KClcblx0cHVibGljIGxhbmd1YWdlOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIFRyYW5zbGF0aW9uIHRvIGJlIHVzZWQgZm9yIHRoZSBtb2RhbC5cblx0ICogSWYgc3BlY2lmaWVkLCB0aGUgbGFuZ3VhZ2UgaXMgaWdub3JlZC5cblx0ICovXG5cdEBJbnB1dCgpXG5cdHB1YmxpYyB0cmFuc2xhdGlvbjogTG9nZ2luZ1ZpZXdlclRyYW5zbGF0aW9uO1xuXG5cdC8qKlxuXHQgKiBDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBsb2NhbFN0b3JhZ2VLZXlzLiBJZiBzZXQsIHRoZSBsb2dzIGdldCBsb2FkZWQgZnJvbSBsb2NhbFN0b3JhZ2UgaW5zdGVhZCBvZiBtZW1vcnkuXG5cdCAqL1xuXHRASW5wdXQoKVxuXHRwdWJsaWMgbG9jYWxTdG9yYWdlS2V5czogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBGbGFnIHNob3dpbmcgYSBkZWxldGUgYnV0dG9uLCB3aGljaCByZW1vdmVzIGFsbCBleGlzdGluZyBsb2cgbWVzc2FnZXMuXG5cdCAqL1xuXHRASW5wdXQoKVxuXHRwdWJsaWMgYWxsb3dDbGVhckxvZ3M6IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIEZsYWcgY29udHJvbGxpbmcgd2hpY2ggY2xvc2UgYnV0dG9uIHdpbGwgYmUgc2hvd24uXG5cdCAqL1xuXHRwdWJsaWMgaXNBbmRyb2lkOiBib29sZWFuO1xuXG5cdHByaXZhdGUgbG9nZ2VyOiBMb2dnZXI7XG5cblx0cHJpdmF0ZSB0cmFuc2xhdGlvbnM6IHsgW2xhbmd1YWdlOiBzdHJpbmddOiBMb2dnaW5nVmlld2VyVHJhbnNsYXRpb24gfTtcblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgY29tcG9uZW50LlxuXHQgKi9cblx0Y29uc3RydWN0b3IoXG5cdFx0cGxhdGZvcm06IFBsYXRmb3JtLFxuXHRcdHByaXZhdGUgYWxlcnRDb250cm9sbGVyOiBBbGVydENvbnRyb2xsZXIsXG5cdFx0cHJpdmF0ZSBtb2RhbENvbnRyb2xsZXI6IE1vZGFsQ29udHJvbGxlcixcblx0XHRwcml2YXRlIGxvZ2dpbmdTZXJ2aWNlOiBMb2dnaW5nU2VydmljZSkge1xuXG5cdFx0dGhpcy5sb2dnZXIgPSBsb2dnaW5nU2VydmljZS5nZXRMb2dnZXIoXCJJb25pYy5Mb2dnaW5nLlZpZXdlci5Nb2RhbC5Db21wb25lbnRcIik7XG5cdFx0Y29uc3QgbWV0aG9kTmFtZSA9IFwiY3RvclwiO1xuXHRcdHRoaXMubG9nZ2VyLmVudHJ5KG1ldGhvZE5hbWUpO1xuXG5cdFx0dGhpcy5pc0FuZHJvaWQgPSBwbGF0Zm9ybS5pcyhcImFuZHJvaWRcIik7XG5cblx0XHR0aGlzLmxvZ2dlci5leGl0KG1ldGhvZE5hbWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEluaXRpYWxpemVzIHRoZSBMb2dnaW5nVmlld2VyTW9kYWxDb21wb25lbnQuXG5cdCAqIEl0IGNvbmZpZ3VyZXMgdGhlIHN1cHBvcnRlZCB0cmFuc2xhdGlvbnMuXG5cdCAqL1xuXHRwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG5cdFx0Ly8gcHJlcGFyZSB0cmFuc2xhdGlvbnNcblx0XHR0aGlzLnRyYW5zbGF0aW9ucyA9IHt9O1xuXHRcdHRoaXMudHJhbnNsYXRpb25zW0xvZ2dpbmdWaWV3ZXJNb2RhbENvbXBvbmVudC5sYW5ndWFnZUVuXSA9IHtcblx0XHRcdGNhbmNlbDogXCJDYW5jZWxcIixcblx0XHRcdGNvbmZpcm1EZWxldGU6IFwiRGVsZXRlIGFsbCBsb2cgbWVzc2FnZXM/XCIsXG5cdFx0XHRvazogXCJPa1wiLFxuXHRcdFx0c2VhcmNoUGxhY2Vob2xkZXI6IFwiU2VhcmNoXCIsXG5cdFx0XHR0aXRsZTogXCJMb2dnaW5nXCIsXG5cdFx0fTtcblx0XHR0aGlzLnRyYW5zbGF0aW9uc1tMb2dnaW5nVmlld2VyTW9kYWxDb21wb25lbnQubGFuZ3VhZ2VEZV0gPSB7XG5cdFx0XHRjYW5jZWw6IFwiQWJicmVjaGVuXCIsXG5cdFx0XHRjb25maXJtRGVsZXRlOiBcIkFsbGUgTG9ncyBsw7ZzY2hlbj9cIixcblx0XHRcdG9rOiBcIk9rXCIsXG5cdFx0XHRzZWFyY2hQbGFjZWhvbGRlcjogXCJTdWNoZW5cIixcblx0XHRcdHRpdGxlOiBcIkxvZ2dpbmdcIixcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEV2ZW50aGFuZGxlciBjYWxsZWQgYnkgSW9uaWMgd2hlbiB0aGUgbW9kYWwgaXMgb3BlbmVkLlxuXHQgKi9cblx0cHVibGljIGlvblZpZXdEaWRFbnRlcigpOiB2b2lkIHtcblx0XHRjb25zdCBtZXRob2ROYW1lID0gXCJpb25WaWV3RGlkRW50ZXJcIjtcblx0XHR0aGlzLmxvZ2dlci5lbnRyeShtZXRob2ROYW1lKTtcblxuXHRcdHRoaXMubG9nZ2VyLmV4aXQobWV0aG9kTmFtZSk7XG5cdH1cblxuXHQvKipcblx0ICogRXZlbnRoYW5kbGVyIGNhbGxlZCB3aGVuIHRoZSBjYW5jZWwgYnV0dG9uIGlzIGNsaWNrZWQuXG5cdCAqL1xuXHRwdWJsaWMgYXN5bmMgb25DbG9zZSgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBtZXRob2ROYW1lID0gXCJvbkNsb3NlXCI7XG5cdFx0dGhpcy5sb2dnZXIuZW50cnkobWV0aG9kTmFtZSk7XG5cblx0XHRhd2FpdCB0aGlzLm1vZGFsQ29udHJvbGxlci5kaXNtaXNzKCk7XG5cblx0XHR0aGlzLmxvZ2dlci5leGl0KG1ldGhvZE5hbWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEV2ZW50aGFuZGxlciBjYWxsZWQgd2hlbiB0aGUgY2xlYXIgYnV0dG9uIGlzIGNsaWNrZWQuXG5cdCAqL1xuXHRwdWJsaWMgYXN5bmMgb25DbGVhckxvZ3MoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgbWV0aG9kTmFtZSA9IFwib25DbGVhckxvZ3NcIjtcblx0XHR0aGlzLmxvZ2dlci5lbnRyeShtZXRob2ROYW1lKTtcblxuXHRcdGNvbnN0IGFsZXJ0ID0gYXdhaXQgdGhpcy5hbGVydENvbnRyb2xsZXIuY3JlYXRlKHtcblx0XHRcdGhlYWRlcjogdGhpcy5nZXRUcmFuc2xhdGlvbigpLmNvbmZpcm1EZWxldGUsXG5cdFx0XHRidXR0b25zOiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0ZXh0OiB0aGlzLmdldFRyYW5zbGF0aW9uKCkuY2FuY2VsLFxuXHRcdFx0XHRcdHJvbGU6IFwiY2FuY2VsXCIsXG5cdFx0XHRcdFx0Y3NzQ2xhc3M6IFwic2Vjb25kYXJ5XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHRleHQ6IHRoaXMuZ2V0VHJhbnNsYXRpb24oKS5vayxcblx0XHRcdFx0XHRoYW5kbGVyOiAoKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLmNsZWFyTG9ncygpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdF1cblx0XHR9KTtcblx0XHRhd2FpdCBhbGVydC5wcmVzZW50KCk7XG5cblx0XHR0aGlzLmxvZ2dlci5leGl0KG1ldGhvZE5hbWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENsZWFyIGxvZ3MuXG5cdCAqL1xuXHRwdWJsaWMgY2xlYXJMb2dzKCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLmxvY2FsU3RvcmFnZUtleXMpIHtcblx0XHRcdGZvciAoY29uc3QgbG9jYWxTdG9yYWdlS2V5IG9mIHRoaXMubG9jYWxTdG9yYWdlS2V5cy5zcGxpdChcIixcIikpIHtcblx0XHRcdFx0dGhpcy5sb2dnaW5nU2VydmljZS5yZW1vdmVMb2dNZXNzYWdlc0Zyb21Mb2NhbFN0b3JhZ2UobG9jYWxTdG9yYWdlS2V5KTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5sb2dnaW5nU2VydmljZS5yZW1vdmVMb2dNZXNzYWdlcygpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIZWxwZXIgbWV0aG9kIHJldHVybmluZyB0aGUgY3VycmVudCB0cmFuc2xhdGlvbjpcblx0ICogLSB0aGUgcHJvcGVydHkgdHJhbnNsYXRpb24gaWYgZGVmaW5lZFxuXHQgKiAtIHRoZSB0cmFuc2xhdGlvbiBhY2NvcmRpbmcgcHJvcGVydHkgbGFuZ3VhZ2UgaWYgdmFsaWRcblx0ICogLSBFbmdsaXNoIHRyYW5zbGF0aW9uLCBvdGhlcndpc2Vcblx0ICovXG5cdHB1YmxpYyBnZXRUcmFuc2xhdGlvbigpOiBMb2dnaW5nVmlld2VyVHJhbnNsYXRpb24ge1xuXHRcdGlmICh0eXBlb2YgdGhpcy50cmFuc2xhdGlvbiAhPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0cmV0dXJuIHRoaXMudHJhbnNsYXRpb247XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgdGhpcy5sYW5ndWFnZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgdGhpcy50cmFuc2xhdGlvbnNbdGhpcy5sYW5ndWFnZV0gPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdHJldHVybiB0aGlzLnRyYW5zbGF0aW9uc1t0aGlzLmxhbmd1YWdlXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRoaXMudHJhbnNsYXRpb25zW0xvZ2dpbmdWaWV3ZXJNb2RhbENvbXBvbmVudC5sYW5ndWFnZUVuXTtcblx0XHR9XG5cdH1cbn1cbiIsIjxpb24taGVhZGVyPlxuXHQ8aW9uLXRvb2xiYXIgY29sb3I9cHJpbWFyeT5cblx0XHQ8aW9uLXRpdGxlPnt7IGdldFRyYW5zbGF0aW9uKCkudGl0bGUgfX08L2lvbi10aXRsZT5cblx0XHQ8aW9uLWJ1dHRvbnMgc2xvdD1cInN0YXJ0XCI+XG5cdFx0XHQ8aW9uLWJ1dHRvbiAqbmdJZj1cIiFpc0FuZHJvaWRcIiAoY2xpY2spPVwib25DbG9zZSgpXCI+XG5cdFx0XHRcdHt7IGdldFRyYW5zbGF0aW9uKCkuY2FuY2VsIH19XG5cdFx0XHQ8L2lvbi1idXR0b24+XG5cdFx0XHQ8aW9uLWJ1dHRvbiAqbmdJZj1cImlzQW5kcm9pZFwiIGljb24tb25seSAoY2xpY2spPVwib25DbG9zZSgpXCI+XG5cdFx0XHRcdDxpb24taWNvbiBuYW1lPVwibWQtY2xvc2VcIj48L2lvbi1pY29uPlxuXHRcdFx0PC9pb24tYnV0dG9uPlxuXHRcdDwvaW9uLWJ1dHRvbnM+XG5cdDwvaW9uLXRvb2xiYXI+XG5cdDxpb24tdG9vbGJhcj5cblx0XHQ8aW9uaWMtbG9nZ2luZy12aWV3ZXItc2VhcmNoIFtwbGFjZWhvbGRlcl09XCJnZXRUcmFuc2xhdGlvbigpLnNlYXJjaFBsYWNlaG9sZGVyXCI+PC9pb25pYy1sb2dnaW5nLXZpZXdlci1zZWFyY2g+XG5cdFx0PGlvbi1idXR0b25zIHNsb3Q9XCJlbmRcIiAqbmdJZj1cImFsbG93Q2xlYXJMb2dzICE9PSBmYWxzZVwiIGNsYXNzPVwiY2xlYXJMb2dzXCI+XG5cdFx0XHQ8aW9uLWJ1dHRvbiAoY2xpY2spPVwib25DbGVhckxvZ3MoKVwiPlxuXHRcdFx0XHQ8aW9uLWljb24gbmFtZT1cInRyYXNoLW91dGxpbmVcIj48L2lvbi1pY29uPlxuXHRcdFx0PC9pb24tYnV0dG9uPlxuXHRcdDwvaW9uLWJ1dHRvbnM+XG5cdDwvaW9uLXRvb2xiYXI+XG5cdDxpb24tdG9vbGJhcj5cblx0XHQ8aW9uaWMtbG9nZ2luZy12aWV3ZXItbGV2ZWxzPjwvaW9uaWMtbG9nZ2luZy12aWV3ZXItbGV2ZWxzPlxuXHQ8L2lvbi10b29sYmFyPlxuPC9pb24taGVhZGVyPlxuPGlvbi1jb250ZW50PlxuXHQ8aW9uaWMtbG9nZ2luZy12aWV3ZXIgW2xvY2FsU3RvcmFnZUtleXNdPVwibG9jYWxTdG9yYWdlS2V5c1wiPjwvaW9uaWMtbG9nZ2luZy12aWV3ZXI+XG48L2lvbi1jb250ZW50PiJdfQ==