UNPKG

@tekdi/sunbird-quml-player

Version:

The QuML player library components are powered by Angular. This player is primarily designed to be used on Sunbird consumption platforms (mobile app, web portal, offline desktop app) to drive reusability and maintainability, hence reducing the redundant d

75 lines 17 kB
import { Component, EventEmitter, Input, Output } from '@angular/core'; import * as _ from 'lodash-es'; import * as i0 from "@angular/core"; import * as i1 from "@angular/platform-browser"; import * as i2 from "../util-service"; import * as i3 from "@angular/common"; import * as i4 from "../pipes/safe-html/safe-html.pipe"; export class SaComponent { constructor(domSanitizer, utilService) { this.domSanitizer = domSanitizer; this.utilService = utilService; this.componentLoaded = new EventEmitter(); this.showAnswerClicked = new EventEmitter(); this.showAnswer = false; } ngOnInit() { this.question = this.questions?.body; this.answer = this.questions?.answer; this.solutions = _.isEmpty(this.questions?.solutions) ? null : this.questions?.solutions; } ngAfterViewInit() { this.handleKeyboardAccessibility(); this.utilService.updateSourceOfVideoElement(this.baseUrl, this.questions?.media, this.questions.identifier); } ngOnChanges() { if (this.replayed) { this.showAnswer = false; } else if (this.questions?.isAnswerShown) { this.showAnswer = true; } } showAnswerToUser() { this.showAnswer = true; this.showAnswerClicked.emit({ showAnswer: this.showAnswer }); } onEnter(event) { /* istanbul ignore else */ if (event.keyCode === 13) { event.stopPropagation(); this.showAnswerToUser(); } } handleKeyboardAccessibility() { const elements = Array.from(document.getElementsByClassName('option-body')); elements.forEach((element) => { /* istanbul ignore else */ if (element.offsetHeight) { const children = Array.from(element.querySelectorAll("a")); children.forEach((child) => { child.setAttribute('tabindex', '-1'); }); } }); } /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SaComponent, deps: [{ token: i1.DomSanitizer }, { token: i2.UtilService }], target: i0.ɵɵFactoryTarget.Component }); } /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: SaComponent, selector: "quml-sa", inputs: { questions: "questions", replayed: "replayed", baseUrl: "baseUrl" }, outputs: { componentLoaded: "componentLoaded", showAnswerClicked: "showAnswerClicked" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"quml-sa\">\n <div class=\"question-container\" tabindex=\"0\">\n <div class=\"sa-title\">Question</div>\n <div class=\"question\" [innerHTML]=\"question | safeHtml\"></div>\n </div>\n <div class=\"sa-button-container\">\n <div *ngIf=\"!showAnswer\" id=\"submit-answer\" tabindex=\"0\" class=\"sb-btn sb-btn-primary sb-btn-normal sb-btn-radius\"\n aria-label=\"Show Answer\" (click)=\"showAnswerToUser()\" (keydown)=\"onEnter($event)\">Show Answer</div>\n </div>\n <div id=\"answer-container\" [ngClass]=\"showAnswer ? 'option-container-blurred-out': 'option-container-blurred'\">\n <div class=\"sa-title\" [attr.aria-hidden]=\"showAnswer ? null : true\">Answer</div>\n <div class=\"option-body\" [innerHTML]=\"answer | safeHtml\" [attr.aria-hidden]=\"showAnswer ? null : true\"></div>\n <ng-container *ngIf=\"solutions\"> \n <div class=\"sa-title\" [attr.aria-hidden]=\"showAnswer ? null : true\">Solution</div>\n <div class=\"solutions\" *ngFor=\"let solution of solutions | keyvalue\" [attr.aria-hidden]=\"showAnswer ? null : true\">\n <div [innerHTML]=\"solution.value | safeHtml\" tabindex=\"-1\"></div>\n </div>\n </ng-container>\n </div>\n</div>", styles: [".sa-title{color:var(--primary-color);font-size:.875rem;font-weight:500;margin:16px 0;clear:both}.question-container{margin-top:2.5rem}.sa-button-container{text-align:center;margin-bottom:1rem;margin-top:1rem;clear:both}.option-container-blurred{filter:blur(.25rem);pointer-events:none;-webkit-user-select:none;user-select:none;clear:both}.option-container-blurred-out{filter:unset;transition:.4s;-webkit-user-select:text;user-select:text;pointer-events:auto}.solutions{clear:both}\n", ".answer{border:1px solid;padding:.2em;margin:.5em}.icon{width:15%;max-width:70px;min-width:50px;display:inline-block;vertical-align:top}.mcqText{display:inline-block;word-break:break-word}.mcq-option{background:var(--white);border-radius:5px;margin:8px 16px;padding:8px}.options{word-break:break-word;padding:15px 5px}.even,.odd{width:47%;display:inline-block;vertical-align:middle}.column-block{display:inline-block;width:48%;vertical-align:middle}.selected{background:var(--primary-color);color:var(--white);box-shadow:1px 2px 1px 3px var(--black)}.mathText{display:inline!important}.padding-top{padding-top:16px}@media only screen and (min-width: 100px) and (max-width: 481px){.mcqText{width:75%}.even,.odd{width:38%;display:inline-block;vertical-align:middle}.column-block{display:inline-block;width:42%;vertical-align:middle}}@media only screen and (min-width: 481px) and (max-width: 800px){.mcqText{width:85%}.even,.odd{width:43%;display:inline-block;vertical-align:middle}.column-block{display:inline-block;width:45%;vertical-align:middle}}@media only screen and (min-width: 801px) and (max-width: 1200px){.even,.odd{width:45%}.column-block{display:inline-block;width:45%;vertical-align:middle}}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i3.KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: i4.SafeHtmlPipe, name: "safeHtml" }] }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SaComponent, decorators: [{ type: Component, args: [{ selector: 'quml-sa', template: "<div class=\"quml-sa\">\n <div class=\"question-container\" tabindex=\"0\">\n <div class=\"sa-title\">Question</div>\n <div class=\"question\" [innerHTML]=\"question | safeHtml\"></div>\n </div>\n <div class=\"sa-button-container\">\n <div *ngIf=\"!showAnswer\" id=\"submit-answer\" tabindex=\"0\" class=\"sb-btn sb-btn-primary sb-btn-normal sb-btn-radius\"\n aria-label=\"Show Answer\" (click)=\"showAnswerToUser()\" (keydown)=\"onEnter($event)\">Show Answer</div>\n </div>\n <div id=\"answer-container\" [ngClass]=\"showAnswer ? 'option-container-blurred-out': 'option-container-blurred'\">\n <div class=\"sa-title\" [attr.aria-hidden]=\"showAnswer ? null : true\">Answer</div>\n <div class=\"option-body\" [innerHTML]=\"answer | safeHtml\" [attr.aria-hidden]=\"showAnswer ? null : true\"></div>\n <ng-container *ngIf=\"solutions\"> \n <div class=\"sa-title\" [attr.aria-hidden]=\"showAnswer ? null : true\">Solution</div>\n <div class=\"solutions\" *ngFor=\"let solution of solutions | keyvalue\" [attr.aria-hidden]=\"showAnswer ? null : true\">\n <div [innerHTML]=\"solution.value | safeHtml\" tabindex=\"-1\"></div>\n </div>\n </ng-container>\n </div>\n</div>", styles: [".sa-title{color:var(--primary-color);font-size:.875rem;font-weight:500;margin:16px 0;clear:both}.question-container{margin-top:2.5rem}.sa-button-container{text-align:center;margin-bottom:1rem;margin-top:1rem;clear:both}.option-container-blurred{filter:blur(.25rem);pointer-events:none;-webkit-user-select:none;user-select:none;clear:both}.option-container-blurred-out{filter:unset;transition:.4s;-webkit-user-select:text;user-select:text;pointer-events:auto}.solutions{clear:both}\n", ".answer{border:1px solid;padding:.2em;margin:.5em}.icon{width:15%;max-width:70px;min-width:50px;display:inline-block;vertical-align:top}.mcqText{display:inline-block;word-break:break-word}.mcq-option{background:var(--white);border-radius:5px;margin:8px 16px;padding:8px}.options{word-break:break-word;padding:15px 5px}.even,.odd{width:47%;display:inline-block;vertical-align:middle}.column-block{display:inline-block;width:48%;vertical-align:middle}.selected{background:var(--primary-color);color:var(--white);box-shadow:1px 2px 1px 3px var(--black)}.mathText{display:inline!important}.padding-top{padding-top:16px}@media only screen and (min-width: 100px) and (max-width: 481px){.mcqText{width:75%}.even,.odd{width:38%;display:inline-block;vertical-align:middle}.column-block{display:inline-block;width:42%;vertical-align:middle}}@media only screen and (min-width: 481px) and (max-width: 800px){.mcqText{width:85%}.even,.odd{width:43%;display:inline-block;vertical-align:middle}.column-block{display:inline-block;width:45%;vertical-align:middle}}@media only screen and (min-width: 801px) and (max-width: 1200px){.even,.odd{width:45%}.column-block{display:inline-block;width:45%;vertical-align:middle}}\n"] }] }], ctorParameters: function () { return [{ type: i1.DomSanitizer }, { type: i2.UtilService }]; }, propDecorators: { questions: [{ type: Input }], replayed: [{ type: Input }], baseUrl: [{ type: Input }], componentLoaded: [{ type: Output }], showAnswerClicked: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2EuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcXVtbC1saWJyYXJ5L3NyYy9saWIvc2Evc2EuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcXVtbC1saWJyYXJ5L3NyYy9saWIvc2Evc2EuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpHLE9BQU8sS0FBSyxDQUFDLE1BQU0sV0FBVyxDQUFDOzs7Ozs7QUFRL0IsTUFBTSxPQUFPLFdBQVc7SUFZdEIsWUFBb0IsWUFBMEIsRUFBVSxXQUF3QjtRQUE1RCxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUFVLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBUHRFLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUMxQyxzQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBRXRELGVBQVUsR0FBRyxLQUFLLENBQUM7SUFJa0UsQ0FBQztJQUV0RixRQUFRO1FBQ04sSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQztRQUNyQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDO0lBQzNGLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLFdBQVcsQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDOUcsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7U0FDekI7YUFBTSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsYUFBYSxFQUFFO1lBQ3hDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1NBQ3hCO0lBQ0gsQ0FBQztJQUVELGdCQUFnQjtRQUNkLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUM7WUFDMUIsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO1NBQzVCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxPQUFPLENBQUMsS0FBSztRQUNYLDBCQUEwQjtRQUMxQixJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssRUFBRSxFQUFFO1lBQ3hCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztTQUN6QjtJQUNILENBQUM7SUFFRCwyQkFBMkI7UUFDekIsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsc0JBQXNCLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztRQUM1RSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBb0IsRUFBRSxFQUFFO1lBQ3hDLDBCQUEwQjtZQUMxQixJQUFJLE9BQU8sQ0FBQyxZQUFZLEVBQUU7Z0JBQ3hCLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQzNELFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFrQixFQUFFLEVBQUU7b0JBQ3BDLEtBQUssQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUN6QyxDQUFDLENBQUMsQ0FBQzthQUNKO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO2tJQTNEVSxXQUFXO3NIQUFYLFdBQVcsMk9DVnhCLGtzQ0FtQk07OzRGRFRPLFdBQVc7a0JBTHZCLFNBQVM7K0JBQ0UsU0FBUzs2SEFNVixTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNJLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IFV0aWxTZXJ2aWNlIH0gZnJvbSAnLi4vdXRpbC1zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncXVtbC1zYScsXG4gIHRlbXBsYXRlVXJsOiAnLi9zYS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NhLmNvbXBvbmVudC5zY3NzJywgJy4uL3F1bWwtbGlicmFyeS5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFNhQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQge1xuXG4gIEBJbnB1dCgpIHF1ZXN0aW9ucz86IGFueTtcbiAgQElucHV0KCkgcmVwbGF5ZWQ/OiBib29sZWFuO1xuICBASW5wdXQoKSBiYXNlVXJsOiBzdHJpbmc7XG4gIEBPdXRwdXQoKSBjb21wb25lbnRMb2FkZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHNob3dBbnN3ZXJDbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgc2hvd0Fuc3dlciA9IGZhbHNlO1xuICBzb2x1dGlvbnM6IGFueTtcbiAgcXVlc3Rpb246IGFueTtcbiAgYW5zd2VyOiBhbnk7XG4gIGNvbnN0cnVjdG9yKCBwdWJsaWMgZG9tU2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsIHByaXZhdGUgdXRpbFNlcnZpY2U6IFV0aWxTZXJ2aWNlICkgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5xdWVzdGlvbiA9IHRoaXMucXVlc3Rpb25zPy5ib2R5O1xuICAgIHRoaXMuYW5zd2VyID0gdGhpcy5xdWVzdGlvbnM/LmFuc3dlcjtcbiAgICB0aGlzLnNvbHV0aW9ucyA9IF8uaXNFbXB0eSh0aGlzLnF1ZXN0aW9ucz8uc29sdXRpb25zKSA/IG51bGwgOiB0aGlzLnF1ZXN0aW9ucz8uc29sdXRpb25zO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuaGFuZGxlS2V5Ym9hcmRBY2Nlc3NpYmlsaXR5KCk7XG4gICAgdGhpcy51dGlsU2VydmljZS51cGRhdGVTb3VyY2VPZlZpZGVvRWxlbWVudCh0aGlzLmJhc2VVcmwsIHRoaXMucXVlc3Rpb25zPy5tZWRpYSwgdGhpcy5xdWVzdGlvbnMuaWRlbnRpZmllcik7XG4gIH1cblxuICBuZ09uQ2hhbmdlcygpIHtcbiAgICBpZiAodGhpcy5yZXBsYXllZCkge1xuICAgICAgdGhpcy5zaG93QW5zd2VyID0gZmFsc2U7XG4gICAgfSBlbHNlIGlmICh0aGlzLnF1ZXN0aW9ucz8uaXNBbnN3ZXJTaG93bikge1xuICAgICAgdGhpcy5zaG93QW5zd2VyID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBzaG93QW5zd2VyVG9Vc2VyKCkge1xuICAgIHRoaXMuc2hvd0Fuc3dlciA9IHRydWU7XG4gICAgdGhpcy5zaG93QW5zd2VyQ2xpY2tlZC5lbWl0KHtcbiAgICAgIHNob3dBbnN3ZXI6IHRoaXMuc2hvd0Fuc3dlclxuICAgIH0pO1xuICB9XG5cbiAgb25FbnRlcihldmVudCkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IDEzKSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHRoaXMuc2hvd0Fuc3dlclRvVXNlcigpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUtleWJvYXJkQWNjZXNzaWJpbGl0eSgpIHtcbiAgICBjb25zdCBlbGVtZW50cyA9IEFycmF5LmZyb20oZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnb3B0aW9uLWJvZHknKSk7XG4gICAgZWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudDogSFRNTEVsZW1lbnQpID0+IHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAoZWxlbWVudC5vZmZzZXRIZWlnaHQpIHtcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBBcnJheS5mcm9tKGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcImFcIikpO1xuICAgICAgICBjaGlsZHJlbi5mb3JFYWNoKChjaGlsZDogSFRNTEVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgIGNoaWxkLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnLTEnKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJxdW1sLXNhXCI+XG4gIDxkaXYgY2xhc3M9XCJxdWVzdGlvbi1jb250YWluZXJcIiB0YWJpbmRleD1cIjBcIj5cbiAgICA8ZGl2IGNsYXNzPVwic2EtdGl0bGVcIj5RdWVzdGlvbjwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJxdWVzdGlvblwiIFtpbm5lckhUTUxdPVwicXVlc3Rpb24gfCBzYWZlSHRtbFwiPjwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cInNhLWJ1dHRvbi1jb250YWluZXJcIj5cbiAgICA8ZGl2ICpuZ0lmPVwiIXNob3dBbnN3ZXJcIiBpZD1cInN1Ym1pdC1hbnN3ZXJcIiB0YWJpbmRleD1cIjBcIiBjbGFzcz1cInNiLWJ0biBzYi1idG4tcHJpbWFyeSBzYi1idG4tbm9ybWFsIHNiLWJ0bi1yYWRpdXNcIlxuICAgIGFyaWEtbGFiZWw9XCJTaG93IEFuc3dlclwiIChjbGljayk9XCJzaG93QW5zd2VyVG9Vc2VyKClcIiAoa2V5ZG93bik9XCJvbkVudGVyKCRldmVudClcIj5TaG93IEFuc3dlcjwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBpZD1cImFuc3dlci1jb250YWluZXJcIiBbbmdDbGFzc109XCJzaG93QW5zd2VyID8gJ29wdGlvbi1jb250YWluZXItYmx1cnJlZC1vdXQnOiAnb3B0aW9uLWNvbnRhaW5lci1ibHVycmVkJ1wiPlxuICAgIDxkaXYgY2xhc3M9XCJzYS10aXRsZVwiIFthdHRyLmFyaWEtaGlkZGVuXT1cInNob3dBbnN3ZXIgPyBudWxsIDogdHJ1ZVwiPkFuc3dlcjwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJvcHRpb24tYm9keVwiIFtpbm5lckhUTUxdPVwiYW5zd2VyIHwgc2FmZUh0bWxcIiBbYXR0ci5hcmlhLWhpZGRlbl09XCJzaG93QW5zd2VyID8gbnVsbCA6IHRydWVcIj48L2Rpdj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic29sdXRpb25zXCI+IFxuICAgICAgPGRpdiBjbGFzcz1cInNhLXRpdGxlXCIgW2F0dHIuYXJpYS1oaWRkZW5dPVwic2hvd0Fuc3dlciA/IG51bGwgOiB0cnVlXCI+U29sdXRpb248L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzb2x1dGlvbnNcIiAqbmdGb3I9XCJsZXQgc29sdXRpb24gb2Ygc29sdXRpb25zIHwga2V5dmFsdWVcIiBbYXR0ci5hcmlhLWhpZGRlbl09XCJzaG93QW5zd2VyID8gbnVsbCA6IHRydWVcIj5cbiAgICAgICAgPGRpdiBbaW5uZXJIVE1MXT1cInNvbHV0aW9uLnZhbHVlIHwgc2FmZUh0bWxcIiB0YWJpbmRleD1cIi0xXCI+PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L2Rpdj4iXX0=