@deeksha2309/sunbird-collection-editor 8.0.7
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.
- package/README.md +24 -0
- package/esm2022/lib/collection-editor-cursor.service.mjs +3 -0
- package/esm2022/lib/collection-editor-library.component.mjs +16 -0
- package/esm2022/lib/collection-editor-library.module.mjs +137 -0
- package/esm2022/lib/components/answer/answer.component.mjs +43 -0
- package/esm2022/lib/components/asset-browser/asset-browser.component.mjs +325 -0
- package/esm2022/lib/components/asset-browser/asset-browser.data.mjs +53 -0
- package/esm2022/lib/components/assign-page-number/assign-page-number.component.mjs +191 -0
- package/esm2022/lib/components/ckeditor-tool/ckeditor-tool.component.mjs +895 -0
- package/esm2022/lib/components/collection-icon/collection-icon.component.mjs +43 -0
- package/esm2022/lib/components/contentplayer-page/contentplayer-page.component.mjs +351 -0
- package/esm2022/lib/components/csv-upload/csv-upload.component.mjs +178 -0
- package/esm2022/lib/components/dialcode/dialcode.component.mjs +182 -0
- package/esm2022/lib/components/editor/editor.component.mjs +1125 -0
- package/esm2022/lib/components/fancy-tree/fancy-tree.component.mjs +529 -0
- package/esm2022/lib/components/header/header.component.mjs +123 -0
- package/esm2022/lib/components/library/library.component.mjs +242 -0
- package/esm2022/lib/components/library-filter/library-filter.component.mjs +149 -0
- package/esm2022/lib/components/library-list/library-list.component.mjs +92 -0
- package/esm2022/lib/components/library-player/library-player.component.mjs +62 -0
- package/esm2022/lib/components/manage-collaborator/manage-collaborator.component.mjs +256 -0
- package/esm2022/lib/components/meta-form/meta-form.component.mjs +377 -0
- package/esm2022/lib/components/options/options.component.mjs +144 -0
- package/esm2022/lib/components/plain-tree/plain-tree.component.mjs +125 -0
- package/esm2022/lib/components/progress-status/progress-status.component.mjs +46 -0
- package/esm2022/lib/components/publish-checklist/publish-checklist.component.mjs +67 -0
- package/esm2022/lib/components/quality-params-modal/quality-params-modal.component.mjs +52 -0
- package/esm2022/lib/components/question/question.component.mjs +1360 -0
- package/esm2022/lib/components/quml-player/quml-player.component.mjs +73 -0
- package/esm2022/lib/components/qumlplayer-page/qumlplayer-page.component.mjs +84 -0
- package/esm2022/lib/components/resource-reorder/resource-reorder.component.mjs +143 -0
- package/esm2022/lib/components/skeleton-loader/skeleton-loader.component.mjs +26 -0
- package/esm2022/lib/components/template/template.component.mjs +42 -0
- package/esm2022/lib/components/term-and-condition/term-and-condition.component.mjs +68 -0
- package/esm2022/lib/directives/telemetry-interact/telemetry-interact.directive.mjs +33 -0
- package/esm2022/lib/interfaces/McqForm.mjs +29 -0
- package/esm2022/lib/interfaces/editor.mjs +2 -0
- package/esm2022/lib/interfaces/framework.mjs +2 -0
- package/esm2022/lib/interfaces/httpOptions.mjs +2 -0
- package/esm2022/lib/interfaces/requestParam.mjs +2 -0
- package/esm2022/lib/interfaces/serverResponse.mjs +2 -0
- package/esm2022/lib/pipes/sanitize-html.pipe.mjs +20 -0
- package/esm2022/lib/services/config/category.config.json +8 -0
- package/esm2022/lib/services/config/config.service.mjs +27 -0
- package/esm2022/lib/services/config/editor.config.json +31 -0
- package/esm2022/lib/services/config/label.config.json +314 -0
- package/esm2022/lib/services/config/player.config.json +96 -0
- package/esm2022/lib/services/config/url.config.json +69 -0
- package/esm2022/lib/services/data/data.service.mjs +192 -0
- package/esm2022/lib/services/dialcode/dialcode.service.mjs +309 -0
- package/esm2022/lib/services/editor/editor.service.mjs +682 -0
- package/esm2022/lib/services/framework/framework.service.mjs +106 -0
- package/esm2022/lib/services/helper/helper.service.mjs +160 -0
- package/esm2022/lib/services/player/player.service.mjs +99 -0
- package/esm2022/lib/services/public-data/public-data.service.mjs +21 -0
- package/esm2022/lib/services/question/question.service.mjs +167 -0
- package/esm2022/lib/services/telemetry/telemetry.service.mjs +120 -0
- package/esm2022/lib/services/toaster/toaster.service.mjs +105 -0
- package/esm2022/lib/services/tree/tree.service.mjs +284 -0
- package/esm2022/project-sunbird-sunbird-collection-editor.mjs +5 -0
- package/esm2022/public-api.mjs +4 -0
- package/fesm2022/project-sunbird-sunbird-collection-editor.mjs +10138 -0
- package/fesm2022/project-sunbird-sunbird-collection-editor.mjs.map +1 -0
- package/index.d.ts +6 -0
- package/lib/assets/.gitkeep +0 -0
- package/lib/assets/images/MCQ.png +0 -0
- package/lib/assets/images/Spin.gif +0 -0
- package/lib/assets/images/bulkuploadfile.png +0 -0
- package/lib/assets/images/cancel-sign copy.png +0 -0
- package/lib/assets/images/cancel-sign.png +0 -0
- package/lib/assets/images/emptyResult.svg +1 -0
- package/lib/assets/images/icons-rtl.gif +0 -0
- package/lib/assets/images/icons.gif +0 -0
- package/lib/assets/images/imageicon.svg +16 -0
- package/lib/assets/images/imageicon_blue.svg +16 -0
- package/lib/assets/images/layoutoneicon.svg +16 -0
- package/lib/assets/images/layoutoneicon_blue.svg +16 -0
- package/lib/assets/images/layoutthreeicon.svg +18 -0
- package/lib/assets/images/layoutthreeicon_blue.svg +18 -0
- package/lib/assets/images/layouttwoicon.svg +18 -0
- package/lib/assets/images/layouttwoicon_blue.svg +18 -0
- package/lib/assets/images/leftalignicon.svg +17 -0
- package/lib/assets/images/leftalignicon_blue.svg +17 -0
- package/lib/assets/images/loader.gif +0 -0
- package/lib/assets/images/loader.svg +1 -0
- package/lib/assets/images/loading.gif +0 -0
- package/lib/assets/images/middlealignicon.svg +17 -0
- package/lib/assets/images/middlealignicon_blue.svg +17 -0
- package/lib/assets/images/question_collection.svg +18 -0
- package/lib/assets/images/rightalignicon.svg +17 -0
- package/lib/assets/images/rightalignicon_blue.svg +17 -0
- package/lib/assets/images/vline-rtl.gif +0 -0
- package/lib/assets/images/vline.gif +0 -0
- package/lib/assets/images/writing.png +0 -0
- package/lib/collection-editor-cursor.service.d.ts +5 -0
- package/lib/collection-editor-cursor.service.d.ts.map +1 -0
- package/lib/collection-editor-library.component.d.ts +9 -0
- package/lib/collection-editor-library.component.d.ts.map +1 -0
- package/lib/collection-editor-library.module.d.ts +50 -0
- package/lib/collection-editor-library.module.d.ts.map +1 -0
- package/lib/components/answer/answer.component.d.ts +24 -0
- package/lib/components/answer/answer.component.d.ts.map +1 -0
- package/lib/components/asset-browser/asset-browser.component.d.ts +81 -0
- package/lib/components/asset-browser/asset-browser.component.d.ts.map +1 -0
- package/lib/components/asset-browser/asset-browser.data.d.ts +52 -0
- package/lib/components/asset-browser/asset-browser.data.d.ts.map +1 -0
- package/lib/components/assign-page-number/assign-page-number.component.d.ts +38 -0
- package/lib/components/assign-page-number/assign-page-number.component.d.ts.map +1 -0
- package/lib/components/ckeditor-tool/ckeditor-tool.component.d.ts +161 -0
- package/lib/components/ckeditor-tool/ckeditor-tool.component.d.ts.map +1 -0
- package/lib/components/collection-icon/collection-icon.component.d.ts +18 -0
- package/lib/components/collection-icon/collection-icon.component.d.ts.map +1 -0
- package/lib/components/contentplayer-page/contentplayer-page.component.d.ts +54 -0
- package/lib/components/contentplayer-page/contentplayer-page.component.d.ts.map +1 -0
- package/lib/components/csv-upload/csv-upload.component.d.ts +42 -0
- package/lib/components/csv-upload/csv-upload.component.d.ts.map +1 -0
- package/lib/components/dialcode/dialcode.component.d.ts +48 -0
- package/lib/components/dialcode/dialcode.component.d.ts.map +1 -0
- package/lib/components/editor/editor.component.d.ts +146 -0
- package/lib/components/editor/editor.component.d.ts.map +1 -0
- package/lib/components/fancy-tree/fancy-tree.component.d.ts +77 -0
- package/lib/components/fancy-tree/fancy-tree.component.d.ts.map +1 -0
- package/lib/components/header/header.component.d.ts +46 -0
- package/lib/components/header/header.component.d.ts.map +1 -0
- package/lib/components/library/library.component.d.ts +69 -0
- package/lib/components/library/library.component.d.ts.map +1 -0
- package/lib/components/library-filter/library-filter.component.d.ts +47 -0
- package/lib/components/library-filter/library-filter.component.d.ts.map +1 -0
- package/lib/components/library-list/library-list.component.d.ts +32 -0
- package/lib/components/library-list/library-list.component.d.ts.map +1 -0
- package/lib/components/library-player/library-player.component.d.ts +24 -0
- package/lib/components/library-player/library-player.component.d.ts.map +1 -0
- package/lib/components/manage-collaborator/manage-collaborator.component.d.ts +75 -0
- package/lib/components/manage-collaborator/manage-collaborator.component.d.ts.map +1 -0
- package/lib/components/meta-form/meta-form.component.d.ts +51 -0
- package/lib/components/meta-form/meta-form.component.d.ts.map +1 -0
- package/lib/components/options/options.component.d.ts +53 -0
- package/lib/components/options/options.component.d.ts.map +1 -0
- package/lib/components/plain-tree/plain-tree.component.d.ts +20 -0
- package/lib/components/plain-tree/plain-tree.component.d.ts.map +1 -0
- package/lib/components/progress-status/progress-status.component.d.ts +25 -0
- package/lib/components/progress-status/progress-status.component.d.ts.map +1 -0
- package/lib/components/publish-checklist/publish-checklist.component.d.ts +23 -0
- package/lib/components/publish-checklist/publish-checklist.component.d.ts.map +1 -0
- package/lib/components/quality-params-modal/quality-params-modal.component.d.ts +24 -0
- package/lib/components/quality-params-modal/quality-params-modal.component.d.ts.map +1 -0
- package/lib/components/question/question.component.d.ts +215 -0
- package/lib/components/question/question.component.d.ts.map +1 -0
- package/lib/components/quml-player/quml-player.component.d.ts +26 -0
- package/lib/components/quml-player/quml-player.component.d.ts.map +1 -0
- package/lib/components/qumlplayer-page/qumlplayer-page.component.d.ts +31 -0
- package/lib/components/qumlplayer-page/qumlplayer-page.component.d.ts.map +1 -0
- package/lib/components/resource-reorder/resource-reorder.component.d.ts +45 -0
- package/lib/components/resource-reorder/resource-reorder.component.d.ts.map +1 -0
- package/lib/components/skeleton-loader/skeleton-loader.component.d.ts +13 -0
- package/lib/components/skeleton-loader/skeleton-loader.component.d.ts.map +1 -0
- package/lib/components/template/template.component.d.ts +21 -0
- package/lib/components/template/template.component.d.ts.map +1 -0
- package/lib/components/term-and-condition/term-and-condition.component.d.ts +26 -0
- package/lib/components/term-and-condition/term-and-condition.component.d.ts.map +1 -0
- package/lib/directives/telemetry-interact/telemetry-interact.directive.d.ts +27 -0
- package/lib/directives/telemetry-interact/telemetry-interact.directive.d.ts.map +1 -0
- package/lib/interfaces/McqForm.d.ts +32 -0
- package/lib/interfaces/McqForm.d.ts.map +1 -0
- package/lib/interfaces/editor.d.ts +78 -0
- package/lib/interfaces/editor.d.ts.map +1 -0
- package/lib/interfaces/framework.d.ts +46 -0
- package/lib/interfaces/framework.d.ts.map +1 -0
- package/lib/interfaces/httpOptions.d.ts +35 -0
- package/lib/interfaces/httpOptions.d.ts.map +1 -0
- package/lib/interfaces/requestParam.d.ts +24 -0
- package/lib/interfaces/requestParam.d.ts.map +1 -0
- package/lib/interfaces/serverResponse.d.ts +38 -0
- package/lib/interfaces/serverResponse.d.ts.map +1 -0
- package/lib/pipes/sanitize-html.pipe.d.ts +11 -0
- package/lib/pipes/sanitize-html.pipe.d.ts.map +1 -0
- package/lib/services/config/config.service.d.ts +13 -0
- package/lib/services/config/config.service.d.ts.map +1 -0
- package/lib/services/data/data.service.d.ts +85 -0
- package/lib/services/data/data.service.d.ts.map +1 -0
- package/lib/services/dialcode/dialcode.service.d.ts +36 -0
- package/lib/services/dialcode/dialcode.service.d.ts.map +1 -0
- package/lib/services/editor/editor.service.d.ts +150 -0
- package/lib/services/editor/editor.service.d.ts.map +1 -0
- package/lib/services/framework/framework.service.d.ts +35 -0
- package/lib/services/framework/framework.service.d.ts.map +1 -0
- package/lib/services/helper/helper.service.d.ts +41 -0
- package/lib/services/helper/helper.service.d.ts.map +1 -0
- package/lib/services/player/player.service.d.ts +33 -0
- package/lib/services/player/player.service.d.ts.map +1 -0
- package/lib/services/public-data/public-data.service.d.ts +15 -0
- package/lib/services/public-data/public-data.service.d.ts.map +1 -0
- package/lib/services/question/question.service.d.ts +30 -0
- package/lib/services/question/question.service.d.ts.map +1 -0
- package/lib/services/telemetry/telemetry.service.d.ts +45 -0
- package/lib/services/telemetry/telemetry.service.d.ts.map +1 -0
- package/lib/services/toaster/toaster.service.d.ts +50 -0
- package/lib/services/toaster/toaster.service.d.ts.map +1 -0
- package/lib/services/tree/tree.service.d.ts +51 -0
- package/lib/services/tree/tree.service.d.ts.map +1 -0
- package/package.json +32 -0
- package/project-sunbird-sunbird-collection-editor.d.ts.map +1 -0
- package/public-api.d.ts +4 -0
- package/public-api.d.ts.map +1 -0
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output, ViewChild, ViewEncapsulation } from '@angular/core';
|
|
2
|
+
import * as _ from 'lodash-es';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "../../services/editor/editor.service";
|
|
5
|
+
import * as i2 from "../../services/telemetry/telemetry.service";
|
|
6
|
+
import * as i3 from "../../services/config/config.service";
|
|
7
|
+
import * as i4 from "@angular/common";
|
|
8
|
+
import * as i5 from "@angular/forms";
|
|
9
|
+
import * as i6 from "@project-sunbird/ng2-semantic-ui";
|
|
10
|
+
import * as i7 from "../../directives/telemetry-interact/telemetry-interact.directive";
|
|
11
|
+
import * as i8 from "../dialcode/dialcode.component";
|
|
12
|
+
import * as i9 from "../publish-checklist/publish-checklist.component";
|
|
13
|
+
export class HeaderComponent {
|
|
14
|
+
set requestChange(action) {
|
|
15
|
+
if (action) {
|
|
16
|
+
this.openRequestChangePopup(action);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
constructor(editorService, telemetryService, configService) {
|
|
20
|
+
this.editorService = editorService;
|
|
21
|
+
this.telemetryService = telemetryService;
|
|
22
|
+
this.configService = configService;
|
|
23
|
+
this.toolbarEmitter = new EventEmitter();
|
|
24
|
+
this.qualityParamEmitter = new EventEmitter();
|
|
25
|
+
}
|
|
26
|
+
async ngOnInit() {
|
|
27
|
+
await this.handleActionButtons();
|
|
28
|
+
this.getSourcingData();
|
|
29
|
+
this.editorService.bulkUploadStatus$.subscribe(status => {
|
|
30
|
+
this.bulkUploadStatus = status;
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
async handleActionButtons() {
|
|
34
|
+
this.visibility = {};
|
|
35
|
+
// Edit button visibility
|
|
36
|
+
// 1. if the editor in edit mode
|
|
37
|
+
// 2. if ReviewModificationAllowed is allowed and review/org-reviewer is viewing and the question is not added from library the question
|
|
38
|
+
this.visibility.editContent = this.editorService.editorMode === 'edit' || ((this.editorService.editorMode === 'orgreview' || this.editorService.editorMode === 'sourcingreview') && this.editorService.isReviewModificationAllowed && !_.get(this.editorService, 'editorConfig.context.isAddedFromLibrary', false));
|
|
39
|
+
this.visibility.saveContent = this.editorService.editorMode === 'edit' || ((this.editorService.editorMode === 'orgreview' || this.editorService.editorMode === 'sourcingreview') && this.editorService.isReviewModificationAllowed);
|
|
40
|
+
this.visibility.submitContent = this.editorService.editorMode === 'edit';
|
|
41
|
+
this.visibility.rejectContent = this.editorService.editorMode === 'review' || this.editorService.editorMode === 'orgreview';
|
|
42
|
+
this.visibility.publishContent = this.editorService.editorMode === 'review' || this.editorService.editorMode === 'orgreview';
|
|
43
|
+
this.visibility.sendForCorrectionsContent = this.editorService.editorMode === 'sourcingreview' && !_.get(this.editorService, 'editorConfig.context.isAddedFromLibrary', false);
|
|
44
|
+
this.visibility.sourcingApproveContent = this.editorService.editorMode === 'sourcingreview';
|
|
45
|
+
this.visibility.sourcingRejectContent = this.editorService.editorMode === 'sourcingreview';
|
|
46
|
+
this.visibility.previewContent = _.get(this.editorService, 'editorConfig.config.objectType') === 'QuestionSet';
|
|
47
|
+
this.visibility.dialcode = this.editorService.editorMode === 'edit';
|
|
48
|
+
this.visibility.showOriginPreviewUrl = _.get(this.editorService, 'editorConfig.config.showOriginPreviewUrl');
|
|
49
|
+
this.visibility.showSourcingStatus = _.get(this.editorService, 'editorConfig.config.showSourcingStatus');
|
|
50
|
+
//this.visibility.showCorrectionComments = _.get(this.editorService, 'editorConfig.config.showCorrectionComments');
|
|
51
|
+
this.visibility.hideSubmitForReviewBtn = _.get(this.editorService, 'editorConfig.config.hideSubmitForReviewBtn') || false;
|
|
52
|
+
this.visibility.addCollaborator = _.get(this.editorService, 'editorConfig.config.showAddCollaborator');
|
|
53
|
+
this.visibility.showPaginationBtn = _.get(this.editorService, 'editorConfig.config.enablePagination');
|
|
54
|
+
}
|
|
55
|
+
getSourcingData() {
|
|
56
|
+
this.sourcingStatusText = (this.visibility.showSourcingStatus) ? _.get(this.editorService, 'editorConfig.context.sourcingResourceStatus') : '';
|
|
57
|
+
this.sourcingStatusClass = (this.visibility.showSourcingStatus) ? _.get(this.editorService, 'editorConfig.context.sourcingResourceStatusClass') : '';
|
|
58
|
+
this.originPreviewUrl = (this.visibility.showOriginPreviewUrl) ? _.get(this.editorService, 'editorConfig.context.originPreviewUrl') : '';
|
|
59
|
+
this.correctionComments = (this.visibility.showCorrectionComments) ? _.get(this.editorService, 'editorConfig.context.correctionComments') : '';
|
|
60
|
+
}
|
|
61
|
+
openRequestChangePopup(action) {
|
|
62
|
+
this.actionType = action;
|
|
63
|
+
this.showRequestChangesPopup = true;
|
|
64
|
+
}
|
|
65
|
+
buttonEmitter(action) {
|
|
66
|
+
this.toolbarEmitter.emit({ button: action.type, ...(action.comment && { comment: this.rejectComment }) });
|
|
67
|
+
}
|
|
68
|
+
openPublishCheckListPopup(action) {
|
|
69
|
+
this.actionType = action;
|
|
70
|
+
this.showPublishCollectionPopup = true;
|
|
71
|
+
}
|
|
72
|
+
firstLevelPublish() {
|
|
73
|
+
if (this.editorService.isReviewerQualityCheckEnabled) {
|
|
74
|
+
this.toolbarEmitter.emit({ button: 'saveQualityParameters' });
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
this.buttonEmitter({ type: 'publishQuestion' });
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
publishEmitter(event) {
|
|
81
|
+
this.showPublishCollectionPopup = false;
|
|
82
|
+
if (event.button === 'publishContent' || event.button === 'publishQuestion' || event.button === 'sourcingApprove' || event.button === 'sourcingApproveQuestion') {
|
|
83
|
+
this.toolbarEmitter.emit(event);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
bulkUploadListener(event) {
|
|
87
|
+
this.toolbarEmitter.emit(event);
|
|
88
|
+
}
|
|
89
|
+
ngOnDestroy() {
|
|
90
|
+
if (this.modal && this.modal.deny) {
|
|
91
|
+
this.modal.deny();
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: HeaderComponent, deps: [{ token: i1.EditorService }, { token: i2.EditorTelemetryService }, { token: i3.ConfigService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
95
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: HeaderComponent, selector: "lib-header", inputs: { pageId: "pageId", labelConfigData: "labelConfigData", buttonLoaders: "buttonLoaders", showComment: "showComment", publishchecklist: "publishchecklist", requestChange: "requestChange" }, outputs: { toolbarEmitter: "toolbarEmitter", qualityParamEmitter: "qualityParamEmitter" }, viewQueries: [{ propertyName: "FormControl", first: true, predicate: ["FormControl"], descendants: true }, { propertyName: "modal", first: true, predicate: ["modal"], descendants: true }], ngImport: i0, template: "<!-- Blue Header -->\n<div class=\"sb-bg-color-primary\">\n <div class=\"ui container py-15\">\n <div class=\"d-flex flex-ai-center sb-color-white\">\n <button class=\"sb-btn sb-btn-primary sb-btn-xs back-btn px-0 hover-none fs-0-92 font-weight-bold\"\n (click)=\"buttonEmitter({type: 'backContent'})\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('back','click','launch', telemetryService.telemetryPageId)\">\n <i class=\"arrow left icon\" aria-hidden=\"true\"></i> {{configService.labelConfig?.button_labels?.back_btn_label}}\n </button>\n </div>\n </div>\n</div>\n\n<div class=\"sb-bg-lightBlue bb-1\">\n<div class=\"d-flex flex-jc-space-between flex-ai-center py-20 ui container\">\n <div>\n <div class=\"practical-header__title font-weight-bold pl-20 fs-0-92\">\n {{ labelConfigData.title }}\n </div>\n\n <div class=\"mt-8 pl-20\">\n <span class=\"sb-btn sb-btn-normal mr-10\" *ngIf=\"visibility.showSourcingStatus\" [ngClass]=\"sourcingStatusClass\">{{ sourcingStatusText }}</span>\n <!--span data-title=\"View review comments\" ((click)=\"buttonEmitter({type: 'showReviewcomments'})\" *ngIf=\"buttonLoaders?.showReviewComment\" libTelemetryInteract [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('view_comments','click','launch', telemetryService.telemetryPageId)\">\n <i class=\"icon comment flex-as-baseline mr-05\" aria-hidden=\"true\"></i>{{configService.labelConfig?.lbl?.viewComments}}\n </span-->\n <span class=\"fs-0-92\" data-title=\"View review comments\" (click)=\"buttonEmitter({type: 'showReviewcomments'})\" *ngIf=\"buttonLoaders?.showReviewComment\" libTelemetryInteract [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('view_comments','click','launch', telemetryService.telemetryPageId)\">\n <i class=\"icon comment flex-as-baseline mr-05\" aria-hidden=\"true\"></i>{{configService.labelConfig?.lbl?.viewComments}}\n </span>\n <a *ngIf=\"visibility.showOriginPreviewUrl && originPreviewUrl\" class=\"sb-color-primary mr-8 pl-10 fs-0-785 font-weight-bold\"\n href=\"{{originPreviewUrl}}\" target=\"_blank\">{{configService.labelConfig?.lbl?.viewOnOrigin}}</a>\n <label *ngIf=\"visibility.showOriginPreviewUrl && !originPreviewUrl\" class=\"sb-color-error mr-8 pl-10 fs-0-785 font-weight-bold\">\n {{configService.labelConfig?.err?.contentNotFoundonOrigin}}\n </label>\n </div>\n </div>\n <div class=\"d-flex flex-ai-center\" *ngIf=\"pageId === 'collection_editor' && labelConfigData\">\n <div *ngIf=\"visibility && visibility?.addCollaborator\" [attr.data-title]=\"labelConfigData?.isAddCollaborator ? 'Add collaborator' : 'View collaborator'\" class=\"cursor-pointer sb-color-primary mr-20 font-weight-bold\"\n (click)=\"buttonEmitter({type: 'addCollaborator'})\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('add_collaborator','click','launch', telemetryService.telemetryPageId)\">\n <i class=\"icon user plus mr-0\" aria-hidden=\"true\"></i>\n </div>\n <lib-dialcode *ngIf=\"visibility && visibility?.dialcode && labelConfigData?.showDialcode === 'yes'\" class=\"d-flex flex-ai-center\"></lib-dialcode>\n <button *ngIf=\"visibility && visibility?.submitContent && !bulkUploadStatus && labelConfigData?.hasChildren && !visibility.hideSubmitForReviewBtn && visibility.showPaginationBtn\"\n class=\"sb-btn sb-btn-normal sb-btn-primary mr-10\" (click)=\"buttonEmitter({type:'pagination'})\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('submit','click','submit', telemetryService.telemetryPageId)\"\n >\n <em class=\"{{labelConfigData.submit_collection_btn_icon}}\"></em>\n {{labelConfigData.add_page_numbers_to_questions_btn_label}}\n </button>\n <button *ngIf=\"visibility && visibility?.submitContent && !bulkUploadStatus && labelConfigData?.hasChildren && !visibility.hideSubmitForReviewBtn && visibility.showPaginationBtn\"\n class=\"sb-btn sb-btn-normal sb-btn-primary mr-10\" (click)=\"buttonEmitter({type:'progressStatus'})\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('submit','click','submit', telemetryService.telemetryPageId)\"\n >\n <em class=\"{{labelConfigData.submit_collection_btn_icon}}\"></em>\n Progress\n </button>\n <lib-bulk-upload *ngIf=\"visibility && visibility?.bulkUpload && labelConfigData?.showBulkUploadBtn\" class=\"d-flex flex-ai-center mr-10\" (bulkUploadEmitter)=\"bulkUploadListener($event)\" ></lib-bulk-upload>\n <button *ngIf=\"visibility && visibility?.previewContent && labelConfigData?.hasChildren && !bulkUploadStatus\" class=\"sb-btn sb-btn-normal sb-btn-outline-primary mr-10\"\n [ngClass]=\"!buttonLoaders?.previewButtonLoader ? '': 'sb-btn-loading-spinner sb-btn-outline-disabled'\"\n (click)=\"buttonEmitter({type: 'previewContent'})\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('preview','click','launch', telemetryService.telemetryPageId)\">\n <div class=\"sb-loading-spinner\" *ngIf=\"buttonLoaders?.previewButtonLoader\" role=\"status\" aria-hidden=\"true\"></div>\n <i *ngIf=\"labelConfigData.preview_collection_btn_icon && !buttonLoaders?.previewButtonLoader\" class=\"{{labelConfigData.preview_collection_btn_icon}}\"></i>\n {{ labelConfigData.preview_collection_btn_label}}\n </button>\n\n <button *ngIf=\"visibility && visibility?.saveContent\" class=\"sb-btn sb-btn-normal sb-btn-outline-primary mr-10\"\n [ngClass]=\"!buttonLoaders?.saveAsDraftButtonLoader ? '': 'sb-btn-loading-spinner sb-btn-outline-disabled'\"\n (click)=\"buttonEmitter({type:'saveContent'})\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('save_as_draft','click','submit', telemetryService.telemetryPageId)\"\n >\n <i class=\"{{labelConfigData.save_collection_btn_icon}}\" *ngIf=\"!buttonLoaders?.saveAsDraftButtonLoader\"></i>\n <div class=\"sb-loading-spinner\" *ngIf=\"buttonLoaders?.saveAsDraftButtonLoader\" role=\"status\" aria-hidden=\"true\"></div>\n {{labelConfigData.save_collection_btn_label}}\n </button>\n\n <button *ngIf=\"visibility && visibility?.submitContent && labelConfigData?.hasChildren && !visibility.hideSubmitForReviewBtn\" class=\"sb-btn sb-btn-normal sb-btn-primary mr-10\" (click)=\"buttonEmitter({type:'submitContent'})\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('submit','click','submit', telemetryService.telemetryPageId)\"\n >\n <i class=\"{{labelConfigData.submit_collection_btn_icon}}\"></i> \n {{labelConfigData.submit_collection_btn_label}}\n </button>\n\n <button *ngIf=\"visibility && visibility?.rejectContent\" class=\"sb-btn sb-btn-outline-error sb-btn-normal ripple mr-10\" (click)=\"openRequestChangePopup('rejectContent')\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('reject','click','submit', telemetryService.telemetryPageId)\">\n <i class=\"{{labelConfigData.reject_collection_btn_icon}}\"></i> \n {{labelConfigData.reject_collection_btn_label}}\n </button>\n\n <button *ngIf=\"visibility && visibility?.publishContent\" class=\"sb-btn sb-btn-secondary sb-btn-normal ripple\" (click)=\"openPublishCheckListPopup('publishContent')\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('publish','click','submit', telemetryService.telemetryPageId)\">\n <i class=\"{{labelConfigData.publish_collection_btn_icon}}\"></i> \n {{labelConfigData.publish_collection_btn_label}}\n </button>\n\n <button *ngIf=\"visibility && visibility?.sendForCorrectionsContent\" class=\"sb-btn sb-btn-outline-primary sb-btn-normal ripple mr-10\" (click)=\"openRequestChangePopup('sendForCorrections')\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('send_back_for_correction','click','submit', telemetryService.telemetryPageId)\">\n <i class=\"{{labelConfigData.send_back_for_correction_collection_btn_icon}}\"></i> \n {{labelConfigData.send_back_for_correction_collection_btn_label}}\n </button>\n\n <button *ngIf=\"visibility && visibility?.sourcingApproveContent\" class=\"sb-btn sb-btn-secondary sb-btn-normal ripple mr-10\" (click)=\"openPublishCheckListPopup('sourcingApprove')\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('approve','click','submit', telemetryService.telemetryPageId)\">\n <i class=\"{{labelConfigData.sourcing_approve_collection_btn_icon}}\"></i> \n {{labelConfigData.sourcing_approve_collection_btn_label}}\n </button>\n\n <button *ngIf=\"visibility && visibility?.sourcingRejectContent\" class=\"sb-btn sb-btn-error sb-btn-normal ripple\" (click)=\"openRequestChangePopup('sourcingReject')\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('reject','click','submit', telemetryService.telemetryPageId)\">\n <i class=\"{{labelConfigData.sourcing_reject_collection_btn_icon}}\"></i> \n {{labelConfigData.sourcing_reject_collection_btn_label}}\n </button>\n\n </div>\n <div class=\"d-flex flex-ai-center\" *ngIf=\"pageId === 'question' && labelConfigData\">\n <ng-container *ngIf=\"labelConfigData.showPreview; else editMode\">\n <button class=\"sb-btn sb-btn-normal sb-btn-outline-primary mr-10\" *ngIf=\"visibility && visibility?.editContent\"\n (click)=\"buttonEmitter({type: 'editContent'})\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('edit','click','launch', telemetryService.telemetryPageId)\">\n <i *ngIf=\"labelConfigData.edit_question_btn_icon\" class=\"{{labelConfigData.edit_question_btn_icon}}\"></i>\n {{ labelConfigData.edit_question_btn_label}}\n </button>\n </ng-container>\n <ng-template #editMode>\n <button class=\"sb-btn sb-btn-normal sb-btn-outline-primary mr-10\" *ngIf=\"!labelConfigData.showPreview\"\n [ngClass]=\"!buttonLoaders?.previewButtonLoader ? '': 'sb-btn-loading-spinner sb-btn-outline-disabled'\"\n (click)=\"buttonEmitter({type: 'previewContent'})\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('preview','click','launch', telemetryService.telemetryPageId)\">\n <div class=\"sb-loading-spinner\" *ngIf=\"buttonLoaders?.previewButtonLoader\" role=\"status\" aria-hidden=\"true\"></div>\n <i *ngIf=\"labelConfigData.preview_question_btn_icon && !buttonLoaders?.previewButtonLoader\" class=\"{{labelConfigData.preview_question_btn_icon}}\"></i>\n {{ labelConfigData.preview_question_btn_label}}\n </button>\n <button class=\"sb-btn sb-btn-normal sb-btn-outline-primary mr-10\"\n (click)=\"buttonEmitter({type: 'cancelContent'})\" libTelemetryInteract *ngIf=\"visibility?.saveContent\"\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('cancel','click','launch', telemetryService.telemetryPageId)\">\n <i *ngIf=\"labelConfigData.cancel_question_btn_icon\" class=\"{{labelConfigData.cancel_question_btn_icon}}\"></i>\n {{ labelConfigData.cancel_question_btn_label}}\n </button>\n <button class=\"sb-btn sb-btn-normal sb-btn-primary mr-10\" (click)=\"buttonEmitter({type: 'saveContent'})\" *ngIf=\"visibility?.saveContent\"\n [ngClass]=\"!buttonLoaders?.saveButtonLoader ? '': 'sb-btn-loading-spinner sb-btn-outline-disabled'\"\n libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('save','click','submit', telemetryService.telemetryPageId)\">\n <div class=\"sb-loading-spinner\" *ngIf=\"buttonLoaders?.saveButtonLoader\" role=\"status\" aria-hidden=\"true\"></div>\n <i *ngIf=\"labelConfigData.save_question_btn_icon && !buttonLoaders?.saveButtonLoader\" class=\"{{labelConfigData.save_question_btn_icon}}\"></i>\n {{ labelConfigData.save_question_btn_label}}\n </button>\n </ng-template>\n\n <!-- <button *ngIf=\"labelConfigData.add_translation\" class=\"sb-btn sb-btn-normal sb-btn-outline-primary mr-10\"\n (click)=\"buttonEmitter({type: 'showTranslation'})\">\n <i class=\"plus circle icon\"></i>\n {{ labelConfigData.add_translation_label}}\n </button> -->\n <button *ngIf=\"visibility && visibility?.submitContent && labelConfigData?.questionContribution && !visibility.hideSubmitForReviewBtn && !visibility.showSourcingStatus\" class=\"sb-btn sb-btn-normal sb-btn-secondary\" (click)=\"buttonEmitter({type:'submitQuestion'})\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('submit','click','submit', telemetryService.telemetryPageId)\"\n >\n <i class=\"{{labelConfigData.submit_collection_btn_icon}}\"></i>\n {{labelConfigData.submit_collection_btn_label}}\n </button>\n <button *ngIf=\"visibility && visibility?.rejectContent && labelConfigData?.questionContribution\" class=\"sb-btn sb-btn-outline-error sb-btn-normal ripple mr-10\" (click)=\"openRequestChangePopup('rejectQuestion')\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('reject','click','submit', telemetryService.telemetryPageId)\">\n <i class=\"{{labelConfigData.reject_collection_btn_icon}}\"></i>\n {{labelConfigData.reject_collection_btn_label}}\n </button>\n\n <button *ngIf=\"visibility && visibility?.publishContent && labelConfigData?.questionContribution\" class=\"sb-btn sb-btn-secondary sb-btn-normal ripple\" (click)=\"firstLevelPublish()\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('publish','click','submit', telemetryService.telemetryPageId)\">\n <i class=\"{{labelConfigData.publish_collection_btn_icon}}\"></i>\n {{labelConfigData.publish_collection_btn_label}}\n </button>\n\n <button *ngIf=\"visibility && visibility?.sendForCorrectionsContent\" class=\"sb-btn sb-btn-outline-primary sb-btn-normal ripple mr-10\" (click)=\"openRequestChangePopup('sendForCorrectionsQuestion')\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('send_back_for_correction_question','click','submit', telemetryService.telemetryPageId)\">\n <i class=\"{{labelConfigData.send_back_for_correction_collection_btn_icon}}\"></i>\n {{labelConfigData.send_back_for_correction_collection_btn_label}}\n </button>\n\n <button *ngIf=\"visibility && visibility?.sourcingApproveContent\" class=\"sb-btn sb-btn-secondary sb-btn-normal ripple mr-10\" (click)=\"openPublishCheckListPopup('sourcingApproveQuestion')\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('approve','click','submit', telemetryService.telemetryPageId)\">\n <i class=\"{{labelConfigData.sourcing_approve_collection_btn_icon}}\"></i>\n {{labelConfigData.sourcing_approve_collection_btn_label}}\n </button>\n\n <button *ngIf=\"visibility && visibility?.sourcingRejectContent\" class=\"sb-btn sb-btn-error sb-btn-normal ripple\" (click)=\"openRequestChangePopup('sourcingRejectQuestion')\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('reject','click','submit', telemetryService.telemetryPageId)\">\n <i class=\"{{labelConfigData.sourcing_reject_collection_btn_icon}}\"></i>\n {{labelConfigData.sourcing_reject_collection_btn_label}}\n </button>\n </div>\n</div>\n</div>\n\n<sui-modal *ngIf=\"showRequestChangesPopup\" [mustScroll]=\"true\" [isClosable]=\"false\" [transitionDuration]=\"0\"\n [size]=\"'normal'\" class=\"sb-modal bx-none overflow-modal\" appBodyScroll #modal (dismissed)=\"showRequestChangesPopup = false;\">\n <div class=\"sb-modal-header\">\n {{configService.labelConfig?.lbl?.addReviewComments}}\n </div>\n <form #FormControl=\"ngForm\" class=\"ui form\">\n <div class=\"sb-modal-content\">\n <div class=\"sb-field-group\">\n <label>{{configService.labelConfig?.lbl?.enterYourComments}}</label>\n <div class=\"sb-field relative\">\n\n <textarea type=\"text\" class=\"wmd-input width-100 sb-form-control\" id=\"wmd-input\" [(ngModel)]=\"rejectComment\" placeholder=\"Add comment\" name=\"rejectComment\" required maxlength=\"{{configService?.editorConfig?.rejectCommentsMaxLength}}\"></textarea>\n <label class=\"ui basic red error label pt-1 mt-5 width-100\"\n *ngIf=\"FormControl.form.controls.rejectComment?.touched && !FormControl.form.valid\">{{configService.labelConfig?.lbl?.fillComments}} </label>\n\n <!-- <textarea rows=\"4\" name=\"moretext\" class=\"sb-form-control\" placeholder=\"Type here...\"></textarea>\n <span class=\"characters-left\">1000 Characters left</span> -->\n </div>\n </div>\n </div>\n <div class=\"sb-modal-actions\">\n <button id=\"submitReview\" type=\"submit\" class=\"sb-btn sb-btn-normal\" [ngClass]=\"{'sb-btn-primary': FormControl.form.valid, 'sb-btn-disabled': !FormControl.form.valid}\" (click)=\"buttonEmitter({type: actionType, comment: rejectComment}); showRequestChangesPopup = false;\"\n [disabled]=\"!FormControl.form.valid\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('submit_review','click','submit', telemetryService.telemetryPageId, {key: 'dialog_id', value: 'add_review_comments'})\"\n > {{configService.labelConfig?.button_labels?.submit_review_btn_label}} </button>\n <button class=\"sb-btn sb-btn-normal sb-btn-outline-primary\" (click)=\"modal.deny('denied')\"\n libTelemetryInteract [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('cancel','click','cancel', telemetryService.telemetryPageId, {key: 'dialog_id', value: 'add_review_comments'})\">{{configService.labelConfig?.button_labels?.cancel_btn_label}}</button>\n </div>\n</form>\n</sui-modal>\n\n\n\n<lib-publish-checklist *ngIf=\"showPublishCollectionPopup\" [actionType]=\"actionType\" [publishchecklist]=\"publishchecklist\" \n (publishEmitter)=\"publishEmitter($event)\">\n</lib-publish-checklist>\n\n\n", styles: [".sb-disabled{background:var(--gray-0);border:.0625rem solid var(--gray-0);opacity:.45;pointer-events:none}.hover-none:hover{background:none!important}.bx-none .ui.modal{box-shadow:none!important}.overflow-modal .ui.modal{box-shadow:none}.overflow-modal .sb-tabset-segment{border:none}.sb-bg-header-blue{background:#d8e1e8}.sb-bg-lightBlue{background:var(--primary-0)!important}.bb-1{border-bottom:1px solid #d8d8d8}.flex-as-baseline{align-self:baseline!important}div[data-title]:before{position:absolute;right:30%;top:85%;height:25px;width:max-content}.sb-modal-fullscreen .modals.dimmer .ui.scrolling.modal{margin:0 auto!important}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i5.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i5.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i6.SuiRadioManager, selector: "form:not([ngForm]):not([[ngForm]]),ngForm,[ngForm]" }, { kind: "component", type: i6.SuiModal, selector: "sui-modal", inputs: ["isClosable", "closeResult", "size", "isCentered", "isFullScreen", "isBasic", "mustScroll", "isInverted", "transition", "transitionDuration"], outputs: ["approved", "denied", "dismissed"] }, { kind: "directive", type: i7.TelemetryInteractDirective, selector: "[libTelemetryInteract]", inputs: ["telemetryInteractEdata"] }, { kind: "component", type: i8.DialcodeComponent, selector: "lib-dialcode" }, { kind: "component", type: i9.PublishChecklistComponent, selector: "lib-publish-checklist", inputs: ["publishchecklist", "actionType"], outputs: ["publishEmitter"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
96
|
+
}
|
|
97
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: HeaderComponent, decorators: [{
|
|
98
|
+
type: Component,
|
|
99
|
+
args: [{ selector: 'lib-header', encapsulation: ViewEncapsulation.None, template: "<!-- Blue Header -->\n<div class=\"sb-bg-color-primary\">\n <div class=\"ui container py-15\">\n <div class=\"d-flex flex-ai-center sb-color-white\">\n <button class=\"sb-btn sb-btn-primary sb-btn-xs back-btn px-0 hover-none fs-0-92 font-weight-bold\"\n (click)=\"buttonEmitter({type: 'backContent'})\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('back','click','launch', telemetryService.telemetryPageId)\">\n <i class=\"arrow left icon\" aria-hidden=\"true\"></i> {{configService.labelConfig?.button_labels?.back_btn_label}}\n </button>\n </div>\n </div>\n</div>\n\n<div class=\"sb-bg-lightBlue bb-1\">\n<div class=\"d-flex flex-jc-space-between flex-ai-center py-20 ui container\">\n <div>\n <div class=\"practical-header__title font-weight-bold pl-20 fs-0-92\">\n {{ labelConfigData.title }}\n </div>\n\n <div class=\"mt-8 pl-20\">\n <span class=\"sb-btn sb-btn-normal mr-10\" *ngIf=\"visibility.showSourcingStatus\" [ngClass]=\"sourcingStatusClass\">{{ sourcingStatusText }}</span>\n <!--span data-title=\"View review comments\" ((click)=\"buttonEmitter({type: 'showReviewcomments'})\" *ngIf=\"buttonLoaders?.showReviewComment\" libTelemetryInteract [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('view_comments','click','launch', telemetryService.telemetryPageId)\">\n <i class=\"icon comment flex-as-baseline mr-05\" aria-hidden=\"true\"></i>{{configService.labelConfig?.lbl?.viewComments}}\n </span-->\n <span class=\"fs-0-92\" data-title=\"View review comments\" (click)=\"buttonEmitter({type: 'showReviewcomments'})\" *ngIf=\"buttonLoaders?.showReviewComment\" libTelemetryInteract [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('view_comments','click','launch', telemetryService.telemetryPageId)\">\n <i class=\"icon comment flex-as-baseline mr-05\" aria-hidden=\"true\"></i>{{configService.labelConfig?.lbl?.viewComments}}\n </span>\n <a *ngIf=\"visibility.showOriginPreviewUrl && originPreviewUrl\" class=\"sb-color-primary mr-8 pl-10 fs-0-785 font-weight-bold\"\n href=\"{{originPreviewUrl}}\" target=\"_blank\">{{configService.labelConfig?.lbl?.viewOnOrigin}}</a>\n <label *ngIf=\"visibility.showOriginPreviewUrl && !originPreviewUrl\" class=\"sb-color-error mr-8 pl-10 fs-0-785 font-weight-bold\">\n {{configService.labelConfig?.err?.contentNotFoundonOrigin}}\n </label>\n </div>\n </div>\n <div class=\"d-flex flex-ai-center\" *ngIf=\"pageId === 'collection_editor' && labelConfigData\">\n <div *ngIf=\"visibility && visibility?.addCollaborator\" [attr.data-title]=\"labelConfigData?.isAddCollaborator ? 'Add collaborator' : 'View collaborator'\" class=\"cursor-pointer sb-color-primary mr-20 font-weight-bold\"\n (click)=\"buttonEmitter({type: 'addCollaborator'})\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('add_collaborator','click','launch', telemetryService.telemetryPageId)\">\n <i class=\"icon user plus mr-0\" aria-hidden=\"true\"></i>\n </div>\n <lib-dialcode *ngIf=\"visibility && visibility?.dialcode && labelConfigData?.showDialcode === 'yes'\" class=\"d-flex flex-ai-center\"></lib-dialcode>\n <button *ngIf=\"visibility && visibility?.submitContent && !bulkUploadStatus && labelConfigData?.hasChildren && !visibility.hideSubmitForReviewBtn && visibility.showPaginationBtn\"\n class=\"sb-btn sb-btn-normal sb-btn-primary mr-10\" (click)=\"buttonEmitter({type:'pagination'})\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('submit','click','submit', telemetryService.telemetryPageId)\"\n >\n <em class=\"{{labelConfigData.submit_collection_btn_icon}}\"></em>\n {{labelConfigData.add_page_numbers_to_questions_btn_label}}\n </button>\n <button *ngIf=\"visibility && visibility?.submitContent && !bulkUploadStatus && labelConfigData?.hasChildren && !visibility.hideSubmitForReviewBtn && visibility.showPaginationBtn\"\n class=\"sb-btn sb-btn-normal sb-btn-primary mr-10\" (click)=\"buttonEmitter({type:'progressStatus'})\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('submit','click','submit', telemetryService.telemetryPageId)\"\n >\n <em class=\"{{labelConfigData.submit_collection_btn_icon}}\"></em>\n Progress\n </button>\n <lib-bulk-upload *ngIf=\"visibility && visibility?.bulkUpload && labelConfigData?.showBulkUploadBtn\" class=\"d-flex flex-ai-center mr-10\" (bulkUploadEmitter)=\"bulkUploadListener($event)\" ></lib-bulk-upload>\n <button *ngIf=\"visibility && visibility?.previewContent && labelConfigData?.hasChildren && !bulkUploadStatus\" class=\"sb-btn sb-btn-normal sb-btn-outline-primary mr-10\"\n [ngClass]=\"!buttonLoaders?.previewButtonLoader ? '': 'sb-btn-loading-spinner sb-btn-outline-disabled'\"\n (click)=\"buttonEmitter({type: 'previewContent'})\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('preview','click','launch', telemetryService.telemetryPageId)\">\n <div class=\"sb-loading-spinner\" *ngIf=\"buttonLoaders?.previewButtonLoader\" role=\"status\" aria-hidden=\"true\"></div>\n <i *ngIf=\"labelConfigData.preview_collection_btn_icon && !buttonLoaders?.previewButtonLoader\" class=\"{{labelConfigData.preview_collection_btn_icon}}\"></i>\n {{ labelConfigData.preview_collection_btn_label}}\n </button>\n\n <button *ngIf=\"visibility && visibility?.saveContent\" class=\"sb-btn sb-btn-normal sb-btn-outline-primary mr-10\"\n [ngClass]=\"!buttonLoaders?.saveAsDraftButtonLoader ? '': 'sb-btn-loading-spinner sb-btn-outline-disabled'\"\n (click)=\"buttonEmitter({type:'saveContent'})\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('save_as_draft','click','submit', telemetryService.telemetryPageId)\"\n >\n <i class=\"{{labelConfigData.save_collection_btn_icon}}\" *ngIf=\"!buttonLoaders?.saveAsDraftButtonLoader\"></i>\n <div class=\"sb-loading-spinner\" *ngIf=\"buttonLoaders?.saveAsDraftButtonLoader\" role=\"status\" aria-hidden=\"true\"></div>\n {{labelConfigData.save_collection_btn_label}}\n </button>\n\n <button *ngIf=\"visibility && visibility?.submitContent && labelConfigData?.hasChildren && !visibility.hideSubmitForReviewBtn\" class=\"sb-btn sb-btn-normal sb-btn-primary mr-10\" (click)=\"buttonEmitter({type:'submitContent'})\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('submit','click','submit', telemetryService.telemetryPageId)\"\n >\n <i class=\"{{labelConfigData.submit_collection_btn_icon}}\"></i> \n {{labelConfigData.submit_collection_btn_label}}\n </button>\n\n <button *ngIf=\"visibility && visibility?.rejectContent\" class=\"sb-btn sb-btn-outline-error sb-btn-normal ripple mr-10\" (click)=\"openRequestChangePopup('rejectContent')\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('reject','click','submit', telemetryService.telemetryPageId)\">\n <i class=\"{{labelConfigData.reject_collection_btn_icon}}\"></i> \n {{labelConfigData.reject_collection_btn_label}}\n </button>\n\n <button *ngIf=\"visibility && visibility?.publishContent\" class=\"sb-btn sb-btn-secondary sb-btn-normal ripple\" (click)=\"openPublishCheckListPopup('publishContent')\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('publish','click','submit', telemetryService.telemetryPageId)\">\n <i class=\"{{labelConfigData.publish_collection_btn_icon}}\"></i> \n {{labelConfigData.publish_collection_btn_label}}\n </button>\n\n <button *ngIf=\"visibility && visibility?.sendForCorrectionsContent\" class=\"sb-btn sb-btn-outline-primary sb-btn-normal ripple mr-10\" (click)=\"openRequestChangePopup('sendForCorrections')\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('send_back_for_correction','click','submit', telemetryService.telemetryPageId)\">\n <i class=\"{{labelConfigData.send_back_for_correction_collection_btn_icon}}\"></i> \n {{labelConfigData.send_back_for_correction_collection_btn_label}}\n </button>\n\n <button *ngIf=\"visibility && visibility?.sourcingApproveContent\" class=\"sb-btn sb-btn-secondary sb-btn-normal ripple mr-10\" (click)=\"openPublishCheckListPopup('sourcingApprove')\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('approve','click','submit', telemetryService.telemetryPageId)\">\n <i class=\"{{labelConfigData.sourcing_approve_collection_btn_icon}}\"></i> \n {{labelConfigData.sourcing_approve_collection_btn_label}}\n </button>\n\n <button *ngIf=\"visibility && visibility?.sourcingRejectContent\" class=\"sb-btn sb-btn-error sb-btn-normal ripple\" (click)=\"openRequestChangePopup('sourcingReject')\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('reject','click','submit', telemetryService.telemetryPageId)\">\n <i class=\"{{labelConfigData.sourcing_reject_collection_btn_icon}}\"></i> \n {{labelConfigData.sourcing_reject_collection_btn_label}}\n </button>\n\n </div>\n <div class=\"d-flex flex-ai-center\" *ngIf=\"pageId === 'question' && labelConfigData\">\n <ng-container *ngIf=\"labelConfigData.showPreview; else editMode\">\n <button class=\"sb-btn sb-btn-normal sb-btn-outline-primary mr-10\" *ngIf=\"visibility && visibility?.editContent\"\n (click)=\"buttonEmitter({type: 'editContent'})\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('edit','click','launch', telemetryService.telemetryPageId)\">\n <i *ngIf=\"labelConfigData.edit_question_btn_icon\" class=\"{{labelConfigData.edit_question_btn_icon}}\"></i>\n {{ labelConfigData.edit_question_btn_label}}\n </button>\n </ng-container>\n <ng-template #editMode>\n <button class=\"sb-btn sb-btn-normal sb-btn-outline-primary mr-10\" *ngIf=\"!labelConfigData.showPreview\"\n [ngClass]=\"!buttonLoaders?.previewButtonLoader ? '': 'sb-btn-loading-spinner sb-btn-outline-disabled'\"\n (click)=\"buttonEmitter({type: 'previewContent'})\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('preview','click','launch', telemetryService.telemetryPageId)\">\n <div class=\"sb-loading-spinner\" *ngIf=\"buttonLoaders?.previewButtonLoader\" role=\"status\" aria-hidden=\"true\"></div>\n <i *ngIf=\"labelConfigData.preview_question_btn_icon && !buttonLoaders?.previewButtonLoader\" class=\"{{labelConfigData.preview_question_btn_icon}}\"></i>\n {{ labelConfigData.preview_question_btn_label}}\n </button>\n <button class=\"sb-btn sb-btn-normal sb-btn-outline-primary mr-10\"\n (click)=\"buttonEmitter({type: 'cancelContent'})\" libTelemetryInteract *ngIf=\"visibility?.saveContent\"\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('cancel','click','launch', telemetryService.telemetryPageId)\">\n <i *ngIf=\"labelConfigData.cancel_question_btn_icon\" class=\"{{labelConfigData.cancel_question_btn_icon}}\"></i>\n {{ labelConfigData.cancel_question_btn_label}}\n </button>\n <button class=\"sb-btn sb-btn-normal sb-btn-primary mr-10\" (click)=\"buttonEmitter({type: 'saveContent'})\" *ngIf=\"visibility?.saveContent\"\n [ngClass]=\"!buttonLoaders?.saveButtonLoader ? '': 'sb-btn-loading-spinner sb-btn-outline-disabled'\"\n libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('save','click','submit', telemetryService.telemetryPageId)\">\n <div class=\"sb-loading-spinner\" *ngIf=\"buttonLoaders?.saveButtonLoader\" role=\"status\" aria-hidden=\"true\"></div>\n <i *ngIf=\"labelConfigData.save_question_btn_icon && !buttonLoaders?.saveButtonLoader\" class=\"{{labelConfigData.save_question_btn_icon}}\"></i>\n {{ labelConfigData.save_question_btn_label}}\n </button>\n </ng-template>\n\n <!-- <button *ngIf=\"labelConfigData.add_translation\" class=\"sb-btn sb-btn-normal sb-btn-outline-primary mr-10\"\n (click)=\"buttonEmitter({type: 'showTranslation'})\">\n <i class=\"plus circle icon\"></i>\n {{ labelConfigData.add_translation_label}}\n </button> -->\n <button *ngIf=\"visibility && visibility?.submitContent && labelConfigData?.questionContribution && !visibility.hideSubmitForReviewBtn && !visibility.showSourcingStatus\" class=\"sb-btn sb-btn-normal sb-btn-secondary\" (click)=\"buttonEmitter({type:'submitQuestion'})\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('submit','click','submit', telemetryService.telemetryPageId)\"\n >\n <i class=\"{{labelConfigData.submit_collection_btn_icon}}\"></i>\n {{labelConfigData.submit_collection_btn_label}}\n </button>\n <button *ngIf=\"visibility && visibility?.rejectContent && labelConfigData?.questionContribution\" class=\"sb-btn sb-btn-outline-error sb-btn-normal ripple mr-10\" (click)=\"openRequestChangePopup('rejectQuestion')\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('reject','click','submit', telemetryService.telemetryPageId)\">\n <i class=\"{{labelConfigData.reject_collection_btn_icon}}\"></i>\n {{labelConfigData.reject_collection_btn_label}}\n </button>\n\n <button *ngIf=\"visibility && visibility?.publishContent && labelConfigData?.questionContribution\" class=\"sb-btn sb-btn-secondary sb-btn-normal ripple\" (click)=\"firstLevelPublish()\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('publish','click','submit', telemetryService.telemetryPageId)\">\n <i class=\"{{labelConfigData.publish_collection_btn_icon}}\"></i>\n {{labelConfigData.publish_collection_btn_label}}\n </button>\n\n <button *ngIf=\"visibility && visibility?.sendForCorrectionsContent\" class=\"sb-btn sb-btn-outline-primary sb-btn-normal ripple mr-10\" (click)=\"openRequestChangePopup('sendForCorrectionsQuestion')\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('send_back_for_correction_question','click','submit', telemetryService.telemetryPageId)\">\n <i class=\"{{labelConfigData.send_back_for_correction_collection_btn_icon}}\"></i>\n {{labelConfigData.send_back_for_correction_collection_btn_label}}\n </button>\n\n <button *ngIf=\"visibility && visibility?.sourcingApproveContent\" class=\"sb-btn sb-btn-secondary sb-btn-normal ripple mr-10\" (click)=\"openPublishCheckListPopup('sourcingApproveQuestion')\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('approve','click','submit', telemetryService.telemetryPageId)\">\n <i class=\"{{labelConfigData.sourcing_approve_collection_btn_icon}}\"></i>\n {{labelConfigData.sourcing_approve_collection_btn_label}}\n </button>\n\n <button *ngIf=\"visibility && visibility?.sourcingRejectContent\" class=\"sb-btn sb-btn-error sb-btn-normal ripple\" (click)=\"openRequestChangePopup('sourcingRejectQuestion')\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('reject','click','submit', telemetryService.telemetryPageId)\">\n <i class=\"{{labelConfigData.sourcing_reject_collection_btn_icon}}\"></i>\n {{labelConfigData.sourcing_reject_collection_btn_label}}\n </button>\n </div>\n</div>\n</div>\n\n<sui-modal *ngIf=\"showRequestChangesPopup\" [mustScroll]=\"true\" [isClosable]=\"false\" [transitionDuration]=\"0\"\n [size]=\"'normal'\" class=\"sb-modal bx-none overflow-modal\" appBodyScroll #modal (dismissed)=\"showRequestChangesPopup = false;\">\n <div class=\"sb-modal-header\">\n {{configService.labelConfig?.lbl?.addReviewComments}}\n </div>\n <form #FormControl=\"ngForm\" class=\"ui form\">\n <div class=\"sb-modal-content\">\n <div class=\"sb-field-group\">\n <label>{{configService.labelConfig?.lbl?.enterYourComments}}</label>\n <div class=\"sb-field relative\">\n\n <textarea type=\"text\" class=\"wmd-input width-100 sb-form-control\" id=\"wmd-input\" [(ngModel)]=\"rejectComment\" placeholder=\"Add comment\" name=\"rejectComment\" required maxlength=\"{{configService?.editorConfig?.rejectCommentsMaxLength}}\"></textarea>\n <label class=\"ui basic red error label pt-1 mt-5 width-100\"\n *ngIf=\"FormControl.form.controls.rejectComment?.touched && !FormControl.form.valid\">{{configService.labelConfig?.lbl?.fillComments}} </label>\n\n <!-- <textarea rows=\"4\" name=\"moretext\" class=\"sb-form-control\" placeholder=\"Type here...\"></textarea>\n <span class=\"characters-left\">1000 Characters left</span> -->\n </div>\n </div>\n </div>\n <div class=\"sb-modal-actions\">\n <button id=\"submitReview\" type=\"submit\" class=\"sb-btn sb-btn-normal\" [ngClass]=\"{'sb-btn-primary': FormControl.form.valid, 'sb-btn-disabled': !FormControl.form.valid}\" (click)=\"buttonEmitter({type: actionType, comment: rejectComment}); showRequestChangesPopup = false;\"\n [disabled]=\"!FormControl.form.valid\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('submit_review','click','submit', telemetryService.telemetryPageId, {key: 'dialog_id', value: 'add_review_comments'})\"\n > {{configService.labelConfig?.button_labels?.submit_review_btn_label}} </button>\n <button class=\"sb-btn sb-btn-normal sb-btn-outline-primary\" (click)=\"modal.deny('denied')\"\n libTelemetryInteract [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('cancel','click','cancel', telemetryService.telemetryPageId, {key: 'dialog_id', value: 'add_review_comments'})\">{{configService.labelConfig?.button_labels?.cancel_btn_label}}</button>\n </div>\n</form>\n</sui-modal>\n\n\n\n<lib-publish-checklist *ngIf=\"showPublishCollectionPopup\" [actionType]=\"actionType\" [publishchecklist]=\"publishchecklist\" \n (publishEmitter)=\"publishEmitter($event)\">\n</lib-publish-checklist>\n\n\n", styles: [".sb-disabled{background:var(--gray-0);border:.0625rem solid var(--gray-0);opacity:.45;pointer-events:none}.hover-none:hover{background:none!important}.bx-none .ui.modal{box-shadow:none!important}.overflow-modal .ui.modal{box-shadow:none}.overflow-modal .sb-tabset-segment{border:none}.sb-bg-header-blue{background:#d8e1e8}.sb-bg-lightBlue{background:var(--primary-0)!important}.bb-1{border-bottom:1px solid #d8d8d8}.flex-as-baseline{align-self:baseline!important}div[data-title]:before{position:absolute;right:30%;top:85%;height:25px;width:max-content}.sb-modal-fullscreen .modals.dimmer .ui.scrolling.modal{margin:0 auto!important}\n"] }]
|
|
100
|
+
}], ctorParameters: function () { return [{ type: i1.EditorService }, { type: i2.EditorTelemetryService }, { type: i3.ConfigService }]; }, propDecorators: { pageId: [{
|
|
101
|
+
type: Input
|
|
102
|
+
}], labelConfigData: [{
|
|
103
|
+
type: Input
|
|
104
|
+
}], buttonLoaders: [{
|
|
105
|
+
type: Input
|
|
106
|
+
}], showComment: [{
|
|
107
|
+
type: Input
|
|
108
|
+
}], publishchecklist: [{
|
|
109
|
+
type: Input
|
|
110
|
+
}], requestChange: [{
|
|
111
|
+
type: Input
|
|
112
|
+
}], toolbarEmitter: [{
|
|
113
|
+
type: Output
|
|
114
|
+
}], FormControl: [{
|
|
115
|
+
type: ViewChild,
|
|
116
|
+
args: ['FormControl']
|
|
117
|
+
}], modal: [{
|
|
118
|
+
type: ViewChild,
|
|
119
|
+
args: ['modal']
|
|
120
|
+
}], qualityParamEmitter: [{
|
|
121
|
+
type: Output
|
|
122
|
+
}] } });
|
|
123
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbGxlY3Rpb24tZWRpdG9yLWxpYnJhcnkvc3JjL2xpYi9jb21wb25lbnRzL2hlYWRlci9oZWFkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29sbGVjdGlvbi1lZGl0b3ItbGlicmFyeS9zcmMvbGliL2NvbXBvbmVudHMvaGVhZGVyL2hlYWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJeEgsT0FBTyxLQUFLLENBQUMsTUFBTSxXQUFXLENBQUM7Ozs7Ozs7Ozs7O0FBUy9CLE1BQU0sT0FBTyxlQUFlO0lBTTFCLElBQWEsYUFBYSxDQUFDLE1BQWM7UUFDdkMsSUFBSSxNQUFNLEVBQUU7WUFDVixJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDckM7SUFDSCxDQUFDO0lBaUJELFlBQW9CLGFBQTRCLEVBQ3ZDLGdCQUF3QyxFQUN4QyxhQUE0QjtRQUZqQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUN2QyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQXdCO1FBQ3hDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBbEIzQixtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFHekMsd0JBQW1CLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztJQWVmLENBQUM7SUFFMUMsS0FBSyxDQUFDLFFBQVE7UUFDWixNQUFNLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFBO1FBQ2hDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQTtRQUN0QixJQUFJLENBQUMsYUFBYSxDQUFDLGlCQUFpQixD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LENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFO1lBQ2pDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDbkI7SUFDSCxDQUFDOytHQTFHVSxlQUFlO21HQUFmLGVBQWUsOGdCQ2I1Qix5c2tCQXNPQTs7NEZEek5hLGVBQWU7a0JBTjNCLFNBQVM7K0JBQ0UsWUFBWSxpQkFHUCxpQkFBaUIsQ0FBQyxJQUFJO3FLQUc1QixNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNPLGFBQWE7c0JBQXpCLEtBQUs7Z0JBS0ksY0FBYztzQkFBdkIsTUFBTTtnQkFDbUIsV0FBVztzQkFBcEMsU0FBUzt1QkFBQyxhQUFhO2dCQUNHLEtBQUs7c0JBQS9CLFNBQVM7dUJBQUMsT0FBTztnQkFDUixtQkFBbUI7c0JBQTVCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEVkaXRvclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lZGl0b3IvZWRpdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgRWRpdG9yVGVsZW1ldHJ5U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RlbGVtZXRyeS90ZWxlbWV0cnkuc2VydmljZSc7XG5pbXBvcnQgeyBDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29uZmlnL2NvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IE5nRm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWhlYWRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9oZWFkZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9oZWFkZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgSGVhZGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95LCBPbkluaXQge1xuICBASW5wdXQoKSBwYWdlSWQ6IGFueTtcbiAgQElucHV0KCkgbGFiZWxDb25maWdEYXRhOiBhbnk7XG4gIEBJbnB1dCgpIGJ1dHRvbkxvYWRlcnM6IGFueTtcbiAgQElucHV0KCkgc2hvd0NvbW1lbnQ6IGFueTtcbiAgQElucHV0KCkgcHVibGlzaGNoZWNrbGlzdDogYW55O1xuICBASW5wdXQoKSBzZXQgcmVxdWVzdENoYW5nZShhY3Rpb246IHN0cmluZykge1xuICAgIGlmIChhY3Rpb24pIHtcbiAgICAgIHRoaXMub3BlblJlcXVlc3RDaGFuZ2VQb3B1cChhY3Rpb24pO1xuICAgIH1cbiAgfVxuICBAT3V0cHV0KCkgdG9vbGJhckVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQFZpZXdDaGlsZCgnRm9ybUNvbnRyb2wnKSBGb3JtQ29udHJvbDogTmdGb3JtO1xuICBAVmlld0NoaWxkKCdtb2RhbCcpIHB1YmxpYyBtb2RhbDtcbiAgQE91dHB1dCgpIHF1YWxpdHlQYXJhbUVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgcHVibGljIHZpc2liaWxpdHk6IGFueTtcbiAgcHVibGljIHNob3dSZXZpZXdNb2RhbDogYm9vbGVhbjtcbiAgcHVibGljIHNob3dQdWJsaXNoQ29sbGVjdGlvblBvcHVwOiBib29sZWFuO1xuICBwdWJsaWMgc2hvd1JlcXVlc3RDaGFuZ2VzUG9wdXA6IGJvb2xlYW47XG4gIHB1YmxpYyByZWplY3RDb21tZW50OiBzdHJpbmc7XG4gIHB1YmxpYyBhY3Rpb25UeXBlOiBzdHJpbmc7XG4gIHB1YmxpYyBzb3VyY2luZ1N0YXR1c1RleHQ6IHN0cmluZztcbiAgcHVibGljIHNvdXJjaW5nU3RhdHVzQ2xhc3M6IHN0cmluZztcbiAgcHVibGljIG9yaWdpblByZXZpZXdVcmw6IHN0cmluZztcbiAgcHVibGljIGNvcnJlY3Rpb25Db21tZW50czogc3RyaW5nO1xuICBwdWJsaWMgYnVsa1VwbG9hZFN0YXR1czogYW55O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWRpdG9yU2VydmljZTogRWRpdG9yU2VydmljZSxcbiAgICBwdWJsaWMgdGVsZW1ldHJ5U2VydmljZTogRWRpdG9yVGVsZW1ldHJ5U2VydmljZSxcbiAgICBwdWJsaWMgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSkgeyB9XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgYXdhaXQgdGhpcy5oYW5kbGVBY3Rpb25CdXR0b25zKClcbiAgICB0aGlzLmdldFNvdXJjaW5nRGF0YSgpXG4gICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmJ1bGtVcGxvYWRTdGF0dXMkLnN1YnNjcmliZShzdGF0dXMgPT4ge1xuICAgICAgdGhpcy5idWxrVXBsb2FkU3RhdHVzID0gc3RhdHVzO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgaGFuZGxlQWN0aW9uQnV0dG9ucygpIHtcbiAgICB0aGlzLnZpc2liaWxpdHkgPSB7fTtcbiAgICAvLyBFZGl0IGJ1dHRvbiB2aXNpYmlsaXR5XG4gICAgLy8gMS4gaWYgdGhlIGVkaXRvciBpbiBlZGl0IG1vZGVcbiAgICAvLyAyLiBpZiBSZXZpZXdNb2RpZmljYXRpb25BbGxvd2VkIGlzIGFsbG93ZWQgYW5kIHJldmlldy9vcmctcmV2aWV3ZXIgaXMgdmlld2luZyBhbmQgdGhlIHF1ZXN0aW9uIGlzIG5vdCBhZGRlZCBmcm9tIGxpYnJhcnkgdGhlIHF1ZXN0aW9uXG4gICAgdGhpcy52aXNpYmlsaXR5LmVkaXRDb250ZW50ID0gdGhpcy5lZGl0b3JTZXJ2aWNlLmVkaXRvck1vZGUgPT09ICdlZGl0JyB8fCAoKHRoaXMuZWRpdG9yU2VydmljZS5lZGl0b3JNb2RlID09PSAnb3JncmV2aWV3JyB8fCB0aGlzLmVkaXRvclNlcnZpY2UuZWRpdG9yTW9kZSA9PT0gJ3NvdXJjaW5ncmV2aWV3JykgJiYgdGhpcy5lZGl0b3JTZXJ2aWNlLmlzUmV2aWV3TW9kaWZpY2F0aW9uQWxsb3dlZCAmJiAhXy5nZXQodGhpcy5lZGl0b3JTZXJ2aWNlLCAnZWRpdG9yQ29uZmlnLmNvbnRleHQuaXNBZGRlZEZyb21MaWJyYXJ5JywgZmFsc2UpKTtcbiAgICB0aGlzLnZpc2liaWxpdHkuc2F2ZUNvbnRlbnQgPSB0aGlzLmVkaXRvclNlcnZpY2UuZWRpdG9yTW9kZSA9PT0gJ2VkaXQnIHx8ICgodGhpcy5lZGl0b3JTZXJ2aWNlLmVkaXRvck1vZGUgPT09ICdvcmdyZXZpZXcnIHx8IHRoaXMuZWRpdG9yU2VydmljZS5lZGl0b3JNb2RlID09PSAnc291cmNpbmdyZXZpZXcnKSAmJiB0aGlzLmVkaXRvclNlcnZpY2UuaXNSZXZpZXdNb2RpZmljYXRpb25BbGxvd2VkKTtcbiAgICB0aGlzLnZpc2liaWxpdHkuc3VibWl0Q29udGVudCA9IHRoaXMuZWRpdG9yU2VydmljZS5lZGl0b3JNb2RlID09PSAnZWRpdCc7XG4gICAgdGhpcy52aXNpYmlsaXR5LnJlamVjdENvbnRlbnQgPSB0aGlzLmVkaXRvclNlcnZpY2UuZWRpdG9yTW9kZSA9PT0gJ3JldmlldycgfHwgdGhpcy5lZGl0b3JTZXJ2aWNlLmVkaXRvck1vZGUgPT09ICdvcmdyZXZpZXcnO1xuICAgIHRoaXMudmlzaWJpbGl0eS5wdWJsaXNoQ29udGVudCA9IHRoaXMuZWRpdG9yU2VydmljZS5lZGl0b3JNb2RlID09PSAncmV2aWV3JyB8fCB0aGlzLmVkaXRvclNlcnZpY2UuZWRpdG9yTW9kZSA9PT0gJ29yZ3Jldmlldyc7XG4gICAgdGhpcy52aXNpYmlsaXR5LnNlbmRGb3JDb3JyZWN0aW9uc0NvbnRlbnQgPSB0aGlzLmVkaXRvclNlcnZpY2UuZWRpdG9yTW9kZSA9PT0gJ3NvdXJjaW5ncmV2aWV3JyAmJiAhXy5nZXQodGhpcy5lZGl0b3JTZXJ2aWNlLCAnZWRpdG9yQ29uZmlnLmNvbnRleHQuaXNBZGRlZEZyb21MaWJyYXJ5JywgZmFsc2UpO1xuICAgIHRoaXMudmlzaWJpbGl0eS5zb3VyY2luZ0FwcHJvdmVDb250ZW50ID0gdGhpcy5lZGl0b3JTZXJ2aWNlLmVkaXRvck1vZGUgPT09ICdzb3VyY2luZ3Jldmlldyc7XG4gICAgdGhpcy52aXNpYmlsaXR5LnNvdXJjaW5nUmVqZWN0Q29udGVudCA9IHRoaXMuZWRpdG9yU2VydmljZS5lZGl0b3JNb2RlID09PSAnc291cmNpbmdyZXZpZXcnO1xuICAgIHRoaXMudmlzaWJpbGl0eS5wcmV2aWV3Q29udGVudCA9IF8uZ2V0KHRoaXMuZWRpdG9yU2VydmljZSwgJ2VkaXRvckNvbmZpZy5jb25maWcub2JqZWN0VHlwZScpID09PSAnUXVlc3Rpb25TZXQnO1xuICAgIHRoaXMudmlzaWJpbGl0eS5kaWFsY29kZSA9IHRoaXMuZWRpdG9yU2VydmljZS5lZGl0b3JNb2RlID09PSAnZWRpdCc7XG4gICAgdGhpcy52aXNpYmlsaXR5LnNob3dPcmlnaW5QcmV2aWV3VXJsID0gXy5nZXQodGhpcy5lZGl0b3JTZXJ2aWNlLCAnZWRpdG9yQ29uZmlnLmNvbmZpZy5zaG93T3JpZ2luUHJldmlld1VybCcpO1xuICAgIHRoaXMudmlzaWJpbGl0eS5zaG93U291cmNpbmdTdGF0dXMgPSBfLmdldCh0aGlzLmVkaXRvclNlcnZpY2UsICdlZGl0b3JDb25maWcuY29uZmlnLnNob3dTb3VyY2luZ1N0YXR1cycpO1xuICAgIC8vdGhpcy52aXNpYmlsaXR5LnNob3dDb3JyZWN0aW9uQ29tbWVudHMgPSBfLmdldCh0aGlzLmVkaXRvclNlcnZpY2UsICdlZGl0b3JDb25maWcuY29uZmlnLnNob3dDb3JyZWN0aW9uQ29tbWVudHMnKTtcbiAgICB0aGlzLnZpc2liaWxpdHkuaGlkZVN1Ym1pdEZvclJldmlld0J0biA9IF8uZ2V0KHRoaXMuZWRpdG9yU2VydmljZSwgJ2VkaXRvckNvbmZpZy5jb25maWcuaGlkZVN1Ym1pdEZvclJldmlld0J0bicpIHx8IGZhbHNlO1xuICAgIHRoaXMudmlzaWJpbGl0eS5hZGRDb2xsYWJvcmF0b3IgPSBfLmdldCh0aGlzLmVkaXRvclNlcnZpY2UsICdlZGl0b3JDb25maWcuY29uZmlnLnNob3dBZGRDb2xsYWJvcmF0b3InKTtcbiAgICB0aGlzLnZpc2liaWxpdHkuc2hvd1BhZ2luYXRpb25CdG4gPSBfLmdldCh0aGlzLmVkaXRvclNlcnZpY2UsICdlZGl0b3JDb25maWcuY29uZmlnLmVuYWJsZVBhZ2luYXRpb24nKTtcbiAgfVxuXG4gIGdldFNvdXJjaW5nRGF0YSgpIHtcbiAgICB0aGlzLnNvdXJjaW5nU3RhdHVzVGV4dCA9ICh0aGlzLnZpc2liaWxpdHkuc2hvd1NvdXJjaW5nU3RhdHVzKSA/IF8uZ2V0KHRoaXMuZWRpdG9yU2VydmljZSwgJ2VkaXRvckNvbmZpZy5jb250ZXh0LnNvdXJjaW5nUmVzb3VyY2VTdGF0dXMnKSA6ICcnO1xuICAgIHRoaXMuc291cmNpbmdTdGF0dXNDbGFzcyA9ICh0aGlzLnZpc2liaWxpdHkuc2hvd1NvdXJjaW5nU3RhdHVzKSA/IF8uZ2V0KHRoaXMuZWRpdG9yU2VydmljZSwgJ2VkaXRvckNvbmZpZy5jb250ZXh0LnNvdXJjaW5nUmVzb3VyY2VTdGF0dXNDbGFzcycpIDogJyc7XG4gICAgdGhpcy5vcmlnaW5QcmV2aWV3VXJsID0gKHRoaXMudmlzaWJpbGl0eS5zaG93T3JpZ2luUHJldmlld1VybCkgPyBfLmdldCh0aGlzLmVkaXRvclNlcnZpY2UsICdlZGl0b3JDb25maWcuY29udGV4dC5vcmlnaW5QcmV2aWV3VXJsJykgOiAnJztcbiAgICB0aGlzLmNvcnJlY3Rpb25Db21tZW50cyA9ICh0aGlzLnZpc2liaWxpdHkuc2hvd0NvcnJlY3Rpb25Db21tZW50cykgPyBfLmdldCh0aGlzLmVkaXRvclNlcnZpY2UsICdlZGl0b3JDb25maWcuY29udGV4dC5jb3JyZWN0aW9uQ29tbWVudHMnKSA6ICcnO1xuICB9XG5cbiAgb3BlblJlcXVlc3RDaGFuZ2VQb3B1cChhY3Rpb246IHN0cmluZykge1xuICAgIHRoaXMuYWN0aW9uVHlwZSA9IGFjdGlvbjtcbiAgICB0aGlzLnNob3dSZXF1ZXN0Q2hhbmdlc1BvcHVwID0gdHJ1ZTtcbiAgfVxuXG4gIGJ1dHRvbkVtaXR0ZXIoYWN0aW9uKSB7XG4gICAgdGhpcy50b29sYmFyRW1pdHRlci5lbWl0KHsgYnV0dG9uOiBhY3Rpb24udHlwZSwgLi4uKGFjdGlvbi5jb21tZW50ICYmIHsgY29tbWVudDogdGhpcy5yZWplY3RDb21tZW50IH0pIH0pO1xuICB9XG5cbiAgb3BlblB1Ymxpc2hDaGVja0xpc3RQb3B1cChhY3Rpb24pIHtcbiAgICB0aGlzLmFjdGlvblR5cGUgPSBhY3Rpb247XG4gICAgdGhpcy5zaG93UHVibGlzaENvbGxlY3Rpb25Qb3B1cCA9IHRydWU7XG4gIH1cblxuICBmaXJzdExldmVsUHVibGlzaCgpIHtcbiAgICBpZiAodGhpcy5lZGl0b3JTZXJ2aWNlLmlzUmV2aWV3ZXJRdWFsaXR5Q2hlY2tFbmFibGVkKSB7XG4gICAgICB0aGlzLnRvb2xiYXJFbWl0dGVyLmVtaXQoe2J1dHRvbjogJ3NhdmVRdWFsaXR5UGFyYW1ldGVycyd9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5idXR0b25FbWl0dGVyKHt0eXBlOiAncHVibGlzaFF1ZXN0aW9uJ30pO1xuICAgIH1cbiAgfVxuXG4gIHB1Ymxpc2hFbWl0dGVyKGV2ZW50KSB7XG4gICAgdGhpcy5zaG93UHVibGlzaENvbGxlY3Rpb25Qb3B1cCA9IGZhbHNlO1xuICAgIGlmIChldmVudC5idXR0b24gPT09ICdwdWJsaXNoQ29udGVudCcgfHwgZXZlbnQuYnV0dG9uID09PSAncHVibGlzaFF1ZXN0aW9uJyB8fCBldmVudC5idXR0b24gPT09ICdzb3VyY2luZ0FwcHJvdmUnIHx8IGV2ZW50LmJ1dHRvbiA9PT0gJ3NvdXJjaW5nQXBwcm92ZVF1ZXN0aW9uJykge1xuICAgICAgdGhpcy50b29sYmFyRW1pdHRlci5lbWl0KGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBidWxrVXBsb2FkTGlzdGVuZXIoZXZlbnQpIHtcbiAgICB0aGlzLnRvb2xiYXJFbWl0dGVyLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMubW9kYWwgJiYgdGhpcy5tb2RhbC5kZW55KSB7XG4gICAgICB0aGlzLm1vZGFsLmRlbnkoKTtcbiAgICB9XG4gIH1cbn1cbiIsIjwhLS0gQmx1ZSBIZWFkZXIgLS0+XG48ZGl2IGNsYXNzPVwic2ItYmctY29sb3ItcHJpbWFyeVwiPlxuICA8ZGl2IGNsYXNzPVwidWkgY29udGFpbmVyIHB5LTE1XCI+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWFpLWNlbnRlciBzYi1jb2xvci13aGl0ZVwiPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cInNiLWJ0biBzYi1idG4tcHJpbWFyeSBzYi1idG4teHMgYmFjay1idG4gcHgtMCBob3Zlci1ub25lIGZzLTAtOTIgZm9udC13ZWlnaHQtYm9sZFwiXG4gICAgICAoY2xpY2spPVwiYnV0dG9uRW1pdHRlcih7dHlwZTogJ2JhY2tDb250ZW50J30pXCIgbGliVGVsZW1ldHJ5SW50ZXJhY3RcbiAgICAgIFt0ZWxlbWV0cnlJbnRlcmFjdEVkYXRhXT1cInRlbGVtZXRyeVNlcnZpY2UuZ2V0VGVsZW1ldHJ5SW50ZXJhY3RFZGF0YSgnYmFjaycsJ2NsaWNrJywnbGF1bmNoJywgdGVsZW1ldHJ5U2VydmljZS50ZWxlbWV0cnlQYWdlSWQpXCI+XG4gICAgICAgIDxpIGNsYXNzPVwiYXJyb3cgbGVmdCBpY29uXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPiB7e2NvbmZpZ1NlcnZpY2UubGFiZWxDb25maWc/LmJ1dHRvbl9sYWJlbHM/LmJhY2tfYnRuX2xhYmVsfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwic2ItYmctbGlnaHRCbHVlIGJiLTFcIj5cbjxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1qYy1zcGFjZS1iZXR3ZWVuIGZsZXgtYWktY2VudGVyIHB5LTIwIHVpIGNvbnRhaW5lclwiPlxuICA8ZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJwcmFjdGljYWwtaGVhZGVyX190aXRsZSBmb250LXdlaWdodC1ib2xkIHBsLTIwIGZzLTAtOTJcIj5cbiAgICAgIHt7IGxhYmVsQ29uZmlnRGF0YS50aXRsZSB9fVxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cIm10LTggcGwtMjBcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwic2ItYnRuIHNiLWJ0bi1ub3JtYWwgbXItMTBcIiAqbmdJZj1cInZpc2liaWxpdHkuc2hvd1NvdXJjaW5nU3RhdHVzXCIgW25nQ2xhc3NdPVwic291cmNpbmdTdGF0dXNDbGFzc1wiPnt7IHNvdXJjaW5nU3RhdHVzVGV4dCB9fTwvc3Bhbj5cbiAgICAgIDwhLS1zcGFuIGRhdGEtdGl0bGU9XCJWaWV3IHJldmlldyBjb21tZW50c1wiICgoY2xpY2spPVwiYnV0dG9uRW1pdHRlcih7dHlwZTogJ3Nob3dSZXZpZXdjb21tZW50cyd9KVwiICpuZ0lmPVwiYnV0dG9uTG9hZGVycz8uc2hvd1Jldmlld0NvbW1lbnRcIiBsaWJUZWxlbWV0cnlJbnRlcmFjdCBbdGVsZW1ldHJ5SW50ZXJhY3RFZGF0YV09XCJ0ZWxlbWV0cnlTZXJ2aWNlLmdldFRlbGVtZXRyeUludGVyYWN0RWRhdGEoJ3ZpZXdfY29tbWVudHMnLCdjbGljaycsJ2xhdW5jaCcsIHRlbGVtZXRyeVNlcnZpY2UudGVsZW1ldHJ5UGFnZUlkKVwiPlxuICAgICAgICA8aSBjbGFzcz1cImljb24gY29tbWVudCBmbGV4LWFzLWJhc2VsaW5lIG1yLTA1XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPnt7Y29uZmlnU2VydmljZS5sYWJlbENvbmZpZz8ubGJsPy52aWV3Q29tbWVudHN9fVxuICAgICAgPC9zcGFuLS0+XG4gICAgICA8c3BhbiBjbGFzcz1cImZzLTAtOTJcIiBkYXRhLXRpdGxlPVwiVmlldyByZXZpZXcgY29tbWVudHNcIiAoY2xpY2spPVwiYnV0dG9uRW1pdHRlcih7dHlwZTogJ3Nob3dSZXZpZXdjb21tZW50cyd9KVwiICpuZ0lmPVwiYnV0dG9uTG9hZGVycz8uc2hvd1Jldmlld0NvbW1lbnRcIiBsaWJUZWxlbWV0cnlJbnRlcmFjdCBbdGVsZW1ldHJ5SW50ZXJhY3RFZGF0YV09XCJ0ZWxlbWV0cnlTZXJ2aWNlLmdldFRlbGVtZXRyeUludGVyYWN0RWRhdGEoJ3ZpZXdfY29tbWVudHMnLCdjbGljaycsJ2xhdW5jaCcsIHRlbGVtZXRyeVNlcnZpY2UudGVsZW1ldHJ5UGFnZUlkKVwiPlxuICAgICAgICA8aSBjbGFzcz1cImljb24gY29tbWVudCBmbGV4LWFzLWJhc2VsaW5lIG1yLTA1XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPnt7Y29uZmlnU2VydmljZS5sYWJlbENvbmZpZz8ubGJsPy52aWV3Q29tbWVudHN9fVxuICAgICAgPC9zcGFuPlxuICAgICAgPGEgKm5nSWY9XCJ2aXNpYmlsaXR5LnNob3dPcmlnaW5QcmV2aWV3VXJsICYmIG9yaWdpblByZXZpZXdVcmxcIiBjbGFzcz1cInNiLWNvbG9yLXByaW1hcnkgbXItOCBwbC0xMCBmcy0wLTc4NSBmb250LXdlaWdodC1ib2xkXCJcbiAgICAgIGhyZWY9XCJ7e29yaWdpblByZXZpZXdVcmx9fVwiIHRhcmdldD1cIl9ibGFua1wiPnt7Y29uZmlnU2VydmljZS5sYWJlbENvbmZpZz8ubGJsPy52aWV3T25PcmlnaW59fTwvYT5cbiAgICAgIDxsYWJlbCAqbmdJZj1cInZpc2liaWxpdHkuc2hvd09yaWdpblByZXZpZXdVcmwgJiYgIW9yaWdpblByZXZpZXdVcmxcIiBjbGFzcz1cInNiLWNvbG9yLWVycm9yIG1yLTggcGwtMTAgZnMtMC03ODUgZm9udC13ZWlnaHQtYm9sZFwiPlxuICAgICAgICB7e2NvbmZpZ1NlcnZpY2UubGFiZWxDb25maWc/LmVycj8uY29udGVudE5vdEZvdW5kb25PcmlnaW59fVxuICAgICAgPC9sYWJlbD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1haS1jZW50ZXJcIiAqbmdJZj1cInBhZ2VJZCA9PT0gJ2NvbGxlY3Rpb25fZWRpdG9yJyAmJiBsYWJlbENvbmZpZ0RhdGFcIj5cbiAgICA8ZGl2ICpuZ0lmPVwidmlzaWJpbGl0eSAmJiB2aXNpYmlsaXR5Py5hZGRDb2xsYWJvcmF0b3JcIiBbYXR0ci5kYXRhLXRpdGxlXT1cImxhYmVsQ29uZmlnRGF0YT8uaXNBZGRDb2xsYWJvcmF0b3IgPyAnQWRkIGNvbGxhYm9yYXRvcicgOiAnVmlldyBjb2xsYWJvcmF0b3InXCIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBzYi1jb2xvci1wcmltYXJ5IG1yLTIwIGZvbnQtd2VpZ2h0LWJvbGRcIlxuICAgIChjbGljayk9XCJidXR0b25FbWl0dGVyKHt0eXBlOiAnYWRkQ29sbGFib3JhdG9yJ30pXCIgbGliVGVsZW1ldHJ5SW50ZXJhY3RcbiAgICBbdGVsZW1ldHJ5SW50ZXJhY3RFZGF0YV09XCJ0ZWxlbWV0cnlTZXJ2aWNlLmdldFRlbGVtZXRyeUludGVyYWN0RWRhdGEoJ2FkZF9jb2xsYWJvcmF0b3InLCdjbGljaycsJ2xhdW5jaCcsIHRlbGVtZXRyeVNlcnZpY2UudGVsZW1ldHJ5UGFnZUlkKVwiPlxuICAgICAgPGkgY2xhc3M9XCJpY29uIHVzZXIgcGx1cyBtci0wXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgIDwvZGl2PlxuICAgIDxsaWItZGlhbGNvZGUgKm5nSWY9XCJ2aXNpYmlsaXR5ICYmIHZpc2liaWxpdHk/LmRpYWxjb2RlICYmIGxhYmVsQ29uZmlnRGF0YT8uc2hvd0RpYWxjb2RlID09PSAneWVzJ1wiIGNsYXNzPVwiZC1mbGV4IGZsZXgtYWktY2VudGVyXCI+PC9saWItZGlhbGNvZGU+XG4gICAgPGJ1dHRvbiAqbmdJZj1cInZpc2liaWxpdHkgJiYgdmlzaWJpbGl0eT8uc3VibWl0Q29udGVudCAmJiAhYnVsa1VwbG9hZFN0YXR1cyAmJiBsYWJlbENvbmZpZ0RhdGE/Lmhhc0NoaWxkcmVuICYmICF2aXNpYmlsaXR5LmhpZGVTdWJtaXRGb3JSZXZpZXdCdG4gJiYgdmlzaWJpbGl0eS5zaG93UGFnaW5hdGlvbkJ0blwiXG4gICAgY2xhc3M9XCJzYi1idG4gc2ItYnRuLW5vcm1hbCBzYi1idG4tcHJpbWFyeSBtci0xMFwiIChjbGljayk9XCJidXR0b25FbWl0dGVyKHt0eXBlOidwYWdpbmF0aW9uJ30pXCIgbGliVGVsZW1ldHJ5SW50ZXJhY3RcbiAgICBbdGVsZW1ldHJ5SW50ZXJhY3RFZGF0YV09XCJ0ZWxlbWV0cnlTZXJ2aWNlLmdldFRlbGVtZXRyeUludGVyYWN0RWRhdGEoJ3N1Ym1pdCcsJ2NsaWNrJywnc3VibWl0JywgdGVsZW1ldHJ5U2VydmljZS50ZWxlbWV0cnlQYWdlSWQpXCJcbiAgICA+XG4gICAgICA8ZW0gY2xhc3M9XCJ7e2xhYmVsQ29uZmlnRGF0YS5zdWJtaXRfY29sbGVjdGlvbl9idG5faWNvbn19XCI+PC9lbT5cbiAgICAgIHt7bGFiZWxDb25maWdEYXRhLmFkZF9wYWdlX251bWJlcnNfdG9fcXVlc3Rpb25zX2J0bl9sYWJlbH19XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiAqbmdJZj1cInZpc2liaWxpdHkgJiYgdmlzaWJpbGl0eT8uc3VibWl0Q29udGVudCAmJiAhYnVsa1VwbG9hZFN0YXR1cyAmJiBsYWJlbENvbmZpZ0RhdGE/Lmhhc0NoaWxkcmVuICYmICF2aXNpYmlsaXR5LmhpZGVTdWJtaXRGb3JSZXZpZXdCdG4gJiYgdmlzaWJpbGl0eS5zaG93UGFnaW5hdGlvbkJ0blwiXG4gICAgY2xhc3M9XCJzYi1idG4gc2ItYnRuLW5vcm1hbCBzYi1idG4tcHJpbWFyeSBtci0xMFwiIChjbGljayk9XCJidXR0b25FbWl0dGVyKHt0eXBlOidwcm9ncmVzc1N0YXR1cyd9KVwiIGxpYlRlbGVtZXRyeUludGVyYWN0XG4gICAgW3RlbGVtZXRyeUludGVyYWN0RWRhdGFdPVwidGVsZW1ldHJ5U2VydmljZS5nZXRUZWxlbWV0cnlJbnRlcmFjdEVkYXRhKCdzdWJtaXQnLCdjbGljaycsJ3N1Ym1pdCcsIHRlbGVtZXRyeVNlcnZpY2UudGVsZW1ldHJ5UGFnZUlkKVwiXG4gICAgPlxuICAgICAgPGVtIGNsYXNzPVwie3tsYWJlbENvbmZpZ0RhdGEuc3VibWl0X2NvbGxlY3Rpb25fYnRuX2ljb259fVwiPjwvZW0+XG4gICAgICBQcm9ncmVzc1xuICAgIDwvYnV0dG9uPlxuICAgIDxsaWItYnVsay11cGxvYWQgKm5nSWY9XCJ2aXNpYmlsaXR5ICYmIHZpc2liaWxpdHk/LmJ1bGtVcGxvYWQgJiYgbGFiZWxDb25maWdEYXRhPy5zaG93QnVsa1VwbG9hZEJ0blwiIGNsYXNzPVwiZC1mbGV4IGZsZXgtYWktY2VudGVyIG1yLTEwXCIgKGJ1bGtVcGxvYWRFbWl0dGVyKT1cImJ1bGtVcGxvYWRMaXN0ZW5lcigkZXZlbnQpXCIgPjwvbGliLWJ1bGstdXBsb2FkPlxuICAgIDxidXR0b24gKm5nSWY9XCJ2aXNpYmlsaXR5ICYmIHZpc2liaWxpdHk/LnByZXZpZXdDb250ZW50ICAmJiBsYWJlbENvbmZpZ0RhdGE/Lmhhc0NoaWxkcmVuICYmICFidWxrVXBsb2FkU3RhdHVzXCIgY2xhc3M9XCJzYi1idG4gc2ItYnRuLW5vcm1hbCBzYi1idG4tb3V0bGluZS1wcmltYXJ5IG1yLTEwXCJcbiAgICAgIFtuZ0NsYXNzXT1cIiFidXR0b25Mb2FkZXJzPy5wcmV2aWV3QnV0dG9uTG9hZGVyID8gJyc6ICdzYi1idG4tbG9hZGluZy1zcGlubmVyIHNiLWJ0bi1vdXRsaW5lLWRpc2FibGVkJ1wiXG4gICAgICAoY2xpY2spPVwiYnV0dG9uRW1pdHRlcih7dHlwZTogJ3ByZXZpZXdDb250ZW50J30pXCIgbGliVGVsZW1ldHJ5SW50ZXJhY3RcbiAgICAgIFt0ZWxlbWV0cnlJbnRlcmFjdEVkYXRhXT1cInRlbGVtZXRyeVNlcnZpY2UuZ2V0VGVsZW1ldHJ5SW50ZXJhY3RFZGF0YSgncHJldmlldycsJ2NsaWNrJywnbGF1bmNoJywgdGVsZW1ldHJ5U2VydmljZS50ZWxlbWV0cnlQYWdlSWQpXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwic2ItbG9hZGluZy1zcGlubmVyXCIgKm5nSWY9XCJidXR0b25Mb2FkZXJzPy5wcmV2aWV3QnV0dG9uTG9hZGVyXCIgcm9sZT1cInN0YXR1c1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvZGl2PlxuICAgICAgPGkgKm5nSWY9XCJsYWJlbENvbmZpZ0RhdGEucHJldmlld19jb2xsZWN0aW9uX2J0bl9pY29uICYmICFidXR0b25Mb2FkZXJzPy5wcmV2aWV3QnV0dG9uTG9hZGVyXCIgY2xhc3M9XCJ7e2xhYmVsQ29uZmlnRGF0YS5wcmV2aWV3X2NvbGxlY3Rpb25fYnRuX2ljb259fVwiPjwvaT5cbiAgICAgIHt7IGxhYmVsQ29uZmlnRGF0YS5wcmV2aWV3X2NvbGxlY3Rpb25fYnRuX2xhYmVsfX1cbiAgICA8L2J1dHRvbj5cblxuICAgIDxidXR0b24gKm5nSWY9XCJ2aXNpYmlsaXR5ICYmIHZpc2liaWxpdHk/LnNhdmVDb250ZW50XCIgY2xhc3M9XCJzYi1idG4gc2ItYnRuLW5vcm1hbCBzYi1idG4tb3V0bGluZS1wcmltYXJ5IG1yLTEwXCJcbiAgICBbbmdDbGFzc109XCIhYnV0dG9uTG9hZGVycz8uc2F2ZUFzRHJhZnRCdXR0b25Mb2FkZXIgPyAnJzogJ3NiLWJ0bi1sb2FkaW5nLXNwaW5uZXIgc2ItYnRuLW91dGxpbmUtZGlzYWJsZWQnXCJcbiAgICAoY2xpY2spPVwiYnV0dG9uRW1pdHRlcih7dHlwZTonc2F2ZUNvbnRlbnQnfSlcIiBsaWJUZWxlbWV0cnlJbnRlcmFjdFxuICAgIFt0ZWxlbWV0cnlJbnRlcmFjdEVkYXRhXT1cInRlbGVtZXRyeVNlcnZpY2UuZ2V0VGVsZW1ldHJ5SW50ZXJhY3RFZGF0YSgnc2F2ZV9hc19kcmFmdCcsJ2NsaWNrJywnc3VibWl0JywgdGVsZW1ldHJ5U2VydmljZS50ZWxlbWV0cnlQYWdlSWQpXCJcbiAgICA+XG4gICAgICA8aSBjbGFzcz1cInt7bGFiZWxDb25maWdEYXRhLnNhdmVfY29sbGVjdGlvbl9idG5faWNvbn19XCIgKm5nSWY9XCIhYnV0dG9uTG9hZGVycz8uc2F2ZUFzRHJhZnRCdXR0b25Mb2FkZXJcIj48L2k+XG4gICAgICA8ZGl2IGNsYXNzPVwic2ItbG9hZGluZy1zcGlubmVyXCIgKm5nSWY9XCJidXR0b25Mb2FkZXJzPy5zYXZlQXNEcmFmdEJ1dHRvbkxvYWRlclwiIHJvbGU9XCJzdGF0dXNcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2Rpdj5cbiAgICAgIHt7bGFiZWxDb25maWdEYXRhLnNhdmVfY29sbGVjdGlvbl9idG5fbGFiZWx9fVxuICAgIDwvYnV0dG9uPlxuXG4gICAgPGJ1dHRvbiAqbmdJZj1cInZpc2liaWxpdHkgJiYgdmlzaWJpbGl0eT8uc3VibWl0Q29udGVudCAmJiBsYWJlbENvbmZpZ0RhdGE/Lmhhc0NoaWxkcmVuICYmICF2aXNpYmlsaXR5LmhpZGVTdWJtaXRGb3JSZXZpZXdCdG5cIiBjbGFzcz1cInNiLWJ0biBzYi1idG4tbm9ybWFsIHNiLWJ0bi1wcmltYXJ5IG1yLTEwXCIgKGNsaWNrKT1cImJ1dHRvbkVtaXR0ZXIoe3R5cGU6J3N1Ym1pdENvbnRlbnQnfSlcIiBsaWJUZWxlbWV0cnlJbnRlcmFjdFxuICAgIFt0ZWxlbWV0cnlJbnRlcmFjdEVkYXRhXT1cInRlbGVtZXRyeVNlcnZpY2UuZ2V0VGVsZW1ldHJ5SW50ZXJhY3RFZGF0YSgnc3VibWl0JywnY2xpY2snLCdzdWJtaXQnLCB0ZWxlbWV0cnlTZXJ2aWNlLnRlbGVtZXRyeVBhZ2VJZClcIlxuICAgID5cbiAgICAgIDxpIGNsYXNzPVwie3tsYWJlbENvbmZpZ0RhdGEuc3VibWl0X2NvbGxlY3Rpb25fYnRuX2ljb259fVwiPjwvaT4gXG4gICAgICB7e2xhYmVsQ29uZmlnRGF0YS5zdWJtaXRfY29sbGVjdGlvbl9idG5fbGFiZWx9fVxuICAgIDwvYnV0dG9uPlxuXG4gICAgPGJ1dHRvbiAqbmdJZj1cInZpc2liaWxpdHkgJiYgdmlzaWJpbGl0eT8ucmVqZWN0Q29udGVudFwiIGNsYXNzPVwic2ItYnRuIHNiLWJ0bi1vdXRsaW5lLWVycm9yIHNiLWJ0bi1ub3JtYWwgcmlwcGxlIG1yLTEwXCIgKGNsaWNrKT1cIm9wZW5SZXF1ZXN0Q2hhbmdlUG9wdXAoJ3JlamVjdENvbnRlbnQnKVwiIGxpYlRlbGVtZXRyeUludGVyYWN0XG4gICAgW3RlbGVtZXRyeUludGVyYWN0RWRhdGFdPVwidGVsZW1ldHJ5U2VydmljZS5nZXRUZWxlbWV0cnlJbnRlcmFjdEVkYXRhKCdyZWplY3QnLCdjbGljaycsJ3N1Ym1pdCcsIHRlbGVtZXRyeVNlcnZpY2UudGVsZW1ldHJ5UGFnZUlkKVwiPlxuICAgICAgPGkgY2xhc3M9XCJ7e2xhYmVsQ29uZmlnRGF0YS5yZWplY3RfY29sbGVjdGlvbl9idG5faWNvbn19XCI+PC9pPiBcbiAgICAgIHt7bGFiZWxDb25maWdEYXRhLnJlamVjdF9jb2xsZWN0aW9uX2J0bl9sYWJlbH19XG4gICAgPC9idXR0b24+XG5cbiAgICA8YnV0dG9uICpuZ0lmPVwidmlzaWJpbGl0eSAmJiB2aXNpYmlsaXR5Py5wdWJsaXNoQ29udGVudFwiIGNsYXNzPVwic2ItYnRuIHNiLWJ0bi1zZWNvbmRhcnkgc2ItYnRuLW5vcm1hbCByaXBwbGVcIiAoY2xpY2spPVwib3BlblB1Ymxpc2hDaGVja0xpc3RQb3B1cCgncHVibGlzaENvbnRlbnQnKVwiIGxpYlRlbGVtZXRyeUludGVyYWN0XG4gICAgW3RlbGVtZXRyeUludGVyYWN0RWRhdGFdPVwidGVsZW1ldHJ5U2VydmljZS5nZXRUZWxlbWV0cnlJbnRlcmFjdEVkYXRhKCdwdWJsaXNoJywnY2xpY2snLCdzdWJtaXQnLCB0ZWxlbWV0cnlTZXJ2aWNlLnRlbGVtZXRyeVBhZ2VJZClcIj5cbiAgICAgIDxpIGNsYXNzPVwie3tsYWJlbENvbmZpZ0RhdGEucHVibGlzaF9jb2xsZWN0aW9uX2J0bl9pY29ufX1cIj48L2k+IFxuICAgICAge3tsYWJlbENvbmZpZ0RhdGEucHVibGlzaF9jb2xsZWN0aW9uX2J0bl9sYWJlbH19XG4gICAgPC9idXR0b24+XG5cbiAgICA8YnV0dG9uICpuZ0lmPVwidmlzaWJpbGl0eSAmJiB2aXNpYmlsaXR5Py5zZW5kRm9yQ29ycmVjdGlvbnNDb250ZW50XCIgY2xhc3M9XCJzYi1idG4gc2ItYnRuLW91dGxpbmUtcHJpbWFyeSBzYi1idG4tbm9ybWFsIHJpcHBsZSBtci0xMFwiIChjbGljayk9XCJvcGVuUmVxdWVzdENoYW5nZVBvcHVwKCdzZW5kRm9yQ29ycmVjdGlvbnMnKVwiIGxpYlRlbGVtZXRyeUludGVyYWN0XG4gICAgW3RlbGVtZXRyeUludGVyYWN0RWRhdGFdPVwidGVsZW1ldHJ5U2VydmljZS5nZXRUZWxlbWV0cnlJbnRlcmFjdEVkYXRhKCdzZW5kX2JhY2tfZm9yX2NvcnJlY3Rpb24nLCdjbGljaycsJ3N1Ym1pdCcsIHRlbGVtZXRyeVNlcnZpY2UudGVsZW1ldHJ5UGFnZUlkKVwiPlxuICAgICAgPGkgY2xhc3M9XCJ7e2xhYmVsQ29uZmlnRGF0YS5zZW5kX2JhY2tfZm9yX2NvcnJlY3Rpb25fY29sbGVjdGlvbl9idG5faWNvbn19XCI+PC9pPiBcbiAgICAgIHt7bGFiZWxDb25maWdEYXRhLnNlbmRfYmFja19mb3JfY29ycmVjdGlvbl9jb2xsZWN0aW9uX2J0bl9sYWJlbH19XG4gICAgPC9idXR0b24+XG5cbiAgICA8YnV0dG9uICpuZ0lmPVwidmlzaWJpbGl0eSAmJiB2aXNpYmlsaXR5Py5zb3VyY2luZ0FwcHJvdmVDb250ZW50XCIgY2xhc3M9XCJzYi1idG4gc2ItYnRuLXNlY29uZGFyeSBzYi1idG4tbm9ybWFsIHJpcHBsZSBtci0xMFwiIChjbGljayk9XCJvcGVuUHVibGlzaENoZWNrTGlzdFBvcHVwKCdzb3VyY2luZ0FwcHJvdmUnKVwiIGxpYlRlbGVtZXRyeUludGVyYWN0XG4gICAgW3RlbGVtZXRyeUludGVyYWN0RWRhdGFdPVwidGVsZW1ldHJ5U2VydmljZS5nZXRUZWxlbWV0cnlJbnRlcmFjdEVkYXRhKCdhcHByb3ZlJywnY2xpY2snLCdzdWJtaXQnLCB0ZWxlbWV0cnlTZXJ2aWNlLnRlbGVtZXRyeVBhZ2VJZClcIj5cbiAgICAgIDxpIGNsYXNzPVwie3tsYWJlbENvbmZpZ0RhdGEuc291cmNpbmdfYXBwcm92ZV9jb2xsZWN0aW9uX2J0bl9pY29ufX1cIj48L2k+IFxuICAgICAge3tsYWJlbENvbmZpZ0RhdGEuc291cmNpbmdfYXBwcm92ZV9jb2xsZWN0aW9uX2J0bl9sYWJlbH19XG4gICAgPC9idXR0b24+XG5cbiAgICA8YnV0dG9uICpuZ0lmPVwidmlzaWJpbGl0eSAmJiB2aXNpYmlsaXR5Py5zb3VyY2luZ1JlamVjdENvbnRlbnRcIiBjbGFzcz1cInNiLWJ0biBzYi1idG4tZXJyb3Igc2ItYnRuLW5vcm1hbCByaXBwbGVcIiAoY2xpY2spPVwib3BlblJlcXVlc3RDaGFuZ2VQb3B1cCgnc291cmNpbmdSZWplY3QnKVwiIGxpYlRlbGVtZXRyeUludGVyYWN0XG4gICAgW3RlbGVtZXRyeUludGVyYWN0RWRhdGFdPVwidGVsZW1ldHJ5U2VydmljZS5nZXRUZWxlbWV0cnlJbnRlcmFjdEVkYXRhKCdyZWplY3QnLCdjbGljaycsJ3N1Ym1pdCcsIHRlbGVtZXRyeVNlcnZpY2UudGVsZW1ldHJ5UGFnZUlkKVwiPlxuICAgICAgPGkgY2xhc3M9XCJ7e2xhYmVsQ29uZmlnRGF0YS5zb3VyY2luZ19yZWplY3RfY29sbGVjdGlvbl9idG5faWNvbn19XCI+PC9pPiBcbiAgICAgIHt7bGFiZWxDb25maWdEYXRhLnNvdXJjaW5nX3JlamVjdF9jb2xsZWN0aW9uX2J0bl9sYWJlbH19XG4gICAgPC9idXR0b24+XG5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1haS1jZW50ZXJcIiAqbmdJZj1cInBhZ2VJZCA9PT0gJ3F1ZXN0aW9uJyAmJiBsYWJlbENvbmZpZ0RhdGFcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibGFiZWxDb25maWdEYXRhLnNob3dQcmV2aWV3OyBlbHNlIGVkaXRNb2RlXCI+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwic2ItYnRuIHNiLWJ0bi1ub3JtYWwgc2ItYnRuLW91dGxpbmUtcHJpbWFyeSBtci0xMFwiICpuZ0lmPVwidmlzaWJpbGl0eSAmJiB2aXNpYmlsaXR5Py5lZGl0Q29udGVudFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJidXR0b25FbWl0dGVyKHt0eXBlOiAnZWRpdENvbnRlbnQnfSlcIiBsaWJUZWxlbWV0cnlJbnRlcmFjdFxuICAgICAgICAgICAgICBbdGVsZW1ldHJ5SW50ZXJhY3RFZGF0YV09XCJ0ZWxlbWV0cnlTZXJ2aWNlLmdldFRlbGVtZXRyeUludGVyYWN0RWRhdGEoJ2VkaXQnLCdjbGljaycsJ2xhdW5jaCcsIHRlbGVtZXRyeVNlcnZpY2UudGVsZW1ldHJ5UGFnZUlkKVwiPlxuICAgICAgICA8aSAqbmdJZj1cImxhYmVsQ29uZmlnRGF0YS5lZGl0X3F1ZXN0aW9uX2J0bl9pY29uXCIgY2xhc3M9XCJ7e2xhYmVsQ29uZmlnRGF0YS5lZGl0X3F1ZXN0aW9uX2J0bl9pY29ufX1cIj48L2k+XG4gICAgICAgIHt7IGxhYmVsQ29uZmlnRGF0YS5lZGl0X3F1ZXN0aW9uX2J0bl9sYWJlbH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctdGVtcGxhdGUgI2VkaXRNb2RlPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cInNiLWJ0biBzYi1idG4tbm9ybWFsIHNiLWJ0bi1vdXRsaW5lLXByaW1hcnkgbXItMTBcIiAqbmdJZj1cIiFsYWJlbENvbmZpZ0RhdGEuc2hvd1ByZXZpZXdcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCIhYnV0dG9uTG9hZGVycz8ucHJldmlld0J1dHRvbkxvYWRlciA/ICcnOiAnc2ItYnRuLWxvYWRpbmctc3Bpbm5lciBzYi1idG4tb3V0bGluZS1kaXNhYmxlZCdcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYnV0dG9uRW1pdHRlcih7dHlwZTogJ3ByZXZpZXdDb250ZW50J30pXCIgbGliVGVsZW1ldHJ5SW50ZXJhY3RcbiAgICAgICAgICAgICAgW3RlbGVtZXRyeUludGVyYWN0RWRhdGFdPVwidGVsZW1ldHJ5U2VydmljZS5nZXRUZWxlbWV0cnlJbnRlcmFjdEVkYXRhKCdwcmV2aWV3JywnY2xpY2snLCdsYXVuY2gnLCB0ZWxlbWV0cnlTZXJ2aWNlLnRlbGVtZXRyeVBhZ2VJZClcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNiLWxvYWRpbmctc3Bpbm5lclwiICpuZ0lmPVwiYnV0dG9uTG9hZGVycz8ucHJldmlld0J1dHRvbkxvYWRlclwiIHJvbGU9XCJzdGF0dXNcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2Rpdj5cbiAgICAgICAgPGkgKm5nSWY9XCJsYWJlbENvbmZpZ0RhdGEucHJldmlld19xdWVzdGlvbl9idG5faWNvbiAmJiAhYnV0dG9uTG9hZGVycz8ucHJldmlld0J1dHRvbkxvYWRlclwiIGNsYXNzPVwie3tsYWJlbENvbmZpZ0RhdGEucHJldmlld19xdWVzdGlvbl9idG5faWNvbn19XCI+PC9pPlxuICAgICAgICB7eyBsYWJlbENvbmZpZ0RhdGEucHJldmlld19xdWVzdGlvbl9idG5fbGFiZWx9fVxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwic2ItYnRuIHNiLWJ0bi1ub3JtYWwgc2ItYnRuLW91dGxpbmUtcHJpbWFyeSBtci0xMFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJidXR0b25FbWl0dGVyKHt0eXBlOiAnY2FuY2VsQ29udGVudCd9KVwiIGxpYlRlbGVtZXRyeUludGVyYWN0ICpuZ0lmPVwidmlzaWJpbGl0eT8uc2F2ZUNvbnRlbnRcIlxuICAgICAgICAgICAgICBbdGVsZW1ldHJ5SW50ZXJhY3RFZGF0YV09XCJ0ZWxlbWV0cnlTZXJ2aWNlLmdldFRlbGVtZXRyeUludGVyYWN0RWRhdGEoJ2NhbmNlbCcsJ2NsaWNrJywnbGF1bmNoJywgdGVsZW1ldHJ5U2VydmljZS50ZWxlbWV0cnlQYWdlSWQpXCI+XG4gICAgICAgIDxpICpuZ0lmPVwibGFiZWxDb25maWdEYXRhLmNhbmNlbF9xdWVzdGlvbl9idG5faWNvblwiIGNsYXNzPVwie3tsYWJlbENvbmZpZ0RhdGEuY2FuY2VsX3F1ZXN0aW9uX2J0bl9pY29ufX1cIj48L2k+XG4gICAgICAgIHt7IGxhYmVsQ29uZmlnRGF0YS5jYW5jZWxfcXVlc3Rpb25fYnRuX2xhYmVsfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cInNiLWJ0biBzYi1idG4tbm9ybWFsIHNiLWJ0bi1wcmltYXJ5IG1yLTEwXCIgKGNsaWNrKT1cImJ1dHRvbkVtaXR0ZXIoe3R5cGU6ICdzYXZlQ29udGVudCd9KVwiICpuZ0lmPVwidmlzaWJpbGl0eT8uc2F2ZUNvbnRlbnRcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCIhYnV0dG9uTG9hZGVycz8uc2F2ZUJ1dHRvbkxvYWRlciA/ICcnOiAnc2ItYnRuLWxvYWRpbmctc3Bpbm5lciBzYi1idG4tb3V0bGluZS1kaXNhYmxlZCdcIlxuICAgICAgICAgICAgICBsaWJUZWxlbWV0cnlJbnRlcmFjdFxuICAgICAgICAgICAgICBbdGVsZW1ldHJ5SW50ZXJhY3RFZGF0YV09XCJ0ZWxlbWV0cnlTZXJ2aWNlLmdldFRlbGVtZXRyeUludGVyYWN0RWRhdGEoJ3NhdmUnLCdjbGljaycsJ3N1Ym1pdCcsIHRlbGVtZXRyeVNlcnZpY2UudGVsZW1ldHJ5UGFnZUlkKVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2ItbG9hZGluZy1zcGlubmVyXCIgKm5nSWY9XCJidXR0b25Mb2FkZXJzPy5zYXZlQnV0dG9uTG9hZGVyXCIgcm9sZT1cInN0YXR1c1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvZGl2PlxuICAgICAgICA8aSAqbmdJZj1cImxhYmVsQ29uZmlnRGF0YS5zYXZlX3F1ZXN0aW9uX2J0bl9pY29uICYmICFidXR0b25Mb2FkZXJzPy5zYXZlQnV0dG9uTG9hZGVyXCIgY2xhc3M9XCJ7e2xhYmVsQ29uZmlnRGF0YS5zYXZlX3F1ZXN0aW9uX2J0bl9pY29ufX1cIj48L2k+XG4gICAgICAgIHt7IGxhYmVsQ29uZmlnRGF0YS5zYXZlX3F1ZXN0aW9uX2J0bl9sYWJlbH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPCEtLSA8YnV0dG9uICpuZ0lmPVwibGFiZWxDb25maWdEYXRhLmFkZF90cmFuc2xhdGlvblwiIGNsYXNzPVwic2ItYnRuIHNiLWJ0bi1ub3JtYWwgc2ItYnRuLW91dGxpbmUtcHJpbWFyeSBtci0xMFwiXG4gICAgKGNsaWNrKT1cImJ1dHRvbkVtaXR0ZXIoe3R5cGU6ICdzaG93VHJhbnNsYXRpb24nfSlcIj5cbiAgICA8aSBjbGFzcz1cInBsdXMgY2lyY2xlIGljb25cIj48L2k+XG4gICAge3sgbGFiZWxDb25maWdEYXRhLmFkZF90cmFuc2xhdGlvbl9sYWJlbH19XG4gICAgPC9idXR0b24+IC0tPlxuICAgIDxidXR0b24gKm5nSWY9XCJ2aXNpYmlsaXR5ICYmIHZpc2liaWxpdHk/LnN1Ym1pdENvbnRlbnQgJiYgbGFiZWxDb25maWdEYXRhPy5xdWVzdGlvbkNvbnRyaWJ1dGlvbiAmJiAhdmlzaWJpbGl0eS5oaWRlU3VibWl0Rm9yUmV2aWV3QnRuICYmICF2aXNpYmlsaXR5LnNob3dTb3VyY2luZ1N0YXR1c1wiIGNsYXNzPVwic2ItYnRuIHNiLWJ0bi1ub3JtYWwgc2ItYnRuLXNlY29uZGFyeVwiIChjbGljayk9XCJidXR0b25FbWl0dGVyKHt0eXBlOidzdWJtaXRRdWVzdGlvbid9KVwiIGxpYlRlbGVtZXRyeUludGVyYWN0XG4gICAgW3RlbGVtZXRyeUludGVyYWN0RWRhdGFdPVwidGVsZW1ldHJ5U2VydmljZS5nZXRUZWxlbWV0cnlJbnRlcmFjdEVkYXRhKCdzdWJtaXQnLCdjbGljaycsJ3N1Ym1pdCcsIHRlbGVtZXRyeVNlcnZpY2UudGVsZW1ldHJ5UGFnZUlkKVwiXG4gICAgPlxuICAgICAgPGkgY2xhc3M9XCJ7e2xhYmVsQ29uZmlnRGF0YS5zdWJtaXRfY29sbGVjdGlvbl9idG5faWNvbn19XCI+PC9pPlxuICAgICAge3tsYWJlbENvbmZpZ0RhdGEuc3VibWl0X2NvbGxlY3Rpb25fYnRuX2xhYmVsfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uICpuZ0lmPVwidmlzaWJpbGl0eSAmJiB2aXNpYmlsaXR5Py5yZWplY3RDb250ZW50ICYmIGxhYmVsQ29uZmlnRGF0YT8ucXVlc3Rpb25Db250cmlidXRpb25cIiBjbGFzcz1cInNiLWJ0biBzYi1idG4tb3V0bGluZS1lcnJvciBzYi1idG4tbm9ybWFsIHJpcHBsZSBtci0xMFwiIChjbGljayk9XCJvcGVuUmVxdWVzdENoYW5nZVBvcHVwKCdyZWplY3RRdWVzdGlvbicpXCIgbGliVGVsZW1ldHJ5SW50ZXJhY3RcbiAgICBbdGVsZW1ldHJ5SW50ZXJhY3RFZGF0YV09XCJ0ZWxlbWV0cnlTZXJ2aWNlLmdldFRlbGVtZXRyeUludGVyYWN0RWRhdGEoJ3JlamVjdCcsJ2NsaWNrJywnc3VibWl0JywgdGVsZW1ldHJ5U2VydmljZS50ZWxlbWV0cnlQYWdlSWQpXCI+XG4gICAgICA8aSBjbGFzcz1cInt7bGFiZWxDb25maWdEYXRhLnJlamVjdF9jb2xsZWN0aW9uX2J0bl9pY29ufX1cIj48L2k+XG4gICAgICB7e2xhYmVsQ29uZmlnRGF0YS5yZWplY3RfY29sbGVjdGlvbl9idG5fbGFiZWx9fVxuICAgIDwvYnV0dG9uPlxuXG4gICAgPGJ1dHRvbiAqbmdJZj1cInZpc2liaWxpdHkgJiYgdmlzaWJpbGl0eT8ucHVibGlzaENvbnRlbnQgJiYgbGFiZWxDb25maWdEYXRhPy5xdWVzdGlvbkNvbnRyaWJ1dGlvblwiIGNsYXNzPVwic2ItYnRuIHNiLWJ0bi1zZWNvbmRhcnkgc2ItYnRuLW5vcm1hbCByaXBwbGVcIiAoY2xpY2spPVwiZmlyc3RMZXZlbFB1Ymxpc2goKVwiIGxpYlRlbGVtZXRyeUludGVyYWN0XG4gICAgW3RlbGVtZXRyeUludGVyYWN0RWRhdGFdPVwidGVsZW1ldHJ5U2VydmljZS5nZXRUZWxlbWV0cnlJbnRlcmFjdEVkYXRhKCdwdWJsaXNoJywnY2xpY2snLCdzdWJtaXQnLCB0ZWxlbWV0cnlTZXJ2aWNlLnRlbGVtZXRyeVBhZ2VJZClcIj5cbiAgICAgIDxpIGNsYXNzPVwie3tsYWJlbENvbmZpZ0RhdGEucHVibGlzaF9jb2xsZWN0aW9uX2J0bl9pY29ufX1cIj48L2k+XG4gICAgICB7e2xhYmVsQ29uZmlnRGF0YS5wdWJsaXNoX2NvbGxlY3Rpb25fYnRuX2xhYmVsfX1cbiAgICA8L2J1dHRvbj5cblxuICAgIDxidXR0b24gKm5nSWY9XCJ2aXNpYmlsaXR5ICYmIHZpc2liaWxpdHk/LnNlbmRGb3JDb3JyZWN0aW9uc0NvbnRlbnRcIiBjbGFzcz1cInNiLWJ0biBzYi1idG4tb3V0bGluZS1wcmltYXJ5IHNiLWJ0bi1ub3JtYWwgcmlwcGxlIG1yLTEwXCIgKGNsaWNrKT1cIm9wZW5SZXF1ZXN0Q2hhbmdlUG9wdXAoJ3NlbmRGb3JDb3JyZWN0aW9uc1F1ZXN0aW9uJylcIiBsaWJUZWxlbWV0cnlJbnRlcmFjdFxuICAgIFt0ZWxlbWV0cnlJbnRlcmFjdEVkYXRhXT1cInRlbGVtZXRyeVNlcnZpY2UuZ2V0VGVsZW1ldHJ5SW50ZXJhY3RFZGF0YSgnc2VuZF9iYWNrX2Zvcl9jb3JyZWN0aW9uX3F1ZXN0aW9uJywnY2xpY2snLCdzdWJtaXQnLCB0ZWxlbWV0cnlTZXJ2aWNlLnRlbGVtZXRyeVBhZ2VJZClcIj5cbiAgICAgIDxpIGNsYXNzPVwie3tsYWJlbENvbmZpZ0RhdGEuc2VuZF9iYWNrX2Zvcl9jb3JyZWN0aW9uX2NvbGxlY3Rpb25fYnRuX2ljb259fVwiPjwvaT5cbiAgICAgIHt7bGFiZWxDb25maWdEYXRhLnNlbmRfYmFja19mb3JfY29ycmVjdGlvbl9jb2xsZWN0aW9uX2J0bl9sYWJlbH19XG4gICAgPC9idXR0b24+XG5cbiAgICA8YnV0dG9uICpuZ0lmPVwidmlzaWJpbGl0eSAmJiB2aXNpYmlsaXR5Py5zb3VyY2luZ0FwcHJvdmVDb250ZW50XCIgY2xhc3M9XCJzYi1idG4gc2ItYnRuLXNlY29uZGFyeSBzYi1idG4tbm9ybWFsIHJpcHBsZSBtci0xMFwiIChjbGljayk9XCJvcGVuUHVibGlzaENoZWNrTGlzdFBvcHVwKCdzb3VyY2luZ0FwcHJvdmVRdWVzdGlvbicpXCIgbGliVGVsZW1ldHJ5SW50ZXJhY3RcbiAgICBbdGVsZW1ldHJ5SW50ZXJhY3RFZGF0YV09XCJ0ZWxlbWV0cnlTZXJ2aWNlLmdldFRlbGVtZXRyeUludGVyYWN0RWRhdGEoJ2FwcHJvdmUnLCdjbGljaycsJ3N1Ym1pdCcsIHRlbGVtZXRyeVNlcnZpY2UudGVsZW1ldHJ5UGFnZUlkKVwiPlxuICAgICAgPGkgY2xhc3M9XCJ7e2xhYmVsQ29uZmlnRGF0YS5zb3VyY2luZ19hcHByb3ZlX2NvbGxlY3Rpb25fYnRuX2ljb259fVwiPjwvaT5cbiAgICAgIHt7bGFiZWxDb25maWdEYXRhLnNvdXJjaW5nX2FwcHJvdmVfY29sbGVjdGlvbl9idG5fbGFiZWx9fVxuICAgIDwvYnV0dG9uPlxuXG4gICAgPGJ1dHRvbiAqbmdJZj1cInZpc2liaWxpdHkgJiYgdmlzaWJpbGl0eT8uc291cmNpbmdSZWplY3RDb250ZW50XCIgY2xhc3M9XCJzYi1idG4gc2ItYnRuLWVycm9yIHNiLWJ0bi1ub3JtYWwgcmlwcGxlXCIgKGNsaWNrKT1cIm9wZW5SZXF1ZXN0Q2hhbmdlUG9wdXAoJ3NvdXJjaW5nUmVqZWN0UXVlc3Rpb24nKVwiIGxpYlRlbGVtZXRyeUludGVyYWN0XG4gICAgW3RlbGVtZXRyeUludGVyYWN0RWRhdGFdPVwidGVsZW1ldHJ5U2VydmljZS5nZXRUZWxlbWV0cnlJbnRlcmFjdEVkYXRhKCdyZWplY3QnLCdjbGljaycsJ3N1Ym1pdCcsIHRlbGVtZXRyeVNlcnZpY2UudGVsZW1ldHJ5UGFnZUlkKVwiPlxuICAgICAgPGkgY2xhc3M9XCJ7e2xhYmVsQ29uZmlnRGF0YS5zb3VyY2luZ19yZWplY3RfY29sbGVjdGlvbl9idG5faWNvbn19XCI+PC9pPlxuICAgICAge3tsYWJlbENvbmZpZ0RhdGEuc291cmNpbmdfcmVqZWN0X2NvbGxlY3Rpb25fYnRuX2xhYmVsfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbjwvZGl2PlxuXG48c3VpLW1vZGFsICpuZ0lmPVwic2hvd1JlcXVlc3RDaGFuZ2VzUG9wdXBcIiBbbXVzdFNjcm9sbF09XCJ0cnVlXCIgW2lzQ2xvc2FibGVdPVwiZmFsc2VcIiBbdHJhbnNpdGlvbkR1cmF0aW9uXT1cIjBcIlxuICBbc2l6ZV09XCInbm9ybWFsJ1wiIGNsYXNzPVwic2ItbW9kYWwgYngtbm9uZSBvdmVyZmxvdy1tb2RhbFwiIGFwcEJvZHlTY3JvbGwgI21vZGFsIChkaXNtaXNzZWQpPVwic2hvd1JlcXVlc3RDaGFuZ2VzUG9wdXAgPSBmYWxzZTtcIj5cbiAgPGRpdiBjbGFzcz1cInNiLW1vZGFsLWhlYWRlclwiPlxuICAgICAge3tjb25maWdTZXJ2aWNlLmxhYmVsQ29uZmlnPy5sYmw/LmFkZFJldmlld0NvbW1lbnRzfX1cbiAgPC9kaXY+XG4gIDxmb3JtICNGb3JtQ29udHJvbD1cIm5nRm9ybVwiIGNsYXNzPVwidWkgZm9ybVwiPlxuICA8ZGl2IGNsYXNzPVwic2ItbW9kYWwtY29udGVudFwiPlxuICAgICAgPGRpdiBjbGFzcz1cInNiLWZpZWxkLWdyb3VwXCI+XG4gICAgICAgICAgPGxhYmVsPnt7Y29uZmlnU2VydmljZS5sYWJlbENvbmZpZz8ubGJsPy5lbnRlcllvdXJDb21tZW50c319PC9sYWJlbD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2ItZmllbGQgcmVsYXRpdmVcIj5cblxuICAgICAgICAgICAgICA8dGV4dGFyZWEgdHlwZT1cInRleHRcIiBjbGFzcz1cIndtZC1pbnB1dCB3aWR0aC0xMDAgc2ItZm9ybS1jb250cm9sXCIgaWQ9XCJ3bWQtaW5wdXRcIiBbKG5nTW9kZWwpXT1cInJlamVjdENvbW1lbnRcIiBwbGFjZWhvbGRlcj1cIkFkZCBjb21tZW50XCIgbmFtZT1cInJlamVjdENvbW1lbnRcIiByZXF1aXJlZCBtYXhsZW5ndGg9XCJ7e2NvbmZpZ1NlcnZpY2U/LmVkaXRvckNvbmZpZz8ucmVqZWN0Q29tbWVudHNNYXhMZW5ndGh9fVwiPjwvdGV4dGFyZWE+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInVpIGJhc2ljIHJlZCBlcnJvciBsYWJlbCBwdC0xIG10LTUgd2lkdGgtMTAwXCJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiRm9ybUNvbnRyb2wuZm9ybS5jb250cm9scy5yZWplY3RDb21tZW50Py50b3VjaGVkICYmICFGb3JtQ29udHJvbC5mb3JtLnZhbGlkXCI+e3tjb25maWdTZXJ2aWNlLmxhYmVsQ29uZmlnPy5sYmw/LmZpbGxDb21tZW50c319IDwvbGFiZWw+XG5cbiAgICAgICAgICAgICAgPCEtLSA8dGV4dGFyZWEgcm93cz1cIjRcIiBuYW1lPVwibW9yZXRleHRcIiBjbGFzcz1cInNiLWZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyPVwiVHlwZSBoZXJlLi4uXCI+PC90ZXh0YXJlYT5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGFyYWN0ZXJzLWxlZnRcIj4xMDAwIENoYXJhY3RlcnMgbGVmdDwvc3Bhbj4gLS0+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJzYi1tb2RhbC1hY3Rpb25zXCI+XG4gICAgPGJ1dHRvbiBpZD1cInN1Ym1pdFJldmlld1wiIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cInNiLWJ0biBzYi1idG4tbm9ybWFsXCIgW25nQ2xhc3NdPVwieydzYi1idG4tcHJpbWFyeSc6IEZvcm1Db250cm9sLmZvcm0udmFsaWQsICdzYi1idG4tZGlzYWJsZWQnOiAhRm9ybUNvbnRyb2wuZm9ybS52YWxpZH1cIiAoY2xpY2spPVwiYnV0dG9uRW1pdHRlcih7dHlwZTogYWN0aW9uVHlwZSwgY29tbWVudDogcmVqZWN0Q29tbWVudH0pOyBzaG93UmVxdWVzdENoYW5nZXNQb3B1cCA9IGZhbHNlO1wiXG4gICAgW2Rpc2FibGVkXT1cIiFGb3JtQ29udHJvbC5mb3JtLnZhbGlkXCIgbGliVGVsZW1ldHJ5SW50ZXJhY3RcbiAgICBbdGVsZW1ldHJ5SW50ZXJhY3RFZGF0YV09XCJ0ZWxlbWV0cnlTZXJ2aWNlLmdldFRlbGVtZXRyeUludGVyYWN0RWRhdGEoJ3N1Ym1pdF9yZXZpZXcnLCdjbGljaycsJ3N1Ym1pdCcsIHRlbGVtZXRyeVNlcnZpY2UudGVsZW1ldHJ5UGFnZUlkLCB7a2V5OiAnZGlhbG9nX2lkJywgdmFsdWU6ICdhZGRfcmV2aWV3X2NvbW1lbnRzJ30pXCJcbiAgICA+IHt7Y29uZmlnU2VydmljZS5sYWJlbENvbmZpZz8uYnV0dG9uX2xhYmVscz8uc3VibWl0X3Jldmlld19idG5fbGFiZWx9fSA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIGNsYXNzPVwic2ItYnRuIHNiLWJ0bi1ub3JtYWwgc2ItYnRuLW91dGxpbmUtcHJpbWFyeVwiIChjbGljayk9XCJtb2RhbC5kZW55KCdkZW5pZWQnKVwiXG4gICAgbGliVGVsZW1ldHJ5SW50ZXJhY3QgW3RlbGVtZXRyeUludGVyYWN0RWRhdGFdPVwidGVsZW1ldHJ5U2VydmljZS5nZXRUZWxlbWV0cnlJbnRlcmFjdEVkYXRhKCdjYW5jZWwnLCdjbGljaycsJ2NhbmNlbCcsIHRlbGVtZXRyeVNlcnZpY2UudGVsZW1ldHJ5UGFnZUlkLCAge2tleTogJ2RpYWxvZ19pZCcsIHZhbHVlOiAnYWRkX3Jldmlld19jb21tZW50cyd9KVwiPnt7Y29uZmlnU2VydmljZS5sYWJlbENvbmZpZz8uYnV0dG9uX2xhYmVscz8uY2FuY2VsX2J0bl9sYWJlbH19PC9idXR0b24+XG4gIDwvZGl2PlxuPC9mb3JtPlxuPC9zdWktbW9kYWw+XG5cblxuXG48bGliLXB1Ymxpc2gtY2hlY2tsaXN0ICpuZ0lmPVwic2hvd1B1Ymxpc2hDb2xsZWN0aW9uUG9wdXBcIiBbYWN0aW9uVHlwZV09XCJhY3Rpb25UeXBlXCIgW3B1Ymxpc2hjaGVja2xpc3RdPVwicHVibGlzaGNoZWNrbGlzdFwiIFxuIChwdWJsaXNoRW1pdHRlcik9XCJwdWJsaXNoRW1pdHRlcigkZXZlbnQpXCI+XG48L2xpYi1wdWJsaXNoLWNoZWNrbGlzdD5cblxuXG4iXX0=
|