@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
189 lines • 25.7 kB
JavaScript
import { EventEmitter, Injectable } from '@angular/core';
import { CsTelemetryModule } from '@project-sunbird/client-services/telemetry';
import * as _ from 'lodash-es';
import * as i0 from "@angular/core";
import * as i1 from "./util-service";
export class QumlLibraryService {
constructor(utilService) {
this.utilService = utilService;
this.isSectionsAvailable = false;
this.telemetryEvent = new EventEmitter();
}
async initializeTelemetry(config, parentConfig) {
if (!_.has(config, 'context') || _.isEmpty(config, 'context')) {
return;
}
this.duration = new Date().getTime();
this.context = config?.context;
this.contentSessionId = this.utilService.uniqueId();
this.playSessionId = this.utilService.uniqueId();
this.channel = this.context.channel || '';
this.pdata = this.context.pdata;
this.sid = this.context.sid;
this.uid = this.context.uid;
this.rollup = this.context.contextRollup;
this.config = config;
this.isSectionsAvailable = parentConfig?.isSectionsAvailable;
/* istanbul ignore else */
if (!CsTelemetryModule.instance.isInitialised && this.context) {
const telemetryConfig = {
pdata: this.context.pdata,
env: 'contentplayer',
channel: this.context.channel,
did: this.context.did,
authtoken: this.context.authToken || '',
uid: this.context.uid || '',
sid: this.context.sid,
batchsize: 20,
mode: this.context.mode,
host: this.context.host || '',
endpoint: this.context.endpoint || '/data/v3/telemetry',
tags: this.context.tags,
cdata: (this.context.cdata || []).concat([
{ id: this.contentSessionId, type: 'ContentSession' },
{ id: this.playSessionId, type: 'PlaySession' },
{ id: '2.0', type: 'PlayerVersion' }
])
};
await CsTelemetryModule.instance.init({});
CsTelemetryModule.instance.telemetryService.initTelemetry({
config: telemetryConfig,
userOrgDetails: {}
});
}
this.telemetryObject = {
id: parentConfig.identifier,
type: 'Content',
ver: parentConfig?.metadata?.pkgVersion ? parentConfig.metadata.pkgVersion.toString() : '',
rollup: this.context?.objectRollup || {}
};
}
startAssesEvent(assesEvent) {
if (!_.isEmpty(this.context)) {
CsTelemetryModule.instance.telemetryService.raiseAssesTelemetry(assesEvent, this.getEventOptions());
}
}
start(duration) {
if (!_.isEmpty(this.context)) {
CsTelemetryModule.instance.telemetryService.raiseStartTelemetry({
options: this.getEventOptions(),
edata: { type: 'content', mode: 'play', pageid: '', duration: Number((duration / 1e3).toFixed(2)) }
});
}
}
response(identifier, version, type, option) {
if (!_.isEmpty(this.context)) {
const responseEvent = {
target: {
id: identifier,
ver: version,
type: type
},
type: 'CHOOSE',
values: [{
option
}]
};
CsTelemetryModule.instance.telemetryService.raiseResponseTelemetry(responseEvent, this.getEventOptions());
}
}
summary(eData) {
if (!_.isEmpty(this.context)) {
CsTelemetryModule.instance.telemetryService.raiseSummaryTelemetry(eData, this.getEventOptions());
}
}
end(duration, currentQuestionIndex, totalNoofQuestions, visitedQuestions, endpageseen, score) {
if (!_.isEmpty(this.context)) {
const durationSec = Number((duration / 1e3).toFixed(2));
CsTelemetryModule.instance.telemetryService.raiseEndTelemetry({
edata: {
type: 'content',
mode: 'play',
pageid: 'sunbird-player-Endpage',
summary: [
{
progress: Number(((currentQuestionIndex / totalNoofQuestions) * 100).toFixed(0))
},
{
totalNoofQuestions: totalNoofQuestions
},
{
visitedQuestions: visitedQuestions,
},
{
endpageseen
},
{
score
},
],
duration: durationSec
},
options: this.getEventOptions()
});
}
}
interact(id, currentPage, currentQuestionDetails) {
if (!_.isEmpty(this.context)) {
CsTelemetryModule.instance.telemetryService.raiseInteractTelemetry({
options: this.getEventOptions(),
edata: { type: 'TOUCH', subtype: '', id, pageid: currentPage + '' }
});
}
}
heartBeat(data) {
if (!_.isEmpty(this.context)) {
CsTelemetryModule.instance.playerTelemetryService.onHeartBeatEvent(data, {});
}
}
impression(currentPage) {
if (!_.isEmpty(this.context)) {
CsTelemetryModule.instance.telemetryService.raiseImpressionTelemetry({
options: this.getEventOptions(),
edata: { type: 'workflow', subtype: '', pageid: currentPage + '', uri: '' }
});
}
}
error(error, edata) {
if (!_.isEmpty(this.context)) {
CsTelemetryModule.instance.telemetryService.raiseErrorTelemetry({
options: this.getEventOptions(),
edata: {
err: 'LOAD',
errtype: 'content',
stacktrace: (error?.toString()) || ''
}
});
}
}
getEventOptions() {
const options = {
object: this.telemetryObject,
context: {
channel: this.channel || '',
pdata: this.pdata,
env: 'contentplayer',
sid: this.sid,
uid: this.uid,
cdata: (this.context?.cdata || []).concat([{ id: this.contentSessionId, type: 'ContentSession' },
{ id: this.playSessionId, type: 'PlaySession' },
{ id: '2.0', type: 'PlayerVersion' }]),
rollup: this.rollup || {}
}
};
/* istanbul ignore else */
if (this.isSectionsAvailable) {
options.context.cdata.push({ id: this.config.metadata.identifier, type: 'SectionId' });
}
return options;
}
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: QumlLibraryService, deps: [{ token: i1.UtilService }], target: i0.ɵɵFactoryTarget.Injectable }); }
/** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: QumlLibraryService, providedIn: 'root' }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: QumlLibraryService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}], ctorParameters: function () { return [{ type: i1.UtilService }]; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVtbC1saWJyYXJ5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9xdW1sLWxpYnJhcnkvc3JjL2xpYi9xdW1sLWxpYnJhcnkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUcvRSxPQUFPLEtBQUssQ0FBQyxNQUFNLFdBQVcsQ0FBQzs7O0FBSy9CLE1BQU0sT0FBTyxrQkFBa0I7SUFlN0IsWUFBbUIsV0FBd0I7UUFBeEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFYM0Msd0JBQW1CLEdBQUcsS0FBSyxDQUFDO1FBQzVCLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztJQVVNLENBQUM7SUFFaEQsS0FBSyxDQUFDLG1CQUFtQixDQUFDLE1BQXdCLEVBQUUsWUFBMkI7UUFDN0UsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxFQUFFO1lBQzdELE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNyQyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sRUFBRSxPQUFPLENBQUM7UUFDL0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDcEQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDO1FBQzFDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFDaEMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztRQUM1QixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO1FBQzVCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUM7UUFDekMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLFlBQVksRUFBRSxtQkFBbUIsQ0FBQztRQUU3RCwwQkFBMEI7UUFDMUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUM3RCxNQUFNLGVBQWUsR0FBRztnQkFDdEIsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSztnQkFDekIsR0FBRyxFQUFFLGVBQWU7Z0JBQ3BCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU87Z0JBQzdCLEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUc7Z0JBQ3JCLFNBQVMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsSUFBSSxFQUFFO2dCQUN2QyxHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksRUFBRTtnQkFDM0IsR0FBRyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRztnQkFDckIsU0FBUyxFQUFFLEVBQUU7Z0JBQ2IsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSTtnQkFDdkIsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLEVBQUU7Z0JBQzdCLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsSUFBSSxvQkFBb0I7Z0JBQ3ZELElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUk7Z0JBQ3ZCLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQztvQkFDdkMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtvQkFDckQsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFO29CQUMvQyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRTtpQkFDckMsQ0FBQzthQUNILENBQUM7WUFDRixNQUFNLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDMUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FDdkQ7Z0JBQ0UsTUFBTSxFQUFFLGVBQWU7Z0JBQ3ZCLGNBQWMsRUFBRSxFQUFFO2FBQ25CLENBQ0YsQ0FBQztTQUNIO1FBRUQsSUFBSSxDQUFDLGVBQWUsR0FBRztZQUNyQixFQUFFLEVBQUUsWUFBWSxDQUFDLFVBQVU7WUFDM0IsSUFBSSxFQUFFLFNBQVM7WUFDZixHQUFHLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQzFGLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLFlBQVksSUFBSSxFQUFFO1NBQ3pDLENBQUM7SUFDSixDQUFDO0lBRU0sZUFBZSxDQUFDLFVBQVU7UUFDL0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQzVCLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FDN0QsVUFBVSxFQUNWLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FDdkIsQ0FBQztTQUNIO0lBQ0gsQ0FBQztJQUVNLEtBQUssQ0FBQyxRQUFRO1FBQ25CLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUM1QixpQkFBaUIsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsbUJBQW1CLENBQzdEO2dCQUNFLE9BQU8sRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFO2dCQUMvQixLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO2FBQ3BHLENBQ0YsQ0FBQztTQUNIO0lBQ0gsQ0FBQztJQUVNLFFBQVEsQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNO1FBQy9DLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUM1QixNQUFNLGFBQWEsR0FBRztnQkFDcEIsTUFBTSxFQUFFO29CQUNOLEVBQUUsRUFBRSxVQUFVO29CQUNkLEdBQUcsRUFBRSxPQUFPO29CQUNaLElBQUksRUFBRSxJQUFJO2lCQUNYO2dCQUNELElBQUksRUFBRSxRQUFRO2dCQUNkLE1BQU0sRUFBRSxDQUFDO3dCQUNQLE1BQU07cUJBQ1AsQ0FBQzthQUNILENBQUM7WUFDRixpQkFBaUIsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsc0JBQXNCLENBQ2hFLGFBQWEsRUFDYixJQUFJLENBQUMsZUFBZSxFQUFFLENBQ3ZCLENBQUM7U0FDSDtJQUNILENBQUM7SUFFTSxPQUFPLENBQUMsS0FBSztRQUNsQixJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDNUIsaUJBQWlCLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLHFCQUFxQixDQUMvRCxLQUFLLEVBQ0wsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUN2QixDQUFDO1NBQ0g7SUFDSCxDQUFDO0lBRU0sR0FBRyxDQUFDLFFBQVEsRUFBRSxvQkFBb0IsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsS0FBSztRQUNqRyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDNUIsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hELGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQztnQkFDNUQsS0FBSyxFQUFFO29CQUNMLElBQUksRUFBRSxTQUFTO29CQUNmLElBQUksRUFBRSxNQUFNO29CQUNaLE1BQU0sRUFBRSx3QkFBd0I7b0JBQ2hDLE9BQU8sRUFBRTt3QkFDUDs0QkFDRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsR0FBRyxrQkFBa0IsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQzt5QkFDakY7d0JBQ0Q7NEJBQ0Usa0JBQWtCLEVBQUUsa0JBQWtCO3lCQUN2Qzt3QkFDRDs0QkFDRSxnQkFBZ0IsRUFBRSxnQkFBZ0I7eUJBQ25DO3dCQUNEOzRCQUNFLFdBQVc7eUJBQ1o7d0JBQ0Q7NEJBQ0UsS0FBSzt5QkFDTjtxQkFDRjtvQkFDRCxRQUFRLEVBQUUsV0FBVztpQkFDdEI7Z0JBQ0QsT0FBTyxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUU7YUFDaEMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRU0sUUFBUSxDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsc0JBQXVCO1FBQ3RELElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUM1QixpQkFBaUIsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsc0JBQXNCLENBQUM7Z0JBQ2pFLE9BQU8sRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFO2dCQUMvQixLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxXQUFXLEdBQUcsRUFBRSxFQUFFO2FBQ3BFLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUlNLFNBQVMsQ0FBQyxJQUFJO1FBQ25CLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUM1QixpQkFBaUIsQ0FBQyxRQUFRLENBQUMsc0JBQXNCLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQzlFO0lBQ0gsQ0FBQztJQUVNLFVBQVUsQ0FBQyxXQUFXO1FBQzNCLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUM1QixpQkFBaUIsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsd0JBQXdCLENBQUM7Z0JBQ25FLE9BQU8sRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFO2dCQUMvQixLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLFdBQVcsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRTthQUM1RSxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFTSxLQUFLLENBQUMsS0FBWSxFQUFFLEtBQXdDO1FBQ2pFLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUM1QixpQkFBaUIsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsbUJBQW1CLENBQUM7Z0JBQzlELE9BQU8sRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFO2dCQUMvQixLQUFLLEVBQUU7b0JBQ0wsR0FBRyxFQUFFLE1BQU07b0JBQ1gsT0FBTyxFQUFFLFNBQVM7b0JBQ2xCLFVBQVUsRUFBRSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUU7aUJBQ3RDO2FBQ0YsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRU0sZUFBZTtRQUNwQixNQUFNLE9BQU8sR0FBRztZQUNkLE1BQU0sRUFBRSxJQUFJLENBQUMsZUFBZTtZQUM1QixPQUFPLEVBQUU7Z0JBQ1AsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLElBQUksRUFBRTtnQkFDM0IsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO2dCQUNqQixHQUFHLEVBQUUsZUFBZTtnQkFDcEIsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHO2dCQUNiLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRztnQkFDYixLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFO29CQUNoRyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUU7b0JBQy9DLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQztnQkFDdEMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLElBQUksRUFBRTthQUMxQjtTQUNGLENBQUM7UUFFRiwwQkFBMEI7UUFDMUIsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUU7WUFDNUIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztTQUN4RjtRQUVELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7a0lBck5VLGtCQUFrQjtzSUFBbEIsa0JBQWtCLGNBRmpCLE1BQU07OzRGQUVQLGtCQUFrQjtrQkFIOUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENzVGVsZW1ldHJ5TW9kdWxlIH0gZnJvbSAnQHByb2plY3Qtc3VuYmlyZC9jbGllbnQtc2VydmljZXMvdGVsZW1ldHJ5JztcbmltcG9ydCB7IENvbnRleHQsIElQYXJlbnRDb25maWcsIFF1bWxQbGF5ZXJDb25maWcgfSBmcm9tICcuL3F1bWwtbGlicmFyeS1pbnRlcmZhY2UnO1xuaW1wb3J0IHsgVXRpbFNlcnZpY2UgfSBmcm9tICcuL3V0aWwtc2VydmljZSc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaC1lcyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFF1bWxMaWJyYXJ5U2VydmljZSB7XG4gIGR1cmF0aW9uOiBudW1iZXI7XG4gIGNoYW5uZWw6IHN0cmluZztcbiAgY29uZmlnOiBRdW1sUGxheWVyQ29uZmlnO1xuICBpc1NlY3Rpb25zQXZhaWxhYmxlID0gZmFsc2U7XG4gIHRlbGVtZXRyeUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIHByaXZhdGUgY29udGV4dDogQ29udGV4dDtcbiAgcHJpdmF0ZSB0ZWxlbWV0cnlPYmplY3Q6IGFueTtcbiAgcHJpdmF0ZSBjb250ZW50U2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgcGxheVNlc3Npb25JZDogc3RyaW5nO1xuICBwcml2YXRlIHBkYXRhOiBhbnk7XG4gIHByaXZhdGUgc2lkOiBzdHJpbmc7XG4gIHByaXZhdGUgdWlkOiBzdHJpbmc7XG4gIHByaXZhdGUgcm9sbHVwOiBhbnk7XG5cbiAgY29uc3RydWN0b3IocHVibGljIHV0aWxTZXJ2aWNlOiBVdGlsU2VydmljZSkgeyB9XG5cbiAgYXN5bmMgaW5pdGlhbGl6ZVRlbGVtZXRyeShjb25maWc6IFF1bWxQbGF5ZXJDb25maWcsIHBhcmVudENvbmZpZzogSVBhcmVudENvbmZpZykge1xuICAgIGlmICghXy5oYXMoY29uZmlnLCAnY29udGV4dCcpIHx8IF8uaXNFbXB0eShjb25maWcsICdjb250ZXh0JykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5kdXJhdGlvbiA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgIHRoaXMuY29udGV4dCA9IGNvbmZpZz8uY29udGV4dDtcbiAgICB0aGlzLmNvbnRlbnRTZXNzaW9uSWQgPSB0aGlzLnV0aWxTZXJ2aWNlLnVuaXF1ZUlkKCk7XG4gICAgdGhpcy5wbGF5U2Vzc2lvbklkID0gdGhpcy51dGlsU2VydmljZS51bmlxdWVJZCgpO1xuICAgIHRoaXMuY2hhbm5lbCA9IHRoaXMuY29udGV4dC5jaGFubmVsIHx8ICcnO1xuICAgIHRoaXMucGRhdGEgPSB0aGlzLmNvbnRleHQucGRhdGE7XG4gICAgdGhpcy5zaWQgPSB0aGlzLmNvbnRleHQuc2lkO1xuICAgIHRoaXMudWlkID0gdGhpcy5jb250ZXh0LnVpZDtcbiAgICB0aGlzLnJvbGx1cCA9IHRoaXMuY29udGV4dC5jb250ZXh0Um9sbHVwO1xuICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuICAgIHRoaXMuaXNTZWN0aW9uc0F2YWlsYWJsZSA9IHBhcmVudENvbmZpZz8uaXNTZWN0aW9uc0F2YWlsYWJsZTtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKCFDc1RlbGVtZXRyeU1vZHVsZS5pbnN0YW5jZS5pc0luaXRpYWxpc2VkICYmIHRoaXMuY29udGV4dCkge1xuICAgICAgY29uc3QgdGVsZW1ldHJ5Q29uZmlnID0ge1xuICAgICAgICBwZGF0YTogdGhpcy5jb250ZXh0LnBkYXRhLFxuICAgICAgICBlbnY6ICdjb250ZW50cGxheWVyJyxcbiAgICAgICAgY2hhbm5lbDogdGhpcy5jb250ZXh0LmNoYW5uZWwsXG4gICAgICAgIGRpZDogdGhpcy5jb250ZXh0LmRpZCxcbiAgICAgICAgYXV0aHRva2VuOiB0aGlzLmNvbnRleHQuYXV0aFRva2VuIHx8ICcnLFxuICAgICAgICB1aWQ6IHRoaXMuY29udGV4dC51aWQgfHwgJycsXG4gICAgICAgIHNpZDogdGhpcy5jb250ZXh0LnNpZCxcbiAgICAgICAgYmF0Y2hzaXplOiAyMCxcbiAgICAgICAgbW9kZTogdGhpcy5jb250ZXh0Lm1vZGUsXG4gICAgICAgIGhvc3Q6IHRoaXMuY29udGV4dC5ob3N0IHx8ICcnLFxuICAgICAgICBlbmRwb2ludDogdGhpcy5jb250ZXh0LmVuZHBvaW50IHx8ICcvZGF0YS92My90ZWxlbWV0cnknLFxuICAgICAgICB0YWdzOiB0aGlzLmNvbnRleHQudGFncyxcbiAgICAgICAgY2RhdGE6ICh0aGlzLmNvbnRleHQuY2RhdGEgfHwgW10pLmNvbmNhdChbXG4gICAgICAgICAgeyBpZDogdGhpcy5jb250ZW50U2Vzc2lvbklkLCB0eXBlOiAnQ29udGVudFNlc3Npb24nIH0sXG4gICAgICAgICAgeyBpZDogdGhpcy5wbGF5U2Vzc2lvbklkLCB0eXBlOiAnUGxheVNlc3Npb24nIH0sXG4gICAgICAgICAgeyBpZDogJzIuMCcsIHR5cGU6ICdQbGF5ZXJWZXJzaW9uJyB9XG4gICAgICAgIF0pXG4gICAgICB9O1xuICAgICAgYXdhaXQgQ3NUZWxlbWV0cnlNb2R1bGUuaW5zdGFuY2UuaW5pdCh7fSk7XG4gICAgICBDc1RlbGVtZXRyeU1vZHVsZS5pbnN0YW5jZS50ZWxlbWV0cnlTZXJ2aWNlLmluaXRUZWxlbWV0cnkoXG4gICAgICAgIHtcbiAgICAgICAgICBjb25maWc6IHRlbGVtZXRyeUNvbmZpZyxcbiAgICAgICAgICB1c2VyT3JnRGV0YWlsczoge31cbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLnRlbGVtZXRyeU9iamVjdCA9IHtcbiAgICAgIGlkOiBwYXJlbnRDb25maWcuaWRlbnRpZmllcixcbiAgICAgIHR5cGU6ICdDb250ZW50JyxcbiAgICAgIHZlcjogcGFyZW50Q29uZmlnPy5tZXRhZGF0YT8ucGtnVmVyc2lvbiA/IHBhcmVudENvbmZpZy5tZXRhZGF0YS5wa2dWZXJzaW9uLnRvU3RyaW5nKCkgOiAnJyxcbiAgICAgIHJvbGx1cDogdGhpcy5jb250ZXh0Py5vYmplY3RSb2xsdXAgfHwge31cbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHN0YXJ0QXNzZXNFdmVudChhc3Nlc0V2ZW50KSB7XG4gICAgaWYgKCFfLmlzRW1wdHkodGhpcy5jb250ZXh0KSkge1xuICAgICAgQ3NUZWxlbWV0cnlNb2R1bGUuaW5zdGFuY2UudGVsZW1ldHJ5U2VydmljZS5yYWlzZUFzc2VzVGVsZW1ldHJ5KFxuICAgICAgICBhc3Nlc0V2ZW50LFxuICAgICAgICB0aGlzLmdldEV2ZW50T3B0aW9ucygpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzdGFydChkdXJhdGlvbikge1xuICAgIGlmICghXy5pc0VtcHR5KHRoaXMuY29udGV4dCkpIHtcbiAgICAgIENzVGVsZW1ldHJ5TW9kdWxlLmluc3RhbmNlLnRlbGVtZXRyeVNlcnZpY2UucmFpc2VTdGFydFRlbGVtZXRyeShcbiAgICAgICAge1xuICAgICAgICAgIG9wdGlvbnM6IHRoaXMuZ2V0RXZlbnRPcHRpb25zKCksXG4gICAgICAgICAgZWRhdGE6IHsgdHlwZTogJ2NvbnRlbnQnLCBtb2RlOiAncGxheScsIHBhZ2VpZDogJycsIGR1cmF0aW9uOiBOdW1iZXIoKGR1cmF0aW9uIC8gMWUzKS50b0ZpeGVkKDIpKSB9XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlc3BvbnNlKGlkZW50aWZpZXIsIHZlcnNpb24sIHR5cGUsIG9wdGlvbikge1xuICAgIGlmICghXy5pc0VtcHR5KHRoaXMuY29udGV4dCkpIHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlRXZlbnQgPSB7XG4gICAgICAgIHRhcmdldDoge1xuICAgICAgICAgIGlkOiBpZGVudGlmaWVyLFxuICAgICAgICAgIHZlcjogdmVyc2lvbixcbiAgICAgICAgICB0eXBlOiB0eXBlXG4gICAgICAgIH0sXG4gICAgICAgIHR5cGU6ICdDSE9PU0UnLFxuICAgICAgICB2YWx1ZXM6IFt7XG4gICAgICAgICAgb3B0aW9uXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgICAgQ3NUZWxlbWV0cnlNb2R1bGUuaW5zdGFuY2UudGVsZW1ldHJ5U2VydmljZS5yYWlzZVJlc3BvbnNlVGVsZW1ldHJ5KFxuICAgICAgICByZXNwb25zZUV2ZW50LFxuICAgICAgICB0aGlzLmdldEV2ZW50T3B0aW9ucygpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzdW1tYXJ5KGVEYXRhKSB7XG4gICAgaWYgKCFfLmlzRW1wdHkodGhpcy5jb250ZXh0KSkge1xuICAgICAgQ3NUZWxlbWV0cnlNb2R1bGUuaW5zdGFuY2UudGVsZW1ldHJ5U2VydmljZS5yYWlzZVN1bW1hcnlUZWxlbWV0cnkoXG4gICAgICAgIGVEYXRhLFxuICAgICAgICB0aGlzLmdldEV2ZW50T3B0aW9ucygpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBlbmQoZHVyYXRpb24sIGN1cnJlbnRRdWVzdGlvbkluZGV4LCB0b3RhbE5vb2ZRdWVzdGlvbnMsIHZpc2l0ZWRRdWVzdGlvbnMsIGVuZHBhZ2VzZWVuLCBzY29yZSkge1xuICAgIGlmICghXy5pc0VtcHR5KHRoaXMuY29udGV4dCkpIHtcbiAgICAgIGNvbnN0IGR1cmF0aW9uU2VjID0gTnVtYmVyKChkdXJhdGlvbiAvIDFlMykudG9GaXhlZCgyKSk7XG4gICAgICBDc1RlbGVtZXRyeU1vZHVsZS5pbnN0YW5jZS50ZWxlbWV0cnlTZXJ2aWNlLnJhaXNlRW5kVGVsZW1ldHJ5KHtcbiAgICAgICAgZWRhdGE6IHtcbiAgICAgICAgICB0eXBlOiAnY29udGVudCcsXG4gICAgICAgICAgbW9kZTogJ3BsYXknLFxuICAgICAgICAgIHBhZ2VpZDogJ3N1bmJpcmQtcGxheWVyLUVuZHBhZ2UnLFxuICAgICAgICAgIHN1bW1hcnk6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcHJvZ3Jlc3M6IE51bWJlcigoKGN1cnJlbnRRdWVzdGlvbkluZGV4IC8gdG90YWxOb29mUXVlc3Rpb25zKSAqIDEwMCkudG9GaXhlZCgwKSlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRvdGFsTm9vZlF1ZXN0aW9uczogdG90YWxOb29mUXVlc3Rpb25zXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB2aXNpdGVkUXVlc3Rpb25zOiB2aXNpdGVkUXVlc3Rpb25zLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZW5kcGFnZXNlZW5cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHNjb3JlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgZHVyYXRpb246IGR1cmF0aW9uU2VjXG4gICAgICAgIH0sXG4gICAgICAgIG9wdGlvbnM6IHRoaXMuZ2V0RXZlbnRPcHRpb25zKClcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpbnRlcmFjdChpZCwgY3VycmVudFBhZ2UsIGN1cnJlbnRRdWVzdGlvbkRldGFpbHM/KSB7XG4gICAgaWYgKCFfLmlzRW1wdHkodGhpcy5jb250ZXh0KSkge1xuICAgICAgQ3NUZWxlbWV0cnlNb2R1bGUuaW5zdGFuY2UudGVsZW1ldHJ5U2VydmljZS5yYWlzZUludGVyYWN0VGVsZW1ldHJ5KHtcbiAgICAgICAgb3B0aW9uczogdGhpcy5nZXRFdmVudE9wdGlvbnMoKSxcbiAgICAgICAgZWRhdGE6IHsgdHlwZTogJ1RPVUNIJywgc3VidHlwZTogJycsIGlkLCBwYWdlaWQ6IGN1cnJlbnRQYWdlICsgJycgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cblxuXG4gIHB1YmxpYyBoZWFydEJlYXQoZGF0YSkge1xuICAgIGlmICghXy5pc0VtcHR5KHRoaXMuY29udGV4dCkpIHtcbiAgICAgIENzVGVsZW1ldHJ5TW9kdWxlLmluc3RhbmNlLnBsYXllclRlbGVtZXRyeVNlcnZpY2Uub25IZWFydEJlYXRFdmVudChkYXRhLCB7fSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGltcHJlc3Npb24oY3VycmVudFBhZ2UpIHtcbiAgICBpZiAoIV8uaXNFbXB0eSh0aGlzLmNvbnRleHQpKSB7XG4gICAgICBDc1RlbGVtZXRyeU1vZHVsZS5pbnN0YW5jZS50ZWxlbWV0cnlTZXJ2aWNlLnJhaXNlSW1wcmVzc2lvblRlbGVtZXRyeSh7XG4gICAgICAgIG9wdGlvbnM6IHRoaXMuZ2V0RXZlbnRPcHRpb25zKCksXG4gICAgICAgIGVkYXRhOiB7IHR5cGU6ICd3b3JrZmxvdycsIHN1YnR5cGU6ICcnLCBwYWdlaWQ6IGN1cnJlbnRQYWdlICsgJycsIHVyaTogJycgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGVycm9yKGVycm9yOiBFcnJvciwgZWRhdGE/OiB7IGVycjogc3RyaW5nLCBlcnJ0eXBlOiBzdHJpbmcgfSkge1xuICAgIGlmICghXy5pc0VtcHR5KHRoaXMuY29udGV4dCkpIHtcbiAgICAgIENzVGVsZW1ldHJ5TW9kdWxlLmluc3RhbmNlLnRlbGVtZXRyeVNlcnZpY2UucmFpc2VFcnJvclRlbGVtZXRyeSh7XG4gICAgICAgIG9wdGlvbnM6IHRoaXMuZ2V0RXZlbnRPcHRpb25zKCksXG4gICAgICAgIGVkYXRhOiB7XG4gICAgICAgICAgZXJyOiAnTE9BRCcsXG4gICAgICAgICAgZXJydHlwZTogJ2NvbnRlbnQnLFxuICAgICAgICAgIHN0YWNrdHJhY2U6IChlcnJvcj8udG9TdHJpbmcoKSkgfHwgJydcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldEV2ZW50T3B0aW9ucygpIHtcbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgb2JqZWN0OiB0aGlzLnRlbGVtZXRyeU9iamVjdCxcbiAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgY2hhbm5lbDogdGhpcy5jaGFubmVsIHx8ICcnLFxuICAgICAgICBwZGF0YTogdGhpcy5wZGF0YSxcbiAgICAgICAgZW52OiAnY29udGVudHBsYXllcicsXG4gICAgICAgIHNpZDogdGhpcy5zaWQsXG4gICAgICAgIHVpZDogdGhpcy51aWQsXG4gICAgICAgIGNkYXRhOiAodGhpcy5jb250ZXh0Py5jZGF0YSB8fCBbXSkuY29uY2F0KFt7IGlkOiB0aGlzLmNvbnRlbnRTZXNzaW9uSWQsIHR5cGU6ICdDb250ZW50U2Vzc2lvbicgfSxcbiAgICAgICAgeyBpZDogdGhpcy5wbGF5U2Vzc2lvbklkLCB0eXBlOiAnUGxheVNlc3Npb24nIH0sXG4gICAgICAgIHsgaWQ6ICcyLjAnLCB0eXBlOiAnUGxheWVyVmVyc2lvbicgfV0pLFxuICAgICAgICByb2xsdXA6IHRoaXMucm9sbHVwIHx8IHt9XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHRoaXMuaXNTZWN0aW9uc0F2YWlsYWJsZSkge1xuICAgICAgb3B0aW9ucy5jb250ZXh0LmNkYXRhLnB1c2goeyBpZDogdGhpcy5jb25maWcubWV0YWRhdGEuaWRlbnRpZmllciwgdHlwZTogJ1NlY3Rpb25JZCcgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH1cbn1cbiJdfQ==